diff --git a/.gitignore b/.gitignore index f3f46872a0..bae2658b00 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ *.lst *.map *.sym +*.swp tags *~ build/ diff --git a/keyboard/ergodox_ez/README.md b/keyboard/ergodox_ez/README.md index de6b8edf90..27568323b9 100644 --- a/keyboard/ergodox_ez/README.md +++ b/keyboard/ergodox_ez/README.md @@ -16,9 +16,9 @@ This requires a little bit of familiarity with coding. 1. Go to https://github.com/jackhumbert/qmk_firmware and read the Readme at the base of this repository, top to bottom. Then come back here :) 2. Clone the repository (download it) 3. Set up a build environment as per https://www.pjrc.com/teensy/gcc.html -4. Copy keymaps/keymap_default.c into keymaps/your_keymap_name.c +4. Copy `keymaps/keymap_default.c` into `keymaps/keymap_your_name.c` (for example, `keymaps/keymap_german.c`) 5. Edit this file, changing keycodes to your liking (see "Finding the keycodes you need" below). Try to edit the comments as well, so the "text graphics" represent your layout correctly. -6. Compile your firmware by running `make clean` followed by `make KEYMAP=your_keymap_name`. This will result in a hex file. +6. Compile your firmware by running `make clean` followed by `make KEYMAP=your_name`. Note that you must omit the `keymap_` prefix for your filename in this command -- for example, `make KEYMAP=german`. This will result in a hex file, which will always be called `ergodox_ez.hex`, regardless of your keymap name. 6. Flash this hex file using the [Teensy loader](https://www.pjrc.com/teensy/loader.html) as described in step 4 in the "Easy Way" above. 7. Submit your work as a pull request to this repository, so others can also use it. :) diff --git a/keyboard/ergodox_ez/ergodox_ez.c b/keyboard/ergodox_ez/ergodox_ez.c index 78e956a042..d0eaf33923 100644 --- a/keyboard/ergodox_ez/ergodox_ez.c +++ b/keyboard/ergodox_ez/ergodox_ez.c @@ -6,12 +6,12 @@ uint8_t mcp23018_status = 0x20; __attribute__ ((weak)) void * matrix_init_user(void) { - + return NULL; }; __attribute__ ((weak)) void * matrix_scan_user(void) { - + return NULL; }; void * matrix_init_kb(void) { @@ -34,16 +34,20 @@ void * matrix_init_kb(void) { ergodox_blink_all_leds(); - if (matrix_init_user) { - (*matrix_init_user)(); - } + if (matrix_init_user) { + (*matrix_init_user)(); + } + + return NULL; }; void * matrix_scan_kb(void) { - if (matrix_scan_user) { - (*matrix_scan_user)(); - } + if (matrix_scan_user) { + (*matrix_scan_user)(); + } + + return NULL; }; @@ -51,8 +55,19 @@ void ergodox_blink_all_leds(void) { ergodox_led_all_off(); ergodox_led_all_set(LED_BRIGHTNESS_HI); - ergodox_led_all_on(); - _delay_ms(333); + ergodox_right_led_1_on(); + _delay_ms(50); + ergodox_right_led_2_on(); + _delay_ms(50); + ergodox_right_led_3_on(); + _delay_ms(50); + ergodox_right_led_1_off(); + _delay_ms(50); + ergodox_right_led_2_off(); + _delay_ms(50); + ergodox_right_led_3_off(); + //ergodox_led_all_on(); + //_delay_ms(333); ergodox_led_all_off(); } diff --git a/keyboard/ergodox_ez/ergodox_ez.h b/keyboard/ergodox_ez/ergodox_ez.h index 3989a2f3ac..aceb7ed9c3 100644 --- a/keyboard/ergodox_ez/ergodox_ez.h +++ b/keyboard/ergodox_ez/ergodox_ez.h @@ -34,7 +34,7 @@ void ergodox_blink_all_leds(void); uint8_t init_mcp23018(void); uint8_t ergodox_left_leds_update(void); -#define LED_BRIGHTNESS_LO 31 +#define LED_BRIGHTNESS_LO 15 #define LED_BRIGHTNESS_HI 255 @@ -42,11 +42,13 @@ inline void ergodox_board_led_on(void) { DDRD |= (1<<6); PORTD |= (1<<6); inline void ergodox_right_led_1_on(void) { DDRB |= (1<<5); PORTB |= (1<<5); } inline void ergodox_right_led_2_on(void) { DDRB |= (1<<6); PORTB |= (1<<6); } inline void ergodox_right_led_3_on(void) { DDRB |= (1<<7); PORTB |= (1<<7); } +inline void ergodox_right_led_on(uint8_t led) { DDRB |= (1<<(led+4)); PORTB |= (1<<(led+4)); } inline void ergodox_board_led_off(void) { DDRD &= ~(1<<6); PORTD &= ~(1<<6); } inline void ergodox_right_led_1_off(void) { DDRB &= ~(1<<5); PORTB &= ~(1<<5); } inline void ergodox_right_led_2_off(void) { DDRB &= ~(1<<6); PORTB &= ~(1<<6); } inline void ergodox_right_led_3_off(void) { DDRB &= ~(1<<7); PORTB &= ~(1<<7); } +inline void ergodox_right_led_off(uint8_t led) { DDRB &= ~(1<<(led+4)); PORTB &= ~(1<<(led+4)); } inline void ergodox_led_all_on(void) { @@ -67,6 +69,11 @@ inline void ergodox_led_all_off(void) inline void ergodox_right_led_1_set(uint8_t n) { OCR1A = n; } inline void ergodox_right_led_2_set(uint8_t n) { OCR1B = n; } inline void ergodox_right_led_3_set(uint8_t n) { OCR1C = n; } +inline void ergodox_right_led_set(uint8_t led, uint8_t n) { + (led == 1) ? (OCR1A = n) : + (led == 2) ? (OCR1B = n) : + (OCR1C = n); +} inline void ergodox_led_all_set(uint8_t n) { diff --git a/keyboard/ergodox_ez/keymaps/keymap_dave.c b/keyboard/ergodox_ez/keymaps/keymap_dave.c new file mode 100644 index 0000000000..a0c74ad805 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/keymap_dave.c @@ -0,0 +1,195 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define PROG 1 // symbols +#define NAVI 2 // navigation keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | | 6 | 7 | 8 | 9 | 0 | - | BkSpce | + * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | Y | | G | Y | U | I | O | P | Enter | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | LCtrl | A | S | D | F | G |------| |------| H | J | K | L | ; | Enter | + * |--------+------+------+------+------+------| H | | B |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |`/Ctrl| \ | | | LAlt | | RAlt | | [ | ] |'/Ctrl| + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | PrtS | Apps | | Paus | CtAl | + * ,------+------+------| |------+------+------. + * | | | L1 | | L1 | | | + * | Spce | ~L2 +------| |------+ ~L1 | Spce | + * | | | LGui | | RGui | | | + * `--------------------' `--------------------' + */ +[BASE] = KEYMAP( // layer 0 : default + // left hand + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, + KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_H, + CTL_T(KC_GRV),KC_NUBS,KC_NO, KC_NO, KC_LALT, + KC_PSCREEN, KC_APP, + TO(PROG, ON_PRESS), + KC_SPC, MO(NAVI), KC_LGUI, + // right hand + KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_BSPC, + KC_G, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENTER, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENTER, + KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, + KC_RALT,KC_NO, KC_LBRC,KC_RBRC, CTL_T(KC_QUOT), + KC_PAUS, MT(0x5, KC_NO), + TO(PROG, ON_PRESS), + KC_RGUI, MO(PROG), KC_SPC + ), + +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | K/ | K* | K- | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | ( | ) | | | | | | | K7 | K8 | K9 | K+ | # | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | { | } | ` |------| |------| | K4 | K5 | K6 | K+ | ' | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | | K1 | K2 | K3 | K= | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | K0 | K0 | K. | K= | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | L2 | | L2 | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[PROG] = KEYMAP( + // left hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, + KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, + KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + TO(NAVI, ON_PRESS), + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + KC_TRNS, KC_TRNS, KC_NO, KC_PSLS, KC_PAST, KC_PMNS, KC_EQUAL, + KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_NUHS, + KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_QUOT, + KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PENT, KC_TRNS, + KC_P0, KC_P0, KC_PDOT, KC_PENT, KC_TRNS, + KC_TRNS, KC_TRNS, + TO(NAVI, ON_PRESS), + KC_TRNS, KC_TRNS, KC_TRNS +), + +/* Keymap 2: Navigation and system keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | Home | Up | End | Ins | PgUp | | | | | | Ins | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | Left | Down | Rght | Del | PgDn |------| |------| | Back | Del | Fwrd | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | Lclk | MsUp | Rclk | | | | | | | Prev | Play | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | MsLt | MsDn | MsRt | | |VolDn | Mute |VolUp | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | Powr | Log | | | | + * ,------|------|------| |------+------+------. + * | | | L0 | | L0 | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[NAVI] = KEYMAP( + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, + KC_TRNS, KC_HOME, KC_UP, KC_END, KC_INS, KC_PGUP, KC_TRNS, + KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_DELT, KC_PGDN, + KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, + KC_PWR, LCTL(LALT(KC_DELT)), + TO(BASE, ON_PRESS), + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_WBAK, KC_DELT, KC_WFWD, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, + KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + TO(BASE, ON_PRESS), + KC_TRNS, KC_TRNS, KC_TRNS +), +}; + +const uint16_t PROGMEM fn_actions[] = { + //[1] = ACTION_LAYER_TAP_TOGGLE(PROG), // FN1 - Momentary Layer 1 (Symbols) + //[2] = ACTION_LAYER_TAP_TOGGLE(NAVI) // FN2 - Momentary Layer 2 (Navigation) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + +// Runs just one time when the keyboard initializes. +void * matrix_init_user(void) { + return NULL; +}; + +// Runs constantly in the background, in a loop. +void * matrix_scan_user(void) { + /* leds is a static array holding the current brightness of each of the + * three keyboard LEDs. It's 4 long simply to avoid the ugliness of +1s and + * -1s in the code below, and because wasting a byte really doesn't matter + * that much (no, it *doesn't*, stop whinging!). Note that because it's + * static it'll maintain state across invocations of this routine. + */ + static uint8_t leds[4]; + uint8_t led; + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + + /* Loop over each LED/layer */ + for (led = 1; led <= 3; ++led) { + /* If the current layer matches the current LED, increment its + * brightness by 1 up to a maximum of 255. If the current layer doesn't + * match, decrement its brightness by 1 down to a minimum of zero. + */ + leds[led] += (layer == led) ? + (leds[led] < 255 ? 1 : 0): + (leds[led] > 0 ? -1 : 0); + /* Set LED state according to the new brightness */ + if (leds[led]) { + ergodox_right_led_on(led); + ergodox_right_led_set(led, leds[led]); + } + else { + ergodox_right_led_off(led); + } + } + + return NULL; +}; diff --git a/keyboard/ergodox_ez/keymaps/keymap_dave.hex b/keyboard/ergodox_ez/keymaps/keymap_dave.hex new file mode 100644 index 0000000000..767a9ca117 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/keymap_dave.hex @@ -0,0 +1,1483 @@ +:100000000C94FE060C9442070C9442070C94420791 +:100010000C9442070C9442070C9442070C9442073C +:100020000C9442070C9442070C94B2120C94841363 +:100030000C9442070C9442070C9442070C9442071C +:100040000C9442070C945C2C0C9442070C944207CD +:100050000C9442070C9463220C9442070C944207C0 +:100060000C9442070C9442070C9442070C944207EC +:100070000C9442070C9442070C9442070C944207DC +:100080000C9442070C9442070C9442070C944207CC +:100090000C9442070C9442070C9442070C944207BC +:1000A0000C9442070C9442070C944207E9130B147A +:1000B000F6140B14F6144D147014F614C514D81459 +:1000C00026182618541854189718D318D41AD41A66 +:1000D000EB18D41AE219E219AE1AD41AD41AC21AB9 +:1000E00029002B00E000E100357100001E00140023 +:1000F00004001D006400E3001F001A0016001B002E +:1001000000000252200008000700060000002C003A +:100110002100150009001900E2001151220017000A +:100120000A0005000000460023001C0000000B0030 +:100130000000650023000A000000050000004800E0 +:1001400024001C000B0011000000007525001800A1 +:100150000D001000E600115126000C000E003600C4 +:1001600000002C00270012000F0037002F00015262 +:100170002D001300330038003000E7002A0028006B +:100180002800E500347100000100010001000100B9 +:100190000100000001001E022002220201000100F5 +:1001A00001001F02210223020100010001002F02B1 +:1001B00026022F000100010001003002270230005A +:1001C000010012510100310235003502000001002A +:1001D0000100010000000100000001000100010019 +:1001E0000000010000000100010001000100010009 +:1001F0000000010000005F005C0059006200125125 +:10020000540060005D005A0062000100550061006A +:100210005E005B0063000100560057005700580065 +:10022000580001002E0032003400010001000000DF +:100230000100010001000100010000003A004A0035 +:100240005000F400F20001003B0052005100F000A9 +:10025000F10001003C004D004F00F500F3000100EB +:100260003D0049004C000100010010513E004B00D0 +:100270004E0001000000A5003F0001000000010049 +:1002800000004C05400001000000010000000100DA +:1002900041000100010001000000010042000100D6 +:1002A000B600AC00AA001051430049004C00AE005B +:1002B000A800010044000100B700AB00A900010044 +:1002C00045000100010001000100010001000100E2 +:1002D00001000100010000000A00253031366200F3 +:1002E0003A200025303258000A722F632030313214 +:1002F000333435363738394142434445460A000ADB +:10030000002530325800626F756E6365213A200017 +:100310006C656674207369646520617474616368D8 +:1003200065640A006C6566742073696465206E6F8D +:100330007420726573706F6E64696E670A00747200 +:1003400079696E6720746F207265736574206D63C0 +:100350007032333031380A000A44454255473A205A +:10036000656E61626C65642E0A005B735D004B65AF +:1003700079626F6172642073746172742E0A005B1B +:10038000575D005B535D005B525D005B445D005B4D +:10039000435D0016034500720067006F0044006F64 +:1003A000007800200045005A000000160345007246 +:1003B0000067006F0044006F007800200045005A7D +:1003C0000000000403090409028D00050100A0FAE1 +:1003D00009040000010301010009211101000122AB +:1003E0003F000705810308000A0904010001030119 +:1003F0000200092111010001224D000705820308B6 +:10040000000A090402000103000000092111010093 +:10041000012236000705830308000A0904030002CD +:1004200003000000092111010001222000070584BA +:100430000320000107050403200001090404000152 +:100440000300000009211101000122390007058580 +:10045000031000011201100100000008EDFE071357 +:1004600001000102000105010906A101050719E0CB +:1004700029E7150025019508750181020508190174 +:1004800029059505750191029501750391010507EF +:100490001900297715002501957875018102C0069C +:1004A00031FF0974A1010975150025FF9520750814 +:1004B00081020976150025FF952075089102C00577 +:1004C000010980A101850216010026B7001A01006A +:1004D0002AB700751095018100C0050C0901A10122 +:1004E0008503160100269C021A01002A9C02751041 +:1004F00095018100C005010902A1010901A10005C2 +:100500000919012905150025019505750181029537 +:1005100001750381010501093009311581257F9598 +:10052000027508810609381581257F9501750881B6 +:1005300006050C0A38021581257F9501750881068C +:10054000C0C005010906A101050719E029E715004A +:10055000250195087501810295017508810105083D +:100560001901290595057501910295017503910100 +:100570000507190029FF150025FF9506750881005C +:10058000C00A002530325820006B6579626F6172B5 +:10059000645F7265706F72743A20000A0025303211 +:1005A00058006B6579626F6172645F7365745F6C2C +:1005B00065643A200064656C5F6B65795F6269749D +:1005C0003A2063616E27742064656C3A20253032CE +:1005D000580A006164645F6B65795F6269743A20F0 +:1005E00063616E2774206164643A20253032580AB2 +:1005F00000646F6E652E0A00626F6F676D616769D8 +:1006000063207363616E3A202E2E2E2000290A008B +:100610002575002F002575005D2800256400200049 +:10062000256400200025640020002564007C00254E +:10063000303258006D6F7573656B6579205B62743D +:100640006E7C782079207620685D287265702F6135 +:10065000636C293A205B006D6B5F776865656C5F42 +:1006600074696D655F746F5F6D6178203D202564EE +:100670000A006D6B5F776865656C5F6D61785F73AD +:1006800070656564203D2025640A006D6B5F7469A8 +:100690006D655F746F5F6D6178203D2025640A0091 +:1006A0006D6B5F6D61785F7370656564203D2025BB +:1006B000640A006D6B5F696E74657276616C203DD3 +:1006C0002025640A006D6B5F64656C6179203D20B4 +:1006D00025640A006D6B5F776865656C5F74696D92 +:1006E000655F746F5F6D6178203D2025640A006D41 +:1006F0006B5F776865656C5F6D61785F737065656A +:1007000064203D2025640A006D6B5F74696D655F30 +:10071000746F5F6D6178203D2025640A006D6B5F0A +:100720006D61785F7370656564203D2025640A0003 +:100730006D6B5F696E74657276616C203D20256417 +:100740000A006D6B5F64656C6179203D2025640A49 +:10075000000A00257500363A20776865656C5F747D +:10076000696D655F746F5F6D61783A20000A0025DE +:100770007500353A20776865656C5F6D61785F73E9 +:10078000706565643A20000A00257500343A2074CB +:10079000696D655F746F5F6D61783A20000A0025AE +:1007A0007500333A206D61785F73706565643A2037 +:1007B000000A00257500323A20696E746572766110 +:1007C0006C286D73293A20000A00257500313A2003 +:1007D00064656C6179282A31306D73293A20000AEA +:1007E000092D2056616C756573202D0A004D3E0061 +:1007F0004D25643E20003F0073657420646566618A +:10080000756C740A00433E20007768657265206449 +:10081000656C74613A20637572736F723D25642C48 +:1008200020776865656C3D25640A536565206874AA +:1008300074703A2F2F656E2E77696B6970656469E5 +:10084000612E6F72672F77696B692F4D6F757365B6 +:100850005F6B6579730A000A092D204D6F7573650A +:100860006B6579202D0A4553432F713A09717569DB +:10087000740A313A0964656C6179282A31306D73E4 +:10088000290A323A09696E74657276616C286D7353 +:10089000290A333A096D61785F73706565640A34BB +:1008A0003A0974696D655F746F5F6D61780A353AF6 +:1008B00009776865656C5F6D61785F737065656405 +:1008C0000A363A09776865656C5F74696D655F74AF +:1008D0006F5F6D61780A0A703A097072696E7420F0 +:1008E00076616C7565730A643A0973657420646592 +:1008F0006661756C74730A75703A092B310A646FFE +:10090000776E3A092D310A706775703A092B3130CC +:100910000A7067646F776E3A092D31300A0A737076 +:10092000656564203D2064656C7461202A206D61DA +:10093000785F7370656564202A2028726570656130 +:1009400074202F2074696D655F746F5F6D61782905 +:100950000A003F004D3E2000433E20004C25640A23 +:10096000000A092D20436F6E736F6C65202D0A45B8 +:1009700053432F713A09717569740A6D3A096D6FA5 +:100980007573656B65790A000A092D204D616769E9 +:1009900063202D0A643A0964656275670A783A092A +:1009A0006465627567206D61747269780A6B3A09D3 +:1009B0006465627567206B6579626F6172640A6D48 +:1009C0003A096465627567206D6F7573650A763ADA +:1009D0000976657273696F6E0A733A09737461748C +:1009E00075730A633A09636F6E736F6C65206D6F80 +:1009F00064650A302D343A096C61796572302D34A2 +:100A0000284631302D4634290A506175733A0962FF +:100A10006F6F746C6F616465720A653A0965657021 +:100A2000726F6D0A6E3A094E4B524F0A7A3A097349 +:100A30006C656570204C454420746573740A000A27 +:100A4000002575002E6E6B726F3A20000A00257526 +:100A5000002E737761705F6261636B736C617368A2 +:100A60005F6261636B73706163653A20000A002501 +:100A700075002E737761705F67726176655F65736D +:100A8000633A20000A002575002E6E6F5F67756956 +:100A90003A20000A002575002E737761705F72613D +:100AA0006C745F726775693A20000A002575002E24 +:100AB000737761705F6C616C745F6C6775693A2005 +:100AC000000A002575002E636170736C6F636B5FA5 +:100AD000746F5F636F6E74726F6C3A20000A00254A +:100AE00075002E737761705F636F6E74726F6C5FE9 +:100AF000636170736C6F636B3A20000A00253032BB +:100B000058006B65796D61705F636F6E6669672E03 +:100B10007261773A20000A002575002E6D6F75739B +:100B2000653A20000A002575002E6B6579626F61B9 +:100B300072643A20000A002575002E6D6174726996 +:100B4000783A20000A002575002E656E61626C659A +:100B50003A20000A00253032580064656275675FEC +:100B6000636F6E6669672E7261773A20000A00250E +:100B7000750064656661756C745F6C617965723A65 +:100B800020003F004E4B524F3A206F66660A004EDF +:100B90004B524F3A206F6E0A0074696D65725F6345 +:100BA0006F756E743A202530346C580A006B657985 +:100BB000626F6172645F6E6B726F3A2025580A0033 +:100BC0006B6579626F6172645F69646C653A202558 +:100BD000580A006B6579626F6172645F70726F743E +:100BE0006F636F6C3A2025580A00686F73745F6BEF +:100BF0006579626F6172645F6C65647328293A205D +:100C000025580A000A092D20537461747573202D2C +:100C10000A004743433A20342E382E3220415652A0 +:100C20002D4C4942433A20312E382E302041565225 +:100C30005F415243483A20617672350A004F505462 +:100C4000494F4E533A204C55464120424F4F544D48 +:100C500041474943204D4F5553454B455920455831 +:100C60005452414B455920434F4E534F4C4520431E +:100C70004F4D4D414E44204E4B524F203531320A9C +:100C8000004255494C443A203135316565303420B5 +:100C90002832303A35393A343720446563203230CF +:100CA0002032303135290A005649443A20307846FE +:100CB000454544284572676F446F7820455A29207E +:100CC0005049443A20307831333037284572676FC5 +:100CD000446F7820455A29205645523A20307830C2 +:100CE0003030310A00444553433A20742E6D2E6B48 +:100CF0002E206B6579626F617264206669726D7710 +:100D000061726520666F72204572676F646F780A42 +:100D1000000A092D2056657273696F6E202D0A0036 +:100D20000A6D6F7573653A206F66660A000A6D6F0B +:100D30007573653A206F6E0A000A6B6579626F61A0 +:100D400072643A206F66660A000A6B6579626F61A9 +:100D500072643A206F6E0A000A6D61747269783AA3 +:100D6000206F66660A000A6D61747269783A206FB6 +:100D70006E0A000A64656275673A206F6E0A000A9F +:100D800064656275673A206F66660A000A0A626FD8 +:100D90006F746C6F616465722E2E2E2000433E20AE +:100DA000006565636F6E6669673A0A00536C656536 +:100DB00070204C454420746573740A0000000000E4 +:100DC00000000000000000010204060A0F17202C9A +:100DD0003A4A5D71879DB3C7DAE9F5FCFFFCF5E996 +:100DE000DAC7B39D87715D4A3A2C20170F0A0604B3 +:100DF00002010000000000000000000011241FBEDE +:100E0000CFEFDAE0DEBFCDBF04B603FE24C0809191 +:100E1000FD019091FE01A091FF01B0910002873089 +:100E2000904BA740B04BB9F41092FD011092FE0117 +:100E30001092FF011092000214BE84B7877F84BF16 +:100E400088E10FB6F89480936000109260000FBEA6 +:100E5000E0E0FFE3099511E0A0E0B1E0E4E5FCE5A6 +:100E600002C005900D92AA33B107D9F711E0AAE3A9 +:100E7000B1E001C01D92AD3FB107E1F70E94EC0F58 +:100E80000C94282E0C940000FF93EF93E0913A010C +:100E9000F0913B01309709F00995EF91FF9108958A +:100EA000FC018591803011F0EFDFFBCF0895FF2723 +:100EB000E0E230E247FF0CC0419597FF09C0EDE248 +:100EC0006095709580959095611D711D811D911D96 +:100ED00027FF02C0219530E350E2AA27660F771F53 +:100EE000881F991FAA1FA41710F0A41B63955A9579 +:100EF000A9F7AA3008F0A95FA05DAF93F39561153B +:100F000071058105910541F7ED3211F4EF93F395E9 +:100F1000F21718F43F93F395FBCF8F91B5DFFA9555 +:100F2000E1F70895E991F9918591803021F08532BA +:100F300019F0AADFF9CF089520E0E89455915532D1 +:100F4000C1F3503311F4689455915A3348F4505317 +:100F500090F3220F022E220F220F200D250FF4CF27 +:100F60000EF4219589919991533619F3533729F14C +:100F7000533559F1BC0188279927E8945C3621F450 +:100F80008991999168945591543639F446EF7EF0E1 +:100F900077FF0DC08FEF9FEF0AC055374AE039F059 +:100FA000583540E121F0523642E009F00895FF93B0 +:100FB000EF937DDFEF91FF91B7CFFF93EF93FC01AC +:100FC00081918030B9F360DFFBCFFF93EF9368DF4F +:100FD000F1CFDF93CF93CDB7DEB72596A3DFCF91C7 +:100FE000DF91089561110BC0FC018281882321F0FB +:100FF00085EE0E94BA1603C085EE0E94821780E03B +:1010000090E0089580E090E00895EF92FF921F93A2 +:10101000CF93DF936091C0017091C1018091C201B3 +:101020009091C3010E94672156985E9821E030E0BC +:10103000682F70E0EB01C45CDE4FE1E0F0E0122FBE +:10104000821307C0AB019881A1E09F3F61F4A0E04B +:101050000AC0A901D901A45CBE4F9C91A1E09111E5 +:1010600001C0A0E0A1959A0FDA01A45CBE4F9C9349 +:101070004C5F5F4F992309F194B17F0102C0EE0CE0 +:10108000FF1C4A95E2F79E2994B995B19E2995B91E +:101090004C9150E0113029F450938900409388001E +:1010A0001AC0123029F450938B0040938A0013C069 +:1010B00050938D0040938C000EC094B1DF0102C0AC +:1010C000AA0FBB1F4A95E2F7AD014095942394B94E +:1010D00095B1942395B92F5F3F4F2430310509F026 +:1010E000AECF80E090E0DF91CF911F91FF90EF9025 +:1010F000089585E098E0892B11F00E94050880E0B2 +:1011000090E0089556985E9825982D9826982E98E8 +:1011100027982F988FEF90E0909389008093880014 +:1011200090938B0080938A0090938D0080938C0025 +:10113000259A2D9A2FEF80E792E021508040904031 +:10114000E1F700C00000269A2E9A2FEF80E792E088 +:10115000215080409040E1F700C00000279A2F9A6C +:101160002FEF80E792E0215080409040E1F700C0EF +:10117000000025982D982FEF80E792E021508040C5 +:101180009040E1F700C0000026982E982FEF80E7EE +:1011900092E0215080409040E1F700C00000279885 +:1011A0002F9856985E9825982D9826982E982798CF +:1011B0002F98089589EA8093800089E080938100C8 +:1011C00024982C983F988AB18F748AB96E98479A60 +:1011D0008BB1806B8BB9769A0E94820882E098E08E +:1011E000892B11F00E94020880E090E0089580E2CF +:1011F000809300018091400181110EC00E94460938 +:1012000081E0809340012FEF83ED90E321508040F7 +:101210009040E1F700C0000080E40E944C098093F8 +:10122000000181112EC00E94760980930001811176 +:1012300028C00E94760980930001811122C08FE3AB +:101240000E9476098093000181111BC00E946E09E3 +:1012500080E40E944C0980930001811112C08CE04F +:101260000E9476098093000181110BC00E947609CB +:1012700080930001811105C08FE30E94760980935D +:1012800000010E946E098091000108951092B9003A +:101290008AE08093B800089594EA9093BC009091FE +:1012A000BC0097FFFCCF9091B900987F983021F057 +:1012B000903111F081E008958093BB0084E8809321 +:1012C000BC008091BC0087FFFCCF8091B900887F73 +:1012D000883111F0803471F780E0089584E98093BB +:1012E000BC008091BC0084FDFCCF08958093BB00BE +:1012F00084E88093BC008091BC0087FFFCCF909174 +:10130000B900987F81E0983209F480E0089584E87C +:101310008093BC008091BC0087FFFCCF8091BB0014 +:10132000089580910001811115C080E40E944C094C +:101330008093000181110CC082E10E9476098093A4 +:101340000001811105C08FEF0E9476098093000192 +:101350000E946E0984B1807F84B985B1807F85B990 +:101360008AB1837F8AB98BB1837F8BB93E984698C7 +:1013700008950E94F708809300010E94910980B3AC +:101380008C7080BB81B3836F81BBE0E5F1E0A2E4A8 +:10139000B1E011921D9281E0EE35F807D1F78AEDA8 +:1013A00098E0892B11F00C94DA0808959F92AF927F +:1013B000BF92CF92DF92EF92FF920F931F93CF9342 +:1013C000DF93809100018823E1F0809141018F5FDC +:1013D00080934101811115C08EE393E00E94500774 +:1013E0000E94F70880930001882329F084E293E0AB +:1013F0000E94500706C080E193E00E9450070E94BF +:10140000820802E411E0C0E0D0E0BB24B39482E0A3 +:10141000A82ECC24C394D12C21E0E22E23E0F22E7E +:10142000C73000F580910001811162C080E40E9404 +:101430004C0980930001811112C082E10E9476095B +:101440008093000181110BC0C6010C2E01C0880FD2 +:101450000A94EAF780950E947609809300010E9421 +:101460006E0946C0CA30A1F028F4C83059F0C9301E +:1014700061F005C0CC3089F070F0CD3089F0209A51 +:10148000289810C0219A29980DC0229A2A980AC03B +:10149000239A2B9807C0529A01C0539A5B9802C0B6 +:1014A0003E9A4698E0EAEA95F1F78FB1799985C0BE +:1014B00092E081708B25892B7C9B02C090E001C05B +:1014C00094E0892B7D9B02C090E001C098E0892BBD +:1014D0007E9B02C090E001C090E1892B9FB1909566 +:1014E000991F9927991F9295990F907E892B10C06B +:1014F00080910001811176C080E40E944C098093A4 +:101500000001882309F45BC0912C0E946E09892D8B +:10151000F8019081981739F1808380910101882327 +:1015200001F18091DB0180FF04C086E093E00E941E +:1015300050078091DB0180FF0CC0809101011F9258 +:101540008F93FF92EF920E94E9070F900F900F90F8 +:101550000F908091DB0180FF04C08FEF92E00E942A +:101560005007A09201010E94910921960F5F1F4F21 +:10157000CE30D10509F054CF809101018823B1F01C +:10158000815080930101882339F08FE99FE0019712 +:10159000F1F700C000000AC0A0E5B1E0E2E4F1E02C +:1015A00081918D9391E0E035F907D1F789E798E0D3 +:1015B000892BD1F00E94790817C090E07ACF83E19F +:1015C0000E9476098093000181119ECF81E40E94E0 +:1015D0004C0980930001811197CF0E948709982EB2 +:1015E000909493CF80E094CF81E0DF91CF911F91D1 +:1015F0000F91FF90EF90DF90CF90BF90AF909F90B2 +:101600000895E82FF0E0E05BFE4F80810895CF92CF +:10161000DF92EF92FF920F931F93CF93DF9388EEA9 +:1016200092E00E94500730E5E32E31E0F32EC0E057 +:10163000D0E043EEC42E42E0D42E0AED12E0DF9358 +:10164000CF93DF92CF920E94E90780EE92E00E9452 +:101650005007F70181917F0190E00E94CC219F9378 +:101660008F931F930F930E94E90788ED92E00E94E9 +:10167000500721968DB79EB708960FB6F8949EBF77 +:101680000FBE8DBFCE30D105D1F6DF91CF911F9126 +:101690000F91FF90EF90DF90CF9008958B3B9105D5 +:1016A00078F4883A910540F5853A9105D0F4843074 +:1016B000910508F0B1C08130910509F4ADC06BC04F +:1016C000803E910508F467C0883E910508F4A4C0E7 +:1016D0009C01205F31092031310508F05CC0906524 +:1016E0000895853A910509F459C0863A910509F49F +:1016F00058C083E890E40895883A910509F454C0ED +:10170000893A910509F453C08A3A910509F452C007 +:101710008B3A910509F451C08C3A910509F450C0F7 +:101720008D3A910509F44FC0803B910509F44EC0F4 +:101730008E3A910509F44DC08F3A910509F44CC0D9 +:10174000813B910509F44BC0823B910509F44AC0E5 +:10175000833B910509F449C0843B910509F448C0D5 +:10176000853B910509F447C0863B910509F446C0C5 +:10177000873B910509F445C0883B910509F444C0B5 +:10178000893B910509F443C08A3B910509F042C0A9 +:101790008AE296E4089580E090E0089581E890E47C +:1017A000089582E890E4089582EE94E4089589EE25 +:1017B00094E408958AEE94E4089585EB94E4089502 +:1017C00086EB94E4089587EB94E408958CEC94E41C +:1017D00008958DEC94E4089583E895E408958AE8EB +:1017E00095E4089582E995E4089584E995E40895DF +:1017F00081E296E4089583E296E4089584E296E413 +:10180000089585E296E4089586E296E4089587E2D5 +:1018100096E4089580E094E40895089596E0799F11 +:10182000F001112494E5899FE00DF11D1124E60FCC +:10183000F11DEE0FFF1FE052FF4F85919491089527 +:10184000880F991F805A9040FC01859194910895CA +:10185000880F991F80529F4FFC01859194910895A4 +:1018600026E0729FF001112444E5849FE00DF11DF4 +:101870001124E60FF11DEE0FFF1FE052FF4F2591DF +:101880003491C9019A9581159F4110F4C9010895B9 +:10189000C90190528115904128F4C9019F700E949E +:1018A000280C0895C90190538115904120F4C90175 +:1018B0009927906C0895211580E5380769F40E94F6 +:1018C000F51A9FEF24E34CE0915020404040E1F7AF +:1018D00000C000000C948822213080E5380751F4C4 +:1018E00088E593E00E9450078091DB01816080933E +:1018F000DB010895C90190558115904108F050C051 +:10190000832F99278F70992781309105D9F4A901E8 +:101910004370552702C0880F991F4A95E2F79C68CB +:10192000A90164E0440F551F6A95E1F744275370FD +:10193000842B952B73E0220F331F7A95E1F72076E5 +:1019400033271DC08230910529F4922F8827816F9B +:10195000906A089583309105A9F4A9014370552731 +:1019600081E090E002C0880F991F4A95E2F79C68D9 +:1019700043E0220F331F4A95E1F7207E3770822B18 +:10198000932B08950497F1F4A9014370552781E042 +:1019900090E002C0880F991F4A95E2F79A68E8CF55 +:1019A000C90190578115904120F4C9019F70906240 +:1019B0000895C90190588115904120F4C9019F7084 +:1019C000906A0895203E3105E0F4203C310558F539 +:1019D0002133310509F470C048F42932310509F486 +:1019E00064C02A32310509F46EC074C02933310550 +:1019F000F1F022383105D9F02533310509F44EC014 +:101A000069C0233E310589F138F4203E3105C1F02B +:101A1000223E3105E1F05EC0263E310569F1273EE8 +:101A20003105A9F157C0C9010E94200C0895809189 +:101A3000EE0180FD02C081FF4DC080EE90E04BC002 +:101A40008091EE0180FFF9CF89E390E044C080915E +:101A5000EE0182FF0EC08091EE0184FF03C080E0A2 +:101A600090E039C083EE90E036C08091EE0182FFB5 +:101A7000F2CF82EE90E02FC08091EE0183FF0BC089 +:101A80008091EE0184FDEBCF87EE90E024C0809141 +:101A9000EE0183FFF5CF86EE90E01DC08091EE0150 +:101AA00085FF07C089E290E016C08091EE0185FFB6 +:101AB000F9CF85E390E00FC08091EE0186FF07C06B +:101AC0008AE290E008C08091EE0186FFF9CF81E3C1 +:101AD00090E001C0C9010E944E0B089508958091C5 +:101AE000710108959FB7F894109260019FBF909183 +:101AF000F401943009F058C09091E9009F70209152 +:101B0000EC0020FF02C020E801C020E0292B94E077 +:101B10009093E9009091EB0090FF43C09091EE000C +:101B200097FF3FC090915E01992321F09091E800CA +:101B300095FF37C010925E0196E03091E80035FDC8 +:101B400015C03091F401343061F53091EB0035FD72 +:101B500028C0915021F481E080935E0122C0EFE91A +:101B6000FFE03197F1F700C00000E7CF8093F1006C +:101B70008091E80085FD0AC08091E80080FFFCCFDD +:101B80008091E8008E778093E80006C08FB7F894C4 +:101B900091E0909360018FBF2F702093E90080E067 +:101BA00008952F702093E9008FEF0895CF93DF936E +:101BB00000D01F92CDB7DEB72091F401243019F583 +:101BC00023E029839B838A832093E9008FEF909100 +:101BD000E800815095FD06C095ED9A95F1F700005B +:101BE0008111F5CF8091E80085FF0DC040E050E005 +:101BF00063E070E0CE0101960E94A5108091E8009C +:101C00008E778093E8000F900F900F90DF91CF9127 +:101C10000895CF93DF9300D01F92CDB7DEB7209108 +:101C2000F401243021F522E029839B838A8383E019 +:101C30008093E9008FEF9091E800815095FD06C0F8 +:101C400095ED9A95F1F700008111F5CF8091E800AC +:101C500085FF0DC040E050E063E070E0CE010196EA +:101C60000E94A5108091E8008E778093E8000F9085 +:101C70000F900F90DF91CF9108952091F4012430BF +:101C8000F1F422E02093E9002FEF3091E800215099 +:101C900035FD06C035ED3A95F1F700002111F5CF7D +:101CA0002091E80025FF0BC040E050E065E070E0C7 +:101CB0000E94A5108091E8008E778093E800089537 +:101CC000CF93DF93EC018091F401843009F047C099 +:101CD00080910C018823E1F080910D018823C1F0EF +:101CE00085E08093E9008FEF9091E800815095FDA9 +:101CF00006C095E19A95F1F700008111F5CF80912A +:101D0000E80085FF2CC040E050E060E170E017C0C3 +:101D100081E08093E9008FEF9091E800815095FD7C +:101D200006C095ED9A95F1F700008111F5CF8091ED +:101D3000E80085FF14C040E050E068E070E0CE01AC +:101D40000E94A5108091E8008E778093E80080E1E2 +:101D5000FE01A1E6B1E001900D928A95E1F7DF91D5 +:101D6000CF9108958FE893E00E9450078091F3018E +:101D7000811109C00E9437120E9494128091E200E2 +:101D800084608093E20008958BE893E00E945007FE +:101D90001092F301089587E893E00C94500783E8CC +:101DA00093E00E9450070C94492C8FE793E00E9427 +:101DB00050070E9423220E944F2C0E9430150C9441 +:101DC0006E0D80915F018F5F80935F0162E30E94DF +:101DD000BD2D911135C010925F0180916001882363 +:101DE00079F18091F401843049F58091E9008F7098 +:101DF0009091EC0090FF02C090E801C090E0982B19 +:101E000084E08093E9008091EB0080FF14C0809112 +:101E1000EE0087FF10C08091E80085FF03C010929C +:101E2000F100F9CF8091E80080FF05C08091E800C3 +:101E30008E778093E8009F709093E9001092600184 +:101E4000089542E061EC81E00E94B11142E061EC52 +:101E500082E00E94B11142E061EC83E00E94B11186 +:101E600042E261EC84E00E94B11142E161EC85E064 +:101E70000C94B1118091F601833009F455C030F40F +:101E8000813071F0823009F48EC008958A3009F4EF +:101E90007AC08B3009F460C0893009F09CC020C042 +:101EA0008091F501813A09F096C08091E800877F22 +:101EB0008093E8008091F9019091FA01892B21F03B +:101EC00060E080E090E003C060E181E691E070E0D6 +:101ED0000E94EE108091E8008B778093E8000895CF +:101EE0008091F501813209F076C08091F9019091DD +:101EF000FA01009719F0049709F06DC08091E8008D +:101F0000877F8093E8008091E80082FD05C0809182 +:101F1000F4018111F8CF5FC08091F10080937101CD +:101F20008091E8008B7753C08091F501813A09F0E8 +:101F300052C08091F9019091FA01892B09F04BC0B0 +:101F40008091E800877F8093E8008091E80080FF1F +:101F5000FCCF80910C0136C08091F5018132D9F51A +:101F60008091F9019091FA01892BA9F58091E800FF +:101F7000877F8093E8000E94E6118091F7018093AB +:101F80000C010C94F51A8091F501813221F58091B4 +:101F9000E800877F8093E8000E94E6118091F801B5 +:101FA0008093720108958091F501813AA1F48091A6 +:101FB000E800877F8093E8008091E80080FFFCCFF5 +:101FC000809172018093F1008091E8008E77809378 +:101FD000E8000C94E611089584B7877F84BF88E1F8 +:101FE0000FB6F89480936000109260000FBE90E0EE +:101FF00080E80FB6F89480936100909361000FBE63 +:102000000E94B9150E9437120E9494128091E2003A +:1020100084608093E20082E79DE00E9462217894D0 +:102020000E940E150E94BB1582E091E00E942B15C4 +:102030000E94372C8EE693E00E9450078091F401B5 +:10204000853089F48AE693E00E9450070E94E621D9 +:102050008091F201882391F30E940E22882371F36C +:102060000E948F10EBCF0E94E915E8CF292F33276C +:1020700023303105A9F06CF42130310509F442C058 +:102080002230310509F043C08DE890E027EC33E0C1 +:1020900042C021323105C9F02232310519F137C071 +:1020A00099278130910541F08230910541F0892BCB +:1020B00071F5E3ECF3E005C0EBEAF3E002C0E3E91D +:1020C000F3E0849190E09F0126C0653000F5E62F93 +:1020D000F0E0EE0FFF1FEB5DFE4F2081318189E0C4 +:1020E00090E019C0653098F4E62FF0E0DF01AA0F08 +:1020F000BB1FA55EBE4F2D913C91EA5EFE4F8081D5 +:1021000090E009C082E190E024E534E004C080E082 +:1021100090E020E030E0FA0131832083089580E1EF +:1021200089BD82E189BD09B400FEFDCF8091D80050 +:102130008F7D8093D8008091E00082608093E000E2 +:102140008091E00081FDFCCF0895CF92DF92EF9265 +:10215000FF920F931F93CF93DF937C018B01EA01D2 +:102160000E940712811131C0209731F08881998136 +:10217000081B190BE80EF91EC12CD12C01151105F5 +:1021800019F18091E80085FD14C08091E8008E77F8 +:102190008093E800209741F0888199818C0D9D1DE6 +:1021A0009983888385E011C00E940712882331F348 +:1021B0000CC0F70181917F018093F100015011095A +:1021C000FFEFCF1ADF0ADACF80E0DF91CF911F91C6 +:1021D0000F91FF90EF90DF90CF9008952091FB0139 +:1021E0003091FC012617370748F06115710539F465 +:1021F0002091E8002E772093E80001C0B901FC018E +:1022000020E061157105B9F18091F401882309F48A +:1022100040C0853009F43FC08091E80083FD3DC097 +:102220008091E80082FF06C08091E80082FF26C00E +:1022300080E008958091E80080FFE3CF2091F300D3 +:102240008091F20090E0922B6115710551F0883079 +:10225000910538F421912093F100615071090196A4 +:10226000F3CF21E0089709F020E08091E8008E7715 +:102270008093E800C6CF2111C7CFD6CF8091F4015B +:10228000882339F0853039F08091E80083FFCCCF86 +:1022900004C082E0089583E0089581E008952091CC +:1022A000FB013091FC012617370748F061157105D5 +:1022B00039F42091E8002E772093E80001C0B9019D +:1022C000FC0120E061157105C1F18091F4018823C2 +:1022D00009F441C0853009F440C08091E80083FDD5 +:1022E0003EC08091E80082FF06C08091E80082FF36 +:1022F00027C080E008958091E80080FFE3CF20911F +:10230000F3008091F20090E0922B6115710559F075 +:102310008830910540F424912093F100319661506A +:1023200071090196F2CF21E0089709F020E0809131 +:10233000E8008E778093E800C5CF2111C6CFD5CFB6 +:102340008091F401882339F0853039F08091E800DC +:1023500083FFCBCF04C082E0089583E0089581E03D +:102360000895982F973058F59093E900981739F011 +:102370007091EC002091ED005091F00003C0242FEB +:10238000762F50E021FF19C03091EB003E7F309353 +:10239000EB003091ED003D7F3093ED003091EB008C +:1023A00031603093EB007093EC002093ED0050937C +:1023B000F0002091EE0027FF07C09F5FD3CF8F7002 +:1023C0008093E90081E0089580E008958091F5010F +:1023D00087FD05C08091E80080FF0EC012C080918B +:1023E000E80082FD05C08091F4018111F8CF0895C5 +:1023F0008091E8008B7708C08091F4018111EACFC9 +:1024000008958091E8008E778093E8000895809188 +:10241000E4009091E50045E62091EC0020FF21C00A +:102420002091E80020FD21C02091F401222389F0B1 +:10243000253089F02091EB0025FD0FC02091E400AC +:102440003091E5002817390739F3415041F0C901AF +:10245000E3CF82E0089583E0089581E0089584E069 +:1024600008952091E80022FFDFCF80E008950E94C8 +:10247000A5120E94AD12E0EEF0E0808181608083C1 +:10248000E8EDF0E080818F77808319BCA7EDB0E0A4 +:102490008C918E7F8C9380818F7E80831092F3014C +:1024A00008950F931F93CF93DF930E94A5120E946C +:1024B000AD12C8EDD0E088818F77888388818068ED +:1024C000888388818F7D888319BC1092F4011092D3 +:1024D000F0011092F2011092F10100EE10E0F8010B +:1024E00080818B7F808388818160888342E060E087 +:1024F00080E00E94B111E1EEF0E080818E7F808368 +:10250000E2EEF0E08081816080838081886080835A +:10251000F80180818E7F8083888180618883DF914C +:10252000CF911F910F910895E8EDF0E080818F7EAB +:102530008083E7EDF0E080818160808384E082BF6A +:1025400081E08093F3010C945112E8EDF0E080817A +:102550008E7F80831092E20008951092DA0010922C +:10256000E10008951F920F920FB60F9211242F933E +:102570003F934F935F936F937F938F939F93AF930B +:10258000BF93EF93FF938091E10082FF0BC0809196 +:10259000E20082FF07C08091E1008B7F8093E10021 +:1025A0000E94E10E8091DA0080FF1FC08091D80068 +:1025B00080FF1BC08091DA008E7F8093DA008091CB +:1025C000D90080FF0DC080E189BD82E189BD09B4D9 +:1025D00000FEFDCF81E08093F4010E94B20E05C0A1 +:1025E00019BC1092F4010E94C40E8091E10080FF9A +:1025F00019C08091E20080FF15C08091E2008E7FBB +:102600008093E2008091E20080618093E2008091FB +:10261000D80080628093D80019BC85E08093F401D3 +:102620000E94CF0E8091E10084FF30C08091E200D3 +:1026300084FF2CC080E189BD82E189BD09B400FE20 +:10264000FDCF8091D8008F7D8093D8008091E100EC +:102650008F7E8093E1008091E2008F7E8093E20084 +:102660008091E20081608093E2008091F0018823F4 +:1026700011F084E007C08091E30087FF02C083E08F +:1026800001C081E08093F4010E94D50E8091E100A9 +:1026900083FF29C08091E20083FF25C08091E10083 +:1026A000877F8093E10082E08093F4011092F00133 +:1026B0008091E1008E7F8093E1008091E2008E7F27 +:1026C0008093E2008091E20080618093E20042E02A +:1026D00060E080E00E94B1118091F00088608093FA +:1026E000F0000E94CB0EFF91EF91BF91AF919F91AF +:1026F0008F917F916F915F914F913F912F910F90AB +:102700000FBE0F901F9018951F920F920FB60F9249 +:1027100011242F933F934F935F936F937F938F93E6 +:102720009F93AF93BF93CF93EF93FF93C091E90033 +:10273000CF708091EC001092E9008091F000877FCB +:102740008093F00078940E94C0131092E900809169 +:10275000F00088608093F000C093E900FF91EF9152 +:10276000CF91BF91AF919F918F917F916F915F9129 +:102770004F913F912F910F900FBE0F901F90189582 +:102780001F93CF93DF93CDB7DEB7AA970FB6F89418 +:10279000DEBF0FBECDBFE5EFF1E08091F100819388 +:1027A00021E0ED3FF207C9F70E943A0F8091E8005F +:1027B00083FF1CC12091F5013091F601832F90E039 +:1027C0008A30910508F012C1FC01EA5AFF4F0C94BF +:1027D000DD2D203881F0223809F008C18091F901FF +:1027E0008F708093E9008091EB0085FB882780F94A +:1027F0001092E90006C08091F1019091F2019111CF +:1028000082609091E800977F9093E8008093F100B8 +:102810001092F100C5C0822F8D7F09F0E7C02223FE +:1028200019F0223061F0E2C08091F701813009F0A7 +:10283000DDC0333009F080E08093F20128C0809140 +:10284000F701811124C02091F9012F7009F4CEC045 +:102850002093E9008091EB0080FF19C08091EB008C +:10286000333011F4806211C080618093EB0081E00D +:1028700090E0022E01C0880F0A94EAF78093EA00E4 +:102880001092EA008091EB0088608093EB00109238 +:10289000E9008091E800877F86C02111A7C01091D0 +:1028A000F7011F778091E3008078812B8093E3000C +:1028B0008091E800877F8093E8000E94E611809174 +:1028C000E80080FFFCCF8091E30080688093E30004 +:1028D000112311F083E001C082E08093F40186C0EF +:1028E0002058223008F082C08091F7019091F801C1 +:1028F0008C3D23E0920779F583E08A838AE289831D +:102900004FB7F894DE01139620E03EE051E2E32F4A +:10291000F0E050935700E49120FF03C0E295EF7080 +:102920003F5FEF708E2F90E0EA3010F0C79601C045 +:10293000C0968D939D932F5F243149F74FBF8091AF +:10294000E800877F8093E8006AE270E0CE0101969C +:102950000E94EE1014C0AE014F5F5F4F6091F9010D +:102960000E943610009709F441C02091E800277FAB +:102970002093E800BC0189819A810E944F118091C7 +:10298000E8008B778093E80031C0203879F580919A +:10299000E800877F8093E8008091F0018093F10048 +:1029A0008091E8008E778093E8000E94E6111EC0B7 +:1029B00021111CC09091F7019230C0F48091E80081 +:1029C000877F8093E8009093F0010E94E611809148 +:1029D000F001811104C08091E30087FF02C084E010 +:1029E00001C081E08093F4010E94210F8091E800F2 +:1029F00083FF0AC08091E800877F8093E800809180 +:102A0000EB0080628093EB00AA960FB6F894DEBFCD +:102A10000FBECDBFDF91CF911F910895CF938091CD +:102A2000F4018823B1F08091E9008F709091EC005F +:102A300090FF02C090E801C090E0C92FC82B10920F +:102A4000E9008091E80083FD0E94C013CF70C0931D +:102A5000E900CF91089590937801809377010895CC +:102A6000E0917701F0917801309721F00190F081A9 +:102A7000E02D099480E00895FF920F931F93CF9368 +:102A8000DF938C01E0917701F0917801309799F113 +:102A90000280F381E02D09958091DB0182FF2BC03C +:102AA00080FF04C089E895E00E945007E80180E1BA +:102AB000F82E03E815E08091DB0180FF0BC08881D0 +:102AC0001F928F931F930F930E94E9070F900F900F +:102AD0000F900F90FA942196F110EDCF8091DB01C9 +:102AE00080FF09C081E895E0DF91CF911F910F91A0 +:102AF000FF900C945007DF91CF911F910F91FF90A1 +:102B00000895E0917701F0917801309721F00480E9 +:102B1000F581E02D09940895209175013091760199 +:102B20008217930771F09093760180937501E0917D +:102B30007701F0917801309721F00680F781E02D40 +:102B400009940895209173013091740182179307BD +:102B500071F09093740180937301E0917701F0918B +:102B60007801309721F00084F185E02D09940895D3 +:102B700008950C94B8150E9425220E94B9090C945E +:102B8000EB22CF93C82F8091DB0182FF1EC080FF14 +:102B900004C082EA95E00E9450078091DB0180FF2B +:102BA0000CC01F92CF932DE935E03F932F930E94E5 +:102BB000E9070F900F900F900F908091DB0180FF3D +:102BC00004C08BE995E00E9450078C2FCF910C94A4 +:102BD0006E0DCF92DF92EF92FF920F931F93CF93E0 +:102BE000DF93CDB7DEB72B970FB6F894DEBF0FBEDD +:102BF000CDBF0E94D6093AE7E32E31E0F32E00E084 +:102C000010E0C02E802F0E94010BF701D1907F01B0 +:102C1000D826B1F40F5F1F4F0E30110591F78FEFDB +:102C200089838A831B820E942E228160782F9D8354 +:102C30008C8349815A816B818D810E948C1641C0A1 +:102C40009091DB0191FF04C08B870E94070B8B855D +:102C500020E030E04D2D50E0922FBA01022E02C04C +:102C6000759567950A94E2F760FF25C02E83CF82A1 +:102C7000EE24E394F12C02C0EE0CFF1C9A95E2F7CF +:102C800090E08E219F2121E0892B09F420E0288704 +:102C90000E942E228160782F9A8789874E815F81DA +:102CA00068858A850E948C16F801E658FE4F80815F +:102CB0008E25808306C02F5F3F4F2630310561F699 +:102CC000A9CF0E945926109179010E94301518173A +:102CD000A1F00E943015809379012B960FB6F894DD +:102CE000DEBF0FBECDBFDF91CF911F910F91FF903F +:102CF000EF90DF90CF900C94C1152B960FB6F894FF +:102D0000DEBF0FBECDBFDF91CF911F910F91FF901E +:102D1000EF90DF90CF900895CF93DF93CDB7DEB7DC +:102D20002B970FB6F894DEBF0FBECDBF4F835887E9 +:102D300069877A878B87DE01119686E0FD01119203 +:102D40008A95E9F785E0FE01379601900D928A9504 +:102D5000E1F749815A816B817C818D819E810E943E +:102D6000C11D2B960FB6F894DEBF0FBECDBFDF910D +:102D7000CF910895CF93C82F882309F4C1C082381A +:102D800059F40E94301581FDBBC089E30E94602088 +:102D90000E943C2189E30CC0833879F40E943015ED +:102DA00080FDAEC083E50E9460200E943C2183E547 +:102DB0000E94B120CF910C943C21843859F40E9498 +:102DC000301582FD9DC087E40E9460200E943C2156 +:102DD00087E4EECF8CEF8C0F813A48F48C2F0E9461 +:102DE000E22A81118DC08C2F0E946020E3CF80E207 +:102DF0008C0F883048F4C77081E001C0880FCA95F5 +:102E0000EAF70E940321D6CF8BE58C0F833078F44C +:102E1000C53A29F0C63A31F482E890E005C081E86D +:102E200090E002C083E890E0CF910C948C1588E587 +:102E30008C0F833108F064C0C83A39F1C93A41F1C6 +:102E4000CA3A49F1CB3A51F1CC3A59F1CD3A61F154 +:102E5000C03B69F1CE3A71F1CF3A79F1C13B81F1D2 +:102E6000C23B89F1C33B91F1C43B99F1C53BA1F150 +:102E7000C63BA9F1C73BB1F1C83BB9F1C93BC1F1B0 +:102E8000CA3BC9F58AE292E038C082EE90E035C0D4 +:102E900089EE90E032C08AEE90E02FC085EB90E0A2 +:102EA0002CC086EB90E029C087EB90E026C08CEC2C +:102EB00090E023C08DEC90E020C083E891E01DC03D +:102EC0008AE891E01AC082E991E017C084E991E0B4 +:102ED00014C081E292E011C083E292E00EC084E26D +:102EE00092E00BC085E292E008C086E292E005C065 +:102EF00087E292E002C080E090E0CF910C94A215AE +:102F0000CF910895882309F44BC0823859F40E9468 +:102F1000301581FF45C089E30E9460200E943C215A +:102F200089E30CC0833871F40E94301580FF38C0EB +:102F300083E50E9460200E943C2183E50E94B1202D +:102F40000C943C21843859F40E94301582FF28C02B +:102F500087E40E9460200E943C2187E4EFCF9CEF31 +:102F6000980F913A58F390E2980F983050F4877088 +:102F700091E001C0990F8A95EAF7892F0E940921F3 +:102F8000DFCF9BE5980F933020F480E090E00C9425 +:102F90008C15885A833120F480E090E00C94A215BF +:102FA0000895882321F00E9403210C943C21089568 +:102FB000882321F00E9409210C943C210895CF928E +:102FC000DF92EF92FF920F931F93CF93DF93CDB7D2 +:102FD000DEB728970FB6F894DEBF0FBECDBF8C01C9 +:102FE00085E0F801DE01119601900D928A95E1F7D6 +:102FF000F80140813181F280258122952F708381F3 +:103000009481892B31F03F3F31F481E04F3F19F437 +:1030100003C081E001C080E080FDC6C249833A83DD +:1030200089819A812F830E941E209E8388870E9417 +:103030001D200E94F01E4E81E42FE295EF70F0E01B +:10304000E05AFF4F2F8168850C94DD2D842F807FFF +:10305000142F1F70882311F01295107FFF2059F054 +:10306000112309F456C2812F68870E9413210E9400 +:103070003C2168854EC2862F0E948217112309F4D5 +:1030800093C2812F0E94192128960FB6F894DEBFB3 +:103090000FBECDBFDF91CF911F910F91FF90EF90A9 +:1030A000DF90CF900C943C21342F307F842F8F7091 +:1030B000303211F08295807F662319F0613019F16A +:1030C0002CC0FF20B1F0222309F494C1213009F073 +:1030D00091C128960FB6F894DEBF0FBECDBFDF9129 +:1030E000CF911F910F91FF90EF90DF90CF900C94B4 +:1030F0002321222319F0213009F456C28E830E9425 +:1031000026218E818AC1FF2021F0263008F04CC292 +:1031100071C1253008F048C280C1FF2021F0222370 +:1031200009F468C1F6C1222309F477C106C2242F2D +:1031300026952695237030E02115310521F02130A8 +:103140003105C9F031C2FF2021F0862F942F9370F2 +:1031500002C080E090E028960FB6F894DEBF0FBE64 +:10316000CDBFDF91CF911F910F91FF90EF90DF9036 +:10317000CF900C948C15FF2021F0862F942F937004 +:1031800002C080E090E028960FB6F894DEBF0FBE34 +:10319000CDBFDF91CF911F910F91FF90EF90DF9006 +:1031A000CF900C94A215862FFF2019F00E94DF24E7 +:1031B00002C00E94472528960FB6F894DEBF0FBEC6 +:1031C000CDBFDF91CF911F910F91FF90EF90DF90D6 +:1031D000CF900C94CC25842F837009F076C0F11029 +:1031E000E3C1262F229526952770220F220F862FC6 +:1031F0008F70C82ED12CE12CF12C022E04C0CC0CE7 +:10320000DD1CEE1CFF1C0A94D2F764FF10C06FE0B7 +:1032100070E080E090E004C0660F771F881F991F60 +:103220002A95D2F7609570958095909503C060E0DF +:1032300070E0CB01242F269526952370422F50E075 +:1032400042305105D1F04330510559F16C297D29A7 +:103250008E299F294130510541F128960FB6F894E7 +:10326000DEBF0FBECDBFDF91CF911F910F91FF90B9 +:10327000EF90DF90CF900C94151F6C297D298E293B +:103280009F2928960FB6F894DEBF0FBECDBFDF9101 +:10329000CF911F910F91FF90EF90DF90CF900C9402 +:1032A0002F1F0E94151FC701B60128960FB6F8946C +:1032B000DEBF0FBECDBFDF91CF911F910F91FF9069 +:1032C000EF90DF90CF900C94FB1EFF2019F0842F1D +:1032D000817001C08695882309F466C1262F229546 +:1032E00026952770220F220F862F8F70C82ED12C83 +:1032F000E12CF12C022E04C0CC0CDD1CEE1CFF1CBA +:103300000A94D2F764FF10C06FE070E080E090E0B4 +:1033100004C0660F771F881F991F2A95D2F7609502 +:1033200070958095909503C060E070E0CB01242FEC +:10333000269526952370422F50E042305105D1F05A +:103340004330510559F16C297D298E299F2941303F +:10335000510541F128960FB6F894DEBF0FBECDBFE0 +:10336000DF91CF911F910F91FF90EF90DF90CF9061 +:103370000C94E91F6C297D298E299F2928960FB668 +:10338000F894DEBF0FBECDBFDF91CF911F910F919B +:10339000FF90EF90DF90CF900C9403200E94E91FE4 +:1033A000C701B60128960FB6F894DEBF0FBECDBF99 +:1033B000DF91CF911F910F91FF90EF90DF90CF9011 +:1033C0000C94CF1F603FC9F118F4603E50F49CC0CC +:1033D000623F09F461C008F44BC0633F09F470C058 +:1033E00093C0162F1F70842F8F71FF2099F00E94B9 +:1033F000681F812F28960FB6F894DEBF0FBECDBF91 +:10340000DF91CF911F910F91FF90EF90DF90CF90C0 +:103410000C94D1170E94891F812F28960FB6F8941B +:10342000DEBF0FBECDBFDF91CF911F910F91FF90F7 +:10343000EF90DF90CF900C94D817FF20A9F02530A3 +:1034400008F0B2C0842F8F7128960FB6F894DEBFB3 +:103450000FBECDBFDF91CF911F910F91FF90EF90E5 +:10346000DF90CF900C94AE1F263008F09DC0EACFBD +:10347000FF20A1F0842F8F7128960FB6F894DEBF3D +:103480000FBECDBFDF91CF911F910F91FF90EF90B5 +:10349000DF90CF900C94681FFF2061F3842F8F7111 +:1034A00028960FB6F894DEBF0FBECDBFDF91CF9147 +:1034B0001F910F91FF90EF90DF90CF900C94891F98 +:1034C000FF2091F0842F8F7128960FB6F894DEBFFD +:1034D0000FBECDBFDF91CF911F910F91FF90EF9065 +:1034E000DF90CF900C94531F28960FB6F894DEBF50 +:1034F0000FBECDBFDF91CF911F910F91FF90EF9045 +:10350000DF90CF900C94491FFF20A1F0222309F4F3 +:10351000B1CF862F28960FB6F894DEBF0FBECDBF71 +:10352000DF91CF911F910F91FF90EF90DF90CF909F +:103530000C94BA16222309F4B1CF862F28960FB621 +:10354000F894DEBF0FBECDBFDF91CF911F910F91D9 +:10355000FF90EF90DF90CF900C9482174F70C801CE +:103560000E94F20728960FB6F894DEBF0FBECDBFBB +:10357000DF91CF911F910F91FF90EF90DF90CF904F +:103580000C946E1E4F70C80128960FB6F894DEBFDB +:103590000FBECDBFDF91CF911F910F91FF90EF90A4 +:1035A000DF90CF900C940D0C28960FB6F894DEBFE8 +:1035B0000FBECDBFDF91CF911F910F91FF90EF9084 +:1035C000DF90CF9008950E9420210E94F5200E9454 +:1035D0003C210E94FA260E94CC2580E090E00E94C7 +:1035E0008C1580E090E00C94A2150E9410210C94A0 +:1035F000E31A0E941E20292F22952F7030E02C30D4 +:1036000031054CF42A3031056CF422503109223056 +:10361000310590F407C02C30310551F02F303105C1 +:1036200039F00AC0803E10F0803F31F481E0089507 +:1036300093FB882780F9089580E00895CF93DF9366 +:1036400000D000D01F92CDB7DEB70F900F900F9033 +:103650000F900F90DF91CF910895CF93DF9300D01B +:1036600000D000D0CDB7DEB726960FB6F894DEBFF7 +:103670000FBECDBFDF91CF9108951F93CF93DF93FE +:10368000C091880116E080918901C81799F0D0E0B7 +:103690001C9FF0011D9FF00D1124E657FE4F408145 +:1036A000518162817381848195810E942D1B2196B5 +:1036B000C770E9CFDF91CF911F9108954091BA0172 +:1036C0005091BB016091BC017091BD018091BE0120 +:1036D0009091BF010C942D1BCF938091BF018295D7 +:1036E0008F7009F05FC08091BC01882309F45AC033 +:1036F00020918801A09189016091BA017091BB016C +:103700008091BD019091BE0131E06F3F09F030E042 +:10371000B32FC6E02A1709F445C0009721F07F3F78 +:1037200021F44B2F03C041E001C040E030E040FDF8 +:1037300035C0C29FF001C39FF00D1124E657FE4F24 +:10374000418174132BC04081641328C04281411110 +:1037500025C0438154814817590710F4415051093D +:10376000481B590B483C5105C8F48091BF018F702C +:1037700080618093BF0186E0829FF001839FF00DFE +:103780001124E157FE4F80818F70806180838AEB26 +:1037900091E00E94DF17CF910C943D1B2F5F3F4FAC +:1037A0002770B8CFCF910895CF92DF92EF92FF921A +:1037B0000F931F93CF93DF93CDB7DEB762970FB60A +:1037C000F894DEBF0FBECDBF8C0185E0F801DE01AD +:1037D0001D9601900D928A95E1F7D8014C911196B2 +:1037E0005C91119712966C9112971396ED90FC9044 +:1037F00014977091BA01E091BB012091BD01309105 +:10380000BE012115310531F0EF3F31F481E07F3FFA +:1038100019F403C081E001C080E0B82FB170CB2E55 +:1038200080FD6CC1D090BC01DD2009F4F5C0F091A1 +:10383000BF01E216F30638F0C701821B930B883CE8 +:10384000910548F09BC0209530952E0D3F1D283CDA +:10385000310508F093C08F2F807F09F052C0E51327 +:1038600014C0741312C0D62E61110FC0FF70F06126 +:10387000F093BF010E945E1B8AEB91E00E94DF176C +:103880008091BF01F80185836CC1EF2831F05F3F63 +:1038900031F481E04F3F19F403C081E001C080E0C2 +:1038A00080FD03C081E0862701C080E0F82FF17021 +:1038B000FF2E80FF1CC0809188012091890136E095 +:1038C000821709F428C190E0389FF001399FF00D6C +:1038D0001124E657FE4F7181571306C070814713BC +:1038E00003C07281671303C001968770E9CFD62E9B +:1038F000662309F436C18091BF0181608093BF01C6 +:1039000053C0E51308C0741306C0611104C0D80188 +:103910001596FC93AEC04D875E878D859E856A8B1C +:103920000E94F91A6A89882329F1D62E662311F19B +:103930002091BF01822F82958F7090E002970CF446 +:1039400060C08091BA019091BB0198878F831986DE +:10395000FB86EA862C87CE01079651C0E51731F128 +:103960004D875E878D859E856A8B0E94F91A6A89CC +:1039700081112EC0C8010E94DF17A4C08F2F807F45 +:1039800069F77E2DF98AE88A89890E941E1B8AEBD5 +:1039900091E00E94DF17EAEBF1E086E0DF011D9283 +:1039A0008A95E9F70E945E1BD12CDBC07413D8CF37 +:1039B0006111D6CFD8011596FC93C8010E94DF177C +:1039C000EAEBF1E086E0DF011D928A95E9F7C9C0D4 +:1039D000D62E662379F22091BF01822F82958F70B7 +:1039E00090E0029774F08091BA019091BB019A83A4 +:1039F00089831B82FD82EC822E83CE0101960E9478 +:103A0000DF1786E0F801AAEBB1E001900D928A95EC +:103A1000E1F70E946C1B6FC0E216F30628F0C701A5 +:103A2000821B930B9C0104C0209530952E0D3F1DE9 +:103A3000283C310508F052C0D62E662309F49ACFEF +:103A4000E5132CC074132AC08091BF0180FD1DC0F6 +:103A5000982F92959F70C9F0D80115968C93159761 +:103A60009F3039F09F5F9295907F8F70892B1596CC +:103A70008C93C8010E94DF1786E0F801AAEBB1E041 +:103A800001900D928A95E1F736C086E0F801AAEB25 +:103A9000B1E001900D928A95E1F763C04D875E8792 +:103AA0008D859E850E94F91A882379F086E0F801B9 +:103AB000AAEBB1E001900D928A95E1F70E946C1B90 +:103AC0000E945E1BDD24D3944CC08091BF018160B5 +:103AD0008093BF01C8010E94DF1743C07E2DF98A81 +:103AE000E88A89890E941E1BEAEBF1E086E0DF018B +:103AF0001D928A95E9F70E945E1B33C0662309F484 +:103B000039CF4D875E878D859E850E94F91A88235F +:103B100009F430CFCBCF4D875E878D859E850E947F +:103B20001E20292F22952F7030E0223031052CF4F1 +:103B30009F7041F0811106C00CC0243031052CF477 +:103B40009F7049F4805E883020F0C8010E94DF1722 +:103B5000CF2CDC2C06C0D80115969C91907F91F754 +:103B6000F8CF8D2D62960FB6F894DEBF0FBECDBF95 +:103B7000DF91CF911F910F91FF90EF90DF90CF9049 +:103B800008951F93CF93DF93CDB7DEB72C970FB671 +:103B9000F894DEBF0FBECDBF4F83588769877A8701 +:103BA0008B879C87CE0107960E94D41B8823C1F087 +:103BB0002F8138858A859B85892B31F03F3F11F015 +:103BC00080E003C02F3FE1F781E0811147C04F81C2 +:103BD000588569857A858B859C850E942D1B3EC002 +:103BE00086E0FE013796DE01119601900D928A95CE +:103BF000E1F7FF81E8854A855B854115510531F084 +:103C0000EF3F31F481E0FF3F19F403C081E001C0D0 +:103C100080E080FD23C02091890130E0C901019638 +:103C2000877099276091880170E086179707F1F1F6 +:103C3000F983EA835D834C8396E0929FD001939F42 +:103C4000B00D1124A657BE4FFE01319601900D9282 +:103C50009A95E1F7809389010E943D1B16E08091BF +:103C6000880190918901891779F1189FC001112469 +:103C700086579E4F0E94D41B882331F1E091880122 +:103C80001E9FF0011124E657FE4F40815181628151 +:103C90007381848195810E942D1B8091880190E021 +:103CA00001968770992780938801D9CF0E94F51AD1 +:103CB0001092890110928801EAEBF1E086E0DF01C1 +:103CC0001D928A95E9F7CACF2C960FB6F894DEBFFD +:103CD0000FBECDBFDF91CF911F910895EF92FF925C +:103CE0000F931F93CF93DF939C01009709F471C04A +:103CF000F12CEE24E394E9012196F90184918437B3 +:103D000040F4843008F056C0813081F0823021F1D7 +:103D100060C0853709F449C0C0F19CE7980F90371F +:103D200008F057C08F770E94821746C089010E5F46 +:103D30001F4FFE01849190E2980F983050F48770E5 +:103D4000FE2D01C0FF0F8A95EAF78F2F0E941321E5 +:103D500015C00E94BA1614C089010E5F1F4FFE01E4 +:103D6000849190E2980F983068F48770FE2D01C01E +:103D7000FF0F8A95EAF78F2F0E9419210E943C219C +:103D8000E8011AC00E948217FBCF2E5F3F4FFE0151 +:103D9000C491CC2341F08FE99FE00197F1F700C077 +:103DA0000000C150F6CFE90107C0FE01F490E9011F +:103DB000229602C00E94BA168F2D882341F0EFE9A7 +:103DC000FFE03197F1F700C000008150F6CF9E016F +:103DD00092CFDF91CF911F910F91FF90EF900895B7 +:103DE00008956093C4017093C5018093C6019093B8 +:103DF000C7010C94E31A0F931F930091C401109113 +:103E0000C5012091C6013091C701062B172B282B25 +:103E1000392B0093C4011093C5012093C601309340 +:103E2000C7011F910F910C94E31A0F931F930091F8 +:103E3000C4011091C5012091C6013091C70106232C +:103E40001723282339230093C4011093C50120931D +:103E5000C6013093C7011F910F910C94E31A0F9381 +:103E60001F930091C4011091C5012091C6013091AA +:103E7000C70106271727282739270093C401109365 +:103E8000C5012093C6013093C7011F910F910C9477 +:103E9000E31A1092C0011092C1011092C201109257 +:103EA000C3010C94E31A41E050E060E070E004C00C +:103EB000440F551F661F771F8A95D2F74093C001A4 +:103EC0005093C1016093C2017093C3010C94E31A33 +:103ED00041E050E060E070E004C0440F551F661FF1 +:103EE000771F8A95D2F78091C0019091C101A0916E +:103EF000C201B091C301842B952BA62BB72B8093C5 +:103F0000C0019093C101A093C201B093C3010C946E +:103F1000E31A41E050E060E070E004C0440F551F38 +:103F2000661F771F8A95D2F74095509560957095DA +:103F30008091C0019091C101A091C201B091C301D3 +:103F400084239523A623B7238093C0019093C101B6 +:103F5000A093C201B093C3010C94E31A41E050E076 +:103F600060E070E004C0440F551F661F771F8A95FC +:103F7000D2F78091C0019091C101A091C201B0918E +:103F8000C30184279527A627B7278093C001909364 +:103F9000C101A093C201B093C3010C94E31A0F9323 +:103FA0001F930091C0011091C1012091C201309175 +:103FB000C301062B172B282B392B0093C00110931C +:103FC000C1012093C2013093C3011F910F910C9442 +:103FD000E31A0F931F930091C0011091C10120912A +:103FE000C2013091C30106231723282339230093EC +:103FF000C0011093C1012093C2013093C3011F91EE +:104000000F910C94E31A0F931F930091C00110912C +:10401000C1012091C2013091C3010627172728272B +:1040200039270093C0011093C1012093C20130933E +:10403000C3011F910F910C94E31A0895CF92DF9260 +:10404000EF92FF920F931F93CF93DF93EC01C090F9 +:10405000C401D090C501E090C601F090C7018091E5 +:10406000C0019091C101A091C201B091C301C82AC1 +:10407000D92AEA2AFB2A0FE110E0B701A601002E97 +:1040800004C076956795579547950A94D2F740FFF7 +:1040900007C0BE01802F0E94300C8130910539F499 +:1040A0000150110950F7BE0180E00E94300CDF91F1 +:1040B000CF911F910F91FF90EF90DF90CF900895D7 +:1040C00090910C01992361F190910D01992341F197 +:1040D000982F9695969596959F3088F4E0910E01CD +:1040E000F0910F01E90FF11D877021E030E001C070 +:1040F000220F8A95EAF78181822B8183089590911E +:10410000DB0190FF2DC01F928F9383ED95E09F936D +:104110008F930E94E9070F900F900F900F900895D2 +:1041200040910E0150910F0120E030E09FEFFA0125 +:10413000E20FF31F6281681799F09F3F19F4611134 +:1041400001C0922F2F5F3F4F2E30310581F79F3FE7 +:1041500039F0FA01E90FF11D97FDFA958283089570 +:10416000089590910C01992369F190910D01992383 +:1041700049F1982F9695969596959F3090F4E091F9 +:104180000E01F0910F01E90FF11D877021E030E081 +:1041900001C0220F8A95EAF7209581812823218387 +:1041A00008959091DB0190FF1FC01F928F9385EBC4 +:1041B00095E09F938F930E94E9070F900F900F90C7 +:1041C0000F90089540910E0150910F0120E030E0D2 +:1041D000FA01E20FF31F9281981301C012822F5F40 +:1041E0003F4F2E303105A1F7089581E090E0E09136 +:1041F0000E01F0910F01E80FF91F10820196803136 +:104200009105A9F708959091DA01982B9093DA011E +:10421000089580959091DA0198239093DA0108959A +:104220001092DA0108959091D901982B9093D901B9 +:10423000089580959091D90198239093D90108957C +:104240001092D90108958093C80108951092C80171 +:10425000089540910E0150910F0120E030E080E080 +:10426000FA01E20FF31F918191118F5F2F5F3F4F92 +:104270002F303105A9F70895E0910E01F0910F015B +:104280008091DA018083E0910E01F0910F0180812D +:104290009091D901892B80839091C801992361F075 +:1042A000E0910E01F0910F018081892B80830E94A3 +:1042B000292181111092C80180910E0190910F0166 +:1042C0000C943C1590933B0180933A010895CF9252 +:1042D000DF92EF92FF920F931F936C01EE24FF2465 +:1042E000C114D104E104F10421F46B017C0180E0EC +:1042F00001C080E133272F2D1E2D0D2D0115110535 +:104300002105310519F0885F68017901970186015F +:10431000A4E03695279517950795AA95D1F701152D +:1043200011052105310519F08C5F680179019701AC +:104330008601F2E03695279517950795FA95D1F7FE +:10434000011511052105310519F08E5F680179010C +:10435000B701A6017695679557954795452B462B4E +:10436000472B09F08F5F1F910F91FF90EF90DF9027 +:10437000CF9008958295982F9C7C969596958373FF +:1043800044E0849F90011124922B892F8A7A86958C +:104390009575990F892B08951F93CF93DF931F92E3 +:1043A000CDB7DEB799830E94BA21182F9981892F42 +:1043B0000E94BA21212F30E0322F2227A901482B59 +:1043C000CA010F90DF91CF911F9108958091F40160 +:1043D000843009F11092DC0120E488E190E00FB60E +:1043E000F894A895809360000FBE2093600083B777 +:1043F000817F846083BF83B7816083BF7894889511 +:1044000083B78E7F83BF88E10FB6F89480936000F6 +:10441000109260000FBE089508950895CF930E94F2 +:104420000C220E94D6090E940D22C0E08C2F0E940F +:10443000010B811105C0CF5FCE30C1F780E001C014 +:1044400081E0CF9108950C94F51A82E084BD93E049 +:1044500095BD9AEF97BD80936E0008952FB7F8949D +:104460008091DD019091DE01A091DF01B091E0012A +:104470002FBF0895CF92DF92EF92FF920F931F9379 +:104480002FB7F8944091DD015091DE016091DF017A +:104490007091E0012FBF6A017B01EE24FF248C01A3 +:1044A00020E030E0C016D106E206F30610F44150D9 +:1044B0005109481B590BCA011F910F91FF90EF90B2 +:1044C000DF90CF9008951F920F920FB60F92112494 +:1044D0008F939F93AF93BF938091DD019091DE0105 +:1044E000A091DF01B091E0010196A11DB11D809363 +:1044F000DD019093DE01A093DF01B093E001BF9155 +:10450000AF919F918F910F900FBE0F901F901895B4 +:104510000E943712F8942FEF87EA91E621508040ED +:104520009040E1F700C0000087E090EBDC01809351 +:10453000FD019093FE01A093FF01B09300022CE0D7 +:1045400088E190E00FB6F894A895809360000FBEC4 +:1045500020936000FFCFEF92FF920F931F93CF93B2 +:10456000DF93E82EF12C8F2D0E94010BC0E0D0E0EC +:10457000082F10E098010C2E02C0359527950A945B +:10458000E2F720FD05C02196C630D10599F709C094 +:104590006C2F7F2D80E00E940E0CE812F4CF81E09A +:1045A00005C0F3948EE0F812DECF80E0DF91CF916A +:1045B0001F910F91FF90EF900895CF93C82F8CE239 +:1045C0000E94AB22882321F08C2FCF910C94AB2238 +:1045D00080E0CF910895CF930E943824811102C0CA +:1045E0000E941E2488EF95E00E945007C5E6C15046 +:1045F00049F00E94D6098FE39CE90197F1F700C0CA +:104600000000F5CF81EF95E00E94500789E20E94FB +:10461000DD22811111C18AE20E94DD2281110E94F6 +:104620001E2485E00E94DD2281110E9488220E94C2 +:1046300043248093DB0187E00E94DD22882399F1E7 +:104640008BE10E94DD22882351F09091DB0191FBE8 +:10465000882780F921E0822780FB91F922C08EE033 +:104660000E94DD22882351F09091DB0192FB882784 +:1046700080F921E0822780FB92F913C080E10E943B +:10468000DD229091DB01882341F093FB882780F99C +:1046900021E0822780FB93F904C0892F809580FB5D +:1046A00090F99093DB018091DB010E9447240E94E6 +:1046B00055248093EE0180EE0E94DD22882341F094 +:1046C0008091EE01982F909590FB80F98093EE01F8 +:1046D00089E30E94DD22882359F09091EE0191FB3D +:1046E000882780F921E0822780FB91F99093EE01E1 +:1046F00082EE0E94DD22882359F09091EE0192FB18 +:10470000882780F921E0822780FB92F99093EE01BF +:1047100086EE0E94DD22882359F09091EE0193FBF2 +:10472000882780F921E0822780FB93F99093EE019E +:1047300083EE0E94DD22882359F09091EE0194FBD4 +:10474000882780F921E0822780FB94F99093EE017D +:1047500085E30E94DD22882359F09091EE0195FBBC +:10476000882780F921E0822780FB95F99093EE015C +:1047700081E30E94DD22882359F09091EE0196FB9F +:10478000882780F921E0822780FB96F99093EE013B +:1047900081E10E94DD22882359F09091EE0197FB80 +:1047A000882780F921E0822780FB97F99093EE011A +:1047B0008091EE010E9459248091EE0187FB8827A9 +:1047C00080F980930D0187E20E94DD22C82F8EE1DF +:1047D0000E94DD228111C2608FE10E94DD228111E1 +:1047E000C46080E20E94DD228111C86081E20E94E3 +:1047F000DD228111C06182E20E94DD228111C0624E +:1048000083E20E94DD228111C06484E20E94DD22E5 +:10481000882311F0C06802C0CC2329F08C2F0E949D +:1048200050246C2F03C00E944C24682F70E080E05D +:1048300090E0CF910C94F11ECF9108956DEE7EEF34 +:1048400080E090E00E94132E60E082E090E00E9401 +:10485000052E60E083E090E00E94052E60E084E099 +:1048600090E00E94052E60E085E090E00C94052E1B +:1048700080E090E00E94FF2D21E08D3E9E4F09F0E8 +:1048800020E0822F089582E090E00C94F72D682FAD +:1048900082E090E00C94052E83E090E00C94F72DDC +:1048A000682F83E090E00C94052E84E090E00C9457 +:1048B000F72D682F84E090E00C94052E8091E301A1 +:1048C00080FF0BC06091130185E0689FB001112447 +:1048D00075956795759567952AC081FF09C06091A8 +:1048E000130185E0689FB0011124759567951FC07D +:1048F00082FF07C06091130185E0689FB001112419 +:1049000016C04091E4014423C9F06091120146179A +:1049100088F72091130185E0289F90011124429F80 +:10492000C001439F900D112470E00E94C92D603892 +:10493000710540F46115710539F002C065E070E061 +:10494000862F08958FE7089581E008958091E3010F +:1049500080FF08C06091110170E0759567957595AD +:10496000679521C081FF06C06091110170E07595C7 +:10497000679519C082FF04C06091110170E010C0FA +:104980008091E4018823C1F0609110018617A0F79F +:1049900090911101989FC001112470E00E94C92DCF +:1049A0006038710528F46115710521F0862F08958E +:1049B0008FE7089581E0089561E070E0F4CF803FD3 +:1049C00021F40E945E24819504C0813F29F40E9455 +:1049D0005E248093E7010895823F21F40E945E24C3 +:1049E000819504C0833F29F40E945E248093E601F0 +:1049F0000895893F19F40E94A62405C08A3F31F426 +:104A00000E94A62481958093E80108958B3F21F4AC +:104A10000E94A624819504C08C3F29F40E94A624FC +:104A20008093E9010895843F21F48091E50181603C +:104A300017C0853F21F48091E501826011C0863F57 +:104A400021F48091E50184600BC0873F21F48091BF +:104A5000E501886005C0883F31F48091E5018061FF +:104A60008093E50108958D3F21F48091E3018160F9 +:104A70000BC08E3F21F48091E301826005C08F3F1F +:104A800029F48091E30184608093E3010895803FDD +:104A900039F48091E70187FF6CC01092E70169C08B +:104AA000813F29F48091E7011816BCF362C0909110 +:104AB000E601823F29F497FF5CC01092E60159C0DD +:104AC000833F19F41916CCF354C0893F41F4809107 +:104AD000E80118160CF04DC01092E8014AC08A3F58 +:104AE00029F48091E80187FF44C0F6CF8B3F39F469 +:104AF0008091E90187FF3DC01092E9013AC08C3FE7 +:104B000029F48091E9011816BCF333C0843F21F4E5 +:104B10008091E5018E7F17C0853F21F48091E501EA +:104B20008D7F11C0863F21F48091E5018B7F0BC002 +:104B3000873F21F48091E501877F05C0883F31F4EC +:104B40008091E5018F7E8093E50113C08D3F21F4B4 +:104B50008091E3018E7F0BC08E3F21F48091E301B1 +:104B60008D7F05C08F3F29F48091E3018B7F809377 +:104B7000E3018091E60181110EC08091E70181116E +:104B80000AC08091E801811106C08091E90181117C +:104B900002C01092E40108958091DB0183FF7EC082 +:104BA00084E396E00E9450078091E5011F928F9365 +:104BB0008FE296E09F938F930E94E9078DE296E043 +:104BC0000E9450072091E601822F992787FD90953A +:104BD0009F932F938AE296E09F938F930E94E90719 +:104BE00088E296E00E9450072091E701822F9927E2 +:104BF00087FD90959F932F9385E296E09F938F93E7 +:104C00000E94E90783E296E00E9450072091E801A4 +:104C1000822F992787FD90959F932F9380E296E0AE +:104C20009F938F930E94E9078EE196E00E945007C0 +:104C30002091E901822F992787FD90959F932F93CB +:104C40008BE196E09F938F930E94E90788E196E0BD +:104C50000E9450078091E4011F928F9385E196E0B6 +:104C60009F938F930E94E90783E196E00E9450078B +:104C70008091E3011F928F9380E196E09F938F9341 +:104C80000E94E9078DE096E00E9450078DB79EB71D +:104C90004C960FB6F8949EBF0FBE8DBF85EE91E087 +:104CA0000E9481150E942E229093E2018093E101DF +:104CB00008951F93CF93DF938091E1019091E201DA +:104CC0000E943A224091E401442321F020911401F2 +:104CD00030E006C0209115015AE0259F9001112473 +:104CE0008217930708F482C08091E6011091E701D2 +:104CF000D091E801C091E901811107C0111105C0EF +:104D0000D11103C0CC2309F471C04F3F19F04F5F9C +:104D10004093E401181624F40E945E248093E60177 +:104D20008091E60187FF05C00E945E2481958093F3 +:104D3000E601111624F40E945E248093E70180911D +:104D4000E70187FF05C00E945E2481958093E701FB +:104D50006091E601662339F11091E701112319F101 +:104D6000772767FD7095872F972F0E94CE2C23E31E +:104D700033E343E35FE30E94322D0E949B2C609358 +:104D8000E601612F772767FD7095872F972F0E9487 +:104D9000CE2C23E333E343E35FE30E94322D0E94F2 +:104DA0009B2C6093E7011D1624F40E94A624809397 +:104DB000E8018091E80187FF05C00E94A624819543 +:104DC0008093E8011C1624F40E94A6248093E90134 +:104DD0008091E90187FF05C00E94A62481958093F8 +:104DE000E901DF91CF911F910C94CC25DF91CF91F8 +:104DF0001F910895E5EEF1E085E0DF011D928A95AF +:104E0000E9F71092E4011092E301089587E598E034 +:104E10000E9450071F9281E08F931F9285E08F932D +:104E200089E098E09F938F930E94E9070F900F907D +:104E30000F900F900F900F9008958330E9F128F4B0 +:104E4000813061F0823009F10895853009F462C043 +:104E500008F449C0863009F474C008952091150102 +:104E6000862F90E0820F911D8F3F910520F4620FF5 +:104E70006093150103C08FEF809315018091150198 +:104E80001F928F9382E497E072C020911401862FC5 +:104E900090E0820F911D8F3F910520F4620F609387 +:104EA000140103C08FEF80931401809114011F92AD +:104EB0008F9380E397E05BC020911301862F90E0F1 +:104EC000820F911D8F3F910520F4620F60931301B3 +:104ED00003C08FEF80931301809113011F928F9372 +:104EE0008DE197E044C020911201862F90E0820F5F +:104EF000911D8F3F910520F4620F6093120103C052 +:104F00008FEF80931201809112011F928F9388E09E +:104F100097E02DC020911101862F90E0820F911D06 +:104F20008F3F910520F4620F6093110103C08FEF52 +:104F300080931101809111011F928F938FEE96E063 +:104F400016C020911001862F90E0820F911D8F3F97 +:104F5000910520F4620F6093100103C08FEF8093DE +:104F60001001809110011F928F9384ED96E09F9322 +:104F70008F930E94E9070F900F900F900F90089564 +:104F8000833081F128F4813059F08230D1F00895D6 +:104F9000853009F449C0B8F1863009F456C0089547 +:104FA00080911501681720F4861B8093150102C0BB +:104FB00010921501809115011F928F9385EC96E058 +:104FC00054C080911401681720F4861B809314014B +:104FD00002C010921401809114011F928F9383EBF1 +:104FE00096E043C080911301681720F4861B8093DC +:104FF000130102C010921301809113011F928F932D +:1050000080EA96E032C080911201681720F4861B76 +:105010008093120102C010921201809112011F921E +:105020008F938BE896E021C080911101681720F4DE +:10503000861B8093110102C0109211018091110111 +:105040001F928F9382E796E010C08091100168173D +:1050500020F4861B8093100102C0109210018091F1 +:1050600010011F928F9387E596E09F938F930E9484 +:10507000E9070F900F900F900F900895CF93C82FCE +:105080001F928F932CE539E03F932F930E94E907FD +:1050900061E070E080E090E004C0660F771F881F39 +:1050A000991FCA95D2F70E94F11E0F900F900F9092 +:1050B0000F90CF910C94F51ACF938D3109F465C000 +:1050C000B0F58E3009F4CBC100F5873009F49BC1EF +:1050D000A8F4863009F06AC28091DB01817F8E7F5F +:1050E0008093DB0181E699E00E9450078DE99DE005 +:1050F0000E94500781E08093EB0180C1883009F461 +:105100004FC08B3009F47CC151C2863109F4EDC126 +:1051100038F4803109F4B6C1813109F42DC246C298 +:10512000893109F4CBC18B3109F486C13FC2853383 +:1051300009F434C248F4873209F430C208F430C2AA +:10514000893209F42BC232C2833438F48A3308F02E +:1051500029C2883309F454C129C2833409F41EC218 +:10516000883409F023C20E94F51A8CE89DE00E9461 +:1051700050079FEF23ED80E3915020408040E1F7FE +:1051800000C000000E94882239C18CEA9DE00E9484 +:1051900050070E94552C0E9430150E946E0D2EC1A2 +:1051A00081EA9DE00E94500782E79BE00E94500741 +:1051B0000E944C241F928F938FE69BE09F938F93C6 +:1051C0000E94E9078DE69BE00E9450070E9443245D +:1051D000C82F8AE59BE00E9450071F92CF9325E5D8 +:1051E0003BE03F932F930E94E90783E59BE00E94F9 +:1051F000500789E49BE00E9450078C2F81701F921A +:105200008F9326E43BE03F932F930E94E90784E4C9 +:105210009BE00E9450078AE39BE00E945007C1FB7D +:10522000882780F91F928F9327E33BE03F932F93CA +:105230000E94E90785E39BE00E94500789E29BE01A +:105240000E945007C2FB882780F91F928F9326E2A5 +:105250003BE03F932F930E94E90784E29BE00E948A +:1052600050078BE19BE00E945007C3FBCC27C0F99D +:105270001F92CF9388E19BE09F938F930E94E90751 +:1052800086E19BE00E9450070E945524C82F82E0CF +:105290009BE00E9450071F92CF932DEF3AE03F937F +:1052A0002F930E94E9078BEF9AE00E94500782EE4D +:1052B0009AE00E9450078C2F81701F928F932FEDE0 +:1052C0003AE03F932F930E94E9078DB79EB78096EF +:1052D0000FB6F8949EBF0FBE8DBF8DED9AE00E9471 +:1052E000500786EC9AE00E945007C1FB882780F99E +:1052F0001F928F9323EC3AE03F932F930E94E9078C +:1053000081EC9AE00E9450078FEA9AE00E945007D1 +:10531000C2FB882780F91F928F932CEA3AE03F93D3 +:105320002F930E94E9078AEA9AE00E94500788E9D1 +:105330009AE00E945007C3FB882780F91F928F9341 +:1053400025E93AE03F932F930E94E90783E99AE029 +:105350000E94500789E89AE00E945007C4FB882702 +:1053600080F91F928F9326E83AE03F932F930E9493 +:10537000E90784E89AE00E94500782E79AE00E94D9 +:105380005007C5FB882780F91F928F932FE63AE0DC +:105390003F932F930E94E9078DE69AE00E94500701 +:1053A00081E59AE00E945007C6FB882780F91F928A +:1053B0008F932EE43AE03F932F930E94E9078CE409 +:1053C0009AE00E94500784E49AE00E945007C7FBCD +:1053D000CC27C0F91F92CF9381E49AE09F938F93DB +:1053E0000E94E9078FE39AE00E9450078DB79EB7AD +:1053F0004C960FB6F8949EBF0FBE8DBFC1E0DBC0C8 +:1054000088E899E058C08091DB01C82FC17080FF07 +:1054100009C08FE79DE00E9450078091DB01817FEA +:105420008E7F44C083E79DE00E9450078091DB019E +:1054300081608093DB01E2CF8091DB0181FBCC278F +:10544000C0F991E0C927C0FB81F98093DB01CC232F +:1054500019F086E69DE025C088E59DE02CC080918E +:10546000DB0182FBCC27C0F991E0C927C0FB82F9A0 +:105470008093DB01CC2319F089E49DE012C089E31D +:105480009DE019C08091DB0183FBCC27C0F991E03E +:10549000C927C0FB83F98093DB01CC2351F08DE257 +:1054A0009DE00E9450078091DB0181608093DB01C9 +:1054B00082C080E29DE00E945007A0CF81E19DE084 +:1054C0000E94500785EE9CE00E94500788EA9CE00D +:1054D0000E94500781E89CE00E9450078DE39CE009 +:1054E0000E94500782E19CE0E6CF84E09CE00E94AD +:1054F00050070E9430151F928F938AEE9BE09F9376 +:105500008F930E94E90780910C011F928F9383ED86 +:105510009BE09F938F930E94E907809172011F92F5 +:105520008F9380EC9BE09F938F930E94E90780917B +:105530000D011F928F938DEA9BE09F938F930E94A2 +:10554000E9078091DD019091DE01A091DF01B0912A +:10555000E001BF93AF939F938F9389E99BE09F9363 +:105560008F930E94E9078DB79EB746960FB6F894C1 +:105570009EBF0FBE8DBF42CF0E94F51AC0910D0194 +:1055800081E0C827C0930D01CC2329F08FE89BE070 +:105590000E94500710C084E89BE08DCF80E003C0DC +:1055A0008D5101C089530E943E2828CF82E89BE09C +:1055B0000E945007C0E08C2FCF91089580E008959D +:1055C00080E00895CF93C82F8091EB01813081F066 +:1055D00020F0823009F44CC042C1A0910E01B0917C +:1055E0000F018C91813169F0823209F03AC109C012 +:1055F000A0910E01B0910F018C91813111F0823296 +:1056000049F48C2F0E94DE2A81112FC08C2F0E941A +:105610005C282CC08C2F0E94E02A811126C0C43146 +:10562000E1F070F4CB3081F0C031D1F40E94062754 +:1056300084E599E00E94500782E08093EB0115C059 +:10564000C93259F0C83361F481E699E00E945007ED +:1056500088E599E00E94500708C01092EB0103C151 +:1056600082E599E00E945007FEC081E08170FDC094 +:10567000C43220F5CE3108F0C0C0CB3099F1C8F467 +:10568000C73009F0D2C08AE08093150194E190936D +:10569000140193E0909313018093120188E08093AA +:1056A000110188E28093100188EF97E00E94500773 +:1056B000BFC0C33149F1C431C1F0B7C0CB3409F424 +:1056C000A9C028F4C93289F0C83361F0AEC0C13531 +:1056D00009F49EC0C23509F499C0CE3409F0A5C0C2 +:1056E0006AE09EC00E940627A3C08091EA01882339 +:1056F00019F01092EA019CC085E098E00E945007E2 +:1057000081E08093EB01B1C08FED97E00E945007DC +:105710008DEC97E00E945007809115011F928F93A6 +:105720008AEC97E09F938F930E94E90788EC97E0BB +:105730000E94500786EB97E00E9450078091140169 +:105740001F928F9383EB97E09F938F930E94E907BB +:1057500081EB97E00E94500782EA97E00E94500791 +:10576000809113011F928F938FE997E09F938F93FE +:105770000E94E9078DE997E00E9450078CE897E0C6 +:105780000E945007809112011F928F9389E897E041 +:105790009F938F930E94E90787E897E00E94500744 +:1057A00082E797E00E945007809111011F928F932A +:1057B0008FE697E09F938F930E94E9078DE697E02D +:1057C0000E94500786E597E00E94500780911001E3 +:1057D0001F928F9383E597E09F938F930E94E90731 +:1057E00081E597E00E9450078DB79EB748960FB6A7 +:1057F000F8949EBF0FBE8DBF1BC0CE51EC2FF0E0C2 +:10580000E15DFE4F80818093EA0112C061E003C038 +:1058100061E006C06AE08091EA010E941D2708C08D +:105820008091EA010E94C02703C086EF97E013C071 +:105830008091EA01882369F01F928F9380EF97E0AF +:105840009F938F930E94E9070F900F900F900F90F6 +:1058500004C08DEE97E00E94500781E006C01092D0 +:10586000EB0180E002C080E001CFCF910895E1E834 +:10587000F0E08081886080838081816080838FB741 +:10588000F89493E09093890090ED909388008FBFF7 +:105890000895EFE6F0E08081826080830895EFE66E +:1058A000F0E080818D7F80830895EFE6F0E08081D5 +:1058B00092E08927808308951F920F920FB60F926E +:1058C00011242F933F934F935F936F937F938F9305 +:1058D0009F93AF93BF93EF93FF938091EC019091CF +:1058E000ED0101969093ED018093EC01811103C0CD +:1058F00082E00E946E0DE091ED01E695E695F0E004 +:10590000E454F24FE4918091EC018E1303C080E0E7 +:105910000E946E0DFF91EF91BF91AF919F918F917A +:105920007F916F915F914F913F912F910F900FBE9B +:105930000F901F90189504D06894B1118DC00895F0 +:1059400070D088F09F5790F0B92F9927B751A0F0E9 +:10595000D1F0660F771F881F991F1AF0BA95C9F703 +:1059600012C0B13081F077D0B1E0089574C0672FD4 +:10597000782F8827B85F39F0B93FCCF386957795B3 +:105980006795B395D9F73EF490958095709561959C +:105990007F4F8F4F9F4F0895E89409C097FB3EF4C7 +:1059A00090958095709561957F4F8F4F9F4F99236C +:1059B000A9F0F92F96E9BB279395F69587957795EA +:1059C0006795B795F111F8CFFAF4BB0F11F460FFAA +:1059D0001BC06F5F7F4F8F4F9F4F16C0882311F002 +:1059E00096E911C0772321F09EE8872F762F05C016 +:1059F000662371F096E8862F70E060E02AF09A95B1 +:105A0000660F771F881FDAF7880F9695879597F9A5 +:105A1000089557FD9058440F551F59F05F3F71F09E +:105A20004795880F97FB991F61F09F3F79F0879505 +:105A30000895121613061406551FF2CF4695F1DF8E +:105A400008C0161617061806991FF1CF869571051E +:105A5000610508940895E894BB2766277727CB0152 +:105A600097F908950BD078C069D028F06ED018F05F +:105A7000952309F05AC05FC01124EECFCADFA0F30E +:105A8000959FD1F3950F50E0551F629FF001729FD3 +:105A9000BB27F00DB11D639FAA27F00DB11DAA1FF2 +:105AA000649F6627B00DA11D661F829F2227B00D3F +:105AB000A11D621F739FB00DA11D621F839FA00DCA +:105AC000611D221F749F3327A00D611D231F849F1A +:105AD000600D211D822F762F6A2F11249F57504071 +:105AE0008AF0E1F088234AF0EE0FFF1FBB1F661F0C +:105AF000771F881F91505040A9F79E3F510570F0C5 +:105B000014C0AACF5F3FECF3983EDCF386957795FF +:105B10006795B795F795E7959F5FC1F7FE2B880FBF +:105B2000911D9695879597F9089597F99F6780E855 +:105B300070E060E008959FEF80EC089500240A94DF +:105B40001616170618060906089500240A94121658 +:105B50001306140605060895092E0394000C11F48B +:105B6000882352F0BB0F40F4BF2B11F460FF04C038 +:105B70006F5F7F4F8F4F9F4F0895991B79E004C04F +:105B8000991F961708F0961B881F7A95C9F780957C +:105B9000089597FB072E16F4009407D077FD09D0DF +:105BA0000E94E32D07FC05D03EF4909581959F4F10 +:105BB0000895709561957F4F0895EE0FFF1F059032 +:105BC000F491E02D0994AA1BBB1B51E107C0AA1F49 +:105BD000BB1FA617B70710F0A61BB70B881F991F8E +:105BE0005A95A9F780959095BC01CD010895F99932 +:105BF000FECF92BD81BDF89A992780B50895A8E19E +:105C0000B0E042E050E00C941A2E262FF999FECF16 +:105C10001FBA92BD81BD20BD0FB6F894FA9AF99AC9 +:105C20000FBE019608950E94052E272F0C94062E74 +:105C3000DC01CB01FC01F999FECF06C0F2BDE1BD4C +:105C4000F89A319600B40D9241505040B8F708953B +:045C5000F894FFCFF6 +:105C540020026F0D600E3D0E090ED60D0101C90123 +:105C640028080A03140A3F4D3620394205F504BFBB +:105C7400049F046604D903F2030B042404440401BE +:0A5C840002030405060708090000EA +:00000001FF diff --git a/keyboard/ergodox_ez/keymaps/keymap_osx_kinesis_pnut.c b/keyboard/ergodox_ez/keymaps/keymap_osx_kinesis_pnut.c new file mode 100644 index 0000000000..f71ca28ceb --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/keymap_osx_kinesis_pnut.c @@ -0,0 +1,191 @@ +// Netable differences vs. the default firmware for the ErgoDox EZ: +// 1. The Cmd key is now on the right side, making Cmd+Space easier. +// 2. The media keys work on OSX (But not on Windows). +// Wanted to map default layer of my EZ to my existing Kinesis Mapping. +// Only default layer was remapped all others layers are standard Ergodox EZ +// Very personal mapping of-course, but who knows a starting point for others. + +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | CapsL | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | TAB | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | ESC | A | S | D | F | G |------| |------| H | J | K | L |; / L2| '" | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |AltShf|Grv/L1| '" | Left | Right| | Up | Down | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | LGui | App | | Ctrl/Esc | RGui | + * ,------|------|------| |------+--------+------. + * | | | Home | | = | | | + * | Backs|Delete|------| |------| Enter |Space | + * | pace | | End | | TAB | | | + * `--------------------' `----------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[BASE] = KEYMAP( // layer 0 : default + // left hand + KC_CAPSLOCK, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), + LALT(KC_LSFT), LT(SYMB,KC_GRV),KC_QUOT,KC_LEFT,KC_RGHT, + KC_LGUI, ALT_T(KC_APP), + KC_HOME, + KC_BSPC,KC_DELT,KC_END, + // right hand + KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_QUOTE, + MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, + CTL_T(KC_ESC), KC_LGUI, + KC_EQL, + KC_TAB, KC_ENT, KC_SPC + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | . | 0 | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, + KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV, + KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, + KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, + KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, + KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, + KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_WBAK +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + +// Runs just one time when the keyboard initializes. +void * matrix_init_user(void) { + +}; + +// Runs constantly in the background, in a loop. +void * matrix_scan_user(void) { + + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboard/ergodox_ez/keymaps/keymap_workman_osx_mdw.c b/keyboard/ergodox_ez/keymaps/keymap_workman_osx_mdw.c new file mode 100644 index 0000000000..14bbe010d5 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/keymap_workman_osx_mdw.c @@ -0,0 +1,366 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +// README +// This keyboard layout is based on the [Workman Dead layout](https://github.com/ojbucao/Workman/tree/master/mac#workman-dead-for-programmers), which uses the comma as a dead key to trigger a second layer. +// Since I have more keys at my disposal on the ErgoDox, I moved the dead key to the bottom right. There are still a lot of +// blanks so still discovering what I like. +// If you aren't familiar with a dead key, the idea is that you tap the dead key which switches the layout. the next key you hit +// triggers the key you pressed AND switches the layout back to the original. For now I do this with a super kludgey macro and I +// look forward to learning about a more elegant way to do the same thing. Until then, this will have to do. + + +// TODO: Define layer names that make sense for the ErgoDox EZ. +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys +#define DEAD 3 // dead version of the symbols layer + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | D | R | W | B | L1 | | L1 | J | F | U | P | ; | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Hyper | A | S | H | T | G |------| |------| Y | N | E | O | I | ' | + * |--------+------+------+------+------+------| | | Meh |------+------+------+------+------+--------| + * | LShift | Z | X | M | C | V | | | | K | L | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | CTRL | OPT | CMD | | Left | Down | Up | Right| L3 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * |Bckspc| Space|------| |------| Space |Enter | + * | | | End | | PgDn | | | + * `--------------------' `----------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[BASE] = KEYMAP( // layer 0 : default + // left hand + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, TG(1), + ALL_T(KC_ESC), KC_A, KC_S, KC_H, KC_T, KC_G, + KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_NO, + KC_NO, KC_NO, KC_LCTL,KC_LALT,KC_LGUI, + KC_NO, KC_NO, + KC_HOME, + KC_BSPC,KC_SPC,KC_END, + // right hand + KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + TG(1), KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSLS, + KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT, + MEH_T(KC_NO),KC_K, KC_L, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + KC_LEFT,KC_DOWN,KC_UP, KC_RGHT, KC_FN4, + KC_NO, KC_NO, + KC_PGUP, + KC_PGDN,KC_SPC,KC_ENT + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | % | & | ? | + | @ | | | | $ | _ | [ | ] | ! | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | / | ( | = | 0 | { |------| |------| } | 1 | * | ) | - | " | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | 6 | 7 | 8 | 9 | | | | | | \ | 2 | 3 | 4 | 5 | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS, KC_PERC, KC_AMPR, LSFT(KC_SLSH), LSFT(KC_EQL), KC_AT, KC_TRNS, + KC_TRNS, KC_SLSH, KC_LPRN, KC_EQL, KC_0, LSFT(KC_LBRC), + KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_PIPE, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_DLR, KC_UNDERSCORE, KC_LBRC, KC_RBRC, KC_EXLM, KC_F12, + KC_RCBR, KC_1, KC_ASTR, KC_RPRN, KC_MINS, KC_QUOT, + KC_TRNS, KC_SLSH, KC_2, KC_3, KC_4, KC_5, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[MDIA] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, + KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_WBAK +), +/* Keymap 4: Dead Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | % | & | ? | + | @ | | | | $ | _ | [ | ] | ! | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | / | ( | = | 0 | { |------| |------| } | 1 | * | ) | - | " | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | 6 | 7 | 8 | 9 | | | | | | \ | 2 | 3 | 4 | 5 | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[DEAD] = KEYMAP( + // left hand + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS, M(100), M(101), M(102), M(103), M(104), KC_TRNS, + KC_TRNS, M(109), M(110), M(111), M(112), M(113), + KC_TRNS, M(120), M(121), M(122), M(123), M(124), KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, M(105), M(106), M(107), M(108), M(130), KC_F12, + M(114), M(115), M(116), M(117), M(118), M(119), + KC_TRNS, M(125), M(126), M(127), M(128), M(129), KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Layer 1 (Symbols) + [2] = ACTION_LAYER_ON(BASE,0), // FN2 - Go back to the base layer + [3] = ACTION_LAYER_ON(DEAD,0), + [4] = ACTION_LAYER_TOGGLE(DEAD), +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + case 100: + layer_clear(); + return MACRODOWN(D(LSFT), T(5), U(LSFT), T(FN4), END); + break; + case 101: + layer_clear(); + return MACRODOWN(D(LSFT), T(7), U(LSFT), T(FN4), END); + break; + case 102: + layer_clear(); + return MACRODOWN(D(LSFT), T(SLSH), U(LSFT), T(FN4), END); + break; + case 103: + layer_clear(); + return MACRODOWN(D(LSFT), T(EQL), U(LSFT), T(FN4), END); + break; + case 104: + layer_clear(); + return MACRODOWN(D(LSFT), T(2), U(LSFT), T(FN4), END); + break; + case 105: + layer_clear(); + return MACRODOWN(D(LSFT), T(4), U(LSFT), T(FN4), END); + break; + case 106: + layer_clear(); + return MACRODOWN(D(LSFT), T(MINS), U(LSFT), T(FN4), END); + break; + case 107: + layer_clear(); + return MACRODOWN(T(LBRC), T(FN4), END); + break; + case 108: + layer_clear(); + return MACRODOWN(T(RBRC), T(FN4), END); + break; + case 130: + layer_clear(); + return MACRODOWN(D(LSFT), T(1), U(LSFT), T(FN4), END); + break; + case 109: + layer_clear(); + return MACRODOWN(T(SLSH), T(FN4), END); + break; + case 110: + layer_clear(); + return MACRODOWN(D(LSFT), T(9), U(LSFT), T(FN4), END); + break; + case 111: + layer_clear(); + return MACRODOWN(T(EQL), T(FN4), END); + break; + case 112: + layer_clear(); + return MACRODOWN(T(0), T(FN4), END); + break; + case 113: + layer_clear(); + return MACRODOWN(D(LSFT), T(LBRC), U(LSFT), T(FN4), END); + break; + case 114: + layer_clear(); + return MACRODOWN(D(LSFT), T(RBRC), U(LSFT), T(FN4), END); + break; + case 115: + layer_clear(); + return MACRODOWN(T(1), T(FN4), END); + break; + case 116: + layer_clear(); + return MACRODOWN(D(LSFT), T(8), U(LSFT), T(FN4), END); + break; + case 117: + layer_clear(); + return MACRODOWN(D(LSFT), T(0), U(LSFT), T(FN4), END); + break; + case 118: + layer_clear(); + return MACRODOWN(T(MINS), T(FN4), END); + break; + case 119: + layer_clear(); + return MACRODOWN(D(LSFT), T(QUOT), U(LSFT), T(FN4), END); + break; + case 120: + layer_clear(); + return MACRODOWN(T(6), T(FN4), END); + break; + case 121: + layer_clear(); + return MACRODOWN(T(7), T(FN4), END); + break; + case 122: + layer_clear(); + return MACRODOWN(T(8), T(FN4), END); + break; + case 123: + layer_clear(); + return MACRODOWN(T(9), T(FN4), END); + break; + case 124: + layer_clear(); + return MACRODOWN(D(LSFT), T(BSLS), U(LSFT), T(FN4), END); + break; + case 125: + layer_clear(); + return MACRODOWN(T(BSLS), T(FN4), END); + break; + case 126: + layer_clear(); + return MACRODOWN(T(2), T(FN4), END); + break; + case 127: + layer_clear(); + return MACRODOWN(T(3), T(FN4), END); + break; + case 128: + layer_clear(); + return MACRODOWN(T(4), T(FN4), END); + break; + case 129: + layer_clear(); + return MACRODOWN(T(5), T(FN4), END); + break; + + default: + return MACRO_NONE; + } + +}; + +// Runs just one time when the keyboard initializes. +void * matrix_init_user(void) { + +}; + +// Runs constantly in the background, in a loop. +void * matrix_scan_user(void) { + + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboard/planck/keymaps/keymap_gabriel.c b/keyboard/planck/keymaps/keymap_gabriel.c index 3620c75a75..805484488b 100644 --- a/keyboard/planck/keymaps/keymap_gabriel.c +++ b/keyboard/planck/keymaps/keymap_gabriel.c @@ -9,9 +9,9 @@ #define _RS 2 #define _FN 3 -// This a slightly adapted 'default' keymap. I like the position of 'esc' and 'tab' better this way. -// I also git rid of the backlighting control key and the dvorak and colemak layers. I added a 'fn' -// layer that makes the 'bspc' a forward delete (like on OSX). +// This a slightly modified 'default' keymap that's closer to the Mac keyboard layout. I like the position +// of 'esc' and 'tab' better this way. I also got rid of the backlighting control key and the dvorak and +// colemak layers. I added an 'fn' layer that makes the 'bspc' a forward delete (like on OSX). const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* MIT Layout (QWERTY layer) * @@ -22,21 +22,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------------------| * |shift| z | x | c | v | b | n | m | , | . | / |enter| * |-----------------------------------------------------------------------| - * | fn | ctl | alt | cmd |lower| spc |raise| left| down| up |right| + * | fn | ctl | alt | cmd |lower| spc |raise|left |down | up |right| * `-----------------------------------------------------------------------' */ [_QW] = { /* QWERTY */ {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {MO(_FN), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {MO(_FN), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* MIT Layout (Raised layer) * * ,-----------------------------------------------------------------------. * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | * |-----------------------------------------------------------------------| - * | | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * | | F1 | F2 | F3 | F4 | F5 | F6 | - | + | [ | ] | | | * |-----------------------------------------------------------------------| * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | | * |-----------------------------------------------------------------------| @@ -45,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_RS] = { /* RAISE */ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_PLUS, KC_LBRC, KC_RBRC, KC_PIPE}, {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} }, @@ -54,7 +54,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------. * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | * |-----------------------------------------------------------------------| - * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | = | { | } | \ | * |-----------------------------------------------------------------------| * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | | * |-----------------------------------------------------------------------| @@ -63,7 +63,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_LW] = { /* LOWER */ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_EQL, KC_LCBR, KC_RCBR, KC_BSLS}, {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} }, @@ -76,15 +76,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------------------| * | | | | | | | | | | | | | * |-----------------------------------------------------------------------| - * | | | | | | | | | | | | + * | | | | | | | |home |pgdn |pgup | end | * `-----------------------------------------------------------------------' */ [_FN] = { /* FUNCTION */ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DELT}, {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END} } };