From b7a7ce2a30e408dd658fb067f2b3ed906ab0983c Mon Sep 17 00:00:00 2001 From: JAlcocerT Date: Wed, 13 Dec 2023 15:58:38 +0100 Subject: [PATCH] adding flowchart and TBD projects --- Z_IoT/DHT-to-MongoDB/Diagram.py | 26 ++++ _posts/2023-10-20-rpi-iot-dht1122-mongo.md | 5 +- _posts/2024-01-01-ML-rpi.md | 23 ++++ _posts/2024-01-01-MLOps.md | 83 ++++++++++++ _posts/2024-01-01-kubernetes-rpi.md | 145 +++++++++++++++++++++ img/RPi4-DHT22-FlowChart.png | Bin 0 -> 44226 bytes 6 files changed, 280 insertions(+), 2 deletions(-) create mode 100644 Z_IoT/DHT-to-MongoDB/Diagram.py create mode 100644 _posts/2024-01-01-ML-rpi.md create mode 100644 _posts/2024-01-01-MLOps.md create mode 100644 _posts/2024-01-01-kubernetes-rpi.md create mode 100644 img/RPi4-DHT22-FlowChart.png diff --git a/Z_IoT/DHT-to-MongoDB/Diagram.py b/Z_IoT/DHT-to-MongoDB/Diagram.py new file mode 100644 index 0000000..7d3acb3 --- /dev/null +++ b/Z_IoT/DHT-to-MongoDB/Diagram.py @@ -0,0 +1,26 @@ +#pip install diagram + +from diagrams import Diagram, Cluster +from diagrams.custom import Custom +from diagrams.onprem.database import MongoDB +from diagrams.onprem.analytics import Metabase +from diagrams.generic.storage import Storage +from urllib.request import urlretrieve + +# Define the URL for the Python icon and the local file name +python_url = "https://github.com/abranhe/languages.abranhe.com/raw/master/languages/python.png" +python_icon = "python.png" + +# Download the Python icon from the URL +urlretrieve(python_url, python_icon) + +# Specify the desired output filename +output_filename = "./your_workflow_diagram" + +with Diagram("Python to MongoDB to Metabase Workflow", show=False, filename=output_filename): + custom_icon = Custom("Custom", "./DHT11.png") + python_code = Custom("Python Code", "./python.png") + mongodb = MongoDB("MongoDB") + metabase = Metabase("Metabase") + + custom_icon >> python_code >> mongodb >> metabase diff --git a/_posts/2023-10-20-rpi-iot-dht1122-mongo.md b/_posts/2023-10-20-rpi-iot-dht1122-mongo.md index 87fe3cc..662c4e1 100644 --- a/_posts/2023-10-20-rpi-iot-dht1122-mongo.md +++ b/_posts/2023-10-20-rpi-iot-dht1122-mongo.md @@ -14,8 +14,6 @@ In this project we will be collecting **Temperature and Humidity Data** from a D The data store will be in MongoDB, which will live in a Docker container. - - ## Before Starting @@ -25,6 +23,9 @@ The data store will be in MongoDB, which will live in a Docker container. | `DHT11` or `DHT22` ✓ | Dockerfile | Metabase | | `Wires` ✓ | Docker-compose Stack | Docker Container | +![Desktop View](/img/RPi4-DHT22-FlowChart.png){: width="972" height="589" } +_From DHT sensor to Metabase - Our Workflow_ + > We can use Raspberry Pi 64 bits for this project. Or to run the Python script in a 32bits RPi and Mongo Docker image in ARM64/X86. We can use unofficial apcheamitru/arm32v7-mongo image as well {: .prompt-info } diff --git a/_posts/2024-01-01-ML-rpi.md b/_posts/2024-01-01-ML-rpi.md new file mode 100644 index 0000000..2492a24 --- /dev/null +++ b/_posts/2024-01-01-ML-rpi.md @@ -0,0 +1,23 @@ +--- +title: Machine Learning on SBCs +author: JAlcocerT +date: 2024-01-01 00:10:00 +0800 +categories: [IoT & Data Analytics] +tags: [Sensors,Python,MongoDB] +image: + path: /img/metabase.png + alt: IoT Project with Python, MongoDB, DHT11/22 sensors and Metabase. +render_with_liquid: false +--- + + +## RPi with Vision + + +## FAQ + + +### BI Tools for EDA + +* +* \ No newline at end of file diff --git a/_posts/2024-01-01-MLOps.md b/_posts/2024-01-01-MLOps.md new file mode 100644 index 0000000..efe928d --- /dev/null +++ b/_posts/2024-01-01-MLOps.md @@ -0,0 +1,83 @@ +--- +title: Machine Learning Ops with SBCs +author: JAlcocerT +date: 2024-01-01 00:10:00 +0800 +categories: [IoT & Data Analytics] +tags: [Sensors,Python,MongoDB] +image: + path: /img/metabase.png + alt: IoT Project with Python, MongoDB, DHT11/22 sensors and Metabase. +render_with_liquid: false +--- + + + + +## Gitea + +* + +## Jenkins + + + +## SonarQube + +GitHub Actions can be used to trigger SonarQube scans on various events like push or pull requests. +You can add a step in your GitHub Actions workflow to run the SonarQube scanner. This involves setting up the SonarQube server details and running the analysis as part of your GitHub Actions pipeline. + +### SQ with Jenkins + +Jenkins offers a SonarQube plugin that allows for easy integration. + +Once the plugin is installed, you can configure a Jenkins job to trigger SonarQube scans. This can include providing the SonarQube server configuration and specifying the project key and token in the job configuration. + +### SQ with Gitea +While Gitea does not have direct plugin support like Jenkins, you can still integrate SonarQube into your Gitea pipelines using webhook triggers or by manually configuring CI/CD tools (like Drone, which integrates with Gitea) to run SonarQube scans. + +Webhooks: Use webhooks in Gitea to trigger external CI/CD tools on events like push or pull requests. +CI/CD Tool: In your CI/CD pipeline configuration (like a .drone.yml file for Drone CI), add steps to execute the SonarQube scanner. + + +## Cortex + +Open Source Alternative To AWS SageMaker + +Production infrastructure for machine learning at scale + + +* +* + + + + +## FAQ + +### What are microservices? + +### What are Web-Hooks? + +A webhook is like a doorbell. When certain events happen in one system (like a new post on a blog or a new commit in a repository), it automatically sends a notification to another system. It's a way for apps to provide other applications with real-time information. + +* How It Works: A webhook delivers data to other applications as it happens, meaning you get data immediately. You set up a webhook by providing a URL to the system you want to receive the notifications. When an event occurs, the system makes an HTTP request (usually POST) to the URL you provided. +* Use Case Example: A common use of webhooks is in Continuous Integration/Continuous Deployment (CI/CD) pipelines. For example, GitHub can use a webhook to notify a CI server like Jenkins to start a new build whenever code is pushed to a repository. + +### What are API calls? + +An API call is like making a phone call to a specific service. You request the information or service you need, and the system responds back. It's a way for applications to interact and request data from each other. + +* How It Works: An API call is a manual process; you have to make the request to get the data. It’s like asking, "Do you have any new data?" The request is usually made via HTTP (GET, POST, PUT, DELETE), and the server processes the request and sends back a response. +* Use Case Example: If you have an application that needs to get the latest weather data, it can make an API call to a weather service. The application sends a request, and the weather service responds with the latest weather information. + +### WebHooks vs API Calls + +* Initiation: + * Webhook: Automatically initiated by the source system when an event occurs. + * API Call: Manually initiated by the requesting system. +* Purpose: + * Webhook: Used for real-time notifications. + * API Call: Used for requesting or sending data on demand. +* Direction: + * Webhook: One-way from the source to the receiver. + * API Call: Two-way communication between the requester and the server. \ No newline at end of file diff --git a/_posts/2024-01-01-kubernetes-rpi.md b/_posts/2024-01-01-kubernetes-rpi.md new file mode 100644 index 0000000..c3cf263 --- /dev/null +++ b/_posts/2024-01-01-kubernetes-rpi.md @@ -0,0 +1,145 @@ +--- +title: Deploying Kubernetes in SBCs - K3s +author: JAlcocerT +date: 2024-01-01 00:10:00 +0800 +categories: [IoT & Data Analytics] +tags: [Sensors,Python,MongoDB] +image: + path: /img/metabase.png + alt: IoT Project with Python, MongoDB, DHT11/22 sensors and Metabase. +render_with_liquid: false +--- + +Kubernetes - A tool to manage and automate automated workflows in the cloud. It orchestrates the infrastructure to accomodate the changes in workload. + +The developer just need to define a yml with the desired state of your K8s cluster. + +In this project we will be collecting **Temperature and Humidity Data** from a DHT11 or a DHT22 Sensor working together with a Raspberry Pi. + +The data store will be in MongoDB, which will live in a Docker container. + +Rancher is an open source container management platform built for organizations that deploy containers in production. Rancher makes it easy to run Kubernetes everywhere, meet IT requirements, and empower DevOps teams. + +## Rancher: k3s + +Setting up a High-availability K3s Kubernetes Cluster for Rancher. + +We just need to [have Docker installed](https://jalcocert.github.io/RPi/posts/selfhosting-with-docker/) and thanks to Rancher we can **run our own Kubernetes Cluster**. + +* +* +* + +### Master Node + + + +```yml +version: '3' +services: + k3s: + image: rancher/k3s + container_name: k3s + privileged: true + volumes: + - k3s-server:/var/lib/rancher/k3s + ports: + - "6443:6443" + restart: unless-stopped + +volumes: + k3s-server: + +#docker run -d --name k3s --privileged rancher/k3s + +``` + + +## Using kubectl + +**kubectl** is a command-line tool that allows you to run commands against Kubernetes clusters. + +It is the primary tool for interacting with and managing Kubernetes clusters, providing a versatile way to handle all aspects of cluster operations. + +Common kubectl Commands +kubectl get pods: Lists all pods in the current namespace. +kubectl create -f : Creates a resource specified in a YAML or JSON file. +kubectl apply -f : Applies changes to a resource from a file. +kubectl delete -f : Deletes a resource specified in a file. +kubectl describe : Shows detailed information about a specific resource. +kubectl logs : Retrieves logs from a specific pod. +kubectl exec -it -- /bin/bash: Executes a command, like opening a bash shell, in a specific container of a pod. + +### Slaves + + +## FAQ + +### What are K8s PODs? + +### Master and Nodes with Differente CPU archs? + +### Rancher Alternatives + +* +* + +### What is it Kubeflow? + +* Kubeflow is the machine learning toolkit for Kubernetes: + * + * + +Kubeflow is an **open-source platform for machine learning and MLOps on Kubernetes**. + +It was introduced by Google in 2017 and has since grown to include many other contributors and projects. + +Kubeflow aims to make deployments of machine learning workflows on Kubernetes simple, portable and scalable3. Kubeflow offers services for creating and managing Jupyter notebooks, TensorFlow training, model serving, and pipelines across different frameworks and infrastructures3. + +Purpose: Kubeflow is an open-source project designed to make deployments of machine learning (ML) workflows on Kubernetes easier, scalable, and more flexible. + +Scope: It encompasses a broader range of ML lifecycle stages, including preparing data, training models, serving models, and managing workflows. + +Kubernetes-Based: It’s specifically built for Kubernetes, leveraging its capabilities for managing complex, distributed systems. + +Components: Kubeflow includes various components like Pipelines, Katib for hyperparameter tuning, KFServing for model serving, and integration with Jupyter notebooks. + +Target Users: It's more suitable for organizations and teams looking to deploy and manage ML workloads at scale in a Kubernetes environment. + +### What it is MLFlow? + +* +* + +Purpose: MLflow is an open-source platform primarily for managing the end-to-end machine learning lifecycle, focusing on tracking experiments, packaging code into reproducible runs, and sharing and deploying models. + +Scope: It’s more focused on the experiment tracking, model versioning, and serving aspects of the ML lifecycle. + +Platform-Agnostic: MLflow is designed to work across various environments and platforms. It's not tied to Kubernetes and can run on any system where Python is supported. + +Components: Key components of MLflow include MLflow Tracking, MLflow Projects, MLflow Models, and MLflow Registry. + +Target Users: It's suitable for both individual practitioners and teams, facilitating the tracking and sharing of experiments, models, and workflows. + +While they serve different purposes, Kubeflow and MLflow can be used together in a larger ML system. + +For instance, you might use MLflow to track experiments and manage model versions, and then deploy these models at scale using Kubeflow on a Kubernetes cluster. + +Such integration would leverage the strengths of both platforms: MLflow for experiment tracking and Kubeflow for scalable, Kubernetes-based deployment and management of ML workflows. +In summary, while Kubeflow and MLflow are not directly related and serve different aspects of the ML workflow, they can be complementary in a comprehensive ML operations (MLOps) strategy. + +### Kustomize + +* What It Is: Kustomize is a standalone tool to customize Kubernetes objects through a declarative configuration file. It's also part of kubectl since v1.14. +* Usage in DevOps/MLOps: +* Configuration Management: Manage Kubernetes resource configurations without templating. +* Environment-Specific Adjustments: Customize applications for different environments without altering the base resource definitions. +* Overlay Approach: Overlay different configurations (e.g., patches) over a base configuration, allowing for reusability and simplicity. + + +### Useful Videos to Learn more about K8s + +* +* +* +* \ No newline at end of file diff --git a/img/RPi4-DHT22-FlowChart.png b/img/RPi4-DHT22-FlowChart.png new file mode 100644 index 0000000000000000000000000000000000000000..8bae47a22505cd7d7dc2a9aaa997c9f70470b825 GIT binary patch literal 44226 zcmeFYhgZ_?`#)}(X_ng1+*)e6O3S^iOw9!@P;q4r+{HqIdS`=*XMlyh~GJHI0v5GJb6AZ?)w^#>v3K8Cw+h>13d>l6%`eO){EzcR8*II zsHiTQ(p{#E{BcKrrMz8!rK9ipj`w+WR*MRkWt>-kgTK=|5pz~}j87?Iq+vpSXJ z?;u08nrfPEdi~?Vou{uab@2%~7*?}I)d*CX=DW$ikSTRcTN0`328q7a|^m0>X#%(5>OYyvQ=OErX02lxyzn{KxJQ>o0UUWDjwEW$j z>TxBbTKdV4`{V^FvQZua-+4ohl`sC^2Ul(z#{Z6O#GXH|LMg4 zOyPe{;XhySKU4UhDg6K16bi{96h&UUM=I=uL?jqpH;YIB4V=*Nmv*+3HAlM?1WE9+ z6u5w(pnR8n?M7q!i^PP-i3xTw2~dH4N$n7XA;O?rvb#_TiAPA39PnpvCu@al&))iH z99eul7pRns;XdApx{{{LEM}#dyd^6iAehS{BNtPgo3;0zqy*=pdC?o1XqvpY10r_r^YXc~)ArM3=D3iR+j{AG9<&n7~i0A*x-Vx>G?%!DCDra(};wVe_x> zmDcliGht2!&_i?}EGEM&-=}<)Jt* zd@eIZ&TA=gqxf4_q4I*H@WK#+B2VNFdn|J$$3q8caLf<*Rvx_lgOAAKP*%f(Isj{=!u{%F+#z5-W50Rq)ubUKL^*iq-YlWP;3_=5E>h9=( zEE-SATm-K|gk-BNwm|4Z^l`$<)51G3^P1qNY#(F|=9wX)lW^yeO!o!2of~{sj$}8i z>#JLJ^F^Y^)C9BWEm}oHg2Zz25W+xaT{tO@8sR#D_f#pZ$Sb2rm&w(&`q$K;qy2-F zJY>LArQli39uT)&JUkx1`QVErwg;w`R%As;!-j!*!}d4V$evVGF9ce-sJ^KoZ~XkO zTX)-ps9Qel>(gAQ7!8`XEOYk96{Vodo%s!!)uUWXe-@#b`s$nIR*&b))~mKERzudL zN`nLzs+<@W@R?k~OPz1t#sRN6)eQ|)Y~AJN5OoX{Dz~_g9ednfO)Vhe`}ukF2s>uvzgC3?4xZ3ITL^E=VTZjQkf z`M&~ErQ~nYDhe_(uFelqD|mT6ANSQBuSR{<7F1!)V@%|$%sV^jB@Q{m%=+Y~A%W)N z)`x{*yKOBkL^W!vJ6`|P>(emW--$*c_6|bA&m}K^r#8*+Y(G(K%4*QL*Mr=UFud^; z?`-9&%T>ijXhy*pY=fg+E&9dW|N0X~){CZpn)dxHeI>1)0D4%7mU)ZyVfGQumXj+( z#c}Dg$s>&rjMqrg;2x2Mpmmn2*8+3}PjZ@fKO7ycrwwaMVycc-uZ9IdR{!?$XuRFLc;K7y>EQ=QCM>s>1}0WI3x1RvMcA}1MOT*r+M z5~K1oc_XjnhYahmSw5omN{s@lQBukMoqF0oB3v8BC7&|#7=v00Rbg|odu=W`Tz?fE z_6V$J#+yMWioPqIJI9ZnQBfs!O>SPGqWWTqc_|Q6=H3U|-A0-<1%+tUvWh@3hu(ng z9>_~uObQO%Cm+`x` zk{;g=8(fBuF21Vk`@Wlzx}f0iGd)R|CQUqzs{;2a$T!r)Lt~W0vBM=Y7cCocx&6&y zmLv}`$2?;bB#%^LQguoZr^X`BL1IfHZWli?g~8OAB{)btbp@s#G%2rR?)y-r(D~I99*hbkO~E;Yu*& z%&W-yjR!xCs`y-3)NAIn$+zOBHY>b7+FH19q`F)-)sS^C+1);z4Bjf?S9kehKY zLeCU~oPdYz;Li03tm2GQC^Bk9zSLyqD4BlT=5#9HEPngirtC$kFE=Po=m}pnibq=1 z9v!QH6&c9BT?^ITI$ftv!7UrLxk5SwBX@f~Q3sQ6B?bF>n^J7}PGzPQcIC*`tlSbY z`mE$WsSvkccFaC6)#AK=@ToLLpj587UcLeC%s+78Y1OYHQ{t-N$4j90?|bD3<~2w z+j(h4A30L8PDnS@DEMUHOY_3~Q)QT|uHgMhU&?eTu$U|cwhOt%tb`ROLw(&GK(eIn zD3cE>@S5uE$PO6z$4YHu5YfjE@W&ZU$6mGJouYB4c1^0vc(BJ%J*hyQVL?(msHn+U z@e4sa*8a4i{KUGx#`7te!w~}A`{Waz>#BgtIY`Yh>7FYQp`tqdD=t8F=LX!OK{W;k zMh54OkJNX^K1s|x_0(S+A1@7LNIE7LW!FCM&crs%w%kI*58$Cu+vK}YW$jU@* zenX@49S4ucC|yv&Vi%_r$lrhc%;6T)CA+l~Z9$f9Fa(t>)*fGSn!Ld58D18>i}E-r znn@4FZEnwz`96lic7L^C)5KsF39&M&R8+46*#6Tsd10&55-7cqPku_|Rd#Mp@s$Bb zt8rcQxYC%gca1WOPNE@V(D81;58I&F+g07Qq83MG&vAboH%JMtZmM{T>{29zsrm~9 zR5Ge>hnY>OvuN=b_=ffLK02A?C6p3Wg;&=WX0F+&k7kiy?Hj4G z^zs8tGqGGUkPOY|qYdfkTJBzx-6eU1J^$mM#!P(m+tev}SF!vgN(`7Yc}8`CD)8eC z3W&Wa;%=x^OxAGB=6D0TuCXrsVvF9ynN|T))ZM3LW5=Qae#$I7u`PvEw%BsE^ki0z z6!Najwqbe0xZi2$2WUCRS%dh?+>TAFVz(;}hmz0MN#SNjzhrA*+!SX5elJf6-OkdN zHW(hk3nBbg>(1^tthe%KUJZ)Fo%PQ4--JJ^gghYlg*2BfIP)`xyH24TEGv4N!1L7r zUm%P8DLQ1dufj-K`}MlxduiBORtxs9dsvyfCHs+PqPtilk{GmLU9yrUOJt`k9@T$n zCC}3D7A0uo@>Z)#>*cK})}N=X{MoO!y`#Mv_3|)pr1vm!<}0o^1BvG2?BGX06@-mQK=g%Hfp`h?>Ok0&LwXWZzF(~{|KtqA6+R|x{JT4{N{>5NfUsV=O!5b#% zE*X=UmC%auu&ptJ8~BPmTceyaxoJ+B7LS3tdYOh^GPQqK?}F&j&j?~exzChN`W$@3 zI{Q2wq2voD1}%QrTs@+|$A47a9j{r|x7borg^$avxR}SiDsq5;+ugy3`FPA>C6B69 zp_(nt!jQ1~s8blOs00~>?JHYpx6oP${^E~qhWYFl@S*%3=os6agWgr1txdInq`$T- z1IR~{*Pl0sZH|N&Bxxc>wy1$q1U3p1l=!EZuh9a8wg(KGw-!$7o*|o3ZpQcDLcYQTBS9crW*~|lgEvIxJ*up)(g!On zbeW;F`Sp95Kuq}#(*3!fcB-P@uW5f|r?>JX?EL(&yY#c` zl!p=^LgGfsDA>?WSMu31owBY^1bT60ZtH_U{|n)Mp@pC=lJU-uX!2gBmu{nnPuB85 z@bvzH|7!Y~5u&*B`;WPkVUykV;WYoXP_j`5-q0<1m$v*Ylf%Z1R^t-YlgfYW>`ipT z2R)Zh8*<;AXq30sM7HDm+I;k%>3a2bDF|2A zC_n60KnYb=j&>^uu9m?qPH>jzgA=mOo5Zcb36G@pEyE>C{#z{afn%Y2qa(j{I5M98TH+ z_p`+^ODM>w6dGy5)JMCM>QQnS)nAuoE&J1^kL$6`N-m{VDK5NL1W91k<*nVsH0Bz2hO6J|Uy!j7+y>G&mUUM*h z;iPTjo|>X7)PaKk663WJxy><0_P;6}#r*nC;F*})RSGgz#&#I`4C4j`6s|kj#iZVK zP6S5YWI#Y_vy0M1qWDT7{2x(P>XUU=q{Es@b1p{=ja1VGV-gn7-jH_Z!xLJUx5at= z7Kg=U4Jh6Bq4JsFJPwI!WaZt7kUT-P_qR!2FAD%88=^=_Z#T$uVNABa znnU->_x?b`Ed-fVYbnXO|9hO5IzSa*NC`Z7AQd&zwcptvDY*EH3j|+cq4~0+W){Ei z%QMGbkY}Mm!4|iE$d5mL(cZ#`WRlyLYW0u?Yx`9g;LU!313yzLaZw*Kww%TsLwmpnkjX53&+k?Y>I?U^{2 zO!JbG2|AYd2IqoP)M`Z-lX+jlqAwT0J!Wkp<%Jl!OWj@=l3Jl-IQ&@&=*;&gc??_YAKh~2wXjq^74DQ)fSV#0u3n!)I1N&+mc8k42a-mt55cb&l7 zj)6JL@NYPoG>#a!*9Es%V+q0fy)HAE<|Eq3yQu?yXNQ9*K zUadWcNui^eLgnZ~lK;d;E90~c+2o~L^>r2^ zQ@a^3#xRUA^*>Gs_ayd_q4LMkix~_=%QcLH6ODZKUCncmGzN`^?^W}A7lt64a|h9F zhI&4wpu?xtGTca)rx@l9dl6R?4SWA0cech5MnQ%m zydPx$G!B2|{vbbIV7T}>S%ukTCEYhvZ02%U@k7GmUi+{M#ehThM_k00k8{qQxK;li zP~6p5aVLtSZo^|PcNHC&Uu!h_2bTPMAnE`vE~#gw$jWk^02ALJXY~Nq(o6`tWRVsv zE9!00a^2SQ+mPVFQm03KCWFVG5|*@I@6h(HNDt%2gaQ3vVtH?FmUz7VaTEZ3Lm(d**+NOd$ikSc3jyn zmFGwHbDi3#t1&jHIt!x&4@?$fh-KHciVynR^l}6U;GHo4tc#{sZ~cwi-}K;iyH!JD zXM|{CKB{o7z%aPcEH8;7@7;M#KiJL&Yry%lh65i8qWP7kTCy2_h5~gmu21;AZu+dn z&aj{~LXG;8u@rcp(R-UczU%!rMYew|S#ulvQ;X93%x!Vl(Q;Vvtxm^Jxem<+&pq|{8p!+ zmUA!$p6iOu(IZ0D`-;c`KcB2?q;D}-AJ}k6H#`r>!S4a|T-Kp;{WUxvo{pxSuy^I8 zXfTt1Yca@DbBp-$$WXj~eMO)bp}cBR{0S87u{yObzI+OV^@~|w8G~gQTfDK&N-0L< z0U7^8q%ddD{G~k52$OV`#YkI&XuT)YjMZIydBWAKW_+?8hdTUgCe;X$2VR5hO zaD9DBIrnC9fVkqzmN147Asds8e9$M~hDpioY;}F^8QC_&xh0OUj#3AEAlnD|KiU?b zl6azj?drW-z*0f9yrz66Vet5@Q_8h8imZsFt0%pD9 ztCVD9e;(3+%LM(0$?AqI|1nmpgo{)!%MDl=sJ;qrCG(&wEB%$e{(aG zFj*S7FgiO~U*)SOcpouQAUd1p>(S zI2Ey)QFDs20!qxf{URLE3-vRNxI&6?;~-ZvkBe<1hpbFS1yJb4v-s&(d%Z9Q475JO z?ZqGXFk76-*KRSLna{~0Gac$*h}wJhdTH+K}Lvxn(ikJ)TzK^5NYz|+Xvv_=Ukrw%9Sspy1C;ewsrmBu6SQGp&5^4X}T4C~g5#$Of}TuBt$X*lFIB>)xL{mCpkG z_W0wo>6KCT_KyDjB=7(!c-a?Xz$TKSEn1n-x+!09D?nesjCS}#4fZ6-q^OxW>-l>xm& zp{JELiq7Yzd!9l;TXzoyq;$y3!xkopOPbav$J^JYX}(B;UBE4S+lgn3hUzvQyMGja z<%#tl9EmskSZu-?zhGC|nX*L~CikEUXSK#6B8=w2KQiukqmKXv9e%Eqss^f)oke1% z-nJ|W%^<3}awaQL4akd?O4h+#br4}FB_5n4TGbnamqyQ)zcw*1b;p$FoDY1RA=^DR z@Nl`vq}a;!k~*jPxTqO=7>|3oomr`V+P(Dfw6-?RWpN=oGb;<9r}jZgRu=W+1Cxuh zvvx-uH-4l()TgRSA@FbR;^Lz3eCLhco}Q(@3H+Ja*&_)*K1eIdq6#$QS0;9= z<9OurT_h#9))#}Ydcbn-fThnxPzT?&B?Gvq5ilg9Vgb7Z#ARN0@-*nPmo4V<8frSO~EGlcdu;! zs;jWL)<2;bc~u&r#Bimt?!71fl|8^xwT4C|i=r`nK@J$^lNtSls=c`ywxy|lq(VP_ zC1(!KJc4Yu6!uXQxhZpU+orn6cWgsFMkJ8l7Us&81QgCH(yHOMdyP z2WXT={-M#YH)r#rqQTqxfF!k&{rye_5NwhRtndSXtU0=LO5*I=cO=9`0zUxyhp};SE87ddI5>DlQ+}oG8I_P-M7me3 zjR8x#^;m1(7GypjC>zysJWMNDn`jH!1kC$9#(3~^D_z_i%zHsjP=9qx=&vdwT-bL z%sJhAq>Qf^g8rv3)s2yo-B*UMDQtwQwh( zIe$}OrywN2K&iSr_C>iRM&yh8%araBd215~j?7SJ%&W&SvjcY5N$|J&+V+G#4hYKe zi4cDF1Ax8Xmqs%7i*?RWNf2S9UzG^!*egBRD#dVBg-dNL$4U96z) z?f?`pXLM}}4v_9YA2tFy+1NZ41ZEFSQAQ9-B|CqMfhdqo*UVUy|>-Z20945``@0D)+TF+@igSoH8AJW*-bJ zU-n-ic}MpV4>MJKk3M8LM;wE9vKN2-iNwdAbUNi#gO?ZK%x>H91xdqMlXB4E>_W0U zR1V!8At&c07dRdssr(D8Vu3(*hU z3sphhq4QPRscyY9P~jUoU9gO&{JsN^V$n#5D*|+DB#1$yj@m|0dvg)@nphTh%~Rg3 zvswpi&Va-u*8dhE$^I_p<+lU@Yuf=_T9t--em>1*B@3A=Pdj$6@z-H%d1Y5=3TVst zpamkCnAiYIbpX-1&@HYO7!e1J8M2z{sq}b_H%rHFLSWGeGGE5_n*TtlTtp~0iSei`CmV>l$+&7QvKP2ItoyI_`)h^` znQZ!qrsHzA9eA4u zAHK~LZo%4TtzTymhe~AYl0-0as}!P$r|`4mmP5CQB=u}|)%@JU)ULPIgP5ZYRWqK3 zx?GR2UFmG#zj=*h)ayK1tL>B*B$APfSt8jN04<&tL5v&K3-)NP&_k zITB+_z4D`&A87r_Pv%K7%;=48qqeV;K~=U?q6kwzQsom1ms89$#evH|{l6=m2y*~^!W3xa^qxJNm+13zCczsUKi;j2H)PEVUgya28xEDAIW>J~;) zjy#4$iYmQ(1Gm@OpC`v>yYCgz#q9nl}N; za8db=Ku*x?ch=|Ne@P^|{BR_b!alSLon?3_t3tE*JI9Z_ws>z547iiDLO8miDZh#) zON->73&GUc(~kPHu09#tQOsf;M%es`K5N>BjlS&>*nwh8Ey1U6d3#uvyqg&)XK$!M zJfHf=Bma5%*a$8$L=5(S9uM%PogDXVOg_lvJ$3CC!s9!~*o0fYCoTx{F9fFw%1#`x z@t1twtKaA^j0szcxWUc6ey$QeA$jz7+(ua@gWD7QAC4c3Sv^~VRZN(T%)*o4QnHAl zw;V^?+YH&}O{G4i0e%Jb)f*NK+jp0ba4z(3pAfK?M$8(PwjQxQ1@Zf~%O^6f$Lb0^ zU`n^ap`oQHi}l_eXIgm|2=IovYGAK8Atl=mPT17exxTZM!>7CiBEK#xq8n=)PX#4)@@lfDn zWX@6Q@&*ATOQmh3;T1-xZE>%@EC{n$xR;uHhSoWlVG+JcK2_;R&JLP zeaXLSCD%Twd(8cJ<2c4Cb-udj-g-xph9GzN{0&T5*;0Zgj{*O>uxqp28l0EAzr^Zl zey|C8#WilKfnn1Xq&jR-f<O>Jlc$n$Fy(`ZtHexErbnYbQLc+h%$(x1}vQ zWsVo0dt+~#^z8b#O$~YlxmY*6h|)Hc6IbsDSk4@K*eCxGOs+ZH3ae}IHrmTAdRFuG zu2L-O+2H{gG9boDZ<0f)-F3of!Y3-zteM1)?D_pn&$bX6XTPVT8fxm%DtlO8?K#MC}EiLih*}os(Rzf;EmLuHp0&txpZu>Z~?3n4rG5fy! zn)^)V7Hwr;+9&PA((XF__PT=?vM(*DJI0|(O~h4ydw^ummD~3SV}Bq2{%&-&8!ZJU zhp>gb^52U)DaO8~^YJ`~q{wZCSB{mdo?h-~%hN`eIymf58zIL1?PEw8ZhAi+wL88N zLXuTM$$kJ0PFfABeb#^JPoT3we>-B)4|At*l?DT9tbbjYoYLxcqQjveDk)#aLbHm6 zmB|&64+5(7<*)?p)0|L3BnuOck3>4Oo&t*;_HZDa$W*>mj0c>~K}ac{L&f2LHrTZiiG1*`R$DertIFXQF_ zbtWFg`_xbthghEQS+7`9l6((S=E`Lvewh$ z&LI7%V_S0OuTKHsb9P(bQ19oPAxB>UTpZC^9`*V%=r$JlKZ(rP_PaVBfsID>MR@hz zsN5)K1}iixQ&F%f==yrc?$^_x2s!imDse*F4+@!Ddz%`z7Ys5IO`vBlfX0z_H*V1| zkdD*r6iLR;a@j5Bgx-iJiTEU19|a$&(u8NuKZsGq>>To}z`BVtD1c3V+KS#c44sG6 zF5b$kMkuD@`R6kH-_7mKB`s>_&3v64=+Vx7){e((Rw)Dtp+X~#X#)o+6+lie0DlQw z>`a{3;C|A`)$=vp7iW;2-+=W=WpOy-MeK_5j}GbNhb}W(dtYW)F55T8Fp?NoPUqrR zt0Yw-mGxHYhUS*Sc*J{}Di1OB^MTZJDsNuA93aVg8fVq^UNKS(!Py0tE zh`YM|Ybt4wH+ua`AvuL8BaK`9>f9=i3XS4*S3cR!aXehKw-Yc=xWYQS@ZHVKyLkfU zRx{n<_^sxt-d%W7885KH`_IwN?>FEr9r|@e()r{wCx?~~uRlC-%>Ktuw2)U4Z+9Cs zbT1}(u)$W7XegaVx=Wrp_RSs-X^vw1#g|W}>rWo32&L`swiX1Pl6aMJJB}Zmt_x67 z-{6-EnGur+FYO@1$0XrtR5j{`0&FEV@$AQHDMaW)r5KhflS_M5a7Grr8RBnesb;$h zZw@Ocif?QzoYZ;RAORK184Ac@ALd_!IX)e|F!uDl{5J=9(p5fgAnR@uEzo6Q z(bs2Z!WiAhQl<;78Vr1wnwI9bGAtZnQ+#+B6k#*Q_&$zHKA+VpFmFy8yki;YLU_nJ zGm?Yy2~LBG!6{O$NKt>~VrCDS@qWIsvg;SnZ1O(g1K4Ideq5!8wc@t z`1XbenIDx#M2qBX?OKPC-_vK{=(9&MN6Jq}-iiSNOj@O%m5N)JqBqP>fvUcywh~qbtbrSCY9P?99-t<#?rX<&7IRr5EhbyOFiN zmx}k{4xgMaR$YaZJzsYN7}oJDi?`IFlM}-BCp&1d!!$29DQ=F_%djsN1?8aGtZaSEa&dkg-EVyy5X7%8=o6#>_&X{aX74UqQ2c>kWsC#|BDb_hmOg(AvDjrh&y?>56rZjX^DC;0N z+wR6OFxNV2BqpB*v}=POvb2!f$vDGWYM*U!%hHvQ9PUw{jyc&v zxX;lLZl(SX3g5OIY1IH3B&*5}%{Wjv*30LXv1P+_$Y+{Q`@N-y1c?u7-@&b#t9rrc>|!f#bKgE1egj z0Pkrmfh51l0he-A z_TSOF6`sTXuvl7T47Dij)Pjm3O>0GaE`*jxe~Ys-Omn}C+Lc>oLAptfgWlTR(}vQHivULSXm`jUc%AD2vxpH;L=g#)tm zx~8!vsHp~jNk2bX{r*BD4iP&)&+1|*k7}W0JkM~Frr_?+K`)ldUekLMc)c*E1m zdE%#I!kRrY*(XX3uD@j%#?)e1m!I$_@06!Kj*eW?pD?&l?K7dvUo0GR5vkk?Z@T?H zul14f-JG?k$&uhf&gk!v=Y`3fU|H4^|MXk(1+tr?lOAV#x1Ix7i#U#&p_&t$Pv0j* z@9Z#$-F^-TsvT8@`b!TFcmHVS8K`7N~RrN{Z&m^A3+wrc?uwqz&o>XK80oY z{!1W`2E5rFub`YrIRCQib@~wjk)3&$ao1jwJt%K5J~n4WST^4)4KxDYdv^9E?B#)7 z!{(=i!R=kRJ66grX0XDxBN?#SmlHQ~XGpx!+ftJWK&hxG2A?ePL(I$uI#xhUbyEXL zKg>=8fbq@(O#z^1OjYIC4aNN}`+iM-*YLrAGEjSCpKQ&$75PZa&jAVRj2x3S7MP(R z>;82=(n?EH0K~AdLfWO|*p#H8h5##Oj2f-Red+LP{^`2c>fLLp8}NF>XtzoxGEUKg z6z5Ftf84toY(?4ckS(ztV?b%CO#`?Te;%24eA>Yjw_*w885!4Pa`G-K-um-wrx8q_ zhI|Qjo=W5hn4J_``MTjiBwVPitp<|L6$Qs%thU@>LJ`mATJ+h>n#h*WT`Uwa`erbp zmnrzk_$mGGec|4%g2=LH8R88^tTA@UuXjA~bq>r2@`MX#-mgnHX`z@oR3N+kv6=ECI)i(t zA{g<^hLb5YL?mxS6=tgyR-ao^=cF8TV(_qU#sK?>Z?$X#%s=8n+pY#V(q@d%t~T+HhHWi%Qc z4r-TFXR*|t4BoC=AQWU9m06hN;yp4)YNZ!j0WfdZ; zjAamU27J7+B^l`Ok}dMWrB=F6DXcG^Db&{|j$IX9H`5Big_Ljn>7J@;fP6}^{`~pE z!(tUmz$^OzJesyCRQG>^Z+9RVsZl2x9Fv~DA!#22*k9)dGqB{H4{W3pVH*RiP z4jp9lA$)1ZCThRN3I(F-dc_ z2gtu%SBbbT0VN2YN7+sINKxXNFK&RCk;k882Vr5Htwsx7{eEd4_+($0F7g|5v6Zm# zc_@S64&i1(m5|NqVm==|Jbd9MtC-c|j`a}-C+*QI1K&+CC69F!f8hSn%^YmnookD` zg|||3y5;q*M{>co?jgd?0to($8{=IY>scnlD36MRnps?fp^~4Bs+;cAx9_nk ziouO5HKS1twWxzu$)uQtOwCBYqK6w(;PbF*UoMc8^#i^9iremWnUJ0JP94Nlq= z4Z3foe>}4jHQBi}a=OF#jO)Ill2XsolH&+J%Je}#?tX^uC@PxG;rX0#d-0m$I$2^d z=yL;ys^&encixkM#dPnc3GJ!GgS-34V1tKOc(_&6{k;=Q)h%V+MN(c-N`QW)ExyY) zF&NByo6fEz!3wvKE`Hy$KhILb>mPL;{AA01=oSNvnYEjs(~)m{PVZ(u-_c$X3EY|= zv29%V1~~CU__Tnp{HhpNH=akg z-Ry7ne2YTB5{!pP12fZHV^u!ims>Lax#gl#rXHHe!WrTd*PQps9(n$j(O_ZNmpAl zU%4U7=vq1QbMu|C-i~~g$&LZ$=|YQ(tUk_Sfw)m6@|2H7op;0+t}A&shnFv3zoTUW zPj;y4$y*i%8OMFP)=#>BhgEZS%&`WMo^Mr{@>=X+e|ePeL+Z<}#^FHf#oZHWiRC%X?@2+s$jfZ(+;>Hoy_9p5 zZo{V6W2~Eg-uLG6_fb07*fhIwm$Y>q)`RS7{9d;9+WH|zJ8;| zb>>O((vyrw0FV5PVoB>lKoV@EH$r_rnI#?FRWbB?LM9Hm>;jY=NO)yy64^Wb&=+@5 zje;3AzayE-#l?avfUz3VH@s8hopKPSorBtW(qrI5Q?!+8icnMWgW>mH^Loql%+_y8 zP&TuQ*Y)0Hh}2@9&!@L(&Od1HcZ^%#a_!8><2-LNdeG-C1}XXL@a)GYBdEOpwp2J7 zS?=}HlU8$o(_u0-)^FjpNmezXenQ98fZ16u^`2_TA3oc;q|&AsdwU5*Y0^%L(BPUe zq5~n<%})%<+#kK|F8`=A57w}};+R!+u05-m889={Ix3dtk=^5MQ~kVkaEQNB~cmO`>4`eCKUGL&W0f!z&xpS$UGmM#)#)=8T+MoqdmFg)5yABiblUV?XqM=yV3;ghl=x)=AdpnRBD|_1!b1)4rCY zs#af+=0C}2b8%l6zKBp(9IJzo63g@0!?)_hXPC+E4_)r&trfYp#0sz( z2-6o;oNH^$|CFm~$4M(5PmT`~+n;D=HpfZ13CHWU-di3QuxQA%vNx-DRw<)<{isG7 zD<>e1uZQ|ef(*1$j2_JOM_$)`Eun6l{Lb;_+k^vy`fErX{l-i8uNIBn!IsUIj(!^# zy{B^em(|3BLG(S6)jy#Al^9pDwvyK_O#Ntz zqX&y~z^xuV&s#Qm?-zCo6DquT&f4dc0#2AcU~{Eo6@GY;a#xOi@KnXa@0ctYecn^* z=2B9l@=KSt?8!u~nR!W2jK@a-A(`j2L^;R09DIRg^<7@B)7~Olk={T47;~_Kk zI~UQ!xM#9PG2H@|z0|aj!08RCL&NuOPKj8=jZ=QQ)`=%Sxt^w9y%l}m#_X?<`UQ^8 zhGKC~ump1?Wow0=X2Av$r z0u1gD^lfbOZpix_R!haRmB94C{N9g*t_k5fRA(96~bB3$o&J6m`+`d)}K$@RrK zY;{Dr%Tq#xGIAOuN7K zd-Pq%(&oC=8x}DhnlUh3tbt9*e9rO*$aIg{^$lK_#tHa?596Nb{$Q5w?U$Mxk2S9^ z+Gx|HZ?{=rkBG_SV{Px4WiF+$=r}doVhi8ziQbY$GmJ^4*IW$xZ4T5=Fg2b)1@_ml z+p^zzpeo`6%(!lU$41@}Q#z}wKCI>ZK`GN~McmMmaL-0?Wi;`Hz|!VsJV^xQt9&@0 z^aSpm1VDME7RM}=qye{#cn_Vhj0{_C;X)FDfA56ZMD3rjL9gh;%*X5PIlF9$vvFt4 z9)Z0sX?9jNHjbE&d}>fl&JW~`+0=I-jvj6oe$Und@>zyibu7<5!k5vYt!dr<3awxn z+FD;PPZwG9khx;G?hs}sNUHs3$%{d`_qN53T=`nM>1r8D=@;9Xzdc`=d(7ZuQdQ=L zHLi$IvJSd0F(R?j%~pNo@%`sFo*7?CiYM^?T)p1|KELg^&`)?({9W&(AsXIJJz48M zJ1}Fp#yizq^h^90aFehNe%fQkZ87;{$or^a^veT1W{p6^uYVAsGTc+|Xo2qSow9rL zle*V4J^%iG+Wa>{{4aro_-&Z1b^|4Arkx}sbLi>c@}7P8;P;aU1lJr-xeOOX?xZFu-R({pjr`EPx~f6uBq8nR($C^Fg!Q$J9^LI|%?LW66lh(44PVuWoBLhw zwa0>FetP|poLpxl17~_>W-A$%*!BNW^%X#IZB3XFoFuqwaCg@b+?_!~aCi6MKDcXu z!CeN2;O_3h-Q9P1@BLf5Q&TlncdqvNy8CN6=WcaId103SXdRUI+@r)M3_G<%(%~7) z6$Z>Z{6%gRidi~}{(Yl145D35fOlI;TdOu!LbW!eD}&DsNt6jAeS~ei{=2Hdk5F6e zilkc+U8(-HKp)BA%u?24aQE!y2Vs)~Y`N9?Y_}htK}dv0}~7u58*g& zZf#9Z8NQqnk)@~;Q5?flMjDiT4@^~Ul5(L(k}hlQPftTBWADYrUkanuI9{pSq19kl zLik(}0i%si8)J)+#;c?0X|WoiBfOwnVj0kmd;tpiJrJ#LYAUT+OTLp;z>`Gn(?^%> z&&nWzYDcUXb|*b`g9Sf-HK$m~ek9Z2`iO)itC zgHqspDZ+AT;7`8nQS$>y27IuK;MEN|V<3Z!GIOmQdEB!7PtM?*6XR@~6I*A{#* zYGb#}eISppM>1pU;P8vKj=O4)cyVl|=@~)r3LXzvLtQw5msJCp-3lLPdqdn7nxN%F z$2ONLHMXzmr%p+g_`YPm!2oQu?hgp8UU}wolMPqgQFgPNsg3fgBN;;$g`))r-YRoS zw@-9MR^gZ_GI6?CDb{s~Y#@y6i?PYIr5<|N8(Z5kxyhnKtY$!JURrMrK-g6?153J7 zR!{39qdJx9Pc_}m(emK>bMrzSr01*d1q#e6Ec)`KmCNVFA>U>=PIFV_wo6aH+)T+| z!fp4JX-gVK5vp)ryf3Y5m@DGb8c)imgFMjAxj_V5XmDz|m4Cp)+U7Uu%+obKPCv$H z5ED&bILpV4Gzy@o^=7)q}0-uGX z{quKW6nTXvCpH{DPpoaGm)c3KWzU{wM^K@D9WT?H$xI@x+r(qn6!Y`oG#P3VBFyu6 zSxHfRS@|k%ix|1ZJ#F7AD15Ue36tVLVz|4cBb-bko-uiApU;g)=zua3pZkmYp@|Q6 zbs14>mkjQ)Wrj5xN=4I7E9{TWuh#&+=PR^j?OEsWUF3d4G!Ih|=uACiA*BHJWugHpP4Vg3UHk}=l!Bf_4T$USRG-_(1 z5>SyV!j$+brLHX1+d}rdIavhmmaklO-E#>lZMd}ACu}B#&3MK5BIc66oaqKpLkGbk z8CBwTM`;g4)6Tl4rEoP-hHSiKmL23+Mfe8mCT~T(It7HLqVC-*bqn&bb~MJ2wBLP0 zqW^3(o(o5Th$2*{ApRt)1NW6mB#)n;wAjRvW(!TXrIU3R(TS5i(}#TQegaic+j4i6 z->k@#9L@p`#Q{oB?$dj_&@)I+n5~v!18bwNNfhCBRr%cbN|k@#lMsV!q=S2QlG5y% z)OlxYaFoj?+9G`EjdPQ7*-_OZcdl5~(o}%nJ777AChMo_eu~$(4cLn>KRp#9PnP+c-1H zOF_YFYK|)>+oQnU`})_D&6cwxRuRPjHB4Tx&1Sv# zBqW`3dMB#DNH>g?F_~vIwVMnMQiL)1Q^%f>0+rSTAyQIPF_O`?Llw8Ss5x};azg9m zRGHSu_U6Uc!%PU7+doZa7)<>`6?eUgST+ z43j}&eZ8gIYWuj3ovcK+(M_Rrj$>go-Pj%91G7Brq&_!Q&u|>Jpv(fmz(C|)1d0;q ztxUumX&jT6ViOdl?WzZE>yZ%IUws$2F-!xEfX-1Fbr{ro@C~w6fNd%C)jin4)GG7r zI3|og=xohAcieR9kk0Oks0q2Ef1{?O;RsWw*C8T{e@yAm9{ixthJJomRFwZ+E--xa zJ>-Zmh~NEJi3mq`#O_{npM=U=Sh}Zt&bTu@ujO7Yk=8~-q%OpFbvs8Kb4H+?;b@eo z(9RzZs9zTB-M&sf{g%|e#kB-gmfa1p8Z{f%hF{)_wNK5=WF3U&_M z7?Wauz(Bd@AV-@#ptyJ8U6Uc1d>XyCvG;sJwK-lJYfU+RdhSQ`ydFH?FE=-m*LmcOErM$23rBm_G#t4QarA|Sx`+!gjZyQTp+q1+**p7 z?+&U_v6VS68ymaVek3=DCf+Y(ePAJwTnJf>koyodpphv^3EQ^&GZz62-^CTRUu%Zv zQG8!E*p!{nhnXi#iH74;`6u;=L79s!OV*~R8R|vu9G_RGb5(*Ev_ja1xvCJlFS7{f z9m0FxpeJ8}PA!;ZDzU=CU&>)rO{p@HXzw*BHwyWC?|cb?EQ6Ve0yp(N7{#k~_i8T> zpuW49;|h}0{!0ViA6-M6fD+wvO*5%RKC~OCd(X_-*;(_R5{s`1!+&`Q1HS`RXnG#k zZiT=$OC2`e8?PI?-X~bDn|LR!J5_-R9bk0$zDy2+a@sh4yg3F0+z|eRcYWYJ3;C+n zib!xRmY_vgvMnkCrJ{0FkD01s72WJ~A$KGReCdQllG8Vxu!IlCehJ9TCK;0n2jaBh z{lgBtKJXJ#x$&CgqPt4#ypoG?vBu=uM47p!vg+v|wvy~kQ&9_j9wkLZgFQjm$ix5~ z-Q1xU$C{WMc5C6h(p1X3+R6N;AJQ=wJHXOfdeL58AF&xfTT)UJ9X}={gdR$n%$4Rv z?h9#~4QSqhlih-br(>Ud1*-8XtB<=UD>8jZ_)zG(xzSPhykIg1O8TULVW{R5= z_}u7$La5v09u{1{!WC+gW~+K?_L}VEYX+iY+il&`(84ZrcS11`EBL-BLq~gb=dN#^ zt|CCg+4=U2c!h7go-vbY!p~~yX#h`9r9Jwb&qQprQm+dJfA^uwf}pPlOfb2x_U@$R zQuS$_=n1Dt<)Nt$Gm&VnT7nYav+sLJn2zoC>*q`cTUiwDVj&|%sdXMqdiW$@ggn3^ zHqWAu6{bspCklb#r{CB3qC4zq1a9`j)H%c*9ui&5qas%MH0Y7WfJ4m?6S>XH86VQm zJnwl3#P{G1f$>Y z(KE4mwiu}*77XssL1$BYx3;o7m08=s$Lt|8{5ul9B^9ViYgtAWRMXyPDXn-oaonI_lCn+)n#uBBbOy{UktHC6z(#A2%M{4TRb|9P>DpUVw}gogn2P+8*pTY6X! zyUnrHy6>u5t&*jTi+!O7Vz4_nwo=6*Qvz8RwF~iET2Hn{WWpUTK z+}=-IkQRT6tT6!5f@LD4!p=8F8b(sRKo{6~qA z#+|Oakh2@crpP947nF$-}h0AkKVI;X|bff z-sIVSo_;bYsZKU9`8E{#;!bv47ki}!rb+r<;VN3vHY@8odR-uZ$jPbM(dsb?$u)8E z+nAlRpK?upw~>D4chD-qL1Dw#pouIVeZu}}(A=f<#qca+=h@k@dAVIshjN(ekIP|C zswQ388J-HMH0_CCw6TZFWxvImBA;z#;EP)5N92IIfEH3{y)WoN9E^WNP;x=2G)w`C z0h0(rlcrX`2brr#g+f9}WDH#m>=AG4PP=ct1O%?3<$${7z8Mmfow?R?Kh=n9`c_9AlQ=T_BXcm$cIMc7NWx(431Jqrk2ri_hGO?8P2 zT%f${4OEoR11E{h>RW$rF!+Th_ul)k*L;qh3m}W#|TF{ zOoI@T=bz@Ke5V-nM|sGP>n1nq9NadR!$ykYHSON}81#L?KU|y&fd2g*(7RKxIzO=H zX%gQjzdeBYy%sb-ZGFjKUu(Y$HdJON-#4#iLH8>>A)RqxYvZr+S34VD|5RRf_gFxQ zJsK1c(@}%*$a(ja=CQapINXw6Q%7=amLC?x#A5WUqem^_j@!KM+@>@hS9QO(y4*wL zV-T>bORWI+DN)TapACt?di~{@6*A|{ud?Z%QdBhJUnHQrr>SsQjWC+$!|Nlia`1x! ztc%@Q2S5?w<7hE;*qV3f+Cwj*=jp4rApPK33Zr*syU)=lk)Rl&R{zCGD1@HO8(;N8 z>YZ^a>*LkIUPoB0YSLPdq6<-Fd?Dp=awW0c94><Ur92_mXcEZKKOQGUM27W4XV**6LYwGM~dlQdr~(iqBD?Vq#;{$>R7V%we-S z+#899gM*`IZy&2))zISOs5i37i%DRX6@RKit2r`_RnAXR!17buNLWuMz=&F@O;&oc z$AK;)^bb@rRTM&Bwj+uRuqmE~dsmyVSVJx0;3uX!P9^Uq9E4BlSp=^Ri^*ww8H?`f z>?b!KuXw1rimi*~*Z1rQSDbFOx`=!-`RFM=l>wG$sG$^itN*Mo@VwlqWX~Kavb}4| zb$eXL{82;Olk%J7KK6G(kG?^3_>#!G;-6Y!GT%`|gZjHW$F=n%lqx|}+pn&b!8Ki? z4DtbYKz-=~$a-3_6)HmN{{IZjU#+05l{kYvDOzWAA?jaD`oo-_^-MBbR85ltFYx`C zAA5x{*4`JT=crl#oYUUN^douQ*UE}K?NFV~fz~`Z$<=D!mtD0^!om;r!Ye$a~P+TS!fS??&{h5MHx%E$(Pzukbq`{}a z@4lOTQGnBAwM<^O3$l0q{{BPfCYZB0Z6;GOH>Q#e^X@#VIdq59*r^NxBqrcpdT97L ziVRyjIsy|#QD_;i(6HXGxUgumV|wO&*69{smqvi=nthtz=Euy%wuaq?M|P+Rs*3D2 z?3*!`tt(?$=cq~%Il#x-6ZdL7EPbC6cBin zFbRr!;CG5!dV5Mo>o9oT`JAul%xNGV;{98&#}J`UB5~GiQZc!2(y%S~Ly?WitwFpZS(B+$EW&D-L5h57JUp?k0tLm+iSO%%NLik&K_17AkbIQa=s4!nER>T z`vfEXi_>(Z$W~~EkwIl&jg2Z0sN*gN95uBgn@6^{2BZ3%ScZ)u)5oBrT z^;Xj@!<_ySArZ2%v2o&s`v4^5AI#+UDE`3>rYFMVI3tPeaFC|IK;!)8xbs>{r3zJ8JaQo@k+GC%_j%EY@59D z$mLic(WOut^#csdVly*Yjm)WcnrGLsrZ^+A(Q#{y)uxOg2qbExK?~p>$M&{5G!pP? zOhDs~dadOhqhxF!2HyZK9dGEU0^vVt(t`6jE>n`)Wqqn61^I7e1)QD~C(FmaRYzvw zH>AZjO0~sP?l%O8;1dW03&!Wxv?sNX2>9pH1EX3x)#@WJL3C2o&IKNK$8ox(Oemo2 zfWs#AoL@Qcl9~)id}r@m*1TNs>;AgQXuF4Mu>$UYo^la+6s2itk-T&P@lQQFfetkm zduE5(j5C1xF((~umj}bSYPyHVM>89n0tl_0nGvOk(+Cx8tqeN1M9jD{m3FHw;1{E~ zlo3G@!Y;t3nI_3`+%W}=sI%E|AYuIO&t}3_j({d$^%zjoD=I1~DLI~}?c0wabvWV} zx36mXA?Z=3zP8B!zg~c&6M+_e{V&Ewxeh?fHds(zNJ*umAtFjtOZ>KOlsq#Z#$V0U z4uK@j)1k`7DWS282OtSmP*Ap~zFLtzXxG(EEao>h>Me6ONjU#he?yG^PpZHmst;B@ zps^Kh9_Zie12t}h+%el5uHQNp-wLzW<>>r49*M;XkiO-Z>p&yA<7}W(1Xa+s_9*gd_I#_GB=U!Pujdlz$%JU%nB9$;p$V}zI zbN{tVfs^LbHgiysmQ5?hsS4uSh|W*0aXyxfn9m>EDg^&@MYB$={i#^03_e}CJur`# z-R@kfri&dgyoOrB7B(@VOf*uYLWk%PY6|J!dECC)S`Z)4qyQj}`vUY!2|Lj$XX6#~ zXm|3ck%BU!*b<%lcmhpd<}0Q{aXr3lSMGqPG_L5>ymulc=7vkncu2bO3&#*njPeR( z!5il6BlSOa9vl7ml2w{>R3Pr^^_i!`fiX0ZA;#$Pyy&ruZf(`$j5 z1O!GQBm=@Dcfi1r7B)BNUnRnTfgK0!bo}izFQo2H1&v|I91m@o;HR#k_k!b}eeCvV zGBSI186UU47q*&8FA&DX#X;C7VXJ#sXeWBb$x0vwE(3a>o86Uu-SG`j;AE98Lm`x?Q?2#paR2#smL>G(Xe8?vw6PmCLx%O%XWC894EOSw;;;+)3=W=<3=L6#HK@Z1=F{Y%$*h>7-Om1O|S;%Pph)f(XDxkv7LTasydE`O-lwjE=aJ0d>ynml`IcAVR;zzZ0 z2mqqtbU94G`R^09xo>mj_E6K6HF|Y1c%Q$(E-Vs0?gi+%W>D03Mv4r&%#Ww+TbN9rags@xOE% z$#|l5VcEG}XAd1~s0CW^hnWFs#y)Eqw4^)92d{}3Wo#}d4FILm0CG}5*xin_27+(O zjQ`Gj&j(5dtOkQa$H4Xm;)A1#dtyI*?Dd&EA!tSX7*@RA?v03J*$Ofi1-RiOUFmN9 zC<`rBpDg{Ku6Os6_8`+)10HvVvGXBOpyh>$P82a5ZFmSbBxzx@^hiUv?0^JG`S?|$ zpY4%GMaxi7V}`#Yi<7*$v05*yaPNwExz`3_W%>9L!%0xY)q=s3D-#22uXhz=T#;Tk zDJCJEA%-lHGzpN3rT5lnr1Kh^*Kgd&zqRG?@3wqiy#$`tkyx3S6uh1$#RUf|T6X)A zwi@b`X5jJ=66+c!(>fy|6x>MK1u;o1-}U4Oxe32gF9bS$hcaN!{(P3MHDo6zSfg<| zGA)RQf8-seIs+HMUmL$}%+TRRAq6Vyr6-s+_l=q@sfF!~5(*=G?g6qzu9p21qb%_T zH%ONZLnN$2oBO5j`h}}klYZ^5({?5mCxD3}o5zwlo-)y}`S8=TOr!iZF#;&Wp{vI& zYJWHyBAUuXWJsMI^Oq7r0i7XNX3wGS>qEX(svdq)M~4sukb4IQBneUz6BE9ms|W!P zm|F?J390CY}5 zXWb6)YEo*QO~qGJ;pZiL3%#*1dD_FT*}w=P{2mV7k_DLzXd!iiHwCr$$xQh>0YMS5 z=z}UV|H=M-O8v1vl0bj!?P~aJ6_v_c!GzYA`KMXnsk&nw**yEW95bAo5!aAwxq`qt zE#-F|d7d8q?o14+r3N!o3f%YeWznm!MgD)Cl`!0KE2sjTLd&dv)Eo;D3O+L#hjL%j@(}f-p^&PL*^ySQWqDq(f!}in6AFH61g0-Mgyz?XOm`mxtZA3%qZbiVgzX&V zt{wX5&Sq;WXBVd1!ZTK2lYDZFUPc#ZnzJ&zU=y9btnYNyVc4uD{ia=c%4|?NTU?&n!8lGZ^DZ)DTI7CUl^e>WdoGJP=72 zk{}A`=CExxK-*fJ+$Nz~L!Mt;AMrocndMG=-0?SPY_U7NEtPncMEN+54&7 ztb85r&(*nI2Fv1kYE{M>fCD1l)>0KJxG|WoLYI_he}XQ;)L^A`%SDD)H&J_#-8j)KvF)(l(UM1M^*#C(O@+!B}W zQxr(FUX`Q{JpE;5Cgn@*vC%Ccpvhj*X=K*mB9E_l1u2&>$V1%$jcwZd)*}Vz;m-}x z1L}ex)`S?YGpC4ue_CpN5tH9a5@>naF&VZy_Qmez07?iMH9&E}BiFuKleT|4Qwf)5 zjKBe$#%9^@PXS~PZ zRSkUDR~&HfVa@>Ya!paV^b=0MSoNj9AQHl*_ZZ?evZ&DslV}3f{fWW)OEV$;+SR0!v;QB`OEbp6%ZUbOISyh0PfQ^ zRA|Xzk~tAIwfGuN{nH5r#K2r_i$fa7!0n4a9k+2enra@@5UluBmcGT~e#F|WQbpB; zN^W((Rdm z%T=u!^OFMoD_Wjpj}lSwqX4|5Z%zFLh|B_i8!oP;sHOvRpSenz3K^~B3Z|J@^2 zT@k93@98{O8KnG-F8#H8m}CyE#fz2v`b z-0vwGaf;7z%l}SJKU5quV5aL`ppwXM!;s-C@wVK}Fjd-=4RT21TFlPHJbIFNjW&Mf)}(3Tc@YVkGIS0Vu%U>Zw|wuj-852sXS7V` z?-F)Ni^;CKvWs+DZJ{EDGRYo4;L7_@ufLz)VP>bOsb}ABo3ox9_x94Qq=xbpU%;05 zxT}3FN-e;=o%!)psRdcC$S)xTnuZp7FjF9&XI-K}!}Ofj_2(GuUDn#ORhW=>UD6af z2)zQ&6VC(ITH_c5*BPrsCAKAXZD-f}jhQVVFgn79Sz3`+2-(^e;>sa9nTQYiQ%BFk z0o&gy;JSy#o9mQvkiO$JQyE5S!|`awna9vVN6{0%@G zd-$NxTwC0nh;ISuX~|j~ZHWee%#E~y7rVNo$@ta8$d==Nq@QNobr{z8Bp>g8-az#+ z`F%%@u_faZN46H*!jngaH0iM5mP{qvlZkga*y4xBpE8Z78Y3V2wbw&X`UBb zx?5_c23W*h=%8kP4wyPlHDi`8;~rMmZ=8&i^P56kH7>rM-j%7+ya=>?hAr7NP;|EZ zwT%6qjF9_7wyI^2r|}lou9$Aq$vOVE9{q$_A;?O=_I7MML#?~qg z*;dUEV!cb5|C1)PvfQTPFAEDkqnL}ty@;vq?a?%u!P=zJ52W^(hHA^|YAqM6AJBeL zD*+@An*!3gc{s~exs8=X8NI=ANlj#z z#_p73{z>FLRBkjcj3RKJv7ndLL~MGTL?l(CC{F;oDtp_pyNzECmMddhrJ_+LI_TyM)Z4JE58tp0VyfxT6tAgK zU@H6B^|wQHNN7kDg(ySbmavQFhD(Ejx$9M|x{W(_s7=s_7B4{#(HAUFcZY&v(mBsfy(j^7VPzO#2>usl+~#7&Y=jy# z-slqqI?gJQDc0<`;v-k{DRn-4{mYZx)vnXS>>6X? zl+3PFfI4IN3ob{$Wy~71LCU5hro(t-L-HM1DZ$6vAq?vs0_YvHb-ub|kBk{NJ33@~ zsI2XIJbj>czB)09JjMkIix=w!A>E8;ky9O!Rt^F>NrtA?vuz z6^CKhd8LW0Oh4?f2>|AdP%^n$7gfA>AgpB=-Nt-rq-kZ|1jXXl{I3OTew;y0F$gZRyqbezvTnPDgL<87~+ka4RSmLCuc6CVabbU$ zDGc&r@03xUR{Uw+lMz-p#TBHA={%??rHUeftcDq=Z*ywZ@;DxBOXs5atnJBz_8guj zPYrfH-k|*P%B=LmxM~O^z$r=zqsu_i4oWDR4Px$~*2VPN9?FI|?IJ4;jPoVfr&10k zOJwlPrl>GSOab>gb9^>~`>G|Vv1D-XmTRu*BesL@HZHR$LZmLiE~+0QWu@wK5=0F< z-5%dvfi1VXZeKi_Si;eKA##J9TjXEQ(AzmJGW#uZ)Q%vN+sR-KS=2#LccHvBT$7SV zmBub1*FE01&^bc0Yjcpx=scfi*fU1bukxwI=~jYpKKndQghI#$BIeM z(pb9*0mRHC%9Mb(naWnq?w#B@608&!eDjJ7(A6Z}C5bmOdD^!sA9B)+znG{jSe?r}d4JnC9C#i%ct=;y3N4 zJdxHpAaSW|?PQD9TKoHty8P$$P&IHo@Jf5tR-5@(#Jkm$#soFItbfK@?&szgJbr4- z(!B*RhZz4-!fQ#LluM~F6)PU)F2+l%u_N^wiz@Oyi^&|^-72j==7HUE5?}nLVC7&< zDS^XwkAIE>pN68n-rE-xkUGk^$;@!=x+{YN@G!J^A$I^P*<|)|elM^1>5_G^cA<4< zjT7X2nRl&fujee*3@K>bo#FWeLViI|jSwqE%=VwP`chQJP!|*!QCuM#`OcuOH->9p zIJ)s;x?FJ&c|w?I8WT}Cx87H|Mubl)kwzBKB~;%1PUV$BmGnuRC+?h*oLy@K&qOj9 zl!uu%6(|miD}>;B{H=u;@xw*@RZk?rr&Qg%0waI8H-Y+%L;d^YPEx|~c7>tp8UgR^ zogCmv?ak-rxw58E#J6123@Y$53Uw>0g&O}l`nSV}CH<;FmXj4HEz^6JLVjmy+CPo)jxVDdP-MMR`$806lKm?{3S$l)+|?*&~e4=mU&Kb%6BDgDaH4q3su<$MuR!>M(Km+ z)5DEB-Lyi5+4IY7;aLs4YnLgMue3#>40JQD4@G;j)*A&#uei_8cxpzFOgzNftd5to zzWYZrm=X%nLEkj0%qq?AXtYW?gC@6wRpmgFDx!p{C?Inn60~|YzVUMt2m8K;#dQPp zdsAu0b77Y!R9=>mq44@z@Z{1`duIvin+jb2rvf~`IS%si*K?+-+GVB+({Kd|lxuXn z7KbCO%`kmgP12x8^$J4^slPGddi+f`)of5K7VCZw_cc92xishd^SbKXIMqA&&c&WO zuSH%SlOurC#N1lcti9$xB0>~xV~2jzHxbdh@t*}9Cr}v?Su7No;R4^XMZ*p|gFkL@`D&7)sFZD5>R6FOPExcS}#&XRwp_;~_7*~1of(xXV%!65= zsT$Q$K+`WG3Rk1Rg(etQ(Y=IWk!|i6{rhHcIQgz9IBy% z=bU{;{dEA~GEUI4SwBH=5t>4ak~Px#YmS*-pOpU`Ubx0!Du)JU0DIW(<2+av8*0YO zo5VMkP3WH|ME~z%$QXDZ56QT^qUQ-t5&M4qYC2FdPru@>o3Coeaxz_rk zo=y_cleR1!%?p3;unkU-$hB7iI&TC|y|*TsFPjEw4g^+JiYZFPNP(!fE@!+l4@W12 z-<~SK_&*dIuyNrLgCG-7Hrzt;2NfB&uktlojn#Y?ji3NuJ7uYL#63|UyyD0QHJ0Jeo>D0~! z=rt@#zlACP*B$YIzVb^pR+Y!h6C^z`qywkQ!?1oka^K_>g-@EHCgegG1I30!*%_-i z$84#EC4P-YSkimA_XOeWi?BBDo<2vWOinvGiN{Rt|Cyxj< zIcnbjD%HO^KTEm?k-&L2ZkoiYYAIxB zyQ?pHbT7#4*jNB8#mjM{-}#o~rIvr*4~6&O9rq#8VhB3o9wlP?jn zQ>yK%ibV$5Pz0w<~E!nr64&u8I_q|=IF235K-`E@v2P!p6T z6O;(mL)GUewzJe|Fume+PB@3ERC)-6)Yq^L;H1cVdwZ!8q^^)YmEOeu^U(a~IR7$* zG%U1)5>3^~e3}>TIz>(+!Hi;4<;xmscGaqb98;R_5t%QNjpi7|Uk}9IAOQIqZ?i%= zS0Q)0+)`-oW@r=&Bze1Sh&#Z$GH3ku-(LUhtIqW=@c;SyZ4c6aA^Pu$AY4=YU(@vO z@ep4Ne5-r>?_bE+5Pbc2Y=kcd1Ro5(tk_`%>O+G0>f)A7{?pA|qSx)2A3>07+h+9N zrV_)wQ%coFo~7Dl)c))8GUT&8(MM=PlV${&l-K)uycenE5E;~HQ30sH@Y0UU`0pE{5xCnmf{Hp_444$a%v z0@K3hTKB!h`g-rCvz}01eLQXn2t;Ro+1;&tCWBJi%ZMIF$-|8u7iuDIz4MhqL*5Vh zMO?^ML_V)|$tY z;S3g#v~+AvZmw#*9okBpm-r!o0r28^KiQBlc5`>$4JioSU+k!=+Aun~Z8~iaWbjVd z$Hvdhs6r!RPM1`$DL!(P8L^~fdMw4ffM&ffY`ApaO9Z+N?|->NFo7%)Fyd zX4P8auu)m7_b?lMs<@tLI4^2@`524@df+)*+kz~vp4;Z(H0@FWwpuMzJVly&h)kQV z12Bq;ijo(}*_Vn3Yidu=s272tP8P7k7&N^RI22uh%3v!7SU;PDc( z`f*6rez}WA?*ciQ8iP)bu`I4d=N5G;zl}F;9llsJ?qlf07~tI`Rwq6&L2CP7t(8U( zKpbU6TyS$UJ^_Jhg*Cxv95w~--Lb>f*2nX0)aGGu7oJV=*dHOxp%)%IrPhaQz{tbr zZH=-Z&032J=rzdOY8@RtQ+fm$6}jaZR~qb;vwXOfxA|H(Ug5udsVY33*Yzm^ta)D) zsX|`3W?rb%H&?huV}{nN!c2u7B|7B$u*9-0Sn?_*F|L z>;gIsm6;`J{wAlH#!D>6ql$J&NB{b~U5%54-^Kg6@*+MSqoDnX5* z#pjj98_CHET0oKAWn!^*U6ZEMUDnHd8~+3?GGq!LsLday#5$MaqV$I{L9^owP^a1Q zB+)Y7S2%C*3qt~sIlE!)^9>{Zn`J_}sAz0|>`i^{Ufe9K z+bvlGzmzi?kEqRY{+I)g;9U=Gh$6s$Ry}?Bh>nY!njNVukXGJib2~Zv`Ea^f9BD-N z%<2h=5Ik*iyel$__w50)Zg?Imq*i^=?hY|ZTk=&rj5=+3&Az_HfO=qcQxlCrZ^WCB z!Pe>pVxJELoBe$5b{+%mhvOv;#G{llmm9Z_j!I85)>L{fw%L6;Tw>7$$AY7hlB!L{ z@-G+@RsXhrn<>{2Ud_ym)!&8h@Bt_&M1!ARf_J=YzGWuR7FDLDkrgQie_5=us6Sb4 zwNUgv4*G1a-kv$4myh18>twnlhB1_sl$)EoSZ7uSSXbwOghB38V(Oy+V#DpCuS*8UZZ~BZ^=P+lT;B(#sb?K9L^-`%ng3HatW!nGe z{a_+}+A<>6?Ah1T1M_d+V&~G5^+m&_Vn-kD$suo@UUIpbX}NE5ysvI@*|!{-?es~& zc$AbP5<8@QTk?X+Lx421-deMBBV6`EMu>FERw|jj7c>L~Gq?{6oXa%H-Bz}TT20Sg z%G0@>4y#I3Epg`Li%+eyjow|;fsamS!KV>x8VPh7ojKYaAE4uDP2|FF2?X3#7+VxH zHCRl5y2dOiTbsuqv;w)sX(VjTg_|MTW+i6eI6s<2!ezOi;;cwf~DHu)<5Va zQxGSO*q&K&ius(qO$#vJ0XS^MlZP+XTK@Jvy;2MM1SUZ6^Yhz+Z0xW%p``5T?%oqR z%Z2~2X!lO}69tI?pLlh~P%v(BzI97xZWQ3K2wmfdEZz(PyL zYNr$Fbll$AQIe5~n2bJ{T@+-QT{k&Bc)##*^DcSU5xwALwr1rW*|Cw3e219D>=CW{ zgT?E13{=#M>EMrCyu2Du#~T|tg@sgs;v)SWtE&h9A0&G%Ifim=^>ogCZs;ZC-SZAM z+a-Djk~k}Zz7Xd9_J`e{+#Z6swzwV7=g3Y{61Jn24vxBso*q#lAtY3~b|Q4Lngu#a zO3J`MyP40i-BP*+RojJ%coN9GA1n-Af`AAVgmdKy?=Wx zw>~BgLA>9VT4D5#CpT$mS@48xCeul11?cMKr;Sa;xX38t?a3Mdh#$36E_vcEpUFcX zH;{))9!B}l1Ubu_x)FIXDbX+1%~fO2UKE)N?l^(cw+=scWR-06FSBdhA zf2`Wu59UBHyMJB2f<{k-imH#2$>)0Z4WeZ6{;jPe*BY1HF_$pWZMJC`(O+hK8p|Qp zVBmC_JA51BtQ6j8$#Cr z;f@&qTZK+nt`A5AxD(9GaoRgWNnp@mc@c(+R^hHT0pvbh*BT%55D3_-xO_Z4NT7&B zi?1qQxk{fW@X zbs)lbWOmf?q(YmY4c;^V_N&*6g}MXE z>yXn*$v?m1pg+rp27*l#6cirYz34B50y(&-${!e??{ntd=?b&4&0a^A{ zuz-Mz6a^6%q&FLAKnOibRS}Q`i1ZRdY>1*54Fb{ysR>0&=pia1(xoJkE?{UO^niqt z`^?_^zMuQsy??;YFN7h(%$(;r=X}54GtZnKT_pw$4MO!Ha4Rb-q3U3BE#IMMs=XT= z3n3BV-s!(40$1oNyGH8rt_4iaPM5j?3@}cW{-tvETjm4E8)+w z0p0b`1=9u5Sjj#p!8L3lpM#hYxYQ$$RdY{XW_F~^aloTtv!7aQO5xLj!o8RWyA4XE z#>U2U!?+a?1}VH&PV|~E(Olp4*saa4FL@NG(PBhbMjfGQK-T7FVB z6F;(idnB0~!~%_hl(~1>wKoKQ`*KUI;QGC-aFUs4PH_k zSWN)4=Y1sBw!}gTM!<}H#zQ0o}qh4{}OLG9Ld(Gz>8su}(Q~YR5`?K8iDccPClHGrj3y z0=N;{`pVR7xoU&$rUm-AteQ1+ZxmfJbZ^#0)YFe%jmQwWp(v2Nxxr(yDh^w3Ow$=OFh zKg>61nb-{NYq&J+KS8tujdE4UsO{-7++e}V z<-5E~WiZIHg&@D$@*3Y;3toeFsAZpT`LBH0W(fXYD^Ok16ne3bgVwIIN_#{^;&Es1 z4pr;!=Hp9&npyV5gLeTs*F`!vnmq4;@?gA)NN+8Sk1%uY&N~Up!1)D=k#!Y%w0nDV zU4yf7IOh3t`?krF+@KXczSBpbZq~JGH@d-tJi?jo}*tKVqom;XWG?fu#R zYu66bBHggaKix&b$jcwPN!|S+5wEp_92~TmMkHR{1>4SEv-O41su}E!8#lOHZAr)h zB3TJhR4n9T2$98w*h5}czWvMMN>elLOIiv#b4zGrafbWzH( z(-wpKG;gycHk#*vTk_tYdxf^OYm^9R1lNa+lp3Pgq<}ZLeEsm?WGflj?Q{vdKAXSb z5;XVKFxEks@3Pn7p4wmd7SZKDr{t4Qhs89hVK5kGXS|smh0;ec^JI3!DfY8;0@ezF zP!Q*gx5`f3X`t2N*SK8b&8TH=@cfadj1dejn~olkQ-#Aj(l(4G$fw;64AadO;>vDy z7T(__^rbE)PqzX^+S*t)D6N-E>hN%HOSTJJ{$Z~nBSYygee2|u8aG_b8wkCux~)-` z%#rv42F_8d5aXefbY-B@t1$qX#0D2Y_H8r~=PX)w%@2bbYb0*c)8&Ykb>RFrZ6 z-_iKJv!kjzjIXgId*s=Skk!pfHgc0{QF~|UW*N%}%YA0fG*_@GVJ?ezklZI%VW^g()C+@m6}?XUyH}@<}4^84krG_Of0%uAa9n~val5f5aAa9g*4D~ zTfoCnOS?GWxbSj}sECyQWz~ceZ$UPh1vh;+1Cma#BVlm+sl0+?aWSNC7j3+5Yl^ zk0ZISpf``R(&Nqrt4lQs5nZ$F?P^?G=v9huTBJjnZC+>U%a&W#{|X5Sy3H`@NYOM8 z#yybM|9XGnAd<}$sSVx+(u0$2*+oCj49&*9?G>!T0EGPpf!~pz+pj_COif2S-=Zj4 zVu*^nuUz0=WTc>A(uOFa6LQ)DXIkBjO-zWE_wFNy%c68EeBuh(Zo;A=AyT>#7k3aP z#H-y|PZDY*?r2nc-w1iitbCRM_l(FyH*C6)61Qam{x(lDyigas(9PBh`SJQhTtk`` zpm7H=NXNHXS$&@0ud_$$5H=IfL2(8Ulz8X@VEUFq^&t?}tK z^MKnxQ%OSi_KP9mx|wyKL5;ZwR?DJ$zSbwXI=o6d!?uBhC=M>KDp$)ZYwzK?ipX9M z^Hg1P&(3sO^s!5y63JCniE`UvTh*FA{e(9=cUg>z>zxSLhzD$@M1>6((ko9RB1l9# z6g@u#Uv*0@sRD3UTE4xV=k^wXmY(h1wLT(K;EY+jz500Ft}0k%W7C!P?Md7#RkZi} zn;G4PO;vcXPBXlLX8vGAGB+dg8gXY~HF6R&?%N`?w|>3748Dv$Bnot~o_h3wd~Awl z@^VY4`b8a0HfoCbCc=R)&;PUEd~Tf zOiD^cKp^_3yVL;LDlo7jp~NZv&DMa3q?ovP&YI6Y9%tYH2D^@GeYm9LOw0yqDXsbj zKdsQkd^2L5wIHcA-j=2tU?O~wm;YHrGM|-#K8`3(g(L?T6lj!n2KhGv1byiy+6Mdk zVKLiL+NE4kY288;qeQW8n_foVhW+cXcn$>Cknc4%q_vOpNQj`HU#v8UuCCqPf3+a- zMT09p3T%MVl9+tPJ3paBGY+UFF2|is<37iBqaAT@8he7%V@Aj}z^q@h+bM}F(LQo@M$*ehJk5Lcs@UJplv)-C3f@IW3ZISL0Q<7k=-_V z!78vGy3e3Dkr(zz2j)Xnxq0)ZEy*MZXsM``1QmxWzc`S&Y|F#RVkkU$Fkp0tpCBiL zZgW%tdexg4W?SA>%)W`axs#rro*S+d?k6>%+Cj{xe5!--xr18Z7QGgp8F+#;3m2U6 z)4zD>63MvSL(l~^ko__%D=S@F^rgn~R9l`3i-81l@IagJk1kc{hOM&}l!533Dqg)e zld2GNMPZw33vl~wK&)y*HweDN4L+q2tB=PVmK#6*5SJ=WgNsIsnj9kh39< zCLnDne{%lnA%y0M2}P7W0#>>?!zu}SR}c%xT+eD!c^}bu<)`CXx}qc3G5fO9>;0R& zt;r%sCD$fLCMmR;M{T(CXK-Y7ma!nfAUS?1;K3FFr~*fJJs~P8);jrx}0+nQ#hRd3*%;q_0K7lZ~`DJ zR#Mu5$BhS8}yp44%s zyvAN@6#v{rEp?eyU=|EPS>u@IyT{L@)H5@0JZZ?gllgG}%w(6O-tLLdSFKqKs}2HK z-3ej9km8Z{CB;grlx*V2NNa{F`hHnK4HgWWA{1IqdrqYr0IvO5?beq!QgtCDBED*? z#KkW6N)ia+BhlqVczXM9Z|T4W=g;pq z6#4w$M$Zs~&eCO;I0MN3?$t0w<3Ts}+FoH{%vHq4??=sK@y9J@*egf1wYyad@$iq~ zyd7+sL5M{F)#XiYkprqd--^idcP24j9+~mc|5QYBODu*LPAv^e`v4T@9u)eve2%S- zyhDv7j&BeENC5=^jx|{V9s#r?xBKpXgNkS7tj@;0;?~tK)e6lynsO`_+ z1S2RU+wR3bAE-=zgLSaofLb{}set2sJAIomZ$NY^&6=B=gIE`=6fs#{SJPy)t*SGj z=qh`I*1K17;~tPyeoTc}gv^iFJ)i6M3CEef%b|95cDBZ=dv5vIQ_+LD#1WU6m>6hI z)9Sr!(x`XN?OL9KR~Yi0T?Q>b&MK8MpUC!?d)jO#vXCnYMG#l-w6Jg}k9;soD_R*c z`sxYT7hxYZB54B0WDJ^Z2o4laL_VD_olWq>g(GT+Rp7hYueL z2GT)ZI{`#M)mPzM9~*E*#H$VUx$v|?kD|fZ2Y4fhK)83No<4ioYsOb!fA6;zb;%tGQ0f4lpAE`Y}FC?AYuoxZiS^w0j;}Kg=L#f`@#5EGAcS63~uZ|LqMMIP<_Gg zU17^+Gu=gdpO_=Vmi*_KoS87SwyEJAakI#t0cKlIp@CnO#!!8j@&}Y>r$Pk5+O*P> zG5?Kpm}sCW(ARqlV4bF?;&!0))#+M)orWPOQ(~j{HQkhfVP{(76l2Ywn<0uX6I$a{ zP^DYnTor-2?xF;z$T4+k1z#Hlv2ixI)b=DPyYg_2SSbV3h1I!C$0{_6_u;`(N#5Gp ziSe;az-$0bioT){r|(KUiH5@ga%T^eUkaHYip9;wuSPV(yL_FQ&N(q7bA472jsZfD z#mjJ?8z|h<@X%@Qs8)sBy03Bbr+g3}h~Z(%+Hx0hbKf%G2#DG~+wkW*Y6s0WU8_td zop>dy^UC%mG$NU0TX@^bj(BzK3DeohNe(tP_N43HOIr~ZEe=RcT=SHD^_4SKDuD1I zEf<(#&UqSzY;-sZhpfswzu`~F-sZiQoQk1RflQZ*WDAOj(6-Q28+!zTT)J%k9snj# zM^Mz$(_^-|4XPaH-RfJiNK=FAONh!s`(l@4u!lN) zFHC`;aa3yNYh~JPirGJwUxN?Wuh^YD9yOq?`tZ}2&nT?n53M3I@ z{UI8=L#qN1a+Ryqmq7z!T5O6I`TCe_(P%Xc9mLN1=qsq$e8mTtgF-eU584!*-$k*k zePv(hl%qoBK?52%{^LaK&&6Y)PwZ;aD{nX`6-0<0v0Wcom>%G;0J8PoN?cYH6c+9U zO5vGXKlcFWK%95hRR(wnHeY^gXz7KKs|%&KJUV!OqzDd_58&fsVq)2LD25lP{QLU_ zy}TqF$8#7Q1z7GfVX~cPvOYh|AhQ@6fu96GSiBFhneiqwP!fF(%o4>`zu%)5kG=u_ufUh>pmeQ1l)zfQ6OtHbbHIFORUL{MH^#<h-d_H z_ZnX^o&h>K7%AHpf`s}kKX#iPLS$qY0C@IFgG7oss6y;l&o$yux_TDUMwD#xUqm{U zU3Bf-F@?~@65e02>q3jFfbQ8dmyIz(c}{lN z`u$kE$}@dwP**HGA0>qB9?$5@4>S9lNPqYhl&w>C7!A%@@RIUMY7mOi15UL%L2zC5 zpHNV;JW2&Dn*?fXUmAy<-4rdXA9$1?2R^|esQI%dA)>zCmUvN6L{i5T(8M3Fb;=#c zw~NnVHytV(>D&&F^2x5`f@=X&UaPPDYW-Gn=h{7(ZHaJDE49pH=*mr_tt;_lp*nFu zlI?-y8BtFePuvW}c&*iMfQj$F*&Ijdxw$3AS^Rpp0ei-8_DpQX8DlpS+>7jRE>%x% zM|-h4SjrX8TR75Rj$%CuTEY$Xj8^B_Mm>C(AKYln|w#II-(h#YKbp)CImSOfx~-bfKYq) zOy!Lg4-u)Qdu1L$c8LsEMoOA)ZcyCyvnf^HwEI!QLGxR?j2}j~H8x)0p++r0wcnhT z`wMui$zA2ocJLEyr+=UP_osb;iu}Ft|L2c?{IlzS%=C{X{yk0pvBW=?_$N+47C8Nn iEBxaM{|{Gq!Q&VG-M{MLK}H?)ZJ4pe#p3hV@BbHW?k-~h literal 0 HcmV?d00001