From 3f0289e66678af8c2d1f001ccb9cb34ccfba7c5c Mon Sep 17 00:00:00 2001 From: tmk Date: Wed, 14 Dec 2011 12:13:32 +0900 Subject: [PATCH] Added protocol support for Macintosh keyboard M0110. --- m0110.c | 304 +++++++++++++++++++++++++++++++++++++++ m0110.h | 73 ++++++++++ m0110_usb/Makefile | 52 +++++++ m0110_usb/README | 55 +++++++ m0110_usb/config.h | 62 ++++++++ m0110_usb/doc/m0110.jpg | Bin 0 -> 49360 bytes m0110_usb/doc/teensy.jpg | Bin 0 -> 50081 bytes m0110_usb/keymap.c | 118 +++++++++++++++ m0110_usb/led.c | 24 ++++ m0110_usb/matrix.c | 193 +++++++++++++++++++++++++ 10 files changed, 881 insertions(+) create mode 100644 m0110.c create mode 100644 m0110.h create mode 100644 m0110_usb/Makefile create mode 100644 m0110_usb/README create mode 100644 m0110_usb/config.h create mode 100755 m0110_usb/doc/m0110.jpg create mode 100755 m0110_usb/doc/teensy.jpg create mode 100644 m0110_usb/keymap.c create mode 100644 m0110_usb/led.c create mode 100644 m0110_usb/matrix.c diff --git a/m0110.c b/m0110.c new file mode 100644 index 00000000..725675ed --- /dev/null +++ b/m0110.c @@ -0,0 +1,304 @@ +/* +Copyright 2011 Jun WAKO + +This software is licensed with a Modified BSD License. +All of this is supposed to be Free Software, Open Source, DFSG-free, +GPL-compatible, and OK to use in both free and proprietary applications. +Additions and corrections to this file are welcome. + + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +* Neither the name of the copyright holders nor the names of + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +*/ + +#include +#include +#include +#include +#include "m0110.h" +#include "debug.h" + + +static inline void clock_lo(void); +static inline void clock_hi(void); +static inline bool clock_in(void); +static inline void data_lo(void); +static inline void data_hi(void); +static inline bool data_in(void); +static inline uint16_t wait_clock_lo(uint16_t us); +static inline uint16_t wait_clock_hi(uint16_t us); +static inline uint16_t wait_data_lo(uint16_t us); +static inline uint16_t wait_data_hi(uint16_t us); +static inline void idle(void); +static inline void request(void); + + +/* +Primitive M0110 Library for AVR +============================== + + +Signaling +--------- +CLOCK is always from KEYBOARD. DATA are sent with MSB first. + +1) IDLE: both line is high. + CLOCK ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + DATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +2) KEYBOARD->HOST: HOST reads bit on rising edge. + CLOCK ~~~~~~~~~~~~|__|~~~|__|~~~|__|~~~|__|~~~|__|~~~|__|~~~|__|~~~|__|~~~~~~~~~~~ + DATA ~~~~~~~~~~~~X777777X666666X555555X444444X333333X222222X111111X000000X~~~~~~~ + <--> 160us(clock low) + <---> 180us(clock high) + +3) HOST->KEYBOARD: HOST asserts bit on falling edge. + CLOCK ~~~~~~~~~~~~|__|~~~|__|~~~|__|~~~|__|~~~|__|~~~|__|~~~|__|~~~|__|~~~~~~~~~~~ + DATA ~~~~~~|_____X777777X666666X555555X444444X333333X222222X111111X000000X~~~~~~~ + <----> 840us(request to send by host) <-> 80us(hold DATA) + <--> 180us(clock low) + <---> 220us(clock high) + + +Protocol +-------- +COMMAND: + Inquiry 0x10 get key event + Instant 0x12 get key event + Model 0x14 get model number(M0110 responds with 0x09) + bit 7 1 if another device connected(used when keypad exists?) + bit4-6 next device model number + bit1-3 keyboard model number + bit 0 always 1 + Test 0x16 test(ACK:0x7D/NAK:0x77) + +KEY EVENT: + bit 7 key state(0:press 1:release) + bit 6-1 scan code + bit 0 always 1 + To get scan code, use ((bits&(1<<7)) | ((bits&7F))>>1). + +SCAN CODE: + M0110A + ,---------------------------------------------------------. + | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| + |---------------------------------------------------------| + |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| + |---------------------------------------------------------| + |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Return| + |---------------------------------------------------------| + |Shift | Z| X| C| V| B| N| M| ,| ,| /| | + `---------------------------------------------------------' + |Opt|Mac | Space |Enter|Opt| + `------------------------------------------------' + ,---------------------------------------------------------. + | 32| 12| 13| 14| 15| 17| 16| 1A| 1C| 19| 1D| 1B| 18| 33| + |---------------------------------------------------------| + | 30| 0C| 0D| 0E| 0F| 10| 11| 20| 22| 1F| 23| 21| 1E| 2A| + |---------------------------------------------------------| + | 39| 00| 01| 02| 03| 05| 04| 26| 28| 25| 29| 27| 24| + |---------------------------------------------------------| + | 38| 06| 07| 08| 09| 0B| 2D| 2E| 2B| 2F| 2C| 38| + `---------------------------------------------------------' + | 3A| 37| 31 | 34| 3A| + `------------------------------------------------' + + +References +---------- +Protocol: + http://www.mac.linux-m68k.org/devel/plushw.php +Connector: + http://www.kbdbabel.org/conn/kbd_connector_macplus.png +Signaling: + http://www.kbdbabel.org/signaling/kbd_signaling_mac.png + http://typematic.blog.shinobi.jp/Entry/14/ +Scan Codes: + http://m0115.web.fc2.com/m0110.jpg + http://m0115.web.fc2.com/m0110a.jpg +*/ + + +#define WAIT(stat, us, err) do { \ + if (!wait_##stat(us)) { \ + m0110_error = err; \ + goto ERROR; \ + } \ +} while (0) + + +uint8_t m0110_error = 0; + + +void m0110_init(void) +{ + uint8_t data; + idle(); + _delay_ms(255); + + m0110_send(M0110_MODLE); + data = m0110_recv(); + print("m0110_init model: "); phex(data); print("\n"); + + m0110_send(M0110_TEST); + data = m0110_recv(); + print("m0110_init test: "); phex(data); print("\n"); +} + +uint8_t m0110_send(uint8_t data) +{ + m0110_error = 0; + + request(); + WAIT(clock_lo, 1000, 0); + for (uint8_t bit = 0x80; bit; bit >>= 1) { + WAIT(clock_lo, 250, 3); + _delay_us(15); + if (data&bit) { + data_hi(); + } else { + data_lo(); + } + WAIT(clock_hi, 200, 4); + } + _delay_us(100); // hold last bit for 80us + idle(); + return 1; +ERROR: + if (m0110_error) { + print("m0110_send err: "); phex(m0110_error); print("\n"); + } + idle(); + return 0; +} + +uint8_t m0110_recv(void) +{ + uint8_t data = 0; + m0110_error = 0; + + WAIT(clock_lo, -1, 0); // need 250ms? insted 0xffff(16bit max)us + for (uint8_t i = 0; i < 8; i++) { + data <<= 1; + WAIT(clock_lo, 200, 2); + WAIT(clock_hi, 200, 3); + if (data_in()) { + data |= 1; + } + } + idle(); + print("m0110_send recv data: "); phex(data); print("\n"); + return data; +ERROR: + if (m0110_error) { + print("m0110_recv err: "); phex(m0110_error); print("\n"); + } + idle(); + return 0xFF; +} + +uint8_t m0110_recv_key(void) +{ + uint8_t key; + m0110_send(M0110_INQUIRY); + key = m0110_recv(); + if (key == 0xFF || key == M0110_NULL) + return M0110_NULL; + else + return (key&(1<<7) | (key&0x7F)>>1); +} + + +static inline void clock_lo() +{ + M0110_CLOCK_PORT &= ~(1< + +This software is licensed with a Modified BSD License. +All of this is supposed to be Free Software, Open Source, DFSG-free, +GPL-compatible, and OK to use in both free and proprietary applications. +Additions and corrections to this file are welcome. + + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +* Neither the name of the copyright holders nor the names of + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef M0110_H +#define M0110_H + + +/* port settings for clock and data line */ +#if !(defined(M0110_CLOCK_PORT) && \ + defined(M0110_CLOCK_PIN) && \ + defined(M0110_CLOCK_DDR) && \ + defined(M0110_CLOCK_BIT)) +# error "M0110 clock port setting is required in config.h" +#endif + +#if !(defined(M0110_DATA_PORT) && \ + defined(M0110_DATA_PIN) && \ + defined(M0110_DATA_DDR) && \ + defined(M0110_DATA_BIT)) +# error "M0110 data port setting is required in config.h" +#endif + +#define M0110_INQUIRY 0x10 +#define M0110_INSTNAT 0x14 +#define M0110_MODLE 0x16 +#define M0110_TEST 0x36 + +#define M0110_NULL 0x7B + + +extern uint8_t m0110_error; + +/* host role */ +void m0110_host_init(void); +uint8_t m0110_send(uint8_t data); +uint8_t m0110_recv(void); +uint8_t m0110_recv_key(void); + +#endif diff --git a/m0110_usb/Makefile b/m0110_usb/Makefile new file mode 100644 index 00000000..8c8460c8 --- /dev/null +++ b/m0110_usb/Makefile @@ -0,0 +1,52 @@ +# Target file name (without extension). +TARGET = m0110 + +# Directory common source filess exist +COMMON_DIR = .. + +# Directory keyboard dependent files exist +TARGET_DIR = . + +# keyboard dependent files +SRC = main.c \ + keymap.c \ + matrix.c \ + led.c \ + m0110.c + +CONFIG_H = config.h + + +# MCU name, you MUST set this to match the board you are using +# type "make clean" after changing this, so all files will be rebuilt +#MCU = at90usb162 # Teensy 1.0 +MCU = atmega32u4 # Teensy 2.0 +#MCU = at90usb646 # Teensy++ 1.0 +#MCU = at90usb1286 # Teensy++ 2.0 + + +# Processor frequency. +# Normally the first thing your program should do is set the clock prescaler, +# so your program will run at the correct speed. You should also set this +# variable to same clock speed. The _delay_ms() macro uses this, and many +# examples use this variable to calculate timings. Do not add a "UL" here. +F_CPU = 16000000 + + +# Build Options +# *Comment out* to disable the options. +# +#MOUSEKEY_ENABLE = yes # Mouse keys +#PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support +#EXTRAKEY_ENABLE = yes # Audio control and System control +#NKRO_ENABLE = yes # USB Nkey Rollover + + + +#---------------- Programming Options -------------------------- +PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex + + + +include $(COMMON_DIR)/pjrc.mk +include $(COMMON_DIR)/common.mk diff --git a/m0110_usb/README b/m0110_usb/README new file mode 100644 index 00000000..4122edb2 --- /dev/null +++ b/m0110_usb/README @@ -0,0 +1,55 @@ +M0110 to USB keyboard converter +=============================== +This firmware converts protocol for Apple Machintosh Keybard M0110. + + +Connection +---------- +You need 4P4C plug and cable to connect Teensy into M0110. +Teensy port F0 is assigned for CLOCK line and F1 for DATA by default, you can change pin configuration with editing config.h.. + +Plug: + http://en.wikipedia.org/wiki/Modular_connector#4P4C + +Pinout: + http://www.kbdbabel.org/conn/kbd_connector_macplus.png + 1(Black): GND + 2(Red): CLOCK + 3(Green): DATA + 4(Yellow): +5V + + + +Build Frimware +-------------- +Optionally edit Makefile and config.h for build options, pin configuration or MCU. + +$ cd m0110_usb +$ make +and program your Teensy with loader. + + + +Keymap +------ +You can change a keymap by editing code of keymap.c like following. +How to define the keymap is probably obvious. You can find key symbols in usb_keycodes.h. + +This is a default keymap for M0110. +,---------------------------------------------------------. +| `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Bacpa| +|---------------------------------------------------------| +|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| +|---------------------------------------------------------| +|CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Return| +|---------------------------------------------------------| +|Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | +`---------------------------------------------------------' + |Opt|Alt | Space |Alt |Opt| + `-----------------------------------------------' + + +Notes +----- + +EOF diff --git a/m0110_usb/config.h b/m0110_usb/config.h new file mode 100644 index 00000000..c12e0738 --- /dev/null +++ b/m0110_usb/config.h @@ -0,0 +1,62 @@ +/* +Copyright 2011 Jun Wako + +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 . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +/* controller configuration */ +#include "controller_teensy.h" + + +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x0110 +#define MANUFACTURER t.m.k. +#define PRODUCT M0110 keyboard converter +#define DESCRIPTION convert M0110 keyboard to USB + + +/* matrix size */ +#define MATRIX_ROWS 8 +#define MATRIX_COLS 8 + +/* Locking Caps Lock support */ +//#define MATRIX_HAS_LOCKING_CAPS + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KB_LSHIFT) | MOD_BIT(KB_LCTRL) | MOD_BIT(KB_LALT) | MOD_BIT(KB_LGUI)) || \ + keyboard_report->mods == (MOD_BIT(KB_LSHIFT) | MOD_BIT(KB_RSHIFT)) \ +) + + +/* mouse keys */ +#ifdef MOUSEKEY_ENABLE +# define MOUSEKEY_DELAY_TIME 192 +#endif + + +/* ports */ +#define M0110_CLOCK_PORT PORTF +#define M0110_CLOCK_PIN PINF +#define M0110_CLOCK_DDR DDRF +#define M0110_CLOCK_BIT 0 +#define M0110_DATA_PORT PORTF +#define M0110_DATA_PIN PINF +#define M0110_DATA_DDR DDRF +#define M0110_DATA_BIT 1 + +#endif diff --git a/m0110_usb/doc/m0110.jpg b/m0110_usb/doc/m0110.jpg new file mode 100755 index 0000000000000000000000000000000000000000..ef9a123abcb5017564ee7d32c71b04692cc86f95 GIT binary patch literal 49360 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≫?DY zkbvJo%K(T{EuLMiR&D1Brq}!QU5(Eg_c*{}Nzu1w-6y;_6G$00jLsnOW;7nVyDE6i z+aAuoMx5?4Ael}W?Yl;21d?@|p~zd#bE*8v&_$f*6|qdsV=4d46F5jkaBLF1PiSqP zP~c2!WoI_h;r#6<`MU+r+^@YKi%q+w_e{>NAD2W)uI+uV8$lzMa)yupPr#eYufEZ- zP{4v-TGt9$b6uVrw<$+YXs^(Md2nu|TIM_rn{B;Z8EX7**AQP;T7lxA)6^m_m>n>r z7qwa)b`uW~XW^(G+;Z3=;GvWR2dy!Jd#Ru+oFb}twxb6ap_p6H6$XBfEjrHSBw%0V zXy9pn%i}l#r%0}Qv#V2&^>WLz1xi66Q={;H7A-(fwa~mUKan(pM^Cgss%Bm1U2+h| z$+5^>A!0_7B3D}&4bbkQMZUj~Mvu&Df|p^BDVX^l(}uI^-_ z3qtX%J83IhU@(U|Je#0e_gRg*C&mfoHQ`KFbz!Yz)Vm6d|yCMeGHWD29vUmW=8b!kez&&5A-Y(>+NJ9~nUwu2o zXMFk1cMOmu#Yv3;jL9W=A?l&2mZ?7WBDyFeJZ*2^n=)Fb$1A@97r#5W)It+MzXC#F z1U0o^4od7djoT{0aA#h%ZGr35J?HAqrlbfy%-iN3t30(YQwYz-Hct4mlU@Shxcv6_ z?;2BX!LEl@X4;e?z;K6yQ?hZ2Qlg>?c9L5Sd(lXV+2H68AH`z#RJTnhRxca8Xp{-agVUtBC0HlikkFXsY5R`peB2kqWx=Vx!A+|5m<{f* z)M-^4uP99}mutJ}>i={IEeAzDcQ$Z`6ALXCT}rN8esv=?=FGRx>Ivaf9tAbbWuVRevAM?^4OP+`5@(E*O z&VLba1A5H^*|2Ij%FDA~P2QUsRh1VLe4r@YYn?2m+zA(T8r*RrD|g)(#n}h`WXrKR zaBTxa{IGKjwgqu6JLKQ)B0iGgRBehQ4g<#g<1Gn|YZ`L{tD4)iF#8HF@Do+u53a+f z9S>a85yv^$?7>$eH-_gE*&vGQAE&ENH~s+hvwy6Wnwph$^Zwqm@6EAHZ-nx2_A_9M zaA*|k7_WM0L;6RY&pMz_^$E*3UE|><2iLgAy`3a&-YoGb*N3{;#Sw7(FA^Do< z<-pCeLQnKS{7x!bN@E_P{2nK*iT-jp8WwG!Z{4Pls?C%QIK}SoL6}9~N8Km-nc58> zxpkq)8C>%HLyCsZ*hS)x(%EMLthwL-&sk&%ozFlfPwr*gf>6OU&f7!eik7={fi|Z4<$?9-6?}IHvST>yCq}-e6jsUWLuOY8TFy+vmk_}eRUaB__ODiHw`yiqg9jN_>5xe&;i)<% z381?UCf8{*GuYx?_(G~~pM&bp*ab$$?zbLZUJmoq`_L@y_iKE^Q+xTW&s%hcM;pb~ zdG>XSE4`@G_(U(+VdY#LWdW9vsJ?0SfHPuhw>KUzmeIJ2Vb;;IjS(7gC#PtxYlqLs zizJUVBV>wFxvgC#6?tJM5vVf5z&Llim0?&g#yza1jo3|jQ>PU9cvihS9N~iB5*OvdV$RA#agkJVO^f(Q3QdpRYXsc zP@ykf)q4o^dNc~^hln`$KO5;I)319BB~@g|cEVPMK9pNI>*ZY7Wj>L+jKEPpA*PZ$=pC!C!~>k*d>RD@=EdOC zKr$*^%)y6ex48y7W6z?xrp@fz^;aqr;_aOJF_t?!G&jB|Ht~xW&peSi41ErlB0Cb7 z2!c(!HJ(nL^R$F+UJ!AJ<)e+VgR7F$2G0ZL@&&m>-7^}Q@e7)6qTx0IM7!JJbtV{z zN$T}kcj{TGk>t7Nm(fwVqZGFeZml&<9efhW*>BD!p-!hllxh4kiy)+Np`}c=klV5W zTN8TJjXD%HUD?F#CWd?2tCh!)7Isvu@Kw*fY(RDh{MAg!Zbk;0*V1`Ln#+Tyl5^0= zy=XHFlUxMpPMq(DbSy2gzy*7|l^WKpVAsjsm<}-iG(YbmF9IHRya>N}4&Kzkd`*L+ zlQ%Vv-{UOP)%!G+miOa9A}}_^wYzyq_Ye=9+5D}LjBr4QiAk{t=PmM1ua_i^ch6x9 zk8^W(3c9n>uO*I?h+sIfTo8_dls(wZtrXZAR=+-Jo~ni6dkJ^N&w4lnbwgd6)uS9{ z#KASy{z)Ph>|-QbC(-#RUF8#`erUcr9I6>tMLtSBnau)|qtuo%D6l7C2QEsIH~zQE zWtm@(cMS~C^4N3Ta$jNZbN)=Vlkqz(Ow>o z2rEH;r%fi?NIo|$t@k_)mRi3BV88l*=_{l;F4S|#Q=6M|&1lbLDJjytl|?y8sXCwd zxT&!rWis?FI6O$V{+DVSn%h<5OBQf}v&Dvhc_tQ{5nDqrVZ7G;2Xef*paU{N@hbS^ z{s9K;$UL_MSL%4D10P*oW>I78fV%h5sqX4FpU>m79-rFDV247&KML|_0e_XcQk~X3 z5kCmm>!&UxJ19k(!YG=4#%k1@*NO%cIbHl}%msy3i6g7nbSCIfLkS(fV`C2G1y!)< z&7AiU&14lEWf&1ShI!@05bnKS=uz`Y+%{h6qkvGAl_5^KCEvoEtrTBy@LGAStZaV~ zbQgNXosc(XS}y-Y_=;e>0ZcD6E->=Gsp7teZeM25Mo6iYq5Y%TZ|a-&wuudTGIKhH z3A{g0J$&vG*ko*vhC)SNwrO26h-{9X*PD5?!Z%X0ZtFHo%e!lYk1LzG7jS|!K^&_b; zapkWZ$q06Gf-bkKIH=s4EfKj=a308sSD3(^-e-n7+vtjYEn+8Mfl~qq>$i?&ENU03 zE|0AHE~{R=g+QF=-BUMk&R&9(P8}AkO+DI8X-f^?%UHUgcp@N79;M6YZx4RS$MgAz zxP5y5b`z*a*17QM`{*6RFw3!qnsIwN!fe}Vmd`D))&Z;>@Nb^@^2%r)fN zMIP|Yjtd7YeMHWOew68@y&9j9pZvli?a_$oA@Dl>h-{N;^*z2O&%E)Xe90(COCIA} zC$|yj?TVFoDq;gxtA$(WCTZxccW^r>uMWMBlmDRbCI^@{>*mV`q+|-M5pm>DC0jG3 z`aUr7<{a87(73A+e5!ZBJIJWVnC)Z}M^MAo6L)wG+t!X;&4~@Ljyo5*cnH!(y6BZN zU58`o*OVgYqS$FvJaXwE3_R~}Oa|BJH_7$clgL?+?F|M%D3g zXhpQgMY!hdAaMD;3&H3I(q)y;(qnOK+Dz1kDhYOwkW6R|=Y}#fiNq^|aG#}>nfQQs zefNyhR>ox^Yk3pTQsytadef@r<^7)W=PXHehgCQsMmIR`12cVTGM_pMOjQnOY!IC< zISpuyOX|5Nqo#&fyD-RQz!HZu>#kI zYWSCGU&AF)$6G8LsRiD7vzCH-s}a36{>w1B9qw7(t zVL&VhO!kh!KPCG@v*O6&*k8BR&~xKph{+CP?KEc%H`jpKa`%C?wKv00C?apCC7P+h zTHDg5?=&T6E_ohuBjCv+OnQ3>=I>yV+{NOI0F4KKZ&Pm8nkG7 zaeN+gOHS?TAv>Z|QMXXM(~N13fxLtH;Yf*;hz^c<5LJ{Jk zb{w!KUQUVmdrbXP0K;ri6t^zj#FN3gOlk745~*c2T?yG<<#gGFBdR7qCiy{a8QrM< zM28SJmohd3OB4HAPe0HF6B!F&(+*Z~Wwv$8dqa5Or*{X8h&%2c*iib zfFnqLwicn0THnNF?!`Snb(x*(~7hK&}`i6MerTY5ZB07_T3G??ntj{tOnBMTIk7zfoD`&AmCbmiZ9*lIB>= zq^2T-o6CfZPLQ`h7eWiV%vU@L&i@cmET5*(&~QyTFSCa0vhvys7J%rfL9Mn+AI+{b z#@PwZenEitJ^j-isbQgp%eZkl{V_XSsl|2UFod1JI0R*fCU)Nq)_mQ+yz5&fuDrXe z+3YvM!z6*09{#CkrZNud*`4g_d!{SGwlu0K{uRR}!F9BWnL$h-=$2iL=Ity0K~6+F z;)NKSfCfYrj^T10J92xcbcrb|-X5+Suw$+vcT-$$Hgbr2%38kBMkZ@rkev#p4NT!@ zep=ME*JF#8v-yT*06H|yCbzO(l^{_0ln2kd+;Bxwa$h$hMXDV2f{G!~kK(|hJX5ke zBd3BzZ3@W3h15?uEzi{>z6ld!MihU zPWxqo&l|qBFdsG?J^Ms%5gVDu4b}Y3h~EQBy;l$b%LB$o7;!c!LACOSj*z8~Vr(Fo zPLu6BF~4L|S)4G$SVmDj&?a1<;qKwjBiTLt%;Bhxwu$b3A7DKG#|ETaNq9%eFlc zFV?AZ-lxHawT*ZV5sl53hT6l1%r=&hfSILbo0@Phj7*JfAIIqaD?E=%=*RHJaot^O za}|$bfqD+X==6l#r;^6e`GTYpJBM49rDi{9uUAbA`wgX4`}?jBwcWM(wOgq~e*}cz zNb4DTV=-fO$vW+O?q1)2CTw@lvRWi4|18(IN7svzsjy7J$!T#$2OqH6VT99KEuquP zYh>iBEtq-mIGLH9NnxXvprw4kN>$c;+Iqt>t0$;ae?L*X5$#U~g2&VGLS_e%Q(@{CD+7qq}v|3usZ$rI^r|0y=w+}m81)grdKhDF0ob zZ&TJTuIi|EoO`)WwxrZW(>F+4ljLTu_g%Vsz}KNtpS-+U+P)H#j;<6IZaSye~@=n>&xkTu_kN!QTvzSVAbV_P8P9ewilnnVq~3 zIrLDwdePUcQrX>gF)Q>|c!H#Cc;-UQ(o)??lbz!_HC?aV%Dm@|eCdX@zMdGWt+G#p z;7T8g6e9}+8Mbv@kfOHlpE~Qhq%m*XyJ& ze+cqe7zL0%n0*14jT?@prg{E9}vW3Wj!L4XKzO4!Z$HpX8Gi2zw5}Vg2gJhjd?n$tayR z0fis$MXZW$!pd?@qLWv=WT~thyGQV{AJ1>e4dDH!UTqhi1uyK0@y;&-<33ru$~rx* z^Q7f>P5u1M^I07b-DWS3XC2$Z_D{zTt0w4#taJGcagTG6eu>9cU9bbxj1U*&XsQ>b zYFpuhso4fZo1d9~78k0U)EX;ZMe%S>5m9BlXn&f=2K1^aeeXMp`6ClYfE%Fv!C?a9 z6m8;*WOU+UOVi1#5^?g(goHTfZTGY-JkM<>klwjO9)AK`*?=T2-BlyR42ZY>eurRJ zlm3f4`OQKv`nnzMaFrLffx!+Qd(xKD=k{8_0mXO(tjaK0%hbMRLk+^Y!1?P7hZCPx zeM_SAvT`v?kb+gOtloK7eS&67wH@AR0_=ovc}%I%)I;sZ4RIz5`!POyM$RUw7=}B# z?HxxnuZVlI+Og7IA7572XiGE@)KG}+C0xJ0ObRD96*c!J+(0LyRwCpaZFUK6y9&e< zx1rIbnsrHb?VWJyg1M+|xp*@So*$T;@t=+N`65$6Sk5Pnhi^DHh-Fb<jY+AJ*q)&bq9UAW(Ji21#0*Mrih0-tx^QJ0OT80o3c;jKZ`96+EEj zu;@%JA`fcG3ltK=ib|zmHb>hcgu9Nd#Wwu>wMCvJ1$f6BdAv7D{wcSY{Hw{x@lb{8Ch(W!9ocgeGAqG{;eyPl?E7Dl%yj`Z_?P-Z4>Y&!zEB8&1z?%X3LRx z=|N<6X=$Jbg>iGcg!UO_f+^)u?h?enp27z{+&+?q z%A*7wpF1#&x%%U?Stl$4B^op3xkP7w=*hHpE1iirbh8gDzXlwfMl4M*csgbBV2Ae> zTtH$~KtcM(RjIdelOD6hx7_>?U42hZJcx=5fY$<^MAG)<72m`;$rJtukom(n>46g! zm_bU(C&Vi?T@l=?!7Ox|qH0``IH4`0>-Q0_X;!~Xk}CC5P`dbG-5s2H&w3!H5Bky! zm1JP?t9MehflLnvZmECRw z_JZv_EzBXLot63}xoiw4n_Rqq_r+2sVJ_(AH1kF1%@~lgb zxTEEm{gL0)FNfh!jdIudWoSM9eC6oB(jm-}mOK66A=F5=$n^lcNtP0RY#~zK7WT)< zs(ho}+;Mh6I%OW{%!y8cG1O%>^_6%+rPd9v;{{!XoKB@ASf}110;0xMXJi)EHYwf+ z9}b`$Mx8`J&bXtR`ALdRt_DR@t20!Z^qom}nN+b?bm&MRr0e8htM7_i5aO&k-YIDn z7M)sFEo`?V<7gNSDN4GKGe=~#J23<&DuK8=SjVx__^!WBnr_jYp0 zV30zIRO`)4@5yTkKLTLKiM3{_*m7x1BsQ5@WhEB=N^CxX6$Hqc1!NLA~IW{Y(O{e zda0UKBM?)Rpp4Em@=<+q~O8oguTfM7AgDJ;^Hv;>w&sGQIs^0bW2Z? zN>%MW)8-(z9IRpa*?PliD_uG4&ZPq7Y@HT7bkul=rTCuTrDAo?A$fZy0)ofQP&Wqt za9nZoIKKnQ)mEXJVUmf2o=&H_vF{i5!;F%+iNU&It}qyP9ME&HrfO8#gl1{M^n>$M zJ>opF{JYpHzT+&^RMd*qZB^Y+=%KazVX77}o59$Ma#g2Prx4B^HdN*-D@(|Gwlqg#7&ea~-8PLfEP!)yT3JEc7ZpuM!& zDX`i(r6f?oQk3%Wj?j=4Mek_xX7@ADili(NZtk$95CzI%7dFl6=^30I4xsNDrdhty z`UKnC2|gr<%iUeUe;82&56SZ|^5|R$E?po3Od(59uoeXKjIvU99>~HHK6d&Tc}xuw zv!S#kFY>MDXxUP4q1)LFsYo`z#KCRbp;5FsVs1R)O3;NS_AuF6HMxurw``{2CM7Ds zdyDN9qphqV0n73R615D$C!XCQCB%cFips!}6jXu@({7NC>G`0KbZNqpeQ#tVx(13d zD+__uiYY&;Lsl{7+L@4F3wlJbc)fx)8wwvn?7e?d-4=B-7 zMLJtC=>@fb5qsX`4P$w(JBq)IVM|?4j3Bm)9H!kticJ#C%oVnW!Vz<+Co+6vWwDpK zzZhud{GslOYuJ+&;*oC+;iV-fU{mL;ETLmUG`u8*CjHZ=NXbPau7<$Ldw`=E-bmCR zbSSKiLQFT>l6%Qky<*b71jMO!9pee@HPHMaYI!!-XhBj*z5WnOJPC7?J4;^Hj4ox2 zRzquhV@eua2u*E#1qoBCvWi8|lp{6MszHsbEupd%^LfHM^szN8_M16MZAvC zr3C;@uWpc&aGTotjUsA1&^Je|00-1WCnj%F$@a#2qTuVaW^#Fm?Z*L3&oVvHr7Nhp zjPGm#x#T0PNMvs_w*-xZbZKbnYx!V|bu}TRu0(lN`3{hhd)GI&!a7SSzS~B-B=nB| z0JC*p^&^+(Vd!%Aud1|+2)3p=%L%^Fj>Q9%CE=Q!?hl@ip~|G@1t|bu#u^QT>2rRO z+!;s%DB3hxMg34<`!Y{EkbL}o4nPz-_0kYqzkAldBORTZc_ua4i)sW^yf$BWK7D=D zf?++-EOjx?ur1*d-HJ}>5R%e%%01ARhBf_R^Xu+`Rhn{;%2Ovid zROQ8!*KZTbD{NmvW@!NeUR5qMJJjlWOR7o*&SxANW*dzMF>`pnR>}y`wELly%Cg!@ zTV=GQn~)FyC$5pEpFuq-sm6SNJxujFxN614$CJr|zU?-FJtp%q%AZ1-GSwx7C%d4@ z)xnq5O~48_JtDoT)#>J7`qf8UTZnBAEhv+1WSYHcIdkU1KFH9f zNhfJJVQ!2g?2lQwD71L%MP6H@#JFPuVjOhiLTO5ukV--c*k!)nG3e|O!+J&!VIobG zDf6n`BT{10OAV*gZ3!I$K#lfkA2bhSdHTI9_1~I*&(!rab@cQXk_DS86HDQ&xZ3O| z<8?(NO=|LNI1j9x+w~;a~2$sm3>^;$ivB(JWe#?J<_B;N4ec#-HTcmoB!k%*4U+IEEfzU!q ze7(?pl)nD}?f(Er_J{ufP%dr7WF+T4$b@mXo+izz$H2v%mz{(pqyeCbUJ|mL{{V0L z55yncE5>D3n_0Dcj7YZ1f<=&h#tdu+)d?xq(SK#fjsF0!zR;K51&c}_Fp=dAu30W3 z&bOEyEtU$%@P_Si3+%+Wkp9t<{*XdwPQ6R}p4nQZ(438epH)3C02FpHJ`coBP1B@T zGbZCoW!95^_#_Z-ZNVBv)SvODzjwc%g-yn7td>NMrfn#o6F2Jr=14!JE#o(p+4 zwo8HMZQy$kN@A)#Dq@%S8g20bi9B=|=(x-I<3)pc!g5}A_W z(k0Y|Dpk@&v?zkfdMf3cPDU1+4YI+_x3P!nBw5F@2#wL<}xQXUtnh zQ|AIr*;2eTgr=P|Q>zM3v_Vnv)-`CKvou@f{{TNBeEzSZ28B9kq@_)payn@o%cjoc zS7yh1adIH8-q=YOhP*pTcVhYNPecc^PM;^`r3!pP#i8|5=D9R~SV204;RM+EbcObI zi{Y?ccB=FSe&)@B4`=ZazqzwuelM>v1d11g?lp(@c8_cRen9&DSJ?x8fi^GlWA%h* zpw1mTFh5QRl?YTq@ZAqr{QQIGwS5ph_daABmeHq-VW&JsiL$!piQ=A+h<|1D@7MYH z2hVEz5Fc}90(L?6+7c<#0P2)}v`(t$Z#Y33>CPkU-4yEI>K{9)>_VD+$1J0+u-fUb zlYFVM{!~s|q-e#j4$@wv{N|wqX|n@SkbaaW?rhicZ-2^(%U<3vn`y0~{hy-vC+77C zGf$c3q?5k!fJvxt*KV%5aObKb5tJEjG zc;xDQJwgszZ}KfO|i!t%DXDFl@Gc|&0thGeUKp|X{QSp6~L#Xc(sr1Fni-sD)0 zv8#>Av}~tM2f{Uw-uYvtrpm!9M3(KIQq(VyUfwa?J~E;ghT0-pVQS{9Z3(Jqg>{dq z=p(nMi}gGnu3NRAu?C~8Y)1PvX7x|HHW0h&lkSf}uS1Z_-)K(!;YGFnLcP(T+lS^W z-4e!X(2|&UvtKkT-5U+7@=PC)hB92nvRFq+X{t| zvMW<)su0OcYcKc^?o$aUJ{K^mfM};!!ksnc4rL}1Lb>S+J-}?H5>h$Cg+5S{p1h#2 z8z2v4B!R7=!Y|ASZ11VG03eH#XhMfbaP86%Q*Fq!Lq!eSU1Lf}zL4P-*oZ~BTtz2< z8Yu&mW>Lx(QR5mYJz{J_WL_IS14wkIUG(yVkq+yC8Bm6bcHTM)ZO#y++-P9@1Tvj> z-ZN-$qmhkdiU9*yNgKlQ-0um?zOa+XhRS+E3U!Bwv>{#w8ul339#Dg>_J?wh5gG`& ziFg64YYDVEP&C}evWTly$PEz)A|6s~VG2x6>kbBpv}zn8`a*3Jb;u2Yzc@kh@`s26 zXh9Y`!*cWr8Y5j{I$p*c$}bI&FB09c(2_NT4LQSv0Cc_K2Hc@1*kV*K2q1IP7N7xy zk$dyB7uZxbcd>@Z=MNO>dP7@ZTSMHF0SboBfWxZG&tf67Vs*Sr;{Z3Ik6`x?_Xq#=cHeux^5~~w!Hi%Mf@G+ome+Wvhb>G4iZRdExZLqvkctA5SobBp< zxUR7|?1P(vV#!viu^ae620EvyiEiDr=0R1DRL4B7D+Q!(mp9u;FiF=S5!szTJJ>G+ z*m?AtdQw&1LWqe@)f|@}A*`htwMVQ8x!g+ey$7b5$8imvr z^3#){?-F$p%{b@FC~^kTB}#0fp2#=8Tf|ehQq|^pN7{7p+oJ{SeActQNk4I`>2tY_ z=Jvu=bd3{j<8N~_WmX#A6LaI`2`8*3{b4o+)UJIYI}%5>1hI}WUK>=pCE0D~UAg&7 z*bihwQ@DdrpK&SlSwK{Om-fQk`=BgsvqDH9bcUp)>a((jYqpSVTS3{lez>k$;}tGX z5l+x?B2!J8mV2`grA2J7p}nr3ZT#WQI4hn6vgsB%IZu=}rNlC^bq&QOwrbK&IKNRT zeL0nVtS@r`Z*fUpl%|=HXDBAwpE;BP-qwk1XtJ-=>%2B~I>3cD7)?}clu0n&yO&k= zM^-Duui*+u-D-@hGZIN!Qs|d(=SU{k0Yb;h;wqh3U2+m?VYL&>mas7=#JnpzB#FUV zm0`6Te7gH31JHxcIcoewrZXU!svGjPP+jblT6;25ZF>?q+A~sJh8O}hylVHigjTZr zPJUt1(j{cd$E<+y%%5iPPf4xL)szz3Qmw0g@mY$B-PjmIVoW6XZXh;eiB#%7B$=S% z9I`VlB`a;@lBS#r7al1-dU(Ro#Y`PBG~BGVAdqrt*8^y6E`p^jn*`gf;#*1WU>0Af zgp;n9v{sc4Cd^AszJ}%HQp;;73UI3WX}!SZ9g>*pdSoZ$WwirP752fE*kSj=5V59^ zF;~P>)LH}8w^^5&mtw`n({w0{>tabB_=k6mI5mbEdUCMbuWFlwJdzdSH0KUWZCD3( zCJ<70@PIk~B*@e#NU32-rl%NF<(}Iuz#wWYVh)wWdFrTArDmmO5``2iBSS?FQ9J=^ zl#?1L(?}Pk)~Xc+r7C%}5_vKrDu0QxcxJaZOT_98hL9X?VYGU{jZ&ob(@Sp+#igDB zFxg$*uLvt6U|<59#=IS0sxeKa)E6;1Fs!YhGNFEZk)%ggID<1zt2rvEhFEO8T5Kt> zZbytwV0Kx>&0~G0o-tojv25(~D0L6Ew$?6{27tJUI+bR6LXR;~Wk__(q^(F=EEERf z<8L@_GI>JW7Aegkvc87GDw*Hi1B9fqrfqX=IHZG@u_^^tvaKr<%%KPh_6%ZAT~|m9NxaAtqx} z{Dl3HN;iNG$<`TBv5M-u#TIa6+l=BCmoUj_INI4j%nj^89QxiH!yIU$;|b#{Ntc@$ zMbzV{2}*hk-%@%(OMwl9}P4}9aSyMqa! zYO$irCr>TmwJ4pUyu#dBk;R?qX*Z=1p?3Rq3$Mf^9lTAVD;nY%x^-blZeje2EhV%e z!jW~_-%K9#D=ll0))lGND%o0`;kJ3FmFD4zR;H#F+Oo_#m0IA1o8AW(VPV3|HdIBT zo<|;}#X(fHQs$hRWQ02AbfFg;sFHLLY@A4nwH9V>MR^EeOG!ofdBmk_*ms%=2`6jX zGc|-$P2yS9&9Kvxb3ZSeDeXNM zZ{Zc*G@pIBnI$yx(uW%+!9;6+2#b`Re2?J{pZbUGguel{TW4LPomvwBa_>033yMFc zVlB=mrjJp2mr!KomlyPxUH~W^KndKKRq6$pRn{5pkWQ;j{{T2Zy%!ZRh>#U7L2XAZ zqPM8jnx{=Vsioxw+`D+%{>X2#?hDksgNZw(rK z-9q5&Yw6`3DX&RfW^qZn3dUy0%m(BOUL$Ky1HV$@RLV!rP5%HmM!hkwp5hXt)j}#{ z*JN^)mx)S6$?Vne(_O}prQ#U|(b_4+c6qV|2F;Xw4?9I>?t;r`Jcj`&QdFLxf+GpK zZ|#6OO;NgZ&|9tqFyd@_Uz8D|xhml9JQWzZZCDvBNF%3=Af2xqD5x~x?x+}fFC|BK zF2H-QIEKYi-jzg}O|GDf!`TwWT_K6q!}6~;`A8$-8BZ~yldP2;1=5202?J1KVNawJ zsDY*wW#(2dW2#P()MoPaJmcoI)TOHX9>$E8%01+=bQ=33NgC*z-Z$C+Y;=bt$7?d! z^?^_tMaJB!&ZmW8sy;?hBl1u;@`yzeN!NIrn>l4%u;plj<*(Zxbe7npe6!23wTtRB zFxlUkhZJ--Fpoc40gb5M5(UI9T<@$V_DSSoE3g#56&){DT4f7Ud0F+7Ym1%5;x`4z zxWvMHdFhF?+-2>8Zjt5yznO<|;@35a=7KfI5|Mqjh2ZYpOv|}A$ZBI{qyh!O<$h5~ zd7XlIFUchKRK~(KRinV1P^p*k_91;LHZ!hU$Qyl8?ztJVDT*!yC$mXW_6x_(oKHFF zb()OF`&owD>t^*Mx0;Jn0#59XCs;x-;`W917Eso#=gFA6xOzPc zg|ufDq&J;YZ{~32Ncl@#o}Jj@jVPKfFgXU%@T3e5)4!4;hr%;a1IJL>kazMVco&f?~jEBBWQD;asVk?kftJBVlV z%PF<$lk~^5_`^CA!kP4)Gn6LY*znDLcS-Y&HI>RFF6W>)b7b(Mk^lfIanq+gB6kbY z%`p!rwo{?kOMqnwN-xL(@%kbk0<>A-RvXZq>v?t@^%38MXDSnOQ|YP8xh@c<%ScmT z1OlB#U`}Js{xOnG_cUy_@UwZINjr$3zjOrRk&Y(P4$Px}D8BI1rKdnK=Keg)2eHLQ z+>(*-jc5M=#!qlBgm32JOp#52aaKA->4;>JQmIce^0J{*D=Ibwk#nWa-p*P@6~QES z+)SsAg#A%);|YnDXWUe@!li(jbge-vIjwsp=}98z!ZXMPn08gkIaXPEVacTf_{ED7 zIS*tMVo+MZwUhq#a% zcQHw4JOD(b{{WMw0Qt?Rd?UtHx76KZItdF&AQ<*7+bc0}Wc6lvwtk(6uXdCNzA1FH(JwH>dR{VU@ks@!pmY;-JvP!kB(ktFO zDK1cC{{SdBtv^NyVn3lsuDC}$=ifBC6tiO45p&~-WK7i&+Fd!BWnhiL09gDYhv7q+ zaa@)8f<6&?aSBayVYIX}DcMHsE&wDQkGp6l(o69oJnAJhe7}00==k3j#p$xq}&1;-M1>J|)%3;v!uQP14N^(oQPlhl zP`pFS_vuqo4u#VfcLo+-!$G|@ONsaxm?Ys<*i!n28<$J7Qtqsukt!)1u0^lzzrG3N z^|3GqJu5J|!s86O>z$fX!jiiNmKSnPqQH)N?Pxoc*dG{`bc*f|@om1-1WggUYi(Z` zrtlQ%(}?6klx$UP;_c#KOSmSel^vP{dE7^zaD&~IenDUFQw@Dj@+Mp((ipsUl619& z8|85aU3VXB4arfOAb$F&AaoPXeXv=Gn-5TATurkf7vR(X0K$=dlnfPO z*)=^@nM}LtWG!J~#NXO9A|9o!qK^!alvc#YeCuKQWXpH;no#&eB_*}X%O$s+FDWef^!c=Zpr`=mg2*Z5!i}sm@2fZI)D#w zYi*+&SNIXo7L#bJm#DBr;x_*P$?GHLkVFZ~&%DmgD0^VOxcf<`Om>S(d%6O7z$iC2 z8gz~gR`)73PS8Cg0y}6ZE2siN7D+K3JQTH}z0uvQ z>rPA|sH~=3+nKaOXj9>6ma5;eLPs;!A`Q=+eXBlc4V`!MjO1?{J82r_2PF;O=U!2Z z04JD?Q0s4GB}cowPTK>{IR5|>HAckKo|Mv@C0gZ(nGP>edEZGQ@uqn|ilX zGg1t@G8R?|Z3RN%L=mTyRu9oCNj>U(=kp5tBR4kq8dxuS{{ZfkX?T8iM-Nh#%+u^G zq|83xIW8@5kl_q8j!B_RU!Ahxf$^QUAo6~>Z>-!=qe-6|fC2Z5?)UIGlIj_Pd zP03q%K$1^`w}bTr)A2=7#iS`Krn-aVRG+dexmAUudgvMFz1Y zh#zsEV~DC#pRQNS*3rS0JwoJyE|Z9J7W;#5IOfk_@by{5edrmoGm0 zfI1%t?5Y(Jr z7;r&ufJq}krtvD%ZGmDrj-=)03SE;^i9)-(8y^ep z6EYlMkdm^MBQW6{vjG)7PF`kCX>C*(c2(o9M^I3!9(FOrmlBhzw>m=H;=r@?|0>X4xmG|~Q{Z9bmS5i{V z4tdebBU!Zf#VKxSu{2tgyhv!62Mx<5A;Ot(s~$w}^+Kiin5lbakqWm*A`*KJR|Pgn zA981lGScZuJ&Ce(*6=1=NZkA2tl)NAZE>b*RW_8TG?nTCmf<$`ML&vbb5+`u?Cn8C zZ@jXj$Xk#R*(ir6T}v`;srQy_lptJ~$^0Q)nMo|trWT?3ARGK*Wx3+O=is}BUmPl6 z9KDMRRs3|cSk*2dJk3gFO|pjpSvSls6Rj}BjXiEM!(ad%Mz$R< z3jDbR$;QtRW*8#!&8x{oM3OkCI@*3lO_ZKjQ88V=``y*EFp}GdB`Zp_AdSRzNJ~sr z9&T2e%I05lWFTMKc>&^LE#wYdV~D3Q1nZB~2qz_w0MHKz<>3+R@pEr0)om*$-4j#T z4z)L<4NIv*q{3sn2XONcQV}@glC24c1)Iw-gQQ$AnKD9o zv&4Fnb_r#Id_ntS9>0Yv7=Bz%)+Kv6b*kN>TuR0KZL|%deqUdeK(|#0iyelQUL;oL zI`XjY1CwNaIn-DWID&5*)EZZJvR6x{Ch8a_xlvPX%Qr3< zZ8=aB_#X>E9bR2jN#`W$Krt}cvXWE}xbufAZ-5KO5$efDaV#hFKWqo${6|o)0BR5R zfhajr1%N(LsU*2oeKNGB)i*G&n9$69y$6Yj8TTGz=yO0&e5ul0F_HO1-9L=mEr<`^rS{r8@RS}?Zy*jodCNb4%Xi`MkY!H1!0r7zpROLa+ z9ZqAQ7u>-#o(-&2WY;*hy$VbLWxsG$eXO1R_K9d|_A9ExikO~4+)+~24awA#c)4(0 zSYezXmAiDf<Em5C%{3R z?gFcXrMagi<=$Fzc4}Es0PTAVM`j+tGxW9=QtYaxR5Vs)Sw9G^I!eUyPhy;8rrT~- zNnqc)dj+*8gHMbu#0m4RzjuJ~w4vuo#k*xU0)zeIAc zhn|r(-RfyNk`ku1SC@J%VdOH_2Y7utC{lA%Pu)4kcg7p2VmZm#rMzBJE_4Yy2qF8y zedf^Hbq3mPBEdb8KU_yw@Jz)9nB@Neq_;B5TDTH|k_TPQ;ZCIOuuHKRn*Buy?#?ZXy*ToL_z)!rgrPL9wr{qcc;-=s9g1{r`F5cnQ-}8)NpM4uV=j#}M5mO$+v(3uB zOY3<#n=PQ6!^$3{VH&+?rA@LW+g5uue|&YdfgDlRc_aRj`(e1oRMQSH3?=nC`a4yrTHjSf(@4&3 zXq9t^t|bX^nbfIBP$Vg`0UY(b6;tp=K$7#RQT|ENIj0t-MW8)~6?ElEz2NGI+LGD= zfxJq~;dWU7i$t3gWZG))iY3UU3DBOv<_k ztb&`{qyV_PEkGL!>lT*~C4%Y9x)b=fZSN6Qy=>>-934WrHg@Q<=)%^cvVE~Hhg-Yu zEQ?t-_{3Oftn)o0eul|u4yjzoi0GkxOis?KRiejgYPoC+X%VX5P2;|xtG(m|a2>Rd zuSd^}k!u6aHEj$jUER*wLT|54B44P)optF9POGz(aYK?6eZn8-9F;|7l6akxgLs^Q zKw>$UDU2;rXlY%EN;0o79zL$Sl43TKiddeRX@bJirP(=xhpm1>_amM8bBURUOOH6C z%|yoAN%F8EmE;~UdW7K^papV!C zNjp1>DAFl?PBk?;%S%D%RskOC$D-$Fo)uQ*WDwAC^|+*$FOjy<&?i&40BICQ4b$md zPN1ZVrMJ}S@Ez&aju0dyL;S+m*E)BL!+ky@JdsI^^pCYXL5{>e^ps zqEbptu9A5eG2#oUZ-w>p_zF*=5oK$sum;}P9Ky0JQ`?u7lxZx>wk(7Vk}t|6_|-6( zP8L*hn-`SRW5(+Jk<}k8TQia3s)J>=RgvX3d?Lc&)Vhuuu2iNR?H+PvsZ=PBRRZcz z9%kO?t*cIDWl?KziN4E+A!q#}s_MU00DW=7tkj+usmgrgtvt#U)U&Ef>IB^=Qhr9> zDpkZ>7)Z=5GOC(LOUgn^iAgpJwxD@!08%nCuN4=i+gWg-O1c3mDfLO~Ze1eH!igQK zeB-B0?rMpu$xZ(0&duyiNJ-I2r`=ZHRhxYg=M+m9E0R*eY2eH6B?|#sfKIkCetzjW zuG1a{?{L(MN%!3SaYE8kW-*N=zOzXBV;x6&j){uGJr9cJS4C}>smViSu`4XvN>V~W z2?PM52G`ug?jCjLq|oHTf}AA$#3!FbsYBx&wRE>LS)4=2Lyd)mDy1YXe(!BLX}S5$A`btxaNpRx}mP?7*rLauM98^(MU zTm_WUoXPI|AXoQ5c59$eQncLmuAgR61$3=kNK^)X=ye3sXb1#<8h(hR{{Zr2zE3yO zrR7zMWSN>uo|Rjm7L=o6Nzfk;2=u*mq=QXmlh~w5r69Lqm%OdCu#YiPiB>D85Ba6ZtZzA52T^2ES%KtbgxK`sRzP$?pE zguz`ff;^I9;L2)`EAcNU-RiMUWT;H6f(^OFiNMELT@q`vX((|iSaEx)XCXHxD?TJE z{JT~?CRg;ug}^mhk5g9PjQ;@o%x4d$fp;Y)S3J{_-*eu{+o(&ZDLH~OY~US5j)y~W z2UOrdK+IKbF0IT9)9>BaOF=Y&vXc~*jE~}(Pu@epKqz*ozrH-nLUvw56Ed?d+sN$_ z5|;*Gl1|`9rTD6U@I%(ncBuMe%W~?=UT6L)ewbNuY)^yKRq~}#>8eiUPTJjUm>k1% z@661}wza&j%1YBAX(KDyler^%X4{kyRuB0aly~p1=u9ypv!bEu!ewcE+KX6^ijtNhp#5pe8O|#h)`iZeu zi9Fznx!W~~vY@P^(_Ieb+SyfW`)vSx4|>%Zq>gDxizco=@dW+9+Y<(&rkf@?M4X}8 zB&QNwq|TvQg|NN<05rs0ne}fI8ZJ@f9WL63!XlfqM9(P5)D0H81%F8UIXa_gPqVG}Pc zq)n=QQwcK5PGZ+(-MUV>Km#@IFU&=SDsS~bg7% z+rkHUQCM|V5hdMAJ)Oc*n``3*{Aq8r!tA&;$nCxnSa8Mu&l1al^O8g;C!fds6E4NU zkDGN$CSNydi*0pkb=D*?W{%TWuB@ng zmHT6!MOqCaSC;7($?0uv;U0g*^N&$6%}vQQc57O<=VKT2qK4Z=3B{&EIL+06v}p>8 zuQC^6;o-GObxK^TkE=4*-BCX18!aiS(@tbAB_YO?LPv1k_xM^K;N;F~Q)$2A-P_v= zt}V$r>f1<=eF6Ci zhWF0eg}srTxh^>=a(VL$*5+kuQf-G+84C%^%F%yS{$C8btLlZezp6abEU!nYCu_Fv z&|}h!tJ1K<$kg6kD0?hpMy@W1jwA`ulBVXT0$V6)OG!=BU`|~~>je_p<-7{WzT#(+ z$+2xs=1!X29d*9D!8EGudBi15peu_#q`MU9rc|cYnN5`^rttR)s*X&`y4%YuQ)=dU zM_&}!?eMs8YuLP%Ytv{F;XKw#jKfMkum&y(=E;{}(-upV)MwjiChG5?dx(zNM>8QC z1rP}yF}z%rCViJs0aJ`5i=D{R>W)fW%4S*$0Hr|LNjs%n#9*!}sJGdK4Ghhw9$<(I zX1_fm`rGZ4q@hGx$ibAk7Jv%dK95zI9anMfjJ56UDm9SCnTyowl9!bRQd6mzNLAvL zmtIE_LFX1d0%tQwwzr6coVgAIKtbjqUhjN!G^?gM0S7@Er&%QsSiWDkq0N6J1^HOT zJ2HWAevRVxsjwfX%r*t{Hlgr}Hf0ta@0w$esL#{FI&_)za4Px`VtSMamAbj8n1Nq+ zKt1qBATr6fewT{y=>Guj-?7uyKm5`-CsqsVxZ6nOHny#;G z)ZP$z9+0!&v^Ku&;#kCjGg>3-?jL$K`>#BM+?#zqPOI&VRI|ZH zscG$;qbf;Pf?$qKg`A`zU#errgAvrzqG#sE{dIk@i^P>h?@*f~{$YP?ZSiSg3C7P| zV!ERgN*vV05xs3$UjH@8Ue%~og9ADDLei;Ggc?qYIsp#0lvOYXYnZSyRf``}h> zr7}tve7e}iIfPoE*r#}~*EFeo9fzeGQBFx@lVfd8zg%RnibdT|S_Ob2 z4{-8>M>?EKX&aR&BoAqiA~ioUl$?_eqx8&abqTiyS0-Lq=XVME;^Qxdtsr>`xY=Ho zuH)*o#DmFsgk)taLApsoKsG$Z?-jlVZ8JPVqNRGIOoc1RYYxvcrqrc_-B$i_m@Q)3+Jaxp96=$iE zQWFT6a#6LHN)6JIPS@+CR)xnDbyAO+i239aJ3+4_q)o|1q#ek50PS&wG+X^8A53~m zzdb6<^to~7+xY|}g&S%HvFDs9!B#PoUnY-f?t<(|Q(a1^;*_FNodgqfkVTf{l~zl0 zG|2w|s3K{+QAdzvZcNlA(3GT;@_|Qgf;{F`eFpH8sMnvu9lITon9_B+l>GG5UyFIw ztvBdQS$qn0xoQ85qUKar@6rWzl6#g6 zrCy$un1!TC`d%cLPar~$oPma~b8JlXZE|{5nk79G z4u;m+%C1h9DFf<=={oH=TJwyL(u(&I*40v*OG#1e+RzUefl|3|8MkiHTo=n2qLDA& za(#_DE-7v-*JW`9S=Z_6D`~dFd5HCh>F-GOn!7w&@8y)M`vorCiU(61yn{Ik$+W>|otp&epE$ zi53ebR`W6FtR+!mTLd@hRta)cwr+Ou_(z_-AJXd5?E*6^P2$0;RaD%Ry)}hpX|#Z= z9pc=SV3Q`D*jXuv>8L&Vkdfk&B3+zaM{Er9i1q^%>yB~;{!om=tY=OoSZ&0-T~Djg zOoV|`s=jioSPMmWfL2??as&<6Xv&EJyWf!)j_e00nS9kJtP;)g>$#0ImfLNUEYWmg z%AA@Qk`Fi#<5___+#e4JiIv1O(QMOgr1+afds3>oQ<_`PDCHigh{e0q#&vl`@Ldh! zsyiv~&o!qYNs4cYwW(^|eW{r%skFD*<|5gx4CVuMd_+LhN?e#}Ifkq1ImIh&3A{4Z z;RMfPD>N2zr7H*F5;&5zO`NLCDdMXsz~RV9%Aw*7;4(&c?iDw%VPHDwx~z7H$6vWQ zlu0|p$+qbPaEmTm7E+Kq(+W+$l4GK0A5!Jz)>>1KFD`&4*Y?Fsmy&e7{ji6YkcC+6 zAZl3)AzyQ~sXnxeW^}8|SoAdptjv}iZBuqBT)9C9O$fA6IDSA>C)`rhJ0{h27$d7z z*E5z~rP^J+0KSGPwOdmX=E64XbjGH`%2L9R3R0^ZSnsE@CK<)_mcS~QSFr{v#XbqJ zH?$x*a&2hMMb-w`b&au{g#8X;N=z-qId1ZWfYt=~bn2R~HbuZGAjBO>!P(`_sSuU#1GzxUwi{2q6aU~_E6zN$*iU25t9c{D# zOwO)p)i~>!l&=_Tv=-Gv-w@Vq_b$s<@79#a(Z?2fWkG@2`m$>CZp@)MTUCGudq8e+ z)M?`r)COFgTghc5z=9K|y4o?-P5X^9Nwn*xux*B(`81A^6DfzLoC*0dkp&cbGUct9 zd?OepieW^u?vbo^Bz4o2a?7?*06uZpg!p?Sr-4z510fw^ldQAo^K)$*{+`_zmTEYSym}9NS@KF7-s?)S z7YUA!365mnvAGf~S^@{U7pNznBM4p8Z65b0m?QFk#;}E-WGde_5}+=i zA^>NZP|!tH#<{AGpwT2~NueEE=+ z5A7IMDkQ_r~S zRzgxT8wA?>drke3%P)k3Kz0-Ewz80ttbmd=(|tGgK%pN{ApZabC0G9dDIe(n0Ja=Y z2+EF?QV;yN{`47BaPnm4T6|2pwIMldr4kjUx7V%A5wzXzmp1~N3eYsZ~odG44g(oIp zb@#%sdvn;k63fzCWJ=}=apzQX2AW8^m2Q0i=17S=Svlzyx|6`@r`K;FY(9vS;GfE3 zYW&HzX?jw?Ju@vSj$5|TNGnGVX)Y}(ROH$-n&3uKOEgDtxp&)2Zv9w~V*iQvP#Eu2hC|F8z zttC*MFEkT$xsZiifv_GiNX}Jia?(sNw6!qYvH}vVQmmtE$E~>MG1zeZ#=?)wOtg=U z{;2XDZPJELT_Dt`$taSor)86Yuwtt?ZMx-sN@{OAu)T?Q>fO(iErr=CD zQFU!KH1gd?u7>7;Ddn}JvkBd<8R10iR?^(~$9@*2O-f9(w*zgm+iOl#xLgHFP$Zxc zcE*P3xdfjGgjv-s!K^zq-F;K)Ngw)x*KDQdQfLP0jUu-wHpF@n3pN? zuO?z%O>1es&{ zogJoy1IxB>eR0D`q|1t<^UFYTVZxG?5vl@Hmc!|Tns?(84$-tyyb0v3xQ)Y_9v7mb zv4w?@!gu6;Z_x&?#)t?;5}Y&fA)%pia2xcUb4D<4dt^W(@9%wxUA_# z@1Q4Jd*jknW2{j;bXHta{g3)He?f<-N-3a3PYLj&7`a`wZgoyJ+nIe8k(T27saxyN zd*I4`okW$Z2{lvY8baJ#ZTy%C?)4@F{{VB_gw`k0PMK0|`cQFIr?WR*Qq@foZ4y(7z8~?p-?Jv&CE4Rm0M0;*I;raeMTl`unr$IiN~d>GIH}NWknA($U@R> z$cRM_O}cEGGOQnyZuxFG5>2%8g2jyVS+wp;D*7R$xC6#@0W`%yqXaEen|SM%y51&z<6k#HTFdWBF0&>g12hDW+HUrtb0 zn1e+sj9+25snW$ysYykd7SI(N`vgwQ;Osvz0CtZgwDeOT#5|2Zw5YW-xrYiHC23@U zQWcb@;O+&E-F1UG6W>e`Rl!sOaX$%D>DXY6O}sObnO*(1*c0_YHF3O zR31SK%7&Q%C4EUz+u0Yt6;YoDxPK+o81t48m@H!1HD16>f$xDYGbUI_zA+9RqT$+n zs-&r`gqGY|$wqanFN&jvk1t57B}Ma2$DUpe2;pWd!T&5d*-9srI!>Fs?-1{#M?+Bk|3ig<{>I-kRD;BGb+tyVph8~G8t`oP?oHm z+VeKk*%#F_3(;jLQxDUmS`LOYCB+QtJ99UWJ>tfUrYop7wpUeed5=cmXZ<@2GLxxt zRHyo|qvnU?4-%kKM9aT4>jqUBkc6)>LM%Z({#_u3T0&6T^0MUr0Kre$5ONKnGeyqL zDR7LXRu{GQze~XsvF{7SrkYg8z%9iZ6Axi`rxWu3$ z^OEk(Oy#}baFmnI$rcfBV)<`O!j(3L{*JqQqt6&BbJ1(^3%#ze54I{8mm-o>UpSJV zEl-z{5;E+v*$NpD*hs&+A?T9^aVjs#CRsor_mU0noq2LPK{g^tdW|gR<+lgKe#nE6 za31M8j#r77)g(H?CnXqc=o?15Xpt1(6)A1gu_F#Onq7&O^Dndfplo90l2wSjSDb5< zDwU?qf$FVDJhvaR56o-0jvwJ#1!07~^G?kzDzOhbNWYM)wD1Q{80}>gS%A=LQeD8OI}v690ahm3jkJdsMW?x9Wm*IfZjo#0&d~6s$*C$x zVF?RZS;|N`hQ{E;IVHgV01>3OKnf`ISwgJYY$dKq*I}1kj-#Y@Q|0M1t#*>KlEed) zj=?tvq0@L%ba^5UX>oI7>ni@keL3wN^72yhg=Sf#wV!;V*Yo$qs$IdGOoXaO@Ky!- zG@r6L)lrngK>qV+GcvoVp#dc-1AiNjq9l5Ah%8vgX-HbXAwf}=tMWXJauLX4Ds<3J zLIwF4nPui(wo4nu6wB&tf|V4QG{aT3toCbG-$ZjQOH^q^l$48TA;I17i1|s5(E#4$ z$8uCi(8c=&ir&`Hc|~)?34YF^!^8N-x4%OcGIc#5FNkcFO3J*Ddy63ZV;ywdN`@Kk zNn5UAADt4Dq=|KrzL6bI7nn}k109tW*^IxGp&h;*1syl|nst)7q(pDOIMKGezR2G( z(h{`}QR-2`B#kxF8Ckg3TbNiP$E+bn$3vlo>;}!U6&)h1$2!&~T)wSIw9x%EsYm-F zEdsvhcU#3L#B4~KY~@@ju;@#ypzEk1yZ-?8iGJe;>~E|*$kqT?#K|-gmCCvZ=tMln z6ls9><>q~WeX*O8)~e_Xq}aj}(T%?5T4qJg(|M`XD~I-9(cHJPv5~7`AHLqFI1^)}^|htSgGlljWpkDelxEDo3TL?3QqL5o2t$#4L{$YXtPvSt%W0 z60M3p;?pRyh-D5IB%4OMSY;8-FU2oMwd4Z7>L0Ql)mkjP=?coRc=Nv;CVO0WH~|N< zWu$NXoBeP|t~JcGn@UqyO1~*?DPIVu@fB)nwN{**sVg+Y>MADI9s(+IQdCW5#&~ew zr13(6o$WJo>;^pxGLq$DZAVX*U(*x^3e}T{vTrN>9k*BQ%0T*J%By3^hN^Q4Lru7n zvPnGrbckMqMWrNk5KLw}8dTDccOwfw)iFg&@lIx6)sbaZ>Z2UB-YQmVbjgV}62zh& zK|++;Nl{NRa}G00uryT_=Pt{a=1Gfpf`~tZda9Byd4u$(DQc^#a$Q#%jpEtitys}` zY@&l@yz7KtVl*FAXC5t&xnR@Nm(0N=fhj35Nw<$G66d;>S8l0}=J=skYBy81mfOzspj;@e}mLfs3(aR}dCeQhz%w`lv_=NGF|y0QPEn zza)eUl{%Yy#7b$&;7s*qAVuV;_8JzIue3(wK}bjtCya4p(t=iARY|*Jn7yEJt|3$z zIyS-cNrxv=z|neB71^mg;)mm#sa`02r2hb;H-B-C{{X_3WFspnmu&S7-26;d*p8<; zRh*icsJdQx-Aa$q6FF|I2~bb_pB0x7PJ_*{{iw7j*;93y#H?i@_5CqX@J?gUY84rk z_fnQ^bJp=UR>kwq)E;q%ic(dkm(nhGfi4SHOy6iBL*X>}gp*;}E9i<1taVs#x`&hJ z*@)(=V>;aQo6I{pu-btIC;>l2E!e6mkzC@F`|%|^XEEq*7AVYc{G!CG(cA!awd2lJ zr4^P`bvdmUb`q?dIe}RUKP<3HN14(Hr?QFutP}DG%LFoNHWrF+@4lki)TFo#&oqeY zZynXpk`m)%{+NkUebGgg#6_ieHgFqXx^3fl^BpD5!x6Hrie?giFmH%)O-`#Wmgir}jilo`E2rI3LAW zt;u;tWaU&+pplq}5pNY#nmx&b?MN^;=4^e7s!_m&4Q~~H9kRJEB%nc1LWi>ABGruR zIdZ0HN%BY#BZ(>#RS@E*UR%p8?xT24-D9{|OTj6Q&b0e?^_vId7M>|%C2zFXE3KhG z_}br8R6He0rRr`@9T0}>Pbeb9n7V3meO`{?OK2nry;pHb6CUh3lUCaDiK$0G-)N=V z#g#Vgk^caC1TEZUS5gW@+S8`FKoFFlDHIEFF|gJ)p2=bqtLYav2j;{0eqAe2?vj&# zIP>jk#mvqj$5dA0impzi>lVHRsT@6q7UQIaERvDu4hcp%CFPS7vTre4Zy*+F=Muj0 z11Sc^z}V^r@Ix%UwdoZ^-XorVZBGZ5oX3%jZxdAzJCjRHLfutGGUb_49H&gB<7Af9 z4feI8%aUs{wKR}z*}bK_6$Vu*{YGY8Nq%kRAo9(m2g*yXYNn>!)Tzi(z1Ko-2c|-P z=wXF~p7&;zr_3L)z`UCXOxL7XhYMk|(133d^&CjLbs?EH74o65li{QXrn5SecIF%( zr39OltqD9A46^Oc26(I4%wa|LiUGtpl_VX`uoP?6AU}pZ@3cTyr{-pvSEW3+EDx-r zVO{nqIy(4kIq3L>wBJV(L5sq+gK2lZYTLE%%xM%Z2bNl@ZA~2;XHsD1zl~o%BP6V; zM(1(tikq$pjzW~3_JN2Gwq3-yIo(gjFLO z)WP+e{%l76{wkcDKnM8(9{^h**lQeBhSK#mX(}ScvlW7|wOs8m0PsMLDU452ogJLa z($?9%)3CHA-qw-@$=uo0#I+gn)Y5g*A!Y91PF{A}B;}G&;!1Z0Jk@LIH7#0H#&jpf zCtF@%K8O&aI8=n+ouH+a9J=itUsquxu_vwK2O6>4P~KI6?9`PHd`%^K=^VADgv};x zvM-sHThDlzCeyz`tTcNfoZXySi91GBSKUD6sfXngV5sD)D5+^kJ0?9YjyrUabuRT8 zzz(|H!c<5+@4PEFNNL4+M_J5iOR&}$TD8jyQ6zXrIX72~CrorWwb>fqX!4H|aZH=_ z{8dhJVF{XUbqY!ptyF;6O~+di9<6g${Nv6ws%(`f?v-Flvh@7ptC)3e1cfN6L?IcK z>VPezXDreh=O>?L9zjvEl7C1?E_D7{e^^D(#wC$)AHF0|c1ThX3Ulk-)L&tEmZG^Q zSWAS{8)G0r@3w<*p>eR@);`!j+AVWE-tNtRvJ(q{)N)5?p`LPuUKln=AhSrDOS| z{gGQe!15JBT_{47f|8S|v4RX4Hp+06^tp5e`e{)~Ha001KM3_IBqh_c4G$*M_D2nR zUR|n8;+|!-HkMRKDHgC0C|4xi9%gY(9h?`xSZqAq&v<*{Dt4bP=~|phK{w?RJSw5f z)N!&z+LZL9lMc;xYd1=if!)kGi;!*M7{#WG9+;AO_WuBbyripdlUCh!fm*F9aVkm# zq|262wpJFRMf?PMCTgQN!q{q-T9}=B`B-o$m32`d_fk2MJO;W!%{MqoGoJXiY@~sH zaeH1YUx7j5S%l23m$JB)J2Zr?ZK)#G@enk*sbuc@KUhbnIFFIOAJvrj3eJF#6|SU+ z@*P%AR5nz!fUcuM4rwNkTgXu+*{H0yPfF&U0{L1Qh#gI~5UI>5SeQXmbh)yjwV5z+ z!x;%#E*;9uO0<-}Jv6S_%Xgf~djfh3?Gx0R!|&IZPeY9QI#gC2%6s+$GfCuBl0hes zAX@jdbAhs}!8lI6Ps9(*Oi^l0pv$Q#S(a6bx?Vaf67SPyGSygmO~s7Xc?ATHy2qp> z1=Izt6_*~?+NNmik={!yQR{2PG?Ka&cq&i2GND>L-oMHbDJe{zsY~|s=~rf0B&0Zm z-6V~`JpGUiSd(3Pp4;t(GP#5$#O;|k8W{ApB5^dCCXAfAJ2^Q3w%JN@r($dX*m*{L zpeWj|39mSX8EQP^nYkgWoBQCdn}_R-VTyc^qf`>(X+5Gn9NZhlnLvHVCREe&@{`wP z4*ZLGRGX8~k(Ap_ZwB%S%(U2ZjbfC$2M3g=W|^nHwkL^}eFTLe)Rd?mmN45jNk<$@ zXm~AZ(FjN-N<9D@!6z1jE@JAjT0($W9^{DU;6Rl)mSwRng7wm*xS?{C-qr_{XNO@- zL)cogGTnte;m<07Ngl#(BZ`ZGaRWG(MrLA-G-XTm>*I(+E0D^&$k6sh$qEUPnj zn(o~8M37IgkYI-nu4USD4%AYV%(^qFAX^|N;XYsx3F{P|LWk*-=XrA@-JmO`_KoiK#qNw6o zrX_Q4ADGK!XW%sU!;|=0voM0Tsj~}E`Kds;_{E*V$7S8Y4ysXx<-%p0NeC7sfvG)A zL{ux2k`*_bVdNpEkuIQxc75#1AzB{#v>!Gn56T|k#uA`b>6EFaS460yW!EqGoeF&K z9QBzw>N8>by*6@9r5gpf$;*D17mMyz$cGMXM z1*~5m6vlR{(JI+O&tN=2`|X)}V~;i*3M4v#r?kQKLl0LcSYequTfvkd01D7Q`$t|M ztW*^>OqHLyy&+GK=1T>oIjjzvDI|MA2dr4~YO=JnTjH4L^R00%;mNN@txLNm@fm|R387Em`oh`?dRa2+Qf?6AsS39%j!@Pdz_qCw%BH5In_4pW3T6;{-ce>_ zYG%_w# z?Gmj<_W~9#f!A}Io~f$Rf@u;nb7b>vg%R)D;~h0D8C`v~B@$mPs3|WX5$CK}oF>Fh zRwUG!jG=6(CqZFvD3Puisak~cY3;V-iG1j_TTAjB&xOaFRGPq$7em8UdVK-8R;lVt z!tdJrsy>^?B<2yWOUu15?KQ~%ACd+ z#dQxrvuZ9BuT8))eqp)qyI6Fr?)0j!=WG2@DXA-7f!>N)cm}Ne>n^q>oM|e$hizg< zm7uP33{~ckmgSjcETmZ=z6aG3xu?5k%!RB#&K^+g?deT6n-3;d8eIAdiIITa@Y+9UA4aFT?L`HwbBZ- z3%i7?(`zd-t)DrR!2NDca}B)9b!kT%?X+!3A!%QLBcFs`66)H}FU1xXaKM^o;n_#h z;#59wE5ur>8bC!i4AyGo79^K0+4<872>5RjRUQ?*+W^m0(9()YIa;^_%#j@2JjN4q z6*NiCyPYZrDLrD}tTdOT8gSV_5`|x(5l%i<(2-YD@XWhZ{>GnDZq~ZoNPphoarf0%WLsN?~m z!^P&-pr7WyY%Fl;M%Sos{_FO^&^p6_K-ySf0jGx=Yfv`uYxcs&4U%`LD3AC`$EUp-7u$$PJ6R$lnORFtRIHaM_6<~Dnj>>K=d9@`k5`1HcsHW3Kq2!!` zSQ$XtC0k9jIz%lts)@9uq=R^vX~0J)dy-0ke|^ktY0TP?esCfaeQY6TW3G@XCN_H+ zi{#gth`O4|m{8i*iDvy+fSh+U!tbTjW7g4IbdodGcQ!Vq4SXS$o9*$9sO!G)f^ILg zY}p9KDDpnoYoAC`_U3xRNx9T}AuiM-Qzp{uJo2BSDH_6%?8C?@3PtkRi-HD`bW~g- zMgGk{DUg6XOi{Bc`9%fyS95#s4xb=%`a2*5_AS_KG7CeEwubMKw4*hzVQa#(C#j93 zrz}dU$i<*T==Q?^i^J$p_QOj6ItVA7q10=xu+KPk2L7lptBMf%d&b9T7UDeTq2W4` z$E>Ep2eg3&jW(qX5UYM^-YVWS)tQ!~vmlof+dSw|NIHNbr0OhOlpOQ6ZAWM!;IdR} zn1*0qD^%Q<@mr`LKrkUtcjT3ABEaC3p)`C+Hj*uSCT%avP`|TW%SZ0No)gnfD z;OyL^PP>#Rv{HN4-q(X_SOBCAAaX@E0^7kgJ%y-(fTDT;Ol=(U3?JiM*P~#RG&g=_ z2|mqZ$+p>Qyj>Dc2hZREt<&qG~B)n!f5RhGSiY&HX%wa$zdA zRbSf?mexw3l9#F1!YQsh%#(>Fn$4q9srZ<<UmGiX|(?URDH4KiW_EU z7SdZAs%^3TVIHNcI>4;VDK8+QSxRnfZDFOLwZ(}YG`U%MM3F4Za^Yt(gKdO@dYeIQ zFpH#}U|Lb;&8)Qh;$0PKI&(^XZfTZVKqW;^5274pUTYgio4A`X+Twc3x;~-qgzymN z#*Thv{{XBa7Z_BLQ>j!Y*}rD{%UXPi(kA!>TShQ>$CZ_|vPzUSu*@}ykC_X(ZZ&1C zch>7Szno9WXcGg>Jkw6CwY=V7qBKy}CuHVX)8$Yt{Gl1fOVo5sPpBq~P&~xC{{XWd zHpD8u{NvSlj}udAbP9*0PBq#sl_3a9!jx1-g2FtXT{qvXQ+G5CQF(A-Wy}>&P5o3o z^avxALKLK_NJ^9~Vp0hn*cITFmxU^AsbRd~)TEuRQY{5CP9O}WLon0Uyb`1ffQnFn zKms^;if@7H7UUE3$5gYZ0C$t`h#n(Wq}ak!a?6-Uq(5Y#0YHxh!oRGc@M>@iH0{&I?a z@ni9K5=d3$rDbFu54g@{ElJpE6;2FMMk1$?{@g~8r*6rYW71fY_)LPv=3d_A7;aA1 z8bYxg%(7XhxVM9DHkBb+jfIK0x5hZ7YEqh7Wv|x}n{_8+>=enbM2Mnz-quV(m}{K~ zF>xZZBESX7$#nU+B9-F>W>U3MOOg%;64C+`p|L&?Cao(SVV&F-n<%JFGk;kjUf8tj z!zFR`3)#Sx`Q0KZUJ^gqVpON{+afNUO#G@RW!^8PB}^qQC0bcSr-iK=%Y zBQ+|;meUBIY)nYZHMnuLB>O~pQpQqw#GMOHk?t|+MdF%NlS@;R%^aZjQmn>2;Z||C zt23^$EZdJMNgihLq-%4gDR6pQ4$KOU8&JM((p3BHf2s#PJu;0UYD%0^)|SwKY*eCu z{{T<2I(T0^lR%eL!6glXm3c=Sj#Jv70m+8crWUTum0H&p+pVF^t;-^gP*W_e1+5&o z!c)_*y-l6TVM-ojU#c0Fs>%WUDVu(HjHzNuWVD3BUYcoHn^JP6S&6u{q8mv(@>1lW zu*~6+t;xB2S-=c>b&=_mhd}QuC|LGKlu*2rd7IfTTzliw7-G8Itr}i!?2Auj-b%Fu z5n>}&{G=t5jan#1X0U;&ykjhvmD#eapy}R*hBTEw#JTW{Z?R1UfZiNVqgWFd%1=wS z@4^-_q?h|Qeh?|pG#3S2M#1L-V;ac~+i?3M6^|H+SHzX>cyeq~O55@xyI+q@# zyNC3IHoSb4j^v^Ct|#Iq>~wbHIZ&x)rY+uWSx=FGz;-bqQ^hY;+6;DSX}!&j$%w>~ zb`i&}y!ZGTAgc}3l*+;iw2KZ(Xe}w{c&DV?EWDMDT*O#(Y259k=Db8^Fv+#}lMjQY zr*3f=!?zk3>`5lth}~zn9?;EXleUmH=d7h2?|2}2Sz1zn*(L^-qkkWKdof8xBL|kn z6VqsEYuCassao}h^IZEO0gF0XF(hAeyd_$DVIXBXUfaQW0v8!S*kSpy2~J=T4ej10 z!aR>ZSgAEO>Jc*S!ie>w)m%cP)GK&qYF3D(3Dl_$v=nR2+z=dn)8O`vhBS;IRaAAOE{TBw+vM(x^ zJT^8uAVgIo31S>yPV~wxA=jm|6bII{wuLBe0a4c6?GrSP9OFu4oXn!BNLz0>7o^*I z8+pa3G=+H`Mj)O+`8mguJRC6Uu|-M5zqT|ud5nkp zp&r?`{@7c6hq{OgvXtY!vX-T(Ua>lp0<~~dE;)#@zXv$Uz;8%NAMpv9Z;E6j z+?kuEgfM}1s7xVQM_U66;k!&tg!PJ=Q%s{U(ufU8Hk}UEND&U2gTQF}gY=9DP1WiR zGRh{I{8~b86@4Jr1z>8{FsG_~xXm`4Jy%=>YFWLzsTR{isXU@~-dRc6%;fuyXs1-a zH4_8#gCoi!`Bki1h~VVHf7gjW{6qcd$9Od3sVQA(cz*TNe_AE&^`I(j9*_KMOH%f2 z@Zt7r2Y8mP=`~l>l^mehM6{O$UXZ9aHqCiCk+AeX`{S|R63jZ{l&a!xPyUns=%&=N z*ee1BMbLC{WAuz6`L#TPm90v+>v%Q%5I=A8;(wxl-wGTfcnxb~`X~L-oRY-`N_u!H zDOx%~KMCdqJ#}fN8+?{g@4OgH@L^K`g;w&P2~Yc>RNfE0Okw6_>%^hcbzV$de_Aw* zl3bHc!1>Ceo|tiDo2Zj}!y=%g^VRQzgTeO+*0q2BC;ic{!2^R|yGGygpZ7#K9{I2qLw zXCGRWJ-P@RH6`aHIG{JlFEBYw@^d(#+3Klh$5&r-xKfMbJ0g{z{vh4e5 zA380Xt#8q&5;XKE=1XY`vFIVxa9J(PreQU;=1J1>g5TPX=lELW!itw$U-VJ^=+aV) zSYoH>0IGDT?`Y3UHs=QCgk*oNmOuET`_Z3*Yk#hmfB1v@(Ki|%Y^^E_%&Yhj4B)AL z(zwHl^%`?AK2c`9!Vv0msjw(qK~dJU;r{^QkMBmm1l?;Z{)(UPM7JL0JM;p~*;hD#tSd84 zU(PLG!B`iyVbAEv{`7N9aDlmzW!4=Ua+Xiq2{@{DCZC`)!&W^Oc+b1tOGrN$@5ESv zRY~Ql{{SYP5+IgehRT(c^kh~Y2tPZ~lXLxO=T{3*Px;;7=;`}m+LPoGX#pZ`$9Tm} zXm8F9PYY4Xs`vDC{js%hy%({oJLTx<`(iw)AjwhH4tJZj_b_*a>IuX2xrdMA9@s>? zyd-7EQs>=w!5WK8qwR;6!vLT&)?cvY=*atG-8fZ>o$ve%Rrv@aAGpN!O$*24Tk1RoS@6O~;rq9$LE{Flloc+feX)>j}CBW0qRu;;7m%t9DJ^5xF|DaONLw zRizHuV^PqU6?SmC;+C^=P0STP!%2r!RI0+%uNh(e=;!Hef+-#o&(5VPHFiKY^;;_X;Y;Cy(7dXw9M`b<0k8F=ey~{O=j4u51womle8U^eIZ-;s~WUZ|O~> zeezyl50pY#wpDc0-Xs&kH&k@5Km5vm*qU9WtUn-01dZXqo~8?j2b}rU$(=ehpSB%O z29`&9xi|dUL^hJmjbES?TuNVUv8va9U=b+ODmEo2*$0$P7D!TxoPFnKo{-?1mR-(WG=asEZ|#YyvaK#WOhH^*SoX4W z8z%cgL9kL&eRjBt#yh0@!P%zmqO z9}@+MmQiE1aD+E|0(80XjP1%#JPdBQ}P!E6r zUzxm4={H#dR!&#a7*d~?LrNa9K?(!gZDOdevMF^uOH-6#Dw}p_GLviFEjEE|HMV7_ z+AkR!rZbI$EsF5tP%zt{Zx{PHXcTdbj3v)M*pat)vAi-Q%G=$cZUan?Z5PI#qW> zJ6+0`i;e??B?GL6Tz+H%pUuCAh2ze(MYh{&NI=4o!%(3&9PRbe% zqT}s@6v(uUKTW4hHkG#3K3%0Cjq9PO&!(;Xpq2PxJI#s|Tq4RVMX;u3=xR-mm3Efo965J=g&h`s#aGm3BI z!jA#Fjv+r7&RByES>~GSfek4j4Rnt~@UdV1nN!?5sl*_81h4i-o3RSE5$Qf1r?KIU z1v_VPO7;W~??)SzK^C&YE1t2d=?J}}MBAKa^*oe2dz+51l^&3Qt@&OwR|27nD$)|J zkdnATUz8;M0C44mbhK!!LUVL5>V_z*tR$-c0AwdNyT*!v=L-()0HMkg?bZ@hEIznR z?qagLfV-Yh**#+luf6RED%K;B*t_cqQmv@o5u2Q4_0&OBBX^B$3Csj&m~FMl#T8mL znh;by(X8BzEC|^;ZyLW-3C*k|p0FSl2s?Pjvqp-qyeB3Cx7S!f-ZWt)TEp+S4U=GR z&NX<|?+7QXJu#`A=*prF<49#jGfvk9G&4;TDV9&Cs4ifWn%1`ZTHY3p z&@_gUpaqOOeIl1O29>s)qNC!YMXIEm=`bcMZ8ce3pBCo^|&8>78^>9;)~PlVGpdS#GwHdI*k;r>%~ zTKBT6-jND@nnH*i)gGwfO5K{uw3C-RidR2d;56DhrK#0KI+Zy(N>D+`+7cD0z3w(5 z`f|KW0pkudbmbYRE4Dho4_+=xR$f~wC@QkF@`+kDE0|!V6D!O%j!anB@7CM`#ZB7& zMj)Heh~vGj*`apRYAKs-Djft(pxlB+zlhyTg zl9thb9bz2X_OXc?s_y!H1V*?|w43c7%U-8BtMfan*!1|!FqW5V30A`c&Z6qNh zmA`4$17%m~97(M>f6?Tn+8)xSeUMo)oX=)X${!fYIlA@#0H5GEp(##iA9z zCMs(d!EzV2=wh3g>0+h(gi+eN*jtk*J{tFr_M+pfzv$E%mFhA}IQCv2 zYgs&(w#Z&PP4=}qazVIDD)^Y9UT@NB63p+~I)r=F2iF!JHL6YGDf2Zj*JPBWApjiK z9wq=;J(Y5v;Fu3Tw&uj;%=Q&X=4 zE81N|=FPp#aE>Ocl$hJ{<4=mLTUlndthy^+d&9xuZ8SXMtQ<^QPw+9X^5I{E#|H9Z z{tJO>tDvssrP=~bx^jRnE4&6AN=G-+J<%EXPjMqj5&G~YjB#w%BbI5N#VoRg6{rJp zPbgBFYN#odP9Rr$JvW2?M*v}#x%LWK_T~E{%yq=5t59O_lf|Bchv`!CYC?)7(mTU# zHTcIgpOqCJOA9}bvJzEu73y)M>Ey@ipSCdLIj}EgJ;&{dZo3v(dG&<$fNX9eyZiQ= z7rI#eQ})7s{iezOBHx;R*v8s)#8{<$3^rG7j?rG6Z#D&oVR8JE_QFm#o4x)+ud067 zrE8Eygk6pHmpkbd-`~95wd^$hPwj-9Z#GZyAF6)X7I21GWy=`QS?d+y#`AyfKUDp( zufKV|j1&2%?S*Zupe!=w%qKioryNb|aL4K&wi0o?=Ptwbe{523gawD6tZ1s+TG3t{ zZ8>}Vg}*TUv9G^L!~VlV`5(3+x9A0hpGeH{UW{otf7p2UKWuC7(sus<#9Q+}Y*#p7 zSUI(gX6vk1=Ne91_>2B;?S%dMPZRu2zccp1pHJ);eair=tS0u}06zTZ4*iJzAKM!H z^PC^-Z~4Er75jf+;6Dq}6Ps88IL2_3a>wfa*h$7yWF1-kU)v7xfDf~H=^85O&H%pr zX8!;wpVj@alZ>YS0NkI^{jfJrfDekb7ldYjC1WX~Kn0)G{ji_EDbB3^ukC>@;t#X$ zc+ovz2k**o?xt_~pSCn{gypUBKdJj-Rr&yURxhk1s^?R91312H{N{gC_Qt;Zrv`yc z{-^DScfiBU-Z8Au2ytxZz+X+gY&8WzHlO-p4b5;E0de9xJXbhC(N<84e}fYP?qdOGx`(WN@k-(cmpxj}+~Al9;$wZK0ZQDq;!H+; z^;9fAQ8z!yhzw6$nw*pDrX9_73jw4;lWin~bnv(=ptQ*~gU(9I~ zh7@z|T;eAbb_Y(dQBcK`Q;z0sz}N!T9V1CNye>r*L8!3#(SbvpSN{Nar%Au09Xz9d zcP9^b(pB(`b9|IeVyh`K>c4vAK;YE#v~#~vdUAQTmg1c$Nm0Kjk!D>++DAOyJEE7c zLxvqGU4iEoT|H!=YrIx;CR|I&(DI8GpQ2NKkl}4z0XBtcYlwE{-(+*4U2pD(FUmB# zb}`%X=NczXeldwxzi868)08&zOh&f%!bw*v2-jaeafN#7G>KSw8R|NVmzhUUybhRJE(BlyxW0 zJBiX>>qV{g0E_*W7zAIPWeWVgDjl3wx$}2PSOL(?eJq9JNU`EQi!m+l;*z(===ubVQ=4*eSBT} zBh-RfAnY`S_CO0;k%Xys4Eml?Uj=cZP1QF_@waLALO%l-$NvCZOZPeUN2?Vsk_MY| zhP@d(fHk(Ta1_ri4h!Q0{+&x7qU2%Vt}iyc{V!gKay>=p>9wpijTRC)4+xrE(0*r= zXMc0vB%W8xRH^Cb+-=BpjsW7Oke1P2lu8qz`4yW-s|>nrs2XVvmJ&G){xDcqx#ltZ zpYckQ{{Zf3Pa!P7wi3VG{{V@{t%)U%l)C=d^zvHJ+(s7ebsE8S*mdrCcyJ>Sr3*^y z%qdE+3hWi#_`_d-TtR;JBWwCHzS#8w*h;kkctd7cApXcP=p?<*F@6Cnx7QJ%+fU%e z{{Y&I`~g;m_=tZ-{{Xr@H|XiMfJVI?H@&PQJ6CN6-*e2LfC|U|0LahuZ~LQvfGV*6 z0L*IsjsF02dSB6j+z3x#EwGBd^opa+KY&`08saxE{{Suj0CZ>I8ht{ZaDf?q-;5^v>0L&9!##8pkqD;DVHvO@lj+<;EoPxd2JN^P@2Ka(+ z`J~4G00A$H{{WZgKblN>6w9RY0@0;Qru%upZ;|ah_4o>U{{ZLd-{#R7_zHM`ucv>T zM0ya*rpHK0mPodn!fx|HwDaNMOUM0vJMC>Slfak1{PgGZX^%n)U{1EQAyVnnP2suF zZ9M#V5cR*$v!BhT5_lHj{{UW2Sbw@qdJoake6Jbk>E{b|fA||uJ^lioApZcDCqGd! zhk-5vFI$}cZ87LSM;6-guEYat2shfmQRmOVTciDVIsDpojeY{0BU;?&^J$MjmIbyD zp1@mS4|T3H_y*c255Q9Q`?Wd0`!vE&0~|l=xv}~Qk3e=Q2X81(Vv)<7PU{5{fjkXx zAM@Pj^J$Fy2f4r9sn6!q7vW(&1SGOFu+|mh{tk*Ez6vd{y!C07l_uJuJ=4@e4+LB% z{Pj7n`?N*ySsgco_5)%Cw}ra0Iw+68lCS=Goc%<`egqVM*E5Io6TDubk#AP^g!Tha z1)(_$X+xd@vQ`{5X|l1c@+WwB@MU)Y06b1B^bz(&JR805KnAVc^$4yEDJ2kFqYJ!b!P=_9Lg1LZ504r7QRyApZcJr$1F6WN+|8Wb0L& zKcbJaE^^MWkih2(Qfn+Wl-S`KM)gV0az4mq{tL>?EBD1hb!2U-e#p8z5DueHDA!_> zxY`eh?*iLpDfk+dMv0%E1M`R33LG7j1ZJL|xBNl&Mao$oP=dmC0tKkEQJ~ z+RoHHu8*=D93Q8F{4#xC^@rIOplk!YY@s`NLGc>H4WJz>ht%3rN=&;YYEkbv>CU6= zF(LQ1$Q{2J0tk%>~FAZ8%%c;Ap4#(0au ztl$qwEzHYOt`2C;GeD(Aalq%vxKca}NBV2yK=S?Z>nXK^9ii@)(Cf4$*ys)QfN?!A zHhEt7Po~UUS65^Fs6HU5IRFC-1YBwWfKN+!e;U7ejhVN<+N<9N@z8Ko2)#)|9| z0UAJ0r8)+Vuh?Nemht{EXWIwF_7w)Ib6pMLyyLx;r;k%0K>qPDf3Ds+B2?Ew9ndi<1eI?)aiy(h0 z5?^xKxV^gT3CMI39ZtPIFoo;ov7Yt|jU0G=*3 zK6-toG+aU1N%Fi8i(gxwe%Q`kAa(@zYK!{dA2>qXZ}QWooAZb+(FJ8FQcBV_NLB6U zZKDl$;sB)EgRk}nYXLD=mG zHogA<#iDlsG**GKlW#adbr&~Meen)$culXM2Uq}@E;fF8Z|4avBL1>;h=Mg54`d-i z$H%SUw^d+F_Ne5f_-hF+wl+|?@rZ1I+S@`%xZiULJTNA^M*jdPd*LP2Th<=eH z^n{dvISuuU`OSecR@mKX+pHk1v9ia$A~J*RFp@sVyP&dQy4|!=VFl*Mzi6KwVjzHd zLQR0tJfKo&IVIHdK-{=A-&jhYZr_X^_=YE-)WQ|~uCbf_fS5B3k*kS>`b!`uz9Jb% zTNCVrTy%j;6<|ymmaprk-f^Ka&b{zr7@M6rZ5qFfDN67@36Dr({)>1TAo{^rM&AY1jL`C&Bi~{|256ayEqOE#DZf}2Ylw@QH_Ythy#`9=QWMnsjgyv23<}{6FCt;Q{GA2xG zlSNkKV+pZ2qaz~UC`O94@gGbjO0dmqTS&;rS8jm`C#IK#g?Jdq$Y}+MHn)Uo_R`|w zGBOj$jVNoUI6>3wjEsy_*-X(<15fZ_qP1Mw*^{QRk&(1=*$tWw1Zca99d8+MND3MV z$jGO~jWY=Z*a5s{?aI-Sk&7LPTzzh{(v!KTyoQz1*V#v}9yAo3MHFL~HMn*f{P}!od z9~eTFa7Md`$jH@Z!3a7IeQ#*h$F0l8GBO3`RtVO|NKg14QIU|hJ=7ruTj+g}qouDI z83V(>xD&pb+h|D^w$YK0uenCKSaOXLEz4NQ$Q#PQxDa>Klpvk2c*w}g{{WwnU53dD z+emFkF}JcZG7?L50NFP@`a%l2-CZLiBRP3nA0i3rOlJNOk&xV);0<2-h{7$k_Kb{$ zEK*&`PbSGe(GBLew^+!?N!%L|gpxG3z7kIV02s)~&1%2U7=v$oYTyI4$I}@Z8z$c% Ugq;n~I8E+$5s{Ef2{AMO*-^=vLI3~& literal 0 HcmV?d00001 diff --git a/m0110_usb/doc/teensy.jpg b/m0110_usb/doc/teensy.jpg new file mode 100755 index 0000000000000000000000000000000000000000..96e93e7e24e34098b8e8f8f6f9d8d2b5e816eebb GIT binary patch literal 50081 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 + +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 . +*/ + +/* + * Keymap for ADB keyboard + */ +#include +#include +#include +#include "usb_keyboard.h" +#include "usb_keycodes.h" +#include "print.h" +#include "debug.h" +#include "util.h" +#include "keymap.h" + + +#define KEYCODE(layer, row, col) (pgm_read_byte(&keymaps[(layer)][(row)][(col)])) + +// Convert physical keyboard layout to matrix array. +// This is a macro to define keymap easily in keyboard layout form. +// TODO: layout for M0110A +/* M0110 */ +#define KEYMAP( \ + K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, \ + K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K2A, \ + K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, \ + K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, \ + K3A,K37, K31, K34 \ +) { \ + { KB_##K00, KB_##K01, KB_##K02, KB_##K03, KB_##K04, KB_##K05, KB_##K06, KB_##K07 }, \ + { KB_##K08, KB_##K09, KB_NO, KB_##K0B, KB_##K0C, KB_##K0D, KB_##K0E, KB_##K0F }, \ + { KB_##K10, KB_##K11, KB_##K12, KB_##K13, KB_##K14, KB_##K15, KB_##K16, KB_##K17 }, \ + { KB_##K18, KB_##K19, KB_##K1A, KB_##K1B, KB_##K1C, KB_##K1D, KB_##K1E, KB_##K1F }, \ + { KB_##K20, KB_##K21, KB_##K22, KB_##K23, KB_##K24, KB_##K25, KB_##K26, KB_##K27 }, \ + { KB_##K28, KB_##K29, KB_##K2A, KB_##K2B, KB_##K2C, KB_##K2D, KB_##K2E, KB_##K2F }, \ + { KB_##K30, KB_##K31, KB_##K32, KB_##K33, KB_##K34, KB_NO, KB_NO, KB_##K37 }, \ + { KB_##K38, KB_##K39, KB_##K3A, KB_NO, KB_NO, KB_NO, KB_NO, KB_NO } \ +} + + +// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed. +static const uint8_t PROGMEM fn_layer[] = { + 0, // Fn0 + 0, // Fn1 + 0, // Fn2 + 0, // Fn3 + 0, // Fn4 + 0, // Fn5 + 0, // Fn6 + 0 // Fn7 +}; + +// Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer. +// See layer.c for details. +static const uint8_t PROGMEM fn_keycode[] = { + KB_NO, // Fn0 + KB_NO, // Fn1 + KB_NO, // Fn2 + KB_NO, // Fn3 + KB_NO, // Fn4 + KB_NO, // Fn5 + KB_NO, // Fn6 + KB_NO // Fn7 +}; + +static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Default Layer: plain keymap + * ,---------------------------------------------------------. + * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Bacpa| + * |---------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| + * |---------------------------------------------------------| + * |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Return| + * |---------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | + * `---------------------------------------------------------' + * |Opt|Alt | Space |Alt |Opt| + * `-----------------------------------------------' + */ + KEYMAP( + GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, + CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, + LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, + LGUI,LALT, SPC, RALT + ), +}; + + +uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col) +{ + return KEYCODE(layer, row, col); +} + +uint8_t keymap_fn_layer(uint8_t fn_bits) +{ + return pgm_read_byte(&fn_layer[biton(fn_bits)]); +} + +uint8_t keymap_fn_keycode(uint8_t fn_bits) +{ + return pgm_read_byte(&fn_keycode[(biton(fn_bits))]); +} diff --git a/m0110_usb/led.c b/m0110_usb/led.c new file mode 100644 index 00000000..f76545f0 --- /dev/null +++ b/m0110_usb/led.c @@ -0,0 +1,24 @@ +/* +Copyright 2011 Jun Wako + +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 . +*/ + +#include "stdint.h" +#include "led.h" + + +void led_set(uint8_t usb_led) +{ +} diff --git a/m0110_usb/matrix.c b/m0110_usb/matrix.c new file mode 100644 index 00000000..f045920c --- /dev/null +++ b/m0110_usb/matrix.c @@ -0,0 +1,193 @@ +/* +Copyright 2011 Jun Wako + +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 . +*/ + +/* + * scan matrix + */ +#include +#include +#include +#include +#include "print.h" +#include "util.h" +#include "debug.h" +#include "host.h" +#include "led.h" +#include "m0110.h" +#include "matrix.h" + + +#define CAPS 0x39 +#define CAPS_UP (CAPS | 0x80) +#define ROW(key) ((key)>>3&0x0F) +#define COL(key) ((key)&0x07) + + +static bool is_modified = false; + +// matrix state buffer(1:on, 0:off) +static uint8_t *matrix; +static uint8_t _matrix0[MATRIX_ROWS]; + +#ifdef MATRIX_HAS_GHOST +static bool matrix_has_ghost_in_row(uint8_t row); +#endif +static void register_key(uint8_t key); + + +inline +uint8_t matrix_rows(void) +{ + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) +{ + return MATRIX_COLS; +} + +void matrix_init(void) +{ + print_enable = true; + debug_enable = true; + debug_matrix = false; + debug_keyboard = false; + debug_mouse = false; + print("debug enabled.\n"); + + m0110_init(); + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix0[i] = 0x00; + matrix = _matrix0; + return; +} + +uint8_t matrix_scan(void) +{ + uint8_t key; + + is_modified = false; + key = m0110_recv_key(); + +#ifdef MATRIX_HAS_LOCKING_CAPS + // Send Caps key up event + if (matrix_is_on(ROW(CAPS), COL(CAPS))) { + is_modified = true; + register_key(CAPS_UP); + } +#endif + if (key == M0110_NULL) { + return 0; + } else { +#ifdef MATRIX_HAS_LOCKING_CAPS + if (host_keyboard_leds() & (1<