From f1d6d5e0ffd3fe0321ee8fd9c0928ca16d258fce Mon Sep 17 00:00:00 2001 From: Meera Devi Date: Thu, 11 Jan 2024 16:24:26 +0530 Subject: [PATCH] readme modification --- README.md | 356 ++++++++++++-------------------------- assets/QTArchitecture.png | Bin 0 -> 37724 bytes 2 files changed, 110 insertions(+), 246 deletions(-) create mode 100644 assets/QTArchitecture.png diff --git a/README.md b/README.md index 2f9300b7e..00d645ff5 100644 --- a/README.md +++ b/README.md @@ -1,289 +1,153 @@ - -

- - - - Tracetest Logo - -

-
- ---- +# Quality Trace +Quality Trace is a trace-based testing tool for building integration and end-to-end tests in minutes using your OpenTelemetry traces. Assert against your trace data at every point of a request transaction. -

- Build integration and end-to-end tests in minutes, instead of days, using OpenTelemetry and trace-based testing. -

+## Table of Contents +- [How does QT works?](#How--does-QT-works?) +- [Architecture diagram](#architecture-diagram) +- [How to install and run Quality Trace?](#how-to-install-and-run-Quality-Trace?) +- [What does the test definition file look like?](#what-does-the-test-definition-file-look-like) +- [How to run an automated test?](#how-to-run-an-automated-test?) - -

- - Get Started!  👉  - -

-
- - -

- Docs |  - Tutorials |  - Recipes |  - Examples |  - Discord |  - Blog |  - Website -

-
- -

- - Tracetest is released under the MIT License - - - - - - - - - - - - - - - - - - - PRs welcome! - - - Help us reach 1k stars! - - - Join our Community! - - - Talk to us on Discord! - - - - - Tracetest Twitter - -

+## How does QT works? +Build integration and end-to-end tests in minutes, instead of days, using OpenTelemetry and trace-based testing. -

- Tracetest lets you build integration and end-to-end tests 98% faster with distributed traces. -

+1. Pick an endpoint to test. +2. Run a test, and get the trace. +3. The trace is the blueprint of your system under test. It shows all the steps the system has taken to execute the request. +4. Add assertions on different services, checking return statuses, data, or even execution times of a system. +5. Run the tests. -

- No plumbing, no mocks, no fakes. Test against real data. -

+Once the test is built, it can be run automatically as part of a build process. Every test has a trace attached, allowing you to immediately see what worked, and what did not, reducing the need to reproduce the problem to see the underlying issue.We can able to see the traces in signoz ui. -You can: +## Architecture diagram -- **Assert** against both the **response and trace data** at every point of a request transaction. -- **Assert** on the **timing of trace spans**. - - Eg. A database span executes within `100ms`. -- **Wildcard assertions** across common types of activities. - - Eg. All gRPC return codes should be `0`. - - Eg. All database calls should happen in less than `100ms`. -- **Assert** against **side-effects** in your distributed system. - - Eg. Message queues, async API calls, external APIs, etc. -- **Integrate** with your **existing distributed tracing solution**. -- Define multiple test triggers: - - HTTP requests - - gRPC requests - - Trace IDs - - and many more... -- Save and run tests manually and via CI build jobs. -- Verify and analyze the quality of your OpenTelemetry instrumentation to enforce rules and standards. -- Test long-running processes. - -**Build tests in minutes**. - -- **Visually** - in the Web UI -

- -

- -- **Programmatically** - in YAML - - ```yaml - type: Test - spec: - id: Yg9sN-94g - name: Pokeshop - Import - description: Import a Pokemon - trigger: - type: http - httpRequest: - url: http://demo-api:8081/pokemon/import - method: POST - headers: - - key: Content-Type - value: application/json - body: '{"id":52}' - specs: - - name: 'All Database Spans: Processing time is less than 100ms' - selector: span[tracetest.span.type="database"] - assertions: - - attr:tracetest.span.duration < 100ms - ``` - -# 🔥 Features - -- Works out of the box with your existing OpenTelemetry instrumentation, supporting [numerous trace data stores](https://docs.tracetest.io/configuration/overview/#supported-trace-data-stores), including: - - Jeager - - Grafana Tempo - - OpenSearch - - Elastic - - And, many more... - - Tell us which other trace data stores you want supported! -- Works out of the box by adding Tracetest as an [additional pipeline](https://docs.tracetest.io/getting-started/supported-backends#using-tracetest-without-a-backend) via your OpenTelemetry Collector config. -- Supporting multiple ways of creating a test, including HTTP, GRPC and Postman Collections. -- Visualize the changes you are making to your trace as you develop, enabling Observability-Driven Development. -- [Add assertions](https://docs.tracetest.io/using-tracetest/adding-assertions) based on response data from the trigger request and all trace data contained in the spans of your distributed trace. -- Specify which spans to check in assertions via the [selector language](https://docs.tracetest.io/concepts/selectors). -- Define checks against the attributes in these spans, including properties, return status, or timing. -- Create tests visually in the Tracetest Web UI or programatically via [YAML-based test definition files](https://docs.tracetest.io/cli/test-definition-file). -- Use test definition files and the Tracetest CLI to [enable Gitops flows and CI/CD automation](https://docs.tracetest.io/ci-cd-automation/overview). -- [Tracetest CLI](https://docs.tracetest.io/cli/cli-installation-reference) allows importing & exporting tests, running tests, and more. -- [Version tests](https://docs.tracetest.io/concepts/versioning/) as the definition of the test is altered. -- The [guided install](https://docs.tracetest.io/getting-started/installation) can include [an example "Pokeshop" microservice](https://docs.tracetest.io/live-examples/pokeshop/overview) that is instrumented with OpenTelemetry to use as an example application under test. -- Create [environment variables](https://docs.tracetest.io/concepts/environments) to assert the same behavior across multiple environments (dev, staging, and production, for example) -- Create [test outputs](https://docs.tracetest.io/web-ui/creating-test-outputs/) by defining a variable based on the information contained in a particular span's attributes. -- Run [ad-hoc tests](https://docs.tracetest.io/concepts/ad-hoc-testing) by using undefined variables to enable supplying variables at runtime. -- Define [test suites/transactions](https://docs.tracetest.io/concepts/transactions) to chain tests together and use variables obtained from a test in a subsequent test. These variables can also be loaded from the environment. -- Run comprehensive [trace analysis and validation](https://docs.tracetest.io/analyzer/concepts) to adhere to OpenTelemetry rules and standards. -- Configure [test runner](https://docs.tracetest.io/configuration/test-runner) behavior with required gates used when executing your tests to determine whether to mark the test as passed or failed. - -# 🚀 Getting Started +![Arch. Diagram](assets/QTArchitecture.png) -

- - -

- Click on the image or this link to watch the "Tracetest Intro Video" video (< 2 minutes) -

- -

+## How to install and run Quality Trace? -## 1️⃣ Install the Tracetest CLI +#### Prerequisites +* A Kubernetes cluster +* Helm binary +* Application instrumented by open telemetry + +#### Prepare Namespace + +This command will create a new **namespace** for your cluster. ```bash -curl -L https://raw.githubusercontent.com/kubeshop/tracetest/main/install-cli.sh | bash -s +kubectl create namespace quality-trace ``` -> [:gear: Read the CLI installation docs for more options and instructions.](https://docs.tracetest.io/getting-started/installation#install-the-tracetest-cli) - -## 2️⃣ Install the Tracetest Server +` +### Install the Quality Trace CLI +Download the cli from quality-trace repository according to the operating system. +Use this command for Unix-like operating systems (including Linux and macOS) to change the permissions of a file and make it executable. ```bash -tracetest server install +chmod +x your-executable-file ``` -This command will launch an install wizard that automatically installs Tracetest and a [sample Pokeshop Demo app](https://docs.tracetest.io/live-examples/pokeshop/overview) into either Docker or Kubernetes based on your selection. +### Install the Quality Trace Server -Or, install Tracetest with Helm. The Tracetest Helm charts are located [here](https://github.com/kubeshop/helm-charts/tree/main/charts/tracetest). +` + +Install QT with Helm. The QT Helm charts are located ```bash -helm install tracetest kubeshop/tracetest --namespace=tracetest --create-namespace +helm repo add quality-trace https://intelops.github.io/quality-trace +helm repo update + +helm install quality-trace quality-trace/quality-trace ``` -> [:gear: Read the Server installation docs for more options and instructions.](https://docs.tracetest.io/getting-started/installation#install-the-tracetest-server) +### How to configure the server url -## 3️⃣ Open Tracetest +```bash +quality-trace configure +``` +Enter the server url: [Please enter the server url] + +

+ Qualitytrace lets you build integration and end-to-end tests 98% faster with distributed traces. +

-Once you've installed Tracetest Server, access the Tracetest Web UI on `http://localhost:11633`. +

+ No plumbing, no mocks, no fakes. Test against real data. +

-Check out the [Opening Tracetest guide](https://docs.tracetest.io/getting-started/open) to start creating and running tests! +**Build tests in minutes** -# 🤔 How does Tracetest work? +We should use yaml file for testing the http and grpc applications from the cli. +## What does the test definition file look like? -1. Pick an endpoint to test. -2. Run a test, and get the trace. -3. The trace is the blueprint of your system under test. It shows all the steps the system has taken to execute the request. -4. Use this blueprint to define assertions in the Tracetest Web UI. -5. Add assertions on different services, checking return statuses, data, or even execution times of a system. -6. Run the tests. +The Quality Trace [test definition files] are written in a simple YAML format. You can write them directly. Here is an example of a test which: -Once the test is built, it can be run automatically as part of a build process. Every test has a trace attached, allowing you to immediately see what worked, and what did not, reducing the need to reproduce the problem to see the underlying issue. +- Executes `POST` against the endpoint. +- Verifies that the HTTP blocks return a `201` status code. -# 📂 What does the test definition file look like? +```yaml +type: Test +spec: +id: tA_Of67IR +name: name of the application +trigger: +type: http +httpRequest: +method: Method you need to test like GET,POST etc +url: [Endpoint of your application] +body: [body {"The request body of your application"}] +headers: +- key: Content-Type +value: application/json +specs: +- selector: span[Qualitytrace.span.type="http"] +name: "All HTTP Spans: Status code is 201" +assertions: +- attr:http.status_code = 201 +``` -The Tracetest [test definition files](https://docs.tracetest.io/cli/test-definition-file) are written in a simple YAML format. You can write them directly or build them graphically via the UI. Here is an example of a test which: +Save a test definition file for http application. Use the CLI to run a test. -- Executes `POST` against the `pokemon/import` endpoint. -- Verifies that the HTTP blocks return a `200` status code. -- Verifies all database calls execute in less than `50ms`. +For grpc applications please add the protobuf file in the definition file. ```yaml type: Test spec: - id: 5dd03dda-fad2-49f0-b9d9-5143b746c1d0 - name: DEMO Pokemon - Import - Import a Pokemon - description: "Import a pokemon" - - # Configure how tracetest triggers the operation on your application - # triggers can be http, grpc, etc + id: xZIRCuIIZ + name: name of the application trigger: - type: http - httpRequest: - method: POST - url: http://demo-pokemon-api.demo.svc.cluster.local/pokemon/import - headers: - - key: Content-Type - value: application/json - body: '{"id":52}' - - # Definition of the test specs which is a combination of a selector - # and an assertion - specs: - # the selector defines which spans will be targeted by the assertions - selector: span[tracetest.span.type = "http"] - # the assertions define the checks to be run. In this case, all - # http spans will be checked for a status code = 200 - - assertions: - - http.status_code = 200 - # this next test ensures all the database spans execute in less - # than 50 ms - selector: span[tracetest.span.type = "database"] - - assertions: - - tracetest.span.duration < "50ms" + type: grpc + grpc: + protobufFile: | + [your application protobuf file] +address: Endpoint to your appplicaion +method: [Method you need to test] +request: [The request body of your application] +auth: {} ``` -# 🤖 How to run an automated test?. - -Save a test definition file above as `pokeshop_import.yaml`. Use the CLI to run a test. +## How to run an automated test? ```bash -tracetest run test --file /path/to/pokeshop_import.yaml +quality-trace run test --file /path/to/name.yaml ``` -Check out the [CI/CD docs](https://docs.tracetest.io/ci-cd-automation/overview) to learn more about test automation. - -# Tests - -We strive to produce quality code and improve Tracetest rapidly and safely. Therefore, we have a full suite of both front-end and back-end tests. Cypress tests are running against the front-end code and (surprise, surprise) Tracetest against the back-end code. You can see the [test runs here](https://github.com/kubeshop/tracetest/actions/workflows/pull-request.yaml), and a blog post describing our [testing pipelines here](https://tracetest.io/blog/50-faster-ci-pipelines-with-github-actions). - -# 🎤 Feedback - -Have an idea to improve Tracetest? - You can: -- [Create an issue here](https://github.com/kubeshop/tracetest/issues/new/choose)! -- Join our [Discord](https://discord.gg/eBvEQRVyKX), and ask us any questions there. -- Follow us on [Twitter at @tracetest_io](https://twitter.com/tracetest_io) for updates. -- Give us a ⭐️ on Github if you like what we're doing! - -# 🌱 Contributing & Community - -Whether it's big or small, we love contributions. - -Not sure where to get started? You can : - -- Visit our [Community Page](https://tracetest.io/community). -- See our contributing guidelines [here](./CONTRIBUTING.md). +- **Assert** against both the **response and trace data** at every point of a request transaction. +- **Assert** on the **timing of trace spans**. + - Eg. A database span executes within `100ms`. +- **Wildcard assertions** across common types of activities. + - Eg. All gRPC return codes should be `0`. + - Eg. All database calls should happen in less than `100ms`. +- **Assert** against **side-effects** in your distributed system. + - Eg. Message queues, async API calls, external APIs, etc. +- **Integrate** with your **existing distributed tracing solution**. +- Define multiple test triggers: + - HTTP requests + - gRPC requests + - Trace IDs + - and many more... +- Save and run tests manually. +- Verify and analyze the quality of your OpenTelemetry instrumentation to enforce rules and standards. +- Test long-running processes. \ No newline at end of file diff --git a/assets/QTArchitecture.png b/assets/QTArchitecture.png new file mode 100644 index 0000000000000000000000000000000000000000..c11992dd8a31f915e81e9241e07bd6e0084a099e GIT binary patch literal 37724 zcmZ5{by$<_`#ua9qel;rP60{jNr&_Zk&;Ffkd7fa7%;lKQ4lFX1%@D9k`^T>4Jrx) zr0e&n@Aq@O@9#MF4`a{s-1l`|=Xu3>KXC{HEecX*Qan673hkTf#&~!H0(f}%ZV)i= zjr@~3W;{F&JZ*IqQ>4w0BH|g^{)^_p0AT?;l^^kTo)~i|ePgM)vIgA`B02>D!74if zQ#vy9h6oBocMQ=Q1fs*J-rzvgco>hQJ0HKXp%k)`?!+II(XM@vw>g}3s4v~7aM&Ca z_8|NCv~#Q~E&_u2_eYroYOV>YAWV)7P$5)T{@16ACRO=e90!Q&-yehoArC@l9dS?V zKfhH5zV)O0&y6D>ndJB+ndx$LpQx#!`2YTp&=nE<=dK(eUNvPDwC#Yt%KF9l!QR*Hnb2_7t?jQHPn&-}OIXmDUQtZwIPG*)_%^k2 zz&ZKK&Y1)0J!=g^T>b3KUY>T^jyn}qN*x&6}oGd6Mm46sLzH~VmxAl~M z;yf?^t-wvV;M=9?+S zlD-B@Z`|^~CWJD+v)Xj$k7ZEt9Ae=YA(D;*eQW_Fzqx9l+YmFdYbKf8aFijviPgFEp?fQbsx`Oh zrrj)dCH*_Ic2kPC^&?f`4`FvdJ*nzS+)Y#nc(soX zC(H!1x(Yly?pNyNISeGTy4i%E`|p)po(-NIZEMl` zAzazBkW$>`rm zq>Jy0We>YoX;9>vB-Xz2;Hk-zWT_t9=Q#f2dj|5~c-$hcI%Ozd<+)R5^#>WHKS((A zJYId{V`*+$ju*;LW>v^vNmdw-(fk8#WnNn3Mp0lbVrjpJOf>ge%lv!XtdSP0b3f@N zW4U%IU1ast)jyC%91ueJrftJt?`PXxgP;C*p}#p*H_~DI{SVw$RU^b2IMrfuiP=Nm z*1i~*Ur!M25DWg35qXcO==E=%>Hs?G$n}U!n^F9f)o}K5_?H(;4;1*>c+>6 zMKziv^W~mplj|*#JI3t4Z(LeRXcPQXO30uJI`!Onq#XuaN&0Z;rO#jJ`EWJ>Se}U+ zkD+4ske>JI^_hL}^T}`Lm@1(96BrACV9XPD9GD@EO;Nf)W*umQDs+y1IsUy`hvRKW zXs}h@-KkoOthcQDe^|6Sy6gOK!SiH)(?!iG_}AC8J;j@)tBD3mbpN+lwD11*!UFtw zH6!4_N$T&d=1CT{gT6m~Qj6eR70Tg5rISgWYyR~*7euc_@$=N4(%z`#meI8-D*2s+pwtcZ-!a3Vlb{a%??@ z_C_j!N2%$K#Q*as)P&;c==BGmKE?#z3HkNKIKQzBhbx1GMe%dL6ZN7Q_F{ecLv)Dd^&Oqwdx- z|IMkax4eJ-q?6r6Av161@p|8EZ-B)!_txz@Quma25s_l|IsebS4fo!0Sv9%+Y?_vS z2CVgeA(_sH0~mTnu2Q5Or|LUp;X?GYhENB}ca7)&wq_G{?EK+%aNvu>FTn*iuOHr0 z&G|_D`?dl>pwsQn&Zoe}yx!OYNmA+YCzZd?3!%1~I(kwP_Ng%Z;&}b78r9geYZKew z|B(~oiWAvxd>YM@) zWuWm?7)6tClk9JnHwB>ps`~V{KJ@VOG~$h}{@*x75;9-EXGgncsC52oCP}BXkL&$E z1w@vz9YBWb@3h#Z7_Gff_b01w{m+!oIp5Y=NJiacx_%GwLs9oXSK*C(t}=Qw3Yglx zdCsHle|vLQ!|Q$96HOMS>duQ8UT<*K`kPj&RU;ZAcUA@qT75UnoTX0c{zeBSp?tuP zdqWyb0QvrS#*1*EzW)b`P!s^*N`02SF`0#25?Ve})xdvzBm{CP32iRYXHzq>&QOly ze!Trp-iquBJN@bM{o_+dwufKK;=iWIbN=4rntB8mujJiPF@V5~e|Y?N7j^(COOF-E z$b_CA)SHc&p-9J(gXI19Jd)naeKY6T%5fTxiT;lZyQJsb9mnN1u6zJ2t@Abc zuTPydN?j(3*P|J2#7rvn;y!!+*PnKDW({k<-Y#5#0;a(&jNM9Soe zLDJ{vs_p-FuyXoYsY;Y-e+>;~t@0{+m>-n{RGc4_A4v=5Yj>5>lJwcMYee}1w* z24qeL%NCD2sSoZ|{H;~Lkyv~8)8GB|^<6%(27lb22S-4Z7lCby0fkH}r}hiLxshCd z(eDJxuWB6XYLfd4-S>RIX{1+g_j6m|@9ZV;vuN_m?^;}$hz9%P`N$}Mu+h~w8IHkE zuKWw1^CV{{o6jokdt=rMeaFQ&ii15`1GP>?e?P-nYcX9{M0{m1B}e&c8}}1dhCcx< z06~?6oxI6rR0P~w$EfiSFtLQ#LxWr~6;K6srs<#9Fy_SpS*qZ3;KFAhHUW-i>r8{(rGQT-?>N5atHdcA_83HOPDc(#Q%8|M>U8GN3zc0ZqIy{04=v zwoMv=M$F4UnE|8RN_+IZ=Gl)k{K862bLIu#BSAODuVAFZ#^P}V6 zuvs%$+?!C6A!hYUty`6H8cOxqPCl^x9TLOIT|pZ~E_cWBooya|tC$JR`4@7Ai@E>; zb>+VYq;iTeT0^+e*5`K@zdfuxOI;ejTqx)3ULNuvOauD@DnIvR`R@Y1i&uq=#($EE zH%X!Q0MmL=;1_XG0IL5DZ6AKzQY?Eut$}QJ05^}yi}}-^A>smQ-FL8byeA*q}I8G~?x_*>V%Sn22WI@=j!;TxlP`d9#EJn#6Z?r-C1N`Swi za{TpC%4mDgUbQ{dOYPrgxhakMUBiX|>s$w_{}du4F_dcIwvJGp6VR?Po%)QOZ-=v; z{{Sj;o87jr+m6AeNn{NR;ph7~$3TSqblX|(*ZpF$zp%}}(6)eU^PjR96b7oy$r+Xh zmcQdgFgAi#U^G@0GY#0>R<6jzP`y-@#Ot#S(6+1t@!zyk6GbUMWDUd;)3b$MN`=w+ zfVl_j06JuVO!l&MDTd{F`QDV3=d9RcAmJUdcj_JnnF&4X=>b}knxNG*ty+GpAkYc~ zNCNy*H!SFL@!<5}=NNFYQ*r3Q?2P}aMrr%W_Zn&L@Zrp>F&S}!SMvz9t6w`b82Cm7 zT!tUEh&q{PU*_Bim<`7;wRk8V9&%1fAK%yv*bJOY>1cB<-+s4Nt~$C9_UZw4;V9IP z{OFuisMbz;)`|8{dEq;8W4gBalWQaKt$#A~S;p@@3tR#OQb2#(+6V*KK_?fFz=!Y+ z@TdKtG8v=DbpWwaR-Uh$>@|1&>Z(CRM!oJE5YEnulfoTl%{2!Y90yNz8V@tAxb;NY z{<(GXisS^Gb}qV*Xc*{e+}XmP^KyLQY@lxL=cDkKxJsyyKG!>;XYCG9)I!*4 z-C8hEKjuqKnR6d3y8e^fFR8si(MKEKK0GO4mU4yYQxvGr>6llZ-lQ9Yw;uOIF|-ykONySPg(>$7@O(yj|n zf#JsP5I2P!&CgFwl1i6nFTQ(xl{ z3oDP-iq`Xkxv^njn;%am6t>}Nx!?L3ZQZ|;IXWK{R52Z_p@`WU=Dq->iu=M@jDX_> zlx8e1?Yulev5j(@wJ-D@X(m0N)w)(dfS(@!@Nnw^#7Oq?Z11ObIp3eO2sP{? zp(DQmn{l12roZIAMy(!^N&(gp8)%4u+Cw$_uY;{R&kqXd8D7f!e>Z=()CVq)%t_!{ z^mIWd#vmO>S0uj_l})^sobeklcB$p*8;qj|XY7BUd=Vv>d|q8s?`jLVb#VXn{*>hA zv(AptoleVrTDwHwMHI26s7^J|{ON8QanfyWwQWnkxI6Z|heHq{(z;61mORK7Jo>TD zYMOFgjyUz=a?2R*AD%!%;m;D;zZeEI zRySKO#)}l@Q0Mr>R~pna8$1=Zu#fcFY<S8hHza}&mqI@QA-Jab$2b>}4*}fA~ zhmgJh{&6_cC%5T5RgF?SmhE9x>sq#zUT+MAKCrY=pc`=yYP$EXC%*J&%fgr1rYXzy zWQ8rU-dL)ZX`%UV6F^?Ge?~DCWv+stV3O#Impkw*c+mXjyZZePl}WD|IR=(3%|L5F zo6$lH-H#Hp*Bq*HNSG__cqWf>t8X0;^fwU6eD+V4y9+WXwR=zjR*J%F8YOIy=DwaQ z15Oa{CxWuV1gUw+ouJGZJn(&_pqYg;y#mgqFe2BE0~5_?2(}^TCvTXMFY7uahf-6w zx1EjLGnd)yd(V29EWq_X;sM9a8JVemMOx{;ga=#(Gi;}twiYs-{iGd031QXv9EkQ$ zhd>ARmQpt8s?tl@+v7myc@V8(T8b4Y;M32~owf-cW21s!OEh#DFKo?JwvYHyq09K< zbHLmztBdeR5atOw7@v)fdDHn05PGCE0vKvEe$qWoa(2uzVAG+8_hbzpZMt}khe0WN z<>EL>;6cypgfRl$5vt*{8&%Z(i~_<@j8Sg!F@Y<^!CQ@>o~GZWrAidoLL8rkP(JA% zzdCH1h>fM5cq)nUiQ`~$08_gbhAK?beMU^^rJepqIvZ|v&eNYyq|t@+wXvuD8HS2X zZAdc^(XIIE)gHqq_Z(ZQh;~&YGKy)xJgyL_q4JWw9uhzM<6{{@FxxRu zSq;Qn4{=rITah;bHQO>B{`y4qWr;I6wKEfL@z{}29!lJAR70?Bh=k@$|ttA zMLW;l^J(uXMOmOJxxj1?>mCdYA|cyno^WsW-lHTP3YFPyDo6dJQ%;-0M@Yq?;Jc|Q z(}YIdJH7W3ZgYQEkvsYNXzcf}VzB-?zZXpF^{@B3(&`BVa#1(=t_b%<^#o14BDw65 zR1PE33~q;#FSf>%Z*IUHlrjg%c<;Ce$A!B$4UeJ0HPT%qCH}` zm$?RM%p4lN{ra#LVvnZ=y9gd97LQ$2mYad>>-_d-z6Uh>p>}r6_ zX!xWMLoPxsg2}#dIR8P+E)!D!i9Y5w$WeAl59icnNJ)H5w`vQGQOD4b{E8x`Y7XKc zfBy&+jo<#$a-dX>&=9|&)LzA+&0}#4xTYZ z;0+lh zrJHZcvFQh-E2CRBGS!O&wn@O%g zLPNsMo?bNrvYzY^YC@VaOg(2dlMD5y7(9phm>qm?e_&!Qn&pGq=&K`0VV{Q$KA{m< z?MqcpfuJPc$WZ;b zSBb7#DT1kIl5~S`?Qya6152}-1X=-e-iHT2?%%0vC8Y~z_1M6$n(29&#p;kHC@(`~ zQ9ZqkBc<%}M&n{I0csl6OoAvUA7w26dqd$dIAg$!J+aVDTyhnCEZ)>5FmSPWbY+l; ziX5y=jv}{XsFZs5_2~a zN$EVwvHOK$U0_n01vomzRI}yqpq*Sh;lZ6Q6d{fKQm5lPV$5tlg`!LlNQY zg152iZyqhF3`<|_jFpN~{5`{)8eX#WW94}zzC`wC{6~g^fhFIojqnsc_OX~2ORm|XVUWXHlH+u_{Nby*roZNEytRDu~-=IOALG9q$ zyGqf7%a*Civq1UsqfZvw{ZS_cPdo9(UEmL zPc&h2yXfha(~3|Alpo;`OOMxB5c_l_At{3kIPPPB8Q{_L)5Df1zh!RU`(c!%o&5Ew z<{GX(K)~|&QX3{r<1P0?;1ofVT;z=yh zQ6$U#A4urnG9sFpq>O0!#b^~f>T=Cx=19U6QVRSS9B1CBJ}kxsT85q}_W@7JLMY(IJ>5Psxp&rHcWzI>}L#CiWzYQg&~XoUi3DQ0(kZFOkvF zi0qUbeM2>X;50mu)W*trib}-1>ZMqoAbteoo$4JE#nhPFXmz#lfepVPVGJkRd?tHe z{!L1XTQ^`BFBM#QnpnJB+HR0Xj5!;)Pkp(rOr9(X1Q+Is$#R3;6xl$9af7n-fTB}y z)hk?J@=f$ri{XnU3qJB}I8C4@_hYlVT@t(Ny;cJ+p!V^(eAn}b@T8~(TtKUOCbA%I zAL|5q0dkr*7lZQKw`nm}jUA$F_;6S7QPa_vBrd&m$)!snE)iW$I;Pqtv;dOAK_c44I1st0>F(8v7>*@H z4Xg;mUh{*wPjA*frt3$uEWJE>EFC2IDae6>4Y9slz`(N|MN^^T&_*WW3PONa6{|2sAPVPsM!+ z-=T*u{Tqoz6agsO$t1h%W!d)YHzf68z-$~rLx{B%zm4a8K{w8UZlYs8^ho5@qr}+9 zoKk1Jei|2H7!h}lG4-OQO&8U^c$yE%q{SbwgxL-GC%ZL*h-zph9elj)#(v`i$|cU*n97Q`e07xfZj|g9e8p!I+@eL!U@`^?qKQYspMD8%*3uZ+h{6Nm8L4Xf z_Lyj=KN}acLHkfw>f95uaXIKOIhSJ(ost(U!Fxx6p;ZNG%U7OM2!TzGUsJriZ}5L- z0d7-`WGUMak@`=s-=se2@e6m=CTzTlD3eAI9x@@noV6xDMhqqR8x zbM9v3ysRp=%2FUjyD>$1?SUsS6_s{Mo7Y|MEK~0QTqX$2glGpG%v0PN+2{Sk@j?s4*r)rI3dw?EG-HVcmw!APcu)l)bcBJO!qX?#0k^6~y_`O3FGQ$Zy+M9aEMQ4jIs!v)Y|9PM{nFGK1( z-%t1NxdQ6S6gHMR#cfjNdn*KVIlEr$*$#}CMH9oeJP(C+`>E7Qf_LB>p2baDk{1D@ z#ht(r0(ijoh2*Ep(a>?<&zFS{-mxE~1$I1oes#ifDbD`%_HY zTw{8>Ds1DGjXLCuX?5_f_4;fAp1tyf!UTi)D*?POML1kEL8mWQ#9@^kjwo7GA_UbV zQM-`hio0}a+X`=C-wJo3^DFPwxQPw*zdQxzJrKFZo;FF>(2+5SB?ai4Jjn}ppq$or^H^_31$Ig{Sko%? zVtZ*kM-(N^$Gps}<9t}I*taEMbnBkvbv(Ml{Wwua*F6V~1hU0-{Hao4pMk~(# zz_L^0p?zEb$y*1CU0sDbP1cX}XvPS~M9^{{4(^Osjtu%;w!sZH?t61iUbKk{Scma% zhgCI^wFKBte)}@3bugXs7_%NO@r6UDN5klGz62rnRU=t-FDOHTOx(GBXD-J9a3*0~ zH`xT>hKjD-6;R9V`H#QI`*IQAfk8qe!}&e6Bzq!WKi(X)1s|6a_>QUq61!T1pZHkg zOCBVyRViQkLH@HzMyH~S@y1R%al6t=vrt0lUZ%)8y#Hjo_9c0$_kD-xMXzF!OLkPU_z&Ywc}mR#VvjTW{p43<73k;ooN^I)zLUy7%%{JFQ!c*mfTCR3+4L( z73G}}55K6e9^$|tlNZ0HyUM9mxScuCOWUKK)_#4@m(q^xh_?0)&sA=oMyR(a=XSKC z)(>ftkb1fY_+4>ceV*%GV$)$ncb{%w^pm|U?a`cike?J_k@7F z(MTc|B)%5g`b=CAA$j-Y*SCOl-K}G!Ay#v8nFLqZhnav~0w}CEzOdO_AA8VuQ;=WN z&(ML0bSDU1DF$JY^Kq(G{x;M2NWa;>+2pb^8Ou>z*sUT0BDzh>mJ3Y27X(Fh@+FLn z6!S$9yN!zN3TiRrjY|am_X=e*>-#Kg&CEforyRvzy4%To8A^Ra88egIda|1BJby+dIW40Gm^5@4vn0NC}NU zfR2xPKbByb=+ukh0DrHgjp7`L1r8WwkMa~nub*@gP{CBYn8JZ0LiW*LthJw&cnjY; z7kJy_-;FiArT{8Z2y71WlZE(5E%z3Ejc$izvUs+?d-b|?Xhm3M9!f31!|D*X8;EyX zrf6k7Lb>~=e&OQ+I}D55mULK-AUN0GL?dzgskzkMQJCB7O6t8>fn_e9@ti*Xbf@Ez zlSS)NQ?haoSu>L^pFQ6>1IFckf~53N@-uC-yQjZplFxjny;1l}1Ik$mm+y5&o3b3B z2Ij7fmE1#T4dNn{a5iDBDtz&sj}n8CBYnEq_YKHY^EU*sp{wA+r$%YugatGS?Q?}W zosj$KWpNbGwqh0^3zC8g`uxYQ5gv^zY+HYBtNh6rfwx3$K8+pp8jaiLt^Ebal3D$A zc;)m#%AFnp+r4v#34xB7R?l56o;-g{K2^O7k z2XU9T$WcSJW3P$pwp#KiRa>MD7XrDFmn@aD;a>Uv)iI3##DLJCm8l#S&fz3y zm_85FwGZiuoRBrWCIgy39g2O|P zxUSK}MTnn$W!+e%bdhLjV5zc=zc~rEPA!HU*nGRTS> zFjNnP(znUgu#~4ejyLvH*JlfZ)M6={B8h6QMKTeP6VNy9a&`H)1M}QZf^sll0pqj> zE5$!mlc?e37eU}u|t-5ic#~DL2TKUD;A?SZhY9!Fet^1 zuFh^zi3A-uz(#op_jnOvstyemi<;KHlUY7*nv$#nn-^%~N6m>1APPO^J0JzJ zQH811%4LfZGEA{dKm7I8{+bx1+!RD4M0Jbxw{Uuc=Vgv<*zBv#Ada`hebhSXyB!cJ zaKn7xdlI@n%Jat);|~YNG76-k*kQhV&IMZoG0;aTd3#$TYL|Ag)SK5qY`F&s zM43n|Ay`%Ear)Xdh;L6Y7Hm9*4^TZvS-~d$QXD@?j=-LP81-#GiT>2{#ihQW(ctQs z+$SZ4D|F9GU+#zxUU7U~$Vsn%wmbw1+Y$EMQqeTJ27>sU&BGTNs8>d==tW z|3IB~K(k}RV$9!=yC(vKPj{!xmH(Uz1@j>12uk+-vX{6LruPVncgRDI3De!TD$awC zV6G^;BbXotKM2aBUD)mYz7dihDjg7e-mTWO!Qb?MN0O){%LaTIL+s-&XOpO4E)&;< zd?SWw?8HzX**$bU zV1B+P6CZ(*heM#fjrCdIssuI=6pb${W9q?$wq7E#JAW!nIj?7;U)>*3(p^IY|@@q&=h-jYWsV}E0}Gaetq?UWZ`Y- zP(Z6}8SC?oROb*jk7MkECytrPbp=AGZE-B8x!84j%hHA$<8nT1LE}qHj-?a6y^I2d zPuj)4bK)U)MwPGFp*cJ0w#A&YsX5`EPrU{?ii59>NWKk>ww)2t6yIVrRqs9d$sE(^ z*SUW~VBQLOKqEgEQGzdVc)h2&D zX#ewM{v?+hbA6Eb!?@6%q3;9Y@Zdt?=u_`k7v2kego(i}S3kGlD#c@Py{<4Bdv|;C zzSj7!eVG28^|K}Gs|S4(7{viI^i7ErT}9@!tFRPtS)Zg#D~ydIY&Dn_CXO{=dU1CS zyDq-&r9aSA3Ka#5^}QVE7drtFjgTrtZf4<2^MiNhJCwccZB_$u@s{@U<9op#0`ol9 zzPzzadOkb$cQ)3wdnA%r=&~8Wrx8x4Vd+XTT&ly^yb55t^hQF~DPoldhs|ZW;uzFh zF%h>-6YaI<+e@)i>Lpp)dHrI&8%0dSIlz&*|B8VN0TJz;L%ad?E2U|_U*^;N%0Wf% zaTh{H7kZ2Niku-53w1DKP1+;d<|yvEw?(}nRI(?wwv?tX9-{{$5~W{Cw`RXkqpvC3 z``WKhn&*k?IgeV&*Hxj|y4_z@9D@S6@z@xFF)#IKcPg0aPD?77-L=9qeqO%wow*GC zwe1&muGhIUUE=Y!#G~ZS*rngJ#ZbTsI_C0*Ccp5IwWE1UWA+D$I_?kRj-l`c7l%07Zc5>kP{ z%*7g8dD<7mOK;&%8eTb?ujIuFU>;t_^;Di-1Iv;>1XSG@6AunXKKq)t&@w$GB-NyA z*Le4HC&UGpB)fR@N*o{`J5tHCsIx4&{8%HdWZaiOj8elN)XVWa^T|!GawUiZ$Oe zsR~Vg#cobA&Xk=#TFd5J>}iJu#;BVgx!I9NK`5`jW)nid+My1S#y;BLzES3iBFw>L zgw=%wtem&zp+KcP$283n#cm4Mj(#_w9leHL4fMDOTjA?Uic_HjMU$nT_eVz4xODEM z+byXBhiaDjdI_QnB&O)6(sW9_OnRRKM>W@!?WCMv&m)-N&nM>bTE8A&0*8PbxS~!NmCOl-8$$ldkf)4tfW!KJd&EP6++h>*Cs7O_>4yMdOL}^r5D8>bjjRD(a9?E zQxP}$^_myIIQl6ebq-=_)#ii@H|sSBEndP1s0_gT$UF>%hMgnHV}P%$31IkGoAZH) zSbvAcRrr9zaL@<=I!GO7CoX`gS9)~~>?FgL%6C_!BbU6)r*JQ^T$xgw;=WKwK`frfkV)*BUzTf2qCP8JqwgFi#) zdbC;%fncgt<^O|zo>O>c*8&YM7Pv1*O_~!&uO&qmD=tSH-`sN`p z0Vh`@R8J|ofR_tDjhbGdmW&FY5gK)Dn#986U2QFFR3jjxa6mGFF9S7j0N0x58=V4f zhmwDXb@`&~udeeA+C|cqWCKIZ1~G8RuY_){R<8LF7}onmUrk>rj0&>kh7qW(#wJ?G zFyM)J*p_JpMWeeE-%pUFqdyHvO z#08;I^oNeaDctkePA^fl%*svnL|y$-FHe^%0}*1=kCEV`+St83w}@a7NA_YSh+naI z^gY}la^yu+aHxnT(Kx|4@j%SC`f1f4!4=PFA3>&Vo8`KL=mq8%VPayr0_fmG7EqMm z?GBlosP8_A2E`}Lg8ZBG@lE7MqVvhO* zI_Y2BM?weQS(V>O#SxK4g@N@j_xV?;t;hwS?*WI}z`-0ye3F)%(>UwJ=wCv|J8$`I zV?qu15lAE_-J6M0adTxP?rpc=V23!wCkdY*N(p?sLm8OQ+a;n%l1`~Lslb%vsg2MV z^{H}#yP@vlVPbaOn2bJ65ssc0A2;ZgbG?dux9t29+%O?q+^{aFjQKe>R%|B44f%qp zmZsTs$f8`$fs5jSV8yLi z2<4VD%oC#Fvd~btvZkNIGZ9KG-n)(Mw7as}(fevvw2$pH5$FA87ly$}Q%hu4hgS$7 zWNoP<3KLq%aVABZ>QBVjR)g?F$JKmtaAx*}W2XMsw?4&%rIh7}a~)c=JE$i*eSjK5 zZYMr;J?8Fe94OG_QIk$u5L+M8r6kQ37lt5-RKGLCZdDan5$RIc#JIb@*J?@g12hBD zgi=0N>ysZVoJktVf$hTcvOC4CuAW{RqU z6l!{uZ-2>lE)_MEZGvO)@L9}>t1-On8RbB zjZe&-8)Q_12!nNyNQg7H_@q=b${B3G7L0)XXr#!o0`UtsxEJ6{fTH_eS7#@W9bg?p zot2rNuuea3rS3XOIW+_E7P4<#7jK&HdwQJ00+c#Y_b*(OjaZjdf8mLemhr3xaHtEg z#s@|~$-waO-9<*nF8NVq43q#ZyJUhPYj;E625JjTAR+Y>boogTzi=ehxleS767GbY zv8U*bPHDj#xuS`$iUqo5LgF$yWEeCO?Zl}kdz(Z?#cN4_sZwJf*2h>*M0N#4{B8_~~b z2;!Q{8tzj@1xn35p3nzI6_KPRFDn!mjB?dW@lOd5CeyOdM;VqNlK zB;QWRO4%V99G%W56#><#uk-T_ZuRF(L}qLDLe*L-){JR~r1}yX!J5}P1wG{l0DVSP z!TR|%8H=X(+z}cm9FGn@jSubZ4#|3A?+S%Som6)eUs>O@nAEEZ>;+y^vw0S|LEQy7Se?y&<0ZR3}mP)J6~0b3px^+^cnVUBcqlyp*}Y zf+GcYcqt<8`LRQH7bcX~7UdSXf^p8;6Q08!xF3-0#5AS4F&Y3G#!V2iBTmmAYW{hd z=ay2?fZfX;sFp133$$J>(G-&Ww(uIcKdc(U*khhqZ?C*$LC^0*8l)%a{TUXFv~lbk zt=t*qd6Lj*_D3iVz&83wWLiGh#*Xu@1;ee-pX`9s#U>LevkP9E^RTi&LfGvt?^moGov%sy-xSupp;XgPO{l}0B-n_DZQ=YnjZ1PWgewoY zf22W01wSvH#}_Q{+n#s(V#EgXbvYq`XhDd-Ww^?}3$NK~=y`kL{eYtyLfp%e9GhWn zH+jE_sf@MqQ>?-q(YZ5|U9%nWo&t-L99J z>4F#_u+b;nRf*W`T&3A{=hn*!HkFemH9_E_t25~?RP3NW`hcX9>gOD}14|=AF%C=+ z_36gXELo&P7>!Wjt3uwiJ?`Oj;4T2>^zUdm(}){E(X=rn`3-E9)q5hSGwdo9os-8l*BmFH|&DZn&WtDhK;J}?mFGHQq(uKA`m9+ z;q!yIA1l$lZpsGM@0kZw2cDP`M-hV|jFg%%-f8;Fj7nt>Qd*DdwOG6fLo~++EAb&MeG@NBw!sVC8$HdjI-00Cbj5Ss&h<_12KZ0y_ z^j^QvC?gh>r*Sa3Q-MqPu=k@`RS``_+-v@o)D96@a&})eU~*S20(z@w9rMZimWJAN zB0lt)?oj)604>B+#0n-%EpJ&r_#E?hl_uc0<_nO}^tTNhX-+yvoK)VmHz8TZSDYMP zml0ksWrITzxNGCVVC*hrScgo5R=BVUB3Nl1;kPzJ6jHK%C1Wu3R+)Y zU(S+Ky1DEK1++Z2YfWb~rG1h+i|D+}hb!{EFLb_YU6rnOmayk3zCq56PFgM+mQF0E zJFN^Q<&Q8*7&fEx?V9OdEkn~}2qY7yN^HAcmf-d4VYrqwyjgkzNOsnPHj9ZzeIL)R z?)gr2Ws|zKA`!CT)G6pqKxjnusKv@^Sy6quLlPD^P8t$t+L*Q3{w?R%XO+FOwj&Bvk zl4^Iid$qMOcDl^{iW)evpgP@9XC}B#$Ykcc8=U*ISnQfbcFmj8m0_%%lxMp$ zZ%?H1RMHLEtn)e@`S?4TD$xkd6yG?JI=LC&M)V^7Vy!*~l)b^Z2&g|%#P~g3;jIre z_}?WO?8XuI#_@cy5G`qC+*EOrE$dDqSLyEMJL&3vPaoRK^h4-eHaqwdhKER81`fT5 z9M^Lo#2(sx6&M`YAA4O4m#NLQULaq_k?&mL_yO8}ZuyO75t~MZT1tY2C9@wI7O$B; zs#Z5zP6pd!e@m|ApEQW{DBDq}nF7Ry0pof!;-p%-RC zN+1J8(J`X%v(8ysmo-%}`R#<$xl3EnBeB7{k5j{N3+pGq$^QpWe||DP1uBAh0q?h2 zZvo-|)|2#iR-Uh&_nzM~&u0PNG#;XIh?oN8e4Vcz76<>YukV28djI}M$li)XW>zGL zWJ|JllpT>RWQFWd$xgC9WM{9ejH0y6WY6rqB3b|Q{?NUB@BRJnee~$j<@0&X^E&%H z&&`$uVV7EphtA7Fn+A)OZVhgh(<#iFa+%6Is$VjkXTN?JicNyT@1A5F ze5!A6&U|caG)F9xRmAZ_mV^>F z5em&Rzq(#1*bb5+JWCiTtZzuSvhQ{o|J)k_1vg@Mh={!r;&_+xGzlX`7mth}F+5n= zOzK(Hog3Gg2SOx$ISqNr#wZzWo-E%w{rwuOYcX9b?)y-(vIx}t+uT)>>zy+8eM7Ro z(BCb(-gbGz{9Ti5F=2?lRTG=!t|bM#@UelP=!#%e6`p|o&_K(3$&djJdr>V;b(QPS zpBI_nv`bHuhZKw#k2)~v`pFK_oSW1lV|{Y!KI=)%^7wu3%9|Kz4^bWsvrz0^x~8{6 zU+En1mRU}&=K;P+qU*)%7+lQB#|{2hIMQ_Y@EGftD!!A%pGj6`iA`+dt2yfcfGTf3 zo>qEheA_1ha$J;+Pag}77dw8M&B*!YJEqoMkI0&5#MCd3uXV6GZ1fDw%)~;mVj!dB zGtQfrMROHilRuSo%pekp3!`eKsW}o5GRkRuA74i~yyiHr=b6hbv0*5$6Mil=3g4&05Al97aT%#)F_ zmTDBHmB9wInkGgD6O2RI%is4lU+x94POj>8R|t0uR2w-odri6y?GJ@jhH9U7G}AUP zu&t}%s#}v#{UNdI`l(`}Vj{K9Y=5V9puFhTsL7P9su6;-VqKP^&t2B`;iv|ZIO(gw zDCtXry9fE+I-K(=@4Sp9KC~L&$=1GrMKn3cn!OX6>Fc;0-7;|_kYmKX`O~$n@4`z8 z@zn(0<0g!b%ioq)ozCw}6?ho_YIUruxVmmHgCqSg;BEl!obwe?x6{>LV;LDO*#$`f_pbxQ5;0(aku$FiL~PO*@hN)d))UY%Zo1gHkQ- zPvpr#t^x6)b4}cVO$FB7`3e?~#nQ`=n&ET!YPbnf10xOok1Bf;%9|vkwq)FNxJ5Cs zAFaua#7NdGOI(wBVb;F#*?2sy(m^`MHEG|DI zB6;PEwEM@KkmiY>!Z41X6>}O>XYb@v&=R%7{+gJq@)Wt$^$K~b!D_Ckn8~8NC$CKy zBvLhG!x#+c;|qFh`S+=Xr(+H8S!#RLK<=Ndn~u5|$Bl)QV+VEPS$J5YY0FQeJPl_< z+wvjFrYQ9jQS7gCZF?bb1V|OMpp1B0uI;(amjkb^#5p>)Zm-WoUDH_=S2xwx>wa@k z_#46`NvoRMGr>o$oA1yWBK&MN3r~y2*E7gXUE|kNJ-ecmp8@0)_f?-oeX=&ae+hR1 zoK;+1bSpB$Q2cu%@!V&{%LJF3cf1HzJ`&^|u51~fk6UER=WFBHAF?atA4_l3Jyo0C z?brj>oOZgc$n@&kOlIiD3&ENgcWpeT^n`Ox!&>)Z zu1$`;G^(pbYAQ>{J`PA~-A9UYO}znJtY8$+J6k0E`P}*to*E~s)1bScnbq>>(Php;(PsgHs+NfcV)Bz@zyg0dPrjVGv zp^E*{7Xz0nr)J{q+wITiThS?BqRaJ1w8PV^fSt$8J=^pTxHI{=!HLi8BbCQ~%7CyF zfgKbQP8PjqDEa>B#gj`P5!f7;vYid6AuYXjlylGLy`S^Bz^k90^2Fx&b>-;^U9MFw zI#C&<)N>!or_9UbFA|-+$Yl4YPZQG;^rN)% zbZ?MLt>F+v$?(4-(Ukd|DAJt(<=TR`o4}8TvlgsoY4h$e?E_)GWf>u>ug!M~m|umt zUp~gGZ-GD(l)%LyNGiK8P60y1d8CRd(Z}U2u~4q#smnUyggO~rSvmztKcsK2hgnl_ zI0Wo%i{hfoO76NCbgZ*q1gba9s)vkHJV@+!;0>3CDm$xUi$2@^!k+yic$ZWPUT{=c(Yy*~fG&Nn2?EK`*){6+r%Wkw$;~E>Uo`rH5e%2JYzw>kC zONY+G9KNFjspsFoEIs|w0?Aqr`V8e=!3EYR$zlirb=Qi zhJ!6YHsOW^t)cXxYJS6T`~*{$%rv9IveNmLN^7@la!Hj^Prz3D=5$$$H05TK9fA#X zvKW8mO{c%FcVDTcR5iCRg@3mFaP7CmAUzVHem@*SqKU4b`e?|ANEM$TKFX9W(moBd zH=cM1V#CZ}^(!VBDfl(27=K(7b<*kcxd*ggX)U%x6||v_vaFI-1!Ys%fa{X`6Dd)L z`s|*jf~r|Ay4eZrk5Ci3O#1c-B}a?DUjQ>0FWCh}cuV z$XKf0Kp5c+h2OZlfcS$;$y=4^()Z!?878$XjLWo@phWWE6&|BNq@2QOpC(epVZgDv zer#~SJl@vEFN4cHrfIZ8<)LH@9^W)Ob_`i|j-U+0YYYJoD~wo^ITbg;=k_tx2g&}@ za>t}`q}HHvxNlgU{HZ66XbVIlhVZ3d;SsZ(nTOiV^GMFp=+G4sg32>)HqR6T2BuAf zh&0xn;Rz7)p5K9r3+$Lb7YSD9JdGy526DEIcWj7wAXE z8ixS^pPf%^LZqKqx@ba}5N45OgQfL`S(Wt^7LEpB5q*pdIYEveZ&#HqJQ_f$)L(AP z(`-R~c6F$to6j(Jbj808s8!O7S{En zl~-38d4gmwzEc(&ytNspAd37dM$spnLt%Za0mY?VbVB$Osn~irPq9|Di*5CdMvBzb zt6>aHeW89fK^@EFR9DD^=Mpbev5BQ!C@(PlUOGD4xdFM#aIgq{zKVkI?3W* zIqCPLryIH)5lN@_<}SVvC|2U z`0|8?Jv(!uVBdvLHP}*E=<%A;XT=axM=L0CF6de0>lYon^ZD61K~~;Uc~lzHl`>q4 z@7ZyxYhoNbs(xflMq9ag^!M6I6A(ZdfY>@?GH^6gHQA7>nyUKL=Wj}ts*Th|gXqIm z#wci-jJLOY=B5XUnl$sABtAXWEAQxRCyK*m1t^kODaK1IVRsfcZ?YJYr9hb|3R?tF zk2v(QPh-KZh+oax3_i`P6x(SmpO+FPOvCu&(cr3XhX@RykXX zRA_%n!iZ^X7P~p1cty{=Hq1Jp)BphB%75`(t0{(QI4vS}R5*nqbMznGQ~Q}vA!|Yq zau!{QKe3M#;NdrZ%#QGv<~Y0Q!BBp%2Os9EkGsjZQk)#L1S6J*m}aw#WkW^) z*{0=0Iw%O0J=EbIZ>$0KtLT&L@o-6b-+4$8E20p5jBOl zxbJaxrY}MT9~yAtr2ky-Cl$8TN33`r`n)ME<84jOnZB6|`XElAN@#t6mVCQ|5go2#}E?N7fO1n77B| zQm-MR3>WjX;ym!+8vtXNSe6*qzS(0+>T$~W-6n8anw-6Je5yZ^7OMf@j&4$FG_iZw zd*60=>$BJ5-p2lIVWF+m_+W=Pv!_MLD~o$i_FAWu?#l%hQ)^#usNFuhNxN46b9hZC zc^B{u%T0JH*|ZouzK06sHhi#+a^(t7gpwX9c3hkc-BOF2aSmbWem8iPvDl;$fRvJl z&kJ$tBF>P`XHndWJYn9PaKT!ecjpHkQo+Sxja9J{qM8wHE-Ywnbbs{&yD}iqX^m!{ zBt>o9z|N5act7z%_48UA2#Ux2byBH@`hhaQB0EXM&g!N{8Xs?yU7cNtUqunqGfb9&K`M*ZJy1@#D!wsgXxS-mZy^tHX(fD}mul z@(oU7jpQcH-YfL`-#JI^4HxbA&x>#3JX#wY_lqoE)0)2ocz?F({W${oRACIHoLucn z&jlw|csv6FFDN!|gUV6GR75GAQQ;~~6pij=^K z)!3#FYCiI&(dHs1d9xD65!F~;gU^p?&np4gi*4_grvQHR{)^_v&#t$~ktuZX<5NAI zLJfdU|BWE?U`!@Sk|6*syS{-H`27MXt4=FT$NSarq+PSsWQ(E74}q1d@4)7pC-YkW z9wzY|d;kOM^S$TopRua#k+R8)AxJwZvM#(>fk!U0Y^WUUTiW<*miiWk1Z-`Kwcf2;SxW^+pJ;2#hJs`NDy4NVK#H2Or^>Ud z$pxP{XCm`)36QfaJ1d=TU%mh_G6a~208_y^lI#X2Rulaz0IwWW8-4UG=Nh-338iY~ zZ#kXr&&jioATY*g>wX}j;j34vj95DDyK0oWIp7pl33u^jpwg*x^$M*y1;8mO&-lo6Y{_|K^C^!P!U}ua19s5MmQI{!)W3hCYah z*2K_l6i4rglRvRwVG42ee6eCnRQNS6?jPJ9SnZX(*Zuct_qUxKD|iAtCnsMmZ*r}> zwkM_iGT3V#V%YRv_wd%X+h4l-X}jcJrtWDjnt^@w(QvEE3NsC_CDop(R^L%^*Se4-KD$K% zz~{YfxB6P?Q<|=KhVypRvDJR1lB8;3k%Z=lEpwyymkQqRF0`gH>^}Zc5!XGqF(?yK zQ!Ol+>b>pspaOuH&O|MW2qg!{8wHrfX*MR?H`;b4TL+lXwR^4XZ@!A%q`N#qa2yPl zM~TM4aeO!Zc<5X2Yo-&vAZnKaswC9c>pHGjBZ>CvJ-)pcrNkqHTHZ#~)>50^j`i8D zm$O%|S_AQs`BJd+-EKJ<|KgnePz}X!=guO7*#sEM%77Lq6R#HLcJq!BWMT_Vk1(|k z2go8YtuC}eH}uxUF0DD`+(;XA(b#<|WpH=HN@(S|MEKn!H@zRsO=COkp*nWy6Lrf8$d-sI+a4m$AFSGua=PojKb^5gCga^|uR+{6IHkVi|2=8Zb+MduWt zu-`pOfNc8lIovBl*au(xn{g6JSN;IVzdre9>#tc6!*mw)eH4)LLUokE4F$%AtE_&O ztepzz(XAB&>9K}Z;74`$*Hc2j1+GMlBhHWc+Ej5HId|8)M11iI zpfg>#VEwIhi>1t}t9a>UZt=t2T&;(`tcEDEr)2K9omibwfgEbKGgCIOx@*2Jz3Y#KY5+6Ig z2_VKOuAo8t5Uq#W=vnC@FsLMUj)Ei>TR5YcfaNL*8>`aHJo^yE9{=N;-dS}o zo!bYHp#*?#&K3^nu#6l$u=a2ctk0xn0HXOUgp&O^n7Vxb{3th;S+7~_1yJbjjGQff zhCUO23@o$xo}!HVyT3k67v4KWaaO~k;P7<=)6W`|XJJ^hA$otp*kl|pu7;IYa-f9= zV$obfK8eltd%2C|h^K^B*fEVqDEEI4l+0H;ICfGBA3Fnmp_h#jY*=_$LZNg*DoV*+ z>If}BF*rG#=`C;z;3+%;Vqkp&3!H9C$&ima9Wqya=>Xw3+#8uziF%CsuTOng0Wcjw zz|2RLzf9#>hrsRv#{@$)KxU(p`U7fEZUOO4a zeZZr~iems^J_Mm$CvNnwW8pYE09b8c;mnQS)fJkXrLayEa@GLVVgoL; z4A-S0;5UN*IXwb;*P0}z3}Ao%nx0ur`}$3sHNf!2*^@?2C|Hso57sM)s3?6y)=NtU%Bot8CejVr+&w@a0KSOl8yGui2 z4qiGz2QOq*6?q{uz3!LuD$-8Y*F1%ES9=!i!egP;F zF9pCfeLxoY&pR^>6Z;H!;AT*d8&y&J@+}+${Mlj$Uec_E#YPr=46&b1`a+Rh9Dv|- zLBLDspDX3WM_sV`$_M4P_&b5f=K&;%%wnjfGUe-?y8FA4?KgjDph*!-a3IB%kN$tX z5;S^n`OrP<&N}b?|GLd^#=2hf_&5MP=K1IJ*?+N;i*kR3w?2*+kYZDB`*43`vi!- z+%3Su`wZ4W(mw}W2k7tf&@kY+J75aEaKS%$QDmqm}zIcLRY7U0SzsM|m&8Wm&InWJf6;19RnC`rz zz5NW>cpKn$UlLB#Ry~|w7MY(1D;@mdlYroe_csw;1f$^#65|Fpc+_K(mq?Hj{@@^@ zE?DOe^5iwBdWN8j0a6s(Kd;jkN?>mQnic}=cIxlferGiB_;Umd6M(K+|Le7TY%ZFQ zHHJ(A(7Vb%`N$tkS`t{_m!2ZiFKO~o6#wMDe?0m-2>2nzTYyGY{;$!%2lu%-f&~Gp z{;$#6fPtU){CNkOWjy}Z`#}OIHvo9?3&6A<|6}Liop_EQ`vJ(n>HpX{f>Cb1Jko%m z`Ty&7|ByR07w@1d0kd}gR_OmH2S?7XDk_ z@yUOOrUJJnTN2~{Mf(hYzj)~9VFogZ**CI+r2x$rByZvY`*8e&eHeqUbMo=|7Cs0j z8U7dhKqB>*?oKoQ=U`yLB9c<*l;^V4e+_2dl3$;Y z@L7F>m=p*|@xL$4bGZTCn*>P2x2_ElY0Tk7SV+f^Uhn-~Hnm8HiUX0(aS@S^jd;-r z7BSHY0gm4x#YidR20t8g2>l8G=7ZvYsQ`d6YUVQJe*3)l-p+q*$`kMr5din-qihaW z4bj?x?;A2uD8~PItM!1D{{_0Uu#qZ^J*hd+&H|YbnfC+bPr?tN-1(r&x}#OuaWcev ziQu5aj+~miG|^fT2ePA@KZt7wxQls|vS85~3PD>AnXCJ)^cf*apXgujMTVjWH2g0> zg|>ho8Y8n|lz0$yZa#&K`4kah2w-a^JQ%Fs%o|Z*OK!IcmRWbJsAL|jfy~zr*;nJ= z`-;S1GVIJ$6#`f|7v}8(l>;F6@i64UDE{?eBCwZH;5qw%#G69q>n`yiER{K20$Jvn zKbBeV&u=$yu>@dAPZ#gcmL5t-gv5(wP{y=1+l$qI2^V2(Fx77(Ph#q_I-&s}N> zyfg?WA8Nai7+4e8nMwQ*7&Q2>u@6oiekATQSO*H|bHw2|Uu*RqEvr5tdO}#Obj@#b zg2FiU9YkY2+75IKFw9YiKqQb=r9$66&Meo(a!)JPDe5G>SLOl2s$J>kPVd7f9ogw-HOnq zD1am*!hm-3B^lNPV3Z3X5p!Y4yL#FuxK@N%L6c?OhTOdx@8dS=$d2|(;O6cltu!Ez zPy-FE%yL-O@I=N3dcea@P}Hvr-D@NrCM#@J+`@pq^=3j3P zWk68(fk&A&T-mD>8PAv6d7tBMC*6QTu1(yVU*Y+sm+u1RblMNH9dP%XH&N@Hx%7S- z_xyr4lS|8S4u_|E%;cgs2YpvKFp#I6MX*Bfn>c)E#}Nc;FgJoy zH@zV_V-oZ&Aqar#TlFIV-cng3AJBXU5t*Q~+1=k+xhj%94oz9i1bd8+M1AmIg-j1! z!kzV*&OG+lw*BRk0hB6*{U(XPsm?=`Kka5dH8w?38mLcQ_Xe`59!Q$(>u-Y+lN%f4 zbsf=%K=(HX@6vsAdn)MM&{G3)ff}eMBjCLW1zZMr0D}6X4M<^geG<2LSOl*Ur~Lf3N*yuZ?0pXNcO`5H4!<=__EgWND6kUAB>;qzpJAqC#4FFiVYtwV zxJkq4m;ymUlrR~t3k_a^^b!k?fsw0qTl=6d@*%j?6RP{w&U5C7-!wJ(RUZoO{2s#4 zZU_CP*UDju%oqC4e9ev${{Hyi2c#T%89n?o0sNtO#_=DPbT-Lltp;I0~nkA zwM-1ql4~FIvFC6p-v&THWPmEGZM?oX*pDPAnFBQ2_IuUjd$XL}r%$UU*}N?w)5Yti zJ#YTZW3lo*!;$hjxD#Ebt3#w%XAMXQJ`3aGF=LZRN7v~=)CuRINPhOW4^N=xw~^80 z!LZuT2bCVvN0^0LtTopu_2{U4vC+)$=br@HunxTXIsb5Kn`A;P=1aGXayS%SOb4(j z`kRo(Ul2OG^?-!lihWF(O%0p_<}DKYo+8aIH+3M6cOI<4bAUq4k5}S*UpNf_>#(TBIO&-v1%24htU zx%uFEv8V>C@n91&pG}mMQY&6^i_;eYT=x0O_!_=?BIfvLKHN zX)8mFzndSC^+YHDdsYj}?C0{Riy8y5uZhnWmsh>!blisDz=VE$WM?|I{UlY*NxTR^ zvUmJYPup;1Rl?umP1`aB)4iUlyZv4Ov2XLN7XoudU-w4X7{3yqB{F2e-3WN@@EI@e zp`ekmgU!l3qqG4_bg0*5HyJ&MKjj8tOX2BY)B7Q=P8W9>%{<+*GdhhrrvV=5`nSNx zMLeR6%aW*Dx`4XC`0?0TLz}mQJF-SkE{+A8BvFD z6tbqnHv@HWq-0|*teW!UM?>tqY4O#mH}98vy|EQCoQstu8VMb)_UOk8+CH7 z8UYsPnhW$^<$v*D?DiEU!kuw5Xns^5U%#4-O>k323-84xTKsRUpOfKX3d$$(G2xCB z)c(q$4`2zVi3Wx?8kjE9jGH|>vS zF>3JJZURU;|9A`IyB>B&_2s+a_L!%B-5GT5?k(irpd*#NCbnga@LM@e(jC*6*;=?=8Y9;Fa%u{pZF%TE;*`^*^m1>Dvf@2 zkOit>AH9VKVaiuZ<&SlU&OMT2Aqou_3!q@KK`gp-DMYuq2qN^*bHyr2f}3QHo7dGv zBXHiB?Px&2?HU#$rE|RP&2x;&z6}>+N@*m&lh=2KXFoiCt#tZ0{*M6GbKQi@IPFqw zXBzRS^MA%S@Xw(mUeK(?rUeh{DAR}#_7NvfzFx-4Gvhjd{q5DHSnp~>=@1Z@yvsgM z_{h6zA#yqFI-SJ*8fp%=STcbCc`wM)dW!Gwc_Q`k?jSJD*h@C;yX-PV4ng%&0qHNt zCbY57V`DIf+jf#M2S>I_><>KfWO~N&R%wXnlSl+j-q;nR>9Zy{z5(pFpcBc4+ihL; z6l1p#vfFqk3FyeiHb7sZ;i@5D4ZJu2&dr>;(k>V9S!f`7ttihQdK+V`Z$o9WOrjjw zZ#_8%@gy;)RUPfpD*SfXXmlqEV^lDhDtF*7E14R3aqE8$^f;uA&Sd+L24zrOh$1{A z|Hr|*9T&zKm;2qiRPq|4*mOimZh0>Z;_rO9w)cKTbz`3M`I(ra^a!Si#DHU|;cS=V zZSr2=gcgP7;nDV`QKV`qNk1z4aLK>e?2-99GOOp&UfY}E`&+YPQ=209H?Iy4Z`QVa zcQ{oyygRt|dNW~aGiSSY%CmJPAoT2yDq9mmExSJwBz-#1@lw4tDMY&0<6JugCv!QmSN@K4mq(gfF z?LuQIIupE36#e2yeFt;-m`a`+ZnG9r21S?Vmk z_rc}ZygKp8^^M)IJUuGg7>9t0&o)<13cf}r$;gR`^>AuiI$qlH{sqk%(T1!C7+4Wx z6=2K^;C*Zip^RE+1@+Lp(s7~~`aX*F-Xjq0tJG7Z&_vHm#)xWMVNjFgyp|IUfflYO zw@1~GQN8dH1r@;$13scqJ_>&O5~Kkg-7O>o<(~LLv&zBzBX_YLqugqR@D5krj6eM; z4(TKa==x55wPg_8e8M0$n}1f=AX~q(c;=l(V}!?}HYQ{eWgPfc0vstv4pab+V?(kF zZ-15ZOPFk~)XRFXs%&AnZWvGq6IthMhHD1{qXG$!>!wHtGT)X7LNC8V1&+-!Te&&E zVvHce&HWy7;;Af!o?DLA9cdx90~PJc-xYF7ZTr8uEDhNruBg=&@KH8CJ#)hZ5+)y# z5Q(ApagiIjT5YU{>{MN_vPdjyE-k(V=MHezvTkS27y;KVh87!aTW-C@X3CxQN#G2W z`_;w?+raQGrDR08=~AePrl1d>YPz>1lkgO`cCK8p_d@@xSKhmGMuL!Ss>!fP>l?y) zB2gN-I=L7O%%&)1%=Ei69fHs+@{wA z{2>jTVW6A02-*+Xz=$Cvc!%q^M%Ld4j@};o`)hRD&{K8Z9UHcS;cJ0!p&AXT2>sC8 z#a-b&bgyI5gVemp;~jH#iAdECbPJKtWn9Na$Y~@Ok4#PU#&0@oCO}GfptkB2>!wWm zm1S<7d{MLLTL65UK~5E#uXaE~%jArxpB%edK|W*nS1w?a1((*x=onhki?|4cK5Kl6 zhOy-}umX4`iP0sH*2VjKn|1Pr@f4OEmx7R&6>bGY%ubKlMETGPkCDt0Q@N`{?gLVJ zDlI{+t6gB|^>JA7>6saq)NcMpD&)*Du|2WzIK&lz_PEe@&Wj?ZbB?INQixy%@Clul zo|Y_EZ5wH*7D85gOvBiO+0M+WtdpW&%n#(KL_$%}>GGZIW17+5=R^R$-M2g^R-uLJ z$tC0AS}$9O71*7Bhq7?GnzskpE72CxZQSS^FJXo!ev9q*6F-ZZ_;wXs0!E%IO)Iq| zkPNcGTrj8Rr%~hP;DNOE1k#BRO7TZC3`=(SZs~9KKp~B~USuM8XGGE(;s|p~P;g+| zktPqf&F{JoefkQAUVHR|-;d&rzX~(LUD6VPY&usVFRTQ*n)a2niq9QxV446)CCF=` zw)uP!9Hn%S1h|qoNe3#rFp!sHYxHzZ+xY{6g=g=^^_yVvnUF4ZofL28x(i-`l&<15 zLb|bfLF3H){S!Ca-<3nIqm#5-oBY9-|A*S~S=4Gh-L2bDzCY%=TLUR^B7tOkkv35X zC@BOL*dF81UqREm2wZX|+ua{@?k`Ao)VMlNL^J z^7k$DmK$u=BM*r1T*}y?~I%1)ONdiH~vGIVotCzEfBKbLD%U zYO=UpUDV=WwH_FHc`_jsylIC|KrR$+MKkpGA}{(zvME-PQyGM%S{n5gsmM{i~t(w-EP$UKxHS)=j@q18sLw5dq5{>8q2-*@~HvXu=@UEGsxSLJBgV$ zhNM1MkqFrh^Z@-vTujW&JopALB6xmNC4~mcrnh(lymkHay(M{WD`WVUl9}Yl+v$)6 zwmBmw`CHCOLiVUcWXrxHv&|SKlHAN1h33)*WfBBxL1}b`J z`L+l$aUZ~V$np+37aasg65(x(5s{`htR~ z&T|Ajmt;3fZhdgv0k5avCukh)wY~5vgZPxwc=KoyH+Xsx&7k`Uv<}uw5_Rv0;R!u> zGw8<-G6IN0&~4fHaDM@MBXF&+YQ45~L9XXQo-41Y%}`A*3~v5Xr@%!7+Hl{`k~97_fF=U2X^* zqe3jNEr{B3kQ&u4V9t7cgMjfIAQH!LYMve_EG0qnQC{RyPW^t*yx5RIYlid#B%!}l z!N(6NHb}ihu0jl#cD4qa>!aHbbwu$9xE~!q>%wvgy3pNSumBOAr(fBzw;Eg5gVfW2 zKO}gH?cy=?@Qv^eTca)?5@~=Tg3>Jr%_)U!tsqZW8#+DDL18pCkFG$pZL*Mkl5)bu z_R!o?tFDh_yGTQ7Fw`FuzZM`s4Rg_MyPC@`YUCKA3O- zXYPc&ygj$o0z7DlOw947>Zr9}5J10vkiI;RNW~uV>TW5z$`{?!?jFR`yR4QygW(J z$p-Ql)M*`_iF;K!&vZ0>D=<2x>vRIqj2Q1sBCPp*Xp)7z;^ZX{KSc0Lv!j$r%2vA| zL-BHV`Bwpp#eqt@x3WC(N@#W-`~>*&n*MK5mqKmPTbxcW?AXY2?qp!`ol$8-%e3t+ zW+NC(Aw_eceMG#~QXjG)-!=lIsFmORvxRP|5P{iDM|y^(HFh*dg7Pn9-#cf35Ilvn z@^rfpGxP{9(Xyx?=rBH#71$t*%x{#KmqFMy;N{J1n^0M`(#UQ=-;MitdxQ@yOZgCX z*GlmBNkjLuiiyDYp>)Ul1e4_7J{xmBt@{;W1s!4Nja<@Cp$R4_pAkc<$aC6d2(h=~*JxwVS)^Ermz;n4kU+d1foxC^~L zT{XK8Y^rudKS{d!nQ;$vd^OJAX6kA+(+OO2{Z<`nwd_bHGoC+5=0w?PyZ zlpETNc*9Os7J339+D^1f4|Ez)&yi9*G(Wk9P@*7CH1NF28EoXSF^UlkKwX^6bQ@E= zsJr8H0q>=u*Mgvj2{kDw?ixZl9z^{wY{NE}HuTgvZxpA|U%bQkp}W&t2dRS8dNlz} z@SM9lvm_unU-ie@9Y*xYSAcM0nEH+s_Cbl_FfVkOeyNomY4-Wq%1=bNl_8@&cYZ~l6etl|3Spp#SJ>Qt-WKOl4{t~Nb8d9At8hIAYKsY?QB-ye}>Ih;v-u7^bKL(fpZbQ^e{k$M#0Qy)96iT~i@6FZ=b=S_~;d%uu35 zM8UQm*iZvkwzGMVUa5ra@QJDzUV}?zs&5_84~YqRNC{+KEEV>{;>S-vp% zJzZH_bHp3J=3M*q{jnyFuLS|*i;HbQ%&CG?eFbfl0B15rO7*rWPICm2o)T1M_8KJw$OR}hhyC-FZVR>HM37ol^XVZW zH)SPEmySwtxQT8QrOh^dBlXjmce2U}TAVw!T`g{m?H#sj;Jhx{FzmNoVc~SUDZ9>t*VZ|43YNMsMir{LtV_ zowL=`sgDK>NmrtgZkAA*bd3|4yyFK8fRE-yQGS|oZWiJUzveNNvNX^=gp85su zeJiN-js;t;#jA)ix|D=N?B4pFePWt(CIN_s>F^`OAFUm}0UZ^;wGzc<$%yhvwRhH} z#O)ZFi1H**c5cs+?<*NqQiL%FSF=~{f6tA00l5Dab4NHrxZ99`0YtGDAkphF;Y}#j zv}+HCBdf&la%^8e8yXGP>rr;4*9vn!tB^z9GrYGU1ZWQ7i1PM-O&+cx*<0&XjkvoO z~G#3JBH$dtbd=e-yd_h*lc>TpWh!K@R>S+HS zyf!@$?}O*0)KMJz6@@X}IxXudYRB>CPGmr*3H(Gmf(M`=u8rAA{5gQ1tPk$X}DP9;1?5 zJQ3Y0zWv#tO$5p#gm9EP^{E){w&#m~wx&)6bugZ{CeQG770>m;dM}hW==}phxu9rN zx&MF;+C`A4Sh>6kgk9O?uX0>%9h1ui`--ONdP6>($~UM=78;awzN@JwT-o>p#o8@i zHutJ-H;>NJ6703P_{k~js(5Wp6Ku8?A#E9wZV%U{ht#|r?=}564I$#G5ZUd_**J`} z-1d4HyEn*jXLlvcyA)V|V<+1aw0?>gfq}^;!|tEacs6|C0ta}e?z|x9(!F8&aM~V6sl52U2FZkez4hgJ zmsl(4Vxt*8(A%1&*C$ecdp+Sqp1OzkX7z9-;|7pc#YT2(CLu?)>yr43>~rjAYsvaY zdaQjTU&aoY-m8sfP@Oe!EH^xRz2ePg;!OWW^lbY2&$ts=wOF}+8(@_wy|7(5_Ie5o z?6C}9s}+J6iJehW-ev2V5yY#fUe^=(jfF$E#SL`D4C}J>bS&VQz}-(^VMkjeT)np< z;TxUdhNA{@p)!6?0Q!M;F7|O%`M4p$2(XxwN8BN_)(fHQsf~L1S$_i!%^Cq_%``c3 zA$|%Gzf>{0by1)^@zD!ZeggE9y${?U5(l0{B~RVm^q+cc;LclVs%pq{HhW{X z(nRMy;V;@VI1C>7COWl>*4Cn$ah~k!ml~iTPyuG<3F{)>@Fo#kPhNjb%rUJ@mXtvsL z>YvZ1T3=gV$dfhlvyUtrmI1>`1)l>_I$XOeEC`g;TowmrWJOBDWE?TsDmSu~!8PIf zf@wBc_8wA4@~SGL?;Taa&tW}vH{8%W7F715Zvrhl=ohk6!wcG8cym_?Dt59`8&VCF z-7}b{XtbnPTfgG7r)+h}G=}S1N1CcAJ|bM}&w?7iHPMR6BX=3}62x%gEeo4&{$BA`=&4 z%GQ@O_w6qDHB;s&osu*-=+NsXQ0JE$lOC3oiKQ5+PC=nv)`_&>aNtK1EPe4V}P@qZi zJ?Q-(7cRW8&%e--axF;Ui<0K+^=Hxw8VypK=B3d&eS(m-d#gW_G2Ni1Oe0QvMFUSm zPQCqsyKbe@f_-oCgz!bm8W|cKsx0d03&eZ`R~|{9F{(}Qp$LqUNAxdW8cZw#`=iJs zlfq6trdAsNdPAx`>vp6vcH+^m+z+g#rV3@%HLI_Wl z3}X;edUP@2(W7xq8>JIkH2k-Mm7no7Z(*5pL1Gl)(q^If!q5E=RkCQk+GPUNv| zRN7CIDb$em{zk5_xvy>XN}OsG&pt zg-s4c0RG#2r(&$tAkF&1tF7^Op>&kvLQ!_0t)r(r z+Yn#8Vl3~(JlfqSBL}iEB}!fg8Fd`H^!qPJNE*06N6UXpZu2@)7XvQJKJY0gEN)95 zg%4q3-#^BPTDC*}MImDhy>1atN$1xrh?!*08A6)N;Ow_NYowM2;`+P>n}P4pCTjwR zq~s_)ayP8O^^lk~58AGfa;OzJeybLLfOFUel2yK;q>jvWq$^e}5{6zy{9Z5<19~Ry z5d>NTyc?D3(d+t2Ze#d>9?&`uX&Qx)9hN?o-{u08g5ev5O(QkRgPtb59>mu?Z*;eX z0(92sFlz;9H+vle=NQoD+ri77Xty1~yJ9H-XLN@I4r~e|E*6>V4RfLMoHk_WJpTb% z5({sV7(PMjtqr7HYUk?IT>NJY+AGB0?u33Y4LAx045vwvGZ&S$2~|bfItsLUpJa4d|s^JkcES7TCz7-#f4} zZ96lRUB;WqKP5}l5z-ORApX43@8Fr|^_+H~UQj4_UzVdizw|49ac+r=fD18dT90GL zAtJB)+X5)%Ma)+oR$TJfm@h(@E29(Ggsyq=n~Q^aKrarPaqP&glHt9Al?+S;eM3B; zQ!*ov9a22;DYjY-sgJ6zM=hfYQ4tY}yp@fCI0jk;5u}5lCWupM`?XQ*^rMd zKF1C{u5bt-I`)CuY7Wi^{i1*l1b~{_5(rKlI7!hT!vLdq=m?r(4*w!Mfr+JHp@Ktv z;5$cl1zW=+SUUIz`u|{~;2dWY$n<;g=bRXrft!b;9t;)$PHBqgno^e!SAZUDWFLdQ X2lEbhS-Cw1{3m}!MJ8X`*zf-V8$$|R literal 0 HcmV?d00001