From 5431614a3710b075c884db2ff2483f7a2bef1d5f Mon Sep 17 00:00:00 2001 From: Minizbot2012 Date: Mon, 3 May 2021 14:54:38 -0400 Subject: [PATCH 1/5] Update --- devices/orbweaver/orbweaver.go | 306 ++++++++++----------- gui/gui.go | 66 ++--- hid/data/keycode_data.inc | 478 ++++++++++++++++----------------- hid/generator/gen.go | 148 +++++----- hid/hid.go | 126 ++++----- module.go | 6 +- 6 files changed, 565 insertions(+), 565 deletions(-) diff --git a/devices/orbweaver/orbweaver.go b/devices/orbweaver/orbweaver.go index 1ee2d2b..56da180 100644 --- a/devices/orbweaver/orbweaver.go +++ b/devices/orbweaver/orbweaver.go @@ -1,153 +1,153 @@ -package orbweaver - -import ( - "encoding/binary" - "io" - "os" - - "github.com/OrbTools/OrbCommon/gui" -) - -//BINDING Map of Default Keys -var BINDING = [...]byte{41, 2, 3, 4, 5, 15, 16, 17, 18, 19, 58, 30, 31, 32, 33, 42, 44, 45, 46, 47, 56, 103, 106, 108, 105, 57} - -//GUI gui definition for an orbweaver -var GUI = &gui.GUI{ - Pages: []*gui.Page{ - { - Hive: "MIP", - Name: "Grid", - Type: gui.PGrid, - Keys: []*gui.Key{ - { - KeyID: 0, - KeyName: "01", - }, { - KeyID: 1, - KeyName: "02", - }, { - KeyID: 2, - KeyName: "03", - }, { - KeyID: 3, - KeyName: "04", - }, { - KeyID: 4, - KeyName: "05", - }, { - KeyID: 5, - KeyName: "06", - }, { - KeyID: 6, - KeyName: "07", - }, { - KeyID: 7, - KeyName: "08", - }, { - KeyID: 8, - KeyName: "09", - }, { - KeyID: 9, - KeyName: "10", - }, { - KeyID: 10, - KeyName: "11", - }, { - KeyID: 11, - KeyName: "12", - }, { - KeyID: 12, - KeyName: "13", - }, { - KeyID: 13, - KeyName: "11", - }, { - KeyID: 14, - KeyName: "11", - }, { - KeyID: 15, - KeyName: "11", - }, { - KeyID: 16, - KeyName: "11", - }, { - KeyID: 17, - KeyName: "11", - }, { - KeyID: 18, - KeyName: "11", - }, { - KeyID: 19, - KeyName: "20", - }, - }, - }, { - Hive: "SIP", - Name: "Side Keys", - Type: gui.PList, - Keys: []*gui.Key{ - { - KeyID: 0, - KeyName: "Upper Button", - }, { - KeyID: 1, - KeyName: "DPad Up", - }, { - KeyID: 2, - KeyName: "DPad Right", - }, { - KeyID: 3, - KeyName: "DPad Left", - }, { - KeyID: 4, - KeyName: "DPad Down", - }, { - KeyID: 5, - KeyName: "Lower Button", - }, - }, - }, - }, -} - -//KeyMap singular keymap -type KeyMap struct { - Keymap [26]uint16 - Color [3]byte -} - -//KeyMaps a set of keymaps -type KeyMaps struct { - Maps [7]*KeyMap - Currentmap int - MCount int -} - -//PKM format for altering the keymap -type PKM struct { - MIP [20]uint16 - SIP [6]uint16 - COL [3]byte -} - -//LoadKM Load Orbmap KM structure -func LoadKM(file string) *KeyMap { - mapped := new(KeyMap) - of, _ := os.Open(file) - binary.Read(of, binary.LittleEndian, mapped) - return mapped -} - -//SavePKMKeymap saves an orb after edit -func SavePKMKeymap(mapped *PKM, file io.WriteCloser) { - binary.Write(file, binary.LittleEndian, mapped) - file.Close() -} - -//LoadPKMKeymap loads an orb for editing -func LoadPKMKeymap(file io.ReadCloser) interface{} { - mapped := new(PKM) - binary.Read(file, binary.LittleEndian, mapped) - file.Close() - return mapped -} +package orbweaver + +import ( + "encoding/binary" + "io" + "os" + + "github.com/OrbTools/OrbCommon/gui" +) + +//BINDING Map of Default Keys +var BINDING = [...]byte{41, 2, 3, 4, 5, 15, 16, 17, 18, 19, 58, 30, 31, 32, 33, 42, 44, 45, 46, 47, 56, 103, 106, 108, 105, 57} + +//GUI gui definition for an orbweaver +var GUI = &gui.GUI{ + Pages: []*gui.Page{ + { + Hive: "MIP", + Name: "Grid", + Type: gui.PGrid, + Keys: []*gui.Key{ + { + KeyID: 0, + KeyName: "01", + }, { + KeyID: 1, + KeyName: "02", + }, { + KeyID: 2, + KeyName: "03", + }, { + KeyID: 3, + KeyName: "04", + }, { + KeyID: 4, + KeyName: "05", + }, { + KeyID: 5, + KeyName: "06", + }, { + KeyID: 6, + KeyName: "07", + }, { + KeyID: 7, + KeyName: "08", + }, { + KeyID: 8, + KeyName: "09", + }, { + KeyID: 9, + KeyName: "10", + }, { + KeyID: 10, + KeyName: "11", + }, { + KeyID: 11, + KeyName: "12", + }, { + KeyID: 12, + KeyName: "13", + }, { + KeyID: 13, + KeyName: "11", + }, { + KeyID: 14, + KeyName: "11", + }, { + KeyID: 15, + KeyName: "11", + }, { + KeyID: 16, + KeyName: "11", + }, { + KeyID: 17, + KeyName: "11", + }, { + KeyID: 18, + KeyName: "11", + }, { + KeyID: 19, + KeyName: "20", + }, + }, + }, { + Hive: "SIP", + Name: "Side Keys", + Type: gui.PList, + Keys: []*gui.Key{ + { + KeyID: 0, + KeyName: "Upper Button", + }, { + KeyID: 1, + KeyName: "DPad Up", + }, { + KeyID: 2, + KeyName: "DPad Right", + }, { + KeyID: 3, + KeyName: "DPad Left", + }, { + KeyID: 4, + KeyName: "DPad Down", + }, { + KeyID: 5, + KeyName: "Lower Button", + }, + }, + }, + }, +} + +//KeyMap singular keymap +type KeyMap struct { + Keymap [26]uint16 + Color [3]byte +} + +//KeyMaps a set of keymaps +type KeyMaps struct { + Maps [7]*KeyMap + Currentmap int + MCount int +} + +//PKM format for altering the keymap +type PKM struct { + MIP [20]uint16 + SIP [6]uint16 + COL [3]byte +} + +//LoadKM Load Orbmap KM structure +func LoadKM(file string) *KeyMap { + mapped := new(KeyMap) + of, _ := os.Open(file) + binary.Read(of, binary.LittleEndian, mapped) + return mapped +} + +//SavePKMKeymap saves an orb after edit +func SavePKMKeymap(mapped *PKM, file io.WriteCloser) { + binary.Write(file, binary.LittleEndian, mapped) + file.Close() +} + +//LoadPKMKeymap loads an orb for editing +func LoadPKMKeymap(file io.ReadCloser) interface{} { + mapped := new(PKM) + binary.Read(file, binary.LittleEndian, mapped) + file.Close() + return mapped +} diff --git a/gui/gui.go b/gui/gui.go index 516cee4..66ba0ce 100644 --- a/gui/gui.go +++ b/gui/gui.go @@ -1,33 +1,33 @@ -package gui - -//PageType PGrid, PCircle or PList -type PageType int - -const ( - //PGrid Grid type (keypads) - PGrid PageType = iota - //PCircle type (joysticks) - PCircle - //PList List Type - PList -) - -//GUI a GUI tree -type GUI struct { - Pages []*Page -} - -//Page A page of a binding GUI -type Page struct { - Hive string - Name string - Keys []*Key - Type PageType -} - -//Key a keybind -type Key struct { - KeyID int - KeyName string - Default uint16 -} +package gui + +//PageType PGrid, PCircle or PList +type PageType int + +const ( + //PGrid Grid type (keypads) + PGrid PageType = iota + //PCircle type (joysticks) + PCircle + //PList List Type + PList +) + +//GUI a GUI tree +type GUI struct { + Pages []*Page +} + +//Page A page of a binding GUI +type Page struct { + Hive string + Name string + Keys []*Key + Type PageType +} + +//Key a keybind +type Key struct { + KeyID int + KeyName string + Default uint16 +} diff --git a/hid/data/keycode_data.inc b/hid/data/keycode_data.inc index 1baa0ed..cd837e1 100644 --- a/hid/data/keycode_data.inc +++ b/hid/data/keycode_data.inc @@ -1,240 +1,240 @@ -DOM_CODE_DECLARATION { - DOM_CODE(0x000000, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NONE), - DOM_CODE(0x000010, 0x0000, 0x0000, 0x0000, 0xffff, "Hyper", HYPER), - DOM_CODE(0x000011, 0x0000, 0x0000, 0x0000, 0xffff, "Super", SUPER), - DOM_CODE(0x000012, 0x0000, 0x0000, 0x0000, 0xffff, "Fn", FN), - DOM_CODE(0x000013, 0x0000, 0x0000, 0x0000, 0xffff, "FnLock", FN_LOCK), - DOM_CODE(0x000014, 0x0000, 0x0000, 0x0000, 0xffff, "Suspend", SUSPEND), - DOM_CODE(0x000015, 0x0000, 0x0000, 0x0000, 0xffff, "Resume", RESUME), - DOM_CODE(0x000016, 0x0000, 0x0000, 0x0000, 0xffff, "Turbo", TURBO), - DOM_CODE(0x000017, 0x0279, 0x0281, 0x0000, 0xffff, "PrivacyScreenToggle", PRIVACY_SCREEN_TOGGLE), - DOM_CODE(0x010082, 0x008e, 0x0096, 0xe05f, 0xffff, "Sleep", SLEEP), - DOM_CODE(0x010083, 0x008f, 0x0097, 0xe063, 0xffff, "WakeUp", WAKE_UP), - DOM_CODE(0x0100b5, 0x00e3, 0x00eb, 0x0000, 0xffff, "DisplayToggleIntExt", DISPLAY_TOGGLE_INT_EXT), - DOM_CODE(0x070000, 0x0000, 0x0000, 0x0000, 0xffff, NULL, USB_RESERVED), - DOM_CODE(0x070001, 0x0000, 0x0000, 0x00ff, 0xffff, NULL, USB_ERROR_ROLL_OVER), - DOM_CODE(0x070002, 0x0000, 0x0000, 0x00fc, 0xffff, NULL, USB_POST_FAIL), - DOM_CODE(0x070003, 0x0000, 0x0000, 0x0000, 0xffff, NULL, USB_ERROR_UNDEFINED), - DOM_CODE(0x070004, 0x001e, 0x0026, 0x001e, 0x0000, "KeyA", US_A), - DOM_CODE(0x070005, 0x0030, 0x0038, 0x0030, 0x000b, "KeyB", US_B), - DOM_CODE(0x070006, 0x002e, 0x0036, 0x002e, 0x0008, "KeyC", US_C), - DOM_CODE(0x070007, 0x0020, 0x0028, 0x0020, 0x0002, "KeyD", US_D), - DOM_CODE(0x070008, 0x0012, 0x001a, 0x0012, 0x000e, "KeyE", US_E), - DOM_CODE(0x070009, 0x0021, 0x0029, 0x0021, 0x0003, "KeyF", US_F), - DOM_CODE(0x07000a, 0x0022, 0x002a, 0x0022, 0x0005, "KeyG", US_G), - DOM_CODE(0x07000b, 0x0023, 0x002b, 0x0023, 0x0004, "KeyH", US_H), - DOM_CODE(0x07000c, 0x0017, 0x001f, 0x0017, 0x0022, "KeyI", US_I), - DOM_CODE(0x07000d, 0x0024, 0x002c, 0x0024, 0x0026, "KeyJ", US_J), - DOM_CODE(0x07000e, 0x0025, 0x002d, 0x0025, 0x0028, "KeyK", US_K), - DOM_CODE(0x07000f, 0x0026, 0x002e, 0x0026, 0x0025, "KeyL", US_L), - DOM_CODE(0x070010, 0x0032, 0x003a, 0x0032, 0x002e, "KeyM", US_M), - DOM_CODE(0x070011, 0x0031, 0x0039, 0x0031, 0x002d, "KeyN", US_N), - DOM_CODE(0x070012, 0x0018, 0x0020, 0x0018, 0x001f, "KeyO", US_O), - DOM_CODE(0x070013, 0x0019, 0x0021, 0x0019, 0x0023, "KeyP", US_P), - DOM_CODE(0x070014, 0x0010, 0x0018, 0x0010, 0x000c, "KeyQ", US_Q), - DOM_CODE(0x070015, 0x0013, 0x001b, 0x0013, 0x000f, "KeyR", US_R), - DOM_CODE(0x070016, 0x001f, 0x0027, 0x001f, 0x0001, "KeyS", US_S), - DOM_CODE(0x070017, 0x0014, 0x001c, 0x0014, 0x0011, "KeyT", US_T), - DOM_CODE(0x070018, 0x0016, 0x001e, 0x0016, 0x0020, "KeyU", US_U), - DOM_CODE(0x070019, 0x002f, 0x0037, 0x002f, 0x0009, "KeyV", US_V), - DOM_CODE(0x07001a, 0x0011, 0x0019, 0x0011, 0x000d, "KeyW", US_W), - DOM_CODE(0x07001b, 0x002d, 0x0035, 0x002d, 0x0007, "KeyX", US_X), - DOM_CODE(0x07001c, 0x0015, 0x001d, 0x0015, 0x0010, "KeyY", US_Y), - DOM_CODE(0x07001d, 0x002c, 0x0034, 0x002c, 0x0006, "KeyZ", US_Z), - DOM_CODE(0x07001e, 0x0002, 0x000a, 0x0002, 0x0012, "Digit1", DIGIT1), - DOM_CODE(0x07001f, 0x0003, 0x000b, 0x0003, 0x0013, "Digit2", DIGIT2), - DOM_CODE(0x070020, 0x0004, 0x000c, 0x0004, 0x0014, "Digit3", DIGIT3), - DOM_CODE(0x070021, 0x0005, 0x000d, 0x0005, 0x0015, "Digit4", DIGIT4), - DOM_CODE(0x070022, 0x0006, 0x000e, 0x0006, 0x0017, "Digit5", DIGIT5), - DOM_CODE(0x070023, 0x0007, 0x000f, 0x0007, 0x0016, "Digit6", DIGIT6), - DOM_CODE(0x070024, 0x0008, 0x0010, 0x0008, 0x001a, "Digit7", DIGIT7), - DOM_CODE(0x070025, 0x0009, 0x0011, 0x0009, 0x001c, "Digit8", DIGIT8), - DOM_CODE(0x070026, 0x000a, 0x0012, 0x000a, 0x0019, "Digit9", DIGIT9), - DOM_CODE(0x070027, 0x000b, 0x0013, 0x000b, 0x001d, "Digit0", DIGIT0), - DOM_CODE(0x070028, 0x001c, 0x0024, 0x001c, 0x0024, "Enter", ENTER), - DOM_CODE(0x070029, 0x0001, 0x0009, 0x0001, 0x0035, "Escape", ESCAPE), - DOM_CODE(0x07002a, 0x000e, 0x0016, 0x000e, 0x0033, "Backspace", BACKSPACE), - DOM_CODE(0x07002b, 0x000f, 0x0017, 0x000f, 0x0030, "Tab", TAB), - DOM_CODE(0x07002c, 0x0039, 0x0041, 0x0039, 0x0031, "Space", SPACE), - DOM_CODE(0x07002d, 0x000c, 0x0014, 0x000c, 0x001b, "Minus", MINUS), - DOM_CODE(0x07002e, 0x000d, 0x0015, 0x000d, 0x0018, "Equal", EQUAL), - DOM_CODE(0x07002f, 0x001a, 0x0022, 0x001a, 0x0021, "BracketLeft", BRACKET_LEFT), - DOM_CODE(0x070030, 0x001b, 0x0023, 0x001b, 0x001e, "BracketRight", BRACKET_RIGHT), - DOM_CODE(0x070031, 0x002b, 0x0033, 0x002b, 0x002a, "Backslash", BACKSLASH), - DOM_CODE(0x070033, 0x0027, 0x002f, 0x0027, 0x0029, "Semicolon", SEMICOLON), - DOM_CODE(0x070034, 0x0028, 0x0030, 0x0028, 0x0027, "Quote", QUOTE), - DOM_CODE(0x070035, 0x0029, 0x0031, 0x0029, 0x0032, "Backquote", BACKQUOTE), - DOM_CODE(0x070036, 0x0033, 0x003b, 0x0033, 0x002b, "Comma", COMMA), - DOM_CODE(0x070037, 0x0034, 0x003c, 0x0034, 0x002f, "Period", PERIOD), - DOM_CODE(0x070038, 0x0035, 0x003d, 0x0035, 0x002c, "Slash", SLASH), - DOM_CODE(0x070039, 0x003a, 0x0042, 0x003a, 0x0039, "CapsLock", CAPS_LOCK), - DOM_CODE(0x07003a, 0x003b, 0x0043, 0x003b, 0x007a, "F1", F1), - DOM_CODE(0x07003b, 0x003c, 0x0044, 0x003c, 0x0078, "F2", F2), - DOM_CODE(0x07003c, 0x003d, 0x0045, 0x003d, 0x0063, "F3", F3), - DOM_CODE(0x07003d, 0x003e, 0x0046, 0x003e, 0x0076, "F4", F4), - DOM_CODE(0x07003e, 0x003f, 0x0047, 0x003f, 0x0060, "F5", F5), - DOM_CODE(0x07003f, 0x0040, 0x0048, 0x0040, 0x0061, "F6", F6), - DOM_CODE(0x070040, 0x0041, 0x0049, 0x0041, 0x0062, "F7", F7), - DOM_CODE(0x070041, 0x0042, 0x004a, 0x0042, 0x0064, "F8", F8), - DOM_CODE(0x070042, 0x0043, 0x004b, 0x0043, 0x0065, "F9", F9), - DOM_CODE(0x070043, 0x0044, 0x004c, 0x0044, 0x006d, "F10", F10), - DOM_CODE(0x070044, 0x0057, 0x005f, 0x0057, 0x0067, "F11", F11), - DOM_CODE(0x070045, 0x0058, 0x0060, 0x0058, 0x006f, "F12", F12), - DOM_CODE(0x070046, 0x0063, 0x006b, 0xe037, 0xffff, "PrintScreen", PRINT_SCREEN), - DOM_CODE(0x070047, 0x0046, 0x004e, 0x0046, 0xffff, "ScrollLock", SCROLL_LOCK), - DOM_CODE(0x070048, 0x0077, 0x007f, 0x0045, 0xffff, "Pause", PAUSE), - DOM_CODE(0x070049, 0x006e, 0x0076, 0xe052, 0x0072, "Insert", INSERT), - DOM_CODE(0x07004a, 0x0066, 0x006e, 0xe047, 0x0073, "Home", HOME), - DOM_CODE(0x07004b, 0x0068, 0x0070, 0xe049, 0x0074, "PageUp", PAGE_UP), - DOM_CODE(0x07004c, 0x006f, 0x0077, 0xe053, 0x0075, "Delete", DEL), - DOM_CODE(0x07004d, 0x006b, 0x0073, 0xe04f, 0x0077, "End", END), - DOM_CODE(0x07004e, 0x006d, 0x0075, 0xe051, 0x0079, "PageDown", PAGE_DOWN), - DOM_CODE(0x07004f, 0x006a, 0x0072, 0xe04d, 0x007c, "ArrowRight", ARROW_RIGHT), - DOM_CODE(0x070050, 0x0069, 0x0071, 0xe04b, 0x007b, "ArrowLeft", ARROW_LEFT), - DOM_CODE(0x070051, 0x006c, 0x0074, 0xe050, 0x007d, "ArrowDown", ARROW_DOWN), - DOM_CODE(0x070052, 0x0067, 0x006f, 0xe048, 0x007e, "ArrowUp", ARROW_UP), - DOM_CODE(0x070053, 0x0045, 0x004d, 0xe045, 0x0047, "NumLock", NUM_LOCK), - DOM_CODE(0x070054, 0x0062, 0x006a, 0xe035, 0x004b, "NumpadDivide", NUMPAD_DIVIDE), - DOM_CODE(0x070055, 0x0037, 0x003f, 0x0037, 0x0043, "NumpadMultiply", NUMPAD_MULTIPLY), - DOM_CODE(0x070056, 0x004a, 0x0052, 0x004a, 0x004e, "NumpadSubtract", NUMPAD_SUBTRACT), - DOM_CODE(0x070057, 0x004e, 0x0056, 0x004e, 0x0045, "NumpadAdd", NUMPAD_ADD), - DOM_CODE(0x070058, 0x0060, 0x0068, 0xe01c, 0x004c, "NumpadEnter", NUMPAD_ENTER), - DOM_CODE(0x070059, 0x004f, 0x0057, 0x004f, 0x0053, "Numpad1", NUMPAD1), - DOM_CODE(0x07005a, 0x0050, 0x0058, 0x0050, 0x0054, "Numpad2", NUMPAD2), - DOM_CODE(0x07005b, 0x0051, 0x0059, 0x0051, 0x0055, "Numpad3", NUMPAD3), - DOM_CODE(0x07005c, 0x004b, 0x0053, 0x004b, 0x0056, "Numpad4", NUMPAD4), - DOM_CODE(0x07005d, 0x004c, 0x0054, 0x004c, 0x0057, "Numpad5", NUMPAD5), - DOM_CODE(0x07005e, 0x004d, 0x0055, 0x004d, 0x0058, "Numpad6", NUMPAD6), - DOM_CODE(0x07005f, 0x0047, 0x004f, 0x0047, 0x0059, "Numpad7", NUMPAD7), - DOM_CODE(0x070060, 0x0048, 0x0050, 0x0048, 0x005b, "Numpad8", NUMPAD8), - DOM_CODE(0x070061, 0x0049, 0x0051, 0x0049, 0x005c, "Numpad9", NUMPAD9), - DOM_CODE(0x070062, 0x0052, 0x005a, 0x0052, 0x0052, "Numpad0", NUMPAD0), - DOM_CODE(0x070063, 0x0053, 0x005b, 0x0053, 0x0041, "NumpadDecimal", NUMPAD_DECIMAL), - DOM_CODE(0x070064, 0x0056, 0x005e, 0x0056, 0x000a, "IntlBackslash", INTL_BACKSLASH), - DOM_CODE(0x070065, 0x007f, 0x0087, 0xe05d, 0x006e, "ContextMenu", CONTEXT_MENU), - DOM_CODE(0x070066, 0x0074, 0x007c, 0xe05e, 0xffff, "Power", POWER), - DOM_CODE(0x070067, 0x0075, 0x007d, 0x0059, 0x0051, "NumpadEqual", NUMPAD_EQUAL), - DOM_CODE(0x070068, 0x00b7, 0x00bf, 0x0064, 0x0069, "F13", F13), - DOM_CODE(0x070069, 0x00b8, 0x00c0, 0x0065, 0x006b, "F14", F14), - DOM_CODE(0x07006a, 0x00b9, 0x00c1, 0x0066, 0x0071, "F15", F15), - DOM_CODE(0x07006b, 0x00ba, 0x00c2, 0x0067, 0x006a, "F16", F16), - DOM_CODE(0x07006c, 0x00bb, 0x00c3, 0x0068, 0x0040, "F17", F17), - DOM_CODE(0x07006d, 0x00bc, 0x00c4, 0x0069, 0x004f, "F18", F18), - DOM_CODE(0x07006e, 0x00bd, 0x00c5, 0x006a, 0x0050, "F19", F19), - DOM_CODE(0x07006f, 0x00be, 0x00c6, 0x006b, 0x005a, "F20", F20), - DOM_CODE(0x070070, 0x00bf, 0x00c7, 0x006c, 0xffff, "F21", F21), - DOM_CODE(0x070071, 0x00c0, 0x00c8, 0x006d, 0xffff, "F22", F22), - DOM_CODE(0x070072, 0x00c1, 0x00c9, 0x006e, 0xffff, "F23", F23), - DOM_CODE(0x070073, 0x00c2, 0x00ca, 0x0076, 0xffff, "F24", F24), - DOM_CODE(0x070074, 0x0086, 0x008e, 0x0000, 0xffff, "Open", OPEN), - DOM_CODE(0x070075, 0x008a, 0x0092, 0xe03b, 0xffff, "Help", HELP), - DOM_CODE(0x070077, 0x0084, 0x008c, 0x0000, 0xffff, "Select", SELECT), - DOM_CODE(0x070079, 0x0081, 0x0089, 0x0000, 0xffff, "Again", AGAIN), - DOM_CODE(0x07007a, 0x0083, 0x008b, 0xe008, 0xffff, "Undo", UNDO), - DOM_CODE(0x07007b, 0x0089, 0x0091, 0xe017, 0xffff, "Cut", CUT), - DOM_CODE(0x07007c, 0x0085, 0x008d, 0xe018, 0xffff, "Copy", COPY), - DOM_CODE(0x07007d, 0x0087, 0x008f, 0xe00a, 0xffff, "Paste", PASTE), - DOM_CODE(0x07007e, 0x0088, 0x0090, 0x0000, 0xffff, "Find", FIND), - DOM_CODE(0x07007f, 0x0071, 0x0079, 0xe020, 0x004a, "AudioVolumeMute", VOLUME_MUTE), - DOM_CODE(0x070080, 0x0073, 0x007b, 0xe030, 0x0048, "AudioVolumeUp", VOLUME_UP), - DOM_CODE(0x070081, 0x0072, 0x007a, 0xe02e, 0x0049, "AudioVolumeDown", VOLUME_DOWN), - DOM_CODE(0x070085, 0x0079, 0x0081, 0x007e, 0x005f, "NumpadComma", NUMPAD_COMMA), - DOM_CODE(0x070087, 0x0059, 0x0061, 0x0073, 0x005e, "IntlRo", INTL_RO), - DOM_CODE(0x070088, 0x005d, 0x0065, 0x0070, 0xffff, "KanaMode", KANA_MODE), - DOM_CODE(0x070089, 0x007c, 0x0084, 0x007d, 0x005d, "IntlYen", INTL_YEN), - DOM_CODE(0x07008a, 0x005c, 0x0064, 0x0079, 0xffff, "Convert", CONVERT), - DOM_CODE(0x07008b, 0x005e, 0x0066, 0x007b, 0xffff, "NonConvert", NON_CONVERT), - DOM_CODE(0x070090, 0x007a, 0x0082, 0x0072, 0x0068, "Lang1", LANG1), - DOM_CODE(0x070091, 0x007b, 0x0083, 0x0071, 0x0066, "Lang2", LANG2), - DOM_CODE(0x070092, 0x005a, 0x0062, 0x0078, 0xffff, "Lang3", LANG3), - DOM_CODE(0x070093, 0x005b, 0x0063, 0x0077, 0xffff, "Lang4", LANG4), - DOM_CODE(0x070094, 0x0055, 0x005d, 0x0000, 0xffff, "Lang5", LANG5), - DOM_CODE(0x07009b, 0x0000, 0x0000, 0x0000, 0xffff, "Abort", ABORT), - DOM_CODE(0x0700a3, 0x0000, 0x0000, 0x0000, 0xffff, "Props", PROPS), - DOM_CODE(0x0700b6, 0x00b3, 0x00bb, 0x0000, 0xffff, "NumpadParenLeft", NUMPAD_PAREN_LEFT), - DOM_CODE(0x0700b7, 0x00b4, 0x00bc, 0x0000, 0xffff, "NumpadParenRight", NUMPAD_PAREN_RIGHT), - DOM_CODE(0x0700bb, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadBackspace", NUMPAD_BACKSPACE), - DOM_CODE(0x0700d0, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryStore", NUMPAD_MEMORY_STORE), - DOM_CODE(0x0700d1, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryRecall", NUMPAD_MEMORY_RECALL), - DOM_CODE(0x0700d2, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryClear", NUMPAD_MEMORY_CLEAR), - DOM_CODE(0x0700d3, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryAdd", NUMPAD_MEMORY_ADD), - DOM_CODE(0x0700d4, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemorySubtract", NUMPAD_MEMORY_SUBTRACT), - DOM_CODE(0x0700d7, 0x0076, 0x007e, 0x0000, 0xffff, NULL, NUMPAD_SIGN_CHANGE), - DOM_CODE(0x0700d8, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadClear", NUMPAD_CLEAR), - DOM_CODE(0x0700d9, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadClearEntry", NUMPAD_CLEAR_ENTRY), - DOM_CODE(0x0700e0, 0x001d, 0x0025, 0x001d, 0x003b, "ControlLeft", CONTROL_LEFT), - DOM_CODE(0x0700e1, 0x002a, 0x0032, 0x002a, 0x0038, "ShiftLeft", SHIFT_LEFT), - DOM_CODE(0x0700e2, 0x0038, 0x0040, 0x0038, 0x003a, "AltLeft", ALT_LEFT), - DOM_CODE(0x0700e3, 0x007d, 0x0085, 0xe05b, 0x0037, "MetaLeft", META_LEFT), - DOM_CODE(0x0700e4, 0x0061, 0x0069, 0xe01d, 0x003e, "ControlRight", CONTROL_RIGHT), - DOM_CODE(0x0700e5, 0x0036, 0x003e, 0x0036, 0x003c, "ShiftRight", SHIFT_RIGHT), - DOM_CODE(0x0700e6, 0x0064, 0x006c, 0xe038, 0x003d, "AltRight", ALT_RIGHT), - DOM_CODE(0x0700e7, 0x007e, 0x0086, 0xe05c, 0x0036, "MetaRight", META_RIGHT), - DOM_CODE(0x0c0060, 0x0166, 0x016e, 0x0000, 0xffff, NULL, INFO), - DOM_CODE(0x0c0061, 0x0172, 0x017a, 0x0000, 0xffff, NULL, CLOSED_CAPTION_TOGGLE), - DOM_CODE(0x0c006f, 0x00e1, 0x00e9, 0x0000, 0xffff, "BrightnessUp", BRIGHTNESS_UP), - DOM_CODE(0x0c0070, 0x00e0, 0x00e8, 0x0000, 0xffff, "BrightnessDown", BRIGHTNESS_DOWN), - DOM_CODE(0x0c0072, 0x01af, 0x01b7, 0x0000, 0xffff, NULL, BRIGHTNESS_TOGGLE), - DOM_CODE(0x0c0073, 0x0250, 0x0258, 0x0000, 0xffff, NULL, BRIGHTNESS_MINIMIUM), - DOM_CODE(0x0c0074, 0x0251, 0x0259, 0x0000, 0xffff, NULL, BRIGHTNESS_MAXIMUM), - DOM_CODE(0x0c0075, 0x00f4, 0x00fc, 0x0000, 0xffff, NULL, BRIGHTNESS_AUTO), - DOM_CODE(0x0c0079, 0x00e6, 0x00ee, 0x0000, 0xffff, NULL, KBD_ILLUM_UP), - DOM_CODE(0x0c007a, 0x00e5, 0x00ed, 0x0000, 0xffff, NULL, KBD_ILLUM_DOWN), - DOM_CODE(0x0c0083, 0x0195, 0x019d, 0x0000, 0xffff, NULL, MEDIA_LAST), - DOM_CODE(0x0c008c, 0x00a9, 0x00b1, 0x0000, 0xffff, NULL, LAUNCH_PHONE), - DOM_CODE(0x0c008d, 0x016a, 0x0172, 0x0000, 0xffff, NULL, PROGRAM_GUIDE), - DOM_CODE(0x0c0094, 0x00ae, 0x00b6, 0x0000, 0xffff, NULL, EXIT), - DOM_CODE(0x0c009c, 0x019a, 0x01a2, 0x0000, 0xffff, NULL, CHANNEL_UP), - DOM_CODE(0x0c009d, 0x019b, 0x01a3, 0x0000, 0xffff, NULL, CHANNEL_DOWN), - DOM_CODE(0x0c00b0, 0x00cf, 0x00d7, 0x0000, 0xffff, "MediaPlay", MEDIA_PLAY), - DOM_CODE(0x0c00b1, 0x00c9, 0x00d1, 0x0000, 0xffff, "MediaPause", MEDIA_PAUSE), - DOM_CODE(0x0c00b2, 0x00a7, 0x00af, 0x0000, 0xffff, "MediaRecord", MEDIA_RECORD), - DOM_CODE(0x0c00b3, 0x00d0, 0x00d8, 0x0000, 0xffff, "MediaFastForward", MEDIA_FAST_FORWARD), - DOM_CODE(0x0c00b4, 0x00a8, 0x00b0, 0x0000, 0xffff, "MediaRewind", MEDIA_REWIND), - DOM_CODE(0x0c00b5, 0x00a3, 0x00ab, 0xe019, 0xffff, "MediaTrackNext", MEDIA_TRACK_NEXT), - DOM_CODE(0x0c00b6, 0x00a5, 0x00ad, 0xe010, 0xffff, "MediaTrackPrevious", MEDIA_TRACK_PREVIOUS), - DOM_CODE(0x0c00b7, 0x00a6, 0x00ae, 0xe024, 0xffff, "MediaStop", MEDIA_STOP), - DOM_CODE(0x0c00b8, 0x00a1, 0x00a9, 0xe02c, 0xffff, "Eject", EJECT), - DOM_CODE(0x0c00cd, 0x00a4, 0x00ac, 0xe022, 0xffff, "MediaPlayPause", MEDIA_PLAY_PAUSE), - DOM_CODE(0x0c00cf, 0x0246, 0x024e, 0x0000, 0xffff, NULL, SPEECH_INPUT_TOGGLE), - DOM_CODE(0x0c00e5, 0x00d1, 0x00d9, 0x0000, 0xffff, NULL, BASS_BOOST), - DOM_CODE(0x0c0183, 0x00ab, 0x00b3, 0xe06d, 0xffff, "MediaSelect", MEDIA_SELECT), - DOM_CODE(0x0c0184, 0x01a5, 0x01ad, 0x0000, 0xffff, NULL, LAUNCH_WORD_PROCESSOR), - DOM_CODE(0x0c0186, 0x01a7, 0x01af, 0x0000, 0xffff, NULL, LAUNCH_SPREADSHEET), - DOM_CODE(0x0c018a, 0x009b, 0x00a3, 0xe06c, 0xffff, "LaunchMail", LAUNCH_MAIL), - DOM_CODE(0x0c018d, 0x01ad, 0x01b5, 0x0000, 0xffff, NULL, LAUNCH_CONTACTS), - DOM_CODE(0x0c018e, 0x018d, 0x0195, 0x0000, 0xffff, NULL, LAUNCH_CALENDAR), - DOM_CODE(0x0c0192, 0x008c, 0x0094, 0xe021, 0xffff, "LaunchApp2", LAUNCH_APP2), - DOM_CODE(0x0c0194, 0x0090, 0x0098, 0xe06b, 0xffff, "LaunchApp1", LAUNCH_APP1), - DOM_CODE(0x0c0196, 0x0096, 0x009e, 0x0000, 0xffff, NULL, LAUNCH_INTERNET_BROWSER), - DOM_CODE(0x0c019C, 0x01b1, 0x01b9, 0x0000, 0xffff, NULL, LOG_OFF), - DOM_CODE(0x0c019e, 0x0098, 0x00a0, 0x0000, 0xffff, NULL, LOCK_SCREEN), - DOM_CODE(0x0c019f, 0x0243, 0x024b, 0x0000, 0xffff, "LaunchControlPanel", LAUNCH_CONTROL_PANEL), - DOM_CODE(0x0c01a2, 0x0244, 0x024c, 0x0000, 0xffff, "SelectTask", SELECT_TASK), - DOM_CODE(0x0c01a7, 0x00eb, 0x00f3, 0x0000, 0xffff, NULL, LAUNCH_DOCUMENTS), - DOM_CODE(0x0c01ab, 0x01b0, 0x01b8, 0x0000, 0xffff, NULL, SPELL_CHECK), - DOM_CODE(0x0c01ae, 0x0176, 0x017e, 0x0000, 0xffff, NULL, LAUNCH_KEYBOARD_LAYOUT), - DOM_CODE(0x0c01b1, 0x0245, 0x024d, 0x0000, 0xffff, "LaunchScreenSaver", LAUNCH_SCREEN_SAVER), - DOM_CODE(0x0c01cb, 0x0247, 0x024f, 0x0000, 0xffff, "LaunchAssistant", LAUNCH_ASSISTANT), - DOM_CODE(0x0c01b7, 0x0188, 0x0190, 0x0000, 0xffff, NULL, LAUNCH_AUDIO_BROWSER), - DOM_CODE(0x0c0201, 0x00b5, 0x00bd, 0x0000, 0xffff, NULL, NEW), - DOM_CODE(0x0c0203, 0x00ce, 0x00d6, 0x0000, 0xffff, NULL, CLOSE), - DOM_CODE(0x0c0207, 0x00ea, 0x00f2, 0x0000, 0xffff, NULL, SAVE), - DOM_CODE(0x0c0208, 0x00d2, 0x00da, 0x0000, 0xffff, NULL, PRINT), - DOM_CODE(0x0c0221, 0x00d9, 0x00e1, 0xe065, 0xffff, "BrowserSearch", BROWSER_SEARCH), - DOM_CODE(0x0c0223, 0x00ac, 0x00b4, 0xe032, 0xffff, "BrowserHome", BROWSER_HOME), - DOM_CODE(0x0c0224, 0x009e, 0x00a6, 0xe06a, 0xffff, "BrowserBack", BROWSER_BACK), - DOM_CODE(0x0c0225, 0x009f, 0x00a7, 0xe069, 0xffff, "BrowserForward", BROWSER_FORWARD), - DOM_CODE(0x0c0226, 0x0080, 0x0088, 0xe068, 0xffff, "BrowserStop", BROWSER_STOP), - DOM_CODE(0x0c0227, 0x00ad, 0x00b5, 0xe067, 0xffff, "BrowserRefresh", BROWSER_REFRESH), - DOM_CODE(0x0c022a, 0x009c, 0x00a4, 0xe066, 0xffff, "BrowserFavorites", BROWSER_FAVORITES), - DOM_CODE(0x0c022d, 0x01a2, 0x01aa, 0x0000, 0xffff, NULL, ZOOM_IN), - DOM_CODE(0x0c022e, 0x01a3, 0x01ab, 0x0000, 0xffff, NULL, ZOOM_OUT), - DOM_CODE(0x0c0232, 0x0174, 0x017c, 0x0000, 0xffff, "ZoomToggle", ZOOM_TOGGLE), - DOM_CODE(0x0c0279, 0x00b6, 0x00be, 0x0000, 0xffff, NULL, REDO), - DOM_CODE(0x0c0289, 0x00e8, 0x00f0, 0x0000, 0xffff, "MailReply", MAIL_REPLY), - DOM_CODE(0x0c028b, 0x00e9, 0x00f1, 0x0000, 0xffff, "MailForward", MAIL_FORWARD), - DOM_CODE(0x0c028c, 0x00e7, 0x00ef, 0x0000, 0xffff, "MailSend", MAIL_SEND), - DOM_CODE(0x0c029d, 0x0248, 0x0250, 0x0000, 0xffff, "KeyboardLayoutSelect", KEYBOARD_LAYOUT_SELECT), - DOM_CODE(0x0c029f, 0x0078, 0x0080, 0x0000, 0xffff, "ShowAllWindows", SHOW_ALL_WINDOWS), +DOM_CODE_DECLARATION { + DOM_CODE(0x000000, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NONE), + DOM_CODE(0x000010, 0x0000, 0x0000, 0x0000, 0xffff, "Hyper", HYPER), + DOM_CODE(0x000011, 0x0000, 0x0000, 0x0000, 0xffff, "Super", SUPER), + DOM_CODE(0x000012, 0x0000, 0x0000, 0x0000, 0xffff, "Fn", FN), + DOM_CODE(0x000013, 0x0000, 0x0000, 0x0000, 0xffff, "FnLock", FN_LOCK), + DOM_CODE(0x000014, 0x0000, 0x0000, 0x0000, 0xffff, "Suspend", SUSPEND), + DOM_CODE(0x000015, 0x0000, 0x0000, 0x0000, 0xffff, "Resume", RESUME), + DOM_CODE(0x000016, 0x0000, 0x0000, 0x0000, 0xffff, "Turbo", TURBO), + DOM_CODE(0x000017, 0x0279, 0x0281, 0x0000, 0xffff, "PrivacyScreenToggle", PRIVACY_SCREEN_TOGGLE), + DOM_CODE(0x010082, 0x008e, 0x0096, 0xe05f, 0xffff, "Sleep", SLEEP), + DOM_CODE(0x010083, 0x008f, 0x0097, 0xe063, 0xffff, "WakeUp", WAKE_UP), + DOM_CODE(0x0100b5, 0x00e3, 0x00eb, 0x0000, 0xffff, "DisplayToggleIntExt", DISPLAY_TOGGLE_INT_EXT), + DOM_CODE(0x070000, 0x0000, 0x0000, 0x0000, 0xffff, NULL, USB_RESERVED), + DOM_CODE(0x070001, 0x0000, 0x0000, 0x00ff, 0xffff, NULL, USB_ERROR_ROLL_OVER), + DOM_CODE(0x070002, 0x0000, 0x0000, 0x00fc, 0xffff, NULL, USB_POST_FAIL), + DOM_CODE(0x070003, 0x0000, 0x0000, 0x0000, 0xffff, NULL, USB_ERROR_UNDEFINED), + DOM_CODE(0x070004, 0x001e, 0x0026, 0x001e, 0x0000, "KeyA", US_A), + DOM_CODE(0x070005, 0x0030, 0x0038, 0x0030, 0x000b, "KeyB", US_B), + DOM_CODE(0x070006, 0x002e, 0x0036, 0x002e, 0x0008, "KeyC", US_C), + DOM_CODE(0x070007, 0x0020, 0x0028, 0x0020, 0x0002, "KeyD", US_D), + DOM_CODE(0x070008, 0x0012, 0x001a, 0x0012, 0x000e, "KeyE", US_E), + DOM_CODE(0x070009, 0x0021, 0x0029, 0x0021, 0x0003, "KeyF", US_F), + DOM_CODE(0x07000a, 0x0022, 0x002a, 0x0022, 0x0005, "KeyG", US_G), + DOM_CODE(0x07000b, 0x0023, 0x002b, 0x0023, 0x0004, "KeyH", US_H), + DOM_CODE(0x07000c, 0x0017, 0x001f, 0x0017, 0x0022, "KeyI", US_I), + DOM_CODE(0x07000d, 0x0024, 0x002c, 0x0024, 0x0026, "KeyJ", US_J), + DOM_CODE(0x07000e, 0x0025, 0x002d, 0x0025, 0x0028, "KeyK", US_K), + DOM_CODE(0x07000f, 0x0026, 0x002e, 0x0026, 0x0025, "KeyL", US_L), + DOM_CODE(0x070010, 0x0032, 0x003a, 0x0032, 0x002e, "KeyM", US_M), + DOM_CODE(0x070011, 0x0031, 0x0039, 0x0031, 0x002d, "KeyN", US_N), + DOM_CODE(0x070012, 0x0018, 0x0020, 0x0018, 0x001f, "KeyO", US_O), + DOM_CODE(0x070013, 0x0019, 0x0021, 0x0019, 0x0023, "KeyP", US_P), + DOM_CODE(0x070014, 0x0010, 0x0018, 0x0010, 0x000c, "KeyQ", US_Q), + DOM_CODE(0x070015, 0x0013, 0x001b, 0x0013, 0x000f, "KeyR", US_R), + DOM_CODE(0x070016, 0x001f, 0x0027, 0x001f, 0x0001, "KeyS", US_S), + DOM_CODE(0x070017, 0x0014, 0x001c, 0x0014, 0x0011, "KeyT", US_T), + DOM_CODE(0x070018, 0x0016, 0x001e, 0x0016, 0x0020, "KeyU", US_U), + DOM_CODE(0x070019, 0x002f, 0x0037, 0x002f, 0x0009, "KeyV", US_V), + DOM_CODE(0x07001a, 0x0011, 0x0019, 0x0011, 0x000d, "KeyW", US_W), + DOM_CODE(0x07001b, 0x002d, 0x0035, 0x002d, 0x0007, "KeyX", US_X), + DOM_CODE(0x07001c, 0x0015, 0x001d, 0x0015, 0x0010, "KeyY", US_Y), + DOM_CODE(0x07001d, 0x002c, 0x0034, 0x002c, 0x0006, "KeyZ", US_Z), + DOM_CODE(0x07001e, 0x0002, 0x000a, 0x0002, 0x0012, "Digit1", DIGIT1), + DOM_CODE(0x07001f, 0x0003, 0x000b, 0x0003, 0x0013, "Digit2", DIGIT2), + DOM_CODE(0x070020, 0x0004, 0x000c, 0x0004, 0x0014, "Digit3", DIGIT3), + DOM_CODE(0x070021, 0x0005, 0x000d, 0x0005, 0x0015, "Digit4", DIGIT4), + DOM_CODE(0x070022, 0x0006, 0x000e, 0x0006, 0x0017, "Digit5", DIGIT5), + DOM_CODE(0x070023, 0x0007, 0x000f, 0x0007, 0x0016, "Digit6", DIGIT6), + DOM_CODE(0x070024, 0x0008, 0x0010, 0x0008, 0x001a, "Digit7", DIGIT7), + DOM_CODE(0x070025, 0x0009, 0x0011, 0x0009, 0x001c, "Digit8", DIGIT8), + DOM_CODE(0x070026, 0x000a, 0x0012, 0x000a, 0x0019, "Digit9", DIGIT9), + DOM_CODE(0x070027, 0x000b, 0x0013, 0x000b, 0x001d, "Digit0", DIGIT0), + DOM_CODE(0x070028, 0x001c, 0x0024, 0x001c, 0x0024, "Enter", ENTER), + DOM_CODE(0x070029, 0x0001, 0x0009, 0x0001, 0x0035, "Escape", ESCAPE), + DOM_CODE(0x07002a, 0x000e, 0x0016, 0x000e, 0x0033, "Backspace", BACKSPACE), + DOM_CODE(0x07002b, 0x000f, 0x0017, 0x000f, 0x0030, "Tab", TAB), + DOM_CODE(0x07002c, 0x0039, 0x0041, 0x0039, 0x0031, "Space", SPACE), + DOM_CODE(0x07002d, 0x000c, 0x0014, 0x000c, 0x001b, "Minus", MINUS), + DOM_CODE(0x07002e, 0x000d, 0x0015, 0x000d, 0x0018, "Equal", EQUAL), + DOM_CODE(0x07002f, 0x001a, 0x0022, 0x001a, 0x0021, "BracketLeft", BRACKET_LEFT), + DOM_CODE(0x070030, 0x001b, 0x0023, 0x001b, 0x001e, "BracketRight", BRACKET_RIGHT), + DOM_CODE(0x070031, 0x002b, 0x0033, 0x002b, 0x002a, "Backslash", BACKSLASH), + DOM_CODE(0x070033, 0x0027, 0x002f, 0x0027, 0x0029, "Semicolon", SEMICOLON), + DOM_CODE(0x070034, 0x0028, 0x0030, 0x0028, 0x0027, "Quote", QUOTE), + DOM_CODE(0x070035, 0x0029, 0x0031, 0x0029, 0x0032, "Backquote", BACKQUOTE), + DOM_CODE(0x070036, 0x0033, 0x003b, 0x0033, 0x002b, "Comma", COMMA), + DOM_CODE(0x070037, 0x0034, 0x003c, 0x0034, 0x002f, "Period", PERIOD), + DOM_CODE(0x070038, 0x0035, 0x003d, 0x0035, 0x002c, "Slash", SLASH), + DOM_CODE(0x070039, 0x003a, 0x0042, 0x003a, 0x0039, "CapsLock", CAPS_LOCK), + DOM_CODE(0x07003a, 0x003b, 0x0043, 0x003b, 0x007a, "F1", F1), + DOM_CODE(0x07003b, 0x003c, 0x0044, 0x003c, 0x0078, "F2", F2), + DOM_CODE(0x07003c, 0x003d, 0x0045, 0x003d, 0x0063, "F3", F3), + DOM_CODE(0x07003d, 0x003e, 0x0046, 0x003e, 0x0076, "F4", F4), + DOM_CODE(0x07003e, 0x003f, 0x0047, 0x003f, 0x0060, "F5", F5), + DOM_CODE(0x07003f, 0x0040, 0x0048, 0x0040, 0x0061, "F6", F6), + DOM_CODE(0x070040, 0x0041, 0x0049, 0x0041, 0x0062, "F7", F7), + DOM_CODE(0x070041, 0x0042, 0x004a, 0x0042, 0x0064, "F8", F8), + DOM_CODE(0x070042, 0x0043, 0x004b, 0x0043, 0x0065, "F9", F9), + DOM_CODE(0x070043, 0x0044, 0x004c, 0x0044, 0x006d, "F10", F10), + DOM_CODE(0x070044, 0x0057, 0x005f, 0x0057, 0x0067, "F11", F11), + DOM_CODE(0x070045, 0x0058, 0x0060, 0x0058, 0x006f, "F12", F12), + DOM_CODE(0x070046, 0x0063, 0x006b, 0xe037, 0xffff, "PrintScreen", PRINT_SCREEN), + DOM_CODE(0x070047, 0x0046, 0x004e, 0x0046, 0xffff, "ScrollLock", SCROLL_LOCK), + DOM_CODE(0x070048, 0x0077, 0x007f, 0x0045, 0xffff, "Pause", PAUSE), + DOM_CODE(0x070049, 0x006e, 0x0076, 0xe052, 0x0072, "Insert", INSERT), + DOM_CODE(0x07004a, 0x0066, 0x006e, 0xe047, 0x0073, "Home", HOME), + DOM_CODE(0x07004b, 0x0068, 0x0070, 0xe049, 0x0074, "PageUp", PAGE_UP), + DOM_CODE(0x07004c, 0x006f, 0x0077, 0xe053, 0x0075, "Delete", DEL), + DOM_CODE(0x07004d, 0x006b, 0x0073, 0xe04f, 0x0077, "End", END), + DOM_CODE(0x07004e, 0x006d, 0x0075, 0xe051, 0x0079, "PageDown", PAGE_DOWN), + DOM_CODE(0x07004f, 0x006a, 0x0072, 0xe04d, 0x007c, "ArrowRight", ARROW_RIGHT), + DOM_CODE(0x070050, 0x0069, 0x0071, 0xe04b, 0x007b, "ArrowLeft", ARROW_LEFT), + DOM_CODE(0x070051, 0x006c, 0x0074, 0xe050, 0x007d, "ArrowDown", ARROW_DOWN), + DOM_CODE(0x070052, 0x0067, 0x006f, 0xe048, 0x007e, "ArrowUp", ARROW_UP), + DOM_CODE(0x070053, 0x0045, 0x004d, 0xe045, 0x0047, "NumLock", NUM_LOCK), + DOM_CODE(0x070054, 0x0062, 0x006a, 0xe035, 0x004b, "NumpadDivide", NUMPAD_DIVIDE), + DOM_CODE(0x070055, 0x0037, 0x003f, 0x0037, 0x0043, "NumpadMultiply", NUMPAD_MULTIPLY), + DOM_CODE(0x070056, 0x004a, 0x0052, 0x004a, 0x004e, "NumpadSubtract", NUMPAD_SUBTRACT), + DOM_CODE(0x070057, 0x004e, 0x0056, 0x004e, 0x0045, "NumpadAdd", NUMPAD_ADD), + DOM_CODE(0x070058, 0x0060, 0x0068, 0xe01c, 0x004c, "NumpadEnter", NUMPAD_ENTER), + DOM_CODE(0x070059, 0x004f, 0x0057, 0x004f, 0x0053, "Numpad1", NUMPAD1), + DOM_CODE(0x07005a, 0x0050, 0x0058, 0x0050, 0x0054, "Numpad2", NUMPAD2), + DOM_CODE(0x07005b, 0x0051, 0x0059, 0x0051, 0x0055, "Numpad3", NUMPAD3), + DOM_CODE(0x07005c, 0x004b, 0x0053, 0x004b, 0x0056, "Numpad4", NUMPAD4), + DOM_CODE(0x07005d, 0x004c, 0x0054, 0x004c, 0x0057, "Numpad5", NUMPAD5), + DOM_CODE(0x07005e, 0x004d, 0x0055, 0x004d, 0x0058, "Numpad6", NUMPAD6), + DOM_CODE(0x07005f, 0x0047, 0x004f, 0x0047, 0x0059, "Numpad7", NUMPAD7), + DOM_CODE(0x070060, 0x0048, 0x0050, 0x0048, 0x005b, "Numpad8", NUMPAD8), + DOM_CODE(0x070061, 0x0049, 0x0051, 0x0049, 0x005c, "Numpad9", NUMPAD9), + DOM_CODE(0x070062, 0x0052, 0x005a, 0x0052, 0x0052, "Numpad0", NUMPAD0), + DOM_CODE(0x070063, 0x0053, 0x005b, 0x0053, 0x0041, "NumpadDecimal", NUMPAD_DECIMAL), + DOM_CODE(0x070064, 0x0056, 0x005e, 0x0056, 0x000a, "IntlBackslash", INTL_BACKSLASH), + DOM_CODE(0x070065, 0x007f, 0x0087, 0xe05d, 0x006e, "ContextMenu", CONTEXT_MENU), + DOM_CODE(0x070066, 0x0074, 0x007c, 0xe05e, 0xffff, "Power", POWER), + DOM_CODE(0x070067, 0x0075, 0x007d, 0x0059, 0x0051, "NumpadEqual", NUMPAD_EQUAL), + DOM_CODE(0x070068, 0x00b7, 0x00bf, 0x0064, 0x0069, "F13", F13), + DOM_CODE(0x070069, 0x00b8, 0x00c0, 0x0065, 0x006b, "F14", F14), + DOM_CODE(0x07006a, 0x00b9, 0x00c1, 0x0066, 0x0071, "F15", F15), + DOM_CODE(0x07006b, 0x00ba, 0x00c2, 0x0067, 0x006a, "F16", F16), + DOM_CODE(0x07006c, 0x00bb, 0x00c3, 0x0068, 0x0040, "F17", F17), + DOM_CODE(0x07006d, 0x00bc, 0x00c4, 0x0069, 0x004f, "F18", F18), + DOM_CODE(0x07006e, 0x00bd, 0x00c5, 0x006a, 0x0050, "F19", F19), + DOM_CODE(0x07006f, 0x00be, 0x00c6, 0x006b, 0x005a, "F20", F20), + DOM_CODE(0x070070, 0x00bf, 0x00c7, 0x006c, 0xffff, "F21", F21), + DOM_CODE(0x070071, 0x00c0, 0x00c8, 0x006d, 0xffff, "F22", F22), + DOM_CODE(0x070072, 0x00c1, 0x00c9, 0x006e, 0xffff, "F23", F23), + DOM_CODE(0x070073, 0x00c2, 0x00ca, 0x0076, 0xffff, "F24", F24), + DOM_CODE(0x070074, 0x0086, 0x008e, 0x0000, 0xffff, "Open", OPEN), + DOM_CODE(0x070075, 0x008a, 0x0092, 0xe03b, 0xffff, "Help", HELP), + DOM_CODE(0x070077, 0x0084, 0x008c, 0x0000, 0xffff, "Select", SELECT), + DOM_CODE(0x070079, 0x0081, 0x0089, 0x0000, 0xffff, "Again", AGAIN), + DOM_CODE(0x07007a, 0x0083, 0x008b, 0xe008, 0xffff, "Undo", UNDO), + DOM_CODE(0x07007b, 0x0089, 0x0091, 0xe017, 0xffff, "Cut", CUT), + DOM_CODE(0x07007c, 0x0085, 0x008d, 0xe018, 0xffff, "Copy", COPY), + DOM_CODE(0x07007d, 0x0087, 0x008f, 0xe00a, 0xffff, "Paste", PASTE), + DOM_CODE(0x07007e, 0x0088, 0x0090, 0x0000, 0xffff, "Find", FIND), + DOM_CODE(0x07007f, 0x0071, 0x0079, 0xe020, 0x004a, "AudioVolumeMute", VOLUME_MUTE), + DOM_CODE(0x070080, 0x0073, 0x007b, 0xe030, 0x0048, "AudioVolumeUp", VOLUME_UP), + DOM_CODE(0x070081, 0x0072, 0x007a, 0xe02e, 0x0049, "AudioVolumeDown", VOLUME_DOWN), + DOM_CODE(0x070085, 0x0079, 0x0081, 0x007e, 0x005f, "NumpadComma", NUMPAD_COMMA), + DOM_CODE(0x070087, 0x0059, 0x0061, 0x0073, 0x005e, "IntlRo", INTL_RO), + DOM_CODE(0x070088, 0x005d, 0x0065, 0x0070, 0xffff, "KanaMode", KANA_MODE), + DOM_CODE(0x070089, 0x007c, 0x0084, 0x007d, 0x005d, "IntlYen", INTL_YEN), + DOM_CODE(0x07008a, 0x005c, 0x0064, 0x0079, 0xffff, "Convert", CONVERT), + DOM_CODE(0x07008b, 0x005e, 0x0066, 0x007b, 0xffff, "NonConvert", NON_CONVERT), + DOM_CODE(0x070090, 0x007a, 0x0082, 0x0072, 0x0068, "Lang1", LANG1), + DOM_CODE(0x070091, 0x007b, 0x0083, 0x0071, 0x0066, "Lang2", LANG2), + DOM_CODE(0x070092, 0x005a, 0x0062, 0x0078, 0xffff, "Lang3", LANG3), + DOM_CODE(0x070093, 0x005b, 0x0063, 0x0077, 0xffff, "Lang4", LANG4), + DOM_CODE(0x070094, 0x0055, 0x005d, 0x0000, 0xffff, "Lang5", LANG5), + DOM_CODE(0x07009b, 0x0000, 0x0000, 0x0000, 0xffff, "Abort", ABORT), + DOM_CODE(0x0700a3, 0x0000, 0x0000, 0x0000, 0xffff, "Props", PROPS), + DOM_CODE(0x0700b6, 0x00b3, 0x00bb, 0x0000, 0xffff, "NumpadParenLeft", NUMPAD_PAREN_LEFT), + DOM_CODE(0x0700b7, 0x00b4, 0x00bc, 0x0000, 0xffff, "NumpadParenRight", NUMPAD_PAREN_RIGHT), + DOM_CODE(0x0700bb, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadBackspace", NUMPAD_BACKSPACE), + DOM_CODE(0x0700d0, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryStore", NUMPAD_MEMORY_STORE), + DOM_CODE(0x0700d1, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryRecall", NUMPAD_MEMORY_RECALL), + DOM_CODE(0x0700d2, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryClear", NUMPAD_MEMORY_CLEAR), + DOM_CODE(0x0700d3, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryAdd", NUMPAD_MEMORY_ADD), + DOM_CODE(0x0700d4, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemorySubtract", NUMPAD_MEMORY_SUBTRACT), + DOM_CODE(0x0700d7, 0x0076, 0x007e, 0x0000, 0xffff, NULL, NUMPAD_SIGN_CHANGE), + DOM_CODE(0x0700d8, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadClear", NUMPAD_CLEAR), + DOM_CODE(0x0700d9, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadClearEntry", NUMPAD_CLEAR_ENTRY), + DOM_CODE(0x0700e0, 0x001d, 0x0025, 0x001d, 0x003b, "ControlLeft", CONTROL_LEFT), + DOM_CODE(0x0700e1, 0x002a, 0x0032, 0x002a, 0x0038, "ShiftLeft", SHIFT_LEFT), + DOM_CODE(0x0700e2, 0x0038, 0x0040, 0x0038, 0x003a, "AltLeft", ALT_LEFT), + DOM_CODE(0x0700e3, 0x007d, 0x0085, 0xe05b, 0x0037, "MetaLeft", META_LEFT), + DOM_CODE(0x0700e4, 0x0061, 0x0069, 0xe01d, 0x003e, "ControlRight", CONTROL_RIGHT), + DOM_CODE(0x0700e5, 0x0036, 0x003e, 0x0036, 0x003c, "ShiftRight", SHIFT_RIGHT), + DOM_CODE(0x0700e6, 0x0064, 0x006c, 0xe038, 0x003d, "AltRight", ALT_RIGHT), + DOM_CODE(0x0700e7, 0x007e, 0x0086, 0xe05c, 0x0036, "MetaRight", META_RIGHT), + DOM_CODE(0x0c0060, 0x0166, 0x016e, 0x0000, 0xffff, NULL, INFO), + DOM_CODE(0x0c0061, 0x0172, 0x017a, 0x0000, 0xffff, NULL, CLOSED_CAPTION_TOGGLE), + DOM_CODE(0x0c006f, 0x00e1, 0x00e9, 0x0000, 0xffff, "BrightnessUp", BRIGHTNESS_UP), + DOM_CODE(0x0c0070, 0x00e0, 0x00e8, 0x0000, 0xffff, "BrightnessDown", BRIGHTNESS_DOWN), + DOM_CODE(0x0c0072, 0x01af, 0x01b7, 0x0000, 0xffff, NULL, BRIGHTNESS_TOGGLE), + DOM_CODE(0x0c0073, 0x0250, 0x0258, 0x0000, 0xffff, NULL, BRIGHTNESS_MINIMIUM), + DOM_CODE(0x0c0074, 0x0251, 0x0259, 0x0000, 0xffff, NULL, BRIGHTNESS_MAXIMUM), + DOM_CODE(0x0c0075, 0x00f4, 0x00fc, 0x0000, 0xffff, NULL, BRIGHTNESS_AUTO), + DOM_CODE(0x0c0079, 0x00e6, 0x00ee, 0x0000, 0xffff, NULL, KBD_ILLUM_UP), + DOM_CODE(0x0c007a, 0x00e5, 0x00ed, 0x0000, 0xffff, NULL, KBD_ILLUM_DOWN), + DOM_CODE(0x0c0083, 0x0195, 0x019d, 0x0000, 0xffff, NULL, MEDIA_LAST), + DOM_CODE(0x0c008c, 0x00a9, 0x00b1, 0x0000, 0xffff, NULL, LAUNCH_PHONE), + DOM_CODE(0x0c008d, 0x016a, 0x0172, 0x0000, 0xffff, NULL, PROGRAM_GUIDE), + DOM_CODE(0x0c0094, 0x00ae, 0x00b6, 0x0000, 0xffff, NULL, EXIT), + DOM_CODE(0x0c009c, 0x019a, 0x01a2, 0x0000, 0xffff, NULL, CHANNEL_UP), + DOM_CODE(0x0c009d, 0x019b, 0x01a3, 0x0000, 0xffff, NULL, CHANNEL_DOWN), + DOM_CODE(0x0c00b0, 0x00cf, 0x00d7, 0x0000, 0xffff, "MediaPlay", MEDIA_PLAY), + DOM_CODE(0x0c00b1, 0x00c9, 0x00d1, 0x0000, 0xffff, "MediaPause", MEDIA_PAUSE), + DOM_CODE(0x0c00b2, 0x00a7, 0x00af, 0x0000, 0xffff, "MediaRecord", MEDIA_RECORD), + DOM_CODE(0x0c00b3, 0x00d0, 0x00d8, 0x0000, 0xffff, "MediaFastForward", MEDIA_FAST_FORWARD), + DOM_CODE(0x0c00b4, 0x00a8, 0x00b0, 0x0000, 0xffff, "MediaRewind", MEDIA_REWIND), + DOM_CODE(0x0c00b5, 0x00a3, 0x00ab, 0xe019, 0xffff, "MediaTrackNext", MEDIA_TRACK_NEXT), + DOM_CODE(0x0c00b6, 0x00a5, 0x00ad, 0xe010, 0xffff, "MediaTrackPrevious", MEDIA_TRACK_PREVIOUS), + DOM_CODE(0x0c00b7, 0x00a6, 0x00ae, 0xe024, 0xffff, "MediaStop", MEDIA_STOP), + DOM_CODE(0x0c00b8, 0x00a1, 0x00a9, 0xe02c, 0xffff, "Eject", EJECT), + DOM_CODE(0x0c00cd, 0x00a4, 0x00ac, 0xe022, 0xffff, "MediaPlayPause", MEDIA_PLAY_PAUSE), + DOM_CODE(0x0c00cf, 0x0246, 0x024e, 0x0000, 0xffff, NULL, SPEECH_INPUT_TOGGLE), + DOM_CODE(0x0c00e5, 0x00d1, 0x00d9, 0x0000, 0xffff, NULL, BASS_BOOST), + DOM_CODE(0x0c0183, 0x00ab, 0x00b3, 0xe06d, 0xffff, "MediaSelect", MEDIA_SELECT), + DOM_CODE(0x0c0184, 0x01a5, 0x01ad, 0x0000, 0xffff, NULL, LAUNCH_WORD_PROCESSOR), + DOM_CODE(0x0c0186, 0x01a7, 0x01af, 0x0000, 0xffff, NULL, LAUNCH_SPREADSHEET), + DOM_CODE(0x0c018a, 0x009b, 0x00a3, 0xe06c, 0xffff, "LaunchMail", LAUNCH_MAIL), + DOM_CODE(0x0c018d, 0x01ad, 0x01b5, 0x0000, 0xffff, NULL, LAUNCH_CONTACTS), + DOM_CODE(0x0c018e, 0x018d, 0x0195, 0x0000, 0xffff, NULL, LAUNCH_CALENDAR), + DOM_CODE(0x0c0192, 0x008c, 0x0094, 0xe021, 0xffff, "LaunchApp2", LAUNCH_APP2), + DOM_CODE(0x0c0194, 0x0090, 0x0098, 0xe06b, 0xffff, "LaunchApp1", LAUNCH_APP1), + DOM_CODE(0x0c0196, 0x0096, 0x009e, 0x0000, 0xffff, NULL, LAUNCH_INTERNET_BROWSER), + DOM_CODE(0x0c019C, 0x01b1, 0x01b9, 0x0000, 0xffff, NULL, LOG_OFF), + DOM_CODE(0x0c019e, 0x0098, 0x00a0, 0x0000, 0xffff, NULL, LOCK_SCREEN), + DOM_CODE(0x0c019f, 0x0243, 0x024b, 0x0000, 0xffff, "LaunchControlPanel", LAUNCH_CONTROL_PANEL), + DOM_CODE(0x0c01a2, 0x0244, 0x024c, 0x0000, 0xffff, "SelectTask", SELECT_TASK), + DOM_CODE(0x0c01a7, 0x00eb, 0x00f3, 0x0000, 0xffff, NULL, LAUNCH_DOCUMENTS), + DOM_CODE(0x0c01ab, 0x01b0, 0x01b8, 0x0000, 0xffff, NULL, SPELL_CHECK), + DOM_CODE(0x0c01ae, 0x0176, 0x017e, 0x0000, 0xffff, NULL, LAUNCH_KEYBOARD_LAYOUT), + DOM_CODE(0x0c01b1, 0x0245, 0x024d, 0x0000, 0xffff, "LaunchScreenSaver", LAUNCH_SCREEN_SAVER), + DOM_CODE(0x0c01cb, 0x0247, 0x024f, 0x0000, 0xffff, "LaunchAssistant", LAUNCH_ASSISTANT), + DOM_CODE(0x0c01b7, 0x0188, 0x0190, 0x0000, 0xffff, NULL, LAUNCH_AUDIO_BROWSER), + DOM_CODE(0x0c0201, 0x00b5, 0x00bd, 0x0000, 0xffff, NULL, NEW), + DOM_CODE(0x0c0203, 0x00ce, 0x00d6, 0x0000, 0xffff, NULL, CLOSE), + DOM_CODE(0x0c0207, 0x00ea, 0x00f2, 0x0000, 0xffff, NULL, SAVE), + DOM_CODE(0x0c0208, 0x00d2, 0x00da, 0x0000, 0xffff, NULL, PRINT), + DOM_CODE(0x0c0221, 0x00d9, 0x00e1, 0xe065, 0xffff, "BrowserSearch", BROWSER_SEARCH), + DOM_CODE(0x0c0223, 0x00ac, 0x00b4, 0xe032, 0xffff, "BrowserHome", BROWSER_HOME), + DOM_CODE(0x0c0224, 0x009e, 0x00a6, 0xe06a, 0xffff, "BrowserBack", BROWSER_BACK), + DOM_CODE(0x0c0225, 0x009f, 0x00a7, 0xe069, 0xffff, "BrowserForward", BROWSER_FORWARD), + DOM_CODE(0x0c0226, 0x0080, 0x0088, 0xe068, 0xffff, "BrowserStop", BROWSER_STOP), + DOM_CODE(0x0c0227, 0x00ad, 0x00b5, 0xe067, 0xffff, "BrowserRefresh", BROWSER_REFRESH), + DOM_CODE(0x0c022a, 0x009c, 0x00a4, 0xe066, 0xffff, "BrowserFavorites", BROWSER_FAVORITES), + DOM_CODE(0x0c022d, 0x01a2, 0x01aa, 0x0000, 0xffff, NULL, ZOOM_IN), + DOM_CODE(0x0c022e, 0x01a3, 0x01ab, 0x0000, 0xffff, NULL, ZOOM_OUT), + DOM_CODE(0x0c0232, 0x0174, 0x017c, 0x0000, 0xffff, "ZoomToggle", ZOOM_TOGGLE), + DOM_CODE(0x0c0279, 0x00b6, 0x00be, 0x0000, 0xffff, NULL, REDO), + DOM_CODE(0x0c0289, 0x00e8, 0x00f0, 0x0000, 0xffff, "MailReply", MAIL_REPLY), + DOM_CODE(0x0c028b, 0x00e9, 0x00f1, 0x0000, 0xffff, "MailForward", MAIL_FORWARD), + DOM_CODE(0x0c028c, 0x00e7, 0x00ef, 0x0000, 0xffff, "MailSend", MAIL_SEND), + DOM_CODE(0x0c029d, 0x0248, 0x0250, 0x0000, 0xffff, "KeyboardLayoutSelect", KEYBOARD_LAYOUT_SELECT), + DOM_CODE(0x0c029f, 0x0078, 0x0080, 0x0000, 0xffff, "ShowAllWindows", SHOW_ALL_WINDOWS), }; \ No newline at end of file diff --git a/hid/generator/gen.go b/hid/generator/gen.go index a20c8d1..67fd948 100644 --- a/hid/generator/gen.go +++ b/hid/generator/gen.go @@ -1,74 +1,74 @@ -package main - -import ( - "encoding/json" - "io" - "io/fs" - "os" - "regexp" - "strconv" -) - -type KeyMaps struct { - Usb map[uint16]Key - Evdev map[uint16]Key - Xkb map[uint16]Key - Win map[uint16]Key - Mac map[uint16]Key - Code map[string]Key - Arr []Key -} - -type Key struct { - Usb uint16 - Evdev uint16 - Xkb uint16 - Win uint16 - Mac uint16 - Code string -} - -func main() { - rege, _ := regexp.Compile("DOM_CODE\\(0x07([0-9a-f]*), 0x([0-9a-f]*), 0x([0-9a-f]*), 0x([0-9a-f]*), 0x([0-9a-f]*), \"?[A-Za-z0-9]*\"?, ([A-Za-z_0-9]*)") - //DOM_CODE(USB, evdev, XKB, Win, Mac, _, Code) - fil, _ := os.OpenFile("hid/data/keycode_data.inc", 0, fs.FileMode(os.O_RDONLY)) - byts, _ := io.ReadAll(fil) - fil.Close() - matches := rege.FindAllSubmatch(byts, -1) - KeyMaps := KeyMaps{ - Usb: make(map[uint16]Key), - Evdev: make(map[uint16]Key), - Xkb: make(map[uint16]Key), - Win: make(map[uint16]Key), - Mac: make(map[uint16]Key), - Code: make(map[string]Key), - } - Arr := make([]Key, 0) - for _, bar := range matches { - U, _ := strconv.ParseUint(string(bar[1]), 16, 16) - E, _ := strconv.ParseUint(string(bar[2]), 16, 16) - X, _ := strconv.ParseUint(string(bar[3]), 16, 16) - W, _ := strconv.ParseUint(string(bar[4]), 16, 16) - M, _ := strconv.ParseUint(string(bar[5]), 16, 16) - Keys := Key{ - Usb: uint16(U), - Evdev: uint16(E), - Xkb: uint16(X), - Win: uint16(W), - Mac: uint16(M), - Code: string(bar[6]), - } - KeyMaps.Usb[uint16(U)] = Keys - KeyMaps.Evdev[uint16(E)] = Keys - KeyMaps.Xkb[uint16(X)] = Keys - KeyMaps.Win[uint16(W)] = Keys - KeyMaps.Mac[uint16(M)] = Keys - KeyMaps.Code[string(bar[6])] = Keys - Arr = append(Arr, Keys) - } - KeyMaps.Arr = Arr - out, _ := os.Create("hid/generated.json") - defer out.Close() - jso, _ := json.Marshal(KeyMaps) - out.Write(jso) -} +package main + +import ( + "encoding/json" + "io" + "io/fs" + "os" + "regexp" + "strconv" +) + +type KeyMaps struct { + Usb map[uint16]Key + Evdev map[uint16]Key + Xkb map[uint16]Key + Win map[uint16]Key + Mac map[uint16]Key + Code map[string]Key + Arr []Key +} + +type Key struct { + Usb uint16 + Evdev uint16 + Xkb uint16 + Win uint16 + Mac uint16 + Code string +} + +func main() { + rege, _ := regexp.Compile("DOM_CODE\\(0x07([0-9a-f]*), 0x([0-9a-f]*), 0x([0-9a-f]*), 0x([0-9a-f]*), 0x([0-9a-f]*), \"?[A-Za-z0-9]*\"?, ([A-Za-z_0-9]*)") + //DOM_CODE(USB, evdev, XKB, Win, Mac, _, Code) + fil, _ := os.OpenFile("hid/data/keycode_data.inc", 0, fs.FileMode(os.O_RDONLY)) + byts, _ := io.ReadAll(fil) + fil.Close() + matches := rege.FindAllSubmatch(byts, -1) + KeyMaps := KeyMaps{ + Usb: make(map[uint16]Key), + Evdev: make(map[uint16]Key), + Xkb: make(map[uint16]Key), + Win: make(map[uint16]Key), + Mac: make(map[uint16]Key), + Code: make(map[string]Key), + } + Arr := make([]Key, 0) + for _, bar := range matches { + U, _ := strconv.ParseUint(string(bar[1]), 16, 16) + E, _ := strconv.ParseUint(string(bar[2]), 16, 16) + X, _ := strconv.ParseUint(string(bar[3]), 16, 16) + W, _ := strconv.ParseUint(string(bar[4]), 16, 16) + M, _ := strconv.ParseUint(string(bar[5]), 16, 16) + Keys := Key{ + Usb: uint16(U), + Evdev: uint16(E), + Xkb: uint16(X), + Win: uint16(W), + Mac: uint16(M), + Code: string(bar[6]), + } + KeyMaps.Usb[uint16(U)] = Keys + KeyMaps.Evdev[uint16(E)] = Keys + KeyMaps.Xkb[uint16(X)] = Keys + KeyMaps.Win[uint16(W)] = Keys + KeyMaps.Mac[uint16(M)] = Keys + KeyMaps.Code[string(bar[6])] = Keys + Arr = append(Arr, Keys) + } + KeyMaps.Arr = Arr + out, _ := os.Create("hid/generated.json") + defer out.Close() + jso, _ := json.Marshal(KeyMaps) + out.Write(jso) +} diff --git a/hid/hid.go b/hid/hid.go index 13f805c..befb667 100644 --- a/hid/hid.go +++ b/hid/hid.go @@ -1,63 +1,63 @@ -package hid - -import ( - _ "embed" - "encoding/json" -) - -type KeyMaps struct { - Usb map[uint16]Key - Evdev map[uint16]Key - Xkb map[uint16]Key - Win map[uint16]Key - Mac map[uint16]Key - Code map[string]Key - Arr []Key -} - -type Key struct { - Usb uint16 - Evdev uint16 - Xkb uint16 - Win uint16 - Mac uint16 - Code string -} - -var Mappings KeyMaps = KeyMaps{} - -//go:embed generated.json -var file []byte - -func init() { - json.Unmarshal(file, &Mappings) -} -func GetWindowsFromHid(uv uint16) uint16 { - return Mappings.Usb[uv].Win -} -func GetHidFromWindows(uv uint16) uint16 { - return Mappings.Win[uv].Usb -} - -func GetLinuxFromHid(uv uint16) uint16 { - return Mappings.Usb[uv].Evdev -} -func GetHidFromLinux(uv uint16) uint16 { - return Mappings.Evdev[uv].Usb -} - -func GetMappingFromHID(uv uint16) Key { - return Mappings.Usb[uv] -} - -func GetMappingFromWindows(uv uint16) Key { - return Mappings.Win[uv] -} - -func GetMappingFromLinux(uv uint16) Key { - return Mappings.Evdev[uv] -} - -func GetMappingFromName(name string) Key { - return Mappings.Code[name] -} +package hid + +import ( + _ "embed" + "encoding/json" +) + +type KeyMaps struct { + Usb map[uint16]Key + Evdev map[uint16]Key + Xkb map[uint16]Key + Win map[uint16]Key + Mac map[uint16]Key + Code map[string]Key + Arr []Key +} + +type Key struct { + Usb uint16 + Evdev uint16 + Xkb uint16 + Win uint16 + Mac uint16 + Code string +} + +var Mappings KeyMaps = KeyMaps{} + +//go:embed generated.json +var file []byte + +func init() { + json.Unmarshal(file, &Mappings) +} +func GetWindowsFromHid(uv uint16) uint16 { + return Mappings.Usb[uv].Win +} +func GetHidFromWindows(uv uint16) uint16 { + return Mappings.Win[uv].Usb +} + +func GetLinuxFromHid(uv uint16) uint16 { + return Mappings.Usb[uv].Evdev +} +func GetHidFromLinux(uv uint16) uint16 { + return Mappings.Evdev[uv].Usb +} + +func GetMappingFromHID(uv uint16) Key { + return Mappings.Usb[uv] +} + +func GetMappingFromWindows(uv uint16) Key { + return Mappings.Win[uv] +} + +func GetMappingFromLinux(uv uint16) Key { + return Mappings.Evdev[uv] +} + +func GetMappingFromName(name string) Key { + return Mappings.Code[name] +} diff --git a/module.go b/module.go index d0d85fe..c5c64b8 100644 --- a/module.go +++ b/module.go @@ -1,3 +1,3 @@ -package OrbCommon - -//go:generate go run hid/generator/gen.go +package OrbCommon + +//go:generate go run hid/generator/gen.go From 717af0c6d6ba1f477d308667d314a89b3e1c8caf Mon Sep 17 00:00:00 2001 From: Minizbot2012 Date: Mon, 3 May 2021 14:58:12 -0400 Subject: [PATCH 2/5] Unixify --- devices/orbweaver/orbweaver.go | 306 ++++++++++----------- gui/gui.go | 66 ++--- hid/data/keycode_data.inc | 478 ++++++++++++++++----------------- hid/generator/gen.go | 148 +++++----- hid/hid.go | 126 ++++----- module.go | 6 +- 6 files changed, 565 insertions(+), 565 deletions(-) diff --git a/devices/orbweaver/orbweaver.go b/devices/orbweaver/orbweaver.go index 56da180..1ee2d2b 100644 --- a/devices/orbweaver/orbweaver.go +++ b/devices/orbweaver/orbweaver.go @@ -1,153 +1,153 @@ -package orbweaver - -import ( - "encoding/binary" - "io" - "os" - - "github.com/OrbTools/OrbCommon/gui" -) - -//BINDING Map of Default Keys -var BINDING = [...]byte{41, 2, 3, 4, 5, 15, 16, 17, 18, 19, 58, 30, 31, 32, 33, 42, 44, 45, 46, 47, 56, 103, 106, 108, 105, 57} - -//GUI gui definition for an orbweaver -var GUI = &gui.GUI{ - Pages: []*gui.Page{ - { - Hive: "MIP", - Name: "Grid", - Type: gui.PGrid, - Keys: []*gui.Key{ - { - KeyID: 0, - KeyName: "01", - }, { - KeyID: 1, - KeyName: "02", - }, { - KeyID: 2, - KeyName: "03", - }, { - KeyID: 3, - KeyName: "04", - }, { - KeyID: 4, - KeyName: "05", - }, { - KeyID: 5, - KeyName: "06", - }, { - KeyID: 6, - KeyName: "07", - }, { - KeyID: 7, - KeyName: "08", - }, { - KeyID: 8, - KeyName: "09", - }, { - KeyID: 9, - KeyName: "10", - }, { - KeyID: 10, - KeyName: "11", - }, { - KeyID: 11, - KeyName: "12", - }, { - KeyID: 12, - KeyName: "13", - }, { - KeyID: 13, - KeyName: "11", - }, { - KeyID: 14, - KeyName: "11", - }, { - KeyID: 15, - KeyName: "11", - }, { - KeyID: 16, - KeyName: "11", - }, { - KeyID: 17, - KeyName: "11", - }, { - KeyID: 18, - KeyName: "11", - }, { - KeyID: 19, - KeyName: "20", - }, - }, - }, { - Hive: "SIP", - Name: "Side Keys", - Type: gui.PList, - Keys: []*gui.Key{ - { - KeyID: 0, - KeyName: "Upper Button", - }, { - KeyID: 1, - KeyName: "DPad Up", - }, { - KeyID: 2, - KeyName: "DPad Right", - }, { - KeyID: 3, - KeyName: "DPad Left", - }, { - KeyID: 4, - KeyName: "DPad Down", - }, { - KeyID: 5, - KeyName: "Lower Button", - }, - }, - }, - }, -} - -//KeyMap singular keymap -type KeyMap struct { - Keymap [26]uint16 - Color [3]byte -} - -//KeyMaps a set of keymaps -type KeyMaps struct { - Maps [7]*KeyMap - Currentmap int - MCount int -} - -//PKM format for altering the keymap -type PKM struct { - MIP [20]uint16 - SIP [6]uint16 - COL [3]byte -} - -//LoadKM Load Orbmap KM structure -func LoadKM(file string) *KeyMap { - mapped := new(KeyMap) - of, _ := os.Open(file) - binary.Read(of, binary.LittleEndian, mapped) - return mapped -} - -//SavePKMKeymap saves an orb after edit -func SavePKMKeymap(mapped *PKM, file io.WriteCloser) { - binary.Write(file, binary.LittleEndian, mapped) - file.Close() -} - -//LoadPKMKeymap loads an orb for editing -func LoadPKMKeymap(file io.ReadCloser) interface{} { - mapped := new(PKM) - binary.Read(file, binary.LittleEndian, mapped) - file.Close() - return mapped -} +package orbweaver + +import ( + "encoding/binary" + "io" + "os" + + "github.com/OrbTools/OrbCommon/gui" +) + +//BINDING Map of Default Keys +var BINDING = [...]byte{41, 2, 3, 4, 5, 15, 16, 17, 18, 19, 58, 30, 31, 32, 33, 42, 44, 45, 46, 47, 56, 103, 106, 108, 105, 57} + +//GUI gui definition for an orbweaver +var GUI = &gui.GUI{ + Pages: []*gui.Page{ + { + Hive: "MIP", + Name: "Grid", + Type: gui.PGrid, + Keys: []*gui.Key{ + { + KeyID: 0, + KeyName: "01", + }, { + KeyID: 1, + KeyName: "02", + }, { + KeyID: 2, + KeyName: "03", + }, { + KeyID: 3, + KeyName: "04", + }, { + KeyID: 4, + KeyName: "05", + }, { + KeyID: 5, + KeyName: "06", + }, { + KeyID: 6, + KeyName: "07", + }, { + KeyID: 7, + KeyName: "08", + }, { + KeyID: 8, + KeyName: "09", + }, { + KeyID: 9, + KeyName: "10", + }, { + KeyID: 10, + KeyName: "11", + }, { + KeyID: 11, + KeyName: "12", + }, { + KeyID: 12, + KeyName: "13", + }, { + KeyID: 13, + KeyName: "11", + }, { + KeyID: 14, + KeyName: "11", + }, { + KeyID: 15, + KeyName: "11", + }, { + KeyID: 16, + KeyName: "11", + }, { + KeyID: 17, + KeyName: "11", + }, { + KeyID: 18, + KeyName: "11", + }, { + KeyID: 19, + KeyName: "20", + }, + }, + }, { + Hive: "SIP", + Name: "Side Keys", + Type: gui.PList, + Keys: []*gui.Key{ + { + KeyID: 0, + KeyName: "Upper Button", + }, { + KeyID: 1, + KeyName: "DPad Up", + }, { + KeyID: 2, + KeyName: "DPad Right", + }, { + KeyID: 3, + KeyName: "DPad Left", + }, { + KeyID: 4, + KeyName: "DPad Down", + }, { + KeyID: 5, + KeyName: "Lower Button", + }, + }, + }, + }, +} + +//KeyMap singular keymap +type KeyMap struct { + Keymap [26]uint16 + Color [3]byte +} + +//KeyMaps a set of keymaps +type KeyMaps struct { + Maps [7]*KeyMap + Currentmap int + MCount int +} + +//PKM format for altering the keymap +type PKM struct { + MIP [20]uint16 + SIP [6]uint16 + COL [3]byte +} + +//LoadKM Load Orbmap KM structure +func LoadKM(file string) *KeyMap { + mapped := new(KeyMap) + of, _ := os.Open(file) + binary.Read(of, binary.LittleEndian, mapped) + return mapped +} + +//SavePKMKeymap saves an orb after edit +func SavePKMKeymap(mapped *PKM, file io.WriteCloser) { + binary.Write(file, binary.LittleEndian, mapped) + file.Close() +} + +//LoadPKMKeymap loads an orb for editing +func LoadPKMKeymap(file io.ReadCloser) interface{} { + mapped := new(PKM) + binary.Read(file, binary.LittleEndian, mapped) + file.Close() + return mapped +} diff --git a/gui/gui.go b/gui/gui.go index 66ba0ce..516cee4 100644 --- a/gui/gui.go +++ b/gui/gui.go @@ -1,33 +1,33 @@ -package gui - -//PageType PGrid, PCircle or PList -type PageType int - -const ( - //PGrid Grid type (keypads) - PGrid PageType = iota - //PCircle type (joysticks) - PCircle - //PList List Type - PList -) - -//GUI a GUI tree -type GUI struct { - Pages []*Page -} - -//Page A page of a binding GUI -type Page struct { - Hive string - Name string - Keys []*Key - Type PageType -} - -//Key a keybind -type Key struct { - KeyID int - KeyName string - Default uint16 -} +package gui + +//PageType PGrid, PCircle or PList +type PageType int + +const ( + //PGrid Grid type (keypads) + PGrid PageType = iota + //PCircle type (joysticks) + PCircle + //PList List Type + PList +) + +//GUI a GUI tree +type GUI struct { + Pages []*Page +} + +//Page A page of a binding GUI +type Page struct { + Hive string + Name string + Keys []*Key + Type PageType +} + +//Key a keybind +type Key struct { + KeyID int + KeyName string + Default uint16 +} diff --git a/hid/data/keycode_data.inc b/hid/data/keycode_data.inc index cd837e1..1baa0ed 100644 --- a/hid/data/keycode_data.inc +++ b/hid/data/keycode_data.inc @@ -1,240 +1,240 @@ -DOM_CODE_DECLARATION { - DOM_CODE(0x000000, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NONE), - DOM_CODE(0x000010, 0x0000, 0x0000, 0x0000, 0xffff, "Hyper", HYPER), - DOM_CODE(0x000011, 0x0000, 0x0000, 0x0000, 0xffff, "Super", SUPER), - DOM_CODE(0x000012, 0x0000, 0x0000, 0x0000, 0xffff, "Fn", FN), - DOM_CODE(0x000013, 0x0000, 0x0000, 0x0000, 0xffff, "FnLock", FN_LOCK), - DOM_CODE(0x000014, 0x0000, 0x0000, 0x0000, 0xffff, "Suspend", SUSPEND), - DOM_CODE(0x000015, 0x0000, 0x0000, 0x0000, 0xffff, "Resume", RESUME), - DOM_CODE(0x000016, 0x0000, 0x0000, 0x0000, 0xffff, "Turbo", TURBO), - DOM_CODE(0x000017, 0x0279, 0x0281, 0x0000, 0xffff, "PrivacyScreenToggle", PRIVACY_SCREEN_TOGGLE), - DOM_CODE(0x010082, 0x008e, 0x0096, 0xe05f, 0xffff, "Sleep", SLEEP), - DOM_CODE(0x010083, 0x008f, 0x0097, 0xe063, 0xffff, "WakeUp", WAKE_UP), - DOM_CODE(0x0100b5, 0x00e3, 0x00eb, 0x0000, 0xffff, "DisplayToggleIntExt", DISPLAY_TOGGLE_INT_EXT), - DOM_CODE(0x070000, 0x0000, 0x0000, 0x0000, 0xffff, NULL, USB_RESERVED), - DOM_CODE(0x070001, 0x0000, 0x0000, 0x00ff, 0xffff, NULL, USB_ERROR_ROLL_OVER), - DOM_CODE(0x070002, 0x0000, 0x0000, 0x00fc, 0xffff, NULL, USB_POST_FAIL), - DOM_CODE(0x070003, 0x0000, 0x0000, 0x0000, 0xffff, NULL, USB_ERROR_UNDEFINED), - DOM_CODE(0x070004, 0x001e, 0x0026, 0x001e, 0x0000, "KeyA", US_A), - DOM_CODE(0x070005, 0x0030, 0x0038, 0x0030, 0x000b, "KeyB", US_B), - DOM_CODE(0x070006, 0x002e, 0x0036, 0x002e, 0x0008, "KeyC", US_C), - DOM_CODE(0x070007, 0x0020, 0x0028, 0x0020, 0x0002, "KeyD", US_D), - DOM_CODE(0x070008, 0x0012, 0x001a, 0x0012, 0x000e, "KeyE", US_E), - DOM_CODE(0x070009, 0x0021, 0x0029, 0x0021, 0x0003, "KeyF", US_F), - DOM_CODE(0x07000a, 0x0022, 0x002a, 0x0022, 0x0005, "KeyG", US_G), - DOM_CODE(0x07000b, 0x0023, 0x002b, 0x0023, 0x0004, "KeyH", US_H), - DOM_CODE(0x07000c, 0x0017, 0x001f, 0x0017, 0x0022, "KeyI", US_I), - DOM_CODE(0x07000d, 0x0024, 0x002c, 0x0024, 0x0026, "KeyJ", US_J), - DOM_CODE(0x07000e, 0x0025, 0x002d, 0x0025, 0x0028, "KeyK", US_K), - DOM_CODE(0x07000f, 0x0026, 0x002e, 0x0026, 0x0025, "KeyL", US_L), - DOM_CODE(0x070010, 0x0032, 0x003a, 0x0032, 0x002e, "KeyM", US_M), - DOM_CODE(0x070011, 0x0031, 0x0039, 0x0031, 0x002d, "KeyN", US_N), - DOM_CODE(0x070012, 0x0018, 0x0020, 0x0018, 0x001f, "KeyO", US_O), - DOM_CODE(0x070013, 0x0019, 0x0021, 0x0019, 0x0023, "KeyP", US_P), - DOM_CODE(0x070014, 0x0010, 0x0018, 0x0010, 0x000c, "KeyQ", US_Q), - DOM_CODE(0x070015, 0x0013, 0x001b, 0x0013, 0x000f, "KeyR", US_R), - DOM_CODE(0x070016, 0x001f, 0x0027, 0x001f, 0x0001, "KeyS", US_S), - DOM_CODE(0x070017, 0x0014, 0x001c, 0x0014, 0x0011, "KeyT", US_T), - DOM_CODE(0x070018, 0x0016, 0x001e, 0x0016, 0x0020, "KeyU", US_U), - DOM_CODE(0x070019, 0x002f, 0x0037, 0x002f, 0x0009, "KeyV", US_V), - DOM_CODE(0x07001a, 0x0011, 0x0019, 0x0011, 0x000d, "KeyW", US_W), - DOM_CODE(0x07001b, 0x002d, 0x0035, 0x002d, 0x0007, "KeyX", US_X), - DOM_CODE(0x07001c, 0x0015, 0x001d, 0x0015, 0x0010, "KeyY", US_Y), - DOM_CODE(0x07001d, 0x002c, 0x0034, 0x002c, 0x0006, "KeyZ", US_Z), - DOM_CODE(0x07001e, 0x0002, 0x000a, 0x0002, 0x0012, "Digit1", DIGIT1), - DOM_CODE(0x07001f, 0x0003, 0x000b, 0x0003, 0x0013, "Digit2", DIGIT2), - DOM_CODE(0x070020, 0x0004, 0x000c, 0x0004, 0x0014, "Digit3", DIGIT3), - DOM_CODE(0x070021, 0x0005, 0x000d, 0x0005, 0x0015, "Digit4", DIGIT4), - DOM_CODE(0x070022, 0x0006, 0x000e, 0x0006, 0x0017, "Digit5", DIGIT5), - DOM_CODE(0x070023, 0x0007, 0x000f, 0x0007, 0x0016, "Digit6", DIGIT6), - DOM_CODE(0x070024, 0x0008, 0x0010, 0x0008, 0x001a, "Digit7", DIGIT7), - DOM_CODE(0x070025, 0x0009, 0x0011, 0x0009, 0x001c, "Digit8", DIGIT8), - DOM_CODE(0x070026, 0x000a, 0x0012, 0x000a, 0x0019, "Digit9", DIGIT9), - DOM_CODE(0x070027, 0x000b, 0x0013, 0x000b, 0x001d, "Digit0", DIGIT0), - DOM_CODE(0x070028, 0x001c, 0x0024, 0x001c, 0x0024, "Enter", ENTER), - DOM_CODE(0x070029, 0x0001, 0x0009, 0x0001, 0x0035, "Escape", ESCAPE), - DOM_CODE(0x07002a, 0x000e, 0x0016, 0x000e, 0x0033, "Backspace", BACKSPACE), - DOM_CODE(0x07002b, 0x000f, 0x0017, 0x000f, 0x0030, "Tab", TAB), - DOM_CODE(0x07002c, 0x0039, 0x0041, 0x0039, 0x0031, "Space", SPACE), - DOM_CODE(0x07002d, 0x000c, 0x0014, 0x000c, 0x001b, "Minus", MINUS), - DOM_CODE(0x07002e, 0x000d, 0x0015, 0x000d, 0x0018, "Equal", EQUAL), - DOM_CODE(0x07002f, 0x001a, 0x0022, 0x001a, 0x0021, "BracketLeft", BRACKET_LEFT), - DOM_CODE(0x070030, 0x001b, 0x0023, 0x001b, 0x001e, "BracketRight", BRACKET_RIGHT), - DOM_CODE(0x070031, 0x002b, 0x0033, 0x002b, 0x002a, "Backslash", BACKSLASH), - DOM_CODE(0x070033, 0x0027, 0x002f, 0x0027, 0x0029, "Semicolon", SEMICOLON), - DOM_CODE(0x070034, 0x0028, 0x0030, 0x0028, 0x0027, "Quote", QUOTE), - DOM_CODE(0x070035, 0x0029, 0x0031, 0x0029, 0x0032, "Backquote", BACKQUOTE), - DOM_CODE(0x070036, 0x0033, 0x003b, 0x0033, 0x002b, "Comma", COMMA), - DOM_CODE(0x070037, 0x0034, 0x003c, 0x0034, 0x002f, "Period", PERIOD), - DOM_CODE(0x070038, 0x0035, 0x003d, 0x0035, 0x002c, "Slash", SLASH), - DOM_CODE(0x070039, 0x003a, 0x0042, 0x003a, 0x0039, "CapsLock", CAPS_LOCK), - DOM_CODE(0x07003a, 0x003b, 0x0043, 0x003b, 0x007a, "F1", F1), - DOM_CODE(0x07003b, 0x003c, 0x0044, 0x003c, 0x0078, "F2", F2), - DOM_CODE(0x07003c, 0x003d, 0x0045, 0x003d, 0x0063, "F3", F3), - DOM_CODE(0x07003d, 0x003e, 0x0046, 0x003e, 0x0076, "F4", F4), - DOM_CODE(0x07003e, 0x003f, 0x0047, 0x003f, 0x0060, "F5", F5), - DOM_CODE(0x07003f, 0x0040, 0x0048, 0x0040, 0x0061, "F6", F6), - DOM_CODE(0x070040, 0x0041, 0x0049, 0x0041, 0x0062, "F7", F7), - DOM_CODE(0x070041, 0x0042, 0x004a, 0x0042, 0x0064, "F8", F8), - DOM_CODE(0x070042, 0x0043, 0x004b, 0x0043, 0x0065, "F9", F9), - DOM_CODE(0x070043, 0x0044, 0x004c, 0x0044, 0x006d, "F10", F10), - DOM_CODE(0x070044, 0x0057, 0x005f, 0x0057, 0x0067, "F11", F11), - DOM_CODE(0x070045, 0x0058, 0x0060, 0x0058, 0x006f, "F12", F12), - DOM_CODE(0x070046, 0x0063, 0x006b, 0xe037, 0xffff, "PrintScreen", PRINT_SCREEN), - DOM_CODE(0x070047, 0x0046, 0x004e, 0x0046, 0xffff, "ScrollLock", SCROLL_LOCK), - DOM_CODE(0x070048, 0x0077, 0x007f, 0x0045, 0xffff, "Pause", PAUSE), - DOM_CODE(0x070049, 0x006e, 0x0076, 0xe052, 0x0072, "Insert", INSERT), - DOM_CODE(0x07004a, 0x0066, 0x006e, 0xe047, 0x0073, "Home", HOME), - DOM_CODE(0x07004b, 0x0068, 0x0070, 0xe049, 0x0074, "PageUp", PAGE_UP), - DOM_CODE(0x07004c, 0x006f, 0x0077, 0xe053, 0x0075, "Delete", DEL), - DOM_CODE(0x07004d, 0x006b, 0x0073, 0xe04f, 0x0077, "End", END), - DOM_CODE(0x07004e, 0x006d, 0x0075, 0xe051, 0x0079, "PageDown", PAGE_DOWN), - DOM_CODE(0x07004f, 0x006a, 0x0072, 0xe04d, 0x007c, "ArrowRight", ARROW_RIGHT), - DOM_CODE(0x070050, 0x0069, 0x0071, 0xe04b, 0x007b, "ArrowLeft", ARROW_LEFT), - DOM_CODE(0x070051, 0x006c, 0x0074, 0xe050, 0x007d, "ArrowDown", ARROW_DOWN), - DOM_CODE(0x070052, 0x0067, 0x006f, 0xe048, 0x007e, "ArrowUp", ARROW_UP), - DOM_CODE(0x070053, 0x0045, 0x004d, 0xe045, 0x0047, "NumLock", NUM_LOCK), - DOM_CODE(0x070054, 0x0062, 0x006a, 0xe035, 0x004b, "NumpadDivide", NUMPAD_DIVIDE), - DOM_CODE(0x070055, 0x0037, 0x003f, 0x0037, 0x0043, "NumpadMultiply", NUMPAD_MULTIPLY), - DOM_CODE(0x070056, 0x004a, 0x0052, 0x004a, 0x004e, "NumpadSubtract", NUMPAD_SUBTRACT), - DOM_CODE(0x070057, 0x004e, 0x0056, 0x004e, 0x0045, "NumpadAdd", NUMPAD_ADD), - DOM_CODE(0x070058, 0x0060, 0x0068, 0xe01c, 0x004c, "NumpadEnter", NUMPAD_ENTER), - DOM_CODE(0x070059, 0x004f, 0x0057, 0x004f, 0x0053, "Numpad1", NUMPAD1), - DOM_CODE(0x07005a, 0x0050, 0x0058, 0x0050, 0x0054, "Numpad2", NUMPAD2), - DOM_CODE(0x07005b, 0x0051, 0x0059, 0x0051, 0x0055, "Numpad3", NUMPAD3), - DOM_CODE(0x07005c, 0x004b, 0x0053, 0x004b, 0x0056, "Numpad4", NUMPAD4), - DOM_CODE(0x07005d, 0x004c, 0x0054, 0x004c, 0x0057, "Numpad5", NUMPAD5), - DOM_CODE(0x07005e, 0x004d, 0x0055, 0x004d, 0x0058, "Numpad6", NUMPAD6), - DOM_CODE(0x07005f, 0x0047, 0x004f, 0x0047, 0x0059, "Numpad7", NUMPAD7), - DOM_CODE(0x070060, 0x0048, 0x0050, 0x0048, 0x005b, "Numpad8", NUMPAD8), - DOM_CODE(0x070061, 0x0049, 0x0051, 0x0049, 0x005c, "Numpad9", NUMPAD9), - DOM_CODE(0x070062, 0x0052, 0x005a, 0x0052, 0x0052, "Numpad0", NUMPAD0), - DOM_CODE(0x070063, 0x0053, 0x005b, 0x0053, 0x0041, "NumpadDecimal", NUMPAD_DECIMAL), - DOM_CODE(0x070064, 0x0056, 0x005e, 0x0056, 0x000a, "IntlBackslash", INTL_BACKSLASH), - DOM_CODE(0x070065, 0x007f, 0x0087, 0xe05d, 0x006e, "ContextMenu", CONTEXT_MENU), - DOM_CODE(0x070066, 0x0074, 0x007c, 0xe05e, 0xffff, "Power", POWER), - DOM_CODE(0x070067, 0x0075, 0x007d, 0x0059, 0x0051, "NumpadEqual", NUMPAD_EQUAL), - DOM_CODE(0x070068, 0x00b7, 0x00bf, 0x0064, 0x0069, "F13", F13), - DOM_CODE(0x070069, 0x00b8, 0x00c0, 0x0065, 0x006b, "F14", F14), - DOM_CODE(0x07006a, 0x00b9, 0x00c1, 0x0066, 0x0071, "F15", F15), - DOM_CODE(0x07006b, 0x00ba, 0x00c2, 0x0067, 0x006a, "F16", F16), - DOM_CODE(0x07006c, 0x00bb, 0x00c3, 0x0068, 0x0040, "F17", F17), - DOM_CODE(0x07006d, 0x00bc, 0x00c4, 0x0069, 0x004f, "F18", F18), - DOM_CODE(0x07006e, 0x00bd, 0x00c5, 0x006a, 0x0050, "F19", F19), - DOM_CODE(0x07006f, 0x00be, 0x00c6, 0x006b, 0x005a, "F20", F20), - DOM_CODE(0x070070, 0x00bf, 0x00c7, 0x006c, 0xffff, "F21", F21), - DOM_CODE(0x070071, 0x00c0, 0x00c8, 0x006d, 0xffff, "F22", F22), - DOM_CODE(0x070072, 0x00c1, 0x00c9, 0x006e, 0xffff, "F23", F23), - DOM_CODE(0x070073, 0x00c2, 0x00ca, 0x0076, 0xffff, "F24", F24), - DOM_CODE(0x070074, 0x0086, 0x008e, 0x0000, 0xffff, "Open", OPEN), - DOM_CODE(0x070075, 0x008a, 0x0092, 0xe03b, 0xffff, "Help", HELP), - DOM_CODE(0x070077, 0x0084, 0x008c, 0x0000, 0xffff, "Select", SELECT), - DOM_CODE(0x070079, 0x0081, 0x0089, 0x0000, 0xffff, "Again", AGAIN), - DOM_CODE(0x07007a, 0x0083, 0x008b, 0xe008, 0xffff, "Undo", UNDO), - DOM_CODE(0x07007b, 0x0089, 0x0091, 0xe017, 0xffff, "Cut", CUT), - DOM_CODE(0x07007c, 0x0085, 0x008d, 0xe018, 0xffff, "Copy", COPY), - DOM_CODE(0x07007d, 0x0087, 0x008f, 0xe00a, 0xffff, "Paste", PASTE), - DOM_CODE(0x07007e, 0x0088, 0x0090, 0x0000, 0xffff, "Find", FIND), - DOM_CODE(0x07007f, 0x0071, 0x0079, 0xe020, 0x004a, "AudioVolumeMute", VOLUME_MUTE), - DOM_CODE(0x070080, 0x0073, 0x007b, 0xe030, 0x0048, "AudioVolumeUp", VOLUME_UP), - DOM_CODE(0x070081, 0x0072, 0x007a, 0xe02e, 0x0049, "AudioVolumeDown", VOLUME_DOWN), - DOM_CODE(0x070085, 0x0079, 0x0081, 0x007e, 0x005f, "NumpadComma", NUMPAD_COMMA), - DOM_CODE(0x070087, 0x0059, 0x0061, 0x0073, 0x005e, "IntlRo", INTL_RO), - DOM_CODE(0x070088, 0x005d, 0x0065, 0x0070, 0xffff, "KanaMode", KANA_MODE), - DOM_CODE(0x070089, 0x007c, 0x0084, 0x007d, 0x005d, "IntlYen", INTL_YEN), - DOM_CODE(0x07008a, 0x005c, 0x0064, 0x0079, 0xffff, "Convert", CONVERT), - DOM_CODE(0x07008b, 0x005e, 0x0066, 0x007b, 0xffff, "NonConvert", NON_CONVERT), - DOM_CODE(0x070090, 0x007a, 0x0082, 0x0072, 0x0068, "Lang1", LANG1), - DOM_CODE(0x070091, 0x007b, 0x0083, 0x0071, 0x0066, "Lang2", LANG2), - DOM_CODE(0x070092, 0x005a, 0x0062, 0x0078, 0xffff, "Lang3", LANG3), - DOM_CODE(0x070093, 0x005b, 0x0063, 0x0077, 0xffff, "Lang4", LANG4), - DOM_CODE(0x070094, 0x0055, 0x005d, 0x0000, 0xffff, "Lang5", LANG5), - DOM_CODE(0x07009b, 0x0000, 0x0000, 0x0000, 0xffff, "Abort", ABORT), - DOM_CODE(0x0700a3, 0x0000, 0x0000, 0x0000, 0xffff, "Props", PROPS), - DOM_CODE(0x0700b6, 0x00b3, 0x00bb, 0x0000, 0xffff, "NumpadParenLeft", NUMPAD_PAREN_LEFT), - DOM_CODE(0x0700b7, 0x00b4, 0x00bc, 0x0000, 0xffff, "NumpadParenRight", NUMPAD_PAREN_RIGHT), - DOM_CODE(0x0700bb, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadBackspace", NUMPAD_BACKSPACE), - DOM_CODE(0x0700d0, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryStore", NUMPAD_MEMORY_STORE), - DOM_CODE(0x0700d1, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryRecall", NUMPAD_MEMORY_RECALL), - DOM_CODE(0x0700d2, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryClear", NUMPAD_MEMORY_CLEAR), - DOM_CODE(0x0700d3, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryAdd", NUMPAD_MEMORY_ADD), - DOM_CODE(0x0700d4, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemorySubtract", NUMPAD_MEMORY_SUBTRACT), - DOM_CODE(0x0700d7, 0x0076, 0x007e, 0x0000, 0xffff, NULL, NUMPAD_SIGN_CHANGE), - DOM_CODE(0x0700d8, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadClear", NUMPAD_CLEAR), - DOM_CODE(0x0700d9, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadClearEntry", NUMPAD_CLEAR_ENTRY), - DOM_CODE(0x0700e0, 0x001d, 0x0025, 0x001d, 0x003b, "ControlLeft", CONTROL_LEFT), - DOM_CODE(0x0700e1, 0x002a, 0x0032, 0x002a, 0x0038, "ShiftLeft", SHIFT_LEFT), - DOM_CODE(0x0700e2, 0x0038, 0x0040, 0x0038, 0x003a, "AltLeft", ALT_LEFT), - DOM_CODE(0x0700e3, 0x007d, 0x0085, 0xe05b, 0x0037, "MetaLeft", META_LEFT), - DOM_CODE(0x0700e4, 0x0061, 0x0069, 0xe01d, 0x003e, "ControlRight", CONTROL_RIGHT), - DOM_CODE(0x0700e5, 0x0036, 0x003e, 0x0036, 0x003c, "ShiftRight", SHIFT_RIGHT), - DOM_CODE(0x0700e6, 0x0064, 0x006c, 0xe038, 0x003d, "AltRight", ALT_RIGHT), - DOM_CODE(0x0700e7, 0x007e, 0x0086, 0xe05c, 0x0036, "MetaRight", META_RIGHT), - DOM_CODE(0x0c0060, 0x0166, 0x016e, 0x0000, 0xffff, NULL, INFO), - DOM_CODE(0x0c0061, 0x0172, 0x017a, 0x0000, 0xffff, NULL, CLOSED_CAPTION_TOGGLE), - DOM_CODE(0x0c006f, 0x00e1, 0x00e9, 0x0000, 0xffff, "BrightnessUp", BRIGHTNESS_UP), - DOM_CODE(0x0c0070, 0x00e0, 0x00e8, 0x0000, 0xffff, "BrightnessDown", BRIGHTNESS_DOWN), - DOM_CODE(0x0c0072, 0x01af, 0x01b7, 0x0000, 0xffff, NULL, BRIGHTNESS_TOGGLE), - DOM_CODE(0x0c0073, 0x0250, 0x0258, 0x0000, 0xffff, NULL, BRIGHTNESS_MINIMIUM), - DOM_CODE(0x0c0074, 0x0251, 0x0259, 0x0000, 0xffff, NULL, BRIGHTNESS_MAXIMUM), - DOM_CODE(0x0c0075, 0x00f4, 0x00fc, 0x0000, 0xffff, NULL, BRIGHTNESS_AUTO), - DOM_CODE(0x0c0079, 0x00e6, 0x00ee, 0x0000, 0xffff, NULL, KBD_ILLUM_UP), - DOM_CODE(0x0c007a, 0x00e5, 0x00ed, 0x0000, 0xffff, NULL, KBD_ILLUM_DOWN), - DOM_CODE(0x0c0083, 0x0195, 0x019d, 0x0000, 0xffff, NULL, MEDIA_LAST), - DOM_CODE(0x0c008c, 0x00a9, 0x00b1, 0x0000, 0xffff, NULL, LAUNCH_PHONE), - DOM_CODE(0x0c008d, 0x016a, 0x0172, 0x0000, 0xffff, NULL, PROGRAM_GUIDE), - DOM_CODE(0x0c0094, 0x00ae, 0x00b6, 0x0000, 0xffff, NULL, EXIT), - DOM_CODE(0x0c009c, 0x019a, 0x01a2, 0x0000, 0xffff, NULL, CHANNEL_UP), - DOM_CODE(0x0c009d, 0x019b, 0x01a3, 0x0000, 0xffff, NULL, CHANNEL_DOWN), - DOM_CODE(0x0c00b0, 0x00cf, 0x00d7, 0x0000, 0xffff, "MediaPlay", MEDIA_PLAY), - DOM_CODE(0x0c00b1, 0x00c9, 0x00d1, 0x0000, 0xffff, "MediaPause", MEDIA_PAUSE), - DOM_CODE(0x0c00b2, 0x00a7, 0x00af, 0x0000, 0xffff, "MediaRecord", MEDIA_RECORD), - DOM_CODE(0x0c00b3, 0x00d0, 0x00d8, 0x0000, 0xffff, "MediaFastForward", MEDIA_FAST_FORWARD), - DOM_CODE(0x0c00b4, 0x00a8, 0x00b0, 0x0000, 0xffff, "MediaRewind", MEDIA_REWIND), - DOM_CODE(0x0c00b5, 0x00a3, 0x00ab, 0xe019, 0xffff, "MediaTrackNext", MEDIA_TRACK_NEXT), - DOM_CODE(0x0c00b6, 0x00a5, 0x00ad, 0xe010, 0xffff, "MediaTrackPrevious", MEDIA_TRACK_PREVIOUS), - DOM_CODE(0x0c00b7, 0x00a6, 0x00ae, 0xe024, 0xffff, "MediaStop", MEDIA_STOP), - DOM_CODE(0x0c00b8, 0x00a1, 0x00a9, 0xe02c, 0xffff, "Eject", EJECT), - DOM_CODE(0x0c00cd, 0x00a4, 0x00ac, 0xe022, 0xffff, "MediaPlayPause", MEDIA_PLAY_PAUSE), - DOM_CODE(0x0c00cf, 0x0246, 0x024e, 0x0000, 0xffff, NULL, SPEECH_INPUT_TOGGLE), - DOM_CODE(0x0c00e5, 0x00d1, 0x00d9, 0x0000, 0xffff, NULL, BASS_BOOST), - DOM_CODE(0x0c0183, 0x00ab, 0x00b3, 0xe06d, 0xffff, "MediaSelect", MEDIA_SELECT), - DOM_CODE(0x0c0184, 0x01a5, 0x01ad, 0x0000, 0xffff, NULL, LAUNCH_WORD_PROCESSOR), - DOM_CODE(0x0c0186, 0x01a7, 0x01af, 0x0000, 0xffff, NULL, LAUNCH_SPREADSHEET), - DOM_CODE(0x0c018a, 0x009b, 0x00a3, 0xe06c, 0xffff, "LaunchMail", LAUNCH_MAIL), - DOM_CODE(0x0c018d, 0x01ad, 0x01b5, 0x0000, 0xffff, NULL, LAUNCH_CONTACTS), - DOM_CODE(0x0c018e, 0x018d, 0x0195, 0x0000, 0xffff, NULL, LAUNCH_CALENDAR), - DOM_CODE(0x0c0192, 0x008c, 0x0094, 0xe021, 0xffff, "LaunchApp2", LAUNCH_APP2), - DOM_CODE(0x0c0194, 0x0090, 0x0098, 0xe06b, 0xffff, "LaunchApp1", LAUNCH_APP1), - DOM_CODE(0x0c0196, 0x0096, 0x009e, 0x0000, 0xffff, NULL, LAUNCH_INTERNET_BROWSER), - DOM_CODE(0x0c019C, 0x01b1, 0x01b9, 0x0000, 0xffff, NULL, LOG_OFF), - DOM_CODE(0x0c019e, 0x0098, 0x00a0, 0x0000, 0xffff, NULL, LOCK_SCREEN), - DOM_CODE(0x0c019f, 0x0243, 0x024b, 0x0000, 0xffff, "LaunchControlPanel", LAUNCH_CONTROL_PANEL), - DOM_CODE(0x0c01a2, 0x0244, 0x024c, 0x0000, 0xffff, "SelectTask", SELECT_TASK), - DOM_CODE(0x0c01a7, 0x00eb, 0x00f3, 0x0000, 0xffff, NULL, LAUNCH_DOCUMENTS), - DOM_CODE(0x0c01ab, 0x01b0, 0x01b8, 0x0000, 0xffff, NULL, SPELL_CHECK), - DOM_CODE(0x0c01ae, 0x0176, 0x017e, 0x0000, 0xffff, NULL, LAUNCH_KEYBOARD_LAYOUT), - DOM_CODE(0x0c01b1, 0x0245, 0x024d, 0x0000, 0xffff, "LaunchScreenSaver", LAUNCH_SCREEN_SAVER), - DOM_CODE(0x0c01cb, 0x0247, 0x024f, 0x0000, 0xffff, "LaunchAssistant", LAUNCH_ASSISTANT), - DOM_CODE(0x0c01b7, 0x0188, 0x0190, 0x0000, 0xffff, NULL, LAUNCH_AUDIO_BROWSER), - DOM_CODE(0x0c0201, 0x00b5, 0x00bd, 0x0000, 0xffff, NULL, NEW), - DOM_CODE(0x0c0203, 0x00ce, 0x00d6, 0x0000, 0xffff, NULL, CLOSE), - DOM_CODE(0x0c0207, 0x00ea, 0x00f2, 0x0000, 0xffff, NULL, SAVE), - DOM_CODE(0x0c0208, 0x00d2, 0x00da, 0x0000, 0xffff, NULL, PRINT), - DOM_CODE(0x0c0221, 0x00d9, 0x00e1, 0xe065, 0xffff, "BrowserSearch", BROWSER_SEARCH), - DOM_CODE(0x0c0223, 0x00ac, 0x00b4, 0xe032, 0xffff, "BrowserHome", BROWSER_HOME), - DOM_CODE(0x0c0224, 0x009e, 0x00a6, 0xe06a, 0xffff, "BrowserBack", BROWSER_BACK), - DOM_CODE(0x0c0225, 0x009f, 0x00a7, 0xe069, 0xffff, "BrowserForward", BROWSER_FORWARD), - DOM_CODE(0x0c0226, 0x0080, 0x0088, 0xe068, 0xffff, "BrowserStop", BROWSER_STOP), - DOM_CODE(0x0c0227, 0x00ad, 0x00b5, 0xe067, 0xffff, "BrowserRefresh", BROWSER_REFRESH), - DOM_CODE(0x0c022a, 0x009c, 0x00a4, 0xe066, 0xffff, "BrowserFavorites", BROWSER_FAVORITES), - DOM_CODE(0x0c022d, 0x01a2, 0x01aa, 0x0000, 0xffff, NULL, ZOOM_IN), - DOM_CODE(0x0c022e, 0x01a3, 0x01ab, 0x0000, 0xffff, NULL, ZOOM_OUT), - DOM_CODE(0x0c0232, 0x0174, 0x017c, 0x0000, 0xffff, "ZoomToggle", ZOOM_TOGGLE), - DOM_CODE(0x0c0279, 0x00b6, 0x00be, 0x0000, 0xffff, NULL, REDO), - DOM_CODE(0x0c0289, 0x00e8, 0x00f0, 0x0000, 0xffff, "MailReply", MAIL_REPLY), - DOM_CODE(0x0c028b, 0x00e9, 0x00f1, 0x0000, 0xffff, "MailForward", MAIL_FORWARD), - DOM_CODE(0x0c028c, 0x00e7, 0x00ef, 0x0000, 0xffff, "MailSend", MAIL_SEND), - DOM_CODE(0x0c029d, 0x0248, 0x0250, 0x0000, 0xffff, "KeyboardLayoutSelect", KEYBOARD_LAYOUT_SELECT), - DOM_CODE(0x0c029f, 0x0078, 0x0080, 0x0000, 0xffff, "ShowAllWindows", SHOW_ALL_WINDOWS), +DOM_CODE_DECLARATION { + DOM_CODE(0x000000, 0x0000, 0x0000, 0x0000, 0xffff, NULL, NONE), + DOM_CODE(0x000010, 0x0000, 0x0000, 0x0000, 0xffff, "Hyper", HYPER), + DOM_CODE(0x000011, 0x0000, 0x0000, 0x0000, 0xffff, "Super", SUPER), + DOM_CODE(0x000012, 0x0000, 0x0000, 0x0000, 0xffff, "Fn", FN), + DOM_CODE(0x000013, 0x0000, 0x0000, 0x0000, 0xffff, "FnLock", FN_LOCK), + DOM_CODE(0x000014, 0x0000, 0x0000, 0x0000, 0xffff, "Suspend", SUSPEND), + DOM_CODE(0x000015, 0x0000, 0x0000, 0x0000, 0xffff, "Resume", RESUME), + DOM_CODE(0x000016, 0x0000, 0x0000, 0x0000, 0xffff, "Turbo", TURBO), + DOM_CODE(0x000017, 0x0279, 0x0281, 0x0000, 0xffff, "PrivacyScreenToggle", PRIVACY_SCREEN_TOGGLE), + DOM_CODE(0x010082, 0x008e, 0x0096, 0xe05f, 0xffff, "Sleep", SLEEP), + DOM_CODE(0x010083, 0x008f, 0x0097, 0xe063, 0xffff, "WakeUp", WAKE_UP), + DOM_CODE(0x0100b5, 0x00e3, 0x00eb, 0x0000, 0xffff, "DisplayToggleIntExt", DISPLAY_TOGGLE_INT_EXT), + DOM_CODE(0x070000, 0x0000, 0x0000, 0x0000, 0xffff, NULL, USB_RESERVED), + DOM_CODE(0x070001, 0x0000, 0x0000, 0x00ff, 0xffff, NULL, USB_ERROR_ROLL_OVER), + DOM_CODE(0x070002, 0x0000, 0x0000, 0x00fc, 0xffff, NULL, USB_POST_FAIL), + DOM_CODE(0x070003, 0x0000, 0x0000, 0x0000, 0xffff, NULL, USB_ERROR_UNDEFINED), + DOM_CODE(0x070004, 0x001e, 0x0026, 0x001e, 0x0000, "KeyA", US_A), + DOM_CODE(0x070005, 0x0030, 0x0038, 0x0030, 0x000b, "KeyB", US_B), + DOM_CODE(0x070006, 0x002e, 0x0036, 0x002e, 0x0008, "KeyC", US_C), + DOM_CODE(0x070007, 0x0020, 0x0028, 0x0020, 0x0002, "KeyD", US_D), + DOM_CODE(0x070008, 0x0012, 0x001a, 0x0012, 0x000e, "KeyE", US_E), + DOM_CODE(0x070009, 0x0021, 0x0029, 0x0021, 0x0003, "KeyF", US_F), + DOM_CODE(0x07000a, 0x0022, 0x002a, 0x0022, 0x0005, "KeyG", US_G), + DOM_CODE(0x07000b, 0x0023, 0x002b, 0x0023, 0x0004, "KeyH", US_H), + DOM_CODE(0x07000c, 0x0017, 0x001f, 0x0017, 0x0022, "KeyI", US_I), + DOM_CODE(0x07000d, 0x0024, 0x002c, 0x0024, 0x0026, "KeyJ", US_J), + DOM_CODE(0x07000e, 0x0025, 0x002d, 0x0025, 0x0028, "KeyK", US_K), + DOM_CODE(0x07000f, 0x0026, 0x002e, 0x0026, 0x0025, "KeyL", US_L), + DOM_CODE(0x070010, 0x0032, 0x003a, 0x0032, 0x002e, "KeyM", US_M), + DOM_CODE(0x070011, 0x0031, 0x0039, 0x0031, 0x002d, "KeyN", US_N), + DOM_CODE(0x070012, 0x0018, 0x0020, 0x0018, 0x001f, "KeyO", US_O), + DOM_CODE(0x070013, 0x0019, 0x0021, 0x0019, 0x0023, "KeyP", US_P), + DOM_CODE(0x070014, 0x0010, 0x0018, 0x0010, 0x000c, "KeyQ", US_Q), + DOM_CODE(0x070015, 0x0013, 0x001b, 0x0013, 0x000f, "KeyR", US_R), + DOM_CODE(0x070016, 0x001f, 0x0027, 0x001f, 0x0001, "KeyS", US_S), + DOM_CODE(0x070017, 0x0014, 0x001c, 0x0014, 0x0011, "KeyT", US_T), + DOM_CODE(0x070018, 0x0016, 0x001e, 0x0016, 0x0020, "KeyU", US_U), + DOM_CODE(0x070019, 0x002f, 0x0037, 0x002f, 0x0009, "KeyV", US_V), + DOM_CODE(0x07001a, 0x0011, 0x0019, 0x0011, 0x000d, "KeyW", US_W), + DOM_CODE(0x07001b, 0x002d, 0x0035, 0x002d, 0x0007, "KeyX", US_X), + DOM_CODE(0x07001c, 0x0015, 0x001d, 0x0015, 0x0010, "KeyY", US_Y), + DOM_CODE(0x07001d, 0x002c, 0x0034, 0x002c, 0x0006, "KeyZ", US_Z), + DOM_CODE(0x07001e, 0x0002, 0x000a, 0x0002, 0x0012, "Digit1", DIGIT1), + DOM_CODE(0x07001f, 0x0003, 0x000b, 0x0003, 0x0013, "Digit2", DIGIT2), + DOM_CODE(0x070020, 0x0004, 0x000c, 0x0004, 0x0014, "Digit3", DIGIT3), + DOM_CODE(0x070021, 0x0005, 0x000d, 0x0005, 0x0015, "Digit4", DIGIT4), + DOM_CODE(0x070022, 0x0006, 0x000e, 0x0006, 0x0017, "Digit5", DIGIT5), + DOM_CODE(0x070023, 0x0007, 0x000f, 0x0007, 0x0016, "Digit6", DIGIT6), + DOM_CODE(0x070024, 0x0008, 0x0010, 0x0008, 0x001a, "Digit7", DIGIT7), + DOM_CODE(0x070025, 0x0009, 0x0011, 0x0009, 0x001c, "Digit8", DIGIT8), + DOM_CODE(0x070026, 0x000a, 0x0012, 0x000a, 0x0019, "Digit9", DIGIT9), + DOM_CODE(0x070027, 0x000b, 0x0013, 0x000b, 0x001d, "Digit0", DIGIT0), + DOM_CODE(0x070028, 0x001c, 0x0024, 0x001c, 0x0024, "Enter", ENTER), + DOM_CODE(0x070029, 0x0001, 0x0009, 0x0001, 0x0035, "Escape", ESCAPE), + DOM_CODE(0x07002a, 0x000e, 0x0016, 0x000e, 0x0033, "Backspace", BACKSPACE), + DOM_CODE(0x07002b, 0x000f, 0x0017, 0x000f, 0x0030, "Tab", TAB), + DOM_CODE(0x07002c, 0x0039, 0x0041, 0x0039, 0x0031, "Space", SPACE), + DOM_CODE(0x07002d, 0x000c, 0x0014, 0x000c, 0x001b, "Minus", MINUS), + DOM_CODE(0x07002e, 0x000d, 0x0015, 0x000d, 0x0018, "Equal", EQUAL), + DOM_CODE(0x07002f, 0x001a, 0x0022, 0x001a, 0x0021, "BracketLeft", BRACKET_LEFT), + DOM_CODE(0x070030, 0x001b, 0x0023, 0x001b, 0x001e, "BracketRight", BRACKET_RIGHT), + DOM_CODE(0x070031, 0x002b, 0x0033, 0x002b, 0x002a, "Backslash", BACKSLASH), + DOM_CODE(0x070033, 0x0027, 0x002f, 0x0027, 0x0029, "Semicolon", SEMICOLON), + DOM_CODE(0x070034, 0x0028, 0x0030, 0x0028, 0x0027, "Quote", QUOTE), + DOM_CODE(0x070035, 0x0029, 0x0031, 0x0029, 0x0032, "Backquote", BACKQUOTE), + DOM_CODE(0x070036, 0x0033, 0x003b, 0x0033, 0x002b, "Comma", COMMA), + DOM_CODE(0x070037, 0x0034, 0x003c, 0x0034, 0x002f, "Period", PERIOD), + DOM_CODE(0x070038, 0x0035, 0x003d, 0x0035, 0x002c, "Slash", SLASH), + DOM_CODE(0x070039, 0x003a, 0x0042, 0x003a, 0x0039, "CapsLock", CAPS_LOCK), + DOM_CODE(0x07003a, 0x003b, 0x0043, 0x003b, 0x007a, "F1", F1), + DOM_CODE(0x07003b, 0x003c, 0x0044, 0x003c, 0x0078, "F2", F2), + DOM_CODE(0x07003c, 0x003d, 0x0045, 0x003d, 0x0063, "F3", F3), + DOM_CODE(0x07003d, 0x003e, 0x0046, 0x003e, 0x0076, "F4", F4), + DOM_CODE(0x07003e, 0x003f, 0x0047, 0x003f, 0x0060, "F5", F5), + DOM_CODE(0x07003f, 0x0040, 0x0048, 0x0040, 0x0061, "F6", F6), + DOM_CODE(0x070040, 0x0041, 0x0049, 0x0041, 0x0062, "F7", F7), + DOM_CODE(0x070041, 0x0042, 0x004a, 0x0042, 0x0064, "F8", F8), + DOM_CODE(0x070042, 0x0043, 0x004b, 0x0043, 0x0065, "F9", F9), + DOM_CODE(0x070043, 0x0044, 0x004c, 0x0044, 0x006d, "F10", F10), + DOM_CODE(0x070044, 0x0057, 0x005f, 0x0057, 0x0067, "F11", F11), + DOM_CODE(0x070045, 0x0058, 0x0060, 0x0058, 0x006f, "F12", F12), + DOM_CODE(0x070046, 0x0063, 0x006b, 0xe037, 0xffff, "PrintScreen", PRINT_SCREEN), + DOM_CODE(0x070047, 0x0046, 0x004e, 0x0046, 0xffff, "ScrollLock", SCROLL_LOCK), + DOM_CODE(0x070048, 0x0077, 0x007f, 0x0045, 0xffff, "Pause", PAUSE), + DOM_CODE(0x070049, 0x006e, 0x0076, 0xe052, 0x0072, "Insert", INSERT), + DOM_CODE(0x07004a, 0x0066, 0x006e, 0xe047, 0x0073, "Home", HOME), + DOM_CODE(0x07004b, 0x0068, 0x0070, 0xe049, 0x0074, "PageUp", PAGE_UP), + DOM_CODE(0x07004c, 0x006f, 0x0077, 0xe053, 0x0075, "Delete", DEL), + DOM_CODE(0x07004d, 0x006b, 0x0073, 0xe04f, 0x0077, "End", END), + DOM_CODE(0x07004e, 0x006d, 0x0075, 0xe051, 0x0079, "PageDown", PAGE_DOWN), + DOM_CODE(0x07004f, 0x006a, 0x0072, 0xe04d, 0x007c, "ArrowRight", ARROW_RIGHT), + DOM_CODE(0x070050, 0x0069, 0x0071, 0xe04b, 0x007b, "ArrowLeft", ARROW_LEFT), + DOM_CODE(0x070051, 0x006c, 0x0074, 0xe050, 0x007d, "ArrowDown", ARROW_DOWN), + DOM_CODE(0x070052, 0x0067, 0x006f, 0xe048, 0x007e, "ArrowUp", ARROW_UP), + DOM_CODE(0x070053, 0x0045, 0x004d, 0xe045, 0x0047, "NumLock", NUM_LOCK), + DOM_CODE(0x070054, 0x0062, 0x006a, 0xe035, 0x004b, "NumpadDivide", NUMPAD_DIVIDE), + DOM_CODE(0x070055, 0x0037, 0x003f, 0x0037, 0x0043, "NumpadMultiply", NUMPAD_MULTIPLY), + DOM_CODE(0x070056, 0x004a, 0x0052, 0x004a, 0x004e, "NumpadSubtract", NUMPAD_SUBTRACT), + DOM_CODE(0x070057, 0x004e, 0x0056, 0x004e, 0x0045, "NumpadAdd", NUMPAD_ADD), + DOM_CODE(0x070058, 0x0060, 0x0068, 0xe01c, 0x004c, "NumpadEnter", NUMPAD_ENTER), + DOM_CODE(0x070059, 0x004f, 0x0057, 0x004f, 0x0053, "Numpad1", NUMPAD1), + DOM_CODE(0x07005a, 0x0050, 0x0058, 0x0050, 0x0054, "Numpad2", NUMPAD2), + DOM_CODE(0x07005b, 0x0051, 0x0059, 0x0051, 0x0055, "Numpad3", NUMPAD3), + DOM_CODE(0x07005c, 0x004b, 0x0053, 0x004b, 0x0056, "Numpad4", NUMPAD4), + DOM_CODE(0x07005d, 0x004c, 0x0054, 0x004c, 0x0057, "Numpad5", NUMPAD5), + DOM_CODE(0x07005e, 0x004d, 0x0055, 0x004d, 0x0058, "Numpad6", NUMPAD6), + DOM_CODE(0x07005f, 0x0047, 0x004f, 0x0047, 0x0059, "Numpad7", NUMPAD7), + DOM_CODE(0x070060, 0x0048, 0x0050, 0x0048, 0x005b, "Numpad8", NUMPAD8), + DOM_CODE(0x070061, 0x0049, 0x0051, 0x0049, 0x005c, "Numpad9", NUMPAD9), + DOM_CODE(0x070062, 0x0052, 0x005a, 0x0052, 0x0052, "Numpad0", NUMPAD0), + DOM_CODE(0x070063, 0x0053, 0x005b, 0x0053, 0x0041, "NumpadDecimal", NUMPAD_DECIMAL), + DOM_CODE(0x070064, 0x0056, 0x005e, 0x0056, 0x000a, "IntlBackslash", INTL_BACKSLASH), + DOM_CODE(0x070065, 0x007f, 0x0087, 0xe05d, 0x006e, "ContextMenu", CONTEXT_MENU), + DOM_CODE(0x070066, 0x0074, 0x007c, 0xe05e, 0xffff, "Power", POWER), + DOM_CODE(0x070067, 0x0075, 0x007d, 0x0059, 0x0051, "NumpadEqual", NUMPAD_EQUAL), + DOM_CODE(0x070068, 0x00b7, 0x00bf, 0x0064, 0x0069, "F13", F13), + DOM_CODE(0x070069, 0x00b8, 0x00c0, 0x0065, 0x006b, "F14", F14), + DOM_CODE(0x07006a, 0x00b9, 0x00c1, 0x0066, 0x0071, "F15", F15), + DOM_CODE(0x07006b, 0x00ba, 0x00c2, 0x0067, 0x006a, "F16", F16), + DOM_CODE(0x07006c, 0x00bb, 0x00c3, 0x0068, 0x0040, "F17", F17), + DOM_CODE(0x07006d, 0x00bc, 0x00c4, 0x0069, 0x004f, "F18", F18), + DOM_CODE(0x07006e, 0x00bd, 0x00c5, 0x006a, 0x0050, "F19", F19), + DOM_CODE(0x07006f, 0x00be, 0x00c6, 0x006b, 0x005a, "F20", F20), + DOM_CODE(0x070070, 0x00bf, 0x00c7, 0x006c, 0xffff, "F21", F21), + DOM_CODE(0x070071, 0x00c0, 0x00c8, 0x006d, 0xffff, "F22", F22), + DOM_CODE(0x070072, 0x00c1, 0x00c9, 0x006e, 0xffff, "F23", F23), + DOM_CODE(0x070073, 0x00c2, 0x00ca, 0x0076, 0xffff, "F24", F24), + DOM_CODE(0x070074, 0x0086, 0x008e, 0x0000, 0xffff, "Open", OPEN), + DOM_CODE(0x070075, 0x008a, 0x0092, 0xe03b, 0xffff, "Help", HELP), + DOM_CODE(0x070077, 0x0084, 0x008c, 0x0000, 0xffff, "Select", SELECT), + DOM_CODE(0x070079, 0x0081, 0x0089, 0x0000, 0xffff, "Again", AGAIN), + DOM_CODE(0x07007a, 0x0083, 0x008b, 0xe008, 0xffff, "Undo", UNDO), + DOM_CODE(0x07007b, 0x0089, 0x0091, 0xe017, 0xffff, "Cut", CUT), + DOM_CODE(0x07007c, 0x0085, 0x008d, 0xe018, 0xffff, "Copy", COPY), + DOM_CODE(0x07007d, 0x0087, 0x008f, 0xe00a, 0xffff, "Paste", PASTE), + DOM_CODE(0x07007e, 0x0088, 0x0090, 0x0000, 0xffff, "Find", FIND), + DOM_CODE(0x07007f, 0x0071, 0x0079, 0xe020, 0x004a, "AudioVolumeMute", VOLUME_MUTE), + DOM_CODE(0x070080, 0x0073, 0x007b, 0xe030, 0x0048, "AudioVolumeUp", VOLUME_UP), + DOM_CODE(0x070081, 0x0072, 0x007a, 0xe02e, 0x0049, "AudioVolumeDown", VOLUME_DOWN), + DOM_CODE(0x070085, 0x0079, 0x0081, 0x007e, 0x005f, "NumpadComma", NUMPAD_COMMA), + DOM_CODE(0x070087, 0x0059, 0x0061, 0x0073, 0x005e, "IntlRo", INTL_RO), + DOM_CODE(0x070088, 0x005d, 0x0065, 0x0070, 0xffff, "KanaMode", KANA_MODE), + DOM_CODE(0x070089, 0x007c, 0x0084, 0x007d, 0x005d, "IntlYen", INTL_YEN), + DOM_CODE(0x07008a, 0x005c, 0x0064, 0x0079, 0xffff, "Convert", CONVERT), + DOM_CODE(0x07008b, 0x005e, 0x0066, 0x007b, 0xffff, "NonConvert", NON_CONVERT), + DOM_CODE(0x070090, 0x007a, 0x0082, 0x0072, 0x0068, "Lang1", LANG1), + DOM_CODE(0x070091, 0x007b, 0x0083, 0x0071, 0x0066, "Lang2", LANG2), + DOM_CODE(0x070092, 0x005a, 0x0062, 0x0078, 0xffff, "Lang3", LANG3), + DOM_CODE(0x070093, 0x005b, 0x0063, 0x0077, 0xffff, "Lang4", LANG4), + DOM_CODE(0x070094, 0x0055, 0x005d, 0x0000, 0xffff, "Lang5", LANG5), + DOM_CODE(0x07009b, 0x0000, 0x0000, 0x0000, 0xffff, "Abort", ABORT), + DOM_CODE(0x0700a3, 0x0000, 0x0000, 0x0000, 0xffff, "Props", PROPS), + DOM_CODE(0x0700b6, 0x00b3, 0x00bb, 0x0000, 0xffff, "NumpadParenLeft", NUMPAD_PAREN_LEFT), + DOM_CODE(0x0700b7, 0x00b4, 0x00bc, 0x0000, 0xffff, "NumpadParenRight", NUMPAD_PAREN_RIGHT), + DOM_CODE(0x0700bb, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadBackspace", NUMPAD_BACKSPACE), + DOM_CODE(0x0700d0, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryStore", NUMPAD_MEMORY_STORE), + DOM_CODE(0x0700d1, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryRecall", NUMPAD_MEMORY_RECALL), + DOM_CODE(0x0700d2, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryClear", NUMPAD_MEMORY_CLEAR), + DOM_CODE(0x0700d3, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemoryAdd", NUMPAD_MEMORY_ADD), + DOM_CODE(0x0700d4, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadMemorySubtract", NUMPAD_MEMORY_SUBTRACT), + DOM_CODE(0x0700d7, 0x0076, 0x007e, 0x0000, 0xffff, NULL, NUMPAD_SIGN_CHANGE), + DOM_CODE(0x0700d8, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadClear", NUMPAD_CLEAR), + DOM_CODE(0x0700d9, 0x0000, 0x0000, 0x0000, 0xffff, "NumpadClearEntry", NUMPAD_CLEAR_ENTRY), + DOM_CODE(0x0700e0, 0x001d, 0x0025, 0x001d, 0x003b, "ControlLeft", CONTROL_LEFT), + DOM_CODE(0x0700e1, 0x002a, 0x0032, 0x002a, 0x0038, "ShiftLeft", SHIFT_LEFT), + DOM_CODE(0x0700e2, 0x0038, 0x0040, 0x0038, 0x003a, "AltLeft", ALT_LEFT), + DOM_CODE(0x0700e3, 0x007d, 0x0085, 0xe05b, 0x0037, "MetaLeft", META_LEFT), + DOM_CODE(0x0700e4, 0x0061, 0x0069, 0xe01d, 0x003e, "ControlRight", CONTROL_RIGHT), + DOM_CODE(0x0700e5, 0x0036, 0x003e, 0x0036, 0x003c, "ShiftRight", SHIFT_RIGHT), + DOM_CODE(0x0700e6, 0x0064, 0x006c, 0xe038, 0x003d, "AltRight", ALT_RIGHT), + DOM_CODE(0x0700e7, 0x007e, 0x0086, 0xe05c, 0x0036, "MetaRight", META_RIGHT), + DOM_CODE(0x0c0060, 0x0166, 0x016e, 0x0000, 0xffff, NULL, INFO), + DOM_CODE(0x0c0061, 0x0172, 0x017a, 0x0000, 0xffff, NULL, CLOSED_CAPTION_TOGGLE), + DOM_CODE(0x0c006f, 0x00e1, 0x00e9, 0x0000, 0xffff, "BrightnessUp", BRIGHTNESS_UP), + DOM_CODE(0x0c0070, 0x00e0, 0x00e8, 0x0000, 0xffff, "BrightnessDown", BRIGHTNESS_DOWN), + DOM_CODE(0x0c0072, 0x01af, 0x01b7, 0x0000, 0xffff, NULL, BRIGHTNESS_TOGGLE), + DOM_CODE(0x0c0073, 0x0250, 0x0258, 0x0000, 0xffff, NULL, BRIGHTNESS_MINIMIUM), + DOM_CODE(0x0c0074, 0x0251, 0x0259, 0x0000, 0xffff, NULL, BRIGHTNESS_MAXIMUM), + DOM_CODE(0x0c0075, 0x00f4, 0x00fc, 0x0000, 0xffff, NULL, BRIGHTNESS_AUTO), + DOM_CODE(0x0c0079, 0x00e6, 0x00ee, 0x0000, 0xffff, NULL, KBD_ILLUM_UP), + DOM_CODE(0x0c007a, 0x00e5, 0x00ed, 0x0000, 0xffff, NULL, KBD_ILLUM_DOWN), + DOM_CODE(0x0c0083, 0x0195, 0x019d, 0x0000, 0xffff, NULL, MEDIA_LAST), + DOM_CODE(0x0c008c, 0x00a9, 0x00b1, 0x0000, 0xffff, NULL, LAUNCH_PHONE), + DOM_CODE(0x0c008d, 0x016a, 0x0172, 0x0000, 0xffff, NULL, PROGRAM_GUIDE), + DOM_CODE(0x0c0094, 0x00ae, 0x00b6, 0x0000, 0xffff, NULL, EXIT), + DOM_CODE(0x0c009c, 0x019a, 0x01a2, 0x0000, 0xffff, NULL, CHANNEL_UP), + DOM_CODE(0x0c009d, 0x019b, 0x01a3, 0x0000, 0xffff, NULL, CHANNEL_DOWN), + DOM_CODE(0x0c00b0, 0x00cf, 0x00d7, 0x0000, 0xffff, "MediaPlay", MEDIA_PLAY), + DOM_CODE(0x0c00b1, 0x00c9, 0x00d1, 0x0000, 0xffff, "MediaPause", MEDIA_PAUSE), + DOM_CODE(0x0c00b2, 0x00a7, 0x00af, 0x0000, 0xffff, "MediaRecord", MEDIA_RECORD), + DOM_CODE(0x0c00b3, 0x00d0, 0x00d8, 0x0000, 0xffff, "MediaFastForward", MEDIA_FAST_FORWARD), + DOM_CODE(0x0c00b4, 0x00a8, 0x00b0, 0x0000, 0xffff, "MediaRewind", MEDIA_REWIND), + DOM_CODE(0x0c00b5, 0x00a3, 0x00ab, 0xe019, 0xffff, "MediaTrackNext", MEDIA_TRACK_NEXT), + DOM_CODE(0x0c00b6, 0x00a5, 0x00ad, 0xe010, 0xffff, "MediaTrackPrevious", MEDIA_TRACK_PREVIOUS), + DOM_CODE(0x0c00b7, 0x00a6, 0x00ae, 0xe024, 0xffff, "MediaStop", MEDIA_STOP), + DOM_CODE(0x0c00b8, 0x00a1, 0x00a9, 0xe02c, 0xffff, "Eject", EJECT), + DOM_CODE(0x0c00cd, 0x00a4, 0x00ac, 0xe022, 0xffff, "MediaPlayPause", MEDIA_PLAY_PAUSE), + DOM_CODE(0x0c00cf, 0x0246, 0x024e, 0x0000, 0xffff, NULL, SPEECH_INPUT_TOGGLE), + DOM_CODE(0x0c00e5, 0x00d1, 0x00d9, 0x0000, 0xffff, NULL, BASS_BOOST), + DOM_CODE(0x0c0183, 0x00ab, 0x00b3, 0xe06d, 0xffff, "MediaSelect", MEDIA_SELECT), + DOM_CODE(0x0c0184, 0x01a5, 0x01ad, 0x0000, 0xffff, NULL, LAUNCH_WORD_PROCESSOR), + DOM_CODE(0x0c0186, 0x01a7, 0x01af, 0x0000, 0xffff, NULL, LAUNCH_SPREADSHEET), + DOM_CODE(0x0c018a, 0x009b, 0x00a3, 0xe06c, 0xffff, "LaunchMail", LAUNCH_MAIL), + DOM_CODE(0x0c018d, 0x01ad, 0x01b5, 0x0000, 0xffff, NULL, LAUNCH_CONTACTS), + DOM_CODE(0x0c018e, 0x018d, 0x0195, 0x0000, 0xffff, NULL, LAUNCH_CALENDAR), + DOM_CODE(0x0c0192, 0x008c, 0x0094, 0xe021, 0xffff, "LaunchApp2", LAUNCH_APP2), + DOM_CODE(0x0c0194, 0x0090, 0x0098, 0xe06b, 0xffff, "LaunchApp1", LAUNCH_APP1), + DOM_CODE(0x0c0196, 0x0096, 0x009e, 0x0000, 0xffff, NULL, LAUNCH_INTERNET_BROWSER), + DOM_CODE(0x0c019C, 0x01b1, 0x01b9, 0x0000, 0xffff, NULL, LOG_OFF), + DOM_CODE(0x0c019e, 0x0098, 0x00a0, 0x0000, 0xffff, NULL, LOCK_SCREEN), + DOM_CODE(0x0c019f, 0x0243, 0x024b, 0x0000, 0xffff, "LaunchControlPanel", LAUNCH_CONTROL_PANEL), + DOM_CODE(0x0c01a2, 0x0244, 0x024c, 0x0000, 0xffff, "SelectTask", SELECT_TASK), + DOM_CODE(0x0c01a7, 0x00eb, 0x00f3, 0x0000, 0xffff, NULL, LAUNCH_DOCUMENTS), + DOM_CODE(0x0c01ab, 0x01b0, 0x01b8, 0x0000, 0xffff, NULL, SPELL_CHECK), + DOM_CODE(0x0c01ae, 0x0176, 0x017e, 0x0000, 0xffff, NULL, LAUNCH_KEYBOARD_LAYOUT), + DOM_CODE(0x0c01b1, 0x0245, 0x024d, 0x0000, 0xffff, "LaunchScreenSaver", LAUNCH_SCREEN_SAVER), + DOM_CODE(0x0c01cb, 0x0247, 0x024f, 0x0000, 0xffff, "LaunchAssistant", LAUNCH_ASSISTANT), + DOM_CODE(0x0c01b7, 0x0188, 0x0190, 0x0000, 0xffff, NULL, LAUNCH_AUDIO_BROWSER), + DOM_CODE(0x0c0201, 0x00b5, 0x00bd, 0x0000, 0xffff, NULL, NEW), + DOM_CODE(0x0c0203, 0x00ce, 0x00d6, 0x0000, 0xffff, NULL, CLOSE), + DOM_CODE(0x0c0207, 0x00ea, 0x00f2, 0x0000, 0xffff, NULL, SAVE), + DOM_CODE(0x0c0208, 0x00d2, 0x00da, 0x0000, 0xffff, NULL, PRINT), + DOM_CODE(0x0c0221, 0x00d9, 0x00e1, 0xe065, 0xffff, "BrowserSearch", BROWSER_SEARCH), + DOM_CODE(0x0c0223, 0x00ac, 0x00b4, 0xe032, 0xffff, "BrowserHome", BROWSER_HOME), + DOM_CODE(0x0c0224, 0x009e, 0x00a6, 0xe06a, 0xffff, "BrowserBack", BROWSER_BACK), + DOM_CODE(0x0c0225, 0x009f, 0x00a7, 0xe069, 0xffff, "BrowserForward", BROWSER_FORWARD), + DOM_CODE(0x0c0226, 0x0080, 0x0088, 0xe068, 0xffff, "BrowserStop", BROWSER_STOP), + DOM_CODE(0x0c0227, 0x00ad, 0x00b5, 0xe067, 0xffff, "BrowserRefresh", BROWSER_REFRESH), + DOM_CODE(0x0c022a, 0x009c, 0x00a4, 0xe066, 0xffff, "BrowserFavorites", BROWSER_FAVORITES), + DOM_CODE(0x0c022d, 0x01a2, 0x01aa, 0x0000, 0xffff, NULL, ZOOM_IN), + DOM_CODE(0x0c022e, 0x01a3, 0x01ab, 0x0000, 0xffff, NULL, ZOOM_OUT), + DOM_CODE(0x0c0232, 0x0174, 0x017c, 0x0000, 0xffff, "ZoomToggle", ZOOM_TOGGLE), + DOM_CODE(0x0c0279, 0x00b6, 0x00be, 0x0000, 0xffff, NULL, REDO), + DOM_CODE(0x0c0289, 0x00e8, 0x00f0, 0x0000, 0xffff, "MailReply", MAIL_REPLY), + DOM_CODE(0x0c028b, 0x00e9, 0x00f1, 0x0000, 0xffff, "MailForward", MAIL_FORWARD), + DOM_CODE(0x0c028c, 0x00e7, 0x00ef, 0x0000, 0xffff, "MailSend", MAIL_SEND), + DOM_CODE(0x0c029d, 0x0248, 0x0250, 0x0000, 0xffff, "KeyboardLayoutSelect", KEYBOARD_LAYOUT_SELECT), + DOM_CODE(0x0c029f, 0x0078, 0x0080, 0x0000, 0xffff, "ShowAllWindows", SHOW_ALL_WINDOWS), }; \ No newline at end of file diff --git a/hid/generator/gen.go b/hid/generator/gen.go index 67fd948..a20c8d1 100644 --- a/hid/generator/gen.go +++ b/hid/generator/gen.go @@ -1,74 +1,74 @@ -package main - -import ( - "encoding/json" - "io" - "io/fs" - "os" - "regexp" - "strconv" -) - -type KeyMaps struct { - Usb map[uint16]Key - Evdev map[uint16]Key - Xkb map[uint16]Key - Win map[uint16]Key - Mac map[uint16]Key - Code map[string]Key - Arr []Key -} - -type Key struct { - Usb uint16 - Evdev uint16 - Xkb uint16 - Win uint16 - Mac uint16 - Code string -} - -func main() { - rege, _ := regexp.Compile("DOM_CODE\\(0x07([0-9a-f]*), 0x([0-9a-f]*), 0x([0-9a-f]*), 0x([0-9a-f]*), 0x([0-9a-f]*), \"?[A-Za-z0-9]*\"?, ([A-Za-z_0-9]*)") - //DOM_CODE(USB, evdev, XKB, Win, Mac, _, Code) - fil, _ := os.OpenFile("hid/data/keycode_data.inc", 0, fs.FileMode(os.O_RDONLY)) - byts, _ := io.ReadAll(fil) - fil.Close() - matches := rege.FindAllSubmatch(byts, -1) - KeyMaps := KeyMaps{ - Usb: make(map[uint16]Key), - Evdev: make(map[uint16]Key), - Xkb: make(map[uint16]Key), - Win: make(map[uint16]Key), - Mac: make(map[uint16]Key), - Code: make(map[string]Key), - } - Arr := make([]Key, 0) - for _, bar := range matches { - U, _ := strconv.ParseUint(string(bar[1]), 16, 16) - E, _ := strconv.ParseUint(string(bar[2]), 16, 16) - X, _ := strconv.ParseUint(string(bar[3]), 16, 16) - W, _ := strconv.ParseUint(string(bar[4]), 16, 16) - M, _ := strconv.ParseUint(string(bar[5]), 16, 16) - Keys := Key{ - Usb: uint16(U), - Evdev: uint16(E), - Xkb: uint16(X), - Win: uint16(W), - Mac: uint16(M), - Code: string(bar[6]), - } - KeyMaps.Usb[uint16(U)] = Keys - KeyMaps.Evdev[uint16(E)] = Keys - KeyMaps.Xkb[uint16(X)] = Keys - KeyMaps.Win[uint16(W)] = Keys - KeyMaps.Mac[uint16(M)] = Keys - KeyMaps.Code[string(bar[6])] = Keys - Arr = append(Arr, Keys) - } - KeyMaps.Arr = Arr - out, _ := os.Create("hid/generated.json") - defer out.Close() - jso, _ := json.Marshal(KeyMaps) - out.Write(jso) -} +package main + +import ( + "encoding/json" + "io" + "io/fs" + "os" + "regexp" + "strconv" +) + +type KeyMaps struct { + Usb map[uint16]Key + Evdev map[uint16]Key + Xkb map[uint16]Key + Win map[uint16]Key + Mac map[uint16]Key + Code map[string]Key + Arr []Key +} + +type Key struct { + Usb uint16 + Evdev uint16 + Xkb uint16 + Win uint16 + Mac uint16 + Code string +} + +func main() { + rege, _ := regexp.Compile("DOM_CODE\\(0x07([0-9a-f]*), 0x([0-9a-f]*), 0x([0-9a-f]*), 0x([0-9a-f]*), 0x([0-9a-f]*), \"?[A-Za-z0-9]*\"?, ([A-Za-z_0-9]*)") + //DOM_CODE(USB, evdev, XKB, Win, Mac, _, Code) + fil, _ := os.OpenFile("hid/data/keycode_data.inc", 0, fs.FileMode(os.O_RDONLY)) + byts, _ := io.ReadAll(fil) + fil.Close() + matches := rege.FindAllSubmatch(byts, -1) + KeyMaps := KeyMaps{ + Usb: make(map[uint16]Key), + Evdev: make(map[uint16]Key), + Xkb: make(map[uint16]Key), + Win: make(map[uint16]Key), + Mac: make(map[uint16]Key), + Code: make(map[string]Key), + } + Arr := make([]Key, 0) + for _, bar := range matches { + U, _ := strconv.ParseUint(string(bar[1]), 16, 16) + E, _ := strconv.ParseUint(string(bar[2]), 16, 16) + X, _ := strconv.ParseUint(string(bar[3]), 16, 16) + W, _ := strconv.ParseUint(string(bar[4]), 16, 16) + M, _ := strconv.ParseUint(string(bar[5]), 16, 16) + Keys := Key{ + Usb: uint16(U), + Evdev: uint16(E), + Xkb: uint16(X), + Win: uint16(W), + Mac: uint16(M), + Code: string(bar[6]), + } + KeyMaps.Usb[uint16(U)] = Keys + KeyMaps.Evdev[uint16(E)] = Keys + KeyMaps.Xkb[uint16(X)] = Keys + KeyMaps.Win[uint16(W)] = Keys + KeyMaps.Mac[uint16(M)] = Keys + KeyMaps.Code[string(bar[6])] = Keys + Arr = append(Arr, Keys) + } + KeyMaps.Arr = Arr + out, _ := os.Create("hid/generated.json") + defer out.Close() + jso, _ := json.Marshal(KeyMaps) + out.Write(jso) +} diff --git a/hid/hid.go b/hid/hid.go index befb667..13f805c 100644 --- a/hid/hid.go +++ b/hid/hid.go @@ -1,63 +1,63 @@ -package hid - -import ( - _ "embed" - "encoding/json" -) - -type KeyMaps struct { - Usb map[uint16]Key - Evdev map[uint16]Key - Xkb map[uint16]Key - Win map[uint16]Key - Mac map[uint16]Key - Code map[string]Key - Arr []Key -} - -type Key struct { - Usb uint16 - Evdev uint16 - Xkb uint16 - Win uint16 - Mac uint16 - Code string -} - -var Mappings KeyMaps = KeyMaps{} - -//go:embed generated.json -var file []byte - -func init() { - json.Unmarshal(file, &Mappings) -} -func GetWindowsFromHid(uv uint16) uint16 { - return Mappings.Usb[uv].Win -} -func GetHidFromWindows(uv uint16) uint16 { - return Mappings.Win[uv].Usb -} - -func GetLinuxFromHid(uv uint16) uint16 { - return Mappings.Usb[uv].Evdev -} -func GetHidFromLinux(uv uint16) uint16 { - return Mappings.Evdev[uv].Usb -} - -func GetMappingFromHID(uv uint16) Key { - return Mappings.Usb[uv] -} - -func GetMappingFromWindows(uv uint16) Key { - return Mappings.Win[uv] -} - -func GetMappingFromLinux(uv uint16) Key { - return Mappings.Evdev[uv] -} - -func GetMappingFromName(name string) Key { - return Mappings.Code[name] -} +package hid + +import ( + _ "embed" + "encoding/json" +) + +type KeyMaps struct { + Usb map[uint16]Key + Evdev map[uint16]Key + Xkb map[uint16]Key + Win map[uint16]Key + Mac map[uint16]Key + Code map[string]Key + Arr []Key +} + +type Key struct { + Usb uint16 + Evdev uint16 + Xkb uint16 + Win uint16 + Mac uint16 + Code string +} + +var Mappings KeyMaps = KeyMaps{} + +//go:embed generated.json +var file []byte + +func init() { + json.Unmarshal(file, &Mappings) +} +func GetWindowsFromHid(uv uint16) uint16 { + return Mappings.Usb[uv].Win +} +func GetHidFromWindows(uv uint16) uint16 { + return Mappings.Win[uv].Usb +} + +func GetLinuxFromHid(uv uint16) uint16 { + return Mappings.Usb[uv].Evdev +} +func GetHidFromLinux(uv uint16) uint16 { + return Mappings.Evdev[uv].Usb +} + +func GetMappingFromHID(uv uint16) Key { + return Mappings.Usb[uv] +} + +func GetMappingFromWindows(uv uint16) Key { + return Mappings.Win[uv] +} + +func GetMappingFromLinux(uv uint16) Key { + return Mappings.Evdev[uv] +} + +func GetMappingFromName(name string) Key { + return Mappings.Code[name] +} diff --git a/module.go b/module.go index c5c64b8..d0d85fe 100644 --- a/module.go +++ b/module.go @@ -1,3 +1,3 @@ -package OrbCommon - -//go:generate go run hid/generator/gen.go +package OrbCommon + +//go:generate go run hid/generator/gen.go From cc9366160c42a6f8fbd2da0bdb39132989069930 Mon Sep 17 00:00:00 2001 From: Minizbot2012 Date: Tue, 11 May 2021 20:46:02 -0400 Subject: [PATCH 3/5] Key Name fix --- devices/orbweaver/orbweaver.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/devices/orbweaver/orbweaver.go b/devices/orbweaver/orbweaver.go index 1ee2d2b..3642bbe 100644 --- a/devices/orbweaver/orbweaver.go +++ b/devices/orbweaver/orbweaver.go @@ -60,22 +60,22 @@ var GUI = &gui.GUI{ KeyName: "13", }, { KeyID: 13, - KeyName: "11", + KeyName: "14", }, { KeyID: 14, - KeyName: "11", + KeyName: "15", }, { KeyID: 15, - KeyName: "11", + KeyName: "16", }, { KeyID: 16, - KeyName: "11", + KeyName: "17", }, { KeyID: 17, - KeyName: "11", + KeyName: "18", }, { KeyID: 18, - KeyName: "11", + KeyName: "19", }, { KeyID: 19, KeyName: "20", From 0896f3a8de6fadac4f8ee7290faf510ef91c6a11 Mon Sep 17 00:00:00 2001 From: Minizbot2012 Date: Tue, 11 May 2021 22:01:54 -0400 Subject: [PATCH 4/5] only allow first entry on generator --- hid/generated.json | 8249 +++++++++++++++++++++++++++++++++++++++++- hid/generator/gen.go | 20 +- 2 files changed, 8263 insertions(+), 6 deletions(-) diff --git a/hid/generated.json b/hid/generated.json index 38359d9..3ffe9e2 100644 --- a/hid/generated.json +++ b/hid/generated.json @@ -1 +1,8248 @@ -{"Usb":{"0":{"Usb":0,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"USB_RESERVED"},"1":{"Usb":1,"Evdev":0,"Xkb":0,"Win":255,"Mac":65535,"Code":"USB_ERROR_ROLL_OVER"},"10":{"Usb":10,"Evdev":34,"Xkb":42,"Win":34,"Mac":5,"Code":"US_G"},"100":{"Usb":100,"Evdev":86,"Xkb":94,"Win":86,"Mac":10,"Code":"INTL_BACKSLASH"},"101":{"Usb":101,"Evdev":127,"Xkb":135,"Win":57437,"Mac":110,"Code":"CONTEXT_MENU"},"102":{"Usb":102,"Evdev":116,"Xkb":124,"Win":57438,"Mac":65535,"Code":"POWER"},"103":{"Usb":103,"Evdev":117,"Xkb":125,"Win":89,"Mac":81,"Code":"NUMPAD_EQUAL"},"104":{"Usb":104,"Evdev":183,"Xkb":191,"Win":100,"Mac":105,"Code":"F13"},"105":{"Usb":105,"Evdev":184,"Xkb":192,"Win":101,"Mac":107,"Code":"F14"},"106":{"Usb":106,"Evdev":185,"Xkb":193,"Win":102,"Mac":113,"Code":"F15"},"107":{"Usb":107,"Evdev":186,"Xkb":194,"Win":103,"Mac":106,"Code":"F16"},"108":{"Usb":108,"Evdev":187,"Xkb":195,"Win":104,"Mac":64,"Code":"F17"},"109":{"Usb":109,"Evdev":188,"Xkb":196,"Win":105,"Mac":79,"Code":"F18"},"11":{"Usb":11,"Evdev":35,"Xkb":43,"Win":35,"Mac":4,"Code":"US_H"},"110":{"Usb":110,"Evdev":189,"Xkb":197,"Win":106,"Mac":80,"Code":"F19"},"111":{"Usb":111,"Evdev":190,"Xkb":198,"Win":107,"Mac":90,"Code":"F20"},"112":{"Usb":112,"Evdev":191,"Xkb":199,"Win":108,"Mac":65535,"Code":"F21"},"113":{"Usb":113,"Evdev":192,"Xkb":200,"Win":109,"Mac":65535,"Code":"F22"},"114":{"Usb":114,"Evdev":193,"Xkb":201,"Win":110,"Mac":65535,"Code":"F23"},"115":{"Usb":115,"Evdev":194,"Xkb":202,"Win":118,"Mac":65535,"Code":"F24"},"116":{"Usb":116,"Evdev":134,"Xkb":142,"Win":0,"Mac":65535,"Code":"OPEN"},"117":{"Usb":117,"Evdev":138,"Xkb":146,"Win":57403,"Mac":65535,"Code":"HELP"},"119":{"Usb":119,"Evdev":132,"Xkb":140,"Win":0,"Mac":65535,"Code":"SELECT"},"12":{"Usb":12,"Evdev":23,"Xkb":31,"Win":23,"Mac":34,"Code":"US_I"},"121":{"Usb":121,"Evdev":129,"Xkb":137,"Win":0,"Mac":65535,"Code":"AGAIN"},"122":{"Usb":122,"Evdev":131,"Xkb":139,"Win":57352,"Mac":65535,"Code":"UNDO"},"123":{"Usb":123,"Evdev":137,"Xkb":145,"Win":57367,"Mac":65535,"Code":"CUT"},"124":{"Usb":124,"Evdev":133,"Xkb":141,"Win":57368,"Mac":65535,"Code":"COPY"},"125":{"Usb":125,"Evdev":135,"Xkb":143,"Win":57354,"Mac":65535,"Code":"PASTE"},"126":{"Usb":126,"Evdev":136,"Xkb":144,"Win":0,"Mac":65535,"Code":"FIND"},"127":{"Usb":127,"Evdev":113,"Xkb":121,"Win":57376,"Mac":74,"Code":"VOLUME_MUTE"},"128":{"Usb":128,"Evdev":115,"Xkb":123,"Win":57392,"Mac":72,"Code":"VOLUME_UP"},"129":{"Usb":129,"Evdev":114,"Xkb":122,"Win":57390,"Mac":73,"Code":"VOLUME_DOWN"},"13":{"Usb":13,"Evdev":36,"Xkb":44,"Win":36,"Mac":38,"Code":"US_J"},"133":{"Usb":133,"Evdev":121,"Xkb":129,"Win":126,"Mac":95,"Code":"NUMPAD_COMMA"},"135":{"Usb":135,"Evdev":89,"Xkb":97,"Win":115,"Mac":94,"Code":"INTL_RO"},"136":{"Usb":136,"Evdev":93,"Xkb":101,"Win":112,"Mac":65535,"Code":"KANA_MODE"},"137":{"Usb":137,"Evdev":124,"Xkb":132,"Win":125,"Mac":93,"Code":"INTL_YEN"},"138":{"Usb":138,"Evdev":92,"Xkb":100,"Win":121,"Mac":65535,"Code":"CONVERT"},"139":{"Usb":139,"Evdev":94,"Xkb":102,"Win":123,"Mac":65535,"Code":"NON_CONVERT"},"14":{"Usb":14,"Evdev":37,"Xkb":45,"Win":37,"Mac":40,"Code":"US_K"},"144":{"Usb":144,"Evdev":122,"Xkb":130,"Win":114,"Mac":104,"Code":"LANG1"},"145":{"Usb":145,"Evdev":123,"Xkb":131,"Win":113,"Mac":102,"Code":"LANG2"},"146":{"Usb":146,"Evdev":90,"Xkb":98,"Win":120,"Mac":65535,"Code":"LANG3"},"147":{"Usb":147,"Evdev":91,"Xkb":99,"Win":119,"Mac":65535,"Code":"LANG4"},"148":{"Usb":148,"Evdev":85,"Xkb":93,"Win":0,"Mac":65535,"Code":"LANG5"},"15":{"Usb":15,"Evdev":38,"Xkb":46,"Win":38,"Mac":37,"Code":"US_L"},"155":{"Usb":155,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"ABORT"},"16":{"Usb":16,"Evdev":50,"Xkb":58,"Win":50,"Mac":46,"Code":"US_M"},"163":{"Usb":163,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"PROPS"},"17":{"Usb":17,"Evdev":49,"Xkb":57,"Win":49,"Mac":45,"Code":"US_N"},"18":{"Usb":18,"Evdev":24,"Xkb":32,"Win":24,"Mac":31,"Code":"US_O"},"182":{"Usb":182,"Evdev":179,"Xkb":187,"Win":0,"Mac":65535,"Code":"NUMPAD_PAREN_LEFT"},"183":{"Usb":183,"Evdev":180,"Xkb":188,"Win":0,"Mac":65535,"Code":"NUMPAD_PAREN_RIGHT"},"187":{"Usb":187,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_BACKSPACE"},"19":{"Usb":19,"Evdev":25,"Xkb":33,"Win":25,"Mac":35,"Code":"US_P"},"2":{"Usb":2,"Evdev":0,"Xkb":0,"Win":252,"Mac":65535,"Code":"USB_POST_FAIL"},"20":{"Usb":20,"Evdev":16,"Xkb":24,"Win":16,"Mac":12,"Code":"US_Q"},"208":{"Usb":208,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_STORE"},"209":{"Usb":209,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_RECALL"},"21":{"Usb":21,"Evdev":19,"Xkb":27,"Win":19,"Mac":15,"Code":"US_R"},"210":{"Usb":210,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_CLEAR"},"211":{"Usb":211,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_ADD"},"212":{"Usb":212,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_SUBTRACT"},"215":{"Usb":215,"Evdev":118,"Xkb":126,"Win":0,"Mac":65535,"Code":"NUMPAD_SIGN_CHANGE"},"216":{"Usb":216,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_CLEAR"},"217":{"Usb":217,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_CLEAR_ENTRY"},"22":{"Usb":22,"Evdev":31,"Xkb":39,"Win":31,"Mac":1,"Code":"US_S"},"224":{"Usb":224,"Evdev":29,"Xkb":37,"Win":29,"Mac":59,"Code":"CONTROL_LEFT"},"225":{"Usb":225,"Evdev":42,"Xkb":50,"Win":42,"Mac":56,"Code":"SHIFT_LEFT"},"226":{"Usb":226,"Evdev":56,"Xkb":64,"Win":56,"Mac":58,"Code":"ALT_LEFT"},"227":{"Usb":227,"Evdev":125,"Xkb":133,"Win":57435,"Mac":55,"Code":"META_LEFT"},"228":{"Usb":228,"Evdev":97,"Xkb":105,"Win":57373,"Mac":62,"Code":"CONTROL_RIGHT"},"229":{"Usb":229,"Evdev":54,"Xkb":62,"Win":54,"Mac":60,"Code":"SHIFT_RIGHT"},"23":{"Usb":23,"Evdev":20,"Xkb":28,"Win":20,"Mac":17,"Code":"US_T"},"230":{"Usb":230,"Evdev":100,"Xkb":108,"Win":57400,"Mac":61,"Code":"ALT_RIGHT"},"231":{"Usb":231,"Evdev":126,"Xkb":134,"Win":57436,"Mac":54,"Code":"META_RIGHT"},"24":{"Usb":24,"Evdev":22,"Xkb":30,"Win":22,"Mac":32,"Code":"US_U"},"25":{"Usb":25,"Evdev":47,"Xkb":55,"Win":47,"Mac":9,"Code":"US_V"},"26":{"Usb":26,"Evdev":17,"Xkb":25,"Win":17,"Mac":13,"Code":"US_W"},"27":{"Usb":27,"Evdev":45,"Xkb":53,"Win":45,"Mac":7,"Code":"US_X"},"28":{"Usb":28,"Evdev":21,"Xkb":29,"Win":21,"Mac":16,"Code":"US_Y"},"29":{"Usb":29,"Evdev":44,"Xkb":52,"Win":44,"Mac":6,"Code":"US_Z"},"3":{"Usb":3,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"USB_ERROR_UNDEFINED"},"30":{"Usb":30,"Evdev":2,"Xkb":10,"Win":2,"Mac":18,"Code":"DIGIT1"},"31":{"Usb":31,"Evdev":3,"Xkb":11,"Win":3,"Mac":19,"Code":"DIGIT2"},"32":{"Usb":32,"Evdev":4,"Xkb":12,"Win":4,"Mac":20,"Code":"DIGIT3"},"33":{"Usb":33,"Evdev":5,"Xkb":13,"Win":5,"Mac":21,"Code":"DIGIT4"},"34":{"Usb":34,"Evdev":6,"Xkb":14,"Win":6,"Mac":23,"Code":"DIGIT5"},"35":{"Usb":35,"Evdev":7,"Xkb":15,"Win":7,"Mac":22,"Code":"DIGIT6"},"36":{"Usb":36,"Evdev":8,"Xkb":16,"Win":8,"Mac":26,"Code":"DIGIT7"},"37":{"Usb":37,"Evdev":9,"Xkb":17,"Win":9,"Mac":28,"Code":"DIGIT8"},"38":{"Usb":38,"Evdev":10,"Xkb":18,"Win":10,"Mac":25,"Code":"DIGIT9"},"39":{"Usb":39,"Evdev":11,"Xkb":19,"Win":11,"Mac":29,"Code":"DIGIT0"},"4":{"Usb":4,"Evdev":30,"Xkb":38,"Win":30,"Mac":0,"Code":"US_A"},"40":{"Usb":40,"Evdev":28,"Xkb":36,"Win":28,"Mac":36,"Code":"ENTER"},"41":{"Usb":41,"Evdev":1,"Xkb":9,"Win":1,"Mac":53,"Code":"ESCAPE"},"42":{"Usb":42,"Evdev":14,"Xkb":22,"Win":14,"Mac":51,"Code":"BACKSPACE"},"43":{"Usb":43,"Evdev":15,"Xkb":23,"Win":15,"Mac":48,"Code":"TAB"},"44":{"Usb":44,"Evdev":57,"Xkb":65,"Win":57,"Mac":49,"Code":"SPACE"},"45":{"Usb":45,"Evdev":12,"Xkb":20,"Win":12,"Mac":27,"Code":"MINUS"},"46":{"Usb":46,"Evdev":13,"Xkb":21,"Win":13,"Mac":24,"Code":"EQUAL"},"47":{"Usb":47,"Evdev":26,"Xkb":34,"Win":26,"Mac":33,"Code":"BRACKET_LEFT"},"48":{"Usb":48,"Evdev":27,"Xkb":35,"Win":27,"Mac":30,"Code":"BRACKET_RIGHT"},"49":{"Usb":49,"Evdev":43,"Xkb":51,"Win":43,"Mac":42,"Code":"BACKSLASH"},"5":{"Usb":5,"Evdev":48,"Xkb":56,"Win":48,"Mac":11,"Code":"US_B"},"51":{"Usb":51,"Evdev":39,"Xkb":47,"Win":39,"Mac":41,"Code":"SEMICOLON"},"52":{"Usb":52,"Evdev":40,"Xkb":48,"Win":40,"Mac":39,"Code":"QUOTE"},"53":{"Usb":53,"Evdev":41,"Xkb":49,"Win":41,"Mac":50,"Code":"BACKQUOTE"},"54":{"Usb":54,"Evdev":51,"Xkb":59,"Win":51,"Mac":43,"Code":"COMMA"},"55":{"Usb":55,"Evdev":52,"Xkb":60,"Win":52,"Mac":47,"Code":"PERIOD"},"56":{"Usb":56,"Evdev":53,"Xkb":61,"Win":53,"Mac":44,"Code":"SLASH"},"57":{"Usb":57,"Evdev":58,"Xkb":66,"Win":58,"Mac":57,"Code":"CAPS_LOCK"},"58":{"Usb":58,"Evdev":59,"Xkb":67,"Win":59,"Mac":122,"Code":"F1"},"59":{"Usb":59,"Evdev":60,"Xkb":68,"Win":60,"Mac":120,"Code":"F2"},"6":{"Usb":6,"Evdev":46,"Xkb":54,"Win":46,"Mac":8,"Code":"US_C"},"60":{"Usb":60,"Evdev":61,"Xkb":69,"Win":61,"Mac":99,"Code":"F3"},"61":{"Usb":61,"Evdev":62,"Xkb":70,"Win":62,"Mac":118,"Code":"F4"},"62":{"Usb":62,"Evdev":63,"Xkb":71,"Win":63,"Mac":96,"Code":"F5"},"63":{"Usb":63,"Evdev":64,"Xkb":72,"Win":64,"Mac":97,"Code":"F6"},"64":{"Usb":64,"Evdev":65,"Xkb":73,"Win":65,"Mac":98,"Code":"F7"},"65":{"Usb":65,"Evdev":66,"Xkb":74,"Win":66,"Mac":100,"Code":"F8"},"66":{"Usb":66,"Evdev":67,"Xkb":75,"Win":67,"Mac":101,"Code":"F9"},"67":{"Usb":67,"Evdev":68,"Xkb":76,"Win":68,"Mac":109,"Code":"F10"},"68":{"Usb":68,"Evdev":87,"Xkb":95,"Win":87,"Mac":103,"Code":"F11"},"69":{"Usb":69,"Evdev":88,"Xkb":96,"Win":88,"Mac":111,"Code":"F12"},"7":{"Usb":7,"Evdev":32,"Xkb":40,"Win":32,"Mac":2,"Code":"US_D"},"70":{"Usb":70,"Evdev":99,"Xkb":107,"Win":57399,"Mac":65535,"Code":"PRINT_SCREEN"},"71":{"Usb":71,"Evdev":70,"Xkb":78,"Win":70,"Mac":65535,"Code":"SCROLL_LOCK"},"72":{"Usb":72,"Evdev":119,"Xkb":127,"Win":69,"Mac":65535,"Code":"PAUSE"},"73":{"Usb":73,"Evdev":110,"Xkb":118,"Win":57426,"Mac":114,"Code":"INSERT"},"74":{"Usb":74,"Evdev":102,"Xkb":110,"Win":57415,"Mac":115,"Code":"HOME"},"75":{"Usb":75,"Evdev":104,"Xkb":112,"Win":57417,"Mac":116,"Code":"PAGE_UP"},"76":{"Usb":76,"Evdev":111,"Xkb":119,"Win":57427,"Mac":117,"Code":"DEL"},"77":{"Usb":77,"Evdev":107,"Xkb":115,"Win":57423,"Mac":119,"Code":"END"},"78":{"Usb":78,"Evdev":109,"Xkb":117,"Win":57425,"Mac":121,"Code":"PAGE_DOWN"},"79":{"Usb":79,"Evdev":106,"Xkb":114,"Win":57421,"Mac":124,"Code":"ARROW_RIGHT"},"8":{"Usb":8,"Evdev":18,"Xkb":26,"Win":18,"Mac":14,"Code":"US_E"},"80":{"Usb":80,"Evdev":105,"Xkb":113,"Win":57419,"Mac":123,"Code":"ARROW_LEFT"},"81":{"Usb":81,"Evdev":108,"Xkb":116,"Win":57424,"Mac":125,"Code":"ARROW_DOWN"},"82":{"Usb":82,"Evdev":103,"Xkb":111,"Win":57416,"Mac":126,"Code":"ARROW_UP"},"83":{"Usb":83,"Evdev":69,"Xkb":77,"Win":57413,"Mac":71,"Code":"NUM_LOCK"},"84":{"Usb":84,"Evdev":98,"Xkb":106,"Win":57397,"Mac":75,"Code":"NUMPAD_DIVIDE"},"85":{"Usb":85,"Evdev":55,"Xkb":63,"Win":55,"Mac":67,"Code":"NUMPAD_MULTIPLY"},"86":{"Usb":86,"Evdev":74,"Xkb":82,"Win":74,"Mac":78,"Code":"NUMPAD_SUBTRACT"},"87":{"Usb":87,"Evdev":78,"Xkb":86,"Win":78,"Mac":69,"Code":"NUMPAD_ADD"},"88":{"Usb":88,"Evdev":96,"Xkb":104,"Win":57372,"Mac":76,"Code":"NUMPAD_ENTER"},"89":{"Usb":89,"Evdev":79,"Xkb":87,"Win":79,"Mac":83,"Code":"NUMPAD1"},"9":{"Usb":9,"Evdev":33,"Xkb":41,"Win":33,"Mac":3,"Code":"US_F"},"90":{"Usb":90,"Evdev":80,"Xkb":88,"Win":80,"Mac":84,"Code":"NUMPAD2"},"91":{"Usb":91,"Evdev":81,"Xkb":89,"Win":81,"Mac":85,"Code":"NUMPAD3"},"92":{"Usb":92,"Evdev":75,"Xkb":83,"Win":75,"Mac":86,"Code":"NUMPAD4"},"93":{"Usb":93,"Evdev":76,"Xkb":84,"Win":76,"Mac":87,"Code":"NUMPAD5"},"94":{"Usb":94,"Evdev":77,"Xkb":85,"Win":77,"Mac":88,"Code":"NUMPAD6"},"95":{"Usb":95,"Evdev":71,"Xkb":79,"Win":71,"Mac":89,"Code":"NUMPAD7"},"96":{"Usb":96,"Evdev":72,"Xkb":80,"Win":72,"Mac":91,"Code":"NUMPAD8"},"97":{"Usb":97,"Evdev":73,"Xkb":81,"Win":73,"Mac":92,"Code":"NUMPAD9"},"98":{"Usb":98,"Evdev":82,"Xkb":90,"Win":82,"Mac":82,"Code":"NUMPAD0"},"99":{"Usb":99,"Evdev":83,"Xkb":91,"Win":83,"Mac":65,"Code":"NUMPAD_DECIMAL"}},"Evdev":{"0":{"Usb":217,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_CLEAR_ENTRY"},"1":{"Usb":41,"Evdev":1,"Xkb":9,"Win":1,"Mac":53,"Code":"ESCAPE"},"10":{"Usb":38,"Evdev":10,"Xkb":18,"Win":10,"Mac":25,"Code":"DIGIT9"},"100":{"Usb":230,"Evdev":100,"Xkb":108,"Win":57400,"Mac":61,"Code":"ALT_RIGHT"},"102":{"Usb":74,"Evdev":102,"Xkb":110,"Win":57415,"Mac":115,"Code":"HOME"},"103":{"Usb":82,"Evdev":103,"Xkb":111,"Win":57416,"Mac":126,"Code":"ARROW_UP"},"104":{"Usb":75,"Evdev":104,"Xkb":112,"Win":57417,"Mac":116,"Code":"PAGE_UP"},"105":{"Usb":80,"Evdev":105,"Xkb":113,"Win":57419,"Mac":123,"Code":"ARROW_LEFT"},"106":{"Usb":79,"Evdev":106,"Xkb":114,"Win":57421,"Mac":124,"Code":"ARROW_RIGHT"},"107":{"Usb":77,"Evdev":107,"Xkb":115,"Win":57423,"Mac":119,"Code":"END"},"108":{"Usb":81,"Evdev":108,"Xkb":116,"Win":57424,"Mac":125,"Code":"ARROW_DOWN"},"109":{"Usb":78,"Evdev":109,"Xkb":117,"Win":57425,"Mac":121,"Code":"PAGE_DOWN"},"11":{"Usb":39,"Evdev":11,"Xkb":19,"Win":11,"Mac":29,"Code":"DIGIT0"},"110":{"Usb":73,"Evdev":110,"Xkb":118,"Win":57426,"Mac":114,"Code":"INSERT"},"111":{"Usb":76,"Evdev":111,"Xkb":119,"Win":57427,"Mac":117,"Code":"DEL"},"113":{"Usb":127,"Evdev":113,"Xkb":121,"Win":57376,"Mac":74,"Code":"VOLUME_MUTE"},"114":{"Usb":129,"Evdev":114,"Xkb":122,"Win":57390,"Mac":73,"Code":"VOLUME_DOWN"},"115":{"Usb":128,"Evdev":115,"Xkb":123,"Win":57392,"Mac":72,"Code":"VOLUME_UP"},"116":{"Usb":102,"Evdev":116,"Xkb":124,"Win":57438,"Mac":65535,"Code":"POWER"},"117":{"Usb":103,"Evdev":117,"Xkb":125,"Win":89,"Mac":81,"Code":"NUMPAD_EQUAL"},"118":{"Usb":215,"Evdev":118,"Xkb":126,"Win":0,"Mac":65535,"Code":"NUMPAD_SIGN_CHANGE"},"119":{"Usb":72,"Evdev":119,"Xkb":127,"Win":69,"Mac":65535,"Code":"PAUSE"},"12":{"Usb":45,"Evdev":12,"Xkb":20,"Win":12,"Mac":27,"Code":"MINUS"},"121":{"Usb":133,"Evdev":121,"Xkb":129,"Win":126,"Mac":95,"Code":"NUMPAD_COMMA"},"122":{"Usb":144,"Evdev":122,"Xkb":130,"Win":114,"Mac":104,"Code":"LANG1"},"123":{"Usb":145,"Evdev":123,"Xkb":131,"Win":113,"Mac":102,"Code":"LANG2"},"124":{"Usb":137,"Evdev":124,"Xkb":132,"Win":125,"Mac":93,"Code":"INTL_YEN"},"125":{"Usb":227,"Evdev":125,"Xkb":133,"Win":57435,"Mac":55,"Code":"META_LEFT"},"126":{"Usb":231,"Evdev":126,"Xkb":134,"Win":57436,"Mac":54,"Code":"META_RIGHT"},"127":{"Usb":101,"Evdev":127,"Xkb":135,"Win":57437,"Mac":110,"Code":"CONTEXT_MENU"},"129":{"Usb":121,"Evdev":129,"Xkb":137,"Win":0,"Mac":65535,"Code":"AGAIN"},"13":{"Usb":46,"Evdev":13,"Xkb":21,"Win":13,"Mac":24,"Code":"EQUAL"},"131":{"Usb":122,"Evdev":131,"Xkb":139,"Win":57352,"Mac":65535,"Code":"UNDO"},"132":{"Usb":119,"Evdev":132,"Xkb":140,"Win":0,"Mac":65535,"Code":"SELECT"},"133":{"Usb":124,"Evdev":133,"Xkb":141,"Win":57368,"Mac":65535,"Code":"COPY"},"134":{"Usb":116,"Evdev":134,"Xkb":142,"Win":0,"Mac":65535,"Code":"OPEN"},"135":{"Usb":125,"Evdev":135,"Xkb":143,"Win":57354,"Mac":65535,"Code":"PASTE"},"136":{"Usb":126,"Evdev":136,"Xkb":144,"Win":0,"Mac":65535,"Code":"FIND"},"137":{"Usb":123,"Evdev":137,"Xkb":145,"Win":57367,"Mac":65535,"Code":"CUT"},"138":{"Usb":117,"Evdev":138,"Xkb":146,"Win":57403,"Mac":65535,"Code":"HELP"},"14":{"Usb":42,"Evdev":14,"Xkb":22,"Win":14,"Mac":51,"Code":"BACKSPACE"},"15":{"Usb":43,"Evdev":15,"Xkb":23,"Win":15,"Mac":48,"Code":"TAB"},"16":{"Usb":20,"Evdev":16,"Xkb":24,"Win":16,"Mac":12,"Code":"US_Q"},"17":{"Usb":26,"Evdev":17,"Xkb":25,"Win":17,"Mac":13,"Code":"US_W"},"179":{"Usb":182,"Evdev":179,"Xkb":187,"Win":0,"Mac":65535,"Code":"NUMPAD_PAREN_LEFT"},"18":{"Usb":8,"Evdev":18,"Xkb":26,"Win":18,"Mac":14,"Code":"US_E"},"180":{"Usb":183,"Evdev":180,"Xkb":188,"Win":0,"Mac":65535,"Code":"NUMPAD_PAREN_RIGHT"},"183":{"Usb":104,"Evdev":183,"Xkb":191,"Win":100,"Mac":105,"Code":"F13"},"184":{"Usb":105,"Evdev":184,"Xkb":192,"Win":101,"Mac":107,"Code":"F14"},"185":{"Usb":106,"Evdev":185,"Xkb":193,"Win":102,"Mac":113,"Code":"F15"},"186":{"Usb":107,"Evdev":186,"Xkb":194,"Win":103,"Mac":106,"Code":"F16"},"187":{"Usb":108,"Evdev":187,"Xkb":195,"Win":104,"Mac":64,"Code":"F17"},"188":{"Usb":109,"Evdev":188,"Xkb":196,"Win":105,"Mac":79,"Code":"F18"},"189":{"Usb":110,"Evdev":189,"Xkb":197,"Win":106,"Mac":80,"Code":"F19"},"19":{"Usb":21,"Evdev":19,"Xkb":27,"Win":19,"Mac":15,"Code":"US_R"},"190":{"Usb":111,"Evdev":190,"Xkb":198,"Win":107,"Mac":90,"Code":"F20"},"191":{"Usb":112,"Evdev":191,"Xkb":199,"Win":108,"Mac":65535,"Code":"F21"},"192":{"Usb":113,"Evdev":192,"Xkb":200,"Win":109,"Mac":65535,"Code":"F22"},"193":{"Usb":114,"Evdev":193,"Xkb":201,"Win":110,"Mac":65535,"Code":"F23"},"194":{"Usb":115,"Evdev":194,"Xkb":202,"Win":118,"Mac":65535,"Code":"F24"},"2":{"Usb":30,"Evdev":2,"Xkb":10,"Win":2,"Mac":18,"Code":"DIGIT1"},"20":{"Usb":23,"Evdev":20,"Xkb":28,"Win":20,"Mac":17,"Code":"US_T"},"21":{"Usb":28,"Evdev":21,"Xkb":29,"Win":21,"Mac":16,"Code":"US_Y"},"22":{"Usb":24,"Evdev":22,"Xkb":30,"Win":22,"Mac":32,"Code":"US_U"},"23":{"Usb":12,"Evdev":23,"Xkb":31,"Win":23,"Mac":34,"Code":"US_I"},"24":{"Usb":18,"Evdev":24,"Xkb":32,"Win":24,"Mac":31,"Code":"US_O"},"25":{"Usb":19,"Evdev":25,"Xkb":33,"Win":25,"Mac":35,"Code":"US_P"},"26":{"Usb":47,"Evdev":26,"Xkb":34,"Win":26,"Mac":33,"Code":"BRACKET_LEFT"},"27":{"Usb":48,"Evdev":27,"Xkb":35,"Win":27,"Mac":30,"Code":"BRACKET_RIGHT"},"28":{"Usb":40,"Evdev":28,"Xkb":36,"Win":28,"Mac":36,"Code":"ENTER"},"29":{"Usb":224,"Evdev":29,"Xkb":37,"Win":29,"Mac":59,"Code":"CONTROL_LEFT"},"3":{"Usb":31,"Evdev":3,"Xkb":11,"Win":3,"Mac":19,"Code":"DIGIT2"},"30":{"Usb":4,"Evdev":30,"Xkb":38,"Win":30,"Mac":0,"Code":"US_A"},"31":{"Usb":22,"Evdev":31,"Xkb":39,"Win":31,"Mac":1,"Code":"US_S"},"32":{"Usb":7,"Evdev":32,"Xkb":40,"Win":32,"Mac":2,"Code":"US_D"},"33":{"Usb":9,"Evdev":33,"Xkb":41,"Win":33,"Mac":3,"Code":"US_F"},"34":{"Usb":10,"Evdev":34,"Xkb":42,"Win":34,"Mac":5,"Code":"US_G"},"35":{"Usb":11,"Evdev":35,"Xkb":43,"Win":35,"Mac":4,"Code":"US_H"},"36":{"Usb":13,"Evdev":36,"Xkb":44,"Win":36,"Mac":38,"Code":"US_J"},"37":{"Usb":14,"Evdev":37,"Xkb":45,"Win":37,"Mac":40,"Code":"US_K"},"38":{"Usb":15,"Evdev":38,"Xkb":46,"Win":38,"Mac":37,"Code":"US_L"},"39":{"Usb":51,"Evdev":39,"Xkb":47,"Win":39,"Mac":41,"Code":"SEMICOLON"},"4":{"Usb":32,"Evdev":4,"Xkb":12,"Win":4,"Mac":20,"Code":"DIGIT3"},"40":{"Usb":52,"Evdev":40,"Xkb":48,"Win":40,"Mac":39,"Code":"QUOTE"},"41":{"Usb":53,"Evdev":41,"Xkb":49,"Win":41,"Mac":50,"Code":"BACKQUOTE"},"42":{"Usb":225,"Evdev":42,"Xkb":50,"Win":42,"Mac":56,"Code":"SHIFT_LEFT"},"43":{"Usb":49,"Evdev":43,"Xkb":51,"Win":43,"Mac":42,"Code":"BACKSLASH"},"44":{"Usb":29,"Evdev":44,"Xkb":52,"Win":44,"Mac":6,"Code":"US_Z"},"45":{"Usb":27,"Evdev":45,"Xkb":53,"Win":45,"Mac":7,"Code":"US_X"},"46":{"Usb":6,"Evdev":46,"Xkb":54,"Win":46,"Mac":8,"Code":"US_C"},"47":{"Usb":25,"Evdev":47,"Xkb":55,"Win":47,"Mac":9,"Code":"US_V"},"48":{"Usb":5,"Evdev":48,"Xkb":56,"Win":48,"Mac":11,"Code":"US_B"},"49":{"Usb":17,"Evdev":49,"Xkb":57,"Win":49,"Mac":45,"Code":"US_N"},"5":{"Usb":33,"Evdev":5,"Xkb":13,"Win":5,"Mac":21,"Code":"DIGIT4"},"50":{"Usb":16,"Evdev":50,"Xkb":58,"Win":50,"Mac":46,"Code":"US_M"},"51":{"Usb":54,"Evdev":51,"Xkb":59,"Win":51,"Mac":43,"Code":"COMMA"},"52":{"Usb":55,"Evdev":52,"Xkb":60,"Win":52,"Mac":47,"Code":"PERIOD"},"53":{"Usb":56,"Evdev":53,"Xkb":61,"Win":53,"Mac":44,"Code":"SLASH"},"54":{"Usb":229,"Evdev":54,"Xkb":62,"Win":54,"Mac":60,"Code":"SHIFT_RIGHT"},"55":{"Usb":85,"Evdev":55,"Xkb":63,"Win":55,"Mac":67,"Code":"NUMPAD_MULTIPLY"},"56":{"Usb":226,"Evdev":56,"Xkb":64,"Win":56,"Mac":58,"Code":"ALT_LEFT"},"57":{"Usb":44,"Evdev":57,"Xkb":65,"Win":57,"Mac":49,"Code":"SPACE"},"58":{"Usb":57,"Evdev":58,"Xkb":66,"Win":58,"Mac":57,"Code":"CAPS_LOCK"},"59":{"Usb":58,"Evdev":59,"Xkb":67,"Win":59,"Mac":122,"Code":"F1"},"6":{"Usb":34,"Evdev":6,"Xkb":14,"Win":6,"Mac":23,"Code":"DIGIT5"},"60":{"Usb":59,"Evdev":60,"Xkb":68,"Win":60,"Mac":120,"Code":"F2"},"61":{"Usb":60,"Evdev":61,"Xkb":69,"Win":61,"Mac":99,"Code":"F3"},"62":{"Usb":61,"Evdev":62,"Xkb":70,"Win":62,"Mac":118,"Code":"F4"},"63":{"Usb":62,"Evdev":63,"Xkb":71,"Win":63,"Mac":96,"Code":"F5"},"64":{"Usb":63,"Evdev":64,"Xkb":72,"Win":64,"Mac":97,"Code":"F6"},"65":{"Usb":64,"Evdev":65,"Xkb":73,"Win":65,"Mac":98,"Code":"F7"},"66":{"Usb":65,"Evdev":66,"Xkb":74,"Win":66,"Mac":100,"Code":"F8"},"67":{"Usb":66,"Evdev":67,"Xkb":75,"Win":67,"Mac":101,"Code":"F9"},"68":{"Usb":67,"Evdev":68,"Xkb":76,"Win":68,"Mac":109,"Code":"F10"},"69":{"Usb":83,"Evdev":69,"Xkb":77,"Win":57413,"Mac":71,"Code":"NUM_LOCK"},"7":{"Usb":35,"Evdev":7,"Xkb":15,"Win":7,"Mac":22,"Code":"DIGIT6"},"70":{"Usb":71,"Evdev":70,"Xkb":78,"Win":70,"Mac":65535,"Code":"SCROLL_LOCK"},"71":{"Usb":95,"Evdev":71,"Xkb":79,"Win":71,"Mac":89,"Code":"NUMPAD7"},"72":{"Usb":96,"Evdev":72,"Xkb":80,"Win":72,"Mac":91,"Code":"NUMPAD8"},"73":{"Usb":97,"Evdev":73,"Xkb":81,"Win":73,"Mac":92,"Code":"NUMPAD9"},"74":{"Usb":86,"Evdev":74,"Xkb":82,"Win":74,"Mac":78,"Code":"NUMPAD_SUBTRACT"},"75":{"Usb":92,"Evdev":75,"Xkb":83,"Win":75,"Mac":86,"Code":"NUMPAD4"},"76":{"Usb":93,"Evdev":76,"Xkb":84,"Win":76,"Mac":87,"Code":"NUMPAD5"},"77":{"Usb":94,"Evdev":77,"Xkb":85,"Win":77,"Mac":88,"Code":"NUMPAD6"},"78":{"Usb":87,"Evdev":78,"Xkb":86,"Win":78,"Mac":69,"Code":"NUMPAD_ADD"},"79":{"Usb":89,"Evdev":79,"Xkb":87,"Win":79,"Mac":83,"Code":"NUMPAD1"},"8":{"Usb":36,"Evdev":8,"Xkb":16,"Win":8,"Mac":26,"Code":"DIGIT7"},"80":{"Usb":90,"Evdev":80,"Xkb":88,"Win":80,"Mac":84,"Code":"NUMPAD2"},"81":{"Usb":91,"Evdev":81,"Xkb":89,"Win":81,"Mac":85,"Code":"NUMPAD3"},"82":{"Usb":98,"Evdev":82,"Xkb":90,"Win":82,"Mac":82,"Code":"NUMPAD0"},"83":{"Usb":99,"Evdev":83,"Xkb":91,"Win":83,"Mac":65,"Code":"NUMPAD_DECIMAL"},"85":{"Usb":148,"Evdev":85,"Xkb":93,"Win":0,"Mac":65535,"Code":"LANG5"},"86":{"Usb":100,"Evdev":86,"Xkb":94,"Win":86,"Mac":10,"Code":"INTL_BACKSLASH"},"87":{"Usb":68,"Evdev":87,"Xkb":95,"Win":87,"Mac":103,"Code":"F11"},"88":{"Usb":69,"Evdev":88,"Xkb":96,"Win":88,"Mac":111,"Code":"F12"},"89":{"Usb":135,"Evdev":89,"Xkb":97,"Win":115,"Mac":94,"Code":"INTL_RO"},"9":{"Usb":37,"Evdev":9,"Xkb":17,"Win":9,"Mac":28,"Code":"DIGIT8"},"90":{"Usb":146,"Evdev":90,"Xkb":98,"Win":120,"Mac":65535,"Code":"LANG3"},"91":{"Usb":147,"Evdev":91,"Xkb":99,"Win":119,"Mac":65535,"Code":"LANG4"},"92":{"Usb":138,"Evdev":92,"Xkb":100,"Win":121,"Mac":65535,"Code":"CONVERT"},"93":{"Usb":136,"Evdev":93,"Xkb":101,"Win":112,"Mac":65535,"Code":"KANA_MODE"},"94":{"Usb":139,"Evdev":94,"Xkb":102,"Win":123,"Mac":65535,"Code":"NON_CONVERT"},"96":{"Usb":88,"Evdev":96,"Xkb":104,"Win":57372,"Mac":76,"Code":"NUMPAD_ENTER"},"97":{"Usb":228,"Evdev":97,"Xkb":105,"Win":57373,"Mac":62,"Code":"CONTROL_RIGHT"},"98":{"Usb":84,"Evdev":98,"Xkb":106,"Win":57397,"Mac":75,"Code":"NUMPAD_DIVIDE"},"99":{"Usb":70,"Evdev":99,"Xkb":107,"Win":57399,"Mac":65535,"Code":"PRINT_SCREEN"}},"Xkb":{"0":{"Usb":217,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_CLEAR_ENTRY"},"10":{"Usb":30,"Evdev":2,"Xkb":10,"Win":2,"Mac":18,"Code":"DIGIT1"},"100":{"Usb":138,"Evdev":92,"Xkb":100,"Win":121,"Mac":65535,"Code":"CONVERT"},"101":{"Usb":136,"Evdev":93,"Xkb":101,"Win":112,"Mac":65535,"Code":"KANA_MODE"},"102":{"Usb":139,"Evdev":94,"Xkb":102,"Win":123,"Mac":65535,"Code":"NON_CONVERT"},"104":{"Usb":88,"Evdev":96,"Xkb":104,"Win":57372,"Mac":76,"Code":"NUMPAD_ENTER"},"105":{"Usb":228,"Evdev":97,"Xkb":105,"Win":57373,"Mac":62,"Code":"CONTROL_RIGHT"},"106":{"Usb":84,"Evdev":98,"Xkb":106,"Win":57397,"Mac":75,"Code":"NUMPAD_DIVIDE"},"107":{"Usb":70,"Evdev":99,"Xkb":107,"Win":57399,"Mac":65535,"Code":"PRINT_SCREEN"},"108":{"Usb":230,"Evdev":100,"Xkb":108,"Win":57400,"Mac":61,"Code":"ALT_RIGHT"},"11":{"Usb":31,"Evdev":3,"Xkb":11,"Win":3,"Mac":19,"Code":"DIGIT2"},"110":{"Usb":74,"Evdev":102,"Xkb":110,"Win":57415,"Mac":115,"Code":"HOME"},"111":{"Usb":82,"Evdev":103,"Xkb":111,"Win":57416,"Mac":126,"Code":"ARROW_UP"},"112":{"Usb":75,"Evdev":104,"Xkb":112,"Win":57417,"Mac":116,"Code":"PAGE_UP"},"113":{"Usb":80,"Evdev":105,"Xkb":113,"Win":57419,"Mac":123,"Code":"ARROW_LEFT"},"114":{"Usb":79,"Evdev":106,"Xkb":114,"Win":57421,"Mac":124,"Code":"ARROW_RIGHT"},"115":{"Usb":77,"Evdev":107,"Xkb":115,"Win":57423,"Mac":119,"Code":"END"},"116":{"Usb":81,"Evdev":108,"Xkb":116,"Win":57424,"Mac":125,"Code":"ARROW_DOWN"},"117":{"Usb":78,"Evdev":109,"Xkb":117,"Win":57425,"Mac":121,"Code":"PAGE_DOWN"},"118":{"Usb":73,"Evdev":110,"Xkb":118,"Win":57426,"Mac":114,"Code":"INSERT"},"119":{"Usb":76,"Evdev":111,"Xkb":119,"Win":57427,"Mac":117,"Code":"DEL"},"12":{"Usb":32,"Evdev":4,"Xkb":12,"Win":4,"Mac":20,"Code":"DIGIT3"},"121":{"Usb":127,"Evdev":113,"Xkb":121,"Win":57376,"Mac":74,"Code":"VOLUME_MUTE"},"122":{"Usb":129,"Evdev":114,"Xkb":122,"Win":57390,"Mac":73,"Code":"VOLUME_DOWN"},"123":{"Usb":128,"Evdev":115,"Xkb":123,"Win":57392,"Mac":72,"Code":"VOLUME_UP"},"124":{"Usb":102,"Evdev":116,"Xkb":124,"Win":57438,"Mac":65535,"Code":"POWER"},"125":{"Usb":103,"Evdev":117,"Xkb":125,"Win":89,"Mac":81,"Code":"NUMPAD_EQUAL"},"126":{"Usb":215,"Evdev":118,"Xkb":126,"Win":0,"Mac":65535,"Code":"NUMPAD_SIGN_CHANGE"},"127":{"Usb":72,"Evdev":119,"Xkb":127,"Win":69,"Mac":65535,"Code":"PAUSE"},"129":{"Usb":133,"Evdev":121,"Xkb":129,"Win":126,"Mac":95,"Code":"NUMPAD_COMMA"},"13":{"Usb":33,"Evdev":5,"Xkb":13,"Win":5,"Mac":21,"Code":"DIGIT4"},"130":{"Usb":144,"Evdev":122,"Xkb":130,"Win":114,"Mac":104,"Code":"LANG1"},"131":{"Usb":145,"Evdev":123,"Xkb":131,"Win":113,"Mac":102,"Code":"LANG2"},"132":{"Usb":137,"Evdev":124,"Xkb":132,"Win":125,"Mac":93,"Code":"INTL_YEN"},"133":{"Usb":227,"Evdev":125,"Xkb":133,"Win":57435,"Mac":55,"Code":"META_LEFT"},"134":{"Usb":231,"Evdev":126,"Xkb":134,"Win":57436,"Mac":54,"Code":"META_RIGHT"},"135":{"Usb":101,"Evdev":127,"Xkb":135,"Win":57437,"Mac":110,"Code":"CONTEXT_MENU"},"137":{"Usb":121,"Evdev":129,"Xkb":137,"Win":0,"Mac":65535,"Code":"AGAIN"},"139":{"Usb":122,"Evdev":131,"Xkb":139,"Win":57352,"Mac":65535,"Code":"UNDO"},"14":{"Usb":34,"Evdev":6,"Xkb":14,"Win":6,"Mac":23,"Code":"DIGIT5"},"140":{"Usb":119,"Evdev":132,"Xkb":140,"Win":0,"Mac":65535,"Code":"SELECT"},"141":{"Usb":124,"Evdev":133,"Xkb":141,"Win":57368,"Mac":65535,"Code":"COPY"},"142":{"Usb":116,"Evdev":134,"Xkb":142,"Win":0,"Mac":65535,"Code":"OPEN"},"143":{"Usb":125,"Evdev":135,"Xkb":143,"Win":57354,"Mac":65535,"Code":"PASTE"},"144":{"Usb":126,"Evdev":136,"Xkb":144,"Win":0,"Mac":65535,"Code":"FIND"},"145":{"Usb":123,"Evdev":137,"Xkb":145,"Win":57367,"Mac":65535,"Code":"CUT"},"146":{"Usb":117,"Evdev":138,"Xkb":146,"Win":57403,"Mac":65535,"Code":"HELP"},"15":{"Usb":35,"Evdev":7,"Xkb":15,"Win":7,"Mac":22,"Code":"DIGIT6"},"16":{"Usb":36,"Evdev":8,"Xkb":16,"Win":8,"Mac":26,"Code":"DIGIT7"},"17":{"Usb":37,"Evdev":9,"Xkb":17,"Win":9,"Mac":28,"Code":"DIGIT8"},"18":{"Usb":38,"Evdev":10,"Xkb":18,"Win":10,"Mac":25,"Code":"DIGIT9"},"187":{"Usb":182,"Evdev":179,"Xkb":187,"Win":0,"Mac":65535,"Code":"NUMPAD_PAREN_LEFT"},"188":{"Usb":183,"Evdev":180,"Xkb":188,"Win":0,"Mac":65535,"Code":"NUMPAD_PAREN_RIGHT"},"19":{"Usb":39,"Evdev":11,"Xkb":19,"Win":11,"Mac":29,"Code":"DIGIT0"},"191":{"Usb":104,"Evdev":183,"Xkb":191,"Win":100,"Mac":105,"Code":"F13"},"192":{"Usb":105,"Evdev":184,"Xkb":192,"Win":101,"Mac":107,"Code":"F14"},"193":{"Usb":106,"Evdev":185,"Xkb":193,"Win":102,"Mac":113,"Code":"F15"},"194":{"Usb":107,"Evdev":186,"Xkb":194,"Win":103,"Mac":106,"Code":"F16"},"195":{"Usb":108,"Evdev":187,"Xkb":195,"Win":104,"Mac":64,"Code":"F17"},"196":{"Usb":109,"Evdev":188,"Xkb":196,"Win":105,"Mac":79,"Code":"F18"},"197":{"Usb":110,"Evdev":189,"Xkb":197,"Win":106,"Mac":80,"Code":"F19"},"198":{"Usb":111,"Evdev":190,"Xkb":198,"Win":107,"Mac":90,"Code":"F20"},"199":{"Usb":112,"Evdev":191,"Xkb":199,"Win":108,"Mac":65535,"Code":"F21"},"20":{"Usb":45,"Evdev":12,"Xkb":20,"Win":12,"Mac":27,"Code":"MINUS"},"200":{"Usb":113,"Evdev":192,"Xkb":200,"Win":109,"Mac":65535,"Code":"F22"},"201":{"Usb":114,"Evdev":193,"Xkb":201,"Win":110,"Mac":65535,"Code":"F23"},"202":{"Usb":115,"Evdev":194,"Xkb":202,"Win":118,"Mac":65535,"Code":"F24"},"21":{"Usb":46,"Evdev":13,"Xkb":21,"Win":13,"Mac":24,"Code":"EQUAL"},"22":{"Usb":42,"Evdev":14,"Xkb":22,"Win":14,"Mac":51,"Code":"BACKSPACE"},"23":{"Usb":43,"Evdev":15,"Xkb":23,"Win":15,"Mac":48,"Code":"TAB"},"24":{"Usb":20,"Evdev":16,"Xkb":24,"Win":16,"Mac":12,"Code":"US_Q"},"25":{"Usb":26,"Evdev":17,"Xkb":25,"Win":17,"Mac":13,"Code":"US_W"},"26":{"Usb":8,"Evdev":18,"Xkb":26,"Win":18,"Mac":14,"Code":"US_E"},"27":{"Usb":21,"Evdev":19,"Xkb":27,"Win":19,"Mac":15,"Code":"US_R"},"28":{"Usb":23,"Evdev":20,"Xkb":28,"Win":20,"Mac":17,"Code":"US_T"},"29":{"Usb":28,"Evdev":21,"Xkb":29,"Win":21,"Mac":16,"Code":"US_Y"},"30":{"Usb":24,"Evdev":22,"Xkb":30,"Win":22,"Mac":32,"Code":"US_U"},"31":{"Usb":12,"Evdev":23,"Xkb":31,"Win":23,"Mac":34,"Code":"US_I"},"32":{"Usb":18,"Evdev":24,"Xkb":32,"Win":24,"Mac":31,"Code":"US_O"},"33":{"Usb":19,"Evdev":25,"Xkb":33,"Win":25,"Mac":35,"Code":"US_P"},"34":{"Usb":47,"Evdev":26,"Xkb":34,"Win":26,"Mac":33,"Code":"BRACKET_LEFT"},"35":{"Usb":48,"Evdev":27,"Xkb":35,"Win":27,"Mac":30,"Code":"BRACKET_RIGHT"},"36":{"Usb":40,"Evdev":28,"Xkb":36,"Win":28,"Mac":36,"Code":"ENTER"},"37":{"Usb":224,"Evdev":29,"Xkb":37,"Win":29,"Mac":59,"Code":"CONTROL_LEFT"},"38":{"Usb":4,"Evdev":30,"Xkb":38,"Win":30,"Mac":0,"Code":"US_A"},"39":{"Usb":22,"Evdev":31,"Xkb":39,"Win":31,"Mac":1,"Code":"US_S"},"40":{"Usb":7,"Evdev":32,"Xkb":40,"Win":32,"Mac":2,"Code":"US_D"},"41":{"Usb":9,"Evdev":33,"Xkb":41,"Win":33,"Mac":3,"Code":"US_F"},"42":{"Usb":10,"Evdev":34,"Xkb":42,"Win":34,"Mac":5,"Code":"US_G"},"43":{"Usb":11,"Evdev":35,"Xkb":43,"Win":35,"Mac":4,"Code":"US_H"},"44":{"Usb":13,"Evdev":36,"Xkb":44,"Win":36,"Mac":38,"Code":"US_J"},"45":{"Usb":14,"Evdev":37,"Xkb":45,"Win":37,"Mac":40,"Code":"US_K"},"46":{"Usb":15,"Evdev":38,"Xkb":46,"Win":38,"Mac":37,"Code":"US_L"},"47":{"Usb":51,"Evdev":39,"Xkb":47,"Win":39,"Mac":41,"Code":"SEMICOLON"},"48":{"Usb":52,"Evdev":40,"Xkb":48,"Win":40,"Mac":39,"Code":"QUOTE"},"49":{"Usb":53,"Evdev":41,"Xkb":49,"Win":41,"Mac":50,"Code":"BACKQUOTE"},"50":{"Usb":225,"Evdev":42,"Xkb":50,"Win":42,"Mac":56,"Code":"SHIFT_LEFT"},"51":{"Usb":49,"Evdev":43,"Xkb":51,"Win":43,"Mac":42,"Code":"BACKSLASH"},"52":{"Usb":29,"Evdev":44,"Xkb":52,"Win":44,"Mac":6,"Code":"US_Z"},"53":{"Usb":27,"Evdev":45,"Xkb":53,"Win":45,"Mac":7,"Code":"US_X"},"54":{"Usb":6,"Evdev":46,"Xkb":54,"Win":46,"Mac":8,"Code":"US_C"},"55":{"Usb":25,"Evdev":47,"Xkb":55,"Win":47,"Mac":9,"Code":"US_V"},"56":{"Usb":5,"Evdev":48,"Xkb":56,"Win":48,"Mac":11,"Code":"US_B"},"57":{"Usb":17,"Evdev":49,"Xkb":57,"Win":49,"Mac":45,"Code":"US_N"},"58":{"Usb":16,"Evdev":50,"Xkb":58,"Win":50,"Mac":46,"Code":"US_M"},"59":{"Usb":54,"Evdev":51,"Xkb":59,"Win":51,"Mac":43,"Code":"COMMA"},"60":{"Usb":55,"Evdev":52,"Xkb":60,"Win":52,"Mac":47,"Code":"PERIOD"},"61":{"Usb":56,"Evdev":53,"Xkb":61,"Win":53,"Mac":44,"Code":"SLASH"},"62":{"Usb":229,"Evdev":54,"Xkb":62,"Win":54,"Mac":60,"Code":"SHIFT_RIGHT"},"63":{"Usb":85,"Evdev":55,"Xkb":63,"Win":55,"Mac":67,"Code":"NUMPAD_MULTIPLY"},"64":{"Usb":226,"Evdev":56,"Xkb":64,"Win":56,"Mac":58,"Code":"ALT_LEFT"},"65":{"Usb":44,"Evdev":57,"Xkb":65,"Win":57,"Mac":49,"Code":"SPACE"},"66":{"Usb":57,"Evdev":58,"Xkb":66,"Win":58,"Mac":57,"Code":"CAPS_LOCK"},"67":{"Usb":58,"Evdev":59,"Xkb":67,"Win":59,"Mac":122,"Code":"F1"},"68":{"Usb":59,"Evdev":60,"Xkb":68,"Win":60,"Mac":120,"Code":"F2"},"69":{"Usb":60,"Evdev":61,"Xkb":69,"Win":61,"Mac":99,"Code":"F3"},"70":{"Usb":61,"Evdev":62,"Xkb":70,"Win":62,"Mac":118,"Code":"F4"},"71":{"Usb":62,"Evdev":63,"Xkb":71,"Win":63,"Mac":96,"Code":"F5"},"72":{"Usb":63,"Evdev":64,"Xkb":72,"Win":64,"Mac":97,"Code":"F6"},"73":{"Usb":64,"Evdev":65,"Xkb":73,"Win":65,"Mac":98,"Code":"F7"},"74":{"Usb":65,"Evdev":66,"Xkb":74,"Win":66,"Mac":100,"Code":"F8"},"75":{"Usb":66,"Evdev":67,"Xkb":75,"Win":67,"Mac":101,"Code":"F9"},"76":{"Usb":67,"Evdev":68,"Xkb":76,"Win":68,"Mac":109,"Code":"F10"},"77":{"Usb":83,"Evdev":69,"Xkb":77,"Win":57413,"Mac":71,"Code":"NUM_LOCK"},"78":{"Usb":71,"Evdev":70,"Xkb":78,"Win":70,"Mac":65535,"Code":"SCROLL_LOCK"},"79":{"Usb":95,"Evdev":71,"Xkb":79,"Win":71,"Mac":89,"Code":"NUMPAD7"},"80":{"Usb":96,"Evdev":72,"Xkb":80,"Win":72,"Mac":91,"Code":"NUMPAD8"},"81":{"Usb":97,"Evdev":73,"Xkb":81,"Win":73,"Mac":92,"Code":"NUMPAD9"},"82":{"Usb":86,"Evdev":74,"Xkb":82,"Win":74,"Mac":78,"Code":"NUMPAD_SUBTRACT"},"83":{"Usb":92,"Evdev":75,"Xkb":83,"Win":75,"Mac":86,"Code":"NUMPAD4"},"84":{"Usb":93,"Evdev":76,"Xkb":84,"Win":76,"Mac":87,"Code":"NUMPAD5"},"85":{"Usb":94,"Evdev":77,"Xkb":85,"Win":77,"Mac":88,"Code":"NUMPAD6"},"86":{"Usb":87,"Evdev":78,"Xkb":86,"Win":78,"Mac":69,"Code":"NUMPAD_ADD"},"87":{"Usb":89,"Evdev":79,"Xkb":87,"Win":79,"Mac":83,"Code":"NUMPAD1"},"88":{"Usb":90,"Evdev":80,"Xkb":88,"Win":80,"Mac":84,"Code":"NUMPAD2"},"89":{"Usb":91,"Evdev":81,"Xkb":89,"Win":81,"Mac":85,"Code":"NUMPAD3"},"9":{"Usb":41,"Evdev":1,"Xkb":9,"Win":1,"Mac":53,"Code":"ESCAPE"},"90":{"Usb":98,"Evdev":82,"Xkb":90,"Win":82,"Mac":82,"Code":"NUMPAD0"},"91":{"Usb":99,"Evdev":83,"Xkb":91,"Win":83,"Mac":65,"Code":"NUMPAD_DECIMAL"},"93":{"Usb":148,"Evdev":85,"Xkb":93,"Win":0,"Mac":65535,"Code":"LANG5"},"94":{"Usb":100,"Evdev":86,"Xkb":94,"Win":86,"Mac":10,"Code":"INTL_BACKSLASH"},"95":{"Usb":68,"Evdev":87,"Xkb":95,"Win":87,"Mac":103,"Code":"F11"},"96":{"Usb":69,"Evdev":88,"Xkb":96,"Win":88,"Mac":111,"Code":"F12"},"97":{"Usb":135,"Evdev":89,"Xkb":97,"Win":115,"Mac":94,"Code":"INTL_RO"},"98":{"Usb":146,"Evdev":90,"Xkb":98,"Win":120,"Mac":65535,"Code":"LANG3"},"99":{"Usb":147,"Evdev":91,"Xkb":99,"Win":119,"Mac":65535,"Code":"LANG4"}},"Win":{"0":{"Usb":217,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_CLEAR_ENTRY"},"1":{"Usb":41,"Evdev":1,"Xkb":9,"Win":1,"Mac":53,"Code":"ESCAPE"},"10":{"Usb":38,"Evdev":10,"Xkb":18,"Win":10,"Mac":25,"Code":"DIGIT9"},"100":{"Usb":104,"Evdev":183,"Xkb":191,"Win":100,"Mac":105,"Code":"F13"},"101":{"Usb":105,"Evdev":184,"Xkb":192,"Win":101,"Mac":107,"Code":"F14"},"102":{"Usb":106,"Evdev":185,"Xkb":193,"Win":102,"Mac":113,"Code":"F15"},"103":{"Usb":107,"Evdev":186,"Xkb":194,"Win":103,"Mac":106,"Code":"F16"},"104":{"Usb":108,"Evdev":187,"Xkb":195,"Win":104,"Mac":64,"Code":"F17"},"105":{"Usb":109,"Evdev":188,"Xkb":196,"Win":105,"Mac":79,"Code":"F18"},"106":{"Usb":110,"Evdev":189,"Xkb":197,"Win":106,"Mac":80,"Code":"F19"},"107":{"Usb":111,"Evdev":190,"Xkb":198,"Win":107,"Mac":90,"Code":"F20"},"108":{"Usb":112,"Evdev":191,"Xkb":199,"Win":108,"Mac":65535,"Code":"F21"},"109":{"Usb":113,"Evdev":192,"Xkb":200,"Win":109,"Mac":65535,"Code":"F22"},"11":{"Usb":39,"Evdev":11,"Xkb":19,"Win":11,"Mac":29,"Code":"DIGIT0"},"110":{"Usb":114,"Evdev":193,"Xkb":201,"Win":110,"Mac":65535,"Code":"F23"},"112":{"Usb":136,"Evdev":93,"Xkb":101,"Win":112,"Mac":65535,"Code":"KANA_MODE"},"113":{"Usb":145,"Evdev":123,"Xkb":131,"Win":113,"Mac":102,"Code":"LANG2"},"114":{"Usb":144,"Evdev":122,"Xkb":130,"Win":114,"Mac":104,"Code":"LANG1"},"115":{"Usb":135,"Evdev":89,"Xkb":97,"Win":115,"Mac":94,"Code":"INTL_RO"},"118":{"Usb":115,"Evdev":194,"Xkb":202,"Win":118,"Mac":65535,"Code":"F24"},"119":{"Usb":147,"Evdev":91,"Xkb":99,"Win":119,"Mac":65535,"Code":"LANG4"},"12":{"Usb":45,"Evdev":12,"Xkb":20,"Win":12,"Mac":27,"Code":"MINUS"},"120":{"Usb":146,"Evdev":90,"Xkb":98,"Win":120,"Mac":65535,"Code":"LANG3"},"121":{"Usb":138,"Evdev":92,"Xkb":100,"Win":121,"Mac":65535,"Code":"CONVERT"},"123":{"Usb":139,"Evdev":94,"Xkb":102,"Win":123,"Mac":65535,"Code":"NON_CONVERT"},"125":{"Usb":137,"Evdev":124,"Xkb":132,"Win":125,"Mac":93,"Code":"INTL_YEN"},"126":{"Usb":133,"Evdev":121,"Xkb":129,"Win":126,"Mac":95,"Code":"NUMPAD_COMMA"},"13":{"Usb":46,"Evdev":13,"Xkb":21,"Win":13,"Mac":24,"Code":"EQUAL"},"14":{"Usb":42,"Evdev":14,"Xkb":22,"Win":14,"Mac":51,"Code":"BACKSPACE"},"15":{"Usb":43,"Evdev":15,"Xkb":23,"Win":15,"Mac":48,"Code":"TAB"},"16":{"Usb":20,"Evdev":16,"Xkb":24,"Win":16,"Mac":12,"Code":"US_Q"},"17":{"Usb":26,"Evdev":17,"Xkb":25,"Win":17,"Mac":13,"Code":"US_W"},"18":{"Usb":8,"Evdev":18,"Xkb":26,"Win":18,"Mac":14,"Code":"US_E"},"19":{"Usb":21,"Evdev":19,"Xkb":27,"Win":19,"Mac":15,"Code":"US_R"},"2":{"Usb":30,"Evdev":2,"Xkb":10,"Win":2,"Mac":18,"Code":"DIGIT1"},"20":{"Usb":23,"Evdev":20,"Xkb":28,"Win":20,"Mac":17,"Code":"US_T"},"21":{"Usb":28,"Evdev":21,"Xkb":29,"Win":21,"Mac":16,"Code":"US_Y"},"22":{"Usb":24,"Evdev":22,"Xkb":30,"Win":22,"Mac":32,"Code":"US_U"},"23":{"Usb":12,"Evdev":23,"Xkb":31,"Win":23,"Mac":34,"Code":"US_I"},"24":{"Usb":18,"Evdev":24,"Xkb":32,"Win":24,"Mac":31,"Code":"US_O"},"25":{"Usb":19,"Evdev":25,"Xkb":33,"Win":25,"Mac":35,"Code":"US_P"},"252":{"Usb":2,"Evdev":0,"Xkb":0,"Win":252,"Mac":65535,"Code":"USB_POST_FAIL"},"255":{"Usb":1,"Evdev":0,"Xkb":0,"Win":255,"Mac":65535,"Code":"USB_ERROR_ROLL_OVER"},"26":{"Usb":47,"Evdev":26,"Xkb":34,"Win":26,"Mac":33,"Code":"BRACKET_LEFT"},"27":{"Usb":48,"Evdev":27,"Xkb":35,"Win":27,"Mac":30,"Code":"BRACKET_RIGHT"},"28":{"Usb":40,"Evdev":28,"Xkb":36,"Win":28,"Mac":36,"Code":"ENTER"},"29":{"Usb":224,"Evdev":29,"Xkb":37,"Win":29,"Mac":59,"Code":"CONTROL_LEFT"},"3":{"Usb":31,"Evdev":3,"Xkb":11,"Win":3,"Mac":19,"Code":"DIGIT2"},"30":{"Usb":4,"Evdev":30,"Xkb":38,"Win":30,"Mac":0,"Code":"US_A"},"31":{"Usb":22,"Evdev":31,"Xkb":39,"Win":31,"Mac":1,"Code":"US_S"},"32":{"Usb":7,"Evdev":32,"Xkb":40,"Win":32,"Mac":2,"Code":"US_D"},"33":{"Usb":9,"Evdev":33,"Xkb":41,"Win":33,"Mac":3,"Code":"US_F"},"34":{"Usb":10,"Evdev":34,"Xkb":42,"Win":34,"Mac":5,"Code":"US_G"},"35":{"Usb":11,"Evdev":35,"Xkb":43,"Win":35,"Mac":4,"Code":"US_H"},"36":{"Usb":13,"Evdev":36,"Xkb":44,"Win":36,"Mac":38,"Code":"US_J"},"37":{"Usb":14,"Evdev":37,"Xkb":45,"Win":37,"Mac":40,"Code":"US_K"},"38":{"Usb":15,"Evdev":38,"Xkb":46,"Win":38,"Mac":37,"Code":"US_L"},"39":{"Usb":51,"Evdev":39,"Xkb":47,"Win":39,"Mac":41,"Code":"SEMICOLON"},"4":{"Usb":32,"Evdev":4,"Xkb":12,"Win":4,"Mac":20,"Code":"DIGIT3"},"40":{"Usb":52,"Evdev":40,"Xkb":48,"Win":40,"Mac":39,"Code":"QUOTE"},"41":{"Usb":53,"Evdev":41,"Xkb":49,"Win":41,"Mac":50,"Code":"BACKQUOTE"},"42":{"Usb":225,"Evdev":42,"Xkb":50,"Win":42,"Mac":56,"Code":"SHIFT_LEFT"},"43":{"Usb":49,"Evdev":43,"Xkb":51,"Win":43,"Mac":42,"Code":"BACKSLASH"},"44":{"Usb":29,"Evdev":44,"Xkb":52,"Win":44,"Mac":6,"Code":"US_Z"},"45":{"Usb":27,"Evdev":45,"Xkb":53,"Win":45,"Mac":7,"Code":"US_X"},"46":{"Usb":6,"Evdev":46,"Xkb":54,"Win":46,"Mac":8,"Code":"US_C"},"47":{"Usb":25,"Evdev":47,"Xkb":55,"Win":47,"Mac":9,"Code":"US_V"},"48":{"Usb":5,"Evdev":48,"Xkb":56,"Win":48,"Mac":11,"Code":"US_B"},"49":{"Usb":17,"Evdev":49,"Xkb":57,"Win":49,"Mac":45,"Code":"US_N"},"5":{"Usb":33,"Evdev":5,"Xkb":13,"Win":5,"Mac":21,"Code":"DIGIT4"},"50":{"Usb":16,"Evdev":50,"Xkb":58,"Win":50,"Mac":46,"Code":"US_M"},"51":{"Usb":54,"Evdev":51,"Xkb":59,"Win":51,"Mac":43,"Code":"COMMA"},"52":{"Usb":55,"Evdev":52,"Xkb":60,"Win":52,"Mac":47,"Code":"PERIOD"},"53":{"Usb":56,"Evdev":53,"Xkb":61,"Win":53,"Mac":44,"Code":"SLASH"},"54":{"Usb":229,"Evdev":54,"Xkb":62,"Win":54,"Mac":60,"Code":"SHIFT_RIGHT"},"55":{"Usb":85,"Evdev":55,"Xkb":63,"Win":55,"Mac":67,"Code":"NUMPAD_MULTIPLY"},"56":{"Usb":226,"Evdev":56,"Xkb":64,"Win":56,"Mac":58,"Code":"ALT_LEFT"},"57":{"Usb":44,"Evdev":57,"Xkb":65,"Win":57,"Mac":49,"Code":"SPACE"},"57352":{"Usb":122,"Evdev":131,"Xkb":139,"Win":57352,"Mac":65535,"Code":"UNDO"},"57354":{"Usb":125,"Evdev":135,"Xkb":143,"Win":57354,"Mac":65535,"Code":"PASTE"},"57367":{"Usb":123,"Evdev":137,"Xkb":145,"Win":57367,"Mac":65535,"Code":"CUT"},"57368":{"Usb":124,"Evdev":133,"Xkb":141,"Win":57368,"Mac":65535,"Code":"COPY"},"57372":{"Usb":88,"Evdev":96,"Xkb":104,"Win":57372,"Mac":76,"Code":"NUMPAD_ENTER"},"57373":{"Usb":228,"Evdev":97,"Xkb":105,"Win":57373,"Mac":62,"Code":"CONTROL_RIGHT"},"57376":{"Usb":127,"Evdev":113,"Xkb":121,"Win":57376,"Mac":74,"Code":"VOLUME_MUTE"},"57390":{"Usb":129,"Evdev":114,"Xkb":122,"Win":57390,"Mac":73,"Code":"VOLUME_DOWN"},"57392":{"Usb":128,"Evdev":115,"Xkb":123,"Win":57392,"Mac":72,"Code":"VOLUME_UP"},"57397":{"Usb":84,"Evdev":98,"Xkb":106,"Win":57397,"Mac":75,"Code":"NUMPAD_DIVIDE"},"57399":{"Usb":70,"Evdev":99,"Xkb":107,"Win":57399,"Mac":65535,"Code":"PRINT_SCREEN"},"57400":{"Usb":230,"Evdev":100,"Xkb":108,"Win":57400,"Mac":61,"Code":"ALT_RIGHT"},"57403":{"Usb":117,"Evdev":138,"Xkb":146,"Win":57403,"Mac":65535,"Code":"HELP"},"57413":{"Usb":83,"Evdev":69,"Xkb":77,"Win":57413,"Mac":71,"Code":"NUM_LOCK"},"57415":{"Usb":74,"Evdev":102,"Xkb":110,"Win":57415,"Mac":115,"Code":"HOME"},"57416":{"Usb":82,"Evdev":103,"Xkb":111,"Win":57416,"Mac":126,"Code":"ARROW_UP"},"57417":{"Usb":75,"Evdev":104,"Xkb":112,"Win":57417,"Mac":116,"Code":"PAGE_UP"},"57419":{"Usb":80,"Evdev":105,"Xkb":113,"Win":57419,"Mac":123,"Code":"ARROW_LEFT"},"57421":{"Usb":79,"Evdev":106,"Xkb":114,"Win":57421,"Mac":124,"Code":"ARROW_RIGHT"},"57423":{"Usb":77,"Evdev":107,"Xkb":115,"Win":57423,"Mac":119,"Code":"END"},"57424":{"Usb":81,"Evdev":108,"Xkb":116,"Win":57424,"Mac":125,"Code":"ARROW_DOWN"},"57425":{"Usb":78,"Evdev":109,"Xkb":117,"Win":57425,"Mac":121,"Code":"PAGE_DOWN"},"57426":{"Usb":73,"Evdev":110,"Xkb":118,"Win":57426,"Mac":114,"Code":"INSERT"},"57427":{"Usb":76,"Evdev":111,"Xkb":119,"Win":57427,"Mac":117,"Code":"DEL"},"57435":{"Usb":227,"Evdev":125,"Xkb":133,"Win":57435,"Mac":55,"Code":"META_LEFT"},"57436":{"Usb":231,"Evdev":126,"Xkb":134,"Win":57436,"Mac":54,"Code":"META_RIGHT"},"57437":{"Usb":101,"Evdev":127,"Xkb":135,"Win":57437,"Mac":110,"Code":"CONTEXT_MENU"},"57438":{"Usb":102,"Evdev":116,"Xkb":124,"Win":57438,"Mac":65535,"Code":"POWER"},"58":{"Usb":57,"Evdev":58,"Xkb":66,"Win":58,"Mac":57,"Code":"CAPS_LOCK"},"59":{"Usb":58,"Evdev":59,"Xkb":67,"Win":59,"Mac":122,"Code":"F1"},"6":{"Usb":34,"Evdev":6,"Xkb":14,"Win":6,"Mac":23,"Code":"DIGIT5"},"60":{"Usb":59,"Evdev":60,"Xkb":68,"Win":60,"Mac":120,"Code":"F2"},"61":{"Usb":60,"Evdev":61,"Xkb":69,"Win":61,"Mac":99,"Code":"F3"},"62":{"Usb":61,"Evdev":62,"Xkb":70,"Win":62,"Mac":118,"Code":"F4"},"63":{"Usb":62,"Evdev":63,"Xkb":71,"Win":63,"Mac":96,"Code":"F5"},"64":{"Usb":63,"Evdev":64,"Xkb":72,"Win":64,"Mac":97,"Code":"F6"},"65":{"Usb":64,"Evdev":65,"Xkb":73,"Win":65,"Mac":98,"Code":"F7"},"66":{"Usb":65,"Evdev":66,"Xkb":74,"Win":66,"Mac":100,"Code":"F8"},"67":{"Usb":66,"Evdev":67,"Xkb":75,"Win":67,"Mac":101,"Code":"F9"},"68":{"Usb":67,"Evdev":68,"Xkb":76,"Win":68,"Mac":109,"Code":"F10"},"69":{"Usb":72,"Evdev":119,"Xkb":127,"Win":69,"Mac":65535,"Code":"PAUSE"},"7":{"Usb":35,"Evdev":7,"Xkb":15,"Win":7,"Mac":22,"Code":"DIGIT6"},"70":{"Usb":71,"Evdev":70,"Xkb":78,"Win":70,"Mac":65535,"Code":"SCROLL_LOCK"},"71":{"Usb":95,"Evdev":71,"Xkb":79,"Win":71,"Mac":89,"Code":"NUMPAD7"},"72":{"Usb":96,"Evdev":72,"Xkb":80,"Win":72,"Mac":91,"Code":"NUMPAD8"},"73":{"Usb":97,"Evdev":73,"Xkb":81,"Win":73,"Mac":92,"Code":"NUMPAD9"},"74":{"Usb":86,"Evdev":74,"Xkb":82,"Win":74,"Mac":78,"Code":"NUMPAD_SUBTRACT"},"75":{"Usb":92,"Evdev":75,"Xkb":83,"Win":75,"Mac":86,"Code":"NUMPAD4"},"76":{"Usb":93,"Evdev":76,"Xkb":84,"Win":76,"Mac":87,"Code":"NUMPAD5"},"77":{"Usb":94,"Evdev":77,"Xkb":85,"Win":77,"Mac":88,"Code":"NUMPAD6"},"78":{"Usb":87,"Evdev":78,"Xkb":86,"Win":78,"Mac":69,"Code":"NUMPAD_ADD"},"79":{"Usb":89,"Evdev":79,"Xkb":87,"Win":79,"Mac":83,"Code":"NUMPAD1"},"8":{"Usb":36,"Evdev":8,"Xkb":16,"Win":8,"Mac":26,"Code":"DIGIT7"},"80":{"Usb":90,"Evdev":80,"Xkb":88,"Win":80,"Mac":84,"Code":"NUMPAD2"},"81":{"Usb":91,"Evdev":81,"Xkb":89,"Win":81,"Mac":85,"Code":"NUMPAD3"},"82":{"Usb":98,"Evdev":82,"Xkb":90,"Win":82,"Mac":82,"Code":"NUMPAD0"},"83":{"Usb":99,"Evdev":83,"Xkb":91,"Win":83,"Mac":65,"Code":"NUMPAD_DECIMAL"},"86":{"Usb":100,"Evdev":86,"Xkb":94,"Win":86,"Mac":10,"Code":"INTL_BACKSLASH"},"87":{"Usb":68,"Evdev":87,"Xkb":95,"Win":87,"Mac":103,"Code":"F11"},"88":{"Usb":69,"Evdev":88,"Xkb":96,"Win":88,"Mac":111,"Code":"F12"},"89":{"Usb":103,"Evdev":117,"Xkb":125,"Win":89,"Mac":81,"Code":"NUMPAD_EQUAL"},"9":{"Usb":37,"Evdev":9,"Xkb":17,"Win":9,"Mac":28,"Code":"DIGIT8"}},"Mac":{"0":{"Usb":4,"Evdev":30,"Xkb":38,"Win":30,"Mac":0,"Code":"US_A"},"1":{"Usb":22,"Evdev":31,"Xkb":39,"Win":31,"Mac":1,"Code":"US_S"},"10":{"Usb":100,"Evdev":86,"Xkb":94,"Win":86,"Mac":10,"Code":"INTL_BACKSLASH"},"100":{"Usb":65,"Evdev":66,"Xkb":74,"Win":66,"Mac":100,"Code":"F8"},"101":{"Usb":66,"Evdev":67,"Xkb":75,"Win":67,"Mac":101,"Code":"F9"},"102":{"Usb":145,"Evdev":123,"Xkb":131,"Win":113,"Mac":102,"Code":"LANG2"},"103":{"Usb":68,"Evdev":87,"Xkb":95,"Win":87,"Mac":103,"Code":"F11"},"104":{"Usb":144,"Evdev":122,"Xkb":130,"Win":114,"Mac":104,"Code":"LANG1"},"105":{"Usb":104,"Evdev":183,"Xkb":191,"Win":100,"Mac":105,"Code":"F13"},"106":{"Usb":107,"Evdev":186,"Xkb":194,"Win":103,"Mac":106,"Code":"F16"},"107":{"Usb":105,"Evdev":184,"Xkb":192,"Win":101,"Mac":107,"Code":"F14"},"109":{"Usb":67,"Evdev":68,"Xkb":76,"Win":68,"Mac":109,"Code":"F10"},"11":{"Usb":5,"Evdev":48,"Xkb":56,"Win":48,"Mac":11,"Code":"US_B"},"110":{"Usb":101,"Evdev":127,"Xkb":135,"Win":57437,"Mac":110,"Code":"CONTEXT_MENU"},"111":{"Usb":69,"Evdev":88,"Xkb":96,"Win":88,"Mac":111,"Code":"F12"},"113":{"Usb":106,"Evdev":185,"Xkb":193,"Win":102,"Mac":113,"Code":"F15"},"114":{"Usb":73,"Evdev":110,"Xkb":118,"Win":57426,"Mac":114,"Code":"INSERT"},"115":{"Usb":74,"Evdev":102,"Xkb":110,"Win":57415,"Mac":115,"Code":"HOME"},"116":{"Usb":75,"Evdev":104,"Xkb":112,"Win":57417,"Mac":116,"Code":"PAGE_UP"},"117":{"Usb":76,"Evdev":111,"Xkb":119,"Win":57427,"Mac":117,"Code":"DEL"},"118":{"Usb":61,"Evdev":62,"Xkb":70,"Win":62,"Mac":118,"Code":"F4"},"119":{"Usb":77,"Evdev":107,"Xkb":115,"Win":57423,"Mac":119,"Code":"END"},"12":{"Usb":20,"Evdev":16,"Xkb":24,"Win":16,"Mac":12,"Code":"US_Q"},"120":{"Usb":59,"Evdev":60,"Xkb":68,"Win":60,"Mac":120,"Code":"F2"},"121":{"Usb":78,"Evdev":109,"Xkb":117,"Win":57425,"Mac":121,"Code":"PAGE_DOWN"},"122":{"Usb":58,"Evdev":59,"Xkb":67,"Win":59,"Mac":122,"Code":"F1"},"123":{"Usb":80,"Evdev":105,"Xkb":113,"Win":57419,"Mac":123,"Code":"ARROW_LEFT"},"124":{"Usb":79,"Evdev":106,"Xkb":114,"Win":57421,"Mac":124,"Code":"ARROW_RIGHT"},"125":{"Usb":81,"Evdev":108,"Xkb":116,"Win":57424,"Mac":125,"Code":"ARROW_DOWN"},"126":{"Usb":82,"Evdev":103,"Xkb":111,"Win":57416,"Mac":126,"Code":"ARROW_UP"},"13":{"Usb":26,"Evdev":17,"Xkb":25,"Win":17,"Mac":13,"Code":"US_W"},"14":{"Usb":8,"Evdev":18,"Xkb":26,"Win":18,"Mac":14,"Code":"US_E"},"15":{"Usb":21,"Evdev":19,"Xkb":27,"Win":19,"Mac":15,"Code":"US_R"},"16":{"Usb":28,"Evdev":21,"Xkb":29,"Win":21,"Mac":16,"Code":"US_Y"},"17":{"Usb":23,"Evdev":20,"Xkb":28,"Win":20,"Mac":17,"Code":"US_T"},"18":{"Usb":30,"Evdev":2,"Xkb":10,"Win":2,"Mac":18,"Code":"DIGIT1"},"19":{"Usb":31,"Evdev":3,"Xkb":11,"Win":3,"Mac":19,"Code":"DIGIT2"},"2":{"Usb":7,"Evdev":32,"Xkb":40,"Win":32,"Mac":2,"Code":"US_D"},"20":{"Usb":32,"Evdev":4,"Xkb":12,"Win":4,"Mac":20,"Code":"DIGIT3"},"21":{"Usb":33,"Evdev":5,"Xkb":13,"Win":5,"Mac":21,"Code":"DIGIT4"},"22":{"Usb":35,"Evdev":7,"Xkb":15,"Win":7,"Mac":22,"Code":"DIGIT6"},"23":{"Usb":34,"Evdev":6,"Xkb":14,"Win":6,"Mac":23,"Code":"DIGIT5"},"24":{"Usb":46,"Evdev":13,"Xkb":21,"Win":13,"Mac":24,"Code":"EQUAL"},"25":{"Usb":38,"Evdev":10,"Xkb":18,"Win":10,"Mac":25,"Code":"DIGIT9"},"26":{"Usb":36,"Evdev":8,"Xkb":16,"Win":8,"Mac":26,"Code":"DIGIT7"},"27":{"Usb":45,"Evdev":12,"Xkb":20,"Win":12,"Mac":27,"Code":"MINUS"},"28":{"Usb":37,"Evdev":9,"Xkb":17,"Win":9,"Mac":28,"Code":"DIGIT8"},"29":{"Usb":39,"Evdev":11,"Xkb":19,"Win":11,"Mac":29,"Code":"DIGIT0"},"3":{"Usb":9,"Evdev":33,"Xkb":41,"Win":33,"Mac":3,"Code":"US_F"},"30":{"Usb":48,"Evdev":27,"Xkb":35,"Win":27,"Mac":30,"Code":"BRACKET_RIGHT"},"31":{"Usb":18,"Evdev":24,"Xkb":32,"Win":24,"Mac":31,"Code":"US_O"},"32":{"Usb":24,"Evdev":22,"Xkb":30,"Win":22,"Mac":32,"Code":"US_U"},"33":{"Usb":47,"Evdev":26,"Xkb":34,"Win":26,"Mac":33,"Code":"BRACKET_LEFT"},"34":{"Usb":12,"Evdev":23,"Xkb":31,"Win":23,"Mac":34,"Code":"US_I"},"35":{"Usb":19,"Evdev":25,"Xkb":33,"Win":25,"Mac":35,"Code":"US_P"},"36":{"Usb":40,"Evdev":28,"Xkb":36,"Win":28,"Mac":36,"Code":"ENTER"},"37":{"Usb":15,"Evdev":38,"Xkb":46,"Win":38,"Mac":37,"Code":"US_L"},"38":{"Usb":13,"Evdev":36,"Xkb":44,"Win":36,"Mac":38,"Code":"US_J"},"39":{"Usb":52,"Evdev":40,"Xkb":48,"Win":40,"Mac":39,"Code":"QUOTE"},"4":{"Usb":11,"Evdev":35,"Xkb":43,"Win":35,"Mac":4,"Code":"US_H"},"40":{"Usb":14,"Evdev":37,"Xkb":45,"Win":37,"Mac":40,"Code":"US_K"},"41":{"Usb":51,"Evdev":39,"Xkb":47,"Win":39,"Mac":41,"Code":"SEMICOLON"},"42":{"Usb":49,"Evdev":43,"Xkb":51,"Win":43,"Mac":42,"Code":"BACKSLASH"},"43":{"Usb":54,"Evdev":51,"Xkb":59,"Win":51,"Mac":43,"Code":"COMMA"},"44":{"Usb":56,"Evdev":53,"Xkb":61,"Win":53,"Mac":44,"Code":"SLASH"},"45":{"Usb":17,"Evdev":49,"Xkb":57,"Win":49,"Mac":45,"Code":"US_N"},"46":{"Usb":16,"Evdev":50,"Xkb":58,"Win":50,"Mac":46,"Code":"US_M"},"47":{"Usb":55,"Evdev":52,"Xkb":60,"Win":52,"Mac":47,"Code":"PERIOD"},"48":{"Usb":43,"Evdev":15,"Xkb":23,"Win":15,"Mac":48,"Code":"TAB"},"49":{"Usb":44,"Evdev":57,"Xkb":65,"Win":57,"Mac":49,"Code":"SPACE"},"5":{"Usb":10,"Evdev":34,"Xkb":42,"Win":34,"Mac":5,"Code":"US_G"},"50":{"Usb":53,"Evdev":41,"Xkb":49,"Win":41,"Mac":50,"Code":"BACKQUOTE"},"51":{"Usb":42,"Evdev":14,"Xkb":22,"Win":14,"Mac":51,"Code":"BACKSPACE"},"53":{"Usb":41,"Evdev":1,"Xkb":9,"Win":1,"Mac":53,"Code":"ESCAPE"},"54":{"Usb":231,"Evdev":126,"Xkb":134,"Win":57436,"Mac":54,"Code":"META_RIGHT"},"55":{"Usb":227,"Evdev":125,"Xkb":133,"Win":57435,"Mac":55,"Code":"META_LEFT"},"56":{"Usb":225,"Evdev":42,"Xkb":50,"Win":42,"Mac":56,"Code":"SHIFT_LEFT"},"57":{"Usb":57,"Evdev":58,"Xkb":66,"Win":58,"Mac":57,"Code":"CAPS_LOCK"},"58":{"Usb":226,"Evdev":56,"Xkb":64,"Win":56,"Mac":58,"Code":"ALT_LEFT"},"59":{"Usb":224,"Evdev":29,"Xkb":37,"Win":29,"Mac":59,"Code":"CONTROL_LEFT"},"6":{"Usb":29,"Evdev":44,"Xkb":52,"Win":44,"Mac":6,"Code":"US_Z"},"60":{"Usb":229,"Evdev":54,"Xkb":62,"Win":54,"Mac":60,"Code":"SHIFT_RIGHT"},"61":{"Usb":230,"Evdev":100,"Xkb":108,"Win":57400,"Mac":61,"Code":"ALT_RIGHT"},"62":{"Usb":228,"Evdev":97,"Xkb":105,"Win":57373,"Mac":62,"Code":"CONTROL_RIGHT"},"64":{"Usb":108,"Evdev":187,"Xkb":195,"Win":104,"Mac":64,"Code":"F17"},"65":{"Usb":99,"Evdev":83,"Xkb":91,"Win":83,"Mac":65,"Code":"NUMPAD_DECIMAL"},"65535":{"Usb":217,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_CLEAR_ENTRY"},"67":{"Usb":85,"Evdev":55,"Xkb":63,"Win":55,"Mac":67,"Code":"NUMPAD_MULTIPLY"},"69":{"Usb":87,"Evdev":78,"Xkb":86,"Win":78,"Mac":69,"Code":"NUMPAD_ADD"},"7":{"Usb":27,"Evdev":45,"Xkb":53,"Win":45,"Mac":7,"Code":"US_X"},"71":{"Usb":83,"Evdev":69,"Xkb":77,"Win":57413,"Mac":71,"Code":"NUM_LOCK"},"72":{"Usb":128,"Evdev":115,"Xkb":123,"Win":57392,"Mac":72,"Code":"VOLUME_UP"},"73":{"Usb":129,"Evdev":114,"Xkb":122,"Win":57390,"Mac":73,"Code":"VOLUME_DOWN"},"74":{"Usb":127,"Evdev":113,"Xkb":121,"Win":57376,"Mac":74,"Code":"VOLUME_MUTE"},"75":{"Usb":84,"Evdev":98,"Xkb":106,"Win":57397,"Mac":75,"Code":"NUMPAD_DIVIDE"},"76":{"Usb":88,"Evdev":96,"Xkb":104,"Win":57372,"Mac":76,"Code":"NUMPAD_ENTER"},"78":{"Usb":86,"Evdev":74,"Xkb":82,"Win":74,"Mac":78,"Code":"NUMPAD_SUBTRACT"},"79":{"Usb":109,"Evdev":188,"Xkb":196,"Win":105,"Mac":79,"Code":"F18"},"8":{"Usb":6,"Evdev":46,"Xkb":54,"Win":46,"Mac":8,"Code":"US_C"},"80":{"Usb":110,"Evdev":189,"Xkb":197,"Win":106,"Mac":80,"Code":"F19"},"81":{"Usb":103,"Evdev":117,"Xkb":125,"Win":89,"Mac":81,"Code":"NUMPAD_EQUAL"},"82":{"Usb":98,"Evdev":82,"Xkb":90,"Win":82,"Mac":82,"Code":"NUMPAD0"},"83":{"Usb":89,"Evdev":79,"Xkb":87,"Win":79,"Mac":83,"Code":"NUMPAD1"},"84":{"Usb":90,"Evdev":80,"Xkb":88,"Win":80,"Mac":84,"Code":"NUMPAD2"},"85":{"Usb":91,"Evdev":81,"Xkb":89,"Win":81,"Mac":85,"Code":"NUMPAD3"},"86":{"Usb":92,"Evdev":75,"Xkb":83,"Win":75,"Mac":86,"Code":"NUMPAD4"},"87":{"Usb":93,"Evdev":76,"Xkb":84,"Win":76,"Mac":87,"Code":"NUMPAD5"},"88":{"Usb":94,"Evdev":77,"Xkb":85,"Win":77,"Mac":88,"Code":"NUMPAD6"},"89":{"Usb":95,"Evdev":71,"Xkb":79,"Win":71,"Mac":89,"Code":"NUMPAD7"},"9":{"Usb":25,"Evdev":47,"Xkb":55,"Win":47,"Mac":9,"Code":"US_V"},"90":{"Usb":111,"Evdev":190,"Xkb":198,"Win":107,"Mac":90,"Code":"F20"},"91":{"Usb":96,"Evdev":72,"Xkb":80,"Win":72,"Mac":91,"Code":"NUMPAD8"},"92":{"Usb":97,"Evdev":73,"Xkb":81,"Win":73,"Mac":92,"Code":"NUMPAD9"},"93":{"Usb":137,"Evdev":124,"Xkb":132,"Win":125,"Mac":93,"Code":"INTL_YEN"},"94":{"Usb":135,"Evdev":89,"Xkb":97,"Win":115,"Mac":94,"Code":"INTL_RO"},"95":{"Usb":133,"Evdev":121,"Xkb":129,"Win":126,"Mac":95,"Code":"NUMPAD_COMMA"},"96":{"Usb":62,"Evdev":63,"Xkb":71,"Win":63,"Mac":96,"Code":"F5"},"97":{"Usb":63,"Evdev":64,"Xkb":72,"Win":64,"Mac":97,"Code":"F6"},"98":{"Usb":64,"Evdev":65,"Xkb":73,"Win":65,"Mac":98,"Code":"F7"},"99":{"Usb":60,"Evdev":61,"Xkb":69,"Win":61,"Mac":99,"Code":"F3"}},"Code":{"ABORT":{"Usb":155,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"ABORT"},"AGAIN":{"Usb":121,"Evdev":129,"Xkb":137,"Win":0,"Mac":65535,"Code":"AGAIN"},"ALT_LEFT":{"Usb":226,"Evdev":56,"Xkb":64,"Win":56,"Mac":58,"Code":"ALT_LEFT"},"ALT_RIGHT":{"Usb":230,"Evdev":100,"Xkb":108,"Win":57400,"Mac":61,"Code":"ALT_RIGHT"},"ARROW_DOWN":{"Usb":81,"Evdev":108,"Xkb":116,"Win":57424,"Mac":125,"Code":"ARROW_DOWN"},"ARROW_LEFT":{"Usb":80,"Evdev":105,"Xkb":113,"Win":57419,"Mac":123,"Code":"ARROW_LEFT"},"ARROW_RIGHT":{"Usb":79,"Evdev":106,"Xkb":114,"Win":57421,"Mac":124,"Code":"ARROW_RIGHT"},"ARROW_UP":{"Usb":82,"Evdev":103,"Xkb":111,"Win":57416,"Mac":126,"Code":"ARROW_UP"},"BACKQUOTE":{"Usb":53,"Evdev":41,"Xkb":49,"Win":41,"Mac":50,"Code":"BACKQUOTE"},"BACKSLASH":{"Usb":49,"Evdev":43,"Xkb":51,"Win":43,"Mac":42,"Code":"BACKSLASH"},"BACKSPACE":{"Usb":42,"Evdev":14,"Xkb":22,"Win":14,"Mac":51,"Code":"BACKSPACE"},"BRACKET_LEFT":{"Usb":47,"Evdev":26,"Xkb":34,"Win":26,"Mac":33,"Code":"BRACKET_LEFT"},"BRACKET_RIGHT":{"Usb":48,"Evdev":27,"Xkb":35,"Win":27,"Mac":30,"Code":"BRACKET_RIGHT"},"CAPS_LOCK":{"Usb":57,"Evdev":58,"Xkb":66,"Win":58,"Mac":57,"Code":"CAPS_LOCK"},"COMMA":{"Usb":54,"Evdev":51,"Xkb":59,"Win":51,"Mac":43,"Code":"COMMA"},"CONTEXT_MENU":{"Usb":101,"Evdev":127,"Xkb":135,"Win":57437,"Mac":110,"Code":"CONTEXT_MENU"},"CONTROL_LEFT":{"Usb":224,"Evdev":29,"Xkb":37,"Win":29,"Mac":59,"Code":"CONTROL_LEFT"},"CONTROL_RIGHT":{"Usb":228,"Evdev":97,"Xkb":105,"Win":57373,"Mac":62,"Code":"CONTROL_RIGHT"},"CONVERT":{"Usb":138,"Evdev":92,"Xkb":100,"Win":121,"Mac":65535,"Code":"CONVERT"},"COPY":{"Usb":124,"Evdev":133,"Xkb":141,"Win":57368,"Mac":65535,"Code":"COPY"},"CUT":{"Usb":123,"Evdev":137,"Xkb":145,"Win":57367,"Mac":65535,"Code":"CUT"},"DEL":{"Usb":76,"Evdev":111,"Xkb":119,"Win":57427,"Mac":117,"Code":"DEL"},"DIGIT0":{"Usb":39,"Evdev":11,"Xkb":19,"Win":11,"Mac":29,"Code":"DIGIT0"},"DIGIT1":{"Usb":30,"Evdev":2,"Xkb":10,"Win":2,"Mac":18,"Code":"DIGIT1"},"DIGIT2":{"Usb":31,"Evdev":3,"Xkb":11,"Win":3,"Mac":19,"Code":"DIGIT2"},"DIGIT3":{"Usb":32,"Evdev":4,"Xkb":12,"Win":4,"Mac":20,"Code":"DIGIT3"},"DIGIT4":{"Usb":33,"Evdev":5,"Xkb":13,"Win":5,"Mac":21,"Code":"DIGIT4"},"DIGIT5":{"Usb":34,"Evdev":6,"Xkb":14,"Win":6,"Mac":23,"Code":"DIGIT5"},"DIGIT6":{"Usb":35,"Evdev":7,"Xkb":15,"Win":7,"Mac":22,"Code":"DIGIT6"},"DIGIT7":{"Usb":36,"Evdev":8,"Xkb":16,"Win":8,"Mac":26,"Code":"DIGIT7"},"DIGIT8":{"Usb":37,"Evdev":9,"Xkb":17,"Win":9,"Mac":28,"Code":"DIGIT8"},"DIGIT9":{"Usb":38,"Evdev":10,"Xkb":18,"Win":10,"Mac":25,"Code":"DIGIT9"},"END":{"Usb":77,"Evdev":107,"Xkb":115,"Win":57423,"Mac":119,"Code":"END"},"ENTER":{"Usb":40,"Evdev":28,"Xkb":36,"Win":28,"Mac":36,"Code":"ENTER"},"EQUAL":{"Usb":46,"Evdev":13,"Xkb":21,"Win":13,"Mac":24,"Code":"EQUAL"},"ESCAPE":{"Usb":41,"Evdev":1,"Xkb":9,"Win":1,"Mac":53,"Code":"ESCAPE"},"F1":{"Usb":58,"Evdev":59,"Xkb":67,"Win":59,"Mac":122,"Code":"F1"},"F10":{"Usb":67,"Evdev":68,"Xkb":76,"Win":68,"Mac":109,"Code":"F10"},"F11":{"Usb":68,"Evdev":87,"Xkb":95,"Win":87,"Mac":103,"Code":"F11"},"F12":{"Usb":69,"Evdev":88,"Xkb":96,"Win":88,"Mac":111,"Code":"F12"},"F13":{"Usb":104,"Evdev":183,"Xkb":191,"Win":100,"Mac":105,"Code":"F13"},"F14":{"Usb":105,"Evdev":184,"Xkb":192,"Win":101,"Mac":107,"Code":"F14"},"F15":{"Usb":106,"Evdev":185,"Xkb":193,"Win":102,"Mac":113,"Code":"F15"},"F16":{"Usb":107,"Evdev":186,"Xkb":194,"Win":103,"Mac":106,"Code":"F16"},"F17":{"Usb":108,"Evdev":187,"Xkb":195,"Win":104,"Mac":64,"Code":"F17"},"F18":{"Usb":109,"Evdev":188,"Xkb":196,"Win":105,"Mac":79,"Code":"F18"},"F19":{"Usb":110,"Evdev":189,"Xkb":197,"Win":106,"Mac":80,"Code":"F19"},"F2":{"Usb":59,"Evdev":60,"Xkb":68,"Win":60,"Mac":120,"Code":"F2"},"F20":{"Usb":111,"Evdev":190,"Xkb":198,"Win":107,"Mac":90,"Code":"F20"},"F21":{"Usb":112,"Evdev":191,"Xkb":199,"Win":108,"Mac":65535,"Code":"F21"},"F22":{"Usb":113,"Evdev":192,"Xkb":200,"Win":109,"Mac":65535,"Code":"F22"},"F23":{"Usb":114,"Evdev":193,"Xkb":201,"Win":110,"Mac":65535,"Code":"F23"},"F24":{"Usb":115,"Evdev":194,"Xkb":202,"Win":118,"Mac":65535,"Code":"F24"},"F3":{"Usb":60,"Evdev":61,"Xkb":69,"Win":61,"Mac":99,"Code":"F3"},"F4":{"Usb":61,"Evdev":62,"Xkb":70,"Win":62,"Mac":118,"Code":"F4"},"F5":{"Usb":62,"Evdev":63,"Xkb":71,"Win":63,"Mac":96,"Code":"F5"},"F6":{"Usb":63,"Evdev":64,"Xkb":72,"Win":64,"Mac":97,"Code":"F6"},"F7":{"Usb":64,"Evdev":65,"Xkb":73,"Win":65,"Mac":98,"Code":"F7"},"F8":{"Usb":65,"Evdev":66,"Xkb":74,"Win":66,"Mac":100,"Code":"F8"},"F9":{"Usb":66,"Evdev":67,"Xkb":75,"Win":67,"Mac":101,"Code":"F9"},"FIND":{"Usb":126,"Evdev":136,"Xkb":144,"Win":0,"Mac":65535,"Code":"FIND"},"HELP":{"Usb":117,"Evdev":138,"Xkb":146,"Win":57403,"Mac":65535,"Code":"HELP"},"HOME":{"Usb":74,"Evdev":102,"Xkb":110,"Win":57415,"Mac":115,"Code":"HOME"},"INSERT":{"Usb":73,"Evdev":110,"Xkb":118,"Win":57426,"Mac":114,"Code":"INSERT"},"INTL_BACKSLASH":{"Usb":100,"Evdev":86,"Xkb":94,"Win":86,"Mac":10,"Code":"INTL_BACKSLASH"},"INTL_RO":{"Usb":135,"Evdev":89,"Xkb":97,"Win":115,"Mac":94,"Code":"INTL_RO"},"INTL_YEN":{"Usb":137,"Evdev":124,"Xkb":132,"Win":125,"Mac":93,"Code":"INTL_YEN"},"KANA_MODE":{"Usb":136,"Evdev":93,"Xkb":101,"Win":112,"Mac":65535,"Code":"KANA_MODE"},"LANG1":{"Usb":144,"Evdev":122,"Xkb":130,"Win":114,"Mac":104,"Code":"LANG1"},"LANG2":{"Usb":145,"Evdev":123,"Xkb":131,"Win":113,"Mac":102,"Code":"LANG2"},"LANG3":{"Usb":146,"Evdev":90,"Xkb":98,"Win":120,"Mac":65535,"Code":"LANG3"},"LANG4":{"Usb":147,"Evdev":91,"Xkb":99,"Win":119,"Mac":65535,"Code":"LANG4"},"LANG5":{"Usb":148,"Evdev":85,"Xkb":93,"Win":0,"Mac":65535,"Code":"LANG5"},"META_LEFT":{"Usb":227,"Evdev":125,"Xkb":133,"Win":57435,"Mac":55,"Code":"META_LEFT"},"META_RIGHT":{"Usb":231,"Evdev":126,"Xkb":134,"Win":57436,"Mac":54,"Code":"META_RIGHT"},"MINUS":{"Usb":45,"Evdev":12,"Xkb":20,"Win":12,"Mac":27,"Code":"MINUS"},"NON_CONVERT":{"Usb":139,"Evdev":94,"Xkb":102,"Win":123,"Mac":65535,"Code":"NON_CONVERT"},"NUMPAD0":{"Usb":98,"Evdev":82,"Xkb":90,"Win":82,"Mac":82,"Code":"NUMPAD0"},"NUMPAD1":{"Usb":89,"Evdev":79,"Xkb":87,"Win":79,"Mac":83,"Code":"NUMPAD1"},"NUMPAD2":{"Usb":90,"Evdev":80,"Xkb":88,"Win":80,"Mac":84,"Code":"NUMPAD2"},"NUMPAD3":{"Usb":91,"Evdev":81,"Xkb":89,"Win":81,"Mac":85,"Code":"NUMPAD3"},"NUMPAD4":{"Usb":92,"Evdev":75,"Xkb":83,"Win":75,"Mac":86,"Code":"NUMPAD4"},"NUMPAD5":{"Usb":93,"Evdev":76,"Xkb":84,"Win":76,"Mac":87,"Code":"NUMPAD5"},"NUMPAD6":{"Usb":94,"Evdev":77,"Xkb":85,"Win":77,"Mac":88,"Code":"NUMPAD6"},"NUMPAD7":{"Usb":95,"Evdev":71,"Xkb":79,"Win":71,"Mac":89,"Code":"NUMPAD7"},"NUMPAD8":{"Usb":96,"Evdev":72,"Xkb":80,"Win":72,"Mac":91,"Code":"NUMPAD8"},"NUMPAD9":{"Usb":97,"Evdev":73,"Xkb":81,"Win":73,"Mac":92,"Code":"NUMPAD9"},"NUMPAD_ADD":{"Usb":87,"Evdev":78,"Xkb":86,"Win":78,"Mac":69,"Code":"NUMPAD_ADD"},"NUMPAD_BACKSPACE":{"Usb":187,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_BACKSPACE"},"NUMPAD_CLEAR":{"Usb":216,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_CLEAR"},"NUMPAD_CLEAR_ENTRY":{"Usb":217,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_CLEAR_ENTRY"},"NUMPAD_COMMA":{"Usb":133,"Evdev":121,"Xkb":129,"Win":126,"Mac":95,"Code":"NUMPAD_COMMA"},"NUMPAD_DECIMAL":{"Usb":99,"Evdev":83,"Xkb":91,"Win":83,"Mac":65,"Code":"NUMPAD_DECIMAL"},"NUMPAD_DIVIDE":{"Usb":84,"Evdev":98,"Xkb":106,"Win":57397,"Mac":75,"Code":"NUMPAD_DIVIDE"},"NUMPAD_ENTER":{"Usb":88,"Evdev":96,"Xkb":104,"Win":57372,"Mac":76,"Code":"NUMPAD_ENTER"},"NUMPAD_EQUAL":{"Usb":103,"Evdev":117,"Xkb":125,"Win":89,"Mac":81,"Code":"NUMPAD_EQUAL"},"NUMPAD_MEMORY_ADD":{"Usb":211,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_ADD"},"NUMPAD_MEMORY_CLEAR":{"Usb":210,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_CLEAR"},"NUMPAD_MEMORY_RECALL":{"Usb":209,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_RECALL"},"NUMPAD_MEMORY_STORE":{"Usb":208,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_STORE"},"NUMPAD_MEMORY_SUBTRACT":{"Usb":212,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_SUBTRACT"},"NUMPAD_MULTIPLY":{"Usb":85,"Evdev":55,"Xkb":63,"Win":55,"Mac":67,"Code":"NUMPAD_MULTIPLY"},"NUMPAD_PAREN_LEFT":{"Usb":182,"Evdev":179,"Xkb":187,"Win":0,"Mac":65535,"Code":"NUMPAD_PAREN_LEFT"},"NUMPAD_PAREN_RIGHT":{"Usb":183,"Evdev":180,"Xkb":188,"Win":0,"Mac":65535,"Code":"NUMPAD_PAREN_RIGHT"},"NUMPAD_SIGN_CHANGE":{"Usb":215,"Evdev":118,"Xkb":126,"Win":0,"Mac":65535,"Code":"NUMPAD_SIGN_CHANGE"},"NUMPAD_SUBTRACT":{"Usb":86,"Evdev":74,"Xkb":82,"Win":74,"Mac":78,"Code":"NUMPAD_SUBTRACT"},"NUM_LOCK":{"Usb":83,"Evdev":69,"Xkb":77,"Win":57413,"Mac":71,"Code":"NUM_LOCK"},"OPEN":{"Usb":116,"Evdev":134,"Xkb":142,"Win":0,"Mac":65535,"Code":"OPEN"},"PAGE_DOWN":{"Usb":78,"Evdev":109,"Xkb":117,"Win":57425,"Mac":121,"Code":"PAGE_DOWN"},"PAGE_UP":{"Usb":75,"Evdev":104,"Xkb":112,"Win":57417,"Mac":116,"Code":"PAGE_UP"},"PASTE":{"Usb":125,"Evdev":135,"Xkb":143,"Win":57354,"Mac":65535,"Code":"PASTE"},"PAUSE":{"Usb":72,"Evdev":119,"Xkb":127,"Win":69,"Mac":65535,"Code":"PAUSE"},"PERIOD":{"Usb":55,"Evdev":52,"Xkb":60,"Win":52,"Mac":47,"Code":"PERIOD"},"POWER":{"Usb":102,"Evdev":116,"Xkb":124,"Win":57438,"Mac":65535,"Code":"POWER"},"PRINT_SCREEN":{"Usb":70,"Evdev":99,"Xkb":107,"Win":57399,"Mac":65535,"Code":"PRINT_SCREEN"},"PROPS":{"Usb":163,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"PROPS"},"QUOTE":{"Usb":52,"Evdev":40,"Xkb":48,"Win":40,"Mac":39,"Code":"QUOTE"},"SCROLL_LOCK":{"Usb":71,"Evdev":70,"Xkb":78,"Win":70,"Mac":65535,"Code":"SCROLL_LOCK"},"SELECT":{"Usb":119,"Evdev":132,"Xkb":140,"Win":0,"Mac":65535,"Code":"SELECT"},"SEMICOLON":{"Usb":51,"Evdev":39,"Xkb":47,"Win":39,"Mac":41,"Code":"SEMICOLON"},"SHIFT_LEFT":{"Usb":225,"Evdev":42,"Xkb":50,"Win":42,"Mac":56,"Code":"SHIFT_LEFT"},"SHIFT_RIGHT":{"Usb":229,"Evdev":54,"Xkb":62,"Win":54,"Mac":60,"Code":"SHIFT_RIGHT"},"SLASH":{"Usb":56,"Evdev":53,"Xkb":61,"Win":53,"Mac":44,"Code":"SLASH"},"SPACE":{"Usb":44,"Evdev":57,"Xkb":65,"Win":57,"Mac":49,"Code":"SPACE"},"TAB":{"Usb":43,"Evdev":15,"Xkb":23,"Win":15,"Mac":48,"Code":"TAB"},"UNDO":{"Usb":122,"Evdev":131,"Xkb":139,"Win":57352,"Mac":65535,"Code":"UNDO"},"USB_ERROR_ROLL_OVER":{"Usb":1,"Evdev":0,"Xkb":0,"Win":255,"Mac":65535,"Code":"USB_ERROR_ROLL_OVER"},"USB_ERROR_UNDEFINED":{"Usb":3,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"USB_ERROR_UNDEFINED"},"USB_POST_FAIL":{"Usb":2,"Evdev":0,"Xkb":0,"Win":252,"Mac":65535,"Code":"USB_POST_FAIL"},"USB_RESERVED":{"Usb":0,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"USB_RESERVED"},"US_A":{"Usb":4,"Evdev":30,"Xkb":38,"Win":30,"Mac":0,"Code":"US_A"},"US_B":{"Usb":5,"Evdev":48,"Xkb":56,"Win":48,"Mac":11,"Code":"US_B"},"US_C":{"Usb":6,"Evdev":46,"Xkb":54,"Win":46,"Mac":8,"Code":"US_C"},"US_D":{"Usb":7,"Evdev":32,"Xkb":40,"Win":32,"Mac":2,"Code":"US_D"},"US_E":{"Usb":8,"Evdev":18,"Xkb":26,"Win":18,"Mac":14,"Code":"US_E"},"US_F":{"Usb":9,"Evdev":33,"Xkb":41,"Win":33,"Mac":3,"Code":"US_F"},"US_G":{"Usb":10,"Evdev":34,"Xkb":42,"Win":34,"Mac":5,"Code":"US_G"},"US_H":{"Usb":11,"Evdev":35,"Xkb":43,"Win":35,"Mac":4,"Code":"US_H"},"US_I":{"Usb":12,"Evdev":23,"Xkb":31,"Win":23,"Mac":34,"Code":"US_I"},"US_J":{"Usb":13,"Evdev":36,"Xkb":44,"Win":36,"Mac":38,"Code":"US_J"},"US_K":{"Usb":14,"Evdev":37,"Xkb":45,"Win":37,"Mac":40,"Code":"US_K"},"US_L":{"Usb":15,"Evdev":38,"Xkb":46,"Win":38,"Mac":37,"Code":"US_L"},"US_M":{"Usb":16,"Evdev":50,"Xkb":58,"Win":50,"Mac":46,"Code":"US_M"},"US_N":{"Usb":17,"Evdev":49,"Xkb":57,"Win":49,"Mac":45,"Code":"US_N"},"US_O":{"Usb":18,"Evdev":24,"Xkb":32,"Win":24,"Mac":31,"Code":"US_O"},"US_P":{"Usb":19,"Evdev":25,"Xkb":33,"Win":25,"Mac":35,"Code":"US_P"},"US_Q":{"Usb":20,"Evdev":16,"Xkb":24,"Win":16,"Mac":12,"Code":"US_Q"},"US_R":{"Usb":21,"Evdev":19,"Xkb":27,"Win":19,"Mac":15,"Code":"US_R"},"US_S":{"Usb":22,"Evdev":31,"Xkb":39,"Win":31,"Mac":1,"Code":"US_S"},"US_T":{"Usb":23,"Evdev":20,"Xkb":28,"Win":20,"Mac":17,"Code":"US_T"},"US_U":{"Usb":24,"Evdev":22,"Xkb":30,"Win":22,"Mac":32,"Code":"US_U"},"US_V":{"Usb":25,"Evdev":47,"Xkb":55,"Win":47,"Mac":9,"Code":"US_V"},"US_W":{"Usb":26,"Evdev":17,"Xkb":25,"Win":17,"Mac":13,"Code":"US_W"},"US_X":{"Usb":27,"Evdev":45,"Xkb":53,"Win":45,"Mac":7,"Code":"US_X"},"US_Y":{"Usb":28,"Evdev":21,"Xkb":29,"Win":21,"Mac":16,"Code":"US_Y"},"US_Z":{"Usb":29,"Evdev":44,"Xkb":52,"Win":44,"Mac":6,"Code":"US_Z"},"VOLUME_DOWN":{"Usb":129,"Evdev":114,"Xkb":122,"Win":57390,"Mac":73,"Code":"VOLUME_DOWN"},"VOLUME_MUTE":{"Usb":127,"Evdev":113,"Xkb":121,"Win":57376,"Mac":74,"Code":"VOLUME_MUTE"},"VOLUME_UP":{"Usb":128,"Evdev":115,"Xkb":123,"Win":57392,"Mac":72,"Code":"VOLUME_UP"}},"Arr":[{"Usb":0,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"USB_RESERVED"},{"Usb":1,"Evdev":0,"Xkb":0,"Win":255,"Mac":65535,"Code":"USB_ERROR_ROLL_OVER"},{"Usb":2,"Evdev":0,"Xkb":0,"Win":252,"Mac":65535,"Code":"USB_POST_FAIL"},{"Usb":3,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"USB_ERROR_UNDEFINED"},{"Usb":4,"Evdev":30,"Xkb":38,"Win":30,"Mac":0,"Code":"US_A"},{"Usb":5,"Evdev":48,"Xkb":56,"Win":48,"Mac":11,"Code":"US_B"},{"Usb":6,"Evdev":46,"Xkb":54,"Win":46,"Mac":8,"Code":"US_C"},{"Usb":7,"Evdev":32,"Xkb":40,"Win":32,"Mac":2,"Code":"US_D"},{"Usb":8,"Evdev":18,"Xkb":26,"Win":18,"Mac":14,"Code":"US_E"},{"Usb":9,"Evdev":33,"Xkb":41,"Win":33,"Mac":3,"Code":"US_F"},{"Usb":10,"Evdev":34,"Xkb":42,"Win":34,"Mac":5,"Code":"US_G"},{"Usb":11,"Evdev":35,"Xkb":43,"Win":35,"Mac":4,"Code":"US_H"},{"Usb":12,"Evdev":23,"Xkb":31,"Win":23,"Mac":34,"Code":"US_I"},{"Usb":13,"Evdev":36,"Xkb":44,"Win":36,"Mac":38,"Code":"US_J"},{"Usb":14,"Evdev":37,"Xkb":45,"Win":37,"Mac":40,"Code":"US_K"},{"Usb":15,"Evdev":38,"Xkb":46,"Win":38,"Mac":37,"Code":"US_L"},{"Usb":16,"Evdev":50,"Xkb":58,"Win":50,"Mac":46,"Code":"US_M"},{"Usb":17,"Evdev":49,"Xkb":57,"Win":49,"Mac":45,"Code":"US_N"},{"Usb":18,"Evdev":24,"Xkb":32,"Win":24,"Mac":31,"Code":"US_O"},{"Usb":19,"Evdev":25,"Xkb":33,"Win":25,"Mac":35,"Code":"US_P"},{"Usb":20,"Evdev":16,"Xkb":24,"Win":16,"Mac":12,"Code":"US_Q"},{"Usb":21,"Evdev":19,"Xkb":27,"Win":19,"Mac":15,"Code":"US_R"},{"Usb":22,"Evdev":31,"Xkb":39,"Win":31,"Mac":1,"Code":"US_S"},{"Usb":23,"Evdev":20,"Xkb":28,"Win":20,"Mac":17,"Code":"US_T"},{"Usb":24,"Evdev":22,"Xkb":30,"Win":22,"Mac":32,"Code":"US_U"},{"Usb":25,"Evdev":47,"Xkb":55,"Win":47,"Mac":9,"Code":"US_V"},{"Usb":26,"Evdev":17,"Xkb":25,"Win":17,"Mac":13,"Code":"US_W"},{"Usb":27,"Evdev":45,"Xkb":53,"Win":45,"Mac":7,"Code":"US_X"},{"Usb":28,"Evdev":21,"Xkb":29,"Win":21,"Mac":16,"Code":"US_Y"},{"Usb":29,"Evdev":44,"Xkb":52,"Win":44,"Mac":6,"Code":"US_Z"},{"Usb":30,"Evdev":2,"Xkb":10,"Win":2,"Mac":18,"Code":"DIGIT1"},{"Usb":31,"Evdev":3,"Xkb":11,"Win":3,"Mac":19,"Code":"DIGIT2"},{"Usb":32,"Evdev":4,"Xkb":12,"Win":4,"Mac":20,"Code":"DIGIT3"},{"Usb":33,"Evdev":5,"Xkb":13,"Win":5,"Mac":21,"Code":"DIGIT4"},{"Usb":34,"Evdev":6,"Xkb":14,"Win":6,"Mac":23,"Code":"DIGIT5"},{"Usb":35,"Evdev":7,"Xkb":15,"Win":7,"Mac":22,"Code":"DIGIT6"},{"Usb":36,"Evdev":8,"Xkb":16,"Win":8,"Mac":26,"Code":"DIGIT7"},{"Usb":37,"Evdev":9,"Xkb":17,"Win":9,"Mac":28,"Code":"DIGIT8"},{"Usb":38,"Evdev":10,"Xkb":18,"Win":10,"Mac":25,"Code":"DIGIT9"},{"Usb":39,"Evdev":11,"Xkb":19,"Win":11,"Mac":29,"Code":"DIGIT0"},{"Usb":40,"Evdev":28,"Xkb":36,"Win":28,"Mac":36,"Code":"ENTER"},{"Usb":41,"Evdev":1,"Xkb":9,"Win":1,"Mac":53,"Code":"ESCAPE"},{"Usb":42,"Evdev":14,"Xkb":22,"Win":14,"Mac":51,"Code":"BACKSPACE"},{"Usb":43,"Evdev":15,"Xkb":23,"Win":15,"Mac":48,"Code":"TAB"},{"Usb":44,"Evdev":57,"Xkb":65,"Win":57,"Mac":49,"Code":"SPACE"},{"Usb":45,"Evdev":12,"Xkb":20,"Win":12,"Mac":27,"Code":"MINUS"},{"Usb":46,"Evdev":13,"Xkb":21,"Win":13,"Mac":24,"Code":"EQUAL"},{"Usb":47,"Evdev":26,"Xkb":34,"Win":26,"Mac":33,"Code":"BRACKET_LEFT"},{"Usb":48,"Evdev":27,"Xkb":35,"Win":27,"Mac":30,"Code":"BRACKET_RIGHT"},{"Usb":49,"Evdev":43,"Xkb":51,"Win":43,"Mac":42,"Code":"BACKSLASH"},{"Usb":51,"Evdev":39,"Xkb":47,"Win":39,"Mac":41,"Code":"SEMICOLON"},{"Usb":52,"Evdev":40,"Xkb":48,"Win":40,"Mac":39,"Code":"QUOTE"},{"Usb":53,"Evdev":41,"Xkb":49,"Win":41,"Mac":50,"Code":"BACKQUOTE"},{"Usb":54,"Evdev":51,"Xkb":59,"Win":51,"Mac":43,"Code":"COMMA"},{"Usb":55,"Evdev":52,"Xkb":60,"Win":52,"Mac":47,"Code":"PERIOD"},{"Usb":56,"Evdev":53,"Xkb":61,"Win":53,"Mac":44,"Code":"SLASH"},{"Usb":57,"Evdev":58,"Xkb":66,"Win":58,"Mac":57,"Code":"CAPS_LOCK"},{"Usb":58,"Evdev":59,"Xkb":67,"Win":59,"Mac":122,"Code":"F1"},{"Usb":59,"Evdev":60,"Xkb":68,"Win":60,"Mac":120,"Code":"F2"},{"Usb":60,"Evdev":61,"Xkb":69,"Win":61,"Mac":99,"Code":"F3"},{"Usb":61,"Evdev":62,"Xkb":70,"Win":62,"Mac":118,"Code":"F4"},{"Usb":62,"Evdev":63,"Xkb":71,"Win":63,"Mac":96,"Code":"F5"},{"Usb":63,"Evdev":64,"Xkb":72,"Win":64,"Mac":97,"Code":"F6"},{"Usb":64,"Evdev":65,"Xkb":73,"Win":65,"Mac":98,"Code":"F7"},{"Usb":65,"Evdev":66,"Xkb":74,"Win":66,"Mac":100,"Code":"F8"},{"Usb":66,"Evdev":67,"Xkb":75,"Win":67,"Mac":101,"Code":"F9"},{"Usb":67,"Evdev":68,"Xkb":76,"Win":68,"Mac":109,"Code":"F10"},{"Usb":68,"Evdev":87,"Xkb":95,"Win":87,"Mac":103,"Code":"F11"},{"Usb":69,"Evdev":88,"Xkb":96,"Win":88,"Mac":111,"Code":"F12"},{"Usb":70,"Evdev":99,"Xkb":107,"Win":57399,"Mac":65535,"Code":"PRINT_SCREEN"},{"Usb":71,"Evdev":70,"Xkb":78,"Win":70,"Mac":65535,"Code":"SCROLL_LOCK"},{"Usb":72,"Evdev":119,"Xkb":127,"Win":69,"Mac":65535,"Code":"PAUSE"},{"Usb":73,"Evdev":110,"Xkb":118,"Win":57426,"Mac":114,"Code":"INSERT"},{"Usb":74,"Evdev":102,"Xkb":110,"Win":57415,"Mac":115,"Code":"HOME"},{"Usb":75,"Evdev":104,"Xkb":112,"Win":57417,"Mac":116,"Code":"PAGE_UP"},{"Usb":76,"Evdev":111,"Xkb":119,"Win":57427,"Mac":117,"Code":"DEL"},{"Usb":77,"Evdev":107,"Xkb":115,"Win":57423,"Mac":119,"Code":"END"},{"Usb":78,"Evdev":109,"Xkb":117,"Win":57425,"Mac":121,"Code":"PAGE_DOWN"},{"Usb":79,"Evdev":106,"Xkb":114,"Win":57421,"Mac":124,"Code":"ARROW_RIGHT"},{"Usb":80,"Evdev":105,"Xkb":113,"Win":57419,"Mac":123,"Code":"ARROW_LEFT"},{"Usb":81,"Evdev":108,"Xkb":116,"Win":57424,"Mac":125,"Code":"ARROW_DOWN"},{"Usb":82,"Evdev":103,"Xkb":111,"Win":57416,"Mac":126,"Code":"ARROW_UP"},{"Usb":83,"Evdev":69,"Xkb":77,"Win":57413,"Mac":71,"Code":"NUM_LOCK"},{"Usb":84,"Evdev":98,"Xkb":106,"Win":57397,"Mac":75,"Code":"NUMPAD_DIVIDE"},{"Usb":85,"Evdev":55,"Xkb":63,"Win":55,"Mac":67,"Code":"NUMPAD_MULTIPLY"},{"Usb":86,"Evdev":74,"Xkb":82,"Win":74,"Mac":78,"Code":"NUMPAD_SUBTRACT"},{"Usb":87,"Evdev":78,"Xkb":86,"Win":78,"Mac":69,"Code":"NUMPAD_ADD"},{"Usb":88,"Evdev":96,"Xkb":104,"Win":57372,"Mac":76,"Code":"NUMPAD_ENTER"},{"Usb":89,"Evdev":79,"Xkb":87,"Win":79,"Mac":83,"Code":"NUMPAD1"},{"Usb":90,"Evdev":80,"Xkb":88,"Win":80,"Mac":84,"Code":"NUMPAD2"},{"Usb":91,"Evdev":81,"Xkb":89,"Win":81,"Mac":85,"Code":"NUMPAD3"},{"Usb":92,"Evdev":75,"Xkb":83,"Win":75,"Mac":86,"Code":"NUMPAD4"},{"Usb":93,"Evdev":76,"Xkb":84,"Win":76,"Mac":87,"Code":"NUMPAD5"},{"Usb":94,"Evdev":77,"Xkb":85,"Win":77,"Mac":88,"Code":"NUMPAD6"},{"Usb":95,"Evdev":71,"Xkb":79,"Win":71,"Mac":89,"Code":"NUMPAD7"},{"Usb":96,"Evdev":72,"Xkb":80,"Win":72,"Mac":91,"Code":"NUMPAD8"},{"Usb":97,"Evdev":73,"Xkb":81,"Win":73,"Mac":92,"Code":"NUMPAD9"},{"Usb":98,"Evdev":82,"Xkb":90,"Win":82,"Mac":82,"Code":"NUMPAD0"},{"Usb":99,"Evdev":83,"Xkb":91,"Win":83,"Mac":65,"Code":"NUMPAD_DECIMAL"},{"Usb":100,"Evdev":86,"Xkb":94,"Win":86,"Mac":10,"Code":"INTL_BACKSLASH"},{"Usb":101,"Evdev":127,"Xkb":135,"Win":57437,"Mac":110,"Code":"CONTEXT_MENU"},{"Usb":102,"Evdev":116,"Xkb":124,"Win":57438,"Mac":65535,"Code":"POWER"},{"Usb":103,"Evdev":117,"Xkb":125,"Win":89,"Mac":81,"Code":"NUMPAD_EQUAL"},{"Usb":104,"Evdev":183,"Xkb":191,"Win":100,"Mac":105,"Code":"F13"},{"Usb":105,"Evdev":184,"Xkb":192,"Win":101,"Mac":107,"Code":"F14"},{"Usb":106,"Evdev":185,"Xkb":193,"Win":102,"Mac":113,"Code":"F15"},{"Usb":107,"Evdev":186,"Xkb":194,"Win":103,"Mac":106,"Code":"F16"},{"Usb":108,"Evdev":187,"Xkb":195,"Win":104,"Mac":64,"Code":"F17"},{"Usb":109,"Evdev":188,"Xkb":196,"Win":105,"Mac":79,"Code":"F18"},{"Usb":110,"Evdev":189,"Xkb":197,"Win":106,"Mac":80,"Code":"F19"},{"Usb":111,"Evdev":190,"Xkb":198,"Win":107,"Mac":90,"Code":"F20"},{"Usb":112,"Evdev":191,"Xkb":199,"Win":108,"Mac":65535,"Code":"F21"},{"Usb":113,"Evdev":192,"Xkb":200,"Win":109,"Mac":65535,"Code":"F22"},{"Usb":114,"Evdev":193,"Xkb":201,"Win":110,"Mac":65535,"Code":"F23"},{"Usb":115,"Evdev":194,"Xkb":202,"Win":118,"Mac":65535,"Code":"F24"},{"Usb":116,"Evdev":134,"Xkb":142,"Win":0,"Mac":65535,"Code":"OPEN"},{"Usb":117,"Evdev":138,"Xkb":146,"Win":57403,"Mac":65535,"Code":"HELP"},{"Usb":119,"Evdev":132,"Xkb":140,"Win":0,"Mac":65535,"Code":"SELECT"},{"Usb":121,"Evdev":129,"Xkb":137,"Win":0,"Mac":65535,"Code":"AGAIN"},{"Usb":122,"Evdev":131,"Xkb":139,"Win":57352,"Mac":65535,"Code":"UNDO"},{"Usb":123,"Evdev":137,"Xkb":145,"Win":57367,"Mac":65535,"Code":"CUT"},{"Usb":124,"Evdev":133,"Xkb":141,"Win":57368,"Mac":65535,"Code":"COPY"},{"Usb":125,"Evdev":135,"Xkb":143,"Win":57354,"Mac":65535,"Code":"PASTE"},{"Usb":126,"Evdev":136,"Xkb":144,"Win":0,"Mac":65535,"Code":"FIND"},{"Usb":127,"Evdev":113,"Xkb":121,"Win":57376,"Mac":74,"Code":"VOLUME_MUTE"},{"Usb":128,"Evdev":115,"Xkb":123,"Win":57392,"Mac":72,"Code":"VOLUME_UP"},{"Usb":129,"Evdev":114,"Xkb":122,"Win":57390,"Mac":73,"Code":"VOLUME_DOWN"},{"Usb":133,"Evdev":121,"Xkb":129,"Win":126,"Mac":95,"Code":"NUMPAD_COMMA"},{"Usb":135,"Evdev":89,"Xkb":97,"Win":115,"Mac":94,"Code":"INTL_RO"},{"Usb":136,"Evdev":93,"Xkb":101,"Win":112,"Mac":65535,"Code":"KANA_MODE"},{"Usb":137,"Evdev":124,"Xkb":132,"Win":125,"Mac":93,"Code":"INTL_YEN"},{"Usb":138,"Evdev":92,"Xkb":100,"Win":121,"Mac":65535,"Code":"CONVERT"},{"Usb":139,"Evdev":94,"Xkb":102,"Win":123,"Mac":65535,"Code":"NON_CONVERT"},{"Usb":144,"Evdev":122,"Xkb":130,"Win":114,"Mac":104,"Code":"LANG1"},{"Usb":145,"Evdev":123,"Xkb":131,"Win":113,"Mac":102,"Code":"LANG2"},{"Usb":146,"Evdev":90,"Xkb":98,"Win":120,"Mac":65535,"Code":"LANG3"},{"Usb":147,"Evdev":91,"Xkb":99,"Win":119,"Mac":65535,"Code":"LANG4"},{"Usb":148,"Evdev":85,"Xkb":93,"Win":0,"Mac":65535,"Code":"LANG5"},{"Usb":155,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"ABORT"},{"Usb":163,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"PROPS"},{"Usb":182,"Evdev":179,"Xkb":187,"Win":0,"Mac":65535,"Code":"NUMPAD_PAREN_LEFT"},{"Usb":183,"Evdev":180,"Xkb":188,"Win":0,"Mac":65535,"Code":"NUMPAD_PAREN_RIGHT"},{"Usb":187,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_BACKSPACE"},{"Usb":208,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_STORE"},{"Usb":209,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_RECALL"},{"Usb":210,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_CLEAR"},{"Usb":211,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_ADD"},{"Usb":212,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_MEMORY_SUBTRACT"},{"Usb":215,"Evdev":118,"Xkb":126,"Win":0,"Mac":65535,"Code":"NUMPAD_SIGN_CHANGE"},{"Usb":216,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_CLEAR"},{"Usb":217,"Evdev":0,"Xkb":0,"Win":0,"Mac":65535,"Code":"NUMPAD_CLEAR_ENTRY"},{"Usb":224,"Evdev":29,"Xkb":37,"Win":29,"Mac":59,"Code":"CONTROL_LEFT"},{"Usb":225,"Evdev":42,"Xkb":50,"Win":42,"Mac":56,"Code":"SHIFT_LEFT"},{"Usb":226,"Evdev":56,"Xkb":64,"Win":56,"Mac":58,"Code":"ALT_LEFT"},{"Usb":227,"Evdev":125,"Xkb":133,"Win":57435,"Mac":55,"Code":"META_LEFT"},{"Usb":228,"Evdev":97,"Xkb":105,"Win":57373,"Mac":62,"Code":"CONTROL_RIGHT"},{"Usb":229,"Evdev":54,"Xkb":62,"Win":54,"Mac":60,"Code":"SHIFT_RIGHT"},{"Usb":230,"Evdev":100,"Xkb":108,"Win":57400,"Mac":61,"Code":"ALT_RIGHT"},{"Usb":231,"Evdev":126,"Xkb":134,"Win":57436,"Mac":54,"Code":"META_RIGHT"}]} \ No newline at end of file +{ + "Usb": { + "0": { + "Usb": 0, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "USB_RESERVED" + }, + "1": { + "Usb": 1, + "Evdev": 0, + "Xkb": 0, + "Win": 255, + "Mac": 65535, + "Code": "USB_ERROR_ROLL_OVER" + }, + "10": { + "Usb": 10, + "Evdev": 34, + "Xkb": 42, + "Win": 34, + "Mac": 5, + "Code": "US_G" + }, + "100": { + "Usb": 100, + "Evdev": 86, + "Xkb": 94, + "Win": 86, + "Mac": 10, + "Code": "INTL_BACKSLASH" + }, + "101": { + "Usb": 101, + "Evdev": 127, + "Xkb": 135, + "Win": 57437, + "Mac": 110, + "Code": "CONTEXT_MENU" + }, + "102": { + "Usb": 102, + "Evdev": 116, + "Xkb": 124, + "Win": 57438, + "Mac": 65535, + "Code": "POWER" + }, + "103": { + "Usb": 103, + "Evdev": 117, + "Xkb": 125, + "Win": 89, + "Mac": 81, + "Code": "NUMPAD_EQUAL" + }, + "104": { + "Usb": 104, + "Evdev": 183, + "Xkb": 191, + "Win": 100, + "Mac": 105, + "Code": "F13" + }, + "105": { + "Usb": 105, + "Evdev": 184, + "Xkb": 192, + "Win": 101, + "Mac": 107, + "Code": "F14" + }, + "106": { + "Usb": 106, + "Evdev": 185, + "Xkb": 193, + "Win": 102, + "Mac": 113, + "Code": "F15" + }, + "107": { + "Usb": 107, + "Evdev": 186, + "Xkb": 194, + "Win": 103, + "Mac": 106, + "Code": "F16" + }, + "108": { + "Usb": 108, + "Evdev": 187, + "Xkb": 195, + "Win": 104, + "Mac": 64, + "Code": "F17" + }, + "109": { + "Usb": 109, + "Evdev": 188, + "Xkb": 196, + "Win": 105, + "Mac": 79, + "Code": "F18" + }, + "11": { + "Usb": 11, + "Evdev": 35, + "Xkb": 43, + "Win": 35, + "Mac": 4, + "Code": "US_H" + }, + "110": { + "Usb": 110, + "Evdev": 189, + "Xkb": 197, + "Win": 106, + "Mac": 80, + "Code": "F19" + }, + "111": { + "Usb": 111, + "Evdev": 190, + "Xkb": 198, + "Win": 107, + "Mac": 90, + "Code": "F20" + }, + "112": { + "Usb": 112, + "Evdev": 191, + "Xkb": 199, + "Win": 108, + "Mac": 65535, + "Code": "F21" + }, + "113": { + "Usb": 113, + "Evdev": 192, + "Xkb": 200, + "Win": 109, + "Mac": 65535, + "Code": "F22" + }, + "114": { + "Usb": 114, + "Evdev": 193, + "Xkb": 201, + "Win": 110, + "Mac": 65535, + "Code": "F23" + }, + "115": { + "Usb": 115, + "Evdev": 194, + "Xkb": 202, + "Win": 118, + "Mac": 65535, + "Code": "F24" + }, + "116": { + "Usb": 116, + "Evdev": 134, + "Xkb": 142, + "Win": 0, + "Mac": 65535, + "Code": "OPEN" + }, + "117": { + "Usb": 117, + "Evdev": 138, + "Xkb": 146, + "Win": 57403, + "Mac": 65535, + "Code": "HELP" + }, + "119": { + "Usb": 119, + "Evdev": 132, + "Xkb": 140, + "Win": 0, + "Mac": 65535, + "Code": "SELECT" + }, + "12": { + "Usb": 12, + "Evdev": 23, + "Xkb": 31, + "Win": 23, + "Mac": 34, + "Code": "US_I" + }, + "121": { + "Usb": 121, + "Evdev": 129, + "Xkb": 137, + "Win": 0, + "Mac": 65535, + "Code": "AGAIN" + }, + "122": { + "Usb": 122, + "Evdev": 131, + "Xkb": 139, + "Win": 57352, + "Mac": 65535, + "Code": "UNDO" + }, + "123": { + "Usb": 123, + "Evdev": 137, + "Xkb": 145, + "Win": 57367, + "Mac": 65535, + "Code": "CUT" + }, + "124": { + "Usb": 124, + "Evdev": 133, + "Xkb": 141, + "Win": 57368, + "Mac": 65535, + "Code": "COPY" + }, + "125": { + "Usb": 125, + "Evdev": 135, + "Xkb": 143, + "Win": 57354, + "Mac": 65535, + "Code": "PASTE" + }, + "126": { + "Usb": 126, + "Evdev": 136, + "Xkb": 144, + "Win": 0, + "Mac": 65535, + "Code": "FIND" + }, + "127": { + "Usb": 127, + "Evdev": 113, + "Xkb": 121, + "Win": 57376, + "Mac": 74, + "Code": "VOLUME_MUTE" + }, + "128": { + "Usb": 128, + "Evdev": 115, + "Xkb": 123, + "Win": 57392, + "Mac": 72, + "Code": "VOLUME_UP" + }, + "129": { + "Usb": 129, + "Evdev": 114, + "Xkb": 122, + "Win": 57390, + "Mac": 73, + "Code": "VOLUME_DOWN" + }, + "13": { + "Usb": 13, + "Evdev": 36, + "Xkb": 44, + "Win": 36, + "Mac": 38, + "Code": "US_J" + }, + "133": { + "Usb": 133, + "Evdev": 121, + "Xkb": 129, + "Win": 126, + "Mac": 95, + "Code": "NUMPAD_COMMA" + }, + "135": { + "Usb": 135, + "Evdev": 89, + "Xkb": 97, + "Win": 115, + "Mac": 94, + "Code": "INTL_RO" + }, + "136": { + "Usb": 136, + "Evdev": 93, + "Xkb": 101, + "Win": 112, + "Mac": 65535, + "Code": "KANA_MODE" + }, + "137": { + "Usb": 137, + "Evdev": 124, + "Xkb": 132, + "Win": 125, + "Mac": 93, + "Code": "INTL_YEN" + }, + "138": { + "Usb": 138, + "Evdev": 92, + "Xkb": 100, + "Win": 121, + "Mac": 65535, + "Code": "CONVERT" + }, + "139": { + "Usb": 139, + "Evdev": 94, + "Xkb": 102, + "Win": 123, + "Mac": 65535, + "Code": "NON_CONVERT" + }, + "14": { + "Usb": 14, + "Evdev": 37, + "Xkb": 45, + "Win": 37, + "Mac": 40, + "Code": "US_K" + }, + "144": { + "Usb": 144, + "Evdev": 122, + "Xkb": 130, + "Win": 114, + "Mac": 104, + "Code": "LANG1" + }, + "145": { + "Usb": 145, + "Evdev": 123, + "Xkb": 131, + "Win": 113, + "Mac": 102, + "Code": "LANG2" + }, + "146": { + "Usb": 146, + "Evdev": 90, + "Xkb": 98, + "Win": 120, + "Mac": 65535, + "Code": "LANG3" + }, + "147": { + "Usb": 147, + "Evdev": 91, + "Xkb": 99, + "Win": 119, + "Mac": 65535, + "Code": "LANG4" + }, + "148": { + "Usb": 148, + "Evdev": 85, + "Xkb": 93, + "Win": 0, + "Mac": 65535, + "Code": "LANG5" + }, + "15": { + "Usb": 15, + "Evdev": 38, + "Xkb": 46, + "Win": 38, + "Mac": 37, + "Code": "US_L" + }, + "155": { + "Usb": 155, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "ABORT" + }, + "16": { + "Usb": 16, + "Evdev": 50, + "Xkb": 58, + "Win": 50, + "Mac": 46, + "Code": "US_M" + }, + "163": { + "Usb": 163, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "PROPS" + }, + "17": { + "Usb": 17, + "Evdev": 49, + "Xkb": 57, + "Win": 49, + "Mac": 45, + "Code": "US_N" + }, + "18": { + "Usb": 18, + "Evdev": 24, + "Xkb": 32, + "Win": 24, + "Mac": 31, + "Code": "US_O" + }, + "182": { + "Usb": 182, + "Evdev": 179, + "Xkb": 187, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_PAREN_LEFT" + }, + "183": { + "Usb": 183, + "Evdev": 180, + "Xkb": 188, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_PAREN_RIGHT" + }, + "187": { + "Usb": 187, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_BACKSPACE" + }, + "19": { + "Usb": 19, + "Evdev": 25, + "Xkb": 33, + "Win": 25, + "Mac": 35, + "Code": "US_P" + }, + "2": { + "Usb": 2, + "Evdev": 0, + "Xkb": 0, + "Win": 252, + "Mac": 65535, + "Code": "USB_POST_FAIL" + }, + "20": { + "Usb": 20, + "Evdev": 16, + "Xkb": 24, + "Win": 16, + "Mac": 12, + "Code": "US_Q" + }, + "208": { + "Usb": 208, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_MEMORY_STORE" + }, + "209": { + "Usb": 209, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_MEMORY_RECALL" + }, + "21": { + "Usb": 21, + "Evdev": 19, + "Xkb": 27, + "Win": 19, + "Mac": 15, + "Code": "US_R" + }, + "210": { + "Usb": 210, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_MEMORY_CLEAR" + }, + "211": { + "Usb": 211, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_MEMORY_ADD" + }, + "212": { + "Usb": 212, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_MEMORY_SUBTRACT" + }, + "215": { + "Usb": 215, + "Evdev": 118, + "Xkb": 126, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_SIGN_CHANGE" + }, + "216": { + "Usb": 216, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_CLEAR" + }, + "217": { + "Usb": 217, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_CLEAR_ENTRY" + }, + "22": { + "Usb": 22, + "Evdev": 31, + "Xkb": 39, + "Win": 31, + "Mac": 1, + "Code": "US_S" + }, + "224": { + "Usb": 224, + "Evdev": 29, + "Xkb": 37, + "Win": 29, + "Mac": 59, + "Code": "CONTROL_LEFT" + }, + "225": { + "Usb": 225, + "Evdev": 42, + "Xkb": 50, + "Win": 42, + "Mac": 56, + "Code": "SHIFT_LEFT" + }, + "226": { + "Usb": 226, + "Evdev": 56, + "Xkb": 64, + "Win": 56, + "Mac": 58, + "Code": "ALT_LEFT" + }, + "227": { + "Usb": 227, + "Evdev": 125, + "Xkb": 133, + "Win": 57435, + "Mac": 55, + "Code": "META_LEFT" + }, + "228": { + "Usb": 228, + "Evdev": 97, + "Xkb": 105, + "Win": 57373, + "Mac": 62, + "Code": "CONTROL_RIGHT" + }, + "229": { + "Usb": 229, + "Evdev": 54, + "Xkb": 62, + "Win": 54, + "Mac": 60, + "Code": "SHIFT_RIGHT" + }, + "23": { + "Usb": 23, + "Evdev": 20, + "Xkb": 28, + "Win": 20, + "Mac": 17, + "Code": "US_T" + }, + "230": { + "Usb": 230, + "Evdev": 100, + "Xkb": 108, + "Win": 57400, + "Mac": 61, + "Code": "ALT_RIGHT" + }, + "231": { + "Usb": 231, + "Evdev": 126, + "Xkb": 134, + "Win": 57436, + "Mac": 54, + "Code": "META_RIGHT" + }, + "24": { + "Usb": 24, + "Evdev": 22, + "Xkb": 30, + "Win": 22, + "Mac": 32, + "Code": "US_U" + }, + "25": { + "Usb": 25, + "Evdev": 47, + "Xkb": 55, + "Win": 47, + "Mac": 9, + "Code": "US_V" + }, + "26": { + "Usb": 26, + "Evdev": 17, + "Xkb": 25, + "Win": 17, + "Mac": 13, + "Code": "US_W" + }, + "27": { + "Usb": 27, + "Evdev": 45, + "Xkb": 53, + "Win": 45, + "Mac": 7, + "Code": "US_X" + }, + "28": { + "Usb": 28, + "Evdev": 21, + "Xkb": 29, + "Win": 21, + "Mac": 16, + "Code": "US_Y" + }, + "29": { + "Usb": 29, + "Evdev": 44, + "Xkb": 52, + "Win": 44, + "Mac": 6, + "Code": "US_Z" + }, + "3": { + "Usb": 3, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "USB_ERROR_UNDEFINED" + }, + "30": { + "Usb": 30, + "Evdev": 2, + "Xkb": 10, + "Win": 2, + "Mac": 18, + "Code": "DIGIT1" + }, + "31": { + "Usb": 31, + "Evdev": 3, + "Xkb": 11, + "Win": 3, + "Mac": 19, + "Code": "DIGIT2" + }, + "32": { + "Usb": 32, + "Evdev": 4, + "Xkb": 12, + "Win": 4, + "Mac": 20, + "Code": "DIGIT3" + }, + "33": { + "Usb": 33, + "Evdev": 5, + "Xkb": 13, + "Win": 5, + "Mac": 21, + "Code": "DIGIT4" + }, + "34": { + "Usb": 34, + "Evdev": 6, + "Xkb": 14, + "Win": 6, + "Mac": 23, + "Code": "DIGIT5" + }, + "35": { + "Usb": 35, + "Evdev": 7, + "Xkb": 15, + "Win": 7, + "Mac": 22, + "Code": "DIGIT6" + }, + "36": { + "Usb": 36, + "Evdev": 8, + "Xkb": 16, + "Win": 8, + "Mac": 26, + "Code": "DIGIT7" + }, + "37": { + "Usb": 37, + "Evdev": 9, + "Xkb": 17, + "Win": 9, + "Mac": 28, + "Code": "DIGIT8" + }, + "38": { + "Usb": 38, + "Evdev": 10, + "Xkb": 18, + "Win": 10, + "Mac": 25, + "Code": "DIGIT9" + }, + "39": { + "Usb": 39, + "Evdev": 11, + "Xkb": 19, + "Win": 11, + "Mac": 29, + "Code": "DIGIT0" + }, + "4": { + "Usb": 4, + "Evdev": 30, + "Xkb": 38, + "Win": 30, + "Mac": 0, + "Code": "US_A" + }, + "40": { + "Usb": 40, + "Evdev": 28, + "Xkb": 36, + "Win": 28, + "Mac": 36, + "Code": "ENTER" + }, + "41": { + "Usb": 41, + "Evdev": 1, + "Xkb": 9, + "Win": 1, + "Mac": 53, + "Code": "ESCAPE" + }, + "42": { + "Usb": 42, + "Evdev": 14, + "Xkb": 22, + "Win": 14, + "Mac": 51, + "Code": "BACKSPACE" + }, + "43": { + "Usb": 43, + "Evdev": 15, + "Xkb": 23, + "Win": 15, + "Mac": 48, + "Code": "TAB" + }, + "44": { + "Usb": 44, + "Evdev": 57, + "Xkb": 65, + "Win": 57, + "Mac": 49, + "Code": "SPACE" + }, + "45": { + "Usb": 45, + "Evdev": 12, + "Xkb": 20, + "Win": 12, + "Mac": 27, + "Code": "MINUS" + }, + "46": { + "Usb": 46, + "Evdev": 13, + "Xkb": 21, + "Win": 13, + "Mac": 24, + "Code": "EQUAL" + }, + "47": { + "Usb": 47, + "Evdev": 26, + "Xkb": 34, + "Win": 26, + "Mac": 33, + "Code": "BRACKET_LEFT" + }, + "48": { + "Usb": 48, + "Evdev": 27, + "Xkb": 35, + "Win": 27, + "Mac": 30, + "Code": "BRACKET_RIGHT" + }, + "49": { + "Usb": 49, + "Evdev": 43, + "Xkb": 51, + "Win": 43, + "Mac": 42, + "Code": "BACKSLASH" + }, + "5": { + "Usb": 5, + "Evdev": 48, + "Xkb": 56, + "Win": 48, + "Mac": 11, + "Code": "US_B" + }, + "51": { + "Usb": 51, + "Evdev": 39, + "Xkb": 47, + "Win": 39, + "Mac": 41, + "Code": "SEMICOLON" + }, + "52": { + "Usb": 52, + "Evdev": 40, + "Xkb": 48, + "Win": 40, + "Mac": 39, + "Code": "QUOTE" + }, + "53": { + "Usb": 53, + "Evdev": 41, + "Xkb": 49, + "Win": 41, + "Mac": 50, + "Code": "BACKQUOTE" + }, + "54": { + "Usb": 54, + "Evdev": 51, + "Xkb": 59, + "Win": 51, + "Mac": 43, + "Code": "COMMA" + }, + "55": { + "Usb": 55, + "Evdev": 52, + "Xkb": 60, + "Win": 52, + "Mac": 47, + "Code": "PERIOD" + }, + "56": { + "Usb": 56, + "Evdev": 53, + "Xkb": 61, + "Win": 53, + "Mac": 44, + "Code": "SLASH" + }, + "57": { + "Usb": 57, + "Evdev": 58, + "Xkb": 66, + "Win": 58, + "Mac": 57, + "Code": "CAPS_LOCK" + }, + "58": { + "Usb": 58, + "Evdev": 59, + "Xkb": 67, + "Win": 59, + "Mac": 122, + "Code": "F1" + }, + "59": { + "Usb": 59, + "Evdev": 60, + "Xkb": 68, + "Win": 60, + "Mac": 120, + "Code": "F2" + }, + "6": { + "Usb": 6, + "Evdev": 46, + "Xkb": 54, + "Win": 46, + "Mac": 8, + "Code": "US_C" + }, + "60": { + "Usb": 60, + "Evdev": 61, + "Xkb": 69, + "Win": 61, + "Mac": 99, + "Code": "F3" + }, + "61": { + "Usb": 61, + "Evdev": 62, + "Xkb": 70, + "Win": 62, + "Mac": 118, + "Code": "F4" + }, + "62": { + "Usb": 62, + "Evdev": 63, + "Xkb": 71, + "Win": 63, + "Mac": 96, + "Code": "F5" + }, + "63": { + "Usb": 63, + "Evdev": 64, + "Xkb": 72, + "Win": 64, + "Mac": 97, + "Code": "F6" + }, + "64": { + "Usb": 64, + "Evdev": 65, + "Xkb": 73, + "Win": 65, + "Mac": 98, + "Code": "F7" + }, + "65": { + "Usb": 65, + "Evdev": 66, + "Xkb": 74, + "Win": 66, + "Mac": 100, + "Code": "F8" + }, + "66": { + "Usb": 66, + "Evdev": 67, + "Xkb": 75, + "Win": 67, + "Mac": 101, + "Code": "F9" + }, + "67": { + "Usb": 67, + "Evdev": 68, + "Xkb": 76, + "Win": 68, + "Mac": 109, + "Code": "F10" + }, + "68": { + "Usb": 68, + "Evdev": 87, + "Xkb": 95, + "Win": 87, + "Mac": 103, + "Code": "F11" + }, + "69": { + "Usb": 69, + "Evdev": 88, + "Xkb": 96, + "Win": 88, + "Mac": 111, + "Code": "F12" + }, + "7": { + "Usb": 7, + "Evdev": 32, + "Xkb": 40, + "Win": 32, + "Mac": 2, + "Code": "US_D" + }, + "70": { + "Usb": 70, + "Evdev": 99, + "Xkb": 107, + "Win": 57399, + "Mac": 65535, + "Code": "PRINT_SCREEN" + }, + "71": { + "Usb": 71, + "Evdev": 70, + "Xkb": 78, + "Win": 70, + "Mac": 65535, + "Code": "SCROLL_LOCK" + }, + "72": { + "Usb": 72, + "Evdev": 119, + "Xkb": 127, + "Win": 69, + "Mac": 65535, + "Code": "PAUSE" + }, + "73": { + "Usb": 73, + "Evdev": 110, + "Xkb": 118, + "Win": 57426, + "Mac": 114, + "Code": "INSERT" + }, + "74": { + "Usb": 74, + "Evdev": 102, + "Xkb": 110, + "Win": 57415, + "Mac": 115, + "Code": "HOME" + }, + "75": { + "Usb": 75, + "Evdev": 104, + "Xkb": 112, + "Win": 57417, + "Mac": 116, + "Code": "PAGE_UP" + }, + "76": { + "Usb": 76, + "Evdev": 111, + "Xkb": 119, + "Win": 57427, + "Mac": 117, + "Code": "DEL" + }, + "77": { + "Usb": 77, + "Evdev": 107, + "Xkb": 115, + "Win": 57423, + "Mac": 119, + "Code": "END" + }, + "78": { + "Usb": 78, + "Evdev": 109, + "Xkb": 117, + "Win": 57425, + "Mac": 121, + "Code": "PAGE_DOWN" + }, + "79": { + "Usb": 79, + "Evdev": 106, + "Xkb": 114, + "Win": 57421, + "Mac": 124, + "Code": "ARROW_RIGHT" + }, + "8": { + "Usb": 8, + "Evdev": 18, + "Xkb": 26, + "Win": 18, + "Mac": 14, + "Code": "US_E" + }, + "80": { + "Usb": 80, + "Evdev": 105, + "Xkb": 113, + "Win": 57419, + "Mac": 123, + "Code": "ARROW_LEFT" + }, + "81": { + "Usb": 81, + "Evdev": 108, + "Xkb": 116, + "Win": 57424, + "Mac": 125, + "Code": "ARROW_DOWN" + }, + "82": { + "Usb": 82, + "Evdev": 103, + "Xkb": 111, + "Win": 57416, + "Mac": 126, + "Code": "ARROW_UP" + }, + "83": { + "Usb": 83, + "Evdev": 69, + "Xkb": 77, + "Win": 57413, + "Mac": 71, + "Code": "NUM_LOCK" + }, + "84": { + "Usb": 84, + "Evdev": 98, + "Xkb": 106, + "Win": 57397, + "Mac": 75, + "Code": "NUMPAD_DIVIDE" + }, + "85": { + "Usb": 85, + "Evdev": 55, + "Xkb": 63, + "Win": 55, + "Mac": 67, + "Code": "NUMPAD_MULTIPLY" + }, + "86": { + "Usb": 86, + "Evdev": 74, + "Xkb": 82, + "Win": 74, + "Mac": 78, + "Code": "NUMPAD_SUBTRACT" + }, + "87": { + "Usb": 87, + "Evdev": 78, + "Xkb": 86, + "Win": 78, + "Mac": 69, + "Code": "NUMPAD_ADD" + }, + "88": { + "Usb": 88, + "Evdev": 96, + "Xkb": 104, + "Win": 57372, + "Mac": 76, + "Code": "NUMPAD_ENTER" + }, + "89": { + "Usb": 89, + "Evdev": 79, + "Xkb": 87, + "Win": 79, + "Mac": 83, + "Code": "NUMPAD1" + }, + "9": { + "Usb": 9, + "Evdev": 33, + "Xkb": 41, + "Win": 33, + "Mac": 3, + "Code": "US_F" + }, + "90": { + "Usb": 90, + "Evdev": 80, + "Xkb": 88, + "Win": 80, + "Mac": 84, + "Code": "NUMPAD2" + }, + "91": { + "Usb": 91, + "Evdev": 81, + "Xkb": 89, + "Win": 81, + "Mac": 85, + "Code": "NUMPAD3" + }, + "92": { + "Usb": 92, + "Evdev": 75, + "Xkb": 83, + "Win": 75, + "Mac": 86, + "Code": "NUMPAD4" + }, + "93": { + "Usb": 93, + "Evdev": 76, + "Xkb": 84, + "Win": 76, + "Mac": 87, + "Code": "NUMPAD5" + }, + "94": { + "Usb": 94, + "Evdev": 77, + "Xkb": 85, + "Win": 77, + "Mac": 88, + "Code": "NUMPAD6" + }, + "95": { + "Usb": 95, + "Evdev": 71, + "Xkb": 79, + "Win": 71, + "Mac": 89, + "Code": "NUMPAD7" + }, + "96": { + "Usb": 96, + "Evdev": 72, + "Xkb": 80, + "Win": 72, + "Mac": 91, + "Code": "NUMPAD8" + }, + "97": { + "Usb": 97, + "Evdev": 73, + "Xkb": 81, + "Win": 73, + "Mac": 92, + "Code": "NUMPAD9" + }, + "98": { + "Usb": 98, + "Evdev": 82, + "Xkb": 90, + "Win": 82, + "Mac": 82, + "Code": "NUMPAD0" + }, + "99": { + "Usb": 99, + "Evdev": 83, + "Xkb": 91, + "Win": 83, + "Mac": 65, + "Code": "NUMPAD_DECIMAL" + } + }, + "Evdev": { + "0": { + "Usb": 0, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "USB_RESERVED" + }, + "1": { + "Usb": 41, + "Evdev": 1, + "Xkb": 9, + "Win": 1, + "Mac": 53, + "Code": "ESCAPE" + }, + "10": { + "Usb": 38, + "Evdev": 10, + "Xkb": 18, + "Win": 10, + "Mac": 25, + "Code": "DIGIT9" + }, + "100": { + "Usb": 230, + "Evdev": 100, + "Xkb": 108, + "Win": 57400, + "Mac": 61, + "Code": "ALT_RIGHT" + }, + "102": { + "Usb": 74, + "Evdev": 102, + "Xkb": 110, + "Win": 57415, + "Mac": 115, + "Code": "HOME" + }, + "103": { + "Usb": 82, + "Evdev": 103, + "Xkb": 111, + "Win": 57416, + "Mac": 126, + "Code": "ARROW_UP" + }, + "104": { + "Usb": 75, + "Evdev": 104, + "Xkb": 112, + "Win": 57417, + "Mac": 116, + "Code": "PAGE_UP" + }, + "105": { + "Usb": 80, + "Evdev": 105, + "Xkb": 113, + "Win": 57419, + "Mac": 123, + "Code": "ARROW_LEFT" + }, + "106": { + "Usb": 79, + "Evdev": 106, + "Xkb": 114, + "Win": 57421, + "Mac": 124, + "Code": "ARROW_RIGHT" + }, + "107": { + "Usb": 77, + "Evdev": 107, + "Xkb": 115, + "Win": 57423, + "Mac": 119, + "Code": "END" + }, + "108": { + "Usb": 81, + "Evdev": 108, + "Xkb": 116, + "Win": 57424, + "Mac": 125, + "Code": "ARROW_DOWN" + }, + "109": { + "Usb": 78, + "Evdev": 109, + "Xkb": 117, + "Win": 57425, + "Mac": 121, + "Code": "PAGE_DOWN" + }, + "11": { + "Usb": 39, + "Evdev": 11, + "Xkb": 19, + "Win": 11, + "Mac": 29, + "Code": "DIGIT0" + }, + "110": { + "Usb": 73, + "Evdev": 110, + "Xkb": 118, + "Win": 57426, + "Mac": 114, + "Code": "INSERT" + }, + "111": { + "Usb": 76, + "Evdev": 111, + "Xkb": 119, + "Win": 57427, + "Mac": 117, + "Code": "DEL" + }, + "113": { + "Usb": 127, + "Evdev": 113, + "Xkb": 121, + "Win": 57376, + "Mac": 74, + "Code": "VOLUME_MUTE" + }, + "114": { + "Usb": 129, + "Evdev": 114, + "Xkb": 122, + "Win": 57390, + "Mac": 73, + "Code": "VOLUME_DOWN" + }, + "115": { + "Usb": 128, + "Evdev": 115, + "Xkb": 123, + "Win": 57392, + "Mac": 72, + "Code": "VOLUME_UP" + }, + "116": { + "Usb": 102, + "Evdev": 116, + "Xkb": 124, + "Win": 57438, + "Mac": 65535, + "Code": "POWER" + }, + "117": { + "Usb": 103, + "Evdev": 117, + "Xkb": 125, + "Win": 89, + "Mac": 81, + "Code": "NUMPAD_EQUAL" + }, + "118": { + "Usb": 215, + "Evdev": 118, + "Xkb": 126, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_SIGN_CHANGE" + }, + "119": { + "Usb": 72, + "Evdev": 119, + "Xkb": 127, + "Win": 69, + "Mac": 65535, + "Code": "PAUSE" + }, + "12": { + "Usb": 45, + "Evdev": 12, + "Xkb": 20, + "Win": 12, + "Mac": 27, + "Code": "MINUS" + }, + "121": { + "Usb": 133, + "Evdev": 121, + "Xkb": 129, + "Win": 126, + "Mac": 95, + "Code": "NUMPAD_COMMA" + }, + "122": { + "Usb": 144, + "Evdev": 122, + "Xkb": 130, + "Win": 114, + "Mac": 104, + "Code": "LANG1" + }, + "123": { + "Usb": 145, + "Evdev": 123, + "Xkb": 131, + "Win": 113, + "Mac": 102, + "Code": "LANG2" + }, + "124": { + "Usb": 137, + "Evdev": 124, + "Xkb": 132, + "Win": 125, + "Mac": 93, + "Code": "INTL_YEN" + }, + "125": { + "Usb": 227, + "Evdev": 125, + "Xkb": 133, + "Win": 57435, + "Mac": 55, + "Code": "META_LEFT" + }, + "126": { + "Usb": 231, + "Evdev": 126, + "Xkb": 134, + "Win": 57436, + "Mac": 54, + "Code": "META_RIGHT" + }, + "127": { + "Usb": 101, + "Evdev": 127, + "Xkb": 135, + "Win": 57437, + "Mac": 110, + "Code": "CONTEXT_MENU" + }, + "129": { + "Usb": 121, + "Evdev": 129, + "Xkb": 137, + "Win": 0, + "Mac": 65535, + "Code": "AGAIN" + }, + "13": { + "Usb": 46, + "Evdev": 13, + "Xkb": 21, + "Win": 13, + "Mac": 24, + "Code": "EQUAL" + }, + "131": { + "Usb": 122, + "Evdev": 131, + "Xkb": 139, + "Win": 57352, + "Mac": 65535, + "Code": "UNDO" + }, + "132": { + "Usb": 119, + "Evdev": 132, + "Xkb": 140, + "Win": 0, + "Mac": 65535, + "Code": "SELECT" + }, + "133": { + "Usb": 124, + "Evdev": 133, + "Xkb": 141, + "Win": 57368, + "Mac": 65535, + "Code": "COPY" + }, + "134": { + "Usb": 116, + "Evdev": 134, + "Xkb": 142, + "Win": 0, + "Mac": 65535, + "Code": "OPEN" + }, + "135": { + "Usb": 125, + "Evdev": 135, + "Xkb": 143, + "Win": 57354, + "Mac": 65535, + "Code": "PASTE" + }, + "136": { + "Usb": 126, + "Evdev": 136, + "Xkb": 144, + "Win": 0, + "Mac": 65535, + "Code": "FIND" + }, + "137": { + "Usb": 123, + "Evdev": 137, + "Xkb": 145, + "Win": 57367, + "Mac": 65535, + "Code": "CUT" + }, + "138": { + "Usb": 117, + "Evdev": 138, + "Xkb": 146, + "Win": 57403, + "Mac": 65535, + "Code": "HELP" + }, + "14": { + "Usb": 42, + "Evdev": 14, + "Xkb": 22, + "Win": 14, + "Mac": 51, + "Code": "BACKSPACE" + }, + "15": { + "Usb": 43, + "Evdev": 15, + "Xkb": 23, + "Win": 15, + "Mac": 48, + "Code": "TAB" + }, + "16": { + "Usb": 20, + "Evdev": 16, + "Xkb": 24, + "Win": 16, + "Mac": 12, + "Code": "US_Q" + }, + "17": { + "Usb": 26, + "Evdev": 17, + "Xkb": 25, + "Win": 17, + "Mac": 13, + "Code": "US_W" + }, + "179": { + "Usb": 182, + "Evdev": 179, + "Xkb": 187, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_PAREN_LEFT" + }, + "18": { + "Usb": 8, + "Evdev": 18, + "Xkb": 26, + "Win": 18, + "Mac": 14, + "Code": "US_E" + }, + "180": { + "Usb": 183, + "Evdev": 180, + "Xkb": 188, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_PAREN_RIGHT" + }, + "183": { + "Usb": 104, + "Evdev": 183, + "Xkb": 191, + "Win": 100, + "Mac": 105, + "Code": "F13" + }, + "184": { + "Usb": 105, + "Evdev": 184, + "Xkb": 192, + "Win": 101, + "Mac": 107, + "Code": "F14" + }, + "185": { + "Usb": 106, + "Evdev": 185, + "Xkb": 193, + "Win": 102, + "Mac": 113, + "Code": "F15" + }, + "186": { + "Usb": 107, + "Evdev": 186, + "Xkb": 194, + "Win": 103, + "Mac": 106, + "Code": "F16" + }, + "187": { + "Usb": 108, + "Evdev": 187, + "Xkb": 195, + "Win": 104, + "Mac": 64, + "Code": "F17" + }, + "188": { + "Usb": 109, + "Evdev": 188, + "Xkb": 196, + "Win": 105, + "Mac": 79, + "Code": "F18" + }, + "189": { + "Usb": 110, + "Evdev": 189, + "Xkb": 197, + "Win": 106, + "Mac": 80, + "Code": "F19" + }, + "19": { + "Usb": 21, + "Evdev": 19, + "Xkb": 27, + "Win": 19, + "Mac": 15, + "Code": "US_R" + }, + "190": { + "Usb": 111, + "Evdev": 190, + "Xkb": 198, + "Win": 107, + "Mac": 90, + "Code": "F20" + }, + "191": { + "Usb": 112, + "Evdev": 191, + "Xkb": 199, + "Win": 108, + "Mac": 65535, + "Code": "F21" + }, + "192": { + "Usb": 113, + "Evdev": 192, + "Xkb": 200, + "Win": 109, + "Mac": 65535, + "Code": "F22" + }, + "193": { + "Usb": 114, + "Evdev": 193, + "Xkb": 201, + "Win": 110, + "Mac": 65535, + "Code": "F23" + }, + "194": { + "Usb": 115, + "Evdev": 194, + "Xkb": 202, + "Win": 118, + "Mac": 65535, + "Code": "F24" + }, + "2": { + "Usb": 30, + "Evdev": 2, + "Xkb": 10, + "Win": 2, + "Mac": 18, + "Code": "DIGIT1" + }, + "20": { + "Usb": 23, + "Evdev": 20, + "Xkb": 28, + "Win": 20, + "Mac": 17, + "Code": "US_T" + }, + "21": { + "Usb": 28, + "Evdev": 21, + "Xkb": 29, + "Win": 21, + "Mac": 16, + "Code": "US_Y" + }, + "22": { + "Usb": 24, + "Evdev": 22, + "Xkb": 30, + "Win": 22, + "Mac": 32, + "Code": "US_U" + }, + "23": { + "Usb": 12, + "Evdev": 23, + "Xkb": 31, + "Win": 23, + "Mac": 34, + "Code": "US_I" + }, + "24": { + "Usb": 18, + "Evdev": 24, + "Xkb": 32, + "Win": 24, + "Mac": 31, + "Code": "US_O" + }, + "25": { + "Usb": 19, + "Evdev": 25, + "Xkb": 33, + "Win": 25, + "Mac": 35, + "Code": "US_P" + }, + "26": { + "Usb": 47, + "Evdev": 26, + "Xkb": 34, + "Win": 26, + "Mac": 33, + "Code": "BRACKET_LEFT" + }, + "27": { + "Usb": 48, + "Evdev": 27, + "Xkb": 35, + "Win": 27, + "Mac": 30, + "Code": "BRACKET_RIGHT" + }, + "28": { + "Usb": 40, + "Evdev": 28, + "Xkb": 36, + "Win": 28, + "Mac": 36, + "Code": "ENTER" + }, + "29": { + "Usb": 224, + "Evdev": 29, + "Xkb": 37, + "Win": 29, + "Mac": 59, + "Code": "CONTROL_LEFT" + }, + "3": { + "Usb": 31, + "Evdev": 3, + "Xkb": 11, + "Win": 3, + "Mac": 19, + "Code": "DIGIT2" + }, + "30": { + "Usb": 4, + "Evdev": 30, + "Xkb": 38, + "Win": 30, + "Mac": 0, + "Code": "US_A" + }, + "31": { + "Usb": 22, + "Evdev": 31, + "Xkb": 39, + "Win": 31, + "Mac": 1, + "Code": "US_S" + }, + "32": { + "Usb": 7, + "Evdev": 32, + "Xkb": 40, + "Win": 32, + "Mac": 2, + "Code": "US_D" + }, + "33": { + "Usb": 9, + "Evdev": 33, + "Xkb": 41, + "Win": 33, + "Mac": 3, + "Code": "US_F" + }, + "34": { + "Usb": 10, + "Evdev": 34, + "Xkb": 42, + "Win": 34, + "Mac": 5, + "Code": "US_G" + }, + "35": { + "Usb": 11, + "Evdev": 35, + "Xkb": 43, + "Win": 35, + "Mac": 4, + "Code": "US_H" + }, + "36": { + "Usb": 13, + "Evdev": 36, + "Xkb": 44, + "Win": 36, + "Mac": 38, + "Code": "US_J" + }, + "37": { + "Usb": 14, + "Evdev": 37, + "Xkb": 45, + "Win": 37, + "Mac": 40, + "Code": "US_K" + }, + "38": { + "Usb": 15, + "Evdev": 38, + "Xkb": 46, + "Win": 38, + "Mac": 37, + "Code": "US_L" + }, + "39": { + "Usb": 51, + "Evdev": 39, + "Xkb": 47, + "Win": 39, + "Mac": 41, + "Code": "SEMICOLON" + }, + "4": { + "Usb": 32, + "Evdev": 4, + "Xkb": 12, + "Win": 4, + "Mac": 20, + "Code": "DIGIT3" + }, + "40": { + "Usb": 52, + "Evdev": 40, + "Xkb": 48, + "Win": 40, + "Mac": 39, + "Code": "QUOTE" + }, + "41": { + "Usb": 53, + "Evdev": 41, + "Xkb": 49, + "Win": 41, + "Mac": 50, + "Code": "BACKQUOTE" + }, + "42": { + "Usb": 225, + "Evdev": 42, + "Xkb": 50, + "Win": 42, + "Mac": 56, + "Code": "SHIFT_LEFT" + }, + "43": { + "Usb": 49, + "Evdev": 43, + "Xkb": 51, + "Win": 43, + "Mac": 42, + "Code": "BACKSLASH" + }, + "44": { + "Usb": 29, + "Evdev": 44, + "Xkb": 52, + "Win": 44, + "Mac": 6, + "Code": "US_Z" + }, + "45": { + "Usb": 27, + "Evdev": 45, + "Xkb": 53, + "Win": 45, + "Mac": 7, + "Code": "US_X" + }, + "46": { + "Usb": 6, + "Evdev": 46, + "Xkb": 54, + "Win": 46, + "Mac": 8, + "Code": "US_C" + }, + "47": { + "Usb": 25, + "Evdev": 47, + "Xkb": 55, + "Win": 47, + "Mac": 9, + "Code": "US_V" + }, + "48": { + "Usb": 5, + "Evdev": 48, + "Xkb": 56, + "Win": 48, + "Mac": 11, + "Code": "US_B" + }, + "49": { + "Usb": 17, + "Evdev": 49, + "Xkb": 57, + "Win": 49, + "Mac": 45, + "Code": "US_N" + }, + "5": { + "Usb": 33, + "Evdev": 5, + "Xkb": 13, + "Win": 5, + "Mac": 21, + "Code": "DIGIT4" + }, + "50": { + "Usb": 16, + "Evdev": 50, + "Xkb": 58, + "Win": 50, + "Mac": 46, + "Code": "US_M" + }, + "51": { + "Usb": 54, + "Evdev": 51, + "Xkb": 59, + "Win": 51, + "Mac": 43, + "Code": "COMMA" + }, + "52": { + "Usb": 55, + "Evdev": 52, + "Xkb": 60, + "Win": 52, + "Mac": 47, + "Code": "PERIOD" + }, + "53": { + "Usb": 56, + "Evdev": 53, + "Xkb": 61, + "Win": 53, + "Mac": 44, + "Code": "SLASH" + }, + "54": { + "Usb": 229, + "Evdev": 54, + "Xkb": 62, + "Win": 54, + "Mac": 60, + "Code": "SHIFT_RIGHT" + }, + "55": { + "Usb": 85, + "Evdev": 55, + "Xkb": 63, + "Win": 55, + "Mac": 67, + "Code": "NUMPAD_MULTIPLY" + }, + "56": { + "Usb": 226, + "Evdev": 56, + "Xkb": 64, + "Win": 56, + "Mac": 58, + "Code": "ALT_LEFT" + }, + "57": { + "Usb": 44, + "Evdev": 57, + "Xkb": 65, + "Win": 57, + "Mac": 49, + "Code": "SPACE" + }, + "58": { + "Usb": 57, + "Evdev": 58, + "Xkb": 66, + "Win": 58, + "Mac": 57, + "Code": "CAPS_LOCK" + }, + "59": { + "Usb": 58, + "Evdev": 59, + "Xkb": 67, + "Win": 59, + "Mac": 122, + "Code": "F1" + }, + "6": { + "Usb": 34, + "Evdev": 6, + "Xkb": 14, + "Win": 6, + "Mac": 23, + "Code": "DIGIT5" + }, + "60": { + "Usb": 59, + "Evdev": 60, + "Xkb": 68, + "Win": 60, + "Mac": 120, + "Code": "F2" + }, + "61": { + "Usb": 60, + "Evdev": 61, + "Xkb": 69, + "Win": 61, + "Mac": 99, + "Code": "F3" + }, + "62": { + "Usb": 61, + "Evdev": 62, + "Xkb": 70, + "Win": 62, + "Mac": 118, + "Code": "F4" + }, + "63": { + "Usb": 62, + "Evdev": 63, + "Xkb": 71, + "Win": 63, + "Mac": 96, + "Code": "F5" + }, + "64": { + "Usb": 63, + "Evdev": 64, + "Xkb": 72, + "Win": 64, + "Mac": 97, + "Code": "F6" + }, + "65": { + "Usb": 64, + "Evdev": 65, + "Xkb": 73, + "Win": 65, + "Mac": 98, + "Code": "F7" + }, + "66": { + "Usb": 65, + "Evdev": 66, + "Xkb": 74, + "Win": 66, + "Mac": 100, + "Code": "F8" + }, + "67": { + "Usb": 66, + "Evdev": 67, + "Xkb": 75, + "Win": 67, + "Mac": 101, + "Code": "F9" + }, + "68": { + "Usb": 67, + "Evdev": 68, + "Xkb": 76, + "Win": 68, + "Mac": 109, + "Code": "F10" + }, + "69": { + "Usb": 83, + "Evdev": 69, + "Xkb": 77, + "Win": 57413, + "Mac": 71, + "Code": "NUM_LOCK" + }, + "7": { + "Usb": 35, + "Evdev": 7, + "Xkb": 15, + "Win": 7, + "Mac": 22, + "Code": "DIGIT6" + }, + "70": { + "Usb": 71, + "Evdev": 70, + "Xkb": 78, + "Win": 70, + "Mac": 65535, + "Code": "SCROLL_LOCK" + }, + "71": { + "Usb": 95, + "Evdev": 71, + "Xkb": 79, + "Win": 71, + "Mac": 89, + "Code": "NUMPAD7" + }, + "72": { + "Usb": 96, + "Evdev": 72, + "Xkb": 80, + "Win": 72, + "Mac": 91, + "Code": "NUMPAD8" + }, + "73": { + "Usb": 97, + "Evdev": 73, + "Xkb": 81, + "Win": 73, + "Mac": 92, + "Code": "NUMPAD9" + }, + "74": { + "Usb": 86, + "Evdev": 74, + "Xkb": 82, + "Win": 74, + "Mac": 78, + "Code": "NUMPAD_SUBTRACT" + }, + "75": { + "Usb": 92, + "Evdev": 75, + "Xkb": 83, + "Win": 75, + "Mac": 86, + "Code": "NUMPAD4" + }, + "76": { + "Usb": 93, + "Evdev": 76, + "Xkb": 84, + "Win": 76, + "Mac": 87, + "Code": "NUMPAD5" + }, + "77": { + "Usb": 94, + "Evdev": 77, + "Xkb": 85, + "Win": 77, + "Mac": 88, + "Code": "NUMPAD6" + }, + "78": { + "Usb": 87, + "Evdev": 78, + "Xkb": 86, + "Win": 78, + "Mac": 69, + "Code": "NUMPAD_ADD" + }, + "79": { + "Usb": 89, + "Evdev": 79, + "Xkb": 87, + "Win": 79, + "Mac": 83, + "Code": "NUMPAD1" + }, + "8": { + "Usb": 36, + "Evdev": 8, + "Xkb": 16, + "Win": 8, + "Mac": 26, + "Code": "DIGIT7" + }, + "80": { + "Usb": 90, + "Evdev": 80, + "Xkb": 88, + "Win": 80, + "Mac": 84, + "Code": "NUMPAD2" + }, + "81": { + "Usb": 91, + "Evdev": 81, + "Xkb": 89, + "Win": 81, + "Mac": 85, + "Code": "NUMPAD3" + }, + "82": { + "Usb": 98, + "Evdev": 82, + "Xkb": 90, + "Win": 82, + "Mac": 82, + "Code": "NUMPAD0" + }, + "83": { + "Usb": 99, + "Evdev": 83, + "Xkb": 91, + "Win": 83, + "Mac": 65, + "Code": "NUMPAD_DECIMAL" + }, + "85": { + "Usb": 148, + "Evdev": 85, + "Xkb": 93, + "Win": 0, + "Mac": 65535, + "Code": "LANG5" + }, + "86": { + "Usb": 100, + "Evdev": 86, + "Xkb": 94, + "Win": 86, + "Mac": 10, + "Code": "INTL_BACKSLASH" + }, + "87": { + "Usb": 68, + "Evdev": 87, + "Xkb": 95, + "Win": 87, + "Mac": 103, + "Code": "F11" + }, + "88": { + "Usb": 69, + "Evdev": 88, + "Xkb": 96, + "Win": 88, + "Mac": 111, + "Code": "F12" + }, + "89": { + "Usb": 135, + "Evdev": 89, + "Xkb": 97, + "Win": 115, + "Mac": 94, + "Code": "INTL_RO" + }, + "9": { + "Usb": 37, + "Evdev": 9, + "Xkb": 17, + "Win": 9, + "Mac": 28, + "Code": "DIGIT8" + }, + "90": { + "Usb": 146, + "Evdev": 90, + "Xkb": 98, + "Win": 120, + "Mac": 65535, + "Code": "LANG3" + }, + "91": { + "Usb": 147, + "Evdev": 91, + "Xkb": 99, + "Win": 119, + "Mac": 65535, + "Code": "LANG4" + }, + "92": { + "Usb": 138, + "Evdev": 92, + "Xkb": 100, + "Win": 121, + "Mac": 65535, + "Code": "CONVERT" + }, + "93": { + "Usb": 136, + "Evdev": 93, + "Xkb": 101, + "Win": 112, + "Mac": 65535, + "Code": "KANA_MODE" + }, + "94": { + "Usb": 139, + "Evdev": 94, + "Xkb": 102, + "Win": 123, + "Mac": 65535, + "Code": "NON_CONVERT" + }, + "96": { + "Usb": 88, + "Evdev": 96, + "Xkb": 104, + "Win": 57372, + "Mac": 76, + "Code": "NUMPAD_ENTER" + }, + "97": { + "Usb": 228, + "Evdev": 97, + "Xkb": 105, + "Win": 57373, + "Mac": 62, + "Code": "CONTROL_RIGHT" + }, + "98": { + "Usb": 84, + "Evdev": 98, + "Xkb": 106, + "Win": 57397, + "Mac": 75, + "Code": "NUMPAD_DIVIDE" + }, + "99": { + "Usb": 70, + "Evdev": 99, + "Xkb": 107, + "Win": 57399, + "Mac": 65535, + "Code": "PRINT_SCREEN" + } + }, + "Xkb": { + "0": { + "Usb": 0, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "USB_RESERVED" + }, + "10": { + "Usb": 30, + "Evdev": 2, + "Xkb": 10, + "Win": 2, + "Mac": 18, + "Code": "DIGIT1" + }, + "100": { + "Usb": 138, + "Evdev": 92, + "Xkb": 100, + "Win": 121, + "Mac": 65535, + "Code": "CONVERT" + }, + "101": { + "Usb": 136, + "Evdev": 93, + "Xkb": 101, + "Win": 112, + "Mac": 65535, + "Code": "KANA_MODE" + }, + "102": { + "Usb": 139, + "Evdev": 94, + "Xkb": 102, + "Win": 123, + "Mac": 65535, + "Code": "NON_CONVERT" + }, + "104": { + "Usb": 88, + "Evdev": 96, + "Xkb": 104, + "Win": 57372, + "Mac": 76, + "Code": "NUMPAD_ENTER" + }, + "105": { + "Usb": 228, + "Evdev": 97, + "Xkb": 105, + "Win": 57373, + "Mac": 62, + "Code": "CONTROL_RIGHT" + }, + "106": { + "Usb": 84, + "Evdev": 98, + "Xkb": 106, + "Win": 57397, + "Mac": 75, + "Code": "NUMPAD_DIVIDE" + }, + "107": { + "Usb": 70, + "Evdev": 99, + "Xkb": 107, + "Win": 57399, + "Mac": 65535, + "Code": "PRINT_SCREEN" + }, + "108": { + "Usb": 230, + "Evdev": 100, + "Xkb": 108, + "Win": 57400, + "Mac": 61, + "Code": "ALT_RIGHT" + }, + "11": { + "Usb": 31, + "Evdev": 3, + "Xkb": 11, + "Win": 3, + "Mac": 19, + "Code": "DIGIT2" + }, + "110": { + "Usb": 74, + "Evdev": 102, + "Xkb": 110, + "Win": 57415, + "Mac": 115, + "Code": "HOME" + }, + "111": { + "Usb": 82, + "Evdev": 103, + "Xkb": 111, + "Win": 57416, + "Mac": 126, + "Code": "ARROW_UP" + }, + "112": { + "Usb": 75, + "Evdev": 104, + "Xkb": 112, + "Win": 57417, + "Mac": 116, + "Code": "PAGE_UP" + }, + "113": { + "Usb": 80, + "Evdev": 105, + "Xkb": 113, + "Win": 57419, + "Mac": 123, + "Code": "ARROW_LEFT" + }, + "114": { + "Usb": 79, + "Evdev": 106, + "Xkb": 114, + "Win": 57421, + "Mac": 124, + "Code": "ARROW_RIGHT" + }, + "115": { + "Usb": 77, + "Evdev": 107, + "Xkb": 115, + "Win": 57423, + "Mac": 119, + "Code": "END" + }, + "116": { + "Usb": 81, + "Evdev": 108, + "Xkb": 116, + "Win": 57424, + "Mac": 125, + "Code": "ARROW_DOWN" + }, + "117": { + "Usb": 78, + "Evdev": 109, + "Xkb": 117, + "Win": 57425, + "Mac": 121, + "Code": "PAGE_DOWN" + }, + "118": { + "Usb": 73, + "Evdev": 110, + "Xkb": 118, + "Win": 57426, + "Mac": 114, + "Code": "INSERT" + }, + "119": { + "Usb": 76, + "Evdev": 111, + "Xkb": 119, + "Win": 57427, + "Mac": 117, + "Code": "DEL" + }, + "12": { + "Usb": 32, + "Evdev": 4, + "Xkb": 12, + "Win": 4, + "Mac": 20, + "Code": "DIGIT3" + }, + "121": { + "Usb": 127, + "Evdev": 113, + "Xkb": 121, + "Win": 57376, + "Mac": 74, + "Code": "VOLUME_MUTE" + }, + "122": { + "Usb": 129, + "Evdev": 114, + "Xkb": 122, + "Win": 57390, + "Mac": 73, + "Code": "VOLUME_DOWN" + }, + "123": { + "Usb": 128, + "Evdev": 115, + "Xkb": 123, + "Win": 57392, + "Mac": 72, + "Code": "VOLUME_UP" + }, + "124": { + "Usb": 102, + "Evdev": 116, + "Xkb": 124, + "Win": 57438, + "Mac": 65535, + "Code": "POWER" + }, + "125": { + "Usb": 103, + "Evdev": 117, + "Xkb": 125, + "Win": 89, + "Mac": 81, + "Code": "NUMPAD_EQUAL" + }, + "126": { + "Usb": 215, + "Evdev": 118, + "Xkb": 126, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_SIGN_CHANGE" + }, + "127": { + "Usb": 72, + "Evdev": 119, + "Xkb": 127, + "Win": 69, + "Mac": 65535, + "Code": "PAUSE" + }, + "129": { + "Usb": 133, + "Evdev": 121, + "Xkb": 129, + "Win": 126, + "Mac": 95, + "Code": "NUMPAD_COMMA" + }, + "13": { + "Usb": 33, + "Evdev": 5, + "Xkb": 13, + "Win": 5, + "Mac": 21, + "Code": "DIGIT4" + }, + "130": { + "Usb": 144, + "Evdev": 122, + "Xkb": 130, + "Win": 114, + "Mac": 104, + "Code": "LANG1" + }, + "131": { + "Usb": 145, + "Evdev": 123, + "Xkb": 131, + "Win": 113, + "Mac": 102, + "Code": "LANG2" + }, + "132": { + "Usb": 137, + "Evdev": 124, + "Xkb": 132, + "Win": 125, + "Mac": 93, + "Code": "INTL_YEN" + }, + "133": { + "Usb": 227, + "Evdev": 125, + "Xkb": 133, + "Win": 57435, + "Mac": 55, + "Code": "META_LEFT" + }, + "134": { + "Usb": 231, + "Evdev": 126, + "Xkb": 134, + "Win": 57436, + "Mac": 54, + "Code": "META_RIGHT" + }, + "135": { + "Usb": 101, + "Evdev": 127, + "Xkb": 135, + "Win": 57437, + "Mac": 110, + "Code": "CONTEXT_MENU" + }, + "137": { + "Usb": 121, + "Evdev": 129, + "Xkb": 137, + "Win": 0, + "Mac": 65535, + "Code": "AGAIN" + }, + "139": { + "Usb": 122, + "Evdev": 131, + "Xkb": 139, + "Win": 57352, + "Mac": 65535, + "Code": "UNDO" + }, + "14": { + "Usb": 34, + "Evdev": 6, + "Xkb": 14, + "Win": 6, + "Mac": 23, + "Code": "DIGIT5" + }, + "140": { + "Usb": 119, + "Evdev": 132, + "Xkb": 140, + "Win": 0, + "Mac": 65535, + "Code": "SELECT" + }, + "141": { + "Usb": 124, + "Evdev": 133, + "Xkb": 141, + "Win": 57368, + "Mac": 65535, + "Code": "COPY" + }, + "142": { + "Usb": 116, + "Evdev": 134, + "Xkb": 142, + "Win": 0, + "Mac": 65535, + "Code": "OPEN" + }, + "143": { + "Usb": 125, + "Evdev": 135, + "Xkb": 143, + "Win": 57354, + "Mac": 65535, + "Code": "PASTE" + }, + "144": { + "Usb": 126, + "Evdev": 136, + "Xkb": 144, + "Win": 0, + "Mac": 65535, + "Code": "FIND" + }, + "145": { + "Usb": 123, + "Evdev": 137, + "Xkb": 145, + "Win": 57367, + "Mac": 65535, + "Code": "CUT" + }, + "146": { + "Usb": 117, + "Evdev": 138, + "Xkb": 146, + "Win": 57403, + "Mac": 65535, + "Code": "HELP" + }, + "15": { + "Usb": 35, + "Evdev": 7, + "Xkb": 15, + "Win": 7, + "Mac": 22, + "Code": "DIGIT6" + }, + "16": { + "Usb": 36, + "Evdev": 8, + "Xkb": 16, + "Win": 8, + "Mac": 26, + "Code": "DIGIT7" + }, + "17": { + "Usb": 37, + "Evdev": 9, + "Xkb": 17, + "Win": 9, + "Mac": 28, + "Code": "DIGIT8" + }, + "18": { + "Usb": 38, + "Evdev": 10, + "Xkb": 18, + "Win": 10, + "Mac": 25, + "Code": "DIGIT9" + }, + "187": { + "Usb": 182, + "Evdev": 179, + "Xkb": 187, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_PAREN_LEFT" + }, + "188": { + "Usb": 183, + "Evdev": 180, + "Xkb": 188, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_PAREN_RIGHT" + }, + "19": { + "Usb": 39, + "Evdev": 11, + "Xkb": 19, + "Win": 11, + "Mac": 29, + "Code": "DIGIT0" + }, + "191": { + "Usb": 104, + "Evdev": 183, + "Xkb": 191, + "Win": 100, + "Mac": 105, + "Code": "F13" + }, + "192": { + "Usb": 105, + "Evdev": 184, + "Xkb": 192, + "Win": 101, + "Mac": 107, + "Code": "F14" + }, + "193": { + "Usb": 106, + "Evdev": 185, + "Xkb": 193, + "Win": 102, + "Mac": 113, + "Code": "F15" + }, + "194": { + "Usb": 107, + "Evdev": 186, + "Xkb": 194, + "Win": 103, + "Mac": 106, + "Code": "F16" + }, + "195": { + "Usb": 108, + "Evdev": 187, + "Xkb": 195, + "Win": 104, + "Mac": 64, + "Code": "F17" + }, + "196": { + "Usb": 109, + "Evdev": 188, + "Xkb": 196, + "Win": 105, + "Mac": 79, + "Code": "F18" + }, + "197": { + "Usb": 110, + "Evdev": 189, + "Xkb": 197, + "Win": 106, + "Mac": 80, + "Code": "F19" + }, + "198": { + "Usb": 111, + "Evdev": 190, + "Xkb": 198, + "Win": 107, + "Mac": 90, + "Code": "F20" + }, + "199": { + "Usb": 112, + "Evdev": 191, + "Xkb": 199, + "Win": 108, + "Mac": 65535, + "Code": "F21" + }, + "20": { + "Usb": 45, + "Evdev": 12, + "Xkb": 20, + "Win": 12, + "Mac": 27, + "Code": "MINUS" + }, + "200": { + "Usb": 113, + "Evdev": 192, + "Xkb": 200, + "Win": 109, + "Mac": 65535, + "Code": "F22" + }, + "201": { + "Usb": 114, + "Evdev": 193, + "Xkb": 201, + "Win": 110, + "Mac": 65535, + "Code": "F23" + }, + "202": { + "Usb": 115, + "Evdev": 194, + "Xkb": 202, + "Win": 118, + "Mac": 65535, + "Code": "F24" + }, + "21": { + "Usb": 46, + "Evdev": 13, + "Xkb": 21, + "Win": 13, + "Mac": 24, + "Code": "EQUAL" + }, + "22": { + "Usb": 42, + "Evdev": 14, + "Xkb": 22, + "Win": 14, + "Mac": 51, + "Code": "BACKSPACE" + }, + "23": { + "Usb": 43, + "Evdev": 15, + "Xkb": 23, + "Win": 15, + "Mac": 48, + "Code": "TAB" + }, + "24": { + "Usb": 20, + "Evdev": 16, + "Xkb": 24, + "Win": 16, + "Mac": 12, + "Code": "US_Q" + }, + "25": { + "Usb": 26, + "Evdev": 17, + "Xkb": 25, + "Win": 17, + "Mac": 13, + "Code": "US_W" + }, + "26": { + "Usb": 8, + "Evdev": 18, + "Xkb": 26, + "Win": 18, + "Mac": 14, + "Code": "US_E" + }, + "27": { + "Usb": 21, + "Evdev": 19, + "Xkb": 27, + "Win": 19, + "Mac": 15, + "Code": "US_R" + }, + "28": { + "Usb": 23, + "Evdev": 20, + "Xkb": 28, + "Win": 20, + "Mac": 17, + "Code": "US_T" + }, + "29": { + "Usb": 28, + "Evdev": 21, + "Xkb": 29, + "Win": 21, + "Mac": 16, + "Code": "US_Y" + }, + "30": { + "Usb": 24, + "Evdev": 22, + "Xkb": 30, + "Win": 22, + "Mac": 32, + "Code": "US_U" + }, + "31": { + "Usb": 12, + "Evdev": 23, + "Xkb": 31, + "Win": 23, + "Mac": 34, + "Code": "US_I" + }, + "32": { + "Usb": 18, + "Evdev": 24, + "Xkb": 32, + "Win": 24, + "Mac": 31, + "Code": "US_O" + }, + "33": { + "Usb": 19, + "Evdev": 25, + "Xkb": 33, + "Win": 25, + "Mac": 35, + "Code": "US_P" + }, + "34": { + "Usb": 47, + "Evdev": 26, + "Xkb": 34, + "Win": 26, + "Mac": 33, + "Code": "BRACKET_LEFT" + }, + "35": { + "Usb": 48, + "Evdev": 27, + "Xkb": 35, + "Win": 27, + "Mac": 30, + "Code": "BRACKET_RIGHT" + }, + "36": { + "Usb": 40, + "Evdev": 28, + "Xkb": 36, + "Win": 28, + "Mac": 36, + "Code": "ENTER" + }, + "37": { + "Usb": 224, + "Evdev": 29, + "Xkb": 37, + "Win": 29, + "Mac": 59, + "Code": "CONTROL_LEFT" + }, + "38": { + "Usb": 4, + "Evdev": 30, + "Xkb": 38, + "Win": 30, + "Mac": 0, + "Code": "US_A" + }, + "39": { + "Usb": 22, + "Evdev": 31, + "Xkb": 39, + "Win": 31, + "Mac": 1, + "Code": "US_S" + }, + "40": { + "Usb": 7, + "Evdev": 32, + "Xkb": 40, + "Win": 32, + "Mac": 2, + "Code": "US_D" + }, + "41": { + "Usb": 9, + "Evdev": 33, + "Xkb": 41, + "Win": 33, + "Mac": 3, + "Code": "US_F" + }, + "42": { + "Usb": 10, + "Evdev": 34, + "Xkb": 42, + "Win": 34, + "Mac": 5, + "Code": "US_G" + }, + "43": { + "Usb": 11, + "Evdev": 35, + "Xkb": 43, + "Win": 35, + "Mac": 4, + "Code": "US_H" + }, + "44": { + "Usb": 13, + "Evdev": 36, + "Xkb": 44, + "Win": 36, + "Mac": 38, + "Code": "US_J" + }, + "45": { + "Usb": 14, + "Evdev": 37, + "Xkb": 45, + "Win": 37, + "Mac": 40, + "Code": "US_K" + }, + "46": { + "Usb": 15, + "Evdev": 38, + "Xkb": 46, + "Win": 38, + "Mac": 37, + "Code": "US_L" + }, + "47": { + "Usb": 51, + "Evdev": 39, + "Xkb": 47, + "Win": 39, + "Mac": 41, + "Code": "SEMICOLON" + }, + "48": { + "Usb": 52, + "Evdev": 40, + "Xkb": 48, + "Win": 40, + "Mac": 39, + "Code": "QUOTE" + }, + "49": { + "Usb": 53, + "Evdev": 41, + "Xkb": 49, + "Win": 41, + "Mac": 50, + "Code": "BACKQUOTE" + }, + "50": { + "Usb": 225, + "Evdev": 42, + "Xkb": 50, + "Win": 42, + "Mac": 56, + "Code": "SHIFT_LEFT" + }, + "51": { + "Usb": 49, + "Evdev": 43, + "Xkb": 51, + "Win": 43, + "Mac": 42, + "Code": "BACKSLASH" + }, + "52": { + "Usb": 29, + "Evdev": 44, + "Xkb": 52, + "Win": 44, + "Mac": 6, + "Code": "US_Z" + }, + "53": { + "Usb": 27, + "Evdev": 45, + "Xkb": 53, + "Win": 45, + "Mac": 7, + "Code": "US_X" + }, + "54": { + "Usb": 6, + "Evdev": 46, + "Xkb": 54, + "Win": 46, + "Mac": 8, + "Code": "US_C" + }, + "55": { + "Usb": 25, + "Evdev": 47, + "Xkb": 55, + "Win": 47, + "Mac": 9, + "Code": "US_V" + }, + "56": { + "Usb": 5, + "Evdev": 48, + "Xkb": 56, + "Win": 48, + "Mac": 11, + "Code": "US_B" + }, + "57": { + "Usb": 17, + "Evdev": 49, + "Xkb": 57, + "Win": 49, + "Mac": 45, + "Code": "US_N" + }, + "58": { + "Usb": 16, + "Evdev": 50, + "Xkb": 58, + "Win": 50, + "Mac": 46, + "Code": "US_M" + }, + "59": { + "Usb": 54, + "Evdev": 51, + "Xkb": 59, + "Win": 51, + "Mac": 43, + "Code": "COMMA" + }, + "60": { + "Usb": 55, + "Evdev": 52, + "Xkb": 60, + "Win": 52, + "Mac": 47, + "Code": "PERIOD" + }, + "61": { + "Usb": 56, + "Evdev": 53, + "Xkb": 61, + "Win": 53, + "Mac": 44, + "Code": "SLASH" + }, + "62": { + "Usb": 229, + "Evdev": 54, + "Xkb": 62, + "Win": 54, + "Mac": 60, + "Code": "SHIFT_RIGHT" + }, + "63": { + "Usb": 85, + "Evdev": 55, + "Xkb": 63, + "Win": 55, + "Mac": 67, + "Code": "NUMPAD_MULTIPLY" + }, + "64": { + "Usb": 226, + "Evdev": 56, + "Xkb": 64, + "Win": 56, + "Mac": 58, + "Code": "ALT_LEFT" + }, + "65": { + "Usb": 44, + "Evdev": 57, + "Xkb": 65, + "Win": 57, + "Mac": 49, + "Code": "SPACE" + }, + "66": { + "Usb": 57, + "Evdev": 58, + "Xkb": 66, + "Win": 58, + "Mac": 57, + "Code": "CAPS_LOCK" + }, + "67": { + "Usb": 58, + "Evdev": 59, + "Xkb": 67, + "Win": 59, + "Mac": 122, + "Code": "F1" + }, + "68": { + "Usb": 59, + "Evdev": 60, + "Xkb": 68, + "Win": 60, + "Mac": 120, + "Code": "F2" + }, + "69": { + "Usb": 60, + "Evdev": 61, + "Xkb": 69, + "Win": 61, + "Mac": 99, + "Code": "F3" + }, + "70": { + "Usb": 61, + "Evdev": 62, + "Xkb": 70, + "Win": 62, + "Mac": 118, + "Code": "F4" + }, + "71": { + "Usb": 62, + "Evdev": 63, + "Xkb": 71, + "Win": 63, + "Mac": 96, + "Code": "F5" + }, + "72": { + "Usb": 63, + "Evdev": 64, + "Xkb": 72, + "Win": 64, + "Mac": 97, + "Code": "F6" + }, + "73": { + "Usb": 64, + "Evdev": 65, + "Xkb": 73, + "Win": 65, + "Mac": 98, + "Code": "F7" + }, + "74": { + "Usb": 65, + "Evdev": 66, + "Xkb": 74, + "Win": 66, + "Mac": 100, + "Code": "F8" + }, + "75": { + "Usb": 66, + "Evdev": 67, + "Xkb": 75, + "Win": 67, + "Mac": 101, + "Code": "F9" + }, + "76": { + "Usb": 67, + "Evdev": 68, + "Xkb": 76, + "Win": 68, + "Mac": 109, + "Code": "F10" + }, + "77": { + "Usb": 83, + "Evdev": 69, + "Xkb": 77, + "Win": 57413, + "Mac": 71, + "Code": "NUM_LOCK" + }, + "78": { + "Usb": 71, + "Evdev": 70, + "Xkb": 78, + "Win": 70, + "Mac": 65535, + "Code": "SCROLL_LOCK" + }, + "79": { + "Usb": 95, + "Evdev": 71, + "Xkb": 79, + "Win": 71, + "Mac": 89, + "Code": "NUMPAD7" + }, + "80": { + "Usb": 96, + "Evdev": 72, + "Xkb": 80, + "Win": 72, + "Mac": 91, + "Code": "NUMPAD8" + }, + "81": { + "Usb": 97, + "Evdev": 73, + "Xkb": 81, + "Win": 73, + "Mac": 92, + "Code": "NUMPAD9" + }, + "82": { + "Usb": 86, + "Evdev": 74, + "Xkb": 82, + "Win": 74, + "Mac": 78, + "Code": "NUMPAD_SUBTRACT" + }, + "83": { + "Usb": 92, + "Evdev": 75, + "Xkb": 83, + "Win": 75, + "Mac": 86, + "Code": "NUMPAD4" + }, + "84": { + "Usb": 93, + "Evdev": 76, + "Xkb": 84, + "Win": 76, + "Mac": 87, + "Code": "NUMPAD5" + }, + "85": { + "Usb": 94, + "Evdev": 77, + "Xkb": 85, + "Win": 77, + "Mac": 88, + "Code": "NUMPAD6" + }, + "86": { + "Usb": 87, + "Evdev": 78, + "Xkb": 86, + "Win": 78, + "Mac": 69, + "Code": "NUMPAD_ADD" + }, + "87": { + "Usb": 89, + "Evdev": 79, + "Xkb": 87, + "Win": 79, + "Mac": 83, + "Code": "NUMPAD1" + }, + "88": { + "Usb": 90, + "Evdev": 80, + "Xkb": 88, + "Win": 80, + "Mac": 84, + "Code": "NUMPAD2" + }, + "89": { + "Usb": 91, + "Evdev": 81, + "Xkb": 89, + "Win": 81, + "Mac": 85, + "Code": "NUMPAD3" + }, + "9": { + "Usb": 41, + "Evdev": 1, + "Xkb": 9, + "Win": 1, + "Mac": 53, + "Code": "ESCAPE" + }, + "90": { + "Usb": 98, + "Evdev": 82, + "Xkb": 90, + "Win": 82, + "Mac": 82, + "Code": "NUMPAD0" + }, + "91": { + "Usb": 99, + "Evdev": 83, + "Xkb": 91, + "Win": 83, + "Mac": 65, + "Code": "NUMPAD_DECIMAL" + }, + "93": { + "Usb": 148, + "Evdev": 85, + "Xkb": 93, + "Win": 0, + "Mac": 65535, + "Code": "LANG5" + }, + "94": { + "Usb": 100, + "Evdev": 86, + "Xkb": 94, + "Win": 86, + "Mac": 10, + "Code": "INTL_BACKSLASH" + }, + "95": { + "Usb": 68, + "Evdev": 87, + "Xkb": 95, + "Win": 87, + "Mac": 103, + "Code": "F11" + }, + "96": { + "Usb": 69, + "Evdev": 88, + "Xkb": 96, + "Win": 88, + "Mac": 111, + "Code": "F12" + }, + "97": { + "Usb": 135, + "Evdev": 89, + "Xkb": 97, + "Win": 115, + "Mac": 94, + "Code": "INTL_RO" + }, + "98": { + "Usb": 146, + "Evdev": 90, + "Xkb": 98, + "Win": 120, + "Mac": 65535, + "Code": "LANG3" + }, + "99": { + "Usb": 147, + "Evdev": 91, + "Xkb": 99, + "Win": 119, + "Mac": 65535, + "Code": "LANG4" + } + }, + "Win": { + "0": { + "Usb": 0, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "USB_RESERVED" + }, + "1": { + "Usb": 41, + "Evdev": 1, + "Xkb": 9, + "Win": 1, + "Mac": 53, + "Code": "ESCAPE" + }, + "10": { + "Usb": 38, + "Evdev": 10, + "Xkb": 18, + "Win": 10, + "Mac": 25, + "Code": "DIGIT9" + }, + "100": { + "Usb": 104, + "Evdev": 183, + "Xkb": 191, + "Win": 100, + "Mac": 105, + "Code": "F13" + }, + "101": { + "Usb": 105, + "Evdev": 184, + "Xkb": 192, + "Win": 101, + "Mac": 107, + "Code": "F14" + }, + "102": { + "Usb": 106, + "Evdev": 185, + "Xkb": 193, + "Win": 102, + "Mac": 113, + "Code": "F15" + }, + "103": { + "Usb": 107, + "Evdev": 186, + "Xkb": 194, + "Win": 103, + "Mac": 106, + "Code": "F16" + }, + "104": { + "Usb": 108, + "Evdev": 187, + "Xkb": 195, + "Win": 104, + "Mac": 64, + "Code": "F17" + }, + "105": { + "Usb": 109, + "Evdev": 188, + "Xkb": 196, + "Win": 105, + "Mac": 79, + "Code": "F18" + }, + "106": { + "Usb": 110, + "Evdev": 189, + "Xkb": 197, + "Win": 106, + "Mac": 80, + "Code": "F19" + }, + "107": { + "Usb": 111, + "Evdev": 190, + "Xkb": 198, + "Win": 107, + "Mac": 90, + "Code": "F20" + }, + "108": { + "Usb": 112, + "Evdev": 191, + "Xkb": 199, + "Win": 108, + "Mac": 65535, + "Code": "F21" + }, + "109": { + "Usb": 113, + "Evdev": 192, + "Xkb": 200, + "Win": 109, + "Mac": 65535, + "Code": "F22" + }, + "11": { + "Usb": 39, + "Evdev": 11, + "Xkb": 19, + "Win": 11, + "Mac": 29, + "Code": "DIGIT0" + }, + "110": { + "Usb": 114, + "Evdev": 193, + "Xkb": 201, + "Win": 110, + "Mac": 65535, + "Code": "F23" + }, + "112": { + "Usb": 136, + "Evdev": 93, + "Xkb": 101, + "Win": 112, + "Mac": 65535, + "Code": "KANA_MODE" + }, + "113": { + "Usb": 145, + "Evdev": 123, + "Xkb": 131, + "Win": 113, + "Mac": 102, + "Code": "LANG2" + }, + "114": { + "Usb": 144, + "Evdev": 122, + "Xkb": 130, + "Win": 114, + "Mac": 104, + "Code": "LANG1" + }, + "115": { + "Usb": 135, + "Evdev": 89, + "Xkb": 97, + "Win": 115, + "Mac": 94, + "Code": "INTL_RO" + }, + "118": { + "Usb": 115, + "Evdev": 194, + "Xkb": 202, + "Win": 118, + "Mac": 65535, + "Code": "F24" + }, + "119": { + "Usb": 147, + "Evdev": 91, + "Xkb": 99, + "Win": 119, + "Mac": 65535, + "Code": "LANG4" + }, + "12": { + "Usb": 45, + "Evdev": 12, + "Xkb": 20, + "Win": 12, + "Mac": 27, + "Code": "MINUS" + }, + "120": { + "Usb": 146, + "Evdev": 90, + "Xkb": 98, + "Win": 120, + "Mac": 65535, + "Code": "LANG3" + }, + "121": { + "Usb": 138, + "Evdev": 92, + "Xkb": 100, + "Win": 121, + "Mac": 65535, + "Code": "CONVERT" + }, + "123": { + "Usb": 139, + "Evdev": 94, + "Xkb": 102, + "Win": 123, + "Mac": 65535, + "Code": "NON_CONVERT" + }, + "125": { + "Usb": 137, + "Evdev": 124, + "Xkb": 132, + "Win": 125, + "Mac": 93, + "Code": "INTL_YEN" + }, + "126": { + "Usb": 133, + "Evdev": 121, + "Xkb": 129, + "Win": 126, + "Mac": 95, + "Code": "NUMPAD_COMMA" + }, + "13": { + "Usb": 46, + "Evdev": 13, + "Xkb": 21, + "Win": 13, + "Mac": 24, + "Code": "EQUAL" + }, + "14": { + "Usb": 42, + "Evdev": 14, + "Xkb": 22, + "Win": 14, + "Mac": 51, + "Code": "BACKSPACE" + }, + "15": { + "Usb": 43, + "Evdev": 15, + "Xkb": 23, + "Win": 15, + "Mac": 48, + "Code": "TAB" + }, + "16": { + "Usb": 20, + "Evdev": 16, + "Xkb": 24, + "Win": 16, + "Mac": 12, + "Code": "US_Q" + }, + "17": { + "Usb": 26, + "Evdev": 17, + "Xkb": 25, + "Win": 17, + "Mac": 13, + "Code": "US_W" + }, + "18": { + "Usb": 8, + "Evdev": 18, + "Xkb": 26, + "Win": 18, + "Mac": 14, + "Code": "US_E" + }, + "19": { + "Usb": 21, + "Evdev": 19, + "Xkb": 27, + "Win": 19, + "Mac": 15, + "Code": "US_R" + }, + "2": { + "Usb": 30, + "Evdev": 2, + "Xkb": 10, + "Win": 2, + "Mac": 18, + "Code": "DIGIT1" + }, + "20": { + "Usb": 23, + "Evdev": 20, + "Xkb": 28, + "Win": 20, + "Mac": 17, + "Code": "US_T" + }, + "21": { + "Usb": 28, + "Evdev": 21, + "Xkb": 29, + "Win": 21, + "Mac": 16, + "Code": "US_Y" + }, + "22": { + "Usb": 24, + "Evdev": 22, + "Xkb": 30, + "Win": 22, + "Mac": 32, + "Code": "US_U" + }, + "23": { + "Usb": 12, + "Evdev": 23, + "Xkb": 31, + "Win": 23, + "Mac": 34, + "Code": "US_I" + }, + "24": { + "Usb": 18, + "Evdev": 24, + "Xkb": 32, + "Win": 24, + "Mac": 31, + "Code": "US_O" + }, + "25": { + "Usb": 19, + "Evdev": 25, + "Xkb": 33, + "Win": 25, + "Mac": 35, + "Code": "US_P" + }, + "252": { + "Usb": 2, + "Evdev": 0, + "Xkb": 0, + "Win": 252, + "Mac": 65535, + "Code": "USB_POST_FAIL" + }, + "255": { + "Usb": 1, + "Evdev": 0, + "Xkb": 0, + "Win": 255, + "Mac": 65535, + "Code": "USB_ERROR_ROLL_OVER" + }, + "26": { + "Usb": 47, + "Evdev": 26, + "Xkb": 34, + "Win": 26, + "Mac": 33, + "Code": "BRACKET_LEFT" + }, + "27": { + "Usb": 48, + "Evdev": 27, + "Xkb": 35, + "Win": 27, + "Mac": 30, + "Code": "BRACKET_RIGHT" + }, + "28": { + "Usb": 40, + "Evdev": 28, + "Xkb": 36, + "Win": 28, + "Mac": 36, + "Code": "ENTER" + }, + "29": { + "Usb": 224, + "Evdev": 29, + "Xkb": 37, + "Win": 29, + "Mac": 59, + "Code": "CONTROL_LEFT" + }, + "3": { + "Usb": 31, + "Evdev": 3, + "Xkb": 11, + "Win": 3, + "Mac": 19, + "Code": "DIGIT2" + }, + "30": { + "Usb": 4, + "Evdev": 30, + "Xkb": 38, + "Win": 30, + "Mac": 0, + "Code": "US_A" + }, + "31": { + "Usb": 22, + "Evdev": 31, + "Xkb": 39, + "Win": 31, + "Mac": 1, + "Code": "US_S" + }, + "32": { + "Usb": 7, + "Evdev": 32, + "Xkb": 40, + "Win": 32, + "Mac": 2, + "Code": "US_D" + }, + "33": { + "Usb": 9, + "Evdev": 33, + "Xkb": 41, + "Win": 33, + "Mac": 3, + "Code": "US_F" + }, + "34": { + "Usb": 10, + "Evdev": 34, + "Xkb": 42, + "Win": 34, + "Mac": 5, + "Code": "US_G" + }, + "35": { + "Usb": 11, + "Evdev": 35, + "Xkb": 43, + "Win": 35, + "Mac": 4, + "Code": "US_H" + }, + "36": { + "Usb": 13, + "Evdev": 36, + "Xkb": 44, + "Win": 36, + "Mac": 38, + "Code": "US_J" + }, + "37": { + "Usb": 14, + "Evdev": 37, + "Xkb": 45, + "Win": 37, + "Mac": 40, + "Code": "US_K" + }, + "38": { + "Usb": 15, + "Evdev": 38, + "Xkb": 46, + "Win": 38, + "Mac": 37, + "Code": "US_L" + }, + "39": { + "Usb": 51, + "Evdev": 39, + "Xkb": 47, + "Win": 39, + "Mac": 41, + "Code": "SEMICOLON" + }, + "4": { + "Usb": 32, + "Evdev": 4, + "Xkb": 12, + "Win": 4, + "Mac": 20, + "Code": "DIGIT3" + }, + "40": { + "Usb": 52, + "Evdev": 40, + "Xkb": 48, + "Win": 40, + "Mac": 39, + "Code": "QUOTE" + }, + "41": { + "Usb": 53, + "Evdev": 41, + "Xkb": 49, + "Win": 41, + "Mac": 50, + "Code": "BACKQUOTE" + }, + "42": { + "Usb": 225, + "Evdev": 42, + "Xkb": 50, + "Win": 42, + "Mac": 56, + "Code": "SHIFT_LEFT" + }, + "43": { + "Usb": 49, + "Evdev": 43, + "Xkb": 51, + "Win": 43, + "Mac": 42, + "Code": "BACKSLASH" + }, + "44": { + "Usb": 29, + "Evdev": 44, + "Xkb": 52, + "Win": 44, + "Mac": 6, + "Code": "US_Z" + }, + "45": { + "Usb": 27, + "Evdev": 45, + "Xkb": 53, + "Win": 45, + "Mac": 7, + "Code": "US_X" + }, + "46": { + "Usb": 6, + "Evdev": 46, + "Xkb": 54, + "Win": 46, + "Mac": 8, + "Code": "US_C" + }, + "47": { + "Usb": 25, + "Evdev": 47, + "Xkb": 55, + "Win": 47, + "Mac": 9, + "Code": "US_V" + }, + "48": { + "Usb": 5, + "Evdev": 48, + "Xkb": 56, + "Win": 48, + "Mac": 11, + "Code": "US_B" + }, + "49": { + "Usb": 17, + "Evdev": 49, + "Xkb": 57, + "Win": 49, + "Mac": 45, + "Code": "US_N" + }, + "5": { + "Usb": 33, + "Evdev": 5, + "Xkb": 13, + "Win": 5, + "Mac": 21, + "Code": "DIGIT4" + }, + "50": { + "Usb": 16, + "Evdev": 50, + "Xkb": 58, + "Win": 50, + "Mac": 46, + "Code": "US_M" + }, + "51": { + "Usb": 54, + "Evdev": 51, + "Xkb": 59, + "Win": 51, + "Mac": 43, + "Code": "COMMA" + }, + "52": { + "Usb": 55, + "Evdev": 52, + "Xkb": 60, + "Win": 52, + "Mac": 47, + "Code": "PERIOD" + }, + "53": { + "Usb": 56, + "Evdev": 53, + "Xkb": 61, + "Win": 53, + "Mac": 44, + "Code": "SLASH" + }, + "54": { + "Usb": 229, + "Evdev": 54, + "Xkb": 62, + "Win": 54, + "Mac": 60, + "Code": "SHIFT_RIGHT" + }, + "55": { + "Usb": 85, + "Evdev": 55, + "Xkb": 63, + "Win": 55, + "Mac": 67, + "Code": "NUMPAD_MULTIPLY" + }, + "56": { + "Usb": 226, + "Evdev": 56, + "Xkb": 64, + "Win": 56, + "Mac": 58, + "Code": "ALT_LEFT" + }, + "57": { + "Usb": 44, + "Evdev": 57, + "Xkb": 65, + "Win": 57, + "Mac": 49, + "Code": "SPACE" + }, + "57352": { + "Usb": 122, + "Evdev": 131, + "Xkb": 139, + "Win": 57352, + "Mac": 65535, + "Code": "UNDO" + }, + "57354": { + "Usb": 125, + "Evdev": 135, + "Xkb": 143, + "Win": 57354, + "Mac": 65535, + "Code": "PASTE" + }, + "57367": { + "Usb": 123, + "Evdev": 137, + "Xkb": 145, + "Win": 57367, + "Mac": 65535, + "Code": "CUT" + }, + "57368": { + "Usb": 124, + "Evdev": 133, + "Xkb": 141, + "Win": 57368, + "Mac": 65535, + "Code": "COPY" + }, + "57372": { + "Usb": 88, + "Evdev": 96, + "Xkb": 104, + "Win": 57372, + "Mac": 76, + "Code": "NUMPAD_ENTER" + }, + "57373": { + "Usb": 228, + "Evdev": 97, + "Xkb": 105, + "Win": 57373, + "Mac": 62, + "Code": "CONTROL_RIGHT" + }, + "57376": { + "Usb": 127, + "Evdev": 113, + "Xkb": 121, + "Win": 57376, + "Mac": 74, + "Code": "VOLUME_MUTE" + }, + "57390": { + "Usb": 129, + "Evdev": 114, + "Xkb": 122, + "Win": 57390, + "Mac": 73, + "Code": "VOLUME_DOWN" + }, + "57392": { + "Usb": 128, + "Evdev": 115, + "Xkb": 123, + "Win": 57392, + "Mac": 72, + "Code": "VOLUME_UP" + }, + "57397": { + "Usb": 84, + "Evdev": 98, + "Xkb": 106, + "Win": 57397, + "Mac": 75, + "Code": "NUMPAD_DIVIDE" + }, + "57399": { + "Usb": 70, + "Evdev": 99, + "Xkb": 107, + "Win": 57399, + "Mac": 65535, + "Code": "PRINT_SCREEN" + }, + "57400": { + "Usb": 230, + "Evdev": 100, + "Xkb": 108, + "Win": 57400, + "Mac": 61, + "Code": "ALT_RIGHT" + }, + "57403": { + "Usb": 117, + "Evdev": 138, + "Xkb": 146, + "Win": 57403, + "Mac": 65535, + "Code": "HELP" + }, + "57413": { + "Usb": 83, + "Evdev": 69, + "Xkb": 77, + "Win": 57413, + "Mac": 71, + "Code": "NUM_LOCK" + }, + "57415": { + "Usb": 74, + "Evdev": 102, + "Xkb": 110, + "Win": 57415, + "Mac": 115, + "Code": "HOME" + }, + "57416": { + "Usb": 82, + "Evdev": 103, + "Xkb": 111, + "Win": 57416, + "Mac": 126, + "Code": "ARROW_UP" + }, + "57417": { + "Usb": 75, + "Evdev": 104, + "Xkb": 112, + "Win": 57417, + "Mac": 116, + "Code": "PAGE_UP" + }, + "57419": { + "Usb": 80, + "Evdev": 105, + "Xkb": 113, + "Win": 57419, + "Mac": 123, + "Code": "ARROW_LEFT" + }, + "57421": { + "Usb": 79, + "Evdev": 106, + "Xkb": 114, + "Win": 57421, + "Mac": 124, + "Code": "ARROW_RIGHT" + }, + "57423": { + "Usb": 77, + "Evdev": 107, + "Xkb": 115, + "Win": 57423, + "Mac": 119, + "Code": "END" + }, + "57424": { + "Usb": 81, + "Evdev": 108, + "Xkb": 116, + "Win": 57424, + "Mac": 125, + "Code": "ARROW_DOWN" + }, + "57425": { + "Usb": 78, + "Evdev": 109, + "Xkb": 117, + "Win": 57425, + "Mac": 121, + "Code": "PAGE_DOWN" + }, + "57426": { + "Usb": 73, + "Evdev": 110, + "Xkb": 118, + "Win": 57426, + "Mac": 114, + "Code": "INSERT" + }, + "57427": { + "Usb": 76, + "Evdev": 111, + "Xkb": 119, + "Win": 57427, + "Mac": 117, + "Code": "DEL" + }, + "57435": { + "Usb": 227, + "Evdev": 125, + "Xkb": 133, + "Win": 57435, + "Mac": 55, + "Code": "META_LEFT" + }, + "57436": { + "Usb": 231, + "Evdev": 126, + "Xkb": 134, + "Win": 57436, + "Mac": 54, + "Code": "META_RIGHT" + }, + "57437": { + "Usb": 101, + "Evdev": 127, + "Xkb": 135, + "Win": 57437, + "Mac": 110, + "Code": "CONTEXT_MENU" + }, + "57438": { + "Usb": 102, + "Evdev": 116, + "Xkb": 124, + "Win": 57438, + "Mac": 65535, + "Code": "POWER" + }, + "58": { + "Usb": 57, + "Evdev": 58, + "Xkb": 66, + "Win": 58, + "Mac": 57, + "Code": "CAPS_LOCK" + }, + "59": { + "Usb": 58, + "Evdev": 59, + "Xkb": 67, + "Win": 59, + "Mac": 122, + "Code": "F1" + }, + "6": { + "Usb": 34, + "Evdev": 6, + "Xkb": 14, + "Win": 6, + "Mac": 23, + "Code": "DIGIT5" + }, + "60": { + "Usb": 59, + "Evdev": 60, + "Xkb": 68, + "Win": 60, + "Mac": 120, + "Code": "F2" + }, + "61": { + "Usb": 60, + "Evdev": 61, + "Xkb": 69, + "Win": 61, + "Mac": 99, + "Code": "F3" + }, + "62": { + "Usb": 61, + "Evdev": 62, + "Xkb": 70, + "Win": 62, + "Mac": 118, + "Code": "F4" + }, + "63": { + "Usb": 62, + "Evdev": 63, + "Xkb": 71, + "Win": 63, + "Mac": 96, + "Code": "F5" + }, + "64": { + "Usb": 63, + "Evdev": 64, + "Xkb": 72, + "Win": 64, + "Mac": 97, + "Code": "F6" + }, + "65": { + "Usb": 64, + "Evdev": 65, + "Xkb": 73, + "Win": 65, + "Mac": 98, + "Code": "F7" + }, + "66": { + "Usb": 65, + "Evdev": 66, + "Xkb": 74, + "Win": 66, + "Mac": 100, + "Code": "F8" + }, + "67": { + "Usb": 66, + "Evdev": 67, + "Xkb": 75, + "Win": 67, + "Mac": 101, + "Code": "F9" + }, + "68": { + "Usb": 67, + "Evdev": 68, + "Xkb": 76, + "Win": 68, + "Mac": 109, + "Code": "F10" + }, + "69": { + "Usb": 72, + "Evdev": 119, + "Xkb": 127, + "Win": 69, + "Mac": 65535, + "Code": "PAUSE" + }, + "7": { + "Usb": 35, + "Evdev": 7, + "Xkb": 15, + "Win": 7, + "Mac": 22, + "Code": "DIGIT6" + }, + "70": { + "Usb": 71, + "Evdev": 70, + "Xkb": 78, + "Win": 70, + "Mac": 65535, + "Code": "SCROLL_LOCK" + }, + "71": { + "Usb": 95, + "Evdev": 71, + "Xkb": 79, + "Win": 71, + "Mac": 89, + "Code": "NUMPAD7" + }, + "72": { + "Usb": 96, + "Evdev": 72, + "Xkb": 80, + "Win": 72, + "Mac": 91, + "Code": "NUMPAD8" + }, + "73": { + "Usb": 97, + "Evdev": 73, + "Xkb": 81, + "Win": 73, + "Mac": 92, + "Code": "NUMPAD9" + }, + "74": { + "Usb": 86, + "Evdev": 74, + "Xkb": 82, + "Win": 74, + "Mac": 78, + "Code": "NUMPAD_SUBTRACT" + }, + "75": { + "Usb": 92, + "Evdev": 75, + "Xkb": 83, + "Win": 75, + "Mac": 86, + "Code": "NUMPAD4" + }, + "76": { + "Usb": 93, + "Evdev": 76, + "Xkb": 84, + "Win": 76, + "Mac": 87, + "Code": "NUMPAD5" + }, + "77": { + "Usb": 94, + "Evdev": 77, + "Xkb": 85, + "Win": 77, + "Mac": 88, + "Code": "NUMPAD6" + }, + "78": { + "Usb": 87, + "Evdev": 78, + "Xkb": 86, + "Win": 78, + "Mac": 69, + "Code": "NUMPAD_ADD" + }, + "79": { + "Usb": 89, + "Evdev": 79, + "Xkb": 87, + "Win": 79, + "Mac": 83, + "Code": "NUMPAD1" + }, + "8": { + "Usb": 36, + "Evdev": 8, + "Xkb": 16, + "Win": 8, + "Mac": 26, + "Code": "DIGIT7" + }, + "80": { + "Usb": 90, + "Evdev": 80, + "Xkb": 88, + "Win": 80, + "Mac": 84, + "Code": "NUMPAD2" + }, + "81": { + "Usb": 91, + "Evdev": 81, + "Xkb": 89, + "Win": 81, + "Mac": 85, + "Code": "NUMPAD3" + }, + "82": { + "Usb": 98, + "Evdev": 82, + "Xkb": 90, + "Win": 82, + "Mac": 82, + "Code": "NUMPAD0" + }, + "83": { + "Usb": 99, + "Evdev": 83, + "Xkb": 91, + "Win": 83, + "Mac": 65, + "Code": "NUMPAD_DECIMAL" + }, + "86": { + "Usb": 100, + "Evdev": 86, + "Xkb": 94, + "Win": 86, + "Mac": 10, + "Code": "INTL_BACKSLASH" + }, + "87": { + "Usb": 68, + "Evdev": 87, + "Xkb": 95, + "Win": 87, + "Mac": 103, + "Code": "F11" + }, + "88": { + "Usb": 69, + "Evdev": 88, + "Xkb": 96, + "Win": 88, + "Mac": 111, + "Code": "F12" + }, + "89": { + "Usb": 103, + "Evdev": 117, + "Xkb": 125, + "Win": 89, + "Mac": 81, + "Code": "NUMPAD_EQUAL" + }, + "9": { + "Usb": 37, + "Evdev": 9, + "Xkb": 17, + "Win": 9, + "Mac": 28, + "Code": "DIGIT8" + } + }, + "Mac": { + "0": { + "Usb": 4, + "Evdev": 30, + "Xkb": 38, + "Win": 30, + "Mac": 0, + "Code": "US_A" + }, + "1": { + "Usb": 22, + "Evdev": 31, + "Xkb": 39, + "Win": 31, + "Mac": 1, + "Code": "US_S" + }, + "10": { + "Usb": 100, + "Evdev": 86, + "Xkb": 94, + "Win": 86, + "Mac": 10, + "Code": "INTL_BACKSLASH" + }, + "100": { + "Usb": 65, + "Evdev": 66, + "Xkb": 74, + "Win": 66, + "Mac": 100, + "Code": "F8" + }, + "101": { + "Usb": 66, + "Evdev": 67, + "Xkb": 75, + "Win": 67, + "Mac": 101, + "Code": "F9" + }, + "102": { + "Usb": 145, + "Evdev": 123, + "Xkb": 131, + "Win": 113, + "Mac": 102, + "Code": "LANG2" + }, + "103": { + "Usb": 68, + "Evdev": 87, + "Xkb": 95, + "Win": 87, + "Mac": 103, + "Code": "F11" + }, + "104": { + "Usb": 144, + "Evdev": 122, + "Xkb": 130, + "Win": 114, + "Mac": 104, + "Code": "LANG1" + }, + "105": { + "Usb": 104, + "Evdev": 183, + "Xkb": 191, + "Win": 100, + "Mac": 105, + "Code": "F13" + }, + "106": { + "Usb": 107, + "Evdev": 186, + "Xkb": 194, + "Win": 103, + "Mac": 106, + "Code": "F16" + }, + "107": { + "Usb": 105, + "Evdev": 184, + "Xkb": 192, + "Win": 101, + "Mac": 107, + "Code": "F14" + }, + "109": { + "Usb": 67, + "Evdev": 68, + "Xkb": 76, + "Win": 68, + "Mac": 109, + "Code": "F10" + }, + "11": { + "Usb": 5, + "Evdev": 48, + "Xkb": 56, + "Win": 48, + "Mac": 11, + "Code": "US_B" + }, + "110": { + "Usb": 101, + "Evdev": 127, + "Xkb": 135, + "Win": 57437, + "Mac": 110, + "Code": "CONTEXT_MENU" + }, + "111": { + "Usb": 69, + "Evdev": 88, + "Xkb": 96, + "Win": 88, + "Mac": 111, + "Code": "F12" + }, + "113": { + "Usb": 106, + "Evdev": 185, + "Xkb": 193, + "Win": 102, + "Mac": 113, + "Code": "F15" + }, + "114": { + "Usb": 73, + "Evdev": 110, + "Xkb": 118, + "Win": 57426, + "Mac": 114, + "Code": "INSERT" + }, + "115": { + "Usb": 74, + "Evdev": 102, + "Xkb": 110, + "Win": 57415, + "Mac": 115, + "Code": "HOME" + }, + "116": { + "Usb": 75, + "Evdev": 104, + "Xkb": 112, + "Win": 57417, + "Mac": 116, + "Code": "PAGE_UP" + }, + "117": { + "Usb": 76, + "Evdev": 111, + "Xkb": 119, + "Win": 57427, + "Mac": 117, + "Code": "DEL" + }, + "118": { + "Usb": 61, + "Evdev": 62, + "Xkb": 70, + "Win": 62, + "Mac": 118, + "Code": "F4" + }, + "119": { + "Usb": 77, + "Evdev": 107, + "Xkb": 115, + "Win": 57423, + "Mac": 119, + "Code": "END" + }, + "12": { + "Usb": 20, + "Evdev": 16, + "Xkb": 24, + "Win": 16, + "Mac": 12, + "Code": "US_Q" + }, + "120": { + "Usb": 59, + "Evdev": 60, + "Xkb": 68, + "Win": 60, + "Mac": 120, + "Code": "F2" + }, + "121": { + "Usb": 78, + "Evdev": 109, + "Xkb": 117, + "Win": 57425, + "Mac": 121, + "Code": "PAGE_DOWN" + }, + "122": { + "Usb": 58, + "Evdev": 59, + "Xkb": 67, + "Win": 59, + "Mac": 122, + "Code": "F1" + }, + "123": { + "Usb": 80, + "Evdev": 105, + "Xkb": 113, + "Win": 57419, + "Mac": 123, + "Code": "ARROW_LEFT" + }, + "124": { + "Usb": 79, + "Evdev": 106, + "Xkb": 114, + "Win": 57421, + "Mac": 124, + "Code": "ARROW_RIGHT" + }, + "125": { + "Usb": 81, + "Evdev": 108, + "Xkb": 116, + "Win": 57424, + "Mac": 125, + "Code": "ARROW_DOWN" + }, + "126": { + "Usb": 82, + "Evdev": 103, + "Xkb": 111, + "Win": 57416, + "Mac": 126, + "Code": "ARROW_UP" + }, + "13": { + "Usb": 26, + "Evdev": 17, + "Xkb": 25, + "Win": 17, + "Mac": 13, + "Code": "US_W" + }, + "14": { + "Usb": 8, + "Evdev": 18, + "Xkb": 26, + "Win": 18, + "Mac": 14, + "Code": "US_E" + }, + "15": { + "Usb": 21, + "Evdev": 19, + "Xkb": 27, + "Win": 19, + "Mac": 15, + "Code": "US_R" + }, + "16": { + "Usb": 28, + "Evdev": 21, + "Xkb": 29, + "Win": 21, + "Mac": 16, + "Code": "US_Y" + }, + "17": { + "Usb": 23, + "Evdev": 20, + "Xkb": 28, + "Win": 20, + "Mac": 17, + "Code": "US_T" + }, + "18": { + "Usb": 30, + "Evdev": 2, + "Xkb": 10, + "Win": 2, + "Mac": 18, + "Code": "DIGIT1" + }, + "19": { + "Usb": 31, + "Evdev": 3, + "Xkb": 11, + "Win": 3, + "Mac": 19, + "Code": "DIGIT2" + }, + "2": { + "Usb": 7, + "Evdev": 32, + "Xkb": 40, + "Win": 32, + "Mac": 2, + "Code": "US_D" + }, + "20": { + "Usb": 32, + "Evdev": 4, + "Xkb": 12, + "Win": 4, + "Mac": 20, + "Code": "DIGIT3" + }, + "21": { + "Usb": 33, + "Evdev": 5, + "Xkb": 13, + "Win": 5, + "Mac": 21, + "Code": "DIGIT4" + }, + "22": { + "Usb": 35, + "Evdev": 7, + "Xkb": 15, + "Win": 7, + "Mac": 22, + "Code": "DIGIT6" + }, + "23": { + "Usb": 34, + "Evdev": 6, + "Xkb": 14, + "Win": 6, + "Mac": 23, + "Code": "DIGIT5" + }, + "24": { + "Usb": 46, + "Evdev": 13, + "Xkb": 21, + "Win": 13, + "Mac": 24, + "Code": "EQUAL" + }, + "25": { + "Usb": 38, + "Evdev": 10, + "Xkb": 18, + "Win": 10, + "Mac": 25, + "Code": "DIGIT9" + }, + "26": { + "Usb": 36, + "Evdev": 8, + "Xkb": 16, + "Win": 8, + "Mac": 26, + "Code": "DIGIT7" + }, + "27": { + "Usb": 45, + "Evdev": 12, + "Xkb": 20, + "Win": 12, + "Mac": 27, + "Code": "MINUS" + }, + "28": { + "Usb": 37, + "Evdev": 9, + "Xkb": 17, + "Win": 9, + "Mac": 28, + "Code": "DIGIT8" + }, + "29": { + "Usb": 39, + "Evdev": 11, + "Xkb": 19, + "Win": 11, + "Mac": 29, + "Code": "DIGIT0" + }, + "3": { + "Usb": 9, + "Evdev": 33, + "Xkb": 41, + "Win": 33, + "Mac": 3, + "Code": "US_F" + }, + "30": { + "Usb": 48, + "Evdev": 27, + "Xkb": 35, + "Win": 27, + "Mac": 30, + "Code": "BRACKET_RIGHT" + }, + "31": { + "Usb": 18, + "Evdev": 24, + "Xkb": 32, + "Win": 24, + "Mac": 31, + "Code": "US_O" + }, + "32": { + "Usb": 24, + "Evdev": 22, + "Xkb": 30, + "Win": 22, + "Mac": 32, + "Code": "US_U" + }, + "33": { + "Usb": 47, + "Evdev": 26, + "Xkb": 34, + "Win": 26, + "Mac": 33, + "Code": "BRACKET_LEFT" + }, + "34": { + "Usb": 12, + "Evdev": 23, + "Xkb": 31, + "Win": 23, + "Mac": 34, + "Code": "US_I" + }, + "35": { + "Usb": 19, + "Evdev": 25, + "Xkb": 33, + "Win": 25, + "Mac": 35, + "Code": "US_P" + }, + "36": { + "Usb": 40, + "Evdev": 28, + "Xkb": 36, + "Win": 28, + "Mac": 36, + "Code": "ENTER" + }, + "37": { + "Usb": 15, + "Evdev": 38, + "Xkb": 46, + "Win": 38, + "Mac": 37, + "Code": "US_L" + }, + "38": { + "Usb": 13, + "Evdev": 36, + "Xkb": 44, + "Win": 36, + "Mac": 38, + "Code": "US_J" + }, + "39": { + "Usb": 52, + "Evdev": 40, + "Xkb": 48, + "Win": 40, + "Mac": 39, + "Code": "QUOTE" + }, + "4": { + "Usb": 11, + "Evdev": 35, + "Xkb": 43, + "Win": 35, + "Mac": 4, + "Code": "US_H" + }, + "40": { + "Usb": 14, + "Evdev": 37, + "Xkb": 45, + "Win": 37, + "Mac": 40, + "Code": "US_K" + }, + "41": { + "Usb": 51, + "Evdev": 39, + "Xkb": 47, + "Win": 39, + "Mac": 41, + "Code": "SEMICOLON" + }, + "42": { + "Usb": 49, + "Evdev": 43, + "Xkb": 51, + "Win": 43, + "Mac": 42, + "Code": "BACKSLASH" + }, + "43": { + "Usb": 54, + "Evdev": 51, + "Xkb": 59, + "Win": 51, + "Mac": 43, + "Code": "COMMA" + }, + "44": { + "Usb": 56, + "Evdev": 53, + "Xkb": 61, + "Win": 53, + "Mac": 44, + "Code": "SLASH" + }, + "45": { + "Usb": 17, + "Evdev": 49, + "Xkb": 57, + "Win": 49, + "Mac": 45, + "Code": "US_N" + }, + "46": { + "Usb": 16, + "Evdev": 50, + "Xkb": 58, + "Win": 50, + "Mac": 46, + "Code": "US_M" + }, + "47": { + "Usb": 55, + "Evdev": 52, + "Xkb": 60, + "Win": 52, + "Mac": 47, + "Code": "PERIOD" + }, + "48": { + "Usb": 43, + "Evdev": 15, + "Xkb": 23, + "Win": 15, + "Mac": 48, + "Code": "TAB" + }, + "49": { + "Usb": 44, + "Evdev": 57, + "Xkb": 65, + "Win": 57, + "Mac": 49, + "Code": "SPACE" + }, + "5": { + "Usb": 10, + "Evdev": 34, + "Xkb": 42, + "Win": 34, + "Mac": 5, + "Code": "US_G" + }, + "50": { + "Usb": 53, + "Evdev": 41, + "Xkb": 49, + "Win": 41, + "Mac": 50, + "Code": "BACKQUOTE" + }, + "51": { + "Usb": 42, + "Evdev": 14, + "Xkb": 22, + "Win": 14, + "Mac": 51, + "Code": "BACKSPACE" + }, + "53": { + "Usb": 41, + "Evdev": 1, + "Xkb": 9, + "Win": 1, + "Mac": 53, + "Code": "ESCAPE" + }, + "54": { + "Usb": 231, + "Evdev": 126, + "Xkb": 134, + "Win": 57436, + "Mac": 54, + "Code": "META_RIGHT" + }, + "55": { + "Usb": 227, + "Evdev": 125, + "Xkb": 133, + "Win": 57435, + "Mac": 55, + "Code": "META_LEFT" + }, + "56": { + "Usb": 225, + "Evdev": 42, + "Xkb": 50, + "Win": 42, + "Mac": 56, + "Code": "SHIFT_LEFT" + }, + "57": { + "Usb": 57, + "Evdev": 58, + "Xkb": 66, + "Win": 58, + "Mac": 57, + "Code": "CAPS_LOCK" + }, + "58": { + "Usb": 226, + "Evdev": 56, + "Xkb": 64, + "Win": 56, + "Mac": 58, + "Code": "ALT_LEFT" + }, + "59": { + "Usb": 224, + "Evdev": 29, + "Xkb": 37, + "Win": 29, + "Mac": 59, + "Code": "CONTROL_LEFT" + }, + "6": { + "Usb": 29, + "Evdev": 44, + "Xkb": 52, + "Win": 44, + "Mac": 6, + "Code": "US_Z" + }, + "60": { + "Usb": 229, + "Evdev": 54, + "Xkb": 62, + "Win": 54, + "Mac": 60, + "Code": "SHIFT_RIGHT" + }, + "61": { + "Usb": 230, + "Evdev": 100, + "Xkb": 108, + "Win": 57400, + "Mac": 61, + "Code": "ALT_RIGHT" + }, + "62": { + "Usb": 228, + "Evdev": 97, + "Xkb": 105, + "Win": 57373, + "Mac": 62, + "Code": "CONTROL_RIGHT" + }, + "64": { + "Usb": 108, + "Evdev": 187, + "Xkb": 195, + "Win": 104, + "Mac": 64, + "Code": "F17" + }, + "65": { + "Usb": 99, + "Evdev": 83, + "Xkb": 91, + "Win": 83, + "Mac": 65, + "Code": "NUMPAD_DECIMAL" + }, + "65535": { + "Usb": 0, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "USB_RESERVED" + }, + "67": { + "Usb": 85, + "Evdev": 55, + "Xkb": 63, + "Win": 55, + "Mac": 67, + "Code": "NUMPAD_MULTIPLY" + }, + "69": { + "Usb": 87, + "Evdev": 78, + "Xkb": 86, + "Win": 78, + "Mac": 69, + "Code": "NUMPAD_ADD" + }, + "7": { + "Usb": 27, + "Evdev": 45, + "Xkb": 53, + "Win": 45, + "Mac": 7, + "Code": "US_X" + }, + "71": { + "Usb": 83, + "Evdev": 69, + "Xkb": 77, + "Win": 57413, + "Mac": 71, + "Code": "NUM_LOCK" + }, + "72": { + "Usb": 128, + "Evdev": 115, + "Xkb": 123, + "Win": 57392, + "Mac": 72, + "Code": "VOLUME_UP" + }, + "73": { + "Usb": 129, + "Evdev": 114, + "Xkb": 122, + "Win": 57390, + "Mac": 73, + "Code": "VOLUME_DOWN" + }, + "74": { + "Usb": 127, + "Evdev": 113, + "Xkb": 121, + "Win": 57376, + "Mac": 74, + "Code": "VOLUME_MUTE" + }, + "75": { + "Usb": 84, + "Evdev": 98, + "Xkb": 106, + "Win": 57397, + "Mac": 75, + "Code": "NUMPAD_DIVIDE" + }, + "76": { + "Usb": 88, + "Evdev": 96, + "Xkb": 104, + "Win": 57372, + "Mac": 76, + "Code": "NUMPAD_ENTER" + }, + "78": { + "Usb": 86, + "Evdev": 74, + "Xkb": 82, + "Win": 74, + "Mac": 78, + "Code": "NUMPAD_SUBTRACT" + }, + "79": { + "Usb": 109, + "Evdev": 188, + "Xkb": 196, + "Win": 105, + "Mac": 79, + "Code": "F18" + }, + "8": { + "Usb": 6, + "Evdev": 46, + "Xkb": 54, + "Win": 46, + "Mac": 8, + "Code": "US_C" + }, + "80": { + "Usb": 110, + "Evdev": 189, + "Xkb": 197, + "Win": 106, + "Mac": 80, + "Code": "F19" + }, + "81": { + "Usb": 103, + "Evdev": 117, + "Xkb": 125, + "Win": 89, + "Mac": 81, + "Code": "NUMPAD_EQUAL" + }, + "82": { + "Usb": 98, + "Evdev": 82, + "Xkb": 90, + "Win": 82, + "Mac": 82, + "Code": "NUMPAD0" + }, + "83": { + "Usb": 89, + "Evdev": 79, + "Xkb": 87, + "Win": 79, + "Mac": 83, + "Code": "NUMPAD1" + }, + "84": { + "Usb": 90, + "Evdev": 80, + "Xkb": 88, + "Win": 80, + "Mac": 84, + "Code": "NUMPAD2" + }, + "85": { + "Usb": 91, + "Evdev": 81, + "Xkb": 89, + "Win": 81, + "Mac": 85, + "Code": "NUMPAD3" + }, + "86": { + "Usb": 92, + "Evdev": 75, + "Xkb": 83, + "Win": 75, + "Mac": 86, + "Code": "NUMPAD4" + }, + "87": { + "Usb": 93, + "Evdev": 76, + "Xkb": 84, + "Win": 76, + "Mac": 87, + "Code": "NUMPAD5" + }, + "88": { + "Usb": 94, + "Evdev": 77, + "Xkb": 85, + "Win": 77, + "Mac": 88, + "Code": "NUMPAD6" + }, + "89": { + "Usb": 95, + "Evdev": 71, + "Xkb": 79, + "Win": 71, + "Mac": 89, + "Code": "NUMPAD7" + }, + "9": { + "Usb": 25, + "Evdev": 47, + "Xkb": 55, + "Win": 47, + "Mac": 9, + "Code": "US_V" + }, + "90": { + "Usb": 111, + "Evdev": 190, + "Xkb": 198, + "Win": 107, + "Mac": 90, + "Code": "F20" + }, + "91": { + "Usb": 96, + "Evdev": 72, + "Xkb": 80, + "Win": 72, + "Mac": 91, + "Code": "NUMPAD8" + }, + "92": { + "Usb": 97, + "Evdev": 73, + "Xkb": 81, + "Win": 73, + "Mac": 92, + "Code": "NUMPAD9" + }, + "93": { + "Usb": 137, + "Evdev": 124, + "Xkb": 132, + "Win": 125, + "Mac": 93, + "Code": "INTL_YEN" + }, + "94": { + "Usb": 135, + "Evdev": 89, + "Xkb": 97, + "Win": 115, + "Mac": 94, + "Code": "INTL_RO" + }, + "95": { + "Usb": 133, + "Evdev": 121, + "Xkb": 129, + "Win": 126, + "Mac": 95, + "Code": "NUMPAD_COMMA" + }, + "96": { + "Usb": 62, + "Evdev": 63, + "Xkb": 71, + "Win": 63, + "Mac": 96, + "Code": "F5" + }, + "97": { + "Usb": 63, + "Evdev": 64, + "Xkb": 72, + "Win": 64, + "Mac": 97, + "Code": "F6" + }, + "98": { + "Usb": 64, + "Evdev": 65, + "Xkb": 73, + "Win": 65, + "Mac": 98, + "Code": "F7" + }, + "99": { + "Usb": 60, + "Evdev": 61, + "Xkb": 69, + "Win": 61, + "Mac": 99, + "Code": "F3" + } + }, + "Code": { + "ABORT": { + "Usb": 155, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "ABORT" + }, + "AGAIN": { + "Usb": 121, + "Evdev": 129, + "Xkb": 137, + "Win": 0, + "Mac": 65535, + "Code": "AGAIN" + }, + "ALT_LEFT": { + "Usb": 226, + "Evdev": 56, + "Xkb": 64, + "Win": 56, + "Mac": 58, + "Code": "ALT_LEFT" + }, + "ALT_RIGHT": { + "Usb": 230, + "Evdev": 100, + "Xkb": 108, + "Win": 57400, + "Mac": 61, + "Code": "ALT_RIGHT" + }, + "ARROW_DOWN": { + "Usb": 81, + "Evdev": 108, + "Xkb": 116, + "Win": 57424, + "Mac": 125, + "Code": "ARROW_DOWN" + }, + "ARROW_LEFT": { + "Usb": 80, + "Evdev": 105, + "Xkb": 113, + "Win": 57419, + "Mac": 123, + "Code": "ARROW_LEFT" + }, + "ARROW_RIGHT": { + "Usb": 79, + "Evdev": 106, + "Xkb": 114, + "Win": 57421, + "Mac": 124, + "Code": "ARROW_RIGHT" + }, + "ARROW_UP": { + "Usb": 82, + "Evdev": 103, + "Xkb": 111, + "Win": 57416, + "Mac": 126, + "Code": "ARROW_UP" + }, + "BACKQUOTE": { + "Usb": 53, + "Evdev": 41, + "Xkb": 49, + "Win": 41, + "Mac": 50, + "Code": "BACKQUOTE" + }, + "BACKSLASH": { + "Usb": 49, + "Evdev": 43, + "Xkb": 51, + "Win": 43, + "Mac": 42, + "Code": "BACKSLASH" + }, + "BACKSPACE": { + "Usb": 42, + "Evdev": 14, + "Xkb": 22, + "Win": 14, + "Mac": 51, + "Code": "BACKSPACE" + }, + "BRACKET_LEFT": { + "Usb": 47, + "Evdev": 26, + "Xkb": 34, + "Win": 26, + "Mac": 33, + "Code": "BRACKET_LEFT" + }, + "BRACKET_RIGHT": { + "Usb": 48, + "Evdev": 27, + "Xkb": 35, + "Win": 27, + "Mac": 30, + "Code": "BRACKET_RIGHT" + }, + "CAPS_LOCK": { + "Usb": 57, + "Evdev": 58, + "Xkb": 66, + "Win": 58, + "Mac": 57, + "Code": "CAPS_LOCK" + }, + "COMMA": { + "Usb": 54, + "Evdev": 51, + "Xkb": 59, + "Win": 51, + "Mac": 43, + "Code": "COMMA" + }, + "CONTEXT_MENU": { + "Usb": 101, + "Evdev": 127, + "Xkb": 135, + "Win": 57437, + "Mac": 110, + "Code": "CONTEXT_MENU" + }, + "CONTROL_LEFT": { + "Usb": 224, + "Evdev": 29, + "Xkb": 37, + "Win": 29, + "Mac": 59, + "Code": "CONTROL_LEFT" + }, + "CONTROL_RIGHT": { + "Usb": 228, + "Evdev": 97, + "Xkb": 105, + "Win": 57373, + "Mac": 62, + "Code": "CONTROL_RIGHT" + }, + "CONVERT": { + "Usb": 138, + "Evdev": 92, + "Xkb": 100, + "Win": 121, + "Mac": 65535, + "Code": "CONVERT" + }, + "COPY": { + "Usb": 124, + "Evdev": 133, + "Xkb": 141, + "Win": 57368, + "Mac": 65535, + "Code": "COPY" + }, + "CUT": { + "Usb": 123, + "Evdev": 137, + "Xkb": 145, + "Win": 57367, + "Mac": 65535, + "Code": "CUT" + }, + "DEL": { + "Usb": 76, + "Evdev": 111, + "Xkb": 119, + "Win": 57427, + "Mac": 117, + "Code": "DEL" + }, + "DIGIT0": { + "Usb": 39, + "Evdev": 11, + "Xkb": 19, + "Win": 11, + "Mac": 29, + "Code": "DIGIT0" + }, + "DIGIT1": { + "Usb": 30, + "Evdev": 2, + "Xkb": 10, + "Win": 2, + "Mac": 18, + "Code": "DIGIT1" + }, + "DIGIT2": { + "Usb": 31, + "Evdev": 3, + "Xkb": 11, + "Win": 3, + "Mac": 19, + "Code": "DIGIT2" + }, + "DIGIT3": { + "Usb": 32, + "Evdev": 4, + "Xkb": 12, + "Win": 4, + "Mac": 20, + "Code": "DIGIT3" + }, + "DIGIT4": { + "Usb": 33, + "Evdev": 5, + "Xkb": 13, + "Win": 5, + "Mac": 21, + "Code": "DIGIT4" + }, + "DIGIT5": { + "Usb": 34, + "Evdev": 6, + "Xkb": 14, + "Win": 6, + "Mac": 23, + "Code": "DIGIT5" + }, + "DIGIT6": { + "Usb": 35, + "Evdev": 7, + "Xkb": 15, + "Win": 7, + "Mac": 22, + "Code": "DIGIT6" + }, + "DIGIT7": { + "Usb": 36, + "Evdev": 8, + "Xkb": 16, + "Win": 8, + "Mac": 26, + "Code": "DIGIT7" + }, + "DIGIT8": { + "Usb": 37, + "Evdev": 9, + "Xkb": 17, + "Win": 9, + "Mac": 28, + "Code": "DIGIT8" + }, + "DIGIT9": { + "Usb": 38, + "Evdev": 10, + "Xkb": 18, + "Win": 10, + "Mac": 25, + "Code": "DIGIT9" + }, + "END": { + "Usb": 77, + "Evdev": 107, + "Xkb": 115, + "Win": 57423, + "Mac": 119, + "Code": "END" + }, + "ENTER": { + "Usb": 40, + "Evdev": 28, + "Xkb": 36, + "Win": 28, + "Mac": 36, + "Code": "ENTER" + }, + "EQUAL": { + "Usb": 46, + "Evdev": 13, + "Xkb": 21, + "Win": 13, + "Mac": 24, + "Code": "EQUAL" + }, + "ESCAPE": { + "Usb": 41, + "Evdev": 1, + "Xkb": 9, + "Win": 1, + "Mac": 53, + "Code": "ESCAPE" + }, + "F1": { + "Usb": 58, + "Evdev": 59, + "Xkb": 67, + "Win": 59, + "Mac": 122, + "Code": "F1" + }, + "F10": { + "Usb": 67, + "Evdev": 68, + "Xkb": 76, + "Win": 68, + "Mac": 109, + "Code": "F10" + }, + "F11": { + "Usb": 68, + "Evdev": 87, + "Xkb": 95, + "Win": 87, + "Mac": 103, + "Code": "F11" + }, + "F12": { + "Usb": 69, + "Evdev": 88, + "Xkb": 96, + "Win": 88, + "Mac": 111, + "Code": "F12" + }, + "F13": { + "Usb": 104, + "Evdev": 183, + "Xkb": 191, + "Win": 100, + "Mac": 105, + "Code": "F13" + }, + "F14": { + "Usb": 105, + "Evdev": 184, + "Xkb": 192, + "Win": 101, + "Mac": 107, + "Code": "F14" + }, + "F15": { + "Usb": 106, + "Evdev": 185, + "Xkb": 193, + "Win": 102, + "Mac": 113, + "Code": "F15" + }, + "F16": { + "Usb": 107, + "Evdev": 186, + "Xkb": 194, + "Win": 103, + "Mac": 106, + "Code": "F16" + }, + "F17": { + "Usb": 108, + "Evdev": 187, + "Xkb": 195, + "Win": 104, + "Mac": 64, + "Code": "F17" + }, + "F18": { + "Usb": 109, + "Evdev": 188, + "Xkb": 196, + "Win": 105, + "Mac": 79, + "Code": "F18" + }, + "F19": { + "Usb": 110, + "Evdev": 189, + "Xkb": 197, + "Win": 106, + "Mac": 80, + "Code": "F19" + }, + "F2": { + "Usb": 59, + "Evdev": 60, + "Xkb": 68, + "Win": 60, + "Mac": 120, + "Code": "F2" + }, + "F20": { + "Usb": 111, + "Evdev": 190, + "Xkb": 198, + "Win": 107, + "Mac": 90, + "Code": "F20" + }, + "F21": { + "Usb": 112, + "Evdev": 191, + "Xkb": 199, + "Win": 108, + "Mac": 65535, + "Code": "F21" + }, + "F22": { + "Usb": 113, + "Evdev": 192, + "Xkb": 200, + "Win": 109, + "Mac": 65535, + "Code": "F22" + }, + "F23": { + "Usb": 114, + "Evdev": 193, + "Xkb": 201, + "Win": 110, + "Mac": 65535, + "Code": "F23" + }, + "F24": { + "Usb": 115, + "Evdev": 194, + "Xkb": 202, + "Win": 118, + "Mac": 65535, + "Code": "F24" + }, + "F3": { + "Usb": 60, + "Evdev": 61, + "Xkb": 69, + "Win": 61, + "Mac": 99, + "Code": "F3" + }, + "F4": { + "Usb": 61, + "Evdev": 62, + "Xkb": 70, + "Win": 62, + "Mac": 118, + "Code": "F4" + }, + "F5": { + "Usb": 62, + "Evdev": 63, + "Xkb": 71, + "Win": 63, + "Mac": 96, + "Code": "F5" + }, + "F6": { + "Usb": 63, + "Evdev": 64, + "Xkb": 72, + "Win": 64, + "Mac": 97, + "Code": "F6" + }, + "F7": { + "Usb": 64, + "Evdev": 65, + "Xkb": 73, + "Win": 65, + "Mac": 98, + "Code": "F7" + }, + "F8": { + "Usb": 65, + "Evdev": 66, + "Xkb": 74, + "Win": 66, + "Mac": 100, + "Code": "F8" + }, + "F9": { + "Usb": 66, + "Evdev": 67, + "Xkb": 75, + "Win": 67, + "Mac": 101, + "Code": "F9" + }, + "FIND": { + "Usb": 126, + "Evdev": 136, + "Xkb": 144, + "Win": 0, + "Mac": 65535, + "Code": "FIND" + }, + "HELP": { + "Usb": 117, + "Evdev": 138, + "Xkb": 146, + "Win": 57403, + "Mac": 65535, + "Code": "HELP" + }, + "HOME": { + "Usb": 74, + "Evdev": 102, + "Xkb": 110, + "Win": 57415, + "Mac": 115, + "Code": "HOME" + }, + "INSERT": { + "Usb": 73, + "Evdev": 110, + "Xkb": 118, + "Win": 57426, + "Mac": 114, + "Code": "INSERT" + }, + "INTL_BACKSLASH": { + "Usb": 100, + "Evdev": 86, + "Xkb": 94, + "Win": 86, + "Mac": 10, + "Code": "INTL_BACKSLASH" + }, + "INTL_RO": { + "Usb": 135, + "Evdev": 89, + "Xkb": 97, + "Win": 115, + "Mac": 94, + "Code": "INTL_RO" + }, + "INTL_YEN": { + "Usb": 137, + "Evdev": 124, + "Xkb": 132, + "Win": 125, + "Mac": 93, + "Code": "INTL_YEN" + }, + "KANA_MODE": { + "Usb": 136, + "Evdev": 93, + "Xkb": 101, + "Win": 112, + "Mac": 65535, + "Code": "KANA_MODE" + }, + "LANG1": { + "Usb": 144, + "Evdev": 122, + "Xkb": 130, + "Win": 114, + "Mac": 104, + "Code": "LANG1" + }, + "LANG2": { + "Usb": 145, + "Evdev": 123, + "Xkb": 131, + "Win": 113, + "Mac": 102, + "Code": "LANG2" + }, + "LANG3": { + "Usb": 146, + "Evdev": 90, + "Xkb": 98, + "Win": 120, + "Mac": 65535, + "Code": "LANG3" + }, + "LANG4": { + "Usb": 147, + "Evdev": 91, + "Xkb": 99, + "Win": 119, + "Mac": 65535, + "Code": "LANG4" + }, + "LANG5": { + "Usb": 148, + "Evdev": 85, + "Xkb": 93, + "Win": 0, + "Mac": 65535, + "Code": "LANG5" + }, + "META_LEFT": { + "Usb": 227, + "Evdev": 125, + "Xkb": 133, + "Win": 57435, + "Mac": 55, + "Code": "META_LEFT" + }, + "META_RIGHT": { + "Usb": 231, + "Evdev": 126, + "Xkb": 134, + "Win": 57436, + "Mac": 54, + "Code": "META_RIGHT" + }, + "MINUS": { + "Usb": 45, + "Evdev": 12, + "Xkb": 20, + "Win": 12, + "Mac": 27, + "Code": "MINUS" + }, + "NON_CONVERT": { + "Usb": 139, + "Evdev": 94, + "Xkb": 102, + "Win": 123, + "Mac": 65535, + "Code": "NON_CONVERT" + }, + "NUMPAD0": { + "Usb": 98, + "Evdev": 82, + "Xkb": 90, + "Win": 82, + "Mac": 82, + "Code": "NUMPAD0" + }, + "NUMPAD1": { + "Usb": 89, + "Evdev": 79, + "Xkb": 87, + "Win": 79, + "Mac": 83, + "Code": "NUMPAD1" + }, + "NUMPAD2": { + "Usb": 90, + "Evdev": 80, + "Xkb": 88, + "Win": 80, + "Mac": 84, + "Code": "NUMPAD2" + }, + "NUMPAD3": { + "Usb": 91, + "Evdev": 81, + "Xkb": 89, + "Win": 81, + "Mac": 85, + "Code": "NUMPAD3" + }, + "NUMPAD4": { + "Usb": 92, + "Evdev": 75, + "Xkb": 83, + "Win": 75, + "Mac": 86, + "Code": "NUMPAD4" + }, + "NUMPAD5": { + "Usb": 93, + "Evdev": 76, + "Xkb": 84, + "Win": 76, + "Mac": 87, + "Code": "NUMPAD5" + }, + "NUMPAD6": { + "Usb": 94, + "Evdev": 77, + "Xkb": 85, + "Win": 77, + "Mac": 88, + "Code": "NUMPAD6" + }, + "NUMPAD7": { + "Usb": 95, + "Evdev": 71, + "Xkb": 79, + "Win": 71, + "Mac": 89, + "Code": "NUMPAD7" + }, + "NUMPAD8": { + "Usb": 96, + "Evdev": 72, + "Xkb": 80, + "Win": 72, + "Mac": 91, + "Code": "NUMPAD8" + }, + "NUMPAD9": { + "Usb": 97, + "Evdev": 73, + "Xkb": 81, + "Win": 73, + "Mac": 92, + "Code": "NUMPAD9" + }, + "NUMPAD_ADD": { + "Usb": 87, + "Evdev": 78, + "Xkb": 86, + "Win": 78, + "Mac": 69, + "Code": "NUMPAD_ADD" + }, + "NUMPAD_BACKSPACE": { + "Usb": 187, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_BACKSPACE" + }, + "NUMPAD_CLEAR": { + "Usb": 216, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_CLEAR" + }, + "NUMPAD_CLEAR_ENTRY": { + "Usb": 217, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_CLEAR_ENTRY" + }, + "NUMPAD_COMMA": { + "Usb": 133, + "Evdev": 121, + "Xkb": 129, + "Win": 126, + "Mac": 95, + "Code": "NUMPAD_COMMA" + }, + "NUMPAD_DECIMAL": { + "Usb": 99, + "Evdev": 83, + "Xkb": 91, + "Win": 83, + "Mac": 65, + "Code": "NUMPAD_DECIMAL" + }, + "NUMPAD_DIVIDE": { + "Usb": 84, + "Evdev": 98, + "Xkb": 106, + "Win": 57397, + "Mac": 75, + "Code": "NUMPAD_DIVIDE" + }, + "NUMPAD_ENTER": { + "Usb": 88, + "Evdev": 96, + "Xkb": 104, + "Win": 57372, + "Mac": 76, + "Code": "NUMPAD_ENTER" + }, + "NUMPAD_EQUAL": { + "Usb": 103, + "Evdev": 117, + "Xkb": 125, + "Win": 89, + "Mac": 81, + "Code": "NUMPAD_EQUAL" + }, + "NUMPAD_MEMORY_ADD": { + "Usb": 211, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_MEMORY_ADD" + }, + "NUMPAD_MEMORY_CLEAR": { + "Usb": 210, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_MEMORY_CLEAR" + }, + "NUMPAD_MEMORY_RECALL": { + "Usb": 209, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_MEMORY_RECALL" + }, + "NUMPAD_MEMORY_STORE": { + "Usb": 208, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_MEMORY_STORE" + }, + "NUMPAD_MEMORY_SUBTRACT": { + "Usb": 212, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_MEMORY_SUBTRACT" + }, + "NUMPAD_MULTIPLY": { + "Usb": 85, + "Evdev": 55, + "Xkb": 63, + "Win": 55, + "Mac": 67, + "Code": "NUMPAD_MULTIPLY" + }, + "NUMPAD_PAREN_LEFT": { + "Usb": 182, + "Evdev": 179, + "Xkb": 187, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_PAREN_LEFT" + }, + "NUMPAD_PAREN_RIGHT": { + "Usb": 183, + "Evdev": 180, + "Xkb": 188, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_PAREN_RIGHT" + }, + "NUMPAD_SIGN_CHANGE": { + "Usb": 215, + "Evdev": 118, + "Xkb": 126, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_SIGN_CHANGE" + }, + "NUMPAD_SUBTRACT": { + "Usb": 86, + "Evdev": 74, + "Xkb": 82, + "Win": 74, + "Mac": 78, + "Code": "NUMPAD_SUBTRACT" + }, + "NUM_LOCK": { + "Usb": 83, + "Evdev": 69, + "Xkb": 77, + "Win": 57413, + "Mac": 71, + "Code": "NUM_LOCK" + }, + "OPEN": { + "Usb": 116, + "Evdev": 134, + "Xkb": 142, + "Win": 0, + "Mac": 65535, + "Code": "OPEN" + }, + "PAGE_DOWN": { + "Usb": 78, + "Evdev": 109, + "Xkb": 117, + "Win": 57425, + "Mac": 121, + "Code": "PAGE_DOWN" + }, + "PAGE_UP": { + "Usb": 75, + "Evdev": 104, + "Xkb": 112, + "Win": 57417, + "Mac": 116, + "Code": "PAGE_UP" + }, + "PASTE": { + "Usb": 125, + "Evdev": 135, + "Xkb": 143, + "Win": 57354, + "Mac": 65535, + "Code": "PASTE" + }, + "PAUSE": { + "Usb": 72, + "Evdev": 119, + "Xkb": 127, + "Win": 69, + "Mac": 65535, + "Code": "PAUSE" + }, + "PERIOD": { + "Usb": 55, + "Evdev": 52, + "Xkb": 60, + "Win": 52, + "Mac": 47, + "Code": "PERIOD" + }, + "POWER": { + "Usb": 102, + "Evdev": 116, + "Xkb": 124, + "Win": 57438, + "Mac": 65535, + "Code": "POWER" + }, + "PRINT_SCREEN": { + "Usb": 70, + "Evdev": 99, + "Xkb": 107, + "Win": 57399, + "Mac": 65535, + "Code": "PRINT_SCREEN" + }, + "PROPS": { + "Usb": 163, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "PROPS" + }, + "QUOTE": { + "Usb": 52, + "Evdev": 40, + "Xkb": 48, + "Win": 40, + "Mac": 39, + "Code": "QUOTE" + }, + "SCROLL_LOCK": { + "Usb": 71, + "Evdev": 70, + "Xkb": 78, + "Win": 70, + "Mac": 65535, + "Code": "SCROLL_LOCK" + }, + "SELECT": { + "Usb": 119, + "Evdev": 132, + "Xkb": 140, + "Win": 0, + "Mac": 65535, + "Code": "SELECT" + }, + "SEMICOLON": { + "Usb": 51, + "Evdev": 39, + "Xkb": 47, + "Win": 39, + "Mac": 41, + "Code": "SEMICOLON" + }, + "SHIFT_LEFT": { + "Usb": 225, + "Evdev": 42, + "Xkb": 50, + "Win": 42, + "Mac": 56, + "Code": "SHIFT_LEFT" + }, + "SHIFT_RIGHT": { + "Usb": 229, + "Evdev": 54, + "Xkb": 62, + "Win": 54, + "Mac": 60, + "Code": "SHIFT_RIGHT" + }, + "SLASH": { + "Usb": 56, + "Evdev": 53, + "Xkb": 61, + "Win": 53, + "Mac": 44, + "Code": "SLASH" + }, + "SPACE": { + "Usb": 44, + "Evdev": 57, + "Xkb": 65, + "Win": 57, + "Mac": 49, + "Code": "SPACE" + }, + "TAB": { + "Usb": 43, + "Evdev": 15, + "Xkb": 23, + "Win": 15, + "Mac": 48, + "Code": "TAB" + }, + "UNDO": { + "Usb": 122, + "Evdev": 131, + "Xkb": 139, + "Win": 57352, + "Mac": 65535, + "Code": "UNDO" + }, + "USB_ERROR_ROLL_OVER": { + "Usb": 1, + "Evdev": 0, + "Xkb": 0, + "Win": 255, + "Mac": 65535, + "Code": "USB_ERROR_ROLL_OVER" + }, + "USB_ERROR_UNDEFINED": { + "Usb": 3, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "USB_ERROR_UNDEFINED" + }, + "USB_POST_FAIL": { + "Usb": 2, + "Evdev": 0, + "Xkb": 0, + "Win": 252, + "Mac": 65535, + "Code": "USB_POST_FAIL" + }, + "USB_RESERVED": { + "Usb": 0, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "USB_RESERVED" + }, + "US_A": { + "Usb": 4, + "Evdev": 30, + "Xkb": 38, + "Win": 30, + "Mac": 0, + "Code": "US_A" + }, + "US_B": { + "Usb": 5, + "Evdev": 48, + "Xkb": 56, + "Win": 48, + "Mac": 11, + "Code": "US_B" + }, + "US_C": { + "Usb": 6, + "Evdev": 46, + "Xkb": 54, + "Win": 46, + "Mac": 8, + "Code": "US_C" + }, + "US_D": { + "Usb": 7, + "Evdev": 32, + "Xkb": 40, + "Win": 32, + "Mac": 2, + "Code": "US_D" + }, + "US_E": { + "Usb": 8, + "Evdev": 18, + "Xkb": 26, + "Win": 18, + "Mac": 14, + "Code": "US_E" + }, + "US_F": { + "Usb": 9, + "Evdev": 33, + "Xkb": 41, + "Win": 33, + "Mac": 3, + "Code": "US_F" + }, + "US_G": { + "Usb": 10, + "Evdev": 34, + "Xkb": 42, + "Win": 34, + "Mac": 5, + "Code": "US_G" + }, + "US_H": { + "Usb": 11, + "Evdev": 35, + "Xkb": 43, + "Win": 35, + "Mac": 4, + "Code": "US_H" + }, + "US_I": { + "Usb": 12, + "Evdev": 23, + "Xkb": 31, + "Win": 23, + "Mac": 34, + "Code": "US_I" + }, + "US_J": { + "Usb": 13, + "Evdev": 36, + "Xkb": 44, + "Win": 36, + "Mac": 38, + "Code": "US_J" + }, + "US_K": { + "Usb": 14, + "Evdev": 37, + "Xkb": 45, + "Win": 37, + "Mac": 40, + "Code": "US_K" + }, + "US_L": { + "Usb": 15, + "Evdev": 38, + "Xkb": 46, + "Win": 38, + "Mac": 37, + "Code": "US_L" + }, + "US_M": { + "Usb": 16, + "Evdev": 50, + "Xkb": 58, + "Win": 50, + "Mac": 46, + "Code": "US_M" + }, + "US_N": { + "Usb": 17, + "Evdev": 49, + "Xkb": 57, + "Win": 49, + "Mac": 45, + "Code": "US_N" + }, + "US_O": { + "Usb": 18, + "Evdev": 24, + "Xkb": 32, + "Win": 24, + "Mac": 31, + "Code": "US_O" + }, + "US_P": { + "Usb": 19, + "Evdev": 25, + "Xkb": 33, + "Win": 25, + "Mac": 35, + "Code": "US_P" + }, + "US_Q": { + "Usb": 20, + "Evdev": 16, + "Xkb": 24, + "Win": 16, + "Mac": 12, + "Code": "US_Q" + }, + "US_R": { + "Usb": 21, + "Evdev": 19, + "Xkb": 27, + "Win": 19, + "Mac": 15, + "Code": "US_R" + }, + "US_S": { + "Usb": 22, + "Evdev": 31, + "Xkb": 39, + "Win": 31, + "Mac": 1, + "Code": "US_S" + }, + "US_T": { + "Usb": 23, + "Evdev": 20, + "Xkb": 28, + "Win": 20, + "Mac": 17, + "Code": "US_T" + }, + "US_U": { + "Usb": 24, + "Evdev": 22, + "Xkb": 30, + "Win": 22, + "Mac": 32, + "Code": "US_U" + }, + "US_V": { + "Usb": 25, + "Evdev": 47, + "Xkb": 55, + "Win": 47, + "Mac": 9, + "Code": "US_V" + }, + "US_W": { + "Usb": 26, + "Evdev": 17, + "Xkb": 25, + "Win": 17, + "Mac": 13, + "Code": "US_W" + }, + "US_X": { + "Usb": 27, + "Evdev": 45, + "Xkb": 53, + "Win": 45, + "Mac": 7, + "Code": "US_X" + }, + "US_Y": { + "Usb": 28, + "Evdev": 21, + "Xkb": 29, + "Win": 21, + "Mac": 16, + "Code": "US_Y" + }, + "US_Z": { + "Usb": 29, + "Evdev": 44, + "Xkb": 52, + "Win": 44, + "Mac": 6, + "Code": "US_Z" + }, + "VOLUME_DOWN": { + "Usb": 129, + "Evdev": 114, + "Xkb": 122, + "Win": 57390, + "Mac": 73, + "Code": "VOLUME_DOWN" + }, + "VOLUME_MUTE": { + "Usb": 127, + "Evdev": 113, + "Xkb": 121, + "Win": 57376, + "Mac": 74, + "Code": "VOLUME_MUTE" + }, + "VOLUME_UP": { + "Usb": 128, + "Evdev": 115, + "Xkb": 123, + "Win": 57392, + "Mac": 72, + "Code": "VOLUME_UP" + } + }, + "Arr": [ + { + "Usb": 0, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "USB_RESERVED" + }, + { + "Usb": 1, + "Evdev": 0, + "Xkb": 0, + "Win": 255, + "Mac": 65535, + "Code": "USB_ERROR_ROLL_OVER" + }, + { + "Usb": 2, + "Evdev": 0, + "Xkb": 0, + "Win": 252, + "Mac": 65535, + "Code": "USB_POST_FAIL" + }, + { + "Usb": 3, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "USB_ERROR_UNDEFINED" + }, + { + "Usb": 4, + "Evdev": 30, + "Xkb": 38, + "Win": 30, + "Mac": 0, + "Code": "US_A" + }, + { + "Usb": 5, + "Evdev": 48, + "Xkb": 56, + "Win": 48, + "Mac": 11, + "Code": "US_B" + }, + { + "Usb": 6, + "Evdev": 46, + "Xkb": 54, + "Win": 46, + "Mac": 8, + "Code": "US_C" + }, + { + "Usb": 7, + "Evdev": 32, + "Xkb": 40, + "Win": 32, + "Mac": 2, + "Code": "US_D" + }, + { + "Usb": 8, + "Evdev": 18, + "Xkb": 26, + "Win": 18, + "Mac": 14, + "Code": "US_E" + }, + { + "Usb": 9, + "Evdev": 33, + "Xkb": 41, + "Win": 33, + "Mac": 3, + "Code": "US_F" + }, + { + "Usb": 10, + "Evdev": 34, + "Xkb": 42, + "Win": 34, + "Mac": 5, + "Code": "US_G" + }, + { + "Usb": 11, + "Evdev": 35, + "Xkb": 43, + "Win": 35, + "Mac": 4, + "Code": "US_H" + }, + { + "Usb": 12, + "Evdev": 23, + "Xkb": 31, + "Win": 23, + "Mac": 34, + "Code": "US_I" + }, + { + "Usb": 13, + "Evdev": 36, + "Xkb": 44, + "Win": 36, + "Mac": 38, + "Code": "US_J" + }, + { + "Usb": 14, + "Evdev": 37, + "Xkb": 45, + "Win": 37, + "Mac": 40, + "Code": "US_K" + }, + { + "Usb": 15, + "Evdev": 38, + "Xkb": 46, + "Win": 38, + "Mac": 37, + "Code": "US_L" + }, + { + "Usb": 16, + "Evdev": 50, + "Xkb": 58, + "Win": 50, + "Mac": 46, + "Code": "US_M" + }, + { + "Usb": 17, + "Evdev": 49, + "Xkb": 57, + "Win": 49, + "Mac": 45, + "Code": "US_N" + }, + { + "Usb": 18, + "Evdev": 24, + "Xkb": 32, + "Win": 24, + "Mac": 31, + "Code": "US_O" + }, + { + "Usb": 19, + "Evdev": 25, + "Xkb": 33, + "Win": 25, + "Mac": 35, + "Code": "US_P" + }, + { + "Usb": 20, + "Evdev": 16, + "Xkb": 24, + "Win": 16, + "Mac": 12, + "Code": "US_Q" + }, + { + "Usb": 21, + "Evdev": 19, + "Xkb": 27, + "Win": 19, + "Mac": 15, + "Code": "US_R" + }, + { + "Usb": 22, + "Evdev": 31, + "Xkb": 39, + "Win": 31, + "Mac": 1, + "Code": "US_S" + }, + { + "Usb": 23, + "Evdev": 20, + "Xkb": 28, + "Win": 20, + "Mac": 17, + "Code": "US_T" + }, + { + "Usb": 24, + "Evdev": 22, + "Xkb": 30, + "Win": 22, + "Mac": 32, + "Code": "US_U" + }, + { + "Usb": 25, + "Evdev": 47, + "Xkb": 55, + "Win": 47, + "Mac": 9, + "Code": "US_V" + }, + { + "Usb": 26, + "Evdev": 17, + "Xkb": 25, + "Win": 17, + "Mac": 13, + "Code": "US_W" + }, + { + "Usb": 27, + "Evdev": 45, + "Xkb": 53, + "Win": 45, + "Mac": 7, + "Code": "US_X" + }, + { + "Usb": 28, + "Evdev": 21, + "Xkb": 29, + "Win": 21, + "Mac": 16, + "Code": "US_Y" + }, + { + "Usb": 29, + "Evdev": 44, + "Xkb": 52, + "Win": 44, + "Mac": 6, + "Code": "US_Z" + }, + { + "Usb": 30, + "Evdev": 2, + "Xkb": 10, + "Win": 2, + "Mac": 18, + "Code": "DIGIT1" + }, + { + "Usb": 31, + "Evdev": 3, + "Xkb": 11, + "Win": 3, + "Mac": 19, + "Code": "DIGIT2" + }, + { + "Usb": 32, + "Evdev": 4, + "Xkb": 12, + "Win": 4, + "Mac": 20, + "Code": "DIGIT3" + }, + { + "Usb": 33, + "Evdev": 5, + "Xkb": 13, + "Win": 5, + "Mac": 21, + "Code": "DIGIT4" + }, + { + "Usb": 34, + "Evdev": 6, + "Xkb": 14, + "Win": 6, + "Mac": 23, + "Code": "DIGIT5" + }, + { + "Usb": 35, + "Evdev": 7, + "Xkb": 15, + "Win": 7, + "Mac": 22, + "Code": "DIGIT6" + }, + { + "Usb": 36, + "Evdev": 8, + "Xkb": 16, + "Win": 8, + "Mac": 26, + "Code": "DIGIT7" + }, + { + "Usb": 37, + "Evdev": 9, + "Xkb": 17, + "Win": 9, + "Mac": 28, + "Code": "DIGIT8" + }, + { + "Usb": 38, + "Evdev": 10, + "Xkb": 18, + "Win": 10, + "Mac": 25, + "Code": "DIGIT9" + }, + { + "Usb": 39, + "Evdev": 11, + "Xkb": 19, + "Win": 11, + "Mac": 29, + "Code": "DIGIT0" + }, + { + "Usb": 40, + "Evdev": 28, + "Xkb": 36, + "Win": 28, + "Mac": 36, + "Code": "ENTER" + }, + { + "Usb": 41, + "Evdev": 1, + "Xkb": 9, + "Win": 1, + "Mac": 53, + "Code": "ESCAPE" + }, + { + "Usb": 42, + "Evdev": 14, + "Xkb": 22, + "Win": 14, + "Mac": 51, + "Code": "BACKSPACE" + }, + { + "Usb": 43, + "Evdev": 15, + "Xkb": 23, + "Win": 15, + "Mac": 48, + "Code": "TAB" + }, + { + "Usb": 44, + "Evdev": 57, + "Xkb": 65, + "Win": 57, + "Mac": 49, + "Code": "SPACE" + }, + { + "Usb": 45, + "Evdev": 12, + "Xkb": 20, + "Win": 12, + "Mac": 27, + "Code": "MINUS" + }, + { + "Usb": 46, + "Evdev": 13, + "Xkb": 21, + "Win": 13, + "Mac": 24, + "Code": "EQUAL" + }, + { + "Usb": 47, + "Evdev": 26, + "Xkb": 34, + "Win": 26, + "Mac": 33, + "Code": "BRACKET_LEFT" + }, + { + "Usb": 48, + "Evdev": 27, + "Xkb": 35, + "Win": 27, + "Mac": 30, + "Code": "BRACKET_RIGHT" + }, + { + "Usb": 49, + "Evdev": 43, + "Xkb": 51, + "Win": 43, + "Mac": 42, + "Code": "BACKSLASH" + }, + { + "Usb": 51, + "Evdev": 39, + "Xkb": 47, + "Win": 39, + "Mac": 41, + "Code": "SEMICOLON" + }, + { + "Usb": 52, + "Evdev": 40, + "Xkb": 48, + "Win": 40, + "Mac": 39, + "Code": "QUOTE" + }, + { + "Usb": 53, + "Evdev": 41, + "Xkb": 49, + "Win": 41, + "Mac": 50, + "Code": "BACKQUOTE" + }, + { + "Usb": 54, + "Evdev": 51, + "Xkb": 59, + "Win": 51, + "Mac": 43, + "Code": "COMMA" + }, + { + "Usb": 55, + "Evdev": 52, + "Xkb": 60, + "Win": 52, + "Mac": 47, + "Code": "PERIOD" + }, + { + "Usb": 56, + "Evdev": 53, + "Xkb": 61, + "Win": 53, + "Mac": 44, + "Code": "SLASH" + }, + { + "Usb": 57, + "Evdev": 58, + "Xkb": 66, + "Win": 58, + "Mac": 57, + "Code": "CAPS_LOCK" + }, + { + "Usb": 58, + "Evdev": 59, + "Xkb": 67, + "Win": 59, + "Mac": 122, + "Code": "F1" + }, + { + "Usb": 59, + "Evdev": 60, + "Xkb": 68, + "Win": 60, + "Mac": 120, + "Code": "F2" + }, + { + "Usb": 60, + "Evdev": 61, + "Xkb": 69, + "Win": 61, + "Mac": 99, + "Code": "F3" + }, + { + "Usb": 61, + "Evdev": 62, + "Xkb": 70, + "Win": 62, + "Mac": 118, + "Code": "F4" + }, + { + "Usb": 62, + "Evdev": 63, + "Xkb": 71, + "Win": 63, + "Mac": 96, + "Code": "F5" + }, + { + "Usb": 63, + "Evdev": 64, + "Xkb": 72, + "Win": 64, + "Mac": 97, + "Code": "F6" + }, + { + "Usb": 64, + "Evdev": 65, + "Xkb": 73, + "Win": 65, + "Mac": 98, + "Code": "F7" + }, + { + "Usb": 65, + "Evdev": 66, + "Xkb": 74, + "Win": 66, + "Mac": 100, + "Code": "F8" + }, + { + "Usb": 66, + "Evdev": 67, + "Xkb": 75, + "Win": 67, + "Mac": 101, + "Code": "F9" + }, + { + "Usb": 67, + "Evdev": 68, + "Xkb": 76, + "Win": 68, + "Mac": 109, + "Code": "F10" + }, + { + "Usb": 68, + "Evdev": 87, + "Xkb": 95, + "Win": 87, + "Mac": 103, + "Code": "F11" + }, + { + "Usb": 69, + "Evdev": 88, + "Xkb": 96, + "Win": 88, + "Mac": 111, + "Code": "F12" + }, + { + "Usb": 70, + "Evdev": 99, + "Xkb": 107, + "Win": 57399, + "Mac": 65535, + "Code": "PRINT_SCREEN" + }, + { + "Usb": 71, + "Evdev": 70, + "Xkb": 78, + "Win": 70, + "Mac": 65535, + "Code": "SCROLL_LOCK" + }, + { + "Usb": 72, + "Evdev": 119, + "Xkb": 127, + "Win": 69, + "Mac": 65535, + "Code": "PAUSE" + }, + { + "Usb": 73, + "Evdev": 110, + "Xkb": 118, + "Win": 57426, + "Mac": 114, + "Code": "INSERT" + }, + { + "Usb": 74, + "Evdev": 102, + "Xkb": 110, + "Win": 57415, + "Mac": 115, + "Code": "HOME" + }, + { + "Usb": 75, + "Evdev": 104, + "Xkb": 112, + "Win": 57417, + "Mac": 116, + "Code": "PAGE_UP" + }, + { + "Usb": 76, + "Evdev": 111, + "Xkb": 119, + "Win": 57427, + "Mac": 117, + "Code": "DEL" + }, + { + "Usb": 77, + "Evdev": 107, + "Xkb": 115, + "Win": 57423, + "Mac": 119, + "Code": "END" + }, + { + "Usb": 78, + "Evdev": 109, + "Xkb": 117, + "Win": 57425, + "Mac": 121, + "Code": "PAGE_DOWN" + }, + { + "Usb": 79, + "Evdev": 106, + "Xkb": 114, + "Win": 57421, + "Mac": 124, + "Code": "ARROW_RIGHT" + }, + { + "Usb": 80, + "Evdev": 105, + "Xkb": 113, + "Win": 57419, + "Mac": 123, + "Code": "ARROW_LEFT" + }, + { + "Usb": 81, + "Evdev": 108, + "Xkb": 116, + "Win": 57424, + "Mac": 125, + "Code": "ARROW_DOWN" + }, + { + "Usb": 82, + "Evdev": 103, + "Xkb": 111, + "Win": 57416, + "Mac": 126, + "Code": "ARROW_UP" + }, + { + "Usb": 83, + "Evdev": 69, + "Xkb": 77, + "Win": 57413, + "Mac": 71, + "Code": "NUM_LOCK" + }, + { + "Usb": 84, + "Evdev": 98, + "Xkb": 106, + "Win": 57397, + "Mac": 75, + "Code": "NUMPAD_DIVIDE" + }, + { + "Usb": 85, + "Evdev": 55, + "Xkb": 63, + "Win": 55, + "Mac": 67, + "Code": "NUMPAD_MULTIPLY" + }, + { + "Usb": 86, + "Evdev": 74, + "Xkb": 82, + "Win": 74, + "Mac": 78, + "Code": "NUMPAD_SUBTRACT" + }, + { + "Usb": 87, + "Evdev": 78, + "Xkb": 86, + "Win": 78, + "Mac": 69, + "Code": "NUMPAD_ADD" + }, + { + "Usb": 88, + "Evdev": 96, + "Xkb": 104, + "Win": 57372, + "Mac": 76, + "Code": "NUMPAD_ENTER" + }, + { + "Usb": 89, + "Evdev": 79, + "Xkb": 87, + "Win": 79, + "Mac": 83, + "Code": "NUMPAD1" + }, + { + "Usb": 90, + "Evdev": 80, + "Xkb": 88, + "Win": 80, + "Mac": 84, + "Code": "NUMPAD2" + }, + { + "Usb": 91, + "Evdev": 81, + "Xkb": 89, + "Win": 81, + "Mac": 85, + "Code": "NUMPAD3" + }, + { + "Usb": 92, + "Evdev": 75, + "Xkb": 83, + "Win": 75, + "Mac": 86, + "Code": "NUMPAD4" + }, + { + "Usb": 93, + "Evdev": 76, + "Xkb": 84, + "Win": 76, + "Mac": 87, + "Code": "NUMPAD5" + }, + { + "Usb": 94, + "Evdev": 77, + "Xkb": 85, + "Win": 77, + "Mac": 88, + "Code": "NUMPAD6" + }, + { + "Usb": 95, + "Evdev": 71, + "Xkb": 79, + "Win": 71, + "Mac": 89, + "Code": "NUMPAD7" + }, + { + "Usb": 96, + "Evdev": 72, + "Xkb": 80, + "Win": 72, + "Mac": 91, + "Code": "NUMPAD8" + }, + { + "Usb": 97, + "Evdev": 73, + "Xkb": 81, + "Win": 73, + "Mac": 92, + "Code": "NUMPAD9" + }, + { + "Usb": 98, + "Evdev": 82, + "Xkb": 90, + "Win": 82, + "Mac": 82, + "Code": "NUMPAD0" + }, + { + "Usb": 99, + "Evdev": 83, + "Xkb": 91, + "Win": 83, + "Mac": 65, + "Code": "NUMPAD_DECIMAL" + }, + { + "Usb": 100, + "Evdev": 86, + "Xkb": 94, + "Win": 86, + "Mac": 10, + "Code": "INTL_BACKSLASH" + }, + { + "Usb": 101, + "Evdev": 127, + "Xkb": 135, + "Win": 57437, + "Mac": 110, + "Code": "CONTEXT_MENU" + }, + { + "Usb": 102, + "Evdev": 116, + "Xkb": 124, + "Win": 57438, + "Mac": 65535, + "Code": "POWER" + }, + { + "Usb": 103, + "Evdev": 117, + "Xkb": 125, + "Win": 89, + "Mac": 81, + "Code": "NUMPAD_EQUAL" + }, + { + "Usb": 104, + "Evdev": 183, + "Xkb": 191, + "Win": 100, + "Mac": 105, + "Code": "F13" + }, + { + "Usb": 105, + "Evdev": 184, + "Xkb": 192, + "Win": 101, + "Mac": 107, + "Code": "F14" + }, + { + "Usb": 106, + "Evdev": 185, + "Xkb": 193, + "Win": 102, + "Mac": 113, + "Code": "F15" + }, + { + "Usb": 107, + "Evdev": 186, + "Xkb": 194, + "Win": 103, + "Mac": 106, + "Code": "F16" + }, + { + "Usb": 108, + "Evdev": 187, + "Xkb": 195, + "Win": 104, + "Mac": 64, + "Code": "F17" + }, + { + "Usb": 109, + "Evdev": 188, + "Xkb": 196, + "Win": 105, + "Mac": 79, + "Code": "F18" + }, + { + "Usb": 110, + "Evdev": 189, + "Xkb": 197, + "Win": 106, + "Mac": 80, + "Code": "F19" + }, + { + "Usb": 111, + "Evdev": 190, + "Xkb": 198, + "Win": 107, + "Mac": 90, + "Code": "F20" + }, + { + "Usb": 112, + "Evdev": 191, + "Xkb": 199, + "Win": 108, + "Mac": 65535, + "Code": "F21" + }, + { + "Usb": 113, + "Evdev": 192, + "Xkb": 200, + "Win": 109, + "Mac": 65535, + "Code": "F22" + }, + { + "Usb": 114, + "Evdev": 193, + "Xkb": 201, + "Win": 110, + "Mac": 65535, + "Code": "F23" + }, + { + "Usb": 115, + "Evdev": 194, + "Xkb": 202, + "Win": 118, + "Mac": 65535, + "Code": "F24" + }, + { + "Usb": 116, + "Evdev": 134, + "Xkb": 142, + "Win": 0, + "Mac": 65535, + "Code": "OPEN" + }, + { + "Usb": 117, + "Evdev": 138, + "Xkb": 146, + "Win": 57403, + "Mac": 65535, + "Code": "HELP" + }, + { + "Usb": 119, + "Evdev": 132, + "Xkb": 140, + "Win": 0, + "Mac": 65535, + "Code": "SELECT" + }, + { + "Usb": 121, + "Evdev": 129, + "Xkb": 137, + "Win": 0, + "Mac": 65535, + "Code": "AGAIN" + }, + { + "Usb": 122, + "Evdev": 131, + "Xkb": 139, + "Win": 57352, + "Mac": 65535, + "Code": "UNDO" + }, + { + "Usb": 123, + "Evdev": 137, + "Xkb": 145, + "Win": 57367, + "Mac": 65535, + "Code": "CUT" + }, + { + "Usb": 124, + "Evdev": 133, + "Xkb": 141, + "Win": 57368, + "Mac": 65535, + "Code": "COPY" + }, + { + "Usb": 125, + "Evdev": 135, + "Xkb": 143, + "Win": 57354, + "Mac": 65535, + "Code": "PASTE" + }, + { + "Usb": 126, + "Evdev": 136, + "Xkb": 144, + "Win": 0, + "Mac": 65535, + "Code": "FIND" + }, + { + "Usb": 127, + "Evdev": 113, + "Xkb": 121, + "Win": 57376, + "Mac": 74, + "Code": "VOLUME_MUTE" + }, + { + "Usb": 128, + "Evdev": 115, + "Xkb": 123, + "Win": 57392, + "Mac": 72, + "Code": "VOLUME_UP" + }, + { + "Usb": 129, + "Evdev": 114, + "Xkb": 122, + "Win": 57390, + "Mac": 73, + "Code": "VOLUME_DOWN" + }, + { + "Usb": 133, + "Evdev": 121, + "Xkb": 129, + "Win": 126, + "Mac": 95, + "Code": "NUMPAD_COMMA" + }, + { + "Usb": 135, + "Evdev": 89, + "Xkb": 97, + "Win": 115, + "Mac": 94, + "Code": "INTL_RO" + }, + { + "Usb": 136, + "Evdev": 93, + "Xkb": 101, + "Win": 112, + "Mac": 65535, + "Code": "KANA_MODE" + }, + { + "Usb": 137, + "Evdev": 124, + "Xkb": 132, + "Win": 125, + "Mac": 93, + "Code": "INTL_YEN" + }, + { + "Usb": 138, + "Evdev": 92, + "Xkb": 100, + "Win": 121, + "Mac": 65535, + "Code": "CONVERT" + }, + { + "Usb": 139, + "Evdev": 94, + "Xkb": 102, + "Win": 123, + "Mac": 65535, + "Code": "NON_CONVERT" + }, + { + "Usb": 144, + "Evdev": 122, + "Xkb": 130, + "Win": 114, + "Mac": 104, + "Code": "LANG1" + }, + { + "Usb": 145, + "Evdev": 123, + "Xkb": 131, + "Win": 113, + "Mac": 102, + "Code": "LANG2" + }, + { + "Usb": 146, + "Evdev": 90, + "Xkb": 98, + "Win": 120, + "Mac": 65535, + "Code": "LANG3" + }, + { + "Usb": 147, + "Evdev": 91, + "Xkb": 99, + "Win": 119, + "Mac": 65535, + "Code": "LANG4" + }, + { + "Usb": 148, + "Evdev": 85, + "Xkb": 93, + "Win": 0, + "Mac": 65535, + "Code": "LANG5" + }, + { + "Usb": 155, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "ABORT" + }, + { + "Usb": 163, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "PROPS" + }, + { + "Usb": 182, + "Evdev": 179, + "Xkb": 187, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_PAREN_LEFT" + }, + { + "Usb": 183, + "Evdev": 180, + "Xkb": 188, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_PAREN_RIGHT" + }, + { + "Usb": 187, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_BACKSPACE" + }, + { + "Usb": 208, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_MEMORY_STORE" + }, + { + "Usb": 209, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_MEMORY_RECALL" + }, + { + "Usb": 210, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_MEMORY_CLEAR" + }, + { + "Usb": 211, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_MEMORY_ADD" + }, + { + "Usb": 212, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_MEMORY_SUBTRACT" + }, + { + "Usb": 215, + "Evdev": 118, + "Xkb": 126, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_SIGN_CHANGE" + }, + { + "Usb": 216, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_CLEAR" + }, + { + "Usb": 217, + "Evdev": 0, + "Xkb": 0, + "Win": 0, + "Mac": 65535, + "Code": "NUMPAD_CLEAR_ENTRY" + }, + { + "Usb": 224, + "Evdev": 29, + "Xkb": 37, + "Win": 29, + "Mac": 59, + "Code": "CONTROL_LEFT" + }, + { + "Usb": 225, + "Evdev": 42, + "Xkb": 50, + "Win": 42, + "Mac": 56, + "Code": "SHIFT_LEFT" + }, + { + "Usb": 226, + "Evdev": 56, + "Xkb": 64, + "Win": 56, + "Mac": 58, + "Code": "ALT_LEFT" + }, + { + "Usb": 227, + "Evdev": 125, + "Xkb": 133, + "Win": 57435, + "Mac": 55, + "Code": "META_LEFT" + }, + { + "Usb": 228, + "Evdev": 97, + "Xkb": 105, + "Win": 57373, + "Mac": 62, + "Code": "CONTROL_RIGHT" + }, + { + "Usb": 229, + "Evdev": 54, + "Xkb": 62, + "Win": 54, + "Mac": 60, + "Code": "SHIFT_RIGHT" + }, + { + "Usb": 230, + "Evdev": 100, + "Xkb": 108, + "Win": 57400, + "Mac": 61, + "Code": "ALT_RIGHT" + }, + { + "Usb": 231, + "Evdev": 126, + "Xkb": 134, + "Win": 57436, + "Mac": 54, + "Code": "META_RIGHT" + } + ] +} \ No newline at end of file diff --git a/hid/generator/gen.go b/hid/generator/gen.go index a20c8d1..e2f6585 100644 --- a/hid/generator/gen.go +++ b/hid/generator/gen.go @@ -58,11 +58,21 @@ func main() { Mac: uint16(M), Code: string(bar[6]), } - KeyMaps.Usb[uint16(U)] = Keys - KeyMaps.Evdev[uint16(E)] = Keys - KeyMaps.Xkb[uint16(X)] = Keys - KeyMaps.Win[uint16(W)] = Keys - KeyMaps.Mac[uint16(M)] = Keys + if _, ok := KeyMaps.Usb[uint16(U)]; !ok { + KeyMaps.Usb[uint16(U)] = Keys + } + if _, ok := KeyMaps.Evdev[uint16(E)]; !ok { + KeyMaps.Evdev[uint16(E)] = Keys + } + if _, ok := KeyMaps.Xkb[uint16(X)]; !ok { + KeyMaps.Xkb[uint16(X)] = Keys + } + if _, ok := KeyMaps.Win[uint16(W)]; !ok { + KeyMaps.Win[uint16(W)] = Keys + } + if _, ok := KeyMaps.Mac[uint16(M)]; !ok { + KeyMaps.Mac[uint16(M)] = Keys + } KeyMaps.Code[string(bar[6])] = Keys Arr = append(Arr, Keys) } From e5af9ef4d6e009ea478ba4b6ef63a4d587d25f1f Mon Sep 17 00:00:00 2001 From: mini Date: Fri, 4 Jun 2021 17:35:34 -0400 Subject: [PATCH 5/5] Save PKM now uses interface{} --- devices/orbweaver/orbweaver.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devices/orbweaver/orbweaver.go b/devices/orbweaver/orbweaver.go index 1ee2d2b..c6c4f7e 100644 --- a/devices/orbweaver/orbweaver.go +++ b/devices/orbweaver/orbweaver.go @@ -139,7 +139,7 @@ func LoadKM(file string) *KeyMap { } //SavePKMKeymap saves an orb after edit -func SavePKMKeymap(mapped *PKM, file io.WriteCloser) { +func SavePKMKeymap(mapped interface{}, file io.WriteCloser) { binary.Write(file, binary.LittleEndian, mapped) file.Close() }