1 #include "studiox_includes.h"
2 extern "C"{
3 #include "gx_utility.h"
4 }
5
6 static GX_CANONICAL_COMBINING_CLASS gx_studio_canonical_combining_class_table[] = {
7 { 0x0300, 230 },
8 { 0x0301, 230 },
9 { 0x0302, 230 },
10 { 0x0303, 230 },
11 { 0x0304, 230 },
12 { 0x0305, 230 },
13 { 0x0306, 230 },
14 { 0x0307, 230 },
15 { 0x0308, 230 },
16 { 0x0309, 230 },
17 { 0x030A, 230 },
18 { 0x030B, 230 },
19 { 0x030C, 230 },
20 { 0x030D, 230 },
21 { 0x030E, 230 },
22 { 0x030F, 230 },
23 { 0x0310, 230 },
24 { 0x0311, 230 },
25 { 0x0312, 230 },
26 { 0x0313, 230 },
27 { 0x0314, 230 },
28 { 0x0315, 232 },
29 { 0x0316, 220 },
30 { 0x0317, 220 },
31 { 0x0318, 220 },
32 { 0x0319, 220 },
33 { 0x031A, 232 },
34 { 0x031B, 216 },
35 { 0x031C, 220 },
36 { 0x031D, 220 },
37 { 0x031E, 220 },
38 { 0x031F, 220 },
39 { 0x0320, 220 },
40 { 0x0321, 202 },
41 { 0x0322, 202 },
42 { 0x0323, 220 },
43 { 0x0324, 220 },
44 { 0x0325, 220 },
45 { 0x0326, 220 },
46 { 0x0327, 202 },
47 { 0x0328, 202 },
48 { 0x0329, 220 },
49 { 0x032A, 220 },
50 { 0x032B, 220 },
51 { 0x032C, 220 },
52 { 0x032D, 220 },
53 { 0x032E, 220 },
54 { 0x032F, 220 },
55 { 0x0330, 220 },
56 { 0x0331, 220 },
57 { 0x0332, 220 },
58 { 0x0333, 220 },
59 { 0x0334, 1 },
60 { 0x0335, 1 },
61 { 0x0336, 1 },
62 { 0x0337, 1 },
63 { 0x0338, 1 },
64 { 0x0339, 220 },
65 { 0x033A, 220 },
66 { 0x033B, 220 },
67 { 0x033C, 220 },
68 { 0x033D, 230 },
69 { 0x033E, 230 },
70 { 0x033F, 230 },
71 { 0x0340, 230 },
72 { 0x0341, 230 },
73 { 0x0342, 230 },
74 { 0x0343, 230 },
75 { 0x0344, 230 },
76 { 0x0345, 240 },
77 { 0x0346, 230 },
78 { 0x0347, 220 },
79 { 0x0348, 220 },
80 { 0x0349, 220 },
81 { 0x034A, 230 },
82 { 0x034B, 230 },
83 { 0x034C, 230 },
84 { 0x034D, 220 },
85 { 0x034E, 220 },
86 { 0x0350, 230 },
87 { 0x0351, 230 },
88 { 0x0352, 230 },
89 { 0x0353, 220 },
90 { 0x0354, 220 },
91 { 0x0355, 220 },
92 { 0x0356, 220 },
93 { 0x0357, 230 },
94 { 0x0358, 232 },
95 { 0x0359, 220 },
96 { 0x035A, 220 },
97 { 0x035B, 230 },
98 { 0x035C, 233 },
99 { 0x035D, 234 },
100 { 0x035E, 234 },
101 { 0x035F, 233 },
102 { 0x0360, 234 },
103 { 0x0361, 234 },
104 { 0x0362, 233 },
105 { 0x0363, 230 },
106 { 0x0364, 230 },
107 { 0x0365, 230 },
108 { 0x0366, 230 },
109 { 0x0367, 230 },
110 { 0x0368, 230 },
111 { 0x0369, 230 },
112 { 0x036A, 230 },
113 { 0x036B, 230 },
114 { 0x036C, 230 },
115 { 0x036D, 230 },
116 { 0x036E, 230 },
117 { 0x036F, 230 },
118 { 0x0483, 230 },
119 { 0x0484, 230 },
120 { 0x0485, 230 },
121 { 0x0486, 230 },
122 { 0x0487, 230 },
123 { 0x0591, 220 },
124 { 0x0592, 230 },
125 { 0x0593, 230 },
126 { 0x0594, 230 },
127 { 0x0595, 230 },
128 { 0x0596, 220 },
129 { 0x0597, 230 },
130 { 0x0598, 230 },
131 { 0x0599, 230 },
132 { 0x059A, 222 },
133 { 0x059B, 220 },
134 { 0x059C, 230 },
135 { 0x059D, 230 },
136 { 0x059E, 230 },
137 { 0x059F, 230 },
138 { 0x05A0, 230 },
139 { 0x05A1, 230 },
140 { 0x05A2, 220 },
141 { 0x05A3, 220 },
142 { 0x05A4, 220 },
143 { 0x05A5, 220 },
144 { 0x05A6, 220 },
145 { 0x05A7, 220 },
146 { 0x05A8, 230 },
147 { 0x05A9, 230 },
148 { 0x05AA, 220 },
149 { 0x05AB, 230 },
150 { 0x05AC, 230 },
151 { 0x05AD, 222 },
152 { 0x05AE, 228 },
153 { 0x05AF, 230 },
154 { 0x05B0, 10 },
155 { 0x05B1, 11 },
156 { 0x05B2, 12 },
157 { 0x05B3, 13 },
158 { 0x05B4, 14 },
159 { 0x05B5, 15 },
160 { 0x05B6, 16 },
161 { 0x05B7, 17 },
162 { 0x05B8, 18 },
163 { 0x05B9, 19 },
164 { 0x05BA, 19 },
165 { 0x05BB, 20 },
166 { 0x05BC, 21 },
167 { 0x05BD, 22 },
168 { 0x05BF, 23 },
169 { 0x05C1, 24 },
170 { 0x05C2, 25 },
171 { 0x05C4, 230 },
172 { 0x05C5, 220 },
173 { 0x05C7, 18 },
174 { 0x0610, 230 },
175 { 0x0611, 230 },
176 { 0x0612, 230 },
177 { 0x0613, 230 },
178 { 0x0614, 230 },
179 { 0x0615, 230 },
180 { 0x0616, 230 },
181 { 0x0617, 230 },
182 { 0x0618, 30 },
183 { 0x0619, 31 },
184 { 0x061A, 32 },
185 { 0x064B, 27 },
186 { 0x064C, 28 },
187 { 0x064D, 29 },
188 { 0x064E, 30 },
189 { 0x064F, 31 },
190 { 0x0650, 32 },
191 { 0x0651, 33 },
192 { 0x0652, 34 },
193 { 0x0653, 230 },
194 { 0x0654, 230 },
195 { 0x0655, 220 },
196 { 0x0656, 220 },
197 { 0x0657, 230 },
198 { 0x0658, 230 },
199 { 0x0659, 230 },
200 { 0x065A, 230 },
201 { 0x065B, 230 },
202 { 0x065C, 220 },
203 { 0x065D, 230 },
204 { 0x065E, 230 },
205 { 0x065F, 220 },
206 { 0x0670, 35 },
207 { 0x06D6, 230 },
208 { 0x06D7, 230 },
209 { 0x06D8, 230 },
210 { 0x06D9, 230 },
211 { 0x06DA, 230 },
212 { 0x06DB, 230 },
213 { 0x06DC, 230 },
214 { 0x06DF, 230 },
215 { 0x06E0, 230 },
216 { 0x06E1, 230 },
217 { 0x06E2, 230 },
218 { 0x06E3, 220 },
219 { 0x06E4, 230 },
220 { 0x06E7, 230 },
221 { 0x06E8, 230 },
222 { 0x06EA, 220 },
223 { 0x06EB, 230 },
224 { 0x06EC, 230 },
225 { 0x06ED, 220 },
226 { 0x0711, 36 },
227 { 0x0730, 230 },
228 { 0x0731, 220 },
229 { 0x0732, 230 },
230 { 0x0733, 230 },
231 { 0x0734, 220 },
232 { 0x0735, 230 },
233 { 0x0736, 230 },
234 { 0x0737, 220 },
235 { 0x0738, 220 },
236 { 0x0739, 220 },
237 { 0x073A, 230 },
238 { 0x073B, 220 },
239 { 0x073C, 220 },
240 { 0x073D, 230 },
241 { 0x073E, 220 },
242 { 0x073F, 230 },
243 { 0x0740, 230 },
244 { 0x0741, 230 },
245 { 0x0742, 220 },
246 { 0x0743, 230 },
247 { 0x0744, 220 },
248 { 0x0745, 230 },
249 { 0x0746, 220 },
250 { 0x0747, 230 },
251 { 0x0748, 220 },
252 { 0x0749, 230 },
253 { 0x074A, 230 },
254 { 0x07EB, 230 },
255 { 0x07EC, 230 },
256 { 0x07ED, 230 },
257 { 0x07EE, 230 },
258 { 0x07EF, 230 },
259 { 0x07F0, 230 },
260 { 0x07F1, 230 },
261 { 0x07F2, 220 },
262 { 0x07F3, 230 },
263 { 0x07FD, 220 },
264 { 0x0816, 230 },
265 { 0x0817, 230 },
266 { 0x0818, 230 },
267 { 0x0819, 230 },
268 { 0x081B, 230 },
269 { 0x081C, 230 },
270 { 0x081D, 230 },
271 { 0x081E, 230 },
272 { 0x081F, 230 },
273 { 0x0820, 230 },
274 { 0x0821, 230 },
275 { 0x0822, 230 },
276 { 0x0823, 230 },
277 { 0x0825, 230 },
278 { 0x0826, 230 },
279 { 0x0827, 230 },
280 { 0x0829, 230 },
281 { 0x082A, 230 },
282 { 0x082B, 230 },
283 { 0x082C, 230 },
284 { 0x082D, 230 },
285 { 0x0859, 220 },
286 { 0x085A, 220 },
287 { 0x085B, 220 },
288 { 0x08D3, 220 },
289 { 0x08D4, 230 },
290 { 0x08D5, 230 },
291 { 0x08D6, 230 },
292 { 0x08D7, 230 },
293 { 0x08D8, 230 },
294 { 0x08D9, 230 },
295 { 0x08DA, 230 },
296 { 0x08DB, 230 },
297 { 0x08DC, 230 },
298 { 0x08DD, 230 },
299 { 0x08DE, 230 },
300 { 0x08DF, 230 },
301 { 0x08E0, 230 },
302 { 0x08E1, 230 },
303 { 0x08E3, 220 },
304 { 0x08E4, 230 },
305 { 0x08E5, 230 },
306 { 0x08E6, 220 },
307 { 0x08E7, 230 },
308 { 0x08E8, 230 },
309 { 0x08E9, 220 },
310 { 0x08EA, 230 },
311 { 0x08EB, 230 },
312 { 0x08EC, 230 },
313 { 0x08ED, 220 },
314 { 0x08EE, 220 },
315 { 0x08EF, 220 },
316 { 0x08F0, 27 },
317 { 0x08F1, 28 },
318 { 0x08F2, 29 },
319 { 0x08F3, 230 },
320 { 0x08F4, 230 },
321 { 0x08F5, 230 },
322 { 0x08F6, 220 },
323 { 0x08F7, 230 },
324 { 0x08F8, 230 },
325 { 0x08F9, 220 },
326 { 0x08FA, 220 },
327 { 0x08FB, 230 },
328 { 0x08FC, 230 },
329 { 0x08FD, 230 },
330 { 0x08FE, 230 },
331 { 0x08FF, 230 },
332 { 0x093C, 7 },
333 { 0x094D, 9 },
334 { 0x0951, 230 },
335 { 0x0952, 220 },
336 { 0x0953, 230 },
337 { 0x0954, 230 },
338 { 0x09BC, 7 },
339 { 0x09CD, 9 },
340 { 0x09FE, 230 },
341 { 0x0A3C, 7 },
342 { 0x0A4D, 9 },
343 { 0x0ABC, 7 },
344 { 0x0ACD, 9 },
345 { 0x0B3C, 7 },
346 { 0x0B4D, 9 },
347 { 0x0BCD, 9 },
348 { 0x0C4D, 9 },
349 { 0x0C55, 84 },
350 { 0x0C56, 91 },
351 { 0x0CBC, 7 },
352 { 0x0CCD, 9 },
353 { 0x0D3B, 9 },
354 { 0x0D3C, 9 },
355 { 0x0D4D, 9 },
356 { 0x0DCA, 9 },
357 { 0x0E38, 103 },
358 { 0x0E39, 103 },
359 { 0x0E3A, 9 },
360 { 0x0E48, 107 },
361 { 0x0E49, 107 },
362 { 0x0E4A, 107 },
363 { 0x0E4B, 107 },
364 { 0x0EB8, 118 },
365 { 0x0EB9, 118 },
366 { 0x0EC8, 122 },
367 { 0x0EC9, 122 },
368 { 0x0ECA, 122 },
369 { 0x0ECB, 122 },
370 { 0x0F18, 220 },
371 { 0x0F19, 220 },
372 { 0x0F35, 220 },
373 { 0x0F37, 220 },
374 { 0x0F39, 216 },
375 { 0x0F71, 129 },
376 { 0x0F72, 130 },
377 { 0x0F74, 132 },
378 { 0x0F7A, 130 },
379 { 0x0F7B, 130 },
380 { 0x0F7C, 130 },
381 { 0x0F7D, 130 },
382 { 0x0F80, 130 },
383 { 0x0F82, 230 },
384 { 0x0F83, 230 },
385 { 0x0F84, 9 },
386 { 0x0F86, 230 },
387 { 0x0F87, 230 },
388 { 0x0FC6, 220 },
389 { 0x1037, 7 },
390 { 0x1039, 9 },
391 { 0x103A, 9 },
392 { 0x108D, 220 },
393 { 0x135D, 230 },
394 { 0x135E, 230 },
395 { 0x135F, 230 },
396 { 0x1714, 9 },
397 { 0x1734, 9 },
398 { 0x17D2, 9 },
399 { 0x17DD, 230 },
400 { 0x18A9, 228 },
401 { 0x1939, 222 },
402 { 0x193A, 230 },
403 { 0x193B, 220 },
404 { 0x1A17, 230 },
405 { 0x1A18, 220 },
406 { 0x1A60, 9 },
407 { 0x1A75, 230 },
408 { 0x1A76, 230 },
409 { 0x1A77, 230 },
410 { 0x1A78, 230 },
411 { 0x1A79, 230 },
412 { 0x1A7A, 230 },
413 { 0x1A7B, 230 },
414 { 0x1A7C, 230 },
415 { 0x1A7F, 220 },
416 { 0x1AB0, 230 },
417 { 0x1AB1, 230 },
418 { 0x1AB2, 230 },
419 { 0x1AB3, 230 },
420 { 0x1AB4, 230 },
421 { 0x1AB5, 220 },
422 { 0x1AB6, 220 },
423 { 0x1AB7, 220 },
424 { 0x1AB8, 220 },
425 { 0x1AB9, 220 },
426 { 0x1ABA, 220 },
427 { 0x1ABB, 230 },
428 { 0x1ABC, 230 },
429 { 0x1ABD, 220 },
430 { 0x1B34, 7 },
431 { 0x1B44, 9 },
432 { 0x1B6B, 230 },
433 { 0x1B6C, 220 },
434 { 0x1B6D, 230 },
435 { 0x1B6E, 230 },
436 { 0x1B6F, 230 },
437 { 0x1B70, 230 },
438 { 0x1B71, 230 },
439 { 0x1B72, 230 },
440 { 0x1B73, 230 },
441 { 0x1BAA, 9 },
442 { 0x1BAB, 9 },
443 { 0x1BE6, 7 },
444 { 0x1BF2, 9 },
445 { 0x1BF3, 9 },
446 { 0x1C37, 7 },
447 { 0x1CD0, 230 },
448 { 0x1CD1, 230 },
449 { 0x1CD2, 230 },
450 { 0x1CD4, 1 },
451 { 0x1CD5, 220 },
452 { 0x1CD6, 220 },
453 { 0x1CD7, 220 },
454 { 0x1CD8, 220 },
455 { 0x1CD9, 220 },
456 { 0x1CDA, 230 },
457 { 0x1CDB, 230 },
458 { 0x1CDC, 220 },
459 { 0x1CDD, 220 },
460 { 0x1CDE, 220 },
461 { 0x1CDF, 220 },
462 { 0x1CE0, 230 },
463 { 0x1CE2, 1 },
464 { 0x1CE3, 1 },
465 { 0x1CE4, 1 },
466 { 0x1CE5, 1 },
467 { 0x1CE6, 1 },
468 { 0x1CE7, 1 },
469 { 0x1CE8, 1 },
470 { 0x1CED, 220 },
471 { 0x1CF4, 230 },
472 { 0x1CF8, 230 },
473 { 0x1CF9, 230 },
474 { 0x1DC0, 230 },
475 { 0x1DC1, 230 },
476 { 0x1DC2, 220 },
477 { 0x1DC3, 230 },
478 { 0x1DC4, 230 },
479 { 0x1DC5, 230 },
480 { 0x1DC6, 230 },
481 { 0x1DC7, 230 },
482 { 0x1DC8, 230 },
483 { 0x1DC9, 230 },
484 { 0x1DCA, 220 },
485 { 0x1DCB, 230 },
486 { 0x1DCC, 230 },
487 { 0x1DCD, 234 },
488 { 0x1DCE, 214 },
489 { 0x1DCF, 220 },
490 { 0x1DD0, 202 },
491 { 0x1DD1, 230 },
492 { 0x1DD2, 230 },
493 { 0x1DD3, 230 },
494 { 0x1DD4, 230 },
495 { 0x1DD5, 230 },
496 { 0x1DD6, 230 },
497 { 0x1DD7, 230 },
498 { 0x1DD8, 230 },
499 { 0x1DD9, 230 },
500 { 0x1DDA, 230 },
501 { 0x1DDB, 230 },
502 { 0x1DDC, 230 },
503 { 0x1DDD, 230 },
504 { 0x1DDE, 230 },
505 { 0x1DDF, 230 },
506 { 0x1DE0, 230 },
507 { 0x1DE1, 230 },
508 { 0x1DE2, 230 },
509 { 0x1DE3, 230 },
510 { 0x1DE4, 230 },
511 { 0x1DE5, 230 },
512 { 0x1DE6, 230 },
513 { 0x1DE7, 230 },
514 { 0x1DE8, 230 },
515 { 0x1DE9, 230 },
516 { 0x1DEA, 230 },
517 { 0x1DEB, 230 },
518 { 0x1DEC, 230 },
519 { 0x1DED, 230 },
520 { 0x1DEE, 230 },
521 { 0x1DEF, 230 },
522 { 0x1DF0, 230 },
523 { 0x1DF1, 230 },
524 { 0x1DF2, 230 },
525 { 0x1DF3, 230 },
526 { 0x1DF4, 230 },
527 { 0x1DF5, 230 },
528 { 0x1DF6, 232 },
529 { 0x1DF7, 228 },
530 { 0x1DF8, 228 },
531 { 0x1DF9, 220 },
532 { 0x1DFB, 230 },
533 { 0x1DFC, 233 },
534 { 0x1DFD, 220 },
535 { 0x1DFE, 230 },
536 { 0x1DFF, 220 },
537 { 0x20D0, 230 },
538 { 0x20D1, 230 },
539 { 0x20D2, 1 },
540 { 0x20D3, 1 },
541 { 0x20D4, 230 },
542 { 0x20D5, 230 },
543 { 0x20D6, 230 },
544 { 0x20D7, 230 },
545 { 0x20D8, 1 },
546 { 0x20D9, 1 },
547 { 0x20DA, 1 },
548 { 0x20DB, 230 },
549 { 0x20DC, 230 },
550 { 0x20E1, 230 },
551 { 0x20E5, 1 },
552 { 0x20E6, 1 },
553 { 0x20E7, 230 },
554 { 0x20E8, 220 },
555 { 0x20E9, 230 },
556 { 0x20EA, 1 },
557 { 0x20EB, 1 },
558 { 0x20EC, 220 },
559 { 0x20ED, 220 },
560 { 0x20EE, 220 },
561 { 0x20EF, 220 },
562 { 0x20F0, 230 },
563 { 0x2CEF, 230 },
564 { 0x2CF0, 230 },
565 { 0x2CF1, 230 },
566 { 0x2D7F, 9 },
567 { 0x2DE0, 230 },
568 { 0x2DE1, 230 },
569 { 0x2DE2, 230 },
570 { 0x2DE3, 230 },
571 { 0x2DE4, 230 },
572 { 0x2DE5, 230 },
573 { 0x2DE6, 230 },
574 { 0x2DE7, 230 },
575 { 0x2DE8, 230 },
576 { 0x2DE9, 230 },
577 { 0x2DEA, 230 },
578 { 0x2DEB, 230 },
579 { 0x2DEC, 230 },
580 { 0x2DED, 230 },
581 { 0x2DEE, 230 },
582 { 0x2DEF, 230 },
583 { 0x2DF0, 230 },
584 { 0x2DF1, 230 },
585 { 0x2DF2, 230 },
586 { 0x2DF3, 230 },
587 { 0x2DF4, 230 },
588 { 0x2DF5, 230 },
589 { 0x2DF6, 230 },
590 { 0x2DF7, 230 },
591 { 0x2DF8, 230 },
592 { 0x2DF9, 230 },
593 { 0x2DFA, 230 },
594 { 0x2DFB, 230 },
595 { 0x2DFC, 230 },
596 { 0x2DFD, 230 },
597 { 0x2DFE, 230 },
598 { 0x2DFF, 230 },
599 { 0x302A, 218 },
600 { 0x302B, 228 },
601 { 0x302C, 232 },
602 { 0x302D, 222 },
603 { 0x302E, 224 },
604 { 0x302F, 224 },
605 { 0x3099, 8 },
606 { 0x309A, 8 },
607 { 0xA66F, 230 },
608 { 0xA674, 230 },
609 { 0xA675, 230 },
610 { 0xA676, 230 },
611 { 0xA677, 230 },
612 { 0xA678, 230 },
613 { 0xA679, 230 },
614 { 0xA67A, 230 },
615 { 0xA67B, 230 },
616 { 0xA67C, 230 },
617 { 0xA67D, 230 },
618 { 0xA69E, 230 },
619 { 0xA69F, 230 },
620 { 0xA6F0, 230 },
621 { 0xA6F1, 230 },
622 { 0xA806, 9 },
623 { 0xA8C4, 9 },
624 { 0xA8E0, 230 },
625 { 0xA8E1, 230 },
626 { 0xA8E2, 230 },
627 { 0xA8E3, 230 },
628 { 0xA8E4, 230 },
629 { 0xA8E5, 230 },
630 { 0xA8E6, 230 },
631 { 0xA8E7, 230 },
632 { 0xA8E8, 230 },
633 { 0xA8E9, 230 },
634 { 0xA8EA, 230 },
635 { 0xA8EB, 230 },
636 { 0xA8EC, 230 },
637 { 0xA8ED, 230 },
638 { 0xA8EE, 230 },
639 { 0xA8EF, 230 },
640 { 0xA8F0, 230 },
641 { 0xA8F1, 230 },
642 { 0xA92B, 220 },
643 { 0xA92C, 220 },
644 { 0xA92D, 220 },
645 { 0xA953, 9 },
646 { 0xA9B3, 7 },
647 { 0xA9C0, 9 },
648 { 0xAAB0, 230 },
649 { 0xAAB2, 230 },
650 { 0xAAB3, 230 },
651 { 0xAAB4, 220 },
652 { 0xAAB7, 230 },
653 { 0xAAB8, 230 },
654 { 0xAABE, 230 },
655 { 0xAABF, 230 },
656 { 0xAAC1, 230 },
657 { 0xAAF6, 9 },
658 { 0xABED, 9 },
659 { 0xFB1E, 26 },
660 { 0xFE20, 230 },
661 { 0xFE21, 230 },
662 { 0xFE22, 230 },
663 { 0xFE23, 230 },
664 { 0xFE24, 230 },
665 { 0xFE25, 230 },
666 { 0xFE26, 230 },
667 { 0xFE27, 220 },
668 { 0xFE28, 220 },
669 { 0xFE29, 220 },
670 { 0xFE2A, 220 },
671 { 0xFE2B, 220 },
672 { 0xFE2C, 220 },
673 { 0xFE2D, 220 },
674 { 0xFE2E, 230 },
675 { 0xFE2F, 230 },
676 { 0x101FD, 220 },
677 { 0x102E0, 220 },
678 { 0x10376, 230 },
679 { 0x10377, 230 },
680 { 0x10378, 230 },
681 { 0x10379, 230 },
682 { 0x1037A, 230 },
683 { 0x10A0D, 220 },
684 { 0x10A0F, 230 },
685 { 0x10A38, 230 },
686 { 0x10A39, 1 },
687 { 0x10A3A, 220 },
688 { 0x10A3F, 9 },
689 { 0x10AE5, 230 },
690 { 0x10AE6, 220 },
691 { 0x10D24, 230 },
692 { 0x10D25, 230 },
693 { 0x10D26, 230 },
694 { 0x10D27, 230 },
695 { 0x10F46, 220 },
696 { 0x10F47, 220 },
697 { 0x10F48, 230 },
698 { 0x10F49, 230 },
699 { 0x10F4A, 230 },
700 { 0x10F4B, 220 },
701 { 0x10F4C, 230 },
702 { 0x10F4D, 220 },
703 { 0x10F4E, 220 },
704 { 0x10F4F, 220 },
705 { 0x10F50, 220 },
706 { 0x11046, 9 },
707 { 0x1107F, 9 },
708 { 0x110B9, 9 },
709 { 0x110BA, 7 },
710 { 0x11100, 230 },
711 { 0x11101, 230 },
712 { 0x11102, 230 },
713 { 0x11133, 9 },
714 { 0x11134, 9 },
715 { 0x11173, 7 },
716 { 0x111C0, 9 },
717 { 0x111CA, 7 },
718 { 0x11235, 9 },
719 { 0x11236, 7 },
720 { 0x112E9, 7 },
721 { 0x112EA, 9 },
722 { 0x1133B, 7 },
723 { 0x1133C, 7 },
724 { 0x1134D, 9 },
725 { 0x11366, 230 },
726 { 0x11367, 230 },
727 { 0x11368, 230 },
728 { 0x11369, 230 },
729 { 0x1136A, 230 },
730 { 0x1136B, 230 },
731 { 0x1136C, 230 },
732 { 0x11370, 230 },
733 { 0x11371, 230 },
734 { 0x11372, 230 },
735 { 0x11373, 230 },
736 { 0x11374, 230 },
737 { 0x11442, 9 },
738 { 0x11446, 7 },
739 { 0x1145E, 230 },
740 { 0x114C2, 9 },
741 { 0x114C3, 7 },
742 { 0x115BF, 9 },
743 { 0x115C0, 7 },
744 { 0x1163F, 9 },
745 { 0x116B6, 9 },
746 { 0x116B7, 7 },
747 { 0x1172B, 9 },
748 { 0x11839, 9 },
749 { 0x1183A, 7 },
750 { 0x11A34, 9 },
751 { 0x11A47, 9 },
752 { 0x11A99, 9 },
753 { 0x11C3F, 9 },
754 { 0x11D42, 7 },
755 { 0x11D44, 9 },
756 { 0x11D45, 9 },
757 { 0x11D97, 9 },
758 { 0x16AF0, 1 },
759 { 0x16AF1, 1 },
760 { 0x16AF2, 1 },
761 { 0x16AF3, 1 },
762 { 0x16AF4, 1 },
763 { 0x16B30, 230 },
764 { 0x16B31, 230 },
765 { 0x16B32, 230 },
766 { 0x16B33, 230 },
767 { 0x16B34, 230 },
768 { 0x16B35, 230 },
769 { 0x16B36, 230 },
770 { 0x1BC9E, 1 },
771 { 0x1D165, 216 },
772 { 0x1D166, 216 },
773 { 0x1D167, 1 },
774 { 0x1D168, 1 },
775 { 0x1D169, 1 },
776 { 0x1D16D, 226 },
777 { 0x1D16E, 216 },
778 { 0x1D16F, 216 },
779 { 0x1D170, 216 },
780 { 0x1D171, 216 },
781 { 0x1D172, 216 },
782 { 0x1D17B, 220 },
783 { 0x1D17C, 220 },
784 { 0x1D17D, 220 },
785 { 0x1D17E, 220 },
786 { 0x1D17F, 220 },
787 { 0x1D180, 220 },
788 { 0x1D181, 220 },
789 { 0x1D182, 220 },
790 { 0x1D185, 230 },
791 { 0x1D186, 230 },
792 { 0x1D187, 230 },
793 { 0x1D188, 230 },
794 { 0x1D189, 230 },
795 { 0x1D18A, 220 },
796 { 0x1D18B, 220 },
797 { 0x1D1AA, 230 },
798 { 0x1D1AB, 230 },
799 { 0x1D1AC, 230 },
800 { 0x1D1AD, 230 },
801 { 0x1D242, 230 },
802 { 0x1D243, 230 },
803 { 0x1D244, 230 },
804 { 0x1E000, 230 },
805 { 0x1E001, 230 },
806 { 0x1E002, 230 },
807 { 0x1E003, 230 },
808 { 0x1E004, 230 },
809 { 0x1E005, 230 },
810 { 0x1E006, 230 },
811 { 0x1E008, 230 },
812 { 0x1E009, 230 },
813 { 0x1E00A, 230 },
814 { 0x1E00B, 230 },
815 { 0x1E00C, 230 },
816 { 0x1E00D, 230 },
817 { 0x1E00E, 230 },
818 { 0x1E00F, 230 },
819 { 0x1E010, 230 },
820 { 0x1E011, 230 },
821 { 0x1E012, 230 },
822 { 0x1E013, 230 },
823 { 0x1E014, 230 },
824 { 0x1E015, 230 },
825 { 0x1E016, 230 },
826 { 0x1E017, 230 },
827 { 0x1E018, 230 },
828 { 0x1E01B, 230 },
829 { 0x1E01C, 230 },
830 { 0x1E01D, 230 },
831 { 0x1E01E, 230 },
832 { 0x1E01F, 230 },
833 { 0x1E020, 230 },
834 { 0x1E021, 230 },
835 { 0x1E023, 230 },
836 { 0x1E024, 230 },
837 { 0x1E026, 230 },
838 { 0x1E027, 230 },
839 { 0x1E028, 230 },
840 { 0x1E029, 230 },
841 { 0x1E02A, 230 },
842 { 0x1E8D0, 220 },
843 { 0x1E8D1, 220 },
844 { 0x1E8D2, 220 },
845 { 0x1E8D3, 220 },
846 { 0x1E8D4, 220 },
847 { 0x1E8D5, 220 },
848 { 0x1E8D6, 220 },
849 { 0x1E944, 230 },
850 { 0x1E945, 230 },
851 { 0x1E946, 230 },
852 { 0x1E947, 230 },
853 { 0x1E948, 230 },
854 { 0x1E949, 230 },
855 { 0x1E94A, 7 },
856 { 0, 0 }
857 };
858
859 static GX_CANONICAL_DECOMPOSE_MAP gx_studio_canonical_decompose_maps[] = {
860 {0x00C0, {0x0041, 0x0300}},
861 {0x00C1, {0x0041, 0x0301}},
862 {0x00C2, {0x0041, 0x0302}},
863 {0x00C3, {0x0041, 0x0303}},
864 {0x00C4, {0x0041, 0x0308}},
865 {0x00C5, {0x0041, 0x030A}},
866 {0x00C7, {0x0043, 0x0327}},
867 {0x00C8, {0x0045, 0x0300}},
868 {0x00C9, {0x0045, 0x0301}},
869 {0x00CA, {0x0045, 0x0302}},
870 {0x00CB, {0x0045, 0x0308}},
871 {0x00CC, {0x0049, 0x0300}},
872 {0x00CD, {0x0049, 0x0301}},
873 {0x00CE, {0x0049, 0x0302}},
874 {0x00CF, {0x0049, 0x0308}},
875 {0x00D1, {0x004E, 0x0303}},
876 {0x00D2, {0x004F, 0x0300}},
877 {0x00D3, {0x004F, 0x0301}},
878 {0x00D4, {0x004F, 0x0302}},
879 {0x00D5, {0x004F, 0x0303}},
880 { 0x00D6, { 0x004F, 0x0308 } },
881 { 0x00D9, { 0x0055, 0x0300 } },
882 { 0x00DA, { 0x0055, 0x0301 } },
883 { 0x00DB, { 0x0055, 0x0302 } },
884 { 0x00DC, { 0x0055, 0x0308 } },
885 { 0x00DD, { 0x0059, 0x0301 } },
886 { 0x00E0, { 0x0061, 0x0300 } },
887 { 0x00E1, { 0x0061, 0x0301 } },
888 { 0x00E2, { 0x0061, 0x0302 } },
889 { 0x00E3, { 0x0061, 0x0303 } },
890 { 0x00E4, { 0x0061, 0x0308 } },
891 { 0x00E5, { 0x0061, 0x030A } },
892 { 0x00E7, { 0x0063, 0x0327 } },
893 { 0x00E8, { 0x0065, 0x0300 } },
894 { 0x00E9, { 0x0065, 0x0301 } },
895 { 0x00EA, { 0x0065, 0x0302 } },
896 { 0x00EB, { 0x0065, 0x0308 } },
897 { 0x00EC, { 0x0069, 0x0300 } },
898 { 0x00ED, { 0x0069, 0x0301 } },
899 { 0x00EE, { 0x0069, 0x0302 } },
900 { 0x00EF, { 0x0069, 0x0308 } },
901 { 0x00F1, { 0x006E, 0x0303 } },
902 { 0x00F2, { 0x006F, 0x0300 } },
903 { 0x00F3, { 0x006F, 0x0301 } },
904 { 0x00F4, { 0x006F, 0x0302 } },
905 { 0x00F5, { 0x006F, 0x0303 } },
906 { 0x00F6, { 0x006F, 0x0308 } },
907 { 0x00F9, { 0x0075, 0x0300 } },
908 { 0x00FA, { 0x0075, 0x0301 } },
909 { 0x00FB, { 0x0075, 0x0302 } },
910 { 0x00FC, { 0x0075, 0x0308 } },
911 { 0x00FD, { 0x0079, 0x0301 } },
912 { 0x00FF, { 0x0079, 0x0308 } },
913 { 0x0100, { 0x0041, 0x0304 } },
914 { 0x0101, { 0x0061, 0x0304 } },
915 { 0x0102, { 0x0041, 0x0306 } },
916 { 0x0103, { 0x0061, 0x0306 } },
917 { 0x0104, { 0x0041, 0x0328 } },
918 { 0x0105, { 0x0061, 0x0328 } },
919 { 0x0106, { 0x0043, 0x0301 } },
920 { 0x0107, { 0x0063, 0x0301 } },
921 { 0x0108, { 0x0043, 0x0302 } },
922 { 0x0109, { 0x0063, 0x0302 } },
923 { 0x010A, { 0x0043, 0x0307 } },
924 { 0x010B, { 0x0063, 0x0307 } },
925 { 0x010C, { 0x0043, 0x030C } },
926 { 0x010D, { 0x0063, 0x030C } },
927 { 0x010E, { 0x0044, 0x030C } },
928 { 0x010F, { 0x0064, 0x030C } },
929 { 0x0112, { 0x0045, 0x0304 } },
930 { 0x0113, { 0x0065, 0x0304 } },
931 { 0x0114, { 0x0045, 0x0306 } },
932 { 0x0115, { 0x0065, 0x0306 } },
933 { 0x0116, { 0x0045, 0x0307 } },
934 { 0x0117, { 0x0065, 0x0307 } },
935 { 0x0118, { 0x0045, 0x0328 } },
936 { 0x0119, { 0x0065, 0x0328 } },
937 { 0x011A, { 0x0045, 0x030C } },
938 { 0x011B, { 0x0065, 0x030C } },
939 { 0x011C, { 0x0047, 0x0302 } },
940 { 0x011D, { 0x0067, 0x0302 } },
941 { 0x011E, { 0x0047, 0x0306 } },
942 { 0x011F, { 0x0067, 0x0306 } },
943 { 0x0120, { 0x0047, 0x0307 } },
944 { 0x0121, { 0x0067, 0x0307 } },
945 { 0x0122, { 0x0047, 0x0327 } },
946 { 0x0123, { 0x0067, 0x0327 } },
947 { 0x0124, { 0x0048, 0x0302 } },
948 { 0x0125, { 0x0068, 0x0302 } },
949 { 0x0128, { 0x0049, 0x0303 } },
950 { 0x0129, { 0x0069, 0x0303 } },
951 { 0x012A, { 0x0049, 0x0304 } },
952 { 0x012B, { 0x0069, 0x0304 } },
953 { 0x012C, { 0x0049, 0x0306 } },
954 { 0x012D, { 0x0069, 0x0306 } },
955 { 0x012E, { 0x0049, 0x0328 } },
956 { 0x012F, { 0x0069, 0x0328 } },
957 { 0x0130, { 0x0049, 0x0307 } },
958 { 0x0134, { 0x004A, 0x0302 } },
959 { 0x0135, { 0x006A, 0x0302 } },
960 { 0x0136, { 0x004B, 0x0327 } },
961 { 0x0137, { 0x006B, 0x0327 } },
962 { 0x0139, { 0x004C, 0x0301 } },
963 { 0x013A, { 0x006C, 0x0301 } },
964 { 0x013B, { 0x004C, 0x0327 } },
965 { 0x013C, { 0x006C, 0x0327 } },
966 { 0x013D, { 0x004C, 0x030C } },
967 { 0x013E, { 0x006C, 0x030C } },
968 { 0x0143, { 0x004E, 0x0301 } },
969 { 0x0144, { 0x006E, 0x0301 } },
970 { 0x0145, { 0x004E, 0x0327 } },
971 { 0x0146, { 0x006E, 0x0327 } },
972 { 0x0147, { 0x004E, 0x030C } },
973 { 0x0148, { 0x006E, 0x030C } },
974 { 0x014C, { 0x004F, 0x0304 } },
975 { 0x014D, { 0x006F, 0x0304 } },
976 { 0x014E, { 0x004F, 0x0306 } },
977 { 0x014F, { 0x006F, 0x0306 } },
978 { 0x0150, { 0x004F, 0x030B } },
979 { 0x0151, { 0x006F, 0x030B } },
980 { 0x0154, { 0x0052, 0x0301 } },
981 { 0x0155, { 0x0072, 0x0301 } },
982 { 0x0156, { 0x0052, 0x0327 } },
983 { 0x0157, { 0x0072, 0x0327 } },
984 { 0x0158, { 0x0052, 0x030C } },
985 { 0x0159, { 0x0072, 0x030C } },
986 { 0x015A, { 0x0053, 0x0301 } },
987 { 0x015B, { 0x0073, 0x0301 } },
988 { 0x015C, { 0x0053, 0x0302 } },
989 { 0x015D, { 0x0073, 0x0302 } },
990 { 0x015E, { 0x0053, 0x0327 } },
991 { 0x015F, { 0x0073, 0x0327 } },
992 { 0x0160, { 0x0053, 0x030C } },
993 { 0x0161, { 0x0073, 0x030C } },
994 { 0x0162, { 0x0054, 0x0327 } },
995 { 0x0163, { 0x0074, 0x0327 } },
996 { 0x0164, { 0x0054, 0x030C } },
997 { 0x0165, { 0x0074, 0x030C } },
998 { 0x0168, { 0x0055, 0x0303 } },
999 { 0x0169, { 0x0075, 0x0303 } },
1000 { 0x016A, { 0x0055, 0x0304 } },
1001 { 0x016B, { 0x0075, 0x0304 } },
1002 { 0x016C, { 0x0055, 0x0306 } },
1003 { 0x016D, { 0x0075, 0x0306 } },
1004 { 0x016E, { 0x0055, 0x030A } },
1005 { 0x016F, { 0x0075, 0x030A } },
1006 { 0x0170, { 0x0055, 0x030B } },
1007 { 0x0171, { 0x0075, 0x030B } },
1008 { 0x0172, { 0x0055, 0x0328 } },
1009 { 0x0173, { 0x0075, 0x0328 } },
1010 { 0x0174, { 0x0057, 0x0302 } },
1011 { 0x0175, { 0x0077, 0x0302 } },
1012 { 0x0176, { 0x0059, 0x0302 } },
1013 { 0x0177, { 0x0079, 0x0302 } },
1014 { 0x0178, { 0x0059, 0x0308 } },
1015 { 0x0179, { 0x005A, 0x0301 } },
1016 { 0x017A, { 0x007A, 0x0301 } },
1017 { 0x017B, { 0x005A, 0x0307 } },
1018 { 0x017C, { 0x007A, 0x0307 } },
1019 { 0x017D, { 0x005A, 0x030C } },
1020 { 0x017E, { 0x007A, 0x030C } },
1021 { 0x01A0, { 0x004F, 0x031B } },
1022 { 0x01A1, { 0x006F, 0x031B } },
1023 { 0x01AF, { 0x0055, 0x031B } },
1024 { 0x01B0, { 0x0075, 0x031B } },
1025 { 0x01CD, { 0x0041, 0x030C } },
1026 { 0x01CE, { 0x0061, 0x030C } },
1027 { 0x01CF, { 0x0049, 0x030C } },
1028 { 0x01D0, { 0x0069, 0x030C } },
1029 { 0x01D1, { 0x004F, 0x030C } },
1030 { 0x01D2, { 0x006F, 0x030C } },
1031 { 0x01D3, { 0x0055, 0x030C } },
1032 { 0x01D4, { 0x0075, 0x030C } },
1033 { 0x01D5, { 0x00DC, 0x0304 } },
1034 { 0x01D6, { 0x00FC, 0x0304 } },
1035 { 0x01D7, { 0x00DC, 0x0301 } },
1036 { 0x01D8, { 0x00FC, 0x0301 } },
1037 { 0x01D9, { 0x00DC, 0x030C } },
1038 { 0x01DA, { 0x00FC, 0x030C } },
1039 { 0x01DB, { 0x00DC, 0x0300 } },
1040 { 0x01DC, { 0x00FC, 0x0300 } },
1041 { 0x01DE, { 0x00C4, 0x0304 } },
1042 { 0x01DF, { 0x00E4, 0x0304 } },
1043 { 0x01E0, { 0x0226, 0x0304 } },
1044 { 0x01E1, { 0x0227, 0x0304 } },
1045 { 0x01E2, { 0x00C6, 0x0304 } },
1046 { 0x01E3, { 0x00E6, 0x0304 } },
1047 { 0x01E6, { 0x0047, 0x030C } },
1048 { 0x01E7, { 0x0067, 0x030C } },
1049 { 0x01E8, { 0x004B, 0x030C } },
1050 { 0x01E9, { 0x006B, 0x030C } },
1051 { 0x01EA, { 0x004F, 0x0328 } },
1052 { 0x01EB, { 0x006F, 0x0328 } },
1053 { 0x01EC, { 0x01EA, 0x0304 } },
1054 { 0x01ED, { 0x01EB, 0x0304 } },
1055 { 0x01EE, { 0x01B7, 0x030C } },
1056 { 0x01EF, { 0x0292, 0x030C } },
1057 { 0x01F0, { 0x006A, 0x030C } },
1058 { 0x01F4, { 0x0047, 0x0301 } },
1059 { 0x01F5, { 0x0067, 0x0301 } },
1060 { 0x01F8, { 0x004E, 0x0300 } },
1061 { 0x01F9, { 0x006E, 0x0300 } },
1062 { 0x01FA, { 0x00C5, 0x0301 } },
1063 { 0x01FB, { 0x00E5, 0x0301 } },
1064 { 0x01FC, { 0x00C6, 0x0301 } },
1065 { 0x01FD, { 0x00E6, 0x0301 } },
1066 { 0x01FE, { 0x00D8, 0x0301 } },
1067 { 0x01FF, { 0x00F8, 0x0301 } },
1068 { 0x0200, { 0x0041, 0x030F } },
1069 { 0x0201, { 0x0061, 0x030F } },
1070 { 0x0202, { 0x0041, 0x0311 } },
1071 { 0x0203, { 0x0061, 0x0311 } },
1072 { 0x0204, { 0x0045, 0x030F } },
1073 { 0x0205, { 0x0065, 0x030F } },
1074 { 0x0206, { 0x0045, 0x0311 } },
1075 { 0x0207, { 0x0065, 0x0311 } },
1076 { 0x0208, { 0x0049, 0x030F } },
1077 { 0x0209, { 0x0069, 0x030F } },
1078 { 0x020A, { 0x0049, 0x0311 } },
1079 { 0x020B, { 0x0069, 0x0311 } },
1080 { 0x020C, { 0x004F, 0x030F } },
1081 { 0x020D, { 0x006F, 0x030F } },
1082 { 0x020E, { 0x004F, 0x0311 } },
1083 { 0x020F, { 0x006F, 0x0311 } },
1084 { 0x0210, { 0x0052, 0x030F } },
1085 { 0x0211, { 0x0072, 0x030F } },
1086 { 0x0212, { 0x0052, 0x0311 } },
1087 { 0x0213, { 0x0072, 0x0311 } },
1088 { 0x0214, { 0x0055, 0x030F } },
1089 { 0x0215, { 0x0075, 0x030F } },
1090 { 0x0216, { 0x0055, 0x0311 } },
1091 { 0x0217, { 0x0075, 0x0311 } },
1092 { 0x0218, { 0x0053, 0x0326 } },
1093 { 0x0219, { 0x0073, 0x0326 } },
1094 { 0x021A, { 0x0054, 0x0326 } },
1095 { 0x021B, { 0x0074, 0x0326 } },
1096 { 0x021E, { 0x0048, 0x030C } },
1097 { 0x021F, { 0x0068, 0x030C } },
1098 { 0x0226, { 0x0041, 0x0307 } },
1099 { 0x0227, { 0x0061, 0x0307 } },
1100 { 0x0228, { 0x0045, 0x0327 } },
1101 { 0x0229, { 0x0065, 0x0327 } },
1102 { 0x022A, { 0x00D6, 0x0304 } },
1103 { 0x022B, { 0x00F6, 0x0304 } },
1104 { 0x022C, { 0x00D5, 0x0304 } },
1105 { 0x022D, { 0x00F5, 0x0304 } },
1106 { 0x022E, { 0x004F, 0x0307 } },
1107 { 0x022F, { 0x006F, 0x0307 } },
1108 { 0x0230, { 0x022E, 0x0304 } },
1109 { 0x0231, { 0x022F, 0x0304 } },
1110 { 0x0232, { 0x0059, 0x0304 } },
1111 { 0x0233, { 0x0079, 0x0304 } },
1112 { 0x0340, { 0x0300, 0 } },
1113 { 0x0341, { 0x0301, 0 } },
1114 { 0x0343, { 0x0313, 0 } },
1115 { 0x0344, { 0x0308, 0x0301 } },
1116 { 0x0374, { 0x02B9, 0 } },
1117 { 0x037E, { 0x003B, 0 } },
1118 { 0x0385, { 0x00A8, 0x0301 } },
1119 { 0x0386, { 0x0391, 0x0301 } },
1120 { 0x0387, { 0x00B7, 0 } },
1121 { 0x0388, { 0x0395, 0x0301 } },
1122 { 0x0389, { 0x0397, 0x0301 } },
1123 { 0x038A, { 0x0399, 0x0301 } },
1124 { 0x038C, { 0x039F, 0x0301 } },
1125 { 0x038E, { 0x03A5, 0x0301 } },
1126 { 0x038F, { 0x03A9, 0x0301 } },
1127 { 0x0390, { 0x03CA, 0x0301 } },
1128 { 0x03AA, { 0x0399, 0x0308 } },
1129 { 0x03AB, { 0x03A5, 0x0308 } },
1130 { 0x03AC, { 0x03B1, 0x0301 } },
1131 { 0x03AD, { 0x03B5, 0x0301 } },
1132 { 0x03AE, { 0x03B7, 0x0301 } },
1133 { 0x03AF, { 0x03B9, 0x0301 } },
1134 { 0x03B0, { 0x03CB, 0x0301 } },
1135 { 0x03CA, { 0x03B9, 0x0308 } },
1136 { 0x03CB, { 0x03C5, 0x0308 } },
1137 { 0x03CC, { 0x03BF, 0x0301 } },
1138 { 0x03CD, { 0x03C5, 0x0301 } },
1139 { 0x03CE, { 0x03C9, 0x0301 } },
1140 { 0x03D3, { 0x03D2, 0x0301 } },
1141 { 0x03D4, { 0x03D2, 0x0308 } },
1142 { 0x0400, { 0x0415, 0x0300 } },
1143 { 0x0401, { 0x0415, 0x0308 } },
1144 { 0x0403, { 0x0413, 0x0301 } },
1145 { 0x0407, { 0x0406, 0x0308 } },
1146 { 0x040C, { 0x041A, 0x0301 } },
1147 { 0x040D, { 0x0418, 0x0300 } },
1148 { 0x040E, { 0x0423, 0x0306 } },
1149 { 0x0419, { 0x0418, 0x0306 } },
1150 { 0x0439, { 0x0438, 0x0306 } },
1151 { 0x0450, { 0x0435, 0x0300 } },
1152 { 0x0451, { 0x0435, 0x0308 } },
1153 { 0x0453, { 0x0433, 0x0301 } },
1154 { 0x0457, { 0x0456, 0x0308 } },
1155 { 0x045C, { 0x043A, 0x0301 } },
1156 { 0x045D, { 0x0438, 0x0300 } },
1157 { 0x045E, { 0x0443, 0x0306 } },
1158 { 0x0476, { 0x0474, 0x030F } },
1159 { 0x0477, { 0x0475, 0x030F } },
1160 { 0x04C1, { 0x0416, 0x0306 } },
1161 { 0x04C2, { 0x0436, 0x0306 } },
1162 { 0x04D0, { 0x0410, 0x0306 } },
1163 { 0x04D1, { 0x0430, 0x0306 } },
1164 { 0x04D2, { 0x0410, 0x0308 } },
1165 { 0x04D3, { 0x0430, 0x0308 } },
1166 { 0x04D6, { 0x0415, 0x0306 } },
1167 { 0x04D7, { 0x0435, 0x0306 } },
1168 { 0x04DA, { 0x04D8, 0x0308 } },
1169 { 0x04DB, { 0x04D9, 0x0308 } },
1170 { 0x04DC, { 0x0416, 0x0308 } },
1171 { 0x04DD, { 0x0436, 0x0308 } },
1172 { 0x04DE, { 0x0417, 0x0308 } },
1173 { 0x04DF, { 0x0437, 0x0308 } },
1174 { 0x04E2, { 0x0418, 0x0304 } },
1175 { 0x04E3, { 0x0438, 0x0304 } },
1176 { 0x04E4, { 0x0418, 0x0308 } },
1177 { 0x04E5, { 0x0438, 0x0308 } },
1178 { 0x04E6, { 0x041E, 0x0308 } },
1179 { 0x04E7, { 0x043E, 0x0308 } },
1180 { 0x04EA, { 0x04E8, 0x0308 } },
1181 { 0x04EB, { 0x04E9, 0x0308 } },
1182 { 0x04EC, { 0x042D, 0x0308 } },
1183 { 0x04ED, { 0x044D, 0x0308 } },
1184 { 0x04EE, { 0x0423, 0x0304 } },
1185 { 0x04EF, { 0x0443, 0x0304 } },
1186 { 0x04F0, { 0x0423, 0x0308 } },
1187 { 0x04F1, { 0x0443, 0x0308 } },
1188 { 0x04F2, { 0x0423, 0x030B } },
1189 { 0x04F3, { 0x0443, 0x030B } },
1190 { 0x04F4, { 0x0427, 0x0308 } },
1191 { 0x04F5, { 0x0447, 0x0308 } },
1192 { 0x04F8, { 0x042B, 0x0308 } },
1193 { 0x04F9, { 0x044B, 0x0308 } },
1194 { 0x0622, { 0x0627, 0x0653 } },
1195 { 0x0623, { 0x0627, 0x0654 } },
1196 { 0x0624, { 0x0648, 0x0654 } },
1197 { 0x0625, { 0x0627, 0x0655 } },
1198 { 0x0626, { 0x064A, 0x0654 } },
1199 { 0x06C0, { 0x06D5, 0x0654 } },
1200 { 0x06C2, { 0x06C1, 0x0654 } },
1201 { 0x06D3, { 0x06D2, 0x0654 } },
1202 { 0x0929, { 0x0928, 0x093C } },
1203 { 0x0931, { 0x0930, 0x093C } },
1204 { 0x0934, { 0x0933, 0x093C } },
1205 { 0x0958, { 0x0915, 0x093C } },
1206 { 0x0959, { 0x0916, 0x093C } },
1207 { 0x095A, { 0x0917, 0x093C } },
1208 { 0x095B, { 0x091C, 0x093C } },
1209 { 0x095C, { 0x0921, 0x093C } },
1210 { 0x095D, { 0x0922, 0x093C } },
1211 { 0x095E, { 0x092B, 0x093C } },
1212 { 0x095F, { 0x092F, 0x093C } },
1213 { 0x09CB, { 0x09C7, 0x09BE } },
1214 { 0x09CC, { 0x09C7, 0x09D7 } },
1215 { 0x09DC, { 0x09A1, 0x09BC } },
1216 { 0x09DD, { 0x09A2, 0x09BC } },
1217 { 0x09DF, { 0x09AF, 0x09BC } },
1218 { 0x0A33, { 0x0A32, 0x0A3C } },
1219 { 0x0A36, { 0x0A38, 0x0A3C } },
1220 { 0x0A59, { 0x0A16, 0x0A3C } },
1221 { 0x0A5A, { 0x0A17, 0x0A3C } },
1222 { 0x0A5B, { 0x0A1C, 0x0A3C } },
1223 { 0x0A5E, { 0x0A2B, 0x0A3C } },
1224 { 0x0B48, { 0x0B47, 0x0B56 } },
1225 { 0x0B4B, { 0x0B47, 0x0B3E } },
1226 { 0x0B4C, { 0x0B47, 0x0B57 } },
1227 { 0x0B5C, { 0x0B21, 0x0B3C } },
1228 { 0x0B5D, { 0x0B22, 0x0B3C } },
1229 { 0x0B94, { 0x0B92, 0x0BD7 } },
1230 { 0x0BCA, { 0x0BC6, 0x0BBE } },
1231 { 0x0BCB, { 0x0BC7, 0x0BBE } },
1232 { 0x0BCC, { 0x0BC6, 0x0BD7 } },
1233 { 0x0C48, { 0x0C46, 0x0C56 } },
1234 { 0x0CC0, { 0x0CBF, 0x0CD5 } },
1235 { 0x0CC7, { 0x0CC6, 0x0CD5 } },
1236 { 0x0CC8, { 0x0CC6, 0x0CD6 } },
1237 { 0x0CCA, { 0x0CC6, 0x0CC2 } },
1238 { 0x0CCB, { 0x0CCA, 0x0CD5 } },
1239 { 0x0D4A, { 0x0D46, 0x0D3E } },
1240 { 0x0D4B, { 0x0D47, 0x0D3E } },
1241 { 0x0D4C, { 0x0D46, 0x0D57 } },
1242 { 0x0DDA, { 0x0DD9, 0x0DCA } },
1243 { 0x0DDC, { 0x0DD9, 0x0DCF } },
1244 { 0x0DDD, { 0x0DDC, 0x0DCA } },
1245 { 0x0DDE, { 0x0DD9, 0x0DDF } },
1246 { 0x0F43, { 0x0F42, 0x0FB7 } },
1247 { 0x0F4D, { 0x0F4C, 0x0FB7 } },
1248 { 0x0F52, { 0x0F51, 0x0FB7 } },
1249 { 0x0F57, { 0x0F56, 0x0FB7 } },
1250 { 0x0F5C, { 0x0F5B, 0x0FB7 } },
1251 { 0x0F69, { 0x0F40, 0x0FB5 } },
1252 { 0x0F73, { 0x0F71, 0x0F72 } },
1253 { 0x0F75, { 0x0F71, 0x0F74 } },
1254 { 0x0F76, { 0x0FB2, 0x0F80 } },
1255 { 0x0F78, { 0x0FB3, 0x0F80 } },
1256 { 0x0F81, { 0x0F71, 0x0F80 } },
1257 { 0x0F93, { 0x0F92, 0x0FB7 } },
1258 { 0x0F9D, { 0x0F9C, 0x0FB7 } },
1259 { 0x0FA2, { 0x0FA1, 0x0FB7 } },
1260 { 0x0FA7, { 0x0FA6, 0x0FB7 } },
1261 { 0x0FAC, { 0x0FAB, 0x0FB7 } },
1262 { 0x0FB9, { 0x0F90, 0x0FB5 } },
1263 { 0x1026, { 0x1025, 0x102E } },
1264 { 0x1B06, { 0x1B05, 0x1B35 } },
1265 { 0x1B08, { 0x1B07, 0x1B35 } },
1266 { 0x1B0A, { 0x1B09, 0x1B35 } },
1267 { 0x1B0C, { 0x1B0B, 0x1B35 } },
1268 { 0x1B0E, { 0x1B0D, 0x1B35 } },
1269 { 0x1B12, { 0x1B11, 0x1B35 } },
1270 { 0x1B3B, { 0x1B3A, 0x1B35 } },
1271 { 0x1B3D, { 0x1B3C, 0x1B35 } },
1272 { 0x1B40, { 0x1B3E, 0x1B35 } },
1273 { 0x1B41, { 0x1B3F, 0x1B35 } },
1274 { 0x1B43, { 0x1B42, 0x1B35 } },
1275 { 0x1E00, { 0x0041, 0x0325 } },
1276 { 0x1E01, { 0x0061, 0x0325 } },
1277 { 0x1E02, { 0x0042, 0x0307 } },
1278 { 0x1E03, { 0x0062, 0x0307 } },
1279 { 0x1E04, { 0x0042, 0x0323 } },
1280 { 0x1E05, { 0x0062, 0x0323 } },
1281 { 0x1E06, { 0x0042, 0x0331 } },
1282 { 0x1E07, { 0x0062, 0x0331 } },
1283 { 0x1E08, { 0x00C7, 0x0301 } },
1284 { 0x1E09, { 0x00E7, 0x0301 } },
1285 { 0x1E0A, { 0x0044, 0x0307 } },
1286 { 0x1E0B, { 0x0064, 0x0307 } },
1287 { 0x1E0C, { 0x0044, 0x0323 } },
1288 { 0x1E0D, { 0x0064, 0x0323 } },
1289 { 0x1E0E, { 0x0044, 0x0331 } },
1290 { 0x1E0F, { 0x0064, 0x0331 } },
1291 { 0x1E10, { 0x0044, 0x0327 } },
1292 { 0x1E11, { 0x0064, 0x0327 } },
1293 { 0x1E12, { 0x0044, 0x032D } },
1294 { 0x1E13, { 0x0064, 0x032D } },
1295 { 0x1E14, { 0x0112, 0x0300 } },
1296 { 0x1E15, { 0x0113, 0x0300 } },
1297 { 0x1E16, { 0x0112, 0x0301 } },
1298 { 0x1E17, { 0x0113, 0x0301 } },
1299 { 0x1E18, { 0x0045, 0x032D } },
1300 { 0x1E19, { 0x0065, 0x032D } },
1301 { 0x1E1A, { 0x0045, 0x0330 } },
1302 { 0x1E1B, { 0x0065, 0x0330 } },
1303 { 0x1E1C, { 0x0228, 0x0306 } },
1304 { 0x1E1D, { 0x0229, 0x0306 } },
1305 { 0x1E1E, { 0x0046, 0x0307 } },
1306 { 0x1E1F, { 0x0066, 0x0307 } },
1307 { 0x1E20, { 0x0047, 0x0304 } },
1308 { 0x1E21, { 0x0067, 0x0304 } },
1309 { 0x1E22, { 0x0048, 0x0307 } },
1310 { 0x1E23, { 0x0068, 0x0307 } },
1311 { 0x1E24, { 0x0048, 0x0323 } },
1312 { 0x1E25, { 0x0068, 0x0323 } },
1313 { 0x1E26, { 0x0048, 0x0308 } },
1314 { 0x1E27, { 0x0068, 0x0308 } },
1315 { 0x1E28, { 0x0048, 0x0327 } },
1316 { 0x1E29, { 0x0068, 0x0327 } },
1317 { 0x1E2A, { 0x0048, 0x032E } },
1318 { 0x1E2B, { 0x0068, 0x032E } },
1319 { 0x1E2C, { 0x0049, 0x0330 } },
1320 { 0x1E2D, { 0x0069, 0x0330 } },
1321 { 0x1E2E, { 0x00CF, 0x0301 } },
1322 { 0x1E2F, { 0x00EF, 0x0301 } },
1323 { 0x1E30, { 0x004B, 0x0301 } },
1324 { 0x1E31, { 0x006B, 0x0301 } },
1325 { 0x1E32, { 0x004B, 0x0323 } },
1326 { 0x1E33, { 0x006B, 0x0323 } },
1327 { 0x1E34, { 0x004B, 0x0331 } },
1328 { 0x1E35, { 0x006B, 0x0331 } },
1329 { 0x1E36, { 0x004C, 0x0323 } },
1330 { 0x1E37, { 0x006C, 0x0323 } },
1331 { 0x1E38, { 0x1E36, 0x0304 } },
1332 { 0x1E39, { 0x1E37, 0x0304 } },
1333 { 0x1E3A, { 0x004C, 0x0331 } },
1334 { 0x1E3B, { 0x006C, 0x0331 } },
1335 { 0x1E3C, { 0x004C, 0x032D } },
1336 { 0x1E3D, { 0x006C, 0x032D } },
1337 { 0x1E3E, { 0x004D, 0x0301 } },
1338 { 0x1E3F, { 0x006D, 0x0301 } },
1339 { 0x1E40, { 0x004D, 0x0307 } },
1340 { 0x1E41, { 0x006D, 0x0307 } },
1341 { 0x1E42, { 0x004D, 0x0323 } },
1342 { 0x1E43, { 0x006D, 0x0323 } },
1343 { 0x1E44, { 0x004E, 0x0307 } },
1344 { 0x1E45, { 0x006E, 0x0307 } },
1345 { 0x1E46, { 0x004E, 0x0323 } },
1346 { 0x1E47, { 0x006E, 0x0323 } },
1347 { 0x1E48, { 0x004E, 0x0331 } },
1348 { 0x1E49, { 0x006E, 0x0331 } },
1349 { 0x1E4A, { 0x004E, 0x032D } },
1350 { 0x1E4B, { 0x006E, 0x032D } },
1351 { 0x1E4C, { 0x00D5, 0x0301 } },
1352 { 0x1E4D, { 0x00F5, 0x0301 } },
1353 { 0x1E4E, { 0x00D5, 0x0308 } },
1354 { 0x1E4F, { 0x00F5, 0x0308 } },
1355 { 0x1E50, { 0x014C, 0x0300 } },
1356 { 0x1E51, { 0x014D, 0x0300 } },
1357 { 0x1E52, { 0x014C, 0x0301 } },
1358 { 0x1E53, { 0x014D, 0x0301 } },
1359 { 0x1E54, { 0x0050, 0x0301 } },
1360 { 0x1E55, { 0x0070, 0x0301 } },
1361 { 0x1E56, { 0x0050, 0x0307 } },
1362 { 0x1E57, { 0x0070, 0x0307 } },
1363 { 0x1E58, { 0x0052, 0x0307 } },
1364 { 0x1E59, { 0x0072, 0x0307 } },
1365 { 0x1E5A, { 0x0052, 0x0323 } },
1366 { 0x1E5B, { 0x0072, 0x0323 } },
1367 { 0x1E5C, { 0x1E5A, 0x0304 } },
1368 { 0x1E5D, { 0x1E5B, 0x0304 } },
1369 { 0x1E5E, { 0x0052, 0x0331 } },
1370 { 0x1E5F, { 0x0072, 0x0331 } },
1371 { 0x1E60, { 0x0053, 0x0307 } },
1372 { 0x1E61, { 0x0073, 0x0307 } },
1373 { 0x1E62, { 0x0053, 0x0323 } },
1374 { 0x1E63, { 0x0073, 0x0323 } },
1375 { 0x1E64, { 0x015A, 0x0307 } },
1376 { 0x1E65, { 0x015B, 0x0307 } },
1377 { 0x1E66, { 0x0160, 0x0307 } },
1378 { 0x1E67, { 0x0161, 0x0307 } },
1379 { 0x1E68, { 0x1E62, 0x0307 } },
1380 { 0x1E69, { 0x1E63, 0x0307 } },
1381 { 0x1E6A, { 0x0054, 0x0307 } },
1382 { 0x1E6B, { 0x0074, 0x0307 } },
1383 { 0x1E6C, { 0x0054, 0x0323 } },
1384 { 0x1E6D, { 0x0074, 0x0323 } },
1385 { 0x1E6E, { 0x0054, 0x0331 } },
1386 { 0x1E6F, { 0x0074, 0x0331 } },
1387 { 0x1E70, { 0x0054, 0x032D } },
1388 { 0x1E71, { 0x0074, 0x032D } },
1389 { 0x1E72, { 0x0055, 0x0324 } },
1390 { 0x1E73, { 0x0075, 0x0324 } },
1391 { 0x1E74, { 0x0055, 0x0330 } },
1392 { 0x1E75, { 0x0075, 0x0330 } },
1393 { 0x1E76, { 0x0055, 0x032D } },
1394 { 0x1E77, { 0x0075, 0x032D } },
1395 { 0x1E78, { 0x0168, 0x0301 } },
1396 { 0x1E79, { 0x0169, 0x0301 } },
1397 { 0x1E7A, { 0x016A, 0x0308 } },
1398 { 0x1E7B, { 0x016B, 0x0308 } },
1399 { 0x1E7C, { 0x0056, 0x0303 } },
1400 { 0x1E7D, { 0x0076, 0x0303 } },
1401 { 0x1E7E, { 0x0056, 0x0323 } },
1402 { 0x1E7F, { 0x0076, 0x0323 } },
1403 { 0x1E80, { 0x0057, 0x0300 } },
1404 { 0x1E81, { 0x0077, 0x0300 } },
1405 { 0x1E82, { 0x0057, 0x0301 } },
1406 { 0x1E83, { 0x0077, 0x0301 } },
1407 { 0x1E84, { 0x0057, 0x0308 } },
1408 { 0x1E85, { 0x0077, 0x0308 } },
1409 { 0x1E86, { 0x0057, 0x0307 } },
1410 { 0x1E87, { 0x0077, 0x0307 } },
1411 { 0x1E88, { 0x0057, 0x0323 } },
1412 { 0x1E89, { 0x0077, 0x0323 } },
1413 { 0x1E8A, { 0x0058, 0x0307 } },
1414 { 0x1E8B, { 0x0078, 0x0307 } },
1415 { 0x1E8C, { 0x0058, 0x0308 } },
1416 { 0x1E8D, { 0x0078, 0x0308 } },
1417 { 0x1E8E, { 0x0059, 0x0307 } },
1418 { 0x1E8F, { 0x0079, 0x0307 } },
1419 { 0x1E90, { 0x005A, 0x0302 } },
1420 { 0x1E91, { 0x007A, 0x0302 } },
1421 { 0x1E92, { 0x005A, 0x0323 } },
1422 { 0x1E93, { 0x007A, 0x0323 } },
1423 { 0x1E94, { 0x005A, 0x0331 } },
1424 { 0x1E95, { 0x007A, 0x0331 } },
1425 { 0x1E96, { 0x0068, 0x0331 } },
1426 { 0x1E97, { 0x0074, 0x0308 } },
1427 { 0x1E98, { 0x0077, 0x030A } },
1428 { 0x1E99, { 0x0079, 0x030A } },
1429 { 0x1E9B, { 0x017F, 0x0307 } },
1430 { 0x1EA0, { 0x0041, 0x0323 } },
1431 { 0x1EA1, { 0x0061, 0x0323 } },
1432 { 0x1EA2, { 0x0041, 0x0309 } },
1433 { 0x1EA3, { 0x0061, 0x0309 } },
1434 { 0x1EA4, { 0x00C2, 0x0301 } },
1435 { 0x1EA5, { 0x00E2, 0x0301 } },
1436 { 0x1EA6, { 0x00C2, 0x0300 } },
1437 { 0x1EA7, { 0x00E2, 0x0300 } },
1438 { 0x1EA8, { 0x00C2, 0x0309 } },
1439 { 0x1EA9, { 0x00E2, 0x0309 } },
1440 { 0x1EAA, { 0x00C2, 0x0303 } },
1441 { 0x1EAB, { 0x00E2, 0x0303 } },
1442 { 0x1EAC, { 0x1EA0, 0x0302 } },
1443 { 0x1EAD, { 0x1EA1, 0x0302 } },
1444 { 0x1EAE, { 0x0102, 0x0301 } },
1445 { 0x1EAF, { 0x0103, 0x0301 } },
1446 { 0x1EB0, { 0x0102, 0x0300 } },
1447 { 0x1EB1, { 0x0103, 0x0300 } },
1448 { 0x1EB2, { 0x0102, 0x0309 } },
1449 { 0x1EB3, { 0x0103, 0x0309 } },
1450 { 0x1EB4, { 0x0102, 0x0303 } },
1451 { 0x1EB5, { 0x0103, 0x0303 } },
1452 { 0x1EB6, { 0x1EA0, 0x0306 } },
1453 { 0x1EB7, { 0x1EA1, 0x0306 } },
1454 { 0x1EB8, { 0x0045, 0x0323 } },
1455 { 0x1EB9, { 0x0065, 0x0323 } },
1456 { 0x1EBA, { 0x0045, 0x0309 } },
1457 { 0x1EBB, { 0x0065, 0x0309 } },
1458 { 0x1EBC, { 0x0045, 0x0303 } },
1459 { 0x1EBD, { 0x0065, 0x0303 } },
1460 { 0x1EBE, { 0x00CA, 0x0301 } },
1461 { 0x1EBF, { 0x00EA, 0x0301 } },
1462 { 0x1EC0, { 0x00CA, 0x0300 } },
1463 { 0x1EC1, { 0x00EA, 0x0300 } },
1464 { 0x1EC2, { 0x00CA, 0x0309 } },
1465 { 0x1EC3, { 0x00EA, 0x0309 } },
1466 { 0x1EC4, { 0x00CA, 0x0303 } },
1467 { 0x1EC5, { 0x00EA, 0x0303 } },
1468 { 0x1EC6, { 0x1EB8, 0x0302 } },
1469 { 0x1EC7, { 0x1EB9, 0x0302 } },
1470 { 0x1EC8, { 0x0049, 0x0309 } },
1471 { 0x1EC9, { 0x0069, 0x0309 } },
1472 { 0x1ECA, { 0x0049, 0x0323 } },
1473 { 0x1ECB, { 0x0069, 0x0323 } },
1474 { 0x1ECC, { 0x004F, 0x0323 } },
1475 { 0x1ECD, { 0x006F, 0x0323 } },
1476 { 0x1ECE, { 0x004F, 0x0309 } },
1477 { 0x1ECF, { 0x006F, 0x0309 } },
1478 { 0x1ED0, { 0x00D4, 0x0301 } },
1479 { 0x1ED1, { 0x00F4, 0x0301 } },
1480 { 0x1ED2, { 0x00D4, 0x0300 } },
1481 { 0x1ED3, { 0x00F4, 0x0300 } },
1482 { 0x1ED4, { 0x00D4, 0x0309 } },
1483 { 0x1ED5, { 0x00F4, 0x0309 } },
1484 { 0x1ED6, { 0x00D4, 0x0303 } },
1485 { 0x1ED7, { 0x00F4, 0x0303 } },
1486 { 0x1ED8, { 0x1ECC, 0x0302 } },
1487 { 0x1ED9, { 0x1ECD, 0x0302 } },
1488 { 0x1EDA, { 0x01A0, 0x0301 } },
1489 { 0x1EDB, { 0x01A1, 0x0301 } },
1490 { 0x1EDC, { 0x01A0, 0x0300 } },
1491 { 0x1EDD, { 0x01A1, 0x0300 } },
1492 { 0x1EDE, { 0x01A0, 0x0309 } },
1493 { 0x1EDF, { 0x01A1, 0x0309 } },
1494 { 0x1EE0, { 0x01A0, 0x0303 } },
1495 { 0x1EE1, { 0x01A1, 0x0303 } },
1496 { 0x1EE2, { 0x01A0, 0x0323 } },
1497 { 0x1EE3, { 0x01A1, 0x0323 } },
1498 { 0x1EE4, { 0x0055, 0x0323 } },
1499 { 0x1EE5, { 0x0075, 0x0323 } },
1500 { 0x1EE6, { 0x0055, 0x0309 } },
1501 { 0x1EE7, { 0x0075, 0x0309 } },
1502 { 0x1EE8, { 0x01AF, 0x0301 } },
1503 { 0x1EE9, { 0x01B0, 0x0301 } },
1504 { 0x1EEA, { 0x01AF, 0x0300 } },
1505 { 0x1EEB, { 0x01B0, 0x0300 } },
1506 { 0x1EEC, { 0x01AF, 0x0309 } },
1507 { 0x1EED, { 0x01B0, 0x0309 } },
1508 { 0x1EEE, { 0x01AF, 0x0303 } },
1509 { 0x1EEF, { 0x01B0, 0x0303 } },
1510 { 0x1EF0, { 0x01AF, 0x0323 } },
1511 { 0x1EF1, { 0x01B0, 0x0323 } },
1512 { 0x1EF2, { 0x0059, 0x0300 } },
1513 { 0x1EF3, { 0x0079, 0x0300 } },
1514 { 0x1EF4, { 0x0059, 0x0323 } },
1515 { 0x1EF5, { 0x0079, 0x0323 } },
1516 { 0x1EF6, { 0x0059, 0x0309 } },
1517 { 0x1EF7, { 0x0079, 0x0309 } },
1518 { 0x1EF8, { 0x0059, 0x0303 } },
1519 { 0x1EF9, { 0x0079, 0x0303 } },
1520 { 0x1F00, { 0x03B1, 0x0313 } },
1521 { 0x1F01, { 0x03B1, 0x0314 } },
1522 { 0x1F02, { 0x1F00, 0x0300 } },
1523 { 0x1F03, { 0x1F01, 0x0300 } },
1524 { 0x1F04, { 0x1F00, 0x0301 } },
1525 { 0x1F05, { 0x1F01, 0x0301 } },
1526 { 0x1F06, { 0x1F00, 0x0342 } },
1527 { 0x1F07, { 0x1F01, 0x0342 } },
1528 { 0x1F08, { 0x0391, 0x0313 } },
1529 { 0x1F09, { 0x0391, 0x0314 } },
1530 { 0x1F0A, { 0x1F08, 0x0300 } },
1531 { 0x1F0B, { 0x1F09, 0x0300 } },
1532 { 0x1F0C, { 0x1F08, 0x0301 } },
1533 { 0x1F0D, { 0x1F09, 0x0301 } },
1534 { 0x1F0E, { 0x1F08, 0x0342 } },
1535 { 0x1F0F, { 0x1F09, 0x0342 } },
1536 { 0x1F10, { 0x03B5, 0x0313 } },
1537 { 0x1F11, { 0x03B5, 0x0314 } },
1538 { 0x1F12, { 0x1F10, 0x0300 } },
1539 { 0x1F13, { 0x1F11, 0x0300 } },
1540 { 0x1F14, { 0x1F10, 0x0301 } },
1541 { 0x1F15, { 0x1F11, 0x0301 } },
1542 { 0x1F18, { 0x0395, 0x0313 } },
1543 { 0x1F19, { 0x0395, 0x0314 } },
1544 { 0x1F1A, { 0x1F18, 0x0300 } },
1545 { 0x1F1B, { 0x1F19, 0x0300 } },
1546 { 0x1F1C, { 0x1F18, 0x0301 } },
1547 { 0x1F1D, { 0x1F19, 0x0301 } },
1548 { 0x1F20, { 0x03B7, 0x0313 } },
1549 { 0x1F21, { 0x03B7, 0x0314 } },
1550 { 0x1F22, { 0x1F20, 0x0300 } },
1551 { 0x1F23, { 0x1F21, 0x0300 } },
1552 { 0x1F24, { 0x1F20, 0x0301 } },
1553 { 0x1F25, { 0x1F21, 0x0301 } },
1554 { 0x1F26, { 0x1F20, 0x0342 } },
1555 { 0x1F27, { 0x1F21, 0x0342 } },
1556 { 0x1F28, { 0x0397, 0x0313 } },
1557 { 0x1F29, { 0x0397, 0x0314 } },
1558 { 0x1F2A, { 0x1F28, 0x0300 } },
1559 { 0x1F2B, { 0x1F29, 0x0300 } },
1560 { 0x1F2C, { 0x1F28, 0x0301 } },
1561 { 0x1F2D, { 0x1F29, 0x0301 } },
1562 { 0x1F2E, { 0x1F28, 0x0342 } },
1563 { 0x1F2F, { 0x1F29, 0x0342 } },
1564 { 0x1F30, { 0x03B9, 0x0313 } },
1565 { 0x1F31, { 0x03B9, 0x0314 } },
1566 { 0x1F32, { 0x1F30, 0x0300 } },
1567 { 0x1F33, { 0x1F31, 0x0300 } },
1568 { 0x1F34, { 0x1F30, 0x0301 } },
1569 { 0x1F35, { 0x1F31, 0x0301 } },
1570 { 0x1F36, { 0x1F30, 0x0342 } },
1571 { 0x1F37, { 0x1F31, 0x0342 } },
1572 { 0x1F38, { 0x0399, 0x0313 } },
1573 { 0x1F39, { 0x0399, 0x0314 } },
1574 { 0x1F3A, { 0x1F38, 0x0300 } },
1575 { 0x1F3B, { 0x1F39, 0x0300 } },
1576 { 0x1F3C, { 0x1F38, 0x0301 } },
1577 { 0x1F3D, { 0x1F39, 0x0301 } },
1578 { 0x1F3E, { 0x1F38, 0x0342 } },
1579 { 0x1F3F, { 0x1F39, 0x0342 } },
1580 { 0x1F40, { 0x03BF, 0x0313 } },
1581 { 0x1F41, { 0x03BF, 0x0314 } },
1582 { 0x1F42, { 0x1F40, 0x0300 } },
1583 { 0x1F43, { 0x1F41, 0x0300 } },
1584 { 0x1F44, { 0x1F40, 0x0301 } },
1585 { 0x1F45, { 0x1F41, 0x0301 } },
1586 { 0x1F48, { 0x039F, 0x0313 } },
1587 { 0x1F49, { 0x039F, 0x0314 } },
1588 { 0x1F4A, { 0x1F48, 0x0300 } },
1589 { 0x1F4B, { 0x1F49, 0x0300 } },
1590 { 0x1F4C, { 0x1F48, 0x0301 } },
1591 { 0x1F4D, { 0x1F49, 0x0301 } },
1592 { 0x1F50, { 0x03C5, 0x0313 } },
1593 { 0x1F51, { 0x03C5, 0x0314 } },
1594 { 0x1F52, { 0x1F50, 0x0300 } },
1595 { 0x1F53, { 0x1F51, 0x0300 } },
1596 { 0x1F54, { 0x1F50, 0x0301 } },
1597 { 0x1F55, { 0x1F51, 0x0301 } },
1598 { 0x1F56, { 0x1F50, 0x0342 } },
1599 { 0x1F57, { 0x1F51, 0x0342 } },
1600 { 0x1F59, { 0x03A5, 0x0314 } },
1601 { 0x1F5B, { 0x1F59, 0x0300 } },
1602 { 0x1F5D, { 0x1F59, 0x0301 } },
1603 { 0x1F5F, { 0x1F59, 0x0342 } },
1604 { 0x1F60, { 0x03C9, 0x0313 } },
1605 { 0x1F61, { 0x03C9, 0x0314 } },
1606 { 0x1F62, { 0x1F60, 0x0300 } },
1607 { 0x1F63, { 0x1F61, 0x0300 } },
1608 { 0x1F64, { 0x1F60, 0x0301 } },
1609 { 0x1F65, { 0x1F61, 0x0301 } },
1610 { 0x1F66, { 0x1F60, 0x0342 } },
1611 { 0x1F67, { 0x1F61, 0x0342 } },
1612 { 0x1F68, { 0x03A9, 0x0313 } },
1613 { 0x1F69, { 0x03A9, 0x0314 } },
1614 { 0x1F6A, { 0x1F68, 0x0300 } },
1615 { 0x1F6B, { 0x1F69, 0x0300 } },
1616 { 0x1F6C, { 0x1F68, 0x0301 } },
1617 { 0x1F6D, { 0x1F69, 0x0301 } },
1618 { 0x1F6E, { 0x1F68, 0x0342 } },
1619 { 0x1F6F, { 0x1F69, 0x0342 } },
1620 { 0x1F70, { 0x03B1, 0x0300 } },
1621 { 0x1F71, { 0x03AC, 0 } },
1622 { 0x1F72, { 0x03B5, 0x0300 } },
1623 { 0x1F73, { 0x03AD, 0 } },
1624 { 0x1F74, { 0x03B7, 0x0300 } },
1625 { 0x1F75, { 0x03AE, 0 } },
1626 { 0x1F76, { 0x03B9, 0x0300 } },
1627 { 0x1F77, { 0x03AF, 0 } },
1628 { 0x1F78, { 0x03BF, 0x0300 } },
1629 { 0x1F79, { 0x03CC, 0 } },
1630 { 0x1F7A, { 0x03C5, 0x0300 } },
1631 { 0x1F7B, { 0x03CD, 0 } },
1632 { 0x1F7C, { 0x03C9, 0x0300 } },
1633 { 0x1F7D, { 0x03CE, 0 } },
1634 { 0x1F80, { 0x1F00, 0x0345 } },
1635 { 0x1F81, { 0x1F01, 0x0345 } },
1636 { 0x1F82, { 0x1F02, 0x0345 } },
1637 { 0x1F83, { 0x1F03, 0x0345 } },
1638 { 0x1F84, { 0x1F04, 0x0345 } },
1639 { 0x1F85, { 0x1F05, 0x0345 } },
1640 { 0x1F86, { 0x1F06, 0x0345 } },
1641 { 0x1F87, { 0x1F07, 0x0345 } },
1642 { 0x1F88, { 0x1F08, 0x0345 } },
1643 { 0x1F89, { 0x1F09, 0x0345 } },
1644 { 0x1F8A, { 0x1F0A, 0x0345 } },
1645 { 0x1F8B, { 0x1F0B, 0x0345 } },
1646 { 0x1F8C, { 0x1F0C, 0x0345 } },
1647 { 0x1F8D, { 0x1F0D, 0x0345 } },
1648 { 0x1F8E, { 0x1F0E, 0x0345 } },
1649 { 0x1F8F, { 0x1F0F, 0x0345 } },
1650 { 0x1F90, { 0x1F20, 0x0345 } },
1651 { 0x1F91, { 0x1F21, 0x0345 } },
1652 { 0x1F92, { 0x1F22, 0x0345 } },
1653 { 0x1F93, { 0x1F23, 0x0345 } },
1654 { 0x1F94, { 0x1F24, 0x0345 } },
1655 { 0x1F95, { 0x1F25, 0x0345 } },
1656 { 0x1F96, { 0x1F26, 0x0345 } },
1657 { 0x1F97, { 0x1F27, 0x0345 } },
1658 { 0x1F98, { 0x1F28, 0x0345 } },
1659 { 0x1F99, { 0x1F29, 0x0345 } },
1660 { 0x1F9A, { 0x1F2A, 0x0345 } },
1661 { 0x1F9B, { 0x1F2B, 0x0345 } },
1662 { 0x1F9C, { 0x1F2C, 0x0345 } },
1663 { 0x1F9D, { 0x1F2D, 0x0345 } },
1664 { 0x1F9E, { 0x1F2E, 0x0345 } },
1665 { 0x1F9F, { 0x1F2F, 0x0345 } },
1666 { 0x1FA0, { 0x1F60, 0x0345 } },
1667 { 0x1FA1, { 0x1F61, 0x0345 } },
1668 { 0x1FA2, { 0x1F62, 0x0345 } },
1669 { 0x1FA3, { 0x1F63, 0x0345 } },
1670 { 0x1FA4, { 0x1F64, 0x0345 } },
1671 { 0x1FA5, { 0x1F65, 0x0345 } },
1672 { 0x1FA6, { 0x1F66, 0x0345 } },
1673 { 0x1FA7, { 0x1F67, 0x0345 } },
1674 { 0x1FA8, { 0x1F68, 0x0345 } },
1675 { 0x1FA9, { 0x1F69, 0x0345 } },
1676 { 0x1FAA, { 0x1F6A, 0x0345 } },
1677 { 0x1FAB, { 0x1F6B, 0x0345 } },
1678 { 0x1FAC, { 0x1F6C, 0x0345 } },
1679 { 0x1FAD, { 0x1F6D, 0x0345 } },
1680 { 0x1FAE, { 0x1F6E, 0x0345 } },
1681 { 0x1FAF, { 0x1F6F, 0x0345 } },
1682 { 0x1FB0, { 0x03B1, 0x0306 } },
1683 { 0x1FB1, { 0x03B1, 0x0304 } },
1684 { 0x1FB2, { 0x1F70, 0x0345 } },
1685 { 0x1FB3, { 0x03B1, 0x0345 } },
1686 { 0x1FB4, { 0x03AC, 0x0345 } },
1687 { 0x1FB6, { 0x03B1, 0x0342 } },
1688 { 0x1FB7, { 0x1FB6, 0x0345 } },
1689 { 0x1FB8, { 0x0391, 0x0306 } },
1690 { 0x1FB9, { 0x0391, 0x0304 } },
1691 { 0x1FBA, { 0x0391, 0x0300 } },
1692 { 0x1FBB, { 0x0386, 0 } },
1693 { 0x1FBC, { 0x0391, 0x0345 } },
1694 { 0x1FBE, { 0x03B9, 0 } },
1695 { 0x1FC1, { 0x00A8, 0x0342 } },
1696 { 0x1FC2, { 0x1F74, 0x0345 } },
1697 { 0x1FC3, { 0x03B7, 0x0345 } },
1698 { 0x1FC4, { 0x03AE, 0x0345 } },
1699 { 0x1FC6, { 0x03B7, 0x0342 } },
1700 { 0x1FC7, { 0x1FC6, 0x0345 } },
1701 { 0x1FC8, { 0x0395, 0x0300 } },
1702 { 0x1FC9, { 0x0388, 0 } },
1703 { 0x1FCA, { 0x0397, 0x0300 } },
1704 { 0x1FCB, { 0x0389, 0 } },
1705 { 0x1FCC, { 0x0397, 0x0345 } },
1706 { 0x1FCD, { 0x1FBF, 0x0300 } },
1707 { 0x1FCE, { 0x1FBF, 0x0301 } },
1708 { 0x1FCF, { 0x1FBF, 0x0342 } },
1709 { 0x1FD0, { 0x03B9, 0x0306 } },
1710 { 0x1FD1, { 0x03B9, 0x0304 } },
1711 { 0x1FD2, { 0x03CA, 0x0300 } },
1712 { 0x1FD3, { 0x0390, 0 } },
1713 { 0x1FD6, { 0x03B9, 0x0342 } },
1714 { 0x1FD7, { 0x03CA, 0x0342 } },
1715 { 0x1FD8, { 0x0399, 0x0306 } },
1716 { 0x1FD9, { 0x0399, 0x0304 } },
1717 { 0x1FDA, { 0x0399, 0x0300 } },
1718 { 0x1FDB, { 0x038A, 0 } },
1719 { 0x1FDD, { 0x1FFE, 0x0300 } },
1720 { 0x1FDE, { 0x1FFE, 0x0301 } },
1721 { 0x1FDF, { 0x1FFE, 0x0342 } },
1722 { 0x1FE0, { 0x03C5, 0x0306 } },
1723 { 0x1FE1, { 0x03C5, 0x0304 } },
1724 { 0x1FE2, { 0x03CB, 0x0300 } },
1725 { 0x1FE3, { 0x03B0, 0 } },
1726 { 0x1FE4, { 0x03C1, 0x0313 } },
1727 { 0x1FE5, { 0x03C1, 0x0314 } },
1728 { 0x1FE6, { 0x03C5, 0x0342 } },
1729 { 0x1FE7, { 0x03CB, 0x0342 } },
1730 { 0x1FE8, { 0x03A5, 0x0306 } },
1731 { 0x1FE9, { 0x03A5, 0x0304 } },
1732 { 0x1FEA, { 0x03A5, 0x0300 } },
1733 { 0x1FEB, { 0x038E, 0 } },
1734 { 0x1FEC, { 0x03A1, 0x0314 } },
1735 { 0x1FED, { 0x00A8, 0x0300 } },
1736 { 0x1FEE, { 0x0385, 0 } },
1737 { 0x1FEF, { 0x0060, 0 } },
1738 { 0x1FF2, { 0x1F7C, 0x0345 } },
1739 { 0x1FF3, { 0x03C9, 0x0345 } },
1740 { 0x1FF4, { 0x03CE, 0x0345 } },
1741 { 0x1FF6, { 0x03C9, 0x0342 } },
1742 { 0x1FF7, { 0x1FF6, 0x0345 } },
1743 { 0x1FF8, { 0x039F, 0x0300 } },
1744 { 0x1FF9, { 0x038C, 0 } },
1745 { 0x1FFA, { 0x03A9, 0x0300 } },
1746 { 0x1FFB, { 0x038F, 0 } },
1747 { 0x1FFC, { 0x03A9, 0x0345 } },
1748 { 0x1FFD, { 0x00B4, 0 } },
1749 { 0x2000, { 0x2002, 0 } },
1750 { 0x2001, { 0x2003, 0 } },
1751 { 0x2126, { 0x03A9, 0 } },
1752 { 0x212A, { 0x004B, 0 } },
1753 { 0x212B, { 0x00C5, 0 } },
1754 { 0x219A, { 0x2190, 0x0338 } },
1755 { 0x219B, { 0x2192, 0x0338 } },
1756 { 0x21AE, { 0x2194, 0x0338 } },
1757 { 0x21CD, { 0x21D0, 0x0338 } },
1758 { 0x21CE, { 0x21D4, 0x0338 } },
1759 { 0x21CF, { 0x21D2, 0x0338 } },
1760 { 0x2204, { 0x2203, 0x0338 } },
1761 { 0x2209, { 0x2208, 0x0338 } },
1762 { 0x220C, { 0x220B, 0x0338 } },
1763 { 0x2224, { 0x2223, 0x0338 } },
1764 { 0x2226, { 0x2225, 0x0338 } },
1765 { 0x2241, { 0x223C, 0x0338 } },
1766 { 0x2244, { 0x2243, 0x0338 } },
1767 { 0x2247, { 0x2245, 0x0338 } },
1768 { 0x2249, { 0x2248, 0x0338 } },
1769 { 0x2260, { 0x003D, 0x0338 } },
1770 { 0x2262, { 0x2261, 0x0338 } },
1771 { 0x226D, { 0x224D, 0x0338 } },
1772 { 0x226E, { 0x003C, 0x0338 } },
1773 { 0x226F, { 0x003E, 0x0338 } },
1774 { 0x2270, { 0x2264, 0x0338 } },
1775 { 0x2271, { 0x2265, 0x0338 } },
1776 { 0x2274, { 0x2272, 0x0338 } },
1777 { 0x2275, { 0x2273, 0x0338 } },
1778 { 0x2278, { 0x2276, 0x0338 } },
1779 { 0x2279, { 0x2277, 0x0338 } },
1780 { 0x2280, { 0x227A, 0x0338 } },
1781 { 0x2281, { 0x227B, 0x0338 } },
1782 { 0x2284, { 0x2282, 0x0338 } },
1783 { 0x2285, { 0x2283, 0x0338 } },
1784 { 0x2288, { 0x2286, 0x0338 } },
1785 { 0x2289, { 0x2287, 0x0338 } },
1786 { 0x22AC, { 0x22A2, 0x0338 } },
1787 { 0x22AD, { 0x22A8, 0x0338 } },
1788 { 0x22AE, { 0x22A9, 0x0338 } },
1789 { 0x22AF, { 0x22AB, 0x0338 } },
1790 { 0x22E0, { 0x227C, 0x0338 } },
1791 { 0x22E1, { 0x227D, 0x0338 } },
1792 { 0x22E2, { 0x2291, 0x0338 } },
1793 { 0x22E3, { 0x2292, 0x0338 } },
1794 { 0x22EA, { 0x22B2, 0x0338 } },
1795 { 0x22EB, { 0x22B3, 0x0338 } },
1796 { 0x22EC, { 0x22B4, 0x0338 } },
1797 { 0x22ED, { 0x22B5, 0x0338 } },
1798 { 0x2329, { 0x3008, 0 } },
1799 { 0x232A, { 0x3009, 0 } },
1800 { 0x2ADC, { 0x2ADD, 0x0338 } },
1801 { 0x304C, { 0x304B, 0x3099 } },
1802 { 0x304E, { 0x304D, 0x3099 } },
1803 { 0x3050, { 0x304F, 0x3099 } },
1804 { 0x3052, { 0x3051, 0x3099 } },
1805 { 0x3054, { 0x3053, 0x3099 } },
1806 { 0x3056, { 0x3055, 0x3099 } },
1807 { 0x3058, { 0x3057, 0x3099 } },
1808 { 0x305A, { 0x3059, 0x3099 } },
1809 { 0x305C, { 0x305B, 0x3099 } },
1810 { 0x305E, { 0x305D, 0x3099 } },
1811 { 0x3060, { 0x305F, 0x3099 } },
1812 { 0x3062, { 0x3061, 0x3099 } },
1813 { 0x3065, { 0x3064, 0x3099 } },
1814 { 0x3067, { 0x3066, 0x3099 } },
1815 { 0x3069, { 0x3068, 0x3099 } },
1816 { 0x3070, { 0x306F, 0x3099 } },
1817 { 0x3071, { 0x306F, 0x309A } },
1818 { 0x3073, { 0x3072, 0x3099 } },
1819 { 0x3074, { 0x3072, 0x309A } },
1820 { 0x3076, { 0x3075, 0x3099 } },
1821 { 0x3077, { 0x3075, 0x309A } },
1822 { 0x3079, { 0x3078, 0x3099 } },
1823 { 0x307A, { 0x3078, 0x309A } },
1824 { 0x307C, { 0x307B, 0x3099 } },
1825 { 0x307D, { 0x307B, 0x309A } },
1826 { 0x3094, { 0x3046, 0x3099 } },
1827 { 0x309E, { 0x309D, 0x3099 } },
1828 { 0x30AC, { 0x30AB, 0x3099 } },
1829 { 0x30AE, { 0x30AD, 0x3099 } },
1830 { 0x30B0, { 0x30AF, 0x3099 } },
1831 { 0x30B2, { 0x30B1, 0x3099 } },
1832 { 0x30B4, { 0x30B3, 0x3099 } },
1833 { 0x30B6, { 0x30B5, 0x3099 } },
1834 { 0x30B8, { 0x30B7, 0x3099 } },
1835 { 0x30BA, { 0x30B9, 0x3099 } },
1836 { 0x30BC, { 0x30BB, 0x3099 } },
1837 { 0x30BE, { 0x30BD, 0x3099 } },
1838 { 0x30C0, { 0x30BF, 0x3099 } },
1839 { 0x30C2, { 0x30C1, 0x3099 } },
1840 { 0x30C5, { 0x30C4, 0x3099 } },
1841 { 0x30C7, { 0x30C6, 0x3099 } },
1842 { 0x30C9, { 0x30C8, 0x3099 } },
1843 { 0x30D0, { 0x30CF, 0x3099 } },
1844 { 0x30D1, { 0x30CF, 0x309A } },
1845 { 0x30D3, { 0x30D2, 0x3099 } },
1846 { 0x30D4, { 0x30D2, 0x309A } },
1847 { 0x30D6, { 0x30D5, 0x3099 } },
1848 { 0x30D7, { 0x30D5, 0x309A } },
1849 { 0x30D9, { 0x30D8, 0x3099 } },
1850 { 0x30DA, { 0x30D8, 0x309A } },
1851 { 0x30DC, { 0x30DB, 0x3099 } },
1852 { 0x30DD, { 0x30DB, 0x309A } },
1853 { 0x30F4, { 0x30A6, 0x3099 } },
1854 { 0x30F7, { 0x30EF, 0x3099 } },
1855 { 0x30F8, { 0x30F0, 0x3099 } },
1856 { 0x30F9, { 0x30F1, 0x3099 } },
1857 { 0x30FA, { 0x30F2, 0x3099 } },
1858 { 0x30FE, { 0x30FD, 0x3099 } },
1859 { 0xF900, { 0x8C48, 0 } },
1860 { 0xF901, { 0x66F4, 0 } },
1861 { 0xF902, { 0x8ECA, 0 } },
1862 { 0xF903, { 0x8CC8, 0 } },
1863 { 0xF904, { 0x6ED1, 0 } },
1864 { 0xF905, { 0x4E32, 0 } },
1865 { 0xF906, { 0x53E5, 0 } },
1866 { 0xF907, { 0x9F9C, 0 } },
1867 { 0xF908, { 0x9F9C, 0 } },
1868 { 0xF909, { 0x5951, 0 } },
1869 { 0xF90A, { 0x91D1, 0 } },
1870 { 0xF90B, { 0x5587, 0 } },
1871 { 0xF90C, { 0x5948, 0 } },
1872 { 0xF90D, { 0x61F6, 0 } },
1873 { 0xF90E, { 0x7669, 0 } },
1874 { 0xF90F, { 0x7F85, 0 } },
1875 { 0xF910, { 0x863F, 0 } },
1876 { 0xF911, { 0x87BA, 0 } },
1877 { 0xF912, { 0x88F8, 0 } },
1878 { 0xF913, { 0x908F, 0 } },
1879 { 0xF914, { 0x6A02, 0 } },
1880 { 0xF915, { 0x6D1B, 0 } },
1881 { 0xF916, { 0x70D9, 0 } },
1882 { 0xF917, { 0x73DE, 0 } },
1883 { 0xF918, { 0x843D, 0 } },
1884 { 0xF919, { 0x916A, 0 } },
1885 { 0xF91A, { 0x99F1, 0 } },
1886 { 0xF91B, { 0x4E82, 0 } },
1887 { 0xF91C, { 0x5375, 0 } },
1888 { 0xF91D, { 0x6B04, 0 } },
1889 { 0xF91E, { 0x721B, 0 } },
1890 { 0xF91F, { 0x862D, 0 } },
1891 { 0xF920, { 0x9E1E, 0 } },
1892 { 0xF921, { 0x5D50, 0 } },
1893 { 0xF922, { 0x6FEB, 0 } },
1894 { 0xF923, { 0x85CD, 0 } },
1895 { 0xF924, { 0x8964, 0 } },
1896 { 0xF925, { 0x62C9, 0 } },
1897 { 0xF926, { 0x81D8, 0 } },
1898 { 0xF927, { 0x881F, 0 } },
1899 { 0xF928, { 0x5ECA, 0 } },
1900 { 0xF929, { 0x6717, 0 } },
1901 { 0xF92A, { 0x6D6A, 0 } },
1902 { 0xF92B, { 0x72FC, 0 } },
1903 { 0xF92C, { 0x90CE, 0 } },
1904 { 0xF92D, { 0x4F86, 0 } },
1905 { 0xF92E, { 0x51B7, 0 } },
1906 { 0xF92F, { 0x52DE, 0 } },
1907 { 0xF930, { 0x64C4, 0 } },
1908 { 0xF931, { 0x6AD3, 0 } },
1909 { 0xF932, { 0x7210, 0 } },
1910 { 0xF933, { 0x76E7, 0 } },
1911 { 0xF934, { 0x8001, 0 } },
1912 { 0xF935, { 0x8606, 0 } },
1913 { 0xF936, { 0x865C, 0 } },
1914 { 0xF937, { 0x8DEF, 0 } },
1915 { 0xF938, { 0x9732, 0 } },
1916 { 0xF939, { 0x9B6F, 0 } },
1917 { 0xF93A, { 0x9DFA, 0 } },
1918 { 0xF93B, { 0x788C, 0 } },
1919 { 0xF93C, { 0x797F, 0 } },
1920 { 0xF93D, { 0x7DA0, 0 } },
1921 { 0xF93E, { 0x83C9, 0 } },
1922 { 0xF93F, { 0x9304, 0 } },
1923 { 0xF940, { 0x9E7F, 0 } },
1924 { 0xF941, { 0x8AD6, 0 } },
1925 { 0xF942, { 0x58DF, 0 } },
1926 { 0xF943, { 0x5F04, 0 } },
1927 { 0xF944, { 0x7C60, 0 } },
1928 { 0xF945, { 0x807E, 0 } },
1929 { 0xF946, { 0x7262, 0 } },
1930 { 0xF947, { 0x78CA, 0 } },
1931 { 0xF948, { 0x8CC2, 0 } },
1932 { 0xF949, { 0x96F7, 0 } },
1933 { 0xF94A, { 0x58D8, 0 } },
1934 { 0xF94B, { 0x5C62, 0 } },
1935 { 0xF94C, { 0x6A13, 0 } },
1936 { 0xF94D, { 0x6DDA, 0 } },
1937 { 0xF94E, { 0x6F0F, 0 } },
1938 { 0xF94F, { 0x7D2F, 0 } },
1939 { 0xF950, { 0x7E37, 0 } },
1940 { 0xF951, { 0x964B, 0 } },
1941 { 0xF952, { 0x52D2, 0 } },
1942 { 0xF953, { 0x808B, 0 } },
1943 { 0xF954, { 0x51DC, 0 } },
1944 { 0xF955, { 0x51CC, 0 } },
1945 { 0xF956, { 0x7A1C, 0 } },
1946 { 0xF957, { 0x7DBE, 0 } },
1947 { 0xF958, { 0x83F1, 0 } },
1948 { 0xF959, { 0x9675, 0 } },
1949 { 0xF95A, { 0x8B80, 0 } },
1950 { 0xF95B, { 0x62CF, 0 } },
1951 { 0xF95C, { 0x6A02, 0 } },
1952 { 0xF95D, { 0x8AFE, 0 } },
1953 { 0xF95E, { 0x4E39, 0 } },
1954 { 0xF95F, { 0x5BE7, 0 } },
1955 { 0xF960, { 0x6012, 0 } },
1956 { 0xF961, { 0x7387, 0 } },
1957 { 0xF962, { 0x7570, 0 } },
1958 { 0xF963, { 0x5317, 0 } },
1959 { 0xF964, { 0x78FB, 0 } },
1960 { 0xF965, { 0x4FBF, 0 } },
1961 { 0xF966, { 0x5FA9, 0 } },
1962 { 0xF967, { 0x4E0D, 0 } },
1963 { 0xF968, { 0x6CCC, 0 } },
1964 { 0xF969, { 0x6578, 0 } },
1965 { 0xF96A, { 0x7D22, 0 } },
1966 { 0xF96B, { 0x53C3, 0 } },
1967 { 0xF96C, { 0x585E, 0 } },
1968 { 0xF96D, { 0x7701, 0 } },
1969 { 0xF96E, { 0x8449, 0 } },
1970 { 0xF96F, { 0x8AAA, 0 } },
1971 { 0xF970, { 0x6BBA, 0 } },
1972 { 0xF971, { 0x8FB0, 0 } },
1973 { 0xF972, { 0x6C88, 0 } },
1974 { 0xF973, { 0x62FE, 0 } },
1975 { 0xF974, { 0x82E5, 0 } },
1976 { 0xF975, { 0x63A0, 0 } },
1977 { 0xF976, { 0x7565, 0 } },
1978 { 0xF977, { 0x4EAE, 0 } },
1979 { 0xF978, { 0x5169, 0 } },
1980 { 0xF979, { 0x51C9, 0 } },
1981 { 0xF97A, { 0x6881, 0 } },
1982 { 0xF97B, { 0x7CE7, 0 } },
1983 { 0xF97C, { 0x826F, 0 } },
1984 { 0xF97D, { 0x8AD2, 0 } },
1985 { 0xF97E, { 0x91CF, 0 } },
1986 { 0xF97F, { 0x52F5, 0 } },
1987 { 0xF980, { 0x5442, 0 } },
1988 { 0xF981, { 0x5973, 0 } },
1989 { 0xF982, { 0x5EEC, 0 } },
1990 { 0xF983, { 0x65C5, 0 } },
1991 { 0xF984, { 0x6FFE, 0 } },
1992 { 0xF985, { 0x792A, 0 } },
1993 { 0xF986, { 0x95AD, 0 } },
1994 { 0xF987, { 0x9A6A, 0 } },
1995 { 0xF988, { 0x9E97, 0 } },
1996 { 0xF989, { 0x9ECE, 0 } },
1997 { 0xF98A, { 0x529B, 0 } },
1998 { 0xF98B, { 0x66C6, 0 } },
1999 { 0xF98C, { 0x6B77, 0 } },
2000 { 0xF98D, { 0x8F62, 0 } },
2001 { 0xF98E, { 0x5E74, 0 } },
2002 { 0xF98F, { 0x6190, 0 } },
2003 { 0xF990, { 0x6200, 0 } },
2004 { 0xF991, { 0x649A, 0 } },
2005 { 0xF992, { 0x6F23, 0 } },
2006 { 0xF993, { 0x7149, 0 } },
2007 { 0xF994, { 0x7489, 0 } },
2008 { 0xF995, { 0x79CA, 0 } },
2009 { 0xF996, { 0x7DF4, 0 } },
2010 { 0xF997, { 0x806F, 0 } },
2011 { 0xF998, { 0x8F26, 0 } },
2012 { 0xF999, { 0x84EE, 0 } },
2013 { 0xF99A, { 0x9023, 0 } },
2014 { 0xF99B, { 0x934A, 0 } },
2015 { 0xF99C, { 0x5217, 0 } },
2016 { 0xF99D, { 0x52A3, 0 } },
2017 { 0xF99E, { 0x54BD, 0 } },
2018 { 0xF99F, { 0x70C8, 0 } },
2019 { 0xF9A0, { 0x88C2, 0 } },
2020 { 0xF9A1, { 0x8AAA, 0 } },
2021 { 0xF9A2, { 0x5EC9, 0 } },
2022 { 0xF9A3, { 0x5FF5, 0 } },
2023 { 0xF9A4, { 0x637B, 0 } },
2024 { 0xF9A5, { 0x6BAE, 0 } },
2025 { 0xF9A6, { 0x7C3E, 0 } },
2026 { 0xF9A7, { 0x7375, 0 } },
2027 { 0xF9A8, { 0x4EE4, 0 } },
2028 { 0xF9A9, { 0x56F9, 0 } },
2029 { 0xF9AA, { 0x5BE7, 0 } },
2030 { 0xF9AB, { 0x5DBA, 0 } },
2031 { 0xF9AC, { 0x601C, 0 } },
2032 { 0xF9AD, { 0x73B2, 0 } },
2033 { 0xF9AE, { 0x7469, 0 } },
2034 { 0xF9AF, { 0x7F9A, 0 } },
2035 { 0xF9B0, { 0x8046, 0 } },
2036 { 0xF9B1, { 0x9234, 0 } },
2037 { 0xF9B2, { 0x96F6, 0 } },
2038 { 0xF9B3, { 0x9748, 0 } },
2039 { 0xF9B4, { 0x9818, 0 } },
2040 { 0xF9B5, { 0x4F8B, 0 } },
2041 { 0xF9B6, { 0x79AE, 0 } },
2042 { 0xF9B7, { 0x91B4, 0 } },
2043 { 0xF9B8, { 0x96B8, 0 } },
2044 { 0xF9B9, { 0x60E1, 0 } },
2045 { 0xF9BA, { 0x4E86, 0 } },
2046 { 0xF9BB, { 0x50DA, 0 } },
2047 { 0xF9BC, { 0x5BEE, 0 } },
2048 { 0xF9BD, { 0x5C3F, 0 } },
2049 { 0xF9BE, { 0x6599, 0 } },
2050 { 0xF9BF, { 0x6A02, 0 } },
2051 { 0xF9C0, { 0x71CE, 0 } },
2052 { 0xF9C1, { 0x7642, 0 } },
2053 { 0xF9C2, { 0x84FC, 0 } },
2054 { 0xF9C3, { 0x907C, 0 } },
2055 { 0xF9C4, { 0x9F8D, 0 } },
2056 { 0xF9C5, { 0x6688, 0 } },
2057 { 0xF9C6, { 0x962E, 0 } },
2058 { 0xF9C7, { 0x5289, 0 } },
2059 { 0xF9C8, { 0x677B, 0 } },
2060 { 0xF9C9, { 0x67F3, 0 } },
2061 { 0xF9CA, { 0x6D41, 0 } },
2062 { 0xF9CB, { 0x6E9C, 0 } },
2063 { 0xF9CC, { 0x7409, 0 } },
2064 { 0xF9CD, { 0x7559, 0 } },
2065 { 0xF9CE, { 0x786B, 0 } },
2066 { 0xF9CF, { 0x7D10, 0 } },
2067 { 0xF9D0, { 0x985E, 0 } },
2068 { 0xF9D1, { 0x516D, 0 } },
2069 { 0xF9D2, { 0x622E, 0 } },
2070 { 0xF9D3, { 0x9678, 0 } },
2071 { 0xF9D4, { 0x502B, 0 } },
2072 { 0xF9D5, { 0x5D19, 0 } },
2073 { 0xF9D6, { 0x6DEA, 0 } },
2074 { 0xF9D7, { 0x8F2A, 0 } },
2075 { 0xF9D8, { 0x5F8B, 0 } },
2076 { 0xF9D9, { 0x6144, 0 } },
2077 { 0xF9DA, { 0x6817, 0 } },
2078 { 0xF9DB, { 0x7387, 0 } },
2079 { 0xF9DC, { 0x9686, 0 } },
2080 { 0xF9DD, { 0x5229, 0 } },
2081 { 0xF9DE, { 0x540F, 0 } },
2082 { 0xF9DF, { 0x5C65, 0 } },
2083 { 0xF9E0, { 0x6613, 0 } },
2084 { 0xF9E1, { 0x674E, 0 } },
2085 { 0xF9E2, { 0x68A8, 0 } },
2086 { 0xF9E3, { 0x6CE5, 0 } },
2087 { 0xF9E4, { 0x7406, 0 } },
2088 { 0xF9E5, { 0x75E2, 0 } },
2089 { 0xF9E6, { 0x7F79, 0 } },
2090 { 0xF9E7, { 0x88CF, 0 } },
2091 { 0xF9E8, { 0x88E1, 0 } },
2092 { 0xF9E9, { 0x91CC, 0 } },
2093 { 0xF9EA, { 0x96E2, 0 } },
2094 { 0xF9EB, { 0x533F, 0 } },
2095 { 0xF9EC, { 0x6EBA, 0 } },
2096 { 0xF9ED, { 0x541D, 0 } },
2097 { 0xF9EE, { 0x71D0, 0 } },
2098 { 0xF9EF, { 0x7498, 0 } },
2099 { 0xF9F0, { 0x85FA, 0 } },
2100 { 0xF9F1, { 0x96A3, 0 } },
2101 { 0xF9F2, { 0x9C57, 0 } },
2102 { 0xF9F3, { 0x9E9F, 0 } },
2103 { 0xF9F4, { 0x6797, 0 } },
2104 { 0xF9F5, { 0x6DCB, 0 } },
2105 { 0xF9F6, { 0x81E8, 0 } },
2106 { 0xF9F7, { 0x7ACB, 0 } },
2107 { 0xF9F8, { 0x7B20, 0 } },
2108 { 0xF9F9, { 0x7C92, 0 } },
2109 { 0xF9FA, { 0x72C0, 0 } },
2110 { 0xF9FB, { 0x7099, 0 } },
2111 { 0xF9FC, { 0x8B58, 0 } },
2112 { 0xF9FD, { 0x4EC0, 0 } },
2113 { 0xF9FE, { 0x8336, 0 } },
2114 { 0xF9FF, { 0x523A, 0 } },
2115 { 0xFA00, { 0x5207, 0 } },
2116 { 0xFA01, { 0x5EA6, 0 } },
2117 { 0xFA02, { 0x62D3, 0 } },
2118 { 0xFA03, { 0x7CD6, 0 } },
2119 { 0xFA04, { 0x5B85, 0 } },
2120 { 0xFA05, { 0x6D1E, 0 } },
2121 { 0xFA06, { 0x66B4, 0 } },
2122 { 0xFA07, { 0x8F3B, 0 } },
2123 { 0xFA08, { 0x884C, 0 } },
2124 { 0xFA09, { 0x964D, 0 } },
2125 { 0xFA0A, { 0x898B, 0 } },
2126 { 0xFA0B, { 0x5ED3, 0 } },
2127 { 0xFA0C, { 0x5140, 0 } },
2128 { 0xFA0D, { 0x55C0, 0 } },
2129 { 0xFA10, { 0x585A, 0 } },
2130 { 0xFA12, { 0x6674, 0 } },
2131 { 0xFA15, { 0x51DE, 0 } },
2132 { 0xFA16, { 0x732A, 0 } },
2133 { 0xFA17, { 0x76CA, 0 } },
2134 { 0xFA18, { 0x793C, 0 } },
2135 { 0xFA19, { 0x795E, 0 } },
2136 { 0xFA1A, { 0x7965, 0 } },
2137 { 0xFA1B, { 0x798F, 0 } },
2138 { 0xFA1C, { 0x9756, 0 } },
2139 { 0xFA1D, { 0x7CBE, 0 } },
2140 { 0xFA1E, { 0x7FBD, 0 } },
2141 { 0xFA20, { 0x8612, 0 } },
2142 { 0xFA22, { 0x8AF8, 0 } },
2143 { 0xFA25, { 0x9038, 0 } },
2144 { 0xFA26, { 0x90FD, 0 } },
2145 { 0xFA2A, { 0x98EF, 0 } },
2146 { 0xFA2B, { 0x98FC, 0 } },
2147 { 0xFA2C, { 0x9928, 0 } },
2148 { 0xFA2D, { 0x9DB4, 0 } },
2149 { 0xFA2E, { 0x90DE, 0 } },
2150 { 0xFA2F, { 0x96B7, 0 } },
2151 { 0xFA30, { 0x4FAE, 0 } },
2152 { 0xFA31, { 0x50E7, 0 } },
2153 { 0xFA32, { 0x514D, 0 } },
2154 { 0xFA33, { 0x52C9, 0 } },
2155 { 0xFA34, { 0x52E4, 0 } },
2156 { 0xFA35, { 0x5351, 0 } },
2157 { 0xFA36, { 0x559D, 0 } },
2158 { 0xFA37, { 0x5606, 0 } },
2159 { 0xFA38, { 0x5668, 0 } },
2160 { 0xFA39, { 0x5840, 0 } },
2161 { 0xFA3A, { 0x58A8, 0 } },
2162 { 0xFA3B, { 0x5C64, 0 } },
2163 { 0xFA3C, { 0x5C6E, 0 } },
2164 { 0xFA3D, { 0x6094, 0 } },
2165 { 0xFA3E, { 0x6168, 0 } },
2166 { 0xFA3F, { 0x618E, 0 } },
2167 { 0xFA40, { 0x61F2, 0 } },
2168 { 0xFA41, { 0x654F, 0 } },
2169 { 0xFA42, { 0x65E2, 0 } },
2170 { 0xFA43, { 0x6691, 0 } },
2171 { 0xFA44, { 0x6885, 0 } },
2172 { 0xFA45, { 0x6D77, 0 } },
2173 { 0xFA46, { 0x6E1A, 0 } },
2174 { 0xFA47, { 0x6F22, 0 } },
2175 { 0xFA48, { 0x716E, 0 } },
2176 { 0xFA49, { 0x722B, 0 } },
2177 { 0xFA4A, { 0x7422, 0 } },
2178 { 0xFA4B, { 0x7891, 0 } },
2179 { 0xFA4C, { 0x793E, 0 } },
2180 { 0xFA4D, { 0x7949, 0 } },
2181 { 0xFA4E, { 0x7948, 0 } },
2182 { 0xFA4F, { 0x7950, 0 } },
2183 { 0xFA50, { 0x7956, 0 } },
2184 { 0xFA51, { 0x795D, 0 } },
2185 { 0xFA52, { 0x798D, 0 } },
2186 { 0xFA53, { 0x798E, 0 } },
2187 { 0xFA54, { 0x7A40, 0 } },
2188 { 0xFA55, { 0x7A81, 0 } },
2189 { 0xFA56, { 0x7BC0, 0 } },
2190 { 0xFA57, { 0x7DF4, 0 } },
2191 { 0xFA58, { 0x7E09, 0 } },
2192 { 0xFA59, { 0x7E41, 0 } },
2193 { 0xFA5A, { 0x7F72, 0 } },
2194 { 0xFA5B, { 0x8005, 0 } },
2195 { 0xFA5C, { 0x81ED, 0 } },
2196 { 0xFA5D, { 0x8279, 0 } },
2197 { 0xFA5E, { 0x8279, 0 } },
2198 { 0xFA5F, { 0x8457, 0 } },
2199 { 0xFA60, { 0x8910, 0 } },
2200 { 0xFA61, { 0x8996, 0 } },
2201 { 0xFA62, { 0x8B01, 0 } },
2202 { 0xFA63, { 0x8B39, 0 } },
2203 { 0xFA64, { 0x8CD3, 0 } },
2204 { 0xFA65, { 0x8D08, 0 } },
2205 { 0xFA66, { 0x8FB6, 0 } },
2206 { 0xFA67, { 0x9038, 0 } },
2207 { 0xFA68, { 0x96E3, 0 } },
2208 { 0xFA69, { 0x97FF, 0 } },
2209 { 0xFA6A, { 0x983B, 0 } },
2210 { 0xFA6B, { 0x6075, 0 } },
2211 { 0xFA6C, { 0x242EE, 0 } },
2212 { 0xFA6D, { 0x8218, 0 } },
2213 { 0xFA70, { 0x4E26, 0 } },
2214 { 0xFA71, { 0x51B5, 0 } },
2215 { 0xFA72, { 0x5168, 0 } },
2216 { 0xFA73, { 0x4F80, 0 } },
2217 { 0xFA74, { 0x5145, 0 } },
2218 { 0xFA75, { 0x5180, 0 } },
2219 { 0xFA76, { 0x52C7, 0 } },
2220 { 0xFA77, { 0x52FA, 0 } },
2221 { 0xFA78, { 0x559D, 0 } },
2222 { 0xFA79, { 0x5555, 0 } },
2223 { 0xFA7A, { 0x5599, 0 } },
2224 { 0xFA7B, { 0x55E2, 0 } },
2225 { 0xFA7C, { 0x585A, 0 } },
2226 { 0xFA7D, { 0x58B3, 0 } },
2227 { 0xFA7E, { 0x5944, 0 } },
2228 { 0xFA7F, { 0x5954, 0 } },
2229 { 0xFA80, { 0x5A62, 0 } },
2230 { 0xFA81, { 0x5B28, 0 } },
2231 { 0xFA82, { 0x5ED2, 0 } },
2232 { 0xFA83, { 0x5ED9, 0 } },
2233 { 0xFA84, { 0x5F69, 0 } },
2234 { 0xFA85, { 0x5FAD, 0 } },
2235 { 0xFA86, { 0x60D8, 0 } },
2236 { 0xFA87, { 0x614E, 0 } },
2237 { 0xFA88, { 0x6108, 0 } },
2238 { 0xFA89, { 0x618E, 0 } },
2239 { 0xFA8A, { 0x6160, 0 } },
2240 { 0xFA8B, { 0x61F2, 0 } },
2241 { 0xFA8C, { 0x6234, 0 } },
2242 { 0xFA8D, { 0x63C4, 0 } },
2243 { 0xFA8E, { 0x641C, 0 } },
2244 { 0xFA8F, { 0x6452, 0 } },
2245 { 0xFA90, { 0x6556, 0 } },
2246 { 0xFA91, { 0x6674, 0 } },
2247 { 0xFA92, { 0x6717, 0 } },
2248 { 0xFA93, { 0x671B, 0 } },
2249 { 0xFA94, { 0x6756, 0 } },
2250 { 0xFA95, { 0x6B79, 0 } },
2251 { 0xFA96, { 0x6BBA, 0 } },
2252 { 0xFA97, { 0x6D41, 0 } },
2253 { 0xFA98, { 0x6EDB, 0 } },
2254 { 0xFA99, { 0x6ECB, 0 } },
2255 { 0xFA9A, { 0x6F22, 0 } },
2256 { 0xFA9B, { 0x701E, 0 } },
2257 { 0xFA9C, { 0x716E, 0 } },
2258 { 0xFA9D, { 0x77A7, 0 } },
2259 { 0xFA9E, { 0x7235, 0 } },
2260 { 0xFA9F, { 0x72AF, 0 } },
2261 { 0xFAA0, { 0x732A, 0 } },
2262 { 0xFAA1, { 0x7471, 0 } },
2263 { 0xFAA2, { 0x7506, 0 } },
2264 { 0xFAA3, { 0x753B, 0 } },
2265 { 0xFAA4, { 0x761D, 0 } },
2266 { 0xFAA5, { 0x761F, 0 } },
2267 { 0xFAA6, { 0x76CA, 0 } },
2268 { 0xFAA7, { 0x76DB, 0 } },
2269 { 0xFAA8, { 0x76F4, 0 } },
2270 { 0xFAA9, { 0x774A, 0 } },
2271 { 0xFAAA, { 0x7740, 0 } },
2272 { 0xFAAB, { 0x78CC, 0 } },
2273 { 0xFAAC, { 0x7AB1, 0 } },
2274 { 0xFAAD, { 0x7BC0, 0 } },
2275 { 0xFAAE, { 0x7C7B, 0 } },
2276 { 0xFAAF, { 0x7D5B, 0 } },
2277 { 0xFAB0, { 0x7DF4, 0 } },
2278 { 0xFAB1, { 0x7F3E, 0 } },
2279 { 0xFAB2, { 0x8005, 0 } },
2280 { 0xFAB3, { 0x8352, 0 } },
2281 { 0xFAB4, { 0x83EF, 0 } },
2282 { 0xFAB5, { 0x8779, 0 } },
2283 { 0xFAB6, { 0x8941, 0 } },
2284 { 0xFAB7, { 0x8986, 0 } },
2285 { 0xFAB8, { 0x8996, 0 } },
2286 { 0xFAB9, { 0x8ABF, 0 } },
2287 { 0xFABA, { 0x8AF8, 0 } },
2288 { 0xFABB, { 0x8ACB, 0 } },
2289 { 0xFABC, { 0x8B01, 0 } },
2290 { 0xFABD, { 0x8AFE, 0 } },
2291 { 0xFABE, { 0x8AED, 0 } },
2292 { 0xFABF, { 0x8B39, 0 } },
2293 { 0xFAC0, { 0x8B8A, 0 } },
2294 { 0xFAC1, { 0x8D08, 0 } },
2295 { 0xFAC2, { 0x8F38, 0 } },
2296 { 0xFAC3, { 0x9072, 0 } },
2297 { 0xFAC4, { 0x9199, 0 } },
2298 { 0xFAC5, { 0x9276, 0 } },
2299 { 0xFAC6, { 0x967C, 0 } },
2300 { 0xFAC7, { 0x96E3, 0 } },
2301 { 0xFAC8, { 0x9756, 0 } },
2302 { 0xFAC9, { 0x97DB, 0 } },
2303 { 0xFACA, { 0x97FF, 0 } },
2304 { 0xFACB, { 0x980B, 0 } },
2305 { 0xFACC, { 0x983B, 0 } },
2306 { 0xFACD, { 0x9B12, 0 } },
2307 { 0xFACE, { 0x9F9C, 0 } },
2308 { 0xFACF, { 0x2284A, 0 } },
2309 { 0xFAD0, { 0x22844, 0 } },
2310 { 0xFAD1, { 0x233D5, 0 } },
2311 { 0xFAD2, { 0x3B9D, 0 } },
2312 { 0xFAD3, { 0x4018, 0 } },
2313 { 0xFAD4, { 0x4039, 0 } },
2314 { 0xFAD5, { 0x25249, 0 } },
2315 { 0xFAD6, { 0x25CD0, 0 } },
2316 { 0xFAD7, { 0x27ED3, 0 } },
2317 { 0xFAD8, { 0x9F43, 0 } },
2318 { 0xFAD9, { 0x9F8E, 0 } },
2319 { 0xFB1D, { 0x05D9, 0x05B4 } },
2320 { 0xFB1F, { 0x05F2, 0x05B7 } },
2321 { 0xFB2A, { 0x05E9, 0x05C1 } },
2322 { 0xFB2B, { 0x05E9, 0x05C2 } },
2323 { 0xFB2C, { 0xFB49, 0x05C1 } },
2324 { 0xFB2D, { 0xFB49, 0x05C2 } },
2325 { 0xFB2E, { 0x05D0, 0x05B7 } },
2326 { 0xFB2F, { 0x05D0, 0x05B8 } },
2327 { 0xFB30, { 0x05D0, 0x05BC } },
2328 { 0xFB31, { 0x05D1, 0x05BC } },
2329 { 0xFB32, { 0x05D2, 0x05BC } },
2330 { 0xFB33, { 0x05D3, 0x05BC } },
2331 { 0xFB34, { 0x05D4, 0x05BC } },
2332 { 0xFB35, { 0x05D5, 0x05BC } },
2333 { 0xFB36, { 0x05D6, 0x05BC } },
2334 { 0xFB38, { 0x05D8, 0x05BC } },
2335 { 0xFB39, { 0x05D9, 0x05BC } },
2336 { 0xFB3A, { 0x05DA, 0x05BC } },
2337 { 0xFB3B, { 0x05DB, 0x05BC } },
2338 { 0xFB3C, { 0x05DC, 0x05BC } },
2339 { 0xFB3E, { 0x05DE, 0x05BC } },
2340 { 0xFB40, { 0x05E0, 0x05BC } },
2341 { 0xFB41, { 0x05E1, 0x05BC } },
2342 { 0xFB43, { 0x05E3, 0x05BC } },
2343 { 0xFB44, { 0x05E4, 0x05BC } },
2344 { 0xFB46, { 0x05E6, 0x05BC } },
2345 { 0xFB47, { 0x05E7, 0x05BC } },
2346 { 0xFB48, { 0x05E8, 0x05BC } },
2347 { 0xFB49, { 0x05E9, 0x05BC } },
2348 { 0xFB4A, { 0x05EA, 0x05BC } },
2349 { 0xFB4B, { 0x05D5, 0x05B9 } },
2350 { 0xFB4C, { 0x05D1, 0x05BF } },
2351 { 0xFB4D, { 0x05DB, 0x05BF } },
2352 { 0xFB4E, { 0x05E4, 0x05BF } },
2353 { 0x1109A, { 0x11099, 0x110BA } },
2354 { 0x1109C, { 0x1109B, 0x110BA } },
2355 { 0x110AB, { 0x110A5, 0x110BA } },
2356 { 0x1112E, { 0x11131, 0x11127 } },
2357 { 0x1112F, { 0x11132, 0x11127 } },
2358 { 0x1134B, { 0x11347, 0x1133E } },
2359 { 0x1134C, { 0x11347, 0x11357 } },
2360 { 0x114BB, { 0x114B9, 0x114BA } },
2361 { 0x114BC, { 0x114B9, 0x114B0 } },
2362 { 0x114BE, { 0x114B9, 0x114BD } },
2363 { 0x115BA, { 0x115B8, 0x115AF } },
2364 { 0x115BB, { 0x115B9, 0x115AF } },
2365 { 0x1D15E, { 0x1D157, 0x1D165 } },
2366 { 0x1D15F, { 0x1D158, 0x1D165 } },
2367 { 0x1D160, { 0x1D15F, 0x1D16E } },
2368 { 0x1D161, { 0x1D15F, 0x1D16F } },
2369 { 0x1D162, { 0x1D15F, 0x1D170 } },
2370 { 0x1D163, { 0x1D15F, 0x1D171 } },
2371 { 0x1D164, { 0x1D15F, 0x1D172 } },
2372 { 0x1D1BB, { 0x1D1B9, 0x1D165 } },
2373 { 0x1D1BC, { 0x1D1BA, 0x1D165 } },
2374 { 0x1D1BD, { 0x1D1BB, 0x1D16E } },
2375 { 0x1D1BE, { 0x1D1BC, 0x1D16E } },
2376 { 0x1D1BF, { 0x1D1BB, 0x1D16F } },
2377 { 0x1D1C0, { 0x1D1BC, 0x1D16F } },
2378 { 0x2F800, { 0x4E3D, 0 } },
2379 { 0x2F801, { 0x4E38, 0 } },
2380 { 0x2F802, { 0x4E41, 0 } },
2381 { 0x2F803, { 0x20122, 0 } },
2382 { 0x2F804, { 0x4F60, 0 } },
2383 { 0x2F805, { 0x4FAE, 0 } },
2384 { 0x2F806, { 0x4FBB, 0 } },
2385 { 0x2F807, { 0x5002, 0 } },
2386 { 0x2F808, { 0x507A, 0 } },
2387 { 0x2F809, { 0x5099, 0 } },
2388 { 0x2F80A, { 0x50E7, 0 } },
2389 { 0x2F80B, { 0x50CF, 0 } },
2390 { 0x2F80C, { 0x349E, 0 } },
2391 { 0x2F80D, { 0x2063A, 0 } },
2392 { 0x2F80E, { 0x514D, 0 } },
2393 { 0x2F80F, { 0x5154, 0 } },
2394 { 0x2F810, { 0x5164, 0 } },
2395 { 0x2F811, { 0x5177, 0 } },
2396 { 0x2F812, { 0x2051C, 0 } },
2397 { 0x2F813, { 0x34B9, 0 } },
2398 { 0x2F814, { 0x5167, 0 } },
2399 { 0x2F815, { 0x518D, 0 } },
2400 { 0x2F816, { 0x2054B, 0 } },
2401 { 0x2F817, { 0x5197, 0 } },
2402 { 0x2F818, { 0x51A4, 0 } },
2403 { 0x2F819, { 0x4ECC, 0 } },
2404 { 0x2F81A, { 0x51AC, 0 } },
2405 { 0x2F81B, { 0x51B5, 0 } },
2406 { 0x2F81C, { 0x291DF, 0 } },
2407 { 0x2F81D, { 0x51F5, 0 } },
2408 { 0x2F81E, { 0x5203, 0 } },
2409 { 0x2F81F, { 0x34DF, 0 } },
2410 { 0x2F820, { 0x523B, 0 } },
2411 { 0x2F821, { 0x5246, 0 } },
2412 { 0x2F822, { 0x5272, 0 } },
2413 { 0x2F823, { 0x5277, 0 } },
2414 { 0x2F824, { 0x3515, 0 } },
2415 { 0x2F825, { 0x52C7, 0 } },
2416 { 0x2F826, { 0x52C9, 0 } },
2417 { 0x2F827, { 0x52E4, 0 } },
2418 { 0x2F828, { 0x52FA, 0 } },
2419 { 0x2F829, { 0x5305, 0 } },
2420 { 0x2F82A, { 0x5306, 0 } },
2421 { 0x2F82B, { 0x5317, 0 } },
2422 { 0x2F82C, { 0x5349, 0 } },
2423 { 0x2F82D, { 0x5351, 0 } },
2424 { 0x2F82E, { 0x535A, 0 } },
2425 { 0x2F82F, { 0x5373, 0 } },
2426 { 0x2F830, { 0x537D, 0 } },
2427 { 0x2F831, { 0x537F, 0 } },
2428 { 0x2F832, { 0x537F, 0 } },
2429 { 0x2F833, { 0x537F, 0 } },
2430 { 0x2F834, { 0x20A2C, 0 } },
2431 { 0x2F835, { 0x7070, 0 } },
2432 { 0x2F836, { 0x53CA, 0 } },
2433 { 0x2F837, { 0x53DF, 0 } },
2434 { 0x2F838, { 0x20B63, 0 } },
2435 { 0x2F839, { 0x53EB, 0 } },
2436 { 0x2F83A, { 0x53F1, 0 } },
2437 { 0x2F83B, { 0x5406, 0 } },
2438 { 0x2F83C, { 0x549E, 0 } },
2439 { 0x2F83D, { 0x5438, 0 } },
2440 { 0x2F83E, { 0x5448, 0 } },
2441 { 0x2F83F, { 0x5468, 0 } },
2442 { 0x2F840, { 0x54A2, 0 } },
2443 { 0x2F841, { 0x54F6, 0 } },
2444 { 0x2F842, { 0x5510, 0 } },
2445 { 0x2F843, { 0x5553, 0 } },
2446 { 0x2F844, { 0x5563, 0 } },
2447 { 0x2F845, { 0x5584, 0 } },
2448 { 0x2F846, { 0x5584, 0 } },
2449 { 0x2F847, { 0x5599, 0 } },
2450 { 0x2F848, { 0x55AB, 0 } },
2451 { 0x2F849, { 0x55B3, 0 } },
2452 { 0x2F84A, { 0x55C2, 0 } },
2453 { 0x2F84B, { 0x5716, 0 } },
2454 { 0x2F84C, { 0x5606, 0 } },
2455 { 0x2F84D, { 0x5717, 0 } },
2456 { 0x2F84E, { 0x5651, 0 } },
2457 { 0x2F84F, { 0x5674, 0 } },
2458 { 0x2F850, { 0x5207, 0 } },
2459 { 0x2F851, { 0x58EE, 0 } },
2460 { 0x2F852, { 0x57CE, 0 } },
2461 { 0x2F853, { 0x57F4, 0 } },
2462 { 0x2F854, { 0x580D, 0 } },
2463 { 0x2F855, { 0x578B, 0 } },
2464 { 0x2F856, { 0x5832, 0 } },
2465 { 0x2F857, { 0x5831, 0 } },
2466 { 0x2F858, { 0x58AC, 0 } },
2467 { 0x2F859, { 0x214E4, 0 } },
2468 { 0x2F85A, { 0x58F2, 0 } },
2469 { 0x2F85B, { 0x58F7, 0 } },
2470 { 0x2F85C, { 0x5906, 0 } },
2471 { 0x2F85D, { 0x591A, 0 } },
2472 { 0x2F85E, { 0x5922, 0 } },
2473 { 0x2F85F, { 0x5962, 0 } },
2474 { 0x2F860, { 0x216A8, 0 } },
2475 { 0x2F861, { 0x216EA, 0 } },
2476 { 0x2F862, { 0x59EC, 0 } },
2477 { 0x2F863, { 0x5A1B, 0 } },
2478 { 0x2F864, { 0x5A27, 0 } },
2479 { 0x2F865, { 0x59D8, 0 } },
2480 { 0x2F866, { 0x5A66, 0 } },
2481 { 0x2F867, { 0x36EE, 0 } },
2482 { 0x2F868, { 0x36FC, 0 } },
2483 { 0x2F869, { 0x5B08, 0 } },
2484 { 0x2F86A, { 0x5B3E, 0 } },
2485 { 0x2F86B, { 0x5B3E, 0 } },
2486 { 0x2F86C, { 0x219C8, 0 } },
2487 { 0x2F86D, { 0x5BC3, 0 } },
2488 { 0x2F86E, { 0x5BD8, 0 } },
2489 { 0x2F86F, { 0x5BE7, 0 } },
2490 { 0x2F870, { 0x5BF3, 0 } },
2491 { 0x2F871, { 0x21B18, 0 } },
2492 { 0x2F872, { 0x5BFF, 0 } },
2493 { 0x2F873, { 0x5C06, 0 } },
2494 { 0x2F874, { 0x5F53, 0 } },
2495 { 0x2F875, { 0x5C22, 0 } },
2496 { 0x2F876, { 0x3781, 0 } },
2497 { 0x2F877, { 0x5C60, 0 } },
2498 { 0x2F878, { 0x5C6E, 0 } },
2499 { 0x2F879, { 0x5CC0, 0 } },
2500 { 0x2F87A, { 0x5C8D, 0 } },
2501 { 0x2F87B, { 0x21DE4, 0 } },
2502 { 0x2F87C, { 0x5D43, 0 } },
2503 { 0x2F87D, { 0x21DE6, 0 } },
2504 { 0x2F87E, { 0x5D6E, 0 } },
2505 { 0x2F87F, { 0x5D6B, 0 } },
2506 { 0x2F880, { 0x5D7C, 0 } },
2507 { 0x2F881, { 0x5DE1, 0 } },
2508 { 0x2F882, { 0x5DE2, 0 } },
2509 { 0x2F883, { 0x382F, 0 } },
2510 { 0x2F884, { 0x5DFD, 0 } },
2511 { 0x2F885, { 0x5E28, 0 } },
2512 { 0x2F886, { 0x5E3D, 0 } },
2513 { 0x2F887, { 0x5E69, 0 } },
2514 { 0x2F888, { 0x3862, 0 } },
2515 { 0x2F889, { 0x22183, 0 } },
2516 { 0x2F88A, { 0x387C, 0 } },
2517 { 0x2F88B, { 0x5EB0, 0 } },
2518 { 0x2F88C, { 0x5EB3, 0 } },
2519 { 0x2F88D, { 0x5EB6, 0 } },
2520 { 0x2F88E, { 0x5ECA, 0 } },
2521 { 0x2F88F, { 0x2A392, 0 } },
2522 { 0x2F890, { 0x5EFE, 0 } },
2523 { 0x2F891, { 0x22331, 0 } },
2524 { 0x2F892, { 0x22331, 0 } },
2525 { 0x2F893, { 0x8201, 0 } },
2526 { 0x2F894, { 0x5F22, 0 } },
2527 { 0x2F895, { 0x5F22, 0 } },
2528 { 0x2F896, { 0x38C7, 0 } },
2529 { 0x2F897, { 0x232B8, 0 } },
2530 { 0x2F898, { 0x261DA, 0 } },
2531 { 0x2F899, { 0x5F62, 0 } },
2532 { 0x2F89A, { 0x5F6B, 0 } },
2533 { 0x2F89B, { 0x38E3, 0 } },
2534 { 0x2F89C, { 0x5F9A, 0 } },
2535 { 0x2F89D, { 0x5FCD, 0 } },
2536 { 0x2F89E, { 0x5FD7, 0 } },
2537 { 0x2F89F, { 0x5FF9, 0 } },
2538 { 0x2F8A0, { 0x6081, 0 } },
2539 { 0x2F8A1, { 0x393A, 0 } },
2540 { 0x2F8A2, { 0x391C, 0 } },
2541 { 0x2F8A3, { 0x6094, 0 } },
2542 { 0x2F8A4, { 0x226D4, 0 } },
2543 { 0x2F8A5, { 0x60C7, 0 } },
2544 { 0x2F8A6, { 0x6148, 0 } },
2545 { 0x2F8A7, { 0x614C, 0 } },
2546 { 0x2F8A8, { 0x614E, 0 } },
2547 { 0x2F8A9, { 0x614C, 0 } },
2548 { 0x2F8AA, { 0x617A, 0 } },
2549 { 0x2F8AB, { 0x618E, 0 } },
2550 { 0x2F8AC, { 0x61B2, 0 } },
2551 { 0x2F8AD, { 0x61A4, 0 } },
2552 { 0x2F8AE, { 0x61AF, 0 } },
2553 { 0x2F8AF, { 0x61DE, 0 } },
2554 { 0x2F8B0, { 0x61F2, 0 } },
2555 { 0x2F8B1, { 0x61F6, 0 } },
2556 { 0x2F8B2, { 0x6210, 0 } },
2557 { 0x2F8B3, { 0x621B, 0 } },
2558 { 0x2F8B4, { 0x625D, 0 } },
2559 { 0x2F8B5, { 0x62B1, 0 } },
2560 { 0x2F8B6, { 0x62D4, 0 } },
2561 { 0x2F8B7, { 0x6350, 0 } },
2562 { 0x2F8B8, { 0x22B0C, 0 } },
2563 { 0x2F8B9, { 0x633D, 0 } },
2564 { 0x2F8BA, { 0x62FC, 0 } },
2565 { 0x2F8BB, { 0x6368, 0 } },
2566 { 0x2F8BC, { 0x6383, 0 } },
2567 { 0x2F8BD, { 0x63E4, 0 } },
2568 { 0x2F8BE, { 0x22BF1, 0 } },
2569 { 0x2F8BF, { 0x6422, 0 } },
2570 { 0x2F8C0, { 0x63C5, 0 } },
2571 { 0x2F8C1, { 0x63A9, 0 } },
2572 { 0x2F8C2, { 0x3A2E, 0 } },
2573 { 0x2F8C3, { 0x6469, 0 } },
2574 { 0x2F8C4, { 0x647E, 0 } },
2575 { 0x2F8C5, { 0x649D, 0 } },
2576 { 0x2F8C6, { 0x6477, 0 } },
2577 { 0x2F8C7, { 0x3A6C, 0 } },
2578 { 0x2F8C8, { 0x654F, 0 } },
2579 { 0x2F8C9, { 0x656C, 0 } },
2580 { 0x2F8CA, { 0x2300A, 0 } },
2581 { 0x2F8CB, { 0x65E3, 0 } },
2582 { 0x2F8CC, { 0x66F8, 0 } },
2583 { 0x2F8CD, { 0x6649, 0 } },
2584 { 0x2F8CE, { 0x3B19, 0 } },
2585 { 0x2F8CF, { 0x6691, 0 } },
2586 { 0x2F8D0, { 0x3B08, 0 } },
2587 { 0x2F8D1, { 0x3AE4, 0 } },
2588 { 0x2F8D2, { 0x5192, 0 } },
2589 { 0x2F8D3, { 0x5195, 0 } },
2590 { 0x2F8D4, { 0x6700, 0 } },
2591 { 0x2F8D5, { 0x669C, 0 } },
2592 { 0x2F8D6, { 0x80AD, 0 } },
2593 { 0x2F8D7, { 0x43D9, 0 } },
2594 { 0x2F8D8, { 0x6717, 0 } },
2595 { 0x2F8D9, { 0x671B, 0 } },
2596 { 0x2F8DA, { 0x6721, 0 } },
2597 { 0x2F8DB, { 0x675E, 0 } },
2598 { 0x2F8DC, { 0x6753, 0 } },
2599 { 0x2F8DD, { 0x233C3, 0 } },
2600 { 0x2F8DE, { 0x3B49, 0 } },
2601 { 0x2F8DF, { 0x67FA, 0 } },
2602 { 0x2F8E0, { 0x6785, 0 } },
2603 { 0x2F8E1, { 0x6852, 0 } },
2604 { 0x2F8E2, { 0x6885, 0 } },
2605 { 0x2F8E3, { 0x2346D, 0 } },
2606 { 0x2F8E4, { 0x688E, 0 } },
2607 { 0x2F8E5, { 0x681F, 0 } },
2608 { 0x2F8E6, { 0x6914, 0 } },
2609 { 0x2F8E7, { 0x3B9D, 0 } },
2610 { 0x2F8E8, { 0x6942, 0 } },
2611 { 0x2F8E9, { 0x69A3, 0 } },
2612 { 0x2F8EA, { 0x69EA, 0 } },
2613 { 0x2F8EB, { 0x6AA8, 0 } },
2614 { 0x2F8EC, { 0x236A3, 0 } },
2615 { 0x2F8ED, { 0x6ADB, 0 } },
2616 { 0x2F8EE, { 0x3C18, 0 } },
2617 { 0x2F8EF, { 0x6B21, 0 } },
2618 { 0x2F8F0, { 0x238A7, 0 } },
2619 { 0x2F8F1, { 0x6B54, 0 } },
2620 { 0x2F8F2, { 0x3C4E, 0 } },
2621 { 0x2F8F3, { 0x6B72, 0 } },
2622 { 0x2F8F4, { 0x6B9F, 0 } },
2623 { 0x2F8F5, { 0x6BBA, 0 } },
2624 { 0x2F8F6, { 0x6BBB, 0 } },
2625 { 0x2F8F7, { 0x23A8D, 0 } },
2626 { 0x2F8F8, { 0x21D0B, 0 } },
2627 { 0x2F8F9, { 0x23AFA, 0 } },
2628 { 0x2F8FA, { 0x6C4E, 0 } },
2629 { 0x2F8FB, { 0x23CBC, 0 } },
2630 { 0x2F8FC, { 0x6CBF, 0 } },
2631 { 0x2F8FD, { 0x6CCD, 0 } },
2632 { 0x2F8FE, { 0x6C67, 0 } },
2633 { 0x2F8FF, { 0x6D16, 0 } },
2634 { 0x2F900, { 0x6D3E, 0 } },
2635 { 0x2F901, { 0x6D77, 0 } },
2636 { 0x2F902, { 0x6D41, 0 } },
2637 { 0x2F903, { 0x6D69, 0 } },
2638 { 0x2F904, { 0x6D78, 0 } },
2639 { 0x2F905, { 0x6D85, 0 } },
2640 { 0x2F906, { 0x23D1E, 0 } },
2641 { 0x2F907, { 0x6D34, 0 } },
2642 { 0x2F908, { 0x6E2F, 0 } },
2643 { 0x2F909, { 0x6E6E, 0 } },
2644 { 0x2F90A, { 0x3D33, 0 } },
2645 { 0x2F90B, { 0x6ECB, 0 } },
2646 { 0x2F90C, { 0x6EC7, 0 } },
2647 { 0x2F90D, { 0x23ED1, 0 } },
2648 { 0x2F90E, { 0x6DF9, 0 } },
2649 { 0x2F90F, { 0x6F6E, 0 } },
2650 { 0x2F910, { 0x23F5E, 0 } },
2651 { 0x2F911, { 0x23F8E, 0 } },
2652 { 0x2F912, { 0x6FC6, 0 } },
2653 { 0x2F913, { 0x7039, 0 } },
2654 { 0x2F914, { 0x701E, 0 } },
2655 { 0x2F915, { 0x701B, 0 } },
2656 { 0x2F916, { 0x3D96, 0 } },
2657 { 0x2F917, { 0x704A, 0 } },
2658 { 0x2F918, { 0x707D, 0 } },
2659 { 0x2F919, { 0x7077, 0 } },
2660 { 0x2F91A, { 0x70AD, 0 } },
2661 { 0x2F91B, { 0x20525, 0 } },
2662 { 0x2F91C, { 0x7145, 0 } },
2663 { 0x2F91D, { 0x24263, 0 } },
2664 { 0x2F91E, { 0x719C, 0 } },
2665 { 0x2F91F, { 0x243AB, 0 } },
2666 { 0x2F920, { 0x7228, 0 } },
2667 { 0x2F921, { 0x7235, 0 } },
2668 { 0x2F922, { 0x7250, 0 } },
2669 { 0x2F923, { 0x24608, 0 } },
2670 { 0x2F924, { 0x7280, 0 } },
2671 { 0x2F925, { 0x7295, 0 } },
2672 { 0x2F926, { 0x24735, 0 } },
2673 { 0x2F927, { 0x24814, 0 } },
2674 { 0x2F928, { 0x737A, 0 } },
2675 { 0x2F929, { 0x738B, 0 } },
2676 { 0x2F92A, { 0x3EAC, 0 } },
2677 { 0x2F92B, { 0x73A5, 0 } },
2678 { 0x2F92C, { 0x3EB8, 0 } },
2679 { 0x2F92D, { 0x3EB8, 0 } },
2680 { 0x2F92E, { 0x7447, 0 } },
2681 { 0x2F92F, { 0x745C, 0 } },
2682 { 0x2F930, { 0x7471, 0 } },
2683 { 0x2F931, { 0x7485, 0 } },
2684 { 0x2F932, { 0x74CA, 0 } },
2685 { 0x2F933, { 0x3F1B, 0 } },
2686 { 0x2F934, { 0x7524, 0 } },
2687 { 0x2F935, { 0x24C36, 0 } },
2688 { 0x2F936, { 0x753E, 0 } },
2689 { 0x2F937, { 0x24C92, 0 } },
2690 { 0x2F938, { 0x7570, 0 } },
2691 { 0x2F939, { 0x2219F, 0 } },
2692 { 0x2F93A, { 0x7610, 0 } },
2693 { 0x2F93B, { 0x24FA1, 0 } },
2694 { 0x2F93C, { 0x24FB8, 0 } },
2695 { 0x2F93D, { 0x25044, 0 } },
2696 { 0x2F93E, { 0x3FFC, 0 } },
2697 { 0x2F93F, { 0x4008, 0 } },
2698 { 0x2F940, { 0x76F4, 0 } },
2699 { 0x2F941, { 0x250F3, 0 } },
2700 { 0x2F942, { 0x250F2, 0 } },
2701 { 0x2F943, { 0x25119, 0 } },
2702 { 0x2F944, { 0x25133, 0 } },
2703 { 0x2F945, { 0x771E, 0 } },
2704 { 0x2F946, { 0x771F, 0 } },
2705 { 0x2F947, { 0x771F, 0 } },
2706 { 0x2F948, { 0x774A, 0 } },
2707 { 0x2F949, { 0x4039, 0 } },
2708 { 0x2F94A, { 0x778B, 0 } },
2709 { 0x2F94B, { 0x4046, 0 } },
2710 { 0x2F94C, { 0x4096, 0 } },
2711 { 0x2F94D, { 0x2541D, 0 } },
2712 { 0x2F94E, { 0x784E, 0 } },
2713 { 0x2F94F, { 0x788C, 0 } },
2714 { 0x2F950, { 0x78CC, 0 } },
2715 { 0x2F951, { 0x40E3, 0 } },
2716 { 0x2F952, { 0x25626, 0 } },
2717 { 0x2F953, { 0x7956, 0 } },
2718 { 0x2F954, { 0x2569A, 0 } },
2719 { 0x2F955, { 0x256C5, 0 } },
2720 { 0x2F956, { 0x798F, 0 } },
2721 { 0x2F957, { 0x79EB, 0 } },
2722 { 0x2F958, { 0x412F, 0 } },
2723 { 0x2F959, { 0x7A40, 0 } },
2724 { 0x2F95A, { 0x7A4A, 0 } },
2725 { 0x2F95B, { 0x7A4F, 0 } },
2726 { 0x2F95C, { 0x2597C, 0 } },
2727 { 0x2F95D, { 0x25AA7, 0 } },
2728 { 0x2F95E, { 0x25AA7, 0 } },
2729 { 0x2F95F, { 0x7AEE, 0 } },
2730 { 0x2F960, { 0x4202, 0 } },
2731 { 0x2F961, { 0x25BAB, 0 } },
2732 { 0x2F962, { 0x7BC6, 0 } },
2733 { 0x2F963, { 0x7BC9, 0 } },
2734 { 0x2F964, { 0x4227, 0 } },
2735 { 0x2F965, { 0x25C80, 0 } },
2736 { 0x2F966, { 0x7CD2, 0 } },
2737 { 0x2F967, { 0x42A0, 0 } },
2738 { 0x2F968, { 0x7CE8, 0 } },
2739 { 0x2F969, { 0x7CE3, 0 } },
2740 { 0x2F96A, { 0x7D00, 0 } },
2741 { 0x2F96B, { 0x25F86, 0 } },
2742 { 0x2F96C, { 0x7D63, 0 } },
2743 { 0x2F96D, { 0x4301, 0 } },
2744 { 0x2F96E, { 0x7DC7, 0 } },
2745 { 0x2F96F, { 0x7E02, 0 } },
2746 { 0x2F970, { 0x7E45, 0 } },
2747 { 0x2F971, { 0x4334, 0 } },
2748 { 0x2F972, { 0x26228, 0 } },
2749 { 0x2F973, { 0x26247, 0 } },
2750 { 0x2F974, { 0x4359, 0 } },
2751 { 0x2F975, { 0x262D9, 0 } },
2752 { 0x2F976, { 0x7F7A, 0 } },
2753 { 0x2F977, { 0x2633E, 0 } },
2754 { 0x2F978, { 0x7F95, 0 } },
2755 { 0x2F979, { 0x7FFA, 0 } },
2756 { 0x2F97A, { 0x8005, 0 } },
2757 { 0x2F97B, { 0x264DA, 0 } },
2758 { 0x2F97C, { 0x26523, 0 } },
2759 { 0x2F97D, { 0x8060, 0 } },
2760 { 0x2F97E, { 0x265A8, 0 } },
2761 { 0x2F97F, { 0x8070, 0 } },
2762 { 0x2F980, { 0x2335F, 0 } },
2763 { 0x2F981, { 0x43D5, 0 } },
2764 { 0x2F982, { 0x80B2, 0 } },
2765 { 0x2F983, { 0x8103, 0 } },
2766 { 0x2F984, { 0x440B, 0 } },
2767 { 0x2F985, { 0x813E, 0 } },
2768 { 0x2F986, { 0x5AB5, 0 } },
2769 { 0x2F987, { 0x267A7, 0 } },
2770 { 0x2F988, { 0x267B5, 0 } },
2771 { 0x2F989, { 0x23393, 0 } },
2772 { 0x2F98A, { 0x2339C, 0 } },
2773 { 0x2F98B, { 0x8201, 0 } },
2774 { 0x2F98C, { 0x8204, 0 } },
2775 { 0x2F98D, { 0x8F9E, 0 } },
2776 { 0x2F98E, { 0x446B, 0 } },
2777 { 0x2F98F, { 0x8291, 0 } },
2778 { 0x2F990, { 0x828B, 0 } },
2779 { 0x2F991, { 0x829D, 0 } },
2780 { 0x2F992, { 0x52B3, 0 } },
2781 { 0x2F993, { 0x82B1, 0 } },
2782 { 0x2F994, { 0x82B3, 0 } },
2783 { 0x2F995, { 0x82BD, 0 } },
2784 { 0x2F996, { 0x82E6, 0 } },
2785 { 0x2F997, { 0x26B3C, 0 } },
2786 { 0x2F998, { 0x82E5, 0 } },
2787 { 0x2F999, { 0x831D, 0 } },
2788 { 0x2F99A, { 0x8363, 0 } },
2789 { 0x2F99B, { 0x83AD, 0 } },
2790 { 0x2F99C, { 0x8323, 0 } },
2791 { 0x2F99D, { 0x83BD, 0 } },
2792 { 0x2F99E, { 0x83E7, 0 } },
2793 { 0x2F99F, { 0x8457, 0 } },
2794 { 0x2F9A0, { 0x8353, 0 } },
2795 { 0x2F9A1, { 0x83CA, 0 } },
2796 { 0x2F9A2, { 0x83CC, 0 } },
2797 { 0x2F9A3, { 0x83DC, 0 } },
2798 { 0x2F9A4, { 0x26C36, 0 } },
2799 { 0x2F9A5, { 0x26D6B, 0 } },
2800 { 0x2F9A6, { 0x26CD5, 0 } },
2801 { 0x2F9A7, { 0x452B, 0 } },
2802 { 0x2F9A8, { 0x84F1, 0 } },
2803 { 0x2F9A9, { 0x84F3, 0 } },
2804 { 0x2F9AA, { 0x8516, 0 } },
2805 { 0x2F9AB, { 0x273CA, 0 } },
2806 { 0x2F9AC, { 0x8564, 0 } },
2807 { 0x2F9AD, { 0x26F2C, 0 } },
2808 { 0x2F9AE, { 0x455D, 0 } },
2809 { 0x2F9AF, { 0x4561, 0 } },
2810 { 0x2F9B0, { 0x26FB1, 0 } },
2811 { 0x2F9B1, { 0x270D2, 0 } },
2812 { 0x2F9B2, { 0x456B, 0 } },
2813 { 0x2F9B3, { 0x8650, 0 } },
2814 { 0x2F9B4, { 0x865C, 0 } },
2815 { 0x2F9B5, { 0x8667, 0 } },
2816 { 0x2F9B6, { 0x8669, 0 } },
2817 { 0x2F9B7, { 0x86A9, 0 } },
2818 { 0x2F9B8, { 0x8688, 0 } },
2819 { 0x2F9B9, { 0x870E, 0 } },
2820 { 0x2F9BA, { 0x86E2, 0 } },
2821 { 0x2F9BB, { 0x8779, 0 } },
2822 { 0x2F9BC, { 0x8728, 0 } },
2823 { 0x2F9BD, { 0x876B, 0 } },
2824 { 0x2F9BE, { 0x8786, 0 } },
2825 { 0x2F9BF, { 0x45D7, 0 } },
2826 { 0x2F9C0, { 0x87E1, 0 } },
2827 { 0x2F9C1, { 0x8801, 0 } },
2828 { 0x2F9C2, { 0x45F9, 0 } },
2829 { 0x2F9C3, { 0x8860, 0 } },
2830 { 0x2F9C4, { 0x8863, 0 } },
2831 { 0x2F9C5, { 0x27667, 0 } },
2832 { 0x2F9C6, { 0x88D7, 0 } },
2833 { 0x2F9C7, { 0x88DE, 0 } },
2834 { 0x2F9C8, { 0x4635, 0 } },
2835 { 0x2F9C9, { 0x88FA, 0 } },
2836 { 0x2F9CA, { 0x34BB, 0 } },
2837 { 0x2F9CB, { 0x278AE, 0 } },
2838 { 0x2F9CC, { 0x27966, 0 } },
2839 { 0x2F9CD, { 0x46BE, 0 } },
2840 { 0x2F9CE, { 0x46C7, 0 } },
2841 { 0x2F9CF, { 0x8AA0, 0 } },
2842 { 0x2F9D0, { 0x8AED, 0 } },
2843 { 0x2F9D1, { 0x8B8A, 0 } },
2844 { 0x2F9D2, { 0x8C55, 0 } },
2845 { 0x2F9D3, { 0x27CA8, 0 } },
2846 { 0x2F9D4, { 0x8CAB, 0 } },
2847 { 0x2F9D5, { 0x8CC1, 0 } },
2848 { 0x2F9D6, { 0x8D1B, 0 } },
2849 { 0x2F9D7, { 0x8D77, 0 } },
2850 { 0x2F9D8, { 0x27F2F, 0 } },
2851 { 0x2F9D9, { 0x20804, 0 } },
2852 { 0x2F9DA, { 0x8DCB, 0 } },
2853 { 0x2F9DB, { 0x8DBC, 0 } },
2854 { 0x2F9DC, { 0x8DF0, 0 } },
2855 { 0x2F9DD, { 0x208DE, 0 } },
2856 { 0x2F9DE, { 0x8ED4, 0 } },
2857 { 0x2F9DF, { 0x8F38, 0 } },
2858 { 0x2F9E0, { 0x285D2, 0 } },
2859 { 0x2F9E1, { 0x285ED, 0 } },
2860 { 0x2F9E2, { 0x9094, 0 } },
2861 { 0x2F9E3, { 0x90F1, 0 } },
2862 { 0x2F9E4, { 0x9111, 0 } },
2863 { 0x2F9E5, { 0x2872E, 0 } },
2864 { 0x2F9E6, { 0x911B, 0 } },
2865 { 0x2F9E7, { 0x9238, 0 } },
2866 { 0x2F9E8, { 0x92D7, 0 } },
2867 { 0x2F9E9, { 0x92D8, 0 } },
2868 { 0x2F9EA, { 0x927C, 0 } },
2869 { 0x2F9EB, { 0x93F9, 0 } },
2870 { 0x2F9EC, { 0x9415, 0 } },
2871 { 0x2F9ED, { 0x28BFA, 0 } },
2872 { 0x2F9EE, { 0x958B, 0 } },
2873 { 0x2F9EF, { 0x4995, 0 } },
2874 { 0x2F9F0, { 0x95B7, 0 } },
2875 { 0x2F9F1, { 0x28D77, 0 } },
2876 { 0x2F9F2, { 0x49E6, 0 } },
2877 { 0x2F9F3, { 0x96C3, 0 } },
2878 { 0x2F9F4, { 0x5DB2, 0 } },
2879 { 0x2F9F5, { 0x9723, 0 } },
2880 { 0x2F9F6, { 0x29145, 0 } },
2881 { 0x2F9F7, { 0x2921A, 0 } },
2882 { 0x2F9F8, { 0x4A6E, 0 } },
2883 { 0x2F9F9, { 0x4A76, 0 } },
2884 { 0x2F9FA, { 0x97E0, 0 } },
2885 { 0x2F9FB, { 0x2940A, 0 } },
2886 { 0x2F9FC, { 0x4AB2, 0 } },
2887 { 0x2F9FD, { 0x29496, 0 } },
2888 { 0x2F9FE, { 0x980B, 0 } },
2889 { 0x2F9FF, { 0x980B, 0 } },
2890 { 0x2FA00, { 0x9829, 0 } },
2891 { 0x2FA01, { 0x295B6, 0 } },
2892 { 0x2FA02, { 0x98E2, 0 } },
2893 { 0x2FA03, { 0x4B33, 0 } },
2894 { 0x2FA04, { 0x9929, 0 } },
2895 { 0x2FA05, { 0x99A7, 0 } },
2896 { 0x2FA06, { 0x99C2, 0 } },
2897 { 0x2FA07, { 0x99FE, 0 } },
2898 { 0x2FA08, { 0x4BCE, 0 } },
2899 { 0x2FA09, { 0x29B30, 0 } },
2900 { 0x2FA0A, { 0x9B12, 0 } },
2901 { 0x2FA0B, { 0x9C40, 0 } },
2902 { 0x2FA0C, { 0x9CFD, 0 } },
2903 { 0x2FA0D, { 0x4CCE, 0 } },
2904 { 0x2FA0E, { 0x4CED, 0 } },
2905 { 0x2FA0F, { 0x9D67, 0 } },
2906 { 0x2FA10, { 0x2A0CE, 0 } },
2907 { 0x2FA11, { 0x4CF8, 0 } },
2908 { 0x2FA12, { 0x2A105, 0 } },
2909 { 0x2FA13, { 0x2A20E, 0 } },
2910 { 0x2FA14, { 0x2A291, 0 } },
2911 { 0x2FA15, { 0x9EBB, 0 } },
2912 { 0x2FA16, { 0x4D56, 0 } },
2913 { 0x2FA17, { 0x9EF9, 0 } },
2914 { 0x2FA18, { 0x9EFE, 0 } },
2915 { 0x2FA19, { 0x9F05, 0 } },
2916 { 0x2FA1A, { 0x9F0F, 0 } },
2917 { 0x2FA1B, { 0x9F16, 0 } },
2918 { 0x2FA1C, { 0x9F3B, 0 } },
2919 { 0x2FA1D, { 0x2A600, 0 } }
2920 };
2921
2922 static GX_UNICODE_RANGE gx_studio_nfc_quick_check_no_table[] =
2923 {
2924 { 0x0340, 0x0341 }, /* Mn[2] COMBINING GRAVE TONE MARK..COMBINING ACUTE TONE MARK */
2925 { 0x0343, 0x0344 }, /* Mn[2] COMBINING GREEK KORONIS..COMBINING GREEK DIALYTIKA TONOS */
2926 { 0x0374, 0x0374 }, /* Lm GREEK NUMERAL SIGN */
2927 { 0x037E, 0x037E }, /* Po GREEK QUESTION MARK */
2928 { 0x0387, 0x0387 }, /* Po GREEK ANO TELEIA */
2929 { 0x0958, 0x095F }, /* Lo[8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA */
2930 { 0x09DC, 0x09DD }, /* Lo[2] BENGALI LETTER RRA..BENGALI LETTER RHA */
2931 { 0x09DF, 0x09DF }, /* Lo BENGALI LETTER YYA */
2932 { 0x0A33, 0x0A33 }, /* Lo GURMUKHI LETTER LLA */
2933 { 0x0A36, 0x0A36 }, /* Lo GURMUKHI LETTER SHA */
2934 { 0x0A59, 0x0A5B }, /* Lo[3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA */
2935 { 0x0A5E, 0x0A5E }, /* Lo GURMUKHI LETTER FA */
2936 { 0x0B5C, 0x0B5D }, /* Lo[2] ORIYA LETTER RRA..ORIYA LETTER RHA */
2937 { 0x0F43, 0x0F43 }, /* Lo TIBETAN LETTER GHA */
2938 { 0x0F4D, 0x0F4D }, /* Lo TIBETAN LETTER DDHA */
2939 { 0x0F52, 0x0F52 }, /* Lo TIBETAN LETTER DHA */
2940 { 0x0F57, 0x0F57 }, /* Lo TIBETAN LETTER BHA */
2941 { 0x0F5C, 0x0F5C }, /* Lo TIBETAN LETTER DZHA */
2942 { 0x0F69, 0x0F69 }, /* Lo TIBETAN LETTER KSSA */
2943 { 0x0F73, 0x0F73 }, /* Mn TIBETAN VOWEL SIGN II */
2944 { 0x0F75, 0x0F76 }, /* Mn[2] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC R */
2945 { 0x0F78, 0x0F78 }, /* Mn TIBETAN VOWEL SIGN VOCALIC L */
2946 { 0x0F81, 0x0F81 }, /* Mn TIBETAN VOWEL SIGN REVERSED II */
2947 { 0x0F93, 0x0F93 }, /* Mn TIBETAN SUBJOINED LETTER GHA */
2948 { 0x0F9D, 0x0F9D }, /* Mn TIBETAN SUBJOINED LETTER DDHA */
2949 { 0x0FA2, 0x0FA2 }, /* Mn TIBETAN SUBJOINED LETTER DHA */
2950 { 0x0FA7, 0x0FA7 }, /* Mn TIBETAN SUBJOINED LETTER BHA */
2951 { 0x0FAC, 0x0FAC }, /* Mn TIBETAN SUBJOINED LETTER DZHA */
2952 { 0x0FB9, 0x0FB9 }, /* Mn TIBETAN SUBJOINED LETTER KSSA */
2953 { 0x1F71, 0x1F71 }, /* L& GREEK SMALL LETTER ALPHA WITH OXIA */
2954 { 0x1F73, 0x1F73 }, /* L& GREEK SMALL LETTER EPSILON WITH OXIA */
2955 { 0x1F75, 0x1F75 }, /* L& GREEK SMALL LETTER ETA WITH OXIA */
2956 { 0x1F77, 0x1F77 }, /* L& GREEK SMALL LETTER IOTA WITH OXIA */
2957 { 0x1F79, 0x1F79 }, /* L& GREEK SMALL LETTER OMICRON WITH OXIA */
2958 { 0x1F7B, 0x1F7B }, /* L& GREEK SMALL LETTER UPSILON WITH OXIA */
2959 { 0x1F7D, 0x1F7D }, /* L& GREEK SMALL LETTER OMEGA WITH OXIA */
2960 { 0x1FBB, 0x1FBB }, /* L& GREEK CAPITAL LETTER ALPHA WITH OXIA */
2961 { 0x1FBE, 0x1FBE }, /* L& GREEK PROSGEGRAMMENI */
2962 { 0x1FC9, 0x1FC9 }, /* L& GREEK CAPITAL LETTER EPSILON WITH OXIA */
2963 { 0x1FCB, 0x1FCB }, /* L& GREEK CAPITAL LETTER ETA WITH OXIA */
2964 { 0x1FD3, 0x1FD3 }, /* L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA */
2965 { 0x1FDB, 0x1FDB }, /* L& GREEK CAPITAL LETTER IOTA WITH OXIA */
2966 { 0x1FE3, 0x1FE3 }, /* L& GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA */
2967 { 0x1FEB, 0x1FEB }, /* L& GREEK CAPITAL LETTER UPSILON WITH OXIA */
2968 { 0x1FEE, 0x1FEF }, /* Sk[2] GREEK DIALYTIKA AND OXIA..GREEK VARIA */
2969 { 0x1FF9, 0x1FF9 }, /* L& GREEK CAPITAL LETTER OMICRON WITH OXIA */
2970 { 0x1FFB, 0x1FFB }, /* L& GREEK CAPITAL LETTER OMEGA WITH OXIA */
2971 { 0x1FFD, 0x1FFD }, /* Sk GREEK OXIA */
2972 { 0x2000, 0x2001 }, /* Zs[2] EN QUAD..EM QUAD */
2973 { 0x2126, 0x2126 }, /* L& OHM SIGN */
2974 { 0x212A, 0x212B }, /* L&[2] KELVIN SIGN..ANGSTROM SIGN */
2975 { 0x2329, 0x2329 }, /* Ps LEFT - POINTING ANGLE BRACKET */
2976 { 0x232A, 0x232A }, /* Pe RIGHT - POINTING ANGLE BRACKET */
2977 { 0x2ADC, 0x2ADC }, /* Sm FORKING */
2978 { 0xF900, 0xFA0D }, /* Lo[270] CJK COMPATIBILITY IDEOGRAPH - F900..CJK COMPATIBILITY IDEOGRAPH - FA0D */
2979 { 0xFA10, 0xFA10 }, /* Lo CJK COMPATIBILITY IDEOGRAPH - FA10 */
2980 { 0xFA12, 0xFA12 }, /* Lo CJK COMPATIBILITY IDEOGRAPH - FA12 */
2981 { 0xFA15, 0xFA1E }, /* Lo[10] CJK COMPATIBILITY IDEOGRAPH - FA15..CJK COMPATIBILITY IDEOGRAPH - FA1E */
2982 { 0xFA20, 0xFA20 }, /* Lo CJK COMPATIBILITY IDEOGRAPH - FA20 */
2983 { 0xFA22, 0xFA22 }, /* Lo CJK COMPATIBILITY IDEOGRAPH - FA22 */
2984 { 0xFA25, 0xFA26 }, /* Lo[2] CJK COMPATIBILITY IDEOGRAPH - FA25..CJK COMPATIBILITY IDEOGRAPH - FA26 */
2985 { 0xFA2A, 0xFA6D }, /* Lo[68] CJK COMPATIBILITY IDEOGRAPH - FA2A..CJK COMPATIBILITY IDEOGRAPH - FA6D */
2986 { 0xFA70, 0xFAD9 }, /* Lo[106] CJK COMPATIBILITY IDEOGRAPH - FA70..CJK COMPATIBILITY IDEOGRAPH - FAD9 */
2987 { 0xFB1D, 0xFB1D }, /* Lo HEBREW LETTER YOD WITH HIRIQ */
2988 { 0xFB1F, 0xFB1F }, /* Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH */
2989 { 0xFB2A, 0xFB36 }, /* Lo[13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH */
2990 { 0xFB38, 0xFB3C }, /* Lo[5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH */
2991 { 0xFB3E, 0xFB3E }, /* Lo HEBREW LETTER MEM WITH DAGESH */
2992 { 0xFB40, 0xFB41 }, /* Lo[2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH */
2993 { 0xFB43, 0xFB44 }, /* Lo[2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH */
2994 { 0xFB46, 0xFB4E }, /* Lo[9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LETTER PE WITH RAFE */
2995 { 0x1D15E, 0x1D164 }, /* So[7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY - EIGHTH NOTE */
2996 { 0x1D1BB, 0x1D1C0 }, /* So[6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK */
2997 { 0x2F800, 0x2FA1D }, /* Lo[542] CJK COMPATIBILITY IDEOGRAPH - 2F800..CJK COMPATIBILITY IDEOGRAPH - 2FA1D */
2998 { 0, 0 }
2999 };
3000
3001 static GX_UNICODE_RANGE gx_studio_nfc_quick_check_maye_table[] =
3002 {
3003 { 0x0300, 0x0304 }, /* Mn[5] COMBINING GRAVE ACCENT..COMBINING MACRON */
3004 { 0x0306, 0x030C }, /* Mn[7] COMBINING BREVE..COMBINING CARON */
3005 { 0x030F, 0x030F }, /* Mn COMBINING DOUBLE GRAVE ACCENT */
3006 { 0x0311, 0x0311 }, /* Mn COMBINING INVERTED BREVE */
3007 { 0x0313, 0x0314 }, /* Mn[2] COMBINING COMMA ABOVE..COMBINING REVERSED COMMA ABOVE */
3008 { 0x031B, 0x031B }, /* Mn COMBINING HORN */
3009 { 0x0323, 0x0328 }, /* Mn[6] COMBINING DOT BELOW..COMBINING OGONEK */
3010 { 0x032D, 0x032E }, /* Mn[2] COMBINING CIRCUMFLEX ACCENT BELOW..COMBINING BREVE BELOW */
3011 { 0x0330, 0x0331 }, /* Mn[2] COMBINING TILDE BELOW..COMBINING MACRON BELOW */
3012 { 0x0338, 0x0338 }, /* Mn COMBINING LONG SOLIDUS OVERLAY */
3013 { 0x0342, 0x0342 }, /* Mn COMBINING GREEK PERISPOMENI */
3014 { 0x0345, 0x0345 }, /* Mn COMBINING GREEK YPOGEGRAMMENI */
3015 { 0x0653, 0x0655 }, /* Mn[3] ARABIC MADDAH ABOVE..ARABIC HAMZA BELOW */
3016 { 0x093C, 0x093C }, /* Mn DEVANAGARI SIGN NUKTA */
3017 { 0x09BE, 0x09BE }, /* Mc BENGALI VOWEL SIGN AA */
3018 { 0x09D7, 0x09D7 }, /* Mc BENGALI AU LENGTH MARK */
3019 { 0x0B3E, 0x0B3E }, /* Mc ORIYA VOWEL SIGN AA */
3020 { 0x0B56, 0x0B56 }, /* Mn ORIYA AI LENGTH MARK */
3021 { 0x0B57, 0x0B57 }, /* Mc ORIYA AU LENGTH MARK */
3022 { 0x0BBE, 0x0BBE }, /* Mc TAMIL VOWEL SIGN AA */
3023 { 0x0BD7, 0x0BD7 }, /* Mc TAMIL AU LENGTH MARK */
3024 { 0x0C56, 0x0C56 }, /* Mn TELUGU AI LENGTH MARK */
3025 { 0x0CC2, 0x0CC2 }, /* Mc KANNADA VOWEL SIGN UU */
3026 { 0x0CD5, 0x0CD6 }, /* Mc[2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK */
3027 { 0x0D3E, 0x0D3E }, /* Mc MALAYALAM VOWEL SIGN AA */
3028 { 0x0D57, 0x0D57 }, /* Mc MALAYALAM AU LENGTH MARK */
3029 { 0x0DCA, 0x0DCA }, /* Mn SINHALA SIGN AL - LAKUNA */
3030 { 0x0DCF, 0x0DCF }, /* Mc SINHALA VOWEL SIGN AELA - PILLA */
3031 { 0x0DDF, 0x0DDF }, /* Mc SINHALA VOWEL SIGN GAYANUKITTA */
3032 { 0x102E, 0x102E }, /* Mn MYANMAR VOWEL SIGN II */
3033 { 0x1161, 0x1175 }, /* Lo[21] HANGUL JUNGSEONG A..HANGUL JUNGSEONG I */
3034 { 0x11A8, 0x11C2 }, /* Lo[27] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG HIEUH */
3035 { 0x1B35, 0x1B35 }, /* Mc BALINESE VOWEL SIGN TEDUNG */
3036 { 0x3099, 0x309A }, /* Mn[2] COMBINING KATAKANA - HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA - HIRAGANA SEMI - VOICED SOUND MARK */
3037 { 0x110BA, 0x110BA }, /* Mn KAITHI SIGN NUKTA */
3038 { 0x11127, 0x11127 }, /* Mn CHAKMA VOWEL SIGN A */
3039 { 0x1133E, 0x1133E }, /* Mc GRANTHA VOWEL SIGN AA */
3040 { 0x11357, 0x11357 }, /* Mc GRANTHA AU LENGTH MARK */
3041 { 0x114B0, 0x114B0 }, /* Mc TIRHUTA VOWEL SIGN AA */
3042 { 0x114BA, 0x114BA }, /* Mn TIRHUTA VOWEL SIGN SHORT E */
3043 { 0x114BD, 0x114BD }, /* Mc TIRHUTA VOWEL SIGN SHORT O */
3044 { 0x115AF, 0x115AF }, /* Mc SIDDHAM VOWEL SIGN AA */
3045 { 0, 0 }
3046 };
3047
3048 static GX_UNICODE_RANGE gx_studio_full_composition_exclusion_table[] =
3049 {
3050 { 0x0343, 0x0344 }, /* Full_Composition_Exclusion # Mn [2] COMBINING GREEK KORONIS..COMBINING GREEK DIALYTIKA TONOS */
3051 { 0x0374, 0x0374 }, /* Full_Composition_Exclusion # Lm GREEK NUMERAL SIGN */
3052 { 0x037E, 0x037E }, /* Full_Composition_Exclusion # Po GREEK QUESTION MARK */
3053 { 0x0387, 0x0387 }, /* Full_Composition_Exclusion # Po GREEK ANO TELEIA */
3054 { 0x0958, 0x095F }, /* Full_Composition_Exclusion # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA */
3055 { 0x09DC, 0x09DD }, /* Full_Composition_Exclusion # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA */
3056 { 0x09DF, 0x09DF }, /* Full_Composition_Exclusion # Lo BENGALI LETTER YYA */
3057 { 0x0A33, 0x0A33 }, /* Full_Composition_Exclusion # Lo GURMUKHI LETTER LLA */
3058 { 0x0A36, 0x0A36 }, /* Full_Composition_Exclusion # Lo GURMUKHI LETTER SHA */
3059 { 0x0A59, 0x0A5B }, /* Full_Composition_Exclusion # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA */
3060 { 0x0A5E, 0x0A5E }, /* Full_Composition_Exclusion # Lo GURMUKHI LETTER FA */
3061 { 0x0B5C, 0x0B5D }, /* Full_Composition_Exclusion # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA */
3062 { 0x0F43, 0x0F43 }, /* Full_Composition_Exclusion # Lo TIBETAN LETTER GHA */
3063 { 0x0F4D, 0x0F4D }, /* Full_Composition_Exclusion # Lo TIBETAN LETTER DDHA */
3064 { 0x0F52, 0x0F52 }, /* Full_Composition_Exclusion # Lo TIBETAN LETTER DHA */
3065 { 0x0F57, 0x0F57 }, /* Full_Composition_Exclusion # Lo TIBETAN LETTER BHA */
3066 { 0x0F5C, 0x0F5C }, /* Full_Composition_Exclusion # Lo TIBETAN LETTER DZHA */
3067 { 0x0F69, 0x0F69 }, /* Full_Composition_Exclusion # Lo TIBETAN LETTER KSSA */
3068 { 0x0F73, 0x0F73 }, /* Full_Composition_Exclusion # Mn TIBETAN VOWEL SIGN II */
3069 { 0x0F75, 0x0F76 }, /* Full_Composition_Exclusion # Mn [2] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC R */
3070 { 0x0F78, 0x0F78 }, /* Full_Composition_Exclusion # Mn TIBETAN VOWEL SIGN VOCALIC L */
3071 { 0x0F81, 0x0F81 }, /* Full_Composition_Exclusion # Mn TIBETAN VOWEL SIGN REVERSED II */
3072 { 0x0F93, 0x0F93 }, /* Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER GHA */
3073 { 0x0F9D, 0x0F9D }, /* Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER DDHA */
3074 { 0x0FA2, 0x0FA2 }, /* Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER DHA */
3075 { 0x0FA7, 0x0FA7 }, /* Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER BHA */
3076 { 0x0FAC, 0x0FAC }, /* Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER DZHA */
3077 { 0x0FB9, 0x0FB9 }, /* Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER KSSA */
3078 { 0x1F73, 0x1F73 }, /* Full_Composition_Exclusion # L& GREEK SMALL LETTER EPSILON WITH OXIA */
3079 { 0x1F75, 0x1F75 }, /* Full_Composition_Exclusion # L& GREEK SMALL LETTER ETA WITH OXIA */
3080 { 0x1F77, 0x1F77 }, /* Full_Composition_Exclusion # L& GREEK SMALL LETTER IOTA WITH OXIA */
3081 { 0x1F79, 0x1F79 }, /* Full_Composition_Exclusion # L& GREEK SMALL LETTER OMICRON WITH OXIA */
3082 { 0x1F7B, 0x1F7B }, /* Full_Composition_Exclusion # L& GREEK SMALL LETTER UPSILON WITH OXIA */
3083 { 0x1F7D, 0x1F7D }, /* Full_Composition_Exclusion # L& GREEK SMALL LETTER OMEGA WITH OXIA */
3084 { 0x1FBB, 0x1FBB }, /* Full_Composition_Exclusion # L& GREEK CAPITAL LETTER ALPHA WITH OXIA */
3085 { 0x1FBE, 0x1FBE }, /* Full_Composition_Exclusion # L& GREEK PROSGEGRAMMENI */
3086 { 0x1FC9, 0x1FC9 }, /* Full_Composition_Exclusion # L& GREEK CAPITAL LETTER EPSILON WITH OXIA */
3087 { 0x1FCB, 0x1FCB }, /* Full_Composition_Exclusion # L& GREEK CAPITAL LETTER ETA WITH OXIA */
3088 { 0x1FD3, 0x1FD3 }, /* Full_Composition_Exclusion # L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA */
3089 { 0x1FDB, 0x1FDB }, /* Full_Composition_Exclusion # L& GREEK CAPITAL LETTER IOTA WITH OXIA */
3090 { 0x1FE3, 0x1FE3 }, /* Full_Composition_Exclusion # L& GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA */
3091 { 0x1FEB, 0x1FEB }, /* Full_Composition_Exclusion # L& GREEK CAPITAL LETTER UPSILON WITH OXIA */
3092 { 0x1FEE, 0x1FEF }, /* Full_Composition_Exclusion # Sk [2] GREEK DIALYTIKA AND OXIA..GREEK VARIA */
3093 { 0x1FF9, 0x1FF9 }, /* Full_Composition_Exclusion # L& GREEK CAPITAL LETTER OMICRON WITH OXIA */
3094 { 0x1FFB, 0x1FFB }, /* Full_Composition_Exclusion # L& GREEK CAPITAL LETTER OMEGA WITH OXIA */
3095 { 0x1FFD, 0x1FFD }, /* Full_Composition_Exclusion # Sk GREEK OXIA */
3096 { 0x2000, 0x2001 }, /* Full_Composition_Exclusion # Zs [2] EN QUAD..EM QUAD */
3097 { 0x2126, 0x2126 }, /* Full_Composition_Exclusion # L& OHM SIGN */
3098 { 0x212A, 0x212B }, /* Full_Composition_Exclusion # L& [2] KELVIN SIGN..ANGSTROM SIGN */
3099 { 0x2329, 0x2329 }, /* Full_Composition_Exclusion # Ps LEFT-POINTING ANGLE BRACKET */
3100 { 0x232A, 0x232A }, /* Full_Composition_Exclusion # Pe RIGHT-POINTING ANGLE BRACKET */
3101 { 0x2ADC, 0x2ADC }, /* Full_Composition_Exclusion # Sm FORKING */
3102 { 0xF900, 0xFA0D }, /* Full_Composition_Exclusion # Lo [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D */
3103 { 0xFA10, 0xFA10 }, /* Full_Composition_Exclusion # Lo CJK COMPATIBILITY IDEOGRAPH-FA10 */
3104 { 0xFA12, 0xFA12 }, /* Full_Composition_Exclusion # Lo CJK COMPATIBILITY IDEOGRAPH-FA12 */
3105 { 0xFA15, 0xFA1E }, /* Full_Composition_Exclusion # Lo [10] CJK COMPATIBILITY IDEOGRAPH-FA15..CJK COMPATIBILITY IDEOGRAPH-FA1E */
3106 { 0xFA20, 0xFA20 }, /* Full_Composition_Exclusion # Lo CJK COMPATIBILITY IDEOGRAPH-FA20 */
3107 { 0xFA22, 0xFA22 }, /* Full_Composition_Exclusion # Lo CJK COMPATIBILITY IDEOGRAPH-FA22 */
3108 { 0xFA25, 0xFA26 }, /* Full_Composition_Exclusion # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA25..CJK COMPATIBILITY IDEOGRAPH-FA26 */
3109 { 0xFA2A, 0xFA6D }, /* Full_Composition_Exclusion # Lo [68] CJK COMPATIBILITY IDEOGRAPH-FA2A..CJK COMPATIBILITY IDEOGRAPH-FA6D */
3110 { 0xFA70, 0xFAD9 }, /* Full_Composition_Exclusion # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 */
3111 { 0xFB1D, 0xFB1D }, /* Full_Composition_Exclusion # Lo HEBREW LETTER YOD WITH HIRIQ */
3112 { 0xFB1F, 0xFB1F }, /* Full_Composition_Exclusion # Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH */
3113 { 0xFB2A, 0xFB36 }, /* Full_Composition_Exclusion # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH */
3114 { 0xFB38, 0xFB3C }, /* Full_Composition_Exclusion # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH */
3115 { 0xFB3E, 0xFB3E }, /* Full_Composition_Exclusion # Lo HEBREW LETTER MEM WITH DAGESH */
3116 { 0xFB40, 0xFB41 }, /* Full_Composition_Exclusion # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH */
3117 { 0xFB43, 0xFB44 }, /* Full_Composition_Exclusion # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH */
3118 { 0xFB46, 0xFB4E }, /* Full_Composition_Exclusion # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LETTER PE WITH RAFE */
3119 { 0x1D15E, 0x1D164 }, /* Full_Composition_Exclusion # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE */
3120 { 0x1D1BB, 0x1D1C0 }, /* Full_Composition_Exclusion # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK */
3121 { 0, 0 }
3122 };
3123
3124 /**************************************************************************/
3125 /* This function tests if a code point is full composition exclusion. */
3126 /**************************************************************************/
gx_studio_full_composition_exclusion_test(ULONG unicode)3127 GX_BOOL gx_studio_full_composition_exclusion_test(ULONG unicode)
3128 {
3129 GX_UNICODE_RANGE *entry = gx_studio_full_composition_exclusion_table;
3130
3131 while (entry->gx_unicode_range_start)
3132 {
3133 if ((unicode >= entry->gx_unicode_range_start) &&
3134 (unicode <= entry->gx_unicode_range_end))
3135 {
3136 return GX_TRUE;
3137 }
3138 entry++;
3139 }
3140
3141 return GX_FALSE;
3142 }
3143
3144
3145 /**************************************************************************/
3146 /* This function gets nfc quick check value for specified code point. */
3147 /**************************************************************************/
gx_studio_nfc_quick_check(ULONG code_point,GX_UBYTE * return_type)3148 static UINT gx_studio_nfc_quick_check(ULONG code_point, GX_UBYTE *return_type)
3149 {
3150 GX_UNICODE_RANGE *entry = gx_studio_nfc_quick_check_no_table;
3151
3152 while (entry->gx_unicode_range_start)
3153 {
3154 if (code_point >= entry->gx_unicode_range_start &&
3155 code_point <= entry->gx_unicode_range_end)
3156 {
3157 *return_type = GX_NORMALIZATION_FORM_NO;
3158 return GX_SUCCESS;
3159 }
3160
3161 entry++;
3162 }
3163
3164 entry = gx_studio_nfc_quick_check_maye_table;
3165
3166 while (entry->gx_unicode_range_start)
3167 {
3168 if (code_point >= entry->gx_unicode_range_start &&
3169 code_point <= entry->gx_unicode_range_end)
3170 {
3171 *return_type = GX_NORMALIZATION_FORM_MAYBE;
3172 return GX_SUCCESS;
3173 }
3174 entry++;
3175 }
3176
3177 *return_type = GX_NORMALIZATION_FORM_YES;
3178
3179 return GX_SUCCESS;
3180 }
3181
3182 /**************************************************************************/
3183 /* This function retrieves canonical decomposition map of specified */
3184 /* code point. */
3185 /**************************************************************************/
gx_studio_canonical_decompress_map_get(ULONG code_point,ULONG * maps)3186 static UINT gx_studio_canonical_decompress_map_get(ULONG code_point, ULONG *maps)
3187 {
3188 GX_CANONICAL_DECOMPOSE_MAP *entry = gx_studio_canonical_decompose_maps;
3189
3190 maps[0] = 0;
3191 maps[1] = 0;
3192
3193 while (entry->gx_canonical_decompose_map_code)
3194 {
3195 if (code_point == entry->gx_canonical_decompose_map_code)
3196 {
3197 maps[0] = entry->gx_canonical_decompose_map[0];
3198 maps[1] = entry->gx_canonical_decompose_map[1];
3199 break;
3200 }
3201 else if (code_point < entry->gx_canonical_decompose_map_code)
3202 {
3203 break;
3204 }
3205
3206 entry++;
3207 }
3208
3209 return GX_SUCCESS;
3210 }
3211
3212 /**************************************************************************/
3213 /* This function retrieves the composed code point the specified */
3214 /* decomposition map is correspond to. */
3215 /**************************************************************************/
gx_studio_canonical_composed_code_get(ULONG map_a,ULONG map_b,ULONG * composed_code)3216 static UINT gx_studio_canonical_composed_code_get(ULONG map_a, ULONG map_b, ULONG *composed_code)
3217 {
3218 GX_CANONICAL_DECOMPOSE_MAP *entry = gx_studio_canonical_decompose_maps;
3219
3220 while (entry->gx_canonical_decompose_map_code)
3221 {
3222 if (entry->gx_canonical_decompose_map[0] == map_a &&
3223 entry->gx_canonical_decompose_map[1] == map_b)
3224 {
3225 *composed_code = entry->gx_canonical_decompose_map_code;
3226 return GX_SUCCESS;
3227 }
3228 entry++;
3229 }
3230
3231 return GX_FAILURE;
3232 }
3233
3234 /**************************************************************************/
3235 /* This function retrieves canonical combining class of specified */
3236 /* code point. */
3237 /**************************************************************************/
gx_studio_canonical_combining_class_get(ULONG code_point,GX_UBYTE * class_value)3238 static UINT gx_studio_canonical_combining_class_get(ULONG code_point, GX_UBYTE *class_value)
3239 {
3240 GX_CANONICAL_COMBINING_CLASS *entry = gx_studio_canonical_combining_class_table;
3241
3242 *class_value = 0;
3243
3244 while (entry->gx_canonical_combining_class_code)
3245 {
3246 if (code_point == entry->gx_canonical_combining_class_code)
3247 {
3248 *class_value = entry->gx_canonical_combining_class;
3249 break;
3250 }
3251 else if (code_point < entry->gx_canonical_combining_class_code)
3252 {
3253 break;
3254 }
3255
3256 entry++;
3257 }
3258
3259 return GX_SUCCESS;
3260 }
3261
3262
3263 /**************************************************************************/
3264 /* This function quickly determines whether a string x is in a nfc */
3265 /* normalization form. */
3266 /**************************************************************************/
gx_studio_nfc_form_detect(GX_CONST GX_STRING * string,GX_UBYTE * return_code)3267 static UINT gx_studio_nfc_form_detect(GX_CONST GX_STRING *string, GX_UBYTE *return_code)
3268 {
3269 UINT ret;
3270 GX_CHAR_CODE code_point;
3271 GX_UBYTE last_canonical_class = 0;
3272 GX_UBYTE canonical_class;
3273 GX_UBYTE check;
3274 GX_STRING string_copy;
3275
3276 *return_code = GX_NORMALIZATION_FORM_YES;
3277 string_copy = *string;
3278
3279 while (string_copy.gx_string_length)
3280 {
3281 ret = _gx_utility_utf8_string_character_get(&string_copy, &code_point, GX_NULL);
3282
3283 if ((ret != GX_SUCCESS) || (code_point == 0))
3284 {
3285 return GX_FAILURE;
3286 }
3287
3288 gx_studio_canonical_combining_class_get(code_point, &canonical_class);
3289 if (last_canonical_class > canonical_class && canonical_class != 0)
3290 {
3291 *return_code = GX_NORMALIZATION_FORM_NO;
3292 break;
3293 }
3294
3295 gx_studio_nfc_quick_check(code_point, &check);
3296
3297 if ((check == GX_NORMALIZATION_FORM_NO) ||
3298 (check == GX_NORMALIZATION_FORM_MAYBE))
3299 {
3300 *return_code = check;
3301 break;
3302 }
3303
3304 last_canonical_class = canonical_class;
3305 }
3306
3307 return GX_SUCCESS;
3308 }
3309
3310 /**************************************************************************/
3311 /* This function converts utf-8 string to unicode list. */
3312 /**************************************************************************/
gx_studio_canonical_utf8_to_unicode(GX_CANONICAL_CONTEXT * context,GX_CONST GX_STRING * string)3313 static UINT gx_studio_canonical_utf8_to_unicode(GX_CANONICAL_CONTEXT *context, GX_CONST GX_STRING *string)
3314 {
3315 GX_CHAR_CODE code_point;
3316 UINT ret;
3317 ULONG code_count = 0;
3318 GX_STRING string_copy = *string;
3319
3320 while (string_copy.gx_string_length > 0)
3321 {
3322 ret = _gx_utility_utf8_string_character_get(&string_copy, &code_point, GX_NULL);
3323
3324 if ((ret != GX_SUCCESS) || (code_point == 0))
3325 {
3326 return GX_FAILURE;
3327 }
3328
3329 code_count++;
3330 }
3331
3332 context->gx_canonical_context_code_list = new ULONG[code_count];
3333 if (!context->gx_canonical_context_code_list)
3334 {
3335 return GX_SYSTEM_MEMORY_ERROR;
3336 }
3337 context->gx_canonical_context_code_count = code_count;
3338
3339 string_copy = *string;
3340
3341 for (code_count = 0; code_count < context->gx_canonical_context_code_count; code_count++)
3342 {
3343 _gx_utility_utf8_string_character_get(&string_copy, &code_point, GX_NULL);
3344 context->gx_canonical_context_code_list[code_count] = code_point;
3345 }
3346
3347 return GX_SUCCESS;
3348 }
3349
3350 /**************************************************************************/
3351 /* This function fully decomposes specified unicode list. */
3352 /**************************************************************************/
gx_studio_unicode_canonical_decompress(GX_CANONICAL_CONTEXT * context,ULONG * code_list,UINT count,GX_BOOL testing)3353 static UINT gx_studio_unicode_canonical_decompress(GX_CANONICAL_CONTEXT *context, ULONG *code_list, UINT count, GX_BOOL testing)
3354 {
3355 UINT code_point;
3356 ULONG map[2];
3357 UINT index;
3358 GX_CANONICAL_UNIT *unit;
3359
3360 for (index = 0; index < count; index++)
3361 {
3362 code_point = code_list[index];
3363
3364 gx_studio_canonical_decompress_map_get(code_point, map);
3365
3366 if (map[0])
3367 {
3368 gx_studio_unicode_canonical_decompress(context, &map[0], 1, testing);
3369
3370 if (map[1])
3371 {
3372 gx_studio_unicode_canonical_decompress(context, &map[1], 1, testing);
3373 }
3374 }
3375 else
3376 {
3377 if (!testing)
3378 {
3379 unit = &context->gx_canonical_context_unit_list[context->gx_canonical_context_unit_count];
3380 unit->gx_canonical_unit_code_point = code_point;
3381 gx_studio_canonical_combining_class_get(code_point, &unit->gx_canonical_unit_combining_class);
3382 }
3383
3384 context->gx_canonical_context_unit_count++;
3385 }
3386 }
3387
3388 return GX_SUCCESS;
3389 }
3390
3391 /**************************************************************************/
3392 /* This function fully decomposes the specified string. */
3393 /**************************************************************************/
gx_studio_utf8_canonical_decompress(GX_CANONICAL_CONTEXT * context,GX_CONST GX_STRING * string)3394 static UINT gx_studio_utf8_canonical_decompress(GX_CANONICAL_CONTEXT *context, GX_CONST GX_STRING *string)
3395 {
3396 UINT status;
3397
3398 /* Convert utf8 string to unicode string. */
3399 status = gx_studio_canonical_utf8_to_unicode(context, string);
3400
3401 if (status == GX_SUCCESS)
3402 {
3403 /* Calculate the number of full decompressed unicode string. */
3404 status = gx_studio_unicode_canonical_decompress(context, context->gx_canonical_context_code_list, context->gx_canonical_context_code_count, GX_TRUE);
3405 }
3406
3407 if (status == GX_SUCCESS)
3408 {
3409 context->gx_canonical_context_unit_list = new GX_CANONICAL_UNIT[context->gx_canonical_context_unit_count];
3410
3411 if (!context->gx_canonical_context_unit_list)
3412 {
3413 status = GX_SYSTEM_MEMORY_ERROR;
3414 }
3415 }
3416
3417 if (status == GX_SUCCESS)
3418 {
3419 context->gx_canonical_context_unit_count = 0;
3420
3421 /* Process fully canonical decompress. */
3422 status = gx_studio_unicode_canonical_decompress(context, context->gx_canonical_context_code_list, context->gx_canonical_context_code_count, GX_FALSE);
3423 }
3424
3425 return status;
3426 }
3427
3428 /**************************************************************************/
3429 /* This function sorts the specified code list by combining class in */
3430 /* ascending order. */
3431 /**************************************************************************/
gx_studio_canonical_combining_class_sort(GX_CANONICAL_CONTEXT * context,UINT start_index,UINT end_index)3432 static UINT gx_studio_canonical_combining_class_sort(GX_CANONICAL_CONTEXT *context, UINT start_index, UINT end_index)
3433 {
3434 UINT index;
3435 GX_CANONICAL_UNIT temp;
3436 GX_CANONICAL_UNIT *unit_a;
3437 GX_CANONICAL_UNIT *unit_b;
3438
3439 while (start_index < end_index)
3440 {
3441 for (index = start_index; index < end_index; index++)
3442 {
3443 unit_a = &context->gx_canonical_context_unit_list[index];
3444 unit_b = &context->gx_canonical_context_unit_list[index + 1];
3445
3446 if (unit_a->gx_canonical_unit_combining_class > unit_b->gx_canonical_unit_combining_class)
3447 {
3448 /* swap reorderable pair. */
3449 temp = *unit_a;
3450 *unit_a = *unit_b;
3451 *unit_b = temp;
3452 }
3453 }
3454
3455 end_index--;
3456 }
3457
3458 return GX_SUCCESS;
3459 }
3460
3461 /**************************************************************************/
3462 /* This function processes canonical ordering algorithm. */
3463 /**************************************************************************/
gx_studio_canonical_ordering(GX_CANONICAL_CONTEXT * context)3464 static UINT gx_studio_canonical_ordering(GX_CANONICAL_CONTEXT *context)
3465 {
3466 UINT index;
3467 GX_CANONICAL_UNIT *unit;
3468 INT reorderable_count = 0;
3469
3470 for (index = 0; index < context->gx_canonical_context_unit_count; index++)
3471 {
3472 unit = &context->gx_canonical_context_unit_list[index];
3473
3474 if (unit->gx_canonical_unit_combining_class)
3475 {
3476 reorderable_count++;
3477 }
3478 else
3479 {
3480 if (reorderable_count)
3481 {
3482 /* Reorder code point in ascending order. */
3483 gx_studio_canonical_combining_class_sort(context, index - reorderable_count, index - 1);
3484 }
3485 reorderable_count = 0;
3486 }
3487 }
3488
3489 if (reorderable_count)
3490 {
3491 /* Reorder code point in ascending order. */
3492 gx_studio_canonical_combining_class_sort(context, index - reorderable_count, index - 1);
3493 }
3494
3495 return GX_SUCCESS;
3496 }
3497
3498 /**************************************************************************/
3499 /* This function searches decomposition sequence that is equivalent to */
3500 /* a primary composite, and replace the decomposition sequence with */
3501 /* with the primary composition. */
3502 /**************************************************************************/
gx_studio_canonical_equivalent_replace(GX_CANONICAL_CONTEXT * context,UINT C_index,UINT * L_index)3503 static UINT gx_studio_canonical_equivalent_replace(GX_CANONICAL_CONTEXT *context, UINT C_index, UINT *L_index)
3504 {
3505 UINT index;
3506 GX_CANONICAL_UNIT *unit;
3507 GX_CANONICAL_UNIT *unit_C = &context->gx_canonical_context_unit_list[C_index];
3508 ULONG replace_code;
3509
3510 for (index = C_index - 1; index >= 0; index--)
3511 {
3512 unit = &context->gx_canonical_context_unit_list[index];
3513
3514 if (unit->gx_canonical_unit_combining_class == 0)
3515 {
3516 /* Seek back in the coded character sequence from the character C to find the
3517 last starter L preceding C in the character sequence. */
3518 if (gx_studio_canonical_composed_code_get(unit->gx_canonical_unit_code_point,
3519 unit_C->gx_canonical_unit_code_point,
3520 &replace_code) == GX_SUCCESS)
3521 {
3522 /* If there is such and L, and C is not blocked from L. */
3523 if (gx_studio_full_composition_exclusion_test(replace_code) == GX_FALSE)
3524 {
3525 /* If exists a primary composite P which is canonically equivalent to the sequence <L, C>,
3526 replace L by P in the sequence and delete C from the sequence. */
3527 unit->gx_canonical_unit_code_point = replace_code;
3528 if (C_index < context->gx_canonical_context_unit_count - 1)
3529 {
3530 memmove(context->gx_canonical_context_unit_list + C_index,
3531 context->gx_canonical_context_unit_list + C_index + 1,
3532 (context->gx_canonical_context_unit_count - C_index - 1) * sizeof(GX_CANONICAL_UNIT));
3533 }
3534 context->gx_canonical_context_unit_count--;
3535 *L_index = index;
3536 return GX_SUCCESS;
3537 }
3538 }
3539 break;
3540 }
3541 else if (unit->gx_canonical_unit_combining_class >= unit_C->gx_canonical_unit_combining_class)
3542 {
3543 break;
3544 }
3545 }
3546
3547 return GX_FAILURE;
3548 }
3549
3550 /**************************************************************************/
3551 /* This function processes canonical composition algorithm. */
3552 /**************************************************************************/
gx_studio_canonical_compose(GX_CANONICAL_CONTEXT * context)3553 UINT gx_studio_canonical_compose(GX_CANONICAL_CONTEXT *context)
3554 {
3555 UINT index;
3556 UINT L_index;
3557 GX_CANONICAL_UNIT *unit;
3558
3559 for (index = 1; index < context->gx_canonical_context_unit_count; index++)
3560 {
3561 /* Start from the second character in the coded character sequence and
3562 proceeding sequentially to the final character. */
3563 unit = &context->gx_canonical_context_unit_list[index];
3564
3565 if (gx_studio_canonical_equivalent_replace(context, index, &L_index) == GX_SUCCESS)
3566 {
3567 index = L_index;
3568 }
3569 }
3570
3571 return GX_SUCCESS;
3572 }
3573
3574 /**************************************************************************/
3575 /* This function encodes normalized code point with UTF-8. */
3576 /**************************************************************************/
gx_studio_unicode_string_to_utf8_string(GX_CANONICAL_CONTEXT * context,GX_STRING * normalized_string)3577 static UINT gx_studio_unicode_string_to_utf8_string(GX_CANONICAL_CONTEXT *context, GX_STRING *normalized_string)
3578 {
3579 UINT index;
3580 UINT string_size = 0;
3581 UINT glyph_len;
3582 GX_UBYTE return_utf8_str[6];
3583 GX_UBYTE *utf8_str;
3584
3585 /* Calculate utf8 string size. */
3586 for (index = 0; index < context->gx_canonical_context_unit_count; index++)
3587 {
3588 _gx_utility_unicode_to_utf8(context->gx_canonical_context_unit_list[index].gx_canonical_unit_code_point, return_utf8_str, &glyph_len);
3589 string_size += glyph_len;
3590 }
3591
3592 utf8_str = new GX_UBYTE[string_size + 1];
3593 string_size = 0;
3594
3595 for (index = 0; index < context->gx_canonical_context_unit_count; index++)
3596 {
3597 _gx_utility_unicode_to_utf8(context->gx_canonical_context_unit_list[index].gx_canonical_unit_code_point, utf8_str + string_size, &glyph_len);
3598 string_size += glyph_len;
3599 }
3600
3601 utf8_str[string_size] = '\0';
3602
3603 if (normalized_string)
3604 {
3605 normalized_string->gx_string_ptr = (GX_CONST GX_CHAR *)utf8_str;
3606 normalized_string->gx_string_length = string_size;
3607 }
3608
3609 return GX_SUCCESS;
3610 }
3611
3612 /**************************************************************************/
3613 /* This function processes canonical composition after full canonical */
3614 /* decomposition. */
3615 /**************************************************************************/
gx_studio_canonical_normalize(GX_CONST GX_STRING * string,GX_STRING * normalized_string)3616 UINT gx_studio_canonical_normalize(GX_CONST GX_STRING *string, GX_STRING *normalized_string)
3617 {
3618 UINT status = GX_SUCCESS;
3619
3620 GX_CANONICAL_CONTEXT context;
3621 GX_UBYTE quick_check_result;
3622
3623 memset(&context, 0, sizeof(GX_CANONICAL_CONTEXT));
3624
3625 status = gx_studio_nfc_form_detect(string, &quick_check_result);
3626
3627 if (status == GX_SUCCESS)
3628 {
3629 if (quick_check_result == GX_NORMALIZATION_FORM_YES)
3630 {
3631 /* already in normalized form. */
3632 return GX_NO_CHANGE;
3633 }
3634 /* Fully decompose the string. */
3635 status = gx_studio_utf8_canonical_decompress(&context, string);
3636 }
3637
3638 if (status == GX_SUCCESS)
3639 {
3640 /* Process canonical ordering algorithm. */
3641 status = gx_studio_canonical_ordering(&context);
3642 }
3643
3644 if (status == GX_SUCCESS)
3645 {
3646 /* Process canonical composition algorithm.*/
3647 status = gx_studio_canonical_compose(&context);
3648 }
3649
3650 if (status == GX_SUCCESS)
3651 {
3652 /* Convert unicode to utf8 string. */
3653 status = gx_studio_unicode_string_to_utf8_string(&context, normalized_string);
3654 }
3655
3656 if (context.gx_canonical_context_code_list)
3657 {
3658 delete []context.gx_canonical_context_code_list;
3659 }
3660
3661 if (context.gx_canonical_context_unit_list)
3662 {
3663 delete []context.gx_canonical_context_unit_list;
3664 }
3665 return status;
3666 }
3667
3668
3669