diff options
author | IBNobody <ibnobody@gmail.com> | 2016-05-02 23:15:56 -0500 |
---|---|---|
committer | IBNobody <ibnobody@gmail.com> | 2016-05-02 23:15:56 -0500 |
commit | 35d7081899df3a486b9b5785c7e8ec9481195848 (patch) | |
tree | 682a322ce2c3e2004abb4fbd00fc00316277b935 /keyboard/preonic | |
parent | 499e3096e9021b88a6a705ad7034ccbacb97b975 (diff) | |
parent | 2c070163ffffffde546fb00acaa2fbb96b93da64 (diff) |
Merge remote-tracking branch 'refs/remotes/jackhumbert/master'
Diffstat (limited to 'keyboard/preonic')
-rw-r--r-- | keyboard/preonic/Makefile | 5 | ||||
-rw-r--r-- | keyboard/preonic/backlight.c | 61 | ||||
-rw-r--r-- | keyboard/preonic/keymaps/default/keymap.c | 129 | ||||
-rw-r--r-- | keyboard/preonic/preonic.c | 63 | ||||
-rw-r--r-- | keyboard/preonic/preonic.h | 1 | ||||
-rw-r--r-- | keyboard/preonic/preonic_music.hex | 1713 | ||||
-rw-r--r-- | keyboard/preonic/preonic_pcb.hex | 1702 | ||||
-rw-r--r-- | keyboard/preonic/preonic_pcb_r1.hex | 1628 | ||||
-rw-r--r-- | keyboard/preonic/preonic_pcb_r1_w_bootloader.hex | 1880 | ||||
-rw-r--r-- | keyboard/preonic/preonic_pcb_silent.hex | 1189 |
10 files changed, 3633 insertions, 4738 deletions
diff --git a/keyboard/preonic/Makefile b/keyboard/preonic/Makefile index 3504e27201..259dd6686b 100644 --- a/keyboard/preonic/Makefile +++ b/keyboard/preonic/Makefile @@ -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 diff --git a/keyboard/preonic/backlight.c b/keyboard/preonic/backlight.c deleted file mode 100644 index f69364b2af..0000000000 --- a/keyboard/preonic/backlight.c +++ /dev/null @@ -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)); - } -}
\ No newline at end of file diff --git a/keyboard/preonic/keymaps/default/keymap.c b/keyboard/preonic/keymaps/default/keymap.c index 2591af9f02..b3aa14dcbe 100644 --- a/keyboard/preonic/keymaps/default/keymap.c +++ b/keyboard/preonic/keymaps/default/keymap.c @@ -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,48 +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 ode_to_joy[][2] = SONG(ODE_TO_JOY); +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); } @@ -313,19 +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 - init_notes(); - set_tempo(150); - PLAY_NOTE_ARRAY(ode_to_joy, false, .25); + 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) { @@ -339,9 +333,10 @@ void process_action_user(keyrecord_t *record) { } -void matrix_init_user(void) { - #ifdef AUDIO_ENABLE - init_notes(); - PLAY_NOTE_ARRAY(start_up, false, 0); - #endif +void play_goodbye_tone() +{ + PLAY_NOTE_ARRAY(goodbye, false, 0); + _delay_ms(150); } + +#endif
\ No newline at end of file diff --git a/keyboard/preonic/preonic.c b/keyboard/preonic/preonic.c index f639f247a5..211f8d0296 100644 --- a/keyboard/preonic/preonic.c +++ b/keyboard/preonic/preonic.c @@ -38,4 +38,65 @@ void matrix_scan_kb(void) { void process_action_kb(keyrecord_t *record) { process_action_user(record); -}
\ No newline at end of file +} + +#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
\ No newline at end of file diff --git a/keyboard/preonic/preonic.h b/keyboard/preonic/preonic.h index 51ed9ba393..030acdadb4 100644 --- a/keyboard/preonic/preonic.h +++ b/keyboard/preonic/preonic.h @@ -10,6 +10,7 @@ #include "rgblight.h" #endif #include <stddef.h> +#include <avr/io.h> #ifdef MIDI_ENABLE #include <keymap_midi.h> #endif diff --git a/keyboard/preonic/preonic_music.hex b/keyboard/preonic/preonic_music.hex deleted file mode 100644 index 603693bffb..0000000000 --- a/keyboard/preonic/preonic_music.hex +++ /dev/null @@ -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
-:101E60008091F603882319F010923C020 |