From b17a57b3dd5ba6783fbc6d09bf47dc1934de5085 Mon Sep 17 00:00:00 2001 From: Brian Rinaldi Date: Fri, 24 Apr 2026 14:06:47 -0400 Subject: [PATCH 01/37] Initial draft for revising getting started The concepts behind this draft: 1. Design paths for the main LocalStack use cases 2. Simplify the quickstart to get them to success faster 3. Have both an awslocal and a terraform quickstart 4. Bring AI and agent use cases up front [DOC-12](https://linear.app/localstack/issue/DOC-12/docs-quickstart-v2) --- .../docs/aws/getting-started/ai-workflows.mdx | 73 +++ .../docs/aws/getting-started/auth-token.mdx | 2 +- .../docs/aws/getting-started/ci-cd.mdx | 185 +++++++ src/content/docs/aws/getting-started/faq.mdx | 2 +- .../docs/aws/getting-started/help-support.md | 2 +- src/content/docs/aws/getting-started/index.md | 23 - .../docs/aws/getting-started/index.mdx | 48 ++ .../docs/aws/getting-started/installation.mdx | 85 ++- .../docs/aws/getting-started/quickstart.mdx | 501 ++++++++---------- 9 files changed, 588 insertions(+), 333 deletions(-) create mode 100644 src/content/docs/aws/getting-started/ai-workflows.mdx create mode 100644 src/content/docs/aws/getting-started/ci-cd.mdx delete mode 100644 src/content/docs/aws/getting-started/index.md create mode 100644 src/content/docs/aws/getting-started/index.mdx diff --git a/src/content/docs/aws/getting-started/ai-workflows.mdx b/src/content/docs/aws/getting-started/ai-workflows.mdx new file mode 100644 index 000000000..4746e4ff5 --- /dev/null +++ b/src/content/docs/aws/getting-started/ai-workflows.mdx @@ -0,0 +1,73 @@ +--- +title: AI & Agent Workflows +description: Use LocalStack with AI coding assistants, MCP servers, and agent-driven infrastructure automation. +template: doc +sidebar: + order: 6 +--- + +## Overview + +LocalStack is a natural fit for AI-assisted development workflows. +Whether you're using an AI coding assistant to generate infrastructure code, running an agent that deploys AWS resources, or validating AI-generated Terraform before applying it to real AWS — LocalStack gives you a safe, fast, cost-free environment to do it in. + +## Connect an AI coding assistant via MCP + +The [LocalStack MCP Server](https://github.com/localstack/localstack-mcp-server) exposes LocalStack's API as an MCP (Model Context Protocol) tool server. +This lets AI assistants like Claude, Cursor, Windsurf, or any MCP-compatible tool inspect and interact with your running LocalStack instance directly. + +With the MCP server connected, your AI assistant can: + +- List running AWS services and deployed resources +- Create, update, and delete resources in your local environment +- Query resource state to understand what's already deployed +- Help you debug issues by inspecting live infrastructure + +**Quick setup:** + +```bash +# Install the LocalStack MCP server +pip install localstack-mcp-server +``` + +Then add it to your AI tool's MCP configuration. +See the [localstack-mcp-server README](https://github.com/localstack/localstack-mcp-server) for tool-specific setup instructions for Claude, Cursor, and others. + +:::note +The MCP server connects to a running LocalStack instance — make sure LocalStack is started first with `lstk start` or `localstack start`. +::: + +## Deploy with agent-driven automation using Skills + +[LocalStack Skills](https://github.com/localstack/skills) are pre-built agent skill definitions for deploying common AWS architectures locally. +Instead of stepping through manual CLI commands, you describe what you want and an agent handles the deployment. + +Skills are useful when: + +- You want to scaffold a new local environment quickly without writing all the infrastructure code yourself +- You're using an agent-first workflow and want LocalStack to be a first-class deployment target +- You want to iterate rapidly on architecture without touching real AWS + +Browse the [skills repository](https://github.com/localstack/skills) for available skills and setup instructions. + +## Validate AI-generated IaC before applying to AWS + +A common pattern when using AI to generate Terraform, CDK, or CloudFormation is to deploy it to LocalStack first. +This catches configuration errors, missing permissions, and service interaction bugs before you spend time (and money) deploying to real AWS. + +The workflow is: + +1. Generate infrastructure code with your AI tool +2. Deploy to LocalStack with `tflocal apply` (Terraform), `cdklocal deploy` (CDK), or the AWS CLI +3. Run your integration tests against the local environment +4. When everything passes, deploy to real AWS with confidence + +See [Tooling](/aws/tooling/) for the full list of LocalStack-aware wrappers for common IaC tools. + +## Summary + +| Use case | Tool | +|---|---| +| AI assistant that can inspect & manage local resources | [LocalStack MCP Server](https://github.com/localstack/localstack-mcp-server) | +| Agent-driven infrastructure deployment | [LocalStack Skills](https://github.com/localstack/skills) | +| Validate AI-generated IaC safely | LocalStack + `tflocal` / `cdklocal` / `awslocal` | diff --git a/src/content/docs/aws/getting-started/auth-token.mdx b/src/content/docs/aws/getting-started/auth-token.mdx index b71c45a14..4f6446c00 100644 --- a/src/content/docs/aws/getting-started/auth-token.mdx +++ b/src/content/docs/aws/getting-started/auth-token.mdx @@ -3,7 +3,7 @@ title: Auth Token description: Configure your Auth Token to access and activate LocalStack. template: doc sidebar: - order: 3 + order: 4 --- import { Code, Tabs, TabItem } from '@astrojs/starlight/components'; diff --git a/src/content/docs/aws/getting-started/ci-cd.mdx b/src/content/docs/aws/getting-started/ci-cd.mdx new file mode 100644 index 000000000..feac59510 --- /dev/null +++ b/src/content/docs/aws/getting-started/ci-cd.mdx @@ -0,0 +1,185 @@ +--- +title: CI/CD Setup +description: Run LocalStack in CI pipelines — auth tokens, Docker Compose, and GitHub Actions examples. +template: doc +sidebar: + order: 5 +--- + +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +## Overview + +LocalStack works great in CI environments. +The setup differs from local development in a few important ways: + +- **Use a CI Auth Token**, not your personal Developer token +- **Manage the container directly** via Docker Compose or `docker run` — `lstk` and the LocalStack Desktop are local-only tools +- **LocalStack is ephemeral by default** — each CI run starts fresh, which is usually exactly what you want for reproducible tests + +## Step 1 — Get a CI Auth Token + +CI pipelines should use a dedicated CI Auth Token, not a Developer token tied to a specific user. + +1. Go to the [Auth Tokens page](https://app.localstack.cloud/workspace/auth-tokens) in the LocalStack Web Application +2. Create a new **CI Auth Token** +3. Add it as a secret in your CI provider (e.g., `LOCALSTACK_AUTH_TOKEN`) + +:::danger[Keep your token secret] +Never commit an auth token to source control. +Always inject it via your CI provider's secrets or environment variable mechanism. +If a token is compromised, rotate it immediately on the Auth Tokens page — old tokens are invalidated instantly. +::: + +See the [Auth Token documentation](/aws/getting-started/auth-token/) for full details on token types and configuration. + +## Step 2 — Start LocalStack in CI + + + + The recommended approach is to start LocalStack as a service container or as a step using the official GitHub Action: + + ```yaml + # .github/workflows/integration-tests.yml + name: Integration Tests + + on: [push, pull_request] + + jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Start LocalStack + uses: LocalStack/setup-localstack@v0.2 + with: + image-tag: latest + env: + LOCALSTACK_AUTH_TOKEN: ${{ secrets.LOCALSTACK_AUTH_TOKEN }} + + - name: Run tests + run: | + # Your test commands here, e.g.: + pip install awscli-local + awslocal s3 mb s3://my-test-bucket + pytest tests/integration/ + ``` + + The `setup-localstack` action handles pulling the image, starting the container, and waiting for LocalStack to be ready. + + + Add LocalStack as a service in your `docker-compose.yml`: + + ```yaml + services: + localstack: + container_name: localstack-main + image: localstack/localstack-pro + ports: + - "127.0.0.1:4566:4566" + - "127.0.0.1:4510-4559:4510-4559" + - "127.0.0.1:443:443" + environment: + - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN:?} + - DEBUG=${DEBUG:-0} + volumes: + - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack" + - "/var/run/docker.sock:/var/run/docker.sock" + ``` + + Start it and wait for readiness: + + ```bash + docker compose up -d localstack + # Wait for LocalStack to be ready + until curl -s http://localhost:4566/_localstack/health | grep -q '"running"'; do sleep 1; done + ``` + + :::note + Mounting `/var/run/docker.sock` is required for Lambda emulation, which uses Docker to run function containers. + ::: + + + Start LocalStack directly with `docker run`: + + ```bash + docker run \ + --rm -d \ + --name localstack-main \ + -p 127.0.0.1:4566:4566 \ + -p 127.0.0.1:4510-4559:4510-4559 \ + -e LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN:?} \ + -v /var/run/docker.sock:/var/run/docker.sock \ + localstack/localstack-pro + + # Wait for readiness + until curl -s http://localhost:4566/_localstack/health | grep -q '"running"'; do sleep 1; done + ``` + + + Add LocalStack as a service in your CircleCI config: + + ```yaml + version: 2.1 + + jobs: + integration-tests: + docker: + - image: cimg/python:3.12 + - image: localstack/localstack-pro + environment: + LOCALSTACK_AUTH_TOKEN: $LOCALSTACK_AUTH_TOKEN + steps: + - checkout + - run: + name: Wait for LocalStack + command: | + until curl -s http://localhost:4566/_localstack/health | grep -q '"running"'; do sleep 1; done + - run: + name: Run tests + command: pytest tests/integration/ + ``` + + Set `LOCALSTACK_AUTH_TOKEN` in your CircleCI project's environment variables. + + + +## Verify activation + +After LocalStack starts, confirm the license is active: + +```bash +curl -s http://localhost:4566/_localstack/info | jq '.is_license_activated' +# Should return: true +``` + +## Key differences from local development + +| | Local development | CI/CD | +|---|---|---| +| **CLI** | `lstk` or LocalStack CLI | Docker Compose / `docker run` | +| **Auth** | Browser login or stored token | `LOCALSTACK_AUTH_TOKEN` env var | +| **Token type** | Developer token | CI token | +| **State** | Optional persistence | Ephemeral (fresh per run) | +| **Startup** | Interactive TUI | `--non-interactive` / `-d` flag | + +## Persisting state across runs + +By default, LocalStack starts fresh on every run — all resources are gone when the container stops. +This is ideal for most CI use cases (clean, reproducible tests). + +If you need to share state across runs (e.g., seed data, pre-built infrastructure), look at [Cloud Pods](/aws/capabilities/state-management/cloud-pods/), which let you snapshot and restore LocalStack state. + +## More CI integrations + +LocalStack has dedicated integration guides for many CI providers: + +- [GitHub Actions](/aws/integrations/continuous-integration/github-actions/) +- [GitLab CI](/aws/integrations/continuous-integration/gitlab-ci/) +- [CircleCI](/aws/integrations/continuous-integration/circleci/) +- [AWS CodeBuild](/aws/integrations/continuous-integration/codebuild/) +- [Travis CI](/aws/integrations/continuous-integration/travis-ci/) +- [Bitbucket Pipelines](/aws/integrations/continuous-integration/bitbucket/) + +See the full [CI/CD integrations](/aws/integrations/continuous-integration/) section for details. diff --git a/src/content/docs/aws/getting-started/faq.mdx b/src/content/docs/aws/getting-started/faq.mdx index 12128b64a..3eded1dfc 100644 --- a/src/content/docs/aws/getting-started/faq.mdx +++ b/src/content/docs/aws/getting-started/faq.mdx @@ -3,7 +3,7 @@ title: FAQ description: Frequently asked questions about LocalStack for AWS. template: doc sidebar: - order: 5 + order: 7 --- import { Tabs, TabItem } from '@astrojs/starlight/components'; diff --git a/src/content/docs/aws/getting-started/help-support.md b/src/content/docs/aws/getting-started/help-support.md index c66410033..d2dde0db0 100644 --- a/src/content/docs/aws/getting-started/help-support.md +++ b/src/content/docs/aws/getting-started/help-support.md @@ -3,7 +3,7 @@ title: Help & Support description: Get help and support with LocalStack. template: doc sidebar: - order: 6 + order: 8 --- ## Introduction diff --git a/src/content/docs/aws/getting-started/index.md b/src/content/docs/aws/getting-started/index.md deleted file mode 100644 index 017debdb2..000000000 --- a/src/content/docs/aws/getting-started/index.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Overview -description: This section describes how to get started with LocalStack using a variety of options, and provides details on how LocalStack can be configured to fit the needs of a local cloud sandbox for development, testing, and experimentation. -template: doc -editUrl: false -sidebar: - order: 1 ---- - -[LocalStack](https://localstack.cloud) is a cloud service emulator that runs in a single container on your laptop or in your CI environment. -With LocalStack, you can run your AWS applications or Lambdas entirely on your local machine without connecting to a remote cloud provider! - -Whether you are testing complex CDK applications or Terraform configurations, or just beginning to learn about AWS services, LocalStack helps speed up and simplify your testing and development workflow. - -LocalStack supports a growing number of [AWS services](/aws/services/) -, like [Lambda](/aws/services/lambda), [S3](/aws/services/s3), [DynamoDB](/aws/services/dynamodb), [Kinesis](/aws/services/kinesis), [SQS](/aws/services/sqs), [SNS](/aws/services/sns), and more! -[LocalStack for AWS](https://localstack.cloud/pricing) also supports APIs and advanced features to make your cloud development experience a breeze. - -You can find a comprehensive list of supported APIs on each AWS service page. - -LocalStack also provides additional features to make your life as a cloud developer easier! - -Check out LocalStack's [Cloud Developer Tools](/aws/tooling/). diff --git a/src/content/docs/aws/getting-started/index.mdx b/src/content/docs/aws/getting-started/index.mdx new file mode 100644 index 000000000..4b0e25035 --- /dev/null +++ b/src/content/docs/aws/getting-started/index.mdx @@ -0,0 +1,48 @@ +--- +title: Overview +description: This section describes how to get started with LocalStack for AWS using a variety of options, and provides details on how LocalStack can be configured to fit the needs of a local cloud sandbox for development, testing, and experimentation. +template: doc +editUrl: false +sidebar: + order: 1 +--- + +import { SectionCards } from '../../../../components/SectionCards.tsx'; + +[LocalStack for AWS](https://localstack.cloud) is a cloud service emulator that runs in a single container on your laptop or in your CI environment. +It gives you a fully functional AWS environment — Lambda, DynamoDB, S3, SQS, and [80+ more services](/aws/services/) — without touching a real AWS account and without incurring cloud costs. + +Here's why developers and teams use it: + +- **Faster development loops** — Test changes against local AWS services instantly, without waiting on real deployments or worrying about cloud costs. +- **Integration testing in CI** — Run real integration tests against local AWS infrastructure in every pull request, catching bugs before they reach production. +- **Validate IaC before applying** — Deploy your Terraform, CDK, or CloudFormation to LocalStack first. Confirm it works the way you expect before applying to a real AWS environment. +- **Safe experimentation** — Explore new AWS services and architectures freely, with no risk to production systems. + +LocalStack for AWS also includes advanced capabilities for teams: [Cloud Pods](/aws/capabilities/state-management/cloud-pods/) for sharing and restoring state, [IAM policy enforcement](/aws/capabilities/security-testing/iam-policy-enforcement/), [Chaos Engineering](/aws/capabilities/chaos-engineering/), and more. + +## Choose your path + + diff --git a/src/content/docs/aws/getting-started/installation.mdx b/src/content/docs/aws/getting-started/installation.mdx index 4e76ecba2..dcc080ab8 100644 --- a/src/content/docs/aws/getting-started/installation.mdx +++ b/src/content/docs/aws/getting-started/installation.mdx @@ -1,24 +1,68 @@ --- title: Installation -description: Basic installation guide to get started with LocalStack on your local machine. +description: All installation methods for LocalStack — lstk, LocalStack CLI, Docker Compose, Docker, and Helm. template: doc sidebar: - order: 2 + order: 3 --- import { Code, LinkButton, Tabs, TabItem } from '@astrojs/starlight/components'; import { LOCALSTACK_VERSION } from "astro:env/server"; -## LocalStack CLI +## Local development -The quickest way get started with LocalStack is by using the LocalStack CLI. -It allows you to start LocalStack from your command line. +There are two CLI options for running LocalStack on your laptop. Start with `lstk` if you want the fastest path to a running instance, or use the LocalStack CLI if you need full feature support. + +### lstk + +`lstk` is a lightweight, Go-based CLI that handles the full startup sequence in one command: browser-based login, image pull, and container launch. +It's the fastest way to get LocalStack running locally. + +:::caution[Early release] +`lstk` currently supports core lifecycle commands (`start`, `stop`, `logs`, `status`). +For advanced features like Cloud Pods, Extensions, and Ephemeral Instances, use the [LocalStack CLI](#localstack-cli) instead. +Both tools can coexist on the same system. +::: + +Install `lstk`: + + + + ```bash + brew install localstack/tap/lstk + ``` + + + ```bash + npm install -g @localstack/lstk + ``` + + + Download a pre-built binary for your platform from [GitHub Releases](https://github.com/localstack/lstk/releases) and add it to your `PATH`. + + + +Start LocalStack: + +```bash +lstk start +``` + +On first run, `lstk` opens a browser login flow. +After authenticating, it pulls the LocalStack image and starts the container. +Subsequent starts use the stored credential from your system keyring — no manual token management needed. + +--- + +### LocalStack CLI + +The full-featured LocalStack CLI gives you access to all LocalStack capabilities. Please make sure that you have a working [Docker installation](https://docs.docker.com/get-docker/) on your machine before moving on. ### Installing LocalStack CLI The CLI starts and manages the LocalStack Docker container. -For alternative methods of managing the LocalStack container, see our [alternative installation instructions](#alternatives). +For alternative methods of managing the LocalStack container, see our [alternative installation instructions](#ci-and-server-environments). @@ -196,30 +240,25 @@ Updating the LocalStack CLI using `localstack update localstack-cli` and `locals If it was installed using the pre-built binary or via Brew, please run the installation steps again to update to the latest version. ::: -## Alternatives - -Besides using the CLI, there are other ways of starting and managing your LocalStack instance: - -- [LocalStack Desktop](#localstack-desktop)\ - Get a desktop experience and work with your local LocalStack instance via the UI. +## CI and server environments -- [LocalStack Docker Extension](#localstack-docker-extension)\ - Use the LocalStack extension for Docker Desktop to work with your LocalStack instance. +For CI pipelines and server deployments, you'll manage the LocalStack container directly rather than using a local CLI. +See the [CI/CD Setup guide](/aws/getting-started/ci-cd/) for a complete walkthrough including GitHub Actions examples. -- [Docker-Compose](#docker-compose)\ - Use Docker Compose to configure and start your LocalStack Docker container. +The options below cover the main container management approaches: -- [Docker](#docker)\ - Use the Docker CLI to manually start the LocalStack Docker container. +- [Docker Compose](#docker-compose) — recommended for CI and team environments +- [Docker](#docker) — direct container control for scripted setups +- [Helm](#helm) — deploy LocalStack in a Kubernetes cluster -- [Helm](#helm)\ - Use Helm to create a LocalStack deployment in a Kubernetes cluster. +The LocalStack emulator is available on Docker Hub as `localstack/localstack-pro`. -LocalStack runs inside a Docker container, and the above options are different ways to start and manage the LocalStack Docker container. +For a comprehensive overview of LocalStack images, see the [Docker images documentation](/aws/capabilities/config/docker-images). -The LocalStack emulator is available on Docker Hub (`localstack/localstack-pro`). +## GUI tools -For a comprehensive overview of the LocalStack images, check out our [Docker images documentation](/aws/capabilities/config/docker-images). +- [LocalStack Desktop](#localstack-desktop) — desktop UI for managing your local instance +- [LocalStack Docker Extension](#localstack-docker-extension) — manage LocalStack from Docker Desktop ### LocalStack Desktop diff --git a/src/content/docs/aws/getting-started/quickstart.mdx b/src/content/docs/aws/getting-started/quickstart.mdx index 7774291f2..f44442699 100644 --- a/src/content/docs/aws/getting-started/quickstart.mdx +++ b/src/content/docs/aws/getting-started/quickstart.mdx @@ -1,361 +1,294 @@ --- title: Quickstart -description: How to run an AWS application on your local machine and test local cloud development with LocalStack. +description: Deploy a serverless API locally with LocalStack in under 10 minutes using Lambda and DynamoDB. template: doc sidebar: - order: 4 + order: 2 --- -import { Code, LinkButton, Tabs, TabItem } from '@astrojs/starlight/components'; +import { Tabs, TabItem } from '@astrojs/starlight/components'; ## Introduction -In this quickstart guide, we'll walk you through the process of starting LocalStack on your local machine and deploying a [serverless image resizer application](https://github.com/localstack-samples/sample-serverless-image-resizer-s3-lambda) that utilizes several AWS services. -This guide aims to help you understand how to use LocalStack for the development and testing of your AWS applications locally. -It introduces you to the following key concepts: +In this quickstart you'll start LocalStack and deploy a simple serverless API — a **Lambda function backed by DynamoDB** — entirely on your local machine. +No AWS account needed. -- Starting a LocalStack instance on your local machine. -- Deploying an AWS serverless application infrastructure locally. -- Running an automated integration test suite against local infrastructure. -- Exploring the LocalStack Web Application to view deployed resources. -- Destroying the local infrastructure you have provisioned. +By the end you will have: -## Architecture +- LocalStack running locally in Docker +- A Lambda function deployed and invokable via a public URL +- A DynamoDB table storing data written by the Lambda +- Confirmed that your local environment behaves like real AWS -The following diagram shows the architecture that we will deploy locally using LocalStack: - -![An AWS architecture demonstrating a sample serverless image resizer application](https://user-images.githubusercontent.com/3996682/229322761-92f52eec-5bfb-412a-a3cb-8af4ee1fed24.png) - -The architecture: - -- Configures S3 bucket notifications to invoke a Lambda function. -- Provides S3 pre-signed POST URLs for direct uploads to the S3 bucket. -- Creates S3 website hosting for serving the static application client. -- Configures direct invocation URLs for Lambda functions accessible to the client. -- Establishes Lambda SNS to SNS topic notifications for failure handling. -- Creates SNS to SES subscriptions for email notifications triggered by specific events. - -An internal SES LocalStack testing endpoint (`/_localstack/aws/ses`) is configured as well, to test email sending functionality while running our local integration test suite. +Choose your preferred deployment style below: **AWS CLI** (`awslocal`) or **Terraform** (`tflocal`). ## Prerequisites -- [LocalStack CLI](/aws/getting-started/installation/#installing-localstack-cli) -- [LocalStack Web Application account](https://app.localstack.cloud/sign-up) & [Auth Token](/aws/getting-started/auth-token/) -- [Docker](https://docs.docker.com/get-docker/) -- [Python 3.11+](https://www.python.org/downloads/) & `pip` -- [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) & [`awslocal` wrapper](/aws/integrations/aws-native-tools/aws-cli/#localstack-aws-cli-awslocal) -- `jq`, `zip` & `curl` - -You can start LocalStack using the `localstack` CLI. -Start the LocalStack for AWS container with your `LOCALSTACK_AUTH_TOKEN` pre-configured: +- [Docker](https://docs.docker.com/get-docker/) installed and running +- A [LocalStack account](https://app.localstack.cloud/sign-up) (free tier works) - - - \nlocalstack start`} lang="shell" /> - - - \nlocalstack start`} lang="shell" /> - - +## Step 1 — Install and start LocalStack -If you prefer running LocalStack in detached mode, you can add the `-d` flag to the `localstack start` command, and use Docker Desktop to view the logs. +The fastest way to get LocalStack running locally is with `lstk`, a lightweight CLI that handles authentication and image setup automatically. -## Instructions + + + Install `lstk`: -To get started, clone the sample application repository from GitHub: + ```bash + brew install localstack/tap/lstk # macOS / Linux with Homebrew + ``` -```bash -git clone https://github.com/localstack-samples/sample-serverless-image-resizer-s3-lambda.git -cd sample-serverless-image-resizer-s3-lambda -``` + ```bash + npm install -g @localstack/lstk # or via npm + ``` -You can now follow the instructions below to start LocalStack, deploy the sample application, and test the application. + Then start LocalStack: -### Setup a virtual environment + ```bash + lstk start + ``` -To deploy the sample application, you need to have specific Python packages are installed. -It is advisable to utilize a virtual environment for the installation process, allowing the packages to be installed in an isolated environment. -Execute the following commands to create a virtual environment and install the packages in `requirements-dev.txt`: + On first run, `lstk` opens a browser login to authenticate, then pulls the image and starts the container automatically. - - - ```shell - python -m venv .venv - source .venv/bin/activate - pip install -r requirements-dev.txt - ``` + :::note[Early release] + `lstk` currently supports core lifecycle commands (start, stop, logs, status). + For advanced features like Cloud Pods, Extensions, and Ephemeral Instances, use the [LocalStack CLI](/aws/getting-started/installation/#localstack-cli) instead. + ::: - - ```shell - python -m venv .venv - .venv\Scripts\activate - pip install -r requirements-dev.txt + + If you prefer the full-featured LocalStack CLI, [install it first](/aws/getting-started/installation/#localstack-cli), then [configure your auth token](/aws/getting-started/auth-token/), and start LocalStack: + + ```bash + localstack start ``` -:::tip -If you are encountering issues with the installation of the packages, such as Pillow, ensure you use the same version as the Python Lambdas (3.11.6) for Pillow to work. -If you're using pyenv, install and activate Python 3.11 with the following commands: +Wait for the container to report ready — you'll see a log line like `Ready.` or you can verify with: + ```bash -pyenv install 3.11 -pyenv global 3.11 +curl -s http://localhost:4566/_localstack/health | grep '"running"' ``` -::: -### Setup the serverless image resizer +## Step 2 — Deploy the serverless API -This application enables serverless image resizing using [S3](/aws/services/s3/), [SSM](/aws/services/ssm/), [Lambda](/aws/services/lambda/), [SNS](/aws/services/sns/), and [SES](/aws/services/ses/). -A simple web interface allows users to upload and view resized images. -A Lambda function generates S3 pre-signed URLs for direct uploads, while S3 bucket notifications trigger image resizing. -Another Lambda function lists and provides pre-signed URLs for browser display. -The application also handles Lambda failures through SNS and SES email notifications. +Now deploy a Lambda function and a DynamoDB table. Pick the tooling you prefer: -The sample application uses AWS CLI and our `awslocal` wrapper to deploy the application to LocalStack. -Before going further, you need to build your Lambda functions. -You can use the following script that will cover all three of them: + + + Install the `awslocal` wrapper if you haven't already: -```bash -deployment/build-lambdas.sh -``` + ```bash + pip install awscli-local + ``` -You can now deploy the sample application on LocalStack by running the following command: + **Create the Lambda function:** + + ```bash + mkdir -p /tmp/localstack-demo + cat > /tmp/localstack-demo/handler.py << 'EOF' + import json, boto3, os, uuid + + def handler(event, context): + table = boto3.resource('dynamodb').Table(os.environ['TABLE_NAME']) + method = event.get('requestContext', {}).get('http', {}).get('method', 'GET') + if method == 'POST': + item = {'id': str(uuid.uuid4()), **json.loads(event.get('body', '{}'))} + table.put_item(Item=item) + return {'statusCode': 200, 'body': json.dumps(item)} + result = table.scan() + return {'statusCode': 200, 'body': json.dumps(result['Items'])} + EOF + cd /tmp/localstack-demo && zip handler.zip handler.py + ``` -```bash -deployment/awslocal/deploy.sh -``` + **Create the DynamoDB table:** -Alternatively, you can follow these instructions to deploy the sample application manually step-by-step. + ```bash + awslocal dynamodb create-table \ + --table-name Messages \ + --attribute-definitions AttributeName=id,AttributeType=S \ + --key-schema AttributeName=id,KeyType=HASH \ + --billing-mode PAY_PER_REQUEST + ``` -:::tip -In absence of the `awslocal` wrapper, you can use the `aws` CLI directly, by configuring an [endpoint URL](/aws/integrations/aws-native-tools/aws-cli/#configuring-an-endpoint-url) or a [custom profile](/aws/integrations/aws-native-tools/aws-cli/#configuring-a-custom-profile) like `localstack`. -You can then swap `awslocal` with `aws --endpoint-url=http://localhost:4566` or `aws --profile=localstack` in the commands below. -::: + **Deploy the Lambda:** -#### Create the S3 buckets + ```bash + awslocal lambda create-function \ + --function-name messages-api \ + --runtime python3.12 \ + --handler handler.handler \ + --zip-file fileb:///tmp/localstack-demo/handler.zip \ + --role arn:aws:iam::000000000000:role/lambda-role \ + --environment Variables={TABLE_NAME=Messages} -```bash -awslocal s3 mb s3://localstack-thumbnails-app-images -awslocal s3 mb s3://localstack-thumbnails-app-resized -``` + awslocal lambda wait function-active --function-name messages-api + ``` -#### Add bucket names into the parameter store + **Create a public function URL:** -```bash -awslocal ssm put-parameter \ - --name /localstack-thumbnail-app/buckets/images \ - --type "String" \ - --value "localstack-thumbnails-app-images" -awslocal ssm put-parameter \ - --name /localstack-thumbnail-app/buckets/resized \ - --type "String" \ - --value "localstack-thumbnails-app-resized" -``` + ```bash + awslocal lambda create-function-url-config \ + --function-name messages-api \ + --auth-type NONE + ``` -#### Create SNS DLQ Topic for failed lambda invocations + **Retrieve the URL:** -```bash -awslocal sns create-topic --name failed-resize-topic -``` + ```bash + LAMBDA_URL=$(awslocal lambda list-function-url-configs \ + --function-name messages-api \ + --query 'FunctionUrlConfigs[0].FunctionUrl' \ + --output text) + echo $LAMBDA_URL + ``` + + + Install Terraform and the `tflocal` wrapper: -To receive immediate alerts in case of image resize failures, subscribe an email address to the system. -You can use the following command to subscribe an email address to the SNS topic: + ```bash + brew install hashicorp/tap/terraform # or see https://developer.hashicorp.com/terraform/install + pip install terraform-local + ``` -```bash -awslocal sns subscribe \ - --topic-arn arn:aws:sns:us-east-1:000000000000:failed-resize-topic \ - --protocol email \ - --notification-endpoint my-email@example.com -``` + Create a project directory and `main.tf`: -#### Create the Presign Lambda - -```bash showshowLineNumbers -(cd lambdas/presign; rm -f lambda.zip; zip lambda.zip handler.py) -awslocal lambda create-function \ - --function-name presign \ - --runtime python3.11 \ - --timeout 10 \ - --zip-file fileb://lambdas/presign/lambda.zip \ - --handler handler.handler \ - --role arn:aws:iam::000000000000:role/lambda-role \ - --environment Variables="{STAGE=local}" -awslocal lambda wait function-active-v2 --function-name presign -awslocal lambda create-function-url-config \ - --function-name presign \ - --auth-type NONE -``` + ```bash + mkdir -p /tmp/localstack-demo && cd /tmp/localstack-demo + ``` -#### Create the Image List Lambda - -```bash showshowLineNumbers -(cd lambdas/list; rm -f lambda.zip; zip lambda.zip handler.py) -awslocal lambda create-function \ - --function-name list \ - --handler handler.handler \ - --zip-file fileb://lambdas/list/lambda.zip \ - --runtime python3.11 \ - --timeout 10 \ - --role arn:aws:iam::000000000000:role/lambda-role \ - --environment Variables="{STAGE=local}" -awslocal lambda wait function-active-v2 --function-name list -awslocal lambda create-function-url-config \ - --function-name list \ - --auth-type NONE -``` + ```hcl + # main.tf + terraform { + required_providers { + aws = { source = "hashicorp/aws" } + archive = { source = "hashicorp/archive" } + } + } + + resource "aws_dynamodb_table" "messages" { + name = "Messages" + billing_mode = "PAY_PER_REQUEST" + hash_key = "id" + attribute { + name = "id" + type = "S" + } + } + + data "archive_file" "lambda" { + type = "zip" + output_path = "${path.module}/handler.zip" + source { + filename = "handler.py" + content = <<-EOF + import json, boto3, os, uuid + def handler(event, context): + table = boto3.resource('dynamodb').Table(os.environ['TABLE_NAME']) + method = event.get('requestContext', {}).get('http', {}).get('method', 'GET') + if method == 'POST': + item = {'id': str(uuid.uuid4()), **json.loads(event.get('body', '{}'))} + table.put_item(Item=item) + return {'statusCode': 200, 'body': json.dumps(item)} + result = table.scan() + return {'statusCode': 200, 'body': json.dumps(result['Items'])} + EOF + } + } + + resource "aws_iam_role" "lambda_role" { + name = "lambda-role" + assume_role_policy = jsonencode({ + Version = "2012-10-17" + Statement = [{ Action = "sts:AssumeRole", Effect = "Allow", + Principal = { Service = "lambda.amazonaws.com" } }] + }) + } + + resource "aws_lambda_function" "messages_api" { + function_name = "messages-api" + runtime = "python3.12" + handler = "handler.handler" + filename = data.archive_file.lambda.output_path + source_code_hash = data.archive_file.lambda.output_base64sha256 + role = aws_iam_role.lambda_role.arn + environment { + variables = { TABLE_NAME = aws_dynamodb_table.messages.name } + } + } + + resource "aws_lambda_function_url" "messages_api" { + function_name = aws_lambda_function.messages_api.function_name + authorization_type = "NONE" + } + + output "function_url" { + value = aws_lambda_function_url.messages_api.function_url + } + ``` -#### Build the Image Resizer Lambda + **Deploy:** - - - ```bash showshowLineNumbers - cd lambdas/resize - rm -rf libs lambda.zip - docker run --platform linux/x86_64 -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.11" /bin/sh -c "pip install -r requirements.txt -t libs; exit" - cd libs && zip -r ../lambda.zip . && cd .. - zip lambda.zip handler.py - rm -rf libs - cd ../.. + ```bash + tflocal init + tflocal apply -auto-approve ``` - - - ```bash showshowLineNumbers - cd lambdas/resize - rm -rf package lambda.zip - mkdir package - pip install -r requirements.txt -t package --platform manylinux_2_28_x86_64 --python-version 3.11 --no-deps - zip lambda.zip handler.py - cd package - zip -r ../lambda.zip *; - cd ../.. - ``` - - - ```bash showshowLineNumbers - cd lambdas/resize - rm -rf package lambda.zip - mkdir package - pip install -r requirements.txt -t package - zip lambda.zip handler.py - cd package - zip -r ../lambda.zip\_; - cd ../.. + + **Retrieve the URL:** + + ```bash + LAMBDA_URL=$(tflocal output -raw function_url) + echo $LAMBDA_URL ``` -#### Create the Image Resizer Lambda - -```bash showshowLineNumbers -awslocal lambda create-function \ - --function-name resize \ - --runtime python3.11 \ - --timeout 10 \ - --zip-file fileb://lambdas/resize/lambda.zip \ - --handler handler.handler \ - --dead-letter-config TargetArn=arn:aws:sns:us-east-1:000000000000:failed-resize-topic \ - --role arn:aws:iam::000000000000:role/lambda-role \ - --environment Variables="{STAGE=local}" -awslocal lambda wait function-active-v2 --function-name resize -awslocal lambda put-function-event-invoke-config \ - --function-name resize \ - --maximum-event-age-in-seconds 3600 \ - --maximum-retry-attempts 0 -``` +## Step 3 — Test the API -#### Connect S3 bucket to Resizer Lambda +Store a message: ```bash -awslocal s3api put-bucket-notification-configuration \ - --bucket localstack-thumbnails-app-images \ - --notification-configuration "{\"LambdaFunctionConfigurations\": [{\"LambdaFunctionArn\": \"$(awslocal lambda get-function --function-name resize --output json | jq -r .Configuration.FunctionArn)\", \"Events\": [\"s3:ObjectCreated:*\"]}]}" +curl -X POST "$LAMBDA_URL" \ + -H "Content-Type: application/json" \ + -d '{"message": "Hello, LocalStack!"}' ``` -#### Create the S3 static website +You should get back a response like: -```bash -awslocal s3 mb s3://webapp -awslocal s3 sync --delete ./website s3://webapp -awslocal s3 website s3://webapp --index-document index.html +```json +{"id": "a1b2c3d4-...", "message": "Hello, LocalStack!"} ``` -#### Retrieve the Lambda Function URLs - -Retrieve the Lambda function URLs for the `presign` and `list` Lambda functions using the following commands: +List all messages: ```bash -awslocal lambda list-function-url-configs --function-name presign --output json | jq -r '.FunctionUrlConfigs[0].FunctionUrl' -awslocal lambda list-function-url-configs --function-name list --output json | jq -r '.FunctionUrlConfigs[0].FunctionUrl' +curl "$LAMBDA_URL" ``` -Save these URLs for later use in the sample application. - -### Run the sample AWS application - -To access the application, go to [**https://webapp.s3-website.localhost.localstack.cloud:4566**](https://webapp.s3-website.localhost.localstack.cloud:4566) in your browser. - -![Serverless image resizer application](/images/aws/serverless-image-resizer-application.png) - -Paste the `presign` and `list` Lambda function URLs into the application and click **Apply**. -Alternatively, click on **Load from API** to automatically load the URLs. +**That's the win.** You just invoked a real Lambda function that wrote to a real DynamoDB table — all running locally, with no AWS account and no cloud costs. -Upload an image, and click **Upload**. -The upload form uses the `presign` Lambda to request an S3 pre-signed POST URL, forwarding the POST request to S3. -Asynchronous resizing (maximum 400x400 pixels) occurs through S3 bucket notifications. +## Step 4 — Inspect your resources -If successful, the application displays a **success!** alert. -Click **Refresh** to trigger your browser to request the `list` Lambda URL, returning a JSON document of all items in the images (`localstack-thumbnails-app-images`) and resized images (`localstack-thumbnails-app-resized`) bucket. +You can browse the resources you just deployed in the [LocalStack Web Application](https://app.localstack.cloud/). +Navigate to your [Default Instance](https://app.localstack.cloud/inst/default/status) and click through to [Lambda](https://app.localstack.cloud/inst/default/resources/lambda/functions) or [DynamoDB](https://app.localstack.cloud/inst/default/resources/dynamodb) to see your running infrastructure. -![Serverless image resizer application displaying a resized image](/images/aws/resized-image-sample-application.png) +## Step 5 — Clean up -### View the deployed resources - -You can inspect the resources deployed as part of the sample application by accessing the [**LocalStack Web Application**](https://app.localstack.cloud/). -Navigate to your [**Default Instance**](https://app.localstack.cloud/inst/default/status) to view the deployed resources. - -![Status Page of the LocalStack Web Application"](/images/aws/localstack-web-application-status.png) - -Click on [S3](https://app.localstack.cloud/inst/default/resources/s3) or [Lambda](https://app.localstack.cloud/inst/default/resources/lambda/functions) to view the S3 buckets and Lambda functions respectively. - -![The Lambda Resource Browser Page of the LocalStack Web Application](/images/aws/localstack-web-application-lambda.png) - -### Run integration tests - -To run automated integration tests against the sample application, use the following command: - -```bash -pytest -v -``` - -Additionally, you can verify that when the `resize` Lambda fails, an SNS message is sent to a topic that an SES subscription listens to, triggering an email with the raw failure message. -Since there's no real email server involved, you can use the LocalStack SES developer endpoint to list messages sent via SES: +When you're done, stop LocalStack to tear down all local resources: ```bash -curl -s http://localhost.localstack.cloud:4566/_aws/ses | jq +lstk stop # if using lstk +localstack stop # if using the LocalStack CLI ``` -An alternative option is to use a service like MailHog or `smtp4dev`. -Start LocalStack with `SMTP_HOST=host.docker.internal:1025`, pointing to the mock SMTP server. - -### Destroy the local infrastructure - -Now that you've learned how to deploy a local AWS infrastructure for your sample application, let's clean up and tear down the resources associated with the project: - -```bash -localstack stop -``` - -LocalStack is ephemeral, meaning it doesn't persist any data across restarts. -It runs inside a Docker container, and once it's stopped, all locally created resources are automatically removed. - -To persist the local cloud resources across restarts, navigate to our [persistence documentation](/aws/capabilities/state-management/persistence) or learn about [Cloud Pods](/aws/capabilities/state-management/cloud-pods), our next generation state management utility. - -## Next Steps +LocalStack is ephemeral by default — stopping it removes all provisioned resources. +To persist state across restarts, see [Persistence](/aws/capabilities/state-management/persistence/) or [Cloud Pods](/aws/capabilities/state-management/cloud-pods/). -Congratulations on deploying an AWS application locally using LocalStack! -To expand your LocalStack capabilities, explore the following based on your expertise: +## Next steps -- [Tutorials](/aws/tutorials): Check out our tutorials to learn how to use LocalStack across various AWS services and application stacks. -- [Supported Services](/aws/services): Explore LocalStack's emulated AWS services. -- [Capabilities](/aws/capabilities/): Learn about LocalStack's capabilities including features like IAM policy stream, state management, and more. -- [Tooling](/aws/tooling/): Get details on LocalStack's tooling and integrations. -- [Blog](https://blog.localstack.cloud): Read our blog posts about LocalStack and the latest enhancements for a better local development and testing experience. +- [Tutorials](/aws/tutorials/) — Deeper dives into specific AWS services and application stacks +- [Supported Services](/aws/services/) — Full list of emulated AWS services +- [CI/CD Setup](/aws/getting-started/ci-cd/) — Run LocalStack in GitHub Actions and other pipelines +- [AI & Agent Workflows](/aws/getting-started/ai-workflows/) — Use LocalStack with AI coding tools and agents +- [Tooling](/aws/tooling/) — `awslocal`, `tflocal`, LocalStack Desktop, and more From 6ea3ae46d9a8888c5b222c9de5f8d359c3e2692c Mon Sep 17 00:00:00 2001 From: Brian Rinaldi Date: Fri, 24 Apr 2026 14:47:40 -0400 Subject: [PATCH 02/37] Update quickstart.mdx --- src/content/docs/aws/getting-started/quickstart.mdx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/content/docs/aws/getting-started/quickstart.mdx b/src/content/docs/aws/getting-started/quickstart.mdx index f44442699..687b87338 100644 --- a/src/content/docs/aws/getting-started/quickstart.mdx +++ b/src/content/docs/aws/getting-started/quickstart.mdx @@ -5,6 +5,7 @@ template: doc sidebar: order: 2 --- + import { Tabs, TabItem } from '@astrojs/starlight/components'; ## Introduction @@ -24,7 +25,7 @@ Choose your preferred deployment style below: **AWS CLI** (`awslocal`) or **Terr ## Prerequisites - [Docker](https://docs.docker.com/get-docker/) installed and running -- A [LocalStack account](https://app.localstack.cloud/sign-up) (free tier works) +- A [LocalStack account](https://app.localstack.cloud/sign-up) ## Step 1 — Install and start LocalStack @@ -54,6 +55,7 @@ The fastest way to get LocalStack running locally is with `lstk`, a lightweight `lstk` currently supports core lifecycle commands (start, stop, logs, status). For advanced features like Cloud Pods, Extensions, and Ephemeral Instances, use the [LocalStack CLI](/aws/getting-started/installation/#localstack-cli) instead. ::: + If you prefer the full-featured LocalStack CLI, [install it first](/aws/getting-started/installation/#localstack-cli), then [configure your auth token](/aws/getting-started/auth-token/), and start LocalStack: @@ -61,6 +63,7 @@ The fastest way to get LocalStack running locally is with `lstk`, a lightweight ```bash localstack start ``` + @@ -143,6 +146,7 @@ Now deploy a Lambda function and a DynamoDB table. Pick the tooling you prefer: --output text) echo $LAMBDA_URL ``` + Install Terraform and the `tflocal` wrapper: @@ -241,6 +245,7 @@ Now deploy a Lambda function and a DynamoDB table. Pick the tooling you prefer: LAMBDA_URL=$(tflocal output -raw function_url) echo $LAMBDA_URL ``` + @@ -257,7 +262,7 @@ curl -X POST "$LAMBDA_URL" \ You should get back a response like: ```json -{"id": "a1b2c3d4-...", "message": "Hello, LocalStack!"} +{ "id": "a1b2c3d4-...", "message": "Hello, LocalStack!" } ``` List all messages: From 71369d638c82c8f76090482ccbd711ed083bc30c Mon Sep 17 00:00:00 2001 From: Brian Rinaldi Date: Tue, 28 Apr 2026 07:46:48 -0400 Subject: [PATCH 03/37] Clean up the ordering Fixed some issues on the quick start and reordered the pages to make a more logical order --- .../docs/aws/getting-started/ai-workflows.mdx | 10 +- .../docs/aws/getting-started/auth-token.mdx | 2 +- .../docs/aws/getting-started/ci-cd.mdx | 24 +- .../docs/aws/getting-started/installation.mdx | 118 ++++-- .../docs/aws/getting-started/quickstart.mdx | 401 ++++++++++-------- 5 files changed, 323 insertions(+), 232 deletions(-) diff --git a/src/content/docs/aws/getting-started/ai-workflows.mdx b/src/content/docs/aws/getting-started/ai-workflows.mdx index 4746e4ff5..224690374 100644 --- a/src/content/docs/aws/getting-started/ai-workflows.mdx +++ b/src/content/docs/aws/getting-started/ai-workflows.mdx @@ -3,7 +3,7 @@ title: AI & Agent Workflows description: Use LocalStack with AI coding assistants, MCP servers, and agent-driven infrastructure automation. template: doc sidebar: - order: 6 + order: 5 --- ## Overview @@ -66,8 +66,8 @@ See [Tooling](/aws/tooling/) for the full list of LocalStack-aware wrappers for ## Summary -| Use case | Tool | -|---|---| +| Use case | Tool | +| ------------------------------------------------------ | ---------------------------------------------------------------------------- | | AI assistant that can inspect & manage local resources | [LocalStack MCP Server](https://github.com/localstack/localstack-mcp-server) | -| Agent-driven infrastructure deployment | [LocalStack Skills](https://github.com/localstack/skills) | -| Validate AI-generated IaC safely | LocalStack + `tflocal` / `cdklocal` / `awslocal` | +| Agent-driven infrastructure deployment | [LocalStack Skills](https://github.com/localstack/skills) | +| Validate AI-generated IaC safely | LocalStack + `tflocal` / `cdklocal` / `awslocal` | diff --git a/src/content/docs/aws/getting-started/auth-token.mdx b/src/content/docs/aws/getting-started/auth-token.mdx index 4f6446c00..b35141c90 100644 --- a/src/content/docs/aws/getting-started/auth-token.mdx +++ b/src/content/docs/aws/getting-started/auth-token.mdx @@ -3,7 +3,7 @@ title: Auth Token description: Configure your Auth Token to access and activate LocalStack. template: doc sidebar: - order: 4 + order: 6 --- import { Code, Tabs, TabItem } from '@astrojs/starlight/components'; diff --git a/src/content/docs/aws/getting-started/ci-cd.mdx b/src/content/docs/aws/getting-started/ci-cd.mdx index feac59510..594ffed2c 100644 --- a/src/content/docs/aws/getting-started/ci-cd.mdx +++ b/src/content/docs/aws/getting-started/ci-cd.mdx @@ -1,16 +1,16 @@ --- -title: CI/CD Setup +title: CI/CD description: Run LocalStack in CI pipelines — auth tokens, Docker Compose, and GitHub Actions examples. template: doc sidebar: - order: 5 + order: 4 --- import { Tabs, TabItem } from '@astrojs/starlight/components'; ## Overview -LocalStack works great in CI environments. +LocalStack works great in CI environments, allowing your integration tests to run incredibly fast and with no cloud costs. The setup differs from local development in a few important ways: - **Use a CI Auth Token**, not your personal Developer token @@ -67,6 +67,7 @@ See the [Auth Token documentation](/aws/getting-started/auth-token/) for full de ``` The `setup-localstack` action handles pulling the image, starting the container, and waiting for LocalStack to be ready. + Add LocalStack as a service in your `docker-compose.yml`: @@ -99,6 +100,7 @@ See the [Auth Token documentation](/aws/getting-started/auth-token/) for full de :::note Mounting `/var/run/docker.sock` is required for Lambda emulation, which uses Docker to run function containers. ::: + Start LocalStack directly with `docker run`: @@ -116,6 +118,7 @@ See the [Auth Token documentation](/aws/getting-started/auth-token/) for full de # Wait for readiness until curl -s http://localhost:4566/_localstack/health | grep -q '"running"'; do sleep 1; done ``` + Add LocalStack as a service in your CircleCI config: @@ -142,6 +145,7 @@ See the [Auth Token documentation](/aws/getting-started/auth-token/) for full de ``` Set `LOCALSTACK_AUTH_TOKEN` in your CircleCI project's environment variables. + @@ -156,13 +160,13 @@ curl -s http://localhost:4566/_localstack/info | jq '.is_license_activated' ## Key differences from local development -| | Local development | CI/CD | -|---|---|---| -| **CLI** | `lstk` or LocalStack CLI | Docker Compose / `docker run` | -| **Auth** | Browser login or stored token | `LOCALSTACK_AUTH_TOKEN` env var | -| **Token type** | Developer token | CI token | -| **State** | Optional persistence | Ephemeral (fresh per run) | -| **Startup** | Interactive TUI | `--non-interactive` / `-d` flag | +| | Local development | CI/CD | +| -------------- | ----------------------------- | ------------------------------- | +| **CLI** | `lstk` or LocalStack CLI | Docker Compose / `docker run` | +| **Auth** | Browser login or stored token | `LOCALSTACK_AUTH_TOKEN` env var | +| **Token type** | Developer token | CI token | +| **State** | Optional persistence | Ephemeral (fresh per run) | +| **Startup** | Interactive TUI | `--non-interactive` / `-d` flag | ## Persisting state across runs diff --git a/src/content/docs/aws/getting-started/installation.mdx b/src/content/docs/aws/getting-started/installation.mdx index dcc080ab8..e6239ce0d 100644 --- a/src/content/docs/aws/getting-started/installation.mdx +++ b/src/content/docs/aws/getting-started/installation.mdx @@ -3,11 +3,11 @@ title: Installation description: All installation methods for LocalStack — lstk, LocalStack CLI, Docker Compose, Docker, and Helm. template: doc sidebar: - order: 3 + order: 2 --- import { Code, LinkButton, Tabs, TabItem } from '@astrojs/starlight/components'; -import { LOCALSTACK_VERSION } from "astro:env/server"; +import { LOCALSTACK_VERSION } from 'astro:env/server'; ## Local development @@ -28,17 +28,13 @@ Install `lstk`: - ```bash - brew install localstack/tap/lstk - ``` - - - ```bash - npm install -g @localstack/lstk - ``` + ```bash brew install localstack/tap/lstk ``` + ```bash npm install -g @localstack/lstk ``` - Download a pre-built binary for your platform from [GitHub Releases](https://github.com/localstack/lstk/releases) and add it to your `PATH`. + Download a pre-built binary for your platform from [GitHub + Releases](https://github.com/localstack/lstk/releases) and add it to your + `PATH`. @@ -70,22 +66,43 @@ For alternative methods of managing the LocalStack container, see our [alternati You can download the pre-built binary for your architecture using the link below: -x86-64 -ARM64 + + x86-64 + + + ARM64 + or use the curl commands below: For x86-64: - + For ARM64: - + Then extract the LocalStack CLI from the terminal: - +
Alternative: Homebrew on Linux @@ -95,6 +112,7 @@ If you are using [Homebrew for Linux](https://docs.brew.sh/Homebrew-on-Linux), y ```bash brew install localstack/tap/localstack-cli ``` +
@@ -112,16 +130,28 @@ brew install localstack/tap/localstack-cli You may download the binary for your architecture using the link below: -Intel (AMD64) + + Intel (AMD64) + or use the following curl command: - + Then extract the LocalStack CLI from the terminal: - + @@ -130,9 +160,16 @@ Then extract the LocalStack CLI from the terminal: You can download the pre-built binary for your architecture using the link below: -Intel (AMD64) + + Intel (AMD64) + Then extract the archive and execute the binary in Powershell. + @@ -156,8 +193,8 @@ To download a specific version of LocalStack, replace `` with the requi ```bash python3 -m pip install localstack== ``` -::: +::: :::tip[MacOS Sierra?] If you have problems with permissions in MacOS X Sierra, install with: @@ -165,6 +202,7 @@ If you have problems with permissions in MacOS X Sierra, install with: ```bash python3 -m pip install --user localstack ``` + ::: :::danger @@ -183,7 +221,6 @@ To verify that the LocalStack CLI was installed correctly, you can check the ver You are all set! - :::note To start LocalStack, you must first [set up your auth token](/aws/getting-started/auth-token). ::: @@ -200,7 +237,7 @@ localstack start # start localstack in background with -d flag / / / __ \/ ___/ __ `/ /\__ \/ __/ __ `/ ___/ //_/ / /___/ /_/ / /__/ /_/ / /___/ / /_/ /_/ / /__/ ,< /_____/\____/\___/\__,_/_//____/\__/\__,_/\___/_/|_| - + 💻 LocalStack CLI ${LOCALSTACK_VERSION} 👤 Profile: default @@ -211,7 +248,6 @@ localstack start # start localstack in background with -d flag [12:47:15] detaching bootstrap.py:1262 ``` - ### Updating LocalStack CLI The LocalStack CLI allows you to easily update the different components of LocalStack. @@ -287,24 +323,23 @@ Docker Compose v1.9.0 and above is supported. ```yaml showshowLineNumbers services: localstack: - container_name: "${LOCALSTACK_DOCKER_NAME:-localstack-main}" - image: localstack/localstack-pro # required for Pro + container_name: '${LOCALSTACK_DOCKER_NAME:-localstack-main}' + image: localstack/localstack-pro # required for Pro ports: - - "127.0.0.1:4566:4566" # LocalStack Gateway - - "127.0.0.1:4510-4559:4510-4559" # external services port range - - "127.0.0.1:443:443" # LocalStack HTTPS Gateway (Pro) + - '127.0.0.1:4566:4566' # LocalStack Gateway + - '127.0.0.1:4510-4559:4510-4559' # external services port range + - '127.0.0.1:443:443' # LocalStack HTTPS Gateway (Pro) environment: # Activate LocalStack for AWS: https://docs.localstack.cloud/getting-started/auth-token/ - - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN:?} # required for Pro + - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN:?} # required for Pro # LocalStack configuration: https://docs.localstack.cloud/references/configuration/ - DEBUG=${DEBUG:-0} - PERSISTENCE=${PERSISTENCE:-0} volumes: - - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack" - - "/var/run/docker.sock:/var/run/docker.sock" + - '${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack' + - '/var/run/docker.sock:/var/run/docker.sock' ``` - Start the container by running the following command: ```bash @@ -312,6 +347,7 @@ docker compose up ``` :::note + - This command pulls the current nightly build from the `main` branch (if you don't have the image locally) and **not** the latest supported version. If you want to use a specific version, set the appropriate LocalStack image tag at `services.localstack.image` in the `docker-compose.yml` file (for example `localstack/localstack:`). @@ -330,7 +366,7 @@ docker compose up Please consider removing it, if this functionality is needed. - To configure an Auth Token, refer to the [Auth Token](/aws/getting-started/auth-token) documentation. -::: + ::: Please note that there are a few pitfalls when configuring your stack manually via docker-compose (e.g., required container name, Docker network, volume mounts, and environment variables). We recommend using the LocalStack CLI to validate your configuration, which will print warning messages in case it detects any potential misconfigurations: @@ -366,6 +402,7 @@ docker run \ ``` :::note + - This command pulls the current nightly build from the `main` branch (if you don't have the image locally) and **not** the latest supported version. If you want to use a specific version of LocalStack, use the appropriate tag: `docker run --rm -it -p 4566:4566 -p 4510-4559:4510-4559 localstack/localstack:`. Check-out the [LocalStack releases](https://github.com/localstack/localstack/releases) to know more about specific LocalStack versions. @@ -386,7 +423,7 @@ docker run \ For instance, setting `LOCALSTACK_PERSISTENCE=1` is equivalent to `PERSISTENCE=1`. - To configure an Auth Token, refer to the [Auth Token](/aws/getting-started/auth-token) documentation. -::: + ::: ### Helm @@ -400,6 +437,7 @@ If you want to deploy LocalStack in your [Kubernetes](https://kubernetes.io) clu #### Deploy LocalStack using Helm You can deploy LocalStack in a Kubernetes cluster by running these commands: + ```bash helm repo add localstack-repo https://helm.localstack.cloud helm upgrade --install localstack localstack-repo/localstack @@ -410,6 +448,7 @@ The Helm charts are not maintained in the main repository, but in a [separate on ## What's next? Now that you have LocalStack up and running, the following resources might be useful for your next steps: + - Check out our [Quickstart guide](/aws/getting-started/quickstart) if you are a new user to get started with LocalStack quickly. - [Use the LocalStack integrations](/aws/integrations) to interact with LocalStack and other integrated tools, for example: - Use `awslocal` to use the AWS CLI against your local cloud! @@ -425,10 +464,12 @@ Now that you have LocalStack up and running, the following resources might be us #### The LocalStack CLI installation is successful, but I cannot execute `localstack` If you can successfully install LocalStack using `pip` but you cannot use it in your terminal, you most likely haven't set up your operating system's / terminal's `PATH` variable (in order to tell them where to find programs installed via `pip`). + - If you are using Windows, you can enable the `PATH` configuration when installing Python, [as described in the official docs of Python](https://docs.python.org/3/using/windows.html#finding-the-python-executable). - If you are using a MacOS or Linux operating system, please make sure that the `PATH` is correctly set up - either system wide, or in your terminal. As a workaround you can call the LocalStack CLI python module directly: + ```bash python3 -m localstack.cli.main ``` @@ -436,12 +477,15 @@ python3 -m localstack.cli.main #### The `localstack` CLI does not start the LocalStack container If you are using the `localstack` CLI to start LocalStack, but the container is not starting, please check the following: + - Uncheck the **Use kernel networking for UDP** option in Docker Desktop (**Settings** → **Resources** → **Network**) or follow the steps in our [documentation](/aws/tooling/dns-server#system-dns-configuration) to disable it. - Start LocalStack with a specific DNS address: + ```bash DNS_ADDRESS=0 localstack start ``` -- Remove port 53 as indicated in our [standard `docker-compose.yml` file](https://github.com/localstack/localstack/blob/main/docker-compose-pro.yml). + +- Remove port 53 as indicated in our [standard `docker-compose.yml` file](https://github.com/localstack/localstack/blob/main/docker-compose-pro.yml). #### How should I access the LocalStack logs on my local machine? diff --git a/src/content/docs/aws/getting-started/quickstart.mdx b/src/content/docs/aws/getting-started/quickstart.mdx index 687b87338..00f268b73 100644 --- a/src/content/docs/aws/getting-started/quickstart.mdx +++ b/src/content/docs/aws/getting-started/quickstart.mdx @@ -1,16 +1,16 @@ --- -title: Quickstart +title: Local Development description: Deploy a serverless API locally with LocalStack in under 10 minutes using Lambda and DynamoDB. template: doc sidebar: - order: 2 + order: 3 --- -import { Tabs, TabItem } from '@astrojs/starlight/components'; +import { Tabs, TabItem, Steps } from '@astrojs/starlight/components'; ## Introduction -In this quickstart you'll start LocalStack and deploy a simple serverless API — a **Lambda function backed by DynamoDB** — entirely on your local machine. +In this quickstart you'll start LocalStack and deploy a simple serverless API including a Lambda function backed by DynamoDB, entirely on your local machine. No AWS account needed. By the end you will have: @@ -18,9 +18,9 @@ By the end you will have: - LocalStack running locally in Docker - A Lambda function deployed and invokable via a public URL - A DynamoDB table storing data written by the Lambda -- Confirmed that your local environment behaves like real AWS +- A local environment that behaves like real AWS -Choose your preferred deployment style below: **AWS CLI** (`awslocal`) or **Terraform** (`tflocal`). +Choose your preferred deployment style below: **AWS CLI** or **Terraform**. ## Prerequisites @@ -46,10 +46,19 @@ The fastest way to get LocalStack running locally is with `lstk`, a lightweight Then start LocalStack: ```bash - lstk start + lstk ``` - On first run, `lstk` opens a browser login to authenticate, then pulls the image and starts the container automatically. + On first run, `lstk` opens a browser window to authenticate. It also pulls the LocalStack image and starts the container automatically. + + When the container is ready, you'll see log lines like: + + ```bash + ✔︎ LocalStack ready (containerId: 400b3e61f3c6) + • Endpoint: localhost.localstack.cloud:4566 + • Web app: https://app.localstack.cloud + > Tip: View deployed resources: lstk status + ``` :::note[Early release] `lstk` currently supports core lifecycle commands (start, stop, logs, status). @@ -64,188 +73,213 @@ The fastest way to get LocalStack running locally is with `lstk`, a lightweight localstack start ``` - - + When the container is ready, you'll see log lines like: -Wait for the container to report ready — you'll see a log line like `Ready.` or you can verify with: + ```bash + __ _______ __ __ + / / ____ _________ _/ / ___// /_____ ______/ /__ + / / / __ \/ ___/ __ `/ /\__ \/ __/ __ `/ ___/ //_/ + / /___/ /_/ / /__/ /_/ / /___/ / /_/ /_/ / /__/ ,< + /_____/\____/\___/\__,_/_//____/\__/\__,_/\___/_/|_| + + 💻 LocalStack CLI ${LOCALSTACK_VERSION} + 👤 Profile: default + + [12:47:13] starting LocalStack in Docker mode 🐳 localstack.py:494 + preparing environment bootstrap.py:1240 + configuring container bootstrap.py:1248 + starting container bootstrap.py:1258 + [12:47:15] detaching bootstrap.py:1262 + ``` -```bash -curl -s http://localhost:4566/_localstack/health | grep '"running"' -``` + + ## Step 2 — Deploy the serverless API -Now deploy a Lambda function and a DynamoDB table. Pick the tooling you prefer: +Now deploy a Lambda function and a DynamoDB table. For this tutorial, you can choose between creating resources using the AWS CLI via our `awslocal` wrapper or Terraform via our `tflocal` wrapper. - Install the `awslocal` wrapper if you haven't already: - - ```bash - pip install awscli-local - ``` - - **Create the Lambda function:** - - ```bash - mkdir -p /tmp/localstack-demo - cat > /tmp/localstack-demo/handler.py << 'EOF' - import json, boto3, os, uuid - - def handler(event, context): - table = boto3.resource('dynamodb').Table(os.environ['TABLE_NAME']) - method = event.get('requestContext', {}).get('http', {}).get('method', 'GET') - if method == 'POST': - item = {'id': str(uuid.uuid4()), **json.loads(event.get('body', '{}'))} - table.put_item(Item=item) - return {'statusCode': 200, 'body': json.dumps(item)} - result = table.scan() - return {'statusCode': 200, 'body': json.dumps(result['Items'])} - EOF - cd /tmp/localstack-demo && zip handler.zip handler.py - ``` - - **Create the DynamoDB table:** - - ```bash - awslocal dynamodb create-table \ - --table-name Messages \ - --attribute-definitions AttributeName=id,AttributeType=S \ - --key-schema AttributeName=id,KeyType=HASH \ - --billing-mode PAY_PER_REQUEST - ``` - - **Deploy the Lambda:** - - ```bash - awslocal lambda create-function \ - --function-name messages-api \ - --runtime python3.12 \ - --handler handler.handler \ - --zip-file fileb:///tmp/localstack-demo/handler.zip \ - --role arn:aws:iam::000000000000:role/lambda-role \ - --environment Variables={TABLE_NAME=Messages} - - awslocal lambda wait function-active --function-name messages-api - ``` - - **Create a public function URL:** - - ```bash - awslocal lambda create-function-url-config \ - --function-name messages-api \ - --auth-type NONE - ``` - - **Retrieve the URL:** - - ```bash - LAMBDA_URL=$(awslocal lambda list-function-url-configs \ - --function-name messages-api \ - --query 'FunctionUrlConfigs[0].FunctionUrl' \ - --output text) - echo $LAMBDA_URL - ``` + + +1. Install the `awslocal` wrapper if you haven't already: + + ```bash + pip install awscli-local + ``` + +2. Create the Lambda function + + The below code creates a Lambda function using Python and zips the code to be ready for deployment. + + ```bash + mkdir -p /tmp/localstack-demo + cat > /tmp/localstack-demo/handler.py << 'EOF' + import json, boto3, os, uuid + + def handler(event, context): + table = boto3.resource('dynamodb').Table(os.environ['TABLE_NAME']) + method = event.get('requestContext', {}).get('http', {}).get('method', 'GET') + if method == 'POST': + item = {'id': str(uuid.uuid4()), **json.loads(event.get('body', '{}'))} + table.put_item(Item=item) + return {'statusCode': 200, 'body': json.dumps(item)} + result = table.scan() + return {'statusCode': 200, 'body': json.dumps(result['Items'])} + EOF + cd /tmp/localstack-demo && zip handler.zip handler.py + ``` + +3. Create the DynamoDB table + + ```bash + awslocal dynamodb create-table \ + --table-name Messages \ + --attribute-definitions AttributeName=id,AttributeType=S \ + --key-schema AttributeName=id,KeyType=HASH \ + --billing-mode PAY_PER_REQUEST + ``` + +4. Deploy the Lambda + + ```bash + awslocal lambda create-function \ + --function-name messages-api \ + --runtime python3.12 \ + --handler handler.handler \ + --zip-file fileb:///tmp/localstack-demo/handler.zip \ + --role arn:aws:iam::000000000000:role/lambda-role \ + --environment Variables={TABLE_NAME=Messages} + + awslocal lambda wait function-active --function-name messages-api + ``` + +5. Create a public function URL + + ```bash + awslocal lambda create-function-url-config \ + --function-name messages-api \ + --auth-type NONE + ``` + +6. Retrieve the URL + + ```bash + LAMBDA_URL=$(awslocal lambda list-function-url-configs \ + --function-name messages-api \ + --query 'FunctionUrlConfigs[0].FunctionUrl' \ + --output text) + echo $LAMBDA_URL + ``` + + - Install Terraform and the `tflocal` wrapper: + +1. Install Terraform and the `tflocal` wrapper: ```bash - brew install hashicorp/tap/terraform # or see https://developer.hashicorp.com/terraform/install + brew install hashicorp/tap/terraform pip install terraform-local ``` - Create a project directory and `main.tf`: - - ```bash - mkdir -p /tmp/localstack-demo && cd /tmp/localstack-demo - ``` - - ```hcl - # main.tf - terraform { - required_providers { - aws = { source = "hashicorp/aws" } - archive = { source = "hashicorp/archive" } - } - } - - resource "aws_dynamodb_table" "messages" { - name = "Messages" - billing_mode = "PAY_PER_REQUEST" - hash_key = "id" - attribute { - name = "id" - type = "S" - } - } - - data "archive_file" "lambda" { - type = "zip" - output_path = "${path.module}/handler.zip" - source { - filename = "handler.py" - content = <<-EOF - import json, boto3, os, uuid - def handler(event, context): - table = boto3.resource('dynamodb').Table(os.environ['TABLE_NAME']) - method = event.get('requestContext', {}).get('http', {}).get('method', 'GET') - if method == 'POST': - item = {'id': str(uuid.uuid4()), **json.loads(event.get('body', '{}'))} - table.put_item(Item=item) - return {'statusCode': 200, 'body': json.dumps(item)} - result = table.scan() - return {'statusCode': 200, 'body': json.dumps(result['Items'])} - EOF - } - } - - resource "aws_iam_role" "lambda_role" { - name = "lambda-role" - assume_role_policy = jsonencode({ - Version = "2012-10-17" - Statement = [{ Action = "sts:AssumeRole", Effect = "Allow", - Principal = { Service = "lambda.amazonaws.com" } }] - }) - } - - resource "aws_lambda_function" "messages_api" { - function_name = "messages-api" - runtime = "python3.12" - handler = "handler.handler" - filename = data.archive_file.lambda.output_path - source_code_hash = data.archive_file.lambda.output_base64sha256 - role = aws_iam_role.lambda_role.arn - environment { - variables = { TABLE_NAME = aws_dynamodb_table.messages.name } - } - } - - resource "aws_lambda_function_url" "messages_api" { - function_name = aws_lambda_function.messages_api.function_name - authorization_type = "NONE" - } - - output "function_url" { - value = aws_lambda_function_url.messages_api.function_url - } - ``` - - **Deploy:** - - ```bash - tflocal init - tflocal apply -auto-approve - ``` - - **Retrieve the URL:** - - ```bash - LAMBDA_URL=$(tflocal output -raw function_url) - echo $LAMBDA_URL - ``` - + For additional installation options, see the [Terraform installation guide](https://developer.hashicorp.com/terraform/install). + +2. Create a project directory. + + ```bash + mkdir -p /tmp/localstack-demo && cd /tmp/localstack-demo + ``` + + Then create a `main.tf` file with the following content: + + ```hcl + # main.tf + terraform { + required_providers { + aws = { source = "hashicorp/aws" } + archive = { source = "hashicorp/archive" } + } + } + + resource "aws_dynamodb_table" "messages" { + name = "Messages" + billing_mode = "PAY_PER_REQUEST" + hash_key = "id" + attribute { + name = "id" + type = "S" + } + } + + data "archive_file" "lambda" { + type = "zip" + output_path = "${path.module}/handler.zip" + source { + filename = "handler.py" + content = <<-EOF + import json, boto3, os, uuid + def handler(event, context): + table = boto3.resource('dynamodb').Table(os.environ['TABLE_NAME']) + method = event.get('requestContext', {}).get('http', {}).get('method', 'GET') + if method == 'POST': + item = {'id': str(uuid.uuid4()), **json.loads(event.get('body', '{}'))} + table.put_item(Item=item) + return {'statusCode': 200, 'body': json.dumps(item)} + result = table.scan() + return {'statusCode': 200, 'body': json.dumps(result['Items'])} + EOF + } + } + + resource "aws_iam_role" "lambda_role" { + name = "lambda-role" + assume_role_policy = jsonencode({ + Version = "2012-10-17" + Statement = [{ Action = "sts:AssumeRole", Effect = "Allow", + Principal = { Service = "lambda.amazonaws.com" } }] + }) + } + + resource "aws_lambda_function" "messages_api" { + function_name = "messages-api" + runtime = "python3.12" + handler = "handler.handler" + filename = data.archive_file.lambda.output_path + source_code_hash = data.archive_file.lambda.output_base64sha256 + role = aws_iam_role.lambda_role.arn + environment { + variables = { TABLE_NAME = aws_dynamodb_table.messages.name } + } + } + + resource "aws_lambda_function_url" "messages_api" { + function_name = aws_lambda_function.messages_api.function_name + authorization_type = "NONE" + } + + output "function_url" { + value = aws_lambda_function_url.messages_api.function_url + } + ``` + +3. Deploy + + ```bash + tflocal init + tflocal apply -auto-approve + ``` + +4. Retrieve the URL + + ```bash + LAMBDA_URL=$(tflocal output -raw function_url) + echo $LAMBDA_URL + ``` + + @@ -280,16 +314,25 @@ Navigate to your [Default Instance](https://app.localstack.cloud/inst/default/st ## Step 5 — Clean up -When you're done, stop LocalStack to tear down all local resources: +First, stop LocalStack to tear down all local resources: -```bash -lstk stop # if using lstk -localstack stop # if using the LocalStack CLI -``` +{/* prettier-ignore-start */} + + + ```bash lstk stop ``` + ```bash localstack stop ``` + +{/* prettier-ignore-end */} LocalStack is ephemeral by default — stopping it removes all provisioned resources. To persist state across restarts, see [Persistence](/aws/capabilities/state-management/persistence/) or [Cloud Pods](/aws/capabilities/state-management/cloud-pods/). +Now that you're done, you can remove the tutorial files from your machine (the Lambda source, zip, and, if you used Terraform, `main.tf` and state under the same folder): + +```bash +rm -rf /tmp/localstack-demo +``` + ## Next steps - [Tutorials](/aws/tutorials/) — Deeper dives into specific AWS services and application stacks From c778969deee249c6a1712a0cfca17e5ed992c105 Mon Sep 17 00:00:00 2001 From: Brian Rinaldi Date: Tue, 28 Apr 2026 08:45:42 -0400 Subject: [PATCH 04/37] Clean up CI-CD landing page --- .../docs/aws/getting-started/ci-cd.mdx | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/src/content/docs/aws/getting-started/ci-cd.mdx b/src/content/docs/aws/getting-started/ci-cd.mdx index 594ffed2c..0618d8657 100644 --- a/src/content/docs/aws/getting-started/ci-cd.mdx +++ b/src/content/docs/aws/getting-started/ci-cd.mdx @@ -1,6 +1,6 @@ --- title: CI/CD -description: Run LocalStack in CI pipelines — auth tokens, Docker Compose, and GitHub Actions examples. +description: Run LocalStack in CI pipelines — auth tokens, Docker Compose, GitHub Actions examples, and persisting state with Cloud Pods or state export. template: doc sidebar: order: 4 @@ -11,15 +11,16 @@ import { Tabs, TabItem } from '@astrojs/starlight/components'; ## Overview LocalStack works great in CI environments, allowing your integration tests to run incredibly fast and with no cloud costs. -The setup differs from local development in a few important ways: +The setup differs slighty from local development in a few important ways: - **Use a CI Auth Token**, not your personal Developer token - **Manage the container directly** via Docker Compose or `docker run` — `lstk` and the LocalStack Desktop are local-only tools -- **LocalStack is ephemeral by default** — each CI run starts fresh, which is usually exactly what you want for reproducible tests +- **Runs are often isolated per job** — many pipelines start from an empty LocalStack instance for reproducible tests +- **Persistence in CI is supported** — [Cloud Pods](/aws/capabilities/state-management/cloud-pods/), snapshot-based [persistence](/aws/capabilities/state-management/persistence/) with a mounted volume, or `localstack state export` / `localstack state import` with artifacts or cache. ## Step 1 — Get a CI Auth Token -CI pipelines should use a dedicated CI Auth Token, not a Developer token tied to a specific user. +CI pipelines should use a dedicated CI Auth Token, not a developer token tied to a specific user. 1. Go to the [Auth Tokens page](https://app.localstack.cloud/workspace/auth-tokens) in the LocalStack Web Application 2. Create a new **CI Auth Token** @@ -52,9 +53,10 @@ See the [Auth Token documentation](/aws/getting-started/auth-token/) for full de - uses: actions/checkout@v4 - name: Start LocalStack - uses: LocalStack/setup-localstack@v0.2 + uses: LocalStack/setup-localstack@v0.2.2 with: image-tag: latest + install-awslocal: "true" env: LOCALSTACK_AUTH_TOKEN: ${{ secrets.LOCALSTACK_AUTH_TOKEN }} @@ -160,20 +162,24 @@ curl -s http://localhost:4566/_localstack/info | jq '.is_license_activated' ## Key differences from local development -| | Local development | CI/CD | -| -------------- | ----------------------------- | ------------------------------- | -| **CLI** | `lstk` or LocalStack CLI | Docker Compose / `docker run` | -| **Auth** | Browser login or stored token | `LOCALSTACK_AUTH_TOKEN` env var | -| **Token type** | Developer token | CI token | -| **State** | Optional persistence | Ephemeral (fresh per run) | -| **Startup** | Interactive TUI | `--non-interactive` / `-d` flag | +| | Local development | CI/CD | +| -------------- | ----------------------------- | ----------------------------------------------------------------------------------- | +| **CLI** | `lstk` or LocalStack CLI | Docker Compose / `docker run` | +| **Auth** | Browser login or stored token | `LOCALSTACK_AUTH_TOKEN` env var | +| **Token type** | Developer token | CI token | +| **State** | Optional persistence | Optional persistence (same mechanisms; typical pattern is a fresh instance per job) | +| **Startup** | Interactive TUI | `--non-interactive` / `-d` flag | ## Persisting state across runs -By default, LocalStack starts fresh on every run — all resources are gone when the container stops. -This is ideal for most CI use cases (clean, reproducible tests). +If you tear down the container at the end of a job, nothing is left on disk unless you save it — which is why many teams use a clean instance every time. +When you **do** need to reuse infrastructure or data between pipeline runs or steps, CI is fully supported: -If you need to share state across runs (e.g., seed data, pre-built infrastructure), look at [Cloud Pods](/aws/capabilities/state-management/cloud-pods/), which let you snapshot and restore LocalStack state. +- **[Cloud Pods](/aws/capabilities/state-management/cloud-pods/)** — save and load snapshots; the [`setup-localstack`](https://github.com/localstack/setup-localstack) action can load and save pods via `state-backend: cloud-pods` (see [GitHub Actions](/aws/integrations/continuous-integration/github-actions/) — _Store Localstack state_). +- **Snapshot-based [persistence](/aws/capabilities/state-management/persistence/)** — enable `PERSISTENCE=1` and mount a volume so state survives container restarts on the same runner or workspace. +- **State export/import** — run `localstack state export` and `localstack state import` and pass the file through your CI provider’s **artifacts**, **cache**, or attached storage (for example, see [GitLab CI](/aws/integrations/continuous-integration/gitlab-ci/) — _Store Localstack state_). + +Choose the approach that fits your runner model: for example, multi-job GitLab pipelines often need explicit state handoff because services do not carry between jobs. ## More CI integrations From 9ed0787d20584084592370047d08a8aef8f569fe Mon Sep 17 00:00:00 2001 From: Brian Rinaldi Date: Tue, 28 Apr 2026 16:01:01 -0400 Subject: [PATCH 05/37] Improvements to the AI page --- .../docs/aws/getting-started/ai-workflows.mdx | 66 ++++++++++++------- 1 file changed, 44 insertions(+), 22 deletions(-) diff --git a/src/content/docs/aws/getting-started/ai-workflows.mdx b/src/content/docs/aws/getting-started/ai-workflows.mdx index 224690374..7ab8e76e5 100644 --- a/src/content/docs/aws/getting-started/ai-workflows.mdx +++ b/src/content/docs/aws/getting-started/ai-workflows.mdx @@ -8,39 +8,61 @@ sidebar: ## Overview -LocalStack is a natural fit for AI-assisted development workflows. -Whether you're using an AI coding assistant to generate infrastructure code, running an agent that deploys AWS resources, or validating AI-generated Terraform before applying it to real AWS — LocalStack gives you a safe, fast, cost-free environment to do it in. +AI-assisted development workflows need a fast and secure environment to develop and test in. +Whether you're using an AI coding assistant to generate infrastructure code, running an agent that deploys AWS resources, or validating AI-generated IaC before applying it to real AWS — LocalStack gives you a safe, fast, cost-free environment to run these workflows in. ## Connect an AI coding assistant via MCP -The [LocalStack MCP Server](https://github.com/localstack/localstack-mcp-server) exposes LocalStack's API as an MCP (Model Context Protocol) tool server. -This lets AI assistants like Claude, Cursor, Windsurf, or any MCP-compatible tool inspect and interact with your running LocalStack instance directly. +The [LocalStack MCP Server](https://github.com/localstack/localstack-mcp-server) is a [Model Context Protocol](https://modelcontextprotocol.io/) (MCP) server that connects compatible clients (Claude, Cursor, Windsurf, and others) to your LocalStack environment. +It gives agents tools to run the full local cloud lifecycle—not only generating infrastructure code, but starting the container, deploying and tearing down IaC, analyzing logs, and more. +See [Introducing the LocalStack MCP Server](https://blog.localstack.cloud/introducing-localstack-mcp-server/) for the original announcement and walkthrough. -With the MCP server connected, your AI assistant can: +With the MCP server configured, your assistant can use tools such as: -- List running AWS services and deployed resources -- Create, update, and delete resources in your local environment -- Query resource state to understand what's already deployed -- Help you debug issues by inspecting live infrastructure +- **Lifecycle** — Start, stop, restart, or check status of the LocalStack container +- **Deploy** — Deploy or destroy CDK, Terraform, SAM, or CloudFormation projects on LocalStack +- **Operations** — Analyze logs, run AWS CLI commands via `awslocal`, manage [Cloud Pods](/aws/capabilities/state-management/cloud-pods/), and (where supported) IAM policy analysis, chaos injection, and docs search -**Quick setup:** +...and many more. -```bash -# Install the LocalStack MCP server -pip install localstack-mcp-server +### MCP Server Prerequisites + +Before you begin, make sure these are installed and in your system's `PATH`: + +- [Node.js](https://nodejs.org/en/) (v20.x or later) to run the `npx` command. +- [LocalStack CLI](https://docs.localstack.cloud/user-guide/cli/) and [Docker](https://docs.docker.com/get-docker/) to manage the LocalStack container itself. +- [`cdklocal`](https://docs.localstack.cloud/user-guide/integrations/aws-cdk/) or [`tflocal`](https://docs.localstack.cloud/user-guide/integrations/terraform/) to use the `localstack-deployer` tool. (optional) +- A [LocalStack Auth Token](https://docs.localstack.cloud/getting-started/auth-token/) to enable licensed features. (optional) + +### MCP Server Configuration + +Add a server entry like this to your client's MCP configuration—for **Cursor**, this would typically be `~/.cursor/mcp.json`. +For **Claude Code**, register the server with `claude mcp add` (it is saved to your project-level MCP configuration).. + +```json +{ + "mcpServers": { + "localstack-mcp-server": { + "command": "npx", + "args": ["-y", "@localstack/localstack-mcp-server"], + "env": { + "LOCALSTACK_AUTH_TOKEN": "" + } + } + } +} ``` -Then add it to your AI tool's MCP configuration. -See the [localstack-mcp-server README](https://github.com/localstack/localstack-mcp-server) for tool-specific setup instructions for Claude, Cursor, and others. +Full prerequisites, Cursor/VS Code/Claude Code variants, custom endpoints (`LOCALSTACK_HOSTNAME`, `LOCALSTACK_PORT`), troubleshooting, and the complete tool reference are on [LocalStack MCP Server](/aws/tooling/mcp-server/). :::note -The MCP server connects to a running LocalStack instance — make sure LocalStack is started first with `lstk start` or `localstack start`. +You do not need to start LocalStack manually before using MCP: an agent can start the container using the **localstack-management** tool once this configuration is in place. +If LocalStack already runs elsewhere, point the MCP server at it via the `env` block as described in [Connecting to a custom LocalStack endpoint](/aws/tooling/mcp-server/#connecting-to-a-custom-localstack-endpoint). ::: ## Deploy with agent-driven automation using Skills [LocalStack Skills](https://github.com/localstack/skills) are pre-built agent skill definitions for deploying common AWS architectures locally. -Instead of stepping through manual CLI commands, you describe what you want and an agent handles the deployment. Skills are useful when: @@ -66,8 +88,8 @@ See [Tooling](/aws/tooling/) for the full list of LocalStack-aware wrappers for ## Summary -| Use case | Tool | -| ------------------------------------------------------ | ---------------------------------------------------------------------------- | -| AI assistant that can inspect & manage local resources | [LocalStack MCP Server](https://github.com/localstack/localstack-mcp-server) | -| Agent-driven infrastructure deployment | [LocalStack Skills](https://github.com/localstack/skills) | -| Validate AI-generated IaC safely | LocalStack + `tflocal` / `cdklocal` / `awslocal` | +| Use case | Tool | +| ------------------------------------------------------ | --------------------------------------------------------- | +| AI assistant that can inspect & manage local resources | [LocalStack MCP Server](/aws/tooling/mcp-server/) | +| Agent-driven infrastructure deployment | [LocalStack Skills](https://github.com/localstack/skills) | +| Validate AI-generated IaC safely | LocalStack + `tflocal` / `cdklocal` / `awslocal` | From 0b1b0dd941021516d802ff0f65daeb0098d2e1bb Mon Sep 17 00:00:00 2001 From: Brian Rinaldi Date: Tue, 28 Apr 2026 16:39:00 -0400 Subject: [PATCH 06/37] Minor improvement to the AI page --- src/content/docs/aws/getting-started/ai-workflows.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/docs/aws/getting-started/ai-workflows.mdx b/src/content/docs/aws/getting-started/ai-workflows.mdx index 7ab8e76e5..51efca9d4 100644 --- a/src/content/docs/aws/getting-started/ai-workflows.mdx +++ b/src/content/docs/aws/getting-started/ai-workflows.mdx @@ -37,7 +37,7 @@ Before you begin, make sure these are installed and in your system's `PATH`: ### MCP Server Configuration Add a server entry like this to your client's MCP configuration—for **Cursor**, this would typically be `~/.cursor/mcp.json`. -For **Claude Code**, register the server with `claude mcp add` (it is saved to your project-level MCP configuration).. +For **Claude Code**, register the server with `claude mcp add` (it is saved to your project-level MCP configuration). ```json { @@ -62,7 +62,7 @@ If LocalStack already runs elsewhere, point the MCP server at it via the `env` b ## Deploy with agent-driven automation using Skills -[LocalStack Skills](https://github.com/localstack/skills) are pre-built agent skill definitions for deploying common AWS architectures locally. +[LocalStack Skills](https://github.com/localstack/skills) are pre-built agent skill definitions for deploying common AWS architectures locally. It contains skills for LocalStack lifecycle management, IaC deployment, state management and more. Skills can be used in combination with the MCP server to create a fully autonomous agent-driven workflow. Skills are useful when: From b73231c79c2353a720fe71e1b56b601f4af27e0b Mon Sep 17 00:00:00 2001 From: Brian Rinaldi Date: Tue, 28 Apr 2026 17:05:26 -0400 Subject: [PATCH 07/37] Some reworking of the intro and removal of outdated content --- .../docs/aws/getting-started/auth-token.mdx | 31 ++++++------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/src/content/docs/aws/getting-started/auth-token.mdx b/src/content/docs/aws/getting-started/auth-token.mdx index b35141c90..aea872ca7 100644 --- a/src/content/docs/aws/getting-started/auth-token.mdx +++ b/src/content/docs/aws/getting-started/auth-token.mdx @@ -10,10 +10,16 @@ import { Code, Tabs, TabItem } from '@astrojs/starlight/components'; ## Introduction -The Auth Token is required to activate the LocalStack for AWS core cloud emulator. It identifies and authenticates users outside the LocalStack Web Application. -It primarily accesses your workspace and advanced services & features. +The Auth Token activates LocalStack for AWS. It ties the running instance to your workspace and license and is required whenever you use LocalStack for AWS. -Auth tokens come in two types: a **Developer Auth Token** and a **CI Auth Token**: +**Whether you need to configure a token by hand** depends on how you run LocalStack: + +- **[`lstk`](/aws/tooling/lstk)** (early release) — For most local development, the Auth Token is present but easy to overlook. On first run or after `lstk login`, the CLI completes a browser login flow, stores your **Developer Auth Token** in the system keyring (or a config-directory fallback when no keyring is available), and injects it into the container whenever you start LocalStack. You are still using an Auth Token for activation; `lstk` obtains and reuses it after login instead of asking you to set `LOCALSTACK_AUTH_TOKEN` yourself. +- **LocalStack CLI (`localstack`)** — You configure the token yourself: set `LOCALSTACK_AUTH_TOKEN` or run `localstack auth set-token` (see [Configuring your Auth Token](#configuring-your-auth-token)). [`lstk`](/aws/tooling/lstk) is currently in early release and missing some core features, so the `localstack` CLI is still the right tool for Cloud Pods, Extensions, Ephemeral Instances, and other advanced features, so many workflows keep using it and therefore set an Auth Token explicitly. For personal development, use your **Developer Auth Token** from the web app. +- **Docker or Docker Compose** — You pass `LOCALSTACK_AUTH_TOKEN` into the container (see [Configuring your Auth Token](#configuring-your-auth-token)). Use your **Developer Auth Token** for local runs unless you are in CI. +- **CI pipelines and other automated, non-interactive environments** — You must set `LOCALSTACK_AUTH_TOKEN` to a **CI Auth Token**. Developer Auth Tokens should not be used in CI. See [CI Environments](#ci-environments). + +Auth tokens come in two types: a **Developer Auth Token** and a **CI Auth Token**. - The **Developer Auth Token** is linked to a specific user within a specific workspace. Every user has their own Auth Token. @@ -205,25 +211,6 @@ Another way to confirm this is by checking the logs of the LocalStack container Otherwise, check our [troubleshooting](#troubleshooting) section. -## FAQ - -### How do I activate older versions of LocalStack (Before v3.0)? - -Prior to the introduction of Auth Tokens, LocalStack used **API keys** managed through the `LOCALSTACK_API_KEY` environment variable for activation. - -For backwards compatibility, we've updated our back-end to accept new Auth Tokens within the `LOCALSTACK_API_KEY` variable. -You can use the new Auth Token in the same way you previously used the API key. - -### When will the legacy API keys be phased out? - -In early 2025, we will begin phasing out legacy API keys entirely. -After the sunsetting period, legacy API and legacy CI keys will no longer activate or work with LocalStack. - -During the sunsetting period, the legacy service will experience scheduled downtimes. -These are planned to encourage users to transition to new Auth Tokens while minimizing impact for those who have not yet updated. - -The downtime schedule will be communicated well in advance, allowing users ample time to switch to the new Auth Tokens. - ## Troubleshooting While using Auth Tokens, LocalStack demands a successful license activation for startup. From 72d35ca63f433ed4cfee6cab96593dff17bb3665 Mon Sep 17 00:00:00 2001 From: Brian Rinaldi Date: Tue, 28 Apr 2026 17:19:01 -0400 Subject: [PATCH 08/37] Added kubernetes as a secondary path This was per the suggestion of Colin --- src/components/SecondaryPathCard.tsx | 20 ++++++++++++++++ .../docs/aws/getting-started/index.mdx | 11 +++++++++ src/styles/global.css | 24 +++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 src/components/SecondaryPathCard.tsx diff --git a/src/components/SecondaryPathCard.tsx b/src/components/SecondaryPathCard.tsx new file mode 100644 index 000000000..39aaf79c8 --- /dev/null +++ b/src/components/SecondaryPathCard.tsx @@ -0,0 +1,20 @@ +import React from 'react'; + +interface SecondaryPathCardProps { + title: string; + href: string; + children: React.ReactNode; +} + +export const SecondaryPathCard: React.FC = ({ title, href, children }) => { + return ( + + ); +}; diff --git a/src/content/docs/aws/getting-started/index.mdx b/src/content/docs/aws/getting-started/index.mdx index 4b0e25035..a948b454e 100644 --- a/src/content/docs/aws/getting-started/index.mdx +++ b/src/content/docs/aws/getting-started/index.mdx @@ -8,6 +8,7 @@ sidebar: --- import { SectionCards } from '../../../../components/SectionCards.tsx'; +import { SecondaryPathCard } from '../../../../components/SecondaryPathCard.tsx'; [LocalStack for AWS](https://localstack.cloud) is a cloud service emulator that runs in a single container on your laptop or in your CI environment. It gives you a fully functional AWS environment — Lambda, DynamoDB, S3, SQS, and [80+ more services](/aws/services/) — without touching a real AWS account and without incurring cloud costs. @@ -46,3 +47,13 @@ LocalStack for AWS also includes advanced capabilities for teams: [Cloud Pods](/ ]} client:load /> + + + +LocalStack for AWS supports **running inside a Kubernetes cluster** (for example with the Operator or Helm chart), that is an **Enterprise-only** deployment model enabling dynamic scaling, isolation, and native Kubernetes orchestration. + + diff --git a/src/styles/global.css b/src/styles/global.css index c00c4feb1..33e14b98d 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -108,6 +108,30 @@ h3 { transform: translateY(-2px); } +.path-secondary-card { + margin-top: 1rem; +} + +.path-secondary-card .path-secondary-card__title { + font-size: 18px; + font-weight: 500; + letter-spacing: -0.12px; +} + +.path-secondary-card .path-secondary-card__body { + font-size: 16px; + line-height: 26px; + color: var(--sl-color-gray-3); +} + +.path-secondary-card .path-secondary-card__body > :first-child { + margin-top: 0; +} + +.path-secondary-card .path-secondary-card__body > :last-child { + margin-bottom: 0; +} + .service-box-content { height: 100%; display: flex; From bb1cc26f96ef5e223d238399d726d43aace8b455 Mon Sep 17 00:00:00 2001 From: Brian Rinaldi Date: Wed, 29 Apr 2026 07:38:07 -0400 Subject: [PATCH 09/37] Modify to note lstk for CI --- src/content/docs/aws/getting-started/ci-cd.mdx | 16 ++++++++-------- .../docs/aws/getting-started/installation.mdx | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/content/docs/aws/getting-started/ci-cd.mdx b/src/content/docs/aws/getting-started/ci-cd.mdx index 0618d8657..ced79a3e7 100644 --- a/src/content/docs/aws/getting-started/ci-cd.mdx +++ b/src/content/docs/aws/getting-started/ci-cd.mdx @@ -14,7 +14,7 @@ LocalStack works great in CI environments, allowing your integration tests to ru The setup differs slighty from local development in a few important ways: - **Use a CI Auth Token**, not your personal Developer token -- **Manage the container directly** via Docker Compose or `docker run` — `lstk` and the LocalStack Desktop are local-only tools +- **Start LocalStack without a browser** — Docker Compose, `docker run`, or CI helpers such as [`setup-localstack`](https://github.com/localstack/setup-localstack) are common; [`lstk`](/aws/tooling/lstk/) also works in CI when you set `LOCALSTACK_AUTH_TOKEN` and use [`--non-interactive`](/aws/tooling/lstk/#interactive-and-non-interactive-mode) (or rely on automatic non-interactive detection). LocalStack Desktop remains a local-only GUI. - **Runs are often isolated per job** — many pipelines start from an empty LocalStack instance for reproducible tests - **Persistence in CI is supported** — [Cloud Pods](/aws/capabilities/state-management/cloud-pods/), snapshot-based [persistence](/aws/capabilities/state-management/persistence/) with a mounted volume, or `localstack state export` / `localstack state import` with artifacts or cache. @@ -162,13 +162,13 @@ curl -s http://localhost:4566/_localstack/info | jq '.is_license_activated' ## Key differences from local development -| | Local development | CI/CD | -| -------------- | ----------------------------- | ----------------------------------------------------------------------------------- | -| **CLI** | `lstk` or LocalStack CLI | Docker Compose / `docker run` | -| **Auth** | Browser login or stored token | `LOCALSTACK_AUTH_TOKEN` env var | -| **Token type** | Developer token | CI token | -| **State** | Optional persistence | Optional persistence (same mechanisms; typical pattern is a fresh instance per job) | -| **Startup** | Interactive TUI | `--non-interactive` / `-d` flag | +| | Local development | CI/CD | +| -------------- | -------------------------------- | ----------------------------------------------------------------------------------- | +| **CLI** | `lstk` or LocalStack CLI | Docker Compose / `docker run`, or `lstk --non-interactive` | +| **Auth** | Browser login or stored token | `LOCALSTACK_AUTH_TOKEN` env var | +| **Token type** | Developer token | CI token | +| **State** | Optional persistence | Optional persistence (same mechanisms; typical pattern is a fresh instance per job) | +| **Startup** | Interactive TUI (default `lstk`) | Non-interactive (`docker compose`, `docker run -d`, `lstk --non-interactive`) | ## Persisting state across runs diff --git a/src/content/docs/aws/getting-started/installation.mdx b/src/content/docs/aws/getting-started/installation.mdx index d60961891..2fc402009 100644 --- a/src/content/docs/aws/getting-started/installation.mdx +++ b/src/content/docs/aws/getting-started/installation.mdx @@ -278,7 +278,7 @@ If it was installed using the pre-built binary or via Brew, please run the insta ## CI and server environments -For CI pipelines and server deployments, you'll manage the LocalStack container directly rather than using a local CLI. +For CI pipelines and server deployments, use non-interactive startup: Docker Compose or `docker run` are typical, or [`lstk --non-interactive`](/aws/tooling/lstk/#interactive-and-non-interactive-mode) with `LOCALSTACK_AUTH_TOKEN`. See the [CI/CD Setup guide](/aws/getting-started/ci-cd/) for a complete walkthrough including GitHub Actions examples. The options below cover the main container management approaches: From 6ef84e4ab0ac11766e12f866549a8649a242013d Mon Sep 17 00:00:00 2001 From: Quetzalli Date: Thu, 28 May 2026 22:21:32 +0200 Subject: [PATCH 10/37] Update and rename quickstart.mdx to local-development.mdx --- .../getting-started/{quickstart.mdx => local-development.mdx} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/content/docs/aws/getting-started/{quickstart.mdx => local-development.mdx} (98%) diff --git a/src/content/docs/aws/getting-started/quickstart.mdx b/src/content/docs/aws/getting-started/local-development.mdx similarity index 98% rename from src/content/docs/aws/getting-started/quickstart.mdx rename to src/content/docs/aws/getting-started/local-development.mdx index 00f268b73..8855f5903 100644 --- a/src/content/docs/aws/getting-started/quickstart.mdx +++ b/src/content/docs/aws/getting-started/local-development.mdx @@ -10,7 +10,7 @@ import { Tabs, TabItem, Steps } from '@astrojs/starlight/components'; ## Introduction -In this quickstart you'll start LocalStack and deploy a simple serverless API including a Lambda function backed by DynamoDB, entirely on your local machine. +In this guide you'll start LocalStack and deploy a simple serverless API including a Lambda function backed by DynamoDB, entirely on your local machine. No AWS account needed. By the end you will have: From b7ebb19049ccbcf2120470cc4e297daa961045e1 Mon Sep 17 00:00:00 2001 From: Quetzalli Date: Thu, 28 May 2026 22:30:49 +0200 Subject: [PATCH 11/37] Draft 2: rewrite index.mdx --- .../docs/aws/getting-started/index.mdx | 40 ++++++++----------- 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/src/content/docs/aws/getting-started/index.mdx b/src/content/docs/aws/getting-started/index.mdx index a948b454e..a639c333b 100644 --- a/src/content/docs/aws/getting-started/index.mdx +++ b/src/content/docs/aws/getting-started/index.mdx @@ -1,6 +1,6 @@ --- title: Overview -description: This section describes how to get started with LocalStack for AWS using a variety of options, and provides details on how LocalStack can be configured to fit the needs of a local cloud sandbox for development, testing, and experimentation. +description: Introduction to LocalStack for AWS, covering core use cases, local cloud capabilities, and deployment options for development and testing. template: doc editUrl: false sidebar: @@ -8,52 +8,44 @@ sidebar: --- import { SectionCards } from '../../../../components/SectionCards.tsx'; -import { SecondaryPathCard } from '../../../../components/SecondaryPathCard.tsx'; -[LocalStack for AWS](https://localstack.cloud) is a cloud service emulator that runs in a single container on your laptop or in your CI environment. -It gives you a fully functional AWS environment — Lambda, DynamoDB, S3, SQS, and [80+ more services](/aws/services/) — without touching a real AWS account and without incurring cloud costs. +LocalStack provides a cloud service emulator that runs within a single container on your local machine or CI environment. It delivers a functional AWS environment including Lambda, DynamoDB, S3, SQS, and [80+ supported services](/aws/services/), enabling development and testing without an AWS account or cloud-related costs. -Here's why developers and teams use it: +### Core Use Cases -- **Faster development loops** — Test changes against local AWS services instantly, without waiting on real deployments or worrying about cloud costs. -- **Integration testing in CI** — Run real integration tests against local AWS infrastructure in every pull request, catching bugs before they reach production. -- **Validate IaC before applying** — Deploy your Terraform, CDK, or CloudFormation to LocalStack first. Confirm it works the way you expect before applying to a real AWS environment. -- **Safe experimentation** — Explore new AWS services and architectures freely, with no risk to production systems. +- **Accelerate development loops**: Test changes against local AWS services instantly to bypass deployment wait times. +- **Automate integration testing**: Execute integration tests against local AWS infrastructure within pull requests to identify regressions before production. +- **Validate IaC**: Deploy Terraform, CDK, or CloudFormation templates to LocalStack to verify infrastructure logic before applying changes to a cloud environment. +- **Experimental sandbox**: Explore new AWS services and architectures in a risk-free environment. -LocalStack for AWS also includes advanced capabilities for teams: [Cloud Pods](/aws/capabilities/state-management/cloud-pods/) for sharing and restoring state, [IAM policy enforcement](/aws/capabilities/security-testing/iam-policy-enforcement/), [Chaos Engineering](/aws/capabilities/chaos-engineering/), and more. +LocalStack also provides advanced features for team collaboration and security, including [Cloud Pods](/aws/capabilities/state-management/cloud-pods/) for state management, [IAM policy enforcement](/aws/capabilities/security-testing/iam-policy-enforcement/), and [Chaos Engineering](/aws/capabilities/chaos-engineering/). -## Choose your path +## Explore by deployment - - -LocalStack for AWS supports **running inside a Kubernetes cluster** (for example with the Operator or Helm chart), that is an **Enterprise-only** deployment model enabling dynamic scaling, isolation, and native Kubernetes orchestration. - - +:::note +**Enterprise K8 Deployment:** LocalStack also supports execution within Kubernetes clusters via the Operator or Helm charts. This model enables dynamic scaling, environment isolation, and native orchestration. See our [Kubernetes Deployment guide](/aws/enterprise/kubernetes/) for more information. +::: From fb4ec712bd60f1cbfc5f110d85a63aad67ca8a41 Mon Sep 17 00:00:00 2001 From: Quetzalli Date: Thu, 28 May 2026 22:32:39 +0200 Subject: [PATCH 12/37] Delete dead code: src/components/SecondaryPathCard.tsx The reference to the k8 tutorial has been moved into a standard Note component. This file is now dead code. --- src/components/SecondaryPathCard.tsx | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 src/components/SecondaryPathCard.tsx diff --git a/src/components/SecondaryPathCard.tsx b/src/components/SecondaryPathCard.tsx deleted file mode 100644 index 39aaf79c8..000000000 --- a/src/components/SecondaryPathCard.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; - -interface SecondaryPathCardProps { - title: string; - href: string; - children: React.ReactNode; -} - -export const SecondaryPathCard: React.FC = ({ title, href, children }) => { - return ( - - ); -}; From deede21ff5f8e7ba41ba7c3775ed2ddb42f55b67 Mon Sep 17 00:00:00 2001 From: Quetzalli Date: Thu, 28 May 2026 23:09:22 +0200 Subject: [PATCH 13/37] Draft 2: installation.mdx Removed redundant "Next Steps" clutter and relocated Docker, Compose, and Helm to a dedicated orchestration section. Standardized tone and corrected tool categorizations. --- .../docs/aws/getting-started/installation.mdx | 377 +++--------------- 1 file changed, 66 insertions(+), 311 deletions(-) diff --git a/src/content/docs/aws/getting-started/installation.mdx b/src/content/docs/aws/getting-started/installation.mdx index 2fc402009..8e792ceff 100644 --- a/src/content/docs/aws/getting-started/installation.mdx +++ b/src/content/docs/aws/getting-started/installation.mdx @@ -1,6 +1,6 @@ --- title: Installation -description: All installation methods for LocalStack — lstk, LocalStack CLI, Docker Compose, Docker, and Helm. +description: Installation guides for LocalStack CLIs, container engines, and orchestration tools. template: doc sidebar: order: 2 @@ -9,211 +9,79 @@ sidebar: import { Code, LinkButton, Tabs, TabItem } from '@astrojs/starlight/components'; import { LOCALSTACK_VERSION } from 'astro:env/server'; -## Local development +LocalStack provides multiple installation paths depending on your development environment and requirements. We recommend using a CLI-based installation for the most consistent local development experience. -There are two CLI options for running LocalStack on your laptop. Start with `lstk` if you want the fastest path to a running instance, or use the LocalStack CLI if you need full feature support. +Choose the CLI that fits your workflow: use [`lstk`](#lstk) for a streamlined, non-Python setup, or [LocalStack CLI](#localstack-cli) for access to our complete feature set. -### lstk +## lstk -`lstk` is a lightweight, Go-based CLI that handles the full startup sequence in one command: browser-based login, image pull, and container launch. -It's the fastest way to get LocalStack running locally. +`lstk` is a lightweight, Go-based binary that manages the authentication and container lifecycle in a single workflow. -:::caution[Early release] -`lstk` currently supports core lifecycle commands (`start`, `stop`, `logs`, `status`). -For advanced features like Cloud Pods, Extensions, and Ephemeral Instances, use the [LocalStack CLI](#localstack-cli) instead. -Both tools can coexist on the same system. +:::caution[Early Release] +`lstk` currently supports core lifecycle commands: `start`, `stop`, `logs`, and `status`. For advanced features like Cloud Pods or Extensions, use the [LocalStack CLI](#localstack-cli). ::: -Install `lstk`: +**Install lstk** - - ```bash brew install localstack/tap/lstk ``` + + ```bash + brew install localstack/tap/lstk + ``` + + + ```bash + npm install -g @localstack/lstk + ``` - ```bash npm install -g @localstack/lstk ``` - Download a pre-built binary for your platform from [GitHub - Releases](https://github.com/localstack/lstk/releases) and add it to your - `PATH`. + Download the binary for your platform from the [GitHub Releases](https://github.com/localstack/lstk/releases) and add it to your `PATH`. -Start LocalStack: +**Start LocalStack** ```bash lstk start -``` - -On first run, `lstk` opens a browser login flow. -After authenticating, it pulls the LocalStack image and starts the container. -Subsequent starts use the stored credential from your system keyring — no manual token management needed. - ---- - -### LocalStack CLI - -The full-featured LocalStack CLI gives you access to all LocalStack capabilities. -Please make sure that you have a working [Docker installation](https://docs.docker.com/get-docker/) on your machine before moving on. -### Installing LocalStack CLI - -The CLI starts and manages the LocalStack Docker container. -For alternative methods of managing the LocalStack container, see our [alternative installation instructions](#ci-and-server-environments). - - - - - -You can download the pre-built binary for your architecture using the link below: +``` - - x86-64 - - - ARM64 - +The first execution initiates a browser-based login flow. Subsequent starts use credentials stored in your system keyring. -or use the curl commands below: -For x86-64: +## LocalStack CLI - +The LocalStack CLI is the primary tool for managing all LocalStack capabilities. -For ARM64: +**Requirement:** You must have a working [Docker installation](https://docs.docker.com/get-docker/) before proceeding. - +### Install LocalStack CLI -Then extract the LocalStack CLI from the terminal: +x86-64 +ARM64 - +Extract the binary to `/usr/local/bin`: -
-Alternative: Homebrew on Linux + -If you are using [Homebrew for Linux](https://docs.brew.sh/Homebrew-on-Linux), you can install the LocalStack CLI directly from our official LocalStack tap: ```bash brew install localstack/tap/localstack-cli -``` -
- -
- - - -You can install the LocalStack CLI using Brew directly from our official LocalStack tap: - -```bash -brew install localstack/tap/localstack-cli ``` -
-Alternative: Binary Download - -You may download the binary for your architecture using the link below: - - - Intel (AMD64) - - -or use the following curl command: - - - -Then extract the LocalStack CLI from the terminal: - - - -
-
- - - -You can download the pre-built binary for your architecture using the link below: - - - Intel (AMD64) - - -Then extract the archive and execute the binary in Powershell. - - - - - -If you cannot use the binary releases of LocalStack, you can install the Python distribution. - -Please make sure to install the following before moving ahead: - -- [Python](https://docs.python.org/3/using/index.html) -- [pip](https://pip.pypa.io/en/stable/installation/) - -Next install the LocalStack CLI in your Python environment by running: - ```bash python3 -m pip install --upgrade localstack -``` - -:::note -To download a specific version of LocalStack, replace `` with the required version from [release page](https://github.com/localstack/localstack/releases). -```bash -python3 -m pip install localstack== -``` - -::: - -:::tip[MacOS Sierra?] -If you have problems with permissions in MacOS X Sierra, install with: - -```bash -python3 -m pip install --user localstack ``` -::: - :::danger -Do not use `sudo` or the `root` user when starting LocalStack. -It should be installed and started entirely under a local non-root user. +Do not use `sudo` or the `root` user. Install and execute LocalStack entirely under a local non-root user. ::: - -
-### Starting LocalStack + +### Start LocalStack CLI To verify that the LocalStack CLI was installed correctly, you can check the version in your terminal: @@ -248,7 +116,7 @@ localstack start # start localstack in background with -d flag [12:47:15] detaching bootstrap.py:1262 ``` -### Updating LocalStack CLI +### Update LocalStack CLI The LocalStack CLI allows you to easily update the different components of LocalStack. To check the various options available for updating, run: @@ -276,188 +144,70 @@ Updating the LocalStack CLI using `localstack update localstack-cli` and `locals If it was installed using the pre-built binary or via Brew, please run the installation steps again to update to the latest version. ::: -## CI and server environments - -For CI pipelines and server deployments, use non-interactive startup: Docker Compose or `docker run` are typical, or [`lstk --non-interactive`](/aws/tooling/lstk/#interactive-and-non-interactive-mode) with `LOCALSTACK_AUTH_TOKEN`. -See the [CI/CD Setup guide](/aws/getting-started/ci-cd/) for a complete walkthrough including GitHub Actions examples. - -The options below cover the main container management approaches: -- [Docker Compose](#docker-compose) — recommended for CI and team environments -- [Docker](#docker) — direct container control for scripted setups -- [Helm](#helm) — deploy LocalStack in a Kubernetes cluster +## Container & Orchestration Methods -The LocalStack emulator is available on Docker Hub as `localstack/localstack-pro`. +Use these methods for CI pipelines, server environments, or manual container management. -For a comprehensive overview of LocalStack images, see the [Docker images documentation](/aws/capabilities/config/docker-images). +### Docker Compose -## GUI tools +Recommended for CI and team environments. Create a `docker-compose.yml` with the following configuration: -- [LocalStack Desktop](#localstack-desktop) — desktop UI for managing your local instance -- [LocalStack Docker Extension](#localstack-docker-extension) — manage LocalStack from Docker Desktop - -### LocalStack Desktop - -Learn more about our desktop client at [LocalStack Desktop](/aws/capabilities/web-app/localstack-desktop) and download it [here](https://app.localstack.cloud/download). - -### LocalStack Docker Extension - -Install our [official Docker Desktop extension](https://hub.docker.com/extensions/localstack/localstack-docker-desktop) to manage LocalStack. -See [LocalStack Docker Extension](/aws/tooling/localstack-docker-extension) for more information. - -### Docker-Compose - -To use LocalStack without the [LocalStack CLI](#localstack-cli), you have the option of running the LocalStack Docker container by yourself. -If you want to manually manage your Docker container, it's usually a good idea to use [Docker Compose](https://docs.docker.com/compose/reference/) in order to simplify your container configuration. - -#### Prerequisites - -- [Docker](https://docs.docker.com/get-docker/) -- [Docker Compose](https://docs.docker.com/compose/install/) (version 1.9.0+) - -#### Starting LocalStack with Docker-Compose - -You can start LocalStack with [Docker Compose](https://docs.docker.com/compose/) by configuring a `docker-compose.yml` file. -Docker Compose v1.9.0 and above is supported. - -```yaml showshowLineNumbers +```yaml services: localstack: - container_name: '${LOCALSTACK_DOCKER_NAME:-localstack-main}' - image: localstack/localstack-pro # required for Pro + container_name: "${LOCALSTACK_DOCKER_NAME:-localstack-main}" + image: localstack/localstack-pro ports: - - '127.0.0.1:4566:4566' # LocalStack Gateway - - '127.0.0.1:4510-4559:4510-4559' # external services port range - - '127.0.0.1:443:443' # LocalStack HTTPS Gateway (Pro) + - "127.0.0.1:4566:4566" # Gateway + - "127.0.0.1:4510-4559:4510-4559" # External service range environment: - # Activate LocalStack for AWS: https://docs.localstack.cloud/getting-started/auth-token/ - - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN:?} # required for Pro - # LocalStack configuration: https://docs.localstack.cloud/references/configuration/ - - DEBUG=${DEBUG:-0} + - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN:?} - PERSISTENCE=${PERSISTENCE:-0} volumes: - - '${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack' - - '/var/run/docker.sock:/var/run/docker.sock' -``` - -Start the container by running the following command: + - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack" + - "/var/run/docker.sock:/var/run/docker.sock" -```bash -docker compose up ``` -:::note - -- This command pulls the current nightly build from the `main` branch (if you don't have the image locally) and **not** the latest supported version. - If you want to use a specific version, set the appropriate LocalStack image tag at `services.localstack.image` in the `docker-compose.yml` file (for example `localstack/localstack:`). - -- If you are using LocalStack with an [Auth Token](/aws/getting-started/auth-token), you need to specify the image tag as `localstack/localstack-pro` in the `docker-compose.yml` file. - Going forward, `localstack/localstack-pro` image will contain our Pro-supported services and APIs. - -- This command reuses the image if it's already on your machine, i.e. it will **not** pull the latest image automatically from Docker Hub. - -- Mounting the Docker socket `/var/run/docker.sock` as a volume is required for some services that use Docker to provide the emulation, such as AWS Lambda. - Check out the [Lambda providers](/aws/services/lambda) documentation for more information. - -- To facilitate interoperability, configuration variables can be prefixed with `LOCALSTACK_` in docker. - For instance, setting `LOCALSTACK_PERSISTENCE=1` is equivalent to `PERSISTENCE=1`. +Execute `docker compose up` to start. -- If using the Docker default bridge network using `network_mode: bridge`, container name resolution will not work inside your containers. - Please consider removing it, if this functionality is needed. +### Docker CLI -- To configure an Auth Token, refer to the [Auth Token](/aws/getting-started/auth-token) documentation. - ::: - -Please note that there are a few pitfalls when configuring your stack manually via docker-compose (e.g., required container name, Docker network, volume mounts, and environment variables). -We recommend using the LocalStack CLI to validate your configuration, which will print warning messages in case it detects any potential misconfigurations: - -```bash -localstack config validate -``` - -### Docker - -You can also directly start the LocalStack container using the Docker CLI instead of [Docker-Compose](#docker-compose). -This method requires more manual steps and configuration, but it gives you more control over the container settings. - -#### Prerequisites - -Please make sure that you have a working [Docker installation](https://docs.docker.com/get-docker/) on your machine before moving on. -You can check if Docker is correctly configured on your machine by executing `docker info` in your terminal. -If it does not report an error (but shows information on your Docker system), you're good to go. - -#### Starting LocalStack with Docker - -You can start the Docker container simply by executing the following `docker run` command: +Run the container directly via the Docker engine: ```bash docker run \ --rm -it \ -p 127.0.0.1:4566:4566 \ -p 127.0.0.1:4510-4559:4510-4559 \ - -p 127.0.0.1:443:443 \ - -e LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN:?} \ -v /var/run/docker.sock:/var/run/docker.sock \ + -e LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN:?} \ localstack/localstack-pro -``` - -:::note - -- This command pulls the current nightly build from the `main` branch (if you don't have the image locally) and **not** the latest supported version. - If you want to use a specific version of LocalStack, use the appropriate tag: `docker run --rm -it -p 4566:4566 -p 4510-4559:4510-4559 localstack/localstack:`. - Check-out the [LocalStack releases](https://github.com/localstack/localstack/releases) to know more about specific LocalStack versions. - -- If you are using LocalStack with an [Auth Token](/aws/getting-started/auth-token), you need to specify the image tag as `localstack/localstack-pro` in your Docker setup. - Going forward, `localstack/localstack-pro` image will contain our Pro-supported services and APIs. - -- This command reuses the image if it's already on your machine, i.e. it will **not** pull the latest image automatically from Docker Hub. - -- Mounting the Docker socket `/var/run/docker.sock` as a volume is required for some services that use Docker to provide the emulation, such as AWS Lambda. - Check out the [Lambda providers](/aws/services/lambda) documentation for more information. -- When using Docker to manually start LocalStack, you will have to configure the container on your own (see [docker-compose-pro.yml](https://github.com/localstack/localstack/blob/main/docker-compose-pro.yml) and [Configuration](/aws/capabilities/config/configuration). - This could be seen as the "expert mode" of starting LocalStack. - If you are looking for a simpler method of starting LocalStack, please use the [LocalStack CLI](#localstack-cli). +``` -- To facilitate interoperability, configuration variables can be prefixed with `LOCALSTACK_` in docker. - For instance, setting `LOCALSTACK_PERSISTENCE=1` is equivalent to `PERSISTENCE=1`. +### Helm (Kubernetes) -- To configure an Auth Token, refer to the [Auth Token](/aws/getting-started/auth-token) documentation. - ::: +Deploy LocalStack to a Kubernetes cluster: -### Helm +```bash +helm repo add localstack-repo [https://helm.localstack.cloud](https://helm.localstack.cloud) +helm upgrade --install localstack localstack-repo/localstack -If you want to deploy LocalStack in your [Kubernetes](https://kubernetes.io) cluster, you can use [Helm](https://helm.sh). +``` -#### Prerequisites +## Graphical User Interfaces (GUIs) -- [Kubernetes](https://kubernetes.io) -- [Helm](https://helm.sh/docs/intro/install/) +### LocalStack Desktop -#### Deploy LocalStack using Helm +Manage local instances via a standalone desktop application. [Download here](https://app.localstack.cloud/download). -You can deploy LocalStack in a Kubernetes cluster by running these commands: +### Docker Desktop Extension -```bash -helm repo add localstack-repo https://helm.localstack.cloud -helm upgrade --install localstack localstack-repo/localstack -``` - -The Helm charts are not maintained in the main repository, but in a [separate one](https://github.com/localstack/helm-charts). - -## What's next? +Install the [official extension](https://hub.docker.com/extensions/localstack/localstack-docker-desktop) to manage LocalStack directly from the Docker Desktop dashboard. -Now that you have LocalStack up and running, the following resources might be useful for your next steps: -- Check out our [Quickstart guide](/aws/getting-started/quickstart) if you are a new user to get started with LocalStack quickly. -- [Use the LocalStack integrations](/aws/integrations) to interact with LocalStack and other integrated tools, for example: - - Use `awslocal` to use the AWS CLI against your local cloud! - - Use the Serverless Framework with LocalStack! - - And many more! -- [Find out how to configure LocalStack](/aws/capabilities/config/configuration) such that it perfectly fits your need. -- [Use LocalStack in your CI environment](/aws/integrations/continuous-integration/) to increase your code quality. -- [Checkout LocalStack's Cloud Developer Tools](/aws/tooling/) to further increase your development efficiency with LocalStack. -- Find out about the ways you can [configure LocalStack](/aws/capabilities/config/configuration). ## Troubleshooting @@ -529,3 +279,8 @@ After running the task, run the diagnostic endpoint and share the archive file w We have extensive network troubleshooting documentation available [here](/aws/capabilities/networking/). If this does not solve your problem then please [reach out to LocalStack Support](/aws/help-support/get-help/). + + +## Next steps + +Now that you've completed installation, proceed to the [Local Development Guide](/aws/getting-started/local-development) to start LocalStack and deploy a serverless API. This guide walks you through deploying a Lambda function backed by a DynamoDB table entirely on your local machine. From 525c3fb444311bd0810c2399720d92deffad3654 Mon Sep 17 00:00:00 2001 From: Quetzalli Date: Thu, 28 May 2026 23:44:32 +0200 Subject: [PATCH 14/37] Draft 2: local-development.mdx --- .../aws/getting-started/local-development.mdx | 425 ++++++++---------- 1 file changed, 199 insertions(+), 226 deletions(-) diff --git a/src/content/docs/aws/getting-started/local-development.mdx b/src/content/docs/aws/getting-started/local-development.mdx index 8855f5903..bb8ca588f 100644 --- a/src/content/docs/aws/getting-started/local-development.mdx +++ b/src/content/docs/aws/getting-started/local-development.mdx @@ -1,6 +1,6 @@ --- title: Local Development -description: Deploy a serverless API locally with LocalStack in under 10 minutes using Lambda and DynamoDB. +description: Deploy a serverless application locally using Lambda and DynamoDB on LocalStack. template: doc sidebar: order: 3 @@ -10,70 +10,62 @@ import { Tabs, TabItem, Steps } from '@astrojs/starlight/components'; ## Introduction -In this guide you'll start LocalStack and deploy a simple serverless API including a Lambda function backed by DynamoDB, entirely on your local machine. -No AWS account needed. +This guide walks you through starting LocalStack and deploying a serverless API consisting of a Lambda function and a DynamoDB table. You will perform the entire deployment on your local machine without an AWS account. -By the end you will have: +A successful deployment results in a: +- **LocalStack Container:** Running the core emulation engine. +- **Serverless API:** A Lambda function with a configured Function URL. +- **Persistence Layer:** A DynamoDB table for message storage. +- **Local Cloud Environment:** A functional AWS-emulated sandbox. -- LocalStack running locally in Docker -- A Lambda function deployed and invokable via a public URL -- A DynamoDB table storing data written by the Lambda -- A local environment that behaves like real AWS - -Choose your preferred deployment style below: **AWS CLI** or **Terraform**. +Select your preferred deployment method to begin: **AWS CLI** or **Terraform**. ## Prerequisites -- [Docker](https://docs.docker.com/get-docker/) installed and running -- A [LocalStack account](https://app.localstack.cloud/sign-up) +- [Docker](https://docs.docker.com/get-docker/) engine installed and active. +- A [LocalStack account](https://app.localstack.cloud/sign-up). -## Step 1 — Install and start LocalStack +## Step 1: Install and Start LocalStack -The fastest way to get LocalStack running locally is with `lstk`, a lightweight CLI that handles authentication and image setup automatically. +The `lstk` CLI provides the fastest initialization path by automating authentication and image management. - + Install `lstk`: ```bash - brew install localstack/tap/lstk # macOS / Linux with Homebrew + brew install localstack/tap/lstk ``` - ```bash - npm install -g @localstack/lstk # or via npm - ``` - - Then start LocalStack: + Start LocalStack: ```bash - lstk + lstk start ``` - On first run, `lstk` opens a browser window to authenticate. It also pulls the LocalStack image and starts the container automatically. + The first run triggers a browser-based authentication flow. After authentication, the CLI pulls the LocalStack image and initializes the container. - When the container is ready, you'll see log lines like: + When the container is ready, you will see the following logs: - ```bash + ```text ✔︎ LocalStack ready (containerId: 400b3e61f3c6) • Endpoint: localhost.localstack.cloud:4566 - • Web app: https://app.localstack.cloud - > Tip: View deployed resources: lstk status + • Web app: [https://app.localstack.cloud](https://app.localstack.cloud) ``` - :::note[Early release] - `lstk` currently supports core lifecycle commands (start, stop, logs, status). - For advanced features like Cloud Pods, Extensions, and Ephemeral Instances, use the [LocalStack CLI](/aws/getting-started/installation/#localstack-cli) instead. + :::note[Early Release] + `lstk` currently supports core lifecycle commands (start, stop, logs, status). For advanced features such as Cloud Pods or Extensions, use the [LocalStack CLI](/aws/getting-started/installation/#localstack-cli). ::: - If you prefer the full-featured LocalStack CLI, [install it first](/aws/getting-started/installation/#localstack-cli), then [configure your auth token](/aws/getting-started/auth-token/), and start LocalStack: + If you are using the full-featured LocalStack CLI, ensure you have [configured your auth token](/aws/getting-started/auth-token/) before starting: ```bash localstack start ``` - - When the container is ready, you'll see log lines like: + + When the container is ready, you'll see these log lines: ```bash __ _______ __ __ @@ -95,226 +87,210 @@ The fastest way to get LocalStack running locally is with `lstk`, a lightweight -## Step 2 — Deploy the serverless API +## Step 2: Deploy serverless API -Now deploy a Lambda function and a DynamoDB table. For this tutorial, you can choose between creating resources using the AWS CLI via our `awslocal` wrapper or Terraform via our `tflocal` wrapper. +Deploy the Lambda function and DynamoDB table using either the `awslocal` or `tflocal` wrappers. These tools automatically route commands to your local instance instead of AWS. -1. Install the `awslocal` wrapper if you haven't already: - - ```bash - pip install awscli-local - ``` - -2. Create the Lambda function - - The below code creates a Lambda function using Python and zips the code to be ready for deployment. - - ```bash - mkdir -p /tmp/localstack-demo - cat > /tmp/localstack-demo/handler.py << 'EOF' - import json, boto3, os, uuid - - def handler(event, context): - table = boto3.resource('dynamodb').Table(os.environ['TABLE_NAME']) - method = event.get('requestContext', {}).get('http', {}).get('method', 'GET') - if method == 'POST': - item = {'id': str(uuid.uuid4()), **json.loads(event.get('body', '{}'))} - table.put_item(Item=item) - return {'statusCode': 200, 'body': json.dumps(item)} - result = table.scan() - return {'statusCode': 200, 'body': json.dumps(result['Items'])} - EOF - cd /tmp/localstack-demo && zip handler.zip handler.py - ``` - -3. Create the DynamoDB table - - ```bash - awslocal dynamodb create-table \ - --table-name Messages \ - --attribute-definitions AttributeName=id,AttributeType=S \ - --key-schema AttributeName=id,KeyType=HASH \ - --billing-mode PAY_PER_REQUEST - ``` - -4. Deploy the Lambda - - ```bash - awslocal lambda create-function \ - --function-name messages-api \ - --runtime python3.12 \ - --handler handler.handler \ - --zip-file fileb:///tmp/localstack-demo/handler.zip \ - --role arn:aws:iam::000000000000:role/lambda-role \ - --environment Variables={TABLE_NAME=Messages} - - awslocal lambda wait function-active --function-name messages-api - ``` - -5. Create a public function URL - - ```bash - awslocal lambda create-function-url-config \ - --function-name messages-api \ - --auth-type NONE - ``` - -6. Retrieve the URL - - ```bash - LAMBDA_URL=$(awslocal lambda list-function-url-configs \ - --function-name messages-api \ - --query 'FunctionUrlConfigs[0].FunctionUrl' \ - --output text) - echo $LAMBDA_URL - ``` - - - + 1. Install the `awslocal` wrapper: + + ```bash + pip install awscli-local + ``` + + 2. Create the Lambda function source. + Execute the following to create a project directory and a Python handler: + + ```bash + mkdir -p /tmp/localstack-demo + cat > /tmp/localstack-demo/handler.py << 'EOF' + import json, boto3, os, uuid + + def handler(event, context): + table = boto3.resource('dynamodb').Table(os.environ['TABLE_NAME']) + method = event.get('requestContext', {}).get('http', {}).get('method', 'GET') + if method == 'POST': + item = {'id': str(uuid.uuid4()), **json.loads(event.get('body', '{}'))} + table.put_item(Item=item) + return {'statusCode': 200, 'body': json.dumps(item)} + result = table.scan() + return {'statusCode': 200, 'body': json.dumps(result['Items'])} + EOF + cd /tmp/localstack-demo && zip handler.zip handler.py + ``` + + 3. Create the DynamoDB table: + + ```bash + awslocal dynamodb create-table \ + --table-name Messages \ + --attribute-definitions AttributeName=id,AttributeType=S \ + --key-schema AttributeName=id,KeyType=HASH \ + --billing-mode PAY_PER_REQUEST + ``` + + 4. Deploy the Lambda function: + + ```bash + awslocal lambda create-function \ + --function-name messages-api \ + --runtime python3.12 \ + --handler handler.handler \ + --zip-file fileb:///tmp/localstack-demo/handler.zip \ + --role arn:aws:iam::000000000000:role/lambda-role \ + --environment Variables={TABLE_NAME=Messages} + + awslocal lambda wait function-active --function-name messages-api + ``` + + 5. Configure a public URL and retrieve the endpoint: + + ```bash + awslocal lambda create-function-url-config \ + --function-name messages-api \ + --auth-type NONE + + LAMBDA_URL=$(awslocal lambda list-function-url-configs \ + --function-name messages-api \ + --query 'FunctionUrlConfigs[0].FunctionUrl' \ + --output text) + echo $LAMBDA_URL + ``` + + -1. Install Terraform and the `tflocal` wrapper: - - ```bash - brew install hashicorp/tap/terraform - pip install terraform-local - ``` - - For additional installation options, see the [Terraform installation guide](https://developer.hashicorp.com/terraform/install). - -2. Create a project directory. - - ```bash - mkdir -p /tmp/localstack-demo && cd /tmp/localstack-demo - ``` - - Then create a `main.tf` file with the following content: - - ```hcl - # main.tf - terraform { - required_providers { - aws = { source = "hashicorp/aws" } - archive = { source = "hashicorp/archive" } - } - } - - resource "aws_dynamodb_table" "messages" { - name = "Messages" - billing_mode = "PAY_PER_REQUEST" - hash_key = "id" - attribute { - name = "id" - type = "S" - } - } - - data "archive_file" "lambda" { - type = "zip" - output_path = "${path.module}/handler.zip" - source { - filename = "handler.py" - content = <<-EOF - import json, boto3, os, uuid - def handler(event, context): - table = boto3.resource('dynamodb').Table(os.environ['TABLE_NAME']) - method = event.get('requestContext', {}).get('http', {}).get('method', 'GET') - if method == 'POST': - item = {'id': str(uuid.uuid4()), **json.loads(event.get('body', '{}'))} - table.put_item(Item=item) - return {'statusCode': 200, 'body': json.dumps(item)} - result = table.scan() - return {'statusCode': 200, 'body': json.dumps(result['Items'])} - EOF - } - } - - resource "aws_iam_role" "lambda_role" { - name = "lambda-role" - assume_role_policy = jsonencode({ - Version = "2012-10-17" - Statement = [{ Action = "sts:AssumeRole", Effect = "Allow", - Principal = { Service = "lambda.amazonaws.com" } }] - }) - } - - resource "aws_lambda_function" "messages_api" { - function_name = "messages-api" - runtime = "python3.12" - handler = "handler.handler" - filename = data.archive_file.lambda.output_path - source_code_hash = data.archive_file.lambda.output_base64sha256 - role = aws_iam_role.lambda_role.arn - environment { - variables = { TABLE_NAME = aws_dynamodb_table.messages.name } - } - } - - resource "aws_lambda_function_url" "messages_api" { - function_name = aws_lambda_function.messages_api.function_name - authorization_type = "NONE" - } - - output "function_url" { - value = aws_lambda_function_url.messages_api.function_url - } - ``` - -3. Deploy - - ```bash - tflocal init - tflocal apply -auto-approve - ``` - -4. Retrieve the URL - - ```bash - LAMBDA_URL=$(tflocal output -raw function_url) - echo $LAMBDA_URL - ``` - - + 1. Install Terraform and the `tflocal` wrapper: + + ```bash + pip install terraform-local + ``` + + 2. Create a `main.tf` file in a new directory: + + ```hcl + terraform { + required_providers { + aws = { source = "hashicorp/aws" } + archive = { source = "hashicorp/archive" } + } + } + + resource "aws_dynamodb_table" "messages" { + name = "Messages" + billing_mode = "PAY_PER_REQUEST" + hash_key = "id" + attribute { + name = "id" + type = "S" + } + } + + data "archive_file" "lambda" { + type = "zip" + output_path = "${path.module}/handler.zip" + source { + filename = "handler.py" + content = <<-EOF + import json, boto3, os, uuid + def handler(event, context): + table = boto3.resource('dynamodb').Table(os.environ['TABLE_NAME']) + method = event.get('requestContext', {}).get('http', {}).get('method', 'GET') + if method == 'POST': + item = {'id': str(uuid.uuid4()), **json.loads(event.get('body', '{}'))} + table.put_item(Item=item) + return {'statusCode': 200, 'body': json.dumps(item)} + result = table.scan() + return {'statusCode': 200, 'body': json.dumps(result['Items'])} + EOF + } + } + + resource "aws_iam_role" "lambda_role" { + name = "lambda-role" + assume_role_policy = jsonencode({ + Version = "2012-10-17" + Statement = [{ Action = "sts:AssumeRole", Effect = "Allow", + Principal = { Service = "lambda.amazonaws.com" } }] + }) + } + + resource "aws_lambda_function" "messages_api" { + function_name = "messages-api" + runtime = "python3.12" + handler = "handler.handler" + filename = data.archive_file.lambda.output_path + source_code_hash = data.archive_file.lambda.output_base64sha256 + role = aws_iam_role.lambda_role.arn + environment { + variables = { TABLE_NAME = aws_dynamodb_table.messages.name } + } + } + + resource "aws_lambda_function_url" "messages_api" { + function_name = aws_lambda_function.messages_api.function_name + authorization_type = "NONE" + } + + output "function_url" { + value = aws_lambda_function_url.messages_api.function_url + } + ``` + + 3. Initialize and apply the configuration: + + ```bash + tflocal init && tflocal apply -auto-approve + ``` + + 4. Retrieve the endpoint: + + ```bash + LAMBDA_URL=$(tflocal output -raw function_url) + echo $LAMBDA_URL + ``` + -## Step 3 — Test the API +## Step 3: Test the API -Store a message: +Send a POST request to store a message in the emulated DynamoDB table: ```bash curl -X POST "$LAMBDA_URL" \ -H "Content-Type: application/json" \ -d '{"message": "Hello, LocalStack!"}' + ``` -You should get back a response like: +You will get back a response: ```json { "id": "a1b2c3d4-...", "message": "Hello, LocalStack!" } ``` -List all messages: +Retrieve all your messages: ```bash curl "$LAMBDA_URL" + ``` -**That's the win.** You just invoked a real Lambda function that wrote to a real DynamoDB table — all running locally, with no AWS account and no cloud costs. +The Lambda function executes within the local environment and interacts with the emulated DynamoDB service. Because no actual cloud resources are created, you won't incur any cloud costs or infrastructure changes. -## Step 4 — Inspect your resources +## Step 4: Inspect Resources -You can browse the resources you just deployed in the [LocalStack Web Application](https://app.localstack.cloud/). -Navigate to your [Default Instance](https://app.localstack.cloud/inst/default/status) and click through to [Lambda](https://app.localstack.cloud/inst/default/resources/lambda/functions) or [DynamoDB](https://app.localstack.cloud/inst/default/resources/dynamodb) to see your running infrastructure. +View the state of your local infrastructure via the [LocalStack Web Application](https://app.localstack.cloud/). +Navigate to the [Resource Browser](https://app.localstack.cloud/inst/default/status) to inspect your Lambda functions and DynamoDB tables in real-time. -## Step 5 — Clean up +## Step 5: Clean Up -First, stop LocalStack to tear down all local resources: +Stop your LocalStack container to remove all emulated resources. LocalStack is ephemeral by default; stopping the instance clears the state. {/* prettier-ignore-start */} @@ -324,19 +300,16 @@ First, stop LocalStack to tear down all local resources: {/* prettier-ignore-end */} -LocalStack is ephemeral by default — stopping it removes all provisioned resources. To persist state across restarts, see [Persistence](/aws/capabilities/state-management/persistence/) or [Cloud Pods](/aws/capabilities/state-management/cloud-pods/). -Now that you're done, you can remove the tutorial files from your machine (the Lambda source, zip, and, if you used Terraform, `main.tf` and state under the same folder): +Remove the local files you created in this guide: ```bash rm -rf /tmp/localstack-demo + ``` ## Next steps -- [Tutorials](/aws/tutorials/) — Deeper dives into specific AWS services and application stacks -- [Supported Services](/aws/services/) — Full list of emulated AWS services -- [CI/CD Setup](/aws/getting-started/ci-cd/) — Run LocalStack in GitHub Actions and other pipelines -- [AI & Agent Workflows](/aws/getting-started/ai-workflows/) — Use LocalStack with AI coding tools and agents -- [Tooling](/aws/tooling/) — `awslocal`, `tflocal`, LocalStack Desktop, and more +You have successfully deployed and tested a serverless API on your local workstation. Proceed to the [CI/CD guide](/aws/getting-started/ci-cd/) to learn how to integrate LocalStack into your automated testing pipelines and GitHub Actions workflows. + From 9ebdb73e046fadf765ce9bf3e9f597a49cc52313 Mon Sep 17 00:00:00 2001 From: Quetzalli Date: Fri, 29 May 2026 00:09:17 +0200 Subject: [PATCH 15/37] Draft 2: Rewrite ci-cd.mdx --- .../docs/aws/getting-started/ci-cd.mdx | 148 +++++++----------- 1 file changed, 53 insertions(+), 95 deletions(-) diff --git a/src/content/docs/aws/getting-started/ci-cd.mdx b/src/content/docs/aws/getting-started/ci-cd.mdx index ced79a3e7..fb7ac2f10 100644 --- a/src/content/docs/aws/getting-started/ci-cd.mdx +++ b/src/content/docs/aws/getting-started/ci-cd.mdx @@ -1,6 +1,6 @@ --- -title: CI/CD -description: Run LocalStack in CI pipelines — auth tokens, Docker Compose, GitHub Actions examples, and persisting state with Cloud Pods or state export. +title: CI/CD Integration +description: implementation guides for LocalStack in automated pipelines, including GitHub Actions, Docker Compose, and state management. template: doc sidebar: order: 4 @@ -8,42 +8,43 @@ sidebar: import { Tabs, TabItem } from '@astrojs/starlight/components'; -## Overview +Integrating LocalStack into CI/CD environments enables automated integration testing without cloud infrastructure costs or vendor dependency. CI configurations differ from local development environments in authentication methods and startup workflows. -LocalStack works great in CI environments, allowing your integration tests to run incredibly fast and with no cloud costs. -The setup differs slighty from local development in a few important ways: +Key operational differences in CI/CD include: +- **Authentication**: Use a dedicated CI Auth Token instead of a personal Developer token. +- **Initialization**: Execute LocalStack in non-interactive mode using Docker Compose, the Docker CLI, or specialized CI actions. +- **Isolation**: Initialize a fresh LocalStack instance for each job to ensure reproducible test results. +- **State Management**: Utilize Cloud Pods or state export/import commands to persist infrastructure across pipeline stages. -- **Use a CI Auth Token**, not your personal Developer token -- **Start LocalStack without a browser** — Docker Compose, `docker run`, or CI helpers such as [`setup-localstack`](https://github.com/localstack/setup-localstack) are common; [`lstk`](/aws/tooling/lstk/) also works in CI when you set `LOCALSTACK_AUTH_TOKEN` and use [`--non-interactive`](/aws/tooling/lstk/#interactive-and-non-interactive-mode) (or rely on automatic non-interactive detection). LocalStack Desktop remains a local-only GUI. -- **Runs are often isolated per job** — many pipelines start from an empty LocalStack instance for reproducible tests -- **Persistence in CI is supported** — [Cloud Pods](/aws/capabilities/state-management/cloud-pods/), snapshot-based [persistence](/aws/capabilities/state-management/persistence/) with a mounted volume, or `localstack state export` / `localstack state import` with artifacts or cache. +## Step 1: Configure CI Auth Token -## Step 1 — Get a CI Auth Token +Dedicated CI Auth Tokens are required for automated environments to ensure security and auditability. -CI pipelines should use a dedicated CI Auth Token, not a developer token tied to a specific user. +1. Navigate to the [Auth Tokens page](https://app.localstack.cloud/workspace/auth-tokens) in the LocalStack Web Application. +2. Generate a new **CI Auth Token**. +3. Store the token as a protected secret within your CI provider (e.g., `LOCALSTACK_AUTH_TOKEN`). -1. Go to the [Auth Tokens page](https://app.localstack.cloud/workspace/auth-tokens) in the LocalStack Web Application -2. Create a new **CI Auth Token** -3. Add it as a secret in your CI provider (e.g., `LOCALSTACK_AUTH_TOKEN`) +:::danger[Security Best Practice] +Never commit your auth tokens to source control. +Always inject tokens via your CI provider's secrets or environment variable system. +Rotate compromised tokens immediately via the Web Application. Old tokens are invalidated instantly. +::: -:::danger[Keep your token secret] -Never commit an auth token to source control. -Always inject it via your CI provider's secrets or environment variable mechanism. -If a token is compromised, rotate it immediately on the Auth Tokens page — old tokens are invalidated instantly. +:::note +Read the [Auth Token guide](/aws/getting-started/auth-token/) for full details on token types and configuration. ::: -See the [Auth Token documentation](/aws/getting-started/auth-token/) for full details on token types and configuration. +## Step 2: Start LocalStack in CI -## Step 2 — Start LocalStack in CI +Select the integration method compatible with your CI runner architecture. - The recommended approach is to start LocalStack as a service container or as a step using the official GitHub Action: + Use the official GitHub Action to initialize LocalStack as a workflow step: ```yaml # .github/workflows/integration-tests.yml name: Integration Tests - on: [push, pull_request] jobs: @@ -62,17 +63,18 @@ See the [Auth Token documentation](/aws/getting-started/auth-token/) for full de - name: Run tests run: | - # Your test commands here, e.g.: + # Your test commands here, e.g.: pip install awscli-local - awslocal s3 mb s3://my-test-bucket + awslocal s3 mb s3://integration-test-bucket pytest tests/integration/ ``` + + + The `setup-localstack` action pulls the image, starts the container, and waits for LocalStack to be ready. - The `setup-localstack` action handles pulling the image, starting the container, and waiting for LocalStack to be ready. - - Add LocalStack as a service in your `docker-compose.yml`: + Define LocalStack as a service in your `docker-compose.yml` for containerized environments: ```yaml services: @@ -82,16 +84,13 @@ See the [Auth Token documentation](/aws/getting-started/auth-token/) for full de ports: - "127.0.0.1:4566:4566" - "127.0.0.1:4510-4559:4510-4559" - - "127.0.0.1:443:443" environment: - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN:?} - - DEBUG=${DEBUG:-0} volumes: - - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack" - "/var/run/docker.sock:/var/run/docker.sock" ``` - Start it and wait for readiness: + Start the service and verify readiness before executing tests: ```bash docker compose up -d localstack @@ -104,8 +103,9 @@ See the [Auth Token documentation](/aws/getting-started/auth-token/) for full de ::: - - Start LocalStack directly with `docker run`: + + + Initialize the container directly using the Docker engine: ```bash docker run \ @@ -120,76 +120,34 @@ See the [Auth Token documentation](/aws/getting-started/auth-token/) for full de # Wait for readiness until curl -s http://localhost:4566/_localstack/health | grep -q '"running"'; do sleep 1; done ``` - - - - Add LocalStack as a service in your CircleCI config: - - ```yaml - version: 2.1 - - jobs: - integration-tests: - docker: - - image: cimg/python:3.12 - - image: localstack/localstack-pro - environment: - LOCALSTACK_AUTH_TOKEN: $LOCALSTACK_AUTH_TOKEN - steps: - - checkout - - run: - name: Wait for LocalStack - command: | - until curl -s http://localhost:4566/_localstack/health | grep -q '"running"'; do sleep 1; done - - run: - name: Run tests - command: pytest tests/integration/ - ``` - - Set `LOCALSTACK_AUTH_TOKEN` in your CircleCI project's environment variables. - -## Verify activation - -After LocalStack starts, confirm the license is active: - -```bash -curl -s http://localhost:4566/_localstack/info | jq '.is_license_activated' -# Should return: true -``` - -## Key differences from local development - -| | Local development | CI/CD | -| -------------- | -------------------------------- | ----------------------------------------------------------------------------------- | -| **CLI** | `lstk` or LocalStack CLI | Docker Compose / `docker run`, or `lstk --non-interactive` | -| **Auth** | Browser login or stored token | `LOCALSTACK_AUTH_TOKEN` env var | -| **Token type** | Developer token | CI token | -| **State** | Optional persistence | Optional persistence (same mechanisms; typical pattern is a fresh instance per job) | -| **Startup** | Interactive TUI (default `lstk`) | Non-interactive (`docker compose`, `docker run -d`, `lstk --non-interactive`) | +## Technical Comparison: Local vs. CI/CD -## Persisting state across runs +| Feature | Local Development | CI/CD Environment | +| :--- | :--- | :--- | +| **Interface** | `lstk` or LocalStack CLI | Docker Compose / `docker run`, or `lstk --non-interactive` | +| **Authentication** | Browser-based or stored credentials | `LOCALSTACK_AUTH_TOKEN` environment variable | +| **Token Type** | Individual Developer Token | Dedicated CI Token | +| **State** | Persistent by choice | Ephemeral (standard) or Snapshotted (Cloud Pods) | +| **Startup Mode** | Interactive (TUI) (default `lstk`) | Non-interactive (Headless) (`docker compose`, `docker run -d`, `lstk --non-interactive`) | -If you tear down the container at the end of a job, nothing is left on disk unless you save it — which is why many teams use a clean instance every time. -When you **do** need to reuse infrastructure or data between pipeline runs or steps, CI is fully supported: +## State Persistence in CI -- **[Cloud Pods](/aws/capabilities/state-management/cloud-pods/)** — save and load snapshots; the [`setup-localstack`](https://github.com/localstack/setup-localstack) action can load and save pods via `state-backend: cloud-pods` (see [GitHub Actions](/aws/integrations/continuous-integration/github-actions/) — _Store Localstack state_). -- **Snapshot-based [persistence](/aws/capabilities/state-management/persistence/)** — enable `PERSISTENCE=1` and mount a volume so state survives container restarts on the same runner or workspace. -- **State export/import** — run `localstack state export` and `localstack state import` and pass the file through your CI provider’s **artifacts**, **cache**, or attached storage (for example, see [GitLab CI](/aws/integrations/continuous-integration/gitlab-ci/) — _Store Localstack state_). +While most pipelines favor ephemeral instances for clean test cycles, certain workflows require persisting infrastructure state across jobs or runners. -Choose the approach that fits your runner model: for example, multi-job GitLab pipelines often need explicit state handoff because services do not carry between jobs. +- **[Cloud Pods](/aws/capabilities/state-management/cloud-pods/)**: Save or load snapshots using the `setup-localstack` action with the `state-backend: cloud-pods` configuration. +- **Snapshot Persistence Engine**: Enable `PERSISTENCE=1` and mount a host volume to retain data across container restarts on the same runner. +- **State Export/Import Commands**: Use `localstack state export` and `localstack state import` to pass infrastructure state via CI artifacts or caching mechanisms. -## More CI integrations +## Next steps -LocalStack has dedicated integration guides for many CI providers: +You have configured LocalStack for automated environments and explored various CI/CD integration patterns. Proceed to the [AI & Agent Workflows Guide](/aws/getting-started/ai-workflows/) to learn how to integrate LocalStack with AI coding assistants and automate infrastructure tasks. -- [GitHub Actions](/aws/integrations/continuous-integration/github-actions/) -- [GitLab CI](/aws/integrations/continuous-integration/gitlab-ci/) -- [CircleCI](/aws/integrations/continuous-integration/circleci/) -- [AWS CodeBuild](/aws/integrations/continuous-integration/codebuild/) -- [Travis CI](/aws/integrations/continuous-integration/travis-ci/) -- [Bitbucket Pipelines](/aws/integrations/continuous-integration/bitbucket/) +## Resources -See the full [CI/CD integrations](/aws/integrations/continuous-integration/) section for details. +- [GitHub Actions Integration](/aws/integrations/continuous-integration/github-actions/): Advanced workflows and configuration options. +- [CircleCI Guide](/aws/integrations/continuous-integration/circleci/): Implementation details for CircleCI environments. +- [GitLab CI Integration](/aws/integrations/continuous-integration/gitlab-ci/): Service-based setup for GitLab runners. +- [AWS CodeBuild](/aws/integrations/continuous-integration/codebuild/): Native AWS CI/CD integration. From 4ca4a39f2873dffb0751f0bb6f16735c4dac290c Mon Sep 17 00:00:00 2001 From: Quetzalli Date: Fri, 29 May 2026 00:32:57 +0200 Subject: [PATCH 16/37] Draft 2: rewrite ai-workflows.mdx Consolidated use cases, removed duplicated MCP configuration, and deleted non-functional validation content. Standardized the tone and improved technical context throughout the guide. --- .../docs/aws/getting-started/ai-workflows.mdx | 94 +++++-------------- 1 file changed, 21 insertions(+), 73 deletions(-) diff --git a/src/content/docs/aws/getting-started/ai-workflows.mdx b/src/content/docs/aws/getting-started/ai-workflows.mdx index 51efca9d4..2427ddbbe 100644 --- a/src/content/docs/aws/getting-started/ai-workflows.mdx +++ b/src/content/docs/aws/getting-started/ai-workflows.mdx @@ -1,95 +1,43 @@ --- title: AI & Agent Workflows -description: Use LocalStack with AI coding assistants, MCP servers, and agent-driven infrastructure automation. +description: Integrate LocalStack with AI coding assistants, MCP servers, and agent-driven infrastructure automation. template: doc sidebar: order: 5 --- -## Overview +LocalStack provides a secure, emulated environment for developing and testing AI-assisted workflows. You can iterate on AI-generated infrastructure code and agentic deployment tasks without incurring cloud costs or risking production AWS environments by using a local cloud sandbox. -AI-assisted development workflows need a fast and secure environment to develop and test in. -Whether you're using an AI coding assistant to generate infrastructure code, running an agent that deploys AWS resources, or validating AI-generated IaC before applying it to real AWS — LocalStack gives you a safe, fast, cost-free environment to run these workflows in. +## Capability Map -## Connect an AI coding assistant via MCP +| Use Case | Recommended Tooling | +| :--- | :--- | +| **AI Assistant Resource Management** | [LocalStack MCP Server](/aws/tooling/mcp-server/) | +| **Autonomous Infrastructure Deployment** | [LocalStack Skills](https://github.com/localstack/skills) | +| **Local IaC Validation** | LocalStack + `tflocal` / `cdklocal` / `awslocal` | -The [LocalStack MCP Server](https://github.com/localstack/localstack-mcp-server) is a [Model Context Protocol](https://modelcontextprotocol.io/) (MCP) server that connects compatible clients (Claude, Cursor, Windsurf, and others) to your LocalStack environment. -It gives agents tools to run the full local cloud lifecycle—not only generating infrastructure code, but starting the container, deploying and tearing down IaC, analyzing logs, and more. -See [Introducing the LocalStack MCP Server](https://blog.localstack.cloud/introducing-localstack-mcp-server/) for the original announcement and walkthrough. -With the MCP server configured, your assistant can use tools such as: +## Model Context Protocol (MCP) Integration -- **Lifecycle** — Start, stop, restart, or check status of the LocalStack container -- **Deploy** — Deploy or destroy CDK, Terraform, SAM, or CloudFormation projects on LocalStack -- **Operations** — Analyze logs, run AWS CLI commands via `awslocal`, manage [Cloud Pods](/aws/capabilities/state-management/cloud-pods/), and (where supported) IAM policy analysis, chaos injection, and docs search +The LocalStack MCP Server connects compatible AI clients (such as Claude, Cursor, or Windsurf) to your local cloud environment. This integration allows AI agents to manage the full local cloud lifecycle, including container management, resource deployment, and log analysis. -...and many more. - -### MCP Server Prerequisites - -Before you begin, make sure these are installed and in your system's `PATH`: - -- [Node.js](https://nodejs.org/en/) (v20.x or later) to run the `npx` command. -- [LocalStack CLI](https://docs.localstack.cloud/user-guide/cli/) and [Docker](https://docs.docker.com/get-docker/) to manage the LocalStack container itself. -- [`cdklocal`](https://docs.localstack.cloud/user-guide/integrations/aws-cdk/) or [`tflocal`](https://docs.localstack.cloud/user-guide/integrations/terraform/) to use the `localstack-deployer` tool. (optional) -- A [LocalStack Auth Token](https://docs.localstack.cloud/getting-started/auth-token/) to enable licensed features. (optional) - -### MCP Server Configuration - -Add a server entry like this to your client's MCP configuration—for **Cursor**, this would typically be `~/.cursor/mcp.json`. -For **Claude Code**, register the server with `claude mcp add` (it is saved to your project-level MCP configuration). - -```json -{ - "mcpServers": { - "localstack-mcp-server": { - "command": "npx", - "args": ["-y", "@localstack/localstack-mcp-server"], - "env": { - "LOCALSTACK_AUTH_TOKEN": "" - } - } - } -} -``` - -Full prerequisites, Cursor/VS Code/Claude Code variants, custom endpoints (`LOCALSTACK_HOSTNAME`, `LOCALSTACK_PORT`), troubleshooting, and the complete tool reference are on [LocalStack MCP Server](/aws/tooling/mcp-server/). - -:::note -You do not need to start LocalStack manually before using MCP: an agent can start the container using the **localstack-management** tool once this configuration is in place. -If LocalStack already runs elsewhere, point the MCP server at it via the `env` block as described in [Connecting to a custom LocalStack endpoint](/aws/tooling/mcp-server/#connecting-to-a-custom-localstack-endpoint). +:::note[Official MCP Documentation] +For detailed configuration instructions, prerequisite checks, and the complete tool reference, read our [LocalStack MCP Server guide](https://docs.localstack.cloud/aws/tooling/mcp-server/). You don't need to start LocalStack manually before using MCP; agents can initialize the container using the management tools provided by the server. ::: -## Deploy with agent-driven automation using Skills - -[LocalStack Skills](https://github.com/localstack/skills) are pre-built agent skill definitions for deploying common AWS architectures locally. It contains skills for LocalStack lifecycle management, IaC deployment, state management and more. Skills can be used in combination with the MCP server to create a fully autonomous agent-driven workflow. - -Skills are useful when: - -- You want to scaffold a new local environment quickly without writing all the infrastructure code yourself -- You're using an agent-first workflow and want LocalStack to be a first-class deployment target -- You want to iterate rapidly on architecture without touching real AWS - -Browse the [skills repository](https://github.com/localstack/skills) for available skills and setup instructions. -## Validate AI-generated IaC before applying to AWS +## Agent-Driven Automation with Skills -A common pattern when using AI to generate Terraform, CDK, or CloudFormation is to deploy it to LocalStack first. -This catches configuration errors, missing permissions, and service interaction bugs before you spend time (and money) deploying to real AWS. +[LocalStack Skills](https://github.com/localstack/skills) provide pre-defined agent skill definitions for automating AWS architecture deployments. These skills allow agents to scaffold environments, iterate on architecture designs, and manage LocalStack state autonomously. -The workflow is: +Skills implementation scenarios: +- **Rapid Prototyping**: Scaffold new local environments without manual infrastructure coding. +- **Agent-First Development**: Establish LocalStack as a primary deployment target for autonomous agents. +- **Architecture Iteration**: Test complex architectural changes in a risk-free, local sandbox. -1. Generate infrastructure code with your AI tool -2. Deploy to LocalStack with `tflocal apply` (Terraform), `cdklocal deploy` (CDK), or the AWS CLI -3. Run your integration tests against the local environment -4. When everything passes, deploy to real AWS with confidence +Refer to the [LocalStack Skills repository](https://github.com/localstack/skills) for available skill definitions and setup instructions. -See [Tooling](/aws/tooling/) for the full list of LocalStack-aware wrappers for common IaC tools. -## Summary +## Next steps -| Use case | Tool | -| ------------------------------------------------------ | --------------------------------------------------------- | -| AI assistant that can inspect & manage local resources | [LocalStack MCP Server](/aws/tooling/mcp-server/) | -| Agent-driven infrastructure deployment | [LocalStack Skills](https://github.com/localstack/skills) | -| Validate AI-generated IaC safely | LocalStack + `tflocal` / `cdklocal` / `awslocal` | +You have explored the integration patterns for AI and agent-driven development. Proceed to the [Auth Token guide](/aws/getting-started/auth-token/) to configure your licensing and unlock advanced LocalStack features. From 5bfe4a9a7f934d9d7f868e8501fec881a8be08ea Mon Sep 17 00:00:00 2001 From: Quetzalli Date: Fri, 29 May 2026 00:43:36 +0200 Subject: [PATCH 17/37] Draft 2: rewrite auth-token.mdx Eliminated redundant introduction slop and consolidated configuration methods by execution type. Simplified token comparisons, optimized verification snippets, and unified security warnings for better technical clarity. --- .../docs/aws/getting-started/auth-token.mdx | 262 ++++-------------- 1 file changed, 50 insertions(+), 212 deletions(-) diff --git a/src/content/docs/aws/getting-started/auth-token.mdx b/src/content/docs/aws/getting-started/auth-token.mdx index aea872ca7..500812095 100644 --- a/src/content/docs/aws/getting-started/auth-token.mdx +++ b/src/content/docs/aws/getting-started/auth-token.mdx @@ -1,6 +1,6 @@ --- title: Auth Token -description: Configure your Auth Token to access and activate LocalStack. +description: Configure and manage LocalStack Auth Tokens for local development and CI/CD environments. template: doc sidebar: order: 6 @@ -8,256 +8,94 @@ sidebar: import { Code, Tabs, TabItem } from '@astrojs/starlight/components'; -## Introduction +The Auth Token is a mandatory credential required to pull the `localstack-pro` image and activate service entitlements. It links your local instance to your workspace license and enables access to the full suite of emulated AWS services. -The Auth Token activates LocalStack for AWS. It ties the running instance to your workspace and license and is required whenever you use LocalStack for AWS. +## Token Types -**Whether you need to configure a token by hand** depends on how you run LocalStack: +| Token Type | Scope | Use Case | +| :--- | :--- | :--- | +| **Developer Token** | Individual | Local development workstations. Managed per user. | +| **CI Auth Token** | Workspace | Automated pipelines and shared runners. Managed by workspace admins. | -- **[`lstk`](/aws/tooling/lstk)** (early release) — For most local development, the Auth Token is present but easy to overlook. On first run or after `lstk login`, the CLI completes a browser login flow, stores your **Developer Auth Token** in the system keyring (or a config-directory fallback when no keyring is available), and injects it into the container whenever you start LocalStack. You are still using an Auth Token for activation; `lstk` obtains and reuses it after login instead of asking you to set `LOCALSTACK_AUTH_TOKEN` yourself. -- **LocalStack CLI (`localstack`)** — You configure the token yourself: set `LOCALSTACK_AUTH_TOKEN` or run `localstack auth set-token` (see [Configuring your Auth Token](#configuring-your-auth-token)). [`lstk`](/aws/tooling/lstk) is currently in early release and missing some core features, so the `localstack` CLI is still the right tool for Cloud Pods, Extensions, Ephemeral Instances, and other advanced features, so many workflows keep using it and therefore set an Auth Token explicitly. For personal development, use your **Developer Auth Token** from the web app. -- **Docker or Docker Compose** — You pass `LOCALSTACK_AUTH_TOKEN` into the container (see [Configuring your Auth Token](#configuring-your-auth-token)). Use your **Developer Auth Token** for local runs unless you are in CI. -- **CI pipelines and other automated, non-interactive environments** — You must set `LOCALSTACK_AUTH_TOKEN` to a **CI Auth Token**. Developer Auth Tokens should not be used in CI. See [CI Environments](#ci-environments). +Manage both token types on the [Auth Tokens page](https://app.localstack.cloud/workspace/auth-tokens) in the LocalStack Web Application. -Auth tokens come in two types: a **Developer Auth Token** and a **CI Auth Token**. - -- The **Developer Auth Token** is linked to a specific user within a specific workspace. - Every user has their own Auth Token. - It cannot be deleted but can be rotated for security reasons if needed. -- The **CI Auth Token** is not associated with any specific user and is designed for use in CI environments and other non-developer contexts. - These tokens are stored in the workspace and can be managed by members with appropriate permissions. - -Both the **Developer Auth Token** and **CI Auth Token** can be managed on the [Auth Tokens page](https://app.localstack.cloud/workspace/auth-tokens). - -:::danger - -- It's crucial to keep your Auth Token confidential. - Do not include it in source code management systems, such as Git repositories. -- Be aware that if an Auth Token is committed to a public repository, it is at risk of exposure, and could remain in the repository's history, even if attempts are made to rewrite it. -- In case your Auth Token is accidentally published, immediately rotate it on the [Auth Token page](https://app.localstack.cloud/workspace/auth-tokens). - ::: - -## Managing your License - -To use LocalStack, a license is required. -You can get a license by registering on the [LocalStack Web Application](https://app.localstack.cloud/sign-up). -Choose between a 14-day trial or explore additional features with our paid offering. -During the trial period, you are welcome to use all the features of LocalStack. - -After initiating your trial or acquiring a license, proceed to assign it to a user by following the steps outlined below: - -- Visit the [Users & Licenses page](https://app.localstack.cloud/workspace/members). -- Select a user in the **Workspace Members** section for license assignment. -- Define user's role via the **Member Role** dropdown. - Single users automatically receive the **Admin** role. -- Toggle **Advanced Permissions** to set specific permissions. - Single users automatically receive full permissions. -- Click **Save** to complete the assignment. - Single users assign licenses to themselves. - -![Assigning a license](/images/aws/assigning-a-license.png) - -If you have joined a workspace, you need to be assigned a license by the workspace administrator. -In case of switching workspaces or licenses, you need to make sure that you are assigned to the correct license. - -:::note -If you do not assign a license, you will not be able to use LocalStack even if you have a valid Auth token. +:::danger[Credential Security] +Auth Tokens provide full access to your license and workspace. **Do not commit tokens to version control.** If a token is exposed, rotate it immediately via the Web Application to invalidate existing sessions. ::: -To view your own assigned license, visit the [My License page](https://app.localstack.cloud/workspace/my-license). -You can further navigate to the [Auth Token page](https://app.localstack.cloud/workspace/auth-tokens) to view your **Developer Auth Token** and **CI Auth Token**. - -## Configuring your Auth Token - -LocalStack requires the `LOCALSTACK_AUTH_TOKEN` environment variable to contain your Auth Token. -You can configure your Auth Token in several ways, depending on your use case. -The following sections describe the various methods of setting your Auth Token. - -:::danger - -- It's crucial to keep your Auth Token confidential. - Do not include it in source code management systems, such as Git repositories. -- Be aware that if an Auth Token is committed to a public repository, it's at risk of exposure, and could remain in the repository's history, even if attempts are made to rewrite it. -- In case your Auth Token is accidentally published, immediately rotate it on the [Auth Token page](https://app.localstack.cloud/workspace/auth-tokens). - ::: +## Configuration Methods -### LocalStack CLI +Authentication requirements vary based on your chosen execution method. -You should set the `LOCALSTACK_AUTH_TOKEN` environment variable either before or during the startup of LocalStack using the `localstack` command-line interface (CLI). +### 1. lstk (Automated) +The `lstk` CLI automates the authentication lifecycle. On initial execution, it triggers a browser-based OAuth flow and stores the resulting token in your system keyring. No manual environment variable configuration is required. - - - \nlocalstack start`} - lang="shell" - /> - - - \nlocalstack start`} - lang="powershell" - /> - - - -:::note +```bash +lstk start -1. You can alternatively set the `LOCALSTACK_AUTH_TOKEN` environment variable in your shell session. - This ensures the Auth Token is transmitted to your LocalStack container, enabling key activation. -2. The `localstack auth set-token` command is only available for `localstack` CLI and cannot be used with a Docker/Docker Compose setup. - ::: +``` -You have the option to run your LocalStack container in the background by appending the `-d` flag to the `localstack start` command. +### 2. LocalStack CLI -The `localstack` CLI automatically detects the Auth Token and appropriately conveys it to the LocalStack container. +If you use the standard CLI, set your token using the `auth` command. This persists the credential in your local configuration. -:::note -If you are using LocalStack with an Auth Token, it's necessary to download the [LocalStack for AWS image](/aws/capabilities/config/docker-images#localstack-for-aws-image), which includes Pro services and several advanced features. -::: +### 3. Docker & Docker Compose -### Docker +For direct container execution, inject the token as an environment variable. -To start LocalStack via Docker, you need to provide the Auth Token using the `-e` flag, which is used for setting environment variables. +**Docker CLI:** -```bash {5} +```bash docker run \ --rm -it \ - -p 4566:4566 \ - -p 4510-4559:4510-4559 \ - -e LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN:- } \ + -e LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN} \ localstack/localstack-pro -``` -For more information about starting LocalStack with Docker, take a look at our [Docker installation](/aws/getting-started/installation/#docker) guide. - -### Docker Compose - -To start LocalStack using `docker compose`, you have to include the `LOCALSTACK_AUTH_TOKEN` environment variable in your `docker-compose.yml` file: - -```yaml -environment: - - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN- } ``` -You can manually set the Auth Token, or use the `export` command to establish the Auth Token in your current shell session. -This ensures the Auth Token is transmitted to your LocalStack container, enabling key activation. - -### CI Environments - -CI environments require a CI Auth Token. -Developer Auth Tokens cannot be used in CI. -CI Auth Tokens are available on the [Auth Tokens page](https://app.localstack.cloud/workspace/auth-tokens) and are configured similarly to Developer Auth Tokens. - -To set the CI Auth Token, add the Auth Token value in the `LOCALSTACK_AUTH_TOKEN` environment variable of your CI provider, and refer to it when starting LocalStack in your CI workflow. -You can find detailed examples in our [LocalStack in CI documentation](/aws/integrations/continuous-integration/). - -## Rotating the Auth Token +**Docker Compose:** -Your personal Auth Token provides full access to your workspace and LocalStack license. -It's important to treat auth tokens as confidential, avoiding sharing or storing them in source control management systems (SCMs) like Git. - -If you believe your Auth Token has been compromised or becomes known to someone else, reset it without delay. -When you reset a token, the old one is immediately deactivated, losing its ability to access your license or workspace. -It is not possible to restore previous tokens. +```yaml +services: + localstack: + image: localstack/localstack-pro + environment: + - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN} -To rotate your Auth Token, go to the [Auth Token page](https://app.localstack.cloud/workspace/auth-tokens) and select the **Reset Auth Token** option. +``` -## Licensing configuration & activation checkup +## License Assignment -To avoid logging any licensing-related error messages, set `LOG_LICENSE_ISSUES=0` in your environment. -Refer to our [configuration guide](/aws/capabilities/config/configuration/#localstack-for-aws) for more information. +An Auth Token is only valid if a license is assigned to your user identity or workspace. -The simplest method to verify if LocalStack is active is by querying the health endpoint for a list of running services: +**Assignment Workflow:** - - +1. Navigate to the [Users & Licenses page](https://app.localstack.cloud/workspace/members). +2. Identify the target user in **Workspace Members**. +3. Select the appropriate **Member Role** (Admins receive full permissions by default). +4. Save the configuration to activate the license for that identity. - ```bash - curl http://localhost:4566/_localstack/info | jq - ``` +:::note +An active Auth Token will fail to initialize the container if a valid license has not been assigned to the associated user. +::: - - - ```bash - Invoke-WebRequest -Uri http://localhost:4566/_localstack/info | ConvertFrom-Json - ``` +## Activation Verification - - +Verify the activation status by querying the LocalStack info endpoint: -The following output would be retrieved: +**Successful Activation Output:** -```bash +```json { - "version": "3.0.0:6dd3f3d", "edition": "pro", - "is_license_activated": true, - "session_id": "7132da5f-a380-44ca-8897-6f0fdfd7b1c9", - "machine_id": "0c49752c", - "system": "linux", - "is_docker": true, - "server_time_utc": "2023-11-21T05:41:33", - "uptime": 161 + "is_license_activated": true } -``` - -The `edition` field is always `pro` and the `is_license_activated` field is set to `true`. -Another way to confirm this is by checking the logs of the LocalStack container for a message indicating successful license activation: -```bash -[...] Successfully activated license ``` -Otherwise, check our [troubleshooting](#troubleshooting) section. - -## Troubleshooting - -While using Auth Tokens, LocalStack demands a successful license activation for startup. -If the activation of the license is unsuccessful, LocalStack will exit and display error messages. - -```bash -=============================================== -License activation failed! 🔑❌ - -Reason: The credentials defined in your environment are invalid. Please make sure to either set the LOCALSTACK_AUTH_TOKEN variable to a valid auth token, or the LOCALSTACK_API_KEY variable to a valid LocalStack API key. You can find your Auth Token or API key in the LocalStack web app https://app.localstack.cloud. - -Due to this error, Localstack has quit. LocalStack for AWS features can only be used with a valid license. - -- Please check that your credentials are set up correctly and that you have an active license. - You can find your credentials in our webapp at https://app.localstack.cloud. -- If you want to continue using LocalStack without pro features you can set `ACTIVATE_PRO=0`. -``` - -The key activation in LocalStack may fail for several reasons, and the most common ones are listed below in this section. - -### Missing Credentials - -You need to provide either an Auth Token to start the LocalStack for AWS image successfully. -You can find your Auth Token on the [Auth Tokens page](https://app.localstack.cloud/workspace/auth-tokens) in the LocalStack Web Application. - -If you are using the `localstack` CLI, you can set the `LOCALSTACK_AUTH_TOKEN` environment variable to your Auth Token or use the following command to set it up: - -```bash -localstack auth set-token -``` - -### Invalid License - -The issue may occur if there is no valid license linked to your account due to expiration or if the license has not been assigned. -You can check your license status in the LocalStack Web Application on the [My License page](https://app.localstack.cloud/workspace/my-license). - -### License Server Unreachable - -LocalStack initiates offline activation when the license server is unreachable, requiring re-activation every 24 hours. -Log output may indicate issues with your machine resolving the LocalStack API domain, which can be verified using a tool like `dig`: - -```bash -dig api.localstack.cloud -``` -If the result shows a status other than `status: NOERROR`, your machine is unable to resolve this domain. -Certain corporate DNS servers may filter requests to specific domains. -Kindly reach out to your network administrator to safelist `localstack.cloud` domain. +## Next steps -If you have any further problems concerning your license activation, or if the steps do not help, do not hesitate to [contact us](https://localstack.cloud/contact/). +You have successfully completed the Getting Started sequence! +Proceed to the [FAQ](https://www.google.com/search?q=/aws/getting-started/faq/) for troubleshooting common scenarios, or explore our [supported local AWS services](https://www.google.com/search?q=/aws/services/) to begin building. From e38c155cb36fabebd0fc082d39ede9b37eaed836 Mon Sep 17 00:00:00 2001 From: Quetzalli Date: Fri, 29 May 2026 00:46:22 +0200 Subject: [PATCH 18/37] Add Troubleshooting section to auth-token.mdx --- .../docs/aws/getting-started/auth-token.mdx | 55 ++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/src/content/docs/aws/getting-started/auth-token.mdx b/src/content/docs/aws/getting-started/auth-token.mdx index 500812095..a167d95ea 100644 --- a/src/content/docs/aws/getting-started/auth-token.mdx +++ b/src/content/docs/aws/getting-started/auth-token.mdx @@ -98,4 +98,57 @@ Verify the activation status by querying the LocalStack info endpoint: ## Next steps You have successfully completed the Getting Started sequence! -Proceed to the [FAQ](https://www.google.com/search?q=/aws/getting-started/faq/) for troubleshooting common scenarios, or explore our [supported local AWS services](https://www.google.com/search?q=/aws/services/) to begin building. +Proceed to the [FAQ](/aws/getting-started/faq/) for troubleshooting common scenarios, or explore our [supported local AWS services](/aws/services/) to begin building. + + +## Troubleshooting + +While using Auth Tokens, LocalStack demands a successful license activation for startup. +If the activation of the license is unsuccessful, LocalStack will exit and display error messages. + +```bash +=============================================== +License activation failed! 🔑❌ + +Reason: The credentials defined in your environment are invalid. Please make sure to either set the LOCALSTACK_AUTH_TOKEN variable to a valid auth token, or the LOCALSTACK_API_KEY variable to a valid LocalStack API key. You can find your Auth Token or API key in the LocalStack web app https://app.localstack.cloud. + +Due to this error, Localstack has quit. LocalStack for AWS features can only be used with a valid license. + +- Please check that your credentials are set up correctly and that you have an active license. + You can find your credentials in our webapp at https://app.localstack.cloud. +- If you want to continue using LocalStack without pro features you can set `ACTIVATE_PRO=0`. +``` + +The key activation in LocalStack may fail for several reasons, and the most common ones are listed below in this section. + +### Missing Credentials + +You need to provide either an Auth Token to start the LocalStack for AWS image successfully. +You can find your Auth Token on the [Auth Tokens page](https://app.localstack.cloud/workspace/auth-tokens) in the LocalStack Web Application. + +If you are using the `localstack` CLI, you can set the `LOCALSTACK_AUTH_TOKEN` environment variable to your Auth Token or use the following command to set it up: + +```bash +localstack auth set-token +``` + +### Invalid License + +The issue may occur if there is no valid license linked to your account due to expiration or if the license has not been assigned. +You can check your license status in the LocalStack Web Application on the [My License page](https://app.localstack.cloud/workspace/my-license). + +### License Server Unreachable + +LocalStack initiates offline activation when the license server is unreachable, requiring re-activation every 24 hours. +Log output may indicate issues with your machine resolving the LocalStack API domain, which can be verified using a tool like `dig`: + +```bash +dig api.localstack.cloud +``` + +If the result shows a status other than `status: NOERROR`, your machine is unable to resolve this domain. +Certain corporate DNS servers may filter requests to specific domains. +Kindly reach out to your network administrator to safelist `localstack.cloud` domain. + +If you have any further problems concerning your license activation, or if the steps do not help, don't hesitate to [contact us](https://localstack.cloud/contact/). + From 3a9ce052594ca6786336390827aad08fe1935eb4 Mon Sep 17 00:00:00 2001 From: Quetzalli Date: Fri, 29 May 2026 12:15:11 +0200 Subject: [PATCH 19/37] remove dead code from global.css --- src/styles/global.css | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/src/styles/global.css b/src/styles/global.css index 33e14b98d..c00c4feb1 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -108,30 +108,6 @@ h3 { transform: translateY(-2px); } -.path-secondary-card { - margin-top: 1rem; -} - -.path-secondary-card .path-secondary-card__title { - font-size: 18px; - font-weight: 500; - letter-spacing: -0.12px; -} - -.path-secondary-card .path-secondary-card__body { - font-size: 16px; - line-height: 26px; - color: var(--sl-color-gray-3); -} - -.path-secondary-card .path-secondary-card__body > :first-child { - margin-top: 0; -} - -.path-secondary-card .path-secondary-card__body > :last-child { - margin-bottom: 0; -} - .service-box-content { height: 100%; display: flex; From 51aa017779a4e74991193de9d70812fb2b736820 Mon Sep 17 00:00:00 2001 From: Quetzalli Date: Fri, 29 May 2026 12:40:32 +0200 Subject: [PATCH 20/37] add install options + fix missing closing tags --- .../docs/aws/getting-started/installation.mdx | 142 +++++++++++++++++- 1 file changed, 137 insertions(+), 5 deletions(-) diff --git a/src/content/docs/aws/getting-started/installation.mdx b/src/content/docs/aws/getting-started/installation.mdx index 8e792ceff..eed8fd769 100644 --- a/src/content/docs/aws/getting-started/installation.mdx +++ b/src/content/docs/aws/getting-started/installation.mdx @@ -57,28 +57,160 @@ The LocalStack CLI is the primary tool for managing all LocalStack capabilities. ### Install LocalStack CLI -x86-64 -ARM64 -Extract the binary to `/usr/local/bin`: + + + + +You can download the pre-built binary for your architecture using the link below: + + + x86-64 + + + ARM64 + + +or use the curl commands below: + +For x86-64: + + - +For ARM64: + + +Then extract the LocalStack CLI from the terminal: + + + +
+Alternative: Homebrew on Linux + +If you are using [Homebrew for Linux](https://docs.brew.sh/Homebrew-on-Linux), you can install the LocalStack CLI directly from our official LocalStack tap: ```bash brew install localstack/tap/localstack-cli +``` + +
+
+ + + +You can install the LocalStack CLI using Brew directly from our official LocalStack tap: + +```bash +brew install localstack/tap/localstack-cli ``` +
+Alternative: Binary Download + +You may download the binary for your architecture using the link below: + + + Intel (AMD64) + + +or use the following curl command: + + + +Then extract the LocalStack CLI from the terminal: + + + +
+
+ + + +You can download the pre-built binary for your architecture using the link below: + + + Intel (AMD64) + + +Then extract the archive and execute the binary in Powershell. + + + + + +If you cannot use the binary releases of LocalStack, you can install the Python distribution. + +Please make sure to install the following before moving ahead: + +- [Python](https://docs.python.org/3/using/index.html) +- [pip](https://pip.pypa.io/en/stable/installation/) + +Next install the LocalStack CLI in your Python environment by running: + ```bash python3 -m pip install --upgrade localstack +``` +:::note +To download a specific version of LocalStack, replace `` with the required version from [release page](https://github.com/localstack/localstack/releases). + +```bash +python3 -m pip install localstack== +``` + +::: + +:::tip[MacOS Sierra?] +If you have problems with permissions in MacOS X Sierra, install with: + +```bash +python3 -m pip install --user localstack ``` +::: + :::danger -Do not use `sudo` or the `root` user. Install and execute LocalStack entirely under a local non-root user. +Do not use `sudo` or the `root` user when starting LocalStack. +It should be installed and started entirely under a local non-root user. ::: + +
+ ### Start LocalStack CLI From f17c2b95d37517e3f7690551bb47293ab313c31a Mon Sep 17 00:00:00 2001 From: Quetzalli Date: Fri, 29 May 2026 13:09:33 +0200 Subject: [PATCH 21/37] update anchor links --- .../aws/capabilities/cloud-sandbox/ephemeral-instances.md | 2 +- .../capabilities/security-testing/custom-tls-certificates.mdx | 2 +- .../docs/aws/capabilities/state-management/cloud-pods.mdx | 2 +- src/content/docs/aws/services/ec2.mdx | 2 +- src/content/docs/aws/services/lambda.mdx | 2 +- src/content/docs/aws/tooling/aws-replicator.mdx | 4 ++-- src/content/docs/aws/tooling/localstack-cli.md | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/content/docs/aws/capabilities/cloud-sandbox/ephemeral-instances.md b/src/content/docs/aws/capabilities/cloud-sandbox/ephemeral-instances.md index 6f78205f4..5cb6bd80f 100644 --- a/src/content/docs/aws/capabilities/cloud-sandbox/ephemeral-instances.md +++ b/src/content/docs/aws/capabilities/cloud-sandbox/ephemeral-instances.md @@ -87,7 +87,7 @@ If you have created a Cloud Pod from an older version of LocalStack, you need to ## Ephemeral Instances CLI -The Ephemeral Instances CLI is included in the [LocalStack CLI installation](/aws/getting-started/installation/#installing-localstack-cli), so no additional installations are needed to start using it. +The Ephemeral Instances CLI is included in the [LocalStack CLI installation](/aws/getting-started/installation/#install-localstack-cli), so no additional installations are needed to start using it. If you're a licensed user, setting the `LOCALSTACK_AUTH_TOKEN` as an environment variable is recommended to access all features of the Ephemeral Instances CLI. Access the Ephemeral Instances CLI by running the `localstack ephemeral` command from your terminal. diff --git a/src/content/docs/aws/capabilities/security-testing/custom-tls-certificates.mdx b/src/content/docs/aws/capabilities/security-testing/custom-tls-certificates.mdx index 0b070258f..309273172 100644 --- a/src/content/docs/aws/capabilities/security-testing/custom-tls-certificates.mdx +++ b/src/content/docs/aws/capabilities/security-testing/custom-tls-certificates.mdx @@ -30,7 +30,7 @@ They all can be summarised as: ## Creating a custom docker image -If you run LocalStack in a docker container (which includes using [the CLI](/aws/getting-started/installation/#installing-localstack-cli), [docker](/aws/getting-started/installation/#docker), [docker-compose](/aws/getting-started/installation/#docker-compose), or [helm](/aws/getting-started/installation/#helm)), to include a custom TLS root certificate a new docker image should be created. +If you run LocalStack in a docker container (which includes using [the CLI](/aws/getting-started/installation/#install-localstack-cli), [docker](/aws/getting-started/installation/#docker-compose), [docker-compose](/aws/getting-started/installation/#docker-compose), or [helm](/aws/getting-started/installation/#helm-kubernetes)), to include a custom TLS root certificate a new docker image should be created. Create a `Dockerfile` containing the following commands: diff --git a/src/content/docs/aws/capabilities/state-management/cloud-pods.mdx b/src/content/docs/aws/capabilities/state-management/cloud-pods.mdx index 10c52cbad..94a2519a2 100644 --- a/src/content/docs/aws/capabilities/state-management/cloud-pods.mdx +++ b/src/content/docs/aws/capabilities/state-management/cloud-pods.mdx @@ -28,7 +28,7 @@ You can save and load the persistent state of Cloud Pods, you can use the [Cloud LocalStack provides a remote storage backend that can be used to store the state of your running application and share it with your team members. You can interact with the Cloud Pods over the storage backend via the LocalStack Web Application. -Cloud Pods CLI is included in the [LocalStack CLI installation](/aws/getting-started/installation/#installing-localstack-cli), so there's no need for additional installations to begin using it. +Cloud Pods CLI is included in the [LocalStack CLI installation](/aws/getting-started/installation/#install-localstack-cli), so there's no need for additional installations to begin using it. If you're a licensed user, we suggest setting the `LOCALSTACK_AUTH_TOKEN` as an environment variable. This enables you to access the complete range of LocalStack Cloud Pods features. diff --git a/src/content/docs/aws/services/ec2.mdx b/src/content/docs/aws/services/ec2.mdx index cf70e9cda..5234b2137 100644 --- a/src/content/docs/aws/services/ec2.mdx +++ b/src/content/docs/aws/services/ec2.mdx @@ -494,7 +494,7 @@ If you are using the [Docker Compose template](/aws/getting-started/installation "/var/run/libvirt/libvirt-sock:/var/run/libvirt/libvirt-sock" ``` -If you are using [Docker CLI](/aws/getting-started/installation#docker), include the following parameter in `docker run`: +If you are using [Docker CLI](/aws/getting-started/installation#docker-cli), include the following parameter in `docker run`: ```text -v /var/run/libvirt/libvirt-sock:/var/run/libvirt/libvirt-sock diff --git a/src/content/docs/aws/services/lambda.mdx b/src/content/docs/aws/services/lambda.mdx index dc6e5158a..26b1274dd 100644 --- a/src/content/docs/aws/services/lambda.mdx +++ b/src/content/docs/aws/services/lambda.mdx @@ -578,7 +578,7 @@ With the new implementation, the following changes have been introduced: - To run Lambda functions in LocalStack, mount the Docker socket into the LocalStack container. Add the following Docker volume mount to your LocalStack startup configuration: `/var/run/docker.sock:/var/run/docker.sock`. - You can find an example of this configuration in our official [`docker-compose.yml` file](/aws/getting-started/installation/#starting-localstack-with-docker-compose). + You can find an example of this configuration in our official [`docker-compose.yml` file](/aws/getting-started/installation/#docker-compose). - The `v2` provider discontinues Lambda Executor Modes such as `LAMBDA_EXECUTOR=local`. Previously, this mode was used as a fallback when the Docker socket was unavailable in the LocalStack container, but many users unintentionally used it instead of the configured `LAMBDA_EXECUTOR=docker`. The new provider now behaves similarly to the old `docker-reuse` executor and does not require such configuration. diff --git a/src/content/docs/aws/tooling/aws-replicator.mdx b/src/content/docs/aws/tooling/aws-replicator.mdx index ab6850812..f42c76a1f 100644 --- a/src/content/docs/aws/tooling/aws-replicator.mdx +++ b/src/content/docs/aws/tooling/aws-replicator.mdx @@ -29,7 +29,7 @@ A valid `LOCALSTACK_AUTH_TOKEN` must be configured to start the LocalStack for A :::note The Replicator is in limited preview and is available from LocalStack CLI version 4.2.0. -If you encounter issues, update your [LocalStack CLI](/aws/getting-started/installation/#updating-localstack-cli). +If you encounter issues, update your [LocalStack CLI](/aws/getting-started/installation/#update-localstack-cli). ::: ### Retrieve credentials to access AWS @@ -74,7 +74,7 @@ Both methods have two steps: The Replicator CLI is part of the LocalStack CLI. -Follow the [installation instructions](/aws/getting-started/installation/#installing-localstack-cli) to set it up. +Follow the [installation instructions](/aws/getting-started/installation/#install-localstack-cli) to set it up. To start a replication job, get the ARN of the resource to replicate. Then, trigger the job using the command: diff --git a/src/content/docs/aws/tooling/localstack-cli.md b/src/content/docs/aws/tooling/localstack-cli.md index 063f4efb9..ee64c8126 100644 --- a/src/content/docs/aws/tooling/localstack-cli.md +++ b/src/content/docs/aws/tooling/localstack-cli.md @@ -12,7 +12,7 @@ tags: ["Hobby"] The LocalStack Command Line Interface (CLI) is a tool for starting, managing, and configuring your LocalStack container. It provides convenience features to interact with LocalStack features like Cloud Pods, Extensions, State Management, and more. -To install the LocalStack CLI, follow the [installation guide](/aws/getting-started/installation/#installing-localstack-cli). +To install the LocalStack CLI, follow the [installation guide](/aws/getting-started/installation/#install-localstack-cli). :::note This documentation was auto-generated from LocalStack CLI version `LocalStack CLI 2026.3.0`. From df7a4ec293cab8e0c68fc34224361f54bbb83157 Mon Sep 17 00:00:00 2001 From: Quetzalli Date: Fri, 29 May 2026 13:12:18 +0200 Subject: [PATCH 22/37] update more anchor links --- .../docs/aws/capabilities/state-management/cloud-pods.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/aws/capabilities/state-management/cloud-pods.mdx b/src/content/docs/aws/capabilities/state-management/cloud-pods.mdx index 94a2519a2..d96146d20 100644 --- a/src/content/docs/aws/capabilities/state-management/cloud-pods.mdx +++ b/src/content/docs/aws/capabilities/state-management/cloud-pods.mdx @@ -451,7 +451,7 @@ localstack pod list s3-storage-aws :::note Full S3 remotes support is available in the CLI from version 3.2.0. -If you experience any difficulties, update your [LocalStack CLI](/aws/getting-started/installation/#updating-localstack-cli). +If you experience any difficulties, update your [LocalStack CLI](/aws/getting-started/installation/#update-localstack-cli). ::: ### ORAS remote storage From 66a567519639d2a2041a75e94f917cd0bb78484c Mon Sep 17 00:00:00 2001 From: Quetzalli Date: Tue, 2 Jun 2026 11:54:45 +0200 Subject: [PATCH 23/37] fix broken command block --- .../docs/aws/getting-started/local-development.mdx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/content/docs/aws/getting-started/local-development.mdx b/src/content/docs/aws/getting-started/local-development.mdx index bb8ca588f..da3a4f2b6 100644 --- a/src/content/docs/aws/getting-started/local-development.mdx +++ b/src/content/docs/aws/getting-started/local-development.mdx @@ -295,9 +295,18 @@ Stop your LocalStack container to remove all emulated resources. LocalStack is e {/* prettier-ignore-start */} - ```bash lstk stop ``` - ```bash localstack stop ``` + + ```bash + lstk stop + ``` + + + ```bash + localstack stop + ``` + + {/* prettier-ignore-end */} To persist state across restarts, see [Persistence](/aws/capabilities/state-management/persistence/) or [Cloud Pods](/aws/capabilities/state-management/cloud-pods/). From 9ec543cdaeabac50e45e426cf319f386b264b0ea Mon Sep 17 00:00:00 2001 From: Quetzalli Date: Tue, 2 Jun 2026 12:08:51 +0200 Subject: [PATCH 24/37] Apply suggestions from code review Co-authored-by: Harsh Mishra Co-authored-by: Quetzalli --- src/content/docs/aws/getting-started/ai-workflows.mdx | 4 ++-- src/content/docs/aws/getting-started/auth-token.mdx | 2 +- src/content/docs/aws/getting-started/ci-cd.mdx | 9 ++++----- src/content/docs/aws/getting-started/installation.mdx | 2 +- .../docs/aws/getting-started/local-development.mdx | 3 ++- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/content/docs/aws/getting-started/ai-workflows.mdx b/src/content/docs/aws/getting-started/ai-workflows.mdx index 2427ddbbe..911918adb 100644 --- a/src/content/docs/aws/getting-started/ai-workflows.mdx +++ b/src/content/docs/aws/getting-started/ai-workflows.mdx @@ -3,7 +3,7 @@ title: AI & Agent Workflows description: Integrate LocalStack with AI coding assistants, MCP servers, and agent-driven infrastructure automation. template: doc sidebar: - order: 5 + order: 6 --- LocalStack provides a secure, emulated environment for developing and testing AI-assisted workflows. You can iterate on AI-generated infrastructure code and agentic deployment tasks without incurring cloud costs or risking production AWS environments by using a local cloud sandbox. @@ -22,7 +22,7 @@ LocalStack provides a secure, emulated environment for developing and testing AI The LocalStack MCP Server connects compatible AI clients (such as Claude, Cursor, or Windsurf) to your local cloud environment. This integration allows AI agents to manage the full local cloud lifecycle, including container management, resource deployment, and log analysis. :::note[Official MCP Documentation] -For detailed configuration instructions, prerequisite checks, and the complete tool reference, read our [LocalStack MCP Server guide](https://docs.localstack.cloud/aws/tooling/mcp-server/). You don't need to start LocalStack manually before using MCP; agents can initialize the container using the management tools provided by the server. +For detailed configuration instructions, prerequisite checks, and the complete tool reference, read our [LocalStack MCP Server guide](/aws/tooling/mcp-server/). You don't need to start LocalStack manually before using MCP; agents can initialize the container using the management tools provided by the server. ::: diff --git a/src/content/docs/aws/getting-started/auth-token.mdx b/src/content/docs/aws/getting-started/auth-token.mdx index a167d95ea..295f71c35 100644 --- a/src/content/docs/aws/getting-started/auth-token.mdx +++ b/src/content/docs/aws/getting-started/auth-token.mdx @@ -3,7 +3,7 @@ title: Auth Token description: Configure and manage LocalStack Auth Tokens for local development and CI/CD environments. template: doc sidebar: - order: 6 + order: 3 --- import { Code, Tabs, TabItem } from '@astrojs/starlight/components'; diff --git a/src/content/docs/aws/getting-started/ci-cd.mdx b/src/content/docs/aws/getting-started/ci-cd.mdx index fb7ac2f10..6c2671b0f 100644 --- a/src/content/docs/aws/getting-started/ci-cd.mdx +++ b/src/content/docs/aws/getting-started/ci-cd.mdx @@ -1,9 +1,9 @@ --- title: CI/CD Integration -description: implementation guides for LocalStack in automated pipelines, including GitHub Actions, Docker Compose, and state management. +description: Implementation guides for LocalStack in automated pipelines, including GitHub Actions, Docker Compose, and state management. template: doc sidebar: - order: 4 + order: 5 --- import { Tabs, TabItem } from '@astrojs/starlight/components'; @@ -68,11 +68,10 @@ Select the integration method compatible with your CI runner architecture. awslocal s3 mb s3://integration-test-bucket pytest tests/integration/ ``` - - The `setup-localstack` action pulls the image, starts the container, and waits for LocalStack to be ready. - + + Define LocalStack as a service in your `docker-compose.yml` for containerized environments: diff --git a/src/content/docs/aws/getting-started/installation.mdx b/src/content/docs/aws/getting-started/installation.mdx index eed8fd769..92a28ee2c 100644 --- a/src/content/docs/aws/getting-started/installation.mdx +++ b/src/content/docs/aws/getting-started/installation.mdx @@ -3,7 +3,7 @@ title: Installation description: Installation guides for LocalStack CLIs, container engines, and orchestration tools. template: doc sidebar: - order: 2 + order: 3 --- import { Code, LinkButton, Tabs, TabItem } from '@astrojs/starlight/components'; diff --git a/src/content/docs/aws/getting-started/local-development.mdx b/src/content/docs/aws/getting-started/local-development.mdx index da3a4f2b6..b270d80f9 100644 --- a/src/content/docs/aws/getting-started/local-development.mdx +++ b/src/content/docs/aws/getting-started/local-development.mdx @@ -3,7 +3,7 @@ title: Local Development description: Deploy a serverless application locally using Lambda and DynamoDB on LocalStack. template: doc sidebar: - order: 3 + order: 4 --- import { Tabs, TabItem, Steps } from '@astrojs/starlight/components'; @@ -24,6 +24,7 @@ Select your preferred deployment method to begin: **AWS CLI** or **Terraform**. - [Docker](https://docs.docker.com/get-docker/) engine installed and active. - A [LocalStack account](https://app.localstack.cloud/sign-up). +- [Auth Token](/aws/getting-started/auth-token/) ## Step 1: Install and Start LocalStack From a0dee9b9c806d5c467674283ccf96eb7f6a6764b Mon Sep 17 00:00:00 2001 From: HarshCasper Date: Wed, 3 Jun 2026 16:31:43 +0530 Subject: [PATCH 25/37] Update local development getting started guide --- .../aws/localstack-resource-browser.png | Bin 0 -> 377326 bytes .../aws/getting-started/local-development.mdx | 93 +++++++++--------- 2 files changed, 47 insertions(+), 46 deletions(-) create mode 100644 public/images/aws/localstack-resource-browser.png diff --git a/public/images/aws/localstack-resource-browser.png b/public/images/aws/localstack-resource-browser.png new file mode 100644 index 0000000000000000000000000000000000000000..a228b2b7ea926427be47e9dc539131a66e28081f GIT binary patch literal 377326 zcmb5V1yq#L*DkII0s;b}gfvJ9NJ_VgNP~cYba#%-kVAtsNOyxE(h`!=ozk5n9YYMv zF#KQq)%X3sd+)k;F>BV$@V@8WXP>j5{p>iQs>-qi51u}_bLS3$+`BjL@7%#zxN`@~ z1m`~R%Y-q=;?5nSJ92NNHQes*W#Bd?bWrwW3F_9ylZxt8$)0EIy<$Kb)CPXp^X%g^ zi)0ODsEW%tsMdN2R#`tahrFl6Z>9dy`m`=$f+PDKu14GuyQFT@YU4iy7t zt1U+oi0_@<{onlgeL1*ywO@WgyL0b<_gAot{kz-7^vq9W?;e5T%^NAq|Mto@z+qJ< zCc67SUVh^&*-yiKaXtetDeFfu?Ml|Q-)xvL80h}KRCO`rS^o9qA3y!`A6J+fum9U< zy7+2jLV%mYioQSip3fHj|8O5L zN%<^a8*My{_w~hCFPVt{#|*!!VD#($cV+zJ>Di~aUxWY3I)j<-q&~BsHy-+LF@13! z&_bd9JO8>8V zro$*uk>Y>+Kc+?G_k|g_x5E8Q_Wwf2|1#p=;rxEm-#&P?RPR5#B>NA}V20>48jW;J zlkom|jYb{{nD;+U6LYUpq~Oio-@bQ>b%p7jH!AYdJlAfbP^o$uiX19LUD+O=PChzR zufei^H9z{cMlkA0q70N> zIZr)PwsO0%t|N-kz&@GKhC`&Ivwk|zMoxG09}q_J2X`uZXAfUV(T}Jlw8op0{9UcD zxObl~{0>Z9`-gS?X1Tlh0x%40Ol|xu5m%e!iT4UG%)?*QCcmiaWvFe#zzYl$H1B)$ zO|~j7a9s>2emm3hTKU)$i@_~7vpOSBH@}CW^vfw2@+}LUeC0E=Lq3)b8$;@t8g1`d?W2; zCOlyn@!Di;a8>XH)N8FfCuG>bm?qX6E(TAC-UyR=PGYpj9ZaqeQS3GOWEPm)M#|rT zcH(?bhQ;r0;cXFY5pKmU!01B%p~Qw;B+(;D5c`*v`MqMyKGBf&r9DC=!|-<5a-YA$ zEMbzO&E*;^Dv8t^zyYkE?=hcEieBG?^gH$nl(28fr%G3>-u#B{@5%s2;!I)$HOe$< z>D5w-QKH#MC>MKH2gMmJta)LdUjB#<5SIP#m5+t}BEm+FTjJJN6m_LyRzFIQ?@LRe`LpK;d_gKA+jR;C5a^;tO}+-U1n4cmGR&cgAV{ z*UVLYjMG(2<=i-2D zozS(Reu=evy{F;-@Z#2`WxL&4klQ@x1yj_50)F*F|;wHPfKp}+E) z5MaaxDVj~wrR0**-Gpw+78g%s*lT)G_!WaXj1?=NX9+pdfPFz8rqI^!=(B zo$B~7{X3W%n8d8_Fa}u$*$26>bflih|8=Qt`A&Jt|MHwNGEzZL{Pu7MGsWjg4cu0b zcIWpBLp#CbijRnh5Q*A6<>j({p#;Hyf2r{71Xw6vc&+fjhVRB z(8-Q0pdfXF7n$XA@(%h$I2e)BKUYe{0K~A7rNeO%l$|WYl>Y|FI1KPjVHf4fi` z3R1-XK$WntJ9wjb92HV(2|7V9Brr~Su0GZ>Sr)|!gSO1r-)@IT+_6`lx74+}qVwj_ z75=NCOw51iN1Qh%;d{FOyYg3NinlWIDaSA~0KYM7F9GW!OxH$kT58VzfTFkmL)5Lt zKKrWpx(8i$UBv1CRZ6xKPJC&*(kk5tx&J_1b_EU!dDvRJ;*UrAAx9(i3!@ZmUb(q$ zrCx7uExx>=B&N&Qd2cq?lnOz-tv<1;1VaoL#;tA7_RHR{s!GT^?UMPcuowKd;!za< z_Wn-Am#14>ftInF$c&D?dM50zMpB5442+?D9JMB)Qr0A@`){&|Zf%Z8SH}F&zd4eh z*drqtPLyq*De0pZ7;kSy2{&ViwUEujsY|uTUvFSJ`HEXPl^cht>M6j)AR;V^^=@a8F@M~ zdllMSOOlzx(y$}`3IQx7&vQ0im=rTLe5YA@xBkxUe(C8=$iVpx_@($cx9|K9m;g%1 zDg|7cCR}poTOq?Ob(NAM0{FY!%RDyvTlXy^FV#i*Z>9W~53Jr8B{~1G{afnqixW@h zm#bD!A$qOQcu~ai8Z<{X9i#sw!IA*SpW4{Rdo!kBBy{VMa?h)Pl1oq zUU4PuEo(|8PM3dms!xR-hFA92io8~N|FuoSbi zA3F$1JTRxoBJ1ZTE2}7v)JAe3O{zuruYP#E#fJtG_o#$W>-2VJvRAJgAV2QDfV@k- zkbIiPK8E$YsO0KBBn!(Kuj!stVESD)?FddrOj59e16@b zNp9`rRHzWmx2E=>Tff9Rq2&+dmGv(vE$RQ5>c1oo`{MiHf2DaMR`Q^1b60=b{yE@;z#8?g_f74g)?2Wq=HD$r7me9MEhv#|HMKg*xIf_7 zqLj8CgQTe#W^o;vNgr*t{HSy6`@HqqflwTsewWg{6(t5O6}@t^p`vGMrA;Afh>Jy=iGioeT(=c1NT>(_9c?Xgl~6$D&gET)i-` z@%N-!ZU5U_A*z_NPZ?r(?q*IDDreZlF)LL8A+=??GVwo`KU)t+F`4^Ul-NmcAce4t z+55?cXbI$A_4%ZhA;ra1K90;r&hjsr-`Z>?x3-WRD(y$iiW8KE;Cu;e3BiS-`%I~+ zCk(DiS>FH31q_j;EmF{kZWcwtRzvzYF(mx9ebCkuMJg)f)b}e@jRJ3k+*+U;1*^D@` zJ@2zLoar=Vo*zu%n_!6u+K^XPEKN6mdk5Qf>PFLu zmwH|tfKSI{bq|-C_Y0B?*sjRFo?%SMvrI#ly{DChH{;_Ab?Y3!V=`p3)Q|;Z70K%w z@AFy90(IxfXD{w<9ewg%8{`|Q8Q^MNxVkuWEN?zfjaQj?uOX%X2m#0%+0_mo7UlAi zFg*~tKAqT~F^%TG+WSn*Xg5`=CYQJurTl--%5upz|zsD4856T zSe5wvE`zETCd!gv>p&6yeLopI(l~gJy!+t@Z_1Wu2Z3PVNPm7;OlFl?YNlHme!h~q zhXzWy5wRA&zm?`#Tesx#%^>0J4Pu>8bhos6Z^`qJz-PYo`g~p^=PQ0|KnOmCiDkO; zTZCBKp)ol;Eg9Vt@~Vl8qeQ;A;_RK2&aDfSx_tB%5|rlY^YFx}o6D9H9$RXL z0o)dS{9Zi4I0@(R14HjKO-cbf?XOnO^Y(QV)?b+ViZpPJV&9gaeQDvM>t~UIOBHwT z-JdBg%CzaK$5CgqFYrkAMjiL8Hb2}9poJpnt^K}8Ac6JP$&&Ei10Yl-G{SQOG$L*} zToGs7|5?XlN>f6Iv^xI_JpDimN5*tne-I3fhtXo?wutt=!p9Wh;v zJe}ct;cVaYa-=NcNfIGA)9{x0!xGN>n*%cRVDmb~6FlyNp?RYI_k;XTsB5|3Y-(Ea74 zehe(C~11yWgQT zRaJGi)5D~?c09M?k6lp)xQZ!Buc~y%&?=$eu!^0;dm_PpHHfS>@rCY302I@;++>Qk zO1_oJU!L8pM@u?*QGAx(=1`0Yk!(6*CbUG6HM#dHGgQ+_`53RJcKLI3vRa1{B@5W6 zR%-iU7=~)dO|mjzNTLyWi*D{zxO->z4-o$68P#H{?%tmTajIq_gw zwkdG`S@PD!TjnqgR)gOmuP85GfK7~-N_GY2jRFWtHNSl@u2o7C_(2Vxp|2t9poL-+ z(n^R`;hFwi{#CONpn1j#q@vr0r>3_59}XT!M6zi~?J(5YoET}Peo|8%Ue*43>))`w zpsrRG>$2KEKRKraKs|W%H7)^T*LW0j8`?j>NHPFr3?=h8UPQ6w%J^#!W}xOBaa$*~ zbSJO$ovjnLQYFY(){u!eTZ5H&oDB=iDw$u73;^5xJ`x0*QBaXEx#v(nHM|3@vag#Y z4L#CG)a#RD(uHom_BG9)8T-|&hv(lW0^TF%+&k)`z>A<7ssclFrXy3_?SjZL)n$9=I6p*lzSE(l~#7@OXY^Gs+Zj|SEmyy zk@~6Wy3;32PBX?Kv-@?+ncSxoQRc@9e`e0MVr6Nb8@@Bw06kW`MmsIKP6x^2m;RXg zi2Fbc&!tt-t(O7A^^LE-{mf>Ec}P2#>`Km?evCO_5Qllk)@D3`s3fCfu~m8nIg*uz z^vmZ4a-^o~P!~XDk0t!PBDQa?4}B&-P?^JR7$+HCp;FS8Em^X>s=fmNjB9=Cvf0a< zc)w+2k+j>Z~u}eLZgkPFI&P z>@8RafVO}0xLnK~rPcdP6yS8{uH$GQ7pUHB?EQjN2@;w}DsdU|;Jn3g^70SAwzCBqU zb1f7X`V4a)zkjHc4I!xXzOYF;8tDAOE}XJaAXK2RGA2vQ-;xXB7rXkCXAk%|g}sMW ze{#d;EYj>P$PC?B3hxA*Jx>+8I(%zre*rW?0D0y@EG*DF3vwQEz3G=pdEdvH=u*h$DS;x@F^hGo zV*{7AANe=i&)2Swc|C~X&AM)D&ASI)S?WT~%+#mt#w|U|hiVpP00ch=d@lk z?mdrAEcvGIu;g(ezUw@URXY#Go)u`^w?|UB#M`&5(}0~|>-#6W4i%DxO5tSu1;|*I z%qkKU(TTZ(hVuOyi0r&~Yrt#Ii|XNO&yeVf9jHdrdAIIVv8~{|3rxKI6E)$khFa93 zeQSs4tb3B411ltdus$)fya^rbDpBky1NEG1dE%~iL47ed9W0J;`eDBL?Hjai$svSx zd9rrK8Zr;dX0%6&i_8q~i_Y~~rkip_c<|@FZ$|Xng8%U7+f~;#&T}HE$or+2R(mq6 zk_^1{-)A`fk)$)bw~h!PHgBWlyPP)U>u(i^rEx>>h~{{z%sWJ%8>d*qzC#u#qJ%Fs zC_jxKUwv7dsz#-;&zCm7!0wBsWIKi2$ z#R7K-;`r_LVWeC9==Ew(){LC^NR>VNmi84=;EDbG@#kT1&*BBS&lyt z+VQMm_gmh*W)A*7T1+WAc67GD(?eyNK0-5+#p^lCT#8`C1|4^iQC8`#+#?i=`N|?{ zB6NdD5Z>z|Gkgh_%SOeo0>Q#duzn7-c#SbyjAumrLQgELGHn2GP}a%E>pd(%@B&e5 z9`1KxswOmExZ7HxdHh~=)m)XGk7^Ho?#_Kt;H03rdk*Om8-xo!NMrqCEL7IfRaCwb z5=uKJMPepVx2NIT>i9N_ilPwYj3O(8HeD=vj+E7}J;?LQ5OJ-FQx@r)A@JMpDKbasb|+~) z1aJM+{Gh|6rU_jh)p|seSx~sXpzze;W>~0zHp6W#w42Jgo5GU3(Q=jcMrpmMOIfIq zzd<;-VZ5Mx2haRU1Qf_uOe%oDm!|S%fUx|Go$$QLfbNrRPrs0v zS38C|ZZ|vwvSi)jg5{i%qu+OL;+qy%I9EO>dL8ZCa5}D_U)6aATp+j5T3=U?D)@)6 zCcM!x!=?W@c!+epAbya@L|>PK$(VJ)2ri>=Vh&7}D4 z6ux)i+nPLFV~OQWC-OqAe09b%KNu!K_VRu|jyBM*(8HsS6oQaNSFNuv`^50cGJSBq zvEh+cx_^Mc1vd{TilQsy0!L<(e(|Lbq>1T_dIJPB(mk;$MFn}bYgwFm<1IY1suj0P zn14*b!P`9D-kXqSd539_5kheU2j--NpjLVj;GSVPCzxZ>EB z;A6BI#bLyz$(J$F!pXE0^Lx)aKnAE3I~3wLwBgC@Hh9ns_NG0<`C^|9PoFq>`_Ksd zT=_zDW;3M^VF@uM%VNJE+w#~G>p0=iQY+2B;a;Cj_QY+~H0rLF)jV`fC)(Og6$^-o z@+3ER*#d%d{6pJ-`veapON^Aapi&fWSu#%t(;QnU(21}*Ui$%YU)ZTzhmYDq!hjFzky8f-&7b6$ydQ3N^pVm3a6g2p=G2V_T(C(=##a8PSuGq;b!`~ zx5D6~_0?eXy}dw(qWSPVgX%1wGL&&&OahqakdVzj1fTcxpcazPETG`I3||y~3~v<)EeK8E__c!vIV8 zbiFoEzSou)UG4WecvjX_@(19TS=JO&#kvfxm(##=!enz@T6*fl0_?v>uPoi zwzIo81X-#sRxe`OP|lL*c-t!2UDmn@-u+}Eh;%nGHUg=@g9}DfvdrxV1kYg8 zLhbl&O3Y3HS~|yy8a}o9MNi z_TTIw9K_kLI`g2ao#@wzdW`KR594iqrh5cOQr>t2erpCOn%E{8xRt%osjMdpHzQ02+p};WSO@IzGU8(;4UV$mMV#T+WFZ9kxJD$10P99xHxJ|#L zAmfAn+~DfGcdL7PYW)brdNhgGr3=x`dx3A? zYd_|DG|`=98D2}Z9IU&GTvc>60W=_k1)Cm6+jO1m(8WD-T@#L?uXbBr0Yua}yvaA?pLTv1=g=PW6d&X?MKBFg?5quRDbbn{CqShy z$+1tBy2o#$dRFA5)(Qd3}^~Z;r%bAGAY}`($h!)%8Kn;e}<(7Y1w~@T@M9Jl-Pe1xt(puJG`eoqwPx_17>{Q-6TouSw z&P<_2QNDOI5(@UeaJFlH%+ymWd zIvf-@md*~BB{c*HNVbj$FCL#jf-TJ+lN)+$Gp*M>JX?|IZs$VB^J$(BHi}Ummky(b zn%-TeOsgdqj&v|&PMvw4z%mE*`az^4R=q|N1&SO;xfRqZhYPb&L8(i&&neBj>v`+h zq2%#Y>9o^!nUV`AKRx_(<5z~OnQug6WsB2xc3{!7a}nG1s3C!Qj@2%&OeZ(egA3F- z*Z^<_4b@xMKi9(8-=3^MR6Fz9e|eV+j3_;k`*uxxm=w|B#&E?P))QgBbw{wAyH+-u z#$K#0PpBK7uFyCx&rUHCed;<0cp55+-A1Rf2D-JzCSs=Tq1DDL+fpaP30b;g#O`@v&eL1KK@Mf=#S}s zczKJn!Siw|%ZZC_-TlJ(!-&9XO`qa{bLm)}t47k{Wzy~q*PH#DuUASe?Yi^NH2->+{JMZveF}lvH zXT(xJTuy*X0(H`D=yqv5lVk|J?7f~bJeqatAYhbL9t+Mtjy&uk=A^W%@T0YB+FJ>i zGw3F28=yNmjfP0y=YrspUN`LePtC6oss$;p~8Zlg6!am~5 z5f49^=~_ou>{ShjSh_i`V?E?LB*}b|cs8Y5zINDj)07XPI?73J%5IPHyQgJ|>Iwkb zy{Pr|w2KYWv^YGfDMP=}4kA*MyB=m`;6)qGHuxtcB)gGA$-zC&#!cz#1@z$r2rOwM zfHK$GR}Tr)mQJ?-ks5!z$LDo?Q#|+K{W2;7f1g4wE&ZQ6WkAl|$4qyde@eRpyzC8` z2lBQWwRbe(myeM3!P<;7bq9kgwPyz zW)1Zmce1nJL5I0$r%SeUPZ-mW+j5y4@cZwfXH1;2nBovk z83dLmeL;SV@~@Oh;h%`|wG_?uD*tS+fzIZG^rh=%5pdz_aOhh-{4)z!7BS=76-Dx` z2T>1QXrPi^gk9ui!xg>zdwSOhulK%nLxh^4|atq4qTcc`vIP5nfXBCbJLX(@qWTL0`jH~ zXsd<#O8d$#(y5=WyPawuIQA-?U>Dy~x8ep`){|QG_Kr+rCnq7*VL`6lc=nqpRTEPK zmxIUCfn*odYrI=(N3Rp{%vPTSiTQ9sjL`{QRtu*TV4d~@{P1hB8xcrL*K>-+dqJ2u(%j=4stYeZW(H8)kZV1JbP=vEe@k&p_H;Qz{Zf{I`s9jn-ncZ6 z6S@c&uJ(fPMkr=xhp@1C_gZpB#v#Y+uSpE830u8V5lEc)2o$Qy-Qi@@%oIj}+hr;! zi79P_I*0cN>Zt|Gjs-UT8EIL2eNT5s+lGGmP$L?X zvIB_vxYkn@ab%PC`K4B<8{Uf=-wgMizH`L&>%Gd=3+)m0pKnM@XDBwuSY(;kT7gs- zF;i3*slAn;0jQz*81>F`J2b?81_Pj(=8d8IVlaiHL4{gefj*YaEs zDtblY;pP+kaF6ziWJ#=6=uqZcg6n8=#~v&+p=WS(_{ejwrSUbCEZsGA3=AX~+)j5T z+k{D`(+vWS$qr#fV!{3}!6+uM%1ZJ%QoYMCjkeszXAnMZZ_nB$fXcWkz-juXzcss~sTr&2hkP8#Gj;k@^?!{^d zEitncB{rEOcYuoHZaD8_P5Ce?vwgUSfK=yUTT<64~bR@!a9m@y^HLvf^6%XokL@LezF_-yw! zE$?9PSp*x;Mq=5m!R>P0#}CHk=1irm$ z2BL_UBfG*a;+TwbRv23n{{b84i))AR{C-#q&;T$WL}rjIRES%^N0vl3%`qqh0XhQk z-H+`jxLQ#sqd@$40a2@NIZ0n@CEwV5!DSRJvcoD0l<~g?aM z2NOz3w+B_Sl4_xyj2oH?(;T8H;mKnA}SCjHtGCqAd##a&o(HORwK$t0q zmERU>ZK+3@gi(SYtf7Ob;#FrXXgpnmk*mfb)E0KthwOC~cYgUl-PYOjy}RG-ps~QB zy}^v%@hWH;-6`7_%^e|msQ&hbMxnl3s-rnrU;d~EaX~rPcaximTmrI`ROfP6%suk4 z_v37adtF6udx{fx&`Rh{n?DMydJR{3r=8WOeJoj2Q9hXsR8bS^b4`wSvR2_ zQTE-m+kqea zIh36nS!E-FzOES_2KC*=rZS=u4E4{2!!Fze4qa`K_-iN8hVD~^-;Fvr!<-8^7sM`3 z236)yN;f278jzQ!Vy!t67F$IAuJ>6O5@lZNzMkld?1}q(0L0~Wwp0GguZOvN zvsR1oGDbzI@pmcQ3Kh~g%kke>JPryO{dTqZIMlQA7jnMKGRv6Kz5?3i4^f}DFRB$l zOi|i5Y$nQeuGeQF--@L>!HqnCdIPRtV)(G|M3l%Wo$ilKw%R#1c3l|b!)lPqp|Wbb z*ww}aF0!#QuViljXZ3#lqChCtpM(#3zlL|zF00Z54}B2CNu`Q6P%Yh}4#LVGQ+DR; z2capt2euk)bKhnJS;I6YRK ze6M?k>Im_l^y;0SdmcEDWqNzeoDbAkId~qn*v>?wTCT_0Z>l9N2c6_fn%a5EK)MMj zzv+%Tq9sFF*<(+;Z8`b62iVxl&34PHYcpKhE2nlB_;5?cxn;SRn=aQTz?z46_Qh`_ z-*?06IqN8isa7d5`O^rYW#sVZK}AO!+NB*)!eh*+Q_!<`WJh2YG!)S+S-8V^H_KxS zYu8(I`CY1BUntH{UI3Qgr!{xKM}z|qlpAz&?>qr}WrclWMcEuB#DRJ8Wx5M)_{cf> zW-XjcFQ)P+JPYm=jxl_F)IrFy1#Kzal!;Z(Us-Yk3V$JnUm6fpN^5(?Ww#jwCQ)hs&`nu_*lbj5FZp3CfQ{6wf-3z=|HMwTLs7Apz-*V6UbrkO3h&>fMrjc zsw2wySA>03rRiE2FWRKUkaO)zQfu#K&lwpcRJT8v+GOV8oTK{Az`$5hrbqv<1k%ow z(z>OjTaxm%j~RV`3J@}J(nonJ%-7nJIK(X;GfpxJEp{te0;Zd z8S1&t#2s9s$LF@?khb);SI-~tunLSC zqRx-kEo@lC4L1*eOdA9XBUS^klom2KdNKAnG@?G?MoOQx=_`5eJ9IQnR%hVNn zGnILlAVCn{NHM2ettow)=Xdtku3B5EUSdAk9A2Z+*c2n9$vgdOJFA!E6MJuKfpupd zJ)V!dkQ=^NK<1;!3qAs^Hq@UqwJYZjJ1u8R=FDtKl2!7NJ_z6((GwFC*7?ya0q}s; zp8*OZ>Ah3|X~#p=FXTPyd45N--!JesoIPy5Sn3cpCT|@61?L&@8_wuUK%l_%-)U*P zgb*hS{d}5wIg8P{x}vmv&Y1LY(N^~P8tXWsgdxuiJ;?wkTBD_h{_Z1ldr_1=gk2%} zH3{GDj7U|uI@GZjgUIIiGhFaTA{QLT6Oy>sIy)x%!h6`=>)3#VL1xa#0zg5kUM zo+unXi{Z|Xw$+#2luQNY((@PThyk;8JQ0}SNyFE*UoD<>)lamvm#|pMSgH7}t2ElL z0k=HcNb8mC#8q|Fjw_mY{6q{zdl&KjNB7S8QN=G@_~>XOLqA7nF*|&Xy_`Z)PY=3V zy4Vk%YjIiay38y6u_&M`Qsm6>yPB&h-l_HIggq4NtytZx3*Rkw%*Ni&=U@_LG}&)`+x9 z(`^B(<}&-rzHYg`6ooHh6K+S0Y)UcS7uST~`RsmbSJiwoPB}8k3`wq^0d(&$)ekZk zm22i5>bp5x5n}VE(;1J9wcX^#E(&#lkm-R?jefgni#e=zesCztPb<{drM&$EP^=* zG|qKG(EZ@_9^{{F>3|3cd0GZXgE=@;AzzCLCZ0d~FdBiuu>j0u3zEfZ}TC>dg@J9249JQ6}^UyF8E28QNjU> z40>7l-`|DMN825E_I^(Lbp4#Bd|_cwuI6qJtM&L-F0so~W6?yQjKDh%9&r1AUfCP{`8S5f0yZuDh7j=}8VdtyE$!P2v-$05c% zk6J(7$J%$(PQQC$L55v8JD4}SV5?72(&)m~cLv9%mDVU~($H^^e=cTdntJixwzM)> z7z^X%IEz9R!+Att!G{N`3-jj@b*u{b%*Ps9buawJ?v;;}dmv0Z$&xcOExmNk;QDy7 z%6vfe?nu%TOuw9%o@(Om8*y?>ze^BLD_?pQZQ}^{c}A(?l4yNBI-votD``DSbl6H% z5??f8mOq)g4zV9#$T{eTO+$W}-I26ir>nHQyKzMkxJ&_^t$_b}sAWk`3xr!xDj%3S znSqtofkLudgX&l3!w3{N3I~2&!FVq~|8IYMf2>q9>%zwC*@D8zI=L{@QX4i#8Xqq^ zSmKc2V((Kf&0@N>o@LXdKkYk+!&VhcWO%NdL+$a~TB(4I!jE>9K+0m?vC6OR9B)X; zn@iBZAm;w&{q~GiKN9m)=k?ZV!DaVppv{HAb9eC~^eK-OhOC&&iZ-;tobf%vS=@D} ziOdr-0$JvwMZD0sPqi3|C5ca{Bx+yxVk(dV#~`gMYDiIas1mp zey_FZJd$yKWkmh4yJx2vsa(9P6uWlarIi@Uu4MP)vhbN4Z<=G3+Kh^xk1;k8S@CVD zw3hIC@yxsIx8wPqPefkQ(zTJ|%nijo5@_llqCl>u)6Ad7R4kk;!RK2@B-j z57~N3h0f~xQF3uC^Lw+^B+pglb!{UjNgS44wq;;4S5kVbz0te#ApW{b-s(z~WODnu z+WEK9*r2Lwvf$xzfoTJ+b0x3Xs@oJ0b_cTHU%7yB=bqnhBlNxdWX`YPDsw~A2F7HW zixa^M&~R4?l+>j${; z!0wyYpyS>{@N)J%JLyK+Pu86GODj1SEDH@^;)s$d6+S*k^(vF~5;nVOx2*TT*)0VP z?XJ!sc#syug@Ybr`Z?Nf3vuqNhvSI--NWuzRBJ!onl|8uW=Cry%`x!u7W|8<{=Tn$ z3FWE&Mwx3wBm4*C56kLfWttH`aXkxzlg6NWV5gIT!#&{Sr^1`?=?+81O)LuHYnMu? z#yOjBtM+!H%I@yQFoTHpCk5%;uPCl@{o4?{iCj!vz(Iv|Z5q;8Z%i+l-lQ5d+@ChH zID@CHjGii`EehkdzlJeNh(XMSPMzX1s%QE)XEabce=3WpFj}f}H1q_@elJ=^H`aDU zqVM2E0KF9Y;|F|!7NWyCM@NP&d5Y8Dw91dZa@C6Zz%n4?Y`vXiwbzVvtZ97CH*O+i zT+3QMYEQ5T6~$Dx*ujCnoc45x2Gi22H>pNgNCd<1hqG(i#)Lf&gb%F@p+)cletAJ< zVy28ix@4^oxBBIW9K5-{6wv|mj*{asf@tz~R2LN_%jrV)vB<1&NIf}(7JPi9P!PXO z>)xL344g)o31!K&;uv-ME%#G6Phu`qB)(djCrRefmMb{;h%9L3Ra!-|-10Ad-Pf&o zhR!dEdKPoC`-t5l)H4-q*ryBf(uaqC2#hG^vuky5K0(9rM`|U)fga%BZp@#c=wXUs zF6h}h(s-dRos#J=m2>XIGXNr{9DFl)h;nh45q`lrGLprenbjcD5oNZ3bS4q7o8boa z$mP@z5Eo`uS67DgGsdFD@-j*5J4o415amPcNd2;3Ptus>|i+`v4(4`qWD7 z-F44rntl0Tt^Q?xIbMe>zZhQ6lXVnYeI8b5H*grum09_|Z~a1eq>>yOaOFIs^cw>A zd@LB|t;Zuxr0w;vM^c>x(@*U_^d1};Pp!Mw8qgC#VS1a$Ut6>)teWUj=wZ-0bagqy z|5B2EjJ)g3ZlEIh@S@qxjsB-v{IAY|ZoWLExD+`U1=JsE$d^^Xe{;ox7=0h9T&1!_ z%#)^sRfGG2B2sguQo2;C7pevj!=Ibos|$gHhzW>U{jKTe>g__yJ)|0G0{SASDrc4* zXVZM(1ZQTPTrLALQK779>imz}=O2;?oW}D)U4kII6DB3^ zROe-_gLiL)*TUow!X%cwOX@G>ceoUa4!Bq|>Y?qf8T@&oRIyqTNCod2LV1gehd!g{ zB1fw8W=MUzk*JW5u(G1y>nt9rjENL?J@(gW7QZItQh3(O^J!Uh9e!5gl}++5MW+f_ zfBEpRXKd_z_@&LuL$~-E+%4<~N?OgZ@aT@qv33PbkS;krw$DsP7g@C;e5-}82n>Ga zadFLqn*z&R>QG&icl$lsJ}fV4SN(&!#t>UKTY6KxEmZi__u4LU@*_~dI*X1$&a0O_ zxW|rm+A!#1I%$<#@1EMOc+CJcl|*u^0*AK(+dOK1pJMB`tWPtBdGv|2yi;Gq`()r% zK?Hk1sS@4V8WX{Q!xbO9>qEWOL$9Q_jVW2TS>tmC-%?OD_)H?`;8l>|Mt)Ghet_FF z(-E~=a8HXgvEBsdBHH{{xyZWD_noz?O$hjgsnC#R9AOS)7mDZAzf{GrnJA2GC?ER& zIQt5)s+z8C2^FM6x}>C2N*V;DK|mU$MY=&sL=Z`7kXGsL?mmxuXK z-tWH-m)8c*-g{=v%vx*KtaaZVbR1YBdBLl znwFB;BcXG%*dMtUz2H!}8(4_qW^uy`qw=&(?Lg`VSJ@eT4PtXkI}b1NHrs^m#DmZP zF*Ka=<#Ktx?FX|4$c9f&ne}W={BbK1-qah0q}y%V+UzgoRPcE!a)4TDzPioc>n6H7 z4vuQ?JH8_O3xRMds#D3%Z8e3e?GPltuGGzzv-okV*Up5M+*)TW#~2a?UpE8$;$5#D zsBhrDvU5Xnc*=djjg6zWb+C!$@w|z}EwV>M(XE&4OxtPFh-kM1w|{#w%yv>P6C!?O z7=~zVHJAMy=aYh;4Wy#wMnmT)lR}saR++OUmrMzFTtCeg54hy$K;^OjE1#JNPa8M{a|q z=tlkDW1L473iKun3fh|`z2BU4T~U@C~HOMypb@ zvA^*ydP$m}<+DkK5aw8aWI9`8@R3?BaV?;b3RkzLUmI@xgFHVm-Mb0?HJG^jr90B! z2>db>2aRRp25AIB(`Al&K>Ctk4&t0(Hx=KK=DT~QeAAqpm?j>F!YAWYOG!pO?-==+ zUmiG}Ith+^O=%YO37`lO?DRP1sgm}^EtSjJK8?F)8P7RA|6E?G<*b$W24Y_;u4bTg zkgWDzbd`A$bKQBHM^caV5C6eE#W@i=-ra(MD-xMxDTxvKVr@=W;M3xaLA z(lcvH5k{hIo5$moxj5?SGHkSum+X1pq{?W)$uFjZlz?{+3wNZt2$?ZPh&#FJ<&O9< zZgyo~xHcnPfNX`ioKWBna84S2cu3&M^$r|4&|vyfOrkaP=-Yb4EAXJ&QoTN1Z7SFm zt#W&GmH}dE_C~Z47Zpv&%&Xb64M^A*3+|_8vi(J$hAV6ga#Cg_YV$ip)J_A$%USTK zV=i8cHLrA^W|USPN(n}U;695OLfmam&~+Gg=8qZ3&W7{nuhRl$O!uu`)2kJ~kU#P( zK3>TtWTpsxLns=nZrvI@BSt-J%fi66OO7+gtW{CPzO-u_o8WU=wykSjRS~PD$3MSO z-Lr1l*rkL`aro}-q(XrS`CVKawZj}aR4J~t7Y#UbYjn3So^L{H;&%H4r`bYPv~^nX zdILO6xbOQUkZbWP(0x@SUizNzq1#l?ITxQ#U3pPBhwj3Dw_i8(bxH{TRs-Bj?*pJN zn5_%dW}8mwAHKxq9);J~Hday}soduBz{Wu;P-zW$<$_vI++Rxk`Rw}# z-B0aXPHjm`iXUwb5SkPrA3akTUd0(0R+Lv?r@$FJqsRuy0a9GuMj%X=Q^+gs*6Y06 z!xePh#Pd$}+p*4}4}*COezx^?)GBArQOOo+Pwi%imW4EydiNl^=m)`@i<{r1Nhb_K z_>q0!B3#vo_9HRbA_+s%>#**IRmQRM>ovW42#Y-jjsMkcQ&{WHIZIA6Tc)qic~k%m z!PWO(%S_)5zfNCQ)^MJe=|JC6iVvJsHBFMgYZ34j*$%Y%4wA2iD`>V3u#S+6iIKow z?2Jvt=wMT~McN5%cRbd4+y1bV602i4hWakHLdDKW*!1#pU77UNRZc0+w}Pha$%%%0*s4~V3ts{3o`jH zu{mzc9QAbWKd@irO?m zkJhEtISP97W_TT%%q}yLR1s5AKLIM$ODU5L#blF(-6K4jM^HHp(mi9916LdyC8fT) ze3T;WqtLm*?2?J5KsaNKKI-tIeX;DlB&dVOfzVVOFp`MP=iHP6#f9iDG!n+VtY83uCj zqy0wn&vd@;`JI4rm;|SZUL0Mw&kwnS3zOW8ZxT5K)^aV1#_#J#z1fcj^~&jt67iA& zi@P}e4?o>2gX`BVHlER@P>McFWg5FF_9oml(P$t|HMp>JSgZMYlGEdn&E<<2aB3bC zrNmT`c6;NxLK_lO?wO^MH1lLjxH0E${<}V03>aFX%6H?B{Nz^m_si!7d^v)Kj{5M~ z``db`zviVJh#jN*Ypw-ib8Yk8K*h(|cyGUWy>?a@zcM;#ePq`=oo2u`HIkg|U8(|; zJw{Ye59>gBA4{1D6`!i@TNPYiiuZ^5U1xsHK{MH-%12mHeTSJK2U@VMVkfeWoAYHf z(X#W_P!4I?qa1lG9I)S(U`_e>;tsN?8u|m>ERK9UE=xkES@Y`kvNlEjA$%Q5jCxLA z+ls0WIgP!T8y(2=m^w<8HYBe}o;^Kl*e|rN4)AR(>CqIqT=O~j&a-XUC;KvNIzK2es+**)Ko0P zxW+A7UA4mgJ*|7Xaq!5dXNX$@r`^1u8r5HZjif1*(L+$b+GWfSOu;Zpi1A@N3M8~H zsb0(z{lST97LVZMhCp4n%vvB4Zb-h0`d6EcmAuM%Ep444pLSfdiQ4y7_S@F=#9uLV zUpQ=^efPd|K#AKnR4%vA1e3Sp>biyc6#?w7 zad6gdxyQIjwwRG>uvvo{YW75NIuj;GO*v8BKnI^EoA)tyIiy{B z$v9;qy2nnvs$zd#{%ph@&dA8o@2hi^w&N(3B7;W=IIHeLbV|cXx?}2gV>I~s23ALl zwUypfd!lsn$ic$U;!(3avulJFkL5t?6WDZ?i0S3MIYmw6 zE___?Jz$KEL{@J;wK_P&{xD~RYH5CwzHPOOR`O>oK!ss4k~_wJX6F*i$d*EZ`4(5M z!7VP*G=&Nt{i9mONjVM`4ouUBgdtc!OZYmUj#X&p5osfw@s#cQG4Ga7r@y-(5A(Ue z=~VE>xm4v zkEUiQw8HM!=V7igV|ivylv3-&NEQw^L5BBYpLLRW<{{;+b00Nl>}?_||LE zRt7!M74cvOi@=#_83i$C;SA*rKpo z)ZA37sHn*FJjK}FiOhPerFYa}^GYf0l%z8H5Yh95@%iS{D*NyjR@Ta}xg}LxM~{w_ zhu-f|ZnVD3+UapR&Dvp#E=Z-vkvYY+a?@^)w#;0)0D0Y`p!x(;_~X8AHx(=$!}$ga zG_CGJnofsX<-zvFYdbnA%HD8`tpQqrxugKxPKKNl2raa1uWM@Spq@__UfEzKz)EMZ z`l$*nOR6Rd1>=!j>*0E1@AX5y34OW%Q**Q+Qs#2*N4H#g@ai5o?!UULi*(=VbcGq2 zp=w0GjR|d=yEj1!#*4*~aMoYAle#Xq!t7=fJIA@Sb#$7|Tw5=JjuJnivWlu>%2ze= zZfJQgca-1KcTmqi-OF>JHD~mcre-!oGbg_wYTvUh#M2(VexLh311ibsu!c6b<(LQsqGzEjEs7nGe z4&Ec;))qMt2~zhGJ?@q6Ai@4ceF29f6FafO&+>g|eNHCN(&ap~JUyJw*GT56!x4@=-p2incr)LWm9^xP5*^z>{DN+H^l=mu4r7_saMWjp|bgTl_YE2Lzw zbHTg1?0~-?@{zhh5z7OiPo-|W{N&*N=~-b2ujQjj?^9ReZN-wAmAEX(*LJ(_%10TS z-1j*^j@og+{KqMWVQrMu&&s~mCNbl4{-jJ`wVk?A@h%E-^?j6TwlkebT6#X+*P~mf z>psR~83BxuCsCmp_QBl?F0=#qijVYmS<|#OH)ud+6Hp)hyy_ga!&Ua@94eC?%}J|g zOUQz`o1~uSTXUT{lGmmjIMNg$^X^QQ#hOV-t%c(jwqvzVL z>!nzVW_!HOpT*4fdAUQ?IikP;gQug>#@v}~mf>OhQkNT__eV%I(W!Hizoe>a6UftB z00>xQunP~9b+9e31?eNJcDvGITW$#&AJtY4c6^i`FcDeM|L#M-rb!VSE3O056hbpT zOcNTgo1{%y=ntCZOU%A^!+_t#`KtPccA|!BvAIQ>UJwIq2wH`c07_a?mK_%>-#90^ zeXk@Px?eU;KikG?(p$r9UO1fo#?JL<=pvP&7nF%K8EBj~sA!hSaO=7)aJX)yDyF!c zFQ{TN9J1Cgq{WS>^H+_&9mx~0syWN+Nj#Gm5!cputVuPds}sDBSkJ&*d;D&*BuYm& zfc|NrrYz--TRWPd9Ky+)Rc26H*?x*%e07dR>b|4?-coI>e4KFs?PZpuV&`?$o!~fL ztD32@@#oUK#|7Tx!oySc+3uiP6Qf>+sEesuMr;!2;e&+JRV&klJyK`Yk7#bY>lF{G zvKY2mHO4E0_y`y);iF&0;*6KlVJP?*`P`=SEWljfFQ1+Xvm3~f#DYRhW^rV)>DVjw zt8C=$_Z)7nePf!$Ofw5%e?*0JR(H6vy0vnivq(F#y$_K}3?n}9DxY?p77Nm9Z`**& z&VS6KyC@|`Dar$hY5*bq7==Yx*y<+*#c%;V70c;0hZXZ-(t-KZ+s)Re{`m+2AnVnA zOCOPoSuvgg2ayK{@uFg;0(Pl=_(M(3ELGs{oD>fefB~>Be1{7;G%`?|a9ma|v3H!F zJ~Fa3YODiA*l#i-Ktj=Gsk6GS%R;0zudZhye`rQi6RZh{;*efPyg(XJW)^b^ZMRdR z)I;Q*2&K*Q2MKDmt+>y>)zfev2Hf52Ba1nh*yul&Vrp@42epd(AvjOs%sly?klwQ< z`;6&ZgB5&)qkBV#rqX6#*6q#;z+c$+4)RI#ljv@Qy~+HM6)4jc%t#a4dXLI6N8-^| zOK#tQ)(5I+I6{a0{gss0J$@eD-!1ELG3&ttDl_I*49ftDhC0Qt zvOoKlUFbLZZU>Mo>l1lm{h8>)7E8+6j^mBTUZZ8FjJWVfnOLcnF2RHFd`}S*8 z;%93fty;6E6|)kA`t6@M&+Xtm&YfElR!Fex&APYI?KbaLvk_I?aqU+IGH`WZEaT*Ey(0- zITstqf{e5<|AshxU9DqLNBSJkv)guacT@D0T~f#QBRC$mPWT=Ev@@b*vrI>&QT+hM z9CT07#huE|B?TVS?U1{TPoH zIb#vc|Gr0r$Jue}DRK8{SB#^L3oaJ??#kS07U2bxPTDZ=isonWDF~MShm!qS-=^zGowxY1lqD-!%EG zRK=q8Hl34B3`p-raotLx{LIiX!G7B4cOf@!6=$7a{axeB1TVEADAo85S+$~WO7Ka* zOmwx0s09UTDMyZ{hg(QiBwy2HLr4mDOvKc+?mM~b4bt~&h=%a%)ypRk zY&UPuv-gbx>?H$~o<~7ZC9<66#A8QxD)n(|d%H}ivVC^UMQCjvfle(ss*PpakEE$j zpME%GRY78|c|uOqMXEw%)7rchGG)Wu(l@wP(DOKSu0-5(%PUAyadETmqA}5PdB|@h z0VG_^OnHpwT39M%^6jszT8%IlCcN-F9W3s9eb%xcOJkGfvwf}BVIew zy{Avc%`3$y&(A{maBSvccy^fyZKvTv1wLgcQoPLK08UrO)70ClU&B~zQqf_jE}k+( zml*HLa{9lj=iL=A7_93-?6gB4yGhIMNosffD4^5#tRD`sx2PSsXV0{t`d zk}jYRl!_RIA@`r?4q)7=Ymg=^cq$wN>bD*N8_Q| zKRmMFliyUi6Um^5m&iZsf15_K=!pn-pU~OK0ou}2NA~xdA$W?Fa5PBI&!w&U0n#rC ziZ^j{uZ&5eOIphO!{>|ir*?V@kO`o)5!8WHOQEzRT$EaC$Z#v}Y<@Yw0X^hvdesKoY zAFRDVve^OJA^;SLRo^BYR%L1s40rQOuY>b>7h55M-1kLAQmE3$H7)>4e)DwlcB)`v zePz0}r^uTDAJ+8Z!?lU!y!3cm|Lry5df^+@hE)}O6 z9u@F>8zRF7lf;@*Nixu}7nIMvaGI_3(QbR?_+8gh+E`SAcHSxH%&6Z9^X6Tq{KMSN zvw8u&!axb0?2L?Zu}{d7Y6a4|Gj$U)N}3^sPLA(C6Ph1(eKTIK5$zppzn_gwsm z?fNsn_nwfBmN6F}ZFwrLH=2;o<3w7%b% zqHZ~g^QA_8;M2x=PNlfL&54%;Nx5#i3@f(Xq5f2>>v~YR`7r8DwdympQg<|dNL}u% zA6|4@eO}Ryl;fxKNalI(O0NX9&s>Q>>w&aOJ-=J4`f>MkVyq2(_VXevxph;k+7q1)D=9J8X@2vHeNty9a?~h(r}0?n z4B&%64S`8EBPY`8;<>f`h(wYb!F}}@y#0EvwE~0cSC$tc({-b^`wRD7!>NN3hH%uK z^;Yc~D^tSacTb_J z?F;W_5vj*9t=3!OljWr^%O5SjFC|6#OT?L%2tS%WFgpGYlD#?tH;L@KUU+?P8~?Dr z=`Rr6-(A~GS~AdA?U#W8cXLVjV!B}ed9P{B#Crdky#a2j=|I|e^t2nHZO!bM#~bct zhQ6Auu=T;Z59^<|(Rsgpn+sbEv|oOIN5i9Sb_4?ePz%(r%0)5YlK{S#1;)n>WPCty24whAj=(am!&m0rT()q)?K+4d;&+o?b~+LvhNHT#CJLN0Fo7X zUn!-vKm167`iEJbQfOGf^y3HJg52s|^O1s-LhlGWJ7O+Nt-}Ql_e^0i?Km#0U?(Y2 zezg`|Js%gTA{v`uBA$NB+Wp6K*)ongwutx=HP;+1wR@nsv%4YBlbH*BYWk?-Z0f*) z+3Q;xG=gN|JTR#wW3RK7%t2C)95~*ztM78slWnk$~Ki9rVNb`k7u*GP`37}NQD(!vTfTC0u#@GXN8N9Qu)KQD_Nd^Iv zK?mN-qKE;9IEymYV>pA>p*ZF*F5bEWdXR7{D5~AMHNeex?AILRLsZ* zNq*h<3~is5Z07p-I?gsgDqkc0XHT20ns1AY6EQM7cM^|LvDvt~W4n`>uJcBfJ{yAY zDCy{}2{QMqKB9H4ZrNiE&Ye$eQk3pZ^6(OQe}UTPbELY6waDS-sZD=xgO~4&%crAa-j+MBiDu(z^C!w(&L6aaLu``K?AW^ZJ)9CK55n{n|72<_0!52>qS_P1HJs9<%!B-n|hE) zxg>nR8#B2a^EzH@V|kEbX!EN~TYY%=a%tJ7L&dP+338Yzeito?jJuMYgQ|8hMe-oI zg5@Pr+oy9Tt_t}Ra&;JZPh=@JnjyEs(S$ZRPQ0~44Dop7G`iT#S(DXr>G5@ofgt+G zJ8ImuE)B`ntWE>Oj>X_ab5!7vrD_*qnrK~D#bA8n z^HkYHrFQG=iVLU1%Dwl#X+s3rqZl_y@y3pdn>jz{-Vh`@d2@+(RW~W{#WDYE4YF!U zsSy@?e?Nq>-pzIElcRBn5_xrr^RyoY(kHm@0TnhmAn2-vx%eiuZ!Fl=p~S+; z%!*XG!ycx5nxjPlwdt&VniuYQ#+Xxmanpx$I)PDD_c7gxIAM;J1d#@h<(q+v zUSZ!Rc*pLz%^EZ2`s3##9yQJceD=;6uf${6b02FCjcry|1MmIZ3AK!$m*iPD?`z_L zR)Le#>`zI8M634V2jPXr=C&N=#Mt8rKIfAQgY4!5>rSO`!Q5?mRp-Vh9Ae`wNY6#m zDJXPGY(k2e3oIPR$G;2K6z^9%yZ~^&@ehfJ?C80?n@qXT@SfJ6adMP+es5K6L)A>7 zK=Wkc*)-R5j9oSfp^Ga-J6+2g=yT-u-HPD zF@ieO-GR1A54E)KLyt9ko^+D48==00L_e`MvUzpCfi0o?u&dxur;kWe;p=9{0S-kEE$iWaixsq(q0aq;K#JWXrnnekkRr`qTn$~hj5t7M?U|@R z%{?k2QBW6sME|_~M$yQF3M*&C0Oaz5^`@7}Y^0~a_}n$ve$8iN08Ck%ao>P^Ie`B2 zxIrDvPBUMC1*7|Z*NEE4UQZYukNJ!1_ceSH;h9s11c_^pZR*hYwi;@LHm$&c^tP0Qvunxa5ASyK-Xp2FclOke5H7!bzPsn+vMay--IQH^f z2>)R8Zk4p2?EH~UC085Rpg2TwlMyu%xTa;~6lMUe!R+?pN zS)*@U5pU|kEqjwuLbzxBlsj|lz>$-l)Sz9owj*nu#xwvc&Xo+OmMonwhv|FfHrabd z0nT~3o$WWLCciQ7aZTU>+_zRyfQjFYHa8_A$i4hA+%JkHbHgci-uv1UF@0u0?J#>-eTM}NcnO_y~7Vk&Jjq<};N)oAfU%;G{m5ZXS z_;KiaT+}{FG2T~E%~X4#&4#Hnpshjvrr0|96j-BSb-PU(#+KIDnesDE&9TYyN$fhA zwso0ZV_A!D31=4GUsmrk8weA&#wq64>P@>}7&MV~!JL$q_ev1?azOQC9An+#dkn#) z81`~o7*7EEW<53I;C21Igw(6Vp;J8=w-If)oc-sk5A@TXEvY=#`RqIClAT*2l1d&W zT>^p7kG=)P+B;p0b2Uw7bRO+a_nVmNzny|ox2qcJ;%8kdYY-jWF%cxO@oyof1EQ_B zS9${8fk;O%hu-X&pk^Loql%isiu$Nho~Yz}yiWAk+UUirOdP-cVzL-Bw^))J&pn?f zxuy}{R+_rQJ$3W3numIIx_*4i?JhsfgwEE9vSo1#a{vvO$(H@tEXQ~?uh=-!rfk}n zzIrPsaYn?n%5U7V)~9uxo5Tt9tGw|B%KHuHQ}YREk|LMN1nG!6J=5#_F8BJ>XiIZ0 zE%(^m%I6ChR33-H;}!ZKJxAkhFjEscRlXJ`VP>S5F)5+3=yx4-eUeotQZ9CU6P$4(VfjERaElG$j#1iMV^UTAzhL-|%%c;=> zXLy3xrKdhi$_!8B+;HwG`X=|icl+9&s@?h8xrEXGS_!QO!=q1aMANTk5MTv!i;Mk2 z%!3z_naR9AxM@{Xzi$yGf{0$EkcQqxN)3eDvA*F$AKk0%@)%$(g|qrT`Bd#>Wnhj* zaIfR5cbGPMgnW{oIs4;y$%B4;j~Z^L?TVrXU(bn8q|bPJRW(dgw|rPNKTiXAX7MBg zk`ID~-&$c!_ynhe$SIlQmrb~)-HNpVkkL#qB?z^|6@HQrNSKWJM##iy$6o{r zzR)+eL~B775W0dKZq%|{*Wr6Kw&-wX1E1#~IwaL;lv zvzPDY_!bGN$ixsTq}f==jI-h3s*xR!$C(Ih$nPmG;_f8pe!EHYyuzck)S}f+ldn%^ z_l~y3394yVX9NCJuX1X|y4@%c5SAUbsSEW^vpX*@GaK4AgV=QPSuB@ovpn zrQOn&M+;v_if19k9lhm#l?8bX$T~8l-NS7onkkSTV(P)|n3#ZI=PM9cZ}pO_;QRVG zp_Ex5S{p7To8_x|U}bFGO1h+x#GT+tq0q*O-rC5*=De4gvnL)M`RjJqZSj&yYlp+4 zmgFF};KqWFZdBIkk!1Dk-t&j=EXhnJ1;QU2j%lg77-bQ!6 zGH%+7CZ?idIq&>LAW@5v)bM94pmGcpy)iutI?aUJw2rZhv7#lkLz}}FT>K>CaT7~$ z@=zk>rbn-Je#ghRdp3zwhwjbsQk7rZcWLWQ25Osg*Vz$B*(%sRn=(wh7yy%lxJ5CB=neI1ZKvQ@N5N^g1B#)r)>R44S`|-gK$dk+ zEBOjQWhf30*)%WLagAiG8`1aZx4yGnlbAln!(Tm4kX;(M_NoD`0K|RF4^XNm9Zjp< zDJP}#&zWcQq}w0ISv{lJsHC6BG^mW3McCIiS%0kOZkd^372X!4goAP+Tt4w6A%vS! z(&aTgpPxnL5jE$xFNABe#eEI*oymUI?XqVKIycBU5$MKWP~>Xlv2A9{jm`RbqmfAk z^+&QLde+y8kAL#axJ!)yI}T#^YoGPJbCuTo z5>$0u6KF8PQHK4J@1X|2UA3EW3FXv#ogQadPa)&QMo>M>Vj2Cc61nUG3Ga|Pl{Pmto(3%@=0h?Kf!7$6I{b_xM~MOYV2;%n>Uyp88Dhe@ z0F!%agW>{b(Ur9zI8!P~vhh)lumN4210$@bHfpI?CefQV#ML+B8S0(HKmCx#&mG6?%O7lFQ$@gy8|`yk*qL)^V~V&C&~&`E35f_nq(%HBfPst2VFAWTAoE5K@A5pV*XQ z1K)77<}{w4WnQlOpjUH!Jvy<>l^!Qmp07;lfpBxGohmj5s46Y5JwFZS-1_2i3AvM? z*f+L3DaTfJea&G?{Y{lZJ}7ir3-cY$T9KZVoI|#0eo!bV%~be+5^Xm95gyrSzbwJ{ z0&apyAOFsaT17=;YyB*$Rn>VKM=@QZN>54m=kTd~`4-{fYxv+qLaAU>O8>M1f zgOEo*ruJZE*Reflc+{A%JX7jbsgBcn0dmRk3;&XcIiGe3JSkzOJO1eM$o0cI?u&&5 zjE~m&;ILL!k-N2?UqHO)B-3HmX-03E93z`Pc2*ixK998Zzkwx;&xu<)SJ(TX{=Fhx5#6C{i`JWH)A5SHv(ZGyD4; zgE2pw9miH@{QCvq$FdLapS{j}7yd?%L-ZN_z9CeyFO*^B-ym5f`T09AW8QZPFRnfY!9cfs5?SR0k_9XIO(#2|a0hFz099bdIu@|IGq zQWj5s(Hz^V-YDRrH~c)E<&VsT9BJg zy`Y#NAvz()mpFVWNdRpXP9j$I?jM0T_MX9;jjDPI$EgQ>X%$}GekIaFlt_%qbh7=YzK410qS4P2o zv%xLqEGxsQWfmsS$8_{4q{8#Q6M6w}zkgdrI{!dxS6dQix3MKC$$>M_Vrz@iwH!6~ z$D~8=pH`x+Ga|15=gvl$j7v68iv+i!aTgP+Yk9cwa4X82O&&w-2LqqtaT9Mke+WuOH#T4amr7ztxyk7R}_wJq!LUgzZJ!^nXMipLyDDzUASZ&`!%FgVnUJsq~it8 zqqz>{nUViUK-BCAQXjex27YqqK1hCxfF03<@+4Tz!%9@~hBvRJLe{n{9}!peSRf$H z62-B^|Jebr=VZwYzgQuD5nM@y39Wv~wFsBxMC<_=%<6OZInBN>$gCPN0Qhi@D8)5I zjWTn5J%z!2#Tjt7t<)2r+m8{P_H;~BBh8_4m@dF#q*3xTbbyai<|pMD85cakyts^I zYBG(t@bZoDO#Aew&3T-;(K$zGwKBVkP&UX}s^qXMXAAgSfBr-Wzzng}!w2(!S6lu3 zLEd!MczunwUj?kx|r-$2Gg zryC=(>t_7|j(~}zqG^6fKns)Rp%0;|aD*j`uDN4+p#chnt2bF|ZtWFD`or56S`H3? zlJwU||GJ>jhRuroOA~)I_mZ2r%TGv{e&TSwA((?^n%mnps2FRpJ@ShD?L<;Vt%puEdss7azMZpx8XBD3V20r_%`vH zL11B&fVlCU4xz`!g}3P`lc9=b2op*bn92E`{Hl9{NKigrBu68qrf z(}w`cS&mjk(t%d!ib_!oiQwB^=`!R14)-gnK!(RR=*q!}oMApWe?rn(h7Dd+W*bpg zf$(Xu#Jwz4{EEa7>|VNeC@vWkHSK=2j|^4-X7TnS?vMIKbg!m6$>qa712}YV5C$V& z%>I}(Lb(VGAff9!z)Jc;my7vEC=LD_pp}%FOAm-f!e2J*sxN?wCRA9LVeMU(J?Nm1 z)Qcl;7s~OSJ8-$!wXe~~wSybEniYDlO$0^n6tH*baV5_)wbKv@e7 zaWo6BR?W&gq2Sw=D^-Vpe)rcpdXSt34|p#10DsrTvv)GvV#(r{?IEC&!f*)%Ktk@F zk+3pvTt7nvF!T|vAGa9LIA$Vr$OCr0Yr8jhAC_^5{r_`23Lrd80|HlpGIQT1_W4cB zErf{qRpJ;FX$P?47gOknT_Jy#5Yfh4Dl;l<3CAT-roJIiV55*n&w+FdVFMZ4@C+DvN{j_MgmBo* zq8=53`=7}q%V4r3K_wR<8L1)*T~{>sp=`fZ)Jk5zrnmnap*v9=2(V`0Eba`D2KuP+ zMP|Yyd@BEDAdGIP9Y==1fXka;sEv-8p#)pvfzNANiw}OMh2CaR`4*{C#!W0PVX=vjE{HTcJa{3;_O`UJ9dN#c{2>qS6(h^ zp=}I>H_!$(;Aq=_R+#Z+HhLurZ!7sipcU!PG4R`&%0~2Y;76IA7qj@n!gXPRn{APp zt@SNnPx9C}&rm8D2;LOyigmU_MHb3AyCju1k4^oPb5;b(Im;1|`3+1$74#>77#Gh# zMPpRs_S z+`=>xuz^%<*aq~&`w~BxiJ^qudh*E#i^1^D^oxbjwaQzXbt*%`GxE?fQ4Oj<55*7?$q;W>GA%yBRT~4Z~-aZ z9#xVsdN2nk;A2Q*?#3|hs9*saYL^9iw9Z^o*b>@HnrC<@Lo?*^n+rlOSX%%s@77WbqE5KhK(~cEmHVPEI8!Z5=iDN%0XA#h)V@V}(oQJZwj69X zQa4&RRyXcZ)^$LmUDLs?d-Tw95;K|6RB0@VvsZNk+OjLQZ1N|@R7hTh&6i};J1UCM zzJ;39?SyK9Mc+@};MQ2v2-^>a0R1-R75z4pH=3sRUB=+0&^-Xey_EZqsSW^!8C@nu zz*$1}wqI7;rq4k@82y#SL(TrQ%BUnck{=}R$87HRwcU;agd*Xw)k@&;pj#A}MYzT5 zi?6G)&|O0Bx+vX%h{UeYc`k$#!;JZJepr7hIu^#+Blm1EvonCNGmcFG2NF>U--_+E zbEjeCNg&H(JoZ51HU(`AGUgphz;_SApxO)hZeW~l#a-Kl*@fMO+lAk~zALU5t&xi5 z#YUCk|6!$KpsvMufV7Un*?o3KpS!@qpZbo$uL7{l$4WtlYy?zKbnb zKY@lXZF`8vHz>c+@8PfQ>vhDjF%)%>>wT|@zr|>Dp8hs_bIcFg=H_EMX3&+Lboqhu z<+(kFW4?1XAm~)l7dAbI#_{Y^_y>c*E-#L*xw_-+q#@7C#?lZPeawl#_l!NhE2Q~} zx&+1Ifu}9wL$HP3=8Lz1~t9zC;4ci zQxRS@v{*(T0wW^X=9q#11-vc1%|O>S!CfGSQe(in-k^i^q2g+x?aK?@;@Y3SLH8%q zH#SV&$C;dO#y#)Un|)D4#R$tv69n9=WE1X}a*CV!#}fiN;;*gf?l0?vNmKF%ot9FO zq44>TmM&Us9`5&kAN*IU%^{v7Fk>${Q!JiRTn^x3Yes#2gjbzR?6>hfo8$ZL9?wEU zG$TE;HuzVXLj@WtjNRCK@vj;xbk-xXYnz4~;lrlL33;eayQ^Gk@R4{m;HHIe+$YWw z3=6Ti&yKqqh3DswpcCavYL#`)w9}c_KU<|oEuRWcn;^5`;9&)#v>_Ozo{O*4#M8nV zrN~4Cu|0YW(GpotJ=aY$kau@}ChnfJ-CJRD%8tfD%EHVd*d0f^r+PX4lSdH10w2+k zS-A3&J1}700IQM_3>cc*V0i>jNBhe_-qM#E7rR(CL!t43o8OT3-jLDM7{tGPqT?wR z>P_MQj?*lyPJ_%nvMgElX`INW;AP)+b`us|_r3a8-~!FsxaPF%6irJlv;$T4lk_*) z={&Uq!$mqp=Ty#W6^`FSQtD!|(6F0{R3=YEe6IB61H^lN_ZNV#mZ1s@(fYks|4{LJ zh#9_DWBj*&#pIJUeB$2cr_f!g+Q0p)zz8GuYa{UI#Sczsp$#AuY9|IN$-lmqtQ?*a z@FM=X0l2zO{-Y%d5l{;s(UT_f!>0xAJ1NWp!==vudqaNh5`Jz`GTyzww#-`mpm6D0 zp~BLo{>MGaFYn=3gKqhPn{TDjO68Mfh5jGz0}p^wHpj?-h0-ZA|IZB#Fo%HO{!dB$ zxc2J5n@j*T3PQD*fOWfeR(0{up;!-&-OVb%+ll~r@ifxh`LoN=YryLcbs~PY@b|?ZyFz^m&}@A(*2t@McsY-5dA)%A z^Cs|@-}ha$(yIi_v2dIq*elWa2fcv&FYo)KcQo)&hyB%K1$?R47c0Qw{^u+I{=Q## z1CgL->UnpD-;E2z%Ru{2p9l?71^2=9p__yM;UiU#mJu}6wgR_5bhD&c_QAzN)W42^ zR}JP{>%ac#N7sMOIOwqAqd)xwG*dVR+&;{&kC*KRTvqjQ{qc+c@DW-*fGI5;Q*#&k z%ZDu5U5Ixg!s~Hl78E}*0$%y)|JHy%CI&Vw)V(up9+EGN%>KX3!5?dn5!`MltpMGn z{hsfa*E{k;JpVGMf$M%b3&FSj{lL2S&nQ$@{-eQOP2|b_|MPuUFM5OlRv#VR4%QC= z|Bo>og}=5gIT7j~CK3vb2K-;>;IF3Kf@reaZA(ackc!eD?fyB}Xmnw-uJ&?&Ncs0- zP9}jGuFH+#?-dK~_1d9M9{Z(v|Lp%SaXm;bfwsD2T($H^pP~23AkrlMSL0^;0J`j9 zX<4s&aYRNI`!7ofxIpqk9N0g5^HX2WLYMul8GB?!9U_hAzjPb8;XhRB-?|MQZ!d;t zG(K?*UuiS{rKN*ZFbjV~j(@l5$7=SPC4;{E>D|aje;LGEkuMKD!E)S9#{Tp7U)O&faIZC} zZE^Jt`>9@!sK}OoefQ6czutE#ZW=nMj?P+qq$ieajgUe4=huH-|I2+>)9j&aas;;J zqhW=*U*G-nBK3ig!@tL*FRd~*A5@dMVP(Gf^CocZBQHet_X&N~+CQv0ppI^mr9vA0 zt;CW`5HdLb_Nc30|K5QNTFwh@K4ZI+ z%>7@z`j-v?E}+9>Q4k}=e`ZAaFK@Jg{gF-Zr)mM$KeS6SHdM7>YpOUvql~|Pyvz}3 za{pz`{>?KfA_prpXN$J*=U0WaF%$&;yAF8i-+_7*rnHeDq>c&MS6ubm)}v z6ZZT)Wx)SNzF7I+l@iz-m_etE+3c^VZFkE*3@G%u|E49Vp#Cn^L`Bv+gu%cU&^Y@) zJO0~f{Oz%1xbU|$XQ**GB9Q+W=idX~M4jCKcVS$<;OdD|fxu)-N~5RfvaIe)d0i9NTj6 z=AU!qUkCMHG)smkbdHFQT*V5ZPiVMHR{bx7{kPS4Id6Ukz`$fnw$A=xlI<)6nCzvkv24=jaRdkrBa%s+(c zbxfID^S`XdOLGNg#VszMNddZqOEC!*qAT$HH}_pNeitz!u&DKFU# zo0d0;?cWlEc#|W5bQ=e_9hTD|_xqG?l^j+PHg&@3Jx8SUzsd+3F+=WORhff)G61`> z)oBLEd_E8kD26J?T57q0Mq8AlRC? z%l7bz4JKY{ol-nX`lG+CeQY?GNX36`%;iR3;S0R~SLN=Gw&0ZhXuphSgD^3huxYPonky4xvg^W7gM!*3Pk_^4&LeNO8x4Xq%TpM*+?<%cUKkg;FWLvF?xS4rK?>xbU9C=(@6OcMi|NQ?<*7XI-2Lw z1mUqZF@X$Hja0^04?akQpoa9!eq%5Z0KohrG#ZW3cc$HM8j%cBZ`^k~+xbiH8Zo^~$oAvw0^7aa&P>8t2wWhFpezJL&qYYp!SO8YJ$`pm&HbScr zD3vp`VAi5+)L7Cc$$1u$@V@=iuzEhJxEIHArset1qIqG%{;N0rP=jMwH1`4hF1pKF zVLLg8j&uRg9t{c|oqy}X+YD<4ub zMDb&Dva{;KIYbbD+vne+b;El5kMscO_n_(vlY`;DPaLa38>QDYD2rZC_C}T3aUww> zxK|*}Tsz1)X|J?&Tj#EPqB(QTmdMlLB%rhZA7j@6kLBC_5i*iZNXp16N=9WpD0`2H zh-A}HC|jXYD3K5z*<^1r8VHH(nWBV@kiFh>+ce(a-{;@!hv&Yp>s;qL`+QH4+N{-! zXk&T{JD*=Zmwh| zKv6N1KlJ@4ahHW9!4uR+_6{wAXbRiZ3iqD?b!wKFoNxYi9#Xvqbq6FoTlP5&k{;cA zf)Y1o<~Gl3XpY}2Q=hCW*wgp?1{uY!Hy8VL&cV<&R41 zf%sS`Ivk>UGTL#iCJWM5*POk+5>6ao=z6gC1kZ!JSj3BL8P}mXF1dKozF@lh{!m<` z4?)%RTXH4$(GCWGxw|=~R62WvTD|+A=p*g1l1S?$;Drc6iwDmcY-=7hz3~P+q>`fP z{zSSz0rYsvR=1$F7yM?X$I5}w<`(`T?`ep%hoHjZv~7V0FZai`zX?G zl@l6z9tcZ1i-lGcpI+T(gXik}^Y{&vyzYGvmA!YJzfdiPkp)hsMaQfIE80jt;Vsjov*WGB%rxlF3 zz^^CM3pg-YyXjB57j!Y>G?g%&cZ$V5Eln2?>Y>a((3%koqcym!Uc&9E`E;X)=yoeK z;s)~T9l%9DJtZgtr9m20BULFy>4aRlB}mmwqPbKQhsUWMNJRX1x%C%g4X=UStsAIR ze-NLfk~Z+1wM;uh;U3sk{G#9>6=)@YPiM92&PAUv!49 zU{6(I*+b)w(}Fco?Lj+@C~Y0ZFirH{cg#C|cH8+tSD{;0yg%yN%NkOty#{QhQTKc1 zG9D9^Uz~C7AKd$h_j+Hga{L8oR_}k#GJoRJkA%cz*<1@l$R#MKrl0#2${fM>3l;y> z|FKdwG^sZ5EZpg?rqn!V&~IB+p{}S~YSph>rT-a?lQE@7Wi%ad& z_WiT%!s77w>y@txKyEs(RU2g_CVn`)+=HQgK8euq^XYTURCz$?<#f?Z#ZibYP7fT_Lr8} zQzedsg1<<5->b?U<`cd63FliV^ss54yXj^a{;>L}2H@PhOez@8A18aiROKVI*MqMs z=%W#USL8(cikuYU`tkfeS2~nPbm{l7#_VN#a2)3WTsa;gW5VcN6#mDDD}8;D3W^%p zSIp;~Op2kUEwdU>LX}jQjDw7x$hg;wKo{>>=9hLOpURTCioOGx&96wQcsSz*B7o_> zWZ5iNk9&E!!lY=)F_8WEpGYP2{4w7gJ^!dg=tPWSDDALT&;9c^zIb@2jlux3)~81e zL9^~7?3|t({bc{+utRT(`FDbDa68@J0m!Xsh-Er{ z)7_xsSD%w+ciOho$TGvo9@$EIKE``OI}7Tu#Xiqy#gUMYJ{_5coecqQZ1_m9otW8M zO=}chu*m(jSinbP80RyN^?gaW4}E)A^aB7lDW}plJs?422;7?EFq~KZM9;o|CaqUj zSse8Rhq{sqx^c3yDUmTrZ#gggWO^TTn(8bw*@xj{$4ovvn1&&7jUaFN1qb3HE#dAH z+mRbkKLZIU)eRC!3b*R632iwd4Bw&5JndDwV3r_VLH*l+OV94^6Si*wNpA*XlD{tU z#hZ`X^n$k6Rme2`{mFc^wfY$Hh6M*7e9aws`rPW=(}KF*>Sp$X|43@rU8_(0+Kf9VQPtas$>wwi66YBrR?`4$4}>VXT6cNye_# zDDa`u+iOL)LzP+#jEauEL=Tc`C(K9`ybW-YP6tF@=Ap3LOQ2Cr;I#HO-4(;XO>f5- zM!DOkJt4PY)}?4x(Teb^&!Y==v?i0SCJZ_k?y>ltBKrgYFU(7T!NOmW@=$2cPUoAq z_Ty2OJBpfg8HZR|mQre7|L}9RTA<5abAj|P)smoiHi8kG*f|T500aUJ{-GBUmqJtT zW;CBg)2wE^J;DG zl$dOl>gQA!&jS?Rf^?>Hs70F#*`;)Y@c)AXOck<|X)>TLHc1#Z@Z~iXFagNhj zmpV_9`J@w-o1PXj^cnDB>z+nyk?CB@`_`?853|o?3PR<>gier#C9yO+v9^z0^b<*T zJw5TXWPJjZL0FJ`y=c9ru+{IUjnhQ;H{$K0!iJz8{wA6~+N^MjK4 zo(Vl|o#5hzyVJ?dA7`Ie?zlI?ERhd9AR;8<#q=1Li1s2(H)68?BtQQy0_t8%0otdH zLm@%e$r;|oQPuMN^nH#u)LQy(Q9l!GSsAT`hzcSvW8L;WQ z&;|urRw;#(1VrTu-x$O5{nK9I(rKOR_Y}ENMq|=4*?#$QY`Am&QQKDU1g@&+m+OH9 z+1sw>+sLxQ`I}RJY^ShTBChn@)-?&W8AO_YeH;h6ii?pVX)4XO{UQV`Ab1&?nBRP0 zEn+PwctFd?@x^1%J@WPIWG2DER0)s6GooI?{s;E)KtYWIU~LcOL*FI{*gLp$;GI$U z1_y+6Dj_}xGtJ(5wSb%5_gMYv)a{uE zg1L0_TM%nI7ZCj@=U}GbAlPYy3Rd5mO-@qOT*~i1r~?R-kG+oC45&MRs2Bnj%j0uY z;;fJJ2|%cd${kylhm4Hq=j%?xrU2JkBzGgG@*dy+*=uhLC4bA~z44d3iXysSd(vI% zyG5q?TJ`W?#?RuG3-?*N4X&2UMmUZ`m40`?5y7F%$A_U_20!OAV7@08&6*bgl89Aw zz?rezjJCFU203)LZ~NP_5~DdZnZ-PJ`&+5fw?8%*lg>o^x^6BFDSoF|e)$#~d=@&} z%m{`CNy&&c92FfD7k6B` z!On=@Tf!G=@SWPW+Ms!lPe%7$G=MoD)V&UJs`<5HTA43HIKN^H=3vodj$!k}Bx624 zxx-oN94c8;oVWb>h6JkyLwY;!&4e(S2kCWAh_7vDX+vh!)qC;O@+5_ficzfHU> zrQqWxevhd1IfM?%xbnV|wS(?Eq`Pz~Z3w|~Bv%sp7n*7 z!ESgf06HS0wO55opi}I@bDx~&tQ^42W0Wyvm`AL7WE8y>)ZVAEJket0?YF&i4=+xl z{C&_di)VCRI$%>|0-_*|;Xs(faN2NZfzG)DyI-*}MjX1cGSO=NfURXv>FfWo`I~jc zHp8r}P9OkqI+;87-PnJjP3LwGcy%6QdJo6tA_y;Lfte1Mp}96r}TCM~dc>qdCJFQcgO+Xl6#0?a9~01ohqpG%Rj>V%cL%7;>es)fY`dRcm4<)#}#!F!It9^_ODfg01T%o-*zaN;ul1zSY{do^i$_?>wR(UxHTL+!5MONz+61;@qzt0uW` zO3^GwM`?vOW->%OuF8^%k+eYY#RRNRZ}aOQ+B;?0~@(+fOnOw%(R zuI@HSHP&X4LQ^hz;#$?=oG7p0pNI}6vo$e;a_o$Q$!t4V_KqKhKy10A&KO)QTbZ$! z0Kb=%-{X2v{;58AERKq{tuh=adWQy$u6VQdx9wI)4-$9}nb(KGKh885bq#*P5};ZK z)*=~o$Q4oWkntT(R*4fHrl8sJzyo3^qPo9oMMZY+ksEX;$ITbb|4)*3?X(G=B70B$ z`6*g1kog(t)53`N0PhWb1tcic+C{O(L;|r-aTl3 z6xpimFXwgc%TX{Hkl|jOmH|r;KC(g(b~%MFZqLZL*)yYGY!`ORv3$Bbyd-vq!yEk_fd`&{|&>;Wu=gYp4`sEGQ-o1m*DqMzhG$E-xj9ZGX2 z56n%@?e@Yi$bb-4oubIhMG3L)wj!q?Fn4UlzDx{e)MT>+p5w_Z5Ct30oBn#Om~EX5 zYim-@Cvzk>aCO(2xyhlScTB##K4S;Cny+!xWyp~XU*NO(XxH-5Bh=SXl1-cb>RVFJ z3ws0!XPk~|EQz!K=!^8--F|WU=NH@IyzjIGY7(BiMoSM4W-7h@a<+%amAT8f`P!^3i#5#zZt91cohX&fd+guMGBf<8r$d<%Y$ie4Rkx zCs+jauRU%K7Kvf%gNoq4-ltpu7x+P>MaxG+K$&sQtSy3I@7bJ7o#GA}E~@OONQ$8w zI2)ieFDO`?(Xrw~B7TowpJ?-_ilW!LrcF(W*85> zM_3Tvfy79gKfmI?Iri0El**@jpfNG9)Hm){Yhp?fEr;DX7^yr7ly8AT;P;x(OgnPZ zbnA0caKvUi9p6Rnk=Ol2KYQjGj$r;S2%hJzQ8IRoL(Gu*`VE_06 zB8U-;wQ5SjMn7I;_{fEg$#wurtqvFj=9%NWDruv7o<4^l1#dJXNx}0MdA-43d=5g) zKO?J2o70HKtMM2R$FQWO0)b7TVZV50_7s*!o*5>-)|02 z&IE_Fx5EF0)>u8gX=`FP!AzH=)~99FnV;34n+ME0beGBJNF(11%}(_l*FV@S71uwu z{^i9HpvG40BiyJ|9v9~Nc!@Ss{KrF23@p6;uABeKqShzECP86fZvH1O9Ccz>ZhW>U ztxyDOPM>%YEs|L2CijEckqy*tMA{|It2i@{EV1vW-IdX# zZ9!S7Z4`{lZCc_sDY1j~SHqs69*9r%@9gPo)TH%~e1(^w7JySqg`B}6rLujgFD`3e zKPyBA0?m{k>1j|@X|pGcO%N~;nb+nc$x}1YOAu^)*4(u?DX^3fsh;pt&Gl;>YvSA6 zVPDnEByJu<0-L4doJBA(yZ2jy&>Uz{4ejqR06g(o#J+3Rrg4T+DJFjX?;bHNBv$`w z2UHIF#i@h=4P#o=ZK%qL|g}QXPz~usV5(w@;FD zAV9Ot8L!PHT9Y#WdVlxMfPOw>m__H_e2F<0U^R|ISE0S~aHm z*H^N;>!0&JTr#LATjkQiRU$ zk8HaRC=9o+gvt_I&%^Bj#*RxoyYoiAhdF$Jl#$BZc=(d#oxRp~odEJX&&UgL<$_5n zC0q+nt?h7aVSjiWtWLTJRnZ8*RyRc}7?!4`3I-Aq2O+(a%HTX5QCA0{>S`ouC2RJ6 zeY2}~IW-Q0ecQFh+yBrJ)BG+5R`pp|cw(_LM?j@q#rx#^fdpGH35|`XB{vp@-iy;> zvUPXM%K>g%`6D+;QvDKzeb+d$`dmXGG1MFenR6Wj56Us?WA|63$podo)4!g9kbl1! z)~?)&xzm@CC^zU=ut5|v1c!6qAlaS*#OMdXd-FulX$&`PLS?@H_qgT7p+6wcjBE$t zjA&+CP$FQr3>ky7`o8L;dWI$S`oXX5*pC}Uw0zQQ=drvt;E^Nv@GP0vDbn&2oA9 zJS(Wto?8yq_2_5M+Zb+d36;gxU$(ZrW$CcC#kH5al~I@mV+wemmB{w^?ePjsC1?If z2NE}9juO`px4O#owp>!5fO9^RFdsdKg@4U(=ex2y&s=&I;h`8l%$Fh#{Q zeLN1bdz1veGS~kj13W#80=VMvt9L#qcDz*Lf4^Z}97c00zrYlT){&Upwaz?iXXM3# zI`Oy1@R7jFh#tN}IB?@(hf0c8j&6OkTeML$3(&7_R=9<3m44D*7!%tlw_S0#8FM1n zYOY@GDmIC!4^{)sZ|nSnY@*deuGQuDR0-7j?3-4&ves=Zw6a*xn!y@GG*{|hIA7ve zlhCVsOI3E=^Vg>kF~I^ouSTnHVv2!-CE6QwS^aMF85?oKhtiku<5%fN#9c!5*W0vC zB6BYIRItt?a!hPlIoCq5wUb)=XZ2Iw>?PT2=d`}wb<(Yzq#G?Fmn7vcB63nz z!*$`G@^Y0e+*HZoF2*k~%Cs;HY`S=>@BNK-$j=d0)QScfoe*V!xoKAjY4h+?i#PVU z`rR7u`rm>N$$rt)XV}<_-yx`AT<6i%?>6r&I0!xz+)Auyv%)*?@P2w@R0#!?uEhej zt^fmT`tDY1&y-^n zA1yvwj`5c-)R-@(v!Qd(g?&4Oz8u7ijETeA{C;LtSJ}UFI4X$X(8nSt2PXZJqg%g} zGYm0UpB=~j+n1lquAg+{bk}xW+4Oa2c+Y2i0i%HjYT(C)~+6c@!U z@H>QQetR<;FCXuAa<7oj(M_E1Vu`{5%HPZjw)2>id)Ik*?foml1bq*=&TmCALN+;P z=$m-Ta(}sA$aBy$c)<5F^GyvDtB)PSdAjNItG8p5t$?r_Eea9xuCk91u64rJ`cGDC zr4D@P+rk`Q)29sje=KQjSHRAQRDHvU+)U|*6x*m*OM>Np?{5S}%^)9|cRn_`XPsK; zc$^lI&HS^hJ-2A2MuZr&d#P5qN?8$Wkn`UkK=yBje2CY1=OmU}6oE4Lf7%(k6`%JF zra<+uK+Nmad%i9|cqK3s{$gE&0SVXnL)hUBn+6tejT~LH{UIA>P3<9I!TLka#vJR^ z`iIC}qZV5-yvgf_jM?&oOG(ib|6yO1XW)d5=ISBT21@ns+G^7YV`BSpD=*RVe2!W4 z^j{~zs$GM6L!f-}F9(1+i=6NaXD(Z+wKW63)RF2d{Zk+kAQ~l=Fn*O@%3)Z8e1Cbv zI&al}MP%SuxGVj36KUqh5>EH+g{KBQP|`!adOQQy3*%_4f^=g2hO_g z3-#Q3IZ@SHeuBJt?J3gva8`bcgleMeXXF-)_i*Rh>ed&v+30Y4j?mB4pTd24pQtn( zw*Rlp!S@Dn=2J{N_W-3vkhO33TuDSF* zx0wU*$Q9v)x&>5!{FxyzVbf=n1u?BROM#VB+=xHnQ6R2NsdCh=)xDS=$CUlQ&S#}O za)T#trxoDsSEj`pTy}%D>}`v@T)Ra`Od-LKz4-bjal3ZOH#6NjM=97)rt;wcMq~3Ttg$nxA&JKz+Pm13I7%Utmmo^>X=5X};xCHkA6p|6oLP80;#Zb${ae+Pn{x@NZ|_bt$oOA<&Kp(M5_W9T1lF55}0= zrdBtTdi8kWM>xo*Fg&8Hsr0-4Du>pu-0~VguD2mpjM) z(7lKd-a~)gk%7M_!-*r``UqJ3CQd~4AYy&Ax|MO|uc~!jXViN{XGi6|z6-Kx9$I~lG8J$I`~C2Hq08Y=HeJj=#20?M zlWvs=FAcuhi&a5_ruzGmR+x5msR{>cO+f^{@U+}8ves@rt%57j-xm55;)0QDf4IUc zT&RT=5^mz5HT4E0l%#~CinPu+x^^A*;~n`w);HKH6gJTp=yiSu_CRx%Ojz1S^MYgAdM>2^kRdjk^hjV7`zoUTs;+C$Mp2PHwVr zS68s@0zU*|M4^zo;|GS~wl!`TikmJM`VmOk`gfl%+k~85iv?IJVqtIJ;PSElDJ8_) zg&6HKi<1po{ZUhAtcKsk!RmV5B$41H)BX(nP47t{*Qfc{*`d<0gR5Ob*t{ONVy*`Y zP~N_nZ3?ry_wM-HSA{6T(HBY?_T=KoTDR{EwP4jy`kGL!@eur1BeZ@5%MUT=AFqkEvkJ1wuJi8M!n#SN2 zXwTM;DKOI#-0T~{a1eVzYZeo!A-8}5Q&8^S22~X%P@}gObI0`yN7gxZl(RN}bDo?MqkZ(2&g@BwW4k{)HHnn}pJe{@SWuz&C@{H|5({ z)VC0OW2)3XCBg9~{aEA?-yKa>d7(tXwO$=ffTfqJ@3!-DYr0YVjdTW}4eAYHD$eFj zEWhUW(+Cc7EpyH^{rH-f>Xe~4FaIeq!_%iofiB`~Ge8%4H8BpnGh!{!c)@{FZd^=^ z@h{=M=}efA{pC3IyK+E(TeUzy!1lE}Q9l={=&)%_OXH_`f|FbPYNFu=}+d$wfd! zw@{NBTTTDDV&nbudGJe=IQDB;BBe@g%OmBi8$wZhlbIKHcHjZ*+by+PeLC+8vM_dA z9&|T0p7MV=DY!S;Sn=wW-6>D%a!I`psKi;FC3@s?&yy{)$f)cpg(k^4j(~KSyVsO6 zU7A#5{T~h=n0nbd=b^6M^9V{$XpcQlVV&_U1M6zpoC%%AXwY#thF0#matIGCFoxhh6DQTvY+D#|hi`YUd*z3C}T z{w;prGHKWSU4)kR2uxqxEqh=(c(?2!oB!+NCmpUK7?Eap;yUK>(U$jEWG~steG#~b zWCq-f*-_DdH@4PI#9A#!SkB<19Qmb%}@AjsbwZ@ji_{i&upOSX9WgjFp_X}=i zOfaJUY#c%JG$U-W4Jlg9Szv|>TgSNO0%iFt;_we^0 zF7KK5Jm%WM06LSc6;t3A>BC#KPoV#ng>1FzC{%74GTwB@lFDs~}C5d_rrMgFB5_EyPNCC%=f_0mC;w8sSSP%QI|88|>D0*y! zHoFt4oC5sluBdSwIUN{-TBoR6I+gzSe{xc#9GboSsXs8IxTvlg7G)d5YQlnz6w~(q zQ=$alzpdp_`kpI29n-+%t$3-Co438Z+du6cHBN;H=hHM14KG~`e@j}T#!1jm{`jDl z7dWzJyJSEBn>9%h1Z?q9(y7tEar>qq`aI&J%sXE*|2;Cl@v5yHL&OHAJnq|QQ-q>! zZFmp=LzcwtA|w+I(iAggnX+L*&TShvZB>nHzl2(mM;7l~Ll|$X?%lqJQWEr90B}R% ztf)b^F-p_P9haQvN2RKWMHhal%`860nRJAf9Dc*H2Uv2_n_?B{Ggue@89a=0LuKr{ zqNbu^039-)84aNLG6&{2zX#wDAv&QOsnub^1-SmvK}H?9S8bt3y6vMBgB5fFIGGJI zJFG}QR3Wz3|1B|KJM3mG3~Q{%EfeU9uc`IqoAo_Kpdljxj=x z7>Elww7x}3kJU_D)1wb(HK-b8bPcj$8F8a68cYpBg(XB`TVXi*>+J_VTS3aW{ zeyN8bEmfYx4404^MTKDA3g~al-dbf`2epVuw=Pn1o70q}6Ikt>@jE*!3t%>F zBI}01^CpHGJR{0tG0L2w^g=D*e}UwmkB;>#U|*$Fsp%=^#Z zg*nff6@2xR8-!BUETqbIxOmBVZld{oPvZ16%p9M$ZzE3nPTr}hJM|`MK$MW`P%7-K z<%8&wV=*y+r=$tPC~)VlOSxZgi>q&r_s+a@To0T?vzO?t|Hs;G+Y-&IJ%WU<+9REC(iE%2Q180u8?gb>Sx|^{qyiuiV*wyv3_^=bHoIC(3l#8LLM`@q z{{fe$=C$`H#STQ7X*Vy_<|ExQ&|uUItv;9NPFP2oDc8W5mT%#>QEtM3Yjdkh(@J7y zCFYk!vj0D17h4H0O8WUb@zEw@Wth}tFD;C?IPU;(hqQ32A96~GfS#l_|JWeRW$|VK z6urK%`O)NzQ3Ie&XRaKxPilnzRdWPbMHuQA0nVgmhP8ujTyW&2VWgzDYUY`U?70Xx zahT6h)YY7r!bI(uyA}&5Y74vBOH<51YZ-}oy#IRsnReD|{e-D^*2urEE&n8-k$5Uw zGo}Dvih;1T4}<8Z4<~;dT1tq4%JnK}!93$zN2RNg^6(_|Cn%&OX+tZ86*Li~LQ6!8 z$vkwu%xBgHhF!{lBGOhcy$qqO{slb@m(ND3dS5gqeLqGqolx!EXQN5`HS)qQ*+lr| ztC8E2hR|X%4t3EyTdD*Qt#_IPjko!}Y&ZkxLrAoFq4k5%xV+#oIz`ci>!LrS0Zxkl zQpa(ftEH4ffCe+VLoU7bK2Iw$z=7Qax-}=w>^1y-DW z>I(ozPxUAp^RAh+Lk~R_d$MvHW6(x63ar={I4y{^uvNBicqV9jh`U{Mdd|jEcu?jG zG+|}J`F!H;|5R8Y{Hs<1`j1#e&%fsuZai50lIpPbG&7O;=p$O^tQS4@97X(dM{kZ@ zOu7JgIbqSN>VCsO?Fq0KlWFW9**28M%m-m@KQn;EJBS)^3;^Szb#MyuVN;29+Ke?K0jM4 zL7atP{6O#1;3KJhXPHgPedwKn^#s2$rKP~AzS3Sl@=pERM2 zS=MTiAgwllHMq^=10rrRtWh668k07(RiB zR;P34Y0=jJ8-hJJHx=5D+o9au0%A@Gyi$n3WxZq{L}EY}8k>L;_Oh|ymQRqnZ@Y=G z`Q6C1Rz_-+&%RH|fiBfHT8kG3(2A5nM1L|JtMB$OKVuMjhS-i=-8Lq!z3L zXzF-7p<3N(7P`_BTThEGsVRfwLiepxZdDM$b0^lue8 z2d(Z%TRxygy@HmKL+2@qx-v&Htl57RB!-{8qz# zb#GAm7JckXe^Y4gMN`2@BwY!R(te`7%5`gO3Qw`n>61z;_wt_YyqO=p0n*#7? zF&wt75qE?=Hz)%sCn(&BmpQwBLZjGh_R!;Z{Dhxgzer6vHj=ceNr;JDlO>S_oB5A~&NFJr;o6s{|^2{C|^fW!up00rfN!QJLL% z$^`%A18|eZaL9Bda66bMW1}x@Bi6RNlwIx>fiQ^ttV!L)cB{* z=C!O6P*%!Scw0VtyU7Q9$c7{wUvots$;5maB-A$uYqK2Sx#*nCWy(4YE z0hVZWVrov;Q!C8lXtkznVvHHs%<&fBHB`b8Bc-B3IPe)iScV6Vsp{dgDt^U&T+-IJy z5>krFWAMDig>dF$S$5`A4U6&g>JCp+4;Hm*-hm?1MG}l<$p-&ap4RUcD4rJMHwl}+ zM@09_yHMmpjKcIRE7*%-dFpNpr_g#>FF-+7>!5~0+k~@R%y%~K8*pzt)hxn)IcT<7 z&okXW-qPrhMNo6`b=j4hiT;Jt&>KIbMi-Z@Z1ucNGV4)v@lwW??^_ z)%Bk0wzeY9#$B6W`4b7tpZK)b=kUP0;)s>gsGi%S>=0|K zG!)(@mUYLRx=|z{v_U8WX@gSxRLtOjB>E{x_JgwZWBxhx_WWS*{o>TXu#n!wtg3yS ztpUv`mrb7K#0+JP$Yy`APkNyc!m_|qv?A1`(_PyHvmDHq8g?fLcNqBwI0ZB+CKRd{ z^pj6(zi@qV@t~kljPC&)EUa$_OBUg>reXJ)P{{G9?Ou5BU`N-=&8#h#UObw5YAjKj zNKV`}bX9J;X%jwJung8b=lEF(03`-O~6;6u*W9RDlmsIMXOx2I_B!st>wxl zr2eRas#fiC!}9jyC)I{b(=BwT+A1U^)BS=5FKSJZon0x!aQjLS=dG?2&#z_`+oqfq zU6FKk!TcZ{O@*v+`eTCyS)=80&R(pqryy0(0EeaS5O1qC6x;UEy47X!S_ERfXp^kR z&15C@r_q&4H+F*iMGvrSIQc5ytVIQ*o%u#o_eW} zt}rXDGRi8ZO))FNTn@tMM!K1n7nwPO0&I-Da>o5v>uUqB%()vcB`l~5Y8y#X`M-dd z%TC4`l&@0I5;I$q14~Irh;NFP-6mJgsJMlA<>9irsG%6WM^TzA@xq5E7OVyr9^ZrK zCzgE@XV(K;yTsm;%(K3 z%#K#YyzoRs9JBkp zj5doFuy|dHtnM<^XmwnjB@M35(s<}fFNez67~En$sm<@!jC*2e{ELYW;N?=j5TJ>O<-gOecSA}~q2D!RznelGT%C^|!Txv2?m zSW|gb&;8Y|YIG)cgHM8Rqn^j4#%M3?EjRg#_2=m01XlD}DT%U90>6fl2mhJTUQ((g zqazRRSyEMttyvolr%*$2ZED|$h7!Bo>yYZj_1a35E{+zl8xO^vx&Cv-&2)BVKVsM7 zr>IUGaR=JA=KMhQMGM^9`l^e3&v6kQEAPsNr2t3QP+P|Tip&4~!P{a-*n{W|rB+yy zO~S1<%yTkpS7Pm;Z4lC{z#98n0a~e6EUh?2{nyjs^W9m^X8r$q7smqaYSgfT3eU>i z)bO!x`+x=Yu3It_d1u$krW=7pcr#NPzZsp~=%!dDCrRo^%;Es$uRdvpFDub3w{Cpi z0>9-=8Sf-XymAEZU>YRtSC!FjtOx}nD@%GW>GvG3_CIBgxuA{&KM-f(<%1Pc@FdG- zwAw&*TS$1Y*D8ac;tAh}>B2C%d+n@H|1T*ED^CaOyF&cP ziU8Pu53Aw-d8ZIF9Yw0urh6^Z?qX3=Qt~^`-v~KzE#|aJW{aQ8Tzgj=E}iA)H;}6+ zY?+Vt{{ryTg#ZbUaRNw-iSH`O)WyZ`uO7d*&qvA5@^_AGCokNPPft|~k` z{t-}*0!x#B0lLQ5wjb5}?UrdXa_ny)$^-}}SvCMHXu&?D_jsrZbLZZN*J$`HwH^=c zq+5wjqIco67_A8FwR6D4COcf>O1CsVrlE+X79*bq0iV}CLSxeH7w#Xn1O&fqfd2RZ z0BYv3VfG1y04DHFJyfz&bC5Q`A&pKD;BK!`{{)ct;+FZ!D@|ujS^+Xc`N&{yk54v0 zySL)AKGV3L1u0HJ#X$%Fy&c;^d;so`uu ziCvD1g*#2AAt(k2UZ(MzV*ns{F68RZS35P&jx5a;FI7QRRoG4AfEff>^W059%8ch> zAcTFnd6J^lv1!li11x@Z)+5@6gyQ~RQ|$n3Z;r(GIw24;2}wP^MIXNL!viB03;PcA z*{QSu$m-C8V;@oh%%e&VU~%PQ>l)_fHr#nZez;q4ECLAA+YA!q zW`PgRNNS1{X!H6U(_!~3LDD?P;EaWd6qhUrFm)lhp>q}aKjxuMhDSFyBIAi+#p%k< zVL<&FFD`JN!zVxZbwDHe5ex)q1&H;>?M@3K_V(gj5ngu{KR|HK?hKoJxJW0Y9y#YA zLXKc9rFSh1+f9DHO-yx2M#%!tDDM5OAZf$~3XUj&Q0F|(BLsvTfs6>@HB)8rfG~0E zGPsPuK!r&F)xqn=0Kid`C5R-f9A7GHAgHzH(zz7-nf161P~8M%WhWZ*J4j%$#V=n< z>cO5zKUfjCR2%NN_@;}{rU4509+h$kbqcz7VyYcUOeu-XMCo3u=7W^Uoz_z7^Oi7T z*xQ8VlPlJY3*iqtmFd|ZDGEx5UrsdX3`IRwOz-g#{2;2Em!Lb-9~*A%M3=-sJRs+@ zPq;164%XHVDO^jTqbVFRb;}~woDl`53+t-{DZiaR>&w~FfR*#gA~i}nED$`MT+tP(C`>my zOm!+)`Zih3@AA{&!qoU+`|$VnC@b#NigsOnwd|!xVl}(m+L)mmj}*FQF3equy>C^< z71;7Xmpkihfo|`c!A|a+k*VAc=azATxvMptR>OLltsR9a>EXV4rOt)ZDOAFXo~=2@ zXrp^U_T(UdU(P!DTF(pKPc%>of9!=M$uVK?LD)|f(WM4@gUTLF>7SaA8&{ylk)RZX zIWHvD3gx~Gm+ftgxL%$9#Y`s<|LY@)CDfAep1rW?-DAt9rs*dv@`DTJ#G(_0p;NK! zwqN7BT0XHp$SJf}Of7WCyD@SvyXIaOfcYJ4Edsn{XI6zYC#5j+xd{MNmqAhMFHECU;B*FFZap z>Y~|_Q%~154-#P9r5t$c5tG#HqDS3zwMUbZN~cahVun-rqh`OmCuOY#&+D!xfK^Oz zu}1RNmxkJNrs$eZmm=xZHcbJ}9=KvZT)LE>gguSBrnY0}?o3F%vET0>aSqKGJLagt zfk?|ote&^nck8@f-#$4~Jh_TFhtkCIf5|X{Z#qV@S*J{?M zApaV5LFOl{>{;?|Vj~HdURC-f5+`_~Y^` zww`n_I8kIj@0-_FO%oQSO-;=pLU=f)58ef8(^Eak>41W9CYH8gfK_TeFI={M0776n9B znhzElBDv`l>ns=NXYL;^+B2awD49+p0tGWj8fm_xk~76JzenL1DCVSo_rz`+qWo*g zFv!RjlvWFj6bR;&v|Idcd>4__HYByEkP$A2l7oBaSwozET;m^^sIhw0z|e_v`-Z`z zkb8&5ho0XIXESmRDzb?2Z4 zuNZ0N$tU{(UpfsiJ4N32#sHpBlCIN4W8Ms8ovMD(CY%$eXY_8xEwxkHah_vg_o&Cs z(dm+>#G=#tFUJS%9V72idWm1vtyHKY*a!kQHSTj}#2ns4*5$qh&b#7_zyeG!JFC`W z0S}M3T?W2y{&b?+K2-3Prx5=eNvB_rt7nUzqYmrt6pMcplZKA7-{Wllq*C!(sQ<$* zg?g^8!4qb5<1<(eKRssnKgWa*J&~erxboSX@12YNtxu3Y?7Pft-k1>3`m?* zgIU}_tsFOWu)(=0lUPNg^}dCKMp3p}<7{JevrXZRpepX-m&ib>m=I0=jw=$y(%%pO zwBcHUok2=^gMo{RT~Glr2oo8qzcrR5{KWo#j&a#l2S5pRKxyqd@9d!<@|7*brd@aV zT$yy@(=*dCVecl$=XdA2^mdkC-~A>$>WULycrte}iZt{U`1G=|=a|Ru8Nbgw-$id# zysMz5H{8+dbWVpQe}DV?*JRU8uF6>^Z2^}$^UrbwwAu;BODZL3*ei&01e{e85W7Pc zn4q0<@V0e=cHs3DOEFjyZL4EcqA>JQmTT%kadrCC)J#K+$ce;?Nrm<%5!3Uu7g%{~ zC6!X~jTm6sMhx8Pnd$2=wjvEd84diUN{`!N>R^wfR1+p_1!FAIl64E(0BYS5F~%tK zBX#KLj$Uv_$|gj94K&Kh+;>Mt6me@7i8#$3N zKtYL~$ha{ZWD?e2?|X89Es%5kCd@f;49*@6ES@hFZIyZgkmk3!MP2sG=?*+E4uQW3Ag69!Prk3Z1iW_ zLM;=nh}E+Vap~sea(O`wJCy1c*gW@om-3^YvL-q5W>O^jh7g;=0qY+%F8xe%(Ifg9 zfn^Q0Qx^W`hu%Rpb#Oc(ob8h%_<{amJ{7UVFd$)>A!X)>pHVyMAK zaM;voZjw*fNXm$cBN6h4dD)7rZwS7rFi2QM+?w4tbF*%EDjz{J1d}`ihK|(1khb9* z9k$Dky5ES#87OW<1ac6>{!l{z)Rfvovi>N!e|c?R^)TkufMUbH~9Q zd3I;^Lc}g2p2k^%aH!*v{-9tZuDpaMAGM#H2|PRmtS0{tE*Y@wOBY5YaX(6{E|9Dj?EM&c{<-tyrG z-fKo3{&s72$0Lh!e^%=%f29NOxu3;UThE+3=d?TUeAQt=1$Kp3)xLWs5{YvAsU6Is zs@mPdki_{!-$$mLo#rWTa1QD2RV#?O0?vbu#tuF}HhpM8XCvW9pmsuA=?fr{3QXX5 z?xqj^LD=`K9DF5xdtE<)I$4}sZT1U9DQ-+B&quH(Cy0*5iY`<%@b{)XFaDBMO~Q-1 z38=v_{JKu;jha@ei{}V^c}|RZyzwtO%X^c?{w%s39CJD1Vhj z;1F2m0DGZ4rc@vn50z#P9cn4wB#yqQN(9W6 z0P4H0z9JXZNJ_kq+R5OU+ONn%M5b~_xxMKJF)v9sV2JXEzEG9o(evC_It@-&(56p#GdoHAa!kUvz z49e2Ek2p-<=kM>9dM5EzkufOmGBq(nXPZ$FU6Ht7jI8Y|r*n();@>9xjh)X%U$+yN zrMucma6YC69VBmiIDJN-fE=atGDv~_(?u9$llS`ifp~=w{=Aua>8dA(73`iTrbH-* zxa9C*oTiT9Jt8^O0MgDNKf@79_+s2*kO7AAoeZMRj*G?$JFYc;V2@ik$NWE{&O4Cm z{(t{>x#NzcvhJHosmvS=qs%C&jAO6kkg^UPGLB;lX^D{l2G8V$kB*{;Cx3qoa&6ev$Cw z5w(2jaHl7L2n>|x0*u+)*(ozn)TjC8Nf3}Y6Tm@DQK(!|KkM?6(I?m`xb|C6s1x$} zZU6=$%bvJ&0GGwgS~22hP2yyB&44K%`m0k;yVglkt%Sq*IC z??dCi_%5e|5m#mV-!jkQ5vO{=A@&cfL({7gZ2C5JD2D;2*zJ6Kp^VA?Mbfj(rUjaq zL__sMYF_uHwmbVTfFJG%sLd%I1Kz8tO*?~W>WA8OQQQM`P1lz3V_5JW9V-@d4*GSDtM65XKe(PB`O{d3U zkn9B~aZPeoaqoq-NSR506I((hRBKm1@n(u&~j?;0foWh!M7ysv7MJoapx18HnaAMT#KPP%eFIWa>xE4Nc%ar>ow3`}JH zp{sYZxk+`qSiw(*4>co%Z(%AKk{DvMqhDpZN>E;SV%e6VayKm{-Pma%-N1w=peTBg z6aAi}wogr!o!&RWT~wg-g89lqx4UA9I)ZgEc;Tc+%V2Sya%$=h*vZYI;>GbAL!ZYO zX=@zM_0s7keD)GPw1#LQCin@16zKYnitq*L2PXSkw9~R9&nnD$;2#E3&uO{6z4yCS z$jYj)+yAU?PKEtlZfP5hgUkH&*Ur{UaXeW2=p-DQQSsqpNUmgBeL`MrolUW%733av z!kex5Y{#oMny4TzbeD|KxBTj7n%Vfee{`)9b{@OHboj|xYbTR`KdEq2G!=2--Bi;~ zm-AjKe+#!%>3zKCo0`>0K{H?Ml(%X!Gcg}dP?J&A*$5KcL-e_heTl)FPz zgWosHEe0%zc3C9@%Rnxz7eS{=vCE@t0~jZCR|EZ@;wGKbSkIXe|A6z&v?GGY2nPk0 zsi&|CtO$aD&YJ=C=NGAKqW2)A9PCcpu`JPhkt46z%o1;CO$KgQZSKg%<=a&~L{aw6t`!!M2A$rWz+diX_ruRRHUH@04@iGcoJ%Q( z@^tsKD*W3}Az%G~JqquZwtuyI&{4ayNfu}l9Zqx{uZ(CRe(@BB@@lEFl$wxVyGnhq z1+}8Tk#NPvPb+x5E^hfezU5j|uipZS1IO8+7Pi*s(HwFPuF(GwqIlmFjitPIBn2A9 zv2)|KPqwV}h1^WKFmP@Ogkk0^yq8IME$5&UI>q&MW7BPy@5Qh|1_N#&Y(>e(Z)P7#Wz?J9U5~k2 ztbm?+C|u~OakF5@)Y#gVZ2m1~F80usvTi%x{mW}{H!DmU_t%;BzPA~tBxenv#dr#z zY69+82Aie#R2M+I?fD+0hiRG>=gciMM^Cl<1+ok)Ja^N>OdOnP^z6y6uVH)NV1^@M z93S2)V`o9eL3>g97a2ZxkbvQE>X}I{o6RJ8C?k^qaQf0Vsh>tnuF<>*P$hS zIMAcoYf+TY_XKpd)OC2YLBJgq^z6>Ptt_?|kMwm+AwS%C8|luW;`39VlErf5_iQAC zdkNd1fY*f1=r^jWG=HCir9$GOs2pA16q-Ev$ElF#$!c>~ zHi#Nz{oVo|0RaE1`PBkxg{B`1duRi=0JV^n%vk%hWGT+&M1pTxDn_GHk=<-4%4rJP ztA7wKLu^wX)J7H^Bopo=08epPm~XGwp8`Mp6+!$?c3@NDpxRyb&cTDlPl4Sx%|Y4| z5B)NT70nK4FJ2qEVnC~#iOa&+OU2)3^5=QQuG#d~DO>LVK0*9-VP zkP<2W9JD%(Y;Q51X+J>6)wR z>xk6%{gs^|J2fPP%mR$paWsPHSru+oz~@;|TU_(3hFTp;Pi;c^SzovGPQ)?yzI;aK zR{~FTq(~Z3=IVTbw66Uygyyn6TKT%+GzpHv)`Z+kd zZ3ioFT6u*UX8veA#53e5BW5Iwc6mjXl&^xU6Z)H$aZseJ6AVjZ@T1bd49HcP$XorC0P6Y;^mCxZUQ{WOg83G0_3XL z?-{v+*e}w=Tm|}x+On_S%oL(yG><&B{AU!i_WW|mhwM6Rzg%Rr$Ij@ns}j(~y%QbctIo2Iv7 z@YKcmZUp;{`e=Z7v<-SeoOh3vstP4YU$k)$keD=GPiXFe)cwk!z*t&D|jO-)-@T! zrH@?p%}KbG$h_GRPeQC+Hn-E*F*M|2sMzSvNdn;wjl*31+ko*rPKAwv^Jk-!ACwQ- zG}usUnd02=HaFHO5DH=4%Z-9ldO7||{AX2D0uoy}>WU8Ol#I|UiEF<~sK#&pY~qnh z_(04nbs;@CJ>@M1|NHNZz-v~2hl+n2 zx!z!_%k*+kNqqjt^L9=~e3|_!YC8D&-Q;V7e++t(He|i`RFl@=AO|$NX`I{G1k4h} zlf>VwVCV*n*qHL2RKg=FXxS>AZ)D5>!(j8~_e_jN5WeFy@BBrlX4Zf(UgCEZmUGs8 z^92WbY2?h`*vSC&@sQ${*)8Kp52XLBd5Gh91+tOO#Wvy_x4gE!vptYh(u)hroQpec zDa;GSR3{8;6H!`%1qSciJvaL3hUF(6BS4zD`_l*`!`*!0Zqee>L+5~kw;bMz(L@tv z{jNCX?p)_|%tD z4Sv1=_dRhuWSRA^j%EWUClKA@9LADlJwOVYoJl#aTSTy%u{?Xi<{G0X&w9L5K(@tp z&o5KWDJ=+VV!L?eNs0(r`z+R`?6LqVu1YM&!6wPqRfD@LI_@ntb5vba%*855!$lw_ zXM&9usri0KGT>Q@ce_^hw^#co(H;nKZ&GCTjtXyx`;kWrU<6!%D9xRsv9HR{(B|h$ z!#%NKj^gerkQu_cCBBVxP8V2Nr+F_8EHT2i5z#Y2THq>mzUl5APMNl)7ZQWgy@SG`(LU#=c_ zYc_}(EC7^^;l6s=^6}ocoz1m^oBMz8(pW~hb2YQzJ}Z}o0J+D5@(1ny*wD84Ik*@eorGy4K+dyfuzSEvRRuZ1-#(CH`-UkNA84(omgM0d< zpQjIoI-A~P*N3rrx7f6CHo2%%F~r$ZQop2T*zlhG=LAl1#=c$v6LrpXEW+Q1Us>|h z4Z|vD2j^)fSpFi65m1ySGG3CH;#ckhDSLmK7PwfRpS*}3&{a=J{>vbaX8PM0DAgg* zvNfW@6sk0BM)OSm`S7JlIqqzlM(V+vDONUT_f5Al>9usRA=+w()ePH z$!squuB8~2BqZsF^6?7LUpq=2U(x*$ZyOc@G?Vn(CObbEE!-a<6~avH+Vc*2hniy z!nd&7>=87>1i3F!kFY1pY}cAWf)qyMZAp|y;oZyrs*jSO?De^KuOBl8*GhdcJ2?aQ z`cdxP^HZn<2$($_Gj@FE%{BU5=DN}wp@Vyvr6+6=YXiPoD?&PB`9bfmkZ$LM)fkd5 zo@3xFm#@u{`(lfq$0fV3iSW2vsVv~|8W-JKjjR!*G;&bCnTKVonKOve;2Z6c!UXyiJE)8?3CJ)a8^oCk$GA_4&HQNk%+-%-eiRJ*>RV4`MW7PC@A9v*8LyU4F|Tf% zBEXj>m!*@;@sBUC*Z09`?VL?_At!2ey*-a=`+nBiL)>oX40?ZFkJ(d=^w;_5Rf%4R-M^B zg;@7H5tp5ZDQlzZo9*ncwT1x5@JJk0W%6HwE=`3D%tJqKL{8vn_k#PGhMUNlUM#qM9)M1-|GTPrskg zhjEpE?@UI%PRGN?mE0&Qm)6Aa62yO|XaN$JNDgQY(JopH1 zk@h9Rp4Ci*O+{-9kpM)_myGR54Vj#Z*q4H8Q@m-civL`BCe)~jHkwlwx;|6T(LN49OoXemnfKOJ1|H-W(T4 zuRXAPDOmIHn5^mc!#Ym2;vemq>e+`?$|z-+&4g&R@3`MmT%RTV)J|Ppr~mpm1sQVS zgQLaZizrWaQbN%2ScT<3jhwt@oR!`+^Kdy(FG({}WECLy2@rUPnB5^t| z-z3}TL^-A9dZq|wh9G=R!7l2c+%T*=Go&AI=^NMxYK&>ltWlqM`V_ix0i|b^Mof7g zsEPcj`SslTBAfd{{}t;lE!4$F!OuX5+j)l2c!4{r1;++w@@jsyxZYlB(0*0cWB?`TV)pyuv~B`1KKiL|>6;OK zefhj2=RzG{{9;53d6#SL(e!qB`=VuEYRQbURhO;4F zyjxY$Gh}*OX)2*FaNi|l+dHuY(fc{!gR!h2H{V&V*c?64Ln4Iy5O@Hk-DNp+CK1SPnAWb9*=d5orB;j*)lNC#(f2_#a%0=JwL!Lw1(aE#Fzf=bbXQk7al^o=Ul96+{Bf zUu}`7Gnh10MT}YrGv!WlFgLwIncXjJVIldLG_%khW*f_?W7`;UdO~pfn}QnVZYTNhZU17mYO4N zU2&ZO;5kTK+lqR7P+Z{7l@J8UHDFz6lk8#CA5Q+Xv>darE<&~F{^1i&?{Nfv+4oEK z_zo1~GPf@CbV8YmK^{yDU8n4ArWCadIbv&JJuxM&cqhMrt@!Lm1tztfl4wN8=3N9^ z<0m5uo!ji#D^E<`j^`W6FpkEzb9rLLff6CH zMW=j{p8C=G37n4ZY0!0C>Og}JTFtMw<@2>aHo+Kdi^+cP=vEbQfk=q0vtM41 z2-y3|$fOVGyB724Hzdc1uR{FFvv`OCh7@z4yiE^7S~Wa55r5L=`frXSH|cYnWlx3q z;g_lvhdH?2S1I-d#rNhvy6cx5`S&Ny!_ryVI`oJAgHnvmzrMLIu%7j5$rxm!-Ew~(aKtZS%5 z!; E%74Bo{P0z;CaTTeu>{-9Vit|CfMDPv9hP?BOt7;c}gui50FQfi*SF!x$uTf;^Q zMJa5;!=X$!tU`|XX<6;)(}`<28)f9(tunIjt-e_KoqLXRsv}W8u)0fkEhGQe3yAWD zjWj|&4RmPvm|~P58&pIQwDZ-NVxi$*4c;al7Q!Z6Axf_)=-S%NE3Ug069pxqI@5{V zX-A}2KgqrR6ktKGB3Sm=^o6H07%HbmoqJxYbf5;E&B%{ScFl0(!<{yG>wpF=F*`NC zHzjkN+yB~VTsU&HYFDG~o!F-Vc#<+orKo_1ndq*R72M^8PS)bPHF&>xD=?heP^w?k z^%J5d;He+yCt+|q{DXED&zRO85L@!L$7=Y18LJi(FV}gmnbY`7r`^~J-pns&mgeH> zlBPNs>|JSSmLA&{^jybikV$5KplU%;wHYK%+ZNcG$je%eKPX#Tr09=(b2;v3=f6I` zUL=3q0Tuyf9m5+ekC22*$_$XkGSD)6zWA4#MqjwuBUH{?O%<1rlXgpX%Hj0>?^`&$ zzprEA$MTC6uj-=7YnZNjiW)|K?}{VAM^Zm1R?J?=!otJG#^qwv*Boq=-tx1Ura(;_ zTuAIe@h#|KSPg}~Rf7{QnE$g6q?JZeoad+F$D14)fk|GR&&%@imR+tyj*C>to*y6z zt%jzM#$r|52lt&?>L1iM0ndP$`m6*~q&#N<9R@8vu7OIU0vYmp1xSXEBy(&I{GlUZ zApf_(HBN!b3^FT2XDz)t34$vt85yS=a-xbJX1u)Id(CqGEi49F7^6=rW~fnaqq~0u zGM`FqTRR;u?dWf7H(0;x0k4Qeya=N+kz^1>e^RPlY#ns7sd#<6QL>m#8JJPK?g-*9 zoaMbvy5+z31xfvqGrMi9K^?LCNF70cq@w$|Mz&@|t1X-IHhXWbFO~E_yg8#h?%HfO zbGsZT4lUhotVxT$&jtdN?VVtJokWmdI_mr8tmj1F#l;kde1DAxy;1g+7V#x32I&0P zfkNQlWvb?gjTWdZuc{tKfTN$RehzKg?=pLB-lFr|o|18Wk1?LzQAhu8_e|8({>3hW z5b!e*iu3Ewe2BgEFIGZl>rA;p;y!~d{WYD4ats&}9V&JfNQqxiueB#XgIqlLakbO8 zZo~XrO9B1c+ROQm7*rWggHQa5ZZ0(Aq=v`7z3po85$mw4w|2ItBP1%x$8H)#=3?IE zn^ZnnV?Z5~2v=OfEZ{53o@FpWjj|h*;7eKzI zcMS34ss-%VSNkl9FEK(Rg@hYmE;?A>9Ib*cdfK$va?V}XriA;0M=sMWSH49`;=V{M+|MsmH||Mvp8>5mieri?ulx4gr%^RC_7h>R z0l%YQYzXg#kCOhxb}~jGfr6~}bctf-Z$=YDL)_JfT)qmJ+3AJKB3EK#wRy_^vvz8a z+05+Cg~%}VZ220o=IIF8)nBqv%iJlR&k&o$NAE~WyyF?d*k$_`_}s6P${4xOY*o80^sEGwPs>Z z8K~+3*Lft6mGBBfk<26+Abq1TI1T+`=qZ~K8m!p-tM}Qma>qIGtFAlTof5JFXlhef z4*ZSzgSyIT4zq4&YGYH++D=TiO(e_~646}7Qh6h$MC#ajM?a+N7%#NW_Yu@lzG}(6m^B-K7=ooem!}h@YYs(URKH8FxV>EqA)dQIHY_)xbM!- zYXaGf(X?u%ZqDM!H;KDVGG|2dTz?{Sp8U>`j z`9GiB{o>@krGs(XI>kG>F=n-y!RBWEJn4k~n{?KIgY;&tOEm$+5_gK$>52Uc&Vb6d0F`-bk81ev=rnohpz8 zO_CdQSC5|BQ9-|4fK+}^0zsx7P3v<0Mt(hF{BoX{v{KcK_^3bLdn7mhyET2F0Ezdyt}(Aio%$S=T3hL4Wm>ZTBaHETH+~s~Dk;{_B|Wnc3-mcAE55 ziMmeq_CtxT)~^h;!D5q$7ImKCl3@?A|NQH7Ad}m=p_+T-Bi_WdI9|Tz88XnF_4Qfh z$@?XkcQxyidAF?;Nmc%XhQ=YL%0=!9wb9%3kYuskP3es*(zSCS58c&KV$c3@;WE)! zKr;1MrkiAI`?|oZafem^H;0Nj^JWyY|0SVO9RxV92$IA>`N2&EwqD}=M z@juI+@_HSmD1%-3sDbbj zGvoq8C6>zi$|?!^dC>@+Vt*!Zi{-v+^xHL(BUA#HjG^qmetUZYPpSgt6rGmiOi7qG zY*j>mao9p-RMB8HEWr}W=Ge>8o4^rfZp%B`T3OtkaJBz+uWG<6H7|YJGGS6}H1qC! zwhiriGcypea_G)~s_X|M5;K?+w)28*kv?XG6rVZE}kJMLS`gB+><=}sBp2WJ8X zpCuV7=R`#yu7yWjoz;NW_f4E_@P1?}{p-Gsh<&4IaPm<+c*KrE>cM=Pp=SB{kKHFL zTy17uxRiiE8L7e!Isyg^ZWIGvP%Oqkl0gbJEL%QyW9Bs6_cjRc1P;284sI7ft{Ho; zcz`Hv%?N{&|3GRdjslan18b0jUUr0u`RCN~4gB#>2JNV7_z_0z`uHaJ1Wy@Zzj^2R z{+Qt*EA8+mxU#X{3$==SG}x2#*=bM?f!C7lD$3wQFh;iQd{QE4J3l8Y=}3e8RZ5!t zNmTtSlH9}#Ce_MzghGV&DI?mqEHO5boMVi5q3Fyz#3U1dHBzZ&STxwBSp^# ziCtTWwKF#(3bKFi^R`-C5$l*S_G&D2C(btRhjg9W{D{3GQ?~0RQ#Jk=Q%O2j?M|qA zMh^75T10zFnQb>5hGbS;tl%*Gq=J7xcq7;Hv^Henq&535!+;6Ul)TBl-J3M)eMZ~! zsMhO~=l0a%5}octwRLs;;pXzdiH*v!JVj*CM=ZqLfYZq{<()S=wr$$^RqHJ?d|S_< zKd}RQC3n3gpnH+2in!=}U?7ZT7yPdA^lwaaaY`GTrxI=_8lv z=c>s_3M|w7P5G+1{0i}~w5m^_yUdCMS_bFX|M}fliqJ_`oct9-o$WBH!brjg4`{z| z9_uXyxS2NZv*kgS)J9>uMC?JZVJ>cXW)fN6(euAxGRaW*@JxGcRC50yG;8T(tZ6~%88{= z(RSf6CC5Xl7lu>{IPvTjTXR>q#&!I6&sq+ha!JxS&XgiOVYHj0^ck3dE$zwzFQ`g^ zfKCOnDYQ=CvKWweoWC~eL_|`S2aGK>n8GXH)1|%5kbAZgS#vC;`m7tOy({&gn%Z91 zU*#_|H~^J#Y?F8STplBhqxbXC19R1C_J}Ec^yU|oP&v}iS}rFQ%&o?HhV~w3N)Wd0 z!93QxkXR*Q;$p^FH8=Byw8WMlGl9j_8WgsT@Ahm~kq!w3D}rDk_qsbG*SDrtMH#0n ze8Ru))zsW4=@bF?sCEk;)9S%J4;M?Kih%z2QwVSSdp9#Ll~-n1t3v@V``Vmm>I-hV6)_yyhC%H(Ia z2F(s$P4rVrasGB)3F?R%uby6B=Y`nBrE=}W`JkBOTN!(DdFe+a`L@?U_e1Ol3kk`P zfbDv2_n({g#%aeBj`P6(z`vCueJPI8UX>rX+jwm-BS8|J2^v{9b_+PwKz20S9lpH` zzkH{C9c@GWlb?gFIr;nfTHbs2QVw)_GpcESb^a0yON<@-N%Lfsk-Uag0dm^zH7}+H zkFf*pqvJ!444U&LDxN{0(ayAmTm3M%?|&v_gdLEPFLYLJk{!Bo|6n5~%z%DRG)oef z-Hve~gvpRIRTB2vr?l^DQ37fthEd2kBTvN?iN-56+P*_YCM6N)gZCKy4xk}i?C5)Y zh28h8l5Z{I@%Q<@3@s*?%I5$Uks@6$5}vki%vRy;W$?)r1%5j6Y4Ta9)khH)Lr3BE zb^Dtm;)%X^-h}S$d$v zqR%&$A}$lfxM=0t`%KTLs78>CzwQpU{;wAhHq&(ekr#YTP=Nj5cyJs_m2vsgc-yT@ zzO>PiQ{pYVevb$(?Ke4=X1MGZF5gLqnf;^6bN!cmXaX3so^f>Pb%CCW$q4PL3JAY* zoxo}W)qiHLx^<Msk*(*+l2%jybO}K9f)&istW(-rtP-U2-pJ4 zyRv+jGu>$c?)dl2UG|OnspD!YevJ$GoVjv@AN!v}oDQyU2k#l&|BIf~3YtGf&0@H; zrRBPnZbiRqng2?VMAGlr_Y9i0ar5uomM|lC>KDROlw@c#2b;*ADA39gqAl7fpZv!G z>Ah7QJAx#y(+%M%cPJw9+V<9G_R%qxSl{8XS4JKek#dJA9&ZzkupYWR-<-8A08#fW zBV5Mp8FuwZy#w2{>_?-Ta%Rdm%ZFK%f4md5QIyhu15Fuu&22~!?R62Qk@}21HIM2v zKd5ImH=WTWbu8v|z*=~$wBfCT?P)FE$5Kzs&@ruBcZ2_NKcc~#>)t2SSeWe+j`Ihe zsmPpjXekou><~U96ct1UP~9)+K;Ofp(yN*%yN}F=?hJ9>PTnl4e6A;H&w5GBthb%uX$S+h~Xelj-fTsE7Yb7RMV`yhhYvYYDsP%OjTg9n> zpYt@X9o`e`TUzUKR(aD8U5>%u4Th++Ff2LmJpF5a>aD678i_rnhR~=xwQxC#ZGlyG zMHN#-*s6=tfZFxr+oyw;fA*I@k4xy^PcnBRJy7uig;+V>DSwacyRS`0QvK^Dk;raI zC?)e!jijzE7N$zvU`$uyTa%v*TD50^3!fCg(%?+OLLqx&yVw#BR5 zSKFO0>}GxG@Lo$|7PpDwNyzmxw4|hmLCS$E+xS2aYr+QXyzj3so1hEYflOYb7A@I=ga6Qm)9oT#m*q+DbKoUw%EkWV9u>&HFsI+<6PoAsF1m znmQ!DV|==ln|dH@JN&EF&V<;d4#}+Qr2Vsz$=`BG_VBa5o4M)oH2oxe$nra`u%=QC z;w+TuH_H8(HF7+zG7E0e1l}uIo9c728wQG1s{uP5mYRMciO=+qrfoU3bZ)E0czxPi zsn7SRPsOTAQ&Lr0ak>xY9yV`oENYRSbItNU%@6FyFZWMU#SO6ZP1w@Prl6!EWW$F13V0tKECkV$KqXW!pf|GiZ-R@C$%Rlc-`%8>$a=>P zKZW+0h*96asPxUUl@%;uw*J7fNjt={rn#{W`9W(%`SZpAe+q#nx@Q2Gl#nSz3##}V zn77G_Skt*8CB=)#5IAfw`>R~S1}ok-q$7jO&h1{|>RbA*n`yur=5RRW7rBk4wiK0A z-D|F3_5xlc)zFuv3}GCfg4SH-h5r7=$jFjx-E_DElR@mdT%tCJz_#~ zai|14aT#M1Wo&v$1RSSn37aQ4yERL!de60AQhzU%w4`eXUJ&|?;C;}^r7gFR88qyE zW?}5&-6bGSzOI-A&UNsdQ^fCT(@Z9V#BDgYem>>!A;%am0SihRx&au|jrdzcNDn<` zLmFQ^6x8)V;nieFUD>TCC_xd`1$hv`B(K>7pzUis|McuoURR}(hm|~Pwa+TS6^n4uC- zET?+0ZgZ-#t&rFL@^1Aawp139v?(Lr0g5AL&e-BEA9P_)o_mewWUI~4ZU<;Dbws_D z=zN^L4vp!#t|k-EY0P+77foXb!>+z24;@H*Eu)3rdLTcB}h}+)70S7u|eZc-uc|bc4SDDjLB4e&|KMXF{l>a-~*?MT55} zA~Llx1$?5ar(xC?e$x*ZE}bH-EJ<UQx$DX|V&!+GI1% zwNX&=DM=h;vDwQRr>#TyE)*z*b(hSie{wp>N?CmCWA&?mxcs3wulwz{4g+)OGQRv2 zkQRC?%scIrn$JC$>QFT=8ShWMP_@87Ae(eGcJqx9^Tz`gr(f2uBKB4&rR-XU%KKe~ z2d^xUd3Br96msie3EtcA*nT&C7tU1dxGO*B9QNDLH_+kFeyhj!lQQOW7j8J(#X{?B zQd0(ZP6~+rijn7tq}EvvUH#B^MJ*P-D6~ASH>w`FgmZ%6$90I!>g4Siod1G!_v)tI zS9aMAwS`aExxjkQOjpbw1#my)nLhCmP7Nqyf2n$>n!|`@!ojyKztMQnozVnDBS(DK}1t@$)Zk5 zc{5H+H=+~?=1Ds0M~obG0^5>8LPw9MopR@mU2g2JpK@eZY@KbCA5xO13t>F*`0R~G zD(EQ0{vJX`%cgRv@qN`|W3}3_{I|-+e!DSRx)xRTrw|eySn$+ZoMY+f!TU;9^rBdF zPHlTTb6nXMC9um#cs~0x%y)PkgB>V_)yuxcS_zAoT*ZNNRMfDrqN#eYRkPzKhYISe z?gBsk2C0eKY7}7Dv%%T+bnor0kWJH9xZbz`S>Lq!fAKml^*dBQg?Q%Xt zIzrEFT%G`W(ZL;a^|GxT9WOqG0>1&T7}bu4U~F=O>v7!a+_XD0ax9TV+R{LZ#&cx- zj+9%J$>Haigdh9~-D>wBmhocnr*?u#KF=2t32U*W8mSN-Qq47iY8QM_%`Y+?Me>Lx zIk+j8pv>>Vt``;T>`m~j{b#%cVpo9M;t}O1W%;Q&L<8A*+y2jaGIJ!aYA`3Ot_{51 zLKJRSN&WQaPevFjh>eRZ_|V+UUm^&jjxr(XsfQKL&fY|cqP)`Z3m`&M{V@7NY0=kG>6`+0Yq2w`b-&QRX# zGcFj(E&_Nbj@CX1_fN6jQj{Te<9ve{M1#jT=S|JS@B`~&%r?7eJN&ZSO^?xw9V4qO zHC4*y%32k}sS2SEd>oI&NvQ;OAj6}{xY^p4Mke3T9|^3>g4L}J-`xD2iJiLfryv`& z_6Lfab;;U5vDzF z`p?4D{?YFMNZSf9Kl8s(C6NGz9_Y}y_5u3_Q8+~FyhW>wmuHgMG47!<%iSO*hmC== zipT9{yanQ!XYD7#*Es*h3+`MnJ&I$y>V`HV!a4Ncj7pWet65Wb&)IW2dA5s{qu(v4 zn&Jehu~|30+>eU#_b*gJjZLZ05rQ1M+@L=nElX<|o#Qu5y^3+^VcQ(!u^ZXYXU0`n zAz;WE_90hHl?1ijs2Bd&?N$9V4K!R_-=na;vU;+*K;cJ!jtqDpGn&T_Q?D9@4t&qK zG+wOk0K{{Rb~%x-;?NDb?5MnO!rnFZ#vRIK`RQiKJxZ3x?d`iYSE;HYYLRSC`)whN zt+SgFZxh*$zDNz4Y85E_B12sorDU5D$zkSgnk4_)TC6W?B*r$V-NU%0Qd3@EP^Cmm zfziYUO{dDH16m2TVR5`E0HXb$q4n(5RR6n`pK0u)ShjKX=ld@!>3^SZsoI4kdr2UR{8~bRdFk9wO(-}C=PQ|NK>+VhO6!9?Vmzh%Xa$o4fG@zhS(a?$nJ; zL~{k54}mj6yz)TzfYXE;I6^6mZw8tI&(mu*9uBgSGs zGpBDrX25;do3DEmJxBkdAPs-*`|tnS1)cjxm*t|GDDBj8ZBEgvO&!cKD@i@(p$SfO zS5vX^XtMS_>`e_Ni9*NaruTMxL$NCrDSkd{=VZ1>J;<)`$*>noG~aDW1AP1 zX{34ZCJORus+hX!cg3Sd3X2*xM|p;JHTADe|)Pgk5*FN{ypeIm4R z>)A2+gI@B|sACS1<#1QDPC+xewZ$(X)Gk;Ef_*%9cR`EGwky#F2yfdJhws<902dRY z)Y19L|MdcZ+eU%Nzue@JKR?}>RS1+fotTR4)_xl9o#O_r3jgk(npOQJXQl4i_o2ga zdx4={>*%80RT0XyZ3xU3m?af)j8zSdI8)aam(*=PijKGV9e&YrTyybb1KNTDHzDi+ zRBPx8$59*LM#pHebTNEdkJG8rKkq}6{~6g82U!k^;n^})-EFsrybFfFlh_^a9hT82 z6CL2PWAZ;^cJh@}w#Q1Dm(UOq*SVk@U)*1{8LFY}3~Qq_+M|ZxW>`-H(WY4OtK(=( zj9-siaY|V->b!fRpX|05{|N2GZhA+;!9&?dc}k|S#{R}KZ?Ss?H+_X%lkolqSyY$& zGF86Eea@s-UbDmTY}@|=kF|tOwb0p%%g`ygdZo|orZ?7=KzmZFtQb>OcBoK+ZJ-B` z3JJPNg{`{hisn|h<-lDu^7~GTE-o$Ruer7_yH}PsD|d+pt8_2ot}&Pg!pFKByhFox zJd^XrALBAe$`>Vl=Ddhnpor?E`84AaBSstZJN1r>7nTMUmA8v!=P?hDg5tnq%xf;D zeYuPgp2l#H!oF~Bg8LN9jJCpI=kt;xZq&tkfU~VCtBX(Sr;@4j&E0Wt_!6F0N3`P? zbFb);C60c_{c8CR`^k%WX0@&!UT#xEY({Yijz`Q(Z9rgt10&T$ALn6bbCZMU##mA1 z@=f$O;@shGBFdK{jo)ES>ghEi&ANHr*o_v|pdfDlZ_%_{g6~N_KHWSUQ}-e3c8F$Z zx%HDru)m{+Ry&!N=C-~QXJ9Eem4D5S%~4xrTj`p*?Me2oBMJV1Z?c@(*OD&p<6c?{Ujbw(Cwtk*4)^6|FQt-8r zpZvwW^r=8-WF9(;lPcm5!boiQxk~gJsI2xMC)J^AK$b_>nEx)a4lrm8&xWf>Nl!uG zJ+Ml&zV}Dq_tQF-f;VVv?%&ft%Vd0reOpN?tJ8QhI?P-lBkwdFtnoah)0MaEVFP`5 z+lhp1<{6=1TbD$O57U$dF+}tWEuyVDW=U1%`pvw>x=>QSnEd}7hjnnkv`v&Wo^9ll zts=>{rxzuR=Mt-37d_{&XN^&%M8)1ZBKF(qviIFF_na7JQYMPUGg^jpEW574_WkxZ zGh{=cMAJI+GSS3(Ayo4XpikS9`t%;u(YUx|HAd>Ulw=!>9EM0eBQvmM>6olkq)0@2 zipMTn^~Nm4q+^-#vm~RbG8R@st|?=%%*&;5dvZzva%&3-w9!T^QhGWiH2+^?X&s}Z z4o#QF?H<5p5nja-J(~jQO9tGFLs>;6mwozX%3RGxNsRYO@Cvdmc$`@Jy0Ho`xjoul z`@E3N^5;Li0SH|=Bm)7vK`}M~#mibSvb%8#w%&0P-lug50Gh7*Zz?;S7nN&MJpqt_ zZzH=IH<_PzyXdO2+kfJy;cx%bI~PtLMU1!V_$0F@8v88o{%xykFiFX~DCICWh<;E< z2CvIGAC?h5j*~84f_VMsMzDXK2y z2=nvC@i0YKQfTGQo)gS0`xMr1UH&UCV?YgdY;?otGh}_H&C2+re5st0(302rl*dV) zxBqoO08cp6qjIOojx)u|qDrU<{h@`*;Jt^JQj+%{VadzW{T0U(Yoi_(RhvW0+7}+V zBxFR(PiED^_^{UkDwi#`jvr{urI>9IJN(bnvQm0xjJh?iV%q-I$GIFe5Ggwf9&L_m zes`0-+QSPF5Q*}>r?w-xTXR2o;KbqgJ`t5^9NN{o0(%qdb)SawD3SK(jCIX5|m zl6(jA1{5!A7Uk{Pr4HdlQ=(JjGeg>~#!gNxQn zRg~QMT;ot@z2i`|=u}kwoaB(}ND&Vn-{wTn8dd)d)g1Zr#L++h|GCo(ZVjv_>NI7nEMEOEv=G`YOV2+bb$>f7u6$BRF)*6oxJF6~48%O@kW z(Cd*|i9Csc*H0MJRgK`uath=Mo7?=z22>vM|ab7XCb?TA~|O2RoE z<-62+ip4$F$b|)&@d(cjTXw!BmXS_A-(vjmBn=XS#8jXJTIU9SNV zw#hi%jIP&xPK!aJmJ0S?hj$+BMr+}psJ>+_h5h%=R0XGg)n_qsAyC#BKay}d70&#_ zzO;+MFEv6dkC&v0+3;@uXKs6$P0EPm9wg=}9NWD4eSb$lW-F**-G1j7MJhH|6ykkl_* zdeWi$`tsHIUG2ILZ?SKb5?#LdJ@Lsp_Ww#1g&|O$N0U zcRBgJ4==}EEGHad!%6=8uRNy8n##snixZExy353*z5hImsj5y^uR>ed$gh8Nk(tf7 z4e119i{0viO{LBE~lGnkZ!&XpIEu;AzB-&|$u9ff$KC1vma_v{toempJBDKeUE zHxzzVVe&ir_>H&AKFe)rQq6EQ|B5@l%?w!)gGt;^7aqOGwyxbog5e)yo;b{k;%hvdocj;2{3Gxs!<1h|c|J2xp8<{; z4W?qAuvhEeW`NCrv9xGlpibkGv(BS5F@q!f3 z*#k)OLud{@)`JW{1UPIpbAM^qC#7aHXW4FD-OtM3$BD$sD;TH#rIqAMq^1O|iClj1 zN$mGwc%k>|p94u4~pX>=27l;ak14-nCdmk2_H{f_`&n{YGU}1K7oVBPnDAG{1s(aO*sXwj#zI<LC*{=x6F(X~8k)Go6#eg}N5 zBSSwzs#cW0`rq7k-(6^sWDt8JuE1>6rrLx+OsS3tIc)YY$ksLraW{?+dzA%g|6ktw zBeOdt5w1zhgqL-jBYrnrYC0grIiuTNvLjnB2dVdXua5kRIKSS&?l-~DD@5#N5hi|M zX{t)&(5f8s?ho%!UYbP6>`gw54K-JBvPem8T6qkv?}vT=N7z@uMY(nT%798rNjFMJ zN=U~j0wSq&OG3U|96--r3_jO6r#8KOH8g#(owj#95e{JFadvmIF0{ zRjnSEPy@?WsbT^dFwAznW)$D0Q^VJnD#LsHUWCIHEu6tHsO0zz0RFk1M?mV&54ReP zW;#cvv=tfT3qHPllPL8Wfx{k!VGkY$!`OVG`bT0sON55YsE=vR`1gI}7Y}!!YU^0; zqfSa+6iVvTdu&`CC*^3L_PJF0>&}Cafz=H}^EqkR@xX80RVSrzB@uTtMQ|uRJ-z{R z6e__Gs+=^OKKm-ocXG$najtI2qd_R$Jd-pcqnNtFGFJInjX6VQBf!|x6RYe(4yOQiuQ+<*YKO$s_HiIC+T^@}*IajN&QxM^U&USo^7#&JB;*5mx1p1(6b$I5xaO@%z2 zp@G?Y++li$9XQ4fD*H}=AnHTP1a<5G|x{8y)5smX~w3oXoS~aTs_DNP< z`qV*gyX8^ zVJy(999atjjet!de?R>wBN5-AlAn(5nlF+LSh>yhEx!&-TGZ?4)qM9EFPLuGJl^vi zT957;S|8~;OnS}bm=bp&ko|eJeime|aIjqVHM{M9HgqQvN*(Xg{2?qYUW--nQ!1%h zlymECd&8ey)%Fr9?H=x`yOpXK?esJ6a5M#WvVEch8y~qBZ2P#M{IKbx;7>_{I=<|T z6DvE`IGg^2q9^!=#Q3yp=uM4PSnV6)4qf&()C7tx!OVATEylJf%Kx%IBXBbN9x!{X z9-KEd0>WxBTvlhzZDleRC7!K4pOHuMzKMnpM@b}p>TmYP7htw(H{0cj&Gi@?kRQs1 zMF066Qr{+%+?cy){?8swWxPw4T~v7us)@XaA+i~Zm|erZ{!Nz{euT6z36?MR!;xqo zcPo?WCcoBCwN?p`oo-nIb9Fd<@*vl}c;^O%nnhiHp3Ui{hx)wBgaz}&xrxXvm4!p` z@l2~lv9bI&b1a0v9#u8`_<(B;xamB7v7vv9m#K8Mc7^2ImlFRB|mYm(iq9=CT&UkFuRJgZ4|8cT~=e|;P}N>&#q z=VePQ{k}UL+lU9@xmfaJq|}?6ZtuoyheKLQS3$c8gza(lgGP=GZh}PP94#v`u6T=t zZvO9lzaIC?=k-&_lm(+MS7$ZyBIbS{MKp^jxuxP)B4gce##2&XCj7ZR&&|ctbgS`s z#!(5LtZ=K6K&OwqCSfRwq-9-|@pv6Y>gD@&J^FlGl8^k#bB_K6w0JWbVqv=_)^L|E z8wC9WeMyo{%pJ)=*O2eYapmKsd5)@scyfX6dHHUUgHki_wv!-BY#<-xgvaJV^P_LP z09S&L8&l1g%@QkAmBBH|abb=qh@PX>V|l3$zdgsv;zM_gP5UHl`Q$J?Vo{O! zw3#-kZOO%U^Rkd8Q9a)*m$X^uY)0HBGRg4z9pPz{8vAq3%f+sg(NByOALy_xA>KuL zurbj2$++fcd0c1gqa2h&FX^imPvHR#{){Z^d?@)LGeST;ya9~@#TL`^+1*_(gk6^r zC`F6xXE~5sA4?%qOLQRNA(bF6ktXr#JQ01k9FK^zPeo5Fmvri33&l=~miwrGN1x`o z90J03hhIknQk{n^C1%m84vtGJ6ZzTdCvk@BGWLr0rW+$!Y(iu;{9Sx`X^U)Wf|;=b zi`-JDbB+Rhb94e+pU^BLb=soZAD#plL^cR91>96sGaS=7JB{8wpjfiUUQ&x)@QXx2 z3=BZEhtB)PvIm4^j^r$HGDOy!5FlVh!Ezwy@cvn6e471lU;MP6*g4{NA_5%bSwLy^};#Jl=taV~(Sl+1A$tI#u zq(0h0(eYChl9c4UnP#UF3|bjAe{u3S&>Vf|$n?F1tA|%>m}i+lR=@f?cZk)j3?X~a zhf&m&2>Vl%xVim#?#A$fNcGrv(t4*oqZ|UOzTI^jA2g`lnPy{q5y!amxN>3~Jkba! zNj^XPIQKn>gxlc*XU6Qq6>11IC4{;VA97GWITkc)A@p|Mg-M5CB)&OUeG3NK8pC9l zF73{4oRfa!b-aUQkY8oHMIKn?h}kGmeI(%JOuM(`eq(Rzv%veCM==w!C*1f`mh3ar z#|90dmFUE8nh^bTdz1YNownteh&Y+1$X|O#Ge6;`dNf|9Dkkm0hp5=7XgXy7xOj;-XJb zJ&xtt(t}YMn18U--<*CyzI2;edVjtzmb!Fo8FL{uZWSN0lt3c9*u0d+)SRKK@Scyq z>@%I-6ZJP-H_g$;2umMbKe$!J#~5FMsJOzY7Xsjh*@TW~5IK!{lG!;W%&$2s^9vH6 z^8=n9^@V%iU%#4Ln6?@sii<04zLP+#mk}I;4LpreM%l3T>2 zWVkZtXf%!Wc54ci;%glupSd>XMSjez7As!CJ-gL8`>GtDc?XR4a&a5{C0L(o3cr~= z-A8(kJ3nuaVVBYwDfiSR!#O^hmZQu-_CaiaOXAi`L2UT8*`@6<8rFQNgk6p6I&Vwz z*lk7oUP25W*XgpjuaEqFJc$rV?C#~Sn>at_4peklNNexgs-=(dZxRMEeDpN`U?kEL znJoQy{0-MFACEOc7^f-Yz2P~|D3DE4dCCZ9rbThEcx@r(RpAqrbdJsulD$N%oMGm* zJ20wB(@m15@{h*RkN)Pl%Sj=l7&xU@hIWIx&Mhuv>+^>*_9^!-*Br5?h&rEU}?5YZeRab(3rp zFJU@;ueE7g&GU$AUb8t+jRhXtB(}LyDkI6e%9Q;N&8=5$9whQN!khIOK61-zbC&2E;=P>nCP|}poRrg@)@wnc^$mDjbYt7vB zQ3dSnk!8s3Q%k?wo8$Ozw|*)Sc3EP=n8>@jIjJ1hUsj+CN+tL>ApZ0lC^}I~*BNsQa=V|*i}5n_Jv8lp zve*Y`8g=0%!WmVe^PA&ypP*%~kZ)GUvRJ*#F~U&t{+Q0kB;Q6+4R60g{}uLnk633y z>>QjaEkI6hb;_W(a|R{f8UmUW zWoD!788ydq0SRlLLxdVZOV|&Hm;zX!Q6v%^Mq4>5AW#FI8y#hNxG@R}@bC$RKp@S! z0pa${8#I;%uC;c#x_Wo6l zDd33XrjH5h#J+(9>O$Elyk51F3DW zP%4pafbe~?(3K$US(oE?z!4%p=Hr~jD18yx=?>aQz5}lI@j>UF$G2xe$=B_lX+CHK z)zxsA(I}Z~CFq?knyi@Pa#&Nr>$h83cybu(kLcE+fqKD(Ty;Df($%mn{yKG>oFaKV zkz(#mownXFZV8)n+ZJv6_DGoU{0_FQ)vUp^-qA(#=kCSn*;K|l*aB;$YOA622n$PPd zCp4$*GPsvQXtDn4^D8q{;;VAM`bg<{E;14+c5zInh__bd(`<-ysYaXfrYi=S~ z1m#EJO-$_jeGfNi^3igquw<6kZV(@h3E%U&qMo@<$M>&koly+66!T|CTOpv%6djJb zUh=3?&Uf{sns)4lWF(VLq1Ul>!p{ELv$4Aa)*V7i(RvfQL@fSkwcm!NZ3HMl2UXck zjo{f1k=b>6OHd0QNX9=@=HpytQw zcyrjtTrn|chOw)w_Tg%NC=e5U1jy^8lA9AwG9+FOz9eVn@s1YJ?*poLcvMb5ghlB# zE@KpBx~B2YImw`-Ib=G zom)?G784`vS4!>#*;CPe&XRGgiY}L2%NoGWz0qm#rCQ_*t~crZWR~Uo-X^@G>kL!I ziKP99UHB2@1ZE`T(I0Nr70*nv6NJf3DMak*boZr6S_80?w`h`}Orl(&^?BaB%uY^0 z9Wm%CLX<8Q^M)?b2?F|`-=@gi`4O!EguQIk3FxVOn?3#c0Q0 zvmtSpUM8ra`7KtF6Q#}KkC*Qs=C{gja>^tPH1$6uJZdUAX0*Sn(p9;x=Ve%N&Zw6$ z{zZ@DOBi=O_lXco?kr(_5|mPP6>S7vQ(5@l-&r@J@e~Q#G50jf{M0OV29T>Ill}LRn(& zPH+6JWZs}h7HALP#wg`FT!!6J$E>Yr@z{A6)6=PEMVs29-xaB1THUiO?IJa6C}3nA zJ?)7)RI7gs=&D(ioxW}Q#+M1?E_a!XKJ_D!I7~NXspF1sdux5|3yHnC5HxcYVHmSbS?2 z)|qP~VqQCQS01|!@NN_a9te`DQzd-O;%jh5>@+Z9xi?r#bv3UA2w!%FN8omkDe$6!neAB~LU67zlc$(p5Ryph2YQ=;vdAf-0oh=Q`1AYM` z=h@z!FblKX?hNb(!)PpOL!9BhEq7~f4~+TXH1Ye)7p;U*)XmhL%1~2W^@l0Jy1gSC zhq%2ff$poF(btkg@%Hfz`UoL1GJ=8u&~gZh9gn^jpzL4F{gRpG@KEf9GpfQT@7ZaF;{0j@7b^R6MSYz--CnVO8@Pnd%+Q?YFgp;i*_?@Y-h8wc7&}Sw$=dC54)yzjQaIni zqd&Ydyp5}_5o#r^mjaIxE0u!+eGC%d6vSD<*~ENdrh9T&!)XrpZf!$(B6ad}uk8OH}*YMkb|d2(vhh z=OK(sD84gq?Pbg za(b(C;_`VmP8C)@q_VQ$3|f>P!j_%34QVFanTh0anm#6!&w8)q-5hQwOK4asub2aWBAi@CyYNB%VBX0|O_U65AHn(j?t zu+Uu9EgAvE`av$|Z}UKBT%#bKD~$q0Do%nXaCH_=&eV7Ao z*+YK5H)xhDm9H4>CY?n9J{+T}^!{Dqos(D_ieg{$(i4}awAiA#R2l=ju$iOZ&l?SIcYG#D?IT_eH=-=Hm8kh1a8 z$K&3JJ?*gpTB78G~)ey~K zva0Vc5gg^@?pSeFwsL`1c_2~CV5PO5a+^OMV|-4)weqmQ$?Q+(<*J{dw{ux@+2CE& z+1EH1aAESeb9TN@_(6ThUUfd3<8 z)i-2%)jvdRD-d&f^9|?!Nzm2Mh4wnN{d|?Szp(#n z)=00uUzPBizSU(4=<0F5nJoq2?%X#=ea~dcvmBzMbc1#D4T`k?BEZpaoRAln(Ei|sW z(^_%wt)wPo@1bQDMH%;6kudjiBV)~ zi#!lrq)r~XCjXcF&^YgMk+zmH`WQdw;ZOJVUYM3}r^_ZK7P&A~Cm;SCuc3uEFt92> zuueH|2l%3!kVmFNcKKJ6ho6jMP)U3)BJpJt&&c2T@cBho;`Ir;%J$y=+<<=Z8H`l}lh@+l6z?s4;%vvf8LTnaS-kik;jE9Z&gkzyW+^obJ`DoKXnC2AiyTb^?x5+0@<|rX~0j3uD|` zqGzsqk;_plUr6%149Dz8JA=5V2*t^rzvL8a*L&~)N0JqAprx7)=U0Lnwge${7PVUa`T1l)Vdr%WbIEt z47pV;Xo(yA5yX?ukk8&ZX z7Xxg;#!|Ii!owQ27@!9bPX*c;=%EJ#4Mkq$C^2hTH{n$R$Ka5&Yg^6}AtZQ9G;07L zT6J3omsY9);4S$9{fP{U2jSl0`4M>1KjxGgc>VUV%R=f<8K-D^eQT_#I+sgWlD?U%+!doTG%pZP3%~lSFVT2tYidRiyBJZn*;qTnt^TW z1^Tv^wY*##E(if879QwbZL=zLd93HQ-zz?Yx(RP`wphQK9{1@4-k>H!uL`ukkXozF z0Jyp=m!7}Ql9YL)Fyo_NPrD!4&#t6_(m58)`M5`>k%7dVMxp&BWLm02r!h&m3Y=KL z$Gbwl?GCyS5I!=w3p%B*ko&TAMygv#hy!sJ%8WFCiQU2mxhAHH@?rB>vr|Y?#%K@M z%-j^*6B8~8yk@>G!Q%yuYecjVUCM%K6s;P6d;!}!QQ8lG_<6Xc zH31yw8+C|NGz_o+e|V_!%EL(0Q)(=4WzDF~77>JQ*qs;zcfscOrl)Go%9ft&_sb?E z(w*`A8W;(+b!1QB%Ehvq2dZG#R{uYhN}8Saw@r?ffX+-yn} z4bV7lCb8UaUG%?lS;F-XGz)nfF9x{k1wi;<1AhuMioFT?rBXVK8Pjc35zPZ6LF`hq z(PD+gB{AKDm%n%K(^uw5oEb%2eE!$I5%>%l5xNv}$AL;IS2+2t)8E2%`fbIC2N2cg z$p9hQqNo$}ECtY(_nl8987t zuA(X2!B&AGDI_2(7(#$yZq=z?MBQCg{T`Z+voer{yIH-?at_+weTS>2jgsy;;KXSL z4a>uFo())nN3mmV&u39+x63^p(%(TB2m|L$K57VvF7XDvgyhV%4!U8}%R)S)4)n~N zhZINK55aHRrnJgrk=g=)Ke8<#w++vGf_erfFI=~zw3TCMSvHey;$dlG?|?05`Fq9< z*dtb9v0a)xzhsx!{#Z8Dat;s=frEL|QOWF6UO~j}FKb7cZHG_{cwPXo?QyQ38flj! zHMtF*%8r*Rb*(SJd$1RU?8Wg~c(sBFM3kvAYrtG-{x5l-QZk~LO%(^P4+pO1{4uhD z4iWa=$om$O;o;Ufm52{q>kS+ag#2E@nd|D68{|bHe?eGNUOGy?Oyop6I;DLe3+JP3 z7KE~|4A+Fpc@k$^8>D6xw(jV4%6erW!x_OCxpcfb(X_ono5c~>JE0{=1J+lwxPc&? zc)IflQB-M^S^&(k&Ee_q31WFaf6@?=7zcV}3(CJp9gb(MF2qjI3N!7JpM!2Sr z_p_S}G;lvmxOMLg-Rgbjq=rd08>cc(_^}*Vn{@Y36;*bk*mM<-#(?(gpi8!CKi(l z*Y&YxO(2!dq}zB3n_T&X0GZ|hQHleh3Dtu|XH(J|1yk;>A8hU6f#jaFO6YI;hevps1r~qG8F5py zk}oCayAfB;b~9DqV^e>B0ZQ-%CR`z=s@1Zm_ zg{lE+BS*gB7J^NQ#?HnnaPO4nFJscs&A{Y> zvq;q?6FF++Ki!Nej7r45xbm0Kb3+(Z0NuPOgn1KfG&+kn4eT9DXJ~Wkwd`g7Of;DR zhiB=XbfI%QU$mee4f)AYw_*{RiS0YDuh-955557D4o-qEPkv2oj+nIm6E6LyN{XKc zP11hPK;aIAl%LnvhG{WcjaN<4S?w{czKEDU_)xy7mKytepMU}%9t)fE1)jE@QYHg> z*(PjYRQT%^#Qx@iRvH*N!#f2vgcR7pcFw;kn%;g>R1?QWee9c_Vw?q)@|_(Z1L|X&VRf1 zXWjLqZ@?sj<4A>hgAFU4@G9;g8-45K^U7ra1AYDk`up6KiWF<9gtn~R$6mFv6ikw# zcRCQ!dw=&gM|&X?A_Rw!(p@0o!N-H2CW{IIbB^!0$5DLm`(24N9B&)yWL@~wlGm_i z2wRIj>CwVuf>TH(b7U}w%q3f|hSd^`K5WjY5ch|W9uQIrUKyLO3ze-qVe>|dmQ`vh z(Lh(+rNzN$|GWDsA$ZS{Czb52M-R+Dfs)dZfR~Qs)0`8U2P&262P^lpGyvTz(32MRj!pf zDy`hN!S?3N8P;Ud?BO?YHeT7(zt;;MOpr&a%)S^KFK?*3ZNA~}_G_}Ka@L=MZ6#6F zX*rK(b07|naaSWAZhMZ3LTkZ>rGMr%Pv+=leLm0Ava@~R7*+X{l#W-+X2K3t)1L;a zq%YVI$=6t$;NAn`;@DhJHad)s9Ymlm|`nDbB3VDy9oX*h= z7=PlA#+{IP%G*za1K{LmXL=xrP<&6MSl^a2iazSyhduYTm16JHyt>3&U$R+Wda26FGArbiB-<5w@XM^87c3F-n5oBGYoS#f8}1F+1CMFY zgm-e{wSBU{gb?gVdc?!l^yhxOXfz^ZbRxy~<*$akhpw2S3nvIAB9g*8wH=@Ep&1D}$*30ftv~b)9fZ?2*fl;{LWMFG-hk@Q*J-yW}8Kqy7y%z;%+DFjM2}II8o_@FP0a3FWJZot0s2YYm3U^uVq zul=}y8+xV7f79xkJ>d&-hLY*`S9-%g$O*yKom*wL0(^Y*BnXS}WPtyAwOsT5e+&g0 zK?h7X#Y;w}Uw1NZ{V$jOo#4O6e*GCfgNL@@;k33)il6>yqrVS;8lq%!{y*;sjkphg z_^zq^=YM1Z6p10&%jCBV`k%A-k16CP0IKCCgj`8U_~tdil4Jb$jsDWEILXU}{*NJY zb%cjoKt|uB(@q!$fCpFzvi9-6#t$X}J;as6{9o=!Nr192_9jl_Jb3W+|1!gtN07CG z|NH%tpP+z8`^+gX{*QHpZ(gY2wJ`mU<@;yi(0nYQ^)yb>2W9_x@H0{9m3#R=uKMq# z(~k!f(?|c2> z74N`(IW!CQH!pnt`>*ez&e(EQ|3QuG{~eWu3WCvQn!uSnzOG1-ac_GSR)8-Xl6^`L!jC zX1)GMxLTBp$zgmOI~DDZFW?ZvszajFstLoq_g9KJo0-1r2f`KdmReWnbXDD6e9i6u zF?b#^n_PXBmo5-s8R)l8To0<4L;v+(@|8~`l5X*AUhD4Ad1{z=a2UGeb6KyAmQbdc zxT_Ts7~f(%koDx}aKc=euoN!puTL_o{`Z4mV!V{8BwF{^7)7H zf;eBtsq?1AsT|m?%Ed(H-Xnjdks~jR9sssIP@p~8q!=8a1|pePl3-EXOOG5T6zolk z#!I_7s3)RK1$!PGL&~4GOO>TC~GeoOS?052E$7f9KP3QeOgw+1Mb=IYd6&t#0|^b|{LI>vT>$l(4? z8#mMz$&yX+d(}em5rRL^CDvt;+~ZZUxw1hy^WNA}au9ul55jT0wX4OORZH{kwN8Qh zBDXZt^FJFUG8u=OX71iYIQLNk+ zcv^QpU7OR272=EIHh+J+o2Que=j1kczk%(O9t}(?IDu4zH&Ur{Ds%8Ya9;gkMQ{KM|)HxfgF)n|6 z1B;Sg*OVZYZLcWLR_2Qd1*1?LT=!P{x`~`gd(9<{NIVWU=!+_CY-Lto8~+&rko@Aw zYpj)7UR!2e-JWv^+@98teyuM^C;Se$!Bx>J@-aA*Fu;cT7Q3bf^dHl1q`ZDw|0fJ! zlL$pYI0iQV1K1#rVf(2*{0Eu;`oYuW1*CJrHns>o(^gxCKPRvE&<`l|DaZ;`@crY< zx?bBGpqXFmV)nlL=Ne!AAD=HJB<)@Un_U4pNu`vBnY}k@y%T;hht0W|+))lX!XuFE zp1g|(Z~Z?*Sy9 zNE<1GTnfF_Zp9t+mUm`05pPegd7ToniZcVwoZ*YdI}w)}c->x7EwswKnbTlC>uDtHe0^OFSGi%ZNXz41F3@i~%sw8`n$dqV;B+F_Jtq;T_5 zBgeKBLncwS(jWQp=E`9diWGB4R-wm4kN`HZj;)p%Nxd!>GRJ~j&}w^ z3Kq5X7W2Nr$73lu$o_kuW)dTvN3X#~vU^R+u6>os)X14Kz#+E*_x+`vdl0amk1x&? zeeC*t9VCYHtlITOrKmY`F>r^OzoU3(feX^WRluNy;o4oKWS<|N0C(lRG*q_vD;Azy zU;3mM)gKDnv4?+cX#Mwqf5LGV+9G~cl7fUCxclmw-@r;?Z|h}K=%GbMs#5`PS!>=@ zPQ@R#Q@wtgp=5ztnltcS4Vu)dT{~AoNszLYSTC-oH|SFKX9?hj4>+I#*(rZtF&NBd z6H89^e=!E(`3wJLUS5sJ6s}@Tz2zfP2bBIy?62ShAO2tF62d{D3Eb4n-Vw}-_&dSh zALLX~GByA6%d1EJHkZJLpnnRO4;A6XpEJhQbV!ghG5*0 zp5uBymw5$}-$nom(U@ZBBHu^2h%%r_c7r=ULHLK_95}s? zL5v|ZDoWYpPKU7LrUueuxwWrte>jUeGy#dnlg;(e>>MQ5jgEf9IW!q9Hkdg_|Cx(p z*xIHKQiwflgx+@hwCUO^-F!G|Grip4u8wCxSM~y_4Zaj@@1$cG{2M?gPf)u%-q{KV z9rQQxUHfbBx7a{fYxi;BP4MlurpPpF97IFN1$zL}+D84aOVEAub_2yX)nLleT5$^Z zfl;l}Z^1ls@4wU)E(2g`NtuQH_2B|5J9c$xSLPTS^HxtZZ%(J<1MLjYl* z&5f6Xf31s9?>+Rqbepj2mtGky$tYnwoOIOQD1wpCP)~v!Zd^;yR8(!e*$>5W+MPQX zpfSS{IYwS5xyPRscwV4^v_f^6Q99F`Y0rK$b_+H{hfsGQ^F%Uw(rEg#sOpvhjOLqI`?nO5*l82LnQ2(wI{zi@1dS=E?auCYTUrZD+s9u znc~hTT!sFTi9tv12Gy21E9NPN0Z<>ft$^B8&?YJA)tnL)!KfU`Rnzy6sgbNyzySf- zAh+oZ@~hVv09f*^c+w9_LZ(AZ0>?9Nc|bS)A`pi$QW!d|09nG^kHtwgKuv+|r9uL{ zMQE7GW-5cp@&Le5S!;Xc4C3-KOA;^+hYb~hy$%i;A&_cj=dbqK*_j=I$Vta3K{4O| zdN&O5dIQk(w`gXS&MP45!D5w-0qX!5)`SG0QR6Li!q8%K5N!Pc$QuB_63{`|P$uy! zOx`vFBr|`!Cq4&gDKACs*OIQQNsf0nK3y7${Ga20VNBxhNL8&uM&2B_nA0 zFco>+S$s=Q>R31HI-9oC-SI(TXtJ83N$!{$JH$D_@YUjNOr25Oj90CKWJN2@)iU_g z3b!RK@_o`O2JCm&^U8MC&C9mOf7T@LVj6^nFW%tYYku`& zS|{4INBY=#xjms{)#c`rLoLo;wWiNWjfT(78m*uDvlhcMQIiEtse%RH=LGY=f2z%g zeX6x=D44Xg+Z`9;o;@Px)=}+_D@t8vKGvI7-+_5l=pKAP+&;4Jraa$*HB8VfPUJZ4 zfPnqO%K3OImWNd!a@QcQ?v&aIva_~I`%z3X-7VGbM9B5NM?(dgfFq_ksT_&SS@pvZMBEiP&Nev5o3#{N;X0XyLRf5P!HL z#B=U_$TRot4$t{CnbksQFi+dUN=kxNU~AELhlV1|t@oaS#cx|>cs!0}cxHRMcvg#8 zcusa$cosh-B*dTUE5~!CGRjblV!Rd@#Ct6?i9t|rMStsj3n%dO@Bx#`AxGPpFuAiQ z$QP&0nax40jEm*(DgdA<0^1FUGZN+?lm0kN60F@0J6hHG? zA;@k`)v{U5Kpoel6Zq^kTsGfbf;i^-`9DD}eL8P=Omy1gEN@+d3I96)GeI09D8+Rb=I?5KP^`t!~aoJ*3vPtOPX#{R_-IGx$b z7^5O|SB+42nswwh)gW!f48r=$~s}Q$9T>9)w+RN)WzQdbb#Grh#5d>wS}+ ziBjeK_T`D&txGpECZ(iD=-)01BG(&9Sny|ciA~>}!I4RL7Q^M^g&ibNQ6T8H~AL@ICCo6FI}lza5|NJg7pleTD>h4Qt76g-1i6KK#h}Lm^9bUiwBc) z8@b^z&r_tL+?^{5?rK^~^smbDIjcGw=zZhLbA1s6Hxj5GII$Ta}uRM^1g&=Bx(k2DIOMcet{`#ebg?o+fu7HL|{r;I(wtkLR)0Egtz< zK7I#O+o`c{2*MMTy+ye|cEr89lO+<0guX>mgk{v1V)&mIIBq^?Yi*-BEvUa_Cn-$6 zAP8tm(u9&|(!Yb?p zUz%XIU;qsgMl-#az0<8Tdy!CRvwP1_1&P*~c2H_1Bt|l&s}bQ~zdx-CY3D=N+qYx1Y1|(3CNU!RV?Z#gJODu#u zf#HO>dbH$qO~f`R_I%H8Qw*;KSrOf=JOd`@@H1AQYqs9RQrT(a=@8hzbAH(NwB+^^ zB%SvHxYgEYlt`X-98xL543A&!IMdoOYd;g7eD@HOCf3hmjXq`ZY(1f1XL*F61YP>Qg@2v*(=qlfiu3~{sV1^PX?`nsG7Knb(%Sf8@bP9k z(ThmeR^?XQgqAq~jrip3@MjTdkN75_GhHSDb!u4uS=F!0GxtacOUT@kAiRZQ)j8O{ zBu*6l7Bm@<4|rFnkGn`ymusT&C&vhcdz0-C5x=9DqobO8e~D%eEkKK()G>V8_=w~l zI@UuBU90l9f|fhZSsBMx6BtYd66D*h8{AeGalabHIog&Z-T}x}=AONwJaqzOaYWFy z(J|mf73Bdi3!aHt7qKog(UaPK!p4?uk7N#`y1q5Ng_FqOG zR1&qjOubnYNEu!zFcq8IGEHn0Ru&HWYMOW}@r<6O+Y`M*Bii923-$dNfy6kq=#xvW zG|gFHmwBk(!_)5nK5aE&_hWk2joi9}4d#`R(~%_X8MObR37EcC00y*XnP4LG`#C&~ z={WbDb#LkZue0f2GMB;ifP9&1BIof9y@yi19!XyH!&!U9M!nSAyq%y2FKc0^M=$m= zo*QwshZek+*vftyv}CV)CY2;Kxf;FMM4*i%86do_bR1+GO$vZqtPMmDOr~)f`q?zV4i~HeHKSpx=WdcO zj?8BveKGxWS<2_+JebYA$?)>%^Db4xS(m#Y)6@c_cfr6-XXV$;>0gN64K<2ZXa$R$1IL>Q0Da(oG6_t);9pai4`Ul z&#PO9Gya&2Moc!?cY^K`JG;GVK1#K*XQY_1?nT821SskOgZK|Z1a^^GzHUEJz66Jx zCGzv_W05-9@MZ>kAC3ZzDjd#TC;j_pVj@1cW)yDQ2*)>!S9(%>O70@>eIubL{R(o& zW)ShqV;b?cG?IV#1^3S9qUkGLMfRRcKwES0y{8iigPey2O@o%cGsP05oLtatVlojP z#rRR&lG+G+D9dEo2s2{caniz#Jq{~b2zH3_@exn`Rqc6q+jAZ#wu6`Smzyy>Qw>y& zyIWyI!LX0k2GL0QAN1bVHNDUBWk#2H45IO68{|~!j+Gi)d}D=+6^%kk{x@hkXa-Hd znw#0c9=oq$_L3)2XN)8;qemvCOOo&KiJdjNd7#nR@ysVKoOM-DZZ`Rp57?L%-GIr5n*yT5zL~ zE7`aN|2lwRxoJ*bJogl56b@oB(_4G4#rt7#@2-P$l2zXd5GxMTx5vfF&CcLQrx4+C zl)=WBwg(-TQ3qPOVaEy9koQbHtu1x%1c_;B3@t-}6k3m_UYSLEcR*(M%*I_(?4Zg4xu!QDlW^ zp1p6Kwki#DoCWR`EU0s1QB}jPn~v=e-iC8Y;14cFyf703HJT$(e-G1 zi{1c0GquuN9M1mW@hJ#@F7{M_blA;m+`QsI>ngq_mx82Fg{)u?@eFpuZ1=18Q{yjh zcHu97nwOxKVz{i-wS`W&J|m24IKL%PvfUl7dhEJuc7E`~@7NUlH@=V*ka$Du_{U3w zL)Q4aJZo$@&341pjnmP0h2$Um|2nP--?@A0j&o_4)`jLd zz2~?JQt>9Ju`k68)h@e^j8{&b5m>(JL>s3*A@i|C)Tk5@_CcQlTHEO5^6R)tomgXf zH_glddKlVxmO6nkfk#Dd3Df^!>MY!% zT-#``prmw+bO|HUUBeKHC^ZNw2t!Lr$Pm(9BBg+I2uLXn(%szx(lDgtFf_w(UiSX> zIp@0k1Gt3udG2T3YyFm!9;Uc9EV|??^0dV>?J7ygEJXipm+(0x)B#BsFEYb6mOas-5!)coB2KxYeNi}y_MY}0btN?gX(I@^4qEfJJKy@ws zeW}q0C~3s-AS9Bg-m9e}SekK!t{eXy{CoR+FILiq{_urMAEuV&6_K9mGr*NX_f_lcLd@5Z1MP^j2k30Bi%HEeNp}^` zln-zF6u$$D>mF;I>?XI{?cEFEp8+PzwOx>egeV~pr{`!-%T?C*^ZA=*gP0ioK#(}q z# zKNv=`yv2NHuz!t8Te4ulo~&%~`u~wPG)nFF@*3I8NCLP)w;=98;Eb_h3}&#WlQMXh z)?RcSjoT%{@564 zMVpt$4YMnrt=PEPNL943s7ZM#~CqI*!mx}FQ0;!^vzTa-AGR}I6gJwi@P%J6Z zl4^;*tRYS&HoC8j1pn@P-Q~XA&RBeJls)odUStE*yyF0-@q#_jCx@8v-gj7?s zqgZ#M@S`ErQ5!Q`do!1Tt9;ujLAUKlj`0-GQdJL$@w_Cp`CYX~?GM&aPh^_tKjpx(o|zo}k& zeEYogk+$1}sND}h9cFk7O9`W5ins(;3<|SfurJ&8gHLF{6=&YSenBEBB0N?qGwx+v zEO_2CEW8P0&kap9&*(|@_BdZlP;j+V-#A@Ep7*`t7hM?=^|7q1kb2YY<`}(zJMkP) zU9~8B_~wUIEtZ?AixKVhBwOccmVT!65<4l|a-*^Ko32SzUj`KYE5HLaAN9$;&9^;3 zTz2Fb3)<@>MkkMe%LOT&m^r!@!-D&La=FafbVwYKQ39WRZKP_4P#?_*U1Kk6VrmB3 z%fg*VZ`#2MEaJU3%td#HrMK zs~TSpqRs0EO)BoUY>aE=@K;0;^Gk;A6E6`;qz-Sa8)0eJ_usSV#Px6BV_hXPZXZw^ zrhhvGUafWG`nBAF?zKrt;K`BwVDXRF-otkvVSzKiDLrsah)?1-pnIJ+RK>12wcp!i zA5tAz$SQugydB#c0w%f;wVSPSDe1^cFHy-&Cw{Z3<>vAEdUrrD*gHoxQ&tB^b$Ilv zpIxTD=P&K78op|R$@OR%SFV^F7F4ALuU#OPKrG7EE z&T~Gn&T}zR+H*c!+H=9u9ZlKRz#C|Cv8AO3dWr9v70lKS9Xev;BvZK0T3NG%#^>pr zYGoSnx-VY~#G;m>tcva>&vm@0df<$=Yw4hTU3^|2~~r@dkkWNEt`!1_o0AZx<9+K)%YM@HzrU(sU0*mDy6uwr7m30fyzL$^{xb* z011BQR#{Q4jd@Gj|97H5`!Gl$#5!e^HghB@i$qbD6VTbTakugg5^XfdM~$?WO}R9V zguH=u0|HoJjHghiJGN`$L~ zA*pYr{ssi|f(Z39z0vkoi-inTu46Rau1&XQ-_OwOO6*#U{VsQiYTKcx5IZEVDE&>* z_J@);uh0Ty2Nx2si*<{RHB-a%`1dT>AS0N2uekKJEW0Zv4f zw=qvM-)6Bx2HI;0H5$;abu1vM1=PL=#h>s0*I4=Rw*OaHRO|c4iwZ^jMI#O^Z#vfr znv;Wn>qN9<=tRjch_DoXfr_TI-}@qVwDm|buVn)dL$cSuVoGeky2j&kJ`hOkeD&Tj zBZMDT7}m5N)BNRJKMFx@&)ft|q+2eB0HVtb(Bp>W%=@UHz$(_B(n5P&zkK-P&`vUM zYK*RnUKB;*&^0)3j@+JmHdspyl`&~ddYI1OgQ;Lje?n;|m%()2Nn9BIUhCBl^&DMWo<~=;TS^KwelKjmx6)ti11w(?w>_o!fFHJvxO-*F}OXpxTj~xFc+4 zq|u}l-=U=ewY?^?f$7SyxOSah6u>y#J-3Kz+jXJ1(etTQfsO7brI%7v2hJ&LROiw- zDHx5to<5_ux6>i9RvuQ^E=$?KV?7t8!AY*74^P!&>G@o{Jh;SCn|a<Br zT&F%7#Tto%t?SXdEH;YnfPCst7QhWuE^8|C{BwT!Wh4xA=o^6`!C!r4t>_+{chK1P z?2nj&Qp;71=Dd$$-LA4qPcjoXS@zM=!MX){|yz$4Ll)mbzVa;5FZGXELyNz_Bc@u}ZL=T&i4Kx${HF;@q zC1xBI@Qlbh?lz5@N@cVxzJ=TlF7f-+g_4l<9oFvde1vrdg)}-i-IWj)8BkXNgw!0+ zz&7N=@;aUUGx7KSWE;SeH96+T4o+DA{iW^FzC@RzKa)nj-qrVKz#f1q+yL@&y8T9T z6re}k|5N(tJZiI+_dv!Cj&YjnfkXC7>2gV{$lHd5~)YaWI+6K)D< zBo60s52n(>y3PUN$m{jNdj;Xo2M0kM{LCtM%J?-e33d0IGZO%$1j^Ny5k5nT6NAP{zl5 z0K?TR+XTWU$uf)SGk+391gMjjrzQp$@uut%p>ZS;7w=yCki?Q_1|zMLphh@V))!W< zjktq&yxie>0A{MC*LQDX0Wh`5qj)O&$2951I@gf$+v8{RmQY5Q?5(Ve%|7#D!4t%& z!NjPNEHs^8=h3)9%0VlMPQ{@DC5y8ipqNMX18<@FD%(#~{%{~+5HA0kQWt6=j1zUv z)_vwh7|^nXJFcx*A*Xn;m8_|gXQMx{J%*P;Dnq8OJ}LL!NEBKEzP~Z1FTI{w_=0)6 z(k&r=jqAa8+2scd@huo?orRkHaV)9ib4n(j^FYyEMPiy3eCyHR`$~M9OQsAOS!X){ zKkZ-2cmr~COlb*SY{recUUGXM zV@Wyf#-cUAl3X-e*2!OUT0`Ns9rGTcHML;1XbXm*w;tE5Uk|ml23B=va_Ka>(HCbn zI7=7%oIArW59w;64*w=eT3CS@Wo+>=t}7hkIuxcUxiTwTB68iMGN~IKzs-;DzGewt ze#_7h`2}As8SPW+^=6J-#Out#!IcO0YdP?d5k)t77izy?D#!7>G&J_q%eW2S+K24{ zsP*vUIlyH9-p2(56y-hc#OVW0vwlJh>P$vgc-3xVZ;Uc9#h}3eljby~ijiNQv`FnocO~ zGF$$x(w(e1t83aXwncwkyca?C12cQgn^#oc!PNVlMx-EsG!WAO{i;7HRkV59<9N=% zaq)icGCRBy)9jRc^OB6ai6+FQzRFRlz37G&%0fm%ObrtmE?UKx$=vBlf>AHZ+#Vba zJVuO)mA>1NpIG>rL98Ue_6{fPG%3(M(CR)xYn^(+%J-B8DP)$?tHg}%RRkMh^gPlA zM{@e$S+$zP!*_FWIkp-nIep!s{)WTZY>jf#Uucc^cFa`P$8;e8XQE|(RG{Gi2S5zs z6qob;%+xN|`}%J(@S8A|E)*N;hTc)2X89OQo0S-QO=yd$UY08+8>A&D8x6)cMY3&V zqyAhXhkM7n62IJGE?lh7TeH;bw`po)Nq&&2tw--kzTVKFX>Ix{!1QaY=V6nY zZ^C^Lscqd>Zej0p=Tw(Z_uw_U;?iAcg88gZkzGolKI*Sc4=$W{?@qSf?E;W@-=_$T zC_1NfYy1qdy2lRhFvuZVkXF5MC&8S!;MZC8migKD=!EaU-?lU9AiJYoyNU9oFOscQ zdEh-rv;*kNX~JY==T5GGUGBX+*s0;C1>)2@$BWv_7PL8*(oF&3RJHJLgM#L$l}XK zwY!!-Tk6rUT-jvu&`(oad)cdM6+#e9)aBFcAl$gdmHK@n%owm_(7UNM7>TwM)oQ2t zYHz_fy=2)zoA!VyZRxo=Ozuh)5b^L6;)qS8_Lp(~pZy~4W6P)Rr}drUF7;JPvG_xL zFVdI#-&pkA+TNWeDkJ6E)z6&d_DoKrWOvURJmD+i9YQ2(53$%kSh0Cj>;C~@{z?K4 zuw~yV6kQ9@0=%N}!(0Sdb0~qiy|_NBWHt9D@V;3YQ})$7kC)+pDsMz2+DF&3g(IGx&mIVOI_$TYpq~_?TdQ(4wzh@5U*lj zqHt!ciwp26dGfwKx|*tWvOJ^8lMF?-lcC%vH&;@CV&yh-5NU#o22Y)4sJY`f{DV&rE4^HTUNsg68;@$ zHPCxomU=48*i=-xjm=ku^nfl0`Yj0ySP4M4HKdG<)w^cIrSLlz8ws@=Q zO8}VTy{`l;(KDnx0IF!=@^>nv6$j$W-79JhwR3!5NL@0qRes)q?z^t>{WV~@+XZ-? zS_lhudGVMBFMY31eU~1v?S7%)czX8T+|m6>)v)eZ7&xP;ymo6r^#v{5i}{X1Qe6#t zNG9-_)Xn1o%Y9`d^*)_Uhn1-A6djiZ^MKgxqzPXNU1EQ0;${)gmM$-ep;?hf8zDU+ zr$_Ubne7&7h)&<37S7@Hh%hlmS`6luXQc+ z>i7IY)A}3y*K$TO1aA9W9C!aZ`o8*NZeS&NEw8T^bqr{IZ2+(&9pDamI0I^DDDvG= zCd_$`kH2K)e`6-=6d|wgj$KN#TYuxzcY*jrJW`|;Mv_%2u>vSe zR|;BPHpZ!h<38y|I|YeXQjoN&_lr$6fG;d&6tF+u$%xf#b*nRUOIAm;QN2!tN;kJG z#!Z-OJ!&Ups4Q~B3EKx5@pKM8@qq@1XVm7mbtfb+TwSrG@jQYXiAF8*hh6F7WlO?ns!Sk2=H`pkQ;?9H`Kl4#BuMp(0AJ1CN>if z>==LdLw_1dOR7F#$@2HUNpw1+Z{$s-S9-Cj!?%(N3a-2agJ_1QVxot1L(${&0HiLq|(&QGxa#hI^R@^#Ra}S zyMrlqz^jdo zx-@*ZU+cqA5-BZJhV&tuacmR5>F@7biQZj-x~Sfls>^aHQLj|k;#lZYWHfj|pCL|{OlIaaogVQfcZA8lT{uZfw}G85Eh-Oya`f()bwwyRgLH)1mzPZg z0CEr=GmFFm3l!k7HDMCNeLql|gui(3xz?1Ez zUNI;H*tw{sN{-&G{g`_&B!112R;BLTdXME%o!Xavz+@bIZd5< zb}xN1;D?b|l$748*jVSaI`9BsIN>=Q4}J^(ov^s>3aH@Cm*d1EX8AXozFdNbSDmxhZwi8XT+*XPB+PkhVS5&sY>n2)lhg z>7Z+Af~AR$;|FZ-UNWpgCUi$ICMzAX^c2@=N90ut&iJ|=zIjZUD32sJu9{|o=n2mpt zfbu^XB4EIIE8}k-9o3bEzwortUf(#|H^b=1-s|mY`d`x3U4O$w%AEHZN)OAsQQg^Q z6nflZ8Urlj*1ka+HWYMc4i&t+L`1NjaQ>=?aEw1bv#$KwZun*hA=IV@(EJ>k*WyER|8s`O@09)@+sBa6^&&IMGyN3yob=X#OT3GQO+R1tk&@);oYOGh$>RAJW#+B18+MAOG|q38 z1b6`t@oi`XVZaDh9xa-5%RaO=IIts3EW!!vhd>p8p^2GLQ3LYVk9{EhWzOQ6)QN@Z zC}G9RdKS4gE*}*VV9n?oK+-R$Dl|~xMV(hI97ylrqC1`Q%Q^F$CppDPs_(-A0j4dG zPA33(VkM6PtH#z>%OMW(Cv}73vjd(KOt#i%ce@~TNe61_5UFLJO)tQZ+-vrLj%q$> zNbu$?&*k_xs?fvhuVSEQb@C+rxfR}R&eF2<6%1h-dN#2Fk%2q1S%_O^e8BLnhdU^qmhg6Exgg00>F_EMZnwfUp1@z`!^Wg~E>GC$JfA`ep51xemU&_rcMhPr_<`MuXY4@W_~Veh;lZVFWEc0mo;F7pi^-@;&kzR7*8X4z?16^KQ)S zf}S|EA(3eC{v-ori%Znks%~UO@&rGuasofs(qo2(`l7(Kxbp=_7whNF$0%GsyhxnN0vLl()zKh$b{Jc|M@6#D@hdPCEmCnr3fTiuxQQ zP}O^Big(zQxaIMx`8p|o(dNCSOkuhpm6)qlSO~6$69TI^yShJ2+|<_F{k1c4hPIN& z%82@v#zd8Ia#tk7c7!zed*e zI`G>}5qAF}#b;mh1DMf;WnnQIctq|**D?asMc;tmkWLG@&jj8H3?1u?+>?j3;jo%Le^*?LY!%(MG-^JeiOh}VVyJ(e`u3jNgyMF?K-N_@%<`+zd38+8kr%E16X zY8POUdi_m>v}-h!Ih3hupD#TK@2Bs960XPD!7}P&$5)=Y(0g<-1T@ZB@cZp)f1Mjg zrVqQ-v~<3}b(_C85axT`Y^Hj^XK_+rw(TDjVXlqz8RidP~Y00OyUbaO79SD3r^ke8}^8$*EZ zNDzO)+8ikDhlMevAirsf{>PPEh{e0VzOu!Eei( zexDY)91;uJRyK5h<%SY6A_Q!k)fYQMd=7GnT*zZ8zixu$leHZX5*GPnvozJ?0npr-Q*Xg_Vp}DQ~a7w@iO||M%!3@X0-~6ZzYxT4U1dYgvc{^h?}DJ^5zPj34~0LokCX z4beq+luJF-EEtf-Vc=$h^&Z}r@{s0ht|(t%;cbR|&)UB%Kk5}IT$b(Hh~W)HdyVeL z)vbIl1Qv&(NmB{K=NT`D~(864Q588WgW@$stQzP`&rlvf-Tv zP*4`ie(wjsQCAxv`H`Y37i^v~)HwETdFX*fhuiro$OB?fkJgm-@<0u z0N~t|8j`xSbx;x}83Iyr%#2o9uMl5UL>r2);F?bJE>p{ZW2YN1l-{EsY$AaK=XzhB zKm*E8cK*`>2a)^|W z!b3t}arh7?-u$GMB}1c~CA!&cxJ~gU;zFA)aSv@f_QRrka@wKi4MCz@jKmwmti2XE z(KcC;S`{1BST!JgzMJTw=}cp4^gQhXz9-@)tUobSl0V&TCF}q^a?tH#t)Ymjuh+c| z&XKG|02_SdjR}$1E=p?s{#h)%CM6A_ww5Cs`?BC13huJvoRO(3w!wk=-nz3uK^-9_aa7RMP0#P7b!U%kAOJTBVEjr@6 zznV^1L{ko^>>zw$r{bWbFLe8tfKNWJr^(6G6*zZ3pi-Z$ zHB-z)r7j^?HvvOQQ1znEY$v*{YV7OHuizG8NB8>*I?4E1xBV_JbSRg$h4=dFtvwfI znF!1#nmU^T2tuL5g|*0y`vklc|%s1x2e16~mzC9fR7VKC8KGGhP_JeWX+gwQO3~ zwstLMejnr}lAh9!u~q`+3ErO#-vN7e`4P9r{v`%e{r8H~WgIYLi!=j&0~4=0JN4k7 zJI|jEg`yUDuLsk7F1D5yDbn9UfV6AEYY@dlSDZJm6@KwjGG^a zBMBvPNgk^jm%p1~&=vEJ>)qCsy&{Qyp(|v;`geD{dq6SQ(zK5H!c6yg;nu|brD=Gz zu$xw7!8{l~EVXB99-7%4nV7I*I@!C{9t~}qSp`0b54%f`b~dvZ)|Y?m0=Udu+PP{9 z%W2h+r=#YDe*Hr-`}gR}AivjdBBj8yG^~YLqnsNsK0coC%ZgGod+70!HTo;E&yl`+ zZmqG3W(r6c6v;gOyyl=l0&6#6x{-HlvLSsT_02lP@ZRtL>jkjo`aI`BWAv@pcuuEu z{MdDt@+VkB%>1u)uHe(FWT`g`lqvao4nvy#HY{9(k1=DHCNKA=ySNj_A$OttNpHBG z=d6X{#a;+|xH)$B3p7VWG0D_XN+xwE-GM<+LHdb8?uVJDD8gs8Tf~DQZpjd^L7ysFXxvjvStk z90z?EF9T(nBLaBo*Kru3bK!p*(=N_?>i$q)_|E3UxPeGc2~+rViXeW z+KLd0*_UaS&|o~MWKEykKqLGIfjrB8fLi-h2;%T_tf$lZ0K!AV^Z@uFtBZ+C`iXaW zXYy@gHx)U2PR$z=thCGbeX?R>-|a{wp^hFjbp!s7_kI92!GC*SNuzJ%!zvKZqQ4mS z#l{Xe154Ff9cNCOS0mY6KsNVny8O~Q#U!u9cW9>1QTruoIuv&VxyOe%2ZSt;6W0S% zzmt^RpxC;zwUca?RzjJKP^!Ar@ZFUC)q%kG>*_6$C8^=rA)wE)_iGIqJbbLnh!q? zlUczIj=W|-Ui{?V4o!eXqdt;v^z~uVZC{;>U>Qtf@8TGSZwMci>SXMJg<44SSDGZY zEl$FnkuDIiz;NfYl(CI$_4eAxO~UdyOnQ)BJ_8?CnkR#FH1?_R)abUWt8?E%Md(}0gxz9eguYa zp7-&TIAderXY(jS)Y@USYzEDF!%gTbLalxc*x$G=CREAIVYxj?qM{s8Xiq~Sgb#&L{@ zIUar5EQg`*@?m0kpQAOE%g8?cmrP=?fg2GsEMqwUr}<+$Xc%=Kr>%iN@{fCXKR4k2 zw5&VK(uY}A*YDU^o9@@%K5MTASl5PW&SquzT@C!}XUxhlh_nx+;9)~AloIu?Z^6NU z1Si;>(B^U=Y0aWD&9@c6pka*oLc;R!sU6+nhDL4mf(P*^%N67~rygLW+imH6%K!S) z-)x_zg-@~Gsq!<9{d}#xoGiopG42|}kU#jCR5jqLDpS*=1&OM)Qz805U!rCD|_qO6zwXa>f zJ}P!w7KI=C<}DY%SX#!pj4&8NE694kps520n8eo`1Gizi;a5`S7)5I)ZWAnu8i!ud45dzCBmk9=lAm@#;T- z)011e!aFVljn^&{i@%t}J!|&$zF@?x>9NTWCQ*9D3M%^aT7hJU1Ah?#ucT{!1;@L+ z5sxDC2ONC9b9m3+sr-FoBhCMIxquh$*MA3!S%>#hUhC@E5y zZ`e@YnW&AE)Uf04S2~=rBcy9{5jw!G=}cI7_t3Dg2ap@CG9&lU4tt+YYsnJ2)Gal_ z(c&1UHg&DJIZ*i8bE7B6-cPC2vOfG{PW9- z{A|ItxzAhd*iyXsNV)#!3A(13q0~2+pDNK-{_fmhgvw~=Y z#YOo$H|N6}{(B4&sQ9eT>e;BvEv!Qzo`H4dqe6#~RU#mmh4S@R+Z-xf6Vjn{$-_&JYh z)2_>oL}gbz;%QIUz_)g!7@x1vbfYz4dpG{bY~%y&TFUtY;YI!hvitg zZ_TOlhJtwxq3lizp}!#J-8p8a`yo;Tjo%?zlD;mu%Js9b^T71|?f&stX7+~_eV`Kl~L z_%RWG-P(IiY*ezRcaiuHs5sQ!8)DGp!JC|0d5RA+F_DS`3J%!y zUXBe1!z1zzT;MNA|I-4RRG-F;Xj7beKi_X|Ggxx%_t83g|J|X1EMc|Dd}eIOT8J!o z;H>W<)M>S`dyx%u+TBbw7ty&$rv?U8cmQGw#6cOViH2!rzH3^+3RWm92-!46FXP-a;<|JGdo~qoo_W1nw8=!ca03U6TH8xPS6qTnY!TTH06S*r?Hna=+ct&rw&sCfqJBTs-B;m{9_Q!VdL6Wd>SKT1Q_4}z*=S>=Z(EIh z)TFXC@jr;MFxAIdP-Y|=v8=(nM@rT{vb*x`3LrX~wY|hRDEba;UB44%LZ;m@fdjq0 zn9MC*Lnh|#xnCr0Ew;pe)$@%mMyz-t@9(egwlRsbi8DIV*0e(gDunq;crtuc_c817 zwb`6KJ)IJe+d(BsD-Rx9cdb%V?;CFSl&i{|9EJ+dcBZMBTWbR`%;y(hHR!7%uU3XK z#!mQvRhYPD0>1%K>c`k0vTvVxIsjmU=QIXu&XqQ*P6DXSJwStFbPOH@BpPtUxM;yi}=JFmTrmqu6k8ZTP(bJ3}A(@?w476TbHy3@|lUh zsVtJcDOfR%uQL+|@M?SG^GZgbON_X?!DEy1mqFo%H53nNd1}2|>&`qshbx+v#jKez zH?4;Zb3FR%`rxwv92W{(#=uMrfqn-^hLZf~PSa<<3PKUvdNuxDHwN4du}Sm!)mQPC z*^pV?FQ?w_CqHY-&*uT>MR<764FczNkzOtCtxrEyZ-9%PRQX;!Y@gmceO3Q58Z!HU zN-_OO>=_Xics`MjK&62{+>Eu*L?KtKyDjphnS>!jZU$%KcT2fYAW^C#)uA(kD*mL2 zPr9RawWnN4*e3>+Om+Fzqu26qP_gAgGS^AjjX48?DK#Yem(u=EV*Uqk7vX7>Cw6-) zR@UrjI+VY&zt&0P@<3Rtn?x56L>#bbKY$+B+4<8(8~9bl;v4_Ztdzahft|*nFH3#) zuc!(JOkT$tg+`S*-a7rny-`uq(;br-KlM?|5V-422{Aw~Zw-)PZq2T%<=F$s5i09R zvYz5KW{(I~t`DS8?f{gB3%Pdl`O@9ac_iiEGRRSw1g&IC*AfhQ9ipzJ+d-PL|LKHJ zx_5n!_h)mz*um4mC4r~$8Q)+1No^QUc=lqDJN@1)eya12-zV}8 zI_EzMN|tXPGOtqt`7+kZdXHHP@p8>EM&sR_8nse$&O$*Z%(~*iKH&IJYus?+H+jLh zcL>lcTAc?!{)69s9={{mg`fH7&U1!9EV+W=$H*ZWYPtDKqC+^`>VtySMay$5_m%Uu zn)DODKR6S16C1Z|rH>Q~lSP@(!=B{hG6oTx;z?p=-KwRV7&gDJQ>K{4{0b+AJL`Et z7WKTo&iCGZuqDy?@V%ksuj7Z1oZc+~)ijWQ4AryT)t}i-mwPgWhK=-IvLM%dCYOm9 z(}0pt1`ugXCJW#2^MPg$#4K}U-CNBk|Dh*pk$;P96-rZ->pYh#o;`a{dq>)Cfd=9I zneo~LDeL0yJm2v6I z*S;Q&BCyiYb!XcaOQ;*^BOS=-mh9iB{Qrs*I0<b+!}(}PJ7Bt$cZ%F%9A%y zx)W~zVf+bAiMnV!>GA-(3b22j_!@c3D6Dgk8_0dhoO$psHUYV6&-bq!en0&eo91#; z<~7N-<5=+Mj-u-riE0Vy1C6@d1F)}QoMk+6zss=x)h6eg_y@DIfg@InO)u+cCi|a~ zDYmCWG=vcB>ONc;DWnTV)&}x-Z=8(441tj1vrClx(-n*sU{f3BT+}e%`u|y&U)ji~ zKWA9+viQ89-~UDP+6Nmr-o?8B{g`-fDUg@Qg*st`U;UCfqRW!$W9(>D zU?+?Ztb6Y@e_jXFgf1YxkK3fu2butCMk5%dDAl%I{%tX*x>FMstW{Ikf_KteA*Y-d zZ$PB%FOE++DQ~s4nNx&1Q^plM&qKH!A{C~uo9qq-!0jWM?v@P*l!T;t!dWUlF*27U zzHHt?M(86|9efjRs7u<(rL$w^#M~tAktF{g3+-}Ea2^gVEQ=XlowohED(Jw9x4ZlL>DFeomx9aqD9l89JlMUM{~xvKn+mxm z2Vh*W1`)Ig?nxw&ReubX-n&nx4sy_`sYUqevdX%|by>3b0c%gHW9jP06`9_p zZqpCdcBet((nn6<`5=qD%G7C=pImBYDBb4Mrs5&ihy-QMepFl9hKV78CD|MLe}Wz= z%Emx7Rwn?{2?D4V!~o`o;N}XG{jkV%le7mK!alvoewqm^cXD`M7TlP?zTL<1;f=0i zoZ_BPPo?wyO?5T#Vl$d}$zX=9k_tY(LnES`N^;oIjf>bqgON$F&^If$-XC4jgFn<0 zfIl>jtmW{b=gvZlzOorYu8H%|CwJ6|;z5Z9lzRS^V!WA9;LiM`ChrZnaIMU3c?BFbhlwCu2A%gSvCn(zG=s`NdkuAEXAz*dx@x)=iaL4W1|u3^o} zC$atPz8Rlis{cgZjpwNVyr9c4Fx&R)_6x_=DE(W8_o3qWAw%4gOxXeoiRbiSj-W@l!)Dm znRQ#K9y@DZ;hnhuu>O;rw@;VCVBdAQs{_Zy2-WAn1>rXLBQD{#hl&Q{KB30I<+k^1 zy$kLp;zj*BBIWN`P}#^k!m`cQ7rNN#Su3v-Y@+KV`GlOA+<5(ibC4%d*Wp8p23@bY zgbaBoaAl8C<{Q+DM?nss-P8vHFeSzixr>K4&*HuL`fT87oWrMaRERm6AHx&k+K&gWh_k_w_9uwF>Kznu?1}Owu@e1 zFELB@rX(4{Y9?$=xI}v!H2w?Q&xe(@_dIwMU*`Sa+xrjUfbRk4KnlmAli!viBWDfi`A&M#lxr`t z`jox_je%zXu<@o#eWe$i(E+sm>DAKb|F8J*r8JJY0pW`+=@=UlqQ@y3<+ZG*^1S&W zEnI;(do98e&i2MsFAPly0&bCX{+?Nz31o7&@;1{?Y*VdnIf`s zXGkWO!^OxUo{1Q*uj@CNHLl7Alyo6n$0%JDBD#3=OJ)_g!znt;ZXX&H4;4*YL%0v>3T>ONb+EKf zsa#zgJRD#-z{BAQr>y4YZTx-Qzf`U16k3%({)-Qr4qe%#Xfx9J7|_5U)sBmC44>B`*gNHv4wUkiM&*R~h<#r$2t7Dhqh>)J5F z*yURm_x+^fXvx%4{!WK)CZZQTxv&aR4Dbr09oQ}tCI6i2-p@6JYHz4_owf@V(Vn+jGn zMsgd>OG;RvPJ|kXy97>_eiW-~3AHph$C`$v(JfQ+@^u)+B1_^NAJtD+2v5kE85O3B z&MRU{sdL4&gB6~WQfW@zd`v+7mhf#6+?YW!JGZg zimv~HDabs?G}imX*?F`2xb_mK4kfXV{%Htd(q8uoxIZowW9oC+(T}*R&Hb+_4Vd!t zckaY{pDVc7?~S}Z_JZ{9ljRy#)&PPy~&dThFQxnjH%XRlvj{tsne8CKQPy$uM` zjidqwCDPpoP?QEy0qO3NZjOK`snUH=DHQ~1q$H)gL!}!@Y2Mj{@q6O`yw}Bt!`Wx= zJ+o%5HEUMgE)w21D7FM&zwFX2VtIKuE*!*4K2AD(VhC5**fn0zxsD=p23imq4@>E# zjQo^qt|bcJZp$Js)(EnPv0C;S&R$~|nV7w+Z|b3&T+GULK4#lN_G=mSLcvm?pcTID zDsy_pvp6d!sindIwHVj+maHf2?A}V?2##}ebXPqf;>;JYOm+o_*v*}Yl#My6qpo|Z zK|@omTmO}J+m|}W~$BnS@ zwO!uW_*=8R7tY$$TBCR^7Oe{P#! z-60##M-OX)Db3cB;Xt@8(OgpN?hX9rrvX;lHND?o{<2Cfh@Pi)5tDBS17y-NUY#SG^8G$Js-nZ%F=SbukAMP zj~x}d2Ad81s6J3WYB?x-c$TjF6oyBb5hdx_`ZoKK5l@{661Js8BaYZ!)zTK$+siq} zC&KrupFMTO{a9NPA9A3I>sEVkI9JQJaOT~Z-f`@~&FD>IHZKq%NJ+IPnuhQA($)rY zoKv<*7S(-7W+GVc|3F%o=;1@qLP+shRrK$4g_p!%?0F@VLN-&v*>MQZUw&MMl!Dpd z0zl(8JDtb#qD*u>nz>e8-)Sq*=Zj(!4=4FcYb4-Cx3Be$naQr(?_R&z?S&pI=0Fsa z_?dHIxfCrf!JgKOMih%m%Z2tZjvF^yv^n0ST9B#D=6lu9Z9PgEx`xc@)As5Bgi-DF z*L+-*Arkrxm9<&E)m>>Wu^PNArziMa^12h=rr^)IVr-F!jF;-_i)14-UIxOrBwmR- z8a4ayDXU6#GLM7xo2slgL_oswf!xZ7pJ3W}Q1MHrvW_@oH z`icCW{O48PGFvfje)}Vy@zm32!!KTW-mR4t)m{FfDRJh?VovF%k4}oTss81vPpm#6 z_~o6hq~&hmB~hXo$f&u+U$dz$-W181Y^7o`Tty%?-xl+c+FOgD^0|LGUpQsz7Vi6` z!&0HCG`)5qWzhd3qj%c2xtZTyQ&84ITkWAAPom;498&n(TeJ=geS_z2_-%Q64NI;R zFs_(j1%|z%%5&NK_7mT`RzE&t=*`c|F>cid#%i@Wqt22eZ+g=X@WkT@J#zXg7=*4dB2h}n7aYWoy0zK%DE6*{(9&X>PYx^-e(b+cE1C^kYxMcYPw34JXI2 z$8mWwe#i=6p|-BYs6yEOo!*YnIi);D)t;qJ{LP9&4F$qTi**7^s#9+{sWMp5_hNHJ@^-PhXjaJPCoztXZdVpR!y+IAtM8!sh4OTVM5 z8Oyiz5frk5M-r!hpUFeltD6zieaD7AQS|+Fm6m=&&d}`RgYOFluJA#|l!B0@6x0Xk zby)9)Xiibrfd27=c?k1SRoC0j@M%0Y5cD??)WW)v#7cK`GoD>9Y(Utz?)Ijf$@ON^ zIHYV#6@HNg3|+S%t~Lb|y9eZqaR-t;Kj_n(TDMFP)gIF>ftIdYcn|nJRjzc zxGw)f@Yd;KgG>yl%VK7i4pU{tJjQ4y?}ocx`dhv5nh)vdm1U2(ZoH7*-=O?K5|22~ zE4)olR=FKgyns?x9B%oxCh<|8j!rY#>%Q6<^aqMG{&h8O`i(UrIiO0K)PyG5rZwDJ zqDXRV{B#x>oTxoYgtTy4QZC}^VdS1#x=CN=AiI<*tx>vsi#wioZ{t>d!)MqiQbW{) zNhUToR|kygnp--Ii4QF5WO3H;nwU@jKv%@?d-O0O+8k=+)spF*T2; zq|uiGdBb!91rv+%Z9lgwn&8#~OBT|#DXW8mgK4yv{DD|Pf3$pWj+D6%H^b2Dz1)d?h)Jb0i>^u+akf|C>X5lG$q z47@eIRTY)jhpzH~YGN=9-AjZR5(6%Tj}5$Z&v_;d;--Ymz;~EZN>b>s*7(QJS*8#`0NzljPo839 z9=m(4{ennBi1;OcGsZTX9f>>^3H!{~evLUI_wzV24Ad)26evBbA>hb;7qtz(kL@L&yBHAXv9S9|eA~?Wop}AfH>V ziBU#{-a&@UAr>vWJ6(b{5j$oizyxWi?xA^mOoZBMd z#vV~PkK}RafLVsZMRIqJLO%YSE}B!SWbRXGv5-8Aamhr??z=<}XL77U7OWTdOYhx4 zZZ*1h!@HLiQpJNXpCIcIX}-Q#CLqHck$XKWA9?1Tn05u~Te$Wnz@B(BF9`ouxILbe zt3zfSDtCY~PbFW$L)1PNPos3 z^&whplsq2;GTPG5w#_&69lD=LF_xsm^O#UVSCLWp`s_Wz_Ou4(fYPt)s^5eUBJH@% z7aJr@bt*?O80zTizzbxl$I&<;z?8? zsuk7{KvoJwR|oB_l;(Ti1yJ%31!V`dr;)_cA~+$@LIe^Hn0GJfO8FCqPLYJpT%0H$ z+sV=~`8lgmm4ryD4!2-zQ{1bWW=%-ueT;cvC(d~^_em%C1&x@YUUvz1&b$P}YCf-> zzMIN5#Zt4uH;DyT@@NLhQ)dQ2pN?p0dkQ??Q$L2$wG;6QEe1M(ukM1tMDXGEfiF$R z;!8`D4{jy ztu+*lr;l9hV9Wl$3t=l)^dR zwB*#wk&e`!fvO{ei`_8~lQG~RA%p^Cd0@KzT)x!VbOxzxK{TM-zx3^iU3P~fks@(z z%Y&!EJ9b$i2U|YZx1=k@&Am1?!~lFSx|FxJx8HrnaLJs*2X*(!cA z+h_tur>4ak_923NI#ZR7LPUsoO0r-*N60&EvfGGTL8RND-gNadIt?fkKCkebg|2iI zjIy@jVO)8^LG{&YmJK21IiMWFKfxteVUNc;>x$OKH(1h|^g?rItZJIZ^y;LAPaBJK zjY9lN=x2rl^c5Yh3zzs-f*V9H>PnACp^^=%(H=@Gi(MTm8i-Y>_uD$RgfT=66)`Ez zria?eh38`By`gP2GHfKvvN{RWIHymy&vw} zm5WN2E@Pk3#;;5I6rQuf7$VANGSxVFmI}qtL-iq`IGfhwGcG}j^SKD>TO&o)NADPL zg;oM+a{{z^IY`9H&wulK@pbAJB?qqW%`;y>)(1CSt85S4tPd`u(#-Z6+K1=o^A`eB zKZy7ohuB!1U%5ZKjDbQN|McUtcRIIm9nwcE-9BrW$_N};S$4T|^UfcT@(Ql7a4)*P zxZjZfOt^*WfiLsd{ROMMbpbkHabmX7ZMWy!JfWS zsWpgsVm5JEOWH@M#=Q6Ktq*5VZGqQ1Ue}1Xd0|M}==wDh8=+A3AMm&5di|LF)bYJ( z+L&3*j`XL}hjfnbg~l1W4DKJPX2`MUeW-&mRx!aOpJ-}EaXROMSxKCbBP;DgJYAZL8YdvKYwwF@e z1x6Pn8*Q;F&mH~3LdR9`;64cRA`_}XW|5iarZNJTeJW?T&#kMqr+fKx*UyRu<7jI0 zc5yr{i;@e3((&*@Njpa_+-}ln*64AbfETh~3wMuU`=%5jw4-FZk{+dZ>Qt7+d#k{` z%VB$4O_Q+ZRW!Q6lyma;uobbICW(*Ry>PYdd6v~TnmNP|!uIs6fxEpUx#N&yljVlH zJNpAgsxaW-n`nQ!Z*|zqRc|mjEB?S6w^^K{p{am*-a!z(m(N_%W~e%H;40ZnWkY!} zN^F#CpsZ@wHc0mxuf}Gp1%;|%bwOkk04byTa=^vM0CJ)B0*CcTv0<4CNvSZXR%K0M zB?!|jw2bZ6@>s1?Sna$`^Bp9|)`BYAr&mMyQ9#v^@4Mz(Qmi0p@?A3@$cb->qpsBg#hclqEuvMZ|O8d{X)u~#!WX(s)asve7+;mLDJK7w>Y%_ zIa%N>S1}c(j4dK?q9pm!9H2om{dzl}^#xrUpR?M-r&0k+PbuSV66B&n19;C_1-y*< zoZq6-wNaNkp{5`-0jiW6EIyP!fnXD$-5=D7YW6K;e`*WK3U&_sVzje1#TvRZ_fr{E zp}y~~1RV<0a`n;9<5K!{D+u9&mf}^w)s7cBA)4h}UcTNT>9Hh*5hXtS3KVJZA8t=@ z7=9sux~hwo*w3^lugvQmcqq+9IO%E6%cxWu*(U=<_#Gr(Iyq81bch%4uQiJcnSHPJ z&(0pUsT@u1KE>iQCp0aW*0`7#-fA=evyuEH)LZ|PmOGJZofyk`Eo6trWyV_gN1MpN z_xaYG2_6>P!yn;4ejJ@QC~llopWrata>1e5^9c`1;=kaTEPUb9XxDkN;BB%em0xLy zjlB~x0xk^n+^RJ}fQKhbzF}&ftPiTgDqF)^0 zcAW3hloG{1_EXaKW7u}egU+|QGK37H`!4gN(D|TqE%0iN-Ac{%OIL=l@+oA7*wc)X zUZ%0JCQh?s5p`XZ5~s$3JS(tl!Y?|u;T9t8j}NUM8PfRiDw7QPDQW7Ho}Vta{nU6V z=I6Lo%+YvO%+Xy<(lQ5Z(lQV1C~v;=dIWLzBxl#q38TH(9%v^?6V#0JSy#X0v#ILh zv#xrn+%K@>7~%i5l)AFQ@zMhY_nIbMa9UPpJ?K@c-1DcnEMhPE!Qp}k>W;|BC z`_Yf=h8mJ6`*qOjvbfq{Lope|vR8tN6zhgo(B4;CYcoEw=?6 zEV@NdAw01kKrD3I5(IPwS=$5_b84#mIYjZbDhlB{Nv_irwkfSDiXu}(oc7al5bzcN zy1K!iS)Z?6vA-s(dIXA<%bP^l4FpoNlJUE@5kWyApp~mXz}oN)vH(HH`FSq@#HOWX z81-I``q)zhzkUlLUuj?^mtIa#HHf>_6Xbm)Z}1&S+*EXk_}QiJtO-5pn$^iYTnPm8 zYcCIxvNf?)6j$|D>K&undQFUk$V^8pj)K`!vtaQl`TiXE>ruQqZ#TRwSH4z?LDlVL z0Ewcl{+k3v+RQ>6zcHKoN59V~<4c&JwZ~O6S*3>D-57&VyC5Te?e4a37W4w4_*A?t z49=_#*3&6Jcp^X#ldDic^-y)0X1-*(Y(jBPh@7HyMuJMzZtRPoz=1J9ftEos%awN@ zDzJv60pM6r9>OV1iQu*T1@>Lm2l)gC z`&uhBh0>kFh)+3&i_WI5b>9cJ_nVwQ;##2&VWl4Q#RRy@#Znak<@A+Uh^7%LX_#yBp)*3W{#1 zmpU+IS01|A>NQ#wjYeHp&vYE&@B*zmC-T}wYk(5_QA@0d06O-YFHaJA_*+=o_c>0e zP`V0@=k@Kd`X~+SXJuu=9Ru=_>5N)t^Clu!rGjCgeoClqrz6yA8YKl7*`U`2#jX2S zPmnNS7cMKM%X2xnWE5FsaS@{oQNjJ0rUw{u>}XLp0Sdr~FLNF&;ksB!w_h2(qaLU9 z$jswLY)6tj{ut)W^z=cNqo#p5-njv+xk)22ENrqqTg#a%eE2^EP`Oew^DA6P-5D~`zb zBCQKZ5N>^fk8ajowmlwX-HAIqlCDToloK;|4YI;$QSL`0DVCJ%`H4TRLw9xFmFwcp zu@>;W()PF!pRC2!3V_(oF@M9f41H{d&By|~R9A*3`o3w90dt9NZ#1+uE?>^C%f2g@ zxC_v}H?A287zXog&lMnV!lP&;veDvj>lT7lhEWgawM4buF=tcHDZ+ut{TgPv1P4n$ zhqbiF%6$UC_l#V%%%%xEs9W`1h>jCRfVc87%%k_#t)BOSToMTBpA$KQt9(BAg^y{^ zD^RbB`#XI=TgjF#oqZ*WHTEf-PNdZ&mVN-tpyQbs02$th^3Gbu*?Q@+}@50 z0Qv?V^uTG*h)fk7dk0`(%)Y-2sv@aD;UFHj&Dcm?f#o2Ps+MEqdiR&fpNkOH)4W*Q z^j?&^Z9e+c3N;7np9TdsCH>MI3dcz*>M+`wPaTVXNdvoE#8s=;9149xe!BX^B4I3! zI~Y4m3b@na=kqYGZpc{_!s|G!G}~>-+1l68TrV?T?vC+GdyVP}pYt^Yo&e-wUAuVA zM~w5ADrD;`k{vAl0X^qoSq}@?0kqLi!Az^d!SfIxK;-)#!K5cepbzS+hXv-}id)fY z^7%mi;r&Sob=K@Di>!e(kj_!ue|tHn1}_^*(;F(GE04%O1PKph5Ehi$R{)ju4BX!~ zNN&lcV^sh;=SSzuq@I8!XVjvGj&0u5bT!pyy~=SIfBAcGurRjDc%kngma#o5eLfna z>qb1g=-c$&SjDi?CV#Hj>LyYXaN-?F=3sx z9`9sw>Jiy5N&-F)Hc6bedemauvqJrq(B^ZnM}>AdqGbx;SY^lz7g(s?yBE9Z;VALF zWn@tPl8)-Fq8tcJGY3nlt&+q%@zN=8Ix_$*8)$xhIVY zt9~3oMT+8CBHQCNMJ~H8rLERtgduGMeAHh$crIyNPAtoeYe$D=Zp_UVyQDfT4WR{o zdlREmb~hsNg}HKW5m#W73gYEW1ox)*_V)nResT0me)RHj{N5YY{W7;|j&tXMOI{1b zWThV+6e4ZX;=qJ_#;cu}=HE~SJu;iSE5Sv=xN(~!|I}Nb2L8xp6*m_i%(bzxL{$szVA#nHsEBGrjBGz?D09AzZm=!EVscDRDCu z2(v}c{UU3v^u6_VvBU*7(3&l5eHYz`^?C7+ln2#8m4~~{?m>>S55>Y#jP*v$#@?%Q zoplLOSMXsNT@F z_fu*}T$EE3)51C+*^R&0iMAv)>T~|~Vq9-NI2J4f|NH=O!kC(GG_~D{)Aj0~CtvP=?Xqk}Z{s1>KlG3@Th8aMScU`pRWF>RkxY&!MiPa6qy8*o*`2EIL&!S z{B%tyFl{?qsj-tJ)@3RN(mv*PU#!3QGtv~VMy~@{*tEkK8Dex0S~H#0{T<>y^FB%z zwlbRGv7a2gLWfe^mX&PgyyNel?DxwR2}(G>#XVS5sl_$8r&cC#*+0Gi+BnEyX2-14 zS1uQ4?ipTV=N8zuwshJwh{Nb3%Lf-O4VCSpMJNH!tK_mc#<#4 znJ~dZ2|-ttg5(b#GO3EU`#~YaT@#zA&$kLvGb`UXo!9ZdKd-GRw&vWy$L_W-3JuHds&Kw_&tLLHruK8><(!2&q_rr`Jwc zcsZGJFY+9MuU{*XzQ%cUdy7_- z*oanCI8#@Ynow7ixo3y7EywvbI=6j(BjiD!r{sH+5>;1lODJ{%B>QezwPr&CRm0 z9^2iUbp%&C*gHD5zzHX2lFeR>h>IHa{1Z)YodcGK=%ne}7 zO|sy2k1qywMcj|=HphF-=`Ca)f4q+gf%3k*Wwm!{+!*I=8_(;<9(#y)J9-IoB?;57IbXRz~_h*A*eO$eb0~!Tv2*kKeHP2Xn=5)WIMTv|> zIzG}^U0r9lF_W^6w&T5^m8L@;GV- z2{HWljXd{jr3jHPETX+%7-H048K^7mD?skLP+PIJHQ494ghuiy+cBs-2rKYz?bwCI zr?gti3_Ht5#?~(3(#D)zjdCw{m}bg{n^%k;*|drLtk`|?!ORPe_geI3<2hsu7!pdI z9FlLmzL#Kr78V@Yf?EH!+gi+PPYVofm~iUX za!%b(U4HK91`x45`LfH_WcI)h$~DLmm+j{>)0>`w2NRfDqV%A{&l7eeh}#EfVkvD)NWrumngoKzFX^|DUtzA>ZFf4#L)*q4X=rg_d$UcDBZpvY)!A2 zWcdL+UVS560eYqnZ2dA~=kYXd$(EW~Bt!oOu6zJ%4UU$Sq}Z*=0N86{gaih+J4zh0 zY1?yV3@``HZa(fyf;e0bQVo?`AanG)nrBgkF?PHkx&YVkEuR%_j*WIUleQd>MZ*f zhXeV}{!L|4R9YnXIK9tjc{{P>{i19fnFzYAbuHH16z0u*Ru=M&G|A#oAevY|YfduVMY<*&S zxg2nGX%uu?GzHdsQC41?V8y)Jjp-H5)4`=m!0a(v>A2H7MkMTUo{eCsBy@2*dH1Oq z;6l)g@(rBcpfS>6uMAKnso(@*JT^M8#AN6RikgyFEYcMc_umO7d+nO3B&WVF9S>yo z=oP%*AyjBo~ldX}H7416f};CSjKb(@QGW5%?gX(kg*6C&5Zsz-kCzv3P(o z0$;RF0tuxTlc4JjDtocn-TiyoIw%$e+Pw;z3#NO{Ma@g$St}b?imFLezdo{PDgu)n z26)PrVWPXHeTJYZT5b?)=@($VPIiY}66ym7a)Xbv0AV=>bd=bcNndlG?f4v!IZ|jf zoL22?003^+Rzc~ZKE|3ei!f6=1RH+P*$mFqOY4kYk@p`+-_o*gFlIt zboto<)#{aE13X+?0CjK>_=D%k>LQE*3Q9LF9Lxx;b_5CX2`yjcPE+uNEFmW;18 zKFFe)40|r$*i$P2mt45F{Arj} z!%`2O#v?}_V5#o4gMr<_OE{qvL~AD$H=b#|fJ??=2OHshWpkac10apmSMKiIeI<6> zreum#18|`QTQJGlO+8_-*lCGq#Yw;7>#Xa?LAem*4!w~HS5=6jw1%=MaR^{eJ zGc44&3-J37)a$5*6Fj#D3mfU<2Y_Ey?zZ9zXk3++^DeuzscDmktaVaS@4Cl2P8URp@M);!J z2zdag0l<^3`ZeuC@HK#fk7p*`#YM*G@r9AA)R1e0U1_41)g_3DkZ+j9K%KvX0NwO} z8zy=%h^@jDU=$aEL4IxHpTHRg_QSl|UGZ=ge!xVNsMRi%_5D|Dti|KW$WiIhvVyBG zE7gK^C0VUW0Sm{0q9=!IVEK$Ec^c5p@v4%6xdS=R_+=t!T7$&UxWkHT0%dnEc30@k z{?eKRrsQz;v?m;eda034%T=`OneH}UkdL)JxQ~{gzMH+`$&YCld>oYU=`TK_r-WIP zrVY;23vM+TEQ!2z{fzg)7NAcHwt!2?)sz;6YXTM9`()lTC?|Ud0WBp;0Re`AIk|y_ zw02)7TwM2VUt+5L2|vJ5h%qM2$aSzawUo(dzyxoNs!^f?J;aLq5D#vA^Z0dEQd;Tn z&iDt&8zBn$$W7hJam}BKvU`R!WnBGVOCsoz9|CfNt96pcH?br|@p#Fi_*T7H)qsVZ zzHROD@ywzW+vmr^k7tdU8t)r*Iy)@!lRIx-ioiT21rX%tLhv-1XJB@XHbagS$rHZL zGY|QByU=YXk#%-(C;? z@Q6lZO8;b2OeK4nAmESCM{4}J*H6wkOHvkEsp$_C)sFEnuWC+2d!196ovWj|fZB_Q6s z!v2!#jMTJzD0=%nE^qC4iZrK^Wp32o6u}Li1Z0D^pknw#i}egfF3FQ-ZrK{~g#B!K z;PSL2G(*t^Up$@8KDE3^`2&6U=%bqc%^P%VgN&%hL#9=Fgv#w?j?=65mZM-&Q0d$G zpl1V5U#MLu77PqH-5zm~L*gmLctXvES>i+Kgu1@Hi+LJC{_MUl_8X*=*TJ~1AaYd< zGU`E-uhxtOhYKgqMuOMV!K~pr|h^ItSA@4JGi*7cgP0=g^H5Y6#5( zjQAD|>v~8cr6f-j?}xFOF^ycptGPsZBla(kMcaS~!HPkGj~o(B$;abmei5+y1y$Kv zso+|fmcVz8`R7lklz_@@Y`)k-{x&zCUqkvG#1+5$t!rDGY4^%&`$)I)p08~CBg>yA+~cvH#tS9cHclIN4|i4W9kZct6=uS#o8aD(-b9$tGLHP!+j2=g=7Bc zd8|QC@}*SWsh3dQhI49{=We zOz>dTz?N_H22`^2KM*yl`Sz^p?S-Ru0$-=`#}X~@zs8Srdar%MxBRBOa)tdHSCxrR zJ5ns>DCc8U|p_2MA`lw>@j<_QrrnL^09#FDx9taC3IYj&E?DB)ZLY2-vkw_5Zb}{ar|po^6~t+&zs-qiBUTuEbtO&MEj*gX_ef75y@0;A{7K# zaojw}^QY?R)D}HvV#GdXhvaV-I=MRo(!V@am)}NUbUgUyML?XUWF!&4UsCXE%LUJh zkizFEW(t|P$$WZj{C!akvxD`&JnOj>(0SanE`Q#qgoiqN?o8NzJqZbAO3{bXM z!u1CAHwEF|25o$|ZrGk$ zA*Vl_y5%$WC(oV^T&}`u8ls zXe2S7ll>P$b3X;|#I3$<{O783lOoUmUn?r(4{l6ddt=IQN-lED4*EYIaysk3SqGZc zTj)qbNrVC@dY1vV_ivW_H;?|BBp_u+1SFLgcYFRnB?JRm5y_V-4F1b{J>|7Wbg;@l zpMScfzh6!XZ5$!;3A=y%szvvYl|TFVw|pXk0hg=P<40$oY^tLe&;LhOpY#PU+(F!- zAYi>~Og0sPaRsS_6 zzyJZ@Mzi+oFYZ8I3d`k@5;G37F{zC<5c5n^NPL)8e{}e>vJhkw4*vLF^RBL!;Tz~D z^mA$x1lkn_)8%5v*E3nhRnuFp{VUgza3K$!|6^@VKb|ms20B>FE`-S5VxAM^_Xa&| zG)ScQR$WGb%VTM(pkG_of<^l;f*}Nm5bgh!9Ch+QW#`YV16N_Hgu}ROQ}@kKwHwBe zqmnL4t@>e+_2|tk#KT`tRboaa`oEPdj1CO-y7=rC06-lC?xd^f(HW~D_@<9#Z;<8z z2X^b>!HTyAXy_G(K)VN>!VwXe9VgcQ-^Bh`l}6jK4Rq5pcJJM}bQZ7%AmiMUIlK6k zC-{F0z{lUZ%N=5$TSuB_6s4YKc0IjspBQoT*YM9+>pvSo?=f9`<3BFzg(illv;yp& z36&Ml6Tc8-kh(b+s#rrQG(sSmb}3R-dv&gh&8B=aDy$Op+UR~=M%aEqRZ~y$2~I9Z zr>$-i-Lw2OljLp*(m#8rMbxbO>b9&JSl)h=R1!g6Za{Z;*!zU^k3~3N7<5jD9MDA`Dxgvc^bO z0eF#qPYwD=;)8VS%*OiT%BdW7@B;MB_lnK^?Hp2GX7mIQ%r zkQHg}JYpBX*Y+Yec)oJ2iMc$b1z^Oz;IT=2+WGpn#?j%y5+GA9)Ce57XpP6+8tI~A zf}hPl)J_w`I6Y4sDz(`*vtPd4(n}F8`RX!(`w28^mzUxP%abIsT1$M0 z8VCHR?R}c|@_V5E;Xs;CW>`r8WN64g;eA?NH63a)yph(*AYtk-tf$eRt_ zvUFs1^>ey#outgN{Cm*OoT zAYtAFaLB2KL8vDS;HF)#r*`>~x zH%|6Pxb*@ckuuaTt{m{+7!8h7S%cO_AVYatred;ao9d)4)lxD%*jiDQ8^P38#CPbhoTmXpLjg8%z1?lp+G+x`EZ}&TNG6{s!%YOvA z)qAH|=PlhRXu@p?xOjtMb(Tk^mx$mGDLwlLQzk$V{)dHC;{!V;zxH?3_)(|f)*aFV zi?0>sRzUF`l2DcJnkvh66@b*YhYNjKOMs&}%AZK5xM_8R%=l?s6}PR$OoaI>V#kfR zG%&9{Lr%eQd|l+du2^Qe)kwrgr4NT#pI?jTESQ;A-yyGs6J zQs0&ffSv1>Mmo$Jpy{T?p+X;?eUegnc`w;_7=D#eKQa);2`R7(L z9S^QQgc^@6}0>E1Dp;pkf-V!kA zrX$arA6rYqdyBCO`>TX6Wb+k4U?$z@CC~%g7XgUhhVyBx2-=vYV%znn!OhP4e#fVp$w25JBW@}6Hl;wj+sqRdZtgqX7ht` z*E8O?dte*eV5s~;p3152YvV@O3yKh|lRdX$=OQj8UVBaK=+G6S5Hkp>C>OLE9;0D< zjDhW~{;Ngl7h0y;qY0X$oVYh2)^M50`FNOL_>i0a(28e!>c85w2xUxe3*UH%1~FKx zcke&SxH<3~QChtJ-VI627D#DO4N|Qtb6pn}Dk1zAmVsR*Kw$mLx2MJk?DO$j*y@L9 zf65=wA5^w1Tdgnbl3^YMxvl1GfTaooh_q=gXp3FgpTh*zI+8RS$w&JQhQ;F|%WHtk z>#ju=Fo}TPgn&{9a?F7K(hrl&cP@hnG3Do6e za+=#;w5>ue1h7~G2?F*W0_F|(Rke)3wom|2>V_(J%|{*k8XJAm3rnA#dEIE+Q5o_6 zq`~Q?`VT+K{4K;F<%lo<#RE2VD}C}y35av5 z6?Q)|e7gR#@@Q1hdD$}0xb@@eM8hyhPcwuz*iq0B9TL3@%1hVCY1A5;jiR-T0T^R+ zfq8F}=*}cDWPiaSLsJMqXLy>;F|=*NoCm?qvIvx45tveM(JIiEA8%gKgED;a``^9Q z{Frd~%wJ)J0^}SxE)H}SO@KPE0uV55-*bG~_U*Fdqw7I8p{d=W1^&$obqdgo z_cuRyZ+-|U1@@7>o0Q<-tq$JvSi@^)Y6)~VTQdSVL!zBGwm_Cae*oxIS|GCxA$Zh$01|rr``YZaL{NRx zYdG=2 zp4ZAU(Xo$XQ_KJb<)0oJ1Rm;HJmojRe|afk97MpsL!OLf_1CePi5Ri;hpe7`{NoI4 zIt}@ErfHB$@lV#*lofUM)VuWCN%n6hipYih0%~tE(Sanu98vrr4gBZGfQIb2C<_yx=w_0AuGt20UY^`2kDf(=4J8%t`sOK{jBrqY%Fo7v7- zSjibB)!0_$C-uueWch4(@Vi%G?q^*5$FiQdm+2r6*Gn%CZYT%n_d=Npqx7Kup#e@m z{xN9y2w;J5Du%ni9R2X|Yp{2}X7l@5zx~+97ZI}%?>L0{ormsZ^hEia`%Xpyal5Gw zI@y^o;GeM=ZWBm8XVSlx?JC&($I1OUqvOee$10JC)P752q&^q&$8=9G(!tvQ^Y}sR z4RD~fV#48{o+B9QNgVs{hyCf8L+C;bNd6G(jMWj@sCP~`mOtQVb zmF<*=0p<~wJepqcANyjwU4_566<=A%@!DiaRp(G2n{@w0LmVU431cahp>j`~Eq0S< z4pI&foucQ0r;Nm+$QDeb{|?7z*!|8108>D? zV3>xcmBdY3nnzCC#xyiUZ>mEsrget&woC-7cruk}|FBpPP$*-GYPJ?l){KJ`4{H<*Sc0*qz4EB82{k zsTWJO<5dh(GV_4kmzIY{fhZUpu;8RIh%Y5 zP7+1nAmL6+YDa9YuBkG}f9ZQV4O@=4=7zr~&nB6MeOBKgcYNiRcHINbl3RMrX(tMi z(FrC0!%Ls~T5x4B?8V6dddMHf`e~4&oFvM8^fO6%fkyiIcn}?n80-zEPGJdn$6=ZW zDEZhZ1WyTI(S&gL3D44k@Vb^1<#Wy-`nKIZ0gTK`R7V268_NZ)g_brZ+Bt<{t!c=& zUS2>!qlc|R&x{N8Q7G?J%j8foNUv84NtN$^HJ+_*S$pSwt=wX5PO*mk!l@nzQG`vr zu9rT`FtXZ@Qo4#7_zcPFl%m|C$gQ8b$+{Ed?73Pyxm7KWe{iDbiZTC61*#i0e;EA? z)=f2HXny~h->BVsKa)ZHVMCVom8`VbQ?^Z`LvV1(T><${Ru+LpPPv^oHQv|0chQh( zJ{^z%5u+{V*>G5F9YOljnLq$C!0g#u>$n-ZM{clCp5zIDINS!82?`|}kG1)J4}YA! z6cH&d;GX#%M(V@<{2q%p8v#n~`d?1tDyC5&{cHY$wA=lc^*zRzDNhtm^1phYM=%1e zg`<7}`Na`rzcau-jCE4|8UQ5YKf5l<*>kiu1{S5}zb_#|e1&Ef80k|lACgRYnAMEAd^&9TGfDfM=>i*HA`gD&^*LT801J~zsj(3C$wS3^eN$qZVrtK2 zj^cPz1V+|0c?eSM^)qe#1s(p8Nz(1ooO4eKJ6ZU@&6Rs|{XBSU&jeH1#-gHVKc0wC z%-Dx%k>d=%2p(iXbof4T2YIPv`;_NrJ0LO#n z>FaQK%u{*$DOe@6ZGt3^A+-@yZjj7(pSfoHI^Q25?dLiudfBNZ(bKv+EQwtZsgEsv zc>NWG-Mxv-dF+XIBX{f|lRmV4raNqU@1pmZA;nqJD>wkuVEA$H1n1&1XXV?YpNC7E z{e05Lhm8F8SjEFJ;Qx=Vw+@SP{lb3@L&LFw-9lI||4K?I~jx&{;p=@>#G-BH(S!Da~h3Whkv9+KV{P*>d!GH5?!3-<3(ePb>pb;MGABdAC z0so&5lj}yKbhq3zpVCyn3651+vn~j{PPOL)}$Gz?VPLlNuqo6pGyh^`q1A3F>sr?iE1PT z8gxwtFU=*78vD-;?Hk*&qW}K%>#F}Sz*UdO_W-f0^YFi`^yKp1-@o99o$naQCf8(Em=V&?nG?aP+4gvA&UrMc1g^YZ}h~e8T_Ekf_)jJOBQH|B6fW zb@@LHXb(U7)q|V7{NJMo9)km!SA74k|NQTl|99O7Xl4Kg9REPL|GlVxy-ff6*#G{> z|7Rudj+XcF5|nSfe$Mn{_J63=29|MfTi+h)Dy zK$i-)!vC5u{`-yum~Wvi8m+*T_6JO$O(dwem#W7852iE{h^4QuKMiI!&(SUmD3Hho z$uK1UIXzxHdB1Cp&c<;*SnU-8(qg7$fcHEO&A-w*4H~(ze}ZP7|GnrfMDM>OG4TMI z@O(Yf6|IvpPJl7p$yYRDkB%6c^ajZ#d){DbISs}*&S=BL(eC^#denzDd<}y!{o??j z`|bdT4Jzn=^Lk?L*XVW6XkC)8fn~u^$hqJ86(5kaldO{av(zuQX6xZzKs^9*F}3*F zX2A}Ss5EX)1^xlXrB8QoNDDjNh=pH+tjQmf;A4`}@hJ*FewqdO5ZipknPBMyE#ZOY z6aUD4Xakrd8?j5L@$L=^FV=tvrp0&|1@-mWRQrqqnYn%?2Ow|$-U41|^20nbv2F9- z99X_rMx7(RQv*ZWqZFnTDKK6?XLyqN_qWoBzrF@>HQsYCzo)MQTgIm_v|&T&hc(eG z__lYNwyXF#{jG=1AM?J!#H)F&35L$n0jr5h<$|i1@@VN9*f>W1s<3Uqb5(3^(fq4A zI@_%is}5}Mo&gy+6@~ULIp}d8P}MTWTl99XffO%lt=m-U%x%v2iK<(FdQs zg*xEMI&Yi@Kc4F&=bA)H;6^L{Et;tOl=nIfTmxnjhb3)HBc0Z#z|jJos)1P?{;>QS z?q~H_lOOf8+{}|r`{}?0v@;aTVEMN-v-a#>+%M5caFb)pJPEG{T9fTo{WfR)obFqP zsNw;$?gk?Z=)~Fao-0t>@_Lnd1RzcEKiAPtA#k^qa-+)uwYb1A8f`dV(PJ#~T0ND? zp^jlmX^fhCK!rRuCSVOX(BlKj?B9DcD*6iu32J@ayLk0SH~{#vDk#571HG#mJQtU7 zOX>W!LdGja4A?6NAm9oD*0G5ApJ)5%F6llgl1RZ@3s_4rVuQZmA0nI-{aCG^CuP(yLRI&a&GU(`e zK!%ezh$FjTPnI1sd}?`T77W;(fpP64un;j~oSW;Q4VTExEB$BmVh}JaA8!a;i4``i z5G9TF`(Iv8T(gr5ht)s{u`uG}3!LcZr zFHA!aU!e!XWo^Sz0J1aL)T0ykk9$u|29-Rus_e@i8iTa@D7H9#%rW<(GE zyT~jg43>WV_A+A&&kT;4`S3v4P+s7Bps^>5gS_h`}F8_qq4~@!Tp=JdFw-r9bgt16uTje^wRWn2-8}N& zAsA|HeDJ;GKge z`^#>uejX7t+tF#qRW2(1JY~_h;{gi5KGOV;;hppZi^ee5U4|uc`uOLgxQe z-wF6--~Owy{<6u4`+TRg;KTBq#~@YE^siahgOP)o=#h$tosXZRK_MVF%+_q1^}R!@ zg*7+O=#5E#U%_dumAbtHcjHY~iUfmje*el>q=_}!Fv$37FHBFyzgE^0!7Xp*k1PtR zzXTe~R;-(>$T7ps9YW&8Lhf_Hu`Iy=hv(=sU4Z*maNtqpVBMKcH8f20X@gW(V>x%rBH zfm2$&qzJ8$h_16OTATdDhZ~OeLeYM=$iMVa#uN|@AEC{{B{w$x>~hkuS@@JRJgSX9 zzev}##MM{;4%|2VUV9^XZ{~N__s<5hgU*m;ZjV)Ni5=-M?=nDpD`K2Q6vTV;>l~fi z#U1*!Brqu6Jkd>i8E-IQ!3l}(}v`%~1v(FMP8`cE>9EuMA2w|4`90gyWXl|L|D|ed6 zYtr9n8KdH>&8rJMjhfnpfn`qu24+)L=B=hU)JNvy+UacxVvwy&tqB1J_<^v#r&D!d z-dX}Mb=yf{Y}y|(fV)rs{PY6n*ZFO{TJotm>%;FYmhD>Sy~~lIjBH7STHmszT_PI} z)rd<1!f;?cxiV~K@4jv5k^jc7II%Cjl(J0XY`OF{6?yiNvFfbkhfkQE;U!quLuzh~ zxHSNLg9ba6z#y6WC;0j}xXi6J=LtMd^^WyR0qd425zby+&)AMnPdOZ0yhkH?fHH+? zTN}WU+8TrU<}dk%K~jP&IL{|Vc$Iv7JZMl{@OmIsahPks*rq3i)4Xm!(5+01+&|7C zpw4@OctLw|*?6&Oq6!pngZklf_dp5Xf?-A6Twk8@ z3CwG^GEm}j?oCzf=Jz+(e@iXskPK=mNngEVptzqHX@XSHf{-8` z8l4EJ@m=oMP6~%h;ZO3gl+$=;!A^j~rkF?0R~0M2@ZtS# z{@5kK%3HLASI2Urlv-PYy8dyYhs+!g;>A^beN=;&P?W#r!|>A}3|!{jxF!7$rF(-~ zcksY3^xe!A#iYsqgt!0ZGH-gyk$N$kd@~OhYiw*|d1|q_u(;;vQc5?yHlT zz%qFG)TQ$m#qb9+e2%-me>7RQ|6tVq_#Ncy2;4$?)}f-(X-q@-sE>3f6oh8FE2sXJ z0(_D<(2|{jDt>qhs0-6aK)0QL8Ih^ZZT5~g{uYsoj?VWxj#C-Lj_5iIlxi+$&?Nx8 zT~Z1&HnaE8v=N7L@w|%|Det#!u3#4B=6YhLM!++w(lqIFoOJ0I_KWka?ZO2TE?mh8bLal#iC<|MPkoo->EWseU4MGQ~&zSU`{X>dHP0$ z_k{!G{qx!ruW8GO-gF(5LlIi^|E^M2C>nWOXuc45sL}4>4;l>N*kkcuAKxI~UYE*B zXDBEE*dldPARClzQ=s76BYTT3j$xzfhj+WsrL30CB|sQ28$RrB=D%7e#fI6r6ykzs z!kMiy&cN{9D&QqG!qj9+J_69Euv5Pq^fLKB9r8uLgV(iF1a(k@*Y@O~(5w^xb$JM& zr6!4uIOS|!^|haERX{2G3Z$Y^);*Cp5dIef`^fP)04ExyJ}VYY>10TsDLDhyX^An% zhfSWy=QF+DD1=hxOx?%uQuccQnii; z-{6=)`?#$VybTRB*mr3ERwW}L4~l%v@XI9lcNdxS$a|S$u`cw>NeJrF>2hs%^)pAz zt2}qn0aALJ_bzfC&Dr>;I4Y+ht4_<-yV00{Gk6yi8-40^(}0hSF20>%It7$zI%{*8 zxtNM-xXYQuTljhwz+l>tDMZM06v#3l;JpI6yDf;?C}rK_{r(u1a|hht+VU8r5`R8G zkJ37X&VQe^O0iO#>&!d6nMsO2pwJC(6P^MeuKxhk-j;opqN*oV&7ccV7oXCSJkp;9 zG=lo#o+WP7)h>Q_hrf9-B#q!8o}8b_z-2tIQAL^lQdvNA7X0PDxzhdY8;vkGHQt| zVT=VDc_c{wnf^L_KgV|&iv(t%y2DSn^VT!kGN?@9X?92<5kazIZaV-FREJ{n8=*hT zyMC!hqJ&9CLq%Q8*HK6t2Te4f_(M~CXZ4!OOSfn}c$BiZB=+p+7`}(s>aVa!d1gB1 zdO!Q1Y*7GF(~;f3M^rS3YL+X(3=7(JRYo$Fj}aF3Q!1lNB%yc zO^AImVl!~Ms5b#qrq(G7PZ+!CLeiEOe!%@en!4Y+k~(h0B4+t=zPxvjyTz^@|FJHQ zxuSpA85O=IpqGx?hu5YS^ECZo;xN10NmqD`XY;I=Z#2&(m*3L2Xv((VKQigwJPQlL z*%p3w0>Nsp=dY{)v5c%o$5j$0xecI;)APqzoAA+{{*Y7_`=hfu_T|}5*_FH&)8w9F zmJwP0jw06DDPbRPl~Fnmm>yJ z8k2>;MtIvn)aVD5PbrYvpbIuloV&x)*DV$j+I|kvTci1*#HxoI!|)^n@%I1$l*Az< z#VClZ*(6x@N|XK;9nr}^#H=a6Ic)|C<*O41jk=?+CegGe>N>tX$Dn;b5ql#&C+DYE ztd1q~xAl7RUL9+oc||kRd+3@`>r*7N`iddl98t>Erg`(1Ea}~ECHIdLnCIktQv&96 z#k*?82Gr<`OGX=8+RdTaKj`r{vg^7#v`a~0HQTHwV|%(^93`f1#WFzWQf0oOX(N;U zG(OdpqNkh0l;kqXjSK}zs6aIGN9`jBQ6q;NX({Veelqch1<0t$Go3*HOkyTPAj7vZ zEo@k*+aT>~TBzqz6_1K?h1eQ?lD%-&y7t}2Zm)XZ8(|C78eArIszrxnIF?bS{>jCa zuSuX^YwVk1mCCd?F&3VPmJG z4NuUXt+`Pq`n2YQ+5GZD^SP)YwXyzt-I~~GzoQ=ZW~Whnt#=5Sfyjs=O>0t-3&5xI4bo&9xnLJsJ?WPJWw> z`>KZJV9q1`{zA<(J5?Y1ZJrc(7c2D2=B*d#&5NXF)89E-8ar9vgI5d0PnsDj+VYjp zfGLVbFph&Q!9?B_CgQ>@T0?ht>vP2h<*0kalO-%|IrDo1t>>2KOP!A9sSU8=E3#u} zoy?3TM$mv6mSc@-VZ^WFFEwi}CT3XJ@v5HPiG`gF>6t)>BRuuy=;}HJa_xUq+iZ!8 zWFkVl%M*M+*ouxJcgC2Vx?whjULpO+F}#~LRu2rCnvv%gix23HfQyD}jtE zZL8#N)|W~0+b~nhB%XQ%f2y?dy{Qd(%Z$4$76h>c*lD4D5u-iah-s?P@aDep3semM z5D$6W+c)nVX?0hcaV2U*H7sf4cZ<%*b!Ok#wb6ASYzy=Qf_y$#g0cOqq8-1HzZXo( zvd+#&v)J`0koUXH^KFX-ywbZ{^$DRRU%NlAuW_<@}N{E;#2WfpEQ zYCdoAvA+vA#V)o$I5G;eKYiU!wZdDi`cg`V@+?!2BC^k5`h)RjU8mLfs8JP=FtQqZ zZ!LAxRVst4ff`Jg^o`LF=)HBk*A!U#2pi>GZPrl(Wz_LX7m~buj(vQrF zAJ~axODb7VR$5+3HWYiHqFnM(KJ0Sci#&dOdOcjxVIZmWu`|Qy3yav72Wlv2RR9x$ z>Fy<^DkOMEaO@;t-fPP5t5GcDnRDr$M5V>1PiD}e8rgfkBlEmZ;ui~(u1_kV^4o|x z85^}4TDf+kqf85bjLSAd2$Z>(M|+!{jXR^A$)}E2vt7l&!XFZ*B0zN@nXHMf^R&fp z>OOfd2Bt~n{H$dJ*-VFrqP5h1v(wqSnd5b`6BX16CZ6}!)Ohn((!iL>QjjxHIdOlg z{b~YLV1%r7D<*QOVfhS*PSzgoKIJ?bxrfx+ehAqv>8s!PWAS=-DjU}`iWP2!0mH|i!PlRW*DYMo z=&Af6htFxr%3Sh8AM@Ckj{Q#w$Y7Vby2`Q#4U3edK1W>xbjwav~S(=4@?@3QOJ+S>e8r5h^{YusoRN-CtgWPLzQD-dl z>|sdjN1qb&b+0@T&wBvetd0{C1q;!SQe}O74E#mo6^hoYg$gP~y$oj@@eg@BXX>0C z%e9yXIodA{$_jNkwiw>&zw#)(oEfBCugbW+MUFfTzw?aMxOTJr4oMp0k=C$<;*%zJ zZI6Td!gC{s3m^$beV9hf)hMIX4#I8YvRN-Bo;UB#UfGu_Ylx$E01O2KYNwRT<8gln znm`WCX5zn`5sxa7N#WE1_noRMY)*hHEXwGqW!TRT?o-`#oZbqz9nagw=mM3c!J!2_Izae)&oL%i1_({4A9m%XsU88QW^d{|!jx+h_+^eX4-LxZVC z4Ldzl8_07$KTSmGAl!~*hM!aemx*FQb(0`IPRvpIC>R5_D{h2QIDSQ{_|@En{B!7V{l#g**$`6j`&giohskB70~O^A{fc1r^23XzprtUfjF^>V zEz4|iA0f`9Z4aXLE)&m5R|+UKiw0BgpK}I1ldv-9GhEeGd_t-7v%s$Bykio=-+DJS zgAY64=U_hmQ<$TVQ>WcaiAI~~bu!mi#-yOmZOTI3w*hH58rNyK$42H^4Z#qSCGNgQ z)rEA#H1WI9^0blD`M6jm8_Jsk7SXeNK68ma=H2-jgZY>tGe7geX@L-IW1IgLNu<$E zwpOJAq2%vQHf+E1b#GHU{J{RU2N;2>w~wJ_wN~mhS!27NNB!}*@4R)tog4aWm9D_@ zveoghCJ4S&$aQ&jUj^+l3nmQSpE_<^OEo=v$tT&~md1c)wY#3%fYWF}<>K!^bfgqC zo%Z^3r4>iEME7K*Hvoy7&OkLWem6oUyI?^byqu}GMsSq>%#1W=&Y^KN{vDEDtd#sA{8gd}tc}g@yEzIfy zBRsZLg$pG4%38iWJYB|$jtC^-QeVEnN@H5ujZ$myU!7zXCfqn;-u{*?=l{t%Fsy4O zb&m4SPQBkvuA(Y$tB6ii)BB%Q+vaOMBEqXML`2M^8acI~aKqpg=@Yl10g6&le-b-Y6I%(tD|o^FjRkfvLxueF2;cy(bEn6VG!-RmOpXhNZAh zrAAH5l92O+RXx9&xOjuLeU6aa)vm4BFGq7($25dC!h6-x==11=g6CNjDNfDP{6Ldw zHQ`aihAnJNp;}HnyM@v&ytU}A=fyC;A?fQt*BAz?z0$KM4p<0v4hQni?LOTkSePt-JA7{ZmFU~dC@-V?7bcfGM!)?LB$Ch7g*&W zpXO+m5}^h?Wn3r2j1x(0|LUZ@f|&D@m;S|D^)cE4!6{dqVteBv6~p19Tac*S2ep!K zrRqDTH4Yzgf~LY_i^n3l10FL^oWpJ3lLhgxAG8-Fo4U}0Q{CT5;u2`^no<$-f8nlH z)1h_fneAI}n(LXvhi#OF>n#uu6VJ3hgC=o01DBb4u1w@rn_ScW>G&Rgn8JM*RI?1T zAFIUMAS;Y|sbT*x=Y0=ums=VWO@&-5ba1r<2wmc+=r_*Yp!TzmQK3Eo?Rq>c9J^y( zurr(@57m2M#I+Q!`cMjzbEqO1 z?V&MRlW+SIx=Ph|BjC{lv#1%y_IS zO5Axwfo<$^w|&>YQpS^35nCXPOxAO*jdVx$$INBTZqqg2`2ymk*mJv9(qB-|?oCX5K@`AaBH=-zZ8o>3bx+O|@LB&1#kObLxVtVcUI*RT$xyi`y`EsPxsd z-141XaS6-6^@`%Ei}Ob}MUnuGs(4=kU4d3MPcg5)f24Mew=Z?zen*GtPSq5u_orTX@>x}M zT>AuJ^Nm5r{Ik2{TMa+QrOE3sv_vGI201?)U2f^djP!oZF7Z}#B6{mV{)(Kk-mLkG zfigY)43J&Kd@s%6OSsI)%?U+BV}w@1QvTGo{F{mEQfVU}4~hcCxj+x>Xiq1;QPn#l z5uQ(%j2$26@K}c62wt-t5uV4Kcq?%u8Z&T>Ixkc_zJDawLKgTdpJu9F{i$y^_LMQn z-0-#yu$m#X3H zcT@(9|5RMm`81v1Sh)P)ULnzb6K-_#wN%DERiO>NT7PNiA~SIJrXS znLj-pptgU^snqxS=P>Hc)5!_l$6*4N$Ey3=T#T*6;%BtwVb#y93z|r{b=safAs9?7 z3CV|8a^=N`NQ!;lJ20ou5mFkL1~f6GIP_{8zlyliY^`hw*C{CQyklVL_#ZeabgNw} z{kgRCLBpx})5uVJAH(U|3IB>g^-+iD-AM;E<|d`WHPZQk{`K89V_g%}<_k4ZdqhD+ z?equTCZF1(tN_;eX0K00Y&I%B7S#b{rqzyQrY+k{kkrklGDbp8*0ru$C1>}8*+cGh z=(&c@5)N~6sg78=`LSnWwRosXB=H;~0HnookXA?yzb&>`t@pkiac1+7jz0A#zE5kF z-XU$IH&%oj=kg|reA4EvXK&N;IU59Raa6w&7|xo*)v@iZS(1f+ z+ZGBjJzi)H$lOW^y(1WQH&O~_*P6kL%{hMz4WJsR(a92T=r3bwe}eBo%!*rYP=-pZ}?K0!{DD$6=UMn8LPH@ zeY7>vzvzXq|3X0)(nFxUq!Ss3?=|00KonY(i?wExA&mU?fLuRZ;E3|G+*Q+D=Geod zjtJ`F5#_0r1Np~%*Z{mHT&FL(B1bHmqXh0UL)QcV6jve|< zTymPen*`?kM#9`bJQL5F@uL@J3R$3q!wKH3t9!6g%SKIm^@c_N@+&a6|G2qVvFVfk z_hD1s;-m67yN$e`g-4sigXAk5Q!Yedam_)y36r9%TeRrgzped#xm5MBR6m?OzR_Ow=0hnn7a?Y<+WyDcF! z&5ny`Ie$@!mSgVdT&Urz`Ql5&#SauCEmUeR5PuEEWP_&vfvLuwzrjApEUN8$yY#Wl zq)^{T@x1wWlgvEHM+!jt9hiKdF_XcmrLlyVXEx!8)a*>=K3h>!I&>sU?tCLp5_Wd# z^xrH%VCEBh^d13OtC~GLTP#UiNnj87q^UG=+#S=>4wO6N7C=@o9SL`ryhs=`$x~#4 zpjXjY;YrjaS?44FsppEteEBf9iEP&Umj84Q68AWKc^hd`=Spfzhbgrl+Of|C7S!%7 zax?CnQ9C*_UY?oETAe?gZG$?eTb-Lc+W0eCUtf##h=DECdFC!m&NP}HOLd!2d(@;E z?sC}!U1+jXrN1DqCRORNJ?ETx^?0Jvv~C*Yg_`G1bt!F|WlD1wgu0%kC5LP9PJZ*p ztqS$Dr6-;Xc~;T2E9~a^N_$GNWch<>`K(*qLO%MxQ=By!?qsaX5w>!%wc_idkOnIL z_Y=Gc93v`m_3|-$kbdsJgMXiHlv(>LD2WB1dWEPf7n-*$r6|*Kq&0ive}B%4qsXLN zqqtF~{5wbg4C zQs21wPrk1Q&doQ%KBmaW?F+kf+LImHeSdDsxl{wf&8o z)w1tzV35WHaXOZ@w;okN`G3ZQs7+!PDvXa$))e|3I#A^si6Y10PK)W~>X7*UWdtg11Mz#Zcw#xJ~hTFQaU8+PRgRa(2?|+*q@`^#VoX1ZH1Scccd%GwpZzn_G zRp6Ar>ocApH2d)Vg^V=@;aro_eYv$^gZv%#4PMni0Wxf}>cMRk`Kav^I&(8+ct9Cc zar{MO%y5Wh{gu?XQrO+Z-@ZK0Cm(Z+vChys>n)76lXbSJco+=U%gt7ECRgm~NZRN} zkRNP8dKQ^S*Seqg4q}?T$5-6;S1dQB`${*c0b)%5N)rq#MIvuakMshpdWoEtRf`0g zz%Ut0E!z`@GFcmJ`MOa#Q1DjOmXB}kH=Y7BU99p`n@hhDn-lCgg~b&FuW_&*m&lQp zBh49<>=vK1F5XMQ`J)%F2;i{-9h9v~!9EUwZ@VYfO!O8|B0DuB;&O5g zLHm9F;%ta)eAP6m*D+VqAGQ&lM}v>%ktu^e6`T#sJeMg3OHKlN!d;dasMoYH|AH#X z+^_vyTkIppcezXKqL?`#iTh0jiy+Pc9*4ADMD4mRQt^+pZAw&lwUr?{0FU z-Q+~aSVo-3H%Y<&BF6rc>(#~Sk0e{%cs3D!rXGS)(K=19WXpv0iRXpG9?pu>h~d|` zAI7I}yG-l$OP5j)$`;fKFP*Fd3_m^96)krMwjzLfT=3Z=SaFb*rsdn+bu&F`I9z#< z>~eanD^!4nvxb(bQ9GoSY!w|LgU%qgek=Id zB-e}WWSm?PcZ6&jB!ZP5hkSl>+=86N?n5*~MH;^tweC$Z9j38|G*)C?YN)2i^NvYi z$(2E*ru0Oms`dSxbv{LfBePB&BS~Y{AjNU5$g6eFG`l!-jC%UIjEn$0dg$xuQFNct zK)x-}rD-M7^Mjq4kh!(A(Y$*z-^y=nqZgfOQl8|myU^z8j%iKHGbm+SeGsr^o24sE%4SLJmg*|TvcR}jUNxbEsLu-)576f&bpvH^Z z&n!(J5udESn`Ic32z=@~`3xuGAw;`adeq;4kPE)t)N8kA|DjTXt189^Dfkra{i;{w zyGr-t#3zg|m#@+f#41xn2Vs8gNkxxSs2HQTP4v@3ikG8VqntjDdy%CO?+VX*!c;mh z7+U@?2`Iul5y;1ay&wpLEGcbVvK%9tOMZ1U5}mi@Jt#Qk8}^KYls}v81n@VrK)Zio zVi!$ew4n>}r{H8${OYhwy*yK6Pc)bW6Mtyb`_wVBvi^@Bs)?SQpp08awDiu<7j_4c zWqx@sv6s(I_LoT4qxf17j*1YV%ML3z<%j=B{9urE#M>YWwk&W2#?_7#>tUi5<44j# zE%5V(mADFBrG5F0?z6|=vXex=t+{JmXJQQ(6gPVdZ|Dly15$pO?&JPg#`od5&ptLVuO3H8vK#Rcq`HLr zMgI*MI1D?SSuD|rdCWdh6H}HVt#0~xwEk6-*yuS2sUY;4U6VO(+%TSWz*?Phw0D!H zfq%Z}O(T$UFS9fcoA$-B(Kq^c_upmFIUn?;>9PIcg^4ohoBZuZu>BHV<(R~9< zM}q6ahLEZyq*xa~C9DT2VxzZsKEGgjBG033ggDDV*n*u13kg$dDDi>20=r=|s-dqu z$qh2tvO}hL-gR-lVD$>YhpUrMNm9_X6OoMvX-k_TV~w1)qlw(3@6^X^5V@+zkG`xg! zp#T;vX#iy#v^6bII^38c-5Hw5S5l@n*Ul7lOjQV$h!FU(i)gWYz-T&S=j&2r``Z%oltwRP4wM=@LDS7SgsR2PcDk^1Xs=L%jSq zG`3NHGV9h?g`HwmR$4wt{q`~)>@6pPd^Y$VUu&@N*os{|G0CB5%0h#+Oe~JlISJ1S zQjG_1v+i%d$mcxni>~{%N#^t;EvNnux0LNpRtFZ=YGBdZ==Fp=FNa05#dh1dG11HCgGmt&!x-mt=oa38coth=@6F+66 zSs1qf%IYRRgd=Q7Y@1_@og>vE$gln9yS5t}M3YO^V9{5R?zWef;BWkw_YGDlPtw{8 zw~~2N88AxkcT~1l{M2mkS2j~*$DYE%G`aXoc;G}lr|b3BjX4-Ms(H#pUz%VMUFOea z@^qq1uv{35;4O@8^OhB76Wqgli8u#R)#Ib$Ilv&f^i>*>hi>SMnLFvGyMe35DEBj- z+SbOo0>UbI*&V=PWXyv!$4PReD#E${wn^?O3ZiFPfK(l91*B8PI-5g%jGR~g06@-| z;K9)MZO5%82Yi5;!s%xIi?h)f;^_DvC0|fbo7C9pq&Mx>Z~9iw@$HrY&Gw~#QOf8f zg9$^-mW!u@iUyKdGs_OW6)|_rd}rM|PpeB>abmn;Zbjfaih^p&24Ym6`v8HkCjfO@ zzK6tGY!@l#!zqDby_s&(!4*`XT*`=6O8uF&$7f5o+oeL1ylAM$Aq#76xB zEWFkw)2!Rq`-T~@{X;@k(w4NE%EqlW_xNckL&jciVo-Di1gH3> z4WE*5tB4%KiJ1Ke7F`*FdQ>X1maH%Rag0hvPedBo z39me}q9l-fp8k#x;m{TLmcroNwRfDZz28{%EOq3JFBJ!pi?uBS@kydM*3f`>bpU?_!g~k3ag1DyOo6Y z573HjCzAHF?QmU&cL35rddZV07QGh3qx=uhTcy|HhNN|0r^GcqyfA#hT5js8iHZx5 z@^6**zby^?B;#2u53_q%w+h@z^xqjbS)s1C zIj2e`JSAyErDje-o(!>4EKFuqID8A`n;Dl)Dj)ZKj3PNW-kMOWXCtIcvkoLQZ@|YY z5X&G)-8NUuja~VJ&Rf0rJF5W znN@1c0xH9dSWOkWS26Nr8AWilDOSZxzMx54S-RWEP0(gYhNWRQhR>D*Zb8nyZf=|9Q8-AcaO4fTdyJd7UK{yne2+9 zm4z*F;jLYWSkss=i&Cue-%OcpW)R`$T8=_{hT1ztNJe_%)EDE$j*if-jaqrdHdZZq zkrOHhj2?ZkJ0ltYroS#akk`QNrwa4?F=t|-)~U*c&Emn4oCBdq32^U>j(|CvZ*Lz6d2Q)$n4q+x4frOp zXfMx>a5VLT3#9i8uxS}b<1b;FVk$!+%4b!3Xk!e`kv7ZU+K>3|&7HPUmx2a8A$y~z zbW~cq3+{t3K8Ia)*Xb;y#gC0vSuxPB>oJtJhjY-YcfW;#fB9w}XTYYu&t6O|)ZE!^ z`+0;__iWBLQ`#kj>@-+s`VrT~Al9G$M?|oL;%4zv!Jbf+Kii>^RfZ+S2jbt@%)|+= zk{<<+YJ}my6Po&%?MD=vn+lqXkD@4B`J-rIuZ<;Hx`rJ2mSgv*zUOex=UCH??Xd-_eAQbUzP{iCSfChL6 zBN)(QYPhaPzTIqX#hj8p#FOxSgTDVIXR9mXB7Ge#r3Uxe86QfwHqp;(uYq8}deDQ< zw-2d$okdZ&A6?mrEZds^?X!>XPxCMai72VLe83KvBVDX`D7EIppPW#vB2+q zT0~f|c#MR@bX$b3Hn|XhKhke})AI!gQt@&42TI=^PshGH#nO&`V$sa!Wq>UeY3d+< zd@ix!C)Hl?6y1FP=7YytWJd;UbG$=cQF!!HIfCe*|CLa~BafJ@h2)c z^+@J1DA0JB3QPu(*80_G1$sSs%T~U-Tj#bb^3G=@DM^*@qNUG+H=yztGdi%~8A;j$ z_^beQVHGcbsua_wH~{s7?71fO1gC1+LkKh3-(Bg=z>5+x^=H}&A133)MxzyHCk=8? z&p#CHf)a0H`T3`JAbbuo(TVj6tgOH)p&oH9@m)ocBL$W<>k~_HVO)81OP)BY>}9w{ zISnX0E~g)~mz7?*Qj;#q(wQFH&XeUnuF>b7FVDM>g4Wh!&p*4QmU2veZwxG#-t9|Z znA>Xv0-327U?3`7$f|16&$QEcF01YgBi>P+zvu?&ebpR*QHKeYh5AjOj{JYIZnw*BA9bJN&#qvV11Ki{6!H?zfi0 zWYY%OaRYWU_CB@o1Jmyhsr)zdq|C@T8+u0+POI9^9M1bKu9B*8jn08TP>J!7&u)YU zotxEaicQR#TJs(S55DZLAsBD=am^IwJ}u|j;To0A(lYal)Z|Io06}h_z&mVg9FsMy z5LK$4ah!QZ>Fr$M)_U6;c=<@7jG>+XMAorr-4fI8My8r=Bz1H4I*w+x@v_qn!lFl| zbBDzVCmo^()m7R3_@mh;F7>>F#|UPwq9=K-KAdu2w^dG?iI%t$BFCMrU#0 z?AihLC&Abs6q#Oxn$tJg?r3}ZG?-L_gk-<3HyRmrpY?AVcGsajEZP2BWpx17PA9(1 zkRCVcAQ99Zxv=a>pk-Rg@nme8(Y}YEL#Hb1DL5K6k$x7C))u$+C0>UBbs`@paMraQ z%C-o0K!FV&0af-LYFRe#lUyDX`9`RV=}I-!eufMydWDA(Nv7G&*3gu?+kChL&d>B1 zvGE*q3(52~^&0Hi!s!y+tnz#2e>1&vbPOZdQwbhZi;3FX+b}U%Mc8WLB+^#yB5`uD zE8^|)lnD>;&|`BE206FEQ+=PeW0I|q!Iw75MIwVrDG*FYf2OlX6ktI=}O#@l}dmx_`NmeD8j- zLfU=ard|vd!eXNFd}eo+a**^`ym;ZR#3%;YPKh{^n)GQ#5uo`m`vqdK!V6L{FoU{B z;b92zv$2T5H9QBgejBP8^!A#0dr+jRK-*?$3My7j$|^j%n}mGQAxo!5Q)ld!3E0ed zxm|!(zS1u;-Z0E{mX11s4PnJbYyg*8=%y%e$eb;e3?m+l?u?Y8*bwwdfv9`jjP1?1 zR)rS}DGQUtc&Q!n6J`hZ6Uf8&^%tunAy5iQ8(ROUwbYburM`;B()BO?BuS*Tf+Yyo z8(lUq**~g>=4Y=D46&n;ZDgryP%4x60WBo->Vv+ zGx5;AHiOQZblxVcPpS-5_pE6MCRE-LV*?hGmZANi=qXRM>A>=+IExfHLmH>B=PS^w| z3$N12Nju-bv)MeC0R3}q;?qauvROhz!V`P!gUkX8%FOTg?p(%=@12hb#a=tO?h8*s zmD(b}N|+;XA`q~!qYLVZl>t}VPNdLhF5eEai++9!p&zWmCdt^+HzwYxH^YgkNLrIr znukDFbN5qFDM(xODpL^5enD>&M~nrcj;(v1o6wBV$+CSBwSM*)6e;3qr`hcOYoQ1B z?hh9tIJ%OEiNrL%GkcO{Cl?4rc|bCGt-^)(6A9&TuyvoYnkhZpjwm6PKe(GntIeW? zO=}F_zS}~4X9nwWGCeJ{Z4aS9(@H0cLj!t2pSFrT2{4aSxu?yFQBF7_Qjl!~$x>vS z)9|ND8~@He7wPTD3h`-oWPcz`4WBpvEkC-m+ixCR$+<@A8JN|-v8TEs@5d;`@vTu} zVQ;sp&svnW>Y(b3A!<0n?xw2Z!%UZqK+Z5?EwR_TAijFvsxF4#`fWiIdJ`SRwijRA zg-)W3lC~4OS#zz;uRMiE+0$f@_8Jfso=*H*RnI8#W!1VEZ7#91ZU(^Y`e{pl`V2-` zPZO?lY?Z9vbx@iXgc~Vriukhj$pK&VV>?TP?C{C!yHxw#-byW%@ffBHGdB#&e?WGrb-DGBR$ji65{+@i1q^GrcYGO=-a{6%1kwjh{&lWvj zt5}`J0q5}?Srss88x$^#*QKP`u0^P!kAdeUZsf%**>gz%>a&B;K{IB!5rIN!jS8qe z`CPR@qhyP46kkuGX}(|dI=hMTWbZVknCE_pAv+gLpgRk)g9XP;K@5WYO@}k{{NccN zT74p#9)D!BTnd7eVn3r!M>mw=t&u~lDVmw|M~_r?X==#{LOthbX>OfC(t94}J$nZ=n==#Zu}y>P?NSRt!P}gsOR0}8ScNM=Z(x<%XR+UnVPxJp zgZC>F*W;8>CJ=PeP(o@5d8#(0ySPpkd!fv=Ku*{#bTsE9r;jrGFItt_hpk7-jksTE zn0>j|s`Eq)!})n?8^c+KZ0r)>AC6~7#?k8mEbJ6?|Cpuz=CRx;G0QjES@>Zsp_f^B zEbQN;@z$|i&&67waOQp2D-g~s>g(8|6r7ACArQk9wN6-8g6XDAfYCj{FReC2enK3N z1W5PfB&}$ALKBu06zX6p+xK=8--A=cZb`klB!eTK@c<_gP-1P?U?#$zOzdA`kp_q6=epYRAtiIbsbqELHZ3^ zujIQ`U6EKwq1^?;KKdhUP{8J6XK)`S{%w8HyScv<=F()_la|_1G%g+HaQtqLa1Xw$ z4JEv@t|XAUjUl{qm3$!a&^vV0%OpE)eu^%1G<<*4+`jP3WG^dd6y-3AB7v)!o-&(; zPQe5E-DPcTNIwPco~c@MXvPfh=`r@G8Np-SspVJiZp@Glb(=4G3QLS7t)39%fp?q@O%6Q`IWs0U*G zMaJG89{}wz_llS{pBE@9WdztK%62~!d&!zyr115p%cl9^bIA&{^Usqk&l_st)^W!G zvhpDQ`wr;!;krc-_M-VY-TkOmI*{QRyz>siS*NvnbYm-ixgej2vG$~B>LCY64MniH z-eag5mOB4{G&YR<27>oM<_`G~$As6)2jn7yUyoN0_%R8U?`UMER>+r9YNnyx(2-8xzgr}(U$-y@fV1g z0d0>4=6k-v`)lj|Q)Pmq9d?fsa~Pqxy6u{xYs9Wj`FHBn*Mzzsru5G->CGOHGg&bq zvueJuUh1=$4p?h{5Y6pIZO&=fqm532sXFHcIKv0FFgvmAKSYwfI)_1nVb4D)a@{jO;Dh z3E3;h-epwC-em90I5tK0I*yf{y~*DEuQ%1_^S$r;cmMClLp@F>=Y6j0dR^D+dd=rE zbC*rXJc)HEFSoPY(tGhzEN@vrFl(+%>(6fAT3O`vvjOMHlL{otvOf3>B-@H9q)2MteDZtV9#K(3oXSv8!FCmXjm5aOpn zgjl;xT(!_55@7?V9Wr&uBR)NKCl6%yi9ptYI_QimnLHD&z1yj}1%7QAGm1K;y4PK$ z3S8S#;mhGHyZd?-y**44k1ddPtu1{2P^AD_QPuwQv|@9%o9ci* zzma@(Vc=n=vW3Ay(iMn;!Nn(1PEwNRS_|+VBDvHMqhf{0?hRt(Xt@f#ooSXDS~(aV$4u!<$Mi=)l@o(tkIo-9$vq<~*2ho?x89 z`-XrLrjazqz^C{sOqTmSy=;XlTu!kkH>~gKEIva`y+l(dN4`P=o=-Z*Grp1r4Lf7M zn#26~uX=>ytB0UuY5cM8!nt7Q)oQIi|R8>Nxh zuT(x_b$ox?t=J~tFJw9Tu(xO2dCYI~O2|tUr<4>i*;2`F6%Y2QV<%7dMqzh+)(<}VeO4Y zSodxX*)@b?Mv?Z!G6@4GxADj1EBwSNIau%Iwj_9bBR<^$wX+2Mpd*pf1(eL210)q4 z`4qJ$OKFdZVHrVD$rcr(h8TG^qWYmt4|g6LV_G#miy5%rNrdp~gTW)vc96Yveaa}>Yk8hQJrnj1T=K5aj+&0HMOeeeU z?XsjWn%jh;=r+kK)=`t;axr}qUc(s`8qv#(Rw|jdeM)+&=2DVJW8D)M_^H!+$@n$I zt(VbkI+wpo)RAxVL@ypaMVF-x3g~L2+OH5v;zqSuyq>0u(02C!XCK&PwV>!)`3rO%p$T2E^?_XjaF-R{(1q&yJ{U5XEN9Qzd4m4%_H<^n zT(e}a%tMkV8d5}PY2v3gxU`iuSJ%lN!t(gm9{#? zKk3kR<2}6-1rI>@eoF`bpBsvU&a&Go73LzggD#9_WqMoy8c8}R%SV^etp<`h-+ z{d>zmK4D+1r^P5kk%XCsmRKtLREwq0Ow?dMZ#$N9X+0f~r)+{8aPM8`HiHZ?s>FM* zdyF)iBsGrTH@-f)D^@%WklWh4h5a?Kj10`b$Rsw%i1YG|(Ze(|r_gxzj&Tutl}(DQ z!TqIul?%AAHy@TldL*>x(MwBNNv>*m4DU<~rhMj|zr7!7D7RmG5v6`m&&!Q@HGEN5=Wa?DEOJwTj)Wx&~ zD{5h^_vflvgOywo zPKY$Vd20{Zf1biP5H1*slC8`gebSvO5Y>)klipo0r`9p~iv!!{?`f|=SC3O@9mH_^ zi4GTS8J6x8o6H^+TlEh2BlAXFo*|{N%ApS2vL8WjeSgRgj;}a)W{<81k()p8C9}Fd z;oKg%glyCROx>(y3vlD7&u4KsR}ZDUUz6+T798h)R4G4})8ae>8FTtOh1Qc#dY5S- zPMEW{pasjXKn=ypoxE?JuC>$n2~lFyoC5)RX<^)r-nL{OGNobXA|7HC-g{yG0HhFa zU0{?8zsE-`3iGL|j0G1B=2xvTGbnMQeW;^G@}|KsA3NM!lXD10(v{x>F>1r-&698Q zEY92q;1fl=(_B1+5-Ts+6^ZXX|#OQsi;do8U9j`oR*q4KXnrv3XaZ0x9I*C6M zlvFwe+@o2Ec@Jhgo807nxvE+{Au8d zv_r6jDFsqLPaE*Bj4a-FkK=6R!y%0qn0+NIlql!)N{go+_+#(APfiCkBf$!$M{7E@ z1=`X}%RieLd+qF(tGl6di*bX3tx?!>J^7{MwGtF)kD5T3j3tSbdF;5ToWIc(6{OIV z_-jrjo>$l34av&7W#WSuIh=f3zI@+%%WOXKdj-Bt9Kga|@k4q0*`m%Jeq8wY+2m$( z!oKTmOwHYW6gX@`@H8#%NXduazC$GHmr>=lGwbJMo0m|X#>JnnRCz4J!$K5;7N%0T2&sba71 zCqrjL6~OVE9@3)lbT0#M>4FD(6cYe;P;$E;J3>%+N-^7Q+27t?%{+cc70iMH3RpEI z9*X(Gu7-MVUq_Nl_$e%Y81W^?)Yt8oD&4B6?r7t@zrlUFv{ zvB(mC`YkGw#@jkLe(n zZhJ^m5g$GAm5V1HMng(Y8Cy-OW$tgOZ7~k$9*%ABT;t($_a8+ z5uZP22z&Aqf?qVvg^YwFj?U0Q8YLC}d-E{-`_|N(W-G5$+v+0%iQa%JFzb5GAiU;B>=H%Bbgzkae zSlm$#-wY?6-^d)@UMBreQju!8RnY#77^$j~M@_4oMY|t2SOdZ?@OHMUw6tjFf_2hb zzYmM=5s~P4RQ!NU6Afz8LtRK$Fw7m}*KBS+N>4j+dL*4ZRPqPU(o5i`#6)1kFaDDF z-R$C(oDDhc*=d?RZ(Fqw#dmA$ZfNd&41tdpdbu|b7KG8O`?G1Ys^?3SZmP{~%(iP! zPQ^cTi%hS-#fIrLs%=M=F7CM-N$M5JsyU2umFxw?;PeQbef#AsMf-Y8h9AHvGyq+n z>}6|6N)Yo40sS!}C-gKV#Jzngvq(+LrQXGvxL73a1rl|mm~bYoAYg~$26Yt>CyV(4 zA~~aReae(BkLfn5j@3^X+UcivaWI@y&KOSeCme!$ET3HCPXu13bvhZw`@p2_*5_1i zV#e9`2iA_{l`T!SOO|iK+GMNTPt12&%MR6KN{0oU+B%O18GcY&$-?d59;s&7RR*Z= z$7}9f1=$|A+BdIk?n8wWtG=X`5|a1r0O-U^XOfaD=ehvGFy&0te5}bj9c%AEzPudm zFm`?SXrH~tCEeuA=))GpZ)8ZX*EGT&#dy}v)S1>uOrF-U=ao`Q#CJZu>m9~kuwt#U z`w}5OYR*x7UrlP>f&O`W{+N<_?n75GIpSH=)LF*F>p8pfCM7PPHPBGbol2n5!>^zu z7}L4dNJi#eYFmQY`>DGB7>v7VZ5Q)__~|Q&8lKNxm)y##9hlv{w^Df%*)|bOhk$de=y$yMTEsUodd&7HO-Ev>D4V} z(&=O^onsD8mphRQXF^Pmb%o-% zih+&K8fvqpOSvvzp|1BGyR{_38Mi;d+R$mkIiS2z+l{$EuZE82&qx~~29cLecvsB* zunb{Rva)wBlX4|DMw-PS&o*T?RY-lVgiOjd?lTc^Auw(JYDPvLR1RC4%Jk7`Ln3FIy~yxLI@&Wv1oG{OVQZ85(TfE(7%}8`N?qv+I@Ku5#0cI=7yO zW#LK6n*1f!NUBBqa3@i&P*LQ~WMF{Vb`H~fESp+lYu`m$vYKa7DFf9j0)JuwC7|=; zVn=iad8#Qtv=hsjXL4wpOnoM3k=0qf`0D6%eeeMLu@Xzkc(q?A$$eyVCL7z6%+ZCu z@$$xM5`$AStBjO+5Hua$8H_{KdO`?dm5~d>jT#n1V~dg7Xom##Wd0i z!qxAgzKnXUh2;mMD*_g)}R*x@xoII`8brtgwRWgrZzmMqgnVVJkz z;}_^Y_}FkY=7xjeslXJ0mGM?@DbGl#c9lkMUS-@SuncQVO=D`^YIOD5lxNpAUFyu_ zA2@TuZlmtd3UfnyIQ=o$Mo34w61?-}g5<-A>-FMSX!c?G4Xszrtg`&ytK(l+myTIV zKcI~GwJtp9f>0B%d6)MyEj8@6?~S653|RIY2tF)Q^Y$C$#_cz3r`Bq}S}XR;5z`gK zw{mo@3-_u{icxc-{{8|laXKoIc=5d8w!i8@5;Z#v=C(WyUz+e83W&3W^RfqSQCBYP zfS_Ttu?2jheweREySM|c87&I@-{pyJxw{&IhSUaKI<@$Wo-TqR4Ci#@&6~{Yzwb*NGrAll0_ueBV zrt)P&eYYd3|LSUV6yl-J+?z^}+R5lOhYc=g(5ClX);K4iz2F6szzb%hS=+wFm#4NT zTCG&@a|g>tb9Nj5b3^dA-OhA1C+(-Bi^P#b?$?j(>e1AM>-lgfjQLJ78j`#QdRjN% zUj5Nl7EoBuVl?^v{eaE>ivr4Q36*HM3iY`k`m32{mQo3?Q#TC)rsXSm;X$p5!ItU8 zr{2AKv|8$zY6WZgN`Foi6=*yF@ThP7qPy7^A{0T$asZ?dDm03&<*r63_jBN0@)AS4 z;8_=be^X-ZlE0z31&lBf$<$L8rK_KKI%|Bi{ZoJCi^#{K^)vT`HzzFVwGXR<+%^UU zcV{QvEZT70fGTPpzQv#%v}B}9KGa>yn^WiJCgX7g-vidrDhB9-PE;d|Nc_z1r1}pW z_ZAJ6NZjp$svi!nKwGcGp&0!jeB|s@r^8D(9hY8dxpJcQ;mxH#%p;skD2w=0N@fc) zF>R4B0n2wMuxZ(d+8J4fF-L9RUL#j`39F;yLj4v01{eOt>1`snl{ojyGQK?9rC9a|0>ya7*63MkZOo<+Qu!K~+eFUAVMe zEUQf)7()5K;K{M3d91DVmj6=WOILF&XOT-O+^(u;rmL7{QLnX6KG?ja7IIJ5Zxkn} zO1)k?=NG$W$=w1lza9$EWK9M&3@fAC+^CXDro0b z%FyPFCHG2mr?%9IqI%>V=6E+-^Z9DPB=?Cg>FTn7L2;T6bxhZMNdC9WpkCy?|GWido2#>jUn&vU?&BO9)6Xw$P%cgl{!yS!{7N=&@tj=w+IXG&ctTbn9 zh8|JzVL>)Y4~7CR8c7tWU<+)oqBV`P`*wYN;Z-X|Ld~QsXiAe^8+sbV(HJ4h5UWTt z-w~q^AgRAB&<9AdW}4-%!d@&4>`YxEs-E`rP5>4Heei}V!M!=QE0 zNw>gkSLk;R8r6?;-3hVan7ur*-+selw%34t#-v+G90Uw((8uMF#?plL@{6a1W>Kr zEvw9=ZB<LTQCJ94vml}1`S)UU8Pj&P0K!(5c33<5R6rgTw}no;rLPaOw)$k_eQaG zTj%Qr^r6=xSDDKXnRo7yp)&c zaQVy<%k!zA8Meajl&#vjmFrR9;4+&ruG&l?O!yPIaL zAz6h(sk&u*1H&!j4x8WjNaJQ2?0AZT21dRMp7v&N&-dG~X%~M2xr9d{h1a5Z)@Uc& z_ zoxiB6;7q3?m^K|uliT+N)S_xImPv_Xe=@hoqrR@liznM`*xx>%;o2i}DY6l<1+A9LG;(#2c8JXGZwKKG#jMl55HTt&>;p<|ei$ZD`- zjc>2*cfO?dUpLY&5yFVCcuIwwUmXfGz_Ky@u3R0$%B_>_NE$Uz{G?>(i@L{;#_9Q? zwV=*I?!A)*F-spNwmeM3Wo`4K#?K(m2>*^J{R0#}X~R#_^gBOYx&&e};`E4D4cIw- zQ!V#Dgm2~OFKy+@;h!)FD%Jt%U!LiK`zza)-k*q=V+Z4-R753U(1hO3nN ziM$8L!Q;CJdd)xP{r2GOIP25bPbS+)&D(IBhx=$)X0!BHn{%y7%6ol|9XmUBE!I)w z(1*+1(1#t|(0Rw+6^o6~)~WmN49M|qIvUo7c)w?(Y4u_`w;DMqAk#9)PRGo&$Z(#d zU9-YeYpma{RzY{{e7l;e@*NvNkR zA5%cs7(h?y?*d}X5fEb0Aqz~oeIedWv|)>yh(>+PE&hV~N4RA}1wmg1EUSlpdF&0L zpVf4q(jM&9z)wBmkB=xcCt870Gh7ygmE~>y(uQ}vb#PWc`o?dbcVxAPJkTxEoOhus zQ_pmHIuyGXPz*|UEr)S44(mS_fY`Z7?x@X|yw^var$n!YRv87;w)RBpHDJrJYU8mY z#%#&FK63=g))lvbV}?07>pB6t8ji`P0ir9*yd{$7;y9t9=2co~nX&REh%+GjVhg`w z=9HD{-8LOhI(R#W8!PXPoOu>K6;AIRwe^TV#80uSJF52lK$)UiB(ODPv)x_52|e_g zk>nA)`{{YwvbAM_8iqrZqKPX-rde>6scU_89fw@zb_SC9ZtO(V;?mA!h-+7YKxjI` z@Yc%o8@ALJ#!N)ej(I?(P{;PtT3N_a_LEtw_E~%>w)0N!O6t?0>SZ0{TZ-B_4>aGJ znwr4{hU(?XA2fFzTI;|URLYTz7R*TjeBksvwu%8ggoIZiU- zESh9#l+!PfxyNHC-NHLx70TC*Mtoro>i~C)C4}NQwVIDoOs*2 zc!wm{9J?(&Z)h{aMNyOQ)Qr9G$`%yL7$-=$1jcgDh2~FGR*G4{v67Hu~vAjs1wo4iJ8&zXAbmR27xk|b84ahH-PA_K^xOehK zA(`d7h+oU>gL3Af+iF^R01>+cqLBE=J4aLnN~cx<;di!DJpj!&f+_|d0dQf}`nN`- zltZ8_#pLo;oDzs!97k~f1t=WdTIp=t>o^n*X@_VLbh`j;0SRW_ z&;dXV9tO-ACQunGL{PzP&~g)k5MBWpr|kRFpt{V6P{%Qu92B#{2X$OxmfXRWZQ2pW zq_i^%Vmbpr0xBmEWwXz9!dFsq7i2)39A1%Tc@`|>J5e)L-DlR!beXrLRK|@2PjWh4 zcW)mZRH!ACA8qNI&u!_i8aX7+u6@xZGOO%%w)xy?f2z)2ZTUr)#LQNl|7>BO-_@)CMd{!&au}3_{(7rxeab!%bZaYk?!K{L3yUU;VgLDm_m=h z<1HVpcE#WGLg;C|!=V|xaeWawjNuPa3fdRk6qFop1|3z&g}rA;lMk+|2X)wrlkOf% zYj#*t^T09c&E~=^2(w-cZvr71y5mQd-^kTSe0axvHi1>3NSsm3qLR2N$=ndZkT1Yy z9;1_9&@OS7mDK)lykIs7yfpX;!Nwv4AZM|@yJE+NizW9%vRR(rOlF|-S(d$Pf2n+1 zYPDTw6zd6~ZeGF`1q}hu;vU+h=*~EUP_RsaMzCIord3Tu+i<=%f3N5kh`P)9h>=5# zz(H31IjYRh(OCiUMJ7c2%MHPkdTs)?;~}Uc3E=H-?5Rvi`607E0YZ;wzJ0D?$?Z_Q zRHN^3CQQCMq!UmUzW}@)a#rf+8pD z0Cmle-3bqmx_9*Y2@u}?QXK#tTm?1RxhH^Eh4?k@IrW7OT1($0)La}=4Z6J)x96`~ z$zR0CKT_0cA+pmHNDGP#m&u07U7ZzZEuZ093~U^Gw8^fQ{oHJ%OrAF5RIc+jr%{#} z=EbrwoltrlPd2L%FAJV*_qq#w;kLi87~Hne`!-od{_6ug?OT6c)Y&>Sg~LC8ByT3h3SPHX7PHp^(=Grk5_hJ zT(mfhGVYJoJB2c&Mj|{2FibM>=we#dalgRJO5dJW*koETQp7R=ggSSDKg4_^5gJ z3(0p`pW&o-;iySLrb)`m0O2v~V31zHF$SQy!-`m;$zEf_T zS!wTIW8cmcx1_w}28Y;_9(-ohGq4JddA`6d}Ls0jkzBTjmN?^2?9njWQ73|Os4 zNy)WcHyU?ATZKW}Gdh_Q3O-ntYz#-E!8VOP-RhI5NjboB;C8aeaH_(TbXNd&ZpE40 zG_DxX*v*W~msrJ+{*E`EP{}YQS!e&Y5&yK0cy$J};>1U`PG~#cN$b@H-sHpg^~m*W zxwq;rcQh`qwHI_uY#cw>vaggCnY)JFN_s-8W!JAdF8m5KS8p>6FVG4QSGHt10Ka3` zx0pj*k)r0qp%5hcUR4a{oi>T9y^D1IgG_xmb0(4VV z^KAA@zNzSAr-{?FtN>H_e9R#pI{9%XeLaW zIlh$*5atdT^QgDp`pyKxwVmHhHuUHj>-53+0v7PUVW0a@fsd(j+9j6gI+oeel!IxR z?T9clje@_w%@=WBq^{SlygI+@lrqV7m)b)`>p8PFvq1KPjY&2^&_k(p6-Ioj@5$Dn z{|gxY6qgC1`}+@X>?>*VzOl#}<1*i!luH%;^rfu2Vs)D$C%RmH!PPyx9-vbOVp$os zAF(u3(r7gn+W<^cMgDA+Euf=iu~ZHq#VZurEg-%D!X;AwD#>He?XuiZFV@5fz^cn2 z4A6ns*JH1p0To|!Kgd31*_(7$Z9i0+%>=@_J^?BQ?j0B2E-W^=69Q;@nn?$?7kisw zp&toWRJuUxrDbOP>ksktG(_ty)=-nTY}FF5b@Phbm@}??wjjSzD$PH~VUUf-Y1+pK zpxkm=%jW>I$kugGq0q6n3eZk67fUEtm(*gJi8n4h_^_J`)<5*%yM{*3^7w08a>?~D zdt13ezP4a;Qm2#FYAvL|FbSz`%4X``F-*an;$Pm4N!g73oZ0ZcSv~jNH&a7{8Y}D= z7EW5Ll5ZSn>flm4G2xD-WMm`oKdA7Q>j~2pe^@CEF;|TpV{*otIm*w{b?~Q%*I*}H zRv}2(89+D%%-!OXEC5ja@IEE!19z|{s*GasSfR6B^tN*y8wJNI)pDJ^WWd!T_yTA% zoGV&u51nL{Ov zQc*o5+P+WI@sD~8qm$czQC$)etTv8Ei1TJcLR|0>WeZewq)Xme?vWZxv ziB1tPEPY;>wUAM%N?_yk4+c90$f3)y>!1SzvMOIlwt)Wai`iZiVUEL)$>IQuTLiZg z#2GzAu%aR;nXpi#K-N5#(97^6U&}K-hv;S4{j4;CEepjst+$)I1s7Vv{t~%3zlb01 ziRe$rWI|M9eC9BaP>RC+lD78589g&DIRDP4ENeZa9xVYV2P?4N(D9qxzG0IY_Rb~Y zdkSoPeG2cIn$x#cBz=RH6I;hJcX-qLZJN;AYyza(zDF1-?bbK%oW-WH(IDO8Ay2Z+ zSNOg$PaFCxWqZ-g*3ZA1tj%mYGGqq=fYoja$P$nSfyUk+0L9vkUOBUx(8cXu`7&zD zO|}DIwYaX{zU?3I)_HejQFk`!eHg*_aN!LA=9IDsi}}Te;qz3?|1rpvwyDLNX0JD7rvP2<@D7ORWeq}}_p_^~`N2?sxDdJVvJPvyk zt35!B%>8kP3x`(U+OJ`z)#^Hcmv~out}|}l7Cmyj0m`R>g^l;L_p{*MFw{JVe#-$D zt7^gn_mnZL-sRRj`PvY#xu}>b(KTI;1lxTNOi(g&ba@XhCx6-;nJ+NZ`1JM~ z(tu7LTvjmCc)4zfv4k=eG&{>oP;^pPr*7h5Ii&j5d@EN)zZ*jkv-IF<)@QbPO}DxG zMbW))US&~tJTQ<5r{=p&`&Q2hCZDL=at0g|reSwbB0)0GB8Ypgo^LWf1VG4NnrL{` zt91IYWv_!~rz<&{77CioZ`(F~aZ;D`v2Cxzh*T?nLQz?Tk7#e$^wY-`wZ-osRWsx6 zZGlT+>QKFsv1O6fHM~mna_2H*C}Bky-}R`hLm@R)rKpW}tTkt+{nPD?2G=SBnB^aI z@E{CTzCjHcp29;=);WM;6_^&! zt(1C;NcHORMs8Xw=XCbESqZW?Q#vJPsr57ZtqFAFZxEgyRr{U~->eIcC(PdS*5EWIwnUkM9hA3jOf z2Aqh`>zR^VtSTr~K^ac*H&z?7*RkcJux9xl*Y}}%i z3~a811E2+D7!ZrJku3S;^%PDsxV_m*dj zccg}TD_W+hHiy0Af&2dCRi`gfFp4n2y5KVqAlY&%UC0WvuJ*fNgym%Nq8oVLA1SnM zpgA3aJD|64AHK~!X8!(mq^$+BcaG_OUHFoMc8;=LF7`9eGZGFVV~O$Y{Gx23%^>O={~?HbOeBK@_-BJz9GZ^ z-4K?#dA1o<$LR7_)ZYQZxnM2rQyNd22Pm2xOg~j>)4F`BuqIVV=C=zHkdMMjjEfeC zb-?9h53Veu+r(ss%x~{q1fiUv4Ki|Uma$gRUMcV13qLf;iDLDLf2k>x_%crZ2-!M6 zFzwQ6G;mTSpBEPfD5+kCvgvx5$GPtmS#0({g|~*^FrQ`@DhaH0o!~y6dc^)W8!%i@ z`y%&adF$}bs+qL?k_zG@k3l{H7+P{rYgR^>DMa4qacvBcu&n}%X|Eur5(G6;C6z5Z zA642dzXH5EJT)H`eGA&k=3>n>01U6v;tb<=GT~WtlLY~Kg5GEK3d1Qb(MBa^gO-Xf z(A6ORNn-%{Slq>4Kbi_Jc71%#mki}eS{Bk*d#;XrP}4Ow6R?TO<2qGj2%1-?*fGq- z=}+goKJ@LkF_Brld~bJzU89-{wo;(j$O|(nb|BBKdIp+H5#Na4sK>;v`4FF zw@2S^1k6>xiVrv!?+cc#3AxU}h!fLc#M-r|-$N?{ZX^g!HvsyyrK>toMLmS;Bfg0> zMo2^RUyJeS^LBC+LQ4 zc7h7YSSgxj5DHqAZ&x>rP+g%s+xIgml9_y596>o{TX6=cgf?2C`tn|!Lx{TR$hN{2 z^ez*JxdG-$L03TEQ#z2R>Ee(f?T16I)B!c4j)1}BgbLqw5UnTIT-RSb|KygJW)gs{wQmlHQ znyhSl3t%UYeUXgj@8fPp9H+8vC7SQx0^&~qaiD?X^^y(|eDGLgQ`{-3K^WKq0_V2C zC9h2yL@=+2$R>K|0!PR43)G+ma)6kOZizADcPU*sDH>E;D|g8I!P7B5_qttRrR+<@n?lcn@mbK-_`|ufa43|P23!nHa*!M z$*$y9Wd5oXv*dD3l7?A+G=0?5QQIri%|Y@va;DCv{MmE%-##ty3w24w=IP55A2OH@ zbUOy&iS_kG!uzogjO3i}UG#l;3O~j)&QIbM(Pp{up0~H1Gxq>n%bMLb;I0Q@%*4|_DAdpgiqpjp7fzHV3GS+$* zQ#Jt)Fd1)6%R2c^xi{Zh#XN<7Wa^;&LSLMM0VkXHqC41kYDL5Dz&(|DD!`KO;O%uB zGxI%6j)RyA3jJqri}tqMasN@MNB>MYQ!Y?^@*y=@nnJthB8}`vA zA0KwuEZDD>zn_;JppuWQDHRjBlYf5vU87ufXT7uF96q)Q^e~4WC3ALy@Cv-&Ij`8_mz`fN*aT&_9G_X7l$rRNB1A~yPw>_@S5G+Un6 zNT%=2hlhI;1sCv(I|n>_a%l{OJSAgN$*+>DKi7g6z}npIGs+j6fALWVwD{gNfoV!K zCt)|`cw^YI=+*W;z1p&#t58|%jOC1u{s4d^#gPL81r8$M&X)~7=E{&_R+~kH~kpI1y~BIUuWejKwI^4;^*?hs3}tWI#Uh~F?<)yhkAHofl+_vMKewCslr zA+z(qbiMW{|Hks`Z_no-2o@~Q44Ighz#Y7&MP>;slwA-J8@c0ucdCkY8w+w_?&CCd z72OUf0EM%@4vEwvzWes26@~AcdWfJvQ6M@006@Q>CKYro-*bI?AIA{X`8!xtDkYrH z9mwjY*Ap}ZHG&SogkXI_J~g8#o)A2tKuw_oT}hfCbY=lUn(iN)vTjd56KJrZoLjRN zKwG2&xG<9MG|o;>rX4wyD9NdYmk#h6*bdiN1VKRD;E!MV+H?ZtS&x40AKM20l@5AQ-{CF3_i}k$ZeEIOQGuokO zIi1ZWW2#(>RhEJokw!z-F)I^2sLMyaqp*Z_F>1v9`Yk+$AdV&PW8Z6~k;$b2zK5*Y zl+Z>r?nE=N?v1UhQ6hE0?e4WW9UieAVKeC6)A)WJJenmXHzjA&{s++ddh0cN zpC%CBsOCT_2Ch@%?4%#Am@2O7r1Fj0kL+c*?OkP6o&>;dyHbCho%5sj*VPA~jD2rV zS`uyj^zq##YNZ{i1EjIFy5nzd9E?>t>^b$xrz=s9_(5UHBAezPm=hjnZVfNc^-0&B z#z6!=gR`%{T_N1Bg>oQ5I7`-dFHbitEC7I!`vKNjq-m8$%2!jF`>0~)!CY$6+tej^WS%Pj5J~6;SmA2mfPP6)?9RC;5O^5jLqxICWeAcccm`Jh z$5C@e^KEEvanK{Q4t)nWN+K1T&Q`V;fZ$5070~Srtd-Gqiz$jGF$;_OzZl6kG)On> zSw>2we+HNwMa{%!-e>pi1;z?_pPBEG^V@GvOQ*jMbo#J*b(-WMTlKH{Ms8I%NWhS? zQAZ_8fq@9Ui-%c&-{&A4g}9A0CA&fWxoCZy2J5K%19Lk4{a!R~{bGaJ`MMDiY$%Un zAPpSOjFP8kjGe0DG2+a2{xGjd5zo4BrI9_!n1{5>|9Y@?D)Tb zOC@@K`lG{sznMgj%2A&EKDZ5hKtm8E@W1@`#Z!{DF&8lZhbJao!43W<8=@;d0=L~K z=*?8yFU;}Z{QHZhPpLYx^*-il=ORDfCPJf6KL~eb{=KrsB&d3V*jr}$W2z?~{>=ED zFfTqvq?ep`RRD#Lb*z0q^*-;>CBR`hv4wg!pw(g^U*P^D(v7YY@JKS?g z0bylPdfm(P<%PS~l&%eUJ$`|#OcYNg1P4_dwXzhfEX~ci-g|YGcisN32Y5jeEsQ9A zv)2E0ESDebsU^%T6*SSL?-<_DH`47o(j7eHC}-L<(|$F?UE5e*P@}!s;RAw1H_lGK$_q20aPPL%%c+a$iG+Y1o=ov3x2!L4N zb*_gf@#w9C+xf*BS0|>v1ZApQFU~xG;d-IpNwS0%D=8l1UKB^>W{2KKI-PtxqOWM& zvu%&NS$}WK9lEaqZLU&6dhT>=xL%Q>!ur2u;-y4&6UGW-hZQP0(m#6pXI-wM%qh+( zuaVEGO@&6vCUK+lupVK?I>Ic5yDUj}br2Ifjq~(J|61otT*r+Hrdn!S7TeGA;Tu=b z3om(XV=+ox2r@QWxOG&HPrTJN!ujT3*$~JHn-Q}fUq}8rpTRwpS-3E&M!T_>t`w^; z?b|pF;kJU}#Yl3ufnS6SBR}qY?3c6sJyVUiFL20Dr@Ctuqcz=9I@rA$trv+6Po)vl zYIq7V(8l~gLq(qYP$%cl8i0@P&?S`y9O9`QVWFHKza&>oW7gCi_dRgH8XU^{khUWP zCxjcUl;wcnYUx6|L3a(A*F8UuOpY>w!O9pjo~czm6nsluBHXCo#-S%h-$&tSp&0oX zHM2pf(u+Bt&*>71VgH9qe1w&R5pUVVwf=b`KdRoTfuNyIo;FLrDJFDcnyvJr9ubxr zMq23OH=XE-6r5yytjRi8RTpX|@BJlP23tm3CRYQVNckS@KCC$Mp?IL=@2eKP{pTal+u5d&u8EZmq`OK6 zFDbR)_p8}zD&VMOl98_Xz4Z64ql7=5lbchRL#i_~HsE_=2fVoQATitj_aNR0N1#Qs z$MD1m#XQaZob{%ODoOCKz7hS3_=adiv?4ma|6KN>NzSMpQ5|s|i5;o^gO<4IB%%~3 z#G^APO!O5qO12}o&8(!PV_LA?=hLpGFAo)f<#wU?2~j&jIwBrB8Q>VQu}00a@AB$h zrnzMi{SC*raX0l48m>Yu+V;%s6VHPXr_h5?r?7)CrxLACy4_6wXlquVOMFC?M0~`R z#C#-`8q&mxP1N9nIcVEjcMyjd_k=j)IdnO!I6OFl;I#}rw%=vx{=@>_8ColMPYCaQ zvRL(gQ1!i8`sAp($bNlQ=*M@;SAAcMxPWGZ#_ENn`Wo-JzB)l_Yhdl)GTKU}K_dUd zQ67cn`J@z{{k>{6XYpwis}G;-Ze096I<#}YDdf=nIVwOy-UBD2B}L`WC36J>Y}`xX z&py!ss-S(;B5wYZH1{K+5$WQng>Q&gvIMl8(TQj;WNs)S%qLFlzUXZ5 zdwg_BU7|_Z&=9gEmIW_>#G$WlLXq#h+%K0NVZRG|xX6R};BmRb$?>Hgjscs2l7XecM}vG?R;Evv zR$gF8Ycvov75Y|eV=by5VlVI{O?bLrPCq4mQL8_$f2vPmAZVat;BN4VmK7*9V>>j? z7Z=0CqxbyioA2Azq@U7|+@9Q4tjx7bcdeJhB6o2g1{KxYIPsLxjMWwR z8v2&YbX;%u@+-CR^6D{1HTL&JzZdKfJN(${pRpE&WQ-KA5@Zzm-2be{_DIAz()}{s zDJkMueRC`G6npU4D*E7~Q_w+>Q}98dc?8O%@;~R>6QhI!b-{AMdg1i~Y{4GsWj5f| zn1w~WxbAUsQZOMbd4e9j9=#WR77dy`G>2~GPYwtRqw{cGQY!lA5$}ZcP}?9I@xT25 zXb$Hm|9ao69@37{{;w~Thz0{n;JHHkN6Y>%7Esa<<{w4!TRlQr=eP0K`2y0f69sp@BOs~|1JB!b2ny% zhOSY|6sY`r-=ANkba;s9|0?nSX(+F#!C_DjW)%5zzwx64>i+9Ne<$%j?T6SfF!9*1 z+BH_xSyAC`=07X{e^|3S3iN1g!#^`*YV{vw{A-*4F)9Iw(WC1B;r(~Qi}(oq55mg$ zz)V-hA3XW5ll&@!^Q{mG8ljxGDF~Fy(8FPN$Jxw%8 zpZ-rDJRgMyF}SKrirHlvEQrxKul?)T{@vPMNQNYaTYvxguNOe(c5Y9INBbh;hySs@ z|E$TIy)+Vrwv}%(Iwgc z``>?Gr^^e=GyZc7cA!r?qpH~c{u1MBsDF*me?|%BaIvfZb5Hnuri*Mr953 zZ2CXyvOj{jf)O75P1cJ+CGvkHiqQpD({y%o20x%ZDa{#Q%#XL}*|b$N!!0 zzhC@&?&{#vt#1_mj0OB!x`c4||H1VKzbPvZ)S+y*mIHJMyk0XT&Hw*u|G)c%(FD2% z77NsFsJWo#{L5_pXQ2NNB@PWyKFQ>h0{HF*b%*~!>4J+joaGi%U|{DGyAIUWuY>!Blo+w zmru~QNfB1UbzY%o*!Sk|@7+JQNT2bW4Ad%c{rl{bgj{kaJtTD|J0x>XfC5UXkP!&k zaR{tBFM3^my)OMVeaLu}Gyl$1cDKs+!u*PAu#)c1I`dt+uo`Di{$(}Zl@?3#rqn>^ z!9JdKKkCG?GI(J8)5v}Vd*a7CJ>`|RKyL2_AgU2=1Bck&?Dxdmvy2$hTTkw0nTpe*!r+<$WCj-hH|Jao7NI(bAte2^KqE6xq8dQt#z6UL=~NE+FdwioDrv#icl>wULI)AiTV?c67Q@pp+t zV=nA#$X?b!?ah$=f{9Q60~Ex??KV}$ou4n^X*^@k@t$r(FJf>3=LGu^jvG#moEfo3 zdk>Ho3M4p2zllq>6tI9DBsb7rTorkaBsrf=`(#On} z+Z(cbe|%1Y$DX`41(yl-{y(<i!i(Xv-X5nedlXt?sim^1-Xo|?h^SeSd_=%T|$2dK6xRANUC5Ku@AIzrf|7u5KvL z#!p@k?~S|lYu+0N{09ODf(I4J-!>eK`Z;HJj5YqH0VHmGu_hn7S7~P> z$wDCi->q4xj4>i$v^=i;RTeCx3@4={&A(saA|@RjOCGkof8nCPGx&+Yq_E)ct3FB0 z*>bCE^Y0FfhFI)R6NkxaJTcJ9boYp;w#Q|(-+_$1^zhermN%g6YI3VW-&ewiB}4i@ zEZ_o2akg49i7J6M{K1;(p_=)J3ef92O{O71;$1Z?hd=p;YTGK0;Q`6JBHeTzC*>f4 zX-f7My%k^6L6U~(^39x&fGHVI054)CQv+{*Gef|^cO&Wm3n%bfyME2aBI!AcGXs1e zS4ghwr&%E5yWZ>L(=T!VoKg8g&LF3Yz~tVn5s`H3ti{RkPKc)s+>4bL^1zZ_77rYLbCBYLL5X zPEH;@iK^o{9QP@LDdl83{!B6K0Mwv6HobPE-jZYK;@JF3juJH0fa$WL+*L9Wo2y0zx5&jU0fxchg5A*-M>@+$42R(Uh zJc@mnA`>H8YyVXI=gb8-T@l^ND5C6lh1~z{`Zq{=SXyU#Q8(!7fe?9GpgA8DF;*l5wp0E%vqHzL-WL%3 z@7_Jr;CXKYlSEt=(=uPfR{4v5o|>>+sFjv;+?#gJNECvQmWgyiRBl|syVtzCZ% zz90Lg)SW};Cb4sqa!}$5k91ETd@^O9p0M$ z{EO+yaFGrRt&p1kc{i-326^-f^T>LN4{8pys!LG;;O6wZT2~3wZP=-({XbwoC%{DI z({$2|V;sLsF%OGjB`FfZA`Jl}eHnXov9IB`nr7?Y*qjQOHp3d1*+mzr>x+Fc(=42b zhd_RGY?7*KGO9Rh-YeZ3vJO33_xz%R}YFzpPWIMwn5kY3t+0ArZV#< zso?-lk*|<$L#AD3B5Gl~gdrrTcvJqyOeA@bK>q@Wu>pro<8*eoY0Ht}7D6G2Ar4~o z1I%WYX1$R-6Z%7$l7y!~Lukv@0?xgqqjBIfy0_xmh>BoT&5{bZFc>p(&5(ZY)spn}g@?cNMiXf0ff_n9r@Pb_3o=5#!mtc-(mAhO=g?({-Egb zHXsyT&Ek#=!3RC_V%k}BiJ=Fa@vgA9dlZGWyE`_ZNuV0=)HKLmhoUd5@gWa^!D9=Q z$G**@Kr$`iwFh*^(QjT~qAxu(PdEuKT=NSlpWnl6KyPNL-Vs5FKZ!tTXMY7Qk?zx1 z;Qc$`IpEFY{AJO}_P;T-ih~$n%(|;%Q#JRt-<7_^)u2Wr?lO0oKV+lX6qyQAoPCac zu6>7!+lr!mufVkVsy(IPV(&WeC{gXqQ}~OwY2Ce}Y>P2Y5r6oWH)sTy^b5)9~&d(L_|0)W9 zB<27wLuHgQf(Ab5GUQ%K<6a-#(Lwlk>_ZZQOmq-@>NEFfY2H}Wf>t;Z58H702Rj!$ zxjAMb!zn(Is6`KM&kjnzVEMtD;6rkTc`|2}F+oyTr%Bf)fvogl19+igkpfFy2^-+` zt^|De7;Vp!xBS6{Wvvlc#Bqn>$1@(=xykC~U@)P*ezAZkbF1veiA1&m{g2DV3+anp z`6VPl1V1Ey0g5O8rFQ>O*jg)2R8Z>7t)&M9FQu+dEM0LzEl3odquH@F5ENKTRcM9K z_4z57N&@uY%_jk1)T_o85(F<{gr~M#pclfV_v}>-FNQ2~#7J@TY);td&rTcsM&X0~ zxS-Kkg}x}wI`z-*T7MWAaG#7m0U-Dw+{l3t&BP5}oGOLKLf%Z0umA9FV>T|TM~@P( zId4e5!5K}I$!ew!rCoixIwAfd$A)?M4ptI_9KYgQV4`d4j(@QFw&OTHSoX@MkuSd^ zeDHYKDN%tE_q%VnMd*8Vv>!dhA}y{4$6#DR_pHsfVXI01k8F0QxAkr(I)>M}LaE_l6Qz1B&l zaiB;CUhI}4XKXY0Oa9V3nDUT7md?an6p8&ZFjledw(qyia5(q`3ot0j9WJ{HFO$SU z1lk!173t#H!GXf~J*3@Z*W|gK+|6cDxB)gHjn!sx#ce}Vm)Zqv*Ix@{H+dmY^MA^L z(;pIHKO+iT%05HOuTQT{H`>#hi8E0^aB-l>o?A!7V8hS*oZ#Yi@^wjmGC4uz?p){% z!qbay{LKq#0#3~FN08v~owtp-=HxGcnqvz5cU#xfFK>PHS$i*962e3_m-x%JAn(my zX7+9;SbNfIZ$E1W(iAZ@tPc7>V@P`9@8RrFXJ9dkNTpd^Mms`YfMx@TqDC%$?@g*_ z^VfqVRbxgG!D>M2y66Deo&O#M-*pwdMsiy(GvV{*w|FgRJr2nXZ|)L0{BHD@K=~J3 z8B=nke$axkPW?da^}qXlusB&loR+QU;1t->6&9~|FYTMV@S4OYKE@1fFV$B*!JtX` zJE8V-v_9+0=u_^XQw1cVn%X}a)NS%O$B36N6V%oY$4pZ5Qws?g{4IF+V1{kU%K4cR zQ(VhG*`Cmd-mCxh(QBRACA2#sq4i`Ls6Yh>ti(2=bBaQa=^BU3ab!&zYs`s*SqZ`8 zzXJyMZ#nN$(asuvb7t9DAXK7>z(Lo#5Xz^4#EckbK49haaGsT%Zh1QTPf~rRm0^X=4g)m#@xD21wv6A{RT$dY%{E~v4!#4l^vK~#r%Thx_3 z=tvPNxdPSMJO~BIyWL`cr!qDAmxMtE(oS7#ULcrAn@UMo+GS$(h| zNP5!*^tic%!`?`}4IG2IcR3-hC|ZJWNX70BagJc)>ih~9q zHe8EzE|b#8E<3{kmeXcO7%C7reQ}P9Fm$7q@`tGh1iCIfTtHG@^R%B64@tN$D;q<* zC;|fDh~3;JGQDRfQm4m$K)>tbsvzN*|LT~15rW%>2@J}jhNiouj~LorJ8UE zG8cZOCrI=rfcWOW*Wd7KthcIZI(4>hEu&M5u(0`q)#}`bJ^quA1mN<=3ucXIyfuqf z<;Jb-d<*Wri>C;GRD)|-dmp`j{{N4Ry~GK7aDSlea8vDz!Uq?u2trz$HZjb2c9o8} zt7ywSuw!TijcTfSx1F$YIW1P)7!r60o5b0EQ138q;!W5q9tlaBXJhevnXMTWnULeM zi=nN&>r1*pvY597g%BpVCa5n>FwyHWCukTy5=l*fj@@) zs$BY+8^QpuIr}TRBQ*(|3GxUE*W=`PlE)oX0U7lNDLGctU=p;31e2T*crS={?aU}# zt~HESiTiN&q2M4NX$vU#wH8*~=A zF;X?cQ#&-Q@E=zELH+MvChql7ky%p%BVJ-pc?L6rq)qi!8r>$T$XXC^g>)o@Tx=|Z z;uroi+>w@`pd|>S#LM}GkZQC-8!Dkz)=ltT#EieQXQ*ETy@<}e#n8BW>b_Ohy{aoc z{}R(_zBSl1iS{I0dk<2ai<05|%Db$bl^Z;S9ywLL2y}sreMO9MDK9~pW(|vl1}+x@ zCB%M0cPf85|2e=+D_PU(Xrn7bujGz+k|&A$p1_$S1K|A2|lY&t)oa`WK+T949|HtBvF`I+1CiyYl9SR z4vVNs15@0rIa>c`09K;d9N5MPqx0^OJY*TnXo6=$skw=dM)EoA?~xI>@P9(Pko;3& zYi<4bxN%EuGQqI?7y*iI;lxyOID;4^o~tP2#uv~sf;jHjXAffR6@k>4x03FOeTovp z7EpUSCksC zGoJ2HhUPiE>r#M3c1AzKYG#UN(v6BN<;_S&N;6m&3YFjMlTKKYoaqU@P!B87$WN8M=Fz(c?-TgA0x)EU@O<^x zrOW=+<9+BN;Viomj{X$`(V2pzx;gP%@}CAN|3j(W|0>cRgg*x8(;r3J=~8@Jv%>jN z#UG_q@CeHX4ge(p#MMHb(8KA+oQXHtjS5gH+`cDTfr2H!rVhHK$Z6-qKA!%s-BoPS%>&O)+ecTUO{xY{|5W+IUtQ|=#BF2L(J_utNij^>mKMWW9c4@Bqt`!)9Xgm1XATzs? zO#rWoNbCdf(<8kO5B26$(zwHQfSy`7bsV2h+Gd@yAow#-v4wR`V3dZggK8!VSokRr ziQk)v7YIjnQaDnp(0rR;VHd_%6oELp@$DsdQ{I%P-^1?(()6`hr-3j@86!SIRYrUj^EQkL!IOQ%iV#*EXZrt1}Tsl(x^`*(SYUS)frWb zr$|hSVq~ zUnU_W_)6?335k7R0CI+4(t!kw-VKGW{VYaa*lxZ$|3_TWwk2XkpeypiN#?`L&q;wPM~*)!vVrA@MihD zHf#ph5|#3*HjE|Dt{r8yU{Ht_0`Io&0Z<{8na}^L)FSVNqKW2iN20EL1OZCXra-q3 zZ5{VJS%?JafayMR8)VfOmYM|GI8-lQy)GtN%N2bO5Xx1eJcOsz^+up$cJXkTChT(| z%0}TSj*>#S&BE2saFcpZ+@BP0*l$SwomBs0-N5C9{^t)R^adw*@u`aHa`qwQf7?C! z5C7a~G=eiozO&OJm4K7~%ul>)$w}(crlkps!(D$aN5I10hvUpI^#EWru~z~otuQ8} z@}1EyY7;q1@fi+~2Dc0iuXYlRUPS;M24?t!qsw{Vt$Z5M7TIs@_qLe;2p|91<9}ibz7fx$j8Qp!p5@p!*xVEQJ)>(_fY`oC z7|A>vN2en#dyoeVukd#bWnYp~<n;W3bBN0?IRELa>MJLL^s(P75Ns2=H&!FM1 zX+VGtyzWxp*dRzaqx4)zuJWBfkVw=4Ly-lwFBjg0H z51WDv(f^^4dETN$E4!&V*?*-3mAn`S7s^1^%siwKRIPy^_%^sFm*6DdJj_V#~F>OBO?6odCX8Tc+4FCm=1MPZTLb3Nm zkv?AsXH*=pWa(q@smRl1X?2B{v9_dxYf$v_Dk$LC0<6tYZ_zhnb@eV9(!+&D1dXG? z9)#_RCt^o<<_P3`<9s)42iF19RnzXJ`>63=EicV3G8BwClZ<6IZ|%L4JDDx19C?iT z@=fyi+1=%?H88PM^HfhTuOUrm@);7BcNTzOqgYA9;XgUd3eY|Mzj$My#2_SRW!9|6 zI_1?1oCIXz(+&Jm^5r7@!Nb3x)#+a2>#D$ADQ< zyy0L(bvr*Nt{n7_jwWTQhmhPN1X=cm@=+{+Gl8RH?0>gh2R;Ogg;Tub(Vd5s1dzo? zB1yt`YJvA+`<-Kn00A=^e>V%20+2A2vDt_Gb&#O*o(cTpxPebp59tz8DEgQGbW4ccC_t7v41 zeZQWz>$(2TdhHj?!STCer=?7S9t8&$tzbo#4{`sSTmCP(4}{u6kQreV*~b6B9z^q{ z%$`^Q$e)-7v#r^Or!He-#;)|X<^+2nIt5hR5?lPZ0?-1A_P|2IX~biIL{Z2o7Xae> zlyQUEQgb%^)i{T^=u^}2$0tIqjt|(D@6q=o+Opnpu5^C19Y9S5e-pw)XwPc@O!k2y z3EeowMwRpQSV_~7(dK9Y*-t{u5VUW|Prt48A4^V&IKU2|6U5vJUixEt_ljn=(Z=3 z6PAj0b;-m#-LP_E6H2(~#N0mcfcv4DX6OjKIS>Z3KhQz#Ck0Bw&eU*Ky&>8@N7}Je zq3fe0gy|9@Rw!@?;$iVp=ND(`@&tb$x+3~s=|@R~xorkC0v&RN?xQe!k7PxdNqv7r z1vdrU!PSu19^Cl(au|vliH~j9)=z%zlHc88ym3DaUC1W_n1|Dn6YrjY)64yxR@<@j zkGKEtV?zJ=g9L6V!yb4HK13bijYO#&6p~)+q{GS4GN))^(`n$b?;hpjmzH=FTW^K! zlaT%n*&U;$|BXU=Wb?{-xn%_Dr&T_88VgzD5h^s>qn`qFM%y%30cKo=Mt-o_@p)^_ zzd279n>~+aa{_=sm2IXEB45?Cd;~KAaxMc8I(0zjuRm^I!<&f5nVNaZOQ zM~(rj@fF5`v|Tmf7i`5GYP-egq{>tEI#0Wx78{!l=G@kLizT}D4#_0As+UH=Nyf-n zMQ&T)1HQB0C22%MTaw3CNe}cJuguMVR5^}kKtcQB;BP=J@7!P$p6BExV3rdPJ78Q4 zqtl>-KU5ZdZEi3E=r*JYcZ#4y)5#+qK2^S^N(-ydVC@k%yqp-|lST4>d+bgl@ca>v zUrC)&fLKQok^y0UVcI@>5&&McsX0}mOeeWOZoN}K=6Ix-lA=Wdn)jzc++Du4fII}{ zBCe1?5~5Qzis#B*B;IHgedRiR1$lsW^IZc92VN$+{C3wR{Fo~)*RdxM?H7_cC6QqS z-2Q36&Z!3cbK}>RtEo>KS(#?J|JhK;)n2Az?7|*e_mMA!Cw_cr_X)e0W#0Mi{oH`# z+3{W7{9 zNP7piu3q~pf$Q+z({+HjKg|>Lo_4M|jlFlaK3(IgR`aDiLrr?7#)F^}oqjYEloKnm zrzFRJd#>JD4bM7-sPM09IXDFC_2dE8gyuB}T5%rD*D_6FP%oqQ>k??Lbu;O)Ca;y0J9SHbIfA8x__P9_Tm>eIG>WS|-ls{Q7_FK0_D(9L-zY-vK-;=?ML*1cOk>e z;|t2XeTnn*Y=*Z&Z#Pml0R}B1@fNl&qyKKOv>@EJwKTLEr#mXVnoe4QAw*WcM-Qah7012A0T_D(+uEojG8C6^^Ot$1oeMPwN9hXSdtnlsTWHS!w*c$n<{QUT3zYxo&SErZ( z_9=Q#QA(xH@AQdJ0swc->-&XN3T3c6`v+U9U!u!CR2kGw!M&WbhFFAR<-l#JHd&Kvd!3mFe0}&BcQ^heW@FCR&3L$V)H> zHXSoR$^6&n=!MqBZeCpp`zpOuaHl#U;@$DNJI+y9XZ|`gQB|+q*bqJ72kD@XYGF#U zQi*RnNtPsXj0T2lspIUIXgb)nvRtf9@s=h2wn3#i9oUOXq}79SDC7*~!=30#Z$y?( zj%Z#MWZQ;JaGVo*DOZwrJLI4r99_*44MD%@LbNj%{URi@B&SI>rx}V^uQM^;u3;!)l^zL zp!KXkx1=T$Q5yhM21>C|0-6YiSSZmU&;%x^0v}bK#49y>o*aYcX=f0tNUwWxaGt?? zItE=7^7?S2f_T;@0>R_GavHwGSO!V)-@zBCrEc1Ye8{KjM_&_A<`igsU@$4m%kNic zUC`(Dp44mJZfYK}_839P$5MS1V4rC+f3&+jNQ(A}@d>xZJLTcJ07LtBVNuDe$j&ot zJ{Z^^eXdpW~p~eX%C}VErAb zMNaTw#GO;xdyS_tE6@?hr%!>7I^U)j8&w{HVraAXYFu;62wxDuG>1sM(cEgnAJMi~ zm)-sH79)W#@to(2nvwq;5`V5m91KYCya1;#`X!auwZJ54jTQ41QnFh(jm%N~_3oxB z+*!=wm2e1@8bAFH-TWm*#y;NIk^1mD5O_XCBVfOctr8U$5l+t#(cH{1DSQPwj~){0 z+_X@EY76HW;Z4VZHrUh>=Oegf@7m33w8U$-QrYO=pS2ci?^uZ+qpiVyX|C$3X-bOo!e}a zZBKitm+y={m~1vawmP?H(#gnhkS+--RGXO>POn^8KT1x{5*6eggs$bdT1I_&q_<-PBMbN+! zLD0v-;NalrI5&m(z|KX-^zw5CVC?SyUj0b|(gI#A!hIFN73TuZ`nob1S^e6CwVs>g z&wqP>6f+upWyqvv+&r&9#-Yl;zcsWm;6uhi%%|st=aqpN;QnZkjtKy%5Qp7YyN~V_ zZi6t6M{I=3|Iqt@?5zl;e!$^O?{_xS3*t(5H?*5YLg|l z^YsbZ?emN(c=DEC%^Q@YBee@Xi!G1klF$|hM_LtJ$YWe^#uuSmlbLAPFNO?6F8Y75 z7H$>IuYzO0oPe8{lP60YC5djLL;Jav!fb8FKFWmy0()kv+IcgX?gkCqxn~~oSb~&* zMz}}p@e=q(M8@hleE9zz%}(g-U9D?*poNdpm|7*r8IinTkmjJW&38j&Mt z5)fE@dKAK6-^-_8A5J{X|L=PbFh`81s$XA?oa|3}PmWKUIVEFDJO5CESErGE_6?2m z6feh#W>$R|{jpL(3huAWkTk%O+1vkx_IQ8a^Za}edNe-BH*JRLQhKlwf4^XX(6vVb ztWv1)kQ5x^Wcl-4kF{@et>D>8L4_IzN{1P3M_Jk@3pkTJ1;ETo9YYF??;L3? z=x74xro%Dl97yhRu`X*pBI|! zleTW+DXHAFBx*~de_gp+}w*Wy+n{KfH!R}3Q1myhQd+xuM zmk+Y&!&Vk5VrKh;(Qg*v>YaFbHqk&SK)`FyEIY%j`)VNJTiEiW-nv z!$g3afnXB(nVT^Lz55zVAgn5oEnjuTP zw)Bia{H1ft<}#>lS~J=h5{v&F5whF@z3;W5 zODh2@ZRrM}fV~0y7~m==^sKY=KXw3xy|Ve8sJ#qxd95GFAsEM(dO|MTfuRe_K|vR zDp3iRw|;b{&fNoSi^;YT%ow0o+HElIKjCh8qxE2Gzz9>7Ce5HaER5_Jx=FHJ=N0D! z*G+ixVB9Irc-*bQK`|)Gb&(})uf^D2fU#*J)Edv6f zYEJsUnaM}vKVvmSl&#S^l?L|@`p^0A4?gKMF=TOXyO*_`eqPMA@|AvYM27kcuv^^4 z;CUyLmx(fcp79GOaU5Thg!4}K<}Kci?p{yo6lg_hq#VOy(FuORlOWS3Hkpx~1;+-dZ}CM-fSB_~_;^7YWiD~M-V_lmXgc2_x3~VGsfnSthOZkgJqr0^ zim7lJax5eiFk&e)NYS;z%i(4JEw0thhp6}EeL17ANPG(}Lwg0vs6##pikwL8;x6iqD z2SoO7nCkmnE#ogXHmWg%q%xR&Hv#$*a%5z{z0~{tk;z2p!1ig_QY;Vry$%U%VHpHt z#!Pqkyg~H+6=8t<7hnu=UnUIdK)U$NH9x#GRkeg}S3V$68_}9dz)LNe=i!6fJ=_lBmJ3I9*#mnllu2m2pz*nEv8ehS?iQtuN(#wChNC z{lQ0)Jw-{PbzYre)3y+$B+)HL^7ZTdI{Ty&|DMV!1+A^WO5QztO`Uu`^7_x2zJ0{S zqx%%!RFc`Ld4th_Nyi-y$maxUrwM*}+|FI>@OuZ+Ac1=+b}QjFlaKN*mgObGNYOOS zKn`3D6;Cyr!Kl%|MCYt^Jn=-ys^3O;}Y0^dtz)PM&_Elul!1z#&--I z&ni+CrytkwlMEG6o;qIJD_;@fb-j>G25RjY;)(L0VKB4O4V_+GJ~CuF1<=8zxWwin zWVLiG{#f&fn7>xxmbrSD2XzE%uhd8!$u{xWei|b`rNv;@WoXOQSwDzbk!%3sBv9SA zm$dC;C}JN~0aj3s7~5!95Jic|2s3~54#{ZQS{u=Xc|^kb8EjDhEMKAwru$$hWGC*a1BqJ^K+xpY1m zTrpl&42q;LaIp)K-u;!$_L_n$j^;l1XW!<#9U1LL>`8c(YJX&L+~GF~=cMpP(8?{| z2)=txSVIpve{jY&uJ>c$JB_#S!`MB&bk9&gi^FPGvs5mV|VK-1sZahjhnJsgwWS72)yOq5$C-jZkvxH zMym)3!|4^$gts(hZUOlkJW^sAVC%a|c*G#$XO1RIti7p@19bMumEOF8>~LP7S4*VhVg#^^kH2r&n!cnCw>R_&lk$OW5e<0AVbA$k6Z|u z$#P_)@@5w0zllc{S*vp@<)^={l^%~G{8|g|i|ThX83~65c?5vk@xfuEh#Z|mpe|b# zoyA}pqcGYu!roLUcx`;olc+^yciowuqy87PR zG*xJG4Qv}RLMQ|s2l<~xP?0s^tF4twIO$8>Pf-f$Tr#)rWRh%rNd7=?<$jUkv{8TU zN$Qo(RT2_!{VG}l5kpHz0pZJWk;NZD6)!CDVahr(fuTUog|aZxuzB(>9y-vrY7 zj`>Cf&5En194OCP(+SUSLwc9*$0WlRTtOJz0!8fQyXBb5fpnNd^xX!WWB1@|um~5e zD;U6?V3Q&^rnUi=-lt&YbOswyISAQ8?6_FBDaISOKbQt7JRFuwjm{f4KJ#gvNf!lFG#=lk6Eh#m|b z^1X74DK1|ozU_@uaUYB93(sGCqj}OCbKDsc-q)4MJwMZ-D?&C%H5c-B7^kej$9nM0v_b&8riS2X}6A!?N4l#X$aAbCbTXe0>R%B1^V2cS^bWThhH(xB^ewmI$2D zip*f_yY6sJ05_J?vCtCO8W4Z{jYcIoT|u5HsR|#k931*AqdR(~;?Hse+D$b1pZE+m;K1X^&K@RK}ir92O|i zhQS_Xot{>D`v~n$6;;7Qq=~**FVoEYQ&3f6U7D8m?AZK$fZk0mi@+oIEvmlr$jJ%jryy}zhk_}H`*O;`=%VN>h3m5a?- zr!?bo_s`<@^J8lF5FXGj;}qLAaT#^-WJ_h6@~B9I8d z+Y%!Q=yXb>z1(162k6D~d7I7C-rvO6xEr#-b&IHIH&3H4A@_Exmflvj`Gh=m2+3`q z9uWDb^fb0TK#q+dY~oe}IP#lp^%3PjuN%4eQBLo#S^-2!fU)ISbL`alkf@|{VgshD zYu%l5)PuB(M{z^S=?m+hw#7|MqIFnxM!mF-aRuZ)AJ=7Ub#sNdPze%-cY z{L?B50*B^{Jyo;!LfU-wznEDLsDGDlmG@5p;r;saG@=rAApxP{Zh1QVGvY|EW(o;> zfo!_G_bhqJpS8JMyVU3wPGL`%(fSMXEqO!kls?pxP%T1i`PU2dc0i=Zv2io>9%HX* z61He<&XYXtNzy-RN=;L&cUmn`vZAQ~xR?1KnGJ?;?T^u+p3qRuO!$uFS21 zFMql-=VTCrC+#z)J@J-ceR)c|r--++qP3SJi%$Om(8JLz->j~cR{(pu(ZgUxT4_g` z?ET!Q#7CMJ5<_gdd#_&pAkWZFNT)YUuM(g3k92m~CnOl@UX`qjccngF)9yVNQ)>@k z{%TaqYcdnCh^LjaP7O>H73dV&ScDT06duo6`?s5%xi(cb*hrx>_{xqlRrCT@tmmxO z!8o`bAByMGNZzld#q^#4r5Ua;cuzCtBb#e2*t%{QQ2COhYuNWmhW{v|X9A)()!XX+P*zZWA_e zCDY)wNi2CRb}Yo@w^bIIodBJ)wW~nq=izc>5GNhtv2^Fx->&7O9M;1vp^`sOd1}-P z><_=fp^+EFi$}!cp-d*l%u#-w!_@$etZv1?53`~x0S+CgKcJDJbl#CniMo`hm@hAM zxmSi{+2R_y%_l-XXSn%OC<+=>>)dK1w1LgViq5?)rc?37Z|~4Lkq>>`dz1NId&hAr zbromjsBBUT(@4@^RDF+G^V^w%Prwh~zvcvhY%yS%j-L#r2bu)8bQ6zJj<{TgRNdwe&$iTq^-nt^q3&t#iM!sI}g8&7$FQC)f}nmG}_oX&F-Xs`r5dMr^Q$N zaDje;V}`9Rb1~^>AWUT|iY2aeI1t379`Hr$P3J3+JD@YozPx`qE;N&=Vv`v!xZm&t zpZVa{XTB5vkzW|RgBcnOel+%<^&d?Nt~OK_RkZ41I+y6xPh=E%##v`xid5Xj6shW| z`mFxR)icVirDvTiQQ=@M9Jahy?)9tzF)Rca+`0l3GxQeAxnm zcP9H@5vYxbwjE7` z?}noiWbAF8{q=5Xx?uGgws6+$7!Ca=5*d_j-K25J>D?Bu`-%CKcu#SGk{f23aX&&K z?zgRpbgf{;8>piVPw14(PM`C05`4Mse7B&I#|kfaLQ|ur=x3%^tfbRy0(m-SMTFjp zEuJ~zI#N$&kFkNlcTCXXY<2($4c>r-#uvlplB2RaU3e~5zP>)eQsTDsgEryW&jEZOVD{OLkWj&k%@_NLxtRj{p-_>-H*3x# z7NS$R9j@+zquf$-Yn$PqiBXGag|#kgvBqI0c9y59WWiOTU1_F?R&&T)Qp#Sqmj(u5 zWMWuMzHa)u&bG4L-%v>uQu8*qO-T=1v_RM9QnC`?0yszHMh&KkqQfbTI3HPd{1nTH z>ZygMAPF5W3Un8s^SIKU=}u&Oh4{%4Phg=%B`#&wy;ON=-pR!=+p33uWgG9_$bMp&#`kS)PrfU%kA zG_P8em|8-0;*WbQR77$)>oqNQI+4wGLce_{`5y7??$wPQeNf}+E9$TP=rrxAU`4@r zKchS)2lU!gXsC$g$4zFz*_u#-F1ZWUig$mtbdBjOrH_bbA1<;Xf z=CV+hgpZ(J6Ki}*djd9Q4j==jQx`&@z?5`=*cH^__;wvTdGq*4D%Gi?xX>g!0|YncbbedSeCd43$OKfgQ6u^HAV$3zyKGcC$ZhQLMt9U(}}_5A9cvq5=p$yPnkIvxx4n(8tg8QP%y&G2ZRr zX$l;++2*aDh>e`2D|%6eL|%++2Z_zH7$5HtAtoix56f;xI<0CjzV(Y$k5Fp5St8E) znc?#6+-f>e(Lb}nTYiHYh~L7XPju${jC|Z%!cO2VS9o2Bcd*?aN?UejJ!;>Ccv;tc zqm)RhOrcSg2$(ajy=ep?6s{`g51jf43G$JyFxW8Bp$~~z=YEG3H6LzdYGm?ZQpEk< z3j~}aHX+HAs@8^!tKp_Zx%A+_gji7|X4`7J!x>-WcO zVoQ!@TZ^39uk@x_`>yLk_jpf@VIa7VFm-?lp)v+Y4{r;%%E{;2Rt{I%#kr67?9s>49k{18Bu z9?L*Uwzme|WB+!Kkme3cow9;ASVK9YZieHHN5~cmVNeU%zzJ!DIjgS_yJ)dO6)+%n zM+k6sK-Ux$=aZev0bOjQHUd1lwJIa>gJAM?1hNPC^*<9pXb~U@w~cB9)5F{fKa+j& zI_mi&37oY7_dxETM__dYO!g&Q$jr=d`~G#KN@($Lb{!n@9~Qt)%|3f)zxyVhmjS^? zhHe(46H|HtW}ROpu<4+Ug3r&2Yl$L+ z2Pm@jvRP6&RrB!t-lU0pad(*}IVWR_ZY?dhWNgvunr;EuxElN`^@jgbIF+ebNlK%B zMp`Uuzt{#|FJ;$_eX|U^kIEx=xE>(b>ziEu3QIMKz>-yPt8vxo?AW`-P?y9I!7RQl zzZk>VP{re>9CUt`&?e%7WD@b}v@@fGsuz$^CPKW$KdMc^9u~JBk~NOxz9)UBu0v@( zRVU_bAIkjp1yxvMfoQYckBH`FLRXuepS`QkoT-r!QUO6Fe2Wy)YM*^Vm4VW3>P1wQ zFalEb1xbFmTRBo<(s1$=1dPkj@ri`UYVF!oOgR)$m-wRaIwTF|Wj2=TYn0*{Pzk^o z&tZ8Zk6nd(AY+o|TU1wv8vnaRgD-BLKS2D%>Q1oS;64^6E8KZC)6d0>k{9fhu2D4I zw(o%!5&_k&&0IE2td$E^Mm7iVz$4Gm=5NZzrFnaf^{H|h4{NltR)z<+@|(j-p;_fO zSJj+x9@VKYT6di0?xDYTH#_Nb#20J$tZk`rKV)T`>f$WaIMt2t zqN99FhQX1rSoMz7?{RK}eq~y(###xQ@6yNF^n(515bi(oQ*e2Yg?p)YArZSu$ZXXA zmVzbd+>s|I_5QIDHlMgNKtNGcoiQqHb`eh+DLF*{>AlMe#L0P*KrP-JrPc?ywmz{} zeYU@tG1!2zV?rBe;G?aW$sPCh3yr9gCL&Mb)Rx`v#*_Y-XTI^iKNRBx)NxutD|YDD zs;rX0v2}9wuWpC_4?lC91kPl3^NmZpw#@A|Ue;a}98G`7=DiBJTs?Yxb-H`k*t{pW zncl0Z_RO9m(J?C#&M>O!i=DaFArRQ*PxSLW9`Wkh#nrAuJV#~15Qz>`CIL(Ly|mk? z+*_$u#$!u51-kh*=vF5>K5`$lgdG42rf7-lQqR2&wpfYeITudV$K}NyYkkQ$NnY<* zng;~?J8Qmd)RxqSpb z6cgtd`yRldx_^#? zh=l%Qn^532skn8KFhXbf?{@lks67TiN ziqAZNQQ);fw=SF{;77=Z$?iJrgKnD0T+poJ3zc}}aE56KBJ!)$L?&5vMJa>jJ}x&+ zhus2^G2mCAN36Vo*?UN`danJGuTUo2=|5?Gu;QHrcl?{bm&OSef6ubNR^XB!f4d>l zu;@=ttUpOXt+kiDiO&=-mF$bZNvzEI*+g3|s8QxoVB;HE%ueh2>5=f5pVv86@OFZ# zH;MguZR3LO4PQl44zMl&urmcjthD1_2cg=4`HT!YjZp-)3SIzhbes#?|HY)(Zg^s> z?rwQz*4_7wAlplL@@evUw~O;W(JxyhVdKd$rLxg=uyEOoSplFVzdUMTD=E$Pf;Kh{^^hY1zeo_-c&HM2^^Dd`F-YCcO!-xBhdXsB{?vRnRtLe%)KfNKielDl`Y=!> zEb5Q$vv9MbC`OmU`T?Z&0=CcB5lJ*O^y-I-el%TI*a$V=`Y|YD#8+Wt@9$Oi&1s`0 zcJ3i62jW44T?D3l9I{VzUiO9*P~~5u)Z4->?KFC5wZfEtNyDm`h}M66CJMd;FPhXc zFd=ssYxknuA5k2Jxa|NFfHZ3WeFE(2-oG8`C_f>ZvVRqj_&qoKMp<) znGb$h_2Hr_y-&;b`9(9Rwp)DCZekcS4R&9XCx1&1d@)jdBmN)8-a4wvEo$FZL;)!Q zl?DMRN$CdZ29@sakZurZ>D0;+ zey@02Gc%+LRfj78F5P}O?~?(=iG5OPd;Gfkr4O4yL}lBg7%#P`Dm06eo!oAuEgNk( zH(Xm(DmH6j7w)06j-MEK95W)B&e|vi7KJTyaj|=X-x8&YCxtjTJ&9Rjl(O-Y9MB-# z;c$JCS7aF14SG1={9LH!$(8qx0hp0_~mwjVsha@*!LW1LcEu&dg_q zi^9bI6tOXkxUn-DGu{{0yoXUDVTLeZAR@>rhT@e?O7z%psI`oM0>Xaumnn$rxrGaK zIdGkuL${m9GqUKc^y83-Vkcx7Fj-0=9@H+H-wFYmx1y2A^rIp$7bII3iQ5BAr1th^ zVB7O&vx(pH#2FxyZJ=ybF9g9V2`-wy5HJ_IR9jHp7J=K`Wz&M?u)ANCsQJmj?ZOp8 zoI;4^MyKE|G0kLdgnjgm_IeI=N|&UBfRT>8j~=n_IlZL;>&6`#F*N??#bd?BM1#E( zMWe$tf$*@b^K&@b%v0T8g~rd=P%ZHf1B}kQTWAzM4!XXGT@@%IxKcJ5;RgvSXuO5S zRw;MqiWsaJ{Lm#voTmEh1vITn0`}^cjHs|7s!mDKlMxE_TtZNUr`mVXDt9fxOh<@u zrfF`iCg`$1JkXx2H zt5)6!^Uw|137d1YFB6Wno9Jej$#I`Q4ZUy(=;T?YaBMl%dR;Hz>V5{=MGFECuPXT% z9kI|fPHk&L&oSG1=iS<<_Zgw98Z`EH2EK|3K+v#&a<3^Pxp`W)UM;eBN|nm{bW*~` zAUuTx2oSt=YnWOKtc3?6@XhQBv)C;HBL`f->wFB1)GUG3t_0%r5S{m(wtC%)SOH|}<*qU*f@b4@7d zcv4V?MpcdNF8eKjOPm5g^Tb6atB7;Uo(`(1Q^ebT&g~ne--_dZo-au_zre_JiNyy< zB3AQ%a;?uT4L7@$k;aEc#V5afORuo|M!GWl=)(Jl({VG|sOAK1=4_Euj1S(d#Kh6c z&Q?N}md_#?IbX5yt(RDyCWi?e*pee2DYY2l36dTc8%P5rG=8gyJ!B{iM4=6W*qxCy5 zJJlw{r$eDPEOQ26coojSRrSTCGZ;JdFyD`*9ZQYIYe-)fB8a8hwc*cHnF1fEktXP& zgjFVblG~|!pDoo}c0>g8h&BH;rsN5FyXnHN7$?*zWW z)_Mo8>L3sG&lixrCi}xWWeiSCjIXp zY_e(W=|s(4UVX;yXVO?!&3pZiRx7lI{l~Vde2^)M=9`PCd}Hv3BHsusv9bat(IQ4A z@j}lqIimeI-EO?Hu4l>1BWzUKR|UG=LV{=4e>N^P#23#`O}4^DHTlL}?c5g2RHB_v z_ISbvZ9B5~Vk5#Hg_NEwHaI;gG&brmXJ{_SE;fF=kC?*e{`>%3hxT}W@u+kx-Dlzu z{ub*QiIQ1(%gi=IMu<+{7`%Uk#@QIV)8&vG@0Q zjvf?q6#JyaxxM27>dBXvSP%HrnjA(>LFq%ti4ROIL<-`&@8e{F(v34wNefXF;DGl^ zDHZcD<8r+FV;a;r=pg(DKuU?p5G1ty6)ZnPK$ree$h>$6vwsnIvA9@GOfRCQDP;dp zd#R()$7p|z0Y_$}NxqH2_j#FCN{z~ryI2mcD)l&X?ApZ0RTeY@^Ve07(d||P@RM-d z(x0x}1~1mwpDohS-$QU0#WHI}oRUprJwkL zQ>KBN%yP(WJJucAg)_o6Lx+Q^?e&Sl^)x}r!JNQk`?6hgpm@Sj1sq}TQqLi>zFncJd2?m)Vkl)qdT$UyqWwLPwJ3=P5nsn>S$LB<2s>Drdh1txel!MtE3{O+f)c(-xx>Pp3oWRuQ$eD2qOpaA0M)L~JlIwYREuVn0{ zvQrGE=qZK)>l}h^!~h9F?3ezJ^E9T>Z!uW)Cp2X*TvhxI>{KJ*Y}lhc7WRu|4LSjD zk+lW($~6;6MCWbfL`$%j1KR-g$zCuTdlU=C?+!kQu$a!$M~z^ZYminYgLZZ{_W_mBOs%3h z#m+$sZwd+%vm7l-eaW%y7X_P5V`~q?BFCemyt(u2FL8TG@<;F7c(tH(ZM8s)j8fy* zb>6mY773nt4Lp5;!h9Q%B~p%e8M@39pw7MesVH*v%^T{ML1j24)^1IpCf_ro`X3%c z6kC{|SQ>ML1cXz+>=FqOAI3f!m}xZ^@$uJ*v^#4E7qii2*arc7jOol<6Q}l-3gSG{ z1>sRSq+J^n8r`ma1O^O#ja%TRcSgyvtkDLEmy0`h_pvSI5^J9}P>r^nMp#hPJy)*c zT)NdhT%j=gAnB7xFg=q?d8B?>Wo^B;P*Gvyg1OImdEG@_7ZH^gtB$08x>}fWtj96; z<6FHd{{-3L$sl|0xPpX^?H0xq`LUyjdX#x(gPudtz&H<4X`&O}_q?8Z@!T+y`NIfB zYJcxLPIbVaN?pG@s}muUFQqVlKwbPyf~Y z{k|jGCa6h>+?qdjsTPSjj&2?pp&P4-_d(mQK4t+dun2(oPjR&(*FNz{4DZT8br)fxNUC1guC1X_Q0y3Y59b z$z!0+xd|vZY|DmizrE4g9ZDkE%m<#M-ZTqwwA?n|!Qht^8vGJnP;GS_K3*duvh~yyK`Z8sU%5M2G<%}Pd zB6jD6(ID9;%G~%3T%vEmlQX-Xb-t}1)Fe3_C1**!4_{9)h<~vY{wpZ(O^_5a%tyL= z_~5yv;ez`E9kc=goxuSD%U zukT)2?T7b9nXlppE1b$0`PA)Y%QbHKaO}L&G;+`qS}7vevAMqfLkH96Sb3rC*+E%Q za%y2zj;$Z557q#O&ilgdC^vk(g;ayl?dJNi;vWm%fWjFTdq>#&C7IzLWP16BG&$N1 z!>v`zz{asx*`5(tvM`+HT%4g{7u3_Dr0OGC?{srf`#kQWoUHWL!Z7gzgA8cS@%7&`CfMFzJzDA;f4C-QEm0PInx12UHn_F zT8(6<+A(2?WA=gyIxWHSOaa^X*|AsEu1a$g?oMnDn6sR2lE(t&00AjO_MY+r3@R_* zDGpVRksq{2{{tL#eR_Ww`U}>psgR7vDP91i2;?g!&3F9|utY>+V<-mMn znmz5VZQWLDXtmzapD2)$HaA&H>R09dME=_ILZ)VaivpIjQ;ynC=3Ra5c5xKAqV1L~ zFVeu|!XvSG{(SqzDg^>JB9-hXJ=glC3qc*> z4TPxjZyYT1yUJ*ub~G@`=WX;Jna|lcZkJBC$Ja)N0-?(D13M{FGEq-qTqxcR$hP1R z(1wfd7-;5$B|dnF|Bed(+fec?rHV>~Cl0c{MDpXFz3=&Pgh?xFBu97mX+JQtZ;Gc~ z0H$y!L!r+{?uV+KRT^!pIoJI8NdILJ_#&q0U^${yYRswN3BO<+iKBBNg{4bfe4Ctl zXo)qX8W3d?=D(%@&!ex8!%tD~6s z%7lu2E1b#t_izot)rfR&hIxhH=Y&a`!Mq}4h4=7W^TC{PK-;#3JpOhBO@MW<-VAO) zV-N|q7g;1(hOxS({a;d^nKvZvy57l5vHv@a&3~tu7+(^F)LI#`QRVvY&++fQZpD(5m5k{v-kAE)--UG>rJE zwp+XLPmlgG8jYQ!!HXq^h%ErUfD2xq`fYxuJXC$#45n(A^zDQj-x{ z+1=YD_)vX>Ji-FT{g>sF_2i-hnGqhV#~Z3e#=_oAD--M#buE*% zyO}3)r(ZnC#5osPot!#HG2v{f$7mstcHZ*0tI=GiKnXfmG$VVbQIlT)z+U=Q&0>8ag=h+(WKOU_$EST2d?pCDU zjfXCSp>HP(wvwhdcTO70&5M23_NUs}S9+Xr9Y|G!hM93?ytSUVq>Dzp6-{+c>QF2P z`El%beE~aTFaba?7LfBm#^*T1$*TpegRo1gs(OIl28UN+)cfR(#Ifm)GT+c8Z!L7r z9o2+{58h3aqI0yEJgd*39AK}Q%HTA&WqeX5M}7HmAo4~Bt~w9MtX&3#A?+2@&YFfZ z&|PCo_vRet1;9W7Nra&<%EhjMHRowTmh68I+!i8v_d5Do7d07m*ZFGCV$1?ZjTSkM zL-eNUL`VOgMqqUV&50$xs`BrC>(R~aQ5J7ZAlRswia8&D-s2U==O5N_w8l!f^Epi{ zg9f2M9dtTrjPmKh3EYOra^S{zXFtlw=7Qa0EQZ>Ou=hOC-o?oSpNNvZmteZE`N8yp z{X`&tT!(VAUQXdR)~%5ht?2G|>=e0XipwkoTNB#WzReue>(ZXg-IRx%GOt*TA#4E0 ztfvDLk+RY+W|MR;=UK*bT|M9XAI*zuP!K>@x0o26RA6d%pb_LQk4e)N8bQYXRM+_s zZ$UryTmb%L?w5Xj`{VmAQz-^C$vI%koD_%LdD=(gtR`j%mrHUrlOSrcAPjMp={EN? zrye3BDm!^H;v8Ny;yrCsv09=z$t04_u^;WsXbZ_Q{O=V~Y_!Hn-JAc19 z1(1V!8tvGC;P2blue;mt!RXg~68HnQK+iKJJM^Vt+iAt&9;kwQ-V~uhKff6t!n!(Q zQpBAa@fz~25&VHR4e^OJ;@85X!CE}Py%E*1l$$Ebh^ZfEKFU#+(BHG`T!v?f&&hAN zn5$i1QD9s!GhA%kCusd*N<&=SR!VbmVh}gR+3W50$8bAfu9&V7U+slK`>!Ol|03&F zg8dgnx?Os1A0jVblRe}d*IawEgm90-=H%29` zfPcePpIEzpC^6eGmCcRyo`T-T=R$@8lb@o;OKTh<$W|X!hre%G3m&?1(w=O{u+{dH zKdSs&tT?HiTZ1ra^(H`DIs+`0`&>YVK_ELs<8aRO0yN4{uww2bJ8q8kV{k7%ss(6> zF!)!Hx;zF)4=v=2t^bbDq4RKD0$!JT(hr|sI>TSAU@F! zt(Prezj10qdI7!JLv`%GUO-8Or6a3@wTRyug~X))RWXaZm~cbyyDmLrpJ*`@1x`C{ z+*iI~leGU`-pTvsQ8FG@(el0gEt{`(82ZH&f996~Ru<5am(b0Ek8%{00a1V6a($e< z0hVt~7^8Mw5Mcx}+V*?XU!Ue?rNOnX_#vl?P2l^YzcUO^rb!a84+|H3R+cdLlpC8e{&gkkGDqKw!9@2& z-k_4_GEe>|=EjU4@l*f884)Ep@1d->5zh71SFei6?BmvLn1-@@+X>86CuYrlG(%c} z({cS=b8*bO;uKwC(w0-ubWoQxc8fnt?$rMq=T!ynX1j>(cT%L8KM%D62aQ-%bwyyF z2)8CAXf#a+1uLnX-#2(oT&?_B7O(m!rz1GorFnBc8mAKZ$rO))S{mb^XqOV|ejDfu@S`h;=qi8oq-}mr26pHdf-%zaKie8K$@wbr_P% z3;cYI=~KsBW6wZwn22mHO6W*5(MPHu=X{QFVn>2J~xjUa;i z{D{<#-o0N7HW-)=JO^$m3hF8yn)@x*g)3L>E30?6I5)RXUhRGjN-H_+dsT6nJF1q; z8(ET;u4QbkvSR{GC#f*px<*k?$V7Y1eEJeN&XPkmq}2Z#{)1Qq=zaGj zFQiIk{~)D|!4(@T#akZ@e~}OoRyoXC9Y5MJbyJpRo)hs7RY{d^4t0$px8be4mqY`b zLuQ1fjrR^itnyNP4fmC@`derc;q)wn3R;YPKM+4v_ry53P*FQ1zZqeIx>q1QBh;r4 zjO%7O#`Nxyt_%p;6%2v7k%f7sl!Uj_hi|h++%`Vo%*)`~04?}3FfpN%r~B`5SrUI{ zzkzOJY>?0{ej@Z@lt_}STKP(&E#9V#E?G`jl0zN8DyRC45xAIA7d<VC5wBL>MNR&z3X>PTx-sZ&L}pM zMIKBlaPk?a7rVxJ!Dp4L)2vel{)|dbjXf2}FTOgsR>SQ+#NF4957U@q@thj&FgpET zK+nPyXsEx2`>E)ibaHHm_34*Ao@U`E50h~=&B$TLXN<(v?k%h_uh%+62I4LRw0v5) z1&2aokX0t16#3|GEA=~09K~+-wo;6eF8yW4K)44G?3;2F3f#BP zuk8Vyqx%$(mZfsc05usnk%K2N1uyjgs-`9q*W*@MOZ7j>T8;li^k!a&A4%;VE35I; zj{F(LRjYkx`JhF;JA)p)$M_+alXE(PcGgvz0Zgc8<}#*}CKJX7(>#c0i~Usg*3sp) zxElnEs!=NwHO6QsofQsVxv7fnq2EM2ZU^VL^uUd0Klsv|4>*5L^?If`d*E&=WFVbZ zC2zp^&3P?rRWL6cM|~#aV2$t2MU7-g8^fLWtSkv#{w%3qHLu|pF`b_Q@k4VT%#|n8 z^z@?2aq(Q1m)~$+x!1kkpoyZAZ5#ir^h?^@d=ZHg#i+|hM*eH4sRMr9L3}<8RmF=GYaYP^Dsb|KQ4~v{T{nsjTYuPa^F;)jeF* zpVWjaI*jWAMz@l#zZEgzT}~J*)cYmS-g`Uq(Y-mUDp7selEp)uCC%SVOIeU? zWHG2}`3GPk9v6=P`Xz`F;@= zl_B|8-5N5yS3OMH(K`&;c`GUr-#=metWOZo*G#s}B6+GTS^*v)wIK9b%^>ueN$i`6 ziM7aRxXWJagQJs?sZf&1NU9=T7gE*qi@=5fdBa0HRSNqFV;ULWc$NqWn&_er|6*vt zzQK_6KD{<|JIWbs9NQ+2xJ*u0^C8q}-xFC)+hzg3!PC&SPO2-cWlsT=Np*6`91KP2 zq*4UKickG70Xm53xiw%I+G+i_%4v`gN+P1QWp>y6i{?ggKQPYkd+`wdH0{Kx1XmdI zQGo*Ea+eMKP|`}cZlhVFx63!J?o|aG6>87KQR`K@>Y_P|s(6ghQp*=pz##UlMZ4tx zz0^Yg_vwv;Po8q~lS%(ti5_J5w4-|6OFN=pxU{*Ddeb{>$6bWc#t}-?kQzRIGs|H- zhAWWn&11ECEU(3FcisgnZ-tC$$b|Y5V>v&dMVjgt}XC}^pAaM7qwhoU$lcC z*;1;p|5v>~@+E*I><@$(;A0+Nn`TQ1^;%F37}=bgkxjAU+SOUS+B}mF59e&vYp&tGN;*HRr47zcH}izbsX467`MZuHvWPE`#vC>(U2=f-8pdO z;q`&Vdi(0jVRr!0o_=nsvqnT6kAbL`aa$Pv@z7g^*0l+7HANYMb$SpB1h>w2|66*H zE3zOC0OO(rGAe#&yFnpY?Ld^;Y{&BR7vdZ@;{4jAph3dJ6Ky-9zqQR#_(wzB7~ZkQ zGnL0ejkA!zebOamw7z=#V!(AMkRHKUEaL^g;nGc-#oO8QDS@dq1JIP5?D;HVwG(db zO)T&tnHZmmj>&tmLTB_DYZi7DT_7u?A1+yuJ2XV2>RXLH!<^*DBe2Vmi{ zU%Go$mL!?SJhwAjoBQcVOXos#yYBv1IsEHteK`NzKzn^|@~jTN@vPRd|Lc>-dpIJHYd0K@yWe^&E-uFt3$7lQM+{u*+?UKe-Qw_G<}@`AI8 zZpvNkvGOU`1`?luC5n0D$e;D98t{*(3Ppjrn0BkKZe7qOD`xWg1(zeV#GkE!qfKDR z8#6S+FF>n%b%4CmSs34oEP4ZWjTc(&{yMJoV@F}uJ6->(*mA=39U++bvkb<+GZC<( zp?on_QERE&S>Aid87ZO8Pq8&XYUPp{UcW17(@4R(!sM`z5m?d#*o(buPtpl%?v`F& zQESw)yN{XH-b`-bFOr#8w!ab##hhqMAmQo2yauN&A4{wMn?>5miBIMW7$3%CG_!L%V5k z-uAUc5EJHF;jcQyUgZ%H1Hq3NZy{`?5?ud7Kw~TWlet+n-)FS zKQ;q-e=&oc-RUSRt^ zp!%Z}^DOap!xkT4zoLrbP7U0wB^<^5>QP|1rUzlSHE3dE|E z?++j^`3HyQmND(0Iz8A==}X{j>!gqmek2iG8!>(LD`aE#NJJ+NnU=FM;T4JXY9zD0 z;h=_ipuC|LJfR;?X*l<9N!rKCGGjat!XN#x7?ru*MZj7@^YSb4)`1se1uc`8%@Cze zYmh>Pxvh_W`lh{eWA`%+9+!6>K`ev}vz+70hG zf_3b_K1WuW*y3EZNwpE2aQEbE=}31yDzhU_k3N=4u5C9+l)R_Yc9g~ksiiZk;I8fP=i2$LQwYHZ__-Kh-l!c)^6kOjyw|>clp*0p8rrLQAnGaA^|@ld zHUO;GWT@x@3ipYpnpRl2{KsR4ZGo>-qJxQiF87=d`z0m;)XW^Fqe%YCb~r z+aHva5(^5}4dbvwv~(p+7#8p<6QbQ}-9SNlj=gU5e9(Zguu+@o>3_WdW21L$Kb0-< z!|y0--%cBwam<|fO%BlliRn-R`)%Tm+y`6N@MK8pW4$U)#5m4cd*{y@M=5g04l5hJ z@4@)i_b)3#5;qJ6jv{M+Yqe-oPlW=&(Ik`Yn8rX$sI8f|^^+;p;*EXN5d z!Hc~5%APY0tGRkKF`F4UtPH)Oc918vCd)~{7zwsQP=yq(mF2iA{uZm+dqC%VsW>?d zfHbJ1H%8g_UKm~+)vCjIBj8Jd^=(fD%F_Y#Wbk+kctkF}MdL6h zK=}#{iZhYplD(t(v(|Gc8zL6GSU3u6yTPrn(O89(MDY*Y@RW>Drv zVFD()y2oF=JjM-=C+V`ZrpsSb+h6(jwNL9vPi)0T1&J~e_mlEGm|yqcH$>k`RHL}E z1=vvbV;LKO^AfM|tN9mZ?+Y2wJD2(`-k{pTBXs?{NZ;`+J+3b>O)A0VGuW|p@vW~J z6KK%50IOkXM_{;J{T=!IVQrW9PmQ>4sa!M)8`XgO^te^MrJOh2Px(D9lO3<#9v{7L z;&7gAx(<8e!;wd~;>V5Yg?%#5vb##R>bnJ=KS53p#w){T-D-d$G z83;?Js>`;aygk|#KO=TYHJ*YNfkT*aOd#8^S3QWEig4N-ds!62Hi43e*E9nfV-@os z=?D%SJ9dWhVzuo%DIqPUKmEUv7`dVf;?wO)`FXcN#x!TTN3@mr%b&M#)VtbrcELyH zN?DuWyVqk66uaypTKobw@SkvWTKiv9F~PdslFKF|Ea#J=BP_MvZV?7CpF%*ralZeA2(s(P6W4}zZ)1L#5=PmxW#eux9EYVbKa0cTbW{!M|C{V**MSoY-mT^)U#&SXvBf z0XOBjZbu|1P#5JY_W9YyJiods2^+X_qY^=iRqe&BWRK-i&d7L-1(mtsTUBHEZJOx*bDLU@P)tndKo) zICg4x2fs-?LUe(56dIp8-EYkKGeR|$bdL$!>$~=nMxbucyQPLSx|204NfO(zSeSFI zfq#MVvjSsTV+O+(GYV3v3+HWtBEf;z$kR1#b(0nh_v*9zb|j(fW}3rVMbMT8V`xN# zPWJG{nRbO<9}CiLyR^C2Owy`c+CO@3t0s?A3(QlaD~kU>DG94An^L!Hq=p?!7i(Pe7;|{}*tK z@f&XNMuji@b{RLuy-k?}D%fvM9?JB(2=4ZvkFgAO9+z)0*7-g#`Z>dC;!8Uk8{;R# zPZSrP7IlPwAhVqaJB@>t%;!9pTzu>&OGIe7ZuBO8bXJFWNt;q-*~p-5*xG5fs z9e_dZ$Ag$?i1bcl3({0l!e7Y%5bh?(7bw+l4s^R02bS#5TV_4bpnBn{{uci#AqbFq zoy$t3daI>C^XM-24zOWoI+lTo2Jq34Cc%zoNEG?{D^i*ZxI32u335AK6-`Iou%OLI<>INhe*Z@KvOfHEnPl)c;s0CCvPkikMn36uw9$W&- zq!q;Semhk}IV)la7@4>9Gle_a%~KYSHy&Vx;(E(9GpL=uDJ$1q0oU(wS=>|flJ66W z>eDM#%IKqg%KN15zn}YfIF-ve&6kzoN@F=Nu=Jm)&Q6z@iM?LuR^qgY*!{7xtMb`GKPY z8jVH8Q|Njf#X}Kvza_C`U?Ggj)tyH z^Opcppc=>)Nc1Toq@X-+`hncr3HWHm5VC#F`JYr?gXV5!Sf8*&j{dM@h8&F2YH0(B z0LR|nxB@445I;sLmmvuszssP8-2N;&G*|nRb7rVSbY!mfJzZ-1Ge)L;r@;oaZ`S^N z+p#%Q!_=amKbDgTYZX1h`U4kwM zFg^~t=2SGTjq&QB1U)+(z8}9{wi7jwST7*pHW?&UFj{~ujo25r;KyEEStnI8o^3BC zm}F|cOm`fR3N&AoDZaoXinr8ga(*$ttN@W%8+Sq)l{Jphlp0My9GVAO|~X7kV~ z9QQqhyYSd-`gsYZi~N(`lRXiZhl^% zw~$Hcl>OsF7^z$5kc-_2nHIh!zV}sAt5>3>$m*!zRFdf8{-FG4Ebh+;LB~u1M@p_<6o*+SkDGCY>Mu*mkT} zFa5qP8{Y{O45O>ouoxp_;o#A0z1o-AhB{T=j)&4reEea|W3I&)SV&4$yz*lHUf&L& zDdE98+wZlEB`eDnmtr0ssOAM(2fXsR0|~#~YeKpQR5HAC;DbmEIH8sol03%CN!706 zzK+pTk(R*-_$;`*-kO$;SLbBvJG=3u8{R{TUK3PE*Wg4P2OE(Ep>*!ts#S@A?gt%>d!?`xDUE|daQr{4nt3a>4zwE|GzNOC}IfhRKxqQRe-dX9`T}-AWBQZ#1 zb_i$j)%}WWCtPWOCGEMIAbP3sz*xX9baI!4dXdcNzWQMmsIL1QBu?9u%icAwf+cJ+odlZi(^lS=7cak!`%zn%&u@37xi*c z-_*^nH2pw^%(Oq>6IhQy!X7W}ru_luuB4&ANU#+kmLksFL%*OBh_3hNk6T3TI-2h7 zaMm_foCOO;g6m0!^<>3u+QSNXb2(eS2E)FEs8T{|DTrr=>ws{FXUwXs#{?*mi+#rN z6}UI+^`aK&*8X;}`pBUcmY6p~E4sxvg>z|qvEUS;p(wq4bpXYQ{#6G#Zb+$Hbg0LM z1uk~v_a9UwVnsG_g&V@Kh$t)d#}l!t(VFr;l8@JGcw}_G2lcr8dD_Y^iVl~M|MoRg ze7N<m57GGsVJSnGjaG45_VyD3^M$*Cn7 z_@_^u0+gJ4eAypVK8;ql{rbJ5Q1_7pdFA$>4Q%ov8!ExAb>qoe&;1u#l3w%v$aa7` zrq=xlxY7w9zw#QPSRdp#dj#yoy&juVEM!G+G#bgBWb zcRwlxsVRii2!A>$7kxk>D9(Q@2_+^)Ss#t}2J_}o{k&Q)qi&`}I-5QywF44^tIj*a z^;5FEb$4?+22=j)1?V3(%Z%YoM!_D-t31GLq_)CHcz3xKfF?F2eK8?>> zHVkctr73{?OzM?y&34U37)5>r2$P(>0n^y^Z(pWAXGIPz>;nqIIOv<$LK(8R!lIq@ ztTbWRCE25SGA+Q^7iOc@0#po7_xY9(osh#21l%^_h}54NSCHq)Gf}{+#ui@<1a|*z zG4+TGor`VtmvNOs2~%%|Q`9eJl->fT!z&@6&+)~kdbB}+WMxz!^=!sE{6r?!ZP)Q( zBxf0;?5P~dZ$?OdRd8A-$9b1+q6Q_RG&sGbMG^(lES;9(*DM{` z70A?iYZXf+m+!pOs`?^4H0|~<)u4oiXkEpHyBXZ+j;-G!;Ndg)2Ho1$>4DgGGE>UF6Lj~+fPOV7_gmVg!EJK%AgVi&X( z1J7hPZoya{h#m`;`P+U;f(g-X;5t$BT6Pn=O!dDb3zg~T$ey-*C$ET7>74shvb05xlr`RR6fh$C>ji;uCY zTX^Tne98u+jJQ750r?zd2FegiaPqm*a&DczjpWkjdimZps%G2N|Cl}CXgqd~ zQ}OG~cT-5b_4Gx=L5v5>nFr+;aNAYUg~5L8`7hwqK!a;=vEzc~PjsBn7dT#Qy zF)Hy?@A7)N+7*(H93~+XhYNf5Fz#@!b?FMoruSH~1Eq%ZlwG@9b7C}w1i_3ASB^PI z;+9s4TzDn*g(R_L{}X?49N!|49F&4?`xv;K+e})Og{yLv^+nJ)bOt z9LvlIA^WQ?8w-omEqwlV{(IA>Ev*m&w;HWCC4;Q9^xceyVXxcpx zz*9ExI^kjPwpjzHZ)>7?)ty-p1B`t}#7I`z@UYx;pho>9C|sMLook>y!t)?zh?T{IYAFjuMYZ7v<|cu{ zd&Xnv29#HufKtMIOaO(le3-?lX$RY(4It{p)`Kg`j7K+8(KN7qSpv$1g?w_`Sg+(v zMuP`So{~N$r+)93nk($Km!ML8qz0Ul`BQW#9yIJnOS}VrQ-Cwnp$V}1_l=xZ?6Gi$) z90IqlILw$&R#*Y z23T~BZnar}dcItuWxQ?r^^GB}XVHQE%ayTi+)zy<3Fe`yY0dt*1Tia?ivmlEgs!#o zj_b#!1GBS%aHn_U!}v%xzSR@=w0n>OnZ=bA< zOwr~6XSm4gdJZ06n}c3`T*ldk)r-Es3NcRlzGqb@njqT9l=cc7a^Z%bO=#cYLxa0a zdi%uzaG$rrn+9>{{o!;Gf|)*3=s9o7G{lj5x$OLSM1S%#dw1GigZt@<>C%_>a6(ut z21-N_dBea*I&396x|8*#Zm`C^Ntbo?*qqjfF0CLy{ol>--|rwIGM@>dNB%v~SW|u^ zMz%K7w5k<8YUTlk1N*gqmm@Ib0|Md5J2ePAA|({L=+>duFx?vc%Lxp z67D3BR13)HbgY8J*OQ;UX-I8Ni$Spn!AL0Xvf9V2!lc6inKw1to$oYWdEWps^dXaO zY@-3X2UUIP1!an(;_!87M9haTqKFpHGai!n6+ksf!Ku@M0Wwjoh9<9P;)F*{CZqMo zY6&MNzW@#i5r~s)r>sRv0vwZeNe(g#q8!-t73rS)Qt59c-O#qN8$r^Q2gnlh;%7W` z0l81uN5T^l>+eubs=y<_FpkMcxaW>jBbyMwC;S^-PQw}~!@2`CCAu&qnE?g(+G)xz z@a_QUN$H1?sUwA+LOyIgcKx6JM$z+si;3IEpB(Yer(`@A-uRxJBt^X6mo(-ryw{ly}doC14+7OaLo@ImFvYb)M*i*lv(+9Q{7KQtJ=umQeJQ2}>qh?rX3W z5j@<2;@qG+Fw{5YP&lqrJg0Yz1b*&GD9I2CB!F!6-kuTwJYH$gZrBTW*^+}6_d{*M zEWSE|3n*crM9P8tYG%;6H@A)D%XYlXh<|i(6y(*X|L+reh7d0O{s?7+)}jUlbp7Af z8+5@FGT~tc-c0#`FsL|>c<4$gb!Yl6@#mbNEDR^heAP*NodV-X|MN}442SQt-+%LL zsO{gM7rvk@pKH|=_V+^g>6zE-E$*!wFmN;-tKW<0mk24LAza`j(7#`G4}n`5d=d3` zz&7!|Jb>_Pnj{)uk_>W8S{VirJAW!M6(&l<+bgKs@5-#X^<9IzDP*Ey*p=yz%BOyR z{}|~CxBP8wB^;gS7l|sBJc;p82r2FVduiF=rQdU&mRnU^5vjv%2IFZ!J*cDuM8 zh`VqL(tG;q6*- zoB*tQXzz1m6AdWD!cy%FqF_2K0}rXF6H<9I1!&d zW6t9pwV?mUuCar5ruhbJ^sgLNk*f=6O9&ByM3B(a-?D-d&7Hm_8`M% z4737Q;-8@zka(Z!Z-CSpPH}tyJBr`Fg5=*>M5=8KWeBk9<)m&P_7H9kCznv23o$v} zoeO-4sbgjq87*51?E%et4-5&nC6dAT zxp{QSzUe;hX~Qufa|vRs|LKa_(|2_2qRqt<=NdwPGkulk*FTUYkB?5|MwNztU%QRt zQOw`M?|=W!hT|(<%dqjJK=ZqICS=iOo4}MK{+lBlN9nsfzzV^12sx}i)$e!FK?4?i zCNxqY%(%|hJtl|(H`d<$R6Q+W{L()kP=CK6Vfi@St4Hc502bYLUjXL#J+gF|x0m?w zo6R(|wqJ+M4QS$=oKx@oydZ?*Vywcs7x6K_ikg0a)lU2?<&#|TWDe`i&9YvObAJl2 z{uR)~w*;eAY~_Elm~fGdSMKpma(;SB)Jx)bjK72U-@qVPo9i(c=YoXkmtlGYSw81R zo31slGM{UQLHhehruZ)QW!fCfbpx$??Vwot1kRrSdpJJ3Yy8ioYsMe~<$FEJ`_D8+ zBYQ_A4&=7EDI5n_4lz{TnutCWu1wk5CyjLS2^;j z8XGzU>(}sx%oqRXfBf&k`V?~8G>1M#p?I)F-%=7h`Ja!poWnA{)#|@q00KcV_)AwP ze@b1!Zp1vrJle>4bbHGG?_CpJL5TnVd?z89XW-08*kv$71Ai}DR;ZWiZ|NkB?0L2! zTe}NxO(!9pBiA!hI>E6L>U3^l?wB~Z9Z)#~sV0xMWr+Xh6$K07WA$bIpRa%Wlf>bJ zOY7safJ$rLAlsK-?g5yZD`NjC#eEY*p8d+xkFe&Z7?kV^`4M$;^IbVT%>Xy@tXW+C z+t2~{w)jq6zMarz2+|%yp~_3URqo=@`AcJmkl2puuF_Y_QeE>u-+Ac&N8mf0G{}Mj z7kXh*4GW(g&Y$A=e3}!{{-4#dE^+&^3UzHQ7!X=-@_kSuS6&CXg+R&5@zotYZ~I(fP|*_ zEAU;1E9jIu>gD;5lqLah&szHa|xbEeqql_N;Ki#^fBVA>3*Fqp=Ve;~_=8Ngy;%4^&H8fNLbaDj_ zpg#M1U|@wAeHEDnW2I8aGm{3YP!BK^?&yjJ(vU7tqTclYz&a4SWMelDAJwr0G0<6@ zR`~qx<(#E%d#$(-wXXtv)l-kQcccon)gEt@zI@O;LBtrokU+57g7mry zJ}nMZ%uXJMthl6fZWiAE9`Nmz&QsN*ZHv)oiI~6d#Q;4eqL3bG#3q=!N}JVUOgs}K zMTUnqQ!@E%GrD7VBuGm%1h$RQI40;ci6F&5L$w>LeC^9aA}|{kO6UdnUkHHN#3W10py>X}?lJrN zn^0P(>$;^54V*f~86F$s50JL=?l?!&k8V;0npskJVBp{VKJ@yv&-T3aG-B?`*V+3J zWx96vJXV-X(bwgOwSil}oL{v|r{B^@Vc&CPf!7>Nv#_t8U!}AQ-`UVfDTfiz-cv`cnT? zZUP-545AVY*-;I~Q(;)Zl8IEOX&L$4v#OIa3x!;bf)N;2?gSM0j2~-=gS6-oP~zXJ zhShg%vV2}D#i{-T^6?pAB#4CEnQHK~+8D1kD|>2C*QJF5D*2x`>} zM0khgPyCu7(X-PN=X0+U_z}qC--PPfP|t9-=b}q||GDdUikx0CsEKIub+<#5=bL(G zHjAN~i7<$s!R9d4@8qk8BmoyHOHUnNy5RCnb1*@Qn}w3>DHRu~mj#D2P$JdQSQ1+y zb!kK(2$e&WgX4ZX7`Z_e1|762esk8Re*1t537fB!dWnaYK3^~RHsM^%XErG5GQuK* zhWsQ3q3J}*70T5vwXoN)K=;_oZ3mf=~BUp?hP?E=}Ri$}O|AdL7Z7WVcVa3fLx zc0t+i@P}g`a)NB;G?VuN|1&=<2%6vIt~>DkGF3&1pQ+$uisIyB%>m|O(fV+9U`X1t z`n4zyJ>mA&uLUcnqO9{Ej50n{w-F|&={@uhLM`oO&?kJgh-Z=nBmp!Be0 zyyYV0(&Y*}h9W#w7zQB*X%iwdM#$4N1cVc|*K@c!w~x>e5Z%0>=8sf#_UGEs0mbMnJE}0WVaqtn1<57IJ-7bpans4qqb_=ZYh&_dLF$d>=c;FR%sEc;vt0$3 zWV8sCkrAB~%2>-XIeW|7ZmZNX&F8w(wA zH_M=Yz!7`trTbC|&u;KVc(ML_r9dzS_q~6Qhof$zm!sHD7jxS<3~B>3r&g1X>jLgg z$8o`D0O#?YzO3?UQFa2vSn+F#p~y2K`!r2>Y;eLgew$Yj>LnJ>gWSGxcrKf7qXgm;*T0J(lm2o~%-g!YO*u9rShhCrdpuR|b% z=1LOW7xp6zKm0~qV;k-UiUSO*7{)DMXjkwN9Vv^!hb07Mk9Ci2kA2UU>DZDU<1Sz# z*R5N1O4#2$?`|Xx_c9;$k~f*~#NQZ8{mqrcY7AD#q48m*RUORW9oT)sO+@E(gWRxN z5wl;kncuFeUY@9TFLZq@OC`}J=sZm`n5b8nq8Y(EA5`)M2pb**=M{;WpYJkO0HnyY z_5ADv$7>KNWpA^u@>z7?!f)LCTBMr}MaR6F9e5hxJXZPf`6P3^>t@nhN`#OyI@F!0 zHTzZI*>S-egX%|apzvwwdUS5182>L?Bt}3?gW&jW=5*@<2%GZZA(!hk0>3sZBZ^v( zEQ2CW+(0Z&(m*0k+8~Hs_$lfJ{7NkB>Sq`}?oD&IY{(zFB%LA7C~;g2glr#y&qGCX}l(MpT;UIA}4{|N`Cs36|voUK>v=ANcIR>(Y1QGHmadh ztVg7?0FnTSU><1?=qGh8tsgLm3=uo*J2hH)r)fI;mVAdosTB%(_%A}`MG=FVE%O$i zamwg#-P1^&1@!W528_(X4izXbW4C->n;IIbiI4t+`sE}gH?5*O1*6Y`9Fh)|{5AGw z#@!1%T2=|JQf^Vr3c>7yM`b!p&LQ4- zE1o1m2S9o#mja0Q@DxxnuYe#QsN<#dGxl#uSc+;9p#1>$3J zJq&5K&qUjwhe4cI$9pf?96 zvOxpPuInIO`@*Ux?V9N4hmW^E4uQ%bv5l(X*adZ96Mftyv^n+EY#ts)(sBhZz8 z5yVE)0AQjE*>7z=gE!kJQ^=mI#O}^FSH52&Ob=oTR8MGg1V1b=l;(JN^-nB-7SkW! zi*{6?F0Bnv1f>ks7+rCWD!4E7M<{;SjWG2vr!XLk6f%>&(M&NTOru9kaXL)#mK5j4 z=V^{a1b3)RGe;q1&=;O~GBdK9vKO)ha`bY%a?)}dOlr5C(LCyIZyoBsw8pM~w+0um zY@Zu?t*o~2Si8uH6W%yV{P?<;@^5L%c^gHXpn*V%*@Mx8$%EO$@(zAR=%;9zq)(lt zLc{&VEZ)N0JUl%c)R_|VUGkKxVONPs;rP73%1C_l^T*d)8$c$KkxoFi z6&OHZZZc&l5E2QPONfF*47d^Uu0gK=VRwe^^4n1EYyVrlx`s?usDt z%?UDyaSr2Ew?TCaAJVt0vK?$Sk?Qo>U;X+GnRpc?zs9AbinLIC0g?lwEJKbys_iX% zC%)dL>SZV&HZ6lYg`QoJz(1f_7oP_@8fo}LUjV@hh=b%)aU`EsVttl=s|}GahiI2$ zSd?GceU+P$gLE5^cJEcf;18kGq35A=VYkAJ!va;IbFNs}3^I{f5SiE!#kWHzpSF3p zsFt%D>1-K7m1)?Rjh*i>q8p<(UGc$d_r%-Uv=v_=UXfh6MG-d;J`g?V!Mdx$@D)q& zP2KZJPgQ-&iEWfIKi_N2QOpEZ-Bg>Py#+G>U?qa!o;rvHbGfL4me>id$VOWE;d%XFe$X9|{p(d1w?$WeZtD5g zp!(hS3jj4D7M;SSzx8k{rU)b~zU-m0XCvW|It1ZjIrP`=JiX2ei2poK!$rYl#U0e$ z0k$EzpMR;a+htI^sMkdhuI0<7qpw5Hy7_m!iOZm>O;<$OjYl#3@nn`|4`qLe+m1YO zeO3YpjMM>6Q4G%>^@STRFRD!=iMU0@@zWmV7~hZJn81(ln2%sJ<-u?;&~HPtcjpPU zvr!`da6LGj*bFGjsle>OG8TFo{NrHd#lw2Hj%ZAL0e@0924+Gm6~NH3%o@gx$ax^I z03UJJV+ID1+@6lW@pEL?8UIL@(LqH}iaEPmH7-nqwm<*L(Wg$hZ`p zm)}~^D4lY@4BvFP=G-Cji(jYj0RKEEX1?{AqUl3Co} zK1E&^36RN2EfB0rA0rqNgNE9d^dFX?!mx|&67l!bk%pHGaA37vihbFT55{7Lk^a9P z_vayCX9CH9-U2)Jy%(>3>)C(&CvxZi-{<|=`7@2+o2oZZ#V1+PdHvb{Ny}eh+?qfH^4Uv8iwejG{rM1U1WP6V`-)47{dL{tPj}Rju7*tq*>7TK z)a;AVo2sqhaj0z^$bhlu{=B>j_||JVSj z70?x&pJr|?1NZduMQB!Gxzzk?dH;MtEdRI>2O;ue!q1Y}ml9ANlA-bEE`P2;-sm?+ z|KmzP$u2=~ad(w->h5g_>VfQkecdm?49->+@@(1Jj`9Bo=3IP=vi4gn|NF)Ne&q}# zSOarxBp(#}pnvlTplI^#;DG<_y31F?@KZ{Ph4iUxw?^s3V9WgkW?*ebq zkOQ3|PCT3O|BF@RBC}#!uta75yNCVRJaXH7Pmz0m`T;Ng(yIFhI|)RiEdOt!2$h)Q z1yUp^wD_oJ{Y|i#>!^MI`0FK)|IL?waX_L2(jE~uJNUyK{_HTS|BAtoY{GzKlRVxO zZANH2v8nTad)?((?IM8gxz%;|D5#>i>R6s31EK!GafPVvqk#Z)gZ3 z?ESxl?>{O1OBR8Ln6rYb^=?8#P;D78ADQo|ElrPDJr1xVqP62r!%eu(nW`E!E zul=#1_Qm{f8&FIDGB{@1yN~ie9;E+q$A5`nhG^uuQm9+c{PO??UWi`$pTGQrVgG{? zNu)$xOgY1B14Kz8H`@AtdEF(KCMqMjjJf>&n?C-(mPqP|CQ)P4ts(7@I%;CTMld6x z;q>Fy-3F6=%y3+!wJ{6a8HSf-s4EgHQY+FcvMX(>wOCjE0!^>hnBtC@s#AvwlOZj8 zq-{bPZvVF}S&_HzQt+HW6;2ilr~3S)wfdvjjx)#QPh$>*Py#TUG0!liumUL5mT&R~ zV1t7j&>|6^{f88JQABzTmW8gB-zNeJnj{}bt7euPpX=Aj*Er7@wX3)^fVUm45?sgz zm1F+FYLuiw$*IBHV5ne##J@?jYAU9souPvms_a~c!5fM2_EYei;7Zbe~5X{GBS zb)`!g1V+dWzcjZVm&NG=k(tMby)_A*0c@zhmWtJkb(RtQV@&ZXArNp^A7j&?{mu95 zaWH@9(qv4`&;07bZ~T3R-Q4D`eSLk=yl*wI8`%>znnh+dH+gin`-`S|91qb4ya)UT zf(AkdBK68c0>g6uZ>~`4rSsHuC2u$HBo93wC!ZvrI-fb8E2&^H2L%CT)O#U>2;tWY z^_{-h+%{mndHFiFs8q`SVJZ^(5gilx5!>DIL)uM#K|wT9mn!WY@ob$6gDfPCXNr?x zMoQzu`Qz&E+h0a7yU;ZRlW(1^sbn2ss+>i%_F9ZE0b&nWeY?QLWUckjx`lpLMl#b#UyLa}( zoc8Eeg^r~ZunG5o<#EZMugIbG?`wNtnB-m3PrOw&{9gAu38#CP-gr>-RHZEXFR_*g zK^uq!|8D(P;KznoJ^h|h2$3F?5;12dF-}3be+|b*{+BKzq(>d6JX%)%4`GtJa$s8} zaM=9A$iQX@E`;a$KdP9eEmNj9xp(EX?88_u8>-QJoZqsF0~hVK1iM!=G&k%+*mT%= z7@gWU_HdI$IVy8G+RbwGHo@m)k$=>}ZAKJYY$NO(>?v&8t45irDONItrszsYYGFoD z@(HP5Dr*KWv|>th)D`8G+befh)K)ZB1}QQt@5B&+Hy0DYNQ3`3+Xch8+S0?a9ZT1Y zNc2eo{lZ90BLUw&Q$RT$x^Z7N!Fp(tSd6?JZce8M)n_`fHu)_k6W>DeZstqm%je&{ z>6yFThjSTZoIXe7LWq@vrI2>0%p>C9Kbz{k=XSpyxd0~*J*7WZfeadknoR%UbXJjE zSyBkRME~?J(bC>f_|EZ9EI zVJMq^PtMudUoPs!=B=;H#P__DUe|RK75pPLSMlxw4Ltm})I3&;eR=hO-nq$e{IatBD!= z@yS<%n`PRDx@1kAUs-(qe)uz#z2&zh1bq7?#zN6df#uvo105XmGc<*ltdV#JVr!#t zAq>8jTOa;rt*ECcj=1vIc?f`Q(Nh)|dg+cKHJHLLvHc2rt@n#TZIPuM-Q^0jl2AHR zS0M(qyEIODy7?yB0ZrX>^c2AueZ!f;SNJsltaAopFx-b_0nPv}CJCS#rE)L{6EuWb zhWh2K9{Y|ecpi(|f#Tn9*_AMZ-|>lE0FY{0)dtuk%TS0p8!YDX-7%sKyc{U(DnGuq z{o;BWYDTcyy>BqzKQRL)EE$lsc)?p_LB#vcoD#fw(g*k$;?B9TzeGI)Gqwx}^_#ot zv@ogPc0`&{8=H|YnSbm4DmEB=ISw}2Qv2*mqzISIpPho8>}bGNwTn!4XS9!Nt8lqf z_MQ{j{8n|3ATi@U#p>1KHE()nq)mEY0^8~Qe_8*DB4|3#4bC!aM~aOokVYTH7hiR7 za#~qn?#NZkd?Nm7vyFeV#&7@bzml3H<;P!EM^6t^&v|&zdsxnF+9?xdR3UoN$ekoB z!B+1VS)_Qq5L`hBl&cPzcF{2XKBup^QHwN60@cQ#Zl;W2i`e-bpRxLX1#~Y-$Yig3 zX2WN?rb06Jm$}X`11Y{$eJnIX%UWeN=V48$#}sy^p>%PxBw@APa zyZs3q{c<)VY9dpX*{(F5{72olngB`M)+;(AN}qrYT!q8} zl$ReRXuJIwpp7d%*G4P}!p|;+nk5SA`uqq8E+!gNin&>i_pJh~%?z>} z#FG?vBfCk{)RJ(8zdJQ9rDHpIoX$W)4?yCBu`t)~T{d#6=?^IY7Fh&H{8TUs?XLJ~ z&#N_lS|9gVO7-C36pybsF1g4-j*B3k{1hO>mCADmYa9*Xaka>pFrEK8zkZ_^Pm9?f z-h#?8CEm8D3=c~zWc_u{Ral@*1LVL{fu(1^)qZ@kQ7f_=tl!oY}C(fnTH% z*{Fh2#A%YQ%*>$5HVIT=-?Z+ekbIjPqwNd2NA$)^QW!E2CL&Y90NZ0j6O||e5`7S* z+3fe$y;LL`2dE+*plK|rI3C#%L)|Sl^=uB_rmYarv6IIQkd4|VU-KhG8K8n`k>iY$ zkUieu&F>|Ctr;4^gfdlO3J)3h?qY!}@=T7>j#R(SC0~y=`eQ91s1&PGi%5>Xp0J|8 zENR4sxLGU2A^~>e2rynUf62p>Y)Rir*HYvhEnf_~MW^`pHvMS;^q>U>M&=SXGA)Ty z@_c@^cCWCF07xfB5)RyE!p+o*VV-Q(lY&rbL^Z(89HcS)nxAYDnQ0`ibE*;SUIF>it7U(e@fH{1FSgDwt(%)Z}OHMMyP ziedYk`rz?pAQ(IZWE-Gv@@K2Ab_!6m6#E2%Zo&YX9MDEHF(&G0Z4zZ zlSne!#X-SM?T-af&@)-aX^mn@OG}Kc4Pir&e#&5Y7#3ad>nlJyu+~AB$;uHw)9!a01iH zejn+5vS3F#$p(x$l&7?q{}l#8F!fzEI3(oU10ySK!mCceC;Z)gl-(-Jp_% z?lTV}@BUk@9b|WdBXHp&Xmfwl&}*UE$cyDC(Ol5GfhAQP;|oV8nAMc`$VFg(g6L&misPJwVqD4G5f161dcuKxVT?lu$@<1FnG>*bm&%Ux48VM zt<>WHUI>6D$ebB6GqQd^g4X%oIly1sd41=p>Y<*5O7%YOO+KVp-;oJ^aGSv$tJvt^ z`QwWpY`zP**LJ=LU37&m-$;%W=Shp~KT)O=3yS`v<+~nYwSx%n`L_K;r;CKVB$b`l zm=&GZm?!jxKC^~VgU%I`8ubX{8spp#k3(^r&0k8oe`9;vyR-hlaIwCqwrh9PAw}1D zobkC-{oR6qOjc@LGRYRzhdmrVF_O%`&6>qHV9D=vaIxB3+=Y zGrdVuMZ#G*5;UFHI$hgch3>lw{jm16TVE&oG%C5sOkh54Ym{p9%&W9+oP1v2zUEUY zC(hywdCSwFMm%y*P=m4R^WOi^>FDP|g8U3dZmJ?0=-qx3-Kql1xQy^_v#lpzf$hpeel|TTcCG8}u^mZt(Q?rfIu~woKRs>2#d9 zCqziet0IJ!bkLE8TPreKWw$>Mz_OI%(dcF6pgPC@!w0$vlMht(FBMkuWf+8~iVIUt z<3%XNZxX7U*YVqM9pyASZW0XY3OMLqh!N9vW-M%w^!3#w0F30odZ6vFaG07G7#KSC z>M`|Cn+ zn>IZ`a3Q?YKJUp{s)*9tqSw1ZMfKjp3?i1q^lJHB%We$e?>uM?&Z#k~DV`}gyjywyp{uC|Oi9xpe$Q3N5#o9+ zB~o+up2*z=LdQ4s%CT|zzBi5s#3zKUyOX6aQaCq%q}FaC7-!;tmdVgMCs(8q^^E>_ z$CG9%hU~t#p>!rUPQR~$aG>N@iPukL@Dz>E zy$G+RFouLF?OV8gCH|tpVP*e}PhzwvhIwZo+!jw4!+MC#3IPMJ9#q7C#tSCnG3Wvf zMXbHDqOBLrI>{yiL8~9MPLihNH^8fCW#R`1n9DznfQ%+kI#E*vuzq$d#x8v%1A42P!cmbH7s;{e4c&O_Mse|$vDBAc0 zj3jQ+O;B~l08FKHFfE`5KqKTg8of5C#so_Rjcr^;jl8ixpnHUE5~+(sDSw*(_@r0c zABhU5WOk~X_oT5+;DMd(w}AS*fed~T!;xBNlN9>6wx!-ItFA=Gf>Y2YM0oTbxZ!8d zFe6_F`d?|rymD;P*ycHXinr#@KfNoFRx?IW;kMMQ^C`K>W2o(Y=!eMj(8aIDQKLH1 z;(4ZQ9{3%W7$UF`MKd^Pz#8`>lo_&j)8PpcxQJ{o1^?N4{e-xC=vf7VltM{%TtU>t z7~+*3P@-k*pxYu9w%Pk5c}4ng=UY!4Ez}Kb$c06TMgY_WYI=&&G7}JQob(g4X)Y5H ziM}?oLC-QORHvn$Vs=1+XU{l{Wv`y#YFH}iv^JTRwdzEc#9So!IDQ8cGI%(i6gv;s z{UEWk|K=rSzRXb`jx=_yw*vrlZ|Q+Pa$0N!tC{wP!)brBmbP_0$0+yNi%HJHZ1ZuC z)i1Y^vjd^M=Kv!e{=pfsRD;*n$_^u1d>&lEFMf-OTKbdM5=yxLS>hmfD$0nK|22^`!CamVd8snriTi zJr@HlF6Dzpw`&6csKI(!|1==XR1IFneA*0PKN5T1_>CwpaS0gnY1@C~oq(zjEMsR+ zfFaAA83c*>2FdMq5;O@s#~0Wm7F*s`0QeHJkBJa-Ic{I$Db#pQSAxBJX;utn!@lr} zbSJJYb?;$Qd$K)}hkRksw1+(y#64pufsR8)jAi19q%tIVM&8i1Nypd7#^V{O$$w$u z=MPJ)Px0<)L_dEzHUlS?eX@ARcvN8LrElfb53^?tI=PFLp%2%9Dqiu_y2w z=Vj9^dh@}IrJ;OzOaNGZZmQNgQo$HF3db);%Zb;eco_)bs=%IN3z>NetU}I#nMkk4 zNcM{%L+wk0yg)j&g4gYmYrlUhvl^3fj>&pmkZlm;BDgJCDukEtXc0r6BCw;!V3+3F zm$+2hqxe#ndZj9jD*2%6`cd+Glkrzq*J)1cyZoiua&l*E!(MiSK26M+bUt}vykwI> z$KTmW5+q^hXP|h4w2MCIlo8lAEvEd`@x(3-!TDD(Q-AqU#f<$km|kyW4Y8c6;P)UR zH(c7#G>YdZp9h`S1GwA7^^*yvTi!n&LX-?@op=BaMrhj>bG-viIpt=*q&5Snsm3X~ z5_-*W+ae!JL$yCkM1wCv$bJNCDU|1ww|ZVcM=c=);Pncr-m@mJ)x@;JGA1A_rn(9vR+p;dN5y3QjCr&RHbQd6XU`r3pQr|xu`Yo|ObdwygP$UcT;8|gIpA>T$%?cIL#LGkT3EDg ze)JXuYvso% z%M0nnF~svcOU5IT%16JgF~yzaP6=>$krhwk7zNy z&_{R#1;0^^3s7f1F0miRO2VuNa8Mvk>wh* z&iOA#v9h7Ye&1Oa7Ne@{RwPUvA;)Oyk^@|NLBWoD06LwO6NPNz0G(R0Z{@fQL1mI; zY>kNfIz;Zybz@eaq6Y>7QT8EI=DDusG9pJZ9UK2IIcV+Ea zw2FKad5aN9kMXcaS*nkH(^W6H>(xbmZlJ(*$=3|71QyC{$_@1Kc7^^7k{)+kF`NvA zon4!>fHjk@=oC9noN(2YO1GnvN%7l$pfk3SXr!A(Qi;-!<+#pLgm~#?@6_&hMiS89;JZ_?u?q@Bm=W-g zX$zRBxrCvzPnwSR*Klz4v(fFie9Xy@61%8bYSb;UoZVZP)c~VHXtt{aM3oFDpR6-a zR|QoNK5?%jGCyhW#a;gpN{`*uMzg(u+Q>MTrTm7VkYZ9)mi99$E`y38Tqr_vJ=S6u zMsqe7iM2C8CZcoub0uN_+_&L3Ry z`uzT7xVvREF)KvFPF9(bUS#;pkJfjPMfxD5<++c;wIJz=cGr|gpsK9{O1=+Zvpk^Y zi+CkK!ud0%$Xs!tLbK(XYBsY7CvFx;?Y2T1>yTI6xg3(rE)IB6Xsd4yuqvmh|}4%I96M*2VvbDSAeD59t1Fxw3c_ua%DvQ$ju6 zK6fpCM-@gNBHZZ9?&KF53?1!wlCQ*95*O&}tgGeS(A{sKWE>=Iu0&WI*T!D}>|iDK z1yqZRW++gGW1>4RN=>%POTHfI*~9vL5N5Ri>|Q_>NB~d5BzTn>%Ml5Bt9D6d2k&2< z)P4insl6eiBc=kijT~_*W*4{GDL5`;IM38T)ZXsr*?FzcQ*KJWaf;}z#E3fmM?f&W))pEimn=7n#h#pBP?=qAwV2x+`@b$OPZItW}TnWJ-#hTAQui_<9mMD4N zJlspp)HA{w&Q0dNu0|)S3cH8O-l{Hw#fb2PL|mKqClU2BE%K%?1A^5&&M~wwYc|Sk zIEgX)ktU`{;k4fx&jLzlIQ18FF3F8JQAou6(CfQILLrV%)mZ2;LCqDlOU-vYkx2%< zFP$mfKF8PasSt3CZ(9_dY28uFEG{eX5KIPE=mIo%dEJjKxm4m#0kKmu?Ch91sWJb1BB z&O^{xY?l8y%?Nm-A-dG&*GPcXJ?F~4cLkz{OeWMF>F9K#al*7H9BZD@8eRX9IB8< zO^Uf6zv4z+na0ExqN*5*v9$I6rr^<3@y0eki|pYa?M<;t{JLY zk`E0Od_f;)x_#TijJ|ieEmH<#k-VxIsz@hVJb&t=g(IQOfG@UN{GO2F2z2}DHP5`g z=+^b5nQ%<4spgJlkl1TicWitdj?R>6(ENn`1tVPB;yh>kG#;&cW{r1L;}M7Mk;h6hemYlV1=(f6ay3k31avl|_rNr#0Bd*xL5x}d!G65j!} zsobD8k?V!hsrn~yJf}c>JtRl8cXkh@u^G5pRJ*qVsi`HjTN%5#i0T3IyGUe z`t|k_2-?`e+g=M5wC{4J8&SNi`+=HsHk%)c4kF90#PEwW>#~|zN52hiAo9Y#UW7`t zszH6UL74tHay~wQQj|;WfDwEl$6=~@`RF9aF z_mC&!>w*d2!1Gqvin8&%(a!?uSKV0ELqS2i&EL$KbM zcis?;U-h9tnf@XCNZPi5Tsc|@(j@#wx6zgJ?NnXZmq%J!k3=}lj=z-R5*qffgkbK4 zyusVYU5Z`lDN1-5<0Y{1a_UW{=IuQLCGOC+HVgz~=g3FDMo&w{+zSzcp@BIpMjwX7 zb`lK*K^732CM<4aK)2sNp9$@HkLKTgF>&>nMxuV)t@!&-T7T`i!+ct5fJ#T^c|Nlc zK50|4?vqrrskR@yqYvcny!fMrx2_S2%ven?8KWY7ZP#K_aR#$YZ>(a>&35yck9dC##H1s{TD z))+jywg)mIMdXi^yI=84-Na6AG&8heFgz5QAz)j4QnkpC`F zULf@?5x4pnH8DkJwwSx1cfUpzyH$ltI0l!Y|JQd9gfkOerki~81GlJ(HCxHyMXis! z(W2)sBBkyv_vK(nY|5N=H1d>by^e{C3F7BXtxv}?4iEmo=tIR<+0YWSJ`zTco#goo z{SUPy?y3=a2%k~rieC+kx?S`^B)=PHob{1mMw6-S2Hv9YM#z3uT<`AAp=1IzaDw5t zj2v+c(UWog7l5NpkPlqV5(Kq;SG&5;$0y{<_qXnQ2WHm!MZvn6N!`H7yR|r@y!@i$X93uRblRhyS^4xryt*rV&kLv7)w6Al@t^{ew!0FN%>BG8 zozIn;jGO(iVt?*q8#6*@z7)t1l)DRJoy>0DaN3eh2LW37ViGq!R<_@+URH+4!6rP3`vRfgE55J)Hloz(dmN4=bz?7rv* zqbTK`k+mBrEe3&E2xpF|;kmDYDpP$-GTz$4L z@?#cjIJuI_xo=5atPb}uDt*6=uf%7vh3Acc>pImdz&iSP@0*anSb_1 z?M>3G^6+?^sKGn7M|{ILlk_(JNf6o!P3Oi|k{3Q`69q)av`$-LE3M%leDmbOAZY&6 zs&Y?3bqoXFyvS8GrLDx_kq$%$qJ_eV)~VcdF{t(073=aMNeo1Dr!?CI9&eDcOU?G? z^g@tPatmEe(P5$EWRUydAU#A_dYVw8`e)~+2<$ANt?r;Og(yJ~ai&2uu{*~`N;X}- zMu2++kOvQuotfYx!!_!XjC!UMJ)lG4o!OP}spx?VMRFrjjarAhNW_&ZNmS>w=1Z7& zU^Tue$4@uH2fMNdIxXe zZYhN6-ZV?+msGm|KnQFH^kVs7Mo4^^4-8XX3Ap5KvcmB-J~CK#O(6t~uRyh(8Ge7) zMAqWo;aBGcSbW>KYSo8wYHAN`7Pk^kgMg*W@|ss{(3zGAj$E(9j!04SfnBdc>T29X zD;f*a`(GS&3>qX2w8fO=HHgnfF?k$w~d4QT5@Pi$=`b zJx_Y<0@PM-pB|v6$uNi(re%s7D9Y=8?2+}GyKji@yM6n`sK7jBT#(VsMV8I^>5hWGTi23}ZF~%^4{-`Cmd&3T%<2Tr{-|cV4j;vfgPql!77^<|FcotvGJ`tFi zKK1;d+5Y%3r?00yC;jBNf}ew)uh#SItuFG7AOW(oVP>FBkCtnNUV-_1W{38&{!KF0 z*c)VK<%$&>gk_IHMr%yUuQl>0*VSg3W?-%=#sonpH?cR$(ubKuch1V5RBGtV+4;1% z_W)Kqo%%=^)a&t zr+s(prnfAqy$D-{B6O){4Wg{yM0zGiLX0a=*r}U}$jahc38HK#oR;(N>HuI1hYA{H zVCm^Nb^O{JwK=SHR0MU$tze@(VYKy#>urs9F`9{%-Zi62d>j;55eg$*q^vkHAlT51 zxMj3~X+CejK6uapKqAC`4OAxl=fd&?KdqKqE?#tD<$mt#jVAMgzNK)L2^92ae34nv z$h4an|4~P_Sr6lhdQEB2Lt)<9at06Us@=i{HOP(V8l#u4QS7{fxE7Q+P90t#Q(_!= zWCibi&}7_R({@n{#@Dv9S$+HT6y!lgROGL{P`Elg@(3hG?`(s7AycHtjc{tltRu`MLr&l6w$OM(=17s4rh5wNW@3rq+ zu?;#*&IMz@FTa=>Z5kI9+wTTtB2XrkU~P43H1`6>p_##W_HyR?G+);ScJ-9IhJ4b- z@${)0s7CAz?toL&h9KdcslRXh!9Du(^9m!$2}UkkUQslO_OHSuGvf?1&Gq*JeQb)p zNH*0y^fO_tIFk@fzj_=I)sYnGrDSTupwa(iukx8b_Cn@Lb*$c%h!fh1FYi6cc#R!i zvbDz-=(#7P0%%&68_fuqsK&skmC-^#B7o|3S?QBFgshhsGU?9^oe;Kv_C}5Ddbvg* z_rmKVQuH|J7Ibe zQ3uIFLVS5-8!egjQxN@xm9L&xL|n6NHA%aUb2v+cW$AvHa4+&<9=(I7qec`v;?&S| zK4&jYjO^R2>ji)ab%SmwOh1VR8oiw-1WiC=lRyq18=mY0G-&XwT?0t)X_U)EpPz}W z?6{$gAaP<)1)`|0)4}JRVnh+o7`rt6Q6$#jw>SbGN{Ow6({&8idMw|B#EaNsTA()! zx9^)~V#rgET5c`qQ>^gnAAmSr2>VSqs10w9Y~DV5b-MsJGDpJu>K^*MFVSZ)c7OPc z218=W&9kGxGwi8V-X4v~P1t)Nr6oO+9CDrwn`%w5ReFWd1~ED4PUya9wFE(8fpr(G z`N58d&3>Mg0+vxfO<2X9ChIgGTvRs$V^TAaJE^s%8tr6p!=~oqBJbkDo7>%rmRLmu zZNi$Tm#%W!hxppcW0f~3*bjc{ZOV}PwS30je|=sB*V=CIsx({F(|`P>q_SyZxAI4Q zndRB8Nq59@i_X!V(VHLAzOhd-HWv6xOzW&n8+>jt4PwK8iD6DWE}{P7#e=Q9Mr$7o z{fEPez_6Wx1#g73eAiL6ZbvP{TL)Fiu)s=1gs;z!$$DWn_Fn0ZaK~xR+71=7Ul{BWbqy(87ZxX5s;eSKiyv zs#uSJrnJX5{c@UomYMXoI)z=U^PGm0-Flh7zTRyUTAWT;&Cpdf+Shy__H8J}?Gx)Y zjONFO2W*r9n^Z?OOE=(7B3&s_LGf=n9~t_*)*B3tT4H`!E9eUFz}0DU&tG_!?=OEN zi^QAdZP^>T`wjHV>Un@1juDjdxD)5((ChknFFIGnkbo(@}O6#v*S=Kg+MThHhn7 z881Vavr?|6~{}4r{G9&T+TG^ZkY`XmlV8UrK<8!|-#HDl z=!nG@lArOO@=Txg)cWZ(D9v&o`U_~o0YR%6ryh76zxr6@?gq*vpZvp*6*bT$+JW~u z_X7(GNhK-+ZP`v}^)=q91%95`P+EIQ&!w(FbriqRpJvxmZb)qBY+5MUa?{$j+&>y7 zD_nT}sDk`7!0g9)Ra~ce5u%|YEU<94S*rWTW*LJ=!NucqQ4fK=g5JAASsau#MLG7! z6V(L3f*57I?;Q z8xJeSYIA2J<_COrB%90Z@dggxom7wknw-9?mv@n~K{UT%jc4&Fv*;>_{p~vEVHJ z%5|Y5Im}w2aiokkDX8aTxr$V3*&p>hIV10>6Vbu;cr?ZK`rCM<{q3S2 zf<(ojABoPL#pxHG4^55vtAF+fspX{H;ACev(VA{I+Bi9>749b3bi$kYuC#k^>77xM z)qH90Fm{dW$8g#gl>rv!G)@54lN4K4dGDo?*_7Ajw9!^0zla#8;`yj85?mGq659Mtl0@!wu&9$(LBU`Va-ZTIO1fMJi9*S>h+KD8I15Mjpc zSiqU3*#@FFTpWq%l#l0-kH8&crhE4$N#*|#b=FZ)z5Ull99l{Qq)S0cq`Q%lHt3S> z9=fHZMY=`0yHg~kq=xPW>8|%4{XXw+Ef@dE1n1o66MJ8K-+BPu^WgjY7r0@IX3R_% zkQfz!OCt%VC*_A)=8+SGUDCtm6nO!55$1vFzW4Ba6SvCFm9slI-D~GDXkUrwzd8X zWs^LhL7McH*<7kyi5N8iy-^gNPR02XXmxvBVvR9};_c1sLG>-`KT$0X7`!c|ViO=Z z3NwA)O?l{E8)NS>=WlG~dC4gF`G(uG#nOGv0W*?n?}q&9}$$qko`f-(m^(6seU{`$bh*PO0n;vg@t1qOCi3p>YP&__dZoRY`%K z@qU|OhS}@>#|TOT#IN;7P1rwann(j~S<)P*23eLA7KErvV))mDD*20*1vQ#u?}Y+- zRSjL`*Cn1sIZQVWjZKalA1{r65vyNxf3R9Mt<$D$s@I`ysTU;&X$w1{k1kq??T@nY zIsWvW+t^Gft$v3$O5xkRyRID1AIOW7mcEOehc(fdchVu%$Kei1+ofj%W>DtKvKjXm zxVY^?Vge|RX?^l(2zfDh+h2q0cRna_7!zrpEIvB3P8_H455@Yh5D{U;pm zH}c&0owavtGb!IrMlgS_8|XupH$OjtkdNmG@BLV%c~s+E<*iEiY_N$qC&odLo_Gd6vfhWcc^>752(Uezm5Z${^9;7KQfiUV^^b<8^GCpG+v9_WWNYD zR#h@)^G)>^>5G2=nkes)qTlP53WR-LPap>tcbcxXVYy3%iXjC&slQkb6*uX+q2c}5 z4iEBvG%jNZ+5g-OXm&ZWV+%c%rSZF0Mg7a7Q&NIt^i#crmY{8WtDf@hA_N!KAa-{8 zuhB+ay%-g^*<%=)of$WFD&6=s=w^J=0IT{lRcbiXpEer)0iWKoIxU^%3ecE>&p$jdWEGz*Em&*6Cfhrp zQ|3wisTe1+*iYyquH}klt$*O#O#mr+GVy5eF$lU$YFm2vQTH^;GL?uc_ywAWA{YO^ zd$Y{_&>Zug)QXhK8fP9j4T9HScqKoqF*p2a$l4jM4in&^*u8*D?(|kD_Xu};Hd{x~ z-Rpr&E~hVqF6{+0Uh>3O8|Bb@;mP)cV+vs4*le(zC`w%ayx4T-n(JQ-f<2`I)<4TE z+B||riOu#MEd8+hN`>~F^8reY-^gXe;yp*F@=W`t=lD671h{(#zp4z7^mG&k^{rEE ze74v_8ow<;-|ir{trDL6`Wl9tm*v+&Sw_Wxxx=v5koxjxWWh>tj48j=&`xaQa>CV9 z5{d9Q$gsj!onTVgCh%;u{95q7P*!`P1dvqSOC=mG+Wo~rVul<{34~GhlyQ(t_@&~< z<%ht@F3_P7(+(lEm~yPd%_jz-V^ZK@6v3oc*0zbaNjZxnp^g4e#d3vf8>Zvji8hTa z-57lReeXR=FPOvk$Cnnr;vcGN5p&WS{XNw<*Y?5p)9yoM5(z5^_nT`cqmG2ru3ls; zE>4p8VKyn+=E~O!O?hFUT}zm-gKTuxlaVRLrGede#Qm2)6?mY|#7yQ>xjj}adI+M# z+!U|=%vd+dOGc72KZO&)UqFMN%;t#_ZRdPmye{WfJfO+4S!h9|O8}fA8MrBj_k7j? zkL}&;_sxmwLJ_zo3@8Z0t1KoJZbCoz?11e%?6Pc)qtkd9d1N?K97*vE`{^r@12QoG z9wBW=;xO~0rUA@-9H#9h+Frozl%I#oIYBl62uN!G_?+O8 z-*fF@9~-b-%!sqBPJTE%kI^KJ$o=a-LnrlK>N)Hpu|c)W0+FDURiW6suVB)7k37*t zNxwWw4e@e#3=_xsn)?O5dmC@%?*}+zdRXi}aIoQfNP(mp$sT3WN8dv3yPiYCJ~g8S zu~;zrQ9!KldT}De;6VZq#5DPc03eMQe6RPWoz~A2LV`b8dmp$54#~*Or|o{0y485{ zV%RQ-M@beXxI8@uSYT;yWQxm$gBpB)Z`ClR0h`JNG8w)%`~I(uXDI`%ge_sO>OmeM z@v4Q^fi6MW5VFFJOD;|6k7jHBOz9nJ z9s~E=(;(WCpv%!(^F&757Bf#HBiGD(#KiON51>7*0_|yyqi0c^z=1l=DBNjyN*S86^BYWy37RX?Y#g3%b*xexD1ptIA&g8qFfq^l3q5k&zJpN~BGg*L~ zKM&T{+4ZZ4{0jPiha43yEH`Sfe{?+tfx!1yjHcSB-|s1?g03>5(+h(O1PRfE z!VM)`cxzsEjsg9g-)OTYxMNp%^!T0J#S!K@D-Zw|&Z&~|(YCm~Tk#VDtpjvarbkPG zKHkcxiXY~{klr*cOHcm>NKn3jaSTi#|BrKxuR-|2RtFR)w(#NW=e1y(h*#=$yg|%I zxH%-$f6+_(Xgc)wepX7#I+v6W?w{XV*q6R4wu_S{$o3~fe+0i z>vf5=O~6in++>b^X`AN?D2ot9>}8FPQCpX7Oe37xjOqvuY4ICLfj+w|NGWakDR9=k z1nyC>_v|^qv!q$Z6S9Laqq@S!8qn^4KaFn8`geEw{c+pEo5>NQj11<*D@zpBW71o9 zbkW(daSpLnQ5>n{Vi#iV{*(->GNUoIsf%T`^1Yfn4wfg*gJP6O|CjwRc*=EJ!})RnDe$u^+^WniH^=5Qk8$FMPWvy z8WI+ltsIa<(z%>IPhnqt3KsDyh8Uy{ddZ7sb}^Yjpx76DU6TH;GUTyUdxlc4cz<`bYGcQaVwVavPQm66w@%q<@8iKo=3$n)Y z8AMBWSfOp(;l4`NxJlYYLb<(+qV?nVDFmY*BW2#F>b)=N)>1ynTrXM1y)_ABGcLn+@|UQ01; zUZhZjmlRe{Hc5Hprzb_19uUuNx&vz_l7g^HaHqGy?rMwz8+QCfx8(}JZ`Q_y^`7x7 zB!xl979pP(R@G=k<1em1C%ct7lo9v}pr#19pKSWR_=i`blt**n)3QP~FyS$lZy&G5 zl(IsdEaK)l`dRqKXfRAZr$}d%jqT4V=W=X4q6vwd=glT3+jhir`=P1IwfV~R9#4~@ zSk*sTnWtJ{dWEjiD1(;x%Gh6nfEsk@H zn?cBW9F6N$JbWtbCA@CtgByD|LjZmF$2|kJRr#0NGhv~=g6!XEv4jK5wN*%tFp&>uEzGB#QgjMg%zriFO{*Ku86N0)AfcufNF1+b z=*O#S0rE{MTpy|n+ZQpJdWAAs+7&VhTzz=ke8etjc&}q6H|q_%tE}aD|LwIl3(0MM zhH&sERo|2K>+r&gvtgio&h5sI>DlCOeYpr1nq%N zkVELe@zB8f8fRy<|KuY*ZmQX*o${SMBz$*5hY&8PUMMi2#z;TZ7M zq4V-&V8dwsYG(gjotD#3+Y15-!O7s4W84K%hA9cKuUX0nBS~P^s6zEe*wEiC3D(xV zsWDZ1F0WTBsU>wrn`OLrC_^j0%NG3l?e0zRu|ygv7co@2?WHozm$HJ?Okj=2eC)-F zQsh;Szn%gRE3xsv?>Kv%7VB75t#{lp*m*B{zmEg^cA@FFgV3lu&5Mk9C)~glufL31 zmTQRX^D=&Tf>pYnHstAGNZHi@8RvH2QG2>sa3o0uog9P9rGZKEk@igA7mM`RZ0+>d z(O-pH(k3bR*m&JUv@nBICR3<1b;)hmWJ%vDibs3rzIR=3xl%WA z&d@D6i|9pzrtg-jKJhL+pxnK{L;W<=JpqJ9f0+s75H01o@W^dXo6e+HxT<_wZ^f;j zI_8~_I|iQ+k4d{>TAIpswX}4=uzdBB8wO-$=8TQLD~$fOzgj~vZ>maxzBV#*y1WB7 zxXfr*iqz2QttLq}bmeiF3qN@nerQe>{;XvyczgLxVhK3wq{#|JOyg z-+dF#)rkKGWAR)Uu!NCX-4T5)=P>vYO9{ICi2=ae3Yx`Zuyt|$YLFhFoTEh2P|MiR zIu(I@_K=-vn0)a;I9(Unn52f!k5(hoYffyuM%VP^zAH$vowcfilkK^cXhn>4a44MWsd4R-8#Y!~VQdqgI-2 z*-N1Fv1j-hSwdqSw-PeJzB24)YJ!Z@{h-n7SDK(EhV|I{X7_L*~D6O!Nh^W{2uf_7olQymJ}gKJO>Y@ z_|HqsEw7z9KSLd8$7CcR0=soLR3&7y&pH((>kjeWq}vAiy?xXbR1?RXCeQ`Dz5QWF z`|*Vz-O8?W=o|v@Y6O*$R9<-56~p6W{c^_-oApv$9+PqlmXr7iq8w3QoBYL}eUU+E zm>uw&Tg=;A{4_&CyMPaa7%7^+2saU=Gg7qF+eI*7%wzV!QCYvZQdtXx+Am^~y_-gZ zPVi?q^XHE>7Vj>AIr{e02U)U0?yj*rpE(~coD=P(hS4>jjRv$XKY`$6i2Fmn2a4%4 zt@Xo0`#i$la93nq@0dur15rSAahYCejMwfH$o3~@`cjne|VBzHmoZJvv3 zM6bhmgpXx1U-$R$JM48L%?C9IyMcP->-&_&Dn+iIQ*5qj~>P5do#gjAzX*jY$twX*c13iAL(FFu3x3$enG}%3O?1SyRc9k zZ2Wc|5n?_JtmrcV-hhinfV`eI{8ro2wF*7Y$g1d5Y+AwvKBf>#g=9yR=(}h7J&=hKs z3YHdbTyB)6&cEb#)A>$S;|=8V>KfSJ!sT=?1)o_k)6_0R0&&v<{YV#is6rsKZ;$^&x+oY}JAfOnyF&#uC60S}}U}_kWZrptH3*{5RLY zhhtO6C!aSge*f6L>);PX{3uYaoOz-g4ymx(7EqtHDpS=Y4Aa7Ap#m$)vkL1@LUV!7 zxXJs^wWj!tS}eg3Jb#$8t{-zS8=B)~*gb@?Dy*F$=KM3_APrqy=t=}tR3H_iGpJ_S zF;LkQL83U_(c?c7H(8Sx`I;?-q%_fwM#`((=gb9>%rmE9kyFKXyPb#C`{_sm|8JP= zV+HYGaq4h`Rs8RZA>1CVm-?agON~}QKA2D$?tN3&9*}!!%g!vk(A>(>^_N1U49Qp# zzar)G*@DGJHD@9}+)l6*9P>Ifrk|{cCdMyGqRxy{S>KdY$<#!Ng{rhzTxV3p+E3QJ zHKQ>qwPJi8Sx_nnnOW2#E{0`=FVdgfM&!|fmaA}WUMf@$Le=@~_bN_lGnfm0p^#8R z@TUp)mI`k^jj>FvuRYEpO&RT_?MN`d-`zx{W0-vvRvlhUhzj|&!xRaUu6>WI1|kV) zW2mf4fXR5t&sEQtXZq5i-@h1+onS^nyn6Vewy(Xyv7)-n6o_q++3k78ILv-`^1P=q z0I+6#Z{2o;%O{Ve6%ox@@|c$>_@VolNe@)&yVWb!Hh8Jsj?ocQvC+n*#29T71yrGT zT#CelPpL6;u;a8x*Ap3DNJ{LRY~7P|3aERppoZ5S?b~1&>Q=LIMBk3w?J98RL@x~Y zmc&++yX-=4=DKa>Z;H(H;y>)lIe?KPniu=Zz9Ulx%ZMplg=7-o3({GBK6FQwe0eo)I#T4 zOMb!7tt=pakefPF?dme?Zq^3s!dh1KST!F(A z#vK1v2iuzZosz~V4nL9^wJ0t$Fj5&nmC)q29V_WU-#$B{<78v^3&$;fd8f!zqVWi) z`i*RrDP24a==a#YNYTau*Js?*b#oH+C3~by=|nQ~+_cj0{ck$~qHYBUsn0(jf{JFAx}MfJ{EzsB18Un{rMX$-{w zesT3yRH&9&v-5wm05AZ@r9Qw@YlIdraw7D=)6UkwG$a;_j4y$1`e2Mx$JvJsHN^(5 zTafrKWd}(?Z~rWCA}af#FfPyBSAl|Pj;9WlM9(b|T0Oy`OL~m{rfD6#ylVyKQQ-zG z6dA^gLbV%SK+~A~BE^d9>4wf~LB`v+-%zSK9b?gf_k$yd0{$$Lwm@|G$&fM>&!YR% zMeybBa_GwjX`JQQLKr3@-lr@~ox?yt6#Siv@Q(kPJ9)`h{*vfjrN;L4nc;0uO~Ol* zQ{FdREf)cLxyj={gyOYZ2V#DAbC82E4}4KuGji=q51hEi@DIz z$L$Hcm0iuR+y!Xg?9Z6?0DRIvG_FVzUJtntnRSKw_t%feha=_<{m!ehBq_o;x%AFz`%E+p*w6&?k67#c8am8ktq-x|6vpB~l97hK6R!K$#N>gdFBhGaQ1BC2^VoE(T z$*=q}XeOObW=n`am!L)OZzpI8s%nU=QDS^W(4ja0v@bMkg2m1f9R~~orl`x~jbsZ{ zS6JW`&^5&Yoivrqzf13h9wL?_zhevf@`dJJfwdGV;!MVpW^G@zgKiYfdPLO2hIA`Q z)ZF9>W|Gf^Tt2ul$yN?^(?OwZw=FU245={9F-OW`u?16h?{20IhQN5D0VkzyMaxX5V(hbS$Mvr2a} z6-gt~OCUfICOFCp!wb&>=}NX;RikRRa$8R)V!PxMNq#y1((o@l^Uw0b8RWt*wP0aH z_NFbPiE4#*656*p?Lls51Ym?%SN5c${J~kC2qF1dHCRWK5fgTLxu)dXdPR9sGLIfK zv0;}ER`SnesPa4^_r5s{R{5tXlBTpql=Lo43(|3ZU)m^{%g=U^BfOfQe8;gACFI>V z+~VEaw56Hdj%ze7LjPnpgopm7 zM1O2co@pl4fQC9d((DDw`A!~Do__-|rdQ3)D=As>ais(Ee7z4ZMC4J~WG%>!8&LKL z71Jy-rlxg8u7zt_b{De3bNnd`IHu!zj=Q5@didgXgP0ep4UI4Q|)E_ys2G%90 z7_QD6CIU*|Rj@1l3iKJhaAe3|BAn@nSV{dlF&q@;0nQHlr2xXfYJI=I*tv{Xs4iDp z<4rI50@A&&SsaXJ#-`Tk9R)(H-}I9^1cyta`QN^dqtqnqfL=hGFKwd8@aVjsdV4yPINWu9H-B>??4jshhPY7f9uFoA~aD+oK1`H$}K8+d2y0VHJ= ztQz9s6)pfHb&#;VMl_QYd4EYxGw~j|n!V!?CT`v`1D)&IlG@P=0mDy~CX=EqxO+q6)!2B7(c)m>C%`33jiZN| z11MyE2LM0B-3rF$`{}_YQz-x4%`OnfW`v|UyiMmJa*^r6D9;pb&rsK&UsWGEyfG@E)-iO`*5rD4)Jik7${C)vn zDleMNJ$Q&L4OB+ilHtVlRff3mFXUMO0{EAqZ$EPkl@qtIk}=jkwECx>*jxWJhhaF~6jTzm!Y)n!VbIm*(;KYXqradH*t z3gZD)P`1{3?w5tyo3CY>W8HR$T+e;QX!Z6`H|?dY9&Flm-uj(B5|ED&@OGWTBa!tV z;eHdNJ|vS3HcVic^z^#DFpJCYtoF9HUd8Gn{I}i}4(~xAG>7yyL-?)Y4kaePxO_;4 z=K~TN%~vlcPp=pawe)i%Cl!LbCDBNvh45U4*TIPvpYC-fbKqunb2en6YWWxUd-z!I z`q6Ve$7Ti>?$5I~js~u0jd-hxA>I9DXx%c`gX7=Zqm8mfD=QxVzMWRkQoe4-EoJH6 zbzJFqIa~pTLcKQ&wc8AVg-%+$dlh|b`oECzx&t|LwKPNtE}^Z5SGMAw_0vHlyBPX` zUYIEa|6Qg}c>i8VrL*^+VyC^@M;gt?T$RInm+6GRBoYeKd+V|(9lU!g8?|2`8pLCG z`8J(0%B}Pqzv-&|neFh;+yc+(WTXOl7Ek&a+9CgN`t`+NyZVVpbzk=6`*oc;YwZj48ZKeI0GtJ6*oW7qvcXdwWkMC>omTgS=XY9HsS&@m>pEfMgM>^W}b!M7&?8ontA+!|hKByUEtXp-+boz%;kI|I> zOULA((Mz$0Obd7{a^+S{W9p#UYmH>1zHOW>59+JY-RPkRI{WI)Sp+>+N1XYl)sLL! znF*ErX-#Ih5~|xXOLHaNyN>z&Cw7@Us4QTKUdhq&NNw;*m$2FZO?8r?l*v%;OSTRNM%HP0zsBDZIu<7OC&uy!#$ zn@yK7`zIZLVwvm0!Z$O81v31xJL!2Wa}=d?Km=5{wyApJ6~>sWts?{4Yxy!E`)T}n zg|8S(wlsNoFQv^2^+KG5_QL*FOYk?~`-rkk5&2i9w0yf0Y5D$>pv=v>B%vY2)Je3qb?e<)1w zE~pSZ|3FT?da#s8+TOEX7Oc!MshSt0J^*_O5^%O+FK1}&J;YQpOcM)gRu;F4Af~bY z;{Tpu6O;9AUaT!vaMs2r%cr~(PukaCI9UqX+3M^KjWpn>uDsmC{1N=WKdm&e?=wfs zle%pO!Uk=p`jHLV2u_I9gkr*TP47fzdF7^PM=a(lKRhV>*3o>As$1lgcC;sbF`+!n%1X^70gJ2_-iF+*jV5wEWt=T-W)A zz_V~Rc3LtF%g4c4XMy=W|I2QR64Ai%5psSPPs7omwfEo?j?`(x$Z5ej3AwUP6uHMJ zg>if`)+8xYNgRz0jJeYAE{xfa%cc3XB!OhglcBcZ89BBkfywd+BHs3^jD#Jp7Z)Led z)g^q1bC1~Dls_;dvI_Z%HL?2I=}Uza1vO*(twb3+W*T~--OiNCMz*FrFIGRYH?=p} z#GAV(hGsYv=TWebaTqs4 zBL86%z)v$N5vS|d8hoR| zZZ%%=1Lkcg%-@08}Mv1 z`;fShjXydz@KUbz*67~F`P=YJJ}a9U=-M|?(N13JiE)C)(-*%5_WdPn zJ#>)&@1t!=v=w1PPI;FZhIet~9xhQ0Fv>3IhevZ9Ii{=sZgFtpt#pu&k=z;5Rj1W$ zYLH87c8U;i-qE@|s>Wx#KWENq5*=kTu1#)`f75?4QaF}lw|2sa{dM%^f^G{@rQ{CJ zGCBbZM*%D8_%aR|I%15!Lqe5m4?rb~U_lc8HkDg&>iX7^JW}^o-gD%`rVMSnaOWzL zlQ^jO*7WUAY(+Q6m)4hVT3m7oMn@L&ZV~VPj3^U05QyyMOKPNqeo2p}PheD!y4b=V{a4TWKz;}NjI0eGx*W-# z*6VgB(^V?vT)Lp&ZcI=1Eq4n)c}thDk8Bkr@8)kgl@a-~=WTl5ktl<|a5TQZa16e< z5a-9ifUBC~vz@w#BBHZwxGFtiQWLpfWo%wL%O+0zf9FI87&S&Xzn>&&Y!7tXL31r* zB^{W#7-jO!k}tm7=sD9Z%L=zhqfK}1jnNoo#Zzd4+5ysBpttbx*CY*^5Sh&s;AJ1<)7 z|H?hvZNXEaGZKP)>ruj_sbGhN;i~# z7_M|jzH|Gyc%}0n%(TbQeqU}!5q$OIUuu}m6K)G{_VDGWu^G&5bn*ub|8BbSWqnov zBfSjbcqx)q#=xPZ{Ss%>37)~xNeBAd;Xv8!80Ioruh z)>>dL7Jid?!Fh)G_sI-Nw#^-yY@Nyqwx$I{qU$SJG*e;Bq`24#)eo$taUDC^4FVs; zx49UZOX?MugF{JPFqCxtLi42BdlZTKzk3~kIL>-M$vnyCt!o??aL}@=csG{kKqfUA zOKQi7jm05HjZ)3nLK9c(LkZ#SWsNTnf@WesktHv5eKj%cM$G?4|9_J~)@1#^o@P8ge4^1_2` zc131i$DP6}x=E>%y^_q1!Uk36BCByGtDHP874j%f_CcJ4U6~GIqu3sDOsQFs$?k#BKNote!=eqV+a?5KaoB1&2qqV~RwR+9mnIeX?S z5)G}BK^*$-yajQj>UEL6R#*#O%s(=wc=RffebD=z_=R+%O5?q&O7&zt+j$b5;mW6} zqA}KSIqQ6we$*8D{52atM$gh9CZqhtK<1Pqg6iFz2Vm;R#Rnw*&%L zzIyTo_ThtU*W2BOKRR2-yF|#i)%r0U%_Pc@anlOvs|io?teV``gC7-ZWhG|)5;5fz_3gj+iGcQ<>w#iqW0xc<%XQPxUc1Ty7;n>&`{F!P@`J<5s`ecUaNMs{@ zPYv6{_Kr?>7$LP5q|9W(e4CDVPPrtGHdYvdt>M(ke{20`QA&urVG#5rP_CdSxuk43 zl)J3vT^fr`y1aIGEs@(liTcHJu5TdFVbM6am%5rUzp+U@zEa`U!4!jCy8B~(o6ac0 z`UN|S>u(EealCJy-{wR;hvGC?&Nykb?dNdR-ENhDbjKY8i}*9`2+7sRC6R3R+c`1e zScSF>s8zA7WEZ>U;Qfzy4<2=&eMUBTVI(Dr`}_sR%?;K)T(8Vx_Iqk{1xyy)vaDnM zZ3Jgt4O9PJU~gSj%DG*aI*3_~P;`#V8rPD1V!#^A*M~05Uz*xH{Uq?6<-xyHrO%`f z6rK6!H9o~;bNOT~yP36?OkOnD7#nR^Ov6x!`50Wx$;>)&#hT`9v_>g@e<;h+NmaG^ zs=`d%)0Zn86D62=3**}yI?3L7%7wi}eU4<;@!$O%)dkUNgl14VHWoI_2L_AR(wt!E zu$)fiW&1UmwDOA%?rM#qLR<5_C3ww-i;Bi28oJ^mTOea z=`K+Uqh)R~ZFcpqN_oeS*LwaJ-FkeBnRz&i0{`IbYzc5T^hrObqRS5_jqb=fD+w*% zof<;IeCG{Ud!>Daqx1KXy~rz;S@@@;7jt)RPZC`ZV`z(9j;K_0UJnTQDu?`Hlj8n6 zc(?=w*?{n`*a6|eSWFt>_-xQy6bt_vVaQ|V$?EdYEL4_)to%;!s#37^NLr*rgMf7d z6UaWm*l`6mKl>i4pr_>vCTal!&;GPrTaOL_k3XqHp+uVSdQ8Q?=ns$|^~o8j8FU`? zCI%u)p)Pi%CGq}s+g{J!aTssk9CvnCtY0cBzle2rRO}+jE?&!B8U!Je}Z2)!b2M5<^c&)8p4!Md}{hHm?&JT3C{UlH|1ybTTVu62glzH-PnS-D`TlHHFr;Q+AN18jx#oj)ZY+dPDf!WDxsD}0Pk7n4+B5Fn)E|2u1#8ULU)t>hE*$*U~y?lpN?!2; zegv)uM_R=}7vJcFqg+!3rF8kD$=+`C?1wk>=j2%B?5_ApVn0@1~SNq%wPCVEKi z@cZRd3s9ovwhyLA+uRn_%60e27bcUMblRaquQ=sGAB#^bE z&FZGRhfZgTq9^}Dx$ztH-T|WWMtn?^yt8@-cY6N4U6uA!46&>~_m%8Gw5QQ6Mtbi} zVPJ69&hrnW!RxB|cjHJ_rjZ7C>SGQW&jRvd2 zm(9~9ce3UDOD~M$Y>8!I9vN36dYL9Uc8b-3K)jg*M!7hg7c1(?1O&SS^Phmph-O4CiXu z<;k%IKwxbB_8parsC={l5^QpAl+PQ0_$F`<|ZuFQbJ(gf?3r72RXB= zL&)?Yno-iHLW9Tj^P3q;&~MboTz}$%yr&rUgw*Mbx{J8{c#f3f@{V_l(>q=+fO+J1 zkISP9fE|?q5;b&p9s%LM&tj24Tv&3meoi42vI|iSJK|P1=S@%=2;9{wuC-gXysY-( z28wBmKyT_w7Lpfv1`In7ZcQ@=s=0N2_lPoCGMP)BWe3ZW7NU4;T20ZBV&o^akydY}Q~8NWlqk-#!a!v&{PTPmDGeynlF zBj0Z2@~C?aySL%c8;#UZYry8p+qrK&-K5t~N*L$6e2Yc^DxvUQCKH(N#$vCf(+S5t zSM*?dgW_eF#>4GY-F$d5fpc06bmG6&&6$v|9kj?WmNi=6g@fOduil-6QWr-Y| zdns($i|!N-{`7%-nSPHVKr{w$Vk#OQt@gsBWQ-5wcsc(aQ5}>~$;}V0+t9Y%2)Tm8 zErLCytPlvlnHkU}DD6EQ(7gF%VpAtH(>^xNR>f)ecELu|l=QS3_<%E;l_}$2gK>3u zF{}Al9wIM=BB)w$*dKg&=3Dh#Y3ozhaxH#S9SzorF!bnj%O&eP^ZrzUV0ouy#3{U6 zC@S6DDenD{=l6QI>tC4CiCNgnW_ixdh!sxTmg>VsQNQXfqe`qis7(p!BY1;os2U$` zv|W0B$v#w(vXiG#C)A*9;|w<}H)@67WJ+JrNWC1NAD#$7e~(r}vW}Z^8pw>eBxaR8 zBVQ%)wAXMsa_(icXrqj992H$SHyj>mwbz3wq4qWh^IkZH1<9s(Hgr@4?Y6*H7jiCT zn+`dDW4Qs(`pz>rX6Ieikfil)d~I)?!U4`pVz_&j*hA)yiX3*wW24-go_{E7g%zK~ ztxeggdl*$jA^gVSWTjZJ_jj)Ft3j?LyqmV3lW!%+4MN%72ayx6B=uZMN_5R6)jYKm z#7efL`VU04Q0Sj)a*DH2+0T3*u%9d{cHhHrQgSZEXV2(px&C7Tt?%{8w?+SVpwLTF z(z*XY3x=hhik*oJ&%+$h&E=nFiRckX=e3l6n+P75$8r2Lt)sh%$lH_C{D8PO<}*H{ zEM=kkq!?PYlZ&8= z&BI8;5j=`MT|z-Bb`~#{JEDtBCZdaS%Ns9fUX6wMj_Bk|F+2IdpZ>XH?z-mjruqls zBs8ehG7ly>zChyU;0=ceF0Jh>(YRP;Z38(Kq!6u40B4$GS@N(iaVTD*jujbS81GSL^ff ziY%7ZBhCkvtKNcV6XyB~Y1GjMNBph%dl^)17aiwi5}p6e0)+2}T3OEn8cgvV{GT$G zXg7XH^Ei^JzuGR$25C+91DumRAW7imoA{TQJNmFPefuAn+&!>zgC9p$%YYcqwg&fW z4X`bN|G5ebM6rM78s7k6|Jt|EmtR0kfT9=B_q`=|1qNn*Ibny5!EmNNRzZsiz+%<& z(egO_36J;L8ZV3&0PJaa8WrhGhTi4T8r)CZ^E_UQ+9b_2XK_~e?tQ(p)*7aR9m*gYSS z@o^MI&OUanHnG&b5CVHvPX{5GD8PEefv-&if_w|Rvc02Ayr~#D{nA#kD@gS zi$QacrZhserF@nFDVU^ZWacMjiWu2aU#?SMrp99B@|h+s05L|{W}DuO)~~{cQ9)9R zl-0xUBe}Tp$pXw$)8kdTWuxJyy2YgeO50q_%q%Cm&(w1wEM~*>hdB7Fo8Af4B}DMt zVgK=8^pY+T%zQcBsUbY!rqy59K0CUkAz7sQXa}zE6ETKg`@~-9r&l`9to0~-6|1~2 zEV^%>D~N=5iAaRdEF-_WiA8eKf_c#zf38YHJ6$yOWC`KRD@?qLG_E)2xvIpOv>es_ zS+W-urg<>0?4q+#O;aU0(^S)+e+N$)B9+kbID8GyHyIcx1~L#-07mLg0B*p5qz`#Y zqI!BQcUL=^0^X~s&hxBm*|J79Bxpf#KpfKpkhs)%v~sVoUU=W%);0mVJFpEB;$2;f zke=G60nrdmy{d0kzw1USU0ot4JSWAF-Rs5$4qef5U5l*%4Mv`)UJI}dwSV>6bRp8KbHw5jQu1fI4_) z4$>fvZNh6Zgrc{(5#>@swLAr8$)ITB!dn>#4M&)9gp;-Di4|lwQLrT8QVlJq@%L=Tzn;4D z{l_>7kVfDNgs5iC`n(hh*7g(;u-7xkfK=l6-(k~=`^Hn~e0xKaGkKsTzZK3d2D38$~@jPta z-x4`~sGJtOsoZEJp~0DlmArhqB}EzB7(r7)ONkZMsW%%y$GM!e(NCy4s{e7uq9s2! zlYX*BT3lGW8hYIbxTb~a4o>9iDbh0~QVW5=~m_+;qh zOpyS#1Q!-twZ$YC|FoWz08c|(eJu!Q?9wL~d{KvUfR4QD<$nPWgrSt%#RIy2uZ9d} z^p$d?VIhK$?lj-Mhnfgn=+Lb8CTyNXgq7V;G9&|D;S@{B2vT}mFG+VE8vSw%=o2Vn zhqWh|E`(+?PQWW_U%BT|kB|MrM^5U==QSV`1R48O1^Z;5l1xqnp%Xv&kdNMH+~3wb z*iLe*VR}l<(oe{}$FX;@hbbR)BtNSuB|2k{t@Vo&v&8Jvt?p8i_$q%Ft*yUPhj{nNnz`8CwwyrJ7jm+31Ogc2jUCnZJ~rKoU$uu3pOkctmHY`~`s&$VDX zK9wp+&_1BxgeHA?aq-S>1?#y_6Uyuo2Pf7?lSMxQh3sO9O%lrm8KE9*qeE>+w z2+pPqP=U8wqyn@;kY&DBeFYqULCRUvdbQ0MV}fm)GgV`i%wavN2H^K572K9Ey%g62 z2p_ag)cwg5#t(9ExDW7X*0CNfW%%9P^z66ZTa#MA!}wq_DBRn_iUUcU*}AP>!RRS^ za?kqoFAkRcaU;7)D;Dr2%OaRsfwukbS9L|Z=t z)?+m2b^GW|9^OP0+P~gF?0FQ6ySUVDEv6o$X`I(sl8D%AgXPk!fc2F%P#^XQQFiMJ z=D5TV9KSATfbF6_#V5>uB|^_M?Pu<9Lk=|ZNpW1C&3FH@@K9Y61tWK#Y=eBD`=nZ z9AXgZSmyV~4UpDou$oapA3r95)SpX*sUbnAhMbs%O-0_&N32!wv} z8Ls$y5_Ib@s{hB>S3p(Ob?wsK-Klg*Hz*}YiV}i^NJ)1{9U2J{kWNuTKvJZ;TN1L*s`-~W$$?-+ZWfycA=UNP5PbItk8XEq0uZxn2>n{Fnyg)j)<2Dy&jT`=FI z78&D}uE?6Nr-N2n1_Zl|1LsZ8?9al(F9jqYR8f_~AOxh27;eKXA<69cxmLPM>mm;G z2AG%>P?<+_LCw`O2c_6znW9YP3k$3$qe;zOZhYIYc8%cd0`E1jE$dgrf`=aynSu-; z7}S>x5KnH0XEH__Utgzi_NMNbV~7%~c;&7o;*N&5JQ7*>sbQqTvv((M@3S+7T?qyI zm`qtsCT4E%o!;O||4|6eNZi;dVId?xSN)K9;_f~jazN&ff3!Apur=#9$1xBIsR{#&4SQvpFT9)0mFGKgslSbfG82A zQV6`$#d4kjM%YXy5rr!tTFe^DFmgtm%!K2)aqpqMmrUKp6cw|!L}c_n4lD=U_3O=q z_(27*%uKK8v0LzsZNfF&KpvRy=ulk7FufMH6$bcR@s zM@RV-XppJ*hh+Y=LV#(`AG9L3b+ND z6zRHP7t0G%n($9RRmtdw6ID)m=H}Xo06H!SXNV9FErbnKNSMgusKr0XzxadwQT7)L z>Lmf;YxqL_mY;UxGCNsG*4$O@4L-0dn?dY`bd7#ab4Mbl&loiYi=?Y7W2kj#T&v>! zevR`$e8`g2`V4^f!joafGH$dZLG^#EwN;XW zAV>hg@HJ3PM{wl^3Z@08L0LdbLR?B&JTGe!Ce>>0vy6e!OclJnG~7eUvaFnVCwryp z;Jn}~DP4FaH!&LP))kszlV`}a!4yvJch@C0xP*>-F0DqwFaR~t)mM9V`ebBv=+P!} z9ZD++JIgiWJ#)G)ZofaAVZR0x!}77xN7n*0lkE z`w2=9aWRS6wa82x)MdS__v?~B(+GNa^rP>cR9%hAXR#@nHzQvX38L7$x080f7R|}s z20=wX1u$tnte@t-ikT1IftJT@hz!dQ<<)yP{N=fbUCcBnUKP&PXhCBez1f1V%vG4e zozMuc7d?=x&RDteIq&7#K!$IUafM-w`tL>)H?*RFeW>vTn1j=xHQ@Gt*wiQN8Bs-b zO9-OKuzq=x8`atNfx=oZK{}=xcr#uCzVIvrl{#oWGdyNjJZi#x2fT&b`5LA(*bZ0s zJ#K@%E*8)o$NG#ME(QUmFe`!3#Pc`0%k<8S0|t2mM&YfNeP|Uw04(Gj7vmJrNe9Pe zC`~q2L6MMcD^0|}&+?#(_rE6L$}eY{fVRo z8m^d~+e6NwmC_Z-E^vq9?A)QC}KMp_S?SIH%R&H$B)rI&InEIW)ZJ^pY(| zsgS9lA+GcsoDQy_q!0UFWztO7&ygP$%&a~-_W2Q)|t;!P5)K%Drvp|K0)4ZUCV_D)2S{_IEttp3h7@eTbC@a`dq5%td zCt!ZDvQC`uv=y9A{|zN{c_L7cJ5@$5>RLp=sW&BfsF=jBG$-v33dydI{Z#NP2mWkH zoTmyg9amV$m}GYVm#KY({m4^InQgy>8?QpHRQi*F89{r_<2L3zxuKbk<}qg=%;?Ua zp_~vs){Y?EHV%*qCX6YHU7aqfz4pZ%1O$$tHQ~R`Hw(eJ^i{%_?N^|<5=b96#$ck@1}DhU zcqlC*+9(-q>zF7l9*)>-B(~{PrS4^+S%wKLExot#ALUinJ^mce7w)b1oiAL|!-9-+ zy{hd|9bY){$GtoG=7;a$tL&8EH(`qyKRkb=JG7f)tMtdc{ZZsv(%h!Wx~AzP;^r5B zbR-S+Mco_fi}_yf6e-|kRXC`umollLckwB_=GOr!OM&rl%+T_uH05Yw#&1#YqE+4# zdx^@({<1B>NOO#Ow^}EmmU{71+RbEPPc~3VP=o5cp8nHVgRFfU;nPnFy?FAiL^qZ^ zW9wH8s2z{oCQsvrFwO&w#)I6&;}i8IITv}UofUa6$rd0J;#0pSi;aTp0@r71tEFc? zPJjfgdUqzTDZ6%gz}sRB#?3cH$94!qCFCpEo1P%Q1J%Fdr|my$7IMHNV-ZZC7m_;)4uH@?*}w$v`Di2rSoNjz}X;Aa&{cz*iz79gg!2Ak8bt* z?5ino41JY5fm#z0-AraR#IG~W2Syt>AVL!y9`6Yr-X@`-MZs(#jHA1WF;1pi>HUz& zvvJ}b<84~ERl40t697n*=^26nYlBJ0WJO;a z!rThk7b2m4h22+ZEg}~rG?Yr#b<0E$_(5PA(~=7IEsi%^n&UASaY z=)vP71?)Ih5$y{~641c>BZs`8F`B3OTHgT?-f_ohYxH9%KifECQRezOsPg&5k zfic`T*&I{(#ZUfu!6_X|tCpSWjwXM@_XfbKB(US?MdUBUXs;V`qJiyB-~ zFd2xaVm2qg<|PASa{JD^aSuDACi)b=_o+wP{BHhKC*od)ING)to0<>g_ z`|%btI94UvNw-q!68N8Oqn@(Mh=_ z+kAIdbr(Nq8s@^###EMacv`2nCZ_pIgN>D7xxJE~1({o=vsT=-CZZ8TX>j(zEdKWW z!)-ftyK$~P(dajxXhU44_=CauECay^n$jVKZF*x1hdi}(pNhilcv|4~R7WYd{nEoq zkgbm>@P4kvZ%nlDzA5mfUK6Ljs=qqVLp^ZtDeZa0S$oG8=2^X0tzsgte9>3Ki{tHO zKxGjNSe4_gGkfP_b*yp2;EmchS-9%#m%C7%Pe_FwbIggmVFmhk6~daaL=;#0(>OuN zqc2d$;FbrxDMieCCN;X)FIqvj+BixUrX0Z%4KOs^+X}&vqv}#^UtwfvQCEXjo_{s+ zxf4{F4Exe%ku|sUhH}A{YR&fI8Oq0kWcQ6+eijgsF=6`o7O1k*i%#}b{ntqR{lML0 zmYiVPm&`otaS-li%xD=1P0j*!5$#2+a`J&6dmm6ip(lp|YnZ{+o$?q-?_Pj7PLR4v z4lMnhNCgBzB5>LWV}!YY1u=cpaYE;&+khrM;q?rLRKR3BEzw0D zx4aAD20qphw8~iEx0QbWNai!OGPE$=A__pWEY=P7q~gr5yN}&7Hnwbsf4RB*G>j%f zH0G|wu`AgYG+qV31-(-p5UCyz!(miP;^*sQDmCrz+ap8-wXjptDGH6d%srslQJ{-j zyDTV{2Vp5@49dw&wkwSsyk^*pq}~@G&8PD)G<(*{3mgTNs5X${V3Vw_8Hj9~v5e#d zp)_R87|B+);$@Y9AYAD=1*l3-J2Xb9scYB<5q717Z$r+`6!}>pHRtbFrC~23vC&|@ zE>)XhBJ@Hzo(IE0_=gY9En5^JN<)^96)brs&33rOmr7X%#dw-o&y$oeN)e4Y%OBY) z)Qeo`Vwkx)-+odB&*}PdKLifamx= z;a^2b25Bm}SCREyts+a!EKW>C@tX8TRTAv`JPV|BW84*hn)ax<{QB&N3O)Ow&eE-_ z8X(w8Z33<^+^yZHuxKPW*j#X&HEU0JnG8f+S)hVBcI=8(^NVF0F^a#)!O~Z1!7-mj z2r^atSXMqL$*Nk0YI}S~^$tn{?kD9GVH4ttmx_W^IyA9+2ykcLOhI@<0s_z3M$%nr zp9deY#wx+DVtrW>cDoD)-@}aYR%E^VGRD#V{0^$^AZVPqEKGf4Wvm*zA3$h zk>7yH|9p0Mz$O35LjIo*RF4IBKR(WzZ}`_kq0hZUv2D3A>Hq69LB)p$N(&8(hm+Ba zSqOJ);emfY#D)9xXvb8x#K|HS)$Jh(th4mZR3V^hdA>Tbz?H^HEHO4n@JA#0izV+M zhRstii0IX1BpvMFE>c8udnPJ&+jT(bnx|6WrL@^e@UC%aJ}cPcJ2bxo>R9@WJLme) zKn3o79uZGMp2ik0Ez~)3bDc379OaG_p6xJS>O4b=l|Szf=DBteInp&0o6z07uSKX$ zn6bNoJLD_nwRXN9>n-_)4fQAd0HJK^xOAL zMDahed9H5yclBD~cWf-gIO>XL0b_xo0qbT^7w8O}K93aJImNDov%`1a>CJAQzX5MY zN@m~{oeyt}J)p!;p~8p6xKxCg6XoBG+I4qGCDZ3KjC2&xbU)2Z%Kzwns^Md*JUv310j@t{TV_sd+1Mr0>~nbF79 zZ;yhK4u8!EzJf~bLv}a{OfaNPD9NMcCF>Ror%v47Kb`Sc!D;e#g*n3wq~W(0@?qxd zfwy@Tu`vv`F)e7qWvjs1;TbsKF)bjNnM&8gfREKC-P`35{2s6APi9D>3vBXtFY)?je_j-Ew{7^U}%eRi_Y=S3EcV0HDn4kSo-3z1aeOc zY!&}551GVU^LzpUjVS*|GVLrqltsE&h{32NTB9`IC-KFcfwMB4czza@- zIb=9wJY+gFpQ0@BgS!jX6I^R=^xr9tl(a+;KFMJQDuYqod-7p+(s*R?s2*w&9CV&v z^24&J-nV(+{ot+1vE_k;2=oWCs~`oQHu(1SRll!R5QECYC114I)y zi{8l)`i9h-*&7UiIlOz_4zsGTq{SX+hK(gr*xyDF@WQ5Y%E2LzG11mq=Th2Nxh>V5 z0RaH@L`!d`-v{9h3+$TQntZh+;w7rsvnOs_Rx{vLT0QVQMexnFUyZH<8lcH7GBir$ zQgRP8AKW%8YuzzQ-155N(4T%xi)V!DA#g!>>0vHW#85p^Yf-^N6HSKZY~KS_OaLbV z?cE$>gCKMeKB7SagJNR6PKMEI^)^C~SGwahH99^Mil`e0|6Q^KWUy<^_X^pF*W{{? zxIte{GcZ|{lrdxt0=7RlVqvrov^|WrdE2ab2ln`S9SGs3r@X^Ys9hcE8yBG;y=f9t z6<8ZDXIxak+Bj7fQuw3QA#@5bdfP5y!;+K9+O0V8f?fqvKfEI_JYT%?xLg)4-RvDL z(9R0`lVI8L5^li76%OMZ+a2fJ7Az){u7T)*xPc@FdQWUbe)}Rgo}y-X#=$liq?`R+ z68Em82z{}>=yq7k{!5#ixm|xmLrmVBf41l%bZBzk7fGKDHkv;>8g$XZ!x8IgJpJkR z@m=!p=P1%`psYGxXVzw)+iVM|SLq)i2Vl5j?vgzmHGq6Z+y=1P6>eD$PZ2Qmgz2&)I*S&Ni@kbaR4pMjo% zpFy5MpTYVrYbgb0973!0fp6URo|d0b;pURw*wUjqw|b;JLhCRb$&B`(D#V{ zea{TkCYhO~mbxkf)I;QJ$luXgxXfzTb;~+mkbI=7THFJ&|RXE(;$p z1CU({m~$+5>}yFXN_XV!SLcETt+|rji13)$;6yq9YzO~8W)esOwwYsq&Pj*jN`QiDSaz5dUepZxv&C=MI0iXbid=c3_5?U-latJe%yfPS^F zAi4a{fByZIB*Nn~A6ce<9)J6uNEJByicUsJLQXWeS5kkT`5(7Q(;T6i`TuRzfBuoH zLgOUM1jwY$IQa1XM-L&s4C&|p_m;TP&;%ukN~+`j>t-fpxK}#=@0Q$6@}aO+I6ldo z3Aq_2NpsqCuQ&fcLk7A>b6*lm02QYS-20IZHeCMy{l0&Cu6l^DWUD^hGm?5ceShZ$ z`iJBO{s4;1e~#dvzo9drl?7%iOVRt1tmfZ0OKQ`l7ymz6pKgW%ZZ;FlBm9p6gY=+2 zWc?rW3Zy9V9D(=2KRXmpbV$bA0_l4j0)?}Zq!*aBb&ECaXKxQ^R-0d> z#feA=F`f{k?fRkj{221v>)*A`a zFRh7uuZVbk_%FRiy8A@^3+Gd-0D4y}C)%k0eiq5&u4lTSn54@L#V7B6v=C zEi<3-2Ts9SdFFQ{kk_%shQU6x>6(?U*FvJV~9CJ+| zeO6N8HzcDKj_+7uf>3H#KSx^&R?7$^E5asD${x6`Hi5h}PJD@NiO)2si8 zpJX3OPf|72$?QGMH0+ zBb>UozF+D|Uqf2y*az!NmY=*ySi~c;z0U|AxsQ!VKu3?M6Jhup0d2!sQM1g~sb3v# zQ3rQdmHN_{xur4xr^=$)L3r{Qx}4EcfPz4yEGGL${X(Yj=kU)}P7=fUEcoZrrOF$v zTm)>hCzk3M-ZN1m3_rS_EJzLBT&_SeqmaJ+%+jw;H{Qad+~j}S47x`^1v|p_XLx~U z2}q~HY*yR#(1Wo?1SDUCtdPdbl{+a`9JL>mi;rc(ZEIZeaapvbf>6+5P<2K67& zlg3eH{4Zs>FAe0wttsmPcw(!J&T ztPc6+s5?QMhzl$&!8g|nA3}i-R!@W)bLKxoMIa6-6xZ1z6Do1S ziS-jqK8vT0hR^@bjJ=A_0n@5_?BM}x z^UanA8D>n!{co)%sfG*2LhYS~2wf2~toiNjG?b9s`U2;@T5?SXmw%qQuiVg|?d8?` zT8V`j?u;QF?eE+E^N+`ol1M>G1QZ#8f5(6Z?vp=s*;J*D+Ne(aois=jedIac#o2Iw zVXnlBf7uFub|P*(Rb2$>bS~&##I^p}`X5o~K!miSUpZ8skzo)I$RKo)!G>#IFQ!PJ zG*Alcna|TamVbVIJ%+z@NT6ccb_7 zvp>Fo{}_W?8B--fF$?>byhZ9jjTQEL%f!&RTVPD5`fs7R);9lbA>H&k9RVtzs8{w1 znq$K{|L()BV*B5w^6wM57@^A?U!jZsj|~1@1giF^Ii~+=>7W1lvn4|CWPzaF-9lG$ z`PZcS`N-1#kH>+V|Fw5RN*+O_^rU*M<3?R{QNf05{r_4lGLqnC85nIPFjg<+B+dV? z?YtR?zn_p{I$)vo)TyjXr^n!+G~)nxy1+_rQV@Wo$93p=gHl+4-%%`?_tmgjv^c2x zK@8l~%%l0*rSgdce_xcuXxm0=THzLZUC11boB^((ea!p!g2 zuY-QK&vF5Ohv;#1!`k=Ep$RmAIM&Z4%^B5J=+*ob@ka6|3ez_f0z9bIjHmTf=M+Kj z_4e0~jiaBRvgSXpF5e|*hh?`-29bsafV2t*37*&hL~tiUc!LRGN=X1UBVOw3pF)=7 zMX;ad>j6|h9ps@@fUwxKt1k@`=JX%E{5Y}!1dW1;*q^;*DdT}ghjbl!`CPBgRzdmn zHw1UmY2V+0+X%f@c#^Mh%s_ZOtGv}Ph%yjgSr9gbqY}Yo+KCw8qGQP5N16V1>y5w9 zDAyYVhj+XmWN*GykN{nYx!Nh}iI@ZV11b@op!W2fJd3;xEuw4~34~TEP%uHz?gj1F zD5tLgW9`t#C-(Zd1zG{EGnXGAIYg*D57it&uJe;*k^>M!Wkl{)cL(i`31hvHMb!@| zA3aRh2C7{5Uc6)|;{i!jBBmCgN)^4}LNGm-*+6=X=?B=qifrkvq=_@4)2|;c03vYe zerRTEwK(O_-wH6(5s2tSONEV!3iY4>kTs^C1u2wYn?VSmP_I`N#1Vmj84;l@Pz|l_ zj+5H8oTm5SfW?<^_F3H`z5eo;93&pZIr_P;rnn5YqSNnh69*CA=z-z{ir z>*ZC(x4A+oo7UN0n^s?v$q0|7Rpil~CCopJN*89PU!*x`UwIy{cR@2)t`oqb!{Z2&p5pO13SRm()ub6>xE zGCl2a(0li5(nj2kkoz~(7?IINA2_KdpUPs(8T~h+Rtt#JxkErR$X`Z0gvwK3m)CWL0VU$*D~Mxb_iKDT0l@NJ_dx1{IW~LK+U9a_ss&za4w8Sw=tPN zCMmE}cpzmmJVnk=Bz_$bu3>F5R7bDH@i#NV2XiYmj%J;HF&tHFvYVrDMOVy0di|1+VMOS+Yr!Eb! zqswvPHARmb<#k`lE=HY@40z_;Zj7L{U0mw3#w%nFx2?r zb9nCzeK)Z?iQ~FhLM|@qSIsB8MCNDHg0)5nFsDr(&x#BUy04oSjO?7e2*hRP2Os)M?}GT=9uoOoRYH1~(v6dqn^9iL#N0?kJXgaVPi8=^kMAiIpLf@!! z1Ce|itrUOIj4|GybSr#dvxh^zl$kMe8&^wPK~#TjL$}Tu*DF~9$wtME%mqUXz5i`B zHu{_KJ%)3{eg7noGO*aiTB!K>>~rpNcO2uQHsU^ye(Y#vUfHoo-j1p}E)zS#unI1d z62h9^OtxjtKj!1tYC>Q2{08{T?sWd6FE zUrJlut4pb~m7)^ID$3{CqPH7gBqcHYdv&p3nqPmYJ$Jxt_moy&E`lP#<0+p0iS72+F$Nuw zK&Bx(z0ewJ2e>L2@0JePR@f2sHlIe_eH3L3Hl%l!p@nh#Zofh9*T)&;(`VV_HZ`~& zR*%8fWH)XYG(Y%=vlRfPLZ>)H3$#m-zGDLH^v0P9f8{r`?@hIdxd4|m{wlAa2$XtM z+PBpOxF!i`F<1)MIf&p|y5AIQO2t5XnG)I^05r>&1XcqDcI$;YUt?Qmy;jb=SruR#*hR&Auys=tSr1~4d9xFjZYa%}+UHAUdAJw#dQ=D@9=)PkA9Q z2}6LCav3?GLopv))7HB0pP@hcf=WTOQ(r0;`x^|Kjc$9?AO@C_)JYB7*3o5V@o+;uK;&_5WDwHOd*K3LCw?2ix z2H=jR>}E#1R+9w8y0)+t`jOMZ2xD875&cJRfjyQEV5ZjC{uZeD0<3Q9pW>30n!X~X z4)%*-{QP8VyN!cX<vlO z9EVzu_FT>E-mu~$eDMIHR2u|m6VC29tP8UrK9I0H=ZD>fC9*a5 zgcqazE%i%3hBiP=s;!LVvXEuh$I4e{{fTjtN7|$sC|<%f2U}zt^I~oZ14d zPWP=?w)t(So(JC(0P|^V<<>WGH~~PPbijDrX$kVCykeC_L?aTnT_=EL6}?Py3cy!( z8@buO%50*1L7_HznuSP|>Sj|VHUKjw)Ak#rkFF9;r@F0>+V*(V5_(hfI=d|$J=J_3 zFjM=wdRC#WM7wppp}C6515tyQy8h7yb2Ouhb5e|lQ+rDYexrCa&qZge%tofMXS~tU ziKJ;FuqSv#6zpz-d2?KE|b?j#o-7Y(=*74_0xy&O#iBR=w5z&T;8w=RhG` zI|s5=wT;XsJ5aH+f&Eo2&?j?QgsU8*jY6U5@}LkVsz$*xLiSjzcn8DTI?w5;-m{2M zeaAUNS`ITcx%poYpUY}jIhvQSUEnKahc}nRfMUdry#-~cfcWFMze4 zDMNT;K{7QXXm}oB#MX^`pMcLOMed?4l24nDbYZ+V)Y^mfQ0gIh(;Y{C_{C)<(_=_z z`+*jQ;WHfK>~F$;XdKkth{~qM^d}9I8J4FD6#mf{#G3+mUpXr}V~TmEI)p*7QppP+ zZ)68gzoz=k^`%G1iTx74MYSyfamdKcR z!DHIzXf+tJ0xVw`r!SHW#FH#r$SDqH=v6P95v#YM1@Je{Z!nXloWsy8yzKd0rMlJ?CF}W10V^n`bIV& zAIFa{_Q2!*B;Hj29Q*(@XZ1((ycbf68PKH|#~=;%*LRUkmM*7Qvmdw4<`_z-Tj|s6 zQP)Y^Tw(j^vrhxEI8D#pisLWFn@|+HqpjhxAA0X;Cxk~SewAU<87YZkOBrT>+jCwx zYHbcdh)bJ4f|vWirBbE+DoLE)vhI0 zs>w}&^3+lCAO{c|WJAa322VPTJx}pNr}Qfye}NwNHjtH4XU%qjK&WCDl_xE{Z3*P6 zVT&vMbP}or=kAlf=HyVDo_?`=_|17bi%Ia%A?wl>cPNhbx0!QvQxl_LOQ) zrfY4z&bx{Noc$%TLOz}54`JVlGPo!RH6x4_JGqh#@tZ|vC7!Y|PVdTdrIwpa+fnzi zg4~2p=m$+Qxg5`{8aU1NJ_@BWv}c#OPNG{8tz;f-Qo2kv8VJv?3xETzV?>o=j?Om@ zS8j4E6e?sTO5$QOcxmFaoPNbXOmZaah%??%CqNc)Y6h99l$4WO25V`S-I>p9fJR$F zV7jBVzq1no@#cu#MFHWPt${2{+3?f*WPexXrs-JvNNx)6xIn2Q{o<7eKD<^>Y<} z`qxD=Otjf_Z*o!sJn)Xu&(KGD)}7%b30!pZvk2i z>$E_NyWlM4s4U1~$U`hHnX*SqIZ4lU49YY3W-ouQ46>_>h~B)I>W7}La_w!TDz-|x z8-kqQ&DRgs^hFsmy}9uW#2COWE7;Bse`Q1YCGZ+{Ws1Lr{Ut)Vhzu%y_QZh2*g9Ld zitoMD8XoG_!38(Cyr3qfGMr&GEe00Yv|nfsx|47MnKj;an>w|rRG}8vop2eN*NbtVHWA>~?Ga{ybaaC2||%NInj zsb89RLOVs>-yz*2uGLDtTxz2lTGMLI9wf=ym8RUGXel1d4M_^(EvsB3a&lc@pz9_m zgEEMK)K1QUJWWp9(&z;N>a(PDKczCII`QWAvmiKckwaHd(V_jG$Eoc=Zb$a!O+=`O z86xz^Wd2>oH|yjJt8bwW59e0Bs*~nn&{QfjxKbWaT48T2oYfXU9(rc+T+sH8S}eHX z@du8O545Fg#UHh{?k9;g6$R`z`Ck+pv?eQw=)sU#KeL0Fy%jr_eDds@b&6xw{Lred z?i>F0$^_-F!>upwoj7W}r4mbyW}!6ypv;bT?#kce13q^&ZsCO)80ey@fy=Fsp=eqO-C^_Bmo3dYM_V;r|WG%49YAzdu&Cpfb zkpoDw2NGOB%{2^P&$XfKw<05fjGKEqYik~TM_9t+RXqv170wMqM}iE(SJ0AEow~Yt z^0EZCj%o-T1D8cB_bzV&+?Vo(&qlN3?QnTqkJa?XxGEU#S2t+NFcN){8u%V}AoM%% z1bbaMO`MY2^YC5&2G!(p=WD(Dj3nYrN+Q0S#86PQO4s+4V~nxw$}0)LTCsbSP$pDC zJja^;ywP!G(F^HfL%&;IB-j~iN8Fnwzx1?t?OJ56!$zV|myzhugF?H#QmJY6g>qy< z^KR!x#qK=KDlX2c4u!1(|9d*=+L0lF5w;h+L{(Hniq{I-UMpZp-^_9;ea5 zXpt1{R6!0~-*~t)FjQV-yDa+A2S}$96*2PydWxv8&l4DNr#8l(56|bCNCoO^BG65R zJm2FI*R7>HG$ImL$Z+W+rx|3@b}KaithsMsmP+W18yS|sET~%M`aM9vJqY9t9Ep>v zwUdgEw9$WLcA0TA-RGq+i2%BBgcL*F72!^}6WDjwI)94&(B?ejw;YeW&v-cQ0$Xic z%2S0qQTy7(h2`ztN^I@@r_>x#6)i79e#_(8O<$W3`S`AGJv={`$n4X@B@M?>vtOgz zwq z4F(w~DkI&W7odI&UC9sX*1XthWUIRJ8JU=?{bs@{m3wx=C4+Wt?dvg*f;8KHpVa?` z6gnD=qpMWTN3V$g6d3jpbzhA(1e(-s|0voK>w_QrYQ0&VFGl-|djs;!&lvT+TfJUW zrr3FCx!`ud!Wx6X*~5Eqtm58y*2*r6EH;|nFT(5LX;pHHg{YH~9ZLhcsf90S-_0)n z7(7%gO=@i(;B>f$-FiqWv94S-(RBXgUTSj}GJe{dpwQDQfU~dAEH85Pm60=Tb>)Z~Uq+y#jP;j5LaiL)tL|L_rUBJ8c!>O$_6R7!Dzy z5Mw2z6F&vqe?X0pZiLdU`rxFcV!cVaYI^Y;=YClo;0hi*8+JF_8`w}R-G^X**7aOQ|Wi?h!BNVE~1hiHwDmAM+mRDK3AK9YVemlq;IW{QAOVcBGD~+96{ad zjRq0^ZLE|sYqWhz0@hn+zQ4rJ%0yEG9tuM1m}1do zK@CMd4*!#c1ewfaqv|;;YjEl z8RkI##!lhKi!Xi2Abz%PW$UF<>Ly;~Cb1-HGe5B6)dnA!B96eOC|@dgS8*yAoqc;I z8hJjSAugj`{&Lr3bqD7eWyZQ6S8qvtf#E#wQ1Q%wW5)aJBFs1F>clX#7l!45#?2Ml z)QdY0gqKa|!_AneR)&5621Nb}JA$#6LXS(hRRy%6#mR6@;WcUEpp~8p*9X|!6ln** z$0^H3q|dc4Jku|{$z~goC9OZv!prHnv_1GKH0f>bVjHna-(ESgQvj`+=?Ak*5Mg=D zEo?EG|5EE#*h*x4vVY{qAJ+6P-m|sN_UAtlDVCq^-7&%DqViwH8TaV7eMs3H%gBYQ zq~#o1#b~sNE|)%usGq)%i%nNnwXk07N&+eHyVKI;pU;y66YJ!pYHCd4{9?Xga$@&l zF~Ge`Nn`dLMQ#Pw-WTeHlmONf ztB9gYCxeRFx*)g?b*BlU7u2Q&T8UPvO%HosVftaQ)YXD`mM<2Y_|F}WwUHpx{?u(h zP_R)P%0l+Cd}RQ{sM3r}U4$oI_7H4Sr`UlkpTv8iBI}&5{G_{Mj-6takXQq5yzL=( zLHG^tV&vsa@q2xbRlKGaDn+x`y0o0i-J#4|CY#a^vyqO0_(OOrOw`osWJ7 zl)2{Plo45ya20PdY@Yu3dw$<^QQxMn?DaVo&CBxvIv%;hLt=OPA;084&boy)22J35 zsu7+}A%}Qi5(OxWtmCma?d`oM0S+y3vxf&QRL9GJV6|+x>0-c~p>*=BC3#FvWh8`y zd$9OnA75(JPiA>ZKRn0-n%yItwCqxP*H__5hXw4pXxq}2mgjF+z;dgh{0;=~$@UBp~SO9-fi6U`tyhdcy)3o*7 z#UB|wIB)%r?QUa8U04u42@ey$j7@~j3X5u_bi9(5Lmv| z5Lw6_HU>`2R)qbSsl?J57MTu^vV@&P;b_8l=+PS|L4E+vpa)#xPHjBTeAn5jluh+( zOXhxxZpS(Y#8G>l!g>fN7pj=BdMG4&&(;GkW|%ddN5g9Q4{L|Q*cGX}9szK_sa7qh z`8$)P5XUeCB`&tKdsjt`gN~5{Ht&i5UiqnGX*er$2VWnVGK2-dNI-DC3jie|nIW93 zE59Hb`Vf~g(%}s@#b<)Z$ew3NFA7iW4OcP_lne!DJcL|W@;FsHH_6(<)`y}m=W@?P z6F4$KwKe*LAb$8Uk(}UEerivqSaZD(7le9o6JnXQa|hBVN+pvPhBIc*$`sA@P3On& z+<3}A`9YCT^#DRA8C*KhSbnD1fw227UcY?QyuaNzDz9V!u;xGveSUE z!87;bax)2pqF3X`vKhViJL4sat}c&VrbvY@aF@mTh(d)-H8^m9oe#pB_*0f2=)+x3 zmjWlil8adLcI=sF7zbxcgzwHdB2FMOjO2hrvC(F0DA;4uO!(xEAtlpeo$Hfr6r~VSOdnlaxp_>nU)%B}dmmhvBLRja(gR8x3%`^raZ$B!AAO3{?gvcJ>XGrCpC_2pW* z0{R3}P9_dNlE;4H!3vm9E+g)Z{!u5}Z9)tzQ+W}3qV5T@w)~C|zM|g%B6g1PDn;o{-e7&6oXU5Ep_?q!kE!{P9c2S9H#56r ztcr~4`#2y@YP$Z!KSWF4e^J^rN<{rpOm5lPwclbyZt~Il6YkIfi@xX4)2a`mWRWV) z#xZ6LRPVKL&{e++m!ivIimY^7JFq6k;s-@G5Wx!(p*81AWCD^Aa;T-1_VL8LISBit z(NX2w>dQq=?E$!*+7l{JbI@+ryiAKN5U@Kmh=sJ{JDd5-rDU+ZhIqeNwm(sM>gd4P zRn;Jpg?1gflR;I~-%TRd?#QlL9I6U^jqm?Ck~sS-dNYH`i+FZ}y_WW6fy+7(zWbRe zSgl?R7o)G>c!-je5TLlcCCbNKTU?O4DKSD z`xS|Y{E7P`LTr9(M`fD)%H>Di)q(|dn!$|6T`(Wxt4m$UHb`?EoLvo z9|~ZAENA%N54Nf}e&?8Ppg6_PfNhOC`Kgbbz{I^ix2g70M$wErTp1wcyGBU6g3F~(RVom}ZrOEy^PYA6rSq=5Xhd9~P=NVe z8RrS(xR;v0PNUIoU3UDB4CcG)apDUa&Qf0BmZCrSm_Yf?~+Y}6}R0QDqwlKLchaJJPuQ3BP*CB?TCy9zjM;Rd`=ns|$-HU{yI z0<+Kyl+lg|h_g6gVhf+YWGC2e=j19LSre5q)!!NJVk`qBhCu*7<5SqUq$}UKk@K<+ z?%k1^y@*Pw;*%MV10`vF&U=>QTmx?Wi9tZQwI$(mJ3%mrIqn#%8k2=vW61JIpY8hB zfDprSjBNzlR-alf4NwLXOrB zf=g9zoBh2!9?Xmh$};SS6&}-4Y*Z4B47Nut2M8#Z?00FEZJdw@*$UU$sQN9O?$w+# zYCQdj_mzFTC`|&m0F$h-b^zhyYvX0$az^@cf1tdhf2yl~J=1D+49Rfz?rn%#br_-U z`M34FRG!UdT9Hw^!mx$SOeD^p+EUETkI{Xnx~VzM_IltaZOEZpR4JRa;f-xBvz{(9 z$+rEF*EmV|J7)Nvn8t^9NHw(=@ZzoFP*&E7rUg1*6$TK>4Sg_vW0Vqb3F~-+dS2l1c zqVQ&iQ>mWFLf5|+aCkKFAhy7e>PB zAC=gJgT21RShwr}`owmA9!2f=kRgzAe)i-45OtPOQFdP&N4i@&R0KrnW`Lm-L{dTN z7#eBmW~5uCr5mNCyFogo8|m)W_l!RN-?dzR@C$g~Gw1Am?d$sOatmPW$#*&eV}%;` zP8>ZB2^osw$k@Z$uyZin6a2C~dfXewq14HPoz5#*X zdwSU6mP|*g)Q#M}u%7flYq#h%dT-L*P2?RJCt^qTWv)+@k&S&t1tWjtj6TBe-QpxF zLhEOFv`dObve8OLrSbi@Vev^5H&i0Fo%R=Y^G35bXZ|k6+IscSB@O1PMt36JgoB6k z@w`Z;bPg;7(2J08Cp0{&CpIxP1ev%cR@iMXVdF!lAxxwOE?^|GD6*B9#uH9}n8-sh z2j(c1%9dn-sjX0MEf_uH_#}vkAw#zNz@oSzHYs<%W<4bfN@X@)KnYZYuqZ_c7Eu1> zm=KKNAa+SE7^sJT_G2meU4y~Aj-cBm_%CM;v$pAh0eg;lswY_$PXdKwknvxy`2*!x ztmvv1m7UH}i%-Wjn-n?hb|c}d&%G-1CdOKWquy#a#+NaCkk#$ofWoR7KWNLBerqB7 zC|Dput|=e4mqo2s{+%7rZ=X-ZR&iWZvF>7|es`S@ycOli)l7|za#yq@O!?a8h}?rP z0!6)zk@@Q=dq||L$1mr@{6m>P&TgbtXmLC5;sr~JLzG%qa({)2^5#?_>?y6a%PTL3 z!3T!dloL1^1FYHv-}`Eq+#c9=UcDoZJlhAtki;0%(dyJX5Id)3h~_N1gTqyZwpqI) z9{nf4=YW${B~t<3a@1W|KEz*+Oft`cn~2KZms|Ge&|&M*UNm(t33sGy2MU!S6%L0t zRcOl9n7>sFmR#x$ZazjwvNbDp>j%e|++(J}u&2nq!s5zxoX zCzW`4@06)b8gGtdZ>9*YOHU36?_07=c~_gOrN3vx)#QgXBkT^{6R+bRUoLeE4Ud{# zj3u7y+sxMs)dvb}FGktj;CsR%ya69Bje*!d(NW&8ZrDyKMI>P>>p)P(dYSPqSDpfPC02m#O-+U(v-}o_^?M+@%g355G&U_4kX$>g|Ss$=o+2 zv+g6}YQ@E=u99c>`=_zhpUvW9v7vNK(TqdeqBAn211A8yf_E-yN)p6B~FqZY27=K(}JAufa)<1sCq1!&GM^J;Ah;t}7UbU#0E+ zJvWWR#3?!na~S<#1IL@~BcI#?P|EN|>t&F{tCyx%aXj?UIEPrtA)XLdDlrD7$y5@&7v*3%m zm~3z>vPZ%LX;n<*$Mbm9m1_?@hj~Z-5>1^V*+9Tp2C-AvZvc0Nc?I|8sF#BRFjlml zEP8l@bvMdvL~suhWi-Suto#Y{;3N?U7mZWwj+f>%8)j`$))e!WaD%>PN57qMPDPUN7X%Y$3WrxT+pI}o7Z)bU%`M-Ho4sB^(^_i->z4m6^CU>rfeJ;EM zZ!IC2`T0J$c<}W;@p4=il&*gw1_#=R3{_ZFvIHl%Gu7)-^}a8guC$`&Om2|g{NlzC zYU}Ddfa8vA-EjJ*+$w1cf$em{`)Dwu4Ib~94~Yt`Jns;#^C!2=Rph+&jV@*T>$@M z34o27!OeqNnJ`S4YwG$ft&#&PZFfhYBxVpTs9#A(maN$|$s)-VJha1=L zUAwN>USHE59^Z7k)PdoanBXrP0WBPur)`BzeF-f#-+d1MhYlk<4&96gtrIMjRx@O? z`pYysiJ}17hLEo4(bi4qffe}yd)>*aA)+(j5oiZbG8~SAab@JZjvS3MX$$~6$mCJ1 z8_;rv4NSx*vrcIHWK^jOa6fdYtkUx`BUMb^O_?NG*@Ce)vr4sWm+QilYKps}j%(m3 zYyp#KKk)IUQ`5FXQ$*3+_WGv4t*0_8|Z~0^Ev8u%_W@Ujl_TxP_;;(e4 zoR8^U8OI|$M&$AMKRoKHb*aUx44N=Jp`^5-QaO2V$RG0crQ470xsT zEyMwdo~#CN8C&{U`8(B~+9kh-VJ921;Hq34^aC?8J~X`l6ltJg%sqITOt%UQg|6;Z zJBio%ZDRse)XweKZc`VXdo^dTy;Px0BwZ0+k!wk+wiXP%=!=m9a)$1|b~pQDbCg*4 zGcR3&*RML0CiubtPc}oV%DNlo0i1c(g-rlu@>gniF=Ia96@{v{-(saE5S-E3_i;f( zz|X)1BwBR(jqDXglWi<*l^0~+C47n-ccv>WxS1z-AWl0QXWZ2?64d?#7T36dQ7H;a z)}NV=A{=9lR{r~>fs_{7v{=)Ka$3ySZ>L_L zufe0Sm#w_L7ME|rlS8VZw#I7E-z>2N7o;%4_gAl1a^EXSm*O%yIC9yDBtu?&KP!OF zvlPh_Rzog$-MwTFE{yimT5BW3e!0wlivhpjiVq6@^R?i{Hz7D0z^h|tzOxT%0L&Dx zBXG^>1Bd)Us64wA6S;Ny@XG+%le9G^ie$kHRZ2%vYt>7`luZYz%*bNTG!-1BG*}7% zNw0t~fViS!6%Z9^wW`zBX7n1|_yj8vwj~ws$p~kM;0}XDNp0!2*hGKcj7^U=NR9b( z!+66*CK^ZH7gJRmQOCTow*fRY4FKeywj|0eI!LY!u;B`>Ggj@`iHNR)P`KveQj6r zX}K=8b<@H>K)r)lydye7S5j>GakuqvV~H$RR&B02^|*fge3kU$=etp0cj9m3?InKi zn4RF+;wCj(D&p_<0#wdmhldQLsN~4Q z#T*CL&z<0rqb&jUd@JQV&|epZwwb`v^vh9Mn{$~dvC1@FKscR5dF*50ahf+H*|p+K zYux&SxiksiW;}@$d8xVw0+l_$3@RR|8<9|nylptQ^JF_KyrudnuxtsSMysK|^7YXQ z_37V-^{t&YKQuXh%!p)l=f&bUtwAhV>a|qjb#ir$nC(@?D75uPs|tPnrxgd?`zK3mg4-`1G!{YI|JT&Xw&-biFeV7NNcX6QId$i{9sqdctyhD{U z%Dx17KS&rmwhq1DSk3cLH;ZI#PO#T;VevXFhK}*Vbw{v+HXWqUxpvCUE zWeh|@D8S20veKDM{0``6#$Z9vHl5{KTe-GrdWt*kgtomxEk@9nT+&kr&P;R=SecZU1)^x?jLJpj zPTIFjaKbzE^C1|n3L%BC8e0nF`yA|@f5dB)%nw8GjFAzB%9{_23pYgshxkualfPyfE5Mm^ImvBP}q7Ix?ROg)W?PkRAW# zaSi{k@+!y5FhOm@_+bTS9`MFvut^MPTyG5Ng5Y+Zdn>kANI@27#JZ$+;GEVL>i5T` z4xhUA;Q2$a+lm!kh;v07QhSfy#IaOgx33?r8LJF6cCQX#1!8UPQojvR+!*S0{iK-Z zkddAFLOKzS&*%`b^j>+4GRB@*pzcC-GQl(@Vdo^C%kUEn-6fhQSy#x}ZuqgL*vz`! zphpku72UhonIv1HKH-58%6R6T%YL3|hS_Sv+hI3~{ozauL|>W*p&R(wqjFnaLY8d* zL^aO`SSfuI9e<%V%ZI%98~s;i!i>gvkIi&b*V`J*WxsllE-RunzKOwFZ3xMhc}d-s zNh|$sn@z_S$91imJey|`-uU26Gq=`UU$2Nr3sY#+TgeocD9~a-D08acy-{Gw-C_KM zebU*~Ma}mXHN~K-CY4|e;oMCumsr>MmD~vGJYVm@D_m{8#fAD`S(;nE_nNEiRw(4L ztq7nV?M(|&J-By%i4Il}Ls=BpbyMZ30|=PxXyHl)GRf{9bpMhwX}pBhW?jj4LlKTc zuBlSPHVaatj#Ie`nu5&9DIdYW?E9kvhO+uTy;pwTqc$Kl zFNZg?z1Yn)JNUhtzD4D7GpiRvFOwfxsd_cINOSVQMC4 zmm26qtW+1-!Eco>IIeNTDgRH;Uj3^yh(qdt(sd8FS=e7G=y-3$QYCchEgO|Vs$Qz} z53;)ZU#iOQ-PhtxW);#u>(U z&ii4JB#~gzs=JKf2*j9`+=6PTNHi89YI>IbOjdH_`VC5*J^l~S>zy)(eRN}K_7`?i z)?f(|co^D>`Vby!~5#BJ=6N zrc3Pl@+{~fTDXSYlc^08VzSfw@Pry4tN_TGLvgBs`>bu&(hGbe>GXk#VX#c;;UJiB z59iN`*6}umymx$AU9ygCRDEDXm!slR;1pm)-mv%{=b(dJ&qq;QyZPt21VfTH>cL#` z^Bb9>;52K{TV#Lmsnsq)6^yip=Gqn!m^(kTgwL-x1xaLHEgxJ{>G!0P9JcKQyI8Ao zIKNX6DV{sTe{?oeBSa^9{0z75%oKO`j0f7d#_S;Y^R0uKlktc(rbbmv zx&n_;Yt)7Dud0j7;_m8oU-noG!P{oJ9Xi3fhipDm665H-53}w`54t8E%f4xKO*;Mw zo@?Mvl1#O_BXGqp0;VB)?@&UVJ;6FRq~r+GWC5MlmU~-xoqeE!wd=?uoN+tjSk8pG zoGY@p3{+K#s3C_(=EDn_L4IaK=f16xqvnqyS+!>p&HKofa9mYpD~JkZ`M z;UU!9hwKOM$ULpRik~=%<&aO(CqZ8&BH#&kEMuo%OE!S?swo>?B7I1e;hDcY=Uul= zsqL*1D-)VO_obGA(D(TYF@bWHy&H;VI<3ogZFqZe+`#}I|1^2Iorh=r=o0g^waKw4tyiWiB1cCSgXks18!_`rFn#4c2E>>XgoC6@p`de-s1!&fRZL)aK6Uzm?e)7cR>$QG_<(}c&BI+ zm*&nx_-XyNK*3E1$w;V0t?q}1{WslcS%PT_OC3jTi|2I>cx<{y&{)pO8A^2qg zjei|dWk7p8iB{%2=NT_<&j-HdTTo}VuN9NDW0NV-=F6#t_-})@lBXe4SD&1Mdb#qP z?6jgXU!E=-Du0nh@#D%LeyEE*nbSL*=K-URUMPk>rqy1^hY9N`Y70|WFhbf%bT0hV zPc{paoCL{2;W#oNFU5KBP~B;@+N=T$hTyuZQ-BFeg{KL<(`9F*&DtyLsm+NH7J>7? zN8M6|;Gl0SjfW_;)>J5VkX1=`_>jQQxHqL!b|3n99QcXcQ7V|X%+@Q2g#O6*OlT?TvAX?h)(*u9x|cq!tE2CTQ2)Kx?KC~ zmSai>7smx4={m&?c9#2|@pnxHw!@A;>!8IhnNW5xP8#n|V=Px-DJ@-Jt{h%vPQ(D36Pa>JuN<2=UR@RS2jdD9+u3@>%iual)^c@Y$ z##Jimb|q^hkNgF#M889Zxl$v=rR}5$ZZg&8z=HF>&6F~A3ByE;(6Jdx-icIn`ah|D zvWrK)$T){3cvfYVp^b^d+^f-PD_8dr8q173#oVdE?7#Hs$!ztq6n8n-yBRs?{YJ2J ztwzn(#`?CoI8HVH4O>-z^pBhWXc6LA4+$M}(noQVjUM5a)xoZ}n^kNeUZ?1_M$49M zA~i&ivl4|D);%#<^*{mGb+&DSpNT78cZ#AwQTs%rl485%pnEbqK=@1};b^NV%*>kr z`_{z%B*{TKG#T}#M{;w=lX8boDG{rcuwDfj+Hv>bOW}~Hh9a%;W!^$*)^C}Jp$MJG zvYR`t9}J8OJyubutIJnWpe;88o`-7WQAJA298q@%z1K!0*`a8MH}DFHFYjJb$5omf z*cM!xe71VWIMO!6ztU=y6oE?`r$J8i2pt)4K+zlam4tVB53t;Sc}?N{V&AlE%X~zc z3-mTrU~4s0{@V)bqh8oBGI9$0EVuGc95?DU_)5@bj}lF2STBBRD|X};|2)NL&T8nI zFqAhSaRD26DF4eoj3hR8n_Kc6|he-;UOWY)j+$TlF3H1bI%j!Dh$V5-2|E1gS6{9k7d`<*b zS95{J5!U#^e_8+?WRf#HcOF+)a3Wuzrc7S(;g(UGnxfUKkN<+_%4Vplc6Nx+znwQq zjkQ=g@qJ4LOk53A++%#d1LnDVxLj51fdiX4ucGEkXFgcykg4!=`@3q0ZW0tw3EzFv zrBHUwTTprZxmzW{h`9O+8Rzi0$+YeO9WukZeO`lOS}^#gMjW>Ah&_t^fif=Yyz4q` zfp!fsSlx%A$JIF+G$3*;f8Yf`$ofECFH!?96Gd-$=^yDr5IJeV^(ZX#Df>d-4VAAn z)W3Ajba@j;x65Bf8@_L<)b3SB6ZWx6p-sY3t9q8z9W;m%m%j#WlJHG(OLXhtm1wIu zRqVFRb309=>63#$Z}YvLUgsnqcD9?^op;~bEp+=HI8Cs)*dHO0l|43K3f|hO97g{Z z1O+dbG1bQncs`UXv1~s!Cp$>tuEN`81^6PG$hULCyB0hLTW%VyxQ;(ty)>^f$@4V6 zf!#Ye`TR3WkM2jLE7DzOs{qEql+bJxND23tn|@4PUHz}8)K64O=ezTqhV$92R&i)c ztX1_?^JZ{=uv4r$)cc8?GS$StYPqUF`|+>2B7~FP7Z0RNF|l85?6()qkSH9GRP}E_6QhG0WOmAmNolQ`u|U7B;NcN9I_CW^X# zjiz*XsazXg4=`5~jcn$;4Gnn1F8;k<5eFv_Q(Zy47yG$|EX5y5>veX+T zw+MVecX)rn#;DE-om|#l`4tQv`7srQwsLmd1^9~)xH!=AhQKbqgGo#NCa~@92JBP- zJ%b&#-e}8t{rDG^z?XlgzT)qZ)(?0SCtPz6o>I=U+%|fU2A<{Nl+kdy{8XvF@jt6x z?kKa{l_S?*F5ogD_uCt52riR09NFQDwpbsZQR45M7p4u`+js8FC%LM1D|A`5E*$;EdCeG}A{^|szM8}RzwfNS(mh<) zXLOx^UD0<0oxFn&yH z`=bq(w@jPU$K!U0rOtq(YK~PGTM;ezb@Zlyc9{C^ z7C)cR+z}TC$oRyCkwb|p{!UF0sxv9-=baKBAU01()1ItScQb7gw(&N;dh7;K;FfyO zJfXDu^y;_BfY91O#j65=Iu(23*V|10U>F}Bp!Q^c7wj41loZg^Wg$DPiud0wGg($G zNIt3SrdO0-g}x@3Z=2(3Dj}Y!4|y0+f-R+j+C1Go%1ZeAM!*=tFQ2gVQ?E{iS`&)h zrf7-M?=+~b431oUMhZCHlhllN@SS+Cpz2)SVRf{48%*!q)TavGB9 z{#FI`8$%i|(IX*LORw|f;DKYf)n~kK{rR`sbV<+glkLNu3uGU)072bE1NA8Jp4fmL{nNzm#=31cZ${h=WH=SCK$;$JlSc;wO_HI<0n{sBh^70RwFy1VApBGE_UyloZ z8991kQgT*V;*Mqk3Gg=c^ua4*7EDADnM0Q^Guk$!_@+cQ{%6b<65yi=JVK9*kVUKl zBKTioP(V6dm}wech2)MJtvf_Tu^-)i?NGbKBH%F8ElaujKW@--JY-GTN5%`8V*UY2 zfyd^@_t;R|(&tztDD=lO_m|f}K!jtLzT<1KcQq0F-ueBtGmnK;yxE92tu;vxLsngk z(*j?sYDr91Z|ye`$pOC`6ZgipccH&Wat|kr2lY33QZ-VBwy=__Aq8GQL-b*15l=h8 zPnQm-ss@(6L$JeU8LVvT1WIfK5FOx&ejxqA+JK@mh;X;05n>IIrP;FQHhe56e@_U7 zdaXU$(JN-b|LPt;>MDAy`|hH`?3 zN?ZIfxe;%~K(UPCt`)2skR9s-^W`}RG z=J$`u?ku-l!-SvhaWLU%V-%>P8)Qz^T9bb7DGi7`xh1PF%!CdAu4|5h8#C5N^KV-FyAb?hcF>j9b}5afmD7Y+ z-)V3~+5FtZ?4s|%j>oR@Sgjl8<6Wm9`$jC3wRGFP$le>~NV{U+ufxWekF>^ZLKtr$ z>N@631rtY%TYAE`ClTc!}y zE+>Zo?7*>sRj3l3rwIGsOORw# zUW_>&OK4tm(BoQn;$hH^hM`|*erd)fq0hA*DHyI#-*+vZ>5RdtmHSrE5&t^_%=db# zf4RWq>1Qx~h5G}nQbu>U>v!@F9=s8dKx8_E+OmDWy z5AxRC_aY!FdyZB>j1Biz4*zjQJ# zEneyYmo>Y5lucKS4vrzfLVXN^Sjtpbs3ro+k^;Fi+BSCdPG?Ug#jLL$c?j4ee;ya^ zn|hF*_*<%EXO*MeS*q!0(6&CdDMyxu+vgvS;>l|pj%U4Q<;M~fH;x=bPHBE`_Adi< z!_~UZ%ee24uqvjf7*G;vx^8KE;gqpWeE9!9i!s(GwMr<`Ua^X0zJC*@Jdkr9FYEKV z$#dV_m#esx<8=vvt+Q1sE5Zq zAE*8X?d`1vgOdom#>O7*EdVV0Acx%ZCu7DKg+y!ULZz_oiQge1JTB2yJTD%X+L^sw zAohdF5CYV(5RUKMxW}k8<1*{i#hL#bL_SdFN5DtRJqNXELr$i~1BvD2b-U4W315n~ z9gY!JO2=RZU?%X#(`N#sz>!UzhYqL48=qFg;@-hOxx7sMdkulV z-#zuo?d4=xcbf?`7{cmDN|o+lWGi07gHzJV+Y{Akf3&TobnS8wvD?evusCY3ks2y% zyC;WMVkzIIV$+9S`oU9vkke6Qvy*q2U>D1!p_iPe&R3{_ zt=Lrc-^uXc!z$fppny2c%VcsExk!&cj#Jel)XAe z+t{VUKV4iLHROXh7ys)bikUZ~uJ;Hhx0EUTD%04`LtwS86Y&-)(NHM z?-*3eTWSM#o2(?{U=kTv`|zG%@lPus}USPA}wXXLPW@ z>#p!4#Pp?T4)( zykkmb8!*bHUh&f6(8eU9^-dlCvr)G|=F>s#6DItkIxfXJBhbH5a2|2VC-E^Q z6nC?;4P7VQuPikdDk!?$;_Y~{a;5b!r9(dKVohD-EwzQMr09vB1hKNtf3HsYJ8Jcf z>U=DrOXQ3Csju!d;cfz6I}e0YCTX9i1gX$1$_lWfE!IlM1X#Vi{;E{!IFny$>}!%Y zaZPVIu}2q2!R^~?vHFR5Tva?9ompS5Osz6+f#!#%n2{?3^K^-PHJbjV)Z}u=99u@@ z|LPISdmpB@v)>6@?th3%Xj8P_e*FICt>iz!CCvvb`pM#zs?L29OkdutL-PW>`;s$< z*sX+jlwy`hw9Mh7{$nrWtWC9!HC4tai`E(s}BT zz0u@|USB7=nV6-3Sznkea(m_UWva<(nUbQ-Etb6YvwzG_@gl4|aXaG0O}^;xnt1LNNrZ zT**De+(kSZ`lPtf9_^6$L*~C2QV)6m?>oZy8EM^m8Y`)4PGpb|t?WKUvFj0So_!mk zAOHJo`ZK;nq{)WglB!dg;r_nWlWtNz&8=KF`(M>ct*2f3s@;V9>P@r?E>5sih1VXd zz8xCKE~9;6WBC?*4QFSrbzk*$>N-na84xHFKJ5fIUO*u{p#(p!gZ;3iP$pqM zqnqHgl9Igawj@gtEQ&2L=)eYB9NBb80LG<*&V6U;;m^1@c0T8iU@1`B4|`z6S+CZY zs7zgv4&~0AM!@{w+|oWK(hh^cIT#(A46ICpNj`F#I{vcfx51%WI>GBQB1^9lI3To_ zwyM8dHvqmWwCG}aO-wtXvyRu^dC1Fd&3}qK2S!;}LvSsg96 z=bO-8vGfCcM(@E*VtXQu5`B1nU?tA(=Oi+=yfgdhl%v0bGbs{$h(l}&gat+5IZ6Fz ztEIQHYKGkyo?OREBqfWt?xl;q?j?JXSb26g6_tC<9+nGx5@@5R%||fL(u)^g5c;(MckCyagiSNj(YyL+Ozd>%hYq34 zj+I){7`V)2_^g9FGV@*Kp>zseCc9Z;2W@*g2ZMPFg~>x(rL_fgY6E)`lGI=>!J-rzz`Ank(Sp5pZ~jTn=!`n{@gJ0pA~so`e4!V(%exC^5wgvjK31D% z+l%joxQz7kTNO*M&P~InN}zkEuhOT;>|hBLl?4l=+qp{5$D&Nm->D1lqTC2aLE_C} zr^gSIp4Yt7;xmeS=r1mALFte5`t@IO#bWadt<|8`3xE3|qrhZ|bxO$Og=84PTSu}D z<*2z}fq9L<%SVkK)_X#`7S>y;^MZE@VeLX20HOSW3Y9lx2&d%{~f5Ji|iLdlP*-Nd)wi45R|5b_%0*i;_+?9XA*c1zv zuff2+XlZ}!yCpx~2wnST{EU1d`uB-GVnIF2t5B*f5*)oZ=SQzp$+Ey-xs@Txbsd#>?=9b zAf2y7rrS!O7&BZUyG%F%Gdwyw+N&!F|L7%4i0eBc@ zAX4LqY4#_`_kjWVwG-FO`%uDjFiBnNlW% z<|Z>x05u1wSL5=xq%qWV*a1XG$63-xt_gB=}wp+8{!3%F28>Lm$_&pk)}=N_C@XyeE0LdFXwY9 z{U=hS0V~9xp}Y;Unr2H#u+PE9*lnCerjsMHvb;_N3WyOAYW(eY_xRflj5kaU#Oet{ zC-o|l;~n*5iOMoqh4{=lp;aX6TJQ?`j3YQ6cJ%VfLSf47*paGI|54BIkrkYUNkt?&nH-fVa;j?<)^3_Du|pEC ziI$tM`kOhk?YF6Q;)-26Bw_gD$>5wBo{`SwX|ggP0pQ4=#{R3L5hQv4&k?O7ph*%Qj7MfuGPK;e+MW<+{wHFBcQpqGgs8M?}o z{NSNc!Y_<)!GwKRdSKwFE*cgONuGZtZ{_N0{KLtazE}N=u^~BYP;Ypq+Txj>npNfF zHQ0Q=i98$^uuzc~Ob}t_+FhMz%T=9#A;sebU$Z{A@nQdFJ4S^c)t?N^WGU z&yvz&9me|drQCv3ah%&;Z(}^CA!%cR?B(>Hp5b!eh3ES@=7De3-B}5lTrR45Cy?LI z5d9T}>kMx_?-iw5v5j%2E9?xNf$7kz!=9#AYuhCasR;2PEQ|j9QmbP5ecS!1Q`%YV1#)T5{r*_?4<=p*6Qo1%_Q?kG4pXc4%mFK=fs5(_fNmlQz zClcDEned~@6K*VZZIHN9EZLSDn?AtTro6p1aWKfNq~AS62hE*x%}{V7tg?*byg=|;iFR@4|(Eg&)T0TICVsgtD#-lLFQre@ z>(BUJip+&qqF4nv^vFNxYpYLqn4R>(f`a8d=B+rQnpA!a0wH%BRGFht9}7%k38#7s zUXZ?_@UtEbJ+GdORc9?PA3CwKbDN<(c0M<%jX6H#{7B{peklMFz!(aoW36kcKzcUxNpU?f;BK2k8Y08!#pbicE*5=tSN9O~P+gZLG(d%> z1Y}xV#5mGnf1VaZZEQCwIjUygh31U0X^f=Af>wrAXnl=f$t9g4@^E?5*M)&gOM#Pw`qrAsW_)z3nUaBc@l3cFL{h zkl_+DaQ>%?PYl5`Gyj#eb`7E%b^tKxqhvx0z#i2ARDB36!&y(DfGcf^q785d&*f%Z zw)A*Mb)4r`k32x}`;zaSAr7Eb_WU>m8LHfThPvn0yOet5O`}x{UNaRk!W$W(Ae^rx z0_U?BzhD(=9CfM%kUYCqEat^9o&j+HUOE6HhqdZ@?!OfWsR%rzV%xB8ZGBRE;4+C= z&QGeYi}QE#HRtvczWRkOeP88u7)GRk=qM|PQY)AHLkD90rEBMvNcI^+-F^F#pDXk6 zzb}LkgFDR80>u{(^ft!Xky$C7Fvy^DEkg6GdlPrO#XNDx6|aZ3lz3PIhmt)Eou8vlZQnOJq%RRy z0a!v5{Sa&ddZ>+=`E_Ae9w3UIOD?`OokZI)*p_t)_mT{qeDJ!D><6twerSH-_MIhVd zQ$(h$tUW}qR)_Zh;G(KedSae1|8Ou9 zI-4{+1nDLH_8_8xJFDQWwt_jHC@*Zs}Z}Xeeg>>%T-MN@Pp!Gw>JXDjwpYtT%}Eu z!RhV0D+Ye>#!xy68M}78EXyBAB9Mhb#V4HRmKE$nA_G6EnNk^L&ESsyO( zjG~*~&&1*Bayjb-)fX@)X81fu#=470s@gPeIqf?wyxtN^>t5qn zZ?G5E+B$o55A3~OURwoFO%N}GA|=agaQ2F@Y5@+AX`~0(+#JtqPW*b)2ynq&Zcis9 zu8l#GMJ{J`oGhNlG@?ucteuT7V5k$<-J#T@rwtX9o<=VSEbce*wl`$(J7d@csZ#rp zoG9Y$bl+h_yykdNj2;Af5BoO}(&-KAm@oJ9Mekf4SkE9E zOI)-g1Lj)r%hN^Mi`tsyQ0c);=kxC>mOX~M{L8-!u?^ z!sm}}%^GG*^*r&+EEG>{>9Th-rHt)2|Fv^u=lT8`MYHV!S=$}-XiiOJ*}+JDVD(Ol zxY6l@)vnLnC=U)%Y!H75s*zS+Kk9h0&+`x2!q(+*cC2AD zVT&Xy@Vl6-;V@^(a2!wsmOvz#@AtYi_$S0IpTLl;EdeCaFZSHqIrX)E?o2(DZ=HF@ z=;r;g3cn_KDmrjNC%U)RfYUQrdXt^!6IfeG^dGC{EgqFxa z_X2eYZI|bd*J?0;!A%<_NRGKU5u$YlfCQuouTB#0k=JQKf2Y+SN%GXn?$AN6?Gm>~ zOIj>3QcMh`kryq)Ijx!F*_L*Y>PCz7CxbhrNT$(&T1>hI^XzNmbR-R6S&UjM>PMmm zEI@hM2j#ru?z_Y1u-skjHHXBTN!&{o>f2Yqz`sjlv^5T7&3$Ft8j&wV>gN)8^Pr|2kZ_ z0)4UGMy0V148Udxa&Xyp{9s!9LAh~Kgq`xpYD^B>#AKBfK}hgTRyIt+>MKJsg2gRN zNmOrrU@SybI;=W+FgI1j6)lHcHr0U><^dBvCSY=cF-tnn0t#irm zI1Eg`>wY~|6|Jf9$6n*v+OKbV`$)_S&YEUShj-`lY~I5-a{AL#lFLa+NaZ~O;%0W7!^SebpVPFK2AIkYPKgpLoe98zrC zj{2H9$g~ze$+5T0yYKH(j7s=l)qe*I7#3+PKnMvlC95qQG7h9E+F9E+Jlyw+oa`UE zvjJ0Jar6W@HYzM8&;^R{dFXETF0-_mo{fA-@&4u7mm*5-P~^Ii9ylwl&Prx)xcwua z++~^|bIU_-y23)UcE|`|y zV;Xt(ijgPb_HZ~!{pd9J-M0HmX)LCrO>II#%|NpWbvA@S;|Jeu}kAJiR8jv6sHNvb+ofO0@0h{SqDaTtjF83mLu#9ga+@ zxG80-n5}Ce`@Div?Y^bzzKa8Vgro^7Mz~cDT zR_(rbcj_+i*dZU)c`uiuUWZ*Ma0h^EOv?j6+!VpbQsOma3ItJgl5&Tt#p&2Zrau}k zMy*qZUSF9%ECxJT!*BKxOTnU)Bm;nEmb)Ca!v3MZBk~#)c+(HbXq=7dUAK}{ zCbI$Zd=l8#TXH8{KZSmoHJz__)rU@#gT!0)=;0@NEuU2ZW=jsSGh8LizDaaiN3h3X zL-9xN09X8~3l(9q*G99vDfL!Hs|pt7U?d7p@1N-jSO}@4-xXDtwwLYMR~eLW?>@Az z0z1H*+J#GJ#Hr*47h|;`X>ffXDz={^$Acx`=M+3c3POw9F!Pz@Lz=IZTc3Z!pS}Ga z>G>h`+edaFsr>*K?gqyL8(7RAiFibMak(KeCJ)eYzu{f0exNxveDX8b(g9bqO^`jL z&A%dGiF4!67|r+-0`qh^F%V@PaZ}0R)OcX)mk`!59=lB7a`@6Nj&9J{;zjojR(SUG zgIFC;i+OUAOJ;@4{kbd`B=WOMDj|!61lC>uZ){U1Y+8`~f z2zr$L>D7E}?Pm5uttzKt+r>2kfmZod{?NvoBe??y%HLF&0OqZbhQR!LJo|B1O?zp} z8^Ce2WA8op3T97<>qX$Gfj0~JnY5h6qSkBsG!nYQ8bU^%&@5&G{Yx!8MN*@^vwi}3i)E|9Q-yk8A zp`ar0c0;g_VxMvsxAXFad=7_pHK$gczw3X{Eq^5+;2b@kq_A9AP6`j7s*n6`&VOG} zz;^2K&8Tn5`s({U~)r%4wWv!l^ZF!?i^robGwbbGV3Ws!IVxv@y$zhTx7%L<$Wa#GMxkhW%$L?S7zKY=R=!Yx)UUXYnZAY|2{Hzl}VApu}ioC*4%?djM{fdcr() zceR~&&p3AG>~WpmdXrbqpPNN5)W%LBb7B#pb43xB6Fu7dDN;rxXc{lOG}4-ul-(u2 z%>R_)i0&@J@bE^h=IyDn>-kE_?%}y%t`?JFoxOW{YsBgC$Z3CU_n&i#QaGm~EbJ+g zjg}dkp$h-VAG7ddqP(ipN|(hCE1buZ5qo?p$#3`Gqdc*CZ6+mB^6G9$_&Rk(2|q`x z)VNba;mYF-DHl|0C=zz^dxHwP8UJ5D}5?l5S8oohs5TA>BwfNJ~mLBB_WV zN_PuLOLs}L>F)gI27Dgh^Pd0w*M(l2*n6!x)|_LGImSKi`$W-HwG_yK=7h&LiCT7v(btk5QZD@;8tL*4f8laW9zxDY;&B0hl@^gq`JJvl? zfr%QU6_7p;Gs2H)f%}sSkoGtAfl11!7MoxksXyoWQK$jPaSK3VjAoZj4zKjq>VA~A zD>cp>-JROfP$w%Z17kB*rwoZ$XHlS6Q&`MVjaFDu`A?l13;!yi6A)eb=^}?kZz_{U z|1$ov*@LAiV>=kN=g1Gys@QJE;8zbodl#lJVpt|WpPY2;yYdh8A6#w-Dz-CbjnfD_Hmm|i(jK7gVqVaM!<-V`0a7R&ot(y9M43~-4a#RoVB>bJDWpFS zeN+S@p^q-Ri)s=+chK0siGV&j&>E1Y8z>}BbsaMCqo*K1iFI81CgG5XrlTkLE7|6; zA|>}q6!?@`?ul;ACjuJtU*SyC^drBh>JILmCaYlr@sc+@xZ5eQ&V+h)rFYgNCPswS zN@)Iwvl)ny2_6W;4pyH_?&TOh^+dlLEF_O9=L(j(ANU>Y&~<`gibm-{kPgMDF+-!2 z5WPa~0iYT^P}F=I^<3 z1%TL%?r?To^n5!VR~gckrgTF3FMh3_~-mWUVc}Nl-IThWGidp{xm~#fCqU`bl#yn2fIjHrwrt1@zs%L=;oCD2Buhw)k!Tv=Izkkhq3(l5< zfz#nWbTDN`+!KFQ8`Ri}I@-GU0c0>FL~(jJ*si&u<| zg%wQkY94|RkX00KK`f5@6YEjP1)=o3OzVsoC(j3lDb;8`Q*ZQgeI@*y8DtG#Jhizh zpIjMow${vnmeSkoe%9OEs`<0ego}m=A^Y=BHd5K4-#!AOg*<~N!8lAJpl?2U8>T;r ze*kwma13Dk^GXR8Uh80x%pmXT(FnShHQwV6IRPigzT|6z+uGPvwhh{CDb>-ndFvIe z++uql=gpl1!jh+ZZM%83CwJYRAoeo{vFh+~R2%@+A*9dXIQn2s^f5aBEco^7h(Vxh zlrH{9np!9lBW+!XkRlU}ouy;`v8UrPpp*yzrI6;%61Vlp?v9E>K;_~ksLWjC0#p>r zo&&zH`eE_jQ3KHUI6hy@H&g~Z&+g*lj0rz?38Kb~Idknr^%w_?<^;s9spj69sDN3n zGfk1%f=%0#UDW?p|9G+K+|Cp@5C@K#|7suhF14H_0Io^z8kk1q>s1-qj$lI5qt&{M zmk@7g`@z%hn9Gwre285{&-zozy#V2B#IH9NnNXs4si;gqLp5V`|JmpQIH;!#u@?JB zPRc%oX@Vv^j9`z2DapsyO=1y@rw3Rhr$<{ZWpq{}a_<2em|4%u)6{Wh9oF!(dY{W6U% z(BuH0`#i`K2D@s@({qg#HBL)C_59}-K=jfl(H17D0~6^iwwfXV$7P9^@oI$1-(Efg z;yS&bo}t1NA#*(eRa1rQ!&I6BBCycfcGM7$lz5U~zxM!<{M#@wx9(NLc+JHXVvz5; zFb<*nMR|iZ^PVLWB79r=b8*awWN}iXHt9=0UF-qku3cBgdVR%*yvz`uDI+7Z{CmkS zT{5l17WmV_%4k(pG1`V5;2}$_cAz%$5v1x&2D4-Bo-Ud(q<7UPl&m{|xyK8r3vrE8 zldT(2mijVKO{`d@QtW30yF95$tAo+~<9YE$Z}iq_6V8F=eQM`U6nz_sj=kJfXdocjyDre!0@~iGUX*})&I^n?*$Lgu+x+T znq#(yA-I-1a$-myb`~H9i99SY#Z(~w2WLs&`z|2Q<&%$0cM87^c&O#(FcGK2YK9k;LJF|$d{jLCrcZ zZsRwl-M5vyzVYLhRcJuwvjIqaPH1!vOZB$J()=tS?wYySe-Prz4HQk?9{>V74R#_l z@B{;gqBXhl4(?f`0FLBtZjMXf5stvWZE(k4oQc7b@Dob)XG;v&U7$&Ub-!+xD4_w;`GN4 z1o>@Tzpvz{V}g%X*DaV<)P<2()q>XPvPjW@_b^teP=Y76U9`aOxyI$u!rEQx?Q7%c zzFk;=5Uw1!n0giAt#ad(ryRhzJqZDsJ^6ge2A>vS+F>gT{hL}-`MRQ+`WLEW&&l*|?Xq+sfHn1y75KV69cZKBnd_EWACpL1Q ztcDJy%seMs{U{Caw?MSaJFk598<#0*kI@LoN2)pSv}L;+WdlVMnB3ivc-Z$~hx_>K z2*4Y$6ur2{DZuK#Sn;qEDkk_xaaob6=R`+X+ci+hyCRN+W&Vy(=5vwMJ9^ZgZ+Nh^|4}&Sruk7~T10N^=_aD;aY4>0NU;Lw}Cr@E3s5Qk)0o;wmU2l42`tscG>amL(f8e5C$n(ip zYUCddKPX+v?n2T zOhXj~>lSOMV;Pm;v;Q54`$L}GqziY-E%;`%{hA;FbgpU7Z$6a<6nW4WuXWZ!&d3?uxCv@qt# zrq}D-c5M$0luLqpnV`Y-=5EMT0ELIGfFZeH9XsRAehHodDqQS8-@q{S;71`~Ww57H zB!fr0OqG^$Rdu7ImaC9(AsVvfg}h}E(477IL8bh_O=WiQA;)mTdtA)B zwY!x3g6r|RF0%ad)Y>WFLjNE@VMfMF`zHSH=eCCZz=sa}WOiWCKL~k(w>6NoRv6d! z*x}WUq3;IVf=YL#CW&#U;>a*$EB~=Stb%Tg@Q<$mS5rs?hE_N|9bCG;w5^2D@zXS4 zjPfi=Vx_MNaM8^y@%_>$rW|?$yPa1mX6yC1FaaQOdi1TTrqW&)>`c>NQ|j zz7Ih}P#6pp(tRM8e7!IXS=;&=Sf3t2P5aGJQlV|`l zFjTfHUCkg~9YNv|oP)$)L%4PbFsHSL(VEjJy-fJ=%{3C_>arOzLXG^{)Be1xG} zDDhLM4(|NU9$}9aS%&BBe=q%jo5j{+p05qYsrJXTcSF7C|1^_cO*`*NS^CG=E|y6*8~xNS@`C@B2EwC))$xhCBg#LX=0C6b=fVE>$Q|GpB338|j{fJEuO`ebw*Q`5 z|ClQf9OZjZAkX~O(QY2}pJ!|ED6Rbe?|GA9!;Z<=b;_aFNCDWq6hu&Z`R^+I_m2LK zj;_ZQ!2)~GxB^##uil?1(j5Q&>#IAz{#GH?>-k@gQ_B@Zi-X|sVmoXr+@DJ zW=j2U6Z79sd~XK3_!D;Q|27V-CH!mc|8od(QDEF(9(nSvB>rn60}-9|5067gi-=hG z1p~fv{Ndt8Xke=5^2(izCP92NZRje`|=8^%?f&?LP!d* zJi9c4pO|re?qhv|b2Fn`V{SotyIhklxzKF|=HCu#B$9G4kr{@eM3AdR(Tzs2sYSbl zF~~o^`g3nR>a@jOQ7=0Zs6dx@5-K;1t>rvXLh2i395T_uM~a11`i0bX+c(R>TZ!f` z3&4E4)P6yH>~`DCm+x-<1ewS&kKk9XTbMyVRQ3J}{DkW`X;+)S-=U=vnsL%ALdfLc zt#JM#$p43Ty*7bH{_I(+OO%cH21*1mKA`A~zOr0Lb3|xt-jvscrp&Tu{Qh`P9XiZ( zNi7xOc4SbIu6Id<++w!51{zVW@CIW325o%?lFbIvi{Ov?RQIetdECDC=0ZkwSDOac zr47lvTdPatE+tgFnJNPot~{Jdwfxt6$vs5*l~_e`IK_sRimtg->143FZqrR!HTNNL zWoF57JYBevK1;o%S`u`P-^|d2zl_gU=zs<>=!#Ba;kM#=#)(VSgc5kf5N=08XJyl@XZJV$ zk==p%K#q1(vQhucr?D)xZ+cqal(=DGg}6`+*dbeQ!*vA^GiNU>ie2A@?Zq!q2g7V+ z{7Be+q?Sg9%75{IC-{D~7=9Qbw|0%(OEZr$G&Z;`CQflH&>L)|_%vjMl=~jHY|F)K zHkBxEHeTSi;o#i})|R!3>Yb`d>{~g@*EjBLJWl*X_(A>8=G-UjmHFE`W!|mLC3=?z z+S}KA`e~DDGy+2{5`Q#OxA*WV)6Etw)JF4zJIam^uhYoXkuQvZ>>a^d%LiiM{eRrk$!fPP<+~AoJ)ffGhYseVbbmZV+PuBKgo=;t*>Z_%pDA+tlf5=B6&-;4q z{BdT&n9i$%h;73!dZ(F}PLxw`{LW{3xUNLEXAiYwe;z+pZb=xni9~@JW}zgdP+ey3 zIzXZwN8oa@y}zK*&Rt^OKVrXUAi`^Mcz4HIn6^I3Y{*=tgNv z6S};AJscLhcZJ>1-0nwIO@{UEZ#PE;Sd@f=@VU#^D^-v?)mE$Xkz|5WBw~W~RtiSr zzXV4~m|J$VP^GRMZkB{G?zXp5ToT=Zf6BYw7;?|(WPWs~CdqQ=eL1pLeC-V8$=5tZ zpMQ2x+I5856Y~PXhR7Tz?m;4e0%n1FZcdLEhjPd zs)`ydU5wG8#$wWu*J=3A(tJvGh@f5;$~$4LwQ%;~ltAGd0)7Od*q}P+9k!bsi$bgr zM##64wGjIlL*vhlAOAe*`2=u5zI2A6x43-ng8#3yaEu?#_ZBbo*c){6w;@_B}7Q8Eu`553)x`ERe|Asedc9H2UQAd?=H9( zue^P))z`e89x3$CNoz;aYnK+PI5Y=U@u#AKc_)d3L&bp_MOb;~`m5=M&WhDH%~e-O z?*E=!knj}m{=oq!cY>6G@n=S|J>0U(PSp=CU}*YXY&@NS-W9Qsj(ki#CN97_;$FG zb29^D_~1Qc_U+8uR&{&#TRFC*f^rQ@K;}^H4N4Xi3`7lMYxirac2PTxdmA|jeWP|Y zvuOSqqhZpIS;R|jcs`y!M0+|9_!Z!kU{m)i)m645Zp<4?sD=M__vc&LO4v8=lKX;k z#68$uV2JMz1{kA`v+^e-in(>2eLz`?s?5g+1020aMs<_j5fZ0NyZFou!10{r^~yQw zzb763nZ>QVaDu5P$4@q l-& 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�h)h8=ShA(5?`$`$>4eXt#3dCi;HE55n_)of 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 x|M$sb - Install `lstk`: - - ```bash - brew install localstack/tap/lstk - ``` + The `lstk` CLI provides the fastest initialization path by automating authentication and image management. + Ensure you have [installed](/aws/getting-started/installation/#install-lstk) `lstk` before starting LocalStack. Start LocalStack: @@ -51,59 +45,62 @@ The `lstk` CLI provides the fastest initialization path by automating authentica ```text ✔︎ LocalStack ready (containerId: 400b3e61f3c6) • Endpoint: localhost.localstack.cloud:4566 - • Web app: [https://app.localstack.cloud](https://app.localstack.cloud) + • Web app: https://app.localstack.cloud ``` :::note[Early Release] - `lstk` currently supports core lifecycle commands (start, stop, logs, status). For advanced features such as Cloud Pods or Extensions, use the [LocalStack CLI](/aws/getting-started/installation/#localstack-cli). + `lstk` currently supports core lifecycle commands (start, stop, logs, status). + To learn more about `lstk`, see the [lstk documentation](/aws/tooling/lstk/). + For advanced features such as Cloud Pods or Extensions, use the [LocalStack CLI](/aws/getting-started/installation/#localstack-cli). ::: - If you are using the full-featured LocalStack CLI, ensure you have [configured your auth token](/aws/getting-started/auth-token/) before starting: + If you are using the full-featured LocalStack CLI, ensure you have [installed](/aws/getting-started/installation/#install-localstack-cli) it and [configured your auth token](/aws/getting-started/auth-token/) before starting: + + Start LocalStack: ```bash localstack start ``` - + When the container is ready, you'll see these log lines: ```bash - __ _______ __ __ + __ _______ __ __ / / ____ _________ _/ / ___// /_____ ______/ /__ / / / __ \/ ___/ __ `/ /\__ \/ __/ __ `/ ___/ //_/ / /___/ /_/ / /__/ /_/ / /___/ / /_/ /_/ / /__/ ,< /_____/\____/\___/\__,_/_//____/\__/\__,_/\___/_/|_| - 💻 LocalStack CLI ${LOCALSTACK_VERSION} - 👤 Profile: default + - LocalStack CLI: 2026.5.1 + - Profile: default + - App: https://app.localstack.cloud - [12:47:13] starting LocalStack in Docker mode 🐳 localstack.py:494 - preparing environment bootstrap.py:1240 - configuring container bootstrap.py:1248 - starting container bootstrap.py:1258 - [12:47:15] detaching bootstrap.py:1262 + [14:37:38] starting LocalStack in Docker mode 🐳 localstack.py:542 + ... + Ready. ``` -## Step 2: Deploy serverless API +## Step 2: Deploy the Serverless API -Deploy the Lambda function and DynamoDB table using either the `awslocal` or `tflocal` wrappers. These tools automatically route commands to your local instance instead of AWS. +You can deploy the Lambda function and DynamoDB table using either our AWS CLI wrapper `awslocal` or our Terraform wrapper `tflocal`. +These tools automatically route AWS API calls to your LocalStack container, so you do not need AWS account credentials for this guide. - 1. Install the `awslocal` wrapper: + 1. Install the [`awslocal` wrapper](https://github.com/localstack/awscli-local): ```bash pip install awscli-local ``` - 2. Create the Lambda function source. - Execute the following to create a project directory and a Python handler: + 2. Create the Lambda function source. Execute the following to create a project directory, a function file and a Python handler: ```bash mkdir -p /tmp/localstack-demo @@ -147,7 +144,7 @@ Deploy the Lambda function and DynamoDB table using either the `awslocal` or `tf awslocal lambda wait function-active --function-name messages-api ``` - 5. Configure a public URL and retrieve the endpoint: + 5. Configure a function URL and retrieve the endpoint: ```bash awslocal lambda create-function-url-config \ @@ -165,15 +162,17 @@ Deploy the Lambda function and DynamoDB table using either the `awslocal` or `tf - 1. Install Terraform and the `tflocal` wrapper: + 1. Install the [`tflocal` wrapper](https://github.com/localstack/terraform-local): ```bash pip install terraform-local ``` - 2. Create a `main.tf` file in a new directory: + 2. Create a project directory and a `main.tf` file: - ```hcl + ```bash + mkdir -p /tmp/localstack-demo + cat > /tmp/localstack-demo/main.tf << 'TF' terraform { required_providers { aws = { source = "hashicorp/aws" } @@ -240,6 +239,8 @@ Deploy the Lambda function and DynamoDB table using either the `awslocal` or `tf output "function_url" { value = aws_lambda_function_url.messages_api.function_url } + TF + cd /tmp/localstack-demo ``` 3. Initialize and apply the configuration: @@ -260,35 +261,36 @@ Deploy the Lambda function and DynamoDB table using either the `awslocal` or `tf ## Step 3: Test the API -Send a POST request to store a message in the emulated DynamoDB table: +Send a POST request to store a message in the locally emulated DynamoDB table: ```bash curl -X POST "$LAMBDA_URL" \ -H "Content-Type: application/json" \ -d '{"message": "Hello, LocalStack!"}' - ``` You will get back a response: -```json -{ "id": "a1b2c3d4-...", "message": "Hello, LocalStack!" } +```json title="Output" +{ "id": "3e1b5cae-4386-447b-8567-f0615fdb0fff", "message": "Hello, LocalStack!" } ``` Retrieve all your messages: ```bash curl "$LAMBDA_URL" - ``` -The Lambda function executes within the local environment and interacts with the emulated DynamoDB service. Because no actual cloud resources are created, you won't incur any cloud costs or infrastructure changes. +The Lambda function executes within the local environment and interacts with the locally emulated DynamoDB service. +Because no actual cloud resources are created, you won't incur any real AWS cloud costs or infrastructure changes. ## Step 4: Inspect Resources View the state of your local infrastructure via the [LocalStack Web Application](https://app.localstack.cloud/). Navigate to the [Resource Browser](https://app.localstack.cloud/inst/default/status) to inspect your Lambda functions and DynamoDB tables in real-time. +![Inspect Resources using LocalStack Web Application](/images/aws/localstack-resource-browser.png) + ## Step 5: Clean Up Stop your LocalStack container to remove all emulated resources. LocalStack is ephemeral by default; stopping the instance clears the state. @@ -310,16 +312,15 @@ Stop your LocalStack container to remove all emulated resources. LocalStack is e {/* prettier-ignore-end */} -To persist state across restarts, see [Persistence](/aws/capabilities/state-management/persistence/) or [Cloud Pods](/aws/capabilities/state-management/cloud-pods/). +To persist resource state, like S3 buckets or DynamoDB tables, across restarts, check out our [state management tools](/aws/capabilities/state-management/). Remove the local files you created in this guide: ```bash rm -rf /tmp/localstack-demo - ``` ## Next steps -You have successfully deployed and tested a serverless API on your local workstation. Proceed to the [CI/CD guide](/aws/getting-started/ci-cd/) to learn how to integrate LocalStack into your automated testing pipelines and GitHub Actions workflows. - +You have successfully deployed and tested a serverless API on your local workstation. +Proceed to the [CI/CD guide](/aws/getting-started/ci-cd/) to learn how to integrate LocalStack into your automated continuous integration (CI) pipelines across a wide range of providers and platforms. From 35469fcc9fd880ac6ea27cb0db534f9f52953ac0 Mon Sep 17 00:00:00 2001 From: HarshCasper Date: Thu, 4 Jun 2026 00:23:09 +0530 Subject: [PATCH 26/37] Update installation getting started guide --- astro.config.mjs | 4 +- .../docs/aws/getting-started/installation.mdx | 154 +++++++++++------- .../aws/getting-started/local-development.mdx | 2 +- 3 files changed, 97 insertions(+), 63 deletions(-) diff --git a/astro.config.mjs b/astro.config.mjs index 90ed8d5f1..3d7d56aee 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -15,9 +15,9 @@ import react from '@astrojs/react'; import tailwindcss from '@tailwindcss/vite'; -// Fetch the latest release version from GitHub +// Fetch the latest LocalStack CLI release version from GitHub. const response = await fetch( - 'https://api.github.com/repos/localstack/localstack/releases/latest', + 'https://api.github.com/repos/localstack/localstack-cli/releases/latest', { headers: { Accept: 'application/vnd.github+json' }, }, diff --git a/src/content/docs/aws/getting-started/installation.mdx b/src/content/docs/aws/getting-started/installation.mdx index 92a28ee2c..116053d8f 100644 --- a/src/content/docs/aws/getting-started/installation.mdx +++ b/src/content/docs/aws/getting-started/installation.mdx @@ -1,6 +1,6 @@ --- title: Installation -description: Installation guides for LocalStack CLIs, container engines, and orchestration tools. +description: Install LocalStack with lstk, the LocalStack CLI, Docker, Docker Compose, or Helm. template: doc sidebar: order: 3 @@ -9,29 +9,33 @@ sidebar: import { Code, LinkButton, Tabs, TabItem } from '@astrojs/starlight/components'; import { LOCALSTACK_VERSION } from 'astro:env/server'; -LocalStack provides multiple installation paths depending on your development environment and requirements. We recommend using a CLI-based installation for the most consistent local development experience. +## Introduction -Choose the CLI that fits your workflow: use [`lstk`](#lstk) for a streamlined, non-Python setup, or [LocalStack CLI](#localstack-cli) for access to our complete feature set. +LocalStack provides multiple installation paths depending on your development environment and requirements. We recommend a CLI-based installation for the most consistent local startup experience. + +Choose the CLI that fits your workflow: use [`lstk`](#lstk) to install, authenticate, and start LocalStack with minimal setup, or use the [LocalStack CLI](#localstack-cli) when you need full-featured management commands for advanced workflows. ## lstk -`lstk` is a lightweight, Go-based binary that manages the authentication and container lifecycle in a single workflow. +`lstk` is a lightweight CLI for LocalStack that manages the authentication and container lifecycle in a single workflow. + +**Requirement:** You must have a working [Docker installation](https://docs.docker.com/get-docker/) before proceeding. :::caution[Early Release] `lstk` currently supports core lifecycle commands: `start`, `stop`, `logs`, and `status`. For advanced features like Cloud Pods or Extensions, use the [LocalStack CLI](#localstack-cli). ::: -**Install lstk** +### Install lstk - ```bash - brew install localstack/tap/lstk + ```bash + brew install localstack/tap/lstk ``` - ```bash - npm install -g @localstack/lstk + ```bash + npm install -g @localstack/lstk ``` @@ -39,19 +43,25 @@ Choose the CLI that fits your workflow: use [`lstk`](#lstk) for a streamlined, n -**Start LocalStack** +### Start lstk ```bash lstk start - ``` The first execution initiates a browser-based login flow. Subsequent starts use credentials stored in your system keyring. +### Update lstk + +```bash +lstk update +``` + +For more details, see the [lstk documentation](/aws/tooling/lstk/). -## LocalStack CLI +## LocalStack CLI -The LocalStack CLI is the primary tool for managing all LocalStack capabilities. +The LocalStack CLI provides the full command set for managing LocalStack capabilities such as Cloud Pods, Extensions, and advanced state workflows. **Requirement:** You must have a working [Docker installation](https://docs.docker.com/get-docker/) before proceeding. @@ -115,7 +125,7 @@ brew install localstack/tap/localstack-cli - + You can install the LocalStack CLI using Brew directly from our official LocalStack tap: @@ -140,7 +150,7 @@ or use the following curl command: @@ -159,14 +169,14 @@ Then extract the LocalStack CLI from the terminal: You can download the pre-built binary for your architecture using the link below: Intel (AMD64) -Then extract the archive and execute the binary in Powershell. +Then extract the archive and execute the binary in PowerShell. @@ -186,38 +196,35 @@ python3 -m pip install --upgrade localstack ``` :::note -To download a specific version of LocalStack, replace `` with the required version from [release page](https://github.com/localstack/localstack/releases). - +To download a specific version of LocalStack CLI, replace `` with the required version from [release page](https://github.com/localstack/localstack-cli/releases). ```bash python3 -m pip install localstack== ``` - ::: -:::tip[MacOS Sierra?] -If you have problems with permissions in MacOS X Sierra, install with: - +:::tip[macOS Sierra?] +If you have problems with permissions in macOS Sierra, install with: ```bash python3 -m pip install --user localstack ``` - ::: :::danger Do not use `sudo` or the `root` user when starting LocalStack. It should be installed and started entirely under a local non-root user. ::: - - - ### Start LocalStack CLI To verify that the LocalStack CLI was installed correctly, you can check the version in your terminal: - +```bash +localstack --version +``` + + You are all set! @@ -231,22 +238,25 @@ Once you've set up your auth token, you can start LocalStack with the following localstack start # start localstack in background with -d flag ``` -```bash - __ _______ __ __ +{/* prettier-ignore */} + ### Update LocalStack CLI @@ -276,70 +286,86 @@ Updating the LocalStack CLI using `localstack update localstack-cli` and `locals If it was installed using the pre-built binary or via Brew, please run the installation steps again to update to the latest version. ::: +For more details, see the [LocalStack CLI documentation](/aws/tooling/localstack-cli/). -## Container & Orchestration Methods +## Container and orchestration tools -Use these methods for CI pipelines, server environments, or manual container management. +Use these methods when you need explicit container configuration, want to run LocalStack alongside other services, or deploy LocalStack in CI and Kubernetes environments. +For everyday local development, `lstk` or the LocalStack CLI is usually simpler. ### Docker Compose -Recommended for CI and team environments. Create a `docker-compose.yml` with the following configuration: +Use Docker Compose when you want a reusable configuration file that can be shared across a team or checked into a project repository. +Create a `docker-compose.yml` with the following configuration: ```yaml services: localstack: - container_name: "${LOCALSTACK_DOCKER_NAME:-localstack-main}" - image: localstack/localstack-pro + container_name: '${LOCALSTACK_DOCKER_NAME:-localstack-main}' + image: localstack/localstack ports: - - "127.0.0.1:4566:4566" # Gateway - - "127.0.0.1:4510-4559:4510-4559" # External service range + - '127.0.0.1:4566:4566' # LocalStack Gateway + - '127.0.0.1:4510-4559:4510-4559' # external services port range + - '127.0.0.1:443:443' # LocalStack HTTPS Gateway environment: - - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN:?} + # Activate LocalStack for AWS: https://docs.localstack.cloud/getting-started/auth-token/ + - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN:?} # required for Pro + # LocalStack configuration: https://docs.localstack.cloud/references/configuration/ + - DEBUG=${DEBUG:-0} - PERSISTENCE=${PERSISTENCE:-0} volumes: - - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack" - - "/var/run/docker.sock:/var/run/docker.sock" - + - '${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack' + - '/var/run/docker.sock:/var/run/docker.sock' ``` Execute `docker compose up` to start. ### Docker CLI -Run the container directly via the Docker engine: +Use the Docker CLI for one-off starts or when you want to test a container configuration before moving it into Compose: ```bash docker run \ --rm -it \ -p 127.0.0.1:4566:4566 \ -p 127.0.0.1:4510-4559:4510-4559 \ - -v /var/run/docker.sock:/var/run/docker.sock \ + -p 127.0.0.1:443:443 \ -e LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN:?} \ - localstack/localstack-pro - + -v /var/run/docker.sock:/var/run/docker.sock \ + localstack/localstack ``` +:::note +The Docker Compose and Docker CLI examples above use the same runtime settings: + +- The `4566` port exposes the LocalStack Gateway. +- The `4510-4559` range exposes external service ports used by services that bind additional endpoints. +- The `443` port exposes the LocalStack HTTPS Gateway. +- The Docker socket mount is required for services that start additional containers, such as Lambda. +- Docker reuses a local image if one already exists. Pull explicitly or pin an image tag, such as `localstack/localstack:`, when you need reproducible CI or team environments. +- If you use Docker bridge networking, container name resolution may not work as expected from other containers. Prefer the default LocalStack networking setup unless you have a specific reason to customize it. +- Configuration variables can be prefixed with `LOCALSTACK_` in Docker. For instance, setting `LOCALSTACK_PERSISTENCE=1` is equivalent to `PERSISTENCE=1`. +For more details, see the [Docker images](/aws/capabilities/config/docker-images/), [configuration](/aws/capabilities/config/configuration/), and [networking](/aws/capabilities/networking/) documentation. +::: + ### Helm (Kubernetes) Deploy LocalStack to a Kubernetes cluster: ```bash -helm repo add localstack-repo [https://helm.localstack.cloud](https://helm.localstack.cloud) +helm repo add localstack-repo https://helm.localstack.cloud helm upgrade --install localstack localstack-repo/localstack - ``` -## Graphical User Interfaces (GUIs) +## Graphical user interfaces (GUIs) ### LocalStack Desktop Manage local instances via a standalone desktop application. [Download here](https://app.localstack.cloud/download). -### Docker Desktop Extension - -Install the [official extension](https://hub.docker.com/extensions/localstack/localstack-docker-desktop) to manage LocalStack directly from the Docker Desktop dashboard. - +### Docker Desktop extension +Install the [official extension](https://hub.docker.com/extensions/localstack/localstack-docker-desktop) to manage LocalStack directly from the Docker Desktop. ## Troubleshooting @@ -348,7 +374,7 @@ Install the [official extension](https://hub.docker.com/extensions/localstack/lo If you can successfully install LocalStack using `pip` but you cannot use it in your terminal, you most likely haven't set up your operating system's / terminal's `PATH` variable (in order to tell them where to find programs installed via `pip`). - If you are using Windows, you can enable the `PATH` configuration when installing Python, [as described in the official docs of Python](https://docs.python.org/3/using/windows.html#finding-the-python-executable). -- If you are using a MacOS or Linux operating system, please make sure that the `PATH` is correctly set up - either system wide, or in your terminal. +- If you are using a macOS or Linux operating system, please make sure that the `PATH` is correctly set up - either system wide, or in your terminal. As a workaround you can call the LocalStack CLI python module directly: @@ -374,9 +400,18 @@ DNS_ADDRESS=0 localstack start You can now avail logging output and error reporting using LocalStack logs. To access the logs, run the following command: + + ```bash localstack logs ``` + + +```bash +lstk logs +``` + + AWS requests are now logged uniformly in the INFO log level (set by default or when `DEBUG=0`). The format is: @@ -412,7 +447,6 @@ We have extensive network troubleshooting documentation available [here](/aws/ca If this does not solve your problem then please [reach out to LocalStack Support](/aws/help-support/get-help/). - ## Next steps Now that you've completed installation, proceed to the [Local Development Guide](/aws/getting-started/local-development) to start LocalStack and deploy a serverless API. This guide walks you through deploying a Lambda function backed by a DynamoDB table entirely on your local machine. diff --git a/src/content/docs/aws/getting-started/local-development.mdx b/src/content/docs/aws/getting-started/local-development.mdx index ce7e9c35c..b0f1f1ce5 100644 --- a/src/content/docs/aws/getting-started/local-development.mdx +++ b/src/content/docs/aws/getting-started/local-development.mdx @@ -30,7 +30,7 @@ Choose your preferred deployment method: **Terraform** or **AWS CLI**. The `lstk` CLI provides the fastest initialization path by automating authentication and image management. - Ensure you have [installed](/aws/getting-started/installation/#install-lstk) `lstk` before starting LocalStack. + Ensure you have [installed](/aws/getting-started/installation/#lstk) `lstk` before starting LocalStack. Start LocalStack: From b5a040b2493e76f906b4bdd133c9d143ac55d8ed Mon Sep 17 00:00:00 2001 From: HarshCasper Date: Thu, 4 Jun 2026 01:33:33 +0530 Subject: [PATCH 27/37] Update auth token getting started guide --- .../docs/aws/getting-started/auth-token.mdx | 124 ++++++++++-------- 1 file changed, 71 insertions(+), 53 deletions(-) diff --git a/src/content/docs/aws/getting-started/auth-token.mdx b/src/content/docs/aws/getting-started/auth-token.mdx index 295f71c35..c74389e92 100644 --- a/src/content/docs/aws/getting-started/auth-token.mdx +++ b/src/content/docs/aws/getting-started/auth-token.mdx @@ -1,110 +1,125 @@ --- title: Auth Token -description: Configure and manage LocalStack Auth Tokens for local development and CI/CD environments. +description: Configure and manage your LocalStack Auth Token to activate LocalStack and access licensed features. template: doc sidebar: order: 3 --- -import { Code, Tabs, TabItem } from '@astrojs/starlight/components'; +import { Tabs, TabItem } from '@astrojs/starlight/components'; -The Auth Token is a mandatory credential required to pull the `localstack-pro` image and activate service entitlements. It links your local instance to your workspace license and enables access to the full suite of emulated AWS services. +## What is an Auth Token? -## Token Types +An Auth Token is a mandatory credential required to start the LocalStack container and activate licensed features. It links your running LocalStack instance to your workspace license and unlocks the services and capabilities available to your account. + +You can manage Auth Tokens from the [Auth Tokens page](https://app.localstack.cloud/workspace/auth-tokens) in the LocalStack Web Application. + +:::danger[Credential security] +Auth Tokens provide access to your license and workspace. Do not commit tokens to version control. If a token is exposed, rotate it immediately in the LocalStack Web Application. +::: + +## Token types | Token Type | Scope | Use Case | | :--- | :--- | :--- | | **Developer Token** | Individual | Local development workstations. Managed per user. | | **CI Auth Token** | Workspace | Automated pipelines and shared runners. Managed by workspace admins. | -Manage both token types on the [Auth Tokens page](https://app.localstack.cloud/workspace/auth-tokens) in the LocalStack Web Application. - -:::danger[Credential Security] -Auth Tokens provide full access to your license and workspace. **Do not commit tokens to version control.** If a token is exposed, rotate it immediately via the Web Application to invalidate existing sessions. -::: - -## Configuration Methods +## Configure your token Authentication requirements vary based on your chosen execution method. -### 1. lstk (Automated) +### lstk + The `lstk` CLI automates the authentication lifecycle. On initial execution, it triggers a browser-based OAuth flow and stores the resulting token in your system keyring. No manual environment variable configuration is required. ```bash lstk start - ``` -### 2. LocalStack CLI +### LocalStack CLI -If you use the standard CLI, set your token using the `auth` command. This persists the credential in your local configuration. +If you use the LocalStack CLI, set your token with the `auth` command. This stores the token in your local configuration. -### 3. Docker & Docker Compose +```bash +localstack auth set-token +localstack start +``` -For direct container execution, inject the token as an environment variable. +### Docker and Docker Compose + +For direct container execution, inject the token as an environment variable. For complete startup examples, see the [Docker Compose](/aws/getting-started/installation/#docker-compose) and [Docker CLI](/aws/getting-started/installation/#docker-cli) installation options. **Docker CLI:** ```bash -docker run \ - --rm -it \ - -e LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN} \ - localstack/localstack-pro - +-e LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN} ``` **Docker Compose:** ```yaml -services: - localstack: - image: localstack/localstack-pro - environment: - - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN} - +environment: + - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN} ``` -## License Assignment +### CI environments -An Auth Token is only valid if a license is assigned to your user identity or workspace. +CI environments should use a dedicated CI Auth Token stored in your CI provider's secret manager. +For complete examples, see the [CI/CD guide](/aws/getting-started/ci-cd/). -**Assignment Workflow:** +## Verify activation -1. Navigate to the [Users & Licenses page](https://app.localstack.cloud/workspace/members). -2. Identify the target user in **Workspace Members**. -3. Select the appropriate **Member Role** (Admins receive full permissions by default). -4. Save the configuration to activate the license for that identity. +Verify the activation status by querying the LocalStack info endpoint: -:::note -An active Auth Token will fail to initialize the container if a valid license has not been assigned to the associated user. -::: + + + ```bash + curl http://localhost:4566/_localstack/info | jq + ``` -## Activation Verification + + -Verify the activation status by querying the LocalStack info endpoint: + ```powershell + Invoke-WebRequest -Uri http://localhost:4566/_localstack/info | ConvertFrom-Json + ``` -**Successful Activation Output:** + + -```json +```json title="Output" { "edition": "pro", "is_license_activated": true } - ``` +The `edition` field should be `pro`, and `is_license_activated` should be `true`. -## Next steps +## License assignment -You have successfully completed the Getting Started sequence! -Proceed to the [FAQ](/aws/getting-started/faq/) for troubleshooting common scenarios, or explore our [supported local AWS services](/aws/services/) to begin building. +An Auth Token can only activate licensed features if a license is assigned to the associated user or workspace. +1. Navigate to the [Users & Licenses page](https://app.localstack.cloud/workspace/members). +2. Identify the target user in **Workspace Members**. +3. Select the appropriate **Member Role**. +4. Save the configuration to activate the license for that identity. + +:::note +LocalStack cannot activate licensed features unless the token belongs to a user or workspace with an assigned license. +::: + +## Rotate a token + +Rotate an Auth Token if it has been exposed, shared accidentally, or stored in a place where it should not be. Go to the [Auth Tokens page](https://app.localstack.cloud/workspace/auth-tokens) and select the reset option for the affected token. + +After rotation, update every local shell, container configuration, or CI secret that used the old token. ## Troubleshooting -While using Auth Tokens, LocalStack demands a successful license activation for startup. -If the activation of the license is unsuccessful, LocalStack will exit and display error messages. +LocalStack requires successful license activation during startup. If activation fails, LocalStack exits and displays an error message: ```bash =============================================== @@ -119,11 +134,11 @@ Due to this error, Localstack has quit. LocalStack for AWS features can only be - If you want to continue using LocalStack without pro features you can set `ACTIVATE_PRO=0`. ``` -The key activation in LocalStack may fail for several reasons, and the most common ones are listed below in this section. +Activation may fail for several reasons, and the most common ones are listed below. -### Missing Credentials +### Missing credentials -You need to provide either an Auth Token to start the LocalStack for AWS image successfully. +You need to provide an Auth Token to start the LocalStack for AWS image successfully. You can find your Auth Token on the [Auth Tokens page](https://app.localstack.cloud/workspace/auth-tokens) in the LocalStack Web Application. If you are using the `localstack` CLI, you can set the `LOCALSTACK_AUTH_TOKEN` environment variable to your Auth Token or use the following command to set it up: @@ -132,12 +147,12 @@ If you are using the `localstack` CLI, you can set the `LOCALSTACK_AUTH_TOKEN` e localstack auth set-token ``` -### Invalid License +### Invalid license The issue may occur if there is no valid license linked to your account due to expiration or if the license has not been assigned. You can check your license status in the LocalStack Web Application on the [My License page](https://app.localstack.cloud/workspace/my-license). -### License Server Unreachable +### License server unreachable LocalStack initiates offline activation when the license server is unreachable, requiring re-activation every 24 hours. Log output may indicate issues with your machine resolving the LocalStack API domain, which can be verified using a tool like `dig`: @@ -152,3 +167,6 @@ Kindly reach out to your network administrator to safelist `localstack.cloud` do If you have any further problems concerning your license activation, or if the steps do not help, don't hesitate to [contact us](https://localstack.cloud/contact/). +## Next steps + +After configuring your Auth Token, continue to the [Local Development guide](/aws/getting-started/local-development/) to start LocalStack and deploy a local serverless API. From 0475773dd20f40751507449c38a1bdb3ec2638d5 Mon Sep 17 00:00:00 2001 From: HarshCasper Date: Thu, 4 Jun 2026 01:58:44 +0530 Subject: [PATCH 28/37] Update AI workflows getting started guide --- .../docs/aws/getting-started/ai-workflows.mdx | 89 ++++++++++++++----- 1 file changed, 69 insertions(+), 20 deletions(-) diff --git a/src/content/docs/aws/getting-started/ai-workflows.mdx b/src/content/docs/aws/getting-started/ai-workflows.mdx index 911918adb..f5fb3c32f 100644 --- a/src/content/docs/aws/getting-started/ai-workflows.mdx +++ b/src/content/docs/aws/getting-started/ai-workflows.mdx @@ -1,43 +1,92 @@ --- title: AI & Agent Workflows -description: Integrate LocalStack with AI coding assistants, MCP servers, and agent-driven infrastructure automation. +description: Use LocalStack with AI coding assistants, MCP clients, and agent-driven infrastructure workflows. template: doc sidebar: order: 6 --- -LocalStack provides a secure, emulated environment for developing and testing AI-assisted workflows. You can iterate on AI-generated infrastructure code and agentic deployment tasks without incurring cloud costs or risking production AWS environments by using a local cloud sandbox. +## Introduction -## Capability Map +LocalStack gives AI coding assistants a local AWS-compatible environment to work against. Instead of letting an agent experiment in a real AWS account, you can ask it to create infrastructure, deploy code, inspect logs, and test resources in LocalStack first. -| Use Case | Recommended Tooling | -| :--- | :--- | -| **AI Assistant Resource Management** | [LocalStack MCP Server](/aws/tooling/mcp-server/) | -| **Autonomous Infrastructure Deployment** | [LocalStack Skills](https://github.com/localstack/skills) | -| **Local IaC Validation** | LocalStack + `tflocal` / `cdklocal` / `awslocal` | +This is useful when you want to: +- Prototype AWS applications & infrastructure code from natural language prompts. +- Validate AI-generated Terraform, CDK, or AWS CLI commands before using a cloud account. +- Give an AI assistant a safe place to inspect resources, debug logs, and iterate on deployments. +- Use reusable agent instructions for LocalStack-aware infrastructure workflows. -## Model Context Protocol (MCP) Integration +## Common workflows -The LocalStack MCP Server connects compatible AI clients (such as Claude, Cursor, or Windsurf) to your local cloud environment. This integration allows AI agents to manage the full local cloud lifecycle, including container management, resource deployment, and log analysis. +There are three common ways to use LocalStack in AI-assisted development: -:::note[Official MCP Documentation] -For detailed configuration instructions, prerequisite checks, and the complete tool reference, read our [LocalStack MCP Server guide](/aws/tooling/mcp-server/). You don't need to start LocalStack manually before using MCP; agents can initialize the container using the management tools provided by the server. +- Use the [LocalStack MCP Server](/aws/tooling/mcp-server/) when your AI assistant supports MCP clients such as Cursor, Claude, Codex, or OpenCode. +- Use [LocalStack Skills](https://github.com/localstack/skills) when you want reusable agent instructions for deploying and testing AWS architectures against LocalStack. +- Use LocalStack with `tflocal`, `cdklocal`, or `awslocal` when you want the agent to generate infrastructure code or commands that you review and run locally. + +You do not need all three approaches to get started. If your editor supports MCP, start with the LocalStack MCP Server. Or, you can use Skills if you want reusable agent instructions. If not, ask your assistant to generate Terraform, CDK, or AWS CLI steps and run them with LocalStack's local wrappers. + +## Connect an MCP client + +The LocalStack MCP Server connects MCP-compatible clients to your LocalStack environment. Once configured, your AI assistant can use LocalStack tools to start the container, deploy infrastructure, run AWS CLI commands, inspect logs, manage state, and query resources. + +:::note +The MCP server runs locally and talks to your LocalStack instance. Your AI assistant is the MCP client. For setup instructions and the full tool reference, see the [LocalStack MCP Server guide](/aws/tooling/mcp-server/). ::: +All MCP server tools require a valid [Auth Token](/aws/getting-started/auth-token/) configured as `LOCALSTACK_AUTH_TOKEN`. + +## Use agent skills + +[LocalStack Skills](https://github.com/localstack/skills) provide reusable instructions for AI agents working with LocalStack. They help agents follow LocalStack-specific conventions when creating infrastructure, deploying resources, running tests, and inspecting local cloud state. + +Skills are most useful when you want the assistant to follow a repeatable workflow, for example: + +- Scaffold a local AWS application and deploy it to LocalStack. +- Convert an AWS architecture idea into Terraform or CDK that targets LocalStack first. +- Debug a failing local deployment by checking resources, logs, and configuration. +- Save or restore LocalStack state as part of an iterative development loop. + +Refer to the [LocalStack Skills repository](https://github.com/localstack/skills) for available skills and setup instructions. + +## Example prompt sequence + +After LocalStack and your preferred AI tooling are configured, you can use a sequence like this: + +```text +Create a Terraform application with an S3 bucket, a Lambda function, and a DynamoDB table. +Make it deployable to LocalStack with tflocal. +``` + +```text +Deploy the application to LocalStack and fix any errors from the deployment. +``` + +```text +Invoke the Lambda function locally, inspect the DynamoDB table, and summarize what resources were created. +``` + +```text +Add an integration test that verifies the Lambda writes an item to DynamoDB. +Run the test against LocalStack. +``` -## Agent-Driven Automation with Skills +This keeps the feedback loop local while still giving the assistant a realistic AWS-compatible target. -[LocalStack Skills](https://github.com/localstack/skills) provide pre-defined agent skill definitions for automating AWS architecture deployments. These skills allow agents to scaffold environments, iterate on architecture designs, and manage LocalStack state autonomously. +## Review before applying to AWS -Skills implementation scenarios: -- **Rapid Prototyping**: Scaffold new local environments without manual infrastructure coding. -- **Agent-First Development**: Establish LocalStack as a primary deployment target for autonomous agents. -- **Architecture Iteration**: Test complex architectural changes in a risk-free, local sandbox. +AI-generated infrastructure still needs review. Treat LocalStack as the first validation step, not as a replacement for code review, tests, or production deployment controls. -Refer to the [LocalStack Skills repository](https://github.com/localstack/skills) for available skill definitions and setup instructions. +Before applying changes to AWS, check that: +- The generated infrastructure matches your intended architecture. +- Resource names, IAM policies, and environment variables are appropriate for your project. +- Tests pass against LocalStack. +- You understand any changes the assistant made to application code or deployment configuration. ## Next steps -You have explored the integration patterns for AI and agent-driven development. Proceed to the [Auth Token guide](/aws/getting-started/auth-token/) to configure your licensing and unlock advanced LocalStack features. +- Configure the [LocalStack MCP Server](/aws/tooling/mcp-server/) if your AI assistant supports MCP. +- Review [LocalStack Skills](https://github.com/localstack/skills) for reusable agent workflows. +- Continue with the [Local Development guide](/aws/getting-started/local-development/) if you want a guided Lambda and DynamoDB example before adding AI tooling. From 72e835633a8c5e4d09517ba7925113be6548e5ef Mon Sep 17 00:00:00 2001 From: HarshCasper Date: Thu, 4 Jun 2026 07:50:12 +0530 Subject: [PATCH 29/37] Update CI getting started guide --- .../docs/aws/getting-started/ci-cd.mdx | 251 +++++++++++------- 1 file changed, 148 insertions(+), 103 deletions(-) diff --git a/src/content/docs/aws/getting-started/ci-cd.mdx b/src/content/docs/aws/getting-started/ci-cd.mdx index 6c2671b0f..b12d27f49 100644 --- a/src/content/docs/aws/getting-started/ci-cd.mdx +++ b/src/content/docs/aws/getting-started/ci-cd.mdx @@ -1,6 +1,6 @@ --- -title: CI/CD Integration -description: Implementation guides for LocalStack in automated pipelines, including GitHub Actions, Docker Compose, and state management. +title: CI Integration +description: Use LocalStack in CI pipelines to run integration tests against local AWS infrastructure. template: doc sidebar: order: 5 @@ -8,145 +8,190 @@ sidebar: import { Tabs, TabItem } from '@astrojs/starlight/components'; -Integrating LocalStack into CI/CD environments enables automated integration testing without cloud infrastructure costs or vendor dependency. CI configurations differ from local development environments in authentication methods and startup workflows. +## Introduction -Key operational differences in CI/CD include: -- **Authentication**: Use a dedicated CI Auth Token instead of a personal Developer token. -- **Initialization**: Execute LocalStack in non-interactive mode using Docker Compose, the Docker CLI, or specialized CI actions. -- **Isolation**: Initialize a fresh LocalStack instance for each job to ensure reproducible test results. -- **State Management**: Utilize Cloud Pods or state export/import commands to persist infrastructure across pipeline stages. +LocalStack helps you run integration tests in CI against emulated AWS infrastructure. Your pipeline starts LocalStack inside the CI job, deploys or prepares the resources your application needs, runs tests against the local endpoint, and then discards the environment when the job ends. -## Step 1: Configure CI Auth Token +## How LocalStack works in CI -Dedicated CI Auth Tokens are required for automated environments to ensure security and auditability. +A typical CI job with LocalStack follows this flow: -1. Navigate to the [Auth Tokens page](https://app.localstack.cloud/workspace/auth-tokens) in the LocalStack Web Application. -2. Generate a new **CI Auth Token**. -3. Store the token as a protected secret within your CI provider (e.g., `LOCALSTACK_AUTH_TOKEN`). +1. Check out your application code. +2. Start LocalStack in the CI runner. +3. Configure a CI Auth Token through the CI provider's secret manager. +4. Deploy test infrastructure with tools such as `awslocal`, `tflocal`, `cdklocal`, or your application's test harness. +5. Run integration tests against the LocalStack endpoint. +6. Collect logs, test reports, and artifacts from the job. -:::danger[Security Best Practice] -Never commit your auth tokens to source control. -Always inject tokens via your CI provider's secrets or environment variable system. -Rotate compromised tokens immediately via the Web Application. Old tokens are invalidated instantly. -::: +This gives every pipeline run a fresh AWS-compatible environment without creating cloud resources in an AWS account. -:::note -Read the [Auth Token guide](/aws/getting-started/auth-token/) for full details on token types and configuration. -::: +## What changes from local development -## Step 2: Start LocalStack in CI +CI runs are usually more constrained than local development: -Select the integration method compatible with your CI runner architecture. +- Use a dedicated **CI Auth Token** instead of a personal Developer Token. +- Store `LOCALSTACK_AUTH_TOKEN` as a protected CI secret. +- Start LocalStack non-interactively as part of the job. +- Treat the LocalStack container as ephemeral unless your workflow explicitly saves state. +- Export logs and test reports before the runner shuts down. + +Docker and Docker Compose are still common ways to run containers inside CI runners, but they are not CI tools by themselves. For container startup details, see the [Installation guide](/aws/getting-started/installation/#container-and-orchestration-tools). For provider-specific CI setup, use the integration guides below. + +## Choose your CI provider + +Start with the CI system you use. These snippets show the basic LocalStack startup shape for each provider; the linked guides include authentication, configuration, logs, state management, and provider-specific caveats. - Use the official GitHub Action to initialize LocalStack as a workflow step: ```yaml - # .github/workflows/integration-tests.yml - name: Integration Tests - on: [push, pull_request] + - name: Start LocalStack + uses: LocalStack/setup-localstack@main + with: + image-tag: 'latest' + install-awslocal: 'true' + env: + LOCALSTACK_AUTH_TOKEN: ${{ secrets.LOCALSTACK_AUTH_TOKEN }} + ``` + See the [GitHub Actions guide](/aws/integrations/continuous-integration/github-actions/) for the full setup. + + + + + ```yaml + version: '2.1' + orbs: + python: circleci/python@4.0.0 jobs: - test: - runs-on: ubuntu-latest + localstack-test: + machine: + image: ubuntu-2204:current steps: - - uses: actions/checkout@v4 - - - name: Start LocalStack - uses: LocalStack/setup-localstack@v0.2.2 - with: - image-tag: latest - install-awslocal: "true" - env: - LOCALSTACK_AUTH_TOKEN: ${{ secrets.LOCALSTACK_AUTH_TOKEN }} - - - name: Run tests - run: | - # Your test commands here, e.g.: - pip install awscli-local - awslocal s3 mb s3://integration-test-bucket - pytest tests/integration/ + - checkout + - run: + name: Install LocalStack CLI and awslocal + command: | + python3 -m pip install --user --upgrade pip + python3 -m pip install --user localstack awscli-local[ver1] + echo 'export PATH=$HOME/.local/bin:$PATH' >> "$BASH_ENV" + - run: + name: Start LocalStack + command: | + source "$BASH_ENV" + docker pull localstack/localstack:latest + localstack start -d + localstack wait -t 60 ``` - The `setup-localstack` action pulls the image, starts the container, and waits for LocalStack to be ready. + + See the [CircleCI guide](/aws/integrations/continuous-integration/circleci/) for the full setup. - - - Define LocalStack as a service in your `docker-compose.yml` for containerized environments: + ```yaml - services: - localstack: - container_name: localstack-main - image: localstack/localstack-pro - ports: - - "127.0.0.1:4566:4566" - - "127.0.0.1:4510-4559:4510-4559" - environment: - - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN:?} - volumes: - - "/var/run/docker.sock:/var/run/docker.sock" + image: python:3.9 + + definitions: + services: + docker: + memory: 2048 + + pipelines: + default: + - step: + name: Test LocalStack + services: + - docker + script: + - export DOCKER_SOCK=$DOCKER_HOST + - export AWS_ENDPOINT_URL="http://localhost.localstack.cloud:4566" + - echo "${BITBUCKET_DOCKER_HOST_INTERNAL} localhost.localstack.cloud " >> /etc/hosts + - pip install localstack awscli-local + - docker run -d --rm -p 4566:4566 -p 4510-4559:4510-4559 -e DOCKER_SOCK=tcp://${BITBUCKET_DOCKER_HOST_INTERNAL}:2375 -e DOCKER_HOST=tcp://${BITBUCKET_DOCKER_HOST_INTERNAL}:2375 --name localstack-main localstack/localstack + - localstack wait -t 60 ``` - Start the service and verify readiness before executing tests: + See the [Bitbucket Pipelines guide](/aws/integrations/continuous-integration/bitbucket/) for the full setup. + + + - ```bash - docker compose up -d localstack - # Wait for LocalStack to be ready - until curl -s http://localhost:4566/_localstack/health | grep -q '"running"'; do sleep 1; done + ```yaml + version: 0.2 + + phases: + pre_build: + commands: + - pip3 install localstack awscli + - docker pull public.ecr.aws/localstack/localstack:latest + - localstack start -d + - localstack wait -t 30 ``` - :::note - Mounting `/var/run/docker.sock` is required for Lambda emulation, which uses Docker to run function containers. - ::: + See the [CodeBuild guide](/aws/integrations/continuous-integration/codebuild/) for the full setup. + + + ```yaml + variables: + DOCKER_SOCK: tcp://docker:2375 + DOCKER_HOST: tcp://docker:2375 + DOCKER_TLS_CERTDIR: "" - - Initialize the container directly using the Docker engine: - - ```bash - docker run \ - --rm -d \ - --name localstack-main \ - -p 127.0.0.1:4566:4566 \ - -p 127.0.0.1:4510-4559:4510-4559 \ - -e LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN:?} \ - -v /var/run/docker.sock:/var/run/docker.sock \ - localstack/localstack-pro - - # Wait for readiness - until curl -s http://localhost:4566/_localstack/health | grep -q '"running"'; do sleep 1; done + services: + - name: localstack/localstack:latest + alias: localstack + - name: docker:dind + alias: docker + command: ["--tls=false"] ``` + + See the [GitLab CI guide](/aws/integrations/continuous-integration/gitlab-ci/) for the full setup. + + + + + ```yaml + language: python + + services: + - docker + + python: + - "3.8" + + before_install: + - python -m pip install localstack awscli-local[ver1] + - docker pull localstack/localstack + - localstack start -d + - localstack wait -t 30 + ``` + + See the [Travis CI guide](/aws/integrations/continuous-integration/travis-ci/) for the full setup. + -## Technical Comparison: Local vs. CI/CD +You can also start from the [CI integrations overview](/aws/integrations/continuous-integration/) if you want a broader explanation of the CI workflow. -| Feature | Local Development | CI/CD Environment | -| :--- | :--- | :--- | -| **Interface** | `lstk` or LocalStack CLI | Docker Compose / `docker run`, or `lstk --non-interactive` | -| **Authentication** | Browser-based or stored credentials | `LOCALSTACK_AUTH_TOKEN` environment variable | -| **Token Type** | Individual Developer Token | Dedicated CI Token | -| **State** | Persistent by choice | Ephemeral (standard) or Snapshotted (Cloud Pods) | -| **Startup Mode** | Interactive (TUI) (default `lstk`) | Non-interactive (Headless) (`docker compose`, `docker run -d`, `lstk --non-interactive`) | +## Authentication in CI -## State Persistence in CI +CI environments should use a CI Auth Token. Create one from the [Auth Tokens page](https://app.localstack.cloud/workspace/auth-tokens), then store it as `LOCALSTACK_AUTH_TOKEN` in your CI provider's secret manager. -While most pipelines favor ephemeral instances for clean test cycles, certain workflows require persisting infrastructure state across jobs or runners. +Do not commit tokens to your repository or write them directly into workflow files. For more details on token types and rotation, see the [Auth Token guide](/aws/getting-started/auth-token/). -- **[Cloud Pods](/aws/capabilities/state-management/cloud-pods/)**: Save or load snapshots using the `setup-localstack` action with the `state-backend: cloud-pods` configuration. -- **Snapshot Persistence Engine**: Enable `PERSISTENCE=1` and mount a host volume to retain data across container restarts on the same runner. -- **State Export/Import Commands**: Use `localstack state export` and `localstack state import` to pass infrastructure state via CI artifacts or caching mechanisms. +## State in CI -## Next steps +Most CI jobs should start with a clean LocalStack instance. A fresh instance makes test runs reproducible and avoids hidden dependencies between jobs. + +If your pipeline needs state across jobs or workflow stages, use one of the state management options documented outside this getting started page: -You have configured LocalStack for automated environments and explored various CI/CD integration patterns. Proceed to the [AI & Agent Workflows Guide](/aws/getting-started/ai-workflows/) to learn how to integrate LocalStack with AI coding assistants and automate infrastructure tasks. +- [Cloud Pods](/aws/capabilities/state-management/cloud-pods/) to save and restore named LocalStack state snapshots. +- [State export and import](/aws/capabilities/state-management/export-import-state/) to move state through artifacts or caches. +- [Persistence](/aws/capabilities/state-management/persistence/) when the same runner keeps a mounted LocalStack volume. -## Resources +## Next steps -- [GitHub Actions Integration](/aws/integrations/continuous-integration/github-actions/): Advanced workflows and configuration options. -- [CircleCI Guide](/aws/integrations/continuous-integration/circleci/): Implementation details for CircleCI environments. -- [GitLab CI Integration](/aws/integrations/continuous-integration/gitlab-ci/): Service-based setup for GitLab runners. -- [AWS CodeBuild](/aws/integrations/continuous-integration/codebuild/): Native AWS CI/CD integration. +After choosing your CI provider, continue with the matching integration guide and adapt the example to your test framework, infrastructure tooling, and CI runner model. From 96a03c6b0e8c1c8ddd74cf9946d069f2ca50618c Mon Sep 17 00:00:00 2001 From: HarshCasper Date: Thu, 4 Jun 2026 07:55:10 +0530 Subject: [PATCH 30/37] Fix getting started sidebar order --- src/content/docs/aws/getting-started/installation.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/aws/getting-started/installation.mdx b/src/content/docs/aws/getting-started/installation.mdx index 116053d8f..962817cd0 100644 --- a/src/content/docs/aws/getting-started/installation.mdx +++ b/src/content/docs/aws/getting-started/installation.mdx @@ -3,7 +3,7 @@ title: Installation description: Install LocalStack with lstk, the LocalStack CLI, Docker, Docker Compose, or Helm. template: doc sidebar: - order: 3 + order: 2 --- import { Code, LinkButton, Tabs, TabItem } from '@astrojs/starlight/components'; From 75b4bbd5e34626ff0d17fba55da9fd37f829f513 Mon Sep 17 00:00:00 2001 From: HarshCasper Date: Thu, 4 Jun 2026 08:10:33 +0530 Subject: [PATCH 31/37] Update getting started onboarding --- .../docs/aws/getting-started/index.mdx | 22 ++++++++++++++----- .../docs/aws/getting-started/installation.mdx | 2 ++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/content/docs/aws/getting-started/index.mdx b/src/content/docs/aws/getting-started/index.mdx index a639c333b..503b8b51c 100644 --- a/src/content/docs/aws/getting-started/index.mdx +++ b/src/content/docs/aws/getting-started/index.mdx @@ -20,20 +20,32 @@ LocalStack provides a cloud service emulator that runs within a single container LocalStack also provides advanced features for team collaboration and security, including [Cloud Pods](/aws/capabilities/state-management/cloud-pods/) for state management, [IAM policy enforcement](/aws/capabilities/security-testing/iam-policy-enforcement/), and [Chaos Engineering](/aws/capabilities/chaos-engineering/). -## Explore by deployment +## Start with the basics diff --git a/src/content/docs/aws/getting-started/installation.mdx b/src/content/docs/aws/getting-started/installation.mdx index 962817cd0..7d260f0d6 100644 --- a/src/content/docs/aws/getting-started/installation.mdx +++ b/src/content/docs/aws/getting-started/installation.mdx @@ -15,6 +15,8 @@ LocalStack provides multiple installation paths depending on your development en Choose the CLI that fits your workflow: use [`lstk`](#lstk) to install, authenticate, and start LocalStack with minimal setup, or use the [LocalStack CLI](#localstack-cli) when you need full-featured management commands for advanced workflows. +LocalStack for AWS features require an [Auth Token](/aws/getting-started/auth-token/) to activate your running instance. `lstk` handles authentication through a browser-based login flow, while the LocalStack CLI, Docker, and CI workflows can use `LOCALSTACK_AUTH_TOKEN`. + ## lstk `lstk` is a lightweight CLI for LocalStack that manages the authentication and container lifecycle in a single workflow. From 54f0ca872f7f5dde1e35956a434892ec6daf9a92 Mon Sep 17 00:00:00 2001 From: HarshCasper Date: Thu, 4 Jun 2026 08:11:16 +0530 Subject: [PATCH 32/37] Add getting started FAQ card --- src/content/docs/aws/getting-started/index.mdx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/content/docs/aws/getting-started/index.mdx b/src/content/docs/aws/getting-started/index.mdx index 503b8b51c..8b8b78ca0 100644 --- a/src/content/docs/aws/getting-started/index.mdx +++ b/src/content/docs/aws/getting-started/index.mdx @@ -53,6 +53,12 @@ LocalStack also provides advanced features for team collaboration and security, description: 'Integrate LocalStack with AI coding assistants via MCP or automate infrastructure tasks using LocalStack Skills.', href: '/aws/getting-started/ai-workflows/', + }, + { + title: 'FAQ', + description: + 'Frequently asked questions about LocalStack for AWS.', + href: '/aws/getting-started/faq/', } ]} client:load From b71518188c17eb8bed234adcf7fb9391030e65ea Mon Sep 17 00:00:00 2001 From: HarshCasper Date: Thu, 4 Jun 2026 09:27:48 +0530 Subject: [PATCH 33/37] simplify getting started --- src/content/docs/aws/getting-started/local-development.mdx | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/content/docs/aws/getting-started/local-development.mdx b/src/content/docs/aws/getting-started/local-development.mdx index b0f1f1ce5..3db38ede5 100644 --- a/src/content/docs/aws/getting-started/local-development.mdx +++ b/src/content/docs/aws/getting-started/local-development.mdx @@ -25,13 +25,12 @@ Choose your preferred deployment method: **Terraform** or **AWS CLI**. - A [LocalStack account](https://app.localstack.cloud/sign-up) and a valid [LocalStack Auth Token](/aws/getting-started/auth-token/). - Either [Terraform CLI](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) or [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) installed, depending on your preferred deployment method. +If you haven't installed LocalStack yet, follow the [installation guide](/aws/getting-started/installation/) to get started. + ## Step 1: Install and Start LocalStack - The `lstk` CLI provides the fastest initialization path by automating authentication and image management. - Ensure you have [installed](/aws/getting-started/installation/#lstk) `lstk` before starting LocalStack. - Start LocalStack: ```bash @@ -56,8 +55,6 @@ Choose your preferred deployment method: **Terraform** or **AWS CLI**. - If you are using the full-featured LocalStack CLI, ensure you have [installed](/aws/getting-started/installation/#install-localstack-cli) it and [configured your auth token](/aws/getting-started/auth-token/) before starting: - Start LocalStack: ```bash From 2bb60a278e988932bf4e1e0fc663af86f85958ae Mon Sep 17 00:00:00 2001 From: HarshCasper Date: Thu, 4 Jun 2026 09:58:41 +0530 Subject: [PATCH 34/37] Fix quickstart redirects --- public/_redirects | 6 ++++-- scripts/redirects/redirects_config.json | 7 ++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/public/_redirects b/public/_redirects index b53bb1d96..3b0b4a7a5 100644 --- a/public/_redirects +++ b/public/_redirects @@ -397,7 +397,8 @@ /tutorials/replicate-aws-resources-localstack-extension/ /aws/tutorials/replicate-aws-resources-localstack-extension 301 /user-guide/tools/localstack-sdk/python/ /aws/tooling/localstack-sdks/python 301 /user-guide/lambda-tools/hot-reloading/ /aws/tooling/lambda-tools/hot-reloading 301 -/getting-started/quickstart/ /aws/getting-started/quickstart 301 +/getting-started/quickstart/ /aws/getting-started/local-development/ 301 +/aws/getting-started/quickstart/ /aws/getting-started/local-development/ 301 /overview/ /aws 301 /user-guide/aws/glue/ /aws/services/glue 301 /getting-started/ /aws/getting-started 301 @@ -804,7 +805,8 @@ /tutorials/replicate-aws-resources-localstack-extension /aws/tutorials/replicate-aws-resources-localstack-extension 301 /user-guide/tools/localstack-sdk/python /aws/tooling/localstack-sdks/python 301 /user-guide/lambda-tools/hot-reloading /aws/tooling/lambda-tools/hot-reloading 301 -/getting-started/quickstart /aws/getting-started/quickstart 301 +/getting-started/quickstart /aws/getting-started/local-development/ 301 +/aws/getting-started/quickstart /aws/getting-started/local-development/ 301 /overview /aws 301 /user-guide/aws/glue /aws/services/glue 301 /getting-started /aws/getting-started 301 diff --git a/scripts/redirects/redirects_config.json b/scripts/redirects/redirects_config.json index 6f3580563..6ed8fdf08 100644 --- a/scripts/redirects/redirects_config.json +++ b/scripts/redirects/redirects_config.json @@ -1975,7 +1975,12 @@ }, { "old_link": "/getting-started/quickstart/", - "new_link": "/aws/getting-started/quickstart", + "new_link": "/aws/getting-started/local-development/", + "status_code": 301 + }, + { + "old_link": "/aws/getting-started/quickstart/", + "new_link": "/aws/getting-started/local-development/", "status_code": 301 }, { From c1c86b5004786a77366c9dbeb50b556009c40287 Mon Sep 17 00:00:00 2001 From: HarshCasper Date: Thu, 4 Jun 2026 10:05:24 +0530 Subject: [PATCH 35/37] Fix getting started next steps --- src/content/docs/aws/getting-started/ai-workflows.mdx | 2 +- src/content/docs/aws/getting-started/ci-cd.mdx | 2 +- src/content/docs/aws/getting-started/installation.mdx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/docs/aws/getting-started/ai-workflows.mdx b/src/content/docs/aws/getting-started/ai-workflows.mdx index f5fb3c32f..2150c4527 100644 --- a/src/content/docs/aws/getting-started/ai-workflows.mdx +++ b/src/content/docs/aws/getting-started/ai-workflows.mdx @@ -89,4 +89,4 @@ Before applying changes to AWS, check that: - Configure the [LocalStack MCP Server](/aws/tooling/mcp-server/) if your AI assistant supports MCP. - Review [LocalStack Skills](https://github.com/localstack/skills) for reusable agent workflows. -- Continue with the [Local Development guide](/aws/getting-started/local-development/) if you want a guided Lambda and DynamoDB example before adding AI tooling. +- Browse the [LocalStack for AWS services](/aws/services/) reference, or check the [Getting Started FAQ](/aws/getting-started/faq/) for common setup questions. diff --git a/src/content/docs/aws/getting-started/ci-cd.mdx b/src/content/docs/aws/getting-started/ci-cd.mdx index b12d27f49..1e338aba7 100644 --- a/src/content/docs/aws/getting-started/ci-cd.mdx +++ b/src/content/docs/aws/getting-started/ci-cd.mdx @@ -194,4 +194,4 @@ If your pipeline needs state across jobs or workflow stages, use one of the stat ## Next steps -After choosing your CI provider, continue with the matching integration guide and adapt the example to your test framework, infrastructure tooling, and CI runner model. +After choosing your CI provider, continue to [AI & Agent Workflows](/aws/getting-started/ai-workflows/) to learn how AI coding assistants can help generate, deploy, and test LocalStack-backed AWS applications. diff --git a/src/content/docs/aws/getting-started/installation.mdx b/src/content/docs/aws/getting-started/installation.mdx index 4d08b2b8b..49f367a01 100644 --- a/src/content/docs/aws/getting-started/installation.mdx +++ b/src/content/docs/aws/getting-started/installation.mdx @@ -451,4 +451,4 @@ If this does not solve your problem then please [reach out to LocalStack Support ## Next steps -Now that you've completed installation, proceed to the [Local Development Guide](/aws/getting-started/local-development) to start LocalStack and deploy a serverless API. This guide walks you through deploying a Lambda function backed by a DynamoDB table entirely on your local machine. +Now that you've completed installation, proceed to the [Auth Token guide](/aws/getting-started/auth-token/) to activate LocalStack and prepare your environment for local development. From f7541a7e7fc6787d03902a555a04168d17405785 Mon Sep 17 00:00:00 2001 From: HarshCasper Date: Thu, 4 Jun 2026 10:47:31 +0530 Subject: [PATCH 36/37] some minor changes --- .../docs/aws/getting-started/ci-cd.mdx | 16 ++++++- .../docs/aws/getting-started/index.mdx | 2 +- .../aws/getting-started/local-development.mdx | 43 ++++++++++--------- 3 files changed, 39 insertions(+), 22 deletions(-) diff --git a/src/content/docs/aws/getting-started/ci-cd.mdx b/src/content/docs/aws/getting-started/ci-cd.mdx index 1e338aba7..ca28e3d25 100644 --- a/src/content/docs/aws/getting-started/ci-cd.mdx +++ b/src/content/docs/aws/getting-started/ci-cd.mdx @@ -41,6 +41,10 @@ Docker and Docker Compose are still common ways to run containers inside CI runn Start with the CI system you use. These snippets show the basic LocalStack startup shape for each provider; the linked guides include authentication, configuration, logs, state management, and provider-specific caveats. +:::note +For brevity, these snippets show only the LocalStack startup shape. Apart from the GitHub Actions example, they assume your CI Auth Token is already exposed to the job as the `LOCALSTACK_AUTH_TOKEN` environment variable. Store it as a secret in your CI provider before running them, and see [Authentication in CI](#authentication-in-ci) below. +::: + @@ -135,10 +139,13 @@ Start with the CI system you use. These snippets show the basic LocalStack start ```yaml + stages: + - test + variables: - DOCKER_SOCK: tcp://docker:2375 DOCKER_HOST: tcp://docker:2375 DOCKER_TLS_CERTDIR: "" + LOCALSTACK_HOST: "localstack:4566" services: - name: localstack/localstack:latest @@ -146,6 +153,13 @@ Start with the CI system you use. These snippets show the basic LocalStack start - name: docker:dind alias: docker command: ["--tls=false"] + + localstack-test: + stage: test + image: python:3.11 + script: + - pip install awscli-local + - awslocal s3 mb s3://test-bucket ``` See the [GitLab CI guide](/aws/integrations/continuous-integration/gitlab-ci/) for the full setup. diff --git a/src/content/docs/aws/getting-started/index.mdx b/src/content/docs/aws/getting-started/index.mdx index 8b8b78ca0..68be6a723 100644 --- a/src/content/docs/aws/getting-started/index.mdx +++ b/src/content/docs/aws/getting-started/index.mdx @@ -65,5 +65,5 @@ LocalStack also provides advanced features for team collaboration and security, /> :::note -**Enterprise K8 Deployment:** LocalStack also supports execution within Kubernetes clusters via the Operator or Helm charts. This model enables dynamic scaling, environment isolation, and native orchestration. See our [Kubernetes Deployment guide](/aws/enterprise/kubernetes/) for more information. +**Enterprise Kubernetes Deployment:** LocalStack also supports execution within Kubernetes clusters via the Operator or Helm charts. This model enables dynamic scaling, environment isolation, and native orchestration. See our [Kubernetes Deployment guide](/aws/enterprise/kubernetes/) for more information. ::: diff --git a/src/content/docs/aws/getting-started/local-development.mdx b/src/content/docs/aws/getting-started/local-development.mdx index 3db38ede5..2f099b807 100644 --- a/src/content/docs/aws/getting-started/local-development.mdx +++ b/src/content/docs/aws/getting-started/local-development.mdx @@ -6,7 +6,8 @@ sidebar: order: 4 --- -import { Tabs, TabItem, Steps } from '@astrojs/starlight/components'; +import { Code, Tabs, TabItem, Steps } from '@astrojs/starlight/components'; +import { LOCALSTACK_AWS_VERSION } from 'astro:env/server'; ## Introduction @@ -27,7 +28,7 @@ Choose your preferred deployment method: **Terraform** or **AWS CLI**. If you haven't installed LocalStack yet, follow the [installation guide](/aws/getting-started/installation/) to get started. -## Step 1: Install and Start LocalStack +## Step 1: Install and start LocalStack @@ -63,26 +64,28 @@ If you haven't installed LocalStack yet, follow the [installation guide](/aws/ge When the container is ready, you'll see these log lines: - ```bash - __ _______ __ __ - / / ____ _________ _/ / ___// /_____ ______/ /__ - / / / __ \/ ___/ __ `/ /\__ \/ __/ __ `/ ___/ //_/ - / /___/ /_/ / /__/ /_/ / /___/ / /_/ /_/ / /__/ ,< - /_____/\____/\___/\__,_/_//____/\__/\__,_/\___/_/|_| - - - LocalStack CLI: 2026.5.1 - - Profile: default - - App: https://app.localstack.cloud - - [14:37:38] starting LocalStack in Docker mode 🐳 localstack.py:542 - ... - Ready. - ``` + {/* prettier-ignore */} + -## Step 2: Deploy the Serverless API +## Step 2: Deploy the serverless API You can deploy the Lambda function and DynamoDB table using either our AWS CLI wrapper `awslocal` or our Terraform wrapper `tflocal`. These tools automatically route AWS API calls to your LocalStack container, so you do not need AWS account credentials for this guide. @@ -281,14 +284,14 @@ curl "$LAMBDA_URL" The Lambda function executes within the local environment and interacts with the locally emulated DynamoDB service. Because no actual cloud resources are created, you won't incur any real AWS cloud costs or infrastructure changes. -## Step 4: Inspect Resources +## Step 4: Inspect resources View the state of your local infrastructure via the [LocalStack Web Application](https://app.localstack.cloud/). Navigate to the [Resource Browser](https://app.localstack.cloud/inst/default/status) to inspect your Lambda functions and DynamoDB tables in real-time. ![Inspect Resources using LocalStack Web Application](/images/aws/localstack-resource-browser.png) -## Step 5: Clean Up +## Step 5: Clean up Stop your LocalStack container to remove all emulated resources. LocalStack is ephemeral by default; stopping the instance clears the state. From 60eed52ea6edaa09ba58b9bf6e9288bf3d6d788d Mon Sep 17 00:00:00 2001 From: HarshCasper Date: Thu, 4 Jun 2026 11:00:46 +0530 Subject: [PATCH 37/37] fix macos installation commands --- .../docs/aws/getting-started/installation.mdx | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/content/docs/aws/getting-started/installation.mdx b/src/content/docs/aws/getting-started/installation.mdx index 49f367a01..d515d2059 100644 --- a/src/content/docs/aws/getting-started/installation.mdx +++ b/src/content/docs/aws/getting-started/installation.mdx @@ -138,7 +138,7 @@ brew install localstack/tap/localstack-cli

Alternative: Binary Download -You may download the binary for your architecture using the link below: +You may download the binary for your architecture using the links below: Intel (AMD64) + + Apple Silicon (ARM64) + + +or use the curl commands below: + +For Intel (AMD64): + + -or use the following curl command: +For Apple Silicon (ARM64):