Olivier 8 years ago
commit 09ea12f9ca

4
.gitignore vendored

@ -16,8 +16,8 @@ build/
.vagrant/
.DS_STORE
# Eclipse Settings
# Eclipse/PyCharm/Other IDE Settings
.cproject
.project
.settings/
.idea

@ -1,11 +1,13 @@
# Quantum MK Firmware
# Quantum Mechanical Keyboard Firmware
This is a keyboard firmware based on the [tmk_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.co) and the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard.
This is a keyboard firmware based on the [tmk_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.co), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/).
QMK is developed and maintained by Jack Humbert of OLKB with contributions from the community, and of course, TMK.
This documentation is edited and maintained by Erez Zukerman of ErgoDox EZ. If you spot any typos or inaccuracies, please [open an issue](https://github.com/jackhumbert/qmk_firmware/issues/new).
The OLKB product firmwares are maintained by Jack, the Ergodox EZ by Erez, and the Clueboard by [Zach White](https://github.com/skullydazed).
## Important background info: TMK documentation
The documentation below explains QMK customizations and elaborates on some of the more useful features of TMK. To understand the base firmware, and especially what *layers* are and how they work, please see [TMK_README.md](/TMK_README.md).
@ -211,6 +213,23 @@ This will clear all keys besides the mods currently pressed.
If the user attempts to activate layer 1 AND layer 2 at the same time (for example, by hitting their respective layer keys), layer 3 will be activated. Layers 1 and 2 will _also_ be activated, for the purposes of fallbacks (so a given key will fall back from 3 to 2, to 1 -- and only then to 0).
#### Naming your macros
If you have a bunch of macros you want to refer to from your keymap, while keeping the keymap easily readable, you can just name them like so:
```
#define AUD_OFF M(6)
#define AUD_ON M(7)
#define MUS_OFF M(8)
#define MUS_ON M(9)
#define VC_IN M(10)
#define VC_DE M(11)
#define PLOVER M(12)
#define EXT_PLV M(13)
```
As was done on the [Planck default keymap](/keyboard/planck/keymaps/default/keymap.c#L33-L40)
#### Timer functionality
It's possible to start timers and read values for time-specific events - here's an example:
@ -227,11 +246,91 @@ if (timer_elapsed(key_timer) < 100) {
It's best to declare the `static uint16_t key_timer;` outside of the macro block (top of file, etc).
#### Example 1: Single-key copy/paste (hold to copy, tap to paste)
With QMK, it's easy to make one key do two things, as long as one of those things is being a modifier. :) So if you want a key to act as Ctrl when held and send the letter R when tapped, that's easy: `CTL_T(KC_R)`. But what do you do when you want that key to send Ctrl-V (paste) when tapped, and Ctrl-C (copy) when held?
Here's what you do:
```
static uint16_t key_timer;
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch(id) {
case 0: {
if (record->event.pressed) {
key_timer = timer_read(); // if the key is being pressed, we start the timer.
}
else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down").
if (timer_elapsed(key_timer) > 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap.
return MACRO( D(LCTL), T(C), U(LCTL), END );
}
else {
return MACRO( D(LCTL), T(V), U(LCTL), END );
}
}
break;
}
}
return MACRO_NONE;
};
```
And then, to assign this macro to a key on your keyboard layout, you just use `M(0)` on the key you want to press for copy/paste.
#### Example 2: Space Cadet Shift (making it easy to send opening and closing parentheses)
In the [Modern Space Cadet Keyboard](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/#shift-parentheses), one of cooler features is the Shift Parentheses. To quote Steve Losh:
> When held while pressing other keys, act like Shift.
> When pressed and released on their own, type an opening or closing parenthesis (left and right shift respectively).
```
static uint16_t key_timer;
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch(id) {
case 0: {
if (record->event.pressed) {
key_timer = timer_read(); // if the key is being pressed, we start the timer.
register_code(KC_LSFT); // we're now holding down Shift.
} else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down").
if (timer_elapsed(key_timer) < 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap.
register_code(KC_9); // sending 9 while Shift is held down gives us an opening paren
unregister_code(KC_9); // now let's let go of that key
}
unregister_code(KC_LSFT); // let's release the Shift key now.
}
break;
}
case 1: {
if (record->event.pressed) {
key_timer = timer_read(); // Now we're doing the same thing, only for the right shift/close paren key
register_code(KC_RSFT);
} else {
if (timer_elapsed(key_timer) < 150) {
register_code(KC_0);
unregister_code(KC_0);
}
unregister_code(KC_RSFT);
}
break;
}
}
return MACRO_NONE;
};
```
And then, to assign this macro to a key on your keyboard layout, you just use `M(0)` on the key you want to press for left shift/opening parens, and `M(1)` for right shift/closing parens.
## Additional keycode aliases for software-implemented layouts (Colemak, Dvorak, etc)
Everything is assuming you're in Qwerty (in software) by default, but there is built-in support for using a Colemak or Dvorak layout by including this at the top of your keymap:
#include <keymap_extras/keymap_colemak.h>
#include <keymap_colemak.h>
If you use Dvorak, use `keymap_dvorak.h` instead of `keymap_colemak.h` for this line. After including this line, you will get access to:
@ -274,7 +373,7 @@ This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboar
## International Characters on Windows
[AutoHotkey](https://autohotkey.com) allows Windows users to create custom hotkeys amont others.
[AutoHotkey](https://autohotkey.com) allows Windows users to create custom hotkeys among others.
The method does not require Unicode support in the keyboard itself but depends instead of AutoHotkey running in the background.

@ -142,7 +142,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
@ -171,10 +171,6 @@ endif
endif
ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
SRC := backlight.c $(SRC)
endif
# Optimize size but this may cause error "relocation truncated to fit"
#EXTRALDFLAGS = -Wl,--relax

@ -2,12 +2,22 @@
__attribute__ ((weak))
void matrix_init_user(void) {
// leave these blank
}
// leave this function blank - it can be defined in a keymap file
};
__attribute__ ((weak))
void matrix_scan_user(void) {
// leave these blank
// leave this function blank - it can be defined in a keymap file
}
__attribute__ ((weak))
void process_action_user(keyrecord_t *record) {
// leave this function blank - it can be defined in a keymap file
}
__attribute__ ((weak))
void led_set_user(uint8_t usb_led) {
// leave this function blank - it can be defined in a keymap file
}
void matrix_init_kb(void) {
@ -34,3 +44,77 @@ void matrix_scan_kb(void) {
matrix_scan_user();
}
void process_action_kb(keyrecord_t *record) {
// put your per-action keyboard code here
// runs for every action, just before processing by the firmware
process_action_user(record);
}
void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
led_set_user(usb_led);
}
#ifdef BACKLIGHT_ENABLE
#define CHANNEL OCR1C
void backlight_init_ports()
{
// Setup PB7 as output and output low.
DDRB |= (1<<7);
PORTB &= ~(1<<7);
// Use full 16-bit resolution.
ICR1 = 0xFFFF;
// I could write a wall of text here to explain... but TL;DW
// Go read the ATmega32u4 datasheet.
// And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
// Pin PB7 = OCR1C (Timer 1, Channel C)
// Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
// (i.e. start high, go low when counter matches.)
// WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
// Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
backlight_init();
}
void backlight_set(uint8_t level)
{
if ( level == 0 )
{
// Turn off PWM control on PB7, revert to output low.
TCCR1A &= ~(_BV(COM1C1));
CHANNEL = 0x0;
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
}
else if ( level == BACKLIGHT_LEVELS )
{
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
// Set the brightness
CHANNEL = 0xFFFF;
}
else
{
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
// Set the brightness
CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
}
}
#endif

@ -3,8 +3,11 @@
#include "matrix.h"
#include "keymap_common.h"
#include "backlight.h"
#ifdef BACKLIGHT_ENABLE
#include "backlight.h"
#endif
#include <stddef.h>
#include <avr/io.h>
// This a shortcut to help you visually see your layout.
// The following is an example using the Planck MIT layout

@ -1,63 +0,0 @@
#include <avr/io.h>
#include "backlight.h"
#include "atomic.h"
#define CHANNEL OCR1C
void backlight_init_ports()
{
// Setup PB7 as output and output low.
DDRB |= (1<<7);
PORTB &= ~(1<<7);
// Use full 16-bit resolution.
ICR1 = 0xFFFF;
// I could write a wall of text here to explain... but TL;DW
// Go read the ATmega32u4 datasheet.
// And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
// Pin PB7 = OCR1C (Timer 1, Channel C)
// Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
// (i.e. start high, go low when counter matches.)
// WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
// Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
backlight_init();
}
void backlight_set(uint8_t level)
{
if ( level == 0 )
{
// Turn off PWM control on PB7, revert to output low.
TCCR1A &= ~(_BV(COM1C1));
CHANNEL = 0x0;
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
}
else if ( level == BACKLIGHT_LEVELS )
{
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
// Set the brightness
CHANNEL = 0xFFFF;
}
else
{
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
// Set the brightness
CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
}
}

@ -62,6 +62,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
// Enable Keyboard Locking via magic key
#define KEYBOARD_LOCK_ENABLE
/*
* Force NKRO
*

@ -1,29 +1,88 @@
#include "atomic.h"
#include "action_layer.h"
#include "eeconfig.h"
#include "led.h"
#ifdef AUDIO_ENABLE
#include "audio.h"
#include "musical_notes.h"
#include "audio.h"
#include "song_list.h"
#endif
#define LAYER_QWERTY 0
#define LAYER_COLEMAK 1
#define LAYER_DVORAK 2
#define LAYER_LOWER 3
#define LAYER_RAISE 4
#define LAYER_FUNCTION 5
#define LAYER_MOUSE 6
#define LAYER_MUSIC 7
#define LAYER_ADJUST 8
#define _QW 0
#define _LW 1
#define _RS 2
#define _AD 3
#define _FN 4
#define MACRO_QWERTY 0
#define MACRO_COLEMAK 1
#define MACRO_DVORAK 2
#define MACRO_LOWER 3
#define MACRO_RAISE 4
#define MACRO_FUNCTION 5
#define MACRO_MOUSE 6
#define MACRO_TIMBRE_1 7
#define MACRO_TIMBRE_2 8
#define MACRO_TIMBRE_3 9
#define MACRO_TIMBRE_4 10
#define MACRO_TEMPO_U 11
#define MACRO_TEMPO_D 12
#define MACRO_TONE_DEFAULT 13
#define MACRO_MUSIC_ON 14
#define MACRO_MUSIC_OFF 15
#define MACRO_AUDIO_ON 16
#define MACRO_AUDIO_OFF 17
#define MACRO_INC_VOICE 18
#define MACRO_DEC_VOICE 19
#define M_QW 0
#define M_LW 1
#define M_RS 2
#define M_FN 3
#define M_QWRTY M(MACRO_QWERTY)
#define M_COLMK M(MACRO_COLEMAK)
#define M_DVORK M(MACRO_DVORAK)
#define M_LOWER M(MACRO_LOWER)
#define M_RAISE M(MACRO_RAISE)
#define M_FUNCT M(MACRO_FUNCTION)
#define M_MOUSE M(MACRO_MOUSE)
#define TIMBR_1 M(MACRO_TIMBRE_1)
#define TIMBR_2 M(MACRO_TIMBRE_2)
#define TIMBR_3 M(MACRO_TIMBRE_3)
#define TIMBR_4 M(MACRO_TIMBRE_4)
#define TMPO_UP M(MACRO_TEMPO_U)
#define TMPO_DN M(MACRO_TEMPO_D)
#define TMPO_DF M(MACRO_TONE_DEFAULT)
#define _______ KC_TRNS
#define ___T___ KC_TRNS
#define XXXXXXX KC_NO
#define MUS_ON M(MACRO_MUSIC_ON)
#define MUS_OFF M(MACRO_MUSIC_OFF)
#define AUD_OFF M(MACRO_AUDIO_OFF)
#define AUD_ON M(MACRO_AUDIO_ON)
#define VC_UP M(MACRO_INC_VOICE)
#define VC_DOWN M(MACRO_DEC_VOICE)
/*
#define SC_UNDO LCTL(KC_Z)
#define SC_REDO LCTL(KC_Y)
#define SC_CUT LCTL(KC_X)
#define SC_COPY LCTL(KC_C)
#define SC_PSTE LCTL(KC_V)
#define SC_SELA LCTL(KC_A)
#define SC_SAVE LCTL(KC_S)
#define SC_OPEN LCTL(KC_O)
#define SC_ACLS LALT(KC_F4)
#define SC_CCLS LCTL(KC_F4)
#define _______ KC_TRNS
#define XXXXXXX KC_NO
#define ________________ _______, _______
#define XXXXXXXXXXXXXXXX XXXXXXX, XXXXXXX
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* QWERTY
* .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
* | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
@ -33,277 +92,426 @@
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
* | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN |
* |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
* | LCTRL | LWIN | FN | LALT | RAISED | XXXXXX . SPACE | LOWER | RALT | HOME | END | RCTRL | LEFT | DOWN | RIGHT |
* | LCTRL | LWIN | FN | LALT | RAISE | XXXXXX . SPACE | LOWER | RALT | RWIN | MENU | RCTRL | LEFT | DOWN | RIGHT |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QW] = { /* QWERTY */
{ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, XXXXXXX },
[LAYER_QWERTY] = { /* QWERTY */
{ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC },
{ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL },
{ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, XXXXXXX, KC_PGUP },
{ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, XXXXXXX, KC_UP, KC_PGDN },
{ KC_LCTL, KC_LGUI, M(M_FN), KC_LALT, M(M_RS), KC_SPC, XXXXXXX, M(M_LW), KC_RALT, KC_HOME, KC_END, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
{ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP },
{ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN },
{ KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
},
[_LW] = { /* LOWERED */
{ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ___T___, ___T___ },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ___T___, ___T___, _______ },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ___T___, ___T___, _______, _______ },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
/* COLEMAK
* .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
* | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
* | TAB | Q | W | F | P | G | J | L | U | Y | ; | [ | ] | \ | DEL |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
* | BACKSP | A | R | S | T | D | H | N | E | I | O | ' | XXXXXX . ENTER | PG UP |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
* | LSHIFT | Z | X | C | V | B | K | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN |
* |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
* | LCTRL | LWIN | FN | LALT | RAISE | XXXXXX . SPACE | LOWER | RALT | RWIN | MENU | RCTRL | LEFT | DOWN | RIGHT |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
[LAYER_COLEMAK] = { /* COLEMAK */
{ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC },
{ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL },
{ KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP },
{ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN },
{ KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
},
[_RS] = { /* RAISED */
{ KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ___T___, ___T___ },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ___T___, ___T___, _______ },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ___T___, ___T___, _______, _______ },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
/* DVORAK
* .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
* | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [ | ] | XXXXXX . BACKSP |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
* | TAB | ' | , | . | P | Y | F | G | C | R | L | / | = | \ | DEL |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
* | CAPS | A | O | E | U | I | D | H | T | N | S | - | XXXXXX . ENTER | PG UP |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
* | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | XXXXXX . RSHIFT | UP | PG DN |
* |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
* | LCTRL | LWIN | FN | LALT | RAISE | XXXXXX . SPACE | LOWER | RALT | RWIN | MENU | RCTRL | LEFT | DOWN | RIGHT |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
[LAYER_DVORAK] = { /* DVORAK */
{ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_BSPC },
{ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL },
{ KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_ENT, KC_PGUP },
{ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN },
{ KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
},
[_FN] = { /* FUNCTION */
{ KC_NLCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ___T___, ___T___ },
{ KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_PAUS, KC_PSCR },
{ KC_CAPS, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, KC_ACL0, KC_ACL2, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, ___T___, ___T___, KC_WH_U },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ___T___, ___T___, KC_MS_U, KC_WH_D },
{ _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R },
[LAYER_LOWER] = { /* LOWERED */
{ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ },
{ _______, _______, _______, _______, SC_CCLS, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_HOME },
{ _______, SC_REDO, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______, KC_END },
{ _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, _______, _______, _______, _______, _______, _______, _______ },
},
[_AD] = { /* ADJUST */
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ___T___, ___T___ },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ___T___, ___T___, _______ },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ___T___, ___T___, _______, _______ },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
[LAYER_RAISE] = { /* RAISED */
{ KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ },
{ _______, _______, _______, _______, SC_ACLS, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS },
{ _______, SC_SELA, SC_SAVE, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_HOME },
{ _______, SC_UNDO, SC_CUT, SC_COPY, SC_PSTE, _______, _______, _______, _______, _______, _______, ________________, _______, KC_END },
{ _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ },
},
};
[LAYER_FUNCTION] = { /* FUNCTION */
{ KC_NLCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ },
{ KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, KC_PAUS },
{ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_PSCR },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_VOLU, KC_MUTE },
{ _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT },
},
#ifdef AUDIO_ENABLE
#ifdef MOUSEKEY_ENABLE
[LAYER_MOUSE] = { /* MOUSE */
{ _______, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX },
{ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
{ XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, KC_WH_U },
{ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_MS_U, KC_WH_D },
{ _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R },
},
#endif
[LAYER_MUSIC] = { /* MUSIC */
{ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
{ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
{ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
{ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
{ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_RAISE, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
},
[LAYER_ADJUST] = { /* ADJUST */
{ _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, MUS_ON, MUS_OFF, AUD_ON, AUD_OFF, ________________ },
{ _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ },
{ _______, _______, _______, _______, _______, RESET, _______, M_MOUSE, _______, _______, _______, ________________, VC_UP, _______ },
{ _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, VC_DOWN, _______ },
},
float tone_lw[][2] = {
/*
Q_NOTE(_C1 ) ,
Q_NOTE(_CS1 ) ,
Q_NOTE(_D1 ) ,
Q_NOTE(_DS1 ) ,
Q_NOTE(_E1 ) ,
Q_NOTE(_F1 ) ,
Q_NOTE(_FS1 ) ,
Q_NOTE(_G1 ) ,
Q_NOTE(_GS1 ) ,
Q_NOTE(_A1 ) ,
Q_NOTE(_AS1 ) ,
Q_NOTE(_B1 ) ,
[LAYER_EMPTY] = {
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________ },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______, _______ },
{ _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ },
},
*/
Q_NOTE(_C4 ) ,
Q_NOTE(_CS4 ) ,
Q_NOTE(_D4 ) ,
Q_NOTE(_DS4 ) ,
Q_NOTE(_E4 ) ,
Q_NOTE(_F4 ) ,
Q_NOTE(_FS4 ) ,
Q_NOTE(_G4 ) ,
Q_NOTE(_GS4 ) ,
Q_NOTE(_A4 ) ,
Q_NOTE(_AS4 ) ,
Q_NOTE(_B1 ) ,
Q_NOTE(_C2 ) ,
Q_NOTE(_CS2 ) ,
Q_NOTE(_D2 ) ,
Q_NOTE(_DS2 ) ,
Q_NOTE(_E2 ) ,
Q_NOTE(_F2 ) ,
Q_NOTE(_FS2 ) ,
Q_NOTE(_G2 ) ,
Q_NOTE(_GS2 ) ,
Q_NOTE(_A2 ) ,
Q_NOTE(_AS2 ) ,
Q_NOTE(_B2 ) ,
Q_NOTE(_C3 ) ,
Q_NOTE(_CS3 ) ,
Q_NOTE(_D3 ) ,
Q_NOTE(_DS3 ) ,
Q_NOTE(_E3 ) ,
Q_NOTE(_F3 ) ,
Q_NOTE(_FS3 ) ,
Q_NOTE(_G3 ) ,
Q_NOTE(_GS3 ) ,
Q_NOTE(_A3 ) ,
Q_NOTE(_AS3 ) ,
Q_NOTE(_B3 ) ,
Q_NOTE(_C4 ) ,
Q_NOTE(_CS4 ) ,
Q_NOTE(_D4 ) ,
Q_NOTE(_DS4 ) ,
Q_NOTE(_E4 ) ,
Q_NOTE(_F4 ) ,
Q_NOTE(_FS4 ) ,
Q_NOTE(_G4 ) ,
Q_NOTE(_GS4 ) ,
Q_NOTE(_A4 ) ,
Q_NOTE(_AS4 ) ,
Q_NOTE(_B4 ) ,
Q_NOTE(_C5 ) ,
Q_NOTE(_CS5 ) ,
Q_NOTE(_D5 ) ,
Q_NOTE(_DS5 ) ,
Q_NOTE(_E5 ) ,
Q_NOTE(_F5 ) ,
Q_NOTE(_FS5 ) ,
Q_NOTE(_G5 ) ,
Q_NOTE(_GS5 ) ,
Q_NOTE(_A5 ) ,
Q_NOTE(_AS5 ) ,
Q_NOTE(_B5 ) ,
Q_NOTE(_C6 ) ,
Q_NOTE(_CS6 ) ,
Q_NOTE(_D6 ) ,
Q_NOTE(_DS6 ) ,
Q_NOTE(_E6 ) ,
Q_NOTE(_F6 ) ,
Q_NOTE(_FS6 ) ,
Q_NOTE(_G6 ) ,
Q_NOTE(_GS6 ) ,
Q_NOTE(_A6 ) ,
Q_NOTE(_AS6 ) ,
Q_NOTE(_B6 ) ,
Q_NOTE(_C7 ) ,
Q_NOTE(_CS7 ) ,
Q_NOTE(_D7 ) ,
Q_NOTE(_DS7 ) ,
Q_NOTE(_E7 ) ,
Q_NOTE(_F7 ) ,
Q_NOTE(_FS7 ) ,
Q_NOTE(_G7 ) ,
Q_NOTE(_GS7 ) ,
Q_NOTE(_A7 ) ,
Q_NOTE(_AS7 ) ,
Q_NOTE(_B7 ) ,
Q_NOTE(_C8 ) ,
Q_NOTE(_CS8 ) ,
Q_NOTE(_D8 ) ,
Q_NOTE(_DS8 ) ,
Q_NOTE(_E8 ) ,
Q_NOTE(_F8 ) ,
Q_NOTE(_FS8 ) ,
Q_NOTE(_G8 ) ,
Q_NOTE(_GS8 ) ,
Q_NOTE(_A8 ) ,
Q_NOTE(_AS8 ) ,
Q_NOTE(_B8 ) ,
};
float tone_rs[][2] = {
Q_NOTE(_A4 ) ,
Q_NOTE(_A4 ) ,
Q_NOTE(_A4 ) ,
Q_NOTE(_A4 ) ,
Q_NOTE(_AS8 ) ,
Q_NOTE(_B8 ) ,
};
#ifdef AUDIO_ENABLE
#endif
float tone_my_startup[][2] = SONG(ODE_TO_JOY);
float tone_my_goodbye[][2] = SONG(ROCK_A_BYE_BABY);
float tone_qwerty[][2] = SONG(QWERTY_SOUND);
float tone_dvorak[][2] = SONG(DVORAK_SOUND);
float tone_colemak[][2] = SONG(COLEMAK_SOUND);
float tone_audio_on[][2] = SONG(CLOSE_ENCOUNTERS_5_NOTE);
float tone_music_on[][2] = SONG(DOE_A_DEER);
float tone_caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND);
float tone_caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND);
float tone_numlk_on[][2] = SONG(NUM_LOCK_ON_SOUND);
float tone_numlk_off[][2] = SONG(NUM_LOCK_OFF_SOUND);
float tone_scroll_on[][2] = SONG(SCROLL_LOCK_ON_SOUND);
float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND);
float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
#endif /* AUDIO_ENABLE */
void update_quad_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3, uint8_t layer4, bool order)
void persistant_default_layer_set(uint16_t default_layer)
{
if (order)
{
if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2))
{
layer_on(layer3);
}
else
{
layer_off(layer3);
layer_off(layer4);
}
}
else
{
if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2))
{
layer_on(layer4);
}
else
{
layer_off(layer3);
layer_off(layer4);
}
}
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
}
const uint16_t PROGMEM fn_actions[] = {
};
//#define MUSIC_ARRAY_SIZE(x) (((int)(sizeof(x) / (sizeof(x[0][0])))) / 2)
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case M_LW:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
println("PlayNotes LW");
PLAY_NOTE_ARRAY(tone_lw, false, STACCATO);
#endif
layer_on(_LW);
update_tri_layer(_LW, _RS, _FN);
} else {
layer_off(_LW);
update_tri_layer(_LW, _RS, _FN);
}
break;
case M_RS:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
println("PlayNotes RS");
PLAY_NOTE_ARRAY(tone_rs, false, LEGATO);
#endif
layer_on(_RS);
update_tri_layer(_LW, _RS, _FN);
} else {
layer_off(_RS);
update_tri_layer(_LW, _RS, _FN);
}
break;
default:
break;
}
// MACRODOWN only works in this function
switch(id)
{
case MACRO_QWERTY:
if (record->event.pressed)
{
persistant_default_layer_set(1UL<<LAYER_QWERTY);
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_qwerty, false, STACCATO);
#endif /* AUDIO_ENABLE */
}
break;
case MACRO_COLEMAK:
if (record->event.pressed)
{
persistant_default_layer_set(1UL<<LAYER_COLEMAK);
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_colemak, false, STACCATO);
#endif /* AUDIO_ENABLE */
}
break;
case MACRO_DVORAK:
if (record->event.pressed)
{
persistant_default_layer_set(1UL<<LAYER_DVORAK);
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_dvorak, false, STACCATO);
#endif /* AUDIO_ENABLE */
}
break;
case MACRO_LOWER:
if (record->event.pressed)
{
layer_on(LAYER_LOWER);
update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST);
}
else
{
layer_off(LAYER_LOWER);
update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST);
}
break;
case MACRO_RAISE:
if (record->event.pressed)
{
layer_on(LAYER_RAISE);
update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST);
}
else
{
layer_off(LAYER_RAISE);
update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST);
}
break;
case MACRO_FUNCTION:
if (record->event.pressed)
{
layer_on(LAYER_FUNCTION);
}
else
{
layer_off(LAYER_FUNCTION);
}
break;
#ifdef MOUSEKEY_ENABLE
case MACRO_MOUSE:
if (record->event.pressed)
{
layer_invert(LAYER_MOUSE);
}
break;
#endif /* MOUSEKEY_ENABLE */
#ifdef AUDIO_ENABLE
case MACRO_TIMBRE_1:
if (record->event.pressed) set_timbre(TIMBRE_12);
break;
case MACRO_TIMBRE_2:
if (record->event.pressed) set_timbre(TIMBRE_25);
break;
case MACRO_TIMBRE_3:
if (record->event.pressed) set_timbre(TIMBRE_50);
break;
case MACRO_TIMBRE_4:
if (record->event.pressed) set_timbre(TIMBRE_75);
break;
case MACRO_TEMPO_U:
if (record->event.pressed) increase_tempo(10);
break;
case MACRO_TEMPO_D:
if (record->event.pressed) decrease_tempo(10);
break;
case MACRO_TONE_DEFAULT:
if (record->event.pressed)
{
set_timbre(TIMBRE_DEFAULT);
set_tempo(TEMPO_DEFAULT);
}
break;
case MACRO_AUDIO_OFF:
if (record->event.pressed)
{
#ifdef AUDIO_ENABLE
audio_off();
#endif
}
break;
case MACRO_AUDIO_ON:
if (record->event.pressed)
{
#ifdef AUDIO_ENABLE
audio_on();
PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO);
#endif
}
break;
case MACRO_MUSIC_ON:
if (record->event.pressed)
{
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO);
layer_on(LAYER_MUSIC);
#endif
}
break;
case MACRO_MUSIC_OFF:
if (record->event.pressed)
{
#ifdef AUDIO_ENABLE
layer_off(LAYER_MUSIC);
stop_all_notes();
#endif
}
break;
case MACRO_INC_VOICE:
if (record->event.pressed)
{
#ifdef AUDIO_ENABLE
voice_iterate();
PLAY_NOTE_ARRAY(music_scale, false, STACCATO);
#endif
}
break;
case MACRO_DEC_VOICE:
if (record->event.pressed)
{
#ifdef AUDIO_ENABLE
voice_deiterate();
PLAY_NOTE_ARRAY(music_scale, false, STACCATO);
#endif
}
break;
#endif /* AUDIO_ENABLE */
default:
break;
}
return MACRO_NONE;
};
#ifdef AUDIO_ENABLE
float start_up[][2] = {
Q_NOTE(_E4 ) ,
Q_NOTE(_E4 ) ,
Q_NOTE(_F4 ) ,
Q_NOTE(_G4 ) ,
Q_NOTE(_G4 ) ,
Q_NOTE(_F4 ) ,
Q_NOTE(_E4 ) ,
Q_NOTE(_D4 ) ,
Q_NOTE(_C4 ) ,
Q_NOTE(_C4 ) ,
Q_NOTE(_D4 ) ,
Q_NOTE(_E4 ) ,
H_NOTE(_E4 ) ,
Q_NOTE(_D4 ) ,
H_NOTE(_D4 ) ,
};
#endif
void matrix_init_user(void) {
#ifdef AUDIO_ENABLE
init_notes();
PLAY_NOTE_ARRAY(start_up, false, STACCATO);
void process_action_user(keyrecord_t *record)
{
uint8_t starting_note = 0x0C;
int offset = 7;
if (IS_LAYER_ON(LAYER_MUSIC))
{
if (record->event.pressed)
{
play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF);
}
else
{
stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)));
}
}
}
void matrix_init_user(void)
{
set_voice(default_voice);
play_startup_tone();
println("Matrix Init");
#endif
}
void led_set_user(uint8_t usb_led)
{
static uint8_t old_usb_led = 0;
_delay_ms(10); // gets rid of tick
if ((usb_led & (1<<USB_LED_CAPS_LOCK)) && !(old_usb_led & (1<<USB_LED_CAPS_LOCK)))
{
// If CAPS LK LED is turning on...
PLAY_NOTE_ARRAY(tone_caps_on, false, LEGATO);
}
else if (!(usb_led & (1<<USB_LED_CAPS_LOCK)) && (old_usb_led & (1<<USB_LED_CAPS_LOCK)))
{
// If CAPS LK LED is turning off...
PLAY_NOTE_ARRAY(tone_caps_off, false, LEGATO);
}
else if ((usb_led & (1<<USB_LED_NUM_LOCK)) && !(old_usb_led & (1<<USB_LED_NUM_LOCK)))
{
// If NUM LK LED is turning on...
PLAY_NOTE_ARRAY(tone_numlk_on, false, LEGATO);
}
else if (!(usb_led & (1<<USB_LED_NUM_LOCK)) && (old_usb_led & (1<<USB_LED_NUM_LOCK)))
{
// If NUM LED is turning off...
PLAY_NOTE_ARRAY(tone_numlk_off, false, LEGATO);
}
else if ((usb_led & (1<<USB_LED_SCROLL_LOCK)) && !(old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
{
// If SCROLL LK LED is turning on...
PLAY_NOTE_ARRAY(tone_scroll_on, false, LEGATO);
}
else if (!(usb_led & (1<<USB_LED_SCROLL_LOCK)) && (old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
{
// If SCROLL LED is turning off...
PLAY_NOTE_ARRAY(tone_scroll_off, false, LEGATO);
}
old_usb_led = usb_led;
}
void play_startup_tone()
{
_delay_ms(10); // gets rid of tick
PLAY_NOTE_ARRAY(tone_my_startup, false, STACCATO);
}
void play_goodbye_tone()
{
PLAY_NOTE_ARRAY(tone_my_goodbye, false, STACCATO);
_delay_ms(1000);
}
#endif /* AUDIO_ENABLE */

@ -1,7 +1,7 @@
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality

@ -0,0 +1,137 @@
#----------------------------------------------------------------------------
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF.
#
# make extcoff = Convert ELF to AVR Extended COFF.
#
# make program = Download the hex file to the device.
# Please customize your programmer settings(PROGRAM_CMD)
#
# make teensy = Download the hex file to the device, using teensy_loader_cli.
# (must have teensy_loader_cli installed).
#
# make dfu = Download the hex file to the device, using dfu-programmer (must
# have dfu-programmer installed).
#
# make flip = Download the hex file to the device, using Atmel FLIP (must
# have Atmel FLIP installed).
#
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
# (must have dfu-programmer installed).
#
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
# (must have Atmel FLIP installed).
#
# make debug = Start either simulavr or avarice as specified for debugging,
# with avr-gdb or avr-insight as the front end for debugging.
#
# make filename.s = Just compile filename.c into the assembler code only.
#
# make filename.i = Create a preprocessed source file for use in submitting
# bug reports to the GCC project.
#
# To rebuild project do "make clean" then "make all".
#----------------------------------------------------------------------------
# Target file name (without extension).
TARGET = clueboard1
# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core
# Directory keyboard dependent files exist
TARGET_DIR = .
# # project specific files
SRC = clueboard1.c \
led.c
ifdef KEYMAP
SRC := keymaps/keymap_$(KEYMAP).c $(SRC)
else
SRC := keymaps/keymap_default.c $(SRC)
endif
CONFIG_H = config.h
# MCU name
MCU = atmega32u4
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency in Hz. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
#
# This will be an integer division of F_USB below, as it is sourced by
# F_USB after it has run through any CPU prescalers. Note that this value
# does not *change* the processor frequency - it should merely be updated to
# reflect the processor speed set externally so that the code can use accurate
# software delays.
F_CPU = 16000000
#
# LUFA specific
#
# Target architecture (see library "Board Types" documentation).
ARCH = AVR8
# Input clock frequency.
# This will define a symbol, F_USB, in all source code files equal to the
# input clock frequency (before any prescaling is performed) in Hz. This value may
# differ from F_CPU if prescaling is used on the latter, and is required as the
# raw input clock is fed directly to the PLL sections of the AVR for high speed
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
# at the end, this will be done automatically to create a 32-bit value in your
# source code.
#
# If no clock division is performed on the input clock inside the AVR (via the
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Boot Section Size in *bytes*
# Teensy halfKay 512
# Teensy++ halfKay 1024
# Atmel DFU loader 4096
# LUFA bootloader 4096
# USBaspLoader 2048
OPT_DEFS += -DBOOTLOADER_SIZE=4096
# Build Options
# comment out to disable the options.
#
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
AUDIO_ENABLE = no
RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality
MIDI_ENABLE = no # MIDI controls
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
# Optimize size but this may cause error "relocation truncated to fit"
#EXTRALDFLAGS = -Wl,--relax
# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)
include $(TOP_DIR)/quantum/quantum.mk

@ -0,0 +1,23 @@
#include "clueboard1.h"
__attribute__ ((weak))
void matrix_init_user(void) {
// leave these blank
}
__attribute__ ((weak))
void matrix_scan_user(void) {
// leave these blank
}
void matrix_init_kb(void) {
#ifdef RGBLIGHT_ENABLE
rgblight_init();
#endif
matrix_init_user();
}
void matrix_scan_kb(void) {
matrix_scan_user();
}

@ -0,0 +1,52 @@
#ifndef CLUEBOARD1_H
#define CLUEBOARD1_H
#include "matrix.h"
#include "keymap_common.h"
#include <stddef.h>
/* Clueboard matrix layout
* ,-----------------------------------------------------------. ,---.
* | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 0E| | 0F|
* |-----------------------------------------------------------| |---|
* | 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B| 1C| 1D| | 1F|
* |-----------------------------------------------------------| `---'
* | 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 2A| 2B| 2C| 2D|
* |------------------------------------------------------------.
* | 30| 31| 32| 33| 34| 35| 36| 37| 38| 39| 3A| 3B| 3C| 3D|3E|
* |------------------------------------------------------------------.
* | 40| 41| 42| 43| 45| 46| 49| 4A| 4B| 4C| 4D| 4E| 4F|
* `------------------------------------------------------------------'
* ,-----------------------------------------------------------. ,---.
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Yen| BS| |Ins|
* |-----------------------------------------------------------| |---|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|
* |-----------------------------------------------------------| `---'
* |Caps | A| S| D| F| G| H| J| k| L| ;| '| # | Ent|
* |--------------------------------------------------------------.
* |Shift| \| Z| X| C| V| B| N| M| ,| .| /| \|Shift| Up|
* |------------------------------------------------------------------.
* |Ctrl|Alt|Gui |MHen| Space| Space|Henk|Gui |Ctrl| Fn|Left|Down|Rgt|
* `------------------------------------------------------------------'
*/
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
#define KEYMAP( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1F, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, \
k40, k41, k42, k43, k45, k46, k49, k4A, k4B, k4C, k4D, k4E, k4F \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, KC_NO, k1F }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D }, \
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E }, \
{ k40, k41, k42, k43, KC_NO, k45, k46, KC_NO, KC_NO, k49, k4A, k4B, k4C, k4D, k4E, k4F } \
}
void matrix_init_user(void);
void matrix_scan_user(void);
#endif

@ -0,0 +1,96 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CONFIG_H
#define CONFIG_H
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xC1ED
#define PRODUCT_ID 0x2301
#define DEVICE_VER 0x0003
#define MANUFACTURER Clueboard
#define PRODUCT Clueboard
#define DESCRIPTION QMK keyboard firmware for Clueboard
/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 16
// COLS: Left to right, ROWS: Top to bottom
/* Column pin configuration
* col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
* pin: B3 F1 F4 F5 F6 C7 C6 B6 B5 B4 D7 D6 D4 F7 B0 B1
*/
#define COLS (int []){ B3, F1, F4, F5, F6, C7, C6, B6, B5, B4, D7, D6, D4, F7, B0, B1 }
/* Row pin configuration
* row: 0 1 2 3 4
* pin: D1 D0 D2 D5 D3
*/
#define ROWS (int []){ D1, D0, D2, D5, D3 }
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/* key combination for command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
/* Underlight configuration
*/
#define ws2812_PORTREG PORTB
#define ws2812_DDRREG DDRB
#define ws2812_pin 2
#define RGBLED_NUM 14 // Number of LEDs
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
#endif

@ -0,0 +1,184 @@
#include "clueboard1.h"
#ifdef RGBLIGHT_ENABLE
#include "rgblight.h"
#endif
// Used for SHIFT_ESC
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _BL 0
#define _FL 1
#define _RS 2
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BL: (Base Layer) Default Layer
* ,--------------------------------------------------------------------------. ,----.
* |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| BS| |PGUP|
* |--------------------------------------------------------------------------| |----|
* | Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |PGDN|
* |--------------------------------------------------------------------------| `----'
* |Capslck| A| S| D| F| G| H| J| K| L| ;| '| # | Ent|
* |-----------------------------------------------------------------------------.
* |Shift| BS| Z| X| C| V| B| N| M| ,| .| /| BS|Shift| UP|
* |------------------------------------------------------------------------|----|----.
* | Ctrl| Gui| Alt| MHen| Space| Space| Hen| Alt| Ctrl| _FL|LEFT|DOWN|RGHT|
* `----------------------------------------------------------------------------------'
*/
[_BL] = KEYMAP(
F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
/* Keymap _FL: Function Layer
* ,--------------------------------------------------------------------------. ,----.
* | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN|
* |--------------------------------------------------------------------------| |----|
* | | | | | | | | |PScr|SLck|Paus| | | | |BLDE|
* |--------------------------------------------------------------------------| `----'
* | | | _RS| | | | | | | | | | | |
* |-----------------------------------------------------------------------------.
* | | | | | | | | | | | | | | |PGUP|
* |------------------------------------------------------------------------|----|----.
* | | | | | | | | | | _FL|HOME|PGDN| END|
* `----------------------------------------------------------------------------------'
*/
[_FL] = KEYMAP(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, BL_STEP, \
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, MO(_RS),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_PGUP, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_HOME, KC_PGDN, KC_END),
/* Keymap _RS: Reset layer
* ,--------------------------------------------------------------------------. ,----.
* | | | | | | | | | | | | | | | | | |
* |--------------------------------------------------------------------------| |----|
* | | | | |RESET| | | | | | | | | | | |
* |--------------------------------------------------------------------------| `----'
* | | | _RS| | | | | | | | | | | |
* |-----------------------------------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |------------------------------------------------------------------------|----|----.
* | | | | | | | | | | _FL| | | |
* `----------------------------------------------------------------------------------'
*/
[_RS] = KEYMAP(
#ifdef RGBLIGHT_ENABLE
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, F(1), F(7), \
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(8), \
KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), F(5), \
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, F(2), F(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(4), F(6), F(3)),
#else
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,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, MO(_RS),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, MO(_FL), KC_TRNS, KC_TRNS, KC_TRNS),
#endif
};
enum function_id {
SHIFT_ESC,
#ifdef RGBLIGHT_ENABLE
RGBLED_TOGGLE,
RGBLED_STEP_MODE,
RGBLED_INCREASE_HUE,
RGBLED_DECREASE_HUE,
RGBLED_INCREASE_SAT,
RGBLED_DECREASE_SAT,
RGBLED_INCREASE_VAL,
RGBLED_DECREASE_VAL
#endif
};
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_FUNCTION(SHIFT_ESC),
#ifdef RGBLIGHT_ENABLE
[1] = ACTION_FUNCTION(RGBLED_TOGGLE),
[2] = ACTION_FUNCTION(RGBLED_STEP_MODE),
[3] = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
[4] = ACTION_FUNCTION(RGBLED_DECREASE_HUE),
[5] = ACTION_FUNCTION(RGBLED_INCREASE_SAT),
[6] = ACTION_FUNCTION(RGBLED_DECREASE_SAT),
[7] = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
[8] = ACTION_FUNCTION(RGBLED_DECREASE_VAL),
#endif
};
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
static uint8_t shift_esc_shift_mask;
switch (id) {
case SHIFT_ESC:
shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
if (record->event.pressed) {
if (shift_esc_shift_mask) {
add_key(KC_GRV);
send_keyboard_report();
} else {
add_key(KC_ESC);
send_keyboard_report();
}
} else {
if (shift_esc_shift_mask) {
del_key(KC_GRV);
send_keyboard_report();
} else {
del_key(KC_ESC);
send_keyboard_report();
}
}
break;
//led operations
#ifdef RGBLIGHT_ENABLE
case RGBLED_TOGGLE:
if (record->event.pressed) {
rgblight_toggle();
}
break;
case RGBLED_INCREASE_HUE:
if (record->event.pressed) {
rgblight_increase_hue();
}
break;
case RGBLED_DECREASE_HUE:
if (record->event.pressed) {
rgblight_decrease_hue();
}
break;
case RGBLED_INCREASE_SAT:
if (record->event.pressed) {
rgblight_increase_sat();
}
break;
case RGBLED_DECREASE_SAT:
if (record->event.pressed) {
rgblight_decrease_sat();
}
break;
case RGBLED_INCREASE_VAL:
if (record->event.pressed) {
rgblight_increase_val();
}
break;
case RGBLED_DECREASE_VAL:
if (record->event.pressed) {
rgblight_decrease_val();
}
break;
case RGBLED_STEP_MODE:
if (record->event.pressed) {
rgblight_step();
}
break;
#endif
}
}

@ -0,0 +1,32 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <avr/io.h>
#include "stdint.h"
#include "led.h"
void led_set_kb(uint8_t usb_led) {
DDRF |= (1<<0);
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
// Turn capslock on
PORTF |= (1<<0);
} else {
// Turn capslock off
PORTF &= ~(1<<0);
}
}

@ -0,0 +1,141 @@
#----------------------------------------------------------------------------
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF.
#
# make extcoff = Convert ELF to AVR Extended COFF.
#
# make program = Download the hex file to the device.
# Please customize your programmer settings(PROGRAM_CMD)
#
# make teensy = Download the hex file to the device, using teensy_loader_cli.
# (must have teensy_loader_cli installed).
#
# make dfu = Download the hex file to the device, using dfu-programmer (must
# have dfu-programmer installed).
#
# make flip = Download the hex file to the device, using Atmel FLIP (must
# have Atmel FLIP installed).
#
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
# (must have dfu-programmer installed).
#
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
# (must have Atmel FLIP installed).
#
# make debug = Start either simulavr or avarice as specified for debugging,
# with avr-gdb or avr-insight as the front end for debugging.
#
# make filename.s = Just compile filename.c into the assembler code only.
#
# make filename.i = Create a preprocessed source file for use in submitting
# bug reports to the GCC project.
#
# To rebuild project do "make clean" then "make all".
#----------------------------------------------------------------------------
# Target file name (without extension).
TARGET = clueboard2
# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core
# Directory keyboard dependent files exist
TARGET_DIR = .
# # project specific files
SRC = clueboard2.c led.c
ifdef KEYMAP
SRC := keymaps/keymap_$(KEYMAP).c $(SRC)
else
SRC := keymaps/keymap_default.c $(SRC)
endif
CONFIG_H = config.h
# MCU name
#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency in Hz. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
#
# This will be an integer division of F_USB below, as it is sourced by
# F_USB after it has run through any CPU prescalers. Note that this value
# does not *change* the processor frequency - it should merely be updated to
# reflect the processor speed set externally so that the code can use accurate
# software delays.
F_CPU = 16000000
#
# LUFA specific
#
# Target architecture (see library "Board Types" documentation).
ARCH = AVR8
# Input clock frequency.
# This will define a symbol, F_USB, in all source code files equal to the
# input clock frequency (before any prescaling is performed) in Hz. This value may
# differ from F_CPU if prescaling is used on the latter, and is required as the
# raw input clock is fed directly to the PLL sections of the AVR for high speed
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
# at the end, this will be done automatically to create a 32-bit value in your
# source code.
#
# If no clock division is performed on the input clock inside the AVR (via the
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Boot Section Size in *bytes*
# Teensy halfKay 512
# Teensy++ halfKay 1024
# Atmel DFU loader 4096
# LUFA bootloader 4096
# USBaspLoader 2048
OPT_DEFS += -DBOOTLOADER_SIZE=4096
# Build Options
# comment out to disable the options.
#
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality (+4870)
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality (+1150)
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
#ifdef BACKLIGHT_ENABLE
SRC := backlight.c $(SRC)
#endif
# Optimize size but this may cause error "relocation truncated to fit"
#EXTRALDFLAGS = -Wl,--relax
# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)
include $(TOP_DIR)/quantum/quantum.mk

@ -0,0 +1,41 @@
#include <avr/io.h>
#include "backlight.h"
#include "print.h"
/* Clueboard 2.0 LED locations:
*
* Capslock: B4, pull high to turn on
* LCtrl: Shared with Capslock, DO NOT INSTALL LED'S IN BOTH
* Page Up: B7, pull high to turn on
* Escape: D6, pull high to turn on
* Arrows: D4, pull high to turn on
*/
void init_backlight_pin(void) {
print("init_backlight_pin()\n");
// Set our LED pins as output
DDRD |= (1<<6); // Esc
DDRB |= (1<<7); // Page Up
DDRD |= (1<<4); // Arrows
// Set our LED pins low
PORTD &= ~(1<<6); // Esc
PORTB &= ~(1<<7); // Page Up
PORTD &= ~(1<<4); // Arrows
}
void backlight_set(uint8_t level) {
if ( level == 0 ) {
// Turn off light
PORTD |= (1<<6); // Esc
PORTB |= (1<<7); // Page Up
PORTD |= (1<<4); // Arrows
} else {
// Turn on light
PORTD &= ~(1<<6); // Esc
PORTB &= ~(1<<7); // Page Up
PORTD &= ~(1<<4); // Arrows
}
}

@ -0,0 +1,44 @@
#include "clueboard2.h"
#ifdef BACKLIGHT_ENABLE
#include "backlight.h"
#endif
__attribute__ ((weak))
void matrix_init_user(void) {
// leave these blank
};
__attribute__ ((weak))
void matrix_scan_user(void) {
// leave these blank
};
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
if (matrix_init_user) {
(*matrix_init_user)();
}
led_init_ports();
#ifdef BACKLIGHT_ENABLE
init_backlight_pin();
#endif
#ifdef RGBLIGHT_ENABLE
rgblight_init();
#endif
// JTAG disable for PORT F. write JTD bit twice within four cycles.
MCUCR |= (1<<JTD);
MCUCR |= (1<<JTD);
};
void matrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)
if (matrix_scan_user) {
(*matrix_scan_user)();
}
};

@ -0,0 +1,57 @@
#ifndef CLUEBOARD2_H
#define CLUEBOARD2_H
#include "matrix.h"
#include "keymap_common.h"
#include <stddef.h>
/* Clueboard matrix layout
* ,-----------------------------------------------------------. ,---.
* | 00| 01| 02| 03| 04| 05| 06| 07| 50| 51| 52| 53| 54| 55| 56| | 57|
* |-----------------------------------------------------------| |---|
* | 10| 11| 12| 13| 14| 15| 16| 17| 60| 61| 62| 63| 64| 65| | 67|
* |-----------------------------------------------------------| `---'
* | 20| 21| 22| 23| 24| 25| 26| 27| 70| 71| 72| 73| 74| 75|
* |------------------------------------------------------------.
* | 30| 31| 32| 33| 34| 35| 36| 37| 80| 81| 82| 83| 84| 85|86|
* |------------------------------------------------------------------.
* | 40| 41| 42| 43| 45| 46| 90| 91| 92| 93| 94| 95| 96|
* `------------------------------------------------------------------'
* ,-----------------------------------------------------------. ,---.
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Yen| BS| |Ins|
* |-----------------------------------------------------------| |---|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|
* |-----------------------------------------------------------| `---'
* |Caps | A| S| D| F| G| H| J| k| L| ;| '| # | Ent|
* |--------------------------------------------------------------.
* |Shift| \| Z| X| C| V| B| N| M| ,| .| /| \|Shift| Up|
* |------------------------------------------------------------------.
* |Ctrl|Alt|Gui |MHen| Space| Space|Henk|Gui |Ctrl| Fn|Left|Down|Rgt|
* `------------------------------------------------------------------'
*/
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
#define KEYMAP( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k55, k56, k57, \
k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k74, k75, \
k30, k31, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k84, k85, k86, \
k40, k41, k42, k43, k45, k46, k90, k92, k93, k94, k95, k96, k97 \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07 }, \
{ k10, k11, k12, k13, k14, k15, k16, k17 }, \
{ k20, k21, k22, k23, k24, k25, k26, k27 }, \
{ k30, k31, k32, k33, k34, k35, k36, k37 }, \
{ k40, k41, k42, k43, KC_NO, k45, k46, KC_NO }, \
{ k50, k51, k52, k53, k54, k55, k56, k57 }, \
{ k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
{ k70, k71, k72, k73, k74, k75, KC_NO, KC_NO }, \
{ k80, k81, k82, k83, k84, k85, k86, KC_NO }, \
{ k90, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
void matrix_init_user(void);
void matrix_scan_user(void);
#endif

@ -0,0 +1,100 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CONFIG_H
#define CONFIG_H
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xC1ED
#define PRODUCT_ID 0x2320
#define DEVICE_VER 0x0001
#define MANUFACTURER Clueboard
#define PRODUCT Clueboard with RGB Underlighting
#define DESCRIPTION QMK keyboard firmware for Clueboard
/* key matrix size */
#define MATRIX_ROWS 10
#define MATRIX_COLS 8
// COLS: Left to right, ROWS: Top to bottom
/* Column pin configuration
* col: 0 1 2 3 4 5 6 7
* pin: F0 F1 F4 F5 F6 F7 E6 B1
*/
#define COLS (int []){ F0, F1, F4, F5, F6, F7, E6, B1 }
/* Row pin configuration
* row: 0 1 2 3 4 5 6 7 8 9
* pin: B2 C7 C6 B6 B5 B0 B3 D5 D3 D2
*/
#define ROWS (int []){ B2, C7, C6, B6, B5, B0, B3, D5, D3, D2 }
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/* key combination for command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
/* Backlight configuration
*/
#define BACKLIGHT_LEVELS 1
/* Underlight configuration
*/
#define ws2812_PORTREG PORTD
#define ws2812_DDRREG DDRD
#define ws2812_pin 7
#define RGBLED_NUM 14 // Number of LEDs
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
#endif

@ -0,0 +1,183 @@
#include "clueboard2.h"
#ifdef RGBLIGHT_ENABLE
#include "rgblight.h"
#endif
// Used for SHIFT_ESC
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _BL 0
#define _FL 1
#define _RS 2
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BL: (Base Layer) Default Layer
* ,--------------------------------------------------------------------------. ,----.
* |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| BS| |PGUP|
* |--------------------------------------------------------------------------| |----|
* | Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |PGDN|
* |--------------------------------------------------------------------------| `----'
* |Capslck| A| S| D| F| G| H| J| K| L| ;| '| # | Ent|
* |-----------------------------------------------------------------------------.
* |Shift| BS| Z| X| C| V| B| N| M| ,| .| /| BS|Shift| UP|
* |------------------------------------------------------------------------|----|----.
* | Ctrl| Gui| Alt| MHen| Space| Space| Hen| Alt| Ctrl| _FL|LEFT|DOWN|RGHT|
* `----------------------------------------------------------------------------------'
*/
[_BL] = KEYMAP(
F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
/* Keymap _FL: Function Layer
* ,--------------------------------------------------------------------------. ,----.
* | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN|
* |--------------------------------------------------------------------------| |----|
* | | | | | | | | |PScr|SLck|Paus| | | | |BLDE|
* |--------------------------------------------------------------------------| `----'
* | | | _RS| | | | | | | | | | | |
* |-----------------------------------------------------------------------------.
* | | | | | | | | | | | | | | |PGUP|
* |------------------------------------------------------------------------|----|----.
* | | | | | | | | | | _FL|HOME|PGDN| END|
* `----------------------------------------------------------------------------------'
*/
[_FL] = KEYMAP(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, BL_STEP, \
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, MO(_RS),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_PGUP, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_HOME, KC_PGDN, KC_END),
/* Keymap _RS: Reset layer
* ,--------------------------------------------------------------------------. ,----.
* | | | | | | | | | | | | | | | | | |
* |--------------------------------------------------------------------------| |----|
* | | | | |RESET| | | | | | | | | | | |
* |--------------------------------------------------------------------------| `----'
* | | | _RS| | | | | | | | | | | |
* |-----------------------------------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |------------------------------------------------------------------------|----|----.
* | | | | | | | | | | _FL| | | |
* `----------------------------------------------------------------------------------'
*/
[_RS] = KEYMAP(
#ifdef RGBLIGHT_ENABLE
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, F(1), F(7), \
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(8), \
KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), F(5), \
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, F(2), F(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(4), F(6), F(3)),
#else
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,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, MO(_RS),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, MO(_FL), KC_TRNS, KC_TRNS, KC_TRNS),
#endif
};
enum function_id {
SHIFT_ESC,
#ifdef RGBLIGHT_ENABLE
RGBLED_TOGGLE,
RGBLED_STEP_MODE,
RGBLED_INCREASE_HUE,
RGBLED_DECREASE_HUE,
RGBLED_INCREASE_SAT,
RGBLED_DECREASE_SAT,
RGBLED_INCREASE_VAL,
RGBLED_DECREASE_VAL
#endif
};
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_FUNCTION(SHIFT_ESC),
#ifdef RGBLIGHT_ENABLE
[1] = ACTION_FUNCTION(RGBLED_TOGGLE),
[2] = ACTION_FUNCTION(RGBLED_STEP_MODE),
[3] = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
[4] = ACTION_FUNCTION(RGBLED_DECREASE_HUE),
[5] = ACTION_FUNCTION(RGBLED_INCREASE_SAT),
[6] = ACTION_FUNCTION(RGBLED_DECREASE_SAT),
[7] = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
[8] = ACTION_FUNCTION(RGBLED_DECREASE_VAL),
#endif
};
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
static uint8_t shift_esc_shift_mask;
switch (id) {
case SHIFT_ESC:
shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
if (record->event.pressed) {
if (shift_esc_shift_mask) {
add_key(KC_GRV);
send_keyboard_report();
} else {
add_key(KC_ESC);
send_keyboard_report();
}
} else {
if (shift_esc_shift_mask) {
del_key(KC_GRV);
send_keyboard_report();
} else {
del_key(KC_ESC);
send_keyboard_report();
}
}
break;
//led operations
#ifdef RGBLIGHT_ENABLE
case RGBLED_TOGGLE:
if (record->event.pressed) {
rgblight_toggle();
}
break;
case RGBLED_INCREASE_HUE:
if (record->event.pressed) {
rgblight_increase_hue();
}
break;
case RGBLED_DECREASE_HUE:
if (record->event.pressed) {
rgblight_decrease_hue();
}
break;
case RGBLED_INCREASE_SAT:
if (record->event.pressed) {
rgblight_increase_sat();
}
break;
case RGBLED_DECREASE_SAT:
if (record->event.pressed) {
rgblight_decrease_sat();
}
break;
case RGBLED_INCREASE_VAL:
if (record->event.pressed) {
rgblight_increase_val();
}
break;
case RGBLED_DECREASE_VAL:
if (record->event.pressed) {
rgblight_decrease_val();
}
break;
case RGBLED_STEP_MODE:
if (record->event.pressed) {
rgblight_step();
}
break;
#endif
}
}

@ -0,0 +1,147 @@
#include "clueboard2.h"
#ifdef ENABLE_RGBLIGHT
#include "rgblight.h"
#endif
// Used for SHIFT_ESC
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _BL 0
#define _FL 1
#define _RS 2
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BL: (Base Layer) Default Layer
* ,--------------------------------------------------------------------------. ,----.
* | Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| ~| BS| |PgUp|
* |--------------------------------------------------------------------------| |----|
* | Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |PgDn|
* |--------------------------------------------------------------------------| `----'
* |Capslck| A| S| D| F| G| H| J| K| L| ;| '| # | Ent|
* |-----------------------------------------------------------------------------.
* |Shift| BS| Z| X| C| V| B| N| M| ,| .| /| BS|Shift| Up|
* |------------------------------------------------------------------------|----|----.
* | Ctrl| Alt| Gui| MHen| Space| Space| Hen| Gui| Alt| Ctrl|Left|Down|Rght|
* `----------------------------------------------------------------------------------'
*/
[_BL] = KEYMAP(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
MO(_FL), KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FL), KC_UP, \
KC_LCTL, KC_LALT, KC_LGUI,KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
/* Keymap _FL: Function Layer
* ,--------------------------------------------------------------------------. ,----.
* | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN|
* |--------------------------------------------------------------------------| |----|
* | | | | | | | | |PScr|SLck|Paus| | | | |BLDE|
* |--------------------------------------------------------------------------| `----'
* | | | _RS| | | | | | | | | | | |
* |-----------------------------------------------------------------------------.
* | | | | | | | | | | | | | | |PGUP|
* |------------------------------------------------------------------------|----|----.
* | | | | | | | | | | _FL|HOME|PGDN| END|
* `----------------------------------------------------------------------------------'
*/
[_FL] = KEYMAP(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, BL_STEP, \
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_PGUP, \
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_END),
/* Keymap _RS: Reset/Underlight layer
* ,--------------------------------------------------------------------------. ,----.
* | | | | | | | | | | | | | | | | | |
* |--------------------------------------------------------------------------| |----|
* | | | | |RESET| | | | | | | | | | | |
* |--------------------------------------------------------------------------| `----'
* | | | _RS| | | | | | | | | | | |
* |-----------------------------------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |------------------------------------------------------------------------|----|----.
* | | | | | | | | | | _FL| | | |
* `----------------------------------------------------------------------------------'
*/
[_RS] = KEYMAP(
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, F(0), F(6), \
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(7), \
KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), F(4), \
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, F(1), F(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(3), F(5), F(2)),
};
enum function_id {
RGBLED_TOGGLE,
RGBLED_STEP_MODE,
RGBLED_INCREASE_HUE,
RGBLED_DECREASE_HUE,
RGBLED_INCREASE_SAT,
RGBLED_DECREASE_SAT,
RGBLED_INCREASE_VAL,
RGBLED_DECREASE_VAL,
};
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_FUNCTION(RGBLED_TOGGLE),
[1] = ACTION_FUNCTION(RGBLED_STEP_MODE),
[2] = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
[3] = ACTION_FUNCTION(RGBLED_DECREASE_HUE),
[4] = ACTION_FUNCTION(RGBLED_INCREASE_SAT),
[5] = ACTION_FUNCTION(RGBLED_DECREASE_SAT),
[6] = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
[7] = ACTION_FUNCTION(RGBLED_DECREASE_VAL),
};
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
switch (id) {
case RGBLED_TOGGLE:
//led operations
if (record->event.pressed) {
rgblight_toggle();
}
break;
case RGBLED_INCREASE_HUE:
if (record->event.pressed) {
rgblight_increase_hue();
}
break;
case RGBLED_DECREASE_HUE:
if (record->event.pressed) {
rgblight_decrease_hue();
}
break;
case RGBLED_INCREASE_SAT:
if (record->event.pressed) {
rgblight_increase_sat();
}
break;
case RGBLED_DECREASE_SAT:
if (record->event.pressed) {
rgblight_decrease_sat();
}
break;
case RGBLED_INCREASE_VAL:
if (record->event.pressed) {
rgblight_increase_val();
}
break;
case RGBLED_DECREASE_VAL:
if (record->event.pressed) {
rgblight_decrease_val();
}
break;
case RGBLED_STEP_MODE:
if (record->event.pressed) {
rgblight_step();
}
break;
}
}

@ -0,0 +1,108 @@
#include "clueboard2.h"
// Used for SHIFT_ESC
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _BL 0
#define _FL 1
#define _RS 2
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BL: (Base Layer) Default Layer
* ,--------------------------------------------------------------------------. ,----.
* |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| BS| |PGUP|
* |--------------------------------------------------------------------------| |----|
* | Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |PGDN|
* |--------------------------------------------------------------------------| `----'
* |Capslck| A| S| D| F| G| H| J| K| L| ;| '| # | Ent|
* |-----------------------------------------------------------------------------.
* |Shift| BS| Z| X| C| V| B| N| M| ,| .| /| BS|Shift| UP|
* |------------------------------------------------------------------------|----|----.
* | Ctrl| Gui| Alt| MHen| Space| Space| Hen| Alt| Ctrl| _FL|LEFT|DOWN|RGHT|
* `----------------------------------------------------------------------------------'
*/
[_BL] = KEYMAP(
F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
KC_LSFT,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
KC_LCTL,KC_LALT,KC_LGUI,MO(_FL), KC_SPC, KC_SPC, MO(_FL), KC_RGUI, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
/* Keymap _FL: Function Layer
* ,--------------------------------------------------------------------------. ,----.
* | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN|
* |--------------------------------------------------------------------------| |----|
* | | | | | | | | |PScr|SLck|Paus| | | | |BLDE|
* |--------------------------------------------------------------------------| `----'
* | | | _RS| | | | | | | | | | | |
* |-----------------------------------------------------------------------------.
* | | | | | | | | | | | | | | |PGUP|
* |------------------------------------------------------------------------|----|----.
* | | | | | | | | | | _FL|HOME|PGDN| END|
* `----------------------------------------------------------------------------------'
*/
[_FL] = KEYMAP(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,KC_DEL, BL_STEP, \
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, \
KC_TRNS,KC_TRNS,MO(_RS),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_PGUP, \
KC_TRNS,KC_TRNS,KC_TRNS,MO(_FL), KC_TRNS,KC_TRNS, MO(_FL),KC_TRNS,KC_TRNS,MO(_FL),KC_HOME,KC_PGDN,KC_END),
/* Keymap _RS: Reset layer
* ,--------------------------------------------------------------------------. ,----.
* | | | | | | | | | | | | | | | | | |
* |--------------------------------------------------------------------------| |----|
* | | | | |RESET| | | | | | | | | | | |
* |--------------------------------------------------------------------------| `----'
* | | | _RS| | | | | | | | | | | |
* |-----------------------------------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |------------------------------------------------------------------------|----|----.
* | | | | | | | | | | _FL| | | |
* `----------------------------------------------------------------------------------'
*/
[_RS] = KEYMAP(
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,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, \
KC_TRNS,KC_TRNS,MO(_RS),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,MO(_FL),KC_TRNS, KC_TRNS, KC_TRNS),
};
enum function_id {
SHIFT_ESC,
};
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_FUNCTION(SHIFT_ESC),
};
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
static uint8_t shift_esc_shift_mask;
switch (id) {
case SHIFT_ESC:
shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
if (record->event.pressed) {
if (shift_esc_shift_mask) {
add_key(KC_GRV);
send_keyboard_report();
} else {
add_key(KC_ESC);
send_keyboard_report();
}
} else {
if (shift_esc_shift_mask) {
del_key(KC_GRV);
send_keyboard_report();
} else {
del_key(KC_ESC);
send_keyboard_report();
}
}
break;
}
}

@ -0,0 +1,36 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <avr/io.h>
#include "stdint.h"
#include "led.h"
void led_init_ports() {
// * Set our LED pins as output
DDRB |= (1<<4);
}
void led_set_kb(uint8_t usb_led) {
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
// Turn capslock on
PORTB |= (1<<4);
} else {
// Turn capslock off
PORTB &= ~(1<<4);
}
}

@ -0,0 +1,136 @@
#----------------------------------------------------------------------------
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF.
#
# make extcoff = Convert ELF to AVR Extended COFF.
#
# make program = Download the hex file to the device.
# Please customize your programmer settings(PROGRAM_CMD)
#
# make teensy = Download the hex file to the device, using teensy_loader_cli.
# (must have teensy_loader_cli installed).
#
# make dfu = Download the hex file to the device, using dfu-programmer (must
# have dfu-programmer installed).
#
# make flip = Download the hex file to the device, using Atmel FLIP (must
# have Atmel FLIP installed).
#
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
# (must have dfu-programmer installed).
#
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
# (must have Atmel FLIP installed).
#
# make debug = Start either simulavr or avarice as specified for debugging,
# with avr-gdb or avr-insight as the front end for debugging.
#
# make filename.s = Just compile filename.c into the assembler code only.
#
# make filename.i = Create a preprocessed source file for use in submitting
# bug reports to the GCC project.
#
# To rebuild project do "make clean" then "make all".
#----------------------------------------------------------------------------
# Target file name (without extension).
TARGET = cluepad
# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core
# Directory keyboard dependent files exist
TARGET_DIR = .
# # project specific files
SRC = cluepad.c backlight.c
ifdef KEYMAP
SRC := keymaps/keymap_$(KEYMAP).c $(SRC)
else
SRC := keymaps/keymap_default.c $(SRC)
endif
CONFIG_H = config.h
# MCU name
#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency in Hz. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
#
# This will be an integer division of F_USB below, as it is sourced by
# F_USB after it has run through any CPU prescalers. Note that this value
# does not *change* the processor frequency - it should merely be updated to
# reflect the processor speed set externally so that the code can use accurate
# software delays.
F_CPU = 16000000
#
# LUFA specific
#
# Target architecture (see library "Board Types" documentation).
ARCH = AVR8
# Input clock frequency.
# This will define a symbol, F_USB, in all source code files equal to the
# input clock frequency (before any prescaling is performed) in Hz. This value may
# differ from F_CPU if prescaling is used on the latter, and is required as the
# raw input clock is fed directly to the PLL sections of the AVR for high speed
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
# at the end, this will be done automatically to create a 32-bit value in your
# source code.
#
# If no clock division is performed on the input clock inside the AVR (via the
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Boot Section Size in *bytes*
# Teensy halfKay 512
# Teensy++ halfKay 1024
# Atmel DFU loader 4096
# LUFA bootloader 4096
# USBaspLoader 2048
OPT_DEFS += -DBOOTLOADER_SIZE=4096
# Build Options
# comment out to disable the options.
#
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
# MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
# EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
# CONSOLE_ENABLE = yes # Console for debug(+400)
# COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = yes # Enable numpad's backlight functionality
RGBLIGHT_ENABLE = yes
# MIDI_ENABLE = YES # MIDI controls
# UNICODE_ENABLE = YES # Unicode
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
# Optimize size but this may cause error "relocation truncated to fit"
#EXTRALDFLAGS = -Wl,--relax
# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)
include $(TOP_DIR)/quantum/quantum.mk

@ -0,0 +1,54 @@
#include <avr/io.h>
#include "backlight.h"
#include "led.h"
#include "print.h"
int pwm_level;
void led_set_kb(uint8_t usb_led)
{
print("led_set\n");
}
void init_backlight_pin(void)
{
// Set C7 to output
DDRC |= (1<<7);
// Initialize the timer
TC4H = 0x03;
OCR4C = 0xFF;
TCCR4A = 0b10000010;
TCCR4B = 0b00000001;
}
void backlight_set(uint8_t level)
{
// Determine the PWM level
switch (level)
{
case 0:
// 33%
pwm_level = 0x54;
break;
case 1:
// 66%
pwm_level = 0xA8;
break;
case 2:
// 100%
pwm_level = 0xFF;
break;
case 3:
// 0%
pwm_level = 0x00;
break;
default:
xprintf("Unknown level: %d\n", level);
}
// Write the PWM level to the timer
TC4H = pwm_level >> 8;
OCR4A = 0xFF & pwm_level;
}

@ -0,0 +1,39 @@
#include "cluepad.h"
__attribute__ ((weak))
void matrix_init_user(void) {
// leave these blank
};
__attribute__ ((weak))
void matrix_scan_user(void) {
// leave these blank
};
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
if (matrix_init_user) {
(*matrix_init_user)();
}
#ifdef BACKLIGHT_ENABLE
init_backlight_pin();
#endif
#ifdef RGBLIGHT_ENABLE
rgblight_init();
#endif
// JTAG disable for PORT F. write JTD bit twice within four cycles.
MCUCR |= (1<<JTD);
MCUCR |= (1<<JTD);
};
void matrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)
if (matrix_scan_user) {
(*matrix_scan_user)();
}
};

@ -0,0 +1,41 @@
#ifndef CLUEPAD_H
#define CLUEPAD_H
#include "matrix.h"
#include "keymap_common.h"
#include <stddef.h>
/* Cluepad matrix layout
* .-------------------.
* |NLCK| /| *| -|
* |-------------------|
* | 7| 8| 9| |
* |--------------| |
* | 4| 5| 6| +|
* |-------------------|
* | 1| 2| 3| |
* |--------------| |
* | 0| .| Ent|
* '-------------------'
*/
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
#define KEYMAP( \
k00, k01, k02, k03, \
k10, k11, k12, k13, \
k20, k21, k22, \
k30, k31, k32, k33, \
k40, k42 \
) { \
{ k00, k01, k02, k03, }, \
{ k10, k11, k12, k13, }, \
{ k20, k21, k22, KC_NO, }, \
{ k30, k31, k32, k33, }, \
{ k40, KC_NO, k42, KC_NO } \
}
void matrix_init_user(void);
void matrix_scan_user(void);
#endif

@ -0,0 +1,102 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CONFIG_H
#define CONFIG_H
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xC1ED
#define PRODUCT_ID 0x2312
#define DEVICE_VER 0x0001
#define MANUFACTURER Clueboard
#define PRODUCT Cluepad with RGB Underlighting
#define DESCRIPTION QMK keyboard firmware for Cluepad
/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 4
// COLS: Left to right, ROWS: Top to bottom
/* Column pin configuration
* col: 0 1 2 3
* pin: F4 E6 B1 D2
*/
#define COLS (int []){ F4, E6, B1, D2 }
/* Row pin configuration
* row: 0 1 2 3 4
* pin:
*/
#define ROWS (int []){ B0, D3, D5, D4, D6 }
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* Number of backlighting levels */
#define BACKLIGHT_LEVELS 3
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/* key combination for command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
/* Underlight configuration
*/
#define ws2812_PORTREG PORTF
#define ws2812_DDRREG DDRF
#define ws2812_pin 6
#define RGBLED_NUM 4 // Number of LEDs
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* Debug forcibly enabled */
#define ALWAYS_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
#endif

@ -0,0 +1,122 @@
#include "cluepad.h"
#include "backlight.h"
#include "rgblight.h"
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _BL 0
#define _FL 1
#define _RS 2
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BL: (Base Layer) Default Layer
* .-------------------.
* |NL F| /| *| -|
* |-------------------|
* | 7| 8| 9| |
* |--------------| |
* | 4| 5| 6| +|
* |-------------------|
* | 1| 2| 3| |
* |--------------| |
* | 0| .| Ent|
* '-------------------'
*/
[_BL] = KEYMAP(
LT(_FL, KC_NLCK), KC_PSLS, KC_PAST, KC_PMNS, \
KC_P7, KC_P8, KC_P9, KC_PPLS, \
KC_P4, KC_P5, KC_P6, \
KC_P1, KC_P2, KC_P3, KC_PENT, \
KC_P0, KC_PDOT),
/* Keymap _FL: Function Layer
* .-------------------.
* |NL F| | | Fn0|
* |-------------------|
* | | Fn4| | |
* |--------------| |
* | Fn3|BL_S| Fn2| Fn6|
* |-------------------|
* | | Fn5| | |
* |--------------| |
* | Fn1| | Fn7|
* '-------------------'
*/
[_FL] = KEYMAP(
LT(_FL, KC_NLCK), KC_TRNS, KC_TRNS, F(0), \
KC_TRNS, F(4), KC_TRNS, F(6), \
F(3), BL_STEP, F(2), \
KC_TRNS, F(5), KC_TRNS, F(7), \
F(1), KC_TRNS)
};
enum function_id {
RGBLED_TOGGLE,
RGBLED_STEP_MODE,
RGBLED_INCREASE_HUE,
RGBLED_DECREASE_HUE,
RGBLED_INCREASE_SAT,
RGBLED_DECREASE_SAT,
RGBLED_INCREASE_VAL,
RGBLED_DECREASE_VAL,
};
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_FUNCTION(RGBLED_TOGGLE),
[1] = ACTION_FUNCTION(RGBLED_STEP_MODE),
[2] = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
[3] = ACTION_FUNCTION(RGBLED_DECREASE_HUE),
[4] = ACTION_FUNCTION(RGBLED_INCREASE_SAT),
[5] = ACTION_FUNCTION(RGBLED_DECREASE_SAT),
[6] = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
[7] = ACTION_FUNCTION(RGBLED_DECREASE_VAL),
};
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
switch (id) {
case RGBLED_TOGGLE:
if (record->event.pressed) {
rgblight_toggle();
}
break;
case RGBLED_INCREASE_HUE:
if (record->event.pressed) {
rgblight_increase_hue();
}
break;
case RGBLED_DECREASE_HUE:
if (record->event.pressed) {
rgblight_decrease_hue();
}
break;
case RGBLED_INCREASE_SAT:
if (record->event.pressed) {
rgblight_increase_sat();
}
break;
case RGBLED_DECREASE_SAT:
if (record->event.pressed) {
rgblight_decrease_sat();
}
break;
case RGBLED_INCREASE_VAL:
if (record->event.pressed) {
rgblight_increase_val();
}
break;
case RGBLED_DECREASE_VAL:
if (record->event.pressed) {
rgblight_decrease_val();
}
break;
case RGBLED_STEP_MODE:
if (record->event.pressed) {
rgblight_step();
}
break;
}
}

@ -7,6 +7,9 @@
#define SYMB 1 // symbols
#define MDIA 2 // media keys
#define LSFTO M(0) // Left shift, open parens when tapped
#define RSFTC M(1) // Right shift, close parens when tapped
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
@ -17,9 +20,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | BkSp | A | S | D | F | G |------| |------| H | Alt/J| K | L |; / L2| LGui/' |
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
* | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
* |LShift/(|Z/Ctrl| X | C | V | B | [ | | ] | N | M | , | . |//Ctrl|RShift/)|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
* |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | - |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | App | LGui | | Alt |Ctrl/Esc|
@ -36,18 +39,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
KC_BSPC, 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),
LSFTO, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_LBRC),
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT,
ALT_T(KC_APP), KC_LGUI,
KC_HOME,
KC_SPC,KC_FN1,KC_END,
KC_SPC,KC_FN1,KC_END,
// right hand
KC_RGHT, KC_6,KC_7, KC_8, KC_9, KC_0, KC_MINS,
TG(SYMB), KC_Y,KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_H,ALT_T(KC_J),KC_K, KC_L, LT(MDIA,KC_SCLN),GUI_T(KC_QUOT),
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,
KC_LALT, CTL_T(KC_ESC),
KC_RGHT, KC_6,KC_7, KC_8, KC_9, KC_0, KC_MINS,
TG(SYMB), KC_Y,KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_H,ALT_T(KC_J),KC_K, KC_L, LT(MDIA,KC_SCLN),GUI_T(KC_QUOT),
MEH_T(KC_RBRC),KC_N,KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), RSFTC,
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_MINS,
KC_LALT, CTL_T(KC_ESC),
KC_PGUP,
KC_PGDN,LT(SYMB, KC_TAB), KC_ENT
),
@ -140,17 +143,37 @@ const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
};
static uint16_t key_timer;
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);
case 0: {
if (record->event.pressed) {
key_timer = timer_read(); // if the key is being pressed, we start the timer.
register_code(KC_LSFT); // we're now holding down Shift.
} else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down").
if (timer_elapsed(key_timer) < 70) { // the threshhold we pick for counting something as a tap.
register_code(KC_9); // sending 9 while Shift is held down gives us an opening paren
unregister_code(KC_9); // now let's let go of that key
}
unregister_code(KC_LSFT); // let's release the Shift key now.
}
break;
}
case 1: {
if (record->event.pressed) {
key_timer = timer_read(); // Now we're doing the same thing, only for the right shift/close paren key
register_code(KC_RSFT);
} else {
if (timer_elapsed(key_timer) < 70) {
register_code(KC_0);
unregister_code(KC_0);
}
unregister_code(KC_RSFT);
}
break;
}
break;
}
return MACRO_NONE;
};
@ -183,3 +206,5 @@ void matrix_scan_user(void) {
}
};

@ -4,6 +4,15 @@ This is my personal layout which I use to test out ideas which may or may not ma
Changelog:
## Apr 29, 2016:
* Tweaks the Hyper and Meh key to send brackets when tapped
* Turns bottom-right key into a minus/underscore (easy to reach with the right pinky)
## Apr 25, 2016:
* Made it so that the right and left Shift keys send opening and closing parens ( ) when tapped
## Feb 11, 2016:
* Updated ASCII legend for thumb clusters

@ -2,29 +2,31 @@
#include "led.h"
#include "debug.h"
#include "action_layer.h"
#define BASE 0 // default layer
#define LOCK 1 // layer lock keys
#define SYMB_MO 2 // symbols momentary layer
#define SYMB_TG 3 // symbols lock layer
#define SYMB_XX 4 // symbols exit layer
#define MDIA_MO 5 // media momentary layer
#define MDIA_TG 6 // media lock layer
#define MDIA_XX 7 // media exit layer
#define UNLOCK 8 // clear to base layer
#include "action_util.h"
#define BASE 0 // default layer
#define LOCK 1 // shift-lock layer
#define SYMB_SH 2 // symbols shift layer
#define SYMB_LK 3 // symbols lock layer
#define SYMB_UN 4 // symbols unlock layer
#define MDIA_SH 5 // media shift layer
#define MDIA_LK 6 // media lock layer
#define MDIA_UN 7 // media unlock layer
#define UNLOCK 8 // clear to base layer
/*
* Ordinary Ergodox EZ keyboard layout, v3
* The Ordinary Layout for the Ergodox EZ keyboard, v3.1
* modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
* Details: http://nicholas.rinard.us/2016/03/ergodox-ez-layout.html
* Details: readme.md
* https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
/* Keymap 0: Base Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | LOCK Grv | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | = LOCK |
* | LOCK `~ | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | = LOCK |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ Media |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
@ -32,8 +34,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |-----------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+-----------|
* | LShift | Z | X | C | V | B | -Tab | | | N | M | , | . | / | RShift |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
* |LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh |RCtrl |
* `----------------------------------' `----------------------------------'
* | LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh | RCtrl |
* `-----------------------------------' `-----------------------------------'
* ,-------------. ,-------------.
* | Home | End | | Left | Right|
* ,------|------|------| |------+------+------.
@ -44,20 +46,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[BASE] = KEYMAP(
// left hand
LT(LOCK, KC_GRV),KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_ESC
,LT(MDIA_MO, KC_TAB),KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC
,MO(SYMB_MO) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G
,KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB)
,KC_LCTL ,MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI
LT(LOCK, KC_GRV) ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_ESC
,LT(MDIA_SH, KC_TAB),KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC
,MO(SYMB_SH) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G
,KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB)
,KC_LCTL ,MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI
,KC_HOME,KC_END
,KC_PGUP
,KC_BSPC,KC_DEL ,KC_PGDN
,KC_HOME,KC_END
,KC_PGUP
,KC_BSPC,KC_DEL ,KC_PGDN
// right hand
,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,LT(LOCK, KC_EQL)
,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,LT(MDIA_MO, KC_BSLS)
,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,LT(SYMB_MO, KC_QUOT)
,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,LT(MDIA_SH, KC_BSLS)
,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,LT(SYMB_SH, KC_QUOT)
,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,KC_RSFT
,KC_RGUI,KC_RALT,ALL_T(KC_NO),MEH_T(KC_NO),KC_RCTL
@ -68,59 +70,59 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 1: Layer Lock Keys
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | | Esc | | | | | | | | | | | | | |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | Media LOCK| | | | | | | | | | | | | | Media LOCK|
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* |Symbol LOCK| | | | | |------| |------| | | | | |Symbol LOCK|
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | Caps LOCK| | | | | | | | | | | | | | Caps LOCK|
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
* ,-------------------------------------------------------. ,-------------------------------------------------------.
* | | Esc | | | | | | | | | | | | Bspc | |
* |-------------+------+------+------+------+-------------| |------+------+------+------+------+------+-------------|
* | Media LOCK | | | | | | | | | | | | | | Media LOCK |
* |-------------+------+------+------+------+------| | | |------+------+------+------+------+-------------|
* | Symbol LOCK | | | | | |------| |------| | | | | | Symbol LOCK |
* |-------------+------+------+------+------+------| | | |------+------+------+------+------+-------------|
* | Caps LOCK | | | | | | | | | | | | | | Caps LOCK |
* `-------------+------+------+------+------+-------------' `-------------+------+------+------+------+-------------'
* | | | | | | | | | | | |
* `------------------------------------' `------------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
[LOCK] = KEYMAP(
// left hand
KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_FN3 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_FN2 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_CAPS ,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_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_FN3 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_FN2 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_CAPS ,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
// 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_FN3
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN2
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_BSPC ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN3
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN2
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS
,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
),
/* Keymap 2: Symbol Momentary Layer
/* Keymap 2: Symbol Shift Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | |
* | LOCK | F1 | F2 | F3 | F4 | F5 | | | - | F6 | F7 | F8 | F9 | F10 | LOCK |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | Media | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | Media |
* | Media | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | Media |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | Symbol | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | Symbol |
* | Symbol | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | Symbol |
* |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------|
* | Shift | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | Shift |
* | LShift | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | RShift |
* `-----------+------+------+------+------+-------------' `------------+------+------+------+------+------------'
* | | | | | | | 0 | . | = | + | Entr |
* `----------------------------------' `----------------------------------'
@ -132,22 +134,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | Down | | PgDn | | |
* `--------------------' `--------------------'
*/
[SYMB_MO] = KEYMAP(
[SYMB_SH] = KEYMAP(
// left hand
KC_FN2 ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_TRNS
,MO(MDIA_MO) ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
,MO(SYMB_MO) ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV
,MO(MDIA_SH) ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
,MO(SYMB_SH) ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV
,KC_LSFT ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_LEFT ,KC_RGHT
,KC_UP
,KC_SPC ,KC_ENT ,KC_DOWN
// right hand
,KC_TRNS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_FN2
,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,MO(MDIA_MO)
,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,MO(SYMB_MO)
,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_FN2
,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,MO(MDIA_SH)
,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,MO(SYMB_SH)
,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_RSFT
,KC_0 ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT
,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT)
,KC_HOME ,KC_END
,KC_PGUP
,KC_PGDN ,KC_BSPC ,KC_DEL
@ -156,13 +158,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 3: Symbol Lock Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | Lock | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | Lock |
* | LOCK | F1 | F2 | F3 | F4 | F5 | | | - | F6 | F7 | F8 | F9 | F10 | LOCK |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | Media | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | Media |
* | Media | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | Media |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | |
* | Symbol | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | Symbol |
* |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------|
* | Shift | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | Shift |
* | LShift | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | RShift |
* `-----------+------+------+------+------+-------------' `------------+------+------+------+------+------------'
* | | | | | | | 0 | . | = | + | Entr |
* `----------------------------------' `----------------------------------'
@ -174,22 +176,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | Down | | PgDn | | |
* `--------------------' `--------------------'
*/
[SYMB_TG] = KEYMAP( // layer 3 : return key for symbol lock layer
[SYMB_LK] = KEYMAP(
// left hand
MO(SYMB_XX) ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_TRNS
,MO(MDIA_MO) ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
,MO(UNLOCK) ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV
,KC_LSFT ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_LEFT ,KC_RGHT
,KC_UP
,KC_SPC ,KC_ENT ,KC_DOWN
MO(SYMB_UN) ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_TRNS
,MO(MDIA_SH) ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
,MO(UNLOCK) ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV
,KC_LSFT ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_LEFT ,KC_RGHT
,KC_UP
,KC_SPC ,KC_ENT ,KC_DOWN
// right hand
,KC_TRNS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,MO(SYMB_XX)
,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,MO(MDIA_MO)
,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,MO(SYMB_UN)
,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,MO(MDIA_SH)
,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,MO(UNLOCK)
,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_RSFT
,KC_0 ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT
,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT)
,KC_HOME ,KC_END
,KC_PGUP
,KC_PGDN ,KC_BSPC ,KC_DEL
@ -197,58 +199,58 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 4: Symbol Unlock Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | | Esc | | | | | | | | | | | | | |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | Unlock | | | | | | | | | | | | | | Unlock |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | | | | | |------| |------| | | | | | |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | Caps LOCK | | | | | | | | | | | | | | Caps LOCK |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
* ,------------------------------------------------------. ,------------------------------------------------------.
* | | Esc | | | | | | | | | | | | Bspc | |
* |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------|
* | Media LOCK | | | | | | | | | | | | | | Media LOCK |
* |------------+------+------+------+------+------| | | |------+------+------+------+------+------------|
* | UNLOCK | | | | | |------| |------| | | | | | UNLOCK |
* |------------+------+------+------+------+------| | | |------+------+------+------+------+------------|
* | Caps LOCK | | | | | | | | | | | | | | Caps LOCK |
* `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------'
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
[SYMB_XX] = KEYMAP(
[SYMB_UN] = KEYMAP(
// left hand
KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,TG(MDIA_TG) ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_FN1 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_CAPS ,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
// 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 ,TG(MDIA_TG)
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS
,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS
),
/* Keymap 5: Media Momentary Layer
KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,TG(MDIA_LK) ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_FN1 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_CAPS ,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
// right hand
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_BSPC ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,TG(MDIA_LK)
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS
,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS
),
/* Keymap 5: Media Shift Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | | F11 | F12 | F13 | F14 | F15 | | | | F16 | F17 | F18 | F19 | F20 | |
* | LOCK | F11 | F12 | F13 | F14 | F15 | | | | F16 | F17 | F18 | F19 | F20 | LOCK |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | |ShutDn| | MsUp | | |ScrlUp| |ScrlUp|PrtScr| Home | Up | PgUp | Mail | |
* | Media |ShutDn|LClick| MsUp |RClick|Vol Up|ScrlUp| |ScrlUp|PrtScr| Home | Up | PgUp | Mail | Media |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | Sleep|MsLeft|MsDown|MsRght| |------| |------|NumLok| Left | Down | Right|MyComp| |
* | Symbol | Sleep|MsLeft|MsDown|MsRght|Vol Dn|------| |------|NumLok| Left | Down | Right|MyComp| Symbol |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | | |MsDown| | |ScrlDn| |ScrlDn| | End | Down | PgDn | | |
* | LShift | | |MsDown| | Mute |ScrlDn| |ScrlDn| | End | Down | PgDn | | RShift |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
* | Mute |Vol Dn|Vol Up| Lclk | Rclk | |Insert|Delete| | | |
* | LCtrl| Meh |Hyper | LAlt | LGui | |Insert|Delete| Hyper| LAlt | LGui |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Stop |Refrsh| | Prev | Next |
@ -258,22 +260,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | Home | |VolDn | | Pause|
* `--------------------' `--------------------'
*/
[MDIA_MO] = KEYMAP(
[MDIA_SH] = KEYMAP(
// left hand
KC_FN3 ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_TRNS
,MO(MDIA_MO) ,KC_POWER,KC_TRNS ,KC_MS_U ,KC_TRNS ,KC_TRNS ,KC_WH_U
,MO(SYMB_MO) ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_TRNS
,KC_LSFT ,KC_TRNS ,KC_TRNS ,KC_MS_D ,KC_TRNS ,KC_TRNS ,KC_WH_D
,KC_MUTE ,KC_VOLD ,KC_VOLU ,KC_BTN1 ,KC_BTN2
,KC_WSTP ,KC_WREF
,KC_WSCH
,KC_WBAK ,KC_TRNS ,KC_WHOM
KC_FN3 ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_NO
,MO(MDIA_SH) ,KC_POWER ,KC_BTN1 ,KC_MS_U ,KC_BTN2 ,KC_VOLU ,KC_WH_U
,MO(SYMB_SH) ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD
,KC_LSFT ,KC_NO ,KC_NO ,KC_MS_D ,KC_NO ,KC_MUTE ,KC_WH_D
,KC_LCTL ,MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI
,KC_WSTP ,KC_WREF
,KC_WSCH
,KC_WBAK ,KC_NO ,KC_WHOM
// right hand
,KC_TRNS ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_FN3
,KC_WH_U ,KC_PSCR ,KC_HOME,KC_UP ,KC_PGUP ,KC_MAIL ,MO(MDIA_MO)
,KC_NLCK ,KC_LEFT,KC_DOWN ,KC_RIGHT,KC_MYCM ,MO(SYMB_MO)
,KC_WH_D ,KC_TRNS ,KC_END ,KC_DOWN ,KC_PGDN ,KC_TRNS ,KC_RSFT
,KC_INS ,KC_DEL ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_FN3
,KC_WH_U ,KC_PSCR ,KC_HOME,KC_UP ,KC_PGUP ,KC_MAIL ,MO(MDIA_SH)
,KC_NLCK ,KC_LEFT,KC_DOWN ,KC_RIGHT,KC_MYCM ,MO(SYMB_SH)
,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_RSFT
,GUI_T(KC_INS),ALT_T(KC_DEL),ALL_T(KC_NO),MEH_T(KC_NO),KC_RCTL
,KC_MPRV ,KC_MNXT
,KC_VOLU
,KC_VOLD ,KC_MSTP ,KC_MPLY
@ -282,15 +284,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 6: Media Lock Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | | F11 | F12 | F13 | F14 | F15 | | | | F16 | F17 | F18 | F19 | F20 | |
* | LOCK | F11 | F12 | F13 | F14 | F15 | | | | F16 | F17 | F18 | F19 | F20 | LOCK |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | |ShutDn| | MsUp | | |ScrlUp| |ScrlUp|PrtScr| Home | Up | PgUp | Mail | |
* | Media |ShutDn|LClick| MsUp |RClick|Vol Up|ScrlUp| |ScrlUp|PrtScr| Home | Up | PgUp | Mail | Media |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | Sleep|MsLeft|MsDown|MsRght| |------| |------|NumLok| Left | Down | Right|MyComp| |
* | | Sleep|MsLeft|MsDown|MsRght|Vol Dn|------| |------|NumLok| Left | Down | Right|MyComp| |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | | |MsDown| | |ScrlDn| |ScrlDn| | End | Down | PgDn | | |
* | LShift | | |MsDown| | Mute |ScrlDn| |ScrlDn| | End | Down | PgDn | | RShift |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
* | Mute |Vol Dn|Vol Up| Lclk | Rclk | |Insert|Delete| | | |
* | LCtrl| Meh |Hyper | LAlt | LGui | |Insert|Delete| Hyper| LAlt | LGui |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Stop |Refrsh| | Prev | Next |
@ -300,22 +302,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | Home | |VolDn | | Pause|
* `--------------------' `--------------------'
*/
[MDIA_TG] = KEYMAP(
[MDIA_LK] = KEYMAP(
// left hand
MO(MDIA_XX) ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_TRNS
,MO(UNLOCK) ,KC_POWER,KC_TRNS ,KC_MS_U ,KC_TRNS ,KC_TRNS ,KC_WH_U
,KC_NO ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_TRNS
,KC_LSFT ,KC_TRNS ,KC_TRNS ,KC_MS_D ,KC_TRNS ,KC_TRNS ,KC_WH_D
,KC_MUTE ,KC_VOLD ,KC_VOLU ,KC_BTN1 ,KC_BTN2
MO(MDIA_UN),KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_NO
,MO(UNLOCK) ,KC_POWER ,KC_BTN1 ,KC_MS_U ,KC_BTN2 ,KC_VOLU ,KC_WH_U
,KC_NO ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD
,KC_LSFT ,KC_NO ,KC_NO ,KC_MS_D ,KC_NO ,KC_MUTE ,KC_WH_D
,KC_LCTL ,MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI
,KC_WSTP ,KC_WREF
,KC_WSCH
,KC_WBAK ,KC_TRNS ,KC_WHOM
,KC_WBAK ,KC_NO ,KC_WHOM
// right hand
,KC_TRNS ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,MO(MDIA_XX)
,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,MO(MDIA_UN)
,KC_WH_U ,KC_PSCR ,KC_HOME,KC_UP ,KC_PGUP ,KC_MAIL ,MO(UNLOCK)
,KC_NLCK ,KC_LEFT,KC_DOWN ,KC_RIGHT,KC_MYCM ,KC_NO
,KC_WH_D ,KC_TRNS ,KC_END ,KC_DOWN ,KC_PGDN ,KC_TRNS ,KC_RSFT
,KC_INS ,KC_DEL ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_RSFT
,GUI_T(KC_INS),ALT_T(KC_DEL),ALL_T(KC_NO),MEH_T(KC_NO),KC_RCTL
,KC_MPRV ,KC_MNXT
,KC_VOLU
,KC_VOLD ,KC_MSTP ,KC_MPLY
@ -324,9 +326,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 7: Media Unlock Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | | Esc | | | | | | | | | | | | | |
* | | Esc | | | | | | | | | | | | Bspc | |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | Unlock | | | | | | | | | | | | | | Unlock |
* | UNLOCK | | | | | | | | | | | | | | UNLOCK |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | | | | | |------| |------| | | | | | |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
@ -342,34 +344,34 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | |
* `--------------------' `--------------------'
*/
[MDIA_XX] = KEYMAP(
[MDIA_UN] = KEYMAP(
// left hand
KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_FN1 ,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_CAPS ,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_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_FN1 ,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_CAPS ,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
// 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_FN1
,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_CAPS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_BSPC ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1
,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_CAPS
,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
),
/* Keymap 8: Unlock Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | Unlock | | | | | | | | | | | | | | Unlock |
* | UNLOCK | | | | | | | | | | | | | | UNLOCK |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | | | | | | | | | | | | | | | |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
@ -389,22 +391,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[UNLOCK] = KEYMAP(
// left hand
KC_FN1 ,KC_ESC ,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_FN1 ,KC_ESC ,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
// right hand
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1
,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_FN1
,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
@ -413,9 +415,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_CLEAR(ON_PRESS) // FN1 - clear to base layer
,[2] = ACTION_LAYER_INVERT(SYMB_TG, ON_PRESS) // FN2 - toggle to Symbols on press
,[3] = ACTION_LAYER_INVERT(MDIA_TG, ON_PRESS) // FN3 - toggle to Media on press
[1] = ACTION_LAYER_CLEAR(ON_PRESS) // FN1 - clear to base layer
,[2] = ACTION_LAYER_INVERT(SYMB_LK, ON_PRESS) // FN2 - toggle to Symbols on press
,[3] = ACTION_LAYER_INVERT(MDIA_LK, ON_PRESS) // FN3 - toggle to Media on press
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
@ -440,31 +442,34 @@ void matrix_init_user(void) {
// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
uint8_t layer = biton32(layer_state);
// do not change lights for locking and unlocking
if(layer == UNLOCK || layer == LOCK || layer == SYMB_XX || layer == MDIA_XX) {
return;
// shift or caps lock turns on red light
if((keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT))) || (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK))) {
ergodox_right_led_1_on();
} else {
ergodox_right_led_1_off();
}
ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
// caps lock turns on red light
if(host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
ergodox_right_led_1_on();
// do not change lights while locking and unlocking
if(layer == LOCK || layer == SYMB_UN || layer == MDIA_UN || layer == UNLOCK) {
return;
}
// symbol lock turns on green light
if(layer == SYMB_MO || layer == SYMB_TG) {
//ergodox_board_led_off();
// symbol turns on green light
if(layer == SYMB_SH || layer == SYMB_LK) {
ergodox_right_led_2_on();
} else {
ergodox_right_led_2_off();
}
// media lock turns on blue light
if(layer == MDIA_MO || layer == MDIA_TG) {
// media turns on blue light
if(layer == MDIA_SH || layer == MDIA_LK) {
ergodox_right_led_3_on();
} else {
ergodox_right_led_3_off();
}
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 118 KiB

@ -3,25 +3,25 @@
[{y:-0.875,x:5.5},"F15",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc",a:7},"",{c:"#99de2a",a:4},"F16"],
[{y:-0.875,c:"#2277ff",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F11",{x:14.5},"F20",{c:"#2277ff",w:1.5},"\n\nShift\n\n\n\n\nLock"],
[{y:-0.375,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"],
[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1,c:"#ffb063",a:4},"Scroll\n\n\n\n\n\nUp",{x:8.5},"Home",{x:1},"Page\n\n\n\n\n\nUp"],
[{y:-0.875,x:5.5,c:"#cccccc",a:7},"",{c:"#ffb063",a:4,h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#e6e067"},"Print\n\n\n\n\n\nScreen"],
[{y:-0.875,x:2.5},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#ffb063"},"Home",{x:1},"Page\n\n\n\n\n\nUp"],
[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#e6e067"},"Print\n\n\n\n\n\nScreen"],
[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#e6e067",t:"#000000"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Mail",{c:"#000000",t:"#ff0000",w:1.5},"\n\nMedia\n\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#ff8500",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nLeft",{x:1},"Mouse\n\n\n\n\n\nRight",{x:8.5},"Cursor\n\n\n\n\n\nLeft",{x:1},"Cursor\n\n\n\n\n\nRight"],
[{y:-0.875,x:5.5,c:"#cccccc",a:7},"",{x:6.5,c:"#e6e067",a:4},"Num\n\n\n\n\n\nLock"],
[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nDown",{x:6.5},"Num\n\n\n\n\n\nLock"],
[{y:-0.875,c:"#cccccc",a:7,w:1.5},"",{c:"#e6e067",a:4},"Sleep",{x:14.5},"My\n\n\n\n\n\nComp",{c:"#cccccc",a:7,w:1.5},""],
[{y:-0.625,x:6.5,c:"#ffb063",a:4,h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"],
[{y:-0.75,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1,c:"#ffb063",a:4},"Scroll\n\n\n\n\n\nDown",{x:8.5},"End",{x:1},"Page\n\n\n\n\n\nDown"],
[{y:-0.875,x:5.5,c:"#cccccc",a:7},"",{x:6.5},""],
[{y:-0.875,c:"#2277ff",a:4,fa:[0,1,0,0,0,0,0],w:1.5},"Capitals\nShift\n\n\n\n\nShift",{c:"#cccccc",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,fa:[0,1,0,1],w:1.5},"\n\nCapitals\nShift\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#ff8500"},"Left\n\n\n\n\n\nClick",{x:10.5,c:"#ffb063"},"Delete"],
[{y:-0.875,x:2.5,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{x:1,c:"#ff8500"},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#ffb063"},"Insert",{x:1,c:"#cccccc",a:7},""],
[{y:-0.75,x:0.5,c:"#e6e067",a:4},"Mute","Vol\n\n\n\n\n\nDown",{x:14.5,c:"#cccccc",a:7},"",""],
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#cfc82b",a:4},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"],
[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1},"",{x:8.5,c:"#ffb063",a:4},"End",{x:1},"Page\n\n\n\n\n\nDown"],
[{y:-0.875,x:5.5,c:"#e6e067"},"Mute",{x:6.5,c:"#cccccc",a:7},""],
[{y:-0.875,c:"#2277ff",a:4,f2:1,w:1.5},"Capitals\nShift\n\n\n\n\nShift",{c:"#cccccc",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,fa:[0,1,0,1],w:1.5},"\n\nCapitals\nShift\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5,c:"#ffb063"},"Delete\n\n\nOption"],
[{y:-0.875,x:2.5,c:"#77aaff"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#ffb063"},"Insert\n\n\nCmd",{x:1,c:"#77aaff"},"Hyper"],
[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Crtl\n\n\nRCtrl"],
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ccbb00"},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"],
[{h:2},"< Web\n\n\nBrowser",{h:2},"Web >\n\n\nBrowser","Search\n\n\nBrowser"],
[{x:2},"Home\n\n\nBrowser"],
[{r:-30,rx:13,y:-1,x:-3},"Prev\n\n\nAudio\n\n\nTrack","Next\n\n\nAudio\n\n\nTrack"],
[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#cfc82b",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"],
[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ccbb00",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"],
[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nDown"]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 101 KiB

@ -1,27 +1,27 @@
[{x:3.5,c:"#99de2a"},"F3",{x:10.5},"F8"],
[{y:-0.875,x:2.5},"F2",{x:1},"F4",{x:8.5},"F7",{x:1},"F9"],
[{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc",a:7},"",{c:"#99de2a",a:4},"F6"],
[{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#bbddbb"},"_\n\n\n\n\n\n-",{c:"#99de2a"},"F6"],
[{y:-0.875,c:"#2277ff",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#2277ff",w:1.5},"\n\nShift\n\n\n\n\nLock"],
[{y:-0.375,x:3.5,c:"#c4e0bf"},"{",{x:10.5,c:"#89b087"},"8"],
[{y:-0.875,x:2.5,c:"#c4e0bf"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"],
[{y:-0.875,x:5.5,c:"#c4e0bf"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"],
[{y:-0.875,c:"#2277ff",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#c4e0bf"},"!",{x:14.5,c:"#89b087"},"/",{c:"#2277ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#c4e0bf"},"(",{x:10.5,c:"#89b087"},"5"],
[{y:-0.875,x:2.5,c:"#c4e0bf"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"],
[{y:-0.875,x:5.5,c:"#c4e0bf"},"`",{x:6.5},"/"],
[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#c4e0bf",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSymbols\n\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#bbddbb"},"{",{x:10.5,c:"#89b087"},"8"],
[{y:-0.875,x:2.5,c:"#bbddbb"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"],
[{y:-0.875,x:5.5,c:"#bbddbb"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"],
[{y:-0.875,c:"#2277ff",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#bbddbb"},"!",{x:14.5,c:"#89b087"},"/",{c:"#2277ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#bbddbb"},"(",{x:10.5,c:"#89b087"},"5"],
[{y:-0.875,x:2.5,c:"#bbddbb"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"],
[{y:-0.875,x:5.5,c:"#bbddbb"},"`",{x:6.5},"/"],
[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSymbols\n\n\n\n\nShift"],
[{y:-0.625,x:6.5,c:"#54d6de",t:"#000000",fa:[0,0,0,1],h:1.5},"Tab >\n\n\nTab",{x:4.5,h:1.5},"< Tab\n\n\nShift Tab"],
[{y:-0.75,x:3.5,c:"#c4e0bf"},"[",{x:10.5,c:"#89b087"},"2"],
[{y:-0.875,x:2.5,c:"#c4e0bf"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"],
[{y:-0.875,x:5.5,c:"#c4e0bf"},"~",{x:6.5},"\\"],
[{y:-0.875,c:"#2277ff",f2:1,w:1.5},"Capitals\nShift\n\n\n\n\nShift",{c:"#c4e0bf"},"%",{x:14.5,c:"#89b087"},"-",{c:"#2277ff",fa:[0,1,0,1],w:1.5},"\n\nCapitals\nShift\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#cccccc",a:7},"",{x:10.5,c:"#89b087",a:4},"."],
[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1},"",{x:8.5,c:"#89b087",a:4},"0",{x:1},"="],
[{y:-0.75,x:0.5,c:"#cccccc",a:7},"","",{x:14.5,c:"#89b087",a:4},"+","Enter"],
[{y:-0.75,x:3.5,c:"#bbddbb"},"[",{x:10.5,c:"#89b087"},"2"],
[{y:-0.875,x:2.5,c:"#bbddbb"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"],
[{y:-0.875,x:5.5,c:"#bbddbb"},"~",{x:6.5},"\\"],
[{y:-0.875,c:"#2277ff",fa:[0,1,0,1,0,0,1],w:1.5},"Capitals\nShift\n\n\n\n\nShift",{c:"#bbddbb"},"%",{x:14.5,c:"#89b087"},"-",{c:"#2277ff",w:1.5},"\n\nCapitals\nShift\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5,c:"#89b087"},".\n\n\nOption"],
[{y:-0.875,x:2.5,c:"#77aaff"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#89b087"},"0\n\n\nCmd",{x:1},"=\n\n\nHyper"],
[{y:-0.75,x:0.5,c:"#77aaff"},"Ctrl\n\n\nLCtrl","Meh",{x:14.5,c:"#89b087"},"+\n\n\nMeh","Enter\n\n\nCtrl"],
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#54d6de"},"Left","Right"],
[{h:2},"Space",{h:2},"Enter","Up"],
[{x:2},"Down"],
[{r:-30,rx:13,y:-1,x:-3},"Home","End"],
[{x:-3},"Page\n\n\n\n\n\nUp",{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete"],
[{x:-3},"Page\n\n\n\n\n\nDown"]
[{x:-3,f:3},"Page\n\n\n\n\n\nUp",{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete"],
[{x:-3,f:3},"Page\n\n\n\n\n\nDown"]

File diff suppressed because it is too large Load Diff

@ -18,7 +18,7 @@ no rights reserved, use for any purposes, credit me if you are a nice person
![Ordinary base layout](ordinary-base.png)
This layout puts the modifier keys along the bottom of the keyboard where they are on most keyboards. They are in the regular order, with the addition of Hyper and Meh keys. On the outside edges are the Shift keys. The traditional shift key is called Capitals Shift and it is in the normal location. Above that are Symbols Shift and Media Shift. Each Shift key momentarily switches the layout to that layer, and if you use the Shift Lock button you can lock the layout to that layer.
This layout puts the modifier keys along the bottom of the keyboard where they are on most keyboards. They are in the regular order, with the addition of Hyper and Meh keys. The modifier keys are all in the same place on all layers, although some layers also assign symbols on those buttons. On the outside edges are the Shift keys. The traditional shift key is called Capitals Shift and it is in the normal location. Above that are Symbols Shift and Media Shift. Each Shift key momentarily switches the layout to that layer, and if you use the Shift Lock button you can lock the layout to that layer.
Touch typists will also find tilde, tab, equals/plus, slash/pipe, and quote/double-quote sharing space on those Shift keys where they would probably be on a common keyboard. Other than the turquoise keys the only buttons which move to new locations are the Brackets and Dash and Escape. Most touch typists dont touch-type brackets or dash anyway so only Escape really requires retraining of muscle memory, and see below for the Special Escape Sequence.
@ -45,7 +45,7 @@ The symbol keys are mostly the same as on the default layout, which did a good j
The number pad area here, in green, includes all four arithmetic operations in the same order found on most number pads and features an Enter key. The keycodes emitted here are normal numeric keycodes, not the number-pad specific keycodes emitted by most number pads, because this layout does not use a Num Lock key to switch the buttons between numeric keycodes and navigational keycodes. See the explanation in The Media Layout section about navigation using these same buttons.
Finally, consider the turquoise text-nav keys. Here in the Symbols layer, these are *reversed* from the base layer, with most keys mirrored, but the Delete keys shifted to maintain the directional significance of their arrangement. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the yellow keys, and Enter is right where it should be.
Finally, consider the turquoise text-nav keys. Here in the Symbols layer, these are *reversed* from the base layer, with the keys either mirrored or shifted. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the turquoise keys, and Enter is right where it should be.
## The Media Layer ##
@ -55,6 +55,7 @@ Finally, consider the turquoise text-nav keys. Here in the Symbols layer, these
* The bright green keys are more F-keys
* The dark yellow keys signal Web and Audio applications
* The light yellow keys signal the operating system
* The uncolored keys do nothing in case you bump them by accident
![Ordinary media layout](ordinary-media.png)
@ -62,14 +63,18 @@ This layer was inspired by the Media layer on the Ergodox EZ but takes it farthe
Moreover, the orange keys on the right overlay the numberpad from the Symbols Layer, such that in the Media Layer the same keys can be used as if they were a number pad in navigational mode (Num Lock off). For instance, in traditional number pads the '3' key became 'Page Down', and so it is here. This means a user can do text navigation without moving either hand.
Alas, the yellow keys have at best spotty success with common software. Good luck with those but don't expect too much.
## Switching Between Layers ##
The three Shift keys correspond to three logical layers on top of the ever-present base layer, and are represented in the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active. Shift keys work in the expected way: press them and the keys shift to that layer; release them and the keys shift back to the base layer. The Ordinary Layout also features a Shift Lock key to keep a layer active indefinitely. Hold down the Shift Lock key then press any Shift key to lock to that layer. Or, hold down the Shift key and press the Shift Lock key; either way works. To revert to the base layer, use the Shift Lock key again in combination with the Shift key.
The three Shift keys correspond to three logical layers on top of the ever-present base layer, and are represented in the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active. Shift keys work in the expected way: press them and the keys shift to that layer; release them and the keys shift back to the base layer. The Ordinary Layout also features a Shift Lock key to keep a layer active indefinitely. Hold down the Shift Lock key then press any Shift key to lock to that layer. Or, hold down the Shift key and press the Shift Lock key; it works either way. To revert to the base layer, use the Shift Lock key again in combination with the Shift key.
This layout attempts to treat the Capitals Shift layer the same as the other two Shift layers, but internally they are different which causes some inconsistencies. For instance, it is possible to switch from any layer to any other layer, and to lock to any layer, *except* it is not possible to go from Media to Symbols. You must exit the Media layer before engaging the Symbols layer. Also, the Caps Lock feature must be triggered by first pressing the Shift Lock key then a Capitals Shift key; it doesn't work if you press the Shift key first (instead you get the secondary symbol associated with the Shift Lock button).
This layout attempts to treat the Capitals Shift layer the same as the other two Shift layers, but internally they are different which causes some inconsistencies. For instance, it is possible to switch from any layer to any other layer, and to lock to any layer, *except* it is not possible to go from Media to Symbols. You must exit the Media layer before engaging the Symbols layer. Also, the Caps Lock feature must be triggered by first pressing the Shift Lock key then a Capitals Shift key; it doesn't work if you press the Shift key first (instead you get the secondary symbol character associated with the Shift Lock button).
## Special Escape Sequence ##
## Special Escape & Backspace Sequences ##
In the Ordinary Layout, the most unsatisfying key location is the Escape key which rightly belongs segregated on its own way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one, in the top left corner, was assigned to the tilde button which is traditionally found in that location. The Escape key is important so it features prominently on the other top corner on the left side of the keyboard, and is always there in all layers. Nevertheless, alas, it isn't Ordinary to put the escape in that different corner!
In the Ordinary Layout, the most unsatisfying key location is the Escape key which rightly belongs segregated on its own way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one, in the top left corner, is home to the tilde (er, grave) which is commonly found there. The Escape key is important so it features prominently on the other top corner on the left side of the keyboard, and is always there in all layers. Nevertheless, alas, it isn't Ordinary to put the escape in that different corner!
That tilde key has a second function as the Shift Lock key and that makes possible a special feature. To make this layout as Ordinary as possible, the Escape key can *also* be accessed by pressing Shift Lock then the 1 button right next to it. This easy gesture is a way to partially maintain the ease of flicking your wrist to the left and tapping Escape. This gesture works in all layers.
Finally, because the special Escape sequence is so natural and useful, on the top right corner of the Ergodox EZ you can do the same gesture with the 0 key to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times. These special sequences should feel unremarkably mundane but might prove to be remarkably useful.

@ -1,413 +1,329 @@
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#include "keymap_extras/keymap_french.h"
#include "keymap_extras/keymap_neo2.h"
#include "keymap_extras/keymap_uk.h"
#include "keymap_extras/keymap_colemak.h"
#include "keymap_extras/keymap_french_osx.h"
#include "keymap_extras/keymap_nordic.h"
#include "keymap_extras/keymap_dvorak.h"
#include "keymap_extras/keymap_german.h"
#include "keymap_extras/keymap_norwegian.c"
#include "keymap_extras/keymap_fr_ch.h"
#include "keymap_extras/keymap_german_osx.h"
#include "keymap_extras/keymap_spanish.h"
#include "keymap_extras/keymap_bepo.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
#define MDIA 2 // media keys
#define SMLY 3 // media keys
#define NUMB 4 // number keys
#define EGOS 5 // Egoshooter layer
#define M_CTRL_CMDV 1
#define M_CTRL_CMDC 2
#define M_MEH_SH_ACUT 3
#define M_DE_OSX_PLUS_CTRLALT 12
#define M_DE_OSX_CIRC_CTRLCMD 13
#define M_TOGGLE_5 14
#define M_CTL_SFT_HASH 15
#define M_LGUI_SHFT 16
#define SM_SMILE 4
#define SM_SMIRK 5
#define SM_FROWN 6
#define SM_CRY 7
#define SM_KISS 8
#define SM_HEART 9
#define SM_LAUGH 10
#define SM_SAD 11
#define BASE 0
#define SYMB 1
#define MDIA 2
#define SMLY 3
#define NUMB 4
#define EGOS 5
#define M_CTRL_CMDV 0
#define M_CTRL_CMDC 1
#define M_MEH_SH_ACUT 2
#define M_LGUI_SHFT 3
#define M_CTL_SFT_HASH 4
#define M_DE_OSX_CIRC_CTRLCMD 5
#define M_DE_OSX_PLUS_CTRLALT 6
#define SM_SMILE 7
#define SM_SMIRK 8
#define SM_CRY 9
#define SM_SAD 10
#define SM_HEART 11
#define SM_LAUGH 12
#define SM_KISS 13
#define SM_FROWN 14
#define M_TOGGLE_5 15
//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,-----------------------------------------------------. ,--------------------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | 5 |CTL_SFT/#| |CTL_SFT/#| 6 | 7 | 8 | 9 | 0 | ß |
* |--------+------+------+------+------+----------------| |---------+------+------+------+------+------+--------|
* | TAB | Q | W | E | R | T | CMD | | CMD | Z | U | I | O | P | ü |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | LALT | A | S | D | F | G |---------| |---------| H | J | K | L | ö | ä/RALT|
* |--------+------+------+------+------+------| LALT | | RALT |------+------+------+------+------+--------|
* | LShift |Y/Ctrl| X | C | V | B | | | | N | M | , | . |-/Ctrl| RShift |
* `--------+------+------+------+------+----------------' `-------------+------+------+------+------+--------'
* |</L1| ^°/CTRL_CMD | +/CTRL_ALT | UP | DOWN| | Left | Right | CMD-SHFT| ALT-SHIFT | +/L1 |
* `------------------------------------------' `---------------------------------------------'
* ,-------------. ,---------------.
* |`/Meh | Media| | NUM | ´/Hyper |
* ,------|------|------| |------+--------+------.
* | | | Home | | PgUp | | |
* | Back-| Del |------| |------| Enter | Space|
* | Space| | 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_ESC, DE_OSX_1, DE_OSX_2, DE_OSX_3, DE_OSX_4, DE_OSX_5, M(M_CTL_SFT_HASH),
KC_TAB, DE_OSX_Q, DE_OSX_W, DE_OSX_E, DE_OSX_R, DE_OSX_T, KC_LGUI,
KC_LALT, DE_OSX_A, DE_OSX_S, DE_OSX_D, DE_OSX_F, DE_OSX_G,
KC_LSFT, CTL_T(DE_OSX_Y), DE_OSX_X, DE_OSX_C, DE_OSX_V, DE_OSX_B, KC_LALT,
LT(SYMB,DE_OSX_LESS), M(M_DE_OSX_CIRC_CTRLCMD), M(M_DE_OSX_PLUS_CTRLALT), KC_UP, KC_DOWN,
M(M_MEH_SH_ACUT), TG(MDIA),
KC_HOME,
KC_BSPC,KC_DEL, LT(SMLY,KC_END),
// right hand
M(M_CTL_SFT_HASH), DE_OSX_6, DE_OSX_7, DE_OSX_8, DE_OSX_9, DE_OSX_0, DE_OSX_SS,
KC_RGUI, DE_OSX_Z, DE_OSX_U, DE_OSX_I, DE_OSX_O, DE_OSX_P, DE_OSX_UE,
DE_OSX_H, DE_OSX_J, DE_OSX_K, DE_OSX_L, DE_OSX_OE, ALT_T(DE_OSX_AE),
KC_RALT, DE_OSX_N, DE_OSX_M, DE_OSX_COMM,DE_OSX_DOT, CTL_T(DE_OSX_MINS), KC_RSFT,
KC_LEFT, KC_RIGHT,LGUI(KC_LSFT),LALT(KC_LSFT), LT(SYMB,DE_OSX_PLUS),
TG(NUMB), ALL_T(DE_OSX_ACUT),
KC_PGUP,
KC_PGDN,KC_ENT, KC_SPC
),
/* Keymap 1: Symbol Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | L5 | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | < | > | ! | ? | | | | | \ | [ | ] | < | > | ! |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | \ | / | . |------| |------| / | ( | ) | { | } | # |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | ^ | % | | | ~ | | | | | | ~ | ^ | UP | | $ |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | ' | LEFT| DOWN | RIGHT | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | F13 | F12 |
* ,------|------|------| |------+------+------.
* | | | | | F14 | | |
* | | |------| |------| | |
* | | | | | F15 | | |
* `--------------------' `--------------------'
*/
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS,DE_OSX_LESS,DE_OSX_MORE,DE_OSX_EXLM,DE_OSX_QST, KC_TRNS,KC_TRNS,
KC_TRNS,DE_OSX_HASH,DE_OSX_DLR, DE_OSX_BSLS,DE_OSX_SLSH,KC_DOT,
KC_TRNS,KC_TRNS,DE_OSX_LESS,DE_OSX_PERC,DE_OSX_PIPE,DE_OSX_TILD,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,
KC_TRNS,
KC_TRNS,KC_DEL,KC_TRNS,
// right hand
M(M_TOGGLE_5), KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM,
DE_OSX_SLSH, DE_OSX_LPRN, DE_OSX_RPRN, LALT(KC_8), LALT(KC_9), DE_OSX_HASH,
KC_TRNS, DE_OSX_PIPE, DE_OSX_TILD, DE_OSX_CIRC, KC_UP, DE_OSX_MINS, LSFT(KC_4),
DE_OSX_QUOT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS,
KC_F13, KC_F12,
KC_F14,
KC_F15, KC_TRNS, KC_TRNS
),
/* Keymap 2: Media and mouse keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | Mute | | | | | | EGOS |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | Lclk | MsUp | Rclk | WlUp | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |MsLeft|MsDown|MsRght| WlDw |------| |------|VolUp | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | MClk | | | |VolDn | | Prev | Next | Up | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | | Left | Down | Right |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | |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_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D,
KC_TRNS, KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_R, KC_BTN3, 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_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_VOLD, KC_TRNS, KC_MPRV, KC_MNXT, KC_UP, KC_TRNS,
KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_WBAK
),
/* Keymap 3: Smiley layer
* making it easier to type smileys... tipp: on osx you can easily replace those smileys with the UTF-8 character using
* keyboard short commands...
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | :-) | ;-) | :-D | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | | | | | | | :-{ | :-( | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | |------| |------| <3 | :-* | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | | | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | | | | r|
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+--------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `----------------------'
*/
[SMLY] = KEYMAP(
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,
// right hand
M(SM_SMILE), M(SM_SMIRK), M(SM_LAUGH), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, M(SM_FROWN), M(SM_SAD), M(SM_CRY), KC_TRNS, KC_TRNS, KC_TRNS,
M(SM_HEART), M(SM_KISS), 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
),
//number pad
[NUMB] = KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, 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,
// 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, LSFT(KC_RBRC), KC_F12,
KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, DE_OSX_MINS,
KC_TRNS, LSFT(KC_6), KC_1, KC_2, KC_3, LSFT(KC_7), KC_TRNS,
KC_0,KC_DOT, KC_COMM, DE_OSX_EQL, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/* Keymap 3: Egoshooter layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | L5 | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | SHIFT | | | | | |------| |------| | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | | | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | CTRL | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | F1 | F2 | | | |
* ,------|------|------| |------+--------+------.
* | | | F3 | | | | |
* | SPACE| CTRL|------| |------| | |
* | | | F4 | | | | |
* `--------------------' `----------------------'
*/
[EGOS] = KEYMAP(
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_LSFT, 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_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_F1, KC_F2,
KC_F3,
KC_SPC, KC_LCTL, KC_F4,
// right hand
M(M_TOGGLE_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, 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
),
[BASE]=KEYMAP(
//left half
KC_ESC, DE_OSX_1, DE_OSX_2, DE_OSX_3, DE_OSX_4, DE_OSX_5, M(M_CTL_SFT_HASH),
KC_TAB, DE_OSX_Q, DE_OSX_W, DE_OSX_E, DE_OSX_R, DE_OSX_T, KC_LGUI,
KC_LALT, DE_OSX_A, DE_OSX_S, DE_OSX_D, DE_OSX_F, DE_OSX_G,
KC_LSFT, CTL_T(DE_OSX_Y), DE_OSX_X, DE_OSX_C, DE_OSX_V, DE_OSX_B, KC_LALT,
LT(SYMB,DE_OSX_LESS), M(M_DE_OSX_CIRC_CTRLCMD), M(M_DE_OSX_PLUS_CTRLALT), KC_UP, KC_DOWN,
M(M_MEH_SH_ACUT), TG(MDIA),
KC_HOME,
KC_BSPC, KC_DEL, LT(SMLY,KC_END),
//right half
M(M_CTL_SFT_HASH), DE_OSX_6, DE_OSX_7, DE_OSX_8, DE_OSX_9, DE_OSX_0, DE_OSX_SS,
KC_RGUI, DE_OSX_Z, DE_OSX_U, DE_OSX_I, DE_OSX_O, DE_OSX_P, DE_OSX_UE,
DE_OSX_H, DE_OSX_J, DE_OSX_K, DE_OSX_L, DE_OSX_OE, ALT_T(DE_OSX_AE),
KC_RALT, DE_OSX_N, DE_OSX_M, DE_OSX_COMM, DE_OSX_DOT, CTL_T(DE_OSX_MINS), KC_RSFT,
KC_LEFT, KC_RIGHT, LGUI(KC_LSFT), LALT(KC_LSFT), LT(SYMB,DE_OSX_PLUS),
TG(NUMB), ALL_T(DE_OSX_ACUT),
KC_PGUP,
KC_PGDN, KC_ENT, KC_SPC),
[SYMB]=KEYMAP(
//left half
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS, DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, DE_OSX_QST, KC_TRNS, KC_TRNS,
KC_TRNS, DE_OSX_HASH, DE_OSX_DLR, DE_OSX_BSLS, DE_OSX_SLSH, KC_DOT,
KC_TRNS, KC_TRNS, DE_OSX_LESS, DE_OSX_PERC, DE_OSX_PIPE, DE_OSX_TILD, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_DEL, KC_TRNS,
//right half
M(M_TOGGLE_5), KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM,
DE_OSX_SLSH, DE_OSX_LPRN, DE_OSX_RPRN, LALT(KC_8), LALT(KC_9), DE_OSX_HASH,
KC_TRNS, DE_OSX_PIPE, DE_OSX_TILD, DE_OSX_CIRC, KC_UP, DE_OSX_MINS, LSFT(KC_4),
DE_OSX_QUOT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS,
KC_F13, KC_F12,
KC_F14,
KC_F15, KC_TRNS, KC_TRNS),
[MDIA]=KEYMAP(
//left half
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D,
KC_TRNS, KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_R, KC_BTN3, 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 half
KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_VOLD, KC_TRNS, KC_MPRV, KC_MNXT, KC_UP, KC_TRNS,
KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_WBAK),
[SMLY]=KEYMAP(
//left half
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,
//right half
M(SM_SMILE), M(SM_SMIRK), M(SM_LAUGH), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, M(SM_FROWN), M(SM_SAD), M(SM_CRY), KC_TRNS, KC_TRNS, KC_TRNS,
M(SM_HEART), M(SM_KISS), 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),
[NUMB]=KEYMAP(
//left half
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, 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,
//right half
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, LSFT(KC_RBRC), KC_F12,
KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, DE_OSX_MINS,
KC_TRNS, LSFT(KC_6), KC_1, KC_2, KC_3, LSFT(KC_7), KC_TRNS,
KC_0, KC_DOT, KC_COMM, DE_OSX_EQL, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS),
[EGOS]=KEYMAP(
//left half
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_LSFT, 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_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_F1, KC_F2,
KC_F3,
KC_SPC, KC_LCTL, KC_F4,
//right half
M(M_TOGGLE_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, 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),
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Layer 1 (Symbols)
[2] = ACTION_LAYER_TAP_TOGGLE(SMLY) // FN2 - Momentary Layer 2 (Smiley)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
static uint16_t start;
// 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 1:
if (record->event.pressed) {
start = timer_read();
return MACRO(D(LCTRL), END);
} else {
if (timer_elapsed(start) > 150) {
return MACRO(U(LCTRL), END);
} else {
return MACRO(U(LCTRL), D(LGUI), T(V), U(LGUI), END);
}
}
break;
case 2:
if (record->event.pressed) {
static uint16_t start;
switch(id) {
case M_TOGGLE_5:
//Macro: M_TOGGLE_5//-----------------------
if (record->event.pressed){
layer_state ^= (1<<5);
layer_state &= (1<<5);
}
break;
case M_CTRL_CMDC:
//Macro: M_CTRL_CMDC//-----------------------
if (record->event.pressed) {
start = timer_read();
return MACRO(D(LCTRL),END);
} else {
if (timer_elapsed(start) > 150){
if (timer_elapsed(start) >150) {
return MACRO(U(LCTRL),END);
} else {
return MACRO(U(LCTRL),D(LGUI),T(C),U(LGUI),END);
}
}
break;
case 3:
if (record->event.pressed) {
break;
case M_DE_OSX_PLUS_CTRLALT:
//Macro: M_DE_OSX_PLUS_CTRLALT//-----------------------
if (record->event.pressed) {
start = timer_read();
return MACRO(D(LCTRL),D(LSFT),D(LALT),END);
return MACRO(D(LCTRL),D(LALT),END);
} else {
if (timer_elapsed(start) > 150){
return MACRO(U(LCTRL),U(LSFT),U(LALT),END);
if (timer_elapsed(start) >150) {
return MACRO(U(LCTRL),U(LALT),END);
} else {
return MACRO(U(LCTRL),U(LALT),T(EQL),U(LSFT),END); //cannot use DE_OSX_ACUT here, as macro needs KC_ prefix
return MACRO(U(LCTRL),U(LALT),T(RBRC),END);
}
}
break;
case M_LGUI_SHFT:
if (record->event.pressed){
break;
case SM_KISS:
//Macro: SM_KISS//-----------------------
if (record->event.pressed) {
return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(RBRC),U(LSFT),END);
}
break;
case SM_FROWN:
//Macro: SM_FROWN//-----------------------
if (record->event.pressed) {
return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LALT),T(8),U(LALT),END);
}
break;
case SM_CRY:
//Macro: SM_CRY//-----------------------
if (record->event.pressed) {
return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END);
}
break;
case SM_SMILE:
//Macro: SM_SMILE//-----------------------
if (record->event.pressed) {
return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END);
}
break;
case SM_SMIRK:
//Macro: SM_SMIRK//-----------------------
if (record->event.pressed) {
return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END);
}
break;
case M_LGUI_SHFT:
//Macro: M_LGUI_SHFT//-----------------------
if (record->event.pressed){
return MACRO(D(LGUI),D(LSFT),END);
}else{
return MACRO(U(LGUI),U(LSFT),END);
}
break;
case M_CTL_SFT_HASH:
if (record->event.pressed) {
start=timer_read();
break;
case SM_HEART:
//Macro: SM_HEART//-----------------------
if (record->event.pressed) {
return MACRO(T(GRV),T(3),END);
}
break;
case SM_LAUGH:
//Macro: SM_LAUGH//-----------------------
if (record->event.pressed) {
return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(D),U(LSFT),END);
}
break;
case M_CTL_SFT_HASH:
//Macro: M_CTL_SFT_HASH//-----------------------
if (record->event.pressed) {
start = timer_read();
return MACRO(D(LCTRL),D(LSFT),END);
} else {
if (timer_elapsed(start) > 150){
if (timer_elapsed(start) >150) {
return MACRO(U(LCTRL),U(LSFT),END);
} else {
return MACRO(U(LCTRL),U(LSFT),T(BSLS),END);
}
}
break;
case M_DE_OSX_CIRC_CTRLCMD:
if (record->event.pressed) {
break;
case SM_SAD:
//Macro: SM_SAD//-----------------------
if (record->event.pressed) {
return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END);
}
break;
case M_DE_OSX_CIRC_CTRLCMD:
//Macro: M_DE_OSX_CIRC_CTRLCMD//-----------------------
if (record->event.pressed) {
start = timer_read();
return MACRO(D(LCTRL),D(LGUI),END);
} else {
if (timer_elapsed(start) > 150){
if (timer_elapsed(start) >150) {
return MACRO(U(LCTRL),U(LGUI),END);
} else {
return MACRO(U(LCTRL),U(LGUI),T(NUBS),END);
}
}
break;
case M_DE_OSX_PLUS_CTRLALT:
if (record->event.pressed) {
break;
case M_CTRL_CMDV:
//Macro: M_CTRL_CMDV//-----------------------
if (record->event.pressed) {
start = timer_read();
return MACRO(D(LCTRL),D(LALT),END);
return MACRO(D(LCTRL),END);
} else {
if (timer_elapsed(start) > 150){
return MACRO(U(LCTRL),U(LALT),END);
if (timer_elapsed(start) >150) {
return MACRO(U(LCTRL),END);
} else {
return MACRO(U(LCTRL),U(LALT),T(RBRC),END);
return MACRO(U(LCTRL),D(LGUI),T(V),U(LGUI),END);
}
}
break;
case SM_SMILE:
if (record->event.pressed) {
return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END);
}
break;
case SM_SMIRK:
if (record->event.pressed) {
return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END);
}
break;
case SM_CRY:
if (record->event.pressed) {
return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END);
}
break;
case SM_SAD:
if (record->event.pressed) {
return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END);
break;
case M_MEH_SH_ACUT:
//Macro: M_MEH_SH_ACUT//-----------------------
if (record->event.pressed) {
start = timer_read();
return MACRO(D(LCTRL),D(LSFT),D(LALT),END);
} else {
if (timer_elapsed(start) >150) {
return MACRO(U(LCTRL),U(LSFT),U(LALT),END);
} else {
return MACRO(U(LCTRL),U(LALT),T(EQL),U(LSFT),END);
}
}
break;
case SM_HEART:
if (record->event.pressed) {
return MACRO(T(GRV),T(3),END);
}
break;
case SM_LAUGH:
if (record->event.pressed) {
return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(D),U(LSFT),END);
}
break;
case SM_KISS:
if (record->event.pressed) {
return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(RBRC),U(LSFT),END);
}
break;
case SM_FROWN:
if (record->event.pressed) {
return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LALT),T(8),U(LALT),END);
}
break;
case M_TOGGLE_5:
if (record->event.pressed){
layer_state ^= (1<<5);
layer_state &= (1<<5);
}
break;
}
return MACRO_NONE;
break;
}
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
@ -418,36 +334,43 @@ 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;
case 3:
ergodox_right_led_3_on();
break;
case 4:
ergodox_right_led_1_on();
ergodox_right_led_3_on();
//ergodox_board_led_on();
break;
case 5:
ergodox_right_led_1_on();
ergodox_right_led_2_on();
ergodox_right_led_3_on();
break;
default:
// none
break;
}
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) {
case SYMB:
ergodox_right_led_1_on();
break;
case MDIA:
ergodox_right_led_2_on();
break;
case SMLY:
ergodox_right_led_3_on();
break;
case NUMB:
ergodox_right_led_1_on();
ergodox_right_led_3_on();
break;
case EGOS:
ergodox_right_led_1_on();
ergodox_right_led_2_on();
ergodox_right_led_3_on();
break;
default:
// none
break;
}
};

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 669 KiB

After

Width:  |  Height:  |  Size: 292 KiB

@ -11,6 +11,12 @@ Dies ist nur ein kleiner Tweak der bestehenden firmware für das ErgoDox-EZ-Keyb
- der Zehnerblock wurde in eine eigene Layer umgezogen
- die Meh und Hyper-Tasten wurden in die Daumenblöcke umgezogen
# Erstellt Mit Dem ErgodoxLayoutGenerator
Der ErgodoxLayoutGenerator ist ein kleines Werkzeug, welches die Erstellung und Pflege der eigenen Keymaps erleichtern soll. Es ist in java geschrieben und kann [hier](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases) heruntergeladen werden. Damit das Tool funktioniert sollte das offizielle Oracle JDK in aktueller Version installiert sein.
Die Dokumentation für den ELG kann man [hier](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/) nachlesen (momentan leider nur in Englisch verfügbar).
------------------------------
@ -26,3 +32,10 @@ This is only a little tweak of the existing default layout for the ErgoDox keyb
- the symbollayer now has only symbols
- the number block was moved to a special layer
- meh and hyper went down to the thumb block
# Created Using the ErgodoxLayoutGenerator
The ErgodoxLayoutGenerator (ELG) is a little tool, which makes the creation and maintenance of keycaps a lot easier. It was written in Java and can be downloaded [here](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases). To use the tool, you need to have a current version of Oracles JDK installed.
The documentation of the ELG can be viewed [here](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/).

@ -1,229 +1,153 @@
// 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).
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#include "keymap_extras/keymap_french.h"
#include "keymap_extras/keymap_neo2.h"
#include "keymap_extras/keymap_uk.h"
#include "keymap_extras/keymap_colemak.h"
#include "keymap_extras/keymap_french_osx.h"
#include "keymap_extras/keymap_nordic.h"
#include "keymap_extras/keymap_dvorak.h"
#include "keymap_extras/keymap_german.h"
#include "keymap_extras/keymap_norwegian.c"
#include "keymap_extras/keymap_fr_ch.h"
#include "keymap_extras/keymap_german_osx.h"
#include "keymap_extras/keymap_spanish.h"
#include "keymap_extras/keymap_bepo.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
#define MDIA 2 // media keys
#define ADNW 3 // media keys
#define NUMB 4 // number keys
#define BASE 0
#define SYMB 1
#define MDIA 2
#define QWERTZ 3
#define NUMB 4
#define UNUSED 0
//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
/* Keymap 0: ADNW-Koy layer
* ADNW-Koy is a special layout designed to be ergonomic. Was created using software to determine the most ergonomic way to type German and English texts.
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | 5 |Lctrl | |Rctrl | 6 | 7 | 8 | 9 | 0 | - |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | TAB | K | . | O | , | Y | CMD | | CMD | V | G | C | L | ß | Z |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | ADNW | H | A | E | I | U |------| |------| D | T | R | N | S | F/L2 |
* |--------+------+------+------+------+------| LALT | | RALT |------+------+------+------+------+--------|
* | LShift |X/Ctrl| Q | Ä | Ü | Ö | | | | B | P | W | M |J/Ctrl| RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |</L1| ^ |AltShf| Left | Right| | Up | Down | CMD-SHIFT | ´ | //L1 |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | L1 | LGui | | Alt |Ctrl/Esc|
* ,------|------|------| |------+--------+------.
* | | | Home | | PgUp | | |
* | Space|Backsp|------| |------| Enter | Space|
* | |ace | End | | PgDn | | |
* `--------------------' `----------------------'
*/
KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_K, KC_DOT, KC_O, KC_COMM, KC_Z, KC_TRNS,
KC_TRNS, KC_H, KC_A, KC_E, KC_I, KC_U,
KC_TRNS, CTL_T(KC_X),KC_Q, DE_AE, DE_UE, DE_OE, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SLSH,
KC_TRNS, KC_V, KC_G, KC_C, KC_L, KC_MINS, KC_Y,
KC_D, KC_T, KC_R, KC_N, KC_S, LT(MDIA,KC_F),
KC_TRNS, KC_B, KC_P, KC_W, KC_M, CTL_T(KC_J), 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 1: Symbol Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | ! | ? | | | | | \ | [ | ] | | | # | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | \ | / | . |------| |------| / | ( | ) | { | } | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | ^ | % | | | ~ | | | | & | < | > | " | ' | ? |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | | . | ! | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS,KC_GRV,LSFT(KC_GRV),DE_EXLM,DE_QST,KC_TRNS,KC_TRNS,
KC_TRNS,DE_HASH,DE_DLR, LALT(LSFT(KC_7)),DE_SLSH,KC_DOT,
KC_TRNS,KC_TRNS,DE_LESS,DE_PERC,LALT(KC_7),LALT(KC_N),KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,
KC_TRNS,
KC_TRNS,KC_DEL,KC_TRNS,
// right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), LALT(KC_7), DE_HASH, KC_F12,
DE_SLSH, DE_LPRN, DE_RPRN, LALT(KC_8), LALT(KC_9), KC_TRNS,
KC_TRNS, DE_AMPR, KC_GRV, LSFT(KC_GRV), DE_DQOT, DE_QUOT, DE_QST,
KC_TRNS,KC_DOT, KC_EXLM, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/* Keymap 2: Media and mouse keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | Play |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | MsUp | | | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | 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_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, KC_BTN3, 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_MPLY,
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_MUTE, KC_MPRV, KC_MNXT, KC_UP, KC_TRNS,
KC_VOLU, KC_VOLD, KC_LEFT, KC_DOWN, KC_RIGHT,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_WBAK
),
/* Keymap 3: qwertz layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | 5 |CMD-V | |CMD-C | 6 | 7 | 8 | 9 | 0 | ß |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | TAB | Q | W | E | R | T | CMD | | CMD | Z | U | I | O | P | ü |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | ADNW | A | S | D | F | G |------| |------| H | J | K | L | ö | ä/L2 |
* |--------+------+------+------+------+------| LALT | | RALT |------+------+------+------+------+--------|
* | LShift |Y/Ctrl| X | C | V | B | | | | N | M | , | . |-/Ctrl| RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |</L1| ^° |AltShf| Left | Right| | Up | Down | CMD-SHIFT | + | #/L1 |
* `----------------------------------' `----------------------------------'
* ,-------------. ,---------------.
* | MDIA | Meh | | Hyper| NUM |
* ,------|------|------| |------+--------+------.
* | | | Home | | PgUp | | |
* | Back-| Del |------| |------| Enter | Space|
* | Space| | End | | PgDn | | |
* `--------------------' `----------------------'
*/
[BASE] = KEYMAP( // layer 3 : default qwertz layout
// left hand
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, LGUI(KC_V),
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LGUI,
TG(3), KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_LALT,
LT(SYMB,KC_GRV), DE_LESS, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
TG(2), MEH_T(LSFT(DE_ACUT)),
KC_HOME,
KC_BSPC,KC_DEL,KC_END,
// right hand
LGUI(KC_C), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
KC_RGUI, KC_Y, KC_U, KC_I, KC_O, KC_P, DE_UE,
KC_H, KC_J, KC_K, KC_L, KC_SCLN,LT(MDIA,DE_AE),
KC_RALT,KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
KC_UP, KC_DOWN,LGUI(KC_LSFT),KC_RBRC, LT(SYMB,KC_BSLS),
ALL_T(DE_ACUT), TG(4),
KC_PGUP,
KC_PGDN,KC_ENT, KC_SPC
),
//numblock
KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, 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,
// 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, LSFT(KC_RBRC), KC_F12,
KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, KC_TRNS,
KC_TRNS, LSFT(KC_6), KC_1, KC_2, KC_3, LSFT(KC_7), KC_TRNS,
KC_0,KC_DOT, KC_0, KC_EQL, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
[BASE]=KEYMAP(
//left half
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LCTL,
KC_TAB, KC_K, KC_DOT, KC_O, KC_COMM, KC_Z, KC_LGUI,
TG(QWERTZ), KC_H, KC_A, KC_E, KC_I, KC_U,
KC_LSFT, CTL_T(KC_X), KC_Q, DE_AE, DE_UE, DE_OE, KC_LALT,
LT(SYMB,KC_GRV), DE_LESS, LALT(KC_LSFT), KC_LEFT, KC_RGHT,
TG(MDIA), MEH_T(LSFT(DE_ACUT)),
KC_HOME,
KC_BSPC, KC_DEL, KC_END,
//right half
KC_RCTL, KC_6, KC_7, KC_8, KC_9, KC_0, DE_OSX_MINS,
KC_RGUI, KC_V, KC_G, KC_C, KC_L, KC_MINS, KC_Y,
KC_D, KC_T, KC_R, KC_N, KC_S, LT(MDIA,KC_F),
KC_RALT, KC_B, KC_P, KC_W, KC_M, CTL_T(KC_J), KC_RSFT,
KC_UP, KC_DOWN, LGUI(KC_LSFT), KC_RBRC, LT(SYMB,KC_BSLS),
ALL_T(DE_ACUT), TG(NUMB),
KC_PGUP,
KC_PGDN, KC_ENT, KC_SPC),
[SYMB]=KEYMAP(
//left half
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS, KC_GRV, LSFT(KC_GRV), DE_EXLM, DE_QST, KC_TRNS, KC_TRNS,
KC_TRNS, DE_HASH, DE_DLR, LALT(LSFT(KC_7)), DE_SLSH, KC_DOT,
KC_TRNS, KC_TRNS, DE_LESS, DE_PERC, LALT(KC_7), LALT(KC_N), KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_DEL, KC_TRNS,
//right half
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), LALT(KC_7), DE_HASH, KC_F12,
DE_SLSH, DE_LPRN, DE_RPRN, LALT(KC_8), LALT(KC_9), KC_TRNS,
KC_TRNS, DE_AMPR, KC_GRV, LSFT(KC_GRV), DE_DQOT, DE_QUOT, DE_QST,
KC_TRNS, KC_DOT, KC_EXLM, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS),
[MDIA]=KEYMAP(
//left half
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_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, KC_BTN3, 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 half
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
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_MUTE, KC_MPRV, KC_MNXT, KC_UP, KC_TRNS,
KC_VOLU, KC_VOLD, KC_LEFT, KC_DOWN, KC_RIGHT,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_WBAK),
[QWERTZ]=KEYMAP(
//left half
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, LGUI(KC_V),
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LGUI,
KC_TRNS, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_LALT,
LT(SYMB,KC_GRV), DE_LESS, LALT(KC_LSFT), KC_LEFT, KC_RGHT,
KC_TRNS, MEH_T(LSFT(DE_ACUT)),
KC_HOME,
KC_BSPC, KC_DEL, KC_END,
//right half
LGUI(KC_C), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
KC_RGUI, KC_Y, KC_U, KC_I, KC_O, KC_P, DE_UE,
KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(MDIA,DE_AE),
KC_RALT, KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
KC_UP, KC_DOWN, LGUI(KC_LSFT), KC_RBRC, LT(SYMB,KC_BSLS),
ALL_T(DE_ACUT), KC_TRNS,
KC_PGUP,
KC_PGDN, KC_ENT, KC_SPC),
[NUMB]=KEYMAP(
//left half
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, 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,
//right half
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, LSFT(KC_RBRC), KC_F12,
KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, KC_TRNS,
KC_TRNS, LSFT(KC_6), KC_1, KC_2, KC_3, LSFT(KC_7), KC_TRNS,
KC_0, KC_DOT, KC_0, KC_EQL, 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_TAP_TOGGLE(ADNW) // FN2 - Momentary Layer 2 (ADNW)
};
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:
static uint16_t start;
switch(id) {
case UNUSED:
//Macro: UNUSED//-----------------------
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
break;
}
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
@ -234,31 +158,18 @@ void matrix_init_user(void) {
// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
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) {
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;
case 3:
ergodox_right_led_3_on();
break;
case 4:
ergodox_right_led_1_on();
ergodox_right_led_3_on();
//ergodox_board_led_on();
break;
default:
// none
break;
}
default:
// none
break;
}
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

@ -0,0 +1,376 @@
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#include "keymap_extras/keymap_french.h"
#include "keymap_extras/keymap_neo2.h"
#include "keymap_extras/keymap_uk.h"
#include "keymap_extras/keymap_colemak.h"
#include "keymap_extras/keymap_french_osx.h"
#include "keymap_extras/keymap_nordic.h"
#include "keymap_extras/keymap_dvorak.h"
#include "keymap_extras/keymap_german.h"
#include "keymap_extras/keymap_norwegian.c"
#include "keymap_extras/keymap_fr_ch.h"
#include "keymap_extras/keymap_german_osx.h"
#include "keymap_extras/keymap_spanish.h"
#include "keymap_extras/keymap_bepo.h"
#define BASE 0
#define SYMB 1
#define MDIA 2
#define SMLY 3
#define NUMB 4
#define EGOS 5
#define SMLY_TOG_QUOT 0
#define M_TOGGLE_5 1
#define TGH_NUM 2
#define M_DE_OSX_PLUS_CTRLALT 3
#define SM_KISS 4
#define SM_FROWN 5
#define SM_CRY 6
#define SM_SMILE 7
#define SM_SMIRK 8
#define M_LGUI_SHFT 9
#define SM_HEART 10
#define TOG_HLD_MDIA 11
#define SM_LAUGH 12
#define SM_SAD 13
#define M_DE_OSX_CIRC_CTRLCMD 14
#define M_MEH_SH_ACUT 15
//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE]=KEYMAP(
//left half
KC_ESC, DE_OSX_1, DE_OSX_2, DE_OSX_3, DE_OSX_4, DE_OSX_5, M(TGH_NUM),
KC_TAB, DE_OSX_Q, DE_OSX_W, DE_OSX_E, DE_OSX_R, DE_OSX_T, KC_LGUI,
KC_LALT, DE_OSX_A, DE_OSX_S, DE_OSX_D, DE_OSX_F, DE_OSX_G,
KC_LSFT, CTL_T(DE_OSX_Y), DE_OSX_X, DE_OSX_C, DE_OSX_V, DE_OSX_B, KC_LALT,
LT(SYMB,DE_OSX_LESS), M(M_DE_OSX_CIRC_CTRLCMD), M(M_DE_OSX_PLUS_CTRLALT), LSFT(KC_LCTRL), M(SMLY_TOG_QUOT),
KC_HOME, KC_END,
KC_PGUP,
KC_BSPC, KC_DEL, KC_PGDN,
//right half
M(TOG_HLD_MDIA), DE_OSX_6, DE_OSX_7, DE_OSX_8, DE_OSX_9, DE_OSX_0, DE_OSX_SS,
KC_RGUI, DE_OSX_Z, DE_OSX_U, DE_OSX_I, DE_OSX_O, DE_OSX_P, DE_OSX_UE,
DE_OSX_H, DE_OSX_J, DE_OSX_K, DE_OSX_L, DE_OSX_OE, ALT_T(DE_OSX_AE),
KC_RALT, DE_OSX_N, DE_OSX_M, DE_OSX_COMM, DE_OSX_DOT, CTL_T(DE_OSX_MINS), KC_RSFT,
MEH_T(DE_OSX_HASH), ALL_T(DE_OSX_ACUT), LGUI(KC_LSFT), LALT(KC_LSFT), LT(SYMB,DE_OSX_PLUS),
KC_LEFT, KC_RIGHT,
KC_UP,
KC_DOWN, KC_ENT, KC_SPC),
[SYMB]=KEYMAP(
//left half
KC_APPLICATION, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F5,
KC_TRNS, DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, DE_OSX_QST, KC_TRNS, KC_TRNS,
KC_TRNS, DE_OSX_HASH, DE_OSX_DLR, DE_OSX_BSLS, DE_OSX_SLSH, KC_DOT,
KC_TRNS, KC_TRNS, DE_OSX_LESS, DE_OSX_PERC, DE_OSX_PIPE, DE_OSX_TILD, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_DEL, KC_TRNS,
//right half
KC_F6, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, DE_OSX_BSLS, DE_OSX_LBRC, DE_OSX_RBRC, DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM,
DE_OSX_SLSH, DE_OSX_LPRN, DE_OSX_RPRN, DE_OSX_LCBR, DE_OSX_RCBR, DE_OSX_HASH,
KC_TRNS, DE_OSX_PIPE, DE_OSX_TILD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
DE_OSX_QUOT, DE_OSX_DQOT, KC_TRNS, M(M_TOGGLE_5), KC_TRNS,
KC_F13, KC_F12,
KC_F14,
KC_F15, KC_TRNS, KC_TRNS),
[MDIA]=KEYMAP(
//left half
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D,
KC_TRNS, KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_R, KC_BTN3, 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 half
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_VOLD, KC_TRNS, KC_MPRV, KC_MNXT, KC_UP, KC_TRNS,
KC_MUTE, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_WBAK),
[SMLY]=KEYMAP(
//left half
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,
//right half
M(SM_SMILE), M(SM_SMIRK), M(SM_LAUGH), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, M(SM_FROWN), M(SM_SAD), M(SM_CRY), KC_TRNS, KC_TRNS, KC_TRNS,
M(SM_HEART), M(SM_KISS), 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),
[NUMB]=KEYMAP(
//left half
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, 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,
//right half
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, DE_OSX_SLSH, KC_7, KC_8, KC_9, DE_OSX_ASTR, KC_F12,
DE_OSX_SLSH, KC_4, KC_5, KC_6, DE_OSX_PLUS, DE_OSX_MINS,
KC_TRNS, DE_OSX_PERC, KC_1, KC_2, KC_3, KC_TRNS, KC_TRNS,
KC_0, KC_DOT, KC_COMM, DE_OSX_EQL, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS),
[EGOS]=KEYMAP(
//left half
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_LSFT, 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_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_F1, KC_F2,
KC_F3,
KC_SPC, KC_LCTL, KC_F4,
//right half
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, M(M_TOGGLE_5), KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS),
};
const uint16_t PROGMEM fn_actions[] = {
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
static uint16_t start;
switch(id) {
case SMLY_TOG_QUOT:
//Macro: SMLY_TOG_QUOT//-----------------------
if (record->event.pressed) {
start = timer_read();
layer_state ^= (1<<SMLY);
layer_state &= (1<<SMLY);
return MACRO_NONE; } else {
layer_state ^= (1<<SMLY);
layer_state &= (1<<SMLY);
if (timer_elapsed(start) >150) {
return MACRO_NONE;
} else {
return MACRO(DOWN(KC_LSFT),TYPE(DE_OSX_HASH),UP(KC_LSFT),END);
}
}
break;
case M_TOGGLE_5:
//Macro: M_TOGGLE_5//-----------------------
if (record->event.pressed){
layer_state ^= (1<<5);
layer_state &= (1<<5);
}
break;
case TGH_NUM:
//Macro: TGH_NUM//-----------------------
if (record->event.pressed){
start = timer_read();
layer_state ^=(1<<NUMB);
layer_state &=(1<<NUMB);
} else {
if (timer_elapsed(start) > 150) {
layer_state^=(1<<NUMB);
layer_state&=(1<<NUMB);
}
}
return MACRO_NONE;
break;
case M_DE_OSX_PLUS_CTRLALT:
//Macro: M_DE_OSX_PLUS_CTRLALT//-----------------------
if (record->event.pressed) {
start = timer_read();
return MACRO(DOWN(KC_LCTRL),DOWN(KC_LALT),END);
} else {
if (timer_elapsed(start) >150) {
return MACRO(U(LCTRL),U(LALT),END);
} else {
return MACRO(UP(KC_LCTRL),UP(KC_LALT),TYPE(KC_RBRC),END);
}
}
break;
case SM_KISS:
//Macro: SM_KISS//-----------------------
if (record->event.pressed) {
return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_RBRC),UP(KC_LSFT),END);
}
break;
case SM_FROWN:
//Macro: SM_FROWN//-----------------------
if (record->event.pressed) {
return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LALT),TYPE(KC_8),UP(KC_LALT),END);
}
break;
case SM_CRY:
//Macro: SM_CRY//-----------------------
if (record->event.pressed) {
return MACRO(DOWN(KC_LSFT),TYPE(KC_COMM),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_8),UP(KC_LSFT),END);
}
break;
case SM_SMILE:
//Macro: SM_SMILE//-----------------------
if (record->event.pressed) {
return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_9),UP(KC_LSFT),END);
}
break;
case SM_SMIRK:
//Macro: SM_SMIRK//-----------------------
if (record->event.pressed) {
return MACRO(DOWN(KC_LSFT),TYPE(KC_COMM),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_9),UP(KC_LSFT),END);
}
break;
case M_LGUI_SHFT:
//Macro: M_LGUI_SHFT//-----------------------
if (record->event.pressed){
return MACRO(DOWN(KC_LGUI),DOWN(KC_LSFT),END);
}else{
return MACRO(UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),U(LGUI),U(LSFT),END);
}
break;
case SM_HEART:
//Macro: SM_HEART//-----------------------
if (record->event.pressed) {
return MACRO(TYPE(KC_GRV),TYPE(KC_3),END);
}
break;
case TOG_HLD_MDIA:
//Macro: TOG_HLD_MDIA//-----------------------
if (record->event.pressed){
start = timer_read();
layer_state ^=(1<<MDIA);
layer_state &=(1<<MDIA);
} else {
if (timer_elapsed(start) > 150) {
layer_state^=(1<<MDIA);
layer_state&=(1<<MDIA);
}
}
return MACRO_NONE;
break;
case SM_LAUGH:
//Macro: SM_LAUGH//-----------------------
if (record->event.pressed) {
return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_D),UP(KC_LSFT),END);
}
break;
case SM_SAD:
//Macro: SM_SAD//-----------------------
if (record->event.pressed) {
return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_8),UP(KC_LSFT),END);
}
break;
case M_DE_OSX_CIRC_CTRLCMD:
//Macro: M_DE_OSX_CIRC_CTRLCMD//-----------------------
if (record->event.pressed) {
start = timer_read();
return MACRO(DOWN(KC_LCTRL),DOWN(KC_LGUI),END);
} else {
if (timer_elapsed(start) >150) {
return MACRO(U(LCTRL),U(LGUI),END);
} else {
return MACRO(UP(KC_LCTRL),UP(KC_LGUI),TYPE(KC_NUBS),END);
}
}
break;
case M_MEH_SH_ACUT:
//Macro: M_MEH_SH_ACUT//-----------------------
if (record->event.pressed) {
start = timer_read();
return MACRO(DOWN(KC_LCTRL),DOWN(KC_LSFT),DOWN(KC_LALT),END);
} else {
if (timer_elapsed(start) >150) {
return MACRO(U(LCTRL),U(LSFT),U(LALT),END);
} else {
return MACRO(UP(KC_LCTRL),UP(KC_LALT),TYPE(DE_OSX_ACUT),UP(KC_LSFT),END);
}
}
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) {
case SYMB:
ergodox_right_led_1_on();
break;
case MDIA:
ergodox_right_led_2_on();
break;
case NUMB:
ergodox_right_led_3_on();
break;
case EGOS:
ergodox_right_led_1_on();
ergodox_right_led_2_on();
ergodox_right_led_3_on();
break;
default:
// none
break;
}
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 KiB

@ -0,0 +1,229 @@
#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
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | F5 | |Hypr+M| 6 | 7 | 8 | 9 | 0 | Mute |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | LGui | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
* |--------+------+------+------+------+------| SYMB | | MDIA |------+------+------+------+------+--------|
* | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |Ca/Ctl| { | ( | | | : | | - | = | ) | } |C`/Ctl|
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | LGA | LAlt | | RAlt | Play |
* ,------|------|------| |------+------+------.
* | | | Home | | PgUp | | |
* |Backsp| Esc |------| |------|Enter |Space |
* |ace | | 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_F5,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC,
KC_LGUI, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, TG(SYMB),
F(0), KC_LCBR, KC_LPRN,KC_PIPE,KC_COLN,
LGUI(KC_LALT), KC_LALT,
KC_HOME,
KC_BSPC, KC_ESC, KC_END,
// right hand
HYPR(KC_M), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MUTE,
KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
TG(MDIA), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_MINS, KC_EQL, KC_RPRN, KC_RCBR, F(1),
KC_RALT, KC_MPLY,
KC_PGUP,
KC_PGDN, KC_ENT, KC_SPC
),
/* Keymap 1: Symbol Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | ! | @ | { | } | | | | | | | | | | | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | ( | ) | ` |------| |------| Left | Down | Up | Right| | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ~ | | | | | | | | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12,
KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, 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
),
/* Keymap 2: Media and mouse keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | |------| |------|MsLeft|MsDown| MsUp |MsRght| | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | | | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |VolUp |VolDn | Prev | Next | | | LClk | RClk | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// 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_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_VOLU, KC_VOLD, KC_MPRV, KC_MNXT, KC_TRNS,
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_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, 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,
KC_TRNS, KC_TRNS, KC_WBAK
),
};
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_MACRO_TAP(0), // FN0 - Ctrl + a (For screen/tmux)
[1] = ACTION_MACRO_TAP(1) // FN1 - Ctrl + ` (For quake style console)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is.
{
switch(id) {
case 0:
if (record->event.pressed) {
if (record->tap.count) {
if (record->tap.interrupted) {
record->tap.count = 0;
// hold press action
register_code(KC_LCTL);
} else {
// tap press action
return MACRO( D(LCTL), T(A), U(LCTL), END );
}
} else {
// hold press action
register_code(KC_LCTL);
}
} else {
if (record->tap.count) {
// tap release action
} else {
// hold release action
unregister_code(KC_LCTL);
}
record->tap.count = 0;
}
break;
case 1:
if (record->event.pressed) {
if (record->tap.count) {
if (record->tap.interrupted) {
record->tap.count = 0;
// hold press action
register_code(KC_RCTL);
} else {
// tap press action
return MACRO( DOWN(KC_RCTL), TYPE(KC_GRV), UP(KC_RCTL), END );
}
} else {
// hold press action
register_code(KC_RCTL);
}
} else {
if (record->tap.count) {
// tap release action
} else {
// hold release action
unregister_code(KC_RCTL);
}
record->tap.count = 0;
}
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;
}
};

@ -0,0 +1,1159 @@
:100000000C946E020C94B2020C94B2020C94B202E4
:100010000C94B2020C94B2020C94B2020C94B20290
:100020000C94B2020C94B2020C94A60C0C94780DB1
:100030000C94B2020C94B2020C94B2020C94B20270
:100040000C94B2020C9442220C94B2020C94B202B0
:100050000C94B2020C94D11B0C94B2020C94B20218
:100060000C94B2020C94B2020C94B2020C94B20240
:100070000C94B2020C94B2020C94B2020C94B20230
:100080000C94B2020C94B2020C94B2020C94B20220
:100090000C94B2020C94B2020C94B2020C94B20210
:1000A0000C94B2020C94B2020C94B202E50D070E4D
:1000B000F50E070EF50E4C0E6F0EF50EC40ED70E94
:1000C000C311C31100120012431281129A149A1420
:1000D0009A129A149B139B136E149A149A148514F3
:1000E00001E40135023502E40001E00104020402EA
:1000F000E00000C801C835002B00E300E10000204B
:1001000000001E00140004001D002F024D001F00FF
:100110001A0016001B002602290020000800070014
:10012000060031022A0021001500090019003302DF
:100130004A00220017000A0005000000E2083E0005
:100140002F00000001540000E200100F30000000FA
:1001500002540000E60023001C000B001100000008
:10016000AE00240018000D0010002D004B002500EB
:100170000C000E0036002E002C00260012000F008E
:100180003700270228002700130033003800300210
:100190004E00A80031003400E500012000000100FD
:1001A000010001000100010000003A001E022002CF
:1001B0002202010001003B001F0221022302010074
:1001C00001003C002F0226022F00010001003D002B
:1001D000300227023000010001003E0031023500EC
:1001E00035020000010001000100000001000000D4
:1001F00001000100010000000100000001003F00BB
:100200000100500001000000010040000100510009
:100210000100010001004100010052000100010045
:100220000100420001004F000100010001004300F5
:10023000010001000100010001004400450001002F
:100240000100010000000100010001000100A900FF
:1002500000000100010001000100AA0001000100EE
:10026000010001000100AC000100010001000100DB
:100270000100AB00010001000100010001000100CC
:100280000100010001000100010000000100010067
:100290000100000001000000010001000100000059
:1002A00001000000010001000100F2000100000057
:1002B000010001000100F1000100F4000100010053
:1002C0000100F0000100F500B60001000100F3009C
:1002D0000100010001000100010001000100010016
:1002E00001000100010001000100010000001603EF
:1002F0004500720067006F0044006F007800200026
:1003000045005A00000016034500720067006F00A8
:1003100044006F007800200045005A0000000403EC
:10032000090409026D00040100A0FA09040000019B
:1003300003010100092111010001223F000705818D
:100340000308000A09040100010301020009211148
:10035000010001224D000705820308000A0904027A
:1003600000010300000009211101000122360007ED
:1003700005830308000A09040300010300000009C3
:100380002111010001223900070584031000011228
:1003900001100100000008EDFE071301000102003A
:1003A0000105010906A101050719E029E715002546
:1003B0000195087501810205081901290595057542
:1003C000019102950175039101050719002977151F
:1003D000002501957875018102C005010980A10100
:1003E000850216010026B7001A01002AB700751011
:1003F00095018100C0050C0901A1018503160100CA
:10040000269C021A01002A9C02751095018100C0E9
:1004100005010902A1010901A10005091901290528
:10042000150025019505750181029501750381016E
:100430000501093009311581257F9502750881066E
:1004400009381581257F950175088106050C0A3844
:10045000021581257F950175088106C0C005010937
:1004600006A101050719E029E71500250195087582
:100470000181029501750881010508190129059579
:100480000575019102950175039101050719002970
:10049000FF150025FF950675088100C000000000CB
:1004A00000000000000000010204060A0F17202CC3
:1004B0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9BF
:1004C000DAC7B39D87715D4A3A2C20170F0A0604DC
:1004D00002010000000000000000000011241FBE07
:1004E000CFEFDAE0DEBFCDBF04B603FE24C08091BB
:1004F000EE019091EF01A091F001B091F1018730F0
:10050000904BA740B04BB9F41092EE011092EF015E
:100510001092F0011092F10114BE84B7877F84BF5E
:1005200088E10FB6F89480936000109260000FBECF
:10053000E0E0FFE3099511E0A0E0B1E0E2E1F8E4DA
:1005400002C005900D92A433B107D9F711E0A4E3DE
:10055000B1E001C01D92AE3EB107E1F70E94EA0989
:100560000C9407240C940000CF93DF93EC016623D6
:1005700019F06130C9F015C09A818D81992349F035
:10058000982F907F21F080FF22C08F708D8380EEA6
:1005900017C0807F19F480EE0E941F118D818F702B
:1005A0008D8380E090E018C09A818D81992359F065
:1005B000982F907F21F080FF0DC08F708D8384EE87
:1005C0000E945710EECF807F49F784EEE5CF89EE89
:1005D00090E002C080EE90E0DF91CF910895089501
:1005E0006091B1017091B2018091B3019091B40119
:1005F0000E94FD1A56985E9825982D9826982E9858
:1006000027982F98813019F0823021F00895259A8B
:100610002D9A0895269A2E9A08950C94F0025698D1
:100620005E9825982D9826982E9827982F988FEFCA
:1006300090E0909389008093880090938B00809342
:100640008A0090938D0080938C00259A2D9A2FEF2D
:1006500080E792E0215080409040E1F700C0000028
:10066000269A2E9A2FEF80E792E02150804090400A
:10067000E1F700C00000279A2F9A2FEF80E792E061
:10068000215080409040E1F700C0000025982D984F
:100690002FEF80E792E0215080409040E1F700C0CA
:1006A000000026982E982FEF80E792E0215080409E
:1006B0009040E1F700C0000027982F9856985E9868
:1006C00025982D9826982E9827982F98089589EA8E
:1006D0008093800089E08093810024982C983F9833
:1006E0008AB18F748AB96E98479A8BB1806B8BB937
:1006F000769A0E940F030C94EF0280E2809300012F
:100700008091340181110EC00E94CC0381E080935E
:1007100034012FEF83ED90E3215080409040E1F7CA
:1007200000C0000080E40E94D20380930001811188
:100730002EC00E94FC0380930001811128C00E94FA
:10074000FC0380930001811122C08FE30E94FC030F
:100750008093000181111BC00E94F40380E40E9479
:10076000D20380930001811112C08CE00E94FC032F
:100770008093000181110BC00E94FC038093000153
:10078000811105C08FE30E94FC03809300010E9449
:10079000F4038091000108951092B9008AE08093DB
:1007A000B800089594EA9093BC009091BC0097FF24
:1007B000FCCF9091B900987F983021F0903111F0E2
:1007C00081E008958093BB0084E88093BC00809111
:1007D000BC0087FFFCCF8091B900887F883111F081
:1007E000803471F780E0089584E98093BC008091A3
:1007F000BC0084FDFCCF08958093BB0084E8809307
:10080000BC008091BC0087FFFCCF9091B900987F1D
:1008100081E0983209F480E0089584E88093BC0078
:100820008091BC0087FFFCCF8091BB000895809130
:100830000001811115C080E40E94D2038093000161
:1008400081110CC082E10E94FC03809300018111A0
:1008500005C08FEF0E94FC03809300010E94F40307
:1008600084B1807F84B985B1807F85B98AB1837F67
:100870008AB98BB1837F8BB93E98469808950E94C0
:100880007D03809300010E94170480B38C7080BBAD
:1008900081B3836F81BBA6E3B1E0E4E4F1E08EE0D5
:1008A0008E0F11921D928E13FCCF0C946703BF9292
:1008B000CF92DF92EF92FF920F931F93CF93DF932C
:1008C00080910001882379F0809135018F5F8093BA
:1008D0003501811108C00E947D03809300018111C0
:1008E00002C00E940F0306E311E0C0E0D0E0DD2467
:1008F000D39482E0C82EEE24E394F12CC730D105C6
:1009000000F580910001811164C080E40E94D2034F
:1009100080930001811112C082E10E94FC03809348
:10092000000181110BC0C7010C2E01C0880F0A9471
:10093000EAF780950E94FC03809300010E94F40373
:1009400048C0CA30A1F028F4C83059F0C93061F06D
:1009500005C0CC3089F070F0CD3089F0209A28980D
:1009600010C0219A29980DC0229A2A980AC0239A69
:100970002B9807C0529A01C0539A5B9802C03E9AC6
:10098000469890EA9A95F1F79FB1799902C082E072
:1009900001C080E091709D25982B7C9902C084E075
:1009A00001C080E0892B7D9902C038E001C030E0B1
:1009B000832B7E9902C020E101C020E0822B9FB1F1
:1009C0009095991F9927991F9295990F907E892B41
:1009D0000FC080910001811149C080E40E94D203C0
:1009E00080930001882379F1B12C0E94F4038B2DB0
:1009F000F8019081981719F08083C09201010E943C
:100A0000170421960F5F1F4FCE30D10509F076CF26
:100A100080910101882361F1815080930101882335
:100A200039F08FE99FE00197F1F700C0000020C086
:100A3000A4E4B1E0E6E3F1E0CF01825F91919D9300
:100A40008E13FCCF15C083E10E94FC03809300014C
:100A50008111CACF81E40E94D203809300018111E9
:100A6000C3CF0E940D04B82EB094BFCF80E0C0CF9A
:100A70000E940D0381E0DF91CF911F910F91FF90B4
:100A8000EF90DF90CF90BF900895E82FF0E0EC5BFF
:100A9000FE4F808108950895089596E0799FF001B2
:100AA000112494E5899FE00DF11D1124E60FF11D3D
:100AB000EE0FFF1FEA50FF4F859194910895880F24
:100AC000991FFC01EE58F040859194910895880F8C
:100AD000991FFC01EE50FF4F8591949108950F935B
:100AE0001F93CF93DF93EC018115904350F5C1150F
:100AF00080E2D80708F0B3C0CB3BD10590F4C83AE8
:100B0000D10508F05AC0C53AD10508F04BC0C43031
:100B1000D10508F0BBC1219709F0B5C101E010E093
:100B2000F5C1CF3FD10511F008F0B0C1C03FD105EC
:100B300008F092C0CE01805E9109089708F4A6C122
:100B4000A2C1C11591E5D907A8F4C23020E5D207AA
:100B500008F09EC0C11580E5D80709F485C008F0EB
:100B600091C0C11520E4D20708F08DC1DD278E01A8
:100B7000106CCCC1C11580E8D80758F4C11590E7B6
:100B8000D90708F07CC1C11520E6D20708F422C1BC
:100B90007AC1C11580E9D80708F075C1DF708E01F0
:100BA000106AB4C1C53AD10509F472C1C63AD1057B
:100BB00009F071C102E810E4A9C1C83AD10509F4ED
:100BC0006DC1C93AD10509F46CC1CA3AD10509F41D
:100BD0006BC1CB3AD10509F46AC1CC3AD10509F40D
:100BE00069C1CD3AD10509F468C1C03BD10509F40A
:100BF00067C1CE3AD10509F466C1CF3AD10509F4EF
:100C000065C1C13BD10509F464C1C23BD10509F4FA
:100C100063C1C33BD10509F462C1C43BD10509F4EA
:100C200061C1C53BD10509F460C1C63BD10509F4DA
:100C30005FC1C73BD10509F45EC1C83BD10509F4CA
:100C40005DC1C93BD10509F45CC1CA3BD10509F4BA
:100C50005BC100E014E45AC18E01106557C1CE019A
:100C60009F700E94670553C10E94BE149FEF24E34A
:100C70008CE0915020408040E1F700C000000E94CD
:100C8000F61B44C18091CD0181608093CD013EC1AE
:100C90000E949F1D811102C00E94851D0E94BC1DE3
:100CA00090E09093EE018093ED01C23090E5D9077A
:100CB00021F48091ED01816086C0C43020E5D20727
:100CC00021F48091ED0182607EC0C63080E5D807B6
:100CD00021F48091ED01846076C0C83090E5D90799
:100CE00019F48091ED0127C0CA3020E5D20721F424
:100CF0008091ED01806167C0CC3080E5D80721F498
:100D00008091ED0180625FC0CE3090E5D90721F47B
:100D10008091ED01806457C0C03120E5D20721F4F5
:100D20008091ED0180684FC0C23180E5D80729F479
:100D30008091ED018460886046C0C33090E5D9079A
:100D400021F48091ED018E7F3EC0C53020E5D207B1
:100D500021F48091ED018D7F36C0C73080E5D80742
:100D600021F48091ED018B7F2EC0C93090E5D90729
:100D700019F48091ED0126C0CB3020E5D20721F493
:100D80008091ED018F7E1FC0CD3080E5D80721F422
:100D90008091ED018F7D17C0CF3090E5D90721F408
:100DA0008091ED018F7B0FC0C13120E5D20721F486
:100DB0008091ED018F7707C0C331D04531F4809128
:100DC000ED018B7F877F8093ED018091ED010E9483
:100DD000C01D9CC08D2F99278F7099278130910558
:100DE000D9F49E012370332702C0880F991F2A95DA
:100DF000E2F79C688E0144E0000F111F4A95E1F76D
:100E000000271370802B912B53E0CC0FDD1F5A95D8
:100E1000E1F7C076DD272FC08230910531F4DC2F59
:100E2000CC278E01016F106A71C08330910569F47F
:100E3000CE018370992701E010E002C0000F111F5E
:100E40008A95E2F7C8019C680FC0049709F05EC05C
:100E5000CE018370992701E010E002C0000F111F3E
:100E60008A95E2F7C8019A6823E0CC0FDD1F2A9526
:100E7000E1F7C07ED7708C010C2B1D2B47C0DF70B3
:100E80008E01106243C000E010E040C08E013EC001
:100E900001E810E43BC003E810E438C002EE14E4BB
:100EA00035C009EE14E432C00AEE14E42FC005EB9D
:100EB00014E42CC006EB14E429C007EB14E426C0AC
:100EC0000CEC14E423C00DEC14E420C003E815E49A
:100ED0001DC00AE815E41AC002E915E417C004E9C8
:100EE00015E414C001E216E411C003E216E40EC0DA
:100EF00004E216E40BC005E216E408C006E216E4BC
:100F000005C007E216E402C00AE216E4C801DF9158
:100F1000CF911F910F91089596E0799FF0011124D0
:100F200094E5899FE00DF11D1124E60FF11DEE0FF0
:100F3000FF1FEA50FF4F85919491803E9105E0F4A8
:100F4000803C910558F58133910509F46FC048F450
:100F50008932910509F463C08A32910509F46DC0A4
:100F600072C089339105E9F082389105D1F085335B
:100F7000910509F44DC067C0833E910581F138F4B5
:100F8000803E9105B9F0823E9105D9F05CC0863E65
:100F9000910561F1873E9105A1F155C00E945F0561
:100FA00008952091ED0120FD02C021FF4CC080EE8C
:100FB00090E049C08091ED0180FFF9CF89E390E096
:100FC00042C08091ED0182FF0EC08091ED0184FF4F
:100FD00003C080E090E037C083EE90E034C08091A1
:100FE000ED0182FFF2CF82EE90E02DC08091ED0105
:100FF00083FF0BC08091ED0184FDEBCF87EE90E085
:1010000022C08091ED0183FFF5CF86EE90E01BC0FA
:101010008091ED0185FF07C089E290E014C08091C6
:10102000ED0185FFF9CF85E390E00DC08091ED01E2
:1010300086FF07C08AE290E006C08091ED0186FF3E
:10104000F9CF81E390E00E946F05089508950C9414
:101050002608809162010895CF93DF9300D01F92FC
:10106000CDB7DEB79C018091E401843019F593E09F
:1010700099833B832A839093E9008FEF9091E80056
:10108000815095FD06C095ED9A95F1F7000081110C
:10109000F5CF8091E80085FF0DC040E050E063E0AF
:1010A00070E0CE0101960E94960A8091E8008E774A
:1010B0008093E8000F900F900F90DF91CF910895EB
:1010C000CF93DF9300D01F92CDB7DEB72091E4011C
:1010D000243021F522E029839B838A8383E0809357
:1010E000E9008FEF9091E800815095FD06C095EDE5
:1010F0009A95F1F700008111F5CF8091E80085FF06
:101100000DC040E050E063E070E0CE0101960E9427
:10111000960A8091E8008E778093E8000F900F90F8
:101120000F90DF91CF9108952091E4012430F1F4E4
:1011300022E02093E9002FEF3091E800215035FDA7
:1011400006C035ED3A95F1F700002111F5CF209159
:10115000E80025FF0BC040E050E065E070E00E9431
:10116000960A8091E8008E778093E8000895CF93E7
:10117000DF93EC019091E401943009F046C0809136
:101180000C018823D9F080910D018823B9F0909348
:10119000E9008FEF9091E800815095FD06C095E140
:1011A0009A95F1F700008111F5CF8091E80085FF55
:1011B0002CC040E050E060E170E017C081E0809317
:1011C000E9008FEF9091E800815095FD06C095ED04
:1011D0009A95F1F700008111F5CF8091E80085FF25
:1011E00014C040E050E068E070E0CE010E94960A32
:1011F0008091E8008E778093E80080E1FE01A2E50F
:10120000B1E001900D928A95E1F7DF91CF910895B9
:101210008091E301811109C00E942B0C0E94880C6F
:101220008091E20084608093E20008951092E301CF
:10123000089508950C942F220E948C1B0E94352241
:101240000E942E0F0C94270842E061EC81E00E947E
:10125000A50B42E061EC82E00E94A50B42E061EC4C
:1012600083E00E94A50B42E161EC84E00C94A50BA5
:101270008091E601833009F455C030F4813071F07B
:10128000823009F48EC008958A3009F47AC08B3018
:1012900009F460C0893009F09CC020C08091E5014C
:1012A000813A09F096C08091E800877F8093E8003A
:1012B0008091E9019091EA01892B21F460E182E5B6
:1012C00091E003C060E080E090E070E00E94E10AFD
:1012D0008091E8008B778093E80008958091E50184
:1012E000813209F076C08091E9019091EA0100977E
:1012F00019F0039709F06DC08091E800877F809313
:10130000E8008091E80082FD05C08091E401811130
:10131000F8CF5FC08091F100809362018091E80076
:101320008B7753C08091E501813A09F052C08091DA
:10133000E9019091EA01892B09F04BC08091E80006
:10134000877F8093E8008091E80080FFFCCF809148
:101350000C0136C08091E5018132D9F58091E90117
:101360009091EA01892BA9F58091E800877F80930D
:10137000E8000E94DA0B8091E70180930C010C9445
:10138000BE148091E501813221F58091E800877FCC
:101390008093E8000E94DA0B8091E801809363015A
:1013A00008958091E501813AA1F48091E800877F5A
:1013B0008093E8008091E80080FFFCCF809163017A
:1013C0008093F1008091E8008E778093E8000C9480
:1013D000DA0B089584B7877F84BF88E10FB6F8944D
:1013E00080936000109260000FBE90E080E80FB61E
:1013F000F89480936100909361000FBE0E947D0F6E
:101400000E942B0C0E94880C8091E20084608093E3
:10141000E20078940E940E0F0E947F0F82E091E01C
:101420000E94290F0E941D228091E401853069F4F9
:101430000E944D1B8091E2018823B1F30E94781B2A
:10144000882391F30E94800AEFCF0E94850FECCF92
:10145000292F332723303105C9F064F421303105B9
:1014600081F02230310509F043C08DE690E022E2A0
:1014700033E042C021323105F1F02232310541F131
:1014800037C082E190E02FE833E036C09927813001
:10149000910541F08230910541F0892B49F5EEE14B
:1014A000F3E005C0E6E0F3E002C0EEEEF2E0849186
:1014B00090E09F0121C06430D8F4E62FF0E0EE0FF9
:1014C000FF1FEE5DFE4F2081318189E090E014C066
:1014D000643070F470E0FB01EE0FFF1FE65EFE4F1C
:1014E00020813181FB01EA5EFE4F808190E004C0E3
:1014F00080E090E020E030E0FA013183208308951D
:1015000080E189BD82E189BD09B400FEFDCF8091F3
:10151000D8008F7D8093D8008091E0008260809316
:10152000E0008091E00081FDFCCF0895CF92DF9232
:10153000EF92FF920F931F93CF93DF93EC018B01F8
:101540006A010E94F90B811133C0C114D10439F032
:10155000F60180819181081B190BC80FD91FE12C5E
:10156000F12C0115110519F18091E80085FD16C0D7
:101570008091E8008E778093E800C114D10449F08F
:10158000F60180819181E80EF91EF182E08285E00A
:101590000FC00E94F90B882321F30AC08991809320
:1015A000F10001501109FFEFEF1AFF0ADACF80E0D6
:1015B000DF91CF911F910F91FF90EF90DF90CF902F
:1015C00008952091EB013091EC012617370748F080
:1015D0006115710539F42091E8002E772093E80019
:1015E00001C0B90140E061157105A9F12091E40144
:1015F000222309F443C0253009F442C02091E800B9
:1016000023FD40C02091E80022FD32C02091E80077
:1016100020FFE9CF4091F3002091F20030E0342B1D
:10162000FC01CF016115710559F02830310540F4F6
:1016300081918093F100615071092F5F3F4FF1CF8D
:1016400041E02830310509F040E02091E8002E7794
:101650002093E800C8CF4111C9CF0AC08091E401AE
:10166000882361F0853061F08091E80083FD0AC035
:101670008091E80082FFF2CF80E0089582E0089533
:1016800083E0089581E008952091EB013091EC0111
:101690002617370748F06115710539F42091E800E5
:1016A0002E772093E80001C0B901FC0120E061150C
:1016B000710591F18091E401882309F440C08530DF
:1016C00009F43FC08091E80083FD3DC08091E800AF
:1016D00082FD2FC08091E80080FFE9CF2091F300C8
:1016E0008091F20090E0922B6115710559F08830DD
:1016F000910540F424912093F100319661507109D5
:101700000196F2CF21E0089709F020E08091E800EF
:101710008E778093E800CBCF2111CCCF0AC0809187
:10172000E401882361F0853061F08091E80083FD59
:101730000AC08091E80082FFF2CF80E0089582E045
:10174000089583E0089581E00895982F973058F523
:101750009093E900981739F07091EC002091ED001A
:101760005091F00003C0242F762F50E021FF19C0C4
:101770003091EB003E7F3093EB003091ED003D7FE8
:101780003093ED003091EB0031603093EB007093BB
:10179000EC002093ED005093F0002091EE0027FF25
:1017A00007C09F5FD3CF8F708093E90081E00895D9
:1017B00080E008958091E50187FF11C08091E800E5
:1017C00082FD05C08091E4018111F8CF11C08091A4
:1017D000E8008B770BC08091E401882349F0809169
:1017E000E80080FFF8CF8091E8008E778093E800D2
:1017F00008952091E4003091E50095E64091EC00D9
:10180000842F817040FF22C08091E80080FD1CC0C1
:101810008091E401882391F0853091F08091EB0074
:1018200085FD10C04091E4005091E5004217530738
:1018300029F39A01915011F784E0089582E0089508
:1018400083E0089581E0089580E008954091E800E4
:1018500042FFDECF08950E94990C0E94A10CE0EE99
:10186000F0E0808181608083E8EDF0E080818F7717
:10187000808319BCA7EDB0E08C918E7F8C93808122
:101880008F7E80831092E30108950F931F93CF936F
:10189000DF930E94990C0E94A10CC8EDD0E08881D2
:1018A0008F77888388818068888388818F7D88830B
:1018B00019BC1092E4011092E0011092E201109222
:1018C000E10100EE10E0F80180818B7F8083888148
:1018D0008160888342E060E080E00E94A50BE1EE39
:1018E000F0E080818E7F8083E2EEF0E08081816095
:1018F0008083808188608083F80180818E7F8083EF
:10190000888180618883DF91CF911F910F91089525
:10191000E8EDF0E080818F7E8083E7EDF0E080816C
:101920008160808384E082BF81E08093E3010C9436
:10193000450CE8EDF0E080818E7F80831092E2001C
:1019400008951092DA001092E10008951F920F920C
:101950000FB60F9211242F933F934F935F936F9382
:101960007F938F939F93AF93BF93EF93FF93809158
:10197000E10082FF0BC08091E20082FF07C08091EE
:10198000E1008B7F8093E1000E940D0F8091DA00CF
:1019900080FF1FC08091D80080FF1BC08091DA00BB
:1019A0008E7F8093DA008091D90080FF0DC080E1A6
:1019B00089BD82E189BD09B400FEFDCF81E080933D
:1019C000E4010E94080905C019BC1092E4010E94BC
:1019D00016098091E10080FF19C08091E20080FF2C
:1019E00015C08091E2008E7F8093E2008091E2003A
:1019F00080618093E2008091D80080628093D8005B
:101A000019BC85E08093E4010E941A098091E100ED
:101A100084FF30C08091E20084FF2CC080E189BD4A
:101A200082E189BD09B400FEFDCF8091D8008F7D91
:101A30008093D8008091E1008F7E8093E1008091B7
:101A4000E2008F7E8093E2008091E20081608093CB
:101A5000E2008091E001882311F084E007C08091CA
:101A6000E30087FD02C081E001C083E08093E401D0
:101A70000E941C098091E10083FF29C08091E2004F
:101A800083FF25C08091E100877F8093E10082E0A1
:101A90008093E4011092E0018091E1008E7F8093B9
:101AA000E1008091E2008E7F8093E2008091E2006D
:101AB00080618093E20042E060E080E00E94A50B3C
:101AC0008091F00088608093F0000E941909FF91D6
:101AD000EF91BF91AF919F918F917F916F915F91A6
:101AE0004F913F912F910F900FBE0F901F9018951F
:101AF0001F920F920FB60F9211242F933F934F9383
:101B00005F936F937F938F939F93AF93BF93CF9385
:101B1000DF93EF93FF93C091E900CF708091EC00C9
:101B2000D82FD17080FDD0E81092E9008091F000AC
:101B3000877F8093F00078940E94BC0D1092E9009A
:101B40008091F00088608093F000CD2BCF70C0931F
:101B5000E900FF91EF91DF91CF91BF91AF919F91FC
:101B60008F917F916F915F914F913F912F910F9046
:101B70000FBE0F901F9018951F93CF93DF93CDB793
:101B8000DEB7AA970FB6F894DEBF0FBECDBFE5EE65
:101B9000F1E088E08E0F9091F10091938E13FBCFCE
:101BA0000E9438098091E80083FF1FC18091E50100
:101BB0009091E601492F50E04A30510508F015C1D7
:101BC000FA01EA5AFF4F0C94B723803881F082382B
:101BD00009F00BC18091E9018F708093E900809139
:101BE000EB0085FB882780F91092E90006C0809100
:101BF000E1019091E201911182609091E800977F5C
:101C00009093E8008093F1001092F100C8C0282F53
:101C10002D7F09F0EAC0882319F0823061F0E5C019
:101C20008091E701813009F0E0C0933009F080E055
:101C30008093E2012BC08091E701811127C0809140
:101C4000E9018F7009F4D1C08093E9002091EB0085
:101C500020FF1CC0933021F48091EB00806214C0FF
:101C60009091EB0090619093EB0021E030E0A901AE
:101C700002C0440F551F8A95E2F74093EA00109284
:101C8000EA008091EB0088608093EB001092E900FD
:101C90008091E800877F86C08111A7C01091E7017D
:101CA0001F778091E3008078812B8093E3008091FF
:101CB000E800877F8093E8000E94DA0B8091E800BB
:101CC00080FFFCCF8091E30080688093E3001111D6
:101CD00002C082E001C083E08093E40186C08058A6
:101CE000823008F082C08091E7019091E8018C3D3C
:101CF00053E0950779F583E08A838AE289834FB7B9
:101D0000F894DE01139620E03EE051E2E32FF0E08C
:101D100050935700E49120FF03C0E295EF703F5FBE
:101D2000EF708E2F90E0EA3010F0C79601C0C09699
:101D30008D939D932F5F243149F74FBF8091E80029
:101D4000877F8093E8006AE270E0CE0101960E94EE
:101D5000E10A14C0AE014F5F5F4F6091E9010E943C
:101D6000280ABC01892B09F440C09091E800977FB4
:101D70009093E80089819A810E94440B8091E80049
:101D80008B778093E80031C0803879F58091E80046
:101D9000877F8093E8008091E0018093F10080913B
:101DA000E8008E778093E8000E94DA0B1EC0811154
:101DB0001CC09091E7019230C0F48091E800877FC9
:101DC0008093E8009093E0010E94DA0B8091E0019B
:101DD000811106C08091E30087FD02C081E001C04F
:101DE00084E08093E4010E9424098091E80083FF4D
:101DF0000AC08091E800877F8093E8008091EB0023
:101E000080628093EB00AA960FB6F894DEBF0FBEF7
:101E1000CDBFDF91CF911F9108950895CF93809109
:101E2000E4018823A1F0C091E900CF709091EC000B
:101E3000892F817090FD80E8C82B1092E900809175
:101E4000E80083FD0E94BC0DCF70C093E900CF91E4
:101E5000089590936901809368010895E091680165
:101E6000F0916901309721F00190F081E02D099403
:101E700080E00895E0916801F0916901309721F0C8
:101E80000280F381E02D09940895E0916801F091BA
:101E90006901309721F00480F581E02D09940895BF
:101EA00020916601309167018217930771F090933A
:101EB000670180936601E0916801F09169013097B4
:101EC00021F00680F781E02D0994089520916401A6
:101ED000309165018217930771F0909365018093AB
:101EE0006401E0916801F0916901309721F000846C
:101EF000F185E02D0994089508950C947C0F0E94BB
:101F0000921B0E943F040C94581CCF92DF92EF92D8
:101F1000FF920F931F93CF93DF93CDB7DEB72B972D
:101F20000FB6F894DEBF0FBECDBF0E9457048BE6FC
:101F3000C82E81E0D82E00E010E0E02E802F0E9415
:101F40004505F60141916F01F42EF826B1F40F5FBB
:101F50001F4F0E30110589F78FEF89838A831B820B
:101F60000E949B1B8160782F9D838C8349815A81BD
:101F70006B818D810E94281040C09091CD0191FF0E
:101F800004C08B870E944B058B8520E030E04F2DED
:101F900050E0922FBA01022E02C0759567950A94FF
:101FA000E2F760FF24C02E83EF8221E030E0690178
:101FB00002C0CC0CDD1C9A95E2F790E08C219D21AB
:101FC000892B09F420E028870E949B1B8160782FD1
:101FD0009A8789874E815F8168858A850E9428104B
:101FE000F801E559FE4F8081C826C08206C02F5FE8
:101FF0003F4F2630310569F6AACF0E943F1F10914E
:102000006A010E942E0F1817A1F00E942E0F8093D4
:102010006A012B960FB6F894DEBF0FBECDBFDF91DD
:10202000CF911F910F91FF90EF90DF90CF900C9484
:1020300027082B960FB6F894DEBF0FBECDBFDF91F9
:10204000CF911F910F91FF90EF90DF90CF90089567
:10205000CF93DF93CDB7DEB72B970FB6F894DEBFE3
:102060000FBECDBF4F83588769877A878B87DE0184
:10207000119686E0FD0111928A95E9F785E0FE014F
:10208000379601900D928A95E1F749815A816B81CB
:102090007C818D819E810E9458172B960FB6F894F3
:1020A000DEBF0FBECDBFDF91CF9108950895CF93CE
:1020B000882309F4C2C0C82F823859F40E942E0F19
:1020C00081FDBBC089E30E94011A0E94CE1A89E3F8
:1020D0000CC0833879F40E942E0F80FDAEC083E5DA
:1020E0000E94011A0E94CE1A83E50E94431ACF91E2
:1020F0000C94CE1A843859F40E942E0F82FD9DC094
:1021000087E40E94011A0E94CE1A87E4EECF8CEF7A
:102110008C0F813A48F48C2F0E94822181118DC04E
:102120008C2F0E94011AE3CF80E28C0F883048F494
:10213000C77081E001C0880FCA95EAF70E94871A2C
:10214000D6CF8BE58C0F833078F4C53A29F0C63AA8
:1021500031F083E890E005C081E890E002C082E8B9
:1021600090E0CF910C94500F88E58C0F833108F0EC
:1021700064C0C83A39F1C93A41F1CA3A49F1CB3A97
:1021800051F1CC3A59F1CD3A61F1C03B69F1CE3A07
:1021900071F1CF3A79F1C13B81F1C23B89F1C33B87
:1021A00091F1C43B99F1C53BA1F1C63BA9F1C73BF5
:1021B000B1F1C83BB9F1C93BC1F1CA3BC9F180E0FB
:1021C00090E038C082EE90E035C089EE90E032C0F9
:1021D0008AEE90E02FC085EB90E02CC086EB90E07B
:1021E00029C087EB90E026C08CEC90E023C08DECFA
:1021F00090E020C083E891E01DC08AE891E01AC019
:1022000082E991E017C084E991E014C081E292E094
:1022100011C083E292E00EC084E292E00BC085E23E
:1022200092E008C086E292E005C087E292E002C038
:102230008AE292E0CF910C94660FCF9108958823A3
:1022400009F44BC0823859F40E942E0F81FF45C01B
:1022500089E30E94011A0E94CE1A89E30CC08338D8
:1022600071F40E942E0F80FF38C083E50E94011A8E
:102270000E94CE1A83E50E94431A0C94CE1A843829
:1022800059F40E942E0F82FF28C087E40E94011A91
:102290000E94CE1A87E4EFCF9CEF980F913A58F343
:1022A00090E2980F983050F4877091E001C0990F38
:1022B0008A95EAF7892F0E948D1ADFCF9BE5980F48
:1022C000933020F480E090E00C94500F885A8331D2
:1022D00020F480E090E00C94660F0895882321F0AC
:1022E0000E94871A0C94CE1A0895882321F00E9428
:1022F0008D1A0C94CE1A0895BF92CF92DF92EF926E
:10230000FF920F931F93CF93DF9300D000D000D0A4
:10231000CDB7DEB725E0FC01DE01119601900D92EC
:102320002A95E1F7FC01D080118102812581229557
:102330002F7043815481452B09F4FCC21F3F21F4C7
:10234000FFEFDF1609F4F6C27C012E830E945610BF
:10235000D9821A8369817A81802F0E94FD19182FF2
:10236000B92E0E94B2190E9479182E81002319F00B
:102370000E94A41A2E81EB2DE295EF70F0E0E05A56
:10238000FF4F0C94B7238B2D807F9B2D9F70F92ED0
:10239000882319F0F29480EFF822002389F0FF20BF
:1023A00009F475C280E2810F883020F48F2D0E94DD
:1023B000871A03C08F2D0E94971A0E94CE1A67C2F7
:1023C000812F0E941F11FF2009F4B4C2105E8F2DCF
:1023D000183018F40E948D1A02C00E949D1A269689
:1023E0000FB6F894DEBF0FBECDBFDF91CF911F9126
:1023F0000F91FF90EF90DF90CF90BF900C94CE1A8A
:102400003B2D307F8B2D8F70303211F08295807F85
:10241000112319F0113021F12CC00023B9F022232F
:1024200009F4A0C1213009F09DC126960FB6F89499
:10243000DEBF0FBECDBFDF91CF911F910F91FF90F7
:10244000EF90DF90CF90BF900C94B71A222319F031
:10245000213009F46FC28E830E94BA1A8E8196C110
:10246000002321F0223008F065C27CC1211162C234
:102470008DC1002321F0222309F474C108C2222354
:1024800009F484C119C22B2D26952695237030E0BE
:102490002115310521F021303105D1F04BC2002347
:1024A00021F0812F9B2D937002C080E090E0269652
:1024B0000FB6F894DEBF0FBECDBFDF91CF911F9155
:1024C0000F91FF90EF90DF90CF90BF900C94500F42
:1024D000002321F0812F9B2D937002C080E090E0BB
:1024E00026960FB6F894DEBF0FBECDBFDF91CF9119
:1024F0001F910F91FF90EF90DF90CF90BF900C94C1
:10250000660F812F002319F00E94471E02C00E940F
:10251000AF1E26960FB6F894DEBF0FBECDBFDF917B
:10252000CF911F910F91FF90EF90DF90CF90BF90D0
:102530000C94341F8B2D837009F07BC00111FAC1FC
:10254000812F829586958770880F880F912F9F70B5
:10255000C92ED12CE12CF12C082E04C0CC0CDD1C92
:10256000EE1CFF1C0A94D2F714FF12C04FE050E09B
:1025700060E070E004C0440F551F661F771F8A9506
:10258000D2F7CB01BA01609570958095909503C004
:1025900060E070E0CB012B2D269526952370422F0D
:1025A00050E042305105D9F04330510569F16C29B2
:1025B0007D298E299F294130510551F126960FB66C
:1025C000F894DEBF0FBECDBFDF91CF911F910F9169
:1025D000FF90EF90DF90CF90BF900C94A0186C29E3
:1025E0007D298E299F2926960FB6F894DEBF0FBE4F
:1025F000CDBFDF91CF911F910F91FF90EF90DF90B2
:10260000CF90BF900C94BC180E94A018C701B601CF
:1026100026960FB6F894DEBF0FBECDBFDF91CF91E7
:102620001F910F91FF90EF90DF90CF90BF900C948F
:102630008418002319F08B2D817001C086958823A2
:1026400009F478C1812F829586958770880F880F4D
:10265000912F9F70C92ED12CE12CF12C082E04C093
:10266000CC0CDD1CEE1CFF1C0A94D2F714FF12C028
:102670004FE050E060E070E004C0440F551F661F5B
:10268000771F8A95D2F7CB01BA0160957095809536
:10269000909503C060E070E0CB012B2D2695269528
:1026A0002370422F50E042305105D9F0433051059C
:1026B00069F16C297D298E299F294130510551F1FD
:1026C00026960FB6F894DEBF0FBECDBFDF91CF9137
:1026D0001F910F91FF90EF90DF90CF90BF900C94DF
:1026E0007A196C297D298E299F2926960FB6F89490
:1026F000DEBF0FBECDBFDF91CF911F910F91FF9035
:10270000EF90DF90CF90BF900C9496190E947A19A9
:10271000C701B60126960FB6F894DEBF0FBECDBF37
:10272000DF91CF911F910F91FF90EF90DF90CF90AD
:10273000BF900C945E19103FD1F118F4103E50F484
:10274000A1C0123F09F463C008F44CC0133F09F460
:1027500073C098C01F708B2D8F710023A1F00E9451
:10276000F718812F26960FB6F894DEBF0FBECDBFA7
:10277000DF91CF911F910F91FF90EF90DF90CF905D
:10278000BF900C946E110E941819812F26960FB6D7
:10279000F894DEBF0FBECDBFDF91CF911F910F9197
:1027A000FF90EF90DF90CF90BF900C9475110023B5
:1027B000A9F02111BFC08B2D8F7126960FB6F8940A
:1027C000DEBF0FBECDBFDF91CF911F910F91FF9064
:1027D000EF90DF90CF90BF900C943D19223008F01D
:1027E000A9C0E9CF0023A9F08B2D8F7126960FB6D3
:1027F000F894DEBF0FBECDBFDF91CF911F910F9137
:10280000FF90EF90DF90CF90BF900C94F7180023CB
:1028100059F38B2D8F7126960FB6F894DEBF0FBE3D
:10282000CDBFDF91CF911F910F91FF90EF90DF907F
:10283000CF90BF900C941819002399F08B2D8F71B5
:1028400026960FB6F894DEBF0FBECDBFDF91CF91B5
:102850001F910F91FF90EF90DF90CF90BF900C945D
:10286000E21826960FB6F894DEBF0FBECDBFDF91FB
:10287000CF911F910F91FF90EF90DF90CF90BF907D
:102880000C94D8180023A9F0222309F4ADCF812F8E
:1028900026960FB6F894DEBF0FBECDBFDF91CF9165
:1028A0001F910F91FF90EF90DF90CF90BF900C940D
:1028B0005710222309F4ADCF812F26960FB6F89436
:1028C000DEBF0FBECDBFDF91CF911F910F91FF9063
:1028D000EF90DF90CF90BF900C941F114B2D4F7055
:1028E000612FC7010E94B40226960FB6F894DEBF8E
:1028F0000FBECDBFDF91CF911F910F91FF90EF9051
:10290000DF90CF90BF900C94FC174B2D4F70612F30
:10291000C70126960FB6F894DEBF0FBECDBFDF917C
:10292000CF911F910F91FF90EF90DF90CF90BF90CC
:102930000C944C0526960FB6F894DEBF0FBECDBFA3
:10294000DF91CF911F910F91FF90EF90DF90CF908B
:10295000BF9008950E94A41A0E94B41A0E94791A86
:102960000E94CE1A0E94E51F0E94341F80E090E072
:102970000E94500F80E090E00C94660F0E94941A21
:102980000C94AA140E94F219292F22952F7030E07E
:102990002C3031054CF42A3031056CF422503109C9
:1029A0002230310588F407C02C30310549F02F3032
:1029B000310531F009C0803E48F0803F29F406C05F
:1029C00093FB882780F9089580E0089581E00895B9
:1029D000CF93DF9300D000D01F92CDB7DEB70F901A
:1029E0000F900F900F900F90DF91CF910895CF939C
:1029F000DF9300D000D000D0CDB7DEB726960FB65B
:102A0000F894DEBF0FBECDBFDF91CF9108951F9325
:102A1000CF93DF93C091790116E080917A01C817B6
:102A200099F0D0E01C9FF0011D9FF00D1124E55896
:102A3000FE4F4081518162817381848195810E9422
:102A4000F7142196C770E9CFDF91CF911F910895B8
:102A50004091AB015091AC016091AD017091AE011C
:102A60008091AF019091B0010C94F7148091B00166
:102A700082958F7009F054C08091AD01882309F4CC
:102A80004FC080917901A0917A016091AB01709162
:102A9000AC014091AE015091AF01B6E08A1709F444
:102AA0003FC090E041155105C1F17F3F11F46F3FE8
:102AB000A1F1B89FF001B99FF00D1124E558FE4F28
:102AC000218172132AC02081621327C02281211123
:102AD00024C0238134812417350710F42150310993
:102AE000241B350B283C3105C0F42091B0012F7018
:102AF00020612093B00126E0289FF001299FF00D6E
:102B00001124E058FE4F80818F70806180838BEAB2
:102B100091E00E947C110C94071501968770BECF3E
:102B20000895CF92DF92EF92FF920F931F93CF936E
:102B3000DF93CDB7DEB762970FB6F894DEBF0FBE56
:102B4000CDBF8C0185E0F801DE011D9601900D924C
:102B50008A95E1F7D8014C9111965C9111971296E4
:102B60006C9112971396CD90DC9014973091AB0135
:102B70007091AC018091AE019091AF01009709F482
:102B80006BC17F3F19F43F3F09F466C1E090AD018E
:102B9000EE2009F4C0C02091B001C816D90628F073
:102BA000F601E81BF90BCF0104C0809590958C0DC0
:102BB0009D1DFF24F394883C910578F0F12C207F33
:102BC00009F0C6C07C2DD98AC88A89890E94E81478
:102BD0008BEA91E00E947C11B1C0822F807F09F0C6
:102BE00046C0751314C0341312C0611110C02F7089
:102BF00020612093B0010E9428158BEA91E00E9489
:102C00007C118091B001D80115968C932EC0CD28EF
:102C100019F15F3F11F44F3FF9F0F62E61111CC01E
:102C20008091790120917A0136E0821709F45AC027
:102C300090E0389FF001399FF00D1124E558FE4FC8
:102C40007181571306C07081471303C072817111DF
:102C500003C001968770E9CFF62E662309F418C1E8
:102C60008091B00181608093B001F12C11C1751386
:102C700008C0341306C0611104C08091B001D801AE
:102C8000C3C04D875E878D859E856A8B0E94C21466
:102C90006A898823E1F16623D1F12091B001822F66
:102CA00082958F7090E0029774F08091AB019091C3
:102CB000AC0198878F831986DB86CA862C87CE0164
:102CC00007960E947C1186E0F801ABEAB1E0019022
:102CD0000D928A95E1F70E9436150E942815FF246F
:102CE000F394D6C04D875E878D859E850E94F2192C
:102CF000292F22952F7030E0223031050CF0BCC016
:102D00009F7009F0B6C0805E883008F4C1C0C80169
:102D10000E947C11E4CFC816D90608F453C0F6010E
:102D2000E81BF90BCF01883C910508F450C0F12C49
:102D30007C2DD98AC88A89890E94E814EBEAF1E0DF
:102D400086E0DF011D928A95E9F70E942815A0C050
:102D5000751314C0341312C0611110C08091B001FA
:102D6000F8018583C8010E947C1186E0EBEAF1E05E
:102D7000DF011D928A95E9F7FE2C8AC04D875E8798
:102D80008D859E856A8B0E94C2146A89882309F406
:102D9000BECF662309F4BBCF2091B001822F82956C
:102DA0008F7090E002970CF48ECF8091AB019091E0
:102DB000AC019A8389831B82DD82CC822E83CE0173
:102DC00001967FCF809590958C0D9D1DACCFF62EF2
:102DD000662309F49CCF75132EC034132CC02091A8
:102DE000B00120FD1FC0822F82958F70D9F0D801CD
:102DF00015962C9315978F3049F08F5F982F9295E9
:102E0000907F822F8F70892B15968C93C8010E941A
:102E10007C1186E0F801ABEAB1E001900D928A9551
:102E2000E1F793CF86E0F801ABEAB1E001900D92B3
:102E30008A95E1F72DC04D875E878D859E850E941E
:102E4000C214811140CF8091B00181608093B001A4
:102E5000C8010E947C111CC0662309F458CF4D871D
:102E60005E878D859E850E94C214882309F44FCF0A
:102E70002ACF811148CF0CC0243031050CF047CF48
:102E80009F7009F440CFF8019581907F09F03BCF06
:102E90008F2D62960FB6F894DEBF0FBECDBFDF91C7
:102EA000CF911F910F91FF90EF90DF90CF900895F9
:102EB0001F93CF93DF93CDB7DEB72C970FB6F8945F
:102EC000DEBF0FBECDBF4F83588769877A878B8758
:102ED0009C87CE0107960E949115882369F08F8107
:102EE00098852A853B85232BF1F19F3F09F063C02C
:102EF0008F3F09F060C037C086E0FE013796DE01E3
:102F0000119601900D928A95E1F76F817885EA8597
:102F1000FB85309741F17F3F11F46F3F21F1209104
:102F20007A0130E0C90101968770992740917901B3
:102F300050E08417950709F447C069837A83FD83BD
:102F4000EC8396E0929FD001939FB00D1124A55879
:102F5000BE4FFE01319601900D929A95E1F7809354
:102F60007A010E94071516E08091790190917A010B
:102F70008917C1F1189FC001112485589E4F0E94E6
:102F80009115882379F1E09179011E9FF0011124B8
:102F9000E558FE4F40815181628173818481958122
:102FA0000E94F7148091790190E00196877099272B
:102FB00080937901D9CF4F81588569857A858B8532
:102FC0009C850E94F714CFCF0E94BE1410927A0104
:102FD00010927901EBEAF1E086E0DF011D928A951B
:102FE000E9F7C1CF2C960FB6F894DEBF0FBECDBF68
:102FF000DF91CF911F910895EF92FF920F931F934E
:10300000CF93DF938C01892B09F46CC0F12CEE2453
:10301000E394E8012196F8018491843740F48430E8
:1030200008F051C0813081F0823019F15BC08537E2
:1030300009F444C0A8F19CE7980F903708F052C0FB
:103040008F770E941F1141C00E5F1F4FFE01C49178
:1030500080E28C0F883048F4C7708E2D01C0880F35
:10306000CA95EAF70E94A71A14C08C2F0E94571025
:103070002DC00E5F1F4FFE01C49180E28C0F88307F
:1030800058F4C7708E2D01C0880FCA95EAF70E94C8
:10309000AD1A0E94CE1A1AC08C2F0E941F1116C0A2
:1030A0000E5F1F4FFE01C491CC2381F08FE99FE09A
:1030B0000197F1F700C00000C150F6CF0E5F1F4F1F
:1030C000FE01F49003C00E9457108E018F2D8823BB
:1030D00009F49FCFEFE9FFE03197F1F700C000005E
:1030E0008150F5CFDF91CF911F910F91FF90EF901D
:1030F000089508956093B5017093B6018093B70168
:103100009093B8010C94AA140F931F930091B501EA
:103110001091B6012091B7013091B801DC01CB01CB
:10312000802B912BA22BB32B8093B5019093B601EA
:10313000A093B701B093B8011F910F910C94AA14FA
:103140000F931F930091B5011091B6012091B70123
:103150003091B801DC01CB0180239123A223B3235A
:103160008093B5019093B601A093B701B093B801D5
:103170001F910F910C94AA140F931F930091B50106
:103180001091B6012091B7013091B801DC01CB015B
:1031900080279127A227B3278093B5019093B6018A
:1031A000A093B701B093B8011F910F910C94AA148A
:1031B0001092B1011092B2011092B3011092B401B9
:1031C0000C94AA1441E050E060E070E004C0440FA9
:1031D000551F661F771F8A95D2F74093B101509310
:1031E000B2016093B3017093B4010C94AA1441E04E
:1031F00050E060E070E004C0440F551F661F771F69
:103200008A95D2F78091B1019091B201A091B3015A
:10321000B091B401482B592B6A2B7B2B4093B10101
:103220005093B2016093B3017093B4010C94AA144B
:1032300041E050E060E070E004C0440F551F661F9D
:10324000771F8A95D2F7409550956095709580913B
:10325000B1019091B201A091B301B091B4014823A2
:1032600059236A237B234093B1015093B2016093A9
:10327000B3017093B4010C94AA1441E050E060E0F3
:1032800070E004C0440F551F661F771F8A95D2F760
:103290008091B1019091B201A091B301B091B401BC
:1032A000482759276A277B274093B1015093B201E1
:1032B0006093B3017093B4010C94AA140F931F93FD
:1032C0000091B1011091B2012091B3013091B4018C
:1032D000DC01CB01802B912BA22BB32B8093B1016E
:1032E0009093B201A093B301B093B4011F910F91D9
:1032F0000C94AA140F931F930091B1011091B20185
:103300002091B3013091B401DC01CB0180239123E2
:10331000A223B3238093B1019093B201A093B30190
:10332000B093B4011F910F910C94AA140F931F93A3
:103330000091B1011091B2012091B3013091B4011B
:10334000DC01CB0180279127A227B3278093B1010D
:103350009093B201A093B301B093B4011F910F9168
:103360000C94AA140895CF92DF92EF92FF920F93DC
:103370001F93CF93DF938C01C090B501D090B6011D
:10338000E090B701F090B8018091B1019091B20145
:10339000A091B301B091B401C82AD92AEA2AFB2A24
:1033A000CFE1D0E0D701C6010C2E04C0B695A79599
:1033B000979587950A94D2F780FF06C0B8018C2FA5
:1033C0000E948C07019721F4219760F780E001C0EB
:1033D0008C2FDF91CF911F910F91FF90EF90DF9095
:1033E000CF900895CF93DF93EC010E94B319BE01F3
:1033F0000E948C07DF91CF910895CB010E94F219B2
:10340000089590910C01992321F090910D01911153
:1034100009C020910E0130910F01F90132969FEF02
:1034200040E01FC0982F9695969596959F3050F541
:10343000E0910E01F0910F01E90FF11D877021E07D
:1034400030E0A90102C0440F551F8A95E2F7CA0176
:103450009181892B818308959F3F39F04F5F4E30D2
:1034600041F051915813F8CF0DC05111F7CF942F5F
:10347000F5CF9F3F39F0F901E90FF11D97FDFA955E
:1034800082830895089590910C01992321F09091E1
:103490000D01911109C020910E0130910F01F90128
:1034A0003296205F3F4F1FC0982F96959695969520
:1034B0009F30F0F4E0910E01F0910F01E90FF11D42
:1034C000877021E030E0A90102C0440F551F8A95A2
:1034D000E2F7CA018095918189238183089531960D
:1034E000E217F30729F090819813F9CF1082F7CFF4
:1034F000089581E090E0E0910E01F0910F01E80F56
:10350000F91F1082019680319105A9F708959091D5
:10351000CC01892B8093CC01089580959091CC01AA
:1035200089238093CC0108951092CC010895909145
:10353000CB01892B8093CB01089580959091CB018D
:1035400089238093CB0108951092CB010895909127
:10355000CA01892B8093CA01089580959091CA0170
:1035600089238093CA0108951092CA010895809317
:10357000B90108951092B901089580910E019091BA
:103580000F01FC0131969C01205F3F4F80E091913B
:1035900091118F5FE217F307D1F70895E0910E01C3
:1035A000F0910F018091CC018083E0910E01F091A8
:1035B0000F0190818091CB01892B8083E0910E01D6
:1035C000F0910F0190818091CA01892B80838091B5
:1035D000B901882361F0E0910E01F0910F01908113
:1035E000892B80830E94BD1A81111092B9018091AC
:1035F0000E0190910F010C943A0FCF92DF92EF924F
:10360000FF926C01EE24FF24C114D104E104F10403
:1036100021F0C701B60120E101C020E0C72ED82E5D
:10362000E92EFF24C114D104E104F10419F0285F4C
:10363000C701B6016B017C0154E0F694E794D7947E
:10364000C7945A95D1F7C114D104E104F10419F0DB
:103650002C5FC701B6016B017C0142E0F694E79450
:10366000D794C7944A95D1F7C114D104E104F10469
:1036700019F02E5FC701B601DC01CB01B695A79505
:1036800097958795892B8A2B8B2B09F02F5F822F9B
:10369000FF90EF90DF90CF9008958091E401843007
:1036A00021F11092CE0120E488E190E00FB6F89469
:1036B000A895809360000FBE2093600080E00E9478
:1036C000270883B7817F846083BF83B7816083BF0E
:1036D0007894889583B78E7F83BF88E10FB6F8947E
:1036E00080936000109260000FBE089508950895C1
:1036F000CF930E94761B0E9457040E94771BC0E064
:103700008C2F0E944505811104C0CF5FCE30C1F7D8
:1037100001C081E0CF9108950E94BE140E942E0F37
:103720000C94270882E084BD93E095BD9AEF97BD85
:1037300080936E0008952FB7F8948091CF019091F7
:10374000D001A091D101B091D2012FBF0895CF92A5
:10375000DF92EF92FF920F931F932FB7F89440914F
:10376000CF015091D0016091D1017091D2012FBF52
:103770006A017B01EE24FF248C0120E030E0C016BA
:10378000D106E206F30610F4415051099A01281BB4
:10379000390BC9011F910F91FF90EF90DF90CF90EF
:1037A00008951F920F920FB60F9211248F939F933B
:1037B000AF93BF938091CF019091D001A091D1019F
:1037C000B091D2010196A11DB11D8093CF019093BC
:1037D000D001A093D101B093D201BF91AF919F913D
:1037E0008F910F900FBE0F901F9018950E942B0C79
:1037F000F8942FEF87EA91E6215080409040E1F75E
:1038000000C0000087E090EBDC018093EE01909314
:10381000EF01A093F001B093F1019CE088E10FB6B5
:10382000F894A895809360000FBE90936000FFCF3E
:10383000EF92FF920F931F93CF93DF93D82FC0E0A7
:103840008C2F0E94450500E010E0E82EF12CC70106
:10385000002E02C0959587950A94E2F780FD06C078
:103860000F5F1F4F0630110591F709C0602F7C2FA5
:1038700080E00E944D05D813F3CF81E004C0CF5FF4
:10388000CE30F1F680E0DF91CF911F910F91FF9044
:10389000EF900895CF93C82F8CE20E94181C8823C4
:1038A00021F08C2FCF910C94181C80E0CF910895BB
:1038B000CF930E949F1D811102C00E94851DC5E605
:1038C000C15049F00E9457048FE39CE90197F1F73A
:1038D00000C00000F5CF89E20E944A1C811113C18B
:1038E0008AE20E944A1C81110E94851D85E00E9487
:1038F0004A1C81110E94F61B0E94AA1D8093CD01D3
:1039000087E00E944A1C8823A9F18BE10E944A1C8F
:10391000882351F08091CD0181FB222720F991E08D
:10392000922790FB81F90EC08EE00E944A1C8823EA
:1039300061F08091CD0182FB222720F991E092274E
:1039400090FB82F98093CD0115C080E10E944A1C52
:103950009091CD01882341F093FB222720F981E04B
:10396000822780FB93F904C0892F809580FB90F912
:103970009093CD018091CD010E94AE1D0E94BC1D8F
:103980008093ED0180EE0E944A1C882341F08091D3
:10399000ED01982F909590FB80F98093ED0189E3DC
:1039A0000E944A1C882359F08091ED0181FB222757
:1039B00020F991E0922790FB81F98093ED0182EE4E
:1039C0000E944A1C882359F08091ED0182FB222736
:1039D00020F991E0922790FB82F98093ED0186EE29
:1039E0000E944A1C882359F08091ED0183FB222715
:1039F00020F991E0922790FB83F98093ED0183EE0B
:103A00000E944A1C882359F08091ED0184FB2227F3
:103A100020F991E0922790FB84F98093ED0185E3F2
:103A20000E944A1C882359F08091ED0185FB2227D2
:103A300020F991E0922790FB85F98093ED0181E3D5
:103A40000E944A1C882359F08091ED0186FB2227B1
:103A500020F991E0922790FB86F98093ED0181E1B6
:103A60000E944A1C882359F08091ED0187FB222790
:103A700020F991E0922790FB87F98093ED018091E6
:103A8000ED010E94C01D8091ED0187FB882780F920
:103A900080930D0187E20E944A1CC82F8EE10E948C
:103AA0004A1C8111C2608FE10E944A1C8111C460CE
:103AB00080E20E944A1C8111C86081E20E944A1C77
:103AC0008111C06182E20E944A1C8111C06283E2BE
:103AD0000E944A1C8111C06484E20E944A1C88230F
:103AE00011F0C06802C0CC2329F08C2F0E94B71DB2
:103AF0006C2F03C00E94B31D682F70E080E090E03F
:103B0000CF910C947A18CF9108956DEE7EEF80E0FE
:103B100090E00E94F12360E082E090E00E94DF23C9
:103B200060E083E090E00E94DF2360E084E090E0CA
:103B30000E94DF2360E085E090E00C94DF2380E0CA
:103B400090E00E94D92321E08D3E9E4F09F020E0B5
:103B5000822F089582E090E00C94D123682F82E0B8
:103B600090E00C94DF2383E090E00C94D123682F45
:103B700083E090E00C94DF2384E090E00C94D12368
:103B8000682F84E090E00C94DF238091D50180FFC2
:103B90000BC06091130185E0689FB00111247595F9
:103BA0006795759567952BC081FF09C060911301DA
:103BB00085E0689FB00111247595679520C082FF4C
:103BC00007C06091130185E0689FB001112417C000
:103BD0009091D6019923D1F060911201961788F740
:103BE0002091130185E0289F90011124929FA0014C
:103BF000939F500D112470E0CA010E94A3236038E6
:103C0000710540F46115710539F002C065E070E09E
:103C1000862F08958FE7089581E008958091D5015A
:103C200080FF08C06091110170E0759567957595EA
:103C3000679521C081FF06C06091110170E0759504
:103C4000679519C082FF04C06091110170E010C037
:103C50009091D6019923C1F0609110019617A0F7B9
:103C600080911101899FC001112470E00E94A3235B
:103C70006038710528F46115710521F0862F0895CB
:103C80008FE7089581E0089561E070E0F4CF803F10
:103C900021F40E94C51D819504C0813F29F40E9432
:103CA000C51D8093D9010895823F21F40E94C51D4E
:103CB000819504C0833F29F40E94C51D8093D801DB
:103CC0000895893F19F40E940E1E05C08A3F31F401
:103CD0000E940E1E81958093DA0108958B3F21F496
:103CE0000E940E1E819504C08C3F29F40E940E1E76
:103CF0008093DB010895843F21F48091D701816096
:103D000017C0853F21F48091D701826011C0863FA2
:103D100021F48091D70184600BC0873F21F480910A
:103D2000D701886005C0883F31F48091D701806158
:103D30008093D70108958D3F21F48091D501816052
:103D40000BC08E3F21F48091D501826005C08F3F6A
:103D500029F48091D50184608093D5010895803F36
:103D600039F48091D90187FF6CC01092D90169C0E4
:103D7000813F29F48091D9011816BCF362C090915B
:103D8000D801823F29F497FF5CC01092D80159C036
:103D9000833F19F41916CCF354C0893F41F4809144
:103DA000DA0118160CF04DC01092DA014AC08A3FB1
:103DB00029F48091DA0187FF44C0F6CF8B3F39F4B4
:103DC0008091DB0187FF3DC01092DB013AC08C3F40
:103DD00029F48091DB011816BCF333C0843F21F431
:103DE0008091D7018E7F17C0853F21F48091D70144
:103DF0008D7F11C0863F21F48091D7018B7F0BC04E
:103E0000873F21F48091D701877F05C0883F31F437
:103E10008091D7018F7E8093D70113C08D3F21F40D
:103E20008091D5018E7F0BC08E3F21F48091D5010A
:103E30008D7F05C08F3F29F48091D5018B7F8093C2
:103E4000D5018091D80181110EC08091D9018111D5
:103E50000AC08091DA01811106C08091DB018111D5
:103E600002C01092D601089587ED91E00E94450F9F
:103E70000E949B1B9093D4018093D30108951F93BC
:103E8000CF93DF938091D3019091D4010E94A71B1F
:103E9000AC019091D601992321F02091140130E0DA
:103EA00006C0209115018AE0289F90011124421735
:103EB000530708F486C08091D801C091D901D091F0
:103EC000DA011091DB01811107C0C11176C0D11157
:103ED00074C0111172C075C09F3F19F09F5F90931D
:103EE000D601181624F40E94C51D8093D801809134
:103EF000D80187FF05C00E94C51D81958093D80118
:103F00001C1624F40E94C51D8093D9018091D9010B
:103F100087FF05C00E94C51D81958093D9016091DE
:103F2000D801662339F1C091D901CC2319F1772743
:103F300067FD7095872F972F0E94B42223E333E308
:103F400043E35FE30E9418230E9481226093D8011B
:103F50006C2F772767FD7095872F972F0E94B422CB
:103F600023E333E343E35FE30E9418230E948122AB
:103F70006093D9011D1624F40E940E1E8093DA016D
:103F80008091DA0187FF05C00E940E1E8195809303
:103F9000DA01111624F40E940E1E8093DB01809139
:103FA000DB0187FF05C00E940E1E81958093DB0117
:103FB000DF91CF911F910C94341F9F3F09F08ECF5A
:103FC00096CFDF91CF911F910895E7EDF1E085E065
:103FD000DF011D928A95E9F71092D6011092D50162
:103FE0000895833081F128F4813059F08230D1F086
:103FF0000895853009F449C0B8F1863009F456C0F7
:10400000089580911501262F30E0280F311D2F3F94
:10401000310524F4680F6093150108958FEF8093A4
:104020001501089580911401262F30E0280F311DCD
:104030002F3F310524F4680F6093140108958FEF2A
:1040400080931401089580911301262F30E0280FEA
:10405000311D2F3F310524F4680F6093130108953B
:104060008FEF80931301089580911201262F30E085
:10407000280F311D2F3F310524F4680F6093120182
:1040800008958FEF80931201089580911101262FDA
:1040900030E0280F311D2F3F310524F4680F609365
:1040A000110108958FEF80931101089580911001FF
:1040B000262F30E0280F311D2F3F310524F4680FE3
:1040C0006093100108958FEF80931001089583305D
:1040D00011F128F4813049F0823091F00895853053
:1040E00081F120F18630C1F10895809115016817A2
:1040F00020F4861B809315010895109215010895F0
:1041000080911401681720F4861B80931401089590
:1041100010921401089580911301681720F4861BF2
:104120008093130108951092130108958091120154
:10413000681720F4861B80931201089510921201D3
:10414000089580911101681720F4861B8093110156
:10415000089510921101089580911001681720F4BC
:10416000861B8093100108951092100108950F93FB
:104170001F938D3109F46BC008F03FC08E3009F4F5
:104180007FC0C0F4873009F469C068F4863009F054
:10419000B1C08091CD01817F8E7F8093CD0181E080
:1041A0008093DD01A8C0883009F4A2C08B3009F4E7
:1041B0009FC0A0C0863109F49BC078F4803109F417
:1041C00072C0813109F096C00E94BE1490910D0119
:1041D00081E0892780930D018BC0893109F488C063
:1041E0008B3109F087C08091CD0181FB222720F916
:1041F00091E0922790FB81F94CC0853309F470C09F
:1042000048F4873209F46CC008F459C0893209F4C3
:1042100067C070C0833438F48A3308F04EC08833E6
:1042200009F466C067C0833409F45AC0883409F0C1
:1042300061C00E94BE140FEF13ED20E30150104047
:104240002040E1F700C000000E94F61B51C00E9410
:104250003B220E942E0F0E9427084AC09091CD0158
:10426000892F8095817080FB90F929F09660986085
:104270009093CD0140C0997F977F9093CD0138C036
:104280008091CD0182FB222720F991E0922790FBBB
:1042900082F98093CD01992359F18091CD018160FC
:1042A0008093CD0125C08091CD0183FB222720F989
:1042B00091E0922790FB83F9ECCF895301C08D5197
:1042C00041E050E060E070E08A019B0104C0000F13
:1042D000111F221F331F8A95D2F7C901B80104C0EC
:1042E00061E070E080E090E00E947A180E94BE14C5
:1042F00081E001C080E01F910F91089580E0089552
:1043000080E00895CF93C82F8091DD01813079F04E
:1043100018F08230E9F187C0E0910E01F0910F01B1
:104320008081813169F0823209F07FC009C0E0915B
:104330000E01F0910F018081813111F0823261F420
:104340008C2F0E947E21811104C08C2F0E94B720E7
:104350001DC081E090E01AC08C2F0E948021811145
:1043600014C0C43179F048F4CB3079F0C03109F091
:1043700060C082E08093DD0108C0C93219F0C83303
:1043800021F057C01092DD0154C081E0817053C00C
:10439000C93289F118F5C43171F1A8F4C73009F0B8
:1043A00046C08AE08093150194E19093140193E054
:1043B000909313018093120188E08093110188E2A9
:1043C0008093100134C0CE51C63088F5EC2FF0E058
:1043D000E65DFE4F80818093DC0129C0CE34E9F098
:1043E00020F4CB3421F56AE013C0C13579F0C23531
:1043F000F1F461E00DC08091DC01882319F0109286
:10440000DC0115C081E08093DD0115C061E006C0CC
:104410008091DC010E94F11F0AC06AE08091DC01FA
:104420000E94672004C01092DD0180E004C081E09A
:1044300002C080E0ABCFCF910895E1E8F0E0808149
:10444000886080838081816080838FB7F89493E057
:104450009093890090ED909388008FBF0895EFE6C8
:10446000F0E08081826080830895EFE6F0E0808153
:104470008D7F80830895EFE6F0E0908182E08927C8
:10448000808308951F920F920FB60F9211242F93DD
:104490003F934F935F936F937F938F939F93AF93CC
:1044A000BF93EF93FF938091DE019091DF0101961E
:1044B0009093DF018093DE01811103C082E00E94AE
:1044C0002708E091DF01E695E695F0E0E456FB4F22
:1044D000E4918091DE018E1303C080E00E942708E2
:1044E000FF91EF91BF91AF919F918F917F916F91CC
:1044F0005F914F913F912F910F900FBE0F901F90A2
:10450000189504D06894B1118DC0089570D088F0CA
:104510009F5790F0B92F9927B751A0F0D1F0660FAF
:10452000771F881F991F1AF0BA95C9F712C0B130CA
:1045300081F077D0B1E0089574C0672F782F882775
:10454000B85F39F0B93FCCF3869577956795B39509
:10455000D9F73EF490958095709561957F4F8F4F78
:104560009F4F0895E89409C097FB3EF4909580957D
:10457000709561957F4F8F4F9F4F9923A9F0F92F29
:1045800096E9BB279395F695879577956795B795A7
:10459000F111F8CFFAF4BB0F11F460FF1BC06F5F8D
:1045A0007F4F8F4F9F4F16C0882311F096E911C09F
:1045B000772321F09EE8872F762F05C0662371F0C0
:1045C00096E8862F70E060E02AF09A95660F771FD4
:1045D000881FDAF7880F9695879597F9089557FD04
:1045E0009058440F551F59F05F3F71F04795880F61
:1045F00097FB991F61F09F3F79F0879508951216F8
:1046000013061406551FF2CF4695F1DF08C01616A3
:1046100017061806991FF1CF869571056105089454
:104620000895E894BB2766277727CB0197F908956B
:104630000BD078C069D028F06ED018F0952309F01F
:104640005AC05FC01124EECFCADFA0F3959FD1F30B
:10465000950F50E0551F629FF001729FBB27F00D30
:10466000B11D639FAA27F00DB11DAA1F649F662785
:10467000B00DA11D661F829F2227B00DA11D621FD4
:10468000739FB00DA11D621F839FA00D611D221F8E
:10469000749F3327A00D611D231F849F600D211D72
:1046A000822F762F6A2F11249F5750408AF0E1F015
:1046B00088234AF0EE0FFF1FBB1F661F771F881F5E
:1046C00091505040A9F79E3F510570F014C0AACFF9
:1046D0005F3FECF3983EDCF3869577956795B79549
:1046E000F795E7959F5FC1F7FE2B880F911D969573
:1046F000879597F9089597F99F6780E870E060E0E3
:1047000008959FEF80EC089500240A94161617066A
:1047100018060906089500240A94121613061406B2
:1047200005060895092E0394000C11F4882352F015
:10473000BB0F40F4BF2B11F460FF04C06F5F7F4FCD
:104740008F4F9F4F089597FB072E16F4009407D0C4
:1047500077FD09D00E94BD2307FC05D03EF490955B
:1047600081959F4F0895709561957F4F0895EE0F45
:10477000FF1F0590F491E02D0994AA1BBB1B51E18A
:1047800007C0AA1FBB1FA617B70710F0A61BB70BC1
:10479000881F991F5A95A9F780959095BC01CD0166
:1047A0000895F999FECF92BD81BDF89A992780B5F9
:1047B0000895A8E1B0E042E050E00C94F923262FE0
:1047C000F999FECF92BD81BDF89A019700B4021607
:1047D00039F01FBA20BD0FB6F894FA9AF99A0FBEB5
:1047E00008950196272F0E94E0230C94DF23DC011B
:1047F000CB01FC01F999FECF06C0F2BDE1BDF89AEC
:10480000319600B40D9241505040B8F70895F89495
:02481000FFCFD8
:1048120020022908B708940860082C080101BA018F
:1048220028080A03140A3F4D36395D041004DA03DE
:10483200A10334034D0366037F030102030405064B
:04484200070809005A
:00000001FF

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

@ -0,0 +1,11 @@
# ErgoDox EZ Plums Configuration
## Changelog
* Apr 23, 2016 (v0.1.0):
* Shortcut for iTerm2 quake style dropdown (Ctrl+`)
* Shortcut for screen/tmux (Ctrl+a)
* Shortcut for shush (Hyper+m)
* Combo modifier for LGUI + LALT
![Plums](plums.png)

@ -0,0 +1,231 @@
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
#define MDIA 2 // media
#define CNTL 3 // control layer
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | L1/` | 1 | 2 | 3 | 4 | 5 |CmdSpc| | - | 6 | 7 | 8 | 9 | 0 | = |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* |Meh/Tab | Q | W | E | R | T | STab | | L3 | Y | U | I | O | P | Meh/\ |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* |Hyp/Esc | L3/A | S | D | F | G |------| |------| H | J | K | L | L2/; | Hyp/' |
* |--------+------+------+------+------+------| Tab | |AltGui|------+------+------+------+------+--------|
* | LShift | L3/Z | X | C | V | B | | | | N | M | , | . | L2// | RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |LCtrl | LAlt | LGui |Left |Right | | UP | Down | [ | ] | L1 |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | LCtl | LGui | | LAlt |ShfGui|
* ,-------|------|------| |------+--------+------.
* | | | Home | | PgUp | | |
* | Backsp|Delete|------| |------| Enter | Space |
* | | | 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
LT(SYMB,KC_GRV), KC_1, KC_2, KC_3, KC_4, KC_5, LGUI(KC_SPC),
MEH_T(KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, S(KC_TAB),
ALL_T(KC_ESC), LT(CNTL,KC_A), KC_S, KC_D, KC_F, KC_G,
KC_LSFT, LT(CNTL,KC_Z), KC_X, KC_C, KC_V, KC_B, KC_TAB,
KC_LCTL, KC_LALT, KC_LGUI, KC_LEFT, KC_RIGHT,
KC_LCTL, KC_LGUI,
KC_HOME,
KC_BSPC, KC_DELETE, KC_END,
// right hand
KC_MINS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
KC_FN3, KC_Y, KC_U, KC_I, KC_O, KC_P, MEH_T(KC_BSLS),
KC_H, KC_J, KC_K, KC_L, LT(MDIA,KC_SCLN), ALL_T(KC_QUOT),
LALT(KC_LGUI), KC_N, KC_M, KC_COMM, KC_DOT, LT(MDIA,KC_SLSH), KC_RSFT,
KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, KC_FN1,
KC_LALT, S(KC_LGUI),
KC_PGUP,
KC_PGDN,KC_ENT, KC_SPC
),
/* Keymap 1: Symbol Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | ! | @ | { | } | | | < | | > | : | 7 | 8 | 9 | / | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | ( | ) | ` |------| |------| ; | 4 | 5 | 6 | * | Prnt |
* |--------+------+------+------+------+------| F14 | | F15 |------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | - | Entr |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | 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,S(KC_COMM),
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_F14,
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,
S(KC_DOT), KC_COLN, KC_7, KC_8, KC_9, KC_BSLS, KC_F12,
KC_SCLN, KC_4, KC_5, KC_6, KC_ASTR, KC_PSCR,
KC_F15, KC_AMPR, KC_1, KC_2, KC_3, KC_MINS, KC_ENT,
KC_0, KC_DOT, KC_EQL, KC_PLUS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/* Keymap 2: Media Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | |------| |------| | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | | | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Prev | Next | | Prev | Next |
* ,------|------|------| |------+------+------.
* | | | VolUp| | VolUp| | |
* | Play | Mute |------| |------| Mute | Play |
* | | | VolDn| | VolDn| | |
* `--------------------' `--------------------'
*/
// Control
[MDIA] = KEYMAP(
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_MPRV, KC_MNXT,
KC_VOLU,
KC_MPLY, KC_MUTE, KC_VOLD,
// 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_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_MPRV, KC_MNXT,
KC_VOLU,
KC_VOLD, KC_MUTE, KC_MPLY
),
/* Keymap 3: Control Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | Sleep | | | | | | Pwr | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | MsUp | | | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |MsLeft|MsDown|MsRght| Lclk |------| |------| Lft | Down | Up | Right| | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | Rclk | | | | | | | | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// Control
[CNTL] = KEYMAP(
KC_SLEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PWR,
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_BTN1,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN2, 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_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_LEFT, KC_DOWN, KC_UP, KC_RIGHT, 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
),
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB),
[2] = ACTION_LAYER_TAP_TOGGLE(MDIA),
[3] = ACTION_LAYER_TAP_TOGGLE(CNTL) // 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;
case 3:
ergodox_right_led_3_on();
break;
default:
// none
break;
}
};

@ -0,0 +1,36 @@
# Techtomas Configuration
## Base Layer
The base layer is a merge of what I liked with the default layout and the ordinary layout. The thumb cluster is more like the Kinesis advantage and the top row of the cluster is convient for use on the mac.
* The Caps Lock postion handles [Hyper/Esc](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
* The Tab key toggles MEH.
* The two vertical mods on the left board are Shift+Tab and Tab.
* The two vertical mods on the right board are Control Layer tap/toggle and Alt+Cmd.
* The HYPER and MEH key are made in the same location on the right side of the board as well. Using Keyboard Maestro for OS X makes one-handed shortcuts very easy.
## Symbol Layer
The symbol layer can be tap/toggled through the bottom right key and also toggled holding the tilde/grave key in the upper left corner. I haven't used the symbol layer enough to tell if this was a good place or not but it made sense in my head
The bottom two vertical mods are set to F14 and F15 which is the default for changing screen brightness on the mac
## Media Layer
/ & ; will toggle the media layer which has play and volume controls assigned to the thumb cluster. I found this an easy way to quickly play/pause
## Control Layer
The a and z keys toggle the control layer.
On the left board you have mouse control with left & right click in the location of the G and B keys.
On the right board you have vim-style arrow keys using hjkl
The thumb cluster and mods all pass down to this layer.
## Changelog
* Apr 29, 2016 (V1.1):
* Added F14 and F15 to symbol layer
* Added control layer toggle to A key.
* Apr 28, 2016 (V1.0):
* Modified config based on the default layout plus inspiration from the ordinary layout

@ -0,0 +1,1166 @@
:100000000C94BB020C9402030C9402030C940203A4
:100010000C9402030C9402030C9402030C9402034C
:100020000C9402030C9402030C94D20C0C94A40DB7
:100030000C9402030C9402030C9402030C9402032C
:100040000C9402030C9470220C9402030C9402038F
:100050000C9402030C94001C0C9402030C940203F5
:100060000C9402030C9402030C9402030C940203FC
:100070000C9402030C9402030C9402030C940203EC
:100080000C9402030C9402030C9402030C940203DC
:100090000C9402030C9402030C9402030C940203CC
:1000A0000C9402030C9402030C940203110E330E01
:1000B000210F330E210F780E9B0E210FF00E030F30
:1000C000EF11EF112C122C126F12AD12C614C614C0
:1000D000C612C614C713C7139A14C614C614B11493
:1000E0000000F0A1F0A2F0A335812B77297FE10079
:1000F000E00000001E00140004831D83E2004D0098
:100100001F001A0016001B00E3004C00200008002E
:100110000700060050002A00210015000900190000
:100120004F004A00220017000A0005000000E0000E
:100130002C082B0200002B000000E3002D00C30060
:100140000000E3040000E20023001C000B0011008B
:100150000000E302240018000D00100052004B00C4
:1001600025000C000E00360051002C002600120065
:100170000F0037002F002800270013003382388239
:1001800030004E002E003177347FE500C1000000C2
:100190000100010001000100010000003A001E0200
:1001A00020022202010001003B001F022102230263
:1001B000010001003C002F0226022F000100010077
:1001C0003D00300227023000010001003E003102F4
:1001D0003500350200000100010036020000690010
:1001E000000001000100370200006A000000010069
:1001F0003F003302330024020000010040002400CD
:1002000021001E00270001004100250022001F00E0
:100210003700010042002600230020002E000100CC
:100220004300310025022D002E020100440045004C
:10023000460028000100000001000100010001004B
:100240000100000001000100010001000100AA00FE
:1002500001000100010001000100A80001000100EF
:10026000010001000100AE000100010001000100D9
:100270000100A90001000100010001000000AC0024
:1002800001000100000001000000AB0001000100BE
:10029000000001000000AC000100010001000100AD
:1002A0000000AB0001000100010001000100A900F5
:1002B00001000100010001000100AE000100010089
:1002C000010001000100A80001000100010001007F
:1002D0000100AA000100010001000100010000006E
:1002E000A600010001000100010000000100010062
:1002F000010001000100010001000100F200010005
:10030000010001000100F000F10001000100010006
:1003100001000100F30001000100010001000100E3
:10032000F400F50000000100A5000100000001003C
:1003300000000100010001000000010000000100B8
:100340000100010050000100000001000100010057
:1003500051000100010001000100010052000100F4
:1003600001000100010001004F0001000100010037
:100370000100010001000100010001000100010075
:100380000100010001000000160345007200670033
:100390006F0044006F007800200045005A00000004
:1003A00016034500720067006F0044006F0078007C
:1003B000200045005A0000000403090409026D00F2
:1003C000040100A0FA090400000103010100092151
:1003D00011010001223F000705810308000A0904FA
:1003E00001000103010200092111010001224D0059
:1003F0000705820308000A09040200010300000047
:100400000921110100012236000705830308000AB3
:100410000904030001030000000921110100012269
:1004200039000705840310000112011001000000CB
:1004300008EDFE071301000102000105010906A1F4
:1004400001050719E029E7150025019508750181C7
:100450000205081901290595057501910295017597
:100460000391010507190029771500250195787575
:10047000018102C005010980A10185021601002643
:10048000B7001A01002AB700751095018100C00558
:100490000C0901A1018503160100269C021A010026
:1004A0002A9C02751095018100C005010902A10175
:1004B0000901A10005091901290515002501950566
:1004C000750181029501750381010501093009312A
:1004D0001581257F95027508810609381581257FCC
:1004E000950175088106050C0A38021581257F954E
:1004F0000175088106C0C005010906A1010507199B
:10050000E029E7150025019508750181029501751F
:1005100008810105081901290595057501910295C4
:1005200001750391010507190029FF150025FF95A5
:100530000675088100C000000000000000000000F7
:1005400000010204060A0F17202C3A4A5D71879DAC
:10055000B3C7DAE9F5FCFFFCF5E9DAC7B39D8771AB
:100560005D4A3A2C20170F0A060402010000000021
:1005700000000000000011241FBECFEFDAE0DEBF54
:10058000CDBF04B603FE27C08091EE019091EF012C
:10059000A091F001B091F1018730904BA740B04B92
:1005A000D1F41092EE011092EF011092F00110922E
:1005B000F10114BE84B7877F84BF0FB6F894A89565
:1005C00080916000886180936000109260000FBE8F
:1005D000E0E0FFE3099511E0A0E0B1E0ECE8F8E429
:1005E00002C005900D92A433B107D9F721E0A4E32E
:1005F000B1E001C01D92AE3EB207E1F70E94130ABE
:100600000C9444240C94000061110BC0FC01828105
:10061000882321F085EE0E94831003C085EE0E949E
:100620004B1180E090E0089508956091B1017091C0
:10063000B2018091B3019091B4010E94291B569898
:100640005E9825982D9826982E9827982F98823076
:1006500039F0833041F0813041F4259A2D9A089584
:10066000269A2E9A0895279A2F9A08950C94150386
:1006700056985E9825982D9826982E9827982F980A
:100680008FEF90E0909389008093880090938B0087
:1006900080938A0090938D0080938C00259A2D9AE8
:1006A0002FEF80E792E0215080409040E1F700C0BA
:1006B0000000269A2E9A2FEF80E792E0215080408A
:1006C0009040E1F700C00000279A2F9A2FEF80E7B3
:1006D00092E0215080409040E1F700C00000259852
:1006E0002D982FEF80E792E0215080409040E1F775
:1006F00000C0000026982E982FEF80E792E021504E
:1007000080409040E1F700C0000027982F9856984D
:100710005E9825982D9826982E9827982F980895BA
:1007200089EA8093800089E08093810024982C9846
:100730003F988AB18F748AB96E98479A8BB1806B53
:100740008BB9769A0E9438030C94140380E280934C
:1007500000018091340181110EC00E94F50381E0F7
:10076000809334012FEF83ED90E32150804090403F
:10077000E1F700C0000080E40E94FB0380930001C9
:1007800081112EC00E94250480930001811128C090
:100790000E94250480930001811122C08FE30E94F2
:1007A00025048093000181111BC00E941D0480E478
:1007B0000E94FB0380930001811112C08CE00E9413
:1007C00025048093000181110BC00E9425048093B1
:1007D0000001811105C08FE30E9425048093000170
:1007E0000E941D048091000108951092B9008AE0D2
:1007F0008093B800089594EA9093BC009091BC0057
:1008000097FFFCCF9091B900987F983021F09031FC
:1008100011F081E008958093BB0084E88093BC00D0
:100820008091BC0087FFFCCF8091B900887F883120
:1008300011F0803471F780E0089584E98093BC0062
:100840008091BC0084FDFCCF08958093BB0084E8B8
:100850008093BC008091BC0087FFFCCF9091B900D1
:10086000987F81E0983209F480E0089584E88093CD
:10087000BC008091BC0087FFFCCF8091BB00089535
:1008800080910001811115C080E40E94FB038093D8
:10089000000181110CC082E10E94250480930001B7
:1008A000811105C08FEF0E942504809300010E94F2
:1008B0001D0484B1807F84B985B1807F85B98AB1F8
:1008C000837F8AB98BB1837F8BB93E984698089510
:1008D0000E94A603809300010E94400480B38C70A4
:1008E00080BB81B3836F81BBA6E3B1E0E4E4F1E0B8
:1008F0008EE08E0F11921D928E13FCCF0C949003FC
:10090000BF92CF92DF92EF92FF920F931F93CF93FC
:10091000DF9380910001882379F0809135018F5F0A
:1009200080933501811108C00E94A60380930001C5
:10093000811102C00E94380306E311E0C0E0D0E05C
:10094000DD24D39482E0C82EEE24E394F12CC7304A
:10095000D10500F580910001811164C080E40E94FE
:10096000FB0380930001811112C082E10E942504E3
:100970008093000181110BC0C7010C2E01C0880FAC
:100980000A94EAF780950E942504809300010E9452
:100990001D0448C0CA30A1F028F4C83059F0C9304D
:1009A00061F005C0CC3089F070F0CD3089F0209A2C
:1009B000289810C0219A29980DC0229A2A980AC016
:1009C000239A2B9807C0529A01C0539A5B9802C091
:1009D0003E9A469890EA9A95F1F79FB1799902C0AC
:1009E00082E001C080E091709D25982B7C9902C027
:1009F00084E001C080E0892B7D9902C038E001C00D
:100A000030E0832B7E9902C020E101C020E0822BE0
:100A10009FB19095991F9927991F9295990F907E54
:100A2000892B0FC080910001811149C080E40E9490
:100A3000FB0380930001882379F1B12C0E941D04EF
:100A40008B2DF8019081981719F08083C0920101D5
:100A50000E94400421960F5F1F4FCE30D10509F050
:100A600076CF80910101882361F18150809301014B
:100A7000882339F08FE99FE00197F1F700C000006B
:100A800020C0A4E4B1E0E6E3F1E0CF01825F919100
:100A90009D938E13FCCF15C083E10E9425048093A3
:100AA00000018111CACF81E40E94FB038093000101
:100AB0008111C3CF0E943604B82EB094BFCF80E01E
:100AC000C0CF0E94360381E0DF91CF911F910F913B
:100AD000FF90EF90DF90CF90BF900895E82FF0E067
:100AE000EC5BFE4F808108950895089596E0799F0C
:100AF000F001112494E5899FE00DF11D1124E60F0A
:100B0000F11DEE0FFF1FE851FF4F8591949108955D
:100B1000880F991FFC01E05AF04085919491089547
:100B2000880F991FFC01E052FF4F85919491089521
:100B30000F931F93CF93DF93EC018115904350F5F2
:100B4000C11580E2D80708F0B3C0CB3BD10590F4C3
:100B5000C83AD10508F05AC0C53AD10508F04BC0D3
:100B6000C430D10508F0BBC1219709F0B5C101E03F
:100B700010E0F5C1CF3FD10511F008F0B0C1C03F82
:100B8000D10508F092C0CE01805E9109089708F463
:100B9000A6C1A2C1C11591E5D907A8F4C23020E5CC
:100BA000D20708F09EC0C11580E5D80709F485C0BA
:100BB00008F091C0C11520E4D20708F08DC1DD27EF
:100BC0008E01106CCCC1C11580E8D80758F4C1154E
:100BD00090E7D90708F07CC1C11520E6D20708F4D8
:100BE00022C17AC1C11580E9D80708F075C1DF704C
:100BF0008E01106AB4C1C53AD10509F472C1C63A72
:100C0000D10509F071C102E810E4A9C1C83AD105C3
:100C100009F46DC1C93AD10509F46CC1CA3AD105CC
:100C200009F46BC1CB3AD10509F46AC1CC3AD105BC
:100C300009F469C1CD3AD10509F468C1C03BD105B9
:100C400009F467C1CE3AD10509F466C1CF3AD1059E
:100C500009F465C1C13BD10509F464C1C23BD105AA
:100C600009F463C1C33BD10509F462C1C43BD1059A
:100C700009F461C1C53BD10509F460C1C63BD1058A
:100C800009F45FC1C73BD10509F45EC1C83BD1057A
:100C900009F45DC1C93BD10509F45CC1CA3BD1056A
:100CA00009F45BC100E014E45AC18E01106557C11C
:100CB000CE019F700E94900553C10E94EA149FEFDD
:100CC00024E38CE0915020408040E1F700C0000018
:100CD0000E94251C44C18091CD0181608093CD018B
:100CE0003EC10E94CE1D811102C00E94B41D0E940F
:100CF000EB1D90E09093EE018093ED01C23090E502
:100D0000D90721F48091ED01816086C0C43020E5CF
:100D1000D20721F48091ED0182607EC0C63080E56B
:100D2000D80721F48091ED01846076C0C83090E549
:100D3000D90719F48091ED0127C0CA3020E5D20708
:100D400021F48091ED01806167C0CC3080E5D80747
:100D500021F48091ED0180625FC0CE3090E5D9072B
:100D600021F48091ED01806457C0C03120E5D207A5
:100D700021F48091ED0180684FC0C23180E5D80731
:100D800029F48091ED018460886046C0C33090E50D
:100D9000D90721F48091ED018E7F3EC0C53020E55A
:100DA000D20721F48091ED018D7F36C0C73080E5F8
:100DB000D80721F48091ED018B7F2EC0C93090E5DA
:100DC000D90719F48091ED0126C0CB3020E5D20778
:100DD00021F48091ED018F7E1FC0CD3080E5D807D2
:100DE00021F48091ED018F7D17C0CF3090E5D907B8
:100DF00021F48091ED018F7B0FC0C13120E5D20736
:100E000021F48091ED018F7707C0C331D04531F4D3
:100E10008091ED018B7F877F8093ED018091ED01C3
:100E20000E94EF1D9CC08D2F99278F7099278130CC
:100E30009105D9F49E012370332702C0880F991FB2
:100E40002A95E2F79C688E0144E0000F111F4A9535
:100E5000E1F700271370802B912B53E0CC0FDD1F9F
:100E60005A95E1F7C076DD272FC08230910531F425
:100E7000DC2FCC278E01016F106A71C08330910581
:100E800069F4CE018370992701E010E002C0000FE1
:100E9000111F8A95E2F7C8019C680FC0049709F0FA
:100EA0005EC0CE018370992701E010E002C0000F00
:100EB000111F8A95E2F7C8019A6823E0CC0FDD1F65
:100EC0002A95E1F7C07ED7708C010C2B1D2B47C0F3
:100ED000DF708E01106243C000E010E040C08E0160
:100EE0003EC001E810E43BC003E810E438C002EE65
:100EF00014E435C009EE14E432C00AEE14E42FC045
:100F000005EB14E42CC006EB14E429C007EB14E451
:100F100026C00CEC14E423C00DEC14E420C003E85C
:100F200015E41DC00AE815E41AC002E915E417C06B
:100F300004E915E414C001E216E411C003E216E46A
:100F40000EC004E216E40BC005E216E408C006E297
:100F500016E405C007E216E402C00AE216E4C8017E
:100F6000DF91CF911F910F91089596E0799FF00145
:100F7000112494E5899FE00DF11D1124E60FF11D68
:100F8000EE0FFF1FE851FF4F85919491803E910530
:100F9000E0F4803C910558F58133910509F46FC068
:100FA00048F48932910509F463C08A32910509F445
:100FB0006DC072C089339105E9F082389105D1F096
:100FC0008533910509F44DC067C0833E910581F1D9
:100FD00038F4803E9105B9F0823E9105D9F05CC0AD
:100FE000863E910561F1873E9105A1F155C00E94B1
:100FF000880508952091ED0120FD02C021FF4CC01D
:1010000080EE90E049C08091ED0180FFF9CF89E347
:1010100090E042C08091ED0182FF0EC08091ED0111
:1010200084FF03C080E090E037C083EE90E034C0DE
:101030008091ED0182FFF2CF82EE90E02DC0809191
:10104000ED0183FF0BC08091ED0184FDEBCF87EEB6
:1010500090E022C08091ED0183FFF5CF86EE90E015
:101060001BC08091ED0185FF07C089E290E014C0AC
:101070008091ED0185FFF9CF85E390E00DC080916F
:10108000ED0186FF07C08AE290E006C08091ED0185
:1010900086FFF9CF81E390E00E94980508950895B6
:1010A0000C944F08809162010895CF93DF9300D094
:1010B0001F92CDB7DEB79C018091E401843019F511
:1010C00093E099833B832A839093E9008FEF90917B
:1010D000E800815095FD06C095ED9A95F1F7000066
:1010E0008111F5CF8091E80085FF0DC040E050E010
:1010F00063E070E0CE0101960E94C20A8091E80090
:101100008E778093E8000F900F900F90DF91CF9132
:101110000895CF93DF9300D01F92CDB7DEB7209113
:10112000E401243021F522E029839B838A8383E034
:101130008093E9008FEF9091E800815095FD06C003
:1011400095ED9A95F1F700008111F5CF8091E800B7
:1011500085FF0DC040E050E063E070E0CE010196F5
:101160000E94C20A8091E8008E778093E8000F9079
:101170000F900F90DF91CF9108952091E4012430DA
:10118000F1F422E02093E9002FEF3091E8002150A4
:1011900035FD06C035ED3A95F1F700002111F5CF88
:1011A0002091E80025FF0BC040E050E065E070E0D2
:1011B0000E94C20A8091E8008E778093E80008952B
:1011C000CF93DF93EC019091E401943009F046C095
:1011D00080910C018823D9F080910D018823B9F00A
:1011E0009093E9008FEF9091E800815095FD06C043
:1011F00095E19A95F1F700008111F5CF8091E80013
:1012000085FF2CC040E050E060E170E017C081E055
:101210008093E9008FEF9091E800815095FD06C022
:1012200095ED9A95F1F700008111F5CF8091E800D6
:1012300085FF14C040E050E068E070E0CE010E94FD
:10124000C20A8091E8008E778093E80080E1FE0179
:10125000A2E5B1E001900D928A95E1F7DF91CF917F
:1012600008958091E301811109C00E94570C0E94EA
:10127000B40C8091E20084608093E20008951092A3
:10128000E301089508950C945D220E94BB1B0E9407
:1012900063220E945A0F0C94500842E061EC81E0F6
:1012A0000E94D10B42E061EC82E00E94D10B42E04F
:1012B00061EC83E00E94D10B42E161EC84E00C948C
:1012C000D10B8091E601833009F455C030F48130B0
:1012D00071F0823009F48EC008958A3009F47AC022
:1012E0008B3009F460C0893009F09CC020C0809127
:1012F000E501813A09F096C08091E800877F8093EC
:10130000E8008091E9019091EA01892B21F460E1E4
:1013100082E591E003C060E080E090E070E00E9430
:101320000D0B8091E8008B778093E8000895809101
:10133000E501813209F076C08091E9019091EA01DE
:10134000009719F0039709F06DC08091E800877F3E
:101350008093E8008091E80082FD05C08091E4015F
:101360008111F8CF5FC08091F1008093620180917C
:10137000E8008B7753C08091E501813A09F052C0B3
:101380008091E9019091EA01892B09F04BC080918D
:10139000E800877F8093E8008091E80080FFFCCF21
:1013A00080910C0136C08091E5018132D9F58091A0
:1013B000E9019091EA01892BA9F58091E800877FE6
:1013C0008093E8000E94060C8091E70180930C0155
:1013D0000C94EA148091E501813221F58091E800B6
:1013E000877F8093E8000E94060C8091E80180933B
:1013F000630108958091E501813AA1F48091E800AC
:10140000877F8093E8008091E80080FFFCCF809187
:1014100063018093F1008091E8008E778093E8006B
:101420000C94060C089584B7877F84BF0FB6F89498
:10143000A8958091600088618093600010926000A0
:101440000FBE90E080E80FB6F8948093610090930F
:1014500061000FBE0E94A90F0E94570C0E94B40C9D
:101460008091E20084608093E20078940E943A0FB9
:101470000E94AB0F82E091E00E94550F0E944B2228
:101480008091E401853069F40E94791B8091E2012A
:101490008823B1F30E94A71B882391F30E94AC0A12
:1014A000EFCF0E94B10FECCF292F33272330310526
:1014B000C9F064F42130310581F02230310509F0A2
:1014C00043C08DE690E02CEB33E042C02132310581
:1014D000F1F02232310541F137C082E190E029E29A
:1014E00034E036C099278130910541F08230910572
:1014F00041F0892B49F5E8EBF3E005C0E0EAF3E0C1
:1015000002C0E8E8F3E0849190E09F0121C06430DC
:10151000D8F4E62FF0E0EE0FFF1FEE5DFE4F2081C6
:10152000318189E090E014C0643070F470E0FB0118
:10153000EE0FFF1FE65EFE4F20813181FB01EA5E68
:10154000FE4F808190E004C080E090E020E030E039
:10155000FA0131832083089580E189BD82E189BD4C
:1015600009B400FEFDCF8091D8008F7D8093D80014
:101570008091E00082608093E0008091E00081FD36
:10158000FCCF0895CF92DF92EF92FF920F931F93BB
:10159000CF93DF93EC018B016A010E94250C81112E
:1015A00033C0C114D10439F0F60180819181081B48
:1015B000190BC80FD91FE12CF12C0115110519F1D8
:1015C0008091E80085FD16C08091E8008E778093B9
:1015D000E800C114D10449F0F60180819181E80E40
:1015E000F91EF182E08285E00FC00E94250C88235D
:1015F00021F30AC089918093F10001501109FFEF96
:10160000EF1AFF0ADACF80E0DF91CF911F910F919F
:10161000FF90EF90DF90CF9008952091EB013091F3
:10162000EC012617370748F06115710539F4209150
:10163000E8002E772093E80001C0B90140E0611571
:101640007105A9F12091E401222309F443C025305A
:1016500009F442C02091E80023FD40C02091E80039
:1016600022FD32C02091E80020FFE9CF4091F30035
:101670002091F20030E0342BFC01CF01611571059F
:1016800059F02830310540F481918093F100615088
:1016900071092F5F3F4FF1CF41E02830310509F04C
:1016A00040E02091E8002E772093E800C8CF411158
:1016B000C9CF0AC08091E401882361F0853061F0D0
:1016C0008091E80083FD0AC08091E80082FFF2CF9C
:1016D00080E0089582E0089583E0089581E0089510
:1016E0002091EB013091EC012617370748F0611586
:1016F000710539F42091E8002E772093E80001C0AD
:10170000B901FC0120E06115710591F18091E401BE
:10171000882309F440C0853009F43FC08091E80077
:1017200083FD3DC08091E80082FD2FC08091E800DC
:1017300080FFE9CF2091F3008091F20090E0922B9E
:101740006115710559F08830910540F4249120937A
:10175000F1003196615071090196F2CF21E00897AE
:1017600009F020E08091E8008E778093E800CBCFED
:101770002111CCCF0AC08091E401882361F085302B
:1017800061F08091E80083FD0AC08091E80082FF4B
:10179000F2CF80E0089582E0089583E0089581E02B
:1017A0000895982F973058F59093E900981739F0DD
:1017B0007091EC002091ED005091F00003C0242FB7
:1017C000762F50E021FF19C03091EB003E7F30931F
:1017D000EB003091ED003D7F3093ED003091EB0058
:1017E00031603093EB007093EC002093ED00509348
:1017F000F0002091EE0027FF07C09F5FD3CF8F70CE
:101800008093E90081E0089580E008958091E501EA
:1018100087FF11C08091E80082FD05C08091E4013E
:101820008111F8CF11C08091E8008B770BC08091B7
:10183000E401882349F08091E80080FFF8CF80918F
:10184000E8008E778093E80008952091E4003091BD
:10185000E50095E64091EC00842F817040FF22C0A6
:101860008091E80080FD1CC08091E401882391F004
:10187000853091F08091EB0085FD10C04091E4002F
:101880005091E5004217530729F39A01915011F73F
:1018900084E0089582E0089583E0089581E008954A
:1018A00080E008954091E80042FFDECF08950E9455
:1018B000C50C0E94CD0CE0EEF0E080818160808359
:1018C000E8EDF0E080818F77808319BCA7EDB0E070
:1018D0008C918E7F8C9380818F7E80831092E30128
:1018E00008950F931F93CF93DF930E94C50C0E941E
:1018F000CD0CC8EDD0E088818F778883888180689F
:10190000888388818F7D888319BC1092E4011092AE
:10191000E0011092E2011092E10100EE10E0F80106
:1019200080818B7F808388818160888342E060E052
:1019300080E00E94D10BE1EEF0E080818E7F808319
:10194000E2EEF0E080818160808380818860808326
:10195000F80180818E7F8083888180618883DF9118
:10196000CF911F910F910895E8EDF0E080818F7E77
:101970008083E7EDF0E080818160808384E082BF36
:1019800081E08093E3010C94710CE8EDF0E080813C
:101990008E7F80831092E20008951092DA001092F8
:1019A000E10008951F920F920FB60F9211242F930A
:1019B0003F934F935F936F937F938F939F93AF93D7
:1019C000BF93EF93FF938091E10082FF0BC0809162
:1019D000E20082FF07C08091E1008B7F8093E100ED
:1019E0000E94390F8091DA0080FF1FC08091D800DB
:1019F00080FF1BC08091DA008E7F8093DA00809197
:101A0000D90080FF0DC080E189BD82E189BD09B4A4
:101A100000FEFDCF81E08093E4010E94310905C002
:101A200019BC1092E4010E943F098091E10080FFFF
:101A300019C08091E20080FF15C08091E2008E7F86
:101A40008093E2008091E20080618093E2008091C7
:101A5000D80080628093D80019BC85E08093E401AF
:101A60000E9443098091E10084FF30C08091E20030
:101A700084FF2CC080E189BD82E189BD09B400FEEC
:101A8000FDCF8091D8008F7D8093D8008091E100B8
:101A90008F7E8093E1008091E2008F7E8093E20050
:101AA0008091E20081608093E2008091E0018823D0
:101AB00011F084E007C08091E30087FD02C081E05F
:101AC00001C083E08093E4010E9445098091E10018
:101AD00083FF29C08091E20083FF25C08091E1004F
:101AE000877F8093E10082E08093E4011092E0011F
:101AF0008091E1008E7F8093E1008091E2008E7FF3
:101B00008093E2008091E20080618093E20042E0F5
:101B100060E080E00E94D10B8091F00088608093AB
:101B2000F0000E944209FF91EF91BF91AF919F9108
:101B30008F917F916F915F914F913F912F910F9076
:101B40000FBE0F901F9018951F920F920FB60F9215
:101B500011242F933F934F935F936F937F938F93B2
:101B60009F93AF93BF93CF93DF93EF93FF93C09176
:101B7000E900CF708091EC00D82FD17080FDD0E8C3
:101B80001092E9008091F000877F8093F0007894B4
:101B90000E94E80D1092E9008091F0008860809327
:101BA000F000CD2BCF70C093E900FF91EF91DF9152
:101BB000CF91BF91AF919F918F917F916F915F91E5
:101BC0004F913F912F910F900FBE0F901F9018953E
:101BD0001F93CF93DF93CDB7DEB7AA970FB6F894D4
:101BE000DEBF0FBECDBFE5EEF1E088E08E0F909135
:101BF000F10091938E13FBCF0E9461098091E80060
:101C000083FF1FC18091E5019091E601492F50E0CB
:101C10004A30510508F015C1FA01EA5AFF4F0C94F9
:101C2000F423803881F0823809F00BC18091E901FA
:101C30008F708093E9008091EB0085FB882780F905
:101C40001092E90006C08091E1019091E2019111AA
:101C500082609091E800977F9093E8008093F10074
:101C60001092F100C8C0282F2D7F09F0EAC0882308
:101C700019F0823061F0E5C08091E701813009F010
:101C8000E0C0933009F080E08093E2012BC08091A6
:101C9000E701811127C08091E9018F7009F4D1C05B
:101CA0008093E9002091EB0020FF1CC0933021F4C9
:101CB0008091EB00806214C09091EB009061909352
:101CC000EB0021E030E0A90102C0440F551F8A95C6
:101CD000E2F74093EA001092EA008091EB008860FE
:101CE0008093EB001092E9008091E800877F86C026
:101CF0008111A7C01091E7011F778091E3008078E0
:101D0000812B8093E3008091E800877F8093E80037
:101D10000E94060C8091E80080FFFCCF8091E300D8
:101D200080688093E300111102C082E001C083E06B
:101D30008093E40186C08058823008F082C0809190
:101D4000E7019091E8018C3D53E0950779F583E038
:101D50008A838AE289834FB7F894DE01139620E0E4
:101D60003EE051E2E32FF0E050935700E49120FF72
:101D700003C0E295EF703F5FEF708E2F90E0EA3086
:101D800010F0C79601C0C0968D939D932F5F2431AC
:101D900049F74FBF8091E800877F8093E8006AE2AF
:101DA00070E0CE0101960E940D0B14C0AE014F5F92
:101DB0005F4F6091E9010E94540ABC01892B09F42C
:101DC00040C09091E800977F9093E80089819A81C4
:101DD0000E94700B8091E8008B778093E80031C0FF
:101DE000803879F58091E800877F8093E8008091C2
:101DF000E0018093F1008091E8008E778093E80005
:101E00000E94060C1EC081111CC09091E701923007
:101E1000C0F48091E800877F8093E8009093E00110
:101E20000E94060C8091E001811106C08091E300C0
:101E300087FD02C081E001C084E08093E4010E943C
:101E40004D098091E80083FF0AC08091E800877FF8
:101E50008093E8008091EB0080628093EB00AA966B
:101E60000FB6F894DEBF0FBECDBFDF91CF911F91AB
:101E700008950895CF938091E4018823A1F0C09143
:101E8000E900CF709091EC00892F817090FD80E87F
:101E9000C82B1092E9008091E80083FD0E94E80DB4
:101EA000CF70C093E900CF9108959093690180931A
:101EB00068010895E0916801F0916901309721F07F
:101EC0000190F081E02D099480E00895E09168018F
:101ED000F0916901309721F00280F381E02D09949F
:101EE0000895E0916801F0916901309721F0048034
:101EF000F581E02D099408952091660130916701E4
:101F00008217930771F09093670180936601E091C7
:101F10006801F0916901309721F00680F781E02D8A
:101F20000994089520916401309165018217930707
:101F300071F09093650180936401E0916801F091E4
:101F40006901309721F00084F185E02D099408950E
:101F500008950C94A80F0E94C11B0E9468040C9461
:101F6000871CCF92DF92EF92FF920F931F93CF9334
:101F7000DF93CDB7DEB72B970FB6F894DEBF0FBE59
:101F8000CDBF0E9480048BE6C82E81E0D82E00E0F1
:101F900010E0E02E802F0E946E05F60141916F0146
:101FA000F42EF826B1F40F5F1F4F0E30110589F79C
:101FB0008FEF89838A831B820E94CA1B8160782FDE
:101FC0009D838C8349815A816B818D810E9454103D
:101FD00040C09091CD0191FF04C08B870E94740591
:101FE0008B8520E030E04F2D50E0922FBA01022E79
:101FF00002C0759567950A94E2F760FF24C02E83AE
:10200000EF8221E030E0690102C0CC0CDD1C9A9522
:10201000E2F790E08C219D21892B09F420E02887AC
:102020000E94CA1B8160782F9A8789874E815F81C1
:1020300068858A850E945410F801E559FE4F808119
:10204000C826C08206C02F5F3F4F2630310569F693
:10205000AACF0E946E1F10916A010E945A0F181792
:10206000A1F00E945A0F80936A012B960FB6F89444
:10207000DEBF0FBECDBFDF91CF911F910F91FF90BB
:10208000EF90DF90CF900C9450082B960FB6F894F9
:10209000DEBF0FBECDBFDF91CF911F910F91FF909B
:1020A000EF90DF90CF900895CF93DF93CDB7DEB759
:1020B0002B970FB6F894DEBF0FBECDBF4F83588766
:1020C00069877A878B87DE01119686E0FD01119280
:1020D0008A95E9F785E0FE01379601900D928A9581
:1020E000E1F749815A816B817C818D819E810E94BB
:1020F00084172B960FB6F894DEBF0FBECDBFDF91CD
:10210000CF9108950895CF93882309F4C2C0C82FB2
:10211000823859F40E945A0F81FDBBC089E30E94A6
:102120002D1A0E94FA1A89E30CC0833879F40E94B0
:102130005A0F80FDAEC083E50E942D1A0E94FA1A44
:1021400083E50E946F1ACF910C94FA1A843859F4DF
:102150000E945A0F82FD9DC087E40E942D1A0E94A2
:10216000FA1A87E4EECF8CEF8C0F813A48F48C2F6B
:102170000E94B02181118DC08C2F0E942D1AE3CFB7
:1021800080E28C0F883048F4C77081E001C0880F6E
:10219000CA95EAF70E94B31AD6CF8BE58C0F83302D
:1021A00078F4C53A29F0C63A31F083E890E005C0EA
:1021B00081E890E002C082E890E0CF910C947C0F1F
:1021C00088E58C0F833108F064C0C83A39F1C93A08
:1021D00041F1CA3A49F1CB3A51F1CC3A59F1CD3AF1
:1021E00061F1C03B69F1CE3A71F1CF3A79F1C13B6F
:1021F00081F1C23B89F1C33B91F1C43B99F1C53BED
:10220000A1F1C63BA9F1C73BB1F1C83BB9F1C93B4C
:10221000C1F1CA3BC9F180E090E038C082EE90E0A5
:1022200035C089EE90E032C08AEE90E02FC085EB99
:1022300090E02CC086EB90E029C087EB90E026C0B0
:102240008CEC90E023C08DEC90E020C083E891E01E
:102250001DC08AE891E01AC082E991E017C084E9C4
:1022600091E014C081E292E011C083E292E00EC0DE
:1022700084E292E00BC085E292E008C086E292E040
:1022800005C087E292E002C08AE292E0CF910C940E
:10229000920FCF910895882309F44BC0823859F4E6
:1022A0000E945A0F81FF45C089E30E942D1A0E94A7
:1022B000FA1A89E30CC0833871F40E945A0F80FF28
:1022C00038C083E50E942D1A0E94FA1A83E50E9405
:1022D0006F1A0C94FA1A843859F40E945A0F82FF2C
:1022E00028C087E40E942D1A0E94FA1A87E4EFCFD3
:1022F0009CEF980F913A58F390E2980F983050F471
:10230000877091E001C0990F8A95EAF7892F0E94A2
:10231000B91ADFCF9BE5980F933020F480E090E06E
:102320000C947C0F885A833120F480E090E00C9468
:10233000920F0895882321F00E94B31A0C94FA1A80
:102340000895882321F00E94B91A0C94FA1A08956E
:10235000BF92CF92DF92EF92FF920F931F93CF9392
:10236000DF9300D000D000D0CDB7DEB725E0FC0170
:10237000DE01119601900D922A95E1F7FC01D080C3
:1023800011810281258122952F7043815481452B33
:1023900009F4FCC21F3F21F4FFEFDF1609F4F6C277
:1023A0007C012E830E948210D9821A8369817A81EE
:1023B000802F0E94291A182FB92E0E94DE190E9420
:1023C000A5182E81002319F00E94D01A2E81EB2D22
:1023D000E295EF70F0E0E05AFF4F0C94F4238B2D60
:1023E000807F9B2D9F70F92E882319F0F29480EF47
:1023F000F822002389F0FF2009F475C280E2810FE2
:10240000883020F48F2D0E94B31A03C08F2D0E94B4
:10241000C31A0E94FA1A67C2812F0E944B11FF2033
:1024200009F4B4C2105E8F2D183018F40E94B91A46
:1024300002C00E94C91A26960FB6F894DEBF0FBEDE
:10244000CDBFDF91CF911F910F91FF90EF90DF9063
:10245000CF90BF900C94FA1A3B2D307F8B2D8F704C
:10246000303211F08295807F112319F0113021F163
:102470002CC00023B9F0222309F4A0C1213009F0B7
:102480009DC126960FB6F894DEBF0FBECDBFDF917B
:10249000CF911F910F91FF90EF90DF90CF90BF9061
:1024A0000C94E31A222319F0213009F46FC28E83B1
:1024B0000E94E61A8E8196C1002321F0223008F096
:1024C00065C27CC1211162C28DC1002321F022238B
:1024D00009F474C108C2222309F484C119C22B2D46
:1024E00026952695237030E02115310521F0213005
:1024F0003105D1F04BC2002321F0812F9B2D937029
:1025000002C080E090E026960FB6F894DEBF0FBEC2
:10251000CDBFDF91CF911F910F91FF90EF90DF9092
:10252000CF90BF900C947C0F002321F0812F9B2D26
:10253000937002C080E090E026960FB6F894DEBF5C
:102540000FBECDBFDF91CF911F910F91FF90EF9004
:10255000DF90CF90BF900C94920F812F002319F041
:102560000E94761E02C00E94DE1E26960FB6F894C8
:10257000DEBF0FBECDBFDF91CF911F910F91FF90B6
:10258000EF90DF90CF90BF900C94631F8B2D8370E2
:1025900009F07BC00111FAC1812F82958695877061
:1025A000880F880F912F9F70C92ED12CE12CF12C10
:1025B000082E04C0CC0CDD1CEE1CFF1C0A94D2F7C4
:1025C00014FF12C04FE050E060E070E004C0440F20
:1025D000551F661F771F8A95D2F7CB01BA01609508
:1025E00070958095909503C060E070E0CB012B2D35
:1025F000269526952370422F50E042305105D9F0A0
:102600004330510569F16C297D298E299F2941307C
:10261000510551F126960FB6F894DEBF0FBECDBF1F
:10262000DF91CF911F910F91FF90EF90DF90CF90AE
:10263000BF900C94CC186C297D298E299F29269651
:102640000FB6F894DEBF0FBECDBFDF91CF911F91C3
:102650000F91FF90EF90DF90CF90BF900C94E8180F
:102660000E94CC18C701B60126960FB6F894DEBFBB
:102670000FBECDBFDF91CF911F910F91FF90EF90D3
:10268000DF90CF90BF900C94B018002319F08B2DE1
:10269000817001C08695882309F478C1812F8295C5
:1026A00086958770880F880F912F9F70C92ED12C27
:1026B000E12CF12C082E04C0CC0CDD1CEE1CFF1C00
:1026C0000A94D2F714FF12C04FE050E060E070E0CF
:1026D00004C0440F551F661F771F8A95D2F7CB01A0
:1026E000BA01609570958095909503C060E070E0A8
:1026F000CB012B2D269526952370422F50E042309A
:102700005105D9F04330510569F16C297D298E2995
:102710009F294130510551F126960FB6F894DEBF3E
:102720000FBECDBFDF91CF911F910F91FF90EF9022
:10273000DF90CF90BF900C94A6196C297D298E292B
:102740009F2926960FB6F894DEBF0FBECDBFDF914E
:10275000CF911F910F91FF90EF90DF90CF90BF909E
:102760000C94C2190E94A619C701B60126960FB68D
:10277000F894DEBF0FBECDBFDF91CF911F910F91B7
:10278000FF90EF90DF90CF90BF900C948A19103F8C
:10279000D1F118F4103E50F4A1C0123F09F463C007
:1027A00008F44CC0133F09F473C098C01F708B2D00
:1027B0008F710023A1F00E942319812F26960FB656
:1027C000F894DEBF0FBECDBFDF91CF911F910F9167
:1027D000FF90EF90DF90CF90BF900C949A110E94E1
:1027E0004419812F26960FB6F894DEBF0FBECDBFD9
:1027F000DF91CF911F910F91FF90EF90DF90CF90DD
:10280000BF900C94A1110023A9F02111BFC08B2D02
:102810008F7126960FB6F894DEBF0FBECDBFDF9145
:10282000CF911F910F91FF90EF90DF90CF90BF90CD
:102830000C946919223008F0A9C0E9CF0023A9F04F
:102840008B2D8F7126960FB6F894DEBF0FBECDBFCD
:10285000DF91CF911F910F91FF90EF90DF90CF907C
:10286000BF900C942319002359F38B2D8F7126965A
:102870000FB6F894DEBF0FBECDBFDF91CF911F9191
:102880000F91FF90EF90DF90CF90BF900C94441980
:10289000002399F08B2D8F7126960FB6F894DEBF2A
:1028A0000FBECDBFDF91CF911F910F91FF90EF90A1
:1028B000DF90CF90BF900C940E1926960FB6F89427
:1028C000DEBF0FBECDBFDF91CF911F910F91FF9063
:1028D000EF90DF90CF90BF900C9404190023A9F0E3
:1028E000222309F4ADCF812F26960FB6F894DEBFD0
:1028F0000FBECDBFDF91CF911F910F91FF90EF9051
:10290000DF90CF90BF900C948310222309F4ADCFB9
:10291000812F26960FB6F894DEBF0FBECDBFDF9194
:10292000CF911F910F91FF90EF90DF90CF90BF90CC
:102930000C944B114B2D4F70612FC7010E94040363
:1029400026960FB6F894DEBF0FBECDBFDF91CF91B4
:102950001F910F91FF90EF90DF90CF90BF900C945C
:1029600028184B2D4F70612FC70126960FB6F8948B
:10297000DEBF0FBECDBFDF91CF911F910F91FF90B2
:10298000EF90DF90CF90BF900C94750526960FB610
:10299000F894DEBF0FBECDBFDF91CF911F910F9195
:1029A000FF90EF90DF90CF90BF9008950E94D01AD3
:1029B0000E94E01A0E94A51A0E94FA1A0E9413208F
:1029C0000E94631F80E090E00E947C0F80E090E016
:1029D0000C94920F0E94C01A0C94D6140E941E1AD6
:1029E000292F22952F7030E02C3031054CF42A30FD
:1029F00031056CF4225031092230310588F407C0CA
:102A00002C30310549F02F30310531F009C0803EBE
:102A100048F0803F29F406C093FB882780F9089589
:102A200080E0089581E00895CF93DF9300D000D037
:102A30001F92CDB7DEB70F900F900F900F900F90B1
:102A4000DF91CF910895CF93DF9300D000D000D0D5
:102A5000CDB7DEB726960FB6F894DEBF0FBECDBF5A
:102A6000DF91CF9108951F93CF93DF93C0917901A8
:102A700016E080917A01C81799F0D0E01C9FF00110
:102A80001D9FF00D1124E558FE4F40815181628158
:102A90007381848195810E9423152196C770E9CFA7
:102AA000DF91CF911F9108954091AB015091AC01FE
:102AB0006091AD017091AE018091AF019091B00134
:102AC0000C9423158091B00182958F7009F054C049
:102AD0008091AD01882309F44FC080917901A091C4
:102AE0007A016091AB017091AC014091AE015091BF
:102AF000AF01B6E08A1709F43FC090E041155105D7
:102B0000C1F17F3F11F46F3FA1F1B89FF001B99F70
:102B1000F00D1124E558FE4F218172132AC0208147
:102B2000621327C02281211124C0238134812417FC
:102B3000350710F421503109241B350B283C310591
:102B4000C0F42091B0012F7020612093B00126E0E5
:102B5000289FF001299FF00D1124E058FE4F80813D
:102B60008F70806180838BEA91E00E94A8110C94A1
:102B7000331501968770BECF0895CF92DF92EF9202
:102B8000FF920F931F93CF93DF93CDB7DEB762977A
:102B90000FB6F894DEBF0FBECDBF8C0185E0F80103
:102BA000DE011D9601900D928A95E1F7D8014C91B6
:102BB00011965C91119712966C9112971396CD9085
:102BC000DC9014973091AB017091AC018091AE0113
:102BD0009091AF01009709F46BC17F3F19F43F3F1B
:102BE00009F466C1E090AD01EE2009F4C0C0209167
:102BF000B001C816D90628F0F601E81BF90BCF0181
:102C000004C0809590958C0D9D1DFF24F394883C05
:102C1000910578F0F12C207F09F0C6C07C2DD98A6F
:102C2000C88A89890E9414158BEA91E00E94A81134
:102C3000B1C0822F807F09F046C0751314C03413D1
:102C400012C0611110C02F7020612093B0010E944A
:102C500054158BEA91E00E94A8118091B001D8012F
:102C600015968C932EC0CD2819F15F3F11F44F3F7C
:102C7000F9F0F62E61111CC08091790120917A0142
:102C800036E0821709F45AC090E0389FF001399F6E
:102C9000F00D1124E558FE4F7181571306C0708165
:102CA000471303C07281711103C001968770E9CF89
:102CB000F62E662309F418C18091B00181608093DB
:102CC000B001F12C11C1751308C0341306C0611195
:102CD00004C08091B001D801C3C04D875E878D8547
:102CE0009E856A8B0E94EE146A898823E1F166232F
:102CF000D1F12091B001822F82958F7090E00297E0
:102D000074F08091AB019091AC0198878F83198604
:102D1000DB86CA862C87CE0107960E94A81186E022
:102D2000F801ABEAB1E001900D928A95E1F70E94BB
:102D300062150E945415FF24F394D6C04D875E8718
:102D40008D859E850E941E1A292F22952F7030E0B6
:102D5000223031050CF0BCC09F7009F0B6C0805E17
:102D6000883008F4C1C0C8010E94A811E4CFC81679
:102D7000D90608F453C0F601E81BF90BCF01883CD3
:102D8000910508F450C0F12C7C2DD98AC88A898914
:102D90000E941415EBEAF1E086E0DF011D928A95AE
:102DA000E9F70E945415A0C0751314C0341312C063
:102DB000611110C08091B001F8018583C8010E94A3
:102DC000A81186E0EBEAF1E0DF011D928A95E9F7B0
:102DD000FE2C8AC04D875E878D859E856A8B0E94FA
:102DE000EE146A89882309F4BECF662309F4BBCFA9
:102DF0002091B001822F82958F7090E002970CF4A1
:102E00008ECF8091AB019091AC019A8389831B8214
:102E1000DD82CC822E83CE0101967FCF8095909566
:102E20008C0D9D1DACCFF62E662309F49CCF751337
:102E30002EC034132CC02091B00120FD1FC0822F62
:102E400082958F70D9F0D80115962C9315978F30F5
:102E500049F08F5F982F9295907F822F8F70892BEA
:102E600015968C93C8010E94A81186E0F801ABEA80
:102E7000B1E001900D928A95E1F793CF86E0F801D9
:102E8000ABEAB1E001900D928A95E1F72DC04D8734
:102E90005E878D859E850E94EE14811140CF8091C2
:102EA000B00181608093B001C8010E94A8111CC0CC
:102EB000662309F458CF4D875E878D859E850E94D5
:102EC000EE14882309F44FCF2ACF811148CF0CC0CC
:102ED000243031050CF047CF9F7009F440CFF80142
:102EE0009581907F09F03BCF8F2D62960FB6F894B5
:102EF000DEBF0FBECDBFDF91CF911F910F91FF902D
:102F0000EF90DF90CF9008951F93CF93DF93CDB7CD
:102F1000DEB72C970FB6F894DEBF0FBECDBF4F8340
:102F2000588769877A878B879C87CE0107960E948E
:102F3000BD15882369F08F8198852A853B85232BD1
:102F4000F1F19F3F09F063C08F3F09F060C037C0C7
:102F500086E0FE013796DE01119601900D928A956A
:102F6000E1F76F817885EA85FB85309741F17F3FF6
:102F700011F46F3F21F120917A0130E0C9010196EF
:102F8000877099274091790150E08417950709F4DB
:102F900047C069837A83FD83EC8396E0929FD001DA
:102FA000939FB00D1124A558BE4FFE01319601909C
:102FB0000D929A95E1F780937A010E94331516E0FD
:102FC0008091790190917A018917C1F1189FC00110
:102FD000112485589E4F0E94BD15882379F1E091F8
:102FE00079011E9FF0011124E558FE4F4081518167
:102FF00062817381848195810E942315809179017A
:1030000090E001968770992780937901D9CF4F81FD
:10301000588569857A858B859C850E942315CFCF3D
:103020000E94EA1410927A0110927901EBEAF1E021
:1030300086E0DF011D928A95E9F7C1CF2C960FB685
:10304000F894DEBF0FBECDBFDF91CF911F910895E1
:10305000EF92FF920F931F93CF93DF938C01892BF5
:1030600009F46CC0F12CEE24E394E8012196F801F8
:103070008491843740F4843008F051C0813081F06D
:10308000823019F15BC0853709F444C0A8F19CE790
:10309000980F903708F052C08F770E944B1141C0B3
:1030A0000E5F1F4FFE01C49180E28C0F883048F400
:1030B000C7708E2D01C0880FCA95EAF70E94D31AF7
:1030C00014C08C2F0E9483102DC00E5F1F4FFE0175
:1030D000C49180E28C0F883058F4C7708E2D01C0E7
:1030E000880FCA95EAF70E94D91A0E94FA1A1AC0E4
:1030F0008C2F0E944B1116C00E5F1F4FFE01C49112
:10310000CC2381F08FE99FE00197F1F700C0000028
:10311000C150F6CF0E5F1F4FFE01F49003C00E9416
:1031200083108E018F2D882309F49FCFEFE9FFE0F4
:103130003197F1F700C000008150F5CFDF91CF91BA
:103140001F910F91FF90EF90089508956093B5013E
:103150007093B6018093B7019093B8010C94D61484
:103160000F931F930091B5011091B6012091B70103
:103170003091B801DC01CB01802B912BA22BB32B1A
:103180008093B5019093B601A093B701B093B801B5
:103190001F910F910C94D6140F931F930091B501BA
:1031A0001091B6012091B7013091B801DC01CB013B
:1031B00080239123A223B3238093B5019093B6017A
:1031C000A093B701B093B8011F910F910C94D6143E
:1031D0000F931F930091B5011091B6012091B70193
:1031E0003091B801DC01CB0180279127A227B327BA
:1031F0008093B5019093B601A093B701B093B80145
:103200001F910F910C94D6141092B1011092B2013B
:103210001092B3011092B4010C94D61441E050E026
:1032200060E070E004C0440F551F661F771F8A9549
:10323000D2F74093B1015093B2016093B301709300
:10324000B4010C94D61441E050E060E070E004C09A
:10325000440F551F661F771F8A95D2F78091B101E1
:103260009091B201A091B301B091B401482B592BB8
:103270006A2B7B2B4093B1015093B2016093B30151
:103280007093B4010C94D61441E050E060E070E01B
:1032900004C0440F551F661F771F8A95D2F74095CB
:1032A0005095609570958091B1019091B201A09177
:1032B000B301B091B401482359236A237B2340937F
:1032C000B1015093B2016093B3017093B4010C94B7
:1032D000D61441E050E060E070E004C0440F551F98
:1032E000661F771F8A95D2F78091B1019091B20144
:1032F000A091B301B091B401482759276A277B27D1
:103300004093B1015093B2016093B3017093B40143
:103310000C94D6140F931F930091B1011091B20138
:103320002091B3013091B401DC01CB01802B912BB2
:10333000A22BB32B8093B1019093B201A093B30160
:10334000B093B4011F910F910C94D6140F931F9357
:103350000091B1011091B2012091B3013091B401FB
:10336000DC01CB0180239123A223B3238093B101FD
:103370009093B201A093B301B093B4011F910F9148
:103380000C94D6140F931F930091B1011091B201C8
:103390002091B3013091B401DC01CB01802791274A
:1033A000A227B3278093B1019093B201A093B301F8
:1033B000B093B4011F910F910C94D6140895CF923D
:1033C000DF92EF92FF920F931F93CF93DF938C01C5
:1033D000C090B501D090B601E090B701F090B8016F
:1033E0008091B1019091B201A091B301B091B4016B
:1033F000C82AD92AEA2AFB2ACFE1D0E0D701C601A0
:103400000C2E04C0B695A795979587950A94D2F788
:1034100080FF06C0B8018C2F0E94B507019721F4E8
:10342000219760F780E001C08C2FDF91CF911F9131
:103430000F91FF90EF90DF90CF900895CF93DF939F
:10344000EC010E94DF19BE010E94B507DF91CF9108
:103450000895CB010E941E1A089590910C019923A2
:1034600021F090910D01911109C020910E01309130
:103470000F01F90132969FEF40E01FC0982F9695FB
:10348000969596959F3050F5E0910E01F0910F01C1
:10349000E90FF11D877021E030E0A90102C0440F5F
:1034A000551F8A95E2F7CA019181892B818308957E
:1034B0009F3F39F04F5F4E3041F051915813F8CF94
:1034C0000DC05111F7CF942FF5CF9F3F39F0F9017F
:1034D000E90FF11D97FDFA95828308950895909163
:1034E0000C01992321F090910D01911109C02091B7
:1034F0000E0130910F01F9013296205F3F4F1FC03E
:10350000982F9695969596959F30F0F4E0910E0140
:10351000F0910F01E90FF11D877021E030E0A90162
:1035200002C0440F551F8A95E2F7CA018095918128
:103530008923818308953196E217F30729F090815A
:103540009813F9CF1082F7CF089581E090E0E091D1
:103550000E01F0910F01E80FF91F108201968031E2
:103560009105A9F708959091CC01892B8093CC0106
:10357000089580959091CC0189238093CC01089582
:103580001092CC0108959091CB01892B8093CB01AF
:10359000089580959091CB0189238093CB01089564
:1035A0001092CB0108959091CA01892B8093CA0192
:1035B000089580959091CA0189238093CA01089546
:1035C0001092CA0108958093B90108951092B9012B
:1035D000089580910E0190910F01FC0131969C019C
:1035E000205F3F4F80E0919191118F5FE217F307C9
:1035F000D1F70895E0910E01F0910F018091CC0177
:103600008083E0910E01F0910F0190818091CB01B8
:10361000892B8083E0910E01F0910F0190818091C0
:10362000CA01892B80838091B901882361F0E091E0
:103630000E01F0910F019081892B80830E94E91A7D
:1036400081111092B90180910E0190910F010C949B
:10365000660FCF92DF92EF92FF926C01EE24FF246F
:10366000C114D104E104F10421F0C701B60120E145
:1036700001C020E0C72ED82EE92EFF24C114D104AA
:10368000E104F10419F0285FC701B6016B017C0168
:1036900054E0F694E794D794C7945A95D1F7C1149F
:1036A000D104E104F10419F02C5FC701B6016B01EC
:1036B0007C0142E0F694E794D794C7944A95D1F7F9
:1036C000C114D104E104F10419F02E5FC701B60161
:1036D000DC01CB01B695A79597958795892B8A2B09
:1036E0008B2B09F02F5F822FFF90EF90DF90CF9010
:1036F00008958091E401843039F11092CE0120E4E4
:1037000088E190E00FB6F894A895809360000FBE12
:103710002093600080E00E94500883B7817F84601E
:1037200083BF83B7816083BF7894889583B78E7F8A
:1037300083BF0FB6F894A89580916000886180934C
:103740006000109260000FBE089508950895CF9311
:103750000E94A51B0E9480040E94A61BC0E08C2F23
:103760000E946E05811104C0CF5FCE30C1F701C049
:1037700081E0CF9108950E94EA140E945A0F0C94A0
:10378000500882E084BD93E095BD9AEF97BD809389
:103790006E0008952FB7F8948091CF019091D001D9
:1037A000A091D101B091D2012FBF0895CF92DF92A5
:1037B000EF92FF920F931F932FB7F8944091CF0190
:1037C0005091D0016091D1017091D2012FBF6A0157
:1037D0007B01EE24FF248C0120E030E0C016D106EE
:1037E000E206F30610F4415051099A01281B390BE7
:1037F000C9011F910F91FF90EF90DF90CF90089536
:103800001F920F920FB60F9211248F939F93AF9335
:10381000BF938091CF019091D001A091D101B0913F
:10382000D2010196A11DB11D8093CF019093D001CB
:10383000A093D101B093D201BF91AF919F918F918D
:103840000F900FBE0F901F9018950E94570CF89480
:103850002FEF87EA91E6215080409040E1F700C0C9
:10386000000087E090EBDC018093EE019093EF0184
:10387000A093F001B093F1019CE088E10FB6F894B9
:10388000A895809360000FBE90936000FFCFEF92E9
:10389000FF920F931F93CF93DF93D82FC0E08C2F0D
:1038A0000E946E0500E010E0E82EF12CC701002E0A
:1038B00002C0959587950A94E2F780FD06C00F5FD8
:1038C0001F4F0630110591F709C0602F7C2F80E053
:1038D0000E947605D813F3CF81E004C0CF5FCE30CD
:1038E000F1F680E0DF91CF911F910F91FF90EF9063
:1038F0000895CF93C82F8CE20E94471C882321F0A3
:103900008C2FCF910C94471C80E0CF910895CF93DA
:103910000E94CE1D811102C00E94B41DC5E6C15097
:1039200049F00E9480048FE39CE90197F1F700C001
:103930000000F5CF89E20E94791C811113C18AE24F
:103940000E94791C81110E94B41D85E00E94791C9F
:1039500081110E94251C0E94D91D8093CD0187E012
:103960000E94791C8823A9F18BE10E94791C88238D
:1039700051F08091CD0181FB222720F991E092271F
:1039800090FB81F90EC08EE00E94791C882361F0C3
:103990008091CD0182FB222720F991E0922790FBB4
:1039A00082F98093CD0115C080E10E94791C90912D
:1039B000CD01882341F093FB222720F981E0822763
:1039C00080FB93F904C0892F809580FB90F9909338
:1039D000CD018091CD010E94DD1D0E94EB1D8093E1
:1039E000ED0180EE0E94791C882341F08091ED0169
:1039F000982F909590FB80F98093ED0189E30E94C8
:103A0000791C882359F08091ED0181FB222720F950
:103A100091E0922790FB81F98093ED0182EE0E9464
:103A2000791C882359F08091ED0182FB222720F92F
:103A300091E0922790FB82F98093ED0186EE0E943F
:103A4000791C882359F08091ED0183FB222720F90E
:103A500091E0922790FB83F98093ED0183EE0E9421
:103A6000791C882359F08091ED0184FB222720F9ED
:103A700091E0922790FB84F98093ED0185E30E9409
:103A8000791C882359F08091ED0185FB222720F9CC
:103A900091E0922790FB85F98093ED0181E30E94EC
:103AA000791C882359F08091ED0186FB222720F9AB
:103AB00091E0922790FB86F98093ED0181E10E94CD
:103AC000791C882359F08091ED0187FB222720F98A
:103AD00091E0922790FB87F98093ED018091ED01B1
:103AE0000E94EF1D8091ED0187FB882780F980936C
:103AF0000D0187E20E94791CC82F8EE10E94791C7B
:103B00008111C2608FE10E94791C8111C46080E242
:103B10000E94791C8111C86081E20E94791C811188
:103B2000C06182E20E94791C8111C06283E20E941E
:103B3000791C8111C06484E20E94791C882311F0F1
:103B4000C06802C0CC2329F08C2F0E94E61D6C2F88
:103B500003C00E94E21D682F70E080E090E0CF91EA
:103B60000C94A618CF9108956DEE7EEF80E090E062
:103B70000E942E2460E082E090E00E941C2460E01D
:103B800083E090E00E941C2460E084E090E00E94CA
:103B90001C2460E085E090E00C941C2480E090E020
:103BA0000E94162421E08D3E9E4F09F020E0822FD6
:103BB000089582E090E00C940E24682F82E090E05B
:103BC0000C941C2483E090E00C940E24682F83E076
:103BD00090E00C941C2484E090E00C940E24682F58
:103BE00084E090E00C941C248091D50180FF0BC0F0
:103BF0006091130185E0689FB00111247595679568
:103C0000759567952BC081FF09C06091130185E010
:103C1000689FB00111247595679520C082FF07C089
:103C20006091130185E0689FB001112417C0909145
:103C3000D6019923D1F060911201961788F720914F
:103C4000130185E0289F90011124929FA001939F6A
:103C5000500D112470E0CA010E94E0236038710504
:103C600040F46115710539F002C065E070E0862FFF
:103C700008958FE7089581E008958091D50180FF30
:103C800008C06091110170E075956795759567950D
:103C900021C081FF06C06091110170E075956795A4
:103CA00019C082FF04C06091110170E010C09091B2
:103CB000D6019923C1F0609110019617A0F7809169
:103CC0001101899FC001112470E00E94E023603837
:103CD000710528F46115710521F0862F08958FE78D
:103CE000089581E0089561E070E0F4CF803F21F411
:103CF0000E94F41D819504C0813F29F40E94F41DA7
:103D00008093D9010895823F21F40E94F41D81958A
:103D100004C0833F29F40E94F41D8093D8010895C4
:103D2000893F19F40E943D1E05C08A3F31F40E946C
:103D30003D1E81958093DA0108958B3F21F40E9406
:103D40003D1E819504C08C3F29F40E943D1E809346
:103D5000DB010895843F21F48091D701816017C071
:103D6000853F21F48091D701826011C0863F21F404
:103D70008091D70184600BC0873F21F48091D701E7
:103D8000886005C0883F31F48091D70180618093BD
:103D9000D70108958D3F21F48091D50181600BC03A
:103DA0008E3F21F48091D501826005C08F3F29F4B8
:103DB0008091D50184608093D5010895803F39F4C6
:103DC0008091D90187FF6CC01092D90169C0813FF1
:103DD00029F48091D9011816BCF362C09091D801E2
:103DE000823F29F497FF5CC01092D80159C0833FED
:103DF00019F41916CCF354C0893F41F48091DA01CB
:103E000018160CF04DC01092DA014AC08A3F29F40E
:103E10008091DA0187FF44C0F6CF8B3F39F480915F
:103E2000DB0187FF3DC01092DB013AC08C3F29F4D3
:103E30008091DB011816BCF333C0843F21F48091DC
:103E4000D7018E7F17C0853F21F48091D7018D7FE8
:103E500011C0863F21F48091D7018B7F0BC0873F33
:103E600021F48091D701877F05C0883F31F480918C
:103E7000D7018F7E8093D70113C08D3F21F48091AD
:103E8000D5018E7F0BC08E3F21F48091D5018D7FAF
:103E900005C08F3F29F48091D5018B7F8093D50198
:103EA0008091D80181110EC08091D90181110AC081
:103EB0008091DA01811106C08091DB01811102C07D
:103EC0001092D601089587ED91E00E94710F0E9433
:103ED000CA1B9093D4018093D30108951F93CF936D
:103EE000DF938091D3019091D4010E94D61BAC0145
:103EF0009091D601992321F02091140130E006C061
:103F0000209115018AE0289F900111244217530740
:103F100008F485C08091D801C091D901D091DA010F
:103F20001091DB01811107C0C11175C0D11173C09F
:103F3000111171C074C09F3F19F09F5F9093D6011B
:103F4000181624F40E94F41D8093D8018091D801A2
:103F500087FF05C00E94F41D81958093D8011C162F
:103F600024F40E94F41D8093D9018091D90187FF28
:103F700005C00E94F41D81958093D9016091D801FC
:103F8000662331F1C091D901CC2311F1062E000C2A
:103F9000770B880B990B0E94E72223E333E343E37B
:103FA0005FE30E944B230E94AF226093D8016C2FE5
:103FB000CC0F770B880B990B0E94E72223E333E3A6
:103FC00043E35FE30E944B230E94AF226093D90139
:103FD0001D1624F40E943D1E8093DA018091DA01BF
:103FE00087FF05C00E943D1E81958093DA0111165E
:103FF00024F40E943D1E8093DB018091DB0187FF4A
:1040000005C00E943D1E81958093DB01DF91CF9119
:104010001F910C94631F9F3F09F08FCF97CFDF91C3
:10402000CF911F910895E7EDF1E085E0DF011D924A
:104030008A95E9F71092D6011092D5010895833040
:1040400081F128F4813059F08230D1F00895853023
:1040500009F449C0B8F1863009F456C0089580913A
:104060001501262F30E0280F311D2F3F310524F494
:10407000680F6093150108958FEF809315010895DF
:1040800080911401262F30E0280F311D2F3F31057C
:1040900024F4680F6093140108958FEF8093140146
:1040A000089580911301262F30E0280F311D2F3FF6
:1040B000310524F4680F6093130108958FEF809306
:1040C0001301089580911201262F30E0280F311D31
:1040D0002F3F310524F4680F6093120108958FEF8C
:1040E00080931201089580911101262F30E0280F4E
:1040F000311D2F3F310524F4680F6093110108959D
:104100008FEF80931101089580911001262F30E0E8
:10411000280F311D2F3F310524F4680F60931001E3
:1041200008958FEF809310010895833011F128F4E2
:10413000813049F0823091F00895853081F120F18D
:104140008630C1F1089580911501681720F4861B0F
:10415000809315010895109215010895809114011E
:10416000681720F4861B809314010895109214019F
:10417000089580911301681720F4861B8093130122
:10418000089510921301089580911201681720F488
:10419000861B809312010895109212010895809158
:1041A0001101681720F4861B809311010895109265
:1041B0001101089580911001681720F4861B8093E7
:1041C000100108951092100108950F931F938D31DF
:1041D00009F46BC008F03FC08E3009F47FC0C0F412
:1041E000873009F469C068F4863009F0B1C0809165
:1041F000CD01817F8E7F8093CD0181E08093DD01B1
:10420000A8C0883009F4A2C08B3009F49FC0A0C0B8
:10421000863109F49BC078F4803109F472C0813191
:1042200009F096C00E94EA1490910D0181E089275F
:1042300080930D018BC0893109F488C08B3109F05E
:1042400087C08091CD0181FB222720F991E0922740
:1042500090FB81F94CC0853309F470C048F4873273
:1042600009F46CC008F459C0893209F467C070C001
:10427000833438F48A3308F04EC0883309F466C0BA
:1042800067C0833409F45AC0883409F061C00E94C1
:10429000EA140FEF13ED20E3015010402040E1F746
:1042A00000C000000E94251C51C00E9469220E948B
:1042B0005A0F0E9450084AC09091CD01892F8095D5
:1042C000817080FB90F929F0966098609093CD0101
:1042D00040C0997F977F9093CD0138C08091CD01E8
:1042E00082FB222720F991E0922790FB82F98093AC
:1042F000CD01992359F18091CD0181608093CD0149
:1043000025C08091CD0183FB222720F991E09227DF
:1043100090FB83F9ECCF895301C08D5141E050E00F
:1043200060E070E08A019B0104C0000F111F221F92
:10433000331F8A95D2F7C901B80104C061E070E06B
:1043400080E090E00E94A6180E94EA1481E001C07B
:1043500080E01F910F91089580E0089580E0089516
:10436000CF93C82F8091DD01813079F018F0823031
:10437000E9F187C0E0910E01F0910F018081813158
:1043800069F0823209F07FC009C0E0910E01F0911E
:104390000F018081813111F0823261F48C2F0E94F3
:1043A000AC21811104C08C2F0E94E5201DC081E04A
:1043B00090E01AC08C2F0E94AE21811114C0C4312C
:1043C00079F048F4CB3079F0C03109F060C082E078
:1043D0008093DD0108C0C93219F0C83321F057C0FD
:1043E0001092DD0154C081E0817053C0C93289F15F
:1043F00018F5C43171F1A8F4C73009F046C08AE05D
:104400008093150194E19093140193E0909313012C
:104410008093120188E08093110188E2809310015B
:1044200034C0CE51C63088F5EC2FF0E0E65DFE4F8B
:1044300080818093DC0129C0CE34E9F020F4CB34B4
:1044400021F56AE013C0C13579F0C235F1F461E0BD
:104450000DC08091DC01882319F01092DC0115C099
:1044600081E08093DD0115C061E006C08091DC0130
:104470000E941F200AC06AE08091DC010E94952002
:1044800004C01092DD0180E004C081E002C080E041
:10449000ABCFCF910895E1E8F0E080818860808320
:1044A0008081816080838FB7F89493E09093890036
:1044B00090ED909388008FBF0895EFE6F0E0808143
:1044C000826080830895EFE6F0E080818D7F8083B5
:1044D0000895EFE6F0E0908182E0892780830895D7
:1044E0001F920F920FB60F9211242F933F934F9369
:1044F0005F936F937F938F939F93AF93BF93EF934C
:10450000FF938091DE019091DF0101969093DF018E
:104510008093DE01811103C082E00E945008E09187
:10452000DF01E695E695F0E0EA5CFA4FE4918091D0
:10453000DE018E1303C080E00E945008FF91EF91CE
:10454000BF91AF919F918F917F916F915F914F91AB
:104550003F912F910F900FBE0F901F9018950E94C2
:10456000B6226894B1110C94452308950E942A2321
:1045700088F09F5798F0B92F9927B751B0F0E1F024
:10458000660F771F881F991F1AF0BA95C9F714C0D4
:10459000B13091F00E944423B1E008950C9444237B
:1045A000672F782F8827B85F39F0B93FCCF386950D
:1045B00077956795B395D9F73EF49095809570956A
:1045C00061957F4F8F4F9F4F0895E89409C097FBE7
:1045D0003EF490958095709561957F4F8F4F9F4FDA
:1045E0009923A9F0F92F96E9BB279395F69587951E
:1045F00077956795B795F111F8CFFAF4BB0F11F4E1
:1046000060FF1BC06F5F7F4F8F4F9F4F16C0882387
:1046100011F096E911C0772321F09EE8872F762FBD
:1046200005C0662371F096E8862F70E060E02AF0FE
:104630009A95660F771F881FDAF7880F96958795EA
:1046400097F9089557FD9058440F551F59F05F3F53
:1046500071F04795880F97FB991F61F09F3F79F0A4
:1046600087950895121613061406551FF2CF469526
:10467000F1DF08C0161617061806991FF1CF8695A8
:104680007105610508940895E894BB27662777278C
:10469000CB0197F908950E945E230C94CF230E94CA
:1046A000C12338F00E94C82320F0952311F00C9408
:1046B000B8230C94BE2311240C9445230E9422237A
:1046C00070F3959FC1F3950F50E0551F629FF00165
:1046D000729FBB27F00DB11D639FAA27F00DB11D7E
:1046E000AA1F649F6627B00DA11D661F829F222707
:1046F000B00DA11D621F739FB00DA11D621F839F8E
:10470000A00D611D221F749F3327A00D611D231F63
:10471000849F600D211D822F762F6A2F11249F57B1
:1047200050409AF0F1F088234AF0EE0FFF1FBB1FB4
:10473000661F771F881F91505040A9F79E3F510573
:1047400080F00C94B8230C9445235F3FE4F3983E2B
:10475000D4F3869577956795B795F795E7959F5F1D
:10476000C1F7FE2B880F911D9695879597F90895AF
:1047700097F99F6780E870E060E008959FEF80EC14
:10478000089500240A9416161706180609060895B7
:1047900000240A9412161306140605060895092E1D
:1047A0000394000C11F4882352F0BB0F40F4BF2B8C
:1047B00011F460FF04C06F5F7F4F8F4F9F4F0895CC
:1047C00097FB072E16F4009407D077FD09D00E94BE
:1047D000FA2307FC05D03EF4909581959F4F0895EC
:1047E000709561957F4F0895EE0FFF1F0590F4912E
:1047F000E02D0994AA1BBB1B51E107C0AA1FBB1FD8
:10480000A617B70710F0A61BB70B881F991F5A955C
:10481000A9F780959095BC01CD010895F999FECF37
:1048200092BD81BDF89A992780B50895A8E1B0E0BE
:1048300042E050E00C943624262FF999FECF92BD29
:1048400081BDF89A019700B4021639F01FBA20BD55
:104850000FB6F894FA9AF99A0FBE08950196272F89
:104860000E941D240C941C24DC01CB01FC01F9994D
:10487000FECF06C0F2BDE1BDF89A319600B40D92AC
:0C48800041505040B8F70895F894FFCF65
:10488C0020025208E008BD08890855080101BA0148
:10489C0028080A03140A3F4D3639F704AA04740495
:1048AC003B04CE03E70300041904010203040506CC
:0448BC0007080900E0
:00000001FF

@ -0,0 +1,225 @@
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#include "keymap_plover.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
#define MDIA 2 // media keys
#define STEN 3 // steno
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,---------------------------------------------------. ,---------------------------------------------------.
* | = | 1 | 2 | 3 | 4 | 5 | STEN | | NONE | 6 | 7 | 8 | 9 | 0 | \ |
* |--------+------+------+------+-------+-------------| |-------+------+------+------+------+------+--------|
* | Del | ' | , | . | P | Y | Esc | | Caps | F | G | C | R | L | / |
* |--------+------+------+------+-------+------| | | |------+------+------+------+------+--------|
* | BkSp | A | O | E | U | I |------| |-------| D | H | T | N |S / L2|- / Cmd |
* |--------+------+------+------+-------+------| Tab | | Enter |------+------+------+------+------+--------|
* | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | RShift |
* `--------+------+------+------+-------+-------------' `--------------+------+------+------+------+--------'
* |Grv/L1| '" |AltShf| Left | Right | | Up | Down | [ | ] | ~L1 |
* `-----------------------------------' `----------------------------------'
* ,-------------. ,---------------.
* | PgUp | PgDn | | Home | End |
* ,------|------|------| |-------+-------+------.
* | | | NONE | | NONE | | |
* | Alt | NONE |------| |-------| Space | Ctrl |
* | | | Supr | | AltGr | | |
* `--------------------' `----------------------'
*/
// 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_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, M(0),
KC_DELT, KC_QUOT, KC_COMM,KC_DOT, KC_P, KC_Y, KC_ESC,
KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I,
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_TAB,
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
KC_PGUP,KC_PGDN,
KC_NO,
KC_LALT,KC_ENT ,KC_LGUI,
// right hand
KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
KC_CAPS, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
KC_D, KC_H, KC_T, KC_N, LT(MDIA, KC_S), GUI_T(KC_MINS),
KC_ENT, KC_B, KC_M, KC_W, KC_V, KC_Z , KC_RSFT,
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
KC_HOME,KC_END,
KC_NO,
KC_RALT,KC_SPC,KC_RCTL
),
/* 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
[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
),
[STEN] = KEYMAP( // layout: layer 4: Steno for Plover
// left hand
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_STAR,
KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR,
KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR,
KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS,
KC_NO, KC_NO,
KC_NO,
PV_A, PV_O, KC_NO,
// right hand
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
PV_STAR, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD,
PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ,
KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO,
KC_NO,
KC_NO, PV_E, PV_U
),
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
};
void toggle_steno(int pressed)
{
uint8_t layer = biton32(layer_state);
if (pressed) {
if (layer != STEN) layer_on(STEN); else layer_off(STEN);
register_code(PV_LS);
register_code(PV_LH);
register_code(PV_RF);
register_code(PV_RT);
} else {
unregister_code(PV_LS);
unregister_code(PV_LH);
unregister_code(PV_RF);
unregister_code(PV_RT);
}
}
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:
toggle_steno(record->event.pressed);
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;
case 3:
ergodox_right_led_3_on();
break;
default:
// none
break;
}
};

@ -0,0 +1,19 @@
# Twey's Home Configuration
## Layers
- Layer 0: Non-ANSI Dvorak layout, with modified modifiers — all
modifiers on thumb keys, as well as return and space.
- Layer 1: Default symbol layout.
- Layer 2: Default media/mouse layout.
- Layer 3: Plover-oriented stenography layer.
## Unusual features
The Plover key (top right key on the left half) also sends my Plover
toggle chord (SH-FT) when pressed, as well as toggling the steno
layer, so you can toggle between steno and typing modes with a single
keypress.
If you want to use this feature, you'll need to add:
"SH-FT": "{PLOVER:TOGGLE}"
to your Plover dictionary.

@ -0,0 +1,1122 @@
:100000000C9465020C94A9020C94A9020C94A90208
:100010000C94A9020C94A9020C94A9020C94A902B4
:100020000C94A9020C94A9020C94C50B0C94970C87
:100030000C94A9020C94A9020C94A9020C94A90294
:100040000C94A9020C9422210C94A9020C94A902EC
:100050000C94A9020C94C41A0C94A9020C94A90241
:100060000C94A9020C94A9020C94A9020C94A90264
:100070000C94A9020C94A9020C94A9020C94A90254
:100080000C94A9020C94A9020C94A9020C94A90244
:100090000C94A9020C94A9020C94A9020C94A90234
:1000A0000C94A9020C94A9020C94A902FC0C1E0D3C
:1000B000090E1E0D090E600D830D090ED80DEB0DF6
:1000C000D810D81006110611481184118413841316
:1000D0009C118413931293125E138413841372136E
:1000E0000000F0A12E004C002A00E1003581000044
:1000F0001E00140004001D7134004D001F001A0082
:1001000016001B00E1042A0020000800070006007A
:1001100050002C0021001500090019004F004A0072
:10012000220017000A000500000065745000015409
:100130000000007F0000E3004F0001540000007742
:100140000000E20023001C000B00110000002971D8
:10015000240018000D00100052004B0025000C0078
:100160000E00360051002800260012000F00370054
:100170002F002B00270013003382387130004E000F
:100180002D0031003478E500C100000001000100BD
:1001900001000100010000003A001E0220022202BC
:1001A000010001003B001F022102230201000100A7
:1001B0003C002F0226022F00010001003D0030020A
:1001C00027023000010001003E00310235003502F7
:1001D000000001000100010000000100000001001A
:1001E0000100010000000100000001003F0052007A
:1001F00051002402000001004000240021001E00E4
:10020000010001004100250022001F00370001000D
:1002100042002600230020002700010043002502A1
:100220002E0231002E0001004400450001000100B3
:1002300001000000010001000100010001000000B8
:1002400001000100010001000100010001000100A6
:10025000F2000100010001000100F000F1000100C6
:10026000F400010001000100F3000100F5000100AD
:100270000100010001000100000001000100010077
:100280000000010000000100010001000000010069
:100290000000010001000100010001000000010058
:1002A0000100010001000100A9000100010001009E
:1002B0000100AC00AA00B600010001000100AB0083
:1002C000A80001000100010001000100010001007F
:1002D00001000100AE00010001000000160345000E
:1002E000720067006F0044006F0078002000450036
:1002F0005A00000016034500720067006F004400BA
:100300006F007800200045005A0000000403090433
:1003100009026D00040100A0FA09040000010301B4
:100320000100092111010001223F00070581030896
:10033000000A090401000103010200092111010062
:1003400001224D000705820308000A09040200018A
:100350000300000009211101000122360007058376
:100360000308000A09040300010300000009211129
:100370000100012239000705840310000112011059
:100380000100000008EDFE07130100010200010555
:10039000010906A101050719E029E71500250195C6
:1003A0000875018102050819012905950575019156
:1003B000029501750391010507190029771500259C
:1003C00001957875018102C005010980A1018502AE
:1003D00016010026B7001A01002AB7007510950112
:1003E0008100C0050C0901A1018503160100269CAE
:1003F000021A01002A9C02751095018100C00501B6
:100400000902A1010901A100050919012905150029
:10041000250195057501810295017503810105018D
:10042000093009311581257F950275088106093843
:100430001581257F950175088106050C0A3802157E
:1004400081257F950175088106C0C005010906A1B7
:1004500001050719E029E7150025019508750181B7
:100460000295017508810105081901290595057591
:100470000191029501750391010507190029FF15E6
:100480000025FF950675088100C0000000000000EF
:100490000000000000010204060A0F17202C3A4A4F
:1004A0005D71879DB3C7DAE9F5FCFFFCF5E9DAC7B2
:1004B000B39D87715D4A3A2C20170F0A060402018A
:1004C0000000000000000000000011241FBECFEF5C
:1004D000DAE0DEBFCDBF04B603FE24C08091EE019A
:1004E0009091EF01A091F001B091F1018730904B14
:1004F000A740B04BB9F41092EE011092EF011092A8
:10050000F0011092F10114BE84B7877F84BF88E1A7
:100510000FB6F89480936000109260000FBEE0E088
:10052000FFE3099511E0A0E0B1E0E8ECF5E402C0DA
:1005300005900D92A433B107D9F711E0A4E3B1E01F
:1005400001C01D92AE3EB107E1F70E940B090C9469
:10055000E2220C94000061110BC0FC01828188230F
:1005600021F085EE0E946C0F03C085EE0E943410CE
:1005700080E090E0089508956091B1017091B2011A
:100580008091B3019091B4010E94F01956985E9841
:1005900025982D9826982E9827982F98813019F015
:1005A000823021F00895259A2D9A0895269A2E9A40
:1005B00008958CEB92E0892B11F00E94BC0280E040
:1005C00090E0089556985E9825982D9826982E9834
:1005D00027982F988FEF90E0909389008093880060
:1005E00090938B0080938A0090938D0080938C0071
:1005F000259A2D9A2FEF80E792E02150804090407D
:10060000E1F700C00000269A2E9A2FEF80E792E0D3
:10061000215080409040E1F700C00000279A2F9AB7
:100620002FEF80E792E0215080409040E1F700C03A
:10063000000025982D982FEF80E792E02150804010
:100640009040E1F700C0000026982E982FEF80E739
:1006500092E0215080409040E1F700C000002798D0
:100660002F9856985E9825982D9826982E9827981A
:100670002F98089589EA8093800089E08093810013
:1006800024982C983F988AB18F748AB96E98479AAB
:100690008BB1806B8BB9769A0E94E2028BEB92E071
:1006A000892B11F00E94BB0280E090E0089580E267
:1006B000809300018091340181110EC00E94A60335
:1006C00081E0809334012FEF83ED90E3215080404F
:1006D0009040E1F700C0000080E40E94AC038093EA
:1006E000000181112EC00E94D60380930001811168
:1006F00028C00E94D60380930001811122C08FE39D
:100700000E94D6038093000181111BC00E94CE037A
:1007100080E40E94AC0380930001811112C08CE040
:100720000E94D6038093000181110BC00E94D60362
:1007300080930001811105C08FE30E94D60380934E
:1007400000010E94CE038091000108951092B9002B
:100750008AE08093B800089594EA9093BC00909149
:10076000BC0097FFFCCF9091B900987F983021F0A2
:10077000903111F081E008958093BB0084E880936C
:10078000BC008091BC0087FFFCCF8091B900887FBE
:10079000883111F0803471F780E0089584E9809306
:1007A000BC008091BC0084FDFCCF08958093BB0009
:1007B00084E88093BC008091BC0087FFFCCF9091BF
:1007C000B900987F81E0983209F480E0089584E8C8
:1007D0008093BC008091BC0087FFFCCF8091BB0060
:1007E000089580910001811115C080E40E94AC033E
:1007F0008093000181110CC082E10E94D603809396
:100800000001811105C08FEF0E94D6038093000183
:100810000E94CE0384B1807F84B985B1807F85B981
:100820008AB1837F8AB98BB1837F8BB93E98469812
:1008300008950E945703809300010E94F10380B342
:100840008C7080BB81B3836F81BBE4E4F1E0A6E3ED
:10085000B1E011921D9281E0E235F807D1F78AE309
:1008600093E0892B11F00C943A030895BF92CF9234
:10087000DF92EF92FF920F931F93CF93DF938091BC
:100880000001882379F0809135018F5F80933501D5
:10089000811108C00E94570380930001811102C09A
:1008A0000E94E20206E311E0C0E0D0E0DD24D39430
:1008B00082E0C82EEE24E394F12CC73000F580913D
:1008C0000001811162C080E40E94AC0380930001AA
:1008D000811112C082E10E94D60380930001811130
:1008E0000BC0C7010C2E01C0880F0A94EAF780954F
:1008F0000E94D603809300010E94CE0346C0CA30F6
:10090000A1F028F4C83059F0C93061F005C0CC30EE
:1009100089F070F0CD3089F0209A289810C0219A83
:1009200029980DC0229A2A980AC0239A2B9807C0AA
:10093000529A01C0539A5B9802C03E9A4698E0EAE8
:10094000EA95F1F78FB1799960C092E081708D25B9
:10095000892B7C9B02C090E001C094E0892B7D9B99
:1009600002C090E001C098E0892B7E9B02C090E01D
:1009700001C090E1892B9FB19095991F9927991FEC
:100980009295990F907E892B0FC080910001811163
:1009900051C080E40E94AC03809300018823B9F128
:1009A000B12C0E94CE038B2DF8019081981719F07D
:1009B0008083C09201010E94F10321960F5F1F4FB7
:1009C000CE30D10509F079CF809101018823B1F0B3
:1009D000815080930101882339F08FE99FE00197CE
:1009E000F1F700C000000AC0A4E4B1E0E6E3F1E0E2
:1009F00081918D9391E0E434F907D1F789ED92E08C
:100A0000892BD1F00E94D90217C090E09FCF83E1DB
:100A10000E94D603809300018111C2CF81E40E941D
:100A2000AC03809300018111BBCF0E94E703B82E75
:100A3000B094B7CF80E0B8CF81E0DF91CF911F9124
:100A40000F91FF90EF90DF90CF90BF900895E82F27
:100A5000F0E0EC5BFE4F8081089508958B3B91059B
:100A600078F4883A910540F5853A9105D0F48430C0
:100A7000910508F0B1C08130910509F4ADC06BC09B
:100A8000803E910508F467C0883E910508F4A4C033
:100A90009C01205F31092031310508F05CC0906570
:100AA0000895853A910509F459C0863A910509F4EB
:100AB00058C083E890E40895883A910509F454C039
:100AC000893A910509F453C08A3A910509F452C054
:100AD0008B3A910509F451C08C3A910509F450C044
:100AE0008D3A910509F44FC0803B910509F44EC041
:100AF0008E3A910509F44DC08F3A910509F44CC026
:100B0000813B910509F44BC0823B910509F44AC031
:100B1000833B910509F449C0843B910509F448C021
:100B2000853B910509F447C0863B910509F446C011
:100B3000873B910509F445C0883B910509F444C001
:100B4000893B910509F443C08A3B910509F042C0F5
:100B50008AE296E4089580E090E0089581E890E4C8
:100B6000089582E890E4089582EE94E4089589EE71
:100B700094E408958AEE94E4089585EB94E408954E
:100B800086EB94E4089587EB94E408958CEC94E468
:100B900008958DEC94E4089583E895E408958AE837
:100BA00095E4089582E995E4089584E995E408952B
:100BB00081E296E4089583E296E4089584E296E45F
:100BC000089585E296E4089586E296E4089587E222
:100BD00096E4089580E094E40895089596E0799F5E
:100BE000F001112494E5899FE00DF11D1124E60F19
:100BF000F11DEE0FFF1FEC51FF4F85919491089569
:100C0000880F991F805A9040FC0185919491089516
:100C1000880F991F80529F4FFC01859194910895F0
:100C200026E0729FF001112444E5849FE00DF11D40
:100C30001124E60FF11DEE0FFF1FEC51FF4F259120
:100C40003491C9019A9581159F4110F4C901089505
:100C5000C90190528115904128F4C9019F700E94EA
:100C600008060895C90190538115904120F4C901E7
:100C70009927906C0895211580E5380769F40E9442
:100C8000A5139FEF24E34CE0915020404040E1F752
:100C900000C000000C94E91A213080E5380731F4D7
:100CA0008091CC0181608093CC010895C901905559
:100CB0008115904108F050C0832F99278F70992794
:100CC00081309105D9F4A9014370552702C0880FDE
:100CD000991F4A95E2F79C68A90164E0440F551FEB
:100CE0006A95E1F744275370842B952B73E0220F0C
:100CF000331F7A95E1F7207633271DC082309105A6
:100D000029F4922F8827816F906A08958330910586
:100D1000A9F4A9014370552781E090E002C0880F33
:100D2000991F4A95E2F79C6843E0220F331F4A95CA
:100D3000E1F7207E3770822B932B08950497F1F40E
:100D4000A9014370552781E090E002C0880F991FE8
:100D50004A95E2F79A68E8CFC9019057811590410A
:100D600020F4C9019F7090620895C90190588115BF
:100D7000904120F4C9019F70906A0895203E31058A
:100D8000E0F4203C310558F52133310509F470C0F9
:100D900048F42932310509F464C02A32310509F4D6
:100DA0006EC074C029333105F1F022383105D9F015
:100DB0002533310509F44EC069C0233E310589F160
:100DC00038F4203E3105C1F0223E3105E1F05EC02D
:100DD000263E310569F1273E3105A9F157C0C90109
:100DE0000E94000608958091DF0180FD02C081FF0E
:100DF0004DC080EE90E04BC08091DF0180FFF9CFC5
:100E000089E390E044C08091DF0182FF0EC08091B1
:100E1000DF0184FF03C080E090E039C083EE90E002
:100E200036C08091DF0182FFF2CF82EE90E02FC0CA
:100E30008091DF0183FF0BC08091DF0184FDEBCF48
:100E400087EE90E024C08091DF0183FFF5CF86EE2E
:100E500090E01DC08091DF0185FF07C089E290E02E
:100E600016C08091DF0185FFF9CF85E390E00FC0C8
:100E70008091DF0186FF07C08AE290E008C0809180
:100E8000DF0186FFF9CF81E390E001C0C9010E9434
:100E90002E0508950895809162010895CF93DF9300
:100EA00000D01F92CDB7DEB72091E501243019F5AF
:100EB00023E029839B838A832093E9008FEF90911D
:100EC000E800815095FD06C095ED9A95F1F7000078
:100ED0008111F5CF8091E80085FF0DC040E050E022
:100EE00063E070E0CE0101960E94B8098091E800AD
:100EF0008E778093E8000F900F900F90DF91CF9145
:100F00000895CF93DF9300D01F92CDB7DEB7209125
:100F1000E501243021F522E029839B838A8383E045
:100F20008093E9008FEF9091E800815095FD06C015
:100F300095ED9A95F1F700008111F5CF8091E800C9
:100F400085FF0DC040E050E063E070E0CE01019607
:100F50000E94B8098091E8008E778093E8000F9096
:100F60000F900F90DF91CF9108952091E5012430EB
:100F7000F1F422E02093E9002FEF3091E8002150B6
:100F800035FD06C035ED3A95F1F700002111F5CF9A
:100F90002091E80025FF0BC040E050E065E070E0E4
:100FA0000E94B8098091E8008E778093E800089548
:100FB000CF93DF93EC018091E501843009F046C0C6
:100FC00090910C019923D9F090910D019923B9F0DA
:100FD0008093E9008FEF9091E800815095FD06C065
:100FE00095E19A95F1F700008111F5CF8091E80025
:100FF00085FF2CC040E050E060E170E017C081E068
:101000008093E9008FEF9091E800815095FD06C034
:1010100095ED9A95F1F700008111F5CF8091E800E8
:1010200085FF14C040E050E068E070E0CE010E940F
:10103000B8098091E8008E778093E80080E1FE0196
:10104000A2E5B1E001900D928A95E1F7DF91CF9191
:1010500008958091E401811109C00E944A0B0E9409
:10106000A70B8091E20084608093E20008951092C3
:10107000E401089508950C940F210E94801A0E94A3
:1010800015210E94440E0C944A0742E061EC81E075
:101090000E94C40A42E061EC82E00E94C40A42E07D
:1010A00061EC83E00E94C40A42E161EC84E00C94AC
:1010B000C40A8091E701833009F455C030F48130CF
:1010C00071F0823009F48EC008958A3009F47AC034
:1010D0008B3009F460C0893009F09CC020C0809139
:1010E000E601813A09F096C08091E800877F8093FD
:1010F000E8008091EA019091EB01892B21F060E0FA
:1011000080E090E003C060E182E591E070E00E9441
:10111000010A8091E8008B778093E8000895809120
:10112000E601813209F076C08091EA019091EB01ED
:10113000009719F0039709F06DC08091E800877F50
:101140008093E8008091E80082FD05C08091E50170
:101150008111F8CF5FC08091F1008093620180918E
:10116000E8008B7753C08091E601813A09F052C0C4
:101170008091EA019091EB01892B09F04BC080919D
:10118000E800877F8093E8008091E80080FFFCCF33
:1011900080910C0136C08091E6018132D9F58091B1
:1011A000EA019091EB01892BA9F58091E800877FF6
:1011B0008093E8000E94F90A8091E80180930C0175
:1011C0000C94A5138091E601813221F58091E8000D
:1011D000877F8093E8000E94F90A8091E90180935B
:1011E000630108958091E601813AA1F48091E800BD
:1011F000877F8093E8008091E80080FFFCCF80919A
:1012000063018093F1008091E8008E778093E8007D
:101210000C94F90A089584B7877F84BF88E10FB6DC
:10122000F89480936000109260000FBE90E080E818
:101230000FB6F89480936100909361000FBE0E94F6
:10124000930E0E944A0B0E94A70B8091E2008460DB
:101250008093E20078940E94220E0E94950E82E014
:1012600091E00E943F0E0E94FD208091E5018530B3
:1012700069F40E94431A8091E3018823B1F30E942C
:101280006B1A882391F30E94A209EFCF0E949B0E54
:10129000ECCF292F332723303105A9F06CF421300E
:1012A000310509F442C02230310509F043C08DE612
:1012B00090E020E133E042C021323105C9F0223212
:1012C000310519F137C099278130910541F08230FD
:1012D000910541F0892B71F5ECE0F3E005C0E4EFF6
:1012E000F2E002C0ECEDF2E0849190E09F0126C0B4
:1012F000643000F5E62FF0E0EE0FFF1FEE5DFE4FCD
:101300002081318189E090E019C0643098F4E62FA3
:10131000F0E0DF01AA0FBB1FA65EBE4F2D913C91EE
:10132000EA5EFE4F808190E009C082E190E02DE707
:1013300033E004C080E090E020E030E0FA01318347
:101340002083089580E189BD82E189BD09B400FE52
:10135000FDCF8091D8008F7D8093D8008091E000F0
:1013600082608093E0008091E00081FDFCCF0895D1
:10137000CF92DF92EF92FF920F931F93CF93DF9361
:101380007C018B01EA010E941A0B811131C0209768
:1013900031F088819981081B190BE80EF91EC12CC8
:1013A000D12C0115110519F18091E80085FD14C0BB
:1013B0008091E8008E778093E800209741F0888143
:1013C00099818C0D9D1D9983888385E011C00E94B1
:1013D0001A0B882331F30CC0F70181917F018093B0
:1013E000F10001501109FFEFCF1ADF0ADACF80E0D8
:1013F000DF91CF911F910F91FF90EF90DF90CF90F1
:1014000008952091EC013091ED012617370748F03F
:101410006115710539F42091E8002E772093E800DA
:1014200001C0B901FC0120E061157105B9F180919D
:10143000E501882309F440C0853009F43FC080915C
:10144000E80083FD3DC08091E80082FF06C08091E6
:10145000E80082FF26C080E008958091E80080FFC8
:10146000E3CF2091F3008091F20090E0922B611580
:10147000710551F08830910538F421912093F100E5
:10148000615071090196F3CF21E0089709F020E03F
:101490008091E8008E778093E800C6CF2111C7CFF6
:1014A000D6CF8091E501882339F0853039F08091DD
:1014B000E80083FFCCCF04C082E0089583E0089564
:1014C00081E008952091EC013091ED012617370756
:1014D00048F06115710539F42091E8002E772093CA
:1014E000E80001C0B901FC0120E061157105C1F1FE
:1014F0008091E501882309F441C0853009F440C09A
:101500008091E80083FD3EC08091E80082FF06C024
:101510008091E80082FF27C080E008958091E80074
:1015200080FFE3CF2091F3008091F20090E0922BB6
:101530006115710559F08830910540F4249120938C
:10154000F1003196615071090196F2CF21E00897C0
:1015500009F020E08091E8008E778093E800C5CF05
:101560002111C6CFD5CF8091E501882339F0853090
:1015700039F08091E80083FFCBCF04C082E008956A
:1015800083E0089581E00895982F973058F590935F
:10159000E900981739F07091EC002091ED0050911E
:1015A000F00003C0242F762F50E021FF19C03091A6
:1015B000EB003E7F3093EB003091ED003D7F3093A8
:1015C000ED003091EB0031603093EB007093EC0054
:1015D0002093ED005093F0002091EE0027FF07C00C
:1015E0009F5FD3CF8F708093E90081E0089580E002
:1015F00008958091E60187FD05C08091E80080FF95
:101600000EC012C08091E80082FD05C08091E50106
:101610008111F8CF08958091E8008B7708C0809100
:10162000E5018111EACF08958091E8008E778093DB
:10163000E80008958091E4009091E50045E620914E
:10164000EC0020FF21C02091E80020FD21C0209166
:10165000E501222389F0253089F02091EB0025FD5A
:101660000FC02091E4003091E5002817390739F3C5
:10167000415041F0C901E3CF82E0089583E008952D
:1016800081E0089584E008952091E80022FFDFCFF3
:1016900080E008950E94B80B0E94C00BE0EEF0E0DD
:1016A000808181608083E8EDF0E080818F778083A6
:1016B00019BCA7EDB0E08C918E7F8C9380818F7EDA
:1016C00080831092E40108950F931F93CF93DF93CB
:1016D0000E94B80B0E94C00BC8EDD0E088818F77C4
:1016E000888388818068888388818F7D888319BCFE
:1016F0001092E5011092E1011092E3011092E201D3
:1017000000EE10E0F80180818B7F8083888181600A
:10171000888342E060E080E00E94C40AE1EEF0E0ED
:1017200080818E7F8083E2EEF0E080818160808323
:10173000808188608083F80180818E7F80838881AA
:1017400080618883DF91CF911F910F910895E8ED1B
:10175000F0E080818F7E8083E7EDF0E08081816022
:10176000808384E082BF81E08093E4010C94640B69
:10177000E8EDF0E080818E7F80831092E200089592
:101780001092DA001092E10008951F920F920FB6A6
:101790000F9211242F933F934F935F936F937F93F7
:1017A0008F939F93AF93BF93EF93FF938091E1004B
:1017B00082FF0BC08091E20082FF07C08091E100B0
:1017C0008B7F8093E1000E94210E8091DA0080FFE0
:1017D0001FC08091D80080FF1BC08091DA008E7FEF
:1017E0008093DA008091D90080FF0DC080E189BD2F
:1017F00082E189BD09B400FEFDCF81E08093E5015F
:101800000E94290805C019BC1092E5010E94370802
:101810008091E10080FF19C08091E20080FF15C037
:101820008091E2008E7F8093E2008091E2008061EF
:101830008093E2008091D80080628093D80019BC28
:1018400085E08093E5010E943B088091E10084FFE0
:1018500030C08091E20084FF2CC080E189BD82E12C
:1018600089BD09B400FEFDCF8091D8008F7D8093A3
:10187000D8008091E1008F7E8093E1008091E200AA
:101880008F7E8093E2008091E20081608093E2008D
:101890008091E101882311F084E007C08091E3008A
:1018A00087FF02C083E001C081E08093E5010E94D0
:1018B0003D088091E10083FF29C08091E20083FF11
:1018C00025C08091E100877F8093E10082E08093D2
:1018D000E5011092E1018091E1008E7F8093E100AB
:1018E0008091E2008E7F8093E2008091E20080612F
:1018F0008093E20042E060E080E00E94C40A8091B0
:10190000F00088608093F0000E943A08FF91EF9108
:10191000BF91AF919F918F917F916F915F914F9107
:101920003F912F910F900FBE0F901F9018951F920F
:101930000F920FB60F9211242F933F934F935F9303
:101940006F937F938F939F93AF93BF93CF93EF93B7
:10195000FF93C091E900CF708091EC001092E900F4
:101960008091F000877F8093F00078940E94D30CE0
:101970001092E9008091F00088608093F000C0939D
:10198000E900FF91EF91CF91BF91AF919F918F911E
:101990007F916F915F914F913F912F910F900FBE6B
:1019A0000F901F9018951F93CF93DF93CDB7DEB79D
:1019B000AA970FB6F894DEBF0FBECDBFE6EEF1E0FA
:1019C0008091F100819321E0EE3EF207C9F70E9479
:1019D00059088091E80083FF1CC12091E6013091F5
:1019E000E701832F90E08A30910508F012C1FC01D5
:1019F000EA5AFF4F0C949722203881F0223809F0E0
:101A000008C18091EA018F708093E9008091EB001A
:101A100085FB882780F91092E90006C08091E201D9
:101A20009091E301911182609091E800977F9093EB
:101A3000E8008093F1001092F100C5C0822F8D7FE5
:101A400009F0E7C0222319F0223061F0E2C0809152
:101A5000E801813009F0DDC0333009F080E0809387
:101A6000E30128C08091E801811124C02091EA019E
:101A70002F7009F4CEC02093E9008091EB0080FF25
:101A800019C08091EB00333011F4806211C0806185
:101A90008093EB0081E090E0022E01C0880F0A9451
:101AA000EAF78093EA001092EA008091EB008860E8
:101AB0008093EB001092E9008091E800877F86C058
:101AC0002111A7C01091E8011F778091E300807871
:101AD000812B8093E3008091E800877F8093E8006A
:101AE0000E94F90A8091E80080FFFCCF8091E3001A
:101AF00080688093E300112311F083E001C082E04D
:101B00008093E50186C02058223008F082C0809181
:101B1000E8019091E9018C3D23E0920779F583E09B
:101B20008A838AE289834FB7F894DE01139620E016
:101B30003EE051E2E32FF0E050935700E49120FFA4
:101B400003C0E295EF703F5FEF708E2F90E0EA30B8
:101B500010F0C79601C0C0968D939D932F5F2431DE
:101B600049F74FBF8091E800877F8093E8006AE2E1
:101B700070E0CE0101960E94010A14C0AE014F5FD1
:101B80005F4F6091EA010E944909009709F441C042
:101B90002091E800277F2093E800BC0189819A8189
:101BA0000E94620A8091E8008B778093E80031C040
:101BB000203879F58091E800877F8093E800809154
:101BC000E1018093F1008091E8008E778093E80036
:101BD0000E94F90A1EC021111CC09091E8019230A8
:101BE000C0F48091E800877F8093E8009093E10142
:101BF0000E94F90A8091E101811104C08091E30003
:101C000087FF02C084E001C081E08093E5010E946B
:101C100045088091E80083FF0AC08091E800877F33
:101C20008093E8008091EB0080628093EB00AA969D
:101C30000FB6F894DEBF0FBECDBFDF91CF911F91DD
:101C400008950895CF938091E5018823B1F08091A4
:101C5000E9008F709091EC0090FF02C090E801C005
:101C600090E0C92FC82B1092E9008091E80083FD15
:101C70000E94D30CCF70C093E900CF910895909348
:101C80006901809368010895E0916801F09169010C
:101C9000309721F00190F081E02D099480E00895C3
:101CA000E0916801F0916901309721F00280F381A1
:101CB000E02D09940895E0916801F0916901309751
:101CC00021F00480F581E02D0994089520916601AA
:101CD000309167018217930771F0909367018093A9
:101CE0006601E0916801F0916901309721F006806A
:101CF000F781E02D099408952091640130916501E8
:101D00008217930771F09093650180936401E091CD
:101D10006801F0916901309721F00084F185E02D90
:101D20000994089508950C94920E0E94861A0E94B8
:101D300019040C944C1BCF92DF92EF92FF920F93F9
:101D40001F93CF93DF93CDB7DEB72B970FB6F894E1
:101D5000DEBF0FBECDBF0E9436043BE6E32E31E06E
:101D6000F32E00E010E0C02E802F0E942705F7011F
:101D7000D1907F01D826B1F40F5F1F4F0E301105AF
:101D800091F78FEF89838A831B820E948F1A81606B
:101D9000782F9D838C8349815A816B818D810E942C
:101DA0003E0F41C09091CC0191FF04C08B870E94EF
:101DB0002D058B8520E030E04D2D50E0922FBA01AB
:101DC000022E02C0759567950A94E2F760FF25C060
:101DD0002E83CF82EE24E394F12C02C0EE0CFF1C84
:101DE0009A95E2F790E08E219F2121E0892B09F45A
:101DF00020E028870E948F1A8160782F9A87898730
:101E00004E815F8168858A850E943E0FF801E55901
:101E1000FE4F80818E25808306C02F5F3F4F263086
:101E2000310561F6A9CF0E94301E10916A010E940F
:101E3000440E1817A1F00E94440E80936A012B965D
:101E40000FB6F894DEBF0FBECDBFDF91CF911F91CB
:101E50000F91FF90EF90DF90CF900C944A072B9654
:101E60000FB6F894DEBF0FBECDBFDF91CF911F91AB
:101E70000F91FF90EF90DF90CF900895CF93DF9375
:101E8000CDB7DEB72B970FB6F894DEBF0FBECDBF30
:101E90004F83588769877A878B87DE01119686E0A2
:101EA000FD0111928A95E9F785E0FE0137960190D0
:101EB0000D928A95E1F749815A816B817C818D81F0
:101EC0009E810E9471162B960FB6F894DEBF0FBE4E
:101ED000CDBFDF91CF910895CF93C82F882309F408
:101EE000C1C0823859F40E94440E81FDBBC089E311
:101EF0000E9410190E94CA1989E30CC0833879F432
:101F00000E94440E80FDAEC083E50E9410190E941D
:101F1000CA1983E50E945019CF910C94CA198438CC
:101F200059F40E94440E82FD9DC087E40E9410195E
:101F30000E94CA1987E4EECF8CEF8C0F813A48F4E7
:101F40008C2F0E94652081118DC08C2F0E9410194A
:101F5000E3CF80E28C0F883048F4C77081E001C085
:101F6000880FCA95EAF70E949119D6CF8BE58C0F9E
:101F7000833078F4C53A29F0C63A31F482E890E02B
:101F800005C081E890E002C083E890E0CF910C9416
:101F9000660E88E58C0F833108F064C0C83A39F1C9
:101FA000C93A41F1CA3A49F1CB3A51F1CC3A59F127
:101FB000CD3A61F1C03B69F1CE3A71F1CF3A79F196
:101FC000C13B81F1C23B89F1C33B91F1C43B99F123
:101FD000C53BA1F1C63BA9F1C73BB1F1C83BB9F183
:101FE000C93BC1F1CA3BC9F58AE292E038C082EE32
:101FF00090E035C089EE90E032C08AEE90E02FC0CC
:1020000085EB90E02CC086EB90E029C087EB90E058
:1020100026C08CEC90E023C08DEC90E020C083E8DB
:1020200091E01DC08AE891E01AC082E991E017C0F2
:1020300084E991E014C081E292E011C083E292E071
:102040000EC084E292E00BC085E292E008C086E216
:1020500092E005C087E292E002C080E090E0CF917C
:102060000C947C0ECF910895882309F44BC08238DC
:1020700059F40E94440E81FF45C089E30E94101963
:102080000E94CA1989E30CC0833871F40E94440E7F
:1020900080FF38C083E50E9410190E94CA1983E5A9
:1020A0000E9450190C94CA19843859F40E94440EA5
:1020B00082FF28C087E40E9410190E94CA1987E491
:1020C000EFCF9CEF980F913A58F390E2980F983029
:1020D00050F4877091E001C0990F8A95EAF7892F33
:1020E0000E949719DFCF9BE5980F933020F480E092
:1020F00090E00C94660E885A833120F480E090E0E2
:102100000C947C0E0895882321F00E9491190C9460
:10211000CA190895882321F00E9497190C94CA19AE
:102120000895CF92DF92EF92FF920F931F93CF9378
:10213000DF93CDB7DEB728970FB6F894DEBF0FBE9A
:10214000CDBF8C0185E0F801DE01119601900D9262
:102150008A95E1F7F80140813181F280258122954D
:102160002F7083819481892B31F03F3F31F481E0DE
:102170004F3F19F403C081E001C080E080FDC4C27C
:1021800049833A8389819A812F830E94CE189E8346
:1021900088870E94CD180E94A0174E81E42FE295F7
:1021A000EF70F0E0E05AFF4F2F8168850C94972282
:1021B000842F807F142F1F70882311F01295107FB9
:1021C000FF2059F0112309F454C2812F68870E941F
:1021D000A1190E94CA1968854CC2862F0E9434102A
:1021E000112309F491C2812F0E94A71928960FB6D6
:1021F000F894DEBF0FBECDBFDF91CF911F910F913D
:10220000FF90EF90DF90CF900C94CA19342F307F5D
:10221000842F8F70303211F08295807F662319F001
:10222000613019F12BC0FF20B1F0222309F493C1D2
:10223000213009F090C128960FB6F894DEBF0FBE8A
:10224000CDBFDF91CF911F910F91FF90EF90DF9065
:10225000CF900C94B119222319F0213009F454C203
:102260008E830E94B4198E8189C1FF2021F0223013
:1022700008F04AC270C1211147C280C1FF2021F07D
:10228000222309F468C1F5C1222309F477C105C2EC
:10229000242F26952695237030E02115310521F055
:1022A00021303105C9F030C2FF2021F0862F942F54
:1022B000937002C080E090E028960FB6F894DEBFDD
:1022C0000FBECDBFDF91CF911F910F91FF90EF9087
:1022D000DF90CF900C94660EFF2021F0862F942F74
:1022E000937002C080E090E028960FB6F894DEBFAD
:1022F0000FBECDBFDF91CF911F910F91FF90EF9057
:10230000DF90CF900C947C0E862FFF2019F00E9456
:10231000381D02C00E94A01D28960FB6F894DEBF9B
:102320000FBECDBFDF91CF911F910F91FF90EF9026
:10233000DF90CF900C94251E842F837009F076C017
:10234000F110E2C1262F229526952770220F220F29
:10235000862F8F70C82ED12CE12CF12C022E04C0B8
:10236000CC0CDD1CEE1CFF1C0A94D2F764FF10C0DD
:102370006FE070E080E090E004C0660F771F881F78
:10238000991F2A95D2F7609570958095909503C016
:1023900060E070E0CB01242F269526952370422F14
:1023A00050E042305105D1F04330510559F16C29CC
:1023B0007D298E299F294130510541F128960FB67C
:1023C000F894DEBF0FBECDBFDF91CF911F910F916B
:1023D000FF90EF90DF90CF900C94C5176C297D296A
:1023E0008E299F2928960FB6F894DEBF0FBECDBF69
:1023F000DF91CF911F910F91FF90EF90DF90CF90E1
:102400000C94DF170E94C517C701B60128960FB6B6
:10241000F894DEBF0FBECDBFDF91CF911F910F911A
:10242000FF90EF90DF90CF900C94AB17FF2019F046
:10243000842F817001C08695882309F465C1262FF9
:10244000229526952770220F220F862F8F70C82E77
:10245000D12CE12CF12C022E04C0CC0CDD1CEE1C86
:10246000FF1C0A94D2F764FF10C06FE070E080E0B8
:1024700090E004C0660F771F881F991F2A95D2F736
:10248000609570958095909503C060E070E0CB01F9
:10249000242F269526952370422F50E04230510577
:1024A000D1F04330510559F16C297D298E299F299E
:1024B0004130510541F128960FB6F894DEBF0FBEAA
:1024C000CDBFDF91CF911F910F91FF90EF90DF90E3
:1024D000CF900C9499186C297D298E299F292896D4
:1024E0000FB6F894DEBF0FBECDBFDF91CF911F9125
:1024F0000F91FF90EF90DF90CF900C94B3180E9453
:102500009918C701B60128960FB6F894DEBF0FBE22
:10251000CDBFDF91CF911F910F91FF90EF90DF9092
:10252000CF900C947F18603FC9F118F4603E50F4CE
:102530009BC0623F09F460C008F44AC0633F09F4DD
:102540006FC092C0162F1F70842F8F71FF2099F0DB
:102550000E941818812F28960FB6F894DEBF0FBE80
:10256000CDBFDF91CF911F910F91FF90EF90DF9042
:10257000CF900C9483100E943918812F28960FB6A3
:10258000F894DEBF0FBECDBFDF91CF911F910F91A9
:10259000FF90EF90DF90CF900C948A10FF20A1F075
:1025A0002111B2C0842F8F7128960FB6F894DEBF28
:1025B0000FBECDBFDF91CF911F910F91FF90EF9094
:1025C000DF90CF900C945E18223008F09DC0EACFC7
:1025D000FF20A1F0842F8F7128960FB6F894DEBFEC
:1025E0000FBECDBFDF91CF911F910F91FF90EF9064
:1025F000DF90CF900C941818FF2061F3842F8F7117
:1026000028960FB6F894DEBF0FBECDBFDF91CF91F5
:102610001F910F91FF90EF90DF90CF900C9439189D
:10262000FF2091F0842F8F7128960FB6F894DEBFAB
:102630000FBECDBFDF91CF911F910F91FF90EF9013
:10264000DF90CF900C94031828960FB6F894DEBF55
:102650000FBECDBFDF91CF911F910F91FF90EF90F3
:10266000DF90CF900C94F917FF20A1F0222309F4FA
:10267000B1CF862F28960FB6F894DEBF0FBECDBF20
:10268000DF91CF911F910F91FF90EF90DF90CF904E
:102690000C946C0F222309F4B1CF862F28960FB625
:1026A000F894DEBF0FBECDBFDF91CF911F910F9188
:1026B000FF90EF90DF90CF900C9434104F70C801D2
:1026C0000E94AB0228960FB6F894DEBF0FBECDBFB6
:1026D000DF91CF911F910F91FF90EF90DF90CF90FE
:1026E0000C941E174F70C80128960FB6F894DEBFE1
:1026F0000FBECDBFDF91CF911F910F91FF90EF9053
:10270000DF90CF900C94ED0528960FB6F894DEBFBD
:102710000FBECDBFDF91CF911F910F91FF90EF9032
:10272000DF90CF9008950E94AE190E9483190E94F5
:10273000CA190E94D11E0E94251E80E090E00E94CE
:10274000660E80E090E00C947C0E0E949E190C9422
:1027500093130E94CE18292F22952F7030E02C3031
:1027600031054CF42A3031056CF422503109223005
:10277000310590F407C02C30310551F02F30310570
:1027800039F00AC0803E10F0803F31F481E00895B6
:1027900093FB882780F9089580E00895CF93DF9315
:1027A00000D000D01F92CDB7DEB70F900F900F90E2
:1027B0000F900F90DF91CF910895CF93DF9300D0CA
:1027C00000D000D0CDB7DEB726960FB6F894DEBFA6
:1027D0000FBECDBFDF91CF9108951F93CF93DF93AD
:1027E000C091790116E080917A01C81799F0D0E084
:1027F0001C9FF0011D9FF00D1124E558FE4F4081F4
:10280000518162817381848195810E94DD132196BB
:10281000C770E9CFDF91CF911F9108954091AB012F
:102820005091AC016091AD017091AE018091AF010A
:102830009091B0010C94DD13CF938091B0018295FB
:102840008F7009F05FC08091AD01882309F45AC0F0
:1028500020917901A0917A016091AB017091AC0156
:102860008091AE019091AF0131E06F3F09F030E00F
:10287000B32FC6E02A1709F445C0009721F07F3F27
:1028800021F44B2F03C041E001C040E030E040FDA7
:1028900035C0C29FF001C39FF00D1124E558FE4FD3
:1028A000418174132BC04081641328C042814111BF
:1028B00025C0438154814817590710F441505109EC
:1028C000481B590B483C5105C8F48091B0018F70EA
:1028D00080618093B00186E0829FF001839FF00DBC
:1028E0001124E058FE4F80818F70806180838BEAD5
:1028F00091E00E949110CF910C94ED132F5F3F4F08
:102900002770B8CFCF910895CF92DF92EF92FF92C8
:102910000F931F93CF93DF93CDB7DEB762970FB6B8
:10292000F894DEBF0FBECDBF8C0185E0F801DE015B
:102930001D9601900D928A95E1F7D8014C91119660
:102940005C91119712966C9112971396ED90FC90F2
:1029500014977091AB01E091AC012091AE013091E0
:10296000AF012115310531F0EF3F31F481E07F3FB8
:1029700019F403C081E001C080E0B82FB170CB2E04
:1029800080FD6CC1D090AD01DD2009F4F5C0F0915F
:10299000B001E216F30638F0C701821B930B883CA6
:1029A000910548F09BC0209530952E0D3F1D283C89
:1029B000310508F093C08F2F807F09F052C0E513D6
:1029C00014C0741312C0D62E61110FC0FF70F061D5
:1029D000F093B0010E940E148BEA91E00E949110D6
:1029E0008091B001F80185836CC1EF2831F05F3F21
:1029F00031F481E04F3F19F403C081E001C080E071
:102A000080FD03C081E0862701C080E0F82FF170CF
:102A1000FF2E80FF1CC08091790120917A0136E061
:102A2000821709F428C190E0389FF001399FF00D1A
:102A30001124E558FE4F7181571306C0708147136A
:102A400003C07281671303C001968770E9CFD62E49
:102A5000662309F436C18091B00181608093B00192
:102A600053C0E51308C0741306C0611104C0D80137
:102A70001596FC93AEC04D875E878D859E856A8BCB
:102A80000E94A9136A89882329F1D62E662311F1A1
:102A90002091B001822F82958F7090E002970CF404
:102AA00060C08091AB019091AC0198878F831986AB
:102AB000FB86EA862C87CE01079651C0E51731F1D7
:102AC0004D875E878D859E856A8B0E94A9136A89D2
:102AD00081112EC0C8010E949110A4C08F2F807F49
:102AE00069F77E2DF98AE88A89890E94CE138BEADC
:102AF00091E00E949110EBEAF1E086E0DF011D9287
:102B00008A95E9F70E940E14D12CDBC07413D8CF3C
:102B10006111D6CFD8011596FC93C8010E9491107F
:102B2000EBEAF1E086E0DF011D928A95E9F7C9C082
:102B3000D62E662379F22091B001822F82958F7074
:102B400090E0029774F08091AB019091AC019A8370
:102B500089831B82FD82EC822E83CE0101960E9426
:102B6000911086E0F801ABEAB1E001900D928A95F0
:102B7000E1F70E941C146FC0E216F30628F0C701AB
:102B8000821B930B9C0104C0209530952E0D3F1D98
:102B9000283C310508F052C0D62E662309F49ACF9E
:102BA000E5132CC074132AC08091B00180FD1DC0B4
:102BB000982F92959F70C9F0D80115968C93159710
:102BC0009F3039F09F5F9295907F8F70892B15967B
:102BD0008C93C8010E94911086E0F801ABEAB1E045
:102BE00001900D928A95E1F736C086E0F801ABEAD4
:102BF000B1E001900D928A95E1F763C04D875E8741
:102C00008D859E850E94A913882379F086E0F801BE
:102C1000ABEAB1E001900D928A95E1F70E941C1495
:102C20000E940E14DD24D3944CC08091B0018160C9
:102C30008093B001C8010E94911043C07E2DF98A93
:102C4000E88A89890E94CE13EBEAF1E086E0DF0191
:102C50001D928A95E9F70E940E1433C0662309F489
:102C600039CF4D875E878D859E850E94A913882365
:102C700009F430CFCBCF4D875E878D859E850E942E
:102C8000CE18292F22952F7030E0223031052CF4F8
:102C90009F7041F0811106C00CC0243031052CF426
:102CA0009F7049F4805E883020F0C8010E94911026
:102CB000CF2CDC2C06C0D80115969C91907F91F703
:102CC000F8CF8D2D62960FB6F894DEBF0FBECDBF44
:102CD000DF91CF911F910F91FF90EF90DF90CF90F8
:102CE00008951F93CF93DF93CDB7DEB72C970FB620
:102CF000F894DEBF0FBECDBF4F83588769877A87B0
:102D00008B879C87CE0107960E9484148823C1F08C
:102D10002F8138858A859B85892B31F03F3F11F0C3
:102D200080E003C02F3FE1F781E0811147C04F8170
:102D3000588569857A858B859C850E94DD133EC008
:102D400086E0FE013796DE01119601900D928A957C
:102D5000E1F7FF81E8854A855B854115510531F032
:102D6000EF3F31F481E0FF3F19F403C081E001C07F
:102D700080E080FD23C020917A0130E0C9010196F6
:102D8000877099276091790170E086179707F1F1B4
:102D9000F983EA835D834C8396E0929FD001939FF1
:102DA000B00D1124A558BE4FFE01319601900D9231
:102DB0009A95E1F780937A010E94ED1316E08091D5
:102DC000790190917A01891779F1189FC001112436
:102DD00085589E4F0E948414882331F1E091790137
:102DE0001E9FF0011124E558FE4F40815181628100
:102DF0007381848195810E94DD138091790190E037
:102E000001968770992780937901D9CF0E94A513E5
:102E100010927A0110927901EBEAF1E086E0DF018D
:102E20001D928A95E9F7CACF2C960FB6F894DEBFAB
:102E30000FBECDBFDF91CF911F910895EF92FF920A
:102E40000F931F93CF93DF939C01009709F471C0F8
:102E5000F12CEE24E394E9012196F9018491843761
:102E600040F4843008F056C0813081F0823021F186
:102E700060C0853709F449C0C0F19CE7980F9037CE
:102E800008F057C08F770E94341046C089010E5F4A
:102E90001F4FFE01849190E2980F983050F4877094
:102EA000FE2D01C0FF0F8A95EAF78F2F0E94A1190E
:102EB00015C00E946C0F14C089010E5F1F4FFE01E8
:102EC000849190E2980F983068F48770FE2D01C0CD
:102ED000FF0F8A95EAF78F2F0E94A7190E94CA193F
:102EE000E8011AC00E943410FBCF2E5F3F4FFE0155
:102EF000C491CC2341F08FE99FE00197F1F700C026
:102F00000000C150F6CFE90107C0FE01F490E901CD
:102F1000229602C00E946C0F8F2D882341F0EFE9AA
:102F2000FFE03197F1F700C000008150F6CF9E011D
:102F300092CFDF91CF911F910F91FF90EF90089565
:102F400008956093B5017093B6018093B701909393
:102F5000B8010C9493130F931F930091B501109136
:102F6000B6012091B7013091B801062B172B282B01
:102F7000392B0093B5011093B6012093B70130931C
:102F8000B8011F910F910C9493130F931F9300910D
:102F9000B5011091B6012091B7013091B801062317
:102FA0001723282339230093B5011093B6012093EA
:102FB000B7013093B8011F910F910C9493130F93A5
:102FC0001F930091B5011091B6012091B701309186
:102FD000B80106271727282739270093B501109332
:102FE000B6012093B7013093B8011F910F910C9453
:102FF00093131092B1011092B2011092B30110928A
:10300000B4010C94931341E050E060E070E004C020
:10301000440F551F661F771F8A95D2F74093B10161
:103020005093B2016093B3017093B4010C94931365
:1030300041E050E060E070E004C0440F551F661F9F
:10304000771F8A95D2F78091B1019091B201A0913A
:10305000B301B091B401842B952BA62BB72B809391
:10306000B1019093B201A093B301B093B4010C9459
:10307000931341E050E060E070E004C0440F551F3E
:10308000661F771F8A95D2F7409550956095709589
:103090008091B1019091B201A091B301B091B401BE
:1030A00084239523A623B7238093B1019093B20183
:1030B000A093B301B093B4010C94931341E050E09A
:1030C00060E070E004C0440F551F661F771F8A95AB
:1030D000D2F78091B1019091B201A091B301B0916A
:1030E000B40184279527A627B7278093B101909331
:1030F000B201A093B301B093B4010C9493130F9356
:103100001F930091B1011091B2012091B301309150
:10311000B401062B172B282B392B0093B1011093E8
:10312000B2012093B3013093B4011F910F910C941D
:1031300093130F931F930091B1011091B20120914D
:10314000B3013091B40106231723282339230093B8
:10315000B1011093B2012093B3013093B4011F91D8
:103160000F910C9493130F931F930091B101109141
:10317000B2012091B3013091B40106271727282707
:1031800039270093B1011093B2012093B30130931A
:10319000B4011F910F910C9493130895CF92DF9275
:1031A000EF92FF920F931F93CF93DF93EC01C090A8
:1031B000B501D090B601E090B701F090B8018091D0
:1031C000B1019091B201A091B301B091B401C82AAC
:1031D000D92AEA2AFB2A0FE110E0B701A601002E46
:1031E00004C076956795579547950A94D2F740FFA6
:1031F00007C0BE01802F0E9410068130910539F46E
:103200000150110950F7BE0180E00E941006DF91C5
:10321000CF911F910F91FF90EF90DF90CF90089585
:1032200090910C019923D9F090910D019923B9F057
:10323000982F9695969596959F3088F5E0910E017A
:10324000F0910F01E90FF11D877021E030E001C01E
:10325000220F8A95EAF78181822B8183089540911C
:103260000E0150910F0120E030E09FEFFA01E20FD4
:10327000F31F6281681799F09F3F19F4611101C033
:10328000922F2F5F3F4F2E30310581F79F3F39F04E
:10329000FA01E90FF11D97FDFA95828308950895CB
:1032A00090910C019923E1F090910D019923C1F0C7
:1032B000982F9695969596959F3020F5E0910E0162
:1032C000F0910F01E90FF11D877021E030E001C09E
:1032D000220F8A95EAF7209581812823218308957A
:1032E00040910E0150910F0120E030E0FA01E20F11
:1032F000F31F9281981301C012822F5F3F4F2E302F
:103300003105A1F7089581E090E0E0910E01F09180
:103310000F01E80FF91F1082019680319105A9F77E
:1033200008959091CB01982B9093CB0108958095AF
:103330009091CB0198239093CB0108951092CB01EB
:1033400008959091CA01982B9093CA010895809591
:103350009091CA0198239093CA0108951092CA01CE
:1033600008958093B90108951092B901089540918C
:103370000E0150910F0120E030E080E0FA01E20FF1
:10338000F31F918191118F5F2F5F3F4F2F303105D8
:10339000A9F70895E0910E01F0910F018091CB0102
:1033A0008083E0910E01F0910F0180819091CA011C
:1033B000892B80839091B901992361F0E0910E01EE
:1033C000F0910F018081892B80830E94B7198111B0
:1033D0001092B90180910E0190910F010C94500E42
:1033E000CF92DF92EF92FF920F931F936C01EE2426
:1033F000FF24C114D104E104F10421F46B017C0128
:1034000080E001C080E133272F2D1E2D0D2D0115E9
:1034100011052105310519F0885F680179019701CF
:103420008601A4E03695279517950795AA95D1F7BB
:10343000011511052105310519F08C5F680179012D
:1034400097018601F2E03695279517950795FA952D
:10345000D1F7011511052105310519F08E5F6801BD
:103460007901B701A6017695679557954795452B44
:10347000462B472B09F08F5F1F910F91FF90EF9024
:10348000DF90CF9008958091E501843009F110928A
:10349000CD0120E488E190E00FB6F894A8958093E0
:1034A00060000FBE2093600083B7817F846083BF7C
:1034B00083B7816083BF7894889583B78E7F83BFFD
:1034C00088E10FB6F89480936000109260000FBE00
:1034D000089508950895CF930E94691A0E943604B2
:1034E0000E946A1AC0E08C2F0E942705811105C036
:1034F000CF5FCE30C1F780E001C081E0CF91089569
:103500000E94A5130E94440E0C944A0782E084BDD9
:1035100093E095BD9AEF97BD80936E0008952FB705
:10352000F8948091CE019091CF01A091D001B091FB
:10353000D1012FBF0895CF92DF92EF92FF920F93A8
:103540001F932FB7F8944091CE015091CF01609115
:10355000D0017091D1012FBF6A017B01EE24FF24BD
:103560008C0120E030E0C016D106E206F30610F42C
:1035700041505109481B590BCA011F910F91FF90EF
:10358000EF90DF90CF9008951F920F920FB60F9299
:1035900011248F939F93AF93BF938091CE0190910D
:1035A000CF01A091D001B091D1010196A11DB11D13
:1035B0008093CE019093CF01A093D001B093D1011D
:1035C000BF91AF919F918F910F900FBE0F901F9061
:1035D00018950E944A0BF8942FEF87EA91E6215044
:1035E00080409040E1F700C0000087E090EBDC01F4
:1035F0008093EE019093EF01A093F001B093F1015D
:103600002CE088E190E00FB6F894A89580936000D4
:103610000FBE20936000FFCFEF92FF920F931F9396
:10362000CF93DF93E82EF12C8F2D0E942705C0E069
:10363000D0E0082F10E098010C2E02C03595279598
:103640000A94E2F720FD05C02196C630D10599F70E
:1036500009C06C2F7F2D80E00E94EE05E812F4CFA8
:1036600081E005C0F3948EE0F812DECF80E0DF91B8
:10367000CF911F910F91FF90EF900895CF93C82F96
:103680008CE20E940C1B882321F08C2FCF910C948C
:103690000C1B80E0CF910895CF930E94911C811163
:1036A00002C00E94771CC5E6C15049F00E94360452
:1036B0008FE39CE90197F1F700C00000F5CF89E2A4
:1036C0000E943E1B811111C18AE20E943E1B8111A2
:1036D0000E94771C85E00E943E1B81110E94E91A1E
:1036E0000E949C1C8093CC0187E00E943E1B882393
:1036F00099F18BE10E943E1B882351F09091CC01FF
:1037000091FB882780F921E0822780FB91F922C074
:103710008EE00E943E1B882351F09091CC0192FBD9
:10372000882780F921E0822780FB92F913C080E18D
:103730000E943E1B9091CC01882341F093FB882787
:1037400080F921E0822780FB93F904C0892F8095BE
:1037500080FB90F99093CC018091CC010E94A01C39
:103760000E94AE1C8093DF0180EE0E943E1B8823E6
:1037700041F08091DF01982F909590FB80F9809324
:10378000DF0189E30E943E1B882359F09091DF01FD
:1037900091FB882780F921E0822780FB91F99093A3
:1037A000DF0182EE0E943E1B882359F09091DF01D9
:1037B00092FB882780F921E0822780FB92F9909381
:1037C000DF0186EE0E943E1B882359F09091DF01B5
:1037D00093FB882780F921E0822780FB93F990935F
:1037E000DF0183EE0E943E1B882359F09091DF0198
:1037F00094FB882780F921E0822780FB94F990933D
:10380000DF0185E30E943E1B882359F09091DF0180
:1038100095FB882780F921E0822780FB95F990931A
:10382000DF0181E30E943E1B882359F09091DF0164
:1038300096FB882780F921E0822780FB96F99093F8
:10384000DF0181E10E943E1B882359F09091DF0146
:1038500097FB882780F921E0822780FB97F99093D6
:10386000DF018091DF010E94B21C8091DF0187FBA4
:10387000882780F980930D0187E20E943E1BC82FA4
:103880008EE10E943E1B8111C2608FE10E943E1BAF
:103890008111C46080E20E943E1B8111C86081E2F8
:1038A0000E943E1B8111C06182E20E943E1B811179
:1038B000C06283E20E943E1B8111C06484E20E94C8
:1038C0003E1B882311F0C06802C0CC2329F08C2F46
:1038D0000E94A91C6C2F03C00E94A51C682F70E0D9
:1038E00080E090E0CF910C94A117CF9108956DEEF8
:1038F0007EEF80E090E00E94CD2260E082E090E0E8
:103900000E94BF2260E083E090E00E94BF2260E05E
:1039100084E090E00E94BF2260E085E090E00C949B
:10392000BF2280E090E00E94B92221E08D3E9E4FB0
:1039300009F020E0822F089582E090E00C94B122FB
:10394000682F82E090E00C94BF2283E090E00C941A
:10395000B122682F83E090E00C94BF2284E090E0D5
:103960000C94B122682F84E090E00C94BF228091E7
:10397000D40180FF0BC06091130185E0689FB00106
:10398000112475956795759567952AC081FF09C0C3
:103990006091130185E0689FB001112475956795CA
:1039A0001FC082FF07C06091130185E0689FB001CE
:1039B000112416C04091D5014423C9F06091120131
:1039C000461788F72091130185E0289F9001112464
:1039D000429FC001439F900D112470E00E948322FA
:1039E0006038710540F46115710539F002C065E079
:1039F00070E0862F08958FE7089581E00895809103
:103A0000D40180FF08C06091110170E07595679541
:103A10007595679521C081FF06C06091110170E026
:103A20007595679519C082FF04C06091110170E01F
:103A300010C08091D5018823C1F0609110018617D4
:103A4000A0F790911101989FC001112470E00E948D
:103A500083226038710528F46115710521F0862FE5
:103A600008958FE7089581E0089561E070E0F4CF54
:103A7000803F21F40E94B71C819504C0813F29F446
:103A80000E94B71C8093D8010895823F21F40E94C0
:103A9000B71C819504C0833F29F40E94B71C809312
:103AA000D7010895893F19F40E94FF1C05C08A3F81
:103AB00031F40E94FF1C81958093D90108958B3FBA
:103AC00021F40E94FF1C819504C08C3F29F40E94C0
:103AD000FF1C8093DA010895843F21F48091D60180
:103AE000816017C0853F21F48091D601826011C0AA
:103AF000863F21F48091D60184600BC0873F21F47A
:103B00008091D601886005C0883F31F48091D6014C
:103B100080618093D60108958D3F21F48091D40176
:103B200081600BC08E3F21F48091D401826005C07A
:103B30008F3F29F48091D40184608093D40108954B
:103B4000803F39F48091D80187FF6CC01092D80172
:103B500069C0813F29F48091D8011816BCF362C076
:103B60009091D701823F29F497FF5CC01092D70152
:103B700059C0833F19F41916CCF354C0893F41F45E
:103B80008091D90118160CF04DC01092D9014AC08D
:103B90008A3F29F48091D90187FF44C0F6CF8B3F3B
:103BA00039F48091DA0187FF3DC01092DA013AC002
:103BB0008C3F29F48091DA011816BCF333C0843F9E
:103BC00021F48091D6018E7F17C0853F21F480912A
:103BD000D6018D7F11C0863F21F48091D6018B7F65
:103BE0000BC0873F21F48091D601877F05C0883FB5
:103BF00031F48091D6018F7E8093D60113C08D3F22
:103C000021F48091D4018E7F0BC08E3F21F48091EE
:103C1000D4018D7F05C08F3F29F48091D4018B7F23
:103C20008093D4018091D70181110EC08091D80179
:103C300081110AC08091D901811106C08091DA01F9
:103C4000811102C01092D501089586ED91E00E9485
:103C50005B0E0E948F1A9093D3018093D201089536
:103C60001F93CF93DF938091D2019091D3010E9453
:103C70009B1A4091D501442321F02091140130E09A
:103C800006C0209115015AE0259F9001112482174A
:103C9000930708F482C08091D7011091D801D09188
:103CA000D901C091DA01811107C0111105C0D111EC
:103CB00003C0CC2309F471C04F3F19F04F5F40930C
:103CC000D501181624F40E94B71C8093D701809167
:103CD000D70187FF05C00E94B71C81958093D7014B
:103CE000111624F40E94B71C8093D8018091D8014A
:103CF00087FF05C00E94B71C81958093D801609111
:103D0000D701662339F11091D801112319F17727D2
:103D100067FD7095872F972F0E94942123E333E34B
:103D200043E35FE30E94F8210E9461216093D70181
:103D3000612F772767FD7095872F972F0E94942119
:103D400023E333E343E35FE30E94F8210E94612110
:103D50006093D8011D1624F40E94FF1C8093D901A2
:103D60008091D90187FF05C00E94FF1C8195809337
:103D7000D9011C1624F40E94FF1C8093DA01809163
:103D8000DA0187FF05C00E94FF1C81958093DA014C
:103D9000DF91CF911F910C94251EDF91CF911F9140
:103DA0000895E6EDF1E085E0DF011D928A95E9F7DF
:103DB0001092D5011092D4010895833081F128F436
:103DC000813059F08230D1F00895853009F449C02E
:103DD000B8F1863009F456C0089520911501862F58
:103DE00090E0820F911D8F3F910520F4620F609348
:103DF000150108958FEF8093150108952091140106
:103E0000862F90E0820F911D8F3F910520F4620F65
:103E10006093140108958FEF809314010895209109
:103E20001301862F90E0820F911D8F3F910520F4A2
:103E3000620F6093130108958FEF8093130108952B
:103E400020911201862F90E0820F911D8F3F9105E6
:103E500020F4620F6093120108958FEF8093120196
:103E6000089520911101862F90E0820F911D8F3FC0
:103E7000910520F4620F6093110108958FEF8093F4
:103E80001101089520911001862F90E0820F911D5D
:103E90008F3F910520F4620F6093100108958FEF1A
:103EA000809310010895833011F128F4813049F096
:103EB000823091F00895853081F120F18630C1F192
:103EC000089580911501681720F4861B80931501D1
:103ED000089510921501089580911401681720F437
:103EE000861B809314010895109214010895809107
:103EF0001301681720F4861B809313010895109214
:103F00001301089580911201681720F4861B809395
:103F100012010895109212010895809111016817FD
:103F200020F4861B809311010895109211010895C9
:103F300080911001681720F4861B8093100108956A
:103F40001092100108958D3109F442C020F58E3091
:103F500009F479C070F4873009F45EC020F486302B
:103F600009F442C033C08830D1F18B3009F4A7C0C6
:103F70002DC0863109F4A3C038F4803109F46DC036
:103F8000813109F47BC022C0893109F498C08B319A
:103F900009F44FC01BC0853309F479C048F4873257
:103FA00009F475C008F478C0893209F470C00EC0F5
:103FB000833438F48A3308F071C0883309F47FC041
:103FC00005C0833409F463C08834C1F080E00895EB
:103FD0000E941B210E94440E0E944A0770C00E944A
:103FE0009C1C0E94AE1C6BC08091CC01817F8E7F97
:103FF0008093CC0181E08093DC0108950E94A51399
:104000002FEF83ED90E3215080409040E1F700C016
:1040100000000E94E91A53C09091CC01892F817051
:1040200090FF03C0917F9E7F26C091609093CC014A
:1040300046C09091CC0191FB882780F921E082272E
:1040400080FB91F913C09091CC0192FB882780F9F5
:1040500021E0822780FB92F909C09091CC0193FB6B
:10406000882780F921E0822780FB93F99093CC0187
:10407000882329F191609093CC0108950E94A513A3
:1040800080910D0191E0892780930D0118C061E0B6
:1040900070E080E090E00FC023EE01C027EC280F15
:1040A00061E070E080E090E004C0660F771F881F39
:1040B000991F2A95D2F70E94A1170E94A51381E0AB
:1040C000089580E0089580E00895CF93C82F8091EF
:1040D000DC01813079F018F08230D1F184C0A091F8
:1040E0000E01B0910F018C91813169F0823209F09B
:1040F0007CC009C0A0910E01B0910F018C9181315B
:1041000011F0823249F48C2F0E94612081111DC070
:104110008C2F0E94A31F1AC08C2F0E946320811134
:1041200014C0C43179F048F4CB3079F0C03109F0D3
:1041300060C082E08093DC0108C0C93219F0C83346
:1041400021F057C01092DC0154C081E0817053C04F
:10415000C93289F118F5C43171F1A8F4C73009F0FA
:1041600046C08AE08093150194E19093140193E096
:10417000909313018093120188E08093110188E2EB
:104180008093100134C0CE51C63088F5EC2FF0E09A
:10419000E65DFE4F80818093DB0129C0CE34E9F0DB
:1041A00020F4CB3421F56AE013C0C13579F0C23573
:1041B000F1F461E00DC08091DB01882319F01092C9
:1041C000DB0115C081E08093DC0115C061E006C011
:1041D0008091DB010E94DD1E0AC06AE08091DB0154
:1041E0000E94531F04C01092DC0180E004C081E0F3
:1041F00002C080E0ABCFCF910895E1E8F0E080818C
:10420000886080838081816080838FB7F89493E099
:104210009093890090ED909388008FBF0895EFE60A
:10422000F0E08081826080830895EFE6F0E0808195
:104230008D7F80830895EFE6F0E0808192E089270A
:10424000808308951F920F920FB60F9211242F931F
:104250003F934F935F936F937F938F939F93AF930E
:10426000BF93EF93FF938091DD019091DE01019662
:104270009093DE018093DD01811103C082E00E94F2
:104280004A07E091DE01E695E695F0E0E657FB4F40
:10429000E4918091DD018E1303C080E00E944A0703
:1042A000FF91EF91BF91AF919F918F917F916F910E
:1042B0005F914F913F912F910F900FBE0F901F90E4
:1042C000189504D06894B1118DC0089570D088F00D
:1042D0009F5790F0B92F9927B751A0F0D1F0660FF2
:1042E000771F881F991F1AF0BA95C9F712C0B1300D
:1042F00081F077D0B1E0089574C0672F782F8827B8
:10430000B85F39F0B93FCCF3869577956795B3954B
:10431000D9F73EF490958095709561957F4F8F4FBA
:104320009F4F0895E89409C097FB3EF490958095BF
:10433000709561957F4F8F4F9F4F9923A9F0F92F6B
:1043400096E9BB279395F695879577956795B795E9
:10435000F111F8CFFAF4BB0F11F460FF1BC06F5FCF
:104360007F4F8F4F9F4F16C0882311F096E911C0E1
:10437000772321F09EE8872F762F05C0662371F002
:1043800096E8862F70E060E02AF09A95660F771F16
:10439000881FDAF7880F9695879597F9089557FD46
:1043A0009058440F551F59F05F3F71F04795880FA3
:1043B00097FB991F61F09F3F79F08795089512163A
:1043C00013061406551FF2CF4695F1DF08C01616E6
:1043D00017061806991FF1CF869571056105089497
:1043E0000895E894BB2766277727CB0197F90895AE
:1043F0000BD078C069D028F06ED018F0952309F062
:104400005AC05FC01124EECFCADFA0F3959FD1F34D
:10441000950F50E0551F629FF001729FBB27F00D72
:10442000B11D639FAA27F00DB11DAA1F649F6627C7
:10443000B00DA11D661F829F2227B00DA11D621F16
:10444000739FB00DA11D621F839FA00D611D221FD0
:10445000749F3327A00D611D231F849F600D211DB4
:10446000822F762F6A2F11249F5750408AF0E1F057
:1044700088234AF0EE0FFF1FBB1F661F771F881FA0
:1044800091505040A9F79E3F510570F014C0AACF3B
:104490005F3FECF3983EDCF3869577956795B7958B
:1044A000F795E7959F5FC1F7FE2B880F911D9695B5
:1044B000879597F9089597F99F6780E870E060E025
:1044C00008959FEF80EC089500240A9416161706AD
:1044D00018060906089500240A94121613061406F5
:1044E00005060895092E0394000C11F4882352F058
:1044F000BB0F40F4BF2B11F460FF04C06F5F7F4F10
:104500008F4F9F4F089597FB072E16F4009407D006
:1045100077FD09D00E949D2207FC05D03EF49095BE
:1045200081959F4F0895709561957F4F0895EE0F87
:10453000FF1F0590F491E02D0994AA1BBB1B51E1CC
:1045400007C0AA1FBB1FA617B70710F0A61BB70B03
:10455000881F991F5A95A9F780959095BC01CD01A8
:104560000895F999FECF92BD81BDF89A992780B53B
:104570000895A8E1B0E042E050E00C94D422262F48
:10458000F999FECF1FBA92BD81BD20BD0FB6F89438
:10459000FA9AF99A0FBE019608950E94BF22272F1A
:1045A0000C94C022DC01CB01FC01F999FECF06C0BE
:1045B000F2BDE1BDF89A319600B40D9241505040E1
:0845C000B8F70895F894FFCF4D
:1045C80020024B07D807B50781074E070101BA013A
:1045D80028080A03140A3F4D36394B04FE03C80362
:1045E8008F0322033B0354036D03010203040506F2
:0445F80007080900A7
:00000001FF

@ -17,7 +17,7 @@ This requires a little bit of familiarity with coding.
2. Clone the repository (download it)
3. Set up a build environment as per [the build guide](/BUILD_GUIDE.md)
- Using a Mac and have homebrew? just run `brew tap osx-cross/avr && brew install avr-libc`
4. Copy `keymaps/default/keymap.c` into `keymaps/your_name/keymap.c` (for example, `keymaps/german/keymap.c`)
4. Copy `keyboard/ergodox_ez/keymaps/default/keymap.c` into `keymaps/your_name/keymap.c` (for example, `keymaps/german/keymap.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. See below for more tips on sharing your work.
6. Compile your firmware by running `make clean` followed by `make KEYMAP=your_name`. 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.

@ -0,0 +1,140 @@
#----------------------------------------------------------------------------
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF.
#
# make extcoff = Convert ELF to AVR Extended COFF.
#
# make program = Download the hex file to the device.
# Please customize your programmer settings(PROGRAM_CMD)
#
# make teensy = Download the hex file to the device, using teensy_loader_cli.
# (must have teensy_loader_cli installed).
#
# make dfu = Download the hex file to the device, using dfu-programmer (must
# have dfu-programmer installed).
#
# make flip = Download the hex file to the device, using Atmel FLIP (must
# have Atmel FLIP installed).
#
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
# (must have dfu-programmer installed).
#
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
# (must have Atmel FLIP installed).
#
# make debug = Start either simulavr or avarice as specified for debugging,
# with avr-gdb or avr-insight as the front end for debugging.
#
# make filename.s = Just compile filename.c into the assembler code only.
#
# make filename.i = Create a preprocessed source file for use in submitting
# bug reports to the GCC project.
#
# To rebuild project do "make clean" then "make all".
#----------------------------------------------------------------------------
# Target file name (without extension).
TARGET = gh60
# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core
# Directory keyboard dependent files exist
TARGET_DIR = .
# # project specific files
SRC = gh60.c
ifdef KEYMAP
SRC := keymaps/$(KEYMAP).c $(SRC)
else
SRC := keymaps/default.c $(SRC)
endif
CONFIG_H = config.h
# MCU name
#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency in Hz. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
#
# This will be an integer division of F_USB below, as it is sourced by
# F_USB after it has run through any CPU prescalers. Note that this value
# does not *change* the processor frequency - it should merely be updated to
# reflect the processor speed set externally so that the code can use accurate
# software delays.
F_CPU = 16000000
#
# LUFA specific
#
# Target architecture (see library "Board Types" documentation).
ARCH = AVR8
# Input clock frequency.
# This will define a symbol, F_USB, in all source code files equal to the
# input clock frequency (before any prescaling is performed) in Hz. This value may
# differ from F_CPU if prescaling is used on the latter, and is required as the
# raw input clock is fed directly to the PLL sections of the AVR for high speed
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
# at the end, this will be done automatically to create a 32-bit value in your
# source code.
#
# If no clock division is performed on the input clock inside the AVR (via the
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Boot Section Size in *bytes*
# Teensy halfKay 512
# Teensy++ halfKay 1024
# Atmel DFU loader 4096
# LUFA bootloader 4096
# USBaspLoader 2048
OPT_DEFS += -DBOOTLOADER_SIZE=4096
# Build Options
# comment out to disable the options.
#
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
# CONSOLE_ENABLE = yes # Console for debug(+400)
# COMMAND_ENABLE = yes # Commands for debug and configuration
KEYBOARD_LOCK_ENABLE = yes # Allow locking of keyboard via magic key
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
# MIDI_ENABLE = YES # MIDI controls
# UNICODE_ENABLE = YES # Unicode
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
# Optimize size but this may cause error "relocation truncated to fit"
#EXTRALDFLAGS = -Wl,--relax
# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)
include $(TOP_DIR)/quantum/quantum.mk

@ -0,0 +1,60 @@
## gh60 Rev C keyboard firmware
![gh60 Rev C PCB](gh60revc.jpg)
/* Column pin configuration
* col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
* pin: F0 F1 E6 C7 C6 B6 D4 B1 B7 B5 B4 D7 D6 B3 (Rev.C)
*/
/* Row pin configuration
* row: 0 1 2 3 4
* pin: D0 D1 D2 D3 D5
*/
GPIO pads
0 F7 WASD LEDs
1 F6 ESC LED
2 F5 FN LED
3 F4 POKER Arrow LEDs
B2 Capslock LED
B0 not connected
Functions to controls LED clusters
gh60_caps_led_on()
gh60_poker_leds_on()
gh60_fn_led_on()
gh60_esc_led_on()
gh60_wasd_leds_on()
gh60_caps_led_off()
gh60_poker_leds_off()
gh60_fn_led_off()
gh60_esc_led_off()
gh60_wasd_leds_off()
======================
## Quantum MK Firmware
For the full Quantum feature list, see [the parent README.md](/README.md).
## Building
Download or clone the whole firmware and navigate to the keyboard/gh60_rev_c folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
Depending on which keymap you would like to use, you will have to compile slightly differently.
### Default
To build with the default keymap, simply run `make`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top README.md) and existent keymap files.
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
```
$ make KEYMAP=[default|jack|<name>]
```
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.

@ -0,0 +1,157 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CONFIG_H
#define CONFIG_H
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x6060
#define DEVICE_VER 0x0001
#define MANUFACTURER You
#define PRODUCT gh60
#define DESCRIPTION A custom keyboard
/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 14
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define COLS (int []){ F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 }
#define ROWS (int []){ D0, D1, D2, D3, D5 }
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
/* number of backlight levels */
#define BACKLIGHT_LEVELS 3
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/*
* Force NKRO
*
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
* makefile for this to work.)
*
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
* until the next keyboard reset.
*
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
* fully operational during normal computer usage.
*
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
* power-up.
*
*/
//#define FORCE_NKRO
/*
* Magic Key Options
*
* Magic keys are hotkey commands that allow control over firmware functions of
* the keyboard. They are best used in combination with the HID Listen program,
* found here: https://www.pjrc.com/teensy/hid_listen.html
*
* The options below allow the magic key functionality to be changed. This is
* useful if your keyboard/keypad is missing keys and you want magic key support.
*
*/
/* key combination for magic key command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
/* control how magic key switches layers */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
/* override magic key keymap */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
//#define MAGIC_KEY_HELP1 H
//#define MAGIC_KEY_HELP2 SLASH
//#define MAGIC_KEY_DEBUG D
//#define MAGIC_KEY_DEBUG_MATRIX X
//#define MAGIC_KEY_DEBUG_KBD K
//#define MAGIC_KEY_DEBUG_MOUSE M
//#define MAGIC_KEY_VERSION V
//#define MAGIC_KEY_STATUS S
//#define MAGIC_KEY_CONSOLE C
//#define MAGIC_KEY_LAYER0_ALT1 ESC
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
//#define MAGIC_KEY_LAYER0 0
//#define MAGIC_KEY_LAYER1 1
//#define MAGIC_KEY_LAYER2 2
//#define MAGIC_KEY_LAYER3 3
//#define MAGIC_KEY_LAYER4 4
//#define MAGIC_KEY_LAYER5 5
//#define MAGIC_KEY_LAYER6 6
//#define MAGIC_KEY_LAYER7 7
//#define MAGIC_KEY_LAYER8 8
//#define MAGIC_KEY_LAYER9 9
//#define MAGIC_KEY_BOOTLOADER PAUSE
//#define MAGIC_KEY_LOCK CAPS
//#define MAGIC_KEY_EEPROM E
//#define MAGIC_KEY_NKRO N
//#define MAGIC_KEY_SLEEP_LED Z
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
#endif

@ -0,0 +1,67 @@
#include "gh60.h"
#include "led.h"
__attribute__ ((weak))
void matrix_init_user(void) {
// leave this function blank - it can be defined in a keymap file
};
__attribute__ ((weak))
void matrix_scan_user(void) {
// leave this function blank - it can be defined in a keymap file
}
__attribute__ ((weak))
void process_action_user(keyrecord_t *record) {
// leave this function blank - it can be defined in a keymap file
}
__attribute__ ((weak))
void led_set_user(uint8_t usb_led) {
// leave this function blank - it can be defined in a keymap file
}
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
matrix_init_user();
}
void matrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)
matrix_scan_user();
}
void process_action_kb(keyrecord_t *record) {
// put your per-action keyboard code here
// runs for every action, just before processing by the firmware
process_action_user(record);
}
void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
gh60_caps_led_on();
} else {
gh60_caps_led_off();
}
// if (usb_led & (1<<USB_LED_NUM_LOCK)) {
// gh60_esc_led_on();
// } else {
// gh60_esc_led_off();
// }
// if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
// gh60_fn_led_on();
// } else {
// gh60_fn_led_off();
// }
led_set_user(usb_led);
}

@ -0,0 +1,81 @@
#ifndef GH60_H
#define GH60_H
#include "matrix.h"
#include "keymap_common.h"
#include "backlight.h"
#include <stddef.h>
/* GH60 LEDs
* GPIO pads
* 0 F7 WASD LEDs
* 1 F6 ESC LED
* 2 F5 FN LED
* 3 F4 POKER Arrow LEDs
* B2 Capslock LED
* B0 not connected
*/
inline void gh60_caps_led_on(void) { DDRB |= (1<<2); PORTB &= ~(1<<2); }
inline void gh60_poker_leds_on(void) { DDRF |= (1<<4); PORTF &= ~(1<<4); }
inline void gh60_fn_led_on(void) { DDRF |= (1<<5); PORTF &= ~(1<<5); }
inline void gh60_esc_led_on(void) { DDRF |= (1<<6); PORTF &= ~(1<<6); }
inline void gh60_wasd_leds_on(void) { DDRF |= (1<<7); PORTF &= ~(1<<7); }
inline void gh60_caps_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
inline void gh60_poker_leds_off(void) { DDRF &= ~(1<<4); PORTF &= ~(1<<4); }
inline void gh60_fn_led_off(void) { DDRF &= ~(1<<5); PORTF &= ~(1<<5); }
inline void gh60_esc_led_off(void) { DDRF &= ~(1<<6); PORTF &= ~(1<<6); }
inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
/* GH60 keymap definition macro
* K2C, K31 and K3C are extra keys for ISO
*/
#define KEYMAP( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \
) { \
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D }, \
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D }, \
{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D }, \
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D }, \
{ KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_##K45, KC_NO, KC_NO, KC_NO, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D } \
}
/* ANSI valiant. No extra keys for ISO */
#define KEYMAP_ANSI( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
K40, K41, K42, K45, K4A, K4B, K4C, K4D \
) KEYMAP( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, NO, K2D, \
K30, NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, NO, K3D, \
K40, K41, K42, K45, NO, K4A, K4B, K4C, K4D \
)
#define KEYMAP_HHKB( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49,\
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \
K40, K41, K42, K45, K4A, K4B, K4C, K4D \
) KEYMAP( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, NO, K2D, \
K30, NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \
)
void matrix_init_user(void);
void matrix_scan_user(void);
void process_action_user(keyrecord_t *record);
void led_set_user(uint8_t usb_led);
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

@ -0,0 +1,69 @@
#include "gh60.h"
#include "action_layer.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: qwerty */
KEYMAP(
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, GRV, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \
CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NO, ENT, \
LSFT,FN1, Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, RSFT, \
LCTL,LGUI,LALT, SPC, BSLS,RALT,RGUI,APP, RCTL),
/* 1: fn */
KEYMAP(
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \
TRNS,TRNS,UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS),
/* 2: arrows */
KEYMAP(
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,UP, \
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,LEFT,DOWN,RGHT),
};
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
[1] = ACTION_LAYER_TOGGLE(2), // toggle arrow overlay
};
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;
};
void matrix_scan_user(void) {
//Layer LED indicators
uint32_t layer = layer_state;
if (layer & (1<<1)) {
gh60_wasd_leds_on();
gh60_fn_led_on();
} else {
gh60_wasd_leds_off();
gh60_fn_led_off();
}
if (layer & (1<<2)) {
gh60_poker_leds_on();
gh60_esc_led_on();
} else {
gh60_poker_leds_off();
gh60_esc_led_off();
}
};

@ -0,0 +1,18 @@
/* Column pin configuration
* col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
* pin: F0 F1 E6 C7 C6 B6 D4 B1 B7 B5 B4 D7 D6 B3 (Rev.C)
*/
/* Row pin configuration
* row: 0 1 2 3 4
* pin: D0 D1 D2 D3 D5
*/
GPIO pads
0 F7 WASD LEDs
1 F6 ESC LED
2 F5 FN LED
3 F4 POKER Arrow LEDs
B2 Capslock LED
B0 not connected

@ -219,7 +219,7 @@ static void store_link(uint8_t *eeaddr)
xprintf("%s(%d)\r\n", s, strlen(s));
if (strlen(s) == 12) {
for (int i = 0; i < 12; i++) {
eeprom_write_byte(eeaddr+i, *(s+i));
eeprom_update_byte(eeaddr+i, *(s+i));
dprintf("%c ", *(s+i));
}
dprint("\r\n");

@ -171,10 +171,6 @@ endif
endif
ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
SRC := backlight.c $(SRC)
endif
# Optimize size but this may cause error "relocation truncated to fit"
#EXTRALDFLAGS = -Wl,--relax

@ -1,61 +0,0 @@
#include <avr/io.h>
#include "backlight.h"
#define CHANNEL OCR1C
void backlight_init_ports()
{
// Setup PB7 as output and output low.
DDRB |= (1<<7);
PORTB &= ~(1<<7);
// Use full 16-bit resolution.
ICR1 = 0xFFFF;
// I could write a wall of text here to explain... but TL;DW
// Go read the ATmega32u4 datasheet.
// And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
// Pin PB7 = OCR1C (Timer 1, Channel C)
// Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
// (i.e. start high, go low when counter matches.)
// WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
// Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
backlight_init();
}
void backlight_set(uint8_t level)
{
if ( level == 0 )
{
// Turn off PWM control on PB7, revert to output low.
TCCR1A &= ~(_BV(COM1C1));
CHANNEL = 0x0;
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
}
else if ( level == BACKLIGHT_LEVELS )
{
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
// Set the brightness
CHANNEL = 0xFFFF;
}
else
{
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
// Set the brightness
CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
}
}

@ -6,6 +6,9 @@
#ifdef AUDIO_ENABLE
#include "audio.h"
#endif
#include "eeconfig.h"
extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
@ -16,8 +19,9 @@
#define _DVORAK 2
#define _LOWER 3
#define _RAISE 4
#define _ADJUST 5
#define _MUSIC 6
#define _MUSIC 5
#define _PLOVER 6
#define _ADJUST 16
// Macro name shortcuts
#define QWERTY M(_QWERTY)
@ -26,12 +30,14 @@
#define LOWER M(_LOWER)
#define RAISE M(_RAISE)
#define M_BL 5
#ifdef AUDIO_ENABLE
#define AUD_OFF M(6)
#define AUD_ON M(7)
#endif
#define AUD_OFF M(6)
#define AUD_ON M(7)
#define MUS_OFF M(8)
#define MUS_ON M(9)
#define VC_IN M(10)
#define VC_DE M(11)
#define PLOVER M(12)
#define EXT_PLV M(13)
// Fillers to make layering more clear
#define _______ KC_TRNS
@ -129,33 +135,54 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
/* Music (reserved for process_action_user)
*
*/
[_MUSIC] = {
{XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
{XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
{XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
{XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
},
/* Plover layer (http://opensteno.org)
* ,-----------------------------------------------------------------------------------.
* | # | # | # | # | # | # | # | # | # | # | # | # |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | | S | T | P | H | * | * | F | P | L | T | D |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | | S | K | W | R | * | * | R | B | G | S | Z |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Exit | | | A | O | | E | U | | | |
* `-----------------------------------------------------------------------------------'
*/
[_PLOVER] = {
{KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
{XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC},
{XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
{EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX}
},
/* Adjust (Lower + Raise)
* ,-----------------------------------------------------------------------------------.
* | | Reset| | | | | | | | | | Del |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
* | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | | | | | | | | | | | | |
* | |Voice-|Voice+|Mus on|Musoff| | | | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
[_ADJUST] = {
{_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
{_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______},
{_______, _______, _______, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
},
/* Music (reserved for process_action_user)
*
*/
[_MUSIC] = {
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
{_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______},
{_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
}
};
const uint16_t PROGMEM fn_actions[] = {
@ -171,48 +198,19 @@ float tone_startup[][2] = {
{440.0*pow(2.0,(28)/12.0), 20}
};
float tone_qwerty[][2] = {
{440.0*pow(2.0,(23)/12.0), 8},
{440.0*pow(2.0,(24)/12.0), 8},
{0, 4},
{440.0*pow(2.0,(31)/12.0), 16}
};
float tone_colemak[][2] = {
{440.0*pow(2.0,(23)/12.0), 8},
{440.0*pow(2.0,(24)/12.0), 8},
{0, 4},
{440.0*pow(2.0,(31)/12.0), 12},
{0, 4},
{440.0*pow(2.0,(35)/12.0), 12}
};
float tone_dvorak[][2] = {
{440.0*pow(2.0,(23)/12.0), 8},
{440.0*pow(2.0,(24)/12.0), 8},
{0, 4},
{440.0*pow(2.0,(31)/12.0), 8},
{0, 4},
{440.0*pow(2.0,(33)/12.0), 8},
{0, 4},
{440.0*pow(2.0,(31)/12.0), 8}
};
float tone_qwerty[][2] = SONG(QWERTY_SOUND);
float tone_dvorak[][2] = SONG(DVORAK_SOUND);
float tone_colemak[][2] = SONG(COLEMAK_SOUND);
float tone_plover[][2] = SONG(PLOVER_SOUND);
float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
float tone_music[][2] = {
{440.0*pow(2.0,(12)/12.0), 8},
{440.0*pow(2.0,(14)/12.0), 8},
{440.0*pow(2.0,(16)/12.0), 8},
{440.0*pow(2.0,(17)/12.0), 8},
{440.0*pow(2.0,(19)/12.0), 8},
{440.0*pow(2.0,(21)/12.0), 8},
{440.0*pow(2.0,(23)/12.0), 8},
{440.0*pow(2.0,(24)/12.0), 8}
};
float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
float goodbye[][2] = SONG(GOODBYE_SOUND);
#endif
void persistant_default_layer_set(uint16_t default_layer) {
eeconfig_write_default_layer(default_layer);
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
}
@ -297,17 +295,75 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
case 9:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_music, false, 0);
PLAY_NOTE_ARRAY(music_scale, false, 0);
layer_on(_MUSIC);
#endif
}
break;
case 10:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
voice_iterate();
PLAY_NOTE_ARRAY(music_scale, false, 0);
#endif
}
break;
case 11:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
voice_deiterate();
PLAY_NOTE_ARRAY(music_scale, false, 0);
#endif
}
break;
case 12:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
stop_all_notes();
PLAY_NOTE_ARRAY(tone_plover, false, 0);
#endif
layer_off(_RAISE);
layer_off(_LOWER);
layer_off(_ADJUST);
layer_off(_MUSIC);
layer_on(_PLOVER);
if (!eeconfig_is_enabled()) {
eeconfig_init();
}
keymap_config.raw = eeconfig_read_keymap();
keymap_config.nkro = 1;
eeconfig_update_keymap(keymap_config.raw);
}
break;
case 13:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
#endif
layer_off(_PLOVER);
}
break;
}
return MACRO_NONE;
};
void matrix_init_user(void) {
#ifdef AUDIO_ENABLE
_delay_ms(20); // stops the tick
PLAY_NOTE_ARRAY(tone_startup, false, 0);
#endif
}
#ifdef AUDIO_ENABLE
void play_goodbye_tone()
{
PLAY_NOTE_ARRAY(goodbye, false, 0);
_delay_ms(150);
}
uint8_t starting_note = 0x0C;
int offset = 7;
int offset = 0;
void process_action_user(keyrecord_t *record) {
@ -320,10 +376,4 @@ void process_action_user(keyrecord_t *record) {
}
}
void matrix_init_user(void) {
#ifdef AUDIO_ENABLE
init_notes();
PLAY_NOTE_ARRAY(tone_startup, false, 0);
#endif
}
#endif

@ -1 +1,2 @@
AUDIO_ENABLE = yes
NKRO_ENABLE = yes

@ -0,0 +1,88 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CONFIG_H
#define CONFIG_H
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x6060
#define DEVICE_VER 0x0001
#define MANUFACTURER Ortholinear Keyboards
#define PRODUCT The Planck Keyboard
#define DESCRIPTION A compact ortholinear keyboard
/* key matrix size */
#define MATRIX_ROWS 4
#define MATRIX_COLS 12
/* Planck PCB default pin-out */
#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
#define ROWS (int []){ D0, D5, B5, B6 }
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST
/* number of backlight levels */
#define BACKLIGHT_LEVELS 3
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/* key combination for command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
/* ws2812 RGB LED */
#define ws2812_PORTREG PORTD
#define ws2812_DDRREG DDRD
#define ws2812_pin PD1
#define RGBLED_NUM 28 // Number of LEDs
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
#endif

@ -0,0 +1,536 @@
#include "planck.h"
#include "action_layer.h"
#include "eeconfig.h"
#include "led.h"
#ifdef AUDIO_ENABLE
#include "audio.h"
#include "song_list.h"
#endif
#define LAYER_QWERTY 0
#define LAYER_COLEMAK 1
#define LAYER_DVORAK 2
#define LAYER_LOWER 3
#define LAYER_RAISE 4
#define LAYER_FUNCTION 5
#define LAYER_MOUSE 6
#define LAYER_MUSIC 7
#define LAYER_ADJUST 8
#define MACRO_QWERTY 0
#define MACRO_COLEMAK 1
#define MACRO_DVORAK 2
#define MACRO_LOWER 3
#define MACRO_RAISE 4
#define MACRO_FUNCTION 5
#define MACRO_MOUSE 6
#define MACRO_TIMBRE_1 7
#define MACRO_TIMBRE_2 8
#define MACRO_TIMBRE_3 9
#define MACRO_TIMBRE_4 10
#define MACRO_TEMPO_U 11
#define MACRO_TEMPO_D 12
#define MACRO_TONE_DEFAULT 13
#define MACRO_MUSIC_ON 14
#define MACRO_MUSIC_OFF 15
#define MACRO_AUDIO_ON 16
#define MACRO_AUDIO_OFF 17
#define MACRO_INC_VOICE 18
#define MACRO_DEC_VOICE 19
#define M_QWRTY M(MACRO_QWERTY)
#define M_COLMK M(MACRO_COLEMAK)
#define M_DVORK M(MACRO_DVORAK)
#define M_LOWER M(MACRO_LOWER)
#define M_RAISE M(MACRO_RAISE)
#define M_FUNCT M(MACRO_FUNCTION)
#define M_MOUSE M(MACRO_MOUSE)
#define TIMBR_1 M(MACRO_TIMBRE_1)
#define TIMBR_2 M(MACRO_TIMBRE_2)
#define TIMBR_3 M(MACRO_TIMBRE_3)
#define TIMBR_4 M(MACRO_TIMBRE_4)
#define TMPO_UP M(MACRO_TEMPO_U)
#define TMPO_DN M(MACRO_TEMPO_D)
#define TMPO_DF M(MACRO_TONE_DEFAULT)
#define MUS_ON M(MACRO_MUSIC_ON)
#define MUS_OFF M(MACRO_MUSIC_OFF)
#define AUD_OFF M(MACRO_AUDIO_OFF)
#define AUD_ON M(MACRO_AUDIO_ON)
#define VC_UP M(MACRO_INC_VOICE)
#define VC_DOWN M(MACRO_DEC_VOICE)
#define SC_UNDO LCTL(KC_Z)
#define SC_REDO LCTL(KC_Y)
#define SC_CUT LCTL(KC_X)
#define SC_COPY LCTL(KC_C)
#define SC_PSTE LCTL(KC_V)
#define SC_SELA LCTL(KC_A)
#define SC_SAVE LCTL(KC_S)
#define SC_OPEN LCTL(KC_O)
#define SC_ACLS LALT(KC_F4)
#define SC_CCLS LCTL(KC_F4)
#define _______ KC_TRNS
#define XXXXXXX KC_NO
#define ________________ _______, _______
#define XXXXXXXXXXXXXXXX XXXXXXX, XXXXXXX
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* QWERTY
* .-----------------------------------------------------------------------------------------------------------.
* | TAB | Q | W | E | R | T | Y | U | I | O | P | BACKSP |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | ESC | A | S | D | F | G | H | J | K | L | ; | ' |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | LSHIFT | Z | X | C | V | B | N | M | , | . | / | ENTER |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | LCTRL | LWIN | FN | LALT | RAISE | SPACE | SPACE | LOWER | UP | DOWN | LEFT | RIGHT |
* '-----------------------------------------------------------------------------------------------------------'
*/
[LAYER_QWERTY] = { /* QWERTY */
{ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC },
{ KC_BSPC, 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 },
{ KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT },
},
/* COLEMAK
* .-----------------------------------------------------------------------------------------------------------.
* | TAB | Q | W | F | P | G | J | L | U | Y | ; | ESC |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | BACKSP | A | R | S | T | D | H | N | E | I | O | ' |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | LSHIFT | Z | X | C | V | B | K | M | , | . | / | ENTER |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | LCTRL | LWIN | FN | LALT | RAISE | SPACE | SPACE | LOWER | UP | DOWN | LEFT | RIGHT |
* '-----------------------------------------------------------------------------------------------------------'
*/
[LAYER_COLEMAK] = { /* COLEMAK */
{ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_ESC },
{ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT },
{ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
{ KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT },
},
/* DVORAK
* .-----------------------------------------------------------------------------------------------------------.
* | TAB | ' | , | . | P | Y | F | G | C | R | L | BACKSP |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | ESC | A | O | E | U | I | D | H | T | N | S | ' |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | ENTER |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | LCTRL | LWIN | FN | LALT | RAISE | SPACE | SPACE | LOWER | UP | DOWN | LEFT | RIGHT |
* '-----------------------------------------------------------------------------------------------------------'
*/
[LAYER_DVORAK] = { /* DVORAK */
{ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC },
{ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH },
{ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
{ KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT },
},
/* Raise
* .-----------------------------------------------------------------------------------------------------------.
* | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | DEL |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | XXXXXX | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | [ | ] | \ |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | LSHIFT | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | ENTER |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | LCTRL | LWIN | FN | LALT | RAISE | BACKSP | BACKSP | LOWER | PG UP | PG DN | HOME | END |
* '-----------------------------------------------------------------------------------------------------------'
*/
[LAYER_RAISE] = { /* RAISED */
{ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL },
{ XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS },
{ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
{ _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_PGUP, KC_PGDN, KC_HOME, KC_END },
},
/* LOWERED
* .-----------------------------------------------------------------------------------------------------------.
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | INS |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | XXXXXX | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | LSHIFT | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | ENTER |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | LCTRL | LWIN | FN | LALT | RAISE | BACKSP | BACKSP | LOWER | PG UP | PG DN | HOME | END |
* '-----------------------------------------------------------------------------------------------------------'
*/
[LAYER_LOWER] = { /* LOWERED */
{ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_INS },
{ XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS },
{ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
{ _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_PGUP, KC_PGDN, KC_HOME, KC_END },
},
/* FUNCTION
* .-----------------------------------------------------------------------------------------------------------.
* | NUM LK | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | PAUSE |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | CAP LK | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | PRINT |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MUTE |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | LCTRL | LWIN | FN | LALT | RAISE | PLAY | PLAY | LOWER | VOL UP | VOL DN | NEXT | PREV |
* '-----------------------------------------------------------------------------------------------------------'
*/
[LAYER_FUNCTION] = { /* FUNCTION */
{ KC_NLCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PAUS },
{ KC_CAPS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_PSCR },
{ KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE },
{ _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT },
},
#ifdef MOUSEKEY_ENABLE
[LAYER_MOUSE] = { /* MOUSE */
{ KC_ESC, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC },
{ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
{ _______, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_U, KC_WH_D },
{ _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, KC_MS_U, KC_MS_D, KC_MS_L, KC_MS_R },
},
#endif
[LAYER_MUSIC] = { /* MUSIC */
{ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
{ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
{ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
{ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_RAISE, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
},
[LAYER_ADJUST] = { /* ADJUST */
{ _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, MUS_ON, MUS_OFF, AUD_ON, AUD_OFF },
{ _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______ },
{ _______, _______, _______, _______, _______, RESET, _______, M_MOUSE, _______, _______, _______, _______ },
{ _______, _______, _______, _______, _______, _______, _______, _______, VC_UP, VC_DOWN, _______, _______ },
},
/*
[LAYER_EMPTY] = {
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, },
{ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, },
{ _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, },
},
*/
};
#ifdef AUDIO_ENABLE
float tone_my_startup[][2] = SONG(ODE_TO_JOY);
float tone_my_goodbye[][2] = SONG(ROCK_A_BYE_BABY);
float tone_qwerty[][2] = SONG(QWERTY_SOUND);
float tone_dvorak[][2] = SONG(DVORAK_SOUND);
float tone_colemak[][2] = SONG(COLEMAK_SOUND);
float tone_audio_on[][2] = SONG(CLOSE_ENCOUNTERS_5_NOTE);
float tone_music_on[][2] = SONG(DOE_A_DEER);
float tone_caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND);
float tone_caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND);
float tone_numlk_on[][2] = SONG(NUM_LOCK_ON_SOUND);
float tone_numlk_off[][2] = SONG(NUM_LOCK_OFF_SOUND);
float tone_scroll_on[][2] = SONG(SCROLL_LOCK_ON_SOUND);
float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND);
float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
#endif /* AUDIO_ENABLE */
void persistant_default_layer_set(uint16_t default_layer)
{
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
}
const uint16_t PROGMEM fn_actions[] = {
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id)
{
case MACRO_QWERTY:
if (record->event.pressed)
{
persistant_default_layer_set(1UL<<LAYER_QWERTY);
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_qwerty, false, STACCATO);
#endif /* AUDIO_ENABLE */
}
break;
case MACRO_COLEMAK:
if (record->event.pressed)
{
persistant_default_layer_set(1UL<<LAYER_COLEMAK);
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_colemak, false, STACCATO);
#endif /* AUDIO_ENABLE */
}
break;
case MACRO_DVORAK:
if (record->event.pressed)
{
persistant_default_layer_set(1UL<<LAYER_DVORAK);
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_dvorak, false, STACCATO);
#endif /* AUDIO_ENABLE */
}
break;
case MACRO_LOWER:
if (record->event.pressed)
{
layer_on(LAYER_LOWER);
update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST);
}
else
{
layer_off(LAYER_LOWER);
update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST);
}
break;
case MACRO_RAISE:
if (record->event.pressed)
{
layer_on(LAYER_RAISE);
update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST);
}
else
{
layer_off(LAYER_RAISE);
update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST);
}
break;
case MACRO_FUNCTION:
if (record->event.pressed)
{
layer_on(LAYER_FUNCTION);
}
else
{
layer_off(LAYER_FUNCTION);
}
break;
#ifdef MOUSEKEY_ENABLE
case MACRO_MOUSE:
if (record->event.pressed)
{
layer_invert(LAYER_MOUSE);
}
break;
#endif /* MOUSEKEY_ENABLE */
#ifdef AUDIO_ENABLE
case MACRO_TIMBRE_1:
if (record->event.pressed) set_timbre(TIMBRE_12);
break;
case MACRO_TIMBRE_2:
if (record->event.pressed) set_timbre(TIMBRE_25);
break;
case MACRO_TIMBRE_3:
if (record->event.pressed) set_timbre(TIMBRE_50);
break;
case MACRO_TIMBRE_4:
if (record->event.pressed) set_timbre(TIMBRE_75);
break;
case MACRO_TEMPO_U:
if (record->event.pressed) increase_tempo(10);
break;
case MACRO_TEMPO_D:
if (record->event.pressed) decrease_tempo(10);
break;
case MACRO_TONE_DEFAULT:
if (record->event.pressed)
{
set_timbre(TIMBRE_DEFAULT);
set_tempo(TEMPO_DEFAULT);
}
break;
case MACRO_AUDIO_OFF:
if (record->event.pressed)
{
#ifdef AUDIO_ENABLE
audio_off();
#endif
}
break;
case MACRO_AUDIO_ON:
if (record->event.pressed)
{
#ifdef AUDIO_ENABLE
audio_on();
PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO);
#endif
}
break;
case MACRO_MUSIC_ON:
if (record->event.pressed)
{
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO);
layer_on(LAYER_MUSIC);
#endif
}
break;
case MACRO_MUSIC_OFF:
if (record->event.pressed)
{
#ifdef AUDIO_ENABLE
layer_off(LAYER_MUSIC);
stop_all_notes();
#endif
}
break;
case MACRO_INC_VOICE:
if (record->event.pressed)
{
#ifdef AUDIO_ENABLE
voice_iterate();
PLAY_NOTE_ARRAY(music_scale, false, STACCATO);
#endif
}
break;
case MACRO_DEC_VOICE:
if (record->event.pressed)
{
#ifdef AUDIO_ENABLE
voice_deiterate();
PLAY_NOTE_ARRAY(music_scale, false, STACCATO);
#endif
}
break;
#endif /* AUDIO_ENABLE */
default:
break;
}
return MACRO_NONE;
};
#ifdef AUDIO_ENABLE
void process_action_user(keyrecord_t *record)
{
uint8_t starting_note = 0x0C;
int offset = 7;
if (IS_LAYER_ON(LAYER_MUSIC))
{
if (record->event.pressed)
{
play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF);
}
else
{
stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)));
}
}
}
void matrix_init_user(void)
{
set_voice(default_voice);
play_startup_tone();
println("Matrix Init");
}
void led_set_user(uint8_t usb_led)
{
static uint8_t old_usb_led = 0;
_delay_ms(10); // gets rid of tick
if ((usb_led & (1<<USB_LED_CAPS_LOCK)) && !(old_usb_led & (1<<USB_LED_CAPS_LOCK)))
{
// If CAPS LK LED is turning on...
PLAY_NOTE_ARRAY(tone_caps_on, false, LEGATO);
}
else if (!(usb_led & (1<<USB_LED_CAPS_LOCK)) && (old_usb_led & (1<<USB_LED_CAPS_LOCK)))
{
// If CAPS LK LED is turning off...
PLAY_NOTE_ARRAY(tone_caps_off, false, LEGATO);
}
else if ((usb_led & (1<<USB_LED_NUM_LOCK)) && !(old_usb_led & (1<<USB_LED_NUM_LOCK)))
{
// If NUM LK LED is turning on...
PLAY_NOTE_ARRAY(tone_numlk_on, false, LEGATO);
}
else if (!(usb_led & (1<<USB_LED_NUM_LOCK)) && (old_usb_led & (1<<USB_LED_NUM_LOCK)))
{
// If NUM LED is turning off...
PLAY_NOTE_ARRAY(tone_numlk_off, false, LEGATO);
}
else if ((usb_led & (1<<USB_LED_SCROLL_LOCK)) && !(old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
{
// If SCROLL LK LED is turning on...
PLAY_NOTE_ARRAY(tone_scroll_on, false, LEGATO);
}
else if (!(usb_led & (1<<USB_LED_SCROLL_LOCK)) && (old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
{
// If SCROLL LED is turning off...
PLAY_NOTE_ARRAY(tone_scroll_off, false, LEGATO);
}
old_usb_led = usb_led;
}
void play_startup_tone()
{
_delay_ms(10); // gets rid of tick
PLAY_NOTE_ARRAY(tone_my_startup, false, STACCATO);
}
void play_goodbye_tone()
{
PLAY_NOTE_ARRAY(tone_my_goodbye, false, STACCATO);
_delay_ms(1000);
}
#endif /* AUDIO_ENABLE */

@ -0,0 +1,16 @@
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
CONFIG_H = keymaps/$(KEYMAP)/config.h

@ -1,193 +0,0 @@
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
// this is the style you want to emulate.
#include "planck.h"
#include "print.h"
#include "action_layer.h"
#ifdef BACKLIGHT_ENABLE
#include "backlight.h"
#endif
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _QW 0
#define _CM 1
#define _DV 2
#define _LW 3
#define _RS 4
#define _FN 5
#define XXXXXXX KC_NO
#define _______ KC_TRNS
#define ASFT(kc) LSFT(RSFT(kc))
#define MG_B ASFT(KC_B)
#define MG_H ASFT(KC_H)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
* ,-----------------------------------------------------------------------------------.
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | A | S | D | F | G | H | J | K | L | ; | " |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | N | M | , | . | Up |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Ctrl | GUI | Alt | Del |Raise | Space |Lower | / | Left | Down |Right |
* `-----------------------------------------------------------------------------------'
*/
[_QW] = {
{RESET, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
{KC_ESC, 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_UP, KC_ENT },
{KC_LCTL, KC_LGUI, KC_LALT, KC_DEL, M(_LW), KC_SPC, KC_SPC, M(_RS), KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT}
},
/* Colemak
* ,-----------------------------------------------------------------------------------.
* | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | A | R | S | T | D | H | N | E | I | O | " |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Brite| Ctrl | Alt | GUI |Raise | Space |Lower | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[_CM] = {
{KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
{KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
{M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
/* Dvorak
* ,-----------------------------------------------------------------------------------.
* | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | A | O | E | U | I | D | H | T | N | S | / |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Brite| Ctrl | Alt | GUI |Raise | Space |Lower | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[_DV] = {
{KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
{KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
{KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
{M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
/* Raise
* ,-----------------------------------------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| F7 | F8 | F9 | F10 | F11 | F12 |Qwerty|Colemk|Dvorak| Reset|Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Brite| Ctrl | Alt | GUI |Raise | Space |Lower | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
[_RS] = {
{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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
{_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, RESET, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
/* Lower
* ,-----------------------------------------------------------------------------------.
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| F7 | F8 | F9 | F10 | F11 | F12 |Qwerty|Colemk|Dvorak| Reset|Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Brite| Ctrl | Alt | GUI |Raise | Space |Lower | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
[_LW] = {
{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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
{_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, MG_B, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
/* Function
* ,-----------------------------------------------------------------------------------.
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| F7 | F8 | F9 | F10 | F11 | F12 |Qwerty|Colemk|Dvorak| Reset|Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Brite| Ctrl | Alt | GUI |Raise | Space |Lower | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
[_FN] = {
{XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
{XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MG_H, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
{XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
{XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
}
};
const uint16_t PROGMEM fn_actions[] = {
};
int tri_layer = 0;
void update_tri_layer(int layer) {
if (tri_layer > 1) {
layer_on(layer);
} else {
layer_off(layer);
}
}
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id)
{
case _RS:
if (record->event.pressed) {
print("RS_DN");
layer_on(_RS);
tri_layer++;
update_tri_layer(_FN);
} else {
print("RS_UP");
layer_off(_RS);
tri_layer--;
update_tri_layer(_FN);
phex(layer_state);
}
break;
case _LW:
if (record->event.pressed) {
print("LW_DN");
layer_on(_LW);
tri_layer++;
update_tri_layer(_FN);
} else {
print("LW_UP");
layer_off(_LW);
tri_layer--;
update_tri_layer(_FN);
}
break;
default:
break;
}
return MACRO_NONE;
};

@ -32,3 +32,64 @@ void matrix_scan_kb(void) {
void process_action_kb(keyrecord_t *record) {
process_action_user(record);
}
#ifdef BACKLIGHT_ENABLE
#define CHANNEL OCR1C
void backlight_init_ports()
{
// Setup PB7 as output and output low.
DDRB |= (1<<7);
PORTB &= ~(1<<7);
// Use full 16-bit resolution.
ICR1 = 0xFFFF;
// I could write a wall of text here to explain... but TL;DW
// Go read the ATmega32u4 datasheet.
// And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
// Pin PB7 = OCR1C (Timer 1, Channel C)
// Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
// (i.e. start high, go low when counter matches.)
// WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
// Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
backlight_init();
}
void backlight_set(uint8_t level)
{
if ( level == 0 )
{
// Turn off PWM control on PB7, revert to output low.
TCCR1A &= ~(_BV(COM1C1));
CHANNEL = 0x0;
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
}
else if ( level == BACKLIGHT_LEVELS )
{
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
// Set the brightness
CHANNEL = 0xFFFF;
}
else
{
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
// Set the brightness
CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
}
}
#endif

@ -10,6 +10,7 @@
#include "rgblight.h"
#endif
#include <stddef.h>
#include <avr/io.h>
#ifdef MIDI_ENABLE
#include <keymap_midi.h>
#endif

@ -0,0 +1,1645 @@
:100000000C94DA040C941E050C941E050C941E0529
:100010000C941E050C941E050C941E050C941E05D4
:100020000C941E050C941E050C94B7180C94891999
:100030000C94EC270C941E050C941E050C941E05C4
:100040000C941E050C941E050C941E050C941E05A4
:100050000C941E050C9454280C941E050C941E053B
:100060000C941E050C941E050C941E050C941E0584
:100070000C941E050C941E050C941E050C941E0574
:100080000C94AD0E0C941E050C941E050C941E05CC
:100090000C941E050C941E050C941E050C941E0554
:1000A0000C941E050C941E050C941E0579058905FB
:1000B0009B05AB05B105C005CC05D205E005E905FA
:1000C000FA050A0610064006F619181A061B181A31
:1000D000061B5D1A801A061BD51AE81AEB1DEB1DCC
:1000E000281E281E821EC01E38213821D91E382104
:1000F000DA1FDA1F9D20B4203821232107634236FE
:10010000B79BD8A71A39685618AEBAAB558C1D3CA8
:10011000B7CC5763BD6DEDFD753EF6177231BF006C
:100120000000803F08000000BE922449123EABAAA6
:10013000AA2ABECDCCCC4C3E00000080BEABAAAA01
:10014000AA3E00000000BF000000803F0000000049
:1001500000084178D3BB4387D1133D190E3CC3BD82
:100160004282AD2B3E68EC8276BED98FE1A93E4C2F
:1001700080EFFFBE01C4FF7F3F00000000002B00A6
:1001800014001A000800150017001C0018000C00CD
:10019000120013002A0029000400160007000900BD
:1001A0000A000B000D000E000F0033003400E100C8
:1001B0001D001B000600190005001100100036008C
:1001C0003700380028000530E000E200E30003308B
:1001D0002C002C0004305000510052004F002B0026
:1001E00014001A00090013000A000D000F00180087
:1001F0001C0033002A002900040015001600170017
:1002000007000B00110008000C0012003400E10090
:100210001D001B000600190005000E00100036002E
:100220003700380028000530E000E200E30003302A
:100230002C002C0004305000510052004F002B00C5
:1002400034003600370013001C0009000A000600C5
:1002500015000F002A0029000400120008001800F1
:100260000C0007000B001700110016003800E10019
:10027000330014000D000E001B00050010001A00D2
:1002800019001D0028000530E000E200E300033003
:100290002C002C0004305000510052004F00350259
:1002A0001E021F0220022102220223022402250232
:1002B000260227022A004C003A003B003C003D0089
:1002C0003E003F002D022E022F02300231020100BB
:1002D000400041004200430044004500010001008D
:1002E0000100010001000100010001000100010006
:1002F000010001000100AB00AA00A900AE0035001A
:100300001E001F00200021002200230024002500E1
:10031000260027002A004C003A003B003C003D002C
:100320003E003F002D002E002F0030003100010064
:10033000400041004200430044004500010001002C
:1003400001000100010001000100010001000100A5
:10035000010001000100AB00AA00A900AE000000EE
:10036000000000000000000000000000000000008D
:10037000000000000000000000000000000000007D
:10038000000000000000000000000000000000006D
:10039000000000000000000000000000000000005D
:1003A000000000000000000000000000000003301A
:1003B00000000000043000000000000000001E00EB
:1003C0001E001E001E001E001E001E001E001E003D
:1003D0001E001E001E00000014001A000800150078
:1003E00017001C0018000C00120013002F00000062
:1003F00004001600070009000A000B000D000E00A3
:100400000F00330034000D3000000000060019001A
:1004100000000000110010000000000000000000BB
:1004200000000000000000000000000000000000CC
:1004300000000000000000000000000000000000BC
:1004400000000000000000000000000000000000AC
:10045000000000000000000000000000000000009C
:10046000000000000000000000000000000000008C
:10047000000000000000000000000000000000007C
:10048000000000000000000000000000000000006C
:10049000000000000000000000000000000000005C
:1004A000000000000000000000000000000000004C
:1004B000000000000000000000000000000000003C
:1004C000000000000000000000000000000000002C
:1004D000000000000000000000000000000000001C
:1004E000000000000000000000000000000000000C
:1004F00000000000000000000000000000000000FC
:1005000000000000000000000000000000000000EB
:1005100000000000000000000000000000000000DB
:1005200000000000000000000000000000000000CB
:1005300000000000000000000000000000000000BB
:1005400000000000000000000000000000000000AB
:10055000000000000000000000000000000000009B
:10056000000000000000000000000000000000008B
:10057000000000000000000000000000000000007B
:10058000000000000000000000000000000000006B
:10059000000000000000000000000000000000005B
:1005A000000000000000000000000000000000004B
:1005B000000000000000000000000000000000003B
:1005C000000000000000000000000000000000002B
:1005D000000000000000000000000000000000001B
:1005E000000000000000000000000000000000000B
:1005F00000000000000000000000000000000000FB
:1006000000000000000000000000000000000000EA
:1006100000000000000000000000000000000000DA
:1006200000000000000000000000000000000000CA
:1006300000000000000000000000000000000000BA
:1006400000000000000000000000000000000000AA
:10065000000000000000000000000000000000009A
:10066000000000000000000000000000000000008A
:10067000000000000000000000000000000000007A
:10068000000000000000000000000000000000006A
:10069000000000000000000000000000000000005A
:1006A000000000000000000000000000000000004A
:1006B000000000000000000000000000000000003A
:1006C000000000000000000000000000000000002A
:1006D000000000000000000000000000000000001A
:1006E000000000000000000000000000000000000A
:1006F00000000000000000000000000000000000FA
:1007000000000000000000000000000000000000E9
:1007100000000000000000000000000000000000D9
:1007200000000000000000000000000000000000C9
:1007300000000000000000000000000000000000B9
:1007400000000000000000000000000000000000A9
:100750000000000000000000000000000000000099
:100760000000000000000000000000000000000089
:100770000000000000000000000000000000010078
:100780000050010001000100010001000100010012
:10079000010001004C00010001000100073006309B
:1007A000135012500030013002300C3001000100B3
:1007B0000B300A300930083001000100010001004F
:1007C0000100010001000100010001000100010021
:1007D00001000100010001000100010001002803E7
:1007E000540068006500200050006C0061006E003D
:1007F00063006B0020004B006500790062006F0011
:1008000061007200640000002C034F00720074004D
:1008100068006F006C0069006E0065006100720086
:1008200020004B006500790062006F0061007200DB
:100830006400730000000403090409026D00040150
:1008400000A0FA09040000010301010009211101BF
:100850000001223F000705810308000A0904010086
:100860000103010200092111010001224D000705C9
:10087000820308000A0904020001030000000921A4
:10088000110100012236000705830308000A09044C
:1008900003000103000000092111010001223900B9
:1008A000070584031000011201100100000008ED8B
:1008B000FE606001000102000105010906A10105B9
:1008C0000719E029E7150025019508750181020542
:1008D0000819012905950575019102950175039186
:1008E0000105071900297715002501957875018103
:1008F00002C005010980A101850216010026B7008A
:100900001A01002AB700751095018100C0050C0975
:1009100001A1018503160100269C021A01002A9CF0
:1009200002751095018100C005010902A1010901AC
:10093000A100050919012905150025019505750175
:100940008102950175038101050109300931158185
:10095000257F95027508810609381581257F950147
:1009600075088106050C0A38021581257F950175E9
:10097000088106C0C005010906A101050719E02983
:10098000E71500250195087501810295017508811B
:100990000105081901290595057501910295017553
:1009A0000391010507190029FF150025FF9506751C
:1009B000088100C011241FBECFEFDAE0DEBFCDBF3B
:1009C00004B603FE24C08091690490916A04A0914A
:1009D0006B04B0916C048730904BA740B04BB9F4D6
:1009E0001092690410926A0410926B0410926C04C5
:1009F00014BE84B7877F84BF88E10FB6F8948093D4
:100A00006000109260000FBEE0E0F8E3099513E08B
:100A1000A0E0B1E0E2E4F4E602C005900D92A23657
:100A2000B107D9F714E0A2E6B3E001C01D92A936E0
:100A3000B107E1F70E94FD150C941F320C940000E1
:100A4000279A2F988FEF9FEF9093870080938600CF
:100A50008AE08093800089E1809381000C94562D78
:100A6000282F81110BC080918000877F80938000A8
:100A700010928D0010928C002F9808952F988091DD
:100A80008000886080938000233019F48FEF9FEFFF
:100A90000FC083E090E0821B9109880F991F2FEF10
:100AA0003FEFA90102C0569547958A95E2F7CA0122
:100AB00090938D0080938C000895CF93DF93EC0189
:100AC0000E94ED28BE0180E090E0DF91CF910C9470
:100AD00018250F931F93462F50E04E30510508F014
:100AE000DEC0DC01FA01EA5AFF4F12968C910C9499
:100AF000E331882309F4D3C000E010E0980140E01E
:100B000064E070E089E292E00E942B1281E090E0C4
:100B10000FC0882309F4C3C000E010E0980140E052
:100B200066E070E089EB91E00E942B1282E090E099
:100B30000E945D05B4C0882309F4B1C000E010E054
:100B4000980140E068E070E089EE91E00E942B128D
:100B500084E090E0EDCF882311F083E005C083E0CE
:100B60000CC0882349F084E00E94952540E164E0B0
:100B700083E00E946D0A93C084E00E94B625F6CF00
:100B8000882331F085EE0E947F1C0E94AD2D87C026
:100B900085EE0E94471D83C0882309F480C00E940F
:100BA000BF0D7DC0882309F47AC00E94B80D00E013
:100BB00010E0980140E065E070E089E492E027C031
:100BC000882309F46CC085E00E94B6250E94E00DE0
:100BD00066C0882309F463C000E010E0980140E09B
:100BE00068E070E089E191E00E942B1285E00E94AC
:100BF000952555C0882309F452C00E94BE1200E01A
:100C000010E0980140E068E070E089E191E00E9426
:100C10002B1245C0882309F442C00E94C912EFCFAD
:100C20008823E9F100E010E0980140E066E070E020
:100C300089E891E00E942B1284E00E94B62583E0AF
:100C40000E94B62580E10E94B62585E00E94B62567
:100C50000E94E00D86E00E9495250E94DA2881110D
:100C600002C00E94B6280E94F22890E09093680487
:100C7000809367048068809367040E94F6280FC001
:100C8000882369F000E010E0980140E066E070E041
:100C900089E591E00E942B1286E00E94B62580E053
:100CA00090E01F910F9108950F931F932FEF89EFFD
:100CB00090E0215080409040E1F700C0000000E04B
:100CC00010E0980140E065E070E089E492E00E9465
:100CD0002B121F910F9108950F931F9300E010E0C6
:100CE000980140E063E070E081E091E00E942B1207
:100CF0002FEF82E597E0215080409040E1F700C05F
:100D000000001F910F910895CF92DF92EF92FF9212
:100D10000F931F93CF93DF93CDB7DEB7CC58D10994
:100D20000FB6F894DEBF0FBECDBF2091210425FF82
:100D3000C5C08C01FC01928180910001992309F4C6
:100D400060C096E4EEE8F2E0DE01A95BBF4F0190DF
:100D50000D929A95E1F7F8019081E0916203F0918C
:100D60006303E90FF11DEE0FFF1F27E430E02C0FA6
:100D70003D1FE20FF31F60817181680F711D88278D
:100D800077FD8095982F0E94F12E20E030E040E41E
:100D900051E40E94562E6B017C01F801218184E010
:100DA00090E0821B9109BC01882777FD8095982FE0
:100DB0000E94F12E9B01AC01C701B6010E94EE2DED
:100DC0009B01AC0160E070E080E090E40E94643040
:100DD00020E030E04CE551E40E9401304FE050E06B
:100DE000C457DF4F0FB6F894DEBF0FBECDBFDF9103
:100DF000CF911F910F91FF90EF90DF90CF900C94C7
:100E0000CB1196E4EEE8F2E0DE01119601900D922E
:100E10009A95E1F7F8019081E0916203F091630304
:100E2000E90FF11DEE0FFF1F21E030E02C0F3D1FF9
:100E3000E20FF31F60817181680F711D882777FDB4
:100E40008095982F0E94F12E20E030E040E451E49C
:100E50000E94562E6B017C01F801218184E090E014
:100E6000821B9109BC01882777FD8095982F0E94ED
:100E7000F12E9B01AC01C701B6010E94EE2D9B0132
:100E8000AC0160E070E080E090E40E94643020E01B
:100E900030E04CE551E40E940130C457DF4F0FB6FB
:100EA000F894DEBF0FBECDBFDF91CF911F910F91A0
:100EB000FF90EF90DF90CF900C94130EC457DF4F4C
:100EC0000FB6F894DEBF0FBECDBFDF91CF911F915B
:100ED0000F91FF90EF90DF90CF90089508950E94BA
:100EE00020056E9A769A0C9454060C946E070C9416
:100EF00084060895880F991FFC01E250F040859107
:100F000094910895880F991FFC01E258FE4F859136
:100F1000949108950F931F93CF93DF93EC01811564
:100F200020E49207A0F5C11580E3D80708F0E1C0DE
:100F3000C83ED105D8F4C03ED10508F0EEC1C83A8C
:100F4000D10578F4C53AD10508F074C0C130D10597
:100F500009F46DC008F4DEC1C430D10508F0DDC16C
:100F6000D9C1CB3BD10508F470C0D4C1C11590E202
:100F7000D90708F0B9C0C11521E0D20708F0CDC1EA
:100F8000C03FD10508F4C6C18E01106506C2C1304C
:100F900080E5D80709F4BDC068F5C13120E4D20767
:100FA00009F4AEC050F4C03190E4D90708F0A5C0F0
:100FB000CF70DD278E01146DF0C1C33120E4D2075C
:100FC00009F4A4C008F49FC0C115D04509F0A2C11E
:100FD0000E945C210E94E00D0E946C069FEF24E3BA
:100FE0008CE0915020408040E1F700C000000E945A
:100FF0007928D3C1C11520E6D20730F4C11581E5A7
:10100000D80708F48CC02DC1C11590E7D90708F4A2
:1010100081C1C11520E8D20708F478C1C11580E963
:10102000D80708F077C1DF708E01106AB6C101E001
:1010300010E0B3C1C53AD10509F471C1C63AD10572
:1010400009F070C102E810E4A8C1C83AD10509F45A
:101050006CC1C93AD10509F46BC1CA3AD10509F48A
:101060006AC1CB3AD10509F469C1CC3AD10509F47A
:1010700068C1CD3AD10509F467C1C03BD10509F477
:1010800066C1CE3AD10509F465C1CF3AD10509F45C
:1010900064C1C13BD10509F463C1C23BD10509F468
:1010A00062C1C33BD10509F461C1C43BD10509F458
:1010B00060C1C53BD10509F45FC1C63BD10509F448
:1010C0005EC1C73BD10509F45DC1C83BD10509F438
:1010D0005CC1C93BD10509F45BC1CA3BD10509F428
:1010E0005AC100E014E459C1CE019F700E948207EA
:1010F00055C1DD278E01106C50C100E011ED4DC1CE
:1011000000E010ED4AC100E012ED47C100E013ED30
:1011100044C180913D04816080933D043EC10E94A2
:10112000DA28811102C00E94B6280E94F22890E0BD
:101130009093680480936704C23090E5D90721F446
:1011400080916704816086C0C43020E5D20721F415
:101150008091670482607EC0C63080E5D80721F4A4
:1011600080916704846076C0C83090E5D90719F48F
:101170008091670427C0CA3020E5D20721F480910E
:101180006704806167C0CC3080E5D80721F4809186
:10119000670480625FC0CE3090E5D90721F480916A
:1011A0006704806457C0C03120E5D20721F48091E4
:1011B000670480684FC0C23180E5D80729F4809168
:1011C00067048460886046C0C33090E5D90721F485
:1011D000809167048E7F3EC0C53020E5D20721F4A0
:1011E000809167048D7F36C0C73080E5D80721F431
:1011F000809167048B7F2EC0C93090E5D90719F420
:101200008091670426C0CB3020E5D20721F480917D
:1012100067048F7E1FC0CD3080E5D80721F4809110
:1012200067048F7D17C0CF3090E5D90721F48091F6
:1012300067048F7B0FC0C13120E5D20721F4809174
:1012400067048F7707C0C331D04531F480916704BC
:101250008B7F877F80936704809167040E94F628C4
:101260009CC08D2F99278F70992781309105D9F4D3
:101270009E012370332702C0880F991F2A95E2F739
:101280009C688E0144E0000F111F4A95E1F700278A
:101290001370802B912B53E0CC0FDD1F5A95E1F793
:1012A000C076DD272FC08230910531F4DC2FCC27AA
:1012B0008E01016F106A71C08330910569F4CE010F
:1012C0008370992701E010E002C0000F111F8A957A
:1012D000E2F7C8019C680FC0049709F05EC0CE0118
:1012E0008370992701E010E002C0000F111F8A955A
:1012F000E2F7C8019A6823E0CC0FDD1F2A95E1F7D9
:10130000C07ED7708C010C2B1D2B47C0DF708E0167
:10131000106243C000E010E040C08E013EC001E812
:1013200010E43BC003E810E438C002EE14E435C01A
:1013300009EE14E432C00AEE14E42FC005EB14E405
:101340002CC006EB14E429C007EB14E426C00CEC17
:1013500014E423C00DEC14E420C003E815E41DC020
:101360000AE815E41AC002E915E417C004E915E417
:1013700014C001E216E411C003E216E40EC004E258
:1013800016E40BC005E216E408C006E216E405C048
:1013900007E216E402C00AE216E4C801DF91CF9129
:1013A0001F910F9108959CE0799FF001112490E323
:1013B000899FE00DF11D1124E60FF11DEE0FFF1FB7
:1013C000E258FE4F85919491803E9105E0F4803C77
:1013D000910558F58133910509F46FC048F48932BD
:1013E000910509F463C08A32910509F46DC072C099
:1013F00089339105E9F082389105D1F08533910563
:1014000009F44DC067C0833E910581F138F4803EF8
:101410009105B9F0823E9105D9F05CC0863E9105F8
:1014200061F1873E9105A1F155C00E947A070895A8
:101430002091670420FD02C021FF4CC080EE90E0A7
:1014400049C08091670480FFF9CF89E390E042C0F2
:101450008091670482FF0EC08091670484FF03C0FF
:1014600080E090E037C083EE90E034C08091670464
:1014700082FFF2CF82EE90E02DC08091670483FF5F
:101480000BC08091670484FDEBCF87EE90E022C013
:101490008091670483FFF5CF86EE90E01BC08091BA
:1014A000670485FF07C089E290E014C0809167045B
:1014B00085FFF9CF85E390E00DC08091670486FF3A
:1014C00007C08AE290E006C08091670486FFF9CFEA
:1014D00081E390E00E948A070895CF92DF92EF9215
:1014E000FF920F931F9301E010E020E030E06801CD
:1014F000790104C0CC0CDD1CEE1CFF1C8A95D2F7D0
:1015000004C0000F111F221F331F6A95D2F70C2948
:101510001D292E293F29C0902104D0902204E0905B
:101520002304F0902404C022D122E222F322842F4B
:10153000C016D106E206F30641F41F910F91FF9009
:10154000EF90DF90CF900C9495251F910F91FF9015
:10155000EF90DF90CF900C94B62508950C94AD0ACF
:101560005F926F927F928F929F92AF92BF92CF9233
:10157000DF92EF92FF920F931F93CF93DF93CDB73C
:10158000DEB728970FB6F894DEBF0FBECDBFCE01F1
:1015900001966C014E0199E0890E911C20E030E02B
:1015A00040E050E060E070E000E010E0E12CF12C61
:1015B0006C2C5D2C88E0782EAA24A394B12CE4ED49
:1015C000F2E0A62DB52D872D01900D928A95E1F7B9
:1015D000F601819191916F01FC01E07FFF27E032DC
:1015E000F10559F48F709927F50102C0EE0FFF1F26
:1015F0008A95E2F7EE2AFF2A37C0E033F10559F465
:101600008F709927F50102C0EE0FFF1F8A95E2F750
:101610000E2B1F2B29C0E034F10559F48F70992748
:10162000F50102C0EE0FFF1F8A95E2F76E2B7F2BAC
:101630001BC0E035F10559F48F709927F50102C000
:10164000EE0FFF1F8A95E2F74E2B5F2B0DC0E036A1
:10165000F10551F48F709927F50102C0EE0FFF1FBD
:101660008A95E2F72E2B3F2BC814D90409F0A7CF97
:1016700084B19E2D9095892384B985B1E82AE5B877
:1016800087B1902F9095892387B988B1082B08B925
:101690008AB1962F909589238AB98BB1682B6BB943
:1016A0008DB1942F909589238DB98EB1482B4EB969
:1016B00080B3922F9095892380BB81B3282B21BBC7
:1016C00028960FB6F894DEBF0FBECDBFDF91CF9145
:1016D0001F910F91FF90EF90DF90CF90BF90AF9050
:1016E0009F908F907F906F905F9008955F926F9220
:1016F0007F928F929F92AF92BF92CF92DF92EF92A2
:10170000FF920F931F93CF93DF93CDB7DEB7689708
:101710000FB6F894DEBF0FBECDBF85B7806885BF1A
:1017200085B7806885BF0E94B00ACE0101966C0122
:101730004E0199E1890E911C20E030E040E050E03C
:1017400060E070E000E010E0E12CF12C6C2C5D2CEE
:1017500088E1782EAA24A394B12CECEDF2E0A62D1A
:10176000B52D872D01900D928A95E1F7F6018191B3
:1017700091916F01FC01E07FFF27E032F10559F400
:101780008F709927F50102C0EE0FFF1F8A95E2F7CF
:10179000EE2AFF2A37C0E033F10559F48F709927FC
:1017A000F50102C0EE0FFF1F8A95E2F70E2B1F2BEB
:1017B00029C0E034F10559F48F709927F50102C072
:1017C000EE0FFF1F8A95E2F76E2B7F2B1BC0E035D3
:1017D000F10559F48F709927F50102C0EE0FFF1F34
:1017E0008A95E2F74E2B5F2B0DC0E036F10551F4E0
:1017F0008F709927F50102C0EE0FFF1F8A95E2F75F
:101800002E2B3F2BC814D90409F0A7CF84B19E2DED
:101810009095892384B985B1E82AE5B887B1902FDE
:101820009095892387B988B1082B08B98AB1962F7A
:10183000909589238AB98BB1682B6BB98DB1942FA0
:10184000909589238DB98EB1482B4EB980B3922FD4
:101850009095892380BB81B3282B21BB10926D0307
:1018600010926C03109265031092640310926F0340
:1018700010926E0310926703109266031092710328
:101880001092700310926903109268031092730310
:101890001092720310926B0310926A0368960FB64F
:1018A000F894DEBF0FBECDBFDF91CF911F910F9196
:1018B000FF90EF90DF90CF90BF90AF909F908F9070
:1018C0007F906F905F900C946F077F928F929F92A2
:1018D000AF92BF92CF92DF92EF92FF920F931F933E
:1018E000CF93DF93CDB7DEB7A0970FB6F894DEBFE6
:1018F0000FBECDBF6E0149E1C40ED11C84E6E82EB7
:1019000083E0F82E98E0792EBC2CAD2C01E010E09D
:1019100028E1822E35E0932EE4EDF2E0AB2DBA2DD6
:10192000872D01900D928A95E1F7F60181919191B1
:101930006F019C01207F33272032310591F424B1BF
:101940008F709927A80102C0440F551F8A95E2F7AE
:10195000CA01922F982B94B995B18095892385B9A6
:1019600053C02033310591F427B18F709927F801C6
:1019700002C0EE0FFF1F8A95E2F7CF01922F982B3E
:1019800097B998B18095892388B93EC02034310534
:1019900091F42AB18F709927A80102C0440F551FF6
:1019A0008A95E2F7CA01922F982B9AB99BB180953C
:1019B00089238BB929C02035310591F42DB18F7061
:1019C0009927F80102C0EE0FFF1F8A95E2F7CF01B9
:1019D000922F982B9DB99EB1809589238EB914C002
:1019E0002036310589F420B38F709927A80102C0F1
:1019F000440F551F8A95E2F7CA01922F982B90BB8E
:101A000091B38095892381BB50EA5A95F1F7BE01C5
:101A10006F5F7F4F20E030E040E050E0ECEDF2E01F
:101A2000DE011196882D01900D928A95E1F7FB0158
:101A300081919191BF01FC01E07FFF27E032F10528
:101A400011F4E3B113C0E033F10511F4E6B10EC0B7
:101A5000E034F10511F4E9B109C0E035F10511F404
:101A6000ECB104C0E036F105B9F4EFB1F0E08F70ED
:101A7000992702C0F595E7958A95E2F7E0FD08C041
:101A8000C801042E02C0880F991F0A94E2F702C011
:101A900080E090E0282B392B4F5F5F4F4C30510591
:101AA00009F0BCCFF701808191818217930721F063
:101AB00031832083909271020E94B00AF2E0EF0E0F
:101AC000F11C4CE6E41643E0F40609F025CF8091C2
:101AD0007102882361F1815080937102882339F06B
:101AE0008FE99FE00197F1F700C0000020C08091CE
:101AF00064039091650390936D0380936C038091D0
:101B000066039091670390936F0380936E038091B7
:101B1000680390916903909371038093700380919F
:101B20006A0390916B0390937303809372030E94F6
:101B3000750781E0A0960FB6F894DEBF0FBECDBF4B
:101B4000DF91CF911F910F91FF90EF90DF90CF9099
:101B5000BF90AF909F908F907F900895E82FF0E016
:101B6000EE0FFF1FE459FC4F808191810895089585
:101B7000809152048160809352040C9408298091D2
:101B800052048E7F809352040C9408290E94DA2814
:101B9000811102C00E94B6280E9404298093520439
:101BA0003E9A809171008D7F8093710082E08093D6
:101BB00090008AE18093910081E0809376030895FC
:101BC00080917603811102C00E94C60D1092C60357
:101BD0001092C503809171008D7F80937100809178
:101BE00090008F7780939000109288031092870363
:101BF0001092BF031092C0031092C1031092C2034F
:101C00001092BE031092BD03EDE9F3E0ADE8B3E03E
:101C100011921192119211921D921D9283E0ED3B4F
:101C2000F807B1F70895CF92DF92EF92FF920F93EA
:101C30001F93CF93DF9320918703222309F484C05D
:101C40006B017C0180917603811102C00E94C60D58
:101C50000DEB13E0C7E0D0E0A7019601F8019291E7
:101C60008291729162918F010E94522E811131C036
:101C7000FE01EE0FFF1FEE0FFF1FE356FC4F108219
:101C8000118212821382DE01AA0FBB1FA357BC4F21
:101C900011961C921E92C730D105E9F0219644811D
:101CA0005581668177814083518362837383148277
:101CB00015821682178212968D919C911397119618
:101CC0009C938E9313961C921E92129734961296A2
:101CD000E2CF219708F68091C5039091C603019742
:101CE00097FD05C09093C6038093C50304C010926E
:101CF000C6031092C5038091C5039091C60320913D
:101D0000C3033091C4032817390724F01092C40389
:101D10001092C303892BC1F4809171008D7F809351
:101D20007100809190008F77809390001092BF0394
:101D30001092C0031092C1031092C2031092BE030E
:101D40001092BD0310928703DF91CF911F910F91E5
:101D5000FF90EF90DF90CF9008951F920F920FB6F3
:101D60000F9211244F925F926F927F928F929F9267
:101D7000AF92BF92CF92DF92EF92FF922F933F9359
:101D80004F935F936F937F938F939F93AF93BF9383
:101D9000CF93DF93EF93FF9380918703882309F418
:101DA0009BC1C091C503D091C6031C161D060CF043
:101DB00093C14090770350907803609079037090BE
:101DC0007A0320E030E0A901C301B2010E94FD2F97
:101DD00018160CF065C0C130D10509F452C08091CD
:101DE000C3039091C403BE010E94CF317C01909344
:101DF000C4038093C3038090890390908A03A090CA
:101E00008B03B0908C0320E030E040E85FE3C50135
:101E1000B4010E94EE2D6093890370938A0380932E
:101E20008B0390938C03F701EE0FFF1FEE0FFF1F44
:101E3000E356FC4FA30192016081718182819381FD
:101E40000E94562E20E030E040E05EE30E94013028
:101E50009B01AC01C501B4010E94FD2F18168CF442
:101E6000C7010196BE010E94CF319093C4038093B5
:101E7000C3031092890310928A0310928B0310926D
:101E80008C03E091C303F091C403EE0FFF1FEE0F2C
:101E9000FF1FE356FC4F6081718182819381D0C026
:101EA000C090BF03D090C003E090C103F090C20384
:101EB00020E030E0A901C701B6010E94522E21970F
:101EC000882309F4A2C0FE01EE0FFF1FEE0FFF1FD3
:101ED000E356FC4F80809180A280B380A5019401DD
:101EE000C701B6010E94522E87FF31C0A50194019F
:101EF00060E070E08CED93EC0E94562E20E030E024
:101F000040E451E40E94562E20E030E040E05FE3E0
:101F10000E9401309B01AC0160E070E080E090E441
:101F20000E9464309B01AC01C501B4010E940130E4
:101F30009B01AC01C701B6010E94522E87FF07C06A
:101F4000A701960160E070E08CED93E439C0A50133
:101F50009401C701B6010E94FD2F18160CF055C060
:101F6000A501940160E070E08CED93E40E94562E90
:101F700020E030E040E451E40E94562E20E030E0C2
:101F800040E05FE30E9401309B01AC0160E070E043
:101F900080E090E40E9464309B01AC01C501B40173
:101FA0000E9401309B01AC01C701B6010E94FD2FC8
:101FB00018165CF5A701960160E070E08CED93ECDB
:101FC0000E94562E20E030E040E451E40E94562E5C
:101FD00020E030E040E05FE30E9401309B01AC0173
:101FE00060E070E080E090E40E9464309B01AC010E
:101FF000C701B6010E9401306093BF037093C00314
:102000008093C1039093C20313C0FE01EE0FFF1F24
:10201000EE0FFF1FE356FC4F80819181A281B381B7
:102020008093BF039093C003A093C103B093C203F6
:102030006091BF037091C0038091C1039091C2036E
:1020400020917403309175032F3F4FEF340731F027
:102050002F5F3F4F30937503209374030E94D41277
:102060006B017C0120E034E244EF51E40E94522EE7
:1020700087FF08C086EFC82E88E2D82E84EFE82EAE
:1020800081E4F82E20E030E040E051E4C701B601E1
:102090000E9401309B01AC0160E074E284E79BE4A4
:1020A0000E94562E6B017C010E94BE2E70939700F9
:1020B00060939600209172023091730240917402F5
:1020C00050917502C701B6010E9401300E94BE2ED8
:1020D000709399006093980080918803882309F495
:1020E00033C1C0908303D0908403E0908503F090C7
:1020F000860320E030E0A901C701B6010E94FD2F50
:102100001816D4F580917403909175038F3F2FEFCB
:10211000920729F001969093750380937403C70189
:10212000B6010E94D41220E030E040E051E40E9469
:1021300001309B01AC0160E074E284E79BE40E9403
:10214000562E6B017C010E94BE2E70939700609307
:102150009600209172023091730240917402509166
:102160007502C701B6010E9401300E94BE2E709315
:1021700099006093980008C0109297001092960002
:10218000109299001092980060917D0370917E03E7
:102190006F5F7F4F70937E0360937D032091960065
:1021A0003091970080E090E0232BF1F0C0919600F1
:1021B000D09197000E94EF2E6B017C01BE0180E060
:1021C00090E00E94EF2E9B01AC0160917F03709123
:1021D000800380918103909182030E94562E20E01B
:1021E0003FEF4FE757E410C00E94EF2E6B017C01D8
:1021F00020E030EE4FEF54E460917F037091800354
:1022000080918103909182030E9401309B01AC0177
:10221000C701B6010E94FD2F87FD96C080917B0308
:102220008F5F80937B0390E020914E0430914F04A8
:1022300082179307A0F080915904882319F0109217
:102240007B030DC0809171008D7F80937100809120
:1022500090008F7780939000109288037DC08091CA
:102260007C03C0917B03811128C0C0905304D0909F
:102270005404E0905504F090560420E030E0A901A9
:10228000C701B6010E94FD2F1816BCF481E08093AF
:102290007C031092830310928403109285031092A2
:1022A0008603C0927F03D0928003E0928103F09274
:1022B0008203C150C0937B0343C010927C031092F1
:1022C000750310927403E0915004F091510448E0BA
:1022D000C49FE00DF11D112480819181A281B38101
:1022E0008093830390938403A0938503B093860324
:1022F00020E030E040E85EE364817581868197816B
:102300000E9401306B017C0120E030E048EC52E497
:1023100060917602709177028091780290917902B3
:102320000E94562E9B01AC01C701B6010E940130EC
:1023300060937F0370938003809381039093820363
:1023400010927E0310927D038091520480FD04C0A0
:102350001092880310928703FF91EF91DF91CF9144
:10236000BF91AF919F918F917F916F915F914F91AD
:102370003F912F91FF90EF90DF90CF90BF90AF9063
:102380009F908F907F906F905F904F900F900FBEB7
:102390000F901F901895CF92DF92EF92FF92CF93FC
:1023A000DF936B017C01EA0180917603811102C009
:1023B0000E94C60D8091520480FF46C08091C503E3
:1023C0009091C60308970CF03FC0809171008D7FFB
:1023D000809371008091880381110E94E00D81E05B
:1023E00080938703109275031092740320E030E00D
:1023F000A901C701B6010E94FD2F1816DCF48091D7
:10240000C5039091C603FC01EE0FFF1FEE0FFF1FE7
:10241000E356FC4FC082D182E282F382FC01EE0FD0
:10242000FF1FE357FC4FD183C08301969093C603EF
:102430008093C503809171008260809371008091C8
:102440009000806880939000DF91CF91FF90EF9093
:10245000DF90CF9008958F929F92AF92BF92CF92CC
:10246000DF92EF92FF920F931F93CF93DF93EC01D4
:102470007B01D42E4801590180917603811102C05D
:102480000E94C60D8091520480FF6BC08091710044
:102490008D7F809371008091870381110E94E00DF0
:1024A00081E080938803D0935104C0935004F0924C
:1024B0004F04E0924E04D0925904809253049092BB
:1024C0005404A0925504B0925604109289031092BD
:1024D0008A0310928B0310928C0310927B038881E5
:1024E0009981AA81BB818093830390938403A093F5
:1024F0008503B093860320E030E040E85EE36C8122
:102500007D818E819F810E9401306B017C0120E0E2
:1025100030E048EC52E4609176027091770280914D
:102520007802909179020E94562E9B01AC01C7015E
:10253000B6010E94013060937F0370938003809303
:1025400081039093820310927E0310927D03809109
:102550007100826080937100809190008068809308
:102560009000DF91CF911F910F91FF90EF90DF903E
:10257000CF90BF90AF909F908F9008958091C703A8
:1025800090E0019666E070E00E94CF318093C7032F
:1025900008958091C70390E0019766E070E00E9483
:1025A000CF318093C70308958F929F92AF92BF92CD
:1025B000CF92DF92EF92FF920F931F93CF93DF930F
:1025C0006B017C01C0917403D0917503BE0180E062
:1025D00090E00E94EF2E4B015C01A701960160E0A4
:1025E00070E08CE594E40E94562E9B01AC01C5017D
:1025F000B4010E9401300E94C32E2091C7032330F2
:1026000009F473C028F4222351F02130E9F02CC1E1
:10261000243009F4A0C0253009F4E0C025C180E0D1
:1026200090E0A0E0BFE38093720290937302A093C6
:102630007402B0937502109277031092780310928F
:10264000790310927A0310C11092770310927803E5
:102650001092790310927A036431710540F46A3064
:10266000710560F520E030E040E85EE32BC0693C96
:10267000710508F0AAC080E090E00E94EF2E20E0F3
:1026800030E040EA51E40E94ED2D20E030E044E3E8
:1026900053E40E94562E9B01AC010E94013020E0C1
:1026A00030E040E05EE30E9401309B01AC0160E05D
:1026B00070E080E09EE30E94ED2D44C020E030E019
:1026C00040E05FE3C701B6010E9401306B017C016D
:1026D00080E090E0A0E0BEE38093720290937302EA
:1026E000A0937402B0937502BFC01092770310924A
:1026F00078031092790310927A034AE0469F900182
:10270000479F300D1124C90168EB7BE00E94BB316B
:10271000BC016C5D754077FF03C0719561957109CF
:10272000882777FD8095982F0E94F12E2EE333ECB9
:102730004EE259E30E94013020E030E040EC5EE3DD
:102740000E94EE2D60937202709373028093740264
:102750009093750289C010927703109278031092BB
:10276000790310927A03CE0183709927892BE1F0C7
:10277000BE016170772780E090E00E94EF2E20E09C
:1027800030E040E05EE30E94013020E030E040E4D1
:102790005FE30E94EE2D6093720270937302809348
:1027A0007402909375020CC080E090E0A0E0BFE35B
:1027B0008093720290937302A0937402B093750297
:1027C000C770DD27CD2B09F04FC010927202109216
:1027D0007302109274021092750246C01092770331
:1027E000109278031092790310927A0300E010E0BF
:1027F00020E03FE30093720210937302209374026F
:10280000309375026739710578F180E090E00E949D
:10281000EF2E20E030E047E153E40E94ED2D20E070
:1028200030E04AE754E40E94562E20E030E048E4CD
:1028300052E40E94013020E030E040EA51E40E947E
:10284000332F0E94BE2E660F771F660F771FFB0186
:10285000EC50FD4F2081318142815381C701B60187
:102860000E9401306B017C01C701B601DF91CF915D
:102870001F910F91FF90EF90DF90CF90BF90AF909E
:102880009F908F9008958091D8030895CF93DF9300
:1028900000D01F92CDB7DEB79C0180915E048430DA
:1028A00019F593E099833B832A839093E9008FEF96
:1028B0009091E800815095FD06C095ED9A95F1F74D
:1028C00000008111F5CF8091E80085FF0DC040E048
:1028D00050E063E070E0CE0101960E94A71680915F
:1028E000E8008E778093E8000F900F900F90DF91B3
:1028F000CF910895CF93DF9300D01F92CDB7DEB76D
:1029000020915E04243021F522E029839B838A8371
:1029100083E08093E9008FEF9091E800815095FD6E
:1029200006C095ED9A95F1F700008111F5CF8091E1
:10293000E80085FF0DC040E050E063E070E0CE01AC
:1029400001960E94A7168091E8008E778093E80098
:102950000F900F900F90DF91CF91089520915E041A
:102960002430F1F422E02093E9002FEF3091E800C9
:10297000215035FD06C035ED3A95F1F700002111E3
:10298000F5CF2091E80025FF0BC040E050E065E066
:1029900070E00E94A7168091E8008E778093E8008F
:1029A0000895CF93DF93EC0190915E04943009F089
:1029B00046C0809184028823D9F0809185028823C3
:1029C000B9F09093E9008FEF9091E800815095FD68
:1029D00006C095E19A95F1F700008111F5CF80913D
:1029E000E80085FF2CC040E050E060E170E017C0D7
:1029F00081E08093E9008FEF9091E800815095FD90
:102A000006C095ED9A95F1F700008111F5CF809100
:102A1000E80085FF14C040E050E068E070E0CE01BF
:102A20000E94A7168091E8008E778093E80080E1ED
:102A3000FE01A8ECB3E001900D928A95E1F7DF91D9
:102A4000CF91089580915D04811109C00E943C18C6
:102A50000E9499188091E20084608093E2000895BA
:102A600010925D040895089508950C94E12742E0C2
:102A700061EC81E00E94B61742E061EC82E00E94C6
:102A8000B61742E061EC83E00E94B61742E161ECC8
:102A900084E00C94B61780916004833009F455C02B
:102AA00030F4813071F0823009F48EC008958A309C
:102AB00009F47AC08B3009F460C0893009F09CC0F9
:102AC00020C080915F04813A09F096C08091E800AF
:102AD000877F8093E8008091630490916404892B40
:102AE00021F460E188EC93E003C060E080E090E0D6
:102AF00070E00E94F2168091E8008B778093E800E6
:102B0000089580915F04813209F076C0809163045A
:102B100090916404009719F0039709F06DC08091BB
:102B2000E800877F8093E8008091E80082FD05C07F
:102B300080915E048111F8CF5FC08091F100809395
:102B4000D8038091E8008B7753C080915F04813A6D
:102B500009F052C08091630490916404892B09F0BC
:102B60004BC08091E800877F8093E8008091E80067
:102B700080FFFCCF8091840236C080915F04813257
:102B8000D9F58091630490916404892BA9F5809113
:102B9000E800877F8093E8000E94EB178091610432
:102BA000809384020C945C2180915F04813221F532
:102BB0008091E800877F8093E8000E94EB17809166
:102BC00062048093D903089580915F04813AA1F44F
:102BD0008091E800877F8093E8008091E80080FF83
:102BE000FCCF8091D9038093F1008091E8008E772B
:102BF0008093E8000C94EB17089584B7877F84BF17
:102C000088E10FB6F89480936000109260000FBEC8
:102C100090E080E80FB6F894809361009093610093
:102C20000FBE0E948E1B0E943C180E949918809132
:102C3000E20084608093E20078940E941F1B0E944F
:102C4000901B8AE792E00E943A1B80915E048530D7
:102C500069F40E949B2780915C048823B1F30E9451
:102C6000C927882391F30E949116EFCF0E94981BE9
:102C7000ECCF292F332723303105C9F064F42130FC
:102C8000310581F02230310509F043C08DE690E036
:102C90002AE338E042C021323105F1F02232310519
:102CA00041F137C082E190E027EA38E036C0992749
:102CB0008130910541F08230910541F0892B49F531
:102CC000E6E3F8E005C0E8E0F8E002C0EEEDF7E08A
:102CD000849190E09F0121C06430D8F4E62FF0E0A9
:102CE000EE0FFF1FE05BFC4F2081318189E090E017
:102CF00014C0643070F470E0FB01EE0FFF1FE85B5E
:102D0000FC4F20813181FB01EC5BFC4F808190E026
:102D100004C080E090E020E030E0FA0131832083BD
:102D2000089580E189BD82E189BD09B400FEFDCF2F
:102D30008091D8008F7D8093D8008091E0008260E0
:102D40008093E0008091E00081FDFCCF0895CF9258
:102D5000DF92EF92FF920F931F93CF93DF93EC01DB
:102D60008B016A010E940A18811133C0C114D10479
:102D700039F0F60180819181081B190BC80FD91F0A
:102D8000E12CF12C0115110519F18091E80085FD68
:102D900016C08091E8008E778093E800C114D104BA
:102DA00049F0F60180819181E80EF91EF182E082FE
:102DB00085E00FC00E940A18882321F30AC0899178
:102DC0008093F10001501109FFEFEF1AFF0ADACFEB
:102DD00080E0DF91CF911F910F91FF90EF90DF90F6
:102DE000CF90089520916504309166042617370727
:102DF00048F06115710539F42091E8002E77209391
:102E0000E80001C0B90140E061157105A9F1209108
:102E10005E04222309F443C0253009F442C0209106
:102E2000E80023FD40C02091E80022FD32C020913F
:102E3000E80020FFE9CF4091F3002091F20030E05C
:102E4000342BFC01CF016115710559F02830310593
:102E500040F481918093F100615071092F5F3F4FE1
:102E6000F1CF41E02830310509F040E02091E80041
:102E70002E772093E800C8CF4111C9CF0AC08091B6
:102E80005E04882361F0853061F08091E80083FD65
:102E90000AC08091E80082FFF2CF80E0089582E0CE
:102EA000089583E0089581E00895209165043091AC
:102EB00066042617370748F06115710539F420912B
:102EC000E8002E772093E80001C0B901FC0120E062
:102ED0006115710591F180915E04882309F440C069
:102EE000853009F43FC08091E80083FD3DC08091AA
:102EF000E80082FD2FC08091E80080FFE9CF20919B
:102F0000F3008091F20090E0922B6115710559F069
:102F10008830910540F424912093F100319661505E
:102F200071090196F2CF21E0089709F020E0809125
:102F3000E8008E778093E800CBCF2111CCCF0AC078
:102F400080915E04882361F0853061F08091E80013
:102F500083FD0AC08091E80082FFF2CF80E00895EF
:102F600082E0089583E0089581E00895982F9730D6
:102F700058F59093E900981739F07091EC00209182
:102F8000ED005091F00003C0242F762F50E021FF78
:102F900019C03091EB003E7F3093EB003091ED0093
:102FA0003D7F3093ED003091EB0031603093EB00CA
:102FB0007093EC002093ED005093F0002091EE0010
:102FC00027FF07C09F5FD3CF8F708093E90081E018
:102FD000089580E0089580915F0487FF11C080917B
:102FE000E80082FD05C080915E048111F8CF11C018
:102FF0008091E8008B770BC080915E04882349F0B4
:103000008091E80080FFF8CF8091E8008E77809370
:10301000E80008952091E4003091E50095E64091A4
:10302000EC00842F817040FF22C08091E80080FD79
:103030001CC080915E04882391F0853091F08091CE
:10304000EB0085FD10C04091E4005091E50042176F
:10305000530729F39A01915011F784E0089582E013
:10306000089583E0089581E0089580E008954091F7
:10307000E80042FFDECF08950E94AA180E94B2180D
:10308000E0EEF0E0808181608083E8EDF0E0808117
:103090008F77808319BCA7EDB0E08C918E7F8C93E5
:1030A00080818F7E808310925D0408950F931F931B
:1030B000CF93DF930E94AA180E94B218C8EDD0E007
:1030C00088818F77888388818068888388818F7DD5
:1030D000888319BC10925E0410925A0410925C040A
:1030E00010925B0400EE10E0F80180818B7F8083FA
:1030F00088818160888342E060E080E00E94B617AA
:10310000E1EEF0E080818E7F8083E2EEF0E080816E
:1031100081608083808188608083F80180818E7FD8
:103120008083888180618883DF91CF911F910F9187
:103130000895E8EDF0E080818F7E8083E7EDF0E098
:1031400080818160808384E082BF81E080935D0420
:103150000C945618E8EDF0E080818E7F8083109209
:10316000E20008951092DA001092E10008951F9293
:103170000F920FB60F9211242F933F934F935F93AB
:103180006F937F938F939F93AF93BF93EF93FF932F
:103190008091E10082FF0BC08091E20082FF07C0B6
:1031A0008091E1008B7F8093E1000E941E1B809143
:1031B000DA0080FF1FC08091D80080FF1BC0809183
:1031C000DA008E7F8093DA008091D90080FF0DC0F5
:1031D00080E189BD82E189BD09B400FEFDCF81E0B7
:1031E00080935E040E94221505C019BC10925E04F3
:1031F0000E9430158091E10080FF19C08091E200AB
:1032000080FF15C08091E2008E7F8093E200809164
:10321000E20080618093E2008091D8008062809318
:10322000D80019BC85E080935E040E94341580911B
:10323000E10084FF30C08091E20084FF2CC080E177
:1032400089BD82E189BD09B400FEFDCF8091D8001F
:103250008F7D8093D8008091E1008F7E8093E10084
:103260008091E2008F7E8093E2008091E200816095
:103270008093E20080915A04882311F084E007C013
:103280008091E30087FD02C081E001C083E080936C
:103290005E040E9435158091E10083FF29C0809172
:1032A000E20083FF25C08091E100877F8093E100E9
:1032B00082E080935E0410925A048091E1008E7F38
:1032C0008093E1008091E2008E7F8093E200809104
:1032D000E20080618093E20042E060E080E00E94D2
:1032E000B6178091F00088608093F0000E9433153B
:1032F000FF91EF91BF91AF919F918F917F916F91CE
:103300005F914F913F912F910F900FBE0F901F90A3
:1033100018951F920F920FB60F9211242F933F937F
:103320004F935F936F937F938F939F93AF93BF93CD
:10333000CF93DF93EF93FF93C091E900CF7080911B
:10334000EC00D82FD17080FDD0E81092E900809178
:10335000F000877F8093F00078940E94CD1910923E
:10336000E9008091F00088608093F000CD2BCF7051
:10337000C093E900FF91EF91DF91CF91BF91AF91A1
:103380009F918F917F916F915F914F913F912F917D
:103390000F900FBE0F901F9018951F93CF93DF9340
:1033A000CDB7DEB7AA970FB6F894DEBF0FBECDBF7C
:1033B000EFE5F4E088E08E0F9091F10091938E1389
:1033C000FBCF0E944B158091E80083FF1FC18091C5
:1033D0005F0490916004492F50E04A30510508F095
:1033E00015C1FA01EC59FF4F0C94E331803881F09C
:1033F000823809F00BC1809163048F708093E900DB
:103400008091EB0085FB882780F91092E90006C0C7
:1034100080915B0490915C04911182609091E8002E
:10342000977F9093E8008093F1001092F100C8C05C
:10343000282F2D7F09F0EAC0882319F0823061F02F
:10344000E5C080916104813009F0E0C0933009F05B
:1034500080E080935C042BC080916104811127C0BF
:10346000809163048F7009F4D1C08093E9002091AA
:10347000EB0020FF1CC0933021F48091EB008062B0
:1034800014C09091EB0090619093EB0021E030E04C
:10349000A90102C0440F551F8A95E2F74093EA0044
:1034A0001092EA008091EB0088608093EB0010920C
:1034B000E9008091E800877F86C08111A7C0109144
:1034C00061041F778091E3008078812B8093E30073
:1034D0008091E800877F8093E8000E94EB1780913D
:1034E000E80080FFFCCF8091E30080688093E300D8
:1034F000111102C082E001C083E080935E0486C0A7
:103500008058823008F082C08091610490916204FA
:103510008C3D53E0950779F583E08A838AE28983BD
:103520004FB7F894DE01139620E03EE051E2E32F1E
:10353000F0E050935700E49120FF03C0E295EF7054
:103540003F5FEF708E2F90E0EA3010F0C79601C019
:10355000C0968D939D932F5F243149F74FBF809183
:10356000E800877F8093E8006AE270E0CE01019670
:103570000E94F21614C0AE014F5F5F4F609163046A
:103580000E943916BC01009709F440C09091E800F0
:10359000977F9093E80089819A810E9455178091C6
:1035A000E8008B778093E80031C0803879F580910E
:1035B000E800877F8093E80080915A048093F100AF
:1035C0008091E8008E778093E8000E94EB171EC080
:1035D00081111CC0909161049230C0F48091E80088
:1035E000877F8093E80090935A040E94EB178091A4
:1035F0005A04811106C08091E30087FD02C081E07A
:1036000001C084E080935E040E9437158091E80039
:1036100083FF0AC08091E800877F8093E800809153
:10362000EB0080628093EB00AA960FB6F894DEBFA1
:103630000FBECDBFDF91CF911F9108950895CF9315
:1036400080915E048823A1F0C091E900CF70909131
:10365000EC00892F817090FD80E8C82B1092E90062
:103660008091E80083FD0E94CD19CF70C093E900DE
:10367000CF9108959093DF038093DE030895E09146
:10368000DE03F091DF03309721F00190F081E02D0F
:10369000099480E00895E091DE03F091DF03309714
:1036A00021F00280F381E02D09940895E091DE037A
:1036B000F091DF03309721F00480F581E02D09942B
:1036C00008952091DC033091DD038217930771F098
:1036D0009093DD038093DC03E091DE03F091DF0340
:1036E000309721F00680F781E02D0994089520910C
:1036F000DA033091DB038217930771F09093DB03B9
:103700008093DA03E091DE03F091DF03309721F03C
:103710000084F185E02D0994089508950C948D1B83
:103720000E9415280E94760B0E949B280C94562D0F
:103730004F925F927F928F929F92AF92BF92CF9261
:10374000DF92EF92FF920F931F93CF93DF93CDB74A
:10375000DEB72A970FB6F894DEBF0FBECDBF0E942A
:10376000650C91EEC92E93E0D92E00E010E0AA245A
:10377000A394B12C702E802F0E94AE0D4C01F60147
:10378000419051906F014826592641145104B1F4DB
:103790000F5F1F4F0430110569F78FEF89838A830C
:1037A0001B820E941E288160782F9D838C83498113
:1037B0005A816B818D810E94511C3AC080913D04D9
:1037C00081FD0E94B70D20E030E07501022E02C09D
:1037D000EE0CFF1C0A94E2F7C70184219521892B86
:1037E00009F12E837F828E209F2091E0892809F4A1
:1037F00090E098870E941E288160782F9A87898799
:103800004E815F8168858A850E94511C000F111FBF
:10381000F801EF51FC4F80819181E826F926F18271
:10382000E08206C02F5F3F4F2C30310571F6B0CFDC
:103830000E94872A1091E0030E943F1B1817D9F0BD
:103840000E943F1B8093E0032A960FB6F894DEBFD8
:103850000FBECDBFDF91CF911F910F91FF90EF90E1
:10386000DF90CF90BF90AF909F908F907F905F90B0
:103870004F900C94AE0A2A960FB6F894DEBF0FBE96
:10388000CDBFDF91CF911F910F91FF90EF90DF900F
:10389000CF90BF90AF909F908F907F905F904F9010
:1038A0000895CF93DF93CDB7DEB72B970FB6F8947B
:1038B000DEBF0FBECDBF4F83588769877A878B875E
:1038C000DE01119686E0FD0111928A95E9F785E007
:1038D000FE01379601900D928A95E1F749815A8150
:1038E0006B817C818D819E810E94F6232B960FB681
:1038F000F894DEBF0FBECDBFDF91CF910895CF9377
:10390000882309F4C2C0C82F823859F40E943F1B93
:1039100081FDBBC089E30E949F260E946C2789E33A
:103920000CC0833879F40E943F1B80FDAEC083E554
:103930000E949F260E946C2783E50E94E126CF917A
:103940000C946C27843859F40E943F1B82FD9DC063
:1039500087E40E949F260E946C2787E4EECF8CEFBD
:103960008C0F813A48F48C2F0E94BE2C81118DC09F
:103970008C2F0E949F26E3CF80E28C0F883048F482
:10398000C77081E001C0880FCA95EAF70E94252719
:10399000D6CF8BE58C0F833078F4C53A29F0C63A40
:1039A00031F083E890E005C081E890E002C082E851
:1039B00090E0CF910C94611B88E58C0F833108F067
:1039C00064C0C83A39F1C93A41F1CA3A49F1CB3A2F
:1039D00051F1CC3A59F1CD3A61F1C03B69F1CE3A9F
:1039E00071F1CF3A79F1C13B81F1C23B89F1C33B1F
:1039F00091F1C43B99F1C53BA1F1C63BA9F1C73B8D
:103A0000B1F1C83BB9F1C93BC1F1CA3BC9F180E092
:103A100090E038C082EE90E035C089EE90E032C090
:103A20008AEE90E02FC085EB90E02CC086EB90E012
:103A300029C087EB90E026C08CEC90E023C08DEC91
:103A400090E020C083E891E01DC08AE891E01AC0B0
:103A500082E991E017C084E991E014C081E292E02C
:103A600011C083E292E00EC084E292E00BC085E2D6
:103A700092E008C086E292E005C087E292E002C0D0
:103A80008AE292E0CF910C94771BCF91089588231E
:103A900009F44BC0823859F40E943F1B81FF45C096
:103AA00089E30E949F260E946C2789E30CC083381B
:103AB00071F40E943F1B80FF38C083E50E949F265F
:103AC0000E946C2783E50E94E1260C946C278438C1
:103AD00059F40E943F1B82FF28C087E40E949F2662
:103AE0000E946C2787E4EFCF9CEF980F913A58F330
:103AF00090E2980F983050F4877091E001C0990FD0
:103B00008A95EAF7892F0E942B27DFCF9BE5980F34
:103B1000933020F480E090E00C94611B885A83314C
:103B200020F480E090E00C94771B0895882321F026
:103B30000E9425270C946C270895882321F00E9469
:103B40002B270C946C270895BF92CF92DF92EF92AF
:103B5000FF920F931F93CF93DF9300D000D000D03C
:103B6000CDB7DEB725E0FC01DE01119601900D9284
:103B70002A95E1F7FC01D0801181028125812295EF
:103B80002F7043815481452B09F472C31F3F21F4E8
:103B9000FFEFDF1609F46CC37C012E830E947707C8
:103BA000D9821A8369817A81802F0E949B26182FDF
:103BB000B92E0E9450260E9417252E81002319F04D
:103BC0000E9442272E81EB2DE295EF70F0E0E25942
:103BD000FF4F0C94E3318B2D807F9B2D9F70F92E2E
:103BE000882319F0F29480EFF822002389F0FF2057
:103BF00009F47CC280E2810F883020F48F2D0E946E
:103C0000252703C08F2D0E9435270E946C276EC286
:103C1000812F0E94471DFF2009F42AC3105E8F2DBB
:103C2000183018F40E942B2702C00E943B272696CA
:103C30000FB6F894DEBF0FBECDBFDF91CF911F91BD
:103C40000F91FF90EF90DF90CF90BF900C946C2776
:103C50008B2D807F9B2D9F70803211F4892F03C0A4
:103C6000892F8295807F112319F0113011F12BC01B
:103C70000023A9F0222389F1213079F526960FB689
:103C8000F894DEBF0FBECDBFDF91CF911F910F9192
:103C9000FF90EF90DF90CF90BF900C945527222398
:103CA00019F0213009F4E4C28E830E9458278E81D6
:103CB0009BC1002321F0263008F0DAC20EC0253067
:103CC00008F0D6C291C10023C9F0222331F0F701D8
:103CD000958190FF0BC29F70958326960FB6F8943E
:103CE000DEBF0FBECDBFDF91CF911F910F91FF902F
:103CF000EF90DF90CF90BF900C94961D222309F493
:103D000073C109C22B2D26952695237030E021150D
:103D1000310521F021303105D1F0AAC2002321F074
:103D2000812F9B2D937002C080E090E026960FB605
:103D3000F894DEBF0FBECDBFDF91CF911F910F91E1
:103D4000FF90EF90DF90CF90BF900C94611B002309
:103D500021F0812F9B2D937002C080E090E0269689
:103D60000FB6F894DEBF0FBECDBFDF91CF911F918C
:103D70000F91FF90EF90DF90CF90BF900C94771B46
:103D8000812F002319F00E948F2902C00E94F72979
:103D900026960FB6F894DEBF0FBECDBFDF91CF9150
:103DA0001F910F91FF90EF90DF90CF90BF900C94F8
:103DB0007C2A8B2D837009F07BC0011159C2812FA1
:103DC000829586958770880F880F912F9F70C92ED6
:103DD000D12CE12CF12C082E04C0CC0CDD1CEE1CE7
:103DE000FF1C0A94D2F714FF12C04FE050E060E0CD
:103DF00070E004C0440F551F661F771F8A95D2F7E5
:103E0000CB01BA01609570958095909503C060E0F4
:103E100070E0CB012B2D269526952370422F50E084
:103E200042305105D9F04330510569F16C297D29A3
:103E30008E299F294130510551F126960FB6F894ED
:103E4000DEBF0FBECDBFDF91CF911F910F91FF90CD
:103E5000EF90DF90CF90BF900C943E256C297D2988
:103E60008E299F2926960FB6F894DEBF0FBECDBFD0
:103E7000DF91CF911F910F91FF90EF90DF90CF9046
:103E8000BF900C945A250E943E25C701B601269684
:103E90000FB6F894DEBF0FBECDBFDF91CF911F915B
:103EA0000F91FF90EF90DF90CF90BF900C94222560
:103EB000002319F08B2D817001C08695882309F4A9
:103EC000D7C1812F829586958770880F880F912F93
:103ED0009F70C92ED12CE12CF12C082E04C0CC0CE3
:103EE000DD1CEE1CFF1C0A94D2F714FF12C04FE039
:103EF00050E060E070E004C0440F551F661F771F5C
:103F00008A95D2F7CB01BA0160957095809590950E
:103F100003C060E070E0CB012B2D26952695237021
:103F2000422F50E042305105D9F04330510569F13C
:103F30006C297D298E299F294130510551F1269602
:103F40000FB6F894DEBF0FBECDBFDF91CF911F91AA
:103F50000F91FF90EF90DF90CF90BF900C941826B8
:103F60006C297D298E299F2926960FB6F894DEBFED
:103F70000FBECDBFDF91CF911F910F91FF90EF90BA
:103F8000DF90CF90BF900C9434260E941826C70172
:103F9000B60126960FB6F894DEBF0FBECDBFDF91F7
:103FA000CF911F910F91FF90EF90DF90CF90BF9036
:103FB0000C94FC25103F49F118F4103E48F491C0D0
:103FC000123F09F453C0E8F1133F09F464C089C0FB
:103FD0001F708B2D8F71002321F00E949525812F5A
:103FE0007CCE0E94B625812F26960FB6F894DEBFB0
:103FF0000FBECDBFDF91CF911F910F91FF90EF903A
:10400000DF90CF90BF900C949D1D0023B1F0253020
:1040100008F02EC18B2D8F7126960FB6F894DEBF57
:104020000FBECDBFDF91CF911F910F91FF90EF9009
:10403000DF90CF90BF900C94DB25263008F018C19C
:10404000E9CF0023A9F08B2D8F7126960FB6F89437
:10405000DEBF0FBECDBFDF91CF911F910F91FF90BB
:10406000EF90DF90CF90BF900C949525002359F3EB
:104070008B2D8F7126960FB6F894DEBF0FBECDBF85
:10408000DF91CF911F910F91FF90EF90DF90CF9034
:10409000BF900C94B625002399F08B2D8F71269636
:1040A0000FB6F894DEBF0FBECDBFDF91CF911F9149
:1040B0000F91FF90EF90DF90CF90BF900C948025F0
:1040C00026960FB6F894DEBF0FBECDBFDF91CF911D
:1040D0001F910F91FF90EF90DF90CF90BF900C94C5
:1040E00076250023A9F0222309F4ADCF812F26964F
:1040F0000FB6F894DEBF0FBECDBFDF91CF911F91F9
:104100000F91FF90EF90DF90CF90BF900C947F1CA9
:10411000222309F4ADCF812F26960FB6F894DEBF87
:104120000FBECDBFDF91CF911F910F91FF90EF9008
:10413000DF90CF90BF900C94471D4B2D4F70612F97
:10414000C7010E94690526960FB6F894DEBF0FBE20
:10415000CDBFDF91CF911F910F91FF90EF90DF9036
:10416000CF90BF900C949A24011182C09B2D9F7018
:10417000492F50E04230510509F443C0C4F44115C1
:10418000510571F14130510509F072C026960FB604
:10419000F894DEBF0FBECDBFDF91CF911F910F917D
:1041A000FF90EF90DF90CF90BF900C947E2D433026
:1041B0005105C1F14430510509F05AC0812F2696AE
:1041C0000FB6F894DEBF0FBECDBFDF91CF911F9128
:1041D0000F91FF90EF90DF90CF90BF900C94D02D77
:1041E00026960FB6F894DEBF0FBECDBFDF91CF91FC
:1041F0001F910F91FF90EF90DF90CF90BF900C94A4
:10420000672D26960FB6F894DEBF0FBECDBFDF91A7
:10421000CF911F910F91FF90EF90DF90CF90BF90C3
:104220000C949A2D26960FB6F894DEBF0FBECDBF24
:10423000DF91CF911F910F91FF90EF90DF90CF9082
:10424000BF900C94AD2D4B2D4F70612FC70126965A
:104250000FB6F894DEBF0FBECDBFDF91CF911F9197
:104260000F91FF90EF90DF90CF90BF900C94790763
:1042700026960FB6F894DEBF0FBECDBFDF91CF916B
:104280001F910F91FF90EF90DF90CF90BF90089516
:104290000E9442270E9452270E9417270E946C27E3
:1042A0000E942D2B0E947C2A80E090E00E94611BDE
:1042B00080E090E00C94771B0E9432270C944821F8
:1042C0000E949026292F22952F7030E02C30310546
:1042D0004CF42A3031056CF422503109223031057A
:1042E00088F407C02C30310549F02F30310531F00A
:1042F00009C0803E48F0803F29F406C093FB882720
:1043000080F9089580E0089581E00895CF93DF93C8
:1043100000D000D01F92CDB7DEB70F900F900F9056
:104320000F900F90DF91CF910895CF93DF9300D03E
:1043300000D000D0CDB7DEB726960FB6F894DEBF1A
:104340000FBECDBFDF91CF9108951F93CF93DF9321
:10435000C091E90316E08091EA03C81799F0D0E014
:104360001C9FF0011D9FF00D1124E551FC4F408171
:10437000518162817381848195810E94952121966A
:10438000C770E9CFDF91CF911F91089540911B0431
:1043900050911C0460911D0470911E0480911F04B3
:1043A000909120040C9495218091200482958F7027
:1043B00009F054C080911D04882309F44FC08091F6
:1043C000E903A091EA0360911B0470911C044091E1
:1043D0001E0450911F04B6E08A1709F43FC090E014
:1043E00041155105C1F17F3F11F46F3FA1F1B89F15
:1043F000F001B99FF00D1124E551FC4F218172139A
:104400002AC02081621327C02281211124C0238168
:1044100034812417350710F421503109241B350B42
:10442000283C3105C0F4209120042F702061209396
:10443000200426E0289FF001299FF00D1124E0516F
:10444000FC4F80818F70806180838BE194E00E94BB
:10445000A41D0C94A52101968770BECF0895CF921C
:10446000DF92EF92FF920F931F93CF93DF93CDB71D
:10447000DEB762970FB6F894DEBF0FBECDBF8C01DA
:1044800085E0F801DE011D9601900D928A95E1F715
:10449000D8014C9111965C91119712966C911297DC
:1044A0001396CD90DC90149730911B0470911C04EE
:1044B00080911E0490911F04009709F46BC17F3F07
:1044C00019F43F3F09F466C1E0901D04EE2009F4A1
:1044D000C0C020912004C816D90628F0F601E81BB8
:1044E000F90BCF0104C0809590958C0D9D1DFF2484
:1044F000F394883C910578F0F12C207F09F0C6C038
:104500007C2DD98AC88A89890E9486218BE194E012
:104510000E94A41DB1C0822F807F09F046C0751390
:1045200014C0341312C0611110C02F702061209389
:1045300020040E94C6218BE194E00E94A41D80917A
:104540002004D80115968C932EC0CD2819F15F3F19
:1045500011F44F3FF9F0F62E61111CC08091E90370
:104560002091EA0336E0821709F45AC090E0389FA0
:10457000F001399FF00D1124E551FC4F7181571363
:1045800006C07081471303C07281711103C0019688
:104590008770E9CFF62E662309F418C180912004B4
:1045A000816080932004F12C11C1751308C034136D
:1045B00006C0611104C080912004D801C3C04D879A
:1045C0005E878D859E856A8B0E9460216A8988231B
:1045D000E1F16623D1F120912004822F82958F7022
:1045E00090E0029774F080911B0490911C049887CE
:1045F0008F831986DB86CA862C87CE0107960E9498
:10460000A41D86E0F801ABE1B4E001900D928A951B
:10461000E1F70E94D4210E94C621FF24F394D6C062
:104620004D875E878D859E850E949026292F229535
:104630002F7030E0223031050CF0BCC09F7009F0C3
:10464000B6C0805E883008F4C1C0C8010E94A41DB5
:10465000E4CFC816D90608F453C0F601E81BF90BDD
:10466000CF01883C910508F450C0F12C7C2DD98AEB
:10467000C88A89890E948621EBE1F4E086E0DF01A7
:104680001D928A95E9F70E94C621A0C0751314C037
:10469000341312C0611110C080912004F801858389
:1046A000C8010E94A41D86E0EBE1F4E0DF011D9249
:1046B0008A95E9F7FE2C8AC04D875E878D859E8599
:1046C0006A8B0E9460216A89882309F4BECF662321
:1046D00009F4BBCF20912004822F82958F7090E047
:1046E00002970CF48ECF80911B0490911C049A8346
:1046F00089831B82DD82CC822E83CE0101967FCFFF
:10470000809590958C0D9D1DACCFF62E662309F4F7
:104710009CCF75132EC034132CC02091200420FD93
:104720001FC0822F82958F70D9F0D80115962C93D7
:1047300015978F3049F08F5F982F9295907F822F39
:104740008F70892B15968C93C8010E94A41D86E05A
:10475000F801ABE1B4E001900D928A95E1F793CFB7
:1047600086E0F801ABE1B4E001900D928A95E1F7A3
:104770002DC04D875E878D859E850E9460218111A9
:1047800040CF80912004816080932004C8010E9462
:10479000A41D1CC0662309F458CF4D875E878D8504
:1047A0009E850E946021882309F44FCF2ACF811172
:1047B00048CF0CC0243031050CF047CF9F7009F46E
:1047C00040CFF8019581907F09F03BCF8F2D629605
:1047D0000FB6F894DEBF0FBECDBFDF91CF911F9112
:1047E0000F91FF90EF90DF90CF9008951F93CF939C
:1047F000DF93CDB7DEB72C970FB6F894DEBF0FBEB0
:10480000CDBF4F83588769877A878B879C87CE0176
:1048100007960E942F22882369F08F8198852A8528
:104820003B85232BF1F19F3F09F063C08F3F09F0D7
:1048300060C037C086E0FE013796DE011196019018
:104840000D928A95E1F76F817885EA85FB8530972F
:1048500041F17F3F11F46F3F21F12091EA0330E0F5
:10486000C9010196877099274091E90350E08417A8
:10487000950709F447C069837A83FD83EC8396E04A
:10488000929FD001939FB00D1124A551BC4FFE0102
:10489000319601900D929A95E1F78093EA030E9478
:1048A000A52116E08091E9039091EA038917C1F1EF
:1048B000189FC001112485519C4F0E942F228823EC
:1048C00079F1E091E9031E9FF0011124E551FC4FBD
:1048D0004081518162817381848195810E949521FB
:1048E0008091E90390E00196877099278093E9030E
:1048F000D9CF4F81588569857A858B859C850E94A3
:104900009521CFCF0E945C211092EA031092E90317
:10491000EBE1F4E086E0DF011D928A95E9F7C1CF73
:104920002C960FB6F894DEBF0FBECDBFDF91CF91AE
:104930001F910895EF92FF920F931F93CF93DF93F0
:104940008C01009709F46CC0F12CEE24E394E8018B
:104950002196F8018491843740F4843008F051C0E6
:10496000813081F0823019F15BC0853709F444C091
:10497000A8F19CE7980F903708F052C08F770E94FB
:10498000471D41C00E5F1F4FFE01C49180E28C0F96
:10499000883048F4C7708E2D01C0880FCA95EAF799
:1049A0000E94452714C08C2F0E947F1C2DC00E5FD3
:1049B0001F4FFE01C49180E28C0F883058F4C770FD
:1049C0008E2D01C0880FCA95EAF70E944B270E94DE
:1049D0006C271AC08C2F0E94471D16C00E5F1F4FF8
:1049E000FE01C491CC2381F08FE99FE00197F1F79C
:1049F00000C00000C150F6CF0E5F1F4FFE01F490C3
:104A000003C00E947F1C8E018F2D882309F49FCF45
:104A1000EFE9FFE03197F1F700C000008150F5CFDA
:104A2000DF91CF911F910F91FF90EF90089508951E
:104A300060932504709326048093270490932804A0
:104A40000C9448210F931F93009125041091260484
:104A50002091270430912804DC01CB01802B912B7D
:104A6000A22BB32B8093250490932604A0932704B4
:104A7000B09328041F910F910C9448210F931F931A
:104A800000912504109126042091270430912804D8
:104A9000DC01CB0180239123A223B323809325043F
:104AA00090932604A0932704B09328041F910F919C
:104AB0000C9448210F931F93009125041091260414
:104AC0002091270430912804DC01CB018027912715
:104AD000A227B3278093250490932604A09327044C
:104AE000B09328041F910F910C9448211092210437
:104AF0001092220410922304109224040C94482152
:104B000041E050E060E070E004C0440F551F661FB4
:104B1000771F8A95D2F74093210450932204609323
:104B20002304709324040C94482141E050E060E099
:104B300070E004C0440F551F661F771F8A95D2F797
:104B40008091210490912204A0912304B091240427
:104B5000482B592B6A2B7B2B409321045093220422
:104B600060932304709324040C94482141E050E0A6
:104B700060E070E004C0440F551F661F771F8A95E0
:104B8000D2F7409550956095709580912104909151
:104B90002204A0912304B0912404482359236A23BA
:104BA0007B23409321045093220460932304709349
:104BB00024040C94482141E050E060E070E004C01F
:104BC000440F551F661F771F8A95D2F780912104E5
:104BD00090912204A0912304B091240448275927DE
:104BE0006A277B2740932104509322046093230477
:104BF000709324040C9448210F931F930091210477
:104C0000109122042091230430912404DC01CB0173
:104C1000802B912BA22BB32B809321049093220401
:104C2000A0932304B09324041F910F910C94482166
:104C30000F931F93009121041091220420912304CB
:104C400030912404DC01CB0180239123A223B323E0
:104C50008093210490932204A0932304B09324040E
:104C60001F910F910C9448210F931F9300912104E1
:104C7000109122042091230430912404DC01CB0103
:104C800080279127A227B3278093210490932204A1
:104C9000A0932304B09324041F910F910C944821F6
:104CA0000895CF92DF92EF92FF920F931F93CF93CD
:104CB000DF938C01C0902504D0902604E090270457
:104CC000F09028048091210490912204A091230463
:104CD000B0912404C82AD92AEA2AFB2ACFE1D0E0DD
:104CE000D701C6010C2E04C0B695A7959795879558
:104CF0000A94D2F780FF06C0B8018C2F0E94D30916
:104D0000019721F4219760F780E001C08C2FDF919B
:104D1000CF911F910F91FF90EF90DF90CF9008956A
:104D2000CF93DF93EC010E945126BE010E94D3096C
:104D3000DF91CF910895CB010E9490260895909124
:104D40008402992321F090918502911109C020914C
:104D5000860230918702F90132969FEF40E01FC032
:104D6000982F9695969596959F3050F5E0918602EE
:104D7000F0918702E90FF11D877021E030E0A90171
:104D800002C0440F551F8A95E2F7CA019181892B11
:104D9000818308959F3F39F04F5F4E3041F051912C
:104DA0005813F8CF0DC05111F7CF942FF5CF9F3F77
:104DB00039F0F901E90FF11D97FDFA958283089505
:104DC000089590918402992321F090918502911188
:104DD00009C02091860230918702F9013296205F46
:104DE0003F4F1FC0982F9695969596959F30F0F45B
:104DF000E0918602F0918702E90FF11D877021E0B2
:104E000030E0A90102C0440F551F8A95E2F7CA019C
:104E1000809591818923818308953196E217F30764
:104E200029F090819813F9CF1082F7CF089581E08F
:104E300090E0E0918602F0918702E80FF91F10825E
:104E4000019680319105A9F7089590913C04892B32
:104E500080933C040895809590913C04892380932D
:104E60003C04089510923C04089590913B04892BD2
:104E700080933B040895809590913B04892380930F
:104E80003B04089510923B04089590913A04892BB5
:104E900080933A040895809590913A0489238093F1
:104EA0003A04089510923A040895809329040895CD
:104EB0001092290408958091860290918702FC0146
:104EC00031969C01205F3F4F80E0919191118F5F5F
:104ED000E217F307D1F70895E0918602F091870277
:104EE00080913C048083E0918602F091870290815A
:104EF00080913B04892B8083E0918602F0918702A8
:104F0000908180913A04892B8083809129048823A1
:104F100061F0E0918602F09187029081892B808375
:104F20000E945B2781111092290480918602909142
:104F300087020C944B1B80915E04843039F11092EF
:104F40003E0420E488E190E00FB6F894A8958093A1
:104F500060000FBE2093600080E00E94300580E07A
:104F60000E94AE0A83B7817F846083BF83B781606C
:104F700083BF7894889583B78E7F83BF88E10FB60F
:104F8000F89480936000109260000FBE0895089519
:104F90000895CF9380E00E9430050E94C7270E94A9
:104FA000650C0E94C827C0E08C2F0E94AE0D892B93
:104FB00029F4CF5FC430C1F780E001C081E0CF9118
:104FC00008950E945C2180E00E9430050E94562DC9
:104FD0000E943F1B0C94AE0A1F920F920FB60F92C5
:104FE00011248F939F93AF93BF9380913E048111BF
:104FF00013C080913F0490914004A0914104B0916E
:1050000042044196A11DB11D80933F04909340043A
:10501000A0934104B0934204BF91AF919F918F91AF
:105020000F900FBE0F901F90189582E084BD93E003
:1050300095BD9AEF97BD80936E0008952FB7F894B1
:1050400080913F0490914004A0914104B0914204AA
:105050002FBF0895CF92DF92EF92FF920F931F938D
:105060002FB7F89440913F0450914004609141045F
:10507000709142042FBF6A017B01EE24FF248C0152
:1050800020E030E0C016D106E206F30610F44150ED
:1050900051099A01281B390BC9011F910F91FF90EB
:1050A000EF90DF90CF9008951F920F920FB60F925E
:1050B00011248F939F93AF93BF9380913F0490915E
:1050C0004004A0914104B09142040196A11DB11D7C
:1050D00080933F0490934004A0934104B093420412
:1050E000BF91AF919F918F910F900FBE0F901F9026
:1050F00018950E943C18F8942FEF87EA91E621500A
:1051000080409040E1F700C0000087E090EBDC01B8
:105110008093690490936A04A0936B04B0936C0429
:105120009CE088E10FB6F894A895809360000FBECC
:1051300090936000FFCF0E94DA28811102C00E9484
:10514000B6280E94E52880933D040E94F2288093AF
:10515000670487FB882780F9809385020E94E928ED
:10516000682F70E080E090E00C9418256DEE7EEFE3
:1051700080E090E00E94093260E082E090E00E94CE
:10518000F73160E083E090E00E94F73160E084E076
:1051900090E00E94F73160E085E090E00E94F731F6
:1051A00060E086E090E00E94F7316FEF87E090E0EA
:1051B0000C94F73180E090E00E94F13121E08D3EC7
:1051C0009E4F09F020E0822F089582E090E00C9439
:1051D000E93183E090E00C94E931682F83E090E0BE
:1051E0000C94F73184E090E00C94E931682F84E06E
:1051F00090E00C94F73186E090E00C94E931682F50
:1052000086E090E00C94F73187E090E00C94E9316F
:10521000682F87E090E00C94F7318091450480FF7F
:105220000BC060918B0285E0689FB00111247595D9
:105230006795759567952BC081FF09C060918B02BA
:1052400085E0689FB00111247595679520C082FFA5
:1052500007C060918B0285E0689FB001112417C0E0
:10526000909146049923D1F060918A02961788F7AD
:1052700020918B0285E0289F90011124929FA0012C
:10528000939F500D112470E0CA010E94CF31603805
:10529000710540F46115710539F002C065E070E0F8
:1052A000862F08958FE7089581E008958091450441
:1052B00080FF08C06091890270E0759567957595CB
:1052C000679521C081FF06C06091890270E07595E5
:1052D000679519C082FF04C06091890270E010C018
:1052E000909146049923C1F0609188029617A0F727
:1052F00080918902899FC001112470E00E94CF3102
:105300006038710528F46115710521F0862F089524
:105310008FE7089581E0089561E070E0F4CF803F69
:1053200021F40E940D29819504C0813F29F40E9437
:105330000D29809349040895823F21F40E940D298C
:10534000819504C0833F29F40E940D29809348046D
:105350000895893F19F40E94562905C08A3F31F407
:105360000E945629819580934A0408958B3F21F429
:105370000E945629819504C08C3F29F40E94562929
:1053800080934B040895843F21F480914704816009
:1053900017C0853F21F480914704826011C0863F89
:1053A00021F48091470484600BC0873F21F48091F1
:1053B0004704886005C0883F31F4809147048061CC
:1053C0008093470408958D3F21F4809145048160C6
:1053D0000BC08E3F21F480914504826005C08F3F51
:1053E00029F4809145048460809345040895803FAA
:1053F00039F48091490487FF6CC01092490469C058
:10540000813F29F4809149041816BCF362C0909141
:105410004804823F29F497FF5CC01092480459C0A9
:10542000833F19F41916CCF354C0893F41F480919D
:105430004A0418160CF04DC010924A044AC08A3F24
:1054400029F480914A0487FF44C0F6CF8B3F39F49A
:1054500080914B0487FF3DC010924B043AC08C3FB3
:1054600029F480914B041816BCF333C0843F21F417
:10547000809147048E7F17C0853F21F480914704B7
:105480008D7F11C0863F21F4809147048B7F0BC034
:10549000873F21F480914704877F05C0883F31F41E
:1054A000809147048F7E8093470413C08D3F21F481
:1054B000809145048E7F0BC08E3F21F4809145047E
:1054C0008D7F05C08F3F29F4809145048B7F8093A9
:1054D00045048091480481110EC0809149048111D6
:1054E0000AC080914A04811106C080914B04811149
:1054F00002C010924604089587E494E00E94561B6F
:105500000E941E28909344048093430408951F939F
:10551000CF93DF9380914304909144040E942A2802
:10552000AC0190914604992321F020918C0230E047
:1055300006C020918D028AE0289F90011124421715
:10554000530708F486C080914804C0914904D09163
:105550004A0410914B04811107C0C11176C0D111CA
:1055600074C0111172C075C09F3F19F09F5F909376
:105570004604181624F40E940D2980934804809153
:10558000480487FF05C00E940D2981958093480437
:105590001C1624F40E940D2980934904809149042B
:1055A00087FF05C00E940D29819580934904609171
:1055B0004804662339F1C0914904CC2319F17727B7
:1055C00067FD7095872F972F0E94F12E23E333E319
:1055D00043E35FE30E9401300E94BE2E60934804C3
:1055E0006C2F772767FD7095872F972F0E94F12EDC
:1055F00023E333E343E35FE30E9401300E94BE2EC6
:10560000609349041D1624F40E94562980934A048D
:1056100080914A0487FF05C00E9456298195809396
:105620004A04111624F40E94562980934B04809159
:105630004B0487FF05C00E945629819580934B0437
:10564000DF91CF911F910C947C2A9F3F09F08ECF60
:1056500096CFDF91CF911F910895E7E4F4E085E0C4
:10566000DF011D928A95E9F71092460410924504D5
:105670000895833081F128F4813059F08230D1F0DF
:105680000895853009F449C0B8F1863009F456C050
:10569000089580918D02262F30E0280F311D2F3F75
:1056A000310524F4680F60938D0208958FEF809385
:1056B0008D02089580918C02262F30E0280F311D35
:1056C0002F3F310524F4680F60938C0208958FEF0B
:1056D00080938C02089580918B02262F30E0280F52
:1056E000311D2F3F310524F4680F60938B0208951C
:1056F0008FEF80938B02089580918A02262F30E0ED
:10570000280F311D2F3F310524F4680F60938A0262
:1057100008958FEF80938A02089580918902262F41
:1057200030E0280F311D2F3F310524F4680F6093BE
:10573000890208958FEF80938902089580918802ED
:10574000262F30E0280F311D2F3F310524F4680F3C
:105750006093880208958FEF8093880208958330C4
:1057600011F128F4813049F0823091F008958530AC
:1057700081F120F18630C1F1089580918D02681782
:1057800020F4861B80938D02089510928D02089557
:1057900080918C02681720F4861B80938C020895F8
:1057A00010928C02089580918B02681720F4861B5A
:1057B00080938B02089510928B02089580918A0243
:1057C000681720F4861B80938A02089510928A023B
:1057D000089580918902681720F4861B80938902BE
:1057E000089510928902089580918802681720F424
:1057F000861B8093880208951092880208950F9363
:105800001F93873208F048C08E3108F094C0803171
:1058100009F47EC008F5873009F468C068F4863062
:1058200009F0A4C080913D04817F8E7F80933D0468
:1058300081E080934D049BC08B3009F490C08E3082
:1058400009F094C080913D0482FB222720F991E069
:10585000922790FB82F965C0863109F480C060F41C
:10586000813109F083C00E945C219091850281E022
:1058700089278093850273C0893109F470C08B3108
:1058800009F074C080913D0481FB222720F991E04A
:10589000922790FB81F945C0883309F460C050F429
:1058A000893209F45EC0853309F45BC0873209F49C
:1058B00058C05CC0833409F454C028F48A3308F417
:1058C00055C0895339C0883409F050C00E945C210A
:1058D0000E946C060FEF13ED20E3015010402040B2
:1058E000E1F700C000000E94792839C090913D0482
:1058F000892F8095817080FB90F929F096609860DF
:1059000090933D0434C0997F977F90933D0427C0C6
:1059100080913D0483FB222720F991E0922790FBA0
:1059200083F980933D049923D1F080913D048160F7
:1059300080933D0414C08D5141E050E060E070E080
:105940008A019B0104C0000F111F221F331F8A957B
:10595000D2F7C901B8010E9418250E945C2181E09C
:1059600006C061E070E080E090E0F5CF80E01F913C
:105970000F91089580E0089580E00895CF93C82F97
:1059800080914D04813069F018F08230C9F184C0F3
:10599000E0918602F09187028081823209F07EC018
:1059A00007C0E0918602F09187028081823261F423
:1059B0008C2F0E94BA2C811104C08C2F0E94FF2BC7
:1059C0001DC081E090E01AC08C2F0E94BC2C811178
:1059D00014C0C43179F048F4CB3079F0C03109F00B
:1059E00061C082E080934D0408C0C93219F0C83309
:1059F00021F058C010924D0455C081E0817054C010
:105A0000C93291F120F5C43179F1B0F4C73009F011
:105A100047C08EE180938D0282E380938C028AE0FE
:105A200080938B0284E180938A0288E080938902CC
:105A300088E28093880234C0CE51C63088F5EC2FBE
:105A4000F0E0E85AFC4F808180934C0429C0CE34AA
:105A5000E9F020F4CB3421F56AE013C0C13579F0C8
:105A6000C235F1F461E00DC080914C04882319F037
:105A700010924C0415C081E080934D0415C061E084
:105A800006C080914C040E94392B0AC06AE08091C4
:105A90004C040E94AF2B04C010924D0480E004C05F
:105AA00081E002C080E0AACFCF9108950E94DA2859
:105AB000811102C00E94B6280E94FB2880936804CE
:105AC00080FF02C0869501C080E00C943005809173
:105AD0006804982F9695292F30E0233031054CF437
:105AE0009F5F990F8170892B8160809368040E9469
:105AF000FF288091680486950C9430058091680495
:105B0000982F969591F09158990F8170892B8093D9
:105B100068048E7F91E009F490E08091680490FB26
:105B200080F9809368040E94FF288091680486951C
:105B30000C94300580916804982F909590FB80F923
:105B4000809368040E94FF288091680480FF02C04F
:105B5000869501C080E00C94300590916804892FEF
:105B600086958F5F8F779170843028F4880F892B0A
:105B70008093680402C090936804809168048E7FCB
:105B800091E009F490E08091680490FB80F98093A3
:105B900068040E94FF288091680486950C94300563
:105BA00020916804922F96958927982F990F822F1C
:105BB0008170892B809368048E7F91E009F490E0D6
:105BC0008091680490FB80F9809368040E94FF280C
:105BD0008091680486950C9430055058BB27AA27FD
:105BE0000ED0D1C1C2D130F0C7D120F031F49F3FE7
:105BF00011F41EF4B7C10EF4E095E7FB9FC1E92F45
:105C0000D3D180F3BA17620773078407950718F09A
:105C100071F49EF5EBC10EF4E0950B2EBA2FA02D7A
:105C20000B01B90190010C01CA01A0011124FF2749
:105C3000591B99F0593F50F4503E68F11A16F04044
:105C4000A22F232F342F4427585FF3CF4695379543
:105C50002795A795F0405395C9F77EF41F16BA0B08
:105C6000620B730B840BBAF09150A1F0FF0FBB1FB6
:105C7000661F771F881FC2F70EC0BA0F621F731FFF
:105C8000841F48F4879577956795B795F7959E3F5C
:105C900008F0B3CF9395880F08F09927EE0F9795EA
:105CA0008795089527D108F481E008950CD06BC141
:105CB00063D140F05AD130F021F45F3F19F03EC17A
:105CC000511195C14FC170D198F39923C9F3552350
:105CD000B1F3951B550BBB27AA27621773078407DF
:105CE00038F09F5F5F4F220F331F441FAA1FA9F395
:105CF00033D00E2E3AF0E0E830D091505040E69587
:105D0000001CCAF729D0FE2F27D0660F771F881FE7
:105D1000BB1F261737074807AB07B0E809F0BB0BD6
:105D2000802DBF01FF2793585F4F2AF09E3F5105FA
:105D300068F004C15CC15F3FECF3983EDCF38695EC
:105D400077956795B795F7959F5FC9F7880F911D70
:105D50009695879597F90895E1E0660F771F881F5C
:105D6000BB1F621773078407BA0720F0621B730B0F
:105D7000840BBA0BEE1F88F7E095089504D0689461
:105D8000B11135C1089518D188F09F5790F0B92FFF
:105D90009927B751A0F0D1F0660F771F881F991F80
:105DA0001AF0BA95C9F712C0B13081F01FD1B1E035
:105DB00008951CC1672F782F8827B85F39F0B93F45
:105DC000CCF3869577956795B395D9F73EF4909582
:105DD0008095709561957F4F8F4F9F4F0895E89400
:105DE00009C097FB3EF490958095709561957F4F23
:105DF0008F4F9F4F9923A9F0F92F96E9BB279395D1
:105E0000F695879577956795B795F111F8CFFAF4E0
:105E1000BB0F11F460FF1BC06F5F7F4F8F4F9F4F11
:105E200016C0882311F096E911C0772321F09EE86F
:105E3000872F762F05C0662371F096E8862F70E0D5
:105E400060E02AF09A95660F771F881FDAF7880FAF
:105E50009695879597F9089588D018F011F08CD011
:105E600038F480C0C4C0E92F9FD0B0F35523C9F3E4
:105E7000E7FB6217730784079507A8F199F3E92FE9
:105E8000FF2788232AF03197660F771F881FDAF7DC
:105E9000952F5527442332F091505040220F331F45
:105EA000441FD2F7BB27E91BF50B621B730B840B56
:105EB000B109C1F222F4620F731F841FB11D319723
:105EC0002AF0660F771F881FBB1FEFCF91505040FD
:105ED0005AF041F0882332F0660F771F881F9150E7
:105EE0005040C1F7939530C08695779567959F5F31
:105EF000D9F7F8CF990F0008550FAA0BE0E8FEEF8D
:105F000016161706E807F907C0F012161306E4077D
:105F1000F50798F0621B730B840B950B39F40A2676
:105F200061F0232B242B252B21F408950A2609F454
:105F3000A140A6958FEF811D811D089597F99F6758
:105F400080E870E060E008959F3F31F0915020F4C8
:105F5000879577956795B795880F911D9695879545
:105F600097F908959FEF80EC089500240A9416167F
:105F7000170618060906089500240A941216130637
:105F8000140605060895092E0394000C11F48823C5
:105F900052F0BB0F40F4BF2B11F460FF04C06F5FE1
:105FA0007F4F8F4F9F4F089557FD9058440F551FB7
:105FB00059F05F3F71F04795880F97FB991F61F08B
:105FC0009F3F79F087950895121613061406551F02
:105FD000F2CF4695F1DF08C0161617061806991F6E
:105FE000F1CF86957105610508940895E894BB2763
:105FF00066277727CB0197F908957CDF08F48FEFA8
:1060000008950BD0C0CFB1DF28F0B6DF18F095238C
:1060100009F094CFA7CF1124EACFC6DFA0F3959F54
:10602000D1F3950F50E0551F629FF001729FBB277F
:10603000F00DB11D639FAA27F00DB11DAA1F649F2B
:106040006627B00DA11D661F829F2227B00DA11DDE
:10605000621F739FB00DA11D621F839FA00D611D64
:10606000221F749F3327A00D611D231F849F600D85
:10607000211D822F762F6A2F11249F5750408AF0BE
:10608000E1F088234AF0EE0FFF1FBB1F661F771F4A
:10609000881F91505040A9F79E3F510570F04ECF98
:1060A000A6CF5F3FECF3983EDCF386957795679536
:1060B000B795F795E7959F5FC1F7FE2B880F911D68
:1060C0009695879597F90895FA01EE0FFF1F309680
:1060D0002105310599F16115710561F48038BFE33F
:1060E0009B0749F168949038810561F08038BFEFD3
:1060F0009B0741F0992342F5FF3FE105310521055A
:1061000011F1E8940894E795D901AA2329F4AB2F5B
:10611000BE2FF85FD0F310C0FF5F70F4A695E0F7D4
:10612000F73950F019F0FF3A38F49F779F930CD06D
:106130000F9007FC905808953EF014CF60E070E097
:1061400080E89FE308954FE79F775F934F933F93D6
:106150002F939ED02F913F914F915F9152DF05C0B9
:1061600019F40EF0EBCE42CFFDCE26DFC8F3963801
:10617000C0F707F80F92E8942BE33AEA48EB5FE7A1
:106180004EDF0F920F920F924DB75EB70F92C0D0B5
:10619000ECEFF0E016D04F915F91EF91FF91E59514
:1061A000EE1FFF1F49F0FE57E0684427EE0F441F23
:1061B000FA95E1F74195550B32D00F9007FE26C0B6
:1061C0000895DF93CF931F930F93FF92EF92DF9287
:1061D0007B018C01689405C0DA2EEF011EDFFE0101
:1061E000E894A5912591359145915591AEF3EF0134
:1061F00006DDFE019701A801DA9479F7DF90EF90B0
:10620000FF900F911F91CF91DF9108959B01AC01F9
:1062100060E070E080E89FE349CD90CE95CECCDE83
:10622000E8F39923D9F3940F511DBBF391505040DB
:1062300094F059F0882332F0660F771F881F915031
:106240005040C1F79E3F510544F7880F911D969528
:10625000879597F908955F3FACF0983E9CF0BB2777
:10626000869577956795B79508F4B1609395C1F7D2
:10627000BB0F58F711F460FFE8CF6F5F7F4F8F4F70
:106280009F4FE3CFB4CE0EF05FCE6CCE689456CE67
:1062900093DEC8F39923D1F3C6F3DF93CF931F9313
:1062A0000F93FF92C92FDD2788232AF02197660FCD
:1062B000771F881FDAF720E030E040E85FEB9FE3CC
:1062C000883920F0803E30F021968F7787DCE4E239
:1062D000F1E003C083DCE1E5F1E073DF8B01BE0197
:1062E000EC01FB2E6F5771097595771F880B990B81
:1062F00078DD28E132E741E35FE38FDEAF2D9801DF
:10630000AE01FF900F911F91CF91DF9178DC3BCED2
:10631000FA01DC01AA0FBB1F9B01AC01BF5728F497
:1063200022273327442750781FC0B75188F4AB2F5A
:106330000024469537952795011CA395D2F300209C
:1063400069F0220F331F441FB395DAF30DD045CC0B
:1063500061307105A0E88A07B94630F49B01AC01B1
:106360006627772788279078309621F0208331831D
:10637000428353830895AA1BBB1B51E107C0AA1F88
:10638000BB1FA617B70710F0A61BB70B881F991FD6
:106390005A95A9F780959095BC01CD01089597FB7A
:1063A000072E16F4009407D077FD09D00E94BB3168
:1063B00007FC05D03EF4909581959F4F0895709508
:1063C00061957F4F0895EE0FFF1F0590F491E02D2A
:1063D0000994F999FECF92BD81BDF89A992780B5AD
:1063E0000895A8E1B0E042E050E00C941132262F6D
:1063F000F999FECF92BD81BDF89A019700B40216BB
:1064000039F01FBA20BD0FB6F894FA9AF99A0FBE68
:1064100008950196272F0E94F8310C94F731DC0182
:10642000CB01FC01F999FECF06C0F2BDE1BDF89A9F
:10643000319600B40D9241505040B8F70895F89449
:02644000FFCF8C
:106442000C52D02445000000410000DC4400000052
:106452004152D0A4440000404100005C44000000CE
:106462004148F17644000000415C978A44000000F4
:10647200411FD592440000004152D0A444000000C4
:10648200415CFFB844000000410AA7CF440000006D
:10649200410000DC44000000410AA7CF4400000094
:1064A200410000DC440000004100000000000080C8
:1064B2004000005C450000404100000000000080F8
:1064C2004052D02445000040410AA7CF44000000BA
:1064D200410000DC44000000410000000000008098
:1064E2004052D024450000404100000000000080DE
:1064F2004000005C45000040410AA7CF4400000074
:10650200410000DC44000000410000000000008067
:106512004052D024450000404100000000000080AD
:10652200400AA74F45000040410AA7CF440000009F
:10653200410000DC44000000410000000000008037
:106542004052D024450000004100000000000080BD
:10655200405CFF3845000000410000000000008060
:106562004052D02445000000410AA7CF4400000059
:10657200410000DC440000004100000000000080F7
:106582004052D024450000804153D02445000040B1
:106592004160970A450000004154D0A44400000025
:1065A200410000DC440000004160970A450000A061
:1065B20041050000003F0000C8424314D114AE144C
:1065C2007A14461401012A042808140A321E000013
:1065D200020004000500070009000B000C000E0079
:1065E2001000110013001500170018001A001C00FB
:1065F2001D001F002100230024002600280029007E
:106602002B002D002F0030003200340035003700FF
:1066120039003B0040004500250026006100600073
:1066220020003700640065006600670044004600F1
:10663200240047003149803F5D8B803FF8BF803F97
:10664200CAE1803F73ED803FCAE1803FF8BF803FDF
:106652005D8B803F3149803F0000803FF16D7F3F7D
:1066620075EA7E3F4C827E3F833F7E3F84287E3F99
:10667200833F7E3F4C827E3F75EA7E3FF16D7F3FD6
:106682000000803F3F4D363975092809F208B908E4
:106692004C0865087E0897080102030405060708EE
:0266A2000900ED
:00000001FF

@ -0,0 +1,1897 @@
:020000020000FC
:047000000C948D3E21
:047028000C94B73DD0
:10702F0012010002FF010020EB03F42F0000010208
:10703F00030109021200010100803209040000005F
:10704F00000000000C03410054004D0045004C00AF
:10705F001603410054006D00330032005500340018
:10706F004400460055000C0331002E0030002E0066
:10707F0030000403090416010C0100000C0000018C
:02708F006C7F14
:1070920012BD01BDF89A00B5089501E00895F9996D
:1070A200FECF12BD01BD20BDFA9AF99AF6CFF99929
:1070B200FECF0C944938F80104910895F8013491F7
:1070C20031962491890108950091610000930C0189
:1070D20000E80093610001E00093610005BF02E057
:1070E20005BF0C9486380091D70001600093D70049
:1070F200A89507EF04BF0091600000610093600053
:1071020000E00093600001E008950E94AA3D0E9401
:10711200B53DFDCF0CD00F7708D0006806D00061D6
:1071220004D0016028D0789408950093D80000918B
:10713200D8000895FCDF00621ED04CD009B500FFD4
:10714200FDCFF5DF0F7D17D00091E0000E7F009399
:10715200E0000091E000077F0093E0000091E20070
:1071620001600093E2000091E20008600093E200F7
:1071720078940C94743B0093D800089500910D010B
:10718200002359F40091D90000FF07C0D0DF006846
:10719200F2DF01E000930D01CDDFE0E2F2E00081D9
:1071A200018100FF0DC0008111811E7F11830083C8
:1071B20001E00093EA0000E00093EA0000931E025F
:1071C20000E00093E9000091E80003FF02C00E9482
:1071D200F23B0895A89539D000E40093600000E0E6
:1071E200009381000093800010E0009385000093DB
:1071F200840001E006BB00918100036000938100DE
:107202000091600007FFFCCF00E80093600010933C
:107212008100A89507EF04BF18D010936000209159
:1072220084003091850010938100109380001093A8
:1072320085001093840001E006BB2D3D354010F01F
:1072420002E101C002E009BD089500916000006101
:107252000093600008950E94AD3E239741D100E063
:1072620000930901B5D104811581012B51F437D165
:1072720000910701002309F4B9C000E0009307015F
:10728200B5C058D102FFFDCF37D1068335D1009367
:107292000F0132D1009310012FD1009311012CD193
:1072A2000093120129D10093130102852091130149
:1072B20030911201409111015091100116811A95DD
:1072C20041F01250A9F01A9599F11A9509F473C078
:1072D2008BC010910F01113011F411E001C010E0C8
:1072E200138799D00C3F11F414D17FC077D17DC0A0
:1072F20092D010910F01112329F01A9549F01A9595
:10730200A9F073C010E013870C3F09F06EC0ECCFF8
:1073120056D103C04CD109F468C00D911C9144D1DF
:107322000F3FC1F305E0009309015FC011E0EBCF0D
:10733200D2D029F00250E1F10A9541F056C0FDD0B9
:107342000E94A33F0FEF00930A014FC0552319F08B
:107352005A9579F04AC04ED00DEF04BF74D0EAD0EE
:1073620003FFFDCF67D051D04AD008E00093600000
:10737200FFCF40D068D0DED003FFFDCF5BD03FD03F
:1073820044D00FEF1FE004C009811A810150104060
:1073920009831A8309811A81012BB1F700E800934E
:1073A200610000910C01009361000C940000FFCF7A
:1073B20001E003871AC08FD019F00A9539F015C081
:1073C200535098F4BAD002E000870FC0505339F0FE
:1073D2005A9541F05F52B1F35A95A1F306C002E00B
:1073E2000883F0CF01E0FCCFA8D079D02396E4E067
:1073F2000C94BA3E01E005BF00E005BF089500917C
:10740200D8000F770093D800089509B50D7F09BD04
:1074120000E009BD08955183408333832283109194
:10742200E8001B7F1093E8001091E8001F7710938B
:10743200E80008955DD053D0F8940091E000016017
:107442000093E000089579D04AC0219749D0009175
:107452000601035019F00250B9F00BC03CD021F0E4
:107462000A9559F00A9529F400910A010C3F19F482
:1074720050D02196089567D0FCCF0091010100936E
:10748200F100009100010AC01091100124D019F0FE
:107492000A9549F0EECF135018F400E00093F10082
:1074A2001ED044D0E6CF105339F01A9539F01F524E
:1074B20041F01A9541F0F4CF08E5F0CF00E006D094
:1074C200EDCF02E0FCCF04E001D0E8CF10E020E0F5
:1074D20030E00C94113F00910F010023089521C068
:1074E2000BD008D007D00093040106D00093050109
:1074F20021D00BC000D008830091F10008950091C3
:10750200EB0000620093EB0015D0077F0093E800C8
:107512000895F5DF02E00093080103E000930901FA
:10752200089559D007D000FFFDCF089503D002FF80
:10753200FDCF03C00091E8000895FCDF0B7FE6DF7A
:10754200F9DF0F77E3CF0E94AC3E42D038D006C0BD
:107552002BD00093F1002BD059F43DD0082F092BEA
:10756200A9F0E8DF02FD12C0E5DF00FFFDCF4424F1
:10757200042D4394003289F300910B0100230D91F5
:107582001C9131F311970E945838E3CFD3DF00FFEB
:10759200FDCF21D0CFDF00FFFDCFCCDF02FFFDCF3B
:1075A200CCDFE5E00C94B93E11970C945C380D9158
:1075B2001C910F5F1F4F1C930E93019708958281B8
:1075C200938100811181801B910B0196DF01089547
:1075D200E0E0F1E00895AEDF0E7F98CF0E94A93E71
:1075E200F7DF80819181A081B181AF710481158122
:1075F20000521040048315830AC000910B0100233E
:1076020031F4A301920103E911E00E943B3F47D00C
:10761200B8F1662477242C0111C06EDFF301ED5618
:10762200FE4F008301E0600E00E0701E01960091A3
:10763200F200002311F033D0B8F47FDF30D0E8F24B
:10764200F301B096E238F040C0F674DF02FFFDCFDE
:107652000091F200BDDF24813581201B304024835C
:107662003583E5CF49DFAA95AA23E1F700910B0103
:10767200013099F62091F1008C010E945038D6CF4A
:1076820004811581012B21F055DF02FFFDCF55DF6B
:10769200A2DF50DF00FFFDCFE8E00C94B63EE0E051
:1076A200F1E0028113810817190708952091EB0078
:1076B20021602093EB000093EC000091ED0002703A
:1076C200012B0093ED000091ED0002600093ED00AC
:1076D2001091EE00012F000F00E0001F0895412FCE
:1076E2000093E900089500E009D000FD05C000E024
:1076F200F7DF10E202E0DACF00E00895F1DF009157
:10770200EB0008950F770132A9F5112369F11A955B
:1077120059F01A9561F01A9569F01A95F9F01A95CF
:10772200C1F01A95D9F024C00E942C3920C00E94C1
:10773200263A1DC029D00091090123D001E01FD0B3
:1077420020D0009108011BD00E94923A0E94973AE1
:107752000EC01AD00091080114D007C002E00093B5
:10776200080100E0009309010FD00E94923A03C081
:107772000E94803A02C001E0089500E0089501D01D
:1077820000E00093F10008950091E800077F009364
:10779200E800089508950350F9F4112339F01A9579
:1077A20051F01A9581F01A9599F016C004E016D09E
:1077B20001E810E703C011D003E510E7E7E1F2E0CA
:1077C20000831183D8CF06E109D00FE510E7F6CF89
:1077D20004D005E710E7F2CFD0CF0CE000931A02F5
:1077E200089527D120D100931D02E1D0212F11232A
:1077F20029F12A95E9F02250F1F0225099F02A95C8
:1078020049F0225061F02A9581F02A95E1F02A95FB
:10781200E9F023C0003809F44FC00C94833B0038D0
:10782200E1F7C8C00023C9F71EC00023B1F72DC07D
:10783200033098F744C1033080F70BC1003868F376
:10784200033858F7C9C0013841F77BC1013051F400
:10785200FCD0BFD000FD06C0FCCF0E94833B0023BA
:1078620009F41ED008951091E3001078DCD00F7750
:10787200012B0093E300E9D0ACD000FFFDCF0091D3
:10788200E30000680093E300089591D0123040F4C1
:107892000FD010931E02DAD000911E020C94CB3B43
:1078A2000091EB0001D004C000620093EB00089548
:1078B2000091E800077FC0C0BA93AA93229700E024
:1078C2000093190274D0AFD0202F2A9519F02A956F
:1078D200E9F022C002E100931A020FE210E7E7E1A9
:1078E200F2E0008311839DD008839DD00983E0DFFD
:1078F20000911A0210E02881398102171307A8F4B7
:107902000F7181F401E00093190211C002E10093AA
:107912001A0201E410E7E3CF0E94CC3B002319F7DF
:107922008ED040C01093190202C020931A027ED05A
:10793200A7E1B2E001C08AD000911A02002309F146
:1079420048D004FD1EC045D000FD03C042D004FF54
:10795200FACF10E0012F1395003281F0ED91FC91E6
:107962001197049133D02D913C912F5F3F4F3C935F
:107972002E93FD0103810A95038361F72AD004FF48
:10798200DACF00911902013039F423D004FD04C08A
:1079920020D000FFFDCF5AD01CD004FFFDCF46D02F
:1079A20018D00B7F49D02296A991B99108951091D0
:1079B200F10008957DDF00911E0208D047D009D062
:1079C2000F773AD006D002FFFDCFBFC00093F1007F
:1079D20008950091E800089524D010911D021058D6
:1079E20029F01A9589F01A9591F019C061DF00917A
:1079F2001C02ECDF00E0EADF29D0EBDF02FFFDCF63
:107A020018D0E7DF0F770CC053DF00E0F2CF51D080
:107A12000F7710E0F801E55EFD4F0081EACF0FD04D
:107A22000BC001D000D00091F1000895D2DF0F7E8B
:107A320003C00091E8000B7F0093E80008950091D5
:107A4200EB0032DFC6DF077F089532DFC2DF0E7F31
:107A5200F3CF00911D02002329F00A9509F10A953E
:107A620031F01EC0E0DF0A9561D0D9F41AC061D0AE
:107A7200B9F4D9DF0F7711F416D01BD00093E900C7
:107A82001091EB0010FF0BC00ED010E01093E90034
:107A920021E0F801E55EFD4F20834FD003C042D0C4
:107AA20045D0CFDFC9CF1091EB0010621093EB00ED
:107AB20008951091E800177F1093E800089500914F
:107AC2001D02002311F4AFDF02C0013011F4B7DF51
:107AD200B3CF023031F52DD019F52091F1002F7777
:107AE2002093E90023D000FF19C081F01FD000616C
:107AF200DCDE01E010E0422F0E949F3E0093EA008C
:107B020000E00093EA0012D00860CFDE0BD030E034
:107B1200F901E55EFD4F008310D0DACF03D0D7CF55
:107B2200BFDE089500E00093E90008950091EB00A4
:107B3200089579DF3CDF00230895BADE4ADF0E7F25
:107B4200089583DF46DF02FFFDCF73DF42DF0F7749
:107B520073CF0091D70001600093D7000E948B3849
:107B620000E000931F0208950C94BF388A93FA93A1
:107B7200EA933A922A921A920A927A936A935A93BF
:107B82004A933A932A931A930A938FB70091DA0091
:107B920000FF24C00091D80000FF20C00EEF009328
:107BA200DA000091D90000FF11C001E000930D013D
:107BB200ABD0026096D09AD00860A2D00E949B38C7
:107BC2000091E0000E7F0093E00008C000E0009307
:107BD2000D0100931E0298D0046083D07FD002FF73
:107BE20005C084D002FF02C00BEF75D077D000FF32
:107BF2001BC07CD000FF18C001E000930E016AD0C8
:107C020083D000626ED00EEF6FD0006179D06ED05B
:107C12000F7D76D00091D80000620093D80009B59C
:107C22000D7F09BD00E009BD59D004FF20C05ED020
:107C320004FF1DC009B500FD05C00E94EB3809B55F
:107C420000FFFDCF0091D8000F7D0093D80042D0F5
:107C520000910E01002359F04CD00FEE45D00F7E5B
:107C620052D000643ED042D001604AD042D036D0D9
:107C720005FF0FC03BD005FF0CC000E000930E01D2
:107C820035D00F7E3DD00FED2FD00F7D3CD0006858
:107C920028D024D003FF0DC029D003FF0AC000E082
:107CA20000931F0207EF17D00E94743B2DD0116082
:107CB20018D08FBF09911991299139914991599100
:107CC200699179910990199029903990E991F991E6
:107CD200899118950FEE0093E10008950091E1005B
:107CE20008951183008308950093E1000091E2005A
:107CF20008950091E200006203D00091E200086062
:107D02000093E2000895FCDFE0E2F2E000811181DD
:107D1200089500008895FECF01E60DBF02E00EBF78
:107D2200C2EED2E00E947438002311F00E94D33ECA
:107D32000E9465380E948A3E0C948A3E4A951AF047
:107D4200000F111FFBCF0895BA92AA929A928A92BB
:107D52007A926A925A924A92BA93AA939A938A937D
:107D62000895BB84AA84998488847F806E805D8014
:107D72004C80BB81AA8199818881F0E00FB6F8948A
:107D8200CE0FDF1F0FBE089520E006D0E9F7089559
:107D9200259102D0E9F708952D9301501040202F2C
:107DA200212B089585E890E7FC0105911491FC01CF
:107DB2003296A591B491FC01349625913491422FCB
:107DC200432B19F0F901E4DF01C0DEDF069610E76C
:107DD2008139910748F308952F930CD02F9101D048
:107DE20008953CD0F12FE02F45E047BFE89536D00B
:107DF20012D0089533D0F12FE02F43E047BFE8952A
:107E02002DD008952BD0F12FE02F43E047BFE89506
:107E120025D001D0089522D041E147BFE8951EC088
:107E22001DD0F12FE02F41E247BFC895002D16C0AB
:107E320015D0F12FE02F49E047BFC895002D0EC0A5
:107E4200F32FE22F012E102E41E047BFE89506C026
:107E520005D0002E29E027BFE89500C0022E27B7E3
:107E620020FDFCCF202D0895022E27B726FDFCCF42
:107E7200202D08950E94A53E22974801C901DA01EA
:107E820010C05BD001E0A00E00E0B01E00E4A0161E
:107E920000E0B00608F440C0830120E030E00E9418
:107EA200F23E0A2F0B2B09F440C0082F0F7710E087
:107EB2002C01401A510A320100E4A02E03C00A2FFD
:107EC2000B2BE1F04816590680F0F40101914F01A5
:107ED2000983119729F001914F010883119711C06D
:107EE200F2013196049108830CC0F20104910983D6
:107EF2003196E817F907A1F7F401EDCF1BD00883FB
:107F020019839201088119810E94213F16D0AA94F7
:107F1200B1F62301AA24BB240DD0312F0F3F3F4FCE
:107F220009F4AFCF83011DD0B7CF01E02296ECE078
:107F32000C94B23E82010C945F3802E0400E00E0E5
:107F4200501E08959A938A9380E090E08C0109D0A4
:107F520080589F4F8F3F0FE69007C0F38991999108
:107F6200089520E030E00C94FB3E00000000000089
:067F720000000000FC000D
:107FE4000C94ED3E0C94113F0C94193F0C94213FDA
:0C7FF4000C94F23E0C94033F0C94293FC7
:040000030000700089
:100000000C94DA040C941E050C941E050C941E0529
:100010000C941E050C941E050C941E050C941E05D4
:100020000C941E050C941E050C94B7180C94891999
:100030000C94EC270C941E050C941E050C941E05C4
:100040000C941E050C941E050C941E050C941E05A4
:100050000C941E050C9454280C941E050C941E053B
:100060000C941E050C941E050C941E050C941E0584
:100070000C941E050C941E050C941E050C941E0574
:100080000C94AD0E0C941E050C941E050C941E05CC
:100090000C941E050C941E050C941E050C941E0554
:1000A0000C941E050C941E050C941E0579058905FB
:1000B0009B05AB05B105C005CC05D205E005E905FA
:1000C000FA050A0610064006F619181A061B181A31
:1000D000061B5D1A801A061BD51AE81AEB1DEB1DCC
:1000E000281E281E821EC01E38213821D91E382104
:1000F000DA1FDA1F9D20B4203821232107634236FE
:10010000B79BD8A71A39685618AEBAAB558C1D3CA8
:10011000B7CC5763BD6DEDFD753EF6177231BF006C
:100120000000803F08000000BE922449123EABAAA6
:10013000AA2ABECDCCCC4C3E00000080BEABAAAA01
:10014000AA3E00000000BF000000803F0000000049
:1001500000084178D3BB4387D1133D190E3CC3BD82
:100160004282AD2B3E68EC8276BED98FE1A93E4C2F
:1001700080EFFFBE01C4FF7F3F00000000002B00A6
:1001800014001A000800150017001C0018000C00CD
:10019000120013002A0029000400160007000900BD
:1001A0000A000B000D000E000F0033003400E100C8
:1001B0001D001B000600190005001100100036008C
:1001C0003700380028000530E000E200E30003308B
:1001D0002C002C0004305000510052004F002B0026
:1001E00014001A00090013000A000D000F00180087
:1001F0001C0033002A002900040015001600170017
:1002000007000B00110008000C0012003400E10090
:100210001D001B000600190005000E00100036002E
:100220003700380028000530E000E200E30003302A
:100230002C002C0004305000510052004F002B00C5
:1002400034003600370013001C0009000A000600C5
:1002500015000F002A0029000400120008001800F1
:100260000C0007000B001700110016003800E10019
:10027000330014000D000E001B00050010001A00D2
:1002800019001D0028000530E000E200E300033003
:100290002C002C0004305000510052004F00350259
:1002A0001E021F0220022102220223022402250232
:1002B000260227022A004C003A003B003C003D0089
:1002C0003E003F002D022E022F02300231020100BB
:1002D000400041004200430044004500010001008D
:1002E0000100010001000100010001000100010006
:1002F000010001000100AB00AA00A900AE0035001A
:100300001E001F00200021002200230024002500E1
:10031000260027002A004C003A003B003C003D002C
:100320003E003F002D002E002F0030003100010064
:10033000400041004200430044004500010001002C
:1003400001000100010001000100010001000100A5
:10035000010001000100AB00AA00A900AE000000EE
:10036000000000000000000000000000000000008D
:10037000000000000000000000000000000000007D
:10038000000000000000000000000000000000006D
:10039000000000000000000000000000000000005D
:1003A000000000000000000000000000000003301A
:1003B00000000000043000000000000000001E00EB
:1003C0001E001E001E001E001E001E001E001E003D
:1003D0001E001E001E00000014001A000800150078
:1003E00017001C0018000C00120013002F00000062
:1003F00004001600070009000A000B000D000E00A3
:100400000F00330034000D3000000000060019001A
:1004100000000000110010000000000000000000BB
:1004200000000000000000000000000000000000CC
:1004300000000000000000000000000000000000BC
:1004400000000000000000000000000000000000AC
:10045000000000000000000000000000000000009C
:10046000000000000000000000000000000000008C
:10047000000000000000000000000000000000007C
:10048000000000000000000000000000000000006C
:10049000000000000000000000000000000000005C
:1004A000000000000000000000000000000000004C
:1004B000000000000000000000000000000000003C
:1004C000000000000000000000000000000000002C
:1004D000000000000000000000000000000000001C
:1004E000000000000000000000000000000000000C
:1004F00000000000000000000000000000000000FC
:1005000000000000000000000000000000000000EB
:1005100000000000000000000000000000000000DB
:1005200000000000000000000000000000000000CB
:1005300000000000000000000000000000000000BB
:1005400000000000000000000000000000000000AB
:10055000000000000000000000000000000000009B
:10056000000000000000000000000000000000008B
:10057000000000000000000000000000000000007B
:10058000000000000000000000000000000000006B
:10059000000000000000000000000000000000005B
:1005A000000000000000000000000000000000004B
:1005B000000000000000000000000000000000003B
:1005C000000000000000000000000000000000002B
:1005D000000000000000000000000000000000001B
:1005E000000000000000000000000000000000000B
:1005F00000000000000000000000000000000000FB
:1006000000000000000000000000000000000000EA
:1006100000000000000000000000000000000000DA
:1006200000000000000000000000000000000000CA
:1006300000000000000000000000000000000000BA
:1006400000000000000000000000000000000000AA
:10065000000000000000000000000000000000009A
:10066000000000000000000000000000000000008A
:10067000000000000000000000000000000000007A
:10068000000000000000000000000000000000006A
:10069000000000000000000000000000000000005A
:1006A000000000000000000000000000000000004A
:1006B000000000000000000000000000000000003A
:1006C000000000000000000000000000000000002A
:1006D000000000000000000000000000000000001A
:1006E000000000000000000000000000000000000A
:1006F00000000000000000000000000000000000FA
:1007000000000000000000000000000000000000E9
:1007100000000000000000000000000000000000D9
:1007200000000000000000000000000000000000C9
:1007300000000000000000000000000000000000B9
:1007400000000000000000000000000000000000A9
:100750000000000000000000000000000000000099
:100760000000000000000000000000000000000089
:100770000000000000000000000000000000010078
:100780000050010001000100010001000100010012
:10079000010001004C00010001000100073006309B
:1007A000135012500030013002300C3001000100B3
:1007B0000B300A300930083001000100010001004F
:1007C0000100010001000100010001000100010021
:1007D00001000100010001000100010001002803E7
:1007E000540068006500200050006C0061006E003D
:1007F00063006B0020004B006500790062006F0011
:1008000061007200640000002C034F00720074004D
:1008100068006F006C0069006E0065006100720086
:1008200020004B006500790062006F0061007200DB
:100830006400730000000403090409026D00040150
:1008400000A0FA09040000010301010009211101BF
:100850000001223F000705810308000A0904010086
:100860000103010200092111010001224D000705C9
:10087000820308000A0904020001030000000921A4
:10088000110100012236000705830308000A09044C
:1008900003000103000000092111010001223900B9
:1008A000070584031000011201100100000008ED8B
:1008B000FE606001000102000105010906A10105B9
:1008C0000719E029E7150025019508750181020542
:1008D0000819012905950575019102950175039186
:1008E0000105071900297715002501957875018103
:1008F00002C005010980A101850216010026B7008A
:100900001A01002AB700751095018100C0050C0975
:1009100001A1018503160100269C021A01002A9CF0
:1009200002751095018100C005010902A1010901AC
:10093000A100050919012905150025019505750175
:100940008102950175038101050109300931158185
:10095000257F95027508810609381581257F950147
:1009600075088106050C0A38021581257F950175E9
:10097000088106C0C005010906A101050719E02983
:10098000E71500250195087501810295017508811B
:100990000105081901290595057501910295017553
:1009A0000391010507190029FF150025FF9506751C
:1009B000088100C011241FBECFEFDAE0DEBFCDBF3B
:1009C00004B603FE24C08091690490916A04A0914A
:1009D0006B04B0916C048730904BA740B04BB9F4D6
:1009E0001092690410926A0410926B0410926C04C5
:1009F00014BE84B7877F84BF88E10FB6F8948093D4
:100A00006000109260000FBEE0E0F8E3099513E08B
:100A1000A0E0B1E0E2E4F4E602C005900D92A23657
:100A2000B107D9F714E0A2E6B3E001C01D92A936E0
:100A3000B107E1F70E94FD150C941F320C940000E1
:100A4000279A2F988FEF9FEF9093870080938600CF
:100A50008AE08093800089E1809381000C94562D78
:100A6000282F81110BC080918000877F80938000A8
:100A700010928D0010928C002F9808952F988091DD
:100A80008000886080938000233019F48FEF9FEFFF
:100A90000FC083E090E0821B9109880F991F2FEF10
:100AA0003FEFA90102C0569547958A95E2F7CA0122
:100AB00090938D0080938C000895CF93DF93EC0189
:100AC0000E94ED28BE0180E090E0DF91CF910C9470
:100AD00018250F931F93462F50E04E30510508F014
:100AE000DEC0DC01FA01EA5AFF4F12968C910C9499
:100AF000E331882309F4D3C000E010E0980140E01E
:100B000064E070E089E292E00E942B1281E090E0C4
:100B10000FC0882309F4C3C000E010E0980140E052
:100B200066E070E089EB91E00E942B1282E090E099
:100B30000E945D05B4C0882309F4B1C000E010E054
:100B4000980140E068E070E089EE91E00E942B128D
:100B500084E090E0EDCF882311F083E005C083E0CE
:100B60000CC0882349F084E00E94952540E164E0B0
:100B700083E00E946D0A93C084E00E94B625F6CF00
:100B8000882331F085EE0E947F1C0E94AD2D87C026
:100B900085EE0E94471D83C0882309F480C00E940F
:100BA000BF0D7DC0882309F47AC00E94B80D00E013
:100BB00010E0980140E065E070E089E492E027C031
:100BC000882309F46CC085E00E94B6250E94E00DE0
:100BD00066C0882309F463C000E010E0980140E09B
:100BE00068E070E089E191E00E942B1285E00E94AC
:100BF000952555C0882309F452C00E94BE1200E01A
:100C000010E0980140E068E070E089E191E00E9426
:100C10002B1245C0882309F442C00E94C912EFCFAD
:100C20008823E9F100E010E0980140E066E070E020
:100C300089E891E00E942B1284E00E94B62583E0AF
:100C40000E94B62580E10E94B62585E00E94B62567
:100C50000E94E00D86E00E9495250E94DA2881110D
:100C600002C00E94B6280E94F22890E09093680487
:100C7000809367048068809367040E94F6280FC001
:100C8000882369F000E010E0980140E066E070E041
:100C900089E591E00E942B1286E00E94B62580E053
:100CA00090E01F910F9108950F931F932FEF89EFFD
:100CB00090E0215080409040E1F700C0000000E04B
:100CC00010E0980140E065E070E089E492E00E9465
:100CD0002B121F910F9108950F931F9300E010E0C6
:100CE000980140E063E070E081E091E00E942B1207
:100CF0002FEF82E597E0215080409040E1F700C05F
:100D000000001F910F910895CF92DF92EF92FF9212
:100D10000F931F93CF93DF93CDB7DEB7CC58D10994
:100D20000FB6F894DEBF0FBECDBF2091210425FF82
:100D3000C5C08C01FC01928180910001992309F4C6
:100D400060C096E4EEE8F2E0DE01A95BBF4F0190DF
:100D50000D929A95E1F7F8019081E0916203F0918C
:100D60006303E90FF11DEE0FFF1F27E430E02C0FA6
:100D70003D1FE20FF31F60817181680F711D88278D
:100D800077FD8095982F0E94F12E20E030E040E41E
:100D900051E40E94562E6B017C01F801218184E010
:100DA00090E0821B9109BC01882777FD8095982FE0
:100DB0000E94F12E9B01AC01C701B6010E94EE2DED
:100DC0009B01AC0160E070E080E090E40E94643040
:100DD00020E030E04CE551E40E9401304FE050E06B
:100DE000C457DF4F0FB6F894DEBF0FBECDBFDF9103
:100DF000CF911F910F91FF90EF90DF90CF900C94C7
:100E0000CB1196E4EEE8F2E0DE01119601900D922E
:100E10009A95E1F7F8019081E0916203F091630304
:100E2000E90FF11DEE0FFF1F21E030E02C0F3D1FF9
:100E3000E20FF31F60817181680F711D882777FDB4
:100E40008095982F0E94F12E20E030E040E451E49C
:100E50000E94562E6B017C01F801218184E090E014
:100E6000821B9109BC01882777FD8095982F0E94ED
:100E7000F12E9B01AC01C701B6010E94EE2D9B0132
:100E8000AC0160E070E080E090E40E94643020E01B
:100E900030E04CE551E40E940130C457DF4F0FB6FB
:100EA000F894DEBF0FBECDBFDF91CF911F910F91A0
:100EB000FF90EF90DF90CF900C94130EC457DF4F4C
:100EC0000FB6F894DEBF0FBECDBFDF91CF911F915B
:100ED0000F91FF90EF90DF90CF90089508950E94BA
:100EE00020056E9A769A0C9454060C946E070C9416
:100EF00084060895880F991FFC01E250F040859107
:100F000094910895880F991FFC01E258FE4F859136
:100F1000949108950F931F93CF93DF93EC01811564
:100F200020E49207A0F5C11580E3D80708F0E1C0DE
:100F3000C83ED105D8F4C03ED10508F0EEC1C83A8C
:100F4000D10578F4C53AD10508F074C0C130D10597
:100F500009F46DC008F4DEC1C430D10508F0DDC16C
:100F6000D9C1CB3BD10508F470C0D4C1C11590E202
:100F7000D90708F0B9C0C11521E0D20708F0CDC1EA
:100F8000C03FD10508F4C6C18E01106506C2C1304C
:100F900080E5D80709F4BDC068F5C13120E4D20767
:100FA00009F4AEC050F4C03190E4D90708F0A5C0F0
:100FB000CF70DD278E01146DF0C1C33120E4D2075C
:100FC00009F4A4C008F49FC0C115D04509F0A2C11E
:100FD0000E945C210E94E00D0E946C069FEF24E3BA
:100FE0008CE0915020408040E1F700C000000E945A
:100FF0007928D3C1C11520E6D20730F4C11581E5A7
:10100000D80708F48CC02DC1C11590E7D90708F4A2
:1010100081C1C11520E8D20708F478C1C11580E963
:10102000D80708F077C1DF708E01106AB6C101E001
:1010300010E0B3C1C53AD10509F471C1C63AD10572
:1010400009F070C102E810E4A8C1C83AD10509F45A
:101050006CC1C93AD10509F46BC1CA3AD10509F48A
:101060006AC1CB3AD10509F469C1CC3AD10509F47A
:1010700068C1CD3AD10509F467C1C03BD10509F477
:1010800066C1CE3AD10509F465C1CF3AD10509F45C
:1010900064C1C13BD10509F463C1C23BD10509F468
:1010A00062C1C33BD10509F461C1C43BD10509F458
:1010B00060C1C53BD10509F45FC1C63BD10509F448
:1010C0005EC1C73BD10509F45DC1C83BD10509F438
:1010D0005CC1C93BD10509F45BC1CA3BD10509F428
:1010E0005AC100E014E459C1CE019F700E948207EA
:1010F00055C1DD278E01106C50C100E011ED4DC1CE
:1011000000E010ED4AC100E012ED47C100E013ED30
:1011100044C180913D04816080933D043EC10E94A2
:10112000DA28811102C00E94B6280E94F22890E0BD
:101130009093680480936704C23090E5D90721F446
:1011400080916704816086C0C43020E5D20721F415
:101150008091670482607EC0C63080E5D80721F4A4
:1011600080916704846076C0C83090E5D90719F48F
:101170008091670427C0CA3020E5D20721F480910E
:101180006704806167C0CC3080E5D80721F4809186
:10119000670480625FC0CE3090E5D90721F480916A
:1011A0006704806457C0C03120E5D20721F48091E4
:1011B000670480684FC0C23180E5D80729F4809168
:1011C00067048460886046C0C33090E5D90721F485
:1011D000809167048E7F3EC0C53020E5D20721F4A0
:1011E000809167048D7F36C0C73080E5D80721F431
:1011F000809167048B7F2EC0C93090E5D90719F420
:101200008091670426C0CB3020E5D20721F480917D
:1012100067048F7E1FC0CD3080E5D80721F4809110
:1012200067048F7D17C0CF3090E5D90721F48091F6
:1012300067048F7B0FC0C13120E5D20721F4809174
:1012400067048F7707C0C331D04531F480916704BC
:101250008B7F877F80936704809167040E94F628C4
:101260009CC08D2F99278F70992781309105D9F4D3
:101270009E012370332702C0880F991F2A95E2F739
:101280009C688E0144E0000F111F4A95E1F700278A
:101290001370802B912B53E0CC0FDD1F5A95E1F793
:1012A000C076DD272FC08230910531F4DC2FCC27AA
:1012B0008E01016F106A71C08330910569F4CE010F
:1012C0008370992701E010E002C0000F111F8A957A
:1012D000E2F7C8019C680FC0049709F05EC0CE0118
:1012E0008370992701E010E002C0000F111F8A955A
:1012F000E2F7C8019A6823E0CC0FDD1F2A95E1F7D9
:10130000C07ED7708C010C2B1D2B47C0DF708E0167
:10131000106243C000E010E040C08E013EC001E812
:1013200010E43BC003E810E438C002EE14E435C01A
:1013300009EE14E432C00AEE14E42FC005EB14E405
:101340002CC006EB14E429C007EB14E426C00CEC17
:1013500014E423C00DEC14E420C003E815E41DC020
:101360000AE815E41AC002E915E417C004E915E417
:1013700014C001E216E411C003E216E40EC004E258
:1013800016E40BC005E216E408C006E216E405C048
:1013900007E216E402C00AE216E4C801DF91CF9129
:1013A0001F910F9108959CE0799FF001112490E323
:1013B000899FE00DF11D1124E60FF11DEE0FFF1FB7
:1013C000E258FE4F85919491803E9105E0F4803C77
:1013D000910558F58133910509F46FC048F48932BD
:1013E000910509F463C08A32910509F46DC072C099
:1013F00089339105E9F082389105D1F08533910563
:1014000009F44DC067C0833E910581F138F4803EF8
:101410009105B9F0823E9105D9F05CC0863E9105F8
:1014200061F1873E9105A1F155C00E947A070895A8
:101430002091670420FD02C021FF4CC080EE90E0A7
:1014400049C08091670480FFF9CF89E390E042C0F2
:101450008091670482FF0EC08091670484FF03C0FF
:1014600080E090E037C083EE90E034C08091670464
:1014700082FFF2CF82EE90E02DC08091670483FF5F
:101480000BC08091670484FDEBCF87EE90E022C013
:101490008091670483FFF5CF86EE90E01BC08091BA
:1014A000670485FF07C089E290E014C0809167045B
:1014B00085FFF9CF85E390E00DC08091670486FF3A
:1014C00007C08AE290E006C08091670486FFF9CFEA
:1014D00081E390E00E948A070895CF92DF92EF9215
:1014E000FF920F931F9301E010E020E030E06801CD
:1014F000790104C0CC0CDD1CEE1CFF1C8A95D2F7D0
:1015000004C0000F111F221F331F6A95D2F70C2948
:101510001D292E293F29C0902104D0902204E0905B
:101520002304F0902404C022D122E222F322842F4B
:10153000C016D106E206F30641F41F910F91FF9009
:10154000EF90DF90CF900C9495251F910F91FF9015
:10155000EF90DF90CF900C94B62508950C94AD0ACF
:101560005F926F927F928F929F92AF92BF92CF9233
:10157000DF92EF92FF920F931F93CF93DF93CDB73C
:10158000DEB728970FB6F894DEBF0FBECDBFCE01F1
:1015900001966C014E0199E0890E911C20E030E02B
:1015A00040E050E060E070E000E010E0E12CF12C61
:1015B0006C2C5D2C88E0782EAA24A394B12CE4ED49
:1015C000F2E0A62DB52D872D01900D928A95E1F7B9
:1015D000F601819191916F01FC01E07FFF27E032DC
:1015E000F10559F48F709927F50102C0EE0FFF1F26
:1015F0008A95E2F7EE2AFF2A37C0E033F10559F465
:101600008F709927F50102C0EE0FFF1F8A95E2F750
:101610000E2B1F2B29C0E034F10559F48F70992748
:10162000F50102C0EE0FFF1F8A95E2F76E2B7F2BAC
:101630001BC0E035F10559F48F709927F50102C000
:10164000EE0FFF1F8A95E2F74E2B5F2B0DC0E036A1
:10165000F10551F48F709927F50102C0EE0FFF1FBD
:101660008A95E2F72E2B3F2BC814D90409F0A7CF97
:1016700084B19E2D9095892384B985B1E82AE5B877
:1016800087B1902F9095892387B988B1082B08B925
:101690008AB1962F909589238AB98BB1682B6BB943
:1016A0008DB1942F909589238DB98EB1482B4EB969
:1016B00080B3922F9095892380BB81B3282B21BBC7
:1016C00028960FB6F894DEBF0FBECDBFDF91CF9145
:1016D0001F910F91FF90EF90DF90CF90BF90AF9050
:1016E0009F908F907F906F905F9008955F926F9220
:1016F0007F928F929F92AF92BF92CF92DF92EF92A2
:10170000FF920F931F93CF93DF93CDB7DEB7689708
:101710000FB6F894DEBF0FBECDBF85B7806885BF1A
:1017200085B7806885BF0E94B00ACE0101966C0122
:101730004E0199E1890E911C20E030E040E050E03C
:1017400060E070E000E010E0E12CF12C6C2C5D2CEE
:1017500088E1782EAA24A394B12CECEDF2E0A62D1A
:10176000B52D872D01900D928A95E1F7F6018191B3
:1017700091916F01FC01E07FFF27E032F10559F400
:101780008F709927F50102C0EE0FFF1F8A95E2F7CF
:10179000EE2AFF2A37C0E033F10559F48F709927FC
:1017A000F50102C0EE0FFF1F8A95E2F70E2B1F2BEB
:1017B00029C0E034F10559F48F709927F50102C072
:1017C000EE0FFF1F8A95E2F76E2B7F2B1BC0E035D3
:1017D000F10559F48F709927F50102C0EE0FFF1F34
:1017E0008A95E2F74E2B5F2B0DC0E036F10551F4E0
:1017F0008F709927F50102C0EE0FFF1F8A95E2F75F
:101800002E2B3F2BC814D90409F0A7CF84B19E2DED
:101810009095892384B985B1E82AE5B887B1902FDE
:101820009095892387B988B1082B08B98AB1962F7A
:10183000909589238AB98BB1682B6BB98DB1942FA0
:10184000909589238DB98EB1482B4EB980B3922FD4
:101850009095892380BB81B3282B21BB10926D0307
:1018600010926C03109265031092640310926F0340
:1018700010926E0310926703109266031092710328
:101880001092700310926903109268031092730310
:101890001092720310926B0310926A0368960FB64F
:1018A000F894DEBF0FBECDBFDF91CF911F910F9196
:1018B000FF90EF90DF90CF90BF90AF909F908F9070
:1018C0007F906F905F900C946F077F928F929F92A2
:1018D000AF92BF92CF92DF92EF92FF920F931F933E
:1018E000CF93DF93CDB7DEB7A0970FB6F894DEBFE6
:1018F0000FBECDBF6E0149E1C40ED11C84E6E82EB7
:1019000083E0F82E98E0792EBC2CAD2C01E010E09D
:1019100028E1822E35E0932EE4EDF2E0AB2DBA2DD6
:10192000872D01900D928A95E1F7F60181919191B1
:101930006F019C01207F33272032310591F424B1BF
:101940008F709927A80102C0440F551F8A95E2F7AE
:10195000CA01922F982B94B995B18095892385B9A6
:1019600053C02033310591F427B18F709927F801C6
:1019700002C0EE0FFF1F8A95E2F7CF01922F982B3E
:1019800097B998B18095892388B93EC02034310534
:1019900091F42AB18F709927A80102C0440F551FF6
:1019A0008A95E2F7CA01922F982B9AB99BB180953C
:1019B00089238BB929C02035310591F42DB18F7061
:1019C0009927F80102C0EE0FFF1F8A95E2F7CF01B9
:1019D000922F982B9DB99EB1809589238EB914C002
:1019E0002036310589F420B38F709927A80102C0F1
:1019F000440F551F8A95E2F7CA01922F982B90BB8E
:101A000091B38095892381BB50EA5A95F1F7BE01C5
:101A10006F5F7F4F20E030E040E050E0ECEDF2E01F
:101A2000DE011196882D01900D928A95E1F7FB0158
:101A300081919191BF01FC01E07FFF27E032F10528
:101A400011F4E3B113C0E033F10511F4E6B10EC0B7
:101A5000E034F10511F4E9B109C0E035F10511F404
:101A6000ECB104C0E036F105B9F4EFB1F0E08F70ED
:101A7000992702C0F595E7958A95E2F7E0FD08C041
:101A8000C801042E02C0880F991F0A94E2F702C011
:101A900080E090E0282B392B4F5F5F4F4C30510591
:101AA00009F0BCCFF701808191818217930721F063
:101AB00031832083909271020E94B00AF2E0EF0E0F
:101AC000F11C4CE6E41643E0F40609F025CF8091C2
:101AD0007102882361F1815080937102882339F06B
:101AE0008FE99FE00197F1F700C0000020C08091CE
:101AF00064039091650390936D0380936C038091D0
:101B000066039091670390936F0380936E038091B7
:101B1000680390916903909371038093700380919F
:101B20006A0390916B0390937303809372030E94F6
:101B3000750781E0A0960FB6F894DEBF0FBECDBF4B
:101B4000DF91CF911F910F91FF90EF90DF90CF9099
:101B5000BF90AF909F908F907F900895E82FF0E016
:101B6000EE0FFF1FE459FC4F808191810895089585
:101B7000809152048160809352040C9408298091D2
:101B800052048E7F809352040C9408290E94DA2814
:101B9000811102C00E94B6280E9404298093520439
:101BA0003E9A809171008D7F8093710082E08093D6
:101BB00090008AE18093910081E0809376030895FC
:101BC00080917603811102C00E94C60D1092C60357
:101BD0001092C503809171008D7F80937100809178
:101BE00090008F7780939000109288031092870363
:101BF0001092BF031092C0031092C1031092C2034F
:101C00001092BE031092BD03EDE9F3E0ADE8B3E03E
:101C100011921192119211921D921D9283E0ED3B4F
:101C2000F807B1F70895CF92DF92EF92FF920F93EA
:101C30001F93CF93DF9320918703222309F484C05D
:101C40006B017C0180917603811102C00E94C60D58
:101C50000DEB13E0C7E0D0E0A7019601F8019291E7
:101C60008291729162918F010E94522E811131C036
:101C7000FE01EE0FFF1FEE0FFF1FE356FC4F108219
:101C8000118212821382DE01AA0FBB1FA357BC4F21
:101C900011961C921E92C730D105E9F0219644811D
:101CA0005581668177814083518362837383148277
:101CB00015821682178212968D919C911397119618
:101CC0009C938E9313961C921E92129734961296A2
:101CD000E2CF219708F68091C5039091C603019742
:101CE00097FD05C09093C6038093C50304C010926E
:101CF000C6031092C5038091C5039091C60320913D
:101D0000C3033091C4032817390724F01092C40389
:101D10001092C303892BC1F4809171008D7F809351
:101D20007100809190008F77809390001092BF0394
:101D30001092C0031092C1031092C2031092BE030E
:101D40001092BD0310928703DF91CF911F910F91E5
:101D5000FF90EF90DF90CF9008951F920F920FB6F3
:101D60000F9211244F925F926F927F928F929F9267
:101D7000AF92BF92CF92DF92EF92FF922F933F9359
:101D80004F935F936F937F938F939F93AF93BF9383
:101D9000CF93DF93EF93FF9380918703882309F418
:101DA0009BC1C091C503D091C6031C161D060CF043
:101DB00093C14090770350907803609079037090BE
:101DC0007A0320E030E0A901C301B2010E94FD2F97
:101DD00018160CF065C0C130D10509F452C08091CD
:101DE000C3039091C403BE010E94CF317C01909344
:101DF000C4038093C3038090890390908A03A090CA
:101E00008B03B0908C0320E030E040E85FE3C50135
:101E1000B4010E94EE2D6093890370938A0380932E
:101E20008B0390938C03F701EE0FFF1FEE0FFF1F44
:101E3000E356FC4FA30192016081718182819381FD
:101E40000E94562E20E030E040E05EE30E94013028
:101E50009B01AC01C501B4010E94FD2F18168CF442
:101E6000C7010196BE010E94CF319093C4038093B5
:101E7000C3031092890310928A0310928B0310926D
:101E80008C03E091C303F091C403EE0FFF1FEE0F2C
:101E9000FF1FE356FC4F6081718182819381D0C026
:101EA000C090BF03D090C003E090C103F090C20384
:101EB00020E030E0A901C701B6010E94522E21970F
:101EC000882309F4A2C0FE01EE0FFF1FEE0FFF1FD3
:101ED000E356FC4F80809180A280B380A5019401DD
:101EE000C701B6010E94522E87FF31C0A50194019F
:101EF00060E070E08CED93EC0E94562E20E030E024
:101F000040E451E40E94562E20E030E040E05FE3E0
:101F10000E9401309B01AC0160E070E080E090E441
:101F20000E9464309B01AC01C501B4010E940130E4
:101F30009B01AC01C701B6010E94522E87FF07C06A
:101F4000A701960160E070E08CED93E439C0A50133
:101F50009401C701B6010E94FD2F18160CF055C060
:101F6000A501940160E070E08CED93E40E94562E90
:101F700020E030E040E451E40E94562E20E030E0C2
:101F800040E05FE30E9401309B01AC0160E070E043
:101F900080E090E40E9464309B01AC01C501B40173
:101FA0000E9401309B01AC01C701B6010E94FD2FC8
:101FB00018165CF5A701960160E070E08CED93ECDB
:101FC0000E94562E20E030E040E451E40E94562E5C
:101FD00020E030E040E05FE30E9401309B01AC0173
:101FE00060E070E080E090E40E9464309B01AC010E
:101FF000C701B6010E9401306093BF037093C00314
:102000008093C1039093C20313C0FE01EE0FFF1F24
:10201000EE0FFF1FE356FC4F80819181A281B381B7
:102020008093BF039093C003A093C103B093C203F6
:102030006091BF037091C0038091C1039091C2036E
:1020400020917403309175032F3F4FEF340731F027
:102050002F5F3F4F30937503209374030E94D41277
:102060006B017C0120E034E244EF51E40E94522EE7
:1020700087FF08C086EFC82E88E2D82E84EFE82EAE
:1020800081E4F82E20E030E040E051E4C701B601E1
:102090000E9401309B01AC0160E074E284E79BE4A4
:1020A0000E94562E6B017C010E94BE2E70939700F9
:1020B00060939600209172023091730240917402F5
:1020C00050917502C701B6010E9401300E94BE2ED8
:1020D000709399006093980080918803882309F495
:1020E00033C1C0908303D0908403E0908503F090C7
:1020F000860320E030E0A901C701B6010E94FD2F50
:102100001816D4F580917403909175038F3F2FEFCB
:10211000920729F001969093750380937403C70189
:10212000B6010E94D41220E030E040E051E40E9469
:1021300001309B01AC0160E074E284E79BE40E9403
:10214000562E6B017C010E94BE2E70939700609307
:102150009600209172023091730240917402509166
:102160007502C701B6010E9401300E94BE2E709315
:1021700099006093980008C0109297001092960002
:10218000109299001092980060917D0370917E03E7
:102190006F5F7F4F70937E0360937D032091960065
:1021A0003091970080E090E0232BF1F0C0919600F1
:1021B000D09197000E94EF2E6B017C01BE0180E060
:1021C00090E00E94EF2E9B01AC0160917F03709123
:1021D000800380918103909182030E94562E20E01B
:1021E0003FEF4FE757E410C00E94EF2E6B017C01D8
:1021F00020E030EE4FEF54E460917F037091800354
:1022000080918103909182030E9401309B01AC0177
:10221000C701B6010E94FD2F87FD96C080917B0308
:102220008F5F80937B0390E020914E0430914F04A8
:1022300082179307A0F080915904882319F0109217
:102240007B030DC0809171008D7F80937100809120
:1022500090008F7780939000109288037DC08091CA
:102260007C03C0917B03811128C0C0905304D0909F
:102270005404E0905504F090560420E030E0A901A9
:10228000C701B6010E94FD2F1816BCF481E08093AF
:102290007C031092830310928403109285031092A2
:1022A0008603C0927F03D0928003E0928103F09274
:1022B0008203C150C0937B0343C010927C031092F1
:1022C000750310927403E0915004F091510448E0BA
:1022D000C49FE00DF11D112480819181A281B38101
:1022E0008093830390938403A0938503B093860324
:1022F00020E030E040E85EE364817581868197816B
:102300000E9401306B017C0120E030E048EC52E497
:1023100060917602709177028091780290917902B3
:102320000E94562E9B01AC01C701B6010E940130EC
:1023300060937F0370938003809381039093820363
:1023400010927E0310927D038091520480FD04C0A0
:102350001092880310928703FF91EF91DF91CF9144
:10236000BF91AF919F918F917F916F915F914F91AD
:102370003F912F91FF90EF90DF90CF90BF90AF9063
:102380009F908F907F906F905F904F900F900FBEB7
:102390000F901F901895CF92DF92EF92FF92CF93FC
:1023A000DF936B017C01EA0180917603811102C009
:1023B0000E94C60D8091520480FF46C08091C503E3
:1023C0009091C60308970CF03FC0809171008D7FFB
:1023D000809371008091880381110E94E00D81E05B
:1023E00080938703109275031092740320E030E00D
:1023F000A901C701B6010E94FD2F1816DCF48091D7
:10240000C5039091C603FC01EE0FFF1FEE0FFF1FE7
:10241000E356FC4FC082D182E282F382FC01EE0FD0
:10242000FF1FE357FC4FD183C08301969093C603EF
:102430008093C503809171008260809371008091C8
:102440009000806880939000DF91CF91FF90EF9093
:10245000DF90CF9008958F929F92AF92BF92CF92CC
:10246000DF92EF92FF920F931F93CF93DF93EC01D4
:102470007B01D42E4801590180917603811102C05D
:102480000E94C60D8091520480FF6BC08091710044
:102490008D7F809371008091870381110E94E00DF0
:1024A00081E080938803D0935104C0935004F0924C
:1024B0004F04E0924E04D0925904809253049092BB
:1024C0005404A0925504B0925604109289031092BD
:1024D0008A0310928B0310928C0310927B038881E5
:1024E0009981AA81BB818093830390938403A093F5
:1024F0008503B093860320E030E040E85EE36C8122
:102500007D818E819F810E9401306B017C0120E0E2
:1025100030E048EC52E4609176027091770280914D
:102520007802909179020E94562E9B01AC01C7015E
:10253000B6010E94013060937F0370938003809303
:1025400081039093820310927E0310927D03809109
:102550007100826080937100809190008068809308
:102560009000DF91CF911F910F91FF90EF90DF903E
:10257000CF90BF90AF909F908F9008958091C703A8
:1025800090E0019666E070E00E94CF318093C7032F
:1025900008958091C70390E0019766E070E00E9483
:1025A000CF318093C70308958F929F92AF92BF92CD
:1025B000CF92DF92EF92FF920F931F93CF93DF930F
:1025C0006B017C01C0917403D0917503BE0180E062
:1025D00090E00E94EF2E4B015C01A701960160E0A4
:1025E00070E08CE594E40E94562E9B01AC01C5017D
:1025F000B4010E9401300E94C32E2091C7032330F2
:1026000009F473C028F4222351F02130E9F02CC1E1
:10261000243009F4A0C0253009F4E0C025C180E0D1
:1026200090E0A0E0BFE38093720290937302A093C6
:102630007402B0937502109277031092780310928F
:10264000790310927A0310C11092770310927803E5
:102650001092790310927A036431710540F46A3064
:10266000710560F520E030E040E85EE32BC0693C96
:10267000710508F0AAC080E090E00E94EF2E20E0F3
:1026800030E040EA51E40E94ED2D20E030E044E3E8
:1026900053E40E94562E9B01AC010E94013020E0C1
:1026A00030E040E05EE30E9401309B01AC0160E05D
:1026B00070E080E09EE30E94ED2D44C020E030E019
:1026C00040E05FE3C701B6010E9401306B017C016D
:1026D00080E090E0A0E0BEE38093720290937302EA
:1026E000A0937402B0937502BFC01092770310924A
:1026F00078031092790310927A034AE0469F900182
:10270000479F300D1124C90168EB7BE00E94BB316B
:10271000BC016C5D754077FF03C0719561957109CF
:10272000882777FD8095982F0E94F12E2EE333ECB9
:102730004EE259E30E94013020E030E040EC5EE3DD
:102740000E94EE2D60937202709373028093740264
:102750009093750289C010927703109278031092BB
:10276000790310927A03CE0183709927892BE1F0C7
:10277000BE016170772780E090E00E94EF2E20E09C
:1027800030E040E05EE30E94013020E030E040E4D1
:102790005FE30E94EE2D6093720270937302809348
:1027A0007402909375020CC080E090E0A0E0BFE35B
:1027B0008093720290937302A0937402B093750297
:1027C000C770DD27CD2B09F04FC010927202109216
:1027D0007302109274021092750246C01092770331
:1027E000109278031092790310927A0300E010E0BF
:1027F00020E03FE30093720210937302209374026F
:10280000309375026739710578F180E090E00E949D
:10281000EF2E20E030E047E153E40E94ED2D20E070
:1028200030E04AE754E40E94562E20E030E048E4CD
:1028300052E40E94013020E030E040EA51E40E947E
:10284000332F0E94BE2E660F771F660F771FFB0186
:10285000EC50FD4F2081318142815381C701B60187
:102860000E9401306B017C01C701B601DF91CF915D
:102870001F910F91FF90EF90DF90CF90BF90AF909E
:102880009F908F9008958091D8030895CF93DF9300
:1028900000D01F92CDB7DEB79C0180915E048430DA
:1028A00019F593E099833B832A839093E9008FEF96
:1028B0009091E800815095FD06C095ED9A95F1F74D
:1028C00000008111F5CF8091E80085FF0DC040E048
:1028D00050E063E070E0CE0101960E94A71680915F
:1028E000E8008E778093E8000F900F900F90DF91B3
:1028F000CF910895CF93DF9300D01F92CDB7DEB76D
:1029000020915E04243021F522E029839B838A8371
:1029100083E08093E9008FEF9091E800815095FD6E
:1029200006C095ED9A95F1F700008111F5CF8091E1
:10293000E80085FF0DC040E050E063E070E0CE01AC
:1029400001960E94A7168091E8008E778093E80098
:102950000F900F900F90DF91CF91089520915E041A
:102960002430F1F422E02093E9002FEF3091E800C9
:10297000215035FD06C035ED3A95F1F700002111E3
:10298000F5CF2091E80025FF0BC040E050E065E066
:1029900070E00E94A7168091E8008E778093E8008F
:1029A0000895CF93DF93EC0190915E04943009F089
:1029B00046C0809184028823D9F0809185028823C3
:1029C000B9F09093E9008FEF9091E800815095FD68
:1029D00006C095E19A95F1F700008111F5CF80913D
:1029E000E80085FF2CC040E050E060E170E017C0D7
:1029F00081E08093E9008FEF9091E800815095FD90
:102A000006C095ED9A95F1F700008111F5CF809100
:102A1000E80085FF14C040E050E068E070E0CE01BF
:102A20000E94A7168091E8008E778093E80080E1ED
:102A3000FE01A8ECB3E001900D928A95E1F7DF91D9
:102A4000CF91089580915D04811109C00E943C18C6
:102A50000E9499188091E20084608093E2000895BA
:102A600010925D040895089508950C94E12742E0C2
:102A700061EC81E00E94B61742E061EC82E00E94C6
:102A8000B61742E061EC83E00E94B61742E161ECC8
:102A900084E00C94B61780916004833009F455C02B
:102AA00030F4813071F0823009F48EC008958A309C
:102AB00009F47AC08B3009F460C0893009F09CC0F9
:102AC00020C080915F04813A09F096C08091E800AF
:102AD000877F8093E8008091630490916404892B40
:102AE00021F460E188EC93E003C060E080E090E0D6
:102AF00070E00E94F2168091E8008B778093E800E6
:102B0000089580915F04813209F076C0809163045A
:102B100090916404009719F0039709F06DC08091BB
:102B2000E800877F8093E8008091E80082FD05C07F
:102B300080915E048111F8CF5FC08091F100809395
:102B4000D8038091E8008B7753C080915F04813A6D
:102B500009F052C08091630490916404892B09F0BC
:102B60004BC08091E800877F8093E8008091E80067
:102B700080FFFCCF8091840236C080915F04813257
:102B8000D9F58091630490916404892BA9F5809113
:102B9000E800877F8093E8000E94EB178091610432
:102BA000809384020C945C2180915F04813221F532
:102BB0008091E800877F8093E8000E94EB17809166
:102BC00062048093D903089580915F04813AA1F44F
:102BD0008091E800877F8093E8008091E80080FF83
:102BE000FCCF8091D9038093F1008091E8008E772B
:102BF0008093E8000C94EB17089584B7877F84BF17
:102C000088E10FB6F89480936000109260000FBEC8
:102C100090E080E80FB6F894809361009093610093
:102C20000FBE0E948E1B0E943C180E949918809132
:102C3000E20084608093E20078940E941F1B0E944F
:102C4000901B8AE792E00E943A1B80915E048530D7
:102C500069F40E949B2780915C048823B1F30E9451
:102C6000C927882391F30E949116EFCF0E94981BE9
:102C7000ECCF292F332723303105C9F064F42130FC
:102C8000310581F02230310509F043C08DE690E036
:102C90002AE338E042C021323105F1F02232310519
:102CA00041F137C082E190E027EA38E036C0992749
:102CB0008130910541F08230910541F0892B49F531
:102CC000E6E3F8E005C0E8E0F8E002C0EEEDF7E08A
:102CD000849190E09F0121C06430D8F4E62FF0E0A9
:102CE000EE0FFF1FE05BFC4F2081318189E090E017
:102CF00014C0643070F470E0FB01EE0FFF1FE85B5E
:102D0000FC4F20813181FB01EC5BFC4F808190E026
:102D100004C080E090E020E030E0FA0131832083BD
:102D2000089580E189BD82E189BD09B400FEFDCF2F
:102D30008091D8008F7D8093D8008091E0008260E0
:102D40008093E0008091E00081FDFCCF0895CF9258
:102D5000DF92EF92FF920F931F93CF93DF93EC01DB
:102D60008B016A010E940A18811133C0C114D10479
:102D700039F0F60180819181081B190BC80FD91F0A
:102D8000E12CF12C0115110519F18091E80085FD68
:102D900016C08091E8008E778093E800C114D104BA
:102DA00049F0F60180819181E80EF91EF182E082FE
:102DB00085E00FC00E940A18882321F30AC0899178
:102DC0008093F10001501109FFEFEF1AFF0ADACFEB
:102DD00080E0DF91CF911F910F91FF90EF90DF90F6
:102DE000CF90089520916504309166042617370727
:102DF00048F06115710539F42091E8002E77209391
:102E0000E80001C0B90140E061157105A9F1209108
:102E10005E04222309F443C0253009F442C0209106
:102E2000E80023FD40C02091E80022FD32C020913F
:102E3000E80020FFE9CF4091F3002091F20030E05C
:102E4000342BFC01CF016115710559F02830310593
:102E500040F481918093F100615071092F5F3F4FE1
:102E6000F1CF41E02830310509F040E02091E80041
:102E70002E772093E800C8CF4111C9CF0AC08091B6
:102E80005E04882361F0853061F08091E80083FD65
:102E90000AC08091E80082FFF2CF80E0089582E0CE
:102EA000089583E0089581E00895209165043091AC
:102EB00066042617370748F06115710539F420912B
:102EC000E8002E772093E80001C0B901FC0120E062
:102ED0006115710591F180915E04882309F440C069
:102EE000853009F43FC08091E80083FD3DC08091AA
:102EF000E80082FD2FC08091E80080FFE9CF20919B
:102F0000F3008091F20090E0922B6115710559F069
:102F10008830910540F424912093F100319661505E
:102F200071090196F2CF21E0089709F020E0809125
:102F3000E8008E778093E800CBCF2111CCCF0AC078
:102F400080915E04882361F0853061F08091E80013
:102F500083FD0AC08091E80082FFF2CF80E00895EF
:102F600082E0089583E0089581E00895982F9730D6
:102F700058F59093E900981739F07091EC00209182
:102F8000ED005091F00003C0242F762F50E021FF78
:102F900019C03091EB003E7F3093EB003091ED0093
:102FA0003D7F3093ED003091EB0031603093EB00CA
:102FB0007093EC002093ED005093F0002091EE0010
:102FC00027FF07C09F5FD3CF8F708093E90081E018
:102FD000089580E0089580915F0487FF11C080917B
:102FE000E80082FD05C080915E048111F8CF11C018
:102FF0008091E8008B770BC080915E04882349F0B4
:103000008091E80080FFF8CF8091E8008E77809370
:10301000E80008952091E4003091E50095E64091A4
:10302000EC00842F817040FF22C08091E80080FD79
:103030001CC080915E04882391F0853091F08091CE
:10304000EB0085FD10C04091E4005091E50042176F
:10305000530729F39A01915011F784E0089582E013
:10306000089583E0089581E0089580E008954091F7
:10307000E80042FFDECF08950E94AA180E94B2180D
:10308000E0EEF0E0808181608083E8EDF0E0808117
:103090008F77808319BCA7EDB0E08C918E7F8C93E5
:1030A00080818F7E808310925D0408950F931F931B
:1030B000CF93DF930E94AA180E94B218C8EDD0E007
:1030C00088818F77888388818068888388818F7DD5
:1030D000888319BC10925E0410925A0410925C040A
:1030E00010925B0400EE10E0F80180818B7F8083FA
:1030F00088818160888342E060E080E00E94B617AA
:10310000E1EEF0E080818E7F8083E2EEF0E080816E
:1031100081608083808188608083F80180818E7FD8
:103120008083888180618883DF91CF911F910F9187
:103130000895E8EDF0E080818F7E8083E7EDF0E098
:1031400080818160808384E082BF81E080935D0420
:103150000C945618E8EDF0E080818E7F8083109209
:10316000E20008951092DA001092E10008951F9293
:103170000F920FB60F9211242F933F934F935F93AB
:103180006F937F938F939F93AF93BF93EF93FF932F
:103190008091E10082FF0BC08091E20082FF07C0B6
:1031A0008091E1008B7F8093E1000E941E1B809143
:1031B000DA0080FF1FC08091D80080FF1BC0809183
:1031C000DA008E7F8093DA008091D90080FF0DC0F5
:1031D00080E189BD82E189BD09B400FEFDCF81E0B7
:1031E00080935E040E94221505C019BC10925E04F3
:1031F0000E9430158091E10080FF19C08091E200AB
:1032000080FF15C08091E2008E7F8093E200809164
:10321000E20080618093E2008091D8008062809318
:10322000D80019BC85E080935E040E94341580911B
:10323000E10084FF30C08091E20084FF2CC080E177
:1032400089BD82E189BD09B400FEFDCF8091D8001F
:103250008F7D8093D8008091E1008F7E8093E10084
:103260008091E2008F7E8093E2008091E200816095
:103270008093E20080915A04882311F084E007C013
:103280008091E30087FD02C081E001C083E080936C
:103290005E040E9435158091E10083FF29C0809172
:1032A000E20083FF25C08091E100877F8093E100E9
:1032B00082E080935E0410925A048091E1008E7F38
:1032C0008093E1008091E2008E7F8093E200809104
:1032D000E20080618093E20042E060E080E00E94D2
:1032E000B6178091F00088608093F0000E9433153B
:1032F000FF91EF91BF91AF919F918F917F916F91CE
:103300005F914F913F912F910F900FBE0F901F90A3
:1033100018951F920F920FB60F9211242F933F937F
:103320004F935F936F937F938F939F93AF93BF93CD
:10333000CF93DF93EF93FF93C091E900CF7080911B
:10334000EC00D82FD17080FDD0E81092E900809178
:10335000F000877F8093F00078940E94CD1910923E
:10336000E9008091F00088608093F000CD2BCF7051
:10337000C093E900FF91EF91DF91CF91BF91AF91A1
:103380009F918F917F916F915F914F913F912F917D
:103390000F900FBE0F901F9018951F93CF93DF9340
:1033A000CDB7DEB7AA970FB6F894DEBF0FBECDBF7C
:1033B000EFE5F4E088E08E0F9091F10091938E1389
:1033C000FBCF0E944B158091E80083FF1FC18091C5
:1033D0005F0490916004492F50E04A30510508F095
:1033E00015C1FA01EC59FF4F0C94E331803881F09C
:1033F000823809F00BC1809163048F708093E900DB
:103400008091EB0085FB882780F91092E90006C0C7
:1034100080915B0490915C04911182609091E8002E
:10342000977F9093E8008093F1001092F100C8C05C
:10343000282F2D7F09F0EAC0882319F0823061F02F
:10344000E5C080916104813009F0E0C0933009F05B
:1034500080E080935C042BC080916104811127C0BF
:10346000809163048F7009F4D1C08093E9002091AA
:10347000EB0020FF1CC0933021F48091EB008062B0
:1034800014C09091EB0090619093EB0021E030E04C
:10349000A90102C0440F551F8A95E2F74093EA0044
:1034A0001092EA008091EB0088608093EB0010920C
:1034B000E9008091E800877F86C08111A7C0109144
:1034C00061041F778091E3008078812B8093E30073
:1034D0008091E800877F8093E8000E94EB1780913D
:1034E000E80080FFFCCF8091E30080688093E300D8
:1034F000111102C082E001C083E080935E0486C0A7
:103500008058823008F082C08091610490916204FA
:103510008C3D53E0950779F583E08A838AE28983BD
:103520004FB7F894DE01139620E03EE051E2E32F1E
:10353000F0E050935700E49120FF03C0E295EF7054
:103540003F5FEF708E2F90E0EA3010F0C79601C019
:10355000C0968D939D932F5F243149F74FBF809183
:10356000E800877F8093E8006AE270E0CE01019670
:103570000E94F21614C0AE014F5F5F4F609163046A
:103580000E943916BC01009709F440C09091E800F0
:10359000977F9093E80089819A810E9455178091C6
:1035A000E8008B778093E80031C0803879F580910E
:1035B000E800877F8093E80080915A048093F100AF
:1035C0008091E8008E778093E8000E94EB171EC080
:1035D00081111CC0909161049230C0F48091E80088
:1035E000877F8093E80090935A040E94EB178091A4
:1035F0005A04811106C08091E30087FD02C081E07A
:1036000001C084E080935E040E9437158091E80039
:1036100083FF0AC08091E800877F8093E800809153
:10362000EB0080628093EB00AA960FB6F894DEBFA1
:103630000FBECDBFDF91CF911F9108950895CF9315
:1036400080915E048823A1F0C091E900CF70909131
:10365000EC00892F817090FD80E8C82B1092E90062
:103660008091E80083FD0E94CD19CF70C093E900DE
:10367000CF9108959093DF038093DE030895E09146
:10368000DE03F091DF03309721F00190F081E02D0F
:10369000099480E00895E091DE03F091DF03309714
:1036A00021F00280F381E02D09940895E091DE037A
:1036B000F091DF03309721F00480F581E02D09942B
:1036C00008952091DC033091DD038217930771F098
:1036D0009093DD038093DC03E091DE03F091DF0340
:1036E000309721F00680F781E02D0994089520910C
:1036F000DA033091DB038217930771F09093DB03B9
:103700008093DA03E091DE03F091DF03309721F03C
:103710000084F185E02D0994089508950C948D1B83
:103720000E9415280E94760B0E949B280C94562D0F
:103730004F925F927F928F929F92AF92BF92CF9261
:10374000DF92EF92FF920F931F93CF93DF93CDB74A
:10375000DEB72A970FB6F894DEBF0FBECDBF0E942A
:10376000650C91EEC92E93E0D92E00E010E0AA245A
:10377000A394B12C702E802F0E94AE0D4C01F60147
:10378000419051906F014826592641145104B1F4DB
:103790000F5F1F4F0430110569F78FEF89838A830C
:1037A0001B820E941E288160782F9D838C83498113
:1037B0005A816B818D810E94511C3AC080913D04D9
:1037C00081FD0E94B70D20E030E07501022E02C09D
:1037D000EE0CFF1C0A94E2F7C70184219521892B86
:1037E00009F12E837F828E209F2091E0892809F4A1
:1037F00090E098870E941E288160782F9A87898799
:103800004E815F8168858A850E94511C000F111FBF
:10381000F801EF51FC4F80819181E826F926F18271
:10382000E08206C02F5F3F4F2C30310571F6B0CFDC
:103830000E94872A1091E0030E943F1B1817D9F0BD
:103840000E943F1B8093E0032A960FB6F894DEBFD8
:103850000FBECDBFDF91CF911F910F91FF90EF90E1
:10386000DF90CF90BF90AF909F908F907F905F90B0
:103870004F900C94AE0A2A960FB6F894DEBF0FBE96
:10388000CDBFDF91CF911F910F91FF90EF90DF900F
:10389000CF90BF90AF909F908F907F905F904F9010
:1038A0000895CF93DF93CDB7DEB72B970FB6F8947B
:1038B000DEBF0FBECDBF4F83588769877A878B875E
:1038C000DE01119686E0FD0111928A95E9F785E007
:1038D000FE01379601900D928A95E1F749815A8150
:1038E0006B817C818D819E810E94F6232B960FB681
:1038F000F894DEBF0FBECDBFDF91CF910895CF9377
:10390000882309F4C2C0C82F823859F40E943F1B93
:1039100081FDBBC089E30E949F260E946C2789E33A
:103920000CC0833879F40E943F1B80FDAEC083E554
:103930000E949F260E946C2783E50E94E126CF917A
:103940000C946C27843859F40E943F1B82FD9DC063
:1039500087E40E949F260E946C2787E4EECF8CEFBD
:103960008C0F813A48F48C2F0E94BE2C81118DC09F
:103970008C2F0E949F26E3CF80E28C0F883048F482
:10398000C77081E001C0880FCA95EAF70E94252719
:10399000D6CF8BE58C0F833078F4C53A29F0C63A40
:1039A00031F083E890E005C081E890E002C082E851
:1039B00090E0CF910C94611B88E58C0F833108F067
:1039C00064C0C83A39F1C93A41F1CA3A49F1CB3A2F
:1039D00051F1CC3A59F1CD3A61F1C03B69F1CE3A9F
:1039E00071F1CF3A79F1C13B81F1C23B89F1C33B1F
:1039F00091F1C43B99F1C53BA1F1C63BA9F1C73B8D
:103A0000B1F1C83BB9F1C93BC1F1CA3BC9F180E092
:103A100090E038C082EE90E035C089EE90E032C090
:103A20008AEE90E02FC085EB90E02CC086EB90E012
:103A300029C087EB90E026C08CEC90E023C08DEC91
:103A400090E020C083E891E01DC08AE891E01AC0B0
:103A500082E991E017C084E991E014C081E292E02C
:103A600011C083E292E00EC084E292E00BC085E2D6
:103A700092E008C086E292E005C087E292E002C0D0
:103A80008AE292E0CF910C94771BCF91089588231E
:103A900009F44BC0823859F40E943F1B81FF45C096
:103AA00089E30E949F260E946C2789E30CC083381B
:103AB00071F40E943F1B80FF38C083E50E949F265F
:103AC0000E946C2783E50E94E1260C946C278438C1
:103AD00059F40E943F1B82FF28C087E40E949F2662
:103AE0000E946C2787E4EFCF9CEF980F913A58F330
:103AF00090E2980F983050F4877091E001C0990FD0
:103B00008A95EAF7892F0E942B27DFCF9BE5980F34
:103B1000933020F480E090E00C94611B885A83314C
:103B200020F480E090E00C94771B0895882321F026
:103B30000E9425270C946C270895882321F00E9469
:103B40002B270C946C270895BF92CF92DF92EF92AF
:103B5000FF920F931F93CF93DF9300D000D000D03C
:103B6000CDB7DEB725E0FC01DE01119601900D9284
:103B70002A95E1F7FC01D0801181028125812295EF
:103B80002F7043815481452B09F472C31F3F21F4E8
:103B9000FFEFDF1609F46CC37C012E830E947707C8
:103BA000D9821A8369817A81802F0E949B26182FDF
:103BB000B92E0E9450260E9417252E81002319F04D
:103BC0000E9442272E81EB2DE295EF70F0E0E25942
:103BD000FF4F0C94E3318B2D807F9B2D9F70F92E2E
:103BE000882319F0F29480EFF822002389F0FF2057
:103BF00009F47CC280E2810F883020F48F2D0E946E
:103C0000252703C08F2D0E9435270E946C276EC286
:103C1000812F0E94471DFF2009F42AC3105E8F2DBB
:103C2000183018F40E942B2702C00E943B272696CA
:103C30000FB6F894DEBF0FBECDBFDF91CF911F91BD
:103C40000F91FF90EF90DF90CF90BF900C946C2776
:103C50008B2D807F9B2D9F70803211F4892F03C0A4
:103C6000892F8295807F112319F0113011F12BC01B
:103C70000023A9F0222389F1213079F526960FB689
:103C8000F894DEBF0FBECDBFDF91CF911F910F9192
:103C9000FF90EF90DF90CF90BF900C945527222398
:103CA00019F0213009F4E4C28E830E9458278E81D6
:103CB0009BC1002321F0263008F0DAC20EC0253067
:103CC00008F0D6C291C10023C9F0222331F0F701D8
:103CD000958190FF0BC29F70958326960FB6F8943E
:103CE000DEBF0FBECDBFDF91CF911F910F91FF902F
:103CF000EF90DF90CF90BF900C94961D222309F493
:103D000073C109C22B2D26952695237030E021150D
:103D1000310521F021303105D1F0AAC2002321F074
:103D2000812F9B2D937002C080E090E026960FB605
:103D3000F894DEBF0FBECDBFDF91CF911F910F91E1
:103D4000FF90EF90DF90CF90BF900C94611B002309
:103D500021F0812F9B2D937002C080E090E0269689
:103D60000FB6F894DEBF0FBECDBFDF91CF911F918C
:103D70000F91FF90EF90DF90CF90BF900C94771B46
:103D8000812F002319F00E948F2902C00E94F72979
:103D900026960FB6F894DEBF0FBECDBFDF91CF9150
:103DA0001F910F91FF90EF90DF90CF90BF900C94F8
:103DB0007C2A8B2D837009F07BC0011159C2812FA1
:103DC000829586958770880F880F912F9F70C92ED6
:103DD000D12CE12CF12C082E04C0CC0CDD1CEE1CE7
:103DE000FF1C0A94D2F714FF12C04FE050E060E0CD
:103DF00070E004C0440F551F661F771F8A95D2F7E5
:103E0000CB01BA01609570958095909503C060E0F4
:103E100070E0CB012B2D269526952370422F50E084
:103E200042305105D9F04330510569F16C297D29A3
:103E30008E299F294130510551F126960FB6F894ED
:103E4000DEBF0FBECDBFDF91CF911F910F91FF90CD
:103E5000EF90DF90CF90BF900C943E256C297D2988
:103E60008E299F2926960FB6F894DEBF0FBECDBFD0
:103E7000DF91CF911F910F91FF90EF90DF90CF9046
:103E8000BF900C945A250E943E25C701B601269684
:103E90000FB6F894DEBF0FBECDBFDF91CF911F915B
:103EA0000F91FF90EF90DF90CF90BF900C94222560
:103EB000002319F08B2D817001C08695882309F4A9
:103EC000D7C1812F829586958770880F880F912F93
:103ED0009F70C92ED12CE12CF12C082E04C0CC0CE3
:103EE000DD1CEE1CFF1C0A94D2F714FF12C04FE039
:103EF00050E060E070E004C0440F551F661F771F5C
:103F00008A95D2F7CB01BA0160957095809590950E
:103F100003C060E070E0CB012B2D26952695237021
:103F2000422F50E042305105D9F04330510569F13C
:103F30006C297D298E299F294130510551F1269602
:103F40000FB6F894DEBF0FBECDBFDF91CF911F91AA
:103F50000F91FF90EF90DF90CF90BF900C941826B8
:103F60006C297D298E299F2926960FB6F894DEBFED
:103F70000FBECDBFDF91CF911F910F91FF90EF90BA
:103F8000DF90CF90BF900C9434260E941826C70172
:103F9000B60126960FB6F894DEBF0FBECDBFDF91F7
:103FA000CF911F910F91FF90EF90DF90CF90BF9036
:103FB0000C94FC25103F49F118F4103E48F491C0D0
:103FC000123F09F453C0E8F1133F09F464C089C0FB
:103FD0001F708B2D8F71002321F00E949525812F5A
:103FE0007CCE0E94B625812F26960FB6F894DEBFB0
:103FF0000FBECDBFDF91CF911F910F91FF90EF903A
:10400000DF90CF90BF900C949D1D0023B1F0253020
:1040100008F02EC18B2D8F7126960FB6F894DEBF57
:104020000FBECDBFDF91CF911F910F91FF90EF9009
:10403000DF90CF90BF900C94DB25263008F018C19C
:10404000E9CF0023A9F08B2D8F7126960FB6F89437
:10405000DEBF0FBECDBFDF91CF911F910F91FF90BB
:10406000EF90DF90CF90BF900C949525002359F3EB
:104070008B2D8F7126960FB6F894DEBF0FBECDBF85
:10408000DF91CF911F910F91FF90EF90DF90CF9034
:10409000BF900C94B625002399F08B2D8F71269636
:1040A0000FB6F894DEBF0FBECDBFDF91CF911F9149
:1040B0000F91FF90EF90DF90CF90BF900C948025F0
:1040C00026960FB6F894DEBF0FBECDBFDF91CF911D
:1040D0001F910F91FF90EF90DF90CF90BF900C94C5
:1040E00076250023A9F0222309F4ADCF812F26964F
:1040F0000FB6F894DEBF0FBECDBFDF91CF911F91F9
:104100000F91FF90EF90DF90CF90BF900C947F1CA9
:10411000222309F4ADCF812F26960FB6F894DEBF87
:104120000FBECDBFDF91CF911F910F91FF90EF9008
:10413000DF90CF90BF900C94471D4B2D4F70612F97
:10414000C7010E94690526960FB6F894DEBF0FBE20
:10415000CDBFDF91CF911F910F91FF90EF90DF9036
:10416000CF90BF900C949A24011182C09B2D9F7018
:10417000492F50E04230510509F443C0C4F44115C1
:10418000510571F14130510509F072C026960FB604
:10419000F894DEBF0FBECDBFDF91CF911F910F917D
:1041A000FF90EF90DF90CF90BF900C947E2D433026
:1041B0005105C1F14430510509F05AC0812F2696AE
:1041C0000FB6F894DEBF0FBECDBFDF91CF911F9128
:1041D0000F91FF90EF90DF90CF90BF900C94D02D77
:1041E00026960FB6F894DEBF0FBECDBFDF91CF91FC
:1041F0001F910F91FF90EF90DF90CF90BF900C94A4
:10420000672D26960FB6F894DEBF0FBECDBFDF91A7
:10421000CF911F910F91FF90EF90DF90CF90BF90C3
:104220000C949A2D26960FB6F894DEBF0FBECDBF24
:10423000DF91CF911F910F91FF90EF90DF90CF9082
:10424000BF900C94AD2D4B2D4F70612FC70126965A
:104250000FB6F894DEBF0FBECDBFDF91CF911F9197
:104260000F91FF90EF90DF90CF90BF900C94790763
:1042700026960FB6F894DEBF0FBECDBFDF91CF916B
:104280001F910F91FF90EF90DF90CF90BF90089516
:104290000E9442270E9452270E9417270E946C27E3
:1042A0000E942D2B0E947C2A80E090E00E94611BDE
:1042B00080E090E00C94771B0E9432270C944821F8
:1042C0000E949026292F22952F7030E02C30310546
:1042D0004CF42A3031056CF422503109223031057A
:1042E00088F407C02C30310549F02F30310531F00A
:1042F00009C0803E48F0803F29F406C093FB882720
:1043000080F9089580E0089581E00895CF93DF93C8
:1043100000D000D01F92CDB7DEB70F900F900F9056
:104320000F900F90DF91CF910895CF93DF9300D03E
:1043300000D000D0CDB7DEB726960FB6F894DEBF1A
:104340000FBECDBFDF91CF9108951F93CF93DF9321
:10435000C091E90316E08091EA03C81799F0D0E014
:104360001C9FF0011D9FF00D1124E551FC4F408171
:10437000518162817381848195810E94952121966A
:10438000C770E9CFDF91CF911F91089540911B0431
:1043900050911C0460911D0470911E0480911F04B3
:1043A000909120040C9495218091200482958F7027
:1043B00009F054C080911D04882309F44FC08091F6
:1043C000E903A091EA0360911B0470911C044091E1
:1043D0001E0450911F04B6E08A1709F43FC090E014
:1043E00041155105C1F17F3F11F46F3FA1F1B89F15
:1043F000F001B99FF00D1124E551FC4F218172139A
:104400002AC02081621327C02281211124C0238168
:1044100034812417350710F421503109241B350B42
:10442000283C3105C0F4209120042F702061209396
:10443000200426E0289FF001299FF00D1124E0516F
:10444000FC4F80818F70806180838BE194E00E94BB
:10445000A41D0C94A52101968770BECF0895CF921C
:10446000DF92EF92FF920F931F93CF93DF93CDB71D
:10447000DEB762970FB6F894DEBF0FBECDBF8C01DA
:1044800085E0F801DE011D9601900D928A95E1F715
:10449000D8014C9111965C91119712966C911297DC
:1044A0001396CD90DC90149730911B0470911C04EE
:1044B00080911E0490911F04009709F46BC17F3F07
:1044C00019F43F3F09F466C1E0901D04EE2009F4A1
:1044D000C0C020912004C816D90628F0F601E81BB8
:1044E000F90BCF0104C0809590958C0D9D1DFF2484
:1044F000F394883C910578F0F12C207F09F0C6C038
:104500007C2DD98AC88A89890E9486218BE194E012
:104510000E94A41DB1C0822F807F09F046C0751390
:1045200014C0341312C0611110C02F702061209389
:1045300020040E94C6218BE194E00E94A41D80917A
:104540002004D80115968C932EC0CD2819F15F3F19
:1045500011F44F3FF9F0F62E61111CC08091E90370
:104560002091EA0336E0821709F45AC090E0389FA0
:10457000F001399FF00D1124E551FC4F7181571363
:1045800006C07081471303C07281711103C0019688
:104590008770E9CFF62E662309F418C180912004B4
:1045A000816080932004F12C11C1751308C034136D
:1045B00006C0611104C080912004D801C3C04D879A
:1045C0005E878D859E856A8B0E9460216A8988231B
:1045D000E1F16623D1F120912004822F82958F7022
:1045E00090E0029774F080911B0490911C049887CE
:1045F0008F831986DB86CA862C87CE0107960E9498
:10460000A41D86E0F801ABE1B4E001900D928A951B
:10461000E1F70E94D4210E94C621FF24F394D6C062
:104620004D875E878D859E850E949026292F229535
:104630002F7030E0223031050CF0BCC09F7009F0C3
:10464000B6C0805E883008F4C1C0C8010E94A41DB5
:10465000E4CFC816D90608F453C0F601E81BF90BDD
:10466000CF01883C910508F450C0F12C7C2DD98AEB
:10467000C88A89890E948621EBE1F4E086E0DF01A7
:104680001D928A95E9F70E94C621A0C0751314C037
:10469000341312C0611110C080912004F801858389
:1046A000C8010E94A41D86E0EBE1F4E0DF011D9249
:1046B0008A95E9F7FE2C8AC04D875E878D859E8599
:1046C0006A8B0E9460216A89882309F4BECF662321
:1046D00009F4BBCF20912004822F82958F7090E047
:1046E00002970CF48ECF80911B0490911C049A8346
:1046F00089831B82DD82CC822E83CE0101967FCFFF
:10470000809590958C0D9D1DACCFF62E662309F4F7
:104710009CCF75132EC034132CC02091200420FD93
:104720001FC0822F82958F70D9F0D80115962C93D7
:1047300015978F3049F08F5F982F9295907F822F39
:104740008F70892B15968C93C8010E94A41D86E05A
:10475000F801ABE1B4E001900D928A95E1F793CFB7
:1047600086E0F801ABE1B4E001900D928A95E1F7A3
:104770002DC04D875E878D859E850E9460218111A9
:1047800040CF80912004816080932004C8010E9462
:10479000A41D1CC0662309F458CF4D875E878D8504
:1047A0009E850E946021882309F44FCF2ACF811172
:1047B00048CF0CC0243031050CF047CF9F7009F46E
:1047C00040CFF8019581907F09F03BCF8F2D629605
:1047D0000FB6F894DEBF0FBECDBFDF91CF911F9112
:1047E0000F91FF90EF90DF90CF9008951F93CF939C
:1047F000DF93CDB7DEB72C970FB6F894DEBF0FBEB0
:10480000CDBF4F83588769877A878B879C87CE0176
:1048100007960E942F22882369F08F8198852A8528
:104820003B85232BF1F19F3F09F063C08F3F09F0D7
:1048300060C037C086E0FE013796DE011196019018
:104840000D928A95E1F76F817885EA85FB8530972F
:1048500041F17F3F11F46F3F21F12091EA0330E0F5
:10486000C9010196877099274091E90350E08417A8
:10487000950709F447C069837A83FD83EC8396E04A
:10488000929FD001939FB00D1124A551BC4FFE0102
:10489000319601900D929A95E1F78093EA030E9478
:1048A000A52116E08091E9039091EA038917C1F1EF
:1048B000189FC001112485519C4F0E942F228823EC
:1048C00079F1E091E9031E9FF0011124E551FC4FBD
:1048D0004081518162817381848195810E949521FB
:1048E0008091E90390E00196877099278093E9030E
:1048F000D9CF4F81588569857A858B859C850E94A3
:104900009521CFCF0E945C211092EA031092E90317
:10491000EBE1F4E086E0DF011D928A95E9F7C1CF73
:104920002C960FB6F894DEBF0FBECDBFDF91CF91AE
:104930001F910895EF92FF920F931F93CF93DF93F0
:104940008C01009709F46CC0F12CEE24E394E8018B
:104950002196F8018491843740F4843008F051C0E6
:10496000813081F0823019F15BC0853709F444C091
:10497000A8F19CE7980F903708F052C08F770E94FB
:10498000471D41C00E5F1F4FFE01C49180E28C0F96
:10499000883048F4C7708E2D01C0880FCA95EAF799
:1049A0000E94452714C08C2F0E947F1C2DC00E5FD3
:1049B0001F4FFE01C49180E28C0F883058F4C770FD
:1049C0008E2D01C0880FCA95EAF70E944B270E94DE
:1049D0006C271AC08C2F0E94471D16C00E5F1F4FF8
:1049E000FE01C491CC2381F08FE99FE00197F1F79C
:1049F00000C00000C150F6CF0E5F1F4FFE01F490C3
:104A000003C00E947F1C8E018F2D882309F49FCF45
:104A1000EFE9FFE03197F1F700C000008150F5CFDA
:104A2000DF91CF911F910F91FF90EF90089508951E
:104A300060932504709326048093270490932804A0
:104A40000C9448210F931F93009125041091260484
:104A50002091270430912804DC01CB01802B912B7D
:104A6000A22BB32B8093250490932604A0932704B4
:104A7000B09328041F910F910C9448210F931F931A
:104A800000912504109126042091270430912804D8
:104A9000DC01CB0180239123A223B323809325043F
:104AA00090932604A0932704B09328041F910F919C
:104AB0000C9448210F931F93009125041091260414
:104AC0002091270430912804DC01CB018027912715
:104AD000A227B3278093250490932604A09327044C
:104AE000B09328041F910F910C9448211092210437
:104AF0001092220410922304109224040C94482152
:104B000041E050E060E070E004C0440F551F661FB4
:104B1000771F8A95D2F74093210450932204609323
:104B20002304709324040C94482141E050E060E099
:104B300070E004C0440F551F661F771F8A95D2F797
:104B40008091210490912204A0912304B091240427
:104B5000482B592B6A2B7B2B409321045093220422
:104B600060932304709324040C94482141E050E0A6
:104B700060E070E004C0440F551F661F771F8A95E0
:104B8000D2F7409550956095709580912104909151
:104B90002204A0912304B0912404482359236A23BA
:104BA0007B23409321045093220460932304709349
:104BB00024040C94482141E050E060E070E004C01F
:104BC000440F551F661F771F8A95D2F780912104E5
:104BD00090912204A0912304B091240448275927DE
:104BE0006A277B2740932104509322046093230477
:104BF000709324040C9448210F931F930091210477
:104C0000109122042091230430912404DC01CB0173
:104C1000802B912BA22BB32B809321049093220401
:104C2000A0932304B09324041F910F910C94482166
:104C30000F931F93009121041091220420912304CB
:104C400030912404DC01CB0180239123A223B323E0
:104C50008093210490932204A0932304B09324040E
:104C60001F910F910C9448210F931F9300912104E1
:104C7000109122042091230430912404DC01CB0103
:104C800080279127A227B3278093210490932204A1
:104C9000A0932304B09324041F910F910C944821F6
:104CA0000895CF92DF92EF92FF920F931F93CF93CD
:104CB000DF938C01C0902504D0902604E090270457
:104CC000F09028048091210490912204A091230463
:104CD000B0912404C82AD92AEA2AFB2ACFE1D0E0DD
:104CE000D701C6010C2E04C0B695A7959795879558
:104CF0000A94D2F780FF06C0B8018C2F0E94D30916
:104D0000019721F4219760F780E001C08C2FDF919B
:104D1000CF911F910F91FF90EF90DF90CF9008956A
:104D2000CF93DF93EC010E945126BE010E94D3096C
:104D3000DF91CF910895CB010E9490260895909124
:104D40008402992321F090918502911109C020914C
:104D5000860230918702F90132969FEF40E01FC032
:104D6000982F9695969596959F3050F5E0918602EE
:104D7000F0918702E90FF11D877021E030E0A90171
:104D800002C0440F551F8A95E2F7CA019181892B11
:104D9000818308959F3F39F04F5F4E3041F051912C
:104DA0005813F8CF0DC05111F7CF942FF5CF9F3F77
:104DB00039F0F901E90FF11D97FDFA958283089505
:104DC000089590918402992321F090918502911188
:104DD00009C02091860230918702F9013296205F46
:104DE0003F4F1FC0982F9695969596959F30F0F45B
:104DF000E0918602F0918702E90FF11D877021E0B2
:104E000030E0A90102C0440F551F8A95E2F7CA019C
:104E1000809591818923818308953196E217F30764
:104E200029F090819813F9CF1082F7CF089581E08F
:104E300090E0E0918602F0918702E80FF91F10825E
:104E4000019680319105A9F7089590913C04892B32
:104E500080933C040895809590913C04892380932D
:104E60003C04089510923C04089590913B04892BD2
:104E700080933B040895809590913B04892380930F
:104E80003B04089510923B04089590913A04892BB5
:104E900080933A040895809590913A0489238093F1
:104EA0003A04089510923A040895809329040895CD
:104EB0001092290408958091860290918702FC0146
:104EC00031969C01205F3F4F80E0919191118F5F5F
:104ED000E217F307D1F70895E0918602F091870277
:104EE00080913C048083E0918602F091870290815A
:104EF00080913B04892B8083E0918602F0918702A8
:104F0000908180913A04892B8083809129048823A1
:104F100061F0E0918602F09187029081892B808375
:104F20000E945B2781111092290480918602909142
:104F300087020C944B1B80915E04843039F11092EF
:104F40003E0420E488E190E00FB6F894A8958093A1
:104F500060000FBE2093600080E00E94300580E07A
:104F60000E94AE0A83B7817F846083BF83B781606C
:104F700083BF7894889583B78E7F83BF88E10FB60F
:104F8000F89480936000109260000FBE0895089519
:104F90000895CF9380E00E9430050E94C7270E94A9
:104FA000650C0E94C827C0E08C2F0E94AE0D892B93
:104FB00029F4CF5FC430C1F780E001C081E0CF9118
:104FC00008950E945C2180E00E9430050E94562DC9
:104FD0000E943F1B0C94AE0A1F920F920FB60F92C5
:104FE00011248F939F93AF93BF9380913E048111BF
:104FF00013C080913F0490914004A0914104B0916E
:1050000042044196A11DB11D80933F04909340043A
:10501000A0934104B0934204BF91AF919F918F91AF
:105020000F900FBE0F901F90189582E084BD93E003
:1050300095BD9AEF97BD80936E0008952FB7F894B1
:1050400080913F0490914004A0914104B0914204AA
:105050002FBF0895CF92DF92EF92FF920F931F938D
:105060002FB7F89440913F0450914004609141045F
:10507000709142042FBF6A017B01EE24FF248C0152
:1050800020E030E0C016D106E206F30610F44150ED
:1050900051099A01281B390BC9011F910F91FF90EB
:1050A000EF90DF90CF9008951F920F920FB60F925E
:1050B00011248F939F93AF93BF9380913F0490915E
:1050C0004004A0914104B09142040196A11DB11D7C
:1050D00080933F0490934004A0934104B093420412
:1050E000BF91AF919F918F910F900FBE0F901F9026
:1050F00018950E943C18F8942FEF87EA91E621500A
:1051000080409040E1F700C0000087E090EBDC01B8
:105110008093690490936A04A0936B04B0936C0429
:105120009CE088E10FB6F894A895809360000FBECC
:1051300090936000FFCF0E94DA28811102C00E9484
:10514000B6280E94E52880933D040E94F2288093AF
:10515000670487FB882780F9809385020E94E928ED
:10516000682F70E080E090E00C9418256DEE7EEFE3
:1051700080E090E00E94093260E082E090E00E94CE
:10518000F73160E083E090E00E94F73160E084E076
:1051900090E00E94F73160E085E090E00E94F731F6
:1051A00060E086E090E00E94F7316FEF87E090E0EA
:1051B0000C94F73180E090E00E94F13121E08D3EC7
:1051C0009E4F09F020E0822F089582E090E00C9439
:1051D000E93183E090E00C94E931682F83E090E0BE
:1051E0000C94F73184E090E00C94E931682F84E06E
:1051F00090E00C94F73186E090E00C94E931682F50
:1052000086E090E00C94F73187E090E00C94E9316F
:10521000682F87E090E00C94F7318091450480FF7F
:105220000BC060918B0285E0689FB00111247595D9
:105230006795759567952BC081FF09C060918B02BA
:1052400085E0689FB00111247595679520C082FFA5
:1052500007C060918B0285E0689FB001112417C0E0
:10526000909146049923D1F060918A02961788F7AD
:1052700020918B0285E0289F90011124929FA0012C
:10528000939F500D112470E0CA010E94CF31603805
:10529000710540F46115710539F002C065E070E0F8
:1052A000862F08958FE7089581E008958091450441
:1052B00080FF08C06091890270E0759567957595CB
:1052C000679521C081FF06C06091890270E07595E5
:1052D000679519C082FF04C06091890270E010C018
:1052E000909146049923C1F0609188029617A0F727
:1052F00080918902899FC001112470E00E94CF3102
:105300006038710528F46115710521F0862F089524
:105310008FE7089581E0089561E070E0F4CF803F69
:1053200021F40E940D29819504C0813F29F40E9437
:105330000D29809349040895823F21F40E940D298C
:10534000819504C0833F29F40E940D29809348046D
:105350000895893F19F40E94562905C08A3F31F407
:105360000E945629819580934A0408958B3F21F429
:105370000E945629819504C08C3F29F40E94562929
:1053800080934B040895843F21F480914704816009
:1053900017C0853F21F480914704826011C0863F89
:1053A00021F48091470484600BC0873F21F48091F1
:1053B0004704886005C0883F31F4809147048061CC
:1053C0008093470408958D3F21F4809145048160C6
:1053D0000BC08E3F21F480914504826005C08F3F51
:1053E00029F4809145048460809345040895803FAA
:1053F00039F48091490487FF6CC01092490469C058
:10540000813F29F4809149041816BCF362C0909141
:105410004804823F29F497FF5CC01092480459C0A9
:10542000833F19F41916CCF354C0893F41F480919D
:105430004A0418160CF04DC010924A044AC08A3F24
:1054400029F480914A0487FF44C0F6CF8B3F39F49A
:1054500080914B0487FF3DC010924B043AC08C3FB3
:1054600029F480914B041816BCF333C0843F21F417
:10547000809147048E7F17C0853F21F480914704B7
:105480008D7F11C0863F21F4809147048B7F0BC034
:10549000873F21F480914704877F05C0883F31F41E
:1054A000809147048F7E8093470413C08D3F21F481
:1054B000809145048E7F0BC08E3F21F4809145047E
:1054C0008D7F05C08F3F29F4809145048B7F8093A9
:1054D00045048091480481110EC0809149048111D6
:1054E0000AC080914A04811106C080914B04811149
:1054F00002C010924604089587E494E00E94561B6F
:105500000E941E28909344048093430408951F939F
:10551000CF93DF9380914304909144040E942A2802
:10552000AC0190914604992321F020918C0230E047
:1055300006C020918D028AE0289F90011124421715
:10554000530708F486C080914804C0914904D09163
:105550004A0410914B04811107C0C11176C0D111CA
:1055600074C0111172C075C09F3F19F09F5F909376
:105570004604181624F40E940D2980934804809153
:10558000480487FF05C00E940D2981958093480437
:105590001C1624F40E940D2980934904809149042B
:1055A00087FF05C00E940D29819580934904609171
:1055B0004804662339F1C0914904CC2319F17727B7
:1055C00067FD7095872F972F0E94F12E23E333E319
:1055D00043E35FE30E9401300E94BE2E60934804C3
:1055E0006C2F772767FD7095872F972F0E94F12EDC
:1055F00023E333E343E35FE30E9401300E94BE2EC6
:10560000609349041D1624F40E94562980934A048D
:1056100080914A0487FF05C00E9456298195809396
:105620004A04111624F40E94562980934B04809159
:105630004B0487FF05C00E945629819580934B0437
:10564000DF91CF911F910C947C2A9F3F09F08ECF60
:1056500096CFDF91CF911F910895E7E4F4E085E0C4
:10566000DF011D928A95E9F71092460410924504D5
:105670000895833081F128F4813059F08230D1F0DF
:105680000895853009F449C0B8F1863009F456C050
:10569000089580918D02262F30E0280F311D2F3F75
:1056A000310524F4680F60938D0208958FEF809385
:1056B0008D02089580918C02262F30E0280F311D35
:1056C0002F3F310524F4680F60938C0208958FEF0B
:1056D00080938C02089580918B02262F30E0280F52
:1056E000311D2F3F310524F4680F60938B0208951C
:1056F0008FEF80938B02089580918A02262F30E0ED
:10570000280F311D2F3F310524F4680F60938A0262
:1057100008958FEF80938A02089580918902262F41
:1057200030E0280F311D2F3F310524F4680F6093BE
:10573000890208958FEF80938902089580918802ED
:10574000262F30E0280F311D2F3F310524F4680F3C
:105750006093880208958FEF8093880208958330C4
:1057600011F128F4813049F0823091F008958530AC
:1057700081F120F18630C1F1089580918D02681782
:1057800020F4861B80938D02089510928D02089557
:1057900080918C02681720F4861B80938C020895F8
:1057A00010928C02089580918B02681720F4861B5A
:1057B00080938B02089510928B02089580918A0243
:1057C000681720F4861B80938A02089510928A023B
:1057D000089580918902681720F4861B80938902BE
:1057E000089510928902089580918802681720F424
:1057F000861B8093880208951092880208950F9363
:105800001F93873208F048C08E3108F094C0803171
:1058100009F47EC008F5873009F468C068F4863062
:1058200009F0A4C080913D04817F8E7F80933D0468
:1058300081E080934D049BC08B3009F490C08E3082
:1058400009F094C080913D0482FB222720F991E069
:10585000922790FB82F965C0863109F480C060F41C
:10586000813109F083C00E945C219091850281E022
:1058700089278093850273C0893109F470C08B3108
:1058800009F074C080913D0481FB222720F991E04A
:10589000922790FB81F945C0883309F460C050F429
:1058A000893209F45EC0853309F45BC0873209F49C
:1058B00058C05CC0833409F454C028F48A3308F417
:1058C00055C0895339C0883409F050C00E945C210A
:1058D0000E946C060FEF13ED20E3015010402040B2
:1058E000E1F700C000000E94792839C090913D0482
:1058F000892F8095817080FB90F929F096609860DF
:1059000090933D0434C0997F977F90933D0427C0C6
:1059100080913D0483FB222720F991E0922790FBA0
:1059200083F980933D049923D1F080913D048160F7
:1059300080933D0414C08D5141E050E060E070E080
:105940008A019B0104C0000F111F221F331F8A957B
:10595000D2F7C901B8010E9418250E945C2181E09C
:1059600006C061E070E080E090E0F5CF80E01F913C
:105970000F91089580E0089580E00895CF93C82F97
:1059800080914D04813069F018F08230C9F184C0F3
:10599000E0918602F09187028081823209F07EC018
:1059A00007C0E0918602F09187028081823261F423
:1059B0008C2F0E94BA2C811104C08C2F0E94FF2BC7
:1059C0001DC081E090E01AC08C2F0E94BC2C811178
:1059D00014C0C43179F048F4CB3079F0C03109F00B
:1059E00061C082E080934D0408C0C93219F0C83309
:1059F00021F058C010924D0455C081E0817054C010
:105A0000C93291F120F5C43179F1B0F4C73009F011
:105A100047C08EE180938D0282E380938C028AE0FE
:105A200080938B0284E180938A0288E080938902CC
:105A300088E28093880234C0CE51C63088F5EC2FBE
:105A4000F0E0E85AFC4F808180934C0429C0CE34AA
:105A5000E9F020F4CB3421F56AE013C0C13579F0C8
:105A6000C235F1F461E00DC080914C04882319F037
:105A700010924C0415C081E080934D0415C061E084
:105A800006C080914C040E94392B0AC06AE08091C4
:105A90004C040E94AF2B04C010924D0480E004C05F
:105AA00081E002C080E0AACFCF9108950E94DA2859
:105AB000811102C00E94B6280E94FB2880936804CE
:105AC00080FF02C0869501C080E00C943005809173
:105AD0006804982F9695292F30E0233031054CF437
:105AE0009F5F990F8170892B8160809368040E9469
:105AF000FF288091680486950C9430058091680495
:105B0000982F969591F09158990F8170892B8093D9
:105B100068048E7F91E009F490E08091680490FB26
:105B200080F9809368040E94FF288091680486951C
:105B30000C94300580916804982F909590FB80F923
:105B4000809368040E94FF288091680480FF02C04F
:105B5000869501C080E00C94300590916804892FEF
:105B600086958F5F8F779170843028F4880F892B0A
:105B70008093680402C090936804809168048E7FCB
:105B800091E009F490E08091680490FB80F98093A3
:105B900068040E94FF288091680486950C94300563
:105BA00020916804922F96958927982F990F822F1C
:105BB0008170892B809368048E7F91E009F490E0D6
:105BC0008091680490FB80F9809368040E94FF280C
:105BD0008091680486950C9430055058BB27AA27FD
:105BE0000ED0D1C1C2D130F0C7D120F031F49F3FE7
:105BF00011F41EF4B7C10EF4E095E7FB9FC1E92F45
:105C0000D3D180F3BA17620773078407950718F09A
:105C100071F49EF5EBC10EF4E0950B2EBA2FA02D7A
:105C20000B01B90190010C01CA01A0011124FF2749
:105C3000591B99F0593F50F4503E68F11A16F04044
:105C4000A22F232F342F4427585FF3CF4695379543
:105C50002795A795F0405395C9F77EF41F16BA0B08
:105C6000620B730B840BBAF09150A1F0FF0FBB1FB6
:105C7000661F771F881FC2F70EC0BA0F621F731FFF
:105C8000841F48F4879577956795B795F7959E3F5C
:105C900008F0B3CF9395880F08F09927EE0F9795EA
:105CA0008795089527D108F481E008950CD06BC141
:105CB00063D140F05AD130F021F45F3F19F03EC17A
:105CC000511195C14FC170D198F39923C9F3552350
:105CD000B1F3951B550BBB27AA27621773078407DF
:105CE00038F09F5F5F4F220F331F441FAA1FA9F395
:105CF00033D00E2E3AF0E0E830D091505040E69587
:105D0000001CCAF729D0FE2F27D0660F771F881FE7
:105D1000BB1F261737074807AB07B0E809F0BB0BD6
:105D2000802DBF01FF2793585F4F2AF09E3F5105FA
:105D300068F004C15CC15F3FECF3983EDCF38695EC
:105D400077956795B795F7959F5FC9F7880F911D70
:105D50009695879597F90895E1E0660F771F881F5C
:105D6000BB1F621773078407BA0720F0621B730B0F
:105D7000840BBA0BEE1F88F7E095089504D0689461
:105D8000B11135C1089518D188F09F5790F0B92FFF
:105D90009927B751A0F0D1F0660F771F881F991F80
:105DA0001AF0BA95C9F712C0B13081F01FD1B1E035
:105DB00008951CC1672F782F8827B85F39F0B93F45
:105DC000CCF3869577956795B395D9F73EF4909582
:105DD0008095709561957F4F8F4F9F4F0895E89400
:105DE00009C097FB3EF490958095709561957F4F23
:105DF0008F4F9F4F9923A9F0F92F96E9BB279395D1
:105E0000F695879577956795B795F111F8CFFAF4E0
:105E1000BB0F11F460FF1BC06F5F7F4F8F4F9F4F11
:105E200016C0882311F096E911C0772321F09EE86F
:105E3000872F762F05C0662371F096E8862F70E0D5
:105E400060E02AF09A95660F771F881FDAF7880FAF
:105E50009695879597F9089588D018F011F08CD011
:105E600038F480C0C4C0E92F9FD0B0F35523C9F3E4
:105E7000E7FB6217730784079507A8F199F3E92FE9
:105E8000FF2788232AF03197660F771F881FDAF7DC
:105E9000952F5527442332F091505040220F331F45
:105EA000441FD2F7BB27E91BF50B621B730B840B56
:105EB000B109C1F222F4620F731F841FB11D319723
:105EC0002AF0660F771F881FBB1FEFCF91505040FD
:105ED0005AF041F0882332F0660F771F881F9150E7
:105EE0005040C1F7939530C08695779567959F5F31
:105EF000D9F7F8CF990F0008550FAA0BE0E8FEEF8D
:105F000016161706E807F907C0F012161306E4077D
:105F1000F50798F0621B730B840B950B39F40A2676
:105F200061F0232B242B252B21F408950A2609F454
:105F3000A140A6958FEF811D811D089597F99F6758
:105F400080E870E060E008959F3F31F0915020F4C8
:105F5000879577956795B795880F911D9695879545
:105F600097F908959FEF80EC089500240A9416167F
:105F7000170618060906089500240A941216130637
:105F8000140605060895092E0394000C11F48823C5
:105F900052F0BB0F40F4BF2B11F460FF04C06F5FE1
:105FA0007F4F8F4F9F4F089557FD9058440F551FB7
:105FB00059F05F3F71F04795880F97FB991F61F08B
:105FC0009F3F79F087950895121613061406551F02
:105FD000F2CF4695F1DF08C0161617061806991F6E
:105FE000F1CF86957105610508940895E894BB2763
:105FF00066277727CB0197F908957CDF08F48FEFA8
:1060000008950BD0C0CFB1DF28F0B6DF18F095238C
:1060100009F094CFA7CF1124EACFC6DFA0F3959F54
:10602000D1F3950F50E0551F629FF001729FBB277F
:10603000F00DB11D639FAA27F00DB11DAA1F649F2B
:106040006627B00DA11D661F829F2227B00DA11DDE
:10605000621F739FB00DA11D621F839FA00D611D64
:10606000221F749F3327A00D611D231F849F600D85
:10607000211D822F762F6A2F11249F5750408AF0BE
:10608000E1F088234AF0EE0FFF1FBB1F661F771F4A
:10609000881F91505040A9F79E3F510570F04ECF98
:1060A000A6CF5F3FECF3983EDCF386957795679536
:1060B000B795F795E7959F5FC1F7FE2B880F911D68
:1060C0009695879597F90895FA01EE0FFF1F309680
:1060D0002105310599F16115710561F48038BFE33F
:1060E0009B0749F168949038810561F08038BFEFD3
:1060F0009B0741F0992342F5FF3FE105310521055A
:1061000011F1E8940894E795D901AA2329F4AB2F5B
:10611000BE2FF85FD0F310C0FF5F70F4A695E0F7D4
:10612000F73950F019F0FF3A38F49F779F930CD06D
:106130000F9007FC905808953EF014CF60E070E097
:1061400080E89FE308954FE79F775F934F933F93D6
:106150002F939ED02F913F914F915F9152DF05C0B9
:1061600019F40EF0EBCE42CFFDCE26DFC8F3963801
:10617000C0F707F80F92E8942BE33AEA48EB5FE7A1
:106180004EDF0F920F920F924DB75EB70F92C0D0B5
:10619000ECEFF0E016D04F915F91EF91FF91E59514
:1061A000EE1FFF1F49F0FE57E0684427EE0F441F23
:1061B000FA95E1F74195550B32D00F9007FE26C0B6
:1061C0000895DF93CF931F930F93FF92EF92DF9287
:1061D0007B018C01689405C0DA2EEF011EDFFE0101
:1061E000E894A5912591359145915591AEF3EF0134
:1061F00006DDFE019701A801DA9479F7DF90EF90B0
:10620000FF900F911F91CF91DF9108959B01AC01F9
:1062100060E070E080E89FE349CD90CE95CECCDE83
:10622000E8F39923D9F3940F511DBBF391505040DB
:1062300094F059F0882332F0660F771F881F915031
:106240005040C1F79E3F510544F7880F911D969528
:10625000879597F908955F3FACF0983E9CF0BB2777
:10626000869577956795B79508F4B1609395C1F7D2
:10627000BB0F58F711F460FFE8CF6F5F7F4F8F4F70
:106280009F4FE3CFB4CE0EF05FCE6CCE689456CE67
:1062900093DEC8F39923D1F3C6F3DF93CF931F9313
:1062A0000F93FF92C92FDD2788232AF02197660FCD
:1062B000771F881FDAF720E030E040E85FEB9FE3CC
:1062C000883920F0803E30F021968F7787DCE4E239
:1062D000F1E003C083DCE1E5F1E073DF8B01BE0197
:1062E000EC01FB2E6F5771097595771F880B990B81
:1062F00078DD28E132E741E35FE38FDEAF2D9801DF
:10630000AE01FF900F911F91CF91DF9178DC3BCED2
:10631000FA01DC01AA0FBB1F9B01AC01BF5728F497
:1063200022273327442750781FC0B75188F4AB2F5A
:106330000024469537952795011CA395D2F300209C
:1063400069F0220F331F441FB395DAF30DD045CC0B
:1063500061307105A0E88A07B94630F49B01AC01B1
:106360006627772788279078309621F0208331831D
:10637000428353830895AA1BBB1B51E107C0AA1F88
:10638000BB1FA617B70710F0A61BB70B881F991FD6
:106390005A95A9F780959095BC01CD01089597FB7A
:1063A000072E16F4009407D077FD09D00E94BB3168
:1063B00007FC05D03EF4909581959F4F0895709508
:1063C00061957F4F0895EE0FFF1F0590F491E02D2A
:1063D0000994F999FECF92BD81BDF89A992780B5AD
:1063E0000895A8E1B0E042E050E00C941132262F6D
:1063F000F999FECF92BD81BDF89A019700B40216BB
:1064000039F01FBA20BD0FB6F894FA9AF99A0FBE68
:1064100008950196272F0E94F8310C94F731DC0182
:10642000CB01FC01F999FECF06C0F2BDE1BDF89A9F
:10643000319600B40D9241505040B8F70895F89449
:02644000FFCF8C
:106442000C52D02445000000410000DC4400000052
:106452004152D0A4440000404100005C44000000CE
:106462004148F17644000000415C978A44000000F4
:10647200411FD592440000004152D0A444000000C4
:10648200415CFFB844000000410AA7CF440000006D
:10649200410000DC44000000410AA7CF4400000094
:1064A200410000DC440000004100000000000080C8
:1064B2004000005C450000404100000000000080F8
:1064C2004052D02445000040410AA7CF44000000BA
:1064D200410000DC44000000410000000000008098
:1064E2004052D024450000404100000000000080DE
:1064F2004000005C45000040410AA7CF4400000074
:10650200410000DC44000000410000000000008067
:106512004052D024450000404100000000000080AD
:10652200400AA74F45000040410AA7CF440000009F
:10653200410000DC44000000410000000000008037
:106542004052D024450000004100000000000080BD
:10655200405CFF3845000000410000000000008060
:106562004052D02445000000410AA7CF4400000059
:10657200410000DC440000004100000000000080F7
:106582004052D024450000804153D02445000040B1
:106592004160970A450000004154D0A44400000025
:1065A200410000DC440000004160970A450000A061
:1065B20041050000003F0000C8424314D114AE144C
:1065C2007A14461401012A042808140A321E000013
:1065D200020004000500070009000B000C000E0079
:1065E2001000110013001500170018001A001C00FB
:1065F2001D001F002100230024002600280029007E
:106602002B002D002F0030003200340035003700FF
:1066120039003B0040004500250026006100600073
:1066220020003700640065006600670044004600F1
:10663200240047003149803F5D8B803FF8BF803F97
:10664200CAE1803F73ED803FCAE1803FF8BF803FDF
:106652005D8B803F3149803F0000803FF16D7F3F7D
:1066620075EA7E3F4C827E3F833F7E3F84287E3F99
:10667200833F7E3F4C827E3F75EA7E3FF16D7F3FD6
:106682000000803F3F4D363975092809F208B908E4
:106692004C0865087E0897080102030405060708EE
:0266A2000900ED
:00000001FF

@ -162,11 +162,6 @@ endif
endif
ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
SRC := backlight.c $(SRC)
endif
# Optimize size but this may cause error "relocation truncated to fit"
#EXTRALDFLAGS = -Wl,--relax

@ -1,61 +0,0 @@
#include <avr/io.h>
#include "backlight.h"
#define CHANNEL OCR1C
void backlight_init_ports()
{
// Setup PB7 as output and output low.
DDRB |= (1<<7);
PORTB &= ~(1<<7);
// Use full 16-bit resolution.
ICR1 = 0xFFFF;
// I could write a wall of text here to explain... but TL;DW
// Go read the ATmega32u4 datasheet.
// And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
// Pin PB7 = OCR1C (Timer 1, Channel C)
// Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
// (i.e. start high, go low when counter matches.)
// WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
// Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
backlight_init();
}
void backlight_set(uint8_t level)
{
if ( level == 0 )
{
// Turn off PWM control on PB7, revert to output low.
TCCR1A &= ~(_BV(COM1C1));
CHANNEL = 0x0;
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
}
else if ( level == BACKLIGHT_LEVELS )
{
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
// Set the brightness
CHANNEL = 0xFFFF;
}
else
{
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
// Set the brightness
CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
}
}

@ -14,8 +14,8 @@
#define _DVORAK 2
#define _LOWER 3
#define _RAISE 4
#define _ADJUST 5
#define _MUSIC 6
#define _MUSIC 5
#define _ADJUST 16
// Macro name shortcuts
#define QWERTY M(_QWERTY)
@ -24,12 +24,12 @@
#define LOWER M(_LOWER)
#define RAISE M(_RAISE)
#define M_BL 5
#ifdef AUDIO_ENABLE
#define AUD_OFF M(6)
#define AUD_ON M(7)
#endif
#define AUD_OFF M(6)
#define AUD_ON M(7)
#define MUS_OFF M(8)
#define MUS_ON M(9)
#define VC_IN M(10)
#define VC_DE M(11)
// Fillers to make layering more clear
#define _______ KC_TRNS
@ -142,6 +142,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
/* Music (reserved for process_action_user)
*
*/
[_MUSIC] = {
{XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
{XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
{XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
{XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
{XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
},
/* Adjust (Lower + Raise)
* ,-----------------------------------------------------------------------------------.
* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
@ -150,7 +161,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | | | |Musoff|Mus on| | | | | | | |
* | |Voice-|Voice+|Musoff|Mus on| | | | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
@ -158,21 +169,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_ADJUST] = {
{KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12},
{_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
{_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______},
{_______, _______, _______, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
},
/* Music (reserved for process_action_user)
*
*/
[_MUSIC] = {
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
{_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______},
{_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
}
};
const uint16_t PROGMEM fn_actions[] = {
@ -187,47 +189,16 @@ float start_up[][2] = {
{440.0*pow(2.0,(26)/12.0), 8}
};
float tone_qwerty[][2] = {
{440.0*pow(2.0,(23)/12.0), 8},
{440.0*pow(2.0,(24)/12.0), 8},
{0, 4},
{440.0*pow(2.0,(31)/12.0), 16}
};
float tone_colemak[][2] = {
{440.0*pow(2.0,(23)/12.0), 8},
{440.0*pow(2.0,(24)/12.0), 8},
{0, 4},
{440.0*pow(2.0,(31)/12.0), 12},
{0, 4},
{440.0*pow(2.0,(35)/12.0), 12}
};
float tone_dvorak[][2] = {
{440.0*pow(2.0,(23)/12.0), 8},
{440.0*pow(2.0,(24)/12.0), 8},
{0, 4},
{440.0*pow(2.0,(31)/12.0), 8},
{0, 4},
{440.0*pow(2.0,(33)/12.0), 8},
{0, 4},
{440.0*pow(2.0,(31)/12.0), 8}
};
float tone_qwerty[][2] = SONG(QWERTY_SOUND);
float tone_dvorak[][2] = SONG(DVORAK_SOUND);
float tone_colemak[][2] = SONG(COLEMAK_SOUND);
float tone_music[][2] = {
{440.0*pow(2.0,(12)/12.0), 8},
{440.0*pow(2.0,(14)/12.0), 8},
{440.0*pow(2.0,(16)/12.0), 8},
{440.0*pow(2.0,(17)/12.0), 8},
{440.0*pow(2.0,(19)/12.0), 8},
{440.0*pow(2.0,(21)/12.0), 8},
{440.0*pow(2.0,(23)/12.0), 8},
{440.0*pow(2.0,(24)/12.0), 8}
};
float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
float goodbye[][2] = SONG(GOODBYE_SOUND);
#endif
void persistant_default_layer_set(uint16_t default_layer) {
eeconfig_write_default_layer(default_layer);
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
}
@ -312,17 +283,43 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
case 9:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_music, false, 0);
PLAY_NOTE_ARRAY(music_scale, false, 0);
layer_on(_MUSIC);
#endif
}
break;
case 10:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
voice_iterate();
PLAY_NOTE_ARRAY(music_scale, false, 0);
#endif
}
break;
case 11:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
voice_deiterate();
PLAY_NOTE_ARRAY(music_scale, false, 0);
#endif
}
break;
}
return MACRO_NONE;
};
void matrix_init_user(void) {
#ifdef AUDIO_ENABLE
_delay_ms(20); // gets rid of tick
PLAY_NOTE_ARRAY(start_up, false, 0);
#endif
}
#ifdef AUDIO_ENABLE
uint8_t starting_note = 0x0C;
int offset = 7;
int offset = 0;
void process_action_user(keyrecord_t *record) {
@ -336,9 +333,10 @@ void process_action_user(keyrecord_t *record) {
}
void matrix_init_user(void) {
#ifdef AUDIO_ENABLE
init_notes();
play_notes(&start_up, false, 0);
#endif
void play_goodbye_tone()
{
PLAY_NOTE_ARRAY(goodbye, false, 0);
_delay_ms(150);
}
#endif

@ -39,3 +39,64 @@ void matrix_scan_kb(void) {
void process_action_kb(keyrecord_t *record) {
process_action_user(record);
}
#ifdef BACKLIGHT_ENABLE
#define CHANNEL OCR1C
void backlight_init_ports()
{
// Setup PB7 as output and output low.
DDRB |= (1<<7);
PORTB &= ~(1<<7);
// Use full 16-bit resolution.
ICR1 = 0xFFFF;
// I could write a wall of text here to explain... but TL;DW
// Go read the ATmega32u4 datasheet.
// And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
// Pin PB7 = OCR1C (Timer 1, Channel C)
// Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
// (i.e. start high, go low when counter matches.)
// WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
// Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
backlight_init();
}
void backlight_set(uint8_t level)
{
if ( level == 0 )
{
// Turn off PWM control on PB7, revert to output low.
TCCR1A &= ~(_BV(COM1C1));
CHANNEL = 0x0;
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
}
else if ( level == BACKLIGHT_LEVELS )
{
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
// Set the brightness
CHANNEL = 0xFFFF;
}
else
{
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
// Set the brightness
CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
}
}
#endif

@ -10,6 +10,7 @@
#include "rgblight.h"
#endif
#include <stddef.h>
#include <avr/io.h>
#ifdef MIDI_ENABLE
#include <keymap_midi.h>
#endif

@ -1,1713 +0,0 @@
:100000000C9410030C9454030C9454030C94540358
:100010000C9454030C9454030C9454030C94540304
:100020000C9454030C9454030C9410170C94E21782
:100030000C94BD290C9454030C9454030C94540355
:100040000C9454030C9454030C9454030C945403D4
:100050000C9454030C942A2A0C9454030C945403C7
:100060000C9454030C9454030C9454030C945403B4
:100070000C9454030C9454030C9454030C945403A4
:100080000C94440E0C9454030C9454030C94540399
:100090000C9454030C9454030C9454030C94540384
:1000A0000C9454030C9454030C9454030763423689
:1000B000B79BD8A71A39685618AEBAAB558C1D3CF9
:1000C000B7CC5763BD6DEDFD753EF6177231BF00BD
:1000D0000000803F08000000BE922449123EABAAF7
:1000E000AA2ABECDCCCC4C3E00000080BEABAAAA52
:1000F000AA3E00000000BF000000803F000000009A
:1001000000084178D3BB4387D1133D190E3CC3BDD2
:100110004282AD2B3E68EC8276BED98FE1A93E4C7F
:1001200080EFFFBE01C4FF7F3F00000000003500EC
:100130001E001F00200021002200230024002500B3
:10014000260027002A002B0014001A0008001500C2
:1001500017001C0018000C00120013002A002900D0
:1001600004001600070009000A000B000D000E0035
:100170000F0033003400E1001D001B0006001900D1
:10018000050011001000360037003800280000304C
:10019000E000E200E30003522C002C000452500067
:1001A000510052004F0035001E001F0020002100AA
:1001B0002200230024002500260027002A002B000F
:1001C00014001A00090013000A000D000F001800A7
:1001D0001C0033002A002900040015001600170037
:1001E00007000B00110008000C0012003400E100B1
:1001F0001D001B000600190005000E00100036004F
:100200003700380028000030E000E200E30003522D
:100210002C002C0004525000510052004F003500B9
:100220001E001F00200021002200230024002500C2
:10023000260027002A002B00340036003700130068
:100240001C0009000A00060015000F002A00290002
:1002500004001200080018000C0007000B00170033
:10026000110016003800E100330014000D000E00EC
:100270001B00050010001A0019001D0028000030A6
:10028000E000E200E30003522C002C000452500076
:10029000510052004F0035001E001F0020002100B9
:1002A0002200230024002500260027002A00350212
:1002B0001E021F0220022102220223022402250222
:1002C000260227022A0001003A003B003C003D00C4
:1002D0003E003F002D022E022F02300231020100AB
:1002E00040004100420043004400450000530153D8
:1002F0000253005001000100010001000100010053
:10030000010001000100AB00AA00A900AE00350009
:100310001E001F00200021002200230024002500D1
:10032000260027002A0035001E001F0020002100A3
:100330002200230024002500260027002A000100B7
:100340003A003B003C003D003E003F002D002E00E7
:100350002F00300031000100400041004200430006
:1003600044004500005301530253005001000100B6
:100370000100010001000100010001000100AB00CB
:10038000AA00A900AE00006000600060006000608C
:10039000006000600060006000600060006000605D
:1003A000006000600060006000600060006000604D
:1003B000006000600060006000600060006000603D
:1003C000006000600060006000600060006000602D
:1003D000006000600060006000600060006000601D
:1003E00000600060006000300100010001000100B9
:1003F00001000100010000600060006000602A034D
:1004000054006800650020005000720065006F0015
:100410006E006900630020004B00650079006200F7
:100420006F0061007200640000002C034F00720036
:10043000740068006F006C0069006E006500610068
:10044000720020004B006500790062006F006100BF
:100450007200640073000000040309040902D00064
:10046000060100A0FA0904000001030101000921AE
:1004700011010001223F000705810308000A090459
:1004800001000103010200092111010001224D00B8
:100490000705820308000A090402000103000000A6
:1004A0000921110100012236000705830308000A13
:1004B00009040300020300000009211101000122C8
:1004C0002000070584032000010705040320000124
:1004D00009040400000101000009240100010900D1
:1004E00001050904050002010300000724010001C1
:1004F0004100062402010100062402020200092430
:1005000003010301020100092403020401010100A7
:100510000905060240000500000525010101090545
:1005200085024000050000052501010312011001AC
:1005300000000008EDFE61600100010200010631CB
:10054000FF0974A1010975150025FF952075088123
:10055000020976150025FF952075089102C0050156
:100560000980A101850216010026B7001A01002AA0
:10057000B700751095018100C0050C0901A1018526
:1005800003160100269C021A01002A9C0275109590
:10059000018100C005010902A1010901A1000509AD
:1005A000190129051500250195057501810295019F
:1005B000750381010501093009311581257F9502F7
:1005C0007508810609381581257F95017508810612
:1005D000050C0A38021581257F950175088106C032
:1005E000C005010906A101050719E029E715002545
:1005F00001950875018102950175088101050819A9
:100600000129059505750191029501750391010573
:1006100007190029FF150025FF950675088100C000
:1006200011241FBECFEFDAE0DEBFCDBF04B603FE5C
:1006300024C08091050490910604A0910704B09114
:1006400008048730904BA740B04BB9F410920504D2
:1006500010920604109207041092080414BE84B786
:10066000877F84BF88E10FB6F89480936000109272
:1006700060000FBEE0E0F8E3099512E0A0E0B1E011
:10068000E6ECF9E602C005900D92A832B107D9F761
:1006900014E0A8E2B2E001C01D92A530B107E1F775
:1006A0000E94C8130C94E1340C94000061111DC029
:1006B000FC018281882351F085EE0E94901E0E94E9
:1006C000BC3080E290E0A0E0B0E007C085EE0E9480
:1006D000581F81E090E0A0E0B0E08093E1029093A9
:1006E000E202A093E302B093E40280E090E0089578
:1006F0000E94370E40E050E069E070E080E091E059
:100700000C94880F08950E948B036E9A769A0C942D
:1007100078030C948203279A2F988FEF9FEF909382
:100720008700809386008AE08093800089E180932F
:1007300081000C94653081110BC080918000877F0F
:100740008093800010928D0010928C002F98089555
:100750002F98833041F480918000886080938000DE
:100760008FEF9FEF12C0909180009860909380006F
:1007700023E030E0281B3109220F331F8FEF9FEF5A
:1007800002C0969587952A95E2F790938D00809305
:100790008C0008958B3B910568F4883A910530F5FB
:1007A000853A9105C0F48430910598F4019709F0D9
:1007B0006FC071C0803E910508F46AC0883E910503
:1007C00040F09C01205F31092031310508F060C004
:1007D0005CC09C01A1C0853A910509F45FC0863ACE
:1007E000910509F45EC023E830E496C0883A91058B
:1007F00009F45AC0893A910509F459C08A3A910519
:1008000009F458C08B3A910509F457C08C3A910508
:1008100009F456C08D3A910509F455C0803B910505
:1008200009F454C08E3A910509F453C08F3A9105EA
:1008300009F452C0813B910509F451C0823B9105F6
:1008400009F450C0833B910509F44FC0843B9105E6
:1008500009F44EC0853B910509F44DC0863B9105D6
:1008600009F44CC0873B910509F44BC0883B9105C6
:1008700009F44AC0893B910509F449C08A3B9105B6
:1008800009F048C02AE236E447C09C01306544C004
:1008900020E030E041C021E030E03EC021E830E41B
:1008A0003BC022E830E438C022EE34E435C029EE03
:1008B00034E432C02AEE34E42FC025EB34E42CC0FB
:1008C00026EB34E429C027EB34E426C02CEC34E4D6
:1008D00023C02DEC34E420C023E835E41DC02AE811
:1008E00035E41AC022E935E417C024E935E414C020
:1008F00021E236E411C023E236E40EC024E236E4FD
:100900000BC025E236E408C026E236E405C027E243
:1009100036E402C020E034E4C90108959CE0799FE8
:10092000F00111249CE3899FE00DF11D1124E60FD5
:10093000F11DEE0FFF1FE25DFE4F25913491C901BD
:100940000895880F991F82559040FC01259134919C
:10095000C9010895880F991F825D9E4FFC01259162
:100960003491C90108950E948E049C019A958115C5
:100970009F4110F4C9010895C90190528115904119
:1009800028F4C9019F700E94AA040895C9019053D8
:100990008115904120F4C9019927906C0895C901EF
:1009A0009054409728F4C9018F709927946D089549
:1009B000203180E4380719F480E091ED0895213169
:1009C00090E4390719F480E090ED0895223140E475
:1009D000340719F480E092ED0895233180E438075C
:1009E00019F480E093ED0895211590E53907A1F4FD
:1009F0000E948B2340E065E088E491E00E94880F2C
:100A00002FEF44E38CE0215040408040E1F700C0EC
:100A100000000E944F2A1EC1213090E5390731F4B1
:100A20008091F10281608093F10214C1C901905557
:100A30008115904108F062C0432F55274F7055270C
:100A400041305105F9F4C90174E0880F991F7A9576
:100A5000E1F788279370B901E3E0660F771FEA9505
:100A6000E1F760767727862B972B9C6823703327D6
:100A700002C0440F551F2A95E2F74F715527842B6A
:100A8000952B08954230510529F4922F8827816FC4
:100A9000906A089543305105B9F4C90153E0880FB5
:100AA000991F5A95E1F7807E97702370332741E0B4
:100AB00050E002C0440F551F2A95E2F74F715527A9
:100AC000842B952B9C6808954430510589F5C90104
:100AD00043E0880F991F4A95E1F7807E9770237055
:100AE000332741E050E002C0440F551F2A95E2F73A
:100AF0004F715527842B952B9A680895C9019056FC
:100B00008115904118F4C901906F0895C90190575B
:100B10008115904120F4C9019F7090620895C90128
:100B200090588115904120F4C9019F70906A0895F2
:100B3000203E3105E0F4203C310568F521333105D4
:100B400009F475C048F42932310509F46BC02A3222
:100B5000310509F07BC075C02933310501F1223818
:100B60003105E9F02533310509F070C051C0233E4D
:100B70003105B1F140F4203E3105D1F0223E31057E
:100B800009F064C01CC0263E310579F1273E3105CD
:100B900009F05CC038C0C9010E94A1040895809189
:100BA000020380FD02C081FF51C080EE90E04FC083
:100BB0008091020380FFF9CF89E390E048C08091E3
:100BC000020382FF0AC08091020384FF03C080E019
:100BD00090E03DC083EE90E03AC082EE90E037C0F6
:100BE0008091020382FFEFCFF8CF8091020383FF51
:100BF00007C08091020384FDEACF87EE90E027C012
:100C000086EE90E024C08091020383FFF2CFF8CFFC
:100C10008091020385FF03C089E290E018C085E35C
:100C200090E015C08091020385FDF9CFF5CF80914A
:100C3000020386FF03C08AE290E009C081E390E0EE
:100C400006C08091020386FDF9CFF5CFC9010E944D
:100C5000CA030895089508950C942B065F926F922D
:100C60007F928F929F92AF92BF92CF92DF92EF923C
:100C7000FF920F931F93CF93DF93CDB7DEB72A97E1
:100C80000FB6F894DEBF0FBECDBF9E012F5F3F4F62
:100C90004E018BE0880E911C60E070E000E010E0F7
:100CA000E12CF12CC12CD12CA12CB12C8AE0782E76
:100CB000622E532E41E050E0E3E9F1E0A62DB52D80
:100CC000872D01900D928A95E1F7F901819191911B
:100CD0009F01FC01E07FFF27E032F10559F48F709E
:100CE0009927FA0102C0EE0FFF1F8A95E2F7AE2A9C
:100CF000BF2A37C0E033F10559F48F709927FA0104
:100D000002C0EE0FFF1F8A95E2F7CE2ADF2A29C024
:100D1000E034F10559F48F709927FA0102C0EE0F03
:100D2000FF1F8A95E2F7EE2AFF2A1BC0E035F10586
:100D300059F48F709927FA0102C0EE0FFF1F8A95B0
:100D4000E2F70E2B1F2B0DC0E036F10551F48F702A
:100D50009927FA0102C0EE0FFF1F8A95E2F76E2B6A
:100D60007F2B2815390509F0A7CF94B18A2D8095DE
:100D7000892384B985B18A2985B997B18C2D80954D
:100D8000892387B988B18C2988B99AB18E2D80952D
:100D900089238AB98BB18E298BB99DB1802F80951B
:100DA00089238DB98EB1802B8EB990B3862F809513
:100DB000892380BB81B3862B81BB2A960FB6F8941A
:100DC000DEBF0FBECDBFDF91CF911F910F91FF907E
:100DD000EF90DF90CF90BF90AF909F908F907F90DB
:100DE0006F905F9008955F926F927F928F929F9223
:100DF000AF92BF92CF92DF92EF92FF920F931F9329
:100E0000CF93DF93CDB7DEB768970FB6F894DEBF08
:100E10000FBECDBF85B7806885BF85B7806885BFA9
:100E20000E942E069E012F5F3F4F4E0189E1880EE2
:100E3000911C60E070E000E010E0E12CF12CC12C8E
:100E4000D12CA12CB12C98E1792E622E532E41E0A9
:100E500050E0EDE9F1E0A62DB52D872D01900D9222
:100E60008A95E1F7F901819191919F01FC01E07F61
:100E7000FF27E032F10559F48F709927FA0102C07B
:100E8000EE0FFF1F8A95E2F7AE2ABF2A37C0E03384
:100E9000F10559F48F709927FA0102C0EE0FFF1F78
:100EA0008A95E2F7CE2ADF2A29C0E034F10559F409
:100EB0008F709927FA0102C0EE0FFF1F8A95E2F7A3
:100EC000EE2AFF2A1BC0E035F10559F48F709927EF
:100ED000FA0102C0EE0FFF1F8A95E2F70E2B1F2BBF
:100EE0000DC0E036F10551F48F709927FA0102C068
:100EF000EE0FFF1F8A95E2F76E2B7F2B2815390521
:100F000009F0A7CF94B18A2D8095892384B985B142
:100F10008A2985B997B18C2D8095892387B988B1A5
:100F20008C2988B99AB18E2D809589238AB98BB185
:100F30008E298BB99DB1802F809589238DB98EB173
:100F4000802B8EB990B3862F8095892380BB81B387
:100F5000862B81BB10922902109228021092330234
:100F60001092320210922B0210922A021092350235
:100F70001092340210922D0210922C02109237021D
:100F80001092360210922F0210922E021092390205
:100F900010923802109231021092300210923B02ED
:100FA00010923A0268960FB6F894DEBF0FBECDBF1E
:100FB000DF91CF911F910F91FF90EF90DF90CF9035
:100FC000BF90AF909F908F907F906F905F900C94A8
:100FD00083035F926F927F928F929F92AF92BF92A4
:100FE000CF92DF92EF92FF920F931F93CF93DF93F5
:100FF000CDB7DEB7A2970FB6F894DEBF0FBECDBF58
:101000007E0149E1E40EF11C22E3C22E22E0D22E41
:101010005E0153E2A50EB11C3AE0532E470101E0F8
:1010200010E048E1642E55E0752EE3E9F1E0D401CB
:10103000852D01900D928A95E1F7F70181919191AB
:101040007F019C01207F33272032310589F424B1B0
:101050008F709927A80102C0440F551F8A95E2F7A7
:10106000CA01242B24B995B18095892385B94FC035
:101070002033310589F427B18F709927F80102C018
:10108000EE0FFF1F8A95E2F7CF012E2B27B998B1FB
:101090008095892388B93BC02034310589F42AB171
:1010A0008F709927A80102C0440F551F8A95E2F757
:1010B000CA01242B2AB99BB1809589238BB927C0FB
:1010C0002035310589F42DB18F709927F80102C0C0
:1010D000EE0FFF1F8A95E2F7CF012E2B2DB99EB19F
:1010E000809589238EB913C02036310581F420B351
:1010F0008F709927A80102C0440F551F8A95E2F707
:10110000CA01242B20BB91B38095892381BB50EA6F
:101110005A95F1F7BE016F5F7F4F80E090E020E0CD
:1011200030E0EDE9F1E0DE011196462D01900D92DF
:101130004A95E1F7FB0141915191BF01FA01E07F2E
:10114000FF27E032F10511F4E3B113C0E033F105FC
:1011500011F4E6B10EC0E034F10511F4E9B109C0B3
:10116000E035F10511F4ECB104C0E036F105B9F455
:10117000EFB1F0E04F70552702C0F595E7954A951D
:10118000E2F7E0FD08C0A801022E02C0440F551F7F
:101190000A94E2F702C040E050E0842B952B2F5FC9
:1011A0003F4F2C30310509F0BCCFF6012081318151
:1011B0002817390721F091838083709270010E9473
:1011C0002E06F2E0CF0ED11CEA14FB0409F02DCF5D
:1011D000809170018823A1F1815080937001882350
:1011E00039F08FE99FE00197F1F700C0000028C0B7
:1011F00080913202909133029093290280932802C9
:10120000809134029091350290932B0280932A02B0
:10121000809136029091370290932D0280932C0298
:10122000809138029091390290932F0280932E0280
:1012300080913A0290913B02909331028093300268
:101240000E94890381E0A2960FB6F894DEBF0FBE1C
:10125000CDBFDF91CF911F910F91FF90EF90DF9065
:10126000CF90BF90AF909F908F907F906F905F9046
:101270000895E82FF0E0EE0FFF1FE85DFD4F80813D
:10128000918108950895CF92DF92EF92FF920F938C
:101290001F93CF93DF93CDB7DEB7CC5BD2400FB6B1
:1012A000F894DEBF0FBECDBF8C01862F642F88233C
:1012B00079F0F80192812FE7482F992329F084E0F3
:1012C00093E00E94EC1904C084E093E00E94FC19B2
:1012D000F80180818B3091F59181943009F0A8C29A
:1012E0009281809173019923B1F08F5F8093730194
:1012F00096E4E5EBF1E0DE01A958BD4F01900D92B7
:101300009A95E1F7E0917101F0917201EE0FFF1FE4
:1013100027E732E036C096E4E5EBF1E0DE01AF5CB2
:10132000BD4F01900D929A95E1F7E0917101F09116
:101330007201EE0FFF1F21E332E093C08A3009F003
:10134000CBC0F8019181943009F072C292818091F2
:101350007301992309F473C081508093730196E45B
:10136000E5EBF1E0DE01A551BE4F01900D929A959B
:10137000E1F7E0917101F0917201EE0FFF1F2BEE8A
:1013800031E02C0F3D1FE20FF31F60817181680F68
:10139000711D882777FD8095982F0E94003220E0EC
:1013A00030E040E451E40E94653120E030E040E864
:1013B00050E40E94FD309B01AC0160E070E080E0F1
:1013C00090E40E94173321E230ED42E053E40E94A2
:1013D000B4324CE050E00E94E30F20E04BE760E0C5
:1013E00084E093E00E94DC1920E04BE761E084E0B8
:1013F00093E00E94DC1920E04BE762E084E093E098
:101400000E94DC1920E04BE763E084E093E00E9457
:10141000DC1920E04BE764E084E093E0C454DD4F46
:101420000FB6F894DEBF0FBECDBFDF91CF911F91F5
:101430000F91FF90EF90DF90CF900C94DC1996E421
:10144000E5EBF1E0DE01AB55BE4F01900D929A95B0
:10145000E1F7E0917101F0917201EE0FFF1F25EAB3
:1014600031E02C0F3D1FE20FF31F60817181680F87
:10147000711D882777FD8095982F0E94003220E00B
:1014800030E040E451E40E94653120E030E040E883
:1014900050E40E94FD309B01AC0160E070E080E010
:1014A00090E40E94173321E230ED42E053E40E94C1
:1014B000B4320E94130DC454DD4F0FB6F894DEBF52
:1014C0000FBECDBFDF91CF911F910F91FF90EF9095
:1014D000DF90CF900C94E60C893009F0D3C0F8016E
:1014E0009181943009F0A4C19281992309F4A0C19B
:1014F0008091710190917201019690937201809395
:10150000710120E04BE760E084E093E00E94DC1989
:1015100020E04BE761E084E093E00E94DC1920E0EA
:101520004BE762E084E093E00E94DC1920E04BE7A7
:1015300063E084E093E00E94DC1920E04BE764E084
:1015400084E093E00E94DC190E94E60C00E010E0C9
:10155000E6E4FE2E80917301E5EBF1E0DE01A15A95
:10156000BE4F9F2D01900D929A95E1F7E091710188
:10157000F0917201E00FF11FEE0FFF1F2FE531E038
:101580002C0F3D1FE20FF31F60817181680F711DE9
:10159000882777FD8095982F0E94003220E030E068
:1015A00040E451E40E94653120E030E040E850E43E
:1015B0000E94FD309B01AC0160E070E080E090E4AF
:1015C0000E94173321E230ED42E053E40E94B4322E
:1015D0004CE050E00E94E30F3FEF87EE93E0315084
:1015E00080409040E1F700C0000080917301E5EB7E
:1015F000F1E0DE01A75EBE4F9F2D01900D929A95FE
:10160000E1F7E0917101F0917201E00FF11FEE0F2F
:10161000FF1F29E131E02C0F3D1FE20FF31F608116
:101620007181680F711D882777FD8095982F0E9422
:10163000003220E030E040E451E40E94653120E0D7
:1016400030E040E850E40E94FD309B01AC0160E0D6
:1016500070E080E090E40E94173321E230ED42E038
:1016600053E40E94B4320E94130D8FEF9CE7019760
:10167000F1F700C000000F5F1F4F0830110509F09F
:1016800069CF94C1883009F0D3C0F80191819430BA
:1016900009F0CEC09281992309F4CAC080917101EA
:1016A000909172010197909372018093710120E0F3
:1016B0004BE760E084E093E00E94DC1920E04BE718
:1016C00061E084E093E00E94DC1920E04BE762E0F7
:1016D00084E093E00E94DC1920E04BE763E084E0C3
:1016E00093E00E94DC1920E04BE764E084E093E0A3
:1016F0000E94DC190E94E60C00E010E056E4F52E92
:1017000080917301E5EBF1E0DE01AD52BF4F9F2DFB
:1017100001900D929A95E1F7E0917101F0917201BB
:10172000E00FF11FEE0FFF1F23ED30E02C0F3D1FE8
:10173000E20FF31F60817181680F711D882777FDAB
:101740008095982F0E94003220E030E040E451E480
:101750000E94653120E030E040E850E40E94FD3016
:101760009B01AC0160E070E080E090E40E941733E0
:1017700021E230ED42E053E40E94B4324CE050E00C
:101780000E94E30F3FEF87EE93E03150804090409E
:10179000E1F700C0000080917301E5EBF1E0DE01AC
:1017A000A357BF4F9F2D01900D929A95E1F7E091BD
:1017B0007101F0917201E00FF11FEE0FFF1F2DE894
:1017C00030E02C0F3D1FE20FF31F60817181680F25
:1017D000711D882777FD8095982F0E94003220E0A8
:1017E00030E040E451E40E94653120E030E040E820
:1017F00050E40E94FD309B01AC0160E070E080E0AD
:1018000090E40E94173321E230ED42E053E40E945D
:10181000B4320E94130D8FEF9CE70197F1F700C0DF
:1018200000000F5F1F4F0830110509F069CFBEC0DF
:10183000F801228190917301222309F45DC026E40E
:10184000E5EBF1E0DE01A95BBF4F01900D922A9517
:10185000E1F7E0917101F0917201E80FF11DEE0FD7
:10186000FF1F27E430E02C0F3D1FE20FF31F6081C4
:101870007181690F711D882777FD8095982F0E94CF
:10188000003220E030E040E451E40E9465316B0119
:101890007C01F801818165E070E0681B710988278F
:1018A00077FD8095982F0E9400329B01AC01C70103
:1018B000B6010E94FD309B01AC0160E070E080E069
:1018C00090E40E94173321E230ED42E053E40E949D
:1018D000B4324FE050E0C454DD4F0FB6F894DEBF91
:1018E0000FBECDBFDF91CF911F910F91FF90EF9071
:1018F000DF90CF900C94E30F26E4E5EBF1E0DE01FE
:10190000119601900D922A95E1F7E0917101F09105
:101910007201E80FF11DEE0FFF1F21E030E02C0FE8
:101920003D1FE20FF31F60817181690F711D8827D0
:1019300077FD8095982F0E94003220E030E040E44F
:1019400051E40E9465316B017C01F801818165E001
:1019500070E0681B7109882777FD8095982F0E9499
:1019600000329B01AC01C701B6010E94FD309B0112
:10197000AC0160E070E080E090E40E94173321E267
:1019800030ED42E053E40E94B432C454DD4F0FB650
:10199000F894DEBF0FBECDBFDF91CF911F910F91A5
:1019A000FF90EF90DF90CF900C94130DC454DD4F57
:1019B0000FB6F894DEBF0FBECDBFDF91CF911F9160
:1019C0000F91FF90EF90DF90CF90089510928702D3
:1019D00010928602809171008D7F809371008091BA
:1019E00090008F77809390001092480210924702E7
:1019F0001092800210928102109282021092830251
:101A000010927F0210927E02EEE5F2E0AEE4B2E0C8
:101A100011921192119211921D921D9282E0EE3755
:101A2000F807B1F708956F927F928F929F92AF92CD
:101A3000BF92CF92DF92EF92FF920F931F93CF93BB
:101A4000DF936B017C010EE712E04CE5A42E42E02F
:101A5000B42EC7E0D0E0A7019601F80192918291DF
:101A6000729162918F010E946131882349F0219720
:101A7000F2E0AF1AB108CF3F8FEFD80761F734C05B
:101A8000F8011082118212821382F50111821082F4
:101A9000FE01EE0FFF1FEE0FFF1FE25AFD4FDE01AA
:101AA000AA0FBB1FA25BBD4FCE011AC00196448195
:101AB0005581668177814083518362837383148269
:101AC00015821682178212962D913C9113971196CA
:101AD0003C932E9313961C921E9212973496129654
:101AE0008730910519F7C3CF8091860290918702C4
:101AF000019797FD05C0909387028093860204C0EA
:101B00001092870210928602E0918602F09187027D
:101B10003097C9F4809171008D7F8093710080911E
:101B200090008F7780939000109280021092810233
:101B3000109282021092830210927F0210927E0213
:101B40001092470285C03197DF01AA0FBB1FAA0F71
:101B5000BB1FA25ABD4FCD90DD90ED90FC90EE0FD3
:101B6000FF1FE25BFD4FC081D181609080027090C9
:101B700081028090820290908302A7019601662DD7
:101B8000772D882D992D0E94613187FF25C0262D44
:101B9000372D482D592DC701B6010E94FC3020E099
:101BA00030E04AEF54E40E9465315B018C012A2D3C
:101BB0003B2D402F512F662D772D882D992D0E947A
:101BC000FD303B014C01A7019601772D992D0E9414
:101BD0006131181664F72EC0A7019601662D772D86
:101BE000882D992D0E94B032181634F5A701960160
:101BF000662D772D882D992D0E94FC3020E030E055
:101C00004AEF54E40E9465315B018C012A2D3B2D83
:101C1000402F512F662D772D882D992D0E94FC3055
:101C20003B014C01A7019601772D992D0E94B032FE
:101C300087FFECCF10924D02C0928002D0928102B9
:101C4000E0928202F0928302D0937F02C0937E02E0
:101C5000DF91CF911F910F91FF90EF90DF90CF9088
:101C6000BF90AF909F908F907F906F9008953E9A15
:101C7000E1E7F0E080818D7F808382E080939000B7
:101C80008AE18093910008951F920F920FB60F92F0
:101C90001124CF92DF92EF92FF922F933F934F93B5
:101CA0005F936F937F938F939F93AF93BF93CF93E4
:101CB000DF93EF93FF9380914702882309F479C063
:101CC00020E030E0A9016091800270918102809152
:101CD0008202909183020E94B03218160CF069C003
:101CE00020E030E040E251E46091490270914A0204
:101CF00080914B0290914C020E94B0321816BCF4B5
:101D00008091840290918502019660918602709183
:101D100087020E949C3490938502809384021092E3
:101D2000490210924A0210924B0210924C02C0914A
:101D30008402D0918502CC0FDD1FCC0FDD1FC25A6B
:101D4000DD4F288139814A815B8160E074E284E75C
:101D50009BE40E9465310E94CD317093970060939F
:101D60009600288139814A815B8160E074E284E7D2
:101D70009BE40E9465310E94CD3175956795709303
:101D800099006093980020E030E040E85FE36091C4
:101D9000490270914A0280914B0290914C020E943C
:101DA000FD306093490270934A0280934B029093F6
:101DB0004C0280914802882309F493C0C0904302EA
:101DC000D0904402E0904502F090460220E030E0DE
:101DD000A901C701B6010E94B0321816F4F4A70198
:101DE000960160E074E284E79BE40E9465310E9402
:101DF000CD317093970060939600A701960160E043
:101E000074E284E79BE40E9465310E94CD317595B0
:101E10006795709399006093980060913D0270916E
:101E20003E026F5F7F4F70933E0260933D0280E001
:101E300090E00E94FE3120913F023091400240919B
:101E40004102509142020E94B03287FD4AC0809107
:101E50003C028F5F80933C029091F1038917A0F0C0
:101E60008091F603882319F010923C020DC08091F6
:101E700071008D7F80937100809190008F778093A7
:101E80009000109248022DC0E091F203F091F3030C
:101E900080913C0298E0899FE00DF11D1124808122
:101EA0009181A281B3818093430290934402A093D5
:101EB0004502B093460220E030E040E85EE36481F2
:101EC0007581868197810E94B43260933F0270933E
:101ED0004002809341029093420210923E0210927F
:101EE0003D02FF91EF91DF91CF91BF91AF919F9113
:101EF0008F917F916F915F914F913F912F91FF90C3
:101F0000EF90DF90CF900F900FBE0F901F9018951D
:101F10000F931F93CF93DF9300D0CDB7DEB78C0123
:101F200080914702882331F04A8369830E94E60C3E
:101F300069814A8181E0809348021093F303009302
:101F4000F2036093F1034093F6031092490210925A
:101F50004A0210924B0210924C0210923C02F8017D
:101F600040815181628173814093430250934402C6
:101F7000609345027093460220E030E040E85EE363
:101F800064817581868197810E94B43260933F029B
:101F900070934002809341029093420210923E025D
:101FA00010923D0280917100826080937100809157
:101FB00090008068809390000F900F90DF91CF91F8
:101FC0001F910F9108956F927F928F929F92AF927F
:101FD000BF92CF92DF92EF92FF920F931F93CF9316
:101FE000DF936B017C01EA018091480281110E941C
:101FF000E60C81E08093470220E030E0A901C701B0
:10200000B6010E94B03218160CF09AC0609080029F
:1020100070908102809082029090830220E030E0F4
:10202000A901662D772D882D992D0E94613181118E
:1020300028C0C0928002D0928102E0928202F09287
:102040008302D0937F02C0937E028091860290919A
:102050008702FC01EE0FFF1FEE0FFF1FE25AFD4F3C
:10206000C082D182E282F382FC01EE0FFF1FE25BAD
:10207000FD4FD183C083019690938702809386029F
:102080005FC0A7019601662D772D882D992D0E949E
:10209000613187FF25C0262D372D482D592DC701C9
:1020A000B6010E94FC3020E030E04AEF54E40E9488
:1020B00065315B018C012A2D3B2D402F512F662D60
:1020C000772D882D992D0E94FD303B014C01A701F1
:1020D0009601772D992D0E946131181664F7A9CFCA
:1020E000A7019601662D772D882D992D0E94B0327B
:1020F00018160CF09ECFA7019601662D772D882D1E
:10210000992D0E94FC3020E030E04AEF54E40E9418
:1021100065315B018C012A2D3B2D402F512F662DFF
:10212000772D882D992D0E94FC303B014C01A70191
:102130009601772D992D0E94B03287FFECCF79CF91
:10214000809171008260809371008091900080681E
:1021500080939000DF91CF911F910F91FF90EF90AE
:10216000DF90CF90BF90AF909F908F907F906F90B7
:102170000895809191020895CF93DF9300D01F922C
:10218000CDB7DEB72091FB03243021F523E029836E
:102190009B838A832093E9008FEF06C095ED9A9583
:1021A000F1F70000882329F09091E800815095FF15
:1021B000F5CF8091E80085FF0DC040E050E063E07E
:1021C00070E0CE0101960E94A6148091E8008E77FF
:1021D0008093E8000F900F900F90DF91CF910895BA
:1021E000CF93DF9300D01F92CDB7DEB72091FB03D2
:1021F000243029F522E029839B838A8383E080931E
:10220000E9008FEF06C095ED9A95F1F7000088235D
:1022100029F09091E800815095FFF5CF8091E8007A
:1022200085FF0DC040E050E063E070E0CE01019614
:102230000E94A6148091E8008E778093E8000F90AA
:102240000F900F90DF91CF9108952091FB032430E0
:10225000F9F422E02093E9002FEF06C035ED3A951E
:10226000F1F70000222329F03091E800215035FFDA
:10227000F5CF2091E80025FF0BC040E050E065E07D
:1022800070E00E94A6148091E8008E778093E800A9
:102290000895CF93DF93EC018091FB03843041F5E7
:1022A00081E08093E9008FEF06C095ED9A95F1F7F4
:1022B0000000882329F09091E800815095FFF5CF28
:1022C0008091E80085FF14C040E050E068E070E0D5
:1022D000CE010E94A6148091E8008E778093E800DA
:1022E00088E0FE01A9E8B2E001900D928A95E1F73D
:1022F000DF91CF910895BF92CF92DF92EF92FF923C
:102300000F931F93CF93DF937C01B62EE90100E07A
:1023100010E0C42ED12C0BC04991202F2B0D2F770C
:102320004F776FE0C7010E94DC190F5F1F4F0C153C
:102330001D0594F3DF91CF911F910F91FF90EF90C6
:10234000DF90CF90BF90089570E06F5F7F4F6F7008
:1023500077270C94DC190F931F93CF93C42F63300E
:10236000710509F04AC0842F807F803849F1803997
:1023700009F043C0622F6F7770E080E090E00E9428
:10238000003220E030E040E451E40E9465319B01DE
:10239000AC0160E070E080E090E40E9417330F77BA
:1023A00010E023E0159507952A95E1F72DEC3CEC1C
:1023B00042E053E40E94B432A8010E94E30F1DC022
:1023C000622F6F7770E080E090E00E94003220E0A2
:1023D00030E040E451E40E9465319B01AC0160E0D3
:1023E00070E080E090E40E9417332DEC3CEC42E07A
:1023F00053E40E94B4320E94130DCC3F29F4CF91D4
:102400001F910F910C94E60CCF911F910F9108959D
:102410000F931F93CF93DF93CDB7DEB727970FB6F8
:10242000F894DEBF0FBECDBF8C0114C08A810E941C
:10243000B6199A819D839B819E839C819F83811184
:102440001EC089818430B1F08730A1F08630A1F0C0
:102450008530A1F0BE016F5F7F4F84E791E00E945D
:10246000231D8111E3CF84E791E00E94141D0E9497
:102470008F190DC083E003C082E001C081E0AE018E
:102480004B5F5F4F682FC8010E94491AE3CF279620
:102490000FB6F894DEBF0FBECDBFDF91CF911F9175
:1024A0000F910895EF92FF920F93CF93DF9300D097
:1024B00000D000D0CDB7DEB77B014A832B830C83DD
:1024C000842F2E834D830E94B6192E814D81811158
:1024D0001BC082E0E816F10479F083E0E816F1040D
:1024E00021F0EA94EF2821F50BC0073F11F487E0B3
:1024F00001C084E089830BC0273FD9F786E0FACF7B
:10250000473FB9F785E0F6CF42954F704983BE014A
:102510006F5F7F4F84E791E00E94D91C84E791E0D0
:102520000E94F71C84E791E00E94141D0E948F19FD
:1025300026960FB6F894DEBF0FBECDBFDF91CF91C8
:102540000F91FF90EF9008958091FA03811109C0D7
:102550000E9495160E94F2168091E200846080939A
:10256000E20008951092FA030895089508950C94D6
:10257000B229809192028F5F8093920262E30E945F
:102580007C34911135C0109292028091930288237D
:1025900079F18091FB03843049F58091E9008F70D7
:1025A0009091EC0090FF02C090E801C090E0982B61
:1025B00084E08093E9008091EB0080FF14C080915B
:1025C000EE0087FD03C00FC01092F1008091E8007B
:1025D00085FDFACF8091E80080FF05C08091E8007A
:1025E0008E778093E8009F709093E9001092930299
:1025F000089542E061EC81E00E940B1642E061EC3C
:1026000082E00E940B1642E061EC83E00E940B1610
:1026100042E261EC84E00E940B1642E361E885E04F
:102620000E940B1642E360E886E00C940B16809142
:10263000FD03833009F454C030F4813071F08230EE
:1026400009F0A5C08CC08A3009F479C08B3009F438
:102650005FC0893009F09BC020C08091FC03813AA3
:1026600009F095C08091E800877F8093E800809111
:10267000000490910104892B21F060E080E090E05B
:1026800003C068E089E892E070E00E944415809100
:10269000E8008B778093E80008958091FC038132F5
:1026A00009F075C08091000490910104892B09F014
:1026B0006EC08091E800877F8093E80005C080911C
:1026C000FB03882309F463C08091E80082FFF7CF01
:1026D0008091F100809391028091E8008B7753C044
:1026E0008091FC03813A09F052C0809100049091DE
:1026F0000104892B09F04BC08091E800877F80930B
:10270000E8008091E80080FFFCCF80918A0136C00C
:102710008091FC038132D9F58091000490910104ED
:10272000892BA9F58091E800877F8093E8000E94BB
:1027300042168091FE0380938A010C948B23809132
:10274000FC03813221F58091E800877F8093E800C7
:102750000E9442168091FF03809388020895809121
:10276000FC03813AA1F48091E800877F8093E80020
:102770008091E80080FFFCCF809188028093F10077
:102780008091E8008E778093E8000C9442160895BB
:1027900084E093E00E94181A62E572E184E093E01D
:1027A0000E946E1A68E072E184E093E00E94721A5F
:1027B00084B7877F84BF88E10FB6F8948093600068
:1027C000109260000FBE90E080E80FB6F8948093FE
:1027D0006100909361000FBE0E949C1D0E9495169F
:1027E0000E94F2168091E20084608093E200789467
:1027F0006BEA71E184E093E00E94141A64EA71E1EB
:1028000084E093E00E940C1A6BE771E184E093E0AE
:102810000E94101A0E94370E0E948F190E949E1D5E
:1028200080E891E00E94481D0BC00E946C298091B5
:10283000F903882329F00E949A2981110E9490149B
:102840008091FB03853089F384E093E00E94211C92
:102850000E94A81DF5CF292F332723303105B1F071
:102860004CF42130310509F44DC02230310509F016
:102870004EC007C02132310541F12232310591F1BC
:1028800046C0E0EDF0E08CE594E045C0992781304A
:10289000910569F08230910589F0892B09F037C0E4
:1028A000E8E5F4E0E491F0E088E594E034C0EAE2A1
:1028B000F4E0E491F0E08AE294E02DC0EEEFF3E082
:1028C000E491F0E08EEF93E026C0643000F5E62F4F
:1028D000F0E0EE0FFF1FE550FE4F80819181E9E0AF
:1028E000F0E019C0643098F4E62FF0E0DF01AA0FA1
:1028F000BB1FAD5FBD4F8D919C91E55FFD4FE081AA
:10290000F0E009C0E2E1F0E08CE295E004C0E0E034
:10291000F0E080E090E0DA018D939C93CF01089580
:1029200080E189BD82E189BD09B400FEFDCF8091BF
:10293000D8008F7D8093D8008091E00082608093E2
:10294000E0008091E00081FDFCCF0895BF92CF921E
:10295000DF92EF92FF920F931F93CF93DF937C014F
:102960008B01EA010E946316B82E811133C02097B3
:1029700031F028813981021B130BE20EF31EC12CAA
:10298000D12C23C08091E80085FD15C08091E8001E
:102990008E778093E800209749F0888199818C0D8B
:1029A0009D1D9983888325E0B22E14C00E94631672
:1029B000882359F00EC0F70181917F018093F100C7
:1029C00001501109FFEFCF1ADF0A01151105D1F6E9
:1029D00001C0B82E8B2DDF91CF911F910F91FF90E9
:1029E000EF90DF90CF90BF900895BF92CF92DF928B
:1029F000EF92FF920F931F93CF93DF937C018B0194
:102A0000EA010E946316B82E811133C0209731F07D
:102A100028813981021B130BE20EF31EC12CD12C2D
:102A200023C08091E80085FD15C08091E8008B7778
:102A30008093E800209749F0888199818C0D9D1D35
:102A40009983888345E0B42E14C00E9463168823BE
:102A500059F00EC08091F100F70181937F01015080
:102A60001109FFEFCF1ADF0A01151105D1F601C0D8
:102A7000B82E8B2DDF91CF911F910F91FF90EF908A
:102A8000DF90CF90BF9008954091020450910304CD
:102A90004617570748F06115710539F44091E80071
:102AA0004E774093E80001C0BA01FC0140E033C01A
:102AB0008091FB03882309F444C0853009F443C0A6
:102AC0008091E80083FD41C08091E80082FD33C021
:102AD0008091E80080FF1FC09091F3008091F20088
:102AE000392F20E0A901482BCA0106C0419140932B
:102AF000F1006150710901966115710519F0883076
:102B00009105A0F341E0089709F040E08091E800CA
:102B10008E778093E8006115710551F64111C8CF99
:102B20000AC08091FB03882361F0853061F08091B9
:102B3000E80083FD0AC08091E80082FFF2CF80E0C8
:102B4000089582E0089583E0089581E0089540911A
:102B50000204509103044617570748F061157105A8
:102B600039F44091E8004E774093E80001C0BA0183
:102B7000FC0140E034C08091FB03882309F445C088
:102B8000853009F444C08091E80083FD42C0809103
:102B9000E80082FD34C08091E80080FF20C0909161
:102BA000F3008091F200392F20E0A901482BCA01DF
:102BB00007C044914093F10031966150710901962C
:102BC0006115710519F08830910598F341E0089777
:102BD00009F040E08091E8008E778093E80061156D
:102BE000710549F64111C7CF0AC08091FB038823C4
:102BF00061F0853061F08091E80083FD0AC080912A
:102C0000E80082FFF2CF80E0089582E0089583E03B
:102C1000089581E00895982F2CC09093E9009817AB
:102C200039F07091EC002091ED005091F00003C05C
:102C3000242F762F50E021FD02C09F5F1AC03091F3
:102C4000EB003E7F3093EB003091ED003D7F309301
:102C5000ED003091EB0031603093EB007093EC00AD
:102C60002093ED005093F0002091EE0027FDE5CF7A
:102C700007C0973090F28F708093E90081E008954B
:102C800080E008958091FC0387FD05C08091E800F5
:102C900080FF0EC012C08091E80082FD05C08091C7
:102CA000FB038111F8CF08958091E8008B7708C06D
:102CB0008091FB038111EACF08958091E8008E771F
:102CC0008093E80008958091E4009091E50045E646
:102CD0002091EC0020FD1FC023C02091FB03222384
:102CE00091F0253091F02091EB0025FD10C020914E
:102CF000E4003091E5002817390751F34150C9012C
:102D000039F784E0089582E0089583E0089581E032
:102D1000089580E008952091E80020FFDECFF9CFEC
:102D20002091E80022FFD9CFF4CF0E9403170E9420
:102D30000B17E0EEF0E0808181608083E8EDF0E049
:102D400080818F77808319BCA7EDB0E08C918E7F56
:102D50008C9380818F7E80831092FA0308950F9365
:102D60001F93CF93DF930E9403170E940B17C8EDA8
:102D7000D0E088818F778883888180688883888184
:102D80008F7D888319BC1092FB031092F703109279
:102D9000F9031092F80300EE10E0F80180818B7FB8
:102DA000808388818160888342E060E080E00E94C7
:102DB0000B16E1EEF0E080818E7F8083E2EEF0E0A2
:102DC000808181608083808188608083F801808138
:102DD0008E7F8083888180618883DF91CF911F916E
:102DE0000F910895E8EDF0E080818F7E8083E7ED1C
:102DF000F0E080818160808384E082BF81E0809305
:102E0000FA030C94AF16E8EDF0E080818E7F8083AA
:102E10001092E20008951092DA001092E1000895F5
:102E20001F920F920FB60F9211242F933F934F933F
:102E30005F936F937F938F939F93AF93BF93EF9322
:102E4000FF938091E10082FF0BC08091E20082FF3E
:102E500007C08091E1008B7F8093E1000E94B9124E
:102E60008091DA0080FF1FC08091D80080FF1BC0D6
:102E70008091DA008E7F8093DA008091D90080FF04
:102E80000DC080E189BD82E189BD09B400FEFDCF9E
:102E900081E08093FB030E94A41205C019BC10922C
:102EA000FB030E94B2128091E10080FF19C0809163
:102EB000E20080FF15C08091E2008E7F8093E200E7
:102EC0008091E20080618093E2008091D80080626E
:102ED0008093D80019BC85E08093FB030E94B61252
:102EE0008091E10084FF30C08091E20084FF2CC01B
:102EF00080E189BD82E189BD09B400FEFDCF8091EA
:102F0000D8008F7D8093D8008091E1008F7E8093E0
:102F1000E1008091E2008F7E8093E2008091E200E8
:102F200081608093E2008091F703882311F084E0B0
:102F300007C08091E30087FF02C083E001C081E009
:102F40008093FB030E94B7128091E10083FF29C0A8
:102F50008091E20083FF25C08091E100877F80930C
:102F6000E10082E08093FB031092F7038091E1007F
:102F70008E7F8093E1008091E2008E7F8093E2005B
:102F80008091E20080618093E20042E060E080E0B6
:102F90000E940B168091F00088608093F0000E94E0
:102FA000B512FF91EF91BF91AF919F918F917F915A
:102FB0006F915F914F913F912F910F900FBE0F90A6
:102FC0001F9018951F920F920FB60F9211242F93F6
:102FD0003F934F935F936F937F938F939F93AF93A1
:102FE000BF93CF93EF93FF938091E9008F709091FF
:102FF000EC0090FF02C090E801C090E0C92FC82B00
:103000001092E9008091F000877F8093F00078941F
:103010000E9426181092E9008091F0008860809349
:10302000F000CF70C093E900FF91EF91CF91BF9175
:10303000AF919F918F917F916F915F914F913F9150
:103040002F910F900FBE0F901F9018951F93CF9345
:10305000DF93CDB7DEB7AC970FB6F894DEBF0FBEE7
:10306000CDBFECEFF3E08091F100819324E0E430F8
:10307000F207C9F70E9417138091E80083FF37C158
:103080008091FC039091FD03953009F488C038F4D9
:103090009130B1F170F0933009F029C131C098300E
:1030A00009F4F8C0993009F404C1963009F01FC141
:1030B0009DC0803821F0823809F019C108C0809184
:1030C000F8039091F903992389F082600FC08091F1
:1030D0000004909101048F7099278093E9008091FA
:1030E000EB0085FB882780F91092E9009091E800B9
:1030F000977F9093E8008093F1001092F100D5C083
:10310000882319F0823009F0F2C08F7121F08230EB
:1031100009F0EDC00BC08091FE03813009F0E7C0DB
:10312000933009F080E08093F9032FC08091FE0373
:1031300081112BC080910004909101048F70992718
:10314000009709F4D4C08093E9002091EB0020FFA0
:103150001CC02091FD03233021F48091EB0080629C
:1031600012C09091EB0090619093EB0021E030E071
:1031700001C0220F8A95EAF72093EA001092EA0034
:103180008091EB0088608093EB001092E9008091C1
:10319000E800877F8093E8000E944216A8C0811152
:1031A000A6C08091FE039091FF038F779927182F77
:1031B0009091E3009078982B9093E3008091E80041
:1031C000877F8093E8000E9442168091E80080FF8C
:1031D000FCCF8091E30080688093E300112311F01D
:1031E00083E001C082E08093FB0381C0805882307D
:1031F00008F07DC08091FE039091FF038C3D23E099
:10320000920779F583E08A838AE289834FB7F8943D
:10321000DE01139620E03EE051E2E32FF0E0509310
:103220005700E49120FF03C0E295EF703F5FEF701D
:103230008E2F90E0EA3010F0C79601C0C0968D93B3
:103240009D932F5F243149F74FBF8091E800877F1E
:103250008093E8006AE270E0CE0101960E94441576
:1032600013C0AE01455D5F4F609100040E942B14B6
:103270000097E9F12091E800277F2093E800BC0146
:103280008BA59CA50E94A7158091E8008B77809361
:10329000E8002DC0803859F58091E800877F809341
:1032A000E8008091F7038093F1008091E8008E7729
:1032B00071CF81111CC09091FE039230C0F48091B7
:1032C000E800877F8093E8009093F7030E944216FE
:1032D0008091F703811104C08091E30087FF02C051
:1032E00084E001C081E08093FB030E94F912809189
:1032F000E80083FF0AC08091E800877F8093E800A0
:103300008091EB0080628093EB00AC960FB6F8944E
:10331000DEBF0FBECDBFDF91CF911F910895CF9338
:103320008091FB038823B1F08091E9008F70909128
:10333000EC0090FF02C090E801C090E0C92FC82BBC
:103340001092E9008091E80083FD0E942618CF705A
:10335000C093E900CF910895881F8827881F08959A
:1033600091E0883F08F490E0892F0895982F907F8E
:10337000903B99F038F4903981F0903A71F09038A0
:10338000C9F40BC0903DA1F018F4903C99F410C022
:10339000903E19F0903F71F402C083E00895E82F49
:1033A000E15FEF3038F4F0E0E15FFD4F8081089598
:1033B00082E0089580E008950F932F774F776F7024
:1033C000606BDC01ED91FC91022F242F462F63E00E
:1033D00070E009950F9108950F932F774F776F70D5
:1033E0006069DC01ED91FC91022F242F462F63E0F0
:1033F00070E009950F9108950F932F774F776F70B5
:103400006068DC01ED91FC91022F242F462F63E0D0
:1034100070E009950F910895FC017383628308950C
:10342000FC01738F628F0895FC01758F648F08957E
:10343000CF93DF93EC011DA21FA21EA2BC01685D09
:103440007F4F40EC88519F4F0E94551C1B821A826F
:103450001D821C821F821E82198618861B861A8670
:103460001D861C861F861E86198A188A1B8A1A8A40
:103470001D8A1C8A1F8A1E8A198E188E1B8E1A8E10
:103480001D8E1C8E1F8E1E8E19A218A2DF91CF9149
:103490000895CF92DF92FF920F931F93CF93DF9304
:1034A0001F92CDB7DEB7F62E6A018C0108511F4F6F
:1034B00008C0F60161916F01C80149830E945C1C3C
:1034C00049818C2D841B8F15A0F30F90DF91CF9134
:1034D0001F910F91FF90DF90CF900895FC017183B1
:1034E00060830895FC0171A360A30895AF92BF9219
:1034F000CF92DF92EF92FF920F931F93CF93DF93C0
:1035000000D01F92CDB7DEB77C016B01142FB22E15
:10351000A02EDC0195968C9195978430F1F45A9603
:10352000ED91FC915B97309709F4D8C0CB010197DE
:1035300063E070E00E948834DB01AA0FBB1FA60F76
:10354000B71F49832A830B834C2D4A1B9E012F5F93
:103550003F4FBD01C7010995B1C06230710509F443
:1035600053C06330710529F06130710509F09CC0CA
:1035700083C0842F807F803A01F130F48038B9F025
:10358000803909F0ABC00DC0803EE9F0803F09F101
:10359000803B09F0A3C0D7011296ED91FC911397DF
:1035A00023C0D7011496ED91FC9115971DC0D7014A
:1035B0001696ED91FC91179717C0D7011896ED91CB
:1035C000FC91199711C0D7011A96ED91FC911B97A8
:1035D0000BC0423F09F082C0D7011C96ED91FC91CF
:1035E0001D97309731F47AC0309709F477C0123FB5
:1035F00021F42A2D4B2D62EF04C0612F6F702A2D0C
:103600004B2DC70109955AC0842F807F803D59F00A
:10361000803F79F0803C09F061C0D7011E96ED91A2
:10362000FC911F9719C0D7015096ED91FC915197CD
:1036300013C0433F31F4D7015296ED91FC9153975B
:1036400008C0413F09F04AC0D7015496ED91FC9162
:103650005597309741F442C0309709F43FC0133F6B
:1036600011F0113F19F44B2D612F03C0612F6F70C2
:103670004B2DC701099522C0842F0E94B0198823C1
:1036800031F0D7015696ED91FC91579707C0163F40
:1036900029F5D7015896ED91FC9159973097F1F0A3
:1036A000612FC70109950AC064307105A8F416C0DE
:1036B0000A2D2B2D412FB601C7010995D7015E9622
:1036C000ED91FC915F97309789F00A2D2B2D412FBA
:1036D000B601C70109950AC0C12CD12CD7015C964F
:1036E000ED91FC915D97309719F7E8CF0F900F900F
:1036F0000F90DF91CF911F910F91FF90EF90DF908E
:10370000CF90BF90AF900895EF92FF920F931F93C9
:10371000CF93DF93EC01162F862F0E94B0198823D8
:1037200069F0FDA081E08DA300E020E0412F61E081
:1037300070E0CE010E94761AFDA27CC0812F0E940B
:10374000AC194DA1882309F440C0443029F01AA3D4
:1037500021E030E03FA32EA3812F0E94B6198130D3
:1037600031F070F0823051F0833059F507C08DA3ED
:1037700000E020E0412F61E070E01EC08DA35AC040
:10378000103F19F0173FE9F404C084E08DA31AA399
:103790003FC02EA13FA1C90163E070E00E948834C0
:1037A0008C0F9D1FFC0112A3B9016F5F7F4F7FA398
:1037B0006EA30CA12BA14AA1CE010E94761A1DA2D4
:1037C00039C01DA21FA21EA235C0442399F12EA10B
:1037D0003FA1C90163E070E00E9488347C01FE01D2
:1037E000E80FF91F12A3B9016F5F7F4F7FA36EA38C
:1037F0008130910591F082E0E816F104D9F40CA132
:103800002BA14AA1CE010E94761A8DA1843091F09D
:1038100081E090E09FA38EA30DC0423059F400E0F8
:103820002BA14AA1CE010E94761A8DA1843011F0FD
:10383000FFA2EEA2DF91CF911F910F91FF90EF9029
:103840000895CF92DF92EF92FF920F931F93CF9341
:10385000DF93EC01E8A1F9A1309709F009958E01F9
:1038600008511F4FC8010E948E1CE12CF12CC82E5C
:10387000D12C0FC060E0C8010E94A21C682FCE01AD
:103880000E94841B61E0C8010E94B31C8FEFE81AFC
:10389000F80AEC14FD0470F3DF91CF911F910F91A2
:1038A000FF90EF90DF90CF900895FC0142837483E6
:1038B00063831182108208950F931F93CF93DF9338
:1038C000EC01062F0E94D41C182F298130E0C90179
:1038D00001966A8170E00E949C34488150E0841710
:1038E000950729F4812F0E94D71C80E012C0EB813C
:1038F000FC81E20FF31F00832981822F90E0019663
:103900006A8170E00E949C348983812F0E94D71CB9
:1039100081E0DF91CF911F910F910895CF93DF93B5
:10392000EC010E94D41C29819881291710F0C22F24
:1039300002C0CA81C20FC91B0E94D71C8C2FDF9105
:10394000CF910895FC012081862F90E0820F911D78
:10395000628170E00E949C340380F481E02DE80FC6
:10396000F91F808108950F931F93CF93DF931F92C8
:10397000CDB7DEB78C0169830E94D41C482FF801B3
:1039800080816981262F30E0280F311D6281C901B5
:1039900070E00E949C348083842F0F90DF91CF9140
:1039A0001F910F910C94D71C8FB7F89408958FBF77
:1039B0000895FC01CB012091FB032430B1F4218157
:1039C0002F702093E90040E050E064E070E00E9436
:1039D000A61481110BC09091E80095FD07C090914D
:1039E000E8009E779093E800089582E00895209182
:1039F000FB032430A9F4FC0181818F708093E900DE
:103A00003091F3002091F200932F80E0822B892BDC
:103A100049F08091E8008E778093E8000C9463165B
:103A200082E0089580E008952091FB03243051F452
:103A3000FC0121812F702093E9002091E80020FDF6
:103A40000C94F71C0895FC01CB012091FB0324305A
:103A500011F080E0089526812F702093E9002091D5
:103A6000E80022FFF6CF2091E80025FFF2CF40E0EA
:103A700050E064E070E00E94F5148091E80085FD5C
:103A800005C08091E8008B778093E80081E008957D
:103A900090939502809394020895E0919402F0919E
:103AA0009502309721F00190F081E02D099480E09B
:103AB0000895E0919402F0919502309721F00280F0
:103AC000F381E02D09940895E0919402F09195021C
:103AD000309721F00480F581E02D0994089520911C
:103AE0009602309197028217930771F09093970294
:103AF00080939602E0919402F0919502309721F024
:103B00000680F781E02D0994089520919802309164
:103B100099028217930771F090939902809398020B
:103B2000E0919402F0919502309721F00084F185A4
:103B3000E02D0994089508950C949B1D0E94E62998
:103B40000E94F3060E94BA2A0C9465300C942C064D
:103B50005F926F927F928F929F92AF92BF92CF921D
:103B6000DF92EF92FF920F931F93CF93DF93CDB726
:103B7000DEB72A970FB6F894DEBF0FBECDBF0E9406
:103B8000E9079AE9C92E92E0D92E00E010E0AA24B4
:103B9000A394B12C502E802F0E9439093C01F601CC
:103BA000E190F1906F01E826F926E114F10431F477
:103BB0000F5F1F4F0530110569F73AC08091F10280
:103BC00081FD0E94420920E030E04501022E02C042
:103BD000880C991C0A94E2F7C4018E219F21892B3D
:103BE00009F12E835F826820792081E0672809F43B
:103BF00080E088870E94EF298160782F9A878987E3
:103C00004E815F8168858A850E94611EF801EE0FF2
:103C1000FF1FE656FD4F808191818825992591836C
:103C2000808316C02F5F3F4F2C30310571F6C0CF17
:103C30008FEF89838A831B820E94EF298160782F0E
:103C40009D838C8349815A816B818D810E94611E85
:103C50000E94A72D1091A4020E944D1D1817D9F0A3
:103C60000E944D1D8093A4022A960FB6F894DEBFE1
:103C70000FBECDBFDF91CF911F910F91FF90EF90BD
:103C8000DF90CF90BF90AF909F908F907F906F907C
:103C90005F900C94A61D2A960FB6F894DEBF0FBE57
:103CA000CDBFDF91CF911F910F91FF90EF90DF90EB
:103CB000CF90BF90AF909F908F907F906F905F90CC
:103CC0000895CF93DF93CDB7DEB72B970FB6F89457
:103CD000DEBF0FBECDBF4F83588769877A878B873A
:103CE000DE01119686E0FD0111928A95E9F785E0E3
:103CF000FE01379601900D928A95E1F749815A812C
:103D00006B817C818D819E810E944A262B960FB605
:103D1000F894DEBF0FBECDBFDF91CF910895089517
:103D2000CF93C82F882309F4C1C0823859F40E9468
:103D30004D1D81FDBBC089E30E94B1280E943D2931
:103D400089E30CC0833879F40E944D1D80FDAEC01C
:103D500083E50E94B1280E943D2983E50E94D32873
:103D6000CF910C943D29843859F40E944D1D82FD59
:103D70009DC087E40E94B1280E943D2987E4EECFD0
:103D80008450813A48F48C2F0E94C72F81118EC035
:103D90008C2F0E94B128E4CF8C2F805E883050F4A5
:103DA000C77081E090E001C0880FCA95EAF70E94D1
:103DB000F428D6CF8C2F855A833078F4C53A29F071
:103DC000C63A31F482E890E005C081E890E002C094
:103DD00083E890E0CF910C946F1D8C2F885A83312B
:103DE00008F064C0C83A39F1C93A41F1CA3A49F118
:103DF000CB3A51F1CC3A59F1CD3A61F1C03B69F17E
:103E0000CE3A71F1CF3A79F1C13B81F1C23B89F1F0
:103E1000C33B91F1C43B99F1C53BA1F1C63BA9F16C
:103E2000C73BB1F1C83BB9F1C93BC1F1CA3BC9F5C8
:103E30008AE292E038C082EE90E035C089EE90E0F0
:103E400032C08AEE90E02FC085EB90E02CC086EB6C
:103E500090E029C087EB90E026C08CEC90E023C076
:103E60008DEC90E020C083E891E01DC08AE891E0ED
:103E70001AC082E991E017C084E991E014C081E2A0
:103E800092E011C083E292E00EC084E292E00BC0A7
:103E900085E292E008C086E292E005C087E292E007
:103EA00002C080E090E0CF910C94851DCF910895E1
:103EB000882309F44DC0823859F40E944D1D81FFBA
:103EC00047C089E30E94B1280E943D2989E30CC0C4
:103ED000833871F40E944D1D80FF3AC083E50E9433
:103EE000B1280E943D2983E50E94D3280C943D29E6
:103EF000843859F40E944D1D82FF2AC087E40E9435
:103F0000B1280E943D2987E4EFCF982F9450913A31
:103F100008F4EACF982F905E983058F4282F277035
:103F200081E090E001C0880F2A95EAF70E94FA2804
:103F3000DDCF982F955A933020F480E090E00C94D8
:103F40006F1D885A833120F480E090E00C94851D29
:103F50000895882321F00E94F4280C943D290895A7
:103F6000882321F00E94FA280C943D290895BF92DD
:103F7000CF92DF92EF92FF920F931F93CF93DF9335
:103F8000CDB7DEB727970FB6F894DEBF0FBECDBF13
:103F90008C0185E0F801DE01119601900D928A9561
:103FA000E1F7F801D080E180F280558152955F7091
:103FB00083819481892B41F0FFEFEF1208C081E0EB
:103FC00090E0DF1631F003C081E090E002C080E0B5
:103FD00090E080FD7CC3C8015E830E948F1ED98261
:103FE000EA8289819A810E946E28B92E8F830E946D
:103FF0006D280E9495275E816F81FF2021F00E942D
:1040000011296F815E812B2D22952F7030E0253094
:10401000310509F4E6C06CF4243031050CF0A2C07F
:104020004B2D407F8B2D8F70223031050CF045C019
:1040300017C02C3031054CF42A3031050CF0E7C1A3
:104040002830310509F043C3E5C02D30310509F4AE
:10405000BAC20CF4A2C22F30310509F038C323C311
:10406000182F411101C002C01295107FFF2059F096
:10407000112309F46BC2812F6F830E9404290E94CF
:104080003D296F8163C2862F0E94581F112309F4B6
:104090001EC3812F0E940A2927960FB6F894DEBF0F
:1040A0000FBECDBFDF91CF911F910F91FF90EF9089
:1040B000DF90CF90BF900C943D29403211F0829553
:1040C000807F662319F0613071F523C0FF20B1F0C5
:1040D000511101C032C0513081F527960FB6F894C6
:1040E000DEBF0FBECDBFDF91CF911F910F91FF902B
:1040F000EF90DF90CF90BF900C942429511101C014
:1041000003C0513009F4E3C28E830E9427298E81B7
:104110009AC1FF2021F0563008F0D9C20EC05530A8
:1041200008F0D5C290C1FF20C9F0552331F0F80145
:10413000958190FF0BC29F70958327960FB6F894D8
:10414000DEBF0FBECDBFDF91CF911F910F91FF90CA
:10415000EF90DF90CF90BF900C94A91F552309F4E6
:1041600072C109C22B2D26952695237030E02115AA
:10417000310529F02130310509F0A9C219C0FF200D
:1041800021F0862F9B2D937002C080E090E027964F
:104190000FB6F894DEBF0FBECDBFDF91CF911F9158
:1041A0000F91FF90EF90DF90CF90BF900C946F1D18
:1041B000FF2021F0862F9B2D937002C080E090E0BD
:1041C00027960FB6F894DEBF0FBECDBFDF91CF911B
:1041D0001F910F91FF90EF90DF90CF90BF900C94C4
:1041E000851D862FFF2019F00E94AD2C02C00E9471
:1041F000152D27960FB6F894DEBF0FBECDBFDF9109
:10420000CF911F910F91FF90EF90DF90CF90BF90D3
:104210000C949C2D8B2D837009F079C0F11057C23E
:10422000262F229526952770220F220F862F8F701A
:10423000C82ED12CE12CF12C022E04C0CC0CDD1C9C
:10424000EE1CFF1C0A94D2F764FF10C06FE070E010
:1042500080E090E004C0660F771F881F991F2A95A1
:10426000D2F7609570958095909503C060E070E0FE
:10427000CB012B2D269526952370422F50E04230FE
:104280005105D9F04330510569F16C297D298E29FA
:104290009F294130510551F127960FB6F894DEBFA2
:1042A0000FBECDBFDF91CF911F910F91FF90EF9087
:1042B000DF90CF90BF900C94AA276C297D298E297E
:1042C0009F2927960FB6F894DEBF0FBECDBFDF91B2
:1042D000CF911F910F91FF90EF90DF90CF90BF9003
:1042E0000C94BC270E94AA27C701B60127960FB6D7
:1042F000F894DEBF0FBECDBFDF91CF911F910F911C
:10430000FF90EF90DF90CF90BF900C949827FF2004
:1043100019F08B2D817001C08695882309F4D7C1CF
:10432000262F229526952770220F220F862F8F7019
:10433000C82ED12CE12CF12C022E04C0CC0CDD1C9B
:10434000EE1CFF1C0A94D2F764FF10C06FE070E00F
:1043500080E090E004C0660F771F881F991F2A95A0
:10436000D2F7609570958095909503C060E070E0FD
:10437000CB012B2D269526952370422F50E04230FD
:104380005105D9F04330510569F16C297D298E29F9
:104390009F294130510551F127960FB6F894DEBFA1
:1043A0000FBECDBFDF91CF911F910F91FF90EF9086
:1043B000DF90CF90BF900C9449286C297D298E29DD
:1043C0009F2927960FB6F894DEBF0FBECDBFDF91B1
:1043D000CF911F910F91FF90EF90DF90CF90BF9002
:1043E0000C945B280E944928C701B60127960FB696
:1043F000F894DEBF0FBECDBFDF91CF911F910F911B
:10440000FF90EF90DF90CF90BF900C943728603FE3
:1044100059F120F4603E08F494C008C0623F09F4EA
:1044200067C0F0F1633F09F08CC065C0162F1F70A4
:104430008B2D8F71FF2021F00E94E227812F7DCEEE
:104440000E94FD27812F27960FB6F894DEBF0FBE7E
:10445000CDBFDF91CF911F910F91FF90EF90DF9033
:10446000CF90BF900C94B01FFF20B1F0553008F0F2
:104470002EC18B2D8F7127960FB6F894DEBF0FBE1D
:10448000CDBFDF91CF911F910F91FF90EF90DF9003
:10449000CF90BF900C941C28563008F018C1E9CF7B
:1044A000FF2099F08B2D8F7127960FB6F894DEBF01
:1044B0000FBECDBFDF91CF911F910F91FF90EF9075
:1044C000DF90CF90BF900C94E2278B2D8F712796B1
:1044D0000FB6F894DEBF0FBECDBFDF91CF911F9115
:1044E0000F91FF90EF90DF90CF90BF900C94FD273D
:1044F000F110EBCFD7CFFF2099F08B2D8F7127963E
:104500000FB6F894DEBF0FBECDBFDF91CF911F91E4
:104510000F91FF90EF90DF90CF90BF900C94D32736
:1045200027960FB6F894DEBF0FBECDBFDF91CF91B7
:104530001F910F91FF90EF90DF90CF90BF900C9460
:10454000CE27FF20A9F0552309F4ACCF862F27965C
:104550000FB6F894DEBF0FBECDBFDF91CF911F9194
:104560000F91FF90EF90DF90CF90BF900C94901E32
:10457000552309F4AACF862F27960FB6F894DEBFED
:104580000FBECDBFDF91CF911F910F91FF90EF90A4
:10459000DF90CF90BF900C94581F4B2D4F70C801E7
:1045A0000E94560327960FB6F894DEBF0FBECDBF0C
:1045B000DF91CF911F910F91FF90EF90DF90CF90FF
:1045C000BF900C940027F11082C09B2D9F70492F43
:1045D00050E04230510599F144F44115510569F01C
:1045E0004130510509F073C019C043305105C1F184
:1045F0004430510509F06BC044C027960FB6F894BB
:10460000DEBF0FBECDBFDF91CF911F910F91FF9005
:10461000EF90DF90CF90BF900C94763027960FB636
:10462000F894DEBF0FBECDBFDF91CF911F910F91E8
:10463000FF90EF90DF90CF90BF900C948D30279635
:104640000FB6F894DEBF0FBECDBFDF91CF911F91A3
:104650000F91FF90EF90DF90CF90BF900C94A93016
:1046600027960FB6F894DEBF0FBECDBFDF91CF9176
:104670001F910F91FF90EF90DF90CF90BF900C941F
:10468000BC30862F27960FB6F894DEBF0FBECDBF85
:10469000DF91CF911F910F91FF90EF90DF90CF901E
:1046A000BF900C94E0304B2D4F70C80127960FB689
:1046B000F894DEBF0FBECDBFDF91CF911F910F9158
:1046C000FF90EF90DF90CF90BF900C944309279616
:1046D0000FB6F894DEBF0FBECDBFDF91CF911F9113
:1046E0000F91FF90EF90DF90CF90BF9008950E94C0
:1046F00011290E9421290E94E6280E943D290E943A
:10470000482E0E949C2D80E090E00E946F1D80E06A
:1047100090E00C94851D0E9401290C9477230E943F
:104720006E28292F22952F7030E02C3031054CF463
:104730002A3031056CF4225031092230310590F4D1
:1047400007C02C30310551F02F30310559F406C027
:10475000803E10F0803F31F481E0089593FB88277C
:1047600080F9089580E00895CF93DF9300D000D0C2
:104770001F92CDB7DEB70F900F900F900F900F9054
:10478000DF91CF910895CF93DF9300D000D000D078
:10479000CDB7DEB726960FB6F894DEBF0FBECDBFFD
:1047A000DF91CF9108951F93CF93DF93C091DB02E8
:1047B00016E012C0D0E01C9FF0011D9FF00D1124E7
:1047C000E555FD4F408151816281738184819581DE
:1047D0000E94C3232196C7708091DC02C813EACFE0
:1047E000DF91CF911F9108954091A5025091A602AB
:1047F0006091A7027091A8028091A9029091AA02EB
:104800000C94C3230F931F93CF93DF938091AA023D
:1048100082958F7009F069C08091A702882309F4FE
:1048200064C0A091DB02D091DC02B091A502C091DE
:10483000A6028091A8029091A90221E030E0BF3F3A
:1048400011F020E030E0122FBC016095709506E079
:104850004AC0009721F0CF3F29F4212F05C021E065
:1048600030E002C020E030E020FD3BC04A2F50E0A5
:10487000049FF001059FF00D1124E555FD4F2181A6
:10488000C2132FC02081B2132CC02281211129C054
:10489000238134812817390718F0281B390B02C0EF
:1048A000260F371F283C3105E0F48091AA028F7053
:1048B00080618093AA0286E0849FF001859FF00DBD
:1048C0001124E055FD4F80818F708061808385EADF
:1048D00092E00E94B71FDF91CF911F910F910C942E
:1048E000D323AF5FA770AD13B4CFDF91CF911F91EA
:1048F0000F910895EF92FF920F931F93CF93DF9341
:10490000CDB7DEB762970FB6F894DEBF0FBECDBF4E
:104910008C0185E0F801DE011D9601900D928A95CB
:10492000E1F7D8014C9111965C91119712966C9118
:1049300012971396ED90FC9014977091A502E09158
:10494000A6028091A8029091A902009739F0EF3F4A
:1049500041F421E030E07F3F31F003C021E030E05E
:1049600002C020E030E020FD5CC12091A70222239C
:1049700009F4F1C0E816F90628F09701281B390B55
:10498000C90104C0809590958E0D9F1D883C9105AE
:1049900008F098C08091AA02982F907F09F064C017
:1049A000E51314C0741312C0611110C08F708061C0
:1049B0008093AA020E94F42385EA92E00E94B71F26
:1049C0008091AA02D80115968C9343C1EF2839F043
:1049D0005F3F41F481E090E04F3F31F003C081E060
:1049E00090E002C080E090E080FD03C081E0862777
:1049F00002C080E090E080FF2EC08091DB02209119
:104A0000DC0236E013C090E0389FF001399FF00DD2
:104A10001124E555FD4F7181571306C0708147136E
:104A200003C07281671317C0019687708213EBCFA2
:104A300012C19F7059F0882309F40BC107C09F7001
:104A400029F0F8019581907F09F403C1805E8830D8
:104A500008F4FFC0D2C0662309F4FBC08091AA020B
:104A600081608093AA02F5C0E51308C0741306C0E4
:104A7000611104C0D80115968C939DC04D875E8747
:104A80008D859E856A8B0E948F236A89882309F40D
:104A9000B4C0662309F4B1C02091AA02822F829586
:104AA0008F7090E002970CF4C6C08091A50290919F
:104AB000A60298878F831986FB86EA862C87CE010B
:104AC000079646C08091AA02982F907F59F47E2DB8
:104AD000F98AE88A89890E94B42385EA92E00E94D3
:104AE000B71F95C0E51311C074130FC061110DC03D
:104AF000F8018583C8010E94B71FE5EAF2E086E06D
:104B0000DF011D928A95E9F7A2C04D875E878D85EA
:104B10009E856A8B0E948F236A89882309F46DC061
:104B2000662309F46AC02091AA02822F82958F70B1
:104B300090E002970CF47FC08091A5029091A602AC
:104B40009A8389831B82FD82EC822E83CE0101969B
:104B50000E94B71F70C0E816F90628F09701281BBD
:104B6000390BC90104C0809590958E0D9F1D883C1E
:104B7000910508F046C0662309F43FC0E51330C034
:104B800074132EC02091AA0220FD21C0322F32952D
:104B90003F70832F90E00097D1F0D80115962C93A9
:104BA00015970F9741F0832F8F5F8295807F2F702D
:104BB000282B15962C93C8010E94B71F86E0F80198
:104BC000A5EAB2E001900D928A95E1F73EC086E039
:104BD000F801A5EAB2E001900D928A95E1F737C09D
:104BE0004D875E878D859E850E948F23811123C00E
:104BF0008091AA0281608093AA02C8010E94B71F17
:104C000026C07E2DF98AE88A89890E94B423E5EAC4
:104C1000F2E086E0DF011D928A95E9F70E94F42315
:104C200018C0662351F34D875E878D859E850E944F
:104C30008F23882311F386E0F801A5EAB2E0019002
:104C40000D928A95E1F70E9402240E94F42381E0EC
:104C500014C080E012C04D875E878D859E850E94BE
:104C60006E28292F22952F7030E0223031050CF468
:104C7000E0CE243031050CF6E2CE62960FB6F89401
:104C8000DEBF0FBECDBFDF91CF911F910F91FF907F
:104C9000EF9008951F93CF93DF93CDB7DEB72C9796
:104CA0000FB6F894DEBF0FBECDBF4F83588769871C
:104CB0007A878B879C87CE0107960E947A24882367
:104CC000D9F02F8138858A859B85892B39F03F3F24
:104CD00019F080E090E004C02F3FD9F781E090E028
:104CE000892B09F06DC04F81588569857A858B8540
:104CF0009C850E94C32364C086E0FE013796DE01D6
:104D0000119601900D928A95E1F7FF81E8854A8519
:104D10005B854115510539F0EF3F41F481E090E0AA
:104D2000FF3F31F003C081E090E002C080E090E0FE
:104D300080FD46C02091DC0230E0C90101968770F9
:104D400099276091DB0270E08617970709F440C04D
:104D5000F983EA835D834C8396E0929FD001939F11
:104D6000B00D1124A555BD4FFE01319601900D9255
:104D70009A95E1F78093DC020E94D32321C0189F0B
:104D8000C001112485559D4F0E947A24882371F11A
:104D9000E091DB021E9FF0011124E555FD4F40819B
:104DA000518162817381848195810E94C3238091A6
:104DB000DB0290E00196877099278093DB0201C0A7
:104DC00016E08091DB029091DC028913D8CF0EC0EF
:104DD0000E948B231092DC021092DB02E5EAF2E0E3
:104DE00086E0DF011D928A95E9F7EACF2C960FB68F
:104DF000F894DEBF0FBECDBFDF91CF911F91089514
:104E0000DF92EF92FF920F931F93CF93DF93EC010A
:104E1000009709F46EC0D12CEE24E394F12C8E019E
:104E20000F5F1F4FFE018491843748F4843008F0EF
:104E30004CC0813071F0823009F05BC01EC08537F4
:104E400009F43FC080F1982F9458903708F051C072
:104E50003FC02296F8018491982F905E983050F4CC
:104E60008770FE2D01C0FF0F8A95EAF78F2F0E94F1
:104E7000142913C00E94901E2FC02296F80184911D
:104E8000982F905E983060F48770FE2D01C0FF0F60
:104E90008A95EAF78F2F0E941A290E943D291CC08B
:104EA0000E94581F19C02296F801049107C08FE98B
:104EB0009FE00197F1F700C0000001500111F7CF0A
:104EC0000BC02296F801D49007C00E94901E03C028
:104ED0008F770E94581FE8018D2D07C08150EFE9A0
:104EE000FFE03197F1F700C00000882309F497CF65
:104EF000F5CFDF91CF911F910F91FF90EF90DF9051
:104F000008956093E1027093E2028093E30290932C
:104F1000E4020C9477236093DD027093DE028093A9
:104F2000DF029093E0020C94772308950C9481277C
:104F30000F931F930091E1021091E2022091E3028E
:104F40003091E402602B712B822B932B1F910F91D8
:104F50000C9481270F931F930091E1021091E202BC
:104F60002091E3023091E402602371238223932392
:104F70001F910F910C9481270F931F930091E102D1
:104F80001091E2022091E3023091E4026027712740
:104F9000822793271F910F910C94812760E070E086
:104FA000CB010C948B2741E050E060E070E004C03E
:104FB000440F551F661F771F8A95D2F7CB01BA01A0
:104FC0000C948B2741E050E060E070E004C0440F97
:104FD000551F661F771F8A95D2F78091DD02909149
:104FE000DE02A091DF02B091E002482B592B6A2B20
:104FF0007B2BCB01BA010C948B2741E050E060E0A1
:1050000070E004C0440F551F661F771F8A95D2F7C2
:1050100040955095609570958091DD029091DE02EB
:10502000A091DF02B091E002482359236A237B2339
:10503000CB01BA010C948B2741E050E060E070E0B6
:1050400004C0440F551F661F771F8A95D2F78091C1
:10505000DD029091DE02A091DF02B091E0024827CC
:1050600059276A277B27CB01BA010C948B270F9312
:105070001F930091DD021091DE022091DF0230913A
:10508000E002602B712B822B932B1F910F910C94BC
:105090008B270F931F930091DD021091DE02209168
:1050A000DF023091E00260237123822393231F915A
:1050B0000F910C948B270F931F930091DD02109199
:1050C000DE022091DF023091E00260277127822703
:1050D00093271F910F910C948B270895CF92DF9205
:1050E000EF92FF920F931F93CF93DF93EC01C09049
:1050F000E102D090E202E090E302F090E4028091BD
:10510000DD029091DE02A091DF02B091E002C82A98
:10511000D92AEA2AFB2A0FE110E0B701A601002EE6
:1051200004C076956795579547950A94D2F740FF46
:1051300008C0BE01802F0E94B3048130910509F0A0
:1051400007C00150110948F7BE0180E00E94B30476
:10515000DF91CF911F910F91FF90EF90DF90CF9053
:10516000089540918B0150918C0120E030E09FEF39
:10517000FA01E20FF31F62816817A1F09F3F19F453
:10518000611101C0922F2F5F3F4F2630310581F70B
:1051900007C0FA01E90FF11D97FDFA958283089582
:1051A0009F3FB9F7089540918B0150918C0120E009
:1051B00030E0FA01E20FF31F9281981301C01282CE
:1051C0002F5F3F4F26303105A1F7089581E090E031
:1051D000E0918B01F0918C01E80FF91F108201968C
:1051E00088309105A9F708959091E502982B909346
:1051F000E502089580959091E50298239093E50249
:1052000008951092E50208959091E602982B9093EC
:10521000E602089580959091E60298239093E60225
:1052200008951092E60208959091E702982B9093CA
:10523000E702089580959091E70298239093E70202
:1052400008951092E70208958093E802089510925D
:10525000E802089540918B0150918C0120E030E0EC
:1052600080E0FA01E20FF31F918191118F5F2F5FB0
:105270003F4F27303105A9F70895E0918B01F09158
:105280008C018091E5028083E0918B01F0918C018B
:1052900080819091E602892B8083E0918B01F091CF
:1052A0008C0180819091E702892B80839091E802A4
:1052B000992361F0E0918B01F0918C018081892B21
:1052C00080830E942A2981110E94272980918B01C5
:1052D00090918C010C94591D8091FB03843039F11D
:1052E0001092F20220E488E190E00FB6F894A895BD
:1052F000809360000FBE2093600080E00E949B03BB
:1053000080E00E942C0683B7817F846083BF83B7CF
:10531000816083BF7894889583B78E7F83BF88E14F
:105320000FB6F89480936000109260000FBE08954D
:1053300008950895CF9380E00E949B030E949829CE
:105340000E94E9070E949929C0E08C2F0E94390928
:10535000892B29F4CF5FC530C1F780E001C081E01F
:10536000CF9108950E948B2380E00E949B030E94AE
:1053700065300E944D1D0C942C061F920F920FB6A3
:105380000F9211248F939F93AF93BF938091F2025A
:10539000811113C08091F3029091F402A091F50263
:1053A000B091F6024196A11DB11D8093F302909336
:1053B000F402A093F502B093F602BF91AF919F91D2
:1053C0008F910F900FBE0F901F90189582E084BDB3
:1053D00093E095BD9AEF97BD80936E0008958FB7C7
:1053E000F8944091F3025091F4026091F5027091AB
:1053F000F6028FBFCA010895CF92DF92EF92FF921B
:105400000F931F932FB7F8944091F3025091F40239
:105410006091F5027091F6022FBF6A017B01EE24C4
:10542000FF248C0120E030E0C016D106E206F3062E
:1054300020F09A01281B390B05C09C01209530955E
:10544000240F351FC9011F910F91FF90EF90DF903E
:10545000CF9008951F920F920FB60F9211248F9341
:105460009F93AF93BF938091F3029091F402A09128
:10547000F502B091F6020196A11DB11D8093F302D1
:105480009093F402A093F502B093F602BF91AF910E
:105490009F918F910F900FBE0F901F9018950E94B3
:1054A0009516F8942FEF87EA91E6215080409040BE
:1054B000E1F700C0000087E090EBDC018093050479
:1054C00090930604A0930704B09308042CE088E1AD
:1054D00090E00FB6F894A895809360000FBE2093DB
:1054E0006000FFCFCF92DF92EF92FF920F931F9356
:1054F000CF93DF93C82ED12C01E010E08D2D0E94B8
:1055000039097C01C0E0D0E098010C2E02C0220FC6
:10551000331F0A94E2F72E213F21232B29F42196F1
:10552000CC30D10589F708C06C2F7D2D80E00E941A
:105530008E04C812F4CF06C0D39485E0D812DECF13
:1055400080E001C081E0DF91CF911F910F91FF902A
:10555000EF90DF90CF900895CF93C82F8CE20E94F8
:10556000722A882321F08C2FCF910C94722A80E02C
:10557000CF910895CF930E94FD2B811102C00E940C
:10558000DE2BC5E608C00E94E9078FE39CE901977E
:10559000F1F700C00000C150B1F789E20E94AC2AC7
:1055A00081110AC18AE20E94AC2A81110E94DE2B7D
:1055B00085E00E94AC2A81110E944F2A0E94082C8B
:1055C0008093F10287E00E94AC2A882399F18BE155
:1055D0000E94AC2A882351F09091F10291FB882718
:1055E00080F921E0822780FB91F922C08EE00E94A1
:1055F000AC2A882351F09091F10292FB882780F920
:1056000021E0822780FB92F913C080E10E94AC2A3E
:105610009091F102882341F093FB882780F921E0E3
:10562000822780FB93F904C0892F809580FB90F935
:105630009093F1028091F1020E940C2C0E941A2C8E
:105640008093020380EE0E94AC2A882341F080916F
:105650000203982F909590FB80F98093020389E3D1
:105660000E94AC2A882359F09091020391FB88276D
:1056700080F921E0822780FB91F99093020382EE6A
:105680000E94AC2A882359F09091020392FB88274C
:1056900080F921E0822780FB92F99093020386EE45
:1056A0000E94AC2A882359F09091020393FB88272B
:1056B00080F921E0822780FB93F99093020383EE27
:1056C0000E94AC2A882359F09091020394FB88270A
:1056D00080F921E0822780FB94F99093020385E30F
:1056E0000E94AC2A882359F09091020395FB8827E9
:1056F00080F921E0822780FB95F99093020381E3F2
:105700000E94AC2A882359F09091020396FB8827C7
:1057100080F921E0822780FB96F99093020381E1D2
:105720000E94AC2A882359F09091020397FB8827A6
:1057300080F921E0822780FB97F990930203809102
:1057400002030E941E2C87E20E94AC2AC82F8EE121
:105750000E94AC2A8111C2608FE10E94AC2A8111A3
:10576000C46080E20E94AC2A8111C86081E20E947C
:10577000AC2A8111C06182E20E94AC2A8111C06210
:1057800083E20E94AC2A8111C06484E20E94AC2AA8
:10579000882311F0C06802C0CC2329F08C2F0E940E
:1057A000152C6C2F03C00E94112C682F70E080E034
:1057B00090E0CF910C949627CF9108956DEE7EEFF7
:1057C00080E090E00E94CC3460E082E090E00E94B3
:1057D000BE3460E083E090E00E94BE3460E084E08C
:1057E00090E00E94BE3460E085E090E00E94BE340C
:1057F00060E086E090E00C94BE3480E090E00E948F
:10580000B83421E08D3E9E4F09F020E0822F0895AC
:1058100082E090E00C94B034682F82E090E00C9429
:10582000BE3483E090E00C94B034682F83E090E0C5
:105830000C94BE3484E090E00C94B034682F84E083
:1058400090E00C94BE3486E090E00C94B034682F65
:1058500086E090E00C94BE348091FF0280FF0BC084
:105860006091900185E0689FB0011124759567955E
:10587000759567952AC081FF09C06091900185E008
:10588000689FB0011124759567951FC082FF07C0FE
:105890006091900185E0689FB001112416C040918D
:1058A000F9024423C9F060918F01461788F72091CF
:1058B000900185E0289F90011124429FC001439FE1
:1058C000900D112470E00E949C346038710540F402
:1058D0006115710539F002C065E070E0862F08950A
:1058E0008FE7089581E008958091FF0280FF08C04E
:1058F00060918E0170E0759567957595679521C0EB
:1059000081FF06C060918E0170E07595679519C0A2
:1059100082FF04C060918E0170E010C08091F90296
:105920008823C1F060918D018617A0F790918E01B8
:10593000989FC001112470E00E949C34603871056A
:1059400028F46115710521F0862F08958FE70895D9
:1059500081E0089561E070E0F4CF803F21F40E947F
:105960002C2C819504C0813F29F40E942C2C80931B
:10597000FC020895823F21F40E942C2C819504C0E2
:10598000833F29F40E942C2C8093FB020895893FC9
:1059900019F40E94742C05C08A3F31F40E94742CC3
:1059A00081958093FD0208958B3F21F40E94742C11
:1059B000819504C08C3F29F40E94742C8093FE02D0
:1059C0000895843F21F48091FA02816017C0853FD9
:1059D00021F48091FA02826011C0863F21F4809107
:1059E000FA0284600BC0873F21F48091FA0288603C
:1059F00005C0883F31F48091FA0280618093FA02F9
:105A000008958D3F21F48091FF0281600BC08E3F8D
:105A100021F48091FF02826005C08F3F29F48091BC
:105A2000FF0284608093FF020895803F29F48091F3
:105A3000FC0287FF6EC007C0813F41F48091FC02E9
:105A400018160CF066C01092FC0263C09091FB0225
:105A5000823F19F497FF5DC005C0833F31F41916EA
:105A60000CF057C01092FB0254C0893F31F4809172
:105A7000FD0218160CF04DC006C08A3F39F4809123
:105A8000FD0287FF46C01092FD0243C08B3F29F400
:105A90008091FE0287FF3DC006C08C3F39F48091A3
:105AA000FE021816B4F51092FE0233C0843F21F4B2
:105AB0008091FA028E7F05C0853F31F48091FA0211
:105AC0008D7F8093FA0225C0863F21F48091FA02EF
:105AD0008B7FF7CF873F21F48091FA02877FF1CF48
:105AE000883F21F48091FA028F7EEBCF8D3F21F425
:105AF0008091FF028E7F0BC08E3F21F48091FF02C8
:105B00008D7F05C08F3F29F48091FF028B7F8093AA
:105B1000FF028091FB0281110EC08091FC02811175
:105B20000AC08091FD02811106C08091FE028111A0
:105B300002C01092F90208958AEF92E00E94641D5B
:105B40000E94EF299093F8028093F7020895CF9373
:105B50008091F7029091F8020E94FC294091F9028D
:105B6000442321F02091910130E006C02091920160
:105B70005AE0259F900111248217930708F486C0EC
:105B80008091FB0281110DC09091FC02911109C01E
:105B90009091FD02911105C09091FE02992309F4A4
:105BA00075C04F3F19F04F5F4093F902181624F467
:105BB0000E942C2C8093FB028091FB0287FF05C082
:105BC0000E942C2C81958093FB028091FC02181678
:105BD00024F40E942C2C8093FC028091FC0287FF0D
:105BE00005C00E942C2C81958093FC026091FB02E1
:105BF000662339F1C091FC02CC2319F1772767FDA8
:105C00007095872F972F0E94003223E333E343E3FD
:105C10005FE30E94B4320E94CD316093FB026C2F8F
:105C2000772767FD7095872F972F0E94003223E317
:105C300033E343E35FE30E94B4320E94CD316093CB
:105C4000FC028091FD02181624F40E94742C8093AB
:105C5000FD028091FD0287FF05C00E94742C819592
:105C60008093FD028091FE02181624F40E94742C89
:105C70008093FE028091FE0287FF05C00E94742C73
:105C800081958093FE02CF910C949C2DCF91089525
:105C9000EAEFF2E085E0DF011D928A95E9F71092C4
:105CA000F9021092FF020895833089F130F48130B7
:105CB00061F0823009F06EC019C0853009F449C026
:105CC000B8F1863009F066C055C020919201862F48
:105CD00090E0820F911D8F3F910520F4620F609339
:105CE000920108958FEF8093920108952091910180
:105CF000862F90E0820F911D8F3F910520F4620F57
:105D00006093910108958FEF809391010895209100
:105D10009001862F90E0820F911D8F3F910520F416
:105D2000620F6093900108958FEF80939001089522
:105D300020918F01862F90E0820F911D8F3F91055A
:105D400020F4620F60938F0108958FEF80938F018D
:105D5000089520918E01862F90E0820F911D8F3F34
:105D6000910520F4620F60938E0108958FEF809368
:105D70008E01089520918D01862F90E0820F911D54
:105D80008F3F910520F4620F60938D0108958FEF8E
:105D900080938D010895833021F130F4813059F0E2
:105DA000823009F049C012C0853089F128F186306F
:105DB00009F042C037C080919201681720F4861B19
:105DC000809392010895109292010895809191011B
:105DD000681720F4861B8093910108951092910119
:105DE000089580919001681720F4861B809390019C
:105DF000089510929001089580918F01681720F402
:105E0000861B80938F01089510928F0108958091D1
:105E10008E01681720F4861B80938E0108951092DE
:105E20008E01089580918D01681720F4861B809360
:105E30008D01089510928D01089541E050E060E0D9
:105E400070E004C0440F551F661F771F8A95D2F774
:105E5000CB01BA010E9496270C948B23873200F560
:105E60008E3108F089C08E3009F469C060F4873043
:105E700009F44DC018F4863049F531C0883041F13D
:105E80008B3021F57EC0863109F47BC018F4803157
:105E9000E9F45FC0893109F474C08B31B9F445C0AD
:105EA000883309F46EC048F4893209F467C0853339
:105EB00009F464C0873251F461C0833409F45EC0D0
:105EC00018F48A3318F056C0883499F080E00895A9
:105ED0000E94082C0E941A2C0E94232C52C08091F0
:105EE000F102817F8E7F8093F10281E08093000335
:105EF00008950E948B232FEF83ED90E32150804083
:105F00009040E1F700C000000E944F2A3AC09091F3
:105F1000F102892F8095817080FB90F919F09660CD
:105F2000986025C0997F977F22C09091F10291FBE4
:105F3000882780F921E0822780FB91F913C0909196
:105F4000F10292FB882780F921E0822780FB92F9F9
:105F500009C09091F10293FB882780F921E0822704
:105F600080FB93F99093F102882359F0916090930C
:105F7000F10207C0895303C08D5101C080E00E9427
:105F80001D2F81E0089580E0089580E00895CF936B
:105F9000C82F80910003813071F020F0823009F029
:105FA00089C037C0A0918B01B0918C018C91823255
:105FB00009F082C007C0A0918B01B0918C018C9137
:105FC000823249F48C2F0E94C32F81111EC08C2F66
:105FD0000E942E2F1CC08C2F0E94C52F811115C02E
:105FE000C43169F030F4CB3081F0C03109F068C0C1
:105FF00009C0C93221F0C83309F062C006C010924E
:1060000000035EC082E08093000381E090E0817035
:106010005AC0C932C9F060F4C431B1F020F4C730BD
:1060200009F04CC034C0CE51C63008F047C017C08C
:10603000CE3439F120F4CB3409F040C01CC0C13556
:10604000C1F0C235D9F513C080910103882319F03E
:106050001092010333C081E08093000334C0EC2F21
:10606000F0E0E25EFD4F80818093010327C061E094
:1060700003C061E007C06AE0809101030E94542ED2
:106080001DC06AE0809101030E94CB2E17C08EE1F3
:106090008093920182E3809391018AE08093900142
:1060A00084E180938F0188E080938E0188E2809361
:1060B0008D0104C01092000380E005C081E003C0A0
:1060C00080E090E0A4CFCF9108950E94FD2B811134
:1060D00002C00E94DE2B0E94232C8093040480FFC8
:1060E00002C0869501C080E00C949B03809104045B
:1060F000982F9695292F30E0233031054CF49F5F7F
:10610000990F8170892B8160809304040E94272C51
:106110008091040486950C949B0380910404982F2D
:10612000969591F09158990F8170892B8093040472
:106130008E7F91E009F490E08091040490FB80F957
:10614000809304040E94272C8091040486950C946B
:106150009B0380910404982F909590FB80F9809385
:1061600004040E94272C8091040480FF02C08695BD
:1061700001C080E00C949B0330910404232F2695EA
:106180002F5F2F77822F90E0317004972CF4220F2D
:10619000232B2093040402C0309304048091040450
:1061A000282F2E7F91E009F490E090FB80F98093F6
:1061B00004040E94272C8091040486950C949B0370
:1061C00020910404922F96959827990F822F817021
:1061D000892B809304048E7F91E009F490E08091F4
:1061E000040490FB80F9809304040E94272C809182
:1061F000040486950C949B035058BB27AA270ED005
:1062000075C166D130F06BD120F031F49F3F11F4AD
:106210001EF45BC10EF4E095E7FB51C1E92F77D185
:1062200080F3BA17620773078407950718F071F4B3
:106230009EF58FC10EF4E0950B2EBA2FA02D0B0109
:10624000B90190010C01CA01A0011124FF27591BBB
:1062500099F0593F50F4503E68F11A16F040A22FC1
:10626000232F342F4427585FF3CF46953795279532
:10627000A795F0405395C9F77EF41F16BA0B620B31
:10628000730B840BBAF09150A1F0FF0FBB1F661F78
:10629000771F881FC2F70EC0BA0F621F731F841FBB
:1062A00048F4879577956795B795F7959E3F08F0E1
:1062B000B3CF9395880F08F09927EE0F97958795A0
:1062C0000895D9D008F481E008950CD00FC107D10A
:1062D00040F0FED030F021F45F3F19F0F0C05111D2
:1062E00039C1F3C014D198F39923C9F35523B1F3FD
:1062F000951B550BBB27AA2762177307840738F035
:106300009F5F5F4F220F331F441FAA1FA9F333D093
:106310000E2E3AF0E0E830D091505040E695001C47
:10632000CAF729D0FE2F27D0660F771F881FBB1F03
:10633000261737074807AB07B0E809F0BB0B802DDD
:10634000BF01FF2793585F4F2AF09E3F510568F029
:10635000B6C000C15F3FECF3983EDCF386957795BD
:106360006795B795F7959F5FC9F7880F911D96952B
:10637000879597F90895E1E0660F771F881FBB1F87
:10638000621773078407BA0720F0621B730B840B34
:10639000BA0BEE1F88F7E095089504D06894B11108
:1063A000D9C00895BCD088F09F5790F0B92F992795
:1063B000B751A0F0D1F0660F771F881F991F1AF010
:1063C000BA95C9F712C0B13081F0C3D0B1E00895D9
:1063D000C0C0672F782F8827B85F39F0B93FCCF35A
:1063E000869577956795B395D9F73EF49095809506
:1063F000709561957F4F8F4F9F4F0895E89409C026
:1064000097FB3EF490958095709561957F4F8F4FE7
:106410009F4F9923A9F0F92F96E9BB279395F695FD
:10642000879577956795B795F111F8CFFAF4BB0F7B
:1064300011F460FF1BC06F5F7F4F8F4F9F4F16C0DF
:10644000882311F096E911C0772321F09EE8872F69
:10645000762F05C0662371F096E8862F70E060E025
:106460002AF09A95660F771F881FDAF7880F96959E
:10647000879597F90895990F0008550FAA0BE0E842
:10648000FEEF16161706E807F907C0F012161306F6
:10649000E407F50798F0621B730B840B950B39F436
:1064A0000A2661F0232B242B252B21F408950A269C
:1064B00009F4A140A6958FEF811D811D089597F9DC
:1064C0009F6780E870E060E008959FEF80EC08959A
:1064D00000240A94161617061806090608950024C3
:1064E0000A9412161306140605060895092E03943D
:1064F000000C11F4882352F0BB0F40F4BF2B11F4B1
:1065000060FF04C06F5F7F4F8F4F9F4F089557FD0F
:106510009058440F551F59F05F3F71F04795880F11
:1065200097FB991F61F09F3F79F0879508951216A8
:1065300013061406551FF2CF4695F1DF08C0161654
:1065400017061806991FF1CF869571056105089405
:106550000895E894BB2766277727CB0197F908951C
:106560008ADF08F48FEF08950BD0C0CFB1DF28F099
:10657000B6DF18F0952309F0A2CFA7CF1124EACFF8
:10658000C6DFA0F3959FD1F3950F50E0551F629F92
:10659000F001729FBB27F00DB11D639FAA27F00D7C
:1065A000B11DAA1F649F6627B00DA11D661F829FA3
:1065B0002227B00DA11D621F739FB00DA11D621F88
:1065C000839FA00D611D221F749F3327A00D611DA5
:1065D000231F849F600D211D822F762F6A2F112487
:1065E0009F5750408AF0E1F088234AF0EE0FFF1FDA
:1065F000BB1F661F771F881F91505040A9F79E3F11
:10660000510570F05CCFA6CF5F3FECF3983EDCF312
:10661000869577956795B795F795E7959F5FC1F74D
:10662000FE2B880F911D9695879597F90895FA018D
:10663000EE0FFF1F30962105310599F161157105A7
:1066400061F48038BFE39B0749F168949038810575
:1066500061F08038BFEF9B0741F0992342F5FF3F7F
:10666000E1053105210511F1E8940894E795D90178
:10667000AA2329F4AB2FBE2FF85FD0F310C0FF5F21
:1066800070F4A695E0F7F73950F019F0FF3A38F4B6
:106690009F779F930CD00F9007FC905808953EF081
:1066A00014CF60E070E080E89FE308954FE79F77A4
:1066B0005F934F933F932F939ED02F913F914F9194
:1066C0005F9152DF05C019F40EF0F9CE42CFFDCE36
:1066D00026DFC8F39638C0F707F80F92E8942BE34B
:1066E0003AEA48EB5FE74EDF0F920F920F924DB7F9
:1066F0005EB70F92C0D0ECEAF0E016D04F915F91F8
:10670000EF91FF91E595EE1FFF1F49F0FE57E068FE
:106710004427EE0F441FFA95E1F74195550B32D00F
:106720000F9007FE26C00895DF93CF931F930F931A
:10673000FF92EF92DF927B018C01689405C0DA2E04
:10674000EF011EDFFE01E894A59125913591459159
:106750005591AEF3EF0162DDFE019701A801DA94D5
:1067600079F7DF90EF90FF900F911F91CF91DF911C
:1067700008959B01AC0160E070E080E89FE3A5CD47
:106780009ECEACC0CCDEE8F39923D9F3940F511D13
:10679000BBF39150504094F059F0882332F0660FCB
:1067A000771F881F91505040C1F79E3F510544F715
:1067B000880F911D9695879597F908955F3FACF0E6
:1067C000983E9CF0BB27869577956795B79508F41A
:1067D000B1609395C1F7BB0F58F711F460FFE8CF94
:1067E0006F5F7F4F8F4F9F4FE3CFB4CE0EF076C0D9
:1067F0006CCE689464CE93DEC8F39923D1F3C6F3CC
:10680000DF93CF931F930F93FF92C92FDD27882328
:106810002AF02197660F771F881FDAF720E030E013
:1068200040E85FEB9FE3883920F0803E30F021960E
:106830008F77E3DCE4EDF0E003C0DFDCE1E0F1E0E2
:1068400073DF8B01BE01EC01FB2E6F57710975954B
:10685000771F880B990BD4DD28E132E741E35FE332
:106860008FDEAF2D9801AE01FF900F911F91CF9158
:10687000DF91D4DC3BCEFA01DC01AA0FBB1F9B01E8
:10688000AC01BF5728F422273327442750781FC074
:10689000B75188F4AB2F0024469537952795011CF6
:1068A000A395D2F3002069F0220F331F441FB39544
:1068B000DAF30DD0A1CC61307105A0E88A07B946A2
:1068C00030F49B01AC0166277727882790783096B3
:1068D00021F0208331834283538308959F3F31F019
:1068E000915020F4879577956795B795880F911DFE
:1068F0009695879597F90895991B79E004C0991F9B
:10690000961708F0961B881F7A95C9F78095089509
:10691000AA1BBB1B51E107C0AA1FBB1FA617B707C5
:1069200010F0A61BB70B881F991F5A95A9F78095E1
:106930009095BC01CD01089597FB072E16F40094A5
:1069400007D077FD09D00E94883407FC05D03EF4BB
:10695000909581959F4F0895709561957F4F08950B
:10696000F999FECF92BD81BDF89A992780B5089517
:10697000A8E1B0E042E050E00C94D334262FF9991E
:10698000FECF1FBA92BD81BD20BD0FB6F894FA9A12
:10699000F99A0FBE019608950E94BE34272F0C94D9
:1069A000BF34DC01CB01FC01F999FECF06C0F2BD7A
:1069B000E1BDF89A319600B40D9241505040B8F7BD
:0669C0000895F894FFCFDA
:1069C60055D0A446000016440000000000004842CE
:1069D60061978A460000C843000000000000484254
:1069E60055D024460000C84300000000000048427D
:1069F60000005C460000C84300000000000048425A
:106A060061978A4600007A4455D0A4460000C843E0
:106A1600000000000000484200005C460000C84339
:106A2600000000000000484255D0244600001644ED
:106A36000507000C05854000000106400000010026
:106A4600B91049112511F010BC1001E902280814EB
:106A56000A321E4200450025002600430061006000
:106A660000200037006400650066006700440046A9
:106A7600002400470000000200040005000700098A
:106A8600000B000C000E001000110013001500177B
:106A96000018001A001C001D001F002100230024FE
:106AA600002600280029002B002D002F0030003280
:106AB6000034003500370039003B006E048704A01F
:106AC60004B904E10594055E053E053F4D362002F6
:106AD60003020000010001010101010001010102A0
:086AE60003040506070809007E
:00000001FF

@ -1,1702 +0,0 @@
:100000000C94D4020C9418030C9418030C94180349
:100010000C9418030C9418030C9418030C941803F4
:100020000C9418030C9418030C94E8160C94BA174B
:100030000C946C290C9418030C9418030C9418035A
:100040000C9418030C9418030C9418030C941803C4
:100050000C9418030C94D9290C9418030C941803CD
:100060000C9418030C9418030C9418030C941803A4
:100070000C9418030C9418030C9418030C94180394
:100080000C941C0E0C9418030C9418030C94180375
:100090000C9418030C9418030C9418030C94180374
:1000A0000C9418030C9418030C941803076342363D
:1000B000B79BD8A71A39685618AEBAAB558C1D3CF9
:1000C000B7CC5763BD6DEDFD753EF6177231BF00BD
:1000D0000000803F08000000BE922449123EABAAF7
:1000E000AA2ABECDCCCC4C3E00000080BEABAAAA52
:1000F000AA3E00000000BF000000803F000000009A
:1001000000084178D3BB4387D1133D190E3CC3BDD2
:100110004282AD2B3E68EC8276BED98FE1A93E4C7F
:1001200080EFFFBE01C4FF7F3F00000000003500EC
:100130001E001F00200021002200230024002500B3
:10014000260027002A002B0014001A0008001500C2
:1001500017001C0018000C00120013002A002900D0
:1001600004001600070009000A000B000D000E0035
:100170000F0033003400E1001D001B0006001900D1
:10018000050011001000360037003800280000304C
:10019000E000E200E30003522C002C000452500067
:1001A000510052004F0035001E001F0020002100AA
:1001B0002200230024002500260027002A002B000F
:1001C00014001A00090013000A000D000F001800A7
:1001D0001C0033002A002900040015001600170037
:1001E00007000B00110008000C0012003400E100B1
:1001F0001D001B000600190005000E00100036004F
:100200003700380028000030E000E200E30003522D
:100210002C002C0004525000510052004F003500B9
:100220001E001F00200021002200230024002500C2
:10023000260027002A002B00340036003700130068
:100240001C0009000A00060015000F002A00290002
:1002500004001200080018000C0007000B00170033
:10026000110016003800E100330014000D000E00EC
:100270001B00050010001A0019001D0028000030A6
:10028000E000E200E30003522C002C000452500076
:10029000510052004F0035001E001F0020002100B9
:1002A0002200230024002500260027002A00350212
:1002B0001E021F0220022102220223022402250222
:1002C000260227022A0001003A003B003C003D00C4
:1002D0003E003F002D022E022F02300231020100AB
:1002E00040004100420043004400450000530153D8
:1002F0000253005001000100010001000100010053
:10030000010001000100AB00AA00A900AE00350009
:100310001E001F00200021002200230024002500D1
:10032000260027002A0035001E001F0020002100A3
:100330002200230024002500260027002A000100B7
:100340003A003B003C003D003E003F002D002E00E7
:100350002F00300031000100400041004200430006
:1003600044004500005301530253005001000100B6
:100370000100010001000100010001000100AB00CB
:10038000AA00A900AE002A035400680065002000FE
:100390005000720065006F006E006900630020006D
:1003A0004B006500790062006F006100720064001C
:1003B00000002C034F007200740068006F006C0096
:1003C00069006E0065006100720020004B0065004E
:1003D000790062006F006100720064007300000029
:1003E000040309040902D000060100A0FA09040070
:1003F000000103010100092111010001223F000752
:1004000005810308000A0904010001030102000933
:100410002111010001224D000705820308000A098D
:10042000040200010300000009211101000122362D
:10043000000705830308000A090403000203000003
:10044000000921110100012220000705840320007A
:100450000107050403200001090404000001010054
:100460000009240100010900010509040500020139
:1004700003000007240100014100062402010100DD
:1004800006240202020009240301030102010009FB
:1004900024030204010101000905060240000500D1
:1004A0000005250101010905850240000500000540
:1004B000250101031201100100000008EDFE61603A
:1004C0000100010200010631FF0974A1010975153F
:1004D0000025FF9520750881020976150025FF95F6
:1004E0002075089102C005010980A101850216014D
:1004F0000026B7001A01002AB70075109501810087
:10050000C0050C0901A1018503160100269C021AF1
:1005100001002A9C02751095018100C005010902A5
:10052000A1010901A10005091901290515002501ED
:100530009505750181029501750381010501093059
:1005400009311581257F95027508810609381581C5
:10055000257F950175088106050C0A38021581254D
:100560007F950175088106C0C005010906A1010536
:100570000719E029E7150025019508750181029505
:100580000175088101050819012905950575019175
:10059000029501750391010507190029FF15002532
:1005A000FF950675088100C011241FBECFEFDAE069
:1005B000DEBFCDBF04B603FE24C080910404909139
:1005C0000504A0910604B09107048730904BA74022
:1005D000B04BB9F410920404109205041092060472
:1005E0001092070414BE84B7877F84BF88E10FB6DA
:1005F000F89480936000109260000FBEE0E0F8E392
:10060000099512E0A0E0B1E0EEE1F9E602C0059044
:100610000D92A832B107D9F714E0A8E2B2E001C008
:100620001D92A430B107E1F70E94A0130C948D3401
:100630000C94000061110DC0FC018281882331F00F
:1006400085EE0E94671E0E94683003C085EE0E94FE
:100650002F1F80E090E008950E940F0E40E050E0D0
:1006600069E070E080E091E00C94600F08950E94D2
:1006700049036E9A769A8CE293E0892B11F00C94E0
:100680002C03089586E393E0892B11F00C94360334
:100690000895279A2F988FEF9FEF9093870080936C
:1006A00086008AE08093800089E1809381000C9429
:1006B000113081110BC080918000877F8093800072
:1006C00010928D0010928C002F9808952F988330EF
:1006D00041F4809180008860809380008FEF9FEFCD
:1006E00012C09091800098609093800023E030E0E9
:1006F000281B3109220F331F8FEF9FEF02C0969501
:1007000087952A95E2F790938D0080938C00089549
:100710008B3B910568F4883A910530F5853A91054F
:10072000C0F48430910598F4019709F06FC071C04E
:10073000803E910508F46AC0883E910540F09C0116
:10074000205F31092031310508F060C05CC09C0198
:10075000A1C0853A910509F45FC0863A910509F474
:100760005EC023E830E496C0883A910509F45AC087
:10077000893A910509F459C08A3A910509F458C09B
:100780008B3A910509F457C08C3A910509F456C08B
:100790008D3A910509F455C0803B910509F454C088
:1007A0008E3A910509F453C08F3A910509F452C06D
:1007B000813B910509F451C0823B910509F450C079
:1007C000833B910509F44FC0843B910509F44EC069
:1007D000853B910509F44DC0863B910509F44CC059
:1007E000873B910509F44BC0883B910509F44AC049
:1007F000893B910509F449C08A3B910509F048C03D
:100800002AE236E447C09C01306544C020E030E075
:1008100041C021E030E03EC021E830E43BC022E8A6
:1008200030E438C022EE34E435C029EE34E432C07E
:100830002AEE34E42FC025EB34E42CC026EB34E45C
:1008400029C027EB34E426C02CEC34E423C02DEC83
:1008500034E420C023E835E41DC02AE835E41AC09A
:1008600022E935E417C024E935E414C021E236E476
:1008700011C023E236E40EC024E236E40BC025E2C8
:1008800036E408C026E236E405C027E236E402C0BA
:1008900020E034E4C90108959CE0799FF00111241F
:1008A0009CE3899FE00DF11D1124E60FF11DEE0F71
:1008B000FF1FE25DFE4F25913491C9010895880F15
:1008C000991F82559040FC0125913491C9010895EA
:1008D000880F991F825D9E4FFC0125913491C901BB
:1008E00008950E944C049C019A9581159F4110F433
:1008F000C9010895C90190528115904128F4C90198
:100900009F700E9468040895C90190538115904119
:1009100020F4C9019927906C0895C901905440971B
:1009200028F4C9018F709927946D0895203180E4CF
:10093000380719F480E091ED0895213190E43907EA
:1009400019F480E090ED0895223140E4340719F461
:1009500080E092ED0895233180E4380719F480E0B7
:1009600093ED0895211590E5390799F40E945623D7
:1009700040E065E088E491E00E94600F2FEF44E3DF
:100980008CE0215040408040E1F700C000000C9412
:10099000FE29213090E5390731F48091F002816021
:1009A0008093F0020895C90190558115904108F097
:1009B00062C0432F55274F70552741305105F9F438
:1009C000C90174E0880F991F7A95E1F78827937021
:1009D000B901E3E0660F771FEA95E1F760767727C4
:1009E000862B972B9C682370332702C0440F551F1A
:1009F0002A95E2F74F715527842B952B08954230A5
:100A0000510529F4922F8827816F906A0895433009
:100A10005105B9F4C90153E0880F991F5A95E1F7C0
:100A2000807E97702370332741E050E002C0440F6E
:100A3000551F2A95E2F74F715527842B952B9C68FB
:100A400008954430510589F5C90143E0880F991F85
:100A50004A95E1F7807E97702370332741E050E09C
:100A600002C0440F551F2A95E2F74F715527842B7A
:100A7000952B9A680895C90190568115904118F4F4
:100A8000C901906F0895C90190578115904120F4D4
:100A9000C9019F7090620895C901905881159041D5
:100AA00020F4C9019F70906A0895203E3105E0F45A
:100AB000203C310568F52133310509F475C048F44F
:100AC0002932310509F46BC02A32310509F07BC0A7
:100AD00075C02933310501F122383105E9F025339C
:100AE000310509F070C051C0233E3105B1F140F429
:100AF000203E3105D1F0223E310509F064C01CC012
:100B0000263E310579F1273E310509F05CC038C039
:100B1000C9010E945F0408958091010380FD02C015
:100B200081FF51C080EE90E04FC08091010380FFB3
:100B3000F9CF89E390E048C08091010382FF0AC0A9
:100B40008091010384FF03C080E090E03DC083EE0C
:100B500090E03AC082EE90E037C08091010382FFBE
:100B6000EFCFF8CF8091010383FF07C0809101038D
:100B700084FDEACF87EE90E027C086EE90E024C0A7
:100B80008091010383FFF2CFF8CF8091010385FFAD
:100B900003C089E290E018C085E390E015C0809121
:100BA000010385FDF9CFF5CF8091010386FF03C0D6
:100BB0008AE290E009C081E390E006C080910103E1
:100BC00086FDF9CFF5CFC9010E94880308950895E5
:100BD0005F926F927F928F929F92AF92BF92CF92CD
:100BE000DF92EF92FF920F931F93CF93DF93CDB7D6
:100BF000DEB72A970FB6F894DEBF0FBECDBF9E01B9
:100C00002F5F3F4F4E018BE0880E911C60E070E03B
:100C100000E010E0E12CF12CC12CD12CA12CB12C46
:100C20008AE0782E622E532E41E050E0E3E9F1E0B5
:100C3000A62DB52D872D01900D928A95E1F7F9012A
:100C4000819191919F01FC01E07FFF27E032F10546
:100C500059F48F709927FA0102C0EE0FFF1F8A9591
:100C6000E2F7AE2ABF2A37C0E033F10559F48F709E
:100C70009927FA0102C0EE0FFF1F8A95E2F7CE2AEC
:100C8000DF2A29C0E034F10559F48F709927FA0161
:100C900002C0EE0FFF1F8A95E2F7EE2AFF2A1BC063
:100CA000E035F10559F48F709927FA0102C0EE0F73
:100CB000FF1F8A95E2F70E2B1F2B0DC0E036F105C2
:100CC00051F48F709927FA0102C0EE0FFF1F8A9529
:100CD000E2F76E2B7F2B2815390509F0A7CF94B1C9
:100CE0008A2D8095892384B985B18A2985B997B1E0
:100CF0008C2D8095892387B988B18C2988B99AB1C0
:100D00008E2D809589238AB98BB18E298BB99DB19F
:100D1000802F809589238DB98EB1802B8EB990B3A9
:100D2000862F8095892380BB81B3862B81BB2A9631
:100D30000FB6F894DEBF0FBECDBFDF91CF911F91EC
:100D40000F91FF90EF90DF90CF90BF90AF909F906A
:100D50008F907F906F905F9008955F926F927F92D7
:100D60008F929F92AF92BF92CF92DF92EF92FF92BB
:100D70000F931F93CF93DF93CDB7DEB768970FB66E
:100D8000F894DEBF0FBECDBF85B7806885BF85B73D
:100D9000806885BF0E94E8059E012F5F3F4F4E018E
:100DA00089E1880E911C60E070E000E010E0E12C29
:100DB000F12CC12CD12CA12CB12C98E1792E622ED2
:100DC000532E41E050E0EDE9F1E0A62DB52D872D41
:100DD00001900D928A95E1F7F901819191919F011E
:100DE000FC01E07FFF27E032F10559F48F7099276D
:100DF000FA0102C0EE0FFF1F8A95E2F7AE2ABF2A62
:100E000037C0E033F10559F48F709927FA0102C019
:100E1000EE0FFF1F8A95E2F7CE2ADF2A29C0E034C1
:100E2000F10559F48F709927FA0102C0EE0FFF1FE8
:100E30008A95E2F7EE2AFF2A1BC0E035F10559F446
:100E40008F709927FA0102C0EE0FFF1F8A95E2F713
:100E50000E2B1F2B0DC0E036F10551F48F70992732
:100E6000FA0102C0EE0FFF1F8A95E2F76E2B7F2B6F
:100E70002815390509F0A7CF94B18A2D80958923CB
:100E800084B985B18A2985B997B18C2D809589233C
:100E900087B988B18C2988B99AB18E2D809589231C
:100EA0008AB98BB18E298BB99DB1802F809589230A
:100EB0008DB98EB1802B8EB990B3862F8095892302
:100EC00080BB81B3862B81BB10922902109228022D
:100ED000109233021092320210922B0210922A02C8
:100EE000109235021092340210922D0210922C02B0
:100EF000109237021092360210922F0210922E0298
:100F0000109239021092380210923102109230027F
:100F100010923B0210923A0287E393E0892BB9F0DA
:100F200068960FB6F894DEBF0FBECDBFDF91CF91AC
:100F30001F910F91FF90EF90DF90CF90BF90AF90F7
:100F40009F908F907F906F905F900C94370368967E
:100F50000FB6F894DEBF0FBECDBFDF91CF911F91CA
:100F60000F91FF90EF90DF90CF90BF90AF909F9048
:100F70008F907F906F905F9008955F926F927F92B5
:100F80008F929F92AF92BF92CF92DF92EF92FF9299
:100F90000F931F93CF93DF93CDB7DEB7A2970FB612
:100FA000F894DEBF0FBECDBF7E0149E1E40EF11C17
:100FB00022E3C22E22E0D22E5E0153E2A50EB11C26
:100FC0003AE0532E470101E010E048E1642E55E07D
:100FD000752EE3E9F1E0D401852D01900D928A95FB
:100FE000E1F7F701819191917F019C01207F3327E7
:100FF0002032310589F424B18F709927A80102C0ED
:10100000440F551F8A95E2F7CA01242B24B995B1E4
:101010008095892385B94FC02033310589F427B1E4
:101020008F709927F80102C0EE0FFF1F8A95E2F733
:10103000CF012E2B27B998B18095892388B93BC061
:101040002034310589F42AB18F709927A80102C094
:10105000440F551F8A95E2F7CA01242B2AB99BB188
:10106000809589238BB927C02035310589F42DB1AE
:101070008F709927F80102C0EE0FFF1F8A95E2F7E3
:10108000CF012E2B2DB99EB1809589238EB913C027
:101090002036310581F420B38F709927A80102C052
:1010A000440F551F8A95E2F7CA01242B20BB91B348
:1010B0008095892381BB50EA5A95F1F7BE016F5F95
:1010C0007F4F80E090E020E030E0EDE9F1E0DE01EC
:1010D0001196462D01900D924A95E1F7FB01419141
:1010E0005191BF01FA01E07FFF27E032F10511F4D1
:1010F000E3B113C0E033F10511F4E6B10EC0E03402
:10110000F10511F4E9B109C0E035F10511F4ECB1D4
:1011100004C0E036F105B9F4EFB1F0E04F705527A7
:1011200002C0F595E7954A95E2F7E0FD08C0A801F1
:10113000022E02C0440F551F0A94E2F702C040E09D
:1011400050E0842B952B2F5F3F4F2C30310509F059
:10115000BCCFF601208131812817390721F0918316
:101160008083709270010E94E805F2E0CF0ED11CDE
:10117000EA14FB0409F02DCF809170018823A1F1BE
:10118000815080937001882339F08FE99FE00197A7
:10119000F1F700C0000028C0809132029091330224
:1011A0009093290280932802809134029091350215
:1011B00090932B0280932A028091360290913702FD
:1011C00090932D0280932C028091380290913902E5
:1011D00090932F0280932E0280913A0290913B02CD
:1011E000909331028093300282E493E0892B11F0D6
:1011F0000E94420381E0A2960FB6F894DEBF0FBEB4
:10120000CDBFDF91CF911F910F91FF90EF90DF90B5
:10121000CF90BF90AF909F908F907F906F905F9096
:101220000895E82FF0E0EE0FFF1FE85DFD4F80818D
:10123000918108950895CF92DF92EF92FF920F93DC
:101240001F93CF93DF93CDB7DEB7CC5BD2400FB601
:10125000F894DEBF0FBECDBF8C01862F642F88238C
:1012600079F0F80192812FE7482F992329F083E044
:1012700093E00E94C41904C083E093E00E94D41953
:10128000F80180818B3091F59181943009F0A8C2EA
:101290009281809173019923B1F08F5F80937301E4
:1012A00096E4E5EBF1E0DE01A958BD4F01900D9207
:1012B0009A95E1F7E0917101F0917201EE0FFF1F35
:1012C00027E732E036C096E4E5EBF1E0DE01AF5C03
:1012D000BD4F01900D929A95E1F7E0917101F09167
:1012E0007201EE0FFF1F21E332E093C08A3009F054
:1012F000CBC0F8019181943009F072C29281809143
:101300007301992309F473C081508093730196E4AB
:10131000E5EBF1E0DE01A551BE4F01900D929A95EB
:10132000E1F7E0917101F0917201EE0FFF1F2BEEDA
:1013300031E02C0F3D1FE20FF31F60817181680FB8
:10134000711D882777FD8095982F0E94AC3120E091
:1013500030E040E451E40E94113120E030E040E808
:1013600050E40E94A9309B01AC0160E070E080E095
:1013700090E40E94C33221E230ED42E053E40E9447
:1013800060324CE050E00E94BB0F20E04BE760E091
:1013900083E093E00E94B41920E04BE761E083E032
:1013A00093E00E94B41920E04BE762E083E093E011
:1013B0000E94B41920E04BE763E083E093E00E94D1
:1013C000B41920E04BE764E083E093E0C454DD4FC0
:1013D0000FB6F894DEBF0FBECDBFDF91CF911F9146
:1013E0000F91FF90EF90DF90CF900C94B41996E49A
:1013F000E5EBF1E0DE01AB55BE4F01900D929A9501
:10140000E1F7E0917101F0917201EE0FFF1F25EA03
:1014100031E02C0F3D1FE20FF31F60817181680FD7
:10142000711D882777FD8095982F0E94AC3120E0B0
:1014300030E040E451E40E94113120E030E040E827
:1014400050E40E94A9309B01AC0160E070E080E0B4
:1014500090E40E94C33221E230ED42E053E40E9466
:1014600060320E94EB0CC454DD4F0FB6F894DEBF1F
:101470000FBECDBFDF91CF911F910F91FF90EF90E5
:10148000DF90CF900C94BE0C893009F0D3C0F801E6
:101490009181943009F0A4C19281992309F4A0C1EB
:1014A00080917101909172010196909372018093E5
:1014B000710120E04BE760E083E093E00E94B41903
:1014C00020E04BE761E083E093E00E94B41920E064
:1014D0004BE762E083E093E00E94B41920E04BE721
:1014E00063E083E093E00E94B41920E04BE764E0FE
:1014F00083E093E00E94B4190E94BE0C00E010E06B
:10150000E6E4FE2E80917301E5EBF1E0DE01A15AE5
:10151000BE4F9F2D01900D929A95E1F7E0917101D8
:10152000F0917201E00FF11FEE0FFF1F2FE531E088
:101530002C0F3D1FE20FF31F60817181680F711D39
:10154000882777FD8095982F0E94AC3120E030E00D
:1015500040E451E40E94113120E030E040E850E4E2
:101560000E94A9309B01AC0160E070E080E090E453
:101570000E94C33221E230ED42E053E40E94603227
:101580004CE050E00E94BB0F3FEF87EE93E03150FC
:1015900080409040E1F700C0000080917301E5EBCE
:1015A000F1E0DE01A75EBE4F9F2D01900D929A954E
:1015B000E1F7E0917101F0917201E00FF11FEE0F80
:1015C000FF1F29E131E02C0F3D1FE20FF31F608167
:1015D0007181680F711D882777FD8095982F0E9473
:1015E000AC3120E030E040E451E40E94113120E0D1
:1015F00030E040E850E40E94A9309B01AC0160E07B
:1016000070E080E090E40E94C33221E230ED42E0DD
:1016100053E40E9460320E94EB0C8FEF9CE701972D
:10162000F1F700C000000F5F1F4F0830110509F0EF
:1016300069CF94C1883009F0D3C0F801918194300A
:1016400009F0CEC09281992309F4CAC0809171013A
:10165000909172010197909372018093710120E043
:101660004BE760E083E093E00E94B41920E04BE791
:1016700061E083E093E00E94B41920E04BE762E070
:1016800083E093E00E94B41920E04BE763E083E03D
:1016900093E00E94B41920E04BE764E083E093E01C
:1016A0000E94B4190E94BE0C00E010E056E4F52E32
:1016B00080917301E5EBF1E0DE01AD52BF4F9F2D4C
:1016C00001900D929A95E1F7E0917101F09172010C
:1016D000E00FF11FEE0FFF1F23ED30E02C0F3D1F39
:1016E000E20FF31F60817181680F711D882777FDFC
:1016F0008095982F0E94AC3120E030E040E451E426
:101700000E94113120E030E040E850E40E94A9300E
:101710009B01AC0160E070E080E090E40E94C33285
:1017200021E230ED42E053E40E9460324CE050E0B0
:101730000E94BB0F3FEF87EE93E031508040904016
:10174000E1F700C0000080917301E5EBF1E0DE01FC
:10175000A357BF4F9F2D01900D929A95E1F7E0910D
:101760007101F0917201E00FF11FEE0FFF1F2DE8E4
:1017700030E02C0F3D1FE20FF31F60817181680F75
:10178000711D882777FD8095982F0E94AC3120E04D
:1017900030E040E451E40E94113120E030E040E8C4
:1017A00050E40E94A9309B01AC0160E070E080E051
:1017B00090E40E94C33221E230ED42E053E40E9403
:1017C00060320E94EB0C8FEF9CE70197F1F700C0AD
:1017D00000000F5F1F4F0830110509F069CFBEC030
:1017E000F801228190917301222309F45DC026E45F
:1017F000E5EBF1E0DE01A95BBF4F01900D922A9568
:10180000E1F7E0917101F0917201E80FF11DEE0F27
:10181000FF1F27E430E02C0F3D1FE20FF31F608114
:101820007181690F711D882777FD8095982F0E941F
:10183000AC3120E030E040E451E40E9411316B0112
:101840007C01F801818165E070E0681B71098827DF
:1018500077FD8095982F0E94AC319B01AC01C701A8
:10186000B6010E94A9309B01AC0160E070E080E00D
:1018700090E40E94C33221E230ED42E053E40E9442
:1018800060324FE050E0C454DD4F0FB6F894DEBF35
:101890000FBECDBFDF91CF911F910F91FF90EF90C1
:1018A000DF90CF900C94BB0F26E4E5EBF1E0DE0176
:1018B000119601900D922A95E1F7E0917101F09156
:1018C0007201E80FF11DEE0FFF1F21E030E02C0F39
:1018D0003D1FE20FF31F60817181690F711D882721
:1018E00077FD8095982F0E94AC3120E030E040E4F5
:1018F00051E40E9411316B017C01F801818165E0A6
:1019000070E0681B7109882777FD8095982F0E94E9
:10191000AC319B01AC01C701B6010E94A9309B010B
:10192000AC0160E070E080E090E40E94C33221E20C
:1019300030ED42E053E40E946032C454DD4F0FB6F4
:10194000F894DEBF0FBECDBFDF91CF911F910F91F5
:10195000FF90EF90DF90CF900C94EB0CC454DD4FD0
:101960000FB6F894DEBF0FBECDBFDF91CF911F91B0
:101970000F91FF90EF90DF90CF9008951092870223
:1019800010928602809171008D7F8093710080910A
:1019900090008F7780939000109248021092470237
:1019A00010928002109281021092820210928302A1
:1019B00010927F0210927E02EEE5F2E0AEE4B2E019
:1019C00011921192119211921D921D9282E0EE37A6
:1019D000F807B1F708956F927F928F929F92AF921E
:1019E000BF92CF92DF92EF92FF920F931F93CF930C
:1019F000DF936B017C010EE712E04CE5A42E42E080
:101A0000B42EC7E0D0E0A7019601F801929182912F
:101A1000729162918F010E940D31882349F02197C4
:101A2000F2E0AF1AB108CF3F8FEFD80761F734C0AB
:101A3000F8011082118212821382F5011182108244
:101A4000FE01EE0FFF1FEE0FFF1FE25AFD4FDE01FA
:101A5000AA0FBB1FA25BBD4FCE011AC001964481E5
:101A600055816681778140835183628373831482B9
:101A700015821682178212962D913C91139711961A
:101A80003C932E9313961C921E92129734961296A4
:101A90008730910519F7C3CF809186029091870214
:101AA000019797FD05C0909387028093860204C03A
:101AB0001092870210928602E0918602F0918702CE
:101AC0003097C9F4809171008D7F8093710080916F
:101AD00090008F7780939000109280021092810284
:101AE000109282021092830210927F0210927E0264
:101AF0001092470285C03197DF01AA0FBB1FAA0FC2
:101B0000BB1FA25ABD4FCD90DD90ED90FC90EE0F23
:101B1000FF1FE25BFD4FC081D18160908002709019
:101B200081028090820290908302A7019601662D27
:101B3000772D882D992D0E940D3187FF25C0262DE8
:101B4000372D482D592DC701B6010E94A83020E03D
:101B500030E04AEF54E40E9411315B018C012A2DE0
:101B60003B2D402F512F662D772D882D992D0E94CA
:101B7000A9303B014C01A7019601772D992D0E94B8
:101B80000D31181664F72EC0A7019601662D772D2A
:101B9000882D992D0E945C32181634F5A701960104
:101BA000662D772D882D992D0E94A83020E030E0F9
:101BB0004AEF54E40E9411315B018C012A2D3B2D28
:101BC000402F512F662D772D882D992D0E94A830FA
:101BD0003B014C01A7019601772D992D0E945C32A3
:101BE00087FFECCF10924D02C0928002D09281020A
:101BF000E0928202F0928302D0937F02C0937E0231
:101C0000DF91CF911F910F91FF90EF90DF90CF90D8
:101C1000BF90AF909F908F907F906F9008953E9A65
:101C2000E1E7F0E080818D7F808382E08093900007
:101C30008AE18093910008951F920F920FB60F9240
:101C40001124CF92DF92EF92FF922F933F934F9305
:101C50005F936F937F938F939F93AF93BF93CF9334
:101C6000DF93EF93FF9380914702882309F479C0B3
:101C700020E030E0A90160918002709181028091A2
:101C80008202909183020E945C3218160CF069C0A7
:101C900020E030E040E251E46091490270914A0254
:101CA00080914B0290914C020E945C321816BCF459
:101CB00080918402909185020196609186027091D4
:101CC00087020E9448349093850280938402109288
:101CD000490210924A0210924B0210924C02C0919B
:101CE0008402D0918502CC0FDD1FCC0FDD1FC25ABC
:101CF000DD4F288139814A815B8160E074E284E7AD
:101D00009BE40E9411310E94793170939700609397
:101D10009600288139814A815B8160E074E284E722
:101D20009BE40E9411310E947931759567957093FB
:101D300099006093980020E030E040E85FE3609114
:101D4000490270914A0280914B0290914C020E948C
:101D5000A9306093490270934A0280934B0290939A
:101D60004C0280914802882309F493C0C09043023A
:101D7000D0904402E0904502F090460220E030E02E
:101D8000A901C701B6010E945C321816F4F4A7013C
:101D9000960160E074E284E79BE40E9411310E94A6
:101DA00079317093970060939600A701960160E0E7
:101DB00074E284E79BE40E9411310E9479317595A9
:101DC0006795709399006093980060913D027091BF
:101DD0003E026F5F7F4F70933E0260933D0280E052
:101DE00090E00E94AA3120913F0230914002409140
:101DF0004102509142020E945C3287FD4AC08091AC
:101E00003C028F5F80933C029091F0038917A0F011
:101E10008091F503882319F010923C020DC0809147
:101E200071008D7F80937100809190008F778093F7
:101E30009000109248022DC0E091F103F091F2035E
:101E400080913C0298E0899FE00DF11D1124808172
:101E50009181A281B3818093430290934402A09325
:101E60004502B093460220E030E040E85EE3648142
:101E70007581868197810E94603260933F027093E2
:101E80004002809341029093420210923E021092CF
:101E90003D02FF91EF91DF91CF91BF91AF919F9163
:101EA0008F917F916F915F914F913F912F91FF9013
:101EB000EF90DF90CF900F900FBE0F901F9018956E
:101EC0000F931F93CF93DF9300D0CDB7DEB78C0174
:101ED00080914702882331F04A8369830E94BE0CB7
:101EE00069814A8181E0809348021093F203009354
:101EF000F1036093F0034093F503109249021092AE
:101F00004A0210924B0210924C0210923C02F801CD
:101F10004081518162817381409343025093440216
:101F2000609345027093460220E030E040E85EE3B3
:101F300064817581868197810E94603260933F023F
:101F400070934002809341029093420210923E02AD
:101F500010923D02809171008260809371008091A7
:101F600090008068809390000F900F90DF91CF9148
:101F70001F910F9108956F927F928F929F92AF92CF
:101F8000BF92CF92DF92EF92FF920F931F93CF9366
:101F9000DF936B017C01EA018091480281110E946C
:101FA000BE0C81E08093470220E030E0A901C70128
:101FB000B6010E945C3218160CF09AC06090800244
:101FC00070908102809082029090830220E030E045
:101FD000A901662D772D882D992D0E940D31811133
:101FE00028C0C0928002D0928102E0928202F092D8
:101FF0008302D0937F02C0937E02809186029091EB
:102000008702FC01EE0FFF1FEE0FFF1FE25AFD4F8C
:10201000C082D182E282F382FC01EE0FFF1FE25BFD
:10202000FD4FD183C08301969093870280938602EF
:102030005FC0A7019601662D772D882D992D0E94EE
:102040000D3187FF25C0262D372D482D592DC7016D
:10205000B6010E94A83020E030E04AEF54E40E942C
:1020600011315B018C012A2D3B2D402F512F662D04
:10207000772D882D992D0E94A9303B014C01A70195
:102080009601772D992D0E940D31181664F7A9CF6E
:10209000A7019601662D772D882D992D0E945C321F
:1020A00018160CF09ECFA7019601662D772D882D6E
:1020B000992D0E94A83020E030E04AEF54E40E94BD
:1020C00011315B018C012A2D3B2D402F512F662DA4
:1020D000772D882D992D0E94A8303B014C01A70136
:1020E0009601772D992D0E945C3287FFECCF79CF36
:1020F000809171008260809371008091900080686F
:1021000080939000DF91CF911F910F91FF90EF90FE
:10211000DF90CF90BF90AF909F908F907F906F9007
:102120000895809191020895CF93DF9300D01F927C
:10213000CDB7DEB72091FA03243021F523E02983BF
:102140009B838A832093E9008FEF06C095ED9A95D3
:10215000F1F70000882329F09091E800815095FF65
:10216000F5CF8091E80085FF0DC040E050E063E0CE
:1021700070E0CE0101960E947E148091E8008E7777
:102180008093E8000F900F900F90DF91CF9108950A
:10219000CF93DF9300D01F92CDB7DEB72091FA0323
:1021A000243029F522E029839B838A8383E080936E
:1021B000E9008FEF06C095ED9A95F1F700008823AE
:1021C00029F09091E800815095FFF5CF8091E800CB
:1021D00085FF0DC040E050E063E070E0CE01019665
:1021E0000E947E148091E8008E778093E8000F9023
:1021F0000F900F90DF91CF9108952091FA03243032
:10220000F9F422E02093E9002FEF06C035ED3A956E
:10221000F1F70000222329F03091E800215035FF2A
:10222000F5CF2091E80025FF0BC040E050E065E0CD
:1022300070E00E947E148091E8008E778093E80021
:102240000895CF93DF93EC018091FA03843041F538
:1022500081E08093E9008FEF06C095ED9A95F1F744
:102260000000882329F09091E800815095FFF5CF78
:102270008091E80085FF14C040E050E068E070E025
:10228000CE010E947E148091E8008E778093E80052
:1022900088E0FE01A9E8B2E001900D928A95E1F78D
:1022A000DF91CF910895BF92CF92DF92EF92FF928C
:1022B0000F931F93CF93DF937C01B62EE90100E0CB
:1022C00010E0C42ED12C0BC04991202F2B0D2F775D
:1022D0004F776FE0C7010E94B4190F5F1F4F0C15B5
:1022E0001D0594F3DF91CF911F910F91FF90EF9017
:1022F000DF90CF90BF90089570E06F5F7F4F6F7059
:1023000077270C94B4190F931F93CF93C42F633086
:10231000710509F04AC0842F807F803849F18039E7
:1023200009F043C0622F6F7770E080E090E00E9478
:10233000AC3120E030E040E451E40E9411319B01D7
:10234000AC0160E070E080E090E40E94C3320F775F
:1023500010E023E0159507952A95E1F72DEC3CEC6C
:1023600042E053E40E946032A8010E94BB0F1DC0EE
:10237000622F6F7770E080E090E00E94AC3120E047
:1023800030E040E451E40E9411319B01AC0160E077
:1023900070E080E090E40E94C3322DEC3CEC42E01F
:1023A00053E40E9460320E94EB0CCC3F29F4CF91A1
:1023B0001F910F910C94BE0CCF911F910F91089516
:1023C0000F931F93CF93DF93CDB7DEB727970FB649
:1023D000F894DEBF0FBECDBF8C0114C08A810E946D
:1023E0008E199A819D839B819E839C819F838111FD
:1023F0001EC089818430B1F08730A1F08630A1F011
:102400008530A1F0BE016F5F7F4F84E791E00E94AD
:10241000FB1C8111E3CF84E791E00E94EC1C0E9439
:1024200067190DC083E003C082E001C081E0AE0106
:102430004B5F5F4F682FC8010E94211AE3CF279698
:102440000FB6F894DEBF0FBECDBFDF91CF911F91C5
:102450000F910895EF92FF920F93CF93DF9300D0E7
:1024600000D000D0CDB7DEB77B014A832B830C832D
:10247000842F2E834D830E948E192E814D818111D0
:102480001BC082E0E816F10479F083E0E816F1045D
:1024900021F0EA94EF2821F50BC0073F11F487E003
:1024A00001C084E089830BC0273FD9F786E0FACFCB
:1024B000473FB9F785E0F6CF42954F704983BE019B
:1024C0006F5F7F4F84E791E00E94B11C84E791E049
:1024D0000E94CF1C84E791E00E94EC1C0E946719C7
:1024E00026960FB6F894DEBF0FBECDBFDF91CF9119
:1024F0000F91FF90EF9008958091F903811109C029
:102500000E946D160E94CA168091E200846080933A
:10251000E20008951092F9030895089508950C9427
:102520006129809192028F5F8093920262E30E9400
:102530002834911135C01092920280919302882321
:1025400079F18091FA03843049F58091E9008F7028
:102550009091EC0090FF02C090E801C090E0982BB1
:1025600084E08093E9008091EB0080FF14C08091AB
:10257000EE0087FD03C00FC01092F1008091E800CB
:1025800085FDFACF8091E80080FF05C08091E800CA
:102590008E778093E8009F709093E90010929302E9
:1025A000089542E061EC81E00E94E31542E061ECB5
:1025B00082E00E94E31542E061EC83E00E94E315B3
:1025C00042E261EC84E00E94E31542E361E885E0C9
:1025D0000E94E31542E360E886E00C94E3158091E5
:1025E000FC03833009F454C030F4813071F0823040
:1025F00009F0A5C08CC08A3009F479C08B3009F489
:102600005FC0893009F09BC020C08091FB03813AF4
:1026100009F095C08091E800877F8093E800809161
:10262000FF0390910004892B21F060E080E090E0AE
:1026300003C068E089E892E070E00E941C15809178
:10264000E8008B778093E80008958091FB03813246
:1026500009F075C08091FF0390910004892B09F067
:102660006EC08091E800877F8093E80005C080916C
:10267000FA03882309F463C08091E80082FFF7CF52
:102680008091F100809391028091E8008B7753C094
:102690008091FB03813A09F052C08091FF03909131
:1026A0000004892B09F04BC08091E800877F80935C
:1026B000E8008091E80080FFFCCF80918A0136C05D
:1026C0008091FB038132D9F58091FF039091000442
:1026D000892BA9F58091E800877F8093E8000E940C
:1026E0001A168091FD0380938A010C9456238091E1
:1026F000FB03813221F58091E800877F8093E80019
:102700000E941A168091FE0380938802089580919A
:10271000FB03813AA1F48091E800877F8093E80071
:102720008091E80080FFFCCF809188028093F100C7
:102730008091E8008E778093E8000C941A16089533
:1027400083E093E00E94F0196AE272E183E093E093
:102750000E94461A60EE71E183E093E00E944A1AFB
:1027600084B7877F84BF88E10FB6F89480936000B8
:10277000109260000FBE90E080E80FB6F89480934E
:102780006100909361000FBE0E94741D0E946D163F
:102790000E94CA168091E20084608093E2007894DF
:1027A00063E871E183E093E00E94EC196CE771E16A
:1027B00083E093E00E94E41963E571E183E093E034
:1027C0000E94E8190E940F0E0E9467190E94761D50
:1027D00080E891E00E94201D0BC00E941E2980917C
:1027E000F803882329F00E94492981110E94681466
:1027F0008091FA03853089F383E093E00E94F91B0E
:102800000E94801DF5CF292F332723303105B1F0E9
:102810004CF42130310509F44DC02230310509F066
:102820004EC007C02132310541F12232310591F10C
:1028300046C0E0EDF0E084EE93E045C0992781309A
:10284000910569F08230910589F0892B09F037C034
:10285000E0EEF3E0E491F0E080EE93E034C0E2EBF0
:10286000F3E0E491F0E082EB93E02DC0E6E8F3E0E2
:10287000E491F0E086E893E026C0643000F5E62FAE
:10288000F0E0EE0FFF1FE550FE4F80819181E9E0FF
:10289000F0E019C0643098F4E62FF0E0DF01AA0FF1
:1028A000BB1FAD5FBD4F8D919C91E55FFD4FE081FA
:1028B000F0E009C0E2E1F0E084EB94E004C0E0E085
:1028C000F0E080E090E0DA018D939C93CF010895D1
:1028D00080E189BD82E189BD09B400FEFDCF809110
:1028E000D8008F7D8093D8008091E0008260809333
:1028F000E0008091E00081FDFCCF0895BF92CF926F
:10290000DF92EF92FF920F931F93CF93DF937C019F
:102910008B01EA010E943B16B82E811133C020972B
:1029200031F028813981021B130BE20EF31EC12CFA
:10293000D12C23C08091E80085FD15C08091E8006E
:102940008E778093E800209749F0888199818C0DDB
:102950009D1D9983888325E0B22E14C00E943B16EA
:10296000882359F00EC0F70181917F018093F10017
:1029700001501109FFEFCF1ADF0A01151105D1F639
:1029800001C0B82E8B2DDF91CF911F910F91FF9039
:10299000EF90DF90CF90BF900895BF92CF92DF92DB
:1029A000EF92FF920F931F93CF93DF937C018B01E4
:1029B000EA010E943B16B82E811133C0209731F0F6
:1029C00028813981021B130BE20EF31EC12CD12C7E
:1029D00023C08091E80085FD15C08091E8008B77C9
:1029E0008093E800209749F0888199818C0D9D1D86
:1029F0009983888345E0B42E14C00E943B16882337
:102A000059F00EC08091F100F70181937F010150D0
:102A10001109FFEFCF1ADF0A01151105D1F601C028
:102A2000B82E8B2DDF91CF911F910F91FF90EF90DA
:102A3000DF90CF90BF90089540910104509102041F
:102A40004617570748F06115710539F44091E800C1
:102A50004E774093E80001C0BA01FC0140E033C06A
:102A60008091FA03882309F444C0853009F443C0F7
:102A70008091E80083FD41C08091E80082FD33C071
:102A80008091E80080FF1FC09091F3008091F200D8
:102A9000392F20E0A901482BCA0106C0419140937B
:102AA000F1006150710901966115710519F08830C6
:102AB0009105A0F341E0089709F040E08091E8001B
:102AC0008E778093E8006115710551F64111C8CFEA
:102AD0000AC08091FA03882361F0853061F080910B
:102AE000E80083FD0AC08091E80082FFF2CF80E019
:102AF000089582E0089583E0089581E0089540916B
:102B00000104509102044617570748F061157105FA
:102B100039F44091E8004E774093E80001C0BA01D3
:102B2000FC0140E034C08091FA03882309F445C0D9
:102B3000853009F444C08091E80083FD42C0809153
:102B4000E80082FD34C08091E80080FF20C09091B1
:102B5000F3008091F200392F20E0A901482BCA012F
:102B600007C044914093F10031966150710901967C
:102B70006115710519F08830910598F341E00897C7
:102B800009F040E08091E8008E778093E8006115BD
:102B9000710549F64111C7CF0AC08091FA03882315
:102BA00061F0853061F08091E80083FD0AC080917A
:102BB000E80082FFF2CF80E0089582E0089583E08C
:102BC000089581E00895982F2CC09093E9009817FC
:102BD00039F07091EC002091ED005091F00003C0AD
:102BE000242F762F50E021FD02C09F5F1AC0309144
:102BF000EB003E7F3093EB003091ED003D7F309352
:102C0000ED003091EB0031603093EB007093EC00FD
:102C10002093ED005093F0002091EE0027FDE5CFCA
:102C200007C0973090F28F708093E90081E008959B
:102C300080E008958091FB0387FD05C08091E80046
:102C400080FF0EC012C08091E80082FD05C0809117
:102C5000FA038111F8CF08958091E8008B7708C0BE
:102C60008091FA038111EACF08958091E8008E7770
:102C70008093E80008958091E4009091E50045E696
:102C80002091EC0020FD1FC023C02091FA032223D5
:102C900091F0253091F02091EB0025FD10C020919E
:102CA000E4003091E5002817390751F34150C9017C
:102CB00039F784E0089582E0089583E0089581E083
:102CC000089580E008952091E80020FFDECFF9CF3D
:102CD0002091E80022FFD9CFF4CF0E94DB160E949A
:102CE000E316E0EEF0E0808181608083E8EDF0E0C3
:102CF00080818F77808319BCA7EDB0E08C918E7FA7
:102D00008C9380818F7E80831092F90308950F93B6
:102D10001F93CF93DF930E94DB160E94E316C8ED4A
:102D2000D0E088818F7788838881806888838881D4
:102D30008F7D888319BC1092FA031092F6031092CB
:102D4000F8031092F70300EE10E0F80180818B7F0A
:102D5000808388818160888342E060E080E00E9417
:102D6000E315E1EEF0E080818E7F8083E2EEF0E01B
:102D7000808181608083808188608083F801808188
:102D80008E7F8083888180618883DF91CF911F91BE
:102D90000F910895E8EDF0E080818F7E8083E7ED6C
:102DA000F0E080818160808384E082BF81E0809355
:102DB000F9030C948716E8EDF0E080818E7F808324
:102DC0001092E20008951092DA001092E100089546
:102DD0001F920F920FB60F9211242F933F934F9390
:102DE0005F936F937F938F939F93AF93BF93EF9373
:102DF000FF938091E10082FF0BC08091E20082FF8F
:102E000007C08091E1008B7F8093E1000E949112C6
:102E10008091DA0080FF1FC08091D80080FF1BC026
:102E20008091DA008E7F8093DA008091D90080FF54
:102E30000DC080E189BD82E189BD09B400FEFDCFEE
:102E400081E08093FA030E947C1205C019BC1092A5
:102E5000FA030E948A128091E10080FF19C08091DC
:102E6000E20080FF15C08091E2008E7F8093E20037
:102E70008091E20080618093E2008091D8008062BE
:102E80008093D80019BC85E08093FA030E948E12CB
:102E90008091E10084FF30C08091E20084FF2CC06B
:102EA00080E189BD82E189BD09B400FEFDCF80913A
:102EB000D8008F7D8093D8008091E1008F7E809331
:102EC000E1008091E2008F7E8093E2008091E20039
:102ED00081608093E2008091F603882311F084E002
:102EE00007C08091E30087FF02C083E001C081E05A
:102EF0008093FA030E948F128091E10083FF29C022
:102F00008091E20083FF25C08091E100877F80935C
:102F1000E10082E08093FA031092F6038091E100D1
:102F20008E7F8093E1008091E2008E7F8093E200AB
:102F30008091E20080618093E20042E060E080E006
:102F40000E94E3158091F00088608093F0000E9459
:102F50008D12FF91EF91BF91AF919F918F917F91D2
:102F60006F915F914F913F912F910F900FBE0F90F6
:102F70001F9018951F920F920FB60F9211242F9346
:102F80003F934F935F936F937F938F939F93AF93F1
:102F9000BF93CF93EF93FF938091E9008F7090914F
:102FA000EC0090FF02C090E801C090E0C92FC82B50
:102FB0001092E9008091F000877F8093F000789470
:102FC0000E94FE171092E9008091F00088608093C3
:102FD000F000CF70C093E900FF91EF91CF91BF91C6
:102FE000AF919F918F917F916F915F914F913F91A1
:102FF0002F910F900FBE0F901F9018951F93CF9396
:10300000DF93CDB7DEB7AC970FB6F894DEBF0FBE37
:10301000CDBFEBEFF3E08091F100819324E0E3304A
:10302000F207C9F70E94EF128091E80083FF37C1D1
:103030008091FB039091FC03953009F488C038F42B
:103040009130B1F170F0933009F029C131C098305E
:1030500009F4F8C0993009F404C1963009F01FC191
:103060009DC0803821F0823809F019C108C08091D4
:10307000F7039091F803992389F082600FC0809143
:10308000FF03909100048F7099278093E90080914D
:10309000EB0085FB882780F91092E9009091E80009
:1030A000977F9093E8008093F1001092F100D5C0D3
:1030B000882319F0823009F0F2C08F7121F082303C
:1030C00009F0EDC00BC08091FD03813009F0E7C02D
:1030D000933009F080E08093F8032FC08091FD03C6
:1030E00081112BC08091FF03909100048F7099276C
:1030F000009709F4D4C08093E9002091EB0020FFF1
:103100001CC02091FC03233021F48091EB008062ED
:1031100012C09091EB0090619093EB0021E030E0C1
:1031200001C0220F8A95EAF72093EA001092EA0084
:103130008091EB0088608093EB001092E900809111
:10314000E800877F8093E8000E941A16A8C08111CA
:10315000A6C08091FD039091FE038F779927182FC9
:103160009091E3009078982B9093E3008091E80091
:10317000877F8093E8000E941A168091E80080FF04
:10318000FCCF8091E30080688093E300112311F06D
:1031900083E001C082E08093FA0381C080588230CE
:1031A00008F07DC08091FD039091FE038C3D23E0EB
:1031B000920779F583E08A838AE289834FB7F8948E
:1031C000DE01139620E03EE051E2E32FF0E0509361
:1031D0005700E49120FF03C0E295EF703F5FEF706E
:1031E0008E2F90E0EA3010F0C79601C0C0968D9304
:1031F0009D932F5F243149F74FBF8091E800877F6F
:103200008093E8006AE270E0CE0101960E941C15EE
:1032100013C0AE01455D5F4F6091FF030E94031430
:103220000097E9F12091E800277F2093E800BC0196
:103230008BA59CA50E947F158091E8008B778093D9
:10324000E8002DC0803859F58091E800877F809391
:10325000E8008091F6038093F1008091E8008E777A
:1032600071CF81111CC09091FD039230C0F4809108
:10327000E800877F8093E8009093F6030E941A1677
:103280008091F603811104C08091E30087FF02C0A2
:1032900084E001C081E08093FA030E94D112809102
:1032A000E80083FF0AC08091E800877F8093E800F0
:1032B0008091EB0080628093EB00AC960FB6F8949F
:1032C000DEBF0FBECDBFDF91CF911F910895CF9389
:1032D0008091FA038823B1F08091E9008F7090917A
:1032E000EC0090FF02C090E801C090E0C92FC82B0D
:1032F0001092E9008091E80083FD0E94FE17CF70D4
:10330000C093E900CF910895881F8827881F0895EA
:1033100091E0883F08F490E0892F0895982F907FDE
:10332000903B99F038F4903981F0903A71F09038F0
:10333000C9F40BC0903DA1F018F4903C99F410C072
:10334000903E19F0903F71F402C083E00895E82F99
:10335000E15FEF3038F4F0E0E15FFD4F80810895E8
:1033600082E0089580E008950F932F774F776F7074
:10337000606BDC01ED91FC91022F242F462F63E05E
:1033800070E009950F9108950F932F774F776F7025
:103390006069DC01ED91FC91022F242F462F63E040
:1033A00070E009950F9108950F932F774F776F7005
:1033B0006068DC01ED91FC91022F242F462F63E021
:1033C00070E009950F910895FC017383628308955D
:1033D000FC01738F628F0895FC01758F648F0895CF
:1033E000CF93DF93EC011DA21FA21EA2BC01685D5A
:1033F0007F4F40EC88519F4F0E942D1C1B821A82E8
:103400001D821C821F821E82198618861B861A86C0
:103410001D861C861F861E86198A188A1B8A1A8A90
:103420001D8A1C8A1F8A1E8A198E188E1B8E1A8E60
:103430001D8E1C8E1F8E1E8E19A218A2DF91CF9199
:103440000895CF92DF92FF920F931F93CF93DF9354
:103450001F92CDB7DEB7F62E6A018C0108511F4FBF
:1034600008C0F60161916F01C80149830E94341CB4
:1034700049818C2D841B8F15A0F30F90DF91CF9184
:103480001F910F91FF90DF90CF900895FC01718301
:1034900060830895FC0171A360A30895AF92BF9269
:1034A000CF92DF92EF92FF920F931F93CF93DF9310
:1034B00000D01F92CDB7DEB77C016B01142FB22E66
:1034C000A02EDC0195968C9195978430F1F45A9654
:1034D000ED91FC915B97309709F4D8C0CB0101972F
:1034E00063E070E00E943434DB01AA0FBB1FA60F1B
:1034F000B71F49832A830B834C2D4A1B9E012F5FE4
:103500003F4FBD01C7010995B1C06230710509F493
:1035100053C06330710529F06130710509F09CC01A
:1035200083C0842F807F803A01F130F48038B9F075
:10353000803909F0ABC00DC0803EE9F0803F09F151
:10354000803B09F0A3C0D7011296ED91FC9113972F
:1035500023C0D7011496ED91FC9115971DC0D7019A
:103560001696ED91FC91179717C0D7011896ED911B
:10357000FC91199711C0D7011A96ED91FC911B97F8
:103580000BC0423F09F082C0D7011C96ED91FC911F
:103590001D97309731F47AC0309709F477C0123F05
:1035A00021F42A2D4B2D62EF04C0612F6F702A2D5C
:1035B0004B2DC70109955AC0842F807F803D59F05B
:1035C000803F79F0803C09F061C0D7011E96ED91F3
:1035D000FC911F9719C0D7015096ED91FC9151971E
:1035E00013C0433F31F4D7015296ED91FC915397AC
:1035F00008C0413F09F04AC0D7015496ED91FC91B3
:103600005597309741F442C0309709F43FC0133FBB
:1036100011F0113F19F44B2D612F03C0612F6F7012
:103620004B2DC701099522C0842F0E948819882339
:1036300031F0D7015696ED91FC91579707C0163F90
:1036400029F5D7015896ED91FC9159973097F1F0F3
:10365000612FC70109950AC064307105A8F416C02E
:103660000A2D2B2D412FB601C7010995D7015E9672
:10367000ED91FC915F97309789F00A2D2B2D412F0A
:10368000B601C70109950AC0C12CD12CD7015C969F
:10369000ED91FC915D97309719F7E8CF0F900F905F
:1036A0000F90DF91CF911F910F91FF90EF90DF90DE
:1036B000CF90BF90AF900895EF92FF920F931F931A
:1036C000CF93DF93EC01162F862F0E948819882351
:1036D00069F0FDA081E08DA300E020E0412F61E0D2
:1036E00070E0CE010E944E1AFDA27CC0812F0E9484
:1036F00084194DA1882309F440C0443029F01AA34D
:1037000021E030E03FA32EA3812F0E948E1981304B
:1037100031F070F0823051F0833059F507C08DA33D
:1037200000E020E0412F61E070E01EC08DA35AC090
:10373000103F19F0173FE9F404C084E08DA31AA3E9
:103740003FC02EA13FA1C90163E070E00E94343464
:103750008C0F9D1FFC0112A3B9016F5F7F4F7FA3E8
:103760006EA30CA12BA14AA1CE010E944E1A1DA24C
:1037700039C01DA21FA21EA235C0442399F12EA15B
:103780003FA1C90163E070E00E9434347C01FE0176
:10379000E80FF91F12A3B9016F5F7F4F7FA36EA3DC
:1037A0008130910591F082E0E816F104D9F40CA182
:1037B0002BA14AA1CE010E944E1A8DA1843091F016
:1037C00081E090E09FA38EA30DC0423059F400E049
:1037D0002BA14AA1CE010E944E1A8DA1843011F076
:1037E000FFA2EEA2DF91CF911F910F91FF90EF907A
:1037F0000895CF92DF92EF92FF920F931F93CF9392
:10380000DF93EC01E8A1F9A1309709F009958E0149
:1038100008511F4FC8010E94661CE12CF12CC82ED4
:10382000D12C0FC060E0C8010E947A1C682FCE0125
:103830000E945C1B61E0C8010E948B1C8FEFE81A9C
:10384000F80AEC14FD0470F3DF91CF911F910F91F2
:10385000FF90EF90DF90CF900895FC014283748336
:1038600063831182108208950F931F93CF93DF9388
:10387000EC01062F0E94AC1C182F298130E0C901F1
:1038800001966A8170E00E944834488150E08417B4
:10389000950729F4812F0E94AF1C80E012C0EB81B4
:1038A000FC81E20FF31F00832981822F90E00196B3
:1038B0006A8170E00E9448348983812F0E94AF1C86
:1038C00081E0DF91CF911F910F910895CF93DF9306
:1038D000EC010E94AC1C29819881291710F0C22F9D
:1038E00002C0CA81C20FC91B0E94AF1C8C2FDF917E
:1038F000CF910895FC012081862F90E0820F911DC9
:10390000628170E00E9448340380F481E02DE80F6A
:10391000F91F808108950F931F93CF93DF931F9218
:10392000CDB7DEB78C0169830E94AC1C482FF8012B
:1039300080816981262F30E0280F311D6281C90105
:1039400070E00E9448348083842F0F90DF91CF91E4
:103950001F910F910C94AF1C8FB7F89408958FBFEF
:103960000895FC01CB012091FA032430B1F42181A8
:103970002F702093E90040E050E064E070E00E9486
:103980007E1481110BC09091E80095FD07C09091C5
:10399000E8009E779093E800089582E008952091D2
:1039A000FA032430A9F4FC0181818F708093E9002F
:1039B0003091F3002091F200932F80E0822B892B2D
:1039C00049F08091E8008E778093E8000C943B16D4
:1039D00082E0089580E008952091FA03243051F4A4
:1039E000FC0121812F702093E9002091E80020FD47
:1039F0000C94CF1C0895FC01CB012091FA032430D4
:103A000011F080E0089526812F702093E900209125
:103A1000E80022FFF6CF2091E80025FFF2CF40E03A
:103A200050E064E070E00E94CD148091E80085FDD4
:103A300005C08091E8008B778093E80081E00895CD
:103A400090939502809394020895E0919402F091EE
:103A50009502309721F00190F081E02D099480E0EB
:103A60000895E0919402F0919502309721F0028040
:103A7000F381E02D09940895E0919402F09195026C
:103A8000309721F00480F581E02D0994089520916C
:103A90009602309197028217930771F090939702E4
:103AA00080939602E0919402F0919502309721F074
:103AB0000680F781E02D09940895209198023091B5
:103AC00099028217930771F090939902809398025C
:103AD000E0919402F0919502309721F00084F185F5
:103AE000E02D0994089508950C94731D0E94952962
:103AF0000E94AD060E94692A0C9411300C94E705CF
:103B00005F926F927F928F929F92AF92BF92CF926D
:103B1000DF92EF92FF920F931F93CF93DF93CDB776
:103B2000DEB72A970FB6F894DEBF0FBECDBF0E9456
:103B3000BD079AE9C92E92E0D92E00E010E0AA2430
:103B4000A394B12C502E802F0E9411093C01F60144
:103B5000E190F1906F01E826F926E114F10431F4C7
:103B60000F5F1F4F0530110569F73AC08091F002D1
:103B700081FD0E941A0920E030E04501022E02C0BA
:103B8000880C991C0A94E2F7C4018E219F21892B8D
:103B900009F12E835F826820792081E0672809F48B
:103BA00080E088870E949E298160782F9A87898784
:103BB0004E815F8168858A850E94391EF801EE0F6B
:103BC000FF1FE656FD4F80819181882599259183BD
:103BD000808316C02F5F3F4F2C30310571F6C0CF68
:103BE0008FEF89838A831B820E949E298160782FB0
:103BF0009D838C8349815A816B818D810E94391EFE
:103C00000E94562D1091A4020E94251D1817D9F06C
:103C10000E94251D8093A4022A960FB6F894DEBF59
:103C20000FBECDBFDF91CF911F910F91FF90EF900D
:103C3000DF90CF90BF90AF909F908F907F906F90CC
:103C40005F900C947E1D2A960FB6F894DEBF0FBECF
:103C5000CDBFDF91CF911F910F91FF90EF90DF903B
:103C6000CF90BF90AF909F908F907F906F905F901C
:103C70000895CF93DF93CDB7DEB72B970FB6F894A7
:103C8000DEBF0FBECDBF4F83588769877A878B878A
:103C9000DE01119686E0FD0111928A95E9F785E033
:103CA000FE01379601900D928A95E1F749815A817C
:103CB0006B817C818D819E810E9415262B960FB68B
:103CC000F894DEBF0FBECDBFDF91CF910895CF93A3
:103CD000C82F882309F4C1C0823859F40E94251DD9
:103CE00081FDBBC089E30E947C280E94F82889E3FB
:103CF0000CC0833879F40E94251D80FDAEC083E599
:103D00000E947C280E94F82883E50E949E28CF917B
:103D10000C94F828843859F40E94251D82FD9DC01A
:103D200087E40E947C280E94F82887E4EECF845024
:103D3000813A48F48C2F0E94732F81118EC08C2FF2
:103D40000E947C28E4CF8C2F805E883050F4C770AE
:103D500081E090E001C0880FCA95EAF70E94BF2871
:103D6000D6CF8C2F855A833078F4C53A29F0C63ADD
:103D700031F482E890E005C081E890E002C083E879
:103D800090E0CF910C94471D8C2F885A833108F016
:103D900064C0C83A39F1C93A41F1CA3A49F1CB3A5B
:103DA00051F1CC3A59F1CD3A61F1C03B69F1CE3ACB
:103DB00071F1CF3A79F1C13B81F1C23B89F1C33B4B
:103DC00091F1C43B99F1C53BA1F1C63BA9F1C73BB9
:103DD000B1F1C83BB9F1C93BC1F1CA3BC9F58AE2AF
:103DE00092E038C082EE90E035C089EE90E032C0BB
:103DF0008AEE90E02FC085EB90E02CC086EB90E03F
:103E000029C087EB90E026C08CEC90E023C08DECBD
:103E100090E020C083E891E01DC08AE891E01AC0DC
:103E200082E991E017C084E991E014C081E292E058
:103E300011C083E292E00EC084E292E00BC085E202
:103E400092E008C086E292E005C087E292E002C0FC
:103E500080E090E0CF910C945D1DCF910895882370
:103E600009F44DC0823859F40E94251D81FF47C0D6
:103E700089E30E947C280E94F82889E30CC08338DB
:103E800071F40E94251D80FF3AC083E50E947C28C2
:103E90000E94F82883E50E949E280C94F828843814
:103EA00059F40E94251D82FF2AC087E40E947C28C5
:103EB0000E94F82887E4EFCF982F9450913A08F4A5
:103EC000EACF982F905E983058F4282F277081E021
:103ED00090E001C0880F2A95EAF70E94C528DDCF3F
:103EE000982F955A933020F480E090E00C94471D71
:103EF000885A833120F480E090E00C945D1D089591
:103F0000882321F00E94BF280C94F8280895882364
:103F100021F00E94C5280C94F8280895BF92CF92F2
:103F2000DF92EF92FF920F931F93CF93DF93CDB762
:103F3000DEB727970FB6F894DEBF0FBECDBF8C015A
:103F400085E0F801DE01119601900D928A95E1F766
:103F5000F80130812181F280558152955F70838113
:103F60009481892B39F02F3F41F481E090E03F3F6D
:103F700031F003C081E090E002C080E090E080FD7D
:103F800073C339832A8389819A815E830E94392889
:103F9000B92E8F830E9438280E9460272B2D2295EE
:103FA0002F7030E05E816F812530310509F4E6C065
:103FB0006CF4243031050CF0A2C04B2D407F8B2DCA
:103FC0008F70223031050CF045C017C02C30310500
:103FD0004CF42A3031050CF0E7C12830310509F0E6
:103FE00043C3E5C02D30310509F4BAC20CF4A2C2B6
:103FF0002F30310509F038C323C3182F411101C0F8
:1040000002C01295107FFF2059F0112309F46BC2F2
:10401000812F6F830E94CF280E94F8286F8163C28E
:10402000862F0E942F1F112309F41EC3812F0E9487
:10403000D52827960FB6F894DEBF0FBECDBFDF910F
:10404000CF911F910F91FF90EF90DF90CF90BF9095
:104050000C94F828403211F08295807F662319F085
:10406000613071F523C0FF20B1F0511101C032C0A1
:10407000513081F527960FB6F894DEBF0FBECDBF45
:10408000DF91CF911F910F91FF90EF90DF90CF9034
:10409000BF900C94DF28511101C003C0513009F4C6
:1040A000E3C28E830E94E2288E819AC1FF2021F014
:1040B000563008F0D9C20EC0553008F0D5C290C1B4
:1040C000FF20C9F0552331F0F801958190FF0BC214
:1040D0009F70958327960FB6F894DEBF0FBECDBFB5
:1040E000DF91CF911F910F91FF90EF90DF90CF90D4
:1040F000BF900C94801F552309F472C109C22B2D67
:1041000026952695237030E02115310529F02130C0
:10411000310509F0A9C219C0FF2021F0862F9B2D7F
:10412000937002C080E090E027960FB6F894DEBF4F
:104130000FBECDBFDF91CF911F910F91FF90EF90F8
:10414000DF90CF90BF900C94471DFF2021F0862F69
:104150009B2D937002C080E090E027960FB6F894F4
:10416000DEBF0FBECDBFDF91CF911F910F91FF90AA
:10417000EF90DF90CF90BF900C945D1D862FFF20B5
:1041800019F00E945C2C02C00E94C42C27960FB626
:10419000F894DEBF0FBECDBFDF91CF911F910F917D
:1041A000FF90EF90DF90CF90BF900C944B2D8B2D14
:1041B000837009F079C0F11057C2262F22952695F9
:1041C0002770220F220F862F8F70C82ED12CE12C42
:1041D000F12C022E04C0CC0CDD1CEE1CFF1C0A943A
:1041E000D2F764FF10C06FE070E080E090E004C0A0
:1041F000660F771F881F991F2A95D2F760957095D3
:104200008095909503C060E070E0CB012B2D269542
:1042100026952370422F50E042305105D9F04330AB
:10422000510569F16C297D298E299F29413051055D
:1042300051F127960FB6F894DEBF0FBECDBFDF91C8
:10424000CF911F910F91FF90EF90DF90CF90BF9093
:104250000C9475276C297D298E299F2927960FB6E6
:10426000F894DEBF0FBECDBFDF91CF911F910F91AC
:10427000FF90EF90DF90CF90BF900C9487270E9423
:104280007527C701B60127960FB6F894DEBF0FBE9B
:10429000CDBFDF91CF911F910F91FF90EF90DF90F5
:1042A000CF90BF900C946327FF2019F08B2D817065
:1042B00001C08695882309F4D7C1262F229526951B
:1042C0002770220F220F862F8F70C82ED12CE12C41
:1042D000F12C022E04C0CC0CDD1CEE1CFF1C0A9439
:1042E000D2F764FF10C06FE070E080E090E004C09F
:1042F000660F771F881F991F2A95D2F760957095D2
:104300008095909503C060E070E0CB012B2D269541
:1043100026952370422F50E042305105D9F04330AA
:10432000510569F16C297D298E299F29413051055C
:1043300051F127960FB6F894DEBF0FBECDBFDF91C7
:10434000CF911F910F91FF90EF90DF90CF90BF9092
:104350000C9414286C297D298E299F2927960FB645
:10436000F894DEBF0FBECDBFDF91CF911F910F91AB
:10437000FF90EF90DF90CF90BF900C9426280E9482
:104380001428C701B60127960FB6F894DEBF0FBEFA
:10439000CDBFDF91CF911F910F91FF90EF90DF90F4
:1043A000CF90BF900C940228603F59F120F4603EFA
:1043B00008F494C008C0623F09F467C0F0F1633F9D
:1043C00009F08CC065C0162F1F708B2D8F71FF20D8
:1043D00021F00E94AD27812F7DCE0E94C827812F1A
:1043E00027960FB6F894DEBF0FBECDBFDF91CF91F9
:1043F0001F910F91FF90EF90DF90CF90BF900C94A2
:10440000871FFF20B1F0553008F02EC18B2D8F7122
:1044100027960FB6F894DEBF0FBECDBFDF91CF91C8
:104420001F910F91FF90EF90DF90CF90BF900C9471
:10443000E727563008F018C1E9CFFF2099F08B2DFF
:104440008F7127960FB6F894DEBF0FBECDBFDF91F8
:10445000CF911F910F91FF90EF90DF90CF90BF9081
:104460000C94AD278B2D8F7127960FB6F894DEBF75
:104470000FBECDBFDF91CF911F910F91FF90EF90B5
:10448000DF90CF90BF900C94C827F110EBCFD7CF1F
:10449000FF2099F08B2D8F7127960FB6F894DEBF11
:1044A0000FBECDBFDF91CF911F910F91FF90EF9085
:1044B000DF90CF90BF900C949E2727960FB6F8946C
:1044C000DEBF0FBECDBFDF91CF911F910F91FF9047
:1044D000EF90DF90CF90BF900C949927FF20A9F028
:1044E000552309F4ACCF862F27960FB6F894DEBF7C
:1044F0000FBECDBFDF91CF911F910F91FF90EF9035
:10450000DF90CF90BF900C94671E552309F4AACF7B
:10451000862F27960FB6F894DEBF0FBECDBFDF9172
:10452000CF911F910F91FF90EF90DF90CF90BF90B0
:104530000C942F1F4B2D4F70C8010E941A03279611
:104540000FB6F894DEBF0FBECDBFDF91CF911F91A4
:104550000F91FF90EF90DF90CF90BF900C94CB26FF
:10456000F11082C09B2D9F70492F50E042305105C1
:1045700099F144F44115510569F04130510509F0B4
:1045800073C019C043305105C1F14430510509F0E1
:104590006BC044C027960FB6F894DEBF0FBECDBFE8
:1045A000DF91CF911F910F91FF90EF90DF90CF900F
:1045B000BF900C94223027960FB6F894DEBF0FBE42
:1045C000CDBFDF91CF911F910F91FF90EF90DF90C2
:1045D000CF90BF900C94393027960FB6F894DEBF79
:1045E0000FBECDBFDF91CF911F910F91FF90EF9044
:1045F000DF90CF90BF900C94553027960FB6F8946B
:10460000DEBF0FBECDBFDF91CF911F910F91FF9005
:10461000EF90DF90CF90BF900C946830862F279654
:104620000FB6F894DEBF0FBECDBFDF91CF911F91C3
:104630000F91FF90EF90DF90CF90BF900C948C3053
:104640004B2D4F70C80127960FB6F894DEBF0FBEF2
:10465000CDBFDF91CF911F910F91FF90EF90DF9031
:10466000CF90BF900C941B0927960FB6F894DEBF2D
:104670000FBECDBFDF91CF911F910F91FF90EF90B3
:10468000DF90CF90BF9008950E94DC280E94B1284F
:104690000E94F8280E94F72D0E944B2D80E090E0A8
:1046A0000E94471D80E090E00C945D1D0E94CC2884
:1046B0000C9444230E943928292F22952F7030E032
:1046C0002C3031054CF42A3031056CF4225031097C
:1046D0002230310590F407C02C30310551F02F30D5
:1046E000310559F406C0803E10F0803F31F481E07E
:1046F000089593FB882780F9089580E00895CF936B
:10470000DF9300D000D01F92CDB7DEB70F900F908F
:104710000F900F900F90DF91CF910895CF93DF937B
:1047200000D000D000D0CDB7DEB726960FB6F894F3
:10473000DEBF0FBECDBFDF91CF9108951F93CF9302
:10474000DF93C091DB0216E012C0D0E01C9FF001A5
:104750001D9FF00D1124E555FD4F4081518162816F
:104760007381848195810E948E232196C7708091E8
:10477000DC02C813EACFDF91CF911F9108954091D9
:10478000A5025091A6026091A7027091A8028091A3
:10479000A9029091AA020C948E230F931F93CF939A
:1047A000DF938091AA0282958F7009F069C0809191
:1047B000A702882309F464C0A091DB02D091DC0237
:1047C000B091A502C091A6028091A8029091A90281
:1047D00021E030E0BF3F11F020E030E0122FBC01BB
:1047E0006095709506E04AC0009721F0CF3F29F40C
:1047F000212F05C021E030E002C020E030E020FDA4
:104800003BC04A2F50E0049FF001059FF00D11249A
:10481000E555FD4F2181C2132FC02081B2132CC05A
:104820002281211129C0238134812817390718F0EA
:10483000281B390B02C0260F371F283C3105E0F436
:104840008091AA028F7080618093AA0286E0849F83
:10485000F001859FF00D1124E055FD4F80818F7090
:104860008061808385EA92E00E948E1FDF91CF9164
:104870001F910F910C949E23AF5FA770AD13B4CF1F
:10488000DF91CF911F910F910895EF92FF920F93B7
:104890001F93CF93DF93CDB7DEB762970FB6F8942F
:1048A000DEBF0FBECDBF8C0185E0F801DE011D9695
:1048B00001900D928A95E1F7D8014C9111965C9187
:1048C000119712966C9112971396ED90FC90149795
:1048D0007091A502E091A6028091A8029091A90290
:1048E000009739F0EF3F41F421E030E07F3F31F0B5
:1048F00003C021E030E002C020E030E020FD5CC1D8
:104900002091A702222309F4F1C0E816F90628F045
:104910009701281B390BC90104C0809590958E0D15
:104920009F1D883C910508F098C08091AA02982F9D
:10493000907F09F064C0E51314C0741312C06111B4
:1049400010C08F7080618093AA020E94BF2385EA05
:1049500092E00E948E1F8091AA02D80115968C9336
:1049600043C1EF2839F05F3F41F481E090E04F3FD1
:1049700031F003C081E090E002C080E090E080FD73
:1049800003C081E0862702C080E090E080FF2EC057
:104990008091DB022091DC0236E013C090E0389F6A
:1049A000F001399FF00D1124E555FD4F718157132A
:1049B00006C07081471303C07281671317C0019648
:1049C00087708213EBCF12C19F7059F0882309F4CE
:1049D0000BC107C09F7029F0F8019581907F09F401
:1049E00003C1805E883008F4FFC0D2C0662309F49A
:1049F000FBC08091AA0281608093AA02F5C0E513F2
:104A000008C0741306C0611104C0D80115968C93B8
:104A10009DC04D875E878D859E856A8B0E945A2337
:104A20006A89882309F4B4C0662309F4B1C02091CF
:104A3000AA02822F82958F7090E002970CF4C6C074
:104A40008091A5029091A60298878F831986FB8694
:104A5000EA862C87CE01079646C08091AA02982F3D
:104A6000907F59F47E2DF98AE88A89890E947F23F4
:104A700085EA92E00E948E1F95C0E51311C0741361
:104A80000FC061110DC0F8018583C8010E948E1FFF
:104A9000E5EAF2E086E0DF011D928A95E9F7A2C01F
:104AA0004D875E878D859E856A8B0E945A236A8911
:104AB000882309F46DC0662309F46AC02091AA0214
:104AC000822F82958F7090E002970CF47FC08091C6
:104AD000A5029091A6029A8389831B82FD82EC82B3
:104AE0002E83CE0101960E948E1F70C0E816F90633
:104AF00028F09701281B390BC90104C080959095B7
:104B00008E0D9F1D883C910508F046C0662309F470
:104B10003FC0E51330C074132EC02091AA0220FDBF
:104B200021C0322F32953F70832F90E00097D1F053
:104B3000D80115962C9315970F9741F0832F8F5F0F
:104B40008295807F2F70282B15962C93C8010E9488
:104B50008E1F86E0F801A5EAB2E001900D928A95D9
:104B6000E1F73EC086E0F801A5EAB2E001900D92BF
:104B70008A95E1F737C04D875E878D859E850E94B7
:104B80005A23811123C08091AA0281608093AA02D6
:104B9000C8010E948E1F26C07E2DF98AE88A898965
:104BA0000E947F23E5EAF2E086E0DF011D928A950C
:104BB000E9F70E94BF2318C0662351F34D875E8733
:104BC0008D859E850E945A23882311F386E0F80183
:104BD000A5EAB2E001900D928A95E1F70E94CD23FB
:104BE0000E94BF2381E014C080E012C04D875E8721
:104BF0008D859E850E943928292F22952F7030E0BF
:104C0000223031050CF4E0CE243031050CF6E2CE32
:104C100062960FB6F894DEBF0FBECDBFDF91CF9185
:104C20001F910F91FF90EF9008951F93CF93DF9303
:104C3000CDB7DEB72C970FB6F894DEBF0FBECDBF51
:104C40004F83588769877A878B879C87CE01079621
:104C50000E9445248823D9F02F8138858A859B8539
:104C6000892B39F03F3F19F080E090E004C02F3FDE
:104C7000D9F781E090E0892B09F06DC04F8158850C
:104C800069857A858B859C850E948E2364C086E029
:104C9000FE013796DE01119601900D928A95E1F79B
:104CA000FF81E8854A855B854115510539F0EF3F65
:104CB00041F481E090E0FF3F31F003C081E090E0FB
:104CC00002C080E090E080FD46C02091DC0230E030
:104CD000C9010196877099276091DB0270E0861701
:104CE000970709F440C0F983EA835D834C8396E01B
:104CF000929FD001939FB00D1124A555BD4FFE0189
:104D0000319601900D929A95E1F78093DC020E9412
:104D10009E2321C0189FC001112485559D4F0E94DC
:104D20004524882371F1E091DB021E9FF0011124DC
:104D3000E555FD4F40815181628173818481958168
:104D40000E948E238091DB0290E001968770992764
:104D50008093DB0201C016E08091DB029091DC02BF
:104D60008913D8CF0EC00E9456231092DC021092F5
:104D7000DB02E5EAF2E086E0DF011D928A95E9F7C1
:104D8000EACF2C960FB6F894DEBF0FBECDBFDF91F1
:104D9000CF911F910895DF92EF92FF920F931F938F
:104DA000CF93DF93EC01009709F46EC0D12CEE2471
:104DB000E394F12C8E010F5F1F4FFE018491843725
:104DC00048F4843008F04CC0813071F0823009F032
:104DD0005BC01EC0853709F43FC080F1982F9458FE
:104DE000903708F051C03FC02296F8018491982F67
:104DF000905E983050F48770FE2D01C0FF0F8A95A9
:104E0000EAF78F2F0E94CF2813C00E94671E2FC081
:104E10002296F8018491982F905E983060F4877004
:104E2000FE2D01C0FF0F8A95EAF78F2F0E94D5282B
:104E30000E94F8281CC00E942F1F19C02296F8015A
:104E4000049107C08FE99FE00197F1F700C00000CF
:104E500001500111F7CF0BC02296F801D49007C082
:104E60000E94671E03C08F770E942F1FE8018D2DBF
:104E700007C08150EFE9FFE03197F1F700C0000073
:104E8000882309F497CFF5CFDF91CF911F910F9130
:104E9000FF90EF90DF9008956093E1027093E2023B
:104EA0008093E3029093E4020C9444236093DD0228
:104EB0007093DE028093DF029093E0020C9444230F
:104EC00008950C944C270F931F930091E1021091C9
:104ED000E2022091E3023091E402602B712B822BDD
:104EE000932B1F910F910C944C270F931F930091BC
:104EF000E1021091E2022091E3023091E40260238A
:104F00007123822393231F910F910C944C270F93AD
:104F10001F930091E1021091E2022091E30230918F
:104F2000E40260277127822793271F910F910C9429
:104F30004C2760E070E0CB010C94562741E050E034
:104F400060E070E004C0440F551F661F771F8A950C
:104F5000D2F7CB01BA010C94562741E050E060E053
:104F600070E004C0440F551F661F771F8A95D2F763
:104F70008091DD029091DE02A091DF02B091E0020B
:104F8000482B592B6A2B7B2BCB01BA010C9456274B
:104F900041E050E060E070E004C0440F551F661F20
:104FA000771F8A95D2F740955095609570958091BE
:104FB000DD029091DE02A091DF02B091E002482371
:104FC00059236A237B23CB01BA010C94562741E075
:104FD00050E060E070E004C0440F551F661F771F6B
:104FE0008A95D2F78091DD029091DE02A091DF02D6
:104FF000B091E002482759276A277B27CB01BA01E5
:105000000C9456270F931F930091DD021091DE023E
:105010002091DF023091E002602B712B822B932BC9
:105020001F910F910C9456270F931F930091DD024F
:105030001091DE022091DF023091E00260237123A3
:10504000822393231F910F910C9456270F931F9344
:105050000091DD021091DE022091DF023091E0022A
:1050600060277127822793271F910F910C94562751
:105070000895CF92DF92EF92FF920F931F93CF93F9
:10508000DF93EC01C090E102D090E202E090E302F5
:10509000F090E4028091DD029091DE02A091DF02A7
:1050A000B091E002C82AD92AEA2AFB2A0FE110E0CF
:1050B000B701A601002E04C07695679557954795D0
:1050C0000A94D2F740FF08C0BE01802F0E947104ED
:1050D0008130910509F007C00150110948F7BE0160
:1050E00080E00E947104DF91CF911F910F91FF909A
:1050F000EF90DF90CF90089540918B0150918C01FB
:1051000020E030E09FEFFA01E20FF31F62816817A1
:10511000A1F09F3F19F4611101C0922F2F5F3F4F03
:105120002630310581F707C0FA01E90FF11D97FD1F
:10513000FA95828308959F3FB9F7089540918B01B6
:1051400050918C0120E030E0FA01E20FF31F9281D0
:10515000981301C012822F5F3F4F26303105A1F70F
:10516000089581E090E0E0918B01F0918C01E80FCF
:10517000F91F1082019688309105A9F70895909142
:10518000E502982B9093E502089580959091E502B1
:1051900098239093E50208951092E5020895909166
:1051A000E602982B9093E602089580959091E6028E
:1051B00098239093E60208951092E6020895809352
:1051C000E70208951092E702089540918B015091F3
:1051D0008C0120E030E080E0FA01E20FF31F9181C2
:1051E00091118F5F2F5F3F4F27303105A9F7089549
:1051F000E0918B01F0918C018091E5028083E09138
:105200008B01F0918C0180819091E602892B808343
:105210009091E702992361F0E0918B01F0918C016C
:105220008081892B80830E94E52881110E94E228D9
:1052300080918B0190918C010C94311D8091FA0327
:10524000843021F11092F10220E488E190E00FB661
:10525000F894A895809360000FBE2093600080E0D2
:105260000E94590383B7817F846083BF83B78160C5
:1052700083BF7894889583B78E7F83BF88E10FB60C
:10528000F89480936000109260000FBE0895089516
:105290000895CF9380E00E9459030E9447290E94FD
:1052A000BD070E944829C0E08C2F0E941109892B5C
:1052B00029F4CF5FC530C1F780E001C081E0CF9114
:1052C00008950E94562380E00E9459030E941130E5
:1052D0000E94251D0C94E7051F920F920FB60F92A6
:1052E00011248F939F93AF93BF938091F10281110B
:1052F00013C08091F2029091F302A091F402B09158
:10530000F5024196A11DB11D8093F2029093F30224
:10531000A093F402B093F502BF91AF919F918F914A
:105320000F900FBE0F901F90189582E084BD93E000
:1053300095BD9AEF97BD80936E0008958FB7F8944E
:105340004091F2025091F3026091F4027091F502E3
:105350008FBFCA010895CF92DF92EF92FF920F9311
:105360001F932FB7F8944091F2025091F30260918D
:10537000F4027091F5022FBF6A017B01EE24FF2435
:105380008C0120E030E0C016D106E206F30620F0E2
:105390009A01281B390B05C09C0120953095240FDC
:1053A000351FC9011F910F91FF90EF90DF90CF90B3
:1053B00008951F920F920FB60F9211248F939F930F
:1053C000AF93BF938091F2029091F302A091F40207
:1053D000B091F5020196A11DB11D8093F202909348
:1053E000F302A093F402B093F502BF91AF919F91A5
:1053F0008F910F900FBE0F901F9018950E946D1601
:10540000F8942FEF87EA91E6215080409040E1F731
:1054100000C0000087E090EBDC01809304049093CF
:105420000504A0930604B09307042CE088E190E003
:105430000FB6F894A895809360000FBE209360008B
:10544000FFCFCF92DF92EF92FF920F931F93CF93F4
:10545000DF93C82ED12C01E010E08D2D0E941109A0
:105460007C01C0E0D0E098010C2E02C0220F331F57
:105470000A94E2F72E213F21232B29F42196CC30E8
:10548000D10589F708C06C2F7D2D80E00E944C0467
:10549000C812F4CF06C0D39485E0D812DECF80E0E6
:1054A00001C081E0DF91CF911F910F91FF90EF90AC
:1054B000DF90CF900895CF93C82F8CE20E94212ACD
:1054C000882321F08C2FCF910C94212A80E0CF915A
:1054D0000895CF930E94AC2B811102C00E948D2BA6
:1054E000C5E608C00E94BD078FE39CE90197F1F76C
:1054F00000C00000C150B1F789E20E945B2A81110F
:105500000AC18AE20E945B2A81110E948D2B85E0EC
:105510000E945B2A81110E94FE290E94B72B809372
:10552000F00287E00E945B2A882399F18BE10E94B8
:105530005B2A882351F09091F00291FB882780F933
:1055400021E0822780FB91F922C08EE00E945B2A35
:10555000882351F09091F00292FB882780F921E096
:10556000822780FB92F913C080E10E945B2A909110
:10557000F002882341F093FB882780F921E08227FD
:1055800080FB93F904C0892F809580FB90F990935C
:10559000F0028091F0020E94BB2B0E94C92B8093E5
:1055A000010380EE0E945B2A882341F08091010371
:1055B000982F909590FB80F98093010389E30E94D6
:1055C0005B2A882359F09091010391FB882780F989
:1055D00021E0822780FB91F99093010382EE0E94E3
:1055E0005B2A882359F09091010392FB882780F968
:1055F00021E0822780FB92F99093010386EE0E94BE
:105600005B2A882359F09091010393FB882780F946
:1056100021E0822780FB93F99093010383EE0E949F
:105620005B2A882359F09091010394FB882780F925
:1056300021E0822780FB94F99093010385E30E9487
:105640005B2A882359F09091010395FB882780F904
:1056500021E0822780FB95F99093010381E30E946A
:105660005B2A882359F09091010396FB882780F9E3
:1056700021E0822780FB96F99093010381E10E944B
:105680005B2A882359F09091010397FB882780F9C2
:1056900021E0822780FB97F9909301038091010319
:1056A0000E94CD2B87E20E945B2AC82F8EE10E94C8
:1056B0005B2A8111C2608FE10E945B2A8111C46064
:1056C00080E20E945B2A8111C86081E20E945B2A0D
:1056D0008111C06182E20E945B2A8111C06283E273
:1056E0000E945B2A8111C06484E20E945B2A8823A5
:1056F00011F0C06802C0CC2329F08C2F0E94C42B6B
:105700006C2F03C00E94C02B682F70E080E090E0F7
:10571000CF910C946127CF9108956DEE7EEF80E0DC
:1057200090E00E94783460E082E090E00E946A3469
:1057300060E083E090E00E946A3460E084E090E002
:105740000E946A3460E085E090E00E946A3460E084
:1057500086E090E00C946A3480E090E00E9464342B
:1057600021E08D3E9E4F09F020E0822F089582E0D7
:1057700090E00C945C34682F82E090E00C946A34E2
:1057800083E090E00C945C34682F83E090E00C940C
:105790006A3484E090E00C945C34682F84E090E0FC
:1057A0000C946A3486E090E00C945C34682F86E0B8
:1057B00090E00C946A348091FE0280FF0BC06091EF
:1057C000900185E0689FB0011124759567957595E6
:1057D00067952AC081FF09C06091900185E0689FAC
:1057E000B0011124759567951FC082FF07C06091B5
:1057F000900185E0689FB001112416C04091F80225
:105800004423C9F060918F01461788F720919001D9
:1058100085E0289F90011124429FC001439F900D75
:10582000112470E00E9448346038710540F461151D
:10583000710539F002C065E070E0862F08958FE7AA
:10584000089581E008958091FE0280FF08C0609174
:105850008E0170E0759567957595679521C081FFFC
:1058600006C060918E0170E07595679519C082FF42
:1058700004C060918E0170E010C08091F80288230E
:10588000C1F060918D018617A0F790918E01989FCD
:10589000C001112470E00E9448346038710528F47A
:1058A0006115710521F0862F08958FE7089581E035
:1058B000089561E070E0F4CF803F21F40E94DB2B7B
:1058C000819504C0813F29F40E94DB2B8093FB0269
:1058D0000895823F21F40E94DB2B819504C0833F11
:1058E00029F40E94DB2B8093FA020895893F19F472
:1058F0000E94232C05C08A3F31F40E94232C8195FD
:105900008093FC0208958B3F21F40E94232C819503
:1059100004C08C3F29F40E94232C8093FD0208953B
:10592000843F21F48091F902816017C0853F21F402
:105930008091F902826011C0863F21F48091F902C2
:1059400084600BC0873F21F48091F902886005C014
:10595000883F31F48091F90280618093F9020895C3
:105960008D3F21F48091FE0281600BC08E3F21F4B7
:105970008091FE02826005C08F3F29F48091FE0273
:1059800084608093FE020895803F29F48091FB0299
:1059900087FF6EC007C0813F41F48091FB0218165B
:1059A0000CF066C01092FB0263C09091FA02823F35
:1059B00019F497FF5DC005C0833F31F419160CF050
:1059C00057C01092FA0254C0893F31F48091FC0212
:1059D00018160CF04DC006C08A3F39F48091FC02C5
:1059E00087FF46C01092FC0243C08B3F29F4809190
:1059F000FD0287FF3DC006C08C3F39F48091FD0257
:105A00001816B4F51092FD0233C0843F21F4809142
:105A1000F9028E7F05C0853F31F48091F9028D7FB8
:105A20008093F90225C0863F21F48091F9028B7F93
:105A3000F7CF873F21F48091F902877FF1CF883F2C
:105A400021F48091F9028F7EEBCF8D3F21F480917C
:105A5000FE028E7F0BC08E3F21F48091FE028D7F6F
:105A600005C08F3F29F48091FE028B7F8093FE0258
:105A70008091FA0281110EC08091FB0281110AC04F
:105A80008091FC02811106C08091FD02811102C04B
:105A90001092F802089589EF92E00E943C1D0E9446
:105AA0009E299093F7028093F6020895CF938091F8
:105AB000F6029091F7020E94AB294091F80244232C
:105AC00021F02091910130E006C0209192015AE02E
:105AD000259F900111248217930708F486C08091B6
:105AE000FA0281110DC09091FB02911109C09091B1
:105AF000FC02911105C09091FD02992309F475C033
:105B00004F3F19F04F5F4093F802181624F40E949B
:105B1000DB2B8093FA028091FA0287FF05C00E9476
:105B2000DB2B81958093FA028091FB02181624F4F6
:105B30000E94DB2B8093FB028091FB0287FF05C054
:105B40000E94DB2B81958093FB026091FA02662311
:105B500039F1C091FB02CC2319F1772767FD7095CD
:105B6000872F972F0E94AC3123E333E343E35FE3B6
:105B70000E9460320E9479316093FA026C2F77277D
:105B800067FD7095872F972F0E94AC3123E333E395
:105B900043E35FE30E9460320E9479316093FB022D
:105BA0008091FC02181624F40E94232C8093FC029E
:105BB0008091FC0287FF05C00E94232C8195809371
:105BC000FC028091FD02181624F40E94232C80937D
:105BD000FD028091FD0287FF05C00E94232C819564
:105BE0008093FD02CF910C944B2DCF910895E9EF56
:105BF000F2E085E0DF011D928A95E9F71092F80244
:105C00001092FE020895833089F130F4813061F002
:105C1000823009F06EC019C0853009F449C0B8F16E
:105C2000863009F066C055C020919201862F90E021
:105C3000820F911D8F3F910520F4620F60939201B6
:105C400008958FEF80939201089520919101862FFE
:105C500090E0820F911D8F3F910520F4620F6093B9
:105C6000910108958FEF8093910108952091900103
:105C7000862F90E0820F911D8F3F910520F4620FD7
:105C80006093900108958FEF809390010895209183
:105C90008F01862F90E0820F911D8F3F910520F498
:105CA000620F60938F0108958FEF80938F010895A5
:105CB00020918E01862F90E0820F911D8F3F9105DC
:105CC00020F4620F60938E0108958FEF80938E0110
:105CD000089520918D01862F90E0820F911D8F3FB6
:105CE000910520F4620F60938D0108958FEF8093EA
:105CF0008D010895833021F130F4813059F08230E4
:105D000009F049C012C0853089F128F1863009F0C8
:105D100042C037C080919201681720F4861B80939F
:105D2000920108951092920108958091910168174F
:105D300020F4861B8093910108951092910108959B
:105D400080919001681720F4861B8093900108953C
:105D500010929001089580918F01681720F4861B9E
:105D600080938F01089510928F01089580918E0184
:105D7000681720F4861B80938E01089510928E017F
:105D8000089580918D01681720F4861B80938D0102
:105D9000089510928D01089541E050E060E070E0B8
:105DA00004C0440F551F661F771F8A95D2F7CB0199
:105DB000BA010E9461270C945623873200F58E3178
:105DC00008F086C08E3009F466C060F4873009F4AC
:105DD0004DC018F4863049F531C0883041F18B3020
:105DE00021F57BC0863109F478C018F48031E9F4DC
:105DF0005CC0893109F471C08B31B9F442C0883379
:105E000009F46BC048F4893209F460C0853309F4A1
:105E10005DC0873251F45AC0833409F457C018F476
:105E20008A3318F057C0883499F080E008950E94B2
:105E3000B72B0E94C92B0E94D22B4FC08091F00239
:105E4000817F8E7F8093F00281E08093FF0208952E
:105E50000E9456232FEF83ED90E321508040904025
:105E6000E1F700C000000E94FE2937C08091F002D7
:105E700080FF03C0817F8E7F01C081608093F0022C
:105E80002CC09091F00291FB882780F921E08227B5
:105E900080FB91F913C09091F00292FB882780F962
:105EA00021E0822780FB92F909C09091F00293FBD8
:105EB000882780F921E0822780FB93F99093F002F4
:105EC000882359F091609093F00207C080E003C0EE
:105ED0008D5101C089530E94CC2E81E0089580E04D
:105EE000089580E00895CF93C82F8091FF028130FC
:105EF00071F020F0823009F089C037C0A0918B0189
:105F0000B0918C018C91823209F082C007C0A091BF
:105F10008B01B0918C018C91823249F48C2F0E94BC
:105F20006F2F81111EC08C2F0E94DD2E1CC08C2F64
:105F30000E94712F811115C0C43169F030F4CB304B
:105F400081F0C03109F068C009C0C93221F0C833FE
:105F500009F062C006C01092FF025EC082E080932A
:105F6000FF0281E090E081705AC0C932C9F060F44C
:105F7000C431B1F020F4C73009F04CC034C0CE5168
:105F8000C63008F047C017C0CE3439F120F4CB3406
:105F900009F040C01CC0C135C1F0C235D9F513C0ED
:105FA00080910003882319F01092000333C081E030
:105FB0008093FF0234C0EC2FF0E0E25EFD4F808161
:105FC0008093000327C061E003C061E007C06AE07E
:105FD000809100030E94032E1DC06AE0809100039F
:105FE0000E947A2E17C08EE18093920182E3809303
:105FF00091018AE08093900184E180938F0188E091
:1060000080938E0188E280938D0104C01092FF027C
:1060100080E005C081E003C080E090E0A4CFCF9194
:1060200008950E94AC2B811102C00E948D2B0E940A
:10603000D22B8093030480FF02C0869501C080E0CC
:106040000C94590380910304982F9695292F30E0E2
:10605000233031054CF49F5F990F8170892B81604B
:10606000809303040E94D62B8091030486950C94A0
:10607000590380910304982F969591F09158990FA8
:106080008170892B809303048E7F91E009F490E066
:106090008091030490FB80F9809303040E94D62B27
:1060A0008091030486950C94590380910304982FE2
:1060B000909590FB80F9809303040E94D62B8091E9
:1060C000030480FF02C0869501C080E00C94590350
:1060D00030910304232F26952F5F2F77822F90E096
:1060E000317004972CF4220F232B2093030402C059
:1060F0003093030480910304282F2E7F91E009F44C
:1061000090E090FB80F9809303040E94D62B80914D
:10611000030486950C94590320910304922F9695BD
:106120009827990F822F8170892B809303048E7F8B
:1061300091E009F490E08091030490FB80F9809352
:1061400003040E94D62B8091030486950C94590376
:106150005058BB27AA270ED075C166D130F06BD13D
:1061600020F031F49F3F11F41EF45BC10EF4E09572
:10617000E7FB51C1E92F77D180F3BA1762077307A4
:106180008407950718F071F49EF58FC10EF4E09521
:106190000B2EBA2FA02D0B01B90190010C01CA01E1
:1061A000A0011124FF27591B99F0593F50F4503E8C
:1061B00068F11A16F040A22F232F342F4427585F7E
:1061C000F3CF469537952795A795F0405395C9F796
:1061D0007EF41F16BA0B620B730B840BBAF091504E
:1061E000A1F0FF0FBB1F661F771F881FC2F70EC0ED
:1061F000BA0F621F731F841F48F4879577956795C0
:10620000B795F7959E3F08F0B3CF9395880F08F0A8
:106210009927EE0F979587950895D9D008F481E0D6
:1062200008950CD00FC107D140F0FED030F021F41A
:106230005F3F19F0F0C0511139C1F3C014D198F388
:106240009923C9F35523B1F3951B550BBB27AA27F7
:1062500062177307840738F09F5F5F4F220F331F69
:10626000441FAA1FA9F333D00E2E3AF0E0E830D035
:1062700091505040E695001CCAF729D0FE2F27D038
:10628000660F771F881FBB1F261737074807AB0706
:10629000B0E809F0BB0B802DBF01FF2793585F4F7B
:1062A0002AF09E3F510568F0B6C000C15F3FECF395
:1062B000983EDCF3869577956795B795F7959F5F40
:1062C000C9F7880F911D9695879597F90895E1E094
:1062D000660F771F881FBB1F621773078407BA07F3
:1062E00020F0621B730B840BBA0BEE1F88F7E0954E
:1062F000089504D06894B111D9C00895BCD088F035
:106300009F5790F0B92F9927B751A0F0D1F0660FA1
:10631000771F881F991F1AF0BA95C9F712C0B130BC
:1063200081F0C3D0B1E00895C0C0672F782F8827CF
:10633000B85F39F0B93FCCF3869577956795B395FB
:10634000D9F73EF490958095709561957F4F8F4F6A
:106350009F4F0895E89409C097FB3EF4909580956F
:10636000709561957F4F8F4F9F4F9923A9F0F92F1B
:1063700096E9BB279395F695879577956795B79599
:10638000F111F8CFFAF4BB0F11F460FF1BC06F5F7F
:106390007F4F8F4F9F4F16C0882311F096E911C091
:1063A000772321F09EE8872F762F05C0662371F0B2
:1063B00096E8862F70E060E02AF09A95660F771FC6
:1063C000881FDAF7880F9695879597F90895990FA2
:1063D0000008550FAA0BE0E8FEEF16161706E807AF
:1063E000F907C0F012161306E407F50798F0621BD0
:1063F000730B840B950B39F40A2661F0232B242BA5
:10640000252B21F408950A2609F4A140A6958FEFC3
:10641000811D811D089597F99F6780E870E060E015
:1064200008959FEF80EC089500240A94161617062D
:1064300018060906089500240A9412161306140675
:1064400005060895092E0394000C11F4882352F0D8
:10645000BB0F40F4BF2B11F460FF04C06F5F7F4F90
:106460008F4F9F4F089557FD9058440F551F59F077
:106470005F3F71F04795880F97FB991F61F09F3F31
:1064800079F087950895121613061406551FF2CF5A
:106490004695F1DF08C0161617061806991FF1CFAA
:1064A00086957105610508940895E894BB276627D1
:1064B0007727CB0197F908958ADF08F48FEF0895C5
:1064C0000BD0C0CFB1DF28F0B6DF18F0952309F06C
:1064D000A2CFA7CF1124EACFC6DFA0F3959FD1F3B7
:1064E000950F50E0551F629FF001729FBB27F00D82
:1064F000B11D639FAA27F00DB11DAA1F649F6627D7
:10650000B00DA11D661F829F2227B00DA11D621F25
:10651000739FB00DA11D621F839FA00D611D221FDF
:10652000749F3327A00D611D231F849F600D211DC3
:10653000822F762F6A2F11249F5750408AF0E1F066
:1065400088234AF0EE0FFF1FBB1F661F771F881FAF
:1065500091505040A9F79E3F510570F05CCFA6CFF7
:106560005F3FECF3983EDCF3869577956795B7959A
:10657000F795E7959F5FC1F7FE2B880F911D9695C4
:10658000879597F90895FA01EE0FFF1F30962105C0
:10659000310599F16115710561F48038BFE39B07FE
:1065A00049F168949038810561F08038BFEF9B070E
:1065B00041F0992342F5FF3FE1053105210511F135
:1065C000E8940894E795D901AA2329F4AB2FBE2FAC
:1065D000F85FD0F310C0FF5F70F4A695E0F7F739CD
:1065E00050F019F0FF3A38F49F779F930CD00F903A
:1065F00007FC905808953EF014CF60E070E080E80A
:106600009FE308954FE79F775F934F933F932F93B7
:106610009ED02F913F914F915F9152DF05C019F4A9
:106620000EF0F9CE42CFFDCE26DFC8F39638C0F784
:1066300007F80F92E8942BE33AEA48EB5FE74EDF66
:106640000F920F920F924DB75EB70F92C0D0ECEA47
:10665000F0E016D04F915F91EF91FF91E595EE1F1D
:10666000FF1F49F0FE57E0684427EE0F441FFA95DC
:10667000E1F74195550B32D00F9007FE26C00895E3
:10668000DF93CF931F930F93FF92EF92DF927B01E3
:106690008C01689405C0DA2EEF011EDFFE01E8943C
:1066A000A5912591359145915591AEF3EF0162DDAC
:1066B000FE019701A801DA9479F7DF90EF90FF903F
:1066C0000F911F91CF91DF9108959B01AC0160E084
:1066D00070E080E89FE3A5CD9ECEACC0CCDEE8F3B1
:1066E0009923D9F3940F511DBBF39150504094F06E
:1066F00059F0882332F0660F771F881F9150504061
:10670000C1F79E3F510544F7880F911D96958795D7
:1067100097F908955F3FACF0983E9CF0BB278695B3
:1067200077956795B79508F4B1609395C1F7BB0F5E
:1067300058F711F460FFE8CF6F5F7F4F8F4F9F4F87
:10674000E3CFB4CE0EF076C06CCE689464CE93DE08
:10675000C8F39923D1F3C6F3DF93CF931F930F931D
:10676000FF92C92FDD2788232AF02197660F771F14
:10677000881FDAF720E030E040E85FEB9FE38839DC
:1067800020F0803E30F021968F77E3DCE4EDF0E0FE
:1067900003C0DFDCE1E0F1E073DF8B01BE01EC015F
:1067A000FB2E6F5771097595771F880B990BD4DDF8
:1067B00028E132E741E35FE38FDEAF2D9801AE01C0
:1067C000FF900F911F91CF91DF91D4DC3BCEFA0166
:1067D000DC01AA0FBB1F9B01AC01BF5728F4222785
:1067E0003327442750781FC0B75188F4AB2F0024BB
:1067F000469537952795011CA395D2F3002069F0A3
:10680000220F331F441FB395DAF30DD0A1CC6130B2
:106810007105A0E88A07B94630F49B01AC016627F0
:10682000772788279078309621F020833183428320
:10683000538308959F3F31F0915020F487957795C9
:106840006795B795880F911D9695879597F9089547
:10685000991B79E004C0991F961708F0961B881FB2
:106860007A95C9F780950895AA1BBB1B51E107C013
:10687000AA1FBB1FA617B70710F0A61BB70B881FD0
:10688000991F5A95A9F780959095BC01CD0108955F
:1068900097FB072E16F4009407D077FD09D00E94CD
:1068A000343407FC05D03EF4909581959F4F0895B0
:1068B000709561957F4F0895F999FECF92BD81BD86
:1068C000F89A992780B50895A8E1B0E042E050E039
:1068D0000C947F34262FF999FECF1FBA92BD81BD4B
:1068E00020BD0FB6F894FA9AF99A0FBE0196089552
:1068F0000E946A34272F0C946B34DC01CB01FC011D
:10690000F999FECF06C0F2BDE1BDF89A319600B408
:0E6910000D9241505040B8F70895F894FFCF13
:10691E0055D0A44600001644000000000000484276
:10692E0061978A460000C8430000000000004842FC
:10693E0055D024460000C843000000000000484225
:10694E0000005C460000C843000000000000484202
:10695E0061978A4600007A4455D0A4460000C84389
:10696E00000000000000484200005C460000C843E2
:10697E00000000000000484255D024460000164496
:10698E000507000C058540000001064000000100CF
:10699E0091102111FD10C810941001E8022808145E
:1069AE000A321E42004500250026004300610060A9
:1069BE000020003700640065006600670044004652
:1069CE000024004700000002000400050007000933
:1069DE00000B000C000E0010001100130015001724
:1069EE000018001A001C001D001F002100230024A7
:1069FE00002600280029002B002D002F0030003229
:106A0E000034003500370039003B00F6030F042830
:106A1E0004410469051C05E604C6043F4D362002F8
:106A2E000302000001000101010101000101010248
:086A3E00030405060708090026
:00000001FF

@ -0,0 +1,1628 @@
:100000000C947C050C94C0050C94C0050C94C005A0
:100010000C94C0050C94C0050C94C0050C94C0054C
:100020000C94C0050C94C0050C94C7180C94991935
:100030000C94B2270C94C0050C94C0050C94C00518
:100040000C94C0050C94C0050C94C0050C94C0051C
:100050000C94C0050C941A280C94C0050C94C0058F
:100060000C94C0050C94C0050C94C0050C94C005FC
:100070000C94C0050C94C0050C94C0050C94C005EC
:100080000C94E50E0C94C0050C94C0050C94C005AE
:100090000C94C0050C94C0050C94C0050C94C005CC
:1000A0000C94C0050C94C0050C94C0051B062B06CF
:1000B0003D064D06530662066E06730680068806E8
:1000C00098069D06061A281A161B281A161B6D1A62
:1000D000901A161BE51AF81AFB1DFB1D381E381E58
:1000E000921ED01E48214821E91E4821EA1FEA1F1E
:1000F000AD20C4204821332107634236B79BD8A7DF
:100100001A39685618AEBAAB558C1D3CB7CC57633C
:10011000BD6DEDFD753EF6177231BF000000803FEA
:1001200008000000BE922449123EABAAAA2ABECD06
:10013000CCCC4C3E00000080BEABAAAAAA3E000078
:100140000000BF000000803F000000000008417870
:10015000D3BB4387D1133D190E3CC3BD4282AD2BA7
:100160003E68EC8276BED98FE1A93E4C80EFFFBE9F
:1001700001C4FF7F3F000000000035001E001F008B
:100180002000210022002300240025002600270053
:100190002A002B0014001A000800150017001C008C
:1001A00018000C00120013004C0029000400160077
:1001B000070009000A000B000D000E000F003300BD
:1001C0003400E1001D001B000600190005001100AD
:1001D000100036003700380028000530E000E2004B
:1001E000E30003302C002C0004305000510052007A
:1001F0004F0035001E001F002000210022002300B8
:1002000024002500260027002A002B0014001A00D5
:10021000090013000A000D000F0018001C00330035
:100220004C002900040015001600170007000B0001
:10023000110008000C0012003400E1001D001B003A
:100240000600190005000E001000360037003800C7
:1002500028000530E000E200E30003302C002C0011
:1002600004305000510052004F0035001E001F00A6
:100270002000210022002300240025002600270062
:100280002A002B0034003600370013001C00090040
:100290000A00060015000F004C002900040012009F
:1002A000080018000C0007000B00170011001600D2
:1002B0003800E100330014000D000E001B000500A3
:1002C00010001A0019001D0028000530E000E200AF
:1002D000E30003302C002C00043050005100520089
:1002E0004F0035021E021F022002210222022302B9
:1002F00024022502260227022A0035021E021F02BE
:1003000020022102220223022402250226022702C1
:100310004C004C003A003B003C003D003E003F00DA
:100320002D022E022F023002310201004000410056
:1003300042004300440045000100010001000100AB
:1003400001000100010001000100010001000100A5
:100350000100AB00AA00A900AE0035001E001F007E
:100360002000210022002300240025002600270071
:100370002A0035001E001F0020002100220023005B
:1003800024002500260027004C004C003A003B00CA
:100390003C003D003E003F002D002E002F003000AD
:1003A000310001004000410042004300440045008C
:1003B0000100010001000100010001000100010035
:1003C00001000100010001000100AB00AA00A9002A
:1003D000AE0000000000000000000000000000006F
:1003E000000000000000000000000000000000000D
:1003F00000000000000000000000000000000000FD
:1004000000000000000000000000000000000000EC
:1004100000000000000000000000000000000000DC
:1004200000000000000000000000000000000000CC
:100430000000000000000000000003300000000089
:100440000430000000000000000000000000000078
:10045000000000000000000000000000000000009C
:10046000000000000000000000000000000000008C
:10047000000000000000000000000000000000007C
:10048000000000000000000000000000000000006C
:10049000000000000000000000000000000000005C
:1004A000000000000000000000000000000000004C
:1004B000000000000000000000000000000000003C
:1004C000000000000000000000000000000000002C
:1004D000000000000000000000000000000000001C
:1004E000000000000000000000000000000000000C
:1004F00000000000000000000000000000000000FC
:1005000000000000000000000000000000000000EB
:1005100000000000000000000000000000000000DB
:1005200000000000000000000000000000000000CB
:1005300000000000000000000000000000000000BB
:1005400000000000000000000000000000000000AB
:10055000000000000000000000000000000000009B
:10056000000000000000000000000000000000008B
:10057000000000000000000000000000000000007B
:10058000000000000000000000000000000000006B
:10059000000000000000000000000000000000005B
:1005A000000000000000000000000000000000004B
:1005B000000000000000000000000000000000003B
:1005C000000000000000000000000000000000002B
:1005D000000000000000000000000000000000001B
:1005E000000000000000000000000000000000000B
:1005F00000000000000000000000000000000000FB
:1006000000000000000000000000000000000000EA
:1006100000000000000000000000000000000000DA
:1006200000000000000000000000000000000000CA
:1006300000000000000000000000000000000000BA
:1006400000000000000000000000000000000000AA
:10065000000000000000000000000000000000009A
:10066000000000000000000000000000000000008A
:10067000000000000000000000000000000000007A
:10068000000000000000000000000000000000006A
:10069000000000000000000000000000000000005A
:1006A000000000000000000000000000000000004A
:1006B000000000000000000000000000000000003A
:1006C000000000000000000000000000000000002A
:1006D000000000000000000000000000000000001A
:1006E000000000000000000000000000000000000A
:1006F00000000000000000000000000000000000FA
:1007000000000000000000000000000000000000E9
:1007100000000000000000000000000000000000D9
:1007200000000000000000000000000000000000C9
:1007300000000000000000000000000000000000B9
:1007400000000000000000000000000000000000A9
:100750000000000000000000000000000000000099
:100760000000000000000000000000000000000089
:100770000000000000000000000000000000000079
:100780000000000000000000000000000000000069
:100790000000000000000000000000000000000059
:1007A0000000000000000000000000000000000049
:1007B0000000000000000000000000000000000039
:1007C0000000000000000000000000000000000029
:1007D0000000000000000000000000000000000019
:1007E0000000000000000000000000000000000009
:1007F00000000000000000000000000000000000F9
:1008000000000000000000000000000000000000E8
:1008100000000000000000000000000000000000D8
:1008200000000000000000000000000000000000C8
:1008300000000000000000000000000000000000B8
:1008400000000000000000000000000000000000A8
:100850000000000000000000000000000000000098
:100860000000000000000000000000000000000088
:100870000000000000000000000000000000000078
:100880000000000000000000000000000000000068
:100890000000000000000000000000000000000058
:1008A0000000000000000000000000000000000048
:1008B0000000000000000000000000000000000038
:1008C0000000000000000000000000000000000028
:1008D0000000000000000000000000000000000018
:1008E0000000000000000000000000000000000008
:1008F000000000000000000000003A003B003C0047
:100900003D003E003F0040004100420043004400E3
:10091000450001000050010001000100010001003C
:1009200001000100010001004C0001000100010074
:1009300007300630135012500030013002300100F1
:10094000010001000B300A300930083001000100BD
:10095000010001000100010001000100010001008F
:10096000010001000100010001000100010001007F
:1009700001002A0354006800650020005000720046
:1009800065006F006E006900630020004B00650089
:10099000790062006F0061007200640000002C03A7
:1009A0004F007200740068006F006C0069006E00F8
:1009B00065006100720020004B0065007900620054
:1009C0006F006100720064007300000004030904FA
:1009D00009025400030100A0FA0904000001030108
:1009E0000100092111010001223F000705810308D0
:1009F000000A09040100010301020009211101009C
:100A000001224D000705820308000A0904020001C3
:100A100003000000092111010001223600070583AF
:100A20000308000A1201100100000008EDFE6160D9
:100A300001000102000105010980A10185021601E2
:100A40000026B7001A01002AB70075109501810031
:100A5000C0050C0901A1018503160100269C021A9C
:100A600001002A9C02751095018100C00501090250
:100A7000A1010901A1000509190129051500250198
:100A80009505750181029501750381010501093004
:100A900009311581257F9502750881060938158170
:100AA000257F950175088106050C0A3802158125F8
:100AB0007F950175088106C0C005010906A10105E1
:100AC0000719E029E71500250195087501810295B0
:100AD0000175088101050819012905950575019120
:100AE000029501750391010507190029FF150025DD
:100AF000FF950675088100C011241FBECFEFDAE014
:100B0000DEBFCDBF04B603FE24C08091F3039091F5
:100B1000F403A091F503B091F6038730904BA74002
:100B2000B04BB9F41092F3031092F4031092F50352
:100B30001092F60314BE84B7877F84BF88E10FB696
:100B4000F89480936000109260000FBEE0E0F8E33C
:100B5000099512E0A0E0B1E0E8EAF3E602C00590F2
:100B60000D92A63FB107D9F713E0A6EFB2E001C09E
:100B70001D92A33FB107E1F70E940D160C94D231EC
:100B80000C940000279A2F988FEF9FEF9093870087
:100B9000809386008AE08093800089E180938100C1
:100BA0000C94092D282F81110BC080918000877F24
:100BB0008093800010928D0010928C002F980895E1
:100BC0002F9880918000886080938000233019F4F2
:100BD0008FEF9FEF0FC083E090E0821B9109880F99
:100BE000991F2FEF3FEFA90102C0569547958A95AF
:100BF000E2F7CA0190938D0080938C000895CF9303
:100C0000DF93EC010E94AE28BE0180E090E0DF910E
:100C1000CF910C9428250F931F93462F50E04C3012
:100C2000510508F098C0DC01FA01EA5AFF4F12960C
:100C30008C910C949631882309F48DC000E010E06B
:100C4000980140E064E070E089EC91E00E9463125A
:100C500081E090E00FC0882309F47DC000E010E03F
:100C6000980140E066E070E089E591E00E9463123F
:100C700082E090E00E94FF056EC0882309F46BC0FB
:100C800000E010E0980140E068E070E089E891E061
:100C90000E94631284E090E0EDCF882311F083E09E
:100CA00005C083E00CC0882349F084E00E94A5259C
:100CB00040E164E083E00E94C90A4DC084E00E94E4
:100CC000C625F6CF882331F085EE0E948F1C0E9446
:100CD000602D41C085EE0E94571D3DC08823D9F18B
:100CE0000E94F70D38C08823B1F10E94F00D00E09A
:100CF00010E0980140E064E070E089EE91E029C0E6
:100D0000882349F185E00E94C6250E94180E23C061
:100D1000882309F100E010E0980140E068E070E00D
:100D200089E191E00E94631285E00E94A52513C02D
:100D3000882389F00E94F61204C0882361F00E9483
:100D4000011300E010E0980140E068E070E089E104
:100D500091E00E94631280E090E01F910F9108954E
:100D60000F931F932FEF89EF90E021508040904028
:100D7000E1F700C0000000E010E0980140E064E00E
:100D800070E089EE91E00E9463121F910F91089527
:100D9000CF92DF92EF92FF920F931F93CF93DF9347
:100DA000CDB7DEB7CC58D1090FB6F894DEBF0FBE71
:100DB000CDBF2091B30325FFC5C08C01FC019281FA
:100DC00080910001992309F460C096E4E5E2F2E025
:100DD000DE01A95BBF4F01900D929A95E1F7F801F2
:100DE0009081E091F602F091F702E90FF11DEE0F0C
:100DF000FF1F27E430E02C0F3D1FE20FF31F60813F
:100E00007181680F711D882777FD8095982F0E944A
:100E1000A42E20E030E040E451E40E94092E6B0152
:100E20007C01F801218185E090E0821B9109BC01E1
:100E3000882777FD8095982F0E94A42E9B01AC01F6
:100E4000C701B6010E94A12D9B01AC0160E070E0DA
:100E500080E090E40E94173020E030E04CE551E45F
:100E60000E94B42F4FE050E0C457DF4F0FB6F89404
:100E7000DEBF0FBECDBFDF91CF911F910F91FF90CD
:100E8000EF90DF90CF900C94031296E4E5E2F2E04D
:100E9000DE01119601900D929A95E1F7F80190818B
:100EA000E091F602F091F702E90FF11DEE0FFF1F3E
:100EB00021E030E02C0F3D1FE20FF31F60817181B4
:100EC000680F711D882777FD8095982F0E94A42EAA
:100ED00020E030E040E451E40E94092E6B017C01E7
:100EE000F801218185E090E0821B9109BC018827EF
:100EF00077FD8095982F0E94A42E9B01AC01C7011D
:100F0000B6010E94A12D9B01AC0160E070E080E081
:100F100090E40E94173020E030E04CE551E40E945C
:100F2000B42FC457DF4F0FB6F894DEBF0FBECDBF4E
:100F3000DF91CF911F910F91FF90EF90DF90CF90B5
:100F40000C944B0EC457DF4F0FB6F894DEBF0FBEA4
:100F5000CDBFDF91CF911F910F91FF90EF90DF9068
:100F6000CF9008950F931F9300E010E0980140E0A8
:100F700063E070E081E091E00E9463122FEF82E570
:100F800097E0215080409040E1F700C000001F91A1
:100F90000F91089508950E94C2056E9A769A0C9456
:100FA000B0060C94CA070C94C8060895880F991FC0
:100FB000FC01E650F040859194910895880F991FA7
:100FC000FC01E658FE4F8591949108950F931F936D
:100FD000CF93DF93EC01811520E49207A0F5C115B2
:100FE00080E3D80708F0E1C0C83ED105D8F4C03E80
:100FF000D10508F0EEC1C83AD10578F4C53AD1055B
:1010000008F074C0C130D10509F46DC008F4DEC128
:10101000C430D10508F0DDC1D9C1CB3BD10508F4FE
:1010200070C0D4C1C11590E2D90708F0B9C0C1158C
:1010300021E0D20708F0CDC1C03FD10508F4C6C1F8
:101040008E01106506C2C13080E5D80709F4BDC025
:1010500068F5C13120E4D20709F4AEC050F4C031C4
:1010600090E4D90708F0A5C0CF70DD278E01146D7C
:10107000F0C1C33120E4D20709F4A4C008F49FC032
:10108000C115D04509F0A2C10E946C210E94180E22
:101090000E94B2079FEF24E38CE0915020408040F3
:1010A000E1F700C000000E943F28D3C1C11520E62F
:1010B000D20730F4C11581E5D80708F48CC02DC1E2
:1010C000C11590E7D90708F481C1C11520E8D207FE
:1010D00008F478C1C11580E9D80708F077C1DF703E
:1010E0008E01106AB6C101E010E0B3C1C53AD10566
:1010F00009F471C1C63AD10509F070C102E810E4E3
:10110000A8C1C83AD10509F46CC1C93AD10509F49E
:101110006BC1CA3AD10509F46AC1CB3AD10509F4C9
:1011200069C1CC3AD10509F468C1CD3AD10509F4B9
:1011300067C1C03BD10509F466C1CE3AD10509F4B7
:1011400065C1CF3AD10509F464C1C13BD10509F4A9
:1011500063C1C23BD10509F462C1C33BD10509F4A7
:1011600061C1C43BD10509F460C1C53BD10509F497
:101170005FC1C63BD10509F45EC1C73BD10509F487
:101180005DC1C83BD10509F45CC1C93BD10509F477
:101190005BC1CA3BD10509F45AC100E014E459C14E
:1011A000CE019F700E94DE0755C1DD278E01106CB5
:1011B00050C100E011ED4DC100E010ED4AC100E06A
:1011C00012ED47C100E013ED44C18091C703816077
:1011D0008093C7033EC10E949B28811102C00E94D8
:1011E00077280E94B32890E09093F2038093F10354
:1011F000C23090E5D90721F48091F103816086C067
:10120000C43020E5D20721F48091F10382607EC0D2
:10121000C63080E5D80721F48091F103846076C060
:10122000C83090E5D90719F48091F10327C0CA307E
:1012300020E5D20721F48091F103806167C0CC30B2
:1012400080E5D80721F48091F10380625FC0CE3041
:1012500090E5D90721F48091F103806457C0C03133
:1012600020E5D20721F48091F10380684FC0C2319C
:1012700080E5D80729F48091F1038460886046C036
:10128000C33090E5D90721F48091F1038E7F3EC0F1
:10129000C53020E5D20721F48091F1038D7F36C05F
:1012A000C73080E5D80721F48091F1038B7F2EC0F1
:1012B000C93090E5D90719F48091F10326C0CB30ED
:1012C00020E5D20721F48091F1038F7E1FC0CD303D
:1012D00080E5D80721F48091F1038F7D17C0CF30CE
:1012E00090E5D90721F48091F1038F7B0FC0C131C4
:1012F00020E5D20721F48091F1038F7707C0C33135
:10130000D04531F48091F1038B7F877F8093F10387
:101310008091F1030E94B7289CC08D2F99278F7070
:10132000992781309105D9F49E012370332702C09B
:10133000880F991F2A95E2F79C688E0144E0000F00
:10134000111F4A95E1F700271370802B912B53E072
:10135000CC0FDD1F5A95E1F7C076DD272FC0823014
:10136000910531F4DC2FCC278E01016F106A71C01A
:101370008330910569F4CE018370992701E010E074
:1013800002C0000F111F8A95E2F7C8019C680FC0C8
:10139000049709F05EC0CE018370992701E010E048
:1013A00002C0000F111F8A95E2F7C8019A6823E076
:1013B000CC0FDD1F2A95E1F7C07ED7708C010C2B76
:1013C0001D2B47C0DF708E01106243C000E010E0AB
:1013D00040C08E013EC001E810E43BC003E810E4C9
:1013E00038C002EE14E435C009EE14E432C00AEE4F
:1013F00014E42FC005EB14E42CC006EB14E429C060
:1014000007EB14E426C00CEC14E423C00DEC14E448
:1014100020C003E815E41DC00AE815E41AC002E97B
:1014200015E417C004E915E414C001E216E411C084
:1014300003E216E40EC004E216E40BC005E216E473
:1014400008C006E216E405C007E216E402C00AE29C
:1014500016E4C801DF91CF911F910F9108959CE090
:10146000799FF00111249CE3899FE00DF11D112467
:10147000E60FF11DEE0FFF1FE658FE4F8591949188
:10148000803E9105E0F4803C910558F5813391054B
:1014900009F46FC048F48932910509F463C08A32B7
:1014A000910509F46DC072C089339105E9F0823865
:1014B0009105D1F08533910509F44DC067C0833E95
:1014C000910581F138F4803E9105B9F0823E910595
:1014D000D9F05CC0863E910561F1873E9105A1F18E
:1014E00055C00E94D60708952091F10320FD02C047
:1014F00021FF4CC080EE90E049C08091F10380FF55
:10150000F9CF89E390E042C08091F10382FF0EC0E1
:101510008091F10384FF03C080E090E037C083EE48
:1015200090E034C08091F10382FFF2CF82EE90E030
:101530002DC08091F10383FF0BC08091F10384FDE6
:10154000EBCF87EE90E022C08091F10383FFF5CFCF
:1015500086EE90E01BC08091F10385FF07C089E211
:1015600090E014C08091F10385FFF9CF85E390E00E
:101570000DC08091F10386FF07C08AE290E006C0AB
:101580008091F10386FFF9CF81E390E00E94E607A6
:101590000895CF92DF92EF92FF920F931F9301E095
:1015A00010E020E030E06801790104C0CC0CDD1CC3
:1015B000EE1CFF1C8A95D2F704C0000F111F221FDA
:1015C000331F6A95D2F70C291D292E293F29C09077
:1015D000B303D090B403E090B503F090B603C022FB
:1015E000D122E222F322842FC016D106E206F306AE
:1015F00041F41F910F91FF90EF90DF90CF900C94EA
:10160000A5251F910F91FF90EF90DF90CF900C9444
:10161000C62508950C94090B5F926F927F928F926A
:101620009F92AF92BF92CF92DF92EF92FF920F9371
:101630001F93CF93DF93CDB7DEB72A970FB6F894F9
:10164000DEBF0FBECDBFCE0101966C014E019BE007
:10165000890E911C20E030E040E050E060E070E056
:1016600000E010E0E12CF12C6C2C5D2C8AE0782E4F
:10167000AA24A394B12CEBE6F2E0A62DB52D872D7C
:1016800001900D928A95E1F7F601819191916F0198
:10169000FC01E07FFF27E032F10559F48F709927B4
:1016A000F50102C0EE0FFF1F8A95E2F7EE2AFF2A2E
:1016B00037C0E033F10559F48F709927F50102C066
:1016C000EE0FFF1F8A95E2F70E2B1F2B29C0E03487
:1016D000F10559F48F709927F50102C0EE0FFF1F35
:1016E0008A95E2F76E2B7F2B1BC0E035F10559F48C
:1016F0008F709927F50102C0EE0FFF1F8A95E2F760
:101700004E2B5F2B0DC0E036F10551F48F709927F9
:10171000F50102C0EE0FFF1F8A95E2F72E2B3F2B3B
:10172000C814D90409F0A7CF84B19E2D90958923C0
:1017300084B985B1E82AE5B887B1902F90958923BF
:1017400087B988B1082B08B98AB1962F909589235B
:101750008AB98BB1682B6BB98DB1942F9095892381
:101760008DB98EB1482B4EB980B3922F90958923B5
:1017700080BB81B3282B21BB2A960FB6F894DEBF1D
:101780000FBECDBFDF91CF911F910F91FF90EF90D2
:10179000DF90CF90BF90AF909F908F907F906F9091
:1017A0005F9008955F926F927F928F929F92AF9217
:1017B000BF92CF92DF92EF92FF920F931F93CF933E
:1017C000DF93CDB7DEB768970FB6F894DEBF0FBED4
:1017D000CDBF85B7806885BF85B7806885BF0E940B
:1017E0000C0BCE0101966C014E0199E1890E911C02
:1017F00020E030E040E050E060E070E000E010E029
:10180000E12CF12C6C2C5D2C88E1782EAA24A39479
:10181000B12CE5E7F2E0A62DB52D872D01900D92B4
:101820008A95E1F7F601819191916F01FC01E07FCA
:10183000FF27E032F10559F48F709927F50102C0B6
:10184000EE0FFF1F8A95E2F7EE2AFF2A37C0E0333A
:10185000F10559F48F709927F50102C0EE0FFF1FB3
:101860008A95E2F70E2B1F2B29C0E034F10559F4BD
:101870008F709927F50102C0EE0FFF1F8A95E2F7DE
:101880006E2B7F2B1BC0E035F10559F48F70992723
:10189000F50102C0EE0FFF1F8A95E2F74E2B5F2B7A
:1018A0000DC0E036F10551F48F709927F50102C0A3
:1018B000EE0FFF1F8A95E2F72E2B3F2BC814D90499
:1018C00009F0A7CF84B19E2D9095892384B985B165
:1018D000E82AE5B887B1902F9095892387B988B118
:1018E000082B08B98AB1962F909589238AB98BB1B4
:1018F000682B6BB98DB1942F909589238DB98EB1DA
:10190000482B4EB980B3922F9095892380BB81B329
:10191000282B21BBE2E0F3E0A8EFB2E01192119294
:101920001D921D9283E0EC30F807C1F768960FB660
:10193000F894DEBF0FBECDBFDF91CF911F910F9105
:10194000FF90EF90DF90CF90BF90AF909F908F90DF
:101950007F906F905F900C94CB075F926F927F9215
:101960008F929F92AF92BF92CF92DF92EF92FF92AF
:101970000F931F93CF93DF93CDB7DEB7A2970FB628
:10198000F894DEBF0FBECDBF6E0149E1C40ED11C7D
:1019900088EFA82E82E0B82E75019AE0592E4601F4
:1019A00001E010E028E1622E35E0732EEBE6F2E074
:1019B000D401852D01900D928A95E1F7D6018D9184
:1019C0009D916D019C01207F33272032310591F4D8
:1019D00024B18F709927F80102C0EE0FFF1F8A957E
:1019E000E2F7CF01922F982B94B995B18095892376
:1019F00085B953C02033310591F427B18F709927F1
:101A0000A80102C0440F551F8A95E2F7CA01922F20
:101A1000982B97B998B18095892388B93EC0203416
:101A2000310591F42AB18F709927D80102C0AA0F0D
:101A3000BB1F8A95E2F7CD01922F982B9AB99BB1E3
:101A4000809589238BB929C02035310591F42DB1BA
:101A50008F709927F80102C0EE0FFF1F8A95E2F7F9
:101A6000CF01922F982B9DB99EB1809589238EB975
:101A700014C02036310589F420B38F709927A8014E
:101A800002C0440F551F8A95E2F7CA01922F982B86
:101A900090BB91B38095892381BB50EA5A95F1F7A9
:101AA000BE016F5F7F4F20E030E040E050E0E5E7AF
:101AB000F2E0DE011196862D01900D928A95E1F7F4
:101AC000DB018D919D91BD01FC01E07FFF27E0329C
:101AD000F10511F4E3B113C0E033F10511F4E6B1FF
:101AE0000EC0E034F10511F4E9B109C0E035F105AB
:101AF00011F4ECB104C0E036F105B9F4EFB1F0E057
:101B00008F70992702C0F595E7958A95E2F7E0FD79
:101B100008C0C801042E02C0880F991F0A94E2F77A
:101B200002C080E090E0282B392B4F5F5F4F4C3094
:101B3000510509F0BCCFF70180819181821793078D
:101B400021F031832083709209020E940C0BF2E095
:101B5000EF0EF11C42E0E41643E0F40609F026CF54
:101B6000809109028823C9F081508093090288235B
:101B700039F08FE99FE00197F1F700C000000DC038
:101B8000E2E0F3E0D5018D919D915D018193919308
:101B9000B2E0AB16B3E0BB06A9F70E94D10781E023
:101BA000A2960FB6F894DEBF0FBECDBFDF91CF91E6
:101BB0001F910F91FF90EF90DF90CF90BF90AF906B
:101BC0009F908F907F906F905F900895E82FF0E046
:101BD000EE0FFF1FEE5FFC4F808191810895089505
:101BE0008091DC0381608093DC030C94C928809190
:101BF000DC038E7F8093DC030C94C9280E949B2811
:101C0000811102C00E9477280E94C5288093DC03BE
:101C10003E9A809171008D7F8093710082E0809365
:101C200090008AE18093910081E080930E030895F3
:101C300080910E03811102C00E94FE0D10925E037E
:101C400010925D03809171008D7F8093710080916F
:101C500090008F77809390001092200310921F03C2
:101C600010925703109258031092590310925A037E
:101C70001092560310925503E5E3F3E0A5E2B3E0BA
:101C800011921192119211921D921D9283E0E535ED
:101C9000F807B1F70895CF92DF92EF92FF920F937A
:101CA0001F93CF93DF9320911F03222309F484C055
:101CB0006B017C0180910E03811102C00E94FE0D18
:101CC00005E513E0C7E0D0E0A7019601F801929185
:101CD0008291729162918F010E94052E811131C013
:101CE000FE01EE0FFF1FEE0FFF1FEB5CFC4F10829B
:101CF000118212821382DE01AA0FBB1FAB5DBC4FA3
:101D000011961C921E92C730D105E9F021964481AC
:101D10005581668177814083518362837383148206
:101D200015821682178212968D919C9113971196A7
:101D30009C938E9313961C921E9212973496129631
:101D4000E2CF219708F680915D0390915E030197A1
:101D500097FD05C090935E0380935D0304C01092CD
:101D60005E0310925D0380915D0390915E0320916C
:101D70005B0330915C032817390724F010925C0351
:101D800010925B03892BC1F4809171008D7F809349
:101D90007100809190008F7780939000109257038C
:101DA000109258031092590310925A03109256033E
:101DB0001092550310921F03DF91CF911F910F9145
:101DC000FF90EF90DF90CF9008951F920F920FB683
:101DD0000F9211244F925F926F927F928F929F92F7
:101DE000AF92BF92CF92DF92EF92FF922F933F93E9
:101DF0004F935F936F937F938F939F93AF93BF9313
:101E0000CF93DF93EF93FF9380911F03882309F40F
:101E10009BC1C0915D03D0915E031C161D060CF0A2
:101E200093C140900F035090100360901103709085
:101E3000120320E030E0A901C301B2010E94B02FDB
:101E400018160CF065C0C130D10509F452C080915C
:101E50005B0390915C03BE010E9482317C019093F0
:101E60005C0380935B038090210390902203A090F9
:101E70002303B090240320E030E040E85FE3C50195
:101E8000B4010E94A12D60932103709322038093DB
:101E9000230390932403F701EE0FFF1FEE0FFF1FA4
:101EA000EB5CFC4FA301920160817181828193817F
:101EB0000E94092E20E030E040E05EE30E94B42F53
:101EC0009B01AC01C501B4010E94B02F18168CF41F
:101ED000C7010196BE010E94823190935C038093FA
:101EE0005B0310922103109222031092230310929D
:101EF0002403E0915B03F0915C03EE0FFF1FEE0FF4
:101F0000FF1FEB5CFC4F6081718182819381D0C0A7
:101F1000C0905703D0905803E0905903F0905A03B3
:101F200020E030E0A901C701B6010E94052E2197EB
:101F3000882309F4A2C0FE01EE0FFF1FEE0FFF1F62
:101F4000EB5CFC4F80809180A280B380A50194015E
:101F5000C701B6010E94052E87FF31C0A50194017B
:101F600060E070E08CED93EC0E94092E20E030E000
:101F700040E451E40E94092E20E030E040E05FE3BD
:101F80000E94B42F9B01AC0160E070E080E090E41F
:101F90000E9417309B01AC01C501B4010E94B42F0F
:101FA0009B01AC01C701B6010E94052E87FF07C047
:101FB000A701960160E070E08CED93E439C0A501C3
:101FC0009401C701B6010E94B02F18160CF055C03D
:101FD000A501940160E070E08CED93E40E94092E6D
:101FE00020E030E040E451E40E94092E20E030E09F
:101FF00040E05FE30E94B42F9B01AC0160E070E021
:1020000080E090E40E9417309B01AC01C501B4014F
:102010000E94B42F9B01AC01C701B6010E94B02FF2
:1020200018165CF5A701960160E070E08CED93EC6A
:102030000E94092E20E030E040E451E40E94092E85
:1020400020E030E040E05FE30E94B42F9B01AC0150
:1020500060E070E080E090E40E9417309B01AC01EA
:10206000C701B6010E94B42F6093570370935803C1
:102070008093590390935A0313C0FE01EE0FFF1F84
:10208000EE0FFF1FEB5CFC4F80819181A281B38139
:102090008093570390935803A0935903B0935A0326
:1020A00060915703709158038091590390915A039E
:1020B00020910C0330910D032F3F4FEF340731F087
:1020C0002F5F3F4F30930D0320930C030E940C139E
:1020D0006B017C0120E034E244EF51E40E94052EC4
:1020E00087FF08C086EFC82E88E2D82E84EFE82E3E
:1020F00081E4F82E20E030E040E051E4C701B60171
:102100000E94B42F9B01AC0160E074E284E79BE481
:102110000E94092E6B017C010E94712E7093970022
:102120006093960020910A0230910B0240910C02BC
:1021300050910D02C701B6010E94B42F0E94712E6A
:10214000709399006093980080912003882309F48C
:1021500033C1C0901B03D0901C03E0901D03F0908E
:102160001E0320E030E0A901C701B6010E94B02F94
:102170001816D4F580910C0390910D038F3F2FEF2B
:10218000920729F0019690930D0380930C03C701E9
:10219000B6010E940C1320E030E040E051E40E94C0
:1021A000B42F9B01AC0160E074E284E79BE40E94E1
:1021B000092E6B017C010E94712E70939700609331
:1021C000960020910A0230910B0240910C0250912E
:1021D0000D02C701B6010E94B42F0E94712E7093A8
:1021E00099006093980008C0109297001092960092
:1021F0001092990010929800609115037091160347
:102200006F5F7F4F709316036093150320919600C4
:102210003091970080E090E0232BF1F0C091960080
:10222000D09197000E94A22E6B017C01BE0180E03C
:1022300090E00E94A22E9B01AC0160911703709167
:1022400018038091190390911A030E94092E20E02F
:102250003FEF4FE757E410C00E94A22E6B017C01B4
:1022600020E030EE4FEF54E46091170370911803B3
:102270008091190390911A030E94B42F9B01AC0125
:10228000C701B6010E94B02F87FD96C0809113034D
:102290008F5F8093130390E02091D8033091D9038E
:1022A00082179307A0F08091E303882319F010921E
:1022B00013030DC0809171008D7F80937100809118
:1022C00090008F7780939000109220037DC08091C2
:1022D0001403C0911303811128C0C090DD03D09076
:1022E000DE03E090DF03F090E00320E030E0A9019E
:1022F000C701B6010E94B02F1816BCF481E080938C
:10230000140310921B0310921C0310921D031092D1
:102310001E03C0921703D0921803E0921903F092A3
:102320001A03C150C093130343C0109214031092B8
:102330000D0310920C03E091DA03F091DB0348E007
:10234000C49FE00DF11D112480819181A281B38190
:1023500080931B0390931C03A0931D03B0931E0353
:1023600020E030E040E85EE36481758186819781FA
:102370000E94B42F6B017C0120E030E048EC52E475
:1023800060910E0270910F028091100290911102E3
:102390000E94092E9B01AC01C701B6010E94B42F17
:1023A00060931703709318038093190390931A0393
:1023B00010921603109215038091DC0380FD04C077
:1023C0001092200310921F03FF91EF91DF91CF91A4
:1023D000BF91AF919F918F917F916F915F914F913D
:1023E0003F912F91FF90EF90DF90CF90BF90AF90F3
:1023F0009F908F907F906F905F904F900F900FBE47
:102400000F901F901895CF92DF92EF92FF92CF938B
:10241000DF936B017C01EA0180910E03811102C000
:102420000E94FE0D8091DC0380FF46C080915D0319
:1024300090915E0308970CF03FC0809171008D7FF2
:10244000809371008091200381110E94180E81E019
:1024500080931F0310920D0310920C0320E030E0D4
:10246000A901C701B6010E94B02F1816DCF48091B3
:102470005D0390915E03FC01EE0FFF1FEE0FFF1F47
:10248000EB5CFC4FC082D182E282F382FC01EE0F52
:10249000FF1FEB5DFC4FD183C083019690935E03D9
:1024A00080935D03809171008260809371008091C0
:1024B0009000806880939000DF91CF91FF90EF9023
:1024C000DF90CF9008958F929F92AF92BF92CF925C
:1024D000DF92EF92FF920F931F93CF93DF93EC0164
:1024E0007B01D42E4801590180910E03811102C055
:1024F0000E94FE0D8091DC0380FF6BC08091710013
:102500008D7F8093710080911F0381110E94180EAE
:1025100081E080932003D093DB03C093DA03F09231
:10252000D903E092D803D092E3038092DD03909226
:10253000DE03A092DF03B092E00310922103109219
:102540002203109223031092240310921303888114
:102550009981AA81BB8180931B0390931C03A09354
:102560001D03B0931E0320E030E040E85EE36C8181
:102570007D818E819F810E94B42F6B017C0120E0C0
:1025800030E048EC52E460910E0270910F028091AD
:102590001002909111020E94092E9B01AC01C7010B
:1025A000B6010E94B42F60931703709318038093B1
:1025B000190390931A031092160310921503809139
:1025C0007100826080937100809190008068809398
:1025D0009000DF91CF911F910F91FF90EF90DF90CE
:1025E000CF90BF90AF909F908F90089580915F03A0
:1025F00090E0019666E070E00E94823180935F0374
:10260000089580915F0390E0019766E070E00E947A
:10261000823180935F0308958F929F92AF92BF9211
:10262000CF92DF92EF92FF920F931F93CF93DF939E
:102630006B017C01C0910C03D0910D03BE0180E0C1
:1026400090E00E94A22E4B015C01A701960160E080
:1026500070E08CE594E40E94092E9B01AC01C50159
:10266000B4010E94B42F0E94762E20915F03233084
:1026700009F473C028F4222351F02130E9F02CC171
:10268000243009F4A0C0253009F4E0C025C180E061
:1026900090E0A0E0BFE380930A0290930B02A09326
:1026A0000C02B0930D0210920F03109210031092BF
:1026B00011031092120310C110920F031092100315
:1026C00010921103109212036431710540F46A30C4
:1026D000710560F520E030E040E85EE32BC0693C26
:1026E000710508F0AAC080E090E00E94A22E20E0D0
:1026F00030E040EA51E40E94A02D20E030E044E3C5
:1027000053E40E94092E9B01AC010E94B42F20E0EB
:1027100030E040E05EE30E94B42F9B01AC0160E03A
:1027200070E080E09EE30E94A02D44C020E030E0F5
:1027300040E05FE3C701B6010E94B42F6B017C014A
:1027400080E090E0A0E0BEE380930A0290930B0249
:10275000A0930C02B0930D02BFC010920F03109211
:10276000100310921103109212034AE0469F900149
:10277000479F300D1124C90168EB7BE00E946E3148
:10278000BC016C5D754077FF03C07195619571095F
:10279000882777FD8095982F0E94A42E2EE333EC96
:1027A0004EE259E30E94B42F20E030E040EC5EE3BB
:1027B0000E94A12D60930A0270930B0280930C0279
:1027C00090930D0289C010920F0310921003109283
:1027D000110310921203CE0183709927892BE1F027
:1027E000BE016170772780E090E00E94A22E20E079
:1027F00030E040E05EE30E94B42F20E030E040E4AF
:102800005FE30E94A12D60930A0270930B028093F4
:102810000C0290930D020CC080E090E0A0E0BFE3BA
:1028200080930A0290930B02A0930C02B0930D02C6
:10283000C770DD27CD2B09F04FC010920A0210920D
:102840000B0210920C0210920D0246C010920F0360
:1028500010921003109211031092120300E010E086
:1028600020E03FE300930A0210930B0220930C0236
:1028700030930D026739710578F180E090E00E9495
:10288000A22E20E030E047E153E40E94A02D20E09A
:1028900030E04AE754E40E94092E20E030E048E4AA
:1028A00052E40E94B42F20E030E040EA51E40E945C
:1028B000E62E0E94712E660F771F660F771FFB01B1
:1028C000E357FD4F2081318142815381C701B60119
:1028D0000E94B42F6B017C01C701B601DF91CF913B
:1028E0001F910F91FF90EF90DF90CF90BF90AF902E
:1028F0009F908F900895809168030895CF93DF9300
:1029000000D01F92CDB7DEB79C018091E8038430E0
:1029100019F593E099833B832A839093E9008FEF25
:102920009091E800815095FD06C095ED9A95F1F7DC
:1029300000008111F5CF8091E80085FF0DC040E0D7
:1029400050E063E070E0CE0101960E94B7168091DE
:10295000E8008E778093E8000F900F900F90DF9142
:10296000CF910895CF93DF9300D01F92CDB7DEB7FC
:102970002091E803243021F522E029839B838A8378
:1029800083E08093E9008FEF9091E800815095FDFE
:1029900006C095ED9A95F1F700008111F5CF809171
:1029A000E80085FF0DC040E050E063E070E0CE013C
:1029B00001960E94B7168091E8008E778093E80018
:1029C0000F900F900F90DF91CF9108952091E80321
:1029D0002430F1F422E02093E9002FEF3091E80059
:1029E000215035FD06C035ED3A95F1F70000211173
:1029F000F5CF2091E80025FF0BC040E050E065E0F6
:102A000070E00E94B7168091E8008E778093E8000E
:102A10000895CF93DF932091E803243039F521E026
:102A20002093E9002FEF3091E800215035FD06C0DA
:102A300035ED3A95F1F700002111F5CF2091E8002E
:102A400025FF14C0EC0140E050E068E070E00E9417
:102A5000B7168091E8008E778093E80088E0FE0149
:102A6000A0E6B3E001900D928A95E1F7DF91CF9156
:102A700008958091E703811109C00E944C180E94BB
:102A8000A9188091E20084608093E200089510927A
:102A9000E7030895089508950C94A72742E061EC98
:102AA00081E00E94C61742E061EC82E00E94C617F6
:102AB00042E061EC83E00C94C6178091EA03833016
:102AC00009F453C030F4813071F0823009F48CC0C5
:102AD00008958A3009F478C08B3009F45EC08930DB
:102AE00009F09AC020C08091E903813A09F094C0AE
:102AF0008091E800877F8093E8008091ED039091BA
:102B0000EE03892B21F468E080E693E003C060E0E7
:102B100080E090E070E00E9402178091E8008B77DF
:102B20008093E80008958091E903813209F074C030
:102B30008091ED039091EE03892B09F06DC0809197
:102B4000E800877F8093E8008091E80082FD05C05F
:102B50008091E8038111F8CF5FC08091F1008093EC
:102B600068038091E8008B7753C08091E903813A34
:102B700009F052C08091ED039091EE03892B09F08A
:102B80004BC08091E800877F8093E8008091E80047
:102B900080FFFCCF80911C0236C08091E903813216
:102BA000D9F58091ED039091EE03892BA9F58091E1
:102BB000E800877F8093E8000E94FB178091EB0379
:102BC00080931C020C946C218091E903813221F5E1
:102BD0008091E800877F8093E8000E94FB17809136
:102BE000EC038093690308958091E903813AA1F48D
:102BF0008091E800877F8093E8008091E80080FF63
:102C0000FCCF809169038093F1008091E8008E777A
:102C10008093E8000C94FB17089584B7877F84BFE6
:102C200088E10FB6F89480936000109260000FBEA8
:102C300090E080E80FB6F894809361009093610073
:102C40000FBE0E949E1B0E944C180E94A9188091E2
:102C5000E20084608093E20078940E942F1B0E941F
:102C6000A01B82E192E00E944A1B8091E80385301C
:102C700069F40E9461278091E6038823B1F30E94E2
:102C80008F27882391F30E94A116EFCF0E94A81BE3
:102C9000ECCF292F332723303105C9F064F42130DC
:102CA000310581F02230310509F043C084E590E020
:102CB00020ED39E042C021323105F1F022323105F8
:102CC00041F137C082E190E024E23AE036C0992732
:102CD0008130910541F08230910541F0892B49F511
:102CE000ECECF9E005C0EEE9F9E002C0E2E7F9E05A
:102CF000849190E09F0121C06330D8F4E62FF0E08A
:102D0000EE0FFF1FEA51FD4F2081318189E090E0F5
:102D100014C0633070F470E0FB01EE0FFF1FE0524F
:102D2000FD4F20813181FB01E352FD4F808190E016
:102D300004C080E090E020E030E0FA01318320839D
:102D4000089580E189BD82E189BD09B400FEFDCF0F
:102D50008091D8008F7D8093D8008091E0008260C0
:102D60008093E0008091E00081FDFCCF0895CF9238
:102D7000DF92EF92FF920F931F93CF93DF93EC01BB
:102D80008B016A010E941A18811133C0C114D10449
:102D900039F0F60180819181081B190BC80FD91FEA
:102DA000E12CF12C0115110519F18091E80085FD48
:102DB00016C08091E8008E778093E800C114D1049A
:102DC00049F0F60180819181E80EF91EF182E082DE
:102DD00085E00FC00E941A18882321F30AC0899148
:102DE0008093F10001501109FFEFEF1AFF0ADACFCB
:102DF00080E0DF91CF911F910F91FF90EF90DF90D6
:102E0000CF9008952091EF033091F00326173707F4
:102E100048F06115710539F42091E8002E77209370
:102E2000E80001C0B90140E061157105A9F12091E8
:102E3000E803222309F443C0253009F442C020915D
:102E4000E80023FD40C02091E80022FD32C020911F
:102E5000E80020FFE9CF4091F3002091F20030E03C
:102E6000342BFC01CF016115710559F02830310573
:102E700040F481918093F100615071092F5F3F4FC1
:102E8000F1CF41E02830310509F040E02091E80021
:102E90002E772093E800C8CF4111C9CF0AC0809196
:102EA000E803882361F0853061F08091E80083FDBC
:102EB0000AC08091E80082FFF2CF80E0089582E0AE
:102EC000089583E0089581E008952091EF03309103
:102ED000F0032617370748F06115710539F4209182
:102EE000E8002E772093E80001C0B901FC0120E042
:102EF0006115710591F18091E803882309F440C0C0
:102F0000853009F43FC08091E80083FD3DC0809189
:102F1000E80082FD2FC08091E80080FFE9CF20917A
:102F2000F3008091F20090E0922B6115710559F049
:102F30008830910540F424912093F100319661503E
:102F400071090196F2CF21E0089709F020E0809105
:102F5000E8008E778093E800CBCF2111CCCF0AC058
:102F60008091E803882361F0853061F08091E8006A
:102F700083FD0AC08091E80082FFF2CF80E00895CF
:102F800082E0089583E0089581E00895982F9730B6
:102F900058F59093E900981739F07091EC00209162
:102FA000ED005091F00003C0242F762F50E021FF58
:102FB00019C03091EB003E7F3093EB003091ED0073
:102FC0003D7F3093ED003091EB0031603093EB00AA
:102FD0007093EC002093ED005093F0002091EE00F0
:102FE00027FF07C09F5FD3CF8F708093E90081E0F8
:102FF000089580E008958091E90387FF11C08091D2
:10300000E80082FD05C08091E8038111F8CF11C06E
:103010008091E8008B770BC08091E803882349F00A
:103020008091E80080FFF8CF8091E8008E77809350
:10303000E80008952091E4003091E50095E6409184
:10304000EC00842F817040FF22C08091E80080FD59
:103050001CC08091E803882391F0853091F0809125
:10306000EB0085FD10C04091E4005091E50042174F
:10307000530729F39A01915011F784E0089582E0F3
:10308000089583E0089581E0089580E008954091D7
:10309000E80042FFDECF08950E94BA180E94C218CD
:1030A000E0EEF0E0808181608083E8EDF0E08081F7
:1030B0008F77808319BCA7EDB0E08C918E7F8C93C5
:1030C00080818F7E80831092E70308950F931F9372
:1030D000CF93DF930E94BA180E94C218C8EDD0E0C7
:1030E00088818F77888388818068888388818F7DB5
:1030F000888319BC1092E8031092E4031092E6034F
:103100001092E50300EE10E0F80180818B7F808350
:1031100088818160888342E060E080E00E94C61779
:10312000E1EEF0E080818E7F8083E2EEF0E080814E
:1031300081608083808188608083F80180818E7FB8
:103140008083888180618883DF91CF911F910F9167
:103150000895E8EDF0E080818F7E8083E7EDF0E078
:1031600080818160808384E082BF81E08093E70377
:103170000C946618E8EDF0E080818E7F80831092D9
:10318000E20008951092DA001092E10008951F9273
:103190000F920FB60F9211242F933F934F935F938B
:1031A0006F937F938F939F93AF93BF93EF93FF930F
:1031B0008091E10082FF0BC08091E20082FF07C096
:1031C0008091E1008B7F8093E1000E942E1B809113
:1031D000DA0080FF1FC08091D80080FF1BC0809163
:1031E000DA008E7F8093DA008091D90080FF0DC0D5
:1031F00080E189BD82E189BD09B400FEFDCF81E097
:103200008093E8030E94391505C019BC1092E803A9
:103210000E9447158091E10080FF19C08091E20073
:1032200080FF15C08091E2008E7F8093E200809144
:10323000E20080618093E2008091D80080628093F8
:10324000D80019BC85E08093E8030E944B1580915B
:10325000E10084FF30C08091E20084FF2CC080E157
:1032600089BD82E189BD09B400FEFDCF8091D800FF
:103270008F7D8093D8008091E1008F7E8093E10064
:103280008091E2008F7E8093E2008091E200816075
:103290008093E2008091E403882311F084E007C06A
:1032A0008091E30087FD02C081E001C083E080934C
:1032B000E8030E944C158091E10083FF29C08091B2
:1032C000E20083FF25C08091E100877F8093E100C9
:1032D00082E08093E8031092E4038091E1008E7F06
:1032E0008093E1008091E2008E7F8093E2008091E4
:1032F000E20080618093E20042E060E080E00E94B2
:10330000C6178091F00088608093F0000E944A15F3
:10331000FF91EF91BF91AF919F918F917F916F91AD
:103320005F914F913F912F910F900FBE0F901F9083
:1033300018951F920F920FB60F9211242F933F935F
:103340004F935F936F937F938F939F93AF93BF93AD
:10335000CF93DF93EF93FF93C091E900CF708091FB
:10336000EC00D82FD17080FDD0E81092E900809158
:10337000F000877F8093F00078940E94DD1910920E
:10338000E9008091F00088608093F000CD2BCF7031
:10339000C093E900FF91EF91DF91CF91BF91AF9181
:1033A0009F918F917F916F915F914F913F912F915D
:1033B0000F900FBE0F901F9018951F93CF93DF9320
:1033C000CDB7DEB7AA970FB6F894DEBF0FBECDBF5C
:1033D000E9EEF3E088E08E0F9091F10091938E1367
:1033E000FBCF0E945D158091E80083FF1FC1809193
:1033F000E9039091EA03492F50E04A30510508F063
:1034000015C1FA01EE59FF4F0C949631803881F0C6
:10341000823809F00BC18091ED038F708093E90031
:103420008091EB0085FB882780F91092E90006C0A7
:103430008091E5039091E603911182609091E800FC
:10344000977F9093E8008093F1001092F100C8C03C
:10345000282F2D7F09F0EAC0882319F0823061F00F
:10346000E5C08091EB03813009F0E0C0933009F0B2
:1034700080E08093E6032BC08091EB03811127C08D
:103480008091ED038F7009F4D1C08093E900209101
:10349000EB0020FF1CC0933021F48091EB00806290
:1034A00014C09091EB0090619093EB0021E030E02C
:1034B000A90102C0440F551F8A95E2F74093EA0024
:1034C0001092EA008091EB0088608093EB001092EC
:1034D000E9008091E800877F86C08111A7C0109124
:1034E000EB031F778091E3008078812B8093E300CA
:1034F0008091E800877F8093E8000E94FB1780910D
:10350000E80080FFFCCF8091E30080688093E300B7
:10351000111102C082E001C083E08093E80386C0FD
:103520008058823008F082C08091EB039091EC03C8
:103530008C3D53E0950779F583E08A838AE289839D
:103540004FB7F894DE01139620E03EE051E2E32FFE
:10355000F0E050935700E49120FF03C0E295EF7034
:103560003F5FEF708E2F90E0EA3010F0C79601C0F9
:10357000C0968D939D932F5F243149F74FBF809163
:10358000E800877F8093E8006AE270E0CE01019650
:103590000E94021714C0AE014F5F5F4F6091ED03B0
:1035A0000E944916BC01009709F440C09091E800C0
:1035B000977F9093E80089819A810E946517809196
:1035C000E8008B778093E80031C0803879F58091EE
:1035D000E800877F8093E8008091E4038093F10006
:1035E0008091E8008E778093E8000E94FB171EC050
:1035F00081111CC09091EB039230C0F48091E800DF
:10360000877F8093E8009093E4030E94FB178091EA
:10361000E403811106C08091E30087FD02C081E0D0
:1036200001C084E08093E8030E944E158091E80079
:1036300083FF0AC08091E800877F8093E800809133
:10364000EB0080628093EB00AA960FB6F894DEBF81
:103650000FBECDBFDF91CF911F9108950895CF93F5
:103660008091E8038823A1F0C091E900CF70909188
:10367000EC00892F817090FD80E8C82B1092E90042
:103680008091E80083FD0E94DD19CF70C093E900AE
:10369000CF91089590936F0380936E030895E09106
:1036A0006E03F0916F03309721F00190F081E02DCF
:1036B000099480E00895E0916E03F0916F033097D4
:1036C00021F00280F381E02D09940895E0916E03CA
:1036D000F0916F03309721F00480F581E02D09947B
:1036E000089520916C0330916D038217930771F058
:1036F00090936D0380936C03E0916E03F0916F03E0
:10370000309721F00680F781E02D099408952091EB
:103710006A0330916B038217930771F090936B03E8
:1037200080936A03E0916E03F0916F03309721F06C
:103730000084F185E02D0994089508950C949D1B53
:103740000E94DB270E94D20B0E9461280C94092D55
:103750004F925F927F928F929F92AF92BF92CF9241
:10376000DF92EF92FF920F931F93CF93DF93CDB72A
:10377000DEB72A970FB6F894DEBF0FBECDBF0E940A
:10378000AD0C91E7C92E93E0D92E00E010E0AA24F9
:10379000A394B12C702E802F0E94E60D4C01F601EF
:1037A000419051906F014826592641145104B1F4BB
:1037B0000F5F1F4F0530110569F78FEF89838A83EB
:1037C0001B820E94E4278160782F9D838C8349812E
:1037D0005A816B818D810E94611C3AC08091C70320
:1037E00081FD0E94EF0D20E030E07501022E02C045
:1037F000EE0CFF1C0A94E2F7C70184219521892B66
:1038000009F12E837F828E209F2091E0892809F480
:1038100090E098870E94E4278160782F9A878987B3
:103820004E815F8168858A850E94611C000F111F8F
:10383000F801EF58FC4F80819181E826F926F1824A
:10384000E08206C02F5F3F4F2C30310571F6B0CFBC
:103850000E94482A109170030E944F1B1817D9F03C
:103860000E944F1B809370032A960FB6F894DEBF18
:103870000FBECDBFDF91CF911F910F91FF90EF90C1
:10388000DF90CF90BF90AF909F908F907F905F9090
:103890004F900C940A0B2A960FB6F894DEBF0FBE19
:1038A000CDBFDF91CF911F910F91FF90EF90DF90EF
:1038B000CF90BF90AF909F908F907F905F904F90F0
:1038C0000895CF93DF93CDB7DEB72B970FB6F8945B
:1038D000DEBF0FBECDBF4F83588769877A878B873E
:1038E000DE01119686E0FD0111928A95E9F785E0E7
:1038F000FE01379601900D928A95E1F749815A8130
:103900006B817C818D819E810E9406242B960FB64F
:10391000F894DEBF0FBECDBFDF91CF910895CF9356
:10392000882309F4C2C0C82F823859F40E944F1B63
:1039300081FDBBC089E30E94AF260E94322789E344
:103940000CC0833879F40E944F1B80FDAEC083E524
:103950000E94AF260E94322783E50E94CC26CF9199
:103960000C943227843859F40E944F1B82FD9DC06D
:1039700087E40E94AF260E94322787E4EECF8CEFC7
:103980008C0F813A48F48C2F0E94712C81118DC0CC
:103990008C2F0E94AF26E3CF80E28C0F883048F452
:1039A000C77081E001C0880FCA95EAF70E94EB2634
:1039B000D6CF8BE58C0F833078F4C53A29F0C63A20
:1039C00031F083E890E005C081E890E002C082E831
:1039D00090E0CF910C94711B88E58C0F833108F037
:1039E00064C0C83A39F1C93A41F1CA3A49F1CB3A0F
:1039F00051F1CC3A59F1CD3A61F1C03B69F1CE3A7F
:103A000071F1CF3A79F1C13B81F1C23B89F1C33BFE
:103A100091F1C43B99F1C53BA1F1C63BA9F1C73B6C
:103A2000B1F1C83BB9F1C93BC1F1CA3BC9F180E072
:103A300090E038C082EE90E035C089EE90E032C070
:103A40008AEE90E02FC085EB90E02CC086EB90E0F2
:103A500029C087EB90E026C08CEC90E023C08DEC71
:103A600090E020C083E891E01DC08AE891E01AC090
:103A700082E991E017C084E991E014C081E292E00C
:103A800011C083E292E00EC084E292E00BC085E2B6
:103A900092E008C086E292E005C087E292E002C0B0
:103AA0008AE292E0CF910C94871BCF9108958823EE
:103AB00009F44BC0823859F40E944F1B81FF45C066
:103AC00089E30E94AF260E94322789E30CC0833825
:103AD00071F40E944F1B80FF38C083E50E94AF261F
:103AE0000E94322783E50E94CC260C94322784382A
:103AF00059F40E944F1B82FF28C087E40E94AF2622
:103B00000E94322787E4EFCF9CEF980F913A58F349
:103B100090E2980F983050F4877091E001C0990FAF
:103B20008A95EAF7892F0E94F126DFCF9BE5980F4F
:103B3000933020F480E090E00C94711B885A83311C
:103B400020F480E090E00C94871B0895882321F0F6
:103B50000E94EB260C9432270895882321F00E94BE
:103B6000F1260C9432270895BF92CF92DF92EF9204
:103B7000FF920F931F93CF93DF9300D000D000D01C
:103B8000CDB7DEB725E0FC01DE01119601900D9264
:103B90002A95E1F7FC01D0801181028125812295CF
:103BA0002F7043815481452B09F472C31F3F21F4C8
:103BB000FFEFDF1609F46CC37C012E830E94D3074C
:103BC000D9821A8369817A81802F0E94AB26182FAF
:103BD000B92E0E9460260E9427252E81002319F00D
:103BE0000E9408272E81EB2DE295EF70F0E0E4595A
:103BF000FF4F0C9496318B2D807F9B2D9F70F92E5B
:103C0000882319F0F29480EFF822002389F0FF2036
:103C100009F47CC280E2810F883020F48F2D0E944D
:103C2000EB2603C08F2D0E94FB260E9432276EC216
:103C3000812F0E94571DFF2009F42AC3105E8F2D8B
:103C4000183018F40E94F12602C00E94012726961F
:103C50000FB6F894DEBF0FBECDBFDF91CF911F919D
:103C60000F91FF90EF90DF90CF90BF900C94322790
:103C70008B2D807F9B2D9F70803211F4892F03C084
:103C8000892F8295807F112319F0113011F12BC0FB
:103C90000023A9F0222389F1213079F526960FB669
:103CA000F894DEBF0FBECDBFDF91CF911F910F9172
:103CB000FF90EF90DF90CF90BF900C941B272223B2
:103CC00019F0213009F4E4C28E830E941E278E81F0
:103CD0009BC1002321F0263008F0DAC20EC0253047
:103CE00008F0D6C291C10023C9F0222331F0F701B8
:103CF000958190FF0BC29F70958326960FB6F8941E
:103D0000DEBF0FBECDBFDF91CF911F910F91FF900E
:103D1000EF90DF90CF90BF900C94A61D222309F462
:103D200073C109C22B2D26952695237030E02115ED
:103D3000310521F021303105D1F0AAC2002321F054
:103D4000812F9B2D937002C080E090E026960FB6E5
:103D5000F894DEBF0FBECDBFDF91CF911F910F91C1
:103D6000FF90EF90DF90CF90BF900C94711B0023D9
:103D700021F0812F9B2D937002C080E090E0269669
:103D80000FB6F894DEBF0FBECDBFDF91CF911F916C
:103D90000F91FF90EF90DF90CF90BF900C94871B16
:103DA000812F002319F00E94502902C00E94B829D7
:103DB00026960FB6F894DEBF0FBECDBFDF91CF9130
:103DC0001F910F91FF90EF90DF90CF90BF900C94D8
:103DD0003D2A8B2D837009F07BC0011159C2812FC0
:103DE000829586958770880F880F912F9F70C92EB6
:103DF000D12CE12CF12C082E04C0CC0CDD1CEE1CC7
:103E0000FF1C0A94D2F714FF12C04FE050E060E0AC
:103E100070E004C0440F551F661F771F8A95D2F7C4
:103E2000CB01BA01609570958095909503C060E0D4
:103E300070E0CB012B2D269526952370422F50E064
:103E400042305105D9F04330510569F16C297D2983
:103E50008E299F294130510551F126960FB6F894CD
:103E6000DEBF0FBECDBFDF91CF911F910F91FF90AD
:103E7000EF90DF90CF90BF900C944E256C297D2958
:103E80008E299F2926960FB6F894DEBF0FBECDBFB0
:103E9000DF91CF911F910F91FF90EF90DF90CF9026
:103EA000BF900C946A250E944E25C701B601269644
:103EB0000FB6F894DEBF0FBECDBFDF91CF911F913B
:103EC0000F91FF90EF90DF90CF90BF900C94322530
:103ED000002319F08B2D817001C08695882309F489
:103EE000D7C1812F829586958770880F880F912F73
:103EF0009F70C92ED12CE12CF12C082E04C0CC0CC3
:103F0000DD1CEE1CFF1C0A94D2F714FF12C04FE018
:103F100050E060E070E004C0440F551F661F771F3B
:103F20008A95D2F7CB01BA016095709580959095EE
:103F300003C060E070E0CB012B2D26952695237001
:103F4000422F50E042305105D9F04330510569F11C
:103F50006C297D298E299F294130510551F12696E2
:103F60000FB6F894DEBF0FBECDBFDF91CF911F918A
:103F70000F91FF90EF90DF90CF90BF900C94282688
:103F80006C297D298E299F2926960FB6F894DEBFCD
:103F90000FBECDBFDF91CF911F910F91FF90EF909A
:103FA000DF90CF90BF900C9444260E942826C70132
:103FB000B60126960FB6F894DEBF0FBECDBFDF91D7
:103FC000CF911F910F91FF90EF90DF90CF90BF9016
:103FD0000C940C26103F49F118F4103E48F491C09F
:103FE000123F09F453C0E8F1133F09F464C089C0DB
:103FF0001F708B2D8F71002321F00E94A525812F2A
:104000007CCE0E94C625812F26960FB6F894DEBF7F
:104010000FBECDBFDF91CF911F910F91FF90EF9019
:10402000DF90CF90BF900C94AD1D0023B1F02530F0
:1040300008F02EC18B2D8F7126960FB6F894DEBF37
:104040000FBECDBFDF91CF911F910F91FF90EF90E9
:10405000DF90CF90BF900C94EB25263008F018C16C
:10406000E9CF0023A9F08B2D8F7126960FB6F89417
:10407000DEBF0FBECDBFDF91CF911F910F91FF909B
:10408000EF90DF90CF90BF900C94A525002359F3BB
:104090008B2D8F7126960FB6F894DEBF0FBECDBF65
:1040A000DF91CF911F910F91FF90EF90DF90CF9014
:1040B000BF900C94C625002399F08B2D8F71269606
:1040C0000FB6F894DEBF0FBECDBFDF91CF911F9129
:1040D0000F91FF90EF90DF90CF90BF900C949025C0
:1040E00026960FB6F894DEBF0FBECDBFDF91CF91FD
:1040F0001F910F91FF90EF90DF90CF90BF900C94A5
:1041000086250023A9F0222309F4ADCF812F26961E
:104110000FB6F894DEBF0FBECDBFDF91CF911F91D8
:104120000F91FF90EF90DF90CF90BF900C948F1C79
:10413000222309F4ADCF812F26960FB6F894DEBF67
:104140000FBECDBFDF91CF911F910F91FF90EF90E8
:10415000DF90CF90BF900C94571D4B2D4F70612F67
:10416000C7010E940B0626960FB6F894DEBF0FBE5D
:10417000CDBFDF91CF911F910F91FF90EF90DF9016
:10418000CF90BF900C94AA24011182C09B2D9F70E8
:10419000492F50E04230510509F443C0C4F44115A1
:1041A000510571F14130510509F072C026960FB6E4
:1041B000F894DEBF0FBECDBFDF91CF911F910F915D
:1041C000FF90EF90DF90CF90BF900C94312D433053
:1041D0005105C1F14430510509F05AC0812F26968E
:1041E0000FB6F894DEBF0FBECDBFDF91CF911F9108
:1041F0000F91FF90EF90DF90CF90BF900C94832DA4
:1042000026960FB6F894DEBF0FBECDBFDF91CF91DB
:104210001F910F91FF90EF90DF90CF90BF900C9483
:104220001A2D26960FB6F894DEBF0FBECDBFDF91D4
:10423000CF911F910F91FF90EF90DF90CF90BF90A3
:104240000C944D2D26960FB6F894DEBF0FBECDBF51
:10425000DF91CF911F910F91FF90EF90DF90CF9062
:10426000BF900C94602D4B2D4F70612FC701269687
:104270000FB6F894DEBF0FBECDBFDF91CF911F9177
:104280000F91FF90EF90DF90CF90BF900C94D507E7
:1042900026960FB6F894DEBF0FBECDBFDF91CF914B
:1042A0001F910F91FF90EF90DF90CF90BF900895F6
:1042B0000E9408270E9418270E94DD260E943227AC
:1042C0000E94EE2A0E943D2A80E090E00E94711B2D
:1042D00080E090E00C94871B0E94F8260C945821F3
:1042E0000E94A026292F22952F7030E02C30310516
:1042F0004CF42A3031056CF422503109223031055A
:1043000088F407C02C30310549F02F30310531F0E9
:1043100009C0803E48F0803F29F406C093FB8827FF
:1043200080F9089580E0089581E00895CF93DF93A8
:1043300000D000D01F92CDB7DEB70F900F900F9036
:104340000F900F90DF91CF910895CF93DF9300D01E
:1043500000D000D0CDB7DEB726960FB6F894DEBFFA
:104360000FBECDBFDF91CF9108951F93CF93DF9301
:10437000C0917B0316E080917C03C81799F0D0E0D0
:104380001C9FF0011D9FF00D1124E358FC4F40814C
:10439000518162817381848195810E94A52121963A
:1043A000C770E9CFDF91CF911F9108954091AD0380
:1043B0005091AE036091AF037091B0038091B1034F
:1043C0009091B2030C94A5218091B20382958F70D5
:1043D00009F054C08091AF03882309F44FC0809145
:1043E0007B03A0917C036091AD037091AE0340917B
:1043F000B0035091B103B6E08A1709F43FC090E0D2
:1044000041155105C1F17F3F11F46F3FA1F1B89FF4
:10441000F001B99FF00D1124E358FC4F2181721374
:104420002AC02081621327C02281211124C0238148
:1044300034812417350710F421503109241B350B22
:10444000283C3105C0F42091B2032F7020612093E5
:10445000B20326E0289FF001299FF00D1124EE57AA
:10446000FC4F80818F70806180838DEA93E00E9491
:10447000B41D0C94B52101968770BECF0895CF92DC
:10448000DF92EF92FF920F931F93CF93DF93CDB7FD
:10449000DEB762970FB6F894DEBF0FBECDBF8C01BA
:1044A00085E0F801DE011D9601900D928A95E1F7F5
:1044B000D8014C9111965C91119712966C911297BC
:1044C0001396CD90DC9014973091AD037091AE03AC
:1044D0008091B0039091B103009709F46BC17F3FC5
:1044E00019F43F3F09F466C1E090AF03EE2009F4F0
:1044F000C0C02091B203C816D90628F0F601E81B07
:10450000F90BCF0104C0809590958C0D9D1DFF2463
:10451000F394883C910578F0F12C207F09F0C6C017
:104520007C2DD98AC88A89890E9496218DEA93E0D8
:104530000E94B41DB1C0822F807F09F046C0751360
:1045400014C0341312C0611110C02F702061209369
:10455000B2030E94D6218DEA93E00E94B41D80919F
:10456000B203D80115968C932EC0CD2819F15F3F68
:1045700011F44F3FF9F0F62E61111CC080917B03BE
:1045800020917C0336E0821709F45AC090E0389FEE
:10459000F001399FF00D1124E358FC4F718157133E
:1045A00006C07081471303C07281711103C0019668
:1045B0008770E9CFF62E662309F418C18091B20303
:1045C00081608093B203F12C11C1751308C03413BC
:1045D00006C0611104C08091B203D801C3C04D87E9
:1045E0005E878D859E856A8B0E9470216A898823EB
:1045F000E1F16623D1F12091B203822F82958F7071
:1046000090E0029774F08091AD039091AE0398878B
:104610008F831986DB86CA862C87CE0107960E9477
:10462000B41D86E0F801ADEAB3E001900D928A95E1
:10463000E1F70E94E4210E94D621FF24F394D6C022
:104640004D875E878D859E850E94A026292F229505
:104650002F7030E0223031050CF0BCC09F7009F0A3
:10466000B6C0805E883008F4C1C0C8010E94B41D85
:10467000E4CFC816D90608F453C0F601E81BF90BBD
:10468000CF01883C910508F450C0F12C7C2DD98ACB
:10469000C88A89890E949621EDEAF3E086E0DF016D
:1046A0001D928A95E9F70E94D621A0C0751314C007
:1046B000341312C0611110C08091B203F8018583D8
:1046C000C8010E94B41D86E0EDEAF3E0DF011D920F
:1046D0008A95E9F7FE2C8AC04D875E878D859E8579
:1046E0006A8B0E9470216A89882309F4BECF6623F1
:1046F00009F4BBCF2091B203822F82958F7090E096
:1047000002970CF48ECF8091AD039091AE039A8303
:1047100089831B82DD82CC822E83CE0101967FCFDE
:10472000809590958C0D9D1DACCFF62E662309F4D7
:104730009CCF75132EC034132CC02091B20320FDE2
:104740001FC0822F82958F70D9F0D80115962C93B7
:1047500015978F3049F08F5F982F9295907F822F19
:104760008F70892B15968C93C8010E94B41D86E02A
:10477000F801ADEAB3E001900D928A95E1F793CF8D
:1047800086E0F801ADEAB3E001900D928A95E1F779
:104790002DC04D875E878D859E850E947021811179
:1047A00040CF8091B20381608093B203C8010E9420
:1047B000B41D1CC0662309F458CF4D875E878D85D4
:1047C0009E850E947021882309F44FCF2ACF811142
:1047D00048CF0CC0243031050CF047CF9F7009F44E
:1047E00040CFF8019581907F09F03BCF8F2D6296E5
:1047F0000FB6F894DEBF0FBECDBFDF91CF911F91F2
:104800000F91FF90EF90DF90CF9008951F93CF937B
:10481000DF93CDB7DEB72C970FB6F894DEBF0FBE8F
:10482000CDBF4F83588769877A878B879C87CE0156
:1048300007960E943F22882369F08F8198852A85F8
:104840003B85232BF1F19F3F09F063C08F3F09F0B7
:1048500060C037C086E0FE013796DE0111960190F8
:104860000D928A95E1F76F817885EA85FB8530970F
:1048700041F17F3F11F46F3F21F120917C0330E043
:10488000C90101968770992740917B0350E08417F6
:10489000950709F447C069837A83FD83EC8396E02A
:1048A000929FD001939FB00D1124A358BC4FFE01DD
:1048B000319601900D929A95E1F780937C030E94C6
:1048C000B52116E080917B0390917C038917C1F19B
:1048D000189FC001112483589C4F0E943F228823B7
:1048E00079F1E0917B031E9FF0011124E358FC4F06
:1048F0004081518162817381848195810E94A521CB
:1049000080917B0390E001968770992780937B03C9
:10491000D9CF4F81588569857A858B859C850E9482
:10492000A521CFCF0E946C2110927C0310927B03B3
:10493000EDEAF3E086E0DF011D928A95E9F7C1CF49
:104940002C960FB6F894DEBF0FBECDBFDF91CF918E
:104950001F910895EF92FF920F931F93CF93DF93D0
:104960008C01009709F46CC0F12CEE24E394E8016B
:104970002196F8018491843740F4843008F051C0C6
:10498000813081F0823019F15BC0853709F444C071
:10499000A8F19CE7980F903708F052C08F770E94DB
:1049A000571D41C00E5F1F4FFE01C49180E28C0F66
:1049B000883048F4C7708E2D01C0880FCA95EAF779
:1049C0000E940B2714C08C2F0E948F1C2DC00E5FDD
:1049D0001F4FFE01C49180E28C0F883058F4C770DD
:1049E0008E2D01C0880FCA95EAF70E9411270E94F8
:1049F00032271AC08C2F0E94571D16C00E5F1F4F02
:104A0000FE01C491CC2381F08FE99FE00197F1F77B
:104A100000C00000C150F6CF0E5F1F4FFE01F490A2
:104A200003C00E948F1C8E018F2D882309F49FCF15
:104A3000EFE9FFE03197F1F700C000008150F5CFBA
:104A4000DF91CF911F910F91FF90EF9008950895FE
:104A50006093B7037093B8038093B9039093BA033C
:104A60000C9458210F931F930091B7031091B80332
:104A70002091B9033091BA03DC01CB01802B912B3B
:104A8000A22BB32B8093B7039093B803A093B903E1
:104A9000B093BA031F910F910C9458210F931F9359
:104AA0000091B7031091B8032091B9033091BA0374
:104AB000DC01CB0180239123A223B3238093B7038E
:104AC0009093B803A093B903B093BA031F910F91C9
:104AD0000C9458210F931F930091B7031091B803C2
:104AE0002091B9033091BA03DC01CB0180279127D3
:104AF000A227B3278093B7039093B803A093B90379
:104B0000B093BA031F910F910C9458211092B303E4
:104B10001092B4031092B5031092B6030C9458216E
:104B200041E050E060E070E004C0440F551F661F94
:104B3000771F8A95D2F74093B3035093B4036093E1
:104B4000B5037093B6030C94582141E050E060E047
:104B500070E004C0440F551F661F771F8A95D2F777
:104B60008091B3039091B403A091B503B091B603C3
:104B7000482B592B6A2B7B2B4093B3035093B403E0
:104B80006093B5037093B6030C94582141E050E054
:104B900060E070E004C0440F551F661F771F8A95C0
:104BA000D2F740955095609570958091B3039091A0
:104BB000B403A091B503B091B603482359236A23E7
:104BC0007B234093B3035093B4036093B503709376
:104BD000B6030C94582141E050E060E070E004C05E
:104BE000440F551F661F771F8A95D2F78091B30334
:104BF0009091B403A091B503B091B603482759270B
:104C00006A277B274093B3035093B4036093B503A3
:104C10007093B6030C9458210F931F930091B30324
:104C20001091B4032091B5033091B603DC01CB01A0
:104C3000802B912BA22BB32B8093B3039093B403BF
:104C4000A093B503B093B6031F910F910C94582114
:104C50000F931F930091B3031091B4032091B503F8
:104C60003091B603DC01CB0180239123A223B3232F
:104C70008093B3039093B403A093B503B093B603AA
:104C80001F910F910C9458210F931F930091B30320
:104C90001091B4032091B5033091B603DC01CB0130
:104CA00080279127A227B3278093B3039093B4035F
:104CB000A093B503B093B6031F910F910C945821A4
:104CC0000895CF92DF92EF92FF920F931F93CF93AD
:104CD000DF938C01C090B703D090B803E090B90384
:104CE000F090BA038091B3039091B403A091B503FF
:104CF000B091B603C82AD92AEA2AFB2ACFE1D0E02C
:104D0000D701C6010C2E04C0B695A7959795879537
:104D10000A94D2F780FF06C0B8018C2F0E942F0A98
:104D2000019721F4219760F780E001C08C2FDF917B
:104D3000CF911F910F91FF90EF90DF90CF9008954A
:104D4000CF93DF93EC010E946126BE010E942F0ADF
:104D5000DF91CF910895CB010E94A0260895209164
:104D60001D0230911E02F90132969FEF40E05191F1
:104D7000581789F09F3F19F4511101C0942F4F5FCC
:104D80004630A9F79F3F39F0F901E90FF11D97FD72
:104D9000FA9582830895089520911D0230911E0294
:104DA000F9013296285F3F4F9081981301C010821D
:104DB0003196E217F307C1F7089581E090E0E091A2
:104DC0001D02F0911E02E80FF91F10820196883033
:104DD0009105A9F708959091C603892B8093C60386
:104DE000089580959091C60389238093C603089502
:104DF0001092C60308959091C503892B8093C50333
:104E0000089580959091C50389238093C5030895E3
:104E10001092C50308959091C403892B8093C40315
:104E2000089580959091C40389238093C4030895C5
:104E30001092C40308958093BB0308951092BB039E
:104E4000089580911D0290911E02FC0131969C01F3
:104E5000285F3F4F80E0919191118F5FE217F30738
:104E6000D1F70895E0911D02F0911E028091C603D2
:104E70008083E0911D02F0911E0290818091C50314
:104E8000892B8083E0911D02F0911E029081809118
:104E9000C403892B80838091BB03882361F0E09158
:104EA0001D02F0911E029081892B80830E94212790
:104EB00081111092BB0380911D0290911E020C94EF
:104EC0005B1B8091E803843039F11092C80320E421
:104ED00088E190E00FB6F894A895809360000FBE2B
:104EE0002093600080E00E94D20580E00E940A0BBF
:104EF00083B7817F846083BF83B7816083BF7894E9
:104F0000889583B78E7F83BF88E10FB6F89480932E
:104F10006000109260000FBE089508950895CF9329
:104F200080E00E94D2050E948D270E94AD0C0E9455
:104F30008E27C0E08C2F0E94E60D892B29F4CF5FCD
:104F4000C530C1F780E001C081E0CF9108950E9493
:104F50006C2180E00E94D2050E94092D0E944F1B07
:104F60000C940A0B1F920F920FB60F9211248F937D
:104F70009F93AF93BF938091C803811113C0809119
:104F8000C9039091CA03A091CB03B091CC03419681
:104F9000A11DB11D8093C9039093CA03A093CB03B5
:104FA000B093CC03BF91AF919F918F910F900FBEA3
:104FB0000F901F90189582E084BD93E095BD9AEF05
:104FC00097BD80936E0008952FB7F8948091C90320
:104FD0009091CA03A091CB03B091CC032FBF089549
:104FE000CF92DF92EF92FF920F931F932FB7F89417
:104FF0004091C9035091CA036091CB037091CC03D7
:105000002FBF6A017B01EE24FF248C0120E030E0F9
:10501000C016D106E206F30610F4415051099A0178
:10502000281B390BC9011F910F91FF90EF90DF9062
:10503000CF9008951F920F920FB60F9211248F9365
:105040009F93AF93BF938091C9039091CA03A0919E
:10505000CB03B091CC030196A11DB11D8093C90370
:105060009093CA03A093CB03B093CC03BF91AF91AD
:105070009F918F910F900FBE0F901F9018950E94D7
:105080004C18F8942FEF87EA91E621508040904029
:10509000E1F700C0000087E090EBDC018093F303B0
:1050A0009093F403A093F503B093F6039CE088E19A
:1050B0000FB6F894A895809360000FBE909360009F
:1050C000FFCF0E949B28811102C00E9477280E9476
:1050D000A6288093C7030E94B3288093F1030E94FF
:1050E000AA28682F70E080E090E00C9428256DEEEF
:1050F0007EEF80E090E00E94BC3160E082E090E0D2
:105100000E94AA3160E083E090E00E94AA3160E052
:1051100084E090E00E94AA3160E085E090E00E9487
:10512000AA3160E086E090E00E94AA316FEF87E04C
:1051300090E00C94AA3180E090E00E94A43121E03C
:105140008D3E9E4F09F020E0822F089582E090E08E
:105150000C949C3183E090E00C949C31682F83E0A8
:1051600090E00C94AA3184E090E00C949C31682F7C
:1051700084E090E00C94AA3186E090E00C949C319D
:10518000682F86E090E00C94AA3187E090E00C94C0
:105190009C31682F87E090E00C94AA318091CF0376
:1051A00080FF0BC06091220285E0689FB00111244E
:1051B00075956795759567952BC081FF09C06091BE
:1051C000220285E0689FB00111247595679520C083
:1051D00082FF07C06091220285E0689FB001112420
:1051E00017C09091D0039923D1F0609121029617B6
:1051F00088F72091220285E0289F90011124929F38
:10520000A001939F500D112470E0CA010E948231C9
:105210006038710540F46115710539F002C065E030
:1052200070E0862F08958FE7089581E008958091BA
:10523000CF0380FF08C06091200270E075956795EC
:105240007595679521C081FF06C06091200270E0CE
:105250007595679519C082FF04C06091200270E0C7
:1052600010C09091D0039923C1F060911F0296174E
:10527000A0F780912002899FC001112470E00E9454
:1052800082316038710528F46115710521F0862F8F
:1052900008958FE7089581E0089561E070E0F4CF0C
:1052A000803F21F40E94CE28819504C0813F29F4DB
:1052B0000E94CE288093D3030895823F21F40E9458
:1052C000CE28819504C0833F29F40E94CE28809384
:1052D000D2030895893F19F40E94172905C08A3F17
:1052E00031F40E94172981958093D40308958B3F50
:1052F00021F40E941729819504C08C3F29F40E9453
:1053000017298093D5030895843F21F48091D10318
:10531000816017C0853F21F48091D103826011C064
:10532000863F21F48091D10384600BC0873F21F434
:105330008091D103886005C0883F31F48091D1030A
:1053400080618093D10308958D3F21F48091CF0334
:1053500081600BC08E3F21F48091CF03826005C035
:105360008F3F29F48091CF0384608093CF03089509
:10537000803F39F48091D30387FF6CC01092D30330
:1053800069C0813F29F48091D3031816BCF362C031
:105390009091D203823F29F497FF5CC01092D20310
:1053A00059C0833F19F41916CCF354C0893F41F416
:1053B0008091D40318160CF04DC01092D4034AC04B
:1053C0008A3F29F48091D40387FF44C0F6CF8B3FF6
:1053D00039F48091D50387FF3DC01092D5033AC0C0
:1053E0008C3F29F48091D5031816BCF333C0843F59
:1053F00021F48091D1038E7F17C0853F21F48091E5
:10540000D1038D7F11C0863F21F48091D1038B7F22
:105410000BC0873F21F48091D103877F05C0883F6F
:1054200031F48091D1038F7E8093D10313C08D3FDF
:1054300021F48091CF038E7F0BC08E3F21F48091A9
:10544000CF038D7F05C08F3F29F48091CF038B7FE1
:105450008093CF038091D20381110EC08091D3033A
:1054600081110AC08091D403811106C08091D503B7
:10547000811102C01092D003089581ED93E00E9443
:10548000661B0E94E4279093CE038093CD0308957A
:105490001F93CF93DF938091CD039091CE030E9411
:1054A000F027AC019091D003992321F020912302A1
:1054B00030E006C0209124028AE0289F9001112448
:1054C0004217530708F486C08091D203C091D303DA
:1054D000D091D4031091D503811107C0C11176C0BA
:1054E000D11174C0111172C075C09F3F19F09F5F38
:1054F0009093D003181624F40E94CE288093D203F0
:105500008091D20387FF05C00E94CE2881958093A9
:10551000D2031C1624F40E94CE288093D3038091DA
:10552000D30387FF05C00E94CE2881958093D303C3
:105530006091D203662339F1C091D303CC2319F1D2
:10554000772767FD7095872F972F0E94A42E23E35E
:1055500033E343E35FE30E94B42F0E94712E609314
:10556000D2036C2F772767FD7095872F972F0E94A6
:10557000A42E23E333E343E35FE30E94B42F0E94AE
:10558000712E6093D3031D1624F40E941729809373
:10559000D4038091D40387FF05C00E941729819509
:1055A0008093D403111624F40E9417298093D50305
:1055B0008091D50387FF05C00E94172981958093AC
:1055C000D503DF91CF911F910C943D2A9F3F09F0A5
:1055D0008ECF96CFDF91CF911F910895E1EDF3E04B
:1055E00085E0DF011D928A95E9F71092D0031092B1
:1055F000CF030895833081F128F4813059F082304F
:10560000D1F00895853009F449C0B8F1863009F425
:1056100056C0089580912402262F30E0280F311DB6
:105620002F3F310524F4680F6093240208958FEF13
:1056300080932402089580912302262F30E0280FC2
:10564000311D2F3F310524F4680F60932302089524
:105650008FEF80932302089580912202262F30E05D
:10566000280F311D2F3F310524F4680F609322026B
:1056700008958FEF80932202089580912102262FB2
:1056800030E0280F311D2F3F310524F4680F60935F
:10569000210208958FEF80932102089580912002C6
:1056A000262F30E0280F311D2F3F310524F4680FDD
:1056B0006093200208958FEF8093200208958091D7
:1056C0001F02262F30E0280F311D2F3F310524F413
:1056D000680F60931F0208958FEF80931F02089553
:1056E000833011F128F4813049F0823091F008952F
:1056F000853081F120F18630C1F108958091240236
:10570000681720F4861B80932402089510922402C7
:10571000089580912302681720F4861B809323024A
:10572000089510922302089580912202681720F4B0
:10573000861B809322020895109222020895809180
:105740002102681720F4861B80932102089510928D
:105750002102089580912002681720F4861B80930F
:105760002002089510922002089580911F02681768
:1057700020F4861B80931F02089510921F02089543
:105780000F931F938732D8F58E3108F087C08E3083
:1057900009F471C098F4873009F45BC08B3009F4C8
:1057A00091C0863009F095C08091C703817F8E7FBC
:1057B0008093C70381E08093D7038CC0863109F4BE
:1057C00081C068F4803109F084C08091C70383FBF5
:1057D000222720F991E0922790FB83F955C0893167
:1057E00009F470C08B3109F074C08091C70381FB4C
:1057F000222720F991E0922790FB81F945C0883358
:1058000009F460C050F4893209F45EC0853309F4AC
:105810005BC0873209F458C05CC0833409F454C0BB
:1058200028F48A3308F455C0895339C0883409F004
:1058300050C00E946C210E94B2070FEF13ED20E3CD
:10584000015010402040E1F700C000000E943F28B6
:1058500039C09091C703892F8095817080FB90F9A2
:1058600029F0966098609093C70334C0997F977F22
:105870009093C70327C08091C70382FB222720F99A
:1058800091E0922790FB82F98093C7039923D1F08E
:105890008091C70381608093C70314C08D5141E09C
:1058A00050E060E070E08A019B0104C0000F111F0E
:1058B000221F331F8A95D2F7C901B8010E942825FB
:1058C0000E946C2181E006C061E070E080E090E021
:1058D000F5CF80E01F910F91089580E0089580E05A
:1058E0000895CF93C82F8091D703813069F018F0C5
:1058F0008230C9F184C0E0911D02F0911E028081C6
:10590000823209F07EC007C0E0911D02F0911E02B4
:105910008081823261F48C2F0E946D2C811104C031
:105920008C2F0E94C02B1DC081E090E01AC08C2FEC
:105930000E946F2C811114C0C43179F048F4CB302F
:1059400079F0C03109F061C082E08093D70308C0CC
:10595000C93219F0C83321F058C01092D70355C08E
:1059600081E0817054C0C93291F120F5C43179F1E0
:10597000B0F4C73009F047C08EE18093240282E37F
:10598000809323028AE08093220284E180932102A3
:1059900088E08093200288E280931F0234C0CE51B9
:1059A000C63088F5EC2FF0E0E451FD4F8081809304
:1059B000D60329C0CE34E9F020F4CB3421F56AE0D7
:1059C00013C0C13579F0C235F1F461E00DC08091AA
:1059D000D603882319F01092D60315C081E0809376
:1059E000D70315C061E006C08091D6030E94FA2A51
:1059F0000AC06AE08091D6030E94702B04C0109206
:105A0000D70380E004C081E002C080E0AACFCF913C
:105A100008950E949B28811102C00E9477280E944D
:105A2000BC288093F20380FF02C0869501C080E00D
:105A30000C94D2058091F203982F9695292F30E08F
:105A4000233031054CF49F5F990F8170892B816061
:105A50008093F2030E94C0288091F20386950C94F3
:105A6000D2058091F203982F969591F09158990F55
:105A70008170892B8093F2038E7F91E009F490E08E
:105A80008091F20390FB80F98093F2030E94C0287A
:105A90008091F20386950C94D2058091F203982FA1
:105AA000909590FB80F98093F2030E94C02880912A
:105AB000F20380FF02C0869501C080E00C94D205FD
:105AC0009091F203892F86958F5F8F779170843044
:105AD00028F4880F892B8093F20302C09093F2037D
:105AE0008091F2038E7F91E009F490E08091F203BF
:105AF00090FB80F98093F2030E94C0288091F2030A
:105B000086950C94D2052091F203922F96958927C1
:105B1000982F990F822F8170892B8093F2038E7FAB
:105B200091E009F490E08091F20390FB80F980937A
:105B3000F2030E94C0288091F20386950C94D2054E
:105B40005058BB27AA270ED0D1C1C2D130F0C7D13F
:105B500020F031F49F3F11F41EF4B7C10EF4E0952C
:105B6000E7FB9FC1E92FD3D180F3BA176207730710
:105B70008407950718F071F49EF5EBC10EF4E095DB
:105B80000B2EBA2FA02D0B01B90190010C01CA01F7
:105B9000A0011124FF27591B99F0593F50F4503EA2
:105BA00068F11A16F040A22F232F342F4427585F94
:105BB000F3CF469537952795A795F0405395C9F7AC
:105BC0007EF41F16BA0B620B730B840BBAF0915064
:105BD000A1F0FF0FBB1F661F771F881FC2F70EC003
:105BE000BA0F621F731F841F48F4879577956795D6
:105BF000B795F7959E3F08F0B3CF9395880F08F0BF
:105C00009927EE0F97958795089527D108F481E09D
:105C100008950CD06BC163D140F05AD130F021F41B
:105C20005F3F19F03EC1511195C14FC170D198F33A
:105C30009923C9F35523B1F3951B550BBB27AA270D
:105C400062177307840738F09F5F5F4F220F331F7F
:105C5000441FAA1FA9F333D00E2E3AF0E0E830D04B
:105C600091505040E695001CCAF729D0FE2F27D04E
:105C7000660F771F881FBB1F261737074807AB071C
:105C8000B0E809F0BB0B802DBF01FF2793585F4F91
:105C90002AF09E3F510568F004C15CC15F3FECF300
:105CA000983EDCF3869577956795B795F7959F5F56
:105CB000C9F7880F911D9695879597F90895E1E0AA
:105CC000660F771F881FBB1F621773078407BA0709
:105CD00020F0621B730B840BBA0BEE1F88F7E09564
:105CE000089504D06894B11135C1089518D188F091
:105CF0009F5790F0B92F9927B751A0F0D1F0660FB8
:105D0000771F881F991F1AF0BA95C9F712C0B130D2
:105D100081F01FD1B1E008951CC1672F782F88272B
:105D2000B85F39F0B93FCCF3869577956795B39511
:105D3000D9F73EF490958095709561957F4F8F4F80
:105D40009F4F0895E89409C097FB3EF49095809585
:105D5000709561957F4F8F4F9F4F9923A9F0F92F31
:105D600096E9BB279395F695879577956795B795AF
:105D7000F111F8CFFAF4BB0F11F460FF1BC06F5F95
:105D80007F4F8F4F9F4F16C0882311F096E911C0A7
:105D9000772321F09EE8872F762F05C0662371F0C8
:105DA00096E8862F70E060E02AF09A95660F771FDC
:105DB000881FDAF7880F9695879597F9089588D008
:105DC00018F011F08CD038F480C0C4C0E92F9FD0F7
:105DD000B0F35523C9F3E7FB6217730784079507F0
:105DE000A8F199F3E92FFF2788232AF03197660F4E
:105DF000771F881FDAF7952F5527442332F09150EB
:105E00005040220F331F441FD2F7BB27E91BF50B6D
:105E1000621B730B840BB109C1F222F4620F731F72
:105E2000841FB11D31972AF0660F771F881FBB1F93
:105E3000EFCF915050405AF041F0882332F0660F76
:105E4000771F881F91505040C1F7939530C08695B9
:105E5000779567959F5FD9F7F8CF990F0008550F91
:105E6000AA0BE0E8FEEF16161706E807F907C0F0E0
:105E700012161306E407F50798F0621B730B840BE8
:105E8000950B39F40A2661F0232B242B252B21F4C2
:105E900008950A2609F4A140A6958FEF811D811D62
:105EA000089597F99F6780E870E060E008959F3F4C
:105EB00031F0915020F4879577956795B795880FC5
:105EC000911D9695879597F908959FEF80EC089519
:105ED00000240A94161617061806090608950024C9
:105EE0000A9412161306140605060895092E039443
:105EF000000C11F4882352F0BB0F40F4BF2B11F4B7
:105F000060FF04C06F5F7F4F8F4F9F4F089557FD15
:105F10009058440F551F59F05F3F71F04795880F17
:105F200097FB991F61F09F3F79F0879508951216AE
:105F300013061406551FF2CF4695F1DF08C016165A
:105F400017061806991FF1CF86957105610508940B
:105F50000895E894BB2766277727CB0197F9089522
:105F60007CDF08F48FEF08950BD0C0CFB1DF28F0AD
:105F7000B6DF18F0952309F094CFA7CF1124EACF0C
:105F8000C6DFA0F3959FD1F3950F50E0551F629F98
:105F9000F001729FBB27F00DB11D639FAA27F00D82
:105FA000B11DAA1F649F6627B00DA11D661F829FA9
:105FB0002227B00DA11D621F739FB00DA11D621F8E
:105FC000839FA00D611D221F749F3327A00D611DAB
:105FD000231F849F600D211D822F762F6A2F11248D
:105FE0009F5750408AF0E1F088234AF0EE0FFF1FE0
:105FF000BB1F661F771F881F91505040A9F79E3F17
:10600000510570F04ECFA6CF5F3FECF3983EDCF326
:10601000869577956795B795F795E7959F5FC1F753
:10602000FE2B880F911D9695879597F90895FA0193
:10603000EE0FFF1F30962105310599F161157105AD
:1060400061F48038BFE39B0749F16894903881057B
:1060500061F08038BFEF9B0741F0992342F5FF3F85
:10606000E1053105210511F1E8940894E795D9017E
:10607000AA2329F4AB2FBE2FF85FD0F310C0FF5F27
:1060800070F4A695E0F7F73950F019F0FF3A38F4BC
:106090009F779F930CD00F9007FC905808953EF087
:1060A00014CF60E070E080E89FE308954FE79F77AA
:1060B0005F934F933F932F939ED02F913F914F919A
:1060C0005F9152DF05C019F40EF0EBCE42CFFDCE4A
:1060D00026DFC8F39638C0F707F80F92E8942BE351
:1060E0003AEA48EB5FE74EDF0F920F920F924DB7FF
:1060F0005EB70F92C0D0E8EFF0E016D04F915F91FD
:10610000EF91FF91E595EE1FFF1F49F0FE57E06804
:106110004427EE0F441FFA95E1F74195550B32D015
:106120000F9007FE26C00895DF93CF931F930F9320
:10613000FF92EF92DF927B018C01689405C0DA2E0A
:10614000EF011EDFFE01E894A5912591359145915F
:106150005591AEF3EF0106DDFE019701A801DA9437
:1061600079F7DF90EF90FF900F911F91CF91DF9122
:1061700008959B01AC0160E070E080E89FE349CDA9
:1061800090CE95CECCDEE8F39923D9F3940F511D30
:10619000BBF39150504094F059F0882332F0660FD1
:1061A000771F881F91505040C1F79E3F510544F71B
:1061B000880F911D9695879597F908955F3FACF0EC
:1061C000983E9CF0BB27869577956795B79508F420
:1061D000B1609395C1F7BB0F58F711F460FFE8CF9A
:1061E0006F5F7F4F8F4F9F4FE3CFB4CE0EF05FCEE8
:1061F0006CCE689456CE93DEC8F39923D1F3C6F3E0
:10620000DF93CF931F930F93FF92C92FDD2788232E
:106210002AF02197660F771F881FDAF720E030E019
:1062200040E85FEB9FE3883920F0803E30F0219614
:106230008F7787DCE0E2F1E003C083DCEDE4F1E09E
:1062400073DF8B01BE01EC01FB2E6F577109759551
:10625000771F880B990B78DD28E132E741E35FE394
:106260008FDEAF2D9801AE01FF900F911F91CF915E
:10627000DF9178DC3BCEFA01DC01AA0FBB1F9B014A
:10628000AC01BF5728F422273327442750781FC07A
:10629000B75188F4AB2F0024469537952795011CFC
:1062A000A395D2F3002069F0220F331F441FB3954A
:1062B000DAF30DD045CC61307105A0E88A07B94604
:1062C00030F49B01AC0166277727882790783096B9
:1062D00021F020833183428353830895AA1BBB1B83
:1062E00051E107C0AA1FBB1FA617B70710F0A61BD6
:1062F000B70B881F991F5A95A9F780959095BC01F7
:10630000CD01089597FB072E16F4009407D077FD72
:1063100009D00E946E3107FC05D03EF4909581951E
:106320009F4F0895709561957F4F0895EE0FFF1F61
:106330000590F491E02D0994F999FECF92BD81BDAD
:10634000F89A992780B50895A8E1B0E042E050E0BE
:106350000C94C431262FF999FECF92BD81BDF89AD5
:10636000019700B4021639F01FBA20BD0FB6F89499
:10637000FA9AF99A0FBE08950196272F0E94AB3121
:106380000C94AA31DC01CB01FC01F999FECF06C0C7
:10639000F2BDE1BDF89A319600B40D9241505040E3
:0863A000B8F70895F894FFCF4F
:1063A8000C52D02445000000410000DC44000000ED
:1063B8004152D0A4440000404100005C4400000069
:1063C8004148F17644000000415C978A440000008F
:1063D800411FD592440000004152D0A4440000005F
:1063E800415CFFB844000000410AA7CF4400000008
:1063F800410000DC44000000410AA7CF440000002F
:10640800410000DC44000000410000000000008062
:106418004052D024450000404100000000000080A8
:10642800400AA74F45000040410AA7CF440000009A
:10643800410000DC44000000410000000000008032
:106448004052D024450000004100000000000080B8
:10645800405CFF384500000041000000000000805B
:106468004052D02445000000410AA7CF4400000054
:10647800410000DC440000004100000000000080F2
:106488004052D024450000804110F176440000A01D
:106498004112F1F6440000004141909B440000A0E5
:1064A8004112F1F64400000041050000003F0000E1
:1064B800C8427B140915E614B2147E1401BC0328E3
:1064C80008140A321E000002000400050007000933
:1064D800000B000C000E001000110013001500172F
:1064E8000018001A001C001D001F002100230024B2
:1064F800002600280029002B002D002F0030003234
:106508000034003500370039003B004200450025C3
:106518000026004300610060002000370064006529
:1065280000660067004400460024004700314980A7
:106538003F5D8B803FF8BF803FCAE1803F73ED80AD
:106548003FCAE1803FF8BF803F5D8B803F31498083
:106558003F0000803FF16D7F3F75EA7E3F4C827EB1
:106568003F833F7E3F84287E3F833F7E3F4C827E31
:106578003F75EA7E3FF16D7F3F0000803F3F4D361B
:10658800B90A6C0A360AE209FB09140A0102030473
:06659800050607080900DA
:00000001FF

@ -0,0 +1,1880 @@
:020000020000FC
:047000000C948D3E21
:047028000C94B73DD0
:10702F0012010002FF010020EB03F42F0000010208
:10703F00030109021200010100803209040000005F
:10704F00000000000C03410054004D0045004C00AF
:10705F001603410054006D00330032005500340018
:10706F004400460055000C0331002E0030002E0066
:10707F0030000403090416010C0100000C0000018C
:02708F006C7F14
:1070920012BD01BDF89A00B5089501E00895F9996D
:1070A200FECF12BD01BD20BDFA9AF99AF6CFF99929
:1070B200FECF0C944938F80104910895F8013491F7
:1070C20031962491890108950091610000930C0189
:1070D20000E80093610001E00093610005BF02E057
:1070E20005BF0C9486380091D70001600093D70049
:1070F200A89507EF04BF0091600000610093600053
:1071020000E00093600001E008950E94AA3D0E9401
:10711200B53DFDCF0CD00F7708D0006806D00061D6
:1071220004D0016028D0789408950093D80000918B
:10713200D8000895FCDF00621ED04CD009B500FFD4
:10714200FDCFF5DF0F7D17D00091E0000E7F009399
:10715200E0000091E000077F0093E0000091E20070
:1071620001600093E2000091E20008600093E200F7
:1071720078940C94743B0093D800089500910D010B
:10718200002359F40091D90000FF07C0D0DF006846
:10719200F2DF01E000930D01CDDFE0E2F2E00081D9
:1071A200018100FF0DC0008111811E7F11830083C8
:1071B20001E00093EA0000E00093EA0000931E025F
:1071C20000E00093E9000091E80003FF02C00E9482
:1071D200F23B0895A89539D000E40093600000E0E6
:1071E200009381000093800010E0009385000093DB
:1071F200840001E006BB00918100036000938100DE
:107202000091600007FFFCCF00E80093600010933C
:107212008100A89507EF04BF18D010936000209159
:1072220084003091850010938100109380001093A8
:1072320085001093840001E006BB2D3D354010F01F
:1072420002E101C002E009BD089500916000006101
:107252000093600008950E94AD3E239741D100E063
:1072620000930901B5D104811581012B51F437D165
:1072720000910701002309F4B9C000E0009307015F
:10728200B5C058D102FFFDCF37D1068335D1009367
:107292000F0132D1009310012FD1009311012CD193
:1072A2000093120129D10093130102852091130149
:1072B20030911201409111015091100116811A95DD
:1072C20041F01250A9F01A9599F11A9509F473C078
:1072D2008BC010910F01113011F411E001C010E0C8
:1072E200138799D00C3F11F414D17FC077D17DC0A0
:1072F20092D010910F01112329F01A9549F01A9595
:10730200A9F073C010E013870C3F09F06EC0ECCFF8
:1073120056D103C04CD109F468C00D911C9144D1DF
:107322000F3FC1F305E0009309015FC011E0EBCF0D
:10733200D2D029F00250E1F10A9541F056C0FDD0B9
:107342000E94A33F0FEF00930A014FC0552319F08B
:107352005A9579F04AC04ED00DEF04BF74D0EAD0EE
:1073620003FFFDCF67D051D04AD008E00093600000
:10737200FFCF40D068D0DED003FFFDCF5BD03FD03F
:1073820044D00FEF1FE004C009811A810150104060
:1073920009831A8309811A81012BB1F700E800934E
:1073A200610000910C01009361000C940000FFCF7A
:1073B20001E003871AC08FD019F00A9539F015C081
:1073C200535098F4BAD002E000870FC0505339F0FE
:1073D2005A9541F05F52B1F35A95A1F306C002E00B
:1073E2000883F0CF01E0FCCFA8D079D02396E4E067
:1073F2000C94BA3E01E005BF00E005BF089500917C
:10740200D8000F770093D800089509B50D7F09BD04
:1074120000E009BD08955183408333832283109194
:10742200E8001B7F1093E8001091E8001F7710938B
:10743200E80008955DD053D0F8940091E000016017
:107442000093E000089579D04AC0219749D0009175
:107452000601035019F00250B9F00BC03CD021F0E4
:107462000A9559F00A9529F400910A010C3F19F482
:1074720050D02196089567D0FCCF0091010100936E
:10748200F100009100010AC01091100124D019F0FE
:107492000A9549F0EECF135018F400E00093F10082
:1074A2001ED044D0E6CF105339F01A9539F01F524E
:1074B20041F01A9541F0F4CF08E5F0CF00E006D094
:1074C200EDCF02E0FCCF04E001D0E8CF10E020E0F5
:1074D20030E00C94113F00910F010023089521C068
:1074E2000BD008D007D00093040106D00093050109
:1074F20021D00BC000D008830091F10008950091C3
:10750200EB0000620093EB0015D0077F0093E800C8
:107512000895F5DF02E00093080103E000930901FA
:10752200089559D007D000FFFDCF089503D002FF80
:10753200FDCF03C00091E8000895FCDF0B7FE6DF7A
:10754200F9DF0F77E3CF0E94AC3E42D038D006C0BD
:107552002BD00093F1002BD059F43DD0082F092BEA
:10756200A9F0E8DF02FD12C0E5DF00FFFDCF4424F1
:10757200042D4394003289F300910B0100230D91F5
:107582001C9131F311970E945838E3CFD3DF00FFEB
:10759200FDCF21D0CFDF00FFFDCFCCDF02FFFDCF3B
:1075A200CCDFE5E00C94B93E11970C945C380D9158
:1075B2001C910F5F1F4F1C930E93019708958281B8
:1075C200938100811181801B910B0196DF01089547
:1075D200E0E0F1E00895AEDF0E7F98CF0E94A93E71
:1075E200F7DF80819181A081B181AF710481158122
:1075F20000521040048315830AC000910B0100233E
:1076020031F4A301920103E911E00E943B3F47D00C
:10761200B8F1662477242C0111C06EDFF301ED5618
:10762200FE4F008301E0600E00E0701E01960091A3
:10763200F200002311F033D0B8F47FDF30D0E8F24B
:10764200F301B096E238F040C0F674DF02FFFDCFDE
:107652000091F200BDDF24813581201B304024835C
:107662003583E5CF49DFAA95AA23E1F700910B0103
:10767200013099F62091F1008C010E945038D6CF4A
:1076820004811581012B21F055DF02FFFDCF55DF6B
:10769200A2DF50DF00FFFDCFE8E00C94B63EE0E051
:1076A200F1E0028113810817190708952091EB0078
:1076B20021602093EB000093EC000091ED0002703A
:1076C200012B0093ED000091ED0002600093ED00AC
:1076D2001091EE00012F000F00E0001F0895412FCE
:1076E2000093E900089500E009D000FD05C000E024
:1076F200F7DF10E202E0DACF00E00895F1DF009157
:10770200EB0008950F770132A9F5112369F11A955B
:1077120059F01A9561F01A9569F01A95F9F01A95CF
:10772200C1F01A95D9F024C00E942C3920C00E94C1
:10773200263A1DC029D00091090123D001E01FD0B3
:1077420020D0009108011BD00E94923A0E94973AE1
:107752000EC01AD00091080114D007C002E00093B5
:10776200080100E0009309010FD00E94923A03C081
:107772000E94803A02C001E0089500E0089501D01D
:1077820000E00093F10008950091E800077F009364
:10779200E800089508950350F9F4112339F01A9579
:1077A20051F01A9581F01A9599F016C004E016D09E
:1077B20001E810E703C011D003E510E7E7E1F2E0CA
:1077C20000831183D8CF06E109D00FE510E7F6CF89
:1077D20004D005E710E7F2CFD0CF0CE000931A02F5
:1077E200089527D120D100931D02E1D0212F11232A
:1077F20029F12A95E9F02250F1F0225099F02A95C8
:1078020049F0225061F02A9581F02A95E1F02A95FB
:10781200E9F023C0003809F44FC00C94833B0038D0
:10782200E1F7C8C00023C9F71EC00023B1F72DC07D
:10783200033098F744C1033080F70BC1003868F376
:10784200033858F7C9C0013841F77BC1013051F400
:10785200FCD0BFD000FD06C0FCCF0E94833B0023BA
:1078620009F41ED008951091E3001078DCD00F7750
:10787200012B0093E300E9D0ACD000FFFDCF0091D3
:10788200E30000680093E300089591D0123040F4C1
:107892000FD010931E02DAD000911E020C94CB3B43
:1078A2000091EB0001D004C000620093EB00089548
:1078B2000091E800077FC0C0BA93AA93229700E024
:1078C2000093190274D0AFD0202F2A9519F02A956F
:1078D200E9F022C002E100931A020FE210E7E7E1A9
:1078E200F2E0008311839DD008839DD00983E0DFFD
:1078F20000911A0210E02881398102171307A8F4B7
:107902000F7181F401E00093190211C002E10093AA
:107912001A0201E410E7E3CF0E94CC3B002319F7DF
:107922008ED040C01093190202C020931A027ED05A
:10793200A7E1B2E001C08AD000911A02002309F146
:1079420048D004FD1EC045D000FD03C042D004FF54
:10795200FACF10E0012F1395003281F0ED91FC91E6
:107962001197049133D02D913C912F5F3F4F3C935F
:107972002E93FD0103810A95038361F72AD004FF48
:10798200DACF00911902013039F423D004FD04C08A
:1079920020D000FFFDCF5AD01CD004FFFDCF46D02F
:1079A20018D00B7F49D02296A991B99108951091D0
:1079B200F10008957DDF00911E0208D047D009D062
:1079C2000F773AD006D002FFFDCFBFC00093F1007F
:1079D20008950091E800089524D010911D021058D6
:1079E20029F01A9589F01A9591F019C061DF00917A
:1079F2001C02ECDF00E0EADF29D0EBDF02FFFDCF63
:107A020018D0E7DF0F770CC053DF00E0F2CF51D080
:107A12000F7710E0F801E55EFD4F0081EACF0FD04D
:107A22000BC001D000D00091F1000895D2DF0F7E8B
:107A320003C00091E8000B7F0093E80008950091D5
:107A4200EB0032DFC6DF077F089532DFC2DF0E7F31
:107A5200F3CF00911D02002329F00A9509F10A953E
:107A620031F01EC0E0DF0A9561D0D9F41AC061D0AE
:107A7200B9F4D9DF0F7711F416D01BD00093E900C7
:107A82001091EB0010FF0BC00ED010E01093E90034
:107A920021E0F801E55EFD4F20834FD003C042D0C4
:107AA20045D0CFDFC9CF1091EB0010621093EB00ED
:107AB20008951091E800177F1093E800089500914F
:107AC2001D02002311F4AFDF02C0013011F4B7DF51
:107AD200B3CF023031F52DD019F52091F1002F7777
:107AE2002093E90023D000FF19C081F01FD000616C
:107AF200DCDE01E010E0422F0E949F3E0093EA008C
:107B020000E00093EA0012D00860CFDE0BD030E034
:107B1200F901E55EFD4F008310D0DACF03D0D7CF55
:107B2200BFDE089500E00093E90008950091EB00A4
:107B3200089579DF3CDF00230895BADE4ADF0E7F25
:107B4200089583DF46DF02FFFDCF73DF42DF0F7749
:107B520073CF0091D70001600093D7000E948B3849
:107B620000E000931F0208950C94BF388A93FA93A1
:107B7200EA933A922A921A920A927A936A935A93BF
:107B82004A933A932A931A930A938FB70091DA0091
:107B920000FF24C00091D80000FF20C00EEF009328
:107BA200DA000091D90000FF11C001E000930D013D
:107BB200ABD0026096D09AD00860A2D00E949B38C7
:107BC2000091E0000E7F0093E00008C000E0009307
:107BD2000D0100931E0298D0046083D07FD002FF73
:107BE20005C084D002FF02C00BEF75D077D000FF32
:107BF2001BC07CD000FF18C001E000930E016AD0C8
:107C020083D000626ED00EEF6FD0006179D06ED05B
:107C12000F7D76D00091D80000620093D80009B59C
:107C22000D7F09BD00E009BD59D004FF20C05ED020
:107C320004FF1DC009B500FD05C00E94EB3809B55F
:107C420000FFFDCF0091D8000F7D0093D80042D0F5
:107C520000910E01002359F04CD00FEE45D00F7E5B
:107C620052D000643ED042D001604AD042D036D0D9
:107C720005FF0FC03BD005FF0CC000E000930E01D2
:107C820035D00F7E3DD00FED2FD00F7D3CD0006858
:107C920028D024D003FF0DC029D003FF0AC000E082
:107CA20000931F0207EF17D00E94743B2DD0116082
:107CB20018D08FBF09911991299139914991599100
:107CC200699179910990199029903990E991F991E6
:107CD200899118950FEE0093E10008950091E1005B
:107CE20008951183008308950093E1000091E2005A
:107CF20008950091E200006203D00091E200086062
:107D02000093E2000895FCDFE0E2F2E000811181DD
:107D1200089500008895FECF01E60DBF02E00EBF78
:107D2200C2EED2E00E947438002311F00E94D33ECA
:107D32000E9465380E948A3E0C948A3E4A951AF047
:107D4200000F111FFBCF0895BA92AA929A928A92BB
:107D52007A926A925A924A92BA93AA939A938A937D
:107D62000895BB84AA84998488847F806E805D8014
:107D72004C80BB81AA8199818881F0E00FB6F8948A
:107D8200CE0FDF1F0FBE089520E006D0E9F7089559
:107D9200259102D0E9F708952D9301501040202F2C
:107DA200212B089585E890E7FC0105911491FC01CF
:107DB2003296A591B491FC01349625913491422FCB
:107DC200432B19F0F901E4DF01C0DEDF069610E76C
:107DD2008139910748F308952F930CD02F9101D048
:107DE20008953CD0F12FE02F45E047BFE89536D00B
:107DF20012D0089533D0F12FE02F43E047BFE8952A
:107E02002DD008952BD0F12FE02F43E047BFE89506
:107E120025D001D0089522D041E147BFE8951EC088
:107E22001DD0F12FE02F41E247BFC895002D16C0AB
:107E320015D0F12FE02F49E047BFC895002D0EC0A5
:107E4200F32FE22F012E102E41E047BFE89506C026
:107E520005D0002E29E027BFE89500C0022E27B7E3
:107E620020FDFCCF202D0895022E27B726FDFCCF42
:107E7200202D08950E94A53E22974801C901DA01EA
:107E820010C05BD001E0A00E00E0B01E00E4A0161E
:107E920000E0B00608F440C0830120E030E00E9418
:107EA200F23E0A2F0B2B09F440C0082F0F7710E087
:107EB2002C01401A510A320100E4A02E03C00A2FFD
:107EC2000B2BE1F04816590680F0F40101914F01A5
:107ED2000983119729F001914F010883119711C06D
:107EE200F2013196049108830CC0F20104910983D6
:107EF2003196E817F907A1F7F401EDCF1BD00883FB
:107F020019839201088119810E94213F16D0AA94F7
:107F1200B1F62301AA24BB240DD0312F0F3F3F4FCE
:107F220009F4AFCF83011DD0B7CF01E02296ECE078
:107F32000C94B23E82010C945F3802E0400E00E0E5
:107F4200501E08959A938A9380E090E08C0109D0A4
:107F520080589F4F8F3F0FE69007C0F38991999108
:107F6200089520E030E00C94FB3E00000000000089
:067F720000000000FC000D
:107FE4000C94ED3E0C94113F0C94193F0C94213FDA
:0C7FF4000C94F23E0C94033F0C94293FC7
:040000030000700089
:100000000C947C050C94C0050C94C0050C94C005A0
:100010000C94C0050C94C0050C94C0050C94C0054C
:100020000C94C0050C94C0050C94C7180C94991935
:100030000C94B2270C94C0050C94C0050C94C00518
:100040000C94C0050C94C0050C94C0050C94C0051C
:100050000C94C0050C941A280C94C0050C94C0058F
:100060000C94C0050C94C0050C94C0050C94C005FC
:100070000C94C0050C94C0050C94C0050C94C005EC
:100080000C94E50E0C94C0050C94C0050C94C005AE
:100090000C94C0050C94C0050C94C0050C94C005CC
:1000A0000C94C0050C94C0050C94C0051B062B06CF
:1000B0003D064D06530662066E06730680068806E8
:1000C00098069D06061A281A161B281A161B6D1A62
:1000D000901A161BE51AF81AFB1DFB1D381E381E58
:1000E000921ED01E48214821E91E4821EA1FEA1F1E
:1000F000AD20C4204821332107634236B79BD8A7DF
:100100001A39685618AEBAAB558C1D3CB7CC57633C
:10011000BD6DEDFD753EF6177231BF000000803FEA
:1001200008000000BE922449123EABAAAA2ABECD06
:10013000CCCC4C3E00000080BEABAAAAAA3E000078
:100140000000BF000000803F000000000008417870
:10015000D3BB4387D1133D190E3CC3BD4282AD2BA7
:100160003E68EC8276BED98FE1A93E4C80EFFFBE9F
:1001700001C4FF7F3F000000000035001E001F008B
:100180002000210022002300240025002600270053
:100190002A002B0014001A000800150017001C008C
:1001A00018000C00120013004C0029000400160077
:1001B000070009000A000B000D000E000F003300BD
:1001C0003400E1001D001B000600190005001100AD
:1001D000100036003700380028000530E000E2004B
:1001E000E30003302C002C0004305000510052007A
:1001F0004F0035001E001F002000210022002300B8
:1002000024002500260027002A002B0014001A00D5
:10021000090013000A000D000F0018001C00330035
:100220004C002900040015001600170007000B0001
:10023000110008000C0012003400E1001D001B003A
:100240000600190005000E001000360037003800C7
:1002500028000530E000E200E30003302C002C0011
:1002600004305000510052004F0035001E001F00A6
:100270002000210022002300240025002600270062
:100280002A002B0034003600370013001C00090040
:100290000A00060015000F004C002900040012009F
:1002A000080018000C0007000B00170011001600D2
:1002B0003800E100330014000D000E001B000500A3
:1002C00010001A0019001D0028000530E000E200AF
:1002D000E30003302C002C00043050005100520089
:1002E0004F0035021E021F022002210222022302B9
:1002F00024022502260227022A0035021E021F02BE
:1003000020022102220223022402250226022702C1
:100310004C004C003A003B003C003D003E003F00DA
:100320002D022E022F023002310201004000410056
:1003300042004300440045000100010001000100AB
:1003400001000100010001000100010001000100A5
:100350000100AB00AA00A900AE0035001E001F007E
:100360002000210022002300240025002600270071
:100370002A0035001E001F0020002100220023005B
:1003800024002500260027004C004C003A003B00CA
:100390003C003D003E003F002D002E002F003000AD
:1003A000310001004000410042004300440045008C
:1003B0000100010001000100010001000100010035
:1003C00001000100010001000100AB00AA00A9002A
:1003D000AE0000000000000000000000000000006F
:1003E000000000000000000000000000000000000D
:1003F00000000000000000000000000000000000FD
:1004000000000000000000000000000000000000EC
:1004100000000000000000000000000000000000DC
:1004200000000000000000000000000000000000CC
:100430000000000000000000000003300000000089
:100440000430000000000000000000000000000078
:10045000000000000000000000000000000000009C
:10046000000000000000000000000000000000008C
:10047000000000000000000000000000000000007C
:10048000000000000000000000000000000000006C
:10049000000000000000000000000000000000005C
:1004A000000000000000000000000000000000004C
:1004B000000000000000000000000000000000003C
:1004C000000000000000000000000000000000002C
:1004D000000000000000000000000000000000001C
:1004E000000000000000000000000000000000000C
:1004F00000000000000000000000000000000000FC
:1005000000000000000000000000000000000000EB
:1005100000000000000000000000000000000000DB
:1005200000000000000000000000000000000000CB
:1005300000000000000000000000000000000000BB
:1005400000000000000000000000000000000000AB
:10055000000000000000000000000000000000009B
:10056000000000000000000000000000000000008B
:10057000000000000000000000000000000000007B
:10058000000000000000000000000000000000006B
:10059000000000000000000000000000000000005B
:1005A000000000000000000000000000000000004B
:1005B000000000000000000000000000000000003B
:1005C000000000000000000000000000000000002B
:1005D000000000000000000000000000000000001B
:1005E000000000000000000000000000000000000B
:1005F00000000000000000000000000000000000FB
:1006000000000000000000000000000000000000EA
:1006100000000000000000000000000000000000DA
:1006200000000000000000000000000000000000CA
:1006300000000000000000000000000000000000BA
:1006400000000000000000000000000000000000AA
:10065000000000000000000000000000000000009A
:10066000000000000000000000000000000000008A
:10067000000000000000000000000000000000007A
:10068000000000000000000000000000000000006A
:10069000000000000000000000000000000000005A
:1006A000000000000000000000000000000000004A
:1006B000000000000000000000000000000000003A
:1006C000000000000000000000000000000000002A
:1006D000000000000000000000000000000000001A
:1006E000000000000000000000000000000000000A
:1006F00000000000000000000000000000000000FA
:1007000000000000000000000000000000000000E9
:1007100000000000000000000000000000000000D9
:1007200000000000000000000000000000000000C9
:1007300000000000000000000000000000000000B9
:1007400000000000000000000000000000000000A9
:100750000000000000000000000000000000000099
:100760000000000000000000000000000000000089
:100770000000000000000000000000000000000079
:100780000000000000000000000000000000000069
:100790000000000000000000000000000000000059
:1007A0000000000000000000000000000000000049
:1007B0000000000000000000000000000000000039
:1007C0000000000000000000000000000000000029
:1007D0000000000000000000000000000000000019
:1007E0000000000000000000000000000000000009
:1007F00000000000000000000000000000000000F9
:1008000000000000000000000000000000000000E8
:1008100000000000000000000000000000000000D8
:1008200000000000000000000000000000000000C8
:1008300000000000000000000000000000000000B8
:1008400000000000000000000000000000000000A8
:100850000000000000000000000000000000000098
:100860000000000000000000000000000000000088
:100870000000000000000000000000000000000078
:100880000000000000000000000000000000000068
:100890000000000000000000000000000000000058
:1008A0000000000000000000000000000000000048
:1008B0000000000000000000000000000000000038
:1008C0000000000000000000000000000000000028
:1008D0000000000000000000000000000000000018
:1008E0000000000000000000000000000000000008
:1008F000000000000000000000003A003B003C0047
:100900003D003E003F0040004100420043004400E3
:10091000450001000050010001000100010001003C
:1009200001000100010001004C0001000100010074
:1009300007300630135012500030013002300100F1
:10094000010001000B300A300930083001000100BD
:10095000010001000100010001000100010001008F
:10096000010001000100010001000100010001007F
:1009700001002A0354006800650020005000720046
:1009800065006F006E006900630020004B00650089
:10099000790062006F0061007200640000002C03A7
:1009A0004F007200740068006F006C0069006E00F8
:1009B00065006100720020004B0065007900620054
:1009C0006F006100720064007300000004030904FA
:1009D00009025400030100A0FA0904000001030108
:1009E0000100092111010001223F000705810308D0
:1009F000000A09040100010301020009211101009C
:100A000001224D000705820308000A0904020001C3
:100A100003000000092111010001223600070583AF
:100A20000308000A1201100100000008EDFE6160D9
:100A300001000102000105010980A10185021601E2
:100A40000026B7001A01002AB70075109501810031
:100A5000C0050C0901A1018503160100269C021A9C
:100A600001002A9C02751095018100C00501090250
:100A7000A1010901A1000509190129051500250198
:100A80009505750181029501750381010501093004
:100A900009311581257F9502750881060938158170
:100AA000257F950175088106050C0A3802158125F8
:100AB0007F950175088106C0C005010906A10105E1
:100AC0000719E029E71500250195087501810295B0
:100AD0000175088101050819012905950575019120
:100AE000029501750391010507190029FF150025DD
:100AF000FF950675088100C011241FBECFEFDAE014
:100B0000DEBFCDBF04B603FE24C08091F3039091F5
:100B1000F403A091F503B091F6038730904BA74002
:100B2000B04BB9F41092F3031092F4031092F50352
:100B30001092F60314BE84B7877F84BF88E10FB696
:100B4000F89480936000109260000FBEE0E0F8E33C
:100B5000099512E0A0E0B1E0E8EAF3E602C00590F2
:100B60000D92A63FB107D9F713E0A6EFB2E001C09E
:100B70001D92A33FB107E1F70E940D160C94D231EC
:100B80000C940000279A2F988FEF9FEF9093870087
:100B9000809386008AE08093800089E180938100C1
:100BA0000C94092D282F81110BC080918000877F24
:100BB0008093800010928D0010928C002F980895E1
:100BC0002F9880918000886080938000233019F4F2
:100BD0008FEF9FEF0FC083E090E0821B9109880F99
:100BE000991F2FEF3FEFA90102C0569547958A95AF
:100BF000E2F7CA0190938D0080938C000895CF9303
:100C0000DF93EC010E94AE28BE0180E090E0DF910E
:100C1000CF910C9428250F931F93462F50E04C3012
:100C2000510508F098C0DC01FA01EA5AFF4F12960C
:100C30008C910C949631882309F48DC000E010E06B
:100C4000980140E064E070E089EC91E00E9463125A
:100C500081E090E00FC0882309F47DC000E010E03F
:100C6000980140E066E070E089E591E00E9463123F
:100C700082E090E00E94FF056EC0882309F46BC0FB
:100C800000E010E0980140E068E070E089E891E061
:100C90000E94631284E090E0EDCF882311F083E09E
:100CA00005C083E00CC0882349F084E00E94A5259C
:100CB00040E164E083E00E94C90A4DC084E00E94E4
:100CC000C625F6CF882331F085EE0E948F1C0E9446
:100CD000602D41C085EE0E94571D3DC08823D9F18B
:100CE0000E94F70D38C08823B1F10E94F00D00E09A
:100CF00010E0980140E064E070E089EE91E029C0E6
:100D0000882349F185E00E94C6250E94180E23C061
:100D1000882309F100E010E0980140E068E070E00D
:100D200089E191E00E94631285E00E94A52513C02D
:100D3000882389F00E94F61204C0882361F00E9483
:100D4000011300E010E0980140E068E070E089E104
:100D500091E00E94631280E090E01F910F9108954E
:100D60000F931F932FEF89EF90E021508040904028
:100D7000E1F700C0000000E010E0980140E064E00E
:100D800070E089EE91E00E9463121F910F91089527
:100D9000CF92DF92EF92FF920F931F93CF93DF9347
:100DA000CDB7DEB7CC58D1090FB6F894DEBF0FBE71
:100DB000CDBF2091B30325FFC5C08C01FC019281FA
:100DC00080910001992309F460C096E4E5E2F2E025
:100DD000DE01A95BBF4F01900D929A95E1F7F801F2
:100DE0009081E091F602F091F702E90FF11DEE0F0C
:100DF000FF1F27E430E02C0F3D1FE20FF31F60813F
:100E00007181680F711D882777FD8095982F0E944A
:100E1000A42E20E030E040E451E40E94092E6B0152
:100E20007C01F801218185E090E0821B9109BC01E1
:100E3000882777FD8095982F0E94A42E9B01AC01F6
:100E4000C701B6010E94A12D9B01AC0160E070E0DA
:100E500080E090E40E94173020E030E04CE551E45F
:100E60000E94B42F4FE050E0C457DF4F0FB6F89404
:100E7000DEBF0FBECDBFDF91CF911F910F91FF90CD
:100E8000EF90DF90CF900C94031296E4E5E2F2E04D
:100E9000DE01119601900D929A95E1F7F80190818B
:100EA000E091F602F091F702E90FF11DEE0FFF1F3E
:100EB00021E030E02C0F3D1FE20FF31F60817181B4
:100EC000680F711D882777FD8095982F0E94A42EAA
:100ED00020E030E040E451E40E94092E6B017C01E7
:100EE000F801218185E090E0821B9109BC018827EF
:100EF00077FD8095982F0E94A42E9B01AC01C7011D
:100F0000B6010E94A12D9B01AC0160E070E080E081
:100F100090E40E94173020E030E04CE551E40E945C
:100F2000B42FC457DF4F0FB6F894DEBF0FBECDBF4E
:100F3000DF91CF911F910F91FF90EF90DF90CF90B5
:100F40000C944B0EC457DF4F0FB6F894DEBF0FBEA4
:100F5000CDBFDF91CF911F910F91FF90EF90DF9068
:100F6000CF9008950F931F9300E010E0980140E0A8
:100F700063E070E081E091E00E9463122FEF82E570
:100F800097E0215080409040E1F700C000001F91A1
:100F90000F91089508950E94C2056E9A769A0C9456
:100FA000B0060C94CA070C94C8060895880F991FC0
:100FB000FC01E650F040859194910895880F991FA7
:100FC000FC01E658FE4F8591949108950F931F936D
:100FD000CF93DF93EC01811520E49207A0F5C115B2
:100FE00080E3D80708F0E1C0C83ED105D8F4C03E80
:100FF000D10508F0EEC1C83AD10578F4C53AD1055B
:1010000008F074C0C130D10509F46DC008F4DEC128
:10101000C430D10508F0DDC1D9C1CB3BD10508F4FE
:1010200070C0D4C1C11590E2D90708F0B9C0C1158C
:1010300021E0D20708F0CDC1C03FD10508F4C6C1F8
:101040008E01106506C2C13080E5D80709F4BDC025
:1010500068F5C13120E4D20709F4AEC050F4C031C4
:1010600090E4D90708F0A5C0CF70DD278E01146D7C
:10107000F0C1C33120E4D20709F4A4C008F49FC032
:10108000C115D04509F0A2C10E946C210E94180E22
:101090000E94B2079FEF24E38CE0915020408040F3
:1010A000E1F700C000000E943F28D3C1C11520E62F
:1010B000D20730F4C11581E5D80708F48CC02DC1E2
:1010C000C11590E7D90708F481C1C11520E8D207FE
:1010D00008F478C1C11580E9D80708F077C1DF703E
:1010E0008E01106AB6C101E010E0B3C1C53AD10566
:1010F00009F471C1C63AD10509F070C102E810E4E3
:10110000A8C1C83AD10509F46CC1C93AD10509F49E
:101110006BC1CA3AD10509F46AC1CB3AD10509F4C9
:1011200069C1CC3AD10509F468C1CD3AD10509F4B9
:1011300067C1C03BD10509F466C1CE3AD10509F4B7
:1011400065C1CF3AD10509F464C1C13BD10509F4A9
:1011500063C1C23BD10509F462C1C33BD10509F4A7
:1011600061C1C43BD10509F460C1C53BD10509F497
:101170005FC1C63BD10509F45EC1C73BD10509F487
:101180005DC1C83BD10509F45CC1C93BD10509F477
:101190005BC1CA3BD10509F45AC100E014E459C14E
:1011A000CE019F700E94DE0755C1DD278E01106CB5
:1011B00050C100E011ED4DC100E010ED4AC100E06A
:1011C00012ED47C100E013ED44C18091C703816077
:1011D0008093C7033EC10E949B28811102C00E94D8
:1011E00077280E94B32890E09093F2038093F10354
:1011F000C23090E5D90721F48091F103816086C067
:10120000C43020E5D20721F48091F10382607EC0D2
:10121000C63080E5D80721F48091F103846076C060
:10122000C83090E5D90719F48091F10327C0CA307E
:1012300020E5D20721F48091F103806167C0CC30B2
:1012400080E5D80721F48091F10380625FC0CE3041
:1012500090E5D90721F48091F103806457C0C03133
:1012600020E5D20721F48091F10380684FC0C2319C
:1012700080E5D80729F48091F1038460886046C036
:10128000C33090E5D90721F48091F1038E7F3EC0F1
:10129000C53020E5D20721F48091F1038D7F36C05F
:1012A000C73080E5D80721F48091F1038B7F2EC0F1
:1012B000C93090E5D90719F48091F10326C0CB30ED
:1012C00020E5D20721F48091F1038F7E1FC0CD303D
:1012D00080E5D80721F48091F1038F7D17C0CF30CE
:1012E00090E5D90721F48091F1038F7B0FC0C131C4
:1012F00020E5D20721F48091F1038F7707C0C33135
:10130000D04531F48091F1038B7F877F8093F10387
:101310008091F1030E94B7289CC08D2F99278F7070
:10132000992781309105D9F49E012370332702C09B
:10133000880F991F2A95E2F79C688E0144E0000F00
:10134000111F4A95E1F700271370802B912B53E072
:10135000CC0FDD1F5A95E1F7C076DD272FC0823014
:10136000910531F4DC2FCC278E01016F106A71C01A
:101370008330910569F4CE018370992701E010E074
:1013800002C0000F111F8A95E2F7C8019C680FC0C8
:10139000049709F05EC0CE018370992701E010E048
:1013A00002C0000F111F8A95E2F7C8019A6823E076
:1013B000CC0FDD1F2A95E1F7C07ED7708C010C2B76
:1013C0001D2B47C0DF708E01106243C000E010E0AB
:1013D00040C08E013EC001E810E43BC003E810E4C9
:1013E00038C002EE14E435C009EE14E432C00AEE4F
:1013F00014E42FC005EB14E42CC006EB14E429C060
:1014000007EB14E426C00CEC14E423C00DEC14E448
:1014100020C003E815E41DC00AE815E41AC002E97B
:1014200015E417C004E915E414C001E216E411C084
:1014300003E216E40EC004E216E40BC005E216E473
:1014400008C006E216E405C007E216E402C00AE29C
:1014500016E4C801DF91CF911F910F9108959CE090
:10146000799FF00111249CE3899FE00DF11D112467
:10147000E60FF11DEE0FFF1FE658FE4F8591949188
:10148000803E9105E0F4803C910558F5813391054B
:1014900009F46FC048F48932910509F463C08A32B7
:1014A000910509F46DC072C089339105E9F0823865
:1014B0009105D1F08533910509F44DC067C0833E95
:1014C000910581F138F4803E9105B9F0823E910595
:1014D000D9F05CC0863E910561F1873E9105A1F18E
:1014E00055C00E94D60708952091F10320FD02C047
:1014F00021FF4CC080EE90E049C08091F10380FF55
:10150000F9CF89E390E042C08091F10382FF0EC0E1
:101510008091F10384FF03C080E090E037C083EE48
:1015200090E034C08091F10382FFF2CF82EE90E030
:101530002DC08091F10383FF0BC08091F10384FDE6
:10154000EBCF87EE90E022C08091F10383FFF5CFCF
:1015500086EE90E01BC08091F10385FF07C089E211
:1015600090E014C08091F10385FFF9CF85E390E00E
:101570000DC08091F10386FF07C08AE290E006C0AB
:101580008091F10386FFF9CF81E390E00E94E607A6
:101590000895CF92DF92EF92FF920F931F9301E095
:1015A00010E020E030E06801790104C0CC0CDD1CC3
:1015B000EE1CFF1C8A95D2F704C0000F111F221FDA
:1015C000331F6A95D2F70C291D292E293F29C09077
:1015D000B303D090B403E090B503F090B603C022FB
:1015E000D122E222F322842FC016D106E206F306AE
:1015F00041F41F910F91FF90EF90DF90CF900C94EA
:10160000A5251F910F91FF90EF90DF90CF900C9444
:10161000C62508950C94090B5F926F927F928F926A
:101620009F92AF92BF92CF92DF92EF92FF920F9371
:101630001F93CF93DF93CDB7DEB72A970FB6F894F9
:10164000DEBF0FBECDBFCE0101966C014E019BE007
:10165000890E911C20E030E040E050E060E070E056
:1016600000E010E0E12CF12C6C2C5D2C8AE0782E4F
:10167000AA24A394B12CEBE6F2E0A62DB52D872D7C
:1016800001900D928A95E1F7F601819191916F0198
:10169000FC01E07FFF27E032F10559F48F709927B4
:1016A000F50102C0EE0FFF1F8A95E2F7EE2AFF2A2E
:1016B00037C0E033F10559F48F709927F50102C066
:1016C000EE0FFF1F8A95E2F70E2B1F2B29C0E03487
:1016D000F10559F48F709927F50102C0EE0FFF1F35
:1016E0008A95E2F76E2B7F2B1BC0E035F10559F48C
:1016F0008F709927F50102C0EE0FFF1F8A95E2F760
:101700004E2B5F2B0DC0E036F10551F48F709927F9
:10171000F50102C0EE0FFF1F8A95E2F72E2B3F2B3B
:10172000C814D90409F0A7CF84B19E2D90958923C0
:1017300084B985B1E82AE5B887B1902F90958923BF
:1017400087B988B1082B08B98AB1962F909589235B
:101750008AB98BB1682B6BB98DB1942F9095892381
:101760008DB98EB1482B4EB980B3922F90958923B5
:1017700080BB81B3282B21BB2A960FB6F894DEBF1D
:101780000FBECDBFDF91CF911F910F91FF90EF90D2
:10179000DF90CF90BF90AF909F908F907F906F9091
:1017A0005F9008955F926F927F928F929F92AF9217
:1017B000BF92CF92DF92EF92FF920F931F93CF933E
:1017C000DF93CDB7DEB768970FB6F894DEBF0FBED4
:1017D000CDBF85B7806885BF85B7806885BF0E940B
:1017E0000C0BCE0101966C014E0199E1890E911C02
:1017F00020E030E040E050E060E070E000E010E029
:10180000E12CF12C6C2C5D2C88E1782EAA24A39479
:10181000B12CE5E7F2E0A62DB52D872D01900D92B4
:101820008A95E1F7F601819191916F01FC01E07FCA
:10183000FF27E032F10559F48F709927F50102C0B6
:10184000EE0FFF1F8A95E2F7EE2AFF2A37C0E0333A
:10185000F10559F48F709927F50102C0EE0FFF1FB3
:101860008A95E2F70E2B1F2B29C0E034F10559F4BD
:101870008F709927F50102C0EE0FFF1F8A95E2F7DE
:101880006E2B7F2B1BC0E035F10559F48F70992723
:10189000F50102C0EE0FFF1F8A95E2F74E2B5F2B7A
:1018A0000DC0E036F10551F48F709927F50102C0A3
:1018B000EE0FFF1F8A95E2F72E2B3F2BC814D90499
:1018C00009F0A7CF84B19E2D9095892384B985B165
:1018D000E82AE5B887B1902F9095892387B988B118
:1018E000082B08B98AB1962F909589238AB98BB1B4
:1018F000682B6BB98DB1942F909589238DB98EB1DA
:10190000482B4EB980B3922F9095892380BB81B329
:10191000282B21BBE2E0F3E0A8EFB2E01192119294
:101920001D921D9283E0EC30F807C1F768960FB660
:10193000F894DEBF0FBECDBFDF91CF911F910F9105
:10194000FF90EF90DF90CF90BF90AF909F908F90DF
:101950007F906F905F900C94CB075F926F927F9215
:101960008F929F92AF92BF92CF92DF92EF92FF92AF
:101970000F931F93CF93DF93CDB7DEB7A2970FB628
:10198000F894DEBF0FBECDBF6E0149E1C40ED11C7D
:1019900088EFA82E82E0B82E75019AE0592E4601F4
:1019A00001E010E028E1622E35E0732EEBE6F2E074
:1019B000D401852D01900D928A95E1F7D6018D9184
:1019C0009D916D019C01207F33272032310591F4D8
:1019D00024B18F709927F80102C0EE0FFF1F8A957E
:1019E000E2F7CF01922F982B94B995B18095892376
:1019F00085B953C02033310591F427B18F709927F1
:101A0000A80102C0440F551F8A95E2F7CA01922F20
:101A1000982B97B998B18095892388B93EC0203416
:101A2000310591F42AB18F709927D80102C0AA0F0D
:101A3000BB1F8A95E2F7CD01922F982B9AB99BB1E3
:101A4000809589238BB929C02035310591F42DB1BA
:101A50008F709927F80102C0EE0FFF1F8A95E2F7F9
:101A6000CF01922F982B9DB99EB1809589238EB975
:101A700014C02036310589F420B38F709927A8014E
:101A800002C0440F551F8A95E2F7CA01922F982B86
:101A900090BB91B38095892381BB50EA5A95F1F7A9
:101AA000BE016F5F7F4F20E030E040E050E0E5E7AF
:101AB000F2E0DE011196862D01900D928A95E1F7F4
:101AC000DB018D919D91BD01FC01E07FFF27E0329C
:101AD000F10511F4E3B113C0E033F10511F4E6B1FF
:101AE0000EC0E034F10511F4E9B109C0E035F105AB
:101AF00011F4ECB104C0E036F105B9F4EFB1F0E057
:101B00008F70992702C0F595E7958A95E2F7E0FD79
:101B100008C0C801042E02C0880F991F0A94E2F77A
:101B200002C080E090E0282B392B4F5F5F4F4C3094
:101B3000510509F0BCCFF70180819181821793078D
:101B400021F031832083709209020E940C0BF2E095
:101B5000EF0EF11C42E0E41643E0F40609F026CF54
:101B6000809109028823C9F081508093090288235B
:101B700039F08FE99FE00197F1F700C000000DC038
:101B8000E2E0F3E0D5018D919D915D018193919308
:101B9000B2E0AB16B3E0BB06A9F70E94D10781E023
:101BA000A2960FB6F894DEBF0FBECDBFDF91CF91E6
:101BB0001F910F91FF90EF90DF90CF90BF90AF906B
:101BC0009F908F907F906F905F900895E82FF0E046
:101BD000EE0FFF1FEE5FFC4F808191810895089505
:101BE0008091DC0381608093DC030C94C928809190
:101BF000DC038E7F8093DC030C94C9280E949B2811
:101C0000811102C00E9477280E94C5288093DC03BE
:101C10003E9A809171008D7F8093710082E0809365
:101C200090008AE18093910081E080930E030895F3
:101C300080910E03811102C00E94FE0D10925E037E
:101C400010925D03809171008D7F8093710080916F
:101C500090008F77809390001092200310921F03C2
:101C600010925703109258031092590310925A037E
:101C70001092560310925503E5E3F3E0A5E2B3E0BA
:101C800011921192119211921D921D9283E0E535ED
:101C9000F807B1F70895CF92DF92EF92FF920F937A
:101CA0001F93CF93DF9320911F03222309F484C055
:101CB0006B017C0180910E03811102C00E94FE0D18
:101CC00005E513E0C7E0D0E0A7019601F801929185
:101CD0008291729162918F010E94052E811131C013
:101CE000FE01EE0FFF1FEE0FFF1FEB5CFC4F10829B
:101CF000118212821382DE01AA0FBB1FAB5DBC4FA3
:101D000011961C921E92C730D105E9F021964481AC
:101D10005581668177814083518362837383148206
:101D200015821682178212968D919C9113971196A7
:101D30009C938E9313961C921E9212973496129631
:101D4000E2CF219708F680915D0390915E030197A1
:101D500097FD05C090935E0380935D0304C01092CD
:101D60005E0310925D0380915D0390915E0320916C
:101D70005B0330915C032817390724F010925C0351
:101D800010925B03892BC1F4809171008D7F809349
:101D90007100809190008F7780939000109257038C
:101DA000109258031092590310925A03109256033E
:101DB0001092550310921F03DF91CF911F910F9145
:101DC000FF90EF90DF90CF9008951F920F920FB683
:101DD0000F9211244F925F926F927F928F929F92F7
:101DE000AF92BF92CF92DF92EF92FF922F933F93E9
:101DF0004F935F936F937F938F939F93AF93BF9313
:101E0000CF93DF93EF93FF9380911F03882309F40F
:101E10009BC1C0915D03D0915E031C161D060CF0A2
:101E200093C140900F035090100360901103709085
:101E3000120320E030E0A901C301B2010E94B02FDB
:101E400018160CF065C0C130D10509F452C080915C
:101E50005B0390915C03BE010E9482317C019093F0
:101E60005C0380935B038090210390902203A090F9
:101E70002303B090240320E030E040E85FE3C50195
:101E8000B4010E94A12D60932103709322038093DB
:101E9000230390932403F701EE0FFF1FEE0FFF1FA4
:101EA000EB5CFC4FA301920160817181828193817F
:101EB0000E94092E20E030E040E05EE30E94B42F53
:101EC0009B01AC01C501B4010E94B02F18168CF41F
:101ED000C7010196BE010E94823190935C038093FA
:101EE0005B0310922103109222031092230310929D
:101EF0002403E0915B03F0915C03EE0FFF1FEE0FF4
:101F0000FF1FEB5CFC4F6081718182819381D0C0A7
:101F1000C0905703D0905803E0905903F0905A03B3
:101F200020E030E0A901C701B6010E94052E2197EB
:101F3000882309F4A2C0FE01EE0FFF1FEE0FFF1F62
:101F4000EB5CFC4F80809180A280B380A50194015E
:101F5000C701B6010E94052E87FF31C0A50194017B
:101F600060E070E08CED93EC0E94092E20E030E000
:101F700040E451E40E94092E20E030E040E05FE3BD
:101F80000E94B42F9B01AC0160E070E080E090E41F
:101F90000E9417309B01AC01C501B4010E94B42F0F
:101FA0009B01AC01C701B6010E94052E87FF07C047
:101FB000A701960160E070E08CED93E439C0A501C3
:101FC0009401C701B6010E94B02F18160CF055C03D
:101FD000A501940160E070E08CED93E40E94092E6D
:101FE00020E030E040E451E40E94092E20E030E09F
:101FF00040E05FE30E94B42F9B01AC0160E070E021
:1020000080E090E40E9417309B01AC01C501B4014F
:102010000E94B42F9B01AC01C701B6010E94B02FF2
:1020200018165CF5A701960160E070E08CED93EC6A
:102030000E94092E20E030E040E451E40E94092E85
:1020400020E030E040E05FE30E94B42F9B01AC0150
:1020500060E070E080E090E40E9417309B01AC01EA
:10206000C701B6010E94B42F6093570370935803C1
:102070008093590390935A0313C0FE01EE0FFF1F84
:10208000EE0FFF1FEB5CFC4F80819181A281B38139
:102090008093570390935803A0935903B0935A0326
:1020A00060915703709158038091590390915A039E
:1020B00020910C0330910D032F3F4FEF340731F087
:1020C0002F5F3F4F30930D0320930C030E940C139E
:1020D0006B017C0120E034E244EF51E40E94052EC4
:1020E00087FF08C086EFC82E88E2D82E84EFE82E3E
:1020F00081E4F82E20E030E040E051E4C701B60171
:102100000E94B42F9B01AC0160E074E284E79BE481
:102110000E94092E6B017C010E94712E7093970022
:102120006093960020910A0230910B0240910C02BC
:1021300050910D02C701B6010E94B42F0E94712E6A
:10214000709399006093980080912003882309F48C
:1021500033C1C0901B03D0901C03E0901D03F0908E
:102160001E0320E030E0A901C701B6010E94B02F94
:102170001816D4F580910C0390910D038F3F2FEF2B
:10218000920729F0019690930D0380930C03C701E9
:10219000B6010E940C1320E030E040E051E40E94C0
:1021A000B42F9B01AC0160E074E284E79BE40E94E1
:1021B000092E6B017C010E94712E70939700609331
:1021C000960020910A0230910B0240910C0250912E
:1021D0000D02C701B6010E94B42F0E94712E7093A8
:1021E00099006093980008C0109297001092960092
:1021F0001092990010929800609115037091160347
:102200006F5F7F4F709316036093150320919600C4
:102210003091970080E090E0232BF1F0C091960080
:10222000D09197000E94A22E6B017C01BE0180E03C
:1022300090E00E94A22E9B01AC0160911703709167
:1022400018038091190390911A030E94092E20E02F
:102250003FEF4FE757E410C00E94A22E6B017C01B4
:1022600020E030EE4FEF54E46091170370911803B3
:102270008091190390911A030E94B42F9B01AC0125
:10228000C701B6010E94B02F87FD96C0809113034D
:102290008F5F8093130390E02091D8033091D9038E
:1022A00082179307A0F08091E303882319F010921E
:1022B00013030DC0809171008D7F80937100809118
:1022C00090008F7780939000109220037DC08091C2
:1022D0001403C0911303811128C0C090DD03D09076
:1022E000DE03E090DF03F090E00320E030E0A9019E
:1022F000C701B6010E94B02F1816BCF481E080938C
:10230000140310921B0310921C0310921D031092D1
:102310001E03C0921703D0921803E0921903F092A3
:102320001A03C150C093130343C0109214031092B8
:102330000D0310920C03E091DA03F091DB0348E007
:10234000C49FE00DF11D112480819181A281B38190
:1023500080931B0390931C03A0931D03B0931E0353
:1023600020E030E040E85EE36481758186819781FA
:102370000E94B42F6B017C0120E030E048EC52E475
:1023800060910E0270910F028091100290911102E3
:102390000E94092E9B01AC01C701B6010E94B42F17
:1023A00060931703709318038093190390931A0393
:1023B00010921603109215038091DC0380FD04C077
:1023C0001092200310921F03FF91EF91DF91CF91A4
:1023D000BF91AF919F918F917F916F915F914F913D
:1023E0003F912F91FF90EF90DF90CF90BF90AF90F3
:1023F0009F908F907F906F905F904F900F900FBE47
:102400000F901F901895CF92DF92EF92FF92CF938B
:10241000DF936B017C01EA0180910E03811102C000
:102420000E94FE0D8091DC0380FF46C080915D0319
:1024300090915E0308970CF03FC0809171008D7FF2
:10244000809371008091200381110E94180E81E019
:1024500080931F0310920D0310920C0320E030E0D4
:10246000A901C701B6010E94B02F1816DCF48091B3
:102470005D0390915E03FC01EE0FFF1FEE0FFF1F47
:10248000EB5CFC4FC082D182E282F382FC01EE0F52
:10249000FF1FEB5DFC4FD183C083019690935E03D9
:1024A00080935D03809171008260809371008091C0
:1024B0009000806880939000DF91CF91FF90EF9023
:1024C000DF90CF9008958F929F92AF92BF92CF925C
:1024D000DF92EF92FF920F931F93CF93DF93EC0164
:1024E0007B01D42E4801590180910E03811102C055
:1024F0000E94FE0D8091DC0380FF6BC08091710013
:102500008D7F8093710080911F0381110E94180EAE
:1025100081E080932003D093DB03C093DA03F09231
:10252000D903E092D803D092E3038092DD03909226
:10253000DE03A092DF03B092E00310922103109219
:102540002203109223031092240310921303888114
:102550009981AA81BB8180931B0390931C03A09354
:102560001D03B0931E0320E030E040E85EE36C8181
:102570007D818E819F810E94B42F6B017C0120E0C0
:1025800030E048EC52E460910E0270910F028091AD
:102590001002909111020E94092E9B01AC01C7010B
:1025A000B6010E94B42F60931703709318038093B1
:1025B000190390931A031092160310921503809139
:1025C0007100826080937100809190008068809398
:1025D0009000DF91CF911F910F91FF90EF90DF90CE
:1025E000CF90BF90AF909F908F90089580915F03A0
:1025F00090E0019666E070E00E94823180935F0374
:10260000089580915F0390E0019766E070E00E947A
:10261000823180935F0308958F929F92AF92BF9211
:10262000CF92DF92EF92FF920F931F93CF93DF939E
:102630006B017C01C0910C03D0910D03BE0180E0C1
:1026400090E00E94A22E4B015C01A701960160E080
:1026500070E08CE594E40E94092E9B01AC01C50159
:10266000B4010E94B42F0E94762E20915F03233084
:1026700009F473C028F4222351F02130E9F02CC171
:10268000243009F4A0C0253009F4E0C025C180E061
:1026900090E0A0E0BFE380930A0290930B02A09326
:1026A0000C02B0930D0210920F03109210031092BF
:1026B00011031092120310C110920F031092100315
:1026C00010921103109212036431710540F46A30C4
:1026D000710560F520E030E040E85EE32BC0693C26
:1026E000710508F0AAC080E090E00E94A22E20E0D0
:1026F00030E040EA51E40E94A02D20E030E044E3C5
:1027000053E40E94092E9B01AC010E94B42F20E0EB
:1027100030E040E05EE30E94B42F9B01AC0160E03A
:1027200070E080E09EE30E94A02D44C020E030E0F5
:1027300040E05FE3C701B6010E94B42F6B017C014A
:1027400080E090E0A0E0BEE380930A0290930B0249
:10275000A0930C02B0930D02BFC010920F03109211
:10276000100310921103109212034AE0469F900149
:10277000479F300D1124C90168EB7BE00E946E3148
:10278000BC016C5D754077FF03C07195619571095F
:10279000882777FD8095982F0E94A42E2EE333EC96
:1027A0004EE259E30E94B42F20E030E040EC5EE3BB
:1027B0000E94A12D60930A0270930B0280930C0279
:1027C00090930D0289C010920F0310921003109283
:1027D000110310921203CE0183709927892BE1F027
:1027E000BE016170772780E090E00E94A22E20E079
:1027F00030E040E05EE30E94B42F20E030E040E4AF
:102800005FE30E94A12D60930A0270930B028093F4
:102810000C0290930D020CC080E090E0A0E0BFE3BA
:1028200080930A0290930B02A0930C02B0930D02C6
:10283000C770DD27CD2B09F04FC010920A0210920D
:102840000B0210920C0210920D0246C010920F0360
:1028500010921003109211031092120300E010E086
:1028600020E03FE300930A0210930B0220930C0236
:1028700030930D026739710578F180E090E00E9495
:10288000A22E20E030E047E153E40E94A02D20E09A
:1028900030E04AE754E40E94092E20E030E048E4AA
:1028A00052E40E94B42F20E030E040EA51E40E945C
:1028B000E62E0E94712E660F771F660F771FFB01B1
:1028C000E357FD4F2081318142815381C701B60119
:1028D0000E94B42F6B017C01C701B601DF91CF913B
:1028E0001F910F91FF90EF90DF90CF90BF90AF902E
:1028F0009F908F900895809168030895CF93DF9300
:1029000000D01F92CDB7DEB79C018091E8038430E0
:1029100019F593E099833B832A839093E9008FEF25
:102920009091E800815095FD06C095ED9A95F1F7DC
:1029300000008111F5CF8091E80085FF0DC040E0D7
:1029400050E063E070E0CE0101960E94B7168091DE
:10295000E8008E778093E8000F900F900F90DF9142
:10296000CF910895CF93DF9300D01F92CDB7DEB7FC
:102970002091E803243021F522E029839B838A8378
:1029800083E08093E9008FEF9091E800815095FDFE
:1029900006C095ED9A95F1F700008111F5CF809171
:1029A000E80085FF0DC040E050E063E070E0CE013C
:1029B00001960E94B7168091E8008E778093E80018
:1029C0000F900F900F90DF91CF9108952091E80321
:1029D0002430F1F422E02093E9002FEF3091E80059
:1029E000215035FD06C035ED3A95F1F70000211173
:1029F000F5CF2091E80025FF0BC040E050E065E0F6
:102A000070E00E94B7168091E8008E778093E8000E
:102A10000895CF93DF932091E803243039F521E026
:102A20002093E9002FEF3091E800215035FD06C0DA
:102A300035ED3A95F1F700002111F5CF2091E8002E
:102A400025FF14C0EC0140E050E068E070E00E9417
:102A5000B7168091E8008E778093E80088E0FE0149
:102A6000A0E6B3E001900D928A95E1F7DF91CF9156
:102A700008958091E703811109C00E944C180E94BB
:102A8000A9188091E20084608093E200089510927A
:102A9000E7030895089508950C94A72742E061EC98
:102AA00081E00E94C61742E061EC82E00E94C617F6
:102AB00042E061EC83E00C94C6178091EA03833016
:102AC00009F453C030F4813071F0823009F48CC0C5
:102AD00008958A3009F478C08B3009F45EC08930DB
:102AE00009F09AC020C08091E903813A09F094C0AE
:102AF0008091E800877F8093E8008091ED039091BA
:102B0000EE03892B21F468E080E693E003C060E0E7
:102B100080E090E070E00E9402178091E8008B77DF
:102B20008093E80008958091E903813209F074C030
:102B30008091ED039091EE03892B09F06DC0809197
:102B4000E800877F8093E8008091E80082FD05C05F
:102B50008091E8038111F8CF5FC08091F1008093EC
:102B600068038091E8008B7753C08091E903813A34
:102B700009F052C08091ED039091EE03892B09F08A
:102B80004BC08091E800877F8093E8008091E80047
:102B900080FFFCCF80911C0236C08091E903813216
:102BA000D9F58091ED039091EE03892BA9F58091E1
:102BB000E800877F8093E8000E94FB178091EB0379
:102BC00080931C020C946C218091E903813221F5E1
:102BD0008091E800877F8093E8000E94FB17809136
:102BE000EC038093690308958091E903813AA1F48D
:102BF0008091E800877F8093E8008091E80080FF63
:102C0000FCCF809169038093F1008091E8008E777A
:102C10008093E8000C94FB17089584B7877F84BFE6
:102C200088E10FB6F89480936000109260000FBEA8
:102C300090E080E80FB6F894809361009093610073
:102C40000FBE0E949E1B0E944C180E94A9188091E2
:102C5000E20084608093E20078940E942F1B0E941F
:102C6000A01B82E192E00E944A1B8091E80385301C
:102C700069F40E9461278091E6038823B1F30E94E2
:102C80008F27882391F30E94A116EFCF0E94A81BE3
:102C9000ECCF292F332723303105C9F064F42130DC
:102CA000310581F02230310509F043C084E590E020
:102CB00020ED39E042C021323105F1F022323105F8
:102CC00041F137C082E190E024E23AE036C0992732
:102CD0008130910541F08230910541F0892B49F511
:102CE000ECECF9E005C0EEE9F9E002C0E2E7F9E05A
:102CF000849190E09F0121C06330D8F4E62FF0E08A
:102D0000EE0FFF1FEA51FD4F2081318189E090E0F5
:102D100014C0633070F470E0FB01EE0FFF1FE0524F
:102D2000FD4F20813181FB01E352FD4F808190E016
:102D300004C080E090E020E030E0FA01318320839D
:102D4000089580E189BD82E189BD09B400FEFDCF0F
:102D50008091D8008F7D8093D8008091E0008260C0
:102D60008093E0008091E00081FDFCCF0895CF9238
:102D7000DF92EF92FF920F931F93CF93DF93EC01BB
:102D80008B016A010E941A18811133C0C114D10449
:102D900039F0F60180819181081B190BC80FD91FEA
:102DA000E12CF12C0115110519F18091E80085FD48
:102DB00016C08091E8008E778093E800C114D1049A
:102DC00049F0F60180819181E80EF91EF182E082DE
:102DD00085E00FC00E941A18882321F30AC0899148
:102DE0008093F10001501109FFEFEF1AFF0ADACFCB
:102DF00080E0DF91CF911F910F91FF90EF90DF90D6
:102E0000CF9008952091EF033091F00326173707F4
:102E100048F06115710539F42091E8002E77209370
:102E2000E80001C0B90140E061157105A9F12091E8
:102E3000E803222309F443C0253009F442C020915D
:102E4000E80023FD40C02091E80022FD32C020911F
:102E5000E80020FFE9CF4091F3002091F20030E03C
:102E6000342BFC01CF016115710559F02830310573
:102E700040F481918093F100615071092F5F3F4FC1
:102E8000F1CF41E02830310509F040E02091E80021
:102E90002E772093E800C8CF4111C9CF0AC0809196
:102EA000E803882361F0853061F08091E80083FDBC
:102EB0000AC08091E80082FFF2CF80E0089582E0AE
:102EC000089583E0089581E008952091EF03309103
:102ED000F0032617370748F06115710539F4209182
:102EE000E8002E772093E80001C0B901FC0120E042
:102EF0006115710591F18091E803882309F440C0C0
:102F0000853009F43FC08091E80083FD3DC0809189
:102F1000E80082FD2FC08091E80080FFE9CF20917A
:102F2000F3008091F20090E0922B6115710559F049
:102F30008830910540F424912093F100319661503E
:102F400071090196F2CF21E0089709F020E0809105
:102F5000E8008E778093E800CBCF2111CCCF0AC058
:102F60008091E803882361F0853061F08091E8006A
:102F700083FD0AC08091E80082FFF2CF80E00895CF
:102F800082E0089583E0089581E00895982F9730B6
:102F900058F59093E900981739F07091EC00209162
:102FA000ED005091F00003C0242F762F50E021FF58
:102FB00019C03091EB003E7F3093EB003091ED0073
:102FC0003D7F3093ED003091EB0031603093EB00AA
:102FD0007093EC002093ED005093F0002091EE00F0
:102FE00027FF07C09F5FD3CF8F708093E90081E0F8
:102FF000089580E008958091E90387FF11C08091D2
:10300000E80082FD05C08091E8038111F8CF11C06E
:103010008091E8008B770BC08091E803882349F00A
:103020008091E80080FFF8CF8091E8008E77809350
:10303000E80008952091E4003091E50095E6409184
:10304000EC00842F817040FF22C08091E80080FD59
:103050001CC08091E803882391F0853091F0809125
:10306000EB0085FD10C04091E4005091E50042174F
:10307000530729F39A01915011F784E0089582E0F3
:10308000089583E0089581E0089580E008954091D7
:10309000E80042FFDECF08950E94BA180E94C218CD
:1030A000E0EEF0E0808181608083E8EDF0E08081F7
:1030B0008F77808319BCA7EDB0E08C918E7F8C93C5
:1030C00080818F7E80831092E70308950F931F9372
:1030D000CF93DF930E94BA180E94C218C8EDD0E0C7
:1030E00088818F77888388818068888388818F7DB5
:1030F000888319BC1092E8031092E4031092E6034F
:103100001092E50300EE10E0F80180818B7F808350
:1031100088818160888342E060E080E00E94C61779
:10312000E1EEF0E080818E7F8083E2EEF0E080814E
:1031300081608083808188608083F80180818E7FB8
:103140008083888180618883DF91CF911F910F9167
:103150000895E8EDF0E080818F7E8083E7EDF0E078
:1031600080818160808384E082BF81E08093E70377
:103170000C946618E8EDF0E080818E7F80831092D9
:10318000E20008951092DA001092E10008951F9273
:103190000F920FB60F9211242F933F934F935F938B
:1031A0006F937F938F939F93AF93BF93EF93FF930F
:1031B0008091E10082FF0BC08091E20082FF07C096
:1031C0008091E1008B7F8093E1000E942E1B809113
:1031D000DA0080FF1FC08091D80080FF1BC0809163
:1031E000DA008E7F8093DA008091D90080FF0DC0D5
:1031F00080E189BD82E189BD09B400FEFDCF81E097
:103200008093E8030E94391505C019BC1092E803A9
:103210000E9447158091E10080FF19C08091E20073
:1032200080FF15C08091E2008E7F8093E200809144
:10323000E20080618093E2008091D80080628093F8
:10324000D80019BC85E08093E8030E944B1580915B
:10325000E10084FF30C08091E20084FF2CC080E157
:1032600089BD82E189BD09B400FEFDCF8091D800FF
:103270008F7D8093D8008091E1008F7E8093E10064
:103280008091E2008F7E8093E2008091E200816075
:103290008093E2008091E403882311F084E007C06A
:1032A0008091E30087FD02C081E001C083E080934C
:1032B000E8030E944C158091E10083FF29C08091B2
:1032C000E20083FF25C08091E100877F8093E100C9
:1032D00082E08093E8031092E4038091E1008E7F06
:1032E0008093E1008091E2008E7F8093E2008091E4
:1032F000E20080618093E20042E060E080E00E94B2
:10330000C6178091F00088608093F0000E944A15F3
:10331000FF91EF91BF91AF919F918F917F916F91AD
:103320005F914F913F912F910F900FBE0F901F9083
:1033300018951F920F920FB60F9211242F933F935F
:103340004F935F936F937F938F939F93AF93BF93AD
:10335000CF93DF93EF93FF93C091E900CF708091FB
:10336000EC00D82FD17080FDD0E81092E900809158
:10337000F000877F8093F00078940E94DD1910920E
:10338000E9008091F00088608093F000CD2BCF7031
:10339000C093E900FF91EF91DF91CF91BF91AF9181
:1033A0009F918F917F916F915F914F913F912F915D
:1033B0000F900FBE0F901F9018951F93CF93DF9320
:1033C000CDB7DEB7AA970FB6F894DEBF0FBECDBF5C
:1033D000E9EEF3E088E08E0F9091F10091938E1367
:1033E000FBCF0E945D158091E80083FF1FC1809193
:1033F000E9039091EA03492F50E04A30510508F063
:1034000015C1FA01EE59FF4F0C949631803881F0C6
:10341000823809F00BC18091ED038F708093E90031
:103420008091EB0085FB882780F91092E90006C0A7
:103430008091E5039091E603911182609091E800FC
:10344000977F9093E8008093F1001092F100C8C03C
:10345000282F2D7F09F0EAC0882319F0823061F00F
:10346000E5C08091EB03813009F0E0C0933009F0B2
:1034700080E08093E6032BC08091EB03811127C08D
:103480008091ED038F7009F4D1C08093E900209101
:10349000EB0020FF1CC0933021F48091EB00806290
:1034A00014C09091EB0090619093EB0021E030E02C
:1034B000A90102C0440F551F8A95E2F74093EA0024
:1034C0001092EA008091EB0088608093EB001092EC
:1034D000E9008091E800877F86C08111A7C0109124
:1034E000EB031F778091E3008078812B8093E300CA
:1034F0008091E800877F8093E8000E94FB1780910D
:10350000E80080FFFCCF8091E30080688093E300B7
:10351000111102C082E001C083E08093E80386C0FD
:103520008058823008F082C08091EB039091EC03C8
:103530008C3D53E0950779F583E08A838AE289839D
:103540004FB7F894DE01139620E03EE051E2E32FFE
:10355000F0E050935700E49120FF03C0E295EF7034
:103560003F5FEF708E2F90E0EA3010F0C79601C0F9
:10357000C0968D939D932F5F243149F74FBF809163
:10358000E800877F8093E8006AE270E0CE01019650
:103590000E94021714C0AE014F5F5F4F6091ED03B0
:1035A0000E944916BC01009709F440C09091E800C0
:1035B000977F9093E80089819A810E946517809196
:1035C000E8008B778093E80031C0803879F58091EE
:1035D000E800877F8093E8008091E4038093F10006
:1035E0008091E8008E778093E8000E94FB171EC050
:1035F00081111CC09091EB039230C0F48091E800DF
:10360000877F8093E8009093E4030E94FB178091EA
:10361000E403811106C08091E30087FD02C081E0D0
:1036200001C084E08093E8030E944E158091E80079
:1036300083FF0AC08091E800877F8093E800809133
:10364000EB0080628093EB00AA960FB6F894DEBF81
:103650000FBECDBFDF91CF911F9108950895CF93F5
:103660008091E8038823A1F0C091E900CF70909188
:10367000EC00892F817090FD80E8C82B1092E90042
:103680008091E80083FD0E94DD19CF70C093E900AE
:10369000CF91089590936F0380936E030895E09106
:1036A0006E03F0916F03309721F00190F081E02DCF
:1036B000099480E00895E0916E03F0916F033097D4
:1036C00021F00280F381E02D09940895E0916E03CA
:1036D000F0916F03309721F00480F581E02D09947B
:1036E000089520916C0330916D038217930771F058
:1036F00090936D0380936C03E0916E03F0916F03E0
:10370000309721F00680F781E02D099408952091EB
:103710006A0330916B038217930771F090936B03E8
:1037200080936A03E0916E03F0916F03309721F06C
:103730000084F185E02D0994089508950C949D1B53
:103740000E94DB270E94D20B0E9461280C94092D55
:103750004F925F927F928F929F92AF92BF92CF9241
:10376000DF92EF92FF920F931F93CF93DF93CDB72A
:10377000DEB72A970FB6F894DEBF0FBECDBF0E940A
:10378000AD0C91E7C92E93E0D92E00E010E0AA24F9
:10379000A394B12C702E802F0E94E60D4C01F601EF
:1037A000419051906F014826592641145104B1F4BB
:1037B0000F5F1F4F0530110569F78FEF89838A83EB
:1037C0001B820E94E4278160782F9D838C8349812E
:1037D0005A816B818D810E94611C3AC08091C70320
:1037E00081FD0E94EF0D20E030E07501022E02C045
:1037F000EE0CFF1C0A94E2F7C70184219521892B66
:1038000009F12E837F828E209F2091E0892809F480
:1038100090E098870E94E4278160782F9A878987B3
:103820004E815F8168858A850E94611C000F111F8F
:10383000F801EF58FC4F80819181E826F926F1824A
:10384000E08206C02F5F3F4F2C30310571F6B0CFBC
:103850000E94482A109170030E944F1B1817D9F03C
:103860000E944F1B809370032A960FB6F894DEBF18
:103870000FBECDBFDF91CF911F910F91FF90EF90C1
:10388000DF90CF90BF90AF909F908F907F905F9090
:103890004F900C940A0B2A960FB6F894DEBF0FBE19
:1038A000CDBFDF91CF911F910F91FF90EF90DF90EF
:1038B000CF90BF90AF909F908F907F905F904F90F0
:1038C0000895CF93DF93CDB7DEB72B970FB6F8945B
:1038D000DEBF0FBECDBF4F83588769877A878B873E
:1038E000DE01119686E0FD0111928A95E9F785E0E7
:1038F000FE01379601900D928A95E1F749815A8130
:103900006B817C818D819E810E9406242B960FB64F
:10391000F894DEBF0FBECDBFDF91CF910895CF9356
:10392000882309F4C2C0C82F823859F40E944F1B63
:1039300081FDBBC089E30E94AF260E94322789E344
:103940000CC0833879F40E944F1B80FDAEC083E524
:103950000E94AF260E94322783E50E94CC26CF9199
:103960000C943227843859F40E944F1B82FD9DC06D
:1039700087E40E94AF260E94322787E4EECF8CEFC7
:103980008C0F813A48F48C2F0E94712C81118DC0CC
:103990008C2F0E94AF26E3CF80E28C0F883048F452
:1039A000C77081E001C0880FCA95EAF70E94EB2634
:1039B000D6CF8BE58C0F833078F4C53A29F0C63A20
:1039C00031F083E890E005C081E890E002C082E831
:1039D00090E0CF910C94711B88E58C0F833108F037
:1039E00064C0C83A39F1C93A41F1CA3A49F1CB3A0F
:1039F00051F1CC3A59F1CD3A61F1C03B69F1CE3A7F
:103A000071F1CF3A79F1C13B81F1C23B89F1C33BFE
:103A100091F1C43B99F1C53BA1F1C63BA9F1C73B6C
:103A2000B1F1C83BB9F1C93BC1F1CA3BC9F180E072
:103A300090E038C082EE90E035C089EE90E032C070
:103A40008AEE90E02FC085EB90E02CC086EB90E0F2
:103A500029C087EB90E026C08CEC90E023C08DEC71
:103A600090E020C083E891E01DC08AE891E01AC090
:103A700082E991E017C084E991E014C081E292E00C
:103A800011C083E292E00EC084E292E00BC085E2B6
:103A900092E008C086E292E005C087E292E002C0B0
:103AA0008AE292E0CF910C94871BCF9108958823EE
:103AB00009F44BC0823859F40E944F1B81FF45C066
:103AC00089E30E94AF260E94322789E30CC0833825
:103AD00071F40E944F1B80FF38C083E50E94AF261F
:103AE0000E94322783E50E94CC260C94322784382A
:103AF00059F40E944F1B82FF28C087E40E94AF2622
:103B00000E94322787E4EFCF9CEF980F913A58F349
:103B100090E2980F983050F4877091E001C0990FAF
:103B20008A95EAF7892F0E94F126DFCF9BE5980F4F
:103B3000933020F480E090E00C94711B885A83311C
:103B400020F480E090E00C94871B0895882321F0F6
:103B50000E94EB260C9432270895882321F00E94BE
:103B6000F1260C9432270895BF92CF92DF92EF9204
:103B7000FF920F931F93CF93DF9300D000D000D01C
:103B8000CDB7DEB725E0FC01DE01119601900D9264
:103B90002A95E1F7FC01D0801181028125812295CF
:103BA0002F7043815481452B09F472C31F3F21F4C8
:103BB000FFEFDF1609F46CC37C012E830E94D3074C
:103BC000D9821A8369817A81802F0E94AB26182FAF
:103BD000B92E0E9460260E9427252E81002319F00D
:103BE0000E9408272E81EB2DE295EF70F0E0E4595A
:103BF000FF4F0C9496318B2D807F9B2D9F70F92E5B
:103C0000882319F0F29480EFF822002389F0FF2036
:103C100009F47CC280E2810F883020F48F2D0E944D
:103C2000EB2603C08F2D0E94FB260E9432276EC216
:103C3000812F0E94571DFF2009F42AC3105E8F2D8B
:103C4000183018F40E94F12602C00E94012726961F
:103C50000FB6F894DEBF0FBECDBFDF91CF911F919D
:103C60000F91FF90EF90DF90CF90BF900C94322790
:103C70008B2D807F9B2D9F70803211F4892F03C084
:103C8000892F8295807F112319F0113011F12BC0FB
:103C90000023A9F0222389F1213079F526960FB669
:103CA000F894DEBF0FBECDBFDF91CF911F910F9172
:103CB000FF90EF90DF90CF90BF900C941B272223B2
:103CC00019F0213009F4E4C28E830E941E278E81F0
:103CD0009BC1002321F0263008F0DAC20EC0253047
:103CE00008F0D6C291C10023C9F0222331F0F701B8
:103CF000958190FF0BC29F70958326960FB6F8941E
:103D0000DEBF0FBECDBFDF91CF911F910F91FF900E
:103D1000EF90DF90CF90BF900C94A61D222309F462
:103D200073C109C22B2D26952695237030E02115ED
:103D3000310521F021303105D1F0AAC2002321F054
:103D4000812F9B2D937002C080E090E026960FB6E5
:103D5000F894DEBF0FBECDBFDF91CF911F910F91C1
:103D6000FF90EF90DF90CF90BF900C94711B0023D9
:103D700021F0812F9B2D937002C080E090E0269669
:103D80000FB6F894DEBF0FBECDBFDF91CF911F916C
:103D90000F91FF90EF90DF90CF90BF900C94871B16
:103DA000812F002319F00E94502902C00E94B829D7
:103DB00026960FB6F894DEBF0FBECDBFDF91CF9130
:103DC0001F910F91FF90EF90DF90CF90BF900C94D8
:103DD0003D2A8B2D837009F07BC0011159C2812FC0
:103DE000829586958770880F880F912F9F70C92EB6
:103DF000D12CE12CF12C082E04C0CC0CDD1CEE1CC7
:103E0000FF1C0A94D2F714FF12C04FE050E060E0AC
:103E100070E004C0440F551F661F771F8A95D2F7C4
:103E2000CB01BA01609570958095909503C060E0D4
:103E300070E0CB012B2D269526952370422F50E064
:103E400042305105D9F04330510569F16C297D2983
:103E50008E299F294130510551F126960FB6F894CD
:103E6000DEBF0FBECDBFDF91CF911F910F91FF90AD
:103E7000EF90DF90CF90BF900C944E256C297D2958
:103E80008E299F2926960FB6F894DEBF0FBECDBFB0
:103E9000DF91CF911F910F91FF90EF90DF90CF9026
:103EA000BF900C946A250E944E25C701B601269644
:103EB0000FB6F894DEBF0FBECDBFDF91CF911F913B
:103EC0000F91FF90EF90DF90CF90BF900C94322530
:103ED000002319F08B2D817001C08695882309F489
:103EE000D7C1812F829586958770880F880F912F73
:103EF0009F70C92ED12CE12CF12C082E04C0CC0CC3
:103F0000DD1CEE1CFF1C0A94D2F714FF12C04FE018
:103F100050E060E070E004C0440F551F661F771F3B
:103F20008A95D2F7CB01BA016095709580959095EE
:103F300003C060E070E0CB012B2D26952695237001
:103F4000422F50E042305105D9F04330510569F11C
:103F50006C297D298E299F294130510551F12696E2
:103F60000FB6F894DEBF0FBECDBFDF91CF911F918A
:103F70000F91FF90EF90DF90CF90BF900C94282688
:103F80006C297D298E299F2926960FB6F894DEBFCD
:103F90000FBECDBFDF91CF911F910F91FF90EF909A
:103FA000DF90CF90BF900C9444260E942826C70132
:103FB000B60126960FB6F894DEBF0FBECDBFDF91D7
:103FC000CF911F910F91FF90EF90DF90CF90BF9016
:103FD0000C940C26103F49F118F4103E48F491C09F
:103FE000123F09F453C0E8F1133F09F464C089C0DB
:103FF0001F708B2D8F71002321F00E94A525812F2A
:104000007CCE0E94C625812F26960FB6F894DEBF7F
:104010000FBECDBFDF91CF911F910F91FF90EF9019
:10402000DF90CF90BF900C94AD1D0023B1F02530F0
:1040300008F02EC18B2D8F7126960FB6F894DEBF37
:104040000FBECDBFDF91CF911F910F91FF90EF90E9
:10405000DF90CF90BF900C94EB25263008F018C16C
:10406000E9CF0023A9F08B2D8F7126960FB6F89417
:10407000DEBF0FBECDBFDF91CF911F910F91FF909B
:10408000EF90DF90CF90BF900C94A525002359F3BB
:104090008B2D8F7126960FB6F894DEBF0FBECDBF65
:1040A000DF91CF911F910F91FF90EF90DF90CF9014
:1040B000BF900C94C625002399F08B2D8F71269606
:1040C0000FB6F894DEBF0FBECDBFDF91CF911F9129
:1040D0000F91FF90EF90DF90CF90BF900C949025C0
:1040E00026960FB6F894DEBF0FBECDBFDF91CF91FD
:1040F0001F910F91FF90EF90DF90CF90BF900C94A5
:1041000086250023A9F0222309F4ADCF812F26961E
:104110000FB6F894DEBF0FBECDBFDF91CF911F91D8
:104120000F91FF90EF90DF90CF90BF900C948F1C79
:10413000222309F4ADCF812F26960FB6F894DEBF67
:104140000FBECDBFDF91CF911F910F91FF90EF90E8
:10415000DF90CF90BF900C94571D4B2D4F70612F67
:10416000C7010E940B0626960FB6F894DEBF0FBE5D
:10417000CDBFDF91CF911F910F91FF90EF90DF9016
:10418000CF90BF900C94AA24011182C09B2D9F70E8
:10419000492F50E04230510509F443C0C4F44115A1
:1041A000510571F14130510509F072C026960FB6E4
:1041B000F894DEBF0FBECDBFDF91CF911F910F915D
:1041C000FF90EF90DF90CF90BF900C94312D433053
:1041D0005105C1F14430510509F05AC0812F26968E
:1041E0000FB6F894DEBF0FBECDBFDF91CF911F9108
:1041F0000F91FF90EF90DF90CF90BF900C94832DA4
:1042000026960FB6F894DEBF0FBECDBFDF91CF91DB
:104210001F910F91FF90EF90DF90CF90BF900C9483
:104220001A2D26960FB6F894DEBF0FBECDBFDF91D4
:10423000CF911F910F91FF90EF90DF90CF90BF90A3
:104240000C944D2D26960FB6F894DEBF0FBECDBF51
:10425000DF91CF911F910F91FF90EF90DF90CF9062
:10426000BF900C94602D4B2D4F70612FC701269687
:104270000FB6F894DEBF0FBECDBFDF91CF911F9177
:104280000F91FF90EF90DF90CF90BF900C94D507E7
:1042900026960FB6F894DEBF0FBECDBFDF91CF914B
:1042A0001F910F91FF90EF90DF90CF90BF900895F6
:1042B0000E9408270E9418270E94DD260E943227AC
:1042C0000E94EE2A0E943D2A80E090E00E94711B2D
:1042D00080E090E00C94871B0E94F8260C945821F3
:1042E0000E94A026292F22952F7030E02C30310516
:1042F0004CF42A3031056CF422503109223031055A
:1043000088F407C02C30310549F02F30310531F0E9
:1043100009C0803E48F0803F29F406C093FB8827FF
:1043200080F9089580E0089581E00895CF93DF93A8
:1043300000D000D01F92CDB7DEB70F900F900F9036
:104340000F900F90DF91CF910895CF93DF9300D01E
:1043500000D000D0CDB7DEB726960FB6F894DEBFFA
:104360000FBECDBFDF91CF9108951F93CF93DF9301
:10437000C0917B0316E080917C03C81799F0D0E0D0
:104380001C9FF0011D9FF00D1124E358FC4F40814C
:10439000518162817381848195810E94A52121963A
:1043A000C770E9CFDF91CF911F9108954091AD0380
:1043B0005091AE036091AF037091B0038091B1034F
:1043C0009091B2030C94A5218091B20382958F70D5
:1043D00009F054C08091AF03882309F44FC0809145
:1043E0007B03A0917C036091AD037091AE0340917B
:1043F000B0035091B103B6E08A1709F43FC090E0D2
:1044000041155105C1F17F3F11F46F3FA1F1B89FF4
:10441000F001B99FF00D1124E358FC4F2181721374
:104420002AC02081621327C02281211124C0238148
:1044300034812417350710F421503109241B350B22
:10444000283C3105C0F42091B2032F7020612093E5
:10445000B20326E0289FF001299FF00D1124EE57AA
:10446000FC4F80818F70806180838DEA93E00E9491
:10447000B41D0C94B52101968770BECF0895CF92DC
:10448000DF92EF92FF920F931F93CF93DF93CDB7FD
:10449000DEB762970FB6F894DEBF0FBECDBF8C01BA
:1044A00085E0F801DE011D9601900D928A95E1F7F5
:1044B000D8014C9111965C91119712966C911297BC
:1044C0001396CD90DC9014973091AD037091AE03AC
:1044D0008091B0039091B103009709F46BC17F3FC5
:1044E00019F43F3F09F466C1E090AF03EE2009F4F0
:1044F000C0C02091B203C816D90628F0F601E81B07
:10450000F90BCF0104C0809590958C0D9D1DFF2463
:10451000F394883C910578F0F12C207F09F0C6C017
:104520007C2DD98AC88A89890E9496218DEA93E0D8
:104530000E94B41DB1C0822F807F09F046C0751360
:1045400014C0341312C0611110C02F702061209369
:10455000B2030E94D6218DEA93E00E94B41D80919F
:10456000B203D80115968C932EC0CD2819F15F3F68
:1045700011F44F3FF9F0F62E61111CC080917B03BE
:1045800020917C0336E0821709F45AC090E0389FEE
:10459000F001399FF00D1124E358FC4F718157133E
:1045A00006C07081471303C07281711103C0019668
:1045B0008770E9CFF62E662309F418C18091B20303
:1045C00081608093B203F12C11C1751308C03413BC
:1045D00006C0611104C08091B203D801C3C04D87E9
:1045E0005E878D859E856A8B0E9470216A898823EB
:1045F000E1F16623D1F12091B203822F82958F7071
:1046000090E0029774F08091AD039091AE0398878B
:104610008F831986DB86CA862C87CE0107960E9477
:10462000B41D86E0F801ADEAB3E001900D928A95E1
:10463000E1F70E94E4210E94D621FF24F394D6C022
:104640004D875E878D859E850E94A026292F229505
:104650002F7030E0223031050CF0BCC09F7009F0A3
:10466000B6C0805E883008F4C1C0C8010E94B41D85
:10467000E4CFC816D90608F453C0F601E81BF90BBD
:10468000CF01883C910508F450C0F12C7C2DD98ACB
:10469000C88A89890E949621EDEAF3E086E0DF016D
:1046A0001D928A95E9F70E94D621A0C0751314C007
:1046B000341312C0611110C08091B203F8018583D8
:1046C000C8010E94B41D86E0EDEAF3E0DF011D920F
:1046D0008A95E9F7FE2C8AC04D875E878D859E8579
:1046E0006A8B0E9470216A89882309F4BECF6623F1
:1046F00009F4BBCF2091B203822F82958F7090E096
:1047000002970CF48ECF8091AD039091AE039A8303
:1047100089831B82DD82CC822E83CE0101967FCFDE
:10472000809590958C0D9D1DACCFF62E662309F4D7
:104730009CCF75132EC034132CC02091B20320FDE2
:104740001FC0822F82958F70D9F0D80115962C93B7
:1047500015978F3049F08F5F982F9295907F822F19
:104760008F70892B15968C93C8010E94B41D86E02A
:10477000F801ADEAB3E001900D928A95E1F793CF8D
:1047800086E0F801ADEAB3E001900D928A95E1F779
:104790002DC04D875E878D859E850E947021811179
:1047A00040CF8091B20381608093B203C8010E9420
:1047B000B41D1CC0662309F458CF4D875E878D85D4
:1047C0009E850E947021882309F44FCF2ACF811142
:1047D00048CF0CC0243031050CF047CF9F7009F44E
:1047E00040CFF8019581907F09F03BCF8F2D6296E5
:1047F0000FB6F894DEBF0FBECDBFDF91CF911F91F2
:104800000F91FF90EF90DF90CF9008951F93CF937B
:10481000DF93CDB7DEB72C970FB6F894DEBF0FBE8F
:10482000CDBF4F83588769877A878B879C87CE0156
:1048300007960E943F22882369F08F8198852A85F8
:104840003B85232BF1F19F3F09F063C08F3F09F0B7
:1048500060C037C086E0FE013796DE0111960190F8
:104860000D928A95E1F76F817885EA85FB8530970F
:1048700041F17F3F11F46F3F21F120917C0330E043
:10488000C90101968770992740917B0350E08417F6
:10489000950709F447C069837A83FD83EC8396E02A
:1048A000929FD001939FB00D1124A358BC4FFE01DD
:1048B000319601900D929A95E1F780937C030E94C6
:1048C000B52116E080917B0390917C038917C1F19B
:1048D000189FC001112483589C4F0E943F228823B7
:1048E00079F1E0917B031E9FF0011124E358FC4F06
:1048F0004081518162817381848195810E94A521CB
:1049000080917B0390E001968770992780937B03C9
:10491000D9CF4F81588569857A858B859C850E9482
:10492000A521CFCF0E946C2110927C0310927B03B3
:10493000EDEAF3E086E0DF011D928A95E9F7C1CF49
:104940002C960FB6F894DEBF0FBECDBFDF91CF918E
:104950001F910895EF92FF920F931F93CF93DF93D0
:104960008C01009709F46CC0F12CEE24E394E8016B
:104970002196F8018491843740F4843008F051C0C6
:10498000813081F0823019F15BC0853709F444C071
:10499000A8F19CE7980F903708F052C08F770E94DB
:1049A000571D41C00E5F1F4FFE01C49180E28C0F66
:1049B000883048F4C7708E2D01C0880FCA95EAF779
:1049C0000E940B2714C08C2F0E948F1C2DC00E5FDD
:1049D0001F4FFE01C49180E28C0F883058F4C770DD
:1049E0008E2D01C0880FCA95EAF70E9411270E94F8
:1049F00032271AC08C2F0E94571D16C00E5F1F4F02
:104A0000FE01C491CC2381F08FE99FE00197F1F77B
:104A100000C00000C150F6CF0E5F1F4FFE01F490A2
:104A200003C00E948F1C8E018F2D882309F49FCF15
:104A3000EFE9FFE03197F1F700C000008150F5CFBA
:104A4000DF91CF911F910F91FF90EF9008950895FE
:104A50006093B7037093B8038093B9039093BA033C
:104A60000C9458210F931F930091B7031091B80332
:104A70002091B9033091BA03DC01CB01802B912B3B
:104A8000A22BB32B8093B7039093B803A093B903E1
:104A9000B093BA031F910F910C9458210F931F9359
:104AA0000091B7031091B8032091B9033091BA0374
:104AB000DC01CB0180239123A223B3238093B7038E
:104AC0009093B803A093B903B093BA031F910F91C9
:104AD0000C9458210F931F930091B7031091B803C2
:104AE0002091B9033091BA03DC01CB0180279127D3
:104AF000A227B3278093B7039093B803A093B90379
:104B0000B093BA031F910F910C9458211092B303E4
:104B10001092B4031092B5031092B6030C9458216E
:104B200041E050E060E070E004C0440F551F661F94
:104B3000771F8A95D2F74093B3035093B4036093E1
:104B4000B5037093B6030C94582141E050E060E047
:104B500070E004C0440F551F661F771F8A95D2F777
:104B60008091B3039091B403A091B503B091B603C3
:104B7000482B592B6A2B7B2B4093B3035093B403E0
:104B80006093B5037093B6030C94582141E050E054
:104B900060E070E004C0440F551F661F771F8A95C0
:104BA000D2F740955095609570958091B3039091A0
:104BB000B403A091B503B091B603482359236A23E7
:104BC0007B234093B3035093B4036093B503709376
:104BD000B6030C94582141E050E060E070E004C05E
:104BE000440F551F661F771F8A95D2F78091B30334
:104BF0009091B403A091B503B091B603482759270B
:104C00006A277B274093B3035093B4036093B503A3
:104C10007093B6030C9458210F931F930091B30324
:104C20001091B4032091B5033091B603DC01CB01A0
:104C3000802B912BA22BB32B8093B3039093B403BF
:104C4000A093B503B093B6031F910F910C94582114
:104C50000F931F930091B3031091B4032091B503F8
:104C60003091B603DC01CB0180239123A223B3232F
:104C70008093B3039093B403A093B503B093B603AA
:104C80001F910F910C9458210F931F930091B30320
:104C90001091B4032091B5033091B603DC01CB0130
:104CA00080279127A227B3278093B3039093B4035F
:104CB000A093B503B093B6031F910F910C945821A4
:104CC0000895CF92DF92EF92FF920F931F93CF93AD
:104CD000DF938C01C090B703D090B803E090B90384
:104CE000F090BA038091B3039091B403A091B503FF
:104CF000B091B603C82AD92AEA2AFB2ACFE1D0E02C
:104D0000D701C6010C2E04C0B695A7959795879537
:104D10000A94D2F780FF06C0B8018C2F0E942F0A98
:104D2000019721F4219760F780E001C08C2FDF917B
:104D3000CF911F910F91FF90EF90DF90CF9008954A
:104D4000CF93DF93EC010E946126BE010E942F0ADF
:104D5000DF91CF910895CB010E94A0260895209164
:104D60001D0230911E02F90132969FEF40E05191F1
:104D7000581789F09F3F19F4511101C0942F4F5FCC
:104D80004630A9F79F3F39F0F901E90FF11D97FD72
:104D9000FA9582830895089520911D0230911E0294
:104DA000F9013296285F3F4F9081981301C010821D
:104DB0003196E217F307C1F7089581E090E0E091A2
:104DC0001D02F0911E02E80FF91F10820196883033
:104DD0009105A9F708959091C603892B8093C60386
:104DE000089580959091C60389238093C603089502
:104DF0001092C60308959091C503892B8093C50333
:104E0000089580959091C50389238093C5030895E3
:104E10001092C50308959091C403892B8093C40315
:104E2000089580959091C40389238093C4030895C5
:104E30001092C40308958093BB0308951092BB039E
:104E4000089580911D0290911E02FC0131969C01F3
:104E5000285F3F4F80E0919191118F5FE217F30738
:104E6000D1F70895E0911D02F0911E028091C603D2
:104E70008083E0911D02F0911E0290818091C50314
:104E8000892B8083E0911D02F0911E029081809118
:104E9000C403892B80838091BB03882361F0E09158
:104EA0001D02F0911E029081892B80830E94212790
:104EB00081111092BB0380911D0290911E020C94EF
:104EC0005B1B8091E803843039F11092C80320E421
:104ED00088E190E00FB6F894A895809360000FBE2B
:104EE0002093600080E00E94D20580E00E940A0BBF
:104EF00083B7817F846083BF83B7816083BF7894E9
:104F0000889583B78E7F83BF88E10FB6F89480932E
:104F10006000109260000FBE089508950895CF9329
:104F200080E00E94D2050E948D270E94AD0C0E9455
:104F30008E27C0E08C2F0E94E60D892B29F4CF5FCD
:104F4000C530C1F780E001C081E0CF9108950E9493
:104F50006C2180E00E94D2050E94092D0E944F1B07
:104F60000C940A0B1F920F920FB60F9211248F937D
:104F70009F93AF93BF938091C803811113C0809119
:104F8000C9039091CA03A091CB03B091CC03419681
:104F9000A11DB11D8093C9039093CA03A093CB03B5
:104FA000B093CC03BF91AF919F918F910F900FBEA3
:104FB0000F901F90189582E084BD93E095BD9AEF05
:104FC00097BD80936E0008952FB7F8948091C90320
:104FD0009091CA03A091CB03B091CC032FBF089549
:104FE000CF92DF92EF92FF920F931F932FB7F89417
:104FF0004091C9035091CA036091CB037091CC03D7
:105000002FBF6A017B01EE24FF248C0120E030E0F9
:10501000C016D106E206F30610F4415051099A0178
:10502000281B390BC9011F910F91FF90EF90DF9062
:10503000CF9008951F920F920FB60F9211248F9365
:105040009F93AF93BF938091C9039091CA03A0919E
:10505000CB03B091CC030196A11DB11D8093C90370
:105060009093CA03A093CB03B093CC03BF91AF91AD
:105070009F918F910F900FBE0F901F9018950E94D7
:105080004C18F8942FEF87EA91E621508040904029
:10509000E1F700C0000087E090EBDC018093F303B0
:1050A0009093F403A093F503B093F6039CE088E19A
:1050B0000FB6F894A895809360000FBE909360009F
:1050C000FFCF0E949B28811102C00E9477280E9476
:1050D000A6288093C7030E94B3288093F1030E94FF
:1050E000AA28682F70E080E090E00C9428256DEEEF
:1050F0007EEF80E090E00E94BC3160E082E090E0D2
:105100000E94AA3160E083E090E00E94AA3160E052
:1051100084E090E00E94AA3160E085E090E00E9487
:10512000AA3160E086E090E00E94AA316FEF87E04C
:1051300090E00C94AA3180E090E00E94A43121E03C
:105140008D3E9E4F09F020E0822F089582E090E08E
:105150000C949C3183E090E00C949C31682F83E0A8
:1051600090E00C94AA3184E090E00C949C31682F7C
:1051700084E090E00C94AA3186E090E00C949C319D
:10518000682F86E090E00C94AA3187E090E00C94C0
:105190009C31682F87E090E00C94AA318091CF0376
:1051A00080FF0BC06091220285E0689FB00111244E
:1051B00075956795759567952BC081FF09C06091BE
:1051C000220285E0689FB00111247595679520C083
:1051D00082FF07C06091220285E0689FB001112420
:1051E00017C09091D0039923D1F0609121029617B6
:1051F00088F72091220285E0289F90011124929F38
:10520000A001939F500D112470E0CA010E948231C9
:105210006038710540F46115710539F002C065E030
:1052200070E0862F08958FE7089581E008958091BA
:10523000CF0380FF08C06091200270E075956795EC
:105240007595679521C081FF06C06091200270E0CE
:105250007595679519C082FF04C06091200270E0C7
:1052600010C09091D0039923C1F060911F0296174E
:10527000A0F780912002899FC001112470E00E9454
:1052800082316038710528F46115710521F0862F8F
:1052900008958FE7089581E0089561E070E0F4CF0C
:1052A000803F21F40E94CE28819504C0813F29F4DB
:1052B0000E94CE288093D3030895823F21F40E9458
:1052C000CE28819504C0833F29F40E94CE28809384
:1052D000D2030895893F19F40E94172905C08A3F17
:1052E00031F40E94172981958093D40308958B3F50
:1052F00021F40E941729819504C08C3F29F40E9453
:1053000017298093D5030895843F21F48091D10318
:10531000816017C0853F21F48091D103826011C064
:10532000863F21F48091D10384600BC0873F21F434
:105330008091D103886005C0883F31F48091D1030A
:1053400080618093D10308958D3F21F48091CF0334
:1053500081600BC08E3F21F48091CF03826005C035
:105360008F3F29F48091CF0384608093CF03089509
:10537000803F39F48091D30387FF6CC01092D30330
:1053800069C0813F29F48091D3031816BCF362C031
:105390009091D203823F29F497FF5CC01092D20310
:1053A00059C0833F19F41916CCF354C0893F41F416
:1053B0008091D40318160CF04DC01092D4034AC04B
:1053C0008A3F29F48091D40387FF44C0F6CF8B3FF6
:1053D00039F48091D50387FF3DC01092D5033AC0C0
:1053E0008C3F29F48091D5031816BCF333C0843F59
:1053F00021F48091D1038E7F17C0853F21F48091E5
:10540000D1038D7F11C0863F21F48091D1038B7F22
:105410000BC0873F21F48091D103877F05C0883F6F
:1054200031F48091D1038F7E8093D10313C08D3FDF
:1054300021F48091CF038E7F0BC08E3F21F48091A9
:10544000CF038D7F05C08F3F29F48091CF038B7FE1
:105450008093CF038091D20381110EC08091D3033A
:1054600081110AC08091D403811106C08091D503B7
:10547000811102C01092D003089581ED93E00E9443
:10548000661B0E94E4279093CE038093CD0308957A
:105490001F93CF93DF938091CD039091CE030E9411
:1054A000F027AC019091D003992321F020912302A1
:1054B00030E006C0209124028AE0289F9001112448
:1054C0004217530708F486C08091D203C091D303DA
:1054D000D091D4031091D503811107C0C11176C0BA
:1054E000D11174C0111172C075C09F3F19F09F5F38
:1054F0009093D003181624F40E94CE288093D203F0
:105500008091D20387FF05C00E94CE2881958093A9
:10551000D2031C1624F40E94CE288093D3038091DA
:10552000D30387FF05C00E94CE2881958093D303C3
:105530006091D203662339F1C091D303CC2319F1D2
:10554000772767FD7095872F972F0E94A42E23E35E
:1055500033E343E35FE30E94B42F0E94712E609314
:10556000D2036C2F772767FD7095872F972F0E94A6
:10557000A42E23E333E343E35FE30E94B42F0E94AE
:10558000712E6093D3031D1624F40E941729809373
:10559000D4038091D40387FF05C00E941729819509
:1055A0008093D403111624F40E9417298093D50305
:1055B0008091D50387FF05C00E94172981958093AC
:1055C000D503DF91CF911F910C943D2A9F3F09F0A5
:1055D0008ECF96CFDF91CF911F910895E1EDF3E04B
:1055E00085E0DF011D928A95E9F71092D0031092B1
:1055F000CF030895833081F128F4813059F082304F
:10560000D1F00895853009F449C0B8F1863009F425
:1056100056C0089580912402262F30E0280F311DB6
:105620002F3F310524F4680F6093240208958FEF13
:1056300080932402089580912302262F30E0280FC2
:10564000311D2F3F310524F4680F60932302089524
:105650008FEF80932302089580912202262F30E05D
:10566000280F311D2F3F310524F4680F609322026B
:1056700008958FEF80932202089580912102262FB2
:1056800030E0280F311D2F3F310524F4680F60935F
:10569000210208958FEF80932102089580912002C6
:1056A000262F30E0280F311D2F3F310524F4680FDD
:1056B0006093200208958FEF8093200208958091D7
:1056C0001F02262F30E0280F311D2F3F310524F413
:1056D000680F60931F0208958FEF80931F02089553
:1056E000833011F128F4813049F0823091F008952F
:1056F000853081F120F18630C1F108958091240236
:10570000681720F4861B80932402089510922402C7
:10571000089580912302681720F4861B809323024A
:10572000089510922302089580912202681720F4B0
:10573000861B809322020895109222020895809180
:105740002102681720F4861B80932102089510928D
:105750002102089580912002681720F4861B80930F
:105760002002089510922002089580911F02681768
:1057700020F4861B80931F02089510921F02089543
:105780000F931F938732D8F58E3108F087C08E3083
:1057900009F471C098F4873009F45BC08B3009F4C8
:1057A00091C0863009F095C08091C703817F8E7FBC
:1057B0008093C70381E08093D7038CC0863109F4BE
:1057C00081C068F4803109F084C08091C70383FBF5
:1057D000222720F991E0922790FB83F955C0893167
:1057E00009F470C08B3109F074C08091C70381FB4C
:1057F000222720F991E0922790FB81F945C0883358
:1058000009F460C050F4893209F45EC0853309F4AC
:105810005BC0873209F458C05CC0833409F454C0BB
:1058200028F48A3308F455C0895339C0883409F004
:1058300050C00E946C210E94B2070FEF13ED20E3CD
:10584000015010402040E1F700C000000E943F28B6
:1058500039C09091C703892F8095817080FB90F9A2
:1058600029F0966098609093C70334C0997F977F22
:105870009093C70327C08091C70382FB222720F99A
:1058800091E0922790FB82F98093C7039923D1F08E
:105890008091C70381608093C70314C08D5141E09C
:1058A00050E060E070E08A019B0104C0000F111F0E
:1058B000221F331F8A95D2F7C901B8010E942825FB
:1058C0000E946C2181E006C061E070E080E090E021
:1058D000F5CF80E01F910F91089580E0089580E05A
:1058E0000895CF93C82F8091D703813069F018F0C5
:1058F0008230C9F184C0E0911D02F0911E028081C6
:10590000823209F07EC007C0E0911D02F0911E02B4
:105910008081823261F48C2F0E946D2C811104C031
:105920008C2F0E94C02B1DC081E090E01AC08C2FEC
:105930000E946F2C811114C0C43179F048F4CB302F
:1059400079F0C03109F061C082E08093D70308C0CC
:10595000C93219F0C83321F058C01092D70355C08E
:1059600081E0817054C0C93291F120F5C43179F1E0
:10597000B0F4C73009F047C08EE18093240282E37F
:10598000809323028AE08093220284E180932102A3
:1059900088E08093200288E280931F0234C0CE51B9
:1059A000C63088F5EC2FF0E0E451FD4F8081809304
:1059B000D60329C0CE34E9F020F4CB3421F56AE0D7
:1059C00013C0C13579F0C235F1F461E00DC08091AA
:1059D000D603882319F01092D60315C081E0809376
:1059E000D70315C061E006C08091D6030E94FA2A51
:1059F0000AC06AE08091D6030E94702B04C0109206
:105A0000D70380E004C081E002C080E0AACFCF913C
:105A100008950E949B28811102C00E9477280E944D
:105A2000BC288093F20380FF02C0869501C080E00D
:105A30000C94D2058091F203982F9695292F30E08F
:105A4000233031054CF49F5F990F8170892B816061
:105A50008093F2030E94C0288091F20386950C94F3
:105A6000D2058091F203982F969591F09158990F55
:105A70008170892B8093F2038E7F91E009F490E08E
:105A80008091F20390FB80F98093F2030E94C0287A
:105A90008091F20386950C94D2058091F203982FA1
:105AA000909590FB80F98093F2030E94C02880912A
:105AB000F20380FF02C0869501C080E00C94D205FD
:105AC0009091F203892F86958F5F8F779170843044
:105AD00028F4880F892B8093F20302C09093F2037D
:105AE0008091F2038E7F91E009F490E08091F203BF
:105AF00090FB80F98093F2030E94C0288091F2030A
:105B000086950C94D2052091F203922F96958927C1
:105B1000982F990F822F8170892B8093F2038E7FAB
:105B200091E009F490E08091F20390FB80F980937A
:105B3000F2030E94C0288091F20386950C94D2054E
:105B40005058BB27AA270ED0D1C1C2D130F0C7D13F
:105B500020F031F49F3F11F41EF4B7C10EF4E0952C
:105B6000E7FB9FC1E92FD3D180F3BA176207730710
:105B70008407950718F071F49EF5EBC10EF4E095DB
:105B80000B2EBA2FA02D0B01B90190010C01CA01F7
:105B9000A0011124FF27591B99F0593F50F4503EA2
:105BA00068F11A16F040A22F232F342F4427585F94
:105BB000F3CF469537952795A795F0405395C9F7AC
:105BC0007EF41F16BA0B620B730B840BBAF0915064
:105BD000A1F0FF0FBB1F661F771F881FC2F70EC003
:105BE000BA0F621F731F841F48F4879577956795D6
:105BF000B795F7959E3F08F0B3CF9395880F08F0BF
:105C00009927EE0F97958795089527D108F481E09D
:105C100008950CD06BC163D140F05AD130F021F41B
:105C20005F3F19F03EC1511195C14FC170D198F33A
:105C30009923C9F35523B1F3951B550BBB27AA270D
:105C400062177307840738F09F5F5F4F220F331F7F
:105C5000441FAA1FA9F333D00E2E3AF0E0E830D04B
:105C600091505040E695001CCAF729D0FE2F27D04E
:105C7000660F771F881FBB1F261737074807AB071C
:105C8000B0E809F0BB0B802DBF01FF2793585F4F91
:105C90002AF09E3F510568F004C15CC15F3FECF300
:105CA000983EDCF3869577956795B795F7959F5F56
:105CB000C9F7880F911D9695879597F90895E1E0AA
:105CC000660F771F881FBB1F621773078407BA0709
:105CD00020F0621B730B840BBA0BEE1F88F7E09564
:105CE000089504D06894B11135C1089518D188F091
:105CF0009F5790F0B92F9927B751A0F0D1F0660FB8
:105D0000771F881F991F1AF0BA95C9F712C0B130D2
:105D100081F01FD1B1E008951CC1672F782F88272B
:105D2000B85F39F0B93FCCF3869577956795B39511
:105D3000D9F73EF490958095709561957F4F8F4F80
:105D40009F4F0895E89409C097FB3EF49095809585
:105D5000709561957F4F8F4F9F4F9923A9F0F92F31
:105D600096E9BB279395F695879577956795B795AF
:105D7000F111F8CFFAF4BB0F11F460FF1BC06F5F95
:105D80007F4F8F4F9F4F16C0882311F096E911C0A7
:105D9000772321F09EE8872F762F05C0662371F0C8
:105DA00096E8862F70E060E02AF09A95660F771FDC
:105DB000881FDAF7880F9695879597F9089588D008
:105DC00018F011F08CD038F480C0C4C0E92F9FD0F7
:105DD000B0F35523C9F3E7FB6217730784079507F0
:105DE000A8F199F3E92FFF2788232AF03197660F4E
:105DF000771F881FDAF7952F5527442332F09150EB
:105E00005040220F331F441FD2F7BB27E91BF50B6D
:105E1000621B730B840BB109C1F222F4620F731F72
:105E2000841FB11D31972AF0660F771F881FBB1F93
:105E3000EFCF915050405AF041F0882332F0660F76
:105E4000771F881F91505040C1F7939530C08695B9
:105E5000779567959F5FD9F7F8CF990F0008550F91
:105E6000AA0BE0E8FEEF16161706E807F907C0F0E0
:105E700012161306E407F50798F0621B730B840BE8
:105E8000950B39F40A2661F0232B242B252B21F4C2
:105E900008950A2609F4A140A6958FEF811D811D62
:105EA000089597F99F6780E870E060E008959F3F4C
:105EB00031F0915020F4879577956795B795880FC5
:105EC000911D9695879597F908959FEF80EC089519
:105ED00000240A94161617061806090608950024C9
:105EE0000A9412161306140605060895092E039443
:105EF000000C11F4882352F0BB0F40F4BF2B11F4B7
:105F000060FF04C06F5F7F4F8F4F9F4F089557FD15
:105F10009058440F551F59F05F3F71F04795880F17
:105F200097FB991F61F09F3F79F0879508951216AE
:105F300013061406551FF2CF4695F1DF08C016165A
:105F400017061806991FF1CF86957105610508940B
:105F50000895E894BB2766277727CB0197F9089522
:105F60007CDF08F48FEF08950BD0C0CFB1DF28F0AD
:105F7000B6DF18F0952309F094CFA7CF1124EACF0C
:105F8000C6DFA0F3959FD1F3950F50E0551F629F98
:105F9000F001729FBB27F00DB11D639FAA27F00D82
:105FA000B11DAA1F649F6627B00DA11D661F829FA9
:105FB0002227B00DA11D621F739FB00DA11D621F8E
:105FC000839FA00D611D221F749F3327A00D611DAB
:105FD000231F849F600D211D822F762F6A2F11248D
:105FE0009F5750408AF0E1F088234AF0EE0FFF1FE0
:105FF000BB1F661F771F881F91505040A9F79E3F17
:10600000510570F04ECFA6CF5F3FECF3983EDCF326
:10601000869577956795B795F795E7959F5FC1F753
:10602000FE2B880F911D9695879597F90895FA0193
:10603000EE0FFF1F30962105310599F161157105AD
:1060400061F48038BFE39B0749F16894903881057B
:1060500061F08038BFEF9B0741F0992342F5FF3F85
:10606000E1053105210511F1E8940894E795D9017E
:10607000AA2329F4AB2FBE2FF85FD0F310C0FF5F27
:1060800070F4A695E0F7F73950F019F0FF3A38F4BC
:106090009F779F930CD00F9007FC905808953EF087
:1060A00014CF60E070E080E89FE308954FE79F77AA
:1060B0005F934F933F932F939ED02F913F914F919A
:1060C0005F9152DF05C019F40EF0EBCE42CFFDCE4A
:1060D00026DFC8F39638C0F707F80F92E8942BE351
:1060E0003AEA48EB5FE74EDF0F920F920F924DB7FF
:1060F0005EB70F92C0D0E8EFF0E016D04F915F91FD
:10610000EF91FF91E595EE1FFF1F49F0FE57E06804
:106110004427EE0F441FFA95E1F74195550B32D015
:106120000F9007FE26C00895DF93CF931F930F9320
:10613000FF92EF92DF927B018C01689405C0DA2E0A
:10614000EF011EDFFE01E894A5912591359145915F
:106150005591AEF3EF0106DDFE019701A801DA9437
:1061600079F7DF90EF90FF900F911F91CF91DF9122
:1061700008959B01AC0160E070E080E89FE349CDA9
:1061800090CE95CECCDEE8F39923D9F3940F511D30
:10619000BBF39150504094F059F0882332F0660FD1
:1061A000771F881F91505040C1F79E3F510544F71B
:1061B000880F911D9695879597F908955F3FACF0EC
:1061C000983E9CF0BB27869577956795B79508F420
:1061D000B1609395C1F7BB0F58F711F460FFE8CF9A
:1061E0006F5F7F4F8F4F9F4FE3CFB4CE0EF05FCEE8
:1061F0006CCE689456CE93DEC8F39923D1F3C6F3E0
:10620000DF93CF931F930F93FF92C92FDD2788232E
:106210002AF02197660F771F881FDAF720E030E019
:1062200040E85FEB9FE3883920F0803E30F0219614
:106230008F7787DCE0E2F1E003C083DCEDE4F1E09E
:1062400073DF8B01BE01EC01FB2E6F577109759551
:10625000771F880B990B78DD28E132E741E35FE394
:106260008FDEAF2D9801AE01FF900F911F91CF915E
:10627000DF9178DC3BCEFA01DC01AA0FBB1F9B014A
:10628000AC01BF5728F422273327442750781FC07A
:10629000B75188F4AB2F0024469537952795011CFC
:1062A000A395D2F3002069F0220F331F441FB3954A
:1062B000DAF30DD045CC61307105A0E88A07B94604
:1062C00030F49B01AC0166277727882790783096B9
:1062D00021F020833183428353830895AA1BBB1B83
:1062E00051E107C0AA1FBB1FA617B70710F0A61BD6
:1062F000B70B881F991F5A95A9F780959095BC01F7
:10630000CD01089597FB072E16F4009407D077FD72
:1063100009D00E946E3107FC05D03EF4909581951E
:106320009F4F0895709561957F4F0895EE0FFF1F61
:106330000590F491E02D0994F999FECF92BD81BDAD
:10634000F89A992780B50895A8E1B0E042E050E0BE
:106350000C94C431262FF999FECF92BD81BDF89AD5
:10636000019700B4021639F01FBA20BD0FB6F89499
:10637000FA9AF99A0FBE08950196272F0E94AB3121
:106380000C94AA31DC01CB01FC01F999FECF06C0C7
:10639000F2BDE1BDF89A319600B40D9241505040E3
:0863A000B8F70895F894FFCF4F
:1063A8000C52D02445000000410000DC44000000ED
:1063B8004152D0A4440000404100005C4400000069
:1063C8004148F17644000000415C978A440000008F
:1063D800411FD592440000004152D0A4440000005F
:1063E800415CFFB844000000410AA7CF4400000008
:1063F800410000DC44000000410AA7CF440000002F
:10640800410000DC44000000410000000000008062
:106418004052D024450000404100000000000080A8
:10642800400AA74F45000040410AA7CF440000009A
:10643800410000DC44000000410000000000008032
:106448004052D024450000004100000000000080B8
:10645800405CFF384500000041000000000000805B
:106468004052D02445000000410AA7CF4400000054
:10647800410000DC440000004100000000000080F2
:106488004052D024450000804110F176440000A01D
:106498004112F1F6440000004141909B440000A0E5
:1064A8004112F1F64400000041050000003F0000E1
:1064B800C8427B140915E614B2147E1401BC0328E3
:1064C80008140A321E000002000400050007000933
:1064D800000B000C000E001000110013001500172F
:1064E8000018001A001C001D001F002100230024B2
:1064F800002600280029002B002D002F0030003234
:106508000034003500370039003B004200450025C3
:106518000026004300610060002000370064006529
:1065280000660067004400460024004700314980A7
:106538003F5D8B803FF8BF803FCAE1803F73ED80AD
:106548003FCAE1803FF8BF803F5D8B803F31498083
:106558003F0000803FF16D7F3F75EA7E3F4C827EB1
:106568003F833F7E3F84287E3F833F7E3F4C827E31
:106578003F75EA7E3FF16D7F3F0000803F3F4D361B
:10658800B90A6C0A360AE209FB09140A0102030473
:06659800050607080900DA
:00000001FF

@ -1,1189 +0,0 @@
:100000000C9465020C94A9020C94A9020C94A90208
:100010000C94A9020C94A9020C94A9020C94A902B4
:100020000C94A9020C94A9020C94430D0C94150E87
:100030000C942B1C0C94A9020C94A9020C94A902F8
:100040000C94A9020C94A9020C94A9020C94A90284
:100050000C94A9020C94981C0C94A9020C94A9026B
:100060000C94A9020C94A9020C94A9020C94A90264
:100070000C94A9020C94A9020C94A9020C94A90254
:100080000C94A9020C94A9020C94A9020C94A90244
:100090000C94A9020C94A9020C94A9020C94A90234
:1000A0000C94A9020C94A9020C94A90235001E001C
:1000B0001F0020002100220023002400250026002C
:1000C00027002A002B0014001A0008001500170052
:1000D0001C0018000C00120013002A002900040064
:1000E0001600070009000A000B000D000E000F00AB
:1000F00033003400E1001D001B000600190005005C
:100100001100100036003700380028000030E000F1
:10011000E200E30003522C002C0004525000510076
:1001200052004F0035001E001F0020002100220059
:10013000230024002500260027002A002B0014009D
:100140001A00090013000A000D000F0018001C001F
:1001500033002A00290004001500160017000700CC
:100160000B00110008000C0012003400E1001D001B
:100170001B000600190005000E00100036003700B5
:10018000380028000030E000E200E30003522C00B9
:100190002C0004525000510052004F0035001E0048
:1001A0001F0020002100220023002400250026003B
:1001B00027002A002B0034003600370013001C00F3
:1001C00009000A00060015000F002A00290004009B
:1001D0001200080018000C0007000B0017001100A7
:1001E00016003800E100330014000D000E001B0063
:1001F000050010001A0019001D0028000030E00062
:10020000E200E30003522C002C0004525000510085
:1002100052004F0035001E001F0020002100220068
:10022000230024002500260027002A0035021E0294
:100230001F0220022102220223022402250226029A
:1002400027022A0001003A003B003C003D003E002E
:100250003F002D022E022F02300231020100400029
:100260004100420043004400450000530153025343
:100270000050010001000100010001000100010027
:1002800001000100AB00AA00A900AE0035001E006D
:100290001F0020002100220023002400250026004A
:1002A00027002A0035001E001F0020002100220028
:1002B000230024002500260027002A0001003A0020
:1002C0003B003C003D003E003F002D002E002F0073
:1002D0003000310001004000410042004300440072
:1002E000450000530153025300500100010001007A
:1002F000010001000100010001000100AB00AA00A3
:10030000A900AE002A0354006800650020005000D8
:10031000720065006F006E006900630020004B00F2
:100320006500790062006F006100720064000000E7
:100330002C034F007200740068006F006C006900AD
:100340006E0065006100720020004B0065007900BE
:1003500062006F006100720064007300000004031B
:10036000090409027400040100A0FA090400000154
:1003700003010100092111010001223F000705814D
:100380000308000A09040100010301020009211108
:10039000010001224D000705820308000A0904023A
:1003A00000010300000009211101000122360007AD
:1003B00005830308000A0904030002030000000982
:1003C00021110100012220000705840320000107FC
:1003D0000504032000011201100100000008EDFED9
:1003E00061600100010200010631FF0974A10109E9
:1003F00075150025FF9520750881020976150025E1
:10040000FF952075089102C005010980A1018502B0
:1004100016010026B7001A01002AB70075109501D1
:100420008100C0050C0901A1018503160100269C6D
:10043000021A01002A9C02751095018100C0050175
:100440000902A1010901A1000509190129051500E9
:10045000250195057501810295017503810105014D
:10046000093009311581257F950275088106093803
:100470001581257F950175088106050C0A3802153E
:1004800081257F950175088106C0C005010906A177
:1004900001050719E029E715002501950875018177
:1004A0000295017508810105081901290595057551
:1004B0000191029501750391010507190029FF15A6
:1004C0000025FF950675088100C011241FBECFEFDF
:1004D000DAE0DEBFCDBF04B603FE24C08091F10197
:1004E0009091F201A091F301B091F4018730904B0B
:1004F000A740B04BB9F41092F1011092F2011092A2
:10050000F3011092F40114BE84B7877F84BF88E1A1
:100510000FB6F89480936000109260000FBEE0E088
:10052000F8E3099511E0A0E0B1E0E0EEF9E402C0E3
:1005300005900D92A435B107D9F711E0A4E5B1E01B
:1005400001C01D92A13FB107E1F70E94720A0C940D
:10055000EE240C94000061110DC0FC0182818823FF
:1005600031F085EE0E9426110E94272303C085EEFC
:100570000E94EE1180E090E00895089508950E9491
:10058000D1026E9A769A8DEB92E0892B11F00C9441
:10059000BD0208958EEB92E0892B11F00C94BE02FF
:1005A0000895279A2F988FEF9FEF9093870080935D
:1005B00086008AE08093800089E1809381000C941A
:1005C000D02281110BC080918000877F80938000B2
:1005D00010928D0010928C002F9808952F988330E0
:1005E00041F4809180008860809380008FEF9FEFBE
:1005F00012C09091800098609093800023E030E0DA
:10060000281B3109220F331F8FEF9FEF02C09695F1
:1006100087952A95E2F790938D0080938C0008953A
:100620008B3B910568F4883A910530F5853A910540
:10063000C0F48430910598F4019709F06FC071C03F
:10064000803E910508F46AC0883E910540F09C0107
:10065000205F31092031310508F060C05CC09C0189
:10066000A1C0853A910509F45FC0863A910509F465
:100670005EC023E830E496C0883A910509F45AC078
:10068000893A910509F459C08A3A910509F458C08C
:100690008B3A910509F457C08C3A910509F456C07C
:1006A0008D3A910509F455C0803B910509F454C079
:1006B0008E3A910509F453C08F3A910509F452C05E
:1006C000813B910509F451C0823B910509F450C06A
:1006D000833B910509F44FC0843B910509F44EC05A
:1006E000853B910509F44DC0863B910509F44CC04A
:1006F000873B910509F44BC0883B910509F44AC03A
:10070000893B910509F449C08A3B910509F048C02D
:100710002AE236E447C09C01306544C020E030E066
:1007200041C021E030E03EC021E830E43BC022E897
:1007300030E438C022EE34E435C029EE34E432C06F
:100740002AEE34E42FC025EB34E42CC026EB34E44D
:1007500029C027EB34E426C02CEC34E423C02DEC74
:1007600034E420C023E835E41DC02AE835E41AC08B
:1007700022E935E417C024E935E414C021E236E467
:1007800011C023E236E40EC024E236E40BC025E2B9
:1007900036E408C026E236E405C027E236E402C0AB
:1007A00020E034E4C901089508959CE0799FF001A8
:1007B00011249CE3899FE00DF11D1124E60FF11D2A
:1007C000EE0FFF1FE455FF4F25913491C9010895A5
:1007D000880F991F845D9040FC0125913491C901D7
:1007E0000895880F991F84559F4FFC0125913491DE
:1007F000C90108950E94D5039C019A9581159F41D6
:1008000010F4C9010895C90190528115904128F44E
:10081000C9019F700E94F1030895C9019053811589
:10082000904120F4C9019927906C0895C901905412
:10083000409728F4C9018F709927946D089520314D
:1008400080E4380719F480E091ED0895213190E4B7
:10085000390719F480E090ED0895223140E434071F
:1008600019F480E092ED0895233180E4380719F4FB
:1008700080E093ED0895211590E5390769F40E9411
:1008800015162FEF44E38CE0215040408040E1F703
:1008900000C000000C94BD1C213090E5390731F4F4
:1008A0008091D00181608093D0010895C901905555
:1008B0008115904108F062C0432F55274F7055278E
:1008C00041305105F9F4C90174E0880F991F7A95F8
:1008D000E1F788279370B901E3E0660F771FEA9587
:1008E000E1F760767727862B972B9C682370332758
:1008F00002C0440F551F2A95E2F74F715527842BEC
:10090000952B08954230510529F4922F8827816F45
:10091000906A089543305105B9F4C90153E0880F36
:10092000991F5A95E1F7807E97702370332741E035
:1009300050E002C0440F551F2A95E2F74F7155272A
:10094000842B952B9C6808954430510549F5C901C5
:1009500043E0880F991F4A95E1F7807E97702370D6
:10096000332741E050E002C0440F551F2A95E2F7BB
:100970004F715527842B952B9A680895C90190577C
:100980008115904120F4C9019F7090620895C901BA
:1009900090588115904120F4C9019F70906A089584
:1009A000203E3105E0F4203C310568F52133310566
:1009B00009F475C048F42932310509F46BC02A32B4
:1009C000310509F07BC075C02933310501F12238AA
:1009D0003105E9F02533310509F070C051C0233EDF
:1009E0003105B1F140F4203E3105D1F0223E310510
:1009F00009F064C01CC0263E310579F1273E31055F
:100A000009F05CC038C0C9010E94E80308958091D4
:100A1000E10180FD02C081FF51C080EE90E04FC037
:100A20008091E10180FFF9CF89E390E048C0809197
:100A3000E10182FF0AC08091E10184FF03C080E0F0
:100A400090E03DC083EE90E03AC082EE90E037C087
:100A50008091E10182FFEFCFF8CF8091E10183FF28
:100A600007C08091E10184FDEACF87EE90E027C0C6
:100A700086EE90E024C08091E10183FFF2CFF8CFB1
:100A80008091E10185FF03C089E290E018C085E311
:100A900090E015C08091E10185FDF9CFF5CF8091FF
:100AA000E10186FF03C08AE290E009C081E390E0A3
:100AB00006C08091E10186FDF9CFF5CFC9010E9402
:100AC0001003089508955F926F927F928F929F9284
:100AD000AF92BF92CF92DF92EF92FF920F931F934C
:100AE000CF93DF93CDB7DEB72A970FB6F894DEBF6A
:100AF0000FBECDBF9E012F5F3F4F4E018BE0880E92
:100B0000911C60E070E000E010E0E12CF12CC12CC1
:100B1000D12CA12CB12C8AE0782E622E532E41E0EC
:100B200050E0E4E1F1E0A62DB52D872D01900D9266
:100B30008A95E1F7F901819191919F01FC01E07F94
:100B4000FF27E032F10559F48F709927FA0102C0AE
:100B5000EE0FFF1F8A95E2F7AE2ABF2A37C0E033B7
:100B6000F10559F48F709927FA0102C0EE0FFF1FAB
:100B70008A95E2F7CE2ADF2A29C0E034F10559F43C
:100B80008F709927FA0102C0EE0FFF1F8A95E2F7D6
:100B9000EE2AFF2A1BC0E035F10559F48F70992722
:100BA000FA0102C0EE0FFF1F8A95E2F70E2B1F2BF2
:100BB0000DC0E036F10551F48F709927FA0102C09B
:100BC000EE0FFF1F8A95E2F76E2B7F2B2815390554
:100BD00009F0A7CF94B18A2D8095892384B985B176
:100BE0008A2985B997B18C2D8095892387B988B1D9
:100BF0008C2988B99AB18E2D809589238AB98BB1B9
:100C00008E298BB99DB1802F809589238DB98EB1A6
:100C1000802B8EB990B3862F8095892380BB81B3BA
:100C2000862B81BB2A960FB6F894DEBF0FBECDBFD0
:100C3000DF91CF911F910F91FF90EF90DF90CF90B8
:100C4000BF90AF909F908F907F906F905F9008952E
:100C50005F926F927F928F929F92AF92BF92CF924C
:100C6000DF92EF92FF920F931F93CF93DF93CDB755
:100C7000DEB768970FB6F894DEBF0FBECDBF85B75D
:100C8000806885BF85B7806885BF0E9463059E0127
:100C90002F5F3F4F4E0189E1880E911C60E070E0AC
:100CA00000E010E0E12CF12CC12CD12CA12CB12CB6
:100CB00098E1792E622E532E41E050E0EEE1F1E012
:100CC000A62DB52D872D01900D928A95E1F7F9019A
:100CD000819191919F01FC01E07FFF27E032F105B6
:100CE00059F48F709927FA0102C0EE0FFF1F8A9501
:100CF000E2F7AE2ABF2A37C0E033F10559F48F700E
:100D00009927FA0102C0EE0FFF1F8A95E2F7CE2A5B
:100D1000DF2A29C0E034F10559F48F709927FA01D0
:100D200002C0EE0FFF1F8A95E2F7EE2AFF2A1BC0D2
:100D3000E035F10559F48F709927FA0102C0EE0FE2
:100D4000FF1F8A95E2F70E2B1F2B0DC0E036F10531
:100D500051F48F709927FA0102C0EE0FFF1F8A9598
:100D6000E2F76E2B7F2B2815390509F0A7CF94B138
:100D70008A2D8095892384B985B18A2985B997B14F
:100D80008C2D8095892387B988B18C2988B99AB12F
:100D90008E2D809589238AB98BB18E298BB99DB10F
:100DA000802F809589238DB98EB1802B8EB990B319
:100DB000862F8095892380BB81B3862B81BB1092BF
:100DC00055011092540110925F0110925E01109231
:100DD0005701109256011092610110926001109219
:100DE0005901109258011092630110926201109201
:100DF0005B0110925A0110926501109264011092E9
:100E00005D0110925C0110926701109266018FEBF8
:100E100092E0892BB9F068960FB6F894DEBF0FBE4A
:100E2000CDBFDF91CF911F910F91FF90EF90DF9099
:100E3000CF90BF90AF909F908F907F906F905F907A
:100E40000C94BF0268960FB6F894DEBF0FBECDBFFC
:100E5000DF91CF911F910F91FF90EF90DF90CF9096
:100E6000BF90AF909F908F907F906F905F9008950C
:100E70005F926F927F928F929F92AF92BF92CF922A
:100E8000DF92EF92FF920F931F93CF93DF93CDB733
:100E9000DEB7A2970FB6F894DEBF0FBECDBF7E01BE
:100EA00049E1E40EF11C2EE5C22E21E0D22E5E01B6
:100EB00053E2A50EB11C3AE0532E470101E010E0C9
:100EC00048E1642E55E0752EE4E1F1E0D401852D72
:100ED00001900D928A95E1F7F701819191917F013F
:100EE0009C01207F33272032310589F424B18F7093
:100EF0009927A80102C0440F551F8A95E2F7CA013D
:100F0000242B24B995B18095892385B94FC020330E
:100F1000310589F427B18F709927F80102C0EE0FCF
:100F2000FF1F8A95E2F7CF012E2B27B998B1809544
:100F3000892388B93BC02034310589F42AB18F70E8
:100F40009927A80102C0440F551F8A95E2F7CA01EC
:100F5000242B2AB99BB1809589238BB927C02035D2
:100F6000310589F42DB18F709927F80102C0EE0F79
:100F7000FF1F8A95E2F7CF012E2B2DB99EB18095E8
:100F800089238EB913C02036310581F420B38F70C8
:100F90009927A80102C0440F551F8A95E2F7CA019C
:100FA000242B20BB91B38095892381BB50EA5A95AD
:100FB000F1F7BE016F5F7F4F80E090E020E030E00E
:100FC000EEE1F1E0DE011196462D01900D924A9579
:100FD000E1F7FB0141915191BF01FA01E07FFF2749
:100FE000E032F10511F4E3B113C0E033F10511F47F
:100FF000E6B10EC0E034F10511F4E9B109C0E03505
:10100000F10511F4ECB104C0E036F105B9F4EFB12B
:10101000F0E04F70552702C0F595E7954A95E2F745
:10102000E0FD08C0A801022E02C0440F551F0A941B
:10103000E2F702C040E050E0842B952B2F5F3F4F3A
:101040002C30310509F0BCCFF60120813181281701
:10105000390721F091838083709200010E9463051B
:10106000F2E0CF0ED11CEA14FB0409F02DCF8091E1
:1010700000018823A1F1815080930001882339F079
:101080008FE99FE00197F1F700C0000028C0809130
:101090005E0190915F01909355018093540180917E
:1010A0006001909161019093570180935601809166
:1010B000620190916301909359018093580180914E
:1010C00064019091650190935B0180935A01809136
:1010D00066019091670190935D0180935C018AECB9
:1010E00092E0892B11F00E94CA0281E0A2960FB60D
:1010F000F894DEBF0FBECDBFDF91CF911F910F914E
:10110000FF90EF90DF90CF90BF90AF909F908F9027
:101110007F906F905F900895E82FF0E0EE0FFF1F33
:10112000EC5AFE4F8081918108950895809171015C
:101130000895CF93DF9300D01F92CDB7DEB72091F3
:10114000E701243021F523E029839B838A832093C0
:10115000E9008FEF06C095ED9A95F1F7000088231E
:1011600029F09091E800815095FFF5CF8091E8003B
:1011700085FF0DC040E050E063E070E0CE010196D5
:101180000E94280B8091E8008E778093E8000F90F2
:101190000F900F90DF91CF910895CF93DF9300D000
:1011A0001F92CDB7DEB72091E701243029F522E068
:1011B00029839B838A8383E08093E9008FEF06C0B5
:1011C00095ED9A95F1F70000882329F09091E800B9
:1011D000815095FFF5CF8091E80085FF0DC040E07C
:1011E00050E063E070E0CE0101960E94280B8091F0
:1011F000E8008E778093E8000F900F900F90DF91BA
:10120000CF9108952091E7012430F9F422E0209352
:10121000E9002FEF06C035ED3A95F1F700002223E3
:1012200029F03091E800215035FFF5CF2091E800FA
:1012300025FF0BC040E050E065E070E00E94280B05
:101240008091E8008E778093E8000895CF93DF9334
:10125000EC018091E701843041F581E08093E90061
:101260008FEF06C095ED9A95F1F70000882329F0DD
:101270009091E800815095FFF5CF8091E80085FFBF
:1012800014C040E050E068E070E0CE010E94280BFE
:101290008091E8008E778093E80088E0FE01A9E65F
:1012A000B1E001900D928A95E1F7DF91CF91089519
:1012B0008091E601811109C00E94C80C0E94250D91
:1012C0008091E20084608093E20008951092E6012C
:1012D0000895089508950C94201C809172018F5FE9
:1012E0008093720162E30E948924911135C01092AB
:1012F000720180917301882379F18091E701843034
:1013000049F58091E9008F709091EC0090FF02C048
:1013100090E801C090E0982B84E08093E9008091F0
:10132000EB0080FF14C08091EE0087FD03C00FC06A
:101330001092F1008091E80085FDFACF8091E800DD
:1013400080FF05C08091E8008E778093E8009F7051
:101350009093E90010927301089542E061EC81E0FE
:101360000E943E0C42E061EC82E00E943E0C42E0B2
:1013700061EC83E00E943E0C42E261EC84E00C945C
:101380003E0C8091E901833009F454C030F481307F
:1013900071F0823009F0A5C08CC08A3009F479C0A0
:1013A0008B3009F45FC0893009F09BC020C0809168
:1013B000E801813A09F095C08091E800877F809329
:1013C000E8008091EC019091ED01892B21F060E023
:1013D00080E090E003C068E089E691E070E00E9460
:1013E000770B8091E8008B778093E80008958091D7
:1013F000E801813209F075C08091EC019091ED0116
:10140000892B09F06EC08091E800877F8093E80007
:1014100005C08091E701882309F463C08091E8004A
:1014200082FFF7CF8091F100809371018091E800F5
:101430008B7753C08091E801813A09F052C08091C6
:10144000EC019091ED01892B09F04BC08091E800EF
:10145000877F8093E8008091E80080FFFCCF809137
:101460000B0136C08091E8018132D9F58091EC0101
:101470009091ED01892BA9F58091E800877F8093F9
:10148000E8000E94750C8091EA0180930B010C9496
:1014900015168091E801813221F58091E800877F5F
:1014A0008093E8000E94750C8091EB0180936801A5
:1014B00008958091E801813AA1F48091E800877F46
:1014C0008093E8008091E80080FFFCCF8091680164
:1014D0008093F1008091E8008E778093E8000C946F
:1014E000750C089584B7877F84BF88E10FB6F894A0
:1014F00080936000109260000FBE90E080E80FB60D
:10150000F89480936100909361000FBE0E943310A5
:101510000E94C80C0E94250D8091E2008460809397
:10152000E20078940E94C20F0E94351081E091E0A1
:101530000E94DF0F0BC00E94DD1B8091E501882314
:1015400029F00E94081C81110E94120B8091E70172
:10155000853089F30E943F10F9CF292F332723309C
:101560003105B1F04CF42130310509F44DC0223081
:10157000310509F04EC007C02132310541F1223258
:10158000310591F146C0E4E7F0E082E693E045C022
:1015900099278130910569F08230910589F0892B76
:1015A00009F037C0EEE5F3E0E491F0E08EE593E07A
:1015B00034C0E0E3F3E0E491F0E080E393E02DC099
:1015C000E4E0F3E0E491F0E084E093E026C06430EE
:1015D00000F5E62FF0E0EE0FFF1FEA5CFE4F808182
:1015E0009181E9E0F0E019C0643098F4E62FF0E072
:1015F000DF01AA0FBB1FA25CBE4F8D919C91EA5BDD
:10160000FE4FE081F0E009C0E2E1F0E086ED93E01A
:1016100004C0E0E0F0E080E090E0DA018D939C937C
:10162000CF01089580E189BD82E189BD09B400FE42
:10163000FDCF8091D8008F7D8093D8008091E0000D
:1016400082608093E0008091E00081FDFCCF0895EE
:10165000BF92CF92DF92EF92FF920F931F93CF939F
:10166000DF937C018B01EA010E94960CB82E811158
:1016700033C0209731F028813981021B130BE20E11
:10168000F31EC12CD12C23C08091E80085FD15C02C
:101690008091E8008E778093E800209749F0888158
:1016A00099818C0D9D1D9983888325E0B22E14C0ED
:1016B0000E94960C882359F00EC0F70181917F019A
:1016C0008093F10001501109FFEFCF1ADF0A0115D5
:1016D0001105D1F601C0B82E8B2DDF91CF911F914E
:1016E0000F91FF90EF90DF90CF90BF9008954091C1
:1016F000EE015091EF014617570748F0611571054B
:1017000039F44091E8004E774093E80001C0BA01F7
:10171000FC0140E033C08091E701882309F444C014
:10172000853009F443C08091E80083FD41C0809179
:10173000E80082FD33C08091E80080FF1FC09091D7
:10174000F3008091F200392F20E0A901482BCA0153
:1017500006C041914093F1006150710901966115F5
:10176000710519F088309105A0F341E0089709F060
:1017700040E08091E8008E778093E8006115710564
:1017800051F64111C8CF0AC08091E701882361F06A
:10179000853061F08091E80083FD0AC08091E80007
:1017A00082FFF2CF80E0089582E0089583E00895FB
:1017B00081E008954091EE015091EF0146175707DF
:1017C00048F06115710539F44091E8004E77409377
:1017D000E80001C0BA01FC0140E034C08091E7019B
:1017E000882309F445C0853009F444C08091E8009D
:1017F00083FD42C08091E80082FD34C08091E80002
:1018000080FF20C09091F3008091F200392F20E0FA
:10181000A901482BCA0107C044914093F1003196B9
:101820006150710901966115710519F088309105B3
:1018300098F341E0089709F040E08091E8008E7746
:101840008093E8006115710549F64111C7CF0AC0C0
:101850008091E701882361F0853061F08091E80094
:1018600083FD0AC08091E80082FFF2CF80E00895F6
:1018700082E0089583E0089581E00895982F2CC0B8
:101880009093E900981739F07091EC002091ED00E9
:101890005091F00003C0242F762F50E021FD02C0AC
:1018A0009F5F1AC03091EB003E7F3093EB00309188
:1018B000ED003D7F3093ED003091EB0031603093CF
:1018C000EB007093EC002093ED005093F00020911A
:1018D000EE0027FDE5CF07C0973090F28F70809320
:1018E000E90081E0089580E008958091E80187FD96
:1018F00005C08091E80080FF0EC012C08091E80012
:1019000082FD05C08091E7018111F8CF0895809193
:10191000E8008B7708C08091E7018111EACF089534
:101920008091E8008E778093E80008958091E4002C
:101930009091E50045E62091EC0020FD1FC023C0FA
:101940002091E701222391F0253091F02091EB00C6
:1019500025FD10C02091E4003091E50028173907DB
:1019600051F34150C90139F784E0089582E00895A8
:1019700083E0089581E0089580E008952091E800D3
:1019800020FFDECFF9CF2091E80022FFD9CFF4CF9E
:101990000E94360D0E943E0DE0EEF0E080818160F5
:1019A0008083E8EDF0E080818F77808319BCA7ED1C
:1019B000B0E08C918E7F8C9380818F7E808310929B
:1019C000E60108950F931F93CF93DF930E94360D86
:1019D0000E943E0DC8EDD0E088818F778883888192
:1019E0008068888388818F7D888319BC1092E70185
:1019F0001092E3011092E5011092E40100EE10E074
:101A0000F80180818B7F808388818160888342E0B8
:101A100060E080E00E943E0CE1EEF0E080818E7F8D
:101A20008083E2EEF0E08081816080838081886045
:101A30008083F80180818E7F8083888180618883A4
:101A4000DF91CF911F910F910895E8EDF0E0808133
:101A50008F7E8083E7EDF0E080818160808384E089
:101A600082BF81E08093E6010C94E20CE8EDF0E0A7
:101A700080818E7F80831092E20008951092DA00B8
:101A80001092E10008951F920F920FB60F92112449
:101A90002F933F934F935F936F937F938F939F9376
:101AA000AF93BF93EF93FF938091E10082FF0BC050
:101AB0008091E20082FF07C08091E1008B7F8093DC
:101AC000E1000E946D098091DA0080FF1FC08091C3
:101AD000D80080FF1BC08091DA008E7F8093DA00EF
:101AE0008091D90080FF0DC080E189BD82E189BD70
:101AF00009B400FEFDCF81E08093E7010E94580900
:101B000005C019BC1092E7010E9466098091E100AE
:101B100080FF19C08091E20080FF15C08091E20033
:101B20008E7F8093E2008091E20080618093E200EA
:101B30008091D80080628093D80019BC85E08093A2
:101B4000E7010E946A098091E10084FF30C0809122
:101B5000E20084FF2CC080E189BD82E189BD09B427
:101B600000FEFDCF8091D8008F7D8093D8008091BA
:101B7000E1008F7E8093E1008091E2008F7E809370
:101B8000E2008091E20081608093E2008091E301B5
:101B9000882311F084E007C08091E30087FF02C032
:101BA00083E001C081E08093E7010E946B0980918E
:101BB000E10083FF29C08091E20083FF25C080916E
:101BC000E100877F8093E10082E08093E70110923B
:101BD000E3018091E1008E7F8093E1008091E2003B
:101BE0008E7F8093E2008091E20080618093E2002A
:101BF00042E060E080E00E943E0C8091F00088604E
:101C00008093F0000E946909FF91EF91BF91AF911D
:101C10009F918F917F916F915F914F913F912F9104
:101C20000F900FBE0F901F9018951F920F920FB636
:101C30000F9211242F933F934F935F936F937F9352
:101C40008F939F93AF93BF93CF93EF93FF93809125
:101C5000E9008F709091EC0090FF02C090E801C005
:101C600090E0C92FC82B1092E9008091F000877F87
:101C70008093F00078940E94590E1092E9008091B0
:101C8000F00088608093F000CF70C093E900FF916E
:101C9000EF91CF91BF91AF919F918F917F916F9174
:101CA0005F914F913F912F910F900FBE0F901F901A
:101CB00018951F93CF93DF93CDB7DEB7AC970FB6D0
:101CC000F894DEBF0FBECDBFE8EEF1E08091F100E9
:101CD000819321E0E03FF207C9F70E94C10980919A
:101CE000E80083FF37C18091E8019091E9019530C8
:101CF00009F488C038F49130B1F170F0933009F0F4
:101D000029C131C0983009F4F8C0993009F404C1F0
:101D1000963009F01FC19DC0803821F0823809F04B
:101D200019C108C08091E4019091E501992389F0DF
:101D300082600FC08091EC019091ED018F70992726
:101D40008093E9008091EB0085FB882780F9109251
:101D5000E9009091E800977F9093E8008093F1006C
:101D60001092F100D5C0882319F0823009F0F2C03A
:101D70008F7121F0823009F0EDC00BC08091EA0133
:101D8000813009F0E7C0933009F080E08093E501ED
:101D90002FC08091EA0181112BC08091EC019091BC
:101DA000ED018F709927009709F4D4C08093E90062
:101DB0002091EB0020FF1CC02091E901233021F489
:101DC0008091EB00806212C09091EB009061909343
:101DD000EB0021E030E001C0220F8A95EAF7209362
:101DE000EA001092EA008091EB0088608093EB009B
:101DF0001092E9008091E800877F8093E8000E94BC
:101E0000750CA8C08111A6C08091EA019091EB01E8
:101E10008F779927182F9091E3009078982B9093C3
:101E2000E3008091E800877F8093E8000E94750CB2
:101E30008091E80080FFFCCF8091E3008068809370
:101E4000E300112311F083E001C082E08093E701F9
:101E500081C08058823008F07DC08091EA01909165
:101E6000EB018C3D23E0920779F583E08A838AE2D7
:101E700089834FB7F894DE01139620E03EE051E2EB
:101E8000E32FF0E050935700E49120FF03C0E29568
:101E9000EF703F5FEF708E2F90E0EA3010F0C79642
:101EA00001C0C0968D939D932F5F243149F74FBF9A
:101EB0008091E800877F8093E8006AE270E0CE01BD
:101EC00001960E94770B13C0AE01455D5F4F609194
:101ED000EC010E94AD0A0097E9F12091E800277F0C
:101EE0002093E800BC018BA59CA50E94DA0B809191
:101EF000E8008B778093E8002DC0803859F58091F9
:101F0000E800877F8093E8008091E3018093F100EF
:101F10008091E8008E7771CF81111CC09091EA0109
:101F20009230C0F48091E800877F8093E80090931E
:101F3000E3010E94750C8091E301811104C080913E
:101F4000E30087FF02C084E001C081E08093E701E5
:101F50000E94AD098091E80083FF0AC08091E800EB
:101F6000877F8093E8008091EB0080628093EB0094
:101F7000AC960FB6F894DEBF0FBECDBFDF91CF9108
:101F80001F910895CF938091E7018823B1F080914C
:101F9000E9008F709091EC0090FF02C090E801C0C2
:101FA00090E0C92FC82B1092E9008091E80083FDD2
:101FB0000E94590ECF70C093E900CF91089590937D
:101FC0007501809374010895E0917401F091750199
:101FD000309721F00190F081E02D099480E0089580
:101FE000E0917401F0917501309721F00280F38146
:101FF000E02D09940895E0917401F09175013097F6
:1020000021F00480F581E02D099408952091760156
:10201000309177018217930771F090937701809345
:102020007601E0917401F0917501309721F00680FE
:10203000F781E02D0994089520917801309179017C
:102040008217930771F09093790180937801E09162
:102050007401F0917501309721F00084F185E02D35
:102060000994089508950C9432100E94541C0E9403
:1020700028060E94281D0C94D0220C9462055F92C1
:102080006F927F928F929F92AF92BF92CF92DF9288
:10209000EF92FF920F931F93CF93DF93CDB7DEB7ED
:1020A0002A970FB6F894DEBF0FBECDBF0E94380747
:1020B0009AE7C92E91E0D92E00E010E0AA24A3945B
:1020C000B12C502E802F0E948C083C01F601E1902B
:1020D000F1906F01E826F926E114F10431F40F5F65
:1020E0001F4F0530110569F73AC08091D00181FD7D
:1020F0000E94950820E030E04501022E02C0880CC5
:10210000991C0A94E2F7C4018E219F21892B09F1C1
:102110002E835F826820792081E0672809F480E0BF
:1021200088870E945D1C8160782F9A8789874E81FD
:102130005F8168858A850E94F810F801EE0FFF1F05
:10214000E658FE4F8081918188259925918380836F
:1021500016C02F5F3F4F2C30310571F6C0CF8FEF87
:1021600089838A831B820E945D1C8160782F9D83F6
:102170008C8349815A816B818D810E94F8100E9465
:102180001520109184010E94E40F1817D9F00E94C5
:10219000E40F809384012A960FB6F894DEBF0FBE39
:1021A000CDBFDF91CF911F910F91FF90EF90DF9006
:1021B000CF90BF90AF909F908F907F906F905F90E7
:1021C0000C943D102A960FB6F894DEBF0FBECDBF1B
:1021D000DF91CF911F910F91FF90EF90DF90CF9003
:1021E000BF90AF909F908F907F906F905F90089579
:1021F000CF93DF93CDB7DEB72B970FB6F894DEBF42
:102200000FBECDBF4F83588769877A878B87DE01E2
:10221000119686E0FD0111928A95E9F785E0FE01AD
:10222000379601900D928A95E1F749815A816B8129
:102230007C818D819E810E94D4182B960FB6F894D4
:10224000DEBF0FBECDBFDF91CF910895CF93C82FD2
:10225000882309F4C1C0823859F40E94E40F81FD3B
:10226000BBC089E30E943B1B0E94B71B89E30CC0E3
:10227000833879F40E94E40F80FDAEC083E50E94AC
:102280003B1B0E94B71B83E50E945D1BCF910C9402
:10229000B71B843859F40E94E40F82FD9DC087E487
:1022A0000E943B1B0E94B71B87E4EECF8450813A0B
:1022B00048F48C2F0E94322281118EC08C2F0E94F4
:1022C0003B1BE4CF8C2F805E883050F4C77081E0D8
:1022D00090E001C0880FCA95EAF70E947E1BD6CF16
:1022E0008C2F855A833078F4C53A29F0C63A31F4F8
:1022F00082E890E005C081E890E002C083E890E0C9
:10230000CF910C9406108C2F885A833108F064C04A
:10231000C83A39F1C93A41F1CA3A49F1CB3A51F1D7
:10232000CC3A59F1CD3A61F1C03B69F1CE3A71F145
:10233000CF3A79F1C13B81F1C23B89F1C33B91F1C5
:10234000C43B99F1C53BA1F1C63BA9F1C73BB1F133
:10235000C83BB9F1C93BC1F1CA3BC9F58AE292E079
:1023600038C082EE90E035C089EE90E032C08AEE4F
:1023700090E02FC085EB90E02CC086EB90E029C068
:1023800087EB90E026C08CEC90E023C08DEC90E0D1
:1023900020C083E891E01DC08AE891E01AC082E97C
:1023A00091E017C084E991E014C081E292E011C08D
:1023B00083E292E00EC084E292E00BC085E292E0FC
:1023C00008C086E292E005C087E292E002C080E0A9
:1023D00090E0CF910C941C10CF910895882309F4BC
:1023E0004DC0823859F40E94E40F81FF47C089E351
:1023F0000E943B1B0E94B71B89E30CC0833871F419
:102400000E94E40F80FF3AC083E50E943B1B0E94BC
:10241000B71B83E50E945D1B0C94B71B843859F4ED
:102420000E94E40F82FF2AC087E40E943B1B0E94A7
:10243000B71B87E4EFCF982F9450913A08F4EACF76
:10244000982F905E983058F4282F277081E090E004
:1024500001C0880F2A95EAF70E94841BDDCF982FD0
:10246000955A933020F480E090E00C940610885A3E
:10247000833120F480E090E00C941C1008958823B0
:1024800021F00E947E1B0C94B71B0895882321F035
:102490000E94841B0C94B71B0895BF92CF92DF92C9
:1024A000EF92FF920F931F93CF93DF93CDB7DEB7D9
:1024B00027970FB6F894DEBF0FBECDBF8C0185E025
:1024C000F801DE01119601900D928A95E1F7F8016D
:1024D00030812181F280558152955F708381948192
:1024E000892B39F02F3F41F481E090E03F3F31F0FC
:1024F00003C081E090E002C080E090E080FD73C303
:1025000039832A8389819A815E830E94F81AB92EC1
:102510008F830E94F71A0E941F1A2B2D22952F706D
:1025200030E05E816F812530310509F4E6C06CF43E
:10253000243031050CF0A2C04B2D407F8B2D8F70C5
:10254000223031050CF045C017C02C3031054CF459
:102550002A3031050CF0E7C12830310509F043C3BA
:10256000E5C02D30310509F4BAC20CF4A2C22F30F7
:10257000310509F038C323C3182F411101C002C02F
:102580001295107FFF2059F0112309F46BC2812F9F
:102590006F830E948E1B0E94B71B6F8163C2862FC0
:1025A0000E94EE11112309F41EC3812F0E94941B77
:1025B00027960FB6F894DEBF0FBECDBFDF91CF9147
:1025C0001F910F91FF90EF90DF90CF90BF900C94F0
:1025D000B71B403211F08295807F662319F061307D
:1025E00071F523C0FF20B1F0511101C032C051304C
:1025F00081F527960FB6F894DEBF0FBECDBFDF91F1
:10260000CF911F910F91FF90EF90DF90CF90BF90EF
:102610000C949E1B511101C003C0513009F4E3C258
:102620008E830E94A11B8E819AC1FF2021F056301B
:1026300008F0D9C20EC0553008F0D5C290C1FF20B5
:10264000C9F0552331F0F801958190FF0BC29F70BE
:10265000958327960FB6F894DEBF0FBECDBFDF91EE
:10266000CF911F910F91FF90EF90DF90CF90BF908F
:102670000C943F12552309F472C109C22B2D2695E3
:102680002695237030E02115310529F021303105E0
:1026900009F0A9C219C0FF2021F0862F9B2D93704D
:1026A00002C080E090E027960FB6F894DEBF0FBE20
:1026B000CDBFDF91CF911F910F91FF90EF90DF90F1
:1026C000CF90BF900C940610FF2021F0862F9B2DF9
:1026D000937002C080E090E027960FB6F894DEBFBA
:1026E0000FBECDBFDF91CF911F910F91FF90EF9063
:1026F000DF90CF90BF900C941C10862FFF2019F014
:102700000E941B1F02C00E94831F27960FB6F894D9
:10271000DEBF0FBECDBFDF91CF911F910F91FF9014
:10272000EF90DF90CF90BF900C940A208B2D837098
:1027300009F079C0F11057C2262F229526952770EF
:10274000220F220F862F8F70C82ED12CE12CF12C56
:10275000022E04C0CC0CDD1CEE1CFF1C0A94D2F728
:1027600064FF10C06FE070E080E090E004C0660F8E
:10277000771F881F991F2A95D2F7609570958095CD
:10278000909503C060E070E0CB012B2D2695269537
:102790002370422F50E042305105D9F043305105AB
:1027A00069F16C297D298E299F294130510551F10C
:1027B00027960FB6F894DEBF0FBECDBFDF91CF9145
:1027C0001F910F91FF90EF90DF90CF90BF900C94EE
:1027D000341A6C297D298E299F2927960FB6F894E3
:1027E000DEBF0FBECDBFDF91CF911F910F91FF9044
:1027F000EF90DF90CF90BF900C94461A0E94341A4D
:10280000C701B60127960FB6F894DEBF0FBECDBF45
:10281000DF91CF911F910F91FF90EF90DF90CF90BC
:10282000BF900C94221AFF2019F08B2D817001C0EB
:102830008695882309F4D7C1262F229526952770DF
:10284000220F220F862F8F70C82ED12CE12CF12C55
:10285000022E04C0CC0CDD1CEE1CFF1C0A94D2F727
:1028600064FF10C06FE070E080E090E004C0660F8D
:10287000771F881F991F2A95D2F7609570958095CC
:10288000909503C060E070E0CB012B2D2695269536
:102890002370422F50E042305105D9F043305105AA
:1028A00069F16C297D298E299F294130510551F10B
:1028B00027960FB6F894DEBF0FBECDBFDF91CF9144
:1028C0001F910F91FF90EF90DF90CF90BF900C94ED
:1028D000D31A6C297D298E299F2927960FB6F89443
:1028E000DEBF0FBECDBFDF91CF911F910F91FF9043
:1028F000EF90DF90CF90BF900C94E51A0E94D31A0E
:10290000C701B60127960FB6F894DEBF0FBECDBF44
:10291000DF91CF911F910F91FF90EF90DF90CF90BB
:10292000BF900C94C11A603F59F120F4603E08F446
:1029300094C008C0623F09F467C0F0F1633F09F03A
:102940008CC065C0162F1F708B2D8F71FF2021F05A
:102950000E946C1A812F7DCE0E94871A812F2796A4
:102960000FB6F894DEBF0FBECDBFDF91CF911F91A0
:102970000F91FF90EF90DF90CF90BF900C94461294
:10298000FF20B1F0553008F02EC18B2D8F712796A6
:102990000FB6F894DEBF0FBECDBFDF91CF911F9170
:1029A0000F91FF90EF90DF90CF90BF900C94A61AFC
:1029B000563008F018C1E9CFFF2099F08B2D8F71A8
:1029C00027960FB6F894DEBF0FBECDBFDF91CF9133
:1029D0001F910F91FF90EF90DF90CF90BF900C94DC
:1029E0006C1A8B2D8F7127960FB6F894DEBF0FBE31
:1029F000CDBFDF91CF911F910F91FF90EF90DF90AE
:102A0000CF90BF900C94871AF110EBCFD7CFFF2057
:102A100099F08B2D8F7127960FB6F894DEBF0FBEFD
:102A2000CDBFDF91CF911F910F91FF90EF90DF907D
:102A3000CF90BF900C945D1A27960FB6F894DEBF26
:102A40000FBECDBFDF91CF911F910F91FF90EF90FF
:102A5000DF90CF90BF900C94581AFF20A9F0552317
:102A600009F4ACCF862F27960FB6F894DEBF0FBEC1
:102A7000CDBFDF91CF911F910F91FF90EF90DF902D
:102A8000CF90BF900C942611552309F4AACF862F1E
:102A900027960FB6F894DEBF0FBECDBFDF91CF9162
:102AA0001F910F91FF90EF90DF90CF90BF900C940B
:102AB000EE114B2D4F70C8010E94AB0227960FB646
:102AC000F894DEBF0FBECDBFDF91CF911F910F9164
:102AD000FF90EF90DF90CF90BF900C948A19F11087
:102AE00082C09B2D9F70492F50E04230510599F1D3
:102AF00044F44115510569F04130510509F073C0A6
:102B000019C043305105C1F14430510509F06BC083
:102B100044C027960FB6F894DEBF0FBECDBFDF913D
:102B2000CF911F910F91FF90EF90DF90CF90BF90CA
:102B30000C94E12227960FB6F894DEBF0FBECDBFEE
:102B4000DF91CF911F910F91FF90EF90DF90CF9089
:102B5000BF900C94F82227960FB6F894DEBF0FBEF4
:102B6000CDBFDF91CF911F910F91FF90EF90DF903C
:102B7000CF90BF900C94142327960FB6F894DEBF25
:102B80000FBECDBFDF91CF911F910F91FF90EF90BE
:102B9000DF90CF90BF900C942723862F27960FB6F7
:102BA000F894DEBF0FBECDBFDF91CF911F910F9183
:102BB000FF90EF90DF90CF90BF900C944B234B2D64
:102BC0004F70C80127960FB6F894DEBF0FBECDBF79
:102BD000DF91CF911F910F91FF90EF90DF90CF90F9
:102BE000BF900C94D40327960FB6F894DEBF0FBEA7
:102BF000CDBFDF91CF911F910F91FF90EF90DF90AC
:102C0000CF90BF9008950E949B1B0E94701B0E9452
:102C1000B71B0E94B6200E940A2080E090E00E942C
:102C2000061080E090E00C941C100E948B1B0C940A
:102C300003160E94F81A292F22952F7030E02C30AD
:102C400031054CF42A3031056CF422503109223020
:102C5000310590F407C02C30310551F02F3031058B
:102C600059F406C0803E10F0803F31F481E00895B1
:102C700093FB882780F9089580E00895CF93DF9330
:102C800000D000D01F92CDB7DEB70F900F900F90FD
:102C90000F900F90DF91CF910895CF93DF9300D0E5
:102CA00000D000D0CDB7DEB726960FB6F894DEBFC1
:102CB0000FBECDBFDF91CF9108951F93CF93DF93C8
:102CC000C091BB0116E012C0D0E01C9FF0011D9F17
:102CD000F00D1124E557FE4F4081518162817381CF
:102CE000848195810E944D162196C7708091BC0108
:102CF000C813EACFDF91CF911F91089540918501CC
:102D000050918601609187017091880180918901BD
:102D100090918A010C944D160F931F93CF93DF93DC
:102D200080918A0182958F7009F069C08091870136
:102D3000882309F464C0A091BB01D091BC01B0917B
:102D40008501C0918601809188019091890121E0DF
:102D500030E0BF3F11F020E030E0122FBC01609561
:102D6000709506E04AC0009721F0CF3F29F4212F4B
:102D700005C021E030E002C020E030E020FD3BC093
:102D80004A2F50E0049FF001059FF00D1124E557F4
:102D9000FE4F2181C2132FC02081B2132CC022818B
:102DA000211129C0238134812817390718F0281BE5
:102DB000390B02C0260F371F283C3105E0F4809103
:102DC0008A018F70806180938A0186E0849FF00180
:102DD000859FF00D1124E057FE4F80818F70806138
:102DE000808385E891E00E944D12DF91CF911F9181
:102DF0000F910C945D16AF5FA770AD13B4CFDF9148
:102E0000CF911F910F910895EF92FF920F931F930F
:102E1000CF93DF93CDB7DEB762970FB6F894DEBFDE
:102E20000FBECDBF8C0185E0F801DE011D9601903B
:102E30000D928A95E1F7D8014C9111965C9111970A
:102E400012966C9112971396ED90FC9014977091D6
:102E50008501E09186018091880190918901009718
:102E600039F0EF3F41F421E030E07F3F31F003C023
:102E700021E030E002C020E030E020FD5CC1209184
:102E80008701222309F4F1C0E816F90628F097011A
:102E9000281B390BC90104C0809590958E0D9F1D8C
:102EA000883C910508F098C080918A01982F907F06
:102EB00009F064C0E51314C0741312C0611110C08E
:102EC0008F70806180938A010E947E1685E891E070
:102ED0000E944D1280918A01D80115968C9343C1AE
:102EE000EF2839F05F3F41F481E090E04F3F31F04F
:102EF00003C081E090E002C080E090E080FD03C06C
:102F000081E0862702C080E090E080FF2EC08091A3
:102F1000BB012091BC0136E013C090E0389FF00166
:102F2000399FF00D1124E557FE4F7181571306C0EC
:102F30007081471303C07281671317C001968770B1
:102F40008213EBCF12C19F7059F0882309F40BC193
:102F500007C09F7029F0F8019581907F09F403C1A3
:102F6000805E883008F4FFC0D2C0662309F4FBC03D
:102F700080918A01816080938A01F5C0E51308C0C1
:102F8000741306C0611104C0D80115968C939DC0BE
:102F90004D875E878D859E856A8B0E9419166A898A
:102FA000882309F4B4C0662309F4B1C020918A01D2
:102FB000822F82958F7090E002970CF4C6C08091AA
:102FC00085019091860198878F831986FB86EA8612
:102FD0002C87CE01079646C080918A01982F907F5A
:102FE00059F47E2DF98AE88A89890E943E1685E87F
:102FF00091E00E944D1295C0E51311C074130FC0EB
:1030000061110DC0F8018583C8010E944D12E5E8E9
:10301000F1E086E0DF011D928A95E9F7A2C04D87B5
:103020005E878D859E856A8B0E9419166A89882322
:1030300009F46DC0662309F46AC020918A01822FC9
:1030400082958F7090E002970CF47FC0809185018B
:10305000909186019A8389831B82FD82EC822E8364
:10306000CE0101960E944D1270C0E816F90628F0B4
:103070009701281B390BC90104C0809590958E0DCE
:103080009F1D883C910508F046C0662309F43FC0A7
:10309000E51330C074132EC020918A0120FD21C099
:1030A000322F32953F70832F90E00097D1F0D801F6
:1030B00015962C9315970F9741F0832F8F5F82956C
:1030C000807F2F70282B15962C93C8010E944D12DB
:1030D00086E0F801A5E8B1E001900D928A95E1F74C
:1030E0003EC086E0F801A5E8B1E001900D928A9516
:1030F000E1F737C04D875E878D859E850E94191642
:10310000811123C080918A01816080938A01C80166
:103110000E944D1226C07E2DF98AE88A89890E9474
:103120003E16E5E8F1E086E0DF011D928A95E9F7B9
:103130000E947E1618C0662351F34D875E878D85E9
:103140009E850E941916882311F386E0F801A5E8F0
:10315000B1E001900D928A95E1F70E948C160E94D1
:103160007E1681E014C080E012C04D875E878D8599
:103170009E850E94F81A292F22952F7030E0223068
:1031800031050CF4E0CE243031050CF6E2CE629627
:103190000FB6F894DEBF0FBECDBFDF91CF911F9168
:1031A0000F91FF90EF9008951F93CF93DF93CDB7CA
:1031B000DEB72C970FB6F894DEBF0FBECDBF4F839E
:1031C000588769877A878B879C87CE0107960E94EC
:1031D00004178823D9F02F8138858A859B85892B10
:1031E00039F03F3F19F080E090E004C02F3FD9F75D
:1031F00081E090E0892B09F06DC04F815885698589
:103200007A858B859C850E944D1664C086E0FE0100
:103210003796DE01119601900D928A95E1F7FF81B4
:10322000E8854A855B854115510539F0EF3F41F44A
:1032300081E090E0FF3F31F003C081E090E002C008
:1032400080E090E080FD46C02091BC0130E0C901E3
:103250000196877099276091BB0170E086179707E8
:1032600009F440C0F983EA835D834C8396E0929F22
:10327000D001939FB00D1124A557BE4FFE0131968A
:1032800001900D929A95E1F78093BC010E945D1622
:1032900021C0189FC001112485579E4F0E9404171A
:1032A000882371F1E091BB011E9FF0011124E557C5
:1032B000FE4F4081518162817381848195810E949A
:1032C0004D168091BB0190E00196877099278093FD
:1032D000BB0101C016E08091BB019091BC01891334
:1032E000D8CF0EC00E9415161092BC011092BB01DF
:1032F000E5E8F1E086E0DF011D928A95E9F7EACF83
:103300002C960FB6F894DEBF0FBECDBFDF91CF91E4
:103310001F910895DF92EF92FF920F931F93CF9327
:10332000DF93EC01009709F46EC0D12CEE24E394F6
:10333000F12C8E010F5F1F4FFE018491843748F4FA
:10334000843008F04CC0813071F0823009F05BC0ED
:103350001EC0853709F43FC080F1982F94589037EC
:1033600008F051C03FC02296F8018491982F905EDA
:10337000983050F48770FE2D01C0FF0F8A95EAF750
:103380008F2F0E948E1B13C00E9426112FC02296E1
:10339000F8018491982F905E983060F48770FE2D2C
:1033A00001C0FF0F8A95EAF78F2F0E94941B0E949D
:1033B000B71B1CC00E94EE1119C02296F80104919F
:1033C00007C08FE99FE00197F1F700C000000150AE
:1033D0000111F7CF0BC02296F801D49007C00E94CC
:1033E000261103C08F770E94EE11E8018D2D07C0D2
:1033F0008150EFE9FFE03197F1F700C0000088232A
:1034000009F497CFF5CFDF91CF911F910F91FF90E6
:10341000EF90DF9008956093C1017093C201809393
:10342000C3019093C4010C9403166093BD01709383
:10343000BE018093BF019093C0010C9403160895C0
:103440000C940B1A0F931F930091C1011091C201AC
:103450002091C3013091C401602B712B822B932BDF
:103460001F910F910C940B1A0F931F930091C101A0
:103470001091C2012091C3013091C40160237123D6
:10348000822393231F910F910C940B1A0F931F9378
:103490000091C1011091C2012091C3013091C4017A
:1034A00060277127822793271F910F910C940B1A85
:1034B00060E070E0CB010C94151A41E050E060E050
:1034C00070E004C0440F551F661F771F8A95D2F71E
:1034D000CB01BA010C94151A41E050E060E070E0B5
:1034E00004C0440F551F661F771F8A95D2F780913D
:1034F000BD019091BE01A091BF01B091C001482BC8
:10350000592B6A2B7B2BCB01BA010C94151A41E085
:1035100050E060E070E004C0440F551F661F771F45
:103520008A95D2F740955095609570958091BD0130
:103530009091BE01A091BF01B091C00148235923D1
:103540006A237B23CB01BA010C94151A41E050E0A9
:1035500060E070E004C0440F551F661F771F8A9516
:10356000D2F78091BD019091BE01A091BF01B091B1
:10357000C001482759276A277B27CB01BA010C9441
:10358000151A0F931F930091BD011091BE01209158
:10359000BF013091C001602B712B822B932B1F91A7
:1035A0000F910C94151A0F931F930091BD01109168
:1035B000BE012091BF013091C0016023712382239D
:1035C00093231F910F910C94151A0F931F93009141
:1035D000BD011091BE012091BF013091C001602753
:1035E0007127822793271F910F910C94151A089524
:1035F000CF92DF92EF92FF920F931F93CF93DF93BF
:10360000EC01C090C101D090C201E090C301F090E4
:10361000C4018091BD019091BE01A091BF01B09104
:10362000C001C82AD92AEA2AFB2A0FE110E0B70113
:10363000A601002E04C076956795579547950A9484
:10364000D2F740FF08C0BE01802F0E94FA038130EC
:10365000910509F007C00150110948F7BE0180E04B
:103660000E94FA03DF91CF911F910F91FF90EF908D
:10367000DF90CF90089540910C0150910D0120E012
:1036800030E09FEFFA01E20FF31F62816817A1F0AB
:103690009F3F19F4611101C0922F2F5F3F4F2630D9
:1036A000310581F707C0FA01E90FF11D97FDFA9581
:1036B000828308959F3FB9F7089540910C0150917E
:1036C0000D0120E030E0FA01E20FF31F9281981320
:1036D00001C012822F5F3F4F26303105A1F70895B8
:1036E00081E090E0E0910C01F0910D01E80FF91FED
:1036F0001082019688309105A9F708959091C5012F
:10370000982B9093C501089580959091C5019823B9
:103710009093C50108951092C50108959091C60136
:10372000982B9093C601089580959091C601982397
:103730009093C60108951092C60108958093C70121
:1037400008951092C701089540910C0150910D0108
:1037500020E030E080E0FA01E20FF31F9181911147
:103760008F5F2F5F3F4F27303105A9F70895E09114
:103770000C01F0910D018091C5018083E0910C0155
:10378000F0910D0180819091C601892B80839091E9
:10379000C701992361F0E0910C01F0910D01808146
:1037A000892B80830E94A41B81110E94A11B809100
:1037B0000C0190910D010C94F00F8091E701843081
:1037C00021F11092D10120E488E190E00FB6F89445
:1037D000A895809360000FBE2093600080E00E9457
:1037E000E10283B7817F846083BF83B7816083BF39
:1037F0007894889583B78E7F83BF88E10FB6F8945D
:1038000080936000109260000FBE0895089508959F
:10381000CF9380E00E94E1020E94061C0E943807BC
:103820000E94071CC0E08C2F0E948C08892B29F471
:10383000CF5FC530C1F780E001C081E0CF9108952E
:103840000E94151680E00E94E1020E94D0220E9490
:10385000E40F0C9462051F920F920FB60F92112481
:103860008F939F93AF93BF938091D101811113C028
:103870008091D2019091D301A091D401B091D50152
:103880004196A11DB11D8093D2019093D301A093C5
:10389000D401B093D501BF91AF919F918F910F90BB
:1038A0000FBE0F901F90189582E084BD93E095BDE8
:1038B0009AEF97BD80936E0008958FB7F89440916A
:1038C000D2015091D3016091D4017091D5018FBF85
:1038D000CA010895CF92DF92EF92FF920F931F9348
:1038E0002FB7F8944091D2015091D3016091D40147
:1038F0007091D5012FBF6A017B01EE24FF248C015A
:1039000020E030E0C016D106E206F30620F09A016E
:10391000281B390B05C09C0120953095240F351FBD
:10392000C9011F910F91FF90EF90DF90CF90089504
:103930001F920F920FB60F9211248F939F93AF9304
:10394000BF938091D2019091D301A091D401B09105
:10395000D5010196A11DB11D8093D2019093D30191
:10396000A093D401B093D501BF91AF919F918F9156
:103970000F900FBE0F901F9018950E94C80CF894DE
:103980002FEF87EA91E6215080409040E1F700C098
:10399000000087E090EBDC018093F1019093F2014D
:1039A000A093F301B093F4012CE088E190E00FB60E
:1039B000F894A895809360000FBE20936000FFCF1D
:1039C000CF92DF92EF92FF920F931F93CF93DF93EB
:1039D000C82ED12C01E010E08D2D0E948C087C01B6
:1039E000C0E0D0E098010C2E02C0220F331F0A94D1
:1039F000E2F72E213F21232B29F42196CC30D1054B
:103A000089F708C06C2F7D2D80E00E94D503C81275
:103A1000F4CF06C0D39485E0D812DECF80E001C099
:103A200081E0DF91CF911F910F91FF90EF90DF9098
:103A3000CF900895CF93C82F8CE20E94E01C88237A
:103A400021F08C2FCF910C94E01C80E0CF91089551
:103A5000CF930E946B1E811102C00E944C1EC5E6CE
:103A600008C00E9438078FE39CE90197F1F700C076
:103A70000000C150B1F789E20E941A1D81110AC1EC
:103A80008AE20E941A1D81110E944C1E85E00E944C
:103A90001A1D81110E94BD1C0E94761E8093D001C8
:103AA00087E00E941A1D882399F18BE10E941A1D5C
:103AB000882351F09091D00191FB882780F921E073
:103AC000822780FB91F922C08EE00E941A1D882374
:103AD00051F09091D00192FB882780F921E0822754
:103AE00080FB92F913C080E10E941A1D9091D001D1
:103AF000882341F093FB882780F921E0822780FB0F
:103B000093F904C0892F809580FB90F99093D001A0
:103B10008091D0010E947A1E0E94881E8093E1014C
:103B200080EE0E941A1D882341F08091E101982FB8
:103B3000909590FB80F98093E10189E30E941A1D22
:103B4000882359F09091E10191FB882780F921E0C9
:103B5000822780FB91F99093E10182EE0E941A1D69
:103B6000882359F09091E10192FB882780F921E0A8
:103B7000822780FB92F99093E10186EE0E941A1D44
:103B8000882359F09091E10193FB882780F921E087
:103B9000822780FB93F99093E10183EE0E941A1D26
:103BA000882359F09091E10194FB882780F921E066
:103BB000822780FB94F99093E10185E30E941A1D0E
:103BC000882359F09091E10195FB882780F921E045
:103BD000822780FB95F99093E10181E30E941A1DF1
:103BE000882359F09091E10196FB882780F921E024
:103BF000822780FB96F99093E10181E10E941A1DD2
:103C0000882359F09091E10197FB882780F921E002
:103C1000822780FB97F99093E1018091E1010E9456
:103C20008C1E87E20E941A1DC82F8EE10E941A1D69
:103C30008111C2608FE10E941A1D8111C46080E26F
:103C40000E941A1D8111C86081E20E941A1D811113
:103C5000C06182E20E941A1D8111C06283E20E944B
:103C60001A1D8111C06484E20E941A1D882311F07C
:103C7000C06802C0CC2329F08C2F0E94831E6C2FB9
:103C800003C00E947F1E682F70E080E090E0CF911B
:103C90000C94201ACF9108956DEE7EEF80E090E0B5
:103CA0000E94D92460E082E090E00E94CB2460E092
:103CB00083E090E00E94CB2460E084E090E00E94EA
:103CC000CB2460E085E090E00E94CB2460E086E0B9
:103CD00090E00C94CB2480E090E00E94C52421E089
:103CE0008D3E9E4F09F020E0822F089582E090E003
:103CF0000C94BD24682F82E090E00C94CB2483E0E8
:103D000090E00C94BD24682F83E090E00C94CB24C9
:103D100084E090E00C94BD24682F84E090E00C9443
:103D2000CB2486E090E00C94BD24682F86E090E0E0
:103D30000C94CB248091DE0180FF0BC060911101B7
:103D400085E0689FB0011124759567957595679515
:103D50002AC081FF09C06091110185E0689FB00110
:103D60001124759567951FC082FF07C060911101EE
:103D700085E0689FB001112416C04091D80144230A
:103D8000C9F060911001461788F72091110185E074
:103D9000289F90011124429FC001439F900D112440
:103DA00070E00E9495246038710540F4611571053A
:103DB00039F002C065E070E0862F08958FE708951E
:103DC00081E008958091DE0180FF08C060910F01BD
:103DD00070E0759567957595679521C081FF06C060
:103DE00060910F0170E07595679519C082FF04C05E
:103DF00060910F0170E010C08091D8018823C1F05C
:103E000060910E018617A0F790910F01989FC00155
:103E1000112470E00E9495246038710528F4611522
:103E2000710521F0862F08958FE7089581E00895A8
:103E300061E070E0F4CF803F21F40E949A1E8195EA
:103E400004C0813F29F40E949A1E8093DB010895EB
:103E5000823F21F40E949A1E819504C0833F29F479
:103E60000E949A1E8093DA010895893F19F40E94F6
:103E7000E21E05C08A3F31F40E94E21E81958093C4
:103E8000DC0108958B3F21F40E94E21E819504C05D
:103E90008C3F29F40E94E21E8093DD010895843F47
:103EA00021F48091D901816017C0853F21F4809170
:103EB000D901826011C0863F21F48091D9018460CC
:103EC0000BC0873F21F48091D901886005C0883FED
:103ED00031F48091D90180618093D90108958D3F9B
:103EE00021F48091DE0181600BC08E3F21F480912E
:103EF000DE01826005C08F3F29F48091DE0184607D
:103F00008093DE010895803F29F48091DB0187FFD3
:103F10006EC007C0813F41F48091DB0118160CF0A0
:103F200066C01092DB0163C09091DA01823F19F400
:103F300097FF5DC005C0833F31F419160CF057C0E0
:103F40001092DA0154C0893F31F48091DC011816D7
:103F50000CF04DC006C08A3F39F48091DC0187FF28
:103F600046C01092DC0143C08B3F29F48091DD01F3
:103F700087FF3DC006C08C3F39F48091DD011816E3
:103F8000B4F51092DD0133C0843F21F48091D90152
:103F90008E7F05C0853F31F48091D9018D7F80935C
:103FA000D90125C0863F21F48091D9018B7FF7CFBD
:103FB000873F21F48091D901877FF1CF883F21F499
:103FC0008091D9018F7EEBCF8D3F21F48091DE016E
:103FD0008E7F0BC08E3F21F48091DE018D7F05C066
:103FE0008F3F29F48091DE018B7F8093DE018091E9
:103FF000DA0181110EC08091DB0181110AC080912C
:10400000DC01811106C08091DD01811102C0109296
:10401000D801089589ED91E00E94FB0F0E945D1C7C
:104020009093D7018093D6010895CF938091D601C4
:104030009091D7010E946A1C4091D801442321F03D
:104040002091120130E006C0209113015AE0259F13
:10405000900111248217930708F486C08091DA0139
:1040600081110DC09091DB01911109C09091DC018B
:10407000911105C09091DD01992309F475C04F3F5E
:1040800019F04F5F4093D801181624F40E949A1E2D
:104090008093DA018091DA0187FF05C00E949A1EA1
:1040A00081958093DA018091DB01181624F40E9437
:1040B0009A1E8093DB018091DB0187FF05C00E947F
:1040C0009A1E81958093DB016091DA01662339F1B4
:1040D000C091DB01CC2319F1772767FD7095872FFD
:1040E000972F0E949A2323E333E343E35FE30E9485
:1040F000FE230E9467236093DA016C2F772767FD08
:104100007095872F972F0E949A2323E333E343E38D
:104110005FE30E94FE230E9467236093DB0180918E
:10412000DC01181624F40E94E21E8093DC018091C9
:10413000DC0187FF05C00E94E21E81958093DC01AF
:104140008091DD01181624F40E94E21E8093DD01A7
:104150008091DD0187FF05C00E94E21E819580935A
:10416000DD01CF910C940A20CF910895E9EDF1E0A3
:1041700085E0DF011D928A95E9F71092D80110922F
:10418000DE010895833089F130F4813061F08230AE
:1041900009F06EC019C0853009F449C0B8F1863005
:1041A00009F066C055C020911301862F90E0820F60
:1041B000911D8F3F910520F4620F609313010895C4
:1041C0008FEF80931301089520911201862F90E0C4
:1041D000820F911D8F3F910520F4620F60931201B1
:1041E00008958FEF80931201089520911101862F79
:1041F00090E0820F911D8F3F910520F4620F609334
:10420000110108958FEF80931101089520911001FD
:10421000862F90E0820F911D8F3F910520F4620F51
:104220006093100108958FEF8093100108952091FD
:104230000F01862F90E0820F911D8F3F910520F492
:10424000620F60930F0108958FEF80930F0108951F
:1042500020910E01862F90E0820F911D8F3F9105D6
:1042600020F4620F60930E0108958FEF80930E018A
:104270000895833021F130F4813059F0823009F013
:1042800049C012C0853089F128F1863009F042C05A
:1042900037C080911301681720F4861B80931301A7
:1042A000089510921301089580911201681720F467
:1042B000861B809312010895109212010895809137
:1042C0001101681720F4861B809311010895109244
:1042D0001101089580911001681720F4861B8093C6
:1042E0001001089510921001089580910F01681730
:1042F00020F4861B80930F01089510920F010895FA
:1043000080910E01681720F4861B80930E0108959A
:1043100010920E01089541E050E060E070E004C0AA
:10432000440F551F661F771F8A95D2F7CB01BA013C
:104330000E94201A0C941516873200F58E3108F071
:1043400086C08E3009F466C060F4873009F44DC031
:1043500018F4863049F531C0883041F18B3021F5B1
:104360007BC0863109F478C018F48031E9F45CC070
:10437000893109F471C08B31B9F442C0883309F432
:104380006BC048F4893209F460C0853309F45DC01C
:10439000873251F45AC0833409F457C018F48A3371
:1043A00018F057C0883499F080E008950E94761E76
:1043B0000E94881E0E94911E4FC08091D001817F73
:1043C0008E7F8093D00181E08093DF0108950E9469
:1043D00015162FEF83ED90E3215080409040E1F7D8
:1043E00000C000000E94BD1C37C08091D00180FF3A
:1043F00003C0817F8E7F01C081608093D0012CC07B
:104400009091D00191FB882780F921E0822780FBE1
:1044100091F913C09091D00192FB882780F921E097
:10442000822780FB92F909C09091D00193FB8827E5
:1044300080F921E0822780FB93F99093D0018823B3
:1044400059F091609093D00107C080E003C08D5176
:1044500001C089530E948B2181E0089580E0089576
:1044600080E00895CF93C82F8091DF01813071F0F3
:1044700020F0823009F089C037C0A0910C01B091C2
:104480000D018C91823209F082C007C0A0910C010D
:10449000B0910D018C91823249F48C2F0E942E2212
:1044A00081111EC08C2F0E949C211CC08C2F0E9449
:1044B0003022811115C0C43169F030F4CB3081F065
:1044C000C03109F068C009C0C93221F0C83309F011
:1044D00062C006C01092DF015EC082E08093DF01FF
:1044E00081E090E081705AC0C932C9F060F4C431F3
:1044F000B1F020F4C73009F04CC034C0CE51C63002
:1045000008F047C017C0CE3439F120F4CB3409F09D
:1045100040C01CC0C135C1F0C235D9F513C080916F
:10452000E001882319F01092E00133C081E080930C
:10453000DF0134C0EC2FF0E0E65BFE4F808180931A
:10454000E00127C061E003C061E007C06AE080913C
:10455000E0010E94C2201DC06AE08091E0010E943B
:10456000392117C08EE18093130182E380931201F9
:104570008AE08093110184E18093100188E08093A8
:104580000F0188E280930E0104C01092DF0180E0E9
:1045900005C081E003C080E090E0A4CFCF910895F2
:1045A0000E946B1E811102C00E944C1E0E94911E2F
:1045B0008093F00180FF02C0869501C080E00C94DA
:1045C000E1028091F001982F9695292F30E0233059
:1045D00031054CF49F5F990F8170892B8160809326
:1045E000F0010E94951E8091F00186950C94E102E5
:1045F0008091F001982F969591F09158990F8170C4
:10460000892B8093F0018E7F91E009F490E08091F6
:10461000F00190FB80F98093F0010E94951E80913B
:10462000F00186950C94E1028091F001982F90950D
:1046300090FB80F98093F0010E94951E8091F0011B
:1046400080FF02C0869501C080E00C94E1023091A9
:10465000F001232F26952F5F2F77822F90E0317066
:1046600004972CF4220F232B2093F00102C03093E7
:10467000F0018091F001282F2E7F91E009F490E065
:1046800090FB80F98093F0010E94951E8091F001CB
:1046900086950C94E1022091F001922F969598272F
:1046A000990F822F8170892B8093F0018E7F91E08A
:1046B00009F490E08091F00190FB80F98093F00183
:1046C0000E94951E8091F00186950C94E10204D021
:1046D0006894B1118DC0089570D088F09F5790F004
:1046E000B92F9927B751A0F0D1F0660F771F881F17
:1046F000991F1AF0BA95C9F712C0B13081F077D07E
:10470000B1E0089574C0672F782F8827B85F39F01B
:10471000B93FCCF3869577956795B395D9F73EF475
:1047200090958095709561957F4F8F4F9F4F08951D
:10473000E89409C097FB3EF490958095709561953B
:104740007F4F8F4F9F4F9923A9F0F92F96E9BB27F1
:104750009395F695879577956795B795F111F8CF6D
:10476000FAF4BB0F11F460FF1BC06F5F7F4F8F4FD8
:104770009F4F16C0882311F096E911C0772321F0CE
:104780009EE8872F762F05C0662371F096E8862F66
:1047900070E060E02AF09A95660F771F881FDAF7BD
:1047A000880F9695879597F9089557FD9058440F6F
:1047B000551F59F05F3F71F04795880F97FB991F80
:1047C00061F09F3F79F0879508951216130614063D
:1047D000551FF2CF4695F1DF08C0161617061806CA
:1047E000991FF1CF86957105610508940895E894A5
:1047F000BB2766277727CB0197F908950BD078C0A0
:1048000069D028F06ED018F0952309F05AC05FC027
:104810001124EECFCADFA0F3959FD1F3950F50E09E
:10482000551F629FF001729FBB27F00DB11D639F62
:10483000AA27F00DB11DAA1F649F6627B00DA11D08
:10484000661F829F2227B00DA11D621F739FB00DAE
:10485000A11D621F839FA00D611D221F749F33271E
:10486000A00D611D231F849F600D211D822F762FB7
:104870006A2F11249F5750408AF0E1F088234AF0B4
:10488000EE0FFF1FBB1F661F771F881F9150504000
:10489000A9F79E3F510570F014C0AACF5F3FECF31B
:1048A000983EDCF3869577956795B795F795E795EC
:1048B0009F5FC1F7FE2B880F911D9695879597F9FD
:1048C000089597F99F6780E870E060E008959FEF92
:1048D00080EC089500240A94161617061806090697
:1048E000089500240A941216130614060506089566
:1048F000092E0394000C11F4882352F0BB0F40F4EE
:10490000BF2B11F460FF04C06F5F7F4F8F4F9F4F2D
:104910000895991B79E004C0991F961708F0961B1B
:10492000881F7A95C9F78095089597FB072E16F48E
:10493000009407D077FD09D00E94A92407FC05D078
:104940003EF4909581959F4F0895709561957F4FA6
:104950000895AA1BBB1B51E107C0AA1FBB1FA617C6
:10496000B70710F0A61BB70B881F991F5A95A9F718
:1049700080959095BC01CD010895F999FECF92BD27
:1049800081BDF89A992780B50895A8E1B0E042E08A
:1049900050E00C94E024262FF999FECF1FBA92BD67
:1049A00081BD20BD0FB6F894FA9AF99A0FBE019610
:1049B00008950E94CB24272F0C94CC24DC01CB013A
:1049C000FC01F999FECF06C0F2BDE1BDF89A31961F
:1049D00000B40D9241505040B8F70895F894FFCFBD
:1049E00005960826090209CD08990801C80128087A
:1049F000140A321E420045002500260043006100D3
:104A00006000200037006400650066006700440015
:104A100046002400470074038D03A603BF038B04E4
:104A20003E040804E8033F4D362001020304050656
:044A3000070809006A
:00000001FF

@ -2,39 +2,39 @@
__attribute__ ((weak))
void matrix_init_user(void) {
// leave this function blank - it can be defined in a keymap file
// leave this function blank - it can be defined in a keymap file
};
__attribute__ ((weak))
void matrix_scan_user(void) {
// leave this function blank - it can be defined in a keymap file
// leave this function blank - it can be defined in a keymap file
};
__attribute__ ((weak))
void led_set_user(uint8_t usb_led) {
// leave this function blank - it can be defined in a keymap file
// leave this function blank - it can be defined in a keymap file
};
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
// put your keyboard start-up code here
// runs once when the firmware starts up
// Disable status LED on KB, enable status LED on Teensy (KB_STATUS = !TEENSY_STATUS)
DDRD |= (1<<6);
PORTD |= (1<<6);
// Disable status LED on KB, enable status LED on Teensy (KB_STATUS = !TEENSY_STATUS)
DDRD |= (1<<6);
PORTD |= (1<<6);
matrix_init_user();
matrix_init_user();
};
void amatrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)
matrix_scan_user();
matrix_scan_user();
};
void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
// output low
@ -64,5 +64,5 @@ void led_set_kb(uint8_t usb_led) {
PORTC &= ~(1<<6);
}
led_set_user(usb_led);
led_set_user(usb_led);
};

@ -2,6 +2,11 @@
# Script to make a new quantum project
# Jack Humbert 2015
if [ -z "$1" ]; then
echo "Usage: $0 <keyboard_name>"
exit 1
fi
KEYBOARD=$1
KEYBOARD_UPPERCASE=$(echo $1 | awk '{print toupper($0)}')

@ -4,23 +4,29 @@
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/io.h>
#include "print.h"
#include "audio.h"
#include "keymap_common.h"
#include "eeconfig.h"
#ifdef VIBRATO_ENABLE
#include "vibrato_lut.h"
#endif
#define PI 3.14159265
#define CPU_PRESCALER 8
// #define PWM_AUDIO
#ifdef PWM_AUDIO
#include "wave.h"
#define SAMPLE_DIVIDER 39
#define SAMPLE_RATE (2000000.0/SAMPLE_DIVIDER/2048)
// Resistor value of 1/ (2 * PI * 10nF * (2000000 hertz / SAMPLE_DIVIDER / 10)) for 10nF cap
float places[8] = {0, 0, 0, 0, 0, 0, 0, 0};
uint16_t place_int = 0;
bool repeat = true;
#endif
void delay_us(int count) {
@ -31,35 +37,31 @@ void delay_us(int count) {
int voices = 0;
int voice_place = 0;
double frequency = 0;
float frequency = 0;
int volume = 0;
long position = 0;
int duty_place = 1;
int duty_counter = 0;
double frequencies[8] = {0, 0, 0, 0, 0, 0, 0, 0};
float frequencies[8] = {0, 0, 0, 0, 0, 0, 0, 0};
int volumes[8] = {0, 0, 0, 0, 0, 0, 0, 0};
bool sliding = false;
int max = 0xFF;
float sum = 0;
int value = 128;
float place = 0;
float places[8] = {0, 0, 0, 0, 0, 0, 0, 0};
uint16_t place_int = 0;
bool repeat = true;
uint8_t * sample;
uint16_t sample_length = 0;
// float freq = 0;
bool notes = false;
bool note = false;
float note_frequency = 0;
float note_length = 0;
float note_tempo = TEMPO_DEFAULT;
float note_timbre = TIMBRE_DEFAULT;
uint16_t note_position = 0;
float (* notes_pointer)[][2];
uint8_t notes_length;
uint16_t notes_count;
bool notes_repeat;
float notes_rest;
bool note_resting = false;
@ -67,26 +69,157 @@ bool note_resting = false;
uint8_t current_note = 0;
uint8_t rest_counter = 0;
#ifdef VIBRATO_ENABLE
float vibrato_counter = 0;
float vibrato_strength = .5;
float vibrato_rate = 0.125;
#endif
float polyphony_rate = 0;
bool inited = false;
audio_config_t audio_config;
uint16_t envelope_index = 0;
void audio_toggle(void) {
audio_config.enable ^= 1;
eeconfig_write_audio(audio_config.raw);
eeconfig_update_audio(audio_config.raw);
}
void audio_on(void) {
audio_config.enable = 1;
eeconfig_write_audio(audio_config.raw);
eeconfig_update_audio(audio_config.raw);
}
void audio_off(void) {
audio_config.enable = 0;
eeconfig_write_audio(audio_config.raw);
eeconfig_update_audio(audio_config.raw);
}
#ifdef VIBRATO_ENABLE
// Vibrato rate functions
void set_vibrato_rate(float rate) {
vibrato_rate = rate;
}
void increase_vibrato_rate(float change) {
vibrato_rate *= change;
}
void decrease_vibrato_rate(float change) {
vibrato_rate /= change;
}
#ifdef VIBRATO_STRENGTH_ENABLE
void set_vibrato_strength(float strength) {
vibrato_strength = strength;
}
void increase_vibrato_strength(float change) {
vibrato_strength *= change;
}
void decrease_vibrato_strength(float change) {
vibrato_strength /= change;
}
#endif
#endif
// Polyphony functions
void set_polyphony_rate(float rate) {
polyphony_rate = rate;
}
void enable_polyphony() {
polyphony_rate = 5;
}
void disable_polyphony() {
polyphony_rate = 0;
}
void increase_polyphony_rate(float change) {
polyphony_rate *= change;
}
void decrease_polyphony_rate(float change) {
polyphony_rate /= change;
}
// Timbre function
void set_timbre(float timbre) {
note_timbre = timbre;
}
// Tempo functions
void set_tempo(float tempo) {
note_tempo = tempo;
}
void decrease_tempo(uint8_t tempo_change) {
note_tempo += (float) tempo_change;
}
void increase_tempo(uint8_t tempo_change) {
if (note_tempo - (float) tempo_change < 10) {
note_tempo = 10;
} else {
note_tempo -= (float) tempo_change;
}
}
void audio_init() {
/* check signature */
if (!eeconfig_is_enabled()) {
eeconfig_init();
}
audio_config.raw = eeconfig_read_audio();
#ifdef PWM_AUDIO
PLLFRQ = _BV(PDIV2);
PLLCSR = _BV(PLLE);
while(!(PLLCSR & _BV(PLOCK)));
PLLFRQ |= _BV(PLLTM0); /* PCK 48MHz */
/* Init a fast PWM on Timer4 */
TCCR4A = _BV(COM4A0) | _BV(PWM4A); /* Clear OC4A on Compare Match */
TCCR4B = _BV(CS40); /* No prescaling => f = PCK/256 = 187500Hz */
OCR4A = 0;
/* Enable the OC4A output */
DDRC |= _BV(PORTC6);
TIMSK3 &= ~_BV(OCIE3A); // Turn off 3A interputs
TCCR3A = 0x0; // Options not needed
TCCR3B = _BV(CS31) | _BV(CS30) | _BV(WGM32); // 64th prescaling and CTC
OCR3A = SAMPLE_DIVIDER - 1; // Correct count/compare, related to sample playback
#else
DDRC |= _BV(PORTC6);
TIMSK3 &= ~_BV(OCIE3A); // Turn off 3A interputs
TCCR3A = (0 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30);
TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (1 << CS31) | (0 << CS30);
#endif
inited = true;
}
void stop_all_notes() {
if (!inited) {
audio_init();
}
voices = 0;
#ifdef PWM_AUDIO
TIMSK3 &= ~_BV(OCIE3A);
@ -105,8 +238,11 @@ void stop_all_notes() {
}
}
void stop_note(double freq) {
void stop_note(float freq) {
if (note) {
if (!inited) {
audio_init();
}
#ifdef PWM_AUDIO
freq = freq / SAMPLE_RATE;
#endif
@ -120,11 +256,15 @@ void stop_note(double freq) {
volumes[j] = volumes[j+1];
volumes[j+1] = 0;
}
break;
}
}
voices--;
if (voices < 0)
voices = 0;
if (voice_place >= voices) {
voice_place = 0;
}
if (voices == 0) {
#ifdef PWM_AUDIO
TIMSK3 &= ~_BV(OCIE3A);
@ -135,66 +275,29 @@ void stop_note(double freq) {
frequency = 0;
volume = 0;
note = false;
} else {
double freq = frequencies[voices - 1];
int vol = volumes[voices - 1];
double starting_f = frequency;
if (frequency < freq) {
sliding = true;
for (double f = starting_f; f <= freq; f += ((freq - starting_f) / 2000.0)) {
frequency = f;
}
sliding = false;
} else if (frequency > freq) {
sliding = true;
for (double f = starting_f; f >= freq; f -= ((starting_f - freq) / 2000.0)) {
frequency = f;
}
sliding = false;
}
frequency = freq;
volume = vol;
}
}
}
void init_notes() {
/* check signature */
if (!eeconfig_is_enabled()) {
eeconfig_init();
}
audio_config.raw = eeconfig_read_audio();
#ifdef PWM_AUDIO
PLLFRQ = _BV(PDIV2);
PLLCSR = _BV(PLLE);
while(!(PLLCSR & _BV(PLOCK)));
PLLFRQ |= _BV(PLLTM0); /* PCK 48MHz */
#ifdef VIBRATO_ENABLE
/* Init a fast PWM on Timer4 */
TCCR4A = _BV(COM4A0) | _BV(PWM4A); /* Clear OC4A on Compare Match */
TCCR4B = _BV(CS40); /* No prescaling => f = PCK/256 = 187500Hz */
OCR4A = 0;
/* Enable the OC4A output */
DDRC |= _BV(PORTC6);
TIMSK3 &= ~_BV(OCIE3A); // Turn off 3A interputs
float mod(float a, int b)
{
float r = fmod(a, b);
return r < 0 ? r + b : r;
}
TCCR3A = 0x0; // Options not needed
TCCR3B = _BV(CS31) | _BV(CS30) | _BV(WGM32); // 64th prescaling and CTC
OCR3A = SAMPLE_DIVIDER - 1; // Correct count/compare, related to sample playback
float vibrato(float average_freq) {
#ifdef VIBRATO_STRENGTH_ENABLE
float vibrated_freq = average_freq * pow(VIBRATO_LUT[(int)vibrato_counter], vibrato_strength);
#else
DDRC |= _BV(PORTC6);
TIMSK3 &= ~_BV(OCIE3A); // Turn off 3A interputs
TCCR3A = (0 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30);
TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (1 << CS31) | (0 << CS30);
float vibrated_freq = average_freq * VIBRATO_LUT[(int)vibrato_counter];
#endif
vibrato_counter = mod((vibrato_counter + vibrato_rate * (1.0 + 440.0/average_freq)), VIBRATO_LUT_LENGTH);
return vibrated_freq;
}
#endif
ISR(TIMER3_COMPA_vect) {
if (note) {
@ -246,22 +349,55 @@ ISR(TIMER3_COMPA_vect) {
OCR4A = sum;
}
#else
if (frequency > 0) {
// ICR3 = (int)(((double)F_CPU) / frequency); // Set max to the period
// OCR3A = (int)(((double)F_CPU) / frequency) >> 1; // Set compare to half the period
voice_place %= voices;
if (place > (frequencies[voice_place] / 50)) {
voice_place = (voice_place + 1) % voices;
place = 0.0;
if (voices > 0) {
float freq;
if (polyphony_rate > 0) {
if (voices > 1) {
voice_place %= voices;
if (place++ > (frequencies[voice_place] / polyphony_rate / CPU_PRESCALER)) {
voice_place = (voice_place + 1) % voices;
place = 0.0;
}
}
#ifdef VIBRATO_ENABLE
if (vibrato_strength > 0) {
freq = vibrato(frequencies[voice_place]);
} else {
#else
{
#endif
freq = frequencies[voice_place];
}
} else {
if (frequency != 0 && frequency < frequencies[voices - 1] && frequency < frequencies[voices - 1] * pow(2, -440/frequencies[voices - 1]/12/2)) {
frequency = frequency * pow(2, 440/frequency/12/2);
} else if (frequency != 0 && frequency > frequencies[voices - 1] && frequency > frequencies[voices - 1] * pow(2, 440/frequencies[voices - 1]/12/2)) {
frequency = frequency * pow(2, -440/frequency/12/2);
} else {
frequency = frequencies[voices - 1];
}
#ifdef VIBRATO_ENABLE
if (vibrato_strength > 0) {
freq = vibrato(frequency);
} else {
#else
{
#endif
freq = frequency;
}
}
ICR3 = (int)(((double)F_CPU) / (frequencies[voice_place] * CPU_PRESCALER)); // Set max to the period
OCR3A = (int)(((double)F_CPU) / (frequencies[voice_place] * CPU_PRESCALER)) >> 1 * duty_place; // Set compare to half the period
place++;
// if (duty_counter > (frequencies[voice_place] / 500)) {
// duty_place = (duty_place % 3) + 1;
// duty_counter = 0;
// }
// duty_counter++;
if (envelope_index < 65535) {
envelope_index++;
}
freq = voice_envelope(freq);
if (freq < 30.517578125)
freq = 30.52;
ICR3 = (int)(((double)F_CPU) / (freq * CPU_PRESCALER)); // Set max to the period
OCR3A = (int)((((double)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre); // Set compare to half the period
}
#endif
}
@ -287,8 +423,25 @@ ISR(TIMER3_COMPA_vect) {
place -= SINE_LENGTH;
#else
if (note_frequency > 0) {
ICR3 = (int)(((double)F_CPU) / (note_frequency * CPU_PRESCALER)); // Set max to the period
OCR3A = (int)(((double)F_CPU) / (note_frequency * CPU_PRESCALER)) >> 1; // Set compare to half the period
float freq;
#ifdef VIBRATO_ENABLE
if (vibrato_strength > 0) {
freq = vibrato(note_frequency);
} else {
#else
{
#endif
freq = note_frequency;
}
if (envelope_index < 65535) {
envelope_index++;
}
freq = voice_envelope(freq);
ICR3 = (int)(((double)F_CPU) / (freq * CPU_PRESCALER)); // Set max to the period
OCR3A = (int)((((double)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre); // Set compare to half the period
} else {
ICR3 = 0;
OCR3A = 0;
@ -304,7 +457,7 @@ ISR(TIMER3_COMPA_vect) {
end_of_note = (note_position >= (note_length * 0x7FF));
if (end_of_note) {
current_note++;
if (current_note >= notes_length) {
if (current_note >= notes_count) {
if (notes_repeat) {
current_note = 0;
} else {
@ -327,10 +480,11 @@ ISR(TIMER3_COMPA_vect) {
note_resting = false;
#ifdef PWM_AUDIO
note_frequency = (*notes_pointer)[current_note][0] / SAMPLE_RATE;
note_length = (*notes_pointer)[current_note][1];
note_length = (*notes_pointer)[current_note][1] * (note_tempo / 100);
#else
envelope_index = 0;
note_frequency = (*notes_pointer)[current_note][0];
note_length = (*notes_pointer)[current_note][1] / 4;
note_length = ((*notes_pointer)[current_note][1] / 4) * (note_tempo / 100);
#endif
}
note_position = 0;
@ -344,15 +498,53 @@ ISR(TIMER3_COMPA_vect) {
}
}
void play_notes(float (*np)[][2], uint8_t n_length, bool n_repeat, float n_rest) {
void play_note(float freq, int vol) {
if (audio_config.enable) {
if (!inited) {
audio_init();
}
if (audio_config.enable && voices < 8) {
TIMSK3 &= ~_BV(OCIE3A);
// Cancel notes if notes are playing
if (notes)
stop_all_notes();
note = true;
envelope_index = 0;
#ifdef PWM_AUDIO
freq = freq / SAMPLE_RATE;
#endif
if (freq > 0) {
frequencies[voices] = freq;
volumes[voices] = vol;
voices++;
}
#ifdef PWM_AUDIO
TIMSK3 |= _BV(OCIE3A);
#else
TIMSK3 |= _BV(OCIE3A);
TCCR3A |= _BV(COM3A1);
#endif
}
}
void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest) {
if (!inited) {
audio_init();
}
if (audio_config.enable) {
TIMSK3 &= ~_BV(OCIE3A);
// Cancel note if a note is playing
if (note)
stop_all_notes();
notes = true;
notes_pointer = np;
notes_length = n_length;
notes_count = n_count;
notes_repeat = n_repeat;
notes_rest = n_rest;
@ -360,10 +552,10 @@ if (audio_config.enable) {
current_note = 0;
#ifdef PWM_AUDIO
note_frequency = (*notes_pointer)[current_note][0] / SAMPLE_RATE;
note_length = (*notes_pointer)[current_note][1];
note_length = (*notes_pointer)[current_note][1] * (note_tempo / 100);
#else
note_frequency = (*notes_pointer)[current_note][0];
note_length = (*notes_pointer)[current_note][1] / 4;
note_length = ((*notes_pointer)[current_note][1] / 4) * (note_tempo / 100);
#endif
note_position = 0;
@ -374,69 +566,42 @@ if (audio_config.enable) {
TIMSK3 |= _BV(OCIE3A);
TCCR3A |= _BV(COM3A1);
#endif
notes = true;
}
}
#ifdef PWM_AUDIO
void play_sample(uint8_t * s, uint16_t l, bool r) {
if (!inited) {
audio_init();
}
if (audio_config.enable) {
stop_all_notes();
place_int = 0;
sample = s;
sample_length = l;
repeat = r;
if (audio_config.enable) {
TIMSK3 &= ~_BV(OCIE3A);
stop_all_notes();
place_int = 0;
sample = s;
sample_length = l;
repeat = r;
#ifdef PWM_AUDIO
TIMSK3 |= _BV(OCIE3A);
#else
#endif
}
}
#endif
//------------------------------------------------------------------------------
// Override these functions in your keymap file to play different tunes on
// startup and bootloader jump
__attribute__ ((weak))
void play_startup_tone()
{
}
void play_note(double freq, int vol) {
if (audio_config.enable && voices < 8) {
if (notes)
stop_all_notes();
#ifdef PWM_AUDIO
freq = freq / SAMPLE_RATE;
#endif
if (freq > 0) {
if (frequency != 0) {
double starting_f = frequency;
if (frequency < freq) {
for (double f = starting_f; f <= freq; f += ((freq - starting_f) / 2000.0)) {
frequency = f;
}
} else if (frequency > freq) {
for (double f = starting_f; f >= freq; f -= ((starting_f - freq) / 2000.0)) {
frequency = f;
}
}
}
frequency = freq;
volume = vol;
frequencies[voices] = frequency;
volumes[voices] = volume;
voices++;
}
#ifdef PWM_AUDIO
TIMSK3 |= _BV(OCIE3A);
#else
TIMSK3 |= _BV(OCIE3A);
TCCR3A |= _BV(COM3A1);
#endif
note = true;
}
__attribute__ ((weak))
void play_goodbye_tone()
{
}
//------------------------------------------------------------------------------

@ -3,10 +3,20 @@
#include <avr/io.h>
#include <util/delay.h>
#include "musical_notes.h"
#include "song_list.h"
#include "voices.h"
#ifndef AUDIO_H
#define AUDIO_H
// Largely untested PWM audio mode (doesn't sound as good)
// #define PWM_AUDIO
// #define VIBRATO_ENABLE
// Enable vibrato strength/amplitude - slows down ISR too much
// #define VIBRATO_STRENGTH_ENABLE
typedef union {
uint8_t raw;
struct {
@ -19,13 +29,47 @@ void audio_toggle(void);
void audio_on(void);
void audio_off(void);
// Vibrato rate functions
#ifdef VIBRATO_ENABLE
void set_vibrato_rate(float rate);
void increase_vibrato_rate(float change);
void decrease_vibrato_rate(float change);
#ifdef VIBRATO_STRENGTH_ENABLE
void set_vibrato_strength(float strength);
void increase_vibrato_strength(float change);
void decrease_vibrato_strength(float change);
#endif
#endif
// Polyphony functions
void set_polyphony_rate(float rate);
void enable_polyphony(void);
void disable_polyphony(void);
void increase_polyphony_rate(float change);
void decrease_polyphony_rate(float change);
void set_timbre(float timbre);
void set_tempo(float tempo);
void increase_tempo(uint8_t tempo_change);
void decrease_tempo(uint8_t tempo_change);
void audio_init(void);
#ifdef PWM_AUDIO
void play_sample(uint8_t * s, uint16_t l, bool r);
void play_note(double freq, int vol);
void stop_note(double freq);
#endif
void play_note(float freq, int vol);
void stop_note(float freq);
void stop_all_notes(void);
void init_notes(void);
void play_notes(float (*np)[][2], uint8_t n_length, bool n_repeat, float n_rest);
void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest);
#define SCALE (int []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \
0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \
@ -36,8 +80,10 @@ void play_notes(float (*np)[][2], uint8_t n_length, bool n_repeat, float n_rest)
// These macros are used to allow play_notes to play an array of indeterminate
// length. This works around the limitation of C's sizeof operation on pointers.
// The global float array for the song must be used here.
#define NOTE_ARRAY_SIZE(x) ((int)(sizeof(x) / (sizeof(x[0]))))
#define NOTE_ARRAY_SIZE(x) ((int16_t)(sizeof(x) / (sizeof(x[0]))))
#define PLAY_NOTE_ARRAY(note_array, note_repeat, note_rest_style) play_notes(&note_array, NOTE_ARRAY_SIZE((note_array)), (note_repeat), (note_rest_style));
void play_goodbye_tone(void);
void play_startup_tone(void);
#endif

@ -0,0 +1,357 @@
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#define FREQUENCY_LUT_LENGTH 349
const uint16_t FREQUENCY_LUT[FREQUENCY_LUT_LENGTH] = {
0x8E0B,
0x8C02,
0x8A00,
0x8805,
0x8612,
0x8426,
0x8241,
0x8063,
0x7E8C,
0x7CBB,
0x7AF2,
0x792E,
0x7772,
0x75BB,
0x740B,
0x7261,
0x70BD,
0x6F20,
0x6D88,
0x6BF6,
0x6A69,
0x68E3,
0x6762,
0x65E6,
0x6470,
0x6300,
0x6194,
0x602E,
0x5ECD,
0x5D71,
0x5C1A,
0x5AC8,
0x597B,
0x5833,
0x56EF,
0x55B0,
0x5475,
0x533F,
0x520E,
0x50E1,
0x4FB8,
0x4E93,
0x4D73,
0x4C57,
0x4B3E,
0x4A2A,
0x491A,
0x480E,
0x4705,
0x4601,
0x4500,
0x4402,
0x4309,
0x4213,
0x4120,
0x4031,
0x3F46,
0x3E5D,
0x3D79,
0x3C97,
0x3BB9,
0x3ADD,
0x3A05,
0x3930,
0x385E,
0x3790,
0x36C4,
0x35FB,
0x3534,
0x3471,
0x33B1,
0x32F3,
0x3238,
0x3180,
0x30CA,
0x3017,
0x2F66,
0x2EB8,
0x2E0D,
0x2D64,
0x2CBD,
0x2C19,
0x2B77,
0x2AD8,
0x2A3A,
0x299F,
0x2907,
0x2870,
0x27DC,
0x2749,
0x26B9,
0x262B,
0x259F,
0x2515,
0x248D,
0x2407,
0x2382,
0x2300,
0x2280,
0x2201,
0x2184,
0x2109,
0x2090,
0x2018,
0x1FA3,
0x1F2E,
0x1EBC,
0x1E4B,
0x1DDC,
0x1D6E,
0x1D02,
0x1C98,
0x1C2F,
0x1BC8,
0x1B62,
0x1AFD,
0x1A9A,
0x1A38,
0x19D8,
0x1979,
0x191C,
0x18C0,
0x1865,
0x180B,
0x17B3,
0x175C,
0x1706,
0x16B2,
0x165E,
0x160C,
0x15BB,
0x156C,
0x151D,
0x14CF,
0x1483,
0x1438,
0x13EE,
0x13A4,
0x135C,
0x1315,
0x12CF,
0x128A,
0x1246,
0x1203,
0x11C1,
0x1180,
0x1140,
0x1100,
0x10C2,
0x1084,
0x1048,
0x100C,
0xFD1,
0xF97,
0xF5E,
0xF25,
0xEEE,
0xEB7,
0xE81,
0xE4C,
0xE17,
0xDE4,
0xDB1,
0xD7E,
0xD4D,
0xD1C,
0xCEC,
0xCBC,
0xC8E,
0xC60,
0xC32,
0xC05,
0xBD9,
0xBAE,
0xB83,
0xB59,
0xB2F,
0xB06,
0xADD,
0xAB6,
0xA8E,
0xA67,
0xA41,
0xA1C,
0x9F7,
0x9D2,
0x9AE,
0x98A,
0x967,
0x945,
0x923,
0x901,
0x8E0,
0x8C0,
0x8A0,
0x880,
0x861,
0x842,
0x824,
0x806,
0x7E8,
0x7CB,
0x7AF,
0x792,
0x777,
0x75B,
0x740,
0x726,
0x70B,
0x6F2,
0x6D8,
0x6BF,
0x6A6,
0x68E,
0x676,
0x65E,
0x647,
0x630,
0x619,
0x602,
0x5EC,
0x5D7,
0x5C1,
0x5AC,
0x597,
0x583,
0x56E,
0x55B,
0x547,
0x533,
0x520,
0x50E,
0x4FB,
0x4E9,
0x4D7,
0x4C5,
0x4B3,
0x4A2,
0x491,
0x480,
0x470,
0x460,
0x450,
0x440,
0x430,
0x421,
0x412,
0x403,
0x3F4,
0x3E5,
0x3D7,
0x3C9,
0x3BB,
0x3AD,
0x3A0,
0x393,
0x385,
0x379,
0x36C,
0x35F,
0x353,
0x347,
0x33B,
0x32F,
0x323,
0x318,
0x30C,
0x301,
0x2F6,
0x2EB,
0x2E0,
0x2D6,
0x2CB,
0x2C1,
0x2B7,
0x2AD,
0x2A3,
0x299,
0x290,
0x287,
0x27D,
0x274,
0x26B,
0x262,
0x259,
0x251,
0x248,
0x240,
0x238,
0x230,
0x228,
0x220,
0x218,
0x210,
0x209,
0x201,
0x1FA,
0x1F2,
0x1EB,
0x1E4,
0x1DD,
0x1D6,
0x1D0,
0x1C9,
0x1C2,
0x1BC,
0x1B6,
0x1AF,
0x1A9,
0x1A3,
0x19D,
0x197,
0x191,
0x18C,
0x186,
0x180,
0x17B,
0x175,
0x170,
0x16B,
0x165,
0x160,
0x15B,
0x156,
0x151,
0x14C,
0x148,
0x143,
0x13E,
0x13A,
0x135,
0x131,
0x12C,
0x128,
0x124,
0x120,
0x11C,
0x118,
0x114,
0x110,
0x10C,
0x108,
0x104,
0x100,
0xFD,
0xF9,
0xF5,
0xF2,
0xEE
};

@ -2,22 +2,38 @@
#define MUSICAL_NOTES_H
// Tempo Placeholder
#define TEMPO 120
#define TEMPO_DEFAULT 100
#define SONG(notes...) { notes }
// Note Types
#define WHOLE_NOTE(note) {(NOTE##note), 64}
#define HALF_NOTE(note) {(NOTE##note), 32}
#define QUARTER_NOTE(note) {(NOTE##note), 16}
#define EIGHTH_NOTE(note) {(NOTE##note), 8}
#define SIXTEENTH_NOTE(note) {(NOTE##note), 4}
// Note Types Short
#define W_NOTE(n) WHOLE_NOTE(n)
#define H_NOTE(n) HALF_NOTE(n)
#define Q_NOTE(n) QUARTER_NOTE(n)
#define E_NOTE(n) EIGTH_NOTE(n)
#define S_NOTE(n) SIXTEENTH_NOTE(n)
#define MUSICAL_NOTE(note, duration) {(NOTE##note), duration}
#define WHOLE_NOTE(note) MUSICAL_NOTE(note, 64)
#define HALF_NOTE(note) MUSICAL_NOTE(note, 32)
#define QUARTER_NOTE(note) MUSICAL_NOTE(note, 16)
#define EIGHTH_NOTE(note) MUSICAL_NOTE(note, 8)
#define SIXTEENTH_NOTE(note) MUSICAL_NOTE(note, 4)
#define WHOLE_DOT_NOTE(note) MUSICAL_NOTE(note, 64+32)
#define HALF_DOT_NOTE(note) MUSICAL_NOTE(note, 32+16)
#define QUARTER_DOT_NOTE(note) MUSICAL_NOTE(note, 16+8)
#define EIGHTH_DOT_NOTE(note) MUSICAL_NOTE(note, 8+4)
#define SIXTEENTH_DOT_NOTE(note) MUSICAL_NOTE(note, 4+2)
// Note Type Shortcuts
#define M__NOTE(note, duration) MUSICAL_NOTE(note, duration)
#define W__NOTE(n) WHOLE_NOTE(n)
#define H__NOTE(n) HALF_NOTE(n)
#define Q__NOTE(n) QUARTER_NOTE(n)
#define E__NOTE(n) EIGHTH_NOTE(n)
#define S__NOTE(n) SIXTEENTH_NOTE(n)
#define WD_NOTE(n) WHOLE_DOT_NOTE(n)
#define HD_NOTE(n) HALF_DOT_NOTE(n)
#define QD_NOTE(n) QUARTER_DOT_NOTE(n)
#define ED_NOTE(n) EIGHTH_DOT_NOTE(n)
#define SD_NOTE(n) SIXTEENTH_DOT_NOTE(n)
// Note Styles
// Staccato makes sure there is a rest between each note. Think: TA TA TA
@ -25,8 +41,20 @@
#define STACCATO 0.01
#define LEGATO 0
// Note Timbre
// Changes how the notes sound
#define TIMBRE_12 0.125
#define TIMBRE_25 0.250
#define TIMBRE_50 0.500
#define TIMBRE_75 0.750
#define TIMBRE_DEFAULT TIMBRE_50
// Notes - # = Octave
#define NOTE_REST 0.00
/* These notes are currently bugged
#define NOTE_C0 16.35
#define NOTE_CS0 17.32
#define NOTE_D0 18.35
@ -50,6 +78,8 @@
#define NOTE_GS1 51.91
#define NOTE_A1 55.00
#define NOTE_AS1 58.27
*/
#define NOTE_B1 61.74
#define NOTE_C2 65.41
#define NOTE_CS2 69.30

@ -0,0 +1,117 @@
#include "musical_notes.h"
#ifndef SONG_LIST_H
#define SONG_LIST_H
#define ODE_TO_JOY \
Q__NOTE(_E4), Q__NOTE(_E4), Q__NOTE(_F4), Q__NOTE(_G4), \
Q__NOTE(_G4), Q__NOTE(_F4), Q__NOTE(_E4), Q__NOTE(_D4), \
Q__NOTE(_C4), Q__NOTE(_C4), Q__NOTE(_D4), Q__NOTE(_E4), \
QD_NOTE(_E4), E__NOTE(_D4), H__NOTE(_D4),
#define ROCK_A_BYE_BABY \
QD_NOTE(_B4), E__NOTE(_D4), Q__NOTE(_B5), \
H__NOTE(_A5), Q__NOTE(_G5), \
QD_NOTE(_B4), E__NOTE(_D5), Q__NOTE(_G5), \
H__NOTE(_FS5),
#define CLOSE_ENCOUNTERS_5_NOTE \
Q__NOTE(_D5), \
Q__NOTE(_E5), \
Q__NOTE(_C5), \
Q__NOTE(_C4), \
Q__NOTE(_G4),
#define DOE_A_DEER \
QD_NOTE(_C4), E__NOTE(_D4), \
QD_NOTE(_E4), E__NOTE(_C4), \
Q__NOTE(_E4), Q__NOTE(_C4), \
Q__NOTE(_E4),
#define GOODBYE_SOUND \
E__NOTE(_E7), \
E__NOTE(_A6), \
ED_NOTE(_E6),
#define STARTUP_SOUND \
ED_NOTE(_E7 ), \
E__NOTE(_CS7), \
E__NOTE(_E6 ), \
E__NOTE(_A6 ), \
M__NOTE(_CS7, 20),
#define QWERTY_SOUND \
E__NOTE(_GS6 ), \
E__NOTE(_A6 ), \
S__NOTE(_REST), \
Q__NOTE(_E7 ),
#define COLEMAK_SOUND \
E__NOTE(_GS6 ), \
E__NOTE(_A6 ), \
S__NOTE(_REST), \
ED_NOTE(_E7 ), \
S__NOTE(_REST), \
ED_NOTE(_GS7 ),
#define DVORAK_SOUND \
E__NOTE(_GS6 ), \
E__NOTE(_A6 ), \
S__NOTE(_REST), \
E__NOTE(_E7 ), \
S__NOTE(_REST), \
E__NOTE(_FS7 ), \
S__NOTE(_REST), \
E__NOTE(_E7 ),
#define PLOVER_SOUND \
E__NOTE(_GS6 ), \
E__NOTE(_A6 ), \
S__NOTE(_REST), \
ED_NOTE(_E7 ), \
S__NOTE(_REST), \
ED_NOTE(_A7 ),
#define PLOVER_GOODBYE_SOUND \
E__NOTE(_GS6 ), \
E__NOTE(_A6 ), \
S__NOTE(_REST), \
ED_NOTE(_A7 ), \
S__NOTE(_REST), \
ED_NOTE(_E7 ),
#define MUSIC_SCALE_SOUND \
E__NOTE(_A5 ), \
E__NOTE(_B5 ), \
E__NOTE(_CS6), \
E__NOTE(_D6 ), \
E__NOTE(_E6 ), \
E__NOTE(_FS6), \
E__NOTE(_GS6), \
E__NOTE(_A6 ),
#define CAPS_LOCK_ON_SOUND \
E__NOTE(_A3), \
E__NOTE(_B3),
#define CAPS_LOCK_OFF_SOUND \
E__NOTE(_B3), \
E__NOTE(_A3),
#define SCROLL_LOCK_ON_SOUND \
E__NOTE(_D4), \
E__NOTE(_E4),
#define SCROLL_LOCK_OFF_SOUND \
E__NOTE(_E4), \
E__NOTE(_D4),
#define NUM_LOCK_ON_SOUND \
E__NOTE(_D5), \
E__NOTE(_E5),
#define NUM_LOCK_OFF_SOUND \
E__NOTE(_E5), \
E__NOTE(_D5),
#endif

@ -0,0 +1,28 @@
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#define VIBRATO_LUT_LENGTH 20
const float VIBRATO_LUT[VIBRATO_LUT_LENGTH] = { \
1.00223368114872,
1.00425299436105,
1.00585842560279,
1.00689052852052,
1.0072464122237,
1.00689052852052,
1.00585842560279,
1.00425299436105,
1.00223368114872,
1,
0.99777129706302,
0.99576501699778,
0.994175695650927,
0.993156625943589,
0.992805720491269,
0.993156625943589,
0.994175695650927,
0.99576501699778,
0.99777129706302,
1
};

@ -0,0 +1,163 @@
#include "voices.h"
#include "stdlib.h"
#include "vibrato_lut.h"
// these are imported from audio.c
extern uint16_t envelope_index;
extern float note_timbre;
extern float polyphony_rate;
voice_type voice = default_voice;
void set_voice(voice_type v) {
voice = v;
}
void voice_iterate() {
voice = (voice + 1) % number_of_voices;
}
void voice_deiterate() {
voice = (voice - 1) % number_of_voices;
}
float voice_envelope(float frequency) {
// envelope_index ranges from 0 to 0xFFFF, which is preserved at 880.0 Hz
uint16_t compensated_index = (uint16_t)((float)envelope_index * (880.0 / frequency));
switch (voice) {
case default_voice:
note_timbre = TIMBRE_50;
polyphony_rate = 0;
break;
case butts_fader:
polyphony_rate = 0;
switch (compensated_index) {
case 0 ... 9:
frequency = frequency / 4;
note_timbre = TIMBRE_12;
break;
case 10 ... 19:
frequency = frequency / 2;
note_timbre = TIMBRE_12;
break;
case 20 ... 200:
note_timbre = .125 - pow(((float)compensated_index - 20) / (200 - 20), 2)*.125;
break;
default:
note_timbre = 0;
break;
}
break;
// case octave_crunch:
// polyphony_rate = 0;
// switch (compensated_index) {
// case 0 ... 9:
// case 20 ... 24:
// case 30 ... 32:
// frequency = frequency / 2;
// note_timbre = TIMBRE_12;
// break;
// case 10 ... 19:
// case 25 ... 29:
// case 33 ... 35:
// frequency = frequency * 2;
// note_timbre = TIMBRE_12;
// break;
// default:
// note_timbre = TIMBRE_12;
// break;
// }
// break;
case duty_osc:
// This slows the loop down a substantial amount, so higher notes may freeze
polyphony_rate = 0;
switch (compensated_index) {
default:
#define OCS_SPEED 10
#define OCS_AMP .25
// sine wave is slow
// note_timbre = (sin((float)compensated_index/10000*OCS_SPEED) * OCS_AMP / 2) + .5;
// triangle wave is a bit faster
note_timbre = (float)abs((compensated_index*OCS_SPEED % 3000) - 1500) * ( OCS_AMP / 1500 ) + (1 - OCS_AMP) / 2;
break;
}
break;
case duty_octave_down:
polyphony_rate = 0;
note_timbre = (envelope_index % 2) * .125 + .375 * 2;
if ((envelope_index % 4) == 0)
note_timbre = 0.5;
if ((envelope_index % 8) == 0)
note_timbre = 0;
break;
case delayed_vibrato:
polyphony_rate = 0;
note_timbre = TIMBRE_50;
#define VOICE_VIBRATO_DELAY 150
#define VOICE_VIBRATO_SPEED 50
switch (compensated_index) {
case 0 ... VOICE_VIBRATO_DELAY:
break;
default:
frequency = frequency * VIBRATO_LUT[(int)fmod((((float)compensated_index - (VOICE_VIBRATO_DELAY + 1))/1000*VOICE_VIBRATO_SPEED), VIBRATO_LUT_LENGTH)];
break;
}
break;
// case delayed_vibrato_octave:
// polyphony_rate = 0;
// if ((envelope_index % 2) == 1) {
// note_timbre = 0.55;
// } else {
// note_timbre = 0.45;
// }
// #define VOICE_VIBRATO_DELAY 150
// #define VOICE_VIBRATO_SPEED 50
// switch (compensated_index) {
// case 0 ... VOICE_VIBRATO_DELAY:
// break;
// default:
// frequency = frequency * VIBRATO_LUT[(int)fmod((((float)compensated_index - (VOICE_VIBRATO_DELAY + 1))/1000*VOICE_VIBRATO_SPEED), VIBRATO_LUT_LENGTH)];
// break;
// }
// break;
// case duty_fifth_down:
// note_timbre = 0.5;
// if ((envelope_index % 3) == 0)
// note_timbre = 0.75;
// break;
// case duty_fourth_down:
// note_timbre = 0.0;
// if ((envelope_index % 12) == 0)
// note_timbre = 0.75;
// if (((envelope_index % 12) % 4) != 1)
// note_timbre = 0.75;
// break;
// case duty_third_down:
// note_timbre = 0.5;
// if ((envelope_index % 5) == 0)
// note_timbre = 0.75;
// break;
// case duty_fifth_third_down:
// note_timbre = 0.5;
// if ((envelope_index % 5) == 0)
// note_timbre = 0.75;
// if ((envelope_index % 3) == 0)
// note_timbre = 0.25;
// break;
default:
break;
}
return frequency;
}

@ -0,0 +1,32 @@
#include <stdint.h>
#include <stdbool.h>
#include <avr/io.h>
#include <util/delay.h>
#include "musical_notes.h"
#include "song_list.h"
#ifndef VOICES_H
#define VOICES_H
float voice_envelope(float frequency);
typedef enum {
default_voice,
butts_fader,
octave_crunch,
duty_osc,
duty_octave_down,
delayed_vibrato,
// delayed_vibrato_octave,
// duty_fifth_down,
// duty_fourth_down,
// duty_third_down,
// duty_fifth_third_down,
number_of_voices // important that this is last
} voice_type;
void set_voice(voice_type v);
void voice_iterate(void);
void voice_deiterate(void);
#endif

@ -26,6 +26,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "backlight.h"
#include "keymap_midi.h"
#include "bootloader.h"
#include "eeconfig.h"
extern keymap_config_t keymap_config;
@ -33,22 +34,14 @@ extern keymap_config_t keymap_config;
#include <inttypes.h>
#ifdef AUDIO_ENABLE
#include "audio.h"
#ifndef TONE_GOODBYE
#define TONE_GOODBYE { \
{440.0*pow(2.0,(31)/12.0), 8}, \
{440.0*pow(2.0,(24)/12.0), 8}, \
{440.0*pow(2.0,(19)/12.0), 12}, \
}
#endif
float tone_goodbye[][2] = TONE_GOODBYE;
#endif
#endif /* AUDIO_ENABLE */
static action_t keycode_to_action(uint16_t keycode);
/* converts key to action */
action_t action_for_key(uint8_t layer, keypos_t key)
{
// 16bit keycodes - important
// 16bit keycodes - important
uint16_t keycode = keymap_key_to_keycode(layer, key);
switch (keycode) {
@ -191,7 +184,8 @@ static action_t keycode_to_action(uint16_t keycode)
case RESET: ; // RESET is 0x5000, which is why this is here
clear_keyboard();
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
stop_all_notes();
play_goodbye_tone();
#endif
_delay_ms(250);
#ifdef ATREUS_ASTAR
@ -251,7 +245,7 @@ static action_t keycode_to_action(uint16_t keycode)
keymap_config.swap_lalt_lgui = 0;
keymap_config.swap_ralt_rgui = 0;
}
eeconfig_write_keymap(keymap_config.raw);
eeconfig_update_keymap(keymap_config.raw);
break;
case 0x5100 ... 0x5FFF: ;
// Layer movement shortcuts
@ -304,7 +298,7 @@ static action_t keycode_to_action(uint16_t keycode)
/* translates key to keycode */
uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
{
// Read entire word (16bits)
// Read entire word (16bits)
return pgm_read_word(&keymaps[(layer)][(key.row)][(key.col)]);
}
@ -316,7 +310,7 @@ action_t keymap_fn_to_action(uint16_t keycode)
action_t keymap_func_to_action(uint16_t keycode)
{
// For FUNC without 8bit limit
// For FUNC without 8bit limit
return (action_t){ .code = pgm_read_word(&fn_actions[(int)keycode]) };
}

@ -231,8 +231,8 @@ extern const uint16_t fn_actions[];
// For tri-layer
void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3);
#define IS_LAYER_ON(layer) ((layer_state) & (1UL<<(layer)))
#define IS_LAYER_OFF(layer) ((!layer_state) & (1UL<<(layer)))
#define IS_LAYER_ON(layer) (layer_state & (1UL << (layer)))
#define IS_LAYER_OFF(layer) (~layer_state & (1UL << (layer)))
#endif

@ -85,8 +85,8 @@
#define DE_OSX_UNDS LSFT(DE_OSX_MINS) // _
// Alt-ed characters
#define DE_OSX_SQ2 LALT(KC_2) // ²
#define DE_OSX_SQ3 LALT(KC_3) // ³
//#define DE_OSX_SQ2 LALT(KC_2) // ²
//#define DE_OSX_SQ3 LALT(KC_3) // ³
#define DE_OSX_LCBR LALT(KC_8) // {
#define DE_OSX_LBRC LALT(KC_5) // [
#define DE_OSX_RBRC LALT(KC_6) // ]

@ -0,0 +1,32 @@
#ifndef KEYMAP_PLOVER_H
#define KEYMAP_PLOVER_H
#include "keymap_common.h"
#define PV_NUM KC_1
#define PV_LS KC_Q
#define PV_LT KC_W
#define PV_LP KC_E
#define PV_LH KC_R
#define PV_LK KC_S
#define PV_LW KC_D
#define PV_LR KC_F
#define PV_STAR KC_Y
#define PV_RF KC_U
#define PV_RP KC_I
#define PV_RL KC_O
#define PV_RT KC_P
#define PV_RD KC_LBRC
#define PV_RR KC_J
#define PV_RB KC_K
#define PV_RG KC_L
#define PV_RS KC_SCLN
#define PV_RZ KC_QUOT
#define PV_A KC_C
#define PV_O KC_V
#define PV_E KC_N
#define PV_U KC_M
#endif

@ -24,6 +24,7 @@ void led_set_kb(uint8_t usb_led) {
}
__attribute__ ((weak))
void led_set(uint8_t usb_led)
{

@ -28,7 +28,7 @@ ifeq ($(strip $(MIDI_ENABLE)), yes)
endif
ifeq ($(strip $(AUDIO_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/audio.c
SRC += $(QUANTUM_DIR)/audio/audio.c $(QUANTUM_DIR)/audio/voices.c
endif
ifeq ($(strip $(UNICODE_ENABLE)), yes)
@ -47,6 +47,7 @@ endif
# Search Path
VPATH += $(TOP_DIR)/$(QUANTUM_DIR)
VPATH += $(TOP_DIR)/$(QUANTUM_DIR)/keymap_extras
VPATH += $(TOP_DIR)/$(QUANTUM_DIR)/audio
include $(TMK_DIR)/protocol/lufa.mk

@ -107,17 +107,17 @@ void setrgb(uint8_t r, uint8_t g, uint8_t b, struct cRGB *led1) {
uint32_t eeconfig_read_rgblight(void) {
return eeprom_read_dword(EECONFIG_RGBLIGHT);
}
void eeconfig_write_rgblight(uint32_t val) {
eeprom_write_dword(EECONFIG_RGBLIGHT, val);
void eeconfig_update_rgblight(uint32_t val) {
eeprom_update_dword(EECONFIG_RGBLIGHT, val);
}
void eeconfig_write_rgblight_default(void) {
dprintf("eeconfig_write_rgblight_default\n");
void eeconfig_update_rgblight_default(void) {
dprintf("eeconfig_update_rgblight_default\n");
rgblight_config.enable = 1;
rgblight_config.mode = 1;
rgblight_config.hue = 200;
rgblight_config.sat = 204;
rgblight_config.val = 204;
eeconfig_write_rgblight(rgblight_config.raw);
eeconfig_update_rgblight(rgblight_config.raw);
}
void eeconfig_debug_rgblight(void) {
dprintf("rgblight_config eprom\n");
@ -136,12 +136,12 @@ void rgblight_init(void) {
if (!eeconfig_is_enabled()) {
dprintf("rgblight_init eeconfig is not enabled.\n");
eeconfig_init();
eeconfig_write_rgblight_default();
eeconfig_update_rgblight_default();
}
rgblight_config.raw = eeconfig_read_rgblight();
if (!rgblight_config.mode) {
dprintf("rgblight_init rgblight_config.mode = 0. Write default values to EEPROM.\n");
eeconfig_write_rgblight_default();
eeconfig_update_rgblight_default();
rgblight_config.raw = eeconfig_read_rgblight();
}
eeconfig_debug_rgblight(); // display current eeprom values
@ -189,8 +189,8 @@ void rgblight_mode(uint8_t mode) {
} else {
rgblight_config.mode = mode;
}
eeconfig_write_rgblight(rgblight_config.raw);
dprintf("rgblight mode: %u\n", rgblight_config.mode);
eeconfig_update_rgblight(rgblight_config.raw);
xprintf("rgblight mode: %u\n", rgblight_config.mode);
if (rgblight_config.mode == 1) {
rgblight_timer_disable();
} else if (rgblight_config.mode >=2 && rgblight_config.mode <=23) {
@ -206,8 +206,8 @@ void rgblight_mode(uint8_t mode) {
void rgblight_toggle(void) {
rgblight_config.enable ^= 1;
eeconfig_write_rgblight(rgblight_config.raw);
dprintf("rgblight toggle: rgblight_config.enable = %u\n", rgblight_config.enable);
eeconfig_update_rgblight(rgblight_config.raw);
xprintf("rgblight toggle: rgblight_config.enable = %u\n", rgblight_config.enable);
if (rgblight_config.enable) {
rgblight_mode(rgblight_config.mode);
} else {
@ -299,8 +299,8 @@ void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val){
rgblight_config.hue = hue;
rgblight_config.sat = sat;
rgblight_config.val = val;
eeconfig_write_rgblight(rgblight_config.raw);
dprintf("rgblight set hsv [EEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
eeconfig_update_rgblight(rgblight_config.raw);
xprintf("rgblight set hsv [EEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
}
}

@ -66,8 +66,8 @@ void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b);
#define EECONFIG_RGBLIGHT (uint8_t *)7
uint32_t eeconfig_read_rgblight(void);
void eeconfig_write_rgblight(uint32_t val);
void eeconfig_write_rgblight_default(void);
void eeconfig_update_rgblight(uint32_t val);
void eeconfig_update_rgblight_default(void);
void eeconfig_debug_rgblight(void);
void sethsv(uint16_t hue, uint8_t sat, uint8_t val, struct cRGB *led1);

@ -111,23 +111,41 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512
# Build Options
# comment out to disable the options.
#
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
KEYBOARD_LOCK_ENABLE = yes # Allow locking of keyboard via magic key
# change yes to no to disable
#
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
KEYBOARD_LOCK_ENABLE = yes # Allow locking of keyboard via magic key
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
#NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
# MIDI_ENABLE = YES # MIDI controls
# UNICODE_ENABLE = YES # Unicode
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
ifdef KEYMAP
ifeq ("$(wildcard keymaps/$(KEYMAP).c)","")
ifneq ("$(wildcard keymaps/$(KEYMAP)/makefile.mk)","")
include keymaps/$(KEYMAP)/makefile.mk
endif
endif
else
ifneq ("$(wildcard keymaps/default/makefile.mk)","")
include keymaps/default/makefile.mk
endif
endif
# Optimize size but this may cause error "relocation truncated to fit"
#EXTRALDFLAGS = -Wl,--relax

@ -46,3 +46,64 @@ void led_set_kb(uint8_t usb_led) {
led_set_user(usb_led);
}
#ifdef BACKLIGHT_ENABLE
#define CHANNEL OCR1C
void backlight_init_ports()
{
// Setup PB7 as output and output low.
DDRB |= (1<<7);
PORTB &= ~(1<<7);
// Use full 16-bit resolution.
ICR1 = 0xFFFF;
// I could write a wall of text here to explain... but TL;DW
// Go read the ATmega32u4 datasheet.
// And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
// Pin PB7 = OCR1C (Timer 1, Channel C)
// Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
// (i.e. start high, go low when counter matches.)
// WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
// Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
backlight_init();
}
void backlight_set(uint8_t level)
{
if ( level == 0 )
{
// Turn off PWM control on PB7, revert to output low.
TCCR1A &= ~(_BV(COM1C1));
CHANNEL = 0x0;
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
}
else if ( level == BACKLIGHT_LEVELS )
{
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
// Set the brightness
CHANNEL = 0xFFFF;
}
else
{
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
// Set the brightness
CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
}
}
#endif

@ -3,7 +3,10 @@
#include "matrix.h"
#include "keymap_common.h"
#include "backlight.h"
#ifdef BACKLIGHT_ENABLE
#include "backlight.h"
#endif
#include <avr/io.h>
#include <stddef.h>
// This a shortcut to help you visually see your layout.

@ -324,6 +324,7 @@ bool waiting_buffer_typed(keyevent_t event)
return false;
}
__attribute__((unused))
bool waiting_buffer_has_anykey_pressed(void)
{
for (uint8_t i = waiting_buffer_tail; i != waiting_buffer_head; i = (i + 1) % WAITING_BUFFER_SIZE) {

@ -5,27 +5,27 @@
void eeconfig_init(void)
{
eeprom_write_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER);
eeprom_write_byte(EECONFIG_DEBUG, 0);
eeprom_write_byte(EECONFIG_DEFAULT_LAYER, 0);
eeprom_write_byte(EECONFIG_KEYMAP, 0);
eeprom_write_byte(EECONFIG_MOUSEKEY_ACCEL, 0);
eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER);
eeprom_update_byte(EECONFIG_DEBUG, 0);
eeprom_update_byte(EECONFIG_DEFAULT_LAYER, 0);
eeprom_update_byte(EECONFIG_KEYMAP, 0);
eeprom_update_byte(EECONFIG_MOUSEKEY_ACCEL, 0);
#ifdef BACKLIGHT_ENABLE
eeprom_write_byte(EECONFIG_BACKLIGHT, 0);
eeprom_update_byte(EECONFIG_BACKLIGHT, 0);
#endif
#ifdef AUDIO_ENABLE
eeprom_write_byte(EECONFIG_AUDIO, 0xFF); // On by default
eeprom_update_byte(EECONFIG_AUDIO, 0xFF); // On by default
#endif
}
void eeconfig_enable(void)
{
eeprom_write_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER);
eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER);
}
void eeconfig_disable(void)
{
eeprom_write_word(EECONFIG_MAGIC, 0xFFFF);
eeprom_update_word(EECONFIG_MAGIC, 0xFFFF);
}
bool eeconfig_is_enabled(void)
@ -34,20 +34,20 @@ bool eeconfig_is_enabled(void)
}
uint8_t eeconfig_read_debug(void) { return eeprom_read_byte(EECONFIG_DEBUG); }
void eeconfig_write_debug(uint8_t val) { eeprom_write_byte(EECONFIG_DEBUG, val); }
void eeconfig_update_debug(uint8_t val) { eeprom_update_byte(EECONFIG_DEBUG, val); }
uint8_t eeconfig_read_default_layer(void) { return eeprom_read_byte(EECONFIG_DEFAULT_LAYER); }
void eeconfig_write_default_layer(uint8_t val) { eeprom_write_byte(EECONFIG_DEFAULT_LAYER, val); }
void eeconfig_update_default_layer(uint8_t val) { eeprom_update_byte(EECONFIG_DEFAULT_LAYER, val); }
uint8_t eeconfig_read_keymap(void) { return eeprom_read_byte(EECONFIG_KEYMAP); }
void eeconfig_write_keymap(uint8_t val) { eeprom_write_byte(EECONFIG_KEYMAP, val); }
void eeconfig_update_keymap(uint8_t val) { eeprom_update_byte(EECONFIG_KEYMAP, val); }
#ifdef BACKLIGHT_ENABLE
uint8_t eeconfig_read_backlight(void) { return eeprom_read_byte(EECONFIG_BACKLIGHT); }
void eeconfig_write_backlight(uint8_t val) { eeprom_write_byte(EECONFIG_BACKLIGHT, val); }
void eeconfig_update_backlight(uint8_t val) { eeprom_update_byte(EECONFIG_BACKLIGHT, val); }
#endif
#ifdef AUDIO_ENABLE
uint8_t eeconfig_read_audio(void) { return eeprom_read_byte(EECONFIG_AUDIO); }
void eeconfig_write_audio(uint8_t val) { eeprom_write_byte(EECONFIG_AUDIO, val); }
void eeconfig_update_audio(uint8_t val) { eeprom_update_byte(EECONFIG_AUDIO, val); }
#endif

@ -9,10 +9,16 @@
#include "suspend.h"
#include "timer.h"
#include "led.h"
#ifdef PROTOCOL_LUFA
#include "lufa.h"
#include "lufa.h"
#endif
#ifdef AUDIO_ENABLE
#include "audio.h"
#endif /* AUDIO_ENABLE */
#define wdt_intr_enable(value) \
__asm__ __volatile__ ( \
@ -72,6 +78,11 @@ static void power_down(uint8_t wdto)
// Turn off LED indicators
led_set(0);
#ifdef AUDIO_ENABLE
// This sometimes disables the start-up noise, so it's been disabled
// stop_all_notes();
#endif /* AUDIO_ENABLE */
// TODO: more power saving
// See PicoPower application note
// - I/O port input with pullup

@ -37,7 +37,7 @@ void backlight_increase(void)
{
backlight_config.level++;
backlight_config.enable = 1;
eeconfig_write_backlight(backlight_config.raw);
eeconfig_update_backlight(backlight_config.raw);
}
dprintf("backlight increase: %u\n", backlight_config.level);
backlight_set(backlight_config.level);
@ -49,7 +49,7 @@ void backlight_decrease(void)
{
backlight_config.level--;
backlight_config.enable = !!backlight_config.level;
eeconfig_write_backlight(backlight_config.raw);
eeconfig_update_backlight(backlight_config.raw);
}
dprintf("backlight decrease: %u\n", backlight_config.level);
backlight_set(backlight_config.level);
@ -58,7 +58,7 @@ void backlight_decrease(void)
void backlight_toggle(void)
{
backlight_config.enable ^= 1;
eeconfig_write_backlight(backlight_config.raw);
eeconfig_update_backlight(backlight_config.raw);
dprintf("backlight toggle: %u\n", backlight_config.enable);
backlight_set(backlight_config.enable ? backlight_config.level : 0);
}
@ -71,7 +71,7 @@ void backlight_step(void)
backlight_config.level = 0;
}
backlight_config.enable = !!backlight_config.level;
eeconfig_write_backlight(backlight_config.raw);
eeconfig_update_backlight(backlight_config.raw);
dprintf("backlight step: %u\n", backlight_config.level);
backlight_set(backlight_config.level);
}
@ -80,6 +80,6 @@ void backlight_level(uint8_t level)
{
backlight_config.level ^= level;
backlight_config.enable = !!backlight_config.level;
eeconfig_write_backlight(backlight_config.raw);
eeconfig_update_backlight(backlight_config.raw);
backlight_set(backlight_config.level);
}

@ -52,7 +52,7 @@ void bootmagic(void)
debug_config.enable = !debug_config.enable;
}
}
eeconfig_write_debug(debug_config.raw);
eeconfig_update_debug(debug_config.raw);
/* keymap config */
keymap_config.raw = eeconfig_read_keymap();
@ -80,7 +80,7 @@ void bootmagic(void)
if (bootmagic_scan_keycode(BOOTMAGIC_HOST_NKRO)) {
keymap_config.nkro = !keymap_config.nkro;
}
eeconfig_write_keymap(keymap_config.raw);
eeconfig_update_keymap(keymap_config.raw);
#ifdef NKRO_ENABLE
keyboard_nkro = keymap_config.nkro;
@ -97,7 +97,7 @@ void bootmagic(void)
if (bootmagic_scan_keycode(BOOTMAGIC_KEY_DEFAULT_LAYER_6)) { default_layer |= (1<<6); }
if (bootmagic_scan_keycode(BOOTMAGIC_KEY_DEFAULT_LAYER_7)) { default_layer |= (1<<7); }
if (default_layer) {
eeconfig_write_default_layer(default_layer);
eeconfig_update_default_layer(default_layer);
default_layer_set((uint32_t)default_layer);
} else {
default_layer = eeconfig_read_default_layer();

@ -49,6 +49,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# include "usbdrv.h"
#endif
#ifdef AUDIO_ENABLE
#include "audio.h"
#endif /* AUDIO_ENABLE */
static bool command_common(uint8_t code);
static void command_common_help(void);
@ -251,6 +255,7 @@ static void print_status(void)
#ifdef BOOTMAGIC_ENABLE
static void print_eeconfig(void)
{
#ifndef NO_PRINT
print("default_layer: "); print_dec(eeconfig_read_default_layer()); print("\n");
debug_config_t dc;
@ -279,9 +284,12 @@ static void print_eeconfig(void)
print("backlight_config.raw: "); print_hex8(bc.raw); print("\n");
print(".enable: "); print_dec(bc.enable); print("\n");
print(".level: "); print_dec(bc.level); print("\n");
#endif
#endif /* BACKLIGHT_ENABLE */
#endif /* !NO_PRINT */
}
#endif
#endif /* BOOTMAGIC_ENABLE */
static bool command_common(uint8_t code)
{
@ -348,6 +356,9 @@ static bool command_common(uint8_t code)
case MAGIC_KC(MAGIC_KEY_BOOTLOADER):
clear_keyboard(); // clear to prevent stuck keys
print("\n\nJumping to bootloader... ");
#ifdef AUDIO_ENABLE
play_goodbye_tone();
#endif
_delay_ms(1000);
bootloader_jump(); // not return
break;
@ -551,6 +562,7 @@ static uint8_t mousekey_param = 0;
static void mousekey_param_print(void)
{
#ifndef NO_PRINT
print("\n\t- Values -\n");
print("1: delay(*10ms): "); pdec(mk_delay); print("\n");
print("2: interval(ms): "); pdec(mk_interval); print("\n");
@ -558,6 +570,8 @@ static void mousekey_param_print(void)
print("4: time_to_max: "); pdec(mk_time_to_max); print("\n");
print("5: wheel_max_speed: "); pdec(mk_wheel_max_speed); print("\n");
print("6: wheel_time_to_max: "); pdec(mk_wheel_time_to_max); print("\n");
#endif /* !NO_PRINT */
}
//#define PRINT_SET_VAL(v) print(#v " = "); print_dec(v); print("\n");

@ -60,22 +60,22 @@ void eeconfig_enable(void);
void eeconfig_disable(void);
uint8_t eeconfig_read_debug(void);
void eeconfig_write_debug(uint8_t val);
void eeconfig_update_debug(uint8_t val);
uint8_t eeconfig_read_default_layer(void);
void eeconfig_write_default_layer(uint8_t val);
void eeconfig_update_default_layer(uint8_t val);
uint8_t eeconfig_read_keymap(void);
void eeconfig_write_keymap(uint8_t val);
void eeconfig_update_keymap(uint8_t val);
#ifdef BACKLIGHT_ENABLE
uint8_t eeconfig_read_backlight(void);
void eeconfig_write_backlight(uint8_t val);
void eeconfig_update_backlight(uint8_t val);
#endif
#ifdef AUDIO_ENABLE
uint8_t eeconfig_read_audio(void);
void eeconfig_write_audio(uint8_t val);
void eeconfig_update_audio(uint8_t val);
#endif
#endif

@ -91,9 +91,9 @@ void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t));
#else /* NO_PRINT */
#define xprintf
#define print
#define println
#define xprintf(fmt, ...)
#define print(s)
#define println(s)
#define print_set_sendchar(func)
#define print_dec(data)
#define print_decs(data)

@ -327,7 +327,7 @@ static void ReadWriteMemoryBlock(const uint8_t Command)
else
{
/* Write the next EEPROM byte from the endpoint */
eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte());
eeprom_update_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte());
/* Increment the address counter after use */
CurrAddress += 2;
@ -581,7 +581,7 @@ static void CDC_Task(void)
else if (Command == AVR109_COMMAND_WriteEEPROM)
{
/* Read the byte from the endpoint and write it to the EEPROM */
eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte());
eeprom_update_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte());
/* Increment the address after use */
CurrAddress += 2;

@ -370,7 +370,7 @@ void EVENT_USB_Device_ControlRequest(void)
}
/* Read the byte from the USB interface and write to to the EEPROM */
eeprom_write_byte((uint8_t*)StartAddr, Endpoint_Read_8());
eeprom_update_byte((uint8_t*)StartAddr, Endpoint_Read_8());
/* Adjust counters */
StartAddr++;

@ -183,10 +183,6 @@ static void Console_Task(void)
Endpoint_SelectEndpoint(ep);
}
#else
static void Console_Task(void)
{
}
#endif

Loading…
Cancel
Save