diff options
Diffstat (limited to 'keyboards/atomic')
-rw-r--r-- | keyboards/atomic/atomic.c | 312 | ||||
-rw-r--r-- | keyboards/atomic/atomic.h | 22 | ||||
-rw-r--r-- | keyboards/atomic/config.h | 2 | ||||
-rw-r--r-- | keyboards/atomic/keymaps/default/compiled.hex | 1118 | ||||
-rw-r--r-- | keyboards/atomic/keymaps/pvc/compiled.hex | 1700 | ||||
-rw-r--r-- | keyboards/atomic/keymaps/pvc/config.h | 3 | ||||
-rw-r--r-- | keyboards/atomic/readme.md (renamed from keyboards/atomic/README.md) | 4 |
7 files changed, 8 insertions, 3153 deletions
diff --git a/keyboards/atomic/atomic.c b/keyboards/atomic/atomic.c index fa218a48f3..6f393315ee 100644 --- a/keyboards/atomic/atomic.c +++ b/keyboards/atomic/atomic.c @@ -1,26 +1,5 @@ #include "atomic.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 @@ -28,298 +7,9 @@ void matrix_init_kb(void) { MCUCR |= (1<<JTD); MCUCR |= (1<<JTD); -#ifdef BACKLIGHT_ENABLE - backlight_init_ports(); -#endif - // Turn status LED on DDRE |= (1<<6); PORTE |= (1<<6); 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 OCR1C -#define BREATHING_NO_HALT 0 -#define BREATHING_HALT_OFF 1 -#define BREATHING_HALT_ON 2 - -static uint8_t breath_intensity; -static uint8_t breath_speed; -static uint16_t breathing_index; -static uint8_t breathing_halt; - -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(); - breathing_defaults(); -} - -void backlight_set(uint8_t level) -{ - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); - - if ( level == 0 ) - { - // Turn off PWM control on PB7, revert to output low. - TCCR1A &= ~(_BV(COM1C1)); - - // Set the brightness to 0 - CHANNEL = 0x0; - } - else if ( level >= BACKLIGHT_LEVELS ) - { - // Turn on PWM control of PB7 - TCCR1A |= _BV(COM1C1); - - // Set the brightness to max - CHANNEL = 0xFFFF; - } - else - { - // Turn on PWM control of PB7 - TCCR1A |= _BV(COM1C1); - - // Set the brightness - CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); - } - breathing_intensity_default(); -} - - -void breathing_enable(void) -{ - if (get_backlight_level() == 0) - { - breathing_index = 0; - } - else - { - // Set breathing_index to be at the midpoint (brightest point) - breathing_index = 0x20 << breath_speed; - } - - breathing_halt = BREATHING_NO_HALT; - - // Enable breathing interrupt - TIMSK1 |= _BV(OCIE1A); -} - -void breathing_pulse(void) -{ - if (get_backlight_level() == 0) - { - breathing_index = 0; - } - else - { - // Set breathing_index to be at the midpoint + 1 (brightest point) - breathing_index = 0x21 << breath_speed; - } - - breathing_halt = BREATHING_HALT_ON; - - // Enable breathing interrupt - TIMSK1 |= _BV(OCIE1A); -} - -void breathing_disable(void) -{ - // Disable breathing interrupt - TIMSK1 &= ~_BV(OCIE1A); - backlight_set(get_backlight_level()); -} - -void breathing_self_disable(void) -{ - if (get_backlight_level() == 0) - { - breathing_halt = BREATHING_HALT_OFF; - } - else - { - breathing_halt = BREATHING_HALT_ON; - } - - //backlight_set(get_backlight_level()); -} - -void breathing_toggle(void) -{ - if (!is_breathing()) - { - if (get_backlight_level() == 0) - { - breathing_index = 0; - } - else - { - // Set breathing_index to be at the midpoint + 1 (brightest point) - breathing_index = 0x21 << breath_speed; - } - - breathing_halt = BREATHING_NO_HALT; - } - - // Toggle breathing interrupt - TIMSK1 ^= _BV(OCIE1A); - - // Restore backlight level - if (!is_breathing()) - { - backlight_set(get_backlight_level()); - } -} - -bool is_breathing(void) -{ - return (TIMSK1 && _BV(OCIE1A)); -} - -void breathing_intensity_default(void) -{ - //breath_intensity = (uint8_t)((uint16_t)100 * (uint16_t)get_backlight_level() / (uint16_t)BACKLIGHT_LEVELS); - breath_intensity = ((BACKLIGHT_LEVELS - get_backlight_level()) * ((BACKLIGHT_LEVELS + 1) / 2)); -} - -void breathing_intensity_set(uint8_t value) -{ - breath_intensity = value; -} - -void breathing_speed_default(void) -{ - breath_speed = 4; -} - -void breathing_speed_set(uint8_t value) -{ - bool is_breathing_now = is_breathing(); - uint8_t old_breath_speed = breath_speed; - - if (is_breathing_now) - { - // Disable breathing interrupt - TIMSK1 &= ~_BV(OCIE1A); - } - - breath_speed = value; - - if (is_breathing_now) - { - // Adjust index to account for new speed - breathing_index = (( (uint8_t)( (breathing_index) >> old_breath_speed ) ) & 0x3F) << breath_speed; - - // Enable breathing interrupt - TIMSK1 |= _BV(OCIE1A); - } - -} - -void breathing_speed_inc(uint8_t value) -{ - if ((uint16_t)(breath_speed - value) > 10 ) - { - breathing_speed_set(0); - } - else - { - breathing_speed_set(breath_speed - value); - } -} - -void breathing_speed_dec(uint8_t value) -{ - if ((uint16_t)(breath_speed + value) > 10 ) - { - breathing_speed_set(10); - } - else - { - breathing_speed_set(breath_speed + value); - } -} - -void breathing_defaults(void) -{ - breathing_intensity_default(); - breathing_speed_default(); - breathing_halt = BREATHING_NO_HALT; -} - -/* Breathing Sleep LED brighness(PWM On period) table - * (64[steps] * 4[duration]) / 64[PWM periods/s] = 4 second breath cycle - * - * http://www.wolframalpha.com/input/?i=%28sin%28+x%2F64*pi%29**8+*+255%2C+x%3D0+to+63 - * (0..63).each {|x| p ((sin(x/64.0*PI)**8)*255).to_i } - */ -static const uint8_t breathing_table[64] PROGMEM = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 4, 6, 10, - 15, 23, 32, 44, 58, 74, 93, 113, 135, 157, 179, 199, 218, 233, 245, 252, -255, 252, 245, 233, 218, 199, 179, 157, 135, 113, 93, 74, 58, 44, 32, 23, - 15, 10, 6, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -}; - -ISR(TIMER1_COMPA_vect) -{ - // CHANNEL = (pgm_read_byte(&breathing_table[ ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F ] )) * breath_intensity; - - - uint8_t local_index = ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F; - - if (((breathing_halt == BREATHING_HALT_ON) && (local_index == 0x20)) || ((breathing_halt == BREATHING_HALT_OFF) && (local_index == 0x3F))) - { - // Disable breathing interrupt - TIMSK1 &= ~_BV(OCIE1A); - } - - CHANNEL = (uint16_t)(((uint16_t)pgm_read_byte(&breathing_table[local_index]) * 257)) >> breath_intensity; - -} - - - -#endif
\ No newline at end of file +}
\ No newline at end of file diff --git a/keyboards/atomic/atomic.h b/keyboards/atomic/atomic.h index 901761f514..88e11fadff 100644 --- a/keyboards/atomic/atomic.h +++ b/keyboards/atomic/atomic.h @@ -24,26 +24,4 @@ { K40, K41, KC_NO, K43, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, K4E } \ } -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); - -void breathing_enable(void); -void breathing_pulse(void); -void breathing_disable(void); -void breathing_self_disable(void); -void breathing_toggle(void); -bool is_breathing(void); - - -void breathing_defaults(void); -void breathing_intensity_default(void); -void breathing_speed_default(void); -void breathing_speed_set(uint8_t value); -void breathing_speed_inc(uint8_t value); -void breathing_speed_dec(uint8_t value); - - #endif
\ No newline at end of file diff --git a/keyboards/atomic/config.h b/keyboards/atomic/config.h index bf9550e948..9c40f54e78 100644 --- a/keyboards/atomic/config.h +++ b/keyboards/atomic/config.h @@ -46,6 +46,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7, D3, D2, D1 } #define UNUSED_PINS +#define BACKLIGHT_PIN B7 + /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW diff --git a/keyboards/atomic/keymaps/default/compiled.hex b/keyboards/atomic/keymaps/default/compiled.hex deleted file mode 100644 index b9bb143ea8..0000000000 --- a/keyboards/atomic/keymaps/default/compiled.hex +++ /dev/null @@ -1,1118 +0,0 @@ -:100000000C942A030C946E030C946E030C946E03F0
-:100010000C946E030C946E030C946E030C946E039C
-:100020000C946E030C946E030C946A0D0C943C0EAD
-:100030000C94531B0C946E030C946E030C946E037F
-:100040000C946E030C94D6030C946E030C946E0304
-:100050000C946E030C94BB1B0C946E030C946E03F7
-:100060000C946E030C946E030C946E030C946E034C
-:100070000C946E030C946E030C946E030C946E033C
-:100080000C946E030C946E030C946E030C946E032C
-:100090000C946E030C946E030C946E030C946E031C
-:1000A0000C946E030C946E030C946E03A90ECB0E8D
-:1000B000B90FCB0EB90F100F330FB90F880F9B0F6D
-:1000C00085128512B412B412F31213136914691451
-:1000D0001E136914CE13CE1335143E146914631421
-:1000E000DB13DB13DB13DB13DB13DB13DB13DB13A0
-:1000F000DB13DB13DB13DB13DB13DB13DB13DB1390
-:10010000EB13F91300140714111400000000000091
-:100110000000000000010204060A0F17202C3A4AD2
-:100120005D71879DB3C7DAE9F5FCFFFCF5E9DAC735
-:10013000B39D87715D4A3A2C20170F0A060402010D
-:100140000000000000000000000035001E001F003D
-:100150002000210022002300240025002600270083
-:100160002D002E002A002A002B0014001A0008007F
-:10017000150017001C0018000C00120013002F00BF
-:10018000300031004C00290004001600070009006F
-:100190000A000B000D000E000F0033003400280091
-:1001A00028004B00E1001D001B000600190005009F
-:1001B00011001000360037003800E500E50052005D
-:1001C0004E000030E000E200E30004512C002C005F
-:1001D0000351E700E600E4000551500051004F00D4
-:1001E00035001E001F0020002100220023002400F3
-:1001F0002500260027002D002E002A002A002B00B3
-:1002000014001A00090013000A000D000F00180066
-:100210001C0033002F00300031004C002900040086
-:1002200015001600170007000B00110008000C0055
-:1002300012003400280028004B00E1001D001B00C4
-:100240000600190005000E001000360037003800C7
-:10025000E500E50052004E000030E000E200E3005F
-:1002600004512C002C000351E700E600E400055186
-:10027000500051004F0035001E001F0020002100DB
-:100280002200230024002500260027002D002E0038
-:100290002A002A002B0034003600370013001C000F
-:1002A00009000A00060015000F002F003000310081
-:1002B0004C00290004001200080018000C00070080
-:1002C0000B001700110016003800280028004B0012
-:1002D000E100330014000D000E001B0005001000AB
-:1002E0001A0019001D00E500E50052004E00003024
-:1002F000E000E200E30004512C002C000351E70071
-:10030000E600E4000551500051004F0001003A00A2
-:100310003B003C003D003E003F00400041004200E9
-:100320004300440045000100010001001E021F02BD
-:100330002002210222022302240225022602270291
-:10034000010001000100490001003A003B003C00AF
-:100350003D003E003F002D022E022F0230023102EE
-:100360000100010001000100400041004200430083
-:1003700044004500010001000100010001000100EE
-:100380000100010001000100010001000100010065
-:100390000100010001000100010001000100010055
-:1003A000010001003A003B003C003D003E003F00E0
-:1003B00040004100420043004400450001000100AC
-:1003C00001001E001F002000210022002300240045
-:1003D000250026002700010001000100490001005E
-:1003E0003A003B003C003D003E003F002D002E0047
-:1003F0002F00300031000100010001000100400029
-:10040000410042004300440045000100010001009A
-:1004100001000100010001000100010001000100D4
-:1004200001000100010001000100010001000100C4
-:10043000010001000100010053003A003B003C00B4
-:100440003D003E003F0040004100420043004400A8
-:100450004500010001004700680069006A006B0068
-:100460006C006D006E006F00700071007200730010
-:10047000480046003900F800F700F600F500FD00DE
-:10048000FF00AB00AA00A900AE00010001000100BE
-:10049000F900010001000052015202520100010066
-:1004A000010001000100010001000100F000FA005C
-:1004B00001000100010001000100F400F40001004E
-:1004C0000100010001000100F200F100F300280327
-:1004D0005400680065002000410074006F006D004A
-:1004E0006900630020004B006500790062006F0026
-:1004F00061007200640000002C034F007200740061
-:1005000068006F006C0069006E0065006100720099
-:1005100020004B006500790062006F0061007200EE
-:10052000640073000000040309040902540003017D
-:1005300000A0FA09040000010301010009211101D2
-:1005400000012240000705810308000A0904010098
-:100550000103010200092111010001224D000705DC
-:10056000820308000A0904020001030000000921B7
-:10057000110100012236000705830308000A120159
-:10058000100100000008EDFE6060010001020001A2
-:1005900005010980A101850216010026B7001A0194
-:1005A000002AB700751095018100C0050C0901A152
-:1005B000018503160100269C021A01002A9C02757F
-:1005C0001095018100C005010902A1010901A100E6
-:1005D00005091901290515002501950575018102F7
-:1005E0009501750381010501093009311581257FC8
-:1005F00095027508810609381581257F95017508D2
-:100600008106050C0A38021581257F950175088140
-:1006100006C0C005010906A101050719E029E71573
-:100620000025019508750181029501750881010574
-:100630000819012905950575019102950175039128
-:10064000010507190029FF150026FF00950675080A
-:100650008100C00011241FBECFEFDAE0DEBFCDBFA6
-:1006600004B603FE24C08091F0019091F101A091A5
-:10067000F201B091F3018730904BA740B04BB9F431
-:100680001092F0011092F1011092F2011092F30118
-:1006900014BE84B7877F84BF88E10FB6F894809337
-:1006A0006000109260000FBEE0E0F8E3099511E0F1
-:1006B000A0E0B1E0EEE7F5E402C005900D92A234AF
-:1006C000B107D9F711E0A2E4B1E001C01D92A03F4B
-:1006D000B107E1F70E94B40A0C94BD220C9400000B
-:1006E0000895089581E0089508950C9471030C9481
-:1006F00072030C9474030E94332123E030E0281B22
-:100700003109220F209346010895282F2F988091B8
-:100710008000211108C0877F8093800010928D0097
-:1007200010928C001BC0886080938000233018F0EA
-:100730008FEF9FEF0FC083E090E0821B9109880F3D
-:10074000991F2FEF3FEFA90102C0569547958A9553
-:10075000E2F7CA0190938D0080938C000C947B0388
-:100760000E947B0384E0809345011092420108952A
-:10077000279A2F988FEF9FEF9093870080938600A2
-:100780008AE08093800089E1809381000E949C2010
-:100790000C94B00385B7806885BF85B7806885BF36
-:1007A0000E94B8036E9A769A0C9470031F920F926F
-:1007B0000FB60F9211242F933F938F939F93EF9334
-:1007C000FF93E0914301F0914401CF010196909392
-:1007D0004401809343010090450102C0F695E795DE
-:1007E0000A94E2F7EF7380914201823019F4E0320B
-:1007F00051F404C0813039F4EF3329F480916F0053
-:100800008D7F80936F00F0E0E65FFE4FE49121E082
-:1008100031E0E29FC001E39F900D1124009046015A
-:1008200002C0969587950A94E2F790938D00809385
-:100830008C00FF91EF919F918F913F912F910F909D
-:100840000FBE0F901F90189561110DC0FC018281A1
-:10085000882331F085EE0E9429110E94F32003C005
-:1008600085EE0E94F11180E090E0089581E0089506
-:100870000C94360408950F931F93CF93DF938C014C
-:10088000FC01C081D181CE010E94CD19BE010E9420
-:100890006C07EC01B8010E943804882309F470C188
-:1008A000F8018281882309F45BC080915201811193
-:1008B0001FC0C431F0E7DF0709F00AC10E943A0403
-:1008C00081E0809352010E94851B90935101809397
-:1008D00050011092490110924B0110924A0110925E
-:1008E0004D0110924C0110924F0110924E0148C1DF
-:1008F00080915001909151010E94911B883C91057B
-:1009000070F480914901E82FF0E0EE0FFF1FE65BE5
-:10091000FE4FD183C0838F5F8093490131C1C431C1
-:1009200020E7D20708F024C1C23080E7D80710F5CD
-:10093000C11590E7D90709F0DAC0F8018281882350
-:1009400009F4BFC00E94D414FFEF24E38CE0F150FF
-:1009500020408040E1F700C000000E94E01B10C171
-:10096000C431F0E7DF0708F0CFC0C23020E7D2077C
-:1009700008F49BC0F8018281882309F4A2C00E9478
-:100980003A1C811102C00E941B1C0E944D1C90E069
-:100990009093E1018093E001C230F0E7DF0721F49A
-:1009A0008091E00181607AC0C33020E7D20721F452
-:1009B0008091E001826072C0C43080E7D80721F4E2
-:1009C0008091E00184606AC0C53090E7D90719F4CE
-:1009D0008091E00127C0C630E0E7DE0721F4809176
-:1009E000E00180615BC0C730F0E7DF0721F4809150
-:1009F000E001806253C0C83020E7D20721F4809123
-:100A0000E00180644BC0C93080E7D80721F48091B1
-:100A1000E001806843C0CA3090E7D90729F480918B
-:100A2000E001846088603AC0CB30E0E7DE0721F463
-:100A30008091E0018E7F32C0CC30F0E7DF0721F4F7
-:100A40008091E0018D7F2AC0CD3020E7D20721F4CC
-:100A50008091E0018B7F22C0CE3080E7D80719F467
-:100A60008091E0011AC08091E001CF3090E7D90772
-:100A700011F48F7E13C0C031E0E7DE0711F48F7DE3
-:100A80000DC0C131F0E7DF0711F48F7B07C0C23121
-:100A9000D04711F48F7702C08B7F877F8093E0016E
-:100AA0008091E0010E94511C6BC0C11580E7D807FE
-:100AB00041F0C130D047F1F081E08093470180934D
-:100AC0004801C801DF91CF911F910F910C947703DA
-:100AD000C43120E7D20708F04BC0C23080E7D80706
-:100AE00008F048CFC11590E7D90709F42BCFC130E2
-:100AF000D04711F7F8018281882319F38091CF0143
-:100B000081608093CF013CC0C333E0E7DE07A1F4EE
-:100B1000F8018281882321F01092470182E017C0FA
-:100B200080914701811106C086E20E94291186E268
-:100B30000E94F11182E019C0C433D04709F0BCCF44
-:100B4000F8018281882331F01092480180E20E94EE
-:100B5000401216C080914801811106C087E20E94B0
-:100B6000291187E20E94F11180E20E94471208C019
-:100B7000C333F0E7DF0761F2C433D04709F39CCFFA
-:100B800080E0DF91CF911F910F9108950C94CA03DB
-:100B90000C9475032FE0729FF00111243BE4839FB6
-:100BA000E00DF11D1124E60FF11DEE0FFF1FE65BB6
-:100BB000FE4F859194910E947E07811540E5940730
-:100BC00008F047C0811520E4920708F013C1883E61
-:100BD000910520F5803E910508F07CC1883A910589
-:100BE00078F4853A910508F0A5C08130910509F4A3
-:100BF00071C108F42EC18430910508F06BC129C180
-:100C00008B3B910508F4A1C0803C910508F421C1FB
-:100C1000FC01EE0FFF1FE653F040E6C0811530E205
-:100C2000930758F4811541E0940708F053C1803FC1
-:100C3000910508F40EC190650895811520E392078F
-:100C400008F0D5C0FC01FF70EE0FFF1FE65BFE4F02
-:100C5000CBC0811535E5930708F043C0811544E505
-:100C6000940708F0DEC0811522E5920708F581158A
-:100C700031E5930708F0C1C0482F437021E030E010
-:100C800002C0220F331F4A95E2F73C68AC0164E0D2
-:100C9000569547956A95E1F74370342B8F7086958A
-:100CA000869540E2849FC0011124822B932B0895E6
-:100CB000282F26952695AC0143705527811593451D
-:100CC00008F0A0C080E2289F9001112481E090E00C
-:100CD00002C0880F991F4A95E2F7822B932B9C68DC
-:100CE00008958F3240E7940790F48F3120E7920700
-:100CF00008F0A2C0811536E5930708F497C09C015F
-:100D000030562115304108F0A4C09F7093C0803345
-:100D100020E7920709F497C008F492C0813340E7B6
-:100D2000940709F493C08233904709F092C080E0A1
-:100D300093ED0895853A910509F48EC0863A9105A0
-:100D400009F08DC082E890E40895883A910509F48D
-:100D500089C0893A910509F488C08A3A910509F455
-:100D600087C08B3A910509F486C08C3A910509F445
-:100D700085C08D3A910509F484C0803B910509F442
-:100D800083C08E3A910509F482C08F3A910509F427
-:100D900081C0813B910509F480C0823B910509F433
-:100DA0007FC0833B910509F47EC0843B910509F423
-:100DB0007DC0853B910509F47CC0863B910509F413
-:100DC0007BC0873B910509F47AC0883B910509F403
-:100DD00079C0893B910509F478C08A3B910509F4F3
-:100DE00077C080E094E408958591949108959927BF
-:100DF000906C08959F70906A0895982F8827816F4E
-:100E0000906A089590E2299F9001112481E090E07A
-:100E100002C0880F991F4A95E2F7822B932B9A689C
-:100E20000895982F8827846F906A08958F71992765
-:100E3000982F8827906208958F519047946D089558
-:100E400080E091ED089580E090ED089580E092EDCE
-:100E5000089580E090E0089581E890E4089583E8A3
-:100E600090E4089582EE94E4089589EE94E4089560
-:100E70008AEE94E4089585EB94E4089586EB94E477
-:100E8000089587EB94E408958CEC94E408958DEC38
-:100E900094E4089583E895E408958AE895E4089534
-:100EA00082E995E4089584E995E4089581E296E461
-:100EB000089583E296E4089584E296E4089585E235
-:100EC00096E4089586E296E4089587E296E408950C
-:100ED0008AE296E4089508959FE0799FF001112435
-:100EE0009BE4899FE00DF11D1124E60FF11DEE0F2B
-:100EF000FF1FE65BFE4F859194910895823891051E
-:100F000049F1B0F48133910509F458C048F48932AD
-:100F1000910509F44EC08A32910509F454C0089530
-:100F20008533910509F440C08933910599F00895FE
-:100F3000833E910529F138F4803E910591F0823E7F
-:100F40009105A1F00895863E9105F9F0873E91053F
-:100F500031F108952091E00120FD3AC021FD38C013
-:100F600008958091E00180FD35C032C08091E0019C
-:100F700082FF32C08091E00184FD30C083EE39C031
-:100F80008091E00182FD28C0F5CF8091E00183FFD0
-:100F900027C08091E00184FD21C087EE2AC08091A6
-:100FA000E00183FD1DC0F5CF8091E00185FD1AC0F1
-:100FB0001BC08091E00185FD17C014C08091E00145
-:100FC00086FD14C015C08091E00186FD11C00EC0E1
-:100FD00080EE0FC089E30DC082EE0BC080E009C037
-:100FE00086EE07C089E205C085E303C08AE201C03E
-:100FF00081E390E008950C947903E82FF0E0ED5D33
-:10100000FE4F8081E82FEF70F0E082958F7021E035
-:1010100030E0A90102C0440F551F8A95E2F740A3B2
-:1010200008950F931F93CF93DF93C4E0D0E001E0C6
-:1010300010E0FE01ED5DFE4F8081E82FEF70F0E0E3
-:1010400021A182958F70A80102C0440F551F8A9577
-:10105000E2F7CA01822B81A38C2F0E94FD07219702
-:1010600040F78EE090E061E070E0FC01EC5EFE4F46
-:101070002081E22FEF70F0E042A122952F70DB017A
-:1010800002C0AA0FBB1F2A95E2F79D01242B22A3C1
-:10109000019758F7DF91CF911F910F9108950F930A
-:1010A0001F93CF93DF9385B7806885BF85B780682E
-:1010B00085BFC4E0D0E001E010E0FE01ED5DFE4F31
-:1010C0008081E82FEF70F0E021A182958F70A80158
-:1010D00002C0440F551F8A95E2F7CA01822B81A3F3
-:1010E0008C2F0E94FD07219740F78EE090E061E091
-:1010F00070E0FC01EC5EFE4F2081E22FEF70F0E02B
-:1011000042A122952F70DB0102C0AA0FBB1F2A95B6
-:10111000E2F79D01242B22A3019758F7DF91CF918D
-:101120001F910F910C94C605EF92FF920F931F939E
-:10113000CF93DF930DE511E0C4E0EE24E394F12CAE
-:10114000D5E08C2F0E94FD078EE090E040E050E05B
-:10115000FC01EC5EFE4F6081E62FEF70F0E020A115
-:1011600030E062956F7002C0359527956A95E2F779
-:1011700020FD09C09701082E02C0220F331F0A94D8
-:10118000E2F7422B532B019718F7F80192918291C5
-:101190008F018417950721F051834083D09300017C
-:1011A0008C2F0E94FD07C15060F68091000187FDE1
-:1011B0001FC08150809300018F3F39F08FE99FE07D
-:1011C0000197F1F700C0000013C080E090E0FC013F
-:1011D000E35AFE4FDC01AD5ABE4F18962D913C915B
-:1011E0001997318720870297863FEFEF9E0779F79F
-:1011F0000E94C80581E0DF91CF911F910F91FF9070
-:10120000EF900895E82FF0E0EE0FFF1FE35AFE4F36
-:1012100080819181089508950F931F93CF9307E6DE
-:1012200011E0C0E0F801929182918F010E94FE1AB4
-:10123000C80FF1E00D351F07A9F78C2FCF911F9133
-:101240000F91089580916F010895CF93DF9300D09F
-:101250001F92CDB7DEB79C018091E601843019F56D
-:1012600093E099833B832A839093E9008FEF9091D9
-:10127000E800815095FD06C095ED9A95F1F70000C4
-:101280008111F5CF8091E80085FF0DC040E050E06E
-:1012900063E070E0CE0101960E945A0B8091E80055
-:1012A0008E778093E8000F900F900F90DF91CF9191
-:1012B0000895CF93DF9300D01F92CDB7DEB7209172
-:1012C000E601243021F522E029839B838A8383E091
-:1012D0008093E9008FEF9091E800815095FD06C062
-:1012E00095ED9A95F1F700008111F5CF8091E80016
-:1012F00085FF0DC040E050E063E070E0CE01019654
-:101300000E945A0B8091E8008E778093E8000F903E
-:101310000F900F90DF91CF9108952091E601243036
-:10132000F1F422E02093E9002FEF3091E800215002
-:1013300035FD06C035ED3A95F1F700002111F5CFE6
-:101340002091E80025FF0BC040E050E065E070E030
-:101350000E945A0B8091E8008E778093E8000895F0
-:10136000CF93DF932091E601243039F521E02093DB
-:10137000E9002FEF3091E800215035FD06C035ED32
-:101380003A95F1F700002111F5CF2091E80025FFF3
-:1013900014C0EC0140E050E068E070E00E945A0B9D
-:1013A0008091E8008E778093E80088E0FE01A7E650
-:1013B000B1E001900D928A95E1F7DF91CF91089508
-:1013C0008091E501811109C00E94EF0C0E944C0D33
-:1013D0008091E20084608093E20008951092E5011C
-:1013E0000895089508950C94481B42E061EC81E053
-:1013F0000E94690C42E061EC82E00E94690C42E0CC
-:1014000061EC83E00C94690C8091E801833009F46D
-:1014100053C030F4813071F0823009F48CC00895EB
-:101420008A3009F478C08B3009F45EC0893009F045
-:101430009AC020C08091E701813A09F094C0809160
-:10144000E800877F8093E8008091EB019091EC01A8
-:10145000892B21F468E087E691E003C060E080E03A
-:1014600090E070E00E94A50B8091E8008B7780935C
-:10147000E80008958091E701813209F074C08091FD
-:10148000EB019091EC01892B09F06DC08091E8008F
-:10149000877F8093E8008091E80082FD05C08091FD
-:1014A000E6018111F8CF5FC08091F10080936F0158
-:1014B0008091E8008B7753C08091E701813A09F071
-:1014C00052C08091EB019091EC01892B09F04BC047
-:1014D0008091E800877F8093E8008091E80080FF9A
-:1014E000FCCF80910B0136C08091E7018132D9F5A4
-:1014F0008091EB019091EC01892BA9F58091E80096
-:10150000877F8093E8000E949E0C8091E901809380
-:101510000B010C94D4148091E701813221F5809164
-:10152000E800877F8093E8000E949E0C8091EA018A
-:101530008093700108958091E701813AA1F4809130
-:10154000E800877F8093E8008091E80080FFFCCF6F
-:10155000809170018093F1008091E8008E778093F4
-:10156000E8000C949E0C089584B7877F84BF88E1BF
-:101570000FB6F89480936000109260000FBE80E870
-:1015800080936100109261000E9441100E94EF0C54
-:101590000E944C0D8091E20084608093E200789478
-:1015A0000E94D20F0E94431081E091E00E94ED0F53
-:1015B0008091E601853069F40E940A1B8091E40164
-:1015C0008823B1F30E94371B882391F30E94440BB8
-:1015D000EFCF0E944B10ECCF292F3327233031055A
-:1015E000C9F064F42130310581F02230310509F071
-:1015F00043C084E590E02AE235E042C02132310563
-:10160000F1F02232310541F137C082E190E02EE75E
-:1016100035E036C099278130910541F0823091053F
-:1016200041F0892B49F5E6E2F5E005C0E8EFF4E08A
-:1016300002C0EEECF4E0849190E09F0121C06330A1
-:10164000D8F4E62FF0E0EE0FFF1FEF5CFE4F208195
-:10165000318189E090E014C0633070F470E0FB01E8
-:10166000EE0FFF1FE55DFE4F20813181FB01E85D3C
-:10167000FE4F808190E004C080E090E020E030E008
-:10168000FA0131832083089580E189BD82E189BD1B
-:1016900009B400FEFDCF8091D8008F7D8093D800E3
-:1016A0008091E00082608093E0008091E00081FD05
-:1016B000FCCF0895CF92DF92EF92FF920F931F938A
-:1016C000CF93DF93EC018B016A010E94BD0C811165
-:1016D00033C0C114D10439F0F60180819181081B17
-:1016E000190BC80FD91FE12CF12C0115110519F1A7
-:1016F0008091E80085FD16C08091E8008E77809388
-:10170000E800C114D10449F0F60180819181E80E0E
-:10171000F91EF182E08285E00FC00E94BD0C882393
-:1017200021F30AC089918093F10001501109FFEF64
-:10173000EF1AFF0ADACF80E0DF91CF911F910F916E
-:10174000FF90EF90DF90CF9008952091ED013091C0
-:10175000EE012617370748F06115710539F420911D
-:10176000E8002E772093E80001C0B90140E0611540
-:101770007105A9F12091E601222309F443C0253027
-:1017800009F442C02091E80023FD40C02091E80008
-:1017900022FD32C02091E80020FFE9CF4091F30004
-:1017A0002091F20030E0342BFC01CF01611571056E
-:1017B00059F02830310540F481918093F100615057
-:1017C00071092F5F3F4FF1CF41E02830310509F01B
-:1017D00040E02091E8002E772093E800C8CF411127
-:1017E000C9CF0AC08091E601882361F0853061F09D
-:1017F0008091E80083FD0AC08091E80082FFF2CF6B
-:1018000080E0089582E0089583E0089581E00895DE
-:101810002091ED013091EE012617370748F0611550
-:10182000710539F42091E8002E772093E80001C07B
-:10183000B901FC0120E06115710591F18091E6018B
-:10184000882309F440C0853009F43FC08091E80046
-:1018500083FD3DC08091E80082FD2FC08091E800AB
-:1018600080FFE9CF2091F3008091F20090E0922B6D
-:101870006115710559F08830910540F42491209349
-:10188000F1003196615071090196F2CF21E008977D
-:1018900009F020E08091E8008E778093E800CBCFBC
-:1018A0002111CCCF0AC08091E601882361F08530F8
-:1018B00061F08091E80083FD0AC08091E80082FF1A
-:1018C000F2CF80E0089582E0089583E0089581E0FA
-:1018D0000895982F973058F59093E900981739F0AC
-:1018E0007091EC002091ED005091F00003C0242F86
-:1018F000762F50E021FF19C03091EB003E7F3093EE
-:10190000EB003091ED003D7F3093ED003091EB0026
-:1019100031603093EB007093EC002093ED00509316
-:10192000F0002091EE0027FF07C09F5FD3CF8F709C
-:101930008093E90081E0089580E008958091E701B7
-:1019400087FF11C08091E80082FD05C08091E6010B
-:101950008111F8CF11C08091E8008B770BC0809186
-:10196000E601882349F08091E80080FFF8CF80915C
-:10197000E8008E778093E80008952091E40030918C
-:10198000E50095E64091EC00842F817040FF22C075
-:101990008091E80080FD1CC08091E601882391F0D1
-:1019A000853091F08091EB0085FD10C04091E400FE
-:1019B0005091E5004217530729F39A01915011F70E
-:1019C00084E0089582E0089583E0089581E0089519
-:1019D00080E008954091E80042FFDECF08950E9424
-:1019E0005D0D0E94650DE0EEF0E0808181608083F6
-:1019F000E8EDF0E080818F77808319BCA7EDB0E03F
-:101A00008C918E7F8C9380818F7E80831092E501F4
-:101A100008950F931F93CF93DF930E945D0D0E9453
-:101A2000650DC8EDD0E088818F77888388818068D4
-:101A3000888388818F7D888319BC1092E60110927B
-:101A4000E2011092E4011092E30100EE10E0F801CF
-:101A500080818B7F808388818160888342E060E021
-:101A600080E00E94690CE1EEF0E080818E7F80834F
-:101A7000E2EEF0E0808181608083808188608083F5
-:101A8000F80180818E7F8083888180618883DF91E7
-:101A9000CF911F910F910895E8EDF0E080818F7E46
-:101AA0008083E7EDF0E080818160808384E082BF05
-:101AB00081E08093E5010C94090DE8EDF0E0808170
-:101AC0008E7F80831092E20008951092DA001092C7
-:101AD000E10008951F920F920FB60F9211242F93D9
-:101AE0003F934F935F936F937F938F939F93AF93A6
-:101AF000BF93EF93FF938091E10082FF0BC0809131
-:101B0000E20082FF07C08091E1008B7F8093E100BB
-:101B10000E94D10F8091DA0080FF1FC08091D80011
-:101B200080FF1BC08091DA008E7F8093DA00809165
-:101B3000D90080FF0DC080E189BD82E189BD09B473
-:101B400000FEFDCF81E08093E6010E94E00905C020
-:101B500019BC1092E6010E94EE098091E10080FF1D
-:101B600019C08091E20080FF15C08091E2008E7F55
-:101B70008093E2008091E20080618093E200809196
-:101B8000D80080628093D80019BC85E08093E6017C
-:101B90000E94F2098091E10084FF30C08091E20050
-:101BA00084FF2CC080E189BD82E189BD09B400FEBB
-:101BB000FDCF8091D8008F7D8093D8008091E10087
-:101BC0008F7E8093E1008091E2008F7E8093E2001F
-:101BD0008091E20081608093E2008091E20188239D
-:101BE00011F084E007C08091E30087FD02C081E02E
-:101BF00001C083E08093E6010E94F3098091E10037
-:101C000083FF29C08091E20083FF25C08091E1001D
-:101C1000877F8093E10082E08093E6011092E201E9
-:101C20008091E1008E7F8093E1008091E2008E7FC1
-:101C30008093E2008091E20080618093E20042E0C4
-:101C400060E080E00E94690C8091F00088608093E1
-:101C5000F0000E94F109FF91EF91BF91AF919F9128
-:101C60008F917F916F915F914F913F912F910F9045
-:101C70000FBE0F901F9018951F920F920FB60F92E4
-:101C800011242F933F934F935F936F937F938F9381
-:101C90009F93AF93BF93CF93DF93EF93FF93C09145
-:101CA000E900CF708091EC00D82FD17080FDD0E892
-:101CB0001092E9008091F000877F8093F000789483
-:101CC0000E94800E1092E9008091F000886080935D
-:101CD000F000CD2BCF70C093E900FF91EF91DF9121
-:101CE000CF91BF91AF919F918F917F916F915F91B4
-:101CF0004F913F912F910F900FBE0F901F9018950D
-:101D00001F93CF93DF93CDB7DEB7AA970FB6F894A2
-:101D1000DEBF0FBECDBFE7EEF1E088E08E0F909101
-:101D2000F10091938E13FBCF0E94040A8091E8008A
-:101D300083FF1FC18091E7019091E801492F50E096
-:101D40004A30510508F015C1FA01EA5AFF4F0C94C8
-:101D50006D22803881F0823809F00BC18091EB014F
-:101D60008F708093E9008091EB0085FB882780F9D4
-:101D70001092E90006C08091E3019091E401911175
-:101D800082609091E800977F9093E8008093F10043
-:101D90001092F100C8C0282F2D7F09F0EAC08823D7
-:101DA00019F0823061F0E5C08091E901813009F0DD
-:101DB000E0C0933009F080E08093E4012BC0809173
-:101DC000E901811127C08091EB018F7009F4D1C026
-:101DD0008093E9002091EB0020FF1CC0933021F498
-:101DE0008091EB00806214C09091EB009061909321
-:101DF000EB0021E030E0A90102C0440F551F8A9595
-:101E0000E2F74093EA001092EA008091EB008860CC
-:101E10008093EB001092E9008091E800877F86C0F4
-:101E20008111A7C01091E9011F778091E3008078AC
-:101E3000812B8093E3008091E800877F8093E80006
-:101E40000E949E0C8091E80080FFFCCF8091E3000F
-:101E500080688093E300111102C082E001C083E03A
-:101E60008093E60186C08058823008F082C080915D
-:101E7000E9019091EA018C3D53E0950779F583E003
-:101E80008A838AE289834FB7F894DE01139620E0B3
-:101E90003EE051E2E32FF0E050935700E49120FF41
-:101EA00003C0E295EF703F5FEF708E2F90E0EA3055
-:101EB00010F0C79601C0C0968D939D932F5F24317B
-:101EC00049F74FBF8091E800877F8093E8006AE27E
-:101ED00070E0CE0101960E94A50B14C0AE014F5FC9
-:101EE0005F4F6091EB010E94EC0ABC01009709F47E
-:101EF00040C09091E800977F9093E80089819A8193
-:101F00000E94080C8091E8008B778093E80031C034
-:101F1000803879F58091E800877F8093E800809190
-:101F2000E2018093F1008091E8008E778093E800D1
-:101F30000E949E0C1EC081111CC09091E90192303C
-:101F4000C0F48091E800877F8093E8009093E201DD
-:101F50000E949E0C8091E201811106C08091E300F5
-:101F600087FD02C081E001C084E08093E6010E9409
-:101F7000F5098091E80083FF0AC08091E800877F1F
-:101F80008093E8008091EB0080628093EB00AA963A
-:101F90000FB6F894DEBF0FBECDBFDF91CF911F917A
-:101FA00008950895CF938091E6018823A1F0C09110
-:101FB000E900CF709091EC00892F817090FD80E84E
-:101FC000C82B1092E9008091E80083FD0E94800EEA
-:101FD000CF70C093E900CF910895909376018093DC
-:101FE00075010895E0917501F0917601309721F027
-:101FF0000190F081E02D099480E00895E091750151
-:10200000F0917601309721F00280F381E02D099460
-:102010000895E0917501F0917601309721F00480E8
-:10202000F581E02D09940895209173013091740198
-:102030008217930771F09093740180937301E0917C
-:102040007501F0917601309721F00680F781E02D3F
-:1020500009940895209171013091720182179307BC
-:1020600071F09093720180937101E0917501F0918C
-:102070007601309721F00084F185E02D09940895D0
-:1020800008950C9440100E947C1B0E944F080E94EF
-:10209000021C0C949C205F926F927F928F929F9271
-:1020A000AF92BF92CF92DF92EF92FF920F931F9366
-:1020B000CF93DF9300D000D01F92CDB7DEB70E9440
-:1020C000940892E8C92E91E0D92E04E010E0AA24E9
-:1020D000A394B12C502E802F0E9402094C01F601CE
-:1020E000729062906F016826792661147104A1F4E0
-:1020F0000150110978F78FEF89838A831B820E9430
-:10210000851B8160782F9D838C8349815A816B81E7
-:102110008D810E94FB1038C08091CF0181FD0E940B
-:102120000B092EE030E07501022E02C0EE0CFF1C00
-:102130000A94E2F7C70186219721892B09F12983A7
-:102140005A828E209F2091E0892809F490E09B8399
-:102150000E94851B8160782F9D838C8349815A81E1
-:102160006B818D810E94FB10000F111FF801E85850
-:10217000FE4F80819181E826F926F182E08204C039
-:102180002150310980F6B4CF0E94D91D10917701FA
-:102190000E94F20F1817D1F00E94F20F809377017E
-:1021A0000F900F900F900F900F90DF91CF911F9194
-:1021B0000F91FF90EF90DF90CF90BF90AF909F90E6
-:1021C0008F907F906F905F900C94FB070F900F9013
-:1021D0000F900F900F90DF91CF911F910F91FF9073
-:1021E000EF90DF90CF90BF90AF909F908F907F90B7
-:1021F0006F905F900895CF93DF93CDB7DEB72B97A5
-:102200000FB6F894DEBF0FBECDBF4F8358876987E6
-:102210007A878B87DE01119686E0FD0111928A95FF
-:10222000E9F785E0FE01379601900D928A95E1F776
-:1022300049815A816B817C818D819E810E947217B8
-:102240002B960FB6F894DEBF0FBECDBFDF91CF91B6
-:102250000895CF93882309F4C2C0C82F823859F457
-:102260000E94F20F81FDBBC089E30E944C1A0E94BC
-:10227000CF1A89E30CC0833879F40E94F20F80FDF5
-:10228000AEC083E50E944C1A0E94CF1A83E50E94DB
-:10229000691ACF910C94CF1A843859F40E94F20F26
-:1022A00082FD9DC087E40E944C1A0E94CF1A87E4E9
-:1022B000EECF8CEF8C0F813A48F48C2F0E940420D3
-:1022C00081118DC08C2F0E944C1AE3CF80E28C0FBD
-:1022D000883048F4C77081E001C0880FCA95EAF7DA
-:1022E0000E94881AD6CF8BE58C0F833078F4C53ADC
-:1022F00029F0C63A31F083E890E005C081E890E02B
-:1023000002C082E890E0CF910C94141088E58C0F05
-:10231000833108F064C0C83A39F1C93A41F1CA3A88
-:1023200049F1CB3A51F1CC3A59F1CD3A61F1C03B88
-:1023300069F1CE3A71F1CF3A79F1C13B81F1C23BFB
-:1023400089F1C33B91F1C43B99F1C53BA1F1C63B77
-:10235000A9F1C73BB1F1C83BB9F1C93BC1F1CA3BD7
-:10236000C9F180E090E038C082EE90E035C089EE9F
-:1023700090E032C08AEE90E02FC085EB90E02CC058
-:1023800086EB90E029C087EB90E026C08CEC90E0D3
-:1023900023C08DEC90E020C083E891E01DC08AE866
-:1023A00091E01AC082E991E017C084E991E014C07D
-:1023B00081E292E011C083E292E00EC084E292E0FA
-:1023C0000BC085E292E008C086E292E005C087E299
-:1023D00092E002C08AE292E0CF910C942A10CF9151
-:1023E0000895882309F44BC0823859F40 |