From db17ef024eb535e8bb3271877bd759ecebe9334b Mon Sep 17 00:00:00 2001 From: prathap reddy <7283547+prathapreddy123@users.noreply.github.com> Date: Wed, 21 Aug 2024 12:54:11 -0500 Subject: [PATCH] Application framework for redis performance benchmarks (#1335) * Application framework for redis performance benchmarks * Fixed formatting to address shellchecks --------- Co-authored-by: Andrew Gold <41129777+agold-rh@users.noreply.github.com> --- .../redis-benchmarks/.gitignore | 40 +++ .../redis-benchmarks/Dockerfile | 10 + .../redis-benchmarks/LICENSE_HEADER | 15 ++ .../redis-benchmarks/README.md | 124 +++++++++ .../redis-benchmarks/cloudbuild.yml | 13 + .../redis-benchmarks/img/Output.png | Bin 0 -> 322269 bytes .../redis-benchmarks/redis-benchmarks/pom.xml | 224 +++++++++++++++++ .../redis-benchmarks/scripts/build-image.sh | 11 + .../redis-benchmarks/scripts/build-jar.sh | 12 + .../benchmarks/redis/PayloadGenerator.java | 88 +++++++ .../pso/benchmarks/redis/RedisBenchmark.java | 118 +++++++++ .../benchmarks/redis/WorkloadExecutor.java | 236 ++++++++++++++++++ .../redis/compression/Compression.java | 43 ++++ .../redis/compression/LZ4Compression.java | 97 +++++++ .../redis/compression/package-info.java | 1 + .../redis/config/CommandLineArgs.java | 122 +++++++++ .../benchmarks/redis/config/RedisConfig.java | 30 +++ .../redis/config/WorkloadConfig.java | 33 +++ .../benchmarks/redis/config/package-info.java | 1 + .../pso/benchmarks/redis/model/Payload.java | 34 +++ .../pso/benchmarks/redis/model/Profile.java | 52 ++++ .../benchmarks/redis/model/package-info.java | 1 + .../benchmarks/redis/serde/EncDecoder.java | 49 ++++ .../benchmarks/redis/serde/MessagePack.java | 61 +++++ .../benchmarks/redis/serde/package-info.java | 1 + .../redis/tasks/ListOperationsTask.java | 127 ++++++++++ .../pso/benchmarks/redis/tasks/RedisTask.java | 57 +++++ .../benchmarks/redis/tasks/SetGetTask.java | 122 +++++++++ .../benchmarks/redis/tasks/TaskExecutor.java | 88 +++++++ .../pso/benchmarks/redis/tasks/TaskType.java | 93 +++++++ .../benchmarks/redis/tasks/package-info.java | 1 + .../pso/benchmarks/redis/util/MathUtils.java | 44 ++++ .../benchmarks/redis/util/package-info.java | 1 + .../src/main/resources/logback.xml | 13 + .../redis/compression/LZ4CompressionTest.java | 36 +++ .../redis/compression/package-info.java | 1 + .../redis/serde/MessagePackTest.java | 38 +++ .../benchmarks/redis/serde/package-info.java | 1 + .../benchmarks/redis/util/MathUtilsTest.java | 32 +++ .../benchmarks/redis/util/package-info.java | 1 + 40 files changed, 2071 insertions(+) create mode 100644 examples/redis-benchmarks/redis-benchmarks/.gitignore create mode 100644 examples/redis-benchmarks/redis-benchmarks/Dockerfile create mode 100644 examples/redis-benchmarks/redis-benchmarks/LICENSE_HEADER create mode 100644 examples/redis-benchmarks/redis-benchmarks/README.md create mode 100644 examples/redis-benchmarks/redis-benchmarks/cloudbuild.yml create mode 100644 examples/redis-benchmarks/redis-benchmarks/img/Output.png create mode 100644 examples/redis-benchmarks/redis-benchmarks/pom.xml create mode 100755 examples/redis-benchmarks/redis-benchmarks/scripts/build-image.sh create mode 100755 examples/redis-benchmarks/redis-benchmarks/scripts/build-jar.sh create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/PayloadGenerator.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/RedisBenchmark.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/WorkloadExecutor.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/compression/Compression.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/compression/LZ4Compression.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/compression/package-info.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/config/CommandLineArgs.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/config/RedisConfig.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/config/WorkloadConfig.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/config/package-info.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/model/Payload.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/model/Profile.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/model/package-info.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/serde/EncDecoder.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/serde/MessagePack.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/serde/package-info.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/ListOperationsTask.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/RedisTask.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/SetGetTask.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/TaskExecutor.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/TaskType.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/package-info.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/util/MathUtils.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/util/package-info.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/main/resources/logback.xml create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/compression/LZ4CompressionTest.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/compression/package-info.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/serde/MessagePackTest.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/serde/package-info.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/util/MathUtilsTest.java create mode 100644 examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/util/package-info.java diff --git a/examples/redis-benchmarks/redis-benchmarks/.gitignore b/examples/redis-benchmarks/redis-benchmarks/.gitignore new file mode 100644 index 0000000000..58bd7e7a50 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/.gitignore @@ -0,0 +1,40 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store + +dependency-reduced-pom.xml \ No newline at end of file diff --git a/examples/redis-benchmarks/redis-benchmarks/Dockerfile b/examples/redis-benchmarks/redis-benchmarks/Dockerfile new file mode 100644 index 0000000000..0845243abd --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/Dockerfile @@ -0,0 +1,10 @@ +# Use the official Java 11 base image +FROM adoptopenjdk/openjdk11:alpine-slim + +# Create a directory for the application JAR +WORKDIR /app + +# Copy the JAR file to the working directory +COPY artifacts/${JAR_NAME} . + +ENTRYPOINT ["java", "-jar", "redis-benchmarks-1.0.jar"] \ No newline at end of file diff --git a/examples/redis-benchmarks/redis-benchmarks/LICENSE_HEADER b/examples/redis-benchmarks/redis-benchmarks/LICENSE_HEADER new file mode 100644 index 0000000000..91cf64415d --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/LICENSE_HEADER @@ -0,0 +1,15 @@ +/* + * Copyright (C) $YEAR Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ \ No newline at end of file diff --git a/examples/redis-benchmarks/redis-benchmarks/README.md b/examples/redis-benchmarks/redis-benchmarks/README.md new file mode 100644 index 0000000000..408fdbdf2f --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/README.md @@ -0,0 +1,124 @@ +## Overview + Application Framework to execute various operations on redis to evaluate key performance metrics such as CPU & Memory + utilization, Bytes transferred, Time per command etc. For complete list of metrics refer [MemoryStore Redis Metrics](https://cloud.google.com/memorystore/docs/redis/supported-monitoring-metrics) + + Framework currently supports few operations (set/get, push & pop) with sample payload. Payload is encoded in + [message pack](https://msgpack.org/index.html) format and compressed using [LZ4](https://lz4.org/) compression. + + Application can be extended to support additional redis operations, different encodings (e.g: avro, protobuf) and + compression formats. Check below [section](#ExtendApplication) for details. + +## Getting Started + +### System Requirements + +* Java 11 +* Maven 3 +* [gcloud CLI](https://cloud.google.com/sdk/gcloud) + +### Building Jar +- Execute the below script from the project root directory to build uber jar: + +```bash +$ ./scripts/build-jar.sh +``` + Successful execution of the script will generate the jar in the path:```{project_dir}/artifacts/redis-benchmarks-${version}.jar``` + +### Building Docker image +Docker image can be built and pushed to [google cloud artifact registry](https://cloud.google.com/artifact-registry). + +Prior to building the docker image, follow the below steps: +- [Enable Artifact Registry](https://cloud.google.com/artifact-registry/docs/enable-service) + +- Create a new repository called ```benchmarks``` using the command: +```bash +$ location="us-central1" +$ gcloud artifacts repositories create benchmarks \ + --repository-format=docker \ + --location=${location} \ + --description="Contains docker images to execute benchmark tests." +``` + +- Execute the below script from the project root directory to build & push docker image: +```bash +$ ./scripts/build-image.sh +``` +Successful execution of the script will push the image to artifact registry. + +- Image can be pulled using below command: +```bash +$ project_id=<> +$ docker pull us-central1-docker.pkg.dev/${project_id}/benchmarks/redis-benchmark:latest +``` + +## Executing Application + +### Application options +Following are the options that can be supplied while executing the application: + +| Name | Description | Optional | Default Value | +|----------------------|:----------------------------------------------------------------------------------------------|:---------|:--------------| +| Project | Cloud Project identifier | N | | +| hostname | Redis host name | Y | localhost | +| port | Redis port number | Y | 6379 | +| runduration_minutes | Amount of time (in minutes) to run the application | Y | 1 | +| cpu_scaling_factor | Determines the parallelism (i.e tasks) by multiplying cpu_scaling_factor with available cores | Y | 1 | +| write_ratio | Determines the percent of writes compared to reads. Default is 20% writes and 80% reads. | Y | 0.2 | +| task_types | Task types to be executed. Can be supplied 1 or more as comma seperated values. | N | | + +### Run application +```bash +$ PROJECT_ID=<> +$ RUNDURATION_MINUTES=1 +$ CPU_SCALING_FACTOR=1 +$ WRITE_RATIO=0.2 +$ REDIS_HOST=localhost +$ REDIS_PORT=6379 +$ TASK_TYPES="SetGet,ListOps" + +$ java -jar ./artifacts/redis-benchmarks-1.0.jar \ +--project=${PROJECT_ID} \ +--runduration_minutes=${RUNDURATION_MINUTES} \ +--cpu_scaling_factor=${CPU_SCALING_FACTOR} \ +--write_ratio=${WRITE_RATIO} \ +--task_types=${TASK_TYPES} \ +--hostname=${REDIS_HOST} \ +--port=${REDIS_PORT} +``` + +### Output +Post completion, the application will display the number of writes, reads, cache hits and misses for each task. + +![Output.png](img/Output.png) + +## Extending Application + +Application can be extended to support additional payloads, encodings and compression formats. + +### Adding new payload +Create a new class similar to [profile](./src/main/java/com/google/cloud/pso/benchmarks/redis/model/Profile.java) that +implements Payload interface + +### Using different encoding +Create a new class similar to [MessagePack](./src/main/java/com/google/cloud/pso/benchmarks/redis/serde/MessagePack.java) +that implements EncDecoder interface + +### Using different Compression +Create a new class similar to [LZ4Compression](./src/main/java/com/google/cloud/pso/benchmarks/redis/compression/LZ4Compression.java) +that implements Compression interface + +### Adding additional tasks +Create a new class similar to [SetGetTask](./src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/SetGetTask.java) +that implements RedisTask interface + +- Payload can be generated using [PayloadGenerator](./src/main/java/com/google/cloud/pso/benchmarks/redis/PayloadGenerator.java) +that accepts payload type, encoding and compression as input parameters. + +- Tasks can be created with appropriate payloads and can be supplied to the workload executior. Check **createRedisTask** method + in [WorkloadExecutor](./src/main/java/com/google/cloud/pso/benchmarks/redis/WorkloadExecutor.java) for reference. + + +## Disclaimer + +This project is not an official Google project. It is not supported by Google and disclaims all warranties as to its +quality, merchantability, or fitness for a particular purpose. diff --git a/examples/redis-benchmarks/redis-benchmarks/cloudbuild.yml b/examples/redis-benchmarks/redis-benchmarks/cloudbuild.yml new file mode 100644 index 0000000000..31922b8efe --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/cloudbuild.yml @@ -0,0 +1,13 @@ +steps: + # This step builds the container image. + - name: 'gcr.io/cloud-builders/docker' + id: BuildImage + args: [ 'build', '-t', 'us-central1-docker.pkg.dev/${PROJECT_ID}/${_REPOSITORY}/${_IMAGE_NAME}:${_TAG_NAME}', '.' ] + +substitutions: + _REPOSITORY: "benchmarks" + _IMAGE_NAME: "redis-benchmark" + _TAG_NAME: "latest" + +images: + - 'us-central1-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE_NAME}:${_TAG_NAME}' \ No newline at end of file diff --git a/examples/redis-benchmarks/redis-benchmarks/img/Output.png b/examples/redis-benchmarks/redis-benchmarks/img/Output.png new file mode 100644 index 0000000000000000000000000000000000000000..cb7714e03dee2309bbd0088ecfd434faf9e01300 GIT binary patch literal 322269 zcmeFYbyQpZ)-6oErAURAA_0mNheC@6X^XqN1T9e92@q&Yf#U8~ytr#1p|}Q$JB8p{ z2*KrU`kZs#bMH64@x0?bf8Luh!rp9`^;>Jsxn=?s*{q7M}^s^gp+w`A4(S>U^`4tB;xV&LuFfvoJ8YjMw+g-0&%51CrW(>CE zv2waRdwJowENq5K(YcL-jnXaSB^<$_f~YbC5Z*TmmX|XQufO*20S*aOlW!06g9;<# zOq|Len7OSPxz#&ciJ7t+Y3G+Cua7@pr@)b9X(c(kt}oQ;kJH2qHIjOcBT8b+QK!h# zQhLq$p6r7KU(V$0rWnrT^rq8Ap@3bhuR1tX1rBwQEI7l(Z&H<7dp?tXfIR>Q9ld*q zvyS)m9D||XdoJ%k{`BPQ^Vqdlue=7jPLkfYhrftR;`;K$F@lUwQ|&il5%UXLY3OoIM9oCmol|BW(2Q3`&vbHLABU({#-n7V(>SuukeRfW`mZ* zYkFT(j;DV~ehr}_c(NoW!FU`jYshfNsP^3eWAi(C>eiD7>_kLgXc=JKGB4VhjnkbI z9&yWbrL9OW+MAY9NIFJoN}rESTn|;IRAENR%YKT-Ei;XH$wz9$^)&_8;W2fL5KU0U z#7`fgM-~k%-ZEd&w=znpe1+7b8SjN?oWv~?cP4i5?sFNwt}0qIlTb&G?mjM8-)j`n6v05hJkxnk(jE^ zqq3*9T*LcKK6b+231aN^rXTPwY`-M9PxvuHkg7+0nY92HO}~Zg`{fT$-_PV#Q4FM@ z3pYB&NOE~_g*|_wRpeb5Mm-js?q1>V?iJd9k$&Ro7J4@ESm!IK6=j%PdVidwkm6gBo0uP3znQm z+?oBvpZi*+%Nz=E3))EMVF*8GqsDQG zz_>_;p)j~u@aeGLjA`|1%uAF$Qh(dzXmz~qes)p3N8 zq^|Pwyf2lZl}W>*_0sFqFsg!Zxvt_xMF&zX(Nq~W`W@;tDhQo0jdzZ@Vj+W2^fTNv z&Y1G(@{mEvI@z@h&zuj+*5AE`ML!TY6F9S0#k%{shnCnlGedp9ME$SAE z!7vf33FUvtn=B|->&TZ@i~GKd0qIX5|TlteR&VltY{4%fx_cHgolegHO^+r-6d`tZ5+Zx6>;=b(`6ROHN853QGRCS08zKF=~M>==B!$~ssu0?$9x z_m21ahIoTi^)9)1A-xnWpFT0q0{&$ zL)TzM8jno3ObcGiY#C@Kf=$gb1zLgkh^7t)vMvM=}g8rf%7zZ%0RwHU4SB(*l-6))N*vRtYWn zn!>UMW3e(LZBw11GJZ4c>|{HCoBJo{M(3Ik1b#=(cuxCrDr+BilS`y^%$74a12n`o zX5%yS#AA52MQ94qd{KU5{nr|m)A+9eq2!m-9<}CfBfkkG)Ffh!BaB1PBJ_H>47qjk zSb25{%}`0QGSAk!hjYn-$(ZCCzB%Wg4gq!v8-uHRlOwY+E86q!Ga<`Q*SUL&er(0S zec(;7%u`mv`VNM$TNHg15Wz+Py40#vLH$_$HT@WUkgWB47Do+!OQ*PVMHv0 z#xUnklZEJjEu%a30kw{i{aGVXC$tffTel>C)PDARXMIF7$5a(_K@HPfgs3X*8#?SQ z`l!6l{hCuLUzJvGzFx5~urQZ1Kjb!)n42V*_Ue2dZ#0<@)md#+ZAm9UC#YIzCbnT~+O~HtzlO|)ed@y5-&|q^b(F$7 zqCYYM4|ZWKdTW`*B?#}>MwHXLDTovqZ^bs&d-NQ9f(^p@4|8{rP^!H*n77M6CPmc! znFxmn<3^u5t8ARCS8RaEl*uN;M9D2|_N@gxhu2m^jo)`Lg>H~T+&{Y;T?Bl}S;)DF zT8L`QEteOxNgeP!++Q6U(^=4-M2V*Id2{b?t~nMu%B`HEDB-^x=R3ug+fHOsX4F^yA2i-5?fLloMVHADTu~#y*#%G@|Of*2MQi4w9sJY@LI*RvX%o zBQWsJK>=9IRcI~+7G_tnk7z&NyCY7Re^GjBY@2Jgvg`kYP=}IEp#C)e@Te{7Gd-k! zSvXse)%*QPVf|FqsiuN?f6R(;s%zr|{_$nCJ;%d__Hd$13zRF(U2SMF`_TvhdD4D3_+IVv*YrlDAI=@%zem8=?c4Q#ZjI0V?Z!XnZzKZiaNeqj zNJ#-x6=MfeQyWKfTc^xlv!}p8`%lq?BoY1IHh;P}OwOl#}H*wzXz6 zG_f@@WplH(yE+bzfEzzBYi;UeNabd2W#h>2CP@8f3w~h!YB4)C)t^nAECs1Gn#uPiG5kKKX)1gXuPob347*-*<4?-**ci9bMW!; zvA^VG=j3DswqSLH+Bg}yvD!G&{B@9j9!J#F(b&Pl&dI{ohU)6LhDNr|PJ-0bS10<{ z=dbHDb+h=dGub%)C88&W3`~LZuW>HN<>+TJo2T zEOiPavum{j3j(TKrizSo!iqjrNe!?CWRh~mFk4Q3wc?4|5I}hfr|}tkVUp&)yuHQqzBm4;m`*0PwZmd4M@`aK zhYIJ~-8VSbAAH2Q`9Gfh^i$FR&rdG1Y?ATS|NJQbx{lj2I4wCp_UK*z;|sfXH(2`m zGwzV?54i*X(H;JEZO>S);U(SfNt=HDpFgyhO!o}NUo#b?yc78kpFVJH2BkM&T9LAN zJNW+xZ}A_`zv(;eN5i4-g)X@G|9T_;^T_z|sHxPV^sEc?pGDZ8E6I$+0fMZ2lJWKb z3$p)SH2+^0WJUB3{0vL&=9_i-=;f22Sv6uu>*jCnzxcgBq;RJvmbE9O_H-M5$GAPX z3!nZ!8+R|suLdx=C4R#50g3C#)0v&m_UQJd<)hs&Z-IEQtBnoswZ?nB@f+*E&j_WMctbut%-(%~E z=WicMyje`@;eLeO1B3BljcJqHz@7%*Zce`3!6RyV*^_)i`u>Su?Y~9Q4Z5Zi=(nRT z^1mObEwOKy@seWMAruW4CmZ)#@wvyTG(EPeqBf}MrH#8H>3(=$9(s5DteJM`F~Ick z5WbL4)?7RgUr=Qn%U3J-47ofR^Ig)it{VB=6-7@R3gO8xaZK(A1(BTr&j{Lk+_(d? z&CZ&GuA~^O4Q6*WG6i)HS6T)-j<_%sN9GkiK6D<_tJ$>9UdY8yLh+)5LuY()@PCbYngHV#Y{rc49EG)m=pGGNgvYIKSu6&(urvVeW;k7-! zKdhoacl?wufzz}*+)%IxNK8g^I@T5nHWn#pDXwS_qolNI*lib~nU8ufaH6(>qEGYW)U0zb zJxeaYrngsc7`M~z@{&Mr<~P(xseC`7ph`iR!;3lD!??wxT}yAiW?yX-P3>_Hi+D1o z!LMbZv1_TF8u7b9#n&?G@H=Sz`26Y(-Z!miC$(&~jDHsqaPx0#!Kdm6M}4+lkJXQZ zh`isO3+{E&>_YZ$=+L>YWykqNWQ2Rs$zLFLLu`rUnU(o*!vyv^7xj}uQDM9bUw>DP z=`$y%mV8y~!EV`lgKJpU%Gdan&G+dX#+>w_OEJI0MF_fLwpKI4id*?OXC()N@o1Yn zzhxGXBd)_7i>C^Q_GvDGRa36tK z+^d9rH&QEQ4ogG`1z&^c5QybO%g8e)g-OBRO*f?69%>QMbFxU%N9iJumy_mmh0oWf zUq8v=<-Hqx`#R5@r{f^8&|zJFh#xhNa{G{iu;Ba=<>fA=@18ljK}FK;@meT&Te3Ta zOUTk1i9vz=SCSp&kM?@llfZX8_@~zkh|S8oNNjG~_>xlD68+d)EKM=As-tLs__ zz_00W*WUeY`uoOl{q2*?7c(kjrE4KPvv+e9(o&Bzb(LCji1po`>sl67aSoLVFEfTN z9JGwEYD`i!#nNmvQ2NRB3!Pd$+j^t;6(hsmsQS!tUk&|oQjbo`^~dL1zB@%^Kk3aV zw;r_Q)N^T{Uoe+6a9a4R8}rP%8Dm=oX7~p2lCl``%Q&_W*dklH%?hH=+sMlcS^>+m zp1qz|R)L7y6yo3~`?3o5M8tPKMaaJq=Pf2Q99M0uZbR9#d>9{Yhvu?;x;*Q@ls6lmU@UJ-)=pTyw88tDsDu;&S z!$ewxzJG_m%pZT^;8YGIdME>ztfNPm0oiibezMZScgSu3r-TpkI0<<#mQ^Pfs$eos zMDEzjkzj~=_4%3SQ41x(Q#Rda9%Ah>Kj`9gABjR#LraKRwTaHo=PqFn7zFb$p7N%0^>WGj$`bYd?U&1T+d)g9hL3t4-1BPG{;>L|V?#|FmKGArIan5)IU~ zA6)SKaf|q-H&(;@iD;m~59^wlr^(KvT0h`B2r~bjx|P&2$V1dCGZbD1B^-TvFkzPV zD^|y5m(|P09l?A0!9VS6k>01ExSlCiL-%5V{eoJ2V?AWW5V(C#(b#hZKfP9o-Q=`tj?0$NRD==(XhX$W9~kI(9tgfq*W61VF|q^k+oSTsb!fiVhhFN;zT z;tL>?_(geBoa$4OO+Dkd_vJY{QcODg$L2(ZgaKm`d*t#WpW|{XiJ17)A6}uMvh0pBlW}L^`EX8I>NftW1A|h0nvM=-rYEH_Nu`G|b zK0dplLN@3)TvRhlDzHBwag_@_Y}*6p@@C**AAA|9$lUd zHM>}fZ}2P{;mYm?fxSG%=IRG-*b$AWLnrkd%Cld0e(1RZ60>PzN2$H@Hgk$oy;{lX z^L|OU*}U$WywggG3A+}2^dirsd8S*)AS-*(HSE-Vg8v3I2z-NdwF<-weFxj+{Y-Re zLH})4V*YnV5S#Q_;O6*#RN5JB01~JwU)T{xM*DD!+^Do>UH$r8#+3ry#zpYO5jtwm z+$@3$ zRE|E?Z6W+L$i3lU(h{_1-XISL;9&_(==P7d2DFb2avuv5}sB+ku`BD|m zWuc)|^S*H*kl9ah03O+CE)?*XWSua;r{g#EuZ_l#l0%%9pj2-Q|EY$}G#o|(iR+j9 z3YXEn_r+YSx|uUeoc0FUH|DsZ-QB{2=qXTAMwoHP{(`d5-|^#5O43xTHHJ}YZdXI0 zQyX`+hK9$p46J<91#+ z*;YQu#X$`+n4s309x>Jk6v$ z|9*FYH?_KI>NtsL!GV_z65V69&gOG3zDX8S@Rm3%oQ^Cv-zRKqJ2 zFAca14-(=k*3l3=1#ajb_UH&%ZkF&q?&78cUo!1&EKV{Dsi3Q~arR8kD`^JmR2rBddebTY!fUHa}^9v1ulpM5b`f zb=qFyk?U5~m`%)}hZYJk`3F0Fk(v#aQx4X#ZNx^p0fazC1BJL=Kss>+#OHzcMR{q# zL%#Jn8#FxZC5%bvZ^d0!u8mF)m_)4?lu(?ys@O#-`w+RfPFdIRg2tAkmr>vy@>w7` z)ky~|q@Sk9LOTF8YhTp$^8Ao~t<%6^sXNC0__Ymh0{5IJ=6A9qDle;4BL=GQgIV;u z<+xKXM+dDeTis$L!MzjH@qM812uGwR8P%@$jLg}cQX``sxgb&;V=-^ft#eaca7*fz z6SZ$Y2gRuWdS^TWl!6x4nrY4mF_;J@GgyTUdA65zc?LWH=5V8P2J2r@6g*k93?kYg zkYdzpo2wcc(;iYDUHJCnVz@xs<=KkJ7HV}7;2P3yKoxZ@9P3_Id4U)uw6ThPo`r|U zH49G>y5d3Gr7Z;ME>SECPuca!Q2>P;CWtGRt-rhvIePc~gkixXnEAHR{Geh=Kum$i z3VV*lish{RnslC~@yKwV3K}}JRK%x>JIPtgR&L|GrY5NElVsy3mpGIX%+Cfv2=K_P zTQZRL)J>gXV@f>f=FhGQsK{eZA!pv)4h|s1`Oy`ij$wj=&Y^Z}etu7fo91w-6z(j5 z2Rt}0J_rhuCT~F`D4-@b5nRM|_Ojx?XOdHYRs}VW>ezz%^%9XzY)I<<9ijD^ZjD?d z+{v>atTrdZ3tgvxHU23~HqgPtF_`{=AZkocBD+UpsoolW1^~fFC1x{;HBOmC0QM@jGtwL|H>)u5C64MU>duAa9A zy|r3$XhM0L1KJ+`eYK(qd^3li^psUQIxk#%wA2EKAqApfeb3#tX=$Z+712S##%Wgs zCWRIOx1DW(Hrm{W#V|9|Y#A(>L@a!WNfFJDl>vVcJYJ02h19Ui_b0rfkJxQ}tkBCO zzM1>F(BZe5hF%O=&D=G$E0nabfFMn(p=kpuf8xtgd1WmyCD)I_{D{6V?=!UMtabIo z3qDutV?e1O%#};xZoT~SSiY0R&n0^tC@+4ku4{E@fLp{{5>ffyCuZLn@B7$)@BI^t zs;O9_rWx~Tq@vSP!i;J{Ic_j!C6uhtlQOHKwR2z0}#-_Cv|&D+c9 zC}NDDO<&qc4jf_(j4VAH@9?syX#bRCWhR@+D&H^=kIC<`kf`+yfIr(3g~Y7XqC+>B z!h+3D%I?Q=<;4E{?s8;rO$Xbo9(}+|LXo{A1?gEWNm5BrJJ^S9YvbmOzSNQ(LX9%;i}#kViT~xF;EO%Z$XdiAu&sslFu{MsZf{vFcQ_s1U3(!x1biK#X!C9FyUK zHN#6*9r!>X)}t#3p_8@xYV^At6hLK({25{?%vn0Z@AR5?%Bw!an6zWYF)>x5Jb8g= z4HB4H3q?sZ!YhM1hb$?qjArvr^qXS}wttR!kU@5?t;crE?x3L)2SGqG4RelWg^Xah zLot)*eIf9T!V39iew}u)Z9Z*#)77Eq3atJiUz-G2l@Au;k60|*EFi_1c5FoG#HZn6`1a&Omu|+~#i!7UKJNQfD)HwP-568+ zq-0snaYYj3el~j>e3921WcpgMUCmVgMOcRY1}S%63Ye!D(t%#fO_MKgFJ*kIbSw(l zb+K|*z2sjE7g?C;uhfack8;pVoi{PPrp%KsJSkw>z-u{LsCYXF0P?5&%|s;@Ejiq~ zWw<_}KeMEwjJTD*$13Gu#yI*rU->rdnQB23RdbwtOL2okeO)>R*t|(4iX3vADWQuG zT`fD5(4lZhM;L6=cvm;`SbT+B7A(Ka7cT@Tuj=*RPKvQH+zO@SoqRH)=uI(mArNZmC zaMv?u=}N*bW``Sw_B{fqu`y3_H$9TP5O+Ewd3yRgFy&jsHW$VGs8ekT)0nDY2w4Yo z%bc+|w9ExZ2Ce{GSCOi9S+aJJKoz=|oFp$~f&zU@b_e1Fs=f06ib(pah*W@1?lqv{ zNF8yXRAiyy(5E{T&%8IKDH{eMLpxBGJE*^JSq#vAdT2IIdyD*>PXmbPyxdgj=sU@g zpU(2@%W*l^JOS$APXNu*rMd-y3DyN;^w^RPd)SfF&(RhALY6*Jj<7XtNT##y;k0AF z-Ewb28Rz!?+K_Q(_!V#nnCp+qPsR`>u2;7>O;kC?qI1xge&Mvx!Et9b8nOaKsy3k& zw%T8xvseI_nvNkjoU%o>UJ@gZ#1={(PlZ)kPWTWCjXx|7vMg!ju7d<;t?CROJP)}K1VL0JHj5ud6~dTsTAEUmKn z8=^c}U9sV0y#RboGjqMYzVJXd$2%s)b(5C~T0Z(Ik*uh9#^rUD zX`X}4U!hrZhdzqPZ7B2v_mPkm)|3y>JF}V?T4H8grdXxWi%|;lG@&Ihd-*UjwJ~8t zyBXzPrE}xDvB0M3cve||F-;|=#oXafc)D{)9kRm=eiYA)%qoDlDznl)gboU70ogKl zDUY9!n``Iwu|9Q>g%YxS$9hx1Mz|7vD)>g}7$(R*<&}O6U+10M=g(&#ZnNCrE#a7i zO^X#0v+2eYZ2*FmOgo-0m$g%3@nL>HBVscB&CxSLSa+1FypwVVRhI-mq8-W{go4HN zWLtK0QSVH6_JV~@;mrPE0{4q@Ke_GWZV*-$4p7)HoRPimkoE4S|3>Y$rhl1%msE_r zII;7==l*)>1t=u#n_GkvCrVXcJpj`3Zi_!lIAzS<^ohwJG#lS$Gb~mb9*ogqODdT; z|8<4w@z;4TyEPDl>B;lmkwOIT@`{*-%lzHquW0`_Co28m9ymb=2QYqpag+*R$AonuxcWbbk zqVvs67m|ER-3J!*BJ{AT(Jtej#Ly%}akoH9XxK(QQ1kR7r#vxz#!ty?8|;lXmD@|D z4&nB7QykU|84W?9EptchJdr0%U<6Z|7yL@;jnDwco5tvIc6}VE5@8(WUZMabZd%H% zVUv(xz0?BrBHS@;%OYC+C_g!Cv~fqsF1o|tC}OGb5oEHIp4m$cS>2WCFkWt%Tf&md zF2#&l_ofFH!yOX5T$xee(yGNNElHLn@H3Zw3M|(c*J-3ZT(XM!EYpud%OURA9b@@V-1V!^Gf;oxm6(uhcGO;< zQ(NRw-;TD#n%+kja|bj=%Phq-XsENU=#c+Uz~ZhM3+yw7-Ll=-nwq<)#%FTY=K?{{ zp4#L2ds##FV=l=od#QaL4d@Ca++iF|wNe5g6`KY-iLIk{Hu>sh-oI_TK4ZHn9&H#! zv^*2$ru;dsz-WB2Vy~O2GYf+_+v^b_sp=e;fRk$Z+QndjGAuneIA#ey4JBfUW7A7a zKq6EdXWcjGurw3dwdph9{oIuAx-)BTv(OdOoS|qlHPnH>d+xv@93NHtf_OAm*L*h&~sLctd366)7zNlYqP(ouL&HodC!K=C`RO5O%cSPtJy|5le7{l zcrY%S%F=e+aGKBAFH;hVWN&$4sf!M7=zhjs=f34UT>RET!-<>%xOqUdBaA$7ZoWsK z6_lbYlP=?!aRGqS+Sa+l06Zq$^JM69LS5I?%tYc_F4r?{r68R(W8ynX+=h+Y>wq_I7Os}rZ^qV>qDk88{%=edG!ofA+AkM6lTsc2M_gPLFew9~Z+*Ee1>FNuGHKxW{Bfq~w@ic}qwPY2c8@j(${RBu$ zTJUpszd`uRnw&|X<#TG}^kJisvY)YWGJPCKiZSvJHAE?rLfLP8%U?SpU9nDZ(pO7$ z;@_SOjS`!!IF5I{{c}zank2N2et3t{^LIFs?hqw<*0fNbuS(oABjLrKTCS^wSS6}5D4w64tq2pE zQW;^8}IMD zH^}kOYk0AeveXktf6Rcqs+-)n1G=?FZGoX&YBuSDw~4rFwH*7nL_)Ay;94niAdIp# zQQ8UXGf+Tzt(6if<(=5}3dcaMys3rY~A z+RN_Tib)-B|F-{Q!29r-lAjzq^335o=*#}$2IP{z*gxX^c-Ff{pz#apz6vkhxv69? zme>qmm3lirT@>4X#e8pufE5maML4@@O@b;{ z`EHRSm6&Xd_ugWc6dAxLHyDBd0BG&@ zRr8ZmcgQ-s$^fgHLhBzt0kNGo0%yLv~p@Xt}6Pr>fQ_Pz6`YA z7V$Z!)jD@5R)(Ui95+}dmZj{7AH`n3nlb)N`}R)@w2h^CG#8J_u_>dSwy!Qnr(?As z58n>MWx^}7Wt2Ck-2`wi%>ZB(o-KNq6818zZ{=zlu#n}x|u~5ju&*D$TzAk82KT1jFR0g{sPu|B`41a ziwspp$LWP(^TL9mIWIkse1@0yHAbUhOk?W9a(57E$vJURzN-tkPE}Ve37u|`s9F2F#F6a| zI3x7{wvdKZqV?b!ix{W5pH z?Ha}3H~Dk@;&ex$`KtHKY2@0 zJxm7Tvs*~A1|-%o)-cM)k}nk~hA1%Kq}`ajJIGmK@(GB?y~sNdMZ9)4H1=mwYCs(Ye0Uqy?+;bYWDF@Hk%8eth_Qv*<<|WChr|O?i`|>1q85$h}jl^Y zQZpIthJok>cD?#av$Gd8f8M(7yL2h(!q7Ge;gg>)f)bNl{(9}|9MTZz7=a=11|=D8 zQJn&!a|c~RRUZg6tyeKH8%lrYwEYo3q4OJ4fkCC-< zee6qgBuxE4F^x>>y+@xMJ`DDg6XC!rKO=XS;7ZFtYa$nw7(E$YYKtMSRQzP1O!gxs zC}B=_MZr6NaEvJ-q zte}D_)>#)|C*C4%1ZbDSNX^-UdEC4zhJpK*_hnuM1>jsQa|V2RTtZlmn0-b z6)1iw#FgO8a3ffMJHaefYWqqzFIi1r;57}+!AtVAwf6Cy*GjP@odL zyj3$tA)n045s};F?88+nMaC^9M1labaprV7{#8HVB;0uypdG-)^96Z%z5@(CKDWWddvUc*cr9(`F;h(sXs24W>L;bOv(_ zw39iqj$9~e0W*vL7cil3omak4!qOicl1i6`-8gJ8#@H-OhssR0RmEBE3BD<5sA&Gf z`jyO*ZQVgJZB+dw0Kknp1j?8~`|Yjzx>0RQy0Mc7lETSFhc;-#k`*GzmZIqa2gONr z$EXNURzjw>8b0vLg zb}`937UQ%_USocMouX2gJYR;mM9Sx*?ltM#y?`(pQIj;^RBqY>^uu+$fkqo+g3Rvf zB({Bb%4taMRmaJdCoEbiDQGOqP-O}TD&v#=wK@YeiBN@yZIjbq+;3LOQ3Py=d{Pp( z3WcPASlec^hl=K|oNiKAxRzoh;ie3_6Xz6@v?b9D2rvp#f~)o zrL3RiHx?WM4n<$>4egaHf>gdfvos;YF*a&US;jyoI%=7YuWFIuFhIjiH39M8|M}1%5Yz*tbitIuLb?b~Xu^Vepyfv6 zx?^C!%lCJ~AVOG=@s9)TmGRmcR6)+rFfT+cwShAh)*l-uKZ%@bKo=l$F;*>D;CV+E z@>I6>I0A~H;iH|;_t`pw{DlAB8>}s5Fiy&?=RBg;Md%DPGCkRJefh*Puh1P&D!$w4 zR!s|dr{UGb5EP`L{#G1L#Rs(o92vcZruzmV!GYT!RI79Woe+;+AvL*^%XxkHHxLb- z(X9O#*p3Ip;qt1l-e8{Itb2U9*?++T9J6+-dg|S|L9uWOu|0y9XM$j>_=Q=DvwDOP z*Q4D0h!A$)>m)UG-05hbPa2~oPa@D2-`vJ(9Ivc?B_0hcZT7K9E^5U<_1&G%U}QjY z$XeW9?*akBfC``Z6#Mi)QIJN#{04 z$ON=BP=ItSsFn$v?Xq86kyOv@*!0s8w&-JuS0A?q9 zr-40ZkK5YuO4?4RHvE7bKu1!^fO!I}kuWo>S*5FdJN)^_D5-7?6f#qDoZZiQXSWZ) zB^Q7_QGx!|;>lH&HF4zZE{Vgm)#bT-cLzY`E@1!KP|Ip>2AcLqstl#KWmW(;M|e4) z`@-kD=+mZu$aeFI>1kb2HWi679tA{xFJ`a+y)#uRRZi|atORn-=AO+mjKZ_Ia=p?j zzl>Gsd+zEmEtD1@*_w|OKXajP@ID{&1}XO=c&F@X zN@ioAfMWJ<^1$RuG|&lfm4pxQz860DRz}wt`pjYI?w;atc2fyZ57JJCbNx2MPk*-% zy7n?&Vc7@QPwsw&`Nh0doYZrfFqIMtEbu5#{*z>r5?%8Vah(fGL;Z*nhH~SaEyxF9 z=njwW>0nvs>G%9A@DGHq8cE_6_6PFqte5AzehK6Swj|1EZCdEn6DUvYwC;TCD17q6 z$e)@m_WMuGHi{|xx-sQWUtqS)RQv&u>yImY)t01k(ZxLoGYrSh(dJGu`8MzB@dkYE z+-7jQGIroqk+b%gx&MnXZa@{Z3i~H8+ZhSB@KJsM;k-@HNwkMN_k(CUYW^vz@%wp?g^#DmN;~Un*&0>q)B*2hRN7i zIuI+Hc0sJwlFhVJSH<`#9j5+6-M%lZM@e`xcY_U9RD#M$A!0Y{jsF=DyTAxLpI{$h zLehi@l!qJXok-}+Fq?Mkqv%&&Or~=+06!-d8Z6)q@zVfQi9AIr;}=r|T>9UIdy{zB z8;%x&L`bG5>{4X-=(n;SMB9|qSHpX+Ors(T4D1_)3ksk%{iGbhlJ4mor6t|K2Npt6 zFXW`h*9Abu9)t4Y(#1koR@Q8v7Wj5O^F7yHKopI{NhH(N=U->8=9CW4IQr9j&8cl^ z%f=5d5p@FE7wwMibLTU2&J1vX4KLS$Qz!P+K^ifBL>VLWES4TZSM5_sm5Wy**rSer zuQCAW+3Ox>D|&U&#eE@7dXGv@uv0pE?oU2=UyfWqMqz4E$q?W)OrX;$`?6$!d-rOB zUrW`^F@3Yti{T1o1a0vzuS-jeL_`m%nI$G!$D@*xU9W%?!IC>8TpD2uz}$4aSI#z1 z463|_ZD<>HM-Geu@6__!kUK80OKgd^pbGgq^Vg2`s}`#1$Fe!EQ#xv|Tat2=Ui zS4NXX4(5#=z*e_sy&(8zVz2fHks1dJE|7mgxxo;po?;AiSV_Dl_;kS^vr}fC$l3>a z{-#P1|7oeSW5ZIgm%LB_lD45lrz=2NdejQkeILJ&U41r%efxbM9;q)L={&g00nn+n zhI|3UAI%m3x38~U0PfY3fG-q0nbJOSRa$pFu>0HN?(AQD{>~HpvB{2Rz!e~?zqh?! zvO5fiMOoyQz;*x{0}@_0&2~Q9?O0)Yo;@VXjAU-4mfjZX!49QeR2ut-6moX$yh=Nk z)jpfv$X^;HOotw?9Luax_jJ`V7E#5<_yrFJda()=1?TKv^~c_u3b*zXo6T)0!X30k z$QTpw2G#z=`?qQupUlF8g)@^%d%%WFZ(m-U?K)<6c)-71J!Jz@GkD^?&UD~Hd*&aM z-&--rgr+y`(`Ol+*TPM85$NT#QigR)4(5zh8b-B8-yq=qMx&5~1ZyN`pcP1}<=UQj zlYHhs#)K}M1B~g(qfAuoI_JQckLl|dbe@b;lDi)OVPIF+b0L8K#okj6t9)SZD|!WZ zMNN32dy8L0>Ss-wsM?CDiOPjpQpzPIgxwVNqW?&nqfO_KO*3&qOrZDN$FsPCmtrD)83!ksx_sDyY)aznxE?>1%_Q z0Et)6ZV2RFNjE_N@yivkK-A2*=yXVkmbVi&25m3p=Kzddp+`fE0QJ{&`R+5izKT-$C+{9y2jJ*0bk4`Ufwm0Zv7s$6 z362>r0XinKbf0=#sr%>7mU+?(1Qy=9b(68{oUGYC|Mq$0TxL;rwuJP9`h# zcm7g7(67%-7RaTX!*X@8-1@+HcY}G}G@2`ms-Pr;pPRq`R2dd43z*8S`~i~gs!UPV zt9%{BB%|U5aQnh{KU@KDDcaCM;laX~hDuQ(*9g-(*Td$sXHBw`F<-=U7%%9(zWTk$ zczAR6^QGiUOtzij6K|7-h?U{g6aiA2!20~&pqw;fg)O(~TKj-r`GbZ`0Etvqpbb+U z&adE1gu+wG5JxuK5PzX*;1@vQd>7`j%Hwv<_leo?s&t~zOQDG(l{!s8t5&Jj+__^! zpG4|MPnQN@-2uehU&bByA!5qm@?>-70^rqeKJWVE#PrmJ)G0!Y0mJjc12odBJ9F)NYyK!bn5mC+FQ@c?x7 z2T)p{bxWX4ORzP)zTE>>w-z4#l`|#q{kWIZat`P>K{Hyx`bv-#Hx{!o)U*=Z0kDy= za<5;^9wOrSC|z?7yfvIp#N4Mlr6FFXqr%Sr2x=xjz-bD&C~47A%drBvX6*1AAKPnw zE(294wN|+9VkwjpPZ(f?xWbTGAj8cAUgELz&0++TurJmDF!?Pj{qH8fEyuuu73z+{ z6_u_9jNqG@@?$ss1CHWJhhaU5iOT%c8tdem_J{5@yUq967oW-*9-RAcTQ^U*mz-YN zTk?Yu?IMsp6MG0?w?1P7EKb$kx=G##6={9-)?XnhPM*OSi%;F%Lpdve5q72=2=OHo z=oM)LBqPhtj?b^-ELNnd?vejJ5%gpJ#BpNCcCuSg85B*A_MrC7J9@@A8YACwi2pOp z<84+vnJ6TYfSM-Zm*5UmVTmOp<=%ovX34RJe9KtK6$PZu458v2#pRy1YoSsO%};jH z>3-rIPo+FfaP{-JRe{Ne&*NVjzWX()HgUaJvy2+CboJY|37x2;KQSI)cS9h6=pdUOm%03q;c0hS_geq|Z?%W)epr7Uc<=&} z4>&~zG4>dAGbVE1JMpf-aM>dSh=EV zCYvLeuJjqNmO|;d%15(g)pTBEs6&8}*7EDL4#-yPE6*i`*zt07H67x8O&L7#DW14s zdVd4Inq~HI&!g#%v>5-0quM#P0Q9tfpy3OUkV9iLI9h#v`p`m5b?Vja#I{-CEFry@ z4wesywZW@3fqFGlY@wzGdO->Ao|v6uV?+n?I)~}oq%Cp+S>N}VvJOeQhIJ(aBymMk zyC}FbK88@SpONF4p8M3I)!B3BZLd`A%2hwPdhGT>=jACorX0-^&4qB+N+%lHS7?V% zGXd<1o(An4_8nY-;piE5SJRQnq}p8u^xzs0t7yW+w>-utJ=I~fjzBgQUy_|Pzk=8* zc~=;ky^#L~8&QABc{Nvv6o#!^7{{lCZu-pW14hUwiU z`P-ZN`Gb3mz=zr`)o*;vdt4eA=VvU)z<+2%A0C`+I=2ku(hE&1(~E^lBo0v286i2L>Y(Wi? z1jNM_njO&j@G)c`1?kp)-cjjOj|^>@dYDbT{}4cZZo2Z>0n?NwC42Zky0P@L2g$ zR;FuRZnA>%BA}8|X2U4{BwIFPI~=E`qjUT9vH$34!_I@J4TA|Z{H+h|?{N?J=%DBE z)wy^4?@xDsJ5mFAAPhsnDbyb=$Nx>j_it~_>?pu63@V>)`t#@d+ne~SAArOvm@_IG zi3|WDo;|#I z<>=qHRN^j3RGfX17W^X8e~g^nW%)KC@m2=nB?MTmRGl$#nVk zTl3~S_cS%F z%Bo}I`d=6sgZIE>;_E)b^H)>tfA~or|KDQvmqY0n^W=|wP{`t9UQYcx=CcHnR z5`c+NPXIac`hBY%gRqn33KqPr+t{s|t?KaiNRWDeks=q#yp_SpuGW>q2D$8j#hw!A zS*}AL^#v#ylK}g&`7Nu#qQ{^F`s`Bc+l?+?1=AQiN%YcvASEO_D>VD*>J}Mw$Ui9= zOMgwtAlU6xt+&bL?3NpK0eM~clM;@DXOo`1coCFuMo&TZE3GC4z5ymJpv!YVHSFt(LcJ9{4;?*StP+20ffE!x&KrE) zo8PzDQLB2B6%HlU=2^hd430RN!A=I3#E~9(Ku;7Ip|l<`lPeO*J2u@wpR-?0@Yy!o z+ZhAjqD~@9htcQGm1`u&<)0&O|2VbsmS`I{CQ9k0&NOZmdyD;E)Pu7H@P0f?yKt&1 z!B(irZTaD9Q=$ophp5+%ESfqlbvhv)6rZ2WnJK#MOh>+i&=5^zZY_mHj_Msnt9TJh_Zvo|~uU^+6)_boemPAzYH=UP>WG?s-nqjj_h` zV!}D9P0R9U5!9DOX`x5ghp0fA!}mGsphk8_-GJ!$PDQ~_ zq=G@l8swI6tnrP3_bcz;4xtPb)=D0N_ZBb7R5~6A0n>Vy$^_0Lr<}Q2X)Af;D7nbn zSEkdk)6}#VlS5^4k{CnkmAnXD<>u`2cDCne$VjX~20NMCW62?&j!eQjIS>_(bgNs1 z-0P>NI{>ZW?GF{EY@3mOcW@SP9Cli3W??bxIQyF3@ZEX23r--T?f9yA?i!Da!qhOx z3dseO05iuF63yoM?c=hnY4;kP8$Mw6A*rZfO8Fu{Mcm{@>^4+Fg1fCgq`6f5tBrs! z-Q_q6p7Gi(_m|NYM3LJxgM88@i8nr8>Eh@VMFBY!Y?hT#O6J1J44rPfiZih zMN_DzAODbnke)j@9~X>73j)`DrPzTa4xv%GYc=|J#2_6Bm31i{t6wK=)buIHHwt;W9 zS3-Gv|32*i<;A?GkJy^EdLgz(D0n|8crc6lVbVZQc(i_0WUvGvs}4;xi9jTWro4f6RZHR;5`GJld$KobFlz%gtqFv zB|KLgKu;F_iwZP`?tX;VL@V0KVi)6mLfg`3dDMakjUhCMNLZ0P7!8iA7^{GET7zH<I@p}o%-hdpjs(Q}z zuvkA}5KZDF0xlkdP&tf`FdM6QKe3I3A87G?yB||dbK4>WR?TGA^N(bc%AZJxzb5I> z{2pp+7vj_^o8uY(NS5R`{>Jg+f97vgavXyayS89?JqE#qE;B5$QtncXivaP+6~g(O zHQcJcWY;7#$0o3;K*o^^G9{-P<&(I18hNCAjUigaOR)b5)&x_&m~;y{!!?0}_8XU# zFDG7tJLWG9tU1y>(-=e-$wW;%LIU)_ZuX+XO6q-ho!Y&Y zTE{T>WCy+T@cCWys-3SaV((sM64Mz`e@Eiz5dH&+!{Xilgv4Ri_m0W>vbWbc8gCNo zin-J)Je05HF4A88>dwz|H#P9xpZOUCF9n5`L;Uvvk7ig`A$WUAqD*Ys4}5xj827kE;4(( zy;|47UQC@dW+W85M|tsZ@PQ+c7iyNfH9Lcn6w7o++cgs>>G^Oc4VUDTZ>LbPxrvOA zd>;jzv3xJ^BpYYYhMdz_ykGgCxS47ifFUFs4M`s^3WUOP*VH~(v=avnjg%`-6sL=B z=tl5?U8XOT54C z6cCw=k9d3;R$AN~jA~TkT9lE%-Q$l#f=saji8~0DE_hMr#0th1IyC!Jal|;|f}K1s z(ek;5a`Oz!Z08xN(G13#UpxBLCPs!e{$4CS_nO*`uPlcNK1v@OIuqfPlj{7v(i6ko zLJ3@x?>xL>H|y8iq^)Vg$c~JVZoBQTg)2In2l$mJ#7(>pY5TCbl>*T!JpCTWbBpaX zD{YE;@x1y~0Iz=a+{RE|GkcW{C?t=AVC-BA5n^+wY;!#6-{{Fj^1c~U7#L+&#kgdo z1vtr*;x)T>*fmS{+CNG=Vsk;rydj0GUEz>QYNWv?Pk=Gk4nI_7UGXP z{o3if>_oiVe0p0Ym6Yy`L5ye7L$+tEjHr_yAYYEPSN;&d^03ehl{H*ebHwA)KpIhI zM{sczc+q4{Iy?y$p#e@~ry8$~^dwxSsTwsMGRAX7U4 zq-I%Z^w^FzJDDmVTP?e8DWIPgZ*Fb#QcYJQ-YnFDf)RaVP@f07?1%|Gc!ZL8{Hjvv z1B;x{e8X5l?!nc(fABfX`;+nYHeS0!075~u?ckDc7I6LHeS%qg-ss3BY*OwS7RmmO zHhGzC8J5_vVbonW!3MSqxtceMM#IWyLO)7k%D5gm#a{;w5Cp8I% z_(c#L^q7l}#5vDzax+#**6-#E#dxfzUk_NaiWVsm5sMr9y|P>ZP#w^q2sTpN+NmoQ zQOpsNVqDkM-PIhy#zJwME4e)gZ@Rze%^B=^B#bTD{wl5DJ$?^DcBtAG9X|^U*jZOw z0j(^oMaNJv9|;^$<*Rzn!`6d^=F@D!NozH}Er69ySYp3o+TK1nWYaGbGW;ottUeNw z?E`h;g5%O5;`=Vv44Qg&5_JQ}FXA{~;MKbRrV?0!N@eG&IRTFA`x5gV;DXgkxDgP& zw=tPFQN~9Ep~Q>?eg@vtG}9r)NLC8g+ij)F@mUU^!TSn}TTtaW>oHfu721z!BG68< zkjr>y9k@Y=9U(|csB&y46#TMt7^t1<>8#5VIK)SmjWNPp+67G9yI&8WsH5}Umnjg~ zPOg~`+wxd}FmYTE8>5D~*J+|0US2r{fegBCqc4Zv0>lnEp+`87yM@$)k9@h2s{!;p z{ik~(Gi#TD?2a!DkClt$3c}_9q#%olve%F~Dz*;9sHqY6r3dP8eg~kQ;Rj_}uLTf% zXQYChBjHHbPA_P+2v?|4-Q!!4387OJdw(^%k-Kl{uC>{TTI3&ZCMmXkPosJwz~Txxd{xFH_|11GZ}tU_ezjI!sg zd&m1Edb7Ez*?$rfo?fMmp-^g00;nKW(Ld|9mEWMHX^nPD(%LaJq$kOu<96sxRj*#As8Y? z44)YJkYGW#)aEXV?y>R{Bc$KNN(-Ujj_}-)Z20!au`XPFMSHlFmLLD^eIQw$&q?yg zrI^R4IiKm)n{PY-_0#<8f}Z_NJ}Kh%$y>r)^5z2AB>1+a_@=8AQx~#%4xb!b2mp|v+Hhlh_3ldhi5xy;g zt+~Q|gKMO##S<$$Cew-Vhp*4H;t;yCnR?o^<|jB<0w^^z7noFw^#)aNpqw0dkjxZ{ z1v56Z$pz>eW+Vb?Yiz<_=2pyS43`nlrqvBd340LcP!vu>mW2xKPdI`t$SX?CHNlL7 z;>c^L@PTF^jzjr@5LIqM;DAC=;A){X;o}-tzjX|LC$FX7aHUse-Rz$tZVT)GVGewUX}wb z5#hjIh>1hw?j?WUnN#u-BBkysTIXG69f9w!Mbi7)y4p9dm^JuQnX6Rk3)iRc_UYY` zQEUA4UJ933yIWZs&<+*PnLI!#*q>P7)Jlw2p|!8D#GqlW-9!7HSm)srcbIYq z72|NdIYmhyEs{)vUE5p0J`sZah&C$Q?c#p19mQ@_Jy?QF5bMaa!S9wA+{D?AO@`#| zw4jABSfMX|A_%l7ZGEMa$Dlb1!DNc-Sn5odCOm#q*`DL=v2i*&wD-~-$;6;#v`2Olkl`zdiOrmjU)wOd2`89A2aojd)pl1%MN$hA<%um^oL zE#YnImD2(S8t-`Nm3-y7;==TbkE+n=!P>-tfUYJQRJoNd`%ltrKJ2Ihie_Sh>e@5E zGmA`y({Mo3cz{2@cyYpM>iccE1bC%&nLX|&cZ6^oeq0qQ{z>(-p<>>**!__^LiPPW z;*Qi`ngsC2qKj*j=G3Rq8dCV&hi3(uMv3y3yaTt`V(*I1`~o=QFCF~ODfc{`=Y2iN zs5UrSZYrO;M&&r8HhgUh7?FchJ zQFcNz!#$uevvC@J{PN&P+tS&zSoN+YwRnPhXH8LNf<@t+OHE^t<8B%c_pWl2D8xeS zt>Ag2zU$yM7~7uXGg97rPPJ#re(C@r!8F1KG&J z1q9t#$c~;=PquTshsQT+v1zs;jkO8WVr<4Tg-2lK`>wuYRV}$n~~78F7++#-o@^e4>C+*Gzs^aa9fp(+BIIXTxxFLK3oQ@0+O@ zg;#NHpnOe>$vP4o?u3m!K-$I1);@>(B+g{yZdRG!7}$QzoLP+faCk>lH{97p8TsQR5xzs-PCm^OXeFUMqPxvEwkVCk1Y0QKeo zid??JSxOk?1PNbGFfN?zYXGV0=wWV2Fi(2l3b-ayLVG`n6Q+WKI6VZQNr zQy0VKbhjD+Mf-YB#nX0kVSs);f3Vot(da`k@K+ZHDe0V-fy*gy^aCz+5533TTE6Md zH3%{(I;{<|*=iGC=TfPXfP)$FYz&Gf>R9Ct!z&A=?~fH1?yO^nm?j){%57;&p3;(L zW^n}vXVBpa1|6dIVNRp@lW9{On(w<59g@P!hk{e*+*|Z?Z`|Ip^G*sDVsG08ZellJ z_Of@Voo{W1IAkf;GaWsfX=E*9)x>+x9$7;6WG^+_iw!Dq`g_lh4y zwt~KRXNMR!YBDvq%j5WnQrB8gm<2&%3;%40AYo9+AzX{Fq@~NpT=%ZW_oG60&NqX_yL?g z7(#jQOQ9hlJ9Q`#R}TyUHRRB*a;D3{EZ1W9?AM;4kR;C<>6TBAAU7uDr~V0&QbQI!9CD7Zdfzk6`}A1Vr-(IY;ft^f zi_%py5`%fo&3yrd#KX!~3OTaEMUtXI?GAjSU?9g(w`SHN^&CVTISEG5VEy-RYXez} zhca$L&P$zg+zNY$Tm+9x==;e1BAi-W*I6pX-UCAJ0VaU&>sYT5z!I`)qk?3@ywAjL z@XE7<+{B$btjYk3LcL$L*Y3-cX_T`kd@R(GHpH-XMF96V(OPfGNuJK1bvbczg&%;W zlWQ=+xfs;g5{SFxr+Usl)i#Ng=egpzsC@j0Liq^>7r>$s<}G(C*~tbr<8H3=igC_G>}FibNT}X&U~r(^ph`HIq=Rzz|*^p)Y)3EEv?0LzD;BL+LQcu1G2lRDHfb zjdYGh7Dj__s!vDWhDFGgn%=%Sk7*Nz5Qo>42mu5>CECzu)hV^szMY$K1=u!Q8IPE& z1<_u`x~))hTuVb!yq9$sjHrdCr8xH`84TW=+~bOarl6-xe@dtfEro^_uQBJRH%@gq6WAGt>= zR!4atUc;fXuN}4#JhN+a?t4(p@>Clz96ARwB|v~|;=xBSO+YDVr#3Io#DprM^&{s{6=?Kc zPviddq^oHeEnhj-*tuH~y)ZH5c3kQgF%1oXR+;oO`M7TJ7|5>J!+;cuhA+e?wR(hr_f_& zCH5{KWxH9sQg>R$4#6c(onurxU-NUJUjz92iq;&-}1AF`+E-g14rQc!a0-m4v zT&3cK0WoiZSzbck6SQL(QZa zx=rsB)zOTm(9z;e^+4z8Q#4FN4&m7JutfO^i;^%hm9Cj|C3 zz`I|HOA%@Y)B}Kk(gcgQaC_4sv$t)uTyMr8QgJ{5M1mLL9c_ARV5rk4P20n+Te&*c z?A1V}$%Oy3!`wblK8xYV{T4WrM08ZsDlziMXf{5t$T;#*Ni6ESYFu@%N)5rs=IGg= zqX6vX*%@*7#GG~=eii)jip=vLbM5L&-U+Q2koyd)_cVHTtbSMVEKFM;IP1C5m1s{L zgbGmwZput&rjx&h+8vWO?YcIhflktn(6EZjEz@ zUz?hS_l}idkyT2wyg9P_$Q+!1lTnmYCY&y}53eO`ZmE#w6y6e5MjfW%gojj8vrMo&{}Gb1}pobV)%GI=o` zndXr7QT-NxUO_+?u2IOMy(S>>X}F2`6T3s`t5UU0`B8Yw8~?{Iu~`H@T{!y`z>8s~=;Wfy6d$DrpbMkxR8m z;SS><%PZ8YUhcC=c_l?t^C{aQ?PHp)?GVfF0+*56V&~LEW$}9oiOQz(Tctx8rwgTq z48#G-f8f*9u+(n;sTPP#@C|06zS^gFNwK%!_%@8{yT_W$JqZ?A9~iw7gU=rd8zOc& z3Vc;7FN4~=s#H#n@u2}Lk@M8QEw?#I-A-$IQBE+a+ry?%n7!_zjxTlax8R>k`fcEn zmS)4JWGu$W!-$V1W3jTr`$dNI);ry_UY0^axk6q$I#N42EZgr{T2Ywdn_YE2rze?) z37ddzM^?Pl`C+!Vg=fLZDEZE-`EZ*7q+wTP7jl7+ulU>gy9<(&f3^M&;L%xkF*QnQ zLOJZq%)JQ2RK5r%D|FFwZXIBVeg@)y9=h#VdT@|h6j_-0w!2(AcD#6E56CshtmwYm zD9^wArG4P@71BV~`c#ly6YM_wfDroR?XdJ6OVua?&?UyM;99D!8?3E z=b7>3uAeO1#dwg08=qNf+B zw0sCUG~q@_8CXYwj$~%_c4hW1a3B779ORHd5X-0#bgJx~s@yj}N+xDt6N`0E|?7Hn0$Ksu1d(H;5y{yLI zK*Sp>Mc-iCf+8c{)i0^&v$|`U2tSkEQ-TjjxUe4|;wi4&o0mT1menVs>bRGWi(u{> zk5GzTm73fBP#YEu5-9D67v!$$ITcHwdMH1mxM<8(3ige!$iddRL5tj=_GuQZlS}9B zJ<%>|JCj`>g+j$$Ho{)dZ$U7*-P1&`}D{0kJ?kBYVoNJD|PLtNR4>SQZY9%K&ytb>f$D_I2jLSAa;eJKYcE z-uITAYooi0xdkOyXKM2V%7nP(maq-}z%d zG8S5`Np~jttL&tln#^skv`d=3E$7`7c~~kg%ZaG`XjOZzi8U?y!aI)K-|#dBy#{+D z6%d;yxQ`R#4jR|UbVj@j-%GwL3haa19>5?aQzpEces3y?NU5SF2Gk9)+dd(%zN0nU z+h8S{rv_>PbH7`C83tg;i^q{L zg7X!kjUQ;HT=u(jBr~{aGc6dpgZ-dh3LZ;m`t@~(fw|?hsdfpx{}rx?5l(EusNp>X zsu(jXf-y#_siU52tGD6XVJsm^+6Re?<$b#(@sk-Lh*)6ZQ{&e#=WKBsGn;f0&ixpy zFTUlLV>_-5LeGJWe}tY(ala+ivU4lig@Z$b>%Zj5*w4S@&7ps$Y5hwd$>X<>uJ!{` zKHO74X*sFg+$J#iNP6Ls_0 zKt18pJb4=|iu$Hal#3Xs5hVr&9>)TKUAJaL;$dHf5sQrUofP++odgXA+NU$+Q0h2+ zi@BE4X4(*)noz6)NK`2_ymzPP#l$F+vL0Y)O=Hft#f#Ts$AA(-=#klPu$xnLe}LV< zAlOY^2y!E7{1qw1dt?f4SPp)ABz5?N*owD6EqDUaDnP`XT!&I{&5)@#gt#$%@bat> z>zn9D+x2h28$R_&Y%m0-HEJBH@PKW5zC9eBt&}pQ+X&Mq-<~iUa)?EQDWDW<%`nd= z0aQ6?=wl`eJvnIg5eG97?4#xPXcZQtwD0oCNusgdDN6X~nZ}~v=SaIRsyVodBEx~T zuWj218!NOP8IEcb%6Nl#K<{ct-B$O?fqV?H;C29zeduM~;i?R00|M`;VX$NpnIGvQWS7TekW!0mwvMWeF3IyQ%KJ0sY#`QOg;>A6UK zUiwO8&icQsWN7-#HYmweQZp~MEFdOymbyL_=nA-8gZBYL&nDor;4d;+_dYF?_+}f1 z?vCq==YhRsz5EB|4DwZ49aS<{oD7Z*>B#-^RfH{Lo@~bZp zr99vh{M3vD)v1jAA9~@gTpunS2IGv$*PH=+w=}tW?4ZMRR$aji2M#3n z;ve}!upE?OZFT9q+vnf2Nr|LKgK@dFV(E;FtR+7YH$2HpGaf;7H8UoeZ!=A6L^Nky z^T3Li>y%~>GV!h=zLny{M0YY!@0ya)bwZZnZi}|elpCx|5A}|hTt+l9!olEU!Bx!) zWuzk>=%gmDB`;^XEjm5>-li~!SF`w8s%$P7gc(BBzj|IQ6$08yOBHuldjKj3);_e4 z%xV*250Qy-+XDN($GBRYh?oh{%Ds1xvmNgi{{ui;emhflT8tLiRsO_JtV`&W{9zLv z%5VC4tX_9Tuh9a7u2U+a_RcfsA`w&UbD+Sy!+q(O3?A>Ab2KHs3WNC#YywVddaw@x z&Y*?D#<7gnuk2-b9?Q-Ual)zWp9mhl^x$=9<#@v)(VIE~$x^M0IwWP{pdf5K_K^Bn zO=eJ_dYD2c1QZ4e%M$C&<#SGDpjY2nCnZsQm@`B5Zxo(F^BqEhs<2}J<~nGuHu|*7 z&U#lO^wf+-!l&RPI({oNiN75_#(WhZU7Kn=PqzbN2oNU1cJ;+T(*_+bIt!Y< z4&68k$&bV2g#D+=OaAV-4O#T2~_$v8F%3D>{s&&^^#90gWe;+R$?dlU z(Ujiu*`VFJ$#NZ4kz-!IQXkYReyTnLptZloIhT8J!a_2hbTW-(Z%bbc*sN2HV;57% z-Q5u^5&u$QpwNTMnqG}+M0)KQ&Wi9|&P0-OxYpSYFEdYfi>hH~2QPSLz9L@G=Y&U$ z35&&>)A20=Wpl$;qT>g4XRs_@+=qN%8m^NNwv``*gF`4QJY_GkZYuDv!SRDOFde?|LR2;saeYTX6{Cw z+*91s6~%_3oi_V>I}$?W8_&A(=77VFbreOA3r%`}var@X-<)h(u>_z6aH>^RPi>P8 z>~i3Z$yy<7>*ru8UOhHrn)5) zCX5sV5zbLzrZ?vLeMKW3!S+yo`#?#O4z>i2y*H;eos~1za&fokru#UcVteg6Xc=~Y z^%Cl+nG_3pRSr&2wHu4wp1W~0ogGV8Hy_1g`p!#IL918Tvs!6&AG8zHWyX9jCP%Kk zJm#n3n>POPAH&`JbHe6OJ0p}9@>aoe9k6+Y7ay!GI4Gv`XAQar7pO7B;?nncKqEqa=R}j-(L^Aw&1YtJQF4O_A2y)kcS@i5hhv5&0fFbK!*Q z$^Ll(tNK)Zc_7Ri)3d zo!AqVmh)u?hzFBgBq>&SX@z@vK}RSMH~KpRHW3g7(YX{e=Qn?DXfOv339i@$z7^&D z>wE^6jKi)zcaLXo&($mEIfGoViGR7RkrLUy4>%B0{kFuz7A#3QK@J)*Lm0pJ2U&$} z>}A}5P~{9nRe=E-99u>~mYgTpJzu7%DGHjff{NUFygOij>V1)OO=u;Z`E5!(JipW8 zqcsB?PthyovwY8)>(an+yi<0rC)F^NnUD>-{WJ&{Uoe>k{_FkBGVWTpRGgyZlMFh& z5of@<-cY~j;S9k{7M>)GFg2F-?aEXSrijRSn>y+zd z7N6-Dkepe9+ci)vIoXA+R^{%RC#uhScuFJj@==9N;xz`P0RM2NT5@iQ4$X11&dqr? zVebX=3Bj|SBQX9xI}MMl4QLZE|2$4NknX9{-!?aFmpZ3BEk10bZ{_1CirvUw8YHJLwos!d zqD9Aw^vbZqxA_jVBDh)P7Vo{A><4D=H*|dF7uHW3th`7N_mYYS2@;RleMtLxRdGMVX#Tl4 zD0;a=Z9l#6aQy44jYj)IOuSJox&dM6!NmVTPVVVP?2^3 zw;S~n-y4rRvotK~%o+VShcp{$fWYo^-2wRx;#ha8u3Dvbt`wY(;}pfP*Z4hWG75}-Xr=17{At?NUnY)Q7HSI*Tq{c6aO^CNDr zjfz?knE5&&x`xdigWbWtO_tbl7Yn?VLInf%2@d9y>85K^SA9nWY7QW}s4`#h8;>lI^k=%p`vp+&dw# z_+e-u%;VvuIhYClLtRIX5m&aO`laS3N%ImQFE}&YMdTZb1#iIN^JBTjOYeW;bCi6e zgto{8lEp!DEWHkzxhLx(;`x2I-&;?|1pXL7IA`&6s|hdd&8EeUsE0IZtq-&#H$RKg zVl)K<_9oGp-|}RZ4N5Er?&-Wf5I~UvS4rj4J-s5^=N57!s}%9uUzL?FLX(TsRE5jq z=vi8d%Iy##(0DM_7xDNXEPyu;EyGZIYYWTIe~9b~Gc?)2#ELS&Hbf7PR4rHDj|jxr zB#b7KS|DO*2qp>?G7o1uvs+>$#MH|!P8Z47XqQQrZy$`gC2jO@g$HmUHA@owbi=dz z3Fr)BL1$9d1__62R;SeXD>wf!1K)rn3jiCDl3T(~ZTKU92YoPVo;1cB=Fq*&wHcy4 zr*aWYFR8h=g9chHci3&ZtFc&9RC~h)i&jtO`=JN9g<)vZs5PPqRdCOikB`X3X?1(8 zA~=Yy{G)reg6r(92YnSf$$Fkv3O$taZ1?(clyNo$oxa>qi`qB-bv9*?gxR{E@+=o2 z7Ms+@J9}P8;rl3Pesx^vM@yXxut8}Fn)9By6SJ4IGB0mm8rTP^lMW|E6bQ@>(v7b8 zD(_*&@>e^bOZMz$=2&z-jtaHw0+neIJ`viKp4-nlg@F#EE@7nxAkiYLk+UDEuzYLd z(LmvN&49JPi76uG^PZ_G5nXN+FdwN$ZP>5|1l+(WOr*OP+tG%e^zDM|Gj zZ`UXhgmZ3SxRhPd2bvUHbzcCY82h|6{H8yMbbW*Kr3MhPf25sF>;8?7HEf^9(#V>SQ)RI`DRy9&!e7S zVS%$t#<6wGL@u-xv-U1WyPHm9F}N;$ePjb_$b#ls(=)MEAG*HT8UAmBJRmKwQ?pW? zt71>zJpK1UUO+7Pp2UeKIsJ2xL;WIsMpI**8b-^Nmmve(NVazpteocL-GlSdUVF>2 zd<3fpf>OkNMn^t`;wbHW}67tQzObEcC>E9lV`V zy?N;@Ff=BcS?K9fG5`d}vUiEsrGhoZUlg{VKR+oyoF|ic&yOC9K*E7EDTOWd3kDPb zozq?#WO`Y=Ab?DUzEE@a-Mqa-Crrnwc}3<}+@OFdJ$JTa?g-yr&sMCwj(PUnV`$`a6>skc=fimcg4 z8C*55H_Cb!B(6M{%LM1Odx+E%iU@a3$#h~^*PMy;QmE+Qx&#C_&SP)ud^%=G9K0TQ z2l8jctQCf$o*mmOFg1#b^y!)UxV8#lBd4Nb7hqC5J$Dk;arGI^co3Tne|E=gZ~H1_ zkl!2z&`P+@L7HM`b@_Y*r*>zTwSu8eI$1{!3rPMwUQA2r&73qy2IHpo{o=I9*) zw=q+FqftS|(vc}P|ht^Ei+p(_$+e*X|_#C=vfBs*vd*Fpf}AylYnfWqfHEmwSW@+rm=>0 zmc4&%?V6pLqZ)n~x3I(EM(4A?D8Iy2>uj|~IL4Mu z4p>M*FNNx~j7-RiwwET;O?HY3U~#)>_0H+mO$UwXM9zf|dw1s6V9ceJy~X>tW4Kdup{{UR@bok7AMnh#!Hvb#ME zYt!hPcy}~;=4oGr_fl4~z`Jp`sOdw^;U1eL5&vIWl^lIOizvvq2M0q@} z^%@4v7%ur467P-5#7~FH7kW%@aPq%z*3h*op4FTZrr3yY)m#rbTR;EB1JTXNKiFh% zlx zO*D6tGi?j7!H-epHfeIUjuLuHFV;FdL~+J@=N{4%_NGI?9rpMf=quSG&2s7*cx6{5K zJR6@0f1Ibo2)9JsZ0Tl(a&*K^)VybCSx%XB2tYJpD)yfs#<)@z8RbMXET-#t%5Tn-H5>ITN!v8DiACc`8-bQ&``HEoB59nR1ZG|?Z3*Ij?ZbP2vtmq z%kNB*tTyW0dRk8W*t1NJ-%0n9_k2spF|IP~O!3|NMbnbc0!Qwc^xx$w7zWz@j}#}# zqU+8X0C~A7&`F-Heu#E4{@W?8)hxGGrP0pd|E z1*A4w3rxkszs12AL@Z! zGVV(kyumNWANBgKT)K?jKa&LawoZQXbLLifdlJ~8pC3C+px|V^aQs&}H3-3SuMYxP z;VB>d-p~5;@;8$zK~DiwDCX1*Poq%!ui@cMdhQ;1{2^llh)MPM6f{1LI2w@tn~vvS zw3@f<05?P7vLN>_eS-ffO68X2HS+)Tw|{tt|Nc)3768@w`fmNfe?8#eJ;|T#Gk>~^ zdgirXxgh`a+h3XJ|LGy{!LxS%03r|2GZ)xsCoB`vnc0|NWQsdHC9Q9KHZ3 z$kb0&n{^~w0xeE@RXZ8YtzwuJ| zR{4KKR{YDi=ok;S))A%aOs_txgH8P|Y_IC_kxWi-I~oJYEEDIRe`c5d0XPjUT)@w} z&y@gqYc_|mV*DU-@6ot_;Sufc5AFT-klO?4S7Xpedm3;Ezh{}klAnL|UU}ZQK)SMY zuFSi*)~&Z*Pw(izq56yX!j449u)he@4i~`tl^#(L6dkgiox(kIhyL~P56g}b@ejf#j`+#%; zWL!0}v^vQ9`jX<-!cfMOgIn*s?J15p1Rh!pR(R1+By1Yz`qT+h;g`qLTw~fxOOw+O{UZL+gJ~K z#?K0m0|ov37VRQPOAbKX?=ud%(l#3;?rE9+qr#cf8z3N^+iD*JJ!J<#sWqnD?rnK8 zDj{Sb5?6lt8h%etvD&Rb*Aq2sb&*(vPi`ytupd-m7_#2?wETm5Ro(uIon739%a(xa zN05Q8Zfwram_-M%dCEQw3prV_p7p>0oTw*w=RNgV;kS3B?B;cL zo^c$=7sf2)|5{G(D1NLwheOx%Y-^CM9l`;e6 zX!wb3L7%f8G0?Vw4>1C6G)tvt5@`+LDI8#xa_H}sp zNAk)>bcp4sAt-in}t^^a1snAi!Ba{>Rt?cOYB&?&*> zAe*Y4&ObxBanf+T0Z#A?+WFd&P{92@1=>JsRVS8Fyk|$pu9gCq6rm1>l5~$mJE4fOP;D(k5WE_a7HDK}#CTL{T8A2W^G@ekPpw z%uD&SW6a0KlnYirn1A}lwwVG3g-0%)pOP96lwE`!<2^}7!kERSZ zcfRXdpIZvr#UG(FOr@0VcM2;$t#%=M)gqhu6ED&(fV@edx!p#g?Y1QW_u}qVexR}B zS>)`YGiRzGZp4Ee94M7-Rpld^yiYLnw>UG?&_!u0IOAMeKgQkSGwR-WTjv^qH^ABJ z+!1Valat{-#+8&RG`75xu~6+nJ)6I#_5av=&#)%5cKv%C92=HVL_kEWbU~0_9Z(UZ zNbevZBE1<(DAAFkpddmB9gz}x?=30V&Ik==F;W^pUh|1TXw6+;3o9MZQqUnQrq*ptu`%qdHlxLNW-FMgV5vuvnUs*3-_{uvgqojkv$t5>iIpCu&FT}Nef-XCf@t?u6fjHp3{hTOwrv`@ zS{JS}+|JIMwUSLfqgB@m+p-|2$~GulwwXbn)jIT75{*(%19gnk)XOqrvDrPK&$d^4 z_FQ&cXd4G&dg7-&fW4NX%nPsTfnMA$BbR9}lT2PkCqU|pq&OiJFkq{S4*9CNRbDt0gs)To51UA;0%a3>84{$#w zlaG&YdqH{jnKc&(4v#byqOgAD(R?=tBS$<)>RoA-kI%W$O0H)JlUuYcWp(aT5zx1f=IH7@S_I)eTx$_6=cD|fFx?D=levkp9Fmd(qn^b*9f~I@Kg-J zNw7L~`O}JFV0ErwA~7P_O*q}zf>JAvmUJ;%*U^RxE3d^NzB=+R?kx?ISxYEHXol91 z>k++HQ!j~~`iyNbk-oJKq)HY3EGt&_2SnwHI)BV=)top3EK1Pboi1|3qsgqa&FDCL zOxSpnw8NGhIZ~zHE{*75xZ)bza_3aL)|9?(c_LM{7mmL$>}}k5-^xqtqguijX|pLO z8O(K;953bw{iZ3^c!dB=LouqlAD=b>-E(nEs%`zuaBYy3=}OhjfW@sY2i2zpuXHJF zkJJ^*_r=QH<$_O%~3N4dkw(1evavAG*FkP;8kK*(9 zR#W(aetsnXbHY@mu$(-Z_}Hr>`t10AA-Mw!q2C_!i?9J^Xf1)cqCJr4S_I{y`Pc*kaavJO62m zPZ4qP3G@X_FU`~s_2r>r8&|A+u+;Z<`_HkGV-Amt@cTcHI}*;97IKm}PrrsaM{wnQ zuGOqHswTP8qn64pD>A%ggR2~}wlU0MJhyc5q$Sh^7)_Lmk6x#M>LWU&bXBp;Jt6~) zJ{%VY1(al4NxEJq;cd$iNKvyBKDR#`s~l?*Eo*Ri6PF3ffu#Kd%VW8oW?;u3dmr)g zHS2wAWh-THwkiHMMx-!tlWv?DzsD2e=BVJ{~C4Sh!S zI)BcVOl^+e!j7smy%EgaG$hzC&N6ss8C$lexJUfpy)vPAVSzr?$z5{lbI7%H(^WK?nCzcBKeM!fSq#-yKa2`2eiu}K|K{&rPA=*lRm-LmtfF#i~kF}`>zMt2oZ zVdTjpg^`yC9S1*bVy)7*J+$1nM@?;xbEw(XbLTzYwBIIy}+dN&{I06Gssd=`IxuGK@wV|NqKN3+UQLt{<)3{lOY{7;K@@Y-o-N}*4IbW8+ zaH`f{6W#^=Ld>jwG|`ZjC6aQ97S65ep?5VV9vvOmv6j4Rx@e<+jYh?wn%&3l=0yc$ z^SS3t-DLEyt=3;}o{f^@!XhAoFMMS>ir%rMBX*cRscV-Q}&F6hAHplII(UF z`~&~)lR7Hheru3p{L^AdL+%1^_QArn7L&$`5vzCdvW!x=AVDi|L2`6k zayHA9BvZOIQ0{0rS8x82t@5Ry&Ye8U>+3PmUJrphNrpB=_7YXKNfUJBEUz1~d3w@_ zwK+Q?yh_^%n@tQdHA$&`QD~m=9wiQVGx)~ogeF082L4i zncKbnGFa_2o`yyVDB>?guI$HL=TYbG{Ci`xIXO(wtH*hT_6e#l(|r@YoGf^JfaDlb z0BIwZBNeM{SE9{mC&bJLSi_A#6}bFZSjN_bvT{fe5u`sjXp`4X{tPLdja_jMa28xGLdZqnsx-mEG>K z2?1y?w|zIA)aS85{eJNIEJRo-UzxP|3Xtkm*8?^zXO+;wya-W0y&IAlHLJZ*UtA6K zLM@EQ=hRNctS0aBGt)z!fC9^6Y7FPADFRMoG@=Be@x`#%Y~aS#Q5 zpnCwOd+)YQEvQQmml&3FF3Ma*?}}9<_-X8tYq(R$YQR~N_7{eb^{x(IB>oDdpJYV0Z1w)rsX^<$3MSrpdINcy!7fp zAXhmyWbTSM??FBomOgx?%`Io@_GTfW@zYW)|9oSZxXl=e%~JVwk4@logvzDy91O(R zeq+T;@-$%O<~KXFl+eO&V|7USx6k?imR0}d>tbsUwlL)VhoUf3^UD6$>5-J!=O`z5 zp^DF19BoQu1Arb&zsY$<&5OS;7CXJ*=wv)pX0dRoZFk|8@>+|&-?z!CDetpZ3;Pd< z%HT^eqBc7Zp!JPKuX{CkPfGfq`cz~suh4W%LQp@j=A^{F_R_6VFQW|`|F^$z9Sj`4 zrXL`YP74C&{No$PBmGX0oGhj$1{STYjp8b|BB$I+u~sPdZtk3V^DkMTFIM*iPZ=IEf1P7zK~QfqB^=T} zx}S`~qM3Dnl|HVbc%-M~S{yH0F9SQb!He#zKCo)%{^#ycOy%U2DBc;ar8*%IO{RLK zL!y0A%K=7=MvtI$>+;Ygw;2BqRjS_8et%EJ?u=f%?9(pb@r#vgHrNq{Z`o2`s{hsm zG#4U9w>KvDwr29ogQ8O6I1>-Ok5dg@aMKl$;CKuSt(fKDuk++N4!YNF110zbYxqnU zQVBrH**%@u&~VcPJk6|DYT!DTjd6H3=bn-7v7}YC)-KkyAhLpKNT9 z%FlV00A4j!)+pON8GvUnES=AdJ0HA|)d#wc5Lhpa=eu)l($@5c8@_^f&T+Uv4Bta` zR%6|l;UUIXIm4C;fkEQ~-h3x6fah~5umL0Ok)!siQHu22H#lW*!We6A(=M=fag{~VFAWBPJrbucM|30T z_EZ#>O%c)AnJJ>n0DLBNkgMHyIxMDDO$cu~nY;bWm38-Pt_dr{8r1Ru6UXxQ)r$g^ zrK*X(&^eU%Ot0UFf#!1^xzW~yv0qBumQdH5&)f77H;QHpe&O7?z{FF+oHhFi3mpkou)?Pb zEq6WTmG|fDltEidtW?hF8ku&Ec=pgqGX-`PYkPFv<2GBg*IN-eveIDFRK-?*t$RRG zL*MA)*7EvdV{)K5y4i%0kh+|-QZ>X8(klM_C~djud`ne?-E_@Qr;(afDTEFS6ke&) zDQ_ZB$bJC~ic?c^jFs68@yklwf+Mi6`LVZlXgOqKjj&3o?V7!CjchB@ejs?H+wi=M zA)!sUPcV41#VThjfd0j8`mV)lO6juF;~cBpm2(9R>L<<VkN z1+c~YYvAG(=90CK8V!pcl>bkwOEnJ2NIlOyU%Mpj;@p9DTfJK{GkT+`SvvM#ibQMc zNy)mYif9xd?nQwIz-tTki7n%c?OKk1ias(y;gb~rF%nyw^rGZVsKXQM1JrL&xE#?3ME zw$LB6Pt=ArBOf2{FTkI7{YADjf%P``@Le8*M$ktrt~vws`c9P83;ZmGaOdu@uIgTX zF#NF4&p=xqHNC;R+!ULmXabENg5Q+;Z@@up^LX&*UR&AANA;$kjhnm|Ih8e7u-~l> zqm_mJq$Wu{4PVG^1q#3B&DHwTrsMZjB&svrIIMIe394 zGOs`4i~S0WHw=>=TDn?_;YK--`47E1Az`ch;s}!U-U6W*V82+9@fEmJf~gG8s%`;> zO^Ea#72pdvJh_cR&{0Kqwm8%n-p2XHb;e1Vv|PbM;pY(!io(vLVG2RuB;|@6mAv<6 zGVA8+kS|`lmdn2Y`9EC51-BPt{lVN4_RRF+h^H=7W%Q8lID?yHT*e4+y}bem>E&W* z4_;Z=Q+*2+{$j!Rxw@M=MnN}p+m5uyGVrzQy>@webj3RS;DMKVd%ZOY3k|WrrtovP zM@CP>3F{Yw>i4gTv9;HwgB8eg2}pcZVFIrr*0fVjJ6+Vbaw+hJ7T=^;K8n?v?l6`+ z`jCM?Q2Wwh!FHnw$GMd2Z!wZvE#;gS6-Af1q5o~I$-G@)5#CN#!WH3#Z?!ju={~M* z(?j#gnbgbpe1eX;o6M01^|7dk%-i|6j&;EY*TGTe-rZFc=4qHzv}2iQ#O3eWA~xJx zg($zZ;# zru);vytcmI%_g_;V1v4UQbI5aMz4xRB@FX9QsaU@@d;YAl~A$PLg?6XgnO#3$0Amj z=;JdO@cM+gKRl|f`yb}-o0o6;cx1I64Q2W19!m3US?N@#`)Vhbbu^6~5!g`GJ?HDY zP|$Ct+czrWqMHtD*$E&3ks6!S6hQ1Vmn`QkCEvu&gFVD_vC&+gxi^7jo8e}dXDUCG zTMXT0&f6KRy-iF#(vH$gjbky7JN{lVYf)Sm&M~UWAn6~;ZKWD5)I`?{v^Lee%#OmS zrwa7BsXyjdJYJbQO*e6+jq9C;5^``PI?9_2MP}E?n^MjF-!%YjIy{^fnR$O?=#n1jFGr?g(`pEhtO>fU~HoJ%eLHf2K=xZSr+`-O=(y znl_)Ew@&j32|*O%8vm-xSh^MIlE>oe$Z9(&!_do|wBMBExn`rFQ-}j6nny9B9e%3L zrEvk?QqslVL)93SabBng)@d%=k*w(r9?~Q~)`xvyREGP0s%^v>x|ViO{m^1akYRr* z?ND)Gt%>-1p&MR>4iguk#bx=^NF$U+b3IdaweJd^I2B{JGc&UVH3(;#^h$=@&J65C z!9uwsy}+<_=Y*QgNSz{Ds#tA)$KMS5zCn@N;0;OLxLk^Uxv_>#w_dGH(#gNI!z6)&BO`$tilwEG@t5kRvEFOVL-zzPNTbc$az>E_xLeX+ zv-FHjZJNgCy$L3&v{_jfRc5o%v;8}<^FThk4kpOE)D~tYv#xQRO#d(p(Gq6b?}L7x zknWMZc+;5x5*UydFM7K+=X5RBX#`rTgIobtO zC^V!&*T5@dN?CE%=0uv@s1hwxs~NgqUJt|R-FNaq>6{$%BdSMMdNcyucT-@TzpF3l zD@FpGVkc!`&*PApf2`^#P*RnnZ=uG^>n8Z@%F95vsnjd9SjcWVx;aesg(L}hx|vM7 zi5S6#jr;{QQ~2+kSw0*CcV8@!jh4aL6D|Y2#H<88#X_lrqAHU`e6+PDac)_QuzAZGCFFhuHo2M?k!_qdZ7@w9 zO7{m6fWW!j{W21a*q{Bly@KY9b5~v zh~r8mMisfCGvTh;?Tc2%%TQm6mD*-78YhOg#ib7?=a!I8N_wXzUam;ZbPJ%=YZ}U&L!FVfVadyrRjLo{El)4@d94h0 z@W|Fm9=WzsbUtpU+nnMP7i=A$pS3lDe$eRMRL<8-LtmbFkT7$F6eN`pjT*}LY>Fb? zw_r&#rrd|TlwC7TxCI$?C32~qw@ZiSs+-cy8oZU(*0P68Z4bpb$o>K*y{3vFPD-O6s zl`3A>$QS#)>O+QJwwP~s`L;5f>Y(#SfU?{50+D&do-IYv@IyiPJ5 z5%;rvi?2PKntbAR|h3G%P!Vd}(V!pa^CLI_SqdLo(Hmqepn#vypZwZUkYc$|vB|YDVPf^e4ON_Fl)$I;q$Wgcq_dEp%4e zFbcGwhLbaE+Zgv{2cIqu8akHcuBo@%YKAd7WMrmQPW7&D(=vgd zcOhOIHBOM)uPV8EcTT+}QAl@4Mdw=Y7MdJZFJNoKGIVCJVO<5MJ+Gmw+2& z;jHD{4{+G9Ra?eS!mhfYk1d%?9om4{xGyxQ_dBwk@U-d7=w4o=^_{Qn~<8WjZW0_DSP3#(T9Cd{*Unu7LeqKQloeS52$Q&)YcdV zBUfinFVkiaxh#OFEI9BQ9W2hcK@8@4NIp@zTd4g6OTQB(eu}s>P*~Ei&HUr~g1(eI z!f9Hb6*if{`o^7b#AdT_$xPek%iRja&V$L#j|?SY05GEPUNUSrZEA$;NPB*bF?CTT zLw|x!P1F_hqZY>c1!e2D3)p3fe_NSYGFT(ZtGxBmQSsM3-GRQfgn~75Xa48if zqpQ}9gFfJDy~z8tSl0&lY6f0;ZnnuH&XRXtYwz6{zLwAh;EHx%cu)Z~uigkTtnJN7)22(W z%5ku_72Q-N+-v;GFn*?GiIQl}1B6p^nWka58F_KF?Jh;p=78+h+dHMhcqv=)&{XpN zHe1wC)*m=tn}K=0BYZ|bmP=;WU&|#-b!6szKb`ol9PuFR{ZUPMuZ~J^4DDXk8|YHz zzJdO}Vp_7Y7DJ9$jyi_XQ}f`eeX7;ejANa*FpgU;6Uzjlge!BF!@iQB>0zE5%hljb zKE-H*LI`R6KC=Q4c~O7%sjHd|EBAz_k4N#9@RJ+Bf(=|duYtics!dsV-gGO{q-9); z>jXT;5r2VYep1#V4;9m8Eiaowm_gsNTD_Y3!4LQsj>8hjLYMyFQpD(crP~|1B6=@u zzVAy&VPA25xom%OvEGR>yV%a$xc51D(Yja(Tcl?$9G2SI+Z2-bL3R1_2v{m{&{C<3 zg{@*QkoiUXO{bqUMljRQVSyqc#{VWeLBgu8q_pJfkJ#XnnePQ1FeH$z`g)tJ`ImgF z?~Uck1JP3`Tf&DL*ivqW;z#LS-LS7s`#($iwt&W<*t;OemB?{T6uSe`2gvl|<@?QB z1AiSXt6Gu*-;^?Y4?aJok2r@>OwpL%!<|TITg{+^*T)c==Bc^74~0DE1Wl(m?a8Ow z^Iv?hLs%X9@T^A-wh5L5?X3+_b@T0!^(oNg*h3cQg+dsP z2l*SDi`>dy-Fr7ZTW3KNgMXF&PJ+ElC1HGU@f{CL#|2|Zer+JtF&V>ic|-8!CW%=0 zt6hV)J)r_uexz4mza4DUGZ0OP0)_7 zBG^n~c13dwFt32hivM0u5U@yFH;sf@)GOIr(&4a-r|xj(hx2h_Fstxn=S5_c7ZJYo{g#*m%-)m7DI&ojM7Du8;6?Q zD)}!(&r<7RXZHj&580ZdgI!yChH?rsZ=03#;<9enPbDX+QmVg~W95jQ7BzB9QP%r7 zE8cnC9v5C{JXRF4fQoq$lwxm$n=wi1|Eq5fu65+qFo4}sxo;9@f-HZrWnDafktG&} z4kx`PfElgFhF4-Yk6)=vW3uQ9)gt#9*XHyyB^D5%nJ9(FI8-J4Bu%{k0H{70Y z5`fr-@`3mc`Luj9)^*ST`Y%hP5`K$^AVBXL0trs7Ju@R6Zo2dJn!H3h|`d6PdWiDcc@+9mTI(JpK{7bSgv?pu*J#6R40a!8GqT!ysz+#AX6u-g{|AM za@ih~ll4wT>Ig5>&uLzgSS)sG(GB*!r7+`=VjJrh%}f`;o(}$MP@_SC!uRYzSD-M({@nrQa~NLBv;hsf>v+0R)Y>|`rHQp|Nz3P5&oa_6kTyKrVZ z0kcDt*j8G}EE%e;?A1X@ejLw1e?r`F6h7s}s_3+mMVp%A3w6Y$>A+MgSm=Rz;UaV?ibRYo>w4feijwFCmVt zRY7xP1jm-w_Mh*xMVIjRUhoVWrS{e=<2EF)k6-4NmC+7X;VIVzreTal%G!g z^4BqG9hdaX%RAR5IYnD9E-w-FVYLkEV&!e>*!LdQN!i8#w+N|2eQt8ekn>k1)T{(( z?yfh!JX}mLVQUjVRqPneoUNw_gY6!5T(!-9SRl=PXn6M-1|MjYvxUg)FDSbek6u=C z*y;F}R~;I0JqpRGg0j_Ob;ZFo+6!gmFHT!iJebxgKoFUqhI%IPSV-j+ze3Rtw$Jw3 zJgWN?#UG29GS)9B#x-gc7sd6oVRqm-?Em_%<1X}fA^)uX!&Fa=hRFby2MI?V7P@E~ zCck_tv@gCwsV=*|1{%Q}K?iBmfzLD1Ui<6Vmn$p7t6sgY1fXo(SLcfbLx#NJzgTlrQEBAjug+xe_X6w zwc2@5DeWE|58h!UXrVJujMnKxUP4yvgb_!@Gr&zof7eQW` zsnByLHcC$B^VR?$^k2{1d@p!{f)Cxm^YS!?Q$~w?nBnaZG%*|XDa#^1 zG}zpJQ7^kXEluA%x~BHUWQx{YwyKm#peEHDtFEVDL-IeEk?$VP$Q*56LnF@=rDL?; zuXORNefbEL|2`b{>a2t=D#lzAs0VL!EI6;Q794DU*EI$;_Le^3s?uCz4zt>-6!koNM8rZW`C^Z#x5l_xUcXymN2aC^S^x5^=oq6XR4DX^;} z{_G(k&b%(PH?pw2wYL$B?t=mLSEL7*+a_m718|A#XHOBO;-IG2T0&AF+UoC1AP;9G z_ZJCr&n$+prTk|b2^_zy3Cozg65#2)&WyL;5CUTlF!y8bwqN^b+$g}16<&)hr=UY5 zL{EdOFK1k1m<_yPQPU7^(g=yuf`Z@v{)@@f7S3o0U&XBa-l*LL8nv77jJDF^$p&V6 z8EG|4`N#D)FWu^|B>7??ua}KZ};y?D|BlT;)tENVZhdk;$8?7~zP# zxV?yMB2CQ&IO(W)OfYy67Zd$I)mT5cWa|;fC7riu%ESS3CFDvu`fU5gXe*cj z)FJFVylrsOt^Z*)ctMgf-=lx625`ES3>Aym+B5(iTHf=ZGnLeE$6QZkmyt>U|B~Ho zP`>gpNXp~As4Si@?i*+mZ4%OQP7HZVnSZSIovwwsA1fD6lE{jIF;ni*t9sOI#L>c} z(MV9L$Mr@*J+DDR&4g!jWA8up$W^!RygYz-LvuX;g6ayGV~R)909_!oj z*NXXOc0zB|Pq$3}HAA~FCiQ(@ECGz(5$CiT9P&+TeOwAT&*OvAB6U+IDO0OJM^q~{ z-u4Ked+=wGh(aI7m6?v~Ej2kekydr?7Ko^QOUEROc8pc*Hk$lB{LNTAzPUP_bG%k0^E$aAwPv%jm+LQlf2J)cw5^dPqsl#IJfkJJMO zov)Yd+FFh^X318<8-4~83kN)M4K3?yu~dV0^35dIn{+GTafAYQk83+MW*6l zP6#fx+12y+Rx>p27R^)11?NZse)4BI`0RKlqWV$^U^L z8EQ_yaigjNz!Ya;VA8d2R_g2Pl2^2sKcu2xRCCKGxRDVm^0JQ)gHCyb*18F)cb?ldT(OtpgXHEUU45nYZMR?*6Im%MS=;f=clu z(3M&xRwB0R5yezlZxz{A>ob*Gae0|{I-Ez|>vZ5)r(gDOOc0o#?78JFyRZDZU>BB~ zk7BPTJ^UtyM&;Qj^gL!|)B#(C!WWf{X4%_>Ag8S-%2o^02fB**TIh3W?2Qm+(lAtm zy?)_O%%sEOp$O8d7Twm=`~<)vrCbjf_-!vIN!X^UhrZ{*_HwfqvYxp%_MpB5ap4K9 zsjJiNcu79|_i|hwO|YgA8yD@B5iFcu3OG^v?rK^Y4WHH=P5zu~(D(QcA;2Y94RtPv zC~9XhVgzNAM(%(kM&su>t^pu%&b6r?vKk+m=hPt6ryshf>9Ey_`g}+r1N8E*o_#KGg97XZ^*kGiNsLw24wfZ$dT_>WD{KPT6xb1|A1waM zniLIf7qRt7iphuf3YFG^K+&far)4Zv{%1C0!Q2N`UUm~GP9jp4xOqE=1(R&5Tmqo&MC5j)9Q zDIi6SAD6Hyp#Vm~@LFzmb(YT zodpvF_J7A&wyk(|^hOlUQV^`|PWy#jh&%lea-Q#AWNy!JVa!|XNQ~+%h7O7yt#=n- z2;Yqu6zfElm408Xa&rOEl8*>0Vv(sj=jz&4m2`=MeXG>sIB|@%>(xsSoHJmi@wU|B zKi6s5vngv^gOnCxl9jrI5gl5nw{Ge-d51_3aL+v|+SsBCI-Ps@u0FW{2EdsIxwG!S zvs^GnH8hYnp}2FJ)SZe4z%+UgkK2s|3Omm;rz-c^nClma(e={tJ&*PBtGsud4f`it zG3h#>{9|t?b6>fm+5>p`tuvhE+&BI5ETEI{RXw|2fewVOMU{`l}Luw|1t_%BN6_ez`}x01z#-yz}K%iW53m zzw8A>1S!kVVE_B+`Hogm2BwapiRiBZI`ru0W>)mBqL7Z*UUNVJf(#B-Ls_L?2CW6r zYHnw70x{+&MEOZU>D-STB=ADKQwUnNx16_Svfpry) zajogk_&slS5on&W=X=GWi5?r4^tr0LZMxcY<>l{8)aEe zCb)B1d;cb+O`?niy1W{hFW7(5emnwGdvaBNUi1rOPm`x0H#BC?cW(hBA$kbYoZY_w zP1eqMj$fZ<ib%sOj-UL45DH~FyQ{4O&&idNDtOW@o) zb(5{M#F8j|_CrK=&d|*SBWV}LpMXi2v9Ut2_s+MqUG-pkb@;=p{fqXW!JSZbTJ4^{ zrwJ>0|MA@qK&tTJiorLoALc-T%$`|gjPPUvFQ=Zxm~MG3(6%WU0&Uxk zJ_8r-IWxpsXhzgV?+~7!oAK3IP3b}pxE#tR+Je!))=wmzu+xL$5mJ%CxaO(R2_RM4 zyWCB&_L+XKacHW54<)`fj%%w^6Iz-n9aWI&4oZ(1l{;Sc;Bc+ka>g{Igrm6Bs|BQj<7bg_s9YEurN@@n7FL2ht}$O;CIkS$eHP%T#sQH5OsRIdsQh9M z6;Yt+@}@2}rc~~D-Dp6WNwbk)o8QN{XTv*q9prKmm&p+=#Nq9;Yc^=FWFK)^d?}f~ z8+QX7)4ke|%+46xw`g=9`s-zed4Ez!33$=$0nXs^^*+AxobHn|N&KJGuPH_5kS5m;OKSc=Ygoeo?>SiLbnX@p`lSl$lA& z%szK#~w;^ zuj(FHwQqsi1@X-e7V{dnRBNw3TS@#rIK_}n%E^$M5!r&X@@mc8bF(;I)z@kBc)tFo zRoIvM9*YQ$$a18CjJ<4P7fZ!8ZR>K20OrzSmH?%6(X6@UnRc+`kfzVV&Q5~j(QdF5 zsc{&5RaP654zeC6v%c_lYGL@n29hb@zRhg+^Mq*om0_@T5;d z&Sd)g$m02WZ+E;QSL0=e*dc!Pve_^c=~S4)B@n6A_RTB+r$p0PC<9^Q>X`tGpxlCA zsHd)e=Zv-#1$JW#;I)Id1plzu>BtvRU2gi5GI~LKP;Qc4TE0xn8OrO~P7sv769|m| z8?X^M;K++;0sV2qFQjAqm`wdqj#JKjj`U4x!7`1@)|=kRmsdZ6AC)mZ-H`_duU{(f z2fT~*?s_l@ja(Dm0V%=1g(H?T(1Ux=5kVeSw?RTbJ-Om)vAFrT=VXB z9z86Q4m|6D?tFh^LY3>LZoitDU1XS$WR`=s}RI=9TyMXQh5uAh;5=sR57i*Xc5{hz`C36jBU3> zvUd;X1!`r=cCjB1GpYymKWET=fOTMV#EkF9VKo7GOGAGW}mL7DfvXKlO2^`a3HFDxns^xNIOfsO1x*ZS_V<6`^e^f5xxs+HK>BlDgs zu}{I2X@9!_yJ}c^lhlt@IU8rxteD$hSu$0T>P$q30uu%gNX@HSO$KW5a#?De6J47J zRSEhzBIqQNQ?{B_H#q1Qc>clk-u!O9uyDrFuO47nLl{yY6EqE6ij?lYdTkORGX_;u zD7{SKLt>afuw8A`3`YlJ`e7dF)v>r9r090@fz9G)N+~tki2|~6K9wuc27yjB(mfFq zNHUwqCz3_!&wq?9?8IxHF65hpVic4BDjwY3L|aPh#*2JWiQj%nq7S^(7jo{S9C!Q~ zGi$+rS<3o=V2;bTtD-R?Sey@+U5JktpoyNkeD39M@ns}i8)wc~ma1;%Kv4lyO$JA! zdQr=P;LP5d`q*E($baQ+%R}Q&HCE9Aa$Ci9O0rJ;4Pnf9$*aiWq6P8vBF?KNg05P1 zQjV8K5#vO!N!h+4bd9?H2X*?5pamduUFN;o5J(C&(OcUF_yGCDdFe*uiL`B{j%NqZ zB0KrG(g}$TCeYbM9Q8A1wB338`?=VX>X2v2|5Ga4|`D48*qUw zrR}bKPMqz{@z;dimk+8aoO*dKE_2Cp`(ldW1YcflFGV*NoOv%b6P`hLyu-DR4_J}% zv_zSA+CY+l!z!>zNp8ixs~q7lq>BN+)lCV~R};O2Gdp}f8t1t-tc#SzPX*NINFZKE zsY$+XEhfvykZJ*^^c;RM$%v?ein2cCsk^cw z*}M20yX;GQA|#@Sfxo!}g{jALu7+=Erx-TzHJjE8z({CbQwiO!0-ISAimf}S_lX;_ zprMqXxOzOaUD5Uv(Z>4wX?gxU8=8Gf>6#gjYT+3GcVCU-*U?j%_FJ%w8_x|9~WjWj#zLie7W3 zi*tSkai1p`(ILOAGpp%kyo2`UD#_)?ki>+^>Pd6a34qwCo_um%aY4L8RPorwBXj)m zjAD?B6xNN01GGT6Sk`T%3J~yO6PM}li{MB0w27_S|4K6sn`66Up=y8$+yG|&K?%oY zbg4J+{^&sqs|bHa4BP@h-)|e%_TZ)qb;0l3MX)-<%l5xWn{r zvzfl6OIAsRecwr@-y)TDH`TSbk(4$Ra5!N^FPQH9$zSbIt;-budHU|dhi;e$l6Fq2 ziV}x+k3Zt?Q5r&wtP9yf6sH>F6I(Yv_xiPe72|*LmC!`(5v>lXkCyV%z=?fH5y+BV z+x@ocj~wsxsdIcgUaWPm9NLLnLB~ytZh2s6%(7Y~*O=9QCNt}ckp<4~t6a7TGhVE+ zADn-49K3=X>9xwasPoO_QTI8ekt}HuMI4uXwIHd zB=cU(dct?Tz-=WuI(*}WQ|SHDa=3#YV?^C6#Yxp^zcgwwsOP#x^kLiTWx_&_ygSz{ zQp)ynvg=Ojt=&zzUgoHn#>B%gr&^uzvXLm*tZi2oNQ9u@giXoecKSrJES>|=byceK z#h`nYQ^~|Yi)YZ4&EgVz0c$G5IsG@v@iJ;(U!wi6_0Mr7zb1?BR&US0y^I2qfzKcl zuf3N+FyTnLrQ&xKv|b)+{_&9Q@CT|%Qj6$g^hxWt6)rD8GO@s;5Uw&Y!pE{-nE>Cl z7;f)y_I8Zm!v0I|F5dq!7XInc(_hVzYxJi-&0T~XP5C+x;bA@d-z@&nL;P3l1 zC&Ys1u4DoB>i*t5^M-x9_KlqJ{wRaH3(702Lj9$Y8o($?nwmYgyXod1nrd4Hb-<$( zd)x#3NFS7E4FSZ?Gd>RK(!wpYb!UG5K|#ES`e|$DYyKrkNO^b$JmMF&AJ6}9SaNS@ z5WS5def8&kePX)=#IWu|$0Wc1h5J|UOzuvB0{ylJqEr)0G0d$)>KWU%gB){VCy)K} zk5-8MdNs?A(=bIIAS{Zdc9H2O3Tsc5{tc_`Z#&w92*8fB(c1sz;hTfU%qtzPuR~-C z{%YVjRt%;lWGO$cyrBK(4?i0GhuE6=Z-}i6`-`=;{{_%`xqkmEEOv>e0f&Bv*?qUM zap&KM{&ye1)om!(F-y|xKOtNH&1dz`*ZP0_*`ERD^_Q!g|059g|K?w>(f_GEf1PJ_ z&wuy${}<2n{k1%E=ApgOPvKdAe+Pdr;s2Wl`OiQ5zaQCu{zU%AZ{dGGvj6?a{`OM* z*sA|`Vg4A({J(lT{{Pv_-lPls4Q}nU2b9pyKv!oJl*J3}m=60U0o)Vfq>1oDDxGRD z4mFvY{~v+p|Hpk{AQT)FFtz6|e*M|#;y2J6zRP|>tRQh3@Hm3%0ROFLdlEWhe%1J1 zHuZxPqaID5aAV0?IX;*9{|*`ZroyFYGe}{#sRekP(kdN`LI3tJME(%D<;sPtst2EboF%rgIYKNi3$z`ZB-yuk5zaH3y_nUP%E#N zfrcl#$F71&ay4eV8MEkT3wSD;drIez*XQd^msR&G>hkk0VsML20A}I04#@@`89nW@ zr#BiP7(CyioGb*t;vXESAid|%KQ(sI35@o?0q#w}u^F@RNddaQMYcpNHPaFV0UuO@c{-Ff z_!a7S*+~@Z8?y>dyUvW*LPmu1{1%{$QnR*;gZCI^zI^UR(A?9byRT33=Ncv1{U?T( z(}U(xJ_8|`-M(+5ua2bZJsqwvwh?*B-yA^VFO9$N~?1wa880>xE!R^Tety#z933Ygm;Fv~+Q>z&x z8N*^wwg!Q)aUzBFgwCn>vXSw|nQGWh=aq6TjNs~~F4xXWbX)HdD| z4C43`R}zj6AAA;U<$IF2hR*4hN$7JLF&hU~arFS%$CLy-%YI8L>^LvxBx#XhrFVLVL>zry~!E&5OK zb+gxv?%m3>OpNuiP`?{ZEhe6b+ZFvC=%?VJA~QVk$H?`i$I2UE=f*!H8sR0sa^Y61 z1>d~>4{tx)G^d{MQe#tW7q?QZ#JafYSv|XA2TLbycgBYkhIcs2EXUmXX=HGn6yG z7jCQT0Po&NuM?3@-3P~-$u&A?)RqQAhpqlZS$D|(uUeacJce0-WFSOgaG{0*qYq9=TlZ*X-d%1!`kbVV&wooE4XZvl2aUCe*OAA@4 z<&-bzdbJ7|4fb!1t+rLr97q?x_ZN=qZ#3s3>8g#kMB24SQ7C4vvme2H69X^;XU|`>#Dj8c!&5PJJ(oX=X&QKJJ+lF zkezGS|7qtspCYzth92#cWA$6ei6@kx?tGb|?T)^2Fmb-bR^Srl-@)n1=`G9b_u`i# zjnJKsPd?5!K88%iERrHS;34f={vay2gl{Pr%bN&zA2~*R2$Y z6qK`21Ws+XsUBDL=b9_0v-X4d@H+irZg;H#<$FMrvuhvVq^WZj-|?VIe^vum^?rje zmkHn`YlNTiPd31%F$QJ6?vgz@)bGRc6#KTZNpeB{cU&KW-c6`U21^M)>vA? z{U~hR{V~nWue-qSCPTvol3Oy?mN~bNt2^R-F|Nb;o8r#k1;6q_cA5`*e3KXt1JsL zXyra^?;Gfe8Jv}Bzj1eg-(EbDz_KmT1dP4Lw7$ZCAHM#W$mx^N21bqsFUu+M|Z#+q`FoDL<}jwtgBj3y<9@odU4>R&+e#e^8@3W`U}j{5HIC=M5!uPsd*}- zL1KYImiYb*f5mnW_}#tN!^fnj1S8WVggl@afo_!kr(5^2oD#s*>(f$Qj7w~-sEM*u z@^VmJ-ISXk@w`i=Hw?T0)FhM712Ch+Qq}paRa}R?YGZv^220nd&~ysw=)7LczmLta z!wyx45s@l5jr|Z{kHL^Cwg5B&pDYAss!sHzdNU&wBQYmHMCc5& z9(wbkjU4lBpWpi#B2#*w)?!S`wh%cih7`HdJaS#JAG@<f2DQ&*C>;0%!!t=BgSKnAhaV5w`CBW`6P`XMFO$NHq+Lct;ViTrY!#HIbb z=bvwt%aR0oYn7OWZfRc7+3Z`H`0}&|tgTvfA66gWU;vQ!8e_Li zP1Vk=_{AHYY8D6C>HU2uI_eg43gb~tdL;0T0$SAi$1VOYs`%SYz^%he{O6O5ZoAhC z(6hL5n)Z}`cRFhl{@VnQL=;A>kkj}ALw@U6ZB|S!u=lwgVIuZX&+|bOqQFrZ{tEX? zS6pvHd#4^mp>oV1!mh{R(7?9As@E+|bWYW83uweU)o8_I#&6sj=>}R5^a~G)iJ53w z8C9;IqM3rMh0G&UBrE8~8?Z_WSfmo4^=bPo!tue{l7^@Z<{QVMyn>BnGu-}i(D6o# zgiZ(n5HAK5CoWLfFq)YwDW6#Y>R!=|>-v$I5hluVALM`bHRdT8eKpw~gWicTpV1S1 zefhyiCHJSh?w4zlAIz{Q4Vk@o6r~1P%<4=!R{ngJIFPz!ITyz_0cCD%*}oSsJ!$yu zpde@biqcNYhE^sZA~@xW?VxlV#VloD>aCj5$9@!_Cfb`x;TSNs#~(Y(ps3AHF7?`* zaqUfINugs{lfv7!YSt8@heDpCXNA*s-{bQ;RlmfKE)QE;g?!0idz~RJKUyv6XD}co zS+99V1Mc6x{L8jKm#+NH@?KnvDqL3ZbqJ}@tYd~>kc~+-W=hqjT;kOZS4B%IRbzG6 zDn$$Ft@6GenN7!93))$F^O9F>KGa92=vO#94`&K7?i1v_h3uPsBHtvwRM5(A-?yoz zM%wg{U(9l;cvma>C1W4KvK++mPywHjy>N9m;pn2w(P2}B%+sA{QC7^5yIvYqOv&(! z+7CSn;d*NCtMJ-}^9-s7H=h6!1i5PM^-I>c6ico}v}O9PnT9xp&gSJfKsA)r*$PGB zT;|U0tADt4eW_UzfK9yj=?AP+=m@4b#U|zRrB#ro=95wlzN% z(0yu~v)Zc!Ga7wMjer$;q5vwguyJDBDmk=M2hyKS+SlJ+#O#aor6h@;tj0 zGB%`do$~O{wXdw^Buz!qwSK~Mhzd~D#OmM~js%sk{jDGe~8`m>fu z#H&bQi`LhxAkihU_q5U3TACEGyfk00+$_Li5t!@|@hYL%`&LSO*?;QZ4=_s5;U3{0 zqt4%$J5@t3DejcsqtZQF9=WY+Qy)msSe(tA5$?I8#VmW_zJe~4Pc%-#V0bfzu3M-f zfO1%JrFsO`6=q|5qP(dCm*)l+l+gqARI&V=V|#pT%GAgQ_9HTCbLM4) zYVzmth(nfes+*vYm3gn}Nr>ssDNJAec3k$pR$KO^0Xln4W!FJ;WsTyyY=+lE%V3L8 z=ZyN~K=9t$+68mCLAg*+IRCa=}iqQ2o-=xUadhWV~e{UI2qpmGND zsM=sx)n)`q*q=MX9t)``MWJW*bmru7HsmH{n53Y|f~y3vY$HEl2aCUl2`Js{GGf^Q zt6x_tI|Uj2W_g9Uc?EgU5Y{3TT#V<7I!Q`5$_)56djM9EJf}9R^}5z#>_X)s_+F0@ zm?f)^Aff3c4UmD4VX_J3)Et81MkYSE+!=3&9N=C~qu)F8%U|q0-mM4_pkr^rC#mWy zoAMmCP^i7|>z-}jl}_63gkbmI{Ow^$C&=wrbS47QIsokZAAM}L85(f=H$Y&eO_ri( z(Yi}#u=f$r&0NjueGIFboEC+?7G9ov&3XEar+pKBID+$f>1sgUr8>vQB%&!xe}ut1fvrD*oM>jRS` zG+mg8)J3#A?$H%3y8>yIm944L4fl&J=SQZ-flRYb)*_Z_^i}lPYu`S|d4`&Ed|jI5 zu)3fm!Br3B9E5)9c^pc?y2zJnjm3rf3%6cQRzD1={~jJ??W5e#;K=)=gImK9LC~Lv zq0R=}dABRDT2$U~Bd4|u*D95~T$XX-JrJ!JCr&Do3<;k5mS zwn`lE^u~LRVQXwc`I%BIFKtn#+9sEJ88Rcn`|$N^!c#n~7vIou((;4h_~Y1{5)a1r z7FtHNs-st4SU+ikre%!c7sEEu(xJfcvKN6XS~@3Cg2xxTmx5GzX_N+6n^DfWF0ntHyIISMSjDEMivm9r75=*7x=-FG+ymC zzo@I$!@mNferCm`H>KrynueZ<`cUXC-F782AI_z}qHc!?+q{d>1atoK(lD_-rR?E4 zp9vo@l&4kZJGCjejYH!|?vL%*goD zp8a(*eox*b+8ds#Xw)*X1283mTIZKlj!`txBGDj2FP< z=3x==WW{5$L5p|M^4kSDz_*$G#ivr*iZO-l=O{SQ3ZlIot^~>~zwAvda7pj#nX%!L zdzL}KK3p7_eEOg19z_|e(BL7c*zx_-p&!Ueic5tA@wzfG~R17m_i4I2YpH0jDc_pk(nx%uEf#j7Q`jZ)A8vULNKxr27j+ z7VON+UhF-1ph5CnJ}@*s_CIq9uGj>}4SOig!yd{Dp7#m}tosD)S+WZsPD@LFxYz?j zt~ZWlL!MHpP8=sh)`!jlwlkqA%i*Wt-hD3dAO^{u0p`x=1QO+>dnhGw>6w;&VQG@A z?|I(yzt4g6+|mnI*noxndXb>K`&-c-nKP+g9H%zlPMkI@nN`Q+I@_8Jks1k1@lmh_ zYR?(g6OCiDCw4O^=brWl-pv3|YgK7-E7&h+We{EyL+a~qBM;QIygE21Yi$pVzZ4z! z6~1OSIrt%^NAzfvNMcAG* z`*dAKhfuAeeHrznKwyWWlpra}=aao;*7Tn}jE8|0%${zXiC--d9#iyE(g> zrOV$D+}0`Gm+DDF_O-Iq`)+W~7(f1#w(nUdP=zl`9{Gfdpk^Hh1&I>JruuuLMNkBc zh&21m9{pTqB+?cc-tB`)3h(QzrII3bXapc<`TWLv9<6dQj&6?z0f`r+5hqpbPmJSs zUggNR@8jz$OR4zx!!;-TBTL3FCi+!a&~9?Kj%mp3&k7JQ**$06ZermL62FmK-{U7R zLQeiq$r06v>-S(awk>tVeX@bcO2jgSI2yj2oHYPvwc328&UBygnoMA_wWu=s%9k3~ zp<6qHvXT_HOGbOHY;0G7kyu(qBkG4&7LSQMWE}fj756?%j= z?J?$p+0H%zh+OAPYL--EqY>g9FE7N}(|?MH(s4Yl25_4<+Mj%k);B|S6PV3zUxZJ0 z_6tJ>8gZ0;-ryE^fSyxFDd_hRSrHrToR^k3-Ea2l4T0kxgZ|dC@YF}H)21FNU|Qvi zq1Y@VmJ}nq=&Lk9I-*Hqb!yIlR3c2UwBa<smN`xBzn z9GWqMTWEMdoKsu1Y7dx?3~j%BGrpUzwynGDr8GL|!ID(Lrnui>2g`^W+&2BG{*@hp z@ev2ZTsc%|iE_jSN=rs4><0!Eu3dF>F}3IAMAbi~c7=JC{R6T8ri68O@@ z%E-vu9!P)@?9&~eJ{7L^l~s^Y89VL=1za9Tl)cl{$ZQY(EaTq)rK&i~ufp)rmj`km zS~LQRJvX8>@)e@955S>;FNTLcKUiA$^-XRh_-20o2zmFJ+HA3v{YSsW9pSd!?W#b7 zXt57@Tnp`Bln|Ly#gz(}{6LbWNDzL*Qd-j?J6Wb+*Yn9fo9w?^pmF3w>LfVs*8-)6 zQVk;x;ABaXBC-J4eEQmFzHFm&vCjNSCl7)njVF~xCHCrS;pAAQe{IdKpC zpnGUXp@zbGFoQA9e2D$fne8I-0>zQ^P?^eWZ^muqT9wjSRX^Re$D1vJzM8THKE=A1 zhb?2&o`0QZF6)}2dp#FQmmL9jYZJzyHZy)ZfQobi6^V;#Zja&eob+1aPjQDAlcpJk z(B30}xWX8wN(lTbzH{X&>YJczvy@}$1B_Zcuy^5r85?-yH|u}*P;bzk!UYX}ytfLf zX)*++Yb_aVmiN9co$ITqow4{B(2V``gzPtWUEq<{@>K9~w=+SN)aokWx5kfPuZHEzvrSNJEX#PwC}*HawVZ5JSL3ig zlKzt1>Tds>Sw;sQ&?-Dz=YW41FE(gWw#4e7JLFy#}xK%07uysXa)uP>+h*UdqGq7!O^k4KajzxOK8?v=1!~#thLln9&|6N z^eqi#zY?qCGOUFTJf+(WU^ol7t=xTVhdS1ks<%+6BX~-|+xShX)YG5!LUWXkNpa+b zhj)tM0kJXw+0p)b&$xYkVLtk&?6ccZlNE-q&zn4rVxLiyOexr+RhMA5JCiARW*R6H zl-Dw%&&*KUF#k#=9#*c(W4$*Eu8SY*+%NxEK^puF(LuKGG04DGX)1vT8*bl3j3i?; ziI<_2{^7g$G4I*#MlmG-OKm%EFaOBvsT&nX$a9np#9}SSGVD`Rv-6_kpca^ZRcF6^ zR&{1B$F*HSzgod8&MSkZ>ujBoB z=Kh!MP9x4Aq`l!YB8ljiD&M4*OBE)m3I!lwL7Ml$8EcW%P5IQj)+tmW{?Wfhq4kc% zTrn*(o%xO<>G_GZ4GVMku~w++IN zicM&}Sq_z`H2b{HP6nNcP-k$?cwcs%9fnhyYX-=h+6fEJ0z@v^Uz<~q_SXgXf8?_) zEyDO2TN6m$gWW&5^t7#g*tGRchGxmHO6sOg4+xdT*RukUx2ed6b;=TcOJ{(4t^q zRHBK@58#+;e!Qqs`5xidy&zX{j|G@xFj4GL{ySOva}c+7l&N^Xw~$f{()6@_B%7Y1k}{<;c0j2mihLwr9#5Z94hiy* zVG)yI?_vy}JkG$bszyMlCC!2~>wA+<4C*A2+I;w{vJ_(v$j$m|j&bNp$ zW>VU7j|L?q;(${o#NqWk@?q}SyYj}9F0HSb^pD^8pAmnTI`uMkBqHGV`1pdNcsV#< zo6ueFZ4rKJqK}RzPB$oh$IN1Yr|OP>N4Z(a3>sDSDiS{9e>N;WKI+?0ohot{7en{CO84;vZnAP(#?}9s#7HCr4>;W5~{l&ji!sOoMv8@l;G9y)sHa_akA(vF&lz)if zRMTKy@7;!fK%>fO4e$7rjNYf(v(Y-TGFq#0?Sp%;VmML0oO5R}z^3G;$3>+SNzc_W z^xfOL-a;jyE5!?#fW8Ei_P5#kF0SFy@{+3$^I(M|Fq6`G8WYZ@BG}q%F6U%8n?qX0 zZn4~@y~A7H_&NFJzO_FIecR^iSyn#oN6*r(Qv5SA8ZomZ@r_o~Z%4(|wjjFT56=1Y z$Q;-+@OoOfu(bCO^sKE`L4#^&c)A*g411k8LN-!NzMz5i%A(k*oAS3f*R8Xsw_yEU z7l%k1`40+HJpv7jig8={?8`g>rtetgmDY2Ip` zE&1yte0;4*iKYcxQ^~j8`gEhYUD%0YB$b1L7sfx~HuDfpHUtn&q&zu_AUCyZbx6hc=D1(5TM%>w=C?GeG%l zf%0)gS&SbFpF6Vfck4&yGfcfo#jL80_|wg=Mybaex~il}m`{V?gC5ImYBBW}5Df$U zof+VeU;vaOCiX9Lwf6#Fy^o`^PLPdnrJx71%BjCcJ1J?wV5PVoz(LP>stQ_5|RZqhV7?k^n zuV}KQGk)7MqOVXjS|Bgb)xI2OD)6gz)d%#N)!l+$pCj3@qq&66nhBS=jFm;nD76=U zAQhv{J<}jMQ_DTY^z| zYfOZ{#D^5$s%h*+&0HC--C!x(F7Dc8cTzq1sl0jVM<%yyxK}o4ctiE4_JB%aeEuDHwY11 z^CBybdl6rk>+;j?ZPB}e{=>O$=5P|!R`2Lryhxf4MwyfQ#y-F$5QR^OHR3`@+%tan z%G|vFY<1D*jo= zpMpda?$DGsE}OeRe*5pXRk)GMIgH-wmeQA61GA2X36u)h?>+o|0a!n%_P9{pg}-RJ z6J8ThEf%Xw$oP5~Jj|>^c+^kpTD%fhE*9(?H-s*Q>S+D5!R9*f@_6)$Shn6Kw6z)ew{f+{?-rPQK(c|McitY2CZm_ zO(667nr{li3$dm@Vb`Sldef>sLcK6-0=qVsa`3*S&KCMmYvn6T=~ zS#z;QP^YxqfN#O>Z!eLst*t4x=m(U(N0L11o8JLxa}4-&8H{V(uca*W18Db6Yk!Rt zvU}i?rOVI9kNddI-lHsY#%tz=pmeCi!Z02X7cAjX?=_Z7b?8vb>owc1bkZZmN%>J~ z+Kl=#(Y@+r*&2Dl=rlkwmg<~`E}*_+o)d9|rltvOSMYjHfA4=ifAzo5-{Rtbj9p?F zPP+rHd#fH>ZrZYPz4PP2DVW5Sr{|2_@-;tuR-l?x$dLEw)d=81Q;i)kZ)hNM97apkX zg=?Zwd)NiwZkxSefEJM!>M7jR0CpH*ZZXJn-qaS;k1^osj0RJG1)re)oo^wuUnzyw zp&exByH%Wi?!g}##Afo}1`;XLHp?$DDuYmea1vB;9>|9pm0=~r{;|AgsTn>O5)$H@EQ(L{KwPp1yBDt zC+70r>}`&!4N?zQ)f177ul%fw^t3GQ$F~pHn`?(`xAi?I#s^1dpgDGx-Lc{rd$hptYE4#`WiA!mKaZs z#1m%%)2reLGM2rS@=gKiJ@bo76l_Ntg%;L`JvYckz_wX~Ts z_E&j%a}l(UWbo@ZH_8{K+jQz434DUEs5O$4ON=JQYA~e)>^3W6AXm8^Z1y z-7CnR^DQsUWQI1&@1YI3v=~2w!+fV#-A5iYAj)`*bOZai?_Tu6E!n`#;>>*TIDC{p zGJ>^p@l`Is7GC{F6QDl8hLAx*GXMa3VM=a`&du~0Jm2; zL45Vu`N_4^U*KwgK30Pd8B}cc{Zn{LeDoLz`L4}JzY1x?A3aljk35V(DJ&jg=hgO} zTkN~;f9aA{_ST#0oGZlD+&FnHf1AWfZIc~d7jyeQw0h8p{Pg+ub`KEwkZ>5+kG=HQ zd;mE7xeM84rLJuR{96WWr>`yzUt?9yx9NoM_on`OVU5iQ%ODzo!mL*zIx1fG{?cnE z;qnKvPQToK)}nh%yCB%^r>FRcP1b#NfmP44#rRa`7r^+uRx{JcB8Q@p$^8>Ky}WaMpPJAtjsm26eM!g$&+L{qZL>#+WXB^- z>^_^7D|KTH`qcOTM#mah*Fkc@-Vg_O&+Jh#cLSM%GaESPGOq*BIo#R7>nni8j{m}9GM?On# zX+-rdvAP#9oa2?P9WD`k<;rn>Q^Q8|sAXqfsk@^dxFnwQY6J&>Pgm|LjC4*lXHM`m zSq!W-Q^xyVYb)f2sCb>DF`Q~Q!s8~W{%5IF7==`NXyz~W*d|Gr?4N7=c^<}lgxWtZ z?Nn%?#b)xxOv_vJ-m1>gDan&`${XjkkLv#gsT;5TJ3oOU<=>^QU)-EAK6p>A61Y=$ z#mw`y+3s&m1`f~cp+6Ip%V%11Tr+hwW;y=v=oA+c+fxs03cn*;7@eMne?%QdrzDl~ z-XUy)WZJ~*SAAGsRJLBW%kJqV)f5+rjaL`{Hc{Fal9>9&jrV_6N}0QT`8!=26Nf5T zrk{D&)y*8>9udFMR&HSrAc#HXRHol|3K^069Y*WU(QyQ&-7f&5EKkgv-?a1@4=NFh z6O0V;IA;1|oeO3m_GZrgbznsIz4e-oF~TZ^#I=V;Y4Ox74J&HnHlS3MJ3&frg4P|b ze@3E5p$%=4VrC)aA1ymM6J|bq8wD{%0ufEQCz4Fe!TesCbJZLvs!Q5Jat*> z@Oby@nz@v621TJ*Nb!r}lt)uHwSSvheh08|QT#@L`bMTRK-;Z0phQ-*jnLNg&5hpI zH55XiXVlC%1HL#v(gC7FbR#H?QD{K~l~n=v6AG+B&W!KZ=Nzw@{T>ae;WhXYNBS}x zg&OaAZtktVC#~l}Fkxgt!eB7gPC6QF7WDxFpbUl`Ygfvhe&=Z6Q`e3dw@GZsdKJ-i zm+I&LoNTJ1)bwKSZIb95#%zHzOv0GpnENzh9;HH{$5%(C9tzShE-sYeawo>G7Zh?lkeW&d+0B2(c!Oyo!!Zd8Esxy)km1 z3g@7DMDo;p2)O8)-qjd?*+Q0$yz58Bu{RIc>3bzLhnI}Rc^KZk>eiAdIbSwwyfc0SeRll#MiyO<`Eb3}B&sP7H~wc)kIqWD z+1nAUA?vq%T$YKP!25y_Gaa;fq_}7cEqS@J_apZ~K>r6dLLP5cr$-=6&p!EI6=D=0 zfkIsf`#;JS0F|NR#+(zNE-M~-Y&^WNrvK>~ zU28v8sly&v!jq4|2_}*8@*XAp?nN&s26jxNxecp+zj)VuRkdBs1YH^|sl$4)rnC<` z>h#qJ|6yb|Cx&VPQrLZ-bh~QqOu{O*H(jSb43u)hzTun_nOD~#mK{A6qKQIiD}zo( z;JaFhQC4NwDR}=6)(};JYRlCi$GR-(W2fpldhrjd0Q9(Z+rDNY*QaOh75rSo-y6*z zLN<;!NqG&;a8UE{IP5M}M=x}Ep4R$Zy5MUvpN1vc!je&@tIfkC6fTi0H-US{5%-aq zvlgkyd0>dV2YiVZF+Xp!q)rjDyKJ#M0KnJnjz`9zb5VK03r^(S z?_^1OLq)G=>i;m6V+hn-wCwSV9qEB3?n1|gdeI?6;fN5=5jOm_N=PjUxPSvv7L8%0 z>g#3VH<{$t;MHIU-5q|EaEaX7pge zfJypwczwU+DSEuAQZdH3xVJu&)M9>Cc;@!lZfyLuUv?*YBV;;z@6}Le zzSc++C#{8XrBX9`Md{%2*9h?uj}R(}YGBXTHwLeao2n+I67tTSHA+@x4TT%0N(Z#j z!zKF43P{tm3nz;JfuwrpEWKl+@HExhdlHj+e-Tj`_7$saE6uelDJ~a);kE^*#_&7E zyHZ$(Pv6B9d;1R1u3rXZuYCJck^X-xQrS=bp*Q;Vq-2l0b7hm#5^U1p*`&7U#P#%j0q{Xb*g zmc$5I90B_Pbia#;>&*ares+?uCgIEG1bnWU_rq^bybsa;Sr2GF*X*c@EBYQR>_f3! zmL;Ye5)~&9gOrbr)Aa`h1ea0#3zr#=^0TjyLrYIYE?kxAkGrl#Ol;lei%$a~hy~s8 zPgvQS$vf^cNhH#G>t&0cfbnK6$yaF+b6uwRPRQ+^j(39O)wRP@BaeZ(ZnUMShG4Xy zYJKnfl7jN!c{E_^mFPj1o%^qs0G(HpJFjgOx7_+Jr%JK3S_LeM7iiw|THRL9tO89xv}?#pvk+JB&| zF&zL?NRJwNLv-(=j0^0k8 zq1w6Q)V#2#(=&ZbZmfU!NB-<*rTvR2Yx>Du#_mK{*|;ybh7r+-Cj)!W4|UWGYgLUm zSjCMb>Q#*Ien0|Mwe<%JTHFXQ{r9q@{LtcV-_&pb;DKZxTB%Dl(6h)z$u>s#G84`i}zA?M9b?Hppn3k-YG@r&cb=Py&=|!LnSg`P-}dSM9RyaS#uh=)!H_>2CEAOmWUEIO zRuXr1@^FT8(eA_s^P3t1y2mGef-%=fOsiI1u$xG~%8Nk|kV7w;UKh+>5>6K{-Yj>w z@9X}SzxJk*IC)8O9Y9*~O43Sy;O!vCMgc8zS{Ao1A!!Ge;b~9+mOCsiOUsW|3dR4R z-s;iotvLCmbHi>Bn*!z;Ekm$j@HzcXytL3=dp))`_L#^=Xm+(zm&W+-X?BO}Tj_kn zp1s#31Hkc6csDI{=dUmAWjt|5GrXRKzNf$^Hu7Keh!iCsP*Py40Z4XA`W#!Pu0<@l zY4+0d~PmORb(SP!^wK_uKv2V@JI z(~YJg5ZHQN#y%Y)wMGcO3c-uj8cef-7T9nBEwp)-eTZ6pu5ze&e?q8BST=^|ZtD13hI5+dJLW?)0e zSM$l*)Q90ngoUflo@sG1l9ZfCT%TCFZPT+h3^)=h6b4+H`bTL0lfc;c;N)96g)N)!-n8_vscBcsZ{QKNa8TDR%YNp!^00ZpnZDjyH+C2p zaw~0(TPf8NmJ6Bvu|o)T!-QuYvgHcW(H{bF7XT1kt7SPRXyhO_S5oW^tmL1C!bReh8!=7_EXg&_UEiwV339cIfV(=VGMjqv8zwGfa)9YjFKtrtG@ZXK z=I?|O%kyL-K6Wh4#HbBDFjgM22KTMG9MYdtW68SD#=YCN92?}~E2GQ$l9=&}PT-4c zGa#5X%DrguuES^sWgz-&WZOwGYcSCl$wpnLD-M5{h*}|&nh|H_Me37yW-05>NfRIZ zTnV{XOX-kMFvSZP!Dk5OZR7ERf40_)BQl}o{Q{)sZna={95{E)*WA%<=?C*eo}*8! z=gQ6yP;%<+M3;>Drzpz4?3T?~ktjU0$iVPz7j);LH_JOh(p#GT@-oUgNcOU&sV*%C z29Miahe-IbY5qH)f9w3yzjcld-_$CeF!uE}da_Iw7`}`X+o1EVQ?UR#C05cOM+~c( zAqjzR82G>!%kF1jtN-V;)g)6f%X`22l#C2KLh%^vnWtg&oAQ#9dy5Jw_uHxgSdCT4>~cc&s0) zBYv$a)#}(*>-Oi45MYCuRs%*_AF+92A9%voh{Kn#?i?5u1`;Gm{xX=F5ok&o;#!*M zOcK|7lKUdJSA_@tDsj#4Cq)`08N?vpx%t*PB)ol2{tR~4Le_YK>s zHi;@4^0P=yA>Mq^R1Z2!UN~yGTF@lnoFV=w^C02%6Z)G>_cRRe&A)R>0PrWw2O>xn z&6Zj;gEld=i|!l(xP)d6Z=8or#kV|qYPz?7%6EDQ=yg|t(u91&7?_XLGUB+;+hjLv zw8ut!M@obmfTDHj$LLfi++6C*D(S3b^6a;BbpT&|$S;nDsB;FK-ljqKBbmWPlj){X z4Zu3zP;N#~2Dt>2&a zgMhf=LX`-?5R)$`!pdHwoY#+M*$IrW8}vy1p3!NW3aF#O#^bD$V4SZ4e_z-O`;+?O zn>1kdvBX!;fu_!TSn>)>J!3RQWgoux_MqY5V_s^3qI_sQJFH=fle6CO^PtYc6``|8 zphqqnxIgan_2`z@l7v_=wx1JOkxKQMme`ubXQLM{=eZcnaBZ@U2Ch18WaP6zBnTR_ zT(n~S4BYa3t~PXeroM(J#`PEM&LUD*S0H^aL@?Ti7To|684pfsf2aD3jLFIPS<1$i z05%oXD4k7tuYZmQZJbv5i=l&N9xqqY8PZ?QJWq`b^7a}M38R_rdv^|^uJ`ksGu89 zP3p+4o{oT$1lL_iCl`o& zBZ;|FZzigt(K(^(q_>%~&@Q#hV}eGuw8_TJ@md=8+&HNK&e^{eD&`hn8<@Qn8<#c$sIuWJz#lKT5$91Lbt@s>#=s> z>agqLC+i`y?q&VqNZ5RpE*)w=QQXP6rtqb)m7xu|;3o`^UEAB7vsiDk{m54}s@8OB zhvEeT+gJcaHw1%@wAY^;AB;n0A5OP!_ZcAOV#z&KTx3l@P=T#{0bfn&!U?d{n{v}t zv+DO1=GTB2U`R2wg!T_42_*OZGxvx?IL4Yk)qo-TNcy2`Q`Bw9$h&q*bu)*BN@D61 z>-h56(~|_6+>7%1&5k??WBIxc4ECFsxg}2;n9{jTwcSHIzVDMg&d(y9rXArIHLyYdTf-Dhoh1f?I9knYSGC}LdR z4~ZbkL;(hVspUOk#J(!4uOU0XfR6>u}QVTLYkiI?sR7dU>w(Q zAO;pRxV>~Iou2nBc`EeyI7j&d!XstNnF!q~$?CujI zeqc)+i7gXInV z02RDZCVsYvO0-^ko_!}n)a1t;Yu&*xKm9(b`q@62KB?CXx5e0_z6mClkod~a2Jd>T z4>C(ezHzfVqLqwpOH93G@1C}P1$zt=q^)sO7AXD z$m81F9b^WiVrhg@+U8uR?(0JfeY8Ag8%S;pIzD>He0#A1vMZCNPDsfuvSjPJKB{aw zaf7~3K4JDRhxion??CqVjLDG-w^aCixE3BgjJ7MTel{b5GEsgVuYQZDECxkAu5x3h z8$_P09fetv?BK^OhbY!WP{t2+_7|?jj7f!k(y<1-l+|nMEE6hU!UUZ-U5y`JCR!Me z_F1;Lt+6!zfQ3e~J*c4D^uqCB;&;MiZEyJp6 z+kRgW1d$d2MGz4QML-%R-J+yONlQz2hf>l=Bi$<9-3>}NQUb!HCLNR7*TCERxu3P3 z_3m}7eeC^ZzsKPh3&tFbb6jWre}9+JTvg*c5qJG}wU#L^wkej1mt(Q*0Z}3tUe{Wc z7GY}fDG7BA;49eMU~$;P5t_1BsY(0^5~Hz1CGDlR7!gYF$gpk+-5|lArV*<+i&TqC zdKj@G!=ZNLGOP1!6twiE8HfkLt?;zo95<`*5l$FW-QG(Kefv25Xvv|qKsI5{@aaPs zkYnhHGavDQhH#0AHXX|FyEXBP&FK8bvMs+ zo;d!Dot8w89Fzc~J7wC5ya!CLXZf(4ef?#ncu=%e=e%rN&EMgib9(G@YT5@<^F5fU}dGzn-_tWpqzY^Zj}&_v;nr6n#a! z=8)$!_SshjJ>Hv(;E6n@(_N7ezHZEf=XD^Dq*=t}VZ9S1z41+qSXGa1QEik&L`NH& zf7PTf6lKlr2}nlky*uW7%g%IB{AC3MzuBv+?etZyjR5wE*<+GuYYRdx;%eb+9i77v zR(?`?ZVG*#cT2(93j<;k^T+btC#;l(wqfISk0BXn2Pj z#vZEQ3~h$)`K?*C8L9)%J{zUoJ;6S%)nKb%J#V06B}kWBObyV8V&na7zKN-Us)zKu zVT3h*$kBBR-kZ=q(+5Ewg4^^RS@yzGUq3V&QO&_Ps(t`EnHF3fNJus}_Nt9icsN-s zF8}eZt5AYTtC}b}4d)YE<|2=GW}Y80dJwkWJR)gd((}Os>}W~MFf;3B{q(jMz9#4@ z^;=-}*VczK8ci|Ztn++WBi;2va*}IGG|$mKG{!y<VN#rhxb>= zEU-@8#Un>2mV zOj6$uT&vWI*Q^BQy(_I^o*q;EHFN==ztQo&po=^2;xk55d~Kdybcrls@Q2`A@aVYe zNy_|>m+>cz!T-EMaGMc~@<|!bPhkYNG0{Lby}B0yUa7xUR?+e4%?4wVABJQry*@si zpe^?KT_X^GjXQxy*hcqFb{0^HJ~_N&aq}I=gDp@+XO#e-n#k~SFz9zk0@SwN!52&# zq!tPH24!y38i$iWKdVcfJP^b(T`gViP%dB0<-Tg#!QK&M0kVXrGuQiNZd)9O^Zesq z{>dKxb=By8;D(|5u{VgK(U4swTS>BfK-=>Bo`-n}j-dGga(&S*@XfB=Eedsevb?cf zCkF0>{)^r}-yQm1GS~Z)D8N<4$f1pgV2Onx2*DqkLl?m5A5QUKUVyI;xBy=t-i8-w zG*_?411Sx62T4oA%0>-p4;fVy3Im&hQVwyy4>%*!dW03vKi7RdhZG z+~bX>BPk`M3CQT8CHU9p6Tgcxxtq=)@X{ji%9K^PBMUpY8gUAgNz8O65$k{5!~glt zfJnek(N*AC6ny-TkNRK!kH3B%|KV%>+ut;L3wwr06F&c;7yZ}g`nSLSfAE`9R1~n? zErOfzXR7}H;A{Qcr;wsUTN!6dZIw3o)6o65zy3e}&41tIe?3wEeUtxnFaG;U7X53( z_``p{F8*~o|Nr210kbvp`NIPE^9cOkzQ+H*cy$Px5UkkOBy!vQx;4nD-yPWtX?%_n z@GehB{_DJe#+DeP>HKADB$#9JGb?DX5b-ag{+EaU|K`Cu847ZQNhYe7&(M4W8X8o)ASN{=51&>WlgfCR{r~4@NW--C&kq~OH*gC@5Te* zzXt71FJCZ>sM-#Qm8`*NpDn~0Cc#g^J#Zj(8&Oo=$OW_H#77EQ!%lq9$tda}tz7Q~ z@NFH=TBf2neg*;g$`<^@(ahfOUd4LSe|*w#adK-Jsvv{I!MyU~hZ7Q>%>z12vd9@o z>2(Zj2?tOFysl51SL_17tNl6R;=EvVnfSF)YA;|AY26v)q$pS21bfZ%eiSn$FSQ1V`yZPeyD<- zQ9p^GffyZ;T3}eO`Gsg?R?}b15lB{~H(-SjtUGE8^VfLd{n0)b&QRqa>n!LUs-fyYR(_*Khd1<5!DDxt01agyk(J$I zYl12BI|k>NZDy}#Dn8Brk7D+m_K^0vZ46~y)BLOr;Kz_fx|WoM{VpfU!a?=R2!?CzljpQkhRZt{km zN4g+xecuhr!?UZwzNM3IJVEw7%a!uG&al7{;~&KtC=3j)pU&fXtRPQsqGkoog8LeK z9*!QQ%(XwPPy-4^idwYdS@7^RjLED4wZMu@JO_h|a<7O3LEXV?2SEOKl3@m<&ILX;EaQ_9y{EeC;aYv^O)u`Vc2HU< zKM!nc$q?#4JmYm;nh`i{5r}l>V52Bk+|-7_pTe7Nj1jW)9*pbqsXROHm*}(}Z&JQ! zO*;Vsp!M#8E>45Kq{R8NM1*U0S58n4KG%9-3k%uBuE2!?UlCu~Xbz)Y%b=J)s;O@> zjNT2Ey2$CQy3lcxc)6BH1Pm(VI8U3Wpn`yL!-Ad)_P#ephmig z&Kzndq<3O3Tl1Wbso%@w5N3JF792Qp`%ypN2West$rI86zope+Jr)B_tKkir2(-7^ zy!qA@izZ|n-jjDS9;7k#E|?#_jv2baJnX(s&vblc@)vjjJ(4#GH1+_prs@QM#GdWF zBX>JWwUy7KZch9U?&Vo}F|1$-)UG^ibxf4*9zkIY6`H#xW{kpAd z!lx~n&$>gPpD_)Vsm)l^CGP@xU%dOt)T}*;s@}&RY_`rHyehq}r@FGUV+UeuzR-k( zyynF%5)28z;(33gs&>W}YH9{bqAShh$8!6pa}w`f@#U^`ue8GDBB^UDF(!6Avp|A1Jss zSDmE1MdR#R09t-mN)tRsss#Kln&MvWN{i!>xx(YpO1Ak@cvko^@2&^&K<}-G>k0_% z9p6zkXuyucEb_c9k7sAqhw|g-QHc^^KdA@TPb^EB!Q;FxZt{43^|1D~;1Fq@IQxV> z@!K~y-0xy-yUt^2eIBNS6w{olC?(->mz>oF1KL-BtxOzb^HbAFki7|u&vcBVo_s(e0FZA zVg7{Sur7A#jhw4$NK5rm=?3hTra1&w?wH8Go00HOx+*dnI1dLp-ERbJRo*+br#n4- zfj6{3Q_5)|?MF!??SZH}MLWY$vxCUeJ&_CVURq<5vwPjj^88>2_r`aDX2NB7R3AxM z<3u7x_!#5BVZbk^_F=y+83R7MHV{=0R5P~5Bbl~7R6W7|$8mdIOq-wU5p}!RLfCq7 zWIdz<%;*67awYbpcmk)u#}BZTFZ-CAJpQ^0hCr$G&5eeWu$|`uadFnr3n?De{C8i{ z8jss?jB9)C0e9$gyXEAI<76I5RGK;&ntQeo+sNMAToTZgo0JEeW+j!BA3vm5wJMIt zC5_|*uDbcE6J`67gHDsG7IphD|Lr&$oCI00#M^5qa55qDvu?HuOlWx^lmUj?=mTig z5Y9(p*trG>*|r$BDIfB1*a2Q^Wv@ZJS+wRXK#L?oP)|Vb997W`j%4CYWGimcDt6X~ zddM;guMOh#0bk^x;)Q~S-H754@0vImikn5${33Lcu~1Cng4q!Rr(|;dW`I>jt|bC1 zg`Ch?`hwbG8$fExI*e%7FocLqfrKZ%K47nrs=E_(u9K;85?@xRL!7BZz4v-ZbC%Ej zam>2n(YUg!RGu(huy_o|>bkFNn3Grj^}^aKR>`?+C8A|mOyH;q&$&~W&keXTWFE@l zd2ES5+Y#JCnCH0RCyl1!V^jfK14BnK1dt8;U9F*7G|zyL^(}PPaRFjIf|v9aXM~ zMQA+X<#*5dv)4iP-Tv}AKtUXw>UvKG(T^vB2PKIO;ZljPGK9ODxeCC>*cB4gAJ!oh zi?7$9xv^opUk{3y*%Hxan-Nw6S!189znB2#q-y7(KcT`hw1@Hyh$MAEnl>aWz*p1D zb4R&KZP#b7y-TLE2aEskPh289X%LAZF6-b!*$(bt86ZnCT?^+-Z)H}9f&saK$GsRP z^Yav7p@E{12QnMmIIq~F?i0|eHwtyS%AZvr-?xl4TH(5s&GDl~Y2%iq4#+r2aFWl1 ztBsZ00#zB&+hWX>eS=z*bVhvtA|jiP;k+!@UwTju(Us8shd#UZSi56Qo~DA0-<3zr z9)S$yok%uj+Q)IZnzu&w_;>QJ@oQZm$4ZV#R$f3*ZpCM`-H+P?37&FdZ#-PnZj15x zk+&b(<{Hj1iXe6+T1wZ6VhTJ(O$tlqmMs{1^oi-MPsxaDLo5;>$!?V;Qv%!B2eGLT zxlwYW=t}tjnHBe$2ep@t>ZuR$>(7BvH-C7#I7VNIINy@V)oxQJa+^htR|}a{BGu#mtTB|0OAz zJaIbZq#u77d{@i#J@wF>A01Hz_vXvy9surknTu|u0=>Lnr^)7zsyII10~Z$gqR=O~ zbV*#?`rFX5NIe&`x%XC-1l~pw?<+@(vrpD^A4ezH5XRx*nIjF^^mWfPR7 zE9B3+Cz)eUd=A1+!^KK>?_<^*{*6+8Xa;tLkGgxf0A*U~*l%~QdpYp+d_s)JUS0L> z*&DdX^gWSecKa{IH)3b$ot;2&g`f%isYdnn;{O| zxA89vAMW?Zr(I9<;vG)`C1>Fc}eW7dr#w`*H(zOdDDocAeSsp|W* zliA=jX`H>3nxzJLS4V_xD1X+KbTjpz4mz0y#*HNY%kH3=Ts- zs6o`52)`))BuUZ`=E>qyoaxo)8RXuuSrw(p@E?H6%eW!=En6vM@pIZwY#-LpzJ2M^ z8$sk!>RH_7Ecof1>c;`#`vO$ECD|;fY5pe*7L0H4BBhNlg9(?D#x%F z^Pad7kMgobptD3aXTUPF>1jYB8_$s!=A+k9@kFyY@VO2z?*~c;tTQUnlWsnAE#ZhZ z=2C%Fh6C5@z54cG$Qt%B%H8}i;`Y+3A^c|L54GSWoG(=nSvDIAM3dkv=qAwA?YXMB zE)j^iJi&`Pm=UQr7dhz>qk9z^?3Lue{Lutlsl+DpR22VN>3cswQMO2k6)iq+$Cd`TZJDd5)PWzui^=tcDR=hcBFy|#%ISA0d`DDmh zWSQ*GW?osSY%dwmt?i6N0&Z%HlQRXQQaq>D@C`%Gixrcz;IGH-MSD8Mx{6r>5#$Z* zPD0DEhCbi1^?JKN?LioMPwS7`S`h7n=l#Fg%3hgYbO~WXZCuaGi*LDKLU8BU6o~rc z%BIX~?4U)7bITAHMIlnD{{>pvau-4?!_fy&Fv#v#lq^8JQSL?d+Yi%bs<05PH>#WJ zz|y9(2aOW{t@px9jBsx#Pn>)n?foLKW?ECWZHVgzTd3!l6#y0PZ>k6 zaFSh#_1(Ymlo|d5Pgzm*Kk$^J|KcetY5Yf?GCDorHv9*k^4?nlH_GbIbkegY{HVWP z%1{P^+szt51WSf6tV59FdXO(L(o%}(w+Y#yK3;~B6sOUHKme)bFN0?RUD~#1A}?e; z4>rq_*4R^)dsu0R`v9k|X7y{1L8)L&leuU%1x=!VNOMM+kT=I1VT;W5CYdpwLgf^Z z)E7lx(<4z=Ua$P9efKlWf~0P$9Z6q0BXmZ4T(@!r^3_{HgANoCcT#eobT3J9wdf5W z`pQ#$)oi}87)!6a(FdWfqunys+p;&&*s%A^0G%(+RHtLnN6vX?u(W!a_5PFDdz?;JjT78KsAwq_+WSw53zzT zVsZcXj!C-Hy?vYU<~MlS+aJ=Nx*V)C(oD@Ag8lD9(LgAQ|3F>Gda>cMp7>MReQG~* zH#8TQ#N>(D1Ic(W;e4nM7!t-l-P6??k51=ThGgjxeg_uMVAgx&er1nIgeBB|A2cfS zJ%=C4zm)b|s#5jlw(j?-FZ%%u0jrBI+e4Mkp5oe$!ZkolPA{l?hj=};JGyk04GArj zEQ97&?+(q*qjqWL&39H!U=5O1;{$;+3GQ|w<$y%MN$e{vV&TQ5thF4xXQ`(COF zezjcWG*}!1FN5njVCw{c?B;pvc8=4OxN43i^7naJhKCe)Cx9^WlBb*qc*>vQKXYb} z+Bu6${frST5@v(jPGm=@6oEG_PL3UAH?eIWs_09!v8%}$LB20_@nfxnl|_`I z(xd5MF^A`kU7JuZQwM@6FUb7`Q)VCf4O5=q{S8xQ`x~ZAm(3#x!IU$V16QyH#Keq| zGlzGc#)K$#Uf-Vrsdij9&hcwMA#RS5vKm_rZwGPelyu^d0`s{3u|`e2=N&(BBF=hN z1-N*0Mm$nC0D>V%?0K}g+SY(G|FBGFEEd!JeRd zZ=YF3#+0wQlE-^~2hU#8QXs(DK2f%4_J6hhV387=l;j!~51FywsMln^h*}|CWEo-J zzON$BSTWG=>c2vyPv`9?;8Bc1P{~x#0Rrn?K!|AMA*=@B%Ne$XR11Lz!P4^vU3nQh zXG&MFUt)ejp0iEW@H56R5YxhJ{>93G#H21MPP`3PjTl`~;qsT|Yv0e)GiL->!Ja2T zI!r||T7y&bSxcHnOJ7a04N#!e8v-Yzgw@u7gQ^azD zBW{@4g%ouRuwA5rtu6F=Gvk7GIz)>6G69fafJg(D()!WaU;$}=U45rt$B%qe1K6UR zY$8Bz?9ADJhGy>NlT0XMu~G*JsjCIa&xgK$Co+m*TzuH$^8LDBb;SjI6hRz8K8#tzHNW+b&wE*FzWZjou1+T+5ygI%8 zIP`8$B|w=!)thX zfxYzFgU~AgOp7daxPv#whiP1Q_G$|f<+L8OF~<)oa2(ek(SJ`W%{wpt>QMMTqa4*T zKQRQXVCy{aR2xeT(rvoN#ZZacYWXyX=*b2}zmX2D%DjT%)lWIfJL`1x&TqQ#;YjT3 z3w4*_C=B4rqyS8VPoGr%54bX{=f8q0^V9$D!<7R}~kYa<{T5y&t=DpFSo=;4v z3L%P6jrQp~36c7=E>W-fY3%OVrxg({7JsuXz)u)7l|h^ISJ74-6ps&j_m7@#^!1=b zT|#WS(}!$!reGSB&9d+!=;@DLoO&D@ATlBVaP+iYB0`&@=dUBQzsH;(fCko}$O6#V zXHyt11AzBYqxXZ{aBqrofe}JNW@Z6{ejM{)re5YRH|fcA21h{4UhTQKe22IZKyctcMI6;;sFLSPX}e*LI_Vj?b(=?2OlT1Lt1o=HIdSLK)DDmF5Mx^`*CUm zI&}wbScl$PD>qj-Iai!9b4nKBai9~%^a2B32l^f6Eby~~o8F2*WfMN3#CF-@n$ZMjJvim2%Z#eI1 zYjOv}$A>vw)%hSD(Xnqr&E7iTQAOFmSSR{C`O2e;P%Q5+X6vByttI*bH*c8Im=`mN zOurM;-|%El^hzye(EG~l*VSJWx_A@IQ(Gey5K zKuOdGSem@0t+WTuZo*URPQkJe53ds0QE|y|F_)Lo-6DEW(7%1HsnpCBQv>wgslSX6s4V2Nw%s&ND@dqX7{VYs4B%g%9AB98BGK6 zlRR0@@1Eo#XbG#*C_H%@V88aXIc2LUts@)PMsllE1+YOtW(hj$%MlWES9DoOw#-qKc-*eb!q=qbL_S2JWY`3)2?i!Ks z|Dd8Fr3%@^UX^TJNy}~881()PNnRT-?DUJa#`AdsVOx1+AwC0e#a#+dryZ!orFER= zY&e#VHXH@w0CgupaTR~9MZf=nT234{H=bd-c8Y4qKE{or^)8)Ii8I3D2bj@PxT`0^ zd3_UK?p&pje*qg0pTGg_HJ1Zdp!u@_)@P11aBX&C&J?dJ5ns1j9={b6T3!Y%_);d) z?f_Q|8C53~ecT#7NnUMIdKLJ{KP-2??Tg;zVxrV8ljuZ8{rZyQ6Boz4Taj{iNWRFU zdW|vufvF76GM=qOAwTdSJm^7;V={y~^n1VKdqiRx6ifuwi0eG#UnCcE8Uo9Bl4=K+9M;VkKsUBM^{}?&G(wiZG90(oMS{IT%Hoqjqfa8oE z1qatZO}2N5#M{OAfPw~VVL8ufpH8qTwXn_t}6wzmh632Qyy$*$#ZUigT@*v z1P~=4+4~pN_0|n*?0edjIHg3?v)u%}E|%6XFe|ys&0UsS@2Qfzbgx-ip2PSptx*kQ zhCr&>L2WxN1lP;mD}lh}X$kFf^rD(}QwYWJvfu(ybFD@p)V(RiE z!n6MQk0IO#J5LbfuQb7m|Bku-n6a~PZytb#{R0vP#opC=w4l)EcNIgUp#6afx7r-9 zs9M`k*5+UEsHJ;!6OS2QGyWXcW5#hqy{x3rE_G^%Q()ByHk<9qCWP3DYIH_6iw#rh}5gHEaD=kF4moSYLG zyUS%i2bRe2jJh_^An_N{-jGC+2NKf{pRU+^n;3*>$UY%GHvibAIl4rT$KHN|9%qV! zSQuZ#GMI7U$Dv8=g=Z(v_*mW0y{WnD{2t~AVdU)g-X*V%c+3^W!Fl!^;GE=C$y~_Fp<14b)-l_78snX4C=DqR~Q{A1oT+_ zW2(N7*DK-vuT|uEn6$4s42Z?X{(`Y30hRs4E;xBPnf&(v+6@MrFrNe|?_a6em4wCe z&Y{;$-2q6M{+yyzDPkWW3i(GkmE}Jgl7zYOeG~<#ew$!yHg+r1@KbraZ)$mY`R=#b zJF>vJ&O*-#O#q06`nXMT#siL|K~1(Cw{(r{u_!-qS{BtAto|E3E=*a7LvhrXnD;7!Tv_WPbj_c!q=Xy9Jkc;SXmDF`p_ z6X|w%23+McQRm+*R7vDU2l1-WmZsKUNgTBfZBkZ%$V|X&%B*DBuKva!u2L}<9z!VOp#7B=G@b0@d)Qaqhd%Qh%5YI~t z?*K#?v-R^}UYOe^J9LoIA2@-d(~%W~<}beq`ZwfzF=)%oUmOf#QK?<58#?8-e(AQ5O*m-Js|} z)$Nq=FK9f`*i`CZ$LJ1u3I_doqz}|gF|43j@AW2^+-j-X@=ljRGQME?#hSbMg+~|c z(F|WZFz>g@5TO_6C(HT)bvZhA0h)cKIYwhmW&{CN1t#3Mo6JeW1@t&MoU%fZF0;qI z4twc)KLBE4Uao_tt~h)PevcsAcnek7ulHzq^A{iQ&3h2#s1?SSfO5KQ*J;i%HP!BB|MH=a*@2UbeA5bxk&6{&h-)ezC{g+zF5*)6Bg$^qcBG& z_%qkfj1h1j@Y>ObrQAG6Q*tc}VLIXpW%G$v3)A>U7y=PDntMWuaC;He<(;{=lbZBW& zieQ{u2piy&_Hk zrM5%8^XKRhy5#r0#|WY1Qk&P!OlH@L27D7XbSLJLG^6Mob&;yfTS(53>?n;d0lZo5yJI>5yEd~>+giHL|tW^;k{kN zsV;n6kD6&-_g08BlZDPq zPw%d28s5I}x6e$4E)n+LZB;etL)0tK_x%a(<>9`c}mJgbBD&vWQLWPwpo zyYsxd_*(6+0V9dqoB)x#_bcAwKL-=?U=7gB7_WRVO{A zCcF`@G^qF!EsL#>$rEXM;p2-BcIL}QJf&36zj!qyefB|jkmp*8R2UTJCEdv%`rIoJ z-Umqe$N012hE2>JWJ8HCySLGXJ%hrk)?W9*2qf-s;^yni;lh_QsSw`wd(UC|9WXFz zJ;T>{6`6%_OGdE)Crr3dZMn%KbtBrYh$-;?I0DVF_HnUkveneI45SW9H3=)7nCz@mWh{2+u99ZYWst z-Vi-ieYF!zwma#ud3XtcEk1EOe0>=vgGb(_F-_S(GX9gunePLjAP2{mzH4(YqzhRz zBg;W|n0l$D(!&>7!0W{J8*_PvX}8~=0%{~_s75k6OW$>$aFPcmGYsuc5!R$$1^7-x zOClPK>feBxb+TPKDdDe#ZP47`xNq%LJ)6%cvm>B8CJ^}P=00V*86$71Z<5s%Ux zDm5Oeo%oVNu`<4hV}*R9kzm(BNgj`6E+{5M&TiG{>Q@}O@m=HrO6BN&NKX-{MWpmv zPJq>#(3jni;UX-iTFXOFso4qK*?|3N2rP`3f+TUIxj1j<=1(vb?oiZpzUiH*I|Mm5 zO>n>DFKT(M2KEo>yx{~rAb7OSc^k#qjdJFGvxfUCb|C0f2R!WnrDrT3mpN# zuPlIb_qB?vo0W}x4ga3R8Kr#i#`@;VnY?wFv}|Wp6ge<={sz8k=qqoth*Phw(ZTHZ z+tipUS7bLA)ZgFpYOaBS-JtA=QJZ9_>@bqJbuAe@(eMG?43&PY5Gp63L%1S@ysv0& z#i*?V6~1bc_)NQ9V!uKCr|#d+bVZ%2=!=0fp%H}GtOW$>Ruon4bW4Ut$KL_K%`%@} zc@}z@Dc7F|`3FdE9ZXq}ghM|U{cU`TK$KfP6D5X*RxzpuahqTjRO?pM;os#w$^-l$ zumS&`@`-GUq}LbT%$aPkc&l!}_J;b4kPqY@+i`scs4wZ2bDCGDogK1SbX5vI`8cfR zo{~o#f}j7>mg7#U(Djp7>$rChy;{O*%sbPWz1FHz%{y#Hy!EGxU?CyWcH5?;Ows4Y zU`&Uu_k`vx+|}`D-p`@v%yt9;MjxAAFYq$7N9fia4*}%Ho_Rpw0vMho!70E4y<%IM z9&}e$wy^s}M=-@n_45K^Hvv%+qD;8UtYM?N?85;FTRafwV^*J;?jIukoq8C(F8j;q zo_0zq-8y)+$Nd03uF#iJiTxM8v*h$OZHTpFi?XtF=&YMu3z<4 z^nRy<^&+h$>`Ahyum12d(*yD}ZMC;kZ zkiDEWTvL|5b}2)n*p9bPp^A4IEVMfsHhW__RlV0}L!_Z=5r&R(v|fBf9O4TIb>D23 zz%`u&p0_+JSG*g*rgdc?6AWbphZ6qf1Uq@nmDJl$QLC8H`&VNYL_eU1Aju6E=TWPJ zJ1t8t+cG!t$E$ zRn<3SOdEL#FvWRWj{Z#7PtH_78!vdA&AfPHAm*E&KB9mIHC}kNEF(mCF?>7L4XNwv zJ;UKUd$T1uI}tJB^z4{)6cMTUT)jw=<)d?`yaiQqW))&ev!4wI^B#2;m1zgG`Bg(JZylLx#tz96#(@I^y~m~u&&Dg0ut3`c zTA2iuV@GveGQ%HtskF0*Tke#M5nY?;cLS1*L-j1+U7PE0Oo>-F=P-SrKB?iTjfr^1 z9?YzkVG`6O$+OA1+&r{vO%_GnL^^}>BKvc zU4DfW^`KQ?-?M-d&JlxS6^V&iA@7ZmjeE1LgAbva zB&ds~gu!^bqDU#d*g@3=Lg34_mte)ZjV1~ z$Ya)>JKA2@J@tAwtuNGrH?~8lhoLk4{gw~SJ_n_}2=at-wkJ$vp-!Pyw?DK6k8}T7 zzp}ham9>6SMMns^nysomuPEZvfrJ`@(wYdxWR><=1McjoSn5~)Y_s#)NGk6VVhVtZ+unqg1=9LQTHapkb>+w#&!t zLs`-`8qK;71+V_~E9JSiHU@`|57vTul-<(~ZkuU&3G&Pv1u}Zl{IPOY{;E~d&PD5n z@`4K)Rk%3fMJ<6$_2W&}X}{uP%c?emmJ1rro!zxY9!nkM66j+K>&<|1>JD3~d?uYb zAVD63y=xEmK7G>T!tc(0jR$_b?qfK`Kb?TlkWa<;BtD+y^{-Ex)=y{{cU(Fmriei;N@mh2lA0$aH?~sFH=r4m zjqzH`0og0{Ssi8TZwG8dOy%Vh>O0&>zv)ZdbZM9R_Ey){{|?o6_iyi{jnJO>Oe-{9D1Ki^-OsV7dXPXjR`yOm( z-qqGh+mF^feSMja&zyU?mxtX<=j{~Xk80)Tz4!JDwTOIGwI)&Hm2y=E*u&r$0!Km; zxVEI6=IVyWJ4-&DndYu%mZJIl_gWt}x93NWu+Aq`<(oDV4E{3Vv@H1Lkl*ftVNBZY zskj!z-(&DL+D?0gOqJMmKi|xwbbpgx`A$xj`}@5$VRVkN@5wPi!dxcX1I2wW^TXWo ztVu=k@!jU@jMwqdONg&=Q*pq)Os1MyPrzF&;>6dLubH{1?DHlR>?ogX2q~OI6Fnqi0ZhD^j(PeC`jAYGz{8wxc5x$K*{8FR{vEJ_m$2s2EaLdXk_DTSx zd}R1GGTNavb!n_?&wIVc!Kw4G<}x-S%R**fwwGN-$3y+=1IlrxR8EW;AU^U2@I<>Q z!td1t5094=o2|c-o^*Xk&mG4=qsbWmS!E`>sDMHF!%X1fM}5xWbG8lH!SX{Ff^-_| zvLe?zRl+-=x#@ZWbr}jup%l$`+!IV`>DLzMPA-NwmM4bq{XE{8mK$y8>pcN#zN{|i zf6=NMHKk(V<#6YV`6Kvs|jy{fH{Pt=eY^{tB#GG@mYEa^S zvwwYSQR=fIxu6u8QG$pM#d)C?Eg8s+xtG&$LyoRY0JE&!wJ_TClqfvi)oB@}>|@WCC>BV(w3Ywv)Yx&qz&iyO;5r-Xw9nA>k{hr^FCyeI>%D(O@M21bd1?fY<) zC=}mo3CbG;S~7gwlu7;Ly@tO858C^{#_nzKgIX39Szm3<#zS>I0W- zNmTwpFQTP#Fk)ZFOXLe|2Arl{mIFvhwNjkFP>*E!c!U)AZis!hFS5nW0!I8?_i6{l<#q@oI_G~TccH;7mgk_O0MTleR zj8|WPDjrzWT-@XApTD{sV=KZzk1Si&v^4 zR^LkTdS$^3`v%_4v^)o`s%~xeeZmYal9$Q&L&;1L6}?sXy{}y}&bIStzfhS>o0N7N zV^<09QDclZU7Ufeb4An|_jh?+Zl|p%+rOa!bu2VW1#Zb37g5KWcU7+ej5ty8@dB~cBvB|_aXlDYY zkJPyjq5{ZO7spbm45#~FX|ZU|?u2lap2Fgi!rT}J5Vz+nPN;o9rP1< zj4%hEGZfFTmI{Q6J3rOY8lh0aVYZV8hnewC(Y`Tyyl^yNYYp*}?^k50lR7(K<`{c? zI-vDGb{{LfE4}pfu^Jabt=@HMuv1_?TX|aRm6y%8b9erOtuus&$2nu=3b4pBc*x^x z^DFV4J5jzT(#+;Nc%oLSy*vI+>YfQEHa6m#h7-+OrkR5g%snnH1F|QkYqp(Y)JuTH zl{D)Y(yq^1big|d>)-Rjr1(Yi{dR4sEqpNl_5k-Uum;;(pbCa}iHSzl=FdHjx_!j) zZ5=s`-?P?OFFof$cF(Se8vShS82Z^3=(5?we5|9Gy^v}e%et*>ce~jOC?O|#`T7q* z#y=i)@6`ic9~wg1@>u;z+}FoXqh~hukf*qJq(Cazgr6wcsD!R+9AL7}8)~x6{HTYT zba>qoH2Quao69OYa9?kaZ@=k}@1m!R0OFsgQ>)IZWhXw?M>ZF*$mhx;CjjlV#76$tX62{5-ZV`goT;g}R8$?q+H4KE^0$z*C> z8@kV%iyR~ye~3Z2;O18;-B|C6p$T>Ze!Ut~0{NvgUURv2)T0H$1iMjHjaja(mOcRN z1E#NetR=Yx)BUHtBaR5$1WMN1e^>yIEIznDyNlw{t5~oPwrA|*Xtj6Hm7?-*)H{zA z3p~@pt~=>gY|Z(SeE+PvAL)Jj-1TFEbm)ooWgQmZtzlcI#2ri>Q&2A_z_cc2`2Ew! z{tOBp_8vz$hMF?Zv#CXExcn;qiQW5XzTq9^veRW)@mQ63kHx@Gg-C-*C(b)sHO!xY zfdHRbE)r+fUZvt79`DE`UcG1vE1;5yyuz@c<75Z45c-&6_7A!I6yw$R?;hif$|&#{ zOmAw0W-N_Oz_-uxmMo0Az|wqt_#7Oo7@-uB6$0q_YJ)~sqBC+k^{6JY&vSReis94s?TlHhVQTj_gfNQ%^LrY zwbgZ#*&J#TvSl!G;*>>wEc5Xoj@8hwPad*zElwtbhc z;;pAtD0=0}vRpumkF_w|=~uL;8M}f`D~wLq8DJO@+P_T@#c=c#w$n*fW9u2G7H?unWJG1qbHTrOi#PW|;?|I>F zoIW<3?WlK~$#j@_iiEV)%iB;tF0>xxx58KFSi69w{0-*YxQHbPN3}+lPadi5z$?0d zGqbRj$$v7@XAnFnZvL&;Uj~97&kEMk-F4K8Gn|}?kmaxP8ae;A4Fi3L!66!ca2O4z zG9{O1Vz89K&wTcbY8~cKC+!IvmR1cweJI_>?x@_o1=R2MI9%;>*E0|hI8j@h=3vPa z(^Z*4t6p7v{>R~W0eijr^U&zzlr{;D#cFg8A@grabjtV8Ja|CgJ4E?~)`zidAxD*c z>bu6wl@p2v8@ipl_JS?(d!ft=U&t4qd%J8s6mZFHFZoe%9d5K2>Z|M!Y`2fCr|6!@Kkp z4L;_BYZ@@$r@Rzcz3j$qvI8<}JAK9)nUaL|upVWtFjeHELV?d%Vr~NKeNdU=A^VeT z)i*$RYO#3e(Ne2>Vv0Uq*{LGKMODbUUBSSXTIo@L@7T!Xg~qZ8r*E0M(a6yIeDO2i zJZTX8dDa6QRc|Ut#!uHy%cr&%53~7<$tPjzLJC?e?z21j@XMUqoz*X+`>YI z(IUn7chX@ZB3d6L&_Pr#T%QJ?tn26}@Uz*JgtYUt*9p4&hr4Bdh}vBlL*Ns&_LW{( zK&CTLU_Jf3^OPK{826%_9X#x|j}Kd`$eC46+-WoU#~FQd<)o3Oh5$%k6xCi0j-!yv zJAmWn$He0R)E6Q(usc)R^A*!wBvwCF6#FCBNE(jB#-3jlvnGc+{axLCC*3|FjbeRF zu#nzo`Bw}zdw*%zUVzp(tg>9D5?EEZ3_5_9$Y>S2n&PFHziL)y3`_~+s~<-z@du?I zzP|sM@y6vb3>oM+0F;D!CrF~lHdEe}(xrr>p(dN2jW<}~j|$#js3!5%33W+~1Wol6aUG^14&Nx=R0xR#gM&Iq4<3n#FD1 zCBj@OWGJXOWFG$s?65iuP_UE*uT8f46Yj39J3jp&6&;`EsBU#a*7BT-)P7`t9bauR zpkR~v2#;gz>nvlkNVLLOBh4ZfcMVU{JC}7!U^Bf07ot{pCg={0?{<#@7Mt1i?b#pV zFmGP-D0~#&L56|IPIj+Wx+#2$vwMXtBz6 zlTMCgZs((=)F`3$RjioVce<(WT!Y#B_e6OidxlIL81TrWjvjQ=s(JUUNdkE$hWv`u z9Cb!S-hegICVQM8ha@bfd|<8jhY)?Q!;z~RL+7piHQ*q+EOgfhgC4M-IT0GJjK-AE zfCdm*ck_<|MH$`Br5vVC-@V~u_l_&yIAf8Wx)zMY;nBQ|!gqV6l8hO&1}-Q+El8ivXLZr*wgMZTng>e+^ApN^F+A`Z83DL(XC>q45E>53puwo zl;}i@HbH^}k%s65(W4V>Ly?2cbqllSqQ?nO@Q-5x`7JPpooI88Q3l(OaBPyEJ zH)<;Osvb#r&ARGtKS1z6_m>23gj#WRQ!cyN`VlmJj|%DMJi#xZb=~u{CK%7!Q4*1c zpZfF1@8moN_rbP(Obi@Bu-aYI2VZtTFb31?ggK7)}(;P zS}k_RjOU+mh_!D$TYf*?*fDCBJ1&ehtlK|>u+MM>LylyadS0;Za&lM#Vy)NQ>Sw^6 zFs)N6^oWi-tNzI2BMd{YgP|+Cq9<_6Sj=(Vb~)6>KG8wDNO(a5$k@ZL_V2%IX=bat zbK?f3Ksl!g02>1ZU>|Vr)e>Jax_2pbPIvnA)i6&+2{l8FVctqa22qVlqwplPn$%N$ zSY@$|_wZ%*n*eNVd3$+^)67Q9T9>I>=-5!;-qYs7W%kqz+Itm}mMk`~7VQ%6my5-g zw677jdk2im?={LYx&sDr`DrQzSXqz`0t3P?n>hN@9dE~q#c{Vsw?A*ITCwM?vxJDX zT^qL-!II--Tu=z9Fxr$WHugmYExNJKozB~RhtS4Wrg`u5^}Lh*sPAx*QT;Q{mS0-BY%c8JROmNs>B+ZHC#!JZeK~Vc#-2>5kFG` zW4)`P{Cc0SDn2%RXLhEtp(#9j07Kzqv*i(0WCiMV-^bs9y~3*BgUVjsV7cNZ-L}1& z*5(fgOx){`sV#Gb!*5Hg%;X`Ae;@VWG&z&QqJl^Gry71?X?Di)k>NPhGK-{tyxCQo zfTsrB8ik#^`c=uVnuE#82CvDWK?tCgTdft-QkFrm$EP#a&VfvCevY_P&NvOJG89U@ zas0Mg4rsG&Nh-fT{J)? z;+!8GBt?&2)*7ieu{jP`DY!o~DmI`E_I+60Vn zT^C|VTtC<7kg&r{X;smhxGz`fpngk5#w@^o{`(>t0dmfUWm52?qj8>rYHne3V_m`@ zPyzdN6Al(}u6DnF>j-aA64TNcJb_W^373$L#jkxjn7o$?#%54jxpn{G9y5bFZ)I}` z)%s4fV1%R44})$*R?oz1oM8jVMhSMFpv~oOgq?o`&5C)b#rTcQV!pw3 zW-ut{R-Tkd+gW&vXu|Y889DvOBoEnt;a@6R8($ovg_e0-Qj}QE=qr*Q%PNQ6>WSr5 ze)1Y9_VGN8shD?EpuR2}3Z|5vDwakn?UW%~G`Si}sd(Kdzr`}Z` z6;yE!67D*C%nXr(Vd|HpXY$~iV!D)SB(FIvd`(Q~zOxWaKN zmYAu{`0(2PEZPH!t3SN;CzGR$ltDTqnk1 z{LWjxho4>d6D$;ydi&`i(8EB(!3qfL&1Nd8;juKPGlL%Y2g>@TFL^KyaOK!UU37++ zleAnza#|=_^UHzrp?uyxDqDJZPxFD0qNir7E$wR=zH{VdDP}cx78SU77rcVbgwZ6Y zrjmzj)#$!e`1y)1iUIi;-bX9h8yY_?j*W+Ew?QHr zV^l#mJ9Vw5x9T)*#bWX3=i3Q5lJd6S%pf#K#vP%UmIWFc;nlGhJh%J*b;E?elkrKv zfyfFA5R5!UiXcj|zL|C~oD&I#?&AUF$OjCuDc1om0Q~>w&wz+5gUG(JTcJ+q4Eqm6 zNwo=^V}_TNH0K_{M^IaBO@Jp+L=zv+!TFN{?-yuCEAr1p7Jkp*eDG`UM*eqLs>{r$ zFVh&Esn}*MJSCI*&zbqB4E=i%sAM=yHQSv1G}H3JqchO6;w4>Sbm*I>FP~>^_E9xD zeCt|w-jI3b{ke;^mv;dSm<@UOODqa7h&UjGgm8|F*ZF$ADRC4eqU3e{x0(KVHDn~G z54Ky=6(7kGrpOP@nlF9o+!X)k-~V}c{=SI8f7uB;MIyQzCX#ml43V1dP0 z?1110_XId5msH~bQ;utlw@zQqm7N94_{Xt)daL!9xkZ4wcG@kJ=prG^Qf3EJ8Fm8|6x+}hkxD>|F~0l?A!=18|!KCo>6^HF_Qsr-GBAR zCxQdKGpxl#+3(K!$DWepp)9hzO>^>t-6J}q&R{|zKKpI~gd@0@0i(EZpz|jGmo$NW ziLA5#bo~N1&JUz9k!xoMga4M9aBBU~d{oAilbWJyS2n@MB@{GL6#_2-pya+EkMcANbE*{*lJ2+X0n6zFWC@gYo*#^ zp0oeXUz%@%xAq#<5%~T7SHFV)JO3J}_Kqm&=bc~F|8HO0zrB8*GxP|P({pP7V=wZ5 z-^~AgGyg}P&;NZg|3}`&zrM)-zM21jc{7O<@8t|VyvD2jg0mG2m!be!uWVCFjc~oa zqx1nuf$Un9)>?B#lIs=Eg^rR8t=#Pd(bK==lg@ib-HR;I6}TRLkNvrVE(vF5uXjIagh@&@qavB&-S1+YXFV5{8QO}~EA#(x{QQDYAm z4USB|yQMgfT3p!$0-Sg$FeB?KGwq2KH2!`I2vnYy0m~T&LCKx@){}q3NumqvG?ESh z9oV*rb7mLjYHCqfE3P1O2)4-aUq+-n;8_p9aC0WCRaEXZXAeD=EV7D;E~=d18V5Ga zuZ&{{ZwbS-v)CNYLJ+UkWpLPTa3y79(w+%7RMj@(8QzPdW>--nxI7bGw}c+f7FEqW z0{R%FNr32-U8@N&w1wy3%J`i>l8lxb6Ub>%1c#Cu6W3Bda26lBLNu-2flh9FX>@!X zOcFf!%8}?zwNc<%PhC3#(OI_$!DcQ~rfP=Xh5?CZ>x;p>ZXT`!L^2WW-1uBd=%(+( zA&ke0{M*R0+K=x|a5cIf#w>2n)BrhfBv?S)^Tuguxs>|EaY~g$-23~DHA4v{? zkPDYHcTD!Fl;ikzgNl~%>sPh>k}7sac06b^$dr!)KVMV0n{{^6>pj{JIN11QQwBjQ zUKFM0ED?P?oh)*PdMBNt9Qnz;_qzUD7T;{_n;YLfJKay=%dSd(H|h0R!}J)xWN zc**ClS*0LUgw}1#dD?FaSO2=3$5aqhzJUeo&0C8?TgnF4I#w&h50#PmSJ!)A;pnbMAwR3{l$_lC;dJ{;~v6rkKru)!T{)Ht`=+(T?UzgZpAV4ATL zdSsnLDsqqHwk_B74cdh#pAA{XC%Yi1Qtz-li@`L z(gknA(`wbR3$`>a6w*5bhx)XXdjz&&Uv~_*RY#6$Rzer8Y*o8AWsqU72zmdmyWP8HVx+S7CqU^!SDMWHwL2q5?9HS%xjR6YWfyP@n zY1fUZLpMGT2avM5w4~SX!k|o2aX0OQFM;vB6mJ}QJD7UOj+}@znD~q*df9w@so{>z zLM)4+X=v3ODDJw#+hX+spn@Ol>c=vQM#jRvc3kzlCY zI@vS(bp9oyJ&)sg$Pp`lQX)EAbWz@*Aqmyyeo8(AGWo=->qX^lrf#QQkF+DtrjJ!P zH=gV52Vic{uJ+MeVNFuAAhikBCbMhoJP)ho1Ek=GHNjIi)>YYIqShiii#js_*t*YY zwY=QdOYzr24u{k_{hn<2pWwPGtE@WujPC+jmIE+U* zDeND5YTa0<$?#EK;c-ZDS`6vlw)+%{}8>*8J(-3_R>T-~Ose zQWyQ<(j)Ep4ohcd%fs0~F+;n^UR%{Ypqc8Yh9jngCBqb7cw1#Mveyl2cU~aHO{1Y> z<6yeTZPN)%56FjRvBjQ0OIG!CU`E^2Tz3?HT$B^1EJt#$Z3rV(ZMp(j+!aS(N#FZ% zCfi9Xw-IGh!NxSPvWl@i*v7NZY%G=PR_|uocu%RV^gk_fCr$c@S6w>@@$mFj!^fk` zQ8<7(kBGkLVEI*SyjNk%6?}#I>03yOZC6={v-ZhHRXR2&Etz;lOBC(6o)h9F59Rrmxn7_JQEKMiw|+p~VTULWo)@r;rBLvI{D3Hc2ZRT0Ti7zbp}26s z7tzsuKw8y)#C$9qb5SUR|H|Ksig(R4WX~QMP=v_Wc0Y6Jk7QFWTL+#AJ;_kQwSomu z_eqoSGSfZ}xQ}WV(625^nNeh0s2w4Xao$}S4?dO2ugreA<=h(uR@s6$FRvxfs85?u@5o=u-8Q~_JSI)7j12=gUQ{}K3+8cl42c~`dpu;Hjn zSP&I&?*Jx2CLPb0r0#-PNe|dZuY0XWZAt(SOh|%OBu{!Z8E}~O)e$I#*(^AsQRdpW zlgG){E*}-joMN@1NU=( zzw!71$mbL~wsC0$PbmA!g{}@*oRScb zXpt&jcM~@h_K}+7mwos4iuKk*3FRj)=an_)y+SeK-w30(88k-rV^l^5Jxe^#=ecG;pgX*Js`ehuvw(A=dhRgoJjMnnY+dJC#9BZwckHpt zI$6QY*F`zc)&-90t@r(VKAI|M_mp&g zh&%HO1DBr@k(BFByErjC7D{c4*?!44bud^7*~r;h${ls(dsgtY-$2tc?Vz;QUQ_RS zxo&WlZn#cCLtc;(q(5MlJFA}ZA8OI{CEe8qmpRDvuu{@*XXxUyNau2YU5#jL ze*~Ao4J?UVNt&6Pw=r*@Hr{X2#5>$OAFQHR^0&GOyfD=3IlvoLsRV%I?I@j-F_F)p z%4a0E=og|;35%RPPnYL~XQL@DEEDqWu%!~*qWHrlNPn^SSlvv_kAbMhthzG_P4l|> zNE9We?Si(0`WG~T0nJCL@q|-{C65axu{3m{=+NyYmJ2_yT*J%oF4}--bl)bRqTC5e zt`TbYg|5S{Z~0>RWZMM?_P`zEF`S^_w$a39YI$=vBd9IwT_xn-(C4W?lY>v8J%&P| zH86p-drk69sIV~Il@8rLVpF=NHR8T28gVbM&Zc)h#2{&*8bhI9yRI3zxo^Yr>s~Zi zDMaeIjDI0C2xQKgjo?*tz>sjH@Z4iNJgR=7)ZYv zlm7PpmIkBq9qsL`%?qMVN^YUT`O;MEur~Vd>yDyd8n0}$(Lsy4# zbjf^?aJBDv&)C9A(iNsJBVkJ1(tQ4`7Mfr8JFg}Is-{78TW@GO`m^GdeH?x zf-Y>s*t_C@waX+Zsj&}`Q;Sa8&l=qWPnlZ!Z%Ss2*B@bOt(*S@V@sjw`9ASSAPn{SI6?#r~&Zt@eY| zN)T+9zb5e_m!;u5Edi!e+thnhSUumn)ZR_j`s?S-f!L}KE016n-a-^>8|8B z7#atV{9`S@Mm_PfKfsP}+e03EPf>esToGx*ggD#qVZVUI9jz$+?z?N$>!aUajfK!3 z5F=DxUBYdMu^no;bp`Vp0ng=ry34+$Bk;P)igc_S&7t4TY?i%&wv|jw{O)C$-9v?I zH6w*gRuiH8L+K4j_L}hH3HTe>kGsN+RNkz6uClq-zo4qe0>gb)AdR-E-EM38+eQ}m zQ_NJT1BrL7#Q=OvX50XHJYDedc61KscH~xOtm$n`-sdt?>fK}Z zVwalnERJ@M{!p-DbRpy+kEHdkcIxlL~NJ z1iDs~Zn4nZAO_Z5`%GDvnQvF7XoTWVrMw-;Bk{J|8LTGnpmRfXR&}u_ISC9A$$Vcu zyWrJ3Qwq${uM3)tu9=|bUq(5kU!{ce^l(_qHpyG#hVG{lxY%QNcVxg#tvfbw7n&r+ zQdK$Kd}sZFbFWLtIHzHn=@F27IC5=M{uJwPy?2>xAYRl)yYW3UibBHXl}3of-0u!1 zGzxH>7z&fk;O}umrVf(oDPt;!xn$K~Xi@IeDdd9(r9`765J|*MC{t5%CG~?ek3PU; zPRu!HfA4yBZ-Vf9i>CLL48Y|!A%qito9J*skKTFsX$|a&8>f5|u_%6)1kyQVw>NIq zbIWNx(=*|48z{${)^sPm4Zq0m+edMz^_ez5N(H7hJu|>b*C!Wh6v}KJ0Ni8=fOl|9 zy@n9l57~?&u(PHVrh&SuG0eirfNsBSllq2i312KIH@HjEOTN%p+jgI}=Cy_ur1u9s zUNoaa8lW_ORYs~9Rx*{hI2WZH3K+wF7vj%`>>S`hsi7s+Eta$f%jD-Qjs-r?)&n)nLnG+|_Uhw9LuavFzkH?0Eca zn{Ggn)d#ay?N&-fT^6+L{w8|^z;b?lsNH{Usn@w$(VxbJ=yw2g$+F2ctJk-Y(g3kf z6fc#*IRz}i3{J7lNP+<0S&OW}3X%2%be3NhIS|m-N?vE85yam5QRO=x5oz++cM-8( z3c4(^Ky#!aBkbU}4@q<%%O@%6iOchdbkDkSf zm4}dlzx51F$fy1H114Pb>vZ3RgdsB`ycyjVBBX3@re#bstiRq|3mulVARu=Oj@A=d8TjegE7-As4#>EgG+WRB z5+Z&S*MS3~A~am3?a&UFJiAv4$xf3u_f{I;pn|LQYa|2Rcx2DxFb(Whj56ynD2sBQ zk04+AmZ!Kb*p5?PLa*c>h5H(MXL+XKQD%;Hg%*?xcdFI?YI>{B9>|oCD!bK6R0uO5 zb^u#Z$h*a89Ff5s7u_zcJ_l?bUGpMWO+de*H)6xUTcb-Esm!0T)oj)dqQXluM!}>j z0YB$k%n9_+l1nZi5yMr_Ka}2|EjG09LiKlDTh}vrwN)E#*cPW*ACl3AqNQ3I>?T2W zwn##TvhOMigaH7Aj4*ry+5T?jd{M!J>c<+Q_H z0W`u-uL($^K|cJGcw*KiMIeTTcfTsU=Nmfp%iZIX!d0zwl5G5WLDb7YUU=+yPRr1X zU|Gdwl?p<5gu8rWY&y6qR}b{yBrVdumw|~fic+_t=L42}uk5K{to1U=VDG5akfZm& z7QPG8SA;d5ZM~iRrZ|Cp0%5t%XQ-IH1e_gwBXrib5RKDTlQ`x11|oyr1x$v`xZj0m z?F6yN*gI^-{wR=<^aWkzUMR}PB_2^;&R*m&-y|HCD;YvDf zWKAMEFLLF@QRlm={!tT;a#XaZjV%;*kpM%i3@(}*$5`Z}nq7b0 z1_xAXt9k{D_kJ;jpv6NDsVzHHWG;LyNIZa-1%#`%s)f5#ek~|%ytv$-lw4Rfvgx5} zDZB&DpYZm!zyaxiR<88$aNX+$zlU+-2gBR*`XL8`QN%zaML2yxHDcEys^Ae7++@wf z5EKG=3#2nndR#~xB2Kn3%7h`ozj47)bz;@pxT^ILRvsgdmsgc!%B=Sd>t#h0Q-d^( ze&}AglvU3SV8;0Z|q17V4#@AMFmKXD<7CZAvOl>smt%;R)2y|1Jeo!rrp9ZD1G zQ53u~%dN!TWZnyKGz zX?*3yuGr`-&vxikoR`z;9^sZYHi=$58+DrBpm8esXY8Lzzt9;kCd7-jhBvK=H3p60 z$7@YTJ@gynKa;Vu-=)=MVJe0jt%Asb7ks$84(t!ImX;vLHC_*kkP{B$lZ%IK1ScE5d+{iO0q>Z_x&W{WNzq@*tVD=KS)d`FxpT+ns||0Y z(@|1Dm_6GKX++vyOHX=&xx^RpYn*+V=7-wGd|jRQK}e1)2KDzJOrGX$HSKl0NR z^Hse}UGqh=PSIfKnS~2q0|Moh(b~J0m7*BH#ds+|10S!VrX<;@P-C8{tMt5ZkG-qW zk_k%Dcn-Kv`eDj|JP_~A`pST~@V&2x05*(4ZuiTIt@(t!&SP+=9i?aM3U*5(_78Z| zu>eIO$M_%#_u#tTa0K3QfP@Hn+Ps7Q&TEy}xKd};Ck5%?HuOWtOTyxtdJYulY9{c3 z`6hXf!fKkxUA`hcdoP%DZi9rBO4&=MlNt@mMqcY-!L6vVA~S)po|Ar$U8a15;06*} z8Q?RR0B1ANCINWT`yc06cpJBl%*5JP7Ps3Xq2ItI$jsD8EhsByEp)W0`u*=!qo_|h z@QPk%K2kAXH75j`Vta<_@7wo^?Mu}Ea$CM{0{7wN>K_oiUY;aEI^ob|)&x2`Jqu5O zYFJn)G>(imT7iGjTUw+{zB4uv^KPqlzzf@Al4@4D{Nf|6<-p1+Ai;5Zy@)VgPNHnu zEwWwQGQQVYP~50}a0pE%qg64~q<=L^UY9wcuBjK(L&m@i89!bAHgl+8@Dj0mCoOEi zh~kcE0>So%kmY8S)Tgj6`*?^I>wZ6Yu@Vm4z+9Nr6mNlxg}Qes>{Ea=Oz(FSD9rmh zQ4|#MUJrcr+b3yWVu&@=CsZ7BD$0<~PZ+(Z} zX+Smxs*Ixbo7g!D!p}rNol|^N;h`CxHH~4Lp)qLL7i}0;Pyhm1{k61wiu;?+S<~%g zDX`BmjG9v?wW_~5s8sKo7*ad=O5H+!_;ii8TfLGn_z+sXaV6l>*F(D^%;%joPZH5Z zs-p_(S7O#OjmRFQpzj_Xu{QD0o{^PJ=r|afNdO(46SR0FLh}BJzh-#UBT)CjRN?_? zrNNR;+JLCH{ub$6VS7gnyj_0vlE6_bM%9D(>PANVQ#96>0>62|cL04sVlK_6&>7kVAS*TEK|fKv{q`sBq)# zV#w0mk6!K?Ppt0)&Z*8~(8$a}H|2wl-g`}8YslPmcGsw^?-H&|dO*c6P*%xV?zvZ& zxcnhGuLtK4b(t-Ww-I?A)QDWy4HxFCu9VtD0>>h|3bWNWz#>UoTDizq-AuoM0%0E5 z-v;I{}r_74u{JdLxhv{o(E{bt7k^wGI=Qk#*G_9K#R8K30*tT(wxa z&QzFtbKP0XK%|w^1Z>p9zq7l?30X{})$Wr0!j?_TuAalG9;_tn_i9YO5svA}lCSf$ z=rM(Vv{65bDA16Dn3|eZV78-m*YR9^d%OGVlWK3NP?QUGpvrQr3+|#YhGhgS3H~LC zBV#8hHg__a@VVt+b^qEMtYnO{FQrkofSqT$uX?~{06u(nZ8Onqg5s0?#@sOL2D|KY zKCEudqb|bK*^LVs7sH6)zpzzH(9bWI&CZ)LsrZ+Uzan1A7@^k#E$L$4T0&}HU8N~}P5HR_xxfHv`E%L^2$*<#L#q){Ze-kFs^6my%T}_J z_H-S9qjsU6u;%sv4ta4ixbL_yY7;cyCIxrWjjz6L;kqCMfe^AtZ0$8bexpr=%_Yi5wHmq4ZK~sO?{=!*7$k3Xz^{7ZN~-5p zmsFE6n{XUTiT}oHm73;e#LGFbx9LywjY$knUED@F+;B8}KDlp>C5<%egigYVwEq1- z0${wdej|$Zxv5OEA)G*Q!f_Y8jl=kD1pIR}mpd&{w_jWH=f4|$q?Y@pdjn%JK&Rm) zg4Opw0wC)Fp$Z0U0|=R+Gew*2yO>u9V3$Bh4NtKAi7WO|6O5cFNw~>TWJdBs5dC}V zcqJla5IZuFml$mnK15irnumkL(d$n>RnEvSaCNh*;tAfjVU7xbl<@o)QewbMtIF3i zlQ!{JE6tHw;LO+6(C1}nAbF%KY+j!h3}V6P z5_sC%@@k5PAdgnt$*i~56<@^cNvz1y+mse4DK~*xsIAMiv!;}U<#L=ZRR(Ov#z$mb zZQ7kU%Ab9m!W6%w;^|OeAqJegPHkKUi4G6-owveJO4|O zMic|RKxQSkA+f8m?||SBK3@=0ZUKdY$qS6L%vjv)XM(hc3&5aolt`p~Bnf%v5?+v! zPImR2*4#TGtt-MijD&-haWlayOj+mo>nM}MGS+vrz}Gz%@Bbd)tW=J2Cu%j03#^!k zZ48G9L2&g`1ZKvwb9y-Q&jH1OO_^abwQI@0D9LgK4(@`Y;$mj(qA);iRsIH0qYEvf zQga}(@@u_+SYds=Dw=;C6Uti;SYKq;k=zZ2vjpJq@pH{kE?_uU(;~TP@!W7tm#8#E zN_$1{cRRvTba{M*PS~rTwK3Wqlg*;3eSm&)7Fmol4!8~#oIg}a#5F<2;-!{`Bwo1!3Uk_*E-2*CA zdp>AD88sm3Zz%HrzV^BnpZ7D>L3?8!rx}BL@8p0D`{flX3*ec9z3!Whfbq21E}ghP zv!-J$`1rMy&d+N!$zlOaBkAZB(($n^%C8FmMl6gcz=#2U!App+MXFDwz_HKXc#bx5 zl^KP{xs86dUfT7v*XLwY*WcB7`4J3sh| z4%YEjWaIO6`VHZqN7VY;u3JsM;LDOP_iT^sY10t{bCxCVMf5#HVRky78Sv#nzu`*? zlnRPhd!v9Vq% zIjqX-Y`%7ai@!jc=2>mn@}5t0+0KS!yvCY}L^K8P7AlpnwpzFM)Q)%5u=eG?Bf=_-f(4}s zjt<=1Tm*$m*Yoj40A^`RCrVm)q^I!M{VY+ zw;4_%t3`Jys6&_ERBUW=vdoiaGL(G2nZ1Sw17@;mdGEnN3f-A}R2P7cpb(OF*prmh zE3wb6ZwCa0p&??Ktp>f>W2bFxeLkXRUZ$h2m-O#Rn2OYE58>036%t@6qB8x((qytiT@x?r~aF8H*%H(;50ltEPgTBND_-SLQ@uQWbo65 zP1#xkd-mBp3{~BYOkEn8oh5S8hN4&`-E(w!rA5s^cRw6P5tU}R#BAV^`^6QgCv^A@ z_h=DU{y9&R3qjK};5_yE5~|}jBI|FKQa#>~tPk#A6NX-5KN3Xxzh-_hvYoi9{Qde* zTk~=G6V%G_69Q^QuGLnsFzLj^t$iTmK=!Tj;W1}kTsZW;scvGH;v~#}bZpnRAIw@3 zCymMMzTL~o7dY=AGFYdquZm;E&y~3oYf9*L06CcBbb(u8p6(yj=$RQ(Z%6_-gkzFGWxlPXaXb3o-Wbq1yuTa(ZD`OQ(@LFiB~L>p9dutX{P41Vf>1{+ICwk0Y+ zLz^i;aV-q;UH89)caxX11!A}FaLFtiZN7>vN4+`;bLg3P%W-+~2CGr!d!n>*fG|?g z)45~5A;x>XbPb=_>3=wu?XnH7fjh^2tz-x12_fh%WCeG4%MKAra7Ko*-5H$Jw^_JUjAu2(u60r0w3RZZX%FV7qAcRjr0rC|++$0=uv zG7{CX<1@4Ldz-Vf@qyjq!VlHR>TYNoTu-7ztb?RdH>hG$utfSgI6xi|^@)2qFo0%R$}diUR@NcO6D*

a2-G{Z_rqLJpbJ1JS`b)xT5PV@PkhVM0iG+TvevpbSiPhLivOH zGzCSZZv+2!SeKc)j;73g`R_o+9XA=9FK)*ev*|JbdqO$r0YSxk635SCl+L9QtBqf} zC;GNK#{3PSKJm=?0XN*o z3gb$Y1JtCwQ3ryOA&pH*v7bb{*e2hD-FG9Q@kYA6{7Qw!fUE{-T*%d2LVlk$6HvC) zUnJy+O{`jh4#)mq9nKfzvt2!-zPd*K3PMHZc^G@MQgw?`f{o6F9`WLS1*TdJTp!o( zl;ny1+JfGPt=Sh^xW7V-3>?(Pdp4VcF`ApcVrmCkBK?Ph$jCouAU0!O9lsN_F(ff_ zA4apNtV}_xW`5+8j9R+=u@;Cs>x}VDnd*2yV;~Z(c?0zAQ|v%Oe2_v=PMBtF(f={p z*%>}ZNe#5k*+gFBv3bMAAVB@3=^LO@%*b}!+eQJ-TEm{T`~!~fpvibVjeW&d`9rM&2}y!CK(|&<#Eusocq~LHy4!UH+4UayUPUuP_va`i+`9=q zgG7ISu3wdJup&itX>k;J4(u&z%?pZY4ec`fTsZfyW3a01viZQY4M2zD)}~F>7J^j4 zbS;T!!VqJUZ{q&ssqU3f$&G4Vv~Fo$+%xrn>KVzy&|#ZRl%_lL10AFRJaoLm3n>XN zhDnxmNzvU=Pk(x?pe5Pv8)*ummq`IG+J(gnX!1k8#Cy$cnP16&doSRm+tk9#{5C;N zMUdE2NZ8Gy0fBkr=cmW?&hkp`t1_)i5^2N@MkAVqKB@$ghGwJe_!LknaF2Xh4Cui) zbasFEYZ+y}l|nAwD;s3-W{;*u21goUStTVCgW`NNVhqO&aLFs`0pdU2$lRL(CETJ37jAh5NB@8^o4sn5##5-$>u0SKQ1nya`58CR z(gs|xn5G>)hP0lIU1^dIC$LKFPOAe`<2)xGBv3eSi$7&SguP1;B{S=l(YRs~5Iv*@ zX;=~p@#KU!^>#RqxPYd^3y8B&b7mB}fHUdFc#ka|Acl?JM;tzo4c&rZ7ot4)hJrdm ztN&)J5)hChu@{^}C@4Cgvon2z?)x*iAXvi8fbICh;0tH6xT~w2Kp*wXaSWTxwRz`(|9w@PmU}0HtzK{E3yZZf6bq-!c<8_Yn;fL z&H@QUvbZ3>0RZ4ftv%Z{W+7mop0K^plPM#*G@~g*a1Pv^1jQMT`L|ECD-r!;Gk*=d z{&0o0y7&JhS2)Wcpf(|6AZv!b?TwN*WWj^h0YIpN-jW^I@6Tm3k{)nf0KItc_8x%R zed6m0{f}n=%(~_#YdK$xED`2i4*$Yzr{ioG5DSqPC9GGA{g+Rcv!DhO|8baU)FHf{ zKj`|`5IPUA-Keu>sK0l4>~U8Ys%65O`|`qagdEbH5LsROmfhmIp4SalqUm!L?VB;?g?=lbT-5t<0P z|J+1;>#)83YVy{xIR&VLG$V9v#2Mj`N103!Kbpk|55M3(jsEg68%N`sW*t>3lRTe6 z10Ca@#?Vpc!5(PyDh^i0g)ENW+|;D&iCaid@m872_P*$uF^B+Ch+D}?3*~)u?HK5|;vm;!emoCk3%DI;#oRuutip5YabRJ5OY&S|N9=WjNQJ^zb@4s$*@3H3r>I$XkdS& ztq}0S>>W0eET%jYwi5#;kj#&~mN%7Ctp3``coupomEec7qivpyRLEN_62~g=+Ovl=DK9Mn6rFT+fiznG*=IXvv*1Sj(>?Y ztr$K@s^R;4R<*jCxmpXl?-iRK+(nCz_!$fMsZTq@_liqN~yG=lK07np|9N!gHN?W8`FT#jM&&Q(~DiXg01= zcLIH8kf@3|XV73Z$z(&oAb!t3!61fH?AvTFv1JlSrWL62Xl^I(aAHwft)zW$Q2-@T zIF=);QS;8R--Mt|ouw1q-#x^iKHIYA`A*%#8Ug!GsSo&kDrK~3e^F!s5@}#+(OyFX zwH?1xuzzKGvI6W+myC9(6?AGg^OnN&AR5vANsP897sm88lg8HWO4Z4v#H}_zo?qDS z8VnAdEN;TDe+pGxPpXBIIpqJRqk`q5%sU<=TovJEqrY{!t3|sYi9|_RWGn|U#9pKlo!^4|{Da#sX#4b2S5V)6Ha@{3`_X-4?q;+>xql zZ>ei0UN({i&|pdI%hPgL4!yx)*_^Kc4u`=b1m2L4clYM);e$Vz;d5t+T?~hSXC*Z3Sykvy__{p&#|XygOyEyk@a!hGp6HLma#XZPRrnIY*|#Z) z<*%G8{N@CLkzae8PesoGn?tYGXQ?J22;6dNq{IcvQf2qn5k~{Y_co_I>;x-S^x|}O zsay7KKgFCI4gRd^pGlZz7vW%PL4Hk!q9cneYRn1L(j?v9 z?oervW{JhjvL{(bt`qvxAGR$E_WMU^LZ*+P3=$5b}bmusRY;xz3;ST0c>8N4+M~ z*RFN4&;8yKN?qq?Fk=94miH8hABPB^mK5)bUUHwE_KE zpn_USjI4(H+zrY8d2LU!PKS@gmn1t6{jBW&I+yLA#iBHyu%`iQA};b0c6u0iCT~eF z(8-u{mTlh~bo|Pdddb_Igrw~>9UDp7=hj39L*?K?1c**b*<;fqiUo4y`qXXEmoP~Z zd^nm?hDIdOSFt?NY_!eez4T@<$97iq#|EZX9sX{H)YVKtO||sH@MaH4UOO^{j*x2V zIjbM>Onq{_0(hgvz0GQOsnvi!p>f56j>%%F<@=ag$?j}Vj?IdX?qAUq!WQq&B?0f0 z48P9go4O*$Q_{ry-L$i?nqN1jv~PHBhcV<8AA_x5z&@$A=K`h=RNxk$60pu?aE98F zb-p+7M`0opFIvVz)Y5+TJ2r-cXnDBYnUMF5<*O9GOzz;3qeQDag ze-@yzG{(dz4mSxpX-JsWS})nEmDpdaRK0Gx3?{fjbDB>5Tl+94AVz&j;(UhP)=+&V zf3^S!|9p4a3E091^+4zVM%63t!gks=mp(06yHCZPL|06`*eF|@6fU_PdputN#>=M? zyyY6_h5s~JLSYA>-ebWeO~~^?WLKrzVBdlG;1+TODDo`u9SpL5K z$niw+5Rpo_HJ{gPf+=+Yw6}`Epg@-_NcWk(mg}XuY5FM9M6^_S12FAxFLZufw__|2 zty%5ZqAN_vcImB^PTKFvvdWq;S{KG1j)KJx%Cpenw5SYJ`O*+r{x}*&#Wq^kQ~-vd z_lPZUkHU-Pu{-Pi*)geHHTI2ZF6y7cc;ocm7`&Z3hl|W@0(+x8S5@2)fQD;8q;)<{ zxMb$(y145$c@eO}g4;BYfXQmBj=e@7!k;sdo{a_53lymy3ffBAa;f~}o5344qf!%ngJ061?dh! zKm{Zf>5>wVk{TLBN{~jnrMo+&L%LgH=o}h`;n{{2AJ7t}RH(muDAEfq5x(NFqZdEl>-F z_Zw}ZyqN~BzJJDadj(H#zJZWWgqof&*A>VxHu=19yT1eCp&upAF&K2I8u)~>4jpd@ zIbi)94&p3Vvpo=@+7t>mMRqTNKVjXz=BE%9_R<&SWcTay!P!<+ls%EG)LmW5Nf>d? zuqy&%#-sO{tlxy&lWYr(*|I!CHeY#TPjU8c?skD1T=m=Ix3r0Vn?+qr8q1yY7A=qk z&Z>URH@wV=);PybZ$=GR+ZQWpK3Mh3Xi)pcrA8i-d6mbeBEn_(8Nh?{aAMo)i-PCfuzT3F`2^$>N2*ccPAm4f8UFS3rPSHM;c0@FgygTEDYd9&52+xi&1qJ%2qrWsBUz(C| z{vvj#4ypsvt}1u8sIiFav^yH5PA8Tmo>sHm7h}OErTKS;^wa5!gs* z->X1Kes~>TzO4I9!J6c$3GvhheeogdqCI~imC9*bBx?_jB_Xf+S4VYWpuMkA-4EYO;O#Ry=_-z&;CB`f~(s}Q1*ETUV;{0$eTc_I9@HUV9 zH+%k1RH@GKp2ErZEqkq=Xpk*iX+&k`gAE5s`L8ljO6YO;mMZu?Q4@=fg zl5BzKx0%}AoWD-7@|h~At?0>@Ft0P|;F^e#Zb09uxN6Hfd=b2rmzc>+QlDR+WOON< z;6#W@SL%Gj+_|J71_B$W_M{|c@I3iXzgc)}7+>bbDN*tCOy^}_>enP{@ygZxFk+uX zDkZ7fvoXqCqSYxVw7jgj0i5R zagRyI)&EAXyu@^?!!;>l_#wTZG)zc24t*vzgsM_(-%`DY9)4(J!&bJ?WL|B7`%hYM zV#0&U03iI&(t|BK!$ib>eP1Smh#910f$|#N;;znpqHx&*3{9ienYa8%oi-*Dy8?c?^A z2D;>k?~HjrN?)MVfk;%}N+S-YvC5$Kekvfp!yKG%i0UDpY&E+2_Ot z8cY0~woCf8KwgC|IcA|QRoSEGg#Rflm=}zbZ4UaoPz!;=*^Ir@3(L7^w(5zMBzuop2L6n!#Fm$5CNL)ne)6?9l-dNl5 znY?!7J~a>k30~e<`+mu%U%#^$&OW9c6uL2`U16Bg)~sKqdMe^1i0#mn#k^V^#rC$e zWut(t!8QnA?%l7fF0n?|$~7X|f{!N<9>O(mYG<$)o2|fPgW^PD6RwcD&g1E$QnD}i zoKj}BQu4F5^>dG8G83;m!GQ#CyIlgumnS)I6&R~#KFmb9aLA(Y{a_46yq>8<@W-P! zg9+RgUS@xAypx{%JO^l$@0Rp|lLt1cCwNA_a~H>JkX5%jk#&@=={#Vt6Qye!%==u5 zQFl7<)BAEOW@z}oW@?B*)^ylZ0j;5u=(Z|Mgk6Yi0*nI#i7se=4NKlvF#6ZlLm4($9Qkh8X6q7y~04#DPRKzQz}AYOFcW+ z*S4zHUcjz9o%<6X%B2AUX_L^!>BHkJ23VE-s6E``)^d~p%u$-xG>0>C8kd&u%#>Y9Mu20cR8~=RI)Gk zZs6=^N8;aGR{Y9kJWe)V=czd4w4Jtzkk`$48_REN)_aBEC%xaxDijE0+`g4W#Q~4{ zXW@Xaz2Kom4!vPlDPZ=QC|u?3s*u2ce2S3p`i{cShCQzO~9bIXnC0Yc_ihx zw#nnVubU*)fa5K43%tCL#S^|c03TVGiegJO#=Gb-FN3R9U09+Weag97cqC3O;>AE}L zM>Dx5KseyD)0*IOH}@PyqHg{Z-#t&s6mUhv_(FR?4Uc00s5u6Dj88D$ZFY&Jp>IRR z2e;N#dfk06y1V&WPYIO%VrPRLJJGocUMm8M%0%fg1J2(ZXIgKYMI~)Z| zcF7i;SA7>yP8UpC(X_A06k^`So<5o*cMlAA#(}wYFqi;GjLE$G!A|d&gr*nhyQeGD zDd>|ys9@UgD!GoEh_hl_}pW@_FvhPObUWU}5)jkt*IMCjvn=q_1o%WkCDZOZ1 z^n?-vGp{XgP2gyLxVlkZR<|hXgz$Hn6pfn6I>)<^Q)AkMR(~wJ+b>G(HNvy(yLw7yqErqGlFK(2E6g=aH%aAksaAFCSkC z#P98`u-|C#jpcVHB5|g{(+&KR$qDiO`Cv>f91Pf%9z52nvupt_JImwQ3Z|FETOC&? z1mRTEpL+cJENB68YahA(DoG8qi@gGr$KI!vycdI%5FWlb`lKH8`pGSOUI1Flb_oGRObh-A$GnDXi+`4uJICZA!FO2~dX&W>M(A3Fii}p;0aRoLDNPn*C;?ps-wFIyOf<=&v_{zVRgb7J_7grmE$EQ>kuG?U zsW($&e>k^c`&zVoPY1=oy?<5s9Z(`j4yaf*2XAS-4FED~ZhR!E)U{Q5b&0BIjre0Q z&1m`yop!15?M9z$#+By5e`4oy=~$xAPevHLG5kb6&04%JV0#0waa0eV32BQHNEZGP z&;9{E{p)|eqnN>ult~_AVBrEREh&Y@o4a?3X#f+CLwrIvd2WXS^~X}Zx3f27-b8n$^L0e%3~`_ArGpDgj^ z^Z!dEtXuFy6q2_qL6*+V?LLbu60wNudhE`g8%itvN)WKu_1gQXNpZA8@jZd1rYcqM@Ar*G>c&bhZYbAd z$wyaR+C1+ro`bJ7z5L|TSYY%G{s+?cPbS|#KlQtZdaEA8otQBEuKi6A9{7tOd^;uW z%O5|dPx>A3IOqUIU)4By{}Y0+4aN??Oaz@SC{7SNUE9Y;)AIiIAFZH2mQo@FP=qrf z4)5syT3i3y58k~+y~M9m&2CHn(OLNWwfpmk|DXQP=6w`xvG2P4{}LPdkDs6Hi$XQh z+sG^b>(%ntdi(EvV2F-FM0-<2-u^#(N@4}@{usT@jA{ITd5`~GTmOTPpYh)Ux)uKY zhPVHN2mMFu`R|7}WT3#&$*-pG{n>f_-!7t0HztGuRdWJNW`F+sfcjrP>q`RE22@x} zEBK$Tzkm7teK;r%Db7;1jQM}QM*bULEpZ21vQ!jT>gNC1Q~J@PVq(^i zwD#}umjC4nLOuNd&qwCY#W+8HhGd%6w$h+vwJKJUk>Fj^iaQdRggz=B#<#+$y!3DB z1Y6%Cy7T#AYpR-hrFzJh$U&-LGhGgyt;praDcGhT9+cQ)h3pO2>qRVY6lco}&-4nW z&+H+ORJYY^K8zg*)IWXd_&Z{v7L(h1ykE^}?>(-k{@*Pv?H8Z$W4shT%B%dJouh_m zS7l5-yyTI)eb?}bn__mD6!4Unt3$zS8FC6l=A36Pe|^epC>jHs@kmai5@23T>otG5 z<9TEcl8gT&hW?jdN<6v2Q}jAm{20WxV!eb6QuMeU&B^^~NrN8}$Pk zyc<9{AVw;VuXJY^)$Zy5gZB!5eDS~hDgXK#qGiGB8BO`}ThNWuSKz}_-vmlJH*HDO zt8CgQZvoy#ZSh|~2q^;^4PGV@eg0e%k5oVzE|hmEQkOU+vGcEki|gtH2G<=V>iu{7 z@u0!UrJyl%Vg>JARo~nggBG!7?SrS0v)TxfpC3~d|9a3rKXAE0%38PzR0a|=01Kn; z{(?}2CJI1K;j;=dzuG|0BNWBk9A5xM8mA&4_ooBaR+(^zZw5~L4#1ovwEp6JI}8?O z)x#SK{Bsms>bBeq7gufVN>y_gfka0JJlIu1gbmE8(@8!ld_HQRyK>O$iewKRc5>=? z81ZCUxI-Y_ri6|QlyS99t5f_ag#^a|?W;s^)Xo*9h`6zv-p*LH^1Z_VsD8gsKCRvg zz1Wwk@TCl~aQ$(UNQzL^Fv-^(&MNT>+^Zxtf%1Q205}K6gKn){}#l7!GHBK<# zl#8M^Q|-ajp{e1jS^Hrq0wVGi|A#33a0x<9ySafQyU-hGK3BRRaee!bZDsgYQx+55 zaXN2SEQUyip!mrb-J!@kL9l_9{^U?lK+17#eB?~R)eL^tHcajH$tFz2Bch}++sv6H z3+ol)3*M7`%V!vgE}tD5QO5L%-G;*oO42BgX)7HwkDau*L|mJSv0C?N87;6Nawzpc zMX&>%(kUp?B`8TRy`N%Gc2sm+Y-vxFcR#BmPeJy_D940RwnQ9_;3k>E`PQNOPwRf! zT9H%CD%SPo^T@ej>HImJQJV!khx#WP&1Gt*B(5Tr*kMPkhpm3pBCg{^bvvFWAU77~P6PD2;6 z7II89sp_5g>CZHU1|pv3B}xfSW%HTIF$mg*rmwi<94BW+$Rd1FBNmBCah>!6sQv5_$1UgvOrSYFRK)G~ryKPd4|^#T8Re|Y-ixiBvBq4^px zAkTXe`IYtH6&Z(>%3udXrHXxavxU`^rK3KO$9uME7_yGfAW*xMX}X-~@7eVR2s-pr ztgGx``QWl9FyjDMZiNlCi!H-p`4X`7LUxR1GuCX&mvz#O%_)a7=}a<`?xrindQI2@q~Y)g7y-~S6aufrR#@vDBme9DA#DUW=j5_?JJILf zt#Q}{fX-kMrsqVdT&>@IsyPbwi(STu^)fPBG6Q`cBZ%_>{h7<}1*bN#!i8FI5f)jN zviv~C3?p+bIj}6m^6{>7820!6l8!1#OFC)(?jB!;P}LiE6C|YV=&W@H!73V@01Sq> zu%Rsc7_i|zM*u!RFB88rGUvt7Y&H4xm8i2trK8NX2whJ$9_?z9dXw}W@mWb4NCy|dL^4s~hHBZcdXWN-3^|%;w_d4qEsP7lT4w&#-_|Kk_RMR$eB%f#56yLg?D~fHBfYap zbNX$Ye7n$~%_>bVBbBNzrsW>337VFquVx*Vq6}2`ezMDsp7OWeL5-k!X8m3w4-JLd zLJfC}=9_7;Yw;A5<|wEyFc>2^+f*v&i?_jA@vWQ8-`5Xh_&8n(R~@eq&OKId&gik} z2FH++A)M;0Ds7jD%nHGu9*EDzT-MzPY0)5f#W%IL8g{c$-(P(yDo^)ZbYi zkl97>uP%Pp1LBuXSKRbaPzPh=1wonrZ5;yM6$%ar-s*V8t&lkAMCL-&7!e0Nftc-q zKWH(LSB@HaOTnCu0Yg}7;A+TtwNbhV%Bf(AGX5>yCpKNcG8)G;qEjjYVOznqaw(K` zL0f3=JBn^*N+Tx&AX*3GoZp(j3Q}`%b-PI@4$jg*L^;NPt#M&l%0}0T?19Jv31{X+HU{*0DYcHfBEhwRM)WM|v^^!3> z4yFr>XMwY`=por;bQ1&^L7fzj-$YWoU8QNT6r+=K?u3kCuJ%MqO#F(=0n)_|wyr11 z)KUpf7=^B%*f*?h1>^__haWj>Cm7{KZ^=-f%SCLDg$3m4(5Tl`p7y|pY{=2$wIDLYm% zgMq<(%&pz%v8Ysks<6a)%H1d9bqFcxZ}bubG>cGcxIEOgn{!mktP&R9xoJKw8Gqq) z@cro$hSM`GU9jPl|Jrbm`$UrC%IL8Z4*j!SY#o{2SFNOKvYvr7U;}pEw{u%!+udaJ zfDNl_;Dt%`Lk{GA$e`Q_;pumP6g>DT%l>@_X!!ap-`3<69eL@%OE)K*dpX}iWNsURwQO`!O3%-g8fSHa z0>j&4vJaVh8&^bp?m+IyJV{Sg;ywYs5tNIk@4{M(2=uB>QZ4GU1f(&UD|JLBl;{1y zS+1mR@q%JxY&$94-O?E5?D5@OqoW0frO2ux8>xd5g0jjRbH$4U*& zCvw)Ra}U?MRz22|zUZ`f2#BAw2Dxj!{$;%*KhydJD!s8{Qf)1#9S`^lz!h=YC1vv{ z(d#U6ZJ5vw8^sEi+nga@eany`+Gu>ZF>XKe`P8v$N5NZJIg=-D@tcq>5CvNc;4g@L z(PXkW46Mx9nfUlHF|O{k<8^lY{J@X&xDi<3`b1)x`Tnc?vGbdGEM!@uA_HfM6E?Lt zk_pzVx1f^wyhm$}MP>nzsDZ1?kc7IU8Aq#05-u*6Nf~4EFW~}ZPRG-|yEH(87a*;F zKplf$>szbg%iY;Gx|_%VwOGhvFVnVvG-6$uxJ z<;p^NeVsv|J&YF8;>u9w`k)Jcs}Pa5-`}XE0M^L(5snaIM}7Gwk$S-az-@&+-KtSi zVos+!d}Vs~PZq#Mow8W`*qj1w`g(khatgm`1x2PcW4PvO7Fw>gx4%FQN;UBc-fZ`1 zMDLo3;~BtV-|+Ffig}D_lZ4!N)RAX~Q);yq^68he(&CHOG7zW;hsF5G?48hjVrM8OtaMl z;9cGfmF-#IOhigBQ?N((baVb8OrIQX1XyXP;ca*pIDz zXTD1~Ka*eq{|p!u+rV8ux1>6h4gN_A{fwIsdA-kR@$r1J#dNx8#Y(m4Q*iWEcHqa9 zZ0yi}b7zJ7_c`SG&62_b_RSx~3jtAYrAAE`Q}w;9psnL@p@^;TZ;r{$ns3?qBie3l zl5Mf>v#}YGi%#N4>!2{g#Q-CG->(F|Tr~%wj(bHSvVR*RAM~9WdX+lYw#CRTo+H(( zbYt(;?$>BJRC<6z?)$)$@t0BQ4A*fFk-b9U_GMGrrE;&hU-(tTYMC0^bFAIi)P z51U?*IQN`oMwsB@lHmSIK9X~!YnJ(9I%-siRmg2ZBC==5`kIt62D#@Y4PlhA~XCs0mjMHl3)6FB0mNgPsg%ii5}3O z27o~-hy9fiKN5Cd3LDL%;jUE`hr&F8!p3azI05XOa@@U2Xp#Wxnq6~^}L{>tBSTKLDBSV z!ELr4i(HwiJ~+CvzQZ%kK4T*Oi_BzPwAYa=Z5Ck)iXBa)+5xlhI$p8Z^0;X#_u;(4 zQ!KaviE99;a^&rzBV)|9A7IcL=75>~6P(Y~VgV-FeYA?QS@XcYy>J9nW+oeZ>|YYr zB$yRXt#R3P9|!hi0j(cjsAw8SY<^)YX)f^cEg8U3TFK#A%ScuQOVNZ06Y)$rlEXmn z#-K72Q~;~vYl+R_Dhsz09wB&*4JZ^1ox<~!@MBPxLyK(WfLrp$qs%IW8Q+x&##FC(AL0eHP76_sD00nO@diy%1fmoPY%k*=Hm)5po?~Aq;$EIhZDGtX+VOL{(+V z+H^dsUn22Ix1t@4#xcs`NCx6RJu~_IG`~Y-qV`K~l2d~?gR7TToeXu{#O&d)Bzuiq zd?W%LY93q-63)Hls?D9L8@1{VeH2!&F{;zF%f&H7Htm=8Lf)TMzOU1E8Y#g4rDRxP zJj&qj!gE?O7=0u<$?Ye!v@(gC9meEGF5TZ%;@!5!&3y{x|8DkS4NTfYRVEiAcL47) zlyVDP(hw8~78&XqjzLGP>Yf!+hy7CS9Su`QO@57MFDa{EP$N;6S@u)U1zyxYK7HE9 zTmdMydYG&aW?MY$#)1r~TWqkhn60Sh^v~8~C?}A|NKN3HYFRy2I$5-P1nNUQ38J-Q zP}PNJC5weH_n&F;eSxSbb_l$J)dRmnV&v#9P|{W*TTs9m=NWP_UL|0dO3IK$CMz&? zK^KB76rrC^mdI2c#^Hvk%v#_)_-W3|gmL0hzWZ8rcic&6KZC#(WJcVe!Uwd-y0bMywEC2MA zCy{34nK9|LG?}=G&C>92%{<(WT>k#!#bVvh`I@Tm=G)8>P6~M)zAY#$FN|QBops*< z3`I}O-=9|$(g53jJTbrxaY#cH+WN71F$Jh4i{%tJ4!;*_)h+O~vD=lk8=X*}M_}K| zpgEjq`RTg0R)j)cV^b?tRH8O@fhzv|mvs$wHIS*kvegat_m0%#2AFWd(_zycu`s(Y z68QQ!*-_wr679)G{IvdbI6oZ9^$wjBYmuvWQp~!u15KO7AEwjR6jURwW{`kmHTcPc zr7`8ZC!y*iOzvjmRR_+(%&h5$rg$~%Z>KQmVuNJWO9n5g!18?IX2cs>ib(Aue8qEa zOR!mN3ZHkJo8G33>h+$$sI@Un|QbF4V zM)Lh!+I8*q;L=qFMBo3aNWZVwlib3d2dj zOTI9q=SnJxro#HRvOnc6fh&{R&y|sTwSEF{aYw0vKHkv+H9s2CLxDYe(c-;~DDwte zMt))HDbDpUF5U#F>Tyzkop#s!<@SnBQ`$gYi*fBY$9lvCMNoN@4;)5H+44llgi92u z58q-w(V$if)7^04$aGz?|5EE_Zak6AI>4{@&Em$gLhMUKcSM`I4#&8KO3ruB&l@qBOHdA88@Tv7zEdd@p_Vdvb=tpcjZdRl zz*Pdbv3*F_7fM_Wyz}4%jX0cQR#vZOe-!xycY`b$LC5kh%y0qAHW2v?%46phGq=Az{mC4r@!RWS~naUU^PI!oE$kNXHFLkHaOh{yQ4JH#ehc?T%^A6Z82Q03BF7HIdEtl%fs7 z?tPj5Fhae^vsFIl)>jF#CB6WC|14BZeKNi!O916vW!%MBZbEho-L(@+&<__w6B+-+ zd7_@*E4oKXX@AFH8Ekcgtl3k)f**NAAef>=koGT zxT!A1Npp?UsHI|Ucl`KPaRG1ve6`VF%t}q*IpVqjVs7f#pIY&h-g0bHLa-W4?-^7d zCpKw=@$(PWM@^K-g7z4bU+MekMz@VHjaID^&eUUs>~N$UH%sQV#WhoMi)Fnl$;Ch0 z(Uki{FjQLU$lDoekD^C0^>w%jpk?3HDW|o^wHJ-EoE76sF+P#DrbkWNd9HFCHmA|< zTEO<|pr2*O#cnwVJL9P8% z{t}pnH*};}{9qiLl+){G^R!pXj);}XzEBynlRtqq3W`4{wmSJKuckkyJjgC8;peSz`(6?ez6r{Az`j)qGow*xCl%k~&BEdP)!Y7W~-Z zJFOl;;I>=45K~)+#}?IKX4jgLSJsQ+USDD=eU(3q-a02 zQ#q|Dd*>mOMkl&wT|UxW!LqK@{xKhayk6=}5QGU9FW^G=f*6c{cGw>r(@Tq~X8|0&Yb?uVs)%NX{7}={8@F>80y?=y`1YIge z$ZQe%#(hQ!Z;sE53H|~+pN;Z040#O~u{*x{QL2i8;KmztBby!7b+8}1PeIn^Bkkoe zdk5wgoAHI?(>^1F)+dmhmu;DnT_cg48{#eQj!Hbc&^1;$mYUPjb_@6HwfKd-%-bs& zdqKl%Y}m}F_L@RyXZ{#0pd>q6$|U6E(LhADiwB!xxVt|8xmPpfY#Q%OtV^bEe$ey^ zsR<-%TgOu=Vlbo)RzAX+fHNnI{l^X}5GD`NpW9y@+`C^5UeC#a4C6QC6eC4VrJce? zqbD*Zom7Z38k*UHljD&HD&Loty6arx^{_4LM_Q=T$A~od^kPoFLO(yvR4JUYJrlA; z=?jWc%?8Qie%phMve`7d@&>4F_Raz~xNqsnxyectR$#0O zl{9gTKXEeP@m?eYK~b^7c$k6zaj7b}_7zTWmz-+*$J-3H$n{HRtFy;uk#|3@2hF!9 zuH>5}McucSi-g*qJoABP6p(>FH+S(?VD;K1oO&1Eu(V31Q? z$*=(4VLBA)vV5yFR+Xio%n2Js&5|MbWI*GtdvG7jKpCFp?~*Ot(WBS_eMf6MhNheP z*%so($LuoU)pl)d3c+p1lizk}YUkbK0`-)i0!RVci*LI5`=57g8a3#%qb`ORBlN2a zv4~n0{ zMKSf3uIEF9wn3z3Wl+bBqB;BhmHu2XGd}sajQqK-EYA;2fL2uN(T9a8LA}r$Z!zq~ zd~D(`8-%wVM&QSoJV-!}tOfnh<8-vVR`=OQMtS`Ve@F%sL}lCWsF|W~Z)DsWafv z1yUh`;yzElaA(uSqj#IOP_mj);m+n*LGO@-}V36+rLg?-y#hNh>Vn0+}< z)(0_amFo&N{#|Jo-#8XuK9-V2RzF>GXFd;f&YHEMh&xDB57Q{9{dC~2O2hm7>@NyQkabPGn@wOCn;`K-+juLzH~T7E?W2SE)PX7 z4tc<@{rG;lzg~n^UFMAw_|flsB?VDjH$zzOoBTd2e``|F{GgpIRoCs-JR^t7#Z*vM zxeJx4e3 z*A;*;bidk*kA5OpdvYP#Vr8(IlUKNT$_ldX6|qlE10?!3Z{mZj7#&3=^CMRq+sq#8 zsL>(YeWZzxO~_Bhq#+82Vew$}=)|UmAx_awLa4j)y^A4YNI)mYbMC<3+^K1`6pM(x z@bSoTI6eGXJFP$6DgkBXLN^+j$uBI1?yt22m~2YewrWD%h;*|`_4Mfqli09ad>7*- zGMj_OBi&SH>{=cfT&n%dua{e?+xiXz#b-^8TEU0NRgzYd4vhzV+Ef#SF8_aRN$swQ_7ZZ(vj7WVI|tt+^Z4rck(I zV5g0@3(zE^yWR@bt$~!YW#2h?k}Vow90wtxRC27Pbn+dYc+hWaVVF@;_sQZ5AG{3? z#eQ?>!Bk@f1|^q`s!hn$c*n0?_ccj}1#ae(XL$F_SK;_4%BM*^K5t^Ti8DtgKMqv% z#u`u!o;1#{g&)sFi+da`K4Z+u*tAssG5w8-IP!h^51@izuNSh1>qQWab55}%rJ^}9 zcPh=e3-}Xu(cRHa=xq5#N$D*uIk{3g9;B0O!O7}&)m9K`*jNnM6%>24N9e@#!&O|0P@OWFsNV!MYelOprDSvA+%H8+~q)92hRpT2Cz2jiaqrmqe&pv}M#;SfpF-BVCXU zhQo);*mf%x0=iuD3mR{GhR!#<>B5Py;A)l$f@1Dv1=-y&lr+E) zw1H&E#+=D4%6yGQ?62~cHa+#y46!HR7oM=8+Qg79Ue>R<4KVX!46fl0MzP*$m!U}M z_4zrt&KYatrLD{2SaM3mq(uZvQWynFkn%166`1TmV2Z1&%*QHq@Rh_&fKH5Uk}>f* z=MAGaPyTnyZtvH_wt5;n;|2-cn(QakXkq4{V5@R|Z}iuqnG8y&4$YmcubO*!jw!LN z3XS_lx2WDV(>K8IzN)W8ZLJw3c@l@2LI5FY&yU&T-^89a^8r_I>ua9d#%au^&O9>tafTaUMA&_F_;3nCc=_OvAL&$ydO6bUe7b7Lyy32@j*e$5_8`m)wr^dy%z{sm+9Dd+}QZb-DW0B z@dBM*Ta*{aZE!_s9@rrkE6uc(@)7-mg7Z;TJ>@!CsLk;c$ljYo4p8?wkL3^(k`f!3E37z_ELUDSrxql@?TU ztXCLqFSd(vuV!dkz?{;N1lM1EiRTMQ4XnOs*MJL`ewL+9D27FS^3S7>Gv;(K3+yNC zaH>Fd3#z4N+Q+i^$L*HYPwF?`(-8+GwWW1jcaDDRVids-wUel>>indiqxyaTJ77Jh zScXf2Tz_q2yqKT%(c~J0Ui*9;{FlH@E1Ae&oBLcA#0>%XUb z@J((Ub?Oo-y0p#n&kn0C-)`}$(z*fOd9COZyaJr#0rkCrF~8M9wB90q`s&9_5d;DaTyI&*~bWrWfI#jL?yvv@`YGC!9`Fbv+&BJPrX-zX-I4Z@}>8AN~VSPFsW z%fO_MHQ*Mzx9@Kq0Lk@@#fk{Bxc>sV-~h2NX$$ozE8qXz3y>Xg-bA!K+TZ25x$o^~ z;cqcHbM8@YT2`*{FhpoZkFKqy#?^7ySe)EEtLv=zp_w8d;Z!%8)tWE{^dmyk`?*<4 z8+OE5qd+USCqRPl4&ZIW(l#@6e=BvFuU+RXTm|Q3k78NF8X@tQ>)eL;F^PlV>ORi( z1xs!85YP%i)G*YslL*+Zzi^Svt8(95Gfht-LPKLJY`$xMvw@QeeKyR!%WJ+l?Llo~ z40(It%lDH}IA|O!NZ?>wWWHQ)(QC~WiSq^V-r+kea36m;c1#cdWWQX|TS^6y*{Fpx zB;r}!j_Qf#%FFORJS(OHPSm>dD&@%x6!VkfM`940x5l8UZ6C|HhZ)CH77Af|kADA* z1i=+&xibq3w5Kac8a>vf6eSb)b9Lt_#HfnOT@VYTh~sSULiBNpAA=Ffo`s*U7;=Xi zJ0101^L&bq&4xdceBkF&7{lul`xUfceZt)Ts zMYj!U`udVC2){`Rhy?e^W@f=f3og*lB-Wo%*GZpUBEvK1kt1X1%Dl9VcZP0hG={Mw z<{n6n&}HYUXU&)`i`j9WG-}s91AbiPqIP&qk|R&GvkiH%2sw9K$+H*NRiSpnmX$Ge zs@FYWwjyxs4uGA)vghc8WJa{w=Q#L!nY7|s%jmM)BWz){AZs&=tEQR@FgJz?P0Ueb zMacH3Y=mx*3`lw&hI^03CQS7FUv^+fsgX;CI_sS^d9)Dq>0vAC-h}? z6=UegcGcD{B4{(#ZCBx^BHVk zD7J^NnQL^_zr-bmQIe{N1gai-g=?}7dgf2h>!{Nq4P{IQK#5mIx&{p@KH3W9!o(r$ zpl@oCG8rJBeIrKkZGB=vLS#}+XHU4oq~Hgdy#FrcGn5xK=lU?q#LAeyl>U znd<2J3IVmV(dz3Z+_u$+Do8wP*F1dJ&PMT>^>8MKJGi0;szC9vCvXCi^6<6Y*uU@k zZ!xfjnrVrmgk#5UJVhByO}(oD6T0eINBgSW_UhPVOjpk!nq^Xk_gVcxh1a>vxjHv# z;%y`!#Vh7-s}IrFb+6FUb1;F}V4)NGRgNKMU#}67$b^SK&Nb7T zH;;c+;63{ANlL-Ku_O-(9me?}V{)2eQD>rKMq-l-m#m&D)DJ)Kq`yACg9O=-GM|0h zw?dSHX?-ciyiAA$*y#Pf7l7K8Dd^B-H5X;h>3bZl;!zBt4)$&zX%t`0Y&mk@2QpH{ zo9iT%P5uoES^NAVPv$8rC}%o}fV;p!+5?KZQQcvAC)i_0TvH*2{2EJ&UR<7EpNiVt zp;P@oT}zst(g+e=1-I?DrR>$IgMTdK%L{kZMWj>h5t3)_dLy`ym6K*j=rwVTHM1MI#Eg!&1L$HUki8nsiL~a))kPfT=TZaw~H{ zNdJ99_yDxz64D8cq;*5u6$G8A^O<3l$eTdSS z+5QTFJXYqs&G7jtQ2sDt?SFH{r^H)nVY1S<#IfnUc3Cd0DK0=Gt8Q3LX-~n{=)^;u~*=J=^6E$OL;qYZCW^T}$*> zNfQo#Nefv@H}H@E#@L_;TcnONUMV+W11<`j$6nLdBh)P=D0)$;{hRZcH=2e+5vkv) z93)&9?KSv?jqj)Y@Tny~x^4Hb0U55M-p)gszvz z46E1l-KKa0!C8_es#W95d#x%XXnu6iy*%@hlu0nYtQlp0s9b8w*@$B-8+%YZ$UR}0 zT-Nf4^^ts8zwVWdyy~s!r(YpmSyiaq9Q*IwJYWEoo9`5=`HqeF2o-`?aoqa_-{IaV zh+`v-jY@{zjkB#}=ITb=TqI1<_%Tk4!Okg>V~eDcpN(rlX8twMhhYr6*@I-_%n_!u z3d7%e!DqZARM-hKTgdUX9<0(7%co7t&m!lMF*lSpp_e48{o-vi;OXZcWLnrl*tNF^ z8r)JdOT2%p7BldPi|}KluG7#L>t|cFhY9S+=}T z{y)o_s=Y82KR>dx4Ey4a!N#QNT$q<(VKb{df$<0^O*GeDKhDu-#& z*(|z9S$7%A&Oy7+_;&3o7mGTy{XRAUFUfX4$&hh60q$na-TE__(`D7By2%L?!Mo>g z@KG1=C;AxVAr?`|#kNg6gSYh!;>$R5p@wwF8FvBq{L1i?7QA z?6uM4wNa4`P~%C8d82Rwa_~p_DU*7k(w1eQC!?Nv^(x%iUQ>bMB;c@8)_W(>OUchi zy2#A`2Ms8Unp3#46juKPtNOBK*T*HlxK=Xhu}C&BgPX}L3h=k-U)tpAarmc7sHtjv zr%)=ewoM?MC3qUHfs0|=jS%CX65Xf2rZ@^Nu#mNp7kO%qGN3$~DRyaFaZ)_Qu&B=P zJKx9(*Fsg?;x8(oCLf|T^9s@~t2m5a)AJ#>ECf=JElzczAH?gDjOeUi9j=CD%~2F< zt`5qORXZ=pi)b7Cu9Suw>*GV4R&470uU;6sw)9Ak4U;V|wEA~Za@f3`A`^0Pf>IVK z+SoKno|1*kly2}nmTj*LuT4r-0_rPW;BW>`O%6IPBTuDZP3a0GXpxsKCAcD|WHdp) zm4P`ngB7Rw{V#^VX|WHdp`8JRZK2J-bnUbe0qPYwN}H$0E?BirP18FCfzchAVV}I?%%~a7HQX-R+o$9Pm?B20~+IHz^j>pRz zYwZndXS8+H(gc-e*AGe&h4r(h_x;YD@?AzdTy;8zzTuGgyQvlh_t~ZkY~0hHXA7Wo zMOaWdMDi+IVZZLeht*7e(jz3&q+17yj=QA~c{dzCli+&tit=dlI;Zo3^BVsGeG&-!& zyN5#YDVUC0e;>iOp6U)8n|HXD?~0~MxcAU(DeCr_lBci{&X#909|$h~ znWEx$VXGs(jwl4L@y1x8{e+fj>9Fb}x@7Wh+tE7MvLka<%^K}Gixs$fMUJlPMXOY%nhvyE0Up>87;!kfqBq=KrubY+?# zO^O6fwy$=|O3W+o19k0yPWNNfKbmac@1nv$4x)KR)-g@aG(9PY{hQhzr*wemA{|n{63cai^N<)tZq~;_t13$ygF(^^6-4!Z14p zMpYm)vI&AuN1dCnxi>1znc6X~+OeskSbI<>0e*nJkq(yi@9hHLSHom^M1Su zMHn%MNBRg1k}o%0Inh3J9J_bmy}+qviL>l{JWh!wEO7+F!P1kU_*uv8r}q3pZ60(| zpIMA%IFoJ|wM>bTT2`W5Z%xy0vuu_QUhb~49*`I5Cb@=nJXjl_>ZbroE3 z8RQ=1PT-6xs#~-mcxwi&y)`tk>Mszz7f)gZ9@(~9=IU(@47SZYql;3<{s`o;Cbi(S zuRJ2Y_qB(Enms^)j_ag-kVB9y0k;s}GI74yJ1|gSMLcibY0<4-`f>ez$qh^3S1Y*q zBft_h>3HbzVgr!?aIZtp25w4;em zzLt#VlD#;m=BV*Yu;KSW=l%cKd+Vqu+pq6i1wo}$1f)R}M5IevLAHq* zIpU9CYe6h@@8&yk|8@F3ERTBAU$)Gzy(AEz&pdOF4b^yhvLJP~^t1#(H_@0upgclt zDGux|U+1ZN?DZ3@yiJUqyg85>81QpJta%hDHW1{9COx?R=!@?|+m_iOqxCZbWGhIb zzcqx^VbV7$zOIA;8H>I$7qEMbV$M!C&gR2RwzvnU)wRrGup-2BdCSXS$}l2a*G%@W zqdb1S!7>1E2K5*yxDZX)O!wNSe7%LPC&+h7O zT_0I)W6XEC!Ow8C=g)~l5#dVW+C&Mf?_+_-_Et)#KTPtaK3HV4m5$pxmw@;D@8 zy{Ba-Ij|tKC(jJq{^FMCPxbI2$BSnm9)YCL+BQms$MBb1hr;KAN2i!xSUIC*QjrTd zjY6EFJ3SX4xh{Dh@MM!NjAQD+e7t-?lZv^)ao&QHAf>IA3}M#?vz#TngQ#17>oVuJfoQ)G!chBqcPEREi?>6#S0; zq_;k}^n)-7NJRxybik3h#QBm0>tR<6QWsBrCeEdPOZLdu+2B}K*@m}3Ln>P)1fDHJG>!F7ct#ls-_;h_e=P%iJs1Hl0LEo*&nI60lOH&3+OL&EXa8r z@oMDVo$GN@u*dbcXV&2wHwyn6>#+(+r{3Q8j!1PaJa!uX^DRbdWT<8lh?;2>xTiOp z?p_|{5(S2xawkG@p8oMUiAU8((urAd9CT*4|I~gO=mOYQHO}LzPwQ%_{Uthx!&{v{ zy{D9Lxlwtk2{dT)_DQCpn(m7uX()j=yU1nk`+wA3=!4fgOKvWJK=L`Q)Qu-TD6)=% z`>?i9wQiS*lAM|$+Pt)&P#M)=e z8VzG^WE3TL!0d3Bk)jf3T~Hzrh#$jD6v9rdF^OYU>ZjjW!_oalf%L;|1oUvBr0=TP z+V)EY0@;Eu71n$FJt}d16-R0@0i&WqI*a$%F~N^Se$i&S&oO~mdgAL+{Xe)iX6Yk;14S+^@k%5%7i`<1+|2AJ*dwoSaOvXARQi>Sf>W5T02a@LoHob7l{c18t@{G{>ya zYP46)rSRx;z~tA~K#cd$%i}qbX)xy>@K+b(T(m;iqtciDgAg=k+D$4o4>lG&oK7~1 z762!}jU>R!JU;;j)TMvd_`FLhDd`sc95;Evmk?+oI+a^UVw9J9(!)E9=T?kqzI4}3 zEcS%9CZs00?a_55h%R53b%_%9ehaI&2Ea`+E;v0QJgPpP5!n4iy?(Ch%oFL656HK# zPX|iP%*6>dAIx&Aqi5ROOmX{?Wow$|QWFIgyhVnyZuMF8TFJoPxZrwsCShU3KforB zseMzy3{vcsqTiDW78*;NK;InDhkQGA|J58}d4L-UU-?P1y;nFlHjgh}L$we`Ew*Lz zy;BDU@QiWSdaUa`8~HgwxQ-w!2Sl6BK5-N{@D*_bs(CAwLG7$h(g84AzOLp_C$6*6 z+NzPi+`6Z~Saz<6!H7*`l*eN?gcg82Ime$Ac_*-oiB)oRW3*w5IF-{0SMQpby&;Y- zLq{}pmw&G~f$!+>pMBq%%#Yd?*`d_2i8uyPkjmbzVeNw;B=eI(-C8m! z@H+r&3$$K*z3$cQeIaG`whQjuYUan*XLJZWon}JIKzth49o*Jt$MrOobt?knos+_p zfZ2}NX4;4*;*R$)2`$peU0+`2Aak*Ljk%1QzSJ;J@T|G%f+WfGBuNH3wkF{`9dl3) z+23FU<>bju84QFoiKH6A+b8x_NLp5r&PM5g-~jP9Zs);k+=mMT%;GsfWu3}O;wonB zYP4i1)^YiM(GUOb=S_lDD^!$44x{vylvaT8Pr+s=QoWrolWyZm#_SRYAPCtH z2>{QR($Sja_6V8Bf$)FCgiYtQ4+2Y>~ zA{Ii@(q+#%&D#qvDd&AazLf#__Pt$rw)_b_IS+ul(ffUyMG4f|T(k@ued+?W9_7Rd zurZ!S%SrYYW4OVOTH#Y&u9AjN1+(B;VKH5FvbPpEBu^Ed4dj>mn_o8_^&0wl8GgK7 zJNB9l5$>7o3%bEFb_6XZFNih=sz*2IbN<>nLhpf^EIl^d9JEMSVDD1|*N^sgyZ#_4 zITqG}uFIwjkhut~XirEKQCB50?zu;TeZn_;sKpeSgfUYs7`6try6GyL&;@0Qb5WxO zN3%wPKPu69XJ9q+o^ZVjsQtpIEK?Xi1Hc;=vEACUd8VkNdD=wJ7ZBYA$)#=$Ztt|& z-9KRi1E0YPDSvzML1cHkU89)GKh$VH{VXYGLsr`C9}+BaZc+3HBD9 z-{|!%CVo7)5J1uc%y}{_ZX>fe2uA*qF&S$h4CnNj;bJduAM+eNofR%e33~2-W$x+# zV$jDz;@>X$eN@;t6mVfMH0#gR`GEsz&!{8~_3sP3^uZD#W7wKFh5bjbNC!y82tkK4(NO0dtlVb8v6>%wO z|1oFBd}5w|oBHbZh%N2gIaST{_P4$sevfuRf9Wkb(`S7%l8TP$3UEXUeH7T3iJH<~ zzoj~_a$`Do!~|z?$jK!wSO{+j1Ep@539I6#(DR~vyYbzHII+zic;of6pL(5)$yf17 z+yPNgl+D5LHQ_pmnlKodQ+6qcX-MV?+2`2gMK5z}<<1jPZoE^RP91QWRfk!SCp|#+EiYQB z{B^aaLY;jeM0|cR$v*zzFE>(zb$F;8*lSfy8UNU4Gu|ZBl9_Jh(X_)z7tGkdCJdJ$ zZAU2lWn=a~e04|fRqxk&3-3+@IulE3W1R1k)fOfwm+fs|0i&k>n$0N&1Ct zQ6IJ=jdo$VQ%nL*3x2YQfq=?CKhBSquxQtbGsh-Slf7YFr< z3(w0Wm@PvzR*vJlR`m}S%Y{03&ynryr*Ecc3@fEdE4Sne7E@mUrG)H|-$v ztw(w@Y+h8*j3}<$+OaLg>YL^`z!biv8|cv`z<|0oooH#@s}op$A{2;EK(93%D~vjx zAE;szw`4Kw;?`BvNH_=$woMiKP56g&l`&eP&l+$IHe=6_EUFCF?~K4iIP~59*TUg`9{m-&l2#D`F4yI#`GLpvm+>pwaKrX-LeI#+*!qi_ZHAM02upI3$#B$usw$=)r~KLFxSdIm53 zKKX2=0U}$eMZ(4#uF)<`k%Yq-gEt(Fx6)I;_QJKJ=zVWLNJsTl_w)$k?*Jb{4 z5BW(LDpCyga+j`ZCPUvG-Zs2N2! zHDKmJHDPRApcqF!c2)1fme4=nC;aj3Rbq3m`Ym6Xi#T)mW8Vuqkjp{4|8Hc&2RO9a zweZ6$;HNJoqXd#=(yF5#pIvb?uDA;6l52&KOpguq( zs$f^Wl!ZO`lICDM@FkFE?_Y2;jZBZdpgc_x+BksY;~N*}cb=Jgr2JDi@z37TzaYgt zWdSYBvpvz^jxV#qZ!lkfA$hdOl8sg1sxsYeh!0kFm74;4&jSkERLJ}b+|E86TO_lW1gSK3)$dl~AVALk{ap#- zF05f1Np!5v^|4Gpyi>RS{-u9>&wqMxgd?3DF%kgeDM9Q7!iQuweXn`X&)&W?_|+ug zqo81n!g=sJfelQzc_jVp{@RCh#(=?p`NaWv7sqy*nWMk6Tn+!>zzP^=j{+rK|3zN) z&$IkLkarf>aCkX+xtF9jZ$G{SHvcK(sLP6_;O`=d!7fNiz0-bu?{7bMpKTMgPVc%; zLCnWxz#-qfq~)f9DGWEm8?T$$_H%1;xN5ol;-3?LnIv!>(&?emskm!XeZx?4IwUa$ zUHEqv!1ax&f1E-7+ZT_$!QFE!jkn={ilY2C-*0&1cMB`g71%#VVE^q~|4;sB3)_#6 zN?X)BME@-0{>=yYKl>6T_`8(6+hqHfVEmtaBwU32r~m%&uNb5HHoB9*G%7(w8uSV-;w!(_Q!(+ zL2LCH_)0;I9iMSaP}6bk|0VOg510K0u{>Wt-0jo2#0Wh!;6s2@eR zm(4E=L*F%QPqb#;!uSO4et+dJRzjHuJFtTfOP(@rf|t0vNC&khNH4>n*&Rma;&ED z$AaFY?P7^x;LjUbsE{aLDgy47@q1?2!>vxCahuuMy>RaZz(}7x2PTsQ_SKYHs1MCn-dH zyCByN*wYl-LTEJ(4?!O_8Asv3_z1|;0YxxoLw_B$I~S!gKb`MXa_;|oyW{J_2d1Cy z;s;=P(LKQEuyLD=NdsMO$v5rkwfcZfBX5uZgeUWbh;Ol4Zxb?fF#5~v_K`oXv)~X~ zKfJqAqLfA1MHavKIbFoX4&?o26)%A+y zTsSMPE)B%u*Wg%r@P=NnFAoD;FE>vWKi-;OY(^X2$8u<8}|44(Dlgf=*sZ`8*CING;}; zcVe+*&k2*4YD((AdN`Q$m1roC%wo^a0`o1UKBJDX)`I9+l7(9K=!VFZlgnyVTOv0X zsV*Woakoe(81{}cUm6>Gb!uG`zm|YV3zkuU*Y<5^Ya%_}5p(_9gh=aX18uiUNZRFD zFhf%zpj-=-8+Yw;tIcU`*Wj*c;8V?-GpIP#Jszsw4^#K)icD%g>(Fu8nvF|bZsw!XR-sh_Wq2kW&4lqHMwdttFs^=_=I(x_{$dNErl zFc07iP0BBG}<1F(7?P4I6RhEvN%i_I#YY;jI1_1n?)g(Vvg^#nhl_-rJqL zgO-_>4LKp|I<{r6MV?@8_m*LKPc7*NEa9F;to4 zhSp1$eYQf^Y$SoI*Y8Ab-wTL7Fb9C+Ic5|&&24OLpz;_0)soHn{{#M2d34|zU5St% z!cTH!Ao|-9ezv+O7!?ZvB18y;SK#!^Dh}u+=E7HP3r3RpE=6jJ6v@!zMb|cJ^IOYC zyX>N;+i?vpUH#F)eyR0O9+CMw9DM9$R{U8bld0F#F`n@)psv5r!Tx6Z?GlT!0jn}8 zYmA9zy1j9fk`VjDUZDwxX3C>S)gqj*YM;OZFPR_NQ-idfo;wuz(CeIF3=2pHS>kKi zM9gK#%M=eT4zC~BXv3uMUGcW~eTBG$-d_M0X6U6!HCZJp+K)H0c*prIrQ8V;)FJ6; zmFy2t4cu+qZgE2!3UEVm4T}Q`R5w=T7A#a-ZYLg0!={7uJO=-e=f+JMEOnL6l~tcq zxvnwh9~m+q?mka(R4<;}3h6CwhJPMsnxtLdE0n(09bet2A7WD2M$Av*C79*CTN6_T z5wg^+Q1=Rsl}dNZauX~6SX%EE43Uafd06+^+jVV7A7!Fcq(Q<+hr5Z1LVDX6k5L<& z*Ft)qGjhT{!_t=q4+jQK{_ualy758T#uF&Vv;peVRTj+{Gxs0yvFhbu4z%V!(ARy> zyn6h(j!9=UyQ*&3v#NdIA4eeRB_B8{Ys5QtU9b7!2t~|&ee3sufH5c+t@3e9zv4(R z;fDgMgB!SB z_r8p+dK+8`k%}LDlj+SUX!V9;@*Yy-=hy~j*}wAz>%(ORk>c-eJc9H7S%Ee7-oqCr zcHOR$(3@axSlRFLPnhsperf=nSM9Z4?bCPM1l-WAV1rfdSk8(Gr+k;})+VO@?d(mw z+J5Itl6zUHMAS=u+9yofV4JbQ(x(JlA5Y;)7u9=T6Hii=R=IQVeaT4Ze5K336&cFM zlt>P@WSu`M$D_WU-(xi{rw!+i%0vs?qp}HS&XRY3yKL24Skm<%Gx&n_R)1gjdg1Eu zl)AZbRM^QkHO7bXmtEVnEW62R(o6z0Zj?&bN+z!u_}xzBb@^JCh%g?7^EP!KQd~}lH6IM0`%LskK+rL<8dI_DlSX5pcA?1>F-;qc>s6zLNr`-hcQ_N2xI4P8=NBx zxZ<$Df+im-zTJVZ)6tm8q4;)05!=C)bp{Zi8+UPwZugymEkX`Q0!`4NZ+9vCeAo6$ zPXUV}n__(5mg1tni|ev!|1+vzwICDPY=2`s$r}aILlR80Q`{meyqo|N`s%9-kUdbeMR@sE z+AWY_lvd_&5L=;X@10evF;ui-@}qvw_fqidk5ff0kr}J~h$xOxFgDMvRX%(N2ID9NDr&Jc}2Kbb0rpWHwaHO+1P#E9x_?aKWsn zDi^WS(KWM)U5A5^-gMnfXw>*Uf!*LG!Y0m^sYUb3_BkYeL)n;R*;rZ`_61cy_gLSJ zjo(QB=92P!9F^u6r_VNDySwz{&gcdxoJ6YtIfWd-A%_#SL@k`K{Z_SKZWx@od0r)v z^ZTTeMv#_teMyIHd@^OGc0kLMu?R7GWlbaMVY;YT=u=NEU-*8OI=Lp zwl#`V+go6-WHv0Uj%J);CA-dQr*Wftn`uJuPpLvI6yS!uhqnp61(4r^ommR^JlnHe znqG0_|6G748nS(HdHr|=2$;GH)kcfi>Aj<*q(BK+!K2#eRvF;Mez;1u(c+{H&<{0# zK5;nF7d6WOo3=9T(;a)01vui)G_OrjLt@S&}kNYp-XgcSj^>5aFnwGN7G4d?>_ zl{tA1OQXfLGD?sHYbn?v5n@6yKQIURX{Wo{klNOVYx*_u7?m6@OBU-M0!x|(cy&C- zFSQt>>#5dV*PcopHj-^uzSG11S3Qr;(E@?{dADdaGcDAjHsaa;&Vyt z3rcyof0MYJaKoSIqZH^2_cRlsYpvBh@~%WHJ9VXTz|*XkX}`uPkXC&o>k0fyJGe{1 z|1k09`q-A1pH>67gIj}7%Rtw1T7O7@d^4aEjF z1QK4%-zVYJ*4_pO4Ks7AG83Rt08iXqaI+QGSsk04#bRvekEu_02lUJKHej zlEH(8>ws-i@M|+;K2eGErIKS&PD$<4!{t}|`gxuBC`xV@4jp2-7K0q3z3gecAY-&t zy6zTK4)3v6pkj5k8j&OaU}nv)G9E2FS%bKOJop`=Z7;0|r zU>96XyAEVbUUKzTF8vQxz@7wJYTyt)FRW-znRNS3jk<6Qk@D;0>j?`y{W9gREHSEw zTLDvjavL;DL>^Ce%n#Gm>}fvia*baBcd`KXV?sS{8KAgcwpi93nm10`C#fa$d>M@8 zk$of(xo?xtIi@e%3;{mXI%QSvX()Auuh+BaKN0(6BN=(EI|N<;vk-2|?iea*_fB z<4kd|@0qc=f}`?BXn5RDCSAB@l6?p9HNJ5>&{^r(yRUtNrtQ#N>Ub1e1uv-X+JC-Q zVH1u5!``}+p+DgBR@}MA9iYhi&j$F%C=Eg}Uo`fAx|vigyYi%*NU({dl8op0Z@Y@%xi>X>_E)^n|goEu5b z8udo*9fmR9Kb>SxZMI!o(ts2o%Npx@Hm?&e_x>skj$~2q_Zt8xbU>>`n+UF_<_O9^ zO>6Ksw>8SDi@3aTHpeDqsYbv1Nq!E;U+82W!0#E+Gzl37d0zXwA6d-lw@}gCGSC5< zFZn_C!T*Kx^XI_45w(QpH1s0-^)O(79({9U5G}R@Cg7jVT~kJ1H2xLZ>#rGJuZXQ$ z{2F{M&H4|?s>4+=JHR%mB1LsN?+t0#E2WB8*%oQqV2ox#5m;OXnkWk;Ox%8xL7g$T z-`H*6Czjvvx4x8i+wI8}F|G9<`qB)aYH#@wDTzMT4;CL8`c1RF_SHQ}6AIKa_s!1n z10blTP{*p55MAhzu1vyPWSO-&{_Fx!8)|EMmnM-V*0-OOBOd(wsZ~U&2__>andgd%1ZGTtunJ|dG6^UUo_Ui<^8pD z3ItJkYo)h~?7BR?Hbvb61rL4)y3p*01=QVOnMlvJuYW*o8JAtZ)&?kq&iQWI`TOQ1 zusNA@MFHUm-S z%F#+;@4yb&C8c5QNShDsW!g16=g7=>^cBt473kqG zk?wRHc~b5^Nfmahj&+>BzkY^X|Ikf!Z2@4#&nvNd$5yC{0s|+EDNP-dX~gz86<5A; z4|G$$Y?CnQo~2(Bz*sEZLq{!?=%w4iaGWhQ#^~zbbY_UFaiX(%;9&Quw_JbTUCx7A z>Pcw&9xI8LOjn`WStRr*dE7Ihm_|;ORdSe~k-~UHns5xh?r4F~@G;}SsT6S+rxOsWcbU18d~T|F8x#7KdVfUMS!tb6{oO|q!#6^5I922` zE7!V$R@v^ff=gcF=R&z06Q%}<&ejZGI$n__aJ+gLeLd#Z8!oh1fwQ=ud2n*96cT2c z^X2+dS#ZSJ;d0S`;QjK@GCH>GaTVas>X|jg9c}soJiTCPl0UR+o2T=eym(8-N4`Kc z^e{MMKB4}cYH+fwkrLxJE9~~A@v+@bt#FY4^2Yfl^Z3qDmcWbGvNFv zJ^(wv{P~1}Mv!|}#;R&H3IWVh)DK80*c815w|ZUiy}YiQ5uX^IMaRJ6SMQ4bz+vQX z8zV5Iw{X6!GV-xoyI5v)0*}!X%Sz^rwN@@eC5{H5MMW7G2(TB%aON=i9eiXUO6b(*dKOroJ>~(-H$N5Niq|y#!6VyF*JXQ-9a%c2-7k$E8DZSf5Aw;O zhULa?z}Ul#xI~vtw0CvT3<_@QDCzp!Vb?T&iz^o}k93}MAl};~)oTX<2c6MBD zUR*N*G}`@RPTib4S1+{{mgqf0V0oQpP=yztz9tx{vOk^OhA#`wscC*hVt;{}+IA*D zkNc+tWCDzX#3X0_BOaK1{*m!@&xk1c&wt|suiN5^8~NvqE}A2^U;>kgZFce50(s?Ny7IcaQ9e@n*icfDw) zn63waX5fXCTl^46P;DmIH`KV;^qr6)*!|`F| zyT-@=6%Sn8`8PbUwh?Zp5d!@SB|^q`RQdAwCI6|#*qIWtn}W;fHGU7gT3XRS&6V-P zf_Jk7g8ngo${jj^Kk4+TCpK~KP6)i*0hGX&+!~O1A^O39%qz+^)o7|YZaFFiG`DV* zf%EX+x8UL-lXff@+Ba!t=!OJws2^-zB zn%-9=snbnf+3&U(2lV)d2>o}yl0`{#(>R1=_A%I?SG|@BAwAKmwfrs(0%PzL(z*@|hJXpICA!e5fK9+TB5e3>#9L+~cnJBSCnXRKUi#7HE& z4|GE%5mLf~r~L(F0imVH*!FpPnlym)j%{D4cwYCS6pPG(VH_OlW|7?$)2ht{exDH< zle0k4I#d#F7hU^xw zlbQ1MR7^f{I}V5_Tz>Ue4FAlncDHWl+Q}{e?v-psR_DS{{q+4@OqNK%n2A!Uh77tt zv=>a4@(=USVIN`p#de}))Aq|7zDcML?`dFdLn(ia7)ipj@Ggybr`WfM0BEq2NZ;-E z`Li;~<@&EoH-wEW31=;;U42W~URs?8QzE|B$^kqa|zz1yC8GGaytK zbgo&m5JnkNmbz#bLxE-T*NKx7qGYxgj8Y%gb@Vv?S`4mzO8T6atQ%m5^{f5^c6fdd zYeClWOgoa)(iD6$yB$JBFEnoSRc`;SpOjpoNIocxs598RUSnSwglL}Cd)o{pU1@Ql zQ1T?=s|_q&cp|TESYBAt5mhXq6>&1{k$PMG?&K}a@9R^5BJywf!_xY61AnQVn8UDQtkQ z0OzICnBKGLz7n#`Gv+PX?o<0j{m3wpgM{CFIZNF<)TFX$4i&Sd_FnJjXd{&Y1}Bu%z^wkkntsckmG zvBbeWUPH?8p;O&f#;PRhKQJvF;q`=FW0gyT+u1=r4TaVj?)kf!F;dn;Nd$s*8Xuj( z=wTAuuWVoeON5WH{dU+cZ!9T193YiVWjMXWjeKSKNJT~>K^e!VXB=%Xxr)ycrdvsRk{loO zshab&pyBkW+`pn|Gh@xOQ5IU7tG}HReyU4yEL$UaTeL@BhoO^ZA$?2aZmo@$H&j7P zz%k2efu3KkL_N2ShkvT!d5*jpd(7z^L1H_gjU7_fS!-U z$tOx0I0`E7m~eBb2i;Wz#f`*BQ-RE3GbCu|F z^z5|n(vz>>3bF6diRncXZ;%L~zHEEdlf??k-CmzRtlRJ@-0$*y%|#-)snX5Jt`oC^ z^L9NE!EMhOw{KX(W~^e1*^+zcA)4(iPr;T?t`j69MH1Fv{K>wu=!{uqr3Am71v-MT) zyxJIlA}i=ci~1|yOXWR(J!k5Tqq2)J$Y}FUH)cGHlSypm(wZ0HS&Jzpfw17QdNbP% zyD~#wP1?J9NxB%5vvM~YxjH#CUU){tkOj(tUjcp#fgA?}LbfdBoYcl#^)rAI7{Ra*^yd?owRa~YAP;^`@ z|Dxzn96i9hS5Up2EABHY_O!#}U1vsivXlJ2hR~Nc_2ixm#(#M!tCeh?v?q6}6u;+p zYjhRi1c%>a{bsOo#rrwbx#hzfMJG`(V6RqoLV_SCW!}oR!f-V#h=M@pqBbL>?}1lJ zD;cP{FoF%lO%l(=9?OXieF}7o-!Ij>#NnAJK1hu623^t;Yt2RmH<5J!A}%^{P;%2v z@&duW)h#((CJeBVU@~6V_E5#7j8-Aw*+Sj9K%-zejPA4V&Kvnr|L78S zIdH(LqQ6V{$72@80jt6Rq=FOaS{(1z-Ih>3=m!SD<;x|KuVZ`k4nC*Qp=>{KgBd`(4GCk*6SuXB2T7yFD;x-e*x7FvrG?d6@eve_a z@lM2aUT&N>TZWWI^J#w`nH6aLM$0-0{T0QZiJ4{dJ)_P;_?pq3=@?J{T`#Lq*YJ>i zt4Q?pv)LfULw^(}c)-jujlqGTh@giyaFYj}OPn;IA|=rf>JG20-p`Fq`Hl`#_Z*3A zZ=J}V)C^Ggj6-&sjhxR*ORP`{W}>tDLvE{gV9R5iiQb<~bK!9TbynRsjl%?g=?{ey zdL#ZgM>U=I#!T8}c53WI1vdmw9syh|4-e|L+`-7N_Q*l^L28ejHnpP z)rW&BZ07ynq!$1rH=mP~prO|yyN#r5o5(&!R& z-)}rA0O3Kyx5Z5PeDf;5^%r!!km*Y82z2iOhj(#XlPA&q^Z}$yPZsW$ z$8sLypvo$ze)bk!%JFuG;JS>d$Ue?gs zP;VcqPF0b~=4!=tApD4xICsrD8|?D0{WE=G$ol zPjbhdNB1b^)42o2^@O!j8uAJn@)Vn#)T%Zt)e2Rsatcp5i`Z90?li2!2X(w@)Q%@L z4M^~knygEKcIu&Ip%uzKu`SI+i~?n<){BsDw}Mr4g&9z(9nZKvWg8RzG~fF`N`2`N ztC4She&*RI!9$3T6&R84eB zWR$x)jdh`LWuf4j%{7=WK(h&b{7I;7H~=%H)i+*lN+^0FA!QI?h9?O8^98{>ZAeX7;JxtjwM{U2no>NIY8K$u>!zrWB<{ z-I~uPm7H;`AKEI>lV}uEUmM|+dZ3chV=%msGIw-sWeUO&-B;Ltc=G%N6h%zeZjOim zI?1%nwU^3Vg;44oi|;HDfPMDmfvy4;kOTB{rC;Dd;ph4reBDET?UDyqp|3(yCjaA4Cp)&`DT`!{7v z1(LC?{kWxrRe-J^wM}-aId$-}THm5ePDxg?Y+RE;_+hBYjOTZxzPVaKU)8b?bpyNF zcUg=;?!K6#-WPG7v*YQo-X+||&LJDh)CTeuj-O9qLuo4>42VYt9m5Y&93<4J%e%tV zL@mv(hD8~9X^bJ(+9>kbbb)%9L`wZj1wUxNX!oZD_~_~ToP7(hge+!+#cCjQEg`$J zZ^(L_rABg3XXBEFdc7o28ogTRUn=U5hZW|WEE`8%T`EIcW`#+4JqGF{25R(JtWlM> zSo|5+YDEn$ya)Kc|0BHha|%7Lj@Q4B!dCHlXMLB#OUheLP+!tq+fc_8k6mh72~tMb z-};rU2F*jhI?Z2B(4u@cUOa$g*S0U-ebF7(M!~LOFr=|F+`g=CQ1&ydbziq)&#X*B zCo`%{<<_K1Df0XHA&6s7F!KKEKz)+@7v#n z6Ax>T2uorbzE0x6AdgaT6R5>i`lM4_$LcDKM5U0oXIu*do_fO5mIG?%0bN>d&dKi` zZV*D&*&}uR+Zw=*+9^QkVZ-jwBt`4{Me=O=zs>Q~7@3v_{Y?HI$KmeBowJNWC~;s= z?^L@DlLW)9uSq|v`;&>QuU0TNq?D~>+XiaKhaQMd;cUNCZ*?;71)EX{4VGCwJRpl; zKS8*7SI4eQW+$vR07wG~ne<9bE2QQ@``6m;4zUz9!>HH=gIDm8evTqxafU3xqNVwq zY4u?+3u6#GLL4a&g%3OJFfbB~(I#!jDiHYegTG&8+P<2h>JaTaN+=|3X9gOfu2R$y zjLgx2MrVtHCv>ma0|S&l)h>ilUe+!Hilc>t zJ>MgXH?K0PAC!02zxR#YW95_@)tX~Vc*`caGLL{FSTH}fy15%B5RbZ#(p74^_M=>< zt{xQ5flp?Wt5a30gyJUu{S{N=dUnk=m-L|3ReDrBR%>HsUpG^N`KNQt$(toj+d!k# zZC$Fs0Uc7D@I0iq{U}q^73U}rP_}2P1XI4RMj@&T)AC>3S`m!GB{^qLiR3X<3}idQ z!rpvp!(Ns2tYOVsX@V-+!Y_NWEg^+`1@dC~vAB%PnzA&IeXy7)WvzF-wKg?u7o!}r zXDCtFdTLh%)1ph`EKDL8IJI+S%&-wvJ1E>l^({-vp-#WK)tOSIW@G)NVhy<}MJ~TgQZ|6k1K=64~8u6W8R2+A4iy7MSYlqa!1>N%(F`fFM`$^Bq&ylx=qH zf;_DM?9N1QS?<|~?q4)^?h-kk-UgE9LtIi?=spklnuzZ6)IADi16S0a>dxGHBgl!` z(6gNdPK}!5RHM3k;%x|;VR1|Py&+$6)UAR8yYGd|bm)rlYJ4F}sp4F7?F{k)cl)7& zw6X@BIkvS&uixr=(D#4b5BUly!97QY_kIe56&0xOLsmhSzL zN-=PQLu-ySCzs)|Ag)ta5cPz}5&uFJX}(l76&m{xU9UEf>+_()jL6zUtf&u|*U1J1D+2}iB@>@E^`?YIiV zSuKfB{^#bkc1EhPy#cQKd%uUl#>(rAI%ApX8)gx!d9=$9N4)q7XBNPw#x}DCaF;a| zYLjY+P?jlHw#3EyD$Q{7O@c+e61dIYs{>phXDW5OLBh!Jg<>d9$Gssb%|vFGk`jN7 z3vLSczOqxC+EF$@%Vy>bV7iZLqjVK!F8fRo-rE&jRu4g((uvuiic*38UaYDk)TiL} zS#d5~jsvA62cZgYI+kh;9=|yn2 zVEm<|YRK8OiuBxOA6LDXtZ9?iQKnV&0RfPL;O3?Lz&PO2SgibNus7mplkQLXNpdBm z6DRr<$a6gESpfVf4W(ZJ&ra9`XQm>|mT4vPAGDiy@3cM^OY@Wph92C^ZGLqO&Rq5^T!9p=V(ze;#VGSl zmZarxgGx-3G2=1 zQOytyHz4%cOICwp5f1`e_mg9x@VyuzpHWAUyw&$ex>pKISZBN;-9zh=CYttJ<8C$e z^DkC%3U8tY)Aoj{352wU_&Jfq6VsgAQEqhX`~?GRw9j@-WBwoZ-aH)YzU?1x-=#$q zq1}?DB(hGMl(n*NA!NxC8M2M2xJsyOg`u(x#+EhPj1ofG#@J^hgpqX&#u$F*r|Z71 z`+lD1_Z-jtT=)IY_c)$^Iy#bB-kN0VGU$8bTwQlwY}{tH z4abHl1kCg!CTM_A`*%qnTlutGTe>&73sf<6{LKnovwvzs&g^I!4NTlKJ|8iQKVpbW zHu1#6;fi@q5}Cf4t@d&K`*%O=Ns)+V$hmYp-a0QTyZ__XKv4)g=7Srw+^AX@3Ad$D zUFD44_n*tygVV)!xtogKWyrYE2;ISQ;1Pu^wFJW5nod^CiQ5W zEsZi39tLP46H(y;h8=zHT?cr58O`3*Y&Fb`M3sYlh1`ck92D*2sn%JvV9SqsMTt}8 zB-&SBl{Il0Z9ZA`dr}928`izw7Q}8~x!)#!@#dV@!F${nW!VcAUC5eL?5M`}N)&ZF z;79Js!OYc&=Hul~ITvdAhfgm><*ZmDX z{2gMgXKFG`y|5u|D12KIue#B)&WIJ->~-(#@PoI;7@_u;CXk>iW(obpM)BWB-E+^X+y{L|p!#Uq|QcW=>UW-{1 z!^Z7^bEuFCN(Ht}9z32aGQRJ4XufY_h91T^DxEeLALRi@?X>o*>3)V*6pKfHIOhZk z@<|)hCB;9^TY7icMZc)Z)aA^a_S3m_lll6LFQTJ{6O-*jGow+X!5urXc74LJLQttD zlXw^!cn{=q+M1|8R&=>!F^SNfp{!rL2=AC#G+de`=@k5{0yJV>f`fJ(TN)~u8=$!y zRN}l!nD-QZ>*3RAZ2gpf>+6%{$nZ=F-)G~&s3psG>y~@R;rtulDyodB8^4}N_vnAb0yo?j zay@`M?{YD4@V)F2+cCKn88ny~TgWHSNt&^%$J2CHtx}x0a`Bw5w1~ju#?02~Q6}a& z-x*8-VT4C+*?@73`^mX)v{+a5 zd7S5^#&wZSQ%x;dzu~2#mz(KwK_xcR3%@@kuT@NeDwTW1s}m?Uhj*VY8XLclQBbG9 z+v14esNaX;LD=9G7hDoJJqxW{Yy6f}?)Bm?U>L`HsoJ5}jj(|ymfZdJbn0$QoH}Ek zlJIQE*xi>hleE+^x&4(AUy8=C>+>J1*#T?>KZb@Hr@0u?j~l2HDL+PGe6d%{pXnmeKh6Y z^yDq6((#@v-Y_cpmL5AdjEw8O(jeJtCfPG^<-umSNuQvOty!2&2fyfGgR;7vGQ;@t z-kk}1G?t>~gVifJKb!&5#dA6-0z;&zotb`xez*Yr9q4UD(>9&-rpp0Y!ml+%>$cBC{XA_L9&R zCgem6F&M&pHzYrnsl()Hsye{6USo7!n*oKm)Ij`X(^BPaM6t(VxwSp(MR3-d?N$gZ zbL*12@AF;>xb%2#ymx_#i&y!Ypm^?~b^BRc&LoR%$kNsCm^cTa?M1`nw)>gwXQFWg<>B#<<2V|JbjXIdse`45TzI!M;AK@F3S?ml)j3}++C%DCkh3sZ z$Z3NHnxdJanX$YPeb2reMuxe~3=^Wa){mc-C9{=!)a?3q!jn=nTDJV1(lAxisl_Sn zRjai@X0#tejK9FCB%MEEdEd-@{W|Mg$7*@Ny+Y4aqT<>SybnOPJ{};6JCZ|QjyUa4 zo%X&R=Xt}U%SLDIM;J9l%?qb})$XXPOf6+TtYwNa9+r@^?iUE{U@EA#~j4g~sNLQ{H6UrG5|7*IknlH>K^-*6Em4m(7?v#bG z@!00d1;U88LArd)_NyMK@j;KyzVTiCaklJtzQ9p_EGs7XImdUgG$$~=^&c)okBZwR z{Y554O6Nug$Cu=rOR{rlC@*@n3>K~6^nM$D4vLA$V(5l`8or&CgiFN8e{q|z#Jjsm z=C0js{Bx3<6*DwlLh8`0BcEuV^Gx*rbvZ8hLI`E6kH22-KF`*l*M2b`S67U3UnJP_ zPw?Cukn)4OF=Qa9i3s&uMnz+W>6^P`mJ~HzO{pGtt+4O$*qWiom8sw-#xqtyY3G5d;!i|TLV|2S~g z{KqrnY&dM!%RrrM+Emwns3)JisP^N{PuqsEWBA2O=H~u|`CA+Gh6p&l3N2;|LH-V8 z_wNYuJ0RV`IO{bz#)J(mPtd6ueG;gwAL27+xE|RjaKRe?!H-ro+zBM;uG_*YYYd>c?4gPy=g84CMW&C5x|kw1_yREua-M zFWp&xZo!_kM(y_loPrkgo4r;QCu-fDuH`aKXO_TZy$(;(fa=~OaZ7rwZLgI1jD`%` zL@82zMjK`96&8Ajm3dgd&MkE!4#1%m8$z(zfp?8ae5}$rEEXUtX<$&<0Kt7>>V~@mj`It%;?Deew|tr66yz4Ir6+p zrN-1p+lQ7?%H0>sb!N|5Ra|q1sx5Sx>&tVpW}J*TwKhzimX=w^TN7huuKYZYA=uy@ z7^RJ`JQgKeE@6P3)b?MDu(ca88NwZGX;O|fGFKQc&?z??iGN0Z#QD+*)Lu0sjM_LO z9!FC!ky?AN;@Jbx!_zz_=tl*v{r4GUN=}p1mSw8B?d%%tW!Z7_IUY8Xsgohu zo>5A@3HSn`hhaAJIt}9|zJv#{%FMpMs}%?dKMnwpuk=zx;?j}ERE)+sGzAdH;|W@; zm+i4obBddV9yjjWL=q{ZMqPT(AMK=lRUWID80{phPss3y9xtdXH$-mTq}#d`qpjv^ zC-R$=>%@i^9itjUBnh2K2QIF}6q^62*M0n0Y|b-;-7vG@h^DkgUI?<72D@N@kg|k3xaqE22UUupml62I3Ln2UeQ%zqxIx%x@+ZM3F6&E z!fhJOxf$zLepq75z>lk2I@>OuKp&nj5WJ)o_bwC0bTc6UqDyX)iuzaATW6Tw;j2a}wLg zJj===LQjb#%8zGLL{W9)s)-E+e4crJNg5R$2%_Ykmtap0%R-wMP;U-_eQ=r7P+mrk zG5HscS|3jSJC52bv^4ydm7bV0!G>#?OW7hNDA2^YB&E)H!1r+AqL;vD^4BsDq!muk z=HxA2TtA%p=-4Iqn^nLbUEVb;>0+VN|Vms8P4mEwqKD!h%XMiFLP)m>xNOk^+A zy8{)#^n$#a`am}tK~EGD+vnlJYdaCbYr+URX70=Ymh#si``HimwW8S6ZM;v@c4_Rm zakc&`PgEX9S?-H$`vRvU3a48iu~I|_>yTN=-#TJa$$yIoTfFH#^&l_NO^0GoNN6;s z343NaQsg&*j9KL^o31#oHL?%t(I#)$9K!e1g~;}}F!fl#UDHE8dLb_Z1;em|M>tli z3&r0#Pn!2$h5r8OF~{iVLtRJ1le%L*YBl!fI0-{;_>iu~WLaR$3sxSr9=FkB zNxIvh?M`Ab-c78&>}fd(2?`}hrRO*h3eA$_`*D_4LDdayd|M(Y`)uQP`sdi6hM2Ja zF$cfAbmK3Jq}i**VJ-cS^tuW0VmKN%rec9mGc<}>rYFjN!QYLfxn!6#E1RZxW@Z3o z`l?Ow{Wwr=+R(oH#n_unZOFFW$iHXXEgM6t_-YW5Vuw`~YkaHB4K=oY%k9Rz7>&$Y zc^L2&YG8fke)K%_juXUg>E>+ZqZdfD2HI!NM0`2h#a7xD*6hjzk2URM6#BwI_dL^%lq^}Z3msX|w5vDo#H8OgaN@I($Gd+l&a&^p zfUa%5HEve%SNqfk?W^T1Y11=SibfhPH>0$=YfNsfZ0YIO6KpCq-`7rtn)+jEb#RAy zw@`lT^zb1DiALAl>@RcZ3l2jeXmljja{OKnyURCC4VFG?%Bge z%kg+0HT&^kULLATJ*&#t#y1oA^e9z1u=_xXi` z;b^bw=r_CO?hyHZp-&4#EKHZ%BWBKZ^YMm7Lw*{bYQ|Rl1=SW2G7+HmBV*V0U}vvv z$&X%RioL@Dn%;&wJ0t6eC%!v_^uz7NWia(}cH8DJet~B_*gK7tfJJJOd1!mCi`~@~ zv$G^EFP7qa9{5`P5ia_Eye? zK4zn5w`Ky#493x4iC;0$v@c7_`lhh{UiIClm0ylsEZyJog|QI^R38Z_x%*+|Q5 z-Aw9Ot9ba*Q@hU(1Prw&_^|R`vqRHDVxH7~1n2s2iQ~ogRqa1RP$W=s@5qVj)p^7B-i8d z`m9Las>1NmPF_rhD7K&=BuwYQBG74fO6qWCjP|lX=;Ms2`9jF2`i9w2(pK@e_3zS} z19$Dd&3~-81B|??huZGUunHIg%Ae;Em$G+}3BQ11EmBS~lnWwjGfpvW(sPQrME6br zOK{xCrGmjrAQh}lQQxpj^h>dT!hWYa_-yc4H|Po znz3z3#cbv@fXx|$I4$VtQe%jYN(W7YZTx7_f>G&O!;(X_-^-Kew`Sg_H}&^?Mfysq z_U_r+5Vei0gWn8S2iEr?6uP8J4UXV*54z{+ifKk3tj+Y)e#k)ZNCwi`{DQkPIgi%i z`%#v&9=bzALa&^=7%BJ1rm`N&Z%Fr5(;og{?Gs3|%?L?Gb2F-}OKpk;Q+98_q?wlL zU-!9RUkGyB)x&&#xKb;9gJQR%^nKAfRbHje6yi)|g-NPNK2>iHxEhfZ?X04zLHY4X zkIh3uT@r8OGzsd3 zW#7ab!kUA5Ykb8gd^~0_=lr3E+v6k_#@CI>{1s5R{}xc@--$BPPGBLRyq6e>hO!OX zwip31AHrp4qW);4li-*xraroXwq&EHeO2zG;Hq{x#K&%24h&_IJY+b6hdnj%UfpOL zzhAKg+O(wfu@41|XTx&G0S9wxf++Ge>B|}X*s+GiplXJ}zK{a1k8aF?3jnlpLoNS& z(P6pr7!7Z4f-ZE0&W1ii5AU6-C%>zxvrnA9JDVXoUc)`kXL&=~G=+LQN-)G-Uav{4 zC(KFDrA0n(>YBWzL6NCGgG|T_XW00imTu&2j1a_+mxPTqIQSG@u609wHSR<6_CW~g ze^5a@w$F0D0>Z`DY$;DSx?>+gV-9}j6=UfYsrl`86*kfaZ9|$o#&*kG2a#KuT8Oy7Oj3hET%2Lm5c|cPdv;dpB2KE(1WDHn>}07~j78 ze14v?CC2^dHvfAEOZd~NFXpqdZRkl-aMz?P8OD2l41WD0J4+eS>8?M20e7}VpZ>5f zWqp*)k-4s5(XrziIgaewyabE>2%+37L)-l~UplANU-gq(eF&v2-j|a{K%~MFP8iDd z-uP%~b_z+bG0!#qLKZEhTJn0rTkCu<1{NK?C3ho2!cZMqrmi*0e8RiGwSHw8wBk%q zF-DVl&2#&2@H}GOJJXx3bkJSAEYa9G*b*b%n>fD97_)FShN_W~x2Q#YCTNWK5-sCX z2`ccB2s>}({`5BB1(uaoymmtoU$Bf`uz0t9mE!N^LODNZUrb|O3kJP{D)!}2ZfN!@Fk`grg6kY#MCP%XyhXBL{1yoEZIbO8fPD z3RAz5q8RVQV#sV${9-tRVbSjWnH3+U0{FFURJDVjO$paN7c|8hy?mXTl}&td#u{pb zkVS{mT@12252~n#h9{2twRa>+;xe=2AW;5y1JZH>$eq0^gU_0Ifr zy(sF9Pn3sM$Xw_NN#5-1lZAil@`{dkMni*FkT`*lRJS)I8?Z8z+hZ7dF1;CvvMBwY zyOj1A@|@%Iupvyh1GZzROqtWMl~2U?X!2!$&?ig3TNJu5|n{^ z&uJQ;l?psDDTz0XIbN8X7z!D`tks2zM+dYanAq@M<|=5*h?Bc}E8brdzx!&J7M;dJ zWfvv)hbu1%d%Bed_yTcRR!Jj!7I9enQk=Z7-Vk^i19Y3N9HdxyKX&LsfO_5Q9ZEmn znr}~pA|%_f56I9;h-l4)9naT10lar;9MXUoT<~GWj!IE{W^0lgbG&t)Q-0+29k={` z|gt-n!Z|HwZaSIxei+j1!)DU-ZWK>SkXg?pdJGV}x?+ z4x!Lfo5Sh)jCEbnjLq~UdRW+-x^Kj{jA&72OF3G>UqoB4Nx`@S<0ILsz18tLhD$na zBfgb(gBKT^S#`U2JT#o?n9BT-QCn^u`2odW(|p;cVJLdo%LV z5mII;!8)td+W7T*8X7?pCxXM!+tRP2G@`S9&JB=Crfc|oxWp2Bo48)4f7_9juL$_r z5Pd)O+ZLDKn3MU7lyZNYsFFCqF(#>%rTnjdVjN2N7xS1H|3Y;;W`9mBtyb{`1*TW` z3r5VQ_GdP}UA8jo+eA0^s9;Hph2h(WNqOTn1Py(^E`56(2i=mq>=>nWZ|&9LAHcDf z`r?d$g-dJDoYftB+^sTm6hhcaU+$6-+`yDkS{H-wnftw;cF&d}J|{_j2TJ^3+B{^~ ztD>@%X4-SUzE+cq31@M^@`KW4)eQF}hBQss6C!n0FxUH;2P* z;ky^;&nEGj(_m3h2i6>pRoPF%(SO4X#Bw%Xpx=4_`L4bm-KtQDwPcbdnRp|LP>qg2 z`&B`$@Fe61M}vxAVc{_bxm}rZ-CXa^3zY2**Xlj4Z}Qi~NrxsXd-*w-{T=`g$BVKa z)dHQWHM850muGl-8bnpmmKn-+|eRvsAh;S)DTGx2lD) ze7<0;;>tH}(>otpLq^!^=j^D|V&_P$q_9&Sw@bV^-|n1;w)If!&x(Le6Hx{?T+J6g z^2E3MxKy4SEhx3Gp+b%J+{pVk z$U}N={n(x)W?hW zE>7mSsSb@*^pArVqmyTVn{i^5~GoOWhxR*5;eJRNa^*Ph#d3iousQS+iZb@eqnV zN~-e?%oX#E49h7V*<18Qsv$C?*zkv{z21060?O}j$2 zu%wLw;DCkNT~bVDCf({C!Cjz@`L_6)qP+PwLFHcC;;Vf(S40ac0V;D&^Vr2eZyVzf zvpc1_*a4hMZwY$%_z(7R;>T~;>$L|$<{oAQM)z2f%TM_CZG|*Cs|km8kWIxF(R-3< z+77`p*lr7N|B(j&{mtwQ1cgU<%yIMct1I5wSl{S*maUEEyja!Uap~#aYiX2Dq4AzE zu?e3=>4rHL>wQZda)3hfQjO?Fg&pK9Q=_5roN084#7NEzXY!Dnz?b48vF_R#ar--3 zLu0=o2+q3P&YK}}>?kMy?1-CDtP;ZhXhveG8E3mVihHafr&!dFsBNe?eD$bce>os& zma!^9={ejji#-Kx1}1UW%$>%qrn7!wXHj)GiMe0GXRKSC9lHpY*N{t41*i$#p$v_! zf=&;(u{M5%5{#3R*Kvy(0GZYPPCXpx@Ryw{6U|NMGuUBs{xxy^ivZ2KB}XEAZUQu< z)WX7)ZOz`}w7y(kx8v-A9i8BoX6jPlbt2XEDi3{~%<0%Edy6fzghvew!dHpLCCF_| zLMlIf7O~z2arG9b?+}asCr%5|L5yiJlnLRQ~I*LboIs8nX3S59(u{S zdR+$mqpnK0*VwVwXUi2P%kvMKuADv0AECG=W=Y?gE;tp!2M(->o)i~nuI3BwCygnce>8~ z56ih@@8vb%+!IswEpY2wu|#l>bq36Dtq5yy&+2uH=Ux-T`3ep*s?=Zp+w*B6XkR*S*x0DvbVnMEnZ$6D+62EJ9jbzl*NuV`aKA}+jl0P>(A@u z&%5o9?B^d+g@3%5{`h};JJ%F$a+C+B-Cnp%Z`PTwEOs~pTK5>m2@c8$UNwx_S!-_3 z!Ozc~pQ~`!EfFX@XNq^{F$ockzylz#=!q-)ZQQ{N&!Z}cBfrl5P?X%=AMfGTmVErK zOE7rbzVDa91+Yr1`~KTy|DS)bIly?GjMMx6AZPHrb8QFa4v(x;cfkVPV(-0~Iw1-I zMdYO+#VD=_5c!mca9^na@IFvuZ#3Eq*_a^q~<}1ThoTy%eT_wsJpvf)_GLrbm zO!0qSrGL0*4L7wN%Du8$6vTob`oL6nFMz(2`i7S4L-IJ%q`{iN33vacHRAkTf>7vr z&3=8XG2YI$E5n2>07iX6T(bs$?Dby;-g5lRcMypl;6qr;(}JUa&s+Xip9%TTPU{_Z zcDBjHJh&IAqa|0(@AmoN^Rwj2RA;Nq+ZH-PSQb%ZOOZbOVu*UT_F5Rbe-|g~l3)Td25LjEvja2*eWwEW zq^y5??Apa3KL)n7Bzk3vbLFaopHbs1bni;Fm6@N!p%3bsXR|g=tbqZF$)B*c`~J)3_~W$w&p(*iH0uSs=o*3f)urf557hCaaDXUovB;Fi#75M@ zIq9zp(*qQVvY+2U`T6pEej@ve$bpNLnFh(pSqkDSjSCQ!BrM#Fi~;ssDX2h8)He*H zR=kR9cyGUF&-e9(@+-89zyB84vf!~&5Bz(%V5Scoqa?Slv8Njl)&3R(n6?V*0fdnP zDkVeh!0Wy<6J!~}K(}2}EdhaUIW5oSCFTSO?>|B104F6qo6j*fKmlO(fzj3t1z&%H z>DL6pp`T^IsPoT8)QYdH`$%&^-GFO*;}+}d&CQ^-*9$BeesR?RP0%oL2hobOIB1XW z*LAPrkbN&+)On~;z58sJTS`ibYyVuDZ=F9lR5r%OPyfR<|6lIEv#Do^>tqVI(wM{* z77DSNxOL0ey!YNfs54BbK25zg)rw#T^Uy2BHRgk1bqUzF<<6Q!T;Kh5uNSP4YJl#R zdv!Ejne|HW0dE>bd>W`a`vO?;ZJ~U!63f}-`_V4_KV#m!ehW1i)n8-$_+Hi3x9qXi zi`^bQP84X$#zp%!xOQtHav;$pz+v}Xt28>(0$PE{P+Zv^T~cle9VR@GI&N6NZ?+|M z$nN2qS}v}8;N5YtZ+Nq#s7ZFgHb8*ZI|D!F389s*Wdi)tg$*U0jB5`5S-$=+7iQI( z@pX%exmWhJ_Pj)VOM=STFfN8p#4Oqa1IHpldju(ndVn1oPYrWNq6SRVHTe%Ae$Adh z(5*>SI5~w{p`#`cfA;uUFxYt81QertT!wpo*d~R_xcxGD`<9d!pjrR$QGV;S`%N%B z^!h^@tHYmd0QcHUy9HQ)yCj_U%1^#wiPDin#qbujiR`m`I|pm`n3->hy?!Ema@HdW z@f`4XuL|bWX7qw&_;=Zp)w_i@a22F{%gO~K>4CShx{n50gRmeq&%{?DiLzr9SiY?)QJ&@mQ3 ziqJE5DH;|eAmEO|=2w)p{`^eXtK!Nq44pV`(ztdaDlk;O#Sdm@ok45V4VusTk>!DR zew`7RX}aeMY=mYEzK#Wz&TcqbKG#G+M=+EW7x8hT zgSd=dx^D0GA*OA0*$aT#A?XW zl**}s1=^4%Zq=DSHn3nl0j9vOj391?#V`$XrlPRH)2j$!WqqcBtlU(HN7AKGH_)Cf zM2v9bdcQyZSJumTlRIQLKsut`@MDmJ4jhUya=Cv!w;s%01a~Te$hq^^(;ZKPvR0Hp zuF4sXe%K4W1I<8S8w=Xb-(Bz$Vh4pE3|(3l5F!-Znkn|NcP{#Glo=J*K`4@M#ejR~ z(b5z5af#Uv<3Ci9kt>uOu!anhRkSzV+i6`$5L+7;Sqn*n$oA|Wz+IBQ@rO#1_HZ~N zA@jTJ0VLm;m?)ccHvS1cxTJ4#4D!%s$5walAy{J(GxQc~1(2`mg)uT#@y?}R*u`Jl zKW&wY1bfYr z!8WS5WH=#C#z--nxHe7#W?pc`$J66voMK6FX|3`VS4LQUE121+z(THqJsy@85#+_Z z?T%aMCg}He7Knn+cL+T2PO53JjJ@vr88tJg`bFFlltcsSh!@c}LIWVFRq+Ier)Ao#WyBK;e#wa%!BO0QkXmjnL?GNIecN*)Y1L^x>zE-5Ou%UT7_?jh%OEY#uec&tL4AFX# z6;!$7UwE_g@Mhd+R0zD=0yI_kyFN4lw6G^H6DCxg5e?v%6JY!44*WHNNbLvb~?NwSs!deCp4G7OXvtNlu4>-`LPq75x2lefx)fd;F|O zUtXP}faCApqwheYz7*+BYDfqWAc^XY&{p2(M}?dY2B~ud{BZ$V>t*T;1J2Nl*MGaX zyMT$%MoWDrN`zw7Tts-~-R{QN*(p8@Oi&LflZ|vR$c;G<1|DP}EZ=VN1e#HZ;2- zL7(D+q4VL+9z=r=cp9rpaCyi2h=N!g*;8e$Gu3ODzZe{L-$M;^L`_D#3C5UnO`yB~ zy;^jy1BgF_qi(;3VNx}N57t`_>CBT7m)rP(7vl^T+rKIEFy~=COOaS9VyH?PR-Tue zZ&jBpflDOsvea~e3KnSYHnO0peh;&Lj}vfWrft`|@PjV$1mrzWYvJmI)D`3+YWRJA zzH7;|h8%+Py-kdn%#EU=V7T1QRJ5pLi@w63uEOb;k_nIh`UZoB(FnaV6_(($865F* z+{-fHroveYQD1g37b$|^ux48FR-7Jz;x?=nEqe9XjkAvfz`^+wl7>&mZ@JkG!?{To z;lqjkR5M`dOhCF3N^zC5ZwejsoJ>U20nAQe>q?7Svf&I@(HmY;FGp zDNg)vs*4xu z&fZG2i8e|d9n;Fn@uL4Ifo)G#0#6mqhS|ehOUcEyg*2GQp&y3Hr5A zTMk`6(F@iy&rLOEjn0{Dalig7qEr#ucnvAD$UIAN-Lbe&E_+Gu3$y~PkP(?~gQtHP z3i=}z0PYZ4l^?C^aB$DhyOpaqUhFf2WY?*$HzM}(hv%nk8{MJEahbi8dZ)d~f0;h< z`oVU$Ed@rf;i_`Fw-bR6r!`a#i2wzH+9=n>JsxWFkiUnk8g1xZxVR@?8m59$54=U( zxt^~833EJ%Q*c7aWh6L2vwds~(4?pJ*_HSecHc^9pTN+mXF|F55Z9f-6#Xucg6yQ@ zs83GcZWk;5d?;kW`Z}w+%^0o-EcI+*<(jRZ`Zxzy14!e|()IV~_P7BDRQU4kx}z~qpW+8= z-IGi}%CmzPGOQna{ntL-KN)T;o^6FL@MqaoPs0C0FXn$)aG&*u z?4(VQCbs*ZeBb}yq%`21#MH{FRjXE3UiXwq|KWoE6T5XuT!*qU+&nP5e;3)6rEs3> z$<_L!x`Q*9OMKp_&Ll^wpHFTLm6w=qRuL$Pc7A*L`9%qpUAy*t|D56`SE5jt!tP5< zKb@sSd{trFzSu~m_Ymj3D=@@YO8M=vlioQ!o>@kHMkE0UAYAKq^Tp-b4B_uf4e_E*Q#}w)K^udw#*EV{ws_1x0ieQV%-VH*cV+|Zx86rn?pu-~zj*B8_?I`vs(_YVmAUo>OJ4H-hUHH^vU*!w zs&!F>-M_kFVa1YSiyP`zKf6Ki!?p7}(r}sPJby)*L=M1zDgFVC9lgmVn=BBKo?mtX||dcAU2W zkp^|>7R0x{_6Lo_i1pltuV*2#4dqt2l@gy<$f<-;Dqw8-e zZT@vT1Vrz?2fcs@=!8g9VD?T^<_dKxNcIR2s>~ZwE|t3;J}bAsc>htQ9rw=)ukNn8 z>Xx)w6%!hyp#7*)c+=HB)pJe%n2`Gv!6N?B3@*eH}!F=EfF6t90rZ&Bj9?YPVN-Y}7HEZY>>jlbwuRUZ& zut0`r-C!=^Rt(@fWKSXNm!$qW=!Ye`VyN_lnDXy?axTje2aigQvbY}k06x!J6e&%= z$75vu{H@8g4tUn}Gf<(arrb*a)repA@JES_I@qOMd?zz#KN9_yt)a-n)0FDXskx(v z1(}zdBt#&WcF6lG({oYDN@_g;z=~Z_iBiRo*$YYD`>?g%nRC1p%{nFhp<*KwZ3j-Q znm3ld^Z0nmWvN+E%f0FlEA%$jb#?J5aJxuyXcqQ=!+zv5f`~5;BBK1L-5ef>2j&qEgKH78aUPCdxRr>}|fVHOP!Q1!lxz zLkjQ%=^N(Z-dznhqPNldSeNQGH)%+%nN^4ot9ts0(L+Hx)kbc0M?-H4_(``8z&y@` z?v926WOT0%`T{SHP9aU7JTM`$Aqov_W`7%OD0CGIK3H-9y8u0q&6{HzWA=duxr1AXQzZA}gK1g!zbVP7^e zUCwS^%rkk#?Z~m(mYWzdtwQgoqDjL0z9w1%_4Ek#!f*7k7azmFSLprLE3s`n|L})* zB5RUj6J11=xTkB1_>vqG>GY)s_uBjtZ+9tkz6fRQc==>q+p;2n5Oq*n$sJ^R3&{YZ zU~`9+W29z@2PUPhpP?)VNo5&T9fbQt1n+;1#hTg{yEj{b-Z%?JPZ$FnJ~e`hykGie>}E?wN-hMkHR2KG!7T zGFa?M|GuiXY1@uVs*cCn`QL1H2V5TAYmU7q0S)J;^Puk3FMn=&Z0DK5XBVWx5D(IF zg|G27b38WJLo>u_yp^|>p3r<-PCu$E^Hm_idHGS1Oho1getM~lUoo(3n&43?8!_&9 zoi$}t+Ue&-@`4~|&WoF<uMV&fY){O| z#c#|+sF$-M7icuL(;0m&FMV_+iuSj1ZkHXtNpFZL(j01zx!pM|gmu5J?I+f{z9HKW zrt}4h-WMjwHjdvF-?2VH=mNo{eSXcll$dTsmkUJGSf>_QY0e+rrAXZ@M1Y8bD(j%w z=MCSOUwgBw!m{u&H@hQ^X24l4GIiMF*Y4G!J5s_o+6)m{0SQ|356*umF&IVaW_TFn=!gn=`={8MS-bzJ+Ur<5?eeVQt zpHgAB4lO*aC(X(iG%q=*SLA-T($fxp7k2W}Bznj-WB)!`&8YY=b)iLvQ;QC!*|VHZ zZ*u1R*LY@aehBgkZg!@rr=uw0@3osp%PwiAb5tQM%huXLJ?-B#W7O|t-WdM=4rJ?X z{WQ)$jpaJlo;wQ0UL%eGKJ4C-cx-0|uM8VHSv0YN=JStS7b14f941!X;T{!zkzdwx zN!vyVT0bG>r`^WG{gDN*-xS0-Q6E2q(Q>dfP1u@j9) z)(%7nGON#7^lomR)NShb?J;bd&zj^p$%6Zx zi>iMZ+~_WftSUFHTF!d3fbq+`tDLE_^hTqm#BaOJ_m722eOY5=>Yh& zQSYtT3wbS)wXHunCMCJPG`(VN?JhMRnb>>}S}3+oBae7)bl%NL7ktO=5FRto(dg#R zsb0z;``}Z5bd{P5OnP;=ciF_Ox4l4_Kk$Lm;lzRQyASR>mOpyp3zJ!QU$KBQ5f<;n$hEQYvHY*J0;c(WZHUo+WyQ0(Un&dlQi4q&PYq0h)Mpv=CkdG#b@v@ zI>7Ja<}gq{XdFv9=9)$HN1U1WTHeCW5`~@hXB>PtBVDpxT$R+YNe8M5kPpCWV3<4rs&njqQE z^cSvp28vW$o9Tlyher;VA3*c?ta4UM}%(^@42(+H$>C`vfTQQ!&n zJ{)r@IRSTp*g(;68QL$W3jY;JWzcSU34I7R$_P|pNoSFs`b+?)?|~2tnCVoSJRqHz zHJ#IoWNy|-(%!U3mB^&EMSLK3F5ix1G#p@Ng@3$>(etvNre@T6$$T|I^Xy4xzM0=^ zRz>($p3V|DvT%-LL$aUq4vA~HbwQ_5D5E>U1$<5piE+M2TB993b3cCk;E6`>RBAPv zxPblGu0VsK66r3xq)>0F`B-YrPUlRESEn=yo)*5-lkqgnO9iv4WUt#L6Txw$!u5!K z>|z7nE%ft?{0**8R7x{z%)eV5 z)Q%WyK0kwZVtjlOuBYVW&2RM^)kN0-SAV)jQ|BnIiu9P!9si$>`N72?GF?yq2I!#S z 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 WZ>7-#y??=f*JV|% + + 4.0.0 + + org.example + redis-benchmarks + 1.0 + + + + 11 + 11 + UTF-8 + LICENSE_HEADER + + + 2.0.13 + 1.5.0 + 5.6.0 + 2.17.0 + 1.7 + 0.9.5 + + + 3.4.1 + 2.12.1 + + + + + + com.google.cloud + libraries-bom + 26.35.0 + pom + import + + + + + + + com.beust + jcommander + 1.78 + + + + redis.clients + jedis + 5.1.2 + + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + + + org.apache.commons + commons-pool2 + 2.11.0 + + + + org.apache.commons + commons-compress + 1.26.1 + + + + + org.msgpack + msgpack-core + ${messagepack.version} + + + + org.msgpack + jackson-dataformat-msgpack + ${messagepack.version} + + + + org.projectlombok + lombok + 1.18.28 + provided + + + + + org.slf4j + slf4j-api + ${slf4j.version} + + + + ch.qos.logback + logback-classic + ${logback.version} + + + + org.junit.jupiter + junit-jupiter-api + ${junit.version} + test + + + + org.junit.jupiter + junit-jupiter-engine + ${junit.version} + test + + + + org.junit.jupiter + junit-jupiter-params + ${junit.version} + test + + + + org.hamcrest + hamcrest + 2.1 + test + + + + + + + + maven-shade-plugin + + + package + + shade + + + ${project.artifactId}-${project.version} + + + *:* + + META-INF/maven/** + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + com.google.cloud.pso.benchmarks.redis.RedisBenchmark + + + + + + + + + com.diffplug.spotless + spotless-maven-plugin + ${spotless-maven-plugin.version} + + + + + + *.md + .gitignore + + + + + + + + + 1.17.0 + + + + ${licenseHeaderFile} + + + + + + + + check + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.2.5 + + + + \ No newline at end of file diff --git a/examples/redis-benchmarks/redis-benchmarks/scripts/build-image.sh b/examples/redis-benchmarks/redis-benchmarks/scripts/build-image.sh new file mode 100755 index 0000000000..fe9f2461dc --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/scripts/build-image.sh @@ -0,0 +1,11 @@ +#!/bin/bash +set -eE + + +# Get the script directory +script_dir=$(dirname "$0") +# shellcheck disable=SC1090 +source "${script_dir}/build-jar.sh" + +## Build docker image ## +gcloud builds submit --config cloudbuild.yml . \ No newline at end of file diff --git a/examples/redis-benchmarks/redis-benchmarks/scripts/build-jar.sh b/examples/redis-benchmarks/redis-benchmarks/scripts/build-jar.sh new file mode 100755 index 0000000000..39e97ab01d --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/scripts/build-jar.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -eE + +JAR_NAME=redis-benchmarks-1.0.jar + +mvn spotless:apply + +# Build the jar +mvn clean package + +# Copy the jar to artifacts directory +cp -f ./target/${JAR_NAME} ./artifacts/ \ No newline at end of file diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/PayloadGenerator.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/PayloadGenerator.java new file mode 100644 index 0000000000..9abc6a62a7 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/PayloadGenerator.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis; + +import com.google.cloud.pso.benchmarks.redis.compression.Compression; +import com.google.cloud.pso.benchmarks.redis.model.Payload; +import com.google.cloud.pso.benchmarks.redis.serde.EncDecoder; +import java.io.IOException; + +/** + * A generator class for creating and managing payloads of type {@code T}. + * + *

This class encapsulates the processes of encoding, compressing, decompressing, and decoding + * payloads using the provided {@link EncDecoder} and {@link Compression} implementations. + * + * @param The type of object encapsulated within the payload. + */ +public class PayloadGenerator { + private final EncDecoder encoderDecoder; + private final Compression compressor; + private final Payload payload; + private final Class payloadClass; + + /** + * Constructs a PayloadGenerator with the specified encoder/decoder, compression algorithm, sample + * payload, and class. + * + * @param encoderDecoder The {@link EncDecoder} implementation for encoding and decoding. + * @param compressor The {@link Compression} implementation for compression and decompression. + * @param payload A sample payload object used as a template. + * @param clazz The class object representing the type {@code T} of the payload. + */ + public PayloadGenerator( + EncDecoder encoderDecoder, Compression compressor, Payload payload, Class clazz) { + this.encoderDecoder = encoderDecoder; + this.compressor = compressor; + this.payload = payload; + this.payloadClass = clazz; + } + + /** + * Generates a byte array representation of the payload, after encoding and compression. + * + * @return A byte array containing the encoded and compressed payload data. + * @throws RuntimeException If an IOException occurs during encoding or compression. + */ + public byte[] getPayloadBytes() { + T sampleMessage = payload.get(); + try { + byte[] encodedValue = this.encoderDecoder.encode(sampleMessage); + return compressor.compress(encodedValue); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + /** + * Retrieves a payload object from the given compressed byte array. + * + *

This method first decompresses the byte array and then decodes it back into an object of + * type {@code T}. + * + * @param compressedValue The byte array containing the compressed payload data. + * @return The decoded payload object of type {@code T}. + * @throws RuntimeException If an IOException occurs during decompression or decoding. + */ + public T getPayloadObject(byte[] compressedValue) { + try { + byte[] deCompressedValue = compressor.deCompress(compressedValue); + return this.encoderDecoder.decode(deCompressedValue, this.payloadClass); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/RedisBenchmark.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/RedisBenchmark.java new file mode 100644 index 0000000000..8148ca9ed9 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/RedisBenchmark.java @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis; + +import com.beust.jcommander.JCommander; +import com.google.cloud.pso.benchmarks.redis.config.CommandLineArgs; +import com.google.cloud.pso.benchmarks.redis.config.RedisConfig; +import com.google.cloud.pso.benchmarks.redis.config.WorkloadConfig; +import com.google.cloud.pso.benchmarks.redis.tasks.TaskType; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * {@link RedisBenchmark} class is the main entry point for executing benchmark tests against a + * Redis database. It parses command-line arguments, sets up the workload configuration, and + * initiates the benchmark execution. + */ +public class RedisBenchmark { + private static final Logger LOG = LoggerFactory.getLogger(RedisBenchmark.class); + + /** + * The main method of the RedisBenchmark application. + * + *

This method performs the following steps: + * + *

    + *
  1. Parses command-line arguments using JCommander. + *
  2. If the "--help" option is provided, prints usage information and exits. + *
  3. Otherwise, creates a WorkloadExecutor with the parsed configuration. + *
  4. Starts the benchmark execution using the workloadExecutor. + *
+ * + * @param args Command-line arguments passed to the application. + * @throws IllegalAccessException If there's an issue accessing the workload configuration. + * @throws IOException If an error occurs during input/output operations. + */ + public static void main(String[] args) throws IllegalAccessException, IOException { + + CommandLineArgs options = new CommandLineArgs(); + JCommander jCommander = JCommander.newBuilder().addObject(options).build(); + + jCommander.parse(args); + + if (options.help) { + jCommander.usage(); + return; + } + + WorkloadConfig workloadConfig = new WorkloadConfig(); + workloadConfig.setProject(options.getValue(options.project, "PROJECT_ID", Function.identity())); + workloadConfig.setRunDurationMinutes( + options.getValue(options.runDurationMinutes, "RUNDURATION_MINUTES", Integer::valueOf, 1)); + workloadConfig.setCpuScalingFactor( + options.getValue(options.cpuScalingFactor, "CPU_SCALING_FACTOR", Double::parseDouble, 1.0)); + workloadConfig.setWriteRatio( + options.getValue(options.writeRatio, "WRITE_RATIO", Double::parseDouble, 0.2)); + workloadConfig.setTaskTypes( + options.getValue(options.taskTypes, "TASK_TYPES", RedisBenchmark::convertToTaskTypes)); + + LOG.info( + "Supplied parameters: Project:{}, RunDuration:{}, CpuScalingFactor:{}, writeRatio:{}, TaskTypes:{}", + workloadConfig.getProject(), + workloadConfig.getRunDurationMinutes(), + workloadConfig.getCpuScalingFactor(), + workloadConfig.getWriteRatio(), + workloadConfig.getTaskTypes().stream() + .map(TaskType::getType) + .collect(Collectors.joining(","))); + + int cores = Runtime.getRuntime().availableProcessors(); + int maxParallelism = (int) Math.max(cores * workloadConfig.getCpuScalingFactor(), 1); + LOG.info("Cores: {} and max parallelism: {}", cores, maxParallelism); + + RedisConfig redisConfig = + new RedisConfig( + options.getValue(options.redishost, "REDIS_HOST", Function.identity(), "localhost"), + options.getValue(options.redisport, "REDIS_PORT", Integer::valueOf, 6379)); + workloadConfig.setRedisConfig(redisConfig); + + WorkloadExecutor workloadExecutor = new WorkloadExecutor(workloadConfig); + + workloadExecutor.run(); + } + + /** + * Converts a comma-separated string of task type names into a list of TaskType enums. + * + * @param taskTypeNames A comma-separated string of task type names (e.g., + * "SETGET,LISTOPERATIONS"). + * @return A list of TaskType enums corresponding to the input names. If the input is null, + * returns null. + */ + private static List convertToTaskTypes(String taskTypeNames) { + if (taskTypeNames == null) return null; + + return Arrays.stream(taskTypeNames.split(",")) + .map(TaskType::withName) + .collect(Collectors.toList()); + } +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/WorkloadExecutor.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/WorkloadExecutor.java new file mode 100644 index 0000000000..afae842c4b --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/WorkloadExecutor.java @@ -0,0 +1,236 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis; + +import com.google.cloud.pso.benchmarks.redis.compression.LZ4Compression; +import com.google.cloud.pso.benchmarks.redis.config.WorkloadConfig; +import com.google.cloud.pso.benchmarks.redis.model.Profile; +import com.google.cloud.pso.benchmarks.redis.serde.MessagePack; +import com.google.cloud.pso.benchmarks.redis.tasks.*; +import java.time.Duration; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import java.util.function.Supplier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import redis.clients.jedis.ConnectionPoolConfig; +import redis.clients.jedis.JedisPooled; + +/** + * Class orchestrates the execution of Redis-based benchmark tasks. It manages thread pools, task + * creation, and the lifecycle of benchmark execution. + */ +public class WorkloadExecutor { + private static final Logger LOG = LoggerFactory.getLogger(WorkloadExecutor.class); + private static final Random random = new Random(); + private final WorkloadConfig config; + private final Map> payloadGeneratorByTaskType; + private final int maxRunDurationInSeconds; + private final int maxParallelism; + + /** + * Constructs a WorkloadExecutor with the specified configuration. + * + * @param config The configuration settings for the workload. + */ + public WorkloadExecutor(final WorkloadConfig config) { + this.config = config; + this.maxRunDurationInSeconds = config.getRunDurationMinutes() * 60; + int cores = Runtime.getRuntime().availableProcessors(); + this.maxParallelism = (int) Math.max(cores * config.getCpuScalingFactor(), 1); + this.payloadGeneratorByTaskType = new HashMap<>(); + } + + /** + * Executes the benchmark workload according to the defined configuration. + * + *

This method creates a fixed-size thread pool, initializes metrics publishing, determines + * task IDs based on environment variables, and creates a Jedis connection pool. It then iterates + * over the configured number of tasks, creates instances of the specified RedisTask types, and + * submits them to the executor service for parallel execution. + * + *

A shutdown hook is registered to gracefully shut down the executor and publish final metrics + * before the JVM terminates. + */ + public void run() { + LOG.info("Executing tasks with maximum parallelism of {}", maxParallelism); + ExecutorService executorService = Executors.newFixedThreadPool(maxParallelism + 2); + final int maxStartDelayInSec = 5; + String cloudRunTaskIndex = System.getenv("CLOUD_RUN_TASK_INDEX"); + String taskPrefix = + cloudRunTaskIndex != null ? String.format("ti:%s:id:", cloudRunTaskIndex) : "id:"; + final JedisPooled jedisClient = createJedisClient(this.maxParallelism); + final int taskTypesCount = this.config.getTaskTypes().size(); + for (int i = 0; i < maxParallelism; i++) { + String taskId = taskPrefix + (i + 1); + RedisTask task = + createRedisTask(this.config.getTaskTypes().get(i % taskTypesCount), taskId, jedisClient); + + TaskExecutor taskExecutor = + new TaskExecutor( + taskId, + task, + Duration.ofSeconds(random.nextInt(maxStartDelayInSec)), + Duration.ofSeconds(maxRunDurationInSeconds)); + executorService.submit(taskExecutor); + } + + Runtime.getRuntime() + .addShutdownHook( + new Thread( + () -> { + shutdownAndAwaitTermination( + executorService, + Duration.ofSeconds(maxStartDelayInSec + maxRunDurationInSeconds)); + })); + executorService.shutdown(); // Tell the executor service to stop accepting new tasks + } + + /** + * Creates a JedisPooled client for interacting with Redis. + * + * @param maxConnections The maximum number of active connections in the pool. + * @return The configured JedisPooled client. + */ + private JedisPooled createJedisClient(int maxConnections) { + + ConnectionPoolConfig poolConfig = new ConnectionPoolConfig(); + // maximum active connections in the pool, tune this according to your needs and application + // type default is 8 + poolConfig.setMaxTotal(maxConnections); + + // maximum idle connections in the pool, default is 8 + poolConfig.setMaxIdle(maxConnections / 2); + // minimum idle connections in the pool, default 0 + poolConfig.setMinIdle(0); + + // Enables waiting for a connection to become available. + poolConfig.setBlockWhenExhausted(true); + // The maximum number of seconds to wait for a connection to become available + poolConfig.setMaxWait(Duration.ofSeconds(1)); + + // Enables sending a PING command periodically while the connection is idle. + poolConfig.setTestWhileIdle(true); + // controls the period between checks for idle connections in the pool + poolConfig.setTimeBetweenEvictionRuns(Duration.ofSeconds(1)); + + // JedisPooled does all hard work on fetching and releasing connection to the pool + // to prevent connection starvation + return new JedisPooled( + poolConfig, + this.config.getRedisConfig().getHostName(), + this.config.getRedisConfig().getPort()); + } + + /** + * Creates an instance of a RedisTask based on the given task type and other parameters. + * + * @param taskType The type of Redis task to create. + * @param taskId The unique identifier for the task. + * @param jedisClient The Jedis client for Redis interaction. + * @return An instance of the specified RedisTask type. + * @throws RuntimeException If the specified task type is invalid. + */ + private RedisTask createRedisTask( + final TaskType taskType, final String taskId, final JedisPooled jedisClient) { + switch (taskType) { + case SETGET: + return new SetGetTask( + taskId, + String.format("%s:sg", taskId), + jedisClient, + getPayloadGenerator( + "SetGetTask", + () -> + new PayloadGenerator( + new MessagePack(), + new LZ4Compression(), + new Profile(), + Profile.class)), + this.config.getWriteRatio()); + case LISTOPERATIONS: + return new ListOperationsTask( + taskId, + String.format("%s:lo", taskId), + jedisClient, + getPayloadGenerator( + "ListOperation", + () -> + new PayloadGenerator( + new MessagePack(), + new LZ4Compression(), + new Profile(), + Profile.class)), + this.config.getWriteRatio()); + default: + throw new RuntimeException("Invalid task type"); + } + } + + /** + * Retrieves or creates a PayloadGenerator instance for the specified task type. + * + *

If a PayloadGenerator already exists for the task type in the internal cache, it is + * returned. Otherwise, a new instance is created using the provided Supplier and added to the + * cache. + * + * @param name The name of the task type. + * @param instanceCreator A Supplier that creates a new PayloadGenerator instance if needed. + * @return A PayloadGenerator instance for the specified task type. + */ + private PayloadGenerator getPayloadGenerator( + final String name, final Supplier> instanceCreator) { + PayloadGenerator payloadGenerator = this.payloadGeneratorByTaskType.get(name); + if (payloadGenerator == null) { + LOG.debug("Creating Payload generator"); + payloadGenerator = instanceCreator.get(); + this.payloadGeneratorByTaskType.put(name, payloadGenerator); + } + return payloadGenerator; + } + + /** + * Shuts down the ExecutorService gracefully and waits for task termination. + * + * @param executorService The ExecutorService to shut down. + * @param timeoutDuration The maximum time to wait for task termination. + */ + private void shutdownAndAwaitTermination( + ExecutorService executorService, Duration timeoutDuration) { + + try { + // Wait a while for existing tasks to terminate + if (!executorService.awaitTermination(timeoutDuration.getSeconds(), TimeUnit.SECONDS)) { + LOG.warn( + "Tasks did not complete within {} seconds. Cancelling tasks..", + timeoutDuration.getSeconds()); + executorService.shutdownNow(); // Cancel currently executing tasks + // Wait a while for tasks to respond to being cancelled + if (!executorService.awaitTermination(timeoutDuration.getSeconds(), TimeUnit.SECONDS)) + LOG.warn("Tasks did not terminate"); + } + } catch (InterruptedException ie) { + // (Re-)Cancel if current thread also interrupted + executorService.shutdownNow(); + // Preserve interrupt status + Thread.currentThread().interrupt(); + } + } +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/compression/Compression.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/compression/Compression.java new file mode 100644 index 0000000000..b70be85835 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/compression/Compression.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis.compression; + +import java.io.IOException; + +/** + * Defines methods for compressing and decompressing data. See {@link LZ4Compression} for + * implementation of specific compression algorithms. + */ +public interface Compression { + /** + * Compresses the given byte array using a specific compression algorithm. + * + * @param data The data to be compressed. + * @return The compressed data as a byte array. + * @throws IOException If an I/O error occurs during compression. + */ + byte[] compress(byte[] data) throws IOException; + + /** + * Decompresses the given compressed data using the same compression algorithm used for + * compression. + * + * @param compressedData The compressed data as a byte array. + * @return The decompressed data as a byte array. + * @throws IOException + */ + byte[] deCompress(byte[] compressedData) throws IOException; +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/compression/LZ4Compression.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/compression/LZ4Compression.java new file mode 100644 index 0000000000..da0953fb5f --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/compression/LZ4Compression.java @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis.compression; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import org.apache.commons.compress.compressors.lz4.BlockLZ4CompressorInputStream; +import org.apache.commons.compress.compressors.lz4.BlockLZ4CompressorOutputStream; + +/** + * This class implements the {@link Compression} interface and provides methods for compressing and + * decompressing data using the LZ4 compression algorithm. + */ +public class LZ4Compression implements Compression { + + /** + * Compresses the given byte array using the LZ4 algorithm. + * + * @param data The data to be compressed. + * @return The compressed data as a byte array. + * @throws IOException If an I/O error occurs during compression. + */ + @Override + public byte[] compress(byte[] data) throws IOException { + byte[] compressedBytes = null; + // Create a byte array output stream to hold the compressed data + try (ByteArrayOutputStream compressedBytesStream = new ByteArrayOutputStream()) { + // Create a BlockLZ4 compression stream for writing + try (BlockLZ4CompressorOutputStream compressorOutputStream = + new BlockLZ4CompressorOutputStream(compressedBytesStream)) { + // Write the data to be compressed to the stream + compressorOutputStream.write(data); + // Finalize the compression (write any remaining data) + compressorOutputStream.finish(); + } + compressedBytes = compressedBytesStream.toByteArray(); + } + return compressedBytes; + } + + /** + * Decompresses the given compressed data using the LZ4 algorithm. + * + * @param compressedData The compressed data as a byte array. + * @return The decompressed data as a byte array. + * @throws IOException If an I/O error occurs during decompression. + */ + @Override + public byte[] deCompress(byte[] compressedData) throws IOException { + // Wrap the compressed data in an InputStream + try (InputStream inputStream = new ByteArrayInputStream(compressedData)) { + + // Create a BlockLZ4 decompression stream + try (BlockLZ4CompressorInputStream decompressStream = + new BlockLZ4CompressorInputStream(inputStream)) { + + // Allocate a buffer to hold the decompressed data (choose an appropriate size based on your + // data) + byte[] decompressedBytes = new byte[compressedData.length * 2]; // Might need adjustment + + // Read decompressed data into the buffer + int bytesRead = 0; + int totalRead = 0; + while ((bytesRead = + decompressStream.read( + decompressedBytes, totalRead, decompressedBytes.length - totalRead)) + != -1) { + totalRead += bytesRead; + // If buffer is full, reallocate a bigger one (optional) + if (totalRead == decompressedBytes.length) { + decompressedBytes = Arrays.copyOf(decompressedBytes, decompressedBytes.length * 2); + } + } + + // Resize the decompressed data to the actual size read + decompressedBytes = Arrays.copyOf(decompressedBytes, totalRead); + return decompressedBytes; + } + } + } +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/compression/package-info.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/compression/package-info.java new file mode 100644 index 0000000000..b83be50523 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/compression/package-info.java @@ -0,0 +1 @@ +package com.google.cloud.pso.benchmarks.redis.compression; diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/config/CommandLineArgs.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/config/CommandLineArgs.java new file mode 100644 index 0000000000..fcf937fe53 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/config/CommandLineArgs.java @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis.config; + +import com.beust.jcommander.IStringConverter; +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; +import com.google.cloud.pso.benchmarks.redis.tasks.TaskType; +import java.util.List; +import java.util.function.Function; + +/** + * Class {@link CommandLineArgs} represents various input options that can be supplied by the user. + */ +@Parameters(separators = "=") +public class CommandLineArgs { + + public static class TaskTypeConvertor implements IStringConverter { + @Override + public TaskType convert(String value) { + return TaskType.withName(value); + } + } + + @Parameter(names = "--project", description = "Cloud Project identifier. e.g: test-project") + public String project; + + @Parameter(names = "--hostname", description = "Redis host name or ip address. e.g:10.167.20.44") + public String redishost; + + @Parameter(names = "--port", description = "Redis port number") + public Integer redisport; + + @Parameter( + names = "--runduration_minutes", + description = "Amount of time to run the application in minutes.") + public Integer runDurationMinutes; + + @Parameter( + names = "--cpu_scaling_factor", + description = + "Determines the parallelism by multiplying cpu_scaling_factor with available cores. E.g: 1.0") + public Double cpuScalingFactor; + + @Parameter( + names = "--write_ratio", + description = "Determines the percent of writes compared to reads. E.g: 0.2") + public Double writeRatio; + + @Parameter( + names = "--task_types", + description = "Specifies the task types in comma separated value.", + converter = TaskTypeConvertor.class) + public List taskTypes; + + @Parameter( + names = {"--help"}, + help = true) + public boolean help = false; + + /** + * Returns value if not null else returns default Value. + * + * @param The type of the values. + * @param value The first value to check. + * @param defaultValue The default value to return if the first value is null. + * @return The first non-null value between `value` and `defaultValue`. + */ + private T getFirstNonNullValue(T value, T defaultValue) { + return value != null ? value : defaultValue; + } + + /** + * Retrieves a value from the environment variable or returns a default value. + * + * @param The type of the value. + * @param value An optional default value to return if the environment variable is not found or + * cannot be converted. + * @param environVarName The name of the environment variable to retrieve. + * @param typeConverter A function to convert the environment variable value to the desired type. + * @return The value retrieved from the environment variable or the provided default value. + * @throws NullPointerException if `environVarName` or `typeConverter` is null. + */ + public T getValue(T value, String environVarName, Function typeConverter) { + return getValue(value, environVarName, typeConverter, null); + } + + /** + * Retrieves a value from the environment variable or returns either specified value or default + * value whichever is not null. + * + * @param The type of the value. + * @param value An optional default value to return. + * @param environVarName The name of the environment variable to retrieve. + * @param typeConverter A function to convert the environment variable value to the desired type. + * @param defaultValue The default value to return if the environment variable is not found or + * cannot be converted. + * @return The value retrieved from the environment variable or the provided default value. + * @throws NullPointerException if `environVarName` or `typeConverter` is null. + */ + public T getValue( + T value, String environVarName, Function typeConverter, T defaultValue) { + // return value != null ? value: typeConverter.apply(System.getenv(environVarName)); + String envValue = System.getenv(environVarName); + return envValue != null + ? typeConverter.apply(envValue) + : getFirstNonNullValue(value, defaultValue); + } +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/config/RedisConfig.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/config/RedisConfig.java new file mode 100644 index 0000000000..db876d0c9b --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/config/RedisConfig.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis.config; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** Represents the redis configuration parameters. */ +@AllArgsConstructor +@Getter +public class RedisConfig { + /** The host name or IP address of the Redis server. */ + private final String hostName; + + /** The port number on which the Redis server is listening. */ + private final int port; +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/config/WorkloadConfig.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/config/WorkloadConfig.java new file mode 100644 index 0000000000..9c78a8f55b --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/config/WorkloadConfig.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis.config; + +import com.google.cloud.pso.benchmarks.redis.tasks.TaskType; +import java.util.List; +import lombok.Getter; +import lombok.Setter; + +/** Configuration settings for the workload. */ +@Setter +@Getter +public class WorkloadConfig { + private String project; + private int runDurationMinutes; + private double cpuScalingFactor; + private RedisConfig redisConfig; + private double writeRatio; + private List taskTypes; +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/config/package-info.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/config/package-info.java new file mode 100644 index 0000000000..a30ce681a9 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/config/package-info.java @@ -0,0 +1 @@ +package com.google.cloud.pso.benchmarks.redis.config; diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/model/Payload.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/model/Payload.java new file mode 100644 index 0000000000..4712181f62 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/model/Payload.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis.model; + +/** + * Represents a generic payload containing a single value. + * + *

This interface defines a simple contract for holding and retrieving a value of type {@code T}. + * Implementations may provide additional functionality, such as error handling or metadata + * associated with the payload. + * + * @param The type of the value held within the payload. + */ +public interface Payload { + /** + * Retrieves the value contained within this payload. + * + * @return The value of type {@code T} stored in the payload. + */ + T get(); +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/model/Profile.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/model/Profile.java new file mode 100644 index 0000000000..05e2ab8b4f --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/model/Profile.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis.model; + +import java.util.*; +import lombok.Data; + +/** + * Class {@link Profile} provides an implementation of {@link Payload} to be stored in the redis. + */ +@Data +public class Profile implements Payload { + private static final Random random = new Random(); + + private String name; + private double version; + private List objectList; + private Map kvpairs; + + public Profile() { + objectList = new ArrayList<>(); + kvpairs = new HashMap<>(); + } + + @Override + public Profile get() { + Profile sampleMessage = new Profile(); + sampleMessage.name = "msgpack-" + random.nextInt(10); + sampleMessage.version = 0.6; + + sampleMessage.objectList.add("Foo"); + sampleMessage.objectList.add("Bar"); + sampleMessage.objectList.add(42); + + sampleMessage.kvpairs.put("name", "john"); + sampleMessage.kvpairs.put("age", 42); + return sampleMessage; + } +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/model/package-info.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/model/package-info.java new file mode 100644 index 0000000000..4283490e44 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/model/package-info.java @@ -0,0 +1 @@ +package com.google.cloud.pso.benchmarks.redis.model; diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/serde/EncDecoder.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/serde/EncDecoder.java new file mode 100644 index 0000000000..2796c3b993 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/serde/EncDecoder.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis.serde; + +import com.fasterxml.jackson.core.JsonProcessingException; +import java.io.IOException; + +/** + * Provides encoding and decoding functionality for objects of type {@code T}. + * + *

This interface defines a contract for transforming objects of a specific type into a byte + * array representation (encoding) and vice versa (decoding). Implementations might use various + * serialization formats such as JSON or binary. + * + * @param The type of object to be encoded and decoded. + */ +public interface EncDecoder { + /** + * Encodes the given data object into a byte array. + * + * @param data The object to encode. + * @return A byte array representing the encoded data. + * @throws JsonProcessingException If an error occurs during the encoding process. + */ + byte[] encode(T data) throws JsonProcessingException; + + /** + * Decodes the given byte array into an object of the specified class. + * + * @param encodedBytes The byte array representing the encoded data. + * @param clazz The class of the object to be decoded. + * @return The decoded object of type {@code T}. + * @throws IOException If an error occurs during the decoding process. + */ + T decode(byte[] encodedBytes, Class clazz) throws IOException; +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/serde/MessagePack.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/serde/MessagePack.java new file mode 100644 index 0000000000..173019d632 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/serde/MessagePack.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis.serde; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.IOException; +import org.msgpack.jackson.dataformat.MessagePackMapper; + +/** + * Implementation of the {@link EncDecoder} interface using MessagePack for serialization. + * + *

This class provides methods to encode and decode objects of type {@code T} into MessagePack + * format, a binary serialization format known for its efficiency and compactness. + * + * @param The type of object to be encoded and decoded. + */ +public class MessagePack implements EncDecoder { + /** The ObjectMapper instance for handling MessagePack serialization. */ + private final ObjectMapper objectMapper = new MessagePackMapper(); // New approach + + /** + * Encodes the given data object into a MessagePack byte array. + * + * @param message The object to encode. + * @return A byte array representing the MessagePack-encoded data. + * @throws JsonProcessingException If an error occurs during the encoding process (e.g., invalid + * object structure). + */ + @Override + public byte[] encode(T message) throws JsonProcessingException { + return objectMapper.writeValueAsBytes(message); + } + + /** + * Decodes the given MessagePack byte array into an object of the specified class. + * + * @param encodedBytes The byte array containing the MessagePack-encoded data. + * @param clazz The class of the object to be decoded. + * @return The decoded object of type {@code T}. + * @throws IOException If an error occurs during the decoding process (e.g., invalid MessagePack + * data). + */ + @Override + public T decode(byte[] encodedBytes, Class clazz) throws IOException { + return objectMapper.readValue(encodedBytes, clazz); + } +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/serde/package-info.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/serde/package-info.java new file mode 100644 index 0000000000..1983d47416 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/serde/package-info.java @@ -0,0 +1 @@ +package com.google.cloud.pso.benchmarks.redis.serde; diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/ListOperationsTask.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/ListOperationsTask.java new file mode 100644 index 0000000000..7dd186cde8 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/ListOperationsTask.java @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis.tasks; + +import com.google.cloud.pso.benchmarks.redis.PayloadGenerator; +import com.google.cloud.pso.benchmarks.redis.util.MathUtils; +import java.nio.charset.StandardCharsets; +import java.util.Random; +import java.util.stream.IntStream; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import redis.clients.jedis.JedisPooled; + +/** Class represents a task specifically focusing on redis list operations. */ +public class ListOperationsTask implements RedisTask { + private static final Logger LOG = LoggerFactory.getLogger(ListOperationsTask.class); + private final String taskId; + private final String keyPrefix; + private final JedisPooled jedisClient; + private final double writeRatio; + private final PayloadGenerator payloadGenerator; + private final Random random = new Random(); + private int hits; + private int misses; + private long counter; + private static final double millisecondDivisor = (1000.0 * 1000.0); + + public ListOperationsTask( + String taskId, + String keyPrefix, + JedisPooled jedisClient, + PayloadGenerator payloadGenerator, + double writeRatio) { + this.taskId = taskId; + this.keyPrefix = keyPrefix; + this.jedisClient = jedisClient; + this.writeRatio = writeRatio; + this.payloadGenerator = payloadGenerator; + } + + /** + * Returns the simple name of this class, effectively serving as a task identifier. + * + * @return The simple name of the class. + */ + @Override + public String getName() { + return this.getClass().getSimpleName(); + } + + /** + * Initializes the task by resetting counters used for tracking hits, misses, and total + * operations. This method should be called before the task starts executing to ensure accurate + * statistics. + */ + @Override + public void initialize() { + hits = 0; + misses = 0; + counter = 0; + } + + private byte[][] getitems() { + int totalItems = 10 + random.nextInt(5); + byte[][] items = new byte[totalItems][]; + IntStream.range(0, totalItems).forEach(i -> items[i] = this.payloadGenerator.getPayloadBytes()); + return items; + } + + /** Core execution logic of the Redis List operations (lpush and rpop). */ + @Override + public void run() { + String key = null; + for (int i = 1; i <= 100; i++) { + if (counter < 10 || Math.random() < writeRatio) { // Write the value + key = String.format("%s:%s", this.keyPrefix, counter); + long startTime = System.nanoTime(); + jedisClient.lpush(key.getBytes(StandardCharsets.UTF_8), getitems()); + counter++; + } else { + key = String.format("%s:%s", this.keyPrefix, MathUtils.getRandomLong(0, counter)); + long startTime = System.nanoTime(); + if (jedisClient.rpop(key.getBytes(StandardCharsets.UTF_8)) != null) { + hits++; + } else { + if (!jedisClient.exists(key)) misses++; + } + } + } + + try { + Thread.sleep(100 + random.nextInt(5)); + } catch (InterruptedException e) { + LOG.warn("Thread interrupted for task:{}", this.taskId); + throw new RuntimeException(e); + } + } + + /** + * Calculates the total number of reads, potentially for later reporting or analysis. Additional + * cleanup actions specific to the task could be added here. + */ + @Override + public void cleanUp() { + long totalReads = hits + misses; + LOG.info( + "Total List Writes: {}, List reads: {}, percent of hits:{} and percent of misses:{} in client:{}", + counter, + totalReads, + ((hits * 1.0) / totalReads) * 100, + ((misses * 1.0) / totalReads) * 100, + this.taskId); + } +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/RedisTask.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/RedisTask.java new file mode 100644 index 0000000000..34f212d99c --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/RedisTask.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis.tasks; + +/** Defines the contract for a task to be executed within a Redis benchmarking scenario. */ +public interface RedisTask { + /** + * Returns the name of the task. + * + *

This name is typically used for identification and logging purposes. + * + * @return The name of the task. + */ + String getName(); + + /** + * Performs initialization tasks before the main execution loop. + * + *

This method is called once at the beginning of the task and can be used to set up resources, + * establish connections, or perform any other necessary preparations. + * + *

This method is optional and has a default empty implementation. + */ + default void initialize() {} + + /** + * The core execution logic of the task. + * + *

This method is called repeatedly until the test duration is complete. It should contain the + * primary actions the task needs to perform, such as sending Redis commands, processing + * responses, or updating metrics. + */ + void run(); + + /** + * Cleans up resources after the task has finished executing. + * + *

This method is called once at the end of the task and should be used to release any + * resources that were acquired during the task's execution. + * + *

This method is optional and has a default empty implementation. + */ + default void cleanUp() {} +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/SetGetTask.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/SetGetTask.java new file mode 100644 index 0000000000..630ba185f0 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/SetGetTask.java @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis.tasks; + +import com.google.cloud.pso.benchmarks.redis.PayloadGenerator; +import com.google.cloud.pso.benchmarks.redis.util.MathUtils; +import java.nio.charset.StandardCharsets; +import java.util.Random; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import redis.clients.jedis.JedisPooled; + +/** Class represents a task specifically focusing on set and get operations. */ +public class SetGetTask implements RedisTask { + + private static final Logger LOG = LoggerFactory.getLogger(SetGetTask.class); + private final String taskId; + private final String keyPrefix; + private final JedisPooled jedisClient; + private final double writeRatio; + private final PayloadGenerator payloadGenerator; + private final Random random = new Random(); + private int hits; + private int misses; + private long counter; + private static final double millisecondDivisor = (1000.0 * 1000.0); + + public SetGetTask( + String taskId, + String keyPrefix, + JedisPooled jedisClient, + PayloadGenerator payloadGenerator, + double writeRatio) { + this.taskId = taskId; + this.keyPrefix = keyPrefix; + this.jedisClient = jedisClient; + this.writeRatio = writeRatio; + this.payloadGenerator = payloadGenerator; + } + + /** + * Returns the simple name of this class, effectively serving as a task identifier. + * + * @return The simple name of the class. + */ + @Override + public String getName() { + return this.getClass().getSimpleName(); + } + + /** + * Initializes the task by resetting counters used for tracking hits, misses, and total + * operations. This method should be called before the task starts executing to ensure accurate + * statistics. + */ + @Override + public void initialize() { + // LOG.info("Thread initialized for task:{}", this.taskId); + hits = 0; + misses = 0; + counter = 0; + } + + /** Core execution logic of the Redis set and get task. */ + @Override + public void run() { + String key = null; + for (int i = 1; i <= 100; i++) { + if (counter < 10 || Math.random() < writeRatio) { // Write the value + key = String.format("%s:%s", this.keyPrefix, counter); + long startTime = System.nanoTime(); + jedisClient.set( + key.getBytes(StandardCharsets.UTF_8), this.payloadGenerator.getPayloadBytes()); + counter++; + } else { + key = String.format("%s:%s", this.keyPrefix, MathUtils.getRandomLong(0, counter)); + long startTime = System.nanoTime(); + if (jedisClient.get(key.getBytes(StandardCharsets.UTF_8)) != null) { + hits++; + } else { + misses++; + } + } + } + + try { + Thread.sleep(10 + random.nextInt(5)); + } catch (InterruptedException e) { + LOG.warn("Thread interrupted for task:{}", this.taskId); + throw new RuntimeException(e); + } + } + + /** + * Calculates the total number of reads, potentially for later reporting or analysis. Additional + * cleanup actions specific to the task could be added here. + */ + @Override + public void cleanUp() { + long totalReads = hits + misses; + LOG.info( + "Total writes: {}, reads: {}, percent of hits:{} and percent of misses:{} in client:{}", + counter, + totalReads, + ((hits * 1.0) / totalReads) * 100, + ((misses * 1.0) / totalReads) * 100, + this.taskId); + } +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/TaskExecutor.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/TaskExecutor.java new file mode 100644 index 0000000000..79ae1c0743 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/TaskExecutor.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis.tasks; + +import java.time.Duration; +import java.time.Instant; +import java.util.Random; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Class {@link TaskExecutor} is responsible for executing a specific RedisTask with a defined start + * delay and duration. It manages the lifecycle of the task, including initialization, execution, + * and cleanup. + */ +public class TaskExecutor implements Runnable { + private static final Logger LOG = LoggerFactory.getLogger(TaskExecutor.class); + + /** A unique identifier for this task. */ + private final String taskId; + + /** The RedisTask instance to be executed. */ + private final RedisTask task; + + /** The delay before the task starts executing. */ + private final Duration startDelay; + + /** The time when the task should stop executing. */ + private final Instant endTime; + + /** A random number generator for potential use within the task. */ + private final Random random = new Random(); + + /** + * Constructs a TaskExecutor with the given parameters. + * + * @param taskId The unique identifier for this task. + * @param task The RedisTask to be executed. + * @param startDelay The delay before the task starts. + * @param runDuration The total duration for which the task should run. + */ + public TaskExecutor(String taskId, RedisTask task, Duration startDelay, Duration runDuration) { + this.taskId = taskId; + this.task = task; + this.startDelay = startDelay; + this.endTime = Instant.now().plus(startDelay).plus(runDuration); + } + + /** + * Executes the RedisTask according to the defined lifecycle. + * + *

This method first waits for the specified startDelay, then initializes the task, repeatedly + * calls the task's run() method until the endTime is reached, and finally performs any necessary + * cleanup. If interrupted, it logs a warning and throws a RuntimeException. + */ + @Override + public void run() { + try { + Thread.sleep(startDelay.toMillis()); + LOG.info( + "Starting the {} using taskId:{} with endTime: {}", + this.task.getName(), + this.taskId, + this.endTime); + task.initialize(); + while (Instant.now().isBefore(endTime)) { + task.run(); + } + task.cleanUp(); + } catch (InterruptedException e) { + LOG.warn("Thread interrupted for task:{}", this.taskId); + throw new RuntimeException(e); + } + } +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/TaskType.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/TaskType.java new file mode 100644 index 0000000000..41e59c9735 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/TaskType.java @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis.tasks; + +import java.util.Arrays; +import java.util.stream.Collectors; + +/** + * Represents the different types of tasks that can be performed in a Redis benchmark. + * + *

Each task type has a unique identifier (`type`) and a description that explains its purpose. + */ +public enum TaskType { + /** Task demonstrating basic set and get operations in Redis. */ + SETGET("SetGet", "Demonstrates key-value operations"), + + /** Task demonstrating operations on Redis lists. */ + LISTOPERATIONS("ListOps", "Demonstrates list operations"); + + /** A short string identifier for the task type. */ + private final String type; + + /** A description of the task type's purpose. */ + private final String description; + + /** + * Private constructor to create a TaskType instance. + * + * @param type The short string identifier for the task type. + * @param description The description of the task type's purpose. + */ + TaskType(String type, String description) { + this.type = type; + this.description = description; + } + + /** + * Retrieves the short string identifier of this task type. + * + * @return The type of the task. + */ + public String getType() { + return type; + } + + /** + * Retrieves the description of this task type. + * + * @return The description of the task. + */ + public String getDescription() { + return description; + } + + /** + * Returns a comma-separated string of all supported task types. + * + * @return A comma-separated string of supported task types. + */ + public static String getSupportedTypes() { + return Arrays.stream(values()).map(TaskType::getType).collect(Collectors.joining(",")); + } + + /** + * Retrieves the TaskType enum value corresponding to the given type string. + * + * @param type The string representation of the task type. + * @return The matching TaskType enum value. + * @throws IllegalArgumentException If the specified type is not a valid TaskType. + */ + public static TaskType withName(String type) { + for (TaskType e : values()) { + if (e.getType().equals(type)) return e; + } + + throw new IllegalArgumentException( + String.format( + "Invalid task type:%s. " + "Supported values are:%s", type, getSupportedTypes())); + } +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/package-info.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/package-info.java new file mode 100644 index 0000000000..4c5ed41a57 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/tasks/package-info.java @@ -0,0 +1 @@ +package com.google.cloud.pso.benchmarks.redis.tasks; diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/util/MathUtils.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/util/MathUtils.java new file mode 100644 index 0000000000..19670beea1 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/util/MathUtils.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis.util; + +/** Utility class for performing various mathematical operations. */ +public class MathUtils { + /** + * Private constructor to prevent instantiation. This class is designed to be a static utility + * class, so it cannot be instantiated. + */ + private MathUtils() {} + + /** + * Generates a pseudo-random long integer within a specified range. + * + *

The generated value will be inclusive of the lower bound and exclusive of the upper bound. + * + * @param lowerBound the inclusive lower bound of the random number + * @param upperBound the exclusive upper bound of the random number + * @return a random long integer between lowerBound (inclusive) and upperBound (exclusive) + * @throws IllegalArgumentException if lowerBound is greater than upperBound + */ + public static long getRandomLong(long lowerBound, long upperBound) { + if (lowerBound > upperBound) { + throw new IllegalArgumentException("lowerBound must be less than or equal to upperBound"); + } + + long range = upperBound - lowerBound; // Calculate the range (exclusive upperbound) + return Math.round(Math.random() * range) + lowerBound; + } +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/util/package-info.java b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/util/package-info.java new file mode 100644 index 0000000000..9e819a4a30 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/java/com/google/cloud/pso/benchmarks/redis/util/package-info.java @@ -0,0 +1 @@ +package com.google.cloud.pso.benchmarks.redis.util; diff --git a/examples/redis-benchmarks/redis-benchmarks/src/main/resources/logback.xml b/examples/redis-benchmarks/redis-benchmarks/src/main/resources/logback.xml new file mode 100644 index 0000000000..cc445e287e --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/main/resources/logback.xml @@ -0,0 +1,13 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + \ No newline at end of file diff --git a/examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/compression/LZ4CompressionTest.java b/examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/compression/LZ4CompressionTest.java new file mode 100644 index 0000000000..d205ec836b --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/compression/LZ4CompressionTest.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis.compression; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import org.junit.jupiter.api.Test; + +public class LZ4CompressionTest { + + @Test + void testDeCompression_returns_OriginalValue() throws IOException { + String someText = + "Sample random text used for evaluating LZ4Compression efficiency compared to original bytes"; + LZ4Compression lz4CompressDecompress = new LZ4Compression(); + byte[] utf8Bytes = someText.getBytes(StandardCharsets.UTF_8); + byte[] compressedBytes = lz4CompressDecompress.compress(utf8Bytes); + byte[] deCompressedBytes = lz4CompressDecompress.deCompress(compressedBytes); + assertEquals(utf8Bytes.length, deCompressedBytes.length); + } +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/compression/package-info.java b/examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/compression/package-info.java new file mode 100644 index 0000000000..b83be50523 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/compression/package-info.java @@ -0,0 +1 @@ +package com.google.cloud.pso.benchmarks.redis.compression; diff --git a/examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/serde/MessagePackTest.java b/examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/serde/MessagePackTest.java new file mode 100644 index 0000000000..7ac149d05d --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/serde/MessagePackTest.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis.serde; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.google.cloud.pso.benchmarks.redis.model.Profile; +import java.io.IOException; +import org.junit.jupiter.api.Test; + +public class MessagePackTest { + @Test + void testDecoding_returns_OriginalValue() throws IOException { + Profile userProfile = new Profile().get(); + MessagePack messagePack = new MessagePack<>(); + + byte[] encodedBytes = messagePack.encode(userProfile); + Profile decodedProfile = messagePack.decode(encodedBytes, Profile.class); + + assertEquals(userProfile.getName(), decodedProfile.getName()); + assertEquals(userProfile.getVersion(), decodedProfile.getVersion()); + assertEquals(userProfile.getObjectList().size(), decodedProfile.getObjectList().size()); + assertEquals(userProfile.getKvpairs().size(), decodedProfile.getKvpairs().size()); + } +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/serde/package-info.java b/examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/serde/package-info.java new file mode 100644 index 0000000000..1983d47416 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/serde/package-info.java @@ -0,0 +1 @@ +package com.google.cloud.pso.benchmarks.redis.serde; diff --git a/examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/util/MathUtilsTest.java b/examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/util/MathUtilsTest.java new file mode 100644 index 0000000000..b639c19188 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/util/MathUtilsTest.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.cloud.pso.benchmarks.redis.util; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; + +import org.junit.jupiter.api.Test; + +public class MathUtilsTest { + @Test + void testGetRandomLong_for_boundedValue() { + long lowerBound = 2; + long upperBound = 10; + long actualValue = MathUtils.getRandomLong(lowerBound, upperBound); + assertThat(actualValue, greaterThanOrEqualTo(lowerBound)); + assertThat(actualValue, lessThan(upperBound)); + } +} diff --git a/examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/util/package-info.java b/examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/util/package-info.java new file mode 100644 index 0000000000..9e819a4a30 --- /dev/null +++ b/examples/redis-benchmarks/redis-benchmarks/src/test/java/com/google/cloud/pso/benchmarks/redis/util/package-info.java @@ -0,0 +1 @@ +package com.google.cloud.pso.benchmarks.redis.util;