From 9ac5789a8578065185a6e54e6df4fee87812825c Mon Sep 17 00:00:00 2001 From: Deploy from CI <> Date: Thu, 7 Dec 2023 18:33:34 +0000 Subject: [PATCH] Deploy c8cf68b465a96017285341aa69f111cd12f74291 to api-clients --- .github/ISSUE_TEMPLATE/bug_report.md | 29 + .github/ISSUE_TEMPLATE/feature_request.md | 17 + .github/workflows/clients.yml | 91 + .github/workflows/create-release.yml | 59 + .github/workflows/issue-release.yml | 31 + .github/workflows/validate.yml | 31 + .gitignore | 46 + LICENCE | 10 + README.md | 33 + clients/galv-client-python.zip | Bin 0 -> 400141 bytes clients/galv-client-typescript-axios.zip | Bin 0 -> 400141 bytes galv-spec.json | 11097 ++++++++++++++++++++ 12 files changed, 11444 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/workflows/clients.yml create mode 100644 .github/workflows/create-release.yml create mode 100644 .github/workflows/issue-release.yml create mode 100644 .github/workflows/validate.yml create mode 100644 .gitignore create mode 100644 LICENCE create mode 100644 README.md create mode 100644 clients/galv-client-python.zip create mode 100644 clients/galv-client-typescript-axios.zip create mode 100644 galv-spec.json diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..a7e1482 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,29 @@ +--- +name: Bug report +about: Create a report to help us improve Galv +title: '' +labels: bug +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. +Note that this should be a bug in Galv's specification or overall design, not a bug in a specific implementation of Galv. +For bugs in a specific implementation, please open an issue in the relevant repository. +- [Backend](/Battery-Intelligence-Lab/galv-backend/issues/new/choose) +- [Frontend](/Battery-Intelligence-Lab/galv-frontend/issues/new/choose) +- [Harvester](/Battery-Intelligence-Lab/galv-harvester/issues/new/choose) + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..59094e2 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,17 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/workflows/clients.yml b/.github/workflows/clients.yml new file mode 100644 index 0000000..0f6e690 --- /dev/null +++ b/.github/workflows/clients.yml @@ -0,0 +1,91 @@ +# Generate documentation and associated files +# If file gets unweildy with just one job, could refactor to use outputs: +# https://docs.github.com/en/actions/using-jobs/defining-outputs-for-jobs + +# This name is referenced by gh-pages.yml workflow. Update there if this changes. +name: Clients +on: + workflow_run: + branches: + - main + workflows: [Validate] + types: + - completed + workflow_dispatch: + inputs: + save_output: + type: boolean + description: 'Run the deploy-to-api-clients branch step' + required: false + default: false + debug_enabled: + type: boolean + description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)' + required: false + default: false + +jobs: + make-clients: + runs-on: ubuntu-latest + if: ${{ github.event.workflow_run.conclusion == 'success' }} + env: + POSTGRES_PASSWORD: "galv" + DJANGO_SECRET_KEY: "long-and-insecure-key-12345" + steps: + - uses: actions/checkout@v3 + + # Enable tmate debugging of manually-triggered workflows if the input option was provided + - name: Setup tmate session + uses: mxschmitt/action-tmate@v3 + if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }} + + - name: Make clients directory + run: | + mkdir clients + + - name: Create API client - python + run: | + echo "{\"lang\": \"python\", \"type\": \"CLIENT\", \"codegenVersion\": \"V3\", \"spec\": $(cat galv-spec.json)}" > payload.json + curl -d @payload.json --output clients/galv-client-python.zip -H "Content-Type: application/json" https://generator3.swagger.io/api/generate + # Check size + if [ ! -s clients/galv-client-python.zip ]; then + echo "Downloaded python client zip file is zero bytes" + exit 1 + fi + # Check we can unzip + unzip -t clients/galv-client-python.zip + + - name: Create API client - typescript-axios + run: | + echo "{\"lang\": \"python\", \"type\": \"CLIENT\", \"codegenVersion\": \"V3\", \"spec\": $(cat galv-spec.json)}" > payload.json + curl -d @payload.json --output clients/galv-client-typescript-axios.zip -H "Content-Type: application/json" https://generator3.swagger.io/api/generate + # Check size + if [ ! -s clients/galv-client-typescript-axios.zip ]; then + echo "Downloaded typescript-axios client zip file is zero bytes" + exit 1 + fi + # Check we can unzip + unzip -t clients/galv-client-typescript-axios.zip + + - name: Push to api-clients branch + if: (github.ref_name == 'main' && github.event_name == 'workflow_run') || inputs.save_output + run: | + git worktree add api-clients + git config user.name "Deploy from CI" + git config user.email "" + cd api-clients + # Delete the ref to avoid keeping history. + git update-ref -d refs/heads/api-clients + rm -rf * + mv ../clients . + mv ../galv-spec.json . + mv ../LICENCE . + mv ../README.md . + git add . + git commit -m "Deploy $GITHUB_SHA to api-clients" + git push --set-upstream origin api-clients --force + + - name: Explain skip + if: (github.ref_name != 'main' || github.event_name != 'workflow_run') && !inputs.save_output + run: | + echo "Skipping push to api-clients branch because ${{ github.ref_name }} != 'main' or ${{ github.event_name }} != 'workflow_run' and inputs.save_output is ${{ inputs.save_output }}" diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml new file mode 100644 index 0000000..140d831 --- /dev/null +++ b/.github/workflows/create-release.yml @@ -0,0 +1,59 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Create Release + +on: + # Run when Docs workflow completes + workflow_run: + branches: + - main + workflows: [Clients] + types: + - completed + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + debug_enabled: + type: boolean + description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)' + required: false + default: false + +# Allow one concurrent deployment +concurrency: + group: "create-release" + cancel-in-progress: true + +jobs: + create-release: + runs-on: ubuntu-latest + if: ${{ github.event.workflow_run.conclusion == 'success' }} + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + ref: 'api-clients' + + # Enable tmate debugging of manually-triggered workflows if the input option was provided + - name: Setup tmate session + uses: mxschmitt/action-tmate@v3 + if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }} + + - name: Check release version + run: | + # Extract release version from galv-spec.json + RELEASE_VERSION=$(jq -r '.info.version' galv-spec.json) + echo "Release version: $RELEASE_VERSION" + # Check if release version already exists + if git rev-parse "release/v$RELEASE_VERSION" >/dev/null 2>&1; then + echo "Release version $RELEASE_VERSION already exists" + exit 1 + fi + + - name: Create release branch + run: | + # Extract release version from galv-spec.json + RELEASE_VERSION=v$(jq -r '.info.version' galv-spec.json) + echo "Release version: $RELEASE_VERSION" + # Create release branch + git checkout -b "$RELEASE_VERSION" + git push --set-upstream origin "$RELEASE_VERSION" diff --git a/.github/workflows/issue-release.yml b/.github/workflows/issue-release.yml new file mode 100644 index 0000000..9187e16 --- /dev/null +++ b/.github/workflows/issue-release.yml @@ -0,0 +1,31 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Issue Release + +on: + # Run when Docs workflow completes + push: + branches: + - v*.*.* + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + issue-release: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + ref: 'api-clients' + + - name: Release + uses: ncipollo/release-action@v1 + with: + tag: github.ref_name + body: "Release ${{ github.ref_name }}." + artifacts: "galv-spec.json,clients/*" + commit: github.ref_name + artifactErrorsFailBuild: true diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml new file mode 100644 index 0000000..d2216dc --- /dev/null +++ b/.github/workflows/validate.yml @@ -0,0 +1,31 @@ +name: Validate +on: + push: + workflow_dispatch: + inputs: + debug_enabled: + type: boolean + description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)' + required: false + default: false + +jobs: + validate-spec: + runs-on: ubuntu-latest + permissions: + contents: read + packages: read + statuses: write + steps: + - uses: actions/checkout@v3 + # Enable tmate debugging of manually-triggered workflows if the input option was provided + - name: Setup tmate session + uses: mxschmitt/action-tmate@v3 + if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }} + + - name: Lint Code Base + uses: super-linter/super-linter/slim@v5 + env: + VALIDATE_OPENAPI: true + DEFAULT_BRANCH: main + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..77d8ef4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,46 @@ +*.pyc +.vscode +.venv +.removed +galv/protobuf +galv/webapp/assets/protobuf +libs/galv-js-protobufs +galv-protobuf.js +webstack/.env +.pnpm-store +*.egg-info +env + +.idea/ + +.run/ + +.test-data/ + +frontend/src/demo_matlab_code.m + +**/.env.* +dev.sh +backend/backend_django/django_celery_beat.schedulersDatabaseScheduler + +.harvester/ + +*.pptx + +docker-compose.override.yml +backend/backend_django/galv/migrations/*.py +!backend/backend_django/galv/migrations/__init__.py + +docs/build/ + +.certs/ + +.vhost/ + +.static_files/ + +node_modules/ + +.DS_Store + +.tmp/test/ diff --git a/LICENCE b/LICENCE new file mode 100644 index 0000000..ad1f7f9 --- /dev/null +++ b/LICENCE @@ -0,0 +1,10 @@ +Copyright (c) 2020-2023, The Chancellor, Masters and Scholars of the University +of Oxford, and the 'Galv' Developers. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..b604ff3 --- /dev/null +++ b/README.md @@ -0,0 +1,33 @@ +# Galv + +[![GitHub Super-Linter](https://github.com/Battery-Intelligence-Lab/galv-spec/actions/workflows/validate.yml/badge.svg)](https://github.com/marketplace/actions/super-linter) + +Galv is an open-source platform for automated storage of battery data with advanced metadata support for battery scientists. +Galv is deployed with [Docker](https://docs.docker.com/) to support robust local and cloud instances. +An example frontend view is displayed below. + +
+ +
+ +## Features: +- REST API for easy data storage and retrieval +- A Python, Julia, and MATLAB client for the REST API +- Metadata support using ontology definitions from BattINFO/EMMO +- A distributed platform with local data harvesters +- Docker based deployment + +## Specification + +Galv is built on a REST API specification. + +The schema can be downloaded from the [documentation page](https://Battery-Intelligence-Lab.github.io/galv-spec/UserGuide.html#api-spec). +If you run your own instance of Galv, it will make its own schema available at `/schema/`, +and provide Swagger-UI and ReDoc documentation at `/schema/swagger-ui/` and `/schema/redoc/` respectively. + +The below diagram presents an overview of Galv's architecture. +The arrows indicate the direction of data flow. + ++ +
diff --git a/clients/galv-client-python.zip b/clients/galv-client-python.zip new file mode 100644 index 0000000000000000000000000000000000000000..0567d332a7395b3686a28d2e4b42c31395cc99e4 GIT binary patch literal 400141 zcmb5VW0+-Ypq*Q`ZQDkdZQHhOyUVt1+g4YXZ5v&7-RgaAPEL|1JIVSr|F8MH-#f-P zro0p|2nqlM1OxzmQkWXRfBDgWKRdY@n31m;J8NiXmk(;e4)IpqS;R zfZqrL=ynU#jn;BDuSq_kRlv$WD^Fl@6Q~b5?kv9a=BTw&4e+@{&k?k@%uz zQX@Y@>Mq%it&HBCdc
3Hz#_S2rbSbn>wV5$-}j@^Xv+?xK2t@Lb!Oj0 zgqFf{3BlTCMYOVJiiOwJoaUa_ZgX$cmo`u)kV<4KI>1F|Tlv~!ORHv5RQ$Rl4Twew zpG)D({_a!;Dz{~TA0Q8VO9M1Bf=<7c!`|g()F5?k)v|fE%Ycx!78SA4zqoFTQlCxR zwX5dI+THTLyG1p!tI-^Y8pEXi4Goq?QUSq;DB{N7Yuer(a2)%hTUM_o4kwYm>x$vg z<)+FFPpvVumG3P+xBLbuCK!pDFr?TqdNJHcx4+l-A@d6b^)EOIXvi31yN)KE4^VCD zYKnOW#?nR5CgXb4L#{~?J!B+=vB@Qb(Rd&gAsT)~B$+@5xg_^V)v$;5=<<5IxFw~# zlfb}}Fix`pXaj(68xVpkuO`L#1wtLTgUuo87c+p$P!Rfz*X{%*gdv3kd4@g{3RW_y z8E@GVVIsbSx6IEyBSCqWkD3c=3WW5Z!e{NvvtP}bcdT`I`(#E(`Yt7OK^oJ^XK+f- zv=x7iJeTs8`?FM>%6C#*I-e`y4LGz;j>S|6&M>$s_4IwCBM)sqJY6^7s2aGP*xal+ zuZdokO=&8#>!41`U=*x6Wu9n5;qU?bj&x>2c!iWapS!X!+XM$<3HgFI2KckF-#r$1 z*6742c_7N;n;kr*2~w6&&`&O2E~(Gkt+iKh-YMkW )-W~Ec#+{X5-^>R_>Q2AgtjMMs=?j7VFX%HPbZ_=7lt;V*<&h+QqMqa?kpxqW` zR}#3o_uDhy^D2bgMx!rsQDP9QiYc)0M2A?C6Dd#a-wcqQ+Q UF9Pee@g%AVmA1U@s1uZeqHS?)PQ zi4nJWG%VgDz5zzHvd=?19gOTx7| *%lvc?JxBHcEGcp!C0G%GoJB zH=%+7!EN6Brdp9c0PGwNXrKnhaiy%RR>hveMr*heMdX84hdR#&G95G-J@=drEfw9i zvT7dViX^KGRKV@Do9!z=0c9jhfPim%f&oX5>+0V+zdt-1XM7nrhcnUxpY}X `zEK*pMpI~FkuLEH)ho%Ev7pQcCKkj9+jnG zTn}>^sq(CW6u+D#+~klTY&@Gt5JE7SC9cuJpsohlb>L}qa(+0d<|dXNK|XlHk94Pv z-v?@c^MR%)04l5TLLM&gIZeQYSA|lN=RsOj`;OYBb}J95pl$Yy57bQM)O>VFHh~x) z``18fi~3SEqmPPFmGQGa`#9ka_v!u`h}8Piw}Ft;muK-G0Tn|Ifxzm08;IXoqM&%; z92{v^fp07C9U+ceXVgU*2S~Il`yI5ldo741qin`0s`=KBIIcifRp^P&J!84Wu5l^2 zP83(`8B5OUVO&)GUPe728HHdSN2H0yA8Q&T0s1`sSNj}0xv(Q%IN^9g_?0N4Q=Iy- zZnC7Q3n*w;=Z|M}e|qioHgTV6 HYw$*Vbw2SHsX5Y+pR&T>5n*F zff^{nN|Ya3y6 gX?w!%Tf2=9b$IRkffHj_5M@5A=S;*67=-c2CbW+hZXHC+a4_#0Gecf#~OPJ2ZlwQO;M;(9=i;$OVe z@gV*QDiVK#iWMdj+NjUt%9yvebrT{!w#~z60#uxdY&eY;M%5&Uu9FUCN0;yW)s^^1 zTXR^VcwIzCDD=*b7YT*5i IUe$#5 zrF&;Q_t1`9Q+CRTnka!}wb0-c)C7AepM8uFXIrf3{NfVn;qgV?$tVeB2LBOJkwZU- zjO0H-MI&RrOj$^xrp&K;`fpI7Bj%Fq&f~lQbB=+&PUfeL@(Fb-@;K(df?U&}rI?Q# z$1C?}q~y3zT&WkRJZzhDRW|t;@rGo%MQ|M_NiuV3Xp92x_YB?~br|Bqj(Xxi;tAnZ zp^S=g>chLvlB6rAq}e#UI^+G*d%d-R|3X9FE%q%NrQfpQ_YWn8`Qn#%dXfL=ABZq- zj__fjAy;!#=2LrR dNZ>>Zhpoq^rwy_~-s~9Qy#pT+>hnrxvGsN86WM$J zkY*5Zet=f6B)5meZUAh4`PuGuT!4<|T~PY`%+2H|_oe{vzG8efysr`CS+Sf2bwa|( z>;G#q(WFijv?VOrK^*BzN&M5~&_n$nPQZhh`u*b@l~NYhf0N4Yza|yN|0_<|nAjM8 zHy;1J(%Al6Y4|>UR~mX%0|s*je?gH_EmI%HI+)T*AWv~h(ikruQlyD3^!0=*F^* (zbL7M1>-}`nIb`J)n0;N$pvwpTWI&9dkP3O zQ{(sLva43xuTCdb zBh?C)Jl7Wq^j&F;funD@l!-*n2}=A&rGfUh(y-&NFv}ST!>`!_-C2kGt~7Ab{;4!d zZgBspG|;~*4QnXce<}^S?@FU|;BTd&|B=Z49{#t|5bTjNu(C0mo1D~KvB_-|Y)(C* zuC@9$4CJuyjAHeVVL;EiN@|___%;kb3vQ;~mn}wowx|_as%lM)n}!0!Z^M9WVXRuJ zxYn=xIPnwaI42OAwKv-7u&}MF9oo8`xCEfRJ?_^s3Cu z0fBdoBqmHX#&M%G%T{eZqJ>`TRTCZoN*VAh^ ^|3AHTXF`)fh1WK zjFMu>q)Hs)0qpm(X!oh5Tz5Fa2yv=4$i$>ab{Zhx)c+dO0TP5B*^&@f$8ps-Dta_; zR2codVs6EeqU=xOBxt-kp|4cEOS{~hKe=97dlj<~>*d8A0g_2=-39>HBNaHL+*b6M zOK5!S0XmgEC20Va!6f+lbE}V>G!_$1AdAo|YNFy7YHVxfi4e>u|GJfhw*^SS0vF3x zRbH^uEATPLQqY?@i;t0xY7Z@3q_2EJk=2-XFbhLko`%F%^`Fw7F(<4=%d&A;*1CrX z*xj~ul7_+!=!_v-Vf40JT`Tk8dit9fmTTNGU;(a5)M8K8brM*+yM#fy5M1nL$&%uh zLMCjs6v&wwp_OX0?_83YO#%m!3HgXHiuh&Cu(dCKkMgQq%)s><(5uUds=cVB&N20^ zGOYQ_=j&>Bj6D4zN0{3^%kqrvQ$Q8%>=floSU2cPb|@$wed@m5kFDy+(?eBA?TJNb zd0#y_-wiyc){!8UI7Gs%T^Gl?;D}X7scWm#cvn|}#q~gT+Vm=vv+QhT#R2{;abQ2! z1w~|X&^gW2fe8ioiowhfj-8~hFwEmVHf_}Zg~MqL;yN&*@6QXvz_(A-{#T#yx-4)* z^Da4lzW*l0^qT~-`^v*b=V&AethOCT@{EM3H%R(2`J{d$q%%DAeA>5Bq`kjQOtyjj z?KJQqXgGGh(J4@bZwOqI0f)^10Wni! z^V8QNl65_mAkHG)b>)nfWO4Ox(J7{gRF19{&s7*rk>J+l^?c(_lpD{nePfNDplFl( z#ha<4t^Et){WDLJ(Sg9Oyx`#B7@k?@Ekj(S5f&A@ig;Zc0c%uRQeI$5HTV*m%zc7M zgpGhUJpm+Gd;(<{N-!s$#;=Ib<7s_Ss_ b;(lUs>J zl~AHwo*P=Y=P3PGqgp-8tq=cx-g^mGj~OPiay_gDzTj=1GT|UPy{k4)(mBEJdGuTS zj&;UAS!i8!z+l#+4FDY$0H)luj``vW5IN;%GIb-jnR>I1>jW>pY>~)Rq#lC_#yPdU z4eGRlHV7wg&!>+%; 2p;@5{?iR3f;$6#UOgAKP8M%%R_%I m}!cmYiU4_hTBlRfI9) z(LAI%#WCVsgjxj1*R{fV6hD-M_tWQUzi`y&1LuC*<2 sipT!sm;rAX z0F56JNn|X6B10<0Iu#_V_cP55MslZ?mhJZ{)PA&&18glwQ}H8cbfd^9f)4Pnr+xiH zz&KR$cy98fA_Q rXcHP{2#9 z IKdnVDFz;trJgBM2?efq8l=l%dv@0vCGAJaa z8*Ey#=NoKq@ho 2HQp>b>wZqFUo&TLi9y8M*>T>=^hI(+v(9 E!Nr+JLpS zLa`ANY8j=t#5kpIw%dfdk%`dnBH=MF)cAQCtqfk9fKC?^ii(vz)%2Jf1Z65CMf7r% z?+7f@cv$}MUllUPTIo+L szVYYM|K2CqS8`gQVwMWXwC zng2kw8FF1<@@oW(;JS|3tia^tydwAK2F6a?^%rK7>!LK#Q+;h(zOazr2#yTXFZAi) zET>@O%tCi>CL(f%ZCy6}8TxGPyg!w%9rzP~o>doQc_qv9A3t`{YH4`PDwm*2Z04(L zR{;}tz%Lnpo?LG!%wD5;o!JJCccCzPo%MJ-R &r!;S> zx$bri;pp!cl;b>@Ht#|NwJ)%f!)|6jHOmy?NG`j54>V2OwQ`cbp6f{kJ9DJJe4ETH zLGeyZaU$14gB(Ksz=tJuU!19EC_%)HnBt9ZpXT <~C)Ly`m7) z=;-F+hhpz`cbDCT#=RsLo>l~1$%;M5Qr}H^WiN28@jm}O6Ds9ob5Cp5{_FKHjK^m* zZptERE^OdZO+TYR5oQCfs0_Ycz2u@B!%>aONq`=7AS%IcCUy3@J(=)E=yr1b%*y>d z0D48sf&eb7W>AG-&r94SyTRxf^)l1qS}rxwV@q?dy5H^-t42QE$wBRgeNq7cc7*N9 z@IxEALL5j@b)yMn)#6cr^Mu{1oeKtCtdvVF*coG2(rNA$f5M3zeQbVJT501mxu(Fs z)^uHlH3O~7JK6MI@clg@3rK~Tm%#u45DEXSyCeD66H?FAz{bMb q<$lxQ!1aw?=fkG>s2x_XJ^cFe3m5vfmFiPA9sLA;(m^^b)lTHlrNT5iwG@$;g zF)11=nu+$Q#jMCUoxUWbOdWisT&h3S%SX?+%z2Z5L=%Zb1S;dQFz;ysb~!n2A&K}p zYf8xTz1LM$Y)8dKBmFrs3ivH>Op_EYTJft0l5glY=e6~Px_0FJ(I2<~qMY!F#Po(% zPHhcAT-XP3UId7R9|p+!P+@WhG&v08c<7BG1lbAT3VpBx74<*@SkwSX7VWaeje^B6 zmc=s)=qx-*)j#cp0Q%OSRK|Cp(wI}(bY&2LOlq{efB8U1wm;?F2xhjh_vary6l8(1 zIM_<1^Owp V-C#JTyS@P9MIfD9zp{ob% zJXZV@;jq>bBq1sOgh0@D#CZk-jILZFiWFvn3O3ZCh3lfQVqP}fS!EWt_7w<#gOs=g z0}?vC0~R>i0}?czL`;OzjCS$W_BaJ-4i&`oY5JogVAErHR=>z$k>1Zit)gy5qi-l0 z?7D-&$R5^3|Ag7{_kmM-w+NTA+5G(N2HpO+MmsoC)7>(8+mB6GA6t%I(8hW2!}@ z72jA3-jG*Yu*fVpP>8gB(^yl%cNr>lJ;VdorY%Xg)*0Bk)AksL?cB}yc A=-7k<73k1u~At&^+vgG8vriUTuJy6O}yH%gO z7H=nEU21elkFeE)oizwg=j?E<>6ebG_O-P>px$~-)AE`ldt^FRzX}kwyM-uXr|en% zVD*X}F=}I_V^Lk&aB!q0vo>Z;m+;nW)nby+;8zUw2)m2UqFU;;q&nX~U4>eFTe$;# z`}MBFDM=BL>*N@ZW=C%q+@)@lchP1UE-(<-mB4o=p%*jMv@x01M>)z5n94(y@$=Md z1_K=t99W-!!Xz0>3>daXAGm=&XfUIb*nMUG5rOQtH6LK=$cW#icUw1-)QLW8W0QzG zCp?WNF4x#-HF;9!R>TgwYCNf+g|^M)xiI$dGGiBx(fTi s)}zB;8Q2_*rvqoP`(-pWI|z65z%v@- z!f{q=6hbR5QW=;hA7QC_;Z@wgN*Gy68$@uOCh4lh-A^9Qi}h?FMA~qkJ<3?H7MZpo zq6QIQEz;ikp3hB{%Y@z?hgUG(S8LKI4 Vq49}(rcCWWiX!3W-8d!3 zox6$Ex+Kw!mv)#IpxyGhcX2u0)qf!FkS!mb6VB*%QQI|l)B5lV_TQX{+t|2ll-zCD z&(HwQkD3pQhvRW7lz0-?Fn?DKwQNQ?x7!37?fjT{)Z32A<5KP>S6v2eV{F#FOoxEC z0Tv^GvpIkZz}bM$0leeN&h6?T*7eo8J(HI<_Q>ah_JFhXvN91;;9XXzAG{_Y_Li%@ zo&Q;b2%r4H0?UZ_z pQDLrM gYQEJxq*9Kx84ZkHWRC(*i9U&;jwx2iB8URf!pG^Xca|& z8mw!Ptep#gw{&_}{%&Y6Z=~~OAPsCj>j?6itgxG2Ra3=mp{bqV@lDBZ*_BZ>l;x0J zv(8bkn|Ai%^~$pLp%bGntnpg^RsG|r&&=A3^XPnj% 8kg|Q9bq_pd6b5L{6T?PKj=IEIJ6C7xFtX_cz3(Ymo*WVRPmU5KFyU`+9gxf-}_% zV%Lf!w6bv*BzKDCG^j&)Yw-waj&?K=SrW~C(h&+1>zUecM1S=_h`jBXTF=houHk6k zs+04e$C} y9&;9GQ))zo(Nsmt z=WtY3hXqpksmBM#@Sba_`bH7Ao5n0a@h-+t2p!0A=w7fp-TOms;i+A5iJfFvP94Ng znu7u03%z3&`B-brN{x(mgm#rVLKKG7-Q%)o@Ko$(?n1mmoBd2-v~jup1v1(jY(DL* zB5$-(SMYt(qJC51wv8}WqHvKF%`H#R n<8+6@KO(BD7`jds?NMCG6hDXBk&_YrPQILDlQ)u zqH|ObO50%J0%BDIvK#!>r%|o2!$}`vc{_t#Oq*Gehit`W*)y)heA)Zu`1M9LTFd-M z*9X(5)@Eyz3`Plal;ds9S6Mxv)1@ed73v)zw&<4sKJ1EtVlk?&mOR62pAjw-?RDZJ zn)S>}#)#Wn%4yaPo~MOMWiDxB%aVK@p_7bMO9lDCp<54oA9N)Da48`2>!0G6qy7R_ z>$}Pk7x*_>rTM>+RlWcJhWW3wYH7u;w;=g$>j_xnH$Zbpdd>iWgQ1ysNc;pSm6!$d zfdrzZooDOp5GhJz{rUOCEHsBC5#K=4IYLJRJHC69Y3KgrMpC)dwLv$oYn$`+bawXo z`uel)*o=zQ3hsb4IjQUQax*!hhe&YFQ6`ghVywgxVv30jq>O-CDVS%mYWG`NHH0j_ zl~q3cTUk*MZgD9q>76CE-k)#1s-K0XBo` S5BSC>4~ivwYb7O^+etue zNazzwH2)|nAIhbRSCj^uj(;kcyoV%L dIjU@PP+6X!zcqh85##S1#2Qi37xSrv-N`N;V t9wI0=B Xse9v#qr{(Tdpw@1DdQyq2L;X2&$`~bmzD~G!GMOF^^XM z+A23@wZ+IGVVXoUGSj!MS~jrKHrBNmjku(+N!!DmiOUvkKE~B(P#QKbEwcMNP=Mbf zi~RIgCFCG299F0*`ZBldgu!% Vk&Z00cmhg&8CIt%d!0%kgBSUdsH8DfW!TM>64D37{b7U4AHBE< 3mt)mw#J;4^ZlGPT2J82!J6+bIi!n#+{<1yV z (#)s2# G#mh#mu*<8* z)tX7SXZvU$PxpklvlOy@XRWGRk(Nh-?og|61||}?#e+E~Z57_)AjeLo*qy=V`+|Pd z70=B)4Apb+xVx*{Nm!EesVUO|$liN~TV&}>0}aE4-8{q52rPA5uF1T?chFQ?j&kRL z$~FHe@S_(AbCsZ6y~{n0#Ap+3HW;R4PdM({IayR$%hWn`s|&K`>5dZqW4pQr5y-0T zqEm^$y7v8g=skR7fh=Gx83Wb>WqU-3FvJ5ogt2ShR_qB-V!yqD1DSc{si}ufq!bEo z8#JmmZ{NB_Zh#aoj7dgi)hO<~iLmo^_4%M6x4vwjvwZ-DF%MS7Uj&_0YFCk{D@;F+ z=czKp>{&N3P4}H*=V) 4!&ZOat$;s3h+(bNoC!j-O9=6h2vzB@Lxm zo#H8(zxC_#CTY06kJ>$s(lm2u%9OE)T64>-q*GloBp+C1giV7^BD2rD_8uDWhpl4w zUh!P8EX@;II6JDEFL&8a5!n}WuoQJ^ LAa-S_fRL!5F{0`;{^Nuyd6*!kKj7#0%x)PR}>+5kcEq z1 5yfq#Kwv76!fWW`TR~~)i>%9IcQpNhBBSjbdF5Z#*<0ArLgL4XV zuhk2NC3~ya;Kg9*7{RMVgW2OU#|Kl~CVl#hw`)r#2%>b9?Od;4Epe4`mr4KoAiRk% z3Laas*hh%IB%Z(|*}?^x)-Muf9V){Vn%7u-CBbd3H_z>`ETf5#lf!2@o{$R8*w0`> zW|rZp{3+Gv=GZu^%IDWPJI7=-$mr{dm(Put2k)Sh-6%)?B1Tg((f1B9!k@-kt*)D_ z6;KLqw8C4xr@_)n2ftG&cY%iGV?r%>i0qmJ9YMyd>WD@|ep-3|` p^aZG8tW>O?^)XgeF^4nRr}a4wpF%0z|kMD;pCidKgV*N+c!>_SQB z&_|Ugg}K&YIZD-6+5BKxoq>1I9^UTvF8S-+p0ABnCu|y<=9Q!qqo0t#bz~WGJ|8^p zpxEFAxb@oMACezfJ0;8TAb`Sid<}zp?vY#0K_g>jfbvC^+t=bQc;t>DFfut8eIYo{ zP6?rl@>$6U!d+Cc^D?N50d!hl%EaXk(uEyXbvi4WaV2HT+N7>F?vXsnig$Uw3O9K! zyhC6R^B7{BZ*yCUHGLaoa}!{ITXCodgs ~((AjtFX=+%)Dfx^=K&Ap9%dD0f1r2eDP2X$W;5=dK zXW%|)`NbgdolQM8`tChBR;nd)%U?U-mc-P_efWP=ybq7Il_!4wB9n)*DgNognmD0+ zreeBhi5p3y>*EH!T_{LPbHuPtQrFbNHhy?0xOQlXW~Sm{;rnwK=pm%+&{mqa540jJ zg%do=SVL`1P{*qL;!$QF?`0}Cid!0^9WS~;5Chn*j)J$4uGj#~RC}t&z?3{ ~DV z)7`51p{qr8a&@BMPno_IRdXg5Y?RY@I3&q{+XhFl7NUH?5CQA^K0k8;eu27yR?6b2 zfcq0Gt;mO8=DTRb?gPb`16^_xN>mH`T2|@J_3xo}(fC|)d)~^5J?=HXukzyI{D>$L zEN0uiRCxK!<2=kK9HxEnAlHF1i->T+45nokTx^;n#JZ!?QAq<3Sv3qVgC{{=JG+r; zT1O@F 03k1*j~WVZQz02QKvL{ z#0Ar{$CjC=spO0{j+LM)qOI>BzThXY e=#i_lp^j}`{FG>y`~RViDsf$QH#+sBdb$aThmC1?Zl`0Di6>rGYEd6)ezFFR|} zet$qH@)DJEMNu|#bV}}5jZ_~Q&G8a@qcaz$OgAJTfZ)k$o}aYEFSt7K5;hxk1(v tlI^9v2{G|g$#f{c^*isTGy)7 zy(P_dGAr<5t+drUm1QFtL#JR=ZFf(oWEZCa9VfLO4l*>7yU;?+{?U&a52248(Yv8I z_SXv=oo{2^%N~AZP~c3ohtGBA8`Oc7@O29pJDiJrogjYQMH9kqO5S-=dh>X+du&bd zU$Qm}v`yL1AZhG@NTui~dRp05b0{TBvCdD$5@Nd&&Kun=Qj~c+oJ(E646pEiIVV)5 zzY-4u05FE|Z=56jch3EnV5k1y$2{NH_Av?nacy5E^RuT(DD#pO!dmkOmo=#*VfpWo znJ*tVl4|^x3ldo~k~rbpp3b-DKf-6IBqCIcOraBWvVQn5p@X{sCr@GDl*8JBq~5um zh6i5ug#4x)RJJ2F4HPVq#0*BDzXwCVN`&T78BLL~%?uU+@z^YsEr2^{g*yVH_J`}| z8n7Rg0%HLsW59J;G>tM$uki6~`?;SM1vL`35M5I;)!eW)l~NgdM8r=Ol7zC?Bd{K^ z5KVPygPxe(t+lx!GqdmYQ>8}|%1iq9k)K*7CqjAdwFi(|Muc?)fic!a(-hLMptw4f zI6`)NuE%*hV{l-}AkJg}(=|-<76p%r#YJ_b$5_9=GAvSu&$p>PZ0|%5``qtLOr_P= zfXck$6^wvB4QuNeai)kaMSDA@^jMRpPNPp%&3v2IE}uNs;L`MGtzB2M^02GH+*`TM zfwlP@2{uY`98oC_V%z?bXd}%Zi4&~y6JL%=>{iDZ)zt=*7iz@ioCW=G+Vv$_c-H}? zs4Y%XGeI#m+V(g4josy*a0!W4dt8~EAqS&su5`xlkTH{%tJ6A)TbV|ykKNL;%u_(I z>QY_5-I~$j&K4iVIfiV G5V~9qJ+V(*6CS#s>X?rM+DixvQiEXc zW`qp1I&^;Ya>xJv3hPsp$Fvpb4xbp5o?xTY-cjFxMUAm0gdNz{2CQwOyElIpP~b_j zDEpZ;R|S|ZLr`muc{gbk!(i06YTre_n&Z;RoX;iIUz;a1NkG$bOaq7qyu4MzR)EqV zNDJBIp0JgB^+Zt}Hn(f>2Y&s#qHio8@@n!SSjz4DiC+KYz``E;lU*N=UK`#%$-EW% z6|de=hL1!=?KPKp0h`UfkTs)V4w6@`SkA>GNmT2ap=Wc+OeSm_>tgn33qnsaD3x>& zUt+j0!8v>sI$ *2eaUV;sPs_>sn+aSP2HXb+QL UWmJQB73AuUfAWIy% zb6veR`eC)S(j(*RH9iONNl{Qw; V;7x0LWQ;^Uw7D5koIc|k}gTan- z)4{0i6z#~s?Diwa vVeFAa18vzYJHylLk g=K9 z>ReAycGLOG(nc^sEhwa^nV>h1OOte|y~A!{mDXB0g|`CL74)R*4??Ibqk|v*{eFMh zIt*bT2MPK;u15Yhwle+i+3ILw;B2C2WozfI=WJ(XV*6hjv}!el|5#1da d+K1g?MJB)vW{*K~{3L-T+fA3>ZR1+JIPDNg-!vR~PB1MKVy{GT+6j zSIg)ARJ_WK0M^cjvPdV^C%J2wL7PyNGI9H|u;%W4&E}~kkJ^Y5l^}}>aKo~=>s79A zr@NB(>3@TY&PIv6PFt}!&@RH|_37z}+VP}?b?5R#NT$_abi}{F%6E;Q5AM`3>|Pj_ zjO4z*=%yc|g-(+^kK#6^QzmV=dgB^wv|aJS=E1?^3H Z@j%cB(a{Qpx7z #I5+f$^nD6jZl@)+gx_rB4} zR!zwgapVJWKxQbo28Bg0lH1;g$qBG05E6W10XS~kkT|05rFBQ|NAz1`0;K=uMTG($ z4fG<(=omEzmyU-;C;W@o35q*w`DjE&Jsv<~7m!#U2%}s7z`baAvX%V)^l!8(^HZtS zf>R$P810cbY~Cs_j8_ZYc+G9o*>@LKg0tVHzyVXnY+jubV~=jISkB)DgoINE2S95M zkJ_bG+KU%HJIQo_Im 9;Wu>!VtVH26JsvT#;F=9k79 zr!KUKMNpT}(d*^*Ptr3eKp|0$_%dP+YQv~n4vKugnD%&;aB6zfG_ku~UqEvPdlIHO zvfk$uH~R)>Pk>%890~8a4z3GQ)LPx#E2BoqydbKPJ&NYv3}#@&SPD zdS_no>(=K_;p%#`igPXqLZh&f7owyj#mCXeC6;SVwM8l-{!>&2=p=#5(Tl^HhFFv2 z*?L>Pl>J^6(2uDRyd75CEru~#fx8OGO{c_uXinr8BGkGFedMdQj9XVLgDkO3fRP6f zQUGSj9WsnyN8Jb0l1+XFD}!YRmS;JzeHtvWw;7)l@7!CIx q_UPE$e$gYy|5c! z?6r2-ekDOm)!|l=yrtZKAgc3gOL=``b%XfC4Bv(%jVeOUg~$gD8ODgzcwMafYa%L9 zYaZ{*(2eIf9LnN-WsaXSUe$5 |G$k(ykUHS%IEi*92F{0j4qC&7E&9Mshc@!0}ovEPhe<28Z|> z7vtlf%$y5lU>^7FlIZaN#=CzRws;s>e-Fc*zrSPs8<#b=W9K;#e6RHkXyMl-Noh*C zPL(Z4In)v8{Z|&dt5nM~-8)0y2VC1!!@oXEt;rpbN@bK(>l`l9|NJ_hHX7YBBbhMD zu~92hj-CF>nWCekGX?Se%$H=WC;uN8plLrb&c}@CAfk!LNYe #Lo=2vjsB5=EDjYg_0d25PKD!sv2e)Mug9l2mwya`nKt(2QpW1GmSLt}yg zDOBWIqb3D881=ThGj$cHadg5xs4TEBhIUT&B8X^C#mP}qNv5PS2|n@ A `02TCvoz~6BU!fV01+6@N|5&*&Hu^uCNAP(z9 zp_Y*@`j6eW6FrYz%?~Gev_F2IV5PxbqG*T!!q_6gc*s&n5Q>n5p2qR{-?xTt5OC@P z2SEu!K#AgTowM;reWJmvZYvV+*wp|%wLaebi6qqiL<8rk<^N>@GKo0tjPxLZ!LZ|2 zy2c+6>l!2igntQ!9^SEm=1@@e(*_V9ue+n==P(%lWhfiV?@YosYITJ?#Y?L*V6cpb z$mGfPr?x<&43WHBF$zbwV(1QN&+1Mj>0~12Ri7-!!k?!epl`6d9p9#Y7&^s9L;+g2 z>+d5@PsWqD9 a3UfpBCPLVkr_+WEtn=c_JHo8k*l9cG@FzA(Nxb`o4UgNqA zK-Q^(Ft0jR^V(DrT0-ib68*t3EZS;%w4N!|sn|M$PXt2$cW}%AC*vQaBNlS|AhKFg zP!x~q3ZSNQuL$&DIQIy^B&DD(Sy<*bFt+}$ERGy6cKK=89dW)q0_WzG(rdr-*T zGs#Gg7Qk4vywMl7NV(1}> z+0@QJS z0RVWe@`wPPY4QR>wY4BQ|Kct=s-w7+`MJMf-GT*H{Ms!w$ENvv$;H10{DTjlN@$}a zk(mJ-7}IT!FKDVcS|aK38UcJv=kgKGp>vBghyQY2((Fg0+)0bng~Dpf)(Mt*#WG#K z76faqF0eE2!Tst929uhOwAiURTTQg=vAu~QQizWp12D*yPb-e0 Bqz1W{lP-&s}Ja@f-oAH?4+oSgyvyH44o>6bU z_-PE!kbdSdC-fi4CBwKARtEjXx z+{6je!gE?FR(KYZua^PQAZxq(e5w2+ylp^5nnE&k=QQpH2oBfxwE*Ke(?PG KGXmb8JU8^|C@CB=8?tFsk(WgQfpLq|A+_617MzlRnCI(8gfrga9&1w+*ZU@ zAY>7!)2l$yt4S*XdL3Y}9|>b|bIwZAYtc%h3D_XQXnkaMg%2xg$sFf0^QzF84k8wF z=`kihIH-fj$$LYOhvwn!V=` g>Xu=+$OGEadki7zH;9do=_SmlVvgn<+?)Ww7R4ST^}3yL1g3{dj{1*7h*ef1naA ziJ5S2xo@PsFPczWPdw}EHxoVN;cso$>Z14bPvG;`v6N{D5csqr{!hC2A9m>fTNnTP z1faHVv(Ap_{j3T*7rNq?Ul6ISM?}b9Z?5oAsLkBl1?n#|ZkQ2mLsVK7o%hwnR8Wi`0I8qbb{u`Cob&N)D$>>cXtp&3G0nKCNP_?FaAm~+wbVG zW5LN+EE;4mV#uGC4#4#rpv#n0So&6avP;;};EVx~(K`@8*MzbW<8 zO^w{c(=G=JAVOE}x}XG=;LB&&zNF6@r%rSk>WOxVh)s2Sd3W6J+LN-dqgaGZkknKV zLDUP5%-V<4oRIb@CetK`af@vX2O(nhv@$P^yhaIUhSP7ji7X5~4q=j-rU_jB6hN{t zV5PLcoFe^B76(b!QVR)#5+)MVs{9 fgx#~ZPw%H9R#n!J}r1b&q|TE zSL^*YPFgc6L=NkD*)PBOuuHLqr+3j96EYGo8uXej9fI9Ih{^u;_={wSA*uH6z0cWa ze9I~kc~xs)L~pOFQE=xQsBppUOko5%knv@&aVV^Z76ZF&-%c1aeA}X;!R6JD->%Ph z(wv@03J^-`MpnNJmcww7bkp&i`HkB-3c$ &DwcND_(|nt)RO*3Q1ElBYPHS(_(xnG&WC+k39eN|@i+{zGO&40V zL$XjF6xhw@Kf`y%taY%9u&uhUBxWVPh=V0t `OO%Wp4WTh^w8rm#zGb{EcA W|k$N3U7;Y<_vsCq_DKg{QWRD zEbnk#b + zTWu%*L2Et2-cfUyl*Pt%BYzu@U9NCI;#Xj%@VM-#M)&Y|GQhsEuvE25lOy|(S 6D?DMRrh?p%C(of5Z)cp`h5g68dW?JrNv+32%9clpTQg! zjC)7kGTV -OWiVE5r!+=-U>ECsP+`p3 zBhjA&=zw_D;62Ta1qD!Pj8`r77Ju!<6F8tF?0KBK?8+C3=&V- Jb4%mblY>T3BnatQ#l}L-SN2|_~ik~x=&GJ(v>>>X(Sa@+Vx~e8EM KjV-bZ4;vLv%WUP~z z&gbe~@nOrf?8Jun=RULY@9Df8qWk@?$+PDk3xt zKkqE?>LvY9`sW~Wo$p3GSD|F9=i9@;qIP2}yvUQ%XHK@PwAOqAn{kg{mKweQ8(dF> zsWA~MrBtt@G9T2E#pjvj!Un7OXN?A)0##wixk$W niv|tC$742I-K&vx zt{>s2Fkl*`0hzeT;cbQkWx-YY&eVk35ql(N=vV_?bo^){YJJK0Mn)#g)n@6uqK_3> z+sBenUDc?GqSOj K zJ3fK?ndK29`i0>jnABe25tPdshRE3yH0;n|e&bVvzBBF&rT!hETe!HJ26Yc)`7Dy9 z*?J!~22OLRsH#UuALn$-Kx3JvZVmIF!O}UrF9xSek4*@Vy K1k~nB|1RVcOl%$!U?PCeWH@ zQl)jurIEEVBCn?2)A=34931Aer=>d&mzh!YXy>QiTH$5>lM@?q7SNitbv@}SC{nDT z`2}IHutr2eA0~ew4{#$wV)+S_9qOsYatOZ sUi!92 z;T{XSsP4g+(e0y_$#tS#cIzR>&iPjlGrF4sO>-@vFPHL4_pHl&bGsW?0?+!_4f=`; z_&SBqIjvvJhc+0?v@)&ah5OjYrJ>>Wh@Vb4*k7rF&9&!*$D^PTwnVRfl8-AvaM>q* zwX3bvS1d;!EkuFM5#N(qGLS{OCJ?@|g|MCAPGR_V$C$%W!u((p2slUt{q?zel}H^D zxhK+V@xn2$Ax&Ik-eguGZI-$R{m79>>f`pG1bRwV!S <|J+hlTx46vzYCDP2K zSm)>YjZ<;U(4|kv9%x5rrgQMYuXy)f&1c^DC=T<5+cud|GtD-VQ}i0LJMkN+kayn# z_u&(FM~lB%YLYDpWH%BK6T;7O{D&T1l#Xz_3j`D*!u}2Bz0(A5sD}yLZ2!_^UnpBQ z7u8i7s4j|lq69EqZvZ(WWX&au%ynZ{=(jCFBKm@GSnQ?UQ|U)^BxPH9a8{b9(ltWU zxgj8RA?VNIFf5CG*zunkB+ck8nValhNS&L~W WaQ- zOc?BiGXD7~$|Zg+# >K+L5ADoy`r5^ju1pUzG>P;3xU41 zFy(j^a}WJ~KE>*BrLJ*6j;J!BA)MprY5y(Gmdm~=KK|0sV_of=|E_bpnActBZXb{S zt qqOo-G1B-lSp%^k3?j z?2lm#{06`q7_c?fruiruK#t>_o^ZX>r=a_um`VkDxF23mdwy;!LfSD`oV5aBf~U($ z>8D0jKIW-O^M2Pu`t!D33WDm?B_De`^QVR lDi zBOa>8zAt;x&t}Rm5-|+{@> $!A2>8PZ*aS=*x8IRQ_0DzX%4 EHrOT2z%rMFFTHD3ht#BVbqIHo@r&;vK+N{53$SJ5kb~1VD8=p651uEoC{6%hT z=NGVm1brW`3iIWlA#4WxW8+FC%A;phEp}HP|1W<&X{*JO0fyFA21! !gEs^_6wL4lA0|Vpxx9;uIC25;c$1=)R?`IDq3)}EHr2(ZOHL;X5 z5~o@{Nq=ZYS7NI~rcp&Q=5PTGhDu1t_$2cPv> v#l=2trDNqX~4$U}Q zX{zk-xDRA4h~=U`KTy(tIEgDzv0(U59BGwEb8D6mu7f%up&}IRQ hR@8kQR-3h2 z{`6wPrbRAG@<0C}6`{0Y>&QBFq`M+0CuoRm=5zn_DI$KgtcA2r0NpTyrS5Km(rGe~ z7Bb)OQt9XNqdvL7Tu ygocr|E8wsSL0`z(Jf>tJ*?!;4MUZ_jrO zOU;PqK_0V43`LNRQvx^JY#9Z}K*eeUPr8asFKAcK{ZREUYRO}(C n}&O$Q7wwuY=A-ejF!o$y{*;IWjS2a`OcCu_X7u3{o& zF9Bo+`|o^{OI8J!=nLeil0`6-Ru_1@W~4E|%t00WZ#GHB<( Ts4L9`T zE%0NZz`rwLgk<$q2Z3cp4fqf@+`>?;=H(QsFkfMst1%Qz9K3EddQ8A0du_~5`e6%9 z6%)`Uage96(sGMd2Meaj`SO%zn!`r+y}3cZ#}w?+7BH#Ch1{Tp@Ir9K65$+3!9z_V z62s#+jtWgI!QUZ%iy90VmO AhZwfo*g$L3Dqfcsgcnk)KK7oC|S4U{D)vOe1KnG0dc$ha#4> DED-WpI+tLlCbVj%ptq^Hr3GPT- z-prE*N6O6|8pBm+$FKCSfcRuV#ub(oeOYZF!Y|Hwv!=6C63sSqAfByXja}MZRI5 zzEgfar~7|1Z& #WP3&s&)>|HjWwq|{p{KoeB6$&s7%{_e| zLxtuaFivAEgARXAKRisRJJ~zT0&|$jwP+!gF@fh&-c?_~EC0R1se0*Gw~XUWUd|)> zi2>BQkAA|1SI`gfL&;+(9A-d{%fbB@D9^*=56Gw5m2PEB@go~#{OXd?!J+7VeI1t# ze )(f-Or7Xn zp1r4Tllr@g0L!;V7Sb5xEjA~a^e8`m$w87B79+y;8@!g^S83MAZx;@}(te}f79#2* z`EWxRbn-@@qca2rF`2=D=;(!oix4>P b=m21!@wtc6$b>iZq`U8>0fSjCby=a|uv79Ot5#1$3v0D&g z6csDCoKt-CXFhQ{nI}=!eA Z(>u?BXij~Fi!)3qkS(y{Qc<&Mj5hRB8HUHMJB0?qo=gucxtO@QfUB?d4 UV6#=H0?@?Gh7{7zd_u$E9X>c2kS7)#W=OxezG3*k8!NI)ZJb z%U4Hm-x7_2ylKtmIzmSp ;D$~&3jG={%Yi=p2Ec>!0$aI_)i)MFoXXM{rew{bha`7XA7$S|LyXgf`Or1 z&o;Cph!D-ATh}jE0*K#g58JLG1+ }v=(mN*ju%nB0rNUm2 N$+7^hYV z`@{6+SM7$b2Z+VSi$`i%P(V{M0<^J1@bk`9@QNyFB}z0hh|+lDkpaacbGrK`I6DX& zb M;siT^^pFlMS`%h*DFV#q&A4XjXG;kH&*~gH=AhE%$SrwB> z#-vgS)-^bdPu|6isP_tv#`3*3CE~U)ReHEEf>DGVUWb~2cFSOlDGtl!e}tH%#k=YY z4j#LVc _{{<#XY=mOOGJai*2lx8JfjPjbdDLU zZFi7ttr1}u<02*o;+oJ?pgt=xaPWz%FgTGLgUzX)a4&>Fgrb9 XdbRUxpHPn}4t2>VI*M8(OmZ&dk`6O_VPe`Y!qPSF{OiZR@YJ4F;>msAO zi>O@*AY})JA3_K{#xLQSzR*mpYV&ILwP+1C7{d#DHnzp=c!n&`qFI^9A44Ly?l9~X zt*3xd^SBz8z|XwaRIG@7xNrA6z~niF%!% cb&ZGUA{P=%>4;2ujojob<77OH7i?6Km9O!WXKPTT+)5n z_<1Lpu3+s^<#KR}cqtFwy=1SlwdH5}a#JwlUEaTVrH)1Ndc`Ci`qFtn&T#u4nw_|3 z`|HY3nz?Yj#hjgXKgCcTPzkl4hiG*42#t!Z!@>)jvGfUHd*c#XP|G3`pB^I=$Y!Ta ze0Rp5ebk8j*vg=6gl}del YuS5{$NNG(Z`IPu}R#AfZZ}A9)N$kfEa}9yAB%i8di;bikBeq_Urc zwjUVsAfd(?i)AIa0?MT;W7fi=2tI29jZyWjIFOvZJj1-4GVtuTi2`{a%5>Ad{3@Ts z&_jtIemd_%LZ>#5@yZICyc{hp)$5Yaf&O H-T%An5dCtT#x3Lr6ybeW}&wxUCM?FuEAHHpM=M2H3smup|%l zSgo{Jc*BWXIvWw6NqJ+Vat8Z99Oe)9e*VN$-vYt>^G}MK-m~k27@#=$IR9sg1Axby z+gSq+PyoiUMvZ@w*8nw@|3zNI1d!Kc{*u=k0pzuxW*PsJye849_78dO?#k`?hA1}g zA*$jYZrVjkq3rU0dwObWdV2bQpx26@P1~MW;v-COs94p+npz2+I!zP;pz7+VtaRyn z6;mkdfUQT9NPY_|{Nqwb8NGhjPB`EGp^M#50F#m{qF%%DIuPXr6Wp|C%kd@l7<1 zr~;s_lqj-Ah;?tJk5 2F?_zB=vA&vAq(aUA2KvH3~#nGHHuv zpSy_p 5Jt>rW^10t11z8KlR;j5sN` ~L|3}!(9B_Qslfl7;v!Jn* z*o?)ZGqI@@-pc7YklU6wpN|NF3qKd~@JI)HwnT~*253*)TO5GN<`+xLs<#5jigZE+ zRwOwoJ%NLi4&dcjC-3J}`AZyCw=3(>)14_t{sptuT#=Z(_2hvvoz|x@5Uv=0>yI*k zL}>}|4u(T?c9jAVbZze~Xr~P-DTatvbH(|#Vz}O0ui59{tf<$2h@C(<{jj!4s=pJ^ zEzk%IL+2A1s_eKAv*?#5xH-~HE4k|tP6^7RxfIY?2=CTk*3%7b{+HFZ;C74itzc7A zcLrjkm1+J8tw5|qDbxe`Tb;+} N(S;8`qE|spvTP7p20N<7$m $g9ry@f-RDNv!#c$k?6ckl6s-%yxv@jNB^V2!*8z_0OQzp9EHK-0CtYg4lZjQi` zUg#7?ICbWkNtW#2&G@P2(Z+;+Nqi$?mmXIkttvg?9JT^cK5rMx6YDH@Yli%siEH@V zl1dOC9J8%G178;2 7RzsE=0BiLYL zg&rf_U^)-Wb<8<^!D>lGxf~cQyc#T)ijaOxhsVm|{&p!MCU4%Y1U;@y<=U1LF(B52 z-3GzvO}WSsi6vcpg*4?R*)?lHPgA0D#wOl-WvV3Wt#C}la~^nyB(cboRtL3MYC$@W z$o&=9L>CS(cF)vPpSEy%LP9vaGvduI`@7xJ1o<*F2FJ6=-*JJR8D`^tv~=`Cf>rPb z1f5e1Q` Lip~svd6sA z;8E0dhS1S!F?#k_qq|oyDbycPdXpv^mbt%TdjLToTI^O3KoCgEoWT-mk1qGrLTJ=S z;z>Su5x3p*Hy{Y48|V06L7+c*^GQ!-i;U0zGYDjzVUus9lT5%=afv4c1>r1V;?~;P zp?UJY{>wF*?_SoL+@SpLSP1^tI$e9x1X!o=!nTHV#;tQXf)i)Xc_{28?`$q=N;&W= zEVG=;>kK8#e?rR3;%`kVl(a*~u7bdzq_+ale#39259@WVtgdd<`ea-y 9@3PVlyp5_KenWGGzlzAF0Q=Sv48i!wKcUJ{ zLk8uoCY7kiF{C`N-^JQ)w)CNAR1wI=9Dlh>PhAd98Z)|>d|O*(4>GzU;eUc)-=|lB zu@aJE2{HArvkf*cqm^n9fVmG)sQN!~Pyd%r|8M?VrG|CvIt3!2RqEeFz#6aM>e-ek z8?Rzfy;=FTyLQ$FNH-)4A+t)IH-Eb#EqmLx1+Rhgk+~4P#0FuS;O6cD@)2!1jUj(W z8(rML=QFL3jEuzc-_}*4B#SwqRZi;oeDEo9)I}*ZtIIbCbw6N03$khc3rb~G3BqF} zbDKaGarrM$>ICW_EC7^B@<&wl;3&5Im+0+q6lsaPiIr3r6Ons*#fWXMvR&c$c0qWa zW+O2JS_HYjI2(7o`JDxI-~-}}b)4@a+IDRaRM|?5Rm|U mxY+W#PQ)e1+Ra&)pe)AZzx zHrm}Ovp9p!svMo#8mHv*=Jv`& aAklzGBD1t+*j`PO}-LV&HqU_osJs!Z@%DucukR}6Y!e3X~5n6*BU zATl-+_2OrLjHp!CJcVf&O&LOkT^i01^ZTNV53m6y57cU{ShgLQ)4zzRd}Cxk9FerE zM*bnD9vpcsCq&=TuC9Q^@~>#oJ&?tt~;y^=VmnXD~;1xL`(Wf~xhh(L}Z=J^$S8 ztpqk?I6@vy9N@H7L-ls3a~jMEk?|>R&<}`3mwu=RL;Z6hFz9I;I834eTvv)7_D~O# ze^!W-Ujag}gA659pa=*vMdJSg1#10_BZF1&^Own6XFc^$Gs=}?wa%m%=&{M5scg88 z5#fXwir@=JuLA0{R77-_Eis>u0!!7`Q}bed2tC7#nCT=0efEP`G3W&9u%;6@UYF9M z;j}Pg(u{;vz?1oAcS%Ybb2$iKQHkcFWus5JAD->8Zh`5yV@tc<6Nu2=lLz?o8$9M+ zquh*PPOiITV1&ei7ANjz7o!C;*}OX hKi32>cS>x5TmJkZoa zn8q8V#FiREpoh~>Dm5r@I}(#*b|E3s*ph0(0Hi8; 8Ysa-N2_Wbg--|RplM!S!EhN{Tx(XLN1@M;D> zWtq@uRpMM)p|2B_Igb?4Bvf@Es|XRrkkE5_r~`$V6;990HNcg#3)0Nvuj@_f6RGEQ zvM-z-L$Bk1gt~&82WynwfeDNK9>rwt@)O+pIzK8~N3Kvh_jiTq0GEY(2WN4Xe8(J2 z5U@b#B#TZmd#YZ3plYW|_GLFw&aFN(c;Laj#&9CSpjiC0b}HA%an-0d$wSJW zb(CgK;tPAxsC>u69&%t}hVrpF2qPcy)y}2FR+Rt5&lTk_m>ryghGK8-Ms1dSiY*KS z7kT`^37x8Qvj?jL%Tkh9HoZ}a58mQ5`+=q124m(T9Hk$*HJU9y?w-;;$iP!-)SRIa z`%xDGJb9GE;rO}rDW{p43)43@vu57;yutgV1@jPc)_(4KO{V=4_fn?G+a`9Rlbtoc z-pQF+Na;J59(A1+K7Sd}UJA~|<{oW(l8XS(een&N9Io=s+_)4(>7v#Z#u_fkM4l6A zIT-3`vnJW@`98^wKkGHf3DGrmeuKE8&cVsvDzd@-qG^O&zzMq)D2=jVi~?R-NvF7d zPCx6p15Wo%olTg0>J2$T=xly-dEpJ<<7M})*2|QlG;=rN7uh;<8~0Fep9?<;I87;X zQSe+0(235>bXd7iB^48n;;E6@buTbj05uS>y1;@R|E{&AZz)ck|K^93er8p*Sq eoA(mC9 zU`ZNX`qrB>{Q)xf0E~Cdzo1o~Mo zD>UY7{L_T){*uOA=E4eJxNPbCzM^zLTC;Rb_GUvLhQ&@Fg9gODCT))#)MT&Tu+3PM zZ95Va%MD49iJ=8gO#?BcWLby!ops}E6lSsFF%-@+-*L0iN6nP`@Iup_FDsxmuOC2K z*2{-fUh`?CfAPrdyg@!S7Zz$*Y0@WcQG zJWNnfvnDbTf+cwCnqP!9e*xu^NrDPl(Yb${&en-dMqCb2pn2k3o37h RZ+a?Jdg?=sqG wP *cjb1sne6h9O z%WRucWM3A|LSWk*ID=KJRncOBGt9gT@#$BuJ!|UZ(>^f(#|B ii*b@N2BV z`&mGs0__{5zJX!rMEqf8Jfht=tYy7@*oHZ78g!PvH_BYqKoJ%`63?DLE&uNMl5p%e zZ*vlt)`OjZXXqdhb(MORka&po3%L2nABeJn24R{m (>?Uay-%A&JJ0M!oQV`Sn`i5+yGa))yqZa6Rs3iJ? zLY$eS^hH6(1}M;_&ftFLeseEZDt$90AWe~Ccoa$OIyOWm*dMF1SD#Zg?$ehp8!`=K z{mOI36xJta=nvZd^?R1{G_}MxnDgY^Ua2ZuuT^nMl(eT7-NpL&2HxLZ*=F?g7yDu` z|F5mw TRw|k zO^Tl6lgk4yw4#~@1c5KXQ7=YCrPci7yAO?PawD1v*C{o#`1#h<{_9blnow)ePSP`; z35@{}=XEMrVmI!T$0cptHm0`@=UK?CD^~K3rlz&Tqt*fIF6d%@JjuA-v;3>`P@EmJ zgoor-%s)HUMGZY6tPFp~oV={WmFrrO^at$LYwg6x?h?f5;d*KxhsYZ8u{B*9Lu4<7 z(C76-;lH8yOZa^SH>o6^&~t=g+5713BW=YY=g= ?Imh*(OS%D4~2fy|sH}Z@5OVC17&{kDl`%)-m{{ zh`l0Yxp!x-`UT&aP9SE`Vi3IaIIso(m=P)PJu>Na`_-YPP2*O1_Pe!+KQRvCy7S^> zcuF;^jA?+~;~s3AnNo+KebCg2;BYcqcLNSpOZ$Kn)kB_M6>pF|>=loAb@y`^!-jlo zoyE{oy7`4u%z78bR+>16ua0hM5~OOQTWQ!1mb4vwi>46G&j^r^&_m6~UlArXuoY|i zQpwxUiDI6^^wBN``(+izX3PQSmJn{6C?2G*5<07z sS=FzatU@C$AQ9@L`EYsm3XZS*wtjKeSmlVG?_W z#8l1sW_>3!(q6agkW1b5D5;p-?~AqUG(hh5c1@0O^p`@VA;sm{>2?0>;NT$S$u)vL z?HO$cvP#c*_g2)#i4?s`N#TqXexP!d00|Vf5S1R1u$|)X6f7zjsRULtxHv>3GcW`o zZs6qYNK6}_c8@ExZt9=4qKbOowtwQJm1FvZSLIQ&eVJBOh+Dy?&8U=#AH$SNSLu+D zjj_dx=iQZSzF?zS=-Wd@TEn_7p_BPMS {3agtLL(s36)&HP(u%Z)`FhSU!3u#s!pWSrxYWKZv!BDuu@!047JZ%nV zVDfHBfanC^3!6KtE&By_3PJ9$^S5M>cEMy-H;xcbua{>6srM8%$c~&(1W}2k+vI00 z4qZ!GHfklIM~i`RDKfRw&h)rZVlns&zeH$;+L3>gG{P)+`(mGqI>->0vKp& cai|Oq7SX$CVSdpKJ`o7S!uCfCaJuO92a^v|gVx9Y+_?%;gi>FSej;~r- z(QC`(3OfE_Rb>aW(SaY|&;r0=(s{u+=PfhVO#>u&kf)n6DYM z36*VZ$o%ZKm}h|*Pivnb2ZF8yL_V;2-CISeL|aFC&x1tQ@%{L$f+M}!OxUH}c%hl) zW_w$5>lYlFVbl^5(Skz3?=dTXkG-ewtifEJLT?7qO$%denM{7l9xdJj4b*3C)9 3#51+jyC-Q-#T zzQ}$gTZ9W_E9^Tc7h84GL~&g5f?10TI;5itdv_|V`^LOF=j|nGMD>=C2r~4agKw*J zL7LUMl(P7Rts05Z9|ENI#8LHQL=B8`$-d^l1fr`qw;1C-hk?G7ioEJP6Jz(!%@QC6 zkI7q9?Nl6^*|Pi#Y-|Za=i2MvGc!-B15mw>*V@`33LjUG)}gjm$RL T5l~*ZTpc z6=}me2g^?=gy&nNf;VWhj5l=>1Us*faVx(Y*|EFfiCkvqZEo`7Be4_*Vr&_mGf+9} zcJfv0 xclfB3mJ1nF_x9zVb z_|R4jDD_bK$=2*y^c`IR#GwpItsp39pd!?s$p%#baVRZ~8LzjYi0eiEl {qX|v+Ehl8+{U1 z-j`@fjH>|44I7Zo5Bn+K!AmDsI#dt69(J=FVXFJfA7{(V(90`bhPItH=3v{g7Bu3S z{O_HMjSW8+c>b(y^N51E$3tynogr0dkJfD2k hwWKLd&W>v@;*{*4j}c;0m|{*wWQ|L>o72M1dRz>=y` z<$rL7BL3kF(a%^(060Va8W(_@2a=rY|D7{rEY+0hbP@%cGT0uw?fo3+1?H|T-YEOK zv3y*YJn__t6Zq|etU{zSP*Wdl ?@_H; H{{Z!Z%JlDn-ydYi%qI^nqc_vl53Zf-FSTul8(~ zd!M5lHB2f+_SFTNl`UN1uv5_zuuvp|=vo|MxiEg__3f~H?mjRkR_9sSpN!ww+ii8r zP|tpBYx)#9+^|DKYe|sOqRsw{)}MfRG3_1%b2$2e+(NIS+p@gfu_iRP&-9>bdIKx zEZp&!r_+_`1xj?&;@GcAS1YHR{Q`349;cl9&(;1XQrO-0 &G2(#ET ~k`u zkQ$?kLnogf1^S~;PNvD$S$9#Gl#P7aO&vpBa)QZ{XO;rKJpg)mdQ-zj_cnZcJ4nZ4dR ~uF7AsxZ_Rge(yTZyrz3Vp9i*hWmG2!O zlMvwUBxX(Nvm0sAQ+*0b>O^`OJ*-y^>Gv);`ndVlpz}5SlsyR!EzzR6xaEn-uk?sC zo-0IvL&=f7?0`ebiYJQ6A4s>z02YM=fJO0*>C>adCu-w5bU7A+_g?;5XP|dqNm0j5 zbZKRIp7Jxi1H4;qz-L*~aBV^x*rbX@Ok`iMxSruGW}N=yTWx(t!npqQzWk{*_@>3h zO6!cRO5IL--cZQKX#~Yv|FrYn$j_(enwDG&s@-7$KI=}9U-td}TnBd3AY;8Wn~VCV z48M+J{17LAaC4qa-DR8}( t|DpUSp+MSWrjj7j6# zF_cKiOK%hxpc0B|)ZBdD+5Qlse*Q$f+H=Ph*Xy;6>L90o#rXRXxhTODh7ABw=)(S| zSLXY_e`VYN `ta4wO(f|wv8K{r1d|@hk z+_IAV-Ccisc$K$ALEdV51j|yq3;;u6NJa|aR8#jo{R=~38J8k0@lBA#IKlvoNKQP( zHy_5~et6L_|0O5DxI`YEhHN`6j(ZyYp!tNVZSJ!API^|2R$MZ8Po3lrZQ3ZiGt4;Y z`a8B*dv)8sW(tD w4J zp2vW8Dt4%I)*?HLM> k{SXsuqWW0vZLda3Gu?j#mc^H%DRW=dt9uQ473NBwWmW XB z`yn!cAnjWO=_o|8r0a*d+X;dxM!MT6zoKsY4s$U5?<;Gz8e;|^OXVw}`RbG2#rA7I z72W<7bYLz2PNP=gZ*;#DM-wJ9f#R00@1q2uYU)LzQ)szHROvv6e0 zfxl6ZT9`V+akuy|(&Y!4R>}qg!agLyMk%SL$c%X0**O!2kUSuq^e1Le0wCoxYW2YM zCpNQjPHY^I&aO3n&TJ`ukIfeB?d>fm;9d|lAZL~rTwE0#At`s#a_HJTut_(~^45L> zk=sA_N~)Dnwp+OS3nK3kH8hpHEsD82vbeStqT6U&m#7xrWjF#A(c2qRXR(UPa3!v{ zo;w)wuB<_%nQ8#L@(+9GD`|W;;GtXvys`=)kP?(Wt6g3jTl=(NN1_;qE`MUzU*F}I z%V2z~%~DLci=bXVZf!gB<`Vz_YA9MzMXvZXbI;UX4b *SRJ|Hg;!hzwIC7mS?{NWr>cm#DMI&}*NNZ0Q^r+i96FE>gM{3ogF6 z|5yz)5;um86+Mrb>W21=r9NkYnM}TpQw9`1UMWKmS)R2B#r(N5nwd!~N54v9cRq8$ z9$)^)04$-)T4A-njF%TGu9YsR-j0#^$71ZTC8X9aNF1xl=D?ii5zz%>#w7!4IhfeJ zRmm;cD!9zh=dJ%VgEj`SMzr>R%@yQfz-%T$wj8hZi8Kj>%+w!pMquc+PzG< {{n`K?KgY`N?@w&BmVdOgPN@KpbI09`{so7XCocfug?x}WvL zZNlRD_@|Ziv=sfsdi2Z@_s&i$;R+t-NDRo{%O@^cb}bLYt$n-WaTHerP04h#CkEJ5 z?#l_v;CvFZ`;yx!hhDlZ!R9hcC1sa?;Ij=abLaE$Ja4EI=#-!lJK;v;1uQ(LhN%4Q zh$dPV=v|@uN0Zr${9nXIM{@)Bku);&*F)JVdB6rKw65=01*=PY3DRC0AHd+y$_-J;0@6pQ`KY?Cs^x3C_Z-uu5SZMJs^U&*)`w zZre+}N{_f%jFp|fDe0@pT!|t=?lAIHeL+vhH&kmr>w(b#OWe3?V!-0vA*Qk>M)WZt zh@d42t>VY-Cbd~F_J`fI!0x_ORf!*!l7*ueuYD}=5czRUj?s%?>!c&t0{ M_9NM5(KrKn+N59@*!2mR|mnQNcg^^H7$(?3k{pCq69 z|A*xNcaLBF|1JFyf2BVRgP*>gE?@q<$YwZheFeTj@Z*_h*aexZx#%*AU&bnD{djtK zc!~+x*fQHjNTFo%zMDJ|uvv%l@Amz_ID5zT%-XF@yW)y%+g8OD+o{;LZQFJ#wr$(C zS+R}2>R#*V?swbXwLbLx5p$el9N0?~q|Qe*0BP-ymwut ?cs=nAJX8O56)(ylOnVnd%8eFUil>3hlZnS!Apm2}MIEAn^ zQ9^U-?2$DgZinOa^dv~lb0lyeJ5|yNV)MzGPbzaPk7fu6;}QjYBJ5Cfxo0rgr48{S z9|IS{{Xs)9lB}@8`orq`{{9wjliLaWhSvr7Z_jhcZg;%!H5-i3ZI3J8pI>bl-$+OF z{VG&xisA<|IA#fTd?pmw$Yorc27?W@C5Ex8*JRg^+6*&hpg+E|JTdG3VPL3F;u~=g z5C_I2U=s?y|Cae_-U1EGQ^ruDn;YQIAyOViM?Q23#CC8w#dNT%4J-D9fSz-S_+7 97{g9(x;rR%Z?na9+XTb5w7z +M@L{q<0=0FO2jVkfXXJ)*iIc z5L&1}pPNhe6SUOs!6E*o0tLqC9COB%AWs1Zr#QR83Ov}zm#=jtC&%ByaZCI-V{0*o zAWqIyePu#Oish&=K8|;pV4$08iTKwK{+ZPMn=c}vQd0E11vM&njhnT#(VFHjhnXZ` zhCC!M;c=v=>e>^peRuPjT)4FHoEEO3WtV+?*)=v9bE5N)ByZ$#%hKlH%*BP`2W0MB zWUGRwcDb3**@P_yXOy<*!FIOLR{g7azc-14PgJZah83@LAdAUv?+A(GbYC%M _7ok!v=XVAUTh#ktYz%izukH}sBkfawH(Se$7t4EYXGqfCudDff%NG-@5* zBXm@-2V-a_aSbcJ*OR+Dn)7VgCu~$IuIt6CkZOUYd0WkG2v+eb+#`4ik(lHfQ)sJm zV0SX^Jm52|eRocfL2orkH7VO?K2aIZndl| zc#(S@Sa{3^UzW!P_)^M3vM)!?L$kL0&Ry-hX7>)1BhX)Y9}_>mSm@L5x%0kX!)1dD zG?$9cqNRWSl7#0M6?q^r#R_jj%K=@D3-UKPyf^Rt<)ARi;Mh6i647JI i z_&YTjQOY $G-*nKx7K!h< zS`AK@=+90QO=90?v*z!U5p+?WO$<(w5h*(N@0bUZ9~DL{Ch>C5#n5;@Lq>?y9rj;Z z>q|K^D9Xan9V e{$nT^|mCmSk4j-?$l6wY{ApVnUeR>?;nGIH*+ynPp+?qFYTsq^{ zSdz2wJ-sG|pGUhcM`*zOLZ|0kc^k1&Ms*)QoIJ@w0k{hkH9Q*hf<-sO3vWliRN*4c z!|-_FZ0q?tfh9w>{iCW^$5@ZnEHa={iro;*;Jg>wKEc=gt@gJa@q>Psqq46um(B6x z5R97WwmgBXg}RjW;tmZOK-qp)Z)^c7Jg@M*H@P;JTY^3poJ;~q_}3wAq$`Rw1>pF8 zA^30e?mr*WOzdr(Z2un8RR4#wZD-3j0FFb7%chHf@LMed Er>+MqPG^oyyd@6DvZ?t{if! 2DRc=Xha&OPz`|D#)=x=N8CAvH-=H+avg>V zIGe^7X?nr})Qag*^Z?L#>z(Hi{tE+*5gK*pf2Q!IG3zw$A!W#MI1 zQR?Sx$*R;{NE#PLZVbhf=RJMm3BlG#WjE*CFTD&{mE#HoCv1Zrc1;lqV-N-;wK!@J z;oLx$MfySPgXVv!*v>5Kg;Ex-)wgx22je!LMn$#4f#3infje^lGDL1~m|j2 i@NOLx7f)6^~8j` z7KA~)L{RyNubyCEONyCc2Q))AW>dz}CZ!6eiz1C4kQ%ZsrM1?je5h+1yE|SUD9b`* zEQ^gvZsYU!4&~!epN=oE{R<&Xe}Kee@M0fVL*`h65z# ?!oVd)v7Q z&*qzPetfU@@s)!wiADYpq|I>$L&{Yd2@zN;+#uJp3nw{uB)H)^e?$m)*gfD8c!LQM z2&~kh%eRTuu9-hSeGeZncE*BuAs{Ly4Y9prZ3;YYFBv~+RIX^DOmeh%PgTzs8fOO2 z+giGJT3@YDJoiEn59ETi{;5S?!YwG;1;aTPtj%DkiQ-1~+`j_WOVpG{WcpLB`LCc& z#@Q}UrIK(15q1!~7rkd%uN7*@7*Me=boosZ4w|U}L-vhru}G*K7+Z`TZ8g_Zku*F0 zI^TUWlGp@q`bXvWV~D0Uj%w~&C6?F+FV#0Q(X``N+Z8aq+D?MI5-){QY%EMMUdGYf zbB#U@(vM+O*|BaT-eYLic2v3c{m0*aSSP(rI-n%?mMYQ7evMA yh#Zh1b2#ySa NlFDcpg?bS@?kO?{55~jTM %XsK@?!-tH&2++SjJR!#eSLU0N|G!k`;gM1YxNzS1O}P{`WaevHG6}x znf5FK(&v9hM<=R_wWX@vge|74Nt~=$=x)Wud9X+;AbSpH-glW5(`b;vG%;G{Qz Sathqts mA&A80*hh2SXK`pJrtCWDfP<5fZ@TOiJMdx?5#CZ6c$RC|LG$$|b0=NQotB zY5)vFp1UDr$JfPcBgm&xK0|2P5KOilm3A1YcUbklMf;a1Da*JcFlj=1gsQRwpnZGG zn5t@taeVKn9rfK8m~=k1-!q{{;!K@XMMbhoWs-ZU>{jBVKUp#{rQ&Fl+0IuIg)vMG zSfrzZx-_?n6y5!etoG^sQDxt)J@?t2Welna#WVJoqR-GUcv7~~olWW=Gksj*jhLLS zF4>*4aBADR`yMQ<-Z=-Xd#GHe2@;6r_5ml_@
ad?%rnD~|vn81-HLOXe(os-k9PEEbxE7l`}q=#_D7Mav0$8FJvXRa z%FRYkzt#`f%b-Gt35LPYH5F-tECU&*cebYnz{c+y >B@oC!kVZdjc=tQS}-}0hHAt)#fW0WR`iVz0H-8nZPWdPP$rbArZ1=>g_b$-7M zlGK$`078ovEtAQ+kI0WUg#V2}zt?c*FTgJ1(&SYPPHJDpbV{hX(zYG96TvHyVDA7G z`4dSgeDLPuB-`tEPr|+`m&{u=9k$IMPldDj3_A8K@r+C}BwMT3Jj%_jVRL?H?sK9W zxptQB?n)>p_&Gk31hIuEluO$zlj0DDViLcqi4Tl66B85m7h2j)4=EQQEkuZu8*_HU z({biB&V-C~dHM@R9ichK=xCfMt)fS$5&Aj 7=*-S7p*Hs|&C}7TbyU!p- KUM-n-TI^JQYNTaeN{W2-Py}-* zO6N`rKjl9SPK7ukio~Y32OJfoD%PF&{E0_~V83CpY`c`mnSIZP9cdDs*=LE(r<*eS z#+qOjj9iYYmh61(&VB_m!o!bU3aK@d(2JR`d&q54BcqFJ)0&RuKwVTJdiH(jV#pOr zl_JoI<-1Ym+Im{BpYE<+v)%nOc|a{zXa3vF8%^u%8A{C{*I>N3IWY3w@#QOT-IYuA zl?R~ndrf jB4ZF#ZRJC8dmZ;X)7&m9R?2QGElcR|jPtWp;&p8N}zwa1#J z?tmuoLiWyeuq-KC(_bDKa5-x63_6BL77E4ijK;>g%a&^(JTo?%%QBjZD5MTrz0=w3 zwpbg^J1|}?q`-JI69HKh_&7)XxtCku$iDjq?BmJ@Ron=LETHtdGE6(X4JEX* gm zezQJ*|6J-f_%Fr)t!3iBmVW=|KbNVVy)&TjTgT{sl->W`2E(Y%Yf0_YZ~sr8K_6cA zCnpf_Wf#FhThu!10qnY#de-w5yTS3GOhS>g3u%dg$Iu L(p zzuY?4SM)`!DO|3jECK8AHljt3Xo<#V1BOCQHDe?-hw;=wbh`4X*H%-7Vy ^>$qy>spoxyv%?cl{(u>sSJ}{m*vR8oEamCX+b>1I20Q zei}o^mC<;0De*VKt}v~5vg7L9B}x{#fktS3e^NiD@_coqz5g&qq^UnBeH~r0psQA; zD`T?nS>}eV$sp7viRVthy44I iw7tS @U5K0)(3+u^ 7Z=I`valI&@7naT%)?ksrTWaBYQ21!l|S77oE;_Tgoc z{ydM5^_euo;(VM3L~zzF!qa}Aw80kAI007UbIhOMLfC8QvlL UR-%(x2mUCUumA_O)Fo43ZXY18OeKiIN^!WwVv$ ze&`_l2?ozhO023`g1pC9C`}J$Ju4f=ne_}Rvb79ceRVD&0b0h3h=qc(COkCK&np$| zNTOS6E#F_OR|>ub_}#e!rrsZ9=mx(Y+n;}AkyCdarv}z4Tv1UH5#;xYpP28nT6rX< zeRpc=%e!t4`E7+?(2Y(rsZeXk_ IFGEQGU y^9b>Ct~MVXt;uu6AHNx;m;)L*5HoQ z+!Yt7pbSAxjQAeopigScgGby$JZyOy1E 1bL_U30gqaT8{W z0Tglr?e83XE5st^YNUS|tCf@tUs^r2PabwHZPa8Ea5JpdCi1i@ug*>DUqlik5%vIX zR9cpu0sKJeFhzlDe-ZXE`&_qIDZ&-evPGl*hFf(qHcX(`j86yf+#E*;La`6WCJcCq zqM4k%p4dT%uVt3e5Gz?iwGs_xmvbGg Iq94z>pTGlnou)CdI!H__c|y!>OhB zUl3}oDPD{By-zf+sV5%AXJAJg+`GQJ27sEu-zCE+T1(WC6}a}EAsqVsnAYtJpLN8Q z60OFmoZfY3c? WTB@7FcWj;~ILh-4FN?eU#(be(mD^uvm%%>xgc?5} zaNApNruJLrxWAxePp94wbHs+TCna`iFm^h`x1bGsbcJP>!Ht8ycC|AENBX?kY%JUa zW;Kp%l-*n|!Sv`9{=M_oGA0hvjM)$O2pqoj(#C;xk8y!%f9jrt9$y$Q#uDj@KN2r0 zxM45g1&x_~kw{@k>py?PUF+zR^Ilu8lk-X^M`EiwNXtMK%GvEb 1Z8>(FE3bR)_8U-$9?K2(-48LBQ)`kE)H}RQXtPdL!k?U$Uwx{DL2n6 ztB{p-CWpZX4o6=Bi(Yi2N7j~rY`Sz#$A5Ip9j`o}8HACs1~PtlwtjN5PU~cQRqm%X zsB?uvM|jDU?tZKETb%Fu0t`F8XrU{6;nK-IPhRZy(!3 We&FV z1wr=t@{4_1^}= S#;WPi$K0&Xg4y2I8U!|spcTgIqh%}5m6(1Xo zor#H51`xBqSQvkg8l}|lFrY~5#H@W;yk^Sios5F5FSDyHc&DK`LbgVhMFeY%JEroT z{rWrbYTsClvjCTun*YakmwyjDqkn8n|IXT9{>|F&eTz;9;L`rd+Uxk{(XLs)$)P|Q z&9iBQDF|~mGTwJzMK3^8#?|SQub77);9lYJx_HI`s?WL(^m)iN8r$9-m^iq&G7z5M zBB%z(c-;6=NvC-`(oWV)gs7;J8#MKC)ecE>Bf$QO3 mGB@7s9tJ49br}4xjC#=yqLbo}^<}&x00z~~Pj2*Zx`j-`1|>})qikD3hZ{%2 zd{6XQ;f9YYt}cE5B&AwX@kfU``Lfu%;h1Gjt0wV=k^13Va;<7LH*x5#L_qtQG0{Kn zg6Z%Mr2+~GI;9V#x~1Ec?)<}F0SE1)hH(m%qZaC0jF1dccL&%SB@wMnP>Ee0UoXZo zyf!T)Mbs!K%7=zlYElcqabr}On99w-Gs0=rlIg {8I|v^Q&W} zX7DK$+7iN=8LY#Fixf{jG$vB=pk-j`m`0jU^_Q}2U{C(fqDa(QJQys$d}m^0myQWA za9vMPNtuMiKXwRbl&0x%;h9Y+Lg?M|r}5mf(@y>L{j4ryo}s%j5R4yOplKSj!>~Sm zEvWsef3^usm*z3f-(j`i%i^O5Y~uzP0dMN!_`-5bppmNWLw|lqxw3FLJZUY3BpRP` zEXP`^rcWhQ?TB(VgFJ8F9fv!+3&a7*gvk-oT#^9K#Pk|}Lome0Q6VHpn3A8e`54?_ zb33Y=;I 4N}7vjaru2TVo69R5!!kPK?@P =IOHC^H82VmiRT}1dLm_Fpo4f3=FJo8=zDS7 zUE(5fmM?)COsp|kv^O3xH(;SEgYQ3;L-WANZa`|V6R=6~Y)QC@v>5P =F^mCbxMVwL;dR7ToA% +==q1wp@+sisTMle zaV8eQZVlH5>Gr7)6yE;sPP7hr?DU*H3S>V-{Wr=ROSS #gFc({- )%EGfuZJ`AOeJ}%HPDOy%*V_@ZNG)A(}HNScbZ<2CP4b& z$bZxK2f}WG6#aR2z+bu%C3CV>3D>JKO-F82h1*4-+Ds(EteW_ xu_h-AY*^k*h~a2$n-2V4P2 zawnOh=extxGbuhFx7)_X<34IDH%;-ss16`i;{M{UPrQ!!D3Dogq8*YJ>H84;c`|~| z9>Ue``j3iFxx6vaB)eWe{sP?Qj9Dpsa(yFI$X(wcyyrr>Q7D8EC;z=;OtNyN+4Iq? zBkIhOZ}d#&3jRD!QDAnF?&av`Rj~9A@;Hkdr|qj6`FCuIrPL-khv%Yqm%PIjSl4wz zzACXV3q|UCgycyzUeC3KW=|X7<5h#6mCj3K%Tp6d;DGYB dE59$;tv&l&yy>?AO=wluRg0^H&pYysS7 zBPIrhe`FSE0Q(uC^9=y&5VY)(-_S=_{r-LCyou7?4Bg6xe`n@)MbF|dt =Xf3%saa2bUO&WrxvR#R64_eYHxcsVBzHA!UppCL|Mw)>gCb{)BO6dJGj&i zs1=|M(!S+UHNp~#|IG*r6oKHsj?*Y5ucoT-7yj%|AWZ!X-a{?7njgCRaaF&J_v{cI zjwl@s$(_r_q{!G2W;{Fb@RdaQ7mG^O0KlTI3Q#4KHiw1PSpl%9&%1c $U53pg J4@hOaO9v91Xh5P~LkwG7}M zfe331LTb(n1CKd1EaF6X?XH;g4S`bT+6ZFOpnio;8lxxWvvpNhF51hhvSgzs3Qk_o ziGu7G8V(5|?Lu7Q^fQ4biZKd3_^g;4-;%I_u^9l+sJ)AuZdA8l9wS#QtlZK6ilC4w zF=I AYc^Js= @XaqFqGfamTK-JJKE9B{{7E| zCLn*JmM~V?w}fnes5qDqvrOzV6vc7IATf5?j(7eYKN>duxg1Xok`qU3UW@IFqVT$( z;O#yzIfvb*ltg~Cx!oL%!^;{ UL#W^boJI$;x1r3+MFfOKb&K+j<~qd;uQIM@%P%FVl7H)kW|tc&879%j0|A zWq;_0%sjNM5~I1cJz;~&o35NL7PXCf9`+B~i$YQr7x9t!TBOZLd )T7)yS%)bkD32ORZ+qrZf4pK`!$Go^E%yd{b7CXAX##0pG(!>l^NTg zdOepWkag#jkr_ueF5&Y#AOM0|joGf!{Y)DgW7QLeq1SZx_c5Op1Ka+cCoFWVu4CC( zc3GPAX%b06j#_$Mm}{+faX#F#d%k>ND+t-*!tiw2;C01#6+-2JF#m0M_*69wQH$rd zf&*Y<`fbwl (61w$0of}ufGstN)ZF=`~%%Spf z0gRGcJoas~h?c5mhgYQPd*mnB-;L=<6mrQ6;6zyVUpc7%*^d2x0I2``N!O#-+5W*E zvB6t_Xd5Xu{3O)%vvd%gA)<_L_$yc=T^Rk9HrCcCZm+TkOUp^CsfNXrQRw@bP2fUM za(*Tb3S0_MOgx@0ub%Ji>4QJNMPc?Y0% tU7Gi!K2uQ6aUqblNBGK0~Cw=9_g zvw45tKGqCNlmuanUfMA2;g7ZNF9F_x9685^-d&_$p3dBT;z%)+Kj!v_sA?E7{LTlq z+}mj76DQtJge)+Yh{z 0` &g zl1R4VFMj1CAjd-_qjc~jPe6Fv{%V&{`^+zX50AHXCK>RgE?}T2V8gb`vDw)+4<8pG zO(E1Y&! i$_hqL*#q+Ou?16UY$^ee^h0n1L%p5LE?KPq6KKMy;!$ zct$cB;bfC4O4I?`eWC4Zr!G?hkv`=6!!CR~&x#)%Ivgw%Dtk~o9b{yBHJ*6Hj{#|M z)?O7OlNPk#<8P8cml7>%xV5@Ln?-y3W>iy7ye6p&qmL+GvhDO0I*I7wevOLBSY#|A z-IR7+3RH@B5zR>R6jU>$ivHb0vuC6QL2S _?7_F`h? zH`y^eKd?~^uS)kJ@()%WQPFJ}^ZafH@-%VS2^7^LySX;4s(&mRj|rAV(sc;HL&)9! zE&HctV{%v$k#Dkv3m96ofYtAKQ=STkM@J>}aP+~BHF+3GG~DORyiQ!&$reZMh~daV z)voQnsW_h5A6uToBUqv{NL+x2mjP~MF$+VsbP=DfIDB!%po>*tJ1Zk_)I(hWhYwIU zY&z;f d#pMW=n$^&qZWpPvVD~7mPKY{>)a8S3namC<4sR+mti%$ z3fbN9trvVLsLxB)eG-}^1yEz@XGM8J#CQ+;*_pk)<+98EiUgo8lnwGClt8@am~&ao zv}vj~xY=!O_e29ka3jG%;d1<}{DxS^d9<5W+{Qp5)A?GJ{&y*nuHR;-tg>pnSDkF) zs%>GI=YlH`q$<$qm(c(fygLwj+n0X_GT5&BoYhDkw~=No`no`G{Y`$|X91Hd58U1I zHI>vQ<33f-;))Rv|0bOHbMx{#KG)^r{a83ue}cPty%O`|C=p9$2I~h8?mAzd%AFla zQ}l^CI<|+#kLq}SdOMOw4{z1vW(!_=ciRBu{aE)cYhx!bb!z3eB!&*%S_mzA>g;`6 zZpXIG4P%z>bPxNM_BL4idm ni8hmTX9HVdkr2=6xvJ59ySJsJ zMveX%*deuLW}HMXYSAn0r&Y{&fZN(3RL?oz-$^kEpZv87kinBN{@dFdVDbGA&B^~~ zQs@{vSz7)b7i$08-z4_e-^BWFf73e3V6d}ky%!}^MzU#0lu#*2(i+C=wu`93QUq!D z2 h+lA5FD4eiR_SBjTIGm&&MVwZqB`WBujLUf0 Atb;h3 z(-g7mo jaMAS}+7wO3egjoY z0apgH<=wkuYCXJgVFaT;4j);S%9>iWnwH}uKst7qy6loYVg+tRFbAzjbBVIyDkE3k zqz7I65f7#)q*4~oipFPe=W*lhMB+oMd(<%#Bn=}o*KhDoHUcd^2w0jfG&OyOHD$Tr zcRjtt`HQ =P6FVn)`+CK6mUQh5qKGP?mE6hc?)Cn*aicK(o^fHw){0qE zuE3?_ _}JL z%No6A@q~EU5K4}ez|7rVfya>BnjCPwkNjsT{mRUG6vkYRcS)f4D1|gEosI;IDftSz zk_2c69G)BjbyEZQPOuOTwR9b+SIx4kgYaiu#BkRfaKr&Kq>jP6cc^K-+Pu(xadbvw zL4C?=AwH47VVSih0#a%S*3k8BM#8-&U>;PIERXx;h;vWi%x}WnvHl-0-|a799>QE> zpT}I+iFu$}-v&&G@4^rn5@a=@B)agSq`<0^q44(%_akxhyY@}2&aO%@Os6qLzoV{W zZP@QA1mNLb_PVm6%Y-f%G2lZO MzeUv5}cWM#ZY{xb<3t0>D#8W-294fchveJ zP>DG)8KZD0?$8vZX1o@%sAkL=jq|mzWSW&{wYHYO@X<1@H~eQ|oiC(-_y>|k@w8lJ zGlN)5J0QdFsm0VL+sSLgBicdN-WYt6 i&15qlg3rHA*eCV z+BN1 F`CUF zs!=OS3jUxXtYIzLsNbve{r