From 889a9259232d9d0417b5ef893f0f64a226ff0534 Mon Sep 17 00:00:00 2001 From: Rae Wong <33883582+yingyee0111@users.noreply.github.com> Date: Mon, 26 Jun 2023 09:40:34 +0800 Subject: [PATCH] cleaned pages and added specInfer (#5) --- Gemfile | 7 +- _config.yml | 7 +- _data/navigation.yml | 11 +- _pages/about.md | 9 +- _pages/bootcamp.md | 32 ------ _pages/specInfer.md | 45 ++++++++ _pages/start.md | 132 ++++++++++++++++------- assets/images/spec_infer_demo.gif | Bin 0 -> 4302606 bytes assets/images/spec_infer_overview.png | Bin 0 -> 209735 bytes assets/images/spec_infer_performance.png | Bin 0 -> 18951 bytes index.md | 20 ++-- 11 files changed, 163 insertions(+), 100 deletions(-) delete mode 100644 _pages/bootcamp.md create mode 100644 _pages/specInfer.md create mode 100644 assets/images/spec_infer_demo.gif create mode 100644 assets/images/spec_infer_overview.png create mode 100644 assets/images/spec_infer_performance.png diff --git a/Gemfile b/Gemfile index 12914989..f1b77716 100644 --- a/Gemfile +++ b/Gemfile @@ -1,2 +1,7 @@ source "https://rubygems.org" -gemspec \ No newline at end of file +gemspec +gem 'jekyll-include-cache' +gem 'jekyll-feed' +gem 'jekyll-gist' +gem 'jekyll-sitemap' +gem 'jekyll-paginate' \ No newline at end of file diff --git a/_config.yml b/_config.yml index 53db11e8..d8203dba 100644 --- a/_config.yml +++ b/_config.yml @@ -108,12 +108,15 @@ author: #- label: "Twitter" # icon: "fab fa-fw fa-twitter-square" # url: "https://twitter.com/" - #- label: "Facebook" + # - label: "Facebook" # icon: "fab fa-fw fa-facebook-square" - # url: "https://facebook.com/" + # url: "https://facebook.com/" - label: "FlexFlow GitHub" icon: "fab fa-fw fa-github" url: "https://github.com/flexflow/flexflow" + - label: "FlexFlow Documentation" + icon: "fas fa-fw fa-sticky-note" + url: "http://flexflow.readthedocs.io/" #- label: "Instagram" # icon: "fab fa-fw fa-instagram" # url: "https://instagram.com/" diff --git a/_data/navigation.yml b/_data/navigation.yml index 876f8a45..562d652f 100644 --- a/_data/navigation.yml +++ b/_data/navigation.yml @@ -2,14 +2,7 @@ main: - title: "About" url: /about/ - - title: "Bootcamp 2020" - url: /bootcamp/ - title: "Get Started" url: /start/ - - title: "Autotuning" - url: /search/ - - title: "Keras Support" - url: /keras/ - - title: "GNN" - url: /gnn/ - + - title: "SpecInfer" + url: /specInfer/ diff --git a/_pages/about.md b/_pages/about.md index b0a86d7f..a98db23f 100644 --- a/_pages/about.md +++ b/_pages/about.md @@ -19,10 +19,7 @@ FlexFlow provides the following key features: * **Flexible Parallelization**. FlexFlow supports parallelizing DNN training through combinations of the [Sample, Operator, Attribute, and Parameter](https://cs.stanford.edu/~zhihao/papers/sysml19a.pdf) dimensions, and guarantees that different parallelization strategies maintain the same model accuracy by design. -* **Performance Autotuning**. To accelerate DNN training on a specific parallel machine, FlexFlow uses guided randomized search to automatically find fast parallelization strategies while requiring no manual effort. - -* **Keras Support**. FlexFlow offers a drop-in replacement for TensorFlow Keras and transparently accelerates existing Keras programs by discovering faster parallelization strategies. - -* **Large-Scale GNNs**. FlexFlow enables fast graph neural network (GNN) training on large graphs (e.g., billion-edge) by distributing GNN computations across multiple GPUs (potentially on multiple compute nodes) using [attribute parallelism](https://cs.stanford.edu/~zhihao/papers/mlsys20.pdf). - +* **Joint Optimization**. FlexFlow uses a novel hierarchical search algorithm +to jointly optimize [algebraic transformations and parallelization](https://www.cs.cmu.edu/~zhihaoj2/papers/unity_osdi22.pdf) while maintaining scalability. +* **Speculative Inference**. FlexFlow accelerates generative LLM inference with [speculative inference and token tree verification](https://arxiv.org/abs/2305.09781). \ No newline at end of file diff --git a/_pages/bootcamp.md b/_pages/bootcamp.md deleted file mode 100644 index 51f9b37d..00000000 --- a/_pages/bootcamp.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: FlexFlow Bootcamp, Dec 11th 2020 -subtitle: Subtitle -layout: single -permalink: /bootcamp/ -classes: wide -#toc: true -#toc_sticky: true -author_profile: true -header: - overlay_image: /assets/images/header.jpg - ---- - -We are excited to announce the first FlexFlow bootcamp, 9:00-13:00 PDT December 11th 2020. -The bootcamp is designed for people interested in using FlexFlow to accelerate the distributed training performance of DNN models written in TensorFlow Keras or PyTorch. -This year's bootcamp covers a series of tutorials on how to use FlexFlow, followed by some hands-on exercises and office hours. - -Line to join the bootcamp: [zoom link](https://cmu.zoom.us/j/93527527649?pwd=V2JxSXVMaDM5cjlhbEVPNURKTG1vUT09). - -## Program - -| Time | Title | Speaker | -|:----------|:-------------|:------| -| 9:00 | Opening Remarks | Alex Aiken | -| 9:05 | FlexFlow Overview and Updates | Zhihao Jia | -| 9:30 | FlexFlow Installation and Getting Started | Vinay Ramakrishnaiah | -| 9:55 | FlexFlow Front-End Supports: TensorFlow Keras, PyTorch | Wei Wu | -| 10:20 | Optimizing DNN Parallelization with FlexFlow | Nirmal Prajapati | -| 11:00 | Hands-on Exercises and Office Hours | | -| 13:00 | Closing Remarks | | - diff --git a/_pages/specInfer.md b/_pages/specInfer.md new file mode 100644 index 00000000..c39a1b85 --- /dev/null +++ b/_pages/specInfer.md @@ -0,0 +1,45 @@ +--- +title: SpecInfer +layout: single +permalink: /specInfer/ +classes: wide +#toc: true +#toc_sticky: true +author_profile: true +header: + overlay_image: /assets/images/header.jpg +--- + +# SpecInfer: Accelerating Generative LLM Serving with Speculative Inference and Token Tree Verification + +## What is SpecInfer +The high computational and memory requirements of generative large language models (LLMs) make it challenging to serve them quickly and cheaply. SpecInfer is an open-source distributed multi-GPU system that accelerates generative LLM inference with speculative inference and token tree verification. + + + +A key insight behind SpecInfer is to combine various collectively boost-tuned small speculative models (SSMs) to jointly predict the LLM’s outputs; the predictions are organized as a token tree, whose nodes each represent a candidate token sequence. The correctness of all candidate token sequences represented by a token tree is verified against the LLM’s output in parallel using a novel tree-based parallel decoding mechanism. + + + +SpecInfer uses an LLM as a token tree verifier instead of an incremental decoder, which largely reduces the end-to-end inference latency and computational requirement for serving generative LLMs while provably preserving model quality. + +
+ +
+ +## Build/Install SpecInfer +SpecInfer is built on top of FlexFlow. You can build/install SpecInfer by building the inference branch of FlexFlow. Please read the [instructions](https://github.com/flexflow/FlexFlow/blob/master/INSTALL.md) for building/installing FlexFlow from source code. If you would like to quickly try SpecInfer, we also provide pre-built Docker packages ([flexflow-cuda](https://github.com/flexflow/FlexFlow/pkgs/container/flexflow-cuda) with a CUDA backend, [flexflow-hip_rocm](https://github.com/flexflow/FlexFlow/pkgs/container/flexflow-hip_rocm) with a HIP-ROCM backend) with all dependencies pre-installed (N.B.: currently, the CUDA pre-built containers are only fully compatible with host machines that have CUDA 11.7 installed), together with [Dockerfiles](./docker) if you wish to build the containers manually. + +## Run SpecInfer +The source code of the SpecInfer pipeline is available at [this GitHub folder](https://github.com/flexflow/FlexFlow/tree/inference/inference/spec_infer). The SpecInfer executable will be available at `/build_dir/inference/spec_infer/spec_infer` at compilation. + +You may refer to our [GitHub page](https://github.com/flexflow/FlexFlow/blob/inference/.github/README.md) for details on examples, tokenizers support, mixed-precision support and more. + +## Paper +This project is initiated by members from CMU, Stanford, and UCSD. We will be continuing developing and supporting SpecInfer and the underlying FlexFlow runtime system. The following paper describes design, implementation, and key optimizations of SpecInfer. + +* Xupeng Miao*, Gabriele Oliaro*, Zhihao Zhang*, Xinhao Cheng, Zeyu Wang, Rae Ying Yee Wong, Zhuoming Chen, Daiyaan Arfeen, Reyna Abhyankar, and Zhihao Jia. [SpecInfer: Accelerating Generative LLM Serving with Speculative Inference and Token Tree Verification](https://arxiv.org/abs/2305.09781). \ No newline at end of file diff --git a/_pages/start.md b/_pages/start.md index dc4099fe..dfefc370 100644 --- a/_pages/start.md +++ b/_pages/start.md @@ -10,8 +10,9 @@ header: overlay_image: /assets/images/header.jpg --- -FlexFlow can be built from source code using the following instructions. +# Installing FlexFlow +FlexFlow can be built from source code using the following instructions. ## Prerequisties * [CUDNN](https://developer.nvidia.com/cudnn) is used to perform low-level operations. @@ -25,66 +26,117 @@ Download and install CUDNN locally. * (Optional) [GASNet](http://gasnet.lbl.gov) is used for multi-node executions. (see [GASNet installation instructions](http://legion.stanford.edu/gasnet)) -## Build the FlexFlow Runtime -* To get started, clone the FlexFlow source code from the stable branch on github. +## 1. Download the source code +Clone the FlexFlow source code, and the third-party dependencies from GitHub. ``` -git clone -b r20.08 --recursive https://github.com/flexflow/FlexFlow.git -cd FlexFlow +git clone --recursive https://github.com/flexflow/FlexFlow.git ``` -The `FF_HOME` environment variable is used for building and running FlexFlow. You can add the following line in `~/.bashrc`. + +## 2. Install system dependencies +FlexFlow has system dependencies on cuda and/or rocm depending on which gpu backend you target. The gpu backend is configured by the cmake variable `FF_GPU_BACKEND`. By default, FlexFlow targets CUDA. `docker/base/Dockerfile` installs system dependencies in a standard ubuntu system. + +### Targeting CUDA - `FF_GPU_BACKEND=cuda` +If you are targeting CUDA, FlexFlow requires CUDA and CUDNN to be installed. You can follow the standard nvidia installation instructions [CUDA](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html) and [CUDNN](https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html). + +Disclaimer: CUDA architectures < 60 (Maxwell and older) are no longer supported. + +### Targeting ROCM - `FF_GPU_BACKEND=hip_rocm` +If you are targeting ROCM, FlexFlow requires a ROCM and HIP installation with a few additional packages. Note that this can be done on a system with or without an AMD GPU. You can follow the standard installation instructions [ROCM](https://docs.amd.com/bundle/ROCm-Installation-Guide-v5.3/page/Introduction_to_ROCm_Installation_Guide_for_Linux.html) and [HIP](https://docs.amd.com/bundle/HIP-Installation-Guide-v5.3/page/Introduction_to_HIP_Installation_Guide.html). When running `amdgpu-install`, install the use cases hip and rocm. You can avoid installing the kernel drivers (not necessary on systems without an AMD graphics card) with `--no-dkms` I.e. `amdgpu-install --usecase=hip,rocm --no-dkms`. Additionally, install the packages `hip-dev`, `hipblas`, `miopen-hip`, and `rocm-hip-sdk`. + +See `./docker/base/Dockerfile` for an example ROCM install. + +### Targeting CUDA through HIP - `FF_GPU_BACKEND=hip_cuda` +This is not currently supported. + +## 3. Install the Python dependencies +If you are planning to build the Python interface, you will need to install several additional Python libraries, please check [this](https://github.com/flexflow/FlexFlow/blob/master/requirements.txt) for details. If you are only looking to use the C++ interface, you can skip to the next section. + +**We recommend that you create your own `conda` environment and then install the Python dependencies, to avoid any version mismatching with your system pre-installed libraries.** + +The `conda` environment can be created and activated as: ``` -export FF_HOME=/path/to/FlexFlow +conda env create -f conda/environment.yml +conda activate flexflow ``` -* Build the Protocol Buffer library. -Skip this step if the Protocol Buffer library is already installed. +## 4. Configuring the FlexFlow build +You can configure a FlexFlow build by running the `config/config.linux` file in the build folder. If you do not want to build with the default options, you can set your configurations by passing (or exporting) the relevant environment variables. We recommend that you spend some time familiarizing with the available options by scanning the `config/config.linux` file. In particular, the main parameters are: + +1. `CUDA_DIR` is used to specify the directory of CUDA. It is only required when CMake can not automatically detect the installation directory of CUDA. +2. `CUDNN_DIR` is used to specify the directory of CUDNN. It is only required when CUDNN is not installed in the CUDA directory. +3. `FF_CUDA_ARCH` is used to set the architecture of targeted GPUs, for example, the value can be 60 if the GPU architecture is Pascal. To build for more than one architecture, pass a list of comma separated values (e.g. `FF_CUDA_ARCH=70,75`). To compile FlexFlow for all GPU architectures that are detected on the machine, pass `FF_CUDA_ARCH=autodetect` (this is the default value, so you can also leave `FF_CUDA_ARCH` unset. If you want to build for all GPU architectures compatible with FlexFlow, pass `FF_CUDA_ARCH=all`. **If your machine does not have any GPU, you have to set FF_CUDA_ARCH to at least one valid architecture code (or `all`)**, since the compiler won't be able to detect the architecture(s) automatically. +4. `FF_USE_PYTHON` controls whether to build the FlexFlow Python interface. +5. `FF_USE_NCCL` controls whether to build FlexFlow with NCCL support. By default, it is set to ON. +6. `FF_LEGION_NETWORKS` is used to enable distributed run of FlexFlow. If you want to run FlexFlow on multiple nodes, follow instructions in [MULTI-NODE.md](MULTI-NODE.md) and set the corresponding parameters as follows: +* To build FlexFlow with GASNet, set `FF_LEGION_NETWORKS=gasnet` and `FF_GASNET_CONDUIT` as a specific conduit (e.g. `ibv`, `mpi`, `udp`, `ucx`) in `config/config.linux` when configuring the FlexFlow build. Set `FF_UCX_URL` when you want to customize the URL to download UCX. +* To build FlexFlow with native UCX, set `FF_LEGION_NETWORKS=ucx` in `config/config.linux` when configuring the FlexFlow build. Set `FF_UCX_URL` when you want to customize the URL to download UCX. +8. `FF_BUILD_EXAMPLES` controls whether to build all C++ example programs. +9. `FF_MAX_DIM` is used to set the maximum dimension of tensors, by default it is set to 4. +10. `FF_USE_{NCCL,LEGION,ALL}_PRECOMPILED_LIBRARY`, controls whether to build FlexFlow using a pre-compiled version of the Legion, NCCL (if `FF_USE_NCCL` is `ON`), or both libraries . By default, `FF_USE_NCCL_PRECOMPILED_LIBRARY` and `FF_USE_LEGION_PRECOMPILED_LIBRARY` are both set to `ON`, allowing you to build FlexFlow faster. If you want to build Legion and NCCL from source, set them to `OFF`. + +More options are available in cmake, please run `ccmake` and search for options starting with FF. + +## 5. Build FlexFlow +You can build FlexFlow in three ways: with CMake, with Make, and with `pip`. We recommend that you use the CMake building system as it will automatically build all C++ dependencies inlcuding NCCL and Legion. + +### Building FlexFlow with CMake +To build FlexFlow with CMake, go to the FlexFlow home directory, and run ``` -cd protobuf -./autogen.sh -./configure -make +mkdir build +cd build +../config/config.linux +make -j N ``` -* Build the NCCL library. (If using NCCL for parameter synchornization.) +where N is the desired number of threads to use for the build. + +### Building FlexFlow with pip +To build Flexflow with `pip`, run `pip install .` from the FlexFlow home directory. This command will build FlexFlow, and also install the Python interface as a Python module. + +### Building FlexFlow with Make +The Makefile we provide is mainly for development purposes, and may not be fully up to date. To use it, run: ``` -cd nccl -make -j src.build NVCC_GENCODE="-gencode=arch=compute_XX,code=sm_XX" +cd python +make -j N ``` -Replace XX with the compatability of your GPU devices (e.g., 70 for Volta GPUs and 60 for Pascal GPUs). -* For users interested in using the FlexFlow C++ interface, the following command line builds a DNN model (e.g., InceptionV3). -See the [examples](https://github.com/flexflow/FlexFlow/tree/master/examples/cpp) folders for more FlexFlow applications implemented using the C++ interface. +## 6. Test FlexFlow +After building FlexFlow, you can test it to ensure that the build completed without issue, and that your system is ready to run FlexFlow. + +### Set the `FF_HOME` environment variable before running FlexFlow. To make it permanent, you can add the following line in ~/.bashrc. ``` -./ffcompile.sh examples/cpp/InceptionV3 +export FF_HOME=/path/to/FlexFlow ``` -## Build the FlexFlow Keras Frontend +### Run FlexFlow Python examples +The Python examples are in the [examples/python](https://github.com/flexflow/FlexFlow/tree/master/examples/python). The native, Keras integration and PyTorch integration examples are listed in `native`, `keras` and `pytorch` respectively. + +To run the Python examples, you have two options: you can use the `flexflow_python` interpreter, available in the `python` folder, or you can use the native Python interpreter. If you choose to use the native Python interpreter, you should either install FlexFlow, or, if you prefer to build without installing, export the following flags: -Alternatively, FlexFlow also support the Keras Python interface. The following instructions build the FlexFlow Python executable. +* `export PYTHONPATH="${FF_HOME}/python:${FF_HOME}/build/python"` +* `export FF_USE_NATIVE_PYTHON=1` -* Get the FlexFlow source code using the same instruction as above. +**We recommend that you run the** `mnist_mlp` **test under** `native` **using the following cmd to check if FlexFlow has been installed correctly:** -* Set the following enviroment variables ``` -export FF_HOME=/path/to/FlexFlow -export CUDNN_DIR=/path/to/cudnn -export CUDA_DIR=/path/to/cuda -export PROTOBUF_DIR=/path/to/protobuf -export LG_RT_DIR=/path/to/Legion +cd "$FF_HOME" +./python/flexflow_python examples/python/native/mnist_mlp.py -ll:py 1 -ll:gpu 1 -ll:fsize_Hn(U4qA^R^D6=mDf_GLt#KM2R7tzHssjUNaD{SnFQ>}uw!zfjI^lJf3R zb#xMtJOQT)YVcTxF)<9()Bkhku3frunI{%Br%;rVoxqHl@68&F z#$yRWvysAKGbH9Wi1er=B7u}F1YQ_^opwsxBA2IZJl3IOS0u7UJ%4JHtajL!cB1~5 zkN&YPd&3c@
BN5Ab8W1GS?k?828ZAcA}Qv3q;Ktx=}PfgzE4lchUa;ZZQZ|f zDY 2`;GquJ9`r{ss3DkOrtGB^JlCuF2{?<1qsS*9#{U_V6hp#+u2?7>N< zL1m(tpxf+bp%8vk5?3tgfONnUJFlmNMH=+y^T&f&n50Te^mS!&MIo_Hw)cEvSLDFm z-9}9Oyl`W4>#)*sTPBrpKr(VPINqq%%urP-l0&MDM-a~K%i^MOj|GQ5c0JN1-$htX zL`BGavXiWgJ=T|4k$!*YS*02(($J&zu6fEnTYAe`J3HuS;tbkOqCI4bhK1y4Zs`TZ zTctKnX=d^aJ*M;+p5oT2O!x5Busex&*Ck)J{r-+MijfR_I-35ntUy)z{5r`b)N<1) z3fuxa(+BH@OvXui&e>v0jK}cTP`;{OVkM{^DV9VM1+Fp-k+A3c(EYwi?HHwp>>K^+ zDBq%EetNG>g){{#odxg2sH14; 3r$>)p_AMT7_&vFl`Ka-O wj4`CJL zez1;&sGtzL$V!V>*|DN0Ghv$5W>?g+>V(K|Fye-%2|Jjww-^`4*GJG|1V5~uX8R1x zELn~=4&9O8i+3tY?G20mns8z5!(2wk8q=y{Umr-yu9?_lyUa9$I*4h<=zZ M7X{A0`sBTC(6KlxJJ3H2|{SaBqEG+( t!BTM4gGSfv$w?-NHk0 zXv|G=T9=2k)_x@Y{Q=43+M3Xr`)L+C@X0<8>Et?G78j~UMI@}4jRzjtL4_V&fd|u} zy+u$plxi0Bv?!DroD5B(?zszN9pjp~rJm(r)dSdCI-@#|tM#_3`xMDn!`9__G06 zt 6a|(0WA{>N|S0>6LNf~AjY;X^_erOU|kAUU1Sn82(5u(WJh2*0mqB0wT=-D z _(~(1Y;V49gdd>Mjm;#n(_38$s#KA z?P}Ql;EZ> roDzGnRLNfRyY*gvY-s=SXM`a_0gL|vLCP7-Qmp#~@ zcU(;2MpO@>paJj{q6rv8fu9g(8v1WM+CT - c; zePh{)+#Dwjj#(PT^5msa2~O4}n2!d>TEO0K$O&L`oOqYih?kW&BgD^Liu{T5`Uz1T z%kekleACM|qF+|2N1L#-qsFduFJD&nL?1edBp9N}RFnl34#|NZ#loE`a|!jx03!N$ zrO|OLI;9e6T?um{aZZGBHlOrJGQ9c>lB-;gG~wr^V9~>E2txr}WDM$ozm`aay5_+n zxkd(b7!{9J<{@G#vy^}4sTrE|T3_wVQ)oGf&N|3(;$AKLiA i5UsdiZEX7UjtBh$) z25?pGDWEkuEllWHk`ti|@dBf+PC*cCUCFfTDHO!1OYq}BRg(=XOuKU1f~&gsR?YI| zi!&&F&uf2dIb<&mi+?KxkG8*eBZ&
g`$y4nv^g#JTm*@CxSR?JcL! -K(tD&g8umJ_Z|w3J7J! z-TeaF3$41FvV3uE_Mq0o`0BPYj-c#!sAIB!Ib`r6i&OS$JZtLI-KXQYt)7?8-n%n> zi4Fa72QtIPVy+0}D}JfqWi*U*Xz0az` iC$?1Ue5&3hj5F}&7!r$;TZ*mhIW`e;b`3Rq(rPU1an_hxLY|zP z5hpdP*4?P~_U3AX2zZgLoISWq(Rz5!`Jv~9hkg-N)K}Hpg{wWaYEDCH)a@TdT~j#z z>Op+zrqex-Vuh<>gdd%>$DI+rlXz`Y%7r?Hu-pZ$;xzBNnq}nSCFEdQ^(n7%+8E0I zTD{h3biQ{@p;mqC0O3Vil{FvAUQ$n4MrIE}?`TyevLBaTD5g(8KEA0z(Wv2G&*NJP zxFaK8HX6mr<0VN0A(gKlEQU8GFd7eQ75DsZU~VN=?A$hTy6NZ)`^N8_ z3e7WG&20*oCyknCuQks#G)K5JPxLe|eZuQh!tJRIgQumk G%3P+^sIg(lqP=6Y z-z)EShl%!GW2k+N?b|%>JNb0DC2%McUM}-he@=JM#!-y6BW5_MhhOjer9UuDxcRq% zgRxBuS$pa(@>C3iB(EW5!r+FL9kj-0+S zN7b04{}Oeow=+k(^^|-=wY^EUPgnj#Jz#d}Hg**xaGD08-!F8k`x~hlcWZifHh)15 zDR-6`_Y~N-I+IFD9eN&X7n^7|);0F%=V_*-cWd0Bv|@TS^AcKYO)jMO_OE5 m8oY9!Nhh ~j(hy9tncka_7&m&clrH5lQTQt`(Uh3XSr_9`1y*@ z^Y01IcWtg;>XrDC{`~LSbD+qtDSQ6AOyZ9=pEZvpl2E3$aIp-evMox?5l+Wf`_o|l z9}!}r2>&!BuDsv75|KiJ`_uW)9r%b02~^ZzNEu2R08t*_Bn%?Gjt6=~jz0;41t6Mu z#cpXpr5*|;UNY5yNwa}C_Oh-3*bBo<9JBX{)^6rQQg~3n29~_RhV(&=C<(3d7Y8HJ zQaqrlcv+Y>q>_d-Ho0;jk#h!Ltj!+YUq5VRj|N~^b8N)E^kqUN6yOJ`ece8jFQk`W zF#6h6i6Dx~@yEkm@k1#BggF~=j>HM^<%ItkR_;RWa~w_~q3pQuaLQN;_a)&j%1?j@ z#0~@}j{D&`=PD7FSd_} }7lbr#KOPLNJlSMT%q~YZef8OCy!*I vH_5 z0LFifBXQ_NASe3z(`4PkABoQk@3rO;fI3OYgTgAuwJQXGhDf0!Vf1$d4S{mrnDY8& z6ktP#MZs4^Bml5G N`?)R>8MOy4#o+-YYLJ#HLmLU@k-%GPsev|neTiG zAvu4iZ$;0QRJ=m5Ax?&qDO89Y=|g(&RP0~uQQbwK3!mzBIA{P>4TFdfIdWV8$s9>> z5-5v;Jp#UT5?Yl6wtZa4cjD~p=WCHZ-*1M9IljHuJi`zJHZ=5JD){8Y(WQML*bd#- z{g?vKpb}~hKzqUGAR1bT1hlYI&rRl1{HA64mv8${5!Nvagp==XE#{nA`ha<|1lXSw z78i7hV7C9+Tfaro*hLHR+I@>-DcFyyKR+sK41dcUTU~sKqkY5C2XNTWY8p$%{ErT4 zUzj9dOhX3(AWi?KNJ10p=almx!c?>n_^M|6lJN7RP6b@qc6yi7c*y6s@iZt507c>@ zz9UCS6n6f}$05hBDR{`B(=0#nd)S$85nG_tix9o-998h$_H&0-%!)8$<@&|y@IT`! zn;}>VXEPPJ`Mo zzI*Wg;mPrD5u*=+pBJzDzWN?DQGe{_RQ}kH7(vTf@t8RnkSX3PBCw>+@ A0ZPixRyUs$aXzqt6(NaN;#i-{-);Y1e>^X zZ;7#;_|4qMZKAJ1TA-fzQ%?FtEuEP_hvHctOT&CTzFK2XQTlvOM{%};L-7({sz^s0 zPj^%k-nBwm?>eG?#MxTm*ore*`BI$AlqqSbJjk{2UTcl!qK9mk0>Z3cd|L(+2|R z0q0}i4hp1i$GLe$)P8gGIf{_9^*H^lR&Q6$+6(K=LbKEh{?6ZudV;P+xw-k?ymZ_v zytMWq*{|TmaqsAcZ{NLX&S$@S9qHNi!zb>3-)^7dua5ojjeqm)*hJi?+8=%iUth%f zp8Q>#E`*S!0Qd!x2TAb7FGD~@<~H@R3Vmwn5TlDO1S*30MN|llj!(rZY3Fibf5mRx zOvY%EA>!%@B^ZKg0(qzijU5FJXWra)KU8@7`_GWVpM581pXI0v03cMNSui0Wz h+)QZ?P|#@3qSn_pHi{ zW{GeAI|qR9N}Wa8?!8u^NCpr|F~uSb1|90 ~?T@RU{-9KX84Hqs;G88!IFfvlg(6m!hC zt(se*`Ob^#(W3w+4 ( z9fcv@zXTPvmOz-Sv}6!ytbN$|f_Is#OoJ8UrwTRljE7Sklr3ef9c$>iQurp9VA>hl z0RnKmtsB$aPTdcH$!9SucGI8oArL?!L6Ibg9N?vj;(2m-0x31w-_X?64$fBtH3*)l zT<$AS1tb(zLA3M(xVoNa4H2S9RG=Rx{C4+adNM-Mc zIyXP%z38#!!YpLF7?$sYqyX{GS!}wiki6#lN-Z4DWy9&OoF(~2+oQGOeN;jW`+n|x zdv<3yk_t_0B|T-hrXpaYBo|G9)|aDaygvPAh;Wk*F>c2eKYl~{OWdU%Pdym4m3~T- zE1lZT5K8k2g5XY~$pNlF72htAW6ly;(uHlNY(1|c=yLvrbr9_Wims>7ND+FRLzt>b zlnnzi5dvWn;io(R;+`!(A}*KYBnE+lTug3?983H@s=Zj94z97#GHMv++UP(SD%BR2 z5Kn*MTz+?-ar+jPc Or9iH6rxemt#}1WSO=>l$ioKQ3$fVxZf9wNXyvSO>G7-wX6-jGHu)S-qYq-B zq#dtaVZKNj@R5D5^P`?I>!D9C>IR2FJdpde$JHlObUS8M^^-OsRW$&s=MH + zF86#qM{9L`DN$ dM$DROwRbJ1?&q!_Y>gyLdsDeZMFg zOR9L4q*-0+`}gbq?XO;+Q8ueH6McC2Jbs+F{u-ZbK!SxmR^E)2O(nwjgjN_-N?r@C zc(lseU!96v5j6>ARW^w1S*_Wd_GmXx@tJ_NJC|3?h3$hvh!V-fI;b9B%6N&XRf2oA z%96+zQ>Rxvs^1rSbDz?@Sy=TxMF%BQVROp?n23j1{LL&RSH4rZ)gf))mUMFs6(xL} zIZp!muBz4IC+twQ#CAE>z5#O!MyrOl#m<#HO=*i=J{Ie{9hCHpEez5v;%wV?msuD! zw$V;n7*1H2=3G` 4K0ZEDsoWc!nkS(Jh@Lt=tnjx(wRIL*cGvR^E|07Lg27x|QF& zl}9AQrP0bC_Y@!7E=#pK hUboPV1-%>*#swm^Evf zh)pcc=7_e ed2b9%*^NM!cWo`%lboVg|HIU&Np zk(t_LmN7Zmfqd47d@holl0Z&PC#U6;&zF(cFEo &hvpfsMwZIbSGqWsCSCEtbu)kwy-sNAUyMMPFt06 z&ug-MMS^`@y2ZZHbX;9}C9cQRr{{jJ$Rk(#zzO@_*`7L_L+gA?{Tlu8t@MW8cHL1C zURio&Z?|b=uXwye$An0iwnN{9Lrnyn+RN}wPwyCRZ*%DFk?wKOcI=UJ?2mMO3E%l# zzlR?u;xZ3uoUq&ntbOxEMuOTWavayECemLeIL>JI*M%qVo9HXXIvhyvlSQ{b3w=7> zYxyDB=^5MUO|R2}@ts;r>r`t0f%*PV6E@z`&mV#33l96g;gr4_!&gL}Kk;$;(rDF` zv)|HZ|61? G{8XmaQ7XfEbHTtw?o(O5ox*Kr z#YtzSU{SA$?kx+>TNPahIxfm4E-H>Ls=h92Q7+pOUDPvNGzwfa%U!gZT(tXKbS7PN z7hJagaUqHx*r9kpPv^i+lLPvW2iAA_9@rgqU{B%!gNy@)1qb$)A24b TrC}4t$barqg-tgUC9})wgs+s<*xQkt`2>!j+3rV3$FYB zxKcz9Ix8M@(K&d) vlNGEhNz`G{Y^dz%9JoEuzUSvd=AQ(k*(yE#{9KP1HSB z(fx>y`%x43I7jzmzV64P+)pIB$7i^oEO0+n?tZ$-J)zG%ane0$!Tro1ce +5kY$|EJwBQ?V#t-xdbe7VPkCXe(!kBmu=%mt5&e>~Wto>_{X939VW z6VDt+&r80Zm!mwdBzop%c;*#&UM=^$*5sMr=UFi6S-9YN{f{SC)a!<#SCNj_O%tzM zj$XHYy^5o}?j(AZWO&^z@VZy-RodiL*5_3|=~c1db^ni7rKtA oUCS3%nnfdp9(BH}-iqO?o#kct82$%@g%$QS@om@o6*hX?OJL@b!5b z}4jr!&K+tH7tb+^46>r?=0iZ_=lK!RPrOAHJyXfTHi9j_;6(@35oq3t!)nDBqWf zzM~nwV+FqB<-V_)d?)&RCntTU7JS!V|M3-w`b{hP&FJ{OG4Xrr==aXo?|qctheW^G z48M;Beskr1pPKyU`}`Ir{T3JeKL7Ds5 d=qGL#r8w zeij`1RetDq)1kG#Lw_a@{arY;{^t-7qe7IZP+cm_lnQsEBK)YxXeug+iq52B3aLUB zRN-c-NIz9{iYm5975_`ciup?@`Ah2hOPTshJNe7_`O8N8Z%Xo)%k -Sfj@>g2)-}2WVFBY&>DS)6GpllkT;uN6j7oZj$uq`P-Ju^U~FhH{+K&v@GyFWl@ zDnNHJVEf+yqFCS#r9eI1z@4Un>-tWCyZi!oM+fdn3N*+JG%O6 3Gi zZxBT+c%yf^=msA!4R&=3KIj+h79H%K6zq{1>{%G>RT1pn9PHB{>^l|gw-|irZ!lHt zu)osb0NulZriX)^4hQ=kJ{)~GB n(P#M)-Uv2bZAOaXliC?XIf$C`HIjB&7tZ2p&3)5nTw$p|Aw-~!m^aYIJ#lk zreQfwVVC^EE=Px5Neau&49hDFyIK);tvM{eKdfLXtZ*^x`rk0FSojU4@FLyto2KEn zoWgJWg%?MM-$@ED$qc_+7=EuJytFyItUtVbD!gJb{QlqYO0kFsN)c7M5!I# Px8`)+W+3pnC;TQQd zI`UakWM^h%S7Bs#<~04kaGTA4$89MaCyW2D6rimC5}?li5uk4WCjvC+KLRxD|GEHW z{Z9(ePya&!`ssftK)+27|3`qn`acq&3;z+I-~Sb$8}0W0mh>;~{1 lT-h0Z>$8F#7vXbk T$(1Yordk?^a+AB iz7kNQswdTMGPcHrAI7XVT4;DOwqW zh@o@P%3=4r)kLU2V)++D{1f~^0OE#C?61cU(w*T?RD#a&Y|)S%OuDu*8}&{Zqdsa4 z(Xvu_VN|F5VC_p)02_XOy>ed|-VE1JeIW~GMMw7xK?_{AL0?@{^VYg~<$~D~Omb$Y zzCyKBkN@Q%Xv}b_@#$LD^qv;=8V=Uj%DXDcm9>QkJ6i0)U_qTor2#Y#0~YkARdwm0 zX1$fChxenTmKfVg6q}wRaU=F3wNz}m{J2rwiD}fkD&OR5b>|!E(qGkO{;p#y)N_pL zbG+*>pRQlF{% eZmxpj{~pFx88!TG zFqT)kzx9(=y8`~{@2Xz=66vrk7NH5c4n@A$kg->rnuHbqk+JoStgPm_3!Hfcxy9ej zYMY;YxQ6>`|0M2iQ*Y^$rJg6utS5havOvO QT{)gCU+xFu1d?Xy< 6uJFTj-Dxg&ffk=GLGBe(VEQ(4@z;7FW~OTn)QxDLQv zJR%oE)X?ERTX}^_n12>3B*$2fJdwQCd~V{|nS^H@TSLl^ zX+w$Ju=HI?FeHg0BWe0pjkyZkXd4;y _h-WNA}O?R9Fl8C8^R@wY49c=GEHa7ep+_|2wnXlc~Cd@}B@-f={ zqB73ok>}|0=Kr#>ON~ z|>l=1be6iniXbbO(fudAO+ki(@_NlASm2HnEE)Dw^jC?P YC#&~Jd^ZJsp9Rq}T-|@JKvHJzDOzu9d zEq~Q4$|a1wx}|unN>R#h?Nw*NM0e9fuSs^0&jdbpqR(V<*mrV7XY{$~q|(;Om!dDC z*8wa}kZnnv3MF#lh*OpT4Z|V#U@!X-rzqIVq1e|?nh@SJv?Uff={r7FK8b6Y{M|Ho ziUa|CFg=+qOM*c0Fy+liX#m-{ YC5b@Lcw$oel zA&NBgMr1LD1cxY%{aJV|4-srv8azjYh;U!~*8>qJPAGQzXxhxSpQwOtsM6mYd~{1P z05TOE^Zu6o{U|K}e)zr_6@98_Dybj+PTUs?<0I8JBh5(&R1(?`5BH>^Rl44&{(Pfi z%1IziZ%#tTap87cWOx#Kzb@yL0O3bOzAt~1u!tapp}k4)*mV-e+LV)6_#uV=K|Swn zG#9@4FN#8fhm$z5G`Is7rE(HM;= @Hl=XZ zR16`(o>A_CASmyB3P*MnzT5QR-4ijseFZEwZ6m50vf)OPsp#&C4JZpqAaWuX-;hi> zj=UK}#Z(G!10@1c0PIKz#SN0fhbRi5DKt2W2++h0nhTiy5NR4Zo(*6$0HwUsOnRFl zKmx%GVGJUL{U`=Dm?S{rr^DG`q8Uo~2ou={;FNa?#06o&d `JrOFJlzEC zTHn8_K%CmV{sY8(12lLF7ls6DDj%T^+c$LXYRDNh9RMx-h93RczaN>x1@KDfLosZM zm;@A9aY_1$(#PqsM2i$w3RU00;70omj3`|37fc|u1t_Fq$AADU0RrKs>G7Q%^vgSf z`)_#;y?4wvJhu3@{%ae`*6gg9s@L$W^DWy;y20ba9}ko`-*&p~^ g6XbsqZp{p4v12AFsaLg)qoGk8|6WJK6mXtW$)TfiYaRGwahM*29Y zW2p_m^&C-{?R(#fJ^Gvd8LRY5ip-W~7|iPDi=~s#!Qqdg;EiRwqq&f>=5(_KF~^CE zF^K<6R>^*w*06Fl?u)JZ&7324nx*hhFxBeeBlZj=b{W5QqKK8LEXIHW*(I`s-XE7# zWl}O2C1hr-k^szj5tyf1%&60$`YUxsqKqJ-z;S&TJ~Pc1MHImRPJE6>C&C#s_Oi06 ztjttx^j)=0vRqgOMq2QOZJU?Mf Bqme2(-e#+XD89Xz33OT9ow z!SGhxS_OQ^gI#~{RzxSVlobm?R$SH5L*W&9z9x9OD}&_%r%$u&G_f0N9|InX --?$k+#<1^?(MCo&J8;!J{xf{5ZXiT3KhgkYUa||+}!T!p( zW-f^DNPYoHHi*Qd<>@rv^?RicyS$H9kDQ9AX!tH~5?3yJI+8(>BcTk$&%YUFp<{2p zFPx nF?f6#hdSU+*CCmH!xP)GgyK7oI1< cU)&!10~``i<~&DEf!j2Goc+b&20wDNbAT|mHm75l@ahrj TB!bT=i$!k~a-M{+?cHyP|S(p=Zx}!pe~QmOFxu z6YGhqZ|-o`zI}SMp0xJ$^~1!UzkjTs0pVwpe%Wu4k*)*?x&V*&0MN o>0134?i?p1>##O!%Q66Nd%Hy4FRwl&L;>nh3U*cgZ zw|+h(($%b!4<5MXC1 qK{X~Y+bIJi2qY3li45S>Jw+lac*tYPPQ~5$=V)~^%$zhCLtyW* zw{90zppsyC`tH3!M;tgT2po@v=;w$+pA19bA~P@~o(H{fq07{r3&hm7LWI^}MpBiG znx6nFTt~PwL4kyb>E%dlwSd3 0 zo^Or;v)LQLUN~@ec4HXF;~_9E5ILg8Mq){-Dd-YXD|Y*O;W-s(gfvecCP0de#sW`l zC!L^?>M(Z$4kZHW3wbG7Ic+~UHc&~q6rgXU161for;QjEBflGg6~?I^V+Nzq-N_Yl zuiieuQL3^ E@8z=KtDI6-sl#qfzkQdIf=gdHN_ylG*~HWr zIyL?+V7K6|5P*szDWCSd(zLp!P6g~8?F+MWm-l%{2q}&FmZN! X5COSV{RH?v>4*!0wV7qpu?MPJ*p7a+Ww_L8OA>NZatq)Am9lq(EV8@>c1m zP<5XjMgF(i-~ )r4PC+s!@j83msq@FUaaA$n?3=-9EfBdPQEHug^jAnK-!JeZ*8 zI4RICE}L5bV_xaX+Z|DT@n!OPX^*tb?^#6@b?kVm23s!TnKg3*py(Uj+D!zHkAMi% z-=+3#{L0nZUGH~>c)uD`x?ell2AeRQZx`jY0Zrg5oa2V~Q>PcUXkZ_WB%_5>H$j(3 z?x%L+0Yz>eid*`uc9?T>UD8lHP_@rPd+wBeiX5eQm+dX5&sldY S6LSk+4UB0C3+J|uAt?_=&U`vpY1vVixLubdsvw AJ0{#Dw|C}51!67g?@ z9um2cOgOp&C|p@T#mW5}CqS*Uoj;p+&Ef$flIj8vJu>p#gdPtCWsj0am3Jgfwvb;# zR?^e((2bou-whMzNP=hH-r4TGrw~Duf}r_82rq!T)&(dnD@{Z61rTq3+XFeQ4JZK& zN-k0W%m|#6*ljOU30#+4#4JF|fhnoffA;-7^={R4ts^iOJ-TIs>Rt*{Yn(1@KyT&m zO3xNXG3a8WIQwfDjk@xy493QwAj>Dg0Q?`F?g61cpliaC_o3OuFOc+4bP P?7@>I@@OE?z+w#7?G!M z9k`9*o5R=_davp5b1(1Gqer_yn`hcA$d90@K*n1eDbT BftJJM~wYEdk0Jscdb1x=1C#sUD(ZOn2{jU{$jjF>2{@ z8lOkW6`~3U-VohgR47cOSKX^iKFMbBw`+1AncPy@Ljn+ziIy?v^)>VGvZtT#wuY(* zo6%sq)SEg&VKF#i^Hi9AuKZ&T QF?&a~umWK-G)oK5>S}>)uVdPuPuqtluO~2={@FJpS4`AvtS_#S zms_4@=wGiH=5iKK2?Y|BK}5%|Qe@443OeA}xN@>$7Ua}v-)ZMF-mEJJ_s?Q*c* z>8^RU?U6KwO^NO8mCkD_8@SW1#9`A-=_@LDh6* WQA6-v21tM OJ&nCMO3$<{Q*IV&r4F^t-FWt=uPi+II_T|jaD1`WUAIQJ zCKi&>P+PX+V3}j!`5xI>){6 {Ae>L8}vVl8&_J5Du|07}lYWn`4 z`TKvB?f>2Q5AOUk@q8H$Q(nc);tKYnDK|nP29-|mgSST3FvuthDv^TDpkN9pLgf_U z4cysB5uK!nEl|Y&P_UxT5{k|nxKql+S-O_Lhgbk9=!YjdTZaFy-d3T>8Q1q8+_~Vq zAv>j4F;c6}TSNypye;9s;m&Qr6qU1s3cCg+xc`Ma2X!vF=+wICiVkh@g|>@q+EKzH zV3XGgB{192WL }q?zIJv(n-idw7)m~ND;l)FF#~u}RC^?sbFJWyq;47h_`=~5Z2~0AV zv4_GirX}x9WtgCa+|M4A8HJHUAzE~pBt6+m(XDxfb-fc(NO!d@w{<+``e1h0!OAIQ z0TbHyP>Bp9sxwKe5Cal}I}0%&CW~X;e5@ERMVK;|l5uqhZA)NB3;Onyu*B6_`k@SC zyj#L9`@laSs1FnTqFZ-0E$jt`tTS{~WK>+v zk_?fbGC0Z>eOiSBW?pV3T8I z&dXj(CQw;i4|kul{h7fmSu!jeF`VG&c{?)sbuVPHChg3Nmw}UMxxU?r3op-R4Bz?0 zNXhVswzAXWJ4jVR{S%Wj7Dg`yzq}a?v&2J4R`5Aj&%1rYuY3EhcJ?ZHj8w0%?rjLs zKbZ19yNYtx`%PYzh~_O=*XxPNn^);7WN7 b?!LBHE{4Q^zWnm(G*!A5;gv~p9 zez^}&>>Iq4Ht@}7Bx+L6e$v9jckq&1yNT~$ QsDE%L!Q7)Dap2mYzR$J&OD5in8@Llu zROjF>=j&6SJTVvdy3FxExN}l|K9b?z_xksLaHr;gkChA+{EIvPABa2G|G$7cD P8KjMh!bfz3__~iH>@i6g8R|HC7lkUJ>=GIclOm zYH})SeQGi4_1`FgSoE|~^o(xw8`J2wPSNlDqTfeHe@Kd+&5Zt77(G`J{i!*6zCU_l zDtd7-`t#rDC9#-grI;_eF<(t%R-9tK`Ne#Xj`@)kvzi(6voPjYMa=K!n6>_xKT|P( z7h~4{#sF~|WD5 4YAtp?3(?&@|En zRE#1DVxbENdL;y SI*29b0@QJwnftzfXYI50 zS!?eHz#l9i3CZXE`iAlx2*qTCVoO4CXF_=|gz^oC@;?j}m<|=>hT;Xogyh47SB8mL zhl#EU6WbIfz9($OfiQ`TFv*fIsWV~H7s6zQ!(< wqVKE$G`7pw2I>MS8K^Ba(k&m=p8EI!7X}>1YVN;~z zp2$@PA}JY>P9>4fXCk4`NL+^_-5y4+o{n6@jid@jt(A{*Um4|L9p$+u%4<`U_nxSA z2cmp3qI^rD{LVzJzYw)yIBMg=DF5lGP24D&VDx7B=q)Rw1FWOBu89uZ6uoUv^!5YM zK^f7(CDA+1M2B36-Z>n->tXcn>F7P&=upAEVe)&!SMH6l-W$1QZ`7u}(R=ppJ+L<> zV{dH9-ncV+_g&Z W1S^J&Zd&9e0Lj9{PuL+1fnyr?vV2=Q*<3FCgvp1iRl8bbpw%Z|KH16J6dg zEtX~4H;2f}IPG+b{f~9>^kL_piCSo#JeITd?$O}cqkca&%CiL;nqtJs$9PtM+Ya z$TC+ucOvYESUXo0y@=LUC(hNx{#Y$PU2<#RH6$(5weMTfe%5Q>w`ME@wjbKFe;BqO z&gVmn?W^t+kYxMvQtcnT<&b0x?U>*7*ZnNn&R;#VjM>f)H!OR$AFsE(x^)R6Z9m>> zUsi2D{?-M-wsT`w7RD}qw{5R~oVfPOvKfMHKfio1|LO^3+kTmOzVLQw-2CzX=y5YN zNA~@{*6h#LteryP&(>`5cWZY3n>9;avStgvS+hcaw`R-m|Ft!1`(InLU%y+k4x+H$ zzge@|e_FFG{eQD&y}L)$N^(4%R3vt}r)Vf1cXujBA7)VGN^`aje79!7WU^~KK8akk zXwB9D+}3_dCD1wmS+gU_6mZd+^;)uKyJu~Lu*cm|GT*FO17}_%#kY&rY|g-UYnF)t zT|9qSvn@YcvvOV_WX)D%!h0LedY3sW1%g7(@;g}YRbsoSHK|gNHG4%Z$WusLv%*u0 zqO@btnoaP$e+9B;d9R$RV=~a9>qKoAt=SDpQjj%^mw42`z~HnivQnjDcf!#t3Kp%| znni22plaEg#Vczby{@j@_LZckSyWZOQv-gy%uycnT(V|=bCfS9A$g>-m#o<@1ezRV z%}xl{vAGHps!P_aEeEn@YgtRytZV8wYu5HBYt~rvyETiDVDY`fE?cwJd{_dZt_red z>n3LCgt{ebw&G&aRNbOAdmMvt{MnkVTC`@daH2A|fbFbmG>IQrv}V~-K^(}MJ-%$s zQXPm()+}q;n$_u_F8XH87TDsyTeH=0VPL>c>1S&eg>7#J#lBgyjz6qfLxr3fk)#@X zB79xaYUU4XR;B8jHOnLr oG5VW{uctmjYG?3Gk;U0yzy8vE0AS5kknX1y)e z@-JGmXCQ0Vlfj$w2~=OQX31iU*6hHdHGA#5HEZybHCz1`Yc>h8W?TPe&1PYe{ M2XsYyfJ>n*I8dHJkavn)P0^X44pdTC*@sIaQ2T z&OckTWHG70JE~IwsXwe)4EAI~89%T9S+g|<|6 q5BH*0n-<-0Yz>Q8IdI1{&M&DIj+B@X7`maN%8)Uq|3EtdO>HJg)a zCGip$zN1^?7i+fWCu_ED*_xHIS+Zu=E?Kj1V%1-)*;1;Vq}if1dq;Fv6=cmer2fU4 z1%!UFX5T{AEP2_QJ^dGJR&mLi6;)ocX0yc-{ -ycArD*(W%{qyFvu25l)~q!tNoqfbxhC?T zt=TD_!9;`zlY>+vD2lFKwq{KrYt|OBW?g?+vqFwA)S@-Z==-ZROG{m}W*L84v#vj^ zSzPR2tXZ*Ntl9iBp+##}n*OiWtcs}Dc%R0SHR~q!7i*R(FQLZ#X3Z-7vo-4tS+kSB zShHA^3^YeJ`MWiXFHN=hX3cg%)@*~K$ZA5jV5%w;k-2QmLUj3(H5-6}tXaJMcWd_L zk~LesY|VN#(XijFS$Q@=6kN1so3KBuS %hs$v@w+v<0mUVheY0lQFI%&X|7y)DB7>H! z*`V*%Z0?dZdlIr{kyyx@T?g=F{neWFTDE3mP`_HU1Z>@3t=W@oCu@+g?k8)u7P4jm z^q !c(NYp_p(hIU?`*}jUuqhn# z6c(1<#pBwA@cPA?h1|iB0yYbKD-mr gh29N)nHCqf>vnl9BYj$GMnq3`Q!k$3Ip-?G*w`Se3KdjkfBNc287P4k@ zf3ju^ezs q${*UL# zYnSK9LO6XYlJ(a)vP&omnj;@3V5lI5*5w$xI7jB$qKHX&kNr@9tA*ysWjL>{Ix1jP z1EL*%nIns!^a0G`92vkubL2>9j@-C7N4D;wxKNSF%X4HHkI;4;m9scU-T|PBmgmT2 z=s)MkF!bUac|EEgj{Y`Bu3wxZmn_YZi=a932 K}9Dwb=i5jtnk4z5g^vuKRy6M+R{JGDp7g zzip1}3eAy)Q2(pu$RL#m{60s{{`(wx5UI_^L33nqd5&z3{r`N9ycUo8WsdAh 27fW+wJSO7fe>X=4a9YqDne~@Ba>-9~ ` dI2@m-uF1Gw~`=E!V3=I?XleamxX zN#xISWcK$t^2T50$N=tdbL1D_=g2A8U*^amf1M+525>Py&5@zG`0^YX5`>{Sa>m3z z%#jZ*&5`qGuz${xb+AiwWS&Fc=g1+@9GQd7g67C0*z~12veW-$jx2!tkLJki|7wmr zf@E|4I!6}7 bc zPT%Ip(3&iJagIE%ObuT_P5*O_jOd==S4#OG&5=)4Yy+3)$S-d1<*$A4W#9bt`_sXa zu#4LeV(Pe#qP^4IYCufI30Z)ktSX?FtX`kzO`JFgBf$bi00v9FG4FmAKj07~>_)g5 z&7M)DiiT;D7sxLjS<{VtGm{fn_o#O#Z>5mgB!G0p{ywpZR3`iu;b8XySqLW1XF=9% zaqIeNC*m1Jl|$les*1DL;v8A0d}oFesYf&d5EeAMc*;&77@ngA(CC?B3Qty|Y|-`@ zP#-f!5k`_|_CktBfFu^2*!3inOZtkZpb; m2wo!uPID|hA_J-f}d6GR2kT2T{c`(!wg;68bJmpe+pPY6sE)ObOjbcRm= zf&$@>9u6XR==T;lqR9ZCD9S;YPfMF%Y%I(%fUkX!KY9Z@3RmH~3;2|(rl_M)*(unV z$0j&-(kYP)8}w5Vt}l )n|v>q(DBRRtqEowB-7S(CH7C4;N8 ztqn5N@#jPQEXwTQ=lf^#By=~j^|c7VTzkMDW;@$Ljyj96&1@<#HcSo0T$$5N36M2= zC2RLs_R+K1DZr@R$5(J)B@{GPEOz1tTDulrwXevIe$r!HgOZlotdcRF*g(%E-Vk4$ zBVWM9PQO|cF4*(?w9`SjnTg$j`8tI#K$#ugrFLPybPds(mXwR1Cu1C0#CMuBly-~_ z-!^LE7HE!)O!*C~prs&6BRI&7P|<>w)TBq{6X=cewi1`A2OALsxJS^TvS-voVIhzB z3`bEYEi#N?g29LrF73On3179f3y6ITbGteS=flW?j4DtsMTHkn0JfT4NAS9`5$b04 zSXC-rl%&XOlP^jv#xn=7%5cmm@FYH_Q{W9XW8Y+eeB+HCbN?AE$^@c-L-BkvYyj}_ z_)QoDVFoW%F?e@-84_?X#RY~AeQd*^fwq32mW)Ifgut^>_@U1=ySmsoC*W>mDeNe` zSAjNmIXRNeLdSR#vX8E^&RQjQ@#X+2G1hhKeiZ9`(}W~Cv@f}@Ce#0(^6RbKaL`$9 zQiym{SuOa6>e|#3Ncm3>Ph&pvIMsC%WC0K*SDLK$d2`;dFAU%V2b1IBXe1H%BR|%d zrg~GeD5x7V!O10h+OT;8r#$mMt_k&JAaIl}xHAW f34}9$ rSa&rUxdp)&1Ry^| zV|G?nN0LAQsR%+FMF9TwKD2liMlLR%i_=o5i;HIq1(}%!Rp^qkJnu}R2JiO>i9+S{TaWrBL^W|7^v0&u@({& zEvmP*m3EbZF!D2zJG`gYYr*=pV#xd270JCC)Eb+p&F9i~kzt(L2d{B# K%+dv0N6Z;CAZV;B!sPf@ygQYqN%+#idl;lhBHsGD=cE81ow2BG= zgtpFe2RU-h0j{ECU^k jHT3(mrxOAb_6;NkRk063=g=yLNQ63PF3>-&cFd z(x^tS9Ctd0rV(D 6pQd!4RiWWxfe3O)22_;D>|Bu19fCHrSzaHYsGI*s!40LVZQI zf#)Jxci^#19)X!XyZbAe2ah;OU_x%z3CE10-VUmYZB7wJ#>{D#7ALB4JFhW1px3vu z0Q@X(>e_k0q%YATi0KHe3R~fwyr+6 5c@`}Yo z+!HI>oHul@<666^D+^g9*{N5gS}>2)ASa_n+wP>L!%2V(&9Iv$OU+l=o{c;pM4vza z<2O%xv}cmphtoo|Tjr&Yx}3Qbmyd`*z$svsDbr6x0LZrrthX}dRf~QJGCv;XPCQmV zH*k0jC37|cv3889M5r?nPBxdebyk-w7;L&y-Bhm+I0lIuk5-T-($>T bnO&`M;h zaPyoN)dwjr!SG_G?g&T{ryTX1XP)Cl+027Pj4>|$EW4F_QQyMTwIlo$({Uce%h>oC z6bq+cYBWK@s33ozD15Y8e6j=9r49sX?;DWVzQambI( |m` zA9k> J114rdB+i49&;_2mm%N#Y?#dm4WV%=DfO`i#qMcD!=g=Tiyq?dw zfrW&=Hwq5sO0{yNsaQZ;@leE0J!qE |l@8zD&}eR=MB zKvo=MGTfCq(*aGzU3+xUggS-=_M$V`vEdw<+(>yWHyk3K15L%}#hsw3I8}uQyf7tg z_j1nIf`*vVJE5J=YKErbpz_)_7`Md&WSci%`z(nHaw~FCEXZHnif=3B_gE<5B>`jZ zRw*g0L~^4JrStN!N;0$+pRjB4%qrbU)M{m(B0HB-8tN#hKenQxHC;Z|9dDEwt{-KR zM-weJq+5>;*H0mByAY?bI+A_z^m!&Z-^><&Y Sk<%En?T|h#t {Z@_p zHZypYh{qosrbSo=*DyKpwyp=_#@Z(-bOjYbCF=0XPLBo)cjF~%R*E4{B)|l;1fA#M z7M8dCZh2TQTC=zQXm#H^+cF0|&yzh}#Jc3?0dnY)HR~lzo(IrzB^rH+>?x!nspt(U zNv_j#UGG`wH^OM%bJ3cW<<*`C3_*FBDyADPNgj}!9!WHh@e0^jPYq 2PF_lK?sj8sVkG2F|wmuQ*Vpsd&NW6?3WASvR;q-?aNGldqYm*DiD0q z_*FfUZwu1k+5ppO{y(v1RmO~HjFQmNM>fb({#0>_{PYaMwAH8b_ww*B*#E$qz3oTF z$d_s3Qoi6+M( 5r>9Z2#M<=nrp>%P#) zvNii)q<6!}(+$@xH})K6Yz$ms;&ax`2d=1(GW1~(=e@juMENR)8{zJQ;IrJ-_=fg? zB)6akilh!|E1cNJtQkRScCCM&FkVJnr;X +0`1H=}2mTFH{vSWn z#rr&oK5(ym*v=yQ_(!^871OE@X-}Z<_MkhOB<;Ls *!V=n5_(TWL zA9--xc|JvEBIRYLf6SNh7h=4#@BI^xPZU>8G<>F81SP8UAr 0atlVnC7iu!LRLsmK)dJ=)n6{N1rzlnVFC~f0}V9>;|n29v6#F8%B@v8CLhu0~6 z1(f9;m-sxMeZVvV6W#D|QmDm;2TT$1)Yhb7)qRiH^N&@gAbAzWMGqxT SWI$215`caheNM+J9ALh$s zZ1f6*mgkZOC&jP9geT1P_TRJUyDz~))+8hKN4EwZnQ%3Hnm;np{`;i(sApl&=-Tr> z!IjSnINJiAZuaI(o}AfMMM`Q}zb(S(&a}g5BDk%??fEVNzp1G01+?c8=TjB%&*QFb zSIpf`Wj~KTKe7Gbc4XcJDDIUop1P7eoajHL7`6St{&7{uEnN2P+r~$xlJkSqw@uZ| zAhd4>W#|m5o*plI|0rB+%evJQS>nmrU#F@@kamH=`QqKG&z=NcgTA+5x0V+rt {_yBU80x< z)C{t$XYZml`&w3e`#YBBz~UVFbrKvN|KW(c1Nn=k^dFCQF3yqn%a^-m_&;E}CBtQ; zo=CVX&5^~WEoTznfedc2*!ZXb4s~wV;vD&4mP^cw_oK{*R`M0vOLOG$RL`o>_oO6^ zKDsj=X%8p}r7q2pqj4(uS8sz7hXwZB^h3cf &8yB^?@hZBA)s) zHaR3}1R+X+a1uUTC7|I16(usxq*5BB2X)PW-BKb*rBAxv5~cS8hxtqDr6S%6g5d-a zJ+2~eDiwq)m{e)4(v$e(jqwQV)3#K3les!pSjAN6iuKdRYZNT3OC+W?dQTxlgA$Eq z_Q0;eOsZZ=QYJO~VBS?o1MnR?D3TNt>79QzuBf*hWV&93roZdMl#F-JwP?nijc_sc z#={?=kSkAi5vN-A%)KKBy#I1|n4L`5#52ns-p9O}o4U;4TaikozN1dvke#0G?g=9X z87r>~_o5;cz}ME+C7LTD^aL9el%fr{&&k~kr>!WlzCu^*L%3R>rL1}<9y**@2$Mat z!#fD+eBsXCO&05R;w%M?&(F1=Yj5wcv*->X7^qh6c(u0!VH{I%lTXxNgwp%)BgpOA zHyf(9+sZiAa~>v~OqZX4dsE&y$iK6-eisrINhx{fN@Pxane#D@^5c1bcB64m0BYm& zD4UrmuacN2ALqo0w=Jd+_uJZS$&t7cddmxB%+bB2goX1Vbb-(0)x&cN4=(YfcX>P{ zt2Dwy=e<1mQmeP4uzacUn|gIWOdlzs*T%;kE15Q1f%D(Kx8TfM=b1fwSB%%ZK?su* z*V6Vy8_sti_9Yp2xCPB$+BcuP=F{Vk5mEt3Uh}slrV`im-9I9~P-eXlyDqN$fU!?b zFS`nfGr);a$CdA0qRR9VO+HZsaasbY3@)%%xtBfvxu=KRvmPZp%JlMq8 %8XWTqDnf)x$I7Hu9UGuEceyvw#gplhm~joNb0Z8xl;2kM zu{$+aN<`zd3~~ CxH134P&8g{;Tt1^_Y zxBW(4@SN(kW5m*`&AF+$Y(=?%cORK$s9MQfpD5eH7qlW7o jo98zpuB;;-$n`k0`-|C!*LTkjD;tLE_Vp=9r*Sa_ z<_qs${&wZ}$<6@#4{x8}JhO*u_4V_@A9K^wTx$@9Ga=AXQZWPuR-=`W$Zs}JU Az2~SL@`CBFh(&|y{1($P5a!uV!G~tiPB-iyD>^fOkcJt zWmqoEE3s^FrplQPQnAWeP8w~>*=}YZm2=iQo2uk``NgW_`R-^_Il3{9`%xu-bE>Io zL11C5YGH6qn`+Unb01ZYg$ 4IH!K{c-(?|RcWf3M)irpIE|X>nsXYpr_L>C)YT7|X`X7n z8>e}??d3VmGo1?ynw)N&xmJCz)IP0-evNjm#;azZw3@Cvn`<}U_S>i3GPa{#`|N|b zPui`IQq6VRo)+%YIrpNbU8nu`bDwlNW(UkycD}#6Z{_)qFWXmM__FY6WfzRsg4B(Y zjwfBjYIcx%_{~3)E(y6<==O@OkJr5{8PcJ9MRwn3-9Cjh3%!1oqIkUl^;&L+-k^5- zXT2faK@0t>hWFz2ubIB;&>yz^^jUwzhS$>Ix`T9r!3`(PPJ^3n=3fkMt#z?9yzR9< z!SIf6NT=a%8~1%N9NnB|X*3pClwfo>xVF>i-mdm9M)$)8EsY;U-AgbYkA2l?{4n9u z7vl*!ua(K8B ;ye{?%kM)5Xg4Y3};{rq2pO&YM0zzVEB)RB4)(*^3iJ z`^{cf*Pb_fb*lZV+3Wg2EA!u*@9j5#)As7T`E=)}ujbGbg0;nLuk- f_U*16B(!YA;xQ`n{cN^?7#C+WO1; zd)x!oUq8OOV9ovViE9lYh+QyY4v4lOz(uOMP WZ!ZQS$$T(ClW6y z2-hb&S||! {WNKPxbCl6mP8R)ef&u^Z%?U(L=nfn^m8_%|c1) zX4PfGhWf+1 >!5|QqDXb0gI+`C zk$7cgCG~zM_lB&z4rNvS>VCKIhV0_c%0xT$fwfr;Ih7VF8XnaHUJVVor{h($xB=>e zzBd~3S~^s8BB}>BzHK;q{<8`xQGIB$aAW>u3st@B>Y+fr#)50{ss`oiSA*Rf3-5HO z8Z}m5-4)(gH2zuDq(}W)SXSe)XBKK^H> fwa9 zjU`_{tC0~JBXr>=HrkSCD^fF(q}Nm`kU+Fo(zu@D-c%;uNp#e&xqdjjsa)<0kz%KD zBQvY1Le)~;*`wx0ZbQ=vodk8)0F9dkH<~JqI@MQ4)Z9G&w&|qR7j e5&Czb*7S2IStt}$8qrG}9^+yu4 zwkm0k^}Dw; `~L$aB%ouz4jwW=f8!pY7m!%ooE(Pjw2%cjcWB9 zRk!>51a0!YvPtsFX6c;)8~Os|Lbq+|-=-M0oi-4x8nq)JX4kf%UD|Pbg0Ai%T@BMu z2;V`E-aQ=suk}q97;zI^b(kLWmjLIG`}Y9H``-hcO=H=M7XtpH0H>`i=f7@n`fKz4 z!wjeB?-|a^ EK673rSE@gmn2A~W&7^TxvC@JYPi8dQB zeLZ!GPj%rU*zSuCa!_kiDR>fhX@Jkj(H#M`Hp*#2JdbNM&zu(*#e(jk3McrLB-6BP z!|#4?ZItlqS%eL2sI_U(dJMHTae9YTcCkxS6(X9lcveJH%?4%OSZQH2LPLdiX`k}! zNLGnhY;6vD?(BnFo1!bHnycW4#QaT`TAQI>nZ?#d>d_tH6kh#4#X%Vci*Z?^Y_YXz zTx@O1hL&3!s;cJM>%ppRQo7;V6+`uPTJUbYLkcOOORdfJLke}I93GitORbHh0-FGz zC9p-CyP)^l)UDH5wxH83_g9#vrlr>A{`c0#@2A#gul90lbA*PFD&S+{pw`9;KHk8G zr71QK=`x-+&yy}HHZQg|I(>Qvr >$|79ne&;txJumgK97B7iVc z OGBw~=P##s^S{q}y`p~!5 zCX2vU_@%X}OVSd4^rN-e_ET%KE)8mJ_+8#Yt YFYjYY0_uV{w#L&=WxwXMitMq}Zf3`ODWZNTsxxANuYHbYRD@Jdi zilA{ZaNBh5(dq;x2}!NR*5*!`pc3)e_$Wnn+s4qnZ3`O=qWWD-@2rkKQ}$Fl?1gdB z*l9*{&&4qcjP3BfwP{;!ZEBZW8>v!iz6`zn{1}%4G=Fbxy8V#h$fh0!xB)-F=yNCB zePW|6*OKhpv>C~x_#6{&%IcckoqtHH(va(6a_kFDTq;mpeQNH{)+Qf&vh<<=VC!J7 zW_Bp`Ln?~aC~fllHUuZwK=^xWa}8>3+#PT+0B?Y7kobWzH4%fmP-}Bq{99`yc1tl< z9be_wlbEVdPuqG|1h4En+aaWtkpgV#HgbYaKtruf6G2|;pfc}LYjf&bYttxR{7Y-2 z%xfnxz#Co&)Be`lXt8BXuAm5KuYGTA)=6_m7|r^lC!T68w>CbDt&IUfb4YQWI{VoB ztnGK2&CZ(F (xd@aMh*O##1%Ann9yCiXZ&5wP{{#ZL$toSCetet<70eN-)~~{;m+QSI%Ob zu&ApEr_;~qqm_mTJl0){t<43$QK+?PfLa?k?^0{?B2nz8*2e#PYm=(K#KGfPQz#c>j`@VF-R#}V@ig-4v_zCo31_ygYvj|BV_O@a^ORY_| z#SFOJ32JTpzqdAc5ueRaYcs`@hEJ-VyF0R`ec`q<))1u4K&=f0mG)EgECB3`RCRq zD3c+HVPxFp-bofz^v64ETzZUH>mV0umT2*7Yx9y%QJ2?dv9 ^j5wW)C6DssNH zHrdOq&2RtO+GHU^q1Gl45&FHgDP|$E%FQ`YYm>9s+W510ib(JmBILL4Z2E7;$}6jF zSZ-~merjz_!ryH-Q{rHoe{OAz;T*P;BgpU%wKF0xH?)A1R+%OMp#^?xZH&6$5tFEd z3HT5kp~|DuwA|WE!i$$$o6M!wrWsF+{odLrbvdtw^J=gVUNK3rKeaZFcr1x#+O$2| zbYhQFYw{H+rsW188p|xV>LHr+dBwLObGAfRHfm=6y|roh*4mu<-r6vhTN`)Y<<=%* zxwU~KntGBi=gYu(*0z@?Blm6<$i=75C&I6%BTAETy1f5UYg7DBt _WZ>z-{P4<-6x?cXDi?@%XppI`(I| z#vY9^&E6bpb)1fV;4b7Hyf=u0(EvhCyO5bIM2CJ--d0Rz=%Eyr4F``k0&+465Sazo zrWu6e1jd?U7*)WEU}aVlu$Agqk`u0ib#!k(_GDWjsqHAHR}#zAyrid-K+DSGV4fn( z(t<5BIqrO3ysp%AYg$2%@3A~K{H!91Em=4-pOyI@aSNO6LCCC=%#IDs-atOC#W}7k zi5BEWOFlQmR}xSkpJBaesNl*?m$qP3)i5H7=+^Rlbl}P(MEtcBpS&^cYaauW-ya)! zapXoyj$U=)m}K_*tQ 1a4e4HpD 5p z-J9g8V8KIK7 JsO7J&)c~?zN!Gdf)oz|pIRRD+;IdOD za5W?Q_R?|r5@oxnD4!%8%$yTS;AqfrJT5CQMB-V|=9Oezk`l%nL}BNJo4VFLS~y~8 zR(n9Iid1kq?HopHg69Nv<^E7}(hK-m4O}r;c%loQL_4E5rg?x{uwu+vD1{w~*X6l! zuAXczEW7@6b0lsOnH|cm1s}r$foyv(lsAwa2tD!>uv9q0nsh?I&+K#RiUx8Pzs=D~ zsiv(i!l(seF*_&K?~GnSi@q;zcM-0lt3~G()*2|@aBoE&M*!S;yI|GN_R%Ye_3) z^Q*V&7vb*SY~Fvb^}=SP?_gnANULrECJ-<2&Q1*d0)OmfD|Q_ko`u1yo7GORlxUek zZMd(kI9V(qnuCMuA!-4L{%@1XJY19}YWhk@$ycZWaFN)Y^*#%KVLe{sMVr(7;xPw> zpN=_{YO*vdJFGRo9dqyjPCIdDo8=y57fT88j|vfY;GetTThcm?)Zz{mV1Ey(k$y^@ z@)6y4PiU 1hwr>G^7N Sn~oh#p|<5MM1?rDlk zkr+C)q2w&j(C4v%m%XR}+ECv8v+gr4wg+*?n0UM$t}hFoH&O&8V8wSkI}^=M53PJ( z1Rc-7eNrmvsug)WC?vY0G!raEZbrFM2a%;Xtx(MzM%jo4uj-DWGb8Fv;J^T%t%_OE zSH6*9K3_`_^J4PV+paCv1XK;jLVrX(DhvPM^VMd(xVAo|6G6eM@!FKu6`5_O`ZJCy z$3#Bf6Y}Mz>Xn+|W4nft-ALEg{14%kXB)SM6=Eu9ln?lBnu6a7*1%g_h1-2V?9ssU zXTezpw^q2d>=#Lw-N@UGxRI5rwe2>+l(aon%tWUP_3RkWp(K4BlHaQijZ<0cb8^Ml z1A}I=ftT9x4WSo4Z^2Uz;twR;E*{+D&BCtI5|TRmo4D=;ozg3cHm90tr(~jkV{9BV ze6(1ig@z5v&vLx+^&+p7-)tGHcpx>mLD*{j-I^~_`WuC-&fVq6-fP&HbHwsq%i;9d z_ BGL6bc@Ue7g5+Hml*qxpHZLesw~XG(p%YlhXF!{;4(atjq>|L^W%C zp=td5jd9r9@%QT=o=VG ^bI)&-#z|xHY+DB``s?l<^&O8t4GGZkLa0? zr2MmG1Rjk)dL*xttzad3?C>MB-(!Q=$NOy_Ysu9ibRJK@RCKMfb>u`lPdzq1@ reFh3$9%~YXWO?9M3V aphd6T7b>>bpg@_&<(1y(0GOqkVGEuU~&I z^7Xkz{gW80=aJm6Ph^iw8LyrK-^eglw;eexGJN%kyVZ**p%+=Fr!scSrcCgpgw`5c zojWv}b&NJy;V)5n XJ1K; zzq;_| aA0N$V;&IoX4ASohZ22pk`CxwKH;2`i9W@R4E2(OuqiJg^vIQz-p5@szHfFW$A z&ie0vB5R76-<>VXm289VGaFraT5bC~c6i+Q;hdHAvs>lAn^cDwaOZLcvC)L0Tj6i1 z3Z7bf-ichp-kf_^DCPf5;Qe}?_da`CkFnpa+mk)h`F@M_2g9-Vr{2FO2oP-7e27(l z-+lF+8+7R6>IaeHchyuhrX-u+DJAmZ 0E7Dc3|Q3!^!gY zSGCrNQ``lkF-?77CSP8(MP#leBYXF>rg_Nw3-a$Bsh 6S+VJ~<;m^Zo za;n2WwyzY$MOEL-$nNKEufEmz@t*wGT_qaho8CP>@HM7w;c3QKy^^%w_K0e`e|o;> z&E4UzF4gZ}uYCD-5BIZm_JSb38Y!UcGcsYr#ER)`^ 6u|v9~;qJ-N z>rYm(6daBy``(yz%2D?^y>;xy)4?N3js}0y|E3(z(&C?58}VH1&A-t9)&m>v-hQ?2 zOvP7lk^c8>3cfA8v*z~i>s!N~UOTb=x7|YpA@AQjsGdSAA3T }I!+>~wxAcL6p zVFBdKYnpl3%Xl(QO@J4tI9UOMy*T`kFH!AxykagNfMd5l+wa@7W10T9(tP#i#r3k9 z33i0tYHN&9pBss_=lE^G{dd&^Os_pVqK5(=iQW*bMi{5SfUCD6ICaxQ*`c;L&888H zcXGEvtHsddOKkIFgv1ulsnExKY;@Tf_NOxGpzMisyVt3j7#jyR0(FroVD^su+EVrf z9+PX#4q_6x=)1F*2|_q(rsh`Hry?Xsie)=ijle}1H+&wa_8_G=UCeOTz$}u70+K^M zQt<@$^`O>U%BQaUu5)xU3B1Jr$w1>GFG4JmYRem?VaK%=;os3kz$peI0A(n3@SxHo z>44s-eeVK#MXEN06@BpohbUdC)VB&))NjM~$LSq{MfH0ERz1p4*!{gcA zufDoC2mvi3&`ZW+Oz1oZU@~EBD~dNn(^;%&5H9r@0I^bRgIsAcz=r$ulasyHZO(mv zkOy5uOY+npl)?ct*wwlzQP!JnE+9dJ0b~L(2PWqc`KTB$e78ASDQ|wWy<|(Psu@7> zV6Q;W%#OOlC`w|cChT==vEO^vupNPzN3MWWCjyj?yfi5wBLxCHGCA7s@6hGu$pi|f z?hiVZ+D2p0vxXw*(#C6V_j5fEbmd3ouvaj^%+HFR N&OdJU_la#AGgimF@Fdx=5l@C(QHlIIM)y?@sd>kTU6xim^|(jLI4DGw#~EZY zNTD<~zxYH>Z>}+dedwaUTVN7gK=|`^MiWX4J$<o3p3L$SC(y6-6Z(p|LU z;k}=s*5)WzrEl!$hV|;GvNl2~>hUEcEPi#MjvpSwhhba+X%T2&Ss_pridI%K>?uid z(9aWbuuBvkc9%;w8v#7E2>Z}j7MXdlPLpraYh+6n>b6&kI3M(hA?tcR=J8SK$&u~% z(vFge)U(-#`xz1jZ1kF$F8+yNf@Tc+%j@UoKR!4iW}3W3?3BdO1=H)He+UWNs1oRm z$O! gUSR~{9SulVKmn{!mH>R`K_K7W);YP3 z@NRZ%Hd|7 }12F=jJnmrkQN19t(mWIDZLYHT zL3@G*2Xt%m;5|%Qr(_!j@ZuT#{6XTfab2p7SR@?usItB6yZX9=Bdx?WiT?q1O>E_3 ze%*FB9LE`mIud>~D^XGB0Rv^%>RGApmZGz+hPbQx)!}S78NR#85WusMxgsk7y^ljd z1^Re_WN~E92_B4n2w>K0zh|`}-eY4F;bCF1`gs(9Or{aK((a&9wnIAZ`~ZBEY+?*k z2PC@m_Hx8qfe4=3Vi)INmcm<6_uE0SI-;HGU1A;E=>#}=qyJ%V9}hZ?8^Pa&HPuT( zvZ6im&Sh0b)YCPTZE+s1lVZ^`m$td>yPGm9+PGh_8(>Vh=Iz=+sHEC|-3`Z%2_r?~ zh5M8@L}pX_bQKhX#O;hW-}BsQ+gc6UtKhca>`i_nq=LI_<6ZES`PB;D+7y+hPiQ_- zT3hW#AD6Y#xxTG8L^Ej@6;&@HeLu7Fo}XB$ LQ*`{z2xPZf3nTB$H6Px`sgxsdIaY`ah7BXG8EEMo zLa`3qyQgyUOVH|T3rUwQdtLa-MXo6q1Aw}TbvFucy>v)@!>HRw@LYYqNtD3xWI-8U zi71>x$A(;w0}e3l;c+-EUh?3aAhGMpIRTE-MynDLLJN>A3png#k0EG@ Q&$Sm&G(L(t==aFb0WX0HYRPm$U6D>6Zxo}MHYT#H>fMFu zbTIU8I*bGe5yajOo+Psr{5?Q`0%Eje7*rswr!&2_GY#xa$w!$4ok_tXH97D y(?lEA1a{F9RdK7D6lBO`l5J@TJX|+I_wEEn082ZFK z?385nu0ux@_gh4@Cjl#ygHfk3C>*+LD@TTc)SO}XO~A!XuBgkvq^A%{K@AiZ+=PYk z4P6zpvq6^wvzdTvj@W`jCpuakOCe}h0zkFWsV2l^>3q@qz?YumMxx2ao@cow0fvcF z`1P@Lw@j;qRDNYb{w9%p-9lqiy-S`kfc*x0hpl! YlUcW5&!O2ewFOs|Us}pxzl@&MTE{CeaHIWdvGu z`0TTy&}tASo&CBRj7yG(?{QWo!*{25zOzNxkl+R}NkZf#zkEdGBty9h TP9zRqeLVzqp(T7tZk)X9 zuTAMxD~uFx$~`z8gA98C`>l?EFag(etw<88&bfbe@~)I9{@S?31)oV}2bMxYoRwte zsV9>b)lvoKM6g~#YSXQ&FDIp5zqZ?N-ioKyaDQi6`I}n|l9O~ahCSf_4}15))YRVa zdw-=t5|Ca3DuiAGp@^WA(2I!lstAY(iU<}2L@ry%SZI~<(J z+^wYJS9?#TA=z- }6-K_r@Z>eAQ%1pTaQ19ZlYh~mQd&-6hDi3MulQU?(V9-W#28?e#NJI>du zwm?FN$Pkz%7lu`q=-U89O((JfQ82trxC@Zai_|fzxxa%l;!9lBuOaqPG^;lqJ?dQP z=vJb$9XxV7z$7ILnAMY bQTJH;N@bC0D7u7;sFb@lTFLLR)X7XrV|sz}^j zQCc*Wo% iT)MzLk@!)2UMEZHBd8eV|T6VLHzR5$|mu zykD=47<9ARc0ntl=F_relzA~y7C1jdM&p5iC}8=j6@anZhVKGX3?3EyDrN}Vq% {*(G1~C2kNpW($1Gm z!1B-BjN;nJW9(63LdSJ<)sdFT_{aHZAEYILOuK Yvt>7=wt0?ER`Ukznm6q8s wO_vix-lK*m_%}=i5K`nov1#?%h;NRU;1024FV2?NV7SJMCl6fxq6UXTMwj9 zla rBZ)ccY 36xz?@F`Z)gHf$5x>k?zpNEM zb4GNQ$iWFuF8q0oIn;RpCnr9ES_`ES (l?W{`|7w^#8lN0*3^x-*v6L *b9gA`@H24wzxx)+ODR!1-PAUTBoj{2N`fkyO}P+Y5@S$X#=)f`Q#)US>m>+V zWPr4$rNbOlfeVp}p(t7V&j%NVaztMpoZ^ *xGB_fgsMb(lyxms zE}gOoxV zCEqQV2}eE(@Hy1K?n^qd*c1EZ?2$ODpsUV7GHOtL2275NBI!(Kb(k_HP`Kx6%>twH z_LEx6D5Ab|qMQpxR5JH8Og}veDFMF8`#7?Wex9G>2IeVT^9GkFGERwFNhrZ`)Q6SB zUEda%+{i_)izwB)BeslaZ7fBS5PkdG5!>ncSj^kco$cZmk=hrbhIq1&v$Z~bHhG$4 zM>}eimE}a37R5{}UX0}y<#P#XpJN!gq0N%e=M;EWih%PR}zx zuwU;YRp(@&!&bP1HRQTIrG15}<3TohaAMizI5qG%dC*6K`a$0lak}g{SztP5`uI-0 z;Jr@B{qHL!>u0SmQZ`W?6l8sNr9=2Vq9mO@iZLPl)Aw{a{q=nhZyY42^uo9Ho(Mj2 z6?}#FRwTyM%{?p1#)^7YAeg)K( r%#0@6R~>KGe=HJ$%atgFB2M;?Ylw@#*Z!%f n8Dz%ZW9Rh9%4b7!1o_lVkMKrfyb6*+m&y-(dXX x- z6Ed0862_*oXnA}84%6w #vbY>X7CK{>(c>Q-22Pp zT$m1hlo6be=s6W;A>4iCSIZ`Af=Kx$A6Mjo?BJW6e*SR?RE>c%{_`Q~I z9ZILVN57@)JJrJsPw65ZhM(?xRjZ_Yx_=a@-Fl*=>qUR$X*Rj=!L09b^<>Rfw6Tvj zb7=JYTuAsx)@dg~NOAAvsB**$y_JWW(6f S6e5=+QBTh?@3A6^AE1{CsGkZVS4>f( ztW;MhE03b@9JZZ|7F6}0o)hb!^2peh_|A*pN)X<9^sSlA1)g)9dxJiY``Jj^ndj1Z zez!K;PA fzTP3XNT>v_ h(v3L5A0D zi{sZ~6^E)1J~^8)PD0%_($G{IGCODzr;UEY)6s7HN^yrjE3cA2b9t`aDPivIL%A(E zjvb)28L3Aq-7XR~m3`i2e8iv!F7YCbzfkpcf05IpTs{Oc^UM|XeaGX4#73hcToz~d zd{))hw_NZ@?C3;ab vnX(|rA*XI@_Ly|DvxhL 3a7$Y33BC^X#POuq zI*F9;cHR-Qacca|;pSM-+BA OK0jgH3Ddz{&P z442c+8QN{VgF}%v-pN@L0yRyAN;P<=?i<8*1+nk<>OksYn8{|i-3$+kpkqJDm?Jhx z?jBO(gQwBP8p$? 7qEF6xUr+N~v%6x8J)`24s^PcoT*_&N1j Tri5AtXAt*CCO~M{4~iI8kB5=%hz1E zi=_9fo)Pr-X&>L~*o{RxdXi$w8sDP%$_Tzl3p5+_WgEF^j^h+)ZHgV<8&qPlNgGTO zZ0;o)i_AzQ9ou 4tUrn_S{+V30kt?76vEu1%w=9m SE@`peJqIR8Qa>-m_h6 zq4yXEark@bsI6L?{y3P>mlF4TVL3sy&kKo#1f_|lGQoYk_O(YL$IRxC@2BRUJWD(h z_TpqsuR+F!7}`X8a+L_~c+Hc5*|*4iXVvz)%&|}|_MHA4`~DhQ@m+BVkL=nyD|8xM zcw%Hb^lc?u+Lzbg(H8OO++Oj{P1Uc)t6zZD=K7AHPp6;t)O<+r?lnBn-hm`pDsOol z^`!j>j%<2#N!)Mmp6wsrEebTTdE8xycJo0qRY`0yyGujs= 0*IOBlxyKhcMm(yCsqQYzFao4sx8kB@)++>D*Gu9d^m1jr}NB<=EJ+NSGo`P$Pui zJkDt;QB5NVFSkY%CQ+2g<6jm$Iy6)lJWi@WIm3H}9JZ`k8!Iykmnx4@;{LZeGE#yT zmMJMF`Mur(JN}=w`DtyK{|Bs%4(^~`@zCSS+M2S{IRAYL&z| swiL z@g&}oF@#!u8%G45ETK4#va4?wXvW8=m5gsVR)14u1y40poZx1r)^|wjs>IoqOz>CL zcPd4wB =-wJR6~&D}kFaw`=UX(5#-XRywou zSmUG26?M8H?zK&7V}HKxmLj{-*A7*UkIN#ql {#iWJ&TP`npd_k zqH%9Md7B1r>1tG_mcHGu*7UR|LZkW`?wy}q)6hV(Mr~E;yTiwtn9oL5H0p2SW`k0j zhNpD5Ha;qyJyF&4d^Te1^%uDJp^utImYPAbT>Ad>V$ J0xg=i)XL@)k6nKu!qn_CR9Z+*y*??er*+q^Y~g&>^_NPK zTHX7U7B4-zKBdv3)pM+DF=O%iD_y2mZ?w{fY~CBwCVJcYQp-N%soj{dirm(JP3dEy z-Hq3dE!zgF%08AJyYa@Ixoz;K(o#k0jki8}+lL;NE!9-rcoz`4efWjar-ny2W`kR{ zk1Upby0LiUeFSs+7)*J&jkkF&Mo)W!w|u!%t$F@zr1qqQ^5;8t%?lT9w`fnPm4Ci} zta&k$sXc9|{N-V4^M`yro!55dUmjOAe=LjCdAm>f>(fWgOSLUJv&YK6K3{D9)XW5_ zzVf$m-j?NCdb$g#<= vuxF5gsMnNMx` zHl?Tc zi%b38wz)k$>zbK#W-w{hw#}v5|4ZIBe|0r3HJo{DEbCY~?fi3Ea7FgTvFsC|ZCl9s zk(gS@3;cUx3bbvD#iyFfawf{+TFbBfk1JE_yzNta=4xoFBWFD{^|7n?x6o8~*^kgv zPsP6pO)U)G23u2Kp59yyP5o844Sk&&{4_oCZRR=Hnp*z GkFtp;HF-ZiTLd{=E7G1e?@)wb |%1Z|tunr$=s!?vk|w(a;I zwr%7W+t!QSlMC9mYIUAlm31UrR_TD;w!2~{T60VVPg=X~*gUJNO_dKi&ixL@updTB zpIEhRXY9jQZCml}(mDpu8GcW~nr$04-VE9{YvJ(`RnWHe8tm8{ou0xXbZynP)vVgK zYyIoCtyfy1>EX<(ZCk+Q_g5(5pm%I{VA^0Om# z@E6;560~g!8+JgA%SulEYTMkjE7ok=P4H$ukp$W{eZ@7~Mq9IO!@t_LnqO_( l!-BSrzHZyl z@v5`4f7rI+AGYn 7XuWFNGz3mggSO4 !)o);{Iye3V+zP zjCI>aHQo%`HV4{2+O|jQw#|~n@3P*J()nTAy#BOpyVq@7BIbA7#udM6+Y z{?)cwWBy{>I-tC(woT=qZ5su&ZPaz!R{Fbb>;2QVA*KJdZSx0h8~a~un b6`TgCt73d?P z85 O|05BFUG2W0d3n! z#!uU(^1E%T{EKZ1Wi4N`ZDIdx+vpx!J=bkp8`^Wtww=HtT<{73plt)t`83v4(6&XR z_w@d-ZPkIl*)}iGwk7|tZGOE!Y+LHOZ99%k4LlQ ? zw(TfVdMlDQ^}lS}KL4<7iL@WKtrEXx+wQE|wvxZuw$xv2TVY@Z5lAhtMx?FVHZGK9 z@2YK!p|KVaP)&xYYYcP@Xxn=Kt!?W?RsYSl#reYwgs~0CqaW~|H`)I{%PB)J$~4>;-9uHj)C@Hvu!@V+P1mhZQH<4+vc@u+iHma zCEMmTCRMOz+v4WXC7^A~UbSrjpl!=rwQWJ5Z6p3^+vpx>iW<@}Y1OvX{>8QpAr v$ Vdwgs)(HlLri%?G^l6MnO8)xX;|+8?$p z6dlln&IfH98+zTgmHo7B*M7BaO@Fg(g-D-YZQB7BXwIr_D_ys3PthxbtG4ZA@2YJp z{hMv8{%_hgmw&Wv_t0k={)KI;q#-q0(aXVXo|k^HZIAwD+oFEAZCottw$1OSZA |m{l&H=uiCafTnc`_+qSTOZ`&Rty#KIm`D?aq->Pj(|BG!aW_29< z&9 eZRy@Oa*&Q &IINO4|?Jstven&!n<8*`pn3S z^JfK9t!60hhwn&-C*`@9wQlX{esxJ{GE0{a^lx^}GbbO;q_MqejzL#oo_1AEGV+m; zG-O@ai)*Ja$}=cak+&3;x1CmRZur0~JzzB+T7H47&2JCka*7X}Ej^dRcgUSL4lk$X z@lF(cu!#6BferIK;N)1@_=MH$tRtJZ(cz;5uDO2orS}H4xTm*1JTO`|K6CheaQ6Fv zfco!NFLK53Wok0Wthr<2$sL&)h_X2@(Rm)dc|N`Q#o0Ojta)M3ww2EbKDf*|Ixns# z>ym_cIV;kjz`dd*a(DZJ5=i5cW_K{P5X8Va<;X?NtVPhqotT5Q^rXe%5n#e%+ujc* zk&D{z7ej dUY?7Hj>*X?`C3_cbfR}s+3dCe_)t~oi;BdME(8umsm`M!Ty zSovPf=sSmbf$O#K7QM|T*Tnz#}K{oOuSA^dExlu zxijxy#xj><-k`$YFKeJiQ?fo^-kX{>>Ux250x ZT59*-$Wqs00ygGB~ z46SpwqL^_w(uqCIz8hS_W)WrKiZ 7e){c77Pyh^ww_)5k9 zv~87n1xachY1h@fVq|tHotT|`T2&xN(4}zjqmOl@T`kt$S#c?C+Kz6MXO(!6Pwr0M z&cc9 8@0BN~xPI$BbuXQf#K1#_QqBMxO@G z?PS+~>4CY`)y~H-VOUHQ^mtTX+Hz!SIP_Qsw_3y5h}ScwU7~ST=a$FQKD;S1@pxdx zoGHxTsZwY7XzKa1Pu9;=j-46){!G(6KV3)pz{qgul#>Oqq$vH?-S$mEu#L^B-s9&C z{TdbD8u&CBcEkxOvqxW|6!X=kr#D{v_WAU;&mVVmt4{O;0q@iGlP|Nt=Lqn`dvSyT zp5t@+eF7yjtjN$}x%ls@{ed^T4~`qMNvRgnxi|Wn8%j2?U-1UjD`uR_+BtVW3uDSa zxq{;C2`P6Sa+|)fJXL(oP&{6}@|uuIU}-zj{L49WU}tnnQF7Yl1q;PJMMv)_=8^nj zB*2bTx2z*~vbgI}OdDDOU!{-O7*O$2T{^*fQb57PEIW?xp Bo_n68_RA|w8oOMeTic=8}Y&B`v$im zJ^6*egjihkA(NSrsAEgj7ix|#eSRguR@>m?ARp-Ao{_6q2#MXvGwGGH+e$8tS>TOz zkxex>L=Y2QQohubZ;yo#L(bF+9iTm$N=n_*4|b$pku{n|_*u;0QrcH#uZ=sbTEra} z0~&J+9Fz)q6ZKXE*c8z=l-zRjKF}gAEerVFnZcU#YtlkGB#U=k{x;w3a5s!wk#DaQ zAD$-Lk!wmHG~i9`cZRYZF&}Dtb6$LJUdphO+@!0%ZUKy~XzTlL#|qlg$6lro@Wl5G zGsYVO-d?$KGv#g5rwGM{;)}s=uvV%+D5AZ+ek4c{r;X-P(OYBLE(wa9 3YU=3pt*rs fGl5e#~I^)z=G-A{wit9<5_Zv*MhAlc) zN$xS{A&^o%S|L(TTcOjhs`Ufd0G+W55T^ vUq6OG+rKjBX`nUoc zPkwz(!uDMTFs+nH&m#Xxc{2zRqX_}Z9~}^NtRO-=h@p*(lH(j9t!K;HPu`P^<l}yl%m9FrDLWWZVKX2NI zypDz*i}J{n6_Vw~oAcP^s+Sr$cdoL<@)&?$Qf0q6s1_X*vH7xhgw54I>no;p5M?AY z+@eF))uQ$Atfg%!bEDBfikh*wxomH@-fT~4;K!ofy8;I`5XvPLG~d{raInumiWGPw z*2hmzbsb#kF3i8t|498n3d(Fua x=H`|;?N$WjD^i*x@W?0M_eo*=hMz4x2+W@z<*}%=xJYbmkZOy9nnCru zEBV-;+%GeC?0x2-Xj{GIo%rEhJ8lgMqXhKQqxcWDiMh&(wegA!`fmU~#@{L=#cM7| zN}^eSt}z}155NubnPiF;%<(?eaeG@bal`H$o*jYh@* Hvx0n*>c*~oh9YXTH5 j5zptfc<&gi5}($x>!n_sdCnBNzTI%Mdkw+ zn9RcIKo^^#5vNtbNb@r2DVL->lkHE7qhhZZ@%BrYOR>M=wZ)&5631rm*ycI!aNJZT%H%Y}4mo2mdc+8#Cq{Q^@NFC>31qI_vwsZD5+#^DyVJLs92Pt^cFkV!9 zP|Gyw%fnJ#X$o(KIbCzYtim|k9Y^9&rcPz+0Kf)5yEiGSUmkB!gNb-d2t)^N;|xfq zL~bqM+Z%XlG+Lmv=1>ur&|dSra0(1Y_J|hDhuwzlJs$q`yVmgoUHdk@-K2{*Sh(`U zdO$R*aQA8V57%TYo@pHsu$R -M?0n_=W)K;i -1xM;X)T)JR>AzFZ0DRlBogvJ<3LCc(TaBjS+pI5gnHlb+ z!xhcoKznY57JyYpIn+mixvH8g?b({`LuwQuGe|2wUeV*ieFh~n%E00SQcm3{6^Y<- z1`xhPemq4~Rd^e%?$ARxPYA%81WXsVD