From d78b106cab5c28d9e50e75034bcd7020b561ef63 Mon Sep 17 00:00:00 2001 From: Luke Kysow <1034429+lkysow@users.noreply.github.com> Date: Tue, 19 Mar 2019 10:28:38 -0500 Subject: [PATCH] Refactor @jjulien's server-side config work. --- Makefile | 2 +- cmd/server.go | 24 +- cmd/server_test.go | 10 - .../.vuepress/components/HomeCustom.vue | 10 + runatlantis.io/.vuepress/config.js | 31 +- runatlantis.io/docs/README.md | 6 +- runatlantis.io/docs/access-credentials.md | 38 +- .../docs/atlantis-yaml-reference.md | 211 ---- runatlantis.io/docs/autoplanning.md | 6 +- runatlantis.io/docs/configuring-atlantis.md | 25 + runatlantis.io/docs/configuring-webhooks.md | 25 +- runatlantis.io/docs/custom-workflows.md | 330 ++++++ runatlantis.io/docs/customizing-atlantis.md | 8 - runatlantis.io/docs/deployment.md | 35 +- runatlantis.io/docs/images/status.png | Bin 45991 -> 48719 bytes runatlantis.io/docs/installation-guide.md | 19 +- runatlantis.io/docs/provider-credentials.md | 46 +- .../docs/repo-level-atlantis-yaml.md | 233 ++++ runatlantis.io/docs/repos-yaml-reference.md | 126 -- runatlantis.io/docs/requirements.md | 31 +- runatlantis.io/docs/server-configuration.md | 72 +- .../docs/server-side-repo-config.md | 340 ++++++ runatlantis.io/docs/terraform-versions.md | 2 +- .../upgrading-atlantis-yaml-to-version-2.md | 2 +- runatlantis.io/docs/using-atlantis.md | 6 +- runatlantis.io/guide/README.md | 13 +- .../guide/atlantis-yaml-use-cases.md | 326 ------ runatlantis.io/guide/test-drive.md | 14 +- ...{getting-started.md => testing-locally.md} | 8 +- server/events/command_runner.go | 3 +- server/events/command_runner_internal_test.go | 3 +- server/events/comment_parser.go | 9 +- server/events/commit_status_updater.go | 2 +- server/events/commit_status_updater_test.go | 9 +- server/events/db/boltdb.go | 7 +- server/events/db/boltdb_test.go | 3 +- server/events/event_parser_test.go | 22 - server/events/matchers/models_pullrequest.go | 21 + server/events/matchers/models_repo.go | 21 + .../matchers/ptr_to_logging_simplelogger.go | 21 + server/events/mock_workingdir_test.go | 327 ++++++ server/events/models/models.go | 64 +- server/events/models/models_test.go | 3 - server/events/project_command_builder.go | 376 +++--- .../project_command_builder_internal_test.go | 620 ++++++++++ server/events/project_command_builder_test.go | 913 ++++----------- server/events/project_command_runner.go | 87 +- server/events/project_command_runner_test.go | 454 +++----- server/events/project_finder.go | 51 +- server/events/project_finder_test.go | 16 +- server/events/pull_closed_executor.go | 3 +- server/events/pull_closed_executor_test.go | 3 +- server/events/runtime/apply_step_runner.go | 14 +- .../apply_step_runner_internal_test.go | 3 +- .../events/runtime/apply_step_runner_test.go | 57 +- server/events/runtime/init_step_runner.go | 4 +- server/events/runtime/plan_step_runner.go | 13 +- .../events/runtime/plan_step_runner_test.go | 11 +- server/events/runtime/run_step_runner.go | 6 +- server/events/runtime/run_step_runner_test.go | 13 +- server/events/runtime/runtime.go | 12 +- server/events/runtime/runtime_test.go | 35 +- .../terraform/mocks/mock_terraform_client.go | 4 +- server/events/terraform/terraform_client.go | 27 +- .../terraform_client_internal_test.go | 5 +- .../events/terraform/terraform_client_test.go | 19 +- server/events/working_dir.go | 1 + server/events/yaml/parser_validator.go | 238 +--- server/events/yaml/parser_validator_test.go | 1016 ++++++++--------- server/events/yaml/raw/autoplan.go | 6 +- server/events/yaml/raw/global_cfg.go | 139 +++ server/events/yaml/raw/project.go | 22 +- server/events/yaml/raw/project_test.go | 6 +- .../yaml/raw/{config.go => repo_cfg.go} | 36 +- .../raw/{config_test.go => repo_cfg_test.go} | 94 +- server/events/yaml/raw/repo_config.go | 75 -- server/events/yaml/raw/workflow.go | 20 +- server/events/yaml/raw/workflow_test.go | 11 +- server/events/yaml/valid/global_cfg.go | 295 +++++ server/events/yaml/valid/global_cfg_test.go | 424 +++++++ server/events/yaml/valid/repo_cfg.go | 85 ++ server/events/yaml/valid/valid.go | 103 +- server/events_controller_e2e_test.go | 41 +- server/events_controller_test.go | 1 - server/locks_controller.go | 3 +- server/locks_controller_test.go | 3 +- server/server.go | 44 +- server/server_test.go | 14 +- 88 files changed, 4589 insertions(+), 3348 deletions(-) delete mode 100644 runatlantis.io/docs/atlantis-yaml-reference.md create mode 100644 runatlantis.io/docs/configuring-atlantis.md create mode 100644 runatlantis.io/docs/custom-workflows.md delete mode 100644 runatlantis.io/docs/customizing-atlantis.md create mode 100644 runatlantis.io/docs/repo-level-atlantis-yaml.md delete mode 100644 runatlantis.io/docs/repos-yaml-reference.md create mode 100644 runatlantis.io/docs/server-side-repo-config.md delete mode 100644 runatlantis.io/guide/atlantis-yaml-use-cases.md rename runatlantis.io/guide/{getting-started.md => testing-locally.md} (97%) create mode 100644 server/events/matchers/models_pullrequest.go create mode 100644 server/events/matchers/models_repo.go create mode 100644 server/events/matchers/ptr_to_logging_simplelogger.go create mode 100644 server/events/mock_workingdir_test.go create mode 100644 server/events/project_command_builder_internal_test.go create mode 100644 server/events/yaml/raw/global_cfg.go rename server/events/yaml/raw/{config.go => repo_cfg.go} (67%) rename server/events/yaml/raw/{config_test.go => repo_cfg_test.go} (81%) delete mode 100644 server/events/yaml/raw/repo_config.go create mode 100644 server/events/yaml/valid/global_cfg.go create mode 100644 server/events/yaml/valid/global_cfg_test.go create mode 100644 server/events/yaml/valid/repo_cfg.go diff --git a/Makefile b/Makefile index 8b38ea1e3c..ba847f19cd 100644 --- a/Makefile +++ b/Makefile @@ -48,7 +48,7 @@ test-coverage: test-coverage-html: @mkdir -p .cover - @go test -covermode atomic -coverprofile .cover/cover.out $(PKG) + @go test -covermode atomic -coverpkg $(PKG_COMMAS) -coverprofile .cover/cover.out $(PKG) go tool cover -html .cover/cover.out dist: ## Package up everything in static/ using go-bindata-assetfs so it can be served by a single binary diff --git a/cmd/server.go b/cmd/server.go index 79b44e537a..b118652d17 100644 --- a/cmd/server.go +++ b/cmd/server.go @@ -107,7 +107,7 @@ var stringFlags = []stringFlag{ }, { name: ConfigFlag, - description: "Path to config file. All flags can be set in a YAML config file instead.", + description: "Path to yaml config file where flag values can also be set.", }, { name: CheckoutStrategyFlag, @@ -171,7 +171,7 @@ var stringFlags = []stringFlag{ }, { name: RepoConfigFlag, - description: "Path to a repo config file, used to configure how atlantis.yaml will behave on repos. Repos can be specified as an exact string or using regular expressions", + description: "Path to a repo config file, used to customize how Atlantis runs on each repo. See runatlantis.io/docs for more details.", }, { name: RepoWhitelistFlag, @@ -216,7 +216,12 @@ var boolFlags = []boolFlag{ " Should only be enabled in a trusted environment since it enables a pull request to run arbitrary commands" + " on the Atlantis server.", defaultValue: false, - deprecated: fmt.Sprintf("use --%s to allow sensitive keys in atlantis.yaml", RepoConfigFlag), + deprecated: fmt.Sprintf(`set a --%s file with the following config instead: + repos: + - id: /.*/ + allowed_overrides: [workflow, apply_requirements] + allow_custom_workflows: true +`, RepoConfigFlag), }, { name: AutomergeFlag, @@ -227,11 +232,21 @@ var boolFlags = []boolFlag{ name: RequireApprovalFlag, description: "Require pull requests to be \"Approved\" before allowing the apply command to be run.", defaultValue: false, + deprecated: fmt.Sprintf(`set a --%s file with the following config instead: + repos: + - id: /.*/ + apply_requirements: [approved] +`, RepoConfigFlag), }, { name: RequireMergeableFlag, description: "Require pull requests to be mergeable before allowing the apply command to be run.", defaultValue: false, + deprecated: fmt.Sprintf(`set a --%s file with the following config instead: + repos: + - id: /.*/ + apply_requirements: [mergeable] +`, RepoConfigFlag), }, { name: SilenceWhitelistErrorsFlag, @@ -456,9 +471,6 @@ func (s *ServerCmd) validate(userConfig server.UserConfig) error { if (userConfig.SSLKeyFile == "") != (userConfig.SSLCertFile == "") { return fmt.Errorf("--%s and --%s are both required for ssl", SSLKeyFileFlag, SSLCertFileFlag) } - if userConfig.AllowRepoConfig && userConfig.RepoConfig != "" { - return fmt.Errorf("You cannot use both --%s and --%s together. --%s is deprecated and will be removed in a later version, you should use --%s instead", AllowRepoConfigFlag, RepoConfigFlag, AllowRepoConfigFlag, RepoConfigFlag) - } // The following combinations are valid. // 1. github user and token set diff --git a/cmd/server_test.go b/cmd/server_test.go index 87004ea259..fb78e641c8 100644 --- a/cmd/server_test.go +++ b/cmd/server_test.go @@ -914,16 +914,6 @@ func TestExecute_BitbucketServerBaseURLPort(t *testing.T) { Equals(t, "http://mydomain.com:7990", passedConfig.BitbucketBaseURL) } -// Cannot use both --allow-repo-config and --repo-config -func TestExecute_AllowRepoConfigWithAllowRestrictedRepoConfig(t *testing.T) { - c := setup(map[string]interface{}{ - cmd.AllowRepoConfigFlag: true, - cmd.RepoConfigFlag: "somefile", - }) - err := c.Execute() - ErrEquals(t, "You cannot use both --allow-repo-config and --repo-config together. --allow-repo-config is deprecated and will be removed in a later version, you should use --repo-config instead", err) -} - func setup(flags map[string]interface{}) *cobra.Command { vipr := viper.New() for k, v := range flags { diff --git a/runatlantis.io/.vuepress/components/HomeCustom.vue b/runatlantis.io/.vuepress/components/HomeCustom.vue index ad01f6dea4..a8b2c1777f 100644 --- a/runatlantis.io/.vuepress/components/HomeCustom.vue +++ b/runatlantis.io/.vuepress/components/HomeCustom.vue @@ -145,6 +145,13 @@ +
@@ -268,6 +275,9 @@ text-align center color lighten($textColor, 25%) + .getting-started-footer + padding 2.5rem 0 + margin 0 auto .workflow-container border-top 2px solid $borderColor diff --git a/runatlantis.io/.vuepress/config.js b/runatlantis.io/.vuepress/config.js index 6edcca06fe..3bd1f8f035 100644 --- a/runatlantis.io/.vuepress/config.js +++ b/runatlantis.io/.vuepress/config.js @@ -37,11 +37,9 @@ module.exports = { '/guide/': [ '', 'test-drive', - 'getting-started', - 'atlantis-yaml-use-cases' + 'testing-locally', ], '/docs/': [ - ['', 'Overview'], { title: 'Installing Atlantis', collapsable: true, @@ -52,29 +50,30 @@ module.exports = { 'webhook-secrets', 'deployment', 'configuring-webhooks', - 'server-configuration', - 'provider-credentials', - 'terraform-enterprise' + 'provider-credentials' ] }, { - title: 'Using Atlantis', + title: 'Configuring Atlantis', collapsable: true, children: [ - ['using-atlantis', 'Overview'] + ['configuring-atlantis', 'Overview'], + 'server-configuration', + 'server-side-repo-config', + 'custom-workflows', + 'repo-level-atlantis-yaml', + 'upgrading-atlantis-yaml-to-version-2', + 'apply-requirements', + 'checkout-strategy', + 'terraform-versions', + 'terraform-enterprise' ] }, { - title: 'Customizing Atlantis', + title: 'Using Atlantis', collapsable: true, children: [ - ['customizing-atlantis', 'Overview'], - 'repos-yaml-reference', - 'atlantis-yaml-reference', - 'upgrading-atlantis-yaml-to-version-2', - 'apply-requirements', - 'checkout-strategy', - 'terraform-versions' + ['using-atlantis', 'Overview'] ] }, { diff --git a/runatlantis.io/docs/README.md b/runatlantis.io/docs/README.md index 215e12758d..5527692cf5 100644 --- a/runatlantis.io/docs/README.md +++ b/runatlantis.io/docs/README.md @@ -4,11 +4,11 @@ These docs are for users that are ready to get Atlantis installed and start usin :::tip Looking to get started? If you're new here, check out the [Guide](/guide/) -where you can try our [Test Drive](/guide/test-drive.html) or [Run Atlantis Locally](/guide/getting-started.html). +where you can try our [Test Drive](/guide/test-drive.html) or [Run Atlantis Locally](/guide/testing-locally.html). ::: ### Next Steps * [Installing Atlantis](/docs/installation-guide.html) – Get Atlantis up and running -* [Using Atlantis](using-atlantis.html) – How do I use Atlantis to run Terraform -* [Customizing Atlantis](customizing-atlantis.html) – Modify how Atlantis works for my use case +* [Configuring Atlantis](configuring-atlantis.html) – Configure how Atlantis works for your specific use-cases +* [Using Atlantis](using-atlantis.html) – How do you use Atlantis? * [How Atlantis Works](how-atlantis-works.html) – Internals of what Atlantis is doing diff --git a/runatlantis.io/docs/access-credentials.md b/runatlantis.io/docs/access-credentials.md index 0e5d3203d7..f223cd1d95 100644 --- a/runatlantis.io/docs/access-credentials.md +++ b/runatlantis.io/docs/access-credentials.md @@ -1,5 +1,5 @@ # Git Host Access Credentials -This doc describes how to create credentials on your Git host (GitHub, GitLab or Bitbucket) +This page describes how to create credentials for your Git host (GitHub, GitLab or Bitbucket) that Atlantis will use to make API calls. [[toc]] @@ -14,27 +14,33 @@ will come from that user so it might be confusing if its coming from a personal ## Generating an Access Token Once you've created a new user (or decided to use an existing one), you need to -generate an access token. Read on for the instructions for your Git host. - -### Create a GitHub Token -**NOTE: The Atlantis user must have "Write permissions" (for repos in an organization) or be a "Collaborator" (for repos in a user account) to be able to set commit statuses:** +generate an access token. Read on for the instructions for your specific Git host: +* [GitHub](#github) +* [GitLab](#gitlab) +* [Bitbucket Cloud (bitbucket.org)](#bitbucket-cloud-bitbucket-org) +* [Bitbucket Server (aka Stah)](#bitbucket-server-aka-stash) + +### GitHub +- Create a Personal Access Token by following: [https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/#creating-a-token](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/#creating-a-token) +- Create the token with **repo** scope +- Record the access token +::: warning +Your Atlantis user must also have "Write permissions" (for repos in an organization) or be a "Collaborator" (for repos in a user account) to be able to set commit statuses: ![Atlantis status](./images/status.png) -- create a Personal Access Token by following [https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/#creating-a-token](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/#creating-a-token) -- create the token with **repo** scope -- record the access token +::: -### Create a GitLab Token -- follow [https://docs.gitlab.com/ce/user/profile/personal_access_tokens.html#creating-a-personal-access-token](https://docs.gitlab.com/ce/user/profile/personal_access_tokens.html#creating-a-personal-access-token) -- create a token with **api** scope -- record the access token +### GitLab +- Follow: [https://docs.gitlab.com/ce/user/profile/personal_access_tokens.html#creating-a-personal-access-token](https://docs.gitlab.com/ce/user/profile/personal_access_tokens.html#creating-a-personal-access-token) +- Create a token with **api** scope +- Record the access token -### Create a Bitbucket Cloud (bitbucket.org) App Password -- create an App Password by following [https://confluence.atlassian.com/bitbucket/app-passwords-828781300.html#Apppasswords-Createanapppassword](https://confluence.atlassian.com/bitbucket/app-passwords-828781300.html#Apppasswords-Createanapppassword) +### Bitbucket Cloud (bitbucket.org) +- Create an App Password by following [https://confluence.atlassian.com/bitbucket/app-passwords-828781300.html#Apppasswords-Createanapppassword](https://confluence.atlassian.com/bitbucket/app-passwords-828781300.html#Apppasswords-Createanapppassword) - Label the password "atlantis" - Select **Pull requests**: **Read** and **Write** so that Atlantis can read your pull requests and write comments to them -- record the access token +- Record the access token -### Create a Bitbucket Server (aka Stash) Personal Access Token +### Bitbucket Server (aka Stash) - Click on your avatar in the top right and select **Manage account** - Click **Personal access tokens** in the sidebar - Click **Create a token** diff --git a/runatlantis.io/docs/atlantis-yaml-reference.md b/runatlantis.io/docs/atlantis-yaml-reference.md deleted file mode 100644 index 100e7e9921..0000000000 --- a/runatlantis.io/docs/atlantis-yaml-reference.md +++ /dev/null @@ -1,211 +0,0 @@ -# atlantis.yaml Reference -[[toc]] - -::: tip Do I need an atlantis.yaml file? -`atlantis.yaml` files are only required if you wish to customize some aspect of Atlantis. -::: - -::: tip Where are the example use cases? -See [www.runatlantis.io/guide/atlantis-yaml-use-cases.html](../guide/atlantis-yaml-use-cases.html) -::: - -## Enabling atlantis.yaml -By default all repos are allowed to have an `atlantis.yaml` file, but not all of the keys are enabled by default due to -the sensitive nature of some keys. - -Restricted keys can be set in the server side `repos.yaml` file, and you can enable `atlantis.yaml` to override restricted -keys by setting `allowed_overrides` in the `repos.yaml`. See the [repos.yaml reference](repos-yaml-reference.html) for -more information. - -## Example Using All Keys -```yaml -version: 2 -automerge: true -projects: -- name: my-project-name - dir: . - workspace: default - terraform_version: v0.11.0 - autoplan: - when_modified: ["*.tf", "../modules/**.tf"] - enabled: true - apply_requirements: [mergeable, approved] - workflow: myworkflow -workflows: - myworkflow: - plan: - steps: - - run: my-custom-command arg1 arg2 - - init - - plan: - extra_args: ["-lock", "false"] - - run: my-custom-command arg1 arg2 - apply: - steps: - - run: echo hi - - apply -``` - -## Usage Notes -* `atlantis.yaml` files must be placed at the root of the repo -* The only supported name is `atlantis.yaml`. Not `atlantis.yml` or `.atlantis.yaml`. -* Once an `atlantis.yaml` file exists in a repo, Atlantis won't try to determine -where to run plan automatically. Instead it will just follow the configuration. -This means that you'll need to define each project in your repo. -* Atlantis uses the `atlantis.yaml` version from the pull request. - -## Security -`atlantis.yaml` files allow users to run arbitrary code on the Atlantis server. -This is obviously extremely powerful and dangerous since the Atlantis server will -likely hold your highest privilege credentials. - -The risk is increased because Atlantis uses the `atlantis.yaml` file from the -pull request so anyone that can submit a pull request can submit a malicious file. - -By default, the keys that are sensitive in nature are restricted from being used in the `atlantis.yaml` file. -Restricted keys can be set in the server side `repos.yaml` file, and you can enable `atlantis.yaml` to override restricted -keys by setting `allowed_overrides` in the `repos.yaml`. See the [repos.yaml reference](repos-yaml-reference.html) for -more information. - -## Reference -### Top-Level Keys -```yaml -version: -automerge: -projects: -workflows: -``` -| Key | Type | Default | Required | Description | -| ----------------------------- | ---------------------------------------------------------------- | ------- | -------- | ----------------------------------------------------------- | -| version | int | none | yes | This key is required and must be set to `2` | -| automerge | bool | false | no | Automatically merge pull request when all plans are applied | -| projects | array[[Project](atlantis-yaml-reference.html#project)] | [] | no | Lists the projects in this repo | -| workflowsAk&{aOrIH< znf_~Ra97?xSGfUZu11z$Ma`^?tR2A5;Q!3V!Or`y4*#E9|NY4S(N*KWyMAH+@;`h2 zk30X_lb7j_1ph;#|4`Szu7dT&kHE|HU%KZeKt?pk6=YpS0|vE)zsSB z>H$>B6AZ%w8zP8A$WIFn9^}A&YV1<0ZqINZX!FF%!^3|ro0V>JkY-9OMgoln@$TOo zwx58eXw=%0_&PucIN!e>lF%f8Z)AUO1HRjo1_6zbNG1_P0s;B=1C6>0RuBUE?}xTL z1Z2QSbgsz15d`8L9Ofd_-yaCR%SZ(Q?AaTf`t)yv^#u!Y`tOtn@h%a=S8&UI_Ym#h zNFfMLIPU(c-9LKu9f23jvgNXOg!?y|BY^-ydi*=h33ly)E!IT9#SQ)M1o0IF^8Gt& zk!;#Sf;}aYfbhq^6GSkpi|F5b9v9eRj1rM3LjO*XG+IE}y_Q4}5kU@5rM2=!(6`A* zh aN86eqo)E!6s#vE^kK41BG1PSv8HdTDTf&Qx|zr_fKn|>ao zie$o)*9@jDC^4+jHZ -4L*Go3wdRs92G6UZpe 9m;hdxEbeekeMv|*S~VaWEj zr44KxpdMSPG)ZC(K2;gz2z&BTsn59sb>*LDA^&PWTWa7v@%l^v&VkulyVExPJ$AL^ z6pMsH(A`$>F9JqDl}2H{dIG0`rKyO-W@1^VcuO-C`$^sQI6`&yjB=u-&L`Q!dAQ2I zO`T0f=&wZ|9n9*;m1b|skDT{2z~gS-`Cm6=@T}(iv{9%VosPMp96x9q$}#%;L~Vsn z^L7p`&`Ui_Xru;@!n!mMhf@7}{mU=ps-06VtbJUQ7V7%3%lR0QQz;nAojd=qq+I;J zjad~Bv5{lylEYBFb4mkKxV#*$e9WbtW!jYAq5M8nTm*i!vWY}Vv5t3M_}Iri8#kI8 z#S!K2ZbA6Yg>NB1P=D>IS&jw{)4CS(Bi!Er!xb9r%S6?(X9ALNm}i~hAO8w3O&H+T zXLWc)yx8DgZLS}=|2DQLB)D}n1Rt$4Jdl*Of_DF}E 3yT$Y%Wj h zMJg#um;-bbO2!-Q?W`xKvU_|bq9g#(`1n5FzX4Jg+aIeBa;dJWu-5FFhGH|!md#8B zNtpdgHoJN4^^gl&*Il12loZ%YfO*b7bjyNW^YBtv9-q-80k}RP7=Zp}%1ur1B4N4v z;xNCg!nfn1WaS*VW~4xc@PuZ#h{rQYq-FqJ{k2>FIo*o&ttV57w*=%Xh_0&k;rg%Z z#R8hIpg!3_cYl!56ZBF3GF@ePmg<6fiq+8oJzKH(K5_mRZzfRDTXu)>h=(R6ShrfA z!*Twq+eEN#@gLt5^%?uaiIhwDwij(%E_U0N670#xr1%hS;YMpp# zFdze{%CUbT{0%sw6~M7dgavc%D*YCSJ5pr@4@g>wM&07`fx1a4jBxDG>Ou?O!==+4 zje6Baj+ykYPGs^&k=p6m6oIieo_fU%Y?K*`Z5XL;+ZR_aGUm0l@t9Gx0{{Qb-E7_9 zu0rEwRP6lCmgJUqGCc#D|Fh*7PasDGBVWRYU((cj=k2XQ#+j)`U+0xE$dt3bdblu@ zw>Bn} %3I^<5x|qX50Ds=oAvP^)?-CQoWH#* J6` n>kww?Q`g9h?gHy-#^*hJW*iKv>DjOT9S`zW(>G=q_VklUgvD`H8g|MxfVIuHe$ zjj)uEPt(ynu@VYPQn9N<4P{M0a%Nn%zND-W%f4Rlon6n2Gu$u4znTA!>(}v;g0LAh zS NwXz2MvCnAb5lrmX(Db<~~kn40RKf jGKgHc0A>GSUoX@B+ 9`Ug7a+t}UVk@S?iQ?
}m5)R^AD*dcAlZz1&OF&^VaeP)y)P^Bw3;27aHQcE2%Y&C}&JaooCK ze`e~CJMY(}Nu)worAMnD|NSQrYUMokT|W;XW@zHftl;l7pBv0kWPM^VA)`G}9yfHu z=8Y8Km9HHi&jRCc?B3~+?JUR*Nl`9uGZiB@GQ!crPFU9mo2CWpm?+;`sm=Q(MVR07 zXQAZfPCteZyqNmB-;W>E7i&Cwe36YD{ozMXos%NM!iTr19K)QhNW2L}A9UN@Df(sr z@7M!3i51HHc;3HwOQ8wyi-lp25e9{R2KtIYD!xo$g+T!Rndzm8W*x EsnI6qnh;tsg#-@2|Kg$F5B}S;+*cyhL hHxiAvX!=e?~rC?2wNunFU>0s9Pv2a`p4}Pfp8rPXTf54SLQ` zq;iL_A(`=lQ#x>%OeBD$WwQP0Pk^M{owPPEg=A|ugWNdlV(757T;nJx06Jto)~-VA z4<(}0)^ULECjJpnOexTEbsBoZ^jzvnL15nL`4$6C$0N)QQFty8UGW7^Y%0j!)L)fi z#gwqJmCU3S3E~xiI Mge9BWnv~Q-xTJC#I0v z0YDI|&zYrMN-@q0@cQ9%ZqZYtYTR~2N<&ur^BvuJy?2=qSs;oMSb@pU2YRfYvmf(Y z%k&JhZ{NyQ*7>;XkFKyvbaNAo5rXc27m!PRu$W%m5(BGnEJG+?MuQ5vwfEukdo%z> z((QmY9-sA(m^gMhyybeU*sI9@mGJpmK@(5_szM5Neb#bT-kld|$z{T&x?UCGV}j$f z70VoKXoS?MCGF3{@R;;J4dv3}xv>tnF=x0Wh>7xXO$yLAW&yA^Og6{LdBpi)#O4YS zPMK%VtLUc)U-3m0oxOgaff z0`Tqci^tbGJ$UjZGqlqUKQ0h+iexeO?aqqAVaoT1{SxZ>Kc;7=q?^>ho(iGhVKiz| zc{Iul((%z`wr|@*LXHfClOr6QN(iv?gjX)4nGgIZ$H`z|bXl4S`N0p3+mJlUgNsb} z`N!9?&8m4D 0tHKZRYlG9^RUJ ux&`}>Nx`2A48qz%F zJqPK74B^{~7AE)|5A1%5Q7wU2pDeQzVo83M-KQ!4?}s-u1~ZwzYXK>F^TZ`1w{Od@ z!37na3KM!kgHqEobmFW}8|p*F0}5s|foIUG8j$^-pA+EU)?!6J+ FPPI95*2<`myjzvUlC{D&knnMVgFZlmd&U5v8#{ zW~7dn+;8KJEUF&;rsW|a*-F#dENz5i(D!BAZ6FuW;5x))*1I8d7Q6Cf+FDO(Jv x^O=$O2w_;V%wR(a2!o8zs5BRP}q-5Nf(@mAvilCKtcl{ zQ~%d0C(@+|cIAkDKMxePP^x@% 9PQPXQ-S_qt;1(+Z0Ydw$ z e83iUWTjMhwUac6**-~5L zMAR5U^;#$kt}2HG*URnc_|k=4a`WXpbf=S5MK_MnCe18PyDQ9Uvyy8Z#$X?&=tOm- z;WQcyqoJ7O615UjCBWxBavt(sD65r@bau;S*~aq+<(tDP8jl9cH~~G~r>)jwOtQes zcrmsxtwx)fEi#Ft)8=c({ZX#$Gg#$u0xoLxaRQYxQ*?u%)p>uDiHxZZDA@isM(MZp zc9$quoengIkysua)l$tlTi$sD%u_0p?(NQ_xzeh)reMm~Ka%{{BcpEnHF-jYfSa zLIJxN>(z@~kNb1w={zZ#^hzeL Fw>v(5p^*G3xP)pX zome;A7&i40g^*u(pf6=G`)hQMfi+B@kE>T6A&<+ 75u_wiuk&7Iay6rheZxvZ1>J`(s_#DALRMUC#az}mM)L*lFAJWSx_c27) z%Jo+jJ7aMeb@RvuB4^;c)9;NGyW7HTk29ETh|CDksF5zo(Eky-oKkKg01YN%c DvzXRX%diWjq5j)GU}C`Z>pKYvxU(P0_!Ygd|QlgHqe z%>`wAAf6o2_a0y>T1>pmSFacBh7Z|sQw%y+Mr4t>JpA?I!n&>J 6?_|R( z>L{zJ|I $B+=8}^+24X wx%^oNCunfO6s*Oa#X$iWTzl@j&Xzu+Q@)&~ zz|=#x&&V$XQ%>fFuhEO67_bVgmwCpU gqW3B k@0Ge7HHH+a?dT3b*UrFfuDafGy-6j% z%=NhNM6kYJv1oOUw0m@no)j#22Mkf!LhY5T(>!BBuPv*mU&dnk26Fvmp|Uu2F_#`Q z31QSa?;~uO9y&6g`+e>nojT1N-fX#u4tIUx9rO9S+@CBG&M6!o1!zezAB|%9K(olp ztu_zh3wbm%!9JP7Dml?DsF4E^_=)dP4`nvgD+?xK)-}rP`p(Itvd?|HZzis=0$(mT z=gT$adC#YID5;HHGk-5PNd2E;{u;q<*c}j7Oa6tZr`1Hz1Ht^=2;<|s&8A{}%u}Wu z(*u@aVEt=V<_XI4K<46X48bg<*w4dK+ku%r1@?nlFH=To29%Y#?ANAJ$6e{7!EWP# z6gBDMarW>^zAF`i&7e@o+YySwebqYH6?)dH&8}>z{ 554u zFmP_0UfAoD{0|3Rus7O)ewta|^e~>q_vVvS45G6D11vE^RJt38GgmUV4+B!4WI?ph z2q-jtE$4U{GRlcIbeJce3A!+WM6WiOjnrQX5MDN8`r)x@IIF&PQMSzLA1vX_8XP;( zgp4r~5)xBxAHswZ7U}^?aTl=c4D7FEV;=IXnOstpr(dNK0Hbz>)=t +V2t5-EP{z(CEe@5WbTSZMc ftbGnogz9H_S&@s zj(>fkbvvidZ}#PqxGV95n@kJBaZT5bu`pST7tfob1*5qfD3|NpESjE Gey>Vb z8<<&%Uwu7(yW>gc$9Gp%(HWo~HyAkHlj&!OcipPtaXJyQn6E%hw5HX+@~>7ATg8s{ zV}tCEGh;E$;e=2NilGRdS=C^PV>*4j00#=?$hXHJ>6d5G(Su0uPRFy!NJ`m^lBF>5 z7YBjWOm1HHo8XS;OOslI&=%e>sFVJVO{W89^HbL&?0}ZhDL)Tn8*qtmt=fm5vqp22 zlMnlf>F*<0e+0FZ@sGovewRRApi1>xK*a2ve+^;OZWAq(&-|>#B=qB
5b(U1Y|-kvgkFa%zk zT14pw4^uLBJLHA72 o+(p_&TBnO6yC5-vmE4Az{JCHU19`qIlbFc_sxw9G_ z{d!D4RvYxih=!g@)hI8!n)P?`$8kCv 1(;>%#_ vs{yt*Mge7kAO$R)$QA6e+DNkL==j DBQpdiT*ykZq9GSR8WeO2fIuI**o*`8^sG*#VA}9)vY;71ob@h%j_4~H% z?eeW{&>8aaTz*G;Pm=@JD`cw|)lMqhkiSO0$wX$5MbPt7l`&Q|T5orZV0S^t(+x3o ze7w)@czkREgKkzZr)QH^)z@NMug9k+aLDx7?^z*bT)6vm6&pap{%mM9d5&Xoa;bT~ z(VqSR!9mKN*{NuZLvFp($A%iaD7~}xu|#^VBQZ5Lqs_$i{7|H{fzWiM;kR^63!!`& zm}#g(k$#81Re8!{EU5q#Mg!Anf!s2o6B(c5hrLxPwOfjz+XeMY(iFK{3?jV(bv9&uxhgaU3cXK>dR$6e1`qnEvSwK|bc>8u~FXT4Ix!0EmO ztlK|W;ctBJG_p2(H*SVRI)8GgKX+Vck?`m@h-ZCl-)0 c_>e^llBcUa(p@$!2 zA5HNv7ERG%k%HUjxje3dy_=lE^XXFZ0V{e*ohB)Xl68!FE$!zRk1CpRLqWq}UWLJD zMnp_Y`%tfM7b%zPsidMv))UmT1dP8*>?70HI3nwCO2XRXR8|S>693TCboxiW>)61a z>B(cmQknRfATOy`_6OwO&8 Zpp!8 zT5cCP3^>R51Pmx-OfFu=`ZM{(U)|(U5l^3k$vUa)`%W1ny1 gFl1x+@}DoW$PCu-{8&_o)1`EN&4^|gk=AvV5MkGV?@Z%8KM$3C621wt<( zUWrK<)D6}fLJTW)>Zri4i(hZgm5v~E#=lk{3mmV@oFE$Y*K|^B;Mn74xCGG7v68+| z)ia+d3DEA_R_@emf+XIJBH|alI_Tn1b+u_YnWZ4WxmCZW7u+3Hmz>dCUu{0BbgPZm zqCE}zc2O0*HTr{)r%nN#`{svsbB*3inOQ8`Z#=HJ^XY0nHk)Np+JQ#Bhble76jpQU z hZQD|y-P3-PWtjOD2zhSllF1@rPb|a59pJ(Ai zDs#z>EU-tDUwlUi5%VD6k&+#lk9s=l{uDU*CZL9hNzszQc0!=FAus<4sr)cr?%}{y zxE;se+j0d={2!~3-LMCBv=zH(WC0Fp{jSUX9KbZpFAlP=gAY!#MlDp<^@mW;Yo Bxsdg{u0L^h4QqsS{7`;Mt@FgvNX|;^B5pw+PS=5Wt_hqoP_E`r!tQ~;WL^h zu9rBqypc$iEnw?h2gc8$2RbXRDvkKH6%J(r8yhYu_nPlV#O8DJc@el=vemcXjNeoJ zMGKF^+`j;&6IA(X DC!p;IkE;>Bz(9`;12jS9{tm% 8z%$1BuRAD-!kS3{NfN zh>P~_?`p7o#O#QUrSyg}{sl}=<-pGIeF}srtex3|6qB)6fk%8x%jN7fmRPbpmO^Qp zKaeMy34SjTm6`Q6XF-h 5q6$|~|n?|>#?ANGDfW48~uUV;-D^O2lX6Xw+IhNmR zSoEpDlj{#rO$Pj7g9~akjQ(g-ghskxRCrGRvl!}`F`3URG;a4_p8V9V(>%?=YV-rx zMJoG~&lT+{07D_C1Py0TOVmBOcYb3?VE+YIe)X~bZX#v_kxeENmEcP_HluEiRG?sX zHxTEa5l*siD;y?9pU_jd0_+hUP?*Bj712THb53fec}|mVkAj%|b%5yErA1}&*& m^Je! 5B~0>s94lD9bDnRiWFGDr42~WiHj80K-Yd|fCfKX4`uNpP0QO3 z$ykdWJCCH^8c(WJ^o}xyycc+57)@6O_GTQ7+V!wHXCUWSa|$42cDa|~wvK;Vf}7D= zb(EWjB@Le1iOXaAUwqvBY{Y2 A2 KI(h*l(sn5BQ@(lbI}AZksO-PTfSGd<%pa&{8{uxO4)2SX<5D}ynq3?~1l2a&E+@EW>^;66?I8<1 z@&r2;(@&Sj2j(Z|dEWH&AcECevb3y$mrmEmm{0_Xlj9X^H0m2VKbL>{TZC^dOsHZ{ z-^{84WyUYoalyH;kEyQa93xTenQ*ruS=iKIdPJs{Bgk8jO)LrH35-!$!Q&nForsRt zQ#{4XiTvxcInw4O+RV{tg2JeSOHz&%^Vx3-xbj(t-fH#;6`f8!^7Tv2>_I|KGm5{b zx4eWUlS_z?@lnX|3JUT1V@vGEBz~h)n 5ntML?6y0n6(4gp!6ye&6 zb9WyZ74MfV7=nZeBQ5nXDa@46RkOBFx>n4w{uyO)m+m8k=nOrndkJ#%Bm+4FYZ39) z7KgR45-lCH6j0*JdD`K*_ZXFkLeHdApbhp`ISQVizOqn^itc&Q0ro|cX~fdv4EzEl zz5lSqIU@I{+^Yxvyf%+!X0P^KCVXTbWSIz@QakeDPV+aUs}-7QKk0a+^A1(AYIpI) ztQT+ t#E9t<&h (Nq<<{M@ERzWDFc2xI3LoN8rtKlnr~sFA4w&N>s~*F@8nH=&>oh zT10qBYvVMEKO{_s;V_A0Zlk$f#u(vYn*)E~KOQZ#;7QEfp1ejq-JTWKRpOk2$qk9q ztQ5Z~-OnxW$T%9Td&S4B!tgeHsNm)7JDLl1vo^ILCGO7IHH?0h34nQ}s#JnDs#y-; zESA;YL9o~NU9y0IUpownZAo?ap_q)KkN$47^*bK74}`Zo8l}#JW9Jr9Q*WT=+BqGw zZ3fN8TrgQhYlcRRi5dLQ{SzJNH1Haa`a8@EH*?>G_0{J|m{4KnqziRgdls_)*Um&y zucZJ@yXF=-YlGDL)_pqlaWVp?PSjWGWHD}DM%4cM`SpYimn{mmWJfvLGg+X)O7TIT zFcho `fQz&ba5LWBn*pD0|6;5Xi&c9Q5=zHi2Vyg{kH)!ZYq#? zA0`LsdqmiE`=2nO(_9#m9pY!u(2DWzaHu)SZ{YZHjC0TU;B)NTCuGL1UFGFR>0I`% zObjzmQc{?q5tI#ASzjD*sMYlJ#ONvlyo`vFM-0j3FI?|JwJ>W5za1AFCurV??BmI& zZnr<*AC+Fkv;J !&6LT5 zHGcZjTUPws9oVzFuzO0L);XvKtC0og3QCfWqbVE@wFONt#ZHd}k#3)ym`n)2ZSRR| zve`%zt~5rtdL&j#%BPH}?)oXS=Nmfmh*S)`;=O7%NqVzAjwW)TR!0St#MgTa8N#Rr z=D+07N @Y$VyESW>kI{+0S0Gjllc^2_I6GY5P zNRgti2eo}19~S+m|6^ZDGYs4O4TBfIUJ(7`4G_VFn~dWQJf{Qt=Ytpf@qwY 5o`jRW?*(s@2bSi~qwtG^8{oYnQALI$Kre_j0!jc^AwMJ@52mSOZL39%LA zGNp&}mbZ!8y&vjkxqiS1kmX@fZ7Ke+gm`Fa_v1jF-pS59zOa6#poD`1Gdgm%AY}HI zo{)2e3|x~=$X-bX>!9a5VkFB)NCEh`rp7#1SbXC^74?C~Z@%_qxfqJ=xxKpBoN}g| zFgCwe?KL!mD}solyQJ6qj_ KmW(#8IDscYjf&W%TbH_aG%r1N>724wL*pDbGs*oFro{83`#ba0+`PE zF*Ey0vk0x6dR$y=-reVTZ-!>Y_n4M&iUJq~$(p7_mjv_52w82@h=eZA*4ayMLtTg@ z>P-dvoGW#OF$axqfj8csvNr9;SDt=~Gj`G;C&OT{Bj4&w P%_X`5&w#12ONuuF3(-!ViMF3tu45>XLu8L`o6z6_ zrK005#86_m4&0e6PXs$-^oaQo_td^IBy3&IS^DU>KsHIH{>Pwb!R{k->>v-}497UU|GmIy=Yu(ipZztMGCi3jBX*-YE$JdjakzWA8VKTY0H`4H}N z=tFA0&V_D-;m6=+9SBX7)1FHO@VfvFy0Tv#clvK7b-t(vWAJv%!n4fy8bGD9tG5@Y z1UvWb8{Uk^GyKb+PFL$wQyMIDarckD2bDF*R8|xTNH*NQ517(tPldjcN>y7+AL88j zW(uf`bVSUXZrqqc?o5@|sE4wmm eJ}o5t<3(xHbAhu5vl~KNzyWMK&42N z`m+@$w)vwV7zfgc119_tdrW>b13vqZrmXVDHj_%PPnA{{zjBtxT2d&BeywX_fQG!Y zL6gt2%|b >oS>J$)RleZmd`UE{6ztxQ|C;CeNme2m@#XD6=IxobxnMA^ z{@(2P={eLkYY24HgT#R}n*I5mk#yE3ZD(YMFjZw|g86ksf=;i4B7LPP-sQIP%odTS zhk?l3scj5lBvQ1*YL;nwBQlnpsw}Q|*9wHDj|1UjCjuWQbxa9dytH!Yb`b$WrjLDw zI1zruYzS@igih9BRVyK%*FEcW!i?%Rv;wo#DLLy_DRb&&WSXNWO10eWN}~(v^vXh` z vLQcayx;4jrhMa# mX60Af-<|0IW*Qd3)PKn2mjY)rsJ!9 z=+Jk5LDM;%i6vn(r$@>~vPaWf){ciS7$4y=-LrvXR16>s#yy6wDo1`x>0I7lcVK}p zx+*1i?Mi`U5&^l_qVOV}1XG5KkKmxsmA5dGi2RPp0P_i%K-h;#r@*ip! 1_}!S z|5@y`DCXNK@AG^HRh^va_uXF0QpStA!^k$NIlr*-N3rNat&-P^`gPhM?2DDj`p=GG z69)zRO>YlST*CH1NOsa=@(Mp<{AdN6L*L#bB@EAMLg#qmisVO*KwJCtP&{=cHX-st zE%zF;Y<@)Rnc4;Y1cQe_@z+tiBc?4nKRMWH8|aSeE)JYsK*0c)`wghw5c|06klEPW z2Up~zuuzkt+{Jaw>aG3-Jp#vJ_Z9%_Oue=@P`4!tSx+2tJrho-Q~Q(IXw9pbi@mbn zn{gJX(U9bvjshR6aO|}81y|`;K}YAqhvzV6gn`QTf`%T@^bU?bsEL3Dq_GNlq`VUJ z!0yjI2pNz;lekswxptkl&8o$K^k=_0wqJYJqTlJkd0@fq!}QOVBN`21Ci&1hFqpCD z+=m>9^h!qp%!$2R eBGp#6hQ8`t*s|U*s5+@=B{ltuRBWFqwB57ES0;kNXjv_PR^##CH@6DpN(E za!_&!F&I~wQ7xfD^DrB;@EljUt@*^!D2qGAU@j16U2okyDi4tBVT(fsoLY1Z3JC6x zCY!z-V@+H6*%E3 kI?B6W z1#h >LFD{fjC9}ilrM3MzkP8Q=LvNN}YnGpr;FgEWc92=K$u-3I z!G|eLApp^QAqg>!-yy;LMM**#8#3TMtnNQ5)w^=xv~eiitV1gAm(tLlse?_yI3<#f zrnh{({dV_0?ffc3a;M2$F(INw<`AgLHRy3DPOuB_$vrE!`#E4T5x+^e}XH!vOQ$ zJU-{V-?@&Sf5y3R-+T66u~+Q%Tla{QedkToCv(p?92G@5>#Kge8XgBQKB5Z_qBoqv znOyE`wd*S62KjDb7L*b-Hf7JCy+RZ8@#{z})XjDTt2#*2aM&F3y1pX&b`(0=b_GjD z??^w-gvkk*NFB)Gs^I!cnh!S+>OBSUA)<3fqFP`FWgCvUslTBy@4N)l7J0d!(KGA5 zq-*FbO{_0G>R95q+)w`rSi#kL`e#59bFY%WSctWh!x%Aks&=z>>hg^k2J}wrgi%6H z%_5{-ltHy6ZWF~g=ZAV;X8|HF)P(B$ZiUst>;4xdsir&M=ZO42LJAium mgW1EC-0yg zBGOg!G^a_`TZN_vP#SlFmAfF{ku0D%hi2!^hd73-2-Ewi10V 6g+`jAXR94!lErSt-B9reDqxG&Nnzd!9-BtxUva>nq z?e1L>qr?di614oC?=U;r9cz~0G^)0^&4gBG8lM OAL|+91bs zO%SwS-)8 Ge&Ce358XGQ?Wz##-890o6qvmni!GVI<)+x~O@Fb+`t}b}5*sPvG z*;ltCRj}j6>yvidM16Ak4!8GhT i9@Y(?{frh)YHevYbI2DX z@{a#HF@R=k$D!@P!lJ!!Fa?A9vu*IP&jV1L6{p0N-sZCwOp#lWMC#2%sYt-*qI=4n z#W;FoO|-Kf{Uqk-x%UH5VNo=XZfG@d(*kXB-jReq-N gxErQO;FtEf^W=dFp(vg8fsJ3tE#!BV3graN#Q*w> zROqo6K!NJ|k6!dCw>>+w`_&~~a9JN@5gu70$&KYD;b&3g9EX;X5p1dkbh9M4-T9pQ zb+-h_^7oMV{Wpmjo3O;9TLT7~juoZt?(YEI*Z2R}Yi7&{UTomDo380sm0yJY5 D*!P zv-n9lG?E@am+?o0tz+R}av0-_O*>@VukFlgOA|gyGptmKuaahzX4r9ns-jmQwwQ$# z##_h*+P$Z^yox{s+V0OA@skXzpSi%b@GBGC{2h2?em0GicdRAnG?mWbrc+sZ_<5gl zuDOlCLn-Zk!4U+dpNEqXNAJg$(vnlefs4?$PS=P(A@r)(6>JGzp%_*}@ GvWU8TKGI{@AXf{R;SX`K)+(I= z+PO?>Jy@%7c3fs${Tx-LqXs$(uXqQ(@h!EfXlS?F$L8-R$3vAbtqr6t04*aVRXir> ziOdl79fGK^qNy-~cwBSy2})>d%H42!Pc-<@FH3P|%s9yd&v=rV-9PN}!fn?B&RI2~^N%CpU> z(fdeVb}GdW+~n2#ySD^eDX+s5-;i@GP$D?4Z3Z~-GtGqj986RiA(*@9AAmrvjx4SV znQPvSgQb%j5g|r~2&3cKVyqgnu?0BP(uuTESOf8tmnrWUD&9ku_?l_zL)WV!SAqN* ztJ^l>t<|`ZySZtGSBlBagxG}5Q*R-Od-*cGdVe05gEBk)Gku^W@tbzz%ae>~2R}j5 z*zXwsal7_tdcPAQ3T9T=V?D(omfpe0O|-0br{Xv>W~g}lr)%Z3dXVkB@10{eAHxxl zyn0HotH7zR>)O|p^pZp~x8eL8_CCE>tHDQ?QvO44(o55PnC_>+_yK%K`|bWV^~FE- zaaD@;HB6?YUa#@G9^~iK|7dI3{Ai Fb+HeMLPHu6e?RbrpRe|%K{@nTkA0&@q(NL1miR-| zD?a&aK~2JuRE)$ek+~7V1tpMyFVf6N?cPk0^aWnBX%x{SzC5a7R>)ux`d(wqyz0nL zs~Pj#A%V^tqG 1Syh9_=CQ**{Fpb{%J&-{K5Q$>(6%fxwgMGuwwLc5v%EolzA59 zJKpd6yP*qj>;oO`RXQFEIf1Yv-TQVtC_Is^eIY3jiTQyw(k|B;+!zjoxaFupzTkRW z-QpH<*xw+{qNN_8vgcN2_wnCMN?!j&Lq*F?NAMWKuxIV0?)pp=+Y_H8i1eN^u1e$Y zoF+Xd?QW$-MzbLE!H_DC6EyS3^k|%<;gmmJH_~Cd=I-hgt%6lf7KxmgpWI2srw^df zDB-RwUSi~Yg^b9SmKN1KU1IO+;}?1@URro64y2~J7zka~u&=ZI;fdR@I!5ARKiwv= znC9k6#fsM8HV;(4b2xhNK5h4m0? jNlPU6p}HBx$A&Rz^Aej2%s|JMe*Pb> z?5_&*?-+lpSA2{oRRMEeFHJt9ZEFjSt=Qj)Te)!S@^<$_Y*j9k?ZiT_Ph&o=IsiOg z_Yubpc$J;F*|F?oLB-ujO9kxJQ`y8UR_%dT=l9_!fEU9R>__R}$=sTW^&b~M|3I|; z3xyx?vUGFQX72%rnY_h{%`v_a>)T!;qSy(qHHhL*)SuMusZ6nS0Q4oRzu+~EbGGz4 zpy2=1)$@394~Jq#lgb~%@nUVu-o$LVUh9sN0PRn<9=oaBSbf6%k0kvsugZ@O0G3t+ zaDXGXb#mKR!#kB#VEkcXjzX#Y72aT7G~5BFxEpy_Q37u=uL q^Zd&aOabgFNa5S z^q+Sf|8`FOk^wj>`?D?^py9zs>g5CS-In^;VN|}XRn3)G{O+lk=}fAh|FaJJKZNi5 z@FT?c4E{83MJN+duPBtNck)D{m(OI5jBVs24YD%ij*wgxA?SYqK?T2K0*-Nh9|@l@ zz>&aJ9;^>BJ!!A-NnO&F8&v#9;uzh16mS`OkbZM={KLBCP2kCf8(8;&V_=5TIMy_i zkc-v%SE=ut6F5Dd{HbG#|ET|8aABi{@p?=Wh?s_7a#rb)7t;}S47&bfkN*kbAP@mq z`ku?@vQ#j0%+}w+EPn#P>ehx5-KzhS;tq)<`tkHnzX^DL8h~sqI-9(;)&(HqDA>oB zF8~OBz(?VaHMm5V*pG-QeIq!^sMyXQ;*l%=qh&_}FF?1$Hen(bexRZS$1)KrpX})) ze~pSRZIN1y wnDPh78P*UZrfyFOP`XgYwvgq2_*sV@;M*f&NIxA8+$| zcvvEI<$u7L-Dn?YXmYUSumyOCV+?>Eoi0ysC*c>Fs9dYwPSw8S IO~%`G@KZdRSflWBm4C@Sw!41?t;Y$@udKNAWBty+9jRF&~#V5 zkhl9H%*qBU?vLyRSm2L{@nOah1b`Pm9a|5nKK9wUX>BmfhpV!t{K9Pb8c);uOX*KS z zL)7$?kyEJf%7rHYmu-zW*&Nb%)FAD_k z7V+;X_sY+0dMu;EI)I7skiofMJv_n|l0A*8<$=aQ9m7Z$*`)uY?aVS8?4d{5-Ut7W zNUPXEYgf^{i|NZ+jeFu8WQUQF)ho{z%=5lH{U7=u`}gyh{;L3_dID#k>0 2Ur-x=vp(Dz3lMSI`f0;8l8~i&V;nNub~33{ zsoG5jDv9;z1D5;q{Z#K0pj*H{==cjQ26x7UCa#|k*&L6`LU}J%g8^;6+9?;4*=gl+ zlTTnns %9hJ)!GEDy=|OnX(Z<7OqdH28u<49n8<$M4SM{pa`ZlErrJzd>l+hZy zJzL7i=Y=UK6+@9vvlhItK(PDYVf^2{xqcuv>@}9Dz$1r@i-_2Yd nP?5wR?6S&eM2lXfT9CkTkG6|DFBbq#hmiN8++^ny;ig|1HjA5gQ z1+rZ9Jm^}x!mz?w@~`rs_sZdIcVyKuwpLv~Kl&F#s^i0TfvY!JScTu2VHnrHNeP@Q zHU$kgZi~+35^(q^SiDF3nLy3CL~im=6O?>vNfYnE##*M6%>x|(--@i)=Ap;Rh=_?t zKy+2*c*UR0XP3ox$dVVP5)Q`aaY8G@M%4w#QUNsbka>RbTP;Wx`>r?YOsdFb)tzJB z3^2*2V>mwpO@K?5>WTcUckxF%nRNwyzp#AT-Mai#WAQBp-E3xzd?iK2LW4*kTNHNf z=>dJ<6UzKT K;7ezWB(C;Eym!v9TWZMzFe*wh zU7^&@-{Ly6oScext1=z$gNZ3+zxqw&OWCLqG8m%}W5?Kn8|jcF7jdpEXy05zi02#J zo8$P*Zrwu8Tm#=dkG^2pWnBM((ByIuthv>&9?QZ0h^WUzlWQuq>WR>7Rv=L{|FQ=E zUs2a%;1%&GtPF6-obwdvOqi~qzVz=SdOdxx-Fbr=J6GV{ag96~$sd-Cci6M!iq>;& z;R$!uVX#l0uusayv%s^LT%l|X#>&JlHA?t4L6=DZu<_^DpNX>jV-1=v@g!Z3K%82e zo29&Lh6A!5n8%tYSsl)EN1X}+>IHUmzVF@Kh7s0Lu%RNnf!q`~*rAJN>MI5QX#!^r z5wIzWMj3?GWHM-8g6T9O9=j8jSd`LV73HVjk`IK?88o yt$qFrX-h~ zkvd*_MFM!@3O>)S2&U?JP5M)#< @rZVv}S{?*>K|FGH z5KOZsQCMw0nLyZ855FE@DYsdWxIb5=3?@or)A9<)8vVYa3{FP h;W`Qhb*XbTC}Vfn|Z#@TDUtLJE2;V{#C`7_cj&It?LhN^yOhX7#$rQ!Frp0 z50n=#_Aff7*{hv1zP_YRZ+9cLrFo{>6{^kt4Y&mRwi6QmpA};N1PXxPgZHbE+DZ*& zRPwXtJ@Lro8a+-r9RP5#HI-wx{S5J;3ObWvsaQz{ztcUaQDb%F1Eg7s*+LuaSI71( z*5Z)n$Q6$xkjfZCR>e@1+)pTZ!m&Ir33CAhCA0a3tKFrPcspcQZ9N+=+P_!lXhu7Z zTSc75btPN%YTCxP=nc5@TI93F1FgY =MVYVls}V{D zdS{^08a81rcZFu>8lze^HS>@6R0@-KK{C`7>j6{XIQt)u6(r}HU$;Eyhtx{%><9_@ zJ%k7LW{O$6Pte$1H`Zc z=c#Tx18R6|)+KSH4|w?s1eD!#U5e!oB6(cImkI=|Y^m*GOHYEM!NUv6N$SIRQk{a5 zl8Ee9pd?suE5=7Lr(_meQ7(b!fDkDM`sYXNN&%_o7dqG1;8q2Y2YOtO;^E#zC#J?W zJra%3-8&f5lZlOqJ-Z921pH}G(z~kl0J3aYcnFnYhZI`XJH;kr=6=kCRNF&~JrDa7 z2VVltrjtsaN%j79>@AHV&Gg-wo1`4!@0H%e)*!0Ia{Wxea!@*BS@m ox6(UmE8hGP&r$hdoQFAMb33#^--Gr~@jWX20zKC*PFSqV%mL zzt5c;o8#%L9}gThAfXw%#oXD|x+e>_TgNl2CNUP&k;P(gK0sCSC(Y9%+M@fI?r_OA z)+v76**ECKEPGENx#sh mB`>vxsG0rXx|oM^Lf(+$x9pN1v0Fcy_E0gZBNs}eLE zz9`;0$?oKgN4^S4%}7{d zQBQ?jiPxi?-xq@CPFRU`9W}XJle3=KIJ *+y}F?`V?r zrPF9BBM4u3Jn2;Dm(zApC5SvLjd&@1XV^iZ5ovAOjqHj+y|2X>OoxJLIWF-;ujOvK zB+VEtJk76~^#j^vNm3~!5E2iM+?KVrf%Rk+PDJS6XT$&h m7>)Fu 7B58qKf8a&jKfKuC zIKCTs $5x2Gi0Jo>sj?k|kKDV0Qn|d4{N5^!xVJhdzlC} 3+~U)z%qi}@1wiIi6Pssk-XBEM4DAU-S8J^q!G0ifE~ z;oid~AE@`7)bEIWa&&=|6QVful{wG#?*A9K|L?oTKc{TjBD_*2
^ujhWSQ4yrQAb-UsZ*p7tq^=EY6&Bgvy%jMz~u)X%g-@*3R&RmwA+hGBl zer0zq$zlw>M~E5&lKpv?bKJ}b7c1U5PoX(>1KyN*#l9^b7utw)DY+Dvp5KkS=FV^| zuD8eVanxuN3T~Z!)HN#UY{Q}ocXH%tq9DsCm~n;VuZaWQi4)mX?z98T1;Z1A-&s zCuF&8)a%FVOfYEmYbqv!*+2R#U#oOYU##v Tf$r}pWkHLfMgMnaQo#$Y8-x~9!qStU8nZrP%d~^EXeF}r`qK6 zBgzO7gX4*(Yo0L=1_ypUBEn=iG 2Md5uT|Yv5PmUq`NZjEU?STb*?UccYR{Mxz4Q2`{q*xQ>Q=rAyruU9Jc}C zQ#3-k#B%+_m}HJ`5?(TE_mHcp8fUYeeuEwbBHqu}e`ymMXS^WoAniiy)VW(y9H - qWMB<4bxu25k*>ynqcV-Rr(zparbDY26_P5nzax*|1x$ujqh|SU&MU3nHCA zG}-<@`H$-}p!Xd9)?p@s0Deq-7ZXs<%@G6H1((C
6?6sw)#Yx^)?co93l)r{=BQas)19fJFw`BdT#84ekVOO# zMsOBFP_P)jL}mAW5|W5a%k WqFc^L)~zfVAE{=kexT+U#^6o#FAgoaqnR+D|q4tK_d`CCx(Be zrZh2&s!&ES7v~y@iq9_ef{6|H8xDtIcYewGJ33;k+gmcn*LY(E#il+0Xv~rr ? zXiRt5*n@~fE(MTTT>MhHX9AR4-fRC*YB$v#o%S{Y>fJc%j}~PdHyKx{E05V+t_7u| z$r{fiiGP!g29n3i*8dpAIXdF*c~?M!x|y22c+#4#VhOaXnZD=ylfBeT{o4MasDau3 zP3pTZ$^_p}>4P4lA*-0ZhzvG8=Ath6*+Au8RRGWnyd=XeYyG))-B!8XGT<8H3Al@M zRr=d;9S?^BmG?5ts04<-ch^cRytR6ZHDBa#`)$l5k7R~Z*eHDP;2&tA85>X Xao!lzCQRGSiwg+}IjBs;&TLCC*W1x)AZ~4Y?z9(gw>zig zIyjojlC)78VP5X@QlkyxSZ$6TBtV;L8X``yPJEW%0i#vq z(63xYgV9BfA~BGw$a!uQm4;0GO#s FZ`3#Y#LIP1J;POMhMQbD`kv<^{j4}hsHkzbpBZ{m zIpi#jLO=;0OTE(hJmt}e_#Uqh4rPuwe<-(ao@TuDrVT9m>-5FJYuT^gb(KOk=Bo8C zQ9BdZV iUs-Mfg?~~yKBYNM;g3(SImx2^uP63NeucmLnp2~d-v9+1wWnt?``4m> zmk6&2{^e#=m|iG~lP;IxYvGcR{a*0@b#a3COa6tcW!)-8AM Ksox`Vf>3*vI#Yh5< zCY$7w(~IX{jLJ1DNZ&~a3BA~-maZff3nL+nG4pX8GCgug)MY@JYxdfNveegmgPV~? zecO0hak=vm;r+Sb=Y4+mlmRWKqU~)vED?co3-)&(-89dqJV2 K7?AN1`Rlf$uc;!rby8<&$ zg3|Ux{(I8DN58~Ev}|R75zBV13ADwTLTC(JLSw-H!_3r*B!w4EaG3B*JnF|Nz%ni~ z$R~fdyTAX|2rE=NLz&svDk0lV`g{t3J5t3A>$lr`E|@8b3|Fh4=$9?Z9~o-kq)5Ep zRsM+{=r8-bmH3}y|5~(%fU8t{Qzn0(RJ)?fr{5DAF*o!VIVRR&7L*cSOd+^S=n3=! z(Z_F>qAd4oi$#|dSZ6m+FN7FOvC*RbFg2X|ufhJ_#vk2{07?fGb!(CSiQ|j_$Mpb) z`*JAnqJF$3DZnJ73jf2*`-1+N(|a!!_rHgb5TaoL#3QtBeEQoJKNo!GiTF41j64?) z*p|!y;<3Hnn)sa@0e|x+L;6K&$@ma1ESHGvm^G^!Dc6b63n4W(PFfj=~ z@DEESd9L?sEC6M6e2)l7N2Gnz(4Qn)y5$#Fr0;UHxcmSX1~ns3|8a2SKZ8eDzsAu$ z+YLyK3x7}b2f-7>`z1|+@%1n)Nip@+x>xdB=PVcwaaA$qX!h!m{UCg+8Jdo zfBDnY(!U5zMoE;hoN5dVUPiQk{inedaDUJIqGXHW*bD<;;qix5lHVQ%h$M=#zm$bK zAAw8_9UmC1#>f4qHNW#j`G?=&8@2`CM}EKGbodj$bAR!h%%Z-*c%Qlu-JySMi}p{N z)%k1Y?BlB{Q9D3a8b!gF3`Bnrjy{QB48K`q!`{F`1lV#Vn-uUT@yPtO!{wVdae}~- zh4tX*fLF-;mL8Onzb2;KCY9~U1C&s{r?wLPPaGuthl7y{3ob3MuSi_WroDNIg7p40 zJ0gY5a#lC!piG>Amqn{tcEAUbI;K<8!9`e5$>ES)BkcE!+94Gbj3&CO>@o;Kp$;av zF%PW=-oNzwMM=W@FSIvyr@yABR$j5Sk7R~Nq&AwU_|tI2+`nMNNbFFk)HGpW!#cw% z`F~3mKulU-;V`@RM#p0*fW=Tqy8MaS`y{|bgmA-#b>)A-bYEVW9Q{d3tAM4&&<{L> ziTU|uYtC|0|KX><0IL`4bh3U$0nAJSdNu<8hrLs40u#L>pO%CH24XfyrIP($^nW z%wt2Qq$XfbMV?1oj=!fRbrSIZlxJ-PAT 7J05@;0qhp=ATaX4lI&P#KYE= zA!I;Aln~#ji~aV8VSsyZLBSV(Dc@-@^#B@e2k*oDfrhiuz@B-PQ{LNf0z^CzAB_By z!XA(b3RdcA&h12ElVr}0uM(jDVM^-9O^n~o@{j;i!!*7~efkHsJTCwSrYe?TTLVA+ z4op0P_J 5 zzM`MjvZ|M#_aIBJ`dMSH+3;GzlzuRQT?culCCjJ?mD@B*wn%H7fN_K QJZXvad9;iH{YDB zj$f%h&yk^y3IA8+Zw)%&ogz}N1{&4A0|){Kc>sbi>BNEdqdX|bR$s0_l}YW*XEiqS z*;d_PbChtb{DlIy0fs!*^?kggs_L7ea_c3d+nDU%yR?GQaER1lUA;X*fO;Vgq)Cpr zuj44*wb1J1)A#eD1x7L}^?zno`uUl;lAE{pGh;OA=8uQ^pPvbt?P_ra$l6kc@zjRn zL}+^tjl%rMxUZ60fA>3ak3t#a4V~QFMWUYARG&u)#ZvUD%2sJs&SxvZ=F0`tU6ifTCV?K(`}w9)?VEaO@+{gc@^45^QUNH3e=B>crXjE! z v>f)?p*a~ z^s`G|jE!Qg>V2PYNgwhq>@IHg@S4 $o1G4IzXB 8B+41He zzC39`=7$T;+&ynl>)`GBk1LZaP_Y|0fZyH;bX#SgWAXI8w7Po2(Cw-tjb4+JvV!Nu z?oVZCU~H>*+rutbk@IoK(v>LHyz4#%29;c0%2C~dEz89k`b&^nD9CoRq UI&^ws=|ExBp4q!5j!O)sU57@Ap#`sI&JD4D}PkgpMwy=hHf|8R@r2FOb z9Ln86*o0PO5 9JhONc4C?7(80wQ4$2q(YIGELrG_`d<*1}T)JgVs}A6#kk^b2 z*DN>AOK%}!I;39LOSy0NFr9 9GyayDl1tGL@VNC|GVO{X-=C9Z #?*fR?u#g-}8UZ7JMyVZj$rLbA+HVA?_}27^lF zdGO>gFW-Giqg{me`anKTzYqe^^00!_M?W$p?z(>m!qVx0==L{nS-5vUimr~HV3rM@ zep0>K^tE{Xw4bn!NEfZl^ww9QD#yg#+uMu;@?ztGL(}I6cLQ C6`mg*tASNlCInFblT`zd~8%sm27Z3=G$v}ks# z2b2Y&w=mr~
_|`2$5DdA z6l;HR0(=TcKX{G}>@_`;XR>oEuckxW1#67hdZ|C)cQ?lQk;zkoEitIt8Q1i^f2f=9 zS$oG`T?stYSao42*0i<;lo+(@C#O0lu(htkYE?SKpA#N`!Zk2X0!bw7=(H+tNLO{X zu$NGRV39qQU?4(*FDme3x+Y08CCN;g4|el3^l|Q+i#Hz12u*<3&cD8p1>D<#{*izA zjQ%x%pCq}rpyR+0=|^_knqIa1KB@W~!9wLIVVe%lsq87Hj@(&j!Itd{8?hI~s?6_| zR9RXZO6DnCmaRZN1`Zr{F{Rb{pK$Y(sv^0SSO%yb#4GF48|u_)7VyaDV7jp#eZXFj z(z}x_gQ_Xj{KLjAqI`$CU>oM;qkQpln}hk VQFe$n3D78$qIth69Cxw0iNJXs+HyZjD0-7c&&5V jJ6jnWqwNn>1waFfsDhd2 zr9&C*f*f{B);I^%qf3`~wLzi$0^qL?%f-plPn<1@jcAiC#TVX=ooRy{5^HB-Th_DB z)<3>B3ol-#rOq6CzM5Xfw|~Jmn^R1<>^$K~oGi3zP<`f9u_o^dCbg6QN|BLVA6!d8 zmpMivnlXvD=@ZA|+l;I-U8YBcg8g9H8(gIBJo+|em$iQTsJm)9(475hL1Tcz0u|dP zE4x(fa=!SRY8mFOXY|%Gv#EJK6M&$JZyl EqReWQ7t!k53)+=)pj>OKj)^%=KhCC!QjHVit{j&)0rK(90XR>3nFrhX7> zv*x9?hHt^S$GNM5ubJz7k=G(*{BXbra*qzNvsODhszH+^R*;(Fe?feIwFeNq4l2KW zbj7d<9?{%zx6!M!NzI5BL7)JE@9#}f!!%v}ZvM}T$ou(qN*yOn0B(-ET}Chlx!GGw zoYWR54GosExghf>sy5%oQK>tl^#Z{&R7>@t<0d`r_q*1KHhpr`Rh%|ooG~)u_bGj) zXjCi=@|Cgrx$c$w=bfY8LKgF!f 7;zL}OC3{3qDpi7m_jK*;GKF<)t~Z$ zc|6mH50}?6H_dbSf`0wcuc`@tRUYX{YJHGoFdTD;et!ND4Jzzx?sK6wk>%a|HD2;Z zaMTx|@%!8`;E*MJ_PwFxErqmR24gQB@_YDJweYPF;&OQ9a+=rc% C)#QlW)!4)#VpR$R_~M*YR}$@KwWFDT3yQ#jPr^Jh}o{A-{#N1 z%r(1$AfsBeq`|)veiAm3CoR=`S>NxoAk3)Ip{6K!a+`A0w`bQ%z9B2N)o1wR;Aey1 zYFsQ{f9-Ht#g%!<&IrZ0UpDl|kM$5@-xxhQjf4=$Rg76WF;#{fbfRwlgV!zO!@@9U zzdvNgsk&v9qaI}QqdWLwZy?%K_Gu}B6O3+Y0D2sNUUc8Hq}*njG>L!ef9ts$roOE2 z)Y0g0nN-lIwY0Ux+7{Q_^VXytys%UD*1OLvMf$cN-FrN}8l}<6 uFHzj|%`=dzvErV=s6eaN4YCDzho5&ZVVd50ws xam?R)1BCc^WotL+j%JWE1?~v`u zkih+-3=(?GeMfIb-(Y#0g)i}4@07G}D_DYnXelitI0{eL@;O_k0`;eJyMoEI=8L#? z9LCVb$hw{hW=k?aZ|9n>KfZRj)GBaa3HJqi9E`SJhZW|iKR^bB5Dx90=Cn`4S-L}A zgUS*My$!w3H3jbP!f*IImaLfb&uT;=DdQUt`c>xRt7FJYK1(xs0R$CLpHskT9r!L0 zyug0gQd^7k5Y< a%Ya9M*^pmJMfE zSHx6UvBj!j!{qgv`%~;%34NBS!9ZU}%B_r I~Qea{0E+Df1Ca;3p$3~++?< d_Tu7MXRXN@)C zh1)~Y7CX1bE#G;jZvv V?mcvBwytZp0jlT}cko%Wi(TGdaxE7l#unDJ zOZTO4y6_r8Fk&+h;u?ac=s1rD1 aa5DSKoY_`=ZH}-m`Sr=|xrT`=o8sO9O2!v;|<-IBjegfftj_uU| zDGNYjygR7>x|K7?u6df6ZCwn(J>3Qxx?a>j=mpDJY39&}lOc$z_d+}`pP{hd;U_Q} zEY&D~Gu81opFQa+%zEg)k+*u6+oA6x)=M{TFQePoJb9n}(0ou=jJmrpIgAEzA`K1> z41k0{hkcI%qHIXEp=l@!vtHxioe{!A)Ra>CS4~&DW>JK7-><~V+jX{@ZGzhDTskj9 zuL}!ofnG?Nm$z2J^iR{&N-p%i-wfA-2Y-l&FrqG+9`;wZd9K!7guJrR0a0J<60Kpo z(=V?gQJ>ox6?hU?EQmMbGzmV*p02N}_vO8R|I8i181~=k0TL4+YodHPZNKURBp-Am z%vS;#_$;6*xi(==7jbFPl%w}elvmlvU*{W4@+>Zn>#b+2G^fiUDg)jPf-c(eIxDsP zsGrkJv_;~gftr&=`52WgO&aH+{uslhr}WkqE{Zh$L;WCE!+O^}D3@8Ju1ojN!{P(v zq7yB%`9psGw96zf=so%pOX*jL%XH%9!N~agj4zC4BXPuAcgD99qovkwvy?=d+tkyW z{L{~@grc`kE=V5yI@5CN63k~a+YZ!?zH$2=1b1P1rx@rcn>RMUr_yRQjj(}VogP2r z+a+=>(bK =A7LDG|X`n=<9Ylhcz5kT-KnwOK33jS?f6DEwoc6AJ#2Yhl03` zmsvq3kbRS2mz}3yM?%NUobDNYG)$0A(WVbX%4X7gVzF^PZ%UYR!ACsO08l%7kwJAs zdMdW%u|0jGk(&T?ff#n^2HJDbN|}qpkBb?P-ctlj+s&1HI(okP^7e zL#oNvSzY&=TFw^a!!rOyE5pbGK9D~}p(et;{5r&;=VviqKUQwz6ST9G-*k7 Fle23s25ezz!fw9uZ4An2HHguh*)f4HAAf97t-?y?*@3WxOg$0$ zoI>lgRT&@!8Z4j+iy3ikj|*I5+QzMgowX=lae3Yg(IN}&Q7=1fmA8=2!EC)wi^j5> zc!%BoM*7PAA!-32>enf;bINeOrMdhnaCcqZVuY$k_k~rScdo7SXnL42v!Pl< >~X~usJ7^h W3!c`Cw^qAgu 8iNRqm4mS=5HU@ds5o-p11I7wZ(C? z%2$K!P3rxH>uHI_&PKYc%}pL@vdd)td&bt2Y0)I^Ju8{XjdYhyU*e#q*@;8U3%l7! zRO)kznv2*6`k#BRSdA*SEELA>zCLDHuB6*Jn@?G|C-3xC{uLg=z)gq%c98GzeP}x} zY}gq27qpc?{r)PsB$l11MdZUfqGOZ2_BfM0{$agtr_s1Z>uS{$JiKeS4VXNWduCGt zxLDV?v}*kUo1wV p5~HBAM*oO;45AIdPQIIT32SR&bNC{3;Znhs);nX@_VR=}OJ# z&ZUm?;58tfVGdrtI0_zb_>OSWy|tZE5$Vsi7{8n`G 0~SeLpYjcvR9{{rxFEe3Pt&_C?%W9ro|>Ymc24Cv@^MwT?iu s$0}-q-9e)ODf1 C3$ZP^pU?0R zw}qd>Ey#E+LPWHEz{!$1HcjeruU*5U6$LafXkNMvK)6h-9(nr%l5U9sqzkk=IEI`+ z*(OuRAwRU=iR#-`!6KJ_Avjh -#y)I k zIPwVZ(V=C42xwIBEZ76 B(M;b7|MH^DJ@UiWrB5%4 `zvir+`Y)uHJ%jSvHCLfXZhYJlfpd)HMR0bZRiVHcueMF z%VE$qE3x*vm#2ySrX`pMAEm+pL{pwtZ@g&z&*Q5EUY>#A2z(o{vmZ~0hFG!vA4VDm zEPTU>5BMdXAk*`_R)8+?b$;Zy=RH$|cIdw<2tKLH98*^=kMtcp *2E6h>ZK+w@&5)-|jBPASKCRP% zf%C1Ybnp>EO0$5sqc-`yAM5IhHys EAB z=zyg?Z-}CNphct}N-;rk=uJHqcwRK+(3y6{NyoCj5Dy>n*B&Qhd{A))r=75Ev~$X| z X36)n}@}m^5mUBMH@0ZpZHD~uT;J}r15n6y(|v4>0k4o;qzTw zi{r{G>i5&^({T}bFQJo=c0JaOK9B<>&~+ 6Y(67}ezBi$MERO7vthL=d_A?tJ%G5huWe2h)r!(qY?9Wf5b3$D zef;q4>pC<^{L%*Gd+B(WXo;uik#%9EL(|eW^z?QOJ#`ghJHYvInNhB{XudOE8jA}i z=iIJg9Y%kq#-=;IiY~6({=fq!*4=j1s4?j+$oHh7Pqf@aW+iE)JM^e&COW92s;XhO z^Rc3AQs+Y3otbO{5jM&jwn3gC6Gp8oc^C6Z%WxBhujSCF9F*M$SHgz5jR?`@IWsx7 z`jig2bc0+=WeG2~NjMiEQ%qT6DT eor!GbON8Gu^mz`xX+(kwXm= V+rO_`1;c=wx7_Pz z>*pe{lzf?z1s{Zuwmri|vCE?fVXgI=wOM4Z;Lo7m`Wz 8g{~QHobVoEC1m# zES^qI0~tJEG)WBE{aJkAdwZGha beYJSYdyzusCr-q6+$1xP~blp z4!2%Wit`h8^{}6$Ti?pq@_@{Qil7xyUPK8jx!^c^ftoH4z!g|t29d?!KK!pO1{q76 zrSpsRbHL?KI_M}-hOx1)-r4+g1Bfmlp6BPAQJyQ@tV Un*Lj`iP2AWUk@?0&475i(nVJ+fjxEJ9oXn|w zI*4+p=RvsN1Ob&@fXU;+HMubpEti oy z?rPNn2k(7AXzJlU7=wpC$TfeYoxFu$0`oQBeM&aRG|!JrSopnd;SnK@J_a{dxt0yD zs-XkOd(pL&LMyla>oj0Z;deanA=G7DqErA+?HFRb$rLBHv+H=|REg(o?+EiI5Uc#6 z)D=WBXcm=iytT07Z_lZZyq7~2dH@qLU3g~P+_w#22*}4FIx{m_?R$BGo3D1Nu))3; z&bAClh(t+VFSM$;-0!CGBq8e
2$QCbs(dUzVZs_(EKN>;SM*j zJ@;1|y>(Ee=9kU7gMO+CS!-wTux`N5%J{FvDNSJs&3B;N`ejgpvx&KsCdiOsBN_pY zZxs@gPbjg^p C`h0G&HB#?X zo`nWopR1`v8}*38#rBy#yFq%_rMUN5WeU{cYSBDgx@uu8z9RpL-}xl5SL^5jdrCYd zyr?wx_4Lw$y*k*%jJWIQ5MZEHY8V23KocAx#<20CbZu9JXWh>lz>@}X?*1dg_u%H5 z5zHV&NFql3qa}~*%wp4~6X4~5Y?&{J_j}r{#t|i_?E a8 zq!CTcY&@*_E6nW!XV09H13gc)H>dh`Z2ASWU >Av0QV7(LZ92rSXPbkHV@J8_< zD#K~*MND6e>g%k(o_a=2&y5|=rV43jl6+e5o_#OL(mi{&>dXoUa5fZ81(CGCF7{hF zQ-Ts7chZTppl;waLSr)hr`7#3JwJ{b^MjO6Ez~arK2bP_oTfx`yKo KB?7#-+I^u`&S? zvroA-RkZ@K2GG!#JYAn5tjK%)rRqom_m%OrwPDL8FGq%q7WYs4l#~@q#LKfsj@`)W z5iPtB;9OkCNN`CEbQ_UpUpLdRP#XJ{WTAiPi%XGM?M#A{YmTv qNsK4w&o~bW9@N_kodb!KGsq-#C0d?!PJEmGuGkshB0h0<(ae=|P2=%g ztvpd$6KoI s05QZ&d0)H0ZoN?t^y! zTJMch6=h9I#_nY_;W_7(j#Gtx5s?YWj5@EN(S+U4C!FOw{gCc^;20yDc_Sm^V%y7R zjrJbR7sS$7s-Uh&M!}}2vsans2_9*FnQ~{mi%@9qF&-{S<*r*3o)iU;a`uRUR9#t$ zj|5o&A}^Dj9S&ufq@~4g$Ii^K@Wh?c?bvcp3|J$kH*D?{JJ(!uXP*m|)li{obb{QE zk?G`Z*!D`BRLa1v>SBJZz%(Z<#fB>U%4@Gvg+f &ParDfZJ6%2?hIiFmp@mYl}d#X10qMYOpysp3gFNVn*vjborg>aT?>Ps;?RG~_q zH+>Eao`kXOZ|t(D2t~>MP=cpNap+o?QXb&%2kN;e?uvpX+^t&`!Pe>`eH}T)-##%K z={cGwI$ted{gD7p;mXU^-xjiP3Xfz@%iG=6)^Cb*i?wo(pkENrTb#bOCOreXYVaX) zGQKq~lu6>U$8vg}eqn R{;CBd4GO liOSYS|acOeb3fx@|69zwa=G;uo2 zdcDaj5wGwHOI+gC^%gkY^XeIOxG0%i1{ve==s%d;1e>yZv$q}>T<2Av8^4NATi++y zkCVn*W!}3NbFd+b&X#Ni3|Bm9EwwSZoV6fl3uFDsG~0K{-7R=*f=O^Vsv^#7boUsP z@p*Rve6G$0KA2sZcN;T2b`BjlS)i14$CmR!Y5jg;t<>W(g}1a< SrRF*g1Ornu >HI2Sub}U>C z6@Tq(y=uU|rtNBd7aQq$LNF(k8K)X 7iS8N{G*BS R|$M5^S zu};3iWnz+-yF0C~pRKCiw-i1{D|C-XM?Rs5_Z+M%hF{a>9%yP+U(ti7FwQN~;kDi< zsoWnFW(F#cPZw=tIY|2{kkNDJ!a2oj&al$@%^J^z4Ddx`0Hm6lG3fL%JWg!hB8 fYl$AG72d>@hD)kWxxqM>Dx<$_|D8-K~&d=a_!#iH`GZVs+<~d6B|@FeN|{B zQl OgEq z*?`Av?I8#A;H4do+EjH=WT8z(TyYQ|o;bKbfW&~87wv`dR!ni+07SXw#lEv`_|>to z9Q4d_h2`gY;VkdX(4?ibfttX_!bRpsa*3Pp_b(QaOUo|;VK)2JtjvK@#K3_S;Sb4( z6f-x%1kdwtBEqu<&DPa*0d|;F6!n?Mw6&t|w`k~Hs7^Y?EFNNYJpSviM$+NDv&JHV zW-af|d6J$MoZw?=^AH;1PJ~9VKMzuEK9A#IHtiB;?=?ybpYsM>b1bicV!EvnWMEv* z!5HhBp>33U!(+(nxZ&;s_MJKqiIXS8qVugj+UpjmH=E&*Miu-m$)}>XWRQLHqrHrh z2si@}JQVfp&QiSHz%$3WF}61+VcQ0=9Tpfl$m0xcLarE%Qs|<{Ji}26;&Te}3xIE1 zuA-~AxCdO5xZ4GWYFslch%GlB43)-WU+g=bm-P&Cc{Ppd>#oLjy%`PQL6wVE&)%xe zYW=p~2pz&kqe@)keZ8Vr@NQHd4YbW#MdwO4rYV_7`-_9mLa|!Wbd+x!m1zZJrDVRf z4hHU6GM;#m^%q!uRSd|dTt&w)=mvW-3$E|%UR1An!RlMbdSEQ7MS$R2{oC>I#FinM zrZf(=?6!IFJZ;#yfe%_u->S`TPhvuja**`uE8c=Hp)pxUp^s&7!I9?t7-nS(&hJf~ zj3iu!rpm&7JK^yNhdM3WzH7MWi;)_rbO3B7swiviuh`nI^-(q>OOJH_y-u`mD(b$s zNA03z`7{cW9Szu=-!hyRHtdB)lN7jz+Pw&pVTMt4Ft(CKdExq@BdKZF8S0;P$(%+zqF@z?pEBPG|-wh9pX4k#7 z(l5~q|ITaPnE2wtq64|avcf4MkcPIkuRCm%ZNTR!8 g1|I6 z2+uCX2C0$ JUHH(T!{H9ga^ zYyG=-vjr9t0H|+6Xv@|eOGlqWD<5#n;TiP<`d$+T)v;Y^5IP~enD5xS5AI{Lr5RaA zuJk%pW7fq>)}OzO<;MG%d>`#vYWQ+(gaBkoIX6xFs0&P`+9tKn6}+`B@H&5j`+=&~ z3ydo()3v=RAcH9B)tfPNIiE0c??-PVrzCPja~nMnq}?pjlQYpcyO!0cbfyk^QRdUl zsuk-+`so+vdQ7lR3ydy#dTbOm|0~Hs)^T(AyAfe>a^I`4TMd^FlBH^*l+0do=oU*@ zd5rjL&W^SJoxU})i;)(KbpCiT$D%yZ`WRb{7=dpZfG67g*E;OCJaNZn!o2qK7DOm^ z)h=#ci#W~jD74CNaWd`0i&!n>t=Ds9fS2WKf}}pqbaj5wCpq%%iv8Dtf(Pv Vs!*c&Je#t7CHwq;hF<@K3g zxd9Cfq*B+5%8Ue3=w8?hpMrn0Tdtexka!@&uDi4dgrU`~g^!z82i8qY0cmlknP7^N zBezP{m^kD-fAY%iRTwNO%0o#)kO$t)I+<=e4&swPdOm%GHlcWM)b!@LKfYQFd}tku z;Pm?uN7U(D0KhBCS&6J +SoFVU3Ye0Dz_&X1_ai!mWDKi>CIt6XOA$R8zyWXEO+r|0CCF> z9Kyp)7WdFQqbDoFA;n;nM9DL1B0g13%7nXG0U5D9#L=BYN4|ZRz0FiFU{A^@Rr#sX zcIR%r|6@}nf4L10^G;gM=u~t^r79?5zhnT!IMf-*QCYv3!*E}#c%;LdNogotWhwPu zd%e_VEFEdVx?m(4OdPqilUU8cq@bgSj9o%$Hoxh)r%j;NNRp8rF?2XqN{bo`AcxFp z9o)vXxr>-?djm-y-{y7$x4^np8x<6>CA@}k(#)
j zphhmF;LwX3Zxhq%_nWaRD1XXcH0f!uy-K#gMCl?Sk*X8nEVM(rhdn?fE_ZCt4~m>c zIld}hUmh*WoReOLVTzwQu;>5K>rAB#i6%FtxmgCvlrWiH1(?(Q ;_{GoWkSpl zPoOb3@yUI Oed@;R``gy3oFAoRXRbN;wjQfV6=~3jT-hwS_!^}q`!gst|6Exp z%IQ)-M#cN(mltVjV s^>~CGAz_N$wTl|neJ@(}wWo+u2AITRBDmAf6LIc?= zhxk}Jo(D)Xs?h-ghsnH8>U2`^VK3UYwa-Q mvb^+?5Bz0@`g&G*;oPf8jr6->!2Y$CGbTz%D{|ijgKg^umAaU89SLaQqrmw3t zzNj9r^&rhPeU~5&AJE{E5Jppf#THi;fX|mlpEs7>b?H^>x=VK#k39J#;mrd%+{3s2 z^CAF-RYASqFLCw-Q*Mc{6aUU(cGS|}C)DTLVXg0PSk-w@R*1S}(NRW;8_rwDxfI>w zWrW?+d1g9d+YwbmVA2&ydv73vV$-QONR?9q8a#!H-n|8+n)YG=Q8e(_#@US7lnv5G zkk2Iv^fQ9XIWAo@Vy%gB5iL4{Qd>J`(_05NA`b*MIjUqccrns*NAQ{AK-^N=jmRjK z93Yhxs{CUVf&E_VF&W2@rZ&+bA;ty7PBid?c969z-tVbpx>Y(D$ pQ+(EDLz27V8f0u1Bd7N_dte%AV;FaEZ(Tbd0CCjpabNHew)) zS9f2|*Rg~MB3>!udHn_gf}Js{03cioa%g48%gTDCtoH_(L?$mu>sKJj<8wannU8oX z;4rI$F7*n!$2g-cnLH~hKZ{G~LQk6NR;{g~FFal2Q+oFrR_5KRkBj+YxxF~1vkY^Y zC<@U9Tzz8 ?3^rz+cU@qt%QkVJ1}T5b>!jTHm8fzzDQbMiJuE@I=_ ztlVLeA!&K&GXfuLcF?S-X)H{LfIPILg#LU^L*7 zC(!8!24E%a1HN^vEZ;#O0G icNQTp~qqxNsN^T7A{M|^Khb~?F!;aakddiLvH z>w9>wg>~PY5Tu^t(4FOPV%5)WPiBopdwS@E4Iki2W6Nn)>Y5Ab?m9@^fr+;jf3s|_ zBYUA~ZejKuroy2E{k7i)dS`PDMx1ds*v|H|cwxqE9i4*ptaxM~>Ge}}xKj4va_n1I zBOglot6ro5C%WeT-WH944=RnUfSYjonML(nIQB bm`YrvYTl>%NQ?9LV zqFiTqqTi_(Nw03NbIF03m3FUlk$20XLwh}m06@rn0e`wtq|faVsb-BC7xcxjWp{O< z)cps)_K1-9(wpd78PB>DTR!nDZ_=EA%`1m*Syq~}kA@Mmb-h+*(7UcMeOHqi#K x H 5^=vsJj0ezmJ+&0oVp;LTm?p)eTd_fjs58T 76~lI{je_t~I~YUq;Jc-?pQb82CjA;?W&55(o?_o$ z)+R~R@3w`p33sHC_H!U1GU6qop0zB5V{hO-6%Ig%x S~7D!%IPM zXh*jaLP-XAnny{Q&YXbf1V-4q!}Es};Y?Kyp_FEGbcDo#TcPqaNf5%ceo|zqGQ6BY z8J)&&Zi?);*u4`Z*0A=Vw=K^dBogj@>Lg$-lepfoo}I4OTTYxS7+q7j9Y(}cBc526 z!ZPcM+SAb}6wUR8`T>t(E;YH)oD#Q;fX8qBZ+Jj6J}Do7q%q_AvhyvMRu^^9eqTK| zCQS!s>3tOqJC^||&7l_72TBmQQe|iis{Z9Q(-eiTyImS#OlNOqz;vu+4{FOBsFl!l z78H+sV&T=yK#oleqP=n;ChBocChi^|HTGTMkt59RhYu?Ni9`0}poy`!k4UYWqsuAs zJWLQ#NkYCzJRjXoAdm{8O>kWvGTeZq?gzXA 22W8@oyGjJxA%Dj_HMe;4_Jmkb zfr0qWd~mRJqEtR5RDHU$TgdQ(cZe}3^k65f6m(&hw=;C(Zqo{bUw!NXMl@xZw=cGR zje;;&6xpFbOsd@zN^;*LyA`KhfS3BDaUh
D5LOu;3J98d=P3 z$B6L8h$P^x=?{LSA70uMi8JKFfO;pJIuu)vO8LaL-@Albfc@abYM8AW`kwvs4yMw6 z xs-I{jXJN*=(HyotFr_&&!WpeN6nCYp7cEE` z%^*5n|1gv8uz#b(wTZPS@#+d&9n7@4lu2*11PL<((CNMT^1W!ED9PmBM*)z&fMjSI zNEhc i{$>aUk<~7bKOBz?*chh%KTAnE=)840gw?FD#qSf5PWK;0h zwK1RH{YuQtMF8}a`BC| ^?D3YjlvOzE_^Paj>v7%~BW1Ap>wr}gjB;}+j)UztYhMS*v3JJ&z&VI( z=`{3pvHLN6BS1GSm;|LEov}_CTcEOy%1&-w=UYEiBVB?+WxCH>hD0MfqhfmVrRb;{ znX4||ReX->xrqq81S#!ST8p34xQwQ7K!Q^M`mobci0>PpkeY$cY|%JA4BNL1yL0_P zsuV)z&25@BX 9WOOe0_u;*+RCQ}!40o2>ShJ)yBtiXExQnW35BUIH@S zpF;Gj_4BCFcE|o9lLC*-0&O4hYfhmY?N!L?(He*uZ_ZP?L-a*&A#N!MNM-ei`*gW; z$!|m}n^{M&I^LO(GhD0&sFmZ1Z1a~TJ*%>9gfZIu2Dp{h7t4){si8qRx)t*NQ_Jw= zONXh)`X+hSgWm&DMd{pbr&X8)NkFbNlxB(%ft?nToyr})-qk5~A`@Ug{}A z{u#2WyuAN72{xxb)4r{(YF-&C@}1!qx@>v^K$i!Wu2pjyoCbK3o-lLeSeLU8hHtn= zT{Ede8jE4)MQx^H+ZU2uvsDXJl=X_yRv4b$Xr=x5&$n+|8P0wlN(=s2lotH-DnI!9 z9!o(BdhEcS?u)CNdHJVDx3)VNq_f^T?(``Ytjs}APJDVh%&d57DI#z(Szt-8TXw;- z&;WyHR-|EmafJF6{jTf&(h{yH(>nP8nP+v&yk~Op^f}ZO#}?>+V?4?q4!Ohg=@YdL z0N?V 1LC3s9*eN12(U{&9T%;UMzHTmf7l z2lq=_J2pUR1lI2?g6nOg6o=5r{dMw_>XtN}VWY0%I`AO!1W?D;FW>1`5kbnTKp7{H zNWC7QA kfRp0*5ck!g?fAB~_{d0mTo9C8G3-fR*TgaFe!|P78#j0^JmjA@m6eq(vvGp< z+jRVa^uBe-{6# bQ}V*)vMj(t^1yFs z8fd>p4R-_d>eep&=J{U>`k%DeLo`@09N47v)(54p1EUvQ&3;!tcGpyIRz>oXH>}Iu zXSG~u(NmAvdG%y<{bMHCA{} u81ljQu|9yOzzoDy}6$p;&3y&M4*H254r?# z0QWxjs2Wsn7ielDoCQVTvWGoLxl$r1_`YYN^jnqT^g%hO-m(HTEov?dM;MDaNjp~- zfRJX1i{)US!b-bivbDa)WFL{~^^wk?;DVCRYN&lpw9YY8B=tWl@b_5^1&GjsksJ%O zhy3-A=rGoQsE5BUh<| mZgDfs=DS-HU6#jgwSY9lfa;e*Rb z!M|7c-!*lFnqLE;ihdoQU$55%vZ(5@X59bUzT>%>!0hde^quxm2lkj%ln3rt8NYwU zd;x~+s{h)}4Ku*D%^323Z`D6Z0f4m3!;`>%8H)KT%OMB|A@H6O{%u|Sw$_eN2cHJ! zw}0uo_36VM_F>f0pGq7*9K#E+s8nm9=F1^v^8akk|6_;BkK}=|akhH|#aaRD7aA#{ z`722Fzam0${D2)?ySr&nd}s%4-Jkz`u#W_*0wuDgMlwAE`f} oqSKwrM!xWfSS1duy3JNoaF5`U=NaoV%IZ(AQ=xNno(UH-ke zm?)tAbKXW;-=$9J#(zrd;{SKO6XknAKXTWXCMMI5P=&tv&icOt_s{g*VFK#yuX^y- zh6*V7PYMFSKOav9tmc#J@q#ypA5UDJ|KW-LpV?+h0{-sS>M@)P*!SgxH|c*GKq8=q z@dU%_5yXA*J9T*1K+W>Y1~ u|wq}(eD)|k^jCpkH;JTE$tLPs40$QU;$Kf1_wT}|GP2p#_a#C znsevCPOQ-A44?~C$oY%R`hWTvEcsWXsnpLZSj&&=1C3sO=`?fZ-|Z(zS?E7HN$i>V zPj1Zs5=@PEzGVMtH7Nfr48+$Ht^HF+6i^ZRnS1lnAEt=+%-@YZ-n14gZU?9c$=V!| z)%(MbAJP3s%!p3ucwt}_(2PP-+xEZP@)2sH*54ydT!<=|3k(57w64k|{m}qT{{FFg zeI>sW9Uugyg*X51_@^Fj{VgMO>OjF-`_iG(Rob7#b^d>pt`1mC&j=v;N*65wNxCC< M)pgVms*j%iKgdY@(EtDd literal 45991 zcmeFY1zVh3wl0dh2PZf|5?q73yE}yw+}+)wa0m{;U4pv@hv4q+?wne^_ubun_U)|u z18zNEQN{H64xe*WxPqKGG6FsV7#J9`q=bkP7#Iu&7#KJv91N&rT(!I%3=HX$xv;Q; zq_8lFf`hH8xs?eRm_&F|3apB4JHQq|Xa*k|eo(XmFoh zoD}_k=8y$oX`(AS(fQG`(`slyc>>TB73cZ`kdtiV!CKDL$6Y7V?tS*hGr8ZN*V;I3 z!4zWjBSj925y0?ztn7_*P#rD2AQEoiNCe=&fq4rUI@XG;p`(+6Ee*Y%-QjwJbzE0seZ0zpb3%_%xQ zt|S-l7)DFUHI3sy28N)*uAKql7q5cD5}E*UO^qekfbIY-G$ae;{p!Vzb7eNP&CF~n zti~Q{m35<=mDsr}gFp7mv?!{!4LgnI0lrq`@WlOnfBRuQIgTDLtrw2{GvFg8O@-#u z%Csr0bQ;2A03!|U$6EZIV~9#xy _?* MTOe4B|1Y!q8x(eVVOn4RW3Ck*iqza7k>aYLZ^pFm||F z&8c2ah8;M=UXm|@9ob3PSUfy;?)2*%R!;PiKU7$}_Hl=X@Jpas r>c13v*hyF1-i2^0Ak;6!9uWG#8#?vfoP9C$|;Dx*JC0|g_&4+ueR zfHyJjAv~BB2@H)NY Tp5E zwrhP=CFCCT)AcK~EHo~-SU3*2%ph(OY@QJN0AG~{x^(>+90V?dIls-L_>L+Rj^I*4 zJK`0>qtGRLm`ddG%kXLp+m#P G2e08%Xnan2Z@}A7kyMlBH1cjeh*} zu2Qc2VqTB2K9xmmcKuq(PTvOmjvHRlhhjvxV17b27c>h=>4IU|rB$=7M5Id)Yhr0+ z+#r#b#hNP4h+(8`^xN|KF|>KH_d3$#oY?q!&s3WK Z2~8qWF7ELdgYQZ!mv@<>=yVQuF9SoJ3vo7laa&fJ4qD*9zk^4A3BT z31ivve;_B7pumWwAfpLGiz7h B;V09HyZKf zWj>8lVWT% Z2Mg9BEC!uOp-?&gx*oC|O4<>-!g4@$2j)pJ zBq~YK?S9 JN;-!ED9kSDGzORskG2l?JtZ*AnFwZ5Q?y z&YzMo*Q {N+6 ze@=GrK+Fli71|M{C&@2 Dnyp6U^x&0e=m1)h$%}6b}gwWA>)N`!nyWV%6F^Dn9?;NcB=1f0deooiVna^7C zP7eH}`&smDVrs3>Tdvi%{7Iv+CZh)02sOIBEbvI D6*i zu}1mW-2H--(ni7aAiXL+-F0C=PN(4ek2l9cnBVDX tk#YM6*cN$O`P!