diff options
Diffstat (limited to 'keyboards/atreus')
-rw-r--r-- | keyboards/atreus/Makefile | 87 | ||||
-rw-r--r-- | keyboards/atreus/README.md | 186 | ||||
-rw-r--r-- | keyboards/atreus/atreus.c | 29 | ||||
-rw-r--r-- | keyboards/atreus/atreus.h | 28 | ||||
-rw-r--r-- | keyboards/atreus/config.h | 88 | ||||
-rw-r--r-- | keyboards/atreus/keymaps/default/compiled.hex | 1328 | ||||
-rw-r--r-- | keyboards/atreus/keymaps/default/keymap.c | 51 | ||||
-rw-r--r-- | keyboards/atreus/keymaps/gerb/compiled.hex | 1339 | ||||
-rw-r--r-- | keyboards/atreus/keymaps/gerb/keymap.c | 66 |
9 files changed, 3202 insertions, 0 deletions
diff --git a/keyboards/atreus/Makefile b/keyboards/atreus/Makefile new file mode 100644 index 0000000000..72b694faac --- /dev/null +++ b/keyboards/atreus/Makefile @@ -0,0 +1,87 @@ + + +ifdef TEENSY2 + OPT_DEFS += -DATREUS_TEENSY2 + ATRUES_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex +else + OPT_DEFS += -DATREUS_ASTAR + ATRUES_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \ + avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB) +endif + +# 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 +# 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 - not yet supported in LUFA +# 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 + + +ifndef QUANTUM_DIR + include ../../Makefile +endif + +USB ?= /dev/cu.usbmodem1411 + +upload: build + $(ATRUES_UPLOAD_COMMAND) +
\ No newline at end of file diff --git a/keyboards/atreus/README.md b/keyboards/atreus/README.md new file mode 100644 index 0000000000..86e6e1f0c9 --- /dev/null +++ b/keyboards/atreus/README.md @@ -0,0 +1,186 @@ +atreus keyboard firmware +====================== + +## Quantum MK Firmware + +You have access to a bunch of goodies! Check out the Makefile to enable/disable some of the features. Uncomment the `#` to enable them. Setting them to `no` does nothing and will only confuse future you. + + BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality + MIDI_ENABLE = yes # MIDI controls + # UNICODE_ENABLE = yes # Unicode support - this is commented out, just as an example. You have to use #, not // + BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID + +## Atreus specific information + +These configuration files are specifically for the Atreus keyboards created by Phil Hagelberg (@technomancy). This keyboard is available in two variants: one powered by a Teensy 2, one powered by an A-Star. This repository currently assumes that you have an A-Star powered Atreus. If you are using a Teensy2, specify that by adding `TEENSY2=yes` to your `make` commands. + +If you are coming from the [atreus-firmware](https://github.com/technomancy/atreus-firmware), we've also brought forward the `make upload` command for you to use. + +## Quick aliases to common actions + +Your keymap can include shortcuts to common operations (called "function actions" in tmk). + +### Switching and toggling layers + +`MO(layer)` - momentary switch to *layer*. As soon as you let go of the key, the layer is deactivated and you pop back out to the previous layer. When you apply this to a key, that same key must be set as `KC_TRNS` on the destination layer. Otherwise, you won't make it back to the original layer when you release the key (and you'll get a keycode sent). You can only switch to layers *above* your current layer. If you're on layer 0 and you use `MO(1)`, that will switch to layer 1 just fine. But if you include `MO(3)` on layer 5, that won't do anything for you -- because layer 3 is lower than layer 5 on the stack. + +`LT(layer, kc)` - momentary switch to *layer* when held, and *kc* when tapped. Like `MO()`, this only works upwards in the layer stack (`layer` must be higher than the current layer). + +`TG(layer)` - toggles a layer on or off. As with `MO()`, you should set this key as `KC_TRNS` in the destination layer so that tapping it again actually toggles back to the original layer. Only works upwards in the layer stack. + +### Fun with modifier keys + +* `LSFT(kc)` - applies left Shift to *kc* (keycode) - `S(kc)` is an alias +* `RSFT(kc)` - applies right Shift to *kc* +* `LCTL(kc)` - applies left Control to *kc* +* `RCTL(kc)` - applies right Control to *kc* +* `LALT(kc)` - applies left Alt to *kc* +* `RALT(kc)` - applies right Alt to *kc* +* `LGUI(kc)` - applies left GUI (command/win) to *kc* +* `RGUI(kc)` - applies right GUI (command/win) to *kc* + +You can also chain these, like this: + + LALT(LCTL(KC_DEL)) -- this makes a key that sends Alt, Control, and Delete in a single keypress. + +The following shortcuts automatically add `LSFT()` to keycodes to get commonly used symbols. Their long names are also available and documented in `/quantum/keymap_common.h`. + + KC_TILD ~ + KC_EXLM ! + KC_AT @ + KC_HASH # + KC_DLR $ + KC_PERC % + KC_CIRC ^ + KC_AMPR & + KC_ASTR * + KC_LPRN ( + KC_RPRN ) + KC_UNDS _ + KC_PLUS + + KC_LCBR { + KC_RCBR } + KC_PIPE | + KC_COLN : + +`MT(mod, kc)` - is *mod* (modifier key - MOD_LCTL, MOD_LSFT) when held, and *kc* when tapped. In other words, you can have a key that sends Esc (or the letter O or whatever) when you tap it, but works as a Control key or a Shift key when you hold it down. + +These are the values you can use for the `mod` in `MT()` (right-hand modifiers are not available): + + * MOD_LCTL + * MOD_LSFT + * MOD_LALT + * MOD_LGUI + +These can also be combined like `MOD_LCTL | MOD_LSFT` e.g. `MT(MOD_LCTL | MOD_LSFT, KC_ESC)` which would activate Control and Shift when held, and send Escape when tapped. + +We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact: + + * `CTL_T(kc)` - is LCTL when held and *kc* when tapped + * `SFT_T(kc)` - is LSFT when held and *kc* when tapped + * `ALT_T(kc)` - is LALT when held and *kc* when tapped + * `GUI_T(kc)` - is LGUI when held and *kc* when tapped + * `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/) + +### Temporarily setting the default layer + +`DF(layer)` - sets default layer to *layer*. The default layer is the one at the "bottom" of the layer stack - the ultimate fallback layer. This currently does not persist over power loss. When you plug the keyboard back in, layer 0 will always be the default. It is theoretically possible to work around that, but that's not what `DF` does. + +### Remember: These are just aliases + +These functions work the same way that their `ACTION_*` functions do - they're just quick aliases. To dig into all of the tmk ACTION_* functions, please see the [TMK documentation](https://github.com/jackhumbert/qmk_firmware/blob/master/tmk_core/doc/keymap.md#2-action). + +Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - the benefit here is being able to use more than 32 function actions (up to 4096), if you happen to need them. + +## Macro shortcuts: Send a whole string when pressing just one key + +Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to access macro *n* - *n* will get passed into the `action_get_macro` as the `id`, and you can use a switch statement to trigger it. This gets called on the keydown and keyup, so you'll need to use an if statement testing `record->event.pressed` (see keymap_default.c). + +```c +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: // this would trigger when you hit a key mapped as M(0) + if (record->event.pressed) { + return MACRO( I(255), T(H), T(E), T(L), T(L), W(255), T(O), END ); // this sends the string 'hello' when the macro executes + } + break; + } + return MACRO_NONE; +}; +``` +A macro can include the following commands: + +* I() change interval of stroke in milliseconds. +* D() press key. +* U() release key. +* T() type key(press and release). +* W() wait (milliseconds). +* END end mark. + +So above you can see the stroke interval changed to 255ms between each keystroke, then a bunch of keys being typed, waits a while, then the macro ends. + +Note: Using macros to have your keyboard send passwords for you is a bad idea. + +### 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_<layout>.h" + +Where <layout> is "colemak" or "dvorak". After including this line, you will get access to: + + * `CM_*` for all of the Colemak-equivalent characters + * `DV_*` for all of the Dvorak-equivalent characters + +These implementations assume you're using Colemak or Dvorak on your OS, not on your keyboard - this is referred to as a software-implemented layout. If your computer is in Qwerty and your keymap is in Colemak or Dvorak, this is referred to as a firmware-implemented layout, and you won't need these features. + +To give an example, if you're using software-implemented Colemak, and want to get an `F`, you would use `CM_F` - `KC_F` under these same circumstances would result in `T`. + +## Additional language support + +In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbreviation of its name. `FR_UGRV` which will result in a `รน` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware (but it's being worked on - see Unicode support). + +## Unicode support + +You can currently send 4 hex digits with your OS-specific modifier key (RALT for OSX with the "Unicode Hex Input" layout) - this is currently limited to supporting one OS at a time, and requires a recompile for switching. 8 digit hex codes are being worked on. The keycode function is `UC(n)`, where *n* is a 4 digit hexidecimal. Enable from the Makefile. + +## Other firmware shortcut keycodes + +* `RESET` - puts the MCU in DFU mode for flashing new firmware (with `make dfu`) +* `DEBUG` - the firmware into debug mode - you'll need hid_listen to see things +* `BL_ON` - turns the backlight on +* `BL_OFF` - turns the backlight off +* `BL_<n>` - sets the backlight to level *n* +* `BL_INC` - increments the backlight level by one +* `BL_DEC` - decrements the backlight level by one +* `BL_TOGG` - toggles the backlight +* `BL_STEP` - steps through the backlight levels + +Enable the backlight from the Makefile. + +## MIDI functionalty + +This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile. + +## Bluetooth functionality + +This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboards/comments/3psx0q/the_planck_keyboard_with_bluetooth_guide_and/?ref=search_posts), but can be enabled via the Makefile. The firmware will still output characters via USB, so be aware of this when charging via a computer. It would make sense to have a switch on the Bluefruit to turn it off at will. + +## Building + +Download or clone the whole firmware and navigate to the keyboards/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button. + +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` 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/keyboards/atreus/atreus.c b/keyboards/atreus/atreus.c new file mode 100644 index 0000000000..9d1de631bb --- /dev/null +++ b/keyboards/atreus/atreus.c @@ -0,0 +1,29 @@ +#include "atreus.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)(); + } +}; + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + if (matrix_scan_user) { + (*matrix_scan_user)(); + } +}; diff --git a/keyboards/atreus/atreus.h b/keyboards/atreus/atreus.h new file mode 100644 index 0000000000..10712d26d8 --- /dev/null +++ b/keyboards/atreus/atreus.h @@ -0,0 +1,28 @@ +#ifndef ATREUS_H +#define ATREUS_H + +#include "matrix.h" +#include "keymap.h" +#include "backlight.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 two-dimensional array +#define KEYMAP( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a \ +) \ +{ \ + { k00, k01, k02, k03, k04, KC_NO, k05, k06, k07, k08, k09 }, \ + { k10, k11, k12, k13, k14, KC_NO, k15, k16, k17, k18, k19 }, \ + { k20, k21, k22, k23, k24, k35, k25, k26, k27, k28, k29 }, \ + { k2a, k30, k31, k32, k33, k34, k36, k37, k38, k39, k3a } \ +} + +void matrix_init_user(void); +void matrix_scan_user(void); + +#endif diff --git a/keyboards/atreus/config.h b/keyboards/atreus/config.h new file mode 100644 index 0000000000..624d90188c --- /dev/null +++ b/keyboards/atreus/config.h @@ -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 Technomancy +#define PRODUCT Atreus +#define DESCRIPTION q.m.k. keyboard firmware for Atreus + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 11 + +// Change this to how you wired your keyboard +// COLS: Left to right, ROWS: Top to bottom +#if defined(ATREUS_ASTAR) +# define MATRIX_ROW_PINS { D0, D1, D3, D2 } +# define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 } +# define UNUSED_PINS +#elif defined(ATREUS_TEENSY2) +# define MATRIX_ROW_PINS { D0, D1, D2, D3 } +# define MATRIX_COL_PINS { F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0 } +# define UNUSED_PINS +#endif + +/* 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 DEBOUNCING_DELAY 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)) \ +) + +/* + * 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/keyboards/atreus/keymaps/default/compiled.hex b/keyboards/atreus/keymaps/default/compiled.hex new file mode 100644 index 0000000000..a455e04de9 --- /dev/null +++ b/keyboards/atreus/keymaps/default/compiled.hex @@ -0,0 +1,1328 @@ +:100000000C941A060C945E060C945E060C945E0624
+:100010000C945E060C945E060C945E060C945E06D0
+:100020000C945E060C945E060C945D110C942F12D9
+:100030000C9410200C945E060C945E060C945E06E4
+:100040000C945E060C945E060C945E060C945E06A0
+:100050000C945E060C9478200C945E060C945E065C
+:100060000C945E060C945E060C945E060C945E0680
+:100070000C945E060C945E060C945E060C945E0670
+:100080000C945E060C945E060C945E060C945E0660
+:100090000C945E060C945E060C945E060C945E0650
+:1000A0000C945E060C945E060C945E069C12BE12C6
+:1000B000AC13BE12AC1303132613AC137B138E13B5
+:1000C000D116D116001700173F175F178F188F181A
+:1000D0006A178F181A181A1880188F188F1889180D
+:1000E0002718271827182718271827182718271818
+:1000F0002718271827182718271827182718271808
+:10010000371845184C1853185D1814001A000800C9
+:100110001500170001001C0018000C00120013004D
+:1001200004001600070009000A0001000B000D0082
+:100130000E000F0033001D001B0006001900050013
+:10014000E2001100100036003700380029002B00B3
+:10015000E300E1002A00E0002C0001522D003400F1
+:1001600028001E021F022F023002310201004B0044
+:100170002400250026002502200221022602270253
+:10018000350001004E002100220023002E02220231
+:1001900023022F0030003502E20024021E001F005F
+:1001A0002000310002544900E300E1002A00E00091
+:1001B0002C000100370027002E0049004A005200A1
+:1001C0004D004B000100520040004100420043003E
+:1001D0004C00500051004F005100010051003D0003
+:1001E0003E003F0044000100010001000100010049
+:1001F000E20001003A003B003C0045000100010024
+:10020000E300E1002A00E0002C000053010001009F
+:1002100000500A44454255473A20656E61626C655C
+:10022000642E0A005374617465206F6620726F77C4
+:100230002025583A2025303136620A0048756D6114
+:100240006E2D7265616461626C65206D61747269A6
+:10025000782073746174653A0D0A004465626F75A5
+:100260006E63696E672064656C61792072656D618B
+:10027000696E696E673A2025580A005B735D004B12
+:100280006579626F6172642073746172742E0A0002
+:100290005B575D005B535D005B525D005B445D003E
+:1002A0005B435D000E034100740072006500750041
+:1002B00073000000180354006500630068006E00BE
+:1002C0006F006D0061006E006300790000000403A0
+:1002D000090409028D00050100A0FA0904000001CB
+:1002E00003010100092111010001223F00070581DE
+:1002F0000308000A09040100010301020009211199
+:10030000010001224D000705820308000A090402CA
+:10031000000103000000092111010001223600073D
+:1003200005830308000A0904030002030000000912
+:10033000211101000122200007058403200001078C
+:100340000504032000010904040001030000000962
+:100350002111010001223900070585031000011257
+:1003600001100100000008EDFE60600100010200C4
+:100370000105010906A101050719E029E715002576
+:100380000195087501810205081901290595057572
+:10039000019102950175039101050719002977154F
+:1003A000002501957875018102C00631FF0974A10D
+:1003B000010975150025FF9520750881020976153C
+:1003C0000025FF952075089102C005010980A10153
+:1003D000850216010026B7001A01002AB700751021
+:1003E00095018100C0050C0901A1018503160100DA
+:1003F000269C021A01002A9C02751095018100C0FA
+:1004000005010902A1010901A10005091901290538
+:10041000150025019505750181029501750381017E
+:100420000501093009311581257F9502750881067E
+:1004300009381581257F950175088106050C0A3854
+:10044000021581257F950175088106C0C005010947
+:1004500006A101050719E029E71500250195087592
+:100460000181029501750881010508190129059589
+:100470000575019102950175039101050719002980
+:10048000FF150025FF950675088100C00A0025307C
+:10049000325820006B6579626F6172645F726570BB
+:1004A0006F72743A20004B6579626F617264204C00
+:1004B0004544732073746174653A2025780A00649A
+:1004C000656C5F6B65795F6269743A2063616E2762
+:1004D000742064656C3A20253032580A00616464E7
+:1004E0005F6B65795F6269743A2063616E2774207F
+:1004F0006164643A20253032580A00290A002575C3
+:10050000002F002575005D2800256400200025646B
+:1005100000200025640020002564007C0025303286
+:1005200058006D6F7573656B6579205B62746E7CC6
+:10053000782079207620685D287265702F61636C61
+:10054000293A205B006D6B5F776865656C5F746945
+:100550006D655F746F5F6D6178203D2025640A00D2
+:100560006D6B5F776865656C5F6D61785F737065F3
+:100570006564203D2025640A006D6B5F74696D65BC
+:100580005F746F5F6D6178203D2025640A006D6B9C
+:100590005F6D61785F7370656564203D2025640A36
+:1005A000006D6B5F696E74657276616C203D20250D
+:1005B000640A006D6B5F64656C6179203D20256481
+:1005C0000A006D6B5F776865656C5F74696D655F68
+:1005D000746F5F6D6178203D2025640A006D6B5F4C
+:1005E000776865656C5F6D61785F737065656420C1
+:1005F0003D2025640A006D6B5F74696D655F746FE3
+:100600005F6D6178203D2025640A006D6B5F6D6130
+:10061000785F7370656564203D2025640A006D6B0A
+:100620005F696E74657276616C203D2025640A00F6
+:100630006D6B5F64656C6179203D2025640A000A5A
+:1006400000257500363A20776865656C5F74696DC2
+:10065000655F746F5F6D61783A20000A0025750050
+:10066000353A20776865656C5F6D61785F7370659A
+:1006700065643A20000A00257500343A2074696DDB
+:10068000655F746F5F6D61783A20000A0025750020
+:10069000333A206D61785F73706565643A20000AB3
+:1006A00000257500323A20696E74657276616C2897
+:1006B0006D73293A20000A00257500313A206465DF
+:1006C0006C6179282A31306D73293A20000A092D8E
+:1006D0002056616C756573202D0A004D3E004D2536
+:1006E000643E20003F007365742064656661756C2C
+:1006F000740A00433E200077686572652064656C6B
+:1007000074613A20637572736F723D25642C207793
+:100710006865656C3D25640A53656520687474706E
+:100720003A2F2F656E2E77696B6970656469612E4B
+:100730006F72672F77696B692F4D6F7573655F6B8C
+:100740006579730A000A092D204D6F7573656B6515
+:1007500079202D0A4553432F713A09717569740A3E
+:10076000313A0964656C6179282A31306D73290A40
+:10077000323A09696E74657276616C286D73290A64
+:10078000333A096D61785F73706565640A343A09BC
+:1007900074696D655F746F5F6D61780A353A0977CA
+:1007A0006865656C5F6D61785F73706565640A3656
+:1007B0003A09776865656C5F74696D655F746F5F32
+:1007C0006D61780A0A703A097072696E74207661F8
+:1007D0006C7565730A643A097365742064656661B3
+:1007E000756C74730A75703A092B310A646F776EF1
+:1007F0003A092D310A706775703A092B31300A7049
+:1008000067646F776E3A092D31300A0A7370656537
+:1008100064203D2064656C7461202A206D61785FDE
+:100820007370656564202A20287265706561742084
+:100830002F2074696D655F746F5F6D6178290A00A0
+:100840003F004D3E2000433E20004C25640A0074CA
+:10085000696D65725F636F756E743A202530346C14
+:10086000580A006B6579626F6172645F6E6B726FBC
+:100870003A2025580A006B6579626F6172645F697E
+:10088000646C653A2025580A006B6579626F617265
+:10089000645F70726F746F636F6C3A2025580A0042
+:1008A000686F73745F6B6579626F6172645F6C65AA
+:1008B000647328293A2025580A000A092D20537408
+:1008C00061747573202D0A004743433A20342E3952
+:1008D0002E32204156522D4C4942433A20312E3877
+:1008E0002E31204156525F415243483A2061767280
+:1008F000350A004F5054494F4E533A204C5546410B
+:10090000204D4F5553454B45592045585452414B66
+:10091000455920434F4E534F4C4520434F4D4D4179
+:100920004E44204E4B524F20343039360A00425547
+:10093000494C443A20313637313865662D64697246
+:100940007479202832333A30383A3534204A756E7B
+:100950002020392032303136290A005649443A20C5
+:1009600030784645454428546563686E6F6D616E06
+:10097000637929205049443A20307836303630287F
+:1009800041747265757329205645523A203078308B
+:100990003030310A00444553433A20712E6D2E6B9E
+:1009A0002E206B6579626F617264206669726D7763
+:1009B00061726520666F72204174726575730A00FA
+:1009C0000A092D2056657273696F6E202D0A000A80
+:1009D000092D20436F6E736F6C65202D0A455343BC
+:1009E0002F713A09717569740A6D3A096D6F7573E3
+:1009F000656B65790A000A092D204D6167696320DE
+:100A00002D0A443A094465627567204D6573736128
+:100A1000676520546F67676C650A583A094D6174C1
+:100A2000726978204465627567204D6F6465205453
+:100A30006F67676C65202D2053686F77206B657931
+:100A40007072657373657320696E206D617472696D
+:100A50007820677269640A4B3A094B6579626F6165
+:100A6000726420446562756720546F67676C652007
+:100A70002D2053686F77206B6579707265737320D2
+:100A80007265706F72740A4D3A0944656275672029
+:100A90004D6F75736520546F67676C650A563A0928
+:100AA00056657273696F6E0A533A095374617475AF
+:100AB000730A433A09416374697661746520436F30
+:100AC0006E736F6C65204D6F64650A46312D46313B
+:100AD000303A0953776974636820746F204C6179E8
+:100AE000657220302D392028463130203D204C3091
+:100AF000290A302D393A0953776974636820746F75
+:100B0000204C6179657220302D390A4553433A09EA
+:100B100053776974636820746F204C617965722023
+:100B2000302028616C7465726E617465206B657924
+:100B30002031290A47524156453A0953776974636F
+:100B40006820746F204C6179657220302028616CB8
+:100B50007465726E617465206B65792032290A5064
+:100B6000415553453A094A756D7020746F20426FA4
+:100B70006F746C6F616465722028526573657429A7
+:100B80000A4E3A094E4B524F20546F67676C650A04
+:100B9000003F004E4B524F3A206F66660A004E4BA4
+:100BA000524F3A206F6E0A000A6D6F7573653A20D6
+:100BB0006F66660A000A6D6F7573653A206F6E0A7C
+:100BC000000A6B6579626F6172643A206F66660A2B
+:100BD000000A6B6579626F6172643A206F6E0A0079
+:100BE0000A6D61747269783A206F66660A000A6D50
+:100BF00061747269783A206F6E0A000A64656275E2
+:100C0000673A206F66660A000A64656275673A2073
+:100C10006F6E0A000A0A4A756D70696E6720746FFC
+:100C200020626F6F746C6F616465722E2E2E2000CF
+:100C3000433E200011241FBECFEFDAE0DEBFCDBF60
+:100C400004B603FE24C08091FE019091FF01A091A3
+:100C50000002B09101028730904BA740B04BB9F42D
+:100C60001092FE011092FF011092000210920102F8
+:100C700014BE84B7877F84BF88E10FB6F894809351
+:100C80006000109260000FBEE0E0F8E3099511E00B
+:100C9000A0E0B1E0E8E9F2E502C005900D92A834C9
+:100CA000B107D9F711E0A8E4B1E001C01D92AE3F51
+:100CB000B107E1F70E94970E0C944A290C940000AA
+:100CC000FF93EF93E0914801F0914901309709F0CB
+:100CD0000995EF91FF910895FC018591803011F005
+:100CE000EFDFFBCF0895FF27E0E230E247FF0CC0C3
+:100CF000419597FF09C0EDE26095709580959095BC
+:100D0000611D711D811D911D27FF02C0219530E3DA
+:100D100050E2AA27660F771F881F991FAA1FA417E2
+:100D200010F0A41B63955A95A9F7AA3008F0A95FA3
+:100D3000A05DAF93F395611571058105910541F7AC
+:100D4000ED3211F4EF93F395F21718F43F93F39506
+:100D5000FBCF8F91B5DFFA95E1F70895E991F9910D
+:100D60008591803021F0853219F0AADFF9CF0895FE
+:100D700020E0E89455915532C1F3503311F4689452
+:100D800055915A3348F4505390F3220F022E220FFC
+:100D9000220F200D250FF4CF0EF421958991999102
+:100DA000533619F3533729F1533559F1BC018827CC
+:100DB0009927E8945C3621F489919991689455912A
+:100DC000543639F446EF7EF077FF0DC08FEF9FEF7A
+:100DD0000AC055374AE039F0583540E121F0523623
+:100DE00042E009F00895FF93EF937DDFEF91FF91CB
+:100DF000B7CFFF93EF93FC0181918030B9F360DFAF
+:100E0000FBCFFF93EF9368DFF1CFDF93CF93CDB7A5
+:100E1000DEB72596A3DFCF91DF9108950895089559
+:100E20008EE097E0892B11F00C940E0708958FE067
+:100E300097E0892B11F00C940F07089561110BC0F6
+:100E4000FC018281882321F085EE0E94751503C084
+:100E500085EE0E943D1680E090E0089581E00895BF
+:100E600081E008950C94300708950F931F93CF935A
+:100E7000DF938C01FC01C081D181CE010E94F31D62
+:100E8000BE010E94E207EC01B8010E9432078823EC
+:100E900009F48DC0F8018281882309F44AC0809149
+:100EA000550181111FC0C431F0E5DF0709F051C0C1
+:100EB0000E94340781E0809355010E944220909364
+:100EC00054018093530110924C0110924E011092E4
+:100ED0004D011092500110924F0110925201109248
+:100EE000510165C080915301909154010E944E20A0
+:100EF000883C910570F480914C01E82FF0E0EE0FF2
+:100F0000FF1FE35BFE4FD183C0838F5F80934C0153
+:100F10004EC0C43880E5D80721F0C538D04501F16E
+:100F20003AC0F8018281882341F010924A0182E0A0
+:100F30001EC0C438E0E5DE0759F580914A018111F1
+:100F400006C086E20E94751586E20E943D1682E088
+:100F50001CC0C438F0E5DF0741F3C538D045D9F4EB
+:100F6000F8018281882331F010924B0180E20E94C7
+:100F70008C161DC080914B01811106C087E20E9432
+:100F8000751587E20E943D1680E20E9493160FC0FD
+:100F9000C538D04529F381E080934A0180934B0105
+:100FA000C801DF91CF911F910F910C942E0780E023
+:100FB000DF91CF911F910F9108950C9410070C941D
+:100FC000170708959BE0799FF00111249CE2899F07
+:100FD000E00DF11D1124E60FF11DEE0FFF1FE65F7E
+:100FE000FE4F859194910895880F991FFC01E65753
+:100FF000F040859194910895880F991FFC01E65F58
+:10100000FE4F8591949108950F931F93CF93DF9393
+:10101000EC01811520E3920750F5C11580E2D80755
+:1010200008F0C9C0CB3BD10590F4C83AD10508F00F
+:1010300070C0C53AD10508F061C0C430D10508F0D0
+:10104000DAC1219709F0D4C101E010E014C2CF3F0A
+:10105000D10511F008F0CFC1C03FD10508F0A8C0FC
+:10106000CE01805E9109089708F4C5C1C1C1C130A5
+:1010700090E5D90709F4A8C050F5C0318FE4D8072E
+:1010800070F4C11590E4D90708F09AC0C11521E3A6
+:10109000D20708F0ADC1DD278E01106CECC1C1157F
+:1010A000D04509F0A5C10E94FA188FEF94E32CE017
+:1010B000815090402040E1F700C0000087E797E7AB
+:1010C00090930108809300080E949D20D4C1C1150F
+:1010D00097E5D90758F4C03121E5D20708F020C1BF
+:1010E000C43180E5D80708F479C082C1CE01905799
+:1010F0008115904108F07CC1DF7077C1C53AD105F8
+:1011000009F47BC1C63AD10509F07AC102E810E4BE
+:10111000B2C1C83AD10509F476C1C93AD10509F47A
+:1011200075C1CA3AD10509F474C1CB3AD10509F4A5
+:1011300073C1CC3AD10509F472C1CD3AD10509F495
+:1011400071C1C03BD10509F470C1CE3AD10509F493
+:101150006FC1CF3AD10509F46EC1C13BD10509F485
+:101160006DC1C23BD10509F46CC1C33BD10509F483
+:101170006BC1C43BD10509F46AC1C53BD10509F473
+:1011800069C1C63BD10509F468C1C73BD10509F463
+:1011900067C1C83BD10509F466C1C93BD10509F453
+:1011A00065C1CA3BD10509F464C100E014E463C120
+:1011B0008E01106560C1CE019F700E94FC075CC16A
+:1011C000DF708E01106A57C182E192E00E946C06C6
+:1011D0008091DF0181608093DF014DC10E94F42086
+:1011E000811102C00E94DA200E94072190E09093B2
+:1011F000FE018093FD01C23080E5D80721F4809183
+:10120000FD01816086C0C43090E5D90721F480914A
+:10121000FD0182607EC0C63020E5D20721F48091B6
+:10122000FD01846076C0C83080E5D80719F480914C
+:10123000FD0127C0CA3090E5D90721F48091FD0156
+:10124000806167C0CC3020E5D20721F48091FD0198
+:1012500080625FC0CE3080E5D80721F48091FD0127
+:10126000806457C0C03190E5D90721F48091FD0119
+:1012700080684FC0C23120E5D20729F48091FD017A
+:101280008460886046C0C33080E5D80721F480912F
+:10129000FD018E7F3EC0C53090E5D90721F48091D5
+:1012A000FD018D7F36C0C73020E5D20721F4809143
+:1012B000FD018B7F2EC0C93080E5D80719F48091DD
+:1012C000FD0126C0CB3090E5D90721F48091FD01C6
+:1012D0008F7E1FC0CD3020E5D20721F48091FD0123
+:1012E0008F7D17C0CF3080E5D80721F48091FD01B4
+:1012F0008F7B0FC0C13190E5D90721F48091FD01AA
+:101300008F7707C0C331D04531F48091FD018B7FC9
+:10131000877F8093FD018091FD010E940B21ABC06E
+:101320008D2F99278F70992781309105D9F49E01CF
+:101330002370332702C0880F991F2A95E2F79C6813
+:101340008E0144E0000F111F4A95E1F7002713704A
+:10135000802B912B53E0CC0FDD1F5A95E1F7C0761F
+:10136000DD272FC08230910531F4DC2FCC278E0190
+:10137000016F106A80C08330910569F4CE018370DB
+:10138000992701E010E002C0000F111F8A95E2F7D3
+:10139000C8019C680FC084309105B9F4CE018370F8
+:1013A000992701E010E002C0000F111F8A95E2F7B3
+:1013B000C8019A6823E0CC0FDD1F2A95E1F7C07EB3
+:1013C000D7708C010C2B1D2B56C08530910531F444
+:1013D000DC2FCC278E01046F106A4DC0069709F0F0
+:1013E0004AC0CF71DD27DC2FCC278E01106243C0AD
+:1013F00000E010E040C08E013EC001E810E43BC0B8
+:1014000003E810E438C002EE14E435C009EE14E439
+:1014100032C00AEE14E42FC005EB14E42CC006EB36
+:1014200014E429C007EB14E426C00CEC14E423C038
+:101430000DEC14E420C003E815E41DC00AE815E42F
+:101440001AC002E915E417C004E915E414C001E26A
+:1014500016E411C003E216E40EC004E216E40BC069
+:1014600005E216E408C006E216E405C007E216E449
+:1014700002C00AE216E4C801DF91CF911F910F91DB
+:1014800008959BE0799FF00111249CE2899FE00D73
+:10149000F11D1124E60FF11DEE0FFF1FE65FFE4F59
+:1014A00085919491803E9105E0F4803C910558F53A
+:1014B0008133910509F46FC048F48932910509F42C
+:1014C00063C08A32910509F46DC072C089339105F9
+:1014D000E9F082389105D1F08533910509F44DC0CA
+:1014E00067C0833E910581F138F4803E9105B9F0E3
+:1014F000823E9105D9F05CC0863E910561F1873E40
+:101500009105A1F155C00E94F40708952091FD01B5
+:1015100020FD02C021FF4CC080EE90E049C08091C8
+:10152000FD0180FFF9CF89E390E042C08091FD0189
+:1015300082FF0EC08091FD0184FF03C080E090E037
+:1015400037C083EE90E034C08091FD0182FFF2CF7E
+:1015500082EE90E02DC08091FD0183FF0BC0809151
+:10156000FD0184FDEBCF87EE90E022C08091FD016C
+:1015700083FFF5CF86EE90E01BC08091FD0185FFD3
+:1015800007C089E290E014C08091FD0185FFF9CF8A
+:1015900085E390E00DC08091FD0186FF07C08AE2DF
+:1015A00090E006C08091FD0186FFF9CF81E390E0D5
+:1015B0000E940408089508950C94DB0AE82FF0E0D7
+:1015C000E05EFE4F8081E82FEF70F0E082958F7033
+:1015D00021E030E0A90102C0440F551F8A95E2F7CF
+:1015E00040A308950F931F93CF93DF9385B780682F
+:1015F00085BF85B7806885BFC3E0D0E001E010E01B
+:10160000FE01E05EFE4F8081E82FEF70F0E021A147
+:1016100082958F70A80102C0440F551F8A95E2F78A
+:10162000CA01822B81A38C2F0E94DE0A219740F7EA
+:101630008AE090E061E070E0FC01EB5EFE4F20810B
+:10164000E22FEF70F0E042A122952F70DB0102C083
+:10165000AA0FBB1F2A95E2F79D01242B22A3019715
+:1016600058F7DF91CF911F910F910C94DD07EF9206
+:10167000FF920F931F93CF93DF930EE511E0C3E02A
+:10168000EE24E394F12CD5E08C2F0E94DE0A8AE050
+:1016900090E040E050E0FC01EB5EFE4F6081E62F01
+:1016A000EF70F0E020A130E062956F7002C03595D8
+:1016B00027956A95E2F720FD09C09701082E02C020
+:1016C000220F331F0A94E2F7422B532B019718F78E
+:1016D000F801929182918F018417950721F051832F
+:1016E0004083D09300018C2F0E94DE0AC15060F627
+:1016F0008091000187FD42C09091DF0190FF10C0F2
+:10170000282F332727FD30953F938F938BE592E069
+:101710009F938F930E9405070F900F900F900F904B
+:101720008091000181508093000187FD07C08FE9FF
+:101730009FE00197F1F700C0000020C080915C019C
+:1017400090915D01909365018093640180915A01AD
+:1017500090915B01909363018093620180915801A5
+:10176000909159019093610180936001809156019D
+:101770009091570190935F0180935E010E94DF0773
+:1017800081E0DF91CF911F910F91FF90EF9008952D
+:10179000E82FF0E0EE0FFF1FE25AFE4F80819181AB
+:1017A0000895EF92FF920F931F93CF93DF93809151
+:1017B000DF0180FF04C08CE392E00E946C060EE51E
+:1017C00011E0C0E0D0E084E2E82E82E0F82E8091C3
+:1017D000DF0180FF13C0F801808191810E94B71F53
+:1017E0009F938F93DF93CF93FF92EF920E94050711
+:1017F0000F900F900F900F900F900F9021960E5F0B
+:101800001F4FC430D10519F7DF91CF911F910F9170
+:10181000FF90EF9008950F931F93CF9306E611E08A
+:10182000C0E0F801929182918F010E94951FC80F2C
+:10183000F1E00E351F07A9F78C2FCF911F910F9163
+:1018400008958091790108959FB7F89410926801E6
+:101850009FBF9091F401943009F057C09091E90036
+:101860009F703091EC00232F217030FD20E8922BE7
+:1018700024E02093E9002091EB0020FF43C0209159
+:10188000EE0027FF3FC020916601222321F0209126
+:10189000E80025FF37C01092660126E03091E8008D
+:1018A00035FD15C03091F401343061F53091EB0015
+:1018B00035FD28C0215021F481E08093660122C0CB
+:1018C000EFE9FFE03197F1F700C00000E7CF809328
+:1018D000F1008091E80085FD0AC08091E80080FF5A
+:1018E000FCCF8091E8008E778093E80006C08FB728
+:1018F000F89421E0209368018FBF9F709093E900D6
+:1019000080E008959F709093E9008FEF0895CF9342
+:10191000DF9300D01F92CDB7DEB79C018091F40118
+:10192000843019F593E099833B832A839093E900EF
+:101930008FEF9091E800815095FD06C095ED9A9546
+:10194000F1F700008111F5CF8091E80085FF0DC00F
+:1019500040E050E063E070E0CE0101960E944D0F40
+:101960008091E8008E778093E8000F900F900F90A1
+:10197000DF91CF910895CF93DF9300D01F92CDB721
+:10198000DEB72091F401243021F522E029839B83E6
+:101990008A8383E08093E9008FEF9091E800815083
+:1019A00095FD06C095ED9A95F1F700008111F5CFF0
+:1019B0008091E80085FF0DC040 |