summaryrefslogtreecommitdiffstats
path: root/keyboard/kc60
diff options
context:
space:
mode:
authorJack Humbert <jack.humb@gmail.com>2016-06-11 13:31:31 -0400
committerGitHub <noreply@github.com>2016-06-11 13:31:31 -0400
commitd9e4dad0a828a8a904f44dda090a4d6d08fe2948 (patch)
treed6f002712c22e8cf4523e04a9da889c7ec379d6b /keyboard/kc60
parenta5d638ad3091e2d553eaa04d933df28eeced5a8b (diff)
Makefile redo & other features (#395)
* .build containment implemented * no destructive variable setting - builds in either folder * make from 3 places * cleans before each build * make from root with keyboard=keyboard, keymap=keymap * make from keyboard/keyboard with keymap=keymap * make from keymaps/keymap * only implemented on planck * adds color diag to avr-gcc * makefiles for all plancks, clean-up * quick build-all makefile for plancks * reformatting of make output (colors) * color toggle, tmk path corrections * correct if statement for color * move config.h to main makefile, updates preonic, atomic * format update, all keyboards targets * makefile optional for build all target, alps and arrow_pad updated * alps updated * make planck default, trying out travis recipe for all-keyboards * all-keymaps target, different travis recipe * updates alps64 * updates keyboards to new format * updates clue* projects * all projects updated, specialise EZ .hex, let .hex through * updates travis * automatically find root, keyboard, keymap * silent echo, cleaned-up mass make output * updates all keyboards' .hex files except EZ * Rename Bantam44.c to bantam44.c * Rename Bantam44.h to bantam44.h * nananana * adds six key keyboard * does same to ez as rest * updates send_string example * brings ergodox_ez up to date * updates template/new project script * adds sixkeyboard * adds readme for sixkeyboard * adds sixkeyboard to travis * filenames, gitignore mess * define clock prescaler stuff manually * make quick, size test example * documentation and dfu-no-build
Diffstat (limited to 'keyboard/kc60')
-rw-r--r--keyboard/kc60/Makefile114
-rw-r--r--keyboard/kc60/README.md24
-rw-r--r--keyboard/kc60/config.h162
-rw-r--r--keyboard/kc60/kc60.c111
-rw-r--r--keyboard/kc60/kc60.h36
-rw-r--r--keyboard/kc60/keymaps/default/compiled.hex1452
-rw-r--r--keyboard/kc60/keymaps/default/keymap.c24
7 files changed, 1923 insertions, 0 deletions
diff --git a/keyboard/kc60/Makefile b/keyboard/kc60/Makefile
new file mode 100644
index 0000000000..84b72cde60
--- /dev/null
+++ b/keyboard/kc60/Makefile
@@ -0,0 +1,114 @@
+#----------------------------------------------------------------------------
+# 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".
+#----------------------------------------------------------------------------
+
+# 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
+# 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 ?= 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
+
+
+ifndef QUANTUM_DIR
+ include ../../Makefile
+endif
+
diff --git a/keyboard/kc60/README.md b/keyboard/kc60/README.md
new file mode 100644
index 0000000000..4be448d15c
--- /dev/null
+++ b/keyboard/kc60/README.md
@@ -0,0 +1,24 @@
+kc60 keyboard firmware
+======================
+
+## 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/kc60 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.
diff --git a/keyboard/kc60/config.h b/keyboard/kc60/config.h
new file mode 100644
index 0000000000..91d4e09c2e
--- /dev/null
+++ b/keyboard/kc60/config.h
@@ -0,0 +1,162 @@
+/*
+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 kc60v2
+#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)
+ *
+*/
+
+// Possible pins for columns include: F1 F0 E6 D7 D6 D4 C7 C6 B7 B5 B4 B3 B1 B0
+// Pins for rows include: D0 D1 F6 F7 D5
+// KC60 Version 2
+#define MATRIX_ROW_PINS { D0, D1, F6, F7, D5 }
+#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B7, D4, B1, B0, B5, B4, D7, D6, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 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
diff --git a/keyboard/kc60/kc60.c b/keyboard/kc60/kc60.c
new file mode 100644
index 0000000000..0a578b2b88
--- /dev/null
+++ b/keyboard/kc60/kc60.c
@@ -0,0 +1,111 @@
+#include "kc60.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))
+ bool process_action_user(keyrecord_t *record) {
+ // leave this function blank - it can be defined in a keymap file
+ return true;
+ }
+
+__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
+
+#ifdef BACKLIGHT_ENABLE
+ backlight_init_ports();
+#endif
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_action_kb(keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return 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 OCR1B
+
+void backlight_init_ports()
+{
+
+ // Setup PB6 as output and output low.
+ DDRB |= (1<<6);
+ PORTB &= ~(1<<6);
+
+ // 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 = COM1B1=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(COM1B1) | _BV(WGM11); // = 0b00001010;
+ TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
+
+ backlight_init();
+}
+
+void backlight_set(uint8_t level)
+{
+ // Prevent backlight blink on lowest level
+ PORTB &= ~(_BV(PORTB6));
+
+ if ( level == 0 )
+ {
+ // Turn off PWM control on PB6, revert to output low.
+ TCCR1A &= ~(_BV(COM1B1));
+ CHANNEL = 0x0;
+ }
+ else if ( level == BACKLIGHT_LEVELS)
+ {
+ // Turn on PWM control of PB6
+ TCCR1A |= _BV(COM1B1);
+ // Set the brightness
+ CHANNEL = 0xFFFF;
+ }
+ else
+ {
+ // Turn on PWM control of PB6
+ TCCR1A |= _BV(COM1B1);
+ // Set the brightness
+ CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
+ }
+}
+
+#endif
diff --git a/keyboard/kc60/kc60.h b/keyboard/kc60/kc60.h
new file mode 100644
index 0000000000..d346a55028
--- /dev/null
+++ b/keyboard/kc60/kc60.h
@@ -0,0 +1,36 @@
+#ifndef KC60_H
+#define KC60_H
+
+#include "matrix.h"
+#include "keymap_common.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.
+// The first section contains all of the arguements
+// The second converts the arguments into a multi-dimensional array
+#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, K4A, K4B, K4C, K4D \
+ ) { \
+ { 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, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO,K4A, K4B, K4C, K4D } \
+}
+
+void matrix_init_user(void);
+void matrix_scan_user(void);
+bool process_action_user(keyrecord_t *record);
+
+void led_set_user(uint8_t usb_led);
+void backlight_init_ports(void);
+
+#endif
diff --git a/keyboard/kc60/keymaps/default/compiled.hex b/keyboard/kc60/keymaps/default/compiled.hex
new file mode 100644
index 0000000000..aa29b5112c
--- /dev/null
+++ b/keyboard/kc60/keymaps/default/compiled.hex
@@ -0,0 +1,1452 @@
+:100000000C9473060C94B7060C94B7060C94B706C0
+:100010000C94B7060C94B7060C94B7060C94B7066C
+:100020000C94B7060C94B7060C94CE110C94A01245
+:100030000C9448200C94B7060C94B7060C94B706A1
+:100040000C94B7060C94B7060C94B7060C94B7063C
+:100050000C94B7060C94B0200C94B7060C94B70619
+:100060000C94B7060C94B7060C94B7060C94B7061C
+:100070000C94B7060C94B7060C94B7060C94B7060C
+:100080000C94B7060C94B7060C94B7060C94B706FC
+:100090000C94B7060C94B7060C94B7060C94B706EC
+:1000A0000C94B7060C94B7060C94B7060D132F13D7
+:1000B0001D142F131D14741397131D14EC13FF1329
+:1000C0004417441773177317B217D2172819281932
+:1000D000DD1728198D188D18F418FD182819221904
+:1000E0009A189A189A189A189A189A189A189A1880
+:1000F0009A189A189A189A189A189A189A189A1870
+:10010000AA18B818BF18C618D01829001E001F005A
+:1001100020002100220023002400250026002700C3
+:100120002D002E002A002B0014001A0008001500D4
+:1001300017001C0018000C00120013002F003000E4
+:100140003100390004001600070009000A000B0006
+:100150000D000E000F003300340000002800E10005
+:1001600000001D001B000600190005001100100012
+:100170003600370038000000E500E000E200E30050
+:10018000000000002C000000000000000000E7005C
+:10019000E600E40000500A44454255473A20656EA7
+:1001A00061626C65642E0A005374617465206F6629
+:1001B00020726F772025583A2025303136620A00A8
+:1001C00048756D616E2D7265616461626C65206D4C
+:1001D00061747269782073746174653A0D0A004421
+:1001E00065626F756E63696E672064656C61792006
+:1001F00072656D61696E696E673A2025580A005B09
+:10020000735D004B6579626F617264207374617213
+:10021000742E0A005B575D005B535D005B525D000E
+:100220005B445D005B435D000E036B0063003600C2
+:100230003000760032000000080359006F0075009E
+:1002400000000403090409027400040100A0FA0973
+:100250000400000103010100092111010001223FF6
+:10026000000705810308000A0904010001030102D7
+:1002700000092111010001224D0007058203080039
+:100280000A09040200010300000009211101000114
+:100290002236000705830308000A0904030002034D
+:1002A000000000092111010001222000070584033C
+:1002B00020000107050403200001120110010000C5
+:1002C0000008EDFE60600100010200010631FF0937
+:1002D00074A1010975150025FF9520750881020993
+:1002E00076150025FF952075089102C0050109804B
+:1002F000A101850216010026B7001A01002AB700E5
+:10030000751095018100C0050C0901A10185031636
+:100310000100269C021A01002A9C02751095018199
+:1003200000C005010902A1010901A1000509190187
+:1003300029051500250195057501810295017503B3
+:1003400081010501093009311581257F9502750864
+:10035000810609381581257F950175088106050CF0
+:100360000A38021581257F950175088106C0C005F0
+:10037000010906A101050719E029E71500250195E6
+:100380000875018102950175088101050819012987
+:1003900005950575019102950175039101050719F0
+:1003A0000029FF150025FF950675088100C00A0089
+:1003B0002530325820006B6579626F6172645F721C
+:1003C00065706F72743A20004B6579626F61726478
+:1003D000204C4544732073746174653A2025780A73
+:1003E00000646F6E652E0A00626F6F676D616769EA
+:1003F00063207363616E3A202E2E2E2000290A009E
+:100400002575002F002575005D280025640020005B
+:10041000256400200025640020002564007C002560
+:10042000303258006D6F7573656B6579205B62744F
+:100430006E7C782079207620685D287265702F6147
+:10044000636C293A205B006D6B5F776865656C5F54
+:1004500074696D655F746F5F6D6178203D20256400
+:100460000A006D6B5F776865656C5F6D61785F73BF
+:1004700070656564203D2025640A006D6B5F7469BA
+:100480006D655F746F5F6D6178203D2025640A00A3
+:100490006D6B5F6D61785F7370656564203D2025CD
+:1004A000640A006D6B5F696E74657276616C203DE5
+:1004B0002025640A006D6B5F64656C6179203D20C6
+:1004C00025640A006D6B5F776865656C5F74696DA4
+:1004D000655F746F5F6D6178203D2025640A006D53
+:1004E0006B5F776865656C5F6D61785F737065657C
+:1004F00064203D2025640A006D6B5F74696D655F43
+:10050000746F5F6D6178203D2025640A006D6B5F1C
+:100510006D61785F7370656564203D2025640A0015
+:100520006D6B5F696E74657276616C203D20256429
+:100530000A006D6B5F64656C6179203D2025640A5B
+:10054000000A00257500363A20776865656C5F748F
+:10055000696D655F746F5F6D61783A20000A0025F0
+:100560007500353A20776865656C5F6D61785F73FB
+:10057000706565643A20000A00257500343A2074DD
+:10058000696D655F746F5F6D61783A20000A0025C0
+:100590007500333A206D61785F73706565643A2049
+:1005A000000A00257500323A20696E746572766122
+:1005B0006C286D73293A20000A00257500313A2015
+:1005C00064656C6179282A31306D73293A20000AFC
+:1005D000092D2056616C756573202D0A004D3E0073
+:1005E0004D25643E20003F0073657420646566619C
+:1005F000756C740A00433E2000776865726520645C
+:10060000656C74613A20637572736F723D25642C5A
+:1006100020776865656C3D25640A536565206874BC
+:1006200074703A2F2F656E2E77696B6970656469F7
+:10063000612E6F72672F77696B692F4D6F757365C8
+:100640005F6B6579730A000A092D204D6F7573651C
+:100650006B6579202D0A4553432F713A09717569ED
+:10066000740A313A0964656C6179282A31306D73F6
+:10067000290A323A09696E74657276616C286D7365
+:10068000290A333A096D61785F73706565640A34CD
+:100690003A0974696D655F746F5F6D61780A353A08
+:1006A00009776865656C5F6D61785F737065656417
+:1006B0000A363A09776865656C5F74696D655F74C1
+:1006C0006F5F6D61780A0A703A097072696E742002
+:1006D00076616C7565730A643A09736574206465A4
+:1006E0006661756C74730A75703A092B310A646F10
+:1006F000776E3A092D310A706775703A092B3130DF
+:100700000A7067646F776E3A092D31300A0A737088
+:10071000656564203D2064656C7461202A206D61EC
+:10072000785F7370656564202A2028726570656142
+:1007300074202F2074696D655F746F5F6D61782917
+:100740000A003F004D3E2000433E20004C25640A35
+:100750000074696D65725F636F756E743A20253041
+:10076000346C580A006B6579626F6172645F69640A
+:100770006C653A2025580A006B6579626F61726476
+:100780005F70726F746F636F6C3A2025580A00684F
+:100790006F73745F6B6579626F6172645F6C6564BF
+:1007A0007328293A2025580A000A092D205374611C
+:1007B000747573202D0A004743433A20342E392E96
+:1007C00032204156522D4C4942433A20312E382E88
+:1007D00031204156525F415243483A20617672358A
+:1007E0000A004F5054494F4E533A204C5546412031
+:1007F000424F4F544D41474943204D4F5553454B70
+:1008000045592045585452414B455920434F4E536A
+:100810004F4C4520434F4D4D414E442034303936E6
+:100820000A004255494C443A203136373138656622
+:100830002D6469727479202832333A34303A353471
+:10084000204A756E2020392032303136290A005670
+:1008500049443A2030784645454428596F75292047
+:100860005049443A20307836303630286B63363081
+:10087000763229205645523A203078303030310ACD
+:1008800000444553433A204120637573746F6D20D3
+:100890006B6579626F6172640A000A092D205665E2
+:1008A0007273696F6E202D0A000A092D20436F6E46
+:1008B000736F6C65202D0A4553432F713A0971758A
+:1008C00069740A6D3A096D6F7573656B65790A0015
+:1008D0000A092D204D61676963202D0A443A0944B5
+:1008E00065627567204D65737361676520546F6736
+:1008F000676C650A583A094D6174726978204465DD
+:10090000627567204D6F646520546F67676C652062
+:100910002D2053686F77206B6579707265737365EE
+:100920007320696E206D61747269782067726964E2
+:100930000A4B3A094B6579626F61726420446562C3
+:10094000756720546F67676C65202D2053686F773B
+:10095000206B65797072657373207265706F727445
+:100960000A4D3A094465627567204D6F75736520BD
+:10097000546F67676C650A563A0956657273696FFA
+:100980006E0A533A095374617475730A433A094104
+:100990006374697661746520436F6E736F6C652054
+:1009A0004D6F64650A46312D4631303A09537769F7
+:1009B00074636820746F204C6179657220302D3922
+:1009C0002028463130203D204C30290A302D393A3C
+:1009D0000953776974636820746F204C617965727C
+:1009E00020302D390A4553433A09537769746368B7
+:1009F00020746F204C6179657220302028616C74FE
+:100A000065726E617465206B65792031290A4752E1
+:100A10004156453A0953776974636820746F204CD6
+:100A20006179657220302028616C7465726E617422
+:100A300065206B65792032290A50415553453A09A2
+:100A40004A756D7020746F20426F6F746C6F6164B3
+:100A5000657220285265736574290A453A095072F7
+:100A6000696E7420454550524F4D2053657474692A
+:100A70006E67730A000A002575002E6C6576656C3A
+:100A80003A20000A002575002E656E61626C653A99
+:100A900020000A0025303258006261636B6C696780
+:100AA00068745F636F6E6669672E7261773A2000C3
+:100AB0000A002575002E6E6B726F3A20000A002521
+:100AC00075002E737761705F6261636B736C617325
+:100AD000685F6261636B73706163653A20000A004E
+:100AE0002575002E737761705F67726176655F654B
+:100AF00073633A20000A002575002E6E6F5F6775DC
+:100B0000693A20000A002575002E737761705F72C4
+:100B1000616C745F726775693A20000A0025750080
+:100B20002E737761705F6C616C745F6C6775693A86
+:100B300020000A002575002E636170736C6F636B73
+:100B40005F746F5F636F6E74726F6C3A20000A009F
+:100B50002575002E737761705F636F6E74726F6CB2
+:100B60005F636170736C6F636B3A20000A0025301D
+:100B70003258006B65796D61705F636F6E6669678F
+:100B80002E7261773A20000A002575002E6D6F7570
+:100B900073653A20000A002575002E6B6579626F37
+:100BA0006172643A20000A002575002E6D6174722E
+:100BB00069783A20000A002575002E656E61626C26
+:100BC000653A20000A002530325800646562756776
+:100BD0005F636F6E6669672E7261773A20000A0064
+:100BE00025750064656661756C745F6C617965720A
+:100BF0003A20003F000A6D6F7573653A206F666694
+:100C00000A000A6D6F7573653A206F6E0A000A6BF1
+:100C10006579626F6172643A206F66660A000A6BDA
+:100C20006579626F6172643A206F6E0A000A6D61C5
+:100C3000747269783A206F66660A000A6D61747290
+:100C400069783A206F6E0A000A64656275673A2017
+:100C50006F66660A000A64656275673A206F6E0AFD
+:100C6000000A0A4A756D70696E6720746F20626FA2
+:100C70006F746C6F616465722E2E2E2000433E20CF
+:100C8000006565636F6E6669673A0A006261636B4F
+:100C90006C6967687420737465703A2025750A0062
+:100CA0006261636B6C6967687420746F67676C65F9
+:100CB0003A2025750A006261636B6C69676874206D
+:100CC00064656372656173653A2025750A00626127
+:100CD000636B6C6967687420696E637265617365C4
+:100CE0003A2025750A0011241FBECFEFDAE0DEBFDF
+:100CF000CDBF04B603FE24C08091F3019091F401AE
+:100D0000A091F501B091F6018730904BA740B04B10
+:100D1000B9F41092F3011092F4011092F5011092BF
+:100D2000F60114BE84B7877F84BF88E10FB6F894BC
+:100D300080936000109260000FBEE0E0F8E3099538
+:100D400011E0A0E0B1E0E2E5FAE502C005900D9205
+:100D5000A634B107D9F711E0A6E4B1E001C01D92B5
+:100D6000A33FB107E1F70E94080F0C94272D0C94C4
+:100D70000000FF93EF93E0914601F0914701309717
+:100D800009F00995EF91FF910895FC01859180305C
+:100D900011F0EFDFFBCF0895FF27E0E230E247FFDD
+:100DA0000CC0419597FF09C0EDE260957095809564
+:100DB0009095611D711D811D911D27FF02C0219518
+:100DC00030E350E2AA27660F771F881F991FAA1FDA
+:100DD000A41710F0A41B63955A95A9F7AA3008F040
+:100DE000A95FA05DAF93F39561157105810591052C
+:100DF00041F7ED3211F4EF93F395F21718F43F93A6
+:100E0000F395FBCF8F91B5DFFA95E1F70895E9915E
+:100E1000F9918591803021F0853219F0AADFF9CF60
+:100E2000089520E0E89455915532C1F3503311F400
+:100E3000689455915A3348F4505390F3220F022E80
+:100E4000220F220F200D250FF4CF0EF4219589914A
+:100E50009991533619F3533729F1533559F1BC01A0
+:100E600088279927E8945C3621F4899199916894B0
+:100E70005591543639F446EF7EF077FF0DC08FEF71
+:100E80009FEF0AC055374AE039F0583540E121F06C
+:100E9000523642E009F00895FF93EF937DDFEF9122
+:100EA000FF91B7CFFF93EF93FC0181918030B9F3AD
+:100EB00060DFFBCFFF93EF9368DFF1CFDF93CF933A
+:100EC000CDB7DEB72596A3DFCF91DF9108950895C2
+:100ED000089581E0089508950C9468070C946907BB
+:100EE0000C946B07269A2E988FEF9FEF90938700B4
+:100EF0008093860082E28093800089E18093810064
+:100F00000C94B22A0E9472070C946707282F2E981F
+:100F100080918000211108C08F7D80938000109205
+:100F20008B0010928A0008958062809380002330A5
+:100F300019F48FEF9FEF0FC083E090E0821B9109BF
+:100F4000880F991F2FEF3FEFA90102C056954795D3
+:100F50008A95E2F7CA0190938B0080938A000895E6
+:100F600080E090E0089581E008950C94B30708951F
+:100F70000F931F93CF93DF938C01FC01C081D1812C
+:100F8000CE010E948C1EBE010E946508EC01B801D2
+:100F90000E94B507882309F48DC0F8018281882357
+:100FA00009F44AC08091530181111FC0C431F0E59A
+:100FB000DF0709F051C00E94B70781E08093530119
+:100FC0000E947A20909352018093510110924A011D
+:100FD00010924C0110924B0110924E0110924D0153
+:100FE0001092500110924F0165C080915101909173
+:100FF00052010E948620883C910570F480914A013C
+:10100000E82FF0E0EE0FFF1FE55BFE4FD183C083BA
+:101010008F5F80934A014EC0C43880E5D80721F025
+:10102000C538D04501F13AC0F8018281882341F0EA
+:101030001092480182E01EC0C438E0E5DE0759F591
+:1010400080914801811106C086E20E94E81586E27F
+:101050000E94B01682E01CC0C438F0E5DF0741F3FF
+:10106000C538D045D9F4F8018281882331F0109237
+:10107000490180E20E94FF161DC080914901811143
+:1010800006C087E20E94E81587E20E94B01680E25F
+:101090000E9406170FC0C538D04529F381E0809320
+:1010A000480180934901C801DF91CF911F910F91B1
+:1010B0000C946E0780E0DF91CF911F910F910895FE
+:1010C0000C9482070C946C0708959EE0799FF001C0
+:1010D000112496E4899FE00DF11D1124E60FF11D06
+:1010E000EE0FFF1FE65FFE4F859194910895880FE4
+:1010F000991FFC01E657F040859194910895880F5F
+:10110000991FFC01E65FFE4F8591949108950F931E
+:101110001F93CF93DF93EC01811521E39207A0F594
+:10112000C11580E3D80708F0D7C0C83ED105D8F470
+:10113000C03ED10508F007C2C83AD10578F4C53AD7
+:10114000D10508F06AC0C130D10509F463C008F4C4
+:10115000F7C1C430D10508F0F6C1F2C1CB3BD105CF
+:1011600008F466C0EDC1C11590E2D90708F0AFC020
+:10117000C11521E0D20708F0E6C1C03FD10508F44F
+:10118000DFC18E0110651FC2C03880E5D80700F5A9
+:10119000C03790E5D90708F0A3C0C11520E5D207F4
+:1011A00009F4ACC050F4CE01905480319F4008F057
+:1011B000C7C1DF708E01106A06C2C13080E5D80752
+:1011C00009F4AAC0C43190E5D90708F4AFC0B8C18A
+:1011D000C33820E5D20709F48EC050F4C13890E539
+:1011E000D90709F482C008F083C000E011EDEBC11B
+:1011F000C03181E5D80708F4A3C1C11597E5D90727
+:1012000008F436C1CE0190578115904108F098C17D
+:10121000DF7093C101E010E0D6C1C53AD10509F4F1
+:1012200094C1C63AD10509F093C102E810E4CBC1DC
+:10123000C83AD10509F48FC1C93AD10509F48EC164
+:10124000CA3AD10509F48DC1CB3AD10509F48CC154
+:10125000CC3AD10509F48BC1CD3AD10509F48AC144
+:10126000C03BD10509F489C1CE3AD10509F488C142
+:10127000CF3AD10509F487C1C13BD10509F486C134
+:10128000C23BD10509F485C1C33BD10509F484C132
+:10129000C43BD10509F483C1C53BD10509F482C122
+:1012A000C63BD10509F481C1C73BD10509F480C112
+:1012B000C83BD10509F47FC1C93BD10509F47EC102
+:1012C000CA3BD10509F47DC100E014E47CC1CE0124
+:1012D0009F700E947F0878C1DD278E01106C73C15A
+:1012E000CF70DD278E01146D6EC100E010ED6BC173
+:1012F00000E012ED68C100E013ED65C10E94931992
+:101300008FEF94E32CE0815090402040E1F700C043
+:1013100000000E94D52057C186E991E00E94C506D1
+:101320008091D30181608093D3014DC10E948822B6
+:10133000811102C00E9469220E94A52290E0909330
+:10134000F2018093F101C23080E5D80721F4809149
+:10135000F101816086C0C43090E5D90721F4809105
+:10136000F10182607EC0C63020E5D20721F4809171
+:10137000F101846076C0C83080E5D80719F4809107
+:10138000F10127C0CA3090E5D90721F48091F1011D
+:10139000806167C0CC3020E5D20721F48091F10153
+:1013A00080625FC0CE3080E5D80721F48091F101E2
+:1013B000806457C0C03190E5D90721F48091F101D4
+:1013C00080684FC0C23120E5D20729F48091F10135
+:1013D0008460886046C0C33080E5D80721F48091DE
+:1013E000F1018E7F3EC0C53090E5D90721F4809190
+:1013F000F1018D7F36C0C73020E5D20721F48091FE
+:10140000F1018B7F2EC0C93080E5D80719F4809197
+:10141000F10126C0CB3090E5D90721F48091F1018C
+:101420008F7E1FC0CD3020E5D20721F48091F101DD
+:101430008F7D17C0CF3080E5D80721F48091F1016E
+:101440008F7B0FC0C13190E5D90721F48091F10164
+:101450008F7707C0C331D04531F48091F1018B7F84
+:10146000877F8093F1018091F1010E94A922ABC096
+:101470008D2F99278F70992781309105D9F49E017E
+:101480002370332702C0880F991F2A95E2F79C68C2
+:101490008E0144E0000F111F4A95E1F700271370F9
+:1014A000802B912B53E0CC0FDD1F5A95E1F7C076CE
+:1014B000DD272FC08230910531F4DC2FCC278E013F
+:1014C000016F106A80C08330910569F4CE0183708A
+:1014D000992701E010E002C0000F111F8A95E2F782
+:1014E000C8019C680FC084309105B9F4CE018370A7
+:1014F000992701E010E002C0000F111F8A95E2F762
+:10150000C8019A6823E0CC0FDD1F2A95E1F7C07E61
+:10151000D7708C010C2B1D2B56C08530910531F4F2
+:10152000DC2FCC278E01046F106A4DC0069709F09E
+:101530004AC0CF71DD27DC2FCC278E01106243C05B
+:1015400000E010E040C08E013EC001E810E43BC066
+:1015500003E810E438C002EE14E435C009EE14E4E8
+:1015600032C00AEE14E42FC005EB14E42CC006EBE5
+:1015700014E429C007EB14E426C00CEC14E423C0E7
+:101580000DEC14E420C003E815E41DC00AE815E4DE
+:101590001AC002E915E417C004E915E414C001E219
+:1015A00016E411C003E216E40EC004E216E40BC018
+:1015B00005E216E408C006E216E405C007E216E4F8
+:1015C00002C00AE216E4C801DF91CF911F910F918A
+:1015D00008959EE0799FF001112496E4899FE00D23
+:1015E000F11D1124E60FF11DEE0FFF1FE65FFE4F08
+:1015F00085919491803E9105E0F4803C910558F5E9
+:101600008133910509F46FC048F48932910509F4DA
+:1016100063C08A32910509F46DC072C089339105A7
+:10162000E9F082389105D1F08533910509F44DC078
+:1016300067C0833E910581F138F4803E9105B9F091
+:10164000823E9105D9F05CC0863E910561F1873EEE
+:101650009105A1F155C00E94770808952091F101EC
+:1016600020FD02C021FF4CC080EE90E049C0809177
+:10167000F10180FFF9CF89E390E042C08091F10150
+:1016800082FF0EC08091F10184FF03C080E090E0F2
+:1016900037C083EE90E034C08091F10182FFF2CF39
+:1016A00082EE90E02DC08091F10183FF0BC080910C
+:1016B000F10184FDEBCF87EE90E022C08091F10133
+:1016C00083FFF5CF86EE90E01BC08091F10185FF8E
+:1016D00007C089E290E014C08091F10185FFF9CF45
+:1016E00085E390E00DC08091F10186FF07C08AE29A
+:1016F00090E006C08091F10186FFF9CF81E390E090
+:101700000E94870808950C947007E82FF0E0EE5DC2
+:10171000FE4F8081E82FEF70F0E082958F7021E01E
+:1017200030E0A90102C0440F551F8A95E2F740A39B
+:1017300008950F931F93CF93DF9385B7806885BF7C
+:1017400085B7806885BFC4E0D0E001E010E0FE010D
+:10175000EE5DFE4F8081E82FEF70F0E021A18295D1
+:101760008F70A80102C0440F551F8A95E2F7CA0185
+:10177000822B81A38C2F0E94850B219740F78DE04F
+:1017800090E061E070E0FC01EC5EFE4F2081E22F12
+:10179000EF70F0E042A122952F70DB0102C0AA0F8A
+:1017A000BB1F2A95E2F79D01242B22A3019758F72E
+:1017B000DF91CF911F910F910C946008EF92FF92EF
+:1017C0000F931F93CF93DF930EE511E0C4E0EE2457
+:1017D000E394F12CD5E08C2F0E94850B8DE090E0F6
+:1017E00040E050E0FC01EC5EFE4F6081E62FEF70C0
+:1017F000F0E020A130E062956F7002C0359527952A
+:101800006A95E2F720FD09C09701082E02C0220F59
+:10181000331F0A94E2F7422B532B019718F7F80174
+:10182000929182918F018417950721F05183408313
+:10183000D09300018C2F0E94850BC15060F68091DF
+:10184000000187FD35C09091D30190FF10C0282F73
+:10185000332727FD30953F938F938FED91E09F9332
+:101860008F930E945E070F900F900F900F908091C2
+:10187000000181508093000187FD07C08FE99FE040
+:101880000197F1F700C0000013C080E090E0FC0178
+:10189000E25AFE4FDC01AC5ABE4F18962D913C9196
+:1018A0001997318720870297863FEFEF9E0779F7D8
+:1018B0000E94620881E0DF91CF911F910F91FF900C
+:1018C000EF900895E82FF0E0EE0FFF1FE25AFE4F71
+:1018D000808191810895EF92FF920F931F93CF9390
+:1018E000DF938091D30180FF04C080EC91E00E94DF
+:1018F000C5060EE511E0C0E0D0E088EAE82E81E000
+:10190000F82E8091D30180FF13C0F801808191816E
+:101910000E94E41F9F938F93DF93CF93FF92EF92E8
+:101920000E945E070F900F900F900F900F900F90F6
+:1019300021960E5F1F4FC530D10519F7DF91CF916A
+:101940001F910F91FF90EF9008950F931F93CF93E6
+:1019500008E611E0C0E0F801929182918F010E94A7
+:10196000C21FC80FF1E00E351F07A9F78C2FCF91CA
+:101970001F910F9108958091730108959FB7F89476
+:1019800010926A019FBF9091E801943009F057C00E
+:101990009091E9009F703091EC00232F217030FD71
+:1019A00020E8922B24E02093E9002091EB002