From e37086c1e1a06fec59454260c0e62f507efca25c Mon Sep 17 00:00:00 2001 From: Hirokazu Takahashi Date: Tue, 11 Dec 2012 20:05:06 +0900 Subject: [PATCH] viewer-side keymap it's useful when dealing with broken vnc server implementations, namely qemu/kvm. --- LICENSE.txt | 1 + include/keymap.js | 6407 +++++++++++++++++++++++++++++++++++++++++++++ include/rfb.js | 51 +- include/ui.js | 22 +- vnc.html | 6 + vnc_auto.html | 4 +- 6 files changed, 6487 insertions(+), 4 deletions(-) create mode 100644 include/keymap.js diff --git a/LICENSE.txt b/LICENSE.txt index c5aa5050..7ef311b0 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -17,6 +17,7 @@ is not limited to): include/vnc.js include/websock.js include/webutil.js + include/keymap.js The HTML, CSS, font and images files that included with the noVNC source distibution (or repository) are not considered part of the diff --git a/include/keymap.js b/include/keymap.js new file mode 100644 index 00000000..8e8ab08f --- /dev/null +++ b/include/keymap.js @@ -0,0 +1,6407 @@ +/* + * noVNC: HTML5 VNC client + * Copyright (C) 2012 Hirokazu Takahashi + * Licensed under MPL 2.0 or any later version (see LICENSE.txt) + */ + +"use strict"; +/*jslint white: false */ + +var Kmap = {}; + +Kmap.getKeymap = function (kb) { + return Kmap.keymaps[kb]; +}; + +Kmap.keymaps = { + 'ar': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: true, altgr: true, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: true, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: false, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: false, altgr: false, name: "semicolon" }, + 60: { shift: true, altgr: false, name: "less" }, + 61: { shift: false, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: true, altgr: false, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: true, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: false, name: "backslash" }, + 93: { shift: true, altgr: true, name: "bracketright" }, + 94: { shift: true, altgr: false, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: false, altgr: false, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: true, altgr: false, name: "braceleft" }, + 124: { shift: true, altgr: false, name: "bar" }, + 125: { shift: true, altgr: false, name: "braceright" }, + 126: { shift: true, altgr: true, name: "asciitilde" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 215: { shift: true, altgr: true, name: "multiply" }, + 247: { shift: true, altgr: true, name: "division" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'bepo': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: false, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: false, altgr: false, name: "dollar" }, + 37: { shift: false, altgr: false, name: "percent" }, + 38: { shift: false, altgr: true, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: false, altgr: false, name: "parenleft" }, + 41: { shift: false, altgr: false, name: "parenright" }, + 42: { shift: false, altgr: false, name: "asterisk" }, + 43: { shift: false, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: false, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: true, altgr: false, name: "semicolon" }, + 60: { shift: false, altgr: true, name: "less" }, + 61: { shift: false, altgr: false, name: "equal" }, + 62: { shift: false, altgr: true, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: false, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: true, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 94: { shift: false, altgr: true, name: "asciicircum" }, + 95: { shift: false, altgr: true, name: "underscore" }, + 96: { shift: true, altgr: false, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: false, altgr: true, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 126: { shift: false, altgr: true, name: "asciitilde" }, + 160: { shift: true, altgr: false, name: "nobreakspace" }, + 161: { shift: false, altgr: true, name: "exclamdown" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 169: { shift: false, altgr: true, name: "copyright" }, + 170: { shift: true, altgr: true, name: "ordfeminine" }, + 171: { shift: false, altgr: false, name: "guillemotleft" }, + 174: { shift: false, altgr: true, name: "registered" }, + 181: { shift: false, altgr: true, name: "mu" }, + 183: { shift: true, altgr: true, name: "periodcentered" }, + 186: { shift: true, altgr: true, name: "masculine" }, + 187: { shift: false, altgr: false, name: "guillemotright" }, + 191: { shift: false, altgr: true, name: "questiondown" }, + 192: { shift: true, altgr: false, name: "Agrave" }, + 198: { shift: true, altgr: true, name: "AE" }, + 199: { shift: true, altgr: false, name: "Ccedilla" }, + 200: { shift: true, altgr: false, name: "Egrave" }, + 201: { shift: true, altgr: false, name: "Eacute" }, + 202: { shift: true, altgr: false, name: "Ecircumflex" }, + 208: { shift: true, altgr: true, name: "ETH" }, + 217: { shift: true, altgr: true, name: "Ugrave" }, + 222: { shift: true, altgr: true, name: "THORN" }, + 223: { shift: false, altgr: true, name: "ssharp" }, + 224: { shift: false, altgr: false, name: "agrave" }, + 230: { shift: false, altgr: true, name: "ae" }, + 231: { shift: false, altgr: false, name: "ccedilla" }, + 232: { shift: false, altgr: false, name: "egrave" }, + 233: { shift: false, altgr: false, name: "eacute" }, + 234: { shift: false, altgr: false, name: "ecircumflex" }, + 240: { shift: false, altgr: true, name: "eth" }, + 249: { shift: false, altgr: true, name: "ugrave" }, + 254: { shift: false, altgr: true, name: "thorn" }, + 65104: { shift: false, altgr: true, name: "dead_grave" }, + 65105: { shift: false, altgr: true, name: "dead_acute" }, + 65106: { shift: false, altgr: false, name: "dead_circumflex" }, + 65107: { shift: false, altgr: true, name: "dead_tilde" }, + 65111: { shift: false, altgr: true, name: "dead_diaeresis" }, + 65114: { shift: false, altgr: true, name: "dead_caron" }, + 65115: { shift: false, altgr: true, name: "dead_cedilla" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'da': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: false, altgr: true, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: false, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: true, altgr: false, name: "semicolon" }, + 60: { shift: false, altgr: false, name: "less" }, + 61: { shift: true, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: true, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: true, altgr: true, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: false, altgr: true, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 160: { shift: false, altgr: true, name: "nobreakspace" }, + 161: { shift: false, altgr: true, name: "exclamdown" }, + 162: { shift: true, altgr: true, name: "cent" }, + 163: { shift: false, altgr: true, name: "sterling" }, + 164: { shift: true, altgr: false, name: "currency" }, + 165: { shift: true, altgr: true, name: "yen" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 167: { shift: true, altgr: false, name: "section" }, + 169: { shift: false, altgr: true, name: "copyright" }, + 170: { shift: true, altgr: true, name: "ordfeminine" }, + 171: { shift: false, altgr: true, name: "guillemotleft" }, + 172: { shift: true, altgr: true, name: "notsign" }, + 173: { shift: false, altgr: true, name: "hyphen" }, + 174: { shift: false, altgr: true, name: "registered" }, + 175: { shift: true, altgr: true, name: "macron" }, + 176: { shift: true, altgr: true, name: "degree" }, + 177: { shift: false, altgr: true, name: "plusminus" }, + 178: { shift: true, altgr: true, name: "twosuperior" }, + 179: { shift: true, altgr: true, name: "threesuperior" }, + 181: { shift: false, altgr: true, name: "mu" }, + 182: { shift: true, altgr: true, name: "paragraph" }, + 183: { shift: false, altgr: true, name: "periodcentered" }, + 185: { shift: true, altgr: true, name: "onesuperior" }, + 186: { shift: true, altgr: true, name: "masculine" }, + 187: { shift: false, altgr: true, name: "guillemotright" }, + 188: { shift: true, altgr: true, name: "onequarter" }, + 189: { shift: false, altgr: false, name: "onehalf" }, + 190: { shift: false, altgr: true, name: "threequarters" }, + 191: { shift: true, altgr: true, name: "questiondown" }, + 197: { shift: true, altgr: false, name: "Aring" }, + 198: { shift: true, altgr: false, name: "AE" }, + 208: { shift: true, altgr: true, name: "ETH" }, + 215: { shift: true, altgr: true, name: "multiply" }, + 216: { shift: true, altgr: false, name: "Ooblique" }, + 222: { shift: true, altgr: true, name: "THORN" }, + 223: { shift: false, altgr: true, name: "ssharp" }, + 229: { shift: false, altgr: false, name: "aring" }, + 230: { shift: false, altgr: false, name: "ae" }, + 240: { shift: false, altgr: true, name: "eth" }, + 247: { shift: true, altgr: true, name: "division" }, + 248: { shift: false, altgr: false, name: "oslash" }, + 254: { shift: false, altgr: true, name: "thorn" }, + 419: { shift: true, altgr: true, name: "Lstroke" }, + 435: { shift: false, altgr: true, name: "lstroke" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: true, altgr: false, name: "dead_grave" }, + 65105: { shift: false, altgr: false, name: "dead_acute" }, + 65106: { shift: true, altgr: false, name: "dead_circumflex" }, + 65107: { shift: false, altgr: true, name: "dead_tilde" }, + 65110: { shift: true, altgr: true, name: "dead_abovedot" }, + 65111: { shift: false, altgr: false, name: "dead_diaeresis" }, + 65112: { shift: true, altgr: true, name: "dead_abovering" }, + 65113: { shift: false, altgr: true, name: "dead_doubleacute" }, + 65114: { shift: true, altgr: true, name: "dead_caron" }, + 65115: { shift: false, altgr: true, name: "dead_cedilla" }, + 65116: { shift: true, altgr: true, name: "dead_ogonek" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'de': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: false, altgr: false, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: true, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: false, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: true, altgr: false, name: "semicolon" }, + 60: { shift: false, altgr: false, name: "less" }, + 61: { shift: true, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: true, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 94: { shift: false, altgr: false, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: true, altgr: false, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: false, altgr: true, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 126: { shift: false, altgr: true, name: "asciitilde" }, + 161: { shift: true, altgr: true, name: "exclamdown" }, + 162: { shift: false, altgr: true, name: "cent" }, + 163: { shift: true, altgr: true, name: "sterling" }, + 164: { shift: true, altgr: true, name: "currency" }, + 165: { shift: true, altgr: true, name: "yen" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 167: { shift: true, altgr: false, name: "section" }, + 169: { shift: true, altgr: true, name: "copyright" }, + 170: { shift: true, altgr: true, name: "ordfeminine" }, + 171: { shift: false, altgr: true, name: "guillemotleft" }, + 172: { shift: false, altgr: true, name: "notsign" }, + 174: { shift: true, altgr: true, name: "registered" }, + 176: { shift: true, altgr: false, name: "degree" }, + 177: { shift: true, altgr: true, name: "plusminus" }, + 178: { shift: false, altgr: true, name: "twosuperior" }, + 179: { shift: false, altgr: true, name: "threesuperior" }, + 180: { shift: false, altgr: false, name: "acute" }, + 181: { shift: false, altgr: true, name: "mu" }, + 182: { shift: false, altgr: true, name: "paragraph" }, + 183: { shift: false, altgr: true, name: "periodcentered" }, + 185: { shift: false, altgr: true, name: "onesuperior" }, + 186: { shift: true, altgr: true, name: "masculine" }, + 187: { shift: false, altgr: true, name: "guillemotright" }, + 188: { shift: false, altgr: true, name: "onequarter" }, + 189: { shift: false, altgr: true, name: "onehalf" }, + 190: { shift: false, altgr: true, name: "threequarters" }, + 191: { shift: true, altgr: true, name: "questiondown" }, + 196: { shift: true, altgr: false, name: "Adiaeresis" }, + 198: { shift: true, altgr: true, name: "AE" }, + 208: { shift: true, altgr: true, name: "ETH" }, + 214: { shift: true, altgr: false, name: "Odiaeresis" }, + 215: { shift: true, altgr: true, name: "multiply" }, + 216: { shift: true, altgr: true, name: "Ooblique" }, + 220: { shift: true, altgr: false, name: "Udiaeresis" }, + 222: { shift: true, altgr: true, name: "THORN" }, + 223: { shift: false, altgr: false, name: "ssharp" }, + 228: { shift: false, altgr: false, name: "adiaeresis" }, + 230: { shift: false, altgr: true, name: "ae" }, + 240: { shift: false, altgr: true, name: "eth" }, + 246: { shift: false, altgr: false, name: "odiaeresis" }, + 247: { shift: true, altgr: true, name: "division" }, + 248: { shift: false, altgr: true, name: "oslash" }, + 252: { shift: false, altgr: false, name: "udiaeresis" }, + 254: { shift: false, altgr: true, name: "thorn" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: true, altgr: false, name: "dead_grave" }, + 65105: { shift: false, altgr: false, name: "dead_acute" }, + 65106: { shift: false, altgr: false, name: "dead_circumflex" }, + 65107: { shift: false, altgr: true, name: "dead_tilde" }, + 65108: { shift: true, altgr: true, name: "dead_macron" }, + 65109: { shift: true, altgr: true, name: "dead_breve" }, + 65110: { shift: true, altgr: true, name: "dead_abovedot" }, + 65111: { shift: false, altgr: true, name: "dead_diaeresis" }, + 65112: { shift: true, altgr: true, name: "dead_abovering" }, + 65113: { shift: false, altgr: true, name: "dead_doubleacute" }, + 65114: { shift: true, altgr: true, name: "dead_caron" }, + 65115: { shift: false, altgr: true, name: "dead_cedilla" }, + 65116: { shift: true, altgr: true, name: "dead_ogonek" }, + 65120: { shift: false, altgr: true, name: "dead_belowdot" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'de-ch': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: false, altgr: true, name: "numbersign" }, + 36: { shift: false, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: true, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: true, altgr: false, name: "semicolon" }, + 60: { shift: false, altgr: false, name: "less" }, + 61: { shift: true, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: true, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: false, altgr: true, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 162: { shift: false, altgr: true, name: "cent" }, + 163: { shift: true, altgr: false, name: "sterling" }, + 166: { shift: false, altgr: true, name: "brokenbar" }, + 167: { shift: false, altgr: false, name: "section" }, + 171: { shift: false, altgr: true, name: "guillemotleft" }, + 172: { shift: false, altgr: true, name: "notsign" }, + 176: { shift: true, altgr: false, name: "degree" }, + 181: { shift: false, altgr: true, name: "mu" }, + 182: { shift: false, altgr: true, name: "paragraph" }, + 187: { shift: false, altgr: true, name: "guillemotright" }, + 188: { shift: false, altgr: true, name: "onequarter" }, + 189: { shift: false, altgr: true, name: "onehalf" }, + 223: { shift: false, altgr: true, name: "ssharp" }, + 224: { shift: true, altgr: false, name: "agrave" }, + 228: { shift: false, altgr: false, name: "adiaeresis" }, + 230: { shift: false, altgr: true, name: "ae" }, + 231: { shift: true, altgr: false, name: "ccedilla" }, + 232: { shift: true, altgr: false, name: "egrave" }, + 233: { shift: true, altgr: false, name: "eacute" }, + 240: { shift: false, altgr: true, name: "eth" }, + 246: { shift: false, altgr: false, name: "odiaeresis" }, + 248: { shift: false, altgr: true, name: "oslash" }, + 252: { shift: false, altgr: false, name: "udiaeresis" }, + 254: { shift: false, altgr: true, name: "thorn" }, + 435: { shift: false, altgr: true, name: "lstroke" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: true, altgr: false, name: "dead_grave" }, + 65105: { shift: false, altgr: true, name: "dead_acute" }, + 65106: { shift: false, altgr: false, name: "dead_circumflex" }, + 65107: { shift: false, altgr: true, name: "dead_tilde" }, + 65111: { shift: false, altgr: false, name: "dead_diaeresis" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'en-gb': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: false, altgr: false, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: true, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: false, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: false, altgr: false, name: "semicolon" }, + 60: { shift: true, altgr: false, name: "less" }, + 61: { shift: false, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: true, altgr: false, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: false, name: "bracketleft" }, + 92: { shift: false, altgr: false, name: "backslash" }, + 93: { shift: false, altgr: false, name: "bracketright" }, + 94: { shift: true, altgr: false, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: false, altgr: false, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: true, altgr: false, name: "braceleft" }, + 124: { shift: true, altgr: false, name: "bar" }, + 125: { shift: true, altgr: false, name: "braceright" }, + 126: { shift: true, altgr: false, name: "asciitilde" }, + 161: { shift: true, altgr: true, name: "exclamdown" }, + 162: { shift: false, altgr: true, name: "cent" }, + 163: { shift: true, altgr: false, name: "sterling" }, + 165: { shift: true, altgr: true, name: "yen" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 167: { shift: true, altgr: true, name: "section" }, + 169: { shift: true, altgr: true, name: "copyright" }, + 170: { shift: true, altgr: true, name: "ordfeminine" }, + 171: { shift: false, altgr: true, name: "guillemotleft" }, + 172: { shift: true, altgr: false, name: "notsign" }, + 174: { shift: true, altgr: true, name: "registered" }, + 176: { shift: true, altgr: true, name: "degree" }, + 177: { shift: true, altgr: true, name: "plusminus" }, + 178: { shift: false, altgr: true, name: "twosuperior" }, + 179: { shift: false, altgr: true, name: "threesuperior" }, + 181: { shift: false, altgr: true, name: "mu" }, + 182: { shift: false, altgr: true, name: "paragraph" }, + 183: { shift: false, altgr: true, name: "periodcentered" }, + 185: { shift: false, altgr: true, name: "onesuperior" }, + 186: { shift: true, altgr: true, name: "masculine" }, + 187: { shift: false, altgr: true, name: "guillemotright" }, + 189: { shift: false, altgr: true, name: "onehalf" }, + 190: { shift: false, altgr: true, name: "threequarters" }, + 191: { shift: true, altgr: true, name: "questiondown" }, + 198: { shift: true, altgr: true, name: "AE" }, + 208: { shift: true, altgr: true, name: "ETH" }, + 215: { shift: true, altgr: true, name: "multiply" }, + 216: { shift: true, altgr: true, name: "Ooblique" }, + 222: { shift: true, altgr: true, name: "THORN" }, + 223: { shift: false, altgr: true, name: "ssharp" }, + 230: { shift: false, altgr: true, name: "ae" }, + 240: { shift: false, altgr: true, name: "eth" }, + 247: { shift: true, altgr: true, name: "division" }, + 248: { shift: false, altgr: true, name: "oslash" }, + 254: { shift: false, altgr: true, name: "thorn" }, + 419: { shift: true, altgr: true, name: "Lstroke" }, + 435: { shift: false, altgr: true, name: "lstroke" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: false, altgr: true, name: "dead_grave" }, + 65105: { shift: false, altgr: true, name: "dead_acute" }, + 65106: { shift: false, altgr: true, name: "dead_circumflex" }, + 65107: { shift: false, altgr: true, name: "dead_tilde" }, + 65108: { shift: true, altgr: true, name: "dead_macron" }, + 65109: { shift: true, altgr: true, name: "dead_breve" }, + 65110: { shift: true, altgr: true, name: "dead_abovedot" }, + 65111: { shift: false, altgr: true, name: "dead_diaeresis" }, + 65112: { shift: true, altgr: true, name: "dead_abovering" }, + 65113: { shift: true, altgr: true, name: "dead_doubleacute" }, + 65114: { shift: true, altgr: true, name: "dead_caron" }, + 65115: { shift: false, altgr: true, name: "dead_cedilla" }, + 65116: { shift: true, altgr: true, name: "dead_ogonek" }, + 65120: { shift: false, altgr: true, name: "dead_belowdot" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'en-us': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: true, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: false, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: false, altgr: false, name: "semicolon" }, + 60: { shift: true, altgr: false, name: "less" }, + 61: { shift: false, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: true, altgr: false, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: false, name: "bracketleft" }, + 92: { shift: false, altgr: false, name: "backslash" }, + 93: { shift: false, altgr: false, name: "bracketright" }, + 94: { shift: true, altgr: false, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: false, altgr: false, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: true, altgr: false, name: "braceleft" }, + 124: { shift: true, altgr: false, name: "bar" }, + 125: { shift: true, altgr: false, name: "braceright" }, + 126: { shift: true, altgr: false, name: "asciitilde" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'es': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: false, altgr: true, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: false, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: true, altgr: false, name: "semicolon" }, + 60: { shift: false, altgr: false, name: "less" }, + 61: { shift: true, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: true, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: true, altgr: true, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: false, altgr: true, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 126: { shift: false, altgr: true, name: "asciitilde" }, + 161: { shift: false, altgr: false, name: "exclamdown" }, + 162: { shift: false, altgr: true, name: "cent" }, + 163: { shift: true, altgr: true, name: "sterling" }, + 165: { shift: true, altgr: true, name: "yen" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 167: { shift: true, altgr: true, name: "section" }, + 169: { shift: true, altgr: true, name: "copyright" }, + 170: { shift: true, altgr: false, name: "ordfeminine" }, + 171: { shift: false, altgr: true, name: "guillemotleft" }, + 172: { shift: false, altgr: true, name: "notsign" }, + 174: { shift: true, altgr: true, name: "registered" }, + 176: { shift: true, altgr: true, name: "degree" }, + 177: { shift: true, altgr: true, name: "plusminus" }, + 181: { shift: false, altgr: true, name: "mu" }, + 182: { shift: false, altgr: true, name: "paragraph" }, + 183: { shift: true, altgr: false, name: "periodcentered" }, + 186: { shift: false, altgr: false, name: "masculine" }, + 187: { shift: false, altgr: true, name: "guillemotright" }, + 189: { shift: false, altgr: true, name: "onehalf" }, + 191: { shift: true, altgr: false, name: "questiondown" }, + 198: { shift: true, altgr: true, name: "AE" }, + 199: { shift: true, altgr: false, name: "Ccedilla" }, + 208: { shift: true, altgr: true, name: "ETH" }, + 209: { shift: true, altgr: false, name: "Ntilde" }, + 215: { shift: true, altgr: true, name: "multiply" }, + 216: { shift: true, altgr: true, name: "Ooblique" }, + 222: { shift: true, altgr: true, name: "THORN" }, + 223: { shift: false, altgr: true, name: "ssharp" }, + 230: { shift: false, altgr: true, name: "ae" }, + 231: { shift: false, altgr: false, name: "ccedilla" }, + 240: { shift: false, altgr: true, name: "eth" }, + 241: { shift: false, altgr: false, name: "ntilde" }, + 247: { shift: true, altgr: true, name: "division" }, + 248: { shift: false, altgr: true, name: "oslash" }, + 254: { shift: false, altgr: true, name: "thorn" }, + 419: { shift: true, altgr: true, name: "Lstroke" }, + 435: { shift: false, altgr: true, name: "lstroke" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: false, altgr: false, name: "dead_grave" }, + 65105: { shift: false, altgr: false, name: "dead_acute" }, + 65106: { shift: true, altgr: false, name: "dead_circumflex" }, + 65108: { shift: true, altgr: true, name: "dead_macron" }, + 65109: { shift: true, altgr: true, name: "dead_breve" }, + 65110: { shift: true, altgr: true, name: "dead_abovedot" }, + 65111: { shift: true, altgr: false, name: "dead_diaeresis" }, + 65112: { shift: true, altgr: true, name: "dead_abovering" }, + 65113: { shift: true, altgr: true, name: "dead_doubleacute" }, + 65120: { shift: false, altgr: true, name: "dead_belowdot" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'et': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: false, altgr: true, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: false, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: true, altgr: false, name: "semicolon" }, + 60: { shift: false, altgr: false, name: "less" }, + 61: { shift: true, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: true, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 94: { shift: false, altgr: true, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: true, altgr: false, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: false, altgr: true, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 163: { shift: false, altgr: true, name: "sterling" }, + 164: { shift: true, altgr: false, name: "currency" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 167: { shift: false, altgr: true, name: "section" }, + 180: { shift: false, altgr: false, name: "acute" }, + 189: { shift: false, altgr: true, name: "onehalf" }, + 196: { shift: true, altgr: false, name: "Adiaeresis" }, + 213: { shift: true, altgr: false, name: "Otilde" }, + 214: { shift: true, altgr: false, name: "Odiaeresis" }, + 220: { shift: true, altgr: false, name: "Udiaeresis" }, + 228: { shift: false, altgr: false, name: "adiaeresis" }, + 245: { shift: false, altgr: false, name: "otilde" }, + 246: { shift: false, altgr: false, name: "odiaeresis" }, + 252: { shift: false, altgr: false, name: "udiaeresis" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: true, altgr: false, name: "dead_grave" }, + 65105: { shift: false, altgr: false, name: "dead_acute" }, + 65107: { shift: true, altgr: false, name: "dead_tilde" }, + 65114: { shift: false, altgr: false, name: "dead_caron" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'fi': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: false, altgr: true, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: true, name: "ampersand" }, + 39: { shift: true, altgr: true, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: false, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: true, altgr: false, name: "semicolon" }, + 60: { shift: true, altgr: true, name: "less" }, + 61: { shift: true, altgr: false, name: "equal" }, + 62: { shift: true, altgr: true, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: true, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: true, altgr: true, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: false, altgr: true, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 160: { shift: false, altgr: true, name: "nobreakspace" }, + 161: { shift: false, altgr: true, name: "exclamdown" }, + 162: { shift: true, altgr: true, name: "cent" }, + 163: { shift: false, altgr: true, name: "sterling" }, + 164: { shift: true, altgr: false, name: "currency" }, + 165: { shift: true, altgr: true, name: "yen" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 167: { shift: false, altgr: false, name: "section" }, + 169: { shift: false, altgr: true, name: "copyright" }, + 170: { shift: true, altgr: true, name: "ordfeminine" }, + 171: { shift: false, altgr: true, name: "guillemotleft" }, + 172: { shift: true, altgr: true, name: "notsign" }, + 173: { shift: false, altgr: true, name: "hyphen" }, + 174: { shift: false, altgr: true, name: "registered" }, + 175: { shift: true, altgr: true, name: "macron" }, + 176: { shift: true, altgr: true, name: "degree" }, + 177: { shift: false, altgr: true, name: "plusminus" }, + 178: { shift: true, altgr: true, name: "twosuperior" }, + 179: { shift: true, altgr: true, name: "threesuperior" }, + 180: { shift: false, altgr: true, name: "acute" }, + 181: { shift: false, altgr: true, name: "mu" }, + 182: { shift: false, altgr: true, name: "paragraph" }, + 183: { shift: false, altgr: true, name: "periodcentered" }, + 185: { shift: true, altgr: true, name: "onesuperior" }, + 186: { shift: true, altgr: true, name: "masculine" }, + 187: { shift: false, altgr: true, name: "guillemotright" }, + 188: { shift: true, altgr: true, name: "onequarter" }, + 189: { shift: true, altgr: false, name: "onehalf" }, + 190: { shift: true, altgr: true, name: "threequarters" }, + 191: { shift: true, altgr: true, name: "questiondown" }, + 196: { shift: true, altgr: false, name: "Adiaeresis" }, + 197: { shift: true, altgr: false, name: "Aring" }, + 198: { shift: true, altgr: true, name: "AE" }, + 208: { shift: true, altgr: true, name: "ETH" }, + 214: { shift: true, altgr: false, name: "Odiaeresis" }, + 215: { shift: true, altgr: true, name: "multiply" }, + 216: { shift: true, altgr: true, name: "Ooblique" }, + 222: { shift: true, altgr: true, name: "THORN" }, + 223: { shift: false, altgr: true, name: "ssharp" }, + 228: { shift: false, altgr: false, name: "adiaeresis" }, + 229: { shift: false, altgr: false, name: "aring" }, + 230: { shift: false, altgr: true, name: "ae" }, + 240: { shift: false, altgr: true, name: "eth" }, + 246: { shift: false, altgr: false, name: "odiaeresis" }, + 247: { shift: true, altgr: true, name: "division" }, + 248: { shift: false, altgr: true, name: "oslash" }, + 254: { shift: false, altgr: true, name: "thorn" }, + 419: { shift: true, altgr: true, name: "Lstroke" }, + 435: { shift: false, altgr: true, name: "lstroke" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: true, altgr: false, name: "dead_grave" }, + 65105: { shift: false, altgr: false, name: "dead_acute" }, + 65106: { shift: true, altgr: false, name: "dead_circumflex" }, + 65107: { shift: false, altgr: true, name: "dead_tilde" }, + 65110: { shift: true, altgr: true, name: "dead_abovedot" }, + 65111: { shift: false, altgr: false, name: "dead_diaeresis" }, + 65112: { shift: true, altgr: true, name: "dead_abovering" }, + 65114: { shift: true, altgr: true, name: "dead_caron" }, + 65115: { shift: false, altgr: true, name: "dead_cedilla" }, + 65116: { shift: true, altgr: true, name: "dead_ogonek" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'fo': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: false, altgr: true, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: false, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: true, altgr: false, name: "semicolon" }, + 60: { shift: false, altgr: false, name: "less" }, + 61: { shift: true, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: true, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: false, altgr: true, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 126: { shift: false, altgr: true, name: "asciitilde" }, + 163: { shift: false, altgr: true, name: "sterling" }, + 164: { shift: true, altgr: false, name: "currency" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 167: { shift: true, altgr: false, name: "section" }, + 177: { shift: false, altgr: true, name: "plusminus" }, + 189: { shift: false, altgr: false, name: "onehalf" }, + 197: { shift: true, altgr: false, name: "Aring" }, + 198: { shift: true, altgr: false, name: "AE" }, + 208: { shift: true, altgr: false, name: "ETH" }, + 216: { shift: true, altgr: false, name: "Ooblique" }, + 229: { shift: false, altgr: false, name: "aring" }, + 230: { shift: false, altgr: false, name: "ae" }, + 240: { shift: false, altgr: false, name: "eth" }, + 248: { shift: false, altgr: false, name: "oslash" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65105: { shift: false, altgr: false, name: "dead_acute" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'fr': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: false, altgr: false, name: "exclam" }, + 34: { shift: false, altgr: false, name: "quotedbl" }, + 35: { shift: false, altgr: true, name: "numbersign" }, + 36: { shift: false, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: false, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: false, altgr: false, name: "parenleft" }, + 41: { shift: false, altgr: false, name: "parenright" }, + 42: { shift: false, altgr: false, name: "asterisk" }, + 43: { shift: true, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: true, altgr: false, name: "period" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: true, altgr: false, name: "0" }, + 49: { shift: true, altgr: false, name: "1" }, + 50: { shift: true, altgr: false, name: "2" }, + 51: { shift: true, altgr: false, name: "3" }, + 52: { shift: true, altgr: false, name: "4" }, + 53: { shift: true, altgr: false, name: "5" }, + 54: { shift: true, altgr: false, name: "6" }, + 55: { shift: true, altgr: false, name: "7" }, + 56: { shift: true, altgr: false, name: "8" }, + 57: { shift: true, altgr: false, name: "9" }, + 58: { shift: false, altgr: false, name: "colon" }, + 59: { shift: false, altgr: false, name: "semicolon" }, + 60: { shift: false, altgr: false, name: "less" }, + 61: { shift: false, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: true, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 94: { shift: false, altgr: true, name: "asciicircum" }, + 95: { shift: false, altgr: false, name: "underscore" }, + 96: { shift: false, altgr: true, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: false, altgr: true, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 126: { shift: false, altgr: true, name: "asciitilde" }, + 161: { shift: true, altgr: true, name: "exclamdown" }, + 162: { shift: false, altgr: true, name: "cent" }, + 163: { shift: true, altgr: false, name: "sterling" }, + 164: { shift: false, altgr: true, name: "currency" }, + 165: { shift: true, altgr: true, name: "yen" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 167: { shift: true, altgr: false, name: "section" }, + 169: { shift: true, altgr: true, name: "copyright" }, + 170: { shift: true, altgr: true, name: "ordfeminine" }, + 171: { shift: false, altgr: true, name: "guillemotleft" }, + 172: { shift: false, altgr: true, name: "notsign" }, + 174: { shift: true, altgr: true, name: "registered" }, + 176: { shift: true, altgr: false, name: "degree" }, + 177: { shift: true, altgr: true, name: "plusminus" }, + 178: { shift: false, altgr: false, name: "twosuperior" }, + 181: { shift: true, altgr: false, name: "mu" }, + 182: { shift: false, altgr: true, name: "paragraph" }, + 183: { shift: false, altgr: true, name: "periodcentered" }, + 185: { shift: false, altgr: true, name: "onesuperior" }, + 186: { shift: true, altgr: true, name: "masculine" }, + 187: { shift: false, altgr: true, name: "guillemotright" }, + 191: { shift: true, altgr: true, name: "questiondown" }, + 198: { shift: true, altgr: true, name: "AE" }, + 208: { shift: true, altgr: true, name: "ETH" }, + 215: { shift: true, altgr: true, name: "multiply" }, + 216: { shift: true, altgr: true, name: "Ooblique" }, + 222: { shift: true, altgr: true, name: "THORN" }, + 223: { shift: false, altgr: true, name: "ssharp" }, + 224: { shift: false, altgr: false, name: "agrave" }, + 230: { shift: false, altgr: true, name: "ae" }, + 231: { shift: false, altgr: false, name: "ccedilla" }, + 232: { shift: false, altgr: false, name: "egrave" }, + 233: { shift: false, altgr: false, name: "eacute" }, + 240: { shift: false, altgr: true, name: "eth" }, + 247: { shift: true, altgr: true, name: "division" }, + 248: { shift: false, altgr: true, name: "oslash" }, + 249: { shift: false, altgr: false, name: "ugrave" }, + 254: { shift: false, altgr: true, name: "thorn" }, + 419: { shift: true, altgr: true, name: "Lstroke" }, + 435: { shift: false, altgr: true, name: "lstroke" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: false, altgr: true, name: "dead_grave" }, + 65105: { shift: false, altgr: true, name: "dead_acute" }, + 65106: { shift: false, altgr: false, name: "dead_circumflex" }, + 65108: { shift: true, altgr: true, name: "dead_macron" }, + 65109: { shift: true, altgr: true, name: "dead_breve" }, + 65110: { shift: true, altgr: true, name: "dead_abovedot" }, + 65111: { shift: true, altgr: false, name: "dead_diaeresis" }, + 65112: { shift: true, altgr: true, name: "dead_abovering" }, + 65113: { shift: true, altgr: true, name: "dead_doubleacute" }, + 65114: { shift: true, altgr: true, name: "dead_caron" }, + 65116: { shift: true, altgr: true, name: "dead_ogonek" }, + 65120: { shift: false, altgr: true, name: "dead_belowdot" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'fr-be': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: false, altgr: false, name: "exclam" }, + 34: { shift: false, altgr: false, name: "quotedbl" }, + 35: { shift: false, altgr: true, name: "numbersign" }, + 36: { shift: false, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: false, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: false, altgr: false, name: "parenleft" }, + 41: { shift: false, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: true, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: true, altgr: false, name: "period" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: true, altgr: false, name: "0" }, + 49: { shift: true, altgr: false, name: "1" }, + 50: { shift: true, altgr: false, name: "2" }, + 51: { shift: true, altgr: false, name: "3" }, + 52: { shift: true, altgr: false, name: "4" }, + 53: { shift: true, altgr: false, name: "5" }, + 54: { shift: true, altgr: false, name: "6" }, + 55: { shift: true, altgr: false, name: "7" }, + 56: { shift: true, altgr: false, name: "8" }, + 57: { shift: true, altgr: false, name: "9" }, + 58: { shift: false, altgr: false, name: "colon" }, + 59: { shift: false, altgr: false, name: "semicolon" }, + 60: { shift: false, altgr: false, name: "less" }, + 61: { shift: false, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: true, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 94: { shift: false, altgr: true, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: true, altgr: true, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: false, altgr: true, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 161: { shift: true, altgr: true, name: "exclamdown" }, + 162: { shift: false, altgr: true, name: "cent" }, + 163: { shift: true, altgr: false, name: "sterling" }, + 165: { shift: true, altgr: true, name: "yen" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 167: { shift: false, altgr: false, name: "section" }, + 169: { shift: true, altgr: true, name: "copyright" }, + 170: { shift: true, altgr: true, name: "ordfeminine" }, + 171: { shift: false, altgr: true, name: "guillemotleft" }, + 172: { shift: false, altgr: true, name: "notsign" }, + 174: { shift: true, altgr: true, name: "registered" }, + 176: { shift: true, altgr: false, name: "degree" }, + 177: { shift: true, altgr: true, name: "plusminus" }, + 178: { shift: false, altgr: false, name: "twosuperior" }, + 179: { shift: true, altgr: false, name: "threesuperior" }, + 181: { shift: false, altgr: false, name: "mu" }, + 182: { shift: false, altgr: true, name: "paragraph" }, + 183: { shift: false, altgr: true, name: "periodcentered" }, + 186: { shift: true, altgr: true, name: "masculine" }, + 187: { shift: false, altgr: true, name: "guillemotright" }, + 188: { shift: false, altgr: true, name: "onequarter" }, + 189: { shift: false, altgr: true, name: "onehalf" }, + 191: { shift: true, altgr: true, name: "questiondown" }, + 198: { shift: true, altgr: true, name: "AE" }, + 208: { shift: true, altgr: true, name: "ETH" }, + 215: { shift: true, altgr: true, name: "multiply" }, + 216: { shift: true, altgr: true, name: "Ooblique" }, + 222: { shift: true, altgr: true, name: "THORN" }, + 223: { shift: false, altgr: true, name: "ssharp" }, + 224: { shift: false, altgr: false, name: "agrave" }, + 230: { shift: false, altgr: true, name: "ae" }, + 231: { shift: false, altgr: false, name: "ccedilla" }, + 232: { shift: false, altgr: false, name: "egrave" }, + 233: { shift: false, altgr: false, name: "eacute" }, + 240: { shift: false, altgr: true, name: "eth" }, + 247: { shift: true, altgr: true, name: "division" }, + 248: { shift: false, altgr: true, name: "oslash" }, + 249: { shift: false, altgr: false, name: "ugrave" }, + 254: { shift: false, altgr: true, name: "thorn" }, + 419: { shift: true, altgr: true, name: "Lstroke" }, + 435: { shift: false, altgr: true, name: "lstroke" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: false, altgr: true, name: "dead_grave" }, + 65105: { shift: false, altgr: true, name: "dead_acute" }, + 65106: { shift: false, altgr: false, name: "dead_circumflex" }, + 65107: { shift: false, altgr: true, name: "dead_tilde" }, + 65108: { shift: true, altgr: true, name: "dead_macron" }, + 65109: { shift: true, altgr: true, name: "dead_breve" }, + 65110: { shift: true, altgr: true, name: "dead_abovedot" }, + 65111: { shift: true, altgr: false, name: "dead_diaeresis" }, + 65112: { shift: true, altgr: true, name: "dead_abovering" }, + 65113: { shift: true, altgr: true, name: "dead_doubleacute" }, + 65114: { shift: true, altgr: true, name: "dead_caron" }, + 65115: { shift: false, altgr: true, name: "dead_cedilla" }, + 65116: { shift: true, altgr: true, name: "dead_ogonek" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'fr-ca': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: true, altgr: false, name: "plus" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 60: { shift: false, altgr: false, name: "less" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: true, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: true, altgr: false, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 126: { shift: false, altgr: true, name: "asciitilde" }, + 162: { shift: false, altgr: true, name: "cent" }, + 163: { shift: false, altgr: true, name: "sterling" }, + 164: { shift: false, altgr: true, name: "currency" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 167: { shift: false, altgr: true, name: "section" }, + 171: { shift: false, altgr: false, name: "guillemotleft" }, + 172: { shift: false, altgr: true, name: "notsign" }, + 176: { shift: false, altgr: true, name: "degree" }, + 177: { shift: false, altgr: true, name: "plusminus" }, + 178: { shift: false, altgr: true, name: "twosuperior" }, + 179: { shift: false, altgr: true, name: "threesuperior" }, + 181: { shift: false, altgr: true, name: "mu" }, + 182: { shift: false, altgr: true, name: "paragraph" }, + 187: { shift: true, altgr: false, name: "guillemotright" }, + 188: { shift: false, altgr: true, name: "onequarter" }, + 189: { shift: false, altgr: true, name: "onehalf" }, + 190: { shift: false, altgr: true, name: "threequarters" }, + 233: { shift: false, altgr: false, name: "eacute" }, + 65104: { shift: false, altgr: false, name: "dead_grave" }, + 65105: { shift: false, altgr: true, name: "dead_acute" }, + 65106: { shift: true, altgr: false, name: "dead_circumflex" }, + 65111: { shift: true, altgr: false, name: "dead_diaeresis" }, + 65115: { shift: false, altgr: false, name: "dead_cedilla" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'fr-ch': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: false, altgr: false, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: true, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: false, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: true, altgr: false, name: "semicolon" }, + 60: { shift: false, altgr: false, name: "less" }, + 61: { shift: true, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: true, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 94: { shift: false, altgr: false, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: true, altgr: false, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: false, altgr: true, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 126: { shift: false, altgr: true, name: "asciitilde" }, + 161: { shift: true, altgr: true, name: "exclamdown" }, + 162: { shift: false, altgr: true, name: "cent" }, + 163: { shift: true, altgr: true, name: "sterling" }, + 164: { shift: true, altgr: true, name: "currency" }, + 165: { shift: true, altgr: true, name: "yen" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 167: { shift: true, altgr: false, name: "section" }, + 169: { shift: true, altgr: true, name: "copyright" }, + 170: { shift: true, altgr: true, name: "ordfeminine" }, + 171: { shift: false, altgr: true, name: "guillemotleft" }, + 172: { shift: false, altgr: true, name: "notsign" }, + 174: { shift: true, altgr: true, name: "registered" }, + 176: { shift: true, altgr: false, name: "degree" }, + 177: { shift: true, altgr: true, name: "plusminus" }, + 178: { shift: false, altgr: true, name: "twosuperior" }, + 179: { shift: false, altgr: true, name: "threesuperior" }, + 180: { shift: false, altgr: false, name: "acute" }, + 181: { shift: false, altgr: true, name: "mu" }, + 182: { shift: false, altgr: true, name: "paragraph" }, + 183: { shift: false, altgr: true, name: "periodcentered" }, + 185: { shift: false, altgr: true, name: "onesuperior" }, + 186: { shift: true, altgr: true, name: "masculine" }, + 187: { shift: false, altgr: true, name: "guillemotright" }, + 188: { shift: false, altgr: true, name: "onequarter" }, + 189: { shift: false, altgr: true, name: "onehalf" }, + 190: { shift: false, altgr: true, name: "threequarters" }, + 191: { shift: true, altgr: true, name: "questiondown" }, + 196: { shift: true, altgr: false, name: "Adiaeresis" }, + 198: { shift: true, altgr: true, name: "AE" }, + 208: { shift: true, altgr: true, name: "ETH" }, + 214: { shift: true, altgr: false, name: "Odiaeresis" }, + 215: { shift: true, altgr: true, name: "multiply" }, + 216: { shift: true, altgr: true, name: "Ooblique" }, + 220: { shift: true, altgr: false, name: "Udiaeresis" }, + 222: { shift: true, altgr: true, name: "THORN" }, + 223: { shift: false, altgr: false, name: "ssharp" }, + 228: { shift: false, altgr: false, name: "adiaeresis" }, + 230: { shift: false, altgr: true, name: "ae" }, + 240: { shift: false, altgr: true, name: "eth" }, + 246: { shift: false, altgr: false, name: "odiaeresis" }, + 247: { shift: true, altgr: true, name: "division" }, + 248: { shift: false, altgr: true, name: "oslash" }, + 252: { shift: false, altgr: false, name: "udiaeresis" }, + 254: { shift: false, altgr: true, name: "thorn" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: true, altgr: false, name: "dead_grave" }, + 65105: { shift: false, altgr: false, name: "dead_acute" }, + 65106: { shift: false, altgr: false, name: "dead_circumflex" }, + 65107: { shift: false, altgr: true, name: "dead_tilde" }, + 65108: { shift: true, altgr: true, name: "dead_macron" }, + 65109: { shift: true, altgr: true, name: "dead_breve" }, + 65110: { shift: true, altgr: true, name: "dead_abovedot" }, + 65111: { shift: false, altgr: true, name: "dead_diaeresis" }, + 65112: { shift: true, altgr: true, name: "dead_abovering" }, + 65113: { shift: false, altgr: true, name: "dead_doubleacute" }, + 65114: { shift: true, altgr: true, name: "dead_caron" }, + 65115: { shift: false, altgr: true, name: "dead_cedilla" }, + 65116: { shift: true, altgr: true, name: "dead_ogonek" }, + 65120: { shift: false, altgr: true, name: "dead_belowdot" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'hr': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: true, name: "ampersand" }, + 39: { shift: true, altgr: true, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: false, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: true, altgr: false, name: "semicolon" }, + 60: { shift: true, altgr: true, name: "less" }, + 61: { shift: true, altgr: false, name: "equal" }, + 62: { shift: true, altgr: true, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: true, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 94: { shift: false, altgr: true, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: true, altgr: true, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: false, altgr: true, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 126: { shift: false, altgr: true, name: "asciitilde" }, + 162: { shift: false, altgr: true, name: "cent" }, + 164: { shift: false, altgr: true, name: "currency" }, + 165: { shift: true, altgr: true, name: "yen" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 167: { shift: false, altgr: true, name: "section" }, + 168: { shift: true, altgr: true, name: "diaeresis" }, + 169: { shift: true, altgr: true, name: "copyright" }, + 170: { shift: true, altgr: true, name: "ordfeminine" }, + 171: { shift: false, altgr: true, name: "guillemotleft" }, + 172: { shift: false, altgr: true, name: "notsign" }, + 174: { shift: true, altgr: true, name: "registered" }, + 176: { shift: false, altgr: true, name: "degree" }, + 182: { shift: false, altgr: true, name: "paragraph" }, + 183: { shift: false, altgr: true, name: "periodcentered" }, + 184: { shift: true, altgr: true, name: "cedilla" }, + 186: { shift: true, altgr: true, name: "masculine" }, + 187: { shift: false, altgr: true, name: "guillemotright" }, + 198: { shift: true, altgr: true, name: "AE" }, + 208: { shift: true, altgr: true, name: "ETH" }, + 215: { shift: true, altgr: true, name: "multiply" }, + 216: { shift: true, altgr: true, name: "Ooblique" }, + 222: { shift: true, altgr: true, name: "THORN" }, + 223: { shift: false, altgr: true, name: "ssharp" }, + 230: { shift: false, altgr: true, name: "ae" }, + 240: { shift: false, altgr: true, name: "eth" }, + 247: { shift: true, altgr: true, name: "division" }, + 248: { shift: false, altgr: true, name: "oslash" }, + 254: { shift: false, altgr: true, name: "thorn" }, + 419: { shift: false, altgr: true, name: "Lstroke" }, + 435: { shift: false, altgr: true, name: "lstroke" }, + 454: { shift: true, altgr: false, name: "Cacute" }, + 486: { shift: false, altgr: false, name: "cacute" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: true, altgr: true, name: "dead_grave" }, + 65105: { shift: false, altgr: true, name: "dead_acute" }, + 65106: { shift: true, altgr: true, name: "dead_circumflex" }, + 65107: { shift: true, altgr: true, name: "dead_tilde" }, + 65108: { shift: true, altgr: true, name: "dead_macron" }, + 65109: { shift: true, altgr: true, name: "dead_breve" }, + 65110: { shift: true, altgr: true, name: "dead_abovedot" }, + 65111: { shift: true, altgr: false, name: "dead_diaeresis" }, + 65112: { shift: true, altgr: true, name: "dead_abovering" }, + 65113: { shift: true, altgr: true, name: "dead_doubleacute" }, + 65114: { shift: true, altgr: true, name: "dead_caron" }, + 65115: { shift: false, altgr: false, name: "dead_cedilla" }, + 65116: { shift: false, altgr: true, name: "dead_ogonek" }, + 65120: { shift: false, altgr: true, name: "dead_belowdot" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'hu': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: false, altgr: true, name: "numbersign" }, + 36: { shift: false, altgr: true, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: false, altgr: true, name: "ampersand" }, + 39: { shift: true, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: false, altgr: true, name: "asterisk" }, + 43: { shift: true, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: false, altgr: true, name: "semicolon" }, + 60: { shift: false, altgr: true, name: "less" }, + 61: { shift: true, altgr: false, name: "equal" }, + 62: { shift: false, altgr: true, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: true, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 94: { shift: false, altgr: true, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: false, altgr: true, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: false, altgr: true, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 126: { shift: false, altgr: true, name: "asciitilde" }, + 164: { shift: false, altgr: true, name: "currency" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 167: { shift: true, altgr: false, name: "section" }, + 168: { shift: false, altgr: true, name: "diaeresis" }, + 172: { shift: false, altgr: true, name: "notsign" }, + 176: { shift: false, altgr: true, name: "degree" }, + 180: { shift: false, altgr: true, name: "acute" }, + 184: { shift: false, altgr: true, name: "cedilla" }, + 193: { shift: true, altgr: false, name: "Aacute" }, + 201: { shift: true, altgr: false, name: "Eacute" }, + 205: { shift: false, altgr: true, name: "Iacute" }, + 211: { shift: true, altgr: false, name: "Oacute" }, + 214: { shift: true, altgr: false, name: "Odiaeresis" }, + 215: { shift: false, altgr: true, name: "multiply" }, + 218: { shift: true, altgr: false, name: "Uacute" }, + 220: { shift: true, altgr: false, name: "Udiaeresis" }, + 223: { shift: false, altgr: true, name: "ssharp" }, + 225: { shift: false, altgr: false, name: "aacute" }, + 233: { shift: false, altgr: false, name: "eacute" }, + 237: { shift: false, altgr: true, name: "iacute" }, + 243: { shift: false, altgr: false, name: "oacute" }, + 246: { shift: false, altgr: false, name: "odiaeresis" }, + 247: { shift: false, altgr: true, name: "division" }, + 250: { shift: false, altgr: false, name: "uacute" }, + 252: { shift: false, altgr: false, name: "udiaeresis" }, + 419: { shift: false, altgr: true, name: "Lstroke" }, + 435: { shift: false, altgr: true, name: "lstroke" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65482: { shift: true, altgr: false, name: "F13" }, + 65483: { shift: true, altgr: false, name: "F14" }, + 65484: { shift: true, altgr: false, name: "F15" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'is': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: false, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: true, altgr: false, name: "semicolon" }, + 60: { shift: false, altgr: false, name: "less" }, + 61: { shift: true, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: true, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: false, altgr: true, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: false, altgr: true, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 126: { shift: false, altgr: true, name: "asciitilde" }, + 161: { shift: true, altgr: true, name: "exclamdown" }, + 162: { shift: false, altgr: true, name: "cent" }, + 163: { shift: true, altgr: true, name: "sterling" }, + 164: { shift: true, altgr: true, name: "currency" }, + 165: { shift: true, altgr: true, name: "yen" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 169: { shift: true, altgr: true, name: "copyright" }, + 170: { shift: true, altgr: true, name: "ordfeminine" }, + 171: { shift: false, altgr: true, name: "guillemotleft" }, + 174: { shift: true, altgr: true, name: "registered" }, + 177: { shift: true, altgr: true, name: "plusminus" }, + 178: { shift: false, altgr: true, name: "twosuperior" }, + 179: { shift: false, altgr: true, name: "threesuperior" }, + 180: { shift: false, altgr: false, name: "acute" }, + 181: { shift: false, altgr: true, name: "mu" }, + 182: { shift: false, altgr: true, name: "paragraph" }, + 183: { shift: false, altgr: true, name: "periodcentered" }, + 185: { shift: false, altgr: true, name: "onesuperior" }, + 186: { shift: true, altgr: true, name: "masculine" }, + 187: { shift: false, altgr: true, name: "guillemotright" }, + 188: { shift: false, altgr: true, name: "onequarter" }, + 189: { shift: false, altgr: true, name: "onehalf" }, + 190: { shift: false, altgr: true, name: "threequarters" }, + 191: { shift: true, altgr: true, name: "questiondown" }, + 198: { shift: true, altgr: false, name: "AE" }, + 208: { shift: true, altgr: false, name: "ETH" }, + 214: { shift: true, altgr: false, name: "Odiaeresis" }, + 215: { shift: true, altgr: true, name: "multiply" }, + 216: { shift: true, altgr: true, name: "Ooblique" }, + 222: { shift: true, altgr: false, name: "THORN" }, + 230: { shift: false, altgr: false, name: "ae" }, + 240: { shift: false, altgr: false, name: "eth" }, + 246: { shift: false, altgr: false, name: "odiaeresis" }, + 247: { shift: true, altgr: true, name: "division" }, + 248: { shift: false, altgr: true, name: "oslash" }, + 254: { shift: false, altgr: false, name: "thorn" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65105: { shift: false, altgr: false, name: "dead_acute" }, + 65110: { shift: true, altgr: true, name: "dead_abovedot" }, + 65113: { shift: false, altgr: true, name: "dead_doubleacute" }, + 65115: { shift: false, altgr: true, name: "dead_cedilla" }, + 65116: { shift: true, altgr: true, name: "dead_ogonek" }, + 65120: { shift: false, altgr: true, name: "dead_belowdot" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'it': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: false, altgr: true, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: false, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: true, altgr: false, name: "semicolon" }, + 60: { shift: false, altgr: false, name: "less" }, + 61: { shift: true, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: false, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 94: { shift: true, altgr: false, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: true, altgr: true, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: true, altgr: false, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 126: { shift: false, altgr: true, name: "asciitilde" }, + 161: { shift: true, altgr: true, name: "exclamdown" }, + 162: { shift: false, altgr: true, name: "cent" }, + 163: { shift: true, altgr: false, name: "sterling" }, + 165: { shift: true, altgr: true, name: "yen" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 167: { shift: true, altgr: false, name: "section" }, + 169: { shift: true, altgr: true, name: "copyright" }, + 170: { shift: true, altgr: true, name: "ordfeminine" }, + 171: { shift: false, altgr: true, name: "guillemotleft" }, + 172: { shift: false, altgr: true, name: "notsign" }, + 174: { shift: true, altgr: true, name: "registered" }, + 176: { shift: true, altgr: false, name: "degree" }, + 177: { shift: true, altgr: true, name: "plusminus" }, + 178: { shift: false, altgr: true, name: "twosuperior" }, + 179: { shift: false, altgr: true, name: "threesuperior" }, + 181: { shift: false, altgr: true, name: "mu" }, + 182: { shift: false, altgr: true, name: "paragraph" }, + 183: { shift: false, altgr: true, name: "periodcentered" }, + 185: { shift: false, altgr: true, name: "onesuperior" }, + 186: { shift: true, altgr: true, name: "masculine" }, + 187: { shift: false, altgr: true, name: "guillemotright" }, + 188: { shift: false, altgr: true, name: "onequarter" }, + 189: { shift: false, altgr: true, name: "onehalf" }, + 190: { shift: false, altgr: true, name: "threequarters" }, + 191: { shift: true, altgr: true, name: "questiondown" }, + 198: { shift: true, altgr: true, name: "AE" }, + 208: { shift: true, altgr: true, name: "ETH" }, + 215: { shift: true, altgr: true, name: "multiply" }, + 216: { shift: true, altgr: true, name: "Ooblique" }, + 222: { shift: true, altgr: true, name: "THORN" }, + 223: { shift: false, altgr: true, name: "ssharp" }, + 224: { shift: false, altgr: false, name: "agrave" }, + 230: { shift: false, altgr: true, name: "ae" }, + 231: { shift: true, altgr: false, name: "ccedilla" }, + 232: { shift: false, altgr: false, name: "egrave" }, + 233: { shift: true, altgr: false, name: "eacute" }, + 236: { shift: false, altgr: false, name: "igrave" }, + 240: { shift: false, altgr: true, name: "eth" }, + 242: { shift: false, altgr: false, name: "ograve" }, + 247: { shift: true, altgr: true, name: "division" }, + 248: { shift: false, altgr: true, name: "oslash" }, + 249: { shift: false, altgr: false, name: "ugrave" }, + 254: { shift: false, altgr: true, name: "thorn" }, + 419: { shift: true, altgr: true, name: "Lstroke" }, + 435: { shift: false, altgr: true, name: "lstroke" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: false, altgr: true, name: "dead_grave" }, + 65108: { shift: true, altgr: true, name: "dead_macron" }, + 65109: { shift: true, altgr: true, name: "dead_breve" }, + 65110: { shift: true, altgr: true, name: "dead_abovedot" }, + 65112: { shift: true, altgr: true, name: "dead_abovering" }, + 65113: { shift: true, altgr: true, name: "dead_doubleacute" }, + 65116: { shift: true, altgr: true, name: "dead_ogonek" }, + 65120: { shift: false, altgr: true, name: "dead_belowdot" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'ja': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: true, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: true, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: false, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: false, altgr: false, name: "colon" }, + 59: { shift: false, altgr: false, name: "semicolon" }, + 60: { shift: true, altgr: false, name: "less" }, + 61: { shift: true, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: false, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: false, name: "bracketleft" }, + 92: { shift: false, altgr: false, name: "backslash" }, + 93: { shift: false, altgr: false, name: "bracketright" }, + 94: { shift: false, altgr: false, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: true, altgr: false, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: true, altgr: false, name: "braceleft" }, + 124: { shift: true, altgr: false, name: "bar" }, + 125: { shift: true, altgr: false, name: "braceright" }, + 126: { shift: true, altgr: false, name: "asciitilde" }, + 165: { shift: false, altgr: false, name: "yen" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65314: { shift: false, altgr: false, name: "Muhenkan" }, + 65315: { shift: false, altgr: false, name: "Henkan_Mode_Real" }, + 65317: { shift: false, altgr: false, name: "Katakana_Real" }, + 65319: { shift: false, altgr: false, name: "Katakana" }, + 65322: { shift: false, altgr: false, name: "Zenkaku_Hankaku" }, + 65328: { shift: true, altgr: false, name: "Eisu_toggle" }, + 65342: { shift: false, altgr: false, name: "Henkan_Mode_Ultra" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65445: { shift: false, altgr: false, name: "backslash_ja" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'lt': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: true, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: false, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: false, altgr: false, name: "semicolon" }, + 60: { shift: true, altgr: false, name: "less" }, + 61: { shift: false, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: true, altgr: false, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: false, name: "bracketleft" }, + 92: { shift: false, altgr: false, name: "backslash" }, + 93: { shift: false, altgr: false, name: "bracketright" }, + 94: { shift: true, altgr: false, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: false, altgr: false, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: true, altgr: false, name: "braceleft" }, + 124: { shift: true, altgr: false, name: "bar" }, + 125: { shift: true, altgr: false, name: "braceright" }, + 126: { shift: true, altgr: false, name: "asciitilde" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 417: { shift: true, altgr: true, name: "Aogonek" }, + 433: { shift: false, altgr: true, name: "aogonek" }, + 458: { shift: true, altgr: true, name: "Eogonek" }, + 490: { shift: false, altgr: true, name: "eogonek" }, + 8364: { shift: true, altgr: false, name: "EuroSign" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'lv': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: true, altgr: true, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: true, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: false, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: false, altgr: false, name: "semicolon" }, + 60: { shift: true, altgr: false, name: "less" }, + 61: { shift: false, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: false, name: "bracketleft" }, + 92: { shift: false, altgr: false, name: "backslash" }, + 93: { shift: false, altgr: false, name: "bracketright" }, + 94: { shift: true, altgr: false, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: true, altgr: true, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: true, altgr: false, name: "braceleft" }, + 124: { shift: true, altgr: false, name: "bar" }, + 125: { shift: true, altgr: false, name: "braceright" }, + 126: { shift: true, altgr: false, name: "asciitilde" }, + 160: { shift: false, altgr: true, name: "nobreakspace" }, + 161: { shift: true, altgr: true, name: "exclamdown" }, + 162: { shift: true, altgr: true, name: "cent" }, + 163: { shift: true, altgr: true, name: "sterling" }, + 165: { shift: true, altgr: true, name: "yen" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 170: { shift: true, altgr: true, name: "ordfeminine" }, + 172: { shift: false, altgr: true, name: "notsign" }, + 176: { shift: true, altgr: true, name: "degree" }, + 177: { shift: true, altgr: true, name: "plusminus" }, + 178: { shift: false, altgr: true, name: "twosuperior" }, + 179: { shift: false, altgr: true, name: "threesuperior" }, + 181: { shift: false, altgr: true, name: "mu" }, + 183: { shift: false, altgr: true, name: "periodcentered" }, + 185: { shift: false, altgr: true, name: "onesuperior" }, + 186: { shift: true, altgr: true, name: "masculine" }, + 187: { shift: false, altgr: true, name: "guillemotright" }, + 189: { shift: false, altgr: true, name: "onehalf" }, + 190: { shift: false, altgr: true, name: "threequarters" }, + 191: { shift: true, altgr: true, name: "questiondown" }, + 208: { shift: true, altgr: true, name: "ETH" }, + 215: { shift: true, altgr: true, name: "multiply" }, + 222: { shift: true, altgr: true, name: "THORN" }, + 240: { shift: false, altgr: true, name: "eth" }, + 247: { shift: true, altgr: true, name: "division" }, + 254: { shift: false, altgr: true, name: "thorn" }, + 419: { shift: true, altgr: true, name: "Lstroke" }, + 435: { shift: false, altgr: true, name: "lstroke" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: false, altgr: true, name: "dead_grave" }, + 65105: { shift: false, altgr: true, name: "dead_acute" }, + 65107: { shift: false, altgr: true, name: "dead_tilde" }, + 65108: { shift: true, altgr: true, name: "dead_macron" }, + 65109: { shift: true, altgr: true, name: "dead_breve" }, + 65110: { shift: true, altgr: true, name: "dead_abovedot" }, + 65111: { shift: false, altgr: true, name: "dead_diaeresis" }, + 65112: { shift: true, altgr: true, name: "dead_abovering" }, + 65113: { shift: true, altgr: true, name: "dead_doubleacute" }, + 65115: { shift: false, altgr: true, name: "dead_cedilla" }, + 65116: { shift: true, altgr: true, name: "dead_ogonek" }, + 65120: { shift: false, altgr: true, name: "dead_belowdot" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'mk': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: true, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: false, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: true, name: "colon" }, + 59: { shift: true, altgr: true, name: "semicolon" }, + 60: { shift: true, altgr: false, name: "less" }, + 61: { shift: false, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: true, altgr: false, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: false, name: "bracketleft" }, + 92: { shift: false, altgr: false, name: "backslash" }, + 93: { shift: false, altgr: false, name: "bracketright" }, + 94: { shift: true, altgr: false, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: false, altgr: false, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: true, altgr: false, name: "braceleft" }, + 124: { shift: true, altgr: false, name: "bar" }, + 125: { shift: true, altgr: false, name: "braceright" }, + 126: { shift: true, altgr: false, name: "asciitilde" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'nl': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: true, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: false, altgr: false, name: "asterisk" }, + 43: { shift: false, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: false, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: true, altgr: false, name: "semicolon" }, + 60: { shift: false, altgr: false, name: "less" }, + 61: { shift: true, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: false, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: true, altgr: false, name: "bracketleft" }, + 92: { shift: false, altgr: true, name: "backslash" }, + 93: { shift: false, altgr: false, name: "bracketright" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: true, altgr: false, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 163: { shift: false, altgr: true, name: "sterling" }, + 166: { shift: false, altgr: true, name: "brokenbar" }, + 167: { shift: true, altgr: false, name: "section" }, + 169: { shift: false, altgr: true, name: "copyright" }, + 171: { shift: false, altgr: true, name: "guillemotleft" }, + 172: { shift: false, altgr: true, name: "notsign" }, + 173: { shift: false, altgr: false, name: "hyphen" }, + 176: { shift: false, altgr: false, name: "degree" }, + 177: { shift: true, altgr: false, name: "plusminus" }, + 178: { shift: false, altgr: true, name: "twosuperior" }, + 179: { shift: false, altgr: true, name: "threesuperior" }, + 181: { shift: false, altgr: true, name: "mu" }, + 182: { shift: false, altgr: true, name: "paragraph" }, + 183: { shift: false, altgr: true, name: "periodcentered" }, + 185: { shift: false, altgr: true, name: "onesuperior" }, + 187: { shift: false, altgr: true, name: "guillemotright" }, + 188: { shift: false, altgr: true, name: "onequarter" }, + 189: { shift: false, altgr: true, name: "onehalf" }, + 190: { shift: false, altgr: true, name: "threequarters" }, + 223: { shift: false, altgr: true, name: "ssharp" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: true, altgr: false, name: "dead_grave" }, + 65105: { shift: false, altgr: false, name: "dead_acute" }, + 65106: { shift: true, altgr: false, name: "dead_circumflex" }, + 65107: { shift: true, altgr: false, name: "dead_tilde" }, + 65111: { shift: false, altgr: false, name: "dead_diaeresis" }, + 65115: { shift: false, altgr: true, name: "dead_cedilla" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'nl-be': { + 32: { shift: false, altgr: false, name: "space" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 60: { shift: false, altgr: false, name: "less" }, + 62: { shift: true, altgr: false, name: "greater" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 124: { shift: false, altgr: true, name: "bar" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'no': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: false, altgr: true, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: false, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: true, altgr: false, name: "semicolon" }, + 60: { shift: false, altgr: false, name: "less" }, + 61: { shift: true, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: false, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 94: { shift: true, altgr: false, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: false, altgr: false, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 126: { shift: false, altgr: true, name: "asciitilde" }, + 160: { shift: false, altgr: true, name: "nobreakspace" }, + 161: { shift: false, altgr: true, name: "exclamdown" }, + 162: { shift: true, altgr: true, name: "cent" }, + 163: { shift: false, altgr: true, name: "sterling" }, + 164: { shift: true, altgr: false, name: "currency" }, + 165: { shift: true, altgr: true, name: "yen" }, + 166: { shift: false, altgr: true, name: "brokenbar" }, + 167: { shift: true, altgr: false, name: "section" }, + 169: { shift: false, altgr: true, name: "copyright" }, + 170: { shift: true, altgr: true, name: "ordfeminine" }, + 171: { shift: false, altgr: true, name: "guillemotleft" }, + 172: { shift: true, altgr: true, name: "notsign" }, + 173: { shift: false, altgr: true, name: "hyphen" }, + 174: { shift: false, altgr: true, name: "registered" }, + 175: { shift: true, altgr: true, name: "macron" }, + 176: { shift: true, altgr: true, name: "degree" }, + 177: { shift: false, altgr: true, name: "plusminus" }, + 178: { shift: true, altgr: true, name: "twosuperior" }, + 179: { shift: true, altgr: true, name: "threesuperior" }, + 181: { shift: false, altgr: true, name: "mu" }, + 182: { shift: true, altgr: true, name: "paragraph" }, + 183: { shift: false, altgr: true, name: "periodcentered" }, + 185: { shift: true, altgr: true, name: "onesuperior" }, + 186: { shift: true, altgr: true, name: "masculine" }, + 187: { shift: false, altgr: true, name: "guillemotright" }, + 188: { shift: true, altgr: true, name: "onequarter" }, + 189: { shift: false, altgr: true, name: "onehalf" }, + 190: { shift: true, altgr: true, name: "threequarters" }, + 191: { shift: true, altgr: true, name: "questiondown" }, + 197: { shift: true, altgr: false, name: "Aring" }, + 198: { shift: true, altgr: false, name: "AE" }, + 208: { shift: true, altgr: true, name: "ETH" }, + 215: { shift: true, altgr: true, name: "multiply" }, + 216: { shift: true, altgr: false, name: "Ooblique" }, + 222: { shift: true, altgr: true, name: "THORN" }, + 223: { shift: false, altgr: true, name: "ssharp" }, + 229: { shift: false, altgr: false, name: "aring" }, + 230: { shift: false, altgr: false, name: "ae" }, + 240: { shift: false, altgr: true, name: "eth" }, + 247: { shift: true, altgr: true, name: "division" }, + 248: { shift: false, altgr: false, name: "oslash" }, + 254: { shift: false, altgr: true, name: "thorn" }, + 419: { shift: true, altgr: true, name: "Lstroke" }, + 435: { shift: false, altgr: true, name: "lstroke" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: true, altgr: false, name: "dead_grave" }, + 65105: { shift: false, altgr: true, name: "dead_acute" }, + 65106: { shift: true, altgr: false, name: "dead_circumflex" }, + 65107: { shift: false, altgr: true, name: "dead_tilde" }, + 65110: { shift: true, altgr: true, name: "dead_abovedot" }, + 65111: { shift: false, altgr: false, name: "dead_diaeresis" }, + 65112: { shift: true, altgr: true, name: "dead_abovering" }, + 65113: { shift: true, altgr: true, name: "dead_doubleacute" }, + 65114: { shift: true, altgr: true, name: "dead_caron" }, + 65115: { shift: false, altgr: true, name: "dead_cedilla" }, + 65116: { shift: true, altgr: true, name: "dead_ogonek" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'pl': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: true, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: false, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: false, altgr: false, name: "semicolon" }, + 60: { shift: true, altgr: false, name: "less" }, + 61: { shift: false, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: true, altgr: false, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: false, name: "bracketleft" }, + 92: { shift: false, altgr: false, name: "backslash" }, + 93: { shift: false, altgr: false, name: "bracketright" }, + 94: { shift: true, altgr: false, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: true, altgr: true, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: true, altgr: false, name: "braceleft" }, + 124: { shift: true, altgr: false, name: "bar" }, + 125: { shift: true, altgr: false, name: "braceright" }, + 126: { shift: true, altgr: false, name: "asciitilde" }, + 161: { shift: true, altgr: true, name: "exclamdown" }, + 163: { shift: true, altgr: true, name: "sterling" }, + 165: { shift: true, altgr: true, name: "yen" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 170: { shift: true, altgr: true, name: "ordfeminine" }, + 172: { shift: false, altgr: true, name: "notsign" }, + 174: { shift: true, altgr: true, name: "registered" }, + 176: { shift: true, altgr: true, name: "degree" }, + 177: { shift: true, altgr: true, name: "plusminus" }, + 178: { shift: false, altgr: true, name: "twosuperior" }, + 179: { shift: false, altgr: true, name: "threesuperior" }, + 181: { shift: false, altgr: true, name: "mu" }, + 182: { shift: false, altgr: true, name: "paragraph" }, + 183: { shift: false, altgr: true, name: "periodcentered" }, + 185: { shift: false, altgr: true, name: "onesuperior" }, + 186: { shift: true, altgr: true, name: "masculine" }, + 188: { shift: false, altgr: true, name: "onequarter" }, + 189: { shift: false, altgr: true, name: "onehalf" }, + 190: { shift: false, altgr: true, name: "threequarters" }, + 191: { shift: true, altgr: true, name: "questiondown" }, + 208: { shift: true, altgr: true, name: "ETH" }, + 211: { shift: true, altgr: true, name: "Oacute" }, + 215: { shift: true, altgr: true, name: "multiply" }, + 222: { shift: true, altgr: true, name: "THORN" }, + 240: { shift: false, altgr: true, name: "eth" }, + 243: { shift: false, altgr: true, name: "oacute" }, + 247: { shift: true, altgr: true, name: "division" }, + 254: { shift: false, altgr: true, name: "thorn" }, + 417: { shift: true, altgr: true, name: "Aogonek" }, + 419: { shift: true, altgr: true, name: "Lstroke" }, + 422: { shift: true, altgr: true, name: "Sacute" }, + 428: { shift: true, altgr: true, name: "Zacute" }, + 431: { shift: true, altgr: true, name: "Zabovedot" }, + 433: { shift: false, altgr: true, name: "aogonek" }, + 435: { shift: false, altgr: true, name: "lstroke" }, + 438: { shift: false, altgr: true, name: "sacute" }, + 444: { shift: false, altgr: true, name: "zacute" }, + 447: { shift: false, altgr: true, name: "zabovedot" }, + 454: { shift: true, altgr: true, name: "Cacute" }, + 458: { shift: true, altgr: true, name: "Eogonek" }, + 465: { shift: true, altgr: true, name: "Nacute" }, + 486: { shift: false, altgr: true, name: "cacute" }, + 490: { shift: false, altgr: true, name: "eogonek" }, + 497: { shift: false, altgr: true, name: "nacute" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: false, altgr: true, name: "dead_grave" }, + 65105: { shift: false, altgr: true, name: "dead_acute" }, + 65106: { shift: false, altgr: true, name: "dead_circumflex" }, + 65107: { shift: false, altgr: true, name: "dead_tilde" }, + 65108: { shift: true, altgr: true, name: "dead_macron" }, + 65109: { shift: true, altgr: true, name: "dead_breve" }, + 65110: { shift: true, altgr: true, name: "dead_abovedot" }, + 65111: { shift: false, altgr: true, name: "dead_diaeresis" }, + 65112: { shift: true, altgr: true, name: "dead_abovering" }, + 65113: { shift: true, altgr: true, name: "dead_doubleacute" }, + 65114: { shift: true, altgr: true, name: "dead_caron" }, + 65115: { shift: false, altgr: true, name: "dead_cedilla" }, + 65116: { shift: true, altgr: true, name: "dead_ogonek" }, + 65120: { shift: false, altgr: true, name: "dead_belowdot" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'pt': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: false, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: true, altgr: false, name: "semicolon" }, + 60: { shift: false, altgr: false, name: "less" }, + 61: { shift: true, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: false, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: true, altgr: true, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: true, altgr: false, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 161: { shift: true, altgr: true, name: "exclamdown" }, + 162: { shift: false, altgr: true, name: "cent" }, + 163: { shift: false, altgr: true, name: "sterling" }, + 165: { shift: true, altgr: true, name: "yen" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 167: { shift: false, altgr: true, name: "section" }, + 169: { shift: true, altgr: true, name: "copyright" }, + 170: { shift: true, altgr: false, name: "ordfeminine" }, + 171: { shift: false, altgr: false, name: "guillemotleft" }, + 172: { shift: false, altgr: true, name: "notsign" }, + 174: { shift: true, altgr: true, name: "registered" }, + 176: { shift: true, altgr: true, name: "degree" }, + 177: { shift: true, altgr: true, name: "plusminus" }, + 181: { shift: false, altgr: true, name: "mu" }, + 182: { shift: false, altgr: true, name: "paragraph" }, + 183: { shift: false, altgr: true, name: "periodcentered" }, + 185: { shift: false, altgr: true, name: "onesuperior" }, + 186: { shift: false, altgr: false, name: "masculine" }, + 187: { shift: true, altgr: false, name: "guillemotright" }, + 189: { shift: false, altgr: true, name: "onehalf" }, + 190: { shift: false, altgr: true, name: "threequarters" }, + 191: { shift: true, altgr: true, name: "questiondown" }, + 198: { shift: true, altgr: true, name: "AE" }, + 199: { shift: true, altgr: false, name: "Ccedilla" }, + 208: { shift: true, altgr: true, name: "ETH" }, + 215: { shift: true, altgr: true, name: "multiply" }, + 216: { shift: true, altgr: true, name: "Ooblique" }, + 222: { shift: true, altgr: true, name: "THORN" }, + 223: { shift: false, altgr: true, name: "ssharp" }, + 230: { shift: false, altgr: true, name: "ae" }, + 231: { shift: false, altgr: false, name: "ccedilla" }, + 240: { shift: false, altgr: true, name: "eth" }, + 247: { shift: true, altgr: true, name: "division" }, + 248: { shift: false, altgr: true, name: "oslash" }, + 254: { shift: false, altgr: true, name: "thorn" }, + 419: { shift: true, altgr: true, name: "Lstroke" }, + 435: { shift: false, altgr: true, name: "lstroke" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: true, altgr: false, name: "dead_grave" }, + 65105: { shift: false, altgr: false, name: "dead_acute" }, + 65106: { shift: true, altgr: false, name: "dead_circumflex" }, + 65107: { shift: false, altgr: false, name: "dead_tilde" }, + 65108: { shift: true, altgr: true, name: "dead_macron" }, + 65109: { shift: true, altgr: true, name: "dead_breve" }, + 65110: { shift: true, altgr: true, name: "dead_abovedot" }, + 65111: { shift: false, altgr: true, name: "dead_diaeresis" }, + 65112: { shift: true, altgr: true, name: "dead_abovering" }, + 65113: { shift: true, altgr: true, name: "dead_doubleacute" }, + 65114: { shift: true, altgr: true, name: "dead_caron" }, + 65115: { shift: false, altgr: true, name: "dead_cedilla" }, + 65116: { shift: true, altgr: true, name: "dead_ogonek" }, + 65120: { shift: false, altgr: true, name: "dead_belowdot" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'pt-br': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: true, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: false, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: false, altgr: false, name: "semicolon" }, + 60: { shift: true, altgr: false, name: "less" }, + 61: { shift: false, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: true, altgr: false, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: false, name: "bracketleft" }, + 92: { shift: false, altgr: false, name: "backslash" }, + 93: { shift: false, altgr: false, name: "bracketright" }, + 94: { shift: true, altgr: true, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: true, altgr: true, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: true, altgr: false, name: "braceleft" }, + 124: { shift: true, altgr: false, name: "bar" }, + 125: { shift: true, altgr: false, name: "braceright" }, + 126: { shift: false, altgr: true, name: "asciitilde" }, + 161: { shift: true, altgr: true, name: "exclamdown" }, + 162: { shift: false, altgr: true, name: "cent" }, + 163: { shift: false, altgr: true, name: "sterling" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 167: { shift: false, altgr: true, name: "section" }, + 168: { shift: true, altgr: true, name: "diaeresis" }, + 169: { shift: false, altgr: true, name: "copyright" }, + 170: { shift: false, altgr: true, name: "ordfeminine" }, + 172: { shift: false, altgr: true, name: "notsign" }, + 174: { shift: false, altgr: true, name: "registered" }, + 176: { shift: false, altgr: true, name: "degree" }, + 178: { shift: false, altgr: true, name: "twosuperior" }, + 179: { shift: false, altgr: true, name: "threesuperior" }, + 180: { shift: false, altgr: true, name: "acute" }, + 181: { shift: false, altgr: true, name: "mu" }, + 185: { shift: false, altgr: true, name: "onesuperior" }, + 186: { shift: false, altgr: true, name: "masculine" }, + 188: { shift: true, altgr: true, name: "onequarter" }, + 189: { shift: true, altgr: true, name: "onehalf" }, + 190: { shift: true, altgr: true, name: "threequarters" }, + 199: { shift: true, altgr: false, name: "Ccedilla" }, + 231: { shift: false, altgr: false, name: "ccedilla" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: true, altgr: false, name: "dead_grave" }, + 65105: { shift: false, altgr: false, name: "dead_acute" }, + 65106: { shift: true, altgr: false, name: "dead_circumflex" }, + 65107: { shift: false, altgr: false, name: "dead_tilde" }, + 65111: { shift: true, altgr: false, name: "dead_diaeresis" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'ru': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: true, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: false, altgr: true, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: false, altgr: false, name: "semicolon" }, + 60: { shift: true, altgr: false, name: "less" }, + 61: { shift: false, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: true, altgr: false, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: false, name: "bracketleft" }, + 92: { shift: false, altgr: false, name: "backslash" }, + 93: { shift: false, altgr: false, name: "bracketright" }, + 94: { shift: true, altgr: false, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: false, altgr: false, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: true, altgr: false, name: "braceleft" }, + 124: { shift: true, altgr: true, name: "bar" }, + 125: { shift: true, altgr: false, name: "braceright" }, + 126: { shift: true, altgr: false, name: "asciitilde" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'sl': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: false, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: true, altgr: false, name: "semicolon" }, + 60: { shift: false, altgr: false, name: "less" }, + 61: { shift: true, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: true, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 94: { shift: false, altgr: true, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: false, altgr: true, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: false, altgr: true, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 126: { shift: false, altgr: true, name: "asciitilde" }, + 162: { shift: false, altgr: true, name: "cent" }, + 164: { shift: false, altgr: true, name: "currency" }, + 165: { shift: true, altgr: true, name: "yen" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 167: { shift: false, altgr: true, name: "section" }, + 168: { shift: true, altgr: true, name: "diaeresis" }, + 169: { shift: true, altgr: true, name: "copyright" }, + 170: { shift: true, altgr: true, name: "ordfeminine" }, + 171: { shift: false, altgr: true, name: "guillemotleft" }, + 172: { shift: false, altgr: true, name: "notsign" }, + 174: { shift: true, altgr: true, name: "registered" }, + 176: { shift: false, altgr: true, name: "degree" }, + 182: { shift: false, altgr: true, name: "paragraph" }, + 183: { shift: false, altgr: true, name: "periodcentered" }, + 184: { shift: true, altgr: true, name: "cedilla" }, + 186: { shift: true, altgr: true, name: "masculine" }, + 187: { shift: false, altgr: true, name: "guillemotright" }, + 198: { shift: true, altgr: true, name: "AE" }, + 208: { shift: true, altgr: true, name: "ETH" }, + 215: { shift: false, altgr: true, name: "multiply" }, + 216: { shift: true, altgr: true, name: "Ooblique" }, + 222: { shift: true, altgr: true, name: "THORN" }, + 223: { shift: false, altgr: true, name: "ssharp" }, + 230: { shift: false, altgr: true, name: "ae" }, + 240: { shift: false, altgr: true, name: "eth" }, + 247: { shift: false, altgr: true, name: "division" }, + 248: { shift: false, altgr: true, name: "oslash" }, + 254: { shift: false, altgr: true, name: "thorn" }, + 419: { shift: false, altgr: true, name: "Lstroke" }, + 435: { shift: false, altgr: true, name: "lstroke" }, + 454: { shift: true, altgr: false, name: "Cacute" }, + 486: { shift: false, altgr: false, name: "cacute" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: true, altgr: true, name: "dead_grave" }, + 65105: { shift: false, altgr: true, name: "dead_acute" }, + 65106: { shift: true, altgr: true, name: "dead_circumflex" }, + 65107: { shift: true, altgr: true, name: "dead_tilde" }, + 65108: { shift: true, altgr: true, name: "dead_macron" }, + 65109: { shift: false, altgr: true, name: "dead_breve" }, + 65110: { shift: false, altgr: true, name: "dead_abovedot" }, + 65111: { shift: false, altgr: true, name: "dead_diaeresis" }, + 65112: { shift: true, altgr: true, name: "dead_abovering" }, + 65113: { shift: false, altgr: true, name: "dead_doubleacute" }, + 65114: { shift: false, altgr: true, name: "dead_caron" }, + 65115: { shift: false, altgr: false, name: "dead_cedilla" }, + 65116: { shift: false, altgr: true, name: "dead_ogonek" }, + 65120: { shift: false, altgr: true, name: "dead_belowdot" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'sv': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: false, altgr: true, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: false, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: true, altgr: false, name: "semicolon" }, + 60: { shift: false, altgr: false, name: "less" }, + 61: { shift: true, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: true, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: true, altgr: false, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: false, altgr: true, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 163: { shift: false, altgr: true, name: "sterling" }, + 164: { shift: true, altgr: false, name: "currency" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 167: { shift: false, altgr: false, name: "section" }, + 180: { shift: false, altgr: false, name: "acute" }, + 181: { shift: false, altgr: true, name: "mu" }, + 189: { shift: true, altgr: false, name: "onehalf" }, + 196: { shift: true, altgr: false, name: "Adiaeresis" }, + 197: { shift: true, altgr: false, name: "Aring" }, + 214: { shift: true, altgr: false, name: "Odiaeresis" }, + 228: { shift: false, altgr: false, name: "adiaeresis" }, + 229: { shift: false, altgr: false, name: "aring" }, + 246: { shift: false, altgr: false, name: "odiaeresis" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65104: { shift: true, altgr: false, name: "dead_grave" }, + 65105: { shift: false, altgr: false, name: "dead_acute" }, + 65106: { shift: true, altgr: false, name: "dead_circumflex" }, + 65107: { shift: false, altgr: true, name: "dead_tilde" }, + 65111: { shift: false, altgr: false, name: "dead_diaeresis" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'th': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: true, altgr: false, name: "numbersign" }, + 36: { shift: true, altgr: false, name: "dollar" }, + 37: { shift: true, altgr: true, name: "percent" }, + 38: { shift: true, altgr: false, name: "ampersand" }, + 39: { shift: false, altgr: false, name: "apostrophe" }, + 40: { shift: true, altgr: true, name: "parenleft" }, + 41: { shift: true, altgr: true, name: "parenright" }, + 42: { shift: true, altgr: false, name: "asterisk" }, + 43: { shift: true, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: false, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: false, altgr: false, name: "semicolon" }, + 60: { shift: true, altgr: false, name: "less" }, + 61: { shift: false, altgr: false, name: "equal" }, + 62: { shift: true, altgr: false, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: true, altgr: false, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: false, name: "bracketleft" }, + 92: { shift: false, altgr: false, name: "backslash" }, + 93: { shift: false, altgr: false, name: "bracketright" }, + 94: { shift: true, altgr: false, name: "asciicircum" }, + 95: { shift: false, altgr: true, name: "underscore" }, + 96: { shift: false, altgr: false, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: true, altgr: false, name: "braceleft" }, + 124: { shift: true, altgr: false, name: "bar" }, + 125: { shift: true, altgr: false, name: "braceright" }, + 126: { shift: true, altgr: false, name: "asciitilde" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + }, + 'tr': { + 32: { shift: false, altgr: false, name: "space" }, + 33: { shift: true, altgr: false, name: "exclam" }, + 34: { shift: true, altgr: false, name: "quotedbl" }, + 35: { shift: false, altgr: true, name: "numbersign" }, + 36: { shift: false, altgr: true, name: "dollar" }, + 37: { shift: true, altgr: false, name: "percent" }, + 38: { shift: true, altgr: true, name: "ampersand" }, + 39: { shift: true, altgr: true, name: "apostrophe" }, + 40: { shift: true, altgr: false, name: "parenleft" }, + 41: { shift: true, altgr: false, name: "parenright" }, + 42: { shift: false, altgr: false, name: "asterisk" }, + 43: { shift: true, altgr: false, name: "plus" }, + 44: { shift: false, altgr: false, name: "comma" }, + 45: { shift: false, altgr: false, name: "minus" }, + 46: { shift: false, altgr: false, name: "period" }, + 47: { shift: true, altgr: false, name: "slash" }, + 48: { shift: false, altgr: false, name: "0" }, + 49: { shift: false, altgr: false, name: "1" }, + 50: { shift: false, altgr: false, name: "2" }, + 51: { shift: false, altgr: false, name: "3" }, + 52: { shift: false, altgr: false, name: "4" }, + 53: { shift: false, altgr: false, name: "5" }, + 54: { shift: false, altgr: false, name: "6" }, + 55: { shift: false, altgr: false, name: "7" }, + 56: { shift: false, altgr: false, name: "8" }, + 57: { shift: false, altgr: false, name: "9" }, + 58: { shift: true, altgr: false, name: "colon" }, + 59: { shift: true, altgr: false, name: "semicolon" }, + 60: { shift: false, altgr: true, name: "less" }, + 61: { shift: true, altgr: false, name: "equal" }, + 62: { shift: false, altgr: true, name: "greater" }, + 63: { shift: true, altgr: false, name: "question" }, + 64: { shift: false, altgr: true, name: "at" }, + 65: { shift: true, altgr: false, name: "A" }, + 66: { shift: true, altgr: false, name: "B" }, + 67: { shift: true, altgr: false, name: "C" }, + 68: { shift: true, altgr: false, name: "D" }, + 69: { shift: true, altgr: false, name: "E" }, + 70: { shift: true, altgr: false, name: "F" }, + 71: { shift: true, altgr: false, name: "G" }, + 72: { shift: true, altgr: false, name: "H" }, + 73: { shift: true, altgr: false, name: "I" }, + 74: { shift: true, altgr: false, name: "J" }, + 75: { shift: true, altgr: false, name: "K" }, + 76: { shift: true, altgr: false, name: "L" }, + 77: { shift: true, altgr: false, name: "M" }, + 78: { shift: true, altgr: false, name: "N" }, + 79: { shift: true, altgr: false, name: "O" }, + 80: { shift: true, altgr: false, name: "P" }, + 81: { shift: true, altgr: false, name: "Q" }, + 82: { shift: true, altgr: false, name: "R" }, + 83: { shift: true, altgr: false, name: "S" }, + 84: { shift: true, altgr: false, name: "T" }, + 85: { shift: true, altgr: false, name: "U" }, + 86: { shift: true, altgr: false, name: "V" }, + 87: { shift: true, altgr: false, name: "W" }, + 88: { shift: true, altgr: false, name: "X" }, + 89: { shift: true, altgr: false, name: "Y" }, + 90: { shift: true, altgr: false, name: "Z" }, + 91: { shift: false, altgr: true, name: "bracketleft" }, + 92: { shift: false, altgr: false, name: "backslash" }, + 93: { shift: false, altgr: true, name: "bracketright" }, + 94: { shift: false, altgr: true, name: "asciicircum" }, + 95: { shift: true, altgr: false, name: "underscore" }, + 96: { shift: true, altgr: true, name: "grave" }, + 97: { shift: false, altgr: false, name: "a" }, + 98: { shift: false, altgr: false, name: "b" }, + 99: { shift: false, altgr: false, name: "c" }, + 100: { shift: false, altgr: false, name: "d" }, + 101: { shift: false, altgr: false, name: "e" }, + 102: { shift: false, altgr: false, name: "f" }, + 103: { shift: false, altgr: false, name: "g" }, + 104: { shift: false, altgr: false, name: "h" }, + 105: { shift: false, altgr: false, name: "i" }, + 106: { shift: false, altgr: false, name: "j" }, + 107: { shift: false, altgr: false, name: "k" }, + 108: { shift: false, altgr: false, name: "l" }, + 109: { shift: false, altgr: false, name: "m" }, + 110: { shift: false, altgr: false, name: "n" }, + 111: { shift: false, altgr: false, name: "o" }, + 112: { shift: false, altgr: false, name: "p" }, + 113: { shift: false, altgr: false, name: "q" }, + 114: { shift: false, altgr: false, name: "r" }, + 115: { shift: false, altgr: false, name: "s" }, + 116: { shift: false, altgr: false, name: "t" }, + 117: { shift: false, altgr: false, name: "u" }, + 118: { shift: false, altgr: false, name: "v" }, + 119: { shift: false, altgr: false, name: "w" }, + 120: { shift: false, altgr: false, name: "x" }, + 121: { shift: false, altgr: false, name: "y" }, + 122: { shift: false, altgr: false, name: "z" }, + 123: { shift: false, altgr: true, name: "braceleft" }, + 124: { shift: false, altgr: true, name: "bar" }, + 125: { shift: false, altgr: true, name: "braceright" }, + 126: { shift: false, altgr: true, name: "asciitilde" }, + 161: { shift: true, altgr: true, name: "exclamdown" }, + 162: { shift: false, altgr: true, name: "cent" }, + 163: { shift: true, altgr: true, name: "sterling" }, + 165: { shift: true, altgr: true, name: "yen" }, + 166: { shift: true, altgr: true, name: "brokenbar" }, + 167: { shift: true, altgr: true, name: "section" }, + 169: { shift: true, altgr: true, name: "copyright" }, + 170: { shift: true, altgr: true, name: "ordfeminine" }, + 171: { shift: false, altgr: true, name: "guillemotleft" }, + 174: { shift: true, altgr: true, name: "registered" }, + 176: { shift: true, altgr: true, name: "degree" }, + 177: { shift: true, altgr: true, name: "plusminus" }, + 181: { shift: false, altgr: true, name: "mu" }, + 182: { shift: false, altgr: true, name: "paragraph" }, + 185: { shift: false, altgr: true, name: "onesuperior" }, + 186: { shift: true, altgr: true, name: "masculine" }, + 187: { shift: false, altgr: true, name: "guillemotright" }, + 189: { shift: false, altgr: true, name: "onehalf" }, + 191: { shift: true, altgr: true, name: "questiondown" }, + 198: { shift: true, altgr: true, name: "AE" }, + 199: { shift: true, altgr: false, name: "Ccedilla" }, + 208: { shift: true, altgr: true, name: "ETH" }, + 214: { shift: true, altgr: false, name: "Odiaeresis" }, + 215: { shift: true, altgr: true, name: "multiply" }, + 216: { shift: true, altgr: true, name: "Ooblique" }, + 220: { shift: true, altgr: false, name: "Udiaeresis" }, + 222: { shift: true, altgr: true, name: "THORN" }, + 223: { shift: false, altgr: true, name: "ssharp" }, + 230: { shift: false, altgr: true, name: "ae" }, + 231: { shift: false, altgr: false, name: "ccedilla" }, + 240: { shift: false, altgr: true, name: "eth" }, + 246: { shift: false, altgr: false, name: "odiaeresis" }, + 247: { shift: true, altgr: true, name: "division" }, + 248: { shift: false, altgr: true, name: "oslash" }, + 252: { shift: false, altgr: false, name: "udiaeresis" }, + 254: { shift: false, altgr: true, name: "thorn" }, + 419: { shift: true, altgr: true, name: "Lstroke" }, + 435: { shift: false, altgr: true, name: "lstroke" }, + 8364: { shift: false, altgr: true, name: "EuroSign" }, + 65105: { shift: false, altgr: true, name: "dead_acute" }, + 65106: { shift: false, altgr: true, name: "dead_circumflex" }, + 65108: { shift: true, altgr: true, name: "dead_macron" }, + 65109: { shift: true, altgr: true, name: "dead_breve" }, + 65110: { shift: true, altgr: true, name: "dead_abovedot" }, + 65111: { shift: false, altgr: true, name: "dead_diaeresis" }, + 65112: { shift: true, altgr: true, name: "dead_abovering" }, + 65113: { shift: true, altgr: true, name: "dead_doubleacute" }, + 65114: { shift: true, altgr: true, name: "dead_caron" }, + 65115: { shift: false, altgr: true, name: "dead_cedilla" }, + 65116: { shift: true, altgr: true, name: "dead_ogonek" }, + 65120: { shift: false, altgr: true, name: "dead_belowdot" }, + 65288: { shift: false, altgr: false, name: "BackSpace" }, + 65289: { shift: false, altgr: false, name: "Tab" }, + 65293: { shift: false, altgr: false, name: "Return" }, + 65300: { shift: false, altgr: false, name: "Scroll_Lock" }, + 65301: { shift: false, altgr: false, name: "Sys_Req" }, + 65307: { shift: false, altgr: false, name: "Escape" }, + 65360: { shift: false, altgr: false, name: "Home" }, + 65361: { shift: false, altgr: false, name: "Left" }, + 65362: { shift: false, altgr: false, name: "Up" }, + 65363: { shift: false, altgr: false, name: "Right" }, + 65364: { shift: false, altgr: false, name: "Down" }, + 65365: { shift: false, altgr: false, name: "Page_Up" }, + 65366: { shift: false, altgr: false, name: "Page_Down" }, + 65367: { shift: false, altgr: false, name: "End" }, + 65377: { shift: false, altgr: false, name: "Print" }, + 65379: { shift: false, altgr: false, name: "Insert" }, + 65407: { shift: false, altgr: false, name: "Num_Lock" }, + 65421: { shift: false, altgr: false, name: "KP_Enter" }, + 65429: { shift: false, altgr: false, name: "KP_Home" }, + 65430: { shift: false, altgr: false, name: "KP_Left" }, + 65431: { shift: false, altgr: false, name: "KP_Up" }, + 65432: { shift: false, altgr: false, name: "KP_Right" }, + 65433: { shift: false, altgr: false, name: "KP_Down" }, + 65434: { shift: false, altgr: false, name: "KP_Prior" }, + 65435: { shift: false, altgr: false, name: "KP_Next" }, + 65436: { shift: false, altgr: false, name: "KP_End" }, + 65437: { shift: false, altgr: false, name: "KP_Begin" }, + 65438: { shift: false, altgr: false, name: "KP_Insert" }, + 65439: { shift: false, altgr: false, name: "KP_Delete" }, + 65450: { shift: false, altgr: false, name: "KP_Multiply" }, + 65451: { shift: false, altgr: false, name: "KP_Add" }, + 65452: { shift: false, altgr: false, name: "KP_Separator" }, + 65453: { shift: false, altgr: false, name: "KP_Subtract" }, + 65454: { shift: false, altgr: false, name: "KP_Decimal" }, + 65455: { shift: false, altgr: false, name: "KP_Divide" }, + 65456: { shift: false, altgr: false, name: "KP_0" }, + 65457: { shift: false, altgr: false, name: "KP_1" }, + 65458: { shift: false, altgr: false, name: "KP_2" }, + 65459: { shift: false, altgr: false, name: "KP_3" }, + 65460: { shift: false, altgr: false, name: "KP_4" }, + 65461: { shift: false, altgr: false, name: "KP_5" }, + 65462: { shift: false, altgr: false, name: "KP_6" }, + 65463: { shift: false, altgr: false, name: "KP_7" }, + 65464: { shift: false, altgr: false, name: "KP_8" }, + 65465: { shift: false, altgr: false, name: "KP_9" }, + 65470: { shift: false, altgr: false, name: "F1" }, + 65471: { shift: false, altgr: false, name: "F2" }, + 65472: { shift: false, altgr: false, name: "F3" }, + 65473: { shift: false, altgr: false, name: "F4" }, + 65474: { shift: false, altgr: false, name: "F5" }, + 65475: { shift: false, altgr: false, name: "F6" }, + 65476: { shift: false, altgr: false, name: "F7" }, + 65477: { shift: false, altgr: false, name: "F8" }, + 65478: { shift: false, altgr: false, name: "F9" }, + 65479: { shift: false, altgr: false, name: "F10" }, + 65480: { shift: false, altgr: false, name: "F11" }, + 65481: { shift: false, altgr: false, name: "F12" }, + 65509: { shift: false, altgr: false, name: "Caps_Lock" }, + 65535: { shift: false, altgr: false, name: "Delete" } + } +}; diff --git a/include/rfb.js b/include/rfb.js index 9b671003..365aca70 100644 --- a/include/rfb.js +++ b/include/rfb.js @@ -126,7 +126,9 @@ var that = {}, // Public API methods mouse_buttonMask = 0, mouse_arr = [], viewportDragging = false, - viewportDragPos = {}; + viewportDragPos = {}, + + keymap = null; // Configuration attributes Util.conf_defaults(conf, that, defaults, [ @@ -604,6 +606,11 @@ keyPress = function(keysym, down, km) { if (conf.view_only) { return; } // View only, skip keyboard events + // Remap the modifiers with apppropriate ones depending on the + // keyboard type of the vnc server if this is a presskey event. + if (!!keymap && down === 2) + km = remapModifiers(km, keysym); + // Generate all modifier keys' events on demand. // Send key events for modifiers to the vnc server when: // 1. the status of modifers have been changed @@ -639,10 +646,44 @@ keyPress = function(keysym, down, km) { // This is a keydown or keyup event. arr = arr.concat(keyEvent(keysym, down)); } + + if (!!keymap && down === 2) { + // Turn off SHIFT and ALTGR every time when emulating modifiers. + if (remote_status.shift) { + arr = arr.concat(keyEvent(0xFFE1, 0)); // SHIFT up + remote_status.shift = false; + } + if (remote_status.altgr) { + arr = arr.concat(keyEvent(0xFE03, 0)); // ALTGR up + remote_status.altgr = false; + } + } + arr = arr.concat(fbUpdateRequests()); ws.send(arr); }; +// Remap the modifiers depending on keyboard types. It depends on keyboards +// whether a certain keycode should be issued with modifiers. For example, +// the US keyboard issues '@' with SHIFT, the Japanese keyboard issues '@' +// without any modifers, and the German keyboard issues '@' with ALTGR. +// When the keyboard types are different between the viewer and the vnc +// server, the server is expected to generate fake modifer key events +// if needed. But unfortunately there are a lot of VNC servers that can't +// handle this. Then there is no choice but to make noVNC take care of it +// on behalf of them. +function remapModifiers(km, keysym) +{ + var remap = {'altKey': km.altKey, 'ctrlKey': km.ctrlKey, + 'shiftKey': km.shiftKey, 'altgrKey': km.altgrKey}; + var key = keymap[keysym]; + if (typeof key !== "undefined") { + remap.altgrKey = key.altgr; + remap.shiftKey = key.shift; + } + return remap; +} + mouseButton = function(x, y, down, bmask) { if (down) { mouse_buttonMask |= bmask; @@ -1897,6 +1938,14 @@ that.testMode = function(override_send, data_mode) { }; }; +that.setKeymap = function(kb) { + if (!kb || kb === 'default') { + keymap = null; + } else { + keymap = Kmap.getKeymap(kb); + } +}; + return constructor(); // Return the public API interface diff --git a/include/ui.js b/include/ui.js index 25bf162b..b3ea619e 100644 --- a/include/ui.js +++ b/include/ui.js @@ -13,7 +13,8 @@ // Load supporting scripts window.onscriptsload = function () { UI.load(); }; Util.load_scripts(["webutil.js", "base64.js", "websock.js", "des.js", - "input.js", "display.js", "jsunzip.js", "rfb.js"]); + "input.js", "display.js", "jsunzip.js", "rfb.js", + "keymap.js"]); var UI = { @@ -31,7 +32,7 @@ load: function (callback) { // Render default UI and initialize settings menu start: function(callback) { - var html = '', i, sheet, sheets, llevels; + var html = '', i, sheet, sheets, llevels, kbtypes; // Stylesheet selection dropdown sheet = WebUtil.selectStylesheet(); @@ -46,6 +47,19 @@ start: function(callback) { UI.addOption($D('noVNC_logging'),llevels[i], llevels[i]); } + // Keyboard type selection dropdown + kbtypes = ['default', 'ar', 'bepo', 'da', 'de', 'de-ch', 'en-gb', + 'en-us', 'es', 'et', 'fi', 'fo', 'fr', 'fr-be', 'fr-ca', + 'fr-ch', 'hr', 'hu', 'is', 'it', 'ja', 'lt', 'lv', 'mk', + 'nl', 'nl-be', 'no', 'pl', 'pt', 'pt-br', 'ru', 'sl', + 'sv', 'th', 'tr']; + + for (i = 0; i < kbtypes.length; i += 1) { + UI.addOption($D('noVNC_keymap'), kbtypes[i], kbtypes[i]); + } + + UI.initSetting('keymap', 'default'); + // Settings with immediate effects UI.initSetting('logging', 'warn'); WebUtil.init_logging(UI.getSetting('logging')); @@ -71,6 +85,7 @@ start: function(callback) { UI.rfb = RFB({'target': $D('noVNC_canvas'), 'onUpdateState': UI.updateState, 'onClipboard': UI.clipReceive}); + UI.rfb.setKeymap(UI.getSetting('keymap')); UI.updateVisualState(); // Unfocus clipboard when over the VNC area @@ -326,6 +341,7 @@ toggleSettingsPanel: function() { UI.updateSetting('repeaterID'); UI.updateSetting('stylesheet'); UI.updateSetting('logging'); + UI.updateSetting('keymap'); UI.openSettingsMenu(); } @@ -370,8 +386,10 @@ settingsApply: function() { UI.saveSetting('repeaterID'); UI.saveSetting('stylesheet'); UI.saveSetting('logging'); + UI.saveSetting('keymap'); // Settings with immediate (non-connected related) effect + UI.rfb.setKeymap(UI.getSetting('keymap')); WebUtil.selectStylesheet(UI.getSetting('stylesheet')); WebUtil.init_logging(UI.getSetting('logging')); UI.setViewClip(); diff --git a/vnc.html b/vnc.html index 9d699c9e..65c71581 100644 --- a/vnc.html +++ b/vnc.html @@ -138,6 +138,12 @@ + + +
  • +

  • diff --git a/vnc_auto.html b/vnc_auto.html index a6273256..be16e5fd 100644 --- a/vnc_auto.html +++ b/vnc_auto.html @@ -43,7 +43,8 @@ // Load supporting scripts Util.load_scripts(["webutil.js", "base64.js", "websock.js", "des.js", - "input.js", "display.js", "jsunzip.js", "rfb.js"]); + "input.js", "display.js", "jsunzip.js", "rfb.js", + "keymap.js"]); var rfb; @@ -126,6 +127,7 @@ 'view_only': WebUtil.getQueryVar('view_only', false), 'updateState': updateState, 'onPasswordRequired': passwordRequired}); + rfb.setKeymap(WebUtil.getQueryVar('keymap', 'default')); rfb.connect(host, port, password, path); };