]> Pileus Git - ~andy/gtk/commitdiff
Convert the gdk keyval-keyname tables to a big string + offsets. (#168901)
authorMatthias Clasen <mclasen@redhat.com>
Tue, 8 Mar 2005 04:35:29 +0000 (04:35 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Tue, 8 Mar 2005 04:35:29 +0000 (04:35 +0000)
2005-03-07  Matthias Clasen  <mclasen@redhat.com>

Convert the gdk keyval-keyname tables to a big string
+ offsets. (#168901)

* gdk/gen-keyname-table.pl: Perl script inspired by
pango/tools/gen-color-table.pl to create the
gdk_keys_by_keyval and gdk_keys_by_name tables as lists
of offsets pointing into a big const string.

* gdk/keynames.txt: List of keyval-keyname pairs.
* gdk/keyname-table.h: Generated tables.

* gdk/gdkkeynames.c: Include keyname-table.h and don't
generate the inverse table at runtime.

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-8
gdk/gdkkeynames.c
gdk/gen-keyname-table.pl [new file with mode: 0755]
gdk/keyname-table.h [new file with mode: 0644]
gdk/keynames.txt [new file with mode: 0644]

index 422b1be14128d8aa26068b561366ead06a26c0be..6aec0edda9166b233e4055d4155cec87085cdc57 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2005-03-07  Matthias Clasen  <mclasen@redhat.com>
+
+       Convert the gdk keyval-keyname tables to a big string
+       + offsets. (#168901)
+       
+       * gdk/gen-keyname-table.pl: Perl script inspired by
+       pango/tools/gen-color-table.pl to create the 
+       gdk_keys_by_keyval and gdk_keys_by_name tables as lists
+       of offsets pointing into a big const string.
+       
+       * gdk/keynames.txt: List of keyval-keyname pairs.
+       * gdk/keyname-table.h: Generated tables.
+
+       * gdk/gdkkeynames.c: Include keyname-table.h and don't
+       generate the inverse table at runtime.
+
 2005-03-07  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtkstyle.c: Document which parameters may be NULL.  
index 422b1be14128d8aa26068b561366ead06a26c0be..6aec0edda9166b233e4055d4155cec87085cdc57 100644 (file)
@@ -1,3 +1,19 @@
+2005-03-07  Matthias Clasen  <mclasen@redhat.com>
+
+       Convert the gdk keyval-keyname tables to a big string
+       + offsets. (#168901)
+       
+       * gdk/gen-keyname-table.pl: Perl script inspired by
+       pango/tools/gen-color-table.pl to create the 
+       gdk_keys_by_keyval and gdk_keys_by_name tables as lists
+       of offsets pointing into a big const string.
+       
+       * gdk/keynames.txt: List of keyval-keyname pairs.
+       * gdk/keyname-table.h: Generated tables.
+
+       * gdk/gdkkeynames.c: Include keyname-table.h and don't
+       generate the inverse table at runtime.
+
 2005-03-07  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtkstyle.c: Document which parameters may be NULL.  
index 422b1be14128d8aa26068b561366ead06a26c0be..6aec0edda9166b233e4055d4155cec87085cdc57 100644 (file)
@@ -1,3 +1,19 @@
+2005-03-07  Matthias Clasen  <mclasen@redhat.com>
+
+       Convert the gdk keyval-keyname tables to a big string
+       + offsets. (#168901)
+       
+       * gdk/gen-keyname-table.pl: Perl script inspired by
+       pango/tools/gen-color-table.pl to create the 
+       gdk_keys_by_keyval and gdk_keys_by_name tables as lists
+       of offsets pointing into a big const string.
+       
+       * gdk/keynames.txt: List of keyval-keyname pairs.
+       * gdk/keyname-table.h: Generated tables.
+
+       * gdk/gdkkeynames.c: Include keyname-table.h and don't
+       generate the inverse table at runtime.
+
 2005-03-07  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtkstyle.c: Document which parameters may be NULL.  
index 32a7b5e7cfb2fa966fdc618cfac7cfd42a4ae056..8d9124d75d686471227e1087a078343b7df3130d 100644 (file)
 
 /* Key handling not part of the keymap */
 
-static const struct gdk_key {
-  guint keyval;
-  const char *name;
-} gdk_keys_by_keyval[] = {
-  { 0x000020, "space" },
-  { 0x000021, "exclam" },
-  { 0x000022, "quotedbl" },
-  { 0x000023, "numbersign" },
-  { 0x000024, "dollar" },
-  { 0x000025, "percent" },
-  { 0x000026, "ampersand" },
-  { 0x000027, "apostrophe" },
-  { 0x000027, "quoteright" },
-  { 0x000028, "parenleft" },
-  { 0x000029, "parenright" },
-  { 0x00002a, "asterisk" },
-  { 0x00002b, "plus" },
-  { 0x00002c, "comma" },
-  { 0x00002d, "minus" },
-  { 0x00002e, "period" },
-  { 0x00002f, "slash" },
-  { 0x000030, "0" },
-  { 0x000031, "1" },
-  { 0x000032, "2" },
-  { 0x000033, "3" },
-  { 0x000034, "4" },
-  { 0x000035, "5" },
-  { 0x000036, "6" },
-  { 0x000037, "7" },
-  { 0x000038, "8" },
-  { 0x000039, "9" },
-  { 0x00003a, "colon" },
-  { 0x00003b, "semicolon" },
-  { 0x00003c, "less" },
-  { 0x00003d, "equal" },
-  { 0x00003e, "greater" },
-  { 0x00003f, "question" },
-  { 0x000040, "at" },
-  { 0x000041, "A" },
-  { 0x000042, "B" },
-  { 0x000043, "C" },
-  { 0x000044, "D" },
-  { 0x000045, "E" },
-  { 0x000046, "F" },
-  { 0x000047, "G" },
-  { 0x000048, "H" },
-  { 0x000049, "I" },
-  { 0x00004a, "J" },
-  { 0x00004b, "K" },
-  { 0x00004c, "L" },
-  { 0x00004d, "M" },
-  { 0x00004e, "N" },
-  { 0x00004f, "O" },
-  { 0x000050, "P" },
-  { 0x000051, "Q" },
-  { 0x000052, "R" },
-  { 0x000053, "S" },
-  { 0x000054, "T" },
-  { 0x000055, "U" },
-  { 0x000056, "V" },
-  { 0x000057, "W" },
-  { 0x000058, "X" },
-  { 0x000059, "Y" },
-  { 0x00005a, "Z" },
-  { 0x00005b, "bracketleft" },
-  { 0x00005c, "backslash" },
-  { 0x00005d, "bracketright" },
-  { 0x00005e, "asciicircum" },
-  { 0x00005f, "underscore" },
-  { 0x000060, "grave" },
-  { 0x000060, "quoteleft" },
-  { 0x000061, "a" },
-  { 0x000062, "b" },
-  { 0x000063, "c" },
-  { 0x000064, "d" },
-  { 0x000065, "e" },
-  { 0x000066, "f" },
-  { 0x000067, "g" },
-  { 0x000068, "h" },
-  { 0x000069, "i" },
-  { 0x00006a, "j" },
-  { 0x00006b, "k" },
-  { 0x00006c, "l" },
-  { 0x00006d, "m" },
-  { 0x00006e, "n" },
-  { 0x00006f, "o" },
-  { 0x000070, "p" },
-  { 0x000071, "q" },
-  { 0x000072, "r" },
-  { 0x000073, "s" },
-  { 0x000074, "t" },
-  { 0x000075, "u" },
-  { 0x000076, "v" },
-  { 0x000077, "w" },
-  { 0x000078, "x" },
-  { 0x000079, "y" },
-  { 0x00007a, "z" },
-  { 0x00007b, "braceleft" },
-  { 0x00007c, "bar" },
-  { 0x00007d, "braceright" },
-  { 0x00007e, "asciitilde" },
-  { 0x0000a0, "nobreakspace" },
-  { 0x0000a1, "exclamdown" },
-  { 0x0000a2, "cent" },
-  { 0x0000a3, "sterling" },
-  { 0x0000a4, "currency" },
-  { 0x0000a5, "yen" },
-  { 0x0000a6, "brokenbar" },
-  { 0x0000a7, "section" },
-  { 0x0000a8, "diaeresis" },
-  { 0x0000a9, "copyright" },
-  { 0x0000aa, "ordfeminine" },
-  { 0x0000ab, "guillemotleft" },
-  { 0x0000ac, "notsign" },
-  { 0x0000ad, "hyphen" },
-  { 0x0000ae, "registered" },
-  { 0x0000af, "macron" },
-  { 0x0000b0, "degree" },
-  { 0x0000b1, "plusminus" },
-  { 0x0000b2, "twosuperior" },
-  { 0x0000b3, "threesuperior" },
-  { 0x0000b4, "acute" },
-  { 0x0000b5, "mu" },
-  { 0x0000b6, "paragraph" },
-  { 0x0000b7, "periodcentered" },
-  { 0x0000b8, "cedilla" },
-  { 0x0000b9, "onesuperior" },
-  { 0x0000ba, "masculine" },
-  { 0x0000bb, "guillemotright" },
-  { 0x0000bc, "onequarter" },
-  { 0x0000bd, "onehalf" },
-  { 0x0000be, "threequarters" },
-  { 0x0000bf, "questiondown" },
-  { 0x0000c0, "Agrave" },
-  { 0x0000c1, "Aacute" },
-  { 0x0000c2, "Acircumflex" },
-  { 0x0000c3, "Atilde" },
-  { 0x0000c4, "Adiaeresis" },
-  { 0x0000c5, "Aring" },
-  { 0x0000c6, "AE" },
-  { 0x0000c7, "Ccedilla" },
-  { 0x0000c8, "Egrave" },
-  { 0x0000c9, "Eacute" },
-  { 0x0000ca, "Ecircumflex" },
-  { 0x0000cb, "Ediaeresis" },
-  { 0x0000cc, "Igrave" },
-  { 0x0000cd, "Iacute" },
-  { 0x0000ce, "Icircumflex" },
-  { 0x0000cf, "Idiaeresis" },
-  { 0x0000d0, "ETH" },
-  { 0x0000d0, "Eth" },
-  { 0x0000d1, "Ntilde" },
-  { 0x0000d2, "Ograve" },
-  { 0x0000d3, "Oacute" },
-  { 0x0000d4, "Ocircumflex" },
-  { 0x0000d5, "Otilde" },
-  { 0x0000d6, "Odiaeresis" },
-  { 0x0000d7, "multiply" },
-  { 0x0000d8, "Ooblique" },
-  { 0x0000d9, "Ugrave" },
-  { 0x0000da, "Uacute" },
-  { 0x0000db, "Ucircumflex" },
-  { 0x0000dc, "Udiaeresis" },
-  { 0x0000dd, "Yacute" },
-  { 0x0000de, "THORN" },
-  { 0x0000de, "Thorn" },
-  { 0x0000df, "ssharp" },
-  { 0x0000e0, "agrave" },
-  { 0x0000e1, "aacute" },
-  { 0x0000e2, "acircumflex" },
-  { 0x0000e3, "atilde" },
-  { 0x0000e4, "adiaeresis" },
-  { 0x0000e5, "aring" },
-  { 0x0000e6, "ae" },
-  { 0x0000e7, "ccedilla" },
-  { 0x0000e8, "egrave" },
-  { 0x0000e9, "eacute" },
-  { 0x0000ea, "ecircumflex" },
-  { 0x0000eb, "ediaeresis" },
-  { 0x0000ec, "igrave" },
-  { 0x0000ed, "iacute" },
-  { 0x0000ee, "icircumflex" },
-  { 0x0000ef, "idiaeresis" },
-  { 0x0000f0, "eth" },
-  { 0x0000f1, "ntilde" },
-  { 0x0000f2, "ograve" },
-  { 0x0000f3, "oacute" },
-  { 0x0000f4, "ocircumflex" },
-  { 0x0000f5, "otilde" },
-  { 0x0000f6, "odiaeresis" },
-  { 0x0000f7, "division" },
-  { 0x0000f8, "oslash" },
-  { 0x0000f9, "ugrave" },
-  { 0x0000fa, "uacute" },
-  { 0x0000fb, "ucircumflex" },
-  { 0x0000fc, "udiaeresis" },
-  { 0x0000fd, "yacute" },
-  { 0x0000fe, "thorn" },
-  { 0x0000ff, "ydiaeresis" },
-  { 0x0001a1, "Aogonek" },
-  { 0x0001a2, "breve" },
-  { 0x0001a3, "Lstroke" },
-  { 0x0001a5, "Lcaron" },
-  { 0x0001a6, "Sacute" },
-  { 0x0001a9, "Scaron" },
-  { 0x0001aa, "Scedilla" },
-  { 0x0001ab, "Tcaron" },
-  { 0x0001ac, "Zacute" },
-  { 0x0001ae, "Zcaron" },
-  { 0x0001af, "Zabovedot" },
-  { 0x0001b1, "aogonek" },
-  { 0x0001b2, "ogonek" },
-  { 0x0001b3, "lstroke" },
-  { 0x0001b5, "lcaron" },
-  { 0x0001b6, "sacute" },
-  { 0x0001b7, "caron" },
-  { 0x0001b9, "scaron" },
-  { 0x0001ba, "scedilla" },
-  { 0x0001bb, "tcaron" },
-  { 0x0001bc, "zacute" },
-  { 0x0001bd, "doubleacute" },
-  { 0x0001be, "zcaron" },
-  { 0x0001bf, "zabovedot" },
-  { 0x0001c0, "Racute" },
-  { 0x0001c3, "Abreve" },
-  { 0x0001c5, "Lacute" },
-  { 0x0001c6, "Cacute" },
-  { 0x0001c8, "Ccaron" },
-  { 0x0001ca, "Eogonek" },
-  { 0x0001cc, "Ecaron" },
-  { 0x0001cf, "Dcaron" },
-  { 0x0001d0, "Dstroke" },
-  { 0x0001d1, "Nacute" },
-  { 0x0001d2, "Ncaron" },
-  { 0x0001d5, "Odoubleacute" },
-  { 0x0001d8, "Rcaron" },
-  { 0x0001d9, "Uring" },
-  { 0x0001db, "Udoubleacute" },
-  { 0x0001de, "Tcedilla" },
-  { 0x0001e0, "racute" },
-  { 0x0001e3, "abreve" },
-  { 0x0001e5, "lacute" },
-  { 0x0001e6, "cacute" },
-  { 0x0001e8, "ccaron" },
-  { 0x0001ea, "eogonek" },
-  { 0x0001ec, "ecaron" },
-  { 0x0001ef, "dcaron" },
-  { 0x0001f0, "dstroke" },
-  { 0x0001f1, "nacute" },
-  { 0x0001f2, "ncaron" },
-  { 0x0001f5, "odoubleacute" },
-  { 0x0001f8, "rcaron" },
-  { 0x0001f9, "uring" },
-  { 0x0001fb, "udoubleacute" },
-  { 0x0001fe, "tcedilla" },
-  { 0x0001ff, "abovedot" },
-  { 0x0002a1, "Hstroke" },
-  { 0x0002a6, "Hcircumflex" },
-  { 0x0002a9, "Iabovedot" },
-  { 0x0002ab, "Gbreve" },
-  { 0x0002ac, "Jcircumflex" },
-  { 0x0002b1, "hstroke" },
-  { 0x0002b6, "hcircumflex" },
-  { 0x0002b9, "idotless" },
-  { 0x0002bb, "gbreve" },
-  { 0x0002bc, "jcircumflex" },
-  { 0x0002c5, "Cabovedot" },
-  { 0x0002c6, "Ccircumflex" },
-  { 0x0002d5, "Gabovedot" },
-  { 0x0002d8, "Gcircumflex" },
-  { 0x0002dd, "Ubreve" },
-  { 0x0002de, "Scircumflex" },
-  { 0x0002e5, "cabovedot" },
-  { 0x0002e6, "ccircumflex" },
-  { 0x0002f5, "gabovedot" },
-  { 0x0002f8, "gcircumflex" },
-  { 0x0002fd, "ubreve" },
-  { 0x0002fe, "scircumflex" },
-  { 0x0003a2, "kappa" },
-  { 0x0003a2, "kra" },
-  { 0x0003a3, "Rcedilla" },
-  { 0x0003a5, "Itilde" },
-  { 0x0003a6, "Lcedilla" },
-  { 0x0003aa, "Emacron" },
-  { 0x0003ab, "Gcedilla" },
-  { 0x0003ac, "Tslash" },
-  { 0x0003b3, "rcedilla" },
-  { 0x0003b5, "itilde" },
-  { 0x0003b6, "lcedilla" },
-  { 0x0003ba, "emacron" },
-  { 0x0003bb, "gcedilla" },
-  { 0x0003bc, "tslash" },
-  { 0x0003bd, "ENG" },
-  { 0x0003bf, "eng" },
-  { 0x0003c0, "Amacron" },
-  { 0x0003c7, "Iogonek" },
-  { 0x0003cc, "Eabovedot" },
-  { 0x0003cf, "Imacron" },
-  { 0x0003d1, "Ncedilla" },
-  { 0x0003d2, "Omacron" },
-  { 0x0003d3, "Kcedilla" },
-  { 0x0003d9, "Uogonek" },
-  { 0x0003dd, "Utilde" },
-  { 0x0003de, "Umacron" },
-  { 0x0003e0, "amacron" },
-  { 0x0003e7, "iogonek" },
-  { 0x0003ec, "eabovedot" },
-  { 0x0003ef, "imacron" },
-  { 0x0003f1, "ncedilla" },
-  { 0x0003f2, "omacron" },
-  { 0x0003f3, "kcedilla" },
-  { 0x0003f9, "uogonek" },
-  { 0x0003fd, "utilde" },
-  { 0x0003fe, "umacron" },
-  { 0x00047e, "overline" },
-  { 0x0004a1, "kana_fullstop" },
-  { 0x0004a2, "kana_openingbracket" },
-  { 0x0004a3, "kana_closingbracket" },
-  { 0x0004a4, "kana_comma" },
-  { 0x0004a5, "kana_conjunctive" },
-  { 0x0004a5, "kana_middledot" },
-  { 0x0004a6, "kana_WO" },
-  { 0x0004a7, "kana_a" },
-  { 0x0004a8, "kana_i" },
-  { 0x0004a9, "kana_u" },
-  { 0x0004aa, "kana_e" },
-  { 0x0004ab, "kana_o" },
-  { 0x0004ac, "kana_ya" },
-  { 0x0004ad, "kana_yu" },
-  { 0x0004ae, "kana_yo" },
-  { 0x0004af, "kana_tsu" },
-  { 0x0004af, "kana_tu" },
-  { 0x0004b0, "prolongedsound" },
-  { 0x0004b1, "kana_A" },
-  { 0x0004b2, "kana_I" },
-  { 0x0004b3, "kana_U" },
-  { 0x0004b4, "kana_E" },
-  { 0x0004b5, "kana_O" },
-  { 0x0004b6, "kana_KA" },
-  { 0x0004b7, "kana_KI" },
-  { 0x0004b8, "kana_KU" },
-  { 0x0004b9, "kana_KE" },
-  { 0x0004ba, "kana_KO" },
-  { 0x0004bb, "kana_SA" },
-  { 0x0004bc, "kana_SHI" },
-  { 0x0004bd, "kana_SU" },
-  { 0x0004be, "kana_SE" },
-  { 0x0004bf, "kana_SO" },
-  { 0x0004c0, "kana_TA" },
-  { 0x0004c1, "kana_CHI" },
-  { 0x0004c1, "kana_TI" },
-  { 0x0004c2, "kana_TSU" },
-  { 0x0004c2, "kana_TU" },
-  { 0x0004c3, "kana_TE" },
-  { 0x0004c4, "kana_TO" },
-  { 0x0004c5, "kana_NA" },
-  { 0x0004c6, "kana_NI" },
-  { 0x0004c7, "kana_NU" },
-  { 0x0004c8, "kana_NE" },
-  { 0x0004c9, "kana_NO" },
-  { 0x0004ca, "kana_HA" },
-  { 0x0004cb, "kana_HI" },
-  { 0x0004cc, "kana_FU" },
-  { 0x0004cc, "kana_HU" },
-  { 0x0004cd, "kana_HE" },
-  { 0x0004ce, "kana_HO" },
-  { 0x0004cf, "kana_MA" },
-  { 0x0004d0, "kana_MI" },
-  { 0x0004d1, "kana_MU" },
-  { 0x0004d2, "kana_ME" },
-  { 0x0004d3, "kana_MO" },
-  { 0x0004d4, "kana_YA" },
-  { 0x0004d5, "kana_YU" },
-  { 0x0004d6, "kana_YO" },
-  { 0x0004d7, "kana_RA" },
-  { 0x0004d8, "kana_RI" },
-  { 0x0004d9, "kana_RU" },
-  { 0x0004da, "kana_RE" },
-  { 0x0004db, "kana_RO" },
-  { 0x0004dc, "kana_WA" },
-  { 0x0004dd, "kana_N" },
-  { 0x0004de, "voicedsound" },
-  { 0x0004df, "semivoicedsound" },
-  { 0x0005ac, "Arabic_comma" },
-  { 0x0005bb, "Arabic_semicolon" },
-  { 0x0005bf, "Arabic_question_mark" },
-  { 0x0005c1, "Arabic_hamza" },
-  { 0x0005c2, "Arabic_maddaonalef" },
-  { 0x0005c3, "Arabic_hamzaonalef" },
-  { 0x0005c4, "Arabic_hamzaonwaw" },
-  { 0x0005c5, "Arabic_hamzaunderalef" },
-  { 0x0005c6, "Arabic_hamzaonyeh" },
-  { 0x0005c7, "Arabic_alef" },
-  { 0x0005c8, "Arabic_beh" },
-  { 0x0005c9, "Arabic_tehmarbuta" },
-  { 0x0005ca, "Arabic_teh" },
-  { 0x0005cb, "Arabic_theh" },
-  { 0x0005cc, "Arabic_jeem" },
-  { 0x0005cd, "Arabic_hah" },
-  { 0x0005ce, "Arabic_khah" },
-  { 0x0005cf, "Arabic_dal" },
-  { 0x0005d0, "Arabic_thal" },
-  { 0x0005d1, "Arabic_ra" },
-  { 0x0005d2, "Arabic_zain" },
-  { 0x0005d3, "Arabic_seen" },
-  { 0x0005d4, "Arabic_sheen" },
-  { 0x0005d5, "Arabic_sad" },
-  { 0x0005d6, "Arabic_dad" },
-  { 0x0005d7, "Arabic_tah" },
-  { 0x0005d8, "Arabic_zah" },
-  { 0x0005d9, "Arabic_ain" },
-  { 0x0005da, "Arabic_ghain" },
-  { 0x0005e0, "Arabic_tatweel" },
-  { 0x0005e1, "Arabic_feh" },
-  { 0x0005e2, "Arabic_qaf" },
-  { 0x0005e3, "Arabic_kaf" },
-  { 0x0005e4, "Arabic_lam" },
-  { 0x0005e5, "Arabic_meem" },
-  { 0x0005e6, "Arabic_noon" },
-  { 0x0005e7, "Arabic_ha" },
-  { 0x0005e7, "Arabic_heh" },
-  { 0x0005e8, "Arabic_waw" },
-  { 0x0005e9, "Arabic_alefmaksura" },
-  { 0x0005ea, "Arabic_yeh" },
-  { 0x0005eb, "Arabic_fathatan" },
-  { 0x0005ec, "Arabic_dammatan" },
-  { 0x0005ed, "Arabic_kasratan" },
-  { 0x0005ee, "Arabic_fatha" },
-  { 0x0005ef, "Arabic_damma" },
-  { 0x0005f0, "Arabic_kasra" },
-  { 0x0005f1, "Arabic_shadda" },
-  { 0x0005f2, "Arabic_sukun" },
-  { 0x0006a1, "Serbian_dje" },
-  { 0x0006a2, "Macedonia_gje" },
-  { 0x0006a3, "Cyrillic_io" },
-  { 0x0006a4, "Ukrainian_ie" },
-  { 0x0006a4, "Ukranian_je" },
-  { 0x0006a5, "Macedonia_dse" },
-  { 0x0006a6, "Ukrainian_i" },
-  { 0x0006a6, "Ukranian_i" },
-  { 0x0006a7, "Ukrainian_yi" },
-  { 0x0006a7, "Ukranian_yi" },
-  { 0x0006a8, "Cyrillic_je" },
-  { 0x0006a8, "Serbian_je" },
-  { 0x0006a9, "Cyrillic_lje" },
-  { 0x0006a9, "Serbian_lje" },
-  { 0x0006aa, "Cyrillic_nje" },
-  { 0x0006aa, "Serbian_nje" },
-  { 0x0006ab, "Serbian_tshe" },
-  { 0x0006ac, "Macedonia_kje" },
-  { 0x0006ae, "Byelorussian_shortu" },
-  { 0x0006af, "Cyrillic_dzhe" },
-  { 0x0006af, "Serbian_dze" },
-  { 0x0006b0, "numerosign" },
-  { 0x0006b1, "Serbian_DJE" },
-  { 0x0006b2, "Macedonia_GJE" },
-  { 0x0006b3, "Cyrillic_IO" },
-  { 0x0006b4, "Ukrainian_IE" },
-  { 0x0006b4, "Ukranian_JE" },
-  { 0x0006b5, "Macedonia_DSE" },
-  { 0x0006b6, "Ukrainian_I" },
-  { 0x0006b6, "Ukranian_I" },
-  { 0x0006b7, "Ukrainian_YI" },
-  { 0x0006b7, "Ukranian_YI" },
-  { 0x0006b8, "Cyrillic_JE" },
-  { 0x0006b8, "Serbian_JE" },
-  { 0x0006b9, "Cyrillic_LJE" },
-  { 0x0006b9, "Serbian_LJE" },
-  { 0x0006ba, "Cyrillic_NJE" },
-  { 0x0006ba, "Serbian_NJE" },
-  { 0x0006bb, "Serbian_TSHE" },
-  { 0x0006bc, "Macedonia_KJE" },
-  { 0x0006be, "Byelorussian_SHORTU" },
-  { 0x0006bf, "Cyrillic_DZHE" },
-  { 0x0006bf, "Serbian_DZE" },
-  { 0x0006c0, "Cyrillic_yu" },
-  { 0x0006c1, "Cyrillic_a" },
-  { 0x0006c2, "Cyrillic_be" },
-  { 0x0006c3, "Cyrillic_tse" },
-  { 0x0006c4, "Cyrillic_de" },
-  { 0x0006c5, "Cyrillic_ie" },
-  { 0x0006c6, "Cyrillic_ef" },
-  { 0x0006c7, "Cyrillic_ghe" },
-  { 0x0006c8, "Cyrillic_ha" },
-  { 0x0006c9, "Cyrillic_i" },
-  { 0x0006ca, "Cyrillic_shorti" },
-  { 0x0006cb, "Cyrillic_ka" },
-  { 0x0006cc, "Cyrillic_el" },
-  { 0x0006cd, "Cyrillic_em" },
-  { 0x0006ce, "Cyrillic_en" },
-  { 0x0006cf, "Cyrillic_o" },
-  { 0x0006d0, "Cyrillic_pe" },
-  { 0x0006d1, "Cyrillic_ya" },
-  { 0x0006d2, "Cyrillic_er" },
-  { 0x0006d3, "Cyrillic_es" },
-  { 0x0006d4, "Cyrillic_te" },
-  { 0x0006d5, "Cyrillic_u" },
-  { 0x0006d6, "Cyrillic_zhe" },
-  { 0x0006d7, "Cyrillic_ve" },
-  { 0x0006d8, "Cyrillic_softsign" },
-  { 0x0006d9, "Cyrillic_yeru" },
-  { 0x0006da, "Cyrillic_ze" },
-  { 0x0006db, "Cyrillic_sha" },
-  { 0x0006dc, "Cyrillic_e" },
-  { 0x0006dd, "Cyrillic_shcha" },
-  { 0x0006de, "Cyrillic_che" },
-  { 0x0006df, "Cyrillic_hardsign" },
-  { 0x0006e0, "Cyrillic_YU" },
-  { 0x0006e1, "Cyrillic_A" },
-  { 0x0006e2, "Cyrillic_BE" },
-  { 0x0006e3, "Cyrillic_TSE" },
-  { 0x0006e4, "Cyrillic_DE" },
-  { 0x0006e5, "Cyrillic_IE" },
-  { 0x0006e6, "Cyrillic_EF" },
-  { 0x0006e7, "Cyrillic_GHE" },
-  { 0x0006e8, "Cyrillic_HA" },
-  { 0x0006e9, "Cyrillic_I" },
-  { 0x0006ea, "Cyrillic_SHORTI" },
-  { 0x0006eb, "Cyrillic_KA" },
-  { 0x0006ec, "Cyrillic_EL" },
-  { 0x0006ed, "Cyrillic_EM" },
-  { 0x0006ee, "Cyrillic_EN" },
-  { 0x0006ef, "Cyrillic_O" },
-  { 0x0006f0, "Cyrillic_PE" },
-  { 0x0006f1, "Cyrillic_YA" },
-  { 0x0006f2, "Cyrillic_ER" },
-  { 0x0006f3, "Cyrillic_ES" },
-  { 0x0006f4, "Cyrillic_TE" },
-  { 0x0006f5, "Cyrillic_U" },
-  { 0x0006f6, "Cyrillic_ZHE" },
-  { 0x0006f7, "Cyrillic_VE" },
-  { 0x0006f8, "Cyrillic_SOFTSIGN" },
-  { 0x0006f9, "Cyrillic_YERU" },
-  { 0x0006fa, "Cyrillic_ZE" },
-  { 0x0006fb, "Cyrillic_SHA" },
-  { 0x0006fc, "Cyrillic_E" },
-  { 0x0006fd, "Cyrillic_SHCHA" },
-  { 0x0006fe, "Cyrillic_CHE" },
-  { 0x0006ff, "Cyrillic_HARDSIGN" },
-  { 0x0007a1, "Greek_ALPHAaccent" },
-  { 0x0007a2, "Greek_EPSILONaccent" },
-  { 0x0007a3, "Greek_ETAaccent" },
-  { 0x0007a4, "Greek_IOTAaccent" },
-  { 0x0007a5, "Greek_IOTAdieresis" },
-  { 0x0007a5, "Greek_IOTAdiaeresis" },
-  { 0x0007a7, "Greek_OMICRONaccent" },
-  { 0x0007a8, "Greek_UPSILONaccent" },
-  { 0x0007a9, "Greek_UPSILONdieresis" },
-  { 0x0007ab, "Greek_OMEGAaccent" },
-  { 0x0007ae, "Greek_accentdieresis" },
-  { 0x0007af, "Greek_horizbar" },
-  { 0x0007b1, "Greek_alphaaccent" },
-  { 0x0007b2, "Greek_epsilonaccent" },
-  { 0x0007b3, "Greek_etaaccent" },
-  { 0x0007b4, "Greek_iotaaccent" },
-  { 0x0007b5, "Greek_iotadieresis" },
-  { 0x0007b6, "Greek_iotaaccentdieresis" },
-  { 0x0007b7, "Greek_omicronaccent" },
-  { 0x0007b8, "Greek_upsilonaccent" },
-  { 0x0007b9, "Greek_upsilondieresis" },
-  { 0x0007ba, "Greek_upsilonaccentdieresis" },
-  { 0x0007bb, "Greek_omegaaccent" },
-  { 0x0007c1, "Greek_ALPHA" },
-  { 0x0007c2, "Greek_BETA" },
-  { 0x0007c3, "Greek_GAMMA" },
-  { 0x0007c4, "Greek_DELTA" },
-  { 0x0007c5, "Greek_EPSILON" },
-  { 0x0007c6, "Greek_ZETA" },
-  { 0x0007c7, "Greek_ETA" },
-  { 0x0007c8, "Greek_THETA" },
-  { 0x0007c9, "Greek_IOTA" },
-  { 0x0007ca, "Greek_KAPPA" },
-  { 0x0007cb, "Greek_LAMBDA" },
-  { 0x0007cb, "Greek_LAMDA" },
-  { 0x0007cc, "Greek_MU" },
-  { 0x0007cd, "Greek_NU" },
-  { 0x0007ce, "Greek_XI" },
-  { 0x0007cf, "Greek_OMICRON" },
-  { 0x0007d0, "Greek_PI" },
-  { 0x0007d1, "Greek_RHO" },
-  { 0x0007d2, "Greek_SIGMA" },
-  { 0x0007d4, "Greek_TAU" },
-  { 0x0007d5, "Greek_UPSILON" },
-  { 0x0007d6, "Greek_PHI" },
-  { 0x0007d7, "Greek_CHI" },
-  { 0x0007d8, "Greek_PSI" },
-  { 0x0007d9, "Greek_OMEGA" },
-  { 0x0007e1, "Greek_alpha" },
-  { 0x0007e2, "Greek_beta" },
-  { 0x0007e3, "Greek_gamma" },
-  { 0x0007e4, "Greek_delta" },
-  { 0x0007e5, "Greek_epsilon" },
-  { 0x0007e6, "Greek_zeta" },
-  { 0x0007e7, "Greek_eta" },
-  { 0x0007e8, "Greek_theta" },
-  { 0x0007e9, "Greek_iota" },
-  { 0x0007ea, "Greek_kappa" },
-  { 0x0007eb, "Greek_lambda" },
-  { 0x0007eb, "Greek_lamda" },
-  { 0x0007ec, "Greek_mu" },
-  { 0x0007ed, "Greek_nu" },
-  { 0x0007ee, "Greek_xi" },
-  { 0x0007ef, "Greek_omicron" },
-  { 0x0007f0, "Greek_pi" },
-  { 0x0007f1, "Greek_rho" },
-  { 0x0007f2, "Greek_sigma" },
-  { 0x0007f3, "Greek_finalsmallsigma" },
-  { 0x0007f4, "Greek_tau" },
-  { 0x0007f5, "Greek_upsilon" },
-  { 0x0007f6, "Greek_phi" },
-  { 0x0007f7, "Greek_chi" },
-  { 0x0007f8, "Greek_psi" },
-  { 0x0007f9, "Greek_omega" },
-  { 0x0008a1, "leftradical" },
-  { 0x0008a2, "topleftradical" },
-  { 0x0008a3, "horizconnector" },
-  { 0x0008a4, "topintegral" },
-  { 0x0008a5, "botintegral" },
-  { 0x0008a6, "vertconnector" },
-  { 0x0008a7, "topleftsqbracket" },
-  { 0x0008a8, "botleftsqbracket" },
-  { 0x0008a9, "toprightsqbracket" },
-  { 0x0008aa, "botrightsqbracket" },
-  { 0x0008ab, "topleftparens" },
-  { 0x0008ac, "botleftparens" },
-  { 0x0008ad, "toprightparens" },
-  { 0x0008ae, "botrightparens" },
-  { 0x0008af, "leftmiddlecurlybrace" },
-  { 0x0008b0, "rightmiddlecurlybrace" },
-  { 0x0008b1, "topleftsummation" },
-  { 0x0008b2, "botleftsummation" },
-  { 0x0008b3, "topvertsummationconnector" },
-  { 0x0008b4, "botvertsummationconnector" },
-  { 0x0008b5, "toprightsummation" },
-  { 0x0008b6, "botrightsummation" },
-  { 0x0008b7, "rightmiddlesummation" },
-  { 0x0008bc, "lessthanequal" },
-  { 0x0008bd, "notequal" },
-  { 0x0008be, "greaterthanequal" },
-  { 0x0008bf, "integral" },
-  { 0x0008c0, "therefore" },
-  { 0x0008c1, "variation" },
-  { 0x0008c2, "infinity" },
-  { 0x0008c5, "nabla" },
-  { 0x0008c8, "approximate" },
-  { 0x0008c9, "similarequal" },
-  { 0x0008cd, "ifonlyif" },
-  { 0x0008ce, "implies" },
-  { 0x0008cf, "identical" },
-  { 0x0008d6, "radical" },
-  { 0x0008da, "includedin" },
-  { 0x0008db, "includes" },
-  { 0x0008dc, "intersection" },
-  { 0x0008dd, "union" },
-  { 0x0008de, "logicaland" },
-  { 0x0008df, "logicalor" },
-  { 0x0008ef, "partialderivative" },
-  { 0x0008f6, "function" },
-  { 0x0008fb, "leftarrow" },
-  { 0x0008fc, "uparrow" },
-  { 0x0008fd, "rightarrow" },
-  { 0x0008fe, "downarrow" },
-  { 0x0009df, "blank" },
-  { 0x0009e0, "soliddiamond" },
-  { 0x0009e1, "checkerboard" },
-  { 0x0009e2, "ht" },
-  { 0x0009e3, "ff" },
-  { 0x0009e4, "cr" },
-  { 0x0009e5, "lf" },
-  { 0x0009e8, "nl" },
-  { 0x0009e9, "vt" },
-  { 0x0009ea, "lowrightcorner" },
-  { 0x0009eb, "uprightcorner" },
-  { 0x0009ec, "upleftcorner" },
-  { 0x0009ed, "lowleftcorner" },
-  { 0x0009ee, "crossinglines" },
-  { 0x0009ef, "horizlinescan1" },
-  { 0x0009f0, "horizlinescan3" },
-  { 0x0009f1, "horizlinescan5" },
-  { 0x0009f2, "horizlinescan7" },
-  { 0x0009f3, "horizlinescan9" },
-  { 0x0009f4, "leftt" },
-  { 0x0009f5, "rightt" },
-  { 0x0009f6, "bott" },
-  { 0x0009f7, "topt" },
-  { 0x0009f8, "vertbar" },
-  { 0x000aa1, "emspace" },
-  { 0x000aa2, "enspace" },
-  { 0x000aa3, "em3space" },
-  { 0x000aa4, "em4space" },
-  { 0x000aa5, "digitspace" },
-  { 0x000aa6, "punctspace" },
-  { 0x000aa7, "thinspace" },
-  { 0x000aa8, "hairspace" },
-  { 0x000aa9, "emdash" },
-  { 0x000aaa, "endash" },
-  { 0x000aac, "signifblank" },
-  { 0x000aae, "ellipsis" },
-  { 0x000aaf, "doubbaselinedot" },
-  { 0x000ab0, "onethird" },
-  { 0x000ab1, "twothirds" },
-  { 0x000ab2, "onefifth" },
-  { 0x000ab3, "twofifths" },
-  { 0x000ab4, "threefifths" },
-  { 0x000ab5, "fourfifths" },
-  { 0x000ab6, "onesixth" },
-  { 0x000ab7, "fivesixths" },
-  { 0x000ab8, "careof" },
-  { 0x000abb, "figdash" },
-  { 0x000abc, "leftanglebracket" },
-  { 0x000abd, "decimalpoint" },
-  { 0x000abe, "rightanglebracket" },
-  { 0x000abf, "marker" },
-  { 0x000ac3, "oneeighth" },
-  { 0x000ac4, "threeeighths" },
-  { 0x000ac5, "fiveeighths" },
-  { 0x000ac6, "seveneighths" },
-  { 0x000ac9, "trademark" },
-  { 0x000aca, "signaturemark" },
-  { 0x000acb, "trademarkincircle" },
-  { 0x000acc, "leftopentriangle" },
-  { 0x000acd, "rightopentriangle" },
-  { 0x000ace, "emopencircle" },
-  { 0x000acf, "emopenrectangle" },
-  { 0x000ad0, "leftsinglequotemark" },
-  { 0x000ad1, "rightsinglequotemark" },
-  { 0x000ad2, "leftdoublequotemark" },
-  { 0x000ad3, "rightdoublequotemark" },
-  { 0x000ad4, "prescription" },
-  { 0x000ad6, "minutes" },
-  { 0x000ad7, "seconds" },
-  { 0x000ad9, "latincross" },
-  { 0x000ada, "hexagram" },
-  { 0x000adb, "filledrectbullet" },
-  { 0x000adc, "filledlefttribullet" },
-  { 0x000add, "filledrighttribullet" },
-  { 0x000ade, "emfilledcircle" },
-  { 0x000adf, "emfilledrect" },
-  { 0x000ae0, "enopencircbullet" },
-  { 0x000ae1, "enopensquarebullet" },
-  { 0x000ae2, "openrectbullet" },
-  { 0x000ae3, "opentribulletup" },
-  { 0x000ae4, "opentribulletdown" },
-  { 0x000ae5, "openstar" },
-  { 0x000ae6, "enfilledcircbullet" },
-  { 0x000ae7, "enfilledsqbullet" },
-  { 0x000ae8, "filledtribulletup" },
-  { 0x000ae9, "filledtribulletdown" },
-  { 0x000aea, "leftpointer" },
-  { 0x000aeb, "rightpointer" },
-  { 0x000aec, "club" },
-  { 0x000aed, "diamond" },
-  { 0x000aee, "heart" },
-  { 0x000af0, "maltesecross" },
-  { 0x000af1, "dagger" },
-  { 0x000af2, "doubledagger" },
-  { 0x000af3, "checkmark" },
-  { 0x000af4, "ballotcross" },
-  { 0x000af5, "musicalsharp" },
-  { 0x000af6, "musicalflat" },
-  { 0x000af7, "malesymbol" },
-  { 0x000af8, "femalesymbol" },
-  { 0x000af9, "telephone" },
-  { 0x000afa, "telephonerecorder" },
-  { 0x000afb, "phonographcopyright" },
-  { 0x000afc, "caret" },
-  { 0x000afd, "singlelowquotemark" },
-  { 0x000afe, "doublelowquotemark" },
-  { 0x000aff, "cursor" },
-  { 0x000ba3, "leftcaret" },
-  { 0x000ba6, "rightcaret" },
-  { 0x000ba8, "downcaret" },
-  { 0x000ba9, "upcaret" },
-  { 0x000bc0, "overbar" },
-  { 0x000bc2, "downtack" },
-  { 0x000bc3, "upshoe" },
-  { 0x000bc4, "downstile" },
-  { 0x000bc6, "underbar" },
-  { 0x000bca, "jot" },
-  { 0x000bcc, "quad" },
-  { 0x000bce, "uptack" },
-  { 0x000bcf, "circle" },
-  { 0x000bd3, "upstile" },
-  { 0x000bd6, "downshoe" },
-  { 0x000bd8, "rightshoe" },
-  { 0x000bda, "leftshoe" },
-  { 0x000bdc, "lefttack" },
-  { 0x000bfc, "righttack" },
-  { 0x000cdf, "hebrew_doublelowline" },
-  { 0x000ce0, "hebrew_aleph" },
-  { 0x000ce1, "hebrew_bet" },
-  { 0x000ce1, "hebrew_beth" },
-  { 0x000ce2, "hebrew_gimel" },
-  { 0x000ce2, "hebrew_gimmel" },
-  { 0x000ce3, "hebrew_dalet" },
-  { 0x000ce3, "hebrew_daleth" },
-  { 0x000ce4, "hebrew_he" },
-  { 0x000ce5, "hebrew_waw" },
-  { 0x000ce6, "hebrew_zain" },
-  { 0x000ce6, "hebrew_zayin" },
-  { 0x000ce7, "hebrew_chet" },
-  { 0x000ce7, "hebrew_het" },
-  { 0x000ce8, "hebrew_tet" },
-  { 0x000ce8, "hebrew_teth" },
-  { 0x000ce9, "hebrew_yod" },
-  { 0x000cea, "hebrew_finalkaph" },
-  { 0x000ceb, "hebrew_kaph" },
-  { 0x000cec, "hebrew_lamed" },
-  { 0x000ced, "hebrew_finalmem" },
-  { 0x000cee, "hebrew_mem" },
-  { 0x000cef, "hebrew_finalnun" },
-  { 0x000cf0, "hebrew_nun" },
-  { 0x000cf1, "hebrew_samech" },
-  { 0x000cf1, "hebrew_samekh" },
-  { 0x000cf2, "hebrew_ayin" },
-  { 0x000cf3, "hebrew_finalpe" },
-  { 0x000cf4, "hebrew_pe" },
-  { 0x000cf5, "hebrew_finalzade" },
-  { 0x000cf5, "hebrew_finalzadi" },
-  { 0x000cf6, "hebrew_zade" },
-  { 0x000cf6, "hebrew_zadi" },
-  { 0x000cf7, "hebrew_kuf" },
-  { 0x000cf7, "hebrew_qoph" },
-  { 0x000cf8, "hebrew_resh" },
-  { 0x000cf9, "hebrew_shin" },
-  { 0x000cfa, "hebrew_taf" },
-  { 0x000cfa, "hebrew_taw" },
-  { 0x000da1, "Thai_kokai" },
-  { 0x000da2, "Thai_khokhai" },
-  { 0x000da3, "Thai_khokhuat" },
-  { 0x000da4, "Thai_khokhwai" },
-  { 0x000da5, "Thai_khokhon" },
-  { 0x000da6, "Thai_khorakhang" },
-  { 0x000da7, "Thai_ngongu" },
-  { 0x000da8, "Thai_chochan" },
-  { 0x000da9, "Thai_choching" },
-  { 0x000daa, "Thai_chochang" },
-  { 0x000dab, "Thai_soso" },
-  { 0x000dac, "Thai_chochoe" },
-  { 0x000dad, "Thai_yoying" },
-  { 0x000dae, "Thai_dochada" },
-  { 0x000daf, "Thai_topatak" },
-  { 0x000db0, "Thai_thothan" },
-  { 0x000db1, "Thai_thonangmontho" },
-  { 0x000db2, "Thai_thophuthao" },
-  { 0x000db3, "Thai_nonen" },
-  { 0x000db4, "Thai_dodek" },
-  { 0x000db5, "Thai_totao" },
-  { 0x000db6, "Thai_thothung" },
-  { 0x000db7, "Thai_thothahan" },
-  { 0x000db8, "Thai_thothong" },
-  { 0x000db9, "Thai_nonu" },
-  { 0x000dba, "Thai_bobaimai" },
-  { 0x000dbb, "Thai_popla" },
-  { 0x000dbc, "Thai_phophung" },
-  { 0x000dbd, "Thai_fofa" },
-  { 0x000dbe, "Thai_phophan" },
-  { 0x000dbf, "Thai_fofan" },
-  { 0x000dc0, "Thai_phosamphao" },
-  { 0x000dc1, "Thai_moma" },
-  { 0x000dc2, "Thai_yoyak" },
-  { 0x000dc3, "Thai_rorua" },
-  { 0x000dc4, "Thai_ru" },
-  { 0x000dc5, "Thai_loling" },
-  { 0x000dc6, "Thai_lu" },
-  { 0x000dc7, "Thai_wowaen" },
-  { 0x000dc8, "Thai_sosala" },
-  { 0x000dc9, "Thai_sorusi" },
-  { 0x000dca, "Thai_sosua" },
-  { 0x000dcb, "Thai_hohip" },
-  { 0x000dcc, "Thai_lochula" },
-  { 0x000dcd, "Thai_oang" },
-  { 0x000dce, "Thai_honokhuk" },
-  { 0x000dcf, "Thai_paiyannoi" },
-  { 0x000dd0, "Thai_saraa" },
-  { 0x000dd1, "Thai_maihanakat" },
-  { 0x000dd2, "Thai_saraaa" },
-  { 0x000dd3, "Thai_saraam" },
-  { 0x000dd4, "Thai_sarai" },
-  { 0x000dd5, "Thai_saraii" },
-  { 0x000dd6, "Thai_saraue" },
-  { 0x000dd7, "Thai_sarauee" },
-  { 0x000dd8, "Thai_sarau" },
-  { 0x000dd9, "Thai_sarauu" },
-  { 0x000dda, "Thai_phinthu" },
-  { 0x000dde, "Thai_maihanakat_maitho" },
-  { 0x000ddf, "Thai_baht" },
-  { 0x000de0, "Thai_sarae" },
-  { 0x000de1, "Thai_saraae" },
-  { 0x000de2, "Thai_sarao" },
-  { 0x000de3, "Thai_saraaimaimuan" },
-  { 0x000de4, "Thai_saraaimaimalai" },
-  { 0x000de5, "Thai_lakkhangyao" },
-  { 0x000de6, "Thai_maiyamok" },
-  { 0x000de7, "Thai_maitaikhu" },
-  { 0x000de8, "Thai_maiek" },
-  { 0x000de9, "Thai_maitho" },
-  { 0x000dea, "Thai_maitri" },
-  { 0x000deb, "Thai_maichattawa" },
-  { 0x000dec, "Thai_thanthakhat" },
-  { 0x000ded, "Thai_nikhahit" },
-  { 0x000df0, "Thai_leksun" },
-  { 0x000df1, "Thai_leknung" },
-  { 0x000df2, "Thai_leksong" },
-  { 0x000df3, "Thai_leksam" },
-  { 0x000df4, "Thai_leksi" },
-  { 0x000df5, "Thai_lekha" },
-  { 0x000df6, "Thai_lekhok" },
-  { 0x000df7, "Thai_lekchet" },
-  { 0x000df8, "Thai_lekpaet" },
-  { 0x000df9, "Thai_lekkao" },
-  { 0x000ea1, "Hangul_Kiyeog" },
-  { 0x000ea2, "Hangul_SsangKiyeog" },
-  { 0x000ea3, "Hangul_KiyeogSios" },
-  { 0x000ea4, "Hangul_Nieun" },
-  { 0x000ea5, "Hangul_NieunJieuj" },
-  { 0x000ea6, "Hangul_NieunHieuh" },
-  { 0x000ea7, "Hangul_Dikeud" },
-  { 0x000ea8, "Hangul_SsangDikeud" },
-  { 0x000ea9, "Hangul_Rieul" },
-  { 0x000eaa, "Hangul_RieulKiyeog" },
-  { 0x000eab, "Hangul_RieulMieum" },
-  { 0x000eac, "Hangul_RieulPieub" },
-  { 0x000ead, "Hangul_RieulSios" },
-  { 0x000eae, "Hangul_RieulTieut" },
-  { 0x000eaf, "Hangul_RieulPhieuf" },
-  { 0x000eb0, "Hangul_RieulHieuh" },
-  { 0x000eb1, "Hangul_Mieum" },
-  { 0x000eb2, "Hangul_Pieub" },
-  { 0x000eb3, "Hangul_SsangPieub" },
-  { 0x000eb4, "Hangul_PieubSios" },
-  { 0x000eb5, "Hangul_Sios" },
-  { 0x000eb6, "Hangul_SsangSios" },
-  { 0x000eb7, "Hangul_Ieung" },
-  { 0x000eb8, "Hangul_Jieuj" },
-  { 0x000eb9, "Hangul_SsangJieuj" },
-  { 0x000eba, "Hangul_Cieuc" },
-  { 0x000ebb, "Hangul_Khieuq" },
-  { 0x000ebc, "Hangul_Tieut" },
-  { 0x000ebd, "Hangul_Phieuf" },
-  { 0x000ebe, "Hangul_Hieuh" },
-  { 0x000ebf, "Hangul_A" },
-  { 0x000ec0, "Hangul_AE" },
-  { 0x000ec1, "Hangul_YA" },
-  { 0x000ec2, "Hangul_YAE" },
-  { 0x000ec3, "Hangul_EO" },
-  { 0x000ec4, "Hangul_E" },
-  { 0x000ec5, "Hangul_YEO" },
-  { 0x000ec6, "Hangul_YE" },
-  { 0x000ec7, "Hangul_O" },
-  { 0x000ec8, "Hangul_WA" },
-  { 0x000ec9, "Hangul_WAE" },
-  { 0x000eca, "Hangul_OE" },
-  { 0x000ecb, "Hangul_YO" },
-  { 0x000ecc, "Hangul_U" },
-  { 0x000ecd, "Hangul_WEO" },
-  { 0x000ece, "Hangul_WE" },
-  { 0x000ecf, "Hangul_WI" },
-  { 0x000ed0, "Hangul_YU" },
-  { 0x000ed1, "Hangul_EU" },
-  { 0x000ed2, "Hangul_YI" },
-  { 0x000ed3, "Hangul_I" },
-  { 0x000ed4, "Hangul_J_Kiyeog" },
-  { 0x000ed5, "Hangul_J_SsangKiyeog" },
-  { 0x000ed6, "Hangul_J_KiyeogSios" },
-  { 0x000ed7, "Hangul_J_Nieun" },
-  { 0x000ed8, "Hangul_J_NieunJieuj" },
-  { 0x000ed9, "Hangul_J_NieunHieuh" },
-  { 0x000eda, "Hangul_J_Dikeud" },
-  { 0x000edb, "Hangul_J_Rieul" },
-  { 0x000edc, "Hangul_J_RieulKiyeog" },
-  { 0x000edd, "Hangul_J_RieulMieum" },
-  { 0x000ede, "Hangul_J_RieulPieub" },
-  { 0x000edf, "Hangul_J_RieulSios" },
-  { 0x000ee0, "Hangul_J_RieulTieut" },
-  { 0x000ee1, "Hangul_J_RieulPhieuf" },
-  { 0x000ee2, "Hangul_J_RieulHieuh" },
-  { 0x000ee3, "Hangul_J_Mieum" },
-  { 0x000ee4, "Hangul_J_Pieub" },
-  { 0x000ee5, "Hangul_J_PieubSios" },
-  { 0x000ee6, "Hangul_J_Sios" },
-  { 0x000ee7, "Hangul_J_SsangSios" },
-  { 0x000ee8, "Hangul_J_Ieung" },
-  { 0x000ee9, "Hangul_J_Jieuj" },
-  { 0x000eea, "Hangul_J_Cieuc" },
-  { 0x000eeb, "Hangul_J_Khieuq" },
-  { 0x000eec, "Hangul_J_Tieut" },
-  { 0x000eed, "Hangul_J_Phieuf" },
-  { 0x000eee, "Hangul_J_Hieuh" },
-  { 0x000eef, "Hangul_RieulYeorinHieuh" },
-  { 0x000ef0, "Hangul_SunkyeongeumMieum" },
-  { 0x000ef1, "Hangul_SunkyeongeumPieub" },
-  { 0x000ef2, "Hangul_PanSios" },
-  { 0x000ef3, "Hangul_KkogjiDalrinIeung" },
-  { 0x000ef4, "Hangul_SunkyeongeumPhieuf" },
-  { 0x000ef5, "Hangul_YeorinHieuh" },
-  { 0x000ef6, "Hangul_AraeA" },
-  { 0x000ef7, "Hangul_AraeAE" },
-  { 0x000ef8, "Hangul_J_PanSios" },
-  { 0x000ef9, "Hangul_J_KkogjiDalrinIeung" },
-  { 0x000efa, "Hangul_J_YeorinHieuh" },
-  { 0x000eff, "Korean_Won" },
-  { 0x0013bc, "OE" },
-  { 0x0013bd, "oe" },
-  { 0x0013be, "Ydiaeresis" },
-  { 0x0020a0, "EcuSign" },
-  { 0x0020a1, "ColonSign" },
-  { 0x0020a2, "CruzeiroSign" },
-  { 0x0020a3, "FFrancSign" },
-  { 0x0020a4, "LiraSign" },
-  { 0x0020a5, "MillSign" },
-  { 0x0020a6, "NairaSign" },
-  { 0x0020a7, "PesetaSign" },
-  { 0x0020a8, "RupeeSign" },
-  { 0x0020a9, "WonSign" },
-  { 0x0020aa, "NewSheqelSign" },
-  { 0x0020ab, "DongSign" },
-  { 0x0020ac, "EuroSign" },
-  { 0x00fd01, "3270_Duplicate" },
-  { 0x00fd02, "3270_FieldMark" },
-  { 0x00fd03, "3270_Right2" },
-  { 0x00fd04, "3270_Left2" },
-  { 0x00fd05, "3270_BackTab" },
-  { 0x00fd06, "3270_EraseEOF" },
-  { 0x00fd07, "3270_EraseInput" },
-  { 0x00fd08, "3270_Reset" },
-  { 0x00fd09, "3270_Quit" },
-  { 0x00fd0a, "3270_PA1" },
-  { 0x00fd0b, "3270_PA2" },
-  { 0x00fd0c, "3270_PA3" },
-  { 0x00fd0d, "3270_Test" },
-  { 0x00fd0e, "3270_Attn" },
-  { 0x00fd0f, "3270_CursorBlink" },
-  { 0x00fd10, "3270_AltCursor" },
-  { 0x00fd11, "3270_KeyClick" },
-  { 0x00fd12, "3270_Jump" },
-  { 0x00fd13, "3270_Ident" },
-  { 0x00fd14, "3270_Rule" },
-  { 0x00fd15, "3270_Copy" },
-  { 0x00fd16, "3270_Play" },
-  { 0x00fd17, "3270_Setup" },
-  { 0x00fd18, "3270_Record" },
-  { 0x00fd19, "3270_ChangeScreen" },
-  { 0x00fd1a, "3270_DeleteWord" },
-  { 0x00fd1b, "3270_ExSelect" },
-  { 0x00fd1c, "3270_CursorSelect" },
-  { 0x00fd1d, "3270_PrintScreen" },
-  { 0x00fd1e, "3270_Enter" },
-  { 0x00fe01, "ISO_Lock" },
-  { 0x00fe02, "ISO_Level2_Latch" },
-  { 0x00fe03, "ISO_Level3_Shift" },
-  { 0x00fe04, "ISO_Level3_Latch" },
-  { 0x00fe05, "ISO_Level3_Lock" },
-  { 0x00fe06, "ISO_Group_Latch" },
-  { 0x00fe07, "ISO_Group_Lock" },
-  { 0x00fe08, "ISO_Next_Group" },
-  { 0x00fe09, "ISO_Next_Group_Lock" },
-  { 0x00fe0a, "ISO_Prev_Group" },
-  { 0x00fe0b, "ISO_Prev_Group_Lock" },
-  { 0x00fe0c, "ISO_First_Group" },
-  { 0x00fe0d, "ISO_First_Group_Lock" },
-  { 0x00fe0e, "ISO_Last_Group" },
-  { 0x00fe0f, "ISO_Last_Group_Lock" },
-  { 0x00fe20, "ISO_Left_Tab" },
-  { 0x00fe21, "ISO_Move_Line_Up" },
-  { 0x00fe22, "ISO_Move_Line_Down" },
-  { 0x00fe23, "ISO_Partial_Line_Up" },
-  { 0x00fe24, "ISO_Partial_Line_Down" },
-  { 0x00fe25, "ISO_Partial_Space_Left" },
-  { 0x00fe26, "ISO_Partial_Space_Right" },
-  { 0x00fe27, "ISO_Set_Margin_Left" },
-  { 0x00fe28, "ISO_Set_Margin_Right" },
-  { 0x00fe29, "ISO_Release_Margin_Left" },
-  { 0x00fe2a, "ISO_Release_Margin_Right" },
-  { 0x00fe2b, "ISO_Release_Both_Margins" },
-  { 0x00fe2c, "ISO_Fast_Cursor_Left" },
-  { 0x00fe2d, "ISO_Fast_Cursor_Right" },
-  { 0x00fe2e, "ISO_Fast_Cursor_Up" },
-  { 0x00fe2f, "ISO_Fast_Cursor_Down" },
-  { 0x00fe30, "ISO_Continuous_Underline" },
-  { 0x00fe31, "ISO_Discontinuous_Underline" },
-  { 0x00fe32, "ISO_Emphasize" },
-  { 0x00fe33, "ISO_Center_Object" },
-  { 0x00fe34, "ISO_Enter" },
-  { 0x00fe50, "dead_grave" },
-  { 0x00fe51, "dead_acute" },
-  { 0x00fe52, "dead_circumflex" },
-  { 0x00fe53, "dead_tilde" },
-  { 0x00fe54, "dead_macron" },
-  { 0x00fe55, "dead_breve" },
-  { 0x00fe56, "dead_abovedot" },
-  { 0x00fe57, "dead_diaeresis" },
-  { 0x00fe58, "dead_abovering" },
-  { 0x00fe59, "dead_doubleacute" },
-  { 0x00fe5a, "dead_caron" },
-  { 0x00fe5b, "dead_cedilla" },
-  { 0x00fe5c, "dead_ogonek" },
-  { 0x00fe5d, "dead_iota" },
-  { 0x00fe5e, "dead_voiced_sound" },
-  { 0x00fe5f, "dead_semivoiced_sound" },
-  { 0x00fe60, "dead_belowdot" },
-  { 0x00fe61, "dead_hook" },
-  { 0x00fe62, "dead_horn" },
-  { 0x00fe70, "AccessX_Enable" },
-  { 0x00fe71, "AccessX_Feedback_Enable" },
-  { 0x00fe72, "RepeatKeys_Enable" },
-  { 0x00fe73, "SlowKeys_Enable" },
-  { 0x00fe74, "BounceKeys_Enable" },
-  { 0x00fe75, "StickyKeys_Enable" },
-  { 0x00fe76, "MouseKeys_Enable" },
-  { 0x00fe77, "MouseKeys_Accel_Enable" },
-  { 0x00fe78, "Overlay1_Enable" },
-  { 0x00fe79, "Overlay2_Enable" },
-  { 0x00fe7a, "AudibleBell_Enable" },
-  { 0x00fed0, "First_Virtual_Screen" },
-  { 0x00fed1, "Prev_Virtual_Screen" },
-  { 0x00fed2, "Next_Virtual_Screen" },
-  { 0x00fed4, "Last_Virtual_Screen" },
-  { 0x00fed5, "Terminate_Server" },
-  { 0x00fee0, "Pointer_Left" },
-  { 0x00fee1, "Pointer_Right" },
-  { 0x00fee2, "Pointer_Up" },
-  { 0x00fee3, "Pointer_Down" },
-  { 0x00fee4, "Pointer_UpLeft" },
-  { 0x00fee5, "Pointer_UpRight" },
-  { 0x00fee6, "Pointer_DownLeft" },
-  { 0x00fee7, "Pointer_DownRight" },
-  { 0x00fee8, "Pointer_Button_Dflt" },
-  { 0x00fee9, "Pointer_Button1" },
-  { 0x00feea, "Pointer_Button2" },
-  { 0x00feeb, "Pointer_Button3" },
-  { 0x00feec, "Pointer_Button4" },
-  { 0x00feed, "Pointer_Button5" },
-  { 0x00feee, "Pointer_DblClick_Dflt" },
-  { 0x00feef, "Pointer_DblClick1" },
-  { 0x00fef0, "Pointer_DblClick2" },
-  { 0x00fef1, "Pointer_DblClick3" },
-  { 0x00fef2, "Pointer_DblClick4" },
-  { 0x00fef3, "Pointer_DblClick5" },
-  { 0x00fef4, "Pointer_Drag_Dflt" },
-  { 0x00fef5, "Pointer_Drag1" },
-  { 0x00fef6, "Pointer_Drag2" },
-  { 0x00fef7, "Pointer_Drag3" },
-  { 0x00fef8, "Pointer_Drag4" },
-  { 0x00fef9, "Pointer_EnableKeys" },
-  { 0x00fefa, "Pointer_Accelerate" },
-  { 0x00fefb, "Pointer_DfltBtnNext" },
-  { 0x00fefc, "Pointer_DfltBtnPrev" },
-  { 0x00fefd, "Pointer_Drag5" },
-  { 0x00ff08, "BackSpace" },
-  { 0x00ff09, "Tab" },
-  { 0x00ff0a, "Linefeed" },
-  { 0x00ff0b, "Clear" },
-  { 0x00ff0d, "Return" },
-  { 0x00ff13, "Pause" },
-  { 0x00ff14, "Scroll_Lock" },
-  { 0x00ff15, "Sys_Req" },
-  { 0x00ff1b, "Escape" },
-  { 0x00ff20, "Multi_key" },
-  { 0x00ff21, "Kanji" },
-  { 0x00ff22, "Muhenkan" },
-  { 0x00ff23, "Henkan" },
-  { 0x00ff23, "Henkan_Mode" },
-  { 0x00ff24, "Romaji" },
-  { 0x00ff25, "Hiragana" },
-  { 0x00ff26, "Katakana" },
-  { 0x00ff27, "Hiragana_Katakana" },
-  { 0x00ff28, "Zenkaku" },
-  { 0x00ff29, "Hankaku" },
-  { 0x00ff2a, "Zenkaku_Hankaku" },
-  { 0x00ff2b, "Touroku" },
-  { 0x00ff2c, "Massyo" },
-  { 0x00ff2d, "Kana_Lock" },
-  { 0x00ff2e, "Kana_Shift" },
-  { 0x00ff2f, "Eisu_Shift" },
-  { 0x00ff30, "Eisu_toggle" },
-  { 0x00ff31, "Hangul" },
-  { 0x00ff32, "Hangul_Start" },
-  { 0x00ff33, "Hangul_End" },
-  { 0x00ff34, "Hangul_Hanja" },
-  { 0x00ff35, "Hangul_Jamo" },
-  { 0x00ff36, "Hangul_Romaja" },
-  { 0x00ff37, "Codeinput" },
-  { 0x00ff38, "Hangul_Jeonja" },
-  { 0x00ff39, "Hangul_Banja" },
-  { 0x00ff3a, "Hangul_PreHanja" },
-  { 0x00ff3b, "Hangul_PostHanja" },
-  { 0x00ff3c, "SingleCandidate" },
-  { 0x00ff3d, "MultipleCandidate" },
-  { 0x00ff3e, "PreviousCandidate" },
-  { 0x00ff3f, "Hangul_Special" },
-  { 0x00ff50, "Home" },
-  { 0x00ff51, "Left" },
-  { 0x00ff52, "Up" },
-  { 0x00ff53, "Right" },
-  { 0x00ff54, "Down" },
-  { 0x00ff55, "Page_Up" },
-  { 0x00ff55, "Prior" },
-  { 0x00ff56, "Page_Down" },
-  { 0x00ff56, "Next" },
-  { 0x00ff57, "End" },
-  { 0x00ff58, "Begin" },
-  { 0x00ff60, "Select" },
-  { 0x00ff61, "Print" },
-  { 0x00ff62, "Execute" },
-  { 0x00ff63, "Insert" },
-  { 0x00ff65, "Undo" },
-  { 0x00ff66, "Redo" },
-  { 0x00ff67, "Menu" },
-  { 0x00ff68, "Find" },
-  { 0x00ff69, "Cancel" },
-  { 0x00ff6a, "Help" },
-  { 0x00ff6b, "Break" },
-  { 0x00ff7e, "Arabic_switch" },
-  { 0x00ff7e, "Greek_switch" },
-  { 0x00ff7e, "Hangul_switch" },
-  { 0x00ff7e, "Hebrew_switch" },
-  { 0x00ff7e, "ISO_Group_Shift" },
-  { 0x00ff7e, "Mode_switch" },
-  { 0x00ff7e, "kana_switch" },
-  { 0x00ff7e, "script_switch" },
-  { 0x00ff7f, "Num_Lock" },
-  { 0x00ff80, "KP_Space" },
-  { 0x00ff89, "KP_Tab" },
-  { 0x00ff8d, "KP_Enter" },
-  { 0x00ff91, "KP_F1" },
-  { 0x00ff92, "KP_F2" },
-  { 0x00ff93, "KP_F3" },
-  { 0x00ff94, "KP_F4" },
-  { 0x00ff95, "KP_Home" },
-  { 0x00ff96, "KP_Left" },
-  { 0x00ff97, "KP_Up" },
-  { 0x00ff98, "KP_Right" },
-  { 0x00ff99, "KP_Down" },
-  { 0x00ff9a, "KP_Page_Up" },
-  { 0x00ff9a, "KP_Prior" },
-  { 0x00ff9b, "KP_Page_Down" },
-  { 0x00ff9b, "KP_Next" },
-  { 0x00ff9c, "KP_End" },
-  { 0x00ff9d, "KP_Begin" },
-  { 0x00ff9e, "KP_Insert" },
-  { 0x00ff9f, "KP_Delete" },
-  { 0x00ffaa, "KP_Multiply" },
-  { 0x00ffab, "KP_Add" },
-  { 0x00ffac, "KP_Separator" },
-  { 0x00ffad, "KP_Subtract" },
-  { 0x00ffae, "KP_Decimal" },
-  { 0x00ffaf, "KP_Divide" },
-  { 0x00ffb0, "KP_0" },
-  { 0x00ffb1, "KP_1" },
-  { 0x00ffb2, "KP_2" },
-  { 0x00ffb3, "KP_3" },
-  { 0x00ffb4, "KP_4" },
-  { 0x00ffb5, "KP_5" },
-  { 0x00ffb6, "KP_6" },
-  { 0x00ffb7, "KP_7" },
-  { 0x00ffb8, "KP_8" },
-  { 0x00ffb9, "KP_9" },
-  { 0x00ffbd, "KP_Equal" },
-  { 0x00ffbe, "F1" },
-  { 0x00ffbf, "F2" },
-  { 0x00ffc0, "F3" },
-  { 0x00ffc1, "F4" },
-  { 0x00ffc2, "F5" },
-  { 0x00ffc3, "F6" },
-  { 0x00ffc4, "F7" },
-  { 0x00ffc5, "F8" },
-  { 0x00ffc6, "F9" },
-  { 0x00ffc7, "F10" },
-  { 0x00ffc8, "F11" },
-  { 0x00ffc9, "F12" },
-  { 0x00ffca, "F13" },
-  { 0x00ffcb, "F14" },
-  { 0x00ffcc, "F15" },
-  { 0x00ffcd, "F16" },
-  { 0x00ffce, "F17" },
-  { 0x00ffcf, "F18" },
-  { 0x00ffd0, "F19" },
-  { 0x00ffd1, "F20" },
-  { 0x00ffd2, "F21" },
-  { 0x00ffd3, "F22" },
-  { 0x00ffd4, "F23" },
-  { 0x00ffd5, "F24" },
-  { 0x00ffd6, "F25" },
-  { 0x00ffd7, "F26" },
-  { 0x00ffd8, "F27" },
-  { 0x00ffd9, "F28" },
-  { 0x00ffda, "F29" },
-  { 0x00ffdb, "F30" },
-  { 0x00ffdc, "F31" },
-  { 0x00ffdd, "F32" },
-  { 0x00ffde, "F33" },
-  { 0x00ffdf, "F34" },
-  { 0x00ffe0, "F35" },
-  { 0x00ffe1, "Shift_L" },
-  { 0x00ffe2, "Shift_R" },
-  { 0x00ffe3, "Control_L" },
-  { 0x00ffe4, "Control_R" },
-  { 0x00ffe5, "Caps_Lock" },
-  { 0x00ffe6, "Shift_Lock" },
-  { 0x00ffe7, "Meta_L" },
-  { 0x00ffe8, "Meta_R" },
-  { 0x00ffe9, "Alt_L" },
-  { 0x00ffea, "Alt_R" },
-  { 0x00ffeb, "Super_L" },
-  { 0x00ffec, "Super_R" },
-  { 0x00ffed, "Hyper_L" },
-  { 0x00ffee, "Hyper_R" },
-  { 0x00ffff, "Delete" },
-  { 0xffffff, "VoidSymbol" },
-};
+#include "keyname-table.h"
 
 #define GDK_NUM_KEYS (sizeof (gdk_keys_by_keyval) / sizeof (gdk_keys_by_keyval[0]))
 
-static struct gdk_key *gdk_keys_by_name = NULL;
-
 static int
 gdk_keys_keyval_compare (const void *pkey, const void *pbase)
 {
@@ -1380,7 +68,7 @@ gdk_keyval_name (guint keyval)
              ((found - 1)->keyval == keyval))
         found--;
            
-      return (gchar *) found->name;
+      return (gchar *) (keynames + found->offset);
     }
   else if (keyval != 0)
     {
@@ -1391,16 +79,11 @@ gdk_keyval_name (guint keyval)
   return NULL;
 }
 
-static int 
-gdk_key_compare_by_name (const void *a, const void *b)
-{
-  return strcmp (((const struct gdk_key *) a)->name, ((const struct gdk_key *) b)->name);
-}
-
 static int
 gdk_keys_name_compare (const void *pkey, const void *pbase)
 {
-  return strcmp ((const char *) pkey, ((const struct gdk_key *) pbase)->name);
+  return strcmp ((const char *) pkey, 
+                (const char *) (keynames + ((const struct gdk_key *) pbase)->offset));
 }
 
 guint
@@ -1410,17 +93,6 @@ gdk_keyval_from_name (const gchar *keyval_name)
 
   g_return_val_if_fail (keyval_name != NULL, 0);
   
-  if (gdk_keys_by_name == NULL)
-    {
-      gdk_keys_by_name = g_new (struct gdk_key, GDK_NUM_KEYS);
-
-      memcpy (gdk_keys_by_name, gdk_keys_by_keyval,
-             GDK_NUM_KEYS * sizeof (struct gdk_key));
-
-      qsort (gdk_keys_by_name, GDK_NUM_KEYS, sizeof (struct gdk_key),
-            gdk_key_compare_by_name);
-    }
-
   found = bsearch (keyval_name, gdk_keys_by_name,
                   GDK_NUM_KEYS, sizeof (struct gdk_key),
                   gdk_keys_name_compare);
diff --git a/gdk/gen-keyname-table.pl b/gdk/gen-keyname-table.pl
new file mode 100755 (executable)
index 0000000..9a85f3a
--- /dev/null
@@ -0,0 +1,92 @@
+#!/usr/bin/perl -w
+
+if (@ARGV != 1) {
+    die "Usage: gen-keyname-table.pl keynames.txt > keyname-table.h\n";
+}
+
+open IN, $ARGV[0] || die "Cannot open $ARGV[0]: $!\n";
+
+@keys = ();
+while (defined($_ = <IN>)) {
+    next if /^!/;
+    if (!/^\s*(0x[0-9a-f]+)\s+(.*\S)\s+$/) {
+       die "Cannot parse line $_";
+    }
+
+    push @keys, [$1, $2];
+}
+
+$offset = 0;
+
+$date = gmtime;
+
+print <<EOT;
+/* keyname-table.h: Generated by gen-keyname-table.pl from keynames.txt
+ *
+ *  Date: $date
+ *
+ * Do not edit.   
+ */
+static const char keynames[] =
+EOT
+
+for $key (@keys) {
+    $name = $key->[1];
+
+    if ($offset != 0) {
+       print qq(\n);
+    }
+    print qq(  "$name\\0");
+
+    $key->[3] = $offset;
+    $offset += length($name) + 1;
+}
+
+print ";\n\n";
+
+print <<EOT;
+typedef struct {
+    guint  keyval;
+    guint  offset;
+} gdk_key;
+
+static const gdk_key gdk_keys_by_keyval[] = {
+EOT
+
+$i = 0;
+for $key (@keys) {
+    $keyval = $key->[0];
+    $name = $key->[1];
+    $offset = $key->[3];
+
+    if ($i != 0) {
+       print ",\n";
+    }
+    print "  { $keyval, $offset }";
+    $i++;
+}
+
+print "\n};\n\n";
+
+@keys = sort { $a->[1] cmp $b->[1] } @keys;
+
+
+print <<EOT;
+static const gdk_key gdk_keys_by_name[] = {
+EOT
+
+$i = 0;
+for $key (@keys) {
+    $keyval = $key->[0];
+    $name = $key->[1];
+    $offset = $key->[3];
+
+    if ($i != 0) {
+       print ",\n";
+    }
+    print "  { $keyval, $offset }";
+    $i++;
+}
+
+print "\n};\n";
+
diff --git a/gdk/keyname-table.h b/gdk/keyname-table.h
new file mode 100644 (file)
index 0000000..97a92f5
--- /dev/null
@@ -0,0 +1,3936 @@
+/* keyname-table.h: Generated by gen-keyname-table.pl from keynames.txt
+ *
+ *  Date: Tue Mar  8 04:19:59 2005
+ *
+ * Do not edit.   
+ */
+static const char keynames[] =
+  "space\0"
+  "exclam\0"
+  "quotedbl\0"
+  "numbersign\0"
+  "dollar\0"
+  "percent\0"
+  "ampersand\0"
+  "apostrophe\0"
+  "quoteright\0"
+  "parenleft\0"
+  "parenright\0"
+  "asterisk\0"
+  "plus\0"
+  "comma\0"
+  "minus\0"
+  "period\0"
+  "slash\0"
+  "0\0"
+  "1\0"
+  "2\0"
+  "3\0"
+  "4\0"
+  "5\0"
+  "6\0"
+  "7\0"
+  "8\0"
+  "9\0"
+  "colon\0"
+  "semicolon\0"
+  "less\0"
+  "equal\0"
+  "greater\0"
+  "question\0"
+  "at\0"
+  "A\0"
+  "B\0"
+  "C\0"
+  "D\0"
+  "E\0"
+  "F\0"
+  "G\0"
+  "H\0"
+  "I\0"
+  "J\0"
+  "K\0"
+  "L\0"
+  "M\0"
+  "N\0"
+  "O\0"
+  "P\0"
+  "Q\0"
+  "R\0"
+  "S\0"
+  "T\0"
+  "U\0"
+  "V\0"
+  "W\0"
+  "X\0"
+  "Y\0"
+  "Z\0"
+  "bracketleft\0"
+  "backslash\0"
+  "bracketright\0"
+  "asciicircum\0"
+  "underscore\0"
+  "grave\0"
+  "quoteleft\0"
+  "a\0"
+  "b\0"
+  "c\0"
+  "d\0"
+  "e\0"
+  "f\0"
+  "g\0"
+  "h\0"
+  "i\0"
+  "j\0"
+  "k\0"
+  "l\0"
+  "m\0"
+  "n\0"
+  "o\0"
+  "p\0"
+  "q\0"
+  "r\0"
+  "s\0"
+  "t\0"
+  "u\0"
+  "v\0"
+  "w\0"
+  "x\0"
+  "y\0"
+  "z\0"
+  "braceleft\0"
+  "bar\0"
+  "braceright\0"
+  "asciitilde\0"
+  "nobreakspace\0"
+  "exclamdown\0"
+  "cent\0"
+  "sterling\0"
+  "currency\0"
+  "yen\0"
+  "brokenbar\0"
+  "section\0"
+  "diaeresis\0"
+  "copyright\0"
+  "ordfeminine\0"
+  "guillemotleft\0"
+  "notsign\0"
+  "hyphen\0"
+  "registered\0"
+  "macron\0"
+  "degree\0"
+  "plusminus\0"
+  "twosuperior\0"
+  "threesuperior\0"
+  "acute\0"
+  "mu\0"
+  "paragraph\0"
+  "periodcentered\0"
+  "cedilla\0"
+  "onesuperior\0"
+  "masculine\0"
+  "guillemotright\0"
+  "onequarter\0"
+  "onehalf\0"
+  "threequarters\0"
+  "questiondown\0"
+  "Agrave\0"
+  "Aacute\0"
+  "Acircumflex\0"
+  "Atilde\0"
+  "Adiaeresis\0"
+  "Aring\0"
+  "AE\0"
+  "Ccedilla\0"
+  "Egrave\0"
+  "Eacute\0"
+  "Ecircumflex\0"
+  "Ediaeresis\0"
+  "Igrave\0"
+  "Iacute\0"
+  "Icircumflex\0"
+  "Idiaeresis\0"
+  "ETH\0"
+  "Eth\0"
+  "Ntilde\0"
+  "Ograve\0"
+  "Oacute\0"
+  "Ocircumflex\0"
+  "Otilde\0"
+  "Odiaeresis\0"
+  "multiply\0"
+  "Ooblique\0"
+  "Ugrave\0"
+  "Uacute\0"
+  "Ucircumflex\0"
+  "Udiaeresis\0"
+  "Yacute\0"
+  "THORN\0"
+  "Thorn\0"
+  "ssharp\0"
+  "agrave\0"
+  "aacute\0"
+  "acircumflex\0"
+  "atilde\0"
+  "adiaeresis\0"
+  "aring\0"
+  "ae\0"
+  "ccedilla\0"
+  "egrave\0"
+  "eacute\0"
+  "ecircumflex\0"
+  "ediaeresis\0"
+  "igrave\0"
+  "iacute\0"
+  "icircumflex\0"
+  "idiaeresis\0"
+  "eth\0"
+  "ntilde\0"
+  "ograve\0"
+  "oacute\0"
+  "ocircumflex\0"
+  "otilde\0"
+  "odiaeresis\0"
+  "division\0"
+  "oslash\0"
+  "ugrave\0"
+  "uacute\0"
+  "ucircumflex\0"
+  "udiaeresis\0"
+  "yacute\0"
+  "thorn\0"
+  "ydiaeresis\0"
+  "Aogonek\0"
+  "breve\0"
+  "Lstroke\0"
+  "Lcaron\0"
+  "Sacute\0"
+  "Scaron\0"
+  "Scedilla\0"
+  "Tcaron\0"
+  "Zacute\0"
+  "Zcaron\0"
+  "Zabovedot\0"
+  "aogonek\0"
+  "ogonek\0"
+  "lstroke\0"
+  "lcaron\0"
+  "sacute\0"
+  "caron\0"
+  "scaron\0"
+  "scedilla\0"
+  "tcaron\0"
+  "zacute\0"
+  "doubleacute\0"
+  "zcaron\0"
+  "zabovedot\0"
+  "Racute\0"
+  "Abreve\0"
+  "Lacute\0"
+  "Cacute\0"
+  "Ccaron\0"
+  "Eogonek\0"
+  "Ecaron\0"
+  "Dcaron\0"
+  "Dstroke\0"
+  "Nacute\0"
+  "Ncaron\0"
+  "Odoubleacute\0"
+  "Rcaron\0"
+  "Uring\0"
+  "Udoubleacute\0"
+  "Tcedilla\0"
+  "racute\0"
+  "abreve\0"
+  "lacute\0"
+  "cacute\0"
+  "ccaron\0"
+  "eogonek\0"
+  "ecaron\0"
+  "dcaron\0"
+  "dstroke\0"
+  "nacute\0"
+  "ncaron\0"
+  "odoubleacute\0"
+  "rcaron\0"
+  "uring\0"
+  "udoubleacute\0"
+  "tcedilla\0"
+  "abovedot\0"
+  "Hstroke\0"
+  "Hcircumflex\0"
+  "Iabovedot\0"
+  "Gbreve\0"
+  "Jcircumflex\0"
+  "hstroke\0"
+  "hcircumflex\0"
+  "idotless\0"
+  "gbreve\0"
+  "jcircumflex\0"
+  "Cabovedot\0"
+  "Ccircumflex\0"
+  "Gabovedot\0"
+  "Gcircumflex\0"
+  "Ubreve\0"
+  "Scircumflex\0"
+  "cabovedot\0"
+  "ccircumflex\0"
+  "gabovedot\0"
+  "gcircumflex\0"
+  "ubreve\0"
+  "scircumflex\0"
+  "kappa\0"
+  "kra\0"
+  "Rcedilla\0"
+  "Itilde\0"
+  "Lcedilla\0"
+  "Emacron\0"
+  "Gcedilla\0"
+  "Tslash\0"
+  "rcedilla\0"
+  "itilde\0"
+  "lcedilla\0"
+  "emacron\0"
+  "gcedilla\0"
+  "tslash\0"
+  "ENG\0"
+  "eng\0"
+  "Amacron\0"
+  "Iogonek\0"
+  "Eabovedot\0"
+  "Imacron\0"
+  "Ncedilla\0"
+  "Omacron\0"
+  "Kcedilla\0"
+  "Uogonek\0"
+  "Utilde\0"
+  "Umacron\0"
+  "amacron\0"
+  "iogonek\0"
+  "eabovedot\0"
+  "imacron\0"
+  "ncedilla\0"
+  "omacron\0"
+  "kcedilla\0"
+  "uogonek\0"
+  "utilde\0"
+  "umacron\0"
+  "overline\0"
+  "kana_fullstop\0"
+  "kana_openingbracket\0"
+  "kana_closingbracket\0"
+  "kana_comma\0"
+  "kana_conjunctive\0"
+  "kana_middledot\0"
+  "kana_WO\0"
+  "kana_a\0"
+  "kana_i\0"
+  "kana_u\0"
+  "kana_e\0"
+  "kana_o\0"
+  "kana_ya\0"
+  "kana_yu\0"
+  "kana_yo\0"
+  "kana_tsu\0"
+  "kana_tu\0"
+  "prolongedsound\0"
+  "kana_A\0"
+  "kana_I\0"
+  "kana_U\0"
+  "kana_E\0"
+  "kana_O\0"
+  "kana_KA\0"
+  "kana_KI\0"
+  "kana_KU\0"
+  "kana_KE\0"
+  "kana_KO\0"
+  "kana_SA\0"
+  "kana_SHI\0"
+  "kana_SU\0"
+  "kana_SE\0"
+  "kana_SO\0"
+  "kana_TA\0"
+  "kana_CHI\0"
+  "kana_TI\0"
+  "kana_TSU\0"
+  "kana_TU\0"
+  "kana_TE\0"
+  "kana_TO\0"
+  "kana_NA\0"
+  "kana_NI\0"
+  "kana_NU\0"
+  "kana_NE\0"
+  "kana_NO\0"
+  "kana_HA\0"
+  "kana_HI\0"
+  "kana_FU\0"
+  "kana_HU\0"
+  "kana_HE\0"
+  "kana_HO\0"
+  "kana_MA\0"
+  "kana_MI\0"
+  "kana_MU\0"
+  "kana_ME\0"
+  "kana_MO\0"
+  "kana_YA\0"
+  "kana_YU\0"
+  "kana_YO\0"
+  "kana_RA\0"
+  "kana_RI\0"
+  "kana_RU\0"
+  "kana_RE\0"
+  "kana_RO\0"
+  "kana_WA\0"
+  "kana_N\0"
+  "voicedsound\0"
+  "semivoicedsound\0"
+  "Arabic_comma\0"
+  "Arabic_semicolon\0"
+  "Arabic_question_mark\0"
+  "Arabic_hamza\0"
+  "Arabic_maddaonalef\0"
+  "Arabic_hamzaonalef\0"
+  "Arabic_hamzaonwaw\0"
+  "Arabic_hamzaunderalef\0"
+  "Arabic_hamzaonyeh\0"
+  "Arabic_alef\0"
+  "Arabic_beh\0"
+  "Arabic_tehmarbuta\0"
+  "Arabic_teh\0"
+  "Arabic_theh\0"
+  "Arabic_jeem\0"
+  "Arabic_hah\0"
+  "Arabic_khah\0"
+  "Arabic_dal\0"
+  "Arabic_thal\0"
+  "Arabic_ra\0"
+  "Arabic_zain\0"
+  "Arabic_seen\0"
+  "Arabic_sheen\0"
+  "Arabic_sad\0"
+  "Arabic_dad\0"
+  "Arabic_tah\0"
+  "Arabic_zah\0"
+  "Arabic_ain\0"
+  "Arabic_ghain\0"
+  "Arabic_tatweel\0"
+  "Arabic_feh\0"
+  "Arabic_qaf\0"
+  "Arabic_kaf\0"
+  "Arabic_lam\0"
+  "Arabic_meem\0"
+  "Arabic_noon\0"
+  "Arabic_ha\0"
+  "Arabic_heh\0"
+  "Arabic_waw\0"
+  "Arabic_alefmaksura\0"
+  "Arabic_yeh\0"
+  "Arabic_fathatan\0"
+  "Arabic_dammatan\0"
+  "Arabic_kasratan\0"
+  "Arabic_fatha\0"
+  "Arabic_damma\0"
+  "Arabic_kasra\0"
+  "Arabic_shadda\0"
+  "Arabic_sukun\0"
+  "Serbian_dje\0"
+  "Macedonia_gje\0"
+  "Cyrillic_io\0"
+  "Ukrainian_ie\0"
+  "Ukranian_je\0"
+  "Macedonia_dse\0"
+  "Ukrainian_i\0"
+  "Ukranian_i\0"
+  "Ukrainian_yi\0"
+  "Ukranian_yi\0"
+  "Cyrillic_je\0"
+  "Serbian_je\0"
+  "Cyrillic_lje\0"
+  "Serbian_lje\0"
+  "Cyrillic_nje\0"
+  "Serbian_nje\0"
+  "Serbian_tshe\0"
+  "Macedonia_kje\0"
+  "Byelorussian_shortu\0"
+  "Cyrillic_dzhe\0"
+  "Serbian_dze\0"
+  "numerosign\0"
+  "Serbian_DJE\0"
+  "Macedonia_GJE\0"
+  "Cyrillic_IO\0"
+  "Ukrainian_IE\0"
+  "Ukranian_JE\0"
+  "Macedonia_DSE\0"
+  "Ukrainian_I\0"
+  "Ukranian_I\0"
+  "Ukrainian_YI\0"
+  "Ukranian_YI\0"
+  "Cyrillic_JE\0"
+  "Serbian_JE\0"
+  "Cyrillic_LJE\0"
+  "Serbian_LJE\0"
+  "Cyrillic_NJE\0"
+  "Serbian_NJE\0"
+  "Serbian_TSHE\0"
+  "Macedonia_KJE\0"
+  "Byelorussian_SHORTU\0"
+  "Cyrillic_DZHE\0"
+  "Serbian_DZE\0"
+  "Cyrillic_yu\0"
+  "Cyrillic_a\0"
+  "Cyrillic_be\0"
+  "Cyrillic_tse\0"
+  "Cyrillic_de\0"
+  "Cyrillic_ie\0"
+  "Cyrillic_ef\0"
+  "Cyrillic_ghe\0"
+  "Cyrillic_ha\0"
+  "Cyrillic_i\0"
+  "Cyrillic_shorti\0"
+  "Cyrillic_ka\0"
+  "Cyrillic_el\0"
+  "Cyrillic_em\0"
+  "Cyrillic_en\0"
+  "Cyrillic_o\0"
+  "Cyrillic_pe\0"
+  "Cyrillic_ya\0"
+  "Cyrillic_er\0"
+  "Cyrillic_es\0"
+  "Cyrillic_te\0"
+  "Cyrillic_u\0"
+  "Cyrillic_zhe\0"
+  "Cyrillic_ve\0"
+  "Cyrillic_softsign\0"
+  "Cyrillic_yeru\0"
+  "Cyrillic_ze\0"
+  "Cyrillic_sha\0"
+  "Cyrillic_e\0"
+  "Cyrillic_shcha\0"
+  "Cyrillic_che\0"
+  "Cyrillic_hardsign\0"
+  "Cyrillic_YU\0"
+  "Cyrillic_A\0"
+  "Cyrillic_BE\0"
+  "Cyrillic_TSE\0"
+  "Cyrillic_DE\0"
+  "Cyrillic_IE\0"
+  "Cyrillic_EF\0"
+  "Cyrillic_GHE\0"
+  "Cyrillic_HA\0"
+  "Cyrillic_I\0"
+  "Cyrillic_SHORTI\0"
+  "Cyrillic_KA\0"
+  "Cyrillic_EL\0"
+  "Cyrillic_EM\0"
+  "Cyrillic_EN\0"
+  "Cyrillic_O\0"
+  "Cyrillic_PE\0"
+  "Cyrillic_YA\0"
+  "Cyrillic_ER\0"
+  "Cyrillic_ES\0"
+  "Cyrillic_TE\0"
+  "Cyrillic_U\0"
+  "Cyrillic_ZHE\0"
+  "Cyrillic_VE\0"
+  "Cyrillic_SOFTSIGN\0"
+  "Cyrillic_YERU\0"
+  "Cyrillic_ZE\0"
+  "Cyrillic_SHA\0"
+  "Cyrillic_E\0"
+  "Cyrillic_SHCHA\0"
+  "Cyrillic_CHE\0"
+  "Cyrillic_HARDSIGN\0"
+  "Greek_ALPHAaccent\0"
+  "Greek_EPSILONaccent\0"
+  "Greek_ETAaccent\0"
+  "Greek_IOTAaccent\0"
+  "Greek_IOTAdieresis\0"
+  "Greek_IOTAdiaeresis\0"
+  "Greek_OMICRONaccent\0"
+  "Greek_UPSILONaccent\0"
+  "Greek_UPSILONdieresis\0"
+  "Greek_OMEGAaccent\0"
+  "Greek_accentdieresis\0"
+  "Greek_horizbar\0"
+  "Greek_alphaaccent\0"
+  "Greek_epsilonaccent\0"
+  "Greek_etaaccent\0"
+  "Greek_iotaaccent\0"
+  "Greek_iotadieresis\0"
+  "Greek_iotaaccentdieresis\0"
+  "Greek_omicronaccent\0"
+  "Greek_upsilonaccent\0"
+  "Greek_upsilondieresis\0"
+  "Greek_upsilonaccentdieresis\0"
+  "Greek_omegaaccent\0"
+  "Greek_ALPHA\0"
+  "Greek_BETA\0"
+  "Greek_GAMMA\0"
+  "Greek_DELTA\0"
+  "Greek_EPSILON\0"
+  "Greek_ZETA\0"
+  "Greek_ETA\0"
+  "Greek_THETA\0"
+  "Greek_IOTA\0"
+  "Greek_KAPPA\0"
+  "Greek_LAMBDA\0"
+  "Greek_LAMDA\0"
+  "Greek_MU\0"
+  "Greek_NU\0"
+  "Greek_XI\0"
+  "Greek_OMICRON\0"
+  "Greek_PI\0"
+  "Greek_RHO\0"
+  "Greek_SIGMA\0"
+  "Greek_TAU\0"
+  "Greek_UPSILON\0"
+  "Greek_PHI\0"
+  "Greek_CHI\0"
+  "Greek_PSI\0"
+  "Greek_OMEGA\0"
+  "Greek_alpha\0"
+  "Greek_beta\0"
+  "Greek_gamma\0"
+  "Greek_delta\0"
+  "Greek_epsilon\0"
+  "Greek_zeta\0"
+  "Greek_eta\0"
+  "Greek_theta\0"
+  "Greek_iota\0"
+  "Greek_kappa\0"
+  "Greek_lambda\0"
+  "Greek_lamda\0"
+  "Greek_mu\0"
+  "Greek_nu\0"
+  "Greek_xi\0"
+  "Greek_omicron\0"
+  "Greek_pi\0"
+  "Greek_rho\0"
+  "Greek_sigma\0"
+  "Greek_finalsmallsigma\0"
+  "Greek_tau\0"
+  "Greek_upsilon\0"
+  "Greek_phi\0"
+  "Greek_chi\0"
+  "Greek_psi\0"
+  "Greek_omega\0"
+  "leftradical\0"
+  "topleftradical\0"
+  "horizconnector\0"
+  "topintegral\0"
+  "botintegral\0"
+  "vertconnector\0"
+  "topleftsqbracket\0"
+  "botleftsqbracket\0"
+  "toprightsqbracket\0"
+  "botrightsqbracket\0"
+  "topleftparens\0"
+  "botleftparens\0"
+  "toprightparens\0"
+  "botrightparens\0"
+  "leftmiddlecurlybrace\0"
+  "rightmiddlecurlybrace\0"
+  "topleftsummation\0"
+  "botleftsummation\0"
+  "topvertsummationconnector\0"
+  "botvertsummationconnector\0"
+  "toprightsummation\0"
+  "botrightsummation\0"
+  "rightmiddlesummation\0"
+  "lessthanequal\0"
+  "notequal\0"
+  "greaterthanequal\0"
+  "integral\0"
+  "therefore\0"
+  "variation\0"
+  "infinity\0"
+  "nabla\0"
+  "approximate\0"
+  "similarequal\0"
+  "ifonlyif\0"
+  "implies\0"
+  "identical\0"
+  "radical\0"
+  "includedin\0"
+  "includes\0"
+  "intersection\0"
+  "union\0"
+  "logicaland\0"
+  "logicalor\0"
+  "partialderivative\0"
+  "function\0"
+  "leftarrow\0"
+  "uparrow\0"
+  "rightarrow\0"
+  "downarrow\0"
+  "blank\0"
+  "soliddiamond\0"
+  "checkerboard\0"
+  "ht\0"
+  "ff\0"
+  "cr\0"
+  "lf\0"
+  "nl\0"
+  "vt\0"
+  "lowrightcorner\0"
+  "uprightcorner\0"
+  "upleftcorner\0"
+  "lowleftcorner\0"
+  "crossinglines\0"
+  "horizlinescan1\0"
+  "horizlinescan3\0"
+  "horizlinescan5\0"
+  "horizlinescan7\0"
+  "horizlinescan9\0"
+  "leftt\0"
+  "rightt\0"
+  "bott\0"
+  "topt\0"
+  "vertbar\0"
+  "emspace\0"
+  "enspace\0"
+  "em3space\0"
+  "em4space\0"
+  "digitspace\0"
+  "punctspace\0"
+  "thinspace\0"
+  "hairspace\0"
+  "emdash\0"
+  "endash\0"
+  "signifblank\0"
+  "ellipsis\0"
+  "doubbaselinedot\0"
+  "onethird\0"
+  "twothirds\0"
+  "onefifth\0"
+  "twofifths\0"
+  "threefifths\0"
+  "fourfifths\0"
+  "onesixth\0"
+  "fivesixths\0"
+  "careof\0"
+  "figdash\0"
+  "leftanglebracket\0"
+  "decimalpoint\0"
+  "rightanglebracket\0"
+  "marker\0"
+  "oneeighth\0"
+  "threeeighths\0"
+  "fiveeighths\0"
+  "seveneighths\0"
+  "trademark\0"
+  "signaturemark\0"
+  "trademarkincircle\0"
+  "leftopentriangle\0"
+  "rightopentriangle\0"
+  "emopencircle\0"
+  "emopenrectangle\0"
+  "leftsinglequotemark\0"
+  "rightsinglequotemark\0"
+  "leftdoublequotemark\0"
+  "rightdoublequotemark\0"
+  "prescription\0"
+  "minutes\0"
+  "seconds\0"
+  "latincross\0"
+  "hexagram\0"
+  "filledrectbullet\0"
+  "filledlefttribullet\0"
+  "filledrighttribullet\0"
+  "emfilledcircle\0"
+  "emfilledrect\0"
+  "enopencircbullet\0"
+  "enopensquarebullet\0"
+  "openrectbullet\0"
+  "opentribulletup\0"
+  "opentribulletdown\0"
+  "openstar\0"
+  "enfilledcircbullet\0"
+  "enfilledsqbullet\0"
+  "filledtribulletup\0"
+  "filledtribulletdown\0"
+  "leftpointer\0"
+  "rightpointer\0"
+  "club\0"
+  "diamond\0"
+  "heart\0"
+  "maltesecross\0"
+  "dagger\0"
+  "doubledagger\0"
+  "checkmark\0"
+  "ballotcross\0"
+  "musicalsharp\0"
+  "musicalflat\0"
+  "malesymbol\0"
+  "femalesymbol\0"
+  "telephone\0"
+  "telephonerecorder\0"
+  "phonographcopyright\0"
+  "caret\0"
+  "singlelowquotemark\0"
+  "doublelowquotemark\0"
+  "cursor\0"
+  "leftcaret\0"
+  "rightcaret\0"
+  "downcaret\0"
+  "upcaret\0"
+  "overbar\0"
+  "downtack\0"
+  "upshoe\0"
+  "downstile\0"
+  "underbar\0"
+  "jot\0"
+  "quad\0"
+  "uptack\0"
+  "circle\0"
+  "upstile\0"
+  "downshoe\0"
+  "rightshoe\0"
+  "leftshoe\0"
+  "lefttack\0"
+  "righttack\0"
+  "hebrew_doublelowline\0"
+  "hebrew_aleph\0"
+  "hebrew_bet\0"
+  "hebrew_beth\0"
+  "hebrew_gimel\0"
+  "hebrew_gimmel\0"
+  "hebrew_dalet\0"
+  "hebrew_daleth\0"
+  "hebrew_he\0"
+  "hebrew_waw\0"
+  "hebrew_zain\0"
+  "hebrew_zayin\0"
+  "hebrew_chet\0"
+  "hebrew_het\0"
+  "hebrew_tet\0"
+  "hebrew_teth\0"
+  "hebrew_yod\0"
+  "hebrew_finalkaph\0"
+  "hebrew_kaph\0"
+  "hebrew_lamed\0"
+  "hebrew_finalmem\0"
+  "hebrew_mem\0"
+  "hebrew_finalnun\0"
+  "hebrew_nun\0"
+  "hebrew_samech\0"
+  "hebrew_samekh\0"
+  "hebrew_ayin\0"
+  "hebrew_finalpe\0"
+  "hebrew_pe\0"
+  "hebrew_finalzade\0"
+  "hebrew_finalzadi\0"
+  "hebrew_zade\0"
+  "hebrew_zadi\0"
+  "hebrew_kuf\0"
+  "hebrew_qoph\0"
+  "hebrew_resh\0"
+  "hebrew_shin\0"
+  "hebrew_taf\0"
+  "hebrew_taw\0"
+  "Thai_kokai\0"
+  "Thai_khokhai\0"
+  "Thai_khokhuat\0"
+  "Thai_khokhwai\0"
+  "Thai_khokhon\0"
+  "Thai_khorakhang\0"
+  "Thai_ngongu\0"
+  "Thai_chochan\0"
+  "Thai_choching\0"
+  "Thai_chochang\0"
+  "Thai_soso\0"
+  "Thai_chochoe\0"
+  "Thai_yoying\0"
+  "Thai_dochada\0"
+  "Thai_topatak\0"
+  "Thai_thothan\0"
+  "Thai_thonangmontho\0"
+  "Thai_thophuthao\0"
+  "Thai_nonen\0"
+  "Thai_dodek\0"
+  "Thai_totao\0"
+  "Thai_thothung\0"
+  "Thai_thothahan\0"
+  "Thai_thothong\0"
+  "Thai_nonu\0"
+  "Thai_bobaimai\0"
+  "Thai_popla\0"
+  "Thai_phophung\0"
+  "Thai_fofa\0"
+  "Thai_phophan\0"
+  "Thai_fofan\0"
+  "Thai_phosamphao\0"
+  "Thai_moma\0"
+  "Thai_yoyak\0"
+  "Thai_rorua\0"
+  "Thai_ru\0"
+  "Thai_loling\0"
+  "Thai_lu\0"
+  "Thai_wowaen\0"
+  "Thai_sosala\0"
+  "Thai_sorusi\0"
+  "Thai_sosua\0"
+  "Thai_hohip\0"
+  "Thai_lochula\0"
+  "Thai_oang\0"
+  "Thai_honokhuk\0"
+  "Thai_paiyannoi\0"
+  "Thai_saraa\0"
+  "Thai_maihanakat\0"
+  "Thai_saraaa\0"
+  "Thai_saraam\0"
+  "Thai_sarai\0"
+  "Thai_saraii\0"
+  "Thai_saraue\0"
+  "Thai_sarauee\0"
+  "Thai_sarau\0"
+  "Thai_sarauu\0"
+  "Thai_phinthu\0"
+  "Thai_maihanakat_maitho\0"
+  "Thai_baht\0"
+  "Thai_sarae\0"
+  "Thai_saraae\0"
+  "Thai_sarao\0"
+  "Thai_saraaimaimuan\0"
+  "Thai_saraaimaimalai\0"
+  "Thai_lakkhangyao\0"
+  "Thai_maiyamok\0"
+  "Thai_maitaikhu\0"
+  "Thai_maiek\0"
+  "Thai_maitho\0"
+  "Thai_maitri\0"
+  "Thai_maichattawa\0"
+  "Thai_thanthakhat\0"
+  "Thai_nikhahit\0"
+  "Thai_leksun\0"
+  "Thai_leknung\0"
+  "Thai_leksong\0"
+  "Thai_leksam\0"
+  "Thai_leksi\0"
+  "Thai_lekha\0"
+  "Thai_lekhok\0"
+  "Thai_lekchet\0"
+  "Thai_lekpaet\0"
+  "Thai_lekkao\0"
+  "Hangul_Kiyeog\0"
+  "Hangul_SsangKiyeog\0"
+  "Hangul_KiyeogSios\0"
+  "Hangul_Nieun\0"
+  "Hangul_NieunJieuj\0"
+  "Hangul_NieunHieuh\0"
+  "Hangul_Dikeud\0"
+  "Hangul_SsangDikeud\0"
+  "Hangul_Rieul\0"
+  "Hangul_RieulKiyeog\0"
+  "Hangul_RieulMieum\0"
+  "Hangul_RieulPieub\0"
+  "Hangul_RieulSios\0"
+  "Hangul_RieulTieut\0"
+  "Hangul_RieulPhieuf\0"
+  "Hangul_RieulHieuh\0"
+  "Hangul_Mieum\0"
+  "Hangul_Pieub\0"
+  "Hangul_SsangPieub\0"
+  "Hangul_PieubSios\0"
+  "Hangul_Sios\0"
+  "Hangul_SsangSios\0"
+  "Hangul_Ieung\0"
+  "Hangul_Jieuj\0"
+  "Hangul_SsangJieuj\0"
+  "Hangul_Cieuc\0"
+  "Hangul_Khieuq\0"
+  "Hangul_Tieut\0"
+  "Hangul_Phieuf\0"
+  "Hangul_Hieuh\0"
+  "Hangul_A\0"
+  "Hangul_AE\0"
+  "Hangul_YA\0"
+  "Hangul_YAE\0"
+  "Hangul_EO\0"
+  "Hangul_E\0"
+  "Hangul_YEO\0"
+  "Hangul_YE\0"
+  "Hangul_O\0"
+  "Hangul_WA\0"
+  "Hangul_WAE\0"
+  "Hangul_OE\0"
+  "Hangul_YO\0"
+  "Hangul_U\0"
+  "Hangul_WEO\0"
+  "Hangul_WE\0"
+  "Hangul_WI\0"
+  "Hangul_YU\0"
+  "Hangul_EU\0"
+  "Hangul_YI\0"
+  "Hangul_I\0"
+  "Hangul_J_Kiyeog\0"
+  "Hangul_J_SsangKiyeog\0"
+  "Hangul_J_KiyeogSios\0"
+  "Hangul_J_Nieun\0"
+  "Hangul_J_NieunJieuj\0"
+  "Hangul_J_NieunHieuh\0"
+  "Hangul_J_Dikeud\0"
+  "Hangul_J_Rieul\0"
+  "Hangul_J_RieulKiyeog\0"
+  "Hangul_J_RieulMieum\0"
+  "Hangul_J_RieulPieub\0"
+  "Hangul_J_RieulSios\0"
+  "Hangul_J_RieulTieut\0"
+  "Hangul_J_RieulPhieuf\0"
+  "Hangul_J_RieulHieuh\0"
+  "Hangul_J_Mieum\0"
+  "Hangul_J_Pieub\0"
+  "Hangul_J_PieubSios\0"
+  "Hangul_J_Sios\0"
+  "Hangul_J_SsangSios\0"
+  "Hangul_J_Ieung\0"
+  "Hangul_J_Jieuj\0"
+  "Hangul_J_Cieuc\0"
+  "Hangul_J_Khieuq\0"
+  "Hangul_J_Tieut\0"
+  "Hangul_J_Phieuf\0"
+  "Hangul_J_Hieuh\0"
+  "Hangul_RieulYeorinHieuh\0"
+  "Hangul_SunkyeongeumMieum\0"
+  "Hangul_SunkyeongeumPieub\0"
+  "Hangul_PanSios\0"
+  "Hangul_KkogjiDalrinIeung\0"
+  "Hangul_SunkyeongeumPhieuf\0"
+  "Hangul_YeorinHieuh\0"
+  "Hangul_AraeA\0"
+  "Hangul_AraeAE\0"
+  "Hangul_J_PanSios\0"
+  "Hangul_J_KkogjiDalrinIeung\0"
+  "Hangul_J_YeorinHieuh\0"
+  "Korean_Won\0"
+  "OE\0"
+  "oe\0"
+  "Ydiaeresis\0"
+  "EcuSign\0"
+  "ColonSign\0"
+  "CruzeiroSign\0"
+  "FFrancSign\0"
+  "LiraSign\0"
+  "MillSign\0"
+  "NairaSign\0"
+  "PesetaSign\0"
+  "RupeeSign\0"
+  "WonSign\0"
+  "NewSheqelSign\0"
+  "DongSign\0"
+  "EuroSign\0"
+  "3270_Duplicate\0"
+  "3270_FieldMark\0"
+  "3270_Right2\0"
+  "3270_Left2\0"
+  "3270_BackTab\0"
+  "3270_EraseEOF\0"
+  "3270_EraseInput\0"
+  "3270_Reset\0"
+  "3270_Quit\0"
+  "3270_PA1\0"
+  "3270_PA2\0"
+  "3270_PA3\0"
+  "3270_Test\0"
+  "3270_Attn\0"
+  "3270_CursorBlink\0"
+  "3270_AltCursor\0"
+  "3270_KeyClick\0"
+  "3270_Jump\0"
+  "3270_Ident\0"
+  "3270_Rule\0"
+  "3270_Copy\0"
+  "3270_Play\0"
+  "3270_Setup\0"
+  "3270_Record\0"
+  "3270_ChangeScreen\0"
+  "3270_DeleteWord\0"
+  "3270_ExSelect\0"
+  "3270_CursorSelect\0"
+  "3270_PrintScreen\0"
+  "3270_Enter\0"
+  "ISO_Lock\0"
+  "ISO_Level2_Latch\0"
+  "ISO_Level3_Shift\0"
+  "ISO_Level3_Latch\0"
+  "ISO_Level3_Lock\0"
+  "ISO_Group_Latch\0"
+  "ISO_Group_Lock\0"
+  "ISO_Next_Group\0"
+  "ISO_Next_Group_Lock\0"
+  "ISO_Prev_Group\0"
+  "ISO_Prev_Group_Lock\0"
+  "ISO_First_Group\0"
+  "ISO_First_Group_Lock\0"
+  "ISO_Last_Group\0"
+  "ISO_Last_Group_Lock\0"
+  "ISO_Left_Tab\0"
+  "ISO_Move_Line_Up\0"
+  "ISO_Move_Line_Down\0"
+  "ISO_Partial_Line_Up\0"
+  "ISO_Partial_Line_Down\0"
+  "ISO_Partial_Space_Left\0"
+  "ISO_Partial_Space_Right\0"
+  "ISO_Set_Margin_Left\0"
+  "ISO_Set_Margin_Right\0"
+  "ISO_Release_Margin_Left\0"
+  "ISO_Release_Margin_Right\0"
+  "ISO_Release_Both_Margins\0"
+  "ISO_Fast_Cursor_Left\0"
+  "ISO_Fast_Cursor_Right\0"
+  "ISO_Fast_Cursor_Up\0"
+  "ISO_Fast_Cursor_Down\0"
+  "ISO_Continuous_Underline\0"
+  "ISO_Discontinuous_Underline\0"
+  "ISO_Emphasize\0"
+  "ISO_Center_Object\0"
+  "ISO_Enter\0"
+  "dead_grave\0"
+  "dead_acute\0"
+  "dead_circumflex\0"
+  "dead_tilde\0"
+  "dead_macron\0"
+  "dead_breve\0"
+  "dead_abovedot\0"
+  "dead_diaeresis\0"
+  "dead_abovering\0"
+  "dead_doubleacute\0"
+  "dead_caron\0"
+  "dead_cedilla\0"
+  "dead_ogonek\0"
+  "dead_iota\0"
+  "dead_voiced_sound\0"
+  "dead_semivoiced_sound\0"
+  "dead_belowdot\0"
+  "dead_hook\0"
+  "dead_horn\0"
+  "AccessX_Enable\0"
+  "AccessX_Feedback_Enable\0"
+  "RepeatKeys_Enable\0"
+  "SlowKeys_Enable\0"
+  "BounceKeys_Enable\0"
+  "StickyKeys_Enable\0"
+  "MouseKeys_Enable\0"
+  "MouseKeys_Accel_Enable\0"
+  "Overlay1_Enable\0"
+  "Overlay2_Enable\0"
+  "AudibleBell_Enable\0"
+  "First_Virtual_Screen\0"
+  "Prev_Virtual_Screen\0"
+  "Next_Virtual_Screen\0"
+  "Last_Virtual_Screen\0"
+  "Terminate_Server\0"
+  "Pointer_Left\0"
+  "Pointer_Right\0"
+  "Pointer_Up\0"
+  "Pointer_Down\0"
+  "Pointer_UpLeft\0"
+  "Pointer_UpRight\0"
+  "Pointer_DownLeft\0"
+  "Pointer_DownRight\0"
+  "Pointer_Button_Dflt\0"
+  "Pointer_Button1\0"
+  "Pointer_Button2\0"
+  "Pointer_Button3\0"
+  "Pointer_Button4\0"
+  "Pointer_Button5\0"
+  "Pointer_DblClick_Dflt\0"
+  "Pointer_DblClick1\0"
+  "Pointer_DblClick2\0"
+  "Pointer_DblClick3\0"
+  "Pointer_DblClick4\0"
+  "Pointer_DblClick5\0"
+  "Pointer_Drag_Dflt\0"
+  "Pointer_Drag1\0"
+  "Pointer_Drag2\0"
+  "Pointer_Drag3\0"
+  "Pointer_Drag4\0"
+  "Pointer_EnableKeys\0"
+  "Pointer_Accelerate\0"
+  "Pointer_DfltBtnNext\0"
+  "Pointer_DfltBtnPrev\0"
+  "Pointer_Drag5\0"
+  "BackSpace\0"
+  "Tab\0"
+  "Linefeed\0"
+  "Clear\0"
+  "Return\0"
+  "Pause\0"
+  "Scroll_Lock\0"
+  "Sys_Req\0"
+  "Escape\0"
+  "Multi_key\0"
+  "Kanji\0"
+  "Muhenkan\0"
+  "Henkan\0"
+  "Henkan_Mode\0"
+  "Romaji\0"
+  "Hiragana\0"
+  "Katakana\0"
+  "Hiragana_Katakana\0"
+  "Zenkaku\0"
+  "Hankaku\0"
+  "Zenkaku_Hankaku\0"
+  "Touroku\0"
+  "Massyo\0"
+  "Kana_Lock\0"
+  "Kana_Shift\0"
+  "Eisu_Shift\0"
+  "Eisu_toggle\0"
+  "Hangul\0"
+  "Hangul_Start\0"
+  "Hangul_End\0"
+  "Hangul_Hanja\0"
+  "Hangul_Jamo\0"
+  "Hangul_Romaja\0"
+  "Codeinput\0"
+  "Hangul_Jeonja\0"
+  "Hangul_Banja\0"
+  "Hangul_PreHanja\0"
+  "Hangul_PostHanja\0"
+  "SingleCandidate\0"
+  "MultipleCandidate\0"
+  "PreviousCandidate\0"
+  "Hangul_Special\0"
+  "Home\0"
+  "Left\0"
+  "Up\0"
+  "Right\0"
+  "Down\0"
+  "Page_Up\0"
+  "Prior\0"
+  "Page_Down\0"
+  "Next\0"
+  "End\0"
+  "Begin\0"
+  "Select\0"
+  "Print\0"
+  "Execute\0"
+  "Insert\0"
+  "Undo\0"
+  "Redo\0"
+  "Menu\0"
+  "Find\0"
+  "Cancel\0"
+  "Help\0"
+  "Break\0"
+  "Arabic_switch\0"
+  "Greek_switch\0"
+  "Hangul_switch\0"
+  "Hebrew_switch\0"
+  "ISO_Group_Shift\0"
+  "Mode_switch\0"
+  "kana_switch\0"
+  "script_switch\0"
+  "Num_Lock\0"
+  "KP_Space\0"
+  "KP_Tab\0"
+  "KP_Enter\0"
+  "KP_F1\0"
+  "KP_F2\0"
+  "KP_F3\0"
+  "KP_F4\0"
+  "KP_Home\0"
+  "KP_Left\0"
+  "KP_Up\0"
+  "KP_Right\0"
+  "KP_Down\0"
+  "KP_Page_Up\0"
+  "KP_Prior\0"
+  "KP_Page_Down\0"
+  "KP_Next\0"
+  "KP_End\0"
+  "KP_Begin\0"
+  "KP_Insert\0"
+  "KP_Delete\0"
+  "KP_Multiply\0"
+  "KP_Add\0"
+  "KP_Separator\0"
+  "KP_Subtract\0"
+  "KP_Decimal\0"
+  "KP_Divide\0"
+  "KP_0\0"
+  "KP_1\0"
+  "KP_2\0"
+  "KP_3\0"
+  "KP_4\0"
+  "KP_5\0"
+  "KP_6\0"
+  "KP_7\0"
+  "KP_8\0"
+  "KP_9\0"
+  "KP_Equal\0"
+  "F1\0"
+  "F2\0"
+  "F3\0"
+  "F4\0"
+  "F5\0"
+  "F6\0"
+  "F7\0"
+  "F8\0"
+  "F9\0"
+  "F10\0"
+  "F11\0"
+  "F12\0"
+  "F13\0"
+  "F14\0"
+  "F15\0"
+  "F16\0"
+  "F17\0"
+  "F18\0"
+  "F19\0"
+  "F20\0"
+  "F21\0"
+  "F22\0"
+  "F23\0"
+  "F24\0"
+  "F25\0"
+  "F26\0"
+  "F27\0"
+  "F28\0"
+  "F29\0"
+  "F30\0"
+  "F31\0"
+  "F32\0"
+  "F33\0"
+  "F34\0"
+  "F35\0"
+  "Shift_L\0"
+  "Shift_R\0"
+  "Control_L\0"
+  "Control_R\0"
+  "Caps_Lock\0"
+  "Shift_Lock\0"
+  "Meta_L\0"
+  "Meta_R\0"
+  "Alt_L\0"
+  "Alt_R\0"
+  "Super_L\0"
+  "Super_R\0"
+  "Hyper_L\0"
+  "Hyper_R\0"
+  "Delete\0"
+  "VoidSymbol\0";
+
+typedef struct {
+    guint  keyval;
+    guint  offset;
+} gdk_key;
+
+static const gdk_key gdk_keys_by_keyval[] = {
+  { 0x000020, 0 },
+  { 0x000021, 6 },
+  { 0x000022, 13 },
+  { 0x000023, 22 },
+  { 0x000024, 33 },
+  { 0x000025, 40 },
+  { 0x000026, 48 },
+  { 0x000027, 58 },
+  { 0x000027, 69 },
+  { 0x000028, 80 },
+  { 0x000029, 90 },
+  { 0x00002a, 101 },
+  { 0x00002b, 110 },
+  { 0x00002c, 115 },
+  { 0x00002d, 121 },
+  { 0x00002e, 127 },
+  { 0x00002f, 134 },
+  { 0x000030, 140 },
+  { 0x000031, 142 },
+  { 0x000032, 144 },
+  { 0x000033, 146 },
+  { 0x000034, 148 },
+  { 0x000035, 150 },
+  { 0x000036, 152 },
+  { 0x000037, 154 },
+  { 0x000038, 156 },
+  { 0x000039, 158 },
+  { 0x00003a, 160 },
+  { 0x00003b, 166 },
+  { 0x00003c, 176 },
+  { 0x00003d, 181 },
+  { 0x00003e, 187 },
+  { 0x00003f, 195 },
+  { 0x000040, 204 },
+  { 0x000041, 207 },
+  { 0x000042, 209 },
+  { 0x000043, 211 },
+  { 0x000044, 213 },
+  { 0x000045, 215 },
+  { 0x000046, 217 },
+  { 0x000047, 219 },
+  { 0x000048, 221 },
+  { 0x000049, 223 },
+  { 0x00004a, 225 },
+  { 0x00004b, 227 },
+  { 0x00004c, 229 },
+  { 0x00004d, 231 },
+  { 0x00004e, 233 },
+  { 0x00004f, 235 },
+  { 0x000050, 237 },
+  { 0x000051, 239 },
+  { 0x000052, 241 },
+  { 0x000053, 243 },
+  { 0x000054, 245 },
+  { 0x000055, 247 },
+  { 0x000056, 249 },
+  { 0x000057, 251 },
+  { 0x000058, 253 },
+  { 0x000059, 255 },
+  { 0x00005a, 257 },
+  { 0x00005b, 259 },
+  { 0x00005c, 271 },
+  { 0x00005d, 281 },
+  { 0x00005e, 294 },
+  { 0x00005f, 306 },
+  { 0x000060, 317 },
+  { 0x000060, 323 },
+  { 0x000061, 333 },
+  { 0x000062, 335 },
+  { 0x000063, 337 },
+  { 0x000064, 339 },
+  { 0x000065, 341 },
+  { 0x000066, 343 },
+  { 0x000067, 345 },
+  { 0x000068, 347 },
+  { 0x000069, 349 },
+  { 0x00006a, 351 },
+  { 0x00006b, 353 },
+  { 0x00006c, 355 },
+  { 0x00006d, 357 },
+  { 0x00006e, 359 },
+  { 0x00006f, 361 },
+  { 0x000070, 363 },
+  { 0x000071, 365 },
+  { 0x000072, 367 },
+  { 0x000073, 369 },
+  { 0x000074, 371 },
+  { 0x000075, 373 },
+  { 0x000076, 375 },
+  { 0x000077, 377 },
+  { 0x000078, 379 },
+  { 0x000079, 381 },
+  { 0x00007a, 383 },
+  { 0x00007b, 385 },
+  { 0x00007c, 395 },
+  { 0x00007d, 399 },
+  { 0x00007e, 410 },
+  { 0x0000a0, 421 },
+  { 0x0000a1, 434 },
+  { 0x0000a2, 445 },
+  { 0x0000a3, 450 },
+  { 0x0000a4, 459 },
+  { 0x0000a5, 468 },
+  { 0x0000a6, 472 },
+  { 0x0000a7, 482 },
+  { 0x0000a8, 490 },
+  { 0x0000a9, 500 },
+  { 0x0000aa, 510 },
+  { 0x0000ab, 522 },
+  { 0x0000ac, 536 },
+  { 0x0000ad, 544 },
+  { 0x0000ae, 551 },
+  { 0x0000af, 562 },
+  { 0x0000b0, 569 },
+  { 0x0000b1, 576 },
+  { 0x0000b2, 586 },
+  { 0x0000b3, 598 },
+  { 0x0000b4, 612 },
+  { 0x0000b5, 618 },
+  { 0x0000b6, 621 },
+  { 0x0000b7, 631 },
+  { 0x0000b8, 646 },
+  { 0x0000b9, 654 },
+  { 0x0000ba, 666 },
+  { 0x0000bb, 676 },
+  { 0x0000bc, 691 },
+  { 0x0000bd, 702 },
+  { 0x0000be, 710 },
+  { 0x0000bf, 724 },
+  { 0x0000c0, 737 },
+  { 0x0000c1, 744 },
+  { 0x0000c2, 751 },
+  { 0x0000c3, 763 },
+  { 0x0000c4, 770 },
+  { 0x0000c5, 781 },
+  { 0x0000c6, 787 },
+  { 0x0000c7, 790 },
+  { 0x0000c8, 799 },
+  { 0x0000c9, 806 },
+  { 0x0000ca, 813 },
+  { 0x0000cb, 825 },
+  { 0x0000cc, 836 },
+  { 0x0000cd, 843 },
+  { 0x0000ce, 850 },
+  { 0x0000cf, 862 },
+  { 0x0000d0, 873 },
+  { 0x0000d0, 877 },
+  { 0x0000d1, 881 },
+  { 0x0000d2, 888 },
+  { 0x0000d3, 895 },
+  { 0x0000d4, 902 },
+  { 0x0000d5, 914 },
+  { 0x0000d6, 921 },
+  { 0x0000d7, 932 },
+  { 0x0000d8, 941 },
+  { 0x0000d9, 950 },
+  { 0x0000da, 957 },
+  { 0x0000db, 964 },
+  { 0x0000dc, 976 },
+  { 0x0000dd, 987 },
+  { 0x0000de, 994 },
+  { 0x0000de, 1000 },
+  { 0x0000df, 1006 },
+  { 0x0000e0, 1013 },
+  { 0x0000e1, 1020 },
+  { 0x0000e2, 1027 },
+  { 0x0000e3, 1039 },
+  { 0x0000e4, 1046 },
+  { 0x0000e5, 1057 },
+  { 0x0000e6, 1063 },
+  { 0x0000e7, 1066 },
+  { 0x0000e8, 1075 },
+  { 0x0000e9, 1082 },
+  { 0x0000ea, 1089 },
+  { 0x0000eb, 1101 },
+  { 0x0000ec, 1112 },
+  { 0x0000ed, 1119 },
+  { 0x0000ee, 1126 },
+  { 0x0000ef, 1138 },
+  { 0x0000f0, 1149 },
+  { 0x0000f1, 1153 },
+  { 0x0000f2, 1160 },
+  { 0x0000f3, 1167 },
+  { 0x0000f4, 1174 },
+  { 0x0000f5, 1186 },
+  { 0x0000f6, 1193 },
+  { 0x0000f7, 1204 },
+  { 0x0000f8, 1213 },
+  { 0x0000f9, 1220 },
+  { 0x0000fa, 1227 },
+  { 0x0000fb, 1234 },
+  { 0x0000fc, 1246 },
+  { 0x0000fd, 1257 },
+  { 0x0000fe, 1264 },
+  { 0x0000ff, 1270 },
+  { 0x0001a1, 1281 },
+  { 0x0001a2, 1289 },
+  { 0x0001a3, 1295 },
+  { 0x0001a5, 1303 },
+  { 0x0001a6, 1310 },
+  { 0x0001a9, 1317 },
+  { 0x0001aa, 1324 },
+  { 0x0001ab, 1333 },
+  { 0x0001ac, 1340 },
+  { 0x0001ae, 1347 },
+  { 0x0001af, 1354 },
+  { 0x0001b1, 1364 },
+  { 0x0001b2, 1372 },
+  { 0x0001b3, 1379 },
+  { 0x0001b5, 1387 },
+  { 0x0001b6, 1394 },
+  { 0x0001b7, 1401 },
+  { 0x0001b9, 1407 },
+  { 0x0001ba, 1414 },
+  { 0x0001bb, 1423 },
+  { 0x0001bc, 1430 },
+  { 0x0001bd, 1437 },
+  { 0x0001be, 1449 },
+  { 0x0001bf, 1456 },
+  { 0x0001c0, 1466 },
+  { 0x0001c3, 1473 },
+  { 0x0001c5, 1480 },
+  { 0x0001c6, 1487 },
+  { 0x0001c8, 1494 },
+  { 0x0001ca, 1501 },
+  { 0x0001cc, 1509 },
+  { 0x0001cf, 1516 },
+  { 0x0001d0, 1523 },
+  { 0x0001d1, 1531 },
+  { 0x0001d2, 1538 },
+  { 0x0001d5, 1545 },
+  { 0x0001d8, 1558 },
+  { 0x0001d9, 1565 },
+  { 0x0001db, 1571 },
+  { 0x0001de, 1584 },
+  { 0x0001e0, 1593 },
+  { 0x0001e3, 1600 },
+  { 0x0001e5, 1607 },
+  { 0x0001e6, 1614 },
+  { 0x0001e8, 1621 },
+  { 0x0001ea, 1628 },
+  { 0x0001ec, 1636 },
+  { 0x0001ef, 1643 },
+  { 0x0001f0, 1650 },
+  { 0x0001f1, 1658 },
+  { 0x0001f2, 1665 },
+  { 0x0001f5, 1672 },
+  { 0x0001f8, 1685 },
+  { 0x0001f9, 1692 },
+  { 0x0001fb, 1698 },
+  { 0x0001fe, 1711 },
+  { 0x0001ff, 1720 },
+  { 0x0002a1, 1729 },
+  { 0x0002a6, 1737 },
+  { 0x0002a9, 1749 },
+  { 0x0002ab, 1759 },
+  { 0x0002ac, 1766 },
+  { 0x0002b1, 1778 },
+  { 0x0002b6, 1786 },
+  { 0x0002b9, 1798 },
+  { 0x0002bb, 1807 },
+  { 0x0002bc, 1814 },
+  { 0x0002c5, 1826 },
+  { 0x0002c6, 1836 },
+  { 0x0002d5, 1848 },
+  { 0x0002d8, 1858 },
+  { 0x0002dd, 1870 },
+  { 0x0002de, 1877 },
+  { 0x0002e5, 1889 },
+  { 0x0002e6, 1899 },
+  { 0x0002f5, 1911 },
+  { 0x0002f8, 1921 },
+  { 0x0002fd, 1933 },
+  { 0x0002fe, 1940 },
+  { 0x0003a2, 1952 },
+  { 0x0003a2, 1958 },
+  { 0x0003a3, 1962 },
+  { 0x0003a5, 1971 },
+  { 0x0003a6, 1978 },
+  { 0x0003aa, 1987 },
+  { 0x0003ab, 1995 },
+  { 0x0003ac, 2004 },
+  { 0x0003b3, 2011 },
+  { 0x0003b5, 2020 },
+  { 0x0003b6, 2027 },
+  { 0x0003ba, 2036 },
+  { 0x0003bb, 2044 },
+  { 0x0003bc, 2053 },
+  { 0x0003bd, 2060 },
+  { 0x0003bf, 2064 },
+  { 0x0003c0, 2068 },
+  { 0x0003c7, 2076 },
+  { 0x0003cc, 2084 },
+  { 0x0003cf, 2094 },
+  { 0x0003d1, 2102 },
+  { 0x0003d2, 2111 },
+  { 0x0003d3, 2119 },
+  { 0x0003d9, 2128 },
+  { 0x0003dd, 2136 },
+  { 0x0003de, 2143 },
+  { 0x0003e0, 2151 },
+  { 0x0003e7, 2159 },
+  { 0x0003ec, 2167 },
+  { 0x0003ef, 2177 },
+  { 0x0003f1, 2185 },
+  { 0x0003f2, 2194 },
+  { 0x0003f3, 2202 },
+  { 0x0003f9, 2211 },
+  { 0x0003fd, 2219 },
+  { 0x0003fe, 2226 },
+  { 0x00047e, 2234 },
+  { 0x0004a1, 2243 },
+  { 0x0004a2, 2257 },
+  { 0x0004a3, 2277 },
+  { 0x0004a4, 2297 },
+  { 0x0004a5, 2308 },
+  { 0x0004a5, 2325 },
+  { 0x0004a6, 2340 },
+  { 0x0004a7, 2348 },
+  { 0x0004a8, 2355 },
+  { 0x0004a9, 2362 },
+  { 0x0004aa, 2369 },
+  { 0x0004ab, 2376 },
+  { 0x0004ac, 2383 },
+  { 0x0004ad, 2391 },
+  { 0x0004ae, 2399 },
+  { 0x0004af, 2407 },
+  { 0x0004af, 2416 },
+  { 0x0004b0, 2424 },
+  { 0x0004b1, 2439 },
+  { 0x0004b2, 2446 },
+  { 0x0004b3, 2453 },
+  { 0x0004b4, 2460 },
+  { 0x0004b5, 2467 },
+  { 0x0004b6, 2474 },
+  { 0x0004b7, 2482 },
+  { 0x0004b8, 2490 },
+  { 0x0004b9, 2498 },
+  { 0x0004ba, 2506 },
+  { 0x0004bb, 2514 },
+  { 0x0004bc, 2522 },
+  { 0x0004bd, 2531 },
+  { 0x0004be, 2539 },
+  { 0x0004bf, 2547 },
+  { 0x0004c0, 2555 },
+  { 0x0004c1, 2563 },
+  { 0x0004c1, 2572 },
+  { 0x0004c2, 2580 },
+  { 0x0004c2, 2589 },
+  { 0x0004c3, 2597 },
+  { 0x0004c4, 2605 },
+  { 0x0004c5, 2613 },
+  { 0x0004c6, 2621 },
+  { 0x0004c7, 2629 },
+  { 0x0004c8, 2637 },
+  { 0x0004c9, 2645 },
+  { 0x0004ca, 2653 },
+  { 0x0004cb, 2661 },
+  { 0x0004cc, 2669 },
+  { 0x0004cc, 2677 },
+  { 0x0004cd, 2685 },
+  { 0x0004ce, 2693 },
+  { 0x0004cf, 2701 },
+  { 0x0004d0, 2709 },
+  { 0x0004d1, 2717 },
+  { 0x0004d2, 2725 },
+  { 0x0004d3, 2733 },
+  { 0x0004d4, 2741 },
+  { 0x0004d5, 2749 },
+  { 0x0004d6, 2757 },
+  { 0x0004d7, 2765 },
+  { 0x0004d8, 2773 },
+  { 0x0004d9, 2781 },
+  { 0x0004da, 2789 },
+  { 0x0004db, 2797 },
+  { 0x0004dc, 2805 },
+  { 0x0004dd, 2813 },
+  { 0x0004de, 2820 },
+  { 0x0004df, 2832 },
+  { 0x0005ac, 2848 },
+  { 0x0005bb, 2861 },
+  { 0x0005bf, 2878 },
+  { 0x0005c1, 2899 },
+  { 0x0005c2, 2912 },
+  { 0x0005c3, 2931 },
+  { 0x0005c4, 2950 },
+  { 0x0005c5, 2968 },
+  { 0x0005c6, 2990 },
+  { 0x0005c7, 3008 },
+  { 0x0005c8, 3020 },
+  { 0x0005c9, 3031 },
+  { 0x0005ca, 3049 },
+  { 0x0005cb, 3060 },
+  { 0x0005cc, 3072 },
+  { 0x0005cd, 3084 },
+  { 0x0005ce, 3095 },
+  { 0x0005cf, 3107 },
+  { 0x0005d0, 3118 },
+  { 0x0005d1, 3130 },
+  { 0x0005d2, 3140 },
+  { 0x0005d3, 3152 },
+  { 0x0005d4, 3164 },
+  { 0x0005d5, 3177 },
+  { 0x0005d6, 3188 },
+  { 0x0005d7, 3199 },
+  { 0x0005d8, 3210 },
+  { 0x0005d9, 3221 },
+  { 0x0005da, 3232 },
+  { 0x0005e0, 3245 },
+  { 0x0005e1, 3260 },
+  { 0x0005e2, 3271 },
+  { 0x0005e3, 3282 },
+  { 0x0005e4, 3293 },
+  { 0x0005e5, 3304 },
+  { 0x0005e6, 3316 },
+  { 0x0005e7, 3328 },
+  { 0x0005e7, 3338 },
+  { 0x0005e8, 3349 },
+  { 0x0005e9, 3360 },
+  { 0x0005ea, 3379 },
+  { 0x0005eb, 3390 },
+  { 0x0005ec, 3406 },
+  { 0x0005ed, 3422 },
+  { 0x0005ee, 3438 },
+  { 0x0005ef, 3451 },
+  { 0x0005f0, 3464 },
+  { 0x0005f1, 3477 },
+  { 0x0005f2, 3491 },
+  { 0x0006a1, 3504 },
+  { 0x0006a2, 3516 },
+  { 0x0006a3, 3530 },
+  { 0x0006a4, 3542 },
+  { 0x0006a4, 3555 },
+  { 0x0006a5, 3567 },
+  { 0x0006a6, 3581 },
+  { 0x0006a6, 3593 },
+  { 0x0006a7, 3604 },
+  { 0x0006a7, 3617 },
+  { 0x0006a8, 3629 },
+  { 0x0006a8, 3641 },
+  { 0x0006a9, 3652 },
+  { 0x0006a9, 3665 },
+  { 0x0006aa, 3677 },
+  { 0x0006aa, 3690 },
+  { 0x0006ab, 3702 },
+  { 0x0006ac, 3715 },
+  { 0x0006ae, 3729 },
+  { 0x0006af, 3749 },
+  { 0x0006af, 3763 },
+  { 0x0006b0, 3775 },
+  { 0x0006b1, 3786 },
+  { 0x0006b2, 3798 },
+  { 0x0006b3, 3812 },
+  { 0x0006b4, 3824 },
+  { 0x0006b4, 3837 },
+  { 0x0006b5, 3849 },
+  { 0x0006b6, 3863 },
+  { 0x0006b6, 3875 },
+  { 0x0006b7, 3886 },
+  { 0x0006b7, 3899 },
+  { 0x0006b8, 3911 },
+  { 0x0006b8, 3923 },
+  { 0x0006b9, 3934 },
+  { 0x0006b9, 3947 },
+  { 0x0006ba, 3959 },
+  { 0x0006ba, 3972 },
+  { 0x0006bb, 3984 },
+  { 0x0006bc, 3997 },
+  { 0x0006be, 4011 },
+  { 0x0006bf, 4031 },
+  { 0x0006bf, 4045 },
+  { 0x0006c0, 4057 },
+  { 0x0006c1, 4069 },
+  { 0x0006c2, 4080 },
+  { 0x0006c3, 4092 },
+  { 0x0006c4, 4105 },
+  { 0x0006c5, 4117 },
+  { 0x0006c6, 4129 },
+  { 0x0006c7, 4141 },
+  { 0x0006c8, 4154 },
+  { 0x0006c9, 4166 },
+  { 0x0006ca, 4177 },
+  { 0x0006cb, 4193 },
+  { 0x0006cc, 4205 },
+  { 0x0006cd, 4217 },
+  { 0x0006ce, 4229 },
+  { 0x0006cf, 4241 },
+  { 0x0006d0, 4252 },
+  { 0x0006d1, 4264 },
+  { 0x0006d2, 4276 },
+  { 0x0006d3, 4288 },
+  { 0x0006d4, 4300 },
+  { 0x0006d5, 4312 },
+  { 0x0006d6, 4323 },
+  { 0x0006d7, 4336 },
+  { 0x0006d8, 4348 },
+  { 0x0006d9, 4366 },
+  { 0x0006da, 4380 },
+  { 0x0006db, 4392 },
+  { 0x0006dc, 4405 },
+  { 0x0006dd, 4416 },
+  { 0x0006de, 4431 },
+  { 0x0006df, 4444 },
+  { 0x0006e0, 4462 },
+  { 0x0006e1, 4474 },
+  { 0x0006e2, 4485 },
+  { 0x0006e3, 4497 },
+  { 0x0006e4, 4510 },
+  { 0x0006e5, 4522 },
+  { 0x0006e6, 4534 },
+  { 0x0006e7, 4546 },
+  { 0x0006e8, 4559 },
+  { 0x0006e9, 4571 },
+  { 0x0006ea, 4582 },
+  { 0x0006eb, 4598 },
+  { 0x0006ec, 4610 },
+  { 0x0006ed, 4622 },
+  { 0x0006ee, 4634 },
+  { 0x0006ef, 4646 },
+  { 0x0006f0, 4657 },
+  { 0x0006f1, 4669 },
+  { 0x0006f2, 4681 },
+  { 0x0006f3, 4693 },
+  { 0x0006f4, 4705 },
+  { 0x0006f5, 4717 },
+  { 0x0006f6, 4728 },
+  { 0x0006f7, 4741 },
+  { 0x0006f8, 4753 },
+  { 0x0006f9, 4771 },
+  { 0x0006fa, 4785 },
+  { 0x0006fb, 4797 },
+  { 0x0006fc, 4810 },
+  { 0x0006fd, 4821 },
+  { 0x0006fe, 4836 },
+  { 0x0006ff, 4849 },
+  { 0x0007a1, 4867 },
+  { 0x0007a2, 4885 },
+  { 0x0007a3, 4905 },
+  { 0x0007a4, 4921 },
+  { 0x0007a5, 4938 },
+  { 0x0007a5, 4957 },
+  { 0x0007a7, 4977 },
+  { 0x0007a8, 4997 },
+  { 0x0007a9, 5017 },
+  { 0x0007ab, 5039 },
+  { 0x0007ae, 5057 },
+  { 0x0007af, 5078 },
+  { 0x0007b1, 5093 },
+  { 0x0007b2, 5111 },
+  { 0x0007b3, 5131 },
+  { 0x0007b4, 5147 },
+  { 0x0007b5, 5164 },
+  { 0x0007b6, 5183 },
+  { 0x0007b7, 5208 },
+  { 0x0007b8, 5228 },
+  { 0x0007b9, 5248 },
+  { 0x0007ba, 5270 },
+  { 0x0007bb, 5298 },
+  { 0x0007c1, 5316 },
+  { 0x0007c2, 5328 },
+  { 0x0007c3, 5339 },
+  { 0x0007c4, 5351 },
+  { 0x0007c5, 5363 },
+  { 0x0007c6, 5377 },
+  { 0x0007c7, 5388 },
+  { 0x0007c8, 5398 },
+  { 0x0007c9, 5410 },
+  { 0x0007ca, 5421 },
+  { 0x0007cb, 5433 },
+  { 0x0007cb, 5446 },
+  { 0x0007cc, 5458 },
+  { 0x0007cd, 5467 },
+  { 0x0007ce, 5476 },
+  { 0x0007cf, 5485 },
+  { 0x0007d0, 5499 },
+  { 0x0007d1, 5508 },
+  { 0x0007d2, 5518 },
+  { 0x0007d4, 5530 },
+  { 0x0007d5, 5540 },
+  { 0x0007d6, 5554 },
+  { 0x0007d7, 5564 },
+  { 0x0007d8, 5574 },
+  { 0x0007d9, 5584 },
+  { 0x0007e1, 5596 },
+  { 0x0007e2, 5608 },
+  { 0x0007e3, 5619 },
+  { 0x0007e4, 5631 },
+  { 0x0007e5, 5643 },
+  { 0x0007e6, 5657 },
+  { 0x0007e7, 5668 },
+  { 0x0007e8, 5678 },
+  { 0x0007e9, 5690 },
+  { 0x0007ea, 5701 },
+  { 0x0007eb, 5713 },
+  { 0x0007eb, 5726 },
+  { 0x0007ec, 5738 },
+  { 0x0007ed, 5747 },
+  { 0x0007ee, 5756 },
+  { 0x0007ef, 5765 },
+  { 0x0007f0, 5779 },
+  { 0x0007f1, 5788 },
+  { 0x0007f2, 5798 },
+  { 0x0007f3, 5810 },
+  { 0x0007f4, 5832 },
+  { 0x0007f5, 5842 },
+  { 0x0007f6, 5856 },
+  { 0x0007f7, 5866 },
+  { 0x0007f8, 5876 },
+  { 0x0007f9, 5886 },
+  { 0x0008a1, 5898 },
+  { 0x0008a2, 5910 },
+  { 0x0008a3, 5925 },
+  { 0x0008a4, 5940 },
+  { 0x0008a5, 5952 },
+  { 0x0008a6, 5964 },
+  { 0x0008a7, 5978 },
+  { 0x0008a8, 5995 },
+  { 0x0008a9, 6012 },
+  { 0x0008aa, 6030 },
+  { 0x0008ab, 6048 },
+  { 0x0008ac, 6062 },
+  { 0x0008ad, 6076 },
+  { 0x0008ae, 6091 },
+  { 0x0008af, 6106 },
+  { 0x0008b0, 6127 },
+  { 0x0008b1, 6149 },
+  { 0x0008b2, 6166 },
+  { 0x0008b3, 6183 },
+  { 0x0008b4, 6209 },
+  { 0x0008b5, 6235 },
+  { 0x0008b6, 6253 },
+  { 0x0008b7, 6271 },
+  { 0x0008bc, 6292 },
+  { 0x0008bd, 6306 },
+  { 0x0008be, 6315 },
+  { 0x0008bf, 6332 },
+  { 0x0008c0, 6341 },
+  { 0x0008c1, 6351 },
+  { 0x0008c2, 6361 },
+  { 0x0008c5, 6370 },
+  { 0x0008c8, 6376 },
+  { 0x0008c9, 6388 },
+  { 0x0008cd, 6401 },
+  { 0x0008ce, 6410 },
+  { 0x0008cf, 6418 },
+  { 0x0008d6, 6428 },
+  { 0x0008da, 6436 },
+  { 0x0008db, 6447 },
+  { 0x0008dc, 6456 },
+  { 0x0008dd, 6469 },
+  { 0x0008de, 6475 },
+  { 0x0008df, 6486 },
+  { 0x0008ef, 6496 },
+  { 0x0008f6, 6514 },
+  { 0x0008fb, 6523 },
+  { 0x0008fc, 6533 },
+  { 0x0008fd, 6541 },
+  { 0x0008fe, 6552 },
+  { 0x0009df, 6562 },
+  { 0x0009e0, 6568 },
+  { 0x0009e1, 6581 },
+  { 0x0009e2, 6594 },
+  { 0x0009e3, 6597 },
+  { 0x0009e4, 6600 },
+  { 0x0009e5, 6603 },
+  { 0x0009e8, 6606 },
+  { 0x0009e9, 6609 },
+  { 0x0009ea, 6612 },
+  { 0x0009eb, 6627 },
+  { 0x0009ec, 6641 },
+  { 0x0009ed, 6654 },
+  { 0x0009ee, 6668 },
+  { 0x0009ef, 6682 },
+  { 0x0009f0, 6697 },
+  { 0x0009f1, 6712 },
+  { 0x0009f2, 6727 },
+  { 0x0009f3, 6742 },
+  { 0x0009f4, 6757 },
+  { 0x0009f5, 6763 },
+  { 0x0009f6, 6770 },
+  { 0x0009f7, 6775 },
+  { 0x0009f8, 6780 },
+  { 0x000aa1, 6788 },
+  { 0x000aa2, 6796 },
+  { 0x000aa3, 6804 },
+  { 0x000aa4, 6813 },
+  { 0x000aa5, 6822 },
+  { 0x000aa6, 6833 },
+  { 0x000aa7, 6844 },
+  { 0x000aa8, 6854 },
+  { 0x000aa9, 6864 },
+  { 0x000aaa, 6871 },
+  { 0x000aac, 6878 },
+  { 0x000aae, 6890 },
+  { 0x000aaf, 6899 },
+  { 0x000ab0, 6915 },
+  { 0x000ab1, 6924 },
+  { 0x000ab2, 6934 },
+  { 0x000ab3, 6943 },
+  { 0x000ab4, 6953 },
+  { 0x000ab5, 6965 },
+  { 0x000ab6, 6976 },
+  { 0x000ab7, 6985 },
+  { 0x000ab8, 6996 },
+  { 0x000abb, 7003 },
+  { 0x000abc, 7011 },
+  { 0x000abd, 7028 },
+  { 0x000abe, 7041 },
+  { 0x000abf, 7059 },
+  { 0x000ac3, 7066 },
+  { 0x000ac4, 7076 },
+  { 0x000ac5, 7089 },
+  { 0x000ac6, 7101 },
+  { 0x000ac9, 7114 },
+  { 0x000aca, 7124 },
+  { 0x000acb, 7138 },
+  { 0x000acc, 7156 },
+  { 0x000acd, 7173 },
+  { 0x000ace, 7191 },
+  { 0x000acf, 7204 },
+  { 0x000ad0, 7220 },
+  { 0x000ad1, 7240 },
+  { 0x000ad2, 7261 },
+  { 0x000ad3, 7281 },
+  { 0x000ad4, 7302 },
+  { 0x000ad6, 7315 },
+  { 0x000ad7, 7323 },
+  { 0x000ad9, 7331 },
+  { 0x000ada, 7342 },
+  { 0x000adb, 7351 },
+  { 0x000adc, 7368 },
+  { 0x000add, 7388 },
+  { 0x000ade, 7409 },
+  { 0x000adf, 7424 },
+  { 0x000ae0, 7437 },
+  { 0x000ae1, 7454 },
+  { 0x000ae2, 7473 },
+  { 0x000ae3, 7488 },
+  { 0x000ae4, 7504 },
+  { 0x000ae5, 7522 },
+  { 0x000ae6, 7531 },
+  { 0x000ae7, 7550 },
+  { 0x000ae8, 7567 },
+  { 0x000ae9, 7585 },
+  { 0x000aea, 7605 },
+  { 0x000aeb, 7617 },
+  { 0x000aec, 7630 },
+  { 0x000aed, 7635 },
+  { 0x000aee, 7643 },
+  { 0x000af0, 7649 },
+  { 0x000af1, 7662 },
+  { 0x000af2, 7669 },
+  { 0x000af3, 7682 },
+  { 0x000af4, 7692 },
+  { 0x000af5, 7704 },
+  { 0x000af6, 7717 },
+  { 0x000af7, 7729 },
+  { 0x000af8, 7740 },
+  { 0x000af9, 7753 },
+  { 0x000afa, 7763 },
+  { 0x000afb, 7781 },
+  { 0x000afc, 7801 },
+  { 0x000afd, 7807 },
+  { 0x000afe, 7826 },
+  { 0x000aff, 7845 },
+  { 0x000ba3, 7852 },
+  { 0x000ba6, 7862 },
+  { 0x000ba8, 7873 },
+  { 0x000ba9, 7883 },
+  { 0x000bc0, 7891 },
+  { 0x000bc2, 7899 },
+  { 0x000bc3, 7908 },
+  { 0x000bc4, 7915 },
+  { 0x000bc6, 7925 },
+  { 0x000bca, 7934 },
+  { 0x000bcc, 7938 },
+  { 0x000bce, 7943 },
+  { 0x000bcf, 7950 },
+  { 0x000bd3, 7957 },
+  { 0x000bd6, 7965 },
+  { 0x000bd8, 7974 },
+  { 0x000bda, 7984 },
+  { 0x000bdc, 7993 },
+  { 0x000bfc, 8002 },
+  { 0x000cdf, 8012 },
+  { 0x000ce0, 8033 },
+  { 0x000ce1, 8046 },
+  { 0x000ce1, 8057 },
+  { 0x000ce2, 8069 },
+  { 0x000ce2, 8082 },
+  { 0x000ce3, 8096 },
+  { 0x000ce3, 8109 },
+  { 0x000ce4, 8123 },
+  { 0x000ce5, 8133 },
+  { 0x000ce6, 8144 },
+  { 0x000ce6, 8156 },
+  { 0x000ce7, 8169 },
+  { 0x000ce7, 8181 },
+  { 0x000ce8, 8192 },
+  { 0x000ce8, 8203 },
+  { 0x000ce9, 8215 },
+  { 0x000cea, 8226 },
+  { 0x000ceb, 8243 },
+  { 0x000cec, 8255 },
+  { 0x000ced, 8268 },
+  { 0x000cee, 8284 },
+  { 0x000cef, 8295 },
+  { 0x000cf0, 8311 },
+  { 0x000cf1, 8322 },
+  { 0x000cf1, 8336 },
+  { 0x000cf2, 8350 },
+  { 0x000cf3, 8362 },
+  { 0x000cf4, 8377 },
+  { 0x000cf5, 8387 },
+  { 0x000cf5, 8404 },
+  { 0x000cf6, 8421 },
+  { 0x000cf6, 8433 },
+  { 0x000cf7, 8445 },
+  { 0x000cf7, 8456 },
+  { 0x000cf8, 8468 },
+  { 0x000cf9, 8480 },
+  { 0x000cfa, 8492 },
+  { 0x000cfa, 8503 },
+  { 0x000da1, 8514 },
+  { 0x000da2, 8525 },
+  { 0x000da3, 8538 },
+  { 0x000da4, 8552 },
+  { 0x000da5, 8566 },
+  { 0x000da6, 8579 },
+  { 0x000da7, 8595 },
+  { 0x000da8, 8607 },
+  { 0x000da9, 8620 },
+  { 0x000daa, 8634 },
+  { 0x000dab, 8648 },
+  { 0x000dac, 8658 },
+  { 0x000dad, 8671 },
+  { 0x000dae, 8683 },
+  { 0x000daf, 8696 },
+  { 0x000db0, 8709 },
+  { 0x000db1, 8722 },
+  { 0x000db2, 8741 },
+  { 0x000db3, 8757 },
+  { 0x000db4, 8768 },
+  { 0x000db5, 8779 },
+  { 0x000db6, 8790 },
+  { 0x000db7, 8804 },
+  { 0x000db8, 8819 },
+  { 0x000db9, 8833 },
+  { 0x000dba, 8843 },
+  { 0x000dbb, 8857 },
+  { 0x000dbc, 8868 },
+  { 0x000dbd, 8882 },
+  { 0x000dbe, 8892 },
+  { 0x000dbf, 8905 },
+  { 0x000dc0, 8916 },
+  { 0x000dc1, 8932 },
+  { 0x000dc2, 8942 },
+  { 0x000dc3, 8953 },
+  { 0x000dc4, 8964 },
+  { 0x000dc5, 8972 },
+  { 0x000dc6, 8984 },
+  { 0x000dc7, 8992 },
+  { 0x000dc8, 9004 },
+  { 0x000dc9, 9016 },
+  { 0x000dca, 9028 },
+  { 0x000dcb, 9039 },
+  { 0x000dcc, 9050 },
+  { 0x000dcd, 9063 },
+  { 0x000dce, 9073 },
+  { 0x000dcf, 9087 },
+  { 0x000dd0, 9102 },
+  { 0x000dd1, 9113 },
+  { 0x000dd2, 9129 },
+  { 0x000dd3, 9141 },
+  { 0x000dd4, 9153 },
+  { 0x000dd5, 9164 },
+  { 0x000dd6, 9176 },
+  { 0x000dd7, 9188 },
+  { 0x000dd8, 9201 },
+  { 0x000dd9, 9212 },
+  { 0x000dda, 9224 },
+  { 0x000dde, 9237 },
+  { 0x000ddf, 9260 },
+  { 0x000de0, 9270 },
+  { 0x000de1, 9281 },
+  { 0x000de2, 9293 },
+  { 0x000de3, 9304 },
+  { 0x000de4, 9323 },
+  { 0x000de5, 9343 },
+  { 0x000de6, 9360 },
+  { 0x000de7, 9374 },
+  { 0x000de8, 9389 },
+  { 0x000de9, 9400 },
+  { 0x000dea, 9412 },
+  { 0x000deb, 9424 },
+  { 0x000dec, 9441 },
+  { 0x000ded, 9458 },
+  { 0x000df0, 9472 },
+  { 0x000df1, 9484 },
+  { 0x000df2, 9497 },
+  { 0x000df3, 9510 },
+  { 0x000df4, 9522 },
+  { 0x000df5, 9533 },
+  { 0x000df6, 9544 },
+  { 0x000df7, 9556 },
+  { 0x000df8, 9569 },
+  { 0x000df9, 9582 },
+  { 0x000ea1, 9594 },
+  { 0x000ea2, 9608 },
+  { 0x000ea3, 9627 },
+  { 0x000ea4, 9645 },
+  { 0x000ea5, 9658 },
+  { 0x000ea6, 9676 },
+  { 0x000ea7, 9694 },
+  { 0x000ea8, 9708 },
+  { 0x000ea9, 9727 },
+  { 0x000eaa, 9740 },
+  { 0x000eab, 9759 },
+  { 0x000eac, 9777 },
+  { 0x000ead, 9795 },
+  { 0x000eae, 9812 },
+  { 0x000eaf, 9830 },
+  { 0x000eb0, 9849 },
+  { 0x000eb1, 9867 },
+  { 0x000eb2, 9880 },
+  { 0x000eb3, 9893 },
+  { 0x000eb4, 9911 },
+  { 0x000eb5, 9928 },
+  { 0x000eb6, 9940 },
+  { 0x000eb7, 9957 },
+  { 0x000eb8, 9970 },
+  { 0x000eb9, 9983 },
+  { 0x000eba, 10001 },
+  { 0x000ebb, 10014 },
+  { 0x000ebc, 10028 },
+  { 0x000ebd, 10041 },
+  { 0x000ebe, 10055 },
+  { 0x000ebf, 10068 },
+  { 0x000ec0, 10077 },
+  { 0x000ec1, 10087 },
+  { 0x000ec2, 10097 },
+  { 0x000ec3, 10108 },
+  { 0x000ec4, 10118 },
+  { 0x000ec5, 10127 },
+  { 0x000ec6, 10138 },
+  { 0x000ec7, 10148 },
+  { 0x000ec8, 10157 },
+  { 0x000ec9, 10167 },
+  { 0x000eca, 10178 },
+  { 0x000ecb, 10188 },
+  { 0x000ecc, 10198 },
+  { 0x000ecd, 10207 },
+  { 0x000ece, 10218 },
+  { 0x000ecf, 10228 },
+  { 0x000ed0, 10238 },
+  { 0x000ed1, 10248 },
+  { 0x000ed2, 10258 },
+  { 0x000ed3, 10268 },
+  { 0x000ed4, 10277 },
+  { 0x000ed5, 10293 },
+  { 0x000ed6, 10314 },
+  { 0x000ed7, 10334 },
+  { 0x000ed8, 10349 },
+  { 0x000ed9, 10369 },
+  { 0x000eda, 10389 },
+  { 0x000edb, 10405 },
+  { 0x000edc, 10420 },
+  { 0x000edd, 10441 },
+  { 0x000ede, 10461 },
+  { 0x000edf, 10481 },
+  { 0x000ee0, 10500 },
+  { 0x000ee1, 10520 },
+  { 0x000ee2, 10541 },
+  { 0x000ee3, 10561 },
+  { 0x000ee4, 10576 },
+  { 0x000ee5, 10591 },
+  { 0x000ee6, 10610 },
+  { 0x000ee7, 10624 },
+  { 0x000ee8, 10643 },
+  { 0x000ee9, 10658 },
+  { 0x000eea, 10673 },
+  { 0x000eeb, 10688 },
+  { 0x000eec, 10704 },
+  { 0x000eed, 10719 },
+  { 0x000eee, 10735 },
+  { 0x000eef, 10750 },
+  { 0x000ef0, 10774 },
+  { 0x000ef1, 10799 },
+  { 0x000ef2, 10824 },
+  { 0x000ef3, 10839 },
+  { 0x000ef4, 10864 },
+  { 0x000ef5, 10890 },
+  { 0x000ef6, 10909 },
+  { 0x000ef7, 10922 },
+  { 0x000ef8, 10936 },
+  { 0x000ef9, 10953 },
+  { 0x000efa, 10980 },
+  { 0x000eff, 11001 },
+  { 0x0013bc, 11012 },
+  { 0x0013bd, 11015 },
+  { 0x0013be, 11018 },
+  { 0x0020a0, 11029 },
+  { 0x0020a1, 11037 },
+  { 0x0020a2, 11047 },
+  { 0x0020a3, 11060 },
+  { 0x0020a4, 11071 },
+  { 0x0020a5, 11080 },
+  { 0x0020a6, 11089 },
+  { 0x0020a7, 11099 },
+  { 0x0020a8, 11110 },
+  { 0x0020a9, 11120 },
+  { 0x0020aa, 11128 },
+  { 0x0020ab, 11142 },
+  { 0x0020ac, 11151 },
+  { 0x00fd01, 11160 },
+  { 0x00fd02, 11175 },
+  { 0x00fd03, 11190 },
+  { 0x00fd04, 11202 },
+  { 0x00fd05, 11213 },
+  { 0x00fd06, 11226 },
+  { 0x00fd07, 11240 },
+  { 0x00fd08, 11256 },
+  { 0x00fd09, 11267 },
+  { 0x00fd0a, 11277 },
+  { 0x00fd0b, 11286 },
+  { 0x00fd0c, 11295 },
+  { 0x00fd0d, 11304 },
+  { 0x00fd0e, 11314 },
+  { 0x00fd0f, 11324 },
+  { 0x00fd10, 11341 },
+  { 0x00fd11, 11356 },
+  { 0x00fd12, 11370 },
+  { 0x00fd13, 11380 },
+  { 0x00fd14, 11391 },
+  { 0x00fd15, 11401 },
+  { 0x00fd16, 11411 },
+  { 0x00fd17, 11421 },
+  { 0x00fd18, 11432 },
+  { 0x00fd19, 11444 },
+  { 0x00fd1a, 11462 },
+  { 0x00fd1b, 11478 },
+  { 0x00fd1c, 11492 },
+  { 0x00fd1d, 11510 },
+  { 0x00fd1e, 11527 },
+  { 0x00fe01, 11538 },
+  { 0x00fe02, 11547 },
+  { 0x00fe03, 11564 },
+  { 0x00fe04, 11581 },
+  { 0x00fe05, 11598 },
+  { 0x00fe06, 11614 },
+  { 0x00fe07, 11630 },
+  { 0x00fe08, 11645 },
+  { 0x00fe09, 11660 },
+  { 0x00fe0a, 11680 },
+  { 0x00fe0b, 11695 },
+  { 0x00fe0c, 11715 },
+  { 0x00fe0d, 11731 },
+  { 0x00fe0e, 11752 },
+  { 0x00fe0f, 11767 },
+  { 0x00fe20, 11787 },
+  { 0x00fe21, 11800 },
+  { 0x00fe22, 11817 },
+  { 0x00fe23, 11836 },
+  { 0x00fe24, 11856 },
+  { 0x00fe25, 11878 },
+  { 0x00fe26, 11901 },
+  { 0x00fe27, 11925 },
+  { 0x00fe28, 11945 },
+  { 0x00fe29, 11966 },
+  { 0x00fe2a, 11990 },
+  { 0x00fe2b, 12015 },
+  { 0x00fe2c, 12040 },
+  { 0x00fe2d, 12061 },
+  { 0x00fe2e, 12083 },
+  { 0x00fe2f, 12102 },
+  { 0x00fe30, 12123 },
+  { 0x00fe31, 12148 },
+  { 0x00fe32, 12176 },
+  { 0x00fe33, 12190 },
+  { 0x00fe34, 12208 },
+  { 0x00fe50, 12218 },
+  { 0x00fe51, 12229 },
+  { 0x00fe52, 12240 },
+  { 0x00fe53, 12256 },
+  { 0x00fe54, 12267 },
+  { 0x00fe55, 12279 },
+  { 0x00fe56, 12290 },
+  { 0x00fe57, 12304 },
+  { 0x00fe58, 12319 },
+  { 0x00fe59, 12334 },
+  { 0x00fe5a, 12351 },
+  { 0x00fe5b, 12362 },
+  { 0x00fe5c, 12375 },
+  { 0x00fe5d, 12387 },
+  { 0x00fe5e, 12397 },
+  { 0x00fe5f, 12415 },
+  { 0x00fe60, 12437 },
+  { 0x00fe61, 12451 },
+  { 0x00fe62, 12461 },
+  { 0x00fe70, 12471 },
+  { 0x00fe71, 12486 },
+  { 0x00fe72, 12510 },
+  { 0x00fe73, 12528 },
+  { 0x00fe74, 12544 },
+  { 0x00fe75, 12562 },
+  { 0x00fe76, 12580 },
+  { 0x00fe77, 12597 },
+  { 0x00fe78, 12620 },
+  { 0x00fe79, 12636 },
+  { 0x00fe7a, 12652 },
+  { 0x00fed0, 12671 },
+  { 0x00fed1, 12692 },
+  { 0x00fed2, 12712 },
+  { 0x00fed4, 12732 },
+  { 0x00fed5, 12752 },
+  { 0x00fee0, 12769 },
+  { 0x00fee1, 12782 },
+  { 0x00fee2, 12796 },
+  { 0x00fee3, 12807 },
+  { 0x00fee4, 12820 },
+  { 0x00fee5, 12835 },
+  { 0x00fee6, 12851 },
+  { 0x00fee7, 12868 },
+  { 0x00fee8, 12886 },
+  { 0x00fee9, 12906 },
+  { 0x00feea, 12922 },
+  { 0x00feeb, 12938 },
+  { 0x00feec, 12954 },
+  { 0x00feed, 12970 },
+  { 0x00feee, 12986 },
+  { 0x00feef, 13008 },
+  { 0x00fef0, 13026 },
+  { 0x00fef1, 13044 },
+  { 0x00fef2, 13062 },
+  { 0x00fef3, 13080 },
+  { 0x00fef4, 13098 },
+  { 0x00fef5, 13116 },
+  { 0x00fef6, 13130 },
+  { 0x00fef7, 13144 },
+  { 0x00fef8, 13158 },
+  { 0x00fef9, 13172 },
+  { 0x00fefa, 13191 },
+  { 0x00fefb, 13210 },
+  { 0x00fefc, 13230 },
+  { 0x00fefd, 13250 },
+  { 0x00ff08, 13264 },
+  { 0x00ff09, 13274 },
+  { 0x00ff0a, 13278 },
+  { 0x00ff0b, 13287 },
+  { 0x00ff0d, 13293 },
+  { 0x00ff13, 13300 },
+  { 0x00ff14, 13306 },
+  { 0x00ff15, 13318 },
+  { 0x00ff1b, 13326 },
+  { 0x00ff20, 13333 },
+  { 0x00ff21, 13343 },
+  { 0x00ff22, 13349 },
+  { 0x00ff23, 13358 },
+  { 0x00ff23, 13365 },
+  { 0x00ff24, 13377 },
+  { 0x00ff25, 13384 },
+  { 0x00ff26, 13393 },
+  { 0x00ff27, 13402 },
+  { 0x00ff28, 13420 },
+  { 0x00ff29, 13428 },
+  { 0x00ff2a, 13436 },
+  { 0x00ff2b, 13452 },
+  { 0x00ff2c, 13460 },
+  { 0x00ff2d, 13467 },
+  { 0x00ff2e, 13477 },
+  { 0x00ff2f, 13488 },
+  { 0x00ff30, 13499 },
+  { 0x00ff31, 13511 },
+  { 0x00ff32, 13518 },
+  { 0x00ff33, 13531 },
+  { 0x00ff34, 13542 },
+  { 0x00ff35, 13555 },
+  { 0x00ff36, 13567 },
+  { 0x00ff37, 13581 },
+  { 0x00ff38, 13591 },
+  { 0x00ff39, 13605 },
+  { 0x00ff3a, 13618 },
+  { 0x00ff3b, 13634 },
+  { 0x00ff3c, 13651 },
+  { 0x00ff3d, 13667 },
+  { 0x00ff3e, 13685 },
+  { 0x00ff3f, 13703 },
+  { 0x00ff50, 13718 },
+  { 0x00ff51, 13723 },
+  { 0x00ff52, 13728 },
+  { 0x00ff53, 13731 },
+  { 0x00ff54, 13737 },
+  { 0x00ff55, 13742 },
+  { 0x00ff55, 13750 },
+  { 0x00ff56, 13756 },
+  { 0x00ff56, 13766 },
+  { 0x00ff57, 13771 },
+  { 0x00ff58, 13775 },
+  { 0x00ff60, 13781 },
+  { 0x00ff61, 13788 },
+  { 0x00ff62, 13794 },
+  { 0x00ff63, 13802 },
+  { 0x00ff65, 13809 },
+  { 0x00ff66, 13814 },
+  { 0x00ff67, 13819 },
+  { 0x00ff68, 13824 },
+  { 0x00ff69, 13829 },
+  { 0x00ff6a, 13836 },
+  { 0x00ff6b, 13841 },
+  { 0x00ff7e, 13847 },
+  { 0x00ff7e, 13861 },
+  { 0x00ff7e, 13874 },
+  { 0x00ff7e, 13888 },
+  { 0x00ff7e, 13902 },
+  { 0x00ff7e, 13918 },
+  { 0x00ff7e, 13930 },
+  { 0x00ff7e, 13942 },
+  { 0x00ff7f, 13956 },
+  { 0x00ff80, 13965 },
+  { 0x00ff89, 13974 },
+  { 0x00ff8d, 13981 },
+  { 0x00ff91, 13990 },
+  { 0x00ff92, 13996 },
+  { 0x00ff93, 14002 },
+  { 0x00ff94, 14008 },
+  { 0x00ff95, 14014 },
+  { 0x00ff96, 14022 },
+  { 0x00ff97, 14030 },
+  { 0x00ff98, 14036 },
+  { 0x00ff99, 14045 },
+  { 0x00ff9a, 14053 },
+  { 0x00ff9a, 14064 },
+  { 0x00ff9b, 14073 },
+  { 0x00ff9b, 14086 },
+  { 0x00ff9c, 14094 },
+  { 0x00ff9d, 14101 },
+  { 0x00ff9e, 14110 },
+  { 0x00ff9f, 14120 },
+  { 0x00ffaa, 14130 },
+  { 0x00ffab, 14142 },
+  { 0x00ffac, 14149 },
+  { 0x00ffad, 14162 },
+  { 0x00ffae, 14174 },
+  { 0x00ffaf, 14185 },
+  { 0x00ffb0, 14195 },
+  { 0x00ffb1, 14200 },
+  { 0x00ffb2, 14205 },
+  { 0x00ffb3, 14210 },
+  { 0x00ffb4, 14215 },
+  { 0x00ffb5, 14220 },
+  { 0x00ffb6, 14225 },
+  { 0x00ffb7, 14230 },
+  { 0x00ffb8, 14235 },
+  { 0x00ffb9, 14240 },
+  { 0x00ffbd, 14245 },
+  { 0x00ffbe, 14254 },
+  { 0x00ffbf, 14257 },
+  { 0x00ffc0, 14260 },
+  { 0x00ffc1, 14263 },
+  { 0x00ffc2, 14266 },
+  { 0x00ffc3, 14269 },
+  { 0x00ffc4, 14272 },
+  { 0x00ffc5, 14275 },
+  { 0x00ffc6, 14278 },
+  { 0x00ffc7, 14281 },
+  { 0x00ffc8, 14285 },
+  { 0x00ffc9, 14289 },
+  { 0x00ffca, 14293 },
+  { 0x00ffcb, 14297 },
+  { 0x00ffcc, 14301 },
+  { 0x00ffcd, 14305 },
+  { 0x00ffce, 14309 },
+  { 0x00ffcf, 14313 },
+  { 0x00ffd0, 14317 },
+  { 0x00ffd1, 14321 },
+  { 0x00ffd2, 14325 },
+  { 0x00ffd3, 14329 },
+  { 0x00ffd4, 14333 },
+  { 0x00ffd5, 14337 },
+  { 0x00ffd6, 14341 },
+  { 0x00ffd7, 14345 },
+  { 0x00ffd8, 14349 },
+  { 0x00ffd9, 14353 },
+  { 0x00ffda, 14357 },
+  { 0x00ffdb, 14361 },
+  { 0x00ffdc, 14365 },
+  { 0x00ffdd, 14369 },
+  { 0x00ffde, 14373 },
+  { 0x00ffdf, 14377 },
+  { 0x00ffe0, 14381 },
+  { 0x00ffe1, 14385 },
+  { 0x00ffe2, 14393 },
+  { 0x00ffe3, 14401 },
+  { 0x00ffe4, 14411 },
+  { 0x00ffe5, 14421 },
+  { 0x00ffe6, 14431 },
+  { 0x00ffe7, 14442 },
+  { 0x00ffe8, 14449 },
+  { 0x00ffe9, 14456 },
+  { 0x00ffea, 14462 },
+  { 0x00ffeb, 14468 },
+  { 0x00ffec, 14476 },
+  { 0x00ffed, 14484 },
+  { 0x00ffee, 14492 },
+  { 0x00ffff, 14500 },
+  { 0xffffff, 14507 }
+};
+
+static const gdk_key gdk_keys_by_name[] = {
+  { 0x000030, 140 },
+  { 0x000031, 142 },
+  { 0x000032, 144 },
+  { 0x000033, 146 },
+  { 0x00fd10, 11341 },
+  { 0x00fd0e, 11314 },
+  { 0x00fd05, 11213 },
+  { 0x00fd19, 11444 },
+  { 0x00fd15, 11401 },
+  { 0x00fd0f, 11324 },
+  { 0x00fd1c, 11492 },
+  { 0x00fd1a, 11462 },
+  { 0x00fd01, 11160 },
+  { 0x00fd1e, 11527 },
+  { 0x00fd06, 11226 },
+  { 0x00fd07, 11240 },
+  { 0x00fd1b, 11478 },
+  { 0x00fd02, 11175 },
+  { 0x00fd13, 11380 },
+  { 0x00fd12, 11370 },
+  { 0x00fd11, 11356 },
+  { 0x00fd04, 11202 },
+  { 0x00fd0a, 11277 },
+  { 0x00fd0b, 11286 },
+  { 0x00fd0c, 11295 },
+  { 0x00fd16, 11411 },
+  { 0x00fd1d, 11510 },
+  { 0x00fd09, 11267 },
+  { 0x00fd18, 11432 },
+  { 0x00fd08, 11256 },
+  { 0x00fd03, 11190 },
+  { 0x00fd14, 11391 },
+  { 0x00fd17, 11421 },
+  { 0x00fd0d, 11304 },
+  { 0x000034, 148 },
+  { 0x000035, 150 },
+  { 0x000036, 152 },
+  { 0x000037, 154 },
+  { 0x000038, 156 },
+  { 0x000039, 158 },
+  { 0x000041, 207 },
+  { 0x0000c6, 787 },
+  { 0x0000c1, 744 },
+  { 0x0001c3, 1473 },
+  { 0x00fe70, 12471 },
+  { 0x00fe71, 12486 },
+  { 0x0000c2, 751 },
+  { 0x0000c4, 770 },
+  { 0x0000c0, 737 },
+  { 0x00ffe9, 14456 },
+  { 0x00ffea, 14462 },
+  { 0x0003c0, 2068 },
+  { 0x0001a1, 1281 },
+  { 0x0005d9, 3221 },
+  { 0x0005c7, 3008 },
+  { 0x0005e9, 3360 },
+  { 0x0005c8, 3020 },
+  { 0x0005ac, 2848 },
+  { 0x0005d6, 3188 },
+  { 0x0005cf, 3107 },
+  { 0x0005ef, 3451 },
+  { 0x0005ec, 3406 },
+  { 0x0005ee, 3438 },
+  { 0x0005eb, 3390 },
+  { 0x0005e1, 3260 },
+  { 0x0005da, 3232 },
+  { 0x0005e7, 3328 },
+  { 0x0005cd, 3084 },
+  { 0x0005c1, 2899 },
+  { 0x0005c3, 2931 },
+  { 0x0005c4, 2950 },
+  { 0x0005c6, 2990 },
+  { 0x0005c5, 2968 },
+  { 0x0005e7, 3338 },
+  { 0x0005cc, 3072 },
+  { 0x0005e3, 3282 },
+  { 0x0005f0, 3464 },
+  { 0x0005ed, 3422 },
+  { 0x0005ce, 3095 },
+  { 0x0005e4, 3293 },
+  { 0x0005c2, 2912 },
+  { 0x0005e5, 3304 },
+  { 0x0005e6, 3316 },
+  { 0x0005e2, 3271 },
+  { 0x0005bf, 2878 },
+  { 0x0005d1, 3130 },
+  { 0x0005d5, 3177 },
+  { 0x0005d3, 3152 },
+  { 0x0005bb, 2861 },
+  { 0x0005f1, 3477 },
+  { 0x0005d4, 3164 },
+  { 0x0005f2, 3491 },
+  { 0x00ff7e, 13847 },
+  { 0x0005d7, 3199 },
+  { 0x0005e0, 3245 },
+  { 0x0005ca, 3049 },
+  { 0x0005c9, 3031 },
+  { 0x0005d0, 3118 },
+  { 0x0005cb, 3060 },
+  { 0x0005e8, 3349 },
+  { 0x0005ea, 3379 },
+  { 0x0005d8, 3210 },
+  { 0x0005d2, 3140 },
+  { 0x0000c5, 781 },
+  { 0x0000c3, 763 },
+  { 0x00fe7a, 12652 },
+  { 0x000042, 209 },
+  { 0x00ff08, 13264 },
+  { 0x00ff58, 13775 },
+  { 0x00fe74, 12544 },
+  { 0x00ff6b, 13841 },
+  { 0x0006be, 4011 },
+  { 0x0006ae, 3729 },
+  { 0x000043, 211 },
+  { 0x0002c5, 1826 },
+  { 0x0001c6, 1487 },
+  { 0x00ff69, 13829 },
+  { 0x00ffe5, 14421 },
+  { 0x0001c8, 1494 },
+  { 0x0000c7, 790 },
+  { 0x0002c6, 1836 },
+  { 0x00ff0b, 13287 },
+  { 0x00ff37, 13581 },
+  { 0x0020a1, 11037 },
+  { 0x00ffe3, 14401 },
+  { 0x00ffe4, 14411 },
+  { 0x0020a2, 11047 },
+  { 0x0006e1, 4474 },
+  { 0x0006e2, 4485 },
+  { 0x0006fe, 4836 },
+  { 0x0006e4, 4510 },
+  { 0x0006bf, 4031 },
+  { 0x0006fc, 4810 },
+  { 0x0006e6, 4534 },
+  { 0x0006ec, 4610 },
+  { 0x0006ed, 4622 },
+  { 0x0006ee, 4634 },
+  { 0x0006f2, 4681 },
+  { 0x0006f3, 4693 },
+  { 0x0006e7, 4546 },
+  { 0x0006e8, 4559 },
+  { 0x0006ff, 4849 },
+  { 0x0006e9, 4571 },
+  { 0x0006e5, 4522 },
+  { 0x0006b3, 3812 },
+  { 0x0006b8, 3911 },
+  { 0x0006eb, 4598 },
+  { 0x0006b9, 3934 },
+  { 0x0006ba, 3959 },
+  { 0x0006ef, 4646 },
+  { 0x0006f0, 4657 },
+  { 0x0006fb, 4797 },
+  { 0x0006fd, 4821 },
+  { 0x0006ea, 4582 },
+  { 0x0006f8, 4753 },
+  { 0x0006f4, 4705 },
+  { 0x0006e3, 4497 },
+  { 0x0006f5, 4717 },
+  { 0x0006f7, 4741 },
+  { 0x0006f1, 4669 },
+  { 0x0006f9, 4771 },
+  { 0x0006e0, 4462 },
+  { 0x0006fa, 4785 },
+  { 0x0006f6, 4728 },
+  { 0x0006c1, 4069 },
+  { 0x0006c2, 4080 },
+  { 0x0006de, 4431 },
+  { 0x0006c4, 4105 },
+  { 0x0006af, 3749 },
+  { 0x0006dc, 4405 },
+  { 0x0006c6, 4129 },
+  { 0x0006cc, 4205 },
+  { 0x0006cd, 4217 },
+  { 0x0006ce, 4229 },
+  { 0x0006d2, 4276 },
+  { 0x0006d3, 4288 },
+  { 0x0006c7, 4141 },
+  { 0x0006c8, 4154 },
+  { 0x0006df, 4444 },
+  { 0x0006c9, 4166 },
+  { 0x0006c5, 4117 },
+  { 0x0006a3, 3530 },
+  { 0x0006a8, 3629 },
+  { 0x0006cb, 4193 },
+  { 0x0006a9, 3652 },
+  { 0x0006aa, 3677 },
+  { 0x0006cf, 4241 },
+  { 0x0006d0, 4252 },
+  { 0x0006db, 4392 },
+  { 0x0006dd, 4416 },
+  { 0x0006ca, 4177 },
+  { 0x0006d8, 4348 },
+  { 0x0006d4, 4300 },
+  { 0x0006c3, 4092 },
+  { 0x0006d5, 4312 },
+  { 0x0006d7, 4336 },
+  { 0x0006d1, 4264 },
+  { 0x0006d9, 4366 },
+  { 0x0006c0, 4057 },
+  { 0x0006da, 4380 },
+  { 0x0006d6, 4323 },
+  { 0x000044, 213 },
+  { 0x0001cf, 1516 },
+  { 0x00ffff, 14500 },
+  { 0x0020ab, 11142 },
+  { 0x00ff54, 13737 },
+  { 0x0001d0, 1523 },
+  { 0x000045, 215 },
+  { 0x0003bd, 2060 },
+  { 0x0000d0, 873 },
+  { 0x0003cc, 2084 },
+  { 0x0000c9, 806 },
+  { 0x0001cc, 1509 },
+  { 0x0000ca, 813 },
+  { 0x0020a0, 11029 },
+  { 0x0000cb, 825 },
+  { 0x0000c8, 799 },
+  { 0x00ff2f, 13488 },
+  { 0x00ff30, 13499 },
+  { 0x0003aa, 1987 },
+  { 0x00ff57, 13771 },
+  { 0x0001ca, 1501 },
+  { 0x00ff1b, 13326 },
+  { 0x0000d0, 877 },
+  { 0x0020ac, 11151 },
+  { 0x00ff62, 13794 },
+  { 0x000046, 217 },
+  { 0x00ffbe, 14254 },
+  { 0x00ffc7, 14281 },
+  { 0x00ffc8, 14285 },
+  { 0x00ffc9, 14289 },
+  { 0x00ffca, 14293 },
+  { 0x00ffcb, 14297 },
+  { 0x00ffcc, 14301 },
+  { 0x00ffcd, 14305 },
+  { 0x00ffce, 14309 },
+  { 0x00ffcf, 14313 },
+  { 0x00ffd0, 14317 },
+  { 0x00ffbf, 14257 },
+  { 0x00ffd1, 14321 },
+  { 0x00ffd2, 14325 },
+  { 0x00ffd3, 14329 },
+  { 0x00ffd4, 14333 },
+  { 0x00ffd5, 14337 },
+  { 0x00ffd6, 14341 },
+  { 0x00ffd7, 14345 },
+  { 0x00ffd8, 14349 },
+  { 0x00ffd9, 14353 },
+  { 0x00ffda, 14357 },
+  { 0x00ffc0, 14260 },
+  { 0x00ffdb, 14361 },
+  { 0x00ffdc, 14365 },
+  { 0x00ffdd, 14369 },
+  { 0x00ffde, 14373 },
+  { 0x00ffdf, 14377 },
+  { 0x00ffe0, 14381 },
+  { 0x00ffc1, 14263 },
+  { 0x00ffc2, 14266 },
+  { 0x00ffc3, 14269 },
+  { 0x00ffc4, 14272 },
+  { 0x00ffc5, 14275 },
+  { 0x00ffc6, 14278 },
+  { 0x0020a3, 11060 },
+  { 0x00ff68, 13824 },
+  { 0x00fed0, 12671 },
+  { 0x000047, 219 },
+  { 0x0002d5, 1848 },
+  { 0x0002ab, 1759 },
+  { 0x0003ab, 1995 },
+  { 0x0002d8, 1858 },
+  { 0x0007c1, 5316 },
+  { 0x0007a1, 4867 },
+  { 0x0007c2, 5328 },
+  { 0x0007d7, 5564 },
+  { 0x0007c4, 5351 },
+  { 0x0007c5, 5363 },
+  { 0x0007a2, 4885 },
+  { 0x0007c7, 5388 },
+  { 0x0007a3, 4905 },
+  { 0x0007c3, 5339 },
+  { 0x0007c9, 5410 },
+  { 0x0007a4, 4921 },
+  { 0x0007a5, 4957 },
+  { 0x0007a5, 4938 },
+  { 0x0007ca, 5421 },
+  { 0x0007cb, 5433 },
+  { 0x0007cb, 5446 },
+  { 0x0007cc, 5458 },
+  { 0x0007cd, 5467 },
+  { 0x0007d9, 5584 },
+  { 0x0007ab, 5039 },
+  { 0x0007cf, 5485 },
+  { 0x0007a7, 4977 },
+  { 0x0007d6, 5554 },
+  { 0x0007d0, 5499 },
+  { 0x0007d8, 5574 },
+  { 0x0007d1, 5508 },
+  { 0x0007d2, 5518 },
+  { 0x0007d4, 5530 },
+  { 0x0007c8, 5398 },
+  { 0x0007d5, 5540 },
+  { 0x0007a8, 4997 },
+  { 0x0007a9, 5017 },
+  { 0x0007ce, 5476 },
+  { 0x0007c6, 5377 },
+  { 0x0007ae, 5057 },
+  { 0x0007e1, 5596 },
+  { 0x0007b1, 5093 },
+  { 0x0007e2, 5608 },
+  { 0x0007f7, 5866 },
+  { 0x0007e4, 5631 },
+  { 0x0007e5, 5643 },
+  { 0x0007b2, 5111 },
+  { 0x0007e7, 5668 },
+  { 0x0007b3, 5131 },
+  { 0x0007f3, 5810 },
+  { 0x0007e3, 5619 },
+  { 0x0007af, 5078 },
+  { 0x0007e9, 5690 },
+  { 0x0007b4, 5147 },
+  { 0x0007b6, 5183 },
+  { 0x0007b5, 5164 },
+  { 0x0007ea, 5701 },
+  { 0x0007eb, 5713 },
+  { 0x0007eb, 5726 },
+  { 0x0007ec, 5738 },
+  { 0x0007ed, 5747 },
+  { 0x0007f9, 5886 },
+  { 0x0007bb, 5298 },
+  { 0x0007ef, 5765 },
+  { 0x0007b7, 5208 },
+  { 0x0007f6, 5856 },
+  { 0x0007f0, 5779 },
+  { 0x0007f8, 5876 },
+  { 0x0007f1, 5788 },
+  { 0x0007f2, 5798 },
+  { 0x00ff7e, 13861 },
+  { 0x0007f4, 5832 },
+  { 0x0007e8, 5678 },
+  { 0x0007f5, 5842 },
+  { 0x0007b8, 5228 },
+  { 0x0007ba, 5270 },
+  { 0x0007b9, 5248 },
+  { 0x0007ee, 5756 },
+  { 0x0007e6, 5657 },
+  { 0x000048, 221 },
+  { 0x00ff31, 13511 },
+  { 0x000ebf, 10068 },
+  { 0x000ec0, 10077 },
+  { 0x000ef6, 10909 },
+  { 0x000ef7, 10922 },
+  { 0x00ff39, 13605 },
+  { 0x000eba, 10001 },
+  { 0x000ea7, 9694 },
+  { 0x000ec4, 10118 },
+  { 0x000ec3, 10108 },
+  { 0x000ed1, 10248 },
+  { 0x00ff33, 13531 },
+  { 0x00ff34, 13542 },
+  { 0x000ebe, 10055 },
+  { 0x000ed3, 10268 },
+  { 0x000eb7, 9957 },
+  { 0x000eea, 10673 },
+  { 0x000eda, 10389 },
+  { 0x000eee, 10735 },
+  { 0x000ee8, 10643 },
+  { 0x000ee9, 10658 },
+  { 0x000eeb, 10688 },
+  { 0x000ed4, 10277 },
+  { 0x000ed6, 10314 },
+  { 0x000ef9, 10953 },
+  { 0x000ee3, 10561 },
+  { 0x000ed7, 10334 },
+  { 0x000ed9, 10369 },
+  { 0x000ed8, 10349 },
+  { 0x000ef8, 10936 },
+  { 0x000eed, 10719 },
+  { 0x000ee4, 10576 },
+  { 0x000ee5, 10591 },
+  { 0x000edb, 10405 },
+  { 0x000ee2, 10541 },
+  { 0x000edc, 10420 },
+  { 0x000edd, 10441 },
+  { 0x000ee1, 10520 },
+  { 0x000ede, 10461 },
+  { 0x000edf, 10481 },
+  { 0x000ee0, 10500 },
+  { 0x000ee6, 10610 },
+  { 0x000ed5, 10293 },
+  { 0x000ee7, 10624 },
+  { 0x000eec, 10704 },
+  { 0x000efa, 10980 },
+  { 0x00ff35, 13555 },
+  { 0x00ff38, 13591 },
+  { 0x000eb8, 9970 },
+  { 0x000ebb, 10014 },
+  { 0x000ea1, 9594 },
+  { 0x000ea3, 9627 },
+  { 0x000ef3, 10839 },
+  { 0x000eb1, 9867 },
+  { 0x000ea4, 9645 },
+  { 0x000ea6, 9676 },
+  { 0x000ea5, 9658 },
+  { 0x000ec7, 10148 },
+  { 0x000eca, 10178 },
+  { 0x000ef2, 10824 },
+  { 0x000ebd, 10041 },
+  { 0x000eb2, 9880 },
+  { 0x000eb4, 9911 },
+  { 0x00ff3b, 13634 },
+  { 0x00ff3a, 13618 },
+  { 0x000ea9, 9727 },
+  { 0x000eb0, 9849 },
+  { 0x000eaa, 9740 },
+  { 0x000eab, 9759 },
+  { 0x000eaf, 9830 },
+  { 0x000eac, 9777 },
+  { 0x000ead, 9795 },
+  { 0x000eae, 9812 },
+  { 0x000eef, 10750 },
+  { 0x00ff36, 13567 },
+  { 0x000eb5, 9928 },
+  { 0x00ff3f, 13703 },
+  { 0x000ea8, 9708 },
+  { 0x000eb9, 9983 },
+  { 0x000ea2, 9608 },
+  { 0x000eb3, 9893 },
+  { 0x000eb6, 9940 },
+  { 0x00ff32, 13518 },
+  { 0x000ef0, 10774 },
+  { 0x000ef4, 10864 },
+  { 0x000ef1, 10799 },
+  { 0x000ebc, 10028 },
+  { 0x000ecc, 10198 },
+  { 0x000ec8, 10157 },
+  { 0x000ec9, 10167 },
+  { 0x000ece, 10218 },
+  { 0x000ecd, 10207 },
+  { 0x000ecf, 10228 },
+  { 0x000ec1, 10087 },
+  { 0x000ec2, 10097 },
+  { 0x000ec6, 10138 },
+  { 0x000ec5, 10127 },
+  { 0x000ed2, 10258 },
+  { 0x000ecb, 10188 },
+  { 0x000ed0, 10238 },
+  { 0x000ef5, 10890 },
+  { 0x00ff7e, 13874 },
+  { 0x00ff29, 13428 },
+  { 0x0002a6, 1737 },
+  { 0x00ff7e, 13888 },
+  { 0x00ff6a, 13836 },
+  { 0x00ff23, 13358 },
+  { 0x00ff23, 13365 },
+  { 0x00ff25, 13384 },
+  { 0x00ff27, 13402 },
+  { 0x00ff50, 13718 },
+  { 0x0002a1, 1729 },
+  { 0x00ffed, 14484 },
+  { 0x00ffee, 14492 },
+  { 0x000049, 223 },
+  { 0x00fe33, 12190 },
+  { 0x00fe30, 12123 },
+  { 0x00fe31, 12148 },
+  { 0x00fe32, 12176 },
+  { 0x00fe34, 12208 },
+  { 0x00fe2f, 12102 },
+  { 0x00fe2c, 12040 },
+  { 0x00fe2d, 12061 },
+  { 0x00fe2e, 12083 },
+  { 0x00fe0c, 11715 },
+  { 0x00fe0d, 11731 },
+  { 0x00fe06, 11614 },
+  { 0x00fe07, 11630 },
+  { 0x00ff7e, 13902 },
+  { 0x00fe0e, 11752 },
+  { 0x00fe0f, 11767 },
+  { 0x00fe20, 11787 },
+  { 0x00fe02, 11547 },
+  { 0x00fe04, 11581 },
+  { 0x00fe05, 11598 },
+  { 0x00fe03, 11564 },
+  { 0x00fe01, 11538 },
+  { 0x00fe22, 11817 },
+  { 0x00fe21, 11800 },
+  { 0x00fe08, 11645 },
+  { 0x00fe09, 11660 },
+  { 0x00fe24, 11856 },
+  { 0x00fe23, 11836 },
+  { 0x00fe25, 11878 },
+  { 0x00fe26, 11901 },
+  { 0x00fe0a, 11680 },
+  { 0x00fe0b, 11695 },
+  { 0x00fe2b, 12015 },
+  { 0x00fe29, 11966 },
+  { 0x00fe2a, 11990 },
+  { 0x00fe27, 11925 },
+  { 0x00fe28, 11945 },
+  { 0x0002a9, 1749 },
+  { 0x0000cd, 843 },
+  { 0x0000ce, 850 },
+  { 0x0000cf, 862 },
+  { 0x0000cc, 836 },
+  { 0x0003cf, 2094 },
+  { 0x00ff63, 13802 },
+  { 0x0003c7, 2076 },
+  { 0x0003a5, 1971 },
+  { 0x00004a, 225 },
+  { 0x0002ac, 1766 },
+  { 0x00004b, 227 },
+  { 0x00ffb0, 14195 },
+  { 0x00ffb1, 14200 },
+  { 0x00ffb2, 14205 },
+  { 0x00ffb3, 14210 },
+  { 0x00ffb4, 14215 },
+  { 0x00ffb5, 14220 },
+  { 0x00ffb6, 14225 },
+  { 0x00ffb7, 14230 },
+  { 0x00ffb8, 14235 },
+  { 0x00ffb9, 14240 },
+  { 0x00ffab, 14142 },
+  { 0x00ff9d, 14101 },
+  { 0x00ffae, 14174 },
+  { 0x00ff9f, 14120 },
+  { 0x00ffaf, 14185 },
+  { 0x00ff99, 14045 },
+  { 0x00ff9c, 14094 },
+  { 0x00ff8d, 13981 },
+  { 0x00ffbd, 14245 },
+  { 0x00ff91, 13990 },
+  { 0x00ff92, 13996 },
+  { 0x00ff93, 14002 },
+  { 0x00ff94, 14008 },
+  { 0x00ff95, 14014 },
+  { 0x00ff9e, 14110 },
+  { 0x00ff96, 14022 },
+  { 0x00ffaa, 14130 },
+  { 0x00ff9b, 14086 },
+  { 0x00ff9b, 14073 },
+  { 0x00ff9a, 14053 },
+  { 0x00ff9a, 14064 },
+  { 0x00ff98, 14036 },
+  { 0x00ffac, 14149 },
+  { 0x00ff80, 13965 },
+  { 0x00ffad, 14162 },
+  { 0x00ff89, 13974 },
+  { 0x00ff97, 14030 },
+  { 0x00ff2d, 13467 },
+  { 0x00ff2e, 13477 },
+  { 0x00ff21, 13343 },
+  { 0x00ff26, 13393 },
+  { 0x0003d3, 2119 },
+  { 0x000eff, 11001 },
+  { 0x00004c, 229 },
+  { 0x0001c5, 1480 },
+  { 0x00fed4, 12732 },
+  { 0x0001a5, 1303 },
+  { 0x0003a6, 1978 },
+  { 0x00ff51, 13723 },
+  { 0x00ff0a, 13278 },
+  { 0x0020a4, 11071 },
+  { 0x0001a3, 1295 },
+  { 0x00004d, 231 },
+  { 0x0006b5, 3849 },
+  { 0x0006b2, 3798 },
+  { 0x0006bc, 3997 },
+  { 0x0006a5, 3567 },
+  { 0x0006a2, 3516 },
+  { 0x0006ac, 3715 },
+  { 0x00ff2c, 13460 },
+  { 0x00ff67, 13819 },
+  { 0x00ffe7, 14442 },
+  { 0x00ffe8, 14449 },
+  { 0x0020a5, 11080 },
+  { 0x00ff7e, 13918 },
+  { 0x00fe77, 12597 },
+  { 0x00fe76, 12580 },
+  { 0x00ff22, 13349 },
+  { 0x00ff20, 13333 },
+  { 0x00ff3d, 13667 },
+  { 0x00004e, 233 },
+  { 0x0001d1, 1531 },
+  { 0x0020a6, 11089 },
+  { 0x0001d2, 1538 },
+  { 0x0003d1, 2102 },
+  { 0x0020aa, 11128 },
+  { 0x00ff56, 13766 },
+  { 0x00fed2, 12712 },
+  { 0x0000d1, 881 },
+  { 0x00ff7f, 13956 },
+  { 0x00004f, 235 },
+  { 0x0013bc, 11012 },
+  { 0x0000d3, 895 },
+  { 0x0000d4, 902 },
+  { 0x0000d6, 921 },
+  { 0x0001d5, 1545 },
+  { 0x0000d2, 888 },
+  { 0x0003d2, 2111 },
+  { 0x0000d8, 941 },
+  { 0x0000d5, 914 },
+  { 0x00fe78, 12620 },
+  { 0x00fe79, 12636 },
+  { 0x000050, 237 },
+  { 0x00ff56, 13756 },
+  { 0x00ff55, 13742 },
+  { 0x00ff13, 13300 },
+  { 0x0020a7, 11099 },
+  { 0x00fefa, 13191 },
+  { 0x00fee9, 12906 },
+  { 0x00feea, 12922 },
+  { 0x00feeb, 12938 },
+  { 0x00feec, 12954 },
+  { 0x00feed, 12970 },
+  { 0x00fee8, 12886 },
+  { 0x00feef, 13008 },
+  { 0x00fef0, 13026 },
+  { 0x00fef1, 13044 },
+  { 0x00fef2, 13062 },
+  { 0x00fef3, 13080 },
+  { 0x00feee, 12986 },
+  { 0x00fefb, 13210 },
+  { 0x00fefc, 13230 },
+  { 0x00fee3, 12807 },
+  { 0x00fee6, 12851 },
+  { 0x00fee7, 12868 },
+  { 0x00fef5, 13116 },
+  { 0x00fef6, 13130 },
+  { 0x00fef7, 13144 },
+  { 0x00fef8, 13158 },
+  { 0x00fefd, 13250 },
+  { 0x00fef4, 13098 },
+  { 0x00fef9, 13172 },
+  { 0x00fee0, 12769 },
+  { 0x00fee1, 12782 },
+  { 0x00fee2, 12796 },
+  { 0x00fee4, 12820 },
+  { 0x00fee5, 12835 },
+  { 0x00fed1, 12692 },
+  { 0x00ff3e, 13685 },
+  { 0x00ff61, 13788 },
+  { 0x00ff55, 13750 },
+  { 0x000051, 239 },
+  { 0x000052, 241 },
+  { 0x0001c0, 1466 },
+  { 0x0001d8, 1558 },
+  { 0x0003a3, 1962 },
+  { 0x00ff66, 13814 },
+  { 0x00fe72, 12510 },
+  { 0x00ff0d, 13293 },
+  { 0x00ff53, 13731 },
+  { 0x00ff24, 13377 },
+  { 0x0020a8, 11110 },
+  { 0x000053, 243 },
+  { 0x0001a6, 1310 },
+  { 0x0001a9, 1317 },
+  { 0x0001aa, 1324 },
+  { 0x0002de, 1877 },
+  { 0x00ff14, 13306 },
+  { 0x00ff60, 13781 },
+  { 0x0006b1, 3786 },
+  { 0x0006bf, 4045 },
+  { 0x0006b8, 3923 },
+  { 0x0006b9, 3947 },
+  { 0x0006ba, 3972 },
+  { 0x0006bb, 3984 },
+  { 0x0006a1, 3504 },
+  { 0x0006af, 3763 },
+  { 0x0006a8, 3641 },
+  { 0x0006a9, 3665 },
+  { 0x0006aa, 3690 },
+  { 0x0006ab, 3702 },
+  { 0x00ffe1, 14385 },
+  { 0x00ffe6, 14431 },
+  { 0x00ffe2, 14393 },
+  { 0x00ff3c, 13651 },
+  { 0x00fe73, 12528 },
+  { 0x00fe75, 12562 },
+  { 0x00ffeb, 14468 },
+  { 0x00ffec, 14476 },
+  { 0x00ff15, 13318 },
+  { 0x000054, 245 },
+  { 0x0000de, 994 },
+  { 0x00ff09, 13274 },
+  { 0x0001ab, 1333 },
+  { 0x0001de, 1584 },
+  { 0x00fed5, 12752 },
+  { 0x000ddf, 9260 },
+  { 0x000dba, 8843 },
+  { 0x000da8, 8607 },
+  { 0x000daa, 8634 },
+  { 0x000da9, 8620 },
+  { 0x000dac, 8658 },
+  { 0x000dae, 8683 },
+  { 0x000db4, 8768 },
+  { 0x000dbd, 8882 },
+  { 0x000dbf, 8905 },
+  { 0x000dcb, 9039 },
+  { 0x000dce, 9073 },
+  { 0x000da2, 8525 },
+  { 0x000da5, 8566 },
+  { 0x000da3, 8538 },
+  { 0x000da4, 8552 },
+  { 0x000da6, 8579 },
+  { 0x000da1, 8514 },
+  { 0x000de5, 9343 },
+  { 0x000df7, 9556 },
+  { 0x000df5, 9533 },
+  { 0x000df6, 9544 },
+  { 0x000df9, 9582 },
+  { 0x000df1, 9484 },
+  { 0x000df8, 9569 },
+  { 0x000df3, 9510 },
+  { 0x000df4, 9522 },
+  { 0x000df2, 9497 },
+  { 0x000df0, 9472 },
+  { 0x000dcc, 9050 },
+  { 0x000dc5, 8972 },
+  { 0x000dc6, 8984 },
+  { 0x000deb, 9424 },
+  { 0x000de8, 9389 },
+  { 0x000dd1, 9113 },
+  { 0x000dde, 9237 },
+  { 0x000de7, 9374 },
+  { 0x000de9, 9400 },
+  { 0x000dea, 9412 },
+  { 0x000de6, 9360 },
+  { 0x000dc1, 8932 },
+  { 0x000da7, 8595 },
+  { 0x000ded, 9458 },
+  { 0x000db3, 8757 },
+  { 0x000db9, 8833 },
+  { 0x000dcd, 9063 },
+  { 0x000dcf, 9087 },
+  { 0x000dda, 9224 },
+  { 0x000dbe, 8892 },
+  { 0x000dbc, 8868 },
+  { 0x000dc0, 8916 },
+  { 0x000dbb, 8857 },
+  { 0x000dc3, 8953 },
+  { 0x000dc4, 8964 },
+  { 0x000dd0, 9102 },
+  { 0x000dd2, 9129 },
+  { 0x000de1, 9281 },
+  { 0x000de4, 9323 },
+  { 0x000de3, 9304 },
+  { 0x000dd3, 9141 },
+  { 0x000de0, 9270 },
+  { 0x000dd4, 9153 },
+  { 0x000dd5, 9164 },
+  { 0x000de2, 9293 },
+  { 0x000dd8, 9201 },
+  { 0x000dd6, 9176 },
+  { 0x000dd7, 9188 },
+  { 0x000dd9, 9212 },
+  { 0x000dc9, 9016 },
+  { 0x000dc8, 9004 },
+  { 0x000dab, 8648 },
+  { 0x000dca, 9028 },
+  { 0x000dec, 9441 },
+  { 0x000db1, 8722 },
+  { 0x000db2, 8741 },
+  { 0x000db7, 8804 },
+  { 0x000db0, 8709 },
+  { 0x000db8, 8819 },
+  { 0x000db6, 8790 },
+  { 0x000daf, 8696 },
+  { 0x000db5, 8779 },
+  { 0x000dc7, 8992 },
+  { 0x000dc2, 8942 },
+  { 0x000dad, 8671 },
+  { 0x0000de, 1000 },
+  { 0x00ff2b, 13452 },
+  { 0x0003ac, 2004 },
+  { 0x000055, 247 },
+  { 0x0000da, 957 },
+  { 0x0002dd, 1870 },
+  { 0x0000db, 964 },
+  { 0x0000dc, 976 },
+  { 0x0001db, 1571 },
+  { 0x0000d9, 950 },
+  { 0x0006b6, 3863 },
+  { 0x0006b4, 3824 },
+  { 0x0006b7, 3886 },
+  { 0x0006a6, 3581 },
+  { 0x0006a4, 3542 },
+  { 0x0006a7, 3604 },
+  { 0x0006b6, 3875 },
+  { 0x0006b4, 3837 },
+  { 0x0006b7, 3899 },
+  { 0x0006a6, 3593 },
+  { 0x0006a4, 3555 },
+  { 0x0006a7, 3617 },
+  { 0x0003de, 2143 },
+  { 0x00ff65, 13809 },
+  { 0x0003d9, 2128 },
+  { 0x00ff52, 13728 },
+  { 0x0001d9, 1565 },
+  { 0x0003dd, 2136 },
+  { 0x000056, 249 },
+  { 0xffffff, 14507 },
+  { 0x000057, 251 },
+  { 0x0020a9, 11120 },
+  { 0x000058, 253 },
+  { 0x000059, 255 },
+  { 0x0000dd, 987 },
+  { 0x0013be, 11018 },
+  { 0x00005a, 257 },
+  { 0x0001af, 1354 },
+  { 0x0001ac, 1340 },
+  { 0x0001ae, 1347 },
+  { 0x00ff28, 13420 },
+  { 0x00ff2a, 13436 },
+  { 0x000061, 333 },
+  { 0x0000e1, 1020 },
+  { 0x0001ff, 1720 },
+  { 0x0001e3, 1600 },
+  { 0x0000e2, 1027 },
+  { 0x0000b4, 612 },
+  { 0x0000e4, 1046 },
+  { 0x0000e6, 1063 },
+  { 0x0000e0, 1013 },
+  { 0x0003e0, 2151 },
+  { 0x000026, 48 },
+  { 0x0001b1, 1364 },
+  { 0x000027, 58 },
+  { 0x0008c8, 6376 },
+  { 0x0000e5, 1057 },
+  { 0x00005e, 294 },
+  { 0x00007e, 410 },
+  { 0x00002a, 101 },
+  { 0x000040, 204 },
+  { 0x0000e3, 1039 },
+  { 0x000062, 335 },
+  { 0x00005c, 271 },
+  { 0x000af4, 7692 },
+  { 0x00007c, 395 },
+  { 0x0009df, 6562 },
+  { 0x0008a5, 5952 },
+  { 0x0008ac, 6062 },
+  { 0x0008a8, 5995 },
+  { 0x0008b2, 6166 },
+  { 0x0008ae, 6091 },
+  { 0x0008aa, 6030 },
+  { 0x0008b6, 6253 },
+  { 0x0009f6, 6770 },
+  { 0x0008b4, 6209 },
+  { 0x00007b, 385 },
+  { 0x00007d, 399 },
+  { 0x00005b, 259 },
+  { 0x00005d, 281 },
+  { 0x0001a2, 1289 },
+  { 0x0000a6, 472 },
+  { 0x000063, 337 },
+  { 0x0002e5, 1889 },
+  { 0x0001e6, 1614 },
+  { 0x000ab8, 6996 },
+  { 0x000afc, 7801 },
+  { 0x0001b7, 1401 },
+  { 0x0001e8, 1621 },
+  { 0x0000e7, 1066 },
+  { 0x0002e6, 1899 },
+  { 0x0000b8, 646 },
+  { 0x0000a2, 445 },
+  { 0x0009e1, 6581 },
+  { 0x000af3, 7682 },
+  { 0x000bcf, 7950 },
+  { 0x000aec, 7630 },
+  { 0x00003a, 160 },
+  { 0x00002c, 115 },
+  { 0x0000a9, 500 },
+  { 0x0009e4, 6600 },
+  { 0x0009ee, 6668 },
+  { 0x0000a4, 459 },
+  { 0x000aff, 7845 },
+  { 0x000064, 339 },
+  { 0x000af1, 7662 },
+  { 0x0001ef, 1643 },
+  { 0x00fe56, 12290 },
+  { 0x00fe58, 12319 },
+  { 0x00fe51, 12229 },
+  { 0x00fe60, 12437 },
+  { 0x00fe55, 12279 },
+  { 0x00fe5a, 12351 },
+  { 0x00fe5b, 12362 },
+  { 0x00fe52, 12240 },
+  { 0x00fe57, 12304 },
+  { 0x00fe59, 12334 },
+  { 0x00fe50, 12218 },
+  { 0x00fe61, 12451 },
+  { 0x00fe62, 12461 },
+  { 0x00fe5d, 12387 },
+  { 0x00fe54, 12267 },
+  { 0x00fe5c, 12375 },
+  { 0x00fe5f, 12415 },
+  { 0x00fe53, 12256 },
+  { 0x00fe5e, 12397 },
+  { 0x000abd, 7028 },
+  { 0x0000b0, 569 },
+  { 0x0000a8, 490 },
+  { 0x000aed, 7635 },
+  { 0x000aa5, 6822 },
+  { 0x0000f7, 1204 },
+  { 0x000024, 33 },
+  { 0x000aaf, 6899 },
+  { 0x0001bd, 1437 },
+  { 0x000af2, 7669 },
+  { 0x000afe, 7826 },
+  { 0x0008fe, 6552 },
+  { 0x000ba8, 7873 },
+  { 0x000bd6, 7965 },
+  { 0x000bc4, 7915 },
+  { 0x000bc2, 7899 },
+  { 0x0001f0, 1650 },
+  { 0x000065, 341 },
+  { 0x0003ec, 2167 },
+  { 0x0000e9, 1082 },
+  { 0x0001ec, 1636 },
+  { 0x0000ea, 1089 },
+  { 0x0000eb, 1101 },
+  { 0x0000e8, 1075 },
+  { 0x000aae, 6890 },
+  { 0x000aa3, 6804 },
+  { 0x000aa4, 6813 },
+  { 0x0003ba, 2036 },
+  { 0x000aa9, 6864 },
+  { 0x000ade, 7409 },
+  { 0x000adf, 7424 },
+  { 0x000ace, 7191 },
+  { 0x000acf, 7204 },
+  { 0x000aa1, 6788 },
+  { 0x000aaa, 6871 },
+  { 0x000ae6, 7531 },
+  { 0x000ae7, 7550 },
+  { 0x0003bf, 2064 },
+  { 0x000ae0, 7437 },
+  { 0x000ae1, 7454 },
+  { 0x000aa2, 6796 },
+  { 0x0001ea, 1628 },
+  { 0x00003d, 181 },
+  { 0x0000f0, 1149 },
+  { 0x000021, 6 },
+  { 0x0000a1, 434 },
+  { 0x000066, 343 },
+  { 0x000af8, 7740 },
+  { 0x0009e3, 6597 },
+  { 0x000abb, 7003 },
+  { 0x000adc, 7368 },
+  { 0x000adb, 7351 },
+  { 0x000add, 7388 },
+  { 0x000ae9, 7585 },
+  { 0x000ae8, 7567 },
+  { 0x000ac5, 7089 },
+  { 0x000ab7, 6985 },
+  { 0x000ab5, 6965 },
+  { 0x0008f6, 6514 },
+  { 0x000067, 345 },
+  { 0x0002f5, 1911 },
+  { 0x0002bb, 1807 },
+  { 0x0003bb, 2044 },
+  { 0x0002f8, 1921 },
+  { 0x000060, 317 },
+  { 0x00003e, 187 },
+  { 0x0008be, 6315 },
+  { 0x0000ab, 522 },
+  { 0x0000bb, 676 },
+  { 0x000068, 347 },
+  { 0x000aa8, 6854 },
+  { 0x0002b6, 1786 },
+  { 0x000aee, 7643 },
+  { 0x000ce0, 8033 },
+  { 0x000cf2, 8350 },
+  { 0x000ce1, 8046 },
+  { 0x000ce1, 8057 },
+  { 0x000ce7, 8169 },
+  { 0x000ce3, 8096 },
+  { 0x000ce3, 8109 },
+  { 0x000cdf, 8012 },
+  { 0x000cea, 8226 },
+  { 0x000ced, 8268 },
+  { 0x000cef, 8295 },
+  { 0x000cf3, 8362 },
+  { 0x000cf5, 8387 },
+  { 0x000cf5, 8404 },
+  { 0x000ce2, 8069 },
+  { 0x000ce2, 8082 },
+  { 0x000ce4, 8123 },
+  { 0x000ce7, 8181 },
+  { 0x000ceb, 8243 },
+  { 0x000cf7, 8445 },
+  { 0x000cec, 8255 },
+  { 0x000cee, 8284 },
+  { 0x000cf0, 8311 },
+  { 0x000cf4, 8377 },
+  { 0x000cf7, 8456 },
+  { 0x000cf8, 8468 },
+  { 0x000cf1, 8322 },
+  { 0x000cf1, 8336 },
+  { 0x000cf9, 8480 },
+  { 0x000cfa, 8492 },
+  { 0x000cfa, 8503 },
+  { 0x000ce8, 8192 },
+  { 0x000ce8, 8203 },
+  { 0x000ce5, 8133 },
+  { 0x000ce9, 8215 },
+  { 0x000cf6, 8421 },
+  { 0x000cf6, 8433 },
+  { 0x000ce6, 8144 },
+  { 0x000ce6, 8156 },
+  { 0x000ada, 7342 },
+  { 0x0008a3, 5925 },
+  { 0x0009ef, 6682 },
+  { 0x0009f0, 6697 },
+  { 0x0009f1, 6712 },
+  { 0x0009f2, 6727 },
+  { 0x0009f3, 6742 },
+  { 0x0002b1, 1778 },
+  { 0x0009e2, 6594 },
+  { 0x0000ad, 544 },
+  { 0x000069, 349 },
+  { 0x0000ed, 1119 },
+  { 0x0000ee, 1126 },
+  { 0x0008cf, 6418 },
+  { 0x0000ef, 1138 },
+  { 0x0002b9, 1798 },
+  { 0x0008cd, 6401 },
+  { 0x0000ec, 1112 },
+  { 0x0003ef, 2177 },
+  { 0x0008ce, 6410 },
+  { 0x0008da, 6436 },
+  { 0x0008db, 6447 },
+  { 0x0008c2, 6361 },
+  { 0x0008bf, 6332 },
+  { 0x0008dc, 6456 },
+  { 0x0003e7, 2159 },
+  { 0x0003b5, 2020 },
+  { 0x00006a, 351 },
+  { 0x0002bc, 1814 },
+  { 0x000bca, 7934 },
+  { 0x00006b, 353 },
+  { 0x0004b1, 2439 },
+  { 0x0004c1, 2563 },
+  { 0x0004b4, 2460 },
+  { 0x0004cc, 2669 },
+  { 0x0004ca, 2653 },
+  { 0x0004cd, 2685 },
+  { 0x0004cb, 2661 },
+  { 0x0004ce, 2693 },
+  { 0x0004cc, 2677 },
+  { 0x0004b2, 2446 },
+  { 0x0004b6, 2474 },
+  { 0x0004b9, 2498 },
+  { 0x0004b7, 2482 },
+  { 0x0004ba, 2506 },
+  { 0x0004b8, 2490 },
+  { 0x0004cf, 2701 },
+  { 0x0004d2, 2725 },
+  { 0x0004d0, 2709 },
+  { 0x0004d3, 2733 },
+  { 0x0004d1, 2717 },
+  { 0x0004dd, 2813 },
+  { 0x0004c5, 2613 },
+  { 0x0004c8, 2637 },
+  { 0x0004c6, 2621 },
+  { 0x0004c9, 2645 },
+  { 0x0004c7, 2629 },
+  { 0x0004b5, 2467 },
+  { 0x0004d7, 2765 },
+  { 0x0004da, 2789 },
+  { 0x0004d8, 2773 },
+  { 0x0004db, 2797 },
+  { 0x0004d9, 2781 },
+  { 0x0004bb, 2514 },
+  { 0x0004be, 2539 },
+  { 0x0004bc, 2522 },
+  { 0x0004bf, 2547 },
+  { 0x0004bd, 2531 },
+  { 0x0004c0, 2555 },
+  { 0x0004c3, 2597 },
+  { 0x0004c1, 2572 },
+  { 0x0004c4, 2605 },
+  { 0x0004c2, 2580 },
+  { 0x0004c2, 2589 },
+  { 0x0004b3, 2453 },
+  { 0x0004dc, 2805 },
+  { 0x0004a6, 2340 },
+  { 0x0004d4, 2741 },
+  { 0x0004d6, 2757 },
+  { 0x0004d5, 2749 },
+  { 0x0004a7, 2348 },
+  { 0x0004a3, 2277 },
+  { 0x0004a4, 2297 },
+  { 0x0004a5, 2308 },
+  { 0x0004aa, 2369 },
+  { 0x0004a1, 2243 },
+  { 0x0004a8, 2355 },
+  { 0x0004a5, 2325 },
+  { 0x0004ab, 2376 },
+  { 0x0004a2, 2257 },
+  { 0x00ff7e, 13930 },
+  { 0x0004af, 2407 },
+  { 0x0004af, 2416 },
+  { 0x0004a9, 2362 },
+  { 0x0004ac, 2383 },
+  { 0x0004ae, 2399 },
+  { 0x0004ad, 2391 },
+  { 0x0003a2, 1952 },
+  { 0x0003f3, 2202 },
+  { 0x0003a2, 1958 },
+  { 0x00006c, 355 },
+  { 0x0001e5, 1607 },
+  { 0x000ad9, 7331 },
+  { 0x0001b5, 1387 },
+  { 0x0003b6, 2027 },
+  { 0x000abc, 7011 },
+  { 0x0008fb, 6523 },
+  { 0x000ba3, 7852 },
+  { 0x000ad2, 7261 },
+  { 0x0008af, 6106 },
+  { 0x000acc, 7156 },
+  { 0x000aea, 7605 },
+  { 0x0008a1, 5898 },
+  { 0x000bda, 7984 },
+  { 0x000ad0, 7220 },
+  { 0x0009f4, 6757 },
+  { 0x000bdc, 7993 },
+  { 0x00003c, 176 },
+  { 0x0008bc, 6292 },
+  { 0x0009e5, 6603 },
+  { 0x0008de, 6475 },
+  { 0x0008df, 6486 },
+  { 0x0009ed, 6654 },
+  { 0x0009ea, 6612 },
+  { 0x0001b3, 1379 },
+  { 0x00006d, 357 },
+  { 0x0000af, 562 },
+  { 0x000af7, 7729 },
+  { 0x000af0, 7649 },
+  { 0x000abf, 7059 },
+  { 0x0000ba, 666 },
+  { 0x00002d, 121 },
+  { 0x000ad6, 7315 },
+  { 0x0000b5, 618 },
+  { 0x0000d7, 932 },
+  { 0x000af6, 7717 },
+  { 0x000af5, 7704 },
+  { 0x00006e, 359 },
+  { 0x0008c5, 6370 },
+  { 0x0001f1, 1658 },
+  { 0x0001f2, 1665 },
+  { 0x0003f1, 2185 },
+  { 0x0009e8, 6606 },
+  { 0x0000a0, 421 },
+  { 0x0008bd, 6306 },
+  { 0x0000ac, 536 },
+  { 0x0000f1, 1153 },
+  { 0x000023, 22 },
+  { 0x0006b0, 3775 },
+  { 0x00006f, 361 },
+  { 0x0000f3, 1167 },
+  { 0x0000f4, 1174 },
+  { 0x0000f6, 1193 },
+  { 0x0001f5, 1672 },
+  { 0x0013bd, 11015 },
+  { 0x0001b2, 1372 },
+  { 0x0000f2, 1160 },
+  { 0x0003f2, 2194 },
+  { 0x000ac3, 7066 },
+  { 0x000ab2, 6934 },
+  { 0x0000bd, 702 },
+  { 0x0000bc, 691 },
+  { 0x000ab6, 6976 },
+  { 0x0000b9, 654 },
+  { 0x000ab0, 6915 },
+  { 0x000ae2, 7473 },
+  { 0x000ae5, 7522 },
+  { 0x000ae4, 7504 },
+  { 0x000ae3, 7488 },
+  { 0x0000aa, 510 },
+  { 0x0000f8, 1213 },
+  { 0x0000f5, 1186 },
+  { 0x000bc0, 7891 },
+  { 0x00047e, 2234 },
+  { 0x000070, 363 },
+  { 0x0000b6, 621 },
+  { 0x000028, 80 },
+  { 0x000029, 90 },
+  { 0x0008ef, 6496 },
+  { 0x000025, 40 },
+  { 0x00002e, 127 },
+  { 0x0000b7, 631 },
+  { 0x000afb, 7781 },
+  { 0x00002b, 110 },
+  { 0x0000b1, 576 },
+  { 0x000ad4, 7302 },
+  { 0x0004b0, 2424 },
+  { 0x000aa6, 6833 },
+  { 0x000071, 365 },
+  { 0x000bcc, 7938 },
+  { 0x00003f, 195 },
+  { 0x0000bf, 724 },
+  { 0x000022, 13 },
+  { 0x000060, 323 },
+  { 0x000027, 69 },
+  { 0x000072, 367 },
+  { 0x0001e0, 1593 },
+  { 0x0008d6, 6428 },
+  { 0x0001f8, 1685 },
+  { 0x0003b3, 2011 },
+  { 0x0000ae, 551 },
+  { 0x000abe, 7041 },
+  { 0x0008fd, 6541 },
+  { 0x000ba6, 7862 },
+  { 0x000ad3, 7281 },
+  { 0x0008b0, 6127 },
+  { 0x0008b7, 6271 },
+  { 0x000acd, 7173 },
+  { 0x000aeb, 7617 },
+  { 0x000bd8, 7974 },
+  { 0x000ad1, 7240 },
+  { 0x0009f5, 6763 },
+  { 0x000bfc, 8002 },
+  { 0x000073, 369 },
+  { 0x0001b6, 1394 },
+  { 0x0001b9, 1407 },
+  { 0x0001ba, 1414 },
+  { 0x0002fe, 1940 },
+  { 0x00ff7e, 13942 },
+  { 0x000ad7, 7323 },
+  { 0x0000a7, 482 },
+  { 0x00003b, 166 },
+  { 0x0004df, 2832 },
+  { 0x000ac6, 7101 },
+  { 0x000aca, 7124 },
+  { 0x000aac, 6878 },
+  { 0x0008c9, 6388 },
+  { 0x000afd, 7807 },
+  { 0x00002f, 134 },
+  { 0x0009e0, 6568 },
+  { 0x000020, 0 },
+  { 0x0000df, 1006 },
+  { 0x0000a3, 450 },
+  { 0x000074, 371 },
+  { 0x0001bb, 1423 },
+  { 0x0001fe, 1711 },
+  { 0x000af9, 7753 },
+  { 0x000afa, 7763 },
+  { 0x0008c0, 6341 },
+  { 0x000aa7, 6844 },
+  { 0x0000fe, 1264 },
+  { 0x000ac4, 7076 },
+  { 0x000ab4, 6953 },
+  { 0x0000be, 710 },
+  { 0x0000b3, 598 },
+  { 0x0008a4, 5940 },
+  { 0x0008ab, 6048 },
+  { 0x0008a2, 5910 },
+  { 0x0008a7, 5978 },
+  { 0x0008b1, 6149 },
+  { 0x0008ad, 6076 },
+  { 0x0008a9, 6012 },
+  { 0x0008b5, 6235 },
+  { 0x0009f7, 6775 },
+  { 0x0008b3, 6183 },
+  { 0x000ac9, 7114 },
+  { 0x000acb, 7138 },
+  { 0x0003bc, 2053 },
+  { 0x000ab3, 6943 },
+  { 0x0000b2, 586 },
+  { 0x000ab1, 6924 },
+  { 0x000075, 373 },
+  { 0x0000fa, 1227 },
+  { 0x0002fd, 1933 },
+  { 0x0000fb, 1234 },
+  { 0x0000fc, 1246 },
+  { 0x0001fb, 1698 },
+  { 0x0000f9, 1220 },
+  { 0x0003fe, 2226 },
+  { 0x000bc6, 7925 },
+  { 0x00005f, 306 },
+  { 0x0008dd, 6469 },
+  { 0x0003f9, 2211 },
+  { 0x0008fc, 6533 },
+  { 0x000ba9, 7883 },
+  { 0x0009ec, 6641 },
+  { 0x0009eb, 6627 },
+  { 0x000bc3, 7908 },
+  { 0x000bd3, 7957 },
+  { 0x000bce, 7943 },
+  { 0x0001f9, 1692 },
+  { 0x0003fd, 2219 },
+  { 0x000076, 375 },
+  { 0x0008c1, 6351 },
+  { 0x0009f8, 6780 },
+  { 0x0008a6, 5964 },
+  { 0x0004de, 2820 },
+  { 0x0009e9, 6609 },
+  { 0x000077, 377 },
+  { 0x000078, 379 },
+  { 0x000079, 381 },
+  { 0x0000fd, 1257 },
+  { 0x0000ff, 1270 },
+  { 0x0000a5, 468 },
+  { 0x00007a, 383 },
+  { 0x0001bf, 1456 },
+  { 0x0001bc, 1430 },
+  { 0x0001be, 1449 }
+};
diff --git a/gdk/keynames.txt b/gdk/keynames.txt
new file mode 100644 (file)
index 0000000..05cbee0
--- /dev/null
@@ -0,0 +1,1306 @@
+0x000020 space
+0x000021 exclam
+0x000022 quotedbl
+0x000023 numbersign
+0x000024 dollar
+0x000025 percent
+0x000026 ampersand
+0x000027 apostrophe
+0x000027 quoteright
+0x000028 parenleft
+0x000029 parenright
+0x00002a asterisk
+0x00002b plus
+0x00002c comma
+0x00002d minus
+0x00002e period
+0x00002f slash
+0x000030 0
+0x000031 1
+0x000032 2
+0x000033 3
+0x000034 4
+0x000035 5
+0x000036 6
+0x000037 7
+0x000038 8
+0x000039 9
+0x00003a colon
+0x00003b semicolon
+0x00003c less
+0x00003d equal
+0x00003e greater
+0x00003f question
+0x000040 at
+0x000041 A
+0x000042 B
+0x000043 C
+0x000044 D
+0x000045 E
+0x000046 F
+0x000047 G
+0x000048 H
+0x000049 I
+0x00004a J
+0x00004b K
+0x00004c L
+0x00004d M
+0x00004e N
+0x00004f O
+0x000050 P
+0x000051 Q
+0x000052 R
+0x000053 S
+0x000054 T
+0x000055 U
+0x000056 V
+0x000057 W
+0x000058 X
+0x000059 Y
+0x00005a Z
+0x00005b bracketleft
+0x00005c backslash
+0x00005d bracketright
+0x00005e asciicircum
+0x00005f underscore
+0x000060 grave
+0x000060 quoteleft
+0x000061 a
+0x000062 b
+0x000063 c
+0x000064 d
+0x000065 e
+0x000066 f
+0x000067 g
+0x000068 h
+0x000069 i
+0x00006a j
+0x00006b k
+0x00006c l
+0x00006d m
+0x00006e n
+0x00006f o
+0x000070 p
+0x000071 q
+0x000072 r
+0x000073 s
+0x000074 t
+0x000075 u
+0x000076 v
+0x000077 w
+0x000078 x
+0x000079 y
+0x00007a z
+0x00007b braceleft
+0x00007c bar
+0x00007d braceright
+0x00007e asciitilde
+0x0000a0 nobreakspace
+0x0000a1 exclamdown
+0x0000a2 cent
+0x0000a3 sterling
+0x0000a4 currency
+0x0000a5 yen
+0x0000a6 brokenbar
+0x0000a7 section
+0x0000a8 diaeresis
+0x0000a9 copyright
+0x0000aa ordfeminine
+0x0000ab guillemotleft
+0x0000ac notsign
+0x0000ad hyphen
+0x0000ae registered
+0x0000af macron
+0x0000b0 degree
+0x0000b1 plusminus
+0x0000b2 twosuperior
+0x0000b3 threesuperior
+0x0000b4 acute
+0x0000b5 mu
+0x0000b6 paragraph
+0x0000b7 periodcentered
+0x0000b8 cedilla
+0x0000b9 onesuperior
+0x0000ba masculine
+0x0000bb guillemotright
+0x0000bc onequarter
+0x0000bd onehalf
+0x0000be threequarters
+0x0000bf questiondown
+0x0000c0 Agrave
+0x0000c1 Aacute
+0x0000c2 Acircumflex
+0x0000c3 Atilde
+0x0000c4 Adiaeresis
+0x0000c5 Aring
+0x0000c6 AE
+0x0000c7 Ccedilla
+0x0000c8 Egrave
+0x0000c9 Eacute
+0x0000ca Ecircumflex
+0x0000cb Ediaeresis
+0x0000cc Igrave
+0x0000cd Iacute
+0x0000ce Icircumflex
+0x0000cf Idiaeresis
+0x0000d0 ETH
+0x0000d0 Eth
+0x0000d1 Ntilde
+0x0000d2 Ograve
+0x0000d3 Oacute
+0x0000d4 Ocircumflex
+0x0000d5 Otilde
+0x0000d6 Odiaeresis
+0x0000d7 multiply
+0x0000d8 Ooblique
+0x0000d9 Ugrave
+0x0000da Uacute
+0x0000db Ucircumflex
+0x0000dc Udiaeresis
+0x0000dd Yacute
+0x0000de THORN
+0x0000de Thorn
+0x0000df ssharp
+0x0000e0 agrave
+0x0000e1 aacute
+0x0000e2 acircumflex
+0x0000e3 atilde
+0x0000e4 adiaeresis
+0x0000e5 aring
+0x0000e6 ae
+0x0000e7 ccedilla
+0x0000e8 egrave
+0x0000e9 eacute
+0x0000ea ecircumflex
+0x0000eb ediaeresis
+0x0000ec igrave
+0x0000ed iacute
+0x0000ee icircumflex
+0x0000ef idiaeresis
+0x0000f0 eth
+0x0000f1 ntilde
+0x0000f2 ograve
+0x0000f3 oacute
+0x0000f4 ocircumflex
+0x0000f5 otilde
+0x0000f6 odiaeresis
+0x0000f7 division
+0x0000f8 oslash
+0x0000f9 ugrave
+0x0000fa uacute
+0x0000fb ucircumflex
+0x0000fc udiaeresis
+0x0000fd yacute
+0x0000fe thorn
+0x0000ff ydiaeresis
+0x0001a1 Aogonek
+0x0001a2 breve
+0x0001a3 Lstroke
+0x0001a5 Lcaron
+0x0001a6 Sacute
+0x0001a9 Scaron
+0x0001aa Scedilla
+0x0001ab Tcaron
+0x0001ac Zacute
+0x0001ae Zcaron
+0x0001af Zabovedot
+0x0001b1 aogonek
+0x0001b2 ogonek
+0x0001b3 lstroke
+0x0001b5 lcaron
+0x0001b6 sacute
+0x0001b7 caron
+0x0001b9 scaron
+0x0001ba scedilla
+0x0001bb tcaron
+0x0001bc zacute
+0x0001bd doubleacute
+0x0001be zcaron
+0x0001bf zabovedot
+0x0001c0 Racute
+0x0001c3 Abreve
+0x0001c5 Lacute
+0x0001c6 Cacute
+0x0001c8 Ccaron
+0x0001ca Eogonek
+0x0001cc Ecaron
+0x0001cf Dcaron
+0x0001d0 Dstroke
+0x0001d1 Nacute
+0x0001d2 Ncaron
+0x0001d5 Odoubleacute
+0x0001d8 Rcaron
+0x0001d9 Uring
+0x0001db Udoubleacute
+0x0001de Tcedilla
+0x0001e0 racute
+0x0001e3 abreve
+0x0001e5 lacute
+0x0001e6 cacute
+0x0001e8 ccaron
+0x0001ea eogonek
+0x0001ec ecaron
+0x0001ef dcaron
+0x0001f0 dstroke
+0x0001f1 nacute
+0x0001f2 ncaron
+0x0001f5 odoubleacute
+0x0001f8 rcaron
+0x0001f9 uring
+0x0001fb udoubleacute
+0x0001fe tcedilla
+0x0001ff abovedot
+0x0002a1 Hstroke
+0x0002a6 Hcircumflex
+0x0002a9 Iabovedot
+0x0002ab Gbreve
+0x0002ac Jcircumflex
+0x0002b1 hstroke
+0x0002b6 hcircumflex
+0x0002b9 idotless
+0x0002bb gbreve
+0x0002bc jcircumflex
+0x0002c5 Cabovedot
+0x0002c6 Ccircumflex
+0x0002d5 Gabovedot
+0x0002d8 Gcircumflex
+0x0002dd Ubreve
+0x0002de Scircumflex
+0x0002e5 cabovedot
+0x0002e6 ccircumflex
+0x0002f5 gabovedot
+0x0002f8 gcircumflex
+0x0002fd ubreve
+0x0002fe scircumflex
+0x0003a2 kappa
+0x0003a2 kra
+0x0003a3 Rcedilla
+0x0003a5 Itilde
+0x0003a6 Lcedilla
+0x0003aa Emacron
+0x0003ab Gcedilla
+0x0003ac Tslash
+0x0003b3 rcedilla
+0x0003b5 itilde
+0x0003b6 lcedilla
+0x0003ba emacron
+0x0003bb gcedilla
+0x0003bc tslash
+0x0003bd ENG
+0x0003bf eng
+0x0003c0 Amacron
+0x0003c7 Iogonek
+0x0003cc Eabovedot
+0x0003cf Imacron
+0x0003d1 Ncedilla
+0x0003d2 Omacron
+0x0003d3 Kcedilla
+0x0003d9 Uogonek
+0x0003dd Utilde
+0x0003de Umacron
+0x0003e0 amacron
+0x0003e7 iogonek
+0x0003ec eabovedot
+0x0003ef imacron
+0x0003f1 ncedilla
+0x0003f2 omacron
+0x0003f3 kcedilla
+0x0003f9 uogonek
+0x0003fd utilde
+0x0003fe umacron
+0x00047e overline
+0x0004a1 kana_fullstop
+0x0004a2 kana_openingbracket
+0x0004a3 kana_closingbracket
+0x0004a4 kana_comma
+0x0004a5 kana_conjunctive
+0x0004a5 kana_middledot
+0x0004a6 kana_WO
+0x0004a7 kana_a
+0x0004a8 kana_i
+0x0004a9 kana_u
+0x0004aa kana_e
+0x0004ab kana_o
+0x0004ac kana_ya
+0x0004ad kana_yu
+0x0004ae kana_yo
+0x0004af kana_tsu
+0x0004af kana_tu
+0x0004b0 prolongedsound
+0x0004b1 kana_A
+0x0004b2 kana_I
+0x0004b3 kana_U
+0x0004b4 kana_E
+0x0004b5 kana_O
+0x0004b6 kana_KA
+0x0004b7 kana_KI
+0x0004b8 kana_KU
+0x0004b9 kana_KE
+0x0004ba kana_KO
+0x0004bb kana_SA
+0x0004bc kana_SHI
+0x0004bd kana_SU
+0x0004be kana_SE
+0x0004bf kana_SO
+0x0004c0 kana_TA
+0x0004c1 kana_CHI
+0x0004c1 kana_TI
+0x0004c2 kana_TSU
+0x0004c2 kana_TU
+0x0004c3 kana_TE
+0x0004c4 kana_TO
+0x0004c5 kana_NA
+0x0004c6 kana_NI
+0x0004c7 kana_NU
+0x0004c8 kana_NE
+0x0004c9 kana_NO
+0x0004ca kana_HA
+0x0004cb kana_HI
+0x0004cc kana_FU
+0x0004cc kana_HU
+0x0004cd kana_HE
+0x0004ce kana_HO
+0x0004cf kana_MA
+0x0004d0 kana_MI
+0x0004d1 kana_MU
+0x0004d2 kana_ME
+0x0004d3 kana_MO
+0x0004d4 kana_YA
+0x0004d5 kana_YU
+0x0004d6 kana_YO
+0x0004d7 kana_RA
+0x0004d8 kana_RI
+0x0004d9 kana_RU
+0x0004da kana_RE
+0x0004db kana_RO
+0x0004dc kana_WA
+0x0004dd kana_N
+0x0004de voicedsound
+0x0004df semivoicedsound
+0x0005ac Arabic_comma
+0x0005bb Arabic_semicolon
+0x0005bf Arabic_question_mark
+0x0005c1 Arabic_hamza
+0x0005c2 Arabic_maddaonalef
+0x0005c3 Arabic_hamzaonalef
+0x0005c4 Arabic_hamzaonwaw
+0x0005c5 Arabic_hamzaunderalef
+0x0005c6 Arabic_hamzaonyeh
+0x0005c7 Arabic_alef
+0x0005c8 Arabic_beh
+0x0005c9 Arabic_tehmarbuta
+0x0005ca Arabic_teh
+0x0005cb Arabic_theh
+0x0005cc Arabic_jeem
+0x0005cd Arabic_hah
+0x0005ce Arabic_khah
+0x0005cf Arabic_dal
+0x0005d0 Arabic_thal
+0x0005d1 Arabic_ra
+0x0005d2 Arabic_zain
+0x0005d3 Arabic_seen
+0x0005d4 Arabic_sheen
+0x0005d5 Arabic_sad
+0x0005d6 Arabic_dad
+0x0005d7 Arabic_tah
+0x0005d8 Arabic_zah
+0x0005d9 Arabic_ain
+0x0005da Arabic_ghain
+0x0005e0 Arabic_tatweel
+0x0005e1 Arabic_feh
+0x0005e2 Arabic_qaf
+0x0005e3 Arabic_kaf
+0x0005e4 Arabic_lam
+0x0005e5 Arabic_meem
+0x0005e6 Arabic_noon
+0x0005e7 Arabic_ha
+0x0005e7 Arabic_heh
+0x0005e8 Arabic_waw
+0x0005e9 Arabic_alefmaksura
+0x0005ea Arabic_yeh
+0x0005eb Arabic_fathatan
+0x0005ec Arabic_dammatan
+0x0005ed Arabic_kasratan
+0x0005ee Arabic_fatha
+0x0005ef Arabic_damma
+0x0005f0 Arabic_kasra
+0x0005f1 Arabic_shadda
+0x0005f2 Arabic_sukun
+0x0006a1 Serbian_dje
+0x0006a2 Macedonia_gje
+0x0006a3 Cyrillic_io
+0x0006a4 Ukrainian_ie
+0x0006a4 Ukranian_je
+0x0006a5 Macedonia_dse
+0x0006a6 Ukrainian_i
+0x0006a6 Ukranian_i
+0x0006a7 Ukrainian_yi
+0x0006a7 Ukranian_yi
+0x0006a8 Cyrillic_je
+0x0006a8 Serbian_je
+0x0006a9 Cyrillic_lje
+0x0006a9 Serbian_lje
+0x0006aa Cyrillic_nje
+0x0006aa Serbian_nje
+0x0006ab Serbian_tshe
+0x0006ac Macedonia_kje
+0x0006ae Byelorussian_shortu
+0x0006af Cyrillic_dzhe
+0x0006af Serbian_dze
+0x0006b0 numerosign
+0x0006b1 Serbian_DJE
+0x0006b2 Macedonia_GJE
+0x0006b3 Cyrillic_IO
+0x0006b4 Ukrainian_IE
+0x0006b4 Ukranian_JE
+0x0006b5 Macedonia_DSE
+0x0006b6 Ukrainian_I
+0x0006b6 Ukranian_I
+0x0006b7 Ukrainian_YI
+0x0006b7 Ukranian_YI
+0x0006b8 Cyrillic_JE
+0x0006b8 Serbian_JE
+0x0006b9 Cyrillic_LJE
+0x0006b9 Serbian_LJE
+0x0006ba Cyrillic_NJE
+0x0006ba Serbian_NJE
+0x0006bb Serbian_TSHE
+0x0006bc Macedonia_KJE
+0x0006be Byelorussian_SHORTU
+0x0006bf Cyrillic_DZHE
+0x0006bf Serbian_DZE
+0x0006c0 Cyrillic_yu
+0x0006c1 Cyrillic_a
+0x0006c2 Cyrillic_be
+0x0006c3 Cyrillic_tse
+0x0006c4 Cyrillic_de
+0x0006c5 Cyrillic_ie
+0x0006c6 Cyrillic_ef
+0x0006c7 Cyrillic_ghe
+0x0006c8 Cyrillic_ha
+0x0006c9 Cyrillic_i
+0x0006ca Cyrillic_shorti
+0x0006cb Cyrillic_ka
+0x0006cc Cyrillic_el
+0x0006cd Cyrillic_em
+0x0006ce Cyrillic_en
+0x0006cf Cyrillic_o
+0x0006d0 Cyrillic_pe
+0x0006d1 Cyrillic_ya
+0x0006d2 Cyrillic_er
+0x0006d3 Cyrillic_es
+0x0006d4 Cyrillic_te
+0x0006d5 Cyrillic_u
+0x0006d6 Cyrillic_zhe
+0x0006d7 Cyrillic_ve
+0x0006d8 Cyrillic_softsign
+0x0006d9 Cyrillic_yeru
+0x0006da Cyrillic_ze
+0x0006db Cyrillic_sha
+0x0006dc Cyrillic_e
+0x0006dd Cyrillic_shcha
+0x0006de Cyrillic_che
+0x0006df Cyrillic_hardsign
+0x0006e0 Cyrillic_YU
+0x0006e1 Cyrillic_A
+0x0006e2 Cyrillic_BE
+0x0006e3 Cyrillic_TSE
+0x0006e4 Cyrillic_DE
+0x0006e5 Cyrillic_IE
+0x0006e6 Cyrillic_EF
+0x0006e7 Cyrillic_GHE
+0x0006e8 Cyrillic_HA
+0x0006e9 Cyrillic_I
+0x0006ea Cyrillic_SHORTI
+0x0006eb Cyrillic_KA
+0x0006ec Cyrillic_EL
+0x0006ed Cyrillic_EM
+0x0006ee Cyrillic_EN
+0x0006ef Cyrillic_O
+0x0006f0 Cyrillic_PE
+0x0006f1 Cyrillic_YA
+0x0006f2 Cyrillic_ER
+0x0006f3 Cyrillic_ES
+0x0006f4 Cyrillic_TE
+0x0006f5 Cyrillic_U
+0x0006f6 Cyrillic_ZHE
+0x0006f7 Cyrillic_VE
+0x0006f8 Cyrillic_SOFTSIGN
+0x0006f9 Cyrillic_YERU
+0x0006fa Cyrillic_ZE
+0x0006fb Cyrillic_SHA
+0x0006fc Cyrillic_E
+0x0006fd Cyrillic_SHCHA
+0x0006fe Cyrillic_CHE
+0x0006ff Cyrillic_HARDSIGN
+0x0007a1 Greek_ALPHAaccent
+0x0007a2 Greek_EPSILONaccent
+0x0007a3 Greek_ETAaccent
+0x0007a4 Greek_IOTAaccent
+0x0007a5 Greek_IOTAdieresis
+0x0007a5 Greek_IOTAdiaeresis
+0x0007a7 Greek_OMICRONaccent
+0x0007a8 Greek_UPSILONaccent
+0x0007a9 Greek_UPSILONdieresis
+0x0007ab Greek_OMEGAaccent
+0x0007ae Greek_accentdieresis
+0x0007af Greek_horizbar
+0x0007b1 Greek_alphaaccent
+0x0007b2 Greek_epsilonaccent
+0x0007b3 Greek_etaaccent
+0x0007b4 Greek_iotaaccent
+0x0007b5 Greek_iotadieresis
+0x0007b6 Greek_iotaaccentdieresis
+0x0007b7 Greek_omicronaccent
+0x0007b8 Greek_upsilonaccent
+0x0007b9 Greek_upsilondieresis
+0x0007ba Greek_upsilonaccentdieresis
+0x0007bb Greek_omegaaccent
+0x0007c1 Greek_ALPHA
+0x0007c2 Greek_BETA
+0x0007c3 Greek_GAMMA
+0x0007c4 Greek_DELTA
+0x0007c5 Greek_EPSILON
+0x0007c6 Greek_ZETA
+0x0007c7 Greek_ETA
+0x0007c8 Greek_THETA
+0x0007c9 Greek_IOTA
+0x0007ca Greek_KAPPA
+0x0007cb Greek_LAMBDA
+0x0007cb Greek_LAMDA
+0x0007cc Greek_MU
+0x0007cd Greek_NU
+0x0007ce Greek_XI
+0x0007cf Greek_OMICRON
+0x0007d0 Greek_PI
+0x0007d1 Greek_RHO
+0x0007d2 Greek_SIGMA
+0x0007d4 Greek_TAU
+0x0007d5 Greek_UPSILON
+0x0007d6 Greek_PHI
+0x0007d7 Greek_CHI
+0x0007d8 Greek_PSI
+0x0007d9 Greek_OMEGA
+0x0007e1 Greek_alpha
+0x0007e2 Greek_beta
+0x0007e3 Greek_gamma
+0x0007e4 Greek_delta
+0x0007e5 Greek_epsilon
+0x0007e6 Greek_zeta
+0x0007e7 Greek_eta
+0x0007e8 Greek_theta
+0x0007e9 Greek_iota
+0x0007ea Greek_kappa
+0x0007eb Greek_lambda
+0x0007eb Greek_lamda
+0x0007ec Greek_mu
+0x0007ed Greek_nu
+0x0007ee Greek_xi
+0x0007ef Greek_omicron
+0x0007f0 Greek_pi
+0x0007f1 Greek_rho
+0x0007f2 Greek_sigma
+0x0007f3 Greek_finalsmallsigma
+0x0007f4 Greek_tau
+0x0007f5 Greek_upsilon
+0x0007f6 Greek_phi
+0x0007f7 Greek_chi
+0x0007f8 Greek_psi
+0x0007f9 Greek_omega
+0x0008a1 leftradical
+0x0008a2 topleftradical
+0x0008a3 horizconnector
+0x0008a4 topintegral
+0x0008a5 botintegral
+0x0008a6 vertconnector
+0x0008a7 topleftsqbracket
+0x0008a8 botleftsqbracket
+0x0008a9 toprightsqbracket
+0x0008aa botrightsqbracket
+0x0008ab topleftparens
+0x0008ac botleftparens
+0x0008ad toprightparens
+0x0008ae botrightparens
+0x0008af leftmiddlecurlybrace
+0x0008b0 rightmiddlecurlybrace
+0x0008b1 topleftsummation
+0x0008b2 botleftsummation
+0x0008b3 topvertsummationconnector
+0x0008b4 botvertsummationconnector
+0x0008b5 toprightsummation
+0x0008b6 botrightsummation
+0x0008b7 rightmiddlesummation
+0x0008bc lessthanequal
+0x0008bd notequal
+0x0008be greaterthanequal
+0x0008bf integral
+0x0008c0 therefore
+0x0008c1 variation
+0x0008c2 infinity
+0x0008c5 nabla
+0x0008c8 approximate
+0x0008c9 similarequal
+0x0008cd ifonlyif
+0x0008ce implies
+0x0008cf identical
+0x0008d6 radical
+0x0008da includedin
+0x0008db includes
+0x0008dc intersection
+0x0008dd union
+0x0008de logicaland
+0x0008df logicalor
+0x0008ef partialderivative
+0x0008f6 function
+0x0008fb leftarrow
+0x0008fc uparrow
+0x0008fd rightarrow
+0x0008fe downarrow
+0x0009df blank
+0x0009e0 soliddiamond
+0x0009e1 checkerboard
+0x0009e2 ht
+0x0009e3 ff
+0x0009e4 cr
+0x0009e5 lf
+0x0009e8 nl
+0x0009e9 vt
+0x0009ea lowrightcorner
+0x0009eb uprightcorner
+0x0009ec upleftcorner
+0x0009ed lowleftcorner
+0x0009ee crossinglines
+0x0009ef horizlinescan1
+0x0009f0 horizlinescan3
+0x0009f1 horizlinescan5
+0x0009f2 horizlinescan7
+0x0009f3 horizlinescan9
+0x0009f4 leftt
+0x0009f5 rightt
+0x0009f6 bott
+0x0009f7 topt
+0x0009f8 vertbar
+0x000aa1 emspace
+0x000aa2 enspace
+0x000aa3 em3space
+0x000aa4 em4space
+0x000aa5 digitspace
+0x000aa6 punctspace
+0x000aa7 thinspace
+0x000aa8 hairspace
+0x000aa9 emdash
+0x000aaa endash
+0x000aac signifblank
+0x000aae ellipsis
+0x000aaf doubbaselinedot
+0x000ab0 onethird
+0x000ab1 twothirds
+0x000ab2 onefifth
+0x000ab3 twofifths
+0x000ab4 threefifths
+0x000ab5 fourfifths
+0x000ab6 onesixth
+0x000ab7 fivesixths
+0x000ab8 careof
+0x000abb figdash
+0x000abc leftanglebracket
+0x000abd decimalpoint
+0x000abe rightanglebracket
+0x000abf marker
+0x000ac3 oneeighth
+0x000ac4 threeeighths
+0x000ac5 fiveeighths
+0x000ac6 seveneighths
+0x000ac9 trademark
+0x000aca signaturemark
+0x000acb trademarkincircle
+0x000acc leftopentriangle
+0x000acd rightopentriangle
+0x000ace emopencircle
+0x000acf emopenrectangle
+0x000ad0 leftsinglequotemark
+0x000ad1 rightsinglequotemark
+0x000ad2 leftdoublequotemark
+0x000ad3 rightdoublequotemark
+0x000ad4 prescription
+0x000ad6 minutes
+0x000ad7 seconds
+0x000ad9 latincross
+0x000ada hexagram
+0x000adb filledrectbullet
+0x000adc filledlefttribullet
+0x000add filledrighttribullet
+0x000ade emfilledcircle
+0x000adf emfilledrect
+0x000ae0 enopencircbullet
+0x000ae1 enopensquarebullet
+0x000ae2 openrectbullet
+0x000ae3 opentribulletup
+0x000ae4 opentribulletdown
+0x000ae5 openstar
+0x000ae6 enfilledcircbullet
+0x000ae7 enfilledsqbullet
+0x000ae8 filledtribulletup
+0x000ae9 filledtribulletdown
+0x000aea leftpointer
+0x000aeb rightpointer
+0x000aec club
+0x000aed diamond
+0x000aee heart
+0x000af0 maltesecross
+0x000af1 dagger
+0x000af2 doubledagger
+0x000af3 checkmark
+0x000af4 ballotcross
+0x000af5 musicalsharp
+0x000af6 musicalflat
+0x000af7 malesymbol
+0x000af8 femalesymbol
+0x000af9 telephone
+0x000afa telephonerecorder
+0x000afb phonographcopyright
+0x000afc caret
+0x000afd singlelowquotemark
+0x000afe doublelowquotemark
+0x000aff cursor
+0x000ba3 leftcaret
+0x000ba6 rightcaret
+0x000ba8 downcaret
+0x000ba9 upcaret
+0x000bc0 overbar
+0x000bc2 downtack
+0x000bc3 upshoe
+0x000bc4 downstile
+0x000bc6 underbar
+0x000bca jot
+0x000bcc quad
+0x000bce uptack
+0x000bcf circle
+0x000bd3 upstile
+0x000bd6 downshoe
+0x000bd8 rightshoe
+0x000bda leftshoe
+0x000bdc lefttack
+0x000bfc righttack
+0x000cdf hebrew_doublelowline
+0x000ce0 hebrew_aleph
+0x000ce1 hebrew_bet
+0x000ce1 hebrew_beth
+0x000ce2 hebrew_gimel
+0x000ce2 hebrew_gimmel
+0x000ce3 hebrew_dalet
+0x000ce3 hebrew_daleth
+0x000ce4 hebrew_he
+0x000ce5 hebrew_waw
+0x000ce6 hebrew_zain
+0x000ce6 hebrew_zayin
+0x000ce7 hebrew_chet
+0x000ce7 hebrew_het
+0x000ce8 hebrew_tet
+0x000ce8 hebrew_teth
+0x000ce9 hebrew_yod
+0x000cea hebrew_finalkaph
+0x000ceb hebrew_kaph
+0x000cec hebrew_lamed
+0x000ced hebrew_finalmem
+0x000cee hebrew_mem
+0x000cef hebrew_finalnun
+0x000cf0 hebrew_nun
+0x000cf1 hebrew_samech
+0x000cf1 hebrew_samekh
+0x000cf2 hebrew_ayin
+0x000cf3 hebrew_finalpe
+0x000cf4 hebrew_pe
+0x000cf5 hebrew_finalzade
+0x000cf5 hebrew_finalzadi
+0x000cf6 hebrew_zade
+0x000cf6 hebrew_zadi
+0x000cf7 hebrew_kuf
+0x000cf7 hebrew_qoph
+0x000cf8 hebrew_resh
+0x000cf9 hebrew_shin
+0x000cfa hebrew_taf
+0x000cfa hebrew_taw
+0x000da1 Thai_kokai
+0x000da2 Thai_khokhai
+0x000da3 Thai_khokhuat
+0x000da4 Thai_khokhwai
+0x000da5 Thai_khokhon
+0x000da6 Thai_khorakhang
+0x000da7 Thai_ngongu
+0x000da8 Thai_chochan
+0x000da9 Thai_choching
+0x000daa Thai_chochang
+0x000dab Thai_soso
+0x000dac Thai_chochoe
+0x000dad Thai_yoying
+0x000dae Thai_dochada
+0x000daf Thai_topatak
+0x000db0 Thai_thothan
+0x000db1 Thai_thonangmontho
+0x000db2 Thai_thophuthao
+0x000db3 Thai_nonen
+0x000db4 Thai_dodek
+0x000db5 Thai_totao
+0x000db6 Thai_thothung
+0x000db7 Thai_thothahan
+0x000db8 Thai_thothong
+0x000db9 Thai_nonu
+0x000dba Thai_bobaimai
+0x000dbb Thai_popla
+0x000dbc Thai_phophung
+0x000dbd Thai_fofa
+0x000dbe Thai_phophan
+0x000dbf Thai_fofan
+0x000dc0 Thai_phosamphao
+0x000dc1 Thai_moma
+0x000dc2 Thai_yoyak
+0x000dc3 Thai_rorua
+0x000dc4 Thai_ru
+0x000dc5 Thai_loling
+0x000dc6 Thai_lu
+0x000dc7 Thai_wowaen
+0x000dc8 Thai_sosala
+0x000dc9 Thai_sorusi
+0x000dca Thai_sosua
+0x000dcb Thai_hohip
+0x000dcc Thai_lochula
+0x000dcd Thai_oang
+0x000dce Thai_honokhuk
+0x000dcf Thai_paiyannoi
+0x000dd0 Thai_saraa
+0x000dd1 Thai_maihanakat
+0x000dd2 Thai_saraaa
+0x000dd3 Thai_saraam
+0x000dd4 Thai_sarai
+0x000dd5 Thai_saraii
+0x000dd6 Thai_saraue
+0x000dd7 Thai_sarauee
+0x000dd8 Thai_sarau
+0x000dd9 Thai_sarauu
+0x000dda Thai_phinthu
+0x000dde Thai_maihanakat_maitho
+0x000ddf Thai_baht
+0x000de0 Thai_sarae
+0x000de1 Thai_saraae
+0x000de2 Thai_sarao
+0x000de3 Thai_saraaimaimuan
+0x000de4 Thai_saraaimaimalai
+0x000de5 Thai_lakkhangyao
+0x000de6 Thai_maiyamok
+0x000de7 Thai_maitaikhu
+0x000de8 Thai_maiek
+0x000de9 Thai_maitho
+0x000dea Thai_maitri
+0x000deb Thai_maichattawa
+0x000dec Thai_thanthakhat
+0x000ded Thai_nikhahit
+0x000df0 Thai_leksun
+0x000df1 Thai_leknung
+0x000df2 Thai_leksong
+0x000df3 Thai_leksam
+0x000df4 Thai_leksi
+0x000df5 Thai_lekha
+0x000df6 Thai_lekhok
+0x000df7 Thai_lekchet
+0x000df8 Thai_lekpaet
+0x000df9 Thai_lekkao
+0x000ea1 Hangul_Kiyeog
+0x000ea2 Hangul_SsangKiyeog
+0x000ea3 Hangul_KiyeogSios
+0x000ea4 Hangul_Nieun
+0x000ea5 Hangul_NieunJieuj
+0x000ea6 Hangul_NieunHieuh
+0x000ea7 Hangul_Dikeud
+0x000ea8 Hangul_SsangDikeud
+0x000ea9 Hangul_Rieul
+0x000eaa Hangul_RieulKiyeog
+0x000eab Hangul_RieulMieum
+0x000eac Hangul_RieulPieub
+0x000ead Hangul_RieulSios
+0x000eae Hangul_RieulTieut
+0x000eaf Hangul_RieulPhieuf
+0x000eb0 Hangul_RieulHieuh
+0x000eb1 Hangul_Mieum
+0x000eb2 Hangul_Pieub
+0x000eb3 Hangul_SsangPieub
+0x000eb4 Hangul_PieubSios
+0x000eb5 Hangul_Sios
+0x000eb6 Hangul_SsangSios
+0x000eb7 Hangul_Ieung
+0x000eb8 Hangul_Jieuj
+0x000eb9 Hangul_SsangJieuj
+0x000eba Hangul_Cieuc
+0x000ebb Hangul_Khieuq
+0x000ebc Hangul_Tieut
+0x000ebd Hangul_Phieuf
+0x000ebe Hangul_Hieuh
+0x000ebf Hangul_A
+0x000ec0 Hangul_AE
+0x000ec1 Hangul_YA
+0x000ec2 Hangul_YAE
+0x000ec3 Hangul_EO
+0x000ec4 Hangul_E
+0x000ec5 Hangul_YEO
+0x000ec6 Hangul_YE
+0x000ec7 Hangul_O
+0x000ec8 Hangul_WA
+0x000ec9 Hangul_WAE
+0x000eca Hangul_OE
+0x000ecb Hangul_YO
+0x000ecc Hangul_U
+0x000ecd Hangul_WEO
+0x000ece Hangul_WE
+0x000ecf Hangul_WI
+0x000ed0 Hangul_YU
+0x000ed1 Hangul_EU
+0x000ed2 Hangul_YI
+0x000ed3 Hangul_I
+0x000ed4 Hangul_J_Kiyeog
+0x000ed5 Hangul_J_SsangKiyeog
+0x000ed6 Hangul_J_KiyeogSios
+0x000ed7 Hangul_J_Nieun
+0x000ed8 Hangul_J_NieunJieuj
+0x000ed9 Hangul_J_NieunHieuh
+0x000eda Hangul_J_Dikeud
+0x000edb Hangul_J_Rieul
+0x000edc Hangul_J_RieulKiyeog
+0x000edd Hangul_J_RieulMieum
+0x000ede Hangul_J_RieulPieub
+0x000edf Hangul_J_RieulSios
+0x000ee0 Hangul_J_RieulTieut
+0x000ee1 Hangul_J_RieulPhieuf
+0x000ee2 Hangul_J_RieulHieuh
+0x000ee3 Hangul_J_Mieum
+0x000ee4 Hangul_J_Pieub
+0x000ee5 Hangul_J_PieubSios
+0x000ee6 Hangul_J_Sios
+0x000ee7 Hangul_J_SsangSios
+0x000ee8 Hangul_J_Ieung
+0x000ee9 Hangul_J_Jieuj
+0x000eea Hangul_J_Cieuc
+0x000eeb Hangul_J_Khieuq
+0x000eec Hangul_J_Tieut
+0x000eed Hangul_J_Phieuf
+0x000eee Hangul_J_Hieuh
+0x000eef Hangul_RieulYeorinHieuh
+0x000ef0 Hangul_SunkyeongeumMieum
+0x000ef1 Hangul_SunkyeongeumPieub
+0x000ef2 Hangul_PanSios
+0x000ef3 Hangul_KkogjiDalrinIeung
+0x000ef4 Hangul_SunkyeongeumPhieuf
+0x000ef5 Hangul_YeorinHieuh
+0x000ef6 Hangul_AraeA
+0x000ef7 Hangul_AraeAE
+0x000ef8 Hangul_J_PanSios
+0x000ef9 Hangul_J_KkogjiDalrinIeung
+0x000efa Hangul_J_YeorinHieuh
+0x000eff Korean_Won
+0x0013bc OE
+0x0013bd oe
+0x0013be Ydiaeresis
+0x0020a0 EcuSign
+0x0020a1 ColonSign
+0x0020a2 CruzeiroSign
+0x0020a3 FFrancSign
+0x0020a4 LiraSign
+0x0020a5 MillSign
+0x0020a6 NairaSign
+0x0020a7 PesetaSign
+0x0020a8 RupeeSign
+0x0020a9 WonSign
+0x0020aa NewSheqelSign
+0x0020ab DongSign
+0x0020ac EuroSign
+0x00fd01 3270_Duplicate
+0x00fd02 3270_FieldMark
+0x00fd03 3270_Right2
+0x00fd04 3270_Left2
+0x00fd05 3270_BackTab
+0x00fd06 3270_EraseEOF
+0x00fd07 3270_EraseInput
+0x00fd08 3270_Reset
+0x00fd09 3270_Quit
+0x00fd0a 3270_PA1
+0x00fd0b 3270_PA2
+0x00fd0c 3270_PA3
+0x00fd0d 3270_Test
+0x00fd0e 3270_Attn
+0x00fd0f 3270_CursorBlink
+0x00fd10 3270_AltCursor
+0x00fd11 3270_KeyClick
+0x00fd12 3270_Jump
+0x00fd13 3270_Ident
+0x00fd14 3270_Rule
+0x00fd15 3270_Copy
+0x00fd16 3270_Play
+0x00fd17 3270_Setup
+0x00fd18 3270_Record
+0x00fd19 3270_ChangeScreen
+0x00fd1a 3270_DeleteWord
+0x00fd1b 3270_ExSelect
+0x00fd1c 3270_CursorSelect
+0x00fd1d 3270_PrintScreen
+0x00fd1e 3270_Enter
+0x00fe01 ISO_Lock
+0x00fe02 ISO_Level2_Latch
+0x00fe03 ISO_Level3_Shift
+0x00fe04 ISO_Level3_Latch
+0x00fe05 ISO_Level3_Lock
+0x00fe06 ISO_Group_Latch
+0x00fe07 ISO_Group_Lock
+0x00fe08 ISO_Next_Group
+0x00fe09 ISO_Next_Group_Lock
+0x00fe0a ISO_Prev_Group
+0x00fe0b ISO_Prev_Group_Lock
+0x00fe0c ISO_First_Group
+0x00fe0d ISO_First_Group_Lock
+0x00fe0e ISO_Last_Group
+0x00fe0f ISO_Last_Group_Lock
+0x00fe20 ISO_Left_Tab
+0x00fe21 ISO_Move_Line_Up
+0x00fe22 ISO_Move_Line_Down
+0x00fe23 ISO_Partial_Line_Up
+0x00fe24 ISO_Partial_Line_Down
+0x00fe25 ISO_Partial_Space_Left
+0x00fe26 ISO_Partial_Space_Right
+0x00fe27 ISO_Set_Margin_Left
+0x00fe28 ISO_Set_Margin_Right
+0x00fe29 ISO_Release_Margin_Left
+0x00fe2a ISO_Release_Margin_Right
+0x00fe2b ISO_Release_Both_Margins
+0x00fe2c ISO_Fast_Cursor_Left
+0x00fe2d ISO_Fast_Cursor_Right
+0x00fe2e ISO_Fast_Cursor_Up
+0x00fe2f ISO_Fast_Cursor_Down
+0x00fe30 ISO_Continuous_Underline
+0x00fe31 ISO_Discontinuous_Underline
+0x00fe32 ISO_Emphasize
+0x00fe33 ISO_Center_Object
+0x00fe34 ISO_Enter
+0x00fe50 dead_grave
+0x00fe51 dead_acute
+0x00fe52 dead_circumflex
+0x00fe53 dead_tilde
+0x00fe54 dead_macron
+0x00fe55 dead_breve
+0x00fe56 dead_abovedot
+0x00fe57 dead_diaeresis
+0x00fe58 dead_abovering
+0x00fe59 dead_doubleacute
+0x00fe5a dead_caron
+0x00fe5b dead_cedilla
+0x00fe5c dead_ogonek
+0x00fe5d dead_iota
+0x00fe5e dead_voiced_sound
+0x00fe5f dead_semivoiced_sound
+0x00fe60 dead_belowdot
+0x00fe61 dead_hook
+0x00fe62 dead_horn
+0x00fe70 AccessX_Enable
+0x00fe71 AccessX_Feedback_Enable
+0x00fe72 RepeatKeys_Enable
+0x00fe73 SlowKeys_Enable
+0x00fe74 BounceKeys_Enable
+0x00fe75 StickyKeys_Enable
+0x00fe76 MouseKeys_Enable
+0x00fe77 MouseKeys_Accel_Enable
+0x00fe78 Overlay1_Enable
+0x00fe79 Overlay2_Enable
+0x00fe7a AudibleBell_Enable
+0x00fed0 First_Virtual_Screen
+0x00fed1 Prev_Virtual_Screen
+0x00fed2 Next_Virtual_Screen
+0x00fed4 Last_Virtual_Screen
+0x00fed5 Terminate_Server
+0x00fee0 Pointer_Left
+0x00fee1 Pointer_Right
+0x00fee2 Pointer_Up
+0x00fee3 Pointer_Down
+0x00fee4 Pointer_UpLeft
+0x00fee5 Pointer_UpRight
+0x00fee6 Pointer_DownLeft
+0x00fee7 Pointer_DownRight
+0x00fee8 Pointer_Button_Dflt
+0x00fee9 Pointer_Button1
+0x00feea Pointer_Button2
+0x00feeb Pointer_Button3
+0x00feec Pointer_Button4
+0x00feed Pointer_Button5
+0x00feee Pointer_DblClick_Dflt
+0x00feef Pointer_DblClick1
+0x00fef0 Pointer_DblClick2
+0x00fef1 Pointer_DblClick3
+0x00fef2 Pointer_DblClick4
+0x00fef3 Pointer_DblClick5
+0x00fef4 Pointer_Drag_Dflt
+0x00fef5 Pointer_Drag1
+0x00fef6 Pointer_Drag2
+0x00fef7 Pointer_Drag3
+0x00fef8 Pointer_Drag4
+0x00fef9 Pointer_EnableKeys
+0x00fefa Pointer_Accelerate
+0x00fefb Pointer_DfltBtnNext
+0x00fefc Pointer_DfltBtnPrev
+0x00fefd Pointer_Drag5
+0x00ff08 BackSpace
+0x00ff09 Tab
+0x00ff0a Linefeed
+0x00ff0b Clear
+0x00ff0d Return
+0x00ff13 Pause
+0x00ff14 Scroll_Lock
+0x00ff15 Sys_Req
+0x00ff1b Escape
+0x00ff20 Multi_key
+0x00ff21 Kanji
+0x00ff22 Muhenkan
+0x00ff23 Henkan
+0x00ff23 Henkan_Mode
+0x00ff24 Romaji
+0x00ff25 Hiragana
+0x00ff26 Katakana
+0x00ff27 Hiragana_Katakana
+0x00ff28 Zenkaku
+0x00ff29 Hankaku
+0x00ff2a Zenkaku_Hankaku
+0x00ff2b Touroku
+0x00ff2c Massyo
+0x00ff2d Kana_Lock
+0x00ff2e Kana_Shift
+0x00ff2f Eisu_Shift
+0x00ff30 Eisu_toggle
+0x00ff31 Hangul
+0x00ff32 Hangul_Start
+0x00ff33 Hangul_End
+0x00ff34 Hangul_Hanja
+0x00ff35 Hangul_Jamo
+0x00ff36 Hangul_Romaja
+0x00ff37 Codeinput
+0x00ff38 Hangul_Jeonja
+0x00ff39 Hangul_Banja
+0x00ff3a Hangul_PreHanja
+0x00ff3b Hangul_PostHanja
+0x00ff3c SingleCandidate
+0x00ff3d MultipleCandidate
+0x00ff3e PreviousCandidate
+0x00ff3f Hangul_Special
+0x00ff50 Home
+0x00ff51 Left
+0x00ff52 Up
+0x00ff53 Right
+0x00ff54 Down
+0x00ff55 Page_Up
+0x00ff55 Prior
+0x00ff56 Page_Down
+0x00ff56 Next
+0x00ff57 End
+0x00ff58 Begin
+0x00ff60 Select
+0x00ff61 Print
+0x00ff62 Execute
+0x00ff63 Insert
+0x00ff65 Undo
+0x00ff66 Redo
+0x00ff67 Menu
+0x00ff68 Find
+0x00ff69 Cancel
+0x00ff6a Help
+0x00ff6b Break
+0x00ff7e Arabic_switch
+0x00ff7e Greek_switch
+0x00ff7e Hangul_switch
+0x00ff7e Hebrew_switch
+0x00ff7e ISO_Group_Shift
+0x00ff7e Mode_switch
+0x00ff7e kana_switch
+0x00ff7e script_switch
+0x00ff7f Num_Lock
+0x00ff80 KP_Space
+0x00ff89 KP_Tab
+0x00ff8d KP_Enter
+0x00ff91 KP_F1
+0x00ff92 KP_F2
+0x00ff93 KP_F3
+0x00ff94 KP_F4
+0x00ff95 KP_Home
+0x00ff96 KP_Left
+0x00ff97 KP_Up
+0x00ff98 KP_Right
+0x00ff99 KP_Down
+0x00ff9a KP_Page_Up
+0x00ff9a KP_Prior
+0x00ff9b KP_Page_Down
+0x00ff9b KP_Next
+0x00ff9c KP_End
+0x00ff9d KP_Begin
+0x00ff9e KP_Insert
+0x00ff9f KP_Delete
+0x00ffaa KP_Multiply
+0x00ffab KP_Add
+0x00ffac KP_Separator
+0x00ffad KP_Subtract
+0x00ffae KP_Decimal
+0x00ffaf KP_Divide
+0x00ffb0 KP_0
+0x00ffb1 KP_1
+0x00ffb2 KP_2
+0x00ffb3 KP_3
+0x00ffb4 KP_4
+0x00ffb5 KP_5
+0x00ffb6 KP_6
+0x00ffb7 KP_7
+0x00ffb8 KP_8
+0x00ffb9 KP_9
+0x00ffbd KP_Equal
+0x00ffbe F1
+0x00ffbf F2
+0x00ffc0 F3
+0x00ffc1 F4
+0x00ffc2 F5
+0x00ffc3 F6
+0x00ffc4 F7
+0x00ffc5 F8
+0x00ffc6 F9
+0x00ffc7 F10
+0x00ffc8 F11
+0x00ffc9 F12
+0x00ffca F13
+0x00ffcb F14
+0x00ffcc F15
+0x00ffcd F16
+0x00ffce F17
+0x00ffcf F18
+0x00ffd0 F19
+0x00ffd1 F20
+0x00ffd2 F21
+0x00ffd3 F22
+0x00ffd4 F23
+0x00ffd5 F24
+0x00ffd6 F25
+0x00ffd7 F26
+0x00ffd8 F27
+0x00ffd9 F28
+0x00ffda F29
+0x00ffdb F30
+0x00ffdc F31
+0x00ffdd F32
+0x00ffde F33
+0x00ffdf F34
+0x00ffe0 F35
+0x00ffe1 Shift_L
+0x00ffe2 Shift_R
+0x00ffe3 Control_L
+0x00ffe4 Control_R
+0x00ffe5 Caps_Lock
+0x00ffe6 Shift_Lock
+0x00ffe7 Meta_L
+0x00ffe8 Meta_R
+0x00ffe9 Alt_L
+0x00ffea Alt_R
+0x00ffeb Super_L
+0x00ffec Super_R
+0x00ffed Hyper_L
+0x00ffee Hyper_R
+0x00ffff Delete
+0xffffff VoidSymbol