From 813c9dcf223115293de070e327923ee5cb84389a Mon Sep 17 00:00:00 2001 From: suda-morris <362953310@qq.com> Date: Fri, 10 May 2019 13:52:23 +0800 Subject: [PATCH] ethernet: add eth2ap example This example illustrates how to do Layer2 packet forwarding bussiness between Wi-Fi and Ethernet. --- examples/ethernet/eth2ap/CMakeLists.txt | 4 + examples/ethernet/eth2ap/Makefile | 8 + examples/ethernet/eth2ap/README.md | 114 ++++++++ examples/ethernet/eth2ap/eth2ap.png | Bin 0 -> 88732 bytes examples/ethernet/eth2ap/main/CMakeLists.txt | 6 + .../ethernet/eth2ap/main/Kconfig.projbuild | 111 +++++++ examples/ethernet/eth2ap/main/component.mk | 4 + .../eth2ap/main/eth2ap_example_main.c | 275 ++++++++++++++++++ examples/ethernet/eth2ap/sdkconfig.defaults | 1 + 9 files changed, 523 insertions(+) create mode 100644 examples/ethernet/eth2ap/CMakeLists.txt create mode 100644 examples/ethernet/eth2ap/Makefile create mode 100644 examples/ethernet/eth2ap/README.md create mode 100644 examples/ethernet/eth2ap/eth2ap.png create mode 100644 examples/ethernet/eth2ap/main/CMakeLists.txt create mode 100644 examples/ethernet/eth2ap/main/Kconfig.projbuild create mode 100644 examples/ethernet/eth2ap/main/component.mk create mode 100644 examples/ethernet/eth2ap/main/eth2ap_example_main.c create mode 100644 examples/ethernet/eth2ap/sdkconfig.defaults diff --git a/examples/ethernet/eth2ap/CMakeLists.txt b/examples/ethernet/eth2ap/CMakeLists.txt new file mode 100644 index 0000000000..5a2b416c7f --- /dev/null +++ b/examples/ethernet/eth2ap/CMakeLists.txt @@ -0,0 +1,4 @@ +cmake_minimum_required(VERSION 3.5) + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(eth2ap) diff --git a/examples/ethernet/eth2ap/Makefile b/examples/ethernet/eth2ap/Makefile new file mode 100644 index 0000000000..fe024c7f62 --- /dev/null +++ b/examples/ethernet/eth2ap/Makefile @@ -0,0 +1,8 @@ +# +# This is a project Makefile. It is assumed the directory this Makefile resides in is a +# project subdirectory. +# + +PROJECT_NAME := eth2ap + +include $(IDF_PATH)/make/project.mk diff --git a/examples/ethernet/eth2ap/README.md b/examples/ethernet/eth2ap/README.md new file mode 100644 index 0000000000..2a4989440d --- /dev/null +++ b/examples/ethernet/eth2ap/README.md @@ -0,0 +1,114 @@ +# eth2ap Example +(See the README.md file in the upper level 'examples' directory for more information about examples. To try a more complex application about Ethernet to WiFi data forwarding, please go to [iot-solution](https://github.com/espressif/esp-iot-solution/tree/master/examples/eth2wifi).) + +## Overview +![eth2ap](eth2ap.png) + +The similarities on MAC layer between Ethernet and Wi-Fi make it easy to forward packets from Ethernet to Wi-Fi and vice versa. This example illustrates how to implement a simple "router" which only supports forwarding packets between Ethernet port and Wi-Fi AP interface. In this case, the Ethernet should play the role of WAN (i.e. it can access outside network) so that a mobile device could get access to the Internet when it gets connected to ESP32 through Wi-Fi. + +**Note:** In this example, ESP32 works like a *bridge* between Ethernet and Wi-Fi, and it won't perform any actions on Layer3 and higher layer, which means there's no need to initialize the TCP/IP stack. + +## How to use this example + +### Hardware Required + +To run this example, it's recommended that you have an official ESP32 Ethernet development board - [ESP32-Ethernet-Kit](https://docs.espressif.com/projects/esp-idf/en/latest/hw-reference/get-started-ethernet-kit.html). This example should also work for 3rd party ESP32 board as long as it's integrated with a supported Ethernet PHY chip. Up until now, ESP-IDF supports three Ethernet PHY: `TLK110`, `LAN8720` and `IP101`, additional PHY drivers should be implemented by users themselves. + +### Configure the project + +Enter `make menuconfig` if you are using GNU Make based build system or enter `idf.py menuconfig` if you are using CMake based build system. Then go into `Example Configuration` menu. + +* Choose PHY device under `Ethernet PHY Device`, by default, the **ESP32-Ethernet-Kit** has an `IP101` on board. +* Set PHY address under `Ethernet PHY address`, it should depend on the PHY configuration of your hardware. You'd better consult the schematic of the board. By default, the PHY address of **ESP32-Ethernet-Kit** is *1*. +* Check whether or not to control the power of PHY chip under `Use PHY Power (enable / disable) pin`, (if set true, you also need to give the GPIO number of that pin under `PHY Power GPIO`). +* Set SMI MDC/MDIO GPIO number according to board schematic, by default they are set as below: + + | Default Example GPIO | RMII Signal | Notes | + | -------------------- | ----------- | ------------- | + | GPIO23 | MDC | Output to PHY | + | GPIO18 | MDIO | Bidirectional | + +* Select one kind of RMII clock mode under `Ethernet RMII Clock Mode` option. Possible configurations of the clock are listed as below. By default, ESP32-Ethernet-Kit use the `GPIO0 input` mode, which gives a good performance when enabling Ethernet and Wi-Fi at the same time. + + | Mode | GPIO Pin | Signal name | Notes | + | -------- | -------- | ------------ | ------------------------------------------------------------ | + | external | GPIO0 | EMAC_TX_CLK | Input of 50MHz PHY clock | + | internal | GPIO0 | CLK_OUT1 | Output of 50MHz APLL clock | + | internal | GPIO16 | EMAC_CLK_OUT | Output of 50MHz APLL clock | + | internal | GPIO17 | EMAC_CLK_180 | Inverted output of 50MHz APLL clock (suitable for long clock trace) | + + * External RMII clock must be connected to `GPIO0`. + * ESP32 can generate the RMII clock(50MHz) using its internal APLL. But if the APLL has already been used for other peripheral (e.g. I²S), you'd better choose the external clock. + +* Set the SSID and password for Wi-Fi ap interface under `Wi-Fi SSID` and `Wi-Fi Password`. +* Set the maximum connection number under `Maximum STA connections`. + +### Build and Flash + +To build and flash the example, enter `make -j4 flash monitor` if you are using GNU Make based build system or enter `idf.py build flash monitor` if you are using CMake based build system. + +(To exit the serial monitor, type ``Ctrl-]``.) + +See the [Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/latest/get-started/index.html) for full steps to configure and use ESP-IDF to build projects. + +## Example Output + +### Step 1: Initialize Ethernet and Wi-Fi (AP mode) + +```bash +I (508) example: Power On Ethernet PHY +I (518) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE +I (518) emac: emac reset done +I (518) example: Ethernet Started +...... +I (538) wifi: wifi driver task: 3ffc7fbc, prio:23, stack:3584, core=0 +I (538) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE +I (538) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE +I (568) wifi: wifi firmware version: ec61a20 +I (568) wifi: config NVS flash: enabled +I (568) wifi: config nano formating: disabled +I (568) wifi: Init dynamic tx buffer num: 32 +I (568) wifi: Init data frame dynamic rx buffer num: 32 +I (578) wifi: Init management frame dynamic rx buffer num: 32 +I (588) wifi: Init management short buffer num: 32 +I (588) wifi: Init static rx buffer size: 1600 +I (588) wifi: Init static rx buffer num: 10 +I (598) wifi: Init dynamic rx buffer num: 32 +``` + +### Step 2: Ethernet Connects to Router/Switch/PC (with DHCP server enabled) + +```bash +I (4518) example: Ethernet Link Up +``` + +### Step 3: Start Wi-Fi AP + +```bash +I (4618) phy: phy_version: 4100, 2a5dd04, Jan 23 2019, 21:00:07, 0, 0 +I (4618) wifi: mode : softAP (30:ae:a4:c6:87:5b) +I (4628) wifi: Total power save buffer number: 16 +I (4628) wifi: Init max length of beacon: 752/752 +I (4628) wifi: Init max length of beacon: 752/752 +``` + +### Step 4: Wi-Fi station (e.g. mobile phone) connects to ESP32's Wi-Fi + +```bash +I (10168) wifi: new:<1,0>, old:<1,0>, ap:<1,1>, sta:<255,255>, prof:1 +I (10168) wifi: station: c4:0b:cb:ec:9a:84 join, AID=1, bgn, 20 +I (10258) example: AP got a station connected +``` + +Now your mobile phone should get access to the Internet. + +## Troubleshooting + +* Got error message `emac: emac rx buf err` when running the example. + * This example just forwards the packets on the Layer2 between Wi-Fi and Ethernet, it won't do any Layer3 business. So make sure you have disabled the `CONFIG_ETH_EMAC_L2_TO_L3_RX_BUF_MODE`. By default, this option is false in the `sdkconfig.defaults` file. + +* Got error message `example: WiFi send packet failed: -1` when running the example. + * Ethernet process packets faster than Wi-Fi on ESP32, so have a try to enlarge the value of `FLOW_CONTROL_WIFI_SEND_DELAY_MS`. + +* Wi-Fi station doesn't receive any IP via DHCP. + * All Layer 3 (TCP/IP functions) on the ESP32 are disabled, including the SoftAP DHCP server. This means that devices must be able to access another DHCP server (for example on a Wi-Fi router connected via ethernet) or should use statically assigned IP addresses. diff --git a/examples/ethernet/eth2ap/eth2ap.png b/examples/ethernet/eth2ap/eth2ap.png new file mode 100644 index 0000000000000000000000000000000000000000..39e59aa14fccc872f69dc5d7a752ef6aeded9f6b GIT binary patch literal 88732 zcmeAS@N?(olHy`uVBq!ia0y~yV4BLnz^KE)#=yWZsm7z7fx+uVRY*ihZiRbMVnK#) zeoAT%14GN6Gjul+YlpPyfqr7nF!q2>3d zt#_J#@t@)izxwTIy+Fo{u5DSTAK7dCmuGQQnDI}(Y-u-}UO)VS4Jx|!iM9aS7J#DuxevSCq3$By$BzNxr z&NuTdSO0}w*Ot|)_a&QL6?xHkvm&T2E5yw7{YCry>L2P=`P0{5n|%NLcNXuz@6+Fy zesSUabn5&2nOmMmSKVwch+Fw{uaDfFs7G&ovUh|jE|_okvN-_@S%?C#>oiwHTe@R)#3nf_wG zTPKzUR_4D~vR8PvH*5aHIX`8hUGnF2uQ!t(dky{QFhfh3C=PI(rX;?u!{4 z5BSCEodpe=jLl1C-1)KLVwHkzM44Vj z(l-I$Yw@2w<$t?weW<8>l{?g$hhN)B$@$I7{GMM-^|ubb*cHz$Bl54|dDqIy*`{Bm zjDKG_xAXi8pX&$Kz51B*MCI?-@}ey&RVB+7JhVObIpNR6V8_>-Qo`EFT|agB^FJTg z{l= z{L_raJ?DiV-Q%-gwsgzZU;YzyOO`$qJ;eSX;*I16n;926|AmQL?2udcz4?2C)WeOd zzN{$!7=QQ4Mb{?H`MF#^wsl-{KCM#>joy_~U-8gF%X5QfRLxnJ6dNg3zE!V_47NTI z=2e?9U8MM1%NFndw&wyr@Wim6E^26)%$yVxG{Hp3d)j^p(H)=K*ZZmmPS-HBNUf1G47cBE7|2#`ACp^=R$~)! zC^h9md%~w`wxbXH9y2TvQJJi|ErsFt^_ts13?ADsEuO=gFh}X*uk{^*>t#3AxLugV z%C>A_#LjHasTJR{f~Sc8EY9lREzWkgI{s+2^u`X0J~>N1PeGXl>{9nG{rzq6Lf`(< zx5p(>9nw*K^=DjrPuQ``??|kuogY&%{uKLE)&7zLp+;#>g2di`4($`KC)zUg(BzWmoGv}PR?a8y1R%Xbs zW^86y&DhV`+*Nka^-ILJ>jKj**Pf3M)jced_2Pv{c->Wo`LY}5U3p)=%SHCk{rT!s z&y?gc2OoZXNA2L2?3#k(>KWp9%sy2VFj~CkTXf}K`kHAEZ_lsyc*=a+rKW5Df2+&4 z51iP-pW(V)_ku>6@quWz4J$-=)_8k|F*7)+$@9FJEN}bX|H0EGp4Z%>d$nVow$)!a zaK6qv)Xy-z+RXX#goGz_8;Tq}XZ`3~QX9~^N`yU&>GjGZ z`TY&i-R$|RZeC;WoY(a~^inZ(I!u<8DcFQ&8Re$01MwPM-++Q+Nb`S8h`u~u%AIc%Q85SY3zkbmn6 zE%7eNhsPhjUMlg~ROy7v(p|FpO#c+uc-L`6JC^+dZad$9@wK2G>>PNtX6~&=T4~&2hH@?p0U2RAi(L5!4jjQ zOxc^#5z-!u_posZ&vW19d9w4-_fOrKnw&PGzP!%)68SNmssGOutSCzrij6it!~5!` zmHe__%8v^wb>z4A6!=8ud}KK0{Q1^&{do6O$yeF(*XK_9VOu-nw@6OoyU1jf;GHY4 zP7hItnx!bKdVK!R-27*Sm;LWuIL|fF>H3%UFS>_gbEgF?oO~z8oVm^Z?}l3TwoRWB z4>Bz(_>{_SbKIlY(4GHadNCLC!MhcT*{X#q{&H;l&8*h0T$jI&=b=O0k^P+| zZVt5!D_+|iS(F^Z>K|9cW|bl7B>5pg`(Hk@+4k1=Z!dj6EE{H+<*AY}{lE!BVZp@j z$2aV|6R7frW6z8~j%uIg6jm8e@R)zB#!~&sgXh25m2SLXc`+$~=4Ua=RL(Y%irdwRJ12?8TlbP?oyE<#`s=7Yb3(Q5EjUDESnBDYw_}!z7 z^FxQ=LYdnG={MetWi0pzybG*9(O;cgiXj$XQe| zP3t*y;^P(Pq>VxUeni*lZcA!kDLGZ>bBJ@(93%!G~tq`dagEJ2G`m29K_+zj5*c zcBW&z30Etg-pc;+wfbnms@4t8b5&;;P5acp)hYJ(xyM`|_p3xt&3Q8Q%EyU2f@)4o zNnbH-LSnVjMlmx-YnOey|M{%i)IRB;x=fKlP1(K|g$vGSU&z^cRDbq)QKu`J7gJdN z{5Wn=%GU1Sf6bEPzDH3hckG3LX(#37e&0y_`EY4Rjr+!+l3fejy(S0rU9z6X}p)K#DVZ8-Gv$F`~0jUHAyiW?Mb6!*km z{_ohZyynP*8#lw4<`#>|C#a?fy*)6$JX}Cz`^-M2ew7dVR<-z78vC>vE*F!JaGp3- zXt%b<%|Bgyyb2`_7jgr+WW#EfTwp3_=J_v>RWI}^{Ic`eh^fC;{kG_wG2Ku)t=Fol zIQ%Tn;xkIYjom&n9HB2ByydD@pZ~dVhVLGWy0nJmeG`|m^z`t0NV#5Rbp2s2qI!wL zQ*B%M)wPoMPfpw>-W()#<|wyg(&TE638m%V*GX`{SJ`<~Db%8EFVppA&98^_J&*fq zJFsXURMWgB;d0z6sWCHY)m!Hl!Av(DH>(}zZapoW{-{2|;^tL{nE{>u4Qv}K`pyTX z7i})w`KZ1sa9)$@>G}old#3ftosPUId5OWUT5i^oIj@(jOw9@^P?%P7bB40b!FY*j z_Y@Z7M|Rs-dsmk&DL9~&;INKiQc%I9nuTWyF7NT+Tv=9fZMyEU52@1>Zgp-_c8F$X zuIxD};U!qxS60_h=RfnC|I@Uyj8B6%T@K!-xA2zyM00_OQCCm0*S$E$X5v~~0S zCO9bUzVPJezpaVS=1B>@p0770{L`sb`z%VL&1Wk$Nf@)K>Tgeo*4}qjNJrsWZ-txF z<0D*awk$H*C7NP*TE%mb@`jkd(-j;py+6pdR`cApmy^FTDDf~&%H=(i zBy~eP{pfYw7rUxH9Mt6XS$6r?iq;S9OVy@z`TG9}K35dkx#1L7 z`O4(_4*Q)!CYR3(iM^4ol~1%*=Ck;Jntk7+d%kCmOS#!(DW>ViJ^KA6-kEX7&qMv5 zsUEGoi#>NMJy3O3=5YR$!fW5vo;R;LL;q%*#GSs|DZ-_e#rw@D&?Zz2jU_V>B;_o=eoO8O(E zb~GvEire=;cSYO`j*Ba;Upv)vRbFbsG6(x?F5w+JrrnjlCc3gV=}tMPX%!PU!xOh} z)75uvYuIiPt?pXX_oYEDVDh1o$%cygMlv>)Uls2hclscmUF299xij3wulm91T`_g< z`;J{XykM!_vnd-RuY_LSlKb*1?@_ztYJTB{uCLnR6Mr4vP&p^o-n_NJ#UZUjH1WPj z*2ky`rc$XaG9i!yz-I9syV^G;-d}&gp!b4_#qF~F&ONoF zW{Qi|C(lmGzH{r&iv@zt;X7YHyRu%zjiaaYR({_~QRi1Ph1M)-TC*fUWwGPA#fc0} zl7Hs$Zr;rIVcLmhi#d<5|5dv#dDgk`bywY=NoPX8h|J$IWxr|2=fwC$lP7JdU%{gA z{Wiag)+N{ES1S9@pD0|t-}1$QsL6XfUhT7uab0BgwC<(Tx~3_cjraa~@XO%Zyd0UI z>&1mGx!v&%X-#5uYN=jy{@3MmDVstrE#4geh4szunHpK%J6B!1oRZ#KBhk9zqz zia#Xg-=|d$63Qjbv#x!M-WcOAtfg!lv2%GWBV(y+)z!M($BQ^N2ox~SusN2-w6Ave z`2e9qvkss9vD>7N$3P%>QK;@Nku=F^_0*LTrwPvHJ`eqQm*R?D=7`~3pne4fJQ@Yj2HUft5{ zd-;2~rdD2I4Xj*qH!0uwk*TD!bWUz&)~1mPXUUsuGPsnt)NeQ3JXtWuUuQ&}5?>=Y`3ygoXp zMz5K^nUCq-w%IQ?eh{DZCu_nzF7cQ<@*VXZ_inoGNI!RW_XA_mC96NXoss!;^!GmH zm8<@=&x)A1ZA+ux!Jvk!BTrskJ^If|Zuu4VEzcOu`C9j!^nDZHe5>R``UU%+@t^jW zD<3*MQOKIT_p0XXFORv7YCfAHvh8O8)6=`pUi_R}^I6l-aLJ8lc5e?~t}2`uUY4~z zt9|}yw}gF9%wrDqfBU;d#dQ0N=j@+Ld{oYO*kp1oud2VfaL>}9gRAZxSfaMUAm;!WE`CLg==gf_#nj2459k1hlm$c`GpyHdWLK|N!G34TQNC?=YzAuSO zf89r>S$s<`C#$ZU)bm9pw%6dtluc(}^cse~(~2#yUz)0QtTpntytU`&`mER~AD^)s z@03$x6M1qqUZqvPtF%Q^!|G-iLs>xHN|&OoxksK?F)vBaR8nNCOJh|o+w!aAuCemz zm9Jg|9PhOA{p8zR7?ClJyTa$s&o1HCb7wh1U49sKX+64mxMRgBZkxi$AF@C8#Y|TB zU{=`vzvX7zuKGtN#!u|te^k!1e0os7Xu6fAkKxAGC4ZzBDktyIseQ0(t{KCOw_)t} zXHA>)W>>^y{e7ll{~Obf9(uG}XLI}0a{|df`$9OPN{pBN)cv+qAR&^1>d@;ne%@?DN*I{~+-}r6MP{eAzPhEoK|%empoqEheb%l?>+- z>2H5J#dg0I6(-Laje_sb63 zY{R#;`=+mptJ}Nvs_>CZf%b3X+mnTU9n0Ch@67S$%^QC$SmAnZ&OBd!X}7(nq(#mi zXr87rpRHN8bFVOp&wx9gg>w8;u z@uDi733lg&!bD1DotgRhyso%7ANRax+d?vZo*cB~_o~7Iw@0H?IPh=~`wktwnurvk60v?m4lDKi#8PLa&>hnq4os0-UN5NFx;X0hj0<`; zzvJCzomsplK!Ic8#H#);+k%5M=PO1TP3rI0f0L?U9=VKf<%7>2&Nr+U9jpyk+!XfF z#C+cEEq_8953b@iQ+ju1qJ76XrjN_+1Q#iv@s&_s5w-Vr#f~jnlV3g$_2K(kC3NVJ zN9cdSbIl=J&q;mW7Sv;W*LKpg??3fpXZs5Jo!o!LannpezH2+U+6tDsKTixwyxz}x zps&{AZRu(w+aHs@p0tZ|R@KwzWZ7xH=K9oWQHwjL_ANXc(k{N5$@JhpgMZxCa*LKd z?F*_b3Vowc`})Tx!ADgyXB2mopIW&#43a@oCMRlx(BNn&iN+B4of zy2Ez8>x1MSr>BmB3!1m8%$K_^_ao9_M|r~0lg{g3K7AV|<8td$K>Pg8U#q2GRTDfmW1KW~xpIQ-$bpn~G=e*9SP0pXJ#dD ze~zcY^K*|(?wrb_z+WI3e`eb5lMjCf8+gx_TD<6P=qr!rkLr)qWDZQXyD%>x(LDdc zw^y243Vhq*)wjNHv;F<%`9+_UPpk{IZ>)*$VlY`9x+?7UA+;Zecvf|C3YOmr+W4ws zT5$7MZHG*YoNcDd7oByh{Z`35aZ0j$vhjYF73%$wm$}(^lp@3ZMOhe0~87E{h<$}W1`TAJu_cl#a@cJ(mjpf@(XHkZH6 z`*dUCuYwZwo_f1anr&9;$Fr8r{P~kqmn|1@3ae?$N6)rwWCzn5ynyB>JBJb#t_2Gi!?x9bBKzdr0um%g5({mrEJ z{|2>v!DUO`E6tfrcW~=*-@d#5uJN}mGxcY4GhW;FUN4&cy4#J}$7bDho+87TSh`^| zXBO+^f2{v_6x9A|ZQ3+_p+ZYh^XdB+A04_^bgO0Fbeq(z)!`rSmH5xU_u+29{d>9_ z^H_K;9(L^e-SH{h=C#4r{@eK$%_%oj8~4hwINn<4x#i%jzQ9tR8xwBJylR>yJ?Hd= zDQA*zb|k&n`(){4!#lP-ubPwQscp43HD@SYbicK~%|qv|s)&r^v5SWkjyXR3Tk-T3 z^Q4s%rz%EV-tjwP#=SbbtdezCGC#S+)cjfXqHSuw71O%*GyD_%E5F{H6ME#^ti$&% z#!tA~A2&zm6ZeTPK3<%+&)M&}{JEP)^kLUVp;cy^HL5hfd=d#vytr@Q{#gbN+`GI# zh`sfC%lmo8+u6IU1b26(d8@z5vaxqrv@SAzW8tqqaxTKt*eqr%xO1JKEdDQX|5hg9 zW1fG1?b~B>mjC*TQ>Bt`>BJQtL*+x+9~Emww}A@`Q@b6*KC6Vn@g#1&e0csZYu|)=uIQ+I0M9N}K^>|AfFpP40(Nm~M7Y z_wkwI#`ZGGN4r*Vv4KI#O^F@S^$)`D`QKfjo`3kndgn^5(?8YjXovi_x^c&CZ}y#* z&}WLJGHV;ZpLpInrJ?vtepA_8RmpozY5c`W@`byszkYvQ|3pt(*ZuD9#h-=FUC#I+ z9;v6dL98Vu$Th(Kv?nj?xoDy416D#y?Q~@#5}zbgUS_Yb%YS-nrsc<#H+D;{&?u|# zP96JBBx8|9d(?Rb{vGwQU zU5|ONS$)lT$F*JLYG+~6fpbfa-`CxyIN59S-Rn1O92}Qk34SBK>f40;zB8xf8*K!X zKK#kPdS{A9_@c)BTVJ|uKl91*@U!)`&5J$=?YMdNm)Oq?*Jg=d%fvrjRH_%z$n6Oi zV}4N^wqweZ2djAvZXIY-T7EcQGB|v}=jgf#yeBPJutn-Ut8`ua;&s;F(>vw2tPMQ9 z{?qvv!G~1eZU~f}@$SWsoARXwGgr=zE!uHs@3SW#tqZ@*c+toH(rdM{(5?8auel+A zljCaZw8NS2EPT?wvOZx#g+u=8)1Mu-=x@F*b@I87 z^)Hz{(gzdXZHZ@LaJ9|Rcjrkl@4xzI!~AcT4Kyfm-gRRACzr3CbAAeM_!)UYkyFc6NAgzNPaQ{>x^w4GDwnoQ z-PZm3?aI=;z%x(yd?b%tJNt)0;rv5o=IWVdeP_;|sS`YKDU17d*w?vVTplfF%~`Z) zTiMNP``Dy?9^N|A@A@R;Ohjt3V6lrzq-I9I4cq5gJT~EaC-kHLTU_1F#qsdHWYEh6 zKkC{Vm#%c%;Q3sW*J+ocTW<9>hOg-h{T;Kcr~FJ_ynnAC=S}|izjj^-&GPLz>hj=^ z{^k2RCjSmFDvHiM*&dzpl<_k&Puu6~yK*gJrf%A8V8+SS7q0ZKXPb(-@-5pF(%a{h zoT_SKk!cmwvRBR8)cED^Tcfw%LZT07soOzgC%9zHw_(x@$IbBkws|KEn;qg&rQ8&-D17!`u(XcbZ=QGWYoS zX2s*4yX8AS{hW;y6#57oHgq%PWIFMU3BBfatmQb?db_??U!$_cw4H`sr-xe%7*)Q&#;(& z{#{(fw6;F=;~d*u*SM~89}L`1{e1p$(yD{c6q*9>rk*^y-TfQywkOZa_UCnXncZ}C zSRlk@SvU9e*STRApVZ!*bbr&MOLgtVo3`J3H}m&`rWI<^-woQ=vrIabKRG?|YO&o! zjT-TbY5J#9^*k5eo%q;bcJmhYzR<$~x$Ky{@y+bau&NiQp6+?~c_C9Z>+S@mN zYlNxjiTrlBJ|W`V)d_ExnP@vMx%N11`P=SeRl^k-dWTr%Ay=}^(9REf{KEn8*_#@$>H zA(;Jq=1f@kGou`rPt&KR4`cdmj;aBK?VH^retDiFV?x88iJ7 zEwlp?wx2#&|96_o=Dku6s?IH(&)Hwyc4haDHU+jHQ}=gCz2=^#mJ|Ho&g#o5d)U66 z+oUOQJLBZCh&17x&xh7>2i^Ads29l7|FZm{<`?gttwJ+{*?sRX`Pk$A?%{dAmnT1S zE}y+RWZ~_K{hxO|dZWS=yV%?(_2+{<-ZAISExc5*qfYE_^7|=0@)IX<@8SI{s=SS5 zQP5w(H{u@`s6S5MS(;wiQhIEL-i(k{Glkab*IuiroSS}@OIs%-C_|1p>pItT=NeD8 zOO?_-S>5SkM<&!B>RxWqa>(T5n~ycKIqx{FS6sPDVSB`3vFTcgm0ybPAMKu&gFKXZCM7Dj4zoOm|qp zB88GWo=1&m%JGGl#>qEo&Qyxp(8`k$JCS{PSKg+0*2$?xea7rR!|D&OZ7_OSDJQzr z&Nb#}(D%K*^W{@M2ZT-Ly0i5~;uYVFx__sq$~^gXx89_ZX}{`J?;Ug2M+$1h+Wa&+ zWpX@XC2q`$@%XV!eQBbv+-ujIebY0)Jy1J! z-C*x&U8ed=d)FJEjc|1n`MKCHTvJZjziIwAecgy4hUYy70u#c&xU)WD-gWKC=5x>I8NTy~rTSn!Z4Y#D8D>8CdemI{gywtn7giFsS z<=C;%%Mxv+AG_CiwN6v{cy`tPl|Ov~PrRQuHSM3CGsDcaSMSAmIKEO%6Ykjf^qs*g zqf4TFcXX@fG#_g>T#~gv`{1&&P4@rQKL5^Q`ak7Z!R(De_By9*-W#1izcy~?Q8({X zpVN)qv=?zq*p#Y}ef`NN_hTIw_h@fA-y$95{yFg16Jyam7n35bq}I2bF}yS9iS>rk zJ3r?1K2Ghq+gAO0d!_2zoJ~f(Po=8ccV7x&v2@h?epfPT^2aN}Gk;uqEMVG|7H8IY z;QvSei(8(j#y?t@+x5jV^sBnomRSo~*<+g~9eejn@ZXU|GgMwo4u7G3$F*8!ibCT- zHKnJoyM0pA!;Zh7V6wFH>W+PzdJ+#G*;;()ymYVc2K`y4<|dtHM{nDC3BFA~P&qdz zW37xF%a^ww-bXA-YC2PG_4!8ZiQleqd^%qb%q`1)lcC;j)NC8{k?(PayS(6wquR3W zb)Wb1v4?5Tzt711a&@Mu@BCdGviWT}&PN?lxZ2uq)+1Qd-T2CxL#F3WZ@wIS^~&0? z0y`0BkB^HkrMu44nff!Jr}ygbCljUWHeSyO49qXcvYMgGml+aUdaCy8v+rR(+o$eR z?MpG|za*h}sltDy?+fUo5`&;!lGwXZD{z{c116>vMe@1C4onex5vd%%WFuUi4~n`#Q#r zK@~=6wJo!(V#KRu&sD$mzS_A~D5GrIWp!UR<<%TP)ryn8zHQT$-JrX0uKpeurg@QR zr81JtFBJmPD<2gfUbW%_>pG#HZ4Rq8$Zz{}IZ?mULCNye<)c+6kH@Pv955}6Nn5Lt zAsCfvxiDbqnkzP!GZ%-s@7Vlsi~9ndxAp}ed>_6SI={>Qoc696;y(P6p1!Ux;&*RK zp7O0(owM1`TjF{ye|lARpGSz%JU z;ezFX+ogSb|2s59{wUt{;^k(Y$1NvA?&Y>0vH2?9ocfgI)As8d7rfnCF_-P?rk_8b zowW2Wnyy#>&zwEv*rE*?2l-DfTWlG7$~HOfz=6EeC!RgrmS!cjtI9v*+JWVahWAa? z4&4+h)BCe+UB$$nljq})EskJXy@ku+e@og-(Z4cI-^9NCPPD32U#33-jmw#SSYMs>xrm{LTvrxuTPdu_k8{K@Re7VYYx=QrEP40-dG$x^+Wr#Hw$=keG4A_+`ZcG^0ur0zJH4l z-p-8VcVJfNw<1T`La{Sn zv|6?V=qrmIRpWMGS~v4i^z-A*5B8l=^C>*4vHa)ZSt(xxE=stZ`8#2WNKZxepIc5* zD#BCDKOEJ5SNf?XUPtT2&s^aXHj5|f?q4eOw@Qd*bY^xpfLJ2~t=>cLSDycCzI#_(Ypwr=+Z(KJc~t-HuDw?Kgh!QU z+lt5SYG1jps!JbZ)N){WxJ0-;_rczhBmaXem-?K`X>DvuIm@Ru@pnP->-fDK(}VUM z`||y+on+EA{k9U`{Xt%Qf{t(hteC2NTJX)kOV1X(DmQ!L@<(~sF%9`;M~~m!<=?yL z?#$qjjLl!;e>lh9VXB-mk^gV5{j@0wmwi-^bh&T;pf%ODTk(uZPJu|rQY?wLO(O=z}W>CzWJHScCh@{WMeQp zHG9$hz*+bG1*Mjql`B5PymIE2<#)n@Y<}dtmuH9lPSN zao4QqwCnsc1h!o^x^sWcw-=9=Uy^?=BEh{EzmWW9Xf>I-AcuDYJfa z%=!wAIm@0^9a_q9DNij(WTR{4_xZ)8FW*X(zFk&z!!&V`$H&qw$KRg5>Fxc*rn|Vn zGeyWTc1EY&=VejsS5DTH{IKzRdZIlgg(d4rt`D!x*XB>w_J@9i2kjQSIltk;i5qJT zUgm66@%NZ^)lqp>slAo>rn$=Ei|Bu`<9XC(k5GOk)L;VGifqdb17{PFN){$*y&j8cY2Li=oJ0a=gx{p`0wfv zvx?Z+#>X>w!Dj>753RmYIwNrkt4gj#u!PElJYPXRcB6llsT?;LYSfrk zf7Y2kWN+qJIdlgk4&6H^TzUGoz9v(xPM!@P@IAHLT4=<|5*gZ$eLcWQ6$?L4Zj z;ON_VBBIgm<4obiSbY)KRsS``Zx*+6>YhK}zIWa1BE>@62dC~^Z>nQd`Iy_Z>dYEe z>Ag44_jmHmx+kOV;dbcAE2*lSZsnKLJ{+*?z0dpaJ%gC~m-<|GtM!l8B!Y_C4^ZKf>-b<ZdBAu(!L#Y%Db*)e1hchQpSpP3zW$}xPS&nGyPMj&?>xosTE$F$E&KIY#+U7r z1Achdefv{b-jVh*XiuI^=7;IBN;To;TY?gPF9}l2DPNI4Ip)>1Bw@bi(#Q6_IK4)C zirmZ->NXBrrK|%U$M-$T>o_5p9q~zfZy1y2k1J``@qz-u*G_*T27k-%dnN znv-@WJoDn`xVjA!@BQokcK1P$aNwE$Ub~hC)oEm;8(uT=Hd@cUsiAL2_v6qd7Yom) z?|m$K^W!Fc#(TG{L?#Aqwmx!Z|D^Psl%x9|-hbOYt<_SVU*XYyc~R-82VMO3tL_+> z%kMb1^CrWom>*A{Z7Y*lxKNep!=ZQXUt4tacRe&xy~M=5WJ=w^OfE0CE&P|Pl5^kh ztoZ&lQDNr=hS@FGJTErbADQIPExl;MmldM#vy6h{&I-=#VNg$Tsg0SvoTchDzs=mN ztMB=&JawHXU6Ov}_fW;4&fogE>#_xW?)kj)R~kP*vQVhAcmLt{PkwZI{XWX|TGEa0TtAzxbxz)->F@q*>l5-HT{YhF{=Um|@OD+e-hVp_G7d2sYiM7-EwWBs z=g{l@P7g10JG=M%yl}zaV)cgJ9bwhGw$5EL^}q_=D|Y)FC+}VT>-&A#gk9e}ot`=G zES)jiN9?SuiKIlS=B@mz8ne7N@)^keiRLpooFn%5|GVt4eN#B@ZnH^nWT<7DSuyQL zs?3|8r89pm$_?h(WgX6N;k4+dJ2%#s9NYI}57#Akfymnqf^L7N{t(%@-4`aKKH`sp73&}-Q1sc-)ftvti-bZ#G38AwlAwVa?U&`jFr<3 zKWpomYoy}&fB&v^QJG~M%;SAeotd%Fr24GS+?g|LzwZA#x5RVTTAO>~OW0K+HG9`5 zPD{JZxFg%+)ZAZ+r)PY3bNJePes)p)9@+3Cv->pezMW>aIXrdFeT`ku?petcpIrC6 zqcQyCJIk3&?T=;pEiP0^x##*n-QzWlSFh^Llshps?U-{rJo+XKq%p ztNSKbdbr!z%Wxg&*O_yy_4dSnhxOlS+i$euytYC>2V}% zrFn94nqf%L*E`_&e$wpXjzS;Wr;L6)~=FfTk*7UxOF#C*ok&~UDmvpU@`%}DlVe_1Adbd3I(*NJfKIi&*@t&Y*Q`_j_g@j&Xm;uhRcsby|TC z`<-pm?FB-vsfPKlsp#6W)Y4t-K+CVMQ+xiD^{i8730mFFs9JQ)KW)!B$=4+_ifcos z@6q0UuW#0}l5^*tFMGf4QrN`bMUoZoLn{xpCtJxhor>-jVsc%$mD~5?4fnGuKWz-u zt52JsyEWf6q`>QSr5pP^4!=n|&#yDTn(=E9-}||OrE>-KjLtl%VOjO|@uI_*6fg5T z#Yz^fxE8T}cZ%*Eo$F5w+_H`KO|GfY3IE;Yx{0mj?2L1KXE@|^cb)k2!EsK(|5N<- zk~zNfqdvXs;E+yH-TSNj-&VPEd9rg@q_xEFYNb@=&)Bm(nLBLW`TMbfWl2Y#R6JZ= zwEgc1+rmFgCqBh}I+UpGQSU#?N+`xjSl;u}ii7QQyiaEbmsd^Rqxb5D-;_)8CawD# z?nub`E-_p2@MB1|*Ygd*zSUD*-Hjjr@(8ND_=W$L34e%fX5^}wQmoO=Ox219=KVP< z`13RC9j#T@;yle?H@`Vuo%r}e>dJtx+m$M~USC?kD7<1Fk9m2Ic*6T8hFu%Xj2F%8 zQ*-nGyU6kg_tnmmQ9MUZOxi9f%c8L4TBYxe?P1wzNspxCwmL~{%e*>2EOztjR?+M& zZJp(_xjK_SuDWi1Dv!O^5Z9LWC))GC3=e6pnRhEG4D~n zMVpHp-K;#S4osVto&KRQ<`lEe56|Cr1qSiI7~{`O$|-O$+4pMFd;6Q=Y8$S*R~=c* zT+;F^YPsgc_Q^-Su)kUTYGUSGyTbgWy9^a}%-7lqgiQP1o0uBRJag&}_ZqI}e)gP+ z3=B?>&OV*J+jVyf-!qUu69xQ!ozc}yP3_(L z-|yqgO#&&amrY)JbldBkmgg0_cTT=mxPO=NtOr69s@`;c+2gl326E_8ZLEf`BUV(yDeL}eWLqE<-hQM5?MCaPH+3N`(N+>5|&$& ze|-y{|LdE#TAvkX>$2!$hcBL~$xL?8W4%+m;ryO$Uh+3OF1m+JJ$}^Xr_kG7`=;vp z`AzI`KHhuQZm0J2i@tSh61pk_&iXm^Itio%$+)+wE;KrMG^e{%*m>q^=a%KiC*Ir; z*LHTZs>unZpO5Q~@c%s1aeUJ8+Gg&V3tb<&Es$MdI3d`@eM`pOzgN>9gg50_^qkd| zk7j$_!*%cUzjZ%c*E`pJPw|Km=UH%B>9EgRNx5D#<7)~|21{Puc@?6PJ7=Jl7CZPRPu&<{>3m>=@;P;m7}k5qb=JSt z&j>ELx~A~6TjKvUvzB{aUKE*mu;k(nY5l(kSwsG=oK(ix7NEW3OUgUf`_A=mbE6y; zSG6))b#2gLCo|x@@@X7-&*kQ$Z`?cAoqVloAmx?J!|bmue^P9H}{f&T$#*6hY`Y?||BGKnDa%X7 zDiz1{M;<1#&hMC_??3ro%-7I<2`{B3CiW|A&n{kiWi98{sJpz?y;gg!JgExIte$*N zT9sK>jOEG(#r7@TD%ujCg;i?V%vf?+FXp)JnD=33!OWw6ipjg$qPw^66FHh*6&I)( z!ai|t)~8dNPREtF6hpNd+VgzZ*oog*AkXi<=<)&0HF8rm8dt74QE~eE;k^@kLxOB> z@SI!Ht07YMqviaow!iC)UY~u*a)Xz5?z6_Gy%#P@d-+90?A^FKa>CWreyD3XVaF*Mql~4Xu>mRD@m&?t^ngF z2G4}dO(Lq|{r)$`8MSPB`6&Oo;={CV*OyBqSJ+K(Tfwk7dS=GX+9gXb{63MPed4Y~ z$IXkcCZ8^8yJQgYZ}X9mdrnP#A#ZcZK9RfKqx=@%;#DU< zeVA(TZr_s?cK^KQZua@a_3oX7ck&5&4@pNGXN~xeyBu%kiv-U;a6Mo}dS&g3!X*;- zw;$i-9hR4Ar0w{6G3&Ycw>Fg?=9Z}|^WC&~-tx^qn)EN3>0MiH)w|}H_qrpurvKxu zPtA+k^3H$B4V~D<(rVMxOuxNeI7fKX(SNsErhloZT|C8gL7oHq)u)oPpZ-`jLwka| z>)z?>w-)=f+5B!k{5!yK_GKG2kMCONf9reoo}Aa4W4*Qd=6l2GTjz*aKC;fea>M@9 zmW9i7ZkPlK-k+ekdfC743;fd6b+^@DY?v7KTbZ|JMWUaZ#*uFl=>@k^{~3I<$*8H2 zJb1TCTuo)Uo)6!0*Sh%}-K*reQ$DSIuf?}IEk}87;gR%p`u8~;rTABLFNip@VW!vx zqxZRcGhfFX=*@2bH^tm^PezQ-h8I%r#1G|OpU$)DTht2Uqb&1$CbhRt6mMTy;Q8RE zz&3OC|E3x0CS6}=DZjoceO*QHUUdD8_4Z4T-pu zZG39x)U7jqyo=C3W~_c=MZFQ9`-zX7X?gcf&Z-K@ZFp7qbBo)X=*NDaJ8KvD-Rkb# zJ4HD7sjRA)+R9(?Cnq+u$L)JnQtvwRDM#A=D1Ep2;u(TTIl4L9*2Ku{_`2gl%ajMP zzD)|}AAh`7yvKQqq4*vJ!%$Y~%PWow_wq&jk+ak5c)f)0zSmKn#U7IkC+*~qdLuQT zV{y*iH&$gTm-ZWHultnHQD1raegBH;=e>U&%V(4=oLsbhUCoB|Qj^sbil^0A1US!+ z65BV^b8lMxtJ8b3eA-oYRAaV0D$eK0wK=`N?jtwz^S2CB`JcCneV@wRlr;H$zof5G zXZylklk+o9hHGAz`}<0&vS9w^$W!<3P000LpAviJ-^G{%g3At6%1z8WZSBFKP_*;_ z`!1n_KQA>U>Xt1v$YwCJn^Q6^OZsB`gZWQSugSFk%)T<^n1#HIPlEXJkIPO;iv8O9 z_i)aIh{6iLj9*6&onPRvmc{eY=dT6VFKwNW*|7J{BcsBgzb1;(2Vy~scmJ|XW!_RcR#UfSAO~D%A2E)_I8E-A%wvjD& zlbWIn->!nCH}?9+MFfQ(I%uW(#5DBM`L${C)7m!clt&b_NUivJCq?n}pQX1}zB^WA zy7WWkN6DSHPsjiL6tiNnd8J2GU9R4p$!w2)Fy}004yrxK`*~eiZ71*R2iei*wrk|C zaS{Gl5F;ro=wYjOt0W@%`>)XO9?qYQ-(sz#glnGg80a@$7YSsZk(J*)_3gtgyZ+b- z^D%JlonY2>JWF29{OxO79_{6^rQCtvw`wy=|J!CAssDVlo6*6`vSNix>(|XZ+1qruih=eOU?i#y7dm$P4=9@NUX<2b{ewPL|bv|su> z=h~{Zqq?kDKHBPaljf~Ouk*Si9+j|^91%+0V;-lmbkQNT%$_U$vpQb(rqz@=e|ev3 z*KEw7%65D5?|uI(ZI48pnX37{?8OWYfZ!>4Y=cWly zn!Yx4pL!-99{aaQ%cCnH_`vx+^IIyHpE3S>_-U4%Y(moOq}8Y1ObMUf+`v6u;x*IJ z_J|_}!pE0qzg;kaeXaB|-(KA$)mR6nscYKIi(Y3HF!?2)T{K1csOSn&$JtXh9J~GV zrpt5H{-*`G(Pfi(m7j)qPdCcx)#BPx_T(Hx`h4x*D;4~;+vVr}SiSID&(B7LpJVs^*g`RT;iWh1`Y$M6wGWPY#p|${Z-L{E(+n;7_fNgE-mfg@aiW>; zn7aDEw_6k?b{$N4{r}J7S;5MiD#Isc^vw&N%wF&|O5&ea-Qn-ok6&ZcIkf-rc9Sjh zBjqF$G#=Kqc2&$`FBfBTNIK|W@-B}_?84M@Qas;YeE;JAlaKv`SVGc`uY78k9q)Yq zm+f}*?UFKKCU!Xm-e&tF1u1MNgpK#vt`#rjm2b$2d3Ix;z_UZ!_{7A|to!==Is4v+ z%I8h*UR(0;OwhWp39Kmw`sWWZE6#Ykcu|GKmZxjJ%%&CW>0~Pj%2`HykFm0Le;_I*K zmA@BSmI*(ZsKy#`yuRL8dT!a>j)M~GntjuMd+qamGW|-@RL=5(x|VF_DL3a~`&%2cR$TyZo@s5wj8^iPoi9l4sE%?%(q)%u5py3SwW%f1)I>T z?qZhHckU|{=-}6x8Gq%fp}@<@UyWxOKUcFWJJ-zlR%VB&*Ugei+ijJ2N^d;eRl9p% zYPcK2h3E6<6g_$HLvWGt%pc*q+gp~V-xa%V{6BO{(U-(sfhjEdC)I!aZ~E^$^UwFa zegB_7maY7DK`{S?#w@M>vD~lcUO)5y=SRL5_m5le>M@Ua68=e~+N!0_a@}-Z?UMIq za*e^-C$BYrRFdcCpY~O!JY{E5ZT`8ZM_pgW3p|Os&3t*%)Xb0DU!4&*_Gwv@DOefN zsk|-MzGvIrFS>0$i?rrMNSMWb*lwn`(rfy`Td!j5?%utyHN~fu;n$k^5)AKipESs; z=u0+KWz{{=mXJPVF62B@DEF|^{je)$ZEh!zh&)Q4yYRyv zFQLc5mll;D?T-KVZsPuvO-~BmFT7HAlxI@O-l*$VG4XS<4Y+3#WAE}&YQdCF(Kjq{(tONoxII^+sR$~?@l<I6!rP-~qKcbm>?dF4tA|cQ+fXRoZ|IO0!|!?EdshrN=n#UKFJ2s0Xc1Vu?5^|E zm6y{E-c+|020u6Zwa7Z}RSeJXc@rmSwq%5!^xkZx<8v(^ME@$_P;^O_j_JsKmKY<^Lg3a53SdA4M2YQ_F|L3B4Mpx4ud)=Jh zFKtdrX21Hf^hI;>+k57$B8KU6wByIOlnO0n|7M(eem-0H}0q_wrnWR z71BEYw`8B+f|#9o(W`T>SDo-^S}JfT?3(lawmW zXqxP9sk!WRYilDmzj1Cm&?<0!w;AWuYudY`wF9Cy^G!247|W5!9qs&d-Cp*r<*y>% z35$q^KQ~(|sde0Mrt-odj*FUGs#a{N+vs~P;_|K8>r-vTGq2xc&fO-j=<+-vd&L@i zmAe<(A2*+uO?@-P@_Np;x&_k$G+SQiM45)nv#MQIcB8uB&J#1)S$5wq|GZ^6Ew9lq z{LSgAbCYBCI&masuVDEsu;c01rE9}GyjO@gm58mC(puZT^!DSU7k~L43KHFWE7WMq z#bl4TS*pbbtuGeM64JUoxy4J-CH-R7!b??!e$jl@*VAQF($9J4m(067!7zA9k*15d z%EBNH#am&kTTeBgmt9+%m~;NZwF`gLOC3z2%igTAo%w6sUiMde3d~Jn^jcorc{TsX z9l6;pUW!M)uDR;8bZJsV{nV7|4eP?f-v+{C!*82OmBUmq0UERUc%zd%cV}*!Q$F{3k3om_Il<|J~_lB_-i40&iVF*?Y^{FwUvh^so6=2HO0% z6L^OyS;D+DZ@1o@jWLFc`=f3zdOdObvPm(fU5}jlPJa76-W+K7Y()MOaRln{R zxCV7!;R>75UpyzhH_!UBC}VHbp8j2_*FV|?)=Vl4er}ZaDrWXG)7GZr7;ko9*P z-~9NSUjicC8si)@=P%*2xt!@=nNz)+Q-igaKCiRt zw^I1k^|ybv)%L@2S5!l|E^dRW4_k3(R`w31394$k&!%3#pYvs3IQNum2RE&pW&Ee^ z)t8yt=i)Onjh`>w{<~7=b;~Iutr~8=}#reC}5cmp7x&lN}lwT}xLQ zPGOi5nB(E_{87gujTLiBRigOar;AQ}uwubU{bdTC?UPTnzIojHcJ;S&*Kd5g`b)Xx z?*veJnY;Sr!b?>vZf|P3b*-}VEA!I_J5KV}&EI3P+Osz6-5kH}V*9!2r~6_{S54QI z?91v$?3d-Vbn-D)_jK8ho;yXRn(Wihx$$l4U%^BBpb23~z|T{!^RMmu z!RmU{G*d3=uS4aBor`mBZe0ECIjFcP+mMsFVvEK1%RjB2Z@l8xpSeBZX26P&Ig1nyA zKWyJnECfzuH)XW^=h_8V=jN9>luSMp=G-W>LRhOYjs5gBuBl?Og-_?UIW0|YD(%od zJmW>nqdC5XXU|_#T(`zRZt5eStiroeiII)>vUWcUcsV0uYpnFQ)XUpcL%6Kf!C7nC z*@c&^7;YJrUwV|)xapsn?kr)QXzLKCyV~y~zVBRXBBC{SbNAZ3!nXmDv(|5%bva_c z<-`=7)x1;nuHD|67;lyv?X(ohp}L``mhF>>j-S4}&LUeQ#OZFrO1_S~l5=U%EvJg@ z=c;RHtt%4@iq6hlp`+d7y3}HFNWzhfHTSzTH%k30+ZdOWcX(gUt!*t{iO(TvaFb?8 z)P4!`#1cKs{=Ck8m!cG{&)7`n}C;7 z8Wvvg;7k=!wOXvv_d=-HK%&Ug_rik}8atLqo&BsjTUsmk<~LDLLMXW!kZCm2K&p4` zzF5VU73Y@)WX_D25D~q;%6j{EaGiGRZQjj|tFLamJz-h9m&Qqdm$xextSEUhm0?QI z6yg3`k*RjmmrS1ZW6q(|jO%YMywsL!enVdIje9uvRJF;So|DxczIfr0xw1!|L-E!; zUr@nw{g(cbZ*p3VW!zIig;A)}QdOTQvCFAxY1{TpcH&5EeytTU@Au1^=3*Ub?y2fs z{$|xT;+&QW%ymxZpZfLil0_OpOGTWvtbVNqQfA|P%;zAeW=g1B3#-e{?sD?0=Bwvc zycL$tJC(Q9b7c^hqE(ac!b?@6CD~bCE4IX$1lvc%>4roxr4~0QM)R%aR=gFS&OP-y z*JP04B`mX@mX4sKfbA>2MdEqzU9;Qv`go?ePAe_!e>+_cd^ zGt^7b#eJhD*fp;jGJdT%d;M^p?%Bu{mjgDek=Ke=4q(byeEfp@+SGzOPtxwjb0pfY z`yP;)J!6X2Qh`N_Z`8QXjjiUtvhTy%nC)vr%kJH|djD(l($f27Z*4DVHD0Qc-~CN4 z18?W`K`eAb=lVqV>QmEL}uA^&GR;@$d;?Ue9Q_3Z5n`8x7G zuYSp)c zw?!7|nrK3*M~OZCQK!#TzSQN4(Y5t|y0s~_nEC0o80WcO>Cy3??i?5G)=dw%8JBqJ z(!L*$y3@Y@omc&C;@`3lb+NIrl`of0pS3qvF)Dbnlj@As71u<)w;zxQTYLZ7npT~) zg`YmRHKhhKKka-pS>l^*uyy+;T`^ToMXPIH1+nV$GZ!qD0oscQ3A-%i)uRvy| zV_;zsm!hK8%-4z`QCd?uIXT~oX<0`W!(= z+ShZFuis-XlJiou+WA^HB+5iR=G3eA=U(2<-~aTozx~q#jm#`8EHPj2|Nrptu_O}R){!pRG05<^XgvKa{6}OZr^jkH(6zDtF|1h|NrC1kG^-aUMvC?FuPh_+lEBl zkkVTkb<_0C{r&&D>VMC(tuFev$LF!oTTokmk@pLog_jm>EYQ4qYTe=M*S~kw|96+G zT(Wq#>MjM&sZJew3pclVb!WGFuM8{Wy}d1W^R+c`Nc-B<12E5o=HZ*_y3Mbj^YIxTHgjj^(_ z^4c22aZwMfu4SE=madPQu-oE|SGQ}o2z-SY9cvoGrRY*U5!7B20x5L4J!t^gUFUoP zr)bX-cPWj{8mv&;)g|Hn4wMBkWYdxhcRM&FXdGZi@vcpDa0h+r%_vmXBJGTe9}IAP#VZ zIyo)f5jS<(v_~&qoLJ&Hd7YGAE-!N7oS7;8Evm$|OkPX+cZphyz&4B0Up{k#x#s?U zS>s;bS!_RddN3E~?3A>$Yi&o{4y7h9ydTsdia+SPCFvI2J#YX!fZ4_dp0ulL%+Pgx5$)y)VIaa}cK z(b*fNE4I`aP4*9Q>bMs0e~VLIqv4r3)6ZRtao)Y{$uZce#>x_VWHcA2!6x3~Asx7%(9h_r&Tgn#&b6v-3y-UxtZQAiHT(9~?+rSq1kYZYl(jTO(=~eY z>43_u{z;!Wy*U(J!mr=STDqsbYg=0R!c7acmWF7z3OI3Weiov=)JyYL^WD}{$LtzU zs_QDY2*kz)ub%qpp60FQ*w$0op_)shKppBCrc0wVL%lA>z0nG}_3Na!T_LAp%Zpb} zY=dt|@8+DkEd-|SX3*LxT1zwh%Y?O3>pBFSI4+uO;&Z$qyqjaH@5&%hHdAad*d4Yt zXw{TOdvCg~m{Od_sn{ZLR{43E*tbQ8ol}cfO$k~n;>4kNMru`<*VLer7C!!|MY6$) zEdq;DU+tfMs(SGY4p}KJ>D57MDk=dH5gtxXO<@0YtlqE=tYZov@6>Rxbb`^$S9h+Z z7{!{#oKiOe`EKr0+t7Q$uI?{41l$amx@n<7WW4jkpjDu8gk8HXT?(2rcka`_0VOl| zxIqCOeJG{&>*1v}M#4@U7q6Or-5b(z?TX^UOF>Kbgw4>=(b==e^oWpNDqkmPJi_Jp z%LxIQCQ{OWO|D+Jb28g-rjJDLv9LFg!HNx`?el|PWX+P&0tLOI%kho3m#Bf7hb;n+ zekE@A^aXWjI24b3J)AdrR*M&SG~;#qT{Tls%Sy3D;5z?q-z*`J=8j!jT3QxmZzQU} zze~NjDb;7L)zpiN-HlUD2z;rst=cPyBlpP7d)E%m;+Ih|j=_KVd*lE2;TjTFB z>HH@fkIPLi(9A)Yy==jP2K)a%&--#s%*)I3nQhkV+|F0{?aj@!_rLG#EPnF*xpDF_ zo;!E%&K5DM{{HUl!^7<>*R9Jtx>(Ul8tz-M`?cR?9UUFbSa-a;yW2SF2*k&_)32-uEO~$L?y`M9fB!E2_2s46>&ZLz-OLTT{IVq6M6pHSQPt$B zQ&TUmY^eJB>gYV%>Zp+3oOSZ`ei2s=N%ZOI>7UOSpZ{>y{C>g1L#(GxpPs#U|KH!=FKFMd_nbM0sgHx8%mW8FSuU*_*U4Cs{Z1(3`y|_ImRKP9**PUy z*TiH>cwFUD&*uy7Y{?Y1t^Sts_0`q0mLiKLL$z;Qzwg(nWw-x+-~T`LU=wTaxzwDq zWuMQQ8`uA<+4uXM_3U3i&YIuf@+6?c4>I0(@gT^KD=UKoSBAV5Q+sVb)$8aK&EOwD zpU=1cRnYNz3OHvkVops@H{TVsXJOf8U-N}mvu4`WTFsm}Gw05ZiN3SVHrD(sN;@;7 zF>H12wWSLAd%uQl+O)~)*M^SQ6QJ7X*j7)woxlI?vklK5Jvubm-|po0`*pXMWIfW~ z|L4&5`*o)eHnYFHzkmPP-@h-<|93@EJxTn!KDZ!pv95l-c6-h`w|#%V-Cn!zfBF5| z>C*XoE-tg%^YNJU+I{sGEy0;w(aNE$%fWktn}Jwba+=USD%>hktF)p^!67;55$W4+Ql ze?FUC`RC(t>s{KQw%eVm*K2*PmM;?!gBo&e&g=C5&+Y#|{P6H_&aEw-PoAWtou7C1 z&CSi8o}P)HpPk+F<5Bk<%i?7xZ~uL{eEzH&dBp>L&Z&us4@G@B6kA@b($dnpu{B#< zQBm>FL;m`V54#@mp6z~fb+!1yg$r%I-AE1z2`Tw~(+$>+&N?r(WGz+EL-o z>N?lkGg5J*7HetVNz?CvQyx_GK3<@-Z39ovt!b{DJF}K9t3S5u@8&ng8yD8DDk!=* zc}jlP13THpD&f70x|VO?wMv1NYwOl5TErwSEVKjpjl9NqPPvKtx?={R?m36(L9CcAmdf^F@o*HTS@@SsBrjVHQlDJGb_1!p*(a zKHZ!j2T3hdCmYdlrBhGr%@^_Kz zCJX8GqZ3w&shoa9z83yZu@OWrR@^F zJ@4)=tM|?3cM6!J)`~SBJh0Szy42qPOTDLqlAoiaMMTzGIQaBJWcNCrtNVb&u0EaH07Xn|Yg(HeKcFdema4DejzS#`$WNCfnA9n|P8} zad$0pnmZx)p5Gedu0>Ai2C=_)m>hsL5t!sEp9tpd`RF!HC-TxFR)?W&F@n0}=i-Yuy7qz^mv0W=+?*br8@+UC z*@lEAX>m)7%L?CWI{rq^K}6IW{9)>69~>A3X# z@+E6}Hf=IGKbLp{|^LBa9!*;{aM7O{Jb?Zksw)L(<|UwMtpT_z!4>Onb6Q z|Ge?q&l8dYHP5ApUzchArTubcWJySIj@M_?>oba@gGFEEsd`wL1) zcsMvP_}l$VaW6lv_RL}NAE zT1y3-I@Z1TeBOTls}D~%CLg!jRee1yXOWulU>Cczne9(t;iiF9t3()~yzuUbUgt&sf`r7#~-KZdT z-0HKVx8|u%_qREAcPE_k^sVtr-0XMd-oxiFcSdc!bWJT3)DMZhIJf-X%@@^6CQlA_ zFApwJl$Fzp26yv7L9iaAj8&_zrWYJFZ|!D@cpk| zgFiYVGH<<`xzfF<@f|6^o+ zx8$8xYZ3T%{GHR&tx(GqTQ>NYiEBN41vAF!hWc(EP*f}hMT8Sa;{G>A zA%~_yrC)HZTD|)A7S4-dZ_GlX!a==kP^L}1|Hdrj&{JsWa45c+9ov2i(&>a5^Zbof z2-6IoWqt2J6Wz36PkL<`5t5>bcx~%3B4H}CQn0tu*23f3cs%#+vy5*{-gx&Gymt`J9nc zr%v5kzk1oBJFB!CSKV44;2Ijr8X6MJ8#4QU)bGt--)pbZTDfS}saLCR&DV`zxo%aa zsrkA!KliP=^`~~~&xplx=_atX03jh$oVWhGel;W@uyo_IWz&Bw-7|}8mBwT7Q;lAF zL4m~;b<0lGNNAtE{l9hoN`_MmTBld8Ydght`eWOvZqvUHltQlBZu{Dt@i!pqfBrT5 zX!-Z6X6*~8eVY6Fy?@6u&={M*T%XdTti=+mmZ%lQF6r{B`}tH!^yzes^*daCF7-O4 z9~M}*aaMO~XpGkSWqbBCefq?u7dkCCuCQ~{r|yuj@Q;^UKTnw&zhu#>P1|Buty!?< zk5XtzaA2rsYH8@(^HZ;e#;jViV9}~g-|EEmrv~%J>`A$|O_e8Z)tU!~^zE;=9s1Pe z9TF0|XwM_1t09FiFR7k7eR}1ZHBTNL?PdrG2@4L4^!>TiOKbIlH;8t{s}5h zUa@M=k)xZuPHERKTeE1E_nhUs_H=EUzyGn4eQ<2(IsKm5`RJw+Cn{)^9n}sV~Y zY(q(=T6b{xCW}&4Nl8ha*j-afUl&JA-rBfyrsSG4_YO4QmQT9cr88|=>ZEzwTIO1p zZ+<^h+2+@i;1r$sgYVS87d)7me)Go*ziaF6oS2u+_u*1l+|CjO)$QJ~NRDBD%xHg(!WT`YC-`$tj*0S^Q-OZl;^?uct9gMCo+ZL59 zuKqsn%Zoy0ko3L1>1W?pUpV`aO=ilxFK-HsyDm-s`}_NKyWm&h(^W&drhzAP=lX<( zicU3E-tb8Kn6%frzCa4YU$>fy9J@UFR%aa@QXj-a(%R-Hz z{xg{BedjT$zwdwcthr^;@Bh2GpWA;w`11Sze)~V$%**dz?YAr6@j-q0?VW%B-#r?i z_x|wvy8E;3zwMK4&(mshR`Q%<**?$wPSa)i|4okyv}=D?Z!Z0vx5@mCLiXRXN#g6D z>6i1l1m-<5@2h|GOuG8x>*(soS6=^LsBw2k{WBT4JO2c}pP%RWs7b`k=8M7NDmXc>?PCqk;RrANM7Gv#F%VM!LiMO^?wy?Vy=l?89(~miJ=H%y}y^rSy zh_uG;mODJ>;i?}WmkT|5+`gzx)*~W<#nI8~&tGOvu1gCqw+e_XS^d{8LcDMPe6idB zjl_jjOw3K3AFc~Z33*1WkhA~q;B;7tgZHxV5?)tv8OIVIo#ytQ2j_Oj7)bC;pRaCu znNKG%$Z2T?C#ctckux-O_VO=#%m3)sY?*hY-#_8QhQJ;f+pdQj7jtr76_zxd@nS}V zTVGdt#v6l0?Cyes!hR7~1im=837eL%FdlsP_m zH{i(4kYL=EP{Z8J!NaF$V8K$JAMd2R_+qQ;qgCHrR&yUeAMft+B*E$MA`Tu7MFWMF z4FR9O-;4XlBlV)uOoOM~T>eTHucG3`mbPOL-pU@iv2pTDV|7XY^9+X$w+l!J9GY-Y zd4_Ga+~MTM67~00wm2?4(!aA`>_|{A=pbH3wg8Y5Y=nz36^`dC>ds zM^E3KK4XTV#lK&CW$*7XhXe-lJwG?qs3yf?@7#Y~+o#KCh5NJd6&&_`+uFXHKQBxF z&Xu@|s*DexzNB7oD7U#&d*KJmgJs{G-oEPW-)=88pMj09==j;Y(((HhY;0-^L#qXa zgnHxTyBDpf_;gbJ?0Lb}0hvD|J79S;HC6TL^i?|}A`ey{zkl%V^|^wD--WD`ES%fj z1%&>(znlH&^p@X?Ie8>qJSrFjFB-D69~F=^m5N<4uVcl+9o0Vz;}3}x$=x~lYOC~( zUA64d+utYreYSSZnJD)!7asBiR2!ro`JwP z>`Z*iqYKSvLL*bwol0^%l_a)QSJA|1mO(AgVYg$3DL*u7m`i!2CEY(g;<+-$WPT!D_D788~ z|H-`SI~*Jwhwt9)pD|;iPQ(Pi|NrDNOstxkYbsy&hF89QD!${f{@xesG*Z^b9qRPI zpZ<8)Q;k#WIWDyc3P|+yPw$)Xz~i27)#O9wagKqz3Y!;g$UB>5_jAvLBfry&7C$=V zJX^?OQ@Pdp_cMJ%mds=3Kl^N|dfKOucPUDXohx6yWRvBQ_e_4DiR z+^H=n{(kWEZFzZLg)DP@o4tQNeE9_Oyp1h02XC*UQIP~6-}Vjp_xD+Km#k@CDxj+f z8cVU7t99!1+3uj8`SOP^U+*^j_}wt=O~E_wjwct2fB*bf|Nr3~fBOw@7p|?S%(rYERGju16P| zmuiP?{`>HF#Ktt;pY8pho;0R=o<5QCJef`I)=!O_(q@yVO+5K;Isc}lvr%&ON%H5P z>_0G>ecsax-0nAa)v8y|tC{7jFZ1wa`uybM$^8>2?Q2g3E7|T-%Gi=Dx|99KeN?afj@r^ zNm!g{Ug+HZ>DFuaipOV_*WBLF^Htlp^5IRJdo{lWG*5Ex43s>v%QU#+` z^|JiAbIy5JcHf+1%lO}c*Z+OonbnorkrNFkGBWRZ`Ru`oZ+F^PtT0;tD&H$%Un!Mso|{;AD#ku}AF9QPTbPn@=K%9qrcI$qIdK3%=36T5NNQSa%SRf<(tdQY3U z$D)~Y^74thQY2@t-V`xuV^d?Z%>`C>gMta{%5KLdo9NGMY_=)*e!-ydkxJhFzkG7_ ze+uL3ex`o<^zHNZ{d?UKCg}5@ndzAjz+q>1@W(GU;|rw>!otTEUd*WYabu5LC9*|lnK!0yV&Z-o!o{*5Ut{hIi|LI2mc(xbPdk3TqAsBy~I z=IfPUhAGphU$49sF~7;9;~Avcx< zUfpsI{e0fTN$v~#rJPF680@L7iJZK3+S%x$8+%mS#p7(wbk_fwyXNcbinqN^e0zT= zwZ~UY#`m z_j&pASiL)!&x>xIZO+WLtN3}W9*@kE#_j$LQuh^X_Ws$i`n>HI`3G+Q8S{Gjq>rz$ zaJT=U0*po-PU$5%JYq_G`ALuF64A$3nkF zFHSM1*E)CcbiOdvvsjrWx4pZs<&KiqtXp3n<;)RPpVV{xMq;Gk$38AS%kVD|TUuAW zx)t#AWas(7>Z*eKOFp{r_NF~r!da7JbL{`Qe+M=`c01N5?H^I0ayZFdP*Bp@BLl?R zkoj3GuI{O6&wQEZiyymf%d78bm#^>9_xsoU#&`CQADhoxl>E>*>~>60M8+|ofaTT% z52h`GKiFSzTxt^%knqWvA@`p_Ht}H~3tQ`h=j&BfLgJ0n4O=d3&}ed2;=I&0GkjV0 zVGbUyqvzw@9TGTpJ>Y2ClGxJfF1&>I@wM#4>sS_?JC@DEt{GNN=vLeI$ zu1wy7{|)6|Y|IEeWsMRD7Fh z-VMXf>HI2!_Bu_qyPt0~FSl}+-#!0h^1G)GE^9uqHEU*$PQUcKOxIjvd(w@+8c$89 zp6Y&nT0%^^_fqUiTh{>Rvj-Pezx_V#GG}Dn^~J||Sy*3sMDOXT{XK2+6chILyuBWN za;I;7(mv<9 zJg6W?A!OQ<;r$7-I(~T<2o=uoM*JaN!LD#?nFO4Oh6Qi7#-d(wFjpcWRt1|!p7~9nB z>6EV4cWyf_B)RnX;nR}^7rQO`_*LCPrRT*AMHg3o)wBW~#f1}lI^|E_DwX!|^Gv?o zd^>XH);4v1o3rZbcInTP`#;^eDE{-u=JPlHy;y9Mb>nRQzYp$BPKQ2nbGeDHQn!fd zj}I`g`{%f$s^am=kLnsKGWEF}|85D?{N3`RN%_O)>ks7xdXAZM{BL-0YiGl>11}eI z9&s0rsNVgdL!!o{F{AY1k6)P|zkND>`ZE94)#BfG@F*E5v@AFfP_u`b;{(6ja^B;< zZ_jSHaZ$x*R^N7ihR5nYiIr)5^XFQeyTyC@<-NCVG4INfk8}u%i0(byxSVgXhSr_C zwjV!nBwhKia*2xm!^{5tleebX-rarICw}_wjt-uO`T2X!9sINW#k&i=KXy12Z9kiG zb&}$pcaIMLnORkqKkvk!-^@Qg$F5uB)q8Y;@x&d5QZ>zo3X0yGJ{8LS^Z51opRb1B zFL<+;|3~xV_YwPSdYRezCQP4x{9rS?WyJ@D^ERJ(e*XOV_=%w4x8PnUe=+fly%V#$&Qkf&l`dsC4=)2^wNz0v= zuDI|-;&tnBqn?#|8ePJj*Y%38yDQn)g&|hM z?w=z|d;GefU+gT`=V@tJsZD!noc35=plAAad&PxSH71Qeeq|OGe?MriFr(wdK^B%- zt0%t8v-6o_FxBTumT@yY1Y%{;z3E^rv^)eTWyHy%Xmgqd1IJbXO{`t6nMb-NMs=mvvh}}EGv{*4S z^JPwTf$-`uePt`Pru%>Yv2EIP>E_1|X=b@6kNxc1&B581vZ9WqSviT5=h8xHvl$nY zml@>U*!!cMRamxO|FFA{x|)et{QHD0iWBcx7pd(3d-Z+5uK#^gmb}b~mOdPvFYI8qlo7dC{oQ%ruTR$he&3DkIc}fwexIq&OeuG#Lo7lejR0Tw%Gw z8>;196sXNL%jWfgaJRrF<*wvKl_#!GyB(t(l62~zYv6?^k*@24l-pcn&-G~)KPWA6 zoIfT0`M#ycVuVc2tq@^#Ej$uA-=%JD@ASYNj}?-W!UHT{dzgsCt1_60X|0rH3qSfS zI4I5J{yod7*{RkVYPXO6+2PCkcjuM{maVgH#H`+L_U%TtQ)-eUL(i9HgQZ3ms(7WYdzxuoz+ z{B@9}-9n`>#n!^`_qpf9`CM9`XAgg-(+g*%9mSLZ!*uneeT?G9-WghC$F{3rQJQY zHs?%b$J5oAiFHx!fV;qzgY- zgdWJBSyMU zv9nsZ{(Xg!v9Y9$%X#JgyyXv;ir?5<&CWira*krN^2w;Ja$DQE_4NKqT)5wSVS>lA zGcynGO?IEWJ6U`E{<@a*c{T@Luity*#g2$e#?vkwUuy69dHUv>qs=+@zF2Syr*F_q zm*;)yzy}s6R>F?Lo=0r?C-D|r`*gDImZSL;Ky*ZMenckM)-bLGdeBkl# z+o{uY{yZ12`SkL5&99q=c7NYU%&*OR@>%$}<-e2e68-fjjvv4G{4f8#mAUfr)$_~m z{k8Y2`N$bx`&YlHXxpSo+a`prHop1uL)fIt&n8Tpb#PH@rjM`8G4c8PPyKrHltD0-CbrDvMVK7M|0_xEmJOC67o65 zw5e1}WH}30mT@X)WtC{xBd44o(45`Mk69sIO~-=H>YP;%Te@J!k;${N4@{Wb;Fctg3RpA!gR%bzsV3$H0(`l5-ke+$*p9O$kVHSgWxkqWxI* z{e>To$Ia>8yl6qt%7Q*$)$0?y%l35dyd)E!u&ymmP-}LTjmu@w#g4>b1r%$aZ&AIhU zVE&vR*7N85XcCXB>YVfTcIC^j<{H0FoY*U@W_aQ*cWwp?s6)6bMY8+SG=p+SqwjtG z33ra1^x6NPQE1t@gtNPPm*_k_$N zU(Zi@xhXVd{p|C7cicVCo_MlRHv43p&7|_U>bd#ee#yT+#n0IHM?8M!zq8llYfqZT z&(5m<{&fHUllK1q=H~A+EBqvXwC3mg`cF^y|MxsO^Zy5s++pkT4VAC`uC0kYdOcoz zbJE!;8QJQ^{XFVbEBeas-*T@yC3Ebk|D%7A#gf*AGRp4#2{$$F1=Nurq+}C z=f_7CwR`8ct+n1!vU1b6ovKH!##~>xY15`I`8tiKhm+@TdjInIk6*Jd8{J>Lc}LU= zohyrj=6LF^tNwh+hPP{x+V&&cZpYLv>}y(NAviyO)2&QH%PQWFrHA?~zeI`&&1_yH z+!?lT-4cbVEiE!#ryC%PI3|64tf>fIh?0>I*qggh$mhul-R_EYwr_X?(tM711`0-J zB->tSJD$fmwM*~(s-ok-;$D;ar{&&B!<$v+- zkWNoeKX&Z?>0iCwGfXt+yz?@z(zq*Oduw`o*_qUbO_p~G)8*Zct4`WkW!wMu{^5mx zZ06bh5s}|J<@Ck&q#w8YUhWCs(fz$U?%_dO%QrVRc0V~Pxh8hD>#t3sD!MZdpFaQm z^ND5Enl{{Q}G{jc~{_PIHBt|w>yzw-0f-RKYM?$)K~uv-DQ2}z?vnjI%gw1A5HlkxxG-^-@bOn^ZA+yso%Kl^iHM!eRb7G z%6|67WOd`5D*@MXV-Bvnd)p(v$bRuLmkkvsW5o1kdB?=aNSo(9`}1>t_Onp06(Zr~ zv2CYTt;+iM_o?}tlh#L8mGW;gunyU9?R?hCT zPg|`zpNNVCBxL@qGz~R#|5C|&cBRhZDaYtXL zYLI=)iy0A0O6sRUUuQHg)AA$ z7h2sG^L8qkBysEtux&h;_=A=8@mq0^01u0Mb&Wr=ojESFF5T4 z&FwwCwf^>}5BI-U(^Z~aI(yrN>!}Qe&B>Js=W5>V+N{s`&uW);{lolxnFm+R%P#r8 z^y6PD9;t2o^Z3c|$PEwTLTuk1xqV!|y#HUtuI!zE{l9-WSABj%`unWBq8CSdyNq9N zn)LHcx6QM&vm2ewTc=E!y5{bdR#WL~AAh#zZ!UUkv`M@_E&ABD<{9>|wEzLv&iAHd zzRK~Fxc}(mU+ajCN>f{YPQJM-S6H)n^Nfkp&ISA19r_jGA7}fie#XDQs`dXD&6r&O zpB+S>xBEH8zvuYRBNcNV3CDjp`dt0Tk%~Fz?f>@p_tzgvpI>uocmDpvAo_k>wJf`< zqGqYs>aews{$*~i`2VAN$~ac@)R>A!r@v-SmFT&VZFWkF9Ky zih7ddy+TLT{+gic#R;?4x~HDLuu)TddNyDE^q?t|J(9jX6@Aca_w7;69BGSt(-xNX z{*+(pw<71)M*-iUSkKg_s;d^7h4jsyao~jEN1kq3$2T7?y0{#>GS5vz$ENE;hs2>n zi#ho^RV-ARCR{jiE0~G3-9CX02Y&hYpFREs0x~GhTXih?B!){VP5mE>#5u zCVhGTKTLZ+e&%;sd~xRfUq2tcecazaU(9|#$Ch0Jf0$}Me!9HyV%uX`frj?-gtG?Q z#o~MUtFWqtFdGWq+dOE{H$A>i^Z@SlfJj&kU+OkOFZbj1h$A5l2 zmXterx2gHkWQG46P0foWuH2vdaHI3j>-PH}bPFH<_@&^mV_?O%n}7cleXKTnp0Zfu z?vDHLQcf-yi@ks{Jrx3-twOh{wm$8 z{O#LyuXZ-SeMP_d|Me5f@6}EIe!qJ9e)0JaUa#M`M%L{AuhsfL-E$1h+}zOoMO4}|dRyO=rLQA)skMK#w3e_hG}`q*z{%*ioc3^Y<8Vzs_FL7 zqd^gDGl~MVxz2suDIylVEmP_E(ucuvj+)CB*#v#{)9B*9c{CtQqT8!bZRLTEixK-p zgD>?we1B=yWwp#A-)F}c2ha3xP1*G-aPOYj(sQBWuU>?5t-3Mm@2yWabf=#B)221m zH1wjj)>L0xxkZ_0xV2U>K2D!6w1E5Bz823O8Dal7AO4@eSK01b`HXkE%Cfi9*StKI z(Ie}+)Hl8DUWkip$Qx0Ys`q=pt8q0cB)yMK*72Cww>Me8WaE-Nvx}eqHlERrJe&8; z*X*YGoYz(B0%a;@%v>&0|90LHm(_ji-fIS@Ys@aS3V!g5P4=u+^0B_-7f$eezWCU{ zOtN?5$qb&}GxJU@U0I|vVck5#pqcZEjxF(Vm$!}OF8RuH!Te2xR)Csut(BEWs?%5ik@%UzdMyHc*EV5t|c#-)nPaP%ke8$W?b3A z@<@1*AXn?2Pp4M99B-MtTS<7f}_B zqpqkr^UhROm*eUWL^pf?d-~3rmrUWW^b21G{wcru)cZBRb;H-+PdWeZ@SFdSG`u&33rfv( z^9a#$6gjLT}xQyI@9x;bae>J4=>>FqgdXeis=xKNTSR@ukr_@d?cO?`J5 zK3|+BA=&Tdp4B#O8pFnjo^^*=jd?p7>V zXuA1KYlW4?W)V0C&=gvxPHVwSlpX&NLwGlYL(fY1Mbe*=I1&p1{NI;E-)-RKc{itKEsEC8!LWRJbwJ#H^xb4^K%^s zjR}jDjh7tP&Q}Va@kn08?^{>Qws*Ihx_2{g{Al>*&erywpWkfQTCS?5H80b6nX;hg z#+ioGb!UI#CB%@#9~i>*98c=*wVr z4XdJ#Q(ehZrpY{wh~#{F+zXVP|3qjWf4yo)>1VC0q17CmUmWAl&yX}uH!iy)AtW?; zS1E-Q7{+Wm9-kHa2M54*>2`hOu%$hhbOzxR>5 z`ds4gJNlwdo)B?b6wKM>^R6SLP4$tySie*F{KCo44O9D!Kg<3p_{Mcy-=y(Gi%*cz z=ZJax`%I;`ZO(ff_KDj(ATIRu_WPyx*Z$M4SQt{qV^$yQ%F6pYr|gZ!0ssBaFCToi z|B2;!$-1}zhq5x6Z@=~i1Xlj7&(hLAws6%Vr}dnLITleTFY*@NSn=(R2YdFB!Y{|l z3pOe*`o8N}%p)$dfC=FI;pwo#)s#vyt>eA>0ds%nrvKH{A1@amN$PNd3@fS-t^?<^)u!rlHy;^$N#?kE?-o% zYUb{Vu@idlUw-%gyp?p}yvu+8p1#+gS0@>}H0b_~mYbi&4Ki2phD}y8u5)USI2XUc zLvrmFiS(l{3?EO_=9zjaGs&v$VzQ2*q3q%*UdfX$zIZuXBlu~X+p`xhXP2B76#=Re+CMw1Dh%uZR>GPR)}kYfq>pM~Y2eb|&F#o9>RPUlX=x@miO^ zJ$(4?bj9YY0-2`+PVh{4J@fISckW)tf{do?rrzR_7PG#!Iq$AjQ?v6$5seKp*=HLX zn7$W3b*_wxZVHclV8dK3*F)i1fEZ^BruuD>SD zBEj}_=ge*Mbc%QnDJ!&1SP_ym$;i{=teS<9Ap7@(H!)0wpSY60{?fJi^=WneKkl;6 zzdsoVao#Tsvb_JH)NZnm!n+stJqG{P&sP?H|NeTf${F2?u$+C5kFiy&?2W76HD{q^ z-TeCxlD1jyohNB_Z_8o+&&!R)Lqn=Q%{(%%N$<3+-2$VtY`y2>>UYWW=3MIAw_xY9 zqd_-!MqMa=`g(Wwk<1kf7AZY^zMQT0_)*@x8QC@8wy=G9Y1GU5-$LN;{C(fL3u~4w za{P9Y>CIQ`=OI}Jif?CnyeNJi@^8}j#k1p&TsEC;9e%~o#5DO_Q)`6p%&x0TPWEix zlJtiq``Ov;hpRqqS-$$E&l{zw(;llQrsVX^+{x;8?Aa-er3)uY{$gA9;^pjwjFi5Z z#1%e`(vtmZ3I;t_u9WD-Ssnd4`*~sU=Ld`V?Lp^c#O$nUT=mMxNomo>?a@AYac0xs z$2_VyDrcs0F46f|%qs2e#Vh}*q@TMcBr5Bcl49c5mzR;%G2yj@g2)L26NAT7u#cFn@N(jaSz8B?yN@S0~2 zpNe}__^>!G3{+W~HhIRTmKQB4Z)9u&gXLSNd7M&WFMoF1D&hST52q}pg%bmRu(eE@ zFv~G1O6^?UKAp0H)LCb9LfTg>RKDuEKrd;@GKPsE(>t#j&oD|gtNNv;QSx=BNv2ZJ zOo6KpmA05JIZ-0g6LLA>(v-+GaZ^3F>~E62y}jt+pUib}J5T&9UTzT=estyJt#d5m ze1C3C^6KIb4vX@M%rsOz>M9~{>lB%3`25_wXBDx$$4_}#M3u~#^hl|1>Qs&S(P2?O zvAL?{@9!*Fmc=i(j_=1WmQ6P1?KhTKJeqttBIW&=JC)osOpE0%=cH{;*k@aurk~>J zCU(E(@{Prd0hsr)D{d*kr^T$Wwb$551oyB|G!{fA~joI7Lk*L1;rHGHC$)QyzB_nhH*4Z^p^ml1 z4BO5z?)d3i`0UTq|6jb{FPojW>*x6oAzJk{pJoIYnLT*?fAMk3U8FK7L08boV?s8ebH5s9$z=@rJFVgWW*?5oncFi;FirLDg)(4hvVw&HOAf~q=JvC8J zeBHbUpYLkloc8wIE+1-L~h;r)&;aqmn1TdSn)MepQj4GuI|Sdfh>TtAQ4~ z+cx|^@cf9nYf?f=$EsCqyQ+?znYCSDYWO`Dt;vg*>N;v%0jE?6nIr$0e}CZq0BXx$ z70mLPY1h5-^7D&}k4Jl`a=9pR8g()?E@NqQXmHR-{ZXJB63W_fl&vR7+#vm4jLaM{ z#fdMJFHTbw>XcY#HOca`c;Sx|eAABgC!bz+_D**8quu%YpTtEAhp&%$@@wnqJ3Hde zPyNLmv%f5Irquq*$5P?zW1ii)c{yfx)cK{|&n?TpnTYGpdHkf)%1>tf(?_kvclH$a zo}R8(@a~PLlyqL<*CN)=!ih_kEt@=hx^sbxKy>*#Ma@#lo!VR++`UP!rbynnX=PA+ zEXK&l=;y1|`3$>GpV;*?@}F|h&%fXA7jIwKnJilRL@YP5~86 z`y3}${Azt5F7wrCWz35w=b7B?WA-S2;O%^WiSeDNKy$c*$+~?Lcl;>fSh_e}qx-J& zl>7OwWeza8*FUrVvGIas!=bO%897-${r9lmExGJ#{@-%mpA(bS?LW;>pJP|gciAv` zW_ot})hT_dQft-x0==GI(KOy5Va<5DaI!>tV(Y$noMxBP3{T!-3*NjjR;rYT$M@o8 z^DsA!r(DjU255c)sCC!4P%^2r>B0$#eHvB=rp=vQ_?ai+L4xiZvE3VL&+}c&zuAx< zp~0OizFA4X`_-(&5s@#9FBYg=KAw@FCEM1&p1u0p8zln+0d;rto?bU)krM)3DKE5m zE?zf&{51TYf{syNlj&>E*iAgLwzZFhC+#SBDAc<8da_}j(yS;Y6VsNS?Q>eXH?u2W zF$t7j*Eo5#d?Dw?p3Nri3zqi2WwJIhHsyS znGYU5_D_jPa%bN&jlt^mPY?aP zJjcGg%XoQz@w+#kud=i)YghGMUjAyu+La4-y^;VWzE4Yw=U7Fa{+nDtp z*kIwL^!NiW&vA8yISmss_WX4&_|A9eu>G%{L6-LqPPgpdGjsC^>GJ;>dzv3xEt<`E zvEqlj=F&?ywRzOf2guxUj(8(>Mrry1y(Fvrjr_%LYd4hgJ?K_W{d42*{`GmgUOxNJ z)8Ba9<{4+Y-kjq(Ygj+O6*J6S#d~e?awAaJP*>fsexB^*DJoK~jb!6o*=ezZ{Zjr0HLdl3>{%Wey12Coi;5oY68-5j z-)y%3Z$20Q?TatEM|=0g9Pf}@|F3n!35&k@cI__f+E01wKYsD#(9h4}H@E*+2wry1 z!8^KVS)0J=!mu3{)e9Etx#aF(`_?VHaaKxapHEASlB$kL!`*80jYXk$4<}}R`Sl=} zr&RaHmhD<6IlVo+Jzbq+d4q+SRg?@ber$YmcYnL2@pHqB3mi*~ES)xTY;3DbN_oU9H$EM#GE7Z4I`uMc3UbDYT1;`aEVY{Twyg?)_=D}Jy% zd?ozRY2}>M*C)@k`oGrryZ8f7N1&TUY^@Tgdvwy6hrM4wY&ZMn6Q(cJgKmB-PP<)c zc>P}cm!&(eT)kS_{%!ZmWwZZlSsmMBQ}^ushwt)opC2bzFwL>7p2sPyp1A+U#Fxft zhQ-%pmfbpYBlgR*Js|cqwb6I6S_8@lt{7q)w6ZRiAzsgm!zs}uB_F&=~;H9GFtd$?$J#> z5lKQqou2+G`uiK+G^wVnJ(+lUR_T%*e#Z+ZSvBs96IpXAwenohwe|7+Usa?*<3~QL z+Cvs~d#q>vHr$vUFp%Q;PW z`Gyns7=3+ne|`VWqt4IYH?6KOegX6Qz5m1Gf-1Ww9xnaxx!d9V4W5-Q@{Qa0los+m zOA~W(b1QmrLA;`B=cVQO`XO4#k(Nr02?Z9i^)27LUUJENbl@gh0I92rcid8zx7wzepHA^ci zYn4Uao@ukq*9Qmhluu`mR#H-m*r?Thpo2l^(xns8TRTIuw?CAZJGzJSbK(5A=cZ(S z?u^>h^ZR}+=br=jcQ4&Ed;Y`l$)~n`E8~;ZO}@HI_ld}w^qXB*Q=W-Tnzwb*6xE$B z$JB&p&+rR~Fj*Mb+2VTap}2^jgNI1tLc@v*_6Kj}yZY-n;8On*NflR zvvH%LaoU-LH#auUm@y+E%S_7nv!Ty?L+;;4`z$Q1ghge&OMGO6)%=nk9%?;uBob=8;DB%V%XN2g(}ps9T#G85Ko5dD7P2uh0Ef{IR^yxkpFm{rUPeE+hNo zg-asJVkcjIJSDwjXQhCwY+vRJnffN^~vvS2&n>F@xJBW2Lu%_mdU8(tT&oSjt#zm^`I`dt2VU zL%rJ5cN9ERS^jF(&eFB>W_208T6Jn?;Zvc~(5EuGRz4puDvQY59=f>bu!yXs%f*S# zr`C(gTDnAL8a_SlH8t?mr%y(&US;hlel8|{e(J;LZ{1Q-R5HDTIr_MgZojKddAe?4 z!QZey&CMIONgh7rYCO{{TdmOZWX<=t{IZN6)bDPV+*N7#e_P1EACLP@Ot%+2`eOO5 zrf$ZeuhA#t_jZb|Hrr71)N0z=2;ZzUJ;RThF2_^^MQ6KYxad5**y(aa<>6a#mxKtN zM#YIcs((F{mguVwV3D(H+)?r4(NpoR?%n!&a*R8Ex7mklrR#i1_~pd^?8dI7Tx03o zN6-CeKl13Ace`n#UmzHGa%ba^VI%BQNf}&!aj&3Y^ zl>FGk+xy{x#=kNa8|J5;p7!wN%g*iF&E@3eDypg;J$u&H-Ob(C*QXP;g+p9iJSR8z z1cx z)6&{_?v1&xJ^sE7(pufUVwIkvmD-#eHzI2GFbBwA4P2}tsD0s*nDW$@i*zR>*j33a zJ|6MOtKWQrHqV92=5GGiC3f~PCUr7x6`bX>WmZ@BYH_Johx)c2E?wFqX)fH|$vxBJ zrqt_~(|qRG@ygaFAGsBEDssl$-{=IgE(e?BIfcX!XJv(n)^iho;OUmyGI(bCO#a(A43 zDeTU{{Yl-%X40EII!%k4BKD_Rzx4j>dG^e~+v*I?&faeQ^NzT@mOP@a`!ZtL$K&$5 z)VWGOZ~pUW_07k}`*#+7wX*&$mvVSo?3%kU_?_$Asv)r|3LH)bz@Yk6;s%K}1zusB(Rw#UZ?4w&> zPsi-6nt1x_^PN>&=dBKZy|dz@jkw;N#rysVO@Dp9_~j?db+P-;th`(rv#X}>t+mEFLuD z*%9&G*EScwuR5j0_fY`xmwrpk?`V`FnPC6+eDFdh)Du_jY-^e~M>jTFYNO zxOl>;l9$)N2j`@nOZ@!oD$DMd8S#av^HTWEzPi@W z%dMsI{N}HEeCFk2P@f1i)?-;aXLGt=!LJb6>F4J^ymNE%9NXe1kjTqNk$Q0!hkq6? z-%0PRDTfw6 z?)3Cfwa}5e-(YY^DfuHWkFtVE*Mbcadup0LeBnK2Zordno`0v-x$raR;hWk#)!P%^ z+-)lS#B=zhZNtsaZ)O-KtBHw;dCfF2H9dOd2#d0^G7k^W47+5pb#aY5ezt8sadPs> z;N{BU8UkFc8QIy3SFZHDzpu9P=hNwx-|v=7S`;WqNl9g7WGq;=Y}u4k_x4sBr<@RI zYHHe1`}uk+uoyl~B@+FN;TZ+S-cF7Ik@3Zfq}S_w3v#qxq}pM2AIOU|`~r zhJQS-{+b0X6yx;#ctrL1q}kJbbDT7O^SyOir<{7_z&?()`cu{Qf9ua|pL_1on~&&vy6 zHq6NC6zG1!!D=K@lq^z|%(AP>L-f}R%`X?P2P<3`R2J&EDDq;#(#wX$#WxB{S)3%R zs?sDRdfe2E-So^|ot=+OO5JI(yYh2Tzj@$wF~g)KYErYDT9`E1eyOd<=9p=h%olfW zpU-^T?w#D?52PhpCf<}-v;5qVvv(&SWWF-NLzL%@eZ$GiX`6CyTWu0j+g$tF%ZR`8l3qPLJiJjLQ-oQV5+xw)Wr%IRTpG|w+xAo4x z9i6)#rEGhzr;`4c@15;0z8{T!N9}jNeD?E?clhSx{qmo$UcVm@T;6ryM9Qb@IS(UJ zb!TsT`*V5F%z0ZUZCJtbX!0cv&VEG`qj@WKi0t{>^ntre#lV6|{(nGCvl1s)_rcrt zJm(u`^tH`iKKIVPgM~Y)S&gn9Yb$(wEHN?h;0(iL3EQd?@tGzjCNBQ|{IRjIPl_z9 ztgKF?7#&F}6rULq9-jW>#Kb+nUakJ}{=U4kv-6W8%cPAz~HsQalf6DzkmNk zW%o_x@9&9UGx~e$k6?bv-ICAgPx>qL?5bsd{rmmC;>QO&ez|QQ&u;GrC0f}}Kh8Se zdcXa{)$9BjIlImtcK>eGvT^IoZ`EsUcGUO(ew({xtJ&pSmt21D4ZHPzYtidxp|{?f z7O!91`D~fBiTT}yTbDLITXy?ScJ`93OBf z^ifS$o8LWOosCzrW7;)=rY5J3u0C}u)tPJd#0VJ+ec=73u3^Hq(q(>l^`6eomlA)N zYdLuM6pC*KExUDQiT`~@k0rZKh_-d87L}BK4GgTDd1Z@F-_-EWb?f~*x_p(?>{!{; z`GtavPn-RN2VduPY zr{&hEZHHS`e$!u3Y*;7dvfAo>BtoG`9E4hraga}{CdX>UF)*V ziJ$eRrRu6H>P_t0Rq{>VQ$ zD???g?d;F=*|Oi*Q>&kO`jbc0q|@vEw%@FNaKe7-sVhr=sw_(tmYeI6;v;l0@ghs> zQ31KREzA8G76x{*v>ko?z2wKvcn_tR% ztgWs6^5x4EBh9H^6FpQoTAf&!7^9-1GBPp@vaV>j^++_%nkDu3_jmW;;Loi=KVL4N ze`$AlzTK}E%62~^!-Tgmr-{1H2;9;|O z_8Cu4uYdRXfur^J_xBg?-P^luo0y#49#A7BBRl)yy}e<#Zr{$x%UiN?W#hJOVo}kv zL2Z+*TW2m?#&+xd)=M`E+P_t=-C|;X>Dn!ix9?R3-e9bI{Or(oGhhgDT(a*^+I~af|aUiM>rUn8f8}c@NabKi%@b`n|yik@oX0t zx8fHChRp3N1m{obJG-V*=j1tcHPyK%cDSfT`8wwAuqu+Rb#an3n%g%&QNbW}%C;%} z_OcBVFHA8HiBs25YMP>Y`bYPv_{y(a|GS5jFnOMo+_9@tSVH97jE#>2r585FBszF_ z@bI0JTauP0EGFxp5u)?bd-}$Lg|b$~e1s`|hPY7u%5ZRBBqP?(w>P!b)!+MnwC% zMIUZha>PW=F5~^2kgLAt`cLH7rS;3(KYN|O@8OS=o8R2|?K(a8_&nyE`+qH?%ipDc z{gwNp?dayb(|TQATJvtN_`D`WP5-2-ohtYL1qMxrlR7#)l?+U}F1!e7QVQni@laCH zn!00(&YoJPnJKxwOP8uXKGyqMXzm-IQfX=F@`;|UP8VI(T$Kc!77FOnYL%9A8&Bee1&%zjRw9iK4IU~^&d$vTo7q2~RG)ugb-2FWpAXLW>i^f?tNk8( zukyLr&;en>Px&+jg60 zL6Ga>)KZTt1-YD3vy@zdoL!Whuef(!xNyZy zVPcub{D7uu+gM6V4V@M;EezoI_0_a0Vg^lMh;rTCTi}%Ts=Ybo_R4uiqZ(fw3S}bBqOdowI87JCE3Kxy9>N%?U2ODzkpwgD)SY{N&d^JkuEkYKi=+ z;1xeN=gFa&ljqn*9{+h+eZ~HQX~ybVQvlAk1J~Pc`pA60^DB8CCPk;sccD9LAWR8FO`g-U8uh&1Y?5qFu z+jM=|=i}~`qJKWEUT<0d&`9-Z=$l*R8@heoSw}4C3CX)(+>pEb+ve2gcGvQ6dcN9J zvuM(^P1*kyx4pOgusLYvjCsyJL245>u5>w;E+9AE(J6}Ww}fI%SblN1KFi49x_Iqc;tvkfmL$eox45dl%N=2t|K_AHVe!JHogO-_ z(H9hF++xza#iY3`E%~BY#{{h>HD(zapL4_~&6;^kqm;4u`Aws;I})HpRh=&-?%39B zkT4hADk#z+Q`N1K& z)Lm0wbJ3%1t+Gg zIiYT4C6>-FZL?RtbJ~EE$`OB!}{_cp1AL7pI`oY^NO0UU$4)xC|%d> z^6p-J$6xmTpukY~(6fc#WG#-|V{Tuu&id%VML}h6><(O;`}^jeTK(DE-YV9ARoml~ zbW-!qfpxX*5rI2CwgySgpXKXxt7wvO_=KG`s(J6^ygF;<`TR4vnwyZ&uy5bKO?g3T zlNG0W?Y`n$wrtn@sV5T;w`rypJvh+FBVpj6Il1=NmzP2_|2$~suXw-r`xK*}-)`rB z2Bpt$xAQM=PWS)yfm$hKyL$RCQlQ}rcjvR7n_nh|3XXC7n&WW0rbJHHYdeih& z!kB4KY~&^r=J@#%du)^?m+Co0Ya~oOEE8iZwlH8uVn#w+fP$;ubmi&gYrK@jyf21I zEL^MVtZ>2AeckyBic0_P&;C2Xui>sZnI32YYF$ z?~|ffyQ=rKdzdGAdhn>JpX``pQ7j{_oAS=aTI|eZ!|YonkBo#o{QJ`<&Q-3ft6Ot_ zM_(#y^obKE7M3hmUw!HBhRqufmTpu(xKQ!Qx^u@4?^jmcci`g8ztz(={r{Y^%xC-4 zQ(v=+J}>h0@jq&NK;B*4zl~S6(L>3t^n}5&p3Q3Yu2P(hZEtSuiJiI2E;Rh^)AMr! zPib`NQqB7rTDGcU!t*%cM7dO0UedIsLEMHRSr-M*)G7-kZXOB;@+%cI$r@t2RvD z$8EOx?Z4<9!fHN0*k{U^=fzClb#nf)U8SX^ff^#QDVvJVr7ZVZwR&~=#FGo1 z+sh`NJa6}VO}7u|4DTQ6fn{pUNdeUopB&`Laz&OFnqR_^!rJQdX|GtRy?EByIKQg5#H*{R*n zLGu#N{bZk?I$9jFw`88S`1!)$zeLx??mMvcwD^vqk2306T2lj0TsvlcCEmjO@mpz7 zLHF&ew#mJHj@91Ey1d&nGk2Wb$?aNUu~T6345x>)rk>fnHT~+dwQuh1oGrTg+M^u# zBQe>BzsP2y2G;@)yc-!r~WKEmvd`d_gU+2n<{_DndRL*+oroaVtXdL zHrKVyH;#61IrDVQ-7VcuwXaVO-!buNnunnhyur zYkoXz=aI3PAZJ_k0W`LID|@|W>!xTe&~)GZzWcu;{%l?HX}b-7oz~Rvx1#20Po10e z^TEuw_1aT)eb2@&*|hN?UwK}d{p(<>4Y z*?X|;qLa??=*6p6b+tX?IFh7!&o1xDv!$DKw5N6os~Z+PaQO1I)X?OT>q2c;jVo!# zdLsWkJ-h$YC2y@gOFn6dEneHv*{5P@Icv(50H;GXGgD0GCLVTI6!4npC35O&om<}p zm*8M&U*Fue&d`akq?9gPa|{nZSFrV<&*qt}cazN7R`)w8PEAb6=zW{Sf2nxdrmD|o zMcn2S_vy6rN}ElXvvEq#9MPPc+ow;JHlMh?jF~mte3MeX=uGcTH@B4Xdrw<7Q9}A? z-`i@Bb6!cuubrRBxm4qf+QX;PPXFtgF9>BAmu%1yd%S!@p0Aka!L~PdcXq$(64E-= zwL(jO*`hTaU7M7$R-an2+V0rLSw(&!;Q`T=K9YOa=x9GX(-}4E{k=!$dRLp=-RXIF z?Q2lSX?D2&j=}kQIhbbxfapapv2S44( zICpLBvNcDhU(GHCP2pC*<$u6w^YH!u*}=PK|9`Bp^wK%ihAC(E^lkb2DO4r>iO}3F zQzpC!sd0W(__;e}W3|DybN`O0q;07DEw}B>jq9OW=I>M99+Q2t{+@?Niq5ugeJm`k zN!i)oV`jb)IhCGz>CBlm-9BY~9Is^fuSA;P)SPS|Zf==zL4l1=X2qJ>Z*Fhbul@C9 zVfp)e=Y31}|9-do%lrHD z{`mw+iiv&8f3L5j^XC4o^zU``zyJQbcl^=*>bgHt>mSEIT^@Av+O0Fqzt`6MTrszu z|Gl>P(il5;t=se0ZvNA1I(6>L_s801o7~xZcJA%#p5A?j4%hNsUcgI`u z7?@>Q6aT$qsW^A|e61GuGyS9o2M+3#%{e`%GWf;+n*ud^YAov(b-cRu*JoamXTk*j z$H)7f{m(Z9E;jk_;lqN2t6VWL;==OcC*Rx*E+{WfJUz|y$&=QA4Qlh6+rJ5m&vvd>D!x`po38l9de3^ojcPm*Qo6C z^91{PyUxs+I;T&jW>&HNt2?NpeL~4RTXx#w-Tb^zJ~25R#8=V4cnp#kDS?8XlO2a z6~U?M&R6uSf>)P!`_Agmvx@pMyg$cEy}S41-CXHAdkR~#!}Tv-shB-$*WZfWRYuhZ zmG0QYoYar;zP9S>nfd!Cc$yh^_LV-r^paP`_L1kgu98pO=9e#3txq=m`R+@(xqb7g zf6YgaEKS>7n%=Ik?&glUdk*#LL~m@nvb6HZ(iFj&6Ffr>34P+eu5Eo_``cfC>X#JV z&NIuodslJl?6M72ht0y)-u6nm736c~jG?^ktd+sb%RI}=ule@LT8C*)K7Y;E&N_cn zuv)!U{->LQj_18gzrVk~-+R^W^7r>@{(L-sO3?BB-tThn_y4y8-Pg0X`uno_|Nr*< zd^UT}*K5(SQpNLn{p@y^dOyuC7ycjqbF;^_`MLW+HT3&=^81gy{t;feCWrC;gj3h1 zslD62{lnA6WuUT?Kk4TO$&GvduZj4lzjV{XcfEQ+FW;F-$I3Du4q;cC+;#ElRoC!^ zhby>^kM&+l{gWZP%y+v}czEC2MKdL4o|w=j644`h{P}OQjk(^8adzL{+}&lcZIn79i;r(kxM=c7cv3{l^P?9OvpQU@ zK&fupvK7ucu10o$UL@PSy)JK?%Y3CR+tA5bc;k}AC0R?_BswGbnJ4zd$$vY3@p601 znN%Hbj)crb>>DLLUDTIvtUg~h>GC4ZZobsR)6TAmiS?-QlJR`Wxn!C8#Ay@HU1}!VkKCoVWCUxz*ar|QQZ%u8h6B`$|YiL_}yqu`NLPvMet|uBx-TAb(E62Zi?&7O@wmkph zje_pe)6Z#2SLVg6U%v677--#m>1VC-_jevd9M$_{`={{pH+2)67E$f%0`q2^Srb_t zvEznhaP!F<=jSv$eshxN<$Cu57asooH5Urkl(K8>{wW#4C!?2obX9N8on5m_XP0ft zy>u5h}QL-8-5RWtz8qfz4htO z?1F-#^cx!<_Q+a`NlVXues1=k%)3uEe^#?j{j~hETK%k7ayAtP&1}4{lqT2y{`OXB zvV7eSMNndsulc|Tx|1nYnZ0az8uFEA{y|rIjIFPxmWM zJ-=+f_0mu8=1MP7b$|HGs=LwoilmiOvp+j;(v*m9$HVOlbj1{fUN2am-sYmT_`3Vw z4VyP7pL)`n(Q_%~*A-3?(Y4PXh-ViT%sPImDJLdIHe#F3JGBH428QoI$O6`g=d|)!O~+shiKYE4=rq`>;l z-rA1t(+N#iU6PD8dz_4QJ$LJDMSI)infoXG`TF{VW{h*0qvFPyoojT@C~F+yJ$IM~ezaltAm%3YqhM%1)Et_4t-Q@n#jSt0qd$(t1 z?eRT)cXrI~s?J}hpJ(P~KJd60c1LXY!)LN5R$T?H(esb_Wu&CE=)))ev~z2AK1s2d zwEaxu&(C6$XKZU}@89?EBftG6*_CgeJrA%fSTSX(czVio z_R09Yol|;pjs#g6$;z%-v*usoy(gQMo9e7Ug`TOY>FyIL>8o}Jt696Vl%7gSznik$ zr|!!|chE&uUtV5rx2yg2;oI$eZRM$ROQ+gae|yqvey`%)(YlAvZeFPkKiS^(Js|Mq zv{Uy#sr_63DShG^``dN(?~^~?x3#b9z5a3ir{bWWPp9+O2d~V@&8xK9{^@7XN~;nB zX7+E(yr$`ue*6>=w@%vtB4)nUs`lJM+~k<~R2@ z&pP^zTO(qobHN7l+uPS4y;#U-W+q%vT6iGqk%iLYzZ=SDw0503z2{Gmf6Awe9;Ihy zS{2)U7C)apaV>Lkn*M_0+W7|A&uqkWwz#`4Wk0Ezx#mRl$%%{RwzT|uB>v#^xxdw& z9lj4H`?D(xzFxRg(`~`h;}iBV&)9uoTF(`WMTeX`z5G;_?U?wdEBs;F>){>mmJ=dY z{Cvmc89Q1&ypT{z7WVKsdFbHf<}+`uuF;I~cPippZ6+=tIje2{a{bHCEFV62bNImd zHYE{H4oQArN<9Tl zmmUq7F0=I03&B;Vx>j0+9hxb;_0HbP-nQN5nLDb3ErYjgUF!I=;&<5b{nxL_svI#F zN$0n}wl3bi=vI)~+kbP`MsJ@yYv$Qwx+~|{Z=ChmG%)A>&e#15QW+Q&7(87ZL;8Bw z*vQ%J;`e{hF275hXR5&)=Kf9vb`n|L=xnQ>RXq-t@kpVRI25J72+#@|5_L z``=?7B3T3l93x#)LIuC8p4FLt#pm?5+GVM;yjHKgW3)B*RM7kT@+z6WXKU)>pHKcg zvpD|x=Sj^~g%9?e|6TeyO3r_q{h!Gp|F*3El)mzgrQXz9=4_AiCl38@yLmGH-RzRW z!k^O*onC)>$<(P=eT^y~E6#cSTP^+EoRe!JH*eUs?b$(g`IKj8W}ca2DI6PncXpbA ze8mGsHUD{kR@Y88pSJEX&zvsV85QSQKsWQfc=2Lwy<^@%g)i@AO#W|Y`&d8qzu3uN z`M-D7f7$xu|M$Oz+WY$dTZZo}dfNW+oOyhlRsH0Ee@2@>9n$|6(s!KuZb8KJ=}kXZ z&pb81<>{|^dpD=sfv##zsJyMj^=Z{;=~wXE&@xzA2KY@Zn)d*-3~x1i|ogWqJOJ-qrB?^!e9-qg8Mri&Ww z%A2v~j7U-OCCNx@kN2zc+}zz)tX-|HYC3tzlM*rgytLojbb0u{Zp=%W@#~k>q|3&~ z_?E7DrEaI#X(@P7=Y5>#-$!C=a&rQ;WCE>D6&8ItaxbiLf4s(5?%69=u3WryY3I3h zW^8S{JUl%YZ`d&5=hVc# z>*h}RA~Wk&^^EY?-lh92zioSGvehIwWXiDztDc&K?%r5^n=P*5nSsB}zS+zBWggs2 zZm)Ru!ZEJumxjJ=?Ud>L{hUv`{bip%ect!^k+J{BLm!j>e0^(Q{O*eSoPST0?f$)} zwfp--CEX8n>_nfd-CWDRlF!f89ZR2IcjPg<+2m={+|C|S?a8})wCiAEo10lcM2K5d zmeJ2v);ITWpPc6|wQ`l-(nV>S_iL(Wt`6Vld^yPd@cV^d4|euPUbJ^Qe(K?DE#37w zK3a=|JAHH%j5apBc%l@>oBQCz#`K%@FJ4q|{QB1ZeN*oBh>rn0H-Tl3!~|KlolhG@B}2;JS1|LNF=PtyDk{}kO{vTvWAo15F?(+@5$^L6(3 zf4{7L_3G89K?m7AIXSt$G})Z*vT~Zm6wmK>3okz}Eh!0DeYNJxMfd;n#Gi=qIQ>88 z__;n?;QELAXXR^k?`f_4bN}Ie{i*v!PJ>d{=i=oSwOKw|=jZ%uId5lu@Y6QeC(qT4 zqR%sEXEO%Plrc9quc@uwxM4%WwKb6v5)yw(^ z#@d}lG=aP zBP-KaMOnFf+fr{0eeFfdc1@ZxMdjJ`YZtd}>X+ruU9xN4q)$IT-}rkYPD*ThQkK>M z*Qc#6FFJhG99M=YiFpfl%Uqb9>l2wN`juP!@!PlE^XJQJP30=zs-3q^Yme>Tg2F;) zjj5BT#`}c&nr2`7YP?=)cI8sbHE-S|Cf-eYcHPuqPa$(?Dff=(*Ku>^)>anG(%X2^ zP{#6yK`yuRjm^2@=WR=8sDFF=?8d?474Kd!##OvhSa0`TMc=Nr<9VOlgQt&=SNwY+ zoNPS(yv*aH>3tvH&0hcc=S=?}uO3;RoA+x1_x$;f4(+@==f~^aHUH0EkFlzs=5P0> zVe@jkXJ4=L1@7N4t?7{$+qIresn7j>wYz!vcqr?ui>IfHha|B-JJ)&Ow06g#O75Sp zX6rw^mAWo-PSD}^3rc@}N^QHAn;7`IYxXO7&!=Bc>8yJA@HpScFQ4`AiZt!}s=iW2 zBF;N4&FtdEi{?*#|1Gw=yI(x6E_wdDde!`*Z*Oi&NJ%M)b%Xl{;o{89%sxIod9%)% z7#d2RpYvz!!GrbNrK{_291S^LecXQe+O@u(o}AP5Vt*};-+td!d8*XE%Rd*dKl(pp zrOp4JFK2%X`DeZK)18~=Exz7VulaTI_~W3P_oDpE(qw+IxxJ87(;?#x5y*_E$O-gR+fHMY2NxapPAwwzf1 zJ9j*|xHo0Sgm{OhYVyCm;Zzx^Sh-WOXPxx2&8z2{X18hTX&yduMMyZ8PpxvK^_7#4Rwc;Y+te=J zZ+Ctpvwy*#3xV^ji+a-gW&UN}{H>ucYk#QQ-}a>Td7GoBkN1E4^f7tQze~k`UQQLS zc>MHv7^>pxuI{{Kw%`#mR@%g=pqcl-SZe{Syocx2((Cn?J( zPMml8TWr6B-Rz($U;`a3QS+v7o>fztw8|(dbPg_gBl$CjS=H~f}XM(bRq-WIr z|C<{2r8gjO_mgG6Y*+4y^L@Kl#-?bF?Qgz~WhKIE-=6mH_LjD9dHnvp{lAaBx?=0y zS^gSTT|bzQF-; z;(Q7NK=v@GLp|Lomd$;sKzj-?fT_^7)kr~BbT zU;d9@4!Tzq-S_L0t!R1N{_W$H##$Ns9~S5B3R|A{$vobv&j0z(MfGFT4$ZebR_rhP z5L7a~;y(Z3k@4}0w@)|PoZkNL3s-&BSJiv9ul@J@{w6)A;=S*=`F}gE$5}cQC(CN3 zo1WCnJmcGO{Jwt6la`Vs<)jyHGav0W-~Q>##5A+~w+pw|Ysc4qW&WURA9L+X=9Le( zGity8{l2B_%jD>w^5CUU{}r$7@zGH*%$D0(3EJXt=gM+x6O$>H#m^FwlZ!8NX2-_H z-no0Xu&C(Q-90CzQ$JPBe;0ph$;y?QT&+yDwzfPxJR7!bIdbgSvt_o^uU)$)Auav? zTb*aFZqj@n#gxh4?PXN9Y~5N|TKe=bzx^IX@ps?ckV~dNkN!yR`}gY5dcXSr+MB2D z=W+ZWzU0%dxV;;9%=(_07voS9V{l9@?Zr#!q!gR7{(bwd|NXUU(!6&!zAfolQ*p;O zcBbj&hJE||`sC|7zADdsBA#;j`hDk!3WKb2QMq~RjvRHHFnO+9U?SgavvtXJp_V@@ zXRe7gKJegzR$E(}hKA0uBUdJ68h<^huaWfm+1WL*#wX6TZ`)MyF{woD&Ox16XCEHj z4Wb=}hFcF^R-Z8SuX9d)27C2)Tci8KtKQE#ozBgy=<5N@bTpSqHkA@ z*L?fvY4`iblZdjX>GFjSKl}gubEaL!ZcFRW&t4l%w*S;T=HI*f7JK~qghS6<9z7R4 zwd){L*!R>&&&3@cPjWmr_rHwE!RJ!{IHT^@ezz_4ja5mRc0Yvm>D3muV**l>zwHi^ zoEg!uzFuMCM9>+60zyJf)2E9&EiBmc^&vCA%>mo*cZ}tf>@qK@ym|XJ|J3Y1;lE0x zB_$Kn(%P0TRlRoY+Kkz=lXG%<929nVdgSKj8k(EChlhWce>Z*4#&t^D)sb@zVlsryZ%f1Y3R>3ULS z)}C{7{hV1@ zLs;Z?E4+b`U^didJh*^&}*=U*&an{&(R)T)1RZ0&9ma*@X$%(^-y zRPRvEHo-nWE}q^q9i5#IJC%38d_BuM)RnJvs;bVadG5)+tle4KE7xl-&U57KmR^++ z8RPqUQkvAO*DF@9T~-)q>m4;KBQws&`>|5gY_ZFCt~hvqPMWrD+lD>0lBcI{-MD1w z#IK82-`r7XdVYUF$I)&n!wcrePiN~~I)C`Cc>a2Yn2>iZ?Ms!-zB(no?R0wQ>K3Q^ zT(5@n&kD=GYafgL{bJF(vozMFBFR1&^Kk|fK{qLWOPbr%=ZL%nRbw&R7qdV7_ zXR`7Bx4qN%{;0I|tC;DhxZ~&ibzV}m=KFWgY1?(xv}^U$mOYy>D>5M=qbEjB-rmMC z`B=}#nO?@i!CYOJCR%oU_{jHU<#N6c&&~Nh99!KUv1P@)g$o&riZ_4!`dLNcLi>sn z0bJZg9i4p16)XDx?9nOObou6%LRnkeyKCb1&YE?L&B*Ap$LTYRw&v|Owb{g}Gu`9z z1fM>As*{_YmQbMjd3E>4FJD}i1}O@12cAe>5qr0wxY+&OlS5tm6x*(S2@HtvIz4G= zPtUs4N_X)fcF9)Pook}DcCEQ1l+&|Dpet9fGekl{O4v%hVdp}wDPD@-4sqVN?SJS> zNcYXnTX)p25))R-Sh&_SEGo*%XNE;5r?C3MrM8T@Z#iGQ@Nx0>X4lo7D;@T*y?FWZ@1J>H{rMXmKJ2dDAe zc5KHEi^uQYwe=oox;0D7YMTC11^e!0N54KvS-yDf($>CjH_l(UaACrtM@33Xk3W3l zUbbmhpQLfxhMGv}ZfWTq$%kB2k}S8C3FWL+y}_OG;`MA{In(K)tAE|tQfu7a_h$JD zllFrP=!_`@o449e3WyWUbELuxW#eq2knC zZE3&4*QbAdwN)qbl23WLI;Ur6Ma3>5v4_sSrL3>rw@sQG-!iq)v}h?u=ZV?Y?{*|gVH*eldOigW_ zy4BRq&aR_w*4#aY`Jay2-AzkNyK(#W<0nsA)~(YM6B9e}^waFB`qd#?GP1IUMn=0d z@6`PI^73(zW$LLZ^*`G{b=#dgcPid)z5e52`|b4eC*H!+&9}HcMNf}S{Ht}p{(t$t z9R<_QpP&Eib-v!GtKspz-cL&_|NNTW9rNpxP5SxTV?Vpoca%Ic){C<^|MGMCj*^cu z>F4G?`yw7+@bZeQ-W=<*;_3c{|IVb_U(Gx>-}3D9<^F~5uB6Yg{H>XOuI^O&a=T|= zX8Qm5^C$D)x09ZJbwA`}=jQs%HhWF zPMXuPe7W_xbLU=2&nS4mce8=PhJ&{+v&ZM#H!(4Ba&jFze7E;V%T5*b-m9O^sc~_A znz5kRylAC(AD>;vn^2$m%lfA-mE|*1-L;u#f~Tyf?@1LsGr@&>MJ5Kcg)BO7&#%j8 zl}r5jmJb^ws>1m$ZO@vas(YGauCQxeA*c4QT`M&57i?YIckGy#*7K{zd&*RIe}A)N z?c&+9ezD!Mnzs4tLRp=-ONUPVvzu00Dl8}K{`*sy)h@BiSMT~&M{DcqZjHD-BQPlJ z)U94;5wWSs${U>{x_MzC@ANY6E_8K2uEoXWotZDK zroO-DT3_O&BJa%Ton3P-Wlj6GMqz)A;@P>fS4?!%GtYailA3m5-xg+bbJlNpae=X^)duhOPei;e*4{px&?PTer(kKl%FMv+GMgxo!ND9<*}p z+OxIa@4DyY==}cn_VMrc`TI5h-p*CHyx`&fskguGt$2D$bY0xviKnOUfBb0a`JDwH zW$wrSYs=sFvki13#_8$$pFxMByu1`%^YiKTm|b5)>;M1$Ui0;;c}?|0k@)(`R_^Kh z9<273|9n(@{>Q7^pYJGnCleoIbyj@(xuSoMX3l=~nS1%qKZi2U&Hr7KGwstC$#Zip zPwzBNx2*ofBYv*_;IGofC*Gz%TwUg(BBBs_qA+Zw<{AHGD*6qTH}5T3rlL6YM(~9B zz7Z7$=gyt0sQUTvy?opJc#C)M=Kc7|Dj+B4S5#yqCzn-Jy!qvutmP{#`rpk9Gcw-% zvEcjil`AJcjWu2KX8rQ@`@5I4MsOZDzkGmJgc;@BVW$~9gDKFO0UF}r9 z&92B@Uq>Wr-X$Bg@ib~ znByTO^?YOIYb_(=PaeJ}RjkeDEqpkYhiARI_5O}ox7apqGMZt&e$tvbKA_I-3Ec(h zsrH2*H!fK!Dqw8hv}B1)(I?{>`x6u&P84iu`z827-l-v;MNjXZ%JTG&SIy&@XZ2Z0 z)y=>K5xw(z4?Z=NF6%`a1 zcE(zI zwZk&U!}ZeJA6I{Tb#?XQ{U74@{gGAouRHKrU*`GC$NrxVb+=c(db!u;_Z!D~mCrci zDt}hatNv!;FJIjyKCgOWcw9}JdA$9(`S)vE?f3rWQNLF;lmA{#_xJmMh3jkI=iaOP z?R&54_4&tN&spbxJZJs>0| zFW(&zBOP6zf|8&GW#84*iueK**BxQoAs{Q-=91$clcRD@i?y$>Xo{cK6u)&AtM3G^ zj43RWd%dA-@0~j_6Fgj8+}(|~?CNf6V%oHsOX9A9!|_u_*K*^|oNK>+`O1yXY18Goyc7ijxE#r6}EQal06Nxc17(9=QG%mCOdmuZu;9_ye3=qQXTI)h4HRC zcJ(g%*4^rrmZB`IZ42#hGfZ8~zgN4xv#0CeVeKh@9vL0s>(hz5;~5slIrnaC$@eu1 z`s;fREh>5?W;SVlyyJZb`=hF&Po9Vc?%vS$=MPtpPY-AJhhz8ei-&JzG3Pfdc2fHI z@uRbMboYuA7E#l6)%P!H*t+;`N!fLyP5W9K7p9rz#UA{$u8Qy7{S&9wrODmBe0*`bE&%N|J65F zJl$$OGyeWL+wb@KU6dTvCijL11PF9?cK-PB`t+ohPP3`er zA{N%x%F|D8+_XvR{lnaZgb&&)_XO(X&sqD&9b7(MSsDEC`}gJh_s^fK?tgF9{QLW- z-Y!(Qyuk7B+k;!PuOIs!8n?TwwfOnD51<5dOnUvtPoK|!yz^1L^5;?Y8{6}BOSy$3 z0<7C-wK1&9vhDEtrmAf^W6BeTOG%GA_-8wNtT6Ws+^BMkE6&(814x`qvB zo>-U)Ip`QM5N_%=fn}Q(}*?i80)4;Jz+E zNaBrqg^NgEpB!kXu&}I~#|C-7b46Q9w-}h2J(*Yi?%_Z7Wgj1Gk-Ss?zu9N*FNR&a zs(j{JiOR~#o;iE=XbFSnc2Jf zRz0&5s{dyd*IkH zF?M#=q>Um=7jw^i=_)c!bU|^u*jrid7jIT9O|BHoUHi1B$K>M18oTIg`pXxW+U?#} zejy_I(6X<-CfBDM8|~>>_KPX(tFGhIH|O?L@~(LyyJW?hIr;zo>4vZSyW(c>%7^7U zRnrnvQku4IHDzi{*wf;q=;-LU;%e5NyLXTCgQowQnwt$xOpaW>Jo&|o3>zDp4I4H{ z^z-hDYinzJoV0TN`ugDKbL!2aEmKd4l$4aruqxF$dGh2Oi^4}?HLImeGAkH6028V|MBMX{)ew0JHD91aOlt^m_m)F|F*Cf8W{J58tJ=7 zPTjM6B`vjbR=lrgrX_Q8_6EU@f}*g;Z{GCyyy^&9;-D9-ut6{>C&#y7*6$aWi<{SSrc=S%y!*@=nY7oE4_-cO zZ*3Kgi@h!{?T^ww{PEASXdG=GCC$tzP#S$)Al8w z5eWwWg{aQeSQ5eU%wg}89C~RC8wviuUu(Z zRmCPDC6%0%)V6V>CR3wq(N5)M%bwk-ejie@Mcwf0zRZZoTZ%$f51zehUEZ$m=H`}? zw(RrC<;yERuPwi^GuwQAO;y+P_=?WQ=WUK}T;BKj-f#7a?{~jj)coM+x3BAHm#+g& zq@KOE_xHt1mk!>%$tuoo-{rOXUth(Y;Gsm+00wy&dL-mcr0!6NA3^m+PfKwy@i8Elq(zR(sEwaMyG97>(47XXI!hB#OBSLw_{a|zzps{>)nqPf*!nEbjbB-OVryg zr-cXZ9%kJb;Z@sL*?Jb%9QZ`-G49&Q&4 zeiwN!`Sj`O>4>PPKJI&0TVtv3xaqag%dFVd1fR=NR2vxqlh+ z8eHG*s3rRUiqmx=WoKiaFTNYLZaseMmQ?GZ#2B@+XLUDj*l_5?36_NcJ=2%V3vHBf zZ{-f^6y`HhpW>CSA|zO}lSf-yI%tydkK5|=KQ6c5e>A!Jd-20Z)7M1q?n^ywU72z| zS*G%ngtPPNoBRJ4hOLS4jK9yI?pJdHlx{B0>{z{8YU80s)~($y-^nFae6_lCd6TC0 z+Vp}7Zq=usXYOCncKu$(+*VZwm;#IJxPY zSQvllr8^OakNN&BDKWilf8}V`yfU_S>j?8*vqG8I=G@;nv+o_-x3~2z*S1;BtN3L2 zEL22z{sgCz7%ooDmo*=ss;*PDUr$FUJ=W~ z%fs{G+qYvEE)@Jx`M%#Ox^i)dl%%AfsOZryQSFLfFPHy(wR(Nt(d~;Io7s4`+uFZh z`lnL!6R2??=zRUhMD6Q(#l7-BPsiU^G`DZ>S>wah+$`XEWX9{;Nm(gp=U(>h__A%m z-a|9b{Sw&Jy!OH@BU$HKW}Yu!E?%D7J8zv`)vjM><}Gc1cjo4qSqo2ZdAWJ!((Dsw zBH3P?GdpzT3fICDj60oLPaS1u56@rI>LkKt&h%H=(8%b}kwZf79|T-!yjM|KnV6H) zwX#!H?bx)4=$nftSSM#^cL%LJaO;?ubfc^pleJ5drqe{0somBG6(2@K-d3Ed5uh>U zL`qRgkh@4x_!KVvH99Fr+)@i)eTj^#eamZ>ck9s2;^&rCZ!+cVD`uExU!OQV{=}hH z?wh;I^{va^BwSwR3)*Y(=Jxh}PGPkLAzB|l@Gi^GV1DgpUhw0E+$ymroA+dER?FKv zM22df^^WrJ^L2XruxWX}bg}T_o4aa-v#+mRxOnws-`V8``!{t)8utdAiY*XWJ<&5p z;6@kcyvYu3iHt%!t^d{@&bhZ?+NMP{V%NeAH)YN^>b>iQyv%~~1yfsEcxFY5U%YzR zE%POlQL)fO?I}A}&owkPbJh!167v$c5s{dc)Zn9Z)bn9ivrlV(zxZ6)(-kG}tyZn> zzOgZTLTmT4&4s_CX3c&j8F$w+I@|iLEq7*S)TvERO?6@~c|}I@o!%ujVcs<7vNB86 z&srX*PCWRtv^(Z0*Q~4gy!(&qPCk`+d0F9c+47$2cgyehM(7+na)ia%`S8a-Co(TD zd-(EY=fsJE*REarAEK3?b6!J)>*JR%DHRnn^!NYy6lPP(D`k@L!~S@$_ao5S?bf5N zQ>IOyIC;8vQWjV7von(Y8MEzbt<22KZrr?Ccs;iK?v>@$*VaTnzFUxXcGl6JNaKrF zXP^DscKM>IflK)`Mm4c(EXR)sN=Z7W=5cWw|5>@_%;I(HntHyZY%0Fg*~6!ztK1e^ zJNL=+=Rpx6O;firFgqvbknivlzRIaqGoCtu>Vj^-?OQu_HLfBvUm()DQ>6};m5wMQSb^Ix{NIB?*C zLi;?6GlzG}Cx2J&|MW?Fec_)Uo99@Sw*CDr@9yo*KJ}Dn_*QA(w|jM7ODDX%BsXbs za)FU@iQPTx`Mm13v$M@NmA%ah3YsJlW9^lGUTc}} zbyvl5w|5U(nteK#w(2H6G!zk^nw*o;x_-SmE9++uFMl=L-91;>KapeQTtrb~l|k;ZgLt>%z?ao=VPaNg0|NpY*+*|Se%O8GwIL-6vm6gHyR*^P^k6c)o4pwv@ z(+pnLGky1NYd1GH^RHk2=}zR~=1zWjX{n4&#ROq>zYmZ5?eBFhUjr&`{-^IOdwc7L z&`)>yT9>RUsijX-RhBQGIB%|NQ5IL>$KsD4KOep5+1b06q1c;y4Xc^N>{$s}S$zu^ z8nUsuy?8C1l#$W1Z=a%Z+N-3DltVnR$zOQC&M>Ui5_`7nh`NfP%p?CyPo|B5Mw>QI z&dizP?-yrubZKNu+t0~UWSoC*Qu8|f>BL#>1jw>L3CWoW>FP($`E@uXv^y<4ax1D~ z=~7dsMp>tY64KJqB3!EX;{JIY`82!fjBJXRNKv{-k*Lr{ruzK?_x?XnsjvKQdu>hZ z@s*d;E1zDyE*ZCZR_t#1XRXuYQbO-Dyp)X0xx1}-+O#mc9}iU6`Q`pq{*2Z;a^{GT zzj*zkWT6e>w-1hdysco{+mjB*d&bha%GxYD?k`mqJ z%kw9kS|z1(CbuADhk}sRf(fe)%r>fI_^B*a6^)3zZ5Vxi#=CcnpSnIr-n;6adpO9d zy87j-cMB^VHDhIMbuu%LxUN0mr?4n5QTg*T{e**mthl<0JWqD1Dw@vg`dJ!s-E`xE zWwXw_v8egm6u8=U!`4kI`o_J-c4@8B?g~8dW&wkCr_My+}$ny<01QwvQT5T>>s&#ogr~Mi&)ds)75-u zl}rwqHG8&k>8p@;yWiWr+w<8^&2P?$7Ea-U;$rFZ^Y#QP>FVlE^jg}|)@Ed7RdxHh zN7e;Um;cm`kbiHJFBx6Z)YMirHgEs&MCFn2Bo7ZCHBHN@4<-cs`NLdTTI~L8fy1)} z4k}X=HwY%>rnVn&>sZ;Tx=d{vD1eHm*#&Ln;Vuqdb2euJ#~i^K-Gv1c9!WoGcMsrb zWPDgr{rl0|x1JRh7JNpc|Morn@r(8G)5pCr3tcoOC8X*)Xie_-UK;bRBSPosrAt!L z(bZ3i+*O1mnHpuY%=Md?oCUjOCV0wD^pq`}pjjBSOR2oT>E(;A<};l7{`G!!KMeEt zedSwyy{G5>`kGHS0_ARRpKhw0Eh!gqV%KOk~9vQ0xawy>no1_2rYUGh4Y7^$iAHB8p^@$UwAOD$tzb`go*3*36{fBkAwg3G4{r={L zMCR}Js^9MbH)@{GEjP-%r1IsE$iog6_oZopAap3)`^=Peq#oo-`b~$hmYfm%qMzOw3gdSD`Ce z{4PqI-@YlO@Npdxk_?(z<74$!)j})w13!nO&O~LAlLDQx6HduYJS8*HLsUa1cEYJC zJ9brmd~SaKS+lVGrozi&cE5fI^U2yddA}Cg_V&iPYj1B`e7jOO&*qnicJ=QUuc8kA zen0=giHVCdvi&6{du>$K5-*RLyZ1xU$3t-n%8H6px)#Z-^2&}d-7)Lky*jqA{tK73 z&AHj8_C$QT;g&KH(CqJC<~%L`B}%M86PadSk@WUf+}QbYjZBn#VWni0@D>ifb19FP zz5Vi~%+SKdQ&ahe^qOa2K)N*IyyT3`1Nbj z{Q2jX&#$XmJ--RmP5KjF9IH{kr>d3T{$IzMIXOk#+$YYQRn*mhtIDJYFJ83l4d{tk=%O-BY3fNq?C1a?nBV@{&*yP&(XaVpLf&~CEt(TsTlgtRP)6ijY!rV$^nKUYU2<8cXW!US z%KrCocI4hX=Cj_@AHFiYc51`MR86yQkLITaz3Fgz)^q9N)ZOpqd8Ng1zTWm`$&Nid zZ#}J4)TSEOA9R`(B^DSI=O=jh@RqDx`8MJ4 zy1OZ9svCE#Y<+gliS0V?g)JqPQ@5(-+}}7`boDEVTN~y*>I$;j6}@7u{-V-M(a+*3 zmoFIffBFe}nQqo?Zc|1+sq+I&;h*DSjq51MEDY5eg$0hx;XgmV;*Z(+O}YN}mt>*KlTK)#Q`feiz2!}b(;?*!ZyzN^)u}C0LKZ!G zHfhQp5+p1wZm{JY+slII(%mh?ZJd-}zjsDsONXGaD^JJuHSHfOibFyG%csZvy8_Kd`w zq_)kcM3+wHni$b_>L{d;XiOwdCCm^R8xJ-;jAa4OE`= z&E?-%mNI4H#K5xm_neP^67{(-v**%9R(Ekzp@r;5OS#hh<=5z(J*hp%Ju}ww-o1Gt z*RKTI<=e5gE}b$pd|}!5W06ZiDDY*|@4k*=S=gB`4f}# z_U(s{eF_#TO_Me`Nr~yEU0&8M8FTyGrfENOYIFGC_Li=Bk)fulFPf_>8+7Tp;g&*X z-tN^aXT`gR)|#CTE7`ba_w;4kT6uWZEZ$`||Jk{`Q>(I9uFGGtVN1_0*WM>$(>Cl# zwT!HMdPP4|dGmrESMTW)X9PMp-!|IRr5$H(;3A)n~SLh$O=Fzrtrl{Joup>uQgoVVsy{h;$Us|@fojH2)D7W>-o;QD# z4jo!-Xk?att0eY}Zq9|71~VHDSVly0bIcTW3;7b$)O0w&YNyfqB*tHCYAo$7lV^v! zWJQUs%#5`8@WAIyYmm;`Hv*kcBcg7CRs+rDEH_Aev}EJH`?rKE3VxYvDcMr5m%Dc3 zua)W*iH@2}RYmVu{*;rEX+5DD)KaG8qjN^EE7#C?=O0(c>G^VJ$Tj^X^$8uV+|iM{*35qN zsddYiuNUs_?wT|yYuB#om8;gOTiMOzon3zEs_B^vuhwqSeVu;wRqv9g(>86&pYdgl z6I)n+fYti8ZGCxKtFtoWuemxUX|<|`-nhk4SXAclMnT!grZs=xoCEnYo1Py?-t+aIwM^YB z4!(0-F*bKOICu|T_3rhbAg?#?oy(D<6K2e6YQ7}M-a6;pIln#`ODBJS{&nx_ELKk8 zXf5+l?bDFC5)r{=uyNC&8&M6dOLfh*F;)Ez+q7o&WcTl~i&m#k2yI@SnUk4T`Q7VU zPhQIDzF3)xKb&sYa#Ic;Tbpz9mq7Nlb;}oRnziI5n&Pp9uj2O)K?xD33KtQ_gT*t1#k@RT z$S5sR>g?-PG_va2$@!6mg=ONLIj8pRWq%oKd0@)!_wG5GP6^qKdzT7S7i+(HyQJgo zo5F47&N|Z`J$cd7y;<9+li8?~xo9TS%80fIjf0L_?(dekyi#!15K)?L`9NXXgC{Fo zw5BOew^kCjR@fk*sy`E$vY{^rHTLLc}#mGo5m*Zot}T0NVSi+}ls6vn@YS8v=RX!Ov}TWC@3hmWBT zUWxiu6>-Mbe^j-P+j-2?Wchy6KW0)ZuPktEZu{?0cT?~Et*zMwyzBl|v}XS~vH85c zvqOM_Vd2I#vF1+q4`}`S@+^Cf)nCKs_V#Dz?cH7R{fTE>#pl#_b656<7ci`Q$GBsK z&4kr=KYsg`nwKM!S2wRGN9yUtxz?56UIg2eCD=<^{*1WY8L-k;uq)*T_tJ<6t{Ilj z{h9pdlAig*rk$JR>yl#fk<(K}b@`&Q?@QL~X*#h&LP`12iSuh!?Cd6Yt@0}RRCMx` z?!rBr=Dpb2SyA;lKVQ&$!g})8z=OQhC^fIb!Y&`8t>7O%7f+ zo)fy)_DyXLfA#nE>iX*QCnVH2G1Y$j_T{ke)86gN<>j)UH zmHpk$`4=W|aB*qPjKA&meU+oorAa5W=d|}OWe>gDDRVRE{HuQvQnR98zKcCP^RxKQ zD&BpUbsDpO$eIML1lIwLG1E`IuD+%pzt5)5;rY$!^OTj$CRrvfymIBLkztzi#`Py z?@DE6|MvFzf#hn-Z)Y|iQC*ghmDwDi<*pQ(pg(0%e!`)@!OIt~PxtY86Z7Q@@9}B# z>Q_k`mtMRy>%`vgwjB!>DpqawooSSM>%8~HsPYBIFZH&R9GkXeYsr>lrw=)`1gIRo zc~h8MyI3vj<>IAlTPHTkG#+5o_qXqpxq0||z5T)M)9*cgvH3M8?{~TAF0syn!ce8D zU4=!{9*aL{I^@{b9d+^wd-~-IbIwNR+aLM4`TeI~^ZA5i<&VZrUZ%8Za$;Uu@7%cp z6Fr(HPv(klGti@FI*^C=6~5$rNlukG$}2sb@HXDk3RkH-}}3(Z?nz! z{r`Kqq!TtA^qq9|ch4@9#YV=LR+O&>b?YvzIJe?^n&|1hOlC(L4lZknV{Tzk+z@<& zbD^5`&70PBhv@5HW3JzIDb40S=a)C* z){Td&CS1O9$FbDgTx{AlnJvZ#9krabiqr4Qc|S^S&dBz2Sibh@n_q^BepA+Yf8I|M+hIr*U=-_n)`*uTOO6F($1L>2z82pZ`boj+)24<{fq-&Sj2#ih>Wn zeB=FaNn8K(*X{Q|eDPoR@#1>B2ixWUbMxE%5s3fyTioW$k;ySte;ip7t!F(5*t3^u z!miVtoPA4HY~a}$FIiZ~6XZArIHV;CJm;ayMH&f3)kT+*8@@?+=~2 z)OTi$jE@h0Qc{&bF}L=cH*+^`y`9r-ZLzCHUa5D(mQC)jln%#BI)sWkV%$4VSE4Ja^$jO_okW+pQnx*iCKNzMHw}h(N1W!^)qk=i;r- zow_B&%UgQnh}(jI9}gZsb`A*DPHxzwwBJZF+2IQ zTKwdx^A1Wmj%uaHZ=Mt_FZX9T$dLSaEr(F@oTYg^Juf1oqZKVIM7+79%iiBQ-S^h| z=KlLFhYlrOJ3lA&>zBeLr{uuZOcU6D7JNGMw)tsA~SfjJ0pWL%!Vawv+<8xgbCM+P(Fn_-MzkmNU zrg}~Bddk0_n}g%P>C?>i@%c{8&IOYzH`d;c-BMB_JblgyTWi^g)$ETSK5SonWwxw! z`NT<69ZHim_415rL>`8u{uElzdB9)Ny)sq$|IhsU2ez9Zjg-CEFXX(`Lq+Ir(!bwl zlkV63e#<}q{ohBmR~#E5&yjgo%SlJ92gY@gM)dDI^)%)@rXU~dEO3OOwXq^2fXRc*Nns2VN z>QhnEBS)4fak#a#xfcGMsD9zw*H6c8pD+CSDs*1eGr_pZua#C-vu|4LI&=PhZTI(k ze9+S-Gi6^hE94kDoprxO$X3zE#LR zUQ{bp<6fNHiI}+`J_Z;4?)xjjxqWl!jV?70Ur$%dri7l^tHsN<`MtTH?-Uuyn)`O{ zmyF*UT6#}!KA)FV`qjYB&Q3*j>4lp&eVv_!m6erE%*=vfmoHtmvT@ofwKTUcD(P~I z@;#2v$eVL-n_}MXT={Q&eioLVJ8O^IX`S+xlwF&cx^%v}Ty4w4PRkPI$y>@x0^{So z*KeCVCE|f zk(2G$*OKpFgYVw(@Xltgt(`6WX6x3qF2|2OP%S@r^s21*N;ZCZ%i67sAtLR<(`WgW z2D9(~{U>+_XZ+{0|F3NnzsqzaKvSsGW&4iV2loH_SN`P5)1c@zC5EuI0HMLYVR3pl ze^$C2I~Evw|G=qNR+5o3_k20kUGwj0x{PgU&v*N(e)0JFx%X>68J;>2ut%hbX^PaJ zn$U`BR)GaqCd3CcSp_sN-YndxxKL$z`h*EHx~`lR=9iDpkzKlDXSH(i#{;Ks&AVN8 zr}L*{_NrCcA1D4!%Gkon&8^MD)3agAhNEY$Oxj!RGb29c!IhQWJbZr29@`$ge0n;z z{O$3`S8hdKI*yJ9TUxU{ET%NM+&IOpZ*#Kz{y+8lzu)aYUk%@{s;eiH{<3URQ1OoM z58YR0t#Guz<6j!6_g#K=N^bI;1q!A`^BJyWsU`|~ElO(Y=;T(iIwu}q$*@kYFXE=HAiipLRXAx}f;$p^J`fYuDNaU*0@r%G99XaPMGm<+ZuJE$%GE z-|y}gU}0=^a;&YjjmkAYzyAZz`#ry-<0_x0#?}55ede}2&g#N2t;?^X2Nyei7_ zuq@_IOyRU$1qt&_H*UOm<=XPgYjsoqelU7$?5(p_&hhqj@A!Q2s#y7nf{H7crnI!R z2@41~BqTiG7d`#|--@eQA*;^r|NZ-ypv;oQy0X5`PR?JYRcdMCGos(6r`0uF-Rk-* zZF)zq=Yi|`488$O);+NiGOM3F{oHL+rX}+CghKmuzmL!L_dSw+AieRg?k_<|tq^_Y z>}>O$g^$_H^X@$O_4V}~mV1@opO<7+SA1QbzhPHli?R5-rOOry+J_4K+UPm2{-Nr* zSc~)P>pttpR6onK`*T)*=a&zQ=h&1p?Ti=TvbUT!?_WjLiNdlXWfP;erb$6IckY}# zeQH^KL4&Zmzp=Gp^LirzbA8J`Bl9O+3~%1dH8kCva{Sxe6HDHuq@*cN-C1;f-R_-_ z`>Z>9dX{Wi((!AT)T-551_pP!8V~x}*f3?}WG!5@s44L;i|JKf4k5<$^z=7x)*2XZ zJaF*Xb%{=#$Tm8rB`E`f)*Z$Je z-&ZsBOOJ}kzPO6&>bn0Gk6*s*jL|!OJh*lGb{Xwx^;x$*RX&}%`Oj^6`v*s-%Q*{6 z9ll%s9#m!AJ13dGQo8nU^P64O=1ZTd&e{K+r{C_I!eimXXU_N-+S>Mpt$zCAqB2iE z&!;EB;T8Xs8i;{@%~a@7Etao4?;tC#0*cM?%Y0 zY2u5p&wp!$%=7O(x&8Wnp>W0P=kF&3Pw@Azm%sY8)MVSXi4!OHPd_AIoi6@t+B8X7 z`Nv16$0s~}Avmw%nUu2d2}^}y{l&9a zx9=?Yr{n&7`pW#g#|x(F_8FO{=*dOgwn#|II`}TOT98GVho@JNh54K8jsB%eEn8i8 z_VmB3_}X95ooDxc`+xXmtzY!!hgDRrx#`u^B}>&OO_X%5th9T& zRMh6z4Ws=1rM=VV?LNf*e(!-30qku}4waRb)7RU$`P3+CAAer)?dxeD-LISP-jLxh zw`_7r`2Fp+!GxTreb(>()McEIa89%qYF>M1?{yL7!?{P?TQ}@m_4vxmRFlMs5|X(G zuU(Uy+08yJtjxqTe_Mz3uBgh7Q`0M7zr7w2GwbP}pPT1cm$!ZW8d~@BVRg)o?N8|A9SsZ)96c_WUCq8GH`l|XC$Y}azdqh{ zwfE^OW~CE?1J0ayAz*8(`z1Tt!>i|L_{N`cOTFH@=ftRNES%WV!X_jnxO;~dJneh5Q+;@IRKbqxrv0o6 zDSxKcNqB5a%FOKCJJ;AKUA%_rkA{~1vFmrIZrm5ww@&uin~#s@%!pReFk!M*m-N$n zcOu57ps4KWf}N&qY|)$__?Il)ICa8>f_FQL)&0(uEm^8w^yY?;eC-#p>GD?2?&0d~ z;nyyFEB|z+Sp4VR<@v=wFMhsqHLT#_A;W9tX*Vs*4!zvGdCmGW1~&5!9;uL()xFxo zU%psA(#1fmqoXUO^ec;FW1&g;wV=RYZ^um4%2r7hHrB^4pLSnyZM$+*QhlZIynAsP zR~a>)%=3uNE%^H3sQbIV_A`RL@fxC{tV^D!Jb3o3ZSLH|{M)~on3zqTIrr#|BL?gD zeN+mUtL|w1sd;XW-MLc_Rm1r7KYsE)Z)k7c>7uki_e1I$m8Op+^=yyVtkCsYx<{{n z@#dpGygG%)&5C1U=M)qaI0^KeIHmXC#mV3+CgPXZ%P-itw*Ac?rDN)CFW=>*tk^$y z$BPMPy_OmYOuaRI#}AK3kCZw20tJOusTpatbeu>ybf}qwD`;^LtI&hxYA(WOzFg6G zEbLtJ{cF(eD+eEZkeC<86|aTo|Mx)R|{#UKgQR^7mKT%};l~-(S3R?aZG?C11^&6&V$~ zaLuYooij7l($X}w^we#X+Fs0HN#Z*yEGOH#d%JjK<<69+PlaXV91}b=^5X7AL|Y3l z;at9HRojUd8jtvn8XKFRp4giVYHq$$Jbw2wYxPRmb#g^HvUd!(Zb*4urYurdbn28B zM*v%*ibS#sN6M2lBh%GSFShqzycXE4An{=NmqV9tcW-=ICby?%Uh;AOps+Ca#7dd1 zp+~2Pg-@6^@5q%eIz^Q>LW$~42}kDbj=7lSeq-}>kznIumQF+VZ?lEha4z4WGXK>r zCau+8E7xhNTWj||`Xlq{v(d@Z{_5)udKX>NDdINL)bLuqKx68gJ1U<(ZPw5`sjmE5 zKvndm$`Y003x{~TwT<7*d7Js_m7wjD-T%{zsoXJp ze_3!AKFkqj$=W>Si)y8TOtJbc73W!8lO$v$(+g7OY-?lN#Qk|^!OO(7Y11-t^40A$ zXFgUJ&&*w&ke1VUY@V6X=Pn5;nWfuzw|>0nmy~4kgZ;$E(32NgSOtV--AY0<7Aj^b zDK~ZYa471SbaZ@3XfmD6Y}3V{s;DUSY}xS{v*i}AT|D>SMb2r{#aHI(EnHjQ@M@W! z*6LRsT^%Y1%mtJWHa=Y`Rrl+Qq275{!v(L?3ZI(9*L`H)w|8gdHvVRuho;%78RX3oa#+f&~+-p$#2SK?sAfdGSJhmVW@@37E%<+Va<<>F=AI=9_p zw6XoWv3SF=^X7AoEi;=nt4cyPa?#?|!jIRoNpRerz;RnZg-P_Pt48xv4mPIUW%v7L zuQuNMxAw*@%LmWi_4aR<@9XP3a?Ewo)VW@6X-b|a3scgT2Ec2!yLn;bfxg{kL34%9{5>2cCz<)kqg-gI zW}%Fw)$v~&E%Wy0T5I_lur3w7vUSUZS)mSDZi>s#%P!rywC&`?(pkH1pU~AxPD$yp z%T;FnTiVjT`s250!U7UKUT?iqLO3P{Dzdb%;Nay}(urwSi)dAgXpMT>-rvt}SND&F zmDSMP_SmUQI?T?^XV&K$*qJ$Hrt+RvH|Ju@plC?!&$BSWL|Bm z@i?`5;nuya{{OyM-e)jB;ebVIV-9FE{4~2Jb?`PuY=V$43a7$A%F1EU~d67kR;>>H?^uE0{ zcV745@YS=->gkfZ%kCd$6fRz~=B;JHg-Lta&)nSoo}v8x-pOlk^W4bV)0}%qZW{-? zKu_7D$M1YyBUP{RhK7W1OU}vhDE3xQ@3(cSi{lLo3u0nUE-3w~>hQEXbr&^Y@-WdaSgfHs^H7gQ+m@{}?rgT4vAOIE%j3^^h|!KFILC{rW^i#Mr>VCEnlo@UF5)j~9LT_UZ6>|7NeZ-XSFt7Y!e>w6Eag z3ASuD&?!7wN$^ZuI|T=pNqp*&y>1uY;5Ti?r$FKt^I<%Dl;c5v95OJzloa9 zo?Sb6`t;$*SADCut4Du3!4dpU@zQDWmGK6eo&!4aF|7&}8O--))j}f=FRne!*C(fK(w07~-?{*d4<@Oc5SJtE~ z$$Q7bn(N2St|987!jzh7dFC9ipzO=zrxIMDBq;!Rpn*1UUmvdzwWS=zNuc=SG9*xfzH+VEJJ zGG`k5+K(SUAH8<3Pq)oFP+Nv$!tD)LJq}zt$CP+FZ_S&voZm{9uC?fyc+8_D_hgL4 z+Qkd)W-n?Adi83x#N4aG5|Zwoo|1cOtDd|H{O$8_Tc8^`Q$?wyrK zzkGlB@=b=L{SD8U9Fx3taX;8s1g!kq(Zi*xWyRyWp=*JHsiNX6d9{Ph`{w`q_U)^( zk;GT3D;iFG@xK$&sSqpv{OqgzzW;yco?8F!i~B3-*BAPE zioX4^3Yw|ws@l4xbW3n(aIb2{;n;}+>&1Hw|D2BgIwkzKqJ-qdi^6C3@4N5dn{8s9U;Jd=-rW)xNF|{)*QXe5HaP#~3{!5d?2+R~1!NbdWv%J+jMX)Y*5={emY9~=sAe&x znO$aPmUi-jts*m5i^%u#f7N{(a(zlbT#QR@sG;ssS0Db&nKR#{B?NeTA7}V(U(~ua z*!^Pfxr=wNdIcw|PYpHQQetLkYVMz#EUf&P`Gxz|l;S*EU7T72}tjd_8&cIV^gJ-pH&zgD*QjNaPMH{b8O z!829qVn4KWDEfEt+rNKhZvQ^qTwe0EM9G6?idQ|04_WLh-wEEUdCuB5FYd7S!_!;U z=RY-<-+z8~e*Dv^)8{ED*-Ux!CZ(u|KQXV;JbIhgiL+OHOnbWYIWxOthAJx zhAm&5U5>XH8k(NFamB=zxoXR;w4%>OnJ-_YC6zTU>N5KB`0$qP+l530eO*#G!qR>R z?yySO_nzw2&-^Bq-xEUuugs@**0j?AQ@ zBF}Rt)D$hJ{W-+cbco5a_8U*OckvhV?+H0N0pZsVym(=tnCSSTWHS%%nGM@EoxAi# zDNxWeW!ZECBco#n5||GsmmWEm{o%uhL#Hpx$H!a#`?v4M@8638G$x#W`s3HHNAKV7 zuMAzheog~}Xwm<(x68xCo=3#aTE2O8`^=}xKE1rb5g~_8bt?1p_-)=%G3CmYker;k z1z*1%x#Q^?w8K(R?w-XdW>3#k&sVSim%Q2QXRpNyhgM#G?s@vu(c}J}89Uk*2&ghs6`LN|Cvx7I5$mPcK2hG&>n#!h~%^nl`)WTxdg9k5~CNG!X#)lcJ}%=Q^t%T`KwHY1*Tgj}D44bGo%L z33YDx>6hwdb91NU3wO4evu3B46g6EewB1=L+2YD_`Qp`+r;ZhNX}_{a*wlN$K=kTY z-xq3P7yQo}ZQtTi>}@+y@ZgVCQ$1LieZIXpb}mc5`rEsd`JJra-&i)Z9<^(UE#tUd zmYAB`w)7^WNKw9%>BKvwx5M5UhzRhQ|NozRj7iAxz?mZRrXvjM;qF#j<{mlbQuysm zVO-TyEvs7lU5%c7`D+TEd=OZE{kf#ns}vV|pIBdA)6&)}reXpzi=38n9l7t{+uzS0 z7Z+DiS^4no+urHZ#plhNS5Z~<`03N;-LtuicIvO2XZPdx@5OI(7O!4Ab6uY9W$)KK zd|v`%?;p7{QS?|^_>8%>PL6SkeBahtoQmPNa$;sq?^4tA?H^iXy1cu8+zp@q$^3!! zy8k~eiv0aQ3tCNl{{HRzefHA4dv|i`%gf3?d{E}UaC5S^ceZBe)zmB3!ao1gzyIX1 z|GlLPbhy*aH5p$CTsfFnak_Sb1jm%{XNAw+aBVe>T(kC-W%Waq@3A)hoijBP9~xR% z>`N1aBT-=F_VMcYE`D zuB}T;OP}`Ra(ev7ujcg+XTPq07+?QgvzuFe#fp>5$`^DmK5m|o^JdAWU0iqpTPS)UxmuTe&5`6RiaqC`plV}o7LwT%ii8OCAE>CF>V@s>M zkd&BXMg+@5!9*7qmxVlBj%vkE&)wd(@u#Jp2J?{+;oW3rdF7D4aBO)RB^@(+Ns|^ip zJ3iEIJ%7PN!SbmryusEfmyL!<&ckhGR~@0O!eOL{gq+e-&4&tRqLlc zI^`ubJL~6N{d)dCQ-Ax-buhO*ij&s zEOJ#pO#Xj*_&TQUhlT#09~xJ;{&aC^4+shK^G(*RtyO;UMcL&zyO7}Gl$xx08&`(5 zsV$SZ^!mgZe^p!a>9^c;Ri}O}`T8>R?HecAM{YH4GU0O8XD3g8@BXaDyy+nyU(~I{ z{pV$>*)@xfKD*jqv~$jb2LY2N1)n^3@^L^ClVIRP87~hdExl=5wunqQn3dzBQ((0D z@UgS4^ZqIN=$^fioz(1d`S7uNLIl78G~Y z$2(U1=+2)!-^?#BUYojLzjSUo``)={zm!~A{5E6h;+^x(ZA;o^l_l}&{gN#P{d2e9 zZ@gqLAf25a6wM-9yGj+yA-5USh8iw zx`or8ebZBWJ}n~VZbC`Yw1*!xXH{)^5*`+K?}kfYsIKl^=8V$ECH#GxH!u)v4Hy$JV?LO7%+*369bFSGU9 zHa@22n!sPb5>zA}=PD*-Cm+pK6MJ(n@#r;Ow+e0M&fad9wP8YHVs1V@G7kjOyi7R$*ZO`k+ zmiFsYGuO1$(wh1z4K}KQjnAoQhd7F=yO;`NZXZL2$Ww!8e$^HKxaX(mJ@L2zU_Vc(e|LdT$S?B(* z3Hi78@7lMo7cSpEd8ViBHnV3}%*__aUbwhiT2;%g^UWWnAS0trZ(nsI#m)~uSWE&9 zE3~h!IIR4UpJ& zBA*!6ywN>*R{O!DpOgPQTpa%M+ZDLX~F*w-QyPCOqmtDzW<`vB$vlm`+Xi88xczbZ)No&Aq?n&YU^3^Ygm95>nEMRTo&?)iwLh`GF?a%r)PZPE9%Hp8PDsd;Yrl z3iYOsAD7yE{-NqtI(N$Ss~Za~rms%_I>+M9>6MS)%Gg^SesF;!vaN4&hc;qU<##~XgBwYts0$r>Vd9Fx|H zOb;pgcqw&Nwv?g44adkx+3)v$8%&)W4u`B>ee{F%;MS>7Y6 zZ343EmGlf7cQ}7!Y0vWT>Qy(h>zdW(cCByj!s>!KCp1_&IVY;9xdunZ9zFEOQ|#Gw z38_~{u7|rNB}wS-|0T43?>{rKYSwKWOkaCv+LYzZsJ_#k2U`o!cFOt2t;kLJ_vLhS zbvJI?=BieF^yW>;>}cs4k$XRWu|9ad-sRI@(W(3YJ}8abQD)z?kTLh}+6cKj=ij_B zIDL6?MpH~?-ur~29X-Fp+Aa32d;TI&*4WrNBy8H{D^c#%;l_V=2^M+3^3c~%H(%b- z)+V=WOY;*E(SVrP<468TDNp|V<%@q&#b1rf#iw~*sJ(b8pIlJUc5tHRuad{GDqppu)86TiJ<}dlFJ_(zY4T4PQ6s;h7n8-rdr=)pqR1qtE{zNk6bg zp6@>Qe^21^-S783_OJh^{I%Eg3;)**g*kH`OkgnD{3#>r^^=RMr|+!z$+J?j{lk}U z3KkkY4xs{COYMJuf2(F@CNX#4+&_0J`1D_Ayv|V9R-auge$Lp)%*)A%$UIPH#S*&^-p_CaSlJ6&>o{@h64D9xPQxZ*;N-};`< z-?nDntByPW+P`Fz;ndEcr3X)67q0KM&nr^>CiZQ|&dP*j<<$Rm-f!N-c=(-Lwqixs zxpR!SZdGSw_ zHtgQ5-8At)MYKGev}Zc%Z8iJMz{4(JG|iAqzg60@`W_cmYV zU-)TlxZLBN+RH5xlHLC=5cBuXFS}bS-qvLJ``g>aE0<4PxG!!Q+m|)6b00l9d3nmz zFl7!l2?>rC_v07u*m+dOa_jD0d*$lYi}nU*ew{33Q)ge1|NhB`kGx+dTW$HPEMr;J zqU_#hWNCQ%)hV{m#i!5c>lhlFd)Fq*Ho1U~K9kN)PdR6|V`tUlH#&z89^{OcR-fWk z@3tyQ(|?Mf{B-ZwVB`9KueR5Gmrq(G^4G#Jq{~I=qVBWz<@NXXRDNzx`1#xZPv5zD zVK#e~-nbd9#KAN*)YQbJd_sIkpMr$2oM7wh+0u-&97I+z%!!TNuwkRy1P+g$UI7&* zIlFsT%*_fuebG!Yl5A2)NJ(i?;E<4#O3KLSNKjdDoxkwg7uHQhn*v)kHf-On`Zqws zeYw@etzrVR3pyU`FwoLkt*N84Wa-w)r~6|bU70C4ui}MHzkNm9v_3_f+CPFkEIK)| zH!~~v+Yb53%v~a5V0idsqk1Dmu}zGRGG^tcQ0rPBUj%3T-n`kkukV|M)ve^j#Ma4^MUt5tzntNz`}=S6o}Y(mIoh^gUi>!syc zPIp_@)XY8l)%eBnc1hXyiG_8YH-8HLVz;{Zt!%>d`JS1Pj4vfUL&C*_gM(XIk2>zL z5xsGH=L4nB$4+{7O`a_Lt?V3#pYptQ;e!Kt-s)>~b3bh0ee_u0?ygPo^`o{^7uEYg zCat)46($!4Jb(86_Idl?kA$%v~jwZp~W$%xky*t}oe(xFU_j}I1ysRD>6_t?Ua{kK~m8!c6 zx8~{1ijD@IDSGd-_={J0%NDHZII@K$Y0=@A?^i8ezqet|7L$}9^+}I{H1zcr8Z2*^ zxifEC*cTb=;u(wGpI?0CK4ZSMYjCi5(?W+551x-CI{Mi?Xb!eQ}-lqP4}*6Gw~=CvVP43$bo42~W%ITlms~p5Gzr<|b zjf!0lUp;PGyjeK!9+%zUFU5JE%>OZee3yUGUcJq0qKC?^qjx}sf#UcP$0 zY~jN8wqsuB=Gi$%XDgrH?4FUQsib5y-U-cgdG;m+oD5uPl|FSLEJRbh+|Z>->VZw^Dg{dM0qNU3toG zY#!wFXQ9I(CuTzv0Rv;(hMhMZ&zw24uij_FHpAn0&M>K~Yq|+FZuydPukx)?zFoQ8 z!36uaYnzX>{49KXOG~^@S5Ww=?|i@R{r(K|`0_mV-kqRr^ReXf(USebbN@c(IeTV9 z;X4WUuwO4$@<067eSF6J`Kr3cjP_gYA3r{A^W}i2RTN)gP2lk_pSWyy3GQNZv#9x^ zle{^br|;~>vPVouLwO}USmwy2+_=3XDgA9z?^IhqzP=kbZzQEZ?&w|2GqYJc&q!KE zX3mGtoX@+@?|bs=?0bRo`Q5OUP-4ZxJ3f9ly<-0GSNZ)9&+Y$ro_fV)wd>Z)cWYEF z6`PJ6(TIwEwe!=D)Oof4)K!)*PfSeiUcA^`POfgp?rJ4NfsRh@l&o#D?;I*%SvDnfaLnXSD!}vX0K%g2M0#Q^Wmgy~P&`Z~pR)*TBHw zz=a1Ex@YHdOwzq!U48M=!o|z$n+`rS%#vE2@%Gj7z3CJFOwu}*K22loils{zPk#8( z@X_SQH%hO|ty%k~u&CtVxoe!!(#PLN-#=$zb)ukX(xVp&&T3x|9E@vg-_0Li^YQAl z!rhw7ypW0umVJBo{fv9s`+nWwv#)EuUKRiHExYhziK@D}th>6j)a}h#$ zLBQ+u=@X|;tJ)dP`EkUf$!W@pD|H%Ey<%eSaD=p9xN_rIzWqPd_kaE@xA{DIwT_P8 z=L?6$D_6tq;8k{xm9by-{O$F5Pad|*ISBMbM$CF1F2DCA`};iyg8gG2otnyC z@$+f6jIGuAb#vK2gtHi$-gVBaQ)*+gHZV4JSGwaEn5Z|?lCPqIbII}ykB(ktGrO*v zM|qE_AMdah@vRC|vizBulA>;CvTE^;JxxasyRXP!=`1UBqM>d^pP%l|O4pRMrvl{~ zvo36K*i(DwMxus*+=>Ht?#Og1ESL}_u)a{;!r|1n+_pQ#-{(fmn4OrF)z#T4`TN`3 z+d1{oGZG#r^lv`H#VuSM^CtG>c|RpHHJM;z?O$J+-`v_c_sbn2 z++6xgG33^5%kG6iU+R4!O^5ECC+m0Xz5gw5_wz~l3-=PAGk!)EYtkLoCzlj8J@{ZC z6f|k&id8Ds=IwL##9T6()Y-x1zA|iK5WBFLly8)mon_=x7uO{pe!X7*=^*?2;;*kB z^YHQ(yt^aGr?0>Hp-PS$8sDBi>v)>TKDZ)_nrE>X5r({EUVu$ z9lr)T14U$O=urZ@%6E-xx*ijI4X%Z(Fm($9SMM10r5+V*E zB^vv<sRJ~+f8Oy4v6}wLwifmI7+?Je{=I`yUezbMvo-dz-_xwHA{e`#e(#5+jURg57 z`(&T}d_M2d)aUabtz6w-^uPA`j2RNj+Um2D)%z}+U+~YXlgpOwULzB^e94}^yT5%d z_V#TkteN_$E6K|GmPPS9m9=kmUEGdtNPYeGPU&;IZ|^Km*p|;us=M&6-61pmbxZG7 z=5J-^EN*z$|0pS%^ytZpPxekvpUE(l*s_uDwxt-SLgg-3hx+eE3qLZek)*pUSZKvhNz*t4S&x zDr#zd(@Tszer8?{1Coqd0b!7?syUC6X)6XwruUwF|hZ-26R^|v>NA1$z) z_Dl?PKxbAJgSIv|=+Xy6!-w;#-+}PKTeqYfH(7etpPy%KXf#EkxF~(~#kp_p7EgFK z&CILobH%5b)sePFZb4p3v9@!kOj-W%i?R65vZsP^HJ^;u+f=uj$5pm1UvKN?md4d6 zWqNaGBQw*Jj~*)b_{*mil}+7vlJ!#1<`o*Nm+e_GY11a55G~Prar>4mfBN8= z*71wyL}yO64sth_kxjXA+cG)(@ek+Mw-3hclGKom1;ze;HCSu0rJm^<>wXIKl!H>b9c{#ojV@B zU3}o~VeWE%{Ut`#a{FpJ&Fg+~U0-K=u$kZP#L?e+g)jfLThxEE)3Ym>wK=^nc+ULh zi5nYY1P^S}jrQ!FYz$-H)}*hGTkkOG z`QKy@9v!CYpOxPp{j@n(Io~Jk+2^@c=k}cY{rhL#KC8W~-FI6LKUGn;7M>rxtRyX7 zZtnH=d3Txa*w+}u|M{rQCtuZhJ?_@IX3BJ9?Sv&3QQNZGRE}GA=LHbPTE z-_p28_H=Q4AG+j4(-jn9X?>{_St^fJo!PqzTuT{V8 z`^Y3ObNl?^rN%R&Y&x6rVkHcI*e&y$f7W@jnsM17mu2T?9X`;=e_`L+u5G$jljh9u zaY{G!eYb1&A;ZZPIX5R;j(o6j7kPVp%#(>rhTnaBO!-ShWq*MGcrTmQqc zb?FtA&x37tfAu`pTPraCx^JDMc!`?!B&S6s$2`8hn{#@VyW1sWYoA$By|HD9hLMHQ zU(aYu9laLX`sUu&3CE|MQLx)*xPI@p$*!NhBeo^T8F#4}7C&=&<~RS~CfB2P%Jcaj zC9AOUb3Xo*QE+R|mv@#NH>H%^vRYMK&vVKx&hW|VYII56{UYzBi|Smf5|^n{JiIos zc`6!KoM3o%Zgy{|*`Mp0WceZSxPK4JcR|FFE4H+vL*-YtF^bb)vG z+2+`?2UE_nFh_35U;boaq3fEst%CE-doE@iOEOF}S#qsh>$TI9UZf)2;EK!v?v1GDQ=SJ7yicc$-zqqU1zqI(+=MQh#UtV6V-TeNw|9(4W3F|bOe*0}5 zH;)QSUNJw>a`C&-z5`+mgzfFCN+b&hGE!6pJqXt%zB9W?nIW z^E>VdqMqrmjwlsEwYq|H%G=A^@ zc11xas5`F&Rt>d-|yAl{P3l! zZ13Lwi^<&?*B6?0-H=dODOqls*LQEldOgFI}-^250bcqn#B}#&YwHPM9dX zp-TDA(g^_`g)d6u&ba9>cIQcc*`yR^V>Feu_;|3zGX1>Wy(UwAUZ=@ssvH$mKf2)6 z6o)-3ik@dP?uGa+Kc^M)N7NS3EZNb;6b9vchKL~ogpZl3Ryb)_YD{hnhFoqq>-2+a~< zKB>vZvr5HEMdj1QNBpDpJp~7&j3=+DPBI_(CabiWGvZQsHR-Av!*45KLJp8zQrbQZyVc|xPNk_IkI$87Y zrn=8;qlulua!H5Vd{>yR+>tBx>+37;`PFO%{_`2{TwX3e@r%!-t!{06a;LY+o;Q5` zFsRMeV3KJ6dL`APJ%?*2UFn(W85*IoO+Ok3+WhcDkGqANi2kA7!>CP!1j z@|CPvi)2rEPuC0N4hadpv^d;ehXFlEeAB$~AX(Oq{-L-Qkzq7d^6kPy1#4Q54Q!_wt}}vT^6cEnBW@NM5_` zxqiazA8DB;{vHVd+h*t0ar;KE%$R$ljqk0nM^M(w8ykyF63X6q{QmaV^V%xUYpW)T zM5*1+PCu2Q9dub`ij=NruGPe;lRdxRbH4HA%;h&V$>O);t7d9mUUvEUJ;xVkjc%DR zPZBwAySLqNSAobRC#SB79i71f^4Hm>T1`FHdwWyiU$bXt<4;^tpP%sD+WMsK3#a0h z!uq*fo02m*G~G_N%zRw&W#d(wT_v1itLL?Lcl|v4-Y&K3qDqn~XRAtJh{?=;d%Kg) z{Jp7%e_gHl^e}K+PDRsA)ytM81^TUHR6~1D z3qE^ubMuvJVZqAhE@|9p;F#K^z)?Qq)+?zMz2}y;yqGmLeV?UwUY*>`n~^Qbk`}Rc zGJg7DH#^V1JNEL^!;fr*7PU8G;%piX_61n^`3uax-2Uc6($?yAs}eMXXWwlOElb>H zVIYyJ6Q&-vTd?__^QwD(t6aS|oosT-IzB@&_UEhaATwLLX&wgb)9qd6>%IK*^6IuvJUM#RQDr5sRI$|V>rXzs>f(9V^|r&zbm9?~(k()hJv;&~ ztqfKd5)!(wVzP&~ubSV&M-SZe)yr5i7wwQPjp7QLbL7+VYny6rdR2XY?f>uxCr^EW z2y;76>QQ0;PX}HYdUQ#=lmDrp9j2FluW9F(x8@UO+^FD_t($(gnr}fz=i>bRjy{^Y zX~)(aT@$x^%F3g{JGb9gnB`?y^TDqn`SuhKL$Z@)sF)~Y+E}dibRkZ%s<>@}!^IUe9y+%QM%k{ga=3 z;GIeMwPkB=v&MOUdGY>Flb*$0J*I;Oaq$c{pB;G3omgH`P|dW%mT}KMflZg2Pm3RU z%AHjHyI=?N*N2yqijy~4ZM<=ZrAabkjh|1NwcBLg#V6ZtK05I5(`6ueqRPTYrRS=gmdO6TF=L3NLtEoDs72 z$g9-IFRzo`y7qIIK356pvc)HdqUm3~BoV14 zGb-G^7+zH0E<9<8)6z>5mUyk3pT6?yvISR{EeO%Nm|>!#t}c98Z|1+dGCVI|JEVWP zyeL=LWMx&_`B;Z()`t$cdP~@(Sm8xc`d!gQ z8?SV@O>!w}nm5fi`tzUS*FWBTe{Yy~r=Y6zy!y&w_D7FZuC0qbyJ2B-NB`s-8`4zY z@83PWaPhnJhj(7Sx&7DZd|ut8v#;gT&(GF3N_vwwe3kdffhsN<8KYM(rJ z&eiPJ#wec?o5Z_s_8rYR{`AYj%aSKfzdm&T-?#1B_m@kZ@~ii~ZYPxzEGE{?c{A-v z&eiW%u3ZZ{ytMwQdHfH1KWL*qcDc}^yQiWStXVYYPm`XD(WR58^%ZQDyTA147;P@% zXj9s8r>#xvrTmH~f-o&ld6Xwdv$k{h0SfzE#PQF=| z`hBNx_ti$v<;T;C6HFovX0DaEq_bp|j?YY+e)s9QDGzt8O?gtL7}k~eqhqCyX5^_k zs;4zx-0VN*E4*F(#QS-alCTIIOVq=wXE5GQ)&Fh=`_i8GCGXkyo}oM3zR_utfuyWX z#J&mDzj)IgE?RnK&R2uQZvDwenE5y5{7mMNwwuzf*7Nwd_y42Um+yac_4>U>=j;C} zU)?(0^5;j+XZo{T7X_U@=6k;A-|x+HEPtD?(mMU~cX@im?n3Th@8_GJ-~C?k`^4)W z$)5@vC$*e?bXYCAqjzdW<#F$tPZz62e0R=on#0j%!n^6}iO;v^B_8>psG-s+dRnaL z%ZI#sHL23a`SzVWe*F8#j~{FQd^=L-CwKewJ@dE+M<(w5^Ye564EuVil~prmE-mJ4 zzihbll*L;<9Wi~i#k`wOww;$&Qd8@5?Uq}(YuBt-ud=eTSMLmoJ-Q@wugA3+hS5PA zXZ@XH|KFTp)z6Rd-;av_J1@L2NPy*`-{l3tk><-kl~hXR-rnAQ?(^#CEOoPayJwjw zOLRTpZvEK4xIWg-e$(aFyMKd^UlQhc%%6Ux-N#>{=e+!}j7f&GQhd^+)4FY~?1P`H zm>%spnBlrKDA8Q0`HuJbiSuu_F8g>^BG{r&^|aXME3ZO%-q^Ef znzg0OZjA6;bbc>$#I`im&+>YS7ZPRDO8($tT*vm)6X-JTRLv4UM{STy>oR5tL93!kXIsBrG83= zj=r11+WpcO6h2mavLxNO^h-*b-@F4K6q`H4Jv_RO`OFDCb9l4Y49jf3;%9nEx4sCe z`RXOz`_uY^sqR>>{OM1}79g`>vD z4L4V46)*Qojw>{@{ba;Zd06C0+Qroi80NlFxH-!$eJyMLG}*O|r_Wt4|8V^LfBEWr zHJ#J9+aK;epZn~o`25E&s@o-M;_DwhRteLKKeLnh}-#>r6SX=YuUfsVBw-=w8W!h=?w|!&6N24pNMCOR;hiztUKG=Em&4Hw{2SvX; zJg-fjAAex`{krJ?Uw=J1J^71#)=|ZDh1)$5x_)|d{`)iNh5f(2|CzP^9YJV+(Bw@> zSa^7_v+n<&f6Le0-_h7R+k9i z7YOYA^-Wn@f4)bU*}|TjKM#9;?Z216(r?~zGs%71&R5rWY>AM)VRJEW+2yClHLMMH z@40cOP9%uutcamWpozL_XnW4~ODl8TZ<*!0w{P<*$qeIJskx$5Y|pilDQ_ot^!F~F zDB_>IQc$W?O3j;L^~DCqX@-$!R+w^nZ2VYqVT=1}FXu^*0yL5`RZN`}P2DEVx@_U* zqgWQ zy17bL_g$X%XR+LjtGk$Wqqn+GdSoE6)}t#z#IVpK$Y)EEii&1m-QTuAqiVU;*Va5+ z>8pKXPo7r4j%L!SD@sz{x{~)UpSUqEQBLN;vB#GTQ&U>l+0zUPa~Oq>`z$K>67lU# zU9NePp-DzcK!Yn>gs%-U#-4<;%yQCQDZMowo8V~ZfrQsm$OYkZ87i7 zSBIW{dH9uO;u49jt}e^MM=ZO`-X>j{VRvE^>+ZXKIsS*!&MkZ8BN^bV`^ZD~;d5wz zVdtwS_b<->C9fa5L~KXQ=gX7yw{G29Q~OJV_3o}qtMl!5mArR!?4S2#$8z)LHonF8 z4>&$4f9>ZtooUmjPn@YKLMKnDPMPRyVB76cWoB1Dqd=uQL8JLgkBrkpAEudiKd=^a zuzmj6&Rx)M{Gp}h$KSf5X3HPOH5JY;f7r}q`OCQHp#j@|dG{OL*IyoZ?|J-fna~%D zkClfloM)!6Z03kqwEJ$XpS@qc7~gu?>DCSUGg>cCY;^wikgvj^>T+kxp^BQgIR`oP z`la0!dWo%;fdLSM0Ny$Fb?n(Z`(v94QaK{^oE!)N**|ixMN_v@@w^Z}sNf*wXiPcG$+x zKP}fp{$}wGTerMAF1+gZE#tNGyWG`&Zd8$wh@Nm}&mn=y@Axl8T{2!!9zO5hj!x$H zd(K%`Z!doHVD_7;ua)24R?cPqU2go~UbTj%X43zA<~Mew^4=|Ss`>EFx~3#Y-kpD+ zAn!DFzM_ivufM#Xd3^WpvX7^}KT88$EJ0a`s`_4Ba;yFF!n-S3G&@ zOm_tVB{Q>mJ9b#8cq-|-w%<-ZtjE6L<|4)|n;y-v2yow_32g^%y_lDJ_u_riE7zW% z*(LvXS98U`$FJAFxU{vw?)$gp(d+L$DShu(w|(7{QeB1h+1r1e(tY6-7H9YJrX|be z%^ayIlPAvfwwUDVmX=q$g2#PRN6R4>qf4DBON4oTb+%mUboull?Mad!|6`u#!XMHn zz4Jc)&gb~ViJi7j4nI6~r)^9ld_P8{ULiOJrwvKb|>8y$4 zU)R99{c!)?CvMxUHd?%$aaYgBj9IK(eD&epqwfyA+LEy8N1^4RuZfqmtk<7mFMU+- ztKi1o9drJ@_+(|ppJ&-~GUM=5j>m>S3uoEPNcI1cAl5Ct`DW|YSB}&EM(D)lY!j&3 z`})+y4`n=6@?keSPd{D~{e51KmdwG1M(2r3MA~>I9UnF?zOXFg#B0N88#gbz{QsYm z&=kI3CHwmun|CRmt_%9=7*rA_7rk+grRwI2oQF1HIh#n#$RHugh(2Th!F3dN$eVr<<>49er4kV7SZE*D(2t^~H=y zo?bzp&)&>$JRKu;I)uwy0X(v^-iLQ<$n|RlJD2U+7kqPTwfU|RT?K9R*7qOO8@0pt}EVs_OV0R?Tx!~BIX#m&EC1sr_8%{ zrtGy}SrxU1e@o}4@oai|EcNo@>7_5$WP(ttY*nQDEY+zY#av#YN?xH#o>{6|zCv2Q zLY`Tvf4`P4&kfNM_VDs@S?lMtIB;Q@`ql8Hr1VLXgf3=XEqQlm;<4Vx6ID8Q?2yG%her~Sh?+X^kdh0tHzwxI+4a}G9UU2;pP$cOXEl4WLQFrnTfN_i*LwQ@ulMZ>cJ1l;bc)Mw>fB|Yd_R`Z&tlNbw2Em^WBU$ zYeRnCG&*%|&bsxx{`-f|eH8Na`jqf#fpL*;uAx6eL(6L`D=nWseL7{TtA2P$NI+zy zXKJddsHkX2$dtgix>=`A6`h;6cG0R;O`A3a&$0V!I(6#PuaD2qv-Pg5vT+T`T|ojtmR*i*&V|n!ajNq#O5wXZk#@iD z9)ELlZ?}EjPxgO*j;7aqeLuhW*ZTOPSNib(9;K|D)%;{eN>ldAk$* z_BH4E?f)G3e!u>FzkS@JcKNy|@9Y2feSUtv_}v}LeLtVg{$*AEPDWfW=E0#>?wap+ z%WHnW-9E>@9&`s=!NWtWdU1O=Is!EB%z%dPR)^Buv!T0>tY4-5oag^iCa2uouTwAo zyc)ATD@*VGhPu2vYp;KePtMKNH8nN85>R`1*UtHJt9Shpx_Wi`tN8pcTixY1=W#jR zHEG@TI{(Mb50{^ZAD;R=x_IWR)8Z@FSRDO+zxMRZRYvD(gHN`8PPeFE*Y)}NsvQOY zc%JWD`NStwQdIO}m)-u=@&2V>&)R?9Wmx(?{P1%<4s*y5>iU4YMb00BSM03#m}FvL z;-hc6^-9?FKT58?Z@<2-(p+`$t@-U|zVhGGI(t_;Ki|r@CGYI9`KxEKJ=a>Za^+5~ z0@FSBzcS?>{%C4y`gOkN;p6M-z1Q7Yzw4J!0Q1(X0nxRgANH9YFyFKG-RJ)=Kd!6m zyLjMNf2jGhPft&Wgoj@**VK>QRdO|3yd@i4Z-3DKy7}&j?8A4?I^F1f73Ta{w`cd$ zfQrkx_m`}ztp9g&U2d$yo_jOe9&T8e{eQn%$2IwqQq>z*uU-4+-2VB}Qu)SNtCyL( zi2vOA>;HW2`clQuY3q2;?N14h{!uCj?iqxyNYvO-^YhbH#;0OdmF8c(+t1B^U2v^; z@5Q&cZmzT5wB>(#mDtFw=H@GULS2DdkVOx?BZG0UGEiye0>r~NO4 z{ocQBjGrDI?Y@3D?yla8T_3lvdid?N-u(|VIPS<*3gH4N zRN&a|3+iLDI0~>l+y;&j1&$_#J7(bemc>z^<+d6*hQ6(5Sb0|9wutc`4h9AW22WQ% Jmvv4FO#nN!ct-#L literal 0 HcmV?d00001 diff --git a/examples/ethernet/eth2ap/main/CMakeLists.txt b/examples/ethernet/eth2ap/main/CMakeLists.txt new file mode 100644 index 0000000000..aaf55bea54 --- /dev/null +++ b/examples/ethernet/eth2ap/main/CMakeLists.txt @@ -0,0 +1,6 @@ + +set(COMPONENT_SRCS "eth2ap_example_main.c") + +set(COMPONENT_ADD_INCLUDEDIRS ".") + +register_component() diff --git a/examples/ethernet/eth2ap/main/Kconfig.projbuild b/examples/ethernet/eth2ap/main/Kconfig.projbuild new file mode 100644 index 0000000000..70dce6b386 --- /dev/null +++ b/examples/ethernet/eth2ap/main/Kconfig.projbuild @@ -0,0 +1,111 @@ +menu "Example Configuration" + + choice EXAMPLE_PHY_MODEL + prompt "Ethernet PHY Device" + default EXAMPLE_PHY_IP101 + help + Select the PHY driver to use for the example. + config EXAMPLE_PHY_IP101 + bool "IP101" + help + IP101 is a single port 10/100 MII/RMII/TP/Fiber Fast Ethernet Transceiver. + Goto http://www.icplus.com.tw/pp-IP101G.html for more information about it. + config EXAMPLE_PHY_TLK110 + bool "TLK110" + help + TLK110 is an Industrial 10/100Mbps Ethernet Physical Layer Transceiver. + Goto http://www.ti.com/product/TLK110 for information about it. + config EXAMPLE_PHY_LAN8720 + bool "LAN8720" + help + LAN8720 is a small footprint RMII 10/100 Ethernet Transceiver with HP Auto-MDIX Support. + Goto https://www.microchip.com/LAN8720A for more information about it. + endchoice + + config EXAMPLE_PHY_ADDRESS + int "Ethernet PHY Address" + default 1 + range 0 31 + help + PHY Address of your PHY device. It depends on your schematic design. + + choice EXAMPLE_PHY_CLOCK_MODE + prompt "Ethernet RMII Clock Mode" + default EXAMPLE_PHY_CLOCK_GPIO0_IN + help + Select external (input on GPIO0) or internal (output on GPIO0, GPIO16 or GPIO17) RMII clock. + config EXAMPLE_PHY_CLOCK_GPIO0_IN + bool "GPIO0 Input" + help + Input of 50MHz RMII clock on GPIO0. + config EXAMPLE_PHY_CLOCK_GPIO0_OUT + bool "GPIO0 Output" + help + Output the internal 50MHz RMII clock on GPIO0. + config EXAMPLE_PHY_CLOCK_GPIO16_OUT + bool "GPIO16 Output" + help + Output the internal 50MHz RMII clock on GPIO16. + config EXAMPLE_PHY_CLOCK_GPIO17_OUT + bool "GPIO17 Output (inverted)" + help + Output the internal 50MHz RMII clock on GPIO17 (inverted signal). + endchoice + + config EXAMPLE_PHY_CLOCK_MODE + int + default 0 if EXAMPLE_PHY_CLOCK_GPIO0_IN + default 1 if EXAMPLE_PHY_CLOCK_GPIO0_OUT + default 2 if EXAMPLE_PHY_CLOCK_GPIO16_OUT + default 3 if EXAMPLE_PHY_CLOCK_GPIO17_OUT + + config EXAMPLE_PHY_USE_POWER_PIN + bool "Use PHY Power (enable / disable) pin" + default y + help + Use a GPIO "power pin" to power the PHY on/off during operation. + When using GPIO0 to input RMII clock, the reset process will be interfered by this clock. + So we need another GPIO to control the switch on / off of the RMII clock. + + if EXAMPLE_PHY_USE_POWER_PIN + config EXAMPLE_PHY_POWER_PIN + int "PHY power pin" + default 5 + range 0 33 + help + Set the GPIO number used for powering on/off the PHY. + endif + + config EXAMPLE_PHY_SMI_MDC_PIN + int "Ethernet SMI MDC gpio number" + default 23 + range 0 33 + help + GPIO number used for SMI clock signal. + + config EXAMPLE_PHY_SMI_MDIO_PIN + int "Ethernet SMI MDIO gpio number" + default 18 + range 0 33 + help + GPIO number used for SMI data signal. + + config EXAMPLE_WIFI_SSID + string "Wi-Fi SSID" + default "eth2ap" + help + Set the SSID of Wi-Fi ap interface. + + config EXAMPLE_WIFI_PASSWORD + string "Wi-Fi Password" + default "12345678" + help + Set the password of Wi-Fi ap interface. + + config EXAMPLE_MAX_STA_CONN + int "Maximum STA connections" + default 4 + help + Maximum number of the station that allowed to connect to current Wi-Fi hotspot. + +endmenu diff --git a/examples/ethernet/eth2ap/main/component.mk b/examples/ethernet/eth2ap/main/component.mk new file mode 100644 index 0000000000..a98f634eae --- /dev/null +++ b/examples/ethernet/eth2ap/main/component.mk @@ -0,0 +1,4 @@ +# +# "main" pseudo-component makefile. +# +# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) diff --git a/examples/ethernet/eth2ap/main/eth2ap_example_main.c b/examples/ethernet/eth2ap/main/eth2ap_example_main.c new file mode 100644 index 0000000000..ca64cfc7c1 --- /dev/null +++ b/examples/ethernet/eth2ap/main/eth2ap_example_main.c @@ -0,0 +1,275 @@ +/* eth2ap (Ethernet to Wi-Fi AP packet forwarding) Example + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. +*/ +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/queue.h" +#include "esp_event_loop.h" +#include "esp_event.h" +#include "esp_log.h" +#include "esp_eth.h" +#include "esp_wifi.h" +#include "nvs_flash.h" +#include "esp_private/wifi.h" +#include "driver/gpio.h" +#include "sdkconfig.h" + +// Choose the default phy config according to Kconfig +#if CONFIG_EXAMPLE_PHY_LAN8720 +#include "eth_phy/phy_lan8720.h" +#define DEFAULT_ETHERNET_PHY_CONFIG phy_lan8720_default_ethernet_config +#elif CONFIG_EXAMPLE_PHY_TLK110 +#include "eth_phy/phy_tlk110.h" +#define DEFAULT_ETHERNET_PHY_CONFIG phy_tlk110_default_ethernet_config +#elif CONFIG_EXAMPLE_PHY_IP101 +#include "eth_phy/phy_ip101.h" +#define DEFAULT_ETHERNET_PHY_CONFIG phy_ip101_default_ethernet_config +#endif + +#define FLOW_CONTROL_QUEUE_TIMEOUT_MS (100) +#define FLOW_CONTROL_QUEUE_LENGTH (10) +#define FLOW_CONTROL_WIFI_SEND_TIMEOUT_MS (100) + +static const char *TAG = "example"; + +typedef struct { + void *packet; + uint16_t length; +} flow_control_msg_t; + +static xQueueHandle flow_control_queue = NULL; + +static bool s_sta_is_connected = false; +static bool s_ethernet_is_connected = false; +static uint8_t s_eth_mac[6]; + +#ifdef CONFIG_EXAMPLE_PHY_USE_POWER_PIN +/** + * @brief power control function for phy + * + * @param enable: set true to enable PHY power, set false to disable PHY power + * + * @note This function replaces the default PHY power on/off function. + * If this GPIO is not connected on your device (and PHY is always powered), + * you can use the default PHY-specific power on/off function. + */ +static void phy_device_power_enable_via_gpio(bool enable) +{ + assert(DEFAULT_ETHERNET_PHY_CONFIG.phy_power_enable); + if (!enable) { + /* call the default PHY-specific power off function */ + DEFAULT_ETHERNET_PHY_CONFIG.phy_power_enable(false); + } + gpio_pad_select_gpio(CONFIG_EXAMPLE_PHY_POWER_PIN); + gpio_set_direction(CONFIG_EXAMPLE_PHY_POWER_PIN, GPIO_MODE_OUTPUT); + if (enable) { + gpio_set_level(CONFIG_EXAMPLE_PHY_POWER_PIN, 1); + ESP_LOGI(TAG, "Power On Ethernet PHY"); + } else { + gpio_set_level(CONFIG_EXAMPLE_PHY_POWER_PIN, 0); + ESP_LOGI(TAG, "Power Off Ethernet PHY"); + } + vTaskDelay(1); + if (enable) { + /* call the default PHY-specific power on function */ + DEFAULT_ETHERNET_PHY_CONFIG.phy_power_enable(true); + } +} +#endif + +/** + * @brief gpio specific init + * + * @note RMII data pins are fixed in esp32 as follows: + * TXD0 <=> GPIO19 + * TXD1 <=> GPIO22 + * TX_EN <=> GPIO21 + * RXD0 <=> GPIO25 + * RXD1 <=> GPIO26 + * CLK <=> GPIO0 + * + */ +static void eth_gpio_config_rmii(void) +{ + phy_rmii_configure_data_interface_pins(); + phy_rmii_smi_configure_pins(CONFIG_EXAMPLE_PHY_SMI_MDC_PIN, CONFIG_EXAMPLE_PHY_SMI_MDIO_PIN); +} + +// Forward packets from Wi-Fi to Ethernet +static esp_err_t pkt_wifi2eth(void *buffer, uint16_t len, void *eb) +{ + if (s_ethernet_is_connected) { + if (esp_eth_tx(buffer, len) != ESP_OK) { + ESP_LOGE(TAG, "Ethernet send packet failed"); + } + } + esp_wifi_internal_free_rx_buffer(eb); + return ESP_OK; +} + +// Forward packets from Ethernet to Wi-Fi +// Note that, Ethernet works faster than Wi-Fi on ESP32, +// so we need to add an extra queue to balance their speed difference. +static esp_err_t pkt_eth2wifi(void *buffer, uint16_t len, void *eb) +{ + esp_err_t ret = ESP_OK; + flow_control_msg_t msg = { + .packet = buffer, + .length = len + }; + if (xQueueSend(flow_control_queue, &msg, pdMS_TO_TICKS(FLOW_CONTROL_QUEUE_TIMEOUT_MS)) != pdTRUE) { + ESP_LOGE(TAG, "send flow control message failed or timeout"); + ret = ESP_FAIL; + } + return ret; +} + +// This task will fetch the packet from the queue, and then send out through Wi-Fi. +// Wi-Fi handles packets slower than Ethernet, we might add some delay between each transmitting. +static void eth2wifi_flow_control_task(void *args) +{ + flow_control_msg_t msg; + int res = 0; + uint32_t timeout = 0; + while (1) { + if (xQueueReceive(flow_control_queue, &msg, pdMS_TO_TICKS(FLOW_CONTROL_QUEUE_TIMEOUT_MS)) == pdTRUE) { + timeout = 0; + if (s_sta_is_connected && msg.length > 4) { + do { + vTaskDelay(pdMS_TO_TICKS(timeout)); + timeout += 2; + res = esp_wifi_internal_tx(ESP_IF_WIFI_AP, msg.packet, msg.length - 4); + } while (res == -1 && timeout < FLOW_CONTROL_WIFI_SEND_TIMEOUT_MS); + if (res != ESP_OK) { + ESP_LOGE(TAG, "WiFi send packet failed: %d", res); + } + } + esp_eth_free_rx_buf(msg.packet); + } + } + vTaskDelete(NULL); +} + +// Event handler for Ethernet +static void eth_event_handler(void *arg, esp_event_base_t event_base, + int32_t event_id, void *event_data) +{ + switch (event_id) { + case ETHERNET_EVENT_CONNECTED: + ESP_LOGI(TAG, "Ethernet Link Up"); + s_ethernet_is_connected = true; + esp_eth_get_mac(s_eth_mac); + esp_wifi_set_mac(WIFI_IF_AP, s_eth_mac); + ESP_ERROR_CHECK(esp_wifi_start()); + break; + case ETHERNET_EVENT_DISCONNECTED: + ESP_LOGI(TAG, "Ethernet Link Down"); + s_ethernet_is_connected = false; + ESP_ERROR_CHECK(esp_wifi_stop()); + break; + case ETHERNET_EVENT_START: + ESP_LOGI(TAG, "Ethernet Started"); + break; + case ETHERNET_EVENT_STOP: + ESP_LOGI(TAG, "Ethernet Stopped"); + break; + default: + break; + } +} + +// Event handler for Wi-Fi +static void wifi_event_handler(void *arg, esp_event_base_t event_base, + int32_t event_id, void *event_data) +{ + switch (event_id) { + case WIFI_EVENT_AP_STACONNECTED: + ESP_LOGI(TAG, "Wi-Fi AP got a station connected"); + s_sta_is_connected = true; + esp_wifi_internal_reg_rxcb(ESP_IF_WIFI_AP, pkt_wifi2eth); + break; + case WIFI_EVENT_AP_STADISCONNECTED: + ESP_LOGI(TAG, "Wi-Fi AP got a station disconnected"); + s_sta_is_connected = false; + esp_wifi_internal_reg_rxcb(ESP_IF_WIFI_AP, NULL); + break; + default: + break; + } +} + +static void initialize_ethernet(void) +{ + eth_config_t config = DEFAULT_ETHERNET_PHY_CONFIG; + config.phy_addr = CONFIG_EXAMPLE_PHY_ADDRESS; + config.gpio_config = eth_gpio_config_rmii; + config.clock_mode = CONFIG_EXAMPLE_PHY_CLOCK_MODE; + config.tcpip_input = pkt_eth2wifi; + config.promiscuous_enable = true; +#ifdef CONFIG_EXAMPLE_PHY_USE_POWER_PIN + /* Replace the default 'power enable' function with an example-specific one that toggles a power GPIO. */ + config.phy_power_enable = phy_device_power_enable_via_gpio; +#endif + ESP_ERROR_CHECK(esp_event_handler_register(ETH_EVENT, ESP_EVENT_ANY_ID, eth_event_handler, NULL)); + ESP_ERROR_CHECK(esp_eth_init_internal(&config)); + ESP_ERROR_CHECK(esp_eth_enable()); +} + +static void initialize_wifi(void) +{ + wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); + ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, wifi_event_handler, NULL)); + ESP_ERROR_CHECK(esp_wifi_init_internal(&cfg)); + ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM)); + wifi_config_t wifi_config = { + .ap = { + .ssid = CONFIG_EXAMPLE_WIFI_SSID, + .ssid_len = strlen(CONFIG_EXAMPLE_WIFI_SSID), + .password = CONFIG_EXAMPLE_WIFI_PASSWORD, + .max_connection = CONFIG_EXAMPLE_MAX_STA_CONN, + .authmode = WIFI_AUTH_WPA_WPA2_PSK + }, + }; + if (strlen(CONFIG_EXAMPLE_WIFI_PASSWORD) == 0) { + wifi_config.ap.authmode = WIFI_AUTH_OPEN; + } + ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP)); + ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_AP, &wifi_config)); +} + +static esp_err_t initialize_flow_control(void) +{ + flow_control_queue = xQueueCreate(FLOW_CONTROL_QUEUE_LENGTH, sizeof(flow_control_msg_t)); + if (!flow_control_queue) { + ESP_LOGE(TAG, "create flow control queue failed"); + return ESP_FAIL; + } + BaseType_t ret = xTaskCreate(eth2wifi_flow_control_task, "flow_ctl", 2048, NULL, (tskIDLE_PRIORITY + 2), NULL); + if (ret != pdTRUE) { + ESP_LOGE(TAG, "create flow control task failed"); + return ESP_FAIL; + } + return ESP_OK; +} + +void app_main() +{ + esp_err_t ret = nvs_flash_init(); + if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { + ESP_ERROR_CHECK(nvs_flash_erase()); + ret = nvs_flash_init(); + } + ESP_ERROR_CHECK(ret); + ESP_ERROR_CHECK(esp_event_loop_create_default()); + ESP_ERROR_CHECK(initialize_flow_control()); + + initialize_ethernet(); + initialize_wifi(); +} diff --git a/examples/ethernet/eth2ap/sdkconfig.defaults b/examples/ethernet/eth2ap/sdkconfig.defaults new file mode 100644 index 0000000000..710208fe53 --- /dev/null +++ b/examples/ethernet/eth2ap/sdkconfig.defaults @@ -0,0 +1 @@ +CONFIG_ETH_EMAC_L2_TO_L3_RX_BUF_MODE=n