char-cjk.lua /size: 53 Kb    last modification: 2025-02-21 11:03
1if not modules then modules = { } end modules ['char-cjk'] = {
2    version   = 1.001,
3    comment   = "companion to char-ini.mkiv",
4    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
5    copyright = "PRAGMA ADE / ConTeXt Development Team",
6    license   = "see context related readme files"
7}
8
9local setmetatable, next = setmetatable, next
10local floor = math.floor
11local formatters = string.formatters
12
13local setmetatableindex = table.setmetatableindex
14
15characters     = characters or { }
16local ranges   = characters.ranges or { }
17local allocate = utilities.storage.allocate
18
19-- Hangul Syllable
20
21do
22
23    -- The following conversion is taken from unicode.org/reports/tr15/tr15-23.html#Hangul
24    -- but adapted to our needs.
25
26    -- local SBase = 0xAC00
27    --
28    -- local LBase, LCount = 0x1100, 19
29    -- local VBase, VCount = 0x1161, 21
30    -- local TBase, TCount = 0x11A7, 28
31    --
32    -- local NCount = VCount * TCount
33    -- local SCount = LCount * NCount
34    --
35    -- local function decomposed(unicode)
36    --     local SIndex = unicode - SBase
37    --     if SIndex >= 0 and SIndex < SCount then
38    --         local lead_consonant = LBase + floor( SIndex / NCount)
39    --         local medial_vowel   = VBase + floor((SIndex % NCount) / TCount)
40    --         local tail_consonant = TBase +        SIndex % TCount
41    --         if tail_consonant ~= TBase then
42    --             return lead_consonant, medial_vowel, tail_consonant
43    --         else
44    --             return lead_consonant, medial_vowel
45    --         end
46    --     end
47    -- end
48    --
49    -- Lua will optimize the inline constants so the next variant is
50    -- 10% faster. In practice this will go unnoticed, but it's also less
51    -- code, so let's do it. Pushing the constant section into the
52    -- function body saves 5%.
53
54    local function decomposed(unicode)
55        local index = unicode - 0xAC00
56        if index >= 0 and index < 19 * 21 * 28 then
57            local lead_consonant = 0x1100 + floor( index / (21 * 28))
58            local medial_vowel   = 0x1161 + floor((index % (21 * 28)) / 28)
59            local tail_consonant = 0x11A7 +        index % 28
60            if tail_consonant ~= 0x11A7 then
61                return lead_consonant, medial_vowel, tail_consonant
62            else
63                return lead_consonant, medial_vowel
64            end
65        end
66    end
67
68    local lead_consonants = { [0] =
69        "G", "GG", "N", "D", "DD", "R", "M", "B", "BB",
70        "S", "SS", "", "J", "JJ", "C", "K", "T", "P", "H"
71    }
72
73    local medial_vowels = { [0] =
74        "A", "AE", "YA", "YAE", "EO", "E", "YEO", "YE", "O",
75        "WA", "WAE", "OE", "YO", "U", "WEO", "WE", "WI",
76        "YU", "EU", "YI", "I"
77    }
78
79    local tail_consonants = { [0] =
80        "", "G", "GG", "GS", "N", "NJ", "NH", "D", "L", "LG", "LM",
81        "LB", "LS", "LT", "LP", "LH", "M", "B", "BS",
82        "S", "SS", "NG", "J", "C", "K", "T", "P", "H"
83    }
84
85    -- local function description(unicode)
86    --     local index = unicode - 0xAC00
87    --     if index >= 0 and index < 19 * 21 * 28 then
88    --         local lead_consonant = floor( index / NCount)
89    --         local medial_vowel   = floor((index % NCount) / TCount)
90    --         local tail_consonant =        index % TCount
91    --         return formatters["HANGUL SYLLABLE %s%s%s"](
92    --             lead_consonants[lead_consonant],
93    --             medial_vowels  [medial_vowel  ],
94    --             tail_consonants[tail_consonant]
95    --         )
96    --     end
97    -- end
98
99    local function description(unicode)
100        local index = unicode - 0xAC00
101        if index >= 0 and index < 19 * 21 * 28 then
102            local lead_consonant = floor( index / (21 * 28))
103            local medial_vowel   = floor((index % (21 * 28)) / 28)
104            local tail_consonant =        index % 28
105            return formatters["HANGUL SYLLABLE %s%s%s"](
106                lead_consonants[lead_consonant],
107                medial_vowels  [medial_vowel  ],
108                tail_consonants[tail_consonant]
109            )
110        end
111    end
112
113    -- so far
114
115    -- We have a [lead consonant,medial vowel,tail consonant] where the last one
116    -- is optional. For sort ranges we need the first one but some are collapsed.
117    -- Beware, we map to modern so the font should support it.
118
119    local function leadconsonant(unicode)
120        return
121     -- unicode  < 0xAC00 and nil       -- original
122     -- unicode  > 0xD7AF and nil    or -- original
123        unicode >= 0xD558 and 0x314E or -- 하 => ㅎ
124        unicode >= 0xD30C and 0x314D or -- 파 => ㅍ
125        unicode >= 0xD0C0 and 0x314C or -- 타 => ㅌ
126        unicode >= 0xCE74 and 0x314B or -- 카 => ㅋ
127        unicode >= 0xCC28 and 0x314A or -- 차 => ㅊ
128        unicode >= 0xC790 and 0x3148 or -- 자 => ㅈ
129        unicode >= 0xC544 and 0x3147 or -- 아 => ㅇ
130        unicode >= 0xC0AC and 0x3145 or -- 사 => ㅅ
131        unicode >= 0xBC14 and 0x3142 or -- 바 => ㅂ
132        unicode >= 0xB9C8 and 0x3141 or -- 마 => ㅁ
133        unicode >= 0xB77C and 0x3139 or -- 라 => ㄹ
134        unicode >= 0xB2E4 and 0x3137 or -- 다 => ㄷ
135        unicode >= 0xB098 and 0x3134 or -- 나 => ㄴ
136        unicode >= 0xAC00 and 0x3131 or -- 가 => ㄱ
137                              nil       -- can't happen
138    end
139
140    local remapped = { -- this might be merged into char-def.lua
141        [0x1100] = 0x3131, -- G
142        [0x1101] = 0x3132, -- GG
143        [0x1102] = 0x3134, -- N
144        [0x1103] = 0x3137, -- D
145        [0x1104] = 0x3138, -- DD
146        [0x1105] = 0x3139, -- R
147     -- [0X111A] = 0x3140, -- LH used for last sound
148        [0x1106] = 0x3141, -- M
149        [0x1107] = 0x3142, -- B
150        [0x1108] = 0x3143, -- BB
151     -- [0x1121] = 0x3144, -- BS used for last sound
152        [0x1109] = 0x3145, -- S
153        [0x110A] = 0x3146, -- SS
154        [0x110B] = 0x3147, -- (IEUNG) no sound but has form
155        [0x110C] = 0x3148, -- J
156        [0x110D] = 0x3149, -- JJ
157        [0x110E] = 0x314A, -- C
158        [0x110F] = 0x314B, -- K
159        [0x1110] = 0x314C, -- T
160        [0x1111] = 0x314D, -- P
161        [0x1112] = 0x314E, -- H
162
163        [0x1161] = 0x314F, -- A
164        [0x1162] = 0x3150, -- AE
165        [0x1163] = 0x3151, -- YA
166        [0x1164] = 0x3152, -- YAE
167        [0x1165] = 0x3153, -- EO
168        [0x1166] = 0x3154, -- E
169        [0x1167] = 0x3155, -- YEO
170        [0x1168] = 0x3156, -- YE
171        [0x1169] = 0x3157, -- O
172        [0x116A] = 0x3158, -- WA
173        [0x116B] = 0x3159, -- WAE
174        [0x116C] = 0x315A, -- OE
175        [0x116D] = 0x315B, -- YO
176        [0x116E] = 0x315C, -- U
177        [0x116F] = 0x315D, -- WEO
178        [0x1170] = 0x315E, -- WE
179        [0x1171] = 0x315F, -- WI
180        [0x1172] = 0x3160, -- YU
181        [0x1173] = 0x3161, -- EU
182        [0x1174] = 0x3162, -- YI
183        [0x1175] = 0x3163, -- I
184
185        [0x11A8] = 0x3131, -- G
186        [0x11A9] = 0x3132, -- GG
187        [0x11AA] = 0x3133, -- GS
188        [0x11AB] = 0x3134, -- N
189        [0x11AC] = 0x3135, -- NJ
190        [0x11AD] = 0x3136, -- NH
191        [0x11AE] = 0x3137, -- D
192        [0x11AF] = 0x3139, -- L
193        [0x11B0] = 0x313A, -- LG
194        [0x11B1] = 0x313B, -- LM
195        [0x11B2] = 0x313C, -- LB
196        [0x11B3] = 0x313D, -- LS
197        [0x11B4] = 0x313E, -- LT
198        [0x11B5] = 0x313F, -- LP
199        [0x11B6] = 0x3140, -- LH
200        [0x11B7] = 0x3141, -- M
201        [0x11B8] = 0x3142, -- B
202        [0x11B9] = 0x3144, -- BS
203        [0x11BA] = 0x3145, -- S
204        [0x11BB] = 0x3146, -- SS
205        [0x11BC] = 0x3147, -- NG
206        [0x11BD] = 0x3148, -- J
207        [0x11BE] = 0x314A, -- C
208        [0x11BF] = 0x314B, -- K
209        [0x11C0] = 0x314C, -- T
210        [0x11C1] = 0x314D, -- P
211        [0x11C2] = 0x314E, -- H
212    }
213
214    characters.hangul = allocate {
215        decomposed    = decomposed,
216        description   = description,
217        leadconsonant = leadconsonant,
218        remapped      = remapped,
219    }
220
221    function characters.remap_hangul_syllabe(t)
222        local tt = type(t)
223        if tt == "number" then
224            return remapped[t] or t
225        elseif tt == "table" then
226            local r = { }
227            for i=1,#t do
228                local ti = t[i]
229                r[i] = remapped[ti] or ti
230            end
231            return r
232        else
233            return t
234        end
235    end
236
237    -- so far
238
239    local common = {
240        category    = "lo",
241        cjkwd       = "w",
242        description = "<Hangul Syllable>",
243        direction   = "l",
244        linebreak   = "h2",
245    }
246
247    local metatable = {
248        __index = function(t,k)
249            local u = t.unicodeslot
250            if k == "fscode" or k == "leadconsonant" then
251                return leadconsonant(u)
252            elseif k == "decomposed" then
253                return { decomposed(u) }
254            elseif k == "specials" then
255                return { "char", decomposed(u) }
256            elseif k == "description" then
257                return description(u)
258            else
259                return common[k]
260            end
261        end
262    }
263
264    local function extender(k)
265        local t = {
266            unicodeslot = k,
267        }
268        setmetatable(t,metatable)
269        return t
270    end
271
272    local range = {
273        name     = "hangul",
274        first    = 0xAC00,
275        last     = 0xD7A3,
276        extender = extender,
277    }
278
279    setmetatable(range,metatable) -- hm
280
281    ranges[#ranges+1] = range
282
283end
284
285-- CJK Ideograph : we need to check it
286
287do
288
289    local knownvariants = {
290        [0x0349E] = { [0x0FE00] = 0x2F80C },
291        [0x034B9] = { [0x0FE00] = 0x2F813 },
292        [0x034BB] = { [0x0FE00] = 0x2F9CA },
293        [0x034DF] = { [0x0FE00] = 0x2F81F },
294        [0x03515] = { [0x0FE00] = 0x2F824 },
295        [0x036EE] = { [0x0FE00] = 0x2F867 },
296        [0x036FC] = { [0x0FE00] = 0x2F868 },
297        [0x03781] = { [0x0FE00] = 0x2F876 },
298        [0x0382F] = { [0x0FE00] = 0x2F883 },
299        [0x03862] = { [0x0FE00] = 0x2F888 },
300        [0x0387C] = { [0x0FE00] = 0x2F88A },
301        [0x038C7] = { [0x0FE00] = 0x2F896 },
302        [0x038E3] = { [0x0FE00] = 0x2F89B },
303        [0x0391C] = { [0x0FE00] = 0x2F8A2 },
304        [0x0393A] = { [0x0FE00] = 0x2F8A1 },
305        [0x03A2E] = { [0x0FE00] = 0x2F8C2 },
306        [0x03A6C] = { [0x0FE00] = 0x2F8C7 },
307        [0x03AE4] = { [0x0FE00] = 0x2F8D1 },
308        [0x03B08] = { [0x0FE00] = 0x2F8D0 },
309        [0x03B19] = { [0x0FE00] = 0x2F8CE },
310        [0x03B49] = { [0x0FE00] = 0x2F8DE },
311        [0x03B9D] = { [0x0FE00] = 0x0FAD2, [0x0FE01] = 0x2F8E7 },
312        [0x03C18] = { [0x0FE00] = 0x2F8EE },
313        [0x03C4E] = { [0x0FE00] = 0x2F8F2 },
314        [0x03D33] = { [0x0FE00] = 0x2F90A },
315        [0x03D96] = { [0x0FE00] = 0x2F916 },
316        [0x03EAC] = { [0x0FE00] = 0x2F92A },
317        [0x03EB8] = { [0x0FE00] = 0x2F92C, [0x0FE01] = 0x2F92D },
318        [0x03F1B] = { [0x0FE00] = 0x2F933 },
319        [0x03FFC] = { [0x0FE00] = 0x2F93E },
320        [0x04008] = { [0x0FE00] = 0x2F93F },
321        [0x04018] = { [0x0FE00] = 0x0FAD3 },
322        [0x04039] = { [0x0FE00] = 0x0FAD4, [0x0FE01] = 0x2F949 },
323        [0x04046] = { [0x0FE00] = 0x2F94B },
324        [0x04096] = { [0x0FE00] = 0x2F94C },
325        [0x040E3] = { [0x0FE00] = 0x2F951 },
326        [0x0412F] = { [0x0FE00] = 0x2F958 },
327        [0x04202] = { [0x0FE00] = 0x2F960 },
328        [0x04227] = { [0x0FE00] = 0x2F964 },
329        [0x042A0] = { [0x0FE00] = 0x2F967 },
330        [0x04301] = { [0x0FE00] = 0x2F96D },
331        [0x04334] = { [0x0FE00] = 0x2F971 },
332        [0x04359] = { [0x0FE00] = 0x2F974 },
333        [0x043D5] = { [0x0FE00] = 0x2F981 },
334        [0x043D9] = { [0x0FE00] = 0x2F8D7 },
335        [0x0440B] = { [0x0FE00] = 0x2F984 },
336        [0x0446B] = { [0x0FE00] = 0x2F98E },
337        [0x0452B] = { [0x0FE00] = 0x2F9A7 },
338        [0x0455D] = { [0x0FE00] = 0x2F9AE },
339        [0x04561] = { [0x0FE00] = 0x2F9AF },
340        [0x0456B] = { [0x0FE00] = 0x2F9B2 },
341        [0x045D7] = { [0x0FE00] = 0x2F9BF },
342        [0x045F9] = { [0x0FE00] = 0x2F9C2 },
343        [0x04635] = { [0x0FE00] = 0x2F9C8 },
344        [0x046BE] = { [0x0FE00] = 0x2F9CD },
345        [0x046C7] = { [0x0FE00] = 0x2F9CE },
346        [0x04995] = { [0x0FE00] = 0x2F9EF },
347        [0x049E6] = { [0x0FE00] = 0x2F9F2 },
348        [0x04A6E] = { [0x0FE00] = 0x2F9F8 },
349        [0x04A76] = { [0x0FE00] = 0x2F9F9 },
350        [0x04AB2] = { [0x0FE00] = 0x2F9FC },
351        [0x04B33] = { [0x0FE00] = 0x2FA03 },
352        [0x04BCE] = { [0x0FE00] = 0x2FA08 },
353        [0x04CCE] = { [0x0FE00] = 0x2FA0D },
354        [0x04CED] = { [0x0FE00] = 0x2FA0E },
355        [0x04CF8] = { [0x0FE00] = 0x2FA11 },
356        [0x04D56] = { [0x0FE00] = 0x2FA16 },
357        [0x04E0D] = { [0x0FE00] = 0x0F967 },
358        [0x04E26] = { [0x0FE00] = 0x0FA70 },
359        [0x04E32] = { [0x0FE00] = 0x0F905 },
360        [0x04E38] = { [0x0FE00] = 0x2F801 },
361        [0x04E39] = { [0x0FE00] = 0x0F95E },
362        [0x04E3D] = { [0x0FE00] = 0x2F800 },
363        [0x04E41] = { [0x0FE00] = 0x2F802 },
364        [0x04E82] = { [0x0FE00] = 0x0F91B },
365        [0x04E86] = { [0x0FE00] = 0x0F9BA },
366        [0x04EAE] = { [0x0FE00] = 0x0F977 },
367        [0x04EC0] = { [0x0FE00] = 0x0F9FD },
368        [0x04ECC] = { [0x0FE00] = 0x2F819 },
369        [0x04EE4] = { [0x0FE00] = 0x0F9A8 },
370        [0x04F60] = { [0x0FE00] = 0x2F804 },
371        [0x04F80] = { [0x0FE00] = 0x0FA73 },
372        [0x04F86] = { [0x0FE00] = 0x0F92D },
373        [0x04F8B] = { [0x0FE00] = 0x0F9B5 },
374        [0x04FAE] = { [0x0FE00] = 0x0FA30, [0x0FE01] = 0x2F805 },
375        [0x04FBB] = { [0x0FE00] = 0x2F806 },
376        [0x04FBF] = { [0x0FE00] = 0x0F965 },
377        [0x05002] = { [0x0FE00] = 0x2F807 },
378        [0x0502B] = { [0x0FE00] = 0x0F9D4 },
379        [0x0507A] = { [0x0FE00] = 0x2F808 },
380        [0x05099] = { [0x0FE00] = 0x2F809 },
381        [0x050CF] = { [0x0FE00] = 0x2F80B },
382        [0x050DA] = { [0x0FE00] = 0x0F9BB },
383        [0x050E7] = { [0x0FE00] = 0x0FA31, [0x0FE01] = 0x2F80A },
384        [0x05140] = { [0x0FE00] = 0x0FA0C },
385        [0x05145] = { [0x0FE00] = 0x0FA74 },
386        [0x0514D] = { [0x0FE00] = 0x0FA32, [0x0FE01] = 0x2F80E },
387        [0x05154] = { [0x0FE00] = 0x2F80F },
388        [0x05164] = { [0x0FE00] = 0x2F810 },
389        [0x05167] = { [0x0FE00] = 0x2F814 },
390        [0x05168] = { [0x0FE00] = 0x0FA72 },
391        [0x05169] = { [0x0FE00] = 0x0F978 },
392        [0x0516D] = { [0x0FE00] = 0x0F9D1 },
393        [0x05177] = { [0x0FE00] = 0x2F811 },
394        [0x05180] = { [0x0FE00] = 0x0FA75 },
395        [0x0518D] = { [0x0FE00] = 0x2F815 },
396        [0x05192] = { [0x0FE00] = 0x2F8D2 },
397        [0x05195] = { [0x0FE00] = 0x2F8D3 },
398        [0x05197] = { [0x0FE00] = 0x2F817 },
399        [0x051A4] = { [0x0FE00] = 0x2F818 },
400        [0x051AC] = { [0x0FE00] = 0x2F81A },
401        [0x051B5] = { [0x0FE00] = 0x0FA71, [0x0FE01] = 0x2F81B },
402        [0x051B7] = { [0x0FE00] = 0x0F92E },
403        [0x051C9] = { [0x0FE00] = 0x0F979 },
404        [0x051CC] = { [0x0FE00] = 0x0F955 },
405        [0x051DC] = { [0x0FE00] = 0x0F954 },
406        [0x051DE] = { [0x0FE00] = 0x0FA15 },
407        [0x051F5] = { [0x0FE00] = 0x2F81D },
408        [0x05203] = { [0x0FE00] = 0x2F81E },
409        [0x05207] = { [0x0FE00] = 0x0FA00, [0x0FE01] = 0x2F850 },
410        [0x05217] = { [0x0FE00] = 0x0F99C },
411        [0x05229] = { [0x0FE00] = 0x0F9DD },
412        [0x0523A] = { [0x0FE00] = 0x0F9FF },
413        [0x0523B] = { [0x0FE00] = 0x2F820 },
414        [0x05246] = { [0x0FE00] = 0x2F821 },
415        [0x05272] = { [0x0FE00] = 0x2F822 },
416        [0x05277] = { [0x0FE00] = 0x2F823 },
417        [0x05289] = { [0x0FE00] = 0x0F9C7 },
418        [0x0529B] = { [0x0FE00] = 0x0F98A },
419        [0x052A3] = { [0x0FE00] = 0x0F99D },
420        [0x052B3] = { [0x0FE00] = 0x2F992 },
421        [0x052C7] = { [0x0FE00] = 0x0FA76, [0x0FE01] = 0x2F825 },
422        [0x052C9] = { [0x0FE00] = 0x0FA33, [0x0FE01] = 0x2F826 },
423        [0x052D2] = { [0x0FE00] = 0x0F952 },
424        [0x052DE] = { [0x0FE00] = 0x0F92F },
425        [0x052E4] = { [0x0FE00] = 0x0FA34, [0x0FE01] = 0x2F827 },
426        [0x052F5] = { [0x0FE00] = 0x0F97F },
427        [0x052FA] = { [0x0FE00] = 0x0FA77, [0x0FE01] = 0x2F828 },
428        [0x05305] = { [0x0FE00] = 0x2F829 },
429        [0x05306] = { [0x0FE00] = 0x2F82A },
430        [0x05317] = { [0x0FE00] = 0x0F963, [0x0FE01] = 0x2F82B },
431        [0x0533F] = { [0x0FE00] = 0x0F9EB },
432        [0x05349] = { [0x0FE00] = 0x2F82C },
433        [0x05351] = { [0x0FE00] = 0x0FA35, [0x0FE01] = 0x2F82D },
434        [0x0535A] = { [0x0FE00] = 0x2F82E },
435        [0x05373] = { [0x0FE00] = 0x2F82F },
436        [0x05375] = { [0x0FE00] = 0x0F91C },
437        [0x0537D] = { [0x0FE00] = 0x2F830 },
438        [0x0537F] = { [0x0FE00] = 0x2F831, [0x0FE01] = 0x2F832, [0x0FE02] = 0x2F833 },
439        [0x053C3] = { [0x0FE00] = 0x0F96B },
440        [0x053CA] = { [0x0FE00] = 0x2F836 },
441        [0x053DF] = { [0x0FE00] = 0x2F837 },
442        [0x053E5] = { [0x0FE00] = 0x0F906 },
443        [0x053EB] = { [0x0FE00] = 0x2F839 },
444        [0x053F1] = { [0x0FE00] = 0x2F83A },
445        [0x05406] = { [0x0FE00] = 0x2F83B },
446        [0x0540F] = { [0x0FE00] = 0x0F9DE },
447        [0x0541D] = { [0x0FE00] = 0x0F9ED },
448        [0x05438] = { [0x0FE00] = 0x2F83D },
449        [0x05442] = { [0x0FE00] = 0x0F980 },
450        [0x05448] = { [0x0FE00] = 0x2F83E },
451        [0x05468] = { [0x0FE00] = 0x2F83F },
452        [0x0549E] = { [0x0FE00] = 0x2F83C },
453        [0x054A2] = { [0x0FE00] = 0x2F840 },
454        [0x054BD] = { [0x0FE00] = 0x0F99E },
455        [0x054F6] = { [0x0FE00] = 0x2F841 },
456        [0x05510] = { [0x0FE00] = 0x2F842 },
457        [0x05553] = { [0x0FE00] = 0x2F843 },
458        [0x05555] = { [0x0FE00] = 0x0FA79 },
459        [0x05563] = { [0x0FE00] = 0x2F844 },
460        [0x05584] = { [0x0FE00] = 0x2F845, [0x0FE01] = 0x2F846 },
461        [0x05587] = { [0x0FE00] = 0x0F90B },
462        [0x05599] = { [0x0FE00] = 0x0FA7A, [0x0FE01] = 0x2F847 },
463        [0x0559D] = { [0x0FE00] = 0x0FA36, [0x0FE01] = 0x0FA78 },
464        [0x055AB] = { [0x0FE00] = 0x2F848 },
465        [0x055B3] = { [0x0FE00] = 0x2F849 },
466        [0x055C0] = { [0x0FE00] = 0x0FA0D },
467        [0x055C2] = { [0x0FE00] = 0x2F84A },
468        [0x055E2] = { [0x0FE00] = 0x0FA7B },
469        [0x05606] = { [0x0FE00] = 0x0FA37, [0x0FE01] = 0x2F84C },
470        [0x05651] = { [0x0FE00] = 0x2F84E },
471        [0x05668] = { [0x0FE00] = 0x0FA38 },
472        [0x05674] = { [0x0FE00] = 0x2F84F },
473        [0x056F9] = { [0x0FE00] = 0x0F9A9 },
474        [0x05716] = { [0x0FE00] = 0x2F84B },
475        [0x05717] = { [0x0FE00] = 0x2F84D },
476        [0x0578B] = { [0x0FE00] = 0x2F855 },
477        [0x057CE] = { [0x0FE00] = 0x2F852 },
478        [0x057F4] = { [0x0FE00] = 0x2F853 },
479        [0x0580D] = { [0x0FE00] = 0x2F854 },
480        [0x05831] = { [0x0FE00] = 0x2F857 },
481        [0x05832] = { [0x0FE00] = 0x2F856 },
482        [0x05840] = { [0x0FE00] = 0x0FA39 },
483        [0x0585A] = { [0x0FE00] = 0x0FA10, [0x0FE01] = 0x0FA7C },
484        [0x0585E] = { [0x0FE00] = 0x0F96C },
485        [0x058A8] = { [0x0FE00] = 0x0FA3A },
486        [0x058AC] = { [0x0FE00] = 0x2F858 },
487        [0x058B3] = { [0x0FE00] = 0x0FA7D },
488        [0x058D8] = { [0x0FE00] = 0x0F94A },
489        [0x058DF] = { [0x0FE00] = 0x0F942 },
490        [0x058EE] = { [0x0FE00] = 0x2F851 },
491        [0x058F2] = { [0x0FE00] = 0x2F85A },
492        [0x058F7] = { [0x0FE00] = 0x2F85B },
493        [0x05906] = { [0x0FE00] = 0x2F85C },
494        [0x0591A] = { [0x0FE00] = 0x2F85D },
495        [0x05922] = { [0x0FE00] = 0x2F85E },
496        [0x05944] = { [0x0FE00] = 0x0FA7E },
497        [0x05948] = { [0x0FE00] = 0x0F90C },
498        [0x05951] = { [0x0FE00] = 0x0F909 },
499        [0x05954] = { [0x0FE00] = 0x0FA7F },
500        [0x05962] = { [0x0FE00] = 0x2F85F },
501        [0x05973] = { [0x0FE00] = 0x0F981 },
502        [0x059D8] = { [0x0FE00] = 0x2F865 },
503        [0x059EC] = { [0x0FE00] = 0x2F862 },
504        [0x05A1B] = { [0x0FE00] = 0x2F863 },
505        [0x05A27] = { [0x0FE00] = 0x2F864 },
506        [0x05A62] = { [0x0FE00] = 0x0FA80 },
507        [0x05A66] = { [0x0FE00] = 0x2F866 },
508        [0x05AB5] = { [0x0FE00] = 0x2F986 },
509        [0x05B08] = { [0x0FE00] = 0x2F869 },
510        [0x05B28] = { [0x0FE00] = 0x0FA81 },
511        [0x05B3E] = { [0x0FE00] = 0x2F86A, [0x0FE01] = 0x2F86B },
512        [0x05B85] = { [0x0FE00] = 0x0FA04 },
513        [0x05BC3] = { [0x0FE00] = 0x2F86D },
514        [0x05BD8] = { [0x0FE00] = 0x2F86E },
515        [0x05BE7] = { [0x0FE00] = 0x0F95F, [0x0FE01] = 0x0F9AA, [0x0FE02] = 0x2F86F },
516        [0x05BEE] = { [0x0FE00] = 0x0F9BC },
517        [0x05BF3] = { [0x0FE00] = 0x2F870 },
518        [0x05BFF] = { [0x0FE00] = 0x2F872 },
519        [0x05C06] = { [0x0FE00] = 0x2F873 },
520        [0x05C22] = { [0x0FE00] = 0x2F875 },
521        [0x05C3F] = { [0x0FE00] = 0x0F9BD },
522        [0x05C60] = { [0x0FE00] = 0x2F877 },
523        [0x05C62] = { [0x0FE00] = 0x0F94B },
524        [0x05C64] = { [0x0FE00] = 0x0FA3B },
525        [0x05C65] = { [0x0FE00] = 0x0F9DF },
526        [0x05C6E] = { [0x0FE00] = 0x0FA3C, [0x0FE01] = 0x2F878 },
527        [0x05C8D] = { [0x0FE00] = 0x2F87A },
528        [0x05CC0] = { [0x0FE00] = 0x2F879 },
529        [0x05D19] = { [0x0FE00] = 0x0F9D5 },
530        [0x05D43] = { [0x0FE00] = 0x2F87C },
531        [0x05D50] = { [0x0FE00] = 0x0F921 },
532        [0x05D6B] = { [0x0FE00] = 0x2F87F },
533        [0x05D6E] = { [0x0FE00] = 0x2F87E },
534        [0x05D7C] = { [0x0FE00] = 0x2F880 },
535        [0x05DB2] = { [0x0FE00] = 0x2F9F4 },
536        [0x05DBA] = { [0x0FE00] = 0x0F9AB },
537        [0x05DE1] = { [0x0FE00] = 0x2F881 },
538        [0x05DE2] = { [0x0FE00] = 0x2F882 },
539        [0x05DFD] = { [0x0FE00] = 0x2F884 },
540        [0x05E28] = { [0x0FE00] = 0x2F885 },
541        [0x05E3D] = { [0x0FE00] = 0x2F886 },
542        [0x05E69] = { [0x0FE00] = 0x2F887 },
543        [0x05E74] = { [0x0FE00] = 0x0F98E },
544        [0x05EA6] = { [0x0FE00] = 0x0FA01 },
545        [0x05EB0] = { [0x0FE00] = 0x2F88B },
546        [0x05EB3] = { [0x0FE00] = 0x2F88C },
547        [0x05EB6] = { [0x0FE00] = 0x2F88D },
548        [0x05EC9] = { [0x0FE00] = 0x0F9A2 },
549        [0x05ECA] = { [0x0FE00] = 0x0F928, [0x0FE01] = 0x2F88E },
550        [0x05ED2] = { [0x0FE00] = 0x0FA82 },
551        [0x05ED3] = { [0x0FE00] = 0x0FA0B },
552        [0x05ED9] = { [0x0FE00] = 0x0FA83 },
553        [0x05EEC] = { [0x0FE00] = 0x0F982 },
554        [0x05EFE] = { [0x0FE00] = 0x2F890 },
555        [0x05F04] = { [0x0FE00] = 0x0F943 },
556        [0x05F22] = { [0x0FE00] = 0x2F894, [0x0FE01] = 0x2F895 },
557        [0x05F53] = { [0x0FE00] = 0x2F874 },
558        [0x05F62] = { [0x0FE00] = 0x2F899 },
559        [0x05F69] = { [0x0FE00] = 0x0FA84 },
560        [0x05F6B] = { [0x0FE00] = 0x2F89A },
561        [0x05F8B] = { [0x0FE00] = 0x0F9D8 },
562        [0x05F9A] = { [0x0FE00] = 0x2F89C },
563        [0x05FA9] = { [0x0FE00] = 0x0F966 },
564        [0x05FAD] = { [0x0FE00] = 0x0FA85 },
565        [0x05FCD] = { [0x0FE00] = 0x2F89D },
566        [0x05FD7] = { [0x0FE00] = 0x2F89E },
567        [0x05FF5] = { [0x0FE00] = 0x0F9A3 },
568        [0x05FF9] = { [0x0FE00] = 0x2F89F },
569        [0x06012] = { [0x0FE00] = 0x0F960 },
570        [0x0601C] = { [0x0FE00] = 0x0F9AC },
571        [0x06075] = { [0x0FE00] = 0x0FA6B },
572        [0x06081] = { [0x0FE00] = 0x2F8A0 },
573        [0x06094] = { [0x0FE00] = 0x0FA3D, [0x0FE01] = 0x2F8A3 },
574        [0x060C7] = { [0x0FE00] = 0x2F8A5 },
575        [0x060D8] = { [0x0FE00] = 0x0FA86 },
576        [0x060E1] = { [0x0FE00] = 0x0F9B9 },
577        [0x06108] = { [0x0FE00] = 0x0FA88 },
578        [0x06144] = { [0x0FE00] = 0x0F9D9 },
579        [0x06148] = { [0x0FE00] = 0x2F8A6 },
580        [0x0614C] = { [0x0FE00] = 0x2F8A7, [0x0FE01] = 0x2F8A9 },
581        [0x0614E] = { [0x0FE00] = 0x0FA87, [0x0FE01] = 0x2F8A8 },
582        [0x06160] = { [0x0FE00] = 0x0FA8A },
583        [0x06168] = { [0x0FE00] = 0x0FA3E },
584        [0x0617A] = { [0x0FE00] = 0x2F8AA },
585        [0x0618E] = { [0x0FE00] = 0x0FA3F, [0x0FE01] = 0x0FA89, [0x0FE02] = 0x2F8AB },
586        [0x06190] = { [0x0FE00] = 0x0F98F },
587        [0x061A4] = { [0x0FE00] = 0x2F8AD },
588        [0x061AF] = { [0x0FE00] = 0x2F8AE },
589        [0x061B2] = { [0x0FE00] = 0x2F8AC },
590        [0x061DE] = { [0x0FE00] = 0x2F8AF },
591        [0x061F2] = { [0x0FE00] = 0x0FA40, [0x0FE01] = 0x0FA8B, [0x0FE02] = 0x2F8B0 },
592        [0x061F6] = { [0x0FE00] = 0x0F90D, [0x0FE01] = 0x2F8B1 },
593        [0x06200] = { [0x0FE00] = 0x0F990 },
594        [0x06210] = { [0x0FE00] = 0x2F8B2 },
595        [0x0621B] = { [0x0FE00] = 0x2F8B3 },
596        [0x0622E] = { [0x0FE00] = 0x0F9D2 },
597        [0x06234] = { [0x0FE00] = 0x0FA8C },
598        [0x0625D] = { [0x0FE00] = 0x2F8B4 },
599        [0x062B1] = { [0x0FE00] = 0x2F8B5 },
600        [0x062C9] = { [0x0FE00] = 0x0F925 },
601        [0x062CF] = { [0x0FE00] = 0x0F95B },
602        [0x062D3] = { [0x0FE00] = 0x0FA02 },
603        [0x062D4] = { [0x0FE00] = 0x2F8B6 },
604        [0x062FC] = { [0x0FE00] = 0x2F8BA },
605        [0x062FE] = { [0x0FE00] = 0x0F973 },
606        [0x0633D] = { [0x0FE00] = 0x2F8B9 },
607        [0x06350] = { [0x0FE00] = 0x2F8B7 },
608        [0x06368] = { [0x0FE00] = 0x2F8BB },
609        [0x0637B] = { [0x0FE00] = 0x0F9A4 },
610        [0x06383] = { [0x0FE00] = 0x2F8BC },
611        [0x063A0] = { [0x0FE00] = 0x0F975 },
612        [0x063A9] = { [0x0FE00] = 0x2F8C1 },
613        [0x063C4] = { [0x0FE00] = 0x0FA8D },
614        [0x063C5] = { [0x0FE00] = 0x2F8C0 },
615        [0x063E4] = { [0x0FE00] = 0x2F8BD },
616        [0x0641C] = { [0x0FE00] = 0x0FA8E },
617        [0x06422] = { [0x0FE00] = 0x2F8BF },
618        [0x06452] = { [0x0FE00] = 0x0FA8F },
619        [0x06469] = { [0x0FE00] = 0x2F8C3 },
620        [0x06477] = { [0x0FE00] = 0x2F8C6 },
621        [0x0647E] = { [0x0FE00] = 0x2F8C4 },
622        [0x0649A] = { [0x0FE00] = 0x0F991 },
623        [0x0649D] = { [0x0FE00] = 0x2F8C5 },
624        [0x064C4] = { [0x0FE00] = 0x0F930 },
625        [0x0654F] = { [0x0FE00] = 0x0FA41, [0x0FE01] = 0x2F8C8 },
626        [0x06556] = { [0x0FE00] = 0x0FA90 },
627        [0x0656C] = { [0x0FE00] = 0x2F8C9 },
628        [0x06578] = { [0x0FE00] = 0x0F969 },
629        [0x06599] = { [0x0FE00] = 0x0F9BE },
630        [0x065C5] = { [0x0FE00] = 0x0F983 },
631        [0x065E2] = { [0x0FE00] = 0x0FA42 },
632        [0x065E3] = { [0x0FE00] = 0x2F8CB },
633        [0x06613] = { [0x0FE00] = 0x0F9E0 },
634        [0x06649] = { [0x0FE00] = 0x2F8CD },
635        [0x06674] = { [0x0FE00] = 0x0FA12, [0x0FE01] = 0x0FA91 },
636        [0x06688] = { [0x0FE00] = 0x0F9C5 },
637        [0x06691] = { [0x0FE00] = 0x0FA43, [0x0FE01] = 0x2F8CF },
638        [0x0669C] = { [0x0FE00] = 0x2F8D5 },
639        [0x066B4] = { [0x0FE00] = 0x0FA06 },
640        [0x066C6] = { [0x0FE00] = 0x0F98B },
641        [0x066F4] = { [0x0FE00] = 0x0F901 },
642        [0x066F8] = { [0x0FE00] = 0x2F8CC },
643        [0x06700] = { [0x0FE00] = 0x2F8D4 },
644        [0x06717] = { [0x0FE00] = 0x0F929, [0x0FE01] = 0x0FA92, [0x0FE02] = 0x2F8D8 },
645        [0x0671B] = { [0x0FE00] = 0x0FA93, [0x0FE01] = 0x2F8D9 },
646        [0x06721] = { [0x0FE00] = 0x2F8DA },
647        [0x0674E] = { [0x0FE00] = 0x0F9E1 },
648        [0x06753] = { [0x0FE00] = 0x2F8DC },
649        [0x06756] = { [0x0FE00] = 0x0FA94 },
650        [0x0675E] = { [0x0FE00] = 0x2F8DB },
651        [0x0677B] = { [0x0FE00] = 0x0F9C8 },
652        [0x06785] = { [0x0FE00] = 0x2F8E0 },
653        [0x06797] = { [0x0FE00] = 0x0F9F4 },
654        [0x067F3] = { [0x0FE00] = 0x0F9C9 },
655        [0x067FA] = { [0x0FE00] = 0x2F8DF },
656        [0x06817] = { [0x0FE00] = 0x0F9DA },
657        [0x0681F] = { [0x0FE00] = 0x2F8E5 },
658        [0x06852] = { [0x0FE00] = 0x2F8E1 },
659        [0x06881] = { [0x0FE00] = 0x0F97A },
660        [0x06885] = { [0x0FE00] = 0x0FA44, [0x0FE01] = 0x2F8E2 },
661        [0x0688E] = { [0x0FE00] = 0x2F8E4 },
662        [0x068A8] = { [0x0FE00] = 0x0F9E2 },
663        [0x06914] = { [0x0FE00] = 0x2F8E6 },
664        [0x06942] = { [0x0FE00] = 0x2F8E8 },
665        [0x069A3] = { [0x0FE00] = 0x2F8E9 },
666        [0x069EA] = { [0x0FE00] = 0x2F8EA },
667        [0x06A02] = { [0x0FE00] = 0x0F914, [0x0FE01] = 0x0F95C, [0x0FE02] = 0x0F9BF },
668        [0x06A13] = { [0x0FE00] = 0x0F94C },
669        [0x06AA8] = { [0x0FE00] = 0x2F8EB },
670        [0x06AD3] = { [0x0FE00] = 0x0F931 },
671        [0x06ADB] = { [0x0FE00] = 0x2F8ED },
672        [0x06B04] = { [0x0FE00] = 0x0F91D },
673        [0x06B21] = { [0x0FE00] = 0x2F8EF },
674        [0x06B54] = { [0x0FE00] = 0x2F8F1 },
675        [0x06B72] = { [0x0FE00] = 0x2F8F3 },
676        [0x06B77] = { [0x0FE00] = 0x0F98C },
677        [0x06B79] = { [0x0FE00] = 0x0FA95 },
678        [0x06B9F] = { [0x0FE00] = 0x2F8F4 },
679        [0x06BAE] = { [0x0FE00] = 0x0F9A5 },
680        [0x06BBA] = { [0x0FE00] = 0x0F970, [0x0FE01] = 0x0FA96, [0x0FE02] = 0x2F8F5 },
681        [0x06BBB] = { [0x0FE00] = 0x2F8F6 },
682        [0x06C4E] = { [0x0FE00] = 0x2F8FA },
683        [0x06C67] = { [0x0FE00] = 0x2F8FE },
684        [0x06C88] = { [0x0FE00] = 0x0F972 },
685        [0x06CBF] = { [0x0FE00] = 0x2F8FC },
686        [0x06CCC] = { [0x0FE00] = 0x0F968 },
687        [0x06CCD] = { [0x0FE00] = 0x2F8FD },
688        [0x06CE5] = { [0x0FE00] = 0x0F9E3 },
689        [0x06D16] = { [0x0FE00] = 0x2F8FF },
690        [0x06D1B] = { [0x0FE00] = 0x0F915 },
691        [0x06D1E] = { [0x0FE00] = 0x0FA05 },
692        [0x06D34] = { [0x0FE00] = 0x2F907 },
693        [0x06D3E] = { [0x0FE00] = 0x2F900 },
694        [0x06D41] = { [0x0FE00] = 0x0F9CA, [0x0FE01] = 0x0FA97, [0x0FE02] = 0x2F902 },
695        [0x06D69] = { [0x0FE00] = 0x2F903 },
696        [0x06D6A] = { [0x0FE00] = 0x0F92A },
697        [0x06D77] = { [0x0FE00] = 0x0FA45, [0x0FE01] = 0x2F901 },
698        [0x06D78] = { [0x0FE00] = 0x2F904 },
699        [0x06D85] = { [0x0FE00] = 0x2F905 },
700        [0x06DCB] = { [0x0FE00] = 0x0F9F5 },
701        [0x06DDA] = { [0x0FE00] = 0x0F94D },
702        [0x06DEA] = { [0x0FE00] = 0x0F9D6 },
703        [0x06DF9] = { [0x0FE00] = 0x2F90E },
704        [0x06E1A] = { [0x0FE00] = 0x0FA46 },
705        [0x06E2F] = { [0x0FE00] = 0x2F908 },
706        [0x06E6E] = { [0x0FE00] = 0x2F909 },
707        [0x06E9C] = { [0x0FE00] = 0x0F9CB },
708        [0x06EBA] = { [0x0FE00] = 0x0F9EC },
709        [0x06EC7] = { [0x0FE00] = 0x2F90C },
710        [0x06ECB] = { [0x0FE00] = 0x0FA99, [0x0FE01] = 0x2F90B },
711        [0x06ED1] = { [0x0FE00] = 0x0F904 },
712        [0x06EDB] = { [0x0FE00] = 0x0FA98 },
713        [0x06F0F] = { [0x0FE00] = 0x0F94E },
714        [0x06F22] = { [0x0FE00] = 0x0FA47, [0x0FE01] = 0x0FA9A },
715        [0x06F23] = { [0x0FE00] = 0x0F992 },
716        [0x06F6E] = { [0x0FE00] = 0x2F90F },
717        [0x06FC6] = { [0x0FE00] = 0x2F912 },
718        [0x06FEB] = { [0x0FE00] = 0x0F922 },
719        [0x06FFE] = { [0x0FE00] = 0x0F984 },
720        [0x0701B] = { [0x0FE00] = 0x2F915 },
721        [0x0701E] = { [0x0FE00] = 0x0FA9B, [0x0FE01] = 0x2F914 },
722        [0x07039] = { [0x0FE00] = 0x2F913 },
723        [0x0704A] = { [0x0FE00] = 0x2F917 },
724        [0x07070] = { [0x0FE00] = 0x2F835 },
725        [0x07077] = { [0x0FE00] = 0x2F919 },
726        [0x0707D] = { [0x0FE00] = 0x2F918 },
727        [0x07099] = { [0x0FE00] = 0x0F9FB },
728        [0x070AD] = { [0x0FE00] = 0x2F91A },
729        [0x070C8] = { [0x0FE00] = 0x0F99F },
730        [0x070D9] = { [0x0FE00] = 0x0F916 },
731        [0x07145] = { [0x0FE00] = 0x2F91C },
732        [0x07149] = { [0x0FE00] = 0x0F993 },
733        [0x0716E] = { [0x0FE00] = 0x0FA48, [0x0FE01] = 0x0FA9C },
734        [0x0719C] = { [0x0FE00] = 0x2F91E },
735        [0x071CE] = { [0x0FE00] = 0x0F9C0 },
736        [0x071D0] = { [0x0FE00] = 0x0F9EE },
737        [0x07210] = { [0x0FE00] = 0x0F932 },
738        [0x0721B] = { [0x0FE00] = 0x0F91E },
739        [0x07228] = { [0x0FE00] = 0x2F920 },
740        [0x0722B] = { [0x0FE00] = 0x0FA49 },
741        [0x07235] = { [0x0FE00] = 0x0FA9E, [0x0FE01] = 0x2F921 },
742        [0x07250] = { [0x0FE00] = 0x2F922 },
743        [0x07262] = { [0x0FE00] = 0x0F946 },
744        [0x07280] = { [0x0FE00] = 0x2F924 },
745        [0x07295] = { [0x0FE00] = 0x2F925 },
746        [0x072AF] = { [0x0FE00] = 0x0FA9F },
747        [0x072C0] = { [0x0FE00] = 0x0F9FA },
748        [0x072FC] = { [0x0FE00] = 0x0F92B },
749        [0x0732A] = { [0x0FE00] = 0x0FA16, [0x0FE01] = 0x0FAA0 },
750        [0x07375] = { [0x0FE00] = 0x0F9A7 },
751        [0x0737A] = { [0x0FE00] = 0x2F928 },
752        [0x07387] = { [0x0FE00] = 0x0F961, [0x0FE01] = 0x0F9DB },
753        [0x0738B] = { [0x0FE00] = 0x2F929 },
754        [0x073A5] = { [0x0FE00] = 0x2F92B },
755        [0x073B2] = { [0x0FE00] = 0x0F9AD },
756        [0x073DE] = { [0x0FE00] = 0x0F917 },
757        [0x07406] = { [0x0FE00] = 0x0F9E4 },
758        [0x07409] = { [0x0FE00] = 0x0F9CC },
759        [0x07422] = { [0x0FE00] = 0x0FA4A },
760        [0x07447] = { [0x0FE00] = 0x2F92E },
761        [0x0745C] = { [0x0FE00] = 0x2F92F },
762        [0x07469] = { [0x0FE00] = 0x0F9AE },
763        [0x07471] = { [0x0FE00] = 0x0FAA1, [0x0FE01] = 0x2F930 },
764        [0x07485] = { [0x0FE00] = 0x2F931 },
765        [0x07489] = { [0x0FE00] = 0x0F994 },
766        [0x07498] = { [0x0FE00] = 0x0F9EF },
767        [0x074CA] = { [0x0FE00] = 0x2F932 },
768        [0x07506] = { [0x0FE00] = 0x0FAA2 },
769        [0x07524] = { [0x0FE00] = 0x2F934 },
770        [0x0753B] = { [0x0FE00] = 0x0FAA3 },
771        [0x0753E] = { [0x0FE00] = 0x2F936 },
772        [0x07559] = { [0x0FE00] = 0x0F9CD },
773        [0x07565] = { [0x0FE00] = 0x0F976 },
774        [0x07570] = { [0x0FE00] = 0x0F962, [0x0FE01] = 0x2F938 },
775        [0x075E2] = { [0x0FE00] = 0x0F9E5 },
776        [0x07610] = { [0x0FE00] = 0x2F93A },
777        [0x0761D] = { [0x0FE00] = 0x0FAA4 },
778        [0x0761F] = { [0x0FE00] = 0x0FAA5 },
779        [0x07642] = { [0x0FE00] = 0x0F9C1 },
780        [0x07669] = { [0x0FE00] = 0x0F90E },
781        [0x076CA] = { [0x0FE00] = 0x0FA17, [0x0FE01] = 0x0FAA6 },
782        [0x076DB] = { [0x0FE00] = 0x0FAA7 },
783        [0x076E7] = { [0x0FE00] = 0x0F933 },
784        [0x076F4] = { [0x0FE00] = 0x0FAA8, [0x0FE01] = 0x2F940 },
785        [0x07701] = { [0x0FE00] = 0x0F96D },
786        [0x0771E] = { [0x0FE00] = 0x2F945 },
787        [0x0771F] = { [0x0FE00] = 0x2F946, [0x0FE01] = 0x2F947 },
788        [0x07740] = { [0x0FE00] = 0x0FAAA },
789        [0x0774A] = { [0x0FE00] = 0x0FAA9, [0x0FE01] = 0x2F948 },
790        [0x0778B] = { [0x0FE00] = 0x2F94A },
791        [0x077A7] = { [0x0FE00] = 0x0FA9D },
792        [0x0784E] = { [0x0FE00] = 0x2F94E },
793        [0x0786B] = { [0x0FE00] = 0x0F9CE },
794        [0x0788C] = { [0x0FE00] = 0x0F93B, [0x0FE01] = 0x2F94F },
795        [0x07891] = { [0x0FE00] = 0x0FA4B },
796        [0x078CA] = { [0x0FE00] = 0x0F947 },
797        [0x078CC] = { [0x0FE00] = 0x0FAAB, [0x0FE01] = 0x2F950 },
798        [0x078FB] = { [0x0FE00] = 0x0F964 },
799        [0x0792A] = { [0x0FE00] = 0x0F985 },
800        [0x0793C] = { [0x0FE00] = 0x0FA18 },
801        [0x0793E] = { [0x0FE00] = 0x0FA4C },
802        [0x07948] = { [0x0FE00] = 0x0FA4E },
803        [0x07949] = { [0x0FE00] = 0x0FA4D },
804        [0x07950] = { [0x0FE00] = 0x0FA4F },
805        [0x07956] = { [0x0FE00] = 0x0FA50, [0x0FE01] = 0x2F953 },
806        [0x0795D] = { [0x0FE00] = 0x0FA51 },
807        [0x0795E] = { [0x0FE00] = 0x0FA19 },
808        [0x07965] = { [0x0FE00] = 0x0FA1A },
809        [0x0797F] = { [0x0FE00] = 0x0F93C },
810        [0x0798D] = { [0x0FE00] = 0x0FA52 },
811        [0x0798E] = { [0x0FE00] = 0x0FA53 },
812        [0x0798F] = { [0x0FE00] = 0x0FA1B, [0x0FE01] = 0x2F956 },
813        [0x079AE] = { [0x0FE00] = 0x0F9B6 },
814        [0x079CA] = { [0x0FE00] = 0x0F995 },
815        [0x079EB] = { [0x0FE00] = 0x2F957 },
816        [0x07A1C] = { [0x0FE00] = 0x0F956 },
817        [0x07A40] = { [0x0FE00] = 0x0FA54, [0x0FE01] = 0x2F959 },
818        [0x07A4A] = { [0x0FE00] = 0x2F95A },
819        [0x07A4F] = { [0x0FE00] = 0x2F95B },
820        [0x07A81] = { [0x0FE00] = 0x0FA55 },
821        [0x07AB1] = { [0x0FE00] = 0x0FAAC },
822        [0x07ACB] = { [0x0FE00] = 0x0F9F7 },
823        [0x07AEE] = { [0x0FE00] = 0x2F95F },
824        [0x07B20] = { [0x0FE00] = 0x0F9F8 },
825        [0x07BC0] = { [0x0FE00] = 0x0FA56, [0x0FE01] = 0x0FAAD },
826        [0x07BC6] = { [0x0FE00] = 0x2F962 },
827        [0x07BC9] = { [0x0FE00] = 0x2F963 },
828        [0x07C3E] = { [0x0FE00] = 0x0F9A6 },
829        [0x07C60] = { [0x0FE00] = 0x0F944 },
830        [0x07C7B] = { [0x0FE00] = 0x0FAAE },
831        [0x07C92] = { [0x0FE00] = 0x0F9F9 },
832        [0x07CBE] = { [0x0FE00] = 0x0FA1D },
833        [0x07CD2] = { [0x0FE00] = 0x2F966 },
834        [0x07CD6] = { [0x0FE00] = 0x0FA03 },
835        [0x07CE3] = { [0x0FE00] = 0x2F969 },
836        [0x07CE7] = { [0x0FE00] = 0x0F97B },
837        [0x07CE8] = { [0x0FE00] = 0x2F968 },
838        [0x07D00] = { [0x0FE00] = 0x2F96A },
839        [0x07D10] = { [0x0FE00] = 0x0F9CF },
840        [0x07D22] = { [0x0FE00] = 0x0F96A },
841        [0x07D2F] = { [0x0FE00] = 0x0F94F },
842        [0x07D5B] = { [0x0FE00] = 0x0FAAF },
843        [0x07D63] = { [0x0FE00] = 0x2F96C },
844        [0x07DA0] = { [0x0FE00] = 0x0F93D },
845        [0x07DBE] = { [0x0FE00] = 0x0F957 },
846        [0x07DC7] = { [0x0FE00] = 0x2F96E },
847        [0x07DF4] = { [0x0FE00] = 0x0F996, [0x0FE01] = 0x0FA57, [0x0FE02] = 0x0FAB0 },
848        [0x07E02] = { [0x0FE00] = 0x2F96F },
849        [0x07E09] = { [0x0FE00] = 0x0FA58 },
850        [0x07E37] = { [0x0FE00] = 0x0F950 },
851        [0x07E41] = { [0x0FE00] = 0x0FA59 },
852        [0x07E45] = { [0x0FE00] = 0x2F970 },
853        [0x07F3E] = { [0x0FE00] = 0x0FAB1 },
854        [0x07F72] = { [0x0FE00] = 0x0FA5A },
855        [0x07F79] = { [0x0FE00] = 0x0F9E6 },
856        [0x07F7A] = { [0x0FE00] = 0x2F976 },
857        [0x07F85] = { [0x0FE00] = 0x0F90F },
858        [0x07F95] = { [0x0FE00] = 0x2F978 },
859        [0x07F9A] = { [0x0FE00] = 0x0F9AF },
860        [0x07FBD] = { [0x0FE00] = 0x0FA1E },
861        [0x07FFA] = { [0x0FE00] = 0x2F979 },
862        [0x08001] = { [0x0FE00] = 0x0F934 },
863        [0x08005] = { [0x0FE00] = 0x0FA5B, [0x0FE01] = 0x0FAB2, [0x0FE02] = 0x2F97A },
864        [0x08046] = { [0x0FE00] = 0x0F9B0 },
865        [0x08060] = { [0x0FE00] = 0x2F97D },
866        [0x0806F] = { [0x0FE00] = 0x0F997 },
867        [0x08070] = { [0x0FE00] = 0x2F97F },
868        [0x0807E] = { [0x0FE00] = 0x0F945 },
869        [0x0808B] = { [0x0FE00] = 0x0F953 },
870        [0x080AD] = { [0x0FE00] = 0x2F8D6 },
871        [0x080B2] = { [0x0FE00] = 0x2F982 },
872        [0x08103] = { [0x0FE00] = 0x2F983 },
873        [0x0813E] = { [0x0FE00] = 0x2F985 },
874        [0x081D8] = { [0x0FE00] = 0x0F926 },
875        [0x081E8] = { [0x0FE00] = 0x0F9F6 },
876        [0x081ED] = { [0x0FE00] = 0x0FA5C },
877        [0x08201] = { [0x0FE00] = 0x2F893, [0x0FE01] = 0x2F98B },
878        [0x08204] = { [0x0FE00] = 0x2F98C },
879        [0x08218] = { [0x0FE00] = 0x0FA6D },
880        [0x0826F] = { [0x0FE00] = 0x0F97C },
881        [0x08279] = { [0x0FE00] = 0x0FA5D, [0x0FE01] = 0x0FA5E },
882        [0x0828B] = { [0x0FE00] = 0x2F990 },
883        [0x08291] = { [0x0FE00] = 0x2F98F },
884        [0x0829D] = { [0x0FE00] = 0x2F991 },
885        [0x082B1] = { [0x0FE00] = 0x2F993 },
886        [0x082B3] = { [0x0FE00] = 0x2F994 },
887        [0x082BD] = { [0x0FE00] = 0x2F995 },
888        [0x082E5] = { [0x0FE00] = 0x0F974, [0x0FE01] = 0x2F998 },
889        [0x082E6] = { [0x0FE00] = 0x2F996 },
890        [0x0831D] = { [0x0FE00] = 0x2F999 },
891        [0x08323] = { [0x0FE00] = 0x2F99C },
892        [0x08336] = { [0x0FE00] = 0x0F9FE },
893        [0x08352] = { [0x0FE00] = 0x0FAB3 },
894        [0x08353] = { [0x0FE00] = 0x2F9A0 },
895        [0x08363] = { [0x0FE00] = 0x2F99A },
896        [0x083AD] = { [0x0FE00] = 0x2F99B },
897        [0x083BD] = { [0x0FE00] = 0x2F99D },
898        [0x083C9] = { [0x0FE00] = 0x0F93E },
899        [0x083CA] = { [0x0FE00] = 0x2F9A1 },
900        [0x083CC] = { [0x0FE00] = 0x2F9A2 },
901        [0x083DC] = { [0x0FE00] = 0x2F9A3 },
902        [0x083E7] = { [0x0FE00] = 0x2F99E },
903        [0x083EF] = { [0x0FE00] = 0x0FAB4 },
904        [0x083F1] = { [0x0FE00] = 0x0F958 },
905        [0x0843D] = { [0x0FE00] = 0x0F918 },
906        [0x08449] = { [0x0FE00] = 0x0F96E },
907        [0x08457] = { [0x0FE00] = 0x0FA5F, [0x0FE01] = 0x2F99F },
908        [0x084EE] = { [0x0FE00] = 0x0F999 },
909        [0x084F1] = { [0x0FE00] = 0x2F9A8 },
910        [0x084F3] = { [0x0FE00] = 0x2F9A9 },
911        [0x084FC] = { [0x0FE00] = 0x0F9C2 },
912        [0x08516] = { [0x0FE00] = 0x2F9AA },
913        [0x08564] = { [0x0FE00] = 0x2F9AC },
914        [0x085CD] = { [0x0FE00] = 0x0F923 },
915        [0x085FA] = { [0x0FE00] = 0x0F9F0 },
916        [0x08606] = { [0x0FE00] = 0x0F935 },
917        [0x08612] = { [0x0FE00] = 0x0FA20 },
918        [0x0862D] = { [0x0FE00] = 0x0F91F },
919        [0x0863F] = { [0x0FE00] = 0x0F910 },
920        [0x08650] = { [0x0FE00] = 0x2F9B3 },
921        [0x0865C] = { [0x0FE00] = 0x0F936, [0x0FE01] = 0x2F9B4 },
922        [0x08667] = { [0x0FE00] = 0x2F9B5 },
923        [0x08669] = { [0x0FE00] = 0x2F9B6 },
924        [0x08688] = { [0x0FE00] = 0x2F9B8 },
925        [0x086A9] = { [0x0FE00] = 0x2F9B7 },
926        [0x086E2] = { [0x0FE00] = 0x2F9BA },
927        [0x0870E] = { [0x0FE00] = 0x2F9B9 },
928        [0x08728] = { [0x0FE00] = 0x2F9BC },
929        [0x0876B] = { [0x0FE00] = 0x2F9BD },
930        [0x08779] = { [0x0FE00] = 0x0FAB5, [0x0FE01] = 0x2F9BB },
931        [0x08786] = { [0x0FE00] = 0x2F9BE },
932        [0x087BA] = { [0x0FE00] = 0x0F911 },
933        [0x087E1] = { [0x0FE00] = 0x2F9C0 },
934        [0x08801] = { [0x0FE00] = 0x2F9C1 },
935        [0x0881F] = { [0x0FE00] = 0x0F927 },
936        [0x0884C] = { [0x0FE00] = 0x0FA08 },
937        [0x08860] = { [0x0FE00] = 0x2F9C3 },
938        [0x08863] = { [0x0FE00] = 0x2F9C4 },
939        [0x088C2] = { [0x0FE00] = 0x0F9A0 },
940        [0x088CF] = { [0x0FE00] = 0x0F9E7 },
941        [0x088D7] = { [0x0FE00] = 0x2F9C6 },
942        [0x088DE] = { [0x0FE00] = 0x2F9C7 },
943        [0x088E1] = { [0x0FE00] = 0x0F9E8 },
944        [0x088F8] = { [0x0FE00] = 0x0F912 },
945        [0x088FA] = { [0x0FE00] = 0x2F9C9 },
946        [0x08910] = { [0x0FE00] = 0x0FA60 },
947        [0x08941] = { [0x0FE00] = 0x0FAB6 },
948        [0x08964] = { [0x0FE00] = 0x0F924 },
949        [0x08986] = { [0x0FE00] = 0x0FAB7 },
950        [0x0898B] = { [0x0FE00] = 0x0FA0A },
951        [0x08996] = { [0x0FE00] = 0x0FA61, [0x0FE01] = 0x0FAB8 },
952        [0x08AA0] = { [0x0FE00] = 0x2F9CF },
953        [0x08AAA] = { [0x0FE00] = 0x0F96F, [0x0FE01] = 0x0F9A1 },
954        [0x08ABF] = { [0x0FE00] = 0x0FAB9 },
955        [0x08ACB] = { [0x0FE00] = 0x0FABB },
956        [0x08AD2] = { [0x0FE00] = 0x0F97D },
957        [0x08AD6] = { [0x0FE00] = 0x0F941 },
958        [0x08AED] = { [0x0FE00] = 0x0FABE, [0x0FE01] = 0x2F9D0 },
959        [0x08AF8] = { [0x0FE00] = 0x0FA22, [0x0FE01] = 0x0FABA },
960        [0x08AFE] = { [0x0FE00] = 0x0F95D, [0x0FE01] = 0x0FABD },
961        [0x08B01] = { [0x0FE00] = 0x0FA62, [0x0FE01] = 0x0FABC },
962        [0x08B39] = { [0x0FE00] = 0x0FA63, [0x0FE01] = 0x0FABF },
963        [0x08B58] = { [0x0FE00] = 0x0F9FC },
964        [0x08B80] = { [0x0FE00] = 0x0F95A },
965        [0x08B8A] = { [0x0FE00] = 0x0FAC0, [0x0FE01] = 0x2F9D1 },
966        [0x08C48] = { [0x0FE00] = 0x0F900 },
967        [0x08C55] = { [0x0FE00] = 0x2F9D2 },
968        [0x08CAB] = { [0x0FE00] = 0x2F9D4 },
969        [0x08CC1] = { [0x0FE00] = 0x2F9D5 },
970        [0x08CC2] = { [0x0FE00] = 0x0F948 },
971        [0x08CC8] = { [0x0FE00] = 0x0F903 },
972        [0x08CD3] = { [0x0FE00] = 0x0FA64 },
973        [0x08D08] = { [0x0FE00] = 0x0FA65, [0x0FE01] = 0x0FAC1 },
974        [0x08D1B] = { [0x0FE00] = 0x2F9D6 },
975        [0x08D77] = { [0x0FE00] = 0x2F9D7 },
976        [0x08DBC] = { [0x0FE00] = 0x2F9DB },
977        [0x08DCB] = { [0x0FE00] = 0x2F9DA },
978        [0x08DEF] = { [0x0FE00] = 0x0F937 },
979        [0x08DF0] = { [0x0FE00] = 0x2F9DC },
980        [0x08ECA] = { [0x0FE00] = 0x0F902 },
981        [0x08ED4] = { [0x0FE00] = 0x2F9DE },
982        [0x08F26] = { [0x0FE00] = 0x0F998 },
983        [0x08F2A] = { [0x0FE00] = 0x0F9D7 },
984        [0x08F38] = { [0x0FE00] = 0x0FAC2, [0x0FE01] = 0x2F9DF },
985        [0x08F3B] = { [0x0FE00] = 0x0FA07 },
986        [0x08F62] = { [0x0FE00] = 0x0F98D },
987        [0x08F9E] = { [0x0FE00] = 0x2F98D },
988        [0x08FB0] = { [0x0FE00] = 0x0F971 },
989        [0x08FB6] = { [0x0FE00] = 0x0FA66 },
990        [0x09023] = { [0x0FE00] = 0x0F99A },
991        [0x09038] = { [0x0FE00] = 0x0FA25, [0x0FE01] = 0x0FA67 },
992        [0x09072] = { [0x0FE00] = 0x0FAC3 },
993        [0x0907C] = { [0x0FE00] = 0x0F9C3 },
994        [0x0908F] = { [0x0FE00] = 0x0F913 },
995        [0x09094] = { [0x0FE00] = 0x2F9E2 },
996        [0x090CE] = { [0x0FE00] = 0x0F92C },
997        [0x090DE] = { [0x0FE00] = 0x0FA2E },
998        [0x090F1] = { [0x0FE00] = 0x2F9E3 },
999        [0x090FD] = { [0x0FE00] = 0x0FA26 },
1000        [0x09111] = { [0x0FE00] = 0x2F9E4 },
1001        [0x0911B] = { [0x0FE00] = 0x2F9E6 },
1002        [0x0916A] = { [0x0FE00] = 0x0F919 },
1003        [0x09199] = { [0x0FE00] = 0x0FAC4 },
1004        [0x091B4] = { [0x0FE00] = 0x0F9B7 },
1005        [0x091CC] = { [0x0FE00] = 0x0F9E9 },
1006        [0x091CF] = { [0x0FE00] = 0x0F97E },
1007        [0x091D1] = { [0x0FE00] = 0x0F90A },
1008        [0x09234] = { [0x0FE00] = 0x0F9B1 },
1009        [0x09238] = { [0x0FE00] = 0x2F9E7 },
1010        [0x09276] = { [0x0FE00] = 0x0FAC5 },
1011        [0x0927C] = { [0x0FE00] = 0x2F9EA },
1012        [0x092D7] = { [0x0FE00] = 0x2F9E8 },
1013        [0x092D8] = { [0x0FE00] = 0x2F9E9 },
1014        [0x09304] = { [0x0FE00] = 0x0F93F },
1015        [0x0934A] = { [0x0FE00] = 0x0F99B },
1016        [0x093F9] = { [0x0FE00] = 0x2F9EB },
1017        [0x09415] = { [0x0FE00] = 0x2F9EC },
1018        [0x0958B] = { [0x0FE00] = 0x2F9EE },
1019        [0x095AD] = { [0x0FE00] = 0x0F986 },
1020        [0x095B7] = { [0x0FE00] = 0x2F9F0 },
1021        [0x0962E] = { [0x0FE00] = 0x0F9C6 },
1022        [0x0964B] = { [0x0FE00] = 0x0F951 },
1023        [0x0964D] = { [0x0FE00] = 0x0FA09 },
1024        [0x09675] = { [0x0FE00] = 0x0F959 },
1025        [0x09678] = { [0x0FE00] = 0x0F9D3 },
1026        [0x0967C] = { [0x0FE00] = 0x0FAC6 },
1027        [0x09686] = { [0x0FE00] = 0x0F9DC },
1028        [0x096A3] = { [0x0FE00] = 0x0F9F1 },
1029        [0x096B7] = { [0x0FE00] = 0x0FA2F },
1030        [0x096B8] = { [0x0FE00] = 0x0F9B8 },
1031        [0x096C3] = { [0x0FE00] = 0x2F9F3 },
1032        [0x096E2] = { [0x0FE00] = 0x0F9EA },
1033        [0x096E3] = { [0x0FE00] = 0x0FA68, [0x0FE01] = 0x0FAC7 },
1034        [0x096F6] = { [0x0FE00] = 0x0F9B2 },
1035        [0x096F7] = { [0x0FE00] = 0x0F949 },
1036        [0x09723] = { [0x0FE00] = 0x2F9F5 },
1037        [0x09732] = { [0x0FE00] = 0x0F938 },
1038        [0x09748] = { [0x0FE00] = 0x0F9B3 },
1039        [0x09756] = { [0x0FE00] = 0x0FA1C, [0x0FE01] = 0x0FAC8 },
1040        [0x097DB] = { [0x0FE00] = 0x0FAC9 },
1041        [0x097E0] = { [0x0FE00] = 0x2F9FA },
1042        [0x097FF] = { [0x0FE00] = 0x0FA69, [0x0FE01] = 0x0FACA },
1043        [0x0980B] = { [0x0FE00] = 0x0FACB, [0x0FE01] = 0x2F9FE, [0x0FE02] = 0x2F9FF },
1044        [0x09818] = { [0x0FE00] = 0x0F9B4 },
1045        [0x09829] = { [0x0FE00] = 0x2FA00 },
1046        [0x0983B] = { [0x0FE00] = 0x0FA6A, [0x0FE01] = 0x0FACC },
1047        [0x0985E] = { [0x0FE00] = 0x0F9D0 },
1048        [0x098E2] = { [0x0FE00] = 0x2FA02 },
1049        [0x098EF] = { [0x0FE00] = 0x0FA2A },
1050        [0x098FC] = { [0x0FE00] = 0x0FA2B },
1051        [0x09928] = { [0x0FE00] = 0x0FA2C },
1052        [0x09929] = { [0x0FE00] = 0x2FA04 },
1053        [0x099A7] = { [0x0FE00] = 0x2FA05 },
1054        [0x099C2] = { [0x0FE00] = 0x2FA06 },
1055        [0x099F1] = { [0x0FE00] = 0x0F91A },
1056        [0x099FE] = { [0x0FE00] = 0x2FA07 },
1057        [0x09A6A] = { [0x0FE00] = 0x0F987 },
1058        [0x09B12] = { [0x0FE00] = 0x0FACD, [0x0FE01] = 0x2FA0A },
1059        [0x09B6F] = { [0x0FE00] = 0x0F939 },
1060        [0x09C40] = { [0x0FE00] = 0x2FA0B },
1061        [0x09C57] = { [0x0FE00] = 0x0F9F2 },
1062        [0x09CFD] = { [0x0FE00] = 0x2FA0C },
1063        [0x09D67] = { [0x0FE00] = 0x2FA0F },
1064        [0x09DB4] = { [0x0FE00] = 0x0FA2D },
1065        [0x09DFA] = { [0x0FE00] = 0x0F93A },
1066        [0x09E1E] = { [0x0FE00] = 0x0F920 },
1067        [0x09E7F] = { [0x0FE00] = 0x0F940 },
1068        [0x09E97] = { [0x0FE00] = 0x0F988 },
1069        [0x09E9F] = { [0x0FE00] = 0x0F9F3 },
1070        [0x09EBB] = { [0x0FE00] = 0x2FA15 },
1071        [0x09ECE] = { [0x0FE00] = 0x0F989 },
1072        [0x09EF9] = { [0x0FE00] = 0x2FA17 },
1073        [0x09EFE] = { [0x0FE00] = 0x2FA18 },
1074        [0x09F05] = { [0x0FE00] = 0x2FA19 },
1075        [0x09F0F] = { [0x0FE00] = 0x2FA1A },
1076        [0x09F16] = { [0x0FE00] = 0x2FA1B },
1077        [0x09F3B] = { [0x0FE00] = 0x2FA1C },
1078        [0x09F43] = { [0x0FE00] = 0x0FAD8 },
1079        [0x09F8D] = { [0x0FE00] = 0x0F9C4 },
1080        [0x09F8E] = { [0x0FE00] = 0x0FAD9 },
1081        [0x09F9C] = { [0x0FE00] = 0x0F907, [0x0FE01] = 0x0F908, [0x0FE02] = 0x0FACE },
1082        [0x20122] = { [0x0FE00] = 0x2F803 },
1083        [0x2051C] = { [0x0FE00] = 0x2F812 },
1084        [0x20525] = { [0x0FE00] = 0x2F91B },
1085        [0x2054B] = { [0x0FE00] = 0x2F816 },
1086        [0x2063A] = { [0x0FE00] = 0x2F80D },
1087        [0x20804] = { [0x0FE00] = 0x2F9D9 },
1088        [0x208DE] = { [0x0FE00] = 0x2F9DD },
1089        [0x20A2C] = { [0x0FE00] = 0x2F834 },
1090        [0x20B63] = { [0x0FE00] = 0x2F838 },
1091        [0x214E4] = { [0x0FE00] = 0x2F859 },
1092        [0x216A8] = { [0x0FE00] = 0x2F860 },
1093        [0x216EA] = { [0x0FE00] = 0x2F861 },
1094        [0x219C8] = { [0x0FE00] = 0x2F86C },
1095        [0x21B18] = { [0x0FE00] = 0x2F871 },
1096        [0x21D0B] = { [0x0FE00] = 0x2F8F8 },
1097        [0x21DE4] = { [0x0FE00] = 0x2F87B },
1098        [0x21DE6] = { [0x0FE00] = 0x2F87D },
1099        [0x22183] = { [0x0FE00] = 0x2F889 },
1100        [0x2219F] = { [0x0FE00] = 0x2F939 },
1101        [0x22331] = { [0x0FE00] = 0x2F891, [0x0FE01] = 0x2F892 },
1102        [0x226D4] = { [0x0FE00] = 0x2F8A4 },
1103        [0x22844] = { [0x0FE00] = 0x0FAD0 },
1104        [0x2284A] = { [0x0FE00] = 0x0FACF },
1105        [0x22B0C] = { [0x0FE00] = 0x2F8B8 },
1106        [0x22BF1] = { [0x0FE00] = 0x2F8BE },
1107        [0x2300A] = { [0x0FE00] = 0x2F8CA },
1108        [0x232B8] = { [0x0FE00] = 0x2F897 },
1109        [0x2335F] = { [0x0FE00] = 0x2F980 },
1110        [0x23393] = { [0x0FE00] = 0x2F989 },
1111        [0x2339C] = { [0x0FE00] = 0x2F98A },
1112        [0x233C3] = { [0x0FE00] = 0x2F8DD },
1113        [0x233D5] = { [0x0FE00] = 0x0FAD1 },
1114        [0x2346D] = { [0x0FE00] = 0x2F8E3 },
1115        [0x236A3] = { [0x0FE00] = 0x2F8EC },
1116        [0x238A7] = { [0x0FE00] = 0x2F8F0 },
1117        [0x23A8D] = { [0x0FE00] = 0x2F8F7 },
1118        [0x23AFA] = { [0x0FE00] = 0x2F8F9 },
1119        [0x23CBC] = { [0x0FE00] = 0x2F8FB },
1120        [0x23D1E] = { [0x0FE00] = 0x2F906 },
1121        [0x23ED1] = { [0x0FE00] = 0x2F90D },
1122        [0x23F5E] = { [0x0FE00] = 0x2F910 },
1123        [0x23F8E] = { [0x0FE00] = 0x2F911 },
1124        [0x24263] = { [0x0FE00] = 0x2F91D },
1125        [0x242EE] = { [0x0FE00] = 0x0FA6C },
1126        [0x243AB] = { [0x0FE00] = 0x2F91F },
1127        [0x24608] = { [0x0FE00] = 0x2F923 },
1128        [0x24735] = { [0x0FE00] = 0x2F926 },
1129        [0x24814] = { [0x0FE00] = 0x2F927 },
1130        [0x24C36] = { [0x0FE00] = 0x2F935 },
1131        [0x24C92] = { [0x0FE00] = 0x2F937 },
1132        [0x24FA1] = { [0x0FE00] = 0x2F93B },
1133        [0x24FB8] = { [0x0FE00] = 0x2F93C },
1134        [0x25044] = { [0x0FE00] = 0x2F93D },
1135        [0x250F2] = { [0x0FE00] = 0x2F942 },
1136        [0x250F3] = { [0x0FE00] = 0x2F941 },
1137        [0x25119] = { [0x0FE00] = 0x2F943 },
1138        [0x25133] = { [0x0FE00] = 0x2F944 },
1139        [0x25249] = { [0x0FE00] = 0x0FAD5 },
1140        [0x2541D] = { [0x0FE00] = 0x2F94D },
1141        [0x25626] = { [0x0FE00] = 0x2F952 },
1142        [0x2569A] = { [0x0FE00] = 0x2F954 },
1143        [0x256C5] = { [0x0FE00] = 0x2F955 },
1144        [0x2597C] = { [0x0FE00] = 0x2F95C },
1145        [0x25AA7] = { [0x0FE00] = 0x2F95D, [0x0FE01] = 0x2F95E },
1146        [0x25BAB] = { [0x0FE00] = 0x2F961 },
1147        [0x25C80] = { [0x0FE00] = 0x2F965 },
1148        [0x25CD0] = { [0x0FE00] = 0x0FAD6 },
1149        [0x25F86] = { [0x0FE00] = 0x2F96B },
1150        [0x261DA] = { [0x0FE00] = 0x2F898 },
1151        [0x26228] = { [0x0FE00] = 0x2F972 },
1152        [0x26247] = { [0x0FE00] = 0x2F973 },
1153        [0x262D9] = { [0x0FE00] = 0x2F975 },
1154        [0x2633E] = { [0x0FE00] = 0x2F977 },
1155        [0x264DA] = { [0x0FE00] = 0x2F97B },
1156        [0x26523] = { [0x0FE00] = 0x2F97C },
1157        [0x265A8] = { [0x0FE00] = 0x2F97E },
1158        [0x267A7] = { [0x0FE00] = 0x2F987 },
1159        [0x267B5] = { [0x0FE00] = 0x2F988 },
1160        [0x26B3C] = { [0x0FE00] = 0x2F997 },
1161        [0x26C36] = { [0x0FE00] = 0x2F9A4 },
1162        [0x26CD5] = { [0x0FE00] = 0x2F9A6 },
1163        [0x26D6B] = { [0x0FE00] = 0x2F9A5 },
1164        [0x26F2C] = { [0x0FE00] = 0x2F9AD },
1165        [0x26FB1] = { [0x0FE00] = 0x2F9B0 },
1166        [0x270D2] = { [0x0FE00] = 0x2F9B1 },
1167        [0x273CA] = { [0x0FE00] = 0x2F9AB },
1168        [0x27667] = { [0x0FE00] = 0x2F9C5 },
1169        [0x278AE] = { [0x0FE00] = 0x2F9CB },
1170        [0x27966] = { [0x0FE00] = 0x2F9CC },
1171        [0x27CA8] = { [0x0FE00] = 0x2F9D3 },
1172        [0x27ED3] = { [0x0FE00] = 0x0FAD7 },
1173        [0x27F2F] = { [0x0FE00] = 0x2F9D8 },
1174        [0x285D2] = { [0x0FE00] = 0x2F9E0 },
1175        [0x285ED] = { [0x0FE00] = 0x2F9E1 },
1176        [0x2872E] = { [0x0FE00] = 0x2F9E5 },
1177        [0x28BFA] = { [0x0FE00] = 0x2F9ED },
1178        [0x28D77] = { [0x0FE00] = 0x2F9F1 },
1179        [0x29145] = { [0x0FE00] = 0x2F9F6 },
1180        [0x291DF] = { [0x0FE00] = 0x2F81C },
1181        [0x2921A] = { [0x0FE00] = 0x2F9F7 },
1182        [0x2940A] = { [0x0FE00] = 0x2F9FB },
1183        [0x29496] = { [0x0FE00] = 0x2F9FD },
1184        [0x295B6] = { [0x0FE00] = 0x2FA01 },
1185        [0x29B30] = { [0x0FE00] = 0x2FA09 },
1186        [0x2A0CE] = { [0x0FE00] = 0x2FA10 },
1187        [0x2A105] = { [0x0FE00] = 0x2FA12 },
1188        [0x2A20E] = { [0x0FE00] = 0x2FA13 },
1189        [0x2A291] = { [0x0FE00] = 0x2FA14 },
1190        [0x2A392] = { [0x0FE00] = 0x2F88F },
1191        [0x2A600] = { [0x0FE00] = 0x2FA1D },
1192    }
1193
1194    local variants = setmetatableindex(function(t,k)
1195        local kv = knownvariants[k]
1196        if kv then
1197            for k, v in next, kv do
1198                kv[k] = formatters["CJK COMPATIBILITY IDEOGRAPH-%X"](v)
1199            end
1200        end
1201        knownvariants[k] = nil
1202        return kv
1203    end)
1204
1205    do
1206
1207        local common = {
1208            category    = "lo",
1209            cjkwd       = "w",
1210            description = "<CJK IDEOGRAPH>",
1211            direction   = "l",
1212            linebreak   = "id",
1213        }
1214
1215        local metatable = {
1216            __index = common
1217        }
1218
1219        local function extender (k)
1220            local t = {
1221             -- shcode      = shcode,
1222                unicodeslot = k,
1223                variants    = variants[k],
1224             -- description = formatters["CJK IDEOGRAPH-%05X"](k)
1225            }
1226            setmetatable(t,metatable)
1227            return t
1228        end
1229
1230        ranges[#ranges+1] = {
1231            name     = "cjk ideograph",
1232            first    = 0x4E00,
1233            last     = 0x9FBB,
1234            common   = common,
1235            extender = extender,
1236        }
1237
1238    end
1239
1240    -- CJK Ideograph Extension A
1241
1242    do
1243
1244        local common = {
1245            category    = "lo",
1246            cjkwd       = "w",
1247            description = "<CJK Ideograph Extension A>",
1248            direction   = "l",
1249            linebreak   = "id",
1250        }
1251
1252        local metatable = {
1253            __index = common
1254        }
1255
1256        local function extender(k)
1257            local t = {
1258                unicodeslot = k,
1259                variants    = variants[k],
1260             -- description = formatters["CJK IDEOGRAPH-%05X"](k)
1261            }
1262            setmetatable(t,metatable)
1263            return t
1264        end
1265
1266        ranges[#ranges+1] = {
1267            name     = "cjk ideograph extension a",
1268            first    = 0x3400,
1269            last     = 0x4DB5,
1270            common   = common,
1271            extender = extender,
1272        }
1273
1274    end
1275
1276    -- CJK Ideograph Extension B
1277
1278    do
1279
1280        local common = {
1281            category    = "lo",
1282            cjkwd       = "w",
1283            description = "<CJK Ideograph Extension B>",
1284            direction   = "l",
1285            linebreak   = "id",
1286        }
1287
1288        local metatable = {
1289            __index = common
1290        }
1291
1292        local function extender(k)
1293            local t = {
1294             -- shcode      = shcode,
1295                unicodeslot = k,
1296                variants    = variants[k],
1297             -- description = formatters["CJK IDEOGRAPH-%05X"](k)
1298            }
1299            setmetatable(t,metatable)
1300            return t
1301        end
1302
1303        ranges[#ranges+1] = {
1304            name     = "cjk ideograph extension b",
1305            first    = 0x20000,
1306            last     = 0x2A6D6,
1307            common   = common,
1308            extender = extender,
1309        }
1310
1311    end
1312
1313    -- there are many more cjk .. todo
1314
1315end
1316