From 46b88b606989681baf628c73c24f969fab08c569 Mon Sep 17 00:00:00 2001 From: Florian Hoss Date: Wed, 27 Jul 2022 08:54:58 +0200 Subject: [PATCH] Writing documentation --- ESPFirewall/lib/Firewall/docs/bib/online.bib | 10 +- .../lib/Firewall/docs/firewall/firewall.tex | 108 ++++++++++++++---- .../Firewall/docs/firststeps/firststeps.tex | 18 ++- ESPFirewall/lib/Firewall/docs/images/pio.png | Bin 0 -> 48902 bytes ESPFirewall/lib/Firewall/docs/main.tex | 6 +- .../lib/Firewall/docs/storage/storage.tex | 2 +- 6 files changed, 110 insertions(+), 34 deletions(-) create mode 100644 ESPFirewall/lib/Firewall/docs/images/pio.png diff --git a/ESPFirewall/lib/Firewall/docs/bib/online.bib b/ESPFirewall/lib/Firewall/docs/bib/online.bib index ac0e8f2..b388646 100644 --- a/ESPFirewall/lib/Firewall/docs/bib/online.bib +++ b/ESPFirewall/lib/Firewall/docs/bib/online.bib @@ -46,10 +46,10 @@ url = {https://www.nongnu.org/lwip/2_1_x/index.html} } -@online{lwip-hook, - author = {LwIP}, - title = {LWIP_HOOK_IP4_INPUT}, - urldate = {2022-07-25}, +@online{arduino-esp-idf, + author = {Espressif}, + title = {Arduino as an ESP-IDF component}, + urldate = {2022-07-27}, year = {2022}, - url = {https://www.nongnu.org/lwip/2_1_x/group__lwip__opts__hooks.html#ga9124237c28e2f18f3b28d5be09e9ccb6} + url = {https://espressif-docs.readthedocs-hosted.com/projects/arduino-esp32/en/latest/esp-idf_component.html} } diff --git a/ESPFirewall/lib/Firewall/docs/firewall/firewall.tex b/ESPFirewall/lib/Firewall/docs/firewall/firewall.tex index 0b3df8a..31d0057 100644 --- a/ESPFirewall/lib/Firewall/docs/firewall/firewall.tex +++ b/ESPFirewall/lib/Firewall/docs/firewall/firewall.tex @@ -28,15 +28,14 @@ After analyzing existing solutions following firewall parameters were implemente \begin{lstlisting} typedef enum firewall_targets : uint8_t { - TARGET_REJECT = 0, TARGET_DROP = 1, TARGET_ACCEPT = 2, } firewall_target_t; typedef enum firewall_protocols : uint8_t { - PROTOCOL_TCP = 0, - PROTOCOL_UDP = 1, + PROTOCOL_TCP = 6, + PROTOCOL_UDP = 17, PROTOCOL_ALL = 255, } firewall_protocol_t; @@ -45,25 +44,25 @@ After analyzing existing solutions following firewall parameters were implemente { uint8_t key; char ip[IPV4ADDRESS_LENGTH]; - uint32_t port_from; - uint32_t port_to; + uint16_t port_from; + uint16_t port_to; firewall_protocol_t protocol; firewall_target_t target; struct firewall_rules *next; } firewall_rule_t; \end{lstlisting} -A port can be a maximum of 65565, therefore cannot be of type \verb|uint16_t| but \verb|uint32_t|. Target as well as protocol are enums for the available options. To block a range of ports, there is a \verb|port_from| and \verb|port_to|. The firewall will store all the rules as linked list to dynamically add and remove rules. +A port can be a maximum of 65535, and was chosen because LwIP (Section \ref{lwip}) uses it for the ports in the respective header. Target as well as protocol are enums for the available options. LwIP uses the same specified values for their protocols (Section \ref{lwip_analysis}). To block a range of ports, there is a \verb|port_from| and \verb|port_to|. The firewall will store all the rules as linked list to dynamically add and remove rules. -\newpage - -\subsection{IwIP} +\subsection{IwIP} \label{lwip} lwIP is a small independent implementation of the TCP/IP protocol suite and is used in the esp-core for network communication. This is the place the firewall need to check for the incoming traffic in order to drop, reject or pass packets based on the rules. \cite[cf.][]{lwip} -\subsubsection{Analysing} +\newpage + +\subsubsection{Analysing} \label{lwip_analysis} First step is to analyze the code to find out where the packets are getting handled. Looking in @@ -78,8 +77,8 @@ to consume all incoming packages. Simply placing a logger can quickly show that \begin{verbatim} if (ip4_addr4_16_val(iphdr->src) == 211) { - ESP_LOGI("PROTO", "%3" U16_F, (u16_t)IPH_PROTO(iphdr)); - ESP_LOGI("IP", "% " U16_F "% " U16_F "% " U16_F "% " U16_F, + ESP_LOGI("HOOK", "%3" U16_F, "% " U16_F "% " U16_F "% " U16_F "% " U16_F, + (u16_t)IPH_PROTO(iphdr) ip4_addr1_16_val(iphdr->src), ip4_addr2_16_val(iphdr->src), ip4_addr3_16_val(iphdr->src), @@ -90,11 +89,10 @@ if (ip4_addr4_16_val(iphdr->src) == 211) Following output can be seen when sending a ping from the machine with IP-Address \verb|10.93.0.211| to the esp. ICMP is therefore marked with protocol 1. \begin{verbatim} - I (x) PROTO: 1 - I (x) IP: 10 93 0 211 + I (x) HOOK: 1 10 93 0 211 \end{verbatim} -Sending a UDP or TCP package to the ESP (IP-Address: \verb|10.93.0.246|) can be done by executing the python code in the repository. +Sending a UDP or TCP package to the ESP (IP-Address: \verb|10.93.0.246|) can be done by executing the python code in the repository, or simply executing an nmap\footnote{\href{https://nmap.org/}{https://nmap.org/}} scan with UDP and TCP. \begin{verbatim} python3 tester.py -i 10.93.0.246 -p 80 -t TCP @@ -104,23 +102,87 @@ Sending a UDP or TCP package to the ESP (IP-Address: \verb|10.93.0.246|) can be Following output can be registered. \begin{verbatim} - I (x) PROTO: 6 - I (x) IP: 10 93 0 211 - I (x) PROTO: 17 - I (x) IP: 10 93 0 211 + I (x) HOOK: 6 10 93 0 211 + I (x) HOOK: 17 10 93 0 211 \end{verbatim} -Looking at the printed protocols this means 6 == "TCP" and 17 == "UDP". +Looking at the printed protocols this means evidentially: +$$ 1 \equiv "ICMP" $$ +$$ 6 \equiv "TCP" $$ +$$ 17 \equiv "UDP" $$ -\subsubsection{Using Hook} +\subsubsection{Arduino as an ESP-IDF component} -After learning the protocols that need to be filtered and looked out for, a hook needs to be registered in order to filter the packets based on our rules. +LwIP needs to be recompiled to register hooks (Section \ref{sec:hooks}). Therefore the following steps are performed to compile our code with Arduino as an ESP-IDF component on an ESP32. -To register a hook \verb|LWIP_HOOK_IP4_INPUT| needs to be set as \verb|build_flag| in the \verb|platformio.ini| file to overwrite it in LwIP. This is an easy way of testing if it works as expected, but should be written in a function for any other use-case. +After initializing an empty ESP-IDF project with PlatformIO the \verb|platformio.ini| file would look like this: + +\begin{verbatim} +[platformio] +default_envs = esp32 + +[env:esp32] +platform = espressif32 +board = az-delivery-devkit-v4 +framework = espidf +monitor_speed = 115200 +\end{verbatim} + +Following commands need to be executed inside a fresh ESP-IDF project folder, in order to add Arduino into the setup: + +\lstset{style=shell} +\begin{lstlisting} +mkdir -p components && \ +cd components && \ +git clone https://github.com/espressif/arduino-esp32.git arduino && \ +cd arduino && \ +git submodule update --init --recursive && \ +cd ../.. +\end{lstlisting} + +After successful cloning of the git repository, some changes need to be written into the ESP-IDF config file with the help of \verb|menuconfig|: + +\begin{verbatim} + platformio run --target menuconfig --environment esp32 +\end{verbatim} + +Navigating to the section Arduino Configuration, usage of setup() and loop() functions can be turned on with the option ``Autostart Arduino setup and loop on boot''. + +After these steps Arduino code can be written and executed like expected, but with the advantages of compiling the whole esp32-core with the specified settings and hooks. + +\cite[][]{arduino-esp-idf} + +\newpage + +\subsubsection{Using a Hook} \label{sec:hooks} + +After learning the protocols, a hook needs to be registered in order to filter the packets based on our rules. To register the hook that suits our project, \verb|LWIP_HOOK_IP4_INPUT| needs to be set as \verb|build_flag| in the \verb|platformio.ini| file to overwrite it in LwIP. This is an easy way of testing if it works as expected, but should be written in a function for any other use-case. \begin{verbatim} build_flags = '-DLWIP_HOOK_IP4_INPUT(pbuf, input_netif)=({ESP_LOGI("HOOK","TEST");0;})' \end{verbatim} +\cite[cf.][]{lwip} + +After the successful test of the logging hook, an implementation of a function is needed in order to integrate it with the firewall API written to change and create rules. + +In order to register a function LwIP needs to know where the prototypes are declared. Therefore, in the \verb|platformio.ini| file, the \verb|build_flags| need to be adjusted. + +\begin{verbatim} +build_flags = + '-Iinclude' + '-DESP_IDF_LWIP_HOOK_FILENAME="lwip_hooks.h"' +\end{verbatim} + +The file \verb|lwip_hooks.h| has the necessary information for LwIP to know how the function will be called. + +\lstset{style=c++} +\begin{lstlisting} +int lwip_hook_ip4_input(struct pbuf *pbuf, struct netif *input_netif); +#define LWIP_HOOK_IP4_INPUT lwip_hook_ip4_input +\end{lstlisting} + +After specifying the prototype the function can be placed in the main.cpp file to be compiled and run. + \subsection{Benchmark} diff --git a/ESPFirewall/lib/Firewall/docs/firststeps/firststeps.tex b/ESPFirewall/lib/Firewall/docs/firststeps/firststeps.tex index 59c91ac..a123880 100644 --- a/ESPFirewall/lib/Firewall/docs/firststeps/firststeps.tex +++ b/ESPFirewall/lib/Firewall/docs/firststeps/firststeps.tex @@ -12,9 +12,11 @@ A dependency of PlatformIO is Python\footnote{\href{https://www.python.org/}{htt PlatformIO can now simply installed by downloading a script called ``get-platformio.py'' and executing it. On Apple MacOS\footnote{\href{https://en.wikipedia.org/wiki/MacOS}{https://en.wikipedia.org/wiki/MacOS}} it can simply be installed with the help of Homebrew Packages Manager\footnote{\href{https://brew.sh/}{https://brew.sh/}}. -\subsubsection{Configuration} +It is integrated into Visual Studio Code (Section \ref{sec:vsc}) and can be used with the official Plugin\footnote{\href{https://marketplace.visualstudio.com/items?itemName=platformio.platformio-ide}{https://marketplace.visualstudio.com/items?itemName=platformio.platformio-ide}} (Abbildung \ref{fig:PlatformIO in VSC}). -The configuration can be initialized with PIO Home or directly written into a \verb|plaftormio.ini| file. Following configuration will be used for simultaneous \verb|esp8266| and \verb|ESP32| usage: +\subsubsection{Example configuration} + +The configuration can be initialized with PIO Home or directly written into a \verb|plaftormio.ini| file. Following configuration can be used for simultaneous \verb|esp8266| and \verb|ESP32| usage: \lstset{style=platform-io} \begin{lstlisting} @@ -23,7 +25,7 @@ The configuration can be initialized with PIO Home or directly written into a \v [env:esp32] platform = espressif32 - board = esp32dev + board = az-delivery-devkit-v4 framework = arduino monitor_speed = 115200 @@ -34,7 +36,7 @@ The configuration can be initialized with PIO Home or directly written into a \v monitor_speed = 115200 \end{lstlisting} -\subsection{IDE} +\subsection{IDE} \label{sec:vsc} Developing and writing code for this project will be done in Visual Studio Code\footnote{\href{https://code.visualstudio.com/}{https://code.visualstudio.com/}}. @@ -42,6 +44,14 @@ Developing and writing code for this project will be done in Visual Studio Code\ \cite[][]{vscode-about} +\begin{figure}[H] + \begin{center} + \includegraphics[width=0.3\textwidth]{pio} + \caption{PlatformIO in VSC} + \label{fig:PlatformIO in VSC} + \end{center} +\end{figure} + \subsection{Documentation} Documentation is written in \LaTeX and will be added to the library as source-code only. diff --git a/ESPFirewall/lib/Firewall/docs/images/pio.png b/ESPFirewall/lib/Firewall/docs/images/pio.png new file mode 100644 index 0000000000000000000000000000000000000000..48f5aa5337ca9ed9488919cf62bd154dc96737aa GIT binary patch literal 48902 zcmc$`bySqm+BXctAVUw0fG~h`mxQF03eqA-gOqf4r=&qjw@NqCAzdQf-5t{LZq7N+ zdCvR1>-*OG{q?yPYewddx%a*A>-yE^gOY+QHU=365)u;ji|0}*;Pn;>2?Yc80KCib zx@ZG0$POy9&yb1+C^o@=42?Bjn7n$0#0=iUkdQ;nk)ZdRfFCmOgMa%Ke#@|S4G^wYmevkJt|B!5*g^=rzyCD{4dNf0 zI9iC%XuMKFNZQyNBc8BxvUAdiVjvI*Vf%L`LMl=+|Joh=PlU$I(a~0jgTuweh24dR z-NxROgG*3Qkb{$(gPWTTY{BN>X6RtP%IeH88Ys zaulJVxj)gr|NZlO8oQeR_nE96{&iX40y*wK;oxHD ze)`OLUa)E2gU8{@n`eEj??$1ZK(qWtmd4)~0q2AXyB#IyVkAtxltx9CXciYIocDdE z0QGB@5GNF~-K!i?gLA^+?fmH<2_z7<;2mzV2OA#|6bmYKh|Rbn1&2|9cPQ(+a<5R4 zQIM5AQ7{DYpb#`<?spuUmicN=Z1&AmHExE_-OV`6NYs3;{vi>QN}yxHSfQ43 zqvu7R#QF6?OF)HTdzh_T%ktU0PoAjPGeP;@IJR%%eh|;7Cdm+-Vbe6Pj`3R7DS}l& z+XV!hMu~4q?yIDiB<$MhTt*#R2v5tY3Ung2w=tqO6>PEWH)2233(5X&jV9gr`}=>> zsjE8K$}c|po91)-LN!-DLoS{@L{5?&imXSwVAmc^#9|3YZkM*XI-Snh2*4FhCt&c- zOyakhEaY%sy}mehNT{B34?o?Rl;kn#TiG7h^@x;-rj&m4)H$>1?lx&w*XPDbbW6sc zBlT{y=!QLy&;5k-ay4F$5u9rzN6z%e>wMxu&2pJYB;A-}ut(OjAPkk`wf@cX!{r}- z0#bviB3b*$@?k@}l*Rd>b)-0}L8I}EKm1N|Y zRI)kay#|s8VRlqv-trD>eFprz%wWQaQ7^o1mz5r3$r`WszNu|iZ$;om(TsqvJD9u`2q7reB8IB-eh+2#)>B=)3s%ErX`t|;u z{hx#BS|{>ojS9(}mqh5+V~^$HScS7?X){sR-xO(6pMQWs#^4)6Sx^7&OwuO5*`I5G ziIpSd&CICERkH^~L`TMR9tyj{aa}UbUC+5ZWl;3x(jz9zjB|{8g_v^{^EG9?n}lmVDO5<7`>nVj1&V0gC(velSIF0dD-E zWOVB7>FzX6FBCOkq(Jjavr%xJKX2`*5t)#1V~pgZau`e{gBF z()B5Z{uS9*5s#=v@4H*CTBmJdFva2;&kcVrT8j>CCeEH*e5R8dsXKu#t|^*DaK`#- zbj((m6TB{b8zg#tfT9~azNs&L2cE*1$1m_N|BmaqJrckAt`?!nilvY&@ZsRH)b+4r z2vY{W+^L8dk(PoVFhC949kbf4Uy=ty~Ko*CFdwXE=)`}!4ABmx0Tzyl>Si+bH(+!uieqeAe% z{lWDA`!7QeuMYcTV~?Aqn&q7_ydNmym-%j>ij}(x;W|tS@Q-)?Q6%VjTdSoTzNAG% zGtPzMXWqk%AA`D*m+rnjRhg7=jgWlxm6vI_wodi%6Rj-gRhb~W07agB;*W1riU}!^ z4im;DCP^(Y{dH)tp*~?poafoBONHkJhSpqgogRy57fVa%w)vrY?LZs>F5>)p_Pf@* zB_XZG1Y&l98X|)9*3T-SSpEzdYY>eg-031>jxinRM8l=5QS(wNqV;l6Ok&e|QuQPI z)pt#L7-Y(NwpL5%sS|cib>AR`-QLXL#&+?WV3z1fy)+N)!v$!R?Nx#LD zesyQ&C#Gg@qA*+)*~g)ikgKhDo%aGI*)PBI~=2nvy1g!LXp$A zZElw*=IYpnt?rAN+YTh@oc!MJ|S4c@gm?U-r3r{@H zIXf_nTP1l6TA`!jzj9gvLKu&Y_^mqlxIYr)!xjY1=NljSL1wRas5v+0CG2$a6s%07 z9~iuUx7wG;W2rUtR>-Voy)V(KpXKFj0kbG;L+ehgNGVZ=@EuYM9pw?|?~HAqMa;WC zW)$$&;PG3}sI?WxGr1kD^jUhW_831gLe+BM6hv*W_q^b4IP4&|{9v-sj4Uiw&Pwpd ze^vT9yp9Xp{S2=JGYe1b)j2&aLU{Vlv2_QPaEb&t)oe zKON$WTT(5EE5;PlZu428bTp(x;zlPMLq?RNyK_)0%np;ubA4` zU>AZzEibE6pkb$e?T?CC^5<+{%$LfwuZjNE*XQQLxyGo~JAVs_Y)8HgC09-2s#{S5 zyzrCz>jgH;F1SULflmmFysl1n#4N_-t;L@`dsaiSV|F>56|y&5$2BhcXS%|?9PinB zKrpS_(K}05f-IcppzmIU*4~^>+iX!6^ySv6WIu1&yDYYvR(u^0AMD{nx)3-K9{wpD z38yedCa^%f%HLRL zuj93cn6HB|x1VH{xb_Oo~}5jy&Unb7y;&}?$>GFmmf&{S|glHmN-cl(?11Zk?|%(pO=%2 z!yYrJ<8{TdFtiN#)B4Q@s(shyS@8G3=GiN$3N(EWn+?HDqr8yQFIgPpkC%$AA=2Lq`hy$SpKQz;ANw4^PlIuj19|5NB)B;B!r!fnN#jKep^IY>g{Vlu@zvBlMPU% z47Uc#M5EW!8_-S)W?uhLQw|eLlzk-h(TxIcz)!S0F0u3%cv7%;& zcZ?#eZDv;|Q5a~bz76LW$LqrYvbUk$0W@0U6u1mfa-V}SX~C}!_ZH_QwW*wpW7YA;~YYykmyHjKi-log;QWuyZ z&HYK$t+Qvgskz}`e&?_MHT@F4tXhxPOo)8;Q?IG8WWAJNwt)-%+K@~~&-ZV;) zbfa><+A4LNd$UbvzsO-w8x5{uLFi5w`Qiip~Wf?OV;CxsV+KXiI zSEeI-&nO~;$@gAu{pxPc!>N#dx#$lqm)5Z-qZk>q>noo{GTH3J&Y>XDU$j*!QBNp8 zQUZy`OIwtZTCbHZJW9$emw<)WW9{K2ZhqL9Y)VQ6*+v;~$d$W>bV$FOZM)JP&ZGwu?c3AURGBrbKh77SZO$`l1+Vm>0Yl-Gt1Eqp zU)l`02uT5t3MPAE*%jHGD&nyL%J1Tz)^>n}e_ET#AN=T!t--^`v_)eb%kV>ssv;}~ zx43{44Tr)Oy%6x6{A#738V8B>3cKaAYjq37dWc!L#sNzRzGCJWEuDOWq^zCYiB$|9X)6)3SL7WWf?xMUvS@<7=jhA zCimmg%10;!q!w>22k?3pg%|T2wh-&SNLt;SogaCo&r$wm_V{h(Tn4yVQ&<7juz}N) z=Te08^f61+uwUBH^mCl`bFS)36&}ES0i?s7@!;UY)xRga=WBAKC?xkRx8Y3X7)b^} z{P(VVDbf)si~2PQ6oTaU_{**A^{Vbz&R7#S1`<|wn7_C7QDO`{x=wcoy>-t}Cfv;w|VU*0b(;7cfWdW4t83X6`_H@k2k&>+@pn#XP}e@J;7r z5Pw8OF+yi0lvstkia1XaSk_-vsqB18E!OZYp(_J)ZluzIZnultdc=2;?sD_Ile61mIOJPQIs3alro0OQN4)s?}ooDsuq*Grjj1$ z_D@xf{GM#)7dJjJ`%=A3rF?yCyRNfOUU+tK_ts#rp7=Wp)}UeQVhpLqUsJ)|KMawH{iHS-a~ zfXqoDuDRVGJ3x#_7TaVQA3u)xF%`QaUWKd@Kq*o?3@Fg~x1U>r{t!MdPHlg~nSW=JF39G|xFH%rUHYIb_R7ouMmA}7s zKmIZCvh)dZj}=TqquJZz{J=mO)j5F#N#YB(1g+mEtXvv_&Q|@lV5&nkWLgwbbKjNj zFY(a>w=EhlV)9aY$e#ytanz>6pKSeopTb-%zeV>+7(ne`D3ShTjtI|j8s^=vkB>Z6(NE<^E1)<8wt>#BEF0xd6ae7PWkWUiL zMq#))ovo7zTt9m+4{C$befNaq>gSo0xW%*ER!cNUPVX?JBzat`1_+|5N zpRExl8Q$zz0XzIHla7L(iptv9Vn$S^{R4k01u9a8qbn=9Oe zRgw#8EHX(g2)U2>aAOPaRGvagoXb^}FTP7OEqqf@RP;TQMhTonWG=dnMdM+o?cL!r zgXQe$;j--e1ijdKVhuS}+|I%a&02{ekJFuugjY$&o|J?=3qL{(pB=~`hg;6pI=%i& z+K(aPbs1sXEsWa}=fE{@Gn~t(1^MGN7EEA(P85v&k;+^DxRMS)Q$r5Yd8FCuPz3xn z?7-X8XEJWvs!ByR-S8G?Tet*i<@xW0j722=Ccc&ph~mLknoriNyX$dTn=y=L0T!&I8Fjzx8yQA3aH z7>C#8iP{e}rk5WV_=H>!-~?_7!+mLDR98kLN6XP-e>R6r`{wM~Vdq%LP0F4YFjs%$ z@wc_9wrvWn0AX_m3=HQfeh1Rm%L`m?D&#*lf3msu*?$!^3D_-hc6S2NYSei-GPO(h z4;)GpDae~;)X21AS zc&R1i9&Sw1b_gImUM~JZ^>l*=Klz>bEooS_#kd0YD8a$0=D8n~01C?UK)OzyGuNjF z6YeFiU4DgrD%c6dR9{Sa>arMvO5qOrzfn8dPx??k-begZ`?|G`AIgk-a|3#n;Rj3* zYnIy>Ce?2i<3-x8a;s>5GL4>YiAM92Q|56x8jZ+lk3w0;3$^k#N(+v6sdaj*k>cDW z3;<>RrKS(Gl#HFpa-PXfa25B0YG10u{+yTbZ$p7tR!x8L{7S3oC$VRAYYU+1R%^Q9 z<=QQGgxPx_zPKUMR(s#rq9_->IPr9D&rI>ksnr^J-ODX1vZhdWWK*)U*7Yf% z7gYD+^;Ozbo9zeafr+478ZVRS_aJZYeN)bgELnSf4#ud=BZ^{jbE!StGsuz8g!a?l@DL zh88zVD;srSOD+|E4+$+er`{5n3Y>B3_*R%7Go7t%43YDib@gDlXpEWdd}dHoKzVSI$7}wlgq-+T^vaSw&8Vvwbr=h7j{{io z`uUVjl)rB=UTDQq7DUNgBR~QLiOyEGkF}2T?IL=d4r!OTqNsi|l7G9F?Pb3@eUZ2| zx^)B48+$@6Pv>fdc>FjpZma!Gq@nli&w$8Zcu?U;@$BHsR8}kv=fl0LX`6BGUh7XZL9zWmw<`2o zAo-I5!^>F`WP$<^2MUL|#e+iJuFwnPnzdW0Vfc$`wGS_fR?+waW? zzMpSQ;Sy>7(P*+3Bv{C4mH`qgih9=hp{<$(QVF8)lpZ=&goBxHcH~ zGe%bYi`C_;Xx!$KOl#fO+f%}Ig?5X!{ms~-n*JtSHFU>upsNAv1qgR)s*=Y+^jTZdj@flLmTKQx=X8@i`wUpSYh2{_nP48UOba(uwkdS zCf6oK-tKhuG}bl?uI07)cv0bH<+>MIBXh_K`3+v^lQ0|X_ll(lQRMt_XJbZCKOLX+ znbt%Hs zc{h?uEVVhz=#_Zw;&UK!WIIDC`C}*-tF32W{#OgM+-PZGBce8avDVdT-2fCx zuH_<=71U3%eh}0VHR>l{-ut)8?N5~xRRh&3>{mIS!OCZrH|!=*NH52?J`7^kuD~?J z17shhZ?)1;WJT%)zVSiyYQs^pth}l{bl>3Asf@~&p}^! zqDgb*6Z;y3gn{v(#dT0&$|48`z_8Y)2FRN6LQY%Rj6chUDlNtrr9iFYB8GBtGiuks zSVUQOCc=90M)l?!Z(xo_A3*~d0?yY@iRYgma~a0UoeZ2(;oRnJbQ`(qY*F;ULGzpdpFkqU{L73)ldqMPk^UVk_&skJuKF1>M%G! zqYFmH4Q;5Q5Wg|c>Ey%m_3gzyJYZHCm!xu{0Pq=r!Thjje*;QU^-s3WTO*$)U0PbV z*{Snbh`cs)G;jjipv3B(^KN4F!wH+|?3V zAwm3omN~DI;wD`^{%&=%+$0Q3;!ufZ_URd~K7d?%Y8>j-yMB@=wkozP>S%XIhFXx7 zG#(E;t=ysG@b>rBg1I(yy5y@VlcI}w?o1RbfhOuo_ee8KqFML~P>-e0eP8*)_4)E7 z0v?2=HBny`YaV0kGK(P?tQAv#a333r`@Ryz5Z-GPB}BcT++b1bCKbK8r>)&LFy4v zpBmw@KJdt+`$HN6&IF}U45W>%mm-FOS||mo4b^^F%nSGdH^7Lx4>UfLK(Fxt?DMH- zQK6S;?ggdEIvQhqX#G7#j7N@J zLH!>G=8`!~dSdm=YN{f4s&f7{mcahEn-jN$N1YF^OO|nXbr6$*z?uva?>2t5)DbBM zz}|9-!`OBED|jdl?A+5u_w(Zy3Aq>}LvY)bfc`b$^tzxoF~9y{>uUKPdH>Oq_Upq= z$*q~6<&wGDJD)MHf_A^5B(XhN)*!GOvTps?hRaK(Udp(Cf^ z{FQi)o)a<@4z!5_+;!W4w7N`kC?_YflKxWP^zA9&**oD&8%$prD8+x3MXvmSi+7E-pYDJb`IO zD6Rh5q|j@-u-cX53OK=n^o(V?ZmZHxT#uSd9?8N6xO}Q(0OwWO8u@PC{W&L0W(SY& z{YV#gs5T~K2*;1)D||PMvb6at9aEYm39L70emwOUytzXERZv{P3Guru%9~7)dcUz^u{F zB(F3A9dGe>>Xf`c>b@6rJIWS~%|gJf@D9wQqenehS0X7zm}i!NgmC6&EXMuKziMl1 z)FK8b?Fws?dk+I% zU(CHWsbyzIA&*Wp7*}_-BY|dOLPTGC`a)OJ#C-f@5B$Gdh*X69@#ptBSfEZm&6Eyj z^0|eK)Vnz}KJc(QTIsg@Y_ilK`fj1wug`V5Q0q;jsQbycmkdq)t`yI2p~zygh^dkt zcZ|+)J)e{}S9h1&9PyujO`*tpx5xmG9j=2H>dab~3L$gwart%KGxQHp1DK4SwLkV1 z#h+_J{lr1L7yGzZHS!wn8U>ynVGMt9BpTos`ts}iUW*>yOl$Nzp4 zl>hfl#3Piifuhe98Mn&Drd3ri98m+tU)|$EM6r;ruRhL2y2vZichF_sKu@@8RVL1u z1mkMfh1_hhHE5C3YNn=?=8u4+*xj{*fQtpm#F&L?d{HH%!cTObVpYx;>5Nj~zU;q< zn`QhZUxp9O6uBQzp5CIln=1R&mnJKIX?drc+jRhole|ni#a`=|OA~zrXmE`4-i$OL zLL(BbkF+W=a`EY2a-uWzgdF)YLO(xsVaGs6H<;qwxe;?%!@_>Z9Rr?I8T~cX7Yyf@ zwhdO(r?#6tL5KwlsHae8b!SjaMTvd$x^jlTwT8t|c0BEfrc#{uu8SMT0}oEWw~~8*-&318;WhX> z+zap!K#|i<&l{VO8hD5gZD*=&sEqr+#`eT8NzQv7Th%Pp-#9bX0;8-yktbw!=sD}# zijU+NB^MR%N59TWOncp2Vn3MJTVG*gjtN zK!H-geR2*5Q3s{HS%6YZH0C96ql4;!;2TUt8G*&i!@;^|h*#pYtuCYqz=5})ucC)1 zVu2}c_Qe-^Revb@Jg>deBgfP7+$1Dfu-?Pn!_ z@re7PATz7*Jp!>n0UrH<#m5;?KhhvyM(>E)6qSb(&4Qp6r?kCzh7RGv00K0r)6*Po ze_sbsFP?^c3B-pQ5<)=FZ7I{revX&Vk2Y=A5*481@hKM2duIHog)Vy9LsaB6nuTMI zGvW5K=^8uQIjiw+%FDJ=oaf-FSia*g%mY$G^6B6GSo9i&ABo)(D56wMgA|#@rr4e5LqA(u zgI1}&OO!hxRN|36uwD22g<>aB|3L-<*(!pf<8!8*0!BJv)gDH~Yc=H<#qYQQZ|@)o z0WRmI1*Mhm3_<3wLM(GE&Ea)~dXaYf-Vp;#itiu8_2x8Q&)eY7zys_phd-zog!|CbjG>i1wY39pWI+f`{n~51^=EI;y{!1p zGL-PX!Yoeb{3k7l=BS0m1$^KV13{Tuk27}MHmA1$_OEu@YW0FR*TqOZu`R%i&M2jw z^FDWl?uV{IHT_2S*^E!(wCNz)hS@i2N`FxgB4DR+S%?LKdw8Wk+2FD-sx@H#CmVf{ z-~EKqIUwyRV1oR@X~F&V2tMJEQp|E+A6yG$35kc;rXL-j&FCb`N;xH`OcT4Lq-7MU7G`e0n0!Gx0)_ulCPihRdT|T$AEON(GA9>cN-<4H=a!^4%ChM3 zM)CV$X#7^P!UTgsq%zNs2w@Q9P*4hx<{ZD5foKuOAP8~#f=3^1;Z-~{Ca4!jSpS!s z0I1+uvSZSBZkS)#7(emIbk4MRw(wC)%<#9N&arx$)nE~10LC3^DfUcEIH*b<_?eSx z#TKGZe0)Fd9bZkPb?nmqDj`%yqL<&mtLPjtV>!iZNhNx^v`k@Lgh5y(pU91uX`m-c zX=eJ^r~|8SU|C+{O>6!2QLjAunnHtcEbi9nVhEKA5cUe_Cjq|t0ZMs$)b1p95)cAc zWd`5pE^Y8Yg+1bR3W6Clopt(z^aFrcA9he@x18%IF_dY;6r54h;q*?iPyQE}wpjp( ziIlx~>4{6bpbD6LZxO9!$(^Xx6#t0&WL_9H|0AA_y_uikCIiXle9Ty;F(9oN3#r>( z8`Nu-qJ|~^6Npe-Hh~-Llh|Vc5;J|bD7CwwzroEK#ji`Prk(RQEjrnCgj4}QPt3&B zas#@S3{a3C_xD(YAC8ZDexwq>1fJ{j<&Mbl$zhNEhQYnBFJP3L!+CF5TTdtbtzzYP z@B+%PoWyIxNjNei$(!YQ%OXwARx;LinEG(CT@PtBUVONDEUOmY4!4HU0odAk(%V{8X-ht{e8i z1E((QlSYLZH9uiEF`K$c#oKZZ5DwnF{7bHuKlU`4*q#66ME{^2*B?(N>50MOWXnml z`LIbVa8(|^Fch+1f$#InlSH4rE{qwVVsj^sq8RnkI8#?Emcv>lCcTxrMa@3r0$om2?-8bcyL)|tv zhdB~l@zCseOt6+XTUuJw0FHBYjauX(5N(Q8YN*9TSqZW)9{f5(zR9!zaWCoFF#)&{YlT$XWjO_uo6awkW6 zE5^o97rgrk@`bfdsRu-Xc_`j;rUlKnhc}V#nS8YnpqGnF-kWc-Io~GuZ3iw_MX&5L zbs-Rgn3t2768jv0!ZQLABJT&T@eD$7hO{ph_Qnl0*>|I8$M87c?2i|V<&}G0*q2xL zJG?pOVz@U=g?&1b;3tju5vR%Ne9M+rDGHqTX*&OGG43uUJ4+$Qc(gJ#ePtdy6I_s2 zryyiunqQ+KM#^KtJIDc=-Fu{nHx?Ng8NzQmX-L+-Xgn_`WM!llsmG8i27sIKY)`A& znn%|yBP8U{1GH*h^>!}q8i#fE@^eFtaA|SU-3mHJTxdkI27~K*%G)acUumbXUzORkVY0U3_Dk{;@_e|L?3Ns zk)|3>rtq4Vaa+ZHWLEpu%+mdw+~E!DlAoL&=KqE~{{Yvbvf3W=X}dO`bQt0F9{GOt zr?J+caMy$gxS3grSqN3|U^JzHD;cpHV2qa1B>NrIveA?|_c?Iy9sSEBF`ve-`=^Ts zq+4wd^gdp8Jy@@0&0X;P@z4j{bKKQW>?>FMO?e>c3h(m?>JHBkmEqVcLEX0B6#lpu zEq42j^IAMI;;SmqEk>T+JjD4U)1Vi#>bAJDU~u1H*wypPfo9(zj0W2(L%LNNMtjv#EL>2Ro9SZZ7Aa0-3sFF zy-xY*Oh;w8@{-(Ot*9y`;|zWN@HSa=M2p#p@i1?ra&C?0X;n+Nh+ zQ2fZw=(KNMYaScthiMU4sE{b22eUkjY!6OKhC%#7eFurC$n~2WLaZv_mJi!Sy>_M? zq)P-%fjKR2mT}e*Ft+tOqm9@7#7qH0zWn`QBtW?b_ZUK?yKK7LR8igCa&UAENHlIiEWbJ~Bqx zd+)6KOCD$b0O$(>6uGcH?s=K6=M+Gr_y=KU66V#+Wf@V@-$F*&0TYZce?V|lpwHMa z68M8$+ib2Ujn_wVwYG~8o_T-AHhEw4V9k<~s7FuZy6KudS%7{<0;u=M8DVdcNh#{< zQy~AOv{HH=eMBdq55&YZ>}$GpUm*tcIB?||{J`iQ3~DqCCi29;b)w2yTQG2(S||ab zbmH(3rCO_aGA8lX|3fRo1$NEXA+9A1+NPeWfWtgm``1=Lvc_Bk+7Wfa>v@AA10Nb1ceEX<<4#aaop!-OIY5IGw zX50aeA`v0o({GUS5FM)QnUh6t%E0EqJj^VdSwRIt7t&1e{q8MQN!QPC20!+<> zowj6#s;kre`RJ79=e%B*yhbkR{|N4+N;R+79YcbQt6%5qLzKJzZu6S~#h^o^?<2K{ zao0z`;xF{CdIB@_u{s8x0kcO7c3#mr&RPf7?WCu93$=(P2XK*i7lkGo-}mOg`Diig z3_#_%GjdtX-Gp{nitC?gmc3hi*Rsw4#*^&+Zuqs9X;r=_TH6kw#+Bz2zc#RtO)sW` zb&GMrfqqEE$XZ9lqMi+y%J0j++ioyD&^MZ0YqR6L!$CWqSN(R*)62fLtA9CJ@5V#m zl`QJ@HH?^T?fVZop?lpP%oHjZYhA5Nv2KIV>+dQ-B>T;qAwxJ@9N_#A&xNeNxD5MLo({TEpxzR-tYLI^bWNc*A6^kyY3WpyCPu8=Psu9#qa z2I|(j#W9tJGgxla##-lbwnul;huGQyF54j`FpKiSZlC61sPzhmvqm_9t+C zsRF(4ms|`Z-l7LeeHFn!Qdo*aR76qTtaU(-U2Crg8QP$_>U{M=69S#p-gr}&gInMc zDSz-S*}>?wRui@P93PDbkDFcR7uRt1x_=R7Tf#p}#V1`{0`*Z^v6CISq|LaXf@7|41zFn?!?zNdt1A5&3QW}3>3z!snI~Cvi z#|Acanm|3K`pRwmqhH7RoLR9kfS;Bgtau=W=)SoQL?=)wH+f~g)~9*0(oIlp7xD)U zt(s;hVfZu1@NZ3&qBH=>YKm#*5G;48pJq?aYL^DaAEWp6c^LFq$mW}%^Ns+Z`Q0#7 zlQ~eM3Czm1iLyb7#dTkf+>8j2Pq$6l8~clDzO%$ z9^Bfkk00UfuchZ+`H* z`mI+Sfezy&zykXNE>$@faMpWY3fmCw@N4F$gPkM_4R*u>&LvXrci%9QLeRzGRkG20 z!mmRK7>dZ2@)kEhu~l(O6~AXK2ipP9gu#NG6JSA%F0kq!;qj6InO13=h=GXh4g0A6 zjL}!Snnz&m706Q$h9?1Tku~pqr4w6V>`atu9-z0jT8Dz2L1rrJ0AOkDMW~h)+J;(gR5*o8m`5CA|%1TP`(I0b;+}9S-T|-s;|?`*>!ty#difc0UgNouC8neyyp0Ont0ZL8R7X? z-;2B@`sm>TN<#AdoJYQy&p6|o>{l_;#JsPcGuf~%7q(5?#M7MozF+Wm7l4NQL%J>K z2N$EH{;FU4;`v&V%>~7U_OE*`_| z4K${2V6i0o+3A3K2gN|_oT!99R4rHDT>Tapz09jupFw=uSRraKARyqoSI z3LZ<`@w|A$?d7)P<;g=@9eEP)mLsP|BA9$mN~6c7Y1Wuw<->ei2yP_8V3m`7RSIs4 z;m4@z$>;^5X9?9@V8L`r#9Tk5I& z9ZTUP6f@k(tJ7c>Mc#n;RoBdgr@PF_^`bbxv= zAV{aH39$f$3+{1|8pgJ+;-#83D@S~!+D5!$)$}P z=dTbxeJ%5eFor#U@pu1pebn_`kbjwWo{EZ87$K6ewm;Bd$P&%`{wHGrbt^QeFLn1BcigsZ^}J+9|W3h z(8@l7g}QjoD25h=iMtOBP$Yz0_V8h&SQ|nzAC^!SH=4^ZnOQk^Wh+%>1=<#4vI++d$Vm76Q|qJ<2CeTE+cwVMRZr+R`Qtg}!zc=)o}}9#7i098%f}bQ^+!BQ&s1`jC)aJMiLWC_%f? zvt55x#C|0-?CxPmTN=+Q2wXGH{&bL4_NG!YXEzk}=H=F313?NAuPZCkERKnQ-(4DE z4Mz;m;T@1Uc_aMiV?2W!rG9>0>j53-oJ8q_4SYH~LQFGhjyPVTMY zIPw@V5Qq5^w`Ga0FTOpJJer(-1i7aOHD=)}v3A{}S@CuHjSR{I9Ek~%=1kgeZ3Y5T zznbtux!cd)#OYX6=K&8^*t64uhjbWfgwtnUsCgV&xv&#_(NwkZg<8_R$`Zv;nehm$ zqZ#3J7Z0rY$}i^M>3}Aut}BmO@d{$vYs_Z#h$M0lSmJ^(-&`uq|N2`1WI_>$k~w{1 zk5$ z8CC!7TcB>5(!4sU0BJ=fhogi2nmVWLo(8JmEsYgPPuLhQNT0skuUGv7p28LzEY1~$ zFZ7XZoyfE}jI?Xlq+h{&N%(n2@p9~H@eO-JO%=Bei zM-VG`8c>Zjhno;xwX-dapH#eNoE{*!DaYjb@;yk+Yb{BCB^5-}r!psKIxZF;r#!I| zQsmQj#}q3dLfGuu6l*g-%s-m<8JuXanfKOaAmt9ycl58uhNp-Q?8Z{%HtMe{a$xw| z*!IL6oML|p4!xsBu-3895cEx!E?Lp{NGakBPk|iAJF&i$yX)gY*!R{);X%NoLeJB{ zgS@p9ZzNr6>&oRTRcE(YEci*yKKC-crJUik2Uq@Mu&2g5T#35_f;b)iJrs9oj|UR^ zIK6S{Bn?h1nQp9Fi~W01M@}m?3cW`&lQpM3HpO#s7u}UUh=soyjXr9_9y!gjTpDa7 zc+gA&h;msCNeYr(WkG@q2wx11n&E>G4%0n=57OfXbUff5>)XbI@}33~1N*AybPf{D z{P$S@flD_)ss9g~!mZ|(jrN7SO5J(K&x$hNcE^#{8IL@;MBr~RI z{d}kO7GlR-04Bai8FZb?K0Y4gI9*6;J0Erf5e7$BL=`pBZpzPY*heUL=C60qtY- z2%L9^wf8d}=DZ&UQP1>i&-oep`-@?PC}*BCmWh?`sDtI*=+=I|*<>gG)bQ(u8-zcg`JeL1TQiUJVchkbl*FSw@w z9k>F^ZoddQ!l*g7^!L3T6QXQeRykhc!J6dvRtrEKA|agA&qls@%vc4yatj1dF!Dzm0AJ&n^6a3?*cz@BrQ2i0deO0f zRL<7NAzkJJX3^^Y0xVp9Z8WTM_*WIatVc&1WY3 zHJ?ktOQaAliNshP?hGgI7i{yaq<8*Gb$}~@af=AYI6^-;F@uj4>D=RK6Xy5WH12kc zj=*-GM1L7=j>1@#QGiYE{VQ0oxeeFwIwVKH9p^culh=^A zxH>_9eSNFP=X$ZsCP&CTe=vfxp4POph)h z+NFmH6UPM6QI1tc7$-zI_x!e}OzVf*iwDmf)|Md+reMRG>JBF$HDNt@%Q^gY6|9ac zumx0H{aw=JXqWyY58#Ujgv^)7pbU7{qbCSCg$e%Xci&j zCD6nD@}0%<9alPzq*Z;qX^RdqthKqOmnHFZq_|Ozo05BTjU@|vZ6zOTc#6BLdj}H0 z>f(on`#E3bU);uTsP`>(qp1;!jL^B*qVh(MC(zMd(%th2r}8)LzJYfi_D7v3zAvh| z+Q8{wR3yju&Is##C2Gy~*PCZmXd)V8QDjF~C-?WM9qgr4I|1Nc=`)&=*VjS)4INmC_r8-CkH(Zkhid_gw$(k{Q}2z{VMks`{g z@0RvlLysWl7&@p((V%Lija0hEYM?ay$r@X4WE#&i#*|F5ZbU~a;p%+?4^`$l^1*fgH5%t;pVMxqJF+qGUW*L9J{4onQuj zR9V{+NBCpST3ek0O{cN-u}y9JxTFdARz}Yy`hWkAq@lkh<1q2bMoTVzLOn*)(u>sI zJEA*|AxlYA=F3(&9wqM^8vJOKc2;cw6)a@VmgqXYdK(>oAT2_Wlq;RYs^NpO^PTha zIcmFO13rzgCir=k1a<>t2}z%(@>{H!OuNRJa@BRZZ;i_F&E;8SO4tYc9&J|L`J2+A zMZ^0Wfma|Z@#^=_hUvw)PaUyQyDj&x8(x!h8z`RrS<8j`-6aJX%*$6v#{QNju;3k2I;XJTbLiUbOA0 z3Wm>&KF-c6a(+(}R=z}ZJ$s`NOWSSm8leWpI$}^!R1ermSGI0rKPq^fp$v0at+5Z0 zbA7Odgb#17(qp7GlfEN6hWb(924d=q?5pcbPj?vJF>qW#lQ5269nSCr>cMITQcApL zmdEeaqw8;tKMT`St?-5M1htT@AcqLOpd!$8^x^@H@pY#GChN?lJlR$^+7`gKB1)U$ z1{UxkWyoM5q#kG9dtGNg^X(h9GOv}zM6nL-C&hSP618V9Wn@ubsPo>nf!?0q728Cu zt;|EbRO&|wW2Xrhv(rLz>6`X#5Z82-uOj$#0`8}TCh-`{AZNGcOl+yz7|o$$h2NJ> zxt@Mn+G&4`5%~#hh(!AlbP~d-Jc^J!rxY2EeFUNJScZQ}#3@ND-dLR^rT*FR$b_^n z1d(W2hOa-A_WGli`d96IFaQkV0n__j;weYB`wZuuuG0G6#v$}?9He9N!`)NFs07lh~9-1Wtjo{u7*i1!S{CjBzeI_nsW`N zF3S{~Bo+|PR8SMM9MDVNDw%6kqI8$wNWmS_jq={yg$haz5D!I9@%Ln=DvUSiU4f}2 zzqetZmb9GxQ~hC0o?^TK{;R#zjOb8IyPHI%_kycu={oM*#gL?5AG3DbnZV2?aK?I| zBt3$k?}mwP^(%b&Gr6F0``jF*^?d~e)klsC&2s2B@WP2m88L}3kSz~`vhjz9O24-Z z*Gg-QeP&ySDtDgt^aRIt(>H(URHu=|B=3fSnQuY8{GJHd1{`TQSH+udMDY}mfRwvt zMEb$n|^m$O|Y5~Bb7F%$@WTso) zdo=GWEt%v;&rO0GhBYY_alp)a@==%F_1T^?W01$i$==3m&MzI2LZLsGzW3hIxj4RE z98aYLMrfqD&biu})n|_Kx@xeklG7 z%sARrER{%BK|NBL6MY`crelAXr{IC2ZXrH{;Dd87C`0Y!TRnIAmzpQNkoOpc1kc3E#=})Ivpn_>cXBs+61R?bCFFCL?9);#O)!dS zZdt9$Z8$^9bY;E^eWl1Ik}F>!egLN;YLmOGBG$?Czi+0ikcg$ls)n6NF8k`$L!ReN zw?vwH56;!^H=#4FozSAWuKV=Jx_r-PWotxEOg{H1-Ag7OHs)=j)wtt98_23ZapF;Q zR|agE;iS-T#RsX~0Z08UC>}OF7xTuEX%iSpllqY86NP6&A))a7f*B^*kUeGf%UgQe z7bJc3u-(aM<7SlOkxxM0ID9GOTJ8N%$D;N3$z~zXnY!7zQ~v#6;t9gnv1pr1K?YHc z{qX65WcLT${F56|j^?P<6buprKyvv?s%tV1NDTFcrRj*!jEGZ5-+$NWpFjk6zCJys z3n3A6UC##1VhpsgE+O;S%dWf36hQ&F$hWI10e;b;s+bV4R~GtrA6&Z!2POO(Q=5H? zA3R6}8g<<-3bI((`k{rBvaF-tF%Cn^y6366TT0V8L&2t*@@le!P~sfsYUl4m%sDTD zcZg}-QdX9pU3R|4)q2OSGhW_&{P;{kj_z(;N|baS8N;wgkQ~LV;@>(Yd=W*`i=(Ya zb;o+LXTEoVwzC|=44VFm5p@iTb)8_<-8ujwpyN{%Fv99HTT!t0?0)}JNLGtIjngn6lLrq*SxKfAw^I*HDKg58!3FrK-{uc8ILe%qC z>1p=w&Y>Dmg^A{lsK3NBhD{h<1l`*SyT4h0G;u1&?Y1K49(4}0RL`8~&So*>?qQ&^ z5bdX|F!EGx265hI%4_Lw_M#*Rwxk}Yk&%(X_{A2@)c(d+h0|e6KQ#D7&^X$xQpXp7 znYjzSFCUl{l|cbOoI*FZw=q>UWw~{l3U4YSHoyPb8VOCl2ONQ^1=OYh>?^gd#p3rw z|8oX|gRPd6U;Hfep}$}*V1dK-DD}0RQjLjVzzgZE5lYife|l(aNL!9bq!g}X(gMXL z{)iNEz)%K){mYWA-k>v{gH>LD;}MKQ8?i#F*S@~(wQQlq|4U4vT5IwWQ)Rd5rCsC3 zjS5}|ioGBvfjNX66IG<|m!Mz|oRN+F%K*0*TOyuymz5D=gMKB~5PTiB24M>w9fvk&nbiN5ufj+3uAYfh(g(Z^7E%`1gDpTJqTWZES7)Z+nXVC zn;}xg8tw`X174xjJuX%lWsKR(9&Yp@y}4+pacr%YBXrPs@#VeLX6|)=v zI5gFCQlt7kew4A9-aWX8yhY3pWT8ALpj=)|Gc0_NQ^|a077j@gKe^Jg%y=Djb@|nM zuImus{f4uqfSl3rt?z>kcb)7Slw%qfY4)2XTqbqh)ZyfLs3Y5$Kj_AoRE=rRw)Y_n zG$#kBgT0&N^B`3Vj4(yB1&CAG*X!YpeY4Y-u_9fh*Ww}{hZ;BAs1Xp3%5A|SV|>sH zD&eoH?EjEfRK(^GX8qW)A1U|wNm&q^-DIiiId(})ia6LilB1s1SW@ONQ45q(WovX0 zE=n$Sp;m*UM>rVK*Ead_P|B3kh#}%(bB5co>JZjn((9?XeYMA zPEp>J{|Rn9TRvyrux=Xk%7so+k;|%6VZdCjay%H;lbxvwMUjyW=pH;fq}UeJ_$T zExp;%Qf!=o@c`p84qagNjq~_W7e3j*J z%?7TPX6$Iyx>H=yB)tj;HSROzIG_EsJAS`$cG{M$RA|p;k#iuJhu-7wtxuM5J3{xD ze6kGck+vIWYob1pb9jL9-%|n=8adR;rgE-2d5xrm7z9y1wqhJZzO#yDP=G&jc+YSm zqkJ3tAyUTEz^ON9#y-V@KVG{qeqz_XvT;?SN~DYH zk@Xi@qVPsIJ$vW8IfQOu*xv!+5r*llg9Gyi0YZkCA0E)YljOJX+^wCme}Zb+_@Ovf z822_kA2n*l{x24_%=chql1CCeLJ_7nH(-eMP3ltc#w~Iia5oORue6@C@2uv)VW0_v z&6yhvcxpqb0_k0yX%d~m4V8SzZ_wy)V=&QZb^~S7}`zC1>98PcYrU=J_T{2q)t(nX56iS zQ=H2e4}TZdvEc{s3D>x&kE442o~coo@MOmd*58A!ob|1NX$%_Y5gvn75VujHZaKAr znAZ)|5=p6@4lxpMQ&6K+!3uBn%nc+j)2;-kwyQdRwfT^@kKQ0qMX=S?xfBUQd4WDD z;CR#9^T(!nBq~j$JXMU3I%-m);imud*YEYy=>q-WjR`#QGVSOF15Vpdd zVY?!*vPxOhO!7|P=Oa0O9NzGMT2EJ+()P?$Blh>&76trxn;=7v&u-B0AHTajC26Px zlq20wT!~x3PEdMOnTKnE#S9*dfMi&e8W^R=r}F@Jr+T`uCM->SS8GA~QAd^q1g{Z;%IP?H4mW-Y(H8>CupayxP;6bs9%Kuy!lK zvA^Oa_ACj0$sZR!KWo?lVs7sgY{*Y?Gjt5Dkwl4PBd-V=1wps=GXH<5_eQNpR&I4} zDgoO;5bX&W19Qb^_uX%v`t1Ht8@*H7ZWi>r#3-@wged0p)l!FS=~2UUy;IgNF@{5; zxr{~*`(atAin|mpO|j!{^X<%m_7FS2=&_0~)S}qG5qtxGJ-4>)N9}gyA+*gEsxDLN z_}w)3n%WbYknlV=falrI)H}>3k=>GYvg$|UsE4WQs^InY1(fOxk3mDYt%uPgh#rIQ zb)2tqzYr=FXHnI=yrX)RCQ^pr!Z`jtUouoCVnizgsYDUtO7ZbtbWsSAWxD1nOlUT~ zumDIJ0~j+hy_t6%rI?jTg&zexNL$+)^FJNE*DP`|D-lP*V;{Kx{XPSANA??#oz1$( zV}A@umgAChe#~H`jUwat<_J&pld;hBduhXxk_GsbLFt$t2%ZLsXXJTr`OM_6F)=NE zA`gs0QeU?D7Vl&QYP~T^akp^3-OZUAmUK*oCFF!3?0yp;Z9g=!0>i-r0~NC2iCu~Q zoM81*9rWhdpQBKY%cOVJeimeepCIC7L|*`EM#6&!KMpTxzD3G4-oM7yS_1wG)z@}E z$uDVNx1uPzyuN_ZfO?s4K1I|8?Rz}F!b^Uq1)tV0&vP;l)35l9r()FLJJRb|0(=n_ zL8uT$DaB?cT`Zk=$VacZjjg~Mi$?cdY9XiVoBy8H+78+PA|rj{5)2=O@-ft7Fi4o8 z!)ISVg#NV<#T9e7K_laKV``pG^ zqAo#TE8&ppeM2kjDk!Di1Dm7s9H_y?jlQ0{u4Ta6Xnak$t8X*Vu~AN7y7@gd{ungI!#PUXS2`kOzm028 zPdbMry%u$iBFYx9@zy+#pr7@~A;F2&eP!%(@Y)tb)47p%PCj^le_7VZS@xW=KthZB zXW&%ydDz)GY~+nq!8Gz}dKfM4yG_)Ms^$ijeL!&F{+24hV(~pQV>?_-%1A2`31L`T z^v}}#4;Ou-2!m^^;|+C`ga740zzqW0zP-5vqaU0pSZ0DQSLZKlY6e~LymJsufk2-` zrw6%3L)kBE<76_ywVso5((GHHoTOlYrHpJu4-x)t@>770s4?#U{A#wx-dc#uxpfnO zZa;|wR%Q+6qI~`&1R)7c9LS^H%PP+xD1ZW)sK3*Y@CmV00jJ}|c1HXQAT%NU&{0du zqd@^}$Z=oAEBSACu|1GceV!l=C0w-YNH|p67O2>g5leF56=}gPXX5&Qys>kGQg4)J zmpu(jC{oPv~rg`gdF^5+H=b{*@^U|Pw`4Vkf{P3M`tdgiG8q!|u{_jJOACQ&+31xD$iug$S&Bt z0`CSv;a0Qr0pxNtz=Cs=DHU<_#qojNC?I?mT15P>FP#^_qN-{w2wr3IAwzEPYDWgl z%KGl`x-tR2$;L!w2S#9S0YS_b;bWb4a@?L^U08jqmK#_D;@$lIr3V zhl0TG_zPNgk$lXrke2h`I3H_4$NjF_qIiNtqeGu7)(Gdx{w4|&HKMoKWtG_%*q_A* zHjev$0D&DhPmKDIafunF=tiF;QtWk`|DE&*AZVHY0TYG1&+g=R{j-H;^8ktuD;t*N zxaoev1#xxlXUcG5q|l;!uMGwfqfBB}#w{cTY+>O?o?)SrKW%p)bbsc25a_rKX7l2l zqGCm{5?7)`+=o>C$rUDPrP@WBnlOHuk#7eNPRb;BQpst_Ib~r6r&TKT3~8A&$m$5j z+A0OQ1VFXwy)StmxALi0ydJd^Hew~6wvg_#ampF2?m=X;>J&583^6@Qdzc@e6>QSy z#AY&AWsp5)y5ty_APz2yfri|!)o>w9Eoa4x8N&~3 z!*$pJl89JkMsz(Wc#r*@_hgawpZaJIaAfKTT4s=bek|Ng>lWID48-AL%sufTeRAtX z&@&#@=T)N;cYgZNi*}-x905Yoat*6%2ul9Y+`&=e%JXuz+S+s}WQ+x-AZ0v^v@(Mh zjSV7@6KA9qMPs<<(XL!U2Nn+E@~VIjcBm7S;rO3;%QQ-Pa}gd|D5<=rLC5Qi1vfvO zE+gWjSmhC#k#W^cvVAsXv73fvZ27g7>S^{f)qFYY5w}=k5KBeDm~_t9jU4JP_IJ`T z4K5}NXxDishxpDL{%cHcPpfaZi6$l6zAM(+_(k2%c`GoU0@rmR3E<>^KG1t?LhtqU zXG%)&$=2AjmGQF3yHznL3H{X)=rg^*e>T;C@{sh3tB zUsO+e58rYT7?!51Nt6*gi)~pHheQa@Ib1)@)73&uS$|(iyGc&VExFaeJ(48?T*)Dl zs9%CG5A}dTx_ZZ}sd92ub}!oWA3UJ<=DG=dq}hggd5Zs{YHUcrHFZ5+TL41ZHp08aHCxs9E1y+H%_ zavbPl<7V8D_?A+DZET}n8V7;>P!ieM#5E!xQCir>vKGU11yZ z^~23WLB283uJBgC?LxP$(U84GIDQ_lJ2Yw#W+Cw@Y8W2|ndw;18(db$$!D}x<6|-$ zr?XuFfG^iP6Zlo)!v@zIOk&Ax;VY{DJ( z&&mz-(G>2dctP%7G0VR-TG(kpRs4Tj(V{(Jkb@l0Tpje{7IQJW!u=Q@_|Qh4yAW#Y zA->Gj+P%W~`0Dpu_o46pbl?k`WfLl_#3_@r7>0j3)S}La-u^Tpj#~Sf1n3>U;Wfd` z+)RER(q>dHhyQhjX@pSOA*1@=l-0_xJtKn=MDxVq#@B7_*Kn>6A3NM(hS3k9P5Tat%kyoz4BFjkPx(LE|1GCmcZ!jf?^I<=P zEYfD_?d<%?$nrgDprxH1L007l8*T9J*SDtT@3FB8=s8K!^qpK{FlD(w?jI{uU5*jL zAeKQC+$Q28WjJ)39xu@@B1xa&U&NT6LnoBt{9*mp5MsbeE|%5iLzm19JO&NY$SWoQ z=S4i=pdT4)x5W)yAJvD5r+9x+@2&3uXFDJ0&2{GJ><*Q`EC*6XcrA0Bh^Vpk7UWXE zA>k-E^j@rlI@rPfxY(?hV8HDe4EZcu-g!35KaLFylK!-L;35Eeo?Jy+X3Do@9t9Ae z)-KT5_nN}j&JkHec-YeqBm`W_0WYn1t;K)yyP7GqDH*y zcL@9dQKBk~_~FxTb^~xR7?bV;LCfc*`T{mE_KPIB2(V=}s{fjRE1=8kK}_b3GGLJi za>5k$5_+cf*lK!5wYEo1mQ-)^BE3+Zq`)(Ad{`QMWP!lyxJ@mKHkX9O7puLGn%d1h>&+cT-iAbOBpwwY6z zHgwrBP!KrSe^DR`uR?a&)6Y2I)%LJLooHwdh%ugX!usPoo>cC}K%Ipb%=XCp0A>Id z$(cEXIG7{V8KsaYqxxlf3HSHFWHX)Vkp=%%-nT+Wu)kEOK+aNDHHw z+sgV=B?XGaar+*NF$%TwHzm9Wh##y{$MdrL`ar7q4~ZCQ5^TJU61MC(Fsm*HxUCA|xpdMq8Fy94TT9h*n%$3Q8RccBHB0NsE*xa?P5fRA>%X+{pW_m{h(1>x$Q$}s6q+CJKw6S~G0I6I5} zZ4^0v(6yWXvOn6l?6|&wsSu51(~Me{ZmFKeh{t?3lq`p&A7D8ABMM@}h2diTqcAat z!2Z{JA5gjoJy3SeI?mOi$g_sao{6N+pFsJcUG`L`*hsPz^}!{^&CYP?H~Qe=_Y@D# zwIrzPx%OTkph7zLlbt}9Mlum{OQBbohP5$pAQPz%5~WeQN}Ax!weMM3+pll8<%9n# zR{WPJdtQHyotB%Wj8`njN4k17G-kKX`b;&l+AZQl$Yk!|)k zNEw|?GJcIi)A?KjzIP^wQ@_k@ERFG39f!j^UXf^hvqE*$l}&=QF4JzTqs8OP?4P_i&yz^m65eJOEIE8BsbJ=B=6mj@dby%!lQ$XEXxO66{=LuKB&<4K0WfNG#AnT5|4UubyOMpfyF8vHk zfO07u?lt-kAzlPMC&%}rO7hU9Z=hsbS>!g26D~B3-&8w5=2kbjF0z3*oZ)16)RCudEXF$D(d?%d`H^;-g0>xDv2ynEL14{q?#EPJ}Q zkByp}3^K^rpEV9qj%Jy@tTq&(fBxPZsQzoG|Nix#lDFY--L=tw6rs3Q!p}bP;gOa~ z@IzS@8;&1r`7zk~a{5#`L}b1~q@&u$*J1zu`ec=_UcVnY-*L_QesSgT-nC-8_4l^l z{DyDYg~9g{EtZ+}I3;+t5(`jGs}zrnuird0#tB7qsEobeHZoQE|!5Q`DoD@Hauo#!@Y09KO zsX)uFPgpp(y6_NOE0$ho%^qkO7|}7)!6Y#X%-fk$@t6<_ES47L$d1h#B$Vcta^RqQ1P`Q8%n8!ZEKwYjyDn7mAM7(!$gZJmOfQ>2;c|E4w>6 z{`eoAl_nl+3?hV5q5^N9Pg&~(M(ebT#Aa31XB<@VMJJ8Cv@H%`Al+Z{xTF#&z}0Gl zA`GoV)Ojg8RpM3buse#S^n1)?On-)+1xS5yy>%>nZ8>KnL(#o6Ji$nwr(r;OWjEDo zM&*TCKu=g|H^trgss9~EGF}$l{p(glKfy5br5~#lp1<$k30lq4*Wat8ZRPJHTyPJ&>j{w61UG;;l4AeEv2XIm2Ulk! zR^m4iC&gXy4Op8$S=nB-6g{gi50F58;Y@!cQR@+zq8p~q_9+;62yAh&7H8h7NwLNL z$Wt=I{c3-Q_6l~T8-s|IO!DQ1(8GVjgMC0T%jD$j;U`I{jG;Uk@!a&S)N zP#4Ahm;!CQ;exOSODS+l)!x!~s~fYKC%4BLR^6v=aA2Nk-z3a#Gl9HI_3qVkZpoEH zu-wBjl}|^% z_;e5wr27^T3@G1kY}SOYD}E{kFTrY^LR&MD`%J+NUf*-PC*6M6XI4dZi?0?v#P-J2 z>iY)7Xw4lZEJsoO9~DS9yUl5QI1G&R?!tdG2!-j->0SnZdn2!{yAdaFPlpKCQ$Y$% z?zfIor%RkO6~@KVci7*2s(hqu*jH0d9e27^*I~A3D{+}UA5=h~kiS+-d&|h@a4?57 zHPSo4jTUNp(H%a^3X4!WC(EBhWBKfFuyIgkkKiN6c~lWi#1l<@i5b&;8E3v+`GcEN z)n7;lF+!&Jw3m?O5?FsZhkaqULaNRM>tKB2u)!!#+bsy`{*grHRexQkBXRlnnp8QwBfVy+92gkp+)j z&$V~Dn%=gdp;kW`(1W0SF;yVBw!V2k?0L_3%8;kEVeI$P${ldSx!J+Nr$c*9J*W(LMR#*X;XK#tN5*##g{*QaT5V${kM0 z_pgavq10C6+Yvru7VxIId;(~c*xOfMT<3kx{^-*$`G%_QfIw73HEUrBcLa43M7v2* zVQ%m?ryOAG6dPDW=VYxwDV21)uL7uy*s=BiXg5z%%H}%%aw-)b+jNlT3!Z{axgh`iy)#Q*Sot#u z!MH2|Z|-Y&D<lr%At^X&ScaQx^DIyH9#~)p% zU6gR+fn&O`h(1fxC@|xcKQ`dK14T(l=G-Ams(#kx>~2W23dYE0le7d7vaIZD`YvIj zV+r*pbUalB4zuZTIosU&)l7HRro0JD{SUe+s!L#d(e%AL4?~Lt-{sbC?>OvIgFLy& zPH($-b!KBiE6x~-OZs#E)goD+;=k)F2QOSj2kY57hdO3H`B4IiO1S3Ga<%8tI`A1t zM)#oz7=+2YYQ3YO!>tcVD01XHM&=Ne;W~uC&)+QItA>x3uJ|!%sf1cdY8N zBh+L6&7{(O)yGSt274^iJ@uh`o@n5ra5GfaR{YG8;g--Yl<9jccKdgNOGxgveC}oF z^)Mu_Es?p)+gEeGC(^h7KG^K0at={1(cVIvk@KFlOAL|pIuaC>+(KquzXDk|RqRma z@MuhphR75}z6!QqrA|^Fqq$##-S!KY5sjCB(uBJ>ExNetCoWF%@>m3bXwVpBy5rkzUT&2={dU-^)Zt*^}<@;uFz4@Q-5kUW0YIratq zyH`!W-+H`gIxF~s6{`VbH?~?F(msZVMrC?ccTVxxX2?195VMKO(n3f_=l$`&+l$H3 zsPB*AR~@`jNfJ{I&56-jPRD`kUBM7ztq%OTDuk zwm~;`;IW=+^-Xe_HNI3cUwMUeH~_4MTpi%@v8^phT_HUuQM|9`ypHzq*$K4@BFzkL z`$H^ujs&sIxHNnJrlQZoxh3)_$z$*$S`?}FzF@zigU2)Z8s{`rP4chXJ~cNNckpt^ z(L$ktAeR4G&w;1BC{4?ZcKylDj9E#XnzGKg#pCOC^b?hf4BLC;<=@&|H#W#mJ*!mjkQ9Z{ zUEg3-l>j#)agG|CbutI7w7C5moCmco>{-ZP7sWyG>= zCGwwg=!2%OOK}q1?s9?xdjh}H4_w-(aaj5W4|221Jo>pZ9MWq_Ff9pccgJIhwZh(N zMS9@Bf3is!w>tc?$bF1wNopYF5Y~%+;mqy(J(o zTpq9}z7!VZtYEInS7AujY=&XuI$+?cb~or(8kT7pC|M^PT+H;Fctiui!WFM-I#r&L zU}WSg#-Xvo*(lG+9*@glqf~>E%g{cPpZvtN zYHc$2l2T8ozW=?VXa1vgaF!v)?%3w{>LwXQ0Q1D?%k2e;^`Q?VFU92FngXA!uFg63 zGT8*^JfZbCdaQ;bRTX9pi!I&x4OGF0}U6UDz3v;QvuOlMYo-h1HiRkTrKK~N9tD-3?4N@baB@qU#d>x=-MfUi` zh#Z9yTV##QH~d;y*PWyNsyvP9kE4pYCHw#Td37IG8-MAr>w|sahtWAoeDXh5^^(Rv z-^ACiFIdvRM#gYhNOjJ+*}U3%`VU23=`mMV?bTL_S!O%rmA?53*z|=HpD0fUJg!b# z*#;+~RMS;O=+1s<;iQoB()=HsTJVWm&erYL8MaP6HW<|&$`A7gukh%4;XL6KFR!N( zVrbav6R?|V;4CrmSSoD0I+oCVclw|#Z!v9S!ly*Ty|Fw&yw`R? zed~Xz_PR2-`E-@X-Ms%Gwd@p%SAOJ;O}|ovscLphX}3>j3L1>` z$P`g9oiFotC)7}Ug>Dv0cd|nbQyC|Js{qG56Ka&y!m^%H9HvtE9pvkm|JBFL`@O+QasGx0R%DW)PH zy2XHKO-I0d`IB9K(}P>WMx!NBB7)7c-$|M$s3n#$YH>>KXATD~k`0-+Jr8fB_(Ka@ z-Bn0Q{`3 z+ux?5*~}G7^CO@AXf>TZC9?1wsNeAdk1E;UL?i3>RjmncsNY$kewRf^!h*98YK!);zjGr_yPhnl)lI z?DT4F-+BIwS6I^%O>l&QUll^VcwG)TtJhFdb!@Xrim<*eKh;LQxAty{cH=N_F2U~A z#cvuO>}{(|&nJ0K6UFa}pfL5k*sZk$eRAa^V66GAGF~Q$?S2|l1rI%!x$EbpGJUv1 z`|tYE7;b-K4%0jgqp4Q_5)&6=mvF>F6ep0sA%53wOBd5eXQivR3%(2M4F+*HMe$3b ze}DSz(kfcdzYPF=C9@ldBG&O!QTCSV{oKhZ!VZoJhaYdFbd;)_rWEN_CH$xGZ%)p` zmD=u$XSCcLHhnOw-*)Y*vY&c)`Bc-(Q60zdpa?0l=(ZSFnglB18(OV=xoHWfZBUt| z_x7YiM=vx-{;8m+O#oCvxp-UEOXFMhNuMCCcoh3*0Ujj^FYZT}6tTP@DhirZ^W|?u z;+?OVVP0RYUFVr^;{%~)Rg^d0HcVX13)%-oV9d2xG-a%ZBX z9+%wxrr=ojHX14CDG$?IDYVT-k;SKPWJMU)3P(K0AN9}%Lepi}#+ z+ueQ6kzb<++;DPc%%4nNM1fma<+I=B@NIsF3HX(=si0{D1^=MuHIW|QK;}Pj83_ZJ z^Z#+xyYVkPez@5PdW^tErnlppOci|DM`Zg^Xst!R7_FfL$hZA29$V*q;wbRqC#x`K zzF~v2>DHFhOm)87C0{;Sh#`L%NBL=m1BqL5Ww{b~kWhd7u_`4CU-k2}Jue3rUurnI z-p2J6mOcKR`u7z_2Jtd&KBdy58tz3@>f&L!^P0Ye<8gwG@|&(q+&}(S9(JXUx^@+P zxF9h^&EH`@zcqSPgqE5epy@6kqaCA3wjYevx;1wgoRTK5)6N5{?_y2KMqDQlPaC8) z^zQMG+Nf=?QumTs^0%}x`PD%~!z0zo)x^B~5Fp-aoS9evlAJV1asukAG0MpA^w+7M zr)Jt?9Rxa3dz0o9Vn@F5spXs4}{V3Es)hsK965;P_wh93*S^cQrGXcJi>5%9u-WUXuwI$J&PvCywzTS+!lnbzZ3=O1< zxAg>7x?R8eC$Sc^gZ+agOOj06a4j>%ogucu_jhVhJ-i@0P-n`K29J(X3LJ|nTDNt} z=jtN;LwBB4n^yt5x%zA=n2>9e@m^K3D*843TTf@YH-_j~1c|;de-(roq%fid^3G0S zH~g)}JYwv-&}l)Y&MSPehN}v8b!0eY-=FtVA%~gDQBlfBaCLdeqvxfrB!Sf~^kP@a_gs&; zoyT%GyJNkZ!dMVM9D;9rC$s}gksn7&JsNJ1>`T> z4n{I%nrkrsQG5|zw&|DM@9_I~C9>Vzt6%s}yDpd5n{FsQ8a=FsHj5COg)SI2Hxal( zN~EIsPo(n|8{8Y!@Z^2gzB#06uX-;R|7CF6`}dw~q@=OGA;UTCIUo)$b}4(R8-Cc; zY+SdagzVGla{jAoAx+ zSywUNjnK~JQ}z&FX>#AaGiKSSElSSd`kSxov1pY14nBpH(8Xpt@L+Q?b`A+(H71l4?0tCWcyzA)`dWgBVS8MjcTcKr-fxmGi0>=bKZ=jWZJA~926rxi z@?dJ@W%I5S^nUosGSOK~MI=eQa%4L&yt#M$dCmX&kU@WK!h|VTj3{E7X6ya=Ih8H*&Z%XMPzQT5*_6Mu9z7Quw3tsS^y-AHs z@dbR<+e_5#-6FJQQuSWK!bm8$;B6Q2MjMZRoOfur1B^U9yQ~#ZGI*Z%U|=f(U;f2@Qn7mI)x^Gpi|HdE zzBi)4a5G30v2EZ!V^ILx_>DPXS-X}`G{&qI5!#s5N~kxsP7A)A*nSD2CbEbBRH8!{ zZe5$Y_ji0OG^Y+k_1cN!QIg9jo>pE)`8ke9Ay^FWZRox2i}ZmCL0bYx{MOtVxyowG z{GHEEZl(J=d{U{ z@XKGYVVg$OugU!aaf11Ao5#U(l}3Ggs01uR3Fz2sQP0ug6e(U}yj|1oLRCR%fc})w z9p>xlFw&lO`Lmb;E>7Irg+LujT7LB!MMA6&B7olZ2{ScT73TEZxf*b`8yPA&BgYTk zLa#q+0i1s33&EOb`h2D*e8A?YnVa`*XcmF4@S)3a?zyrkg_#^hQiHBTyxxMVi95RaMXoqOCzKFFDC zZ8bh7Gh}W;YjyW|pW=Q6lBWf|r1B;_0ij%9J&E9#p3Hs${jN>QOpgW1LKsF(1#EZ= zhWxj&9$_l~)!Ny)2Od^smpKPk$tkv+{)f8lx(=6j;`2A;gH;>H6GSfgoEfqTt|kDdQ%D3;qh%{6>&uWwrpEwF^@ ziv+2B+Y2No|2zc+ECo3PVym960<_ZChace^)MXmwVPIWKKRGQLNzhCs5hXDdS!e)j zxjEbsMLVF^yb-uqaLy1rT5@Diq1lvajl*goGLjiypg`7#hM8EMj(KPMu6E!Me5c!b@|dp52OALC zZaH~(0L+8t2A9)SX0IbQ@C&z#1K8h4VU8NCfF3wsy(`>DdE~5QJ)9jVw(-73D>{sj zf_tuYT+^*Z)(mLlh{OySZ!A3EJ9!%3Be@Q>Eg7{Fm_c@qc^iM~TV>oeJ2Bn%1%_7v z5coqQgrq(BVi_D4;d!DL@-@NRhWqC{(C&ll#_k8ByN-n)d(lDT`Xr*@mSxq1nkY?KtC zeJz%5qGix9nV$FmhrS*waUNdN)qYslIL2sT%hqJD{oZvbUWr$a2kLU|#gn~7C&&Qs zJj=iTdj2^i8()XoNWPW7nGg&8rwXCe zwrX_8oaZ!LduK23^TAjVOw$Wk+SGG`G#L?Ql%o5NP;0ts0rGcwZ*R7K3Tz_Uoxk9S zwZ}P4sHTbfpkkxuBuN*XBcFx(h}h^rjInjOYmc}c%6Q`_cd@i8Rl%Aw^m>tm0<%d#j@}HM*#}-o`RI}y6~&lY)`)HXDNx2 zMhz5!`kKvaa|nQ=rzUaKl;=Y)Ka(Hu;%|+LXG=Nzn;0Bc-TO4%Qz|8BGey#A|Ekk7 zA|~xh(2Awc;gnU&^7E==Us8dy*Y|8%aOD5(--_m#bOd#cQOHeZ;M12Vy=~v0(RwV_ z4e?xoZEnX3H@KK4MTNWZ3lJzK3I0jydSKvTL{1@47rpne4@XsazAj~ZeD4o;j`jfh zS@jvzsRO#kzVC=NY-y!*mMYp}Q$naSC?55KLl77>zpx4SK(@&eMVM_mwY9|IHJR@C zK@&buR(~8${%G8c7xS^y*}nm}pSd&CZoVmo4dMVxpQ-v>#~wMD)BXAm*M?Ia)9wxJ zFrm((h6~p$o3)Ll`*l^ol-P{C7>!Y}7y&3){nRk3<)Y z-M-<`Q6o+@B~Z`5vbI6(I2q00pOrV(4XIoY5@&Eks=^>EXaJ=X$gI6^0qPIVXLSQ8 zcyv-e4RR4=wGVUJzzbu?Bpc$?VA>V>u@?vu_P6s6L%c3QZ25NON`U^Bvhxyr0_hjO z(}`%m%>n!mSG7etlyz_VpfS)GoT|)+!?IiGAI0(AQd@9nvs#kl_I`;HcGs^Yx8>j{~294G0 zP#4tW{oAsHP{lfk^k{pCSdR-rUE7SV~m_>+Q$5k)4G z-+(JmG&j~m_55?0_5Qx?xFUMKHALSm!P~G79@69s1RnXe=m}hr;pk#H>9PZ<^QTvt z0#K9G3BC)*A|a+?Mwx&^87CvfGBR0HRaEF7`%)AMgXdmTNtQ#~BKxJcvW>E*Ng6=s zNW)%ct11iZfNKr-hC7#MY64KhRVBub)4tb;ge(`X<5<#p+t;QjMh`>}&L{eHqIUSE z**iSS3>r1-HU`tJ(wSbRKq^M9?o1i?X3B-=)zR3XmYU?H!rW+NK0W^^n*A0;n# zToXL2vj#R-qDs>4s?ZbfPzeRVh`f)D!LOl%(|}ShneKee8`*IumO^BQsAG8zdVt5u zr4SvNwcXw^qsO>qiAU{LuUaA(mgMSD{}ba!3zaEQuPeX)u^zkj6^y0!xlk@|_Vpz50)o9Rvjjk2SjX&U1{P4b!& z%5Y9U6sxiP0Bs<;WOTGc{^ffrC#dl}^iYe+N0Y3W0dVK|zgj!XpsL?5+7r?pA`Ob9 zlr%>`1f-F+2$2TqmTn}ZrMp1|3F%Ie4h5wflSjtlF2b9!`ZzxrtpV z%&EOmdq{|*(0+Gbcwagw2bRhY7A0v#Ags~4FEQ>(<@2cb-huo>oTlcAp2xp_eyQBn zpazxq1s`mLxdjsST#^mCHbgq*RbfipJSr82VU}Nb+AcukO^f$cK;q5_lNe4CKDv=R z#0+M9DZ{fx{PFZ#?L~@A_78VkuSV;7@)-2Pou_GpexDmfiJQKPo8=ZPmJVqyPtQPA zep}^unAAeP8?>~v4h-4NyT@>U@yF$FnHf`k$TbDzO+B zJ}i$^LfcBj+iCJSuDb$lXYgkM3uOWKP^xg*017?n){OnFDDJC|zB@@ChZzTD&~R7% zm@~#+{)CB3t0=mW)SxxzZSu8YX3A6i z`O=u9^nM{P+dgmA^HzeJxwlM(`NaJ5+NJTAHjR6-7W%}%pF!Ke-6umXpOykcdrou7 z9dY|pPre8k>9Q=Z%0;je62wj7o|bm1T8Z*MbauL{@1UT4!Ts-s{rQl@1!vb|BRW+Q zk?)w-{+|F$ytEG~=siE$QEHKj*F20?C0F}is!AWv0y3IB@)8|mX{lS{8%4g`<>AS& zQLLbi;R*VAGY@?ni^k1w&yh;oQ`PsNDF(sSy4g)RMP8fH2&uF^7Z()LZoP$+@D}e| z+(BY%FeMuujZbQ!zG9mXe}sUwRr9bzJNx%J!#OyO>_YgA8LrjmnlA1sHNA)}Ic3~$ zCuohNJyXKGEU$0zGm`mBO$ zu!NGzxPtv*!KwfOjWirz-q3>9fAiVpGn=5j4SZjmh?o4P09qvfIgLoHNmTlJAM>HO zj6OH^c9@^Ui`U4jAx8Q%YezCj*U!Rd>xT)wY|QB)$>344$z$qvJ#@l59sWP~o+1xM zX+64Sdr*-J;_39K>KqdzwC|7^qDL-Z-Qh`QZ}h>Wm~olfl48j@WO(SEM)z|1cjNKz zHxx?8Z&=v!)J+rN%)WfSs0+l8RNVk@$M{T0+C=J?^V(yk?(RDi^&-y~@nJ|8gb6WW zCabK-zngzqm^7vabRMbo+gtMu$WdJ+rC}T6mR3Ufl}+IEa<68fkTU;b^F=q_>u-LK zcIwQMKBv>#1`{!G7s@r*-g?;QK!NzvJ@bH;>g2|Xd0vl^SYt^B;`jeVbZo^IgF1n#O`PgHY zRr%WT?WxpZ#Sh%k0}u!3?yA%~2Qg{(8hlM7xpFU_NOCLSp^%5jEaf55kWuYMH~T)C zG(#cVe=_HIMd`1-&JRge=i#Bw6}a0iP`uX1XUb&XVkvHMG z{hyyb-rsPX1SIAVly^?{pFE_2zeXu^*= z%mouc6bX$3;P9@99LhRR@V2`(09R7tEHnM8t>RKQS#r_n1_PO+#P*9kMWUScX$`xS zCfyG2q`kDl@Z33V6>3vnIvfN8DMP28bmbWf+I=BGETuTm-t~R=@TJ` zNVuJ4`OV#?rKRQVugML1?(NBRSO=s=XAAD3<@$VF)=&DCN|)2K&$OTSWca9Zy^{54liCy1q3|<4ZGkNIJeA+15dGYeos& z{~b|>UH8yzJa}E%Ms-*OsSH5$KE+3-MsG>>JHb# zWf;zawUbE&sACe}fYo52+Q+tr|6J_#$K9Koo~T|m#%2~bm=F5iVj2qtM(_~fu2c_u%pJN+Du)bj_qt1S3my#) zV7f2bTEQu1N=R|hirgYtGynLvy4=jS`lcL=QbfZ~SWZ3Q6bo{Lo3qrH|&w z#Yx|EH_N+Ai?KM#LyL)S_4f?&!+!a#N~@T?OR8+8G&zA;+oh;}0WrDW#7btrWoCOB z-`P*TSu(f%{L_WYf>dIsoUOQEgxdEqJf(xcQH1VGy(D?16kOo02>W)FR2oMP!oUFMv6-xh_s+X^*zhc!JC1jm#4sZ@j(S^#_F9B~qrD2`|hI1J7FzPaN7 zgNhtmt5|b3)G;a~{Q~VT-;_1|jKnFUK2D&b{|ze=ya6`O9tO90Z>m~SAv?@XFv0l0 z-EB*js@*F!lN_fG;)o{3z1zPo=4KtyZaGz*jz4x-G6oHtR3hy@e<8AGOFW+aFa9xd zAG>^gHR~K4RRR)6mSl>O=c!FOX9h1fVOmCZApwp4j!SQBj9mo9!AnqgQ+`!4>~D`c zYfIjg4?^lcU?jKck+bEEs3bINp}*afftn!g>K7z}S&bD%KO z+j4=h5+m?FG;g9x6BF`wev8TNhxM96Jnob#%1vJZ$Qrllj=+h~3pq%jFyy8p%RS4Q z<>Pb)Bl9C~S~3I4Kd1>fflIA^0jAs2qC%f_mML;b40B^lEmpx;^vwyP6xlHLG%j9L zTO|j1$*@dfst(`OZq0>n>k>R4snBuv{L{X6#yZ+ZBs70ZSB?Eg{yt2t`C$Z_gH-EQ z?>-ZDw|aNCchq%c&69IJSK}RuHox6dWi#^ zDh}eUl&avODu#vlV^eM1iruWw!l)Oi8n`>R-ExiU*hA;l`3v=a0Y>jK>B+R?(9|)TL_9UVtS&?~iJO z1bw*dI}8d%S<+C0zNs6+Z-d8vrv8$-Gl`)05!)E!6;<-{2`_P)79J!j3Bzx_;vJ)= zTZ7ch7X^xoSgLC;1XB4-D$;{iQ9Eb?kx{P1FBz+8n{IAW$Zvu4sN|Rp@^rh0W2bJ) zjd7GDR-3`Jbz59Ji3nx%@0-4;=sC<>UH7rejS+|Uc^|C^PUv!xJwd5>_g zt-xi=2d5gQmblt=wV*oHgRlsHYKpCExC$wn_Bh&orM5J(ERnp6F{-yH7be1Wq4(o$ zZ>(IN*U%>s8-~3XK4b^m=u9)Yazq!$24S?hbQ0hm?)8PQ%;nfL(i;LJ74K=nZTL_I zLoE9~H3_iuu0=;1mrI^UvS?Ia>qW`FTk+0`F%@+MTuw;3h?{{i)9;%6lI(-Qy-*~P z6oIB7{VV@B!8Sry0jueQk*CyqjU){+v#^OGz4=djgBfJhwgOUC0;8N|*fYz?+4dE5 z?+s|U8@KzCaoHSs%p_c!{?e8LgyV2ZBx(C_jU)PYx`*g9i6%$w)=cCqa8PGaqV4B| z1kJe54q=P^|KnfN3^oKiuA&bK>3;WNH!OAy2@G4E&RxL|kXZQ~x!32NjWq?~sLgAy zbeF+xS5J6myc=8uj}DF|JQl?TRTj7*osBBH#&xH8{w(6MVY8x7xzbelcXo@3@n$Qu z7Lbe4TjU$}#_~nfJ^g&o_>f_}{F4C69bFn)Dhs6G7a=?|p|A5wR+-O@W4wKXm|C`m zU*E6gAHtB-(n-HcC$KAoPSioBy8z6avZpS9+$Y9ZGAku~k=D-bA{N0c@c_##+FyfC znxDm*a=pq~*wE;5kC>ON1%6qKLNKpQz#k!9hkKX>+1oflYc+G;HH2wX0+!>$jThSu zZ6kpTu^qd*(aV4$usJX;nVWvQ(KL8#dpcsWXLk{YY&&iZ6}3+B10M5Cl*D<`f36u) z7;FVUK5MZ8e%Y>{S=w2I#drIg0EVaL4>JK;JB8h;ttr>&+ZC6)P!*8DVb3;mu-wbU z;Cg3ikG&XnSFF;mGygt4=PUIFR@Hxhd(OufMbNf>!_?lL60KjDc#uuO{v5dbv1w07 z9gkVASOs|AwpLsrLLM+npP-`EAt8Q665{W`sR+Sdi%%^Cju9>KDO)R*}wm zOtc~>D~aaH47+e=r7QHarQRy7)D7@iYMmb_xZ40QkEZtV6%5rNt;iSMm#~!4<@u*Gbc3AA+fNt!-*p<|ej)jE#uf-SEU(VDY6`$g5rBG%BJ8Fao| z$U)ywS5n6C+&Go*rF3VE6VWePIK0GWRY@`a9xpm2S%<3LWZ0!xX}2K7uHB}g`J1Ge0<7 zP(#OC<@|cGAm3^n4~|a(0%~0|gllt`FTv8%SL6Vu^5vC26B#747rG{vvSuNPgpy8J zz7ktK^+P+$mwBXGB$5qj6TZ>tyhd})SBp-UMUOP$S5MD>EWwp|6X-)ze&40QA46?@ zJZ0?6hmgm|%qd?6UfW;&Sx=+SRJ->s5Byv>C)%>Mn@?sDmC(m+e+ez+k1cWHJ>mV_ zOMgW=eDHWf`Ey_d$2i0-u~OmEnP>O>f`}8pVNDII!ea^dkh%=zJPr? zMl8uGxrWKC%Sv$olP4!WJbB0{9W?`VTDtP$|0oS6Xf@ZvhyhCDYqIiE?b71Tpvcj< zX25fdcuE9(TJ==J`oICjMz9K=ki5UKx#+5dk_`dSUj~Z0rS7?0 zj4-rrK!mlwE!XsYJ(ftcy;}jHajQk_*)vhZ^h)cjub@o9FtWQzl5rJOYTB zK|^>VE%xMwe;lx^l>!ka7SlV$pL^8YL?LbwP#H|RJJH|)gTz%i>%2ZjDSNy(5h4n--u zGz#J$#8)#N5FP$?O-$=JT35A8er&lD5Mg+>Z)UtW3d?wfG?5Bd$W6mM zsEWlQ>lpMaym5fcRAzB0f*QB%-*|QAL`n-1g_j;PX{>d0H}(O~0H<19Yl0+9v2^3yX)eMx0l$ zAtbo_YLp<}5F$*V{TgY}#UsQo;nBKnE;tfV)dT?}eD;_fCP1>VPQrTTAJZ`2D1sO|4;!v4YtrBP(I5Bht!HtH+A`IBNc|O=s}F!Cf7R$pxkL2)x}s@l(zWzU zr9ReVDnXKYTG+rQ)*kg`!p5hwuo5r4(5PQL*bN)1EHBcK*@DaDiYMVbr5ug_K9<%i zBE}?@jd*up75X*U`l~T>BJA#U7EruOB7oU>lnr z5J*OQ#HO%7qKOELeP6<}`rPxd^S@OX`+5WI1!NZ*OX1(L>51H`ewp@4Xd^GzGUI6g zTf~SHV}QfpHwhktN@zFKV9Hr`T@?t3SaSB9B{guJ^Qyt)SgR-0bUNtnaL#c5vtjUD zPk|7_bK$hAyx36xtqI)}i+;M)+ts!uxxs#fz7i38qB0!90SR=%(=;ZN&Zk}?B4o0B z{6ulOyQtY+|F)*kX|KPq%KhrS;^Wd519d=xJv3P$-t>lS2;=H1Ry@JQQBaVvVWT>B z$cf=k#sU^cSszqL!MePHy=O%#bujWj)ngilPz#zRT_;6#uNAPF%Ri{JvY2{Xy_ZxN z{j&X&Fxv1))<+tlMt%1$8!ClNgMW#+FQJ+s{~S&MJL$q(UxN_GDjgs&2YRV8NEeMP z1Rq4-Zyi%DYx~8Ni{?!5H$yo@m_Pteil5%;w&rckTue0be%7LX+1L9_5%pF4DcdUJ7lGQO+#$xfGvV$FGyiORCO&jE*bOJ((1$S9|mk2jE z2=~LHEb0IwFdh_Lqg_hBj^r($ZSWZTvq+0@D%#?teUpCp_azr#jYawk zf};EEEwyZpY0vo~kJQknb^$Z_occWkG>;gpG27lgjUz3)H&s=~F5o_M9E#jWX=teL zOFF+diT`B5yy9R3Wqg|-%ca|tZ~s18KVz}hD(ukCl^)6`?;_C)CUY0#nsSu$>`A%Ab}W)%JnEkhn<*Hrlrg0xmP zzFojs|GwE(wI)r0#1G-EA=bSv+@^!!zJK=%ze5Qhi%dFh?LwGD!8U>!(sNS}0KA-Z^48Dj^)vLCDiEd(xd< zn^7I9zQwaV8ZAQ5s-avh$0+`C~Q=7sLx6`(7Tq=4z;;jXTSwO1wVF^#%AAjM8| z9RZC@-^qW0=b5cD!!D-fY*mM^m3g}Sa68})7UB(b(4y5Szwx}uq4lM6Hsg3q=ejQO zDM{R}*qn$rOesj*ZDLy&A zXC$GplW^L1=0L_^T>eshKwcF0Vnu3gX*11ymk8*^CZ#yBjDIm%Oq4e1hO65`&qYmU zP*1BQAJhHIfuBmN0}*e`(?p*kjXt01Ntp*@_vVMh4y+~%e|~-AhCuocUr3s$KhVG8 z7PY-RwQr9>e;10HW!xS{!nFNi%dMI69|D|JRL6>L!AlMjM!UB+s-bv^_o?qac#_^5 zAU|&V{Slysaa#Jf%j&m(OZ8{7JUT#i=e2*p$FpEIlwq<)jID}MAcK{J>W}xp^Hj$X zqD21q96lzv!Y%YIL!4xFv`)VPXyiHd69L3_0@rn%W0Byz*071MH7^UDQNKG|0Y{p_ ztk?V}Q6k(SxS$5j;=WQ|xVPQz_(5AQ( z?r8JFrHGtld-nJI3go+b+H)I&PHOT0O5;s@;Cs-vvBXdgKLX}-vVRHP;^D1(F2OV2 zV~^=3Vk1S;A||}%3yV>QUt^aGeS9y0qN7U8wXTJ4ZDZ{0e&`O*iZa^kOdqtJp_rRJ zG@=gi@u!VD-RlH}WJCyLn3J&!rD?gnlkVhhV;?4?!q9^s3o{KZ3CvqdZvCmjK zJO!M==*8x{bWu{0$d?H~fKRc8&5Q(4y}G4EsuS^xf4)DDDq-@A4wHITXC;P{|59hQ{X=y#ZxXF z^(yPXUC~Zu-`d9nyg8&GwvYd3M1gfh$e<4-9X-Di8O0l4 zK9p#G{CN_Uu(5qY54b0)Uenp#?^u~oENbDs02k^HYpeA524yN)*taJrDtIAaNMq_H;8{# zy>(*_x=I}n2CTQ<*2uG{L*f=RT&>v^t~YDJ8AbXq!=oMskgcf3Bx_RIa^8W(_8&S8 z$8<_X>0E`t{|-UcxbC_@#9By)oaTZb77Gr#EzCgG9G>zeyN24F8~rbg3ND2Bfonok)R*ohsPDcljl9Ybw^YBEAz|`k?@0fNYf=h33h5E$h4H zOz-+Gts=EqQ_8tia6^4>hLmbtI?7!v&o;pF1`GD6?JY~@A#p@Bc*Y09AaIA{mCeBQ z7E8z{x@)0)>=)2-x)@$DccEQlBc9CGwMQT#d(QE!nGr*kSMX${!PQo?r(L-?X1OnM z;u6|CSIc`6aLGnIw$i?2XhjZnEcaahc-F8*Y^&ORKa`Ep_LE6o;-3agrVAB>=k%4yfP+mYDgUTGt-O}R!+r4 zupc-Dmgi|LzDDoJ^YK02feF_{DJgN8N^^81^6)p*q*!g#FxG}^Wd7mUI)+baG(n@o zie0xCInQd0YBH|{sE^ei{oJn5hsw!f=4qenE50$J@mJU_zV|ysB_@hqR0hLciu@Z7 z^F5NfTISK*S8C4p`8Y>cit3H|L^x!1W?i#GsXNGky_>(5ztSXTM%e}jbyMs>D1`cUVnI|AES{JTl*;B4FR2fwk&^u*&{BN z|1`ZTD&ttt^wyq-Wv|t3jnB#rWr#12Lo6!2-e5Gf8f4aw@1+-o){5R6VThGzk z2^@p_F(?Rt4igh37sD`vE`B1i@tJ5F`-R`2(vILjFc4iyfX4}BdL6%zXJbm1D|}*6 z_y^{pV)j)=86Ky5{|SS;H>9_wY>E1~o#v&re^E^xA4lF_<;c?dzf?hiNTetT4+zx^ z)B!p(u{gNv)DF;A9;$>6MM2j#A3HsMWUtvoDUbifncv&b25nONFY!yo9}a>EQ&*9_ zeY}ieUEw77r1TZw;;|NLO@W!JQz_mk{r3Ax@ocZ(Q0(+c*q-YaIQ;!AuF;qf=li-@ zo<;@V)|yF~_gBzZPtKqHfJkEz&Ik#!z{heaGE~+yLY{ZEp;s%l_eK`CH{v!Vg58QC zl4rd;z&-j{rTYcsL~=g;{KdNZf2!gm=L{Szgv;h~PG5Q7(v`!Sa#*hnS!oATF>FA=HK!5GXjg@Tsnn|f-dERfh_G# znpb=*EcJ!pfkW}#CJ1*$1s*H@d%V4vuh*6DN*8Gr=McLo=(xY9mb+U5*>QS~13zNb zgBmC-r2D`e8~&tmX-!{KiJI`1>$*e=4XA{b$yQ!t+0s}WNx8y4?SU78E@Ea+vg%0O z>EptO+i>eB!|o40nZq223BW=Jk#`pBL{4@Tbf3{%fwE3+LN?QEhx-aGTdAa(`t#t; z#8F}h6p+0c^F&N;#DpQAO8op}1|t3wW;f&*2oBrF8it5so;-B_wSk@c5T&OZExZ*m zRaI72yV%m^^5CICe~gP<1m*3W{_IV|(uvelw*2lW2HW%Ftv7`Y^vpf>iWAN8bj6p5 z6y>QK&t2m0ioM{wRkBiA&~dQ^Ltq&x@9#EPvFB)(0v2iAAj`@%wX@pyzfXC+_+Hus& zsr+ju0jrnW=v(XL?+aAdonuXCCJSs8Jy{WSuNDxE)Alv^Cq}DHLOaW6Sd`r#c~giN z+Uwn(cb_Lx+G6DZ>N_&{-U;6<>ewvJ&3m|$|KQ=Wk%v7`8w>geD^(8{f~4$mpF@ud&YNS7DuljZ|`PSrz%I!$&&Q2 zz(=$fpHU)rU=;mCAy-z2d$$tC$lgn*qggFKY?wLah-F