From cbcccc570e5c4469bc9c7ef5a56478a23d7d117a Mon Sep 17 00:00:00 2001 From: gdz66601 Date: Mon, 21 Sep 2026 03:40:03 +0800 Subject: [PATCH] =?UTF-8?q?Revert=20"=E7=BB=9F=E4=B8=80=20SSH=20=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E5=8F=B0=E4=B8=8E=E4=B8=BB=E7=95=8C=E9=9D=A2=E8=A7=86?= =?UTF-8?q?=E8=A7=89=EF=BC=8C=E9=9A=94=E7=A6=BB=E4=B8=BB=E9=A2=98=E9=80=82?= =?UTF-8?q?=E9=85=8D=E5=B1=82"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 68e0ac1588c426a723341e3d2639c0488cf252b0. --- .github/workflows/deploy.yml | 21 +- .github/workflows/docs.yml | 45 - .gitignore | 3 - .hallmark/log.json | 9 - DEPLOYMENT.md | 115 +- README.md | 75 +- docs/.vitepress/config.ts | 98 - .../components/ScreenshotPlaceholder.vue | 29 - docs/.vitepress/theme/index.ts | 11 - docs/.vitepress/theme/style.css | 499 ---- docs/.vitepress/theme/tokens.css | 75 - docs/ZERO_TRUST.md | 22 +- docs/deploy/actions.md | 186 -- docs/deploy/api-token.md | 62 - docs/deploy/runtime-secrets.md | 71 - docs/deploy/troubleshooting.md | 80 - docs/deploy/verification.md | 87 - docs/deploy/zero-trust.md | 103 - docs/development/contributing.md | 42 - docs/development/docs-site.md | 59 - docs/development/local.md | 61 - docs/development/workspace-theme.md | 22 - docs/guide/overview.md | 48 - docs/guide/requirements.md | 61 - docs/index.md | 63 - docs/public/images/edgessh-dashboard-demo.png | Bin 206997 -> 0 bytes docs/public/screenshots/.gitkeep | 1 - .../public/screenshots/01-fork-repository.png | Bin 9754 -> 0 bytes .../02-cloudflare-api-token-permissions.png | Bin 83120 -> 0 bytes .../03-github-actions-variables.png | Bin 55232 -> 0 bytes .../screenshots/04-run-deploy-workflow.png | Bin 10578 -> 0 bytes .../screenshots/08-github-actions-secrets.png | Bin 55232 -> 0 bytes docs/reference/configuration.md | 56 - docs/reference/limits.md | 41 - docs/reference/screenshots.md | 52 - docs/reference/security.md | 73 - docs/usage/files-and-processes.md | 44 - docs/usage/hosts.md | 37 - docs/usage/terminal.md | 46 - docs/wrangler.toml | 3 - frontend/index.html | 10 +- frontend/src/main.ts | 1 - frontend/src/workspace-theme.css | 242 -- package-lock.json | 2008 +---------------- package.json | 13 +- scripts-tmp-local-index.html | 613 ----- scripts/prepare-deployment.mjs | 143 -- scripts/prepare-pages-project.mjs | 92 - scripts/sync-worker-secrets.mjs | 66 - src/accounts/crypto.ts | 29 +- src/accounts/hosts.ts | 11 +- src/accounts/http.ts | 15 +- tests/deployment.test.ts | 105 - tests/encryption.test.ts | 29 +- tests/hosts.test.ts | 146 -- tests/pages-deployment.test.ts | 56 - tests/workspace-theme.test.ts | 33 - wrangler.toml | 6 +- 58 files changed, 117 insertions(+), 5801 deletions(-) delete mode 100644 .github/workflows/docs.yml delete mode 100644 .hallmark/log.json delete mode 100644 docs/.vitepress/config.ts delete mode 100644 docs/.vitepress/theme/components/ScreenshotPlaceholder.vue delete mode 100644 docs/.vitepress/theme/index.ts delete mode 100644 docs/.vitepress/theme/style.css delete mode 100644 docs/.vitepress/theme/tokens.css delete mode 100644 docs/deploy/actions.md delete mode 100644 docs/deploy/api-token.md delete mode 100644 docs/deploy/runtime-secrets.md delete mode 100644 docs/deploy/troubleshooting.md delete mode 100644 docs/deploy/verification.md delete mode 100644 docs/deploy/zero-trust.md delete mode 100644 docs/development/contributing.md delete mode 100644 docs/development/docs-site.md delete mode 100644 docs/development/local.md delete mode 100644 docs/development/workspace-theme.md delete mode 100644 docs/guide/overview.md delete mode 100644 docs/guide/requirements.md delete mode 100644 docs/index.md delete mode 100644 docs/public/images/edgessh-dashboard-demo.png delete mode 100644 docs/public/screenshots/.gitkeep delete mode 100644 docs/public/screenshots/01-fork-repository.png delete mode 100644 docs/public/screenshots/02-cloudflare-api-token-permissions.png delete mode 100644 docs/public/screenshots/03-github-actions-variables.png delete mode 100644 docs/public/screenshots/04-run-deploy-workflow.png delete mode 100644 docs/public/screenshots/08-github-actions-secrets.png delete mode 100644 docs/reference/configuration.md delete mode 100644 docs/reference/limits.md delete mode 100644 docs/reference/screenshots.md delete mode 100644 docs/reference/security.md delete mode 100644 docs/usage/files-and-processes.md delete mode 100644 docs/usage/hosts.md delete mode 100644 docs/usage/terminal.md delete mode 100644 docs/wrangler.toml delete mode 100644 frontend/src/workspace-theme.css delete mode 100644 scripts-tmp-local-index.html delete mode 100644 scripts/prepare-deployment.mjs delete mode 100644 scripts/prepare-pages-project.mjs delete mode 100644 scripts/sync-worker-secrets.mjs delete mode 100644 tests/deployment.test.ts delete mode 100644 tests/hosts.test.ts delete mode 100644 tests/pages-deployment.test.ts delete mode 100644 tests/workspace-theme.test.ts diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index eeae2b1..a86dff5 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,10 +4,6 @@ on: push: branches: - main - paths-ignore: - - docs/** - - .github/workflows/docs.yml - - scripts/prepare-pages-project.mjs workflow_dispatch: concurrency: @@ -25,12 +21,6 @@ jobs: env: CLOUDFLARE_ACCOUNT_ID: ${{ vars.CLOUDFLARE_ACCOUNT_ID }} CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} - ACCESS_TEAM_DOMAIN: ${{ secrets.ACCESS_TEAM_DOMAIN }} - ACCESS_AUD: ${{ secrets.ACCESS_AUD }} - ENCRYPTION_KEY: ${{ secrets.ENCRYPTION_KEY }} - WORKER_NAME: ${{ vars.WORKER_NAME }} - D1_DATABASE_NAME: ${{ vars.D1_DATABASE_NAME }} - CUSTOM_DOMAIN: ${{ vars.CUSTOM_DOMAIN }} steps: - name: Check out repository uses: actions/checkout@v4 @@ -47,11 +37,8 @@ jobs: - name: Check project run: npm run check - - name: Prepare Cloudflare resources - run: npm run prepare:deploy + - name: Apply D1 migrations + run: npx wrangler d1 migrations apply DB --remote - - name: Sync Worker secrets - run: npm run deploy:secrets - - - name: Migrate database and deploy Worker - run: npm run deploy:worker + - name: Deploy Worker + run: npm run deploy diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml deleted file mode 100644 index df3e292..0000000 --- a/.github/workflows/docs.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: Deploy docs - -on: - push: - branches: - - main - paths: - - docs/** - - package.json - - package-lock.json - - scripts/prepare-pages-project.mjs - - .github/workflows/docs.yml - workflow_dispatch: - -concurrency: - group: docs-pages-deploy - cancel-in-progress: false - -permissions: - contents: read - -jobs: - deploy: - name: Deploy VitePress to Cloudflare Pages - runs-on: ubuntu-latest - timeout-minutes: 10 - env: - CLOUDFLARE_ACCOUNT_ID: ${{ vars.CLOUDFLARE_ACCOUNT_ID }} - CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} - DOCS_PROJECT_NAME: ${{ vars.DOCS_PROJECT_NAME }} - steps: - - name: Check out repository - uses: actions/checkout@v4 - - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version: 22.12.0 - cache: npm - - - name: Install dependencies - run: npm ci - - - name: Build and deploy documentation - run: npm run deploy:docs diff --git a/.gitignore b/.gitignore index 10afa8c..69b8cd0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,6 @@ node_modules/ dist/ .wrangler/ -docs/.vitepress/cache/ -docs/.vitepress/dist/ -wrangler.deploy.toml coverage/ *.log .dev.vars diff --git a/.hallmark/log.json b/.hallmark/log.json deleted file mode 100644 index eca26b8..0000000 --- a/.hallmark/log.json +++ /dev/null @@ -1,9 +0,0 @@ -[ - { - "date": "2026-09-20", - "macrostructure": "Workbench", - "theme": "Coral", - "enrichment": "real product capture", - "brief": "EdgeSSH VitePress deployment documentation" - } -] diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index 6de89c0..b86e7b3 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -1,7 +1,5 @@ # EdgeSSH 第一版:部署与验收 -面向部署者的最新分步教程、截图占位与故障排查统一维护在 [EdgeSSH 文档网站](https://edgessh-docs.pages.dev/deploy/actions)。本文件保留架构边界和维护者验收记录。 - ## 架构与边界 - 单管理员,无本地用户名、密码、注册、验证码或用户表。身份认证由 Cloudflare Zero Trust Access 完成。 @@ -17,49 +15,29 @@ | 名称 | 配置位置 | 含义 | | --- | --- | --- | -| `DB` | workflow 生成的 D1 binding | 主机资料数据库,首次自动创建、后续按名称复用 | +| `DB` | `wrangler.toml` 的 D1 binding | 主机资料数据库,优先复用已有资源 | | `SSH_SESSIONS` | `wrangler.toml` 的 Durable Object binding | SSH 会话隔离,保留现有类名及迁移历史 | | `ASSETS` | `wrangler.toml` 的静态资源 binding | 前端构建产物,不需要手动创建 | -| `ACCESS_TEAM_DOMAIN` | GitHub Actions Secret,同步为 Worker Secret | 团队域名,例如 `my-team.cloudflareaccess.com`,不含协议或路径 | -| `ACCESS_AUD` | GitHub Actions Secret,同步为 Worker Secret | 此 Access 应用的 Application Audience (AUD) Tag | -| `ENCRYPTION_KEY` | GitHub Actions Secret,同步为 Worker Secret | 32 字节安全随机数的标准 Base64 | +| `ACCESS_TEAM_DOMAIN` | Cloudflare Worker Secret | 团队域名,例如 `my-team.cloudflareaccess.com`,不含协议或路径 | +| `ACCESS_AUD` | Cloudflare Worker Secret | 此 Access 应用的 Application Audience (AUD) Tag | +| `ENCRYPTION_KEY` | Cloudflare Worker Secret | 32 字节安全随机数的标准 Base64 | | `CONNECT_TIMEOUT_MS` | 可选普通变量 | 建连超时;仓库默认 `10000`,通常不要额外配置 | -`DB`、`SSH_SESSIONS` 与 `ASSETS` 是绑定,不是环境变量。三项运行时值由 GitHub Actions 在部署时同步为 Worker Secret,无需进入 Worker 控制台重复填写。 +`DB`、`SSH_SESSIONS` 与 `ASSETS` 是绑定,不是环境变量。生产环境实际需要手动填写的运行时值只有三个 Worker Secret。 -### 用户填写总览 +## Cloudflare 控制台配置 -使用自定义域名完成正式部署时,一共填写 **6 个值**: +### 1. 创建 D1 数据库 -| 名称 | 填写位置 | 来源 | -| --- | --- | --- | -| `CLOUDFLARE_ACCOUNT_ID` | GitHub Actions Variable | Cloudflare 账户概览或 Worker 概览 | -| `CUSTOM_DOMAIN` | GitHub Actions Variable | 已接入当前 Cloudflare 账户的自定义域名 | -| `CLOUDFLARE_API_TOKEN` | GitHub Actions Secret | Cloudflare API Tokens 页面创建 | -| `ACCESS_TEAM_DOMAIN` | GitHub Actions Secret | Zero Trust Settings 中的 Team Domain | -| `ACCESS_AUD` | GitHub Actions Secret | Self-hosted Access 应用的 AUD Tag | -| `ENCRYPTION_KEY` | GitHub Actions Secret | 本机或可信密码管理器生成的 32 字节随机数 Base64 | - -以上 6 项是正式部署的完整必填清单。`WORKER_NAME` 和 `D1_DATABASE_NAME` 是可选的 GitHub Actions Variable,默认分别为 `edgessh` 和 `-accounts`。D1 数据库、数据库 ID、数据表、Worker 及 Custom Domain route 均由 workflow 创建或更新,不要求用户编辑 `wrangler.toml`。 - -## 准备 Cloudflare 身份与凭据 - -Cloudflare 控制台只用于创建 API Token 与 Zero Trust Access 应用。不要在控制台手工创建 D1、部署 Worker 或维护另一套 Worker Secret。 - -### 1. D1 自动初始化 - -无需在控制台创建 D1,也不要修改 `wrangler.toml` 中的占位 ID。workflow 会使用 `D1_DATABASE_NAME`,或默认的 `-accounts`,在目标账户中按精确名称查找数据库: - -1. 已存在同名数据库时,读取其 ID 并继续复用。 -2. 不存在时,通过 Cloudflare API 创建一次,再把新 ID 写入 runner 内的临时 Wrangler 配置。 -3. 使用该临时配置执行远程 migration,只添加项目所需 schema,不清空已有数据。 - -数据库 ID 不会写回仓库。改变 `D1_DATABASE_NAME` 会改用或创建另一个数据库,因此日常部署应保持名称稳定。 +1. 打开 Cloudflare Dashboard 的 D1 页面;新版界面通常位于 `Storage & databases > D1`,菜单名称可能随控制台更新而变化。 +2. 复用本项目已有数据库,或创建一个新的数据库;不要为每次部署重复创建。 +3. 将数据库名称和 ID 写入 `wrangler.toml` 的 `[[d1_databases]]`,binding 保持为 `DB`。 +4. 数据表不需要在控制台手动建立。GitHub Actions 会执行远程 migration,只添加项目所需 schema,不清空已有数据。 ### 2. 配置 Zero Trust Access 1. 进入 `Zero Trust > Access > Applications`,添加一个 `Self-hosted` 应用。 -2. 应用域名填写最终访问 EdgeSSH 的自定义域名,并保证该域名与 GitHub Actions 的 `CUSTOM_DOMAIN` Variable 一致。 +2. 应用域名填写最终访问 EdgeSSH 的自定义域名,并保证该域名与 `wrangler.toml` 的 route 一致。 3. 添加 Allow 策略,只包含管理员的明确邮箱或身份。不要使用 `Everyone`、`Bypass` 或允许整个邮箱域的宽泛规则。 4. 在 Zero Trust 的团队设置中找到 Team Domain,保存不带 `https://` 和路径的域名,例如 `my-team.cloudflareaccess.com`。 5. 在 Access 应用详情中复制 Application Audience (AUD) Tag。不要把应用 ID、Client ID 或策略 ID 当作 AUD。 @@ -81,59 +59,47 @@ Cloudflare 账户 ID 可在 Dashboard 的账户概览或 Worker 概览中复制 | 名称 | GitHub 类型 | 值 | | --- | --- | --- | | `CLOUDFLARE_ACCOUNT_ID` | Variable | Cloudflare 账户 ID | -| `CUSTOM_DOMAIN` | Variable | 自定义域名的纯主机名 | | `CLOUDFLARE_API_TOKEN` | Secret | 上一步创建的最小权限 API Token | -| `ACCESS_TEAM_DOMAIN` | Secret | Zero Trust Team Domain,不带协议或路径 | -| `ACCESS_AUD` | Secret | Self-hosted Access 应用的 AUD Tag | -| `ENCRYPTION_KEY` | Secret | 固定的 32 字节安全随机数 Base64 | -可选项放在必填项之后,第一次部署通常不要填写: +进入 `Actions > Deploy > Run workflow` 完成首次部署。workflow 会安装依赖、检查项目、迁移 D1 并创建或更新 Worker。首次运行时尚未配置运行时 Secret,受保护 API 暂时返回 503 属于预期现象。 -| 名称 | GitHub 类型 | 默认值 | -| --- | --- | --- | -| `WORKER_NAME` | 可选 Variable | `edgessh` | -| `D1_DATABASE_NAME` | 可选 Variable | `-accounts` | +### 5. 在 Worker 界面添加运行时 Secret -六项必填配置全部保存后,进入 `Actions > Deploy > Run workflow` 完成首次部署。workflow 会安装依赖、检查项目、创建或复用 D1、同步运行时 Secret、执行 migration,并创建或更新 Worker 与自定义域名。 - -### 5. 生成并保存运行时 Secret - -在首次部署前,将以下三项添加到 GitHub Actions 的 **Secrets**,不要添加到 Variables: +首次部署完成后,进入 `Workers & Pages > edgessh > Settings > Variables and Secrets`,依次添加以下三项,并将类型选择为 **Secret**: | 名称 | 填写内容 | | --- | --- | | `ACCESS_TEAM_DOMAIN` | Zero Trust Team Domain,不带协议和路径 | | `ACCESS_AUD` | Access 应用详情中的 Application Audience (AUD) Tag | -| `ENCRYPTION_KEY` | 32 字节安全随机数的标准 Base64,只在首次部署前生成 | +| `ENCRYPTION_KEY` | 32 字节安全随机数的标准 Base64,只在首次部署时生成 | -workflow 会校验三项 Secret 是否存在,并通过标准输入调用 Wrangler 的批量 Secret API;Secret 不会进入命令参数、临时配置或日志。不要为 `DB`、`SSH_SESSIONS` 或 `ASSETS` 创建同名变量。`CONNECT_TIMEOUT_MS` 已由 `wrangler.toml` 设置为 `10000`,只有确实需要调整 2,000 至 30,000 毫秒的建连超时时才在配置中修改。 +保存后按控制台提示部署新版本。不要在 GitHub Actions 中重复保存这三项,也不要为 `DB`、`SSH_SESSIONS` 或 `ASSETS` 创建同名变量。`CONNECT_TIMEOUT_MS` 已由 `wrangler.toml` 设置为 `10000`,只有确实需要调整 2,000 至 30,000 毫秒的建连超时时才在配置中修改。 `ENCRYPTION_KEY` 应由可信的密码管理器或本机安全随机数工具生成,解码后必须正好为 32 字节。不要使用普通密码、UUID、示例值或在线随机字符串网页。密钥丢失将无法解密现有资料;当前版本不支持直接轮换,后续部署必须复用原值。 -可在本机运行 `node -e "console.log(require('node:crypto').randomBytes(32).toString('base64'))"` 生成一次;只把输出保存到 Secret,命令本身不会把密钥写入项目文件。 - ## 部署顺序 -1. 确定自定义域名;如需覆盖默认值,再确定稳定的 Worker 名称与 D1 名称。同一 Cloudflare 账户内不要与无关项目重名。 -2. 配置 Access 与最小权限 API Token,再将部署凭据、三项运行时 Secret 和可选名称统一保存到 GitHub Actions。 -3. 手动运行一次 `Deploy` workflow,让 GitHub Actions 自动创建或复用 D1、同步 Worker Secret、执行 migration,并创建或更新 Worker。 -4. 以后只需推送到 `main`;workflow 会复用现有资源,并以 GitHub Actions 中的固定 Secret 自动发布,不需要再进入 Worker 控制台或在本地执行 Wrangler 命令。 -5. 通过实际 Access 入口验收。所有账号、主机与连接 API 均需 Access 保护;缺少 Access Secret 时部署会直接失败,不会发布一个待补配置的版本。 +1. 检查 Cloudflare 已有 Worker、D1 与 Access 应用,确认资源属于本项目,避免覆盖其他项目。 +2. 配置 D1、Access 与最小权限 API Token,再将两个部署值保存到 GitHub Actions。 +3. 手动运行一次 `Deploy` workflow,让 GitHub Actions 自动迁移 D1 并创建或更新 Worker。 +4. 在 Worker 的 `Variables and Secrets` 界面添加三个运行时 Secret,保存并部署。 +5. 以后只需推送到 `main`;workflow 会复用原有资源和 Secret 自动发布,不需要在本地执行 Wrangler 部署命令。 +6. 通过实际 Access 入口验收。所有账号、主机与连接 API 均需 Access 保护;缺少 Access Secret 时会返回 503,不能操作主机或连接 SSH。 密钥丢失将无法解密现有资料。更换密钥必须设计旧密钥解密、新密钥重加密的迁移,不可直接覆盖 Secret。当前版本不提供自动轮换。更换 Access 团队或身份导致 `sub` 改变时,也需要显式的数据迁移。 ### GitHub Actions -`.github/workflows/deploy.yml` 在推送到 `main` 或手动触发时依次执行安装、项目检查、D1 幂等初始化、远程 migration 与 Worker 部署。生产部署使用并发锁串行执行,避免初始化、迁移和 Worker 版本交错。 +`.github/workflows/deploy.yml` 在推送到 `main` 或手动触发时依次执行安装、项目检查、远程 D1 迁移与 Worker 部署。生产部署使用并发锁串行执行,避免迁移和 Worker 版本交错。 -`Deploy` workflow 使用“用户填写总览”中的 6 项必填配置。资源名称仍是可选 Variable: +仓库只需配置两个 Actions 值: -| 名称 | 默认值 | -| --- | --- | -| `WORKER_NAME` | `edgessh` | -| `D1_DATABASE_NAME` | `-accounts` | +| 名称 | 配置位置 | 要求 | +| --- | --- | --- | +| `CLOUDFLARE_ACCOUNT_ID` | Actions Variable | 目标 Cloudflare 账户 ID | +| `CLOUDFLARE_API_TOKEN` | Actions Secret | 限定到目标账户,并具备 Workers 部署与 D1 迁移权限 | -三个运行时 Secret 只保存在 GitHub Actions Secrets 与 Cloudflare Worker Secrets 中。workflow 每次部署都会从 Actions 环境读取并幂等同步,用户无需打开 Cloudflare Worker 的 `Variables and Secrets` 页面;不要把本地 `.dev.vars` 或手动 `wrangler secret put` 作为普通用户的生产配置流程。 +三个运行时 Worker Secret 不进入 GitHub Actions,统一在 Cloudflare Worker 的 `Variables and Secrets` 界面管理;日常自动部署只复用 Cloudflare 中已有值。不要把本地 `.dev.vars` 或 `wrangler secret put` 作为普通用户的生产配置流程。 ## 验收清单(5.6 SOL 执行) @@ -157,10 +123,19 @@ workflow 会校验三项 Secret 是否存在,并通过标准输入调用 Wrang - 首页为中文;原 SSH 工作台保留中英文切换。 - 国旗使用本地 `flag-icons` SVG(MIT,许可证随静态资源部署),在 Windows 上也显示实际旗帜,不依赖 emoji 字体。 -## 部署后验收 +## 2026-09-19 线上部署记录 -- 仓库中的 `wrangler.toml` 只包含 D1 占位 ID,不包含维护者账户的资源 ID 或固定自定义域名。 -- workflow 按 `D1_DATABASE_NAME` 在部署者自己的账户内查找或创建 D1,把真实 ID 仅写入 runner 内已忽略的 `wrangler.deploy.toml`,再执行 migration 与 Worker 部署。 -- workflow 使用必填的 `CUSTOM_DOMAIN`,为部署者自己的域名创建或更新 Custom Domain。 -- 首次部署后确认 D1 中存在 `hosts` 与 `d1_migrations` 表,再通过 Access 登录,完成主机新增、刷新后恢复、编辑和删除验收。 -- 账号、主机、凭据与 SSH 接口始终校验 Access JWT;`workers.dev` 不能绕过应用层认证。 +- 正式入口:`https://ssh.dltwcnm.ccwu.cc` +- D1:`edgessh-accounts`(`2c1b7a95-a5d6-4a72-a8d2-4132b74aa268`) +- D1 schema:`hosts`、`d1_migrations`;记录数分别为 0、1 +- 活动版本:由 GitHub Actions 的 `Deploy` workflow 自动发布,当前状态以 Actions 运行记录与 Cloudflare 控制台为准 +- Secret 名称:`ENCRYPTION_KEY`、`ACCESS_TEAM_DOMAIN`、`ACCESS_AUD`;本次部署未读取或覆盖任何运行时 Secret +- 无会话 Smoke:正式入口 `/` 与 `/api/auth/me` 均返回 Access 302,TLS 正常;未记录重定向地址、Team Domain、AUD、JWT、Cookie 或 Secret 值 +- 诊断入口:`workers.dev` 已开启,仅额外公开固定 `8.8.8.8` 的定位链路检查;账号、主机、凭据与 SSH 等接口仍必须通过 Access JWT 校验 +- 待验收:需要用户登录 Access 后验收账号 API,并使用真实授权 SSH 目标验收终端、SFTP 与进程面板 + +## 自定义域名 + +- 正式入口:`https://ssh.dltwcnm.ccwu.cc` +- `workers.dev` 作为诊断入口保留;Worker 仍在应用层强制校验所有生产账号与连接 API,不允许绕过自定义域名上的 Access 策略。 +- Access 应用、策略与三个运行时 Secret 均由用户在 Cloudflare 控制台维护;GitHub Actions 只负责迁移与部署代码。 diff --git a/README.md b/README.md index cc39003..63764ff 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Apache 2.0

-[文档网站](https://edgessh-docs.pages.dev) · [Actions 部署](https://edgessh-docs.pages.dev/deploy/actions) · [功能特性](#功能特性) · [界面预览](#界面预览) · [本地开发](#本地开发) · [安全与限制](#安全与限制) +[功能特性](#功能特性) · [界面预览](#界面预览) · [快速开始](#快速开始) · [本地开发](#本地开发) · [安全与限制](#安全与限制) @@ -32,18 +32,6 @@ - - - - - -
- EdgeChat
- 基于 Cloudflare 的开源自部署团队聊天系统 -
- 查看开源项目 → -
- ## 功能特性 @@ -124,9 +112,9 @@ EdgeSSH 没有独立的本地登录系统,正式入口必须先经过 Cloudfla 2. 添加一条 **Allow(允许)** 策略,使用 **Include > Emails** 明确填写管理员邮箱;不要使用 `Everyone(所有人)` 或 `Bypass(绕过)`。 3. 选择 **Identity Provider(标识提供程序)**。个人部署可使用 **One-time PIN(一次性 PIN)**;新建 Zero Trust 组织若没有该选项,需要先到 **Integrations(集成)> Identity providers(标识提供程序)** 手动添加。 4. 从 Access 应用中取得 **Application Audience (AUD) Tag(应用程序受众 (AUD) 标签)**,并从 Zero Trust **Settings(设置)** 取得 **Team Domain(团队域)**。 -5. 将它们分别保存为 GitHub Actions Secret `ACCESS_AUD` 与 `ACCESS_TEAM_DOMAIN`,由 `Deploy` workflow 同步为 Worker Secret。 +5. 将它们分别写入 `ACCESS_AUD` 与 `ACCESS_TEAM_DOMAIN` Worker Secret。 -完整的控制台点击步骤、OTP 配置、参数获取和故障排查见 **[Cloudflare Zero Trust 配置指南](https://edgessh-docs.pages.dev/deploy/zero-trust)**。 +完整的控制台点击步骤、OTP 配置、参数获取和故障排查见 **[Cloudflare Zero Trust 配置指南](docs/ZERO_TRUST.md)**。 ### 获取项目 @@ -141,62 +129,37 @@ npm ci > [!IMPORTANT] > 本项目面向**单管理员**使用。Access 策略应仅允许管理员的明确身份,不要配置 Everyone 或 Bypass。缺少 Access 配置时,受保护 API 会拒绝访问,不会降级为匿名网关。 -1. 在 GitHub Actions 配置 Cloudflare 账户 ID、API Token 和三项运行时 Secret;Worker 名称、D1 名称与自定义域名通过仓库 Variable 设置,不需要修改 `wrangler.toml`。 -2. 若使用自定义域名,在 Zero Trust 控制台为同一域名创建 Self-hosted Access 应用,只允许管理员的明确邮箱或身份,并记下 Team Domain 与 Application Audience (AUD) Tag。 -3. 手动运行一次 `Deploy` workflow。它会按名称查找 D1,不存在时自动创建,通过 Wrangler 同步运行时 Secret,随后执行 migration 并创建或更新 Worker;以后推送到 `main` 会复用同一资源更新部署。 -4. 通过 Access 入口登录并完成验收;无需再进入 Worker 控制台补填环境变量。 +1. 在 Cloudflare 控制台复用或创建 D1 数据库,并调整 `wrangler.toml` 中的 Worker 名称、自定义域名与 D1 `database_id`,**不要直接使用仓库中原部署环境的资源 ID**。 +2. 在 Zero Trust 控制台创建 Self-hosted Access 应用,只允许管理员的明确邮箱或身份,并记下 Team Domain 与 Application Audience (AUD) Tag。 +3. 在 GitHub 配置一个 Actions Variable 和一个 Actions Secret,首次运行 `Deploy` workflow;它会自动检查项目、迁移 D1 并创建或更新 Worker。 +4. Worker 首次出现后,在 Cloudflare 控制台的 `Workers & Pages > 你的 Worker(默认 edgessh)> Settings > Variables and Secrets` 中添加三个运行时 Secret。保存并部署这些设置后即可通过 Access 入口验收。 | 配置 | 类型与位置 | 用途 | | --- | --- | --- | -| `DB` | 部署时生成的 D1 binding | 保存加密主机资料;数据库首次自动创建、后续按名称复用 | +| `DB` | `wrangler.toml` 中的 D1 binding | 保存加密主机资料 | | `SSH_SESSIONS` | `wrangler.toml` 中的 Durable Object binding | 隔离 SSH 会话 | | `ASSETS` | `wrangler.toml` 中的静态资源 binding | 提供前端资源 | -| `ACCESS_TEAM_DOMAIN` | GitHub Actions Secret,同步为 Worker Secret | Access 团队域名,如 `my-team.cloudflareaccess.com`,不含协议和路径 | -| `ACCESS_AUD` | GitHub Actions Secret,同步为 Worker Secret | Access 应用的 Application Audience (AUD) Tag | -| `ENCRYPTION_KEY` | GitHub Actions Secret,同步为 Worker Secret | 32 字节安全随机密钥的标准 Base64 | +| `ACCESS_TEAM_DOMAIN` | Cloudflare Worker Secret | Access 团队域名,如 `my-team.cloudflareaccess.com`,不含协议和路径 | +| `ACCESS_AUD` | Cloudflare Worker Secret | Access 应用的 Application Audience (AUD) Tag | +| `ENCRYPTION_KEY` | Cloudflare Worker Secret | 32 字节安全随机密钥的标准 Base64 | | `CONNECT_TIMEOUT_MS` | 可选普通变量 | TCP 建连超时;仓库已设为 `10000`,通常无需填写 | -生产运行时的 `ACCESS_TEAM_DOMAIN`、`ACCESS_AUD` 与 `ENCRYPTION_KEY` 统一保存在 GitHub Actions Secrets 中,workflow 会在部署时将它们同步为 Worker Secret。`DB`、`SSH_SESSIONS` 与 `ASSETS` 是部署生成的绑定,不是环境变量;其中 D1 数据库资源由 workflow 单独确保存在。`CONNECT_TIMEOUT_MS` 已有默认配置,也无需重复添加。 +生产运行时只需在 Cloudflare 控制台填写 `ACCESS_TEAM_DOMAIN`、`ACCESS_AUD` 与 `ENCRYPTION_KEY` 三个 Worker Secret。`DB`、`SSH_SESSIONS` 与 `ASSETS` 是部署时创建的绑定,不是环境变量;`CONNECT_TIMEOUT_MS` 已有默认配置,也无需重复添加。 -**首次部署才生成 `ENCRYPTION_KEY`,后续部署始终复用同一个 GitHub Secret。** 丢失或直接替换密钥会导致已有资料无法解密。不要把密钥保存为 GitHub Variable,也不要写入源码、`wrangler.toml`、日志或提交记录。 +**首次部署才生成 `ENCRYPTION_KEY`,后续部署始终复用原值。** 丢失或直接替换密钥会导致已有资料无法解密。密钥只粘贴到 Cloudflare 的 Secret 输入框,不要写入源码、`wrangler.toml`、GitHub Actions 或提交记录。 -完整配置顺序、安全边界与验收清单见 [VitePress 部署指南](https://edgessh-docs.pages.dev/deploy/actions)。 +完整配置顺序、安全边界与验收清单见 [部署指南](DEPLOYMENT.md)。 ### GitHub Actions 自动部署 -仓库内置的 `Deploy` workflow 会在推送到 `main` 后自动检查、准备 D1、执行 migration 并部署,也可在 Actions 页面手动触发。首次使用前,在仓库的 `Settings > Secrets and variables > Actions` 中配置: +仓库内置的 `Deploy` workflow 会在推送到 `main` 后自动检查、迁移 D1 并部署,也可在 Actions 页面手动触发。首次使用前,在仓库的 `Settings > Secrets and variables > Actions` 中配置: -#### 用户需要填写的内容 - -使用自定义域名完成正式部署时,用户一共需要在 GitHub Actions 中填写 **6 个值**:2 个 Variable 和 4 个 Secret。 - -| 名称 | 填写位置 | 内容 | +| 名称 | GitHub 配置类型 | 用途 | | --- | --- | --- | -| `CLOUDFLARE_ACCOUNT_ID` | GitHub Actions Variable | Cloudflare 账户 ID | -| `CUSTOM_DOMAIN` | GitHub Actions Variable | 自定义域名的纯主机名,例如 `ssh.example.com` | -| `CLOUDFLARE_API_TOKEN` | GitHub Actions Secret | 具备 Workers、D1 Edit 和目标 Zone 权限的 API Token | -| `ACCESS_TEAM_DOMAIN` | GitHub Actions Secret | Zero Trust Team Domain,不含协议和路径 | -| `ACCESS_AUD` | GitHub Actions Secret | Access 应用的 Application Audience (AUD) Tag | -| `ENCRYPTION_KEY` | GitHub Actions Secret | 32 字节安全随机数的标准 Base64 | +| `CLOUDFLARE_ACCOUNT_ID` | Variable | Cloudflare 账户 ID | +| `CLOUDFLARE_API_TOKEN` | Secret | 具备 Workers 部署和 D1 迁移权限的 API Token | -#### 可选配置 - -| 名称 | 类型 | 默认值 | -| --- | --- | --- | -| `WORKER_NAME` | GitHub Actions Variable | `edgessh` | -| `D1_DATABASE_NAME` | GitHub Actions Variable | `-accounts` | - -这两个名称通常保持默认值即可,不计入上述 6 个必填值。用户不需要填写 D1 ID、手动创建数据库、进入 Worker 控制台保存 Secret 或修改 `wrangler.toml`。 - -完整操作顺序: - -1. Fork 仓库,并确保准备使用的自定义域名已经接入 Cloudflare。 -2. 创建部署用 API Token,在 GitHub 填写 `CLOUDFLARE_ACCOUNT_ID`、`CLOUDFLARE_API_TOKEN` 与 `CUSTOM_DOMAIN`。 -3. 在 Zero Trust 创建绑定同一域名的 Self-hosted Access 应用,只允许管理员身份,并取得 Team Domain 与 AUD;生成一次加密密钥,然后将 `ACCESS_TEAM_DOMAIN`、`ACCESS_AUD` 与 `ENCRYPTION_KEY` 保存为 GitHub Actions Secret。 -4. 在 GitHub 的 `Actions > Deploy` 手动运行一次 workflow;它会自动创建或复用 D1、同步 Worker Secret、执行 migration、创建或更新 Worker,并绑定自定义域名。 -5. 访问自定义域名,通过 Access 登录并完成账号 API 与 SSH 功能验收。以后推送到 `main` 会自动复用现有资源更新部署。 - -标准部署要求上表 6 项全部填写。创建 API Token 时,可使用 Cloudflare 的 `Edit Cloudflare Workers` 模板并补充 `D1: Edit`,再将 Account 与 Zone Resources 限制到实际使用的账户和域名。workflow 不会把解析出的数据库 ID 或 Secret 写回仓库:数据库 ID 只进入 runner 内的临时配置,Secret 只经标准输入交给 Wrangler。部署、D1 初始化与运行时 Secret 同步均由 Action 完成,不需要进入 Cloudflare Worker 控制台手工发布或维护另一套 Secret。 +Action 只需要这两项部署凭据。创建 API Token 时,可使用 Cloudflare 的 `Edit Cloudflare Workers` 模板并补充 `D1: Edit`,再将 Account 与 Zone Resources 限制到实际使用的账户和域名;该模板会覆盖 Worker 与自定义域名部署所需权限。`ACCESS_TEAM_DOMAIN`、`ACCESS_AUD` 与 `ENCRYPTION_KEY` 只保存在 Cloudflare Worker Secrets 中,普通部署不会读取或覆盖它们。API Token 属于敏感信息,必须使用 GitHub Secret,不能保存为普通 Variable。 ## 本地开发 diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts deleted file mode 100644 index d54ecab..0000000 --- a/docs/.vitepress/config.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { defineConfig } from 'vitepress'; - -const repository = 'https://github.com/aozorae/EdgeSSH'; - -export default defineConfig({ - lang: 'zh-CN', - title: 'EdgeSSH', - description: 'EdgeSSH 部署、配置与使用文档', - cleanUrls: true, - lastUpdated: true, - head: [ - ['meta', { name: 'theme-color', content: '#f4511e' }], - ['meta', { name: 'viewport', content: 'width=device-width, initial-scale=1, viewport-fit=cover' }], - ], - themeConfig: { - siteTitle: 'EdgeSSH', - logo: false, - nav: [ - { text: '部署', link: '/deploy/actions', activeMatch: '^/deploy/' }, - { text: '使用', link: '/usage/hosts', activeMatch: '^/usage/' }, - { text: '参考', link: '/reference/configuration', activeMatch: '^/reference/' }, - { text: '开发', link: '/development/local' }, - { text: 'GitHub', link: repository }, - ], - sidebar: [ - { - text: '开始', - items: [ - { text: '认识 EdgeSSH', link: '/guide/overview' }, - { text: '部署前准备', link: '/guide/requirements' }, - ], - }, - { - text: 'GitHub Actions 部署', - items: [ - { text: '完整部署流程', link: '/deploy/actions' }, - { text: 'Cloudflare API Token', link: '/deploy/api-token' }, - { text: 'Zero Trust Access', link: '/deploy/zero-trust' }, - { text: 'Worker 运行时 Secret', link: '/deploy/runtime-secrets' }, - { text: '部署后验收', link: '/deploy/verification' }, - { text: '常见部署问题', link: '/deploy/troubleshooting' }, - ], - }, - { - text: '日常使用', - items: [ - { text: '管理主机', link: '/usage/hosts' }, - { text: '终端与主机指纹', link: '/usage/terminal' }, - { text: '文件与进程', link: '/usage/files-and-processes' }, - ], - }, - { - text: '参考', - items: [ - { text: '配置项', link: '/reference/configuration' }, - { text: '架构与安全边界', link: '/reference/security' }, - { text: '支持范围与限制', link: '/reference/limits' }, - { text: '截图清单', link: '/reference/screenshots' }, - ], - }, - { - text: '开发', - items: [ - { text: '本地开发', link: '/development/local' }, - { text: '贡献指南', link: '/development/contributing' }, - { text: '文档站部署', link: '/development/docs-site' }, - ], - }, - ], - socialLinks: [{ icon: 'github', link: repository }], - search: { - provider: 'local', - options: { - translations: { - button: { buttonText: '搜索文档', buttonAriaLabel: '搜索文档' }, - modal: { - noResultsText: '没有找到相关内容', - resetButtonTitle: '清除查询', - footer: { selectText: '选择', navigateText: '切换', closeText: '关闭' }, - }, - }, - }, - }, - outline: { level: [2, 3], label: '本页内容' }, - editLink: { pattern: `${repository}/edit/main/docs/:path`, text: '在 GitHub 上编辑此页' }, - lastUpdated: { text: '最后更新', formatOptions: { dateStyle: 'medium', timeStyle: 'short' } }, - docFooter: { prev: '上一页', next: '下一页' }, - returnToTopLabel: '返回顶部', - sidebarMenuLabel: '文档目录', - darkModeSwitchLabel: '切换主题', - lightModeSwitchTitle: '切换到浅色模式', - darkModeSwitchTitle: '切换到深色模式', - footer: { - message: '面向个人管理员的 Cloudflare 边缘 SSH 工作台', - copyright: 'Apache License 2.0', - }, - }, -}); diff --git a/docs/.vitepress/theme/components/ScreenshotPlaceholder.vue b/docs/.vitepress/theme/components/ScreenshotPlaceholder.vue deleted file mode 100644 index d7d514d..0000000 --- a/docs/.vitepress/theme/components/ScreenshotPlaceholder.vue +++ /dev/null @@ -1,29 +0,0 @@ - - - diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts deleted file mode 100644 index 77197bf..0000000 --- a/docs/.vitepress/theme/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import DefaultTheme from 'vitepress/theme'; -import type { Theme } from 'vitepress'; -import ScreenshotPlaceholder from './components/ScreenshotPlaceholder.vue'; -import './style.css'; - -export default { - extends: DefaultTheme, - enhanceApp({ app }) { - app.component('ScreenshotPlaceholder', ScreenshotPlaceholder); - }, -} satisfies Theme; diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.css deleted file mode 100644 index bb325da..0000000 --- a/docs/.vitepress/theme/style.css +++ /dev/null @@ -1,499 +0,0 @@ -/* Hallmark · pre-emit critique: P5 H4 E4 S5 R5 V4 · genre: modern-minimal · macrostructure: Workbench · theme: Coral · enrichment: real product capture · nav: N13 search-first · footer: Ft1 mast-headed · contrast: pass · mobile: pass */ -@import url('https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:wght@600;700&family=JetBrains+Mono:wght@400;500;600&family=Noto+Sans+SC:wght@400;500;600;700&display=swap'); -@import './tokens.css'; - -html, -body { - overflow-x: clip; -} - -:root { - --vp-c-bg: var(--color-paper); - --vp-c-bg-alt: var(--color-paper-soft); - --vp-c-bg-elv: var(--color-paper-raised); - --vp-c-bg-soft: var(--color-paper-soft); - --vp-c-text-1: var(--color-ink); - --vp-c-text-2: var(--color-ink-soft); - --vp-c-text-3: var(--color-muted); - --vp-c-divider: var(--color-rule); - --vp-c-gutter: var(--color-rule); - --vp-c-brand-1: var(--color-accent-strong); - --vp-c-brand-2: var(--color-accent); - --vp-c-brand-3: var(--color-accent-strong); - --vp-c-brand-soft: var(--color-accent-soft); - --vp-font-family-base: var(--font-body); - --vp-font-family-mono: var(--font-mono); - --vp-layout-max-width: 1440px; - --vp-sidebar-width: 288px; - --vp-border-radius: var(--radius-md); -} - -body { - background: var(--color-paper); - color: var(--color-ink-soft); - font-family: var(--font-body); - font-size: var(--text-base); - letter-spacing: 0; -} - -h1, -h2, -h3, -h4, -.VPNavBarTitle, -.VPHomeHero .name, -.VPHomeHero .text { - color: var(--color-ink); - font-family: var(--font-display); - font-style: normal; - letter-spacing: 0; - min-width: 0; - overflow-wrap: anywhere; -} - -a, -button, -.VPButton { - white-space: nowrap; -} - -a:focus-visible, -button:focus-visible, -.VPButton:focus-visible { - outline: 3px solid var(--color-focus); - outline-offset: 3px; -} - -.VPNav { - border-bottom: var(--rule-thin) solid var(--color-rule); -} - -.VPNavBarTitle .title::before { - color: var(--color-accent); - content: '>_'; - font-family: var(--font-mono); - font-size: var(--text-sm); - margin-inline-end: var(--space-sm); -} - -.VPNavBarTitle .title, -.VPNavBarMenuLink, -.VPNavBarMenuGroup .text { - letter-spacing: 0; -} - -.DocSearch-Button, -.VPNavBarSearch .DocSearch-Button { - border: var(--rule-thin) solid var(--color-rule-strong); - border-radius: var(--radius-md); - min-width: 180px; -} - -.VPHome { - padding-bottom: var(--space-3xl); -} - -.VPHomeHero { - padding: var(--space-2xl) var(--space-lg) var(--space-3xl); -} - -.VPHomeHero .container { - display: block; - max-width: 1120px; -} - -.VPHomeHero .main { - max-width: 800px; -} - -.VPHomeHero .name { - color: var(--color-ink); - font-size: var(--text-display); - line-height: 1.05; -} - -.VPHomeHero .name .clip { - background: none; - -webkit-text-fill-color: currentColor; -} - -.VPHomeHero .text { - font-size: var(--text-xl); - line-height: 1.2; - max-width: 44rem; -} - -.VPHomeHero .tagline { - color: var(--color-ink-soft); - font-size: var(--text-md); - line-height: 1.7; - max-width: 44rem; -} - -.VPButton { - border-radius: var(--radius-md) !important; - font-weight: 600; - min-height: 44px; - transition: background-color var(--dur-short) var(--ease-out), color var(--dur-short) var(--ease-out), transform var(--dur-micro) var(--ease-out); -} - -.VPButton:active { - transform: translateY(1px); -} - -.VPButton.brand { - background: var(--color-accent-strong); - border-color: var(--color-accent-strong); - color: var(--color-paper-raised); -} - -.VPButton.alt { - background: transparent; - border-color: var(--color-rule-strong); - color: var(--color-ink); -} - -.home-workbench, -.home-path, -.home-boundary { - margin-inline: auto; - max-width: 1120px; - padding-inline: var(--space-lg); -} - -.home-workbench { - display: grid; - gap: var(--space-xl); - grid-template-columns: minmax(0, 1.55fr) minmax(240px, 0.45fr); -} - -.home-capture { - margin: 0; -} - -.home-capture img { - border: var(--rule-thin) solid var(--color-rule-strong); - border-radius: var(--radius-lg); - display: block; - height: auto; - width: 100%; -} - -.home-capture figcaption, -.screenshot-slot figcaption { - color: var(--color-muted); - font-family: var(--font-mono); - font-size: var(--text-xs); - line-height: 1.6; - margin-top: var(--space-sm); -} - -.home-workbench__note { - align-self: end; - border-top: var(--rule-thin) solid var(--color-rule-strong); - padding-top: var(--space-lg); -} - -.home-workbench__note strong { - color: var(--color-ink); - display: block; - font-family: var(--font-display); - font-size: var(--text-lg); - line-height: 1.25; -} - -.home-workbench__note p { - line-height: 1.75; -} - -.home-path { - padding-top: var(--space-3xl); -} - -.home-path h2, -.home-boundary h2 { - border: 0; - font-size: var(--text-xl); - margin: 0 0 var(--space-xl); - padding: 0; -} - -.deploy-track { - border-top: var(--rule-thin) solid var(--color-rule-strong); - display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); -} - -.deploy-track > div { - border-bottom: var(--rule-thin) solid var(--color-rule); - padding: var(--space-lg) var(--space-md) var(--space-xl) 0; -} - -.deploy-track > div + div { - border-inline-start: var(--rule-thin) solid var(--color-rule); - padding-inline-start: var(--space-md); -} - -.deploy-track span { - color: var(--color-accent-strong); - display: block; - font-family: var(--font-mono); - font-size: var(--text-sm); - margin-bottom: var(--space-lg); -} - -.deploy-track strong { - color: var(--color-ink); - display: block; - font-size: var(--text-md); - margin-bottom: var(--space-xs); -} - -.deploy-track p { - color: var(--color-ink-soft); - line-height: 1.65; - margin: 0; -} - -.home-boundary { - display: grid; - gap: var(--space-xl); - grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.2fr); - padding-top: var(--space-3xl); -} - -.home-boundary > div:last-child { - border-top: var(--rule-thin) solid var(--color-rule-strong); - line-height: 1.8; - padding-top: var(--space-lg); -} - -.home-link { - color: var(--color-accent-strong); - display: inline-block; - font-weight: 600; - text-decoration: underline; - text-decoration-thickness: var(--rule-thin); - text-underline-offset: var(--space-2xs); -} - -.vp-doc h1 { - font-size: 2.5rem; - line-height: 1.16; -} - -.vp-doc h2 { - border-top: var(--rule-thin) solid var(--color-rule); - font-size: var(--text-xl); - margin-top: var(--space-2xl); - padding-top: var(--space-xl); -} - -.vp-doc h3 { - font-size: var(--text-lg); - margin-top: var(--space-xl); -} - -.vp-doc p, -.vp-doc li { - line-height: 1.8; -} - -.vp-doc a { - text-underline-offset: var(--space-2xs); -} - -.vp-doc .header-anchor { - float: none; - margin-inline-start: var(--space-xs); - opacity: 0; - position: static; -} - -.vp-doc :is(h1, h2, h3, h4):hover .header-anchor, -.vp-doc .header-anchor:focus-visible { - opacity: 1; -} - -.vp-doc table { - display: block; - overflow-x: auto; - width: 100%; -} - -.vp-doc tr { - background: transparent; -} - -.vp-doc th, -.vp-doc td { - border-color: var(--color-rule); -} - -.vp-doc code { - border-radius: var(--radius-sm); -} - -.vp-doc div[class*='language-'] { - background: var(--color-code); - border: var(--rule-thin) solid var(--color-rule-strong); - border-radius: var(--radius-md); -} - -.vp-doc div[class*='language-'] code { - color: var(--color-code-ink); -} - -.custom-block { - border: var(--rule-thin) solid var(--color-rule-strong); - border-radius: var(--radius-md); -} - -.custom-block.tip { - background: var(--color-success-soft); - border-color: var(--color-success); -} - -.custom-block.info { - background: var(--color-info-soft); - border-color: var(--color-info); -} - -.custom-block.warning, -.custom-block.danger { - border-color: var(--color-warning); -} - -.screenshot-slot { - margin: var(--space-xl) 0; -} - -.screenshot-slot img, -.screenshot-slot__empty { - border: var(--rule-thin) dashed var(--color-rule-strong); - border-radius: var(--radius-md); - min-height: 260px; - width: 100%; -} - -.screenshot-slot img { - display: block; - height: auto; - margin-inline: auto; - min-height: 0; - width: auto; -} - -.screenshot-slot__empty { - align-items: center; - background: var(--color-paper-soft); - display: flex; - gap: var(--space-lg); - justify-content: center; - padding: var(--space-xl); -} - -.screenshot-slot__mark { - color: var(--color-accent); - font-family: var(--font-mono); - font-size: 2.5rem; -} - -.screenshot-slot__empty strong { - color: var(--color-ink); - font-size: var(--text-md); -} - -.screenshot-slot__empty p { - color: var(--color-ink-soft); - margin: var(--space-xs) 0 0; - max-width: 54ch; -} - -@media (hover: hover) and (pointer: fine) { - .VPButton:hover { - transform: translateY(-1px); - } - - .home-link:hover { - text-decoration-thickness: 2px; - } -} - -@media (max-width: 59.99rem) { - .home-workbench, - .home-boundary { - grid-template-columns: minmax(0, 1fr); - } - - .deploy-track { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - - .deploy-track > div:nth-child(3) { - border-inline-start: 0; - padding-inline-start: 0; - } -} - -@media (max-width: 39.99rem) { - .VPHomeHero { - padding: var(--space-xl) var(--space-md) var(--space-2xl); - } - - .VPHomeHero .name { - font-size: 2.75rem; - } - - .VPHomeHero .text, - .home-path h2, - .home-boundary h2 { - font-size: 1.75rem; - } - - .DocSearch-Button, - .VPNavBarSearch .DocSearch-Button { - border: 0; - min-height: 44px; - min-width: 44px; - padding: 0; - width: 44px; - } - - .home-workbench, - .home-path, - .home-boundary { - padding-inline: var(--space-md); - } - - .deploy-track { - grid-template-columns: minmax(0, 1fr); - } - - .deploy-track > div, - .deploy-track > div + div, - .deploy-track > div:nth-child(3) { - border-inline-start: 0; - padding-inline-start: 0; - } - - .screenshot-slot__empty { - align-items: flex-start; - flex-direction: column; - min-height: 220px; - padding: var(--space-lg); - } - - .vp-doc h1 { - font-size: 2rem; - } -} - -@media (prefers-reduced-motion: reduce) { - *, - *::before, - *::after { - scroll-behavior: auto !important; - transition-duration: 0ms !important; - } -} diff --git a/docs/.vitepress/theme/tokens.css b/docs/.vitepress/theme/tokens.css deleted file mode 100644 index ac7a9a9..0000000 --- a/docs/.vitepress/theme/tokens.css +++ /dev/null @@ -1,75 +0,0 @@ -:root { - --color-paper: oklch(98.5% 0.006 240); - --color-paper-raised: oklch(100% 0.004 240); - --color-paper-soft: oklch(96% 0.01 230); - --color-ink: oklch(22% 0.025 250); - --color-ink-soft: oklch(42% 0.025 245); - --color-muted: oklch(55% 0.02 240); - --color-rule: oklch(89% 0.014 235); - --color-rule-strong: oklch(78% 0.025 235); - --color-accent: oklch(64% 0.2 40); - --color-accent-strong: oklch(55% 0.2 38); - --color-accent-soft: oklch(95% 0.035 45); - --color-success: oklch(52% 0.13 157); - --color-success-soft: oklch(95% 0.025 157); - --color-info: oklch(56% 0.14 245); - --color-info-soft: oklch(95% 0.025 245); - --color-warning: oklch(64% 0.15 78); - --color-code: oklch(19% 0.024 250); - --color-code-ink: oklch(92% 0.012 235); - --color-focus: oklch(58% 0.18 40); - - --font-display: "Bricolage Grotesque", "Noto Sans SC", sans-serif; - --font-body: "Noto Sans SC", "Segoe UI", sans-serif; - --font-mono: "JetBrains Mono", "Cascadia Code", monospace; - - --space-3xs: 0.125rem; - --space-2xs: 0.25rem; - --space-xs: 0.5rem; - --space-sm: 0.75rem; - --space-md: 1rem; - --space-lg: 1.5rem; - --space-xl: 2.5rem; - --space-2xl: 4rem; - --space-3xl: 6rem; - - --text-xs: 0.75rem; - --text-sm: 0.875rem; - --text-base: 1rem; - --text-md: 1.125rem; - --text-lg: 1.5rem; - --text-xl: 2rem; - --text-display: 3.5rem; - - --radius-sm: 4px; - --radius-md: 6px; - --radius-lg: 8px; - --rule-thin: 1px; - --dur-micro: 120ms; - --dur-short: 220ms; - --ease-out: cubic-bezier(0.16, 1, 0.3, 1); - --ease-in: cubic-bezier(0.7, 0, 0.84, 0); - --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1); -} - -.dark { - --color-paper: oklch(17% 0.018 250); - --color-paper-raised: oklch(21% 0.02 250); - --color-paper-soft: oklch(24% 0.02 245); - --color-ink: oklch(94% 0.01 235); - --color-ink-soft: oklch(76% 0.018 235); - --color-muted: oklch(66% 0.018 235); - --color-rule: oklch(31% 0.025 245); - --color-rule-strong: oklch(43% 0.035 240); - --color-accent: oklch(72% 0.17 48); - --color-accent-strong: oklch(78% 0.14 50); - --color-accent-soft: oklch(27% 0.045 42); - --color-success: oklch(72% 0.12 157); - --color-success-soft: oklch(25% 0.04 157); - --color-info: oklch(72% 0.11 245); - --color-info-soft: oklch(25% 0.04 245); - --color-warning: oklch(78% 0.12 82); - --color-code: oklch(13% 0.018 250); - --color-code-ink: oklch(92% 0.012 235); - --color-focus: oklch(74% 0.15 48); -} diff --git a/docs/ZERO_TRUST.md b/docs/ZERO_TRUST.md index c247a0f..ed5d723 100644 --- a/docs/ZERO_TRUST.md +++ b/docs/ZERO_TRUST.md @@ -113,16 +113,20 @@ my-team.cloudflareaccess.com Cloudflare 官方获取 AUD 的说明: https://developers.cloudflare.com/cloudflare-one/access-controls/applications/http-apps/authorization-cookie/validating-json/ -## 在 GitHub Actions 保存 Worker Secret +## 在 Cloudflare 控制台保存 Worker Secret -取得 Team Domain 与 AUD 后,在 GitHub 仓库进入 `Settings > Secrets and variables > Actions`: +先按 [部署指南](../DEPLOYMENT.md) 配置 GitHub Actions,并手动运行一次 `Deploy` workflow。首次部署完成、Worker 出现在 Cloudflare 后: -1. 添加 `ACCESS_TEAM_DOMAIN` Secret,粘贴前面取得的 Team Domain。 -2. 添加 `ACCESS_AUD` Secret,粘贴前面取得的 Application Audience (AUD) Tag。 -3. 添加 `ENCRYPTION_KEY` Secret。按照[运行时 Secret 指南](https://edgessh-docs.pages.dev/deploy/runtime-secrets#生成-encryption_key)生成 32 字节安全随机数的标准 Base64;首次生成后必须妥善保管,后续部署继续使用同一个值。 -4. 确认三项 Secret 均已添加,再手动运行一次 `Deploy` workflow。 +1. 打开 Cloudflare Dashboard,进入 `Workers & Pages`。 +2. 选择你的 EdgeSSH Worker(默认名称为 `edgessh`)。 +3. 进入 `Settings(设置)> Variables and Secrets(变量与机密)`。 +4. 添加 `ACCESS_TEAM_DOMAIN`,类型选择 **Secret**,粘贴前面取得的 Team Domain。 +5. 添加 `ACCESS_AUD`,类型选择 **Secret**,粘贴前面取得的 Application Audience (AUD) Tag。 +6. 按控制台提示保存并部署新版本。 -workflow 会通过 Wrangler 将这三项值同步为同名 Worker Secret。不要将它们保存成 GitHub Actions Variable,也不要写进仓库、本地命令或日志;生产部署不需要手动执行 Wrangler Secret 或 Worker 部署命令。 +不要把这两个值保存为 GitHub Actions Secret。GitHub Actions 只需要 `CLOUDFLARE_ACCOUNT_ID` 和 `CLOUDFLARE_API_TOKEN` 两项部署凭据;Access 参数属于 Worker 运行时 Secret,应始终留在 Cloudflare 中。 + +EdgeSSH 还需要一个 `ENCRYPTION_KEY` Worker Secret。它与上述两项在同一个控制台页面配置,生成要求和密钥保管注意事项见 [部署指南](../DEPLOYMENT.md#5-在-worker-界面添加运行时-secret)。生产部署不需要在本地执行 Wrangler Secret 或 Worker 部署命令。 ## 验证配置 @@ -140,9 +144,9 @@ workflow 会通过 Wrangler 将这三项值同步为同名 Worker Secret。不 检查: -- `ACCESS_TEAM_DOMAIN` 是否已经保存为 GitHub Actions Secret,并由最新一次 `Deploy` workflow 成功同步。 +- `ACCESS_TEAM_DOMAIN` 是否已经在 Worker 的 `Variables and Secrets` 页面保存为 Secret,并部署到当前版本。 - Team Domain 是否为 `xxx.cloudflareaccess.com`,且没有 `https://`。 -- `ACCESS_AUD` 是否已保存为 GitHub Actions Secret,且值来自当前 Access 应用。 +- `ACCESS_AUD` 是否已在同一页面保存为 Secret,且值来自当前 Access 应用。 ### 登录后提示“Access 登录已失效” diff --git a/docs/deploy/actions.md b/docs/deploy/actions.md deleted file mode 100644 index ee863f5..0000000 --- a/docs/deploy/actions.md +++ /dev/null @@ -1,186 +0,0 @@ -# 使用 GitHub Actions 部署 - -这是推荐的生产部署方式。首次执行会创建或复用 D1、同步运行时 Secret、应用数据库迁移并发布 Worker;以后推送到 `main` 会复用同一批资源更新代码。 - -## 开始前必须填写的 6 项 - -正式部署只使用 GitHub 仓库的 `Settings → Secrets and variables → Actions` 作为配置入口。先一次填完下面 6 项,再运行 `Deploy` workflow: - -| 名称 | GitHub Actions 类型 | 填写内容 | -| --- | --- | --- | -| `CLOUDFLARE_ACCOUNT_ID` | Variable | Cloudflare 账户 ID | -| `CUSTOM_DOMAIN` | Variable | EdgeSSH 的自定义域名,只写主机名 | -| `CLOUDFLARE_API_TOKEN` | Secret | 具备 Worker、D1 与目标 Zone 权限的 API Token | -| `ACCESS_TEAM_DOMAIN` | Secret | Zero Trust Team Domain,不带协议或路径 | -| `ACCESS_AUD` | Secret | EdgeSSH Access 应用的 AUD Tag | -| `ENCRYPTION_KEY` | Secret | 固定的 32 字节安全随机数 Base64 | - -::: danger 六项缺一不可 -本教程的正式部署流程要求 2 个 Variable 与 4 个 Secret 全部存在。运行时 Secret 会由 workflow 自动同步到 Worker;不要再到 Cloudflare Worker 控制台保存一套配置,也不要在控制台手工部署。 -::: - -## 部署路线图 - -1. Fork EdgeSSH 仓库。 -2. 创建 Cloudflare API Token。 -3. 在 Cloudflare Zero Trust 创建 Access 应用。 -4. 在 GitHub 保存全部六项正式部署配置。 -5. 手动运行一次 `Deploy` workflow。 -6. 确认 workflow 已同步三个运行时 Secret。 -7. 访问自定义域名并完成验收。 - -::: tip 一个配置入口 -六项正式部署配置全部保存在 GitHub Actions:账户 ID 与自定义域名使用 Variable,API Token、Access 参数与加密密钥使用 Secret。workflow 会通过 Cloudflare API 将三项运行时值同步为 Worker Secret,无需再到 Worker 控制台补填。 -::: - -## 1. Fork 仓库 - -打开 [EdgeSSH GitHub 仓库](https://github.com/aozorae/EdgeSSH),选择 **Fork**,保留默认分支 `main`。 - -Fork 完成后,地址通常是: - -```text -https://github.com/<你的 GitHub 用户名>/EdgeSSH -``` - - - -## 2. 创建 Cloudflare API Token - -在 Cloudflare 个人资料的 **API Tokens** 页面创建 Token。以官方 **Edit Cloudflare Workers** 模板为起点,并确认 Token 具备: - -- Account:Workers Scripts Edit。 -- Account:D1 Edit。 -- Zone:目标域名所需的 Workers Routes Edit 权限。 -- Account Resources:只选择实际部署所用账户。 -- Zone Resources:只选择 EdgeSSH 域名所在 Zone。 - -Token 只会完整显示一次。创建后直接保存到 GitHub Secret,不要粘贴到聊天、Issue、截图或仓库文件。 - -详细配置见[创建 API Token](/deploy/api-token)。 - -## 3. 在 GitHub Actions 填写六项配置 - -进入你的 Fork: - -```text -Settings → Secrets and variables → Actions -``` - -按照页面顶部的必填表,在 **Variables** 页签保存 `CLOUDFLARE_ACCOUNT_ID` 与 `CUSTOM_DOMAIN`,在 **Secrets** 页签保存另外四项。三项运行时 Secret 的值在下一节取得。Variable 的值会显示在设置页,Secret 保存后不会再次显示;不要把四项敏感值错放到 Variable。 - -### 可选配置 - -以下 Variable 不影响标准部署,第一次部署通常不要填写: - -| 名称 | 默认值 | 用途 | -| --- | --- | --- | -| `WORKER_NAME` | `edgessh` | 自定义 Worker 名称 | -| `D1_DATABASE_NAME` | `-accounts` | 自定义 D1 数据库名称 | - -`DOCS_PROJECT_NAME` 只属于文档站的 `Deploy docs` workflow,不是 EdgeSSH 应用部署的必填项。 - - - -## 4. 配置 Zero Trust Access - -在运行 Action 前,先为 `CUSTOM_DOMAIN` 中的同一域名创建 Self-hosted Access 应用,并添加只允许明确管理员邮箱的 Allow 策略。 - -你需要从这个应用取得两个值: - -- `ACCESS_TEAM_DOMAIN`:例如 `my-team.cloudflareaccess.com`。 -- `ACCESS_AUD`:Application Audience (AUD) Tag。 - -再按[运行时 Secret](/deploy/runtime-secrets)中的方式生成一次 `ENCRYPTION_KEY`,回到 GitHub Actions Secrets 保存这三项值。加密密钥在后续部署中必须保持不变。 - -完整点击路径见[配置 Zero Trust Access](/deploy/zero-trust)。 - -## 5. 首次运行 Deploy - -进入 Fork 的: - -```text -Actions → Deploy → Run workflow -``` - -选择 `main` 后运行。workflow 会依次: - -1. 检出仓库并安装锁定版本依赖。 -2. 执行类型检查、自动化测试、文档构建与 Wrangler dry-run。 -3. 按 `D1_DATABASE_NAME` 精确查找 D1,不存在时创建一次。 -4. 生成只存在于 runner 内的临时 Wrangler 配置,写入真实 D1 ID。 -5. 从 GitHub Actions 读取三项运行时 Secret,并经标准输入同步给 Wrangler。 -6. 对远程 D1 执行 migration。 -7. 创建或更新 Worker,并绑定必填配置中的自定义域名。 - - - -### 怎样判断成功 - -等待运行记录显示绿色成功标记,并展开 **Prepare Cloudflare resources**、**Sync Worker secrets** 与对应的部署步骤。资源准备日志中应能看到: - -```text -已创建 D1 数据库:edgessh-accounts -``` - -或后续部署中的: - -```text -已复用 D1 数据库:edgessh-accounts -``` - -日志还应显示 Worker 名称和自定义域名,但不应出现 API Token、Access 参数或加密密钥。 - - - -::: info 缺少 Secret 会直接停止部署 -workflow 会在发布 Worker 前校验三项运行时 Secret。任一项缺失时部署会失败,不会留下一个需要去控制台补配置的版本。 -::: - -## 6. 确认运行时 Secret 已同步 - -成功的运行记录中,**Sync Worker secrets** 步骤会列出已处理的 Secret 名称,但不会显示值。三项值仅经标准输入交给 Wrangler,不进入命令参数、临时配置或日志。 - -如需核验,可在 Cloudflare Worker 的 Variables and Secrets 页面确认三个名称存在;该页面不是配置入口,也不需要再次保存或部署。生成与保管加密密钥的规则见[Worker 运行时 Secret](/deploy/runtime-secrets)。 - -## 7. 完成首次验收 - -访问 `https://你的自定义域名`。正确顺序是: - -1. 浏览器先进入 Cloudflare Access 登录页。 -2. 只有 Allow 策略中的邮箱可以完成登录。 -3. 登录后显示 EdgeSSH 主机总览,而不是配置错误。 -4. 新建一台测试主机,核对首次连接指纹,再验收终端、SFTP 与进程面板。 - -不要只看到首页就宣布部署完成。使用[部署后验收清单](/deploy/verification)逐项检查。 - -## 后续更新 - -以后将更新合并或推送到 `main` 即可。Action 会复用同名 D1,并从 GitHub Actions Secrets 幂等同步 Worker Secret;不需要在本地运行 Wrangler,也不需要重复创建资源。 - -保持 `WORKER_NAME` 和 `D1_DATABASE_NAME` 稳定。修改数据库名称会切换到另一个数据库,不会自动迁移旧数据。 diff --git a/docs/deploy/api-token.md b/docs/deploy/api-token.md deleted file mode 100644 index d2c5783..0000000 --- a/docs/deploy/api-token.md +++ /dev/null @@ -1,62 +0,0 @@ -# 创建 Cloudflare API Token - -部署 Token 只负责让 GitHub Actions 管理 Worker、D1 与自定义域名。它不是 EdgeSSH 的登录凭据,也不应作为 Worker 运行时变量。 - -## 创建入口 - -1. 登录 Cloudflare Dashboard。 -2. 打开右上角个人资料。 -3. 进入 **My Profile → API Tokens**。 -4. 选择 **Create Token**。 -5. 以 **Edit Cloudflare Workers** 模板作为起点。 - -## 权限建议 - -确保 Token 覆盖以下能力: - -| 范围 | 权限 | 用途 | -| --- | --- | --- | -| Account | Workers Scripts: Edit | 创建或更新 EdgeSSH Worker | -| Account | D1: Edit | 查找、创建 D1 并执行 migration | -| Zone | Workers Routes: Edit | 绑定 `CUSTOM_DOMAIN` | - -Cloudflare 控制台的权限名称可能随界面调整。判断标准是:Token 能部署 Worker、管理目标账户的 D1,并为目标 Zone 配置 Worker 自定义域名。 - -资源范围应限定到实际账户和域名。EdgeSSH 不使用 KV 或 R2,不要为了省事授予无关资源权限。 - - - -## 保存到 GitHub - -Token 创建完成后,只会完整显示一次: - -1. 复制 Token。 -2. 打开 Fork 的 `Settings → Secrets and variables → Actions`。 -3. 在 **Secrets** 中创建 `CLOUDFLARE_API_TOKEN`。 -4. 粘贴并保存。 - -不要把 Token 存为普通 Variable。也不要把 Token 写入 `.env`、`.dev.vars`、`wrangler.toml`、README 或截图。 - -API Token 只是正式部署的 6 项必填配置之一。创建完成后回到[GitHub Actions 完整部署流程](/deploy/actions#开始前必须填写的-6-项),将 2 个 Variable 与 4 个 Secret 一次配置完整。 - -## 验证与排错 - -Action 报 `Authentication error` 或 `Invalid API Token` 时: - -- 确认复制的是 API Token,不是 Global API Key。 -- 确认 Secret 名称精确为 `CLOUDFLARE_API_TOKEN`。 -- 确认 Token 尚未被撤销或过期。 -- 确认 Account Resources 包含 `CLOUDFLARE_ACCOUNT_ID` 对应账户。 - -Action 能部署 Worker、但无法创建 D1 时,通常是缺少 Account `D1: Edit`。能部署但自定义域名绑定失败时,通常是 Zone 范围或 Workers Routes 权限不正确。 - -## 文档站 Pages 权限 - -仓库的 `Deploy docs` workflow 会把 VitePress 静态产物发布到独立 Cloudflare Pages 项目。若同一个 Token 也用于文档站,请额外确认它具备 Account `Cloudflare Pages: Edit`。文档项目默认名为 `edgessh-docs`,不会访问 EdgeSSH 的 D1 或 Worker Secret。 diff --git a/docs/deploy/runtime-secrets.md b/docs/deploy/runtime-secrets.md deleted file mode 100644 index 4f6dc59..0000000 --- a/docs/deploy/runtime-secrets.md +++ /dev/null @@ -1,71 +0,0 @@ -# 通过 GitHub Actions 配置 Worker 运行时 Secret - -三个运行时 Secret 统一保存在 GitHub Actions Secrets 中。`Deploy` workflow 会在发布前将它们同步到 Worker,不需要进入 Cloudflare Worker 控制台补填。 - -## 打开配置页 - -在 GitHub 仓库进入: - -```text -Settings → Secrets and variables → Actions → Secrets -``` - -## 添加三项 Secret - -| 名称 | 值 | 来源 | -| --- | --- | --- | -| `ACCESS_TEAM_DOMAIN` | `my-team.cloudflareaccess.com` | Zero Trust Settings | -| `ACCESS_AUD` | 一串 Audience Tag | EdgeSSH Access 应用 | -| `ENCRYPTION_KEY` | 32 字节随机数的标准 Base64 | 本机安全随机数工具 | - -三项都创建为 Repository Secret,不要保存为 Repository Variable。配置完成后运行 `Deploy` workflow,**Sync Worker secrets** 步骤会通过 Wrangler 批量同步它们。 - - - -## 生成 ENCRYPTION_KEY - -在可信的本机终端运行下列任一命令。 - -### Node.js - -```bash -node -e "console.log(require('crypto').randomBytes(32).toString('base64'))" -``` - -### OpenSSL - -```bash -openssl rand -base64 32 -``` - -输出应是标准 Base64,解码后正好 32 字节。把它直接保存为 GitHub Actions Secret `ENCRYPTION_KEY`,不要使用普通密码、UUID、示例值或在线随机字符串网页。 - -::: danger 加密密钥必须长期保管 -首次生成后,将 `ENCRYPTION_KEY` 保存到可信密码管理器。丢失密钥会导致 D1 中已有主机资料无法解密。当前版本不支持直接轮换,后续部署必须复用原值。 -::: - -## 哪些值不是环境变量 - -不要手动创建以下同名变量: - -- `DB`:D1 binding,由部署配置生成。 -- `SSH_SESSIONS`:Durable Object binding。 -- `ASSETS`:Worker 静态资源 binding。 - -`CONNECT_TIMEOUT_MS` 是普通变量,仓库默认值为 `10000`。除非确实需要调整 2,000 至 30,000 毫秒的建连超时,否则保持默认。 - -## 保存后的检查 - -1. GitHub Actions Secrets 列表中能看到三个 Secret 名称。 -2. 最新一次 `Deploy` 的 **Sync Worker secrets** 步骤成功。 -3. 访问正式域名并通过 Access 登录。 -4. 主机列表接口不再返回“管理员尚未配置 Zero Trust Access”。 - -运行时 Secret 不需要在每次 Action 中重填。workflow 会把 GitHub 中的固定值幂等同步给 Worker;尤其不要直接替换 `ENCRYPTION_KEY`,否则已有主机资料将无法解密。 diff --git a/docs/deploy/troubleshooting.md b/docs/deploy/troubleshooting.md deleted file mode 100644 index 0a57496..0000000 --- a/docs/deploy/troubleshooting.md +++ /dev/null @@ -1,80 +0,0 @@ -# 常见部署问题 - -先找到失败发生在哪一层:GitHub Action、Cloudflare 资源、Access 身份、Worker Secret,还是 SSH 目标。不要通过关闭认证或放宽网络限制来绕过问题。 - -## Action 找不到账户或认证失败 - -检查: - -- `CLOUDFLARE_ACCOUNT_ID` 是否保存为 GitHub Variable。 -- `CLOUDFLARE_API_TOKEN` 是否保存为 GitHub Secret。 -- Token 的 Account Resources 是否包含该账户。 -- Token 是否过期、撤销或复制不完整。 - -## D1 创建或 migration 失败 - -常见原因: - -- Token 缺少 Account `D1: Edit`。 -- `D1_DATABASE_NAME` 含不支持字符。 -- 同一账户中存在名称冲突但权限不足以读取。 -- 上一次并发部署仍在运行。 - -不要手工把某个 D1 ID写进 `wrangler.toml`。部署脚本会按数据库名称解析 ID,并只写入 runner 的临时配置。 - -## 自定义域名绑定失败 - -确认: - -- `CUSTOM_DOMAIN` 只有纯主机名。 -- 域名所在 Zone 已接入同一个 Cloudflare 账户。 -- Token 的 Zone Resources 包含这个 Zone。 -- Access 应用与 `CUSTOM_DOMAIN` 使用相同主机名。 - -## Action 成功,但打开后返回 503 - -确认最新一次 `Deploy` 包含并成功执行 **Sync Worker secrets**,然后检查: - -- GitHub Actions Secrets 中存在 `ACCESS_TEAM_DOMAIN`、`ACCESS_AUD`、`ENCRYPTION_KEY`。 -- 三项名称拼写完全一致,且没有误存为 Variable。 -- Team Domain 和 AUD 来自当前自定义域名对应的 Access 应用。 - -Cloudflare Worker 的 Variables and Secrets 页面只用于核验三个名称是否已同步,不要在那里维护另一套值。 - -## 页面先登录,之后提示 Access 已失效 - -通常是 `ACCESS_AUD` 来自另一个应用,或 `ACCESS_TEAM_DOMAIN` 属于另一个 Zero Trust 组织。重新从当前自定义域名对应的 Self-hosted 应用复制 AUD。 - -## 主机能保存但连接超时 - -检查目标层: - -- 主机名是否解析到公网地址。 -- SSH 服务端口是否正确。 -- 目标防火墙是否允许外部连接。 -- 云服务商安全组是否开放对应端口。 -- 目标是否只允许固定来源 IP。Cloudflare Workers 出站地址不适合传统固定 IP 白名单。 - -不要把 `CONNECT_TIMEOUT_MS` 调得很大来掩盖网络不可达。默认 10 秒足以区分正常连接与大多数路由问题。 - -## 私钥认证失败 - -当前只支持未加密 OpenSSH 格式的 Ed25519、RSA、ECDSA P-256/P-384/P-521 私钥。不支持: - -- 带 passphrase 的加密私钥。 -- PEM 或 PKCS#8 私钥。 -- SSH Agent。 -- 需要多轮交互的 MFA 登录。 - -先在受信任终端用同一账号和密钥验证目标,再核对私钥格式。 - -## 怎样提交有效 Issue - -提供: - -- 失败所在步骤。 -- Action 步骤名称与脱敏错误信息。 -- 浏览器、操作系统和目标 SSH 服务类型。 -- 能稳定复现的最少步骤。 - -不要提供密码、私钥、API Token、Access JWT、Cookie、Team Domain、AUD、未脱敏 IP 或完整 Action 日志。 diff --git a/docs/deploy/verification.md b/docs/deploy/verification.md deleted file mode 100644 index 12565b5..0000000 --- a/docs/deploy/verification.md +++ /dev/null @@ -1,87 +0,0 @@ -# 部署后验收 - -把“网页能打开”当作开始,而不是结束。下面的检查从身份边界到真实 SSH 功能逐步推进,便于在出现问题时定位到正确层级。 - -## 1. Access 入口 - -- 在未登录浏览器中访问正式域名,应先出现 Cloudflare Access。 -- 使用不在 Allow 策略中的邮箱,不能进入 EdgeSSH。 -- 使用管理员邮箱登录后,应进入主机总览。 -- 正式使用始终从自定义域名进入,不把 `workers.dev` 地址分享为入口。 - -## 2. 账号 API - -登录后直接访问: - -```text -https://ssh.example.com/api/auth/me -``` - -把域名替换为你的实际入口。应返回当前 Access 身份的受控信息,而不是 401、503 或 HTML 登录页。 - -若返回 503,优先检查三个 GitHub Actions Secret 是否已由最新一次 `Deploy` 成功同步。若返回身份失效,检查 Team Domain、AUD 与当前 Access 应用是否一致。 - -## 3. 主机资料 - -创建一台测试主机,建议填写: - -- 一个清晰的显示名称。 -- 公网地址与 SSH 端口。 -- 低权限测试用户名。 -- 测试分组。 -- 密码或受支持的未加密 OpenSSH 私钥。 - -保存后刷新页面,确认记录仍然存在。再编辑非凭据字段,确认留空不会意外清除原凭据。 - - - -## 4. 首次连接与指纹 - -首次连接时,EdgeSSH 会展示服务器 SHA-256 指纹。不要直接确认: - -1. 从服务器控制台或可信渠道取得真实主机指纹。 -2. 逐字比较 EdgeSSH 显示值。 -3. 一致后再确认并发送 SSH 凭据。 - -指纹不一致可能意味着服务器重装、地址指向了另一台机器,或连接遭到拦截。先查明原因,不要通过删除指纹来绕过。 - -## 5. 终端 - -- Shell 可以正常交互并显示中文。 -- 调整浏览器大小后,终端列数与行数同步。 -- 全屏进入与退出正常。 -- 返回主机总览后,会话按预期断开。 -- 目标使用 GB18030 或 Big5 时,切换对应终端编码验证显示。 - -## 6. SFTP - -使用专门的测试目录验收: - -1. 浏览目录。 -2. 新建子目录。 -3. 上传一个小文件。 -4. 下载并比较文件内容。 -5. 重命名文件。 -6. 删除文件与空目录。 - -不要使用生产关键目录做首次测试。当前单文件上传与下载上限为 64 MiB,非空目录不能直接删除。 - -## 7. 进程与系统信息 - -- 能显示 CPU、负载、内存与 Swap。 -- 能加载进程列表。 -- 能识别常见 Linux 发行版、版本与架构。 -- 辅助面板失败时,主终端会话仍能明确显示错误,不泄露内部堆栈。 - -## 8. 清理测试数据 - -删除本次创建的临时主机记录和目标服务器上的测试文件。不要清空整个 D1,也不要删除 `d1_migrations` 表。 - -完成所有检查后,才可以把部署标记为可正常使用。 diff --git a/docs/deploy/zero-trust.md b/docs/deploy/zero-trust.md deleted file mode 100644 index e82c58d..0000000 --- a/docs/deploy/zero-trust.md +++ /dev/null @@ -1,103 +0,0 @@ -# 配置 Cloudflare Zero Trust Access - -EdgeSSH 不提供本地用户名、密码或注册系统。生产入口必须先经过 Cloudflare Access,Worker 还会再次验证 Access 注入的 JWT。 - -::: warning 使用明确身份 -推荐“明确邮箱 + Allow”。不要使用 `Everyone`、`Bypass`,也不要只按登录方式放行所有能够接收验证码的人。 -::: - -## 1. 准备登录方式 - -个人部署可以使用 One-time PIN 邮件验证码。若 Zero Trust 组织中没有该选项: - -1. 进入 **Zero Trust → Integrations → Identity providers**。 -2. 选择 **Add new identity provider**。 -3. 添加 **One-time PIN** 并保存。 - -如果已经配置 Google、GitHub、Microsoft Entra ID 或其他身份提供程序,可以继续使用已有方式。 - -## 2. 创建 Self-hosted 应用 - -1. 进入 **Zero Trust → Access controls → Applications**。 -2. 选择 **Create new application**。 -3. 选择 **Self-hosted and private**。 -4. 添加 Public hostname。 -5. Application name 填写 `EdgeSSH`。 -6. Public hostname 填写与 GitHub `CUSTOM_DOMAIN` 完全相同的域名。 - - - -## 3. 添加 Allow 策略 - -在应用的 Access policies 中创建策略: - -| 项目 | 推荐值 | -| --- | --- | -| Policy name | `EdgeSSH Admin` | -| Action | `Allow` | -| Rule type | `Include` | -| Selector | `Emails` | -| Value | 你的完整管理员邮箱 | - -需要多名管理员时,逐个添加明确邮箱。只有在你确实希望整个企业邮箱域都能管理服务器时,才使用整域授权。 - - - -## 4. 获取 Team Domain - -进入 Zero Trust 设置,找到 Team name 或 Team domain。保存为 GitHub Actions Secret `ACCESS_TEAM_DOMAIN` 时只保留域名: - -```text -my-team.cloudflareaccess.com -``` - -不要带 `https://`、路径或末尾斜杠。 - -## 5. 获取 Application Audience - -1. 回到 **Access controls → Applications**。 -2. 打开刚创建的 EdgeSSH 应用。 -3. 在 Additional settings 中找到 **Application Audience (AUD) Tag**。 -4. 复制完整值,后续保存为 `ACCESS_AUD`。 - -不要把应用 ID、Client ID 或策略 ID 当成 AUD。 - -## 6. 验证 Access 本身 - -在运行 `Deploy` workflow 前,也可以先访问自定义域名验证外层策略: - -- 未登录时应先出现 Cloudflare Access 登录页。 -- 不在 Allow 策略内的邮箱不能进入。 -- 允许的邮箱能够完成认证。 - - - -## 常见问题 - -### One-time PIN 收不到邮件 - -先确认策略中的 Emails 与登录邮箱完全一致。Cloudflare 不会向未被策略允许的邮箱发送验证码,但页面可能仍显示已发送,避免泄露访问名单。 - -### 登录后提示 Access 登录已失效 - -通常是以下三项没有对应同一个应用: - -- 正在访问的自定义域名。 -- `ACCESS_TEAM_DOMAIN` 所属 Zero Trust 组织。 -- `ACCESS_AUD` 所属 Self-hosted 应用。 - -### 页面没有出现 Access 登录 - -确认 Access 应用 Public hostname 与 `CUSTOM_DOMAIN` 完全一致。不要把 `workers.dev` 诊断地址当作正式入口。 diff --git a/docs/development/contributing.md b/docs/development/contributing.md deleted file mode 100644 index 6b7a171..0000000 --- a/docs/development/contributing.md +++ /dev/null @@ -1,42 +0,0 @@ -# 贡献指南 - -欢迎通过 Issue 反馈问题,或通过 Pull Request 提交改进。 - -## 提交前 - -运行完整检查: - -```bash -npm run check -``` - -如果修改了文档,再启动本地预览检查桌面和移动端: - -```bash -npm run docs:dev -``` - -## 变更范围 - -- 一个文件尽量承担单一职责。 -- 优先沿用现有模块、类型与错误响应结构。 -- 对外接口返回统一错误,不暴露堆栈、源码或内部数据。 -- Worker 请求链路中的 I/O 必须异步等待,避免阻塞计算。 -- 数据库迁移只追加必要 schema,不在普通部署中清空生产数据。 - -## 测试真实功能 - -涉及 SSH、SFTP、进程面板或操作系统探测时,使用你有权访问的测试服务器。Pull Request 中明确写出已验证的范围;没有真实目标时,不要声称真实连接已通过。 - -## 安全报告 - -Issue 和 Pull Request 中不要上传: - -- 密码或私钥。 -- Cloudflare API Token 或 Worker Secret。 -- Access JWT、Cookie、AUD 或 Team Domain。 -- 未脱敏的服务器 IP、域名或完整日志。 - -## 上游与许可证 - -EdgeSSH 基于 [Worker Web SSH](https://github.com/cmliu/CF-Workers-WebSSH) 深度开发,采用 Apache License 2.0。修改与分发时请保留适用的版权和许可证声明。 diff --git a/docs/development/docs-site.md b/docs/development/docs-site.md deleted file mode 100644 index 391590d..0000000 --- a/docs/development/docs-site.md +++ /dev/null @@ -1,59 +0,0 @@ -# 部署文档站到 Cloudflare Pages - -VitePress 文档通过独立的 `Deploy docs` GitHub Actions workflow 发布到 Cloudflare Pages。它不会写入 EdgeSSH Worker 的 `dist/`,也不会访问 D1 或运行时 Secret。 - -## 首次部署 - -文档 workflow 复用两个部署凭据: - -- GitHub Variable `CLOUDFLARE_ACCOUNT_ID`。 -- GitHub Secret `CLOUDFLARE_API_TOKEN`。 - -API Token 需要 Account `Cloudflare Pages: Edit`。可选 Variable `DOCS_PROJECT_NAME` 控制 Pages 项目名,默认 `edgessh-docs`。 - -进入: - -```text -Actions → Deploy docs → Run workflow -``` - -首次运行会按名称检查 Pages 项目,不存在时创建,存在时直接复用。随后构建 `docs/.vitepress/dist` 并发布到生产分支 `main`。 - -## 添加多个自定义域名 - -首次成功后打开 Cloudflare Dashboard: - -```text -Workers & Pages → edgessh-docs → Custom domains -``` - -选择 **Set up a custom domain**,逐个添加文档域名。Pages 项目与 EdgeSSH Worker 相互独立,因此可以为文档站绑定多个域名,而不修改 Worker 的 `CUSTOM_DOMAIN`。 - - - -## 自动触发 - -推送到 `main` 且改动以下路径时,文档 workflow 自动运行: - -- `docs/**` -- `package.json` 或 `package-lock.json` -- 文档部署 workflow 与 Pages 准备脚本 - -应用 Worker 的 `Deploy` workflow 与文档的 `Deploy docs` workflow 使用不同并发锁和不同产物目录,不会互相覆盖。纯 `docs/**`、文档 workflow 或 Pages 准备脚本改动也被 Worker workflow 排除,不会顺带发布生产 EdgeSSH 应用。 - -## 本地预览 - -```bash -npm run docs:dev -``` - -生产构建检查: - -```bash -npm run docs:build -npm run docs:preview -``` diff --git a/docs/development/local.md b/docs/development/local.md deleted file mode 100644 index 6f73229..0000000 --- a/docs/development/local.md +++ /dev/null @@ -1,61 +0,0 @@ -# 本地开发 - -本地开发需要 Node.js 22.12.0 或更高版本,以及 npm。 - -## 安装依赖 - -```bash -git clone https://github.com/aozorae/EdgeSSH.git -cd EdgeSSH -npm ci -``` - -## 准备本地变量 - -```bash -cp .env.example .dev.vars -``` - -在 `.dev.vars` 中填写开发用的 `ACCESS_TEAM_DOMAIN`、`ACCESS_AUD` 与 `ENCRYPTION_KEY`。本地仍会执行真实 Access 身份校验,不提供匿名绕过。 - -初始化本地 D1: - -```bash -npx wrangler d1 migrations apply DB --local -``` - -## 启动 Worker - -```bash -npm run dev -``` - -Wrangler 会按 `wrangler.toml` 构建前端并启动本地 Worker。 - -需要前端热更新时,在另一个终端运行: - -```bash -npm run dev:web -``` - -Vite 默认位于 `http://localhost:5173`,并把 `/api` 代理到本地 Worker 的 `8787` 端口。 - -## 启动文档站 - -```bash -npm run docs:dev -``` - -VitePress 会输出本地地址。文档站不需要 D1、Access 或 SSH 目标。 - -## 检查命令 - -| 命令 | 用途 | -| --- | --- | -| `npm run typecheck` | 检查 Worker 与前端类型 | -| `npm test` | 运行 Node 测试 | -| `npm run build:web` | 构建 EdgeSSH 前端 | -| `npm run docs:build` | 构建 VitePress 文档 | -| `npm run check` | 类型、测试、文档与 Wrangler dry-run | - -涉及连接、SFTP 或进程面板的改动,最终仍要使用真实且已授权的 SSH 目标验收。 diff --git a/docs/development/workspace-theme.md b/docs/development/workspace-theme.md deleted file mode 100644 index a124940..0000000 --- a/docs/development/workspace-theme.md +++ /dev/null @@ -1,22 +0,0 @@ -# SSH 工作台主题适配 - -## 维护边界 - -主机总览继续由 `frontend/src/dashboard.css` 和 `dashboard.ts` 管理,布局、地球和主机列表不因工作台换肤而调整。 - -`frontend/src/workspace-theme.css` 是 EdgeSSH 自有的薄适配层。在 `main.ts` 中紧跟上游 `style.css` 导入,复用总览的 `--home-*` 色彩与字体,将它们映射到上游既有的 `--bg`、`--panel`、`--accent` 等变量。组件覆盖限定在 `#app` 内,避免影响总览。 - -- 默认浅色;原来的 `workers-webssh.theme` 偏好和深色切换继续生效。 -- 终端输出始终保留上游深色背景和 ANSI 调色板。绿色输出不是品牌色,不应全局替换;成功状态保留绿色,危险操作保留红色。 -- 工具栏、连接表单、文件/进程面板、会话日志与弹窗使用统一外壳;不复制业务组件,不改变 DOM ID、状态类、事件绑定或协议。 -- 小屏只通过 CSS 将资源指标放到工具栏第二行;原有文件树、分栏、全屏和面板开关继续由上游管理。 - -## 合并上游时 - -1. 正常合并上游的 `style.css`、`main.ts` 和业务模块,不把品牌样式搬回这些文件。 -2. 保留 `main.ts` 里最后导入的 `workspace-theme.css`,以及 HTML 的浅色默认值。 -3. 若上游改名或删除 CSS 变量/组件类,在适配层更新对应映射,而不是维护第二份组件。 -4. 执行 `npm run check`。主题的静态契约测试用于提醒入口或关键选择器漂移,不代替浏览器验收。 -5. 浏览器复核浅/深色、连接表单、空终端、已连接终端、文件/进程/日志、指纹与危险操作弹窗;检查 320、375、414、768px 与桌面。 - -本次不修改 SSH/SFTP/进程逻辑,并不意味着未来合并永远无冲突。适配层依赖的上游 CSS 变量、类名或结构变化时,仍需要逐项验证。 diff --git a/docs/guide/overview.md b/docs/guide/overview.md deleted file mode 100644 index a2f5887..0000000 --- a/docs/guide/overview.md +++ /dev/null @@ -1,48 +0,0 @@ -# 认识 EdgeSSH - -EdgeSSH 是运行在 Cloudflare Workers 上的个人 SSH 工作台。部署完成后,你可以从浏览器管理主机、打开交互终端、使用 SFTP 管理文件,并查看远端进程与系统资源。 - -## 它解决什么问题 - -传统 WebSSH 通常还要维护一台中转服务器。EdgeSSH 把前端静态资源、身份校验、主机资料和 SSH 客户端放在 Cloudflare 边缘运行: - -```text -浏览器 - ├─ 主机总览与地球视图 - ├─ xterm.js 交互终端 - ├─ SFTP 文件管理 - └─ 进程与系统信息 - │ HTTPS / WebSocket - ▼ -Cloudflare Access → Worker → Durable Object → TCP Socket → SSH 服务器 - │ - └─ D1:每个身份独立的加密主机资料 -``` - -浏览器不会直接连接 SSH 服务器。每个连接会话由 Durable Object 隔离,Worker 通过 Cloudflare TCP Sockets 连接目标的公网 SSH 端口。 - -## 主要能力 - -| 能力 | 说明 | -| --- | --- | -| 主机管理 | 保存地址、端口、用户名、分组和认证信息;支持搜索、编辑与删除 | -| 地球视图 | 根据公网 IP 显示主机位置;位置不代表在线状态 | -| 浏览器终端 | 交互式 Shell、窗口尺寸同步、全屏、会话日志与多种终端编码 | -| SFTP | 浏览目录、上传、下载、新建目录、重命名与删除空目录 | -| 进程面板 | 查看 CPU、负载、内存、Swap 与进程列表 | -| 系统识别 | 通过 SSH 探测操作系统、版本与架构 | - -## 凭据怎样保存 - -主机资料通过 AES-256-GCM 加密后写入 D1。密文绑定 Access 用户身份与记录 ID,列表接口不会返回密码或私钥;建立连接时才在 Worker 内解密,并只把必要数据放入当前会话。 - -::: warning 这不是端到端加密 -Worker 是实际的 SSH 客户端,会在会话内处理明文凭据。只把 EdgeSSH 部署到你信任的 Cloudflare 账户,并为 SSH 使用最小权限账号或密钥。 -::: - -## 推荐阅读顺序 - -1. 阅读[部署前准备](/guide/requirements),确认账户、域名和目标服务器都满足条件。 -2. 按[GitHub Actions 完整部署流程](/deploy/actions)完成首次发布。 -3. 按[部署后验收](/deploy/verification)检查 Access、主机 API 和真实 SSH 连接。 -4. 使用前阅读[支持范围与限制](/reference/limits),避免把未支持的认证方式当作配置问题。 diff --git a/docs/guide/requirements.md b/docs/guide/requirements.md deleted file mode 100644 index 2a70b2f..0000000 --- a/docs/guide/requirements.md +++ /dev/null @@ -1,61 +0,0 @@ -# 部署前准备 - -先完成本页清单,再打开多个控制台操作。这样可以避免部署到一半才发现域名、权限或 SSH 目标不满足要求。 - -## 必备资源 - -- 一个 GitHub 账户,用于 Fork 仓库和运行 Actions。 -- 一个可使用 Workers、Durable Objects、D1 与 Pages 的 Cloudflare 账户。 -- 一个已经接入同一 Cloudflare 账户的域名,例如 `example.com`。 -- 一个准备分配给 EdgeSSH 的子域名,例如 `ssh.example.com`。 -- 一台你有权访问、能够从公网连接的 SSH 服务器。 -- 一个可以接收 Cloudflare Access 登录邮件的管理员邮箱,或已有的身份提供程序。 - -::: info Node.js 只影响本地开发 -只用 GitHub Actions 部署时,不需要在自己的电脑安装 Node.js。需要本地开发时,使用 Node.js 22.12.0 或更高版本。 -::: - -## 域名要求 - -正式入口应使用受 Cloudflare Access 保护的自定义域名。后续教程统一使用: - -```text -ssh.example.com -``` - -替换为你自己的域名即可。填写 GitHub Variable 时只写主机名,不要带 `https://`、端口、路径或末尾斜杠。 - -## SSH 目标要求 - -目标必须解析到公网 IP。EdgeSSH 会拒绝回环地址、私有地址、链路本地地址和其他不应从公网访问的目标,以降低 SSRF 与 DNS 重绑定风险。 - -建议为验收准备一个专用的低权限 SSH 账号,并确认: - -- SSH 服务监听公网可达端口。 -- 防火墙允许 Cloudflare Workers 发起连接。 -- 你已准备密码或一个受支持的未加密 OpenSSH 私钥。 -- 你知道首次连接时应该核对的服务器指纹。 - -## 正式部署必须填写的 6 个值 - -这 6 项全部在 GitHub 仓库的 **Secrets and variables → Actions** 中填写。完成之前不要运行 `Deploy` workflow: - -| 名称 | 保存位置 | 是否敏感 | -| --- | --- | --- | -| `CLOUDFLARE_ACCOUNT_ID` | GitHub Actions Variable | 否 | -| `CUSTOM_DOMAIN` | GitHub Actions Variable | 否 | -| `CLOUDFLARE_API_TOKEN` | GitHub Actions Secret | 是 | -| `ACCESS_TEAM_DOMAIN` | GitHub Actions Secret,自动同步为 Worker Secret | 是 | -| `ACCESS_AUD` | GitHub Actions Secret,自动同步为 Worker Secret | 是 | -| `ENCRYPTION_KEY` | GitHub Actions Secret,自动同步为 Worker Secret | 是 | - -`WORKER_NAME` 与 `D1_DATABASE_NAME` 是可选项,通常不要填写。默认名称分别是 `edgessh` 与 `edgessh-accounts`。 - -## 不要提前做的事 - -- 不要手动创建 D1。Action 会按名称创建或复用数据库。 -- 不要修改 `wrangler.toml` 中的全零 D1 ID。它是版本库中的安全占位值。 -- 不要把运行时 Secret 保存为 GitHub Variable,也不要写入源码、`wrangler.toml` 或 Issue。 -- 不要先生成多个 `ENCRYPTION_KEY`。首次确定后要长期复用同一个值。 - -准备完成后,进入[GitHub Actions 完整部署流程](/deploy/actions)。 diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index ca1d7b2..0000000 --- a/docs/index.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -layout: home - -hero: - name: EdgeSSH - text: 从 Fork 到上线,可逐项核对 - tagline: 使用 GitHub Actions 创建或复用 Cloudflare 资源。无需手写 D1 ID,也无需在本地执行生产部署命令。 - actions: - - theme: brand - text: 使用 Actions 部署 - link: /deploy/actions - - theme: alt - text: 先了解 EdgeSSH - link: /guide/overview ---- - -
-
- EdgeSSH 主机总览与地球视图 -
主机资料加密保存在 D1;从总览进入终端、SFTP 和进程面板。
-
-
- 打开浏览器,连接你的服务器。 -

EdgeSSH 运行于 Cloudflare Workers。浏览器只连接 Worker,由独立 Durable Object 会话通过 TCP Socket 连接公网 SSH 服务。

- 查看安全边界 -
-
- -
-

一条可以重复执行的部署路径

-
-
- 01 - 准备 Cloudflare -

接入域名,创建最小权限 API Token,并配置 Access 应用。

-
-
- 02 - 填写 GitHub -

保存账户 ID、自定义域名与四项 Secret,名称通常保持默认。

-
-
- 03 - 运行 Deploy -

Action 自动检查项目、创建或复用 D1、执行迁移并发布 Worker。

-
-
- 04 - 验证自动同步 -

确认 Action 已同步 Access 参数与固定加密密钥,再完成验收。

-
-
-
- -
-
-

先明确边界,再保存凭据

-
-
-

EdgeSSH 面向个人管理员,不提供本地注册或匿名入口。Cloudflare Access 负责身份认证,Worker 在应用内再次校验 Access JWT。它不是端到端加密:Worker 在建立 SSH 会话时会处理明文凭据,因此 Cloudflare 账户和 Worker Secret 管理权限都属于信任边界。

- 开始完整部署 -
-
diff --git a/docs/public/images/edgessh-dashboard-demo.png b/docs/public/images/edgessh-dashboard-demo.png deleted file mode 100644 index ed846dae4ae81c1bf3cb4dd551529389461b4648..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206997 zcmdSBRa9GF*EdQ_3xy)3v_PRi@!~~OycBnr;!>cvTY#h#EADQ^i@O91E$+qLg9d^- zfiL{!dEWQpT%GZaGtM0QVkdiL$y{^JJ>|C&tgI-7i%p7+hK7bKBQ36qhKBJ04Gn$k z$wSmPSg-QN(a@fu$%u=pd!+3yU>d!cn8jG;GLz%SqV?r|;=lOtL9Q&J?{{vAM-m?h z#6N&lUWlqF6R?NiioeLirj{jSq*nL<+~ckXmx+0T zhBmK&(|#aWyz;&@Van=2N$`FSf`TL+*ba%G&B<7ZqHo`JRYV*T?Ks4{!%lOK! z42T;!!;FS@9@}fv%R^G^;q?sFpn*`{dIRg4H<*K1+K%V}u{&=r-nlfs?UKr)Wdw@7 z?%L*cz97lHmuMe6jozh@e0-OP`q?sXFyJ{3;kEQkaz~O_TgGCz$Kl5nIdiWGUTP?9%G5ZEJ_utMe$o}Mej<9l+ zUZjvHduVVnGK`(f0bq-qsR1=%X|T9~uoAr#<4<3{(&<>cY+xQ{k%q49^|(I31K zn?!Sej(qx!ejdf+KHRIRs!rgfwwUnhs*Y8waaGC9F!|!; z_-#{}*JyeeQCWW#kcpusdWjOhbu6UytG#>CvrCR6QTXA~(P0hCctMy*;Elf z3v;v`OYmzH530#My`Tc5eqdaPonm5`ii?hyvqKjWWSEj(7WMm&WK*E=VW??F_|Dgr zyf!WSCBE$Yn-KNOw+V0i$Ui8USC_JGA%9neY0{ME`d!YVo+ytb$tRTT3Pc$ca#rJ> zkTG4^zVyX>w8(@~hSfhOA-CB|?aqiYwsW6!Y|&?y5t8NI3mTC)_nO3n7y2gGVqs&EdKK-?2qZb5tQ ztjo8kF4W&7e+m?6Wx*9P*5pkw7JA1d`&jb?-=|&Vz1D?~@jk^I54Zok6vi>4e4rSV zSVqqbaHXwyHD@1^FDKS2-+mT3c)P3Q8tb{40;f@otfDEnQ-*{0_lO`ZGr@5pQW5Dw zZadyCyQgWd#ZH&4YOMoY5Pwv2MAP4(%`4GY&n!#?#4+gLX2!?L#j@P*gz|$V*59lp zeA=Y+)d3mFw{jk z#JIT(=SL27$_QiZ6{Oia&|Qfsiy6ZuaX&Gf#f;?aM-1)J@o4QxC033h=>a$g6Cc

Up$TpPHvm9JZvJ(+>s+0Hi`t^Qu4d+nb6!W26L zI(QP;h9A!jonPrrbF_e5 z^<4*DXG3$p+|&@-71vpXHuqnB@5`C<@jm8b1Z?f^h2=M0(69^ffp{)HG)TSFHW}q_ zmjXL;nJ4;v%mQY<*5=|*ihEiJ#`Ze;20Iw8CB*zvBQCvQef7Odqjlg|p zw{~v{Ju%0mtNBJA$DjjoM%hv^oDSis&?OzQ8<1^ zD#lbeZiJ*e@k*XIFN|rmOl?Pn5;BxmG!;g;kgm;DH|=)>q*BwL9MI4mgHFQT8~Y1> zI1W5?5{S6FnSi#U7Xaefv$_wYlm?h!q%ipT3ABDuMBqId_95>3>(@h;_Qp; z?eS;4BEA*=jEv}uu^i}OIcs8uQjD3OHMANdx({<}IAfl(8Ysve*WatFVA2U zO9OE^q(wScjk)vBgS6A`O_!BTdLm9GXl{_J(wV^;$WTA=9sDp{*g^Nyx0#@c^SZYF z^)M2WA5AP&x{*4pFy#KyrFR}$92{uEUI#&DwjkbAua^qm#fZmU`_40o7Rmab)t`oL#}e%~CK*$AncUBG-4F#s zp6I5x$!Ax@{b!P9J@tZC_1l1TI3V-M5M0N})zDx7-j5e;${2ENw{|pQSIwxsrqIWW zk_E4&k;Yo<_jy`O#4TlBQ+3eNTY(jz(+3_yRkzeTz@Z^s^`+J5&}^hz4W07D6Pcg% zQd~~hIUCZls-|ET1=|R2cB=0xJlhkF$KTp}h0>~6NmT|_DfO{_e{tbSo2PO@qb<;q z^`Je5-=6*Om#L;_z^PISP%IG{`FtVJ>a;!P^f6Po(A53=%_G33ZApXn)|y_DJU;DY z!8@+3>6-ooMDMT3j(}Ws_VlZZrwoO?Dedd)S;Wx76rNM`x0Dg&0;|t&7u8$^x9cp@ zyPMwTX>dj6{Yl+S3|mmVd-6)y*`cG-%oH3o~9li!7Y}dxm7d;p#EaX!ICA70taa#1fLO!SaNqS^s;K9{bl@V2`yYR&>p42)S zSz=bF>U(NJMolSwA}3r?=g7qEi%q&*XZ6)pS9otpki7iHhE2*mvYchOxSb>{54&PD zL2&Ant0~j!eF~&Y>NGYNL5_9D8*gI7*z0RkjzbT#S>0UMbZM-Y1Q19>lGJJ~AC#E5Ic(Y| zcse(IprCr@$$z`# zQqWwoU9ml}r60>+TSeqae&^|2yF%!_tv2UUdGb{X4*?ol38*Ltz5}I85Fj=MUSt z!wVGEXhSU0c_79TgAai=Noc__k2a z4CDLyV1kLD$tx82EkH(Enr`Ct+1ppiwFyO+#&pc;hPHI{Wb`8GkD8*-*6q8AHw+zj zpeKceS_Z2ysjo-W%h3r2{x#k{=KY-HZfEt7%2r@CeMf;et1l|PL32+?b71ULHcrvl zDQSB*7_%vURiI0@P-H!+8ay38L!2^VJX&Zd53?9GOvc|*_l<9?nob(%-PC*L`DR|$ zuc%Fw3@W0rAJ00L7&h~s_D9D`_S+cMoL_(Xw00KE8`aa2z(l;e_24&$pDN)6L+DIeu%7tfA>hkKirKv(O1bHi8N*yGnYm;`2D9QaRi=uPBQl9ka6cv? z9d#XbCWeTfS{-7opU3+>w*8?$>GxQ&t6TIg;{n7~mV~uqlMZvu&A$tt6!KW98G#)OYlPS5ub#ljOU%K)L&H^J~!9a3GcJPOd!u0CRl!kMQk( za{)1GtY&3~CFT=onwEB*N&=$$Mx;K=b+E&SLKSi0<5hyY)8>6j(FXIO3@5oVuZ~i^ z6yxj)+kszll&k1=>eC&?WHY3-C&NnMZ9NYrT^Q}`g34mqdj%%!K8}c-kbhWwT?aF3 zRAWmlL73tolBL;dmMiQ(iu+&jtl+D(pIJJ`>fBJpX-Jmf>WUELQ--M@8@PJ6o zciltl)@{8E#s<;S@0;g`fSTS~j4Su*NS-8nW=ABS#stRUb70nW=>U*jprU-OIIUrK zkuR+)gEW`u_;&O0^)s%MTCza8$ftKkvu*pCI?p}6W@)iJzp_Y=c+fOD)4M-+upwC0sK(b|(!4m(UEIsD1Ng z;faPNLO)@#upqyBQZ9`mHwy#GuT7;Y)%5UNohzxW;ubRXNo^-ima+_|Hdyv1=js}l z^bd;%9V5>6!r=a1xNeS)uu4${4$3C<;idq#N!O7{=6lt4 z>E)XpWx)c*O?uAokKk}<{c;>{e;hrL>pNtnrQ4KE5QVk~@#UYh0u7W+;wOvlNvzq! z5jdEt3NSn;YLC(lu6SrY&Olq_VruW&`L33H0`h{-KihHiq77!sFePE78GUN9@-EIEdq;s=ew) zH%&>r)}vluXQ$b`G%EJ?*>^?(-XMsDW-Ui%4?Yv7)#KuJO?(3d$`gi5YG{%GL~I0E z{qR~TdHk+tRK}ATkLNXK;ovVm4xjZ5glsd9g~pF&{o1J{Pfup^+4FW)pwR;BdBtF> zE(5Z}9(S#K-AsE-e*c=2^0aj`{Pt=8`}#})lr)u<`V{LeJ>%yTX_IaBU>s|FHCYsZ zEN}O-9{tJ%emF@ths8yFR#YGLp3D66Y~5w!@bQu``{(W_#1YunVB-3H+Q}IwNz3j1 z4XF|iL&hMX??4wz=c|FdOz@}czJr1m!3Epv$D%i;3nCnjQ`bT>0gwr(3hXKeLC$PT ze?-gE9e-r=Qd?1OgE4md%OkEeLhDCkF4JU(N4d>6bWipgt2e9RTXBG2dmUHlxxE)w zSOSDL&Rd!nyin7};xgR&N45qouG5F7M-pYq8Trj;)QslXR4RQPHkXN)QeIGB(%_aXQBL<(A~MfDU4?fj{tROw&XCA<+iw2C5!gM~JNt=00sVE$!l&X`!7wrDDzv{$7OjXlSYj||n z)jBRe{k_ixxy^RH5WskmA1DFsaInjbTfp5;QYz@P@x!t~>ZN&EExd99zNRnM0$+w60E7YaJtu zjCk0FHl-G<~==r60q)04KSZ&vc)JB29yKcxxzoMnfA5xMM4WH9l|jj{H0YaSkx9{Xo{$rDr8qI`fo8xmexvq$VzrUZ)P$x z$A{W~)DC16BR&^&oST#)cs^SLw8W@3V@~>>Dqtp-V_E&>tJ%`L{!0bB{>hhQJ+rvN z)_Z5(OIc@~%rIeD`DTN1^FLQPx$r+zDaD>f^F@|(eg%St+Cft^OY(Bw=CZ?8Y%Thv zW{R)ugUs%xZ%#sX=A&uW#gv6~BlpyZ*LD%_o32H!9et^Ak9pb2>#aQ$aDwosmufnT zx$6+;$7R*sPrbb-Wm|ORg-nt-cmb2QM(kxOtgAoc+9~v0+pXk1E!6urZ~?c~n`7+6 z%>t*XhMIN6*o71xE z_XFnt@ww)urD8UvNaou!7lpvNzCSmO?&Z#okIBK_S$Y*4`mAlhqu=bU|RdK>b*NGh-J3Oj^##vwS?hkakp4q?h zD;1gVVo9mtb*gCBgX;HBj*9Q<$u4&H2_IdG0ncbCy^V#eu8CvWqrGV8+4SvPcp{s5 zi!AOK#dKeP;f}JtqNkiQ*SyKUd%YWC4FZxAP{jV>oDfV@1(-k&S|Ud<*lh? zO;&QUw=aAt*23OO$;2)#5fio~Y&`?|)VikbglJHziS!@2`{JM5lCY3ix_O9eA}g@# zySbAMJ}ab9I^T0U^H$dZnpe}iE-b(T*3gSCQ&ZNX;oV&B0WeX|=gvqCFc0-&ph1bX`*j(PJ0Lxja;#CUOjnhQDZ73!)<76nNA=C~t0e(GpZnqd^o3bpu;xn#K7 zSS=k`oyL(l`OySnXuBO_YUpE18l)X5o%Cce+e)2!p2t=+eTs7Zy#14I#GmDg-e{D| z*8o>HqE|OS*)H;>p#4yhcrE3mPn+~;OOghC*KOSOY|YKw9?|yVt_ynsdmrnd@O!O} z^dn-0Q2RM|Lnj*h$jPxOtxST%&msiMd$7!!tKR&5MCIPN#^EtHJ)OmD=1|?qhg%vT z@7`!mzSe;6gx5q(l`L$2Lhkx1MeCHCm6dJOT$0>n524j({P}KrxA}X8KcoNO3HSNO zG5{`AA)r^k!nhxS3*NW8mL3yTI%QFFEl82+4VEvzXkLG83yIfvP`eJ6ioL6X&)O~Q zlbH8%%_?%gnuK-y2Fo34L1r;RwaL07%j-UE7cADa)fPrRkBWN@y=69QH8|vvs?+Y{ zX93TMtGP{~1!Gv?Q za$h`{{4%U>%HP~PZ}~96;xlxEOmknk?l>X4`Jc>GyQNV(@M>%`CT_2Jf`jXy#MWcV z;p)KxaQTjw)S^6q?UmIhpPB=BA2>@Eu$zTf@pEwQ>=xo^5yU%)akj5Wq1hY3+KBe! zwe;|So4e~u!;vbtd>jv3m6KD8pzPHKH~xL`^sBC0nu_DOa&Y+VlQN&P!5xt!2OhS2O^k* z@DzUbG0HxqbIsU5d0oAz)$r|7O|{6Swzlw7@_~j-AOS=m{QLJzl)-~IE}ihM&%Cim z{vh;%3H2!G^?gb7dsA`5JdYil`yuS5((x2R5h#IBd8~=59CSFUl2YM{Oo6yRh*5ZB z(2NLp2a`>PVUd*9{Zie5^i|QXx5LUbjS8KdaLd@V!L-_4zv(Eo0RXN8ODL2haC5cL93n^3zUNDvkmZ-8 z>8Ugmhtq_%kOXdgF_SI7H&_%8DeU;K1eyh|2T71aJ7tq@ztUYJQyLNjJvE5OM*H)~ zbVHHmsdCRC=h?*2XSYKSTy=@ZnW}7m2ygcp3Pfzyb`){iAQ7Jka(_2s-WMX3HGke$ zz#GhdwlT#vY57VdvwpM!@UWhl>(4s#k1BW{O{OYkTU{bi(9> z*a=B9xaT&C=IOX?dKuk=|IGy)IW(DaIc*h283<`VGm4LH-PnTSQRtr8K?8m3mdxPZ zVskAw+e6Mx#|$s;OK&J@BVW&+T8zdC&G63%X+zI@U25FnFFfeNcKYJ?C>uElu=SB2 zA6a;;{7-v)0I_>as>Ba&J%ohFD^fv6meh=RXKQ2>N#Nm;!>?~c_}NY;8Ha-g>!}1D zKSrQW#Z|0C$IJ&o(k}IM3$CQ#5 zZJS5t_$WlwlnQDz1!?L*elW$&={4a_-rnC6|EIE@MMd0Q$zLj2upX@|^yrz*66C4Ea{KJ7`>}kUL+(1sy`##J37sYYqJ*|+J z92T}c5%;)f(y=*r|t$c z%ga5FBveI7oMAEn|7jqMYLHxir${SvJk6E+k>l0>?E0kbd3kzX=8V;ZOaQg^|9tXT z8%t~3g13UGP+8pf-_AZgmzBw{|X9KnuekM z(cJ1Jh+RU7Tomx1S*aVXbF}pdxt|;*Wk84{HZw%rJZ)%OWd5DSk8CFQ2a|&uB9bja zAJ%kBC+o?!g7Rf2e%5C~Ai(>g<6ra@yYTg6Z4*t&6U=r(a0+6aH7jw-rbyhQ3CUi zF$!z&H!;OH5g6s&K;BzO>%Ws(yT#OY%!E23 zukrQB>dQ{|46jmfLr5j}v(fd)YGsoI=n(z&|D6lYIVuUa)Y?^SeYZ14RE03;jLbzZ zQqqM@boU+F?lVkg?QjzsO`tYWf{I$=PTu-(N8h7 zvuE#c;OD<}*-lgc648cDl=F&u3*Te7+K_4nnp8Et!i~(=9R@){3}@!#mx=$b^+SL< zf~kU*dKkClaNFtkyCYi_!Q;=Y@+ALq<7Y*m{^S2(+rG9qY56{Ok61alu}|E}yx6(K zaPeB2FQ2@^y*(*>cA3#YZg^L-Z$iJ~V;%YWTpgX*>;hFy23#})3Z*ohT!#F8L)w&2Y%j)qB;$+^fd+~Jl4>ub&1EWmtSY-Ns|zlbpu|6+kQw0*yOXg11_zGpY^dRxY`S(uSe= z&HZmzgJ0a1U~x#@34!+lnP-T8dyd;&UTrCAgbF&}`nt5uq6Jy#F9-kml{)-<(*pM& zzI1;0dirck%EkKNdROc^!|D&eC483oflnag_RHYg(*hp=8Q$#?VFkA~$<$DKrJZ{{u=5d{uMfS#ZY(9%%nD>$%|iOaiiMkI{q-)vp!B?-Nk~qbkj`D%I36 z(+lo93E6sHt-H=`r@pO+aLNMe^fCVthF@*IEt_|T?FE@$yt}to73T51%D`losPxjNaT5{cqmRBg@;cuN?(^n+ky4JzrzN9`y(#;_fffK%3{mKcZ!2-7r>U zZ>Xaz7CrAy5xc28HzzR73HzVd*XnLm7Hr`)58>hQIfI3>bMGD#Eclr`6-r-!sE%<$ zQ<}yHC(P!5in3j;TGdoLJ0;#+O>H|TdS+NJWFM-vQ09;&W}9pb-LcjHm8TR-L3%Ys z279D5K|*;EP@>p(*WHHj@gm{XfLp6xkgQc#8YP&V`-g@0mkMO^lB=gR=^521_v4X%~EU!xl5$VOs*_wvG7<=YM#Sgy{*O({o7NK z`rql&3eP< zuo>{uRnACF$|W|Fg1Z=U1Mw46tyw05(=()3h8scR3Tud$V2R{)vJE}4N{eyG!8XI0 zL9aBwr(i~dM+5P>ILdZ>ARtfufSz7bl12tl4W;zln2#p|sEMT9?7+)$@P2McjZwNn zi;E4YM<=#CD6jXOpFkWgQvx?*?Q+dOn@8(Df3EJjA!R?1!50nsbJAA_-ul4+MJ{#l zmZsRudA1pGzjSSAN-dtT;Yg9^w(RTWAiJYn^Lly#;mpWn{29-AO=burkPW?smJ9Gd+T@#4|pO@MW23V4KT1X4_ za=5gTmv*TAYSl^~3z0S3m(w!YnJg3S`)*8vk6&-D@J(%uOED87KgQOgD2L)G6PlzY zpGNNP?a}bO-BY}nkgnneMgvq*i{jgM&ixxDFFGZ|)dG5~vN4F9h4_T#k})1m#o9U} zvFSoaH*D{0XIh85yR9#NEc!k;0$8FHG@*QcdLud?g+wi;(Bl!JkxRFA=c4mLC_#m; zT_VYw@GdnDHQ@zzp4eIZ;CK7qN(qsAdM;v^LNh->+A73pQ68o%RjvdpxDgrer)pHv za~Ou9SF32GdB}=`$Rbeu1mSF5D8I9c+7nwPe}m1&aDlE!&tFY3m?+QYCz|qoZUP1M z9uFrgl+59H+p{#N06u|1YEA}BR7n!dfWnhyYS%+LQAn{>{XYM;C*W;O4$AL{Zz7^pHehLwD=>%jfE~e}?q9^|SF?cF)5#yqiP$^a|qT zvRBI)F0U_h^UNBy+UzD-|IGz#;e{WGPt%&U=JtLb8seDV_?U1za5l=xDKx)u0*o_! zfc8Pcm*Ou-zJrp4L^lI{f%nnn%|1vcIWFxvd8+cjvVR9zp=C0+B6i7!MV zeQ+V7W{_GP0%_#7R^8tUc0Qrna?480n)srfpfKEngL5!fdoKN9f@$Yb?<6Z}cbER% zF8uKhlfUb4t7%G&gMk2p)RE7(mc69mf%X&zcfk~qD0KQ)Y;>WDkgtC;I7DC({T>hc zqvU@@kbk{-(7sm5C?uxl6B{N3aFF=@bKy@WIpN(WivA|$vMfwZfJ8wV_=?v6E4RG+RpNI5u=of;H)kKxDHza{8d&{`@rILZ{AumH>T)c3VU7*yxP zMHRz&KHszSCAvbnlT&!S;DQIL;AE@`3h9k zWpjP9%lI>#piQNPpKwwFB2ty&kb=yD#cfdgpkNc7AZ^x36&s1BRDCZarpCX&N#+@wGa6X;qLc+z((=#9F3jm2`tuw}k?y=prn@2*b|mQ@^b zA&suIQ-_+v>s{UFQ(NIJ!fT*r8|u$%onfbQk}u+oCDL1M7O=fqt)+dN@a-3E7e;IM zJ(;&($}DlTrx>VIS_ewJ1{?PtC8rDal0O%Mg8K_MLt3GmM@j6BsPMPJev5rB${-%Y zCqCq^llEQ~{oulnwQt!cujOXGd*}enre8Jj?loGf7;tA_G0WmrXIx0fou3|EG8Yjc zj~)CP7|Dljk^tN%$PXuu>@uSX)nZ!P1bM*A+w$R?fV3%N)Yb|$wATNmRE)CdqHO&*0DStAv%Jv5w&u*tJ4MD48?!r zdHk5`xsLR=0n*y;kkepMo=7fO_^evJKZTab|(`NZd{6a(|wlyS95Q+?>PA;2pO~;4t1+%V+xxvrgnOwvSp5yN`Fb&`?IS+_OF}8>H-|g#_Mx5~DaH%h zT%WZ&z{Qe%j2iR!>5VPmnZu+UH8M=4!KN(5Ca$uKyHp-1bv}=&KpEq1%>kM<%$63l!l%~nR#Ou{a>c}OVTUnmP;36wq2ayZ6<1g>0g)12>c2p_7+;$h zd3bD>eA~^dAx>udQaX|cg5Zm-!-n?|OYzX}<_{)HI?q1M%$n)nV3+(M=Lc#H#CqwuL7yuzjc~;-nGBdD(`H*LtI>)!siReW?A%(;DBoI z53&|&%FMH09bsVuLSFbTz?$^XrywvU%7hZ2s#O{L)gs7ao7+Ks>kv|s*R$WFBKew}gx-ZDzPWVr?jv zgZ3EauFxHWj_dG-lTT*(U8~o7J|TBQ`id^DE{kwiaa*<9Q3;vlve1YKav{5qc4b)# z@B}$x(B{zbQzCZ5%ch(ClhsU%O-$`iGk1ttGP1-9?@p#hsQd#>9i6MCyWRJo)p2{~ zDL2G4=vU;@d?DJGwT;pfD>|9kI@2lLwQhM2Q~AR+OB|_8=`44RqoYxHI`q7!XCNdL zst8aW9sL62u^P}l@zvqR&lK=7mv(q_@9h~qGZHlpa|=+$?PkBpmQ_6`Zj7s38((4H zd`)$(afEou3?P~(ueKiy@!83*EdTq=KZGp^Klnk_NJ`j`XmzUu!5$sNC*+ zcjQztPYdO_lH8rW(4D&3EwQPdDH-_^!Ux-w=oh(k(adrmQ7`kVU!4q-ksDSv^c9ne zIQ0SctY&U-Td8NFR9>C-Nd<*dpd4nMVV$Ad!3UQ`&8v|GGJqE2Nts-#mJN<|JUCM8 z%}l*U#J6uLCpKHwU{Dj**YPryU!HX8GQ}bWMQ6p-jf=-@1KZ0N3#(;Q-=s?4pgL9- zRY>MHMFv7~B~9(hd>7~I@070UHN3GPLzOez7~3>7atAHoo)$4ge5nVLCHJk0tcQD@CdWa0OIhw ziSoA6%E$ZT>Wnin0qQjA2MIqkI8|beX;($zCUy(6=fb!#JmmfER*W%C!iy^Cd2^u zrPEWYqKwMO5EUT_BzUy4n#a5|^oMjpNO1nCP*$mFoRG?kat8W2#rFr0#4nPPvPZMi z(d~hPy5lVZ?nuCDJYf7J#K0hY=a-7sy5Yl79Omt=@Z?O;*2a!(pY*d17#U!jt9B_l zHa*9V#3_7=aGiK_?{F;)Lv2m+bgte$JwAO8u_1}tLnfR@+75u-#n!RLJUCLaGQIjE z8OBVVs{yDp*ObDIQ5#fUw937EK3D?kOK?0rw&q>miy+}brYc_MWTO=D!=R*bCf-j; zP5J@S7Wn*^)n}|P`xy_4wBGy-K>@1Jk)}t>5=wEer3-`hfrYdE#aP4sD{x*&cKNsb7e z9OubtZG!L2vV@8Zyj&k4e~>MC0}RvU-d`>p?ogyCoo=1VmyEWw{t&sFl^3xAOxa&t zkKOs$3ZQKHk8h|%WW|`q;VEuKQ+je*S~57XVA9w@(z~jbQx?9hn-|5qk!NeWcnq&q z(85VRG?Yv%FL3`88RJ1_X^DI{5sVPYH4zM;`uctoKJl70G8ws!b5&_Q>`T>d*lWLv*x)@2 z53Zv}Sn2-kSE*!B%utC82@ck6+;uNdgEVY;xqw-wjA-4}tgL4JWz_EU>~Ui}GVTy_ zcc&rVX+b@ycHywpiO~RKWL9xKIEzQmXe~fH*Sc?5!OB+epufHzOH>h$6 zM@D>JSgPukLRT?o;rpZ*>wd}?RAQj_>j$`wpwyy@;QrF$)AittC1{>&tMOPQFDtO_ z#W5UbyI1BC+CRVzv%Ta28=tP6c@3#sx_BN|)0o?wr#E;VKdtRW8c#PHH!Td(#AcAb zYz7%HxY%Q&{d@zXE({P0Nj+guS`s)i?<;dwy7@CzkYY=*1nDi^Q5b4c@!FY0E@jFk zrvU;g&WMHm052R{@kHp-u6u7`lxfBK4wEbAn-M&T`+cb&zh@W!?(FXF?qrC2Um{l^ z1)nN3gKqv=F+JX3*Q^g}Ik52EGgYBr$ccPatXt?SJgn*-_nc@uZc;N2PdB! z#HXZW#HPx{RSYbZhm28WP~aaZ-CNE2AO2{er3PB>FEdGee68mL)nDs9W|e=6g_pNf z!kp@u7-NYo0pQdWx!Z#G>Wf@CthVvCK8CK%ao4ToXDb$zzcRk5=;VU-rZdD?;9S+L zXSp9YhIfglQ=iKpg=E(8At06JJr&>giX{_vbWvwsf1+7Ul^}ohkAG@Mxw?PeF(H%uK~fa3P72n(;O!C*mI&?u9%}G@umOo<6+U z*Ru)=xaHnYZHzEZmdv?aZo$IcnebWLJ7*<&y5M{?J`td z^cnCeMBa-+Wc2w#(HPn=#qXCESx1owl%?pYa;A*JrsbhKO*8~+nKEj~%Fc!?O-@J7 zK;#VY^JUfo1-lEqv=eM6s`wNlh721@&P?1LN6rxwEtX>+7o!wX>-HAhl@~yc7suQ! zRbV~fGMCaR8+{w=VBcoRynx^j%VkLNoB@ z6DZOA_hG)8u z@bDJ{`c$}1v?yQ=O3qQdzjzq2WU6`Sj2#{Zh>2a3!NT@@b83a{67#O?)&&$c_GXyr z)hmE>SC{B8_d?5Mz>Pq&AjKkp0__L2llIi`Y;BRjO7R2Lbc;ONw?QTG7EeJAmF2@m z)cA|1Ygtz8_&?2|VLwL6;Hs68r6*tOmmE3DZHZJYXd-atuX+oJ<5Q6dNNJ47J8LH2 zZ#H{#g*7!NKZ~cne2q^?NGLq{R1RDJ)LAe4D<|7@^%elvb#1asuMizRp)re#O%?E3 zR8rj5NawE|Fn9jNcBDuOu!@R`5^twJ&F?h1v|D_bV!&gg?0(T-J{Ng&l)AqyrEFB| zS`50}N!_;`mvF!G-bQwY6_SQ`@$RC0jaSLZ+-*9|C-vc}^`nuLV1uLUs!URV-G_UJ zAS?!G^mt-YSZL@3&N8;|T%#08_0o57kE*DRlRjP8;X-vhBOUX0&XJ9tPq=+W@fzo? zFkf=i@}I!ko|OKhJy;7f{q6;8xvP3S@kSW?N&TSD<_%YQ?4Bmbuhjbrk8*GaB8mIk zWE20ora&#p&Nmi*l=m(e*b=ShL07LzuS+pM5VZX zlf$lny|+nd{PY>0g;f7ESg*y+ZTfosZ_7nQ3Nr)d`7etZ-Kkbq3(mj=kc? zwA9OUHO6FJpGwF~ZU6p_LdR#B#8l)(C_g;3R#cpoZKjdkAs)ktYApLovrz1b`P`;X z;99k`G}Mo^c9xHV^8c<{hs$&Ie!qX4SJ<9{4i&EuyVKd8_q+h2ltDqyQ!viY*<0!C zi!Af^IFGP^^C_|GdRFj{H~tFjYevh3sfxu zWK1dZDU0l7M>vnOZtMHE8;1$UG><2Dg;7+;Ne-kVL+95(ew;DpkGlS#8gACn*tDTttnZ4k~ zV{=SvCzfA4gBJ>3e=P{)jr1#q zw9I&>V~5Z4L8+4*UXx=I5guJ5RfFXv_#LiI*t&LpUJyOhuGs$_8!tXM(C?Ek^ZVtdbyw2R;O9VrO)$}vw@aOi%6`fySoB%u2dlQETX zT*zSQMUvC599|jYouE!1_g47spIQxB)}~Z+2aus(zEz&9A_?g>n>)@jmKgTL6Dqi8N~Yw&r|3e%{wo#?n~gZe&0f z*`t4ceCBSnRu6xrn=#60R9BBC={mS=s`Zev>GB}E0hU~}AD&E~KbpeldN#bvfj{+h zRhA?UJ!gD$kqpn1{~p~g5M-f#yk2lTfg!Xq_)@wTkL5vyIe22<5#94HPx!v^@~SYk z(_up4x+!jN0FP%dU=6lIovhI@VoUf;?eYu^=pxzH@JiCZf zDmx+{-Rl);=2s&tc9wmC0{0TIlA+j$MdpC#E1t%O?h|*uY=D8P-b(&0?o6wT6$OTpWyF@Te0{UG29;eF9q8huQ=DkW??{NiHrXgV%qHh)u7;nh1!BGUad{;qfA5kvDcRi2ZyJ*0sa$$s zxgcMMzNAZ6V^Cb!mVO^tlw1?b*Yzp3r6u*~qC_!q$XrNQO4xha?P^b0$V=$<+{sci zcTvWc@S6aY$?Dy_9P=`Oh%f}PPmxw#XzlLRQJj1^-M>E^IN}vz)%sR#E<5gv!B!+L zaGt9(bbhJ(cxh)zy~=)&`o~UYXw!V*(qQIFUR8WNQR#5H+o~yc^AWu^9|x}gUoWR-9)#%9k}QEahKq{OlbUxa3zg@+EfE9FCTfl?E$HiV+L^f zZ{$DD?z-fTchw4WFWBFXdYSJ`Ee*WoE7Q)Zi|yW<7`NXzYY+}seRFp>$8C8gE_yuI z$kxWb`vpXgq3;k@<8`NVn0z#CJY4_bmA)V`nZi_14yVvTwN-$?N=-K%Gjhk9iv8EW z*M_!isj09_9(CK3!9soZc=Ry-aoBoHF1(gT+iyAnfnmK;>vHF7$)7ZIjuSj4G86ddz#8h!L+6MillpA{-fF z(w?&Qo?4shmrQs=559rc%Q7`9u9pX{j@e^zC$Ws~LKEy+#i@lLLRkly#UQn10K$uz z)Zrg(XylhE(FB5R5alV}yRO_4>qr;-9z!K>_qDcrhkY#}$7vk>#tXgy2G6v&lo59z zt2z0cu#x+^(MHGk+q_w_27?Bc;i}(Fm|i@zWi6u7Q7xfGz1)PcF(ce#kw8+^P6A%f ztiRsxi99V)Y=ADz)IJGC5m+MKH)*PKb&2MNxEt>Eap-6xRz@G1fy`SvzJ$s-qQfMG zXP(|-Oi@I1wgDqO?>nn2hn<g_M9$N@V&XzcN6;Hx;Z!TF(Bx5!oIiwh~V<~CNu)LORWw(dne=TMV>li^|sG%+3FrWfBc_Y zUY9^#ipbB46KUOBqo#tsSXm|T8ODNN8@R*UZIqEs+X)3QRP*H!i#sv1_MH$Zk?h|%yl zBKi7qpYyAa#riIRb-EPdw@-c+kFr$+C*`f{>O^y>vw*|(^%nEYOvq#nN#9XiwiFDDlgT?Hh8SK_? zc%g>(0nDNC50@*g&&|SPTOKdB>YfyR(7cZqTbUgFN3JlbPC~VgSaSY*f<%wssbGyH zeVpDV!z3P4E9p{9cLxV3&-ZO>I(U+mnvb)g_$rjmM)6(!|Ad_GxWWs8!x=FSgBk@i7xe%v*{>U z&F)zA=hAFSdF8tw7q6R;(8g~!&^cY(A=opU) zV$~L{-%wer!zz%}aX8otd@NKE3Shn`;Bvw;tLHb zo1F=-0N8{%yVXM-^xVp2#%zMFe|Cr-bhdx;r?{z6(Is}|`AwmzmR8NNs(RbBxjE^j zrDoH~DPs3=fkS|&OVdC19C0p+#06q%>0|?ENhs~6^l+=Qr_B=??ugrakdh)Vcz>4f z-}amPLqOu^)tYpC7HJt65$6A?h2_h;k4|O}x2YJtuCOl5HJfZSgeP%Ya934URaI7o z@`}jSI?{ZUjj_th!~5eRtuinqT{g>UrR)XNL8gtzD?}DLeAD*sO!x@-#|2XPYK3gq z9Ht8&gho;~kGHjUB$EQUHBN^j%>u-fYG)!v=O!3c>Pk~bQs>;y5Q*D?ElF{4q{PI3 z0U#e(P*OZ#Dqld)@mm{W{Y@OmQz6&&ljs{xNUpu*8mxx4Jt02xn<}~6&Lr@A_ps$5 z{7l>@?ND*AKlq|i`WnxAvdUmk>*H5J%VKKNE29=%`FXjaSqZ6@@UVybt2VLF_`Y81 z-`u-Zx1N{V(6j@EBBStl@kllFO4Wzfqp?i=b0aUv-J900W8wKii zu`|EUcH626AV3fs*AAaIDC-&I*&!dwueaxynjB5>mJ=X%?N9Ij)R^Xu98{sAzSRbK zIeq_L1Mv5jp~w2s^Hi_bW-K3hQv;3Ei`1BiZ_WVel)xFH`StRy+uFG6pjH)zGOe1JMMe_7>Rd9h zC9O73k{gZeaZ#P{S}&~MaaeGR1w`V}TxHyLy^ry`7pwXHLxT4!v!e9W`DIB{&u;|&WWuXPBQ3@Upm+K9?_|;JhFA^&e?qU9UpRAf|2Lu^Xe_?ZsHGYcPv3z~fU>O1w;W?5 zwKIp!hF70c8y1-G$OSlNC)Z06{8F-`jYKQR6kbQC4(x_NxAT*{Q4F^bE8zD-kbQst z{HVFRV-N?S&+a=KRUz9mDII>^4+|zI%zcjAluBpI&C5IFvq?x(${w%&59k1_9>>{i z&pox3Ym&T5#`eMqXE5KQ(ZPquN*0_kJcZMG)%lnZ`K~KdB}$>dYVvEp`@V$sp9Sm{ zY!RP+c4xO#JV1pm31VnOq^;v{u(bQ$DgGH#y)QdEJ8kQuLLE!0o0wBmjp2uXnI6vz z^}1*Olt%3WV2N_?bbQnQJ1v7p6bwm2^pO9kIK*VtT>HFngyp8C?f!?Xsz?Az-9EO>w3 zN=h{wA$Om{qJ^v7PS>z%ZEwH!8sttQq@-kF>&#V>jUI|~%|TwP0&9>0zi8UNkXPK& z^ucR!x^py#$Y3EHh=>&qMj^Z6>z14%F&VeL9yCXM~vO{=W1 zeA~|DAq>iVKpH{Hm)^`=bY{NPgs@y*RhZw!d7@dS#rD%$=vrb+XM|7?-9)rH9<;m3wY;S9pSpzZ#+!}<@Sj3 z$-Uz*E&nn>k*7~*M3~z=21YKa_3IX_TpW|Xrz`f9q_*-z(I~BYQ+>1@95xi@cqRUs z*u!B3`D=#KL|ZHbn@umvEy!MA>hQDErNz>X{@tD4K;!+>Y-9O3kYVa0D8I5GCpu86 z1&zi^t`J;HGs&%k`Eg|)l6d|WON+cC1zMs3A>CF|_9q1HJuiPHvBXmXTECSug586s z`%FBv8m4RB@EJBYwbG%gf};nA1<$OH>w6t-*O|!ZOo#H5zB-wERnwz~KPtLrTn{oK zfa_OspEG4{`vugW=q{oWK4Z$VqZ3Tt=lTvFTg`G-EiRS4o<=YtIN^JWu5hb@d%id? zCvT6c(D~=sv>uF!zt!3$1EETnlAJFNL%EO_&K{Kuy2>(*rwo87E;n~Bc(ML}RVl9l ziicCrH1Bx5na%@qexk3ZK;C$YN#~+^li&VL0MvNDmQ+NF+;sBKIXTu-`@RPl17-c=?wn~AH>zMc0E#EuCUY*v5O`lW}3sLFLjAG z%)#>p$P4+?B8`Z5h!}8M$7(d1^ zn|bY4>s6QW#Os-%)Bn*&;cI3)K)V(r>!Pi2Xm}T;If@ezzdr!g-Cm_dr5*l`&U~%>+%cW3$OSfpEIfkjA#)S_Y!>=@A+yYZGHo&7{|$&uiuNRd$GSyr z{djRLvzi{+Gw#G;K-h5S*-;ot8%gtx5agX?u*A==n@02*fHcvR(UM|(C?}vUOK^0f z5xSh16+RD__ST9?99`5%UYTZ#CO`{N5=3A23NLEC+)+!hrIDv5o1vB4!}hB#lx1_> z@uAAtDPK~_qFJqO#2}Pe@cgZseCs7Y`BPh}lr(<&I6pzLbW@mOI;W3^czQgnLqob~ zivMVCgxRyiIR4Y-w_Pn}w0+hmA*B;aQC9D7lFfg>~h?G`7<{SiCzk;PZ}zT+a`wB!`2Opd zc0mt?6xMGXVpAWD)+}6$G$5!jdogTWEXlXla|kno!9Fu7TtSy4CHtb2j;d(^$>i1r zIge&^?J&h?$57^q&i&cP&4V8lYA!XTY@cnq7P}&F)n_rq#`$@u)4;0URP=1)qe4QO zu>F3wu^p)+h>)J1U&;JkriqS+a9WGL%eas=LYohqmK^l<2$&h? zkaDBa@~vBnY0@U&~l%kb~+#k9rwMf8jx03h0pE!xeF&6~sk1DIr7#)*Q z(biF#*;cvxJKTO2FQ+&9d}S?k7^rcwff!kxIsET1ybeD5KF(9pKAt56-Zg#z$9t>O^&&cu6$zPXCy`M9l5Y5F@_8#!HV^fw& zXXnZa35rPuV*$Pdw^T#2ndq`T3=jYe%}{g@}3irp9FDFaUowl{T$W0msmyl4BE`z!%4`UR|q-o4?ob!xu zdb!IS1ZYLllnU%z|K@xD`$QF2^R-eGHN|C=MM2je9aV@?7uam;-cCxQ9b1e@hSK+z z&MK!4S!my2c41VuaZzeX1aq=|P>QTn8QHRXSXXy@eGNh>w4;jhkX7G!ET_Zpz%%z3 zW9CM?$s6+9vrC?f_R89t5CkEgS1Bf{S4}rBeSXc$!*o{Jyp6x|0`^sG9LYSFZmc={ z|B@H0R|}5sv=(k6>kPPp_B~@@`X$brvTtHaQ*pUiX|npSQ7T$=jX*bd>lapGfg*=> z_2%LAD>n$Qvgr?T4(!=a9VZBG1yA(&HwmH}S$DJ>l0PebP08pg=wz~NE zM7m4{MP@YSG4*Zn7T;Y1Z7Rx}4+)O~;%<$Lbi(-}NR?fU{qnb?qh+Lpx;6|c?4vBl z;9Yh?&KXl%r-RHH`6x&Gi160fT}K2Jk%!dp-a*z`UbD7^nK6b(b=SPrt?rR<>C(eW zSr=tFt%LJ$ttRrM95A3eEL-rKso>ZQ_8Y0u{N4NStiiDGRka9gogw1+uy(m33HfQ5 zOd!EQU#Sptb**Nc>`dOQ%2KF@hK$XB4;5Cw{7^w>e%0W1HrgtNDBXxFEBRv1Omw=& zX1j0aD*f*$hD?=LI!(b?$Y^2w`Y=EfsRE!abRRIN_)>w{RaOSn#uH}Oyg$gjtQX8b z5iDuzgnUShO|9B*%YJATM7(=e7XW4k*}?KV{ok~Ovs1X@tyYX((Qs1sZS0i->#sGM z&PLrjjPVD^=Ppr?)f*f9?C=?Gz8i0or3&aFK(3McSc%%oVgaKm5+=&r!mdtE0tY29 zE?K1iR9Tb8QJ~5nX}J6o{9$F!c=sJTRJFB2Afu7IcIO~EPH#Q8@qEPwjFXOto>5jR zqH4JxPUF+?i|tfx3gdK&)K=zIo{>I0CKr^>@Ok(QDM5dq=i&RKo|N^|h32n?zf+n+ z-e7Z#^3M^LGl>N&h1W`0YOK9lrGfD>y%gDWA`vbRL5>Toey4>nFZ}S0vphUt36#HV zQlJvvSd;-CWH(oBls+HvIKn)wzZDscRoyq?&`~!9djsaBpWXc$>k<_`M9(umpcn6- z@{HzFMku|Oe25W9Y&2UvkbKK2jzvj>VwJ$>CL_AZH`-qKp#%TK*c|v?oTZ$rUWUW5HiXh2nBVNRkv2Ft4^aQ+)Zn{ zlk4!y<9kdCJkO-HPwcEhu&mL<$78lzDVC#LQ;VXev!%R6c*`-PXaP-?$1ONhKc_xa z@j%QmxddN0{p;#>A@LWW&A@=c_i8tV0vv-6AkU{i-GLlA_{#_CrQwsyug5aLD*b*3 zK8#z6E$Ve)BpN+ zZOI3W$9FzZJhciW{)$S0HH=+`OPvdAH;GY*ZIk8;sut%Z!FOzldymQlxmD$N1N&VbPLD z#I`HCJ)7p2!@byG1_i>3bWC-E8>XomEc#lj7fMSNu5mp~ZA@oS?WkCdCt?}&uwSt> zmCfxZdIv8n?0)4qW-8#gJF(iHzAxfdW~aXCvCyLmVACQ{6>&ac>U%M(#}k2jr=cc5 z(pBH|%j&tEY?fSEZc{ABQ2IZ6lN*i7plA2##LB@l?lIb-%iniee45EuMAn(zUdvYQ zc;1yE?9!gt&;I2`;Tgua&gf|Eoj^7LV6U=fjoPo2 zJv3AY^gZsvg}fyA8TWY+M$f(mPuv6-sEV*}h7`5w6IQSBU8;?Cr3(}e{n|!wEPEvlBT}avd+OJnLl`Ur){E!V~?0Ojz&r96icZHwZY>n!@KWT;UkMs0_W4$IEs<` zJi}+}RDr*ww>z&9grfJ#Uo+VGmuQYr*=Y48hID9z=Z)oVk+%IKoHH>|D%B^|KY;LUX9Y?sbVy?#-y_$oFA>i=tNUT3YWrA_$?HP-8bu} zYFRNNT^_%K%gf_2#~<+$P?$duUY`)=RhCVaQ}3^KfXswrl%=Lr05(_te5qv`nLqrNh>g{rlBnZ}i&A%`9X*x$MRjak%<;JKpemZ9J7>36IP%IMm>vG@ zs5}>}hx8A0osYkhusg}UD=_@5_1O@;{DmQa2jIYI&`0eN%f-acM+dy)0=BJJIlBQa zb;7H0ATtJBm+lX?7)CcDr6q3M7ao52rdLN!#TU>0N=V6?J{c9l**!Xvx+0LJ`Cnr! z%uk^jyw`Qjt9t`nW|T)O22FvMixH@3(OIL?+ixYgadObbCGK#usQ4_@l>$9+5({AD z$)^~wx{J~SN`Zmr;^nUyje^B%HLM%m?8-(AVzzWGTxe~VFcmc`C$TIJZPv2x-s$yM z+fvRUOCDT~?wX~GRUk`rOr;?m7aS6vJH{2%B(QyEoRKCvojyg)YLYyC~WvAiwB&IJoYo1A+ zDQnzB6|F-ZQZSM=8?eUoGf@3sn*QKOxmjimoc(}yk!1JJhf|ogbkB=vqi5zgFtYDh zS5g*TT+cAd6-$A+MJK{9JbyL6rE`WSIK+o4Ya{3pS3uN(;l}61+;%1_C5w$|QEQbf zOGO(^bVEA6<0s_x(F$@$v@)?>x;&&@GU7Moh*qA^$Xx%lObatokWnnvsPM(fdaFU< zbcTC9t@y+@dG+&_dUp~)H1%^)XOIFduvVP`8NGMm8n6z1jx0`Yc9)&$ioI}GmTHp( zX@ZNWAB6YFUEx!PJ|>6Kxt?)V)M-_l;>bvfZF!hR%zp9|c+cS%xKE4mMQqN13Hu~Q ziK^hT(?{8&n6VHgA(M84+HXDv}XQUEVwwrUC zQm``s%n9U5WZsiSejFh*wY7Wb-3+Hi*oM=flO&ph2H<~zUK;C67=dXgPcRd2$-WoV zDDSNVdrx}=3SH$){v>}+X}Lg?9qhTK{-2Jw{dvfPcH=rG048(K8<7MrPw#r>iK%g| z(_BrNPc-<>jC=!4yH)Fw=T|0}s*8xEtmWUv;;eNr$2C|-7lZZ>i$Uix`3-4Z^R&7& zuzsfx{V!$)$>8R5;fYl;j(yM6d z0_hr}%~y+wHdmC++8~f*$zMB^mnKW{OfV5Nj-h2fBc_cvE-?K5M(Lz-T1FbawUI3v zCFsuiIy-%LePW+>=96@WWSm0j2+a79PN#t&t#35)38pVF!@G`ueipVaJP0HtoBu_w zm5N)g9qkq7ll`}2lgcP6hW)Pg&|^U2@g7H7E~a@(*v9({wbsPxiaGo+8S;#7iNlm=c&dMe6lHmDZNBJq* z`;h;qk(Z)fSd3@%Y3)oN(9JHGExte-V|V(wX!&a+;k0+OG@_>-$Y5uUWF?TEr?W@AfOPFT_;Xul z7W^7l?)Q2L;>hwQy3YtqHhoJgDTmoj7Yt)ohOq+1l^kG(T`%3nX&^S)C}{LS@6 zBwWksAm7UvR|p2a7D+!8`?rPs_3pV2JW-0%XhjOu%5l(N`Z%lxIjkm}XB2~mQtGC1 zB#+FOt;3*dcJvRGhL_2TMucnzL(hHo@h;RSkX>=dp-dw%n7)6ypv|8F03l|4_gykx zUbFRHsG)eEwr@s7r%3HQPftQk?sc1&rED2NfcqMCEtKrX?weB}MI4>))js{ZlJ)0( zvBQQ%5k$I|RXs$I_3rMe(2W-e2^%@UQG?SU@)27)uVdWpYW286)#M~wJDQED@ms(| zs^W>1@mCz0%iZecCe&VWRkRJ-!NxU+MIg@6Iu&h$; z=dvE3@$s4I@dPkhxE2gVXw9U=$Wj87x@8=s1e7~|q)deB9NJI|DJhKPya89iz!g%a zcuI33L-)&@^ATsv;eT4B1!s!+mE=&1)O%IRs4suS4Oj>^rI+B2>>@nIS4p14$OEY5 zS&6pkV!!u)(anI8XXXeOXWR`azs6}8ik01bf~@*p!E~?OSX@loZ(a{DPj8brK(uEV zGzF5~zbHv>`rLv7xpA}u7Y$`D+(0xqSJq4$rG=R?vDmyeY&A)Ck(gMjqnSdI93}2{ zzRMJZB#+A!w)?^6o6HF!!U92l>_VJU@S?p-x)+$-5g$K!J zo3X?@3BywFdrVwLYMeyEi?lj^ycA)CjHH1s$D=p9t-#rvNrIXuHk@^^{KsHy*{B^l z0j)w6;PmIQp4bOz)1Q&JsUQds^Ize052?uo4kW&Balw$sbv4QzYMM}x&c}+`W2jPq z1S&yqdbD9~ALWS)8+W8Fm3=;4h`g;rXcjo>XRC^@Jj)J-5EXHy(LOo(NM|j(`0r%P z(EBzhlVC(LAT$&_FERCY^Ds^McnwHK7hC)0J;vNQx9FPz}`IzY` zf-;81_EVXQ8!^F&0W)NKYLT!z=2pnWu7cQW*E{VKxf?h$kicktw{f>7-Gd zmt*>~RzEo6cNI-IN|h)T(xinCx_hC?^HJ%hl_+tMDV#p=3R8I0`KMh()Ksi;CKJrc z$i+Rg}{JLOQ!}*kt3_v^#_{Mh=lfo0FS})IEY^L{&9vPc)Gb#~N=C1sTIHd4N zv>~KvelA*$%4(L7}~ z>Vka3WIi&$Wwf2(XmwT?G=q!#G=u-^Pe)*@0b=D#kFE1_AUBH9wiM-{uKJ=+m>S1Q z5K8ASW``%@MbT6<75v*@$Bva*xIh}l2ac-bm<)qc#Lb-+ew*h3tHs~tX?6w+tRcIS zJhM%gHSfG>qKW6n2}0Xy%xn7vwqj9X#f?Ef65pzA6QJQWOvyq|P1D45!P$U_9uLxG z`+=KN@WD?ko$06Di>EUsU;ZO_;EH!V2|db84}Elct^X-cF9M)D)X)vRs0?c)NVks= z;lSr%t^A!@vZ2R#8K;QNd8e3-=@IkV zZ|RyA+(+2BrA>gM8NhO-3XF9sZ5NXEAZRw0yeAg!&}Och>DGmiy)2&%h9)kQNu(@2 zKwM)UrO_5Wo}9aLwjY`Lry8=m+7n|+__4*4`F`v~Z}~$I%%EWg#<%|gZsgkmOVy7t zW-@beaDP?b_RZUo@qg|@xUcfwJ$o-A(ez{OB1~0U36p1w?o&M6vvPrXRtqclPe0YH z6)MOkO9Rb)p$f=l-mthWS(bLt=G)^tg|u4b#EeqVtA1`283Z`Q1GY@E9e~M^UlhJd zP6I*soP(!$g6`>d!ZWlhRqPaWqF+$p%wM6%I%wr#7$7P3ViCe6N)Ni>!ao zV7o;{0y71X{ql65yjFhHy^fihW9UbAgfVlPeOn8?r(HZHX@S{Wt!Mwf6U4pAhj3m8+|Rt(G^YOeEin zRcS<&T2&RfEzeVB56F0_PnvP^J2#yh`H5)tbeqU-di_opwy{fNITFncdjUbX>qQx;EK|Zi`R`oE=O< zS<2G5AYW!+hu1Y0%1t2S%+*36wePlyc)EJRb(^Xvm4%$u&_lT1rpASbGB2pk9cMoG zW6V#H>pxGC>x(z#{c*YhIrbUfoRXuV<>2EPAchJLOBtI7;>(oztvBT+&u;EJFS4RO zlawEKSI#OUg~rR4Lhw{0@RoEOL1x1voMYYLPug_?egixP;K`5xHD-}%Vr(DftsfNH znb?t!QiIU#0BeBO%^b<&LY8&o2A56`H=*6jX4SIwdOi)acFtoNAg~YI@+TQTh%m*= zpZChJWQ8t?;IY?5U|332zr}AC`XkStjP_xm@(4zLHH_K{u@477WU35~lv`+aa+!5a zTgpkves=$LLRjilACt<`3)v9aGxIf1C<!R+u>-}kX3hNC2l@R2RWF&ddcG<#hc{_`&{P^H5NmW@Dmcbod5}a_$l!&3JUNPW zVA1ScUJYiKI*e^N`NJp)n}B_=7P2cc`AzHi;qTn{kWUa5&}f7+>3lID2mD2;%>(!6 zq|p?}j%~6XH-Bg1H&yL>D8*#_)^7W4$WzX+qh;RIfbk~whYp!sh8(Im$^}!uZhy{L zc_RBL8~y^45#`c6SF>W?FR~fKcpcwARSd8-hY}qhk@rIMJf1hq2&Br>q9Ir)f-RPe z!o;Z;tOzSkC1*cJN@a=KVSv-Nbr6~&no>@7KHy{Fwoe4bDz9zwf1r{7x5QrrYaW%2 zoLKtU1tCCt9VABDjt)xpyh*hU@%mPw^By{cf_|^s#)YvWA$Xn+!Yj;VcNzt>{2t*d ze`8xTD|0pX1elA~zo5)PW`-6D(R!QiX17ua-?TM(JIdusNB>EfSLeW^pUC5T-F83sP(kA@`q#TEn+ijB%Q_hSsJzI$Oi_I;Zc1!M-sB%$r6FPA3;yCnfHC z9v&JIaLxpiw>@>o@S8xoK6J&K@VhD<9>W{`w`>O6I%X*`o|A5{zE|fu>GanQ-M=TB z$%m%J`cmetd23kX$L(5lS?0!c!US1!snGBv*u85ARz3#ecmER6#TbE$9F-jx=3A46 zSEzH#kN&~fjh9t@+hT|}ZcX?%f`JTIT|6#=ckcW0?=AmjPWsk!1jO56Kbe~=wf5*@ zPtaDz%L}L@0gp}oYdcD((2qfGsl7|n@KqM!97!Bms%p*B>zeJH`k}aJcTSx&8qJnT z9SdLags}j>*`SJezpjPhl$kZM!U0L=0SP^GE(&LHD=S-Qnfl7d0`T*hd_OcMdNyzv zZ`ZWB@PX<*4l8LkPXtYtxn~tasD@0C-gEOmWJ6;vz%@{nL@WC#t(3(VlLvyw@9=hR zV$zAOWEE0rD?KtVo}sUcU(Ji)J$_2={@Hw-P%!&oiXd%LUplS7p#O&YfJGeHlpglm zhb~T&9*|k~{#2w*ivQ{x6r8?FUc&-$dOi`U2>l|}_|VQyvT6Ry;`4?Vp$-B`CJr*c zYC_|{kj-Cp8wSZTXBe!`YE>Vd!P&E=lV$`l`cD^8H!0iA9`2^Dd7@`-8HH8Go0DZz zC#o38Uv0yK{}+W%oWm5^DfeocN8scxS>AC2RAaBdLNLogB?a07>MKu@6j9wDa_Ha8 z=0G2GnEL8n2Z&mQ^SI>CR0FIXUn~&5#_UoozOnqnI+0Z_#4Dj*K*GcAD(>nupfFF% z?t+_L&Kse|jD&}%_>tx};YJQK++XLaAjf-YN;Qp;vP?Fdb^PG~u8%CFGv-C}5?Z2n z;=T-db}F32)x;}eGGLzewHlAn%&_D@H)>I2LBcjq=sYa;U0KONpIAEnD5*iZNANN4 zFWU4?OwMP_QL@AxC4H?hGE5&0TT}wD__R`4^5rcMjRntn`+aMK%kbJ+tjU`n>{=$g*|Vn>3eW;kg~0)X#TE-bpbBShkUh;IMMHhCL>El4a)j#mbKC$+ zw3nJrS%4OQIjV@rmV2T|+gGxTG3$<&dkC=~Z=oKIJ;7Ktes>J))t}+B1lIfS3Fw(M z!kUN=-YY2%`HGL=y{-K{yV@B5qN&`1?0(t=rVVespZvfGsIIrNn8OAk#Wpc5AiOW zF*avHvSq6|U*zNK%iuxU_>0 zW)9?L%$jQq)4iyt4pU|!9Kt32K7RvIIg;Wi?zYaO7SvDvI(OxH+5V66{iQGN->l|} zdl`owd;HDJVPZEKw+Rb$_sq$1vdJgnEwP`Djfu6=H8osH^b`qe8=MX;x6tTCnKmM- zWxE1zejF`rP3t<~G#D5x{dadF(sB*OHvQ19|L)74?& zN+(ZCWrBa#!W1>u{7*u;UEBe=_z9~qwV&HOz@?zC0ztj15fL9x4@zJLm>`C>kGumU z8oXwb)m>@ad84BX7M~3!%;Aw9Rjp?nEmod5@|qEZlkB$ZR9=sT|3j`B_PGvzt4`M$ zo(J?qW~Kwq*Oe=-^bAHvcPmqRi9QaR@ExpCKYtW5e!CmMgcUH=7IXe%9WM#^XyaGm z=NqegVOvdU z^6WTSvKZMuY`7XkUg|UOJ(_fK?*Fzbe;^O5YvxU}(TlX%jLF?UZc_ZxX?_LT#E?_!jIwpZZ_+WLuZNZ~ zl1N#9A4j+dXg0fn%@)D3sn>7iC)C7AB(uRhmP}uyWVx($GEG;K3kW;w8z;5Hwi2vl z|MUkN*9w ze$~_MJIz&S508lb9~KmDYq5OFxf^gz7#1sAd{;a?#VJ_cr-oLtd0T1tI>5-4Mb3pnw+N26#fhM&~ z{9s+AOqz7*(v2PO89wPS0Fx?Ni>@Yj3hb|S zvxcl-19xisAn|kF0|#WihQ6jlo=5~e3{PBS)&=`g7t^~&NPoOWbEs zpvoknIrZQT)d{#lDrpe4u+$B$<^bLa|ewvLK*aCD|qU zjDyFh#Kw?q;*zQYr;Kpu&ZzW}?UYhMzN`m}Dye0AlBuDAEbRFoP4u@HpBF4sg20e2 z?89g8;e77$l4a#BcB4w|;xu^z2Y0zgNRGrcd zH>C#sXWDGHpvJQ$mk{^i(>41Z0HTocqw#@+BC-p5wJULLyxZxoGd#HnbfuVEof2(; z!q64`M$HIK^+2}O)WiF)Q+I@pZc|DcmZ5PFy3MVfr`k`ejc(+J zleu~muNL3tE)$m$L^HXefakBn$y`JWKP7t}G8fcu$nGfOvT3Eek5ep5VnW-gtK8|W z$^>`Q^fDKG*lM12PLwn!$PxT^{grTBF@*ZxBP+{M0JmlS^p;rHNd2+W^|;JM?{)J# z*eUR~l+C6KPO^fUGR^`;^TuU;tmW#WF{D^DJ)3zJS*)4#W3_xq#$N+U=Ovv(3?;87 zSYM2V=?mJoM#QGo>xn<;*}d`CCzA&l0yz} zp7(2lTmpCDcSM=ZR^GZb>nXyAp~1M^-`vDwNa2H^!2EB9=B%bCa z{e|Hr?hfgcTyU*m|8=NBvU7F^^iJZKDT<>#6$1lo5)EXQ8cKY(>XVFypQMU5>e|$| zIYXNNC6gsBO^(9xQajS>Ig4t{IbSKx-<_fUU=e7A{q)IGtLbyX;Vh>UdGr;_piS}s zYnP&R4^*yNznPm)fY}H!JM98L3!sbjx*shafyGw@WnhyaeFVEQe^1YaP1C;jRNtd| zlyjtitgAon0`E~)ernJBT=&5ieTHC`|DJANW2imi$ob<{R*mRI0_IRsE2QPxmJFA; ztv;+f{;mk?9Y|-kxhR;>^N^E>WAc70Rjp9?MsEn|;gLNX$&2GVB~6UaCGc9}B&%fn zIiENI`^`=gNlLz?-?86mN+u~A&9ol|5v5M}EEQmWHca*SFwTshzp|@P1=Vw$Vl?UT z*A(^XypAtN<;L{S zwp7-(`QKSBdD1_Jx3ya`V)+kik4K7Lb~Wd9w8UmGf5{yx!$ygfo*PxGPjspbr;q+~o$ zS)}BG*3O$~B5%zcd3GJNm|H>m3B+-};$#UG@qR+ILOn_I)+qHO)slgvz0H!t+jmwN<0~67n)6NL4<5lEsm^7NgAMfygTkEZ zzEXofL(%{-`O``mEDF?T9h2a@_z17+zCm=A29M8qA@mJUMd!{QtokYvN(>`zo^(CL z32UZnZNXK*m@B(18_VtH_(CesbB~prSRsTlB+`qvosh`+G&Z1QztS6F|40FPEPTVM zcElgvih!r{m=nV*KwG|)k`QZlcp%A0KL2Joq>sg%gK5pVcY{tD)}BUURy?;jn=CJ5 zL+X#G)$@C^Z0nM#dubnVVg8Ucv>MyKzN7RGL(QW+Qaz{5Nq<{y2_~`@|O$|6oc-ST)MaWHd=<1lTkn2%P>(Ta({UyVYA3 zUo{0LeI3YLHq{KamNqa0f|^kxul^qw@Wedovv9Bi$amb%^ZTc$)ZmgnVU5PC*hq2u zIubE5#gXC2R6UL~)JZ-4^O9fc3wQ7j-RvX_%$rQbKvjlcqMIcjKVH2QKk6;YBsu+j z+X+k*>T8+aZkgoUiEMf5w=lPt7)fd@BaW1~Y9`bk2&_GDQ0-s7mebr#cJ4P&FZ&OAi z{=J^!b>ui@6I>n*D{zdV0OjD(rzt$tkVYjyY66eI*Dl{Ci3C0q(e`g{X%#t-fd!f~5N3hcy$(VSlZ9HKNb7(A z6(ffi5hK4bI@W$EKOI`lCE2bHKWolEE}~2^LHJQMP0i)@r{}+}1PW8-UuAW(Iw{Q1 zCaD@E6%`P5eyCI&dSr8?Gc4o&ZiDF>t~TQTL=$`dAJpsh5pKYLF+b&G$9GB>k`4#{ zo;}gFXO5xva(?x>zfyP3IydX?iHiriMxrh_8h|Qn-9t8uq z!&_#_-{a_9tTV7X*LWXvtupwA#t>6PsD?Priri;9I$e|y=7nIR=!8u*YlVt(SUQbXQDHf3|J2=k#p2wab^9GqH4Jd@ z4Wgq0uo&>?Rn5g7Kx?y~)tv)|+;9yuny3%W;rTS{ng-TtUtQ`fu_Wu+R@+^D(i73? zc<$=xui_y;ge$`FJcP1{VtfeDjCJEQONB57pKe7Oxy|9HZH_nKIJi_D#7M8->I|?$ zDVjk%5%23f)WXAYjM`Y2OnXmNkg_t!Ht#^+eMO5WkXsijgOC8sm6;lAW>)M0?EH__ zqlY~mLll~-lhDuTjxor_NkIMnB()$IZN`qV667mka*4B*Pc>%zjlT)9eHS{-cp#yY zXT<$qHMveUd9azY)J`o%jM1VZf!K3l`{9#?;1o)Q!LMc@QLe0I!)CbnAXSD>UjP2L zCwb< z!)oo>1C0jn?a82EcT*owSm``woIe&ZM24f_1pAmTt9wwNir0iB*xhzLw>fvQZucb( z>TN>98`c{8CoQdJr>CaXeD?L-*xC!%@nxAk;9m+x&EkD&>aTPg&u~T(j0d}K3C8S8 zXJv>F@F|MYE7Ri=l7Kj&VivpX&i#5f1jv&jJ5vI8V9 zpC;;UixSfdE7n2}7_p_vd2S65TQ#@bJK92$Id&qhRo3H(H;T3A{|z^SF`CUy6mnk8 zz7|2)B&im}E~$f-E^GHAyR)hNm0lw-;|BZQq zu+qtCzM1UYW;l>1O5|k6P&c|L&N901pnL`WlQK!~e=qreaV9flPHhPgGh-E#+&_PQ zUGSks60!VQOp}vR%4|@mX{c#bol%QS3AyLOnNo}~v);?jurAEe2RKtTQ1Y$(xwz0# zhsK(kp!4u>KAUg;cMLJNi7@bei9m6syBVLHd~!dD@yP+plb6(V>*1xu0+y8CaaTt+ z5(Jq&1)yidgce8W%3-m5F2iKF=Gj<#{)>Nc5%pB$=&Fb8(zn~UK#tV*wAb~Is5&^P zDQ5mH{YA;6`6zchk5oXXHr`9?QA)oIPZ~Q*Tt$L2(*yOQmnTAcI#pMN$k}uTbQJ57 zT=uopZ820-rscY*&;d`_8jQlEjz@h4x*_}v7Yk5h)${iZxe4gkcV)H@^D`nFO+1r{ z7^WP|n#_ZBaaP%}_(UAr_cM!b7mAJCr2BFE!HAWbF|F*KC?G3*yq;m`Tfq+vDE7Dk z0-_eH(1#~C9OjYrYNjvJip4$@ga2UWgC?3!bM9AXgYQ&uI&`9(C=QN>)SaX~EVaqS zvyRTOi3@2p3YH_cr*>Ve7n8wTtLslqD(u(`C>ipZ!4l4-ijAHjLl{{{INQ-k{*K?^Uq#D1L0mroK>TMTfQEtPXb&(Y%@23dJUc=&SN8pSB3 zZDP5a*RB|Iq51r4dS+xmnF@mDk>wS!ZIQ*4W(AU`be=iyy9~W`W68I+^jrI$f z!N%-21&(?j+xjgZUZF7BUqd^~No0C<_YY-ml6Ntn&Sw9pGS^^gNqdtF>nGRGXL*V` zGBGiUu9@H|DIB`_y7)aosBNpYy3sJJ8%kd=MwNZy6;Q~?;qNaY{|hhgb!(k z4C1V^@g~3sIWpyw1`|r&?E0|MRbD?lFfJE|wH_2^8NIkdwPxnUhnFSjA7`Mwb;)p9 z=deIw*D4eoakhU$e?s~s6t&X=Y;E1RY)wc~a7h;AmgngpW6c*=Y>y-6$*D3IqpD?c zbfm%F#T@cMZJaoqZ^j@A0FbVJS?>(*)r< z1>J^FigD`o{H~~A$}rbfSicq2ur;&1BW3sSxke-nH?~4Q+po#qslSxUpPT1W^gzLD zBZ)ZDWYChXOqLp#Hrna}xW{++nYc=SDF#VZ`w*wlEotkM-mBddQH@+*cqQatThS)Z zotLkS8(4a5?R}ofSI|k5%Oj(!2iU*CwAE zJ?07%@cqJ~%vM@@L9|xR!D#Y zeObJ&$wJvH4gW)QAY&YREf_KofXqLv@$NNv;wj%ZVuRO5XbtN2_WnPE+8 zPeTY14lvArBW2X-^i>G&*;`c0gaO_K5`p42BVF{;1ztUh?mIZ(FeGT%hH`HY5{o5J zO3ZaGZm(7a;sGOKi=z^l^7P%t0sZWR&)Up3igHYcnMBfrbVL*J2%th=KzVE#N=Rr$3RfR2V~B8kVBBSOhzk($N0fu5n#1( z?B?X5H7VgiM4UsM2v_pJnpDm$u77t@0!ZmFSc5eUwi&kk#_@EOZps;6@=ym68nvjT z;Ma`+{t)|3KYUYls(gCn0h|#58lsm4uo^&lw}WDBW4y?WX zO&iH8D>TZ$KJkJgQN)@|IO@mHlxXYcXexHKlx9;J&9;dxMZDTjzyP#rA zPkvXDja){_8dR@KCPp}p(SFzM{q6Rr#y^BS{6u+-**XuR?k$%#w=w%@*3C3=tk%3A0ovl1jfCNoP12F~K^GB&| zjspF#)So$IF~C&)z-wsL-{27Y(BoiT<(&6aT7}hnh=gmz$9ohjaWoBcDJ1t?sjMZu zc`7)5wC7oB58yZvV0Ki5bwbtO`SHj%@1<*M$YO#rlT%kSG|001@Upk8Xi!hNi0ErT8I<0keEj6V~!F{;)dVV?_wI{jjTD693`Oc_W*Zn zrfH+)?*6{Hy6w83MVQ4Va9t)NP+q=)G2P5`qq7>*2@4*w5!9P}bLp6vN$g{vm=B8wDZI-unUqzC-JOti zd{`(3nijCq{T(cxTT{>Xs5IA_h9FKVjexu8-zqoZ{?x7$3v2AWPF|5z5ww?dZYQC$ zuPobBS!*59ZQiO}{}}g9Ne|8E7K4!ynXUSBzoc7S{1dA_;*w_ne_Vin`37Li=-GoV zD!-9jNF|Uu-6HMdT>?UT+eAH|exjw7>?C5;lBWGapc|Y*7!`D&%JDL+1WjKHmUw?d z+$T0R$fFvTf`@H!uqD&!$$hnGuun*gGq(Cj6ts_%8ngW7T637*XySbv5(cj|7RBAH zqW97oD_BiHciqAv6fH=|^2`r`OjUWQpgyU58kU)!iiI%?tmwVe`2Q7^qA<+w}{3fqX!?x($1|^lkf%KR(Y=Rbj*& z6h0}LX)7|_j|o3YaA+J3qPZlYd)lgINhYH`VR-N|R3=OH3j(CjTn=pM1zYmNmI7|0 zJEmuFULv*>uKqqk@{LW9IT9zy>S0Nt_sYFd{8s|t*|0|aj((Fv6KhQY?Bon{(DKxd z>^%pWY_H*IQWXi`_O-!kai^}&$!ToOtCw*(CNbsg56_hA%~$*IPZRz*O@fHl>c=Ga zsc)nGBcnP%^}!%xvIbQvPV?d$T|zxh%I<;-0hj6hJvC`}sly`aa7w|L143zoTiR=} z!~(Dat3`i(?(|?uL%URTd!@%_Xy-^cfYbH4_%V}>p=OyJMySc?G7;Gqx~CMZ1um#tED+O3c0%RVM5sGmT)d_`zZkBMtk0)X0QKNrqOPZKge~ zd3O-Ge;BRk`j2TwI{yyo`70zvES4x&Jjkb#^y(xbawgWy4~z z?~%OU2onehPs*}(m^-oK>Hg|2Oxjz{z2^&Fym$+~MRyxDQw}5UJ|TWBu0o+V9V|bT zdND{Z)l{G322J%6GRLy8p5`)hBt%Xw{KCB znM%X5KMwIcx!cI2-|Mo(5K=(t>>b|n$)k&q|`UxO@LM8h+XuxGlgLyw-%Mi zu?cZxdkqD3pT*4SDQ%p}RkblyIei6y$T=?~b*;I`&F3~_s~5|BRk%}i4HQle8g0C^ zLp!AAyu22IaUUlr#E`K)FP=nP2f!7ptz9VMw8Bt zH9gOK{?)XR_1ac!ZU8j`@hkAP{tZ9bc8%zwcBg&ud3qqul{w;-(m8SwnbxBpax_0} zf^Hf`5{3riC71}P#>LqZWU>#AkM{K~%MhnnAv%!XY_JgDvLXO-badnS&LljPR!>nX zgg$6cSnAgfo;$mtH?ZXHTd@-bhY;k1iB=7h4W#>sMXkZ`=&aUf&Vf0^ws*nEGL1HR zV_%o^E$C0tY?CybGa#^<@4Rd!-tpRyzbi>u(&6V)+B8u-dVZnQ3#;8S=1jd;mirS$ zRFKU@^&Lea4Hcq61sdS#a!rthzmCvV!K2%|0`D=7_yjx!Kc1P|6r&@=4 z;|Iiat7tW%Jw=Gj&>^CKLK zmM>7?XYAPcA1e+MP&^rY{|z%lHP{_;-(fvwL!om5U6D^f6hNgc3upEtb&)_}!>=(h z10q(TftWPxHdX5HIQKg$3YdUR{-c*)MmC_e`|Gm$-=`RAjBMn-hUa^1#oWLT&ro^L zlOk9=WI(Xzg0Mo1NVCZlq-h)m&ZFe?YnIcMqb56Tb$ZbHBsGdrZv^YS>oI5Z^meqa zB|9fVhBFPYAXjr@!@8t$IFO8Z0x_o36p>k{ckBAoPC>m(`q?Rai=XOU(SEr5J>YKr zoS*=aMFu;%z9|Eu)D#&r{ZaETyi7Oi!ERV$VAevZVWSySvg8 zSA+wuOa(kf8KJYRFqe-Xp0bnI?8mNL!sE1BLO+tf)(BD9i7;*Y4cFnBU( z)Tdw0(i3xyVsLpW2Txfu#r+Hn7=vVX_RF&PZltOl46qr|Uy1*6u~{40kZFO(SZd7+ zHKuvtKGOE>OiKAR>rkTfitf@*93^^6?~_8AwQI#dIl>-;xnv}p<*O|o zr2+76_lww|@2OXOn?Q}JUib;4Jp@xohg|XtiL3-n*2%x>)KwrGHLcaD>DBJI@>sLI{8H)U0$h78H$M0fM z9+-j(V1;J=4<@_(vG}a)YPUy+^c>2T0^Xm(Ob=rj&YBbnDxthnzd0#%M_waVMvY=s zRZT5d`;zJ$@PO6&>unH;hJ{y;{8c@{OUi-ywJk!~yoHV=w)sl*){+*^O?0Un_Tk`w z=sx-!gEW;$wtHzTCljfb;@`mSgC$FOOa?#Zf@=heh=dzY2^~0kYKGI>rM4fg3YDSt zoH=T7*m@0dcALi!UN}|2mvj6<$M5`1o#c+U#^(`LmJ}sNvNrG56EHzeO#_5h^#`U^ z9Q!8&nm3f}>S%|bBCadt_eD8pcS}B3Phr?JDW~5b7=*R-xDKlCoq~iSA=BU!3-#fO zaG!n+?u58uqX!IBMn0_tt~mRZ2pa3BLxQK6od!v}+nrYy8O6%4W0uB~Q1qjWMV87% zewU1z1!guZr3P_3-17-=Uhk%7Es19nNNY}G84#R+Z;0l>n+FJ|mI8TpOq+RXUB+Gh z<_{tb=^hzsv`HwTYOlR<7L{}or0yL+gq**ciA=Vzn;hm+wWUK&?E}4+@v=B4)Lh3a zOm2sb)F^uC5Dyj$s+p@DJ70xkV@NETEic}Bizc|2QelUJ}Nc4y~4dX|hFg3#niki5cv&O%$7)HHV z%y%Gn8{^HQ&)VL5GU5n}laKQL8APe@mT63~6j|3p!z{W@(E&Aeekk+%z_$WY zL7ShEjjjc1)nzi4vz3%+|4NqnCwkKr3D>laSc&X7pKS_TZ}?vQwQJcJMub$rOQeJ$ zV@|zJ$lPA2Gy^wkZE9jlLkYnZn-zBu|GJVTB@xpwY^4Sv=mw4;qU| z0EOq@S;ku@2h|pnkxKed2J*kfQtF%>90(pslC9J-ip@;3sxE>YFCGE6)5B8P&MtBE zc7=EN5U)>&8>&uv_hFnW25vemPq8jEi~n?wrFkdaEn_?H#iFy%ut#c3kF6E(T@BGs z9eG_l!jM!JI$5*C!zpOtN3)ZLYMWIbMtuBiZz#^s#icJAdu3e^V~*-Gwr2R4Vxi** zm6E63E4l3MJLsaCN(XPQU6pdWsRyS#u)&A23l?FfPl`t`UEPwZ9Qh ztpvZD^6ee>bLd?Xc1>n}4Gw(eP^;EF5{{Hmf@*GEK}H1=^-AH=jkgM8U1ZzM%D^`A z;8cSBy*rDAS_wwFJl6B~cx(3gU-Ar?EIHDIxKI59TD;tlK{V-{_40(vh!oD6 zz^&0P2LZvZ1D25dSH6&!gkh7LpVhe5wq1~w6knf8_$)2uxgzb;O<}zmUk~!^OA5%b zb0Ef5FpoCt(qT$SFs{aA{TVVay{ot;UVKfh!KO3omBIEPB|;^5JMq zIi{kg=#;(j_|*oyd4&J`#AUQ868udqxD5&c(q_o}?8tiY!OP>cJgf5>SlOOQ*Ea<^ zk`ao|NoW%3zeZ`dlWq?-(SjEmL|hJIBeGA-1I!>Dg(4^?!|)8+e61&~ zSU3Gr>}F%Yq6qOArOqXTjp!*ZDlv)5AYT6)d5QH{oqW=#7gsH(PSKoD6KU!#`B>D& zw$UQfQ%uo5vLb**`PcQw!b?S3h+O`E-htRN1i2n$dTc#E6sG?$5$xkP*MB#fs~m4M zq|+OLNt*3Hk;l!G>O|93dle5WX~=mj8Bz zD55yN08MUmo#&W2Rk7Ip*m30ZN3A%1zy7dWyQSW3VlOjoRedY1PAb6|7oqXdi8PN; z3?%-$YZP2_6)tk(Z|2sK!RU@K0nw>QE9ogc+L}D`v0KN4@lt-EaXXEq#kn3ctbVb^ zKjCY`STpVV?snpAsa^Z_ChO(CQ81b6c)|+8&1~V{ZHFnjVLrk-Tsco{BrpO|+CE=u zgDc`FE@M4A)>4nBqqF?jMaTN5-&sx0nMv=@*4?&LF-v<@EDp>cPHkkLXLq2HJZjjc8aV0S@+>zw9p$gXBE`7wdIeqCzFkGcAM2Of zFBB3v-X2#gsMhl|txi207FMd`Naw@7*&cb+Ec+IYj>U{{Rw0AqR`wIsk^jm@#*pu} zJZk)>yJ+z@*WjON2ea=jagW7LwR#;N;N5$A_;Y#I;CRWf;_G~T<1GFA@Lkn7(!m|S zz%40JytmCKNpeIpX`>6m>i*rzu}E^3=WZQB_e=8Vu8siG>kEk8*~vrVeQ!uz5A^|W z$#-}J30bepY7l`Tq#o3~3wVC|3#(SZ?GcPkOQ9vp{zDUmC2zGdeL49dnWg~JdH;>$CviKD zw5(SZVqBPUT}-@f0$G^L_R63!5pR=ub-D(lFgbB=lvdq{N=J@a>fUx0x*d*88{=rI zJ|Mt0%fNCjB*uc4(`a^664S|wiliM?hHV0$RY#Tb-pP@sj<^Zw!|rIMk#^gKW&kmJ z5$6qd7x_f?CTBs-ugp#hjze}a10ZChpRFf+S+s* z^CYEMXs@<})@4#MgOhREsk^r;HpdQCfhYL9g#1&8>cpZX$J;(W^I1YZe#YLdyy2%W zX_dwL1>9d!d_`ak#Y@#pI^>`yrDsbBd3m*&APsL`u$-z|dsf}BwNa$Av5FUrZ7JB} zk8yygA=(duj}&tRCv+7x7t| z3B^cG*9#9jp!D1mX677nf_2#f@@fqu4luh^T?X-p8(56@-~%SMijYa^Y~rk$39??d z_C{@_U0v36(qXn?FMeFkX``B5M&Z_(PaC$ikhk_V%5bq$l4;Ayyznz5nF=*=YVyO*F|+lPBX@axTPhlWtC3 zK`_aQW~H(KtP*BB8@>xNr7kg*Un02~rw%f=eSU38bp}ghs^7#3g-~}gB!F6~+I{Xxz?G7tPu|%dTir20*j0(D{6od(e z%<%XFF_aM06EVeV4Y$FP*k8j>j|=?Z*SgoGYl4O(JqP#h`4HbP9`;9;XC4RIReyf8 zNqM~;Q%zrXfyO5(U$Qf}Gbf`I^4GA^*o=lVj}h2!$L&AFO*+gysMqAP)pX68;B*`y zzMS?C(%es%%7C2FUO{s2;)Cx6TZ}i9W2E{lEVw=#;E0-|z*GAD{fne{&+`uCsN2)4 zJ>vvXUHaS4LV{S&+ml3hS%iE(YNS{FPtGm^<7dk^yw9h|VI*?z+{@ghk!(tk-IYHN zhX?5p8PkS5{m-Qz!!4eDOE8c=6a37NLLP_|^s!Gh4BDs@?NFAqAShTMvl!gSi)-IfuRGJsM&KYqC7_J_)Z?v~{-T z8b{IF4$$9Kd(8ymCdcJusb!_OnH?KbmXG|L_Oc3!W69yU^0sQcC0hB$`cA)5bxz(8kqSOgBI)IRWt(11$ogt>+6ZbLS?yWbK{y%ZqA>+jP9 zi%9N_Lg=jcheyx4Kz-!c;*iLU5?e)@{gVO@WB0lky0KfbuD7M?ha+41v3u)u{|{=v zx;h40zBW{>iR9G)eTY3k&bba!m!b)~4!~KrU`_rLkt8H^<{M``ajasdaIa$Kyua*kA7zq487iI9cm`DozRY`BhETRcH^QrJgRu;@*#Z=}8(ZukD| z!|CA%2y2ckaZ<=bfVH;VAV$#ia=p+TnpLok7`F{$MqQyMyuypO+2-@fJCP2TYe3WP z%6X?QV;gCDry3J)1f`$|dsn!baZ9BHBcOU0j(1w^&8^0{f4=?j6{J(8( zZB;2(if(O{cBo#hsOG(|Z0X7R&toABZEX<-1by9ea-(Pa;A?U7!l(2X{*rY(A$4_R z?(=1hx@Ix6!_GSQo`U%61vj`~1#X&7n_rvGbjr%@>sw3HP%Ub>J>m2!4#hXPuOA}g zw=a4uQjK8BFSeMl@WCgd zW&x!(-Ydrf_p{G4DoJ6Y+|{lf*%?i>=0FWTj)?^+={K^6!m4l z?dKeW`d6F#@sLVF6OT3iT$*~!mhZUxHq4>lvF(SYC`Kf$_k$=@dwvV#Uu}y%*yOt4 z#mDxtaxt(L`!Tx-X$ewmTV;Je!25WWKIKSh5Av%oerc{hH&KO^T3d^K5>-7ELb{=0 z)CBJ(LKoeEMWDvVNPmHk%sSPR3v}`XAGz8c>pT}4xT$bl%qDYes{e&N(j#R_{=CAP zjVKh6qot^IfSBQcf(Q0`C4jdy_7@}8k}UdMiK*^ox4reQGqY1u6Ea&=nt-G>v)?Rk z0gK1pJhSL%Y6-z88dh^@)IpjAe>KsFzF*pYXSbCx+tPVPGugIRjoB?S8^!7y>M?O| zx5!?>K6FgsRCs+OKg!Gt8b61p6V>&c)^WIihVmCC`35&GX6~B(Z%oR8*PlAkyJp9Z z8_wQijy{D>Cg=$P{9ZMxMbdNLUZf%f*JalXg#Vv z8h!N`1Ii`>gfqU4ta_{Xpwh7TW&J9LMy#f;*p7NaW>ZFL8*IbEc{^$M4(e>`=dFZAJGN>fjwiipltt61D){mI&uvNoe<>rIv4{&i2u%^ zW?_Fq-yJSuF~oZKKK;6iV6#l=HJ1IVFcMBZaYmXW`Hj(q(8j(I{n|e#sR$imGEjV@ zM}e*gS_Je9XOj67u3W)6-UC#hj(=z`I^5U)J)N%_&{p$MJ(`TX{hpVcwD(WWF&k!M z4Cm3GB19f-SXY=S?)CoQNsymWepBicbmN`(X5f(9EmpXcS%px51~U& zp9nXt)Dw2A)QHFX(<%-;#=jG(sFv1@U}WHl0Me4%J9&#s7c8$D5k%_r)SA#*4QOi0 zV?ngT3~6+I(Mu?JxJOe`?@)j$$*`A`6(r!pL|oA5W1G3a3Rnx_LZwQQX;$p_!qkD$ zO8-%&N3>z913=*%?rQJAjJ#)srz1bt4u$%BUYznCLBXZ#R4zw;^DrTP+k2r0%#HL+ViEq{-%hz)kHKxrOkyTV?~47If>#E zpwH->6!8T%HAR12f&srp@BYb!`=@LiXMlqgCn$stZu8fiN;XtYa>iBET`T2@I4c2k z09|NkFE5(-*W~}+mahRHC}dD_4(mS@7HaV8REW;1j8qw^smVCk(}38SZKibPD+Fi0 zNPcuyVb)*#&6sjTbY1((<#M=GKC`LHo<}Mze3z-uz7^S=C4VUr{+e6|R{FVbOeCY; zg3F5hb0YlLTbYBte7hI9Ks>`Ed~?f}7xUL!3?)fKj?P=Zdvrd}*|**fn#Hx*%}xR- z@iSS79o$Znp?`d1!9gIGWFnBcL2@ zbJ50%hfX!h9o!+qwf}JesIdAJCeFvYM01*#4%Ep$NFMnPBsNi6TkBmSU6=3#YW_q4 zim$$e7?pHMSY}YFk=U;{trTPg$$xBwJ$HX&Lne6#UT>Noy8l;%z6LZ9lRx9@IqqN)Z)6cP2REQM=1_cL*UHj}Xx$7k|h znq`so0^!)Gd_z5~`)kJnsJ&~oTpzF=#Bbd5g};7_u8KCnD3tUTNq6o2_rh2FQZ#J4 zOWy9*(B_N>lT$?S(eY(ug(C04m8RAO$Wi7&%{Lu-xeQ0jAUl@;>HsbwV5jao}FkU{s&RYbue474Lt+_?ShV^P^2c+V-_%_Y{x(97C zhgr7&sr8aZ`C$9sK4N;k)}`PedakynNUzKkudWuccTwD;_6bX(xMT<_PoCylQ6IQ3 z>+UZQ9S%0I3AEESKCe~@rEU27LwoipE8=C@35qKZr24nniE>CD`gG7F2ep!ns^18H z+B*nxw1fVC<>v2>2pmHn=#$NNGj?89?O$WZD=cs{DFN1tMSRPDy}MTPRTy)n3pKa2 zeWTlKc&mXKX2qlngW2f$&?1As9(PZ?f+bsONW)x2j8ZF(QxU0N&YB!OHYpd0>am=q zV$<&fp9e6Yjis&DhT=Jn)}M}+H3~r^5Mx$cq4Zm-c+RfYViEse#g!(Vb%tRThjui> zCvJa)530q^eFL-|cU#k)Hi&dhGtt2sBl|telZSkUhzw#2ejXu&>r>Y1zp)m5eJ4`y z5vw;Q!$U;Sk#GaY$=f3bAUgjNzC0h0PjiX$~cOcg_@aX`t`lV0#XXyf=kF~89 z#4g!Myv6Iun!tO`DGqjsoxU236WV=Y0oIHhb{IB-+)o(opt8+Fg6h{l6bI(5GxA(!qR1kg;0t+w4K^3|j;VUz>^i*fm<& zO?AI$L6x5Jbm~#*%rUgNN0+MRpDq`8a64TisgO7wpiIsOam`ukA-pc-G~+BIP+4x&lWx@nWm ze8t*lNVy-^JaR($0lf&nW9GyrDqcCOP+9oIKt5u8DsBLghZb(D zIPom==)l|b{8gV=B;JS$C`axcn+{Jz&|Dc03Wq~Sje+CQgFSw&M%GNlXJm%KP3 z2%tP+N~ig9dN*5F({ICuxzhWth5iMeo;FZ79!1;ah%&^$*fHd3%1nKlF`F5xS(#}w zkA;o_uSCJ){Zgw)mH~E+7W_;?87q>eQ}Y}@0xgWm#Lb_rZ0DiuAk-2(zSEk(--*1a z2cV1x;3#Wli8Q6Jw#;>IC;BhMxP;xvr}<;~T(1`CyyYm%3Dx};)YPMtFKKx+%6Ukp z$&1Y?O~hD1`+Icc z;aF9X*7_bcA%FHxY2~`bUq%==bft+R%tS_XxM_KDv_}jPOh@eh!)cJh3Hh4I+bK9z zB!FTM%0I4VH)yt@jgy&X;TOMKa30c@5Bw^715v#c{jti zelqs-5~J-V^T#<)AY?A)hUN#f6#612Cn&a5Q*hv?o?+*wx?7a0e3PMCvi7goL*tEO zDfE>qd}_SDGMth+<&Y}=Y&{zq@l93NCStMjOAVXZ5OQBbclEU;LrMm9iqCasn+J4_ zUl0`G87HGrvC+s;;%7~D)eaV?^Qy)6j>S4+c(cExWDSreFTu5QE6>I0!G;`>`nsy+ z$|P!bz^id4yXd7wF6$XKB|!h#83~MDwjk^^b^aIl^NbEq5UsBgab>ms8MqGMC4@G0 z-l|k47RcsG&$>kVxewj8JUx&-`j^CHc(LZ>-F8r=Zu{dfVt6x5HKdz6QQC6yU-soT z35O*}kI~bRPn)7`LYN*7Q4U?PlDz3$*6M3PsUZe`XN9f{(6xLsPiDAZ2;9xM83iMH ze77T%w|3&7@Wp!2A*0W_70mBj1%kCPI7ASIONOFcrKd+hwDaPY)aP;zq^l1dK+p7m z^LHVG`~R05F-QNTv@AEk|3}teg~hdPUAS<9OVHpJJXmmoyE_!_?m>b(!QI_GxVsjG zLm|O}dvNz8*gw~|_uA)w&bh1GnsbgZdT;G*eN@rxNAOxqn;?1VH`?=EU;8CuF&nP0 zy@&rWqX^CEIs4-D#qEb|HTj}G_|3<81m4g_4mnMkq=~r`>P(Z3Z)l4)Fk}#Yz6D_` z7@Jwc*tqZXkJ`unB>C#Ywb#B4mZYi$RiyauUts7f$nZ_lS~GrA$SF6Vm<5ipmjxgO zmngkgM{i$uA|ahlf~~@C)cP)KqYzZ3BwjJ{qkfbMd$lLB`IyMTy4>#XM81w_-rB*F z6G!jWMOM{;%-sO?2yiODzGxUqRNJ%oME{N7jS28iS-GvJAr~&9&+q3uJ3gXIP_~+Q zjGec`at{rwRes69w{|3$x;8`fAW{PdqKfX=T4$N0N^(GVo2BaUJsG? zCq3Mi=7s!|7Qv3osRvOA1yxojb71K|y!Ad1cvNSTVyCfRLiizi+~?~tPljZ1_$%B= z+8B$~A6rgM9aU{NGCzLe10l)YtxOS_Kt#p*y5M#1LMvB3@W)sz7{n(46(cxLBO*KmtN_VT^`*9-pYD%a;v9Bs8C z4amSwdMO`6@q0jDFd83*|A2iJGBd%co)8^J>h6#}UoHI%KNVzJ@>P!vccIXz&rt>o8i2S^KBzuc-RnN>ANoEKF@>9gSL%zkoQC$akwIwSgnhhZa3S zdXiGOxI}N+-IKd1ZB}L1`E`5}hN}bg_2*5aEiadCY;k4i2>JzEavRk6&6x;mMyop+ zMyu^lHi1u%1j=V$mT|SJ-c}Bsfsi4mhZF>DQ}sPeiu@uwwn5(FWoS#=Zm3&$jiqGr zia-5HK0Xj2aK~^J#Ri0*FNd)7;B$W|t7K;!T^I&4wp~!^92M2eIN&w@MNaW4#tE@B zHOSG%*f>fS3VED#J3$?NZ*jgMbe)@rtjw-=z1gqOwi(R68|w!M35i+uautv^QG3T?Ye`;%K@e}W69J==O$ zV*gAiLSz0UC-C>nA#iFrk`<;KV%ZpTgVez*oI~WDq{lxIV6<~uQ zML>-=1~nPZ%$ku`9)D(ZwefsEASH=I5jLmMmYIrY1&Tuc=0(^@Nti`&bA6nu6%|d` z+2PI19_u76CjRicS!^89-!c$K`ZK^g`Fx%7frL!|xDUNPynrZJqY6gVxWwDO)B+zo zMy*3xDSyuSZQcQA<7+x`*V@Q(W=c=DoK|e7QwFCBLG+&GZUF4>f3*NP&8=*kpw6T$ zw;d~%UfSsbrd{e^=H#+sp>-_6`2;qd^je@Z2JPG;8GkVPW?0gpJROfXCd`QhCXD<) znhFdg0FeTCKcTh61&Wj~ZSPBs>tN1~O?N~^ex&pmV@3%y-$b2G@&&=dL=OfVaelbo z(|fBZxupv?5zXYXJzI_z7r}m@#LCSKe9rJ{#g2xBs(4shwx8@t2&3)h8w`_|;7H!H zv>cjtd^Gzx&Eyrnc1Pks!U=wvgmQXy;mD1cEg!ArrBLM|1%s^@VtK^IO7?T3Zp+Lv zD`Y_0;V;Y{PN6F$7$zs6kr#L4^!r^NmowiA6FWVh%&LRK&0d(Sc(@=xo?c)3S!sd4 z6^1vL;~1wUtD09CMGm>aJ>L#pb#fgL9P zV9tv{T&p+jKS5QsCE~)5>X+WH1uPH)*}((uaUG}ewbm%+%qTnV;lSR6;SWaN@SDb? zzGf2=qUtr6u5Hbxj08Gwtvvsxg$nF5X*r6*EJtTqsuvA_G?q_p2KJKVz=klQ3!+HX z?*UohKPt^DDWDaoqwqzb4O7Cp`S#yOafc;$n2su#g+J^>9AZc5F;>oh|9JQbs0g$2 zC>QJ;&UNF9D^tr2JdZr8vOp~oD%kDb_F0L?uP1i+MI~Q}Rj9i`8WIXRGn`S;mt+y5 zp%S{T+kWRT5Tke0L)QWI)pBPr3qR1-UuSk*SLHfRFzwh`@LQ}nl&Zs_#SB}0s8F5? z9qD2>7D0YCs6^|_EO@bC7_nf==`L|aWmyJ5D@<9W>2mbYejb>RLUmNb1 zn@0CqQK$8?S-<-Q>)w&)$(&#=6&e7`w~6ZU)cMqR1*48|4m{8TxCopjkFCexZdl6% zy^lW1w0;r~_K8F-`$NBB>!}`({z@9xol;3QqU0$dU=UR1P7}YnosOWkb@dNj{Nb%$ zobamja@Ce)Qvvwz;MXg5d%A*&K87TfQVz4Jy1(;|p0W4eluMvx*{hl^CPd|yq3@Gq za)*7zo$hL!K3j!ZvJoIHcUKqXa?-%>{i7ntDP*_oTr=>a%inu*X>(wq%d6~RNv=&> zHZu|xa=gD=?2-Aubr>k()cR(4oOLooq}07LAUl055p5t*nuiaaB!umP+mM0(BgdLW z9qV{P6+xQyxWCJgLcNT!$iy$wZYFP8(#`ho$QeX+j6b;!vFTM-i9g#jBtpiSh8)otBi6LNiMUiIrUDZl#?JPK8TfVNbn(4$s` zS%9G`wEtp{^iXW)`=O3$42Yqt-xPf`T8|~-^Mv30N77);53)UpfD2RX%u@5@Wc@2 zb0jO}5-XE2HD2qR=h;#TqNn%BWI$S z`2*3dl3yDvCVpc%$Si)Erm%8g8lEkXhibnqXIz2>fA3tX&YT! z6=**b@F-$CBT44|$=8%Qd&>9Eb)Wpq7|GFjYyoviVEWECBvx*wpRd13;L@C5K0*9m zzvguKQ1PIWV9O4lUQK8fR`#kLq_n2m>diPj3OgRu;8FoJzZH6V`Ov#>J~h(FqV&<;kv#_ooblzwfezZGb@ODZU z`0cEIZ;^MB!>s8a+m%y@qF+K@$6;AS zu^Pf`q=Gg)FGQ=$Ye$3{26AIEg&UqoEat7dBCvT_Qj+7&inLN?$g8UlwHsVNFNvT0 z!s&k>DyTZjy4~K-VJ7!U(7nID8J3O~LO5XIpdUjM8WPnQ95&bMow#S&dG0T`B%BDc z?|-Eb-z5x)%SOrm{;Yfa8BU+rW&u}TV(wkLTPhZJQIy%l6JafT{BdZy~niZrcWI?DB;uS(lY~y&XufU#<`Qf0(!A> zGk;kfQ2gg;!Ich?L#`wOs^(_ZJ{TJhFXK8&eS#YX$>D24>Rwtc)~PZJ%EAbO3cnAQ z*2CXR0e#@Eh(B|GmtJeASe>${G|gZO-0r}U08dUUqIc**yLHHO7lqjT;!D$xH!{uzyg@MIBo-KMvovLTr9Szu&q5>e^7M8*Gffnj_F7 z)j)6(j6V3?M~_y{HbPrI2Ey1H?40rk2E17s7@NQJgc$KleLLZ}7&w9Fex8(dl zx6Xih`GA{JfF}KQcjys!!6CW=D8QkOdPX5;=KlE|{uIvAx-jy#vt(%3@)R{TXqqU@ zh5@;YwT)I z;QTA<2in|PTPo8Z=nr4#2N#INkK7a4CiEqpFXc#BGp#aIiYpb|LiUcR-3a#*jVcf~ zv*pd;Nr+Je{r1xw9&Lq(mQj4$I&PRTrnJ|CDStM-b@hL{9w?2-T3jG z9|uWftL@s{8b%4(pBXR~$UG09gsju$d${oMO^~XJmFr>|qY+kg6X?K;=L~l9O z-tRzCyVy{*tug82ANWkL>)k<|)>!9_TG&&wMR$V`F>C?%OvP`?Bd`6iYPR)#St)*-|m6XCdOxT_l*IHND zJ-#(~@j{{OZ8grd?`qMn_h)iq#J-AthjcOXIeuG-t^YVaj(`?7U(Eu^BBTn8dc+(5 z)0Qx7A1RLBUshWtBrT~VvxyoNKCO%&mWyKrr^wx&HaXfcVEo9Hk_^}?@&ed8G`Gm z<5sJ4BqZ8J(1P76tGk8U4(9| zWNK5&jRV3agndp$K_Cs~SyPB*6CcUKnaNJlnCk**IOKe_^7RGTW|7$Ut*<$A=J=DL z*AI)skhgjW{*{ItT^I!~b3EQoZQc(jX?;8Nj>2Gg82O&Fp)J*m^>^&(Po&B|?^F`9 z55@&)11Bqp?6)#(8t2W)oPNyj1)7iHM=d^hjIQliL#wQ#waLwYH zK)&Un6Mh8vSG}NWh>|c3QK`!pqZ!0Jszy$LdT>aNglXuZ2v}aBo$}7mhG!>rR z1U&6UH|lLo)_zVp3$YL@+|OUjBn)t?ir~f6ULW}@6fwG@@P2chHCf55TOJ>#i&OCf zdWN-B<)?ZlU&?z4z6X__zgX_(A1c;Iah=5Fd=&w~Ol62o>k0O+0+GL9*Bnp5zghr~ z=28*cjg@{ETQ$j5c_;Ie1Uy6H_Mo>W@%Ve%{#}Mk+ft2FzPCliYs(!e?C+7`G?0%% z@eM_SP?9e0@LxSt|MSGRss|5PY~i-fz6Ri7ySy~HutL}&mFq&>SZ2FEKqPQ5ESlt_P@*j9!%Ye#9VxX9Po!Q|Vwp>|OLf5FTY4lkI znY!XF66(n(n+3(=rD<;{D0vbsT1KH;gD}@Yuk@KGt}jpTDCCkS-~HRPfI|Wft&Cgf zW(So>#nP3IZ;68%s5oxks{ofDVbj!USmju#bQ<10@~hdHdZ)wN9B%*mw}(*yF%_Ey zr?*bAE{=JxxsQk6OaJLB$769hV*ez|tbgyOC~%YW`_oN;XQm_#+Z#{HA5&aesP=7` zgR&Gmd8OSs$$~oEks33x083QGwCly&zx8GHwc*s&%8wH`aJq?fPx5#uJ@to$g^$3! zh(ytx_8;^Y?ico-Wa&Oq`HFGYbyx~1RXXCIer#CCtP?qBn{cR+!9E%HV{tm>Z8vvE zr>D?foCG;C7zsfq8y!EI-FrUQ)d9vnlYyPWYu@=LZ7{u>{#v5s(D<3R-X>DLzkjxD z>U))bJtypH8}DWAfKaC{90Lx5Vdo>souSQetIZsSI7~p=#MJ%|w)Db}gRc!EYI7Kd zyb+W>v)nWj6H}aL?P*ZR1(+zyFZQ4&^xZ9XHSb_S!soAxc3hF_#5 zZW#4$KarNC+L@gzV@F)Wys6VKfQiqEz&a;QLELUffx9!}_!A2GUd+y`_f4Jzl<<0EL%ba~S)IyGIR z{aK*U?>30JX5?VZ@=iC@`OkvEh%G*_b^3UoqPnigN_rfK-y!BzF*sqbfv3FgNVVh) zqoNj+T-FxfKTyP-prR+9FRPabmY(b%Sg*Y8u;bBFJLc7QrsIv{2NAkSC*JY5Y<)G6 z#wa@Ud`yC5a%xSdJ{pv0)S)uqF?YTkr1Q{j+--G1Qb%Y^FBJ=S9>y&m3Ul5)GVd(X zod5nFW2d=b7W$PiS*U=}=J-&nUUxf7(~0VjZ>I%@s>K@+)9mil7)wH*apE{VHVbCX zyP}B4Nb;z5)c-5Ce_yC{1166O<)82*Gus7PhJcLe$%&}AIEm5_AwtwLa)adQj_#P2 zhNmx{VOH>7e+MySR}G!pD2BTu*C^qyAEQ*Z?xa2ShcqF#0sfS-Xs0mRQ>k-jb}~&$ zxQ)c2KaCFshFB^B?F~KmF6PbeTJdYlIRQE7ej&PGTHmABRU8rweZhdRSHVYJarw?IvjfEyE$rg zFgCpXh(>W_A7-n~rq;%=xxcP_%a!QdB=oU(y2E{<&ku;cOCwt<^m`#G2Q899f^`1Q z*8xS!FD&juQUnMVmN>_EKY81q$=+Hea=KT7V@d~q>nyZLuqJOrg#8dCGQ4*Q1~sx-_p7-u5gajVz9heRN5A3KQ_QwqwE|8B#g5BV4*LxJ9M(-E$IRQ2tu+AEBN$BcmFtX^c?0uu z)Sv7_l|AWGgRBG6k`Q-tt%qEA#PRrAM@t^ zXDOFivBE+JaqKu$2(>CcH_WVMpo^QJw`%abD=Zg3#Jl!-@wE@q{`9!sII||XKM|3n zq-aYYbAH2&#J_j$D$z7JYy6Abr}c*UT_zv0x#_jHee}x~{M44i+p+BAIO67z)kwz% zO{#NlXj%S5P1VHFW%FpzVVh-rB>$gNHHyYY{03ym~M3M6Z$T8d=n^rWZ4Ewdbs_Z^x#SV*yU|? zNb|8}d^ocza9HPKTw-2Hc9DaQxl&@&UM^Q_J_6odog0HMZf@R#UheEl}ZmPj)pmt zwRB#WEfy9mqe*=og&?B)*xg`RC^}rNjSrdiup3C`dqDIBdjyG47%rh zRB%n<=V07Spw__~s)u`})sQqUC50+flZF5LMqnU>@YaanTCJP%u!_eUR2*fAL}%XH z9}Y0sl@nne-L$}J>|>OTYgCi0AIJrC4oi4IvY{)@a*&d0SAj>KzbCT>?=cFv6VS|~ zoHAQTV*pO+>~q@6Wxyl5yzoxv#V0F#@cTEXhV6mI>O-uI+Oph5o@_(zZ03Myo{$pSms_{gAiSnbS?TpSpO-548pN(F8 zK*Rd*NbvDz({Nw9%_f-EjkrkPDZ2;xe8$~Tow=PW$LU~lF5vOaLUq}@p3mJMSG8_X zEMQp@PfKK$lEJ+tI!C{Yx)QN9hH0OSUgOVKk2~++8Ij`Z?4QLp?i>7FcorbC@ExqN z2hSDET@3{dws>H@pA#+cnpX-MtkMNkgvIUNxj!%w@<-q0TAhU^{5AYG9$Pt@<=|OT zfNT1PcYm11UC^^WYGp(j;2{@QU-5amVSZ?I6KTHzRZ-+{lT`M`@7j*X&3X1Gq#4M{ zZn79JQ_FEqsw~L)Y{bV#j!sO)$6c$NIv0tks8)vbjYC;H?^EM_9uA!bQV${>5&u22 zx8C)iEEZ9%$xv25zhM=UYcQq*Fk^Kvyv=%XOzNfFFRqhhTP}ba1t5|X3N3h_w$zB7 z{sw*BKTqDJA(@wz8iD;9f!u>`kMiBaUUaO8BR@sLR09XO*QaOIyjF!kn(a}w#BvP+ zEO{(P38Hi=GdbK+uH+u1L9loGxnhch-e~J>u_1Cb#ostZ^JMq~**uvD@R4HyV%-$J zV?V1S6z*rtg(&v+65L+V48&$tllTPh673E=T5D`E^-4;DhwoD8_x-Vr(B&h0nDy>` z`NJjq=fK8U6;X7TG*1>owojD0gzjjH8?w5gT(KwDk1=S`fNVeSaO!pTKp8!bzhUTV zU)lAPI^(r(x$+i<+r+wVX}03SkA zPBDX+dyOtgR(|8>R%BI8VbDsKe%*C(*<-pS0=2o+V0GFFLivWxdS#p(x9O|$igyLVS0G)HiYC?U`)jkkHC>SMJ#%dY7d31NA{?x_8 zl?g;hGIJq(=+4U)ck(N6*LwrJkW&4%x!A%?yZu0p(A;V7a*?S*Wi(_EytBqytn3;e_h+; zD+Uivx_v*Cj_zV^s8VsTt&i~)f$A%zm%oiR@wfkH1 zVpVF>17SOHTJjX5R4OOo2(`?a_ihATTC(VaBTeio#oT;=UwXP@oz7;5ja+8c4k2j& zXX=WwvE%*Wt_AX&-vU4LLRn<(!bu@LGKaw_x+Jm+IWZhPdaE zk#ie_2WJbGA3;7*H@2SqSVc(a%{v}&;bf)`+^^0h|F{l}advTm7QP-7Lk$;v?AU*lgvqZbXUO6Wr zgaJKX_7+$B0Btan*OBsC;>ta3i~FY0sb@b_VN;e|9!|i92G3PXqoeO&1UoT;E{x_k zez};6+i<2w;9Vew>*I4TZCIg@>)HU82)A0)xIrMEMM&q0-rmN z?R|<%&iXQuTX5Th8LE4cid3rAogoUoZ^xM8}HLNg{rfosNu9 zA=;LUXr&z+2}1AKHM5L$sf75L?lFaB<>OIAinf2X0E8MiWo3C`1>^TA2-56x&5lNa z__ZYnn%sPS4-hke5m^*;Tv{1jYo6EV(i1vx_JM=T>2SvTjXqo6(!)z;nVKCcZwvPH z-inO+n0qL$cAwZzY@^LErrGC=?{MhEx`|XK|tiruZ6pZ0$efH8PNMYrH8Qv*%J*I~tYP@LRdls@QvPpuFT% zrX7>q>-lL_O*BUB<+shkC&&}YC{#e21ua;|BLfXA$9wIVi+HAoiy4S zVi%Z6e@G;g)}pfa39W)B_3-}^y8{4 zYZhDp)hlplT{(a>2hROsvP(xP?Bu2GY(l8hzV!8RQM8IaZd_%!+URgwa2&XSt3h=_ zOGIn3zlA87cAHP1{C6LTY%U@sv7+JgkUwOG1`|5HDP1hzealBxVS&FblRr^psJIp!NdFfP zc3Mh3-+vn=Xy**%R(O2kwLGkyVYxXEPa%R@^(irk*Y3Er7n!EsI5eK5L&oZ?MLk>& z_{=sWEDl>FQF2m|e65JWbRvi9zhzh}8}@SZVS3YJ<|tLB^@+U=hu<^?KeG|P@OJyo zWBwCZ{AUf7o2DE*w3$vV3xC-Bww;)P0ZD&i87yNEoCbu%7zn{}Gkf@7y>_e?kCFT$Kq0b|k z|IBDJGvs!_SXguX7s%H+1Cpfsw6x2lzRLh*r$@4y@eEqDallqFCHyHW1!KK)r%&)Y zG(P^0H-D9J1UJPPk<2@vr-{fyqvv>=l5ybc-d)*{s>V>88`mnU5s^~^F0*v}>7o!} zu-*LE^&2Utq(TZX%kM1AyYE&Bb$#ebNhA-ik?+gPXdgP>-0>>0NVe%sLLVfh+8L?> z3o1vWD1H3=uO7CSxyz!|_TcbPT%SW6BP&()4gaUa;)rp-3(MpuuX$>aP5h`u87m<* zmxZSC1%^MVdipP6Hv+w2O9BYt{$syOrEPw4+WJ;iPO^?e+6&{f8r8IKw85HUeTv`T z(<@LLMS*HiGUo?H;r=R*P+J7H;djYtjHOW0$o0_98CiQD*}|>jE%Zf)Q~#?nF?o|y z|J!0p`jBH94`MXkBwCZ{P{G9U`V(N;BvEm`TeM-|vX8gJ8yBRGU9B$;M}dDFyma?j zB2_IH(#oY>dQZb;i@O9rn7=Q=3)!$F9V#r5@kcV4DnxYWOTPPkzJ7(W4vy6-Y2;pM ztO6(kPn1HJl{@94{yy*d{;Hkej|K#J=c_PD=}H+SdBXoH_$)+L4*$lf$hh!PsOs%-4+EKTEwcDVV2p>&?iUE^c*TVNLg_LY*)f&d!XBGsI~ zSwxJ_n7#qEmwEHLQ{nnR`!MA3?GCAS_`)L7M&CJCl13e1j#U#K)bHMKSe)ylu1qQA zgvftqd4al}?Yfg^zsBX%u5Ba>$5c+E)9c z0$7J$sm@%!i!(KhM|p|@3=GW%fM#}=zd?zn2b^Vg62z}@K&mZ?nm3xh}ikDdgwF6iD-T6-X~9&W;4#K5jww=8q*skHS*$G!7qQLCQ3cD}xP7iP1D z?-jj2buWO;2zTt^kAYmNMg%_6_;(cKYK|d8ihp60r*yzGG~Qiw#pSSBB+61*HD1DH z@RNM_@_BJ8If;neNt@<{j%Cc)P)6oQ%7;!n*lVBC&w>-xW`7^*7%Thz-p4=7Y#+IO zyjto5V45a>Q7;`$FWP_juuJ3=w-j|&UMRA=mrT!oYmZnUnG2x%0f`bjrs_BC z(v0~2xDF3HLhq@l%fc6TPnNILWI&XaKn>hKbLD;(0AL{hNd139onNC9{KPi=-mK-r z<#DRR%71uez8Iq$yU&zZ9$6|}cfPne?Mmcykhh&reawqLBhs+gWC(>CHwvKqsPM9gaoMmfc%u8`_RmRCl7ny z+IPZYHEZMrYB5hRCDONTdJ-g=g1OYeq4yeA)xg%Yn$%-68L!?D0?J#Wl)MAI z{$0Eht1{Gp8vgj)nOkM;pkwlMQ!KEBeV)gZ32zvzeu|YfZ}X0E#J#5^=bd_j8JTSD zFGT90JtjVf4D~ZXkOqsZlB(mY5o;)Gh`^z<*&b8Hh>8!~z_N=pU$i#xU2pg4i0mzO zIR1^vUz!Q#p`B71DCzon0)GB*FVSg4Sa+4T{cOF4(~6N1lixD0m#W(PMZacGDc@9p6``7HGG%o)DT z4|sT-S|5|71wS5Bkv&vYuF(CrioryZ`^IKuXxQ@G_OkDL6_(sMvpzKOjU+WmKJ^{J zFnjzlhrfE5q1x0E9ncz2aDI{3AnJ6Gxr(e^HEP`08MUs*rNe9z_o!WXeF7bGiU=K` z^k(ZwH}J!BKvmPFlS*q%>fY8$^xSBGcmf;VY2UN?t+auPKZB;X3xj74X9lLc&uB;^ z2)F5prXvi<^xMxpuT0NCRStPtv^YdZ0xE1?oXJh_h3uz9F6&|y2N9R!Rg1$wsO^ll zwFkw_x*V<_e@dG@*6U`1M$JAD9y{t>JK8g8mtD_4^8_CdyItl$2f9lQINE99`pY36 z2NiT?{Q?O)-K`f&gj5iCIuVqo*_IIH{uh_kmJ45{3*%00jivDU(13kU6z7@|+%DQOLt9^S@f&Q}JSeORRv z+5Sv0C+?@SV0dK;0q=xxQr`Zb?O#CpQ$%{kwiB`PGA9ny4S9k{l*kq(LDkKnIO+O~ zR*(vE#g*l`Zr%>izDbMWTqF0@h1ns~*&F-_cOoFSwx8t%0Hmisc+Y?xb4I-OaihP* zvjA_sOXu+#9#mE6Jxhp@YTZ%8#@Aq+T;s zhE&lh3Oftw44^Dsp@-w5)s+^AHmeTd*WwzCZXr?Jj|0HYE*IjBtp*1BDU>GC>y%&LW+D)9R)`A|%=j5z zZwLy37oV4;c}hY6Qg5bN9H<=&RWwPjeQcx{-j+I#=Y=;wfk|mJywT>NQc0(*jKp2D zUY=PW<(To_hG^i|&Na&zT3spT=yD1Rx<^oRHJk19^=3l94~PQM{~)#RzQfW829-eX zO*C_$XpZQd++RiJ^#CU+ujh-u_uRHPxc%K_)y1Um{G9WKa zl71Q(u>vnSSfKXSY^5Y#VZ21O7@2-kjcvF!Y>R){D`AkpW??ON`hRx{rh*ISwb^lx z{5vk-1z;lB{EiptD0Kni%hl9a0mbT1Mfzs^7W8F}wBlVy6xoJ+mPe!1mUa~0+}PL; ztEW+6+jWCu&OV~sfNLDZjatKp5Wk1{P;%UDjkmi+w z-%$snJd}=Ow2e^K zR`0L8o+}A7$mYql#G1;=dRn1| z-$@cMfd!`j5oQi>qj;?*N!D4BAaW8Zh6&21c5qZo=I|tVP$A26?eJaf+`T9z?AhiX zA{0wVOcw1;ISO=oCcs+_5Wg8bYCiN<4t7$jNb+BXm8Y){bpL@oaXHp@STchQ#{1;G zJkhzHKM1~^1=>FCs#N0jHrx^*^lgk>T09=xq}^_kC824c?2B*>{}HZ9+1M(@WO0^i ztYo4{1_%uRZaqL_f2x;bo_x7~<~;ibxM~$Q1zXL6#4Rj_2`djkI-IAw)$2U~36Dz_ z4_vA65)xI{D5)(G`VawWt@9Ofx6}BlQ2BNOM$7BnWB*#g{>C}chdvD|w*iRtel42o zEBe}*e#syox2P>w(itO+ogP;-pqXLx#LYXBk&I8?_PAkunYruhYW+VTQl7KaL4y&P<$tl_+6H?YJpx606@mYq$29;>r^J5YgbKY7Q6$; zaWXmDd!~;s=%q06cH_R*-RUlF^8>kcIcOb41JjuQB%P^~!kk3+zMqaD-c$;&lezIN zQlhz7qw~$S%x)F0t_Gfqw$%<8UW4S{vKdenM91ob^ufw?npA;O5_ZyRMMOO8`|9cQ zHgDG3OJsr;zOtn~#}@Ab8+IIjvY}@gYPeaQHaU8<1?hsnzn<+fO?kL8dj|FH=&p1i zuikHfj9rAiAeTj^O@}0RZbBC{4#(79pVbWO>4jvS=iT@S6@vTKSlma7%C!&Leb2ch z0ovD>D?^Mxtmp2J$fwHsUkp{8U9dnkW@zZQ{v-xt2dLxR?-w0wLq6MA8=2SU#sl#h zfEsu}Bza|S^E{FUW-v8Ki8LQ=f>Bsxp7E&ZmpHIoGuVL0MSbc?B1SN=vBKkDnzURK zY-F^~r4HoZNeG6fj{O-guyw+?q*ka*8N=*zThZs6x`RWk>yF^C$-p;3>rQdyZ9Ng! zjnvY=Qh?b>5F9Zd-J7XOD$7_Z#&&lzS8TedQ@vY!!DexQ%Vqox)o%L%l=8Ek;ofdr z%>(ub9_jln`@7}Zcby;GWuDu_-PRlyP8O=;LRx!Zy8UyVsNv7Gv6R&b=1Rh373KE6 zwKvb_8yp(s)T+h)3$MThMXBa(ZUSp^ghcSHo}WF-gUoe=PR9;%ghOv8v2rJc8wBcf z5vhU5eG4Zk(r8;t$J^XV)f*gf zU?iFfKuZhaNV4Uk^D=SbG!jydCk;D8fK7R~uFdv-vHVjisLzmlV$_*7t3!ZV{gtu3 z>Wa&&InD*hW|8@55ZrA)1k;DykHWVR%A!RLj*JD@mH2Q&3+X-$0_lp`Tv(^v@2$Ep zGEH$zcW-QPT4i`XZ!id7oGt((tb$8VlR$x91l9Qsez{E(X={Zn>m6zHw!hXw1fKXh z9RlagJUx}YW8aj@nC|4>%k}L2F-9runc-7hV|ms6bt&Iotd7si%WGj$Yc#mHSy*?M zcD`}=dWF^@E^IMR>T8801^qsAT3kK%W-aNUN-lOK16g)UyXMcD_WG-Pq07l(r#5}U zey)C@!os!jGG3%H>rzMo+zF(KwgV7PQx=nUXELaxXD1dq)IJ z{gP3QRu5oN3S7K!uUJD*X<(T90rp3h9I4O}f^)p9Fv=#zV+7g=_+!JFNoeA#8r@~( z^<|GgB9!mg|M#mCn&Ilke{|(vahKhf$)(eWtr{=+8|vP%3DRrUS?Y6W@o84y>TEU$ z!~4^xOm9UpqM#ZJf=KI4kz^atCUkK$xE7#U8ROS~h-=dS1XX&7?SVIJAMv$lS?642 znfLc1hRZ)mJE)Po?a_;c?Gh9WCtrx2g3FPtbH3?L#Bx|Ql#~qW#x`Nzqpa(zv*F8O zcGA97j29=zigFuIF!bDpr!FV|V+hvh0sV{4jT|fvDhs_THk(Q7d*|tQB`#J;dg}A^ z(h4?bANUT@;Ia4__}3o~m(uhSb^$66;rx86x%zSJTmewoi?N_*b9&Da)uU|B{{7V99M}rcqp8{q zm>*(Xhoi%870+$VDkypE9LF`X*4h6$^-RaI8ut@`9t~c&ulM+=*0q%o#-V@)c{mZM zYA9BrVo|QvB`BqKf8{GOl510&HHm)VhG6nXn6UWuDs#Rz-jDtHgOEdQuCgsxGv%VE z&U54k%1I25F5C`;hsq8c`nVX4zp;%lw_A8gt9NNW@0!L---7hf1RDZNI+Yakel!Pn zS9g8H{v4$wsN`cYgaUa+Mv&rAaAGr#O)T*3JDTOBQo)VpS>-|rcRT+7L=<1LFHZ>^ z^Y}j+)EQ#@iq_~N{WxzqfOvJ*mG zp~20l6&)S(^kud^Hx+K=-jQqn1%XP_PB=la+qR1vgBFh4?-o-Tfw3)PmuSi)WsA$2 z9`J&ELO5+k?3(jk2;<^z{O_RnIbn! zGNQie5%&J%gP=z$n`67``!; zBggEGG+f4`i9{V~0|F!u=#QgqK^{ulH78aT-n>$rYnA;KFJNjxPB;b?QF-|%#xs~R zrn_&iyB{ZFqxY0xYi^{}k^#5`mUl=EM_l$Fh&Lsf0_e>dj6w~_Dpc(%{N+0iF1Lg* zWzPk%d;7cKEMYY1aM9G*>61&HTc9OApZ^H^Ae_5E6R(bqt1Kz%{XX#(&!OXMX9apP zQ-p$#ORq_T`ua=Mx!=*N$YJn{02vY@38#YpCEe*H3KE*Yy1qGy)r3Nh<_bUNjnlJ% z$sx5P8CSvcXKUja1d+-xsl`JJzyPOCxAYER|K7x2C>Kxm_~CX_>W{zE?(B$V=JiYQ zp8tpTbp)|&F6~dfth^wRkELYw8~s>+HUkLeG3rhYWiLOwJWCadyoxdc|7Ph!Z;nff z{5dU}o@^YoG^h)?ZpsiGTFmEzOk;FgVbs(NE29Zak3%M#`A)M^cR`_CVs%RGqw|Uw z|HDr&mGMK;qai^~s|9=pKS}nMzn56M>2pc^L}>t{mhhK07KvV%&8jv?z`C+u+*%^U z!o!i%^0{Apqcaq>bRbs*<2(o!@--3=_1dAYkYXgIyR$kzkEI-L*^VcnF$b(s?yrpf zgU=J(+fq^B9!KUE`D2$}?*%GIY#75x*YW2z#*vdbV1oU(JUSkqsktCD!6!b7u_)6f zAE6|GPna>AX&3;-o7{8Wt&FIc0EbF>ikPKE0iAQ;qS4fWU0No>b&3T^!-ib$-(X%E z+)X-^W}P=DR(C()KFDF5sn!Od^eRKUJh%2iCI@~(8T@)G)MMdJ<+lr9!}Qlv z>3_4O|8Ry#MuxR0wQ{L$U@gH;jG++zD@ZXwT-8?>Z^@}x1k)h5od-T42*_~!5KNo_ zq2}pHC%0wtFD9lLh!{5jJdI?)_lNcEpw=0>_>s_eT zGGV)A&#uz1XGHl(+rUrb&!`$!h|+2$eEil#52(VF>lX?P>Qi0I`dsp4o;IGkqz=8n ziE8mc^A6OG-UzspH~WDDjqm`*CIrll0xvb|9}_8fa_%dC=4P_2K>QLo)HsLcBulPx z{8=r`fH2B$e5Rj1W z?rs=BK@d>7Q@TbvhiBdQ-uwT&@Ds?a-&)sop2txe*8v~~s{_M2&Asf#ulAPKev#Q_ zVc~zurs{CAtqjt>P3=#$!-_4vJ>uS zt==_nYg<4bdGRs$z>U8N!{q)Re^kkH`LWr5d1Ml2e2k*e(5z2>M;`K0Oad>g1%E5< z>-^SYm9z63Wt@M~gii1AoJBY-4zD;k4ps$^(^(Dz+OG!xXw3?HE0?(h9!12D&JoZ4 z{mRy#L|RbM<8^d!1fBiMykBtigD8xkVdh6kQCO-F`_X3Vj^!YBJG>~t{qui5%N+Qs z0}nkYBO~;4ZS?K(09d|8`Ns@Zc4Taf+_nU_Mp<2RUhW6Fgknm|^sMJHgZiSzqleHhs?=JkCEKWb=46;;u^AR%gdjnMPmrjj+O` z-rvhNbv+ouR9dyD|M2E;T2RDAA=}VEFVTxoU;rGpSXhvM1A>s+7GbIP?7`IUxK>AEKAvVDlm27saGH zN2y*@2Iz+hVYQ)IQ(u0eDb?H6QvO!Wz-0jN)79uwTvW0Iv(6)Z)HXpky# z>aPce0Ur#m?LV1NEM1z523X|W%^4KD?3Yj8=wq_L_e)~Cy7S#RC9sI*`1Da2v->$A z&;PcRyvx^dH1faMB25f!cF?9jZ}TZyvV3J8eiG0YFAAX zemh(J${zSsuuGjZ(~%{|gy~j-h$|f_S^*@rPVquxWxuZNMu!^V^)Jih-j1cfrZ zB&8LmY>G9*sFbQgR38-nsj&+i-)@?RxeCu!G-&SxW?MW34E}B|7 z8kHXzjCu8XR$5fXxqn8E8w_1F^X-PFpk=*=5P{HIBh{XEC~i9@veFb|Z>a`zaNAV^O_XEbLB6D+-j72DW9tcu9+YYU+`}WqWvIz2 z@Z2_=GVZ_Bq&d3*mjZU6yt5y8_4F{xEk5f{rOY=BmnlXHak+PX=r>*Gb0%uMpXF4L zTpz@>J~LhsI^@ureG_r(r&9S)Xn3}kX|uWydNy6s<=TRTnP=ni-xF;B04UzyJhryd zOi%&_iSDwrm~+3~D09g7Vv*njB@yn zy)m)m7AO3%jO9Ir!P_=e53cUBovPI2>qf*rxuC>H9-JSp(8Ti}coz3)U`r6}~s^O=HXwMT~S6G*8c#1Poiw^e1hznrcFPTQGzB9#kbgypLY#~p4G zj3j&-_CtO)pnvq;gstQz#v(9@*!{>1H6~15RJfdADO{q?%NN^;9}M1tAI_n zsN(Xmu6iOMd_oPbG78PFNR~DZ!()Nu`Znu@=F7>) zuV>d_9>?MCr=|#xy*WnB8BcFmOFa?sJ}gVs<#fDV>uM>$*f_fx6y))^u5}H6POfsP zz#AR*DOKd=d}Pt%Fu0{D@g?2;xzvG{6sy07#~5O~@Ez=-V6mm5QLB80zA=eY>cvc% z1X^Fi*N+j=M-xq?w59xpuCAEbg1iYk&s~nbC0&bmqyN#M9DV1z-8!3{0VtrlO5c~< z_1eB8{0?njx}-6Z&>ysNAW`9A`Rv7eEPHV9Rjh8Ti7cmaO5>V?#qi76zX6|I+r+O~ zs74?r!ZT>}dB=l(?p17D5v-5*buFD7$ahcKnkzh#XE**X6Pv`+L>IZ4%(828G-69p zkfMurIiB8U9!D+sF8VIEQw?z`p#|^rT3NZF3%PzL--l;zAaT8kZ;1jg}O#!cKu|6Sq=>$*~z7#^^OPxQ- z0l%cnjOC)s?^Wdh`IJ>WtCv@(@a7=wpTuqJla(pQ-P?bf-0KO+9I64$;Aj%+^TnKUc-H=EFd`6QG>s4%)8pp9vjKkUO{Qt`m1;q3Ynst>=ujCk^50by*G0##6BL zfLPzUZW=dT=-DePk#Sazv=edcj2Q{lL%JBGCrm%i^-<_;Rm(BCHC^^QAF#i$Mm)f*2?_$~dD`tx~`vK6OBD<*lS;2Hk9-@9yJLb+ zC?$9q$H`L8V1V=JZS%z2^ziUHm%T2j?bc&|j(d?-^{! z;tZ%p1@fj{Wj33oxP#H^LI0i06jT!anbW13Ig*fa;=_YFy}wV` zco2xYo>-2=t;b^ObiKEr)%+o4w(6wjkE@B*FXcJF^J8b(+`(Wk2CmN1YJgy%*%5V? zyQJ)|>UIGpw0#!MwKSVPMeoft(R_?i!A^Ex@GarV_Q+M&9c7&2=MzHEqTx&dC*n_N z9TymNrC5bYv8v04o+vNJyG|siwN44?>&S{F{(O{tM#LX~$Z;X=`V5P}ye<-=;cR^1 zy3Ks+`#n?7v3+~c=uNdwOP$48F+n`>e1$ZDj&L`G*9!)#J*&}e^I85z5a(sJBrl&* zb-$KW6LRGStB_C73SsU;4+-)JE!9UVH?n|yYa7cKno)2P30CXe;r%f`pi&}kv$@TF>8uy_Xe9O z-L6=lvwbKMG-cyCnj=g2%Z~{HSrWzHUUj`VL}$rd+-*NmL1HXM$ZI@<1R%orQF>VJoEV{1P_!_+_GehMhPyqZof~SB%$zLv^;NvTY ztTULZ`i^2EnEZ*i#RB5*WMjxX_2WRCoLc`_iz}zw z*Z5g7^kDq*q4F!EJ6Q}vl(>7%X+6dwu=fPM(Dy8^3M;R^X)TYc80=Y3e}puszrT@m#`qkz$)$E!<5G6B+6!fcv|tS zZ@1F_8zatmDL2RXpXF`vB$l9KMq8V$xH|}_X{IcmzuQ*&f_=hH(ljl~$;*D%d)G@~ z(DRvGUJQiLgffcACFH_mr2hDnbV*wzxs#Rwn{_M=qeVBade~Q|86HTr~`3_(sk%_uI<^(1?35)ef9C5HxeAy@>JH-C_fveRMK-o3aSNL zt$DMjs(ChUY~dgAp?Qk9_N+sjvvSe30!=DOMTg&_E)I!r&W8fb_IV23c|i5sZb1LC zg?s%`Cds4PcMy4p2|lva8M9@vfbdBhf`|=a^-@v0>t=||8zM}EDF0Smey4BmvjDZD zQ-1BcH7b@!4V+*q=1dIK6Qg9`u(?G9=CVGwoSajIfA!g*9XHn@_Bih4uF?~PpO1Lo zAaCiI@3w_(Y?MO@=Bl|4xKrNLjuA}}Y;!u!5WdPx@!)(@+__5N^eN$ESNj2+?z{3D z@p*}(2=T9)D^C&lZU6YI_`+gZnt_AxI3=O{XESA+8fcXgNrvgZwU(FLv%-?fm;BcY z=f)lvc4mme{oHa{Cq01A-Sca1=exeC;@j7~!|7*N6Z3Wdo_($+?22nDf!`ahao0@^>bVpgPulmIA99+%{xLrI;n2OHI8V5r6gcD ze}I~#znO1L1L+kmSNk9frYuX)bF5yTdl)Ez+URLn=Lm*vzFcO7lj?IFUMeqTz}|=E zB~SY6?X56_>gL;h$;2KwUN7Cp0f`c{&q$PT(+wx{>(I1}l+y}qat5~*&=1^VxU9eX zbG(Bhy?tN)ctiV^`=U9u5(n^Y+ML;hS|{-#KXsQ>_vJx0MBjPhZDvE6z7vUG*cGZ- z$LExM8N=1TcHDRo#bi@Ga0;8r{%(_K3eK4a!DX&a3KsJnME38Wa*yWCkLM$)^JPJ< z=M#%yEG{yQwj09m$eL`}4E*-&>!Il`lF%okNki`kAul#J*vHEw-T6(27QNZn!$bXw z$h&NzI~!=9)&FJzwsg}mF_BK>!8U0QSLi8(j95;FUnZCrJ=_j|U2a|(1;Y2F!?QhU zV;4-<2Cu*Q3V?q zn~gpC*)_d;k|ZGkMXL;j@}MZDaP8dVNW*Vo{%)#&@1YJSF;2xVRs!MJW^jJaOFz!N zq9XU4PU*Rd&HCGT(O>F1VJp~*M0fs_=yd~$nt2zHu*S-tPX|Zu6NaM+6$^t~ z;boF#z}AL%*a^EtoN*%rO3Za8_dsdzMhG#y8laa03ahPB-Z% zsGyMe^?0zHgsA=T=uVWgH5;giP}+dmar22`QP~eC$#pgLjMP2AGkl}k zb@>D$!;vT7{rXYz`Qh?us|eW0+sh&qzXvO1UWF^hS0S2RemA!S;~Wxn=uL-b zmVi%2wowk|s2CfO13=6m1Ipe_{XiA~01IQG(%D1{xwPeIxfY-NdPs8)-2ztP$eGwb zgc<2L3qf2%1x$hk*`Rz89(OB&X~+5ma5r*CD|Gf*_r*_3zI{3f)5!N}~$0%G@GUz|F;RLAm{`Z{5S+OErDQpyJmjn3gX?Dqy_?yEz!t%-WG z-ODCp&BBG)G9K(L^OR+2)>br&H$^OE6WMYI{=320MAAT=4SD(;5v>O<4F%D))5`_5&ba|oOHYGywAO+HmCsElPj8Dl67EJod&kv zlGulh$Y2FvMfvM#^~Cote|nObqaXPNvF^;9Ztt%}Zy4wIhQEm!SX5_O zRc^$)x|}3<P2g%wlU2M7H_?>onUt~HWTJQGi^fp%;pE$?!pJWIRCu;X-^{Vw!sdQ=vuV59ygSv<34S?9mZ#wlbK zLlkp3a+OE$NB3tde3wVBrW~gJZm3e5=6i8dT~`M9`^2>$et#5tl#IBnN?40QNIeUv zdO}&E)!dE6?2fCo6Qq5Sji_zW5 zdAAm`!~c+`ro5e+i>r?$BL-I?wgfxzf_! zmhzh1H8|91c?1HoXt{Uuj)(_&OpLL}V#NaKa_oU7X#pWKk@56qJk1}LO$gsNSjOV% ztTb5}DY&^E>2d*lUA8E+#A=HH)j`63&B}>~#+O&}+V z?^ZD8zlMlmjIZOy^lU>`ay!*G=o7rRsu zuKql?B7rvKjMo52mnPQWQlrM>876Ry`TSUh%|Pzy1XB9sku?p^@fBCbNQk-Zm5EU{ z*!^x+2&yIYjUOTr$~oLo1d>S#@7HoRqdw%W>!^kKCO{c6~0dfEUUxY26dj-l@WjuB)x zy)_pO$8K!5Y#S#$LYa4*v&_E$io0pIa^*6AyyS@U7cX+rSU1Lx((I6>IU>M9pN_(MfbIn1v{yH+ZE!>nhFE+>grIr+2ffw5_Emu*QX znW>}?NxXD_)x-aRwR>ki5M9cu+WRq2h4%W%xJV;6%!s8#*q@Ga#7nQAEfp!aN0^Lk zh%hu3Zs>Zr`}pDV|JM3Wem|Eghi+rRGNBDuzXtioj?`d?J)Crn*U%P25Lu{J-DXaA zrDdsfvNQL+KVv|-OgXM>WyBih>$1DHLRmdr9Q(@b{sVp!s-`0g`pZNXard($qt|GYfzg0xWleJhJnHK{oK*WgpWw!vQ#KUDis(a@_sDpdv?W1pnvRy zO?Fp-9=Ef3@?T^^fwNa3r4Cjt18W1Jx>6Lwv~8g_33ZaO3>pJu+^QWo<;1^21op-* zTvEl}z9E#h{Fz~`@MuWx9$_$S05C$!&C$iQ721Nn=Wg!Kt{lW_Ia(%G{B@}cKO;mZX1XXNc zJ28|jgIqr;TTW{MdM_LBS5BRuyi547YZB;BUW3FSN1uW&vj!E0ePC_bkH*skiXu2# zb~=`0kngGwiq_lXYlBiTd>OFCbzCkmGFkBx$cx$0v=KgNYV&J{UwOKW=hTa>d>im;g?fNl^e+(`Sho{4!938ZXaWrtfIyhJL`dBqfP-i`h^fDs6i5Z50{b~ zda(zf50-^}m_W)h6Ula@2kL9X-#lfzBw}G|mwW0xREi5DAuJ6%sCH)Q@l(73Atwxd z^r_TZFl{x&m6-8`{2Eb;$LDd8YAhWh`Zfn4((_P*YTwlX_YjL7ljppWDzU?*0+l#s ze~p+_EJyGmfP(emk-KD4!|{<~xk0C%guwW){iI6#Zu7HSZnd8g4l$oB*jK=)4b;HCMfNeVWl#*TWI7Y5O7K&GD}5 zbXV3vBk_y2``DTi!dO(Ec=SIg0Rq$_DFefV6w*xTV>EBNZ!4K?Shk>vV{5QFK_kCer(v zQ*|N-p6F4rE#i(|pOrSb-$@?}U_=ZXOoj;PXtlHN0vc=Q<%1pN!kYZCe>RutPxv>a zA{XNlL7Gx#uf7F!0+NP6Dmw)s^c1{1QkRgke!G8It{K_Q(7cGNbVj(C zYTekmkn6k~MlecdoIL{+m2ByoawP{Fhe$*b#kQUsnqo>l!7KE#xO3%E>GkZW=q6v4 zzEROhby~-2j$bhr#YCSTL&-db#Xy;*-2z$3)*5xRPNJhR=R3ehS%tB#>Un~06IIiG zxP*!N!WZQxN5h~30OiDVa9c(&3jAF3ml4@~YN0>CE7motTN z`=-^z>0)8{*MVq&4z-iq)@$tri@xjW7}+&dFI#U$J>)a^kSwx^iEOwKh(l0M+rsJ( z^45*HtB+^t0`;pe2HpT)NUaBE7={hBg;8^9raJwLR0?a3wlU()#KEK&LLRl9O5uxa zekBW}nY^CC&gPPXB(q~|c+*eBGOYl9k8_EC=RBID>p8+!U0G^;$^HME1sG2B)%80# zc4A;Xo@b49{?c6MTgMeoJM+#}H&GNAedjTkWG0ODp$nguMSA&@X(#WnYNG8&P5FA zK2_b`VdO@$sPV(m100z0KXNuqXxoXV8?(v`-jfn}LzSVH$=0^=nEWa!!RT1$W6boo7HUeRLa6!qyOoOOra$yA8%^OY_=SVn%y zVWykDW!_L~KIWHt*VY*H*0S%g$*%)I3fvn}c zU{&Hy;*V`zAkR-gK{3gEo&Rg`W!u0l{(;|eNs)GaJIxomxudN7q{OkFoyoI={~rsC z&a+vZm1;h6(2)NUe`q%Nd~?64KPOmjS1|H;-kN+a=%A$+j&R8I+=9A-H@ySVyO)-i zJII24y|Bs3nNsswHs|r;VZLBHeD3twIy_%Y8fp zXb?7DcoZ5qw(U5j9mf2#y~{xL0FeLwgBsO{KsLF|*)H?wAFt#IlM4mYwy{}JNPMGdUSq5CCeom=h8 zY(G_Z(iuHPV-gtq{S1?dMm!YB3Kvp3^Gek1|AW@tUJEj^sU^mCRu18l`2~#noAVG7 zwfR%v$|<;lb))pvhm;5dd39_ViwMb}`T1tz5XH!tnQk8(ngpNU)<8OJnCMr99~{r#j4|C#LWCvS_Fq?Q@Qx^< z&Tc>J;eQHdyfBEQ_}2Qxd=JnUm!~d|xW2q8(KA6^3p?m;sp11AwS}vipd%Ndb3>+$veSCL!8ruO(bTKB^pzaIfC8X!JH>Tx-tt0;8PMbbt_p-2USn98kqSk7 z%MB+-ni=7#&wMu9<+$IJAxD_w^degPg@#v95xw(I&;x!A?GJNgdVLmLLq z8{%az^kBUd72mang#n&|aA&beX}hH+?Gs#--WN-EGv+Tpd z*VAAH_L6ebnrB(F4&$=egHGOO53H-!Oc~_eWtWcA!hvJ@0!ARXjC!j|d`1^yY*F^( z-5~L6rzG4z0Lzaa-eAJyPR8U(f{>1PriEVYa;g&w<@nx*Fv5w*_A%|mPYGqYsXOM| za=hOQg&{7iKO+r;u2`n0lzh)n!h^RNBD_Y2etPe0QYgU;75MjM@L1 zk1GvwPv^t>AFtq_<`7;VC;jC%P88AfXHC1z#$yL2c*uT$T7g4?7ZJ-FDl_Q&1pZiS zrSQMw${+`#w%PpiWD~DL9;yUayNxx~8SFJr@YnmB|HHOprST3qnssrhQ`T`NtWEGG zv{PS;(kE{~lg}4-cxRRAf-fEtrMuQE8uqrFRuTMW7PMIt7h8inyFn=)Ap7C6iV1#JndpFFOwE%t ztA%a+Gow)X{v+pyBOfM>&<;xNyBlT|GcYq)U@TeGQgxyQNSTh@?r9(FMya-ns7Lv= z$&^Dg2mPPylU~_2yP3cSNGxCSM#=1|kk`fg$s&bRJsy0$cbjO0ab`al&*q^P>@zGyew?ks{!$$wka4S1 zWPu}>>wG5R`1W+03VSsgPSCIwe1P>wl2=$vWuqDqT!&iJgWCEvX_nyz#%N+x`DZ-w*! z@zU3hd3)gKH_k1A+^0*)m`9t|4?v)BbVeCMw1+s+@myJB1A z5vl>tU3@>Q*)pLh*?vU)t1+++4KvTNC?e%*Etp1BZ*_S?CK$0y}T@8`(-}UDS&gUKHRP<+N;B-C-Ek^7CXm z@Da&8ba@K<0}k^Lvovz)hCq<)(f6^Z6OADYjUg8c?-W|(UwhsIo^GFq=0~@&Ed{MV z-2}XGMb^dzPsc2#KL~@urxqIFB-dk!8GzQ`N0<`u{&QQ|L^ZU1fO}Tr6yN!?8pb~x zJv;P#J9Ubk8CPcut|&f)US&n=F$?IfQ#G)FSGxjZ337N!>pxHKXWmc@Ss6$dq+ z*nLN=A+-sqW$>UOnzh{(#D5_xa}~j&E^4Bh1g)Pw;N^L`6G1l5dPN#e6)f-*!(|lj z@nafwRiAre?EEH_mY!hAmcW6>vl@h+UmlarlCeg-v01Ph?``X2L-)|+0xxJmK8@KA zK~mad=HBy8x_zlnE(PC^gC2!FR*@2-rh&wori6UnE-#3VzeW{gs2xWxUHV8J-XX5a zu>PCG0nrIEHx+!sMWMDN$oqQ>j8K}FcKqz`1>8a@z_%|>IzA@{zqqf#e-hQVWuXoOa ztAQZ?-;*7@!yaENB(Z=0QwlkOXE~_Jy!=6STVH9G`|MA3h$;~Ja;8*%-tKgNIZj(S z{e-Pt(JOw+h5@@H#iC?0vb0_yWh0UQ{DRuFD8s z9&}kKrw9t2KQFtOz^!37f+km2v;%xkKQ{N$HqQq55d?rXa{mlBa9Zm# z`i!s`*tb*tL0}dvpd^tR&_!>q)m2V)^?EnmT?J?)0=A2;_sI7n;WD`0dW;Yp-~R0^ zhZf!UOqzop%nohG;&=A%Eyq}sEGdI>6G5A)2jM<>=gj6!(fc)N{Qtzp*A!5)t=3v@ zVWo#2W%1F;x&X z=Ua#;*vegdg8t_z>_8{rdA(X`G*q3yyUZ-6e7d$OddU^3Y7%L7Gb+Gqhq%+XYoWDC zqk?5rY1Z=Iy!p_Q^W?*=b*>;gRS-L@QwE=J#s1{t`td5 zxJxRB`dQU=42;2P&nAy@+m;7qoGOfJ_F8qy<|lRMK9}ovS9)rPCyYDiDo#=|At|7f zDiDIb-C;x=f9mQabN_n9p+3jJLr6xWQgD~ujRA}WK2`z1+mGe3ruX+JA_|kw(`SW7 z`Okx2iO-Jh1X&(zr>Yy{1!XWvDsYKUh%;a)c?ICB2@R3qbrwZQV(f67n)ly-FvrJ; zVV{z@Ta7yvAtzVjYY&)I65w&V*;kyw{Hz5I3@HRC{d;h+#u;m62@OzWh1~+|~s+q+GiHB#Z;!qm||v0INa zS*RP==~BgYl?A{m&qTj{IXzr!mvG=!_CAK_>`m}LiksUW|1c|^W!`Wi{t^E7vL z-u~(3Lq%cgd7^~4p#Io+93+&G%Y1IMO3mC}n!1WgVe?7^sUy_!jzW{V62&&_;7Y)7+4PJw77gbEvv9TTR15ckI(UK+&-z&XGVPQ!KZH+rw=DL&}q zeL&{9=_-70;6wqKLO|XX3VIQ_OA21%-0z%|>GiymfYh?`3F*t6P`jyh+7<+xsPDio za8Oz?!Y8Lt`NbQ_UpSmpNL1Io;8|g29@#>LJPU`)Ct@wckhe>%Rk*mRXOYGt-e*u1 zb0QDv-Z2?0U1tHa`Dn9=W4Oc;iPQ!Q0-?!_;-_^zdOC@He{#>jr+*Bolk;YQ-XnbalZuw?1HP1! z*$>|#!XcbVPWR=|$x>)e`xpniw=MH)r|q)1Pe=v5Je7H`M?bkyuzDi1J|nBkFPbkq z%r76DVD#X{46#?$%4P|r@aGF+*J|Pj0go z$qF^x$o1yTz2B(=VSEu-ab*QuAGOp<=sg;z8+xPMiw4>`k0|4+o{zVD&oSCazwl-; z{0b;pI;=ANGfb=*5uSSiV6;@1hO~8CVw_1Xpin-|8xZsI`?~molke*JGoI%`#%xTC zKToLB<4K;nKL3Ev$SaypLN)1Nz#8!lQ?&`(@*aS|o}PWnz!ru_aRFLH z6Z**}anrPFK|dzGT?J}MLh&JREaKI`4Z}=|EU2@ocGtVy4lpLFdC;dR5zk5$?*Z-y zh=^YECT1P`Zo7D`2e_-f!~U(E3s~|TZii7R?b-c1g>U-9LI{kRL%wFOaUO6<@6mf? zD7|Yww(8k>!)d@cP2XAG)fFp0IK&*%$hOq9iVj_kolrsbUm^g=9Tdh_$aYgN_l=5rksk8Tf|J6v}9 z*uu;0W{!(9(1E$@R!G|YeMOG&&6?t0XS~RxmuPYlXq62_*CS{Fv>9oX@cMtJ>uXG? z0XoSk*#&Rwul;LspFMlWbc|-12DwTS9YDg4EnEEgQ^{&j?H?9lL1iMAY^6Mc`xk4< z3v6=uD3@zd+(UfEy%cd{C@VagP34Jh6HN=#Z-2duC<-8Q{*u6x7u_3TA^w*=w@x3s z^AokiUv<^#&jN`9w7Nf{zAwzXjUhFe1#U&7w&L)5NakGPIs6_y&@-d~Xbox+RGU&N*(XQaP4hXrMWvB(_4X)g za!@KtMWR*7od{6~Q_ckQ+aX|a|3@o;YLsVq^BI_ITmdn#FM(}e6MONu+V}ds?eh84 zTDu}kvXDu)*qtV+?=l8sbv(MJh+^pp(Iy2^?!cXpA&TlTfucz3$%~u}#(3Qb8>Osc z^>M_ER&t690*pLgN$?xaam#j`1Z1LD`G5gg_p0{5Tuw-wYnjbM=sY07 zjH%jR9+5Pqn#8H4F1N@ur5dA>7sC4NGp&B-fF7?BgLxJchxIVI9PT{KL|x?gxrz=K z9=6|j0ZcAhE0UE2rVg{Z;~xFq{V)wjlr}ZX2MQ|6v@+C__H7VPKlt5bAh%z~hP`_F zJN4C!@yoK|B@4C+SjuQOzGzIch;vKDfOvV(_yw|1Y+dg9QU$U z4#mDLpTn!tc;W##>q7YPI?5PU>bGvq2aAb$mALlR$X35{rNJic03Up7WvjwVNr9*7 z6eUnOg5+M7xg7{ki=O+dQqIpTH4@qzM8zFmoj>EAYIuf#^%f~f^)X1u`pRdanIbBx zVF2GcmWoeoD+tsc+9C^nkTI0q_fO$4Mty7cT0!4)=NmxbV;6TzXvsY=l#gnQF zM?;jri6gsy>I3|=5${htZG-O?;k$wUKSnhqzcAPKE?ckuEnm#$DcMj#`g(aG4>*2n zZhcrtXRdznS=g*g;}6EZq-Ng~9wKIo#t`i(kgi1nfI4>qM8TT>0@~nx&2n79=JL3o zSqs8cPaqa^w(U7N{qm)$)2kJ~lUD_zKidGz;iMLDh~YZ~mR;M&JAt(&HzGa=#bs%8 z?ZasTP4l7+>x(BFmj5>5@}W2mos&$kyo!C9>vX+NGr*YwUO|VQqSuCW6EQdA*b%X zVCkVdKUvap>buf)8Yw#VVt%$80+y6_Ly-!!^E4P#GmgAzS%TJhiHw0rGv9VluU;`F zyONToaIv?F^h}?0U%2d)j1tc>7TB%pL_KJK|9X8Qg(v;bIW%eRFk8kD@%rCWC|B-j z&&rh@F*u|`)YK=bObalm%(fmfboAX1OMS!axW3qNal+xx>1LinLn~%MyM?wooYS^| z+ZK`apIR;S!owe8ncij-HE|`b;gi7BpUXlpPBie_SqbmuO2?P3TM>~&-PlUyz3f;f zo(gM%w$q>kF7;~Pz5qtgLsW(VqSO9KbXrn4{mpp%9{h+!Jt^F<|69s7N8p`^5dU+m z9{RK@i}bag!a^U2`=;nrdcjY{YZE*_DWZ$L{*UcW+)tlbBeANW!X#0i>xq9hvoCD4hk%Lxx4k*>0zOMP>SxpVOV~j%`(u{9G+<2I(;R zu>#B!V6UwdQULf+2ezPsGp{xE~gF6p~5#(8K zwP3iINXp1~nv{vr#fLjqybRo4+8^}7wBZuB254^*dPe!y9*)Rh1=ZVRl?o8%Gqls~ zep$xx_x6rk_ml9?ILNrkIG+d7zVg1v`G&xZS!Gf6V}?R%#+U$zp&i- zGdL&}RetnuCgz^t<4$SJ&(68DVb*9SaL*(olujHC_G?nb^lGL(*j`J&D7t)syG zy3JAShjNRUUFWPI=<&smfq#-yCHE6)8k5-t=~l3w^9L-mbzB$$G+hkLCT!bPJ-jFx zhqy$IxooWXa2^G&LU^2ou7$lopypTRUB;CAJHKe9r{7ms_dmfw_H_v(IsYH4(q{d4 zkji&TSqlTil1-qiQbHVZSJv4GCSQVjIGP{b=A|JCkfP9pmk$lO=nV}kKSS-z4a7^y zh%&&D!J@PJk|u7=lJR`gr6!?S$&{$*+!;L z^f`=twOvZCV@0kD_MjpdR{MuM?D6H&dt^8&|3rYDl-m5a60c|qzw<=_!IgvhySn_3 zQ-ylk={X{ZtIv-K0vffp0(YLKcakw>_}Jw#q~z_ycSxfIT@0Z@o1e5(kO_q*5hG=w zkO!_}(7xnVUG6=*#Fei z5CbPMd};srIYI-GuBCILjTA8CBDT$kRe!fTy!X-ov@+mo_B!vo$k^=bf`KXos$n!$ z{)LDzScVTRk0BQX$wx1(W1)i7yg4{0&p&ZKL9|`+ckvy)vh=mRw$29NQS40U|7sVmY&Kf_skwC zK9Ri+cI6#pK}@ZLEwf!Tn<`cREo_uzP89a7%xjl<Y1+}yTm@*ub{ntLhkw~c zKTE_nSgZK;Vu?G1g_*y~!z@t+dn7D>0YSyR84B$Sp%XCiDzod+d*`CcZ-t0nk{*H42y^^J>S$po88#t{nkn!w!L-4Xf z6s&L0*d37|Barh@*L81I?eSCa-D}3-0*b#?!_X7n6~hLPO&1Dj-sKtyk`_!u{qZ8bLR$y{0n_ko#>a%+-r=t^xZ3KL}r&X=8y3`O3Gp+_#4G!ZKYV5tl2d@ zHxl{FRu2KKi4$Qg~X%dVM9cdoN$rA+TtDiX+asEJ_zNX`(|{G=!;fi?x=y z_LJfnzrae^$FG(*6UNA|d&m0cvA6M1U+nLHq53~kpQuwx0ZBOcG3@+lO$sj4n|mdt z>t?bS5sRF(1t%ad3Z2@~{9MT0wWgB=0Bt3HK##!aemJhEwdWni`}&7Zp1ubKyBm`7 zA^lxZ7m1D}5*ibT59+fk?hAjJatIy90@yjS1hL_*E5L~DpH8?p+-5}6MU=P#?7LIE z|Hsr@Mb*(p+qMY=hY%pR2lwC(!QCAe7A!z;_u#?Z-F@Ni?(QzZ-JQj)f1i8WJ}*21 z4Qf@@H|H3=U!HdU5OUPB7XTuOPF1WP;GQoflFIq^+h><*zb35S<5ccx*MkGFEtV6& z`a>rQS`uh%N|N@?XOfJYr&(y!6?t&{UJ`(lxUc~7Ks=Bsx!6>~7sZrqar;1QY&+!A z7M|v~1%?&vJ-_?CuTcE&!B51BN`VRWIV9@Zq092-$Y!mO@|9B@af1OWRLI4rJm%)RkV7PSjw^9YDy zz(k;nd3z;7Df^q&cQ{59!LV@BX*=KF?OnnzoVD#~QiHx+0>dj30Qy<(RS=X1{`z-? z%y-22`JF$Y>vyELn)Svs&nK^8W25`ZYysUUZ{xF=YFFO|YsPX>Tzj#q?L5)jEf_=u z_{W7`bFj|g0X=!H>y5mFHDhdUI*KMg5VqYX)R4SIM*HuC@b*|nFAE2+L(S(wkabI5P0 z5QV-x9M{Nb`Y$3q3 z!t^-8NV5J9Jy%oMIcTu`L%GEyC9r$}bUfUn_DOIAX(ZgKgC!4bA2$%;jt7Hlb8Rn4 zLHO^Cu5bkSOlr1tn0{179KZAGj!y}84MBlq%^*%e%ikbc-cnIuL<#KQj#-)x@o;Np z`T+bf;L8?hvPeWnOuCtT>R)SuC*Ih@wKcQ_x)>XkS;5%n`8>|JPG<*=;aZ(r3;epM zol#H)gE3(9NnLR#Ik#Q1wVE=gk;9<=+Y@ZtQR^AtMgoGzRz4j)7#|-Uax$_l`j|{5 z_A}8tAhH#@RrUH7mEIQn3a8i&<1k)fc#CfMsd1IpCcG7zke8hQ_G8I(7cGJ)Cw=Z_ zN5FA|BGI$p3!1*qfu5snu;ZS{b+ZN>Y&9^QS>mCm%XE3~M(dvO*dW#i_OA8=hOLIV z)y|0x99ua-dge!}Tr%{oiKelM-AKNBxqI6MV3A$^G(>jK@QQP{JKfzZ+a}!l!Gb>3?it#eB(yk8W!<5X_%Vh{s$xX+c+_Z(Cp|%s+{>r1 z%d-Cm3kcP{j6BOO!nwBPm0Jd|T=T6lUdZ&0Xehfi`4UWvYQ1y-8mx3U7}$CPIBZuT zAu+b!C=Ni|YrOs@A?%`${W!7OoK+D)2XU7iD*xYy0zC)x?=Wm{@HhLjV|8)i4_yYz z!qT7VN)MihGqR+|dHy()<`8l*o*oK0j7pbyWwES*?6$ZQ<6 zdO!_!K&jf<$_b$70`il?X@BL1oO?Dm90i$ppa;pM)y`2lbpC)vyIycJk-t<5#-!$# zcd>4Oot~(-Pc!gK^SQd97fh?j+@l3FO-cDL?UwuBM99*xO8NZ^P4+YEA?2#zh|kt! zB%M%?>ar3Wpt|3s?!&s>wJ~k$OSQfiPlf%zB*|pI^KHK*y^q`1PA%+_Gb~4T&MH4# zS)FN$Kn3^e$0_2(lZA@`=E|{gaul6F3HQk8dmAd-p`2CBiP)2zhvk?z`$>Q`1qh*l zy>*|VX}5Q&7@h#^v1iT*Y&z4L%-TGxHFDGZo6W{}E1kfj&s@GFI6(etLXrMJQViS9 zf*v6+ozF%#9u8qd$QisCsX?b#qdQct;(I9U3V4!r;aO{M&@n{G5dJ6K51~uXCH^lT z!AfX#!Lc6_k8VM;OvB}tHkTu4kLmSePwvCPE3MO^1nMaXLu<@G{uv-Gcm$;VvXGWy zya1Kr$R)mQwzneMYwAaFVI}Fu3U25|r`s>3dS#NBZXLawofBme>raS5Zvle|bJe%%t^~+iBp0cR=wbxz!qgTvd#|#}~FR`H1MNk7} zEBvS>B|#^9sEy3z#}}P9xC(8}?lll;l|0P`nV@9f3mvTbs+s%hHT~KmZ_nhfq zy8jv*+lH|9)Hnm|Cc5N7wF2Ygeau%TqNFh`<6B5tPGRN2+kT+8MHi`m&Nb`KD5Sca zx!=|)z#ob36t_8i#Het1{&HZv4(&!2G_<=aF?@#sWDf+&!QNu`oi!v3EmLo+w(SNg zeD35aK+zGZpv2Wd9A~*x?Zup+ZOhG!nJ+HJq$sVkE$oCt{9v5`6t>TrDBp`vU(itW z-KH8O$znd0dzefXJPie|=i5C7AVYmmSeN16zPnQ# zZD@eJO_K~}B?*i-qWou&0B%5ifR)1DY3?7<)A z)k}P1Ky7JzG*+$%V%ZUQbzG$K3b5o%Tzv=%cAF_DqkVG=UuZn$scpPE%}SL%-`XH8a(2S#2u|PGAWtdhnt5M_M~YaJ2{U}L5#aXboe*wBa>M5uQS6Hy=!g{S06E<4D+LmERt(%M8SZz6R#kv>aui7pp! z;~z&PFyhAT(6H%`VFptPG&(>7_ggLbmbI5QTicX-BqpedHaoy@6wEm(%oJqA3nwLno$5 z5eT{c$7oT3XZW7j0!KDSFQV#XQ2@7x#I#IYd_=S)GNpq~>N`ZQ-k{8ai~)(Kqj~+l zd7^|^mdJ)S1(t!PHu^`2#AyYRF{LCK%MagH{Fu-~; z?*~-PgHt;p+FX=Gka&r;KOk$PGbq5>q+LcjF4@cYV3%56!U(ufGNAe7g(#n0{sHgA zCz*DV>YC0xuLwkN3HV>c0lIp_CV=NN(ln2A?#|P>g&UPj;6dr~jg?*LLp@qZ0P{l3 za1je%rl&w15$rS6OsV*Q>g+8kP?;(UTGbQPE~D4dMn zpA>+We~TH$db`lEXXN^IEFnLT0Q$0MUJkO=`Nh2NapsKU!hb7JvN(n}OX-E|EzMKa z>vZF=0KX;(7>=uYY{}$hn0R)-0sym>4!m<}4`Ruab1<{M-)>DmW636{{fy$k`sO03 zCxgz4Tx#Zx=lP+kr;?y2P%B3CQeW8h{R2@t%nm+WX;I*DPf}_YHCm;D3rzwU)>q-K zziJCBv|$E1@&xk8$oq&qrgY1+XHXQtt2AHP zaJRGug?qvb?C(kcFgW_R$-c;>EWSaF+JcxA?7yK*NC;BDi!h)eU}xDsrvtbXY_a-h0)f5OKaev{DBimUqjPDYdyM3#3} zbN*a;am4Bq#QM)2I5*4SrCt=^YkEh%geaW-Au}4*e~$W>pV>Qql2yZrcpO|vS(dcs zA9t)n26Sr#w!M^VJM5R+@7VxT+-dThn?chz0i*q$PMn{>?8SKqXT4fI3(^kMRrpAX z1AcfMstDx4xzJ*-OC5j0hySBJV}LPlNta_R^5bRS2bf2UV4|*Q6$1j;O*&4a{yj+N zGS}{Y9ne^Ya~>L0o+~3pAY4>60;&Xv!*Aj+Y3S$cvK4X7JH$E$T1n8np(Vp!OaVG8 zT8T)E(ZHX@?spqQk?ZNQnmK3hIx5{_Q#NbNx6F|4e zvag&4q5q3`|6%L=GdW)3v*@5qiKUh`RwNkf^^at}kPP4r-Vn4|7minq3n&%9{Kgac zN%_4CiDW+T{{$-HoUgexs@7yrBdPPMcu+eL$)%R(r=G;|8}{b|yY!Swy{-su_FIYE ziL*qfzL-zLbeuMV(=vg$!H6zg-YmR{Bp}IcT8X&#ldK`2-Y0}LdSKoBsx{*DzPcY- zUz69E4YVFU6}3otwC-a^{v~xvt6oD+pPR}YAb3i{Y9pWR&baIWf-VS{2T=TdWp|aS zR!H=Tspao?6j|zdk@in--R5+rsdQ#3H~_S=QI&G*-58m-hB!PH2;KV4I@{d(T=5}N z6P4%^TPkJ=E`wO3C~X=)VWHj+3lzRX5Cp00*oWDpv}eQneSq)ccMrHye`V1vsqK!l zV#ziDfK59DMA4b*GfUgn9*)V{|2qrV$cf7hdPgRCAg~5!lGUFRSxYZ9RRED)%>lH` z9P_M=w5)=_R+KIm-xKg+XnITTBACUX?S4&orY3A2T`BhOQ>7`|ijZcGwC0k%CcWlX zMi|}KON}8V{0=suJ?FC5mv)w(!X}hBl+Y^B>F(AK0t%Yix>uTvfAo%l(8~e7rDuI$ z-@RnAo=SO406!f9?BM?o;;Gp0FJpk;x5o$TxE*v^h4OG&;rI8M>vxJ;u17qt+T%tY4)oB_Gs)n3i%di5 z1et<$|5&nDh4y73C&UW7g07KXi5i86I<;qt^S=rk?a5vWt!)K-+lSg#+LR)E31;2@ zGSdMe2JW%#4|3?zXo2PsR3gCj(M0s#*TDmDYw(c@sWk+C1*`i`-3oZHo6fzRHd23; zG8@bK57~9hA=;jD5QkT2eyEyyo7rqv?Y_C%fKST|H40?>GR|VD*qG`kvOHPW=InK zlvJASgSraMm4*(xhUxJ6Tlk0(GNAn`sJASp77!HVKli!YjsKfq5<)--i=<&YD8`n! zrAqQ?A;cC7iT-%}fgvmB0%ZAH)0k*ESpF+bNzPhF#E{Ti0FUQ>qndDi$G#N zlwSCFFMi!F8$pv4>QI6sZi!`s_&F0i!F#_oLI7y>?gg@&5)B9fRYI014*R}k7&3A5MXw={>z>Bg?P%O@-ChT zM)VpeSbLyt%v8|1X%#zE0@=A7TB(f@H)|WL%4@y;V+A#s|Ayb&c4dd*fxfx?&dFts z(Xi~;^309kc!>?sa$1e>r_APblcLsh?~J^h<^fMRsE`!kJ_uOcyWfU; zD}x*3m9sYgUcQbN^&eF!lE$h1s^TkyIw6#j17iqPlM!EE&Kx2<+t!49o=w zwDT1F{VFVkvsuc`ZL=N{E?rCme~r}f`u-YCMaLZFeSFRW|6ewIs~k2{xyJr_o2LJt zv#)%tywP_*DH>|lS+-f$o6>%9$^6nfXLNXo?p7;0_AV^?+9PM+ocW(>H(VCBnL3f_ z5*#`p=kq>aJSbiN5@vm(X_VA5@MmpRuC5!xfbFVvKJ6%z<=W zu=e|_5}X=Ai4xt4)!(nu$ZYBp`K=sN16Bopx@J0k5{Q;BS{~$#F#|@%1ITu)KE6|g zw}FmYlN@Ke(57P(THtw%)-tmBKo6Z(a52*vCxEF`d69IRUVdFc<=$VpZv>a#B{Gb) zwG0X^ zKj3Ggq$5{VM?Oaxj#=rjmmW~L09AyR5;%Twki{iMsZ=_*D-oim_Y!WwPnO%rw<~T_)p!v*w&1+uE+tH5jV~o_;TN* zAc0=s9S}>JR22k(yGPgdd^(X6#kN^ADLg|*umcK)VmB-O5hN0POC@bryO??v)xOzs zgoe@{xMAEMvyphWVc5Q=C1#*|U<&KsbNAjo}km=_>HTN)Um?(+h?ye?SG)hz-J~ekMFwk&A*9WYFg>M{1ghv=0J6a^zC)K z;X2DOf$}~BP2xohzy{nENyuo3>+;DnhVtxxvPI-Z+gT)vTTcnr`r|ChqZ6+OL4U%iB+y5bRE91&xHLd;5RTW;Q?&6+o!j+g z@D!Pt`v@o~Zdfi#u&MPX;MB+c&=OO_<#FRlpJGtgE8ikT+MisXF8?D(x-T(iL}DfY zQkT4+{ugnH%&P3v97z2?>$R!B9LWJ3Ny1A3mYJ8i z{-GorRJ^eF>(2M+W^;2_=t6)W+zVpCgU6SlJTW2)*^s30M~=I8CD@a>({{xaw8`lKH@#4I;zyViE+E zI1jF;6@Vh_dKpx`S9tWqIgSI&$qQBuoKdp??DQA>wOv3l*@FaV013VU;ozCDg^Apr zKd@?ycqkJx_KDs;TZ9j@`ao~DULxN+Z;n^b8Owh#rh4K#_}T!0UKNH~xouc$de|?Z z%OtlH@d8f?w>VT5x>{b%7ag^;?uL?U{x3ZJM;0V|hm9t}jGqP=;0q4*6q51^ef{gp zu)Bd%k4k+Qtd*y;DM%$)*y(u<(xcN}O7@=9|Bs4_n87k6VsqVgl`dky+UKh7z6T8+ zprOcgEMC}^y|=X2d4_6LHa9y_;857AnOH66D+ddNT9P0J&|QAP zsnYPB@HePQ21`YG{`raxkCy5zdA?LBjJY87Q}>hpf;VmH%hhD`c4JTF7LFlR_kQ%$ zIWDWWaf*3cr(PFDijKyiU}PL1`3rA>Rzs&W301ze5iGH~_(t~Mb{ZFGLahB>m7!g; zjovc_F6JH-xUxl9wLwQguvX>JPMd%iJfM?F9KHj*Ix%xb$?V1N5N6&)Kg8>NK>OR; zV$yuykK}2Fej+8es^brwM!Qa$aN{I@o01((L!^>V{Y+FXuUQQkJie{2jaKV>NW)f`9ESHF3e=YnhgV-HKGlCYi!LiLP>^}KMYRJ z#j1==m{fB;^A?)j>Yk(uUr)_qz6$THSxz+vst2y4HObz%{*(-OWY?`=nf$ke_FFAC z%x)hi@$Wa8RO{k|=`cm5UC&B&r+7tNk8f@B=HkFLbX}PmxOI@Gg2LWDS|q{6llfXk zpi}2)BmXlHOY7nCsS+HD%Wc@d>hHfEFztp-NX5ZrH5{73J^x<f0d*I*AvHi*&_Xq~pCJh_k39;CGZ(#qUQ#_? zpv&1>*>>5Kx>_R;%Fp#c*CFhfqUl__c5)H)G6I=mnh3&haG!|NvuL$oWhBddFk*l;{qq3DVO{nGC`z8_eR_FP zS2fJ+5~bt3*2$M^zb7O(Qnq(@k}X}VRWaAT#z%d;Y}J}6u_-b${?i^Y>~&l#u9 ziBZ^r_;UyR_ZNB1r`}p5n}vs$gUwyh&0D7>J_`SQ3gFkf(>SNwoV2v zd{w?5?I&KLWa)ohdCVPb<=zBNFx}<@-%HhV5Fc?@zRSNcnSSysMHwF_Z^`O$5e*h# zBa0wf(KUvWx5x(BbKdNwS?&Y165u2`c0uQ+ixY>XYYUQdeNBAPCwJk7BeJT`8ZZa+ zT&O8IwYOyVAYg(2uUh4pPtva+n%ciI9;ozK!oxj>6WAWnV}VKg1v zHo!sNa_(AC_cV~&y#E~dyt%oO67p>Ge&BQV`LVX|>0KIy%(~-QPf?O^q}2WC&Dp79 zYbkq_?_Z%baQq4WiNR+hche>S)7;C@Gk-$#&~_WoW|B`@k zULBWiJ$l#0dwlk;BEF8h(fG`;X7jp@`;bItjGRYD6eQO~TU!~m1Asr#8&U>9+C8FM?Mv{{U054Q?vr=N{!L5J|aMXRVVtN zF70r6r04yD!+a^oR!Nj@)R;c=Q^hvKd~y?V33|UuT)LmZ2xClne0W`iYvu59d7?W} zY%haoy)Q^U8b9jjEHZhvV$-7Xa@vR#Z*FZAc(%FqM=~1iSL!!e@0?jhO>{h9Rhc_k zLoBzkd$()5^~?2}?(Tqz+IGd;`5Uh8-C$_o=*C&*>l4aigy8Wxe?BS?n-#*MRR=}w zV?wfkC52C|^}VU%#N~O_d##JJtH*v%1zm?n_IQpts=({j$HgHf{}`W@{A^dy#U8}5z@tZ{+=YyTpB1x(~PQITq#B9Qf|4c87L=7Ud;jiEm%4Q!8aBWP`?uH74?MyRkDt1=cB<@O zY?lm0LP`AfPo@-boxRMj)Wsg+t1*x|ONEDMHH*Hf3AlokD|&v$d{J)1jikK|12M9_ z=>5?>7skLiS>Ee{szT@NhWkgGh+^k%&>|k!*qe0^zg|7?euV+32T#$?q9(nJZ00*W z=82|@yo{_hPwATj@#{nZ!Mn4_NyVIHfc<r-HV+Dk)cTC(B;Q z4!9;rv6#tiK&ccN&wH>P71)QG82ZpOU}|;^3t|oQ_Ixa%u?s&-G$HfKfOdxZ$Xo;?dq5DV;m`&TmGrS-{YS_AMHFX9)lh zmjzcnG=&G?jy0V}HRlohxU^Kf|k2DmT98n^y-0i#>; z`U|p*6G^AGJ-12AIH@>;3TFCYU`(2Cm9v?yk->AG05fD+8~by_^?N;yUkQvD8hh0z z%pcY>0`_x+U_CxvVs8+av%-6FtDZ}iL*QLWiZjW-s~ez+RVw@Xst+5CTeit|OGoH} z{7yJ!2VJF@VcPx0baD9WuaeCI%xCYnQn^Duz5D7te|;}o1nsL0hD{iqp8w7{6_cG1 zFCFcPoH}J^^Mh2Y%L6h(ZGoStSAMAMuu&EvnOW^P^C>*-d;LgE_X_WxE3tWAE)_r8 z&k4tTm=bEQTT%7it?vu#((Ce?b0}Ij-8?dE1hQHVBhDdLvx*1U;_CgI|5IDsDyLvg zd-xm{7J=?ix=#R6CBW>puRZ<5=^9-qabGLay4;;XEl~1noJ_0w`FXfqe5+Wq#UZ2G zm{ws<+M+9ruAef#8am(5lCJoZXdvJS+YjCE_qxCMZW=|!&=QSgW3=JvFlt|7w|XtH z*5!P*2uynxd*6feN)xzdHD8OEeOT6O0pJ>P8;pr5P%o=H1riiO8DDKpk2&bhL@Zde zz;*ES4y&|h!HYkhMB8{V0)J+_+HA@^*r?cepiNlW=6P@&t8~V!-0#5jpPFcl8#d!A zU)=Qg$`^i2!lznrpv3P%y`<-iOP~17tLiIPJqInRl)(T6M6Df8Xq%0Ec&X4b+3Se) z220bDoKTlVfGBdf$!vlpQG!R7O$1KZ`%H&>j7Emfi;X3!=7_)uYhX`Wj(UR5qaKP381EsClS z=vDSqS=va8;RdImghvm^?O4eUaL5sI3+ecm@VHp0d5<{7!5Gw;_1gnRGURTpeL{pv z>@L*_ZH3*+S^F1>RezoC(0sGV+tiQy>1YxeUdKOhN-*B9Q0xg_^pE&hn^zg?%uOpJ z6Q3D1e?A4L`ZJ#Ue{O%+YV@V9!8;R2=C%>-RJ4Czzzzo84XqtdD!iINp6@oJXx;F~ zc^W@m-7bU%>MRC#Kw1zZ%e*hVLw;?~O`0l%9W6HM{S#=<#h%oyv$)GK?QQMt+~Cz~ zc3r}tI~IIP9J|Y2NGM}y(HfKY6ha(?*j2{M>qiTynw2wJATRs|GrX6sd z+DnA*Vn3E<-~lpay_ODxct#6M-N^Los3U(0DDy)980}c8kv?#5@;m3+D^;DNm&|_k z$d%0FSkM8s?LY!+YofeyYXb0!7|C4YS2c11AoT6O{0F&JL4nj+Ch7Ia*oWQMs3#Q=xW%TCDV_*k!QqRt| zh-T-I$HkBLrq*=cT(75}-5Fln$HAO2-hCdM2Alt|S8{AUy=uK_n(`VUCms_fZzkCPoSBS-(=8p)`v>J<1^=<% z6FE2QPy!OYM5N=qt>^B#=K^ePv{ICJsl=Qw`Fyq#B9pYi1*&?u(qb_aHF0EIZla$O zw;l~#jMtC^hkfBSy#}?d&iJfO5M6~r-*~`>HaE24mb--5gJWs0L(%xo0`4Njbvx~x zojQTq9rpT7Hu5WQsGGC5XH-1IFT35q?xaXQ#}-K^(VIk3JXeRm^cw0?OlV-mR3eOt8og`d`X z^nl92;qlTf1Yb|+<`glx=>gGMyxY9uNhEvDffI0j`;}3qe^6}-H}jcvZsyEB=k(5K zBXxf%tDE!AeLIF%|FRYQ`tRE`t)60v@q}(n`)`qR9wJs?r)Khd^4`wBg$x*f+baH# zzVv;Ez(Se3CRMez!_A-w7-sTM+$0Bq`ahp>Bu;LPF9IXlNIJuUbNI53gt>ge$cW%Z z;Env(_2ZPAYJU=lLrqL7#qFJ2-3f7 z+`P`?+xdvjn);b(TR&i>TTPB)D2jf){uEYzb66`OU@UPzyx#lK1ZexDoHs((Jk|xI z=IgO0#*xljg9e_ryJC_C^}EcgWsdM2e4vG37orMI>reFTRu9KnHOBYncPdO8>ES9r z>3c3K+PPpLCjo8E=SKT}=mq%lzO|9E=F}6c9<|Ts8#|kByBhMar+=I;<;Hty>=C4rWi=b-6r+>ujxhVXAt>$ct`&-15-pH#=9^1UXzyF8U;04@CGt z0?(Uo{6}AWA|G>5+<23vH!XHA4<9-tH1xk-I<~`RIXJGQ<2CBf&^HCeIAp!=&U9zZ z;XL){k#)NDIBT*qHXB~HyNo;Q`eagXG8WUn2G2HZ+zUT%Zf7Q%cV6o!Q-vR{9*1Fr z>cvWrm%AX)H254Be!<{?$ECuEV>N~1AbITCi{IRZH>Z0pbJd%A0tI_?bl#n1dfRRe z#F3q*EB%62FZR)Qkg35pSi$zP{1iaJEsALW>)LuDzam|gm~f+iCTc4nUl;@ZWaLf! zDpvCZi`qa0=an8q|EDDbsIytMle_H$t}p-e78)Q=8k3Wm8$It0xpTegUix%e>|&j& zsuaqv-$b^Tv#8BPp$IKf3A5@ak3vo=>QnE^{(7^&8HCI=jDPA~O9RMhU_ax&vT z-pEQ`zQ^{FLGC&`SWMsOorv=NDv*9WSQ&10wxp|w-uqIJC#-iug{#G&fi)2Eu>gnY z3B(0aE>`W~eE?fav3ZxMdC)df_!rYsO&QQ#-f9_bcUA0EOO^(&J8vKRg zgVFoCwsFq)*(cRe;~6LEqdi5(A{YPu;(U!WKrMZUG%6X+ch0+{w3u^(^DY{N8vMd1 z^Tz1M^pXu#)~ifndi;sjHe-UrLA^(p`-LbSt!vpoi znTmn`AUrxLW!WtRfq5_^(b+AphRSuKeS!Z{+3RMeEo%VtX=vR>b?i_B=#p(T8rW|{ zRSpVV+wIR5K)zAf_2`iolh^ok7ESA}5@~*ac~ZF($=>Sh->&r8e7fW!qigI_*t3`( z-}J~`K*7!pb=a*$-ITzN;P0HcqWlj|dUW{A{NN()ry`{1-CY@HX0_T}>GE)Yd9#-j zUw6j);Bq{5y)qgU<@IuMK-75_;A0%@gBA5YIqqxY;ppQ;B}~d%f4QLDs31;8mEXqS zG$gBIKnlryOeL^B*>w(qc3DrG`n{k4_p^&$kN@a)i=C0}po11*N-= z#&QeMQ%%Ik@St|Fgs{!B2p?>XGHVHgBNYLr4ycyMV?1j^>JBWFoJqA}3 zdj$y@0@U{|pIkZ@%hBGiSzXF<9^vIUy)*c3Ui6Cy1?=NlC^Kd@xffgQ+@$~MSjveX zZUbM_2naHq-72bbp;(>99}|<{AZjU|ax%BG4NgqwM~|-!rcAIq4NyOk^oSSr)c&yR zL?RQ-F_0*51`lv_ayW}`iKS)B>(;W>UttOrVDi$JH+Gqgi$Mv^_p+f3v(fASz^lto zPUc;d0=5*zZjrpPfCKot7Kkg_*5d(dpg3(5pmdPXZm(R)T?v6ky{|@Sdot)vywuKm zMp!sg8$IXSA@>m;S8yCqrAoh7d(LuRK7D= znd__6_H{8Q-yVVDM5ov>%U>=}V(XdD2PQG5-Jw{wLlA?+wbJEd^D%Z_sdVpBHVvmx z0<7|c>QZ#}ZhKZGy$05q2nw4b-UYv!I%v#@=1!mv4o2<}Zr;#JShqXQwQYiV@ zKA$JFSQ3hUfFBRYVX!>2W@^D>7%^4bmFXwr{#9EC8023*0Z=4GTC{_8bf?+c1hVwQJp(ILsPk4OK>kjuh0BOwwLMxpYUB0`KdgH z-ILY-c!=Jd7FCfZIJEJ+dHv@)&O& zvPXmOY4*&ePA|KK3Kcr8M$^gBLaQub$NVoG?M=%!mFJ$2ie(qRnt$Aix(qgWc58|q z*ABmCMgm@%b>$d{WMDWil?Sa}UqvjHKyMt>9u7Ha%@8X|l45%tQBpT<`@^)1Ih)Ab zpFm}#0PJrk3*~&94{d8)J|7d|f*>oI>(Pia3Q-Tz)zD6$8}wuTAJELN4FvVF);!fx zOMSj509|k6Ml_&hN;?T(`?8aOPcL;YAz3Wt#kY&9I%A&~2T2nTpH%O@_v4CeJYA!X zosV`OftBB(FQIhQHZ`RH+oW;uz3sMg6cCLqQ&k`JsB#2hIZwC9!;7wyg zx)JT~C{*@tZ0aG?eJI+!=SG7OIUC;xK>Pro`HwtaN$kqK8X>uGxs3PqaB>@RqJo5( zQfR>z`Tw~-umgPPgR_+Q4nQ#v>q|A*R}2ucYhWv>Xr$du^YfBwl|?`ZN{Av>z)Q)k z&}2eK%iDLJfuv~b$;Unee{_Uc_RV9=(o)94Y7f~7EuG$y)4J2v^?gTBx<_&|ld#cR zaPMi|H&o*lCb{ImrGp(;ug%fu?S~$zJ2MDp)K~3!#N7(c!pft?W3)(yO`obOwHdBe zH>qwvc$!WLKmI=rQYZDRTblJNhj{m^km|B=MOr%*}m2^T_f z{+IEvH@6|o^5s6>%DYy0q6>2&Yjb9G6{GAigLbd_0R5g z3@9lQMk>qql=acQSWs*j`jeMCN^5Oxt%pae2j}M7TZhpj+j8jd^x^zFyillRZrORd zmv@LrE^i1Yzm!=5KfbLZ{*KpBtilJ3PRC+pBllyYMRfFev=^9|dxVJx4=%0ccA@15 zPQh1YtfvC=drsoH-~Fmk4zPYw&g^6f;JtB=E7*P8O{))Hop+g7MMP`jCfN5p)u{N0 zVf4$JZUGULDIP-9Xg~8Q^rZ#cgUMEP^cX|T=Gj)m8Z8cHWl=li??lZk2OoH_dCw(a?-x-VmwMYh=m{@gkD2={%cFp&K;osr z(tnS~n0tK!=To0&{cX53*4k88CW1gaL2|66G=ulk{Dv68E-|h}f5hC8HLf9DXRRf) z{CKhsXculm>#Zq{_*=^BO+py-86Nodr5`^d{~MeSHjw7sC5XW+2s9Z!vXRC-rsu1M zr^ozV^+)+f7Zh#aV{m*5N;%}AF5Ujq#}8A;!`cniL}kq}ZBL4)m=mwvyDnLiO{NpO zL!m$<9ii~;`t{qVIbw4&R-;@QAGa*-w5#48%mF3`tyrbr-uMSg6os-n!H%Coa!59k zw$5#tQiz7tczeHB@-B3I4g~^$v`YI0s~u5!&GA@+70nCkcn0p;MKd=V5|LQudO1rX zqo|0P)r$c~ssN|O_*kX#h=xI#2TxfU#mi8snx)FaGO>qo`Hh^Jjr+g)`Vusem(O@Q zX|NxENGPfPW>G;v$m03q{#lHI@!yi*U&rJA*b8-Ug#uy?VGy_NFCFhwwShWTH;XeS z)%l;&>IvOnC$8X__hrQWdOL(b4?^TEtTQ(a`GNw2kZx7IoZ91IXp0S)j!8+?vJWT( z8xyY=OrTm-o^AIi1H?c^jcUpCTG@Dw&(@q@agSO#_cBfbN*ZsZWbdXzk#>nU`wf*| z3mWrQa*Jstj`i)b2So{aQbJwGJA9;Ky6*76L@WE?FWgFMiJ3*jB8Boqn_;(e9Mz&- zv58&f)90u=`&pno#>t}Y|+mdp`TEc783+S4?KOdmOV_Hf$47XyQ3e) z!pec2gZWbRM_P$7zd5SEEL~9LjVFT36z;=^yT2AU$480jX;Bu!&pYEU7(o-I4I4Qo zti-zNIc&DyppH@Eq#TM>wm4>;qTFQ>R52syup`M+KWT7vMhPxj z;sACl?hp%VF*lH`nTC{Z7nb1FK9z2*Y9@w_2i|hU`IV@N^WBs)w;Myombh&1Gqm>8 zq|I)EAiT!f=uz*DQoNUs%5o$=OG=4v=9DT5X8>KZPqga;(%y*dL#HxWG}#_$)9jNB zsUt-wCGvOvXRz}&z5X>;@m!BWbAp9hz60_2uF;aBIhM~HyHehcDab{)a(eM>DFQ_V z7ft3}xq4WW&;>u+q;Ti+I*1~*%W{AdhA9#28j7LM8v;f*zVDvSn2UR{^AyaBF8DIw zBq3z=eO>xj{wgJ`Irc=1o(PB{|3cFGvB1&qgnvzqdgDE|?v~E*biRPD!HP-X{$tv& z#bq_gewHM?{k6C)jvjudc$%EF!``5ag}mtzUIitSkttABBpBuA;!_kT==`q2@Q6c` z!3xA)$|>b6(O!%KHR<~YrsoZs1h9qg7Y?gaqTQo!o*^++4Xsv9xEU*W5#? zmRcP`-WRAJv&IMc9<@m}r48CceTHv|^CUj={t~T78f(%6Gs|J$_VLg(hxI1~c-1F4 z=g6u|g%J(gukQQ`tjKy}#o7NJBsYpcD(qMrS&B&vnoaP)c;5#Tgf$aK1t%aElB&Qo zUH`S4we0#(^p`OG$dB9K1UyAA`)cLHL&pJ zoH`E9Fg-DA*jqnqM2M%VeEvPpGI^O-`77Tn%LEX9^zc0$Jgk#d{bpK|?#G+SNs~$v zi>_F@-`!JvMzhK4MY&Apy0Dd0?f()`h>x;0g6o)OJF!AoQ(hdpVw^sohJ4Ffz(YT2 zsI+BABY!l)t+H1fSf5wCbZ&%ZH;M>D-M}+OnK}1#l}t|8&k-Ee>>b1jlgj(W7e+PI zY94i_`;0sp27R;$b%yE1LZdpoITqq{`iulTfXXi~(zYW0h?V7}ey<9b@SvaxK#M#0 z{OZ2Xr^*rb-F+Y(?u(+&?fLZ6!KMZ(@mlcx_v!ws#2UJlt$lWRKZS$=3P@`I`>loWivH|tlfZx&8PV)s1@3_?bPPmI0JTC zP=#;R2(>q01|<|?mOgC<`5fP*rh4NAi>hN`s?qp`^f@|@8+QKKUMN~m3UlEfeC_l= zahXW-vP}{=9AieGEvcbAdf5vsw4^^nuK?9LDyyl9DTSTIX7wAhp!u33eVJE=b^lAA zLPS|VWYL%mlS`-mtn^b!VFTZN(s@5e1yLYH#mPhfjE!KVP+C#u^W(z@Ho6slTixeIpCuL6(qf~~ zkY5j5cf~@>=KFl16pi{aAX$PqT+UShMFlunT(=&b){ z!Kd0XV^tv>*OC{$)Ve{7?dt?dIyhjO6w2xL&5;uSv@o%!Kc4ZFVEM)qC7j%Tw9XWj zeP2z;s@(BpAh%04F5WvbY$QIU7HlGvF;FS;(v{3f+Df%PKK*}Z0ppU5q%mjnufG|n zRL1#w?{JjubPZpfZYyhy>fP--7i{Wk90)^>C3)_Ds0rup$b#88)eJW_YWgruS35nU zWDYNCrb>CWg(B6XW$xIG)R$|!uinz~W%T0&`bcXqhj|yGopqPLhdKGzo&C^1rwG!} zz?_q;YW@359(j{`o{>iAV+WtHks6emj_fyHF25n{ui9F&q~C6baPbn`AQ}}-KeXQI zFsl^XmA@I}Bz`h`Y|3l-8PGocFHS=-U`t^0(kYe8_6Dj{B+;uf)g;BWc60olw((P% z*XxBh^Y4vKD}nWMp9>l3XY-SproWkx(`cbe_``>S!Nyidz!Jd^XXYfR#xBQ5;T^G;}q zQAzk6V3K>k2-C-UtG?fB>~KA6uN;WLTarA+oG;Y`VQRbf-bN|QAg(GgpG2G8l^UDh zH>ya>+-FG&-NEv|nOdI+TvSN$D{lSqC7L|rVBH_fd`P6*4W0gHs&1deio?7YcaT(= zx1xOP;WVof6=j}O{S?u-nE&lVF+XBL9DRqj^O2TR%e~QpM#E3`GcMX|0=daMVycZ> zaxBriM?LmC>ey5I{>r8gZoc3DdABfPIIPVP+>I%%@03i=zvm2#68hCN=c z7Q*S>HK{J&CEcF969~4Mj9ECB{YzWi-P6w#7n*0Yug2(5eJ*=Blh~aXY{4GkRhOaj z$(9gt$e|tq-W}}>W7Mu6SpD7iP;RNGjnsa}u_wV6lL9YBk7cF^EoEMBruy~-5`q+S zHQ7*!xy8i-Tg6>P^9m|I9N_q>EJWz8y6n-e2UzroZ@AvqC4QgyI3>Jn3JkIoINoBd z9>W9zrya34VINX8C|84zKU4<1Ic~OeCrugF6~TOt*MF_E_$)&aE0rue`QCle%=hf^ z?1`czUgbP_slW6JpG|R*NG$DO}P4DF=V~zUpmR| zlwjzp#amzh5l^qTz%9fRH{Pf47n9Fc)y9Z5K_(hpm_&zEWbH9FpnWl>mwJII2XRQQEbSuYpQm|dO!We=Sd;v65_93yy{&ARc`mp@h(x?vuIiFTj1TovhV%=j9({{IT;fOBIUCb<%pPhFYv;C8mIpr`%Y|<>DgY4 zx!^EcW>U}NMT@(fF!cHa8QqY*nb6$OF-|Bs1m?pOO}}Qky^XE?k(3)MC)#kKO|8~_ zmd_4b)S~ymaj(x?+KU0jQ7S=#4qAh3n$&NPf<$i>(oeUu6>sHg=WQ^8+n%d&HBN8b zB4n2wP|R2bddiS1WqY>sxZ(KUc&Ek9W24Aco2%<=HHtEL(O>#th;wgT+cO*}pKC|J z9B?o=P^{h#3sw`)p7Oo)3(EKB>1dn8uHl&*`T?{arS z6GuLe%jqWLaI~qRmC=3CZ*(Xr6KY>t+p7E~{%{tErYDxWP{;DOk^ef7g5*sfgr+3Q zBV&T}Q91fFZt=A*p`yxrK5*6kIcRi&n!4%n$?dLCX)?0_24~Y3#DC?mQUM7ZI$W4Q z?XG0tF3jW_yd}^`%~2&~Z3jOcdV?_NWlSVTRjTTEJxMdsiZ*^z=txr(Z1TmbL3*6e z==g3zYLVs-56%!5zXd>GG9xp1f?)z`ZT06@m9P>mf^n`zaRL*((+TuCD1Wx6WjmzT zOSq^LWf$%4r@XQd4Gqpl5zeoGK5R5Gq*hNnZd4m~NWvoKyk8<<=53xJC)Y<;66+Vb zwcgzz@m@QG1~SizdM%K(cpO%IDIsAi^aKGKaN{g7Ybdqdc)GRTtnr*A4>dW+VIe#3 zYJKC%MYwCe?x!A?*%ZHrQ3aAg22&ly`031VV(w7D4_Vd{yC#j~-!~1vx^|CWCPA|v zlA^Doi26ZSuMTdgaFTVQ#P`_`ksI{4uBq;3V$3$R8W_FgC96tKau<8rVX3-D@cG4h z`-`s)>2PWST>jo7iiD@j9j-Z&g*FJ3&0k#vLa*}udAx$k26dF0pVpXi9HWn5jb)6o91uGCa1lak{zva3Kl$WbxXaT}DW#7-s|)mR0^ZbHYBM=?5bu zy1%1H4Ha$%*%+p}KOs_m>kow2`h-fOCx;Zw%vzBLp@Cz>1{WP`BGrXF%+eOyVX){Z9nqu2^Ea zQL7X+D!=%K~?Il^$yVd3w2vo zG(|dyqQ3z*uljS)APf@ zasB=S$~v2t3NP-wNLS(ig|q zTFl4wkSGk*D*DQlc8iTX9pd=CR~jZp-^rnBhS%@L)o(w=pWmbqQ+)QHRsM3_KC_(D zYO&WS(PU%tzczenKaQ`KvrN8w{&4vF~v^1MM?A zm%XZSt+9FN{j+OklAXSwrn$!DLiWb$q35w9>PO*`^R9+rH*sCt5^^n|#D{|Vlh@bg ziUKc)bgc4$1ONt2VpLL&3F!v@z|FLBK!}HKK~f~EWB5L53>nzfSzz#NhlB^Rqnuoe z|B-@|5N{25W0+8v`ZDnGno7!s+!}4ZfPeD#v!vd}T!N|>g{|&)pq;L5-)h4^jiDfR z7^TD}{HMVfxQ(Cpefk>&4hf;^PN$@7@Iz$65!ktV-P>H0X+U;RNT8C+=gefgMw8Gj zQ5Wu(Mzd9z4KLB0mrkmWnVJ5W&xisV(=`Vctp-YD#Tl#|J!gjfI0tRm*Y$|{Y+}2Z zhhNqtchn}op`KtaTEr)LsuMggl;m@>`=%i-F-~PCMTYDB5}S_o6&DK-?O`gph)ZYFBbo`iYlSJ~*(U7OHg6M{KBE!r zM7v~82!th;eDAD!kY`BfdO&c%thqb?hR=AgVn7>7Zf~)jrq)D`i;7o7RI=u5>-#{5 z_jE*R_>N{%0l5j~-$D0?iq13UQmfkYT`gYo()kp42PAp=Kk7yTAvvKJGzn~G3yU05 zsiPWoq~daubj!$o(0dJSud7UlvmCS}wTXgnTWj;DiJ+rY^&X{_BLTe_ z_+Ni1rGL2WfW2F|`-q?XuVJ=j)99%@;@WD&jtzy^VJ*UxYx{r-LRhqRx^g&t<;vl2 zNzecZj-pOAZa`RG8At@Z$>YyQs2ESYKcX8`rJI{NMnn%6nAaN~ZgB~*yR^I)6CJ#L zbDkT%mhAXnEjG?6GIrg?>)QG67f$Yp&TQ5jthP#}w0K{3?mx^5RX^@S-nzI+yyx?5 zQAn_unM;)y%D~09yDD;ZuBVHu@P!~g{1rvr?hExlY|%2ODcR}SnQD^p{<*Jrq@K>X z5>l(qE4o{e8FHeE-ZTW;#9B962&(*gZdx}F1lTgv0SX*7)ibfT{s9gE^|XcRR%weqL(ln{MNqNI)%=;G(bn{ zwQkAysD>EzV_-V7q^bb4R#ZfA-GYN%(DEvYmzYPgx|74clA1r$Tn*ICCEPW(UlvUZ zEUpZiE)A>xGPK54{dV}+{8~y@EsBC)Nm~5|*5vL!yX4=Vc*7{#pwe~-94efdVJO_> zOH!j_G-<4G8p355MK-ZE;FM-7S#Fx`kiuoFG3tlYD51n%jzCYW{RmVopYxrPaBz12 zjL**OPg42%D6a^qdR$hJtt!s~_=lQhWFVQOudOUSHN6-e+;v8^%v+Xx8!EdA{(-)d z*lRCIa3D;^XQNt|lrXi0DJBlz zh|lV*l;Cj1iJdjxAGaOeY_lPrYMG;Q~{50RyNZd~+S6Vldxvninm9^9PW{%et>^r=ZH4OO?U;Ll-D0=H8e z)i_JaV!r+pgH$KQK@MRy5B^Y_Vw_DS&8PG0V6(?Oi( z@!7t|N~nM$_Ggf*g2&D<=-ctb#_I%@A<1>7q;=Sbv&V(mn~PWViW9_&1dm(FI$}C1 zlgzv?I2>kqj^^6(R(HLp8BuDZRnDVX$X8d@I_0aIkkH%B#g+}8b$IvFNloNyRBZ)F zz}<*q;8t8!jFGrXTOCf0MSSr%-*)1?qmD;C_y#8d;%n)yVIdao0hDrTuN!swTG_GB zclEj9A0onwez!a>w403Fh_ec1`#wTiB-KurJukB0Ut1mFUbUkB4;HYvQMS6==(#yu zFgDA=te816F_FIt`O}?^UvJy}W-oM(eqzq-{nPue+c~u1AzwbXA0)7}L#wK0!DNF%A`H z0?DesXXHfg=hLlUS^Swws9`;n#!5WekO@p4O&(RXcr2wf~T9l-V@$ zg)Mekw+I%}WnObHvXzoSGx9w4Hz#MFe1o)>PA66qpril%tu9Q#d$mLs#6D4cE@JY_*3PU6H^(0xUUUO zrV!mH%Q@M<9r~AjNg^nN#6a~15 zOej#arUF_mAr}~R6jQv0EHD6002Zewt2GQ--ZvO8#n0DU4mkVFo;yWoE(+DmxKzED z1uRn}gV2X66D%gHr?*aS&ke2mOr9ZkSbVP|f0yj3 zZSnnSq1tp(qk+b#&(QVeLyq+xp!5tQYs!8Sv;K-%V%uHvQhCfVy~+PL@}U`L;O6K^ zIUX6@Edy9-CeDT|Obc#trOw@Yq zK(y28zNV<=RUxnmxWl-W)0TXy&)!Yfcg;FISxBKKJGn{#Bu zb?HN}7mUpPYqs0*>^RvN&+E#?{ZGsD6wceWWyihO*P-nD2@i)i|Nc5!-{*b?hR!=1 zL4#ODIx@}@*XlEs^1NBkJ3@&c=Q6hym;lbQyGz9FDMmT9GDwo5Jo31YOx{Zs=*$;!jw~f)fsso?9 z<3$=WGK6`5G3g$%kZ7L4z1D8^4NYC2hhUQr_4?KIAp=V2^W>K-?^;^^xjWjJ5dbJ@$M$t&pV!QS?r@D1O_>b@7sx*y*bbCO|#U0k)>YvPeLq( z$Y@Yc@EraO4B_sNY5(dmUrhKUCrXZdTJO9}!QlJDZPT8GsH=%3ynCz2a^uaX_n3$o z^SE>RHaf9f@qn%Q)24;J&ML!-PsP3WTSD^b4L;lWy#%`_XY278DnFM| zMeSXf=|TwkI=8C@D|f>~*rc3RU%t4G?|y?wza;hX@CI#JO6JSXe(~E>IfYCb$E=&G zMoOA$0-@4@N4~w9o~Y|#B*k8xPTNh}s#JHDl}4(&2BkE0s{DFtoapA=Z(|0$08P8@ z{XLne8xH$4IgC9{BqwJ)N!G`SRp$4o9!ktCgpcYQw(9?x@qeMX^Wb8OY%kX zMiFRj5IOTi)KI405&^ng<*VZE)e$yC-5Vydmq4~6MfL4oUr*JW2|){FaeoR&??Q?BoL*UrK* zk^8~fqaMRjqbYx7z4cI4@qWk6yeZMm;XDLzcDIXIU&uW~?J&&cW+^PE$ItOF)$^Wc zoPn~SzMin!#a! z;;oJPf&jT0XspT7pIsg#e(=nECf68Jre9Yvvr6EF%j%R#j)I^L6}S-)NaQ`qZXx!1 z%(DDIev7~W`|VEe+RuJt{w|{1V-H>}dAv2CR~X~`EjhI0*3W;jlf6->^y}s8{unq) z&f|g!_5D?nV6$%9^`W;8Jm>7ucz%2v{maQL+@gHvca3AydJ9o0zreqV(Mrlg38`665_6g68w&Ju{Wug?dOS3QCSsdRkdXXE~6pRZ0 z^SgKA5`NuZIjWbw;~dC?vyRjwIaOlv%2e9&x}z&y06&Bkqk_>S!ejXEaWsbVSdU@ukKd z$!NbrAgMAh`M$45rul2x}nh^X-Qt;!rIFnu^I5w{V~C(Kk~;`PoAE|as(cCKbqCYIkb6p zfGkq7uq5b#{uvc?cUimUw*E6PG>VYRW6h-A`E;h#Halx_(p#A|ta;Nx$IsWC;u|+N zGk4qR8SgVH0Ux`O-COTF09iRX4h)UfZi!hhbQGVH>5;V(Nq7p-&s*RMkJJ}t38L*= z0K7?nYVXx>VA5r!2|_hpY~jgHd04Dqy+y)v(J79g^OOoNPqs@4VS_8^yP2gxIbUnD zi?^QZHizN4vI(csRtQpUHRqIqgh zk}}Eb34YJE6B<78!8U7CD08r)ABJPRi*lcq`Gj5;2ecUR!J4M>$^V=QOMEa%E8<{U z9TWZ&*K=Am>P_V3S(eORAX+MQl5l9ICNHZDKz zxlO1BRfsM{FqTt)Vak-ymY?D4O-XF7RJePq%;GgbP}f}GdiIQtmFpZx&t|4(jCUJ} z5?;-FA86q%Vpf7BM7uot*N6FbbdyUb)@OH^&cZraD$oWi``yQR4JN+=E!PFK} z-yyO8s6qzcUY$*l!yOD}+eNTYW+5uELDVUUV|yzn>Jt(!VczX35q@?N6ol?(&=BMl zDlXl)xpn1-08v_n{pz}McG9Oz#vWt}>t3nR%*07~aYR#`DaTcBFuPFF6uV_DRBAKd zu6EyA-EqA$*-fW?;hxU8pCawl?sPo%rX8=RU^ieKPukaCV$pOm$=21y=Y*=r((C=D zFA3H=@9Xk0u~0zMj$zdvY~Xo7+oJh4ka;Kghs*NiR|(wA*KswS1W!gi2Z_jg{ArUU z7^Ou#Vc&YS!32mrCoDd8nul{P=SkT+gYNnJzV^K5_)UlcOl=YEQN zds(=dItEZwRS}xmoeHj7hLr^J6!ZG483t>9U%!pj9~J>$E@q3g;}SEkmvJ}0MiLx$ zQBqRc34GtI?s~KzyrFVxliugFthK(3!{+ySwx72S32n~Z#sU|4I7JuxUSEAMGsxCm z2k!qYaQ|n+7`k5gx-9pXT&7jaZ!7O#7rCm0C(jV46|H@rcJIqgWb%(^p59?RcRUY9 zEUtUmiVeCa`vs>UFZ^*Q^8HLe@ELb8>kPcf$IJh4zVEtekD1Bmaq?HTdGqacm0{Wf zmG7#$n*WWFl;!$0^zHWAHJiQkf!0MAdv|P=JqA$EcoKLhc6lhlIGs$dk2hF?DX*^ z4h5dO-;ZCIa=>FGG%DJ4+AVb$=gTWz7%0n#NUSL`kA8nc(m1l%m`qhAOsw zAJj*m*Q5QYk;VRs-*nnYi4lEX(v-oDjOAPUf>aOTMhGLj@%=k-r$Op9SS+~ zG90u&L?BQ~X67nYRp1C&7H_hmiVA3vX#v5{!g?ybOq49>k^6g}*ItTA#Ja$3xb++R zZF%woAL*~-H-Aku)pTL36dv-jcP^n;$wm>9A_6q;l@R_TUZ9|I-19S+0u3=+Y7k`Y zODOI!H@}?V9_acv$mcNpBjcc~1=`aH%UG4=hz zSFG%TCN2@2RuKLuXy&&rhT#!?~0<7Oeq%h!iG8Vo#6`;o2pC7iA@zRDEc!WmSQvj1ZqrI(`;U=RQE zga1q<4sgCEEt5o#7hS%Amjv}^tc;P*0)gv5nr2i@o=E7mH$#8MfmuSknp$)3Im)35 ze?6=!f<(hA8FH+~7K*&yyH;xUVTl7FY~%gctsaG~v{0S;z81>_;nmi=^(7fW_Qa7T zu_5g+Sra;%_18_`>Bu%QewA7I_#8%~F0*&ArDWAa$+HV z;JWYT^#a%aqxoqCIXLj*KPpOK%HjhG)7SbR*H)mRKm4x^X-qO;bXjc!dW-%%6FdD+ z{NKwutQ&FgdT&9RwS0HT0DbEZf!Upqo>PV&Sb_yK6<3#}=(S+0U@61jpNLk154hCp za2&tM&(jPQPsX-n0W#~<*7>YRZL4oKn2{YJHPbg9Jf<*01LcGwnj{9Uo>Xs|zWqU*TVqs0P|P%-V9pq;#Q)LrKQ9lIpUKA$%QdiQ z+00_koF&LfUjeyhyPYcVbTDplm#HV}#pBlUJBr|tum2Q@2k?ywy@G+;ze76tp!Hyg zu!K<|lLnr2(N4+3Kyr}r)`g3|F%N>vm1?nN-gx!=+@5+hUja)l>Lpxd@iCh#0e+7SN=nI#@|w-@o*dG)g=I0jbm=t=-q6m+p9G9&M z)s*~`)$v<`NbeWkCb2edc=*5ZRlToPGTiR{wwhvq_R2L0(9%X3h*^~3P_$E@m3p@*yF7~tqKZt4M#S%6@ zI8PW6(>5W=M?*HPK;Dn>vM3IF9q8-}pgpgeiBV-())Lt9yS3sGHr3 z`!>Dvp|NebrQW20+7V&vIqwY6q5c0x3b2T&#Yx?iV?H-tn`>upsm$3`3v)XePOF;_ z%_ooo8VCFKac!w zkmv(^dr!l5MK@DpAbd}J(|}1;BAH=*yhdeXHJ2EK0HD^zyDm;jDU4Y9_uM0PlLb4`cfk9B<3#^Kg)Hpq7k+JNc-z{s6606 ziB(s#o}9Gd_}rqrt=aj^NoG|pG-;Jf*#5@Pd(L!_gvYzLKQRcq2lRi*-R7~_ZV@2T zH)K?|bAm(rla9QhNNSTpvZ&yBE0>WWl01*T^`ioxT?C zxTB4J@A_p>JAZ$Ta{i5LWPSt7*wbN!sE_FZt6D2trP$qrR(}xG&e>=@)CE3nn!zZa ze}yoN*>+#nv6!+f+OD_{$tLIGAa$0eRdU_=>WMPetvyySy5;5Kv@5b=_eBk%}*Aje_y5&I>{ME@2L_)_|5LFkc+T6 zY_APfHTqO6$j)2LLpwOzD}wOSNoKhY^!xyXw%awTB!2Zrs-OuzZ9P*9?~yUg|DtWCamFo&a5 zuA_h17fa~68Y6jX#YeB2!OP>JqgbQe2VL3}39E01EAkyLXEO>sni_O$ZA!55&*Ww6 zk@*x#o9XwR>%@sPzJK*>r@B@0@YcF1yn|ukyKeUOo3&l3R&(ZGpJ%#@WC?>c*>7ON z&VGKVw||D6yFd#tE`^0G7^981yoi!PuqK_oKIvN3k?cdjEcz@7;n)f|4 z+x9k>l?{%hCXMqZKbee*GG|=h%R-eqk!6k-Un1Futf_pT&0PM=ISk6jcn(M|;Rdnx zEn1$={x}O6U+s}@-uzxpHzQZn<4uB?zNE`)I;w#n7Lj{$xW-k;W@E-jgQHBkqJFBe z@QM->W$%!|mI9i01@Hz290cKTL#dE*t`H|tEog@&ZQ0TvoWHZ{yYHZokXR;CtL?wX zg3A9o8t22IRayM+6qL*TfE9!*3 ziklxG&^}!*pC}QKCZ>@$IBE{rQhMwwvKj@PS<@6n?La}v;&~Jo>NOzz`wV`nP>`8@ zw+Hh@JVkKh_L4RkYg`vlshXG7IR__YZW+j~yrEbKzg=~PIP@2Pf73VK*L(a~!(XGH&pwW6$xwD!>a#$iHTt8L6h)RkLPh&w& zTmGXYj8*#+ZN#WFfcCx?Zj4mABA|aywQKXmZ3w%+RCu8SG{S!&r_s(d?x}|{{)F0Ml&Q3ln0kK z&#q5Z1V=?@^-X8~vLq6nK=Q~y6cg$c^G&GlW$vq~vDzoV4j~`|ZHqz*L;Xfj$aSW> z%ap1FB`>Dk6zg%Q(vvNqbII&kt!L8_D(HCbyzg#pvB%C^4w4vUqf1Xfc|EMmQB>e@AVoJ3pnuyS~(O~<`d$_NlAQ#xF$MJCm7gFo8-I9CEekS1Y zFyCJN&1P=o_lWP~DFgSfCV&ttN1uW^Fg$G(sHUKPD=m|fs)DTeqXW0zLZHWD>qnj+ z>s@|R2HpQ;Z*=dUYNY9#Ju+k6C*}(pw@@OT550-o|1}Pd~M8N zsu9c3@`u_zYxd9JMXY+FJ`g?PVOi+UN+eqC4wH$e(|@s%hr)I*-|_k8Wai44R@U+5 z0)>8*UGH8VYv~i|#{@4sI@!|FXG9HKxeI}MI3=L}#!-^kY0FMRRJFZY^sjrAX-K+$ z%zru11imQPSVIx3u_nc5ARSMoGXSfP90ig(gn4onRRLPPo7P(kCVdq2+W0 zbZ-OeT;mUao5uPw#(h1GXeQCBJ$zLwStw%A$;slS(!LciZqovGU%{4)mZV6O$k*_z z*Im{TfawekNUq6c;fAYq{|^?xh)=9t6+=(@AT_T7o-dOnuAudu`cq^{QN7u4?PT!; zIEtDK!Ex8ZWOt>{QS7QvfL4(?;^}?r3<}qVm!Hqc-Z2sG(C-}alusV^frV%*Cm7;2 zQ`;4zUsHYTON+R@w5D+?nvxFfP~8v_)Eje`5!HvevVsF&#|!U~AEy3&w47F99=UHr zKQ+vv+j3dp1$!*Ev2a#pzU}WAIwUGUe?TYPEpSAH#MWKr{_UN^1Ifx~Ec3$@Y zK0&JcCVxUCl1O`8&p{%JW9yZ1%o9$Z=<}?;aaHU#i>cl0U%`F~%I5W7{iUxAi5>_` zxlW!K`fl^1eBySeBQL~Q1`|wPCZZBdtsy3p6oNQksnS;(q!yM_@gm6E0PZ-U2ME}i zb5tpVtPTSvq{v_1;_jsS(1f`VKB8C&{!UvFeS3f6$S?X_Am+Z3UF5Iw&$)GE>BnFA zr_<$QWv`&2%dy{41y#a%cs8cU{ufA~pv*M%i(QqdwD&jC){8Q@@>Z-VuRlgb4rwoE zLpp$MBpMSoff5q1C zJlN@T-sz3A@W{~8|BACQjG}c7OCF-jry(iRalXD?S4+57GQMd_g}B8pTCsJOoy7Vh z<+u{QUUJ;G%)AfW7EpMvC8Gv(8FDU)x zA+vswelu}=)7yAhX-xU$BXr|?!^@S>R8Jn80$QA>(lR=xjhr*JXdnNEabi4ZhX22C zFZs;n9(-dvZ=j)2JbhFHJwq)*rXQb5#HJ(7Pj{|4`3zs`zAQ6{F}m3ApL-)p@$hQc z*g`15N|XMofI<;Je8*W5nU*NGTj}ts++ZrZ)}Hstu``5+;+;^Cv~9n?T&u`(W7LuC z%Y$WYba$O&Wyh7L!HQ0hlwo5q5%+-ig40_$Eu_XsTNGm*QR_vboxTM6Vz9Z3-fgbt zCtW+(9!aa@r%|cF^sn1bd1r6w$1{`Qe|lQ9)*7=DT-XuZTe<$Mk3nW}KQ%!&Vuf>x zsQ^Mw@Ue^GNVhob9UyrBpC79stG2l-o_Le#q5olVsgH;;Z6RZHkZ9}2;?cQ+T?0j+ zp^ybb{Fl3+Myh$tU6d}Q@pkT76&O2?VB7o>xnDb~sjPyXVP^@;`+ZQ*c@oDes8<(JjBe(# z@QnNnws}hUog1>-zXajHAMQW96nJ{xm50Uash^lKrOSYMQx}jNYDTuzAJ7*YiSW^; zOhkSB!5rngMnFK@e;-AWYkf+@8!Q^{ws@VkZn54tg0-3a0ZEiiD7Nu~seSqq%JAs3VoesYehW92D=)x0-!k-K_P7DCBr85(tJtpIX0>GL&5fK zBxiBqG*S`E&9j*cDSt|sS+tiIhpaG&y>bCHy^>^YLkQ~38~1I+dyM*<_=zn; zbN@SrU{Ut_EpiJa-fYLKh!<}<1hdK>x{v>RXlZQo_xZKHj1Zci?Rbx{!>elM6!#z0 z_#I^o*}}EBgES>6}4{k$DZXCW-S#%ZX-+>1oDe4-Err3o?8e5V@D!h$%b}* zsP8wJvGZS~4ce=8e#Zw?M|`iGWPR$CkjKh4SJKguzr`DZril<=<=_Y+SGKUKUCPi~ zp)gW#;0|HvZj-t8sV10xAix7l)PF-SG6oyRfA?%Y3V)YuO1!ONB*aK^OlBbVH1b0k zm9n!Fu(F#pC-I$N!T*{urES2(E>XU;3Z9j>40hi|T1N2hf(9THn_;7sMQ7R>*U=+|I8?nLVWQVm7nvZFl-uIPVaxb0u+>h&`~uE*v#dv7s2NPNSI3<&L~TkecCT;nwPrkt1h6izZ{)T6BH ziD2brK$R;~=CZC%e5X%4?$ui;yCzPUc~HZ0n*+dsk$ zK>Ofi*&f+*;}U47UPV-x`0Mjpqvg+J^oo7xQv%DP4qW-|JaaURvoyrnV}DWs<>ewO zk?;$WVJk=jV$T0LR=+)@X`Uc#QjCY#WMa`IHHZM18iX-oRDtw5zBEkdfc3Y%4YR*Od($^}M}Qk-b>~ja4{4U!;iZHur7O?A0B3bW=LksJPQ| zLX(W)F~I2rD7Qr$1CF^8y0q)JW#y?nfz{<9IfJ6*+OlQ}YrApbM2^^E=M8loC(>;0 zk!^;^947BkJ{kvtktmyUmKLo@Kzm$B1v?3XiYgk4tk~F^)+(LUVRph_j}q%ONzK${ zScMajc(sQJr4;>XN>w{v2(1r{l7yB(CDJcgI%)>)nK{0Vy8n;G9|y59qiP1C@9s*l zf??xd_Bnu_7-5|&KeN3d-2w8FxcO4tMLy`#GQ(aTPBNj6Z9X!dxehA~yu*qL;uFas z18k|I3&@Z`_ZNBtsPe4XJkVO%t_dDY5nx&86klI8 zkVi$&*%zJQAEa#*A|f8{)+OvXd4w51kg!B#Ol;|Qou$S4A|(h#qZ&9Qn&7l3-6Cy? zedusl#pbnaj0^5#L!DJS{KoL7gmVt`C1`H9Af62FSGg)chF8Kp5g6BVVI}f`6^N}r z{X5q*o(7Hq$Do}b%Vd2!2dXHLm#-R4Uuw5uKsdozsmFW>p-qWuUgB>KVTRP!Kd3b% z7eB=V#6d`TTf?5|tzDhn1TDsf+*o@KB92Iq#T~_$AR^9<6mq7_2T6|jVU)oNV6!#$ zu6gTzsb8V7=@S1VYFH$0wdYSdB`i9Y#D=gcYX9lkbP8*poRH$r5D%9}BS!+y6e9OA zgegN;#7MZU>92WyY&w^7Qi1n)3u+}x7R9b*5g2`Y$WL^0<{9T7n;cL8JX+U4d(gfj z_q=UzfBtF;)#-He)9DDtLzm^cpWi%n4G-B<W>}CX8#*K4D<*Xp@jaCQUA*AzgjWN#o_EaigILC z6iV2jx%b$(oLz2;kw3nwefw20%aCELs5T$vF&OdUcUi>+R3?q}6cW#{`yJ~cAa+Bg z<%jf_{bm5Bd!%Zf)}T8EvCJHCH7wL>-paF_a3&wn;t>bI8PpcA>hLkPy;GT>p0C7H z=+9H)AulmUQvVu?z+);^2d8s{&16-B$AM5De557^SMI_IVt)RTL$TThq<6c9&C+#c zL80%z{Id{B6Y0htivk04yVOIJjdq2U(LZEfGdGi)T8E1)m~re-%G0&r-tLzeg$yzJ zX^dH1l9${{!_NDt>Nfi-WrnAjVz($H1A|jDTotYc9o?s|90wRc|5ZVmidA2(bu2D{ zbeR~iIUR&y;PF@I>% zx{UI*VvV+-dI-6($fv_)EwOQI%&M3wJz@^|ybw>%la7MPsr07Zr1t4Vtrl=8e3DjX z$bC;{}lkrqR z3!Ud?s*CiZ{a!n7z055E zarodB&p9+iTk*CV;@Zmw_2n)l-TM#xd(>sY<^yn}uXNgrU7U;`-Rt*l`my4&`p0=g z6Mq9)G2y!8$`F42)k=0^|Hu#AkI>RwEfbd$mVGr;VlAqqJ##@O`2Jw#puAZu5KrVA zo2sgoV6GVBV|afgn!o5IlKVBrWr%MZ>g4{{stVrwZ-N}~_hL~!ePu;?IPkm~QWKlW zc@{41{X^g5jNuG_^jORTt{s=FCq1Cb^Go+%#Ul_A%2zQuK8g$5W#6X$UzYoy@(szE zGwPGgT3d)QM;Ofh&ZP5MzDZFjMH0|haFcRCA=6552$RG#)=)el-4gWLVr0e=J(ZnI zn@`QEl;V=CD750d)ppn4HdAo&tfkv2Kr@U!s1u0=Oe7*yE~P0ddruQc#2wrvWqR12 za|8~f&b87Dwi3Pi?Hoz2f7sv0MgdoD^^o|1msUFNWOBV^PnQu$^Ur3Q(QWWRvsLPT zUo7++2+G46C04H}KJy{ZgADxwm~+*!WvcPy2VoY!6KE)Y4HcQEQ5k6Y`L*X>bp4ps z9zY33mQGOki7@}?(6I%&Z>(KLzT==zjoP`6<*t8AmyJVYZzfYwZyytb(L&Z-{TFP=Glz&Tlv~ zrdUl6s`o)ItFRYSL{W$*h7s8*r)b3Kol<4)7ieCmh}3fD$DpFRkrYwnmg;&iTUsKi^Fe5AKhBYnvJmyO?k9e%4R zv-5P&@f-go`67t_R_;^?FY0JGZQ`5oJgbVf8G`y%5kK&k5iDmcV$vcg=}Ca1r&(CQ z`%hi3LpBb5Ypyn&it16>y|k&f;N1+Qw$Fw?EugyCoNWtjv!T zcgLB!-Z;xDawCE~Uv*dt^L~P(-g`&OYV-(!kCc(!WWIB!>uLV*t5Y}}-HMSVIXAqt z>#RTLd`S8iU;n2v11RH9dyzUe`V69~vvM&9oc{Z8S@{Hg0D4b(r7{A*13@AYE>AHX z&cSGC;Ue`(iE?c>mun6BeK5yj+do{kBjs~?6eN}GH{8oO%paG5hV{i4pi7E=)$dffpG8M)$#GMp=dzi@OyN`a-J9eL9)3ex^QXAjBdBI zrX8eAk5(i&|J9qZTg;h3si``zn3BVbnqA{3hDRSwdh!Knk-f^t%DAF04Tnv}CA*5j za7iMCG?KaZEucp-E^kcT2S#3^ zSXW40tBiZ(*hf*G5bgVpqF_^+r~mOi_@Gy^hDyF;fxGYd0WW}( z>;C=aig*fEVHvFfBQ2i$PT|A{fGJ$eaJyF4JcHBDldpXl0#Y%;owd=?^VBSCLSa1X zmtGuhkhb9{tCNW7<9);`as9vMnS4CGRO~E~iS><%afYAG@kQNRQ`*KwNyhT)YgV7i`P%^L~kG<$iN}SC8rvQH4?MG3-rj zt-N0EFAWOC!$i(-O~X7f+JPgJmY|%7!KQE5dU|}fHM6SNsl?B$?8DwJAx%&7P8Obx z>8M1=!bV&MNcUCAfXAcIgj)z^>f!%&NmQ65l*6S!YQfPF2p}(dnd7OgM0kY9XT~|@ z;3m^>Gz;+kL>rp_vIb*Fs> zhQ|)ZG-TA6o-w>d*=W`;x8e(A8%jL;%Tr5%NoZc#u_`4(Y@za?z=IEFst0-Eq*8t+ zdSm#~F^y==rw7zKp}>5j621~4wJR|PrKU=ixWy|>TY#Uhceji^O+9AQV4iqg<7H|J zLr~wvqPf>83r-nOBF*eCpmwtM-;E49|FZpiZYTQ~0p9N<+v&&O zAM|OM_n*I%9C8L|$Xx*T9&J!c-!spxcqWa zder*Q;i^`l80gGebo&p+QU-kl$*7~8PHe`hEqxVHtV9EbDWVGNkNhjsNbEa9^2vXO zq;-Zpi;B&@S&AS>q}I(3Cr|LK?WT{;6*}yWM$Jc^Z~P6F!Kw1-p^Q!PDK#mu2%y|} zCF<<5k*xx&RIpOZ=&fDLHE+*+OUkDng1z`rFr+o@iPHI)BKxhh6{isB;YU&}fB%1t z9JC7(Rcs@Xg1wWt{_b8gFFvjO(%)bk) zq+xL4_r-t-c^hyKUd(nn^nVRJl$Gl8mdf90j!!8l7TsHz^<&>O@rB@(Qe8h(zuGSX zPLAuH0bN%<1wk2Z%*!pw_{_a65li5kF|Zh-{t{d~h-NomjG*OiP`k*XOhacxO)UFM z$MDoj^fR3=oM;vWoG(<|Dku!V`oAuQ#}(NqKtBtiwqzeNAz`SMGTPgIq7hl76-%%c1mY9RwE zwznaaFn*>X_$1agzIS}x>i;V_Ug!pf7C56kZmL|?dB&OL*Ndqp(x_J)P?x(%QXnw9 z)AA(G!Xx%UlB_F_&Yi_3AqPdEkWBZb1RR0sqGyenaFUHv9R{8D2epN72!xko z0DU>(yFl})&2qdm-CI;-*dCmW0BevF{$YA?4~z{s=~rr>uE-4*HOyQ#R|(p(PM0ok zLl&`T5-{K@5Ruf`NqzSP#NfrXwTcdcnUDm`lvE{b;JrMRx2UP|`G-vbh~074@J)r3B%9$=rH!oFCv!B!rIG)a z=DyC;70eZ_PSus0>O!iH2UJ7eMYzx^qME0J&b2~UoJl+ul{lN%dyhs_*;eD{g}HYt zY5R`ub0Lx!L_7-{m?K~o_*GLAg00x#&w{TANR)PtnP-L=$91`iXo<~ z#{~97xd55n@-p$qJjJ+v)lmt1uUn=gZmCbcgqoB~zfV6BtXGwB|1d}MSEjPds*LRO zJfIo2Z2n{Op#;5lpFJ6vc`1A@kC1tWS2V|-kBEp-ZLQ@}v>^bzHmv-_iCZ|K8t^xu zl-p?{D;M?6Bjw5Po8sDfOP52@#AUIfieH}V6dKsk(Ierb}H zQ~OsfANE((w`jD=fihTh-ajvMa zXHCnaC{Dc@V@7FaAM5teMg#Z<1+%C^odaSZly`F^*C7Xl7M2;fRwL4kt$}!}VHSRO z_qUKlkO{rPqksGvtu^!aIj3h|DHRh7Txr|{tC@ppz2xt1ftIs8lb1u(p`Q(s>1bWx z*NCHS{Oe&7CcJCDdD`>BC9)}Sl#(BeGK9g#K0ef&%hY$gqJs3pQM*Jf4q-N?rq((A z(JHv62*?&!wX0T{;g6v4BvpjdeQ8v*b2n~pm;l{Ka#I>k-wE+h8D4*$f-ll%RG5+h z0H<`vRW2aA^2c9-|J^Y0UqV)h!?P1ub}LQYrOQ2k0N1f8sa)-a7a>bMKZZ$dn9DHr z%dnvSv@kCpf7b2|C_J30m|G8Q2{MSF-&8`5W`YSc=m zG)XFGU1lQ660Jw~qcfP85BtPK(}}-DNBE!eruWstKu@?GI-UP2!Zt~mJILHM0cFjy zAz!*bft+=S_)0o1Czg|;EA@DOf`kx{uSIVDOE8+i-)j^-Bdg_UwBw}628!}S%J#B{ z>7k&wMv7__GO;yoUu96ou`>Ya3V$$#o@JcMkNCOatkwb5W{ zOC^_4&(y0{vrpWxJHZOP61hon8M?a{rY&EOlel>XAD`14uOrYQ8kkB=lx)ygWRgoo zii(M-b>~lec}hx8xy_)MI~*1ZgNcWI84SyJO=o|D*5fEs`?&X;d#a^I>nE1@-L&2; z^BjSq4ioyqESXlr{O$~yfa=&`D-8E+QKsPti+WDPNGp}{Ui~Xq2}JBaN9T&_f|-xL z5-bIjaB6z<==rgl;9QB(PMS{J!kaaGWmNzn0!+aQtTX~F0&1^A?74YWKk$%E|AC>6 z7+oh~Wx45ulq-SYfQH!p`gPR}Y*^}_ml0Q~QVnWMyBaXP@V#Anwq0Etd^?d=MV0c< zli>roQ}}QHj}`#i*x>y<`!hznCa={{_o^54w~udYu=C}`tVMKMwLSmhY|m_G5EaG8 z02dH;%#4Ar5S)6q>3LdckiPmD)EWg0MCFGVyS=D`?+kVwq58zW0ME4{Gb*Ayu9PF0 z|7$wHOK3R{EL|smy~%D3rUqaa#7n&IR=qY-FeuS1YwvZ;FH){^Oxt8EnzgS5zMP#N zOX`z0%9AA|Yv$QHc_G<*hKvf5qek1#M>5V54z=?tN>&VwT&F0K2}as87F>dI8j4M6 zw#$c9roBGtfWt=K-oL#C&p0CTBGwz){$PCwNva+`+PttVf)b&!zpg_A=xC|pvD}-X zFV`twF!xj9g*ig=!xDlhs(g@E#Pjk}X$_w%vgDdb{pmg5%_o^SI5-nNykqNY_nH-W z{&v33Zo~buDxf4hM#j(KbqK9QZ1nBrLgSq}G6%W+HR1w?z-#}=#%A;dK8n!SoV&G& z44V0Q^|#(uqw4d5n=0^nrZYE`n=`VL+&e83H!hRIn4bt(LY+w3)Pb&S2zfAOVapJK zK*42x`;9c90uT@>+H23WpgxN$0~97n5xO%**^WanTo81w1jDN`J41H^L&i?N+HdM&2Psmj z4T^Nqb?AS4YJ-HIh%J*iLb)xy=sy%t78XMi0f61?x@U%O`U0%;=e|X&ive(ZvY@NW zsBfQ6czwP|@14AMi*rYXRo=SJEO~u0y@ax*v>2zsJ`_@9?!R0QTZ0&bAcu+tO7*s*i7p)~3_J5SMn6znTh@p6WaK>rYx zgZH+8%QP+?`>@8nh$!4-)|(+xm3P;wSz33MG6aTs#|300DZMXE+sTYW9qKB<-(HmE ziXv5dqOOL-MMat7W3$I2C)w**_XD~ouCHF&n{~e0KhvvI?(WF0W#ry#Ec@#f zPs_7Aua=beuHf!%d1rj@TGyQV+dQ*%Z#M~TR8+b;FQqczn_g}&t$AmXd9F^I(y(2( zHhni%tXubI{1K4bT_T1%ciUvJPZpWkIxa`5hf3ifWRh=c4dwK;E*O^Spfnh7{4Eme zigLLNgovTdywQ57la4rW_%LZQU$g%jITRk*xO{=6H%Vz zIKq~}u1M$;o(2z!y#I_JmH(|I`kT8nb?+-p9k%9~N=7fqa6;jy9+i$^L^ zp=p>gcjNv}K7m$T@b% zfs0P>($(y*fBRETHVD}2j4ty^;3;^{td7t3+(TQsG{Hvwct!UE(HRVKfYdO=*Sj4`a z2WU!|-vx-Y_2b zwnp4qa6$;C==|GvlSLac>B(BEi97ebkbu`;zQ=FEY5R*1tghA(!L9AKDl9?^k4HgU zgQIL3^wLGi)rPEl8(+?Kcj>z12SSXhx8JAvF4MB1AyPKkD|~N!*m=S1pH@2dkXpxe zyWWeOphLo+Q+$b+vt9=cp-Cdq%uwtY8PTPaMXEGI$4!8-C_jIvq4>W+0gEX@QgXW^ zD@E;P&)&UWWVOeYU$R5k9d(k7Z)pjN(r=W(Ys@OLHMp8jkwa<#K`zEhF7ltPmX+VU zY%EI<81VwYef7vVa2yaIxUn>gG)t=nNV!ffI;{BiEpGLVTPWpHq3fn7ZX3z11O%++t7+!`md|#Rd>yTZxo^ z3#Ji5k-S;$2C9QVL`%azL!NS7gy!4&%yj}&u7M z%}RgDHahHPI7lEP)ZSa|J+^qkcNK2#see+1iR3dbwVvU7ibao#KUH$Ch&u3t2<$Re zGmiSoeKz^K)Mr@padlPLYz&{hLD*lr6>x1f+T!vp_5Mz6kv-z{g-vr;iZD?8e9Cu1 z{AqK2R@_9o6&dOZmNL&21Yjtl8n3?%LX*dfdz2_(k=TOPcq9 z(@uz{0g%KR4{bbIxU{!FG91K6vSeTqnDQhTJzy}o zXp~2))Z(DOoOMb(Tt%=UZ4~ZwSVgqb`vP7ODUj0pgKfS1A!U7Q)vQEkNacrp~hD$K?bpn%}>o(gy=1zvqqQ z7T1ZT@(sQ0X6b9iP0fkq@yvOM?&I%fNvZo!{R zO>(?<$#rJ>jGtZeySrZX*{@eD7C8>`uBa4f)OwtS1U*cwB)S?K?*)axwOtHPtUXtC z9A#H&Z$I500iYS2d}9$2vA+B;wF}iku%2I++;8=uzuNNmTrvc}@_`1~*|?4l33uEzuo`5)3Z7Jbprj(>#{GSoQV*DlL_qg@{%5qP+HdDdj1S zzQ1#|y%eInhGR_|`^u2UsXXr|7etGeW(GhqF`OY3J~pEQJ-RB8xn z$#Igy{zv8NfcJ~{v7Nz#&c9H~)jxzoL)vd~{tYqHsdxsJ_uqR!cZ6fTuuuaWX+SN$%va?rJ)p3wo$2xaAi z?0Vg5DJA{uPn~CG3y;Ib%bZb!;Qz0^TXrxJQy;`-R&HxDckf8;ZXd732Th#{zE zf&{C2PBjSJ$gMhcYm}$DC5krT`y?=7vymt(AnIxyt49uUEZ^|#Qfb-xJVak%&`^ef zG;n-(aigGCzPzLDV*35yE6r3X8fyLuMi?nzcp6?NJQXgXm_HXdPHTAQxgWs>ufE+d zGh}gP(MZm;-e$Z%&N;HLyS(Gu`iig?INTmdF0wJb9F-8YoX$vhJ{)^yjAy&Bd5_%S z3olcCB;s_x;5#suC@ShB!8F^dXK0sQS^YocF}ZB1&%9fR8tX*|Q>-U!GwA>*=xU#v zh=r!>ecE(Swrh2@oz;?^&*?qurelh2^z1`Y)pnc9daE~;#ivw16k!+sbdH3%q3 zq*5G5H?5%XVcq3?L_0C?$B}zDw5apXGQrn&aT~BZlc1bwWY|@UfsvH z-RzWvsAh-jA=HH~U+>Kkcq($|lSHTClh9Tt6k2sE{fW~chGI(OmaWka-m2H**umCh zbNk(1TdH8<=c_tF$&}ZrgS*jq@S^YI13b4>I^!^JtMe{$L-6|a%6ak6Y^`%Z1Fx>nhbmw2<(C8PtSSADffw}wC4a6dM=?v1zSCY-au zx2QtxVPz_gd(bbbwC3UM=HYcms9bs2d$iANEi=`JDh*N<+x8MLzQfT&r=yLF)?ad* z==t49H8*Rhhb?!!C;;53mdp(bcW* zx5^Jz+RevCSn%Gv)%&KNkTzlLilwuiCu?P4`*H?%t^sn~QvASMedebd8Oj*g=o_Dj}pSUd^rv5-DSF7## zq)#7tKck%S+ohiKfan|0-Om_eE;eScCJl7yNpX*iAt7V^AORNM{FjHPz76kL-6p=w zPMdm9cW|4{5Vu$RUnL8LV|A{!``g$7uWP|Smx`sbA{$L_Q{KvSsKoDoMlOke(MNWe zD%|l}ZO1D%C2KQX%{qqivEJP+qoQb^&~)A0y(d?9e|k2#YhfR4)Jwm7%==u*Bl*tz z%eq0n?&!+R3=tw7aVDPZhT+nXq_2_HGKgrRP|J!u12s!8Jp^Y?`BPI^!Zk@`4S}QxbfmOf$6#h_v)O=<$G6scvvmz>cV+L zjjwF@+C)dhR%MAzy{I(YsxLYG<0$O2s+VPhJj0aYW%pE*Rta&|8o~7(G&AXl(lXmc z;M`F|Tz2_&N{YJ+ktbM_{m*8-z^p%++D|N+=3lgfd8c=hT=#z{>piSuJ&dS)hmpf@ zX&U`rvmQl&sv<*^z?eC*VY;}H(^0@jWA&<-h|Qu01wyg9+=GvCod`40f9gxo9yxlCB3uT&I?_p-dYkQkv(-W}8N&fl5`XX&i!Rzcq#g zhpf7<7*_w`%`4;!ABZf#(sJs`v? z*kPxlbHzDd;qDEg7+aE-LWb>OrZq32huYg)w@-8|vu2&r`OiVHu zIyu;V+LKd4kHc^JiFxWrmX_bd4}65$p4bcII;EzO%$j@~4{Z47K|1Sc%1q#1Y6r;M z?m^ve5oVZI+g%s9um?^2-dA0ETM^YbbetJJ*>7|Qcn#9C=L_@)+viqoXnDS?OD@Ag zrbh|oE3M=-#Xx8w(6KZ+m>n3%qn>%3i)@&pIJ?`-Cwt~2^G3>ob38<0%b|}X4dIU? zj^7gMUKu7?>$0U}yLQJv+k-iLU*KiwlA2QQA|P_91rbVyXfSBim-FzSsd!;S2d6+Y z#5wj^9*IGaM6`;qBdMDhaB*R31Or;NyS(^iEPl_iU;;Md+gOe&D!?s&1vRl$Vhr@% zYoF;(4mi>OBot+z_Ko*IIds(;i>JxFpxtQw6YRw2y~1P}^*LVqLut)pM2@j&(3BTa_KEYAx zFhk%%HJ1z1l>XUsfPHZfQk+%Yd_Go5LRk@I>#tgsp=;GU zhtHhTtMFF5E&|PvfiNcCvkAijO#S^IJ0;V+R&4A%A}^;qOIz=Uo=hquNq{6}wc233 zA1IglV;dl;<1t&P^mNCQC>dkRJ{r2Mh{u<)WDT7Z|I z&3m-iG2qqz<6g*T?Bm_z{6;Jyjh-L`j^01oII_ZyIMK@{(tU!>{d((JIIh)!I(%Y; zN|l4dm)L*goc1{D2PY)2xJGD95q=QVpau<~#Qb`MYH&7)Wms-SSp%jxqg70b~=i(-bd z_@P0K$?IJY=?U4rtkVUb0>#NdIaLSqh3A|^)XUAP#N9;;t^7(GuFD&^>b5D_)sE2f z>$3)>5@&A(m+tglT1pJx^#I6|h?^-?O8Y~TOx55d*I9~nUcJc-95ccihfiJ_89<;5cD# zra4Kg_EOV-^h_JoC0mT2oAsE_vuDSItp^;$QfVt6)1;KhC%D0;F@xyi)(`mFcY?Uk zV3{`Z8&Ec5K>MnY;i|aSoEDx)*?y6#W50mAe4W&S>w9Z0H+c+N_Q6O;*%Pc~-=cE9 z#1OCV`0kEUH38e8tF1(rx7HKNBtg=VpLcnw7 zJNZic_51gBnZ^8#6z7N&z1m+f37tkuplPyD>o?Dp=^ZL~l*1F6Nrtb7izLZ9$)j%- zZ)qbjySyl&4GiwuN-GE+x!I|&Ju}AT-*ULn=W(@-)@xLAL4-B{bdo^;gp zS?bh>wm<{;b|14|UuImGr`ybh4}PZQ2H>jf&cW}?&<}5osBwA5hpMb%2N8X!m2Cl$ z2gikLDdg%XPfm1%GGwrT408OFqdv{tZ*C=)`l~xvGdD!gC{7Z12l733Y(HumDjuK` z-C!_5Rg5IwO%D~8WKnWf3DEP#PZeA#BPD<{Kf5WCbEn9o{<;d!%Ws`F{DQ~f$mXz* zn*T)kKgAnIgQipr+&J9k@}HpmGz4MkLWOUODfit3?_2Ysk`?kz3QI#99Rt7F4=WQb zUra?SDlL(0#UX6fwb>bYHX5k3dN|?U-IhQl|HF4^bd%Pv3RP)9eageZgZxQ}t-v5q zbb;Llrft&cPo}9pjfl7CHasM{4kol24pe&h%Ggxb@t6ywrw8YgvMej*bk46Qq>Sza z+lQjo&nCobj0&KVQ<9C8y3?PJxi=Wp$Pv7(+EVQc#G?q<9;T_XkLG=WzrWTG?_TKc zKQUq4yJdI1r618I(}l$tEOjakv^wq=*mhp)di3dJJ?B_fn*czGj1EOt7xj*ZF-7R- z`?Ze2&+J~~NhxbC;EEI-?}NIsM9@0Bda|!hv)kg7zcpD}Ew8oLc2MoRo54g{gJWsq z<{?L|p(+C{vvsXXnqNfm6+n~V0)FQOY^@h=uFokt&+=DI-RqaoY9eN4X5X|zfiE2t z3D0|z$@E~n1l{Z$%Vt>KYo=%J>uF;pAED6X&-#i{2@>U?Jj5P>6nK>@aQ*1-z6Wq zDkINnlN>Xv!l>Uf*6-7ri6=YKf{xRySAO0Rr*kJ}h5rART1IO^=zUnv8Xy|ttFxG2 zp7XvNB>H^fHM^9t?q+Rm(Kpo@IIvJG2%#rw-uM0et^x~dpQNkX0T6pY=TI6_1VlnTkyVw{{bz9!s#*siR%|AMLWyPa-t$|Zm3NB0cNpelpH zqd@zSj=R!Kb&h2nX{E^7#bm8%^Ue6v(AK2CC6yEX?1HQ(2s6CCM1%Mgo) zQB>g!=H;o6-?P1sV>GKvEEJrSG-)KJU)3)MQ4c1Jzj!wYy5c{G6Sc1xF6elHW$_nY z_I2tWQmRMhk5)iU@JZb^eL;Fp~_jIc-V<#SGD49|`#)9Q@F74K|z!2H85 zL$0VQ`~$TqT&veo)FnJ6_@@=(=bObHCgqBCH+)9qa*>Yw*<2mS-yus)Ck30z4Gpt( zGkeip*8uQ3;KTDn0b&Zz(NtFFVUWjusmD2aE%JcUI^dJ-yR|b{uE4vClRA*%C%5Jf zbL9zq30%aXXiImF8O8xgu~XST2|s$K+1=93R3TZonBlqoWx-_;rM^~3LLi>We^+U% zYTxFbrLRYC6X0+?VBX(2cZQIcm)Cpu=~$C4HN(cl4Ay||hy77;gDih%{j;fZlWJ|7 zPbIK8_8`n6O#f1aNds!?A1De~k=&Z`?oQL>Dwm|pCu7NN$JqDRzrLrqb@ACki;w%| zM&)M@O%&Pffc#@Dvzq1`XS03o9~E`8DSxphFNA5JAXe%qB9!d>3Gz6J-6=Mf+iurr zMZ(kuFDsSJoZP~r`9J-MR3v?ALWek2qAf2wr|%2B6D15f4Lnq+yj-p%yk!Bb^nY#Rr(o=U|7{hpzBPU%D7FEfi_;;mTgMoN0KawGOnUT$x{3|PxB{P zZrL`UUxDRELBgo0IcCc|kEb|xWa`kw7N3G87UfQIPsx^u5ff^tqEb+LmSj(=&;bzl z?2!Gz&M!*3QV_!nybfPwDMjXa(B+erQRZm>m5caU3`woyuQLD9?v{E#vGsU9zaQgw zxFf;{gbMJa$kb^*{rlc22K?J?L{OrTw3GU={0~s4mhv2JESeqyrw$Qih0N8}(bvjR zIfs`dm20Lp1%7e7BC_}jUhS%f163?u2HlE@=$o(|o=$I%_w&8*_ly}LPWGH!zJHM! z2%Q=1i_!2#e$mdx!CE*Mc`W#p>?BoLCrL8{6FH84JvOyGXeJk*tFNPInPr2TyuG9~ znXHPlS9K`kIccl520_n5ske;(cfsOR=3IFu4_k%je^MP5&TiQfbq1Ge^9*r!PyiHz zgGX$sQv>m?i>szQILmqI)(;)mJ|03%+9PueT z9(+))34%*KJ-kIA-y(?x)(AOma*!^yxQj;`42WR)T(J8mwtO{>@KT%LT3wWu1Lo08 zXe6hLLA ztu+23g0=KMF;QrD!%~w#{>DCxvrsa%G4bcFZ-MNlzq<61P?Rux2ON(+mH%IB`T= zFRP?v^@>0wX?Cg*F05N-PO~wZ2tv&yTA7=NRB`?J`4oWF<2*le*68GlyHz z4j;=@`nN$-J^00_cA^Tu9Wm=^4Cu5CVT_JW`Qrn`7J457xqje_Chm94zpjb14}Ofw zJx~s&vHnQQ&Ko=xjt-=sI7~*UCK)O_kdremlD7Q!ZhD2rA^ro*jr=K&1(P9TP{yTv zhbieq)wdd8G((wwEVcZ|44l?q!bYR~VR^r#+U17JJUk@g6H&cEdeFjfT8aINNOsYB zI>Q8_X)~6eEc^u^RO$ui<;~MI!tsnB+T5Y%4Mr-Zr|k-sMA-NxMCj7o$g0lKj@XOv z%2l1{_xT5E2e$Y&IQ|Rcny)__#uXp;7616rZg-Ci_=d2RWX@NW?;&6A*l08}-JM&C z-=m?M$l$mxmN3QoR}h$wzPy9C5DkJu8d1*1dpa+0tj8!l%!Rj}#wOMlTgicEN_N#^ zvKeZghHj!D9vU9cVKX;Mk*&>Nl#pXpO#a3L@>H!=fc-aFt)1B;eh)ie;H@cMopOKM zY@|pF$%>}yxpi&qXahPvTa|!^NjP)a>u7N%tUODSoP6D0#+6(Q#=+y2r006`MeJ{g?wFP+W|7 z4VaB-WXnENk1Xf3FsjbTnj4=1G^s*Y6-l=!00|N&C(weZAzQq&0&cN^ezaGuU)qMM z7#gC_s#y|jTcd%ph~1J8#)H3yL_8E@P145rvt@-a(Q};B>1aM$#`uf`tVf*mb@j+RH&af2>*FMuSY3CGA}j~(ff=^rtaC3o3^zYnFfQT9Ic9N`?j z>vFv{Ccw*j#O2>4vw`jqoX@Vy9xYjLnn0pA?}0Y9s!fX;6ho{+xlY6FuC1|ps3Ta~ z_`iW-usn^{yjYrNL3+Nr^`3busZ{U3!-&~LM>_=axk#r^?X>|ao~#bgKqhDc6yBS9 zz1ITu<1Jh$p+B$*6-sXeIk0OAFV@L<;jRm+bJtX!L*;%VkG>qX{oqzqzJ2*TLkSnZ zUx*-)kZ%E!4B{!)FsPR%_!BTC{|ECMrmJB9?btV&#~WlJ9%kQPKF^Dn{gKK|y~yc$ zKF64*iY=ehG0D?jSYk>r>naR{pkBSva(yfMRq*FWj*vs&#PtISn@L`;Nai7f%S}nN zBNDLZtw2knN>+|jz26YgT%bAp6(RpdKwo&XZSIv|=J@isPgwq!?19B=I3ZJd2XjlP zOEODCZtqloivX35!XtNz(xOFjhqODW8)+=L-jVGxDY+6uH(V1C72Lb>A@PR9FjC4; zc^7+wL=&BV{OC~(T;L#!%?+g6`=51PHdvUR&44Ys-MqHlCNItjnY~aQ8K@*tyA>c) zmtyP>$F0@c?y{j3^7+vXRNH7S)hkF=IsHWjQldT&XEVRG(1`2NxnO_*kixtybpFu-)k7{J51onZHQ ze@EAm%vTZ)8nB}R7oPRH*RuDM=L_*Cp4Y$U@1F3i>i=!a8&5;rh7Mh~Ke1k0+}Yl4 zkU{EPYdo`xKg~8R1g|ES4TT{cvY0IddccXhT!mh%oEDe2;d&JI-K!2Bk)OE>XO|Y5 zY<1cm_%_hTp8o`@739{Y)=FlCP$fQV^1oS)`@9m0-ei71ndtkjlG%8)a=V}prf`<< zxt}&Jb^1$Jtx{bm13a?8bnjdK7q!Zm2sX9U5#@kzz^VuzG=lFV9558yPOxW67Q24j z>A#Kq?j&0tF`W$HhZ;_$Sx%WMJDOsIoJ21dW(xIZ`23w@`p#POO<>iU!Gx<4PuP(V zKix1dFlw+qEJenLzXq`JU+NCBS4&0mm#0n+-4f}i-%{2c<`v(hRCfSJGIvbS2Y}Di zv_uHj<-9x$pWC6Dgn@tDu%9*lCV1Q{=eybwyEmw443eAt_WJDde0s7GB^uIh{A1Sn zKTtP?Zm%d z2{fS0tol;G?O!}T-1h5MoZjYK>bK#1TOnq8oA*UV9NTz0N22Xg17GkLln?EMb(~Z( zrIBT`?S77Bjcj_mS(n|=%<F8Lr#fBb3`TP7( zH!V3ww-pB1`iCrciX=q|?{jP`!#{FXGy)ySkzRKk>i24Ioz|6#*TJ2)XTRd!Xju2i z#BhPM!Yn|0q{`u*h;FM}P6w!6tV)c|&~)U$QaSaX<u*U) z7f-hS>|o#R#qI9(?Do~Y4b7p;%3)OO+wJ(4pN)4xovcZ&KB4^XVTK9gwYKZ;!@jrK z;!afZx*T)J4snVKw`(^LcKV zvD<@ILn}AKX*v^lepmWprVgE-`#s3H z;8J)I>(5vl44sq$O5FpQ|7#=F<*N*K=9-jBqJllqwKszx_E=Tzbvt8hYH<|C$-YvM_Q0qTdT4(x+ARGV^s3_(yaCRxq%Nzy6V4e-rZ0ctV!P;Df40wruyUrK5?iFMP#HeC}so+#}mM zU9yO5GF-_$cO7lD4|=yj$@B!Dd<{c+bzd&Rz8^0iBnZ)01f-RHSE>jWF%$n8H2 z+#5+L9@l=H^U=!;mD->B+l_!lqSWHS8VoEF7mT5(ato#5@DJAz7L7VY2o^~WHncn? zYt~czFwc*9m?0E6%GJP-8EA~vKPFVJEYj6AnxZKFgSj?Z)+dZB(e)-L!%4T!7;2%0 zmjqomt6+v@qmq0kP~VHt?hvATWENDgj2Uk=f!EN^L44`LW@cini`GbbKPK3Lu7f>x zt|>UL&zKPa^{Ne}qUWcp6`K0y-8OCRxOb!Di0_WQr7s%4J z+wk&iPCIhwqxA5y!P529>@^a5fxqk8&rI^6r4M&ze~OJa)OO%*PIxOavJa^kyJlXj zJYRBa&+@II^TFp;PSXF1?wZcZADQ2Uyxh9<-@bkcV$ErN2xUMCmTmLU^ZQkI+Lq%J zTdI|O%=%iX`s%ev_}gx_9d(~!g?VRUy_D!XEL^HL`FiL9h_)hXRYtc;PA1h(7oN+S zJ6;6~Z*ASMPh}FH=umz9Soz--gJa8`bd-jQEeVB2nrl;k&N^3_455Ae{0|(`kuZ!! zLSWEfGj76S)lENTPd-aL=i5JoQ3>i*%GwSiWh7b!_c8|qi+&GsQRKFV847LEz+pq3 zPkfy<1rWgo=uXI`D(a+7#Y+&zg+MPf_9u8Z~=G2V?FL{z-x* z_xR{=NnItwBnoow#f`e0+K_OAJFsT2hRja{swhGOw%W)clcw1tZ}=Ek_{TQYTq%`# zs0CBqcbttDZ-bm5$D@OK$1AY)svt#8+-5QBa&?p5k7XD6*IqkhVmg0FoK1AV42#9- z@cqItKC-fugfTdH3OUb%jP59&Dx{cjsqwn|j`+aW^6Y6!TJ^I-RChu93zAch#vcBa zWc#^w?*z5=Q6{*hO7f;@E_*{2`>x}_U-Iw&+IoKfo3>=i;Zq62<vBx#eJ5=y)CRxY2sIzuB|;SGw%!-{+*yoK|*K zR}E}D3|@2 zvtr{(hFkpOQ4_tpuZ@o2;!Og7%Z**yDkN$tF$k0QV(@&&5AD{Ilj0{0T-=9oW@(Sdh_4UY8{9M{%M)1H8Tgx0`BdVqoJc3# zK9XVY7ZIv8J)A7rUX015+L2*aLP5VKB|gX0@6B9}!=K^!ZX~e%@6xwfDHCgPl}fMs z!OGJ}39b$rPKGb!4Kv8@YHN<;ov-;U-z=N z6WC^(e0V)4fVyE!qP7BJ=7W(YlDXG&u*sz7sGH2OzkFJBE^fI6`uvMl=>eA1lBp-fsh8k0um9`#Ow4vLP{Rju3bf3#L=0Hx?9El ziJ0fQ+YFVP=l+`t6UzK3HcP+HuvtzPnzH}2}}SJdQgY0;{0_O;I_1ohm7iqr>nj#mnfV)vg* zmp*L9?Ky0z{%>Uou={<|fA#GD(Y8Bw;hP^q;&J>Cr}IHaDXQ!2PoC|V=JPi5SfBUy zSQ!PUjlZ@qO8djZwpUu@Cyul9i3W1VdDBRjldciBdfU~T@`S@CKQwIDm!Wv>>Zhg# zAI2L6}bxao;ys%&-qbf=TmvgyOAZ7M!)>kqL+&aYXs7|67xckB~| zn(s${WNu6eaHq^SE6R7IT`In_R(|E}bN&ravBq@tw;j8lSev>&UD#B6t@FPtFOwsv z%IjqHCO$cq6??dn`Lt-pRvbGhM5w7^qJuNyP-axdtyp&mxzuvnpY`PR-#)a8Qwh%| z59AdXh}>HYtiwcIz1w@{>(%~`-ucJMg7Nem5Kv-}5FdDIJuzy&w@Gl)(C5V=;N;hx z(pFiL9&suGeKn9I*e8iD+J})c=6H9gJtnVDQvCD`&jI+3*x(}6`L4Os9~cWb%F$;3 z8cA8@EU^5bwY0Q|aa>G%41(EdGrLD!NLR{rR4Fn^AI$nVwTP?*m6d-bQeS9gJ*yz;u(@lvN^UT-cF<#}^q)VwrrOrsm^s7@?d{uYxVi36-YX8i zw;wuI%F9HO!btUH`k&~MG+BUDYcwWS4_OblkB{zBL!T4i#0x7MIKE@hO=zSOKf~-3 z-$)^c#l$#7jg|a#V@Th){DV{ufs)QL4LR4q3$_iuS^)@t`E;^2dmV-*YRaF&s}jin z^Eyj~%i=M5-ybvkR&~@E%I!bV2bcU*u)aK*`sTH}S>w}TKpBnwf_H(lah;rYU#Zpj zcUBH}$ZJEBsI&GzJuZ0gAhlq)XKeK|x-9v|vgn7Ps5hhHS5k#dp+Es6NWY(EIWylR z_h||~Nx+*F2=wI3$CC6h$V=*!6D(0{F(YB3VB_XW{i5UJnsC{f&0Hs=AjD{Rp(7Ye zDBSJBDf47QU_LiR*8zcyOLpQU=15tL-41ne@i_3FsE}Pm>e8p@m>UhKX_H*o}ZnPEP|mq&U9MDF;CJHVc?2`mMNpLE+vO zHC{mkriELe(3;q;!2$EwUo=W|SER*}v&C76ON4C&`8)(;J^M+7<$GN?R|Tea&IP(OdUs!UVLN0yK<&j1ZB$2~B-*Q!a3PQ~Gut4(R75n=R{cq{S9@^Zk88?KY zlXeBL!2OU-E)acLrM7+5v=US*meXm{B!#&39YM_x9=K|!^M%*1ONjs< z1o#n<*>s<$BEgb&tX8)XeM*Up9z4TbmDZ}9=5$#W{;u<3ES=bVUSo|GG~&q00Xg@o zx%)T9Aj1p>0vqE0w5Mo%QR>duwicakuImu@(Zh(WUGDrzJG3{bJ$|}ETZo83qjxm@ z6Cmj{ocVb{m+DZwzVLmB+#b*oEwPskQ7Hmr+pOfx{pRJ!Bz6jy#*G8N=4UR3LiYk3 zmeMoJr;#oM2%7D{K%-3H<@SspvGfN+p0UcVWlTh+Dm0z)e%SyHQsc1H1 zNkyKl9&kr9@Ph+nxz63c3I^uiXed8etQRq=RP5l)^cR=O7nIU~BgB#H|NNr%cO9NzOlv~An!WyO@*xC5}FRI?bF^_I-`wkm5W@9wA)!5c`#WowWjT+mw?WB!u zG`5q*NrT4xruV(~v)^z2f|)gI)|@!bMt{M47X0cVhF8^+;bA_@hQ9`PM7V}L>O#bG^-hm!G0_VtU_{KO8| zG~i5*)rH0fpy$Z+o<7Kg&eXg)kG~0-GMXk4x-s%YH(_aRAs=c?pv8=0F+~i4M-})P zYgu+YqN!V+H8bsVwNs_YS6a%q4;3XBG2IUV`^B`~`JG8=QwHwC_)+csCE-9i+|8WM zOv=lbrd+P!@yP9>qCfMPPyGbML+EFv*2Tn%=6opzq}JJoo~9tU!0y$DXe=B}hmSy!lZJ^5Jp1k_&wNPs)z z)hXl~qH4P`^h6ICEmWWZWYYg^d>b`Aq8s>47a6Q_{8p%G;J%lqSpW&rgtnjeSg7pR z9ZeG`sqaHZ-i zAe!rFMQv+adoU} zlyTN}NSp7)XX--Ioivx*;^@@09myK(nKO?1P}2?NV=wR&Vlq`@&Q!iL>;jlHIZa+F z>pc+}z$_a`Lh_yrnS{oqRm9`L0GYl1C~8(@!HzO!uv-uIMRz&l zgyVauyKN*_j*|B!bx1)>d2$jj@%fma90!>fLkDaM5+D1R?3ZlSyuz^D79_cM zfW^8%NW5Z4YCM>1EGF?#nT91X$n2p$4slQ7565(2WJk85&GLtF)a;5z3&2h09)X+3 z0w%#>Sx-}my^sbZ&L1C1Ve(MSXgICkR5=V^N`!B{!0SdC9w~X&t2ArJO$DbO3v-xpHfiA#p z;LL5=*h-Otnv1BCD}?4km)&Kbi*GDlaU{@rA$1N(&Sn8g;liPXKu@JdcD+MipcxF9 zr0$#;{OnoR8v$lj>H03)f24!l^y6}3id^r*Ae&&w|Bn(z+2_naKeVkZKE0d(VxKfz z`NQDYMNZU8wtgLMC^}CMSSAAK%*c-NaITh~ge5xlkbPYF9k1;rkA>4qftmW6`#iPg z*WJU)WLFf};O+7xT75w5Dl!34*~1dpRGe0XnmmMNCd-DHWj{E~I)|hsA`l#e7Rigk z9R$ySEBX5)9eTNR*EEk~WJW;S0X&12%J{b*>C6rG2cAGVwHz>?q!c^%E-yxJM*e4! z>4m}DawMgImY~utgho43>*klw3>ALUUaaLHWtlHPu0e{(#|(T;I&~2RW^>LmfItDX zz%Yakn*pFJTC_fz3PGO|*m1HA47t$mw4 z=`=q>qqm-S6{n;yF`guYQ8V_WccX0&Yi%Sv2V;?v0KSwTHq!(x1EwqZbE%Y48`ODxmmm?ebEiTr|9Ok)cf+ps#;P-tdBPA9+QHRa9tw>5B(vC9 zZt1DT^AW17yz!!|R3VY)A=#;drhN1Zk;-1IDKTG_A8xnSOgw8wAb?CE0W4MiZoa7* zT88g%u=nH;f8QdJ8=(1nUmLXC3Sf`OqD#W#>n$kc-f?{4i2(Lhq#xQsR8eojMgrjN zTe2M9SeQ{UnbWJ8>e65nO~NiFFbntNWYpYgvI6dVzH^Ck0&XpQ56d(7%!-yvv$UO3 zJq@w+rz{S(41GglImIZ@%4nc2)s*iwY2I?ES|y#S%cvvkoP-xQz%I4ro_p~HxH4G9 z8zYf_083TSNO?1_1ZUVrIkH>G#|u&gh;35-9o^fo9_F9FL!d2zbE5IC_ni=tR~qcd*<%>E&DIc?-&}52(h- z8O9fJyaE6Gamr}30j(pRW@PfDec^2`R$Unn(9n+gG6FLOT4!1;|D=_zD4@O~s| zfIFZCEUye~=^7btk!C7`M#ImgYqkqb?nd!{F}K9MP|$`ekTvdB)#{2e-h}S{i22(c zBCFJq8(^Rd0kfi!Q3am!BXYu}PM`+@73RuOdL0nIWq|F})H}4=W`LjwjA5G$HGd~M ztO&QRuk^6@GfOcgK3#=8hX5RcDbitn2?KP_PMo+`>pW%@)w{pjCpQg-WZ8tSni8Ck%@ou?8-ONGANnJRj;0%z4Gxky?;uj_uGo>JT7RYW zTSREj<;xgo&*LY29^L2=WFEt#G`Mh6kSfbdMP#&t+~{?oC{1mNS=nKk7cgUoMt3_c zwjca`{|rmGCfRPrWpmrB1ppiuo#8Q#C#t|>lQW1;^T3DEXPDYdk;~OBFsgIyGB(Jg z3oz!=<9eAaB9nH%>;WdDur1HSW56)LY;?uY-Bn*nJ_fq33F*(aTsklQ{1P}gbWJ~Z zz{XcQ_f90@!`j+EUvep&(-q>;=9aKf>Fnw81>r%gDUwFI#PHpRXa*m^;cQrc92w8x zv)(BIX=GQj0xjE#&WY!@(d50xMLJ!_oNZfiSJuZ+P^qC&0HaTD;;JkcMLjEW6oW({ z&@-9u<9ATTJ6eJsiElim$C#h4ohs*Sq`e%Zb`WQ<#w!I;_nB<1%o+#O9^*zuxh#{y z$dc=Y(^->!e?ku^iVMrf%B%+oIc*fD;)+XCA7o- z?rkDtr|;4lOaA+XLqKeZJ&mjkwSiN{@EaX>w1VpZ%rh_;h=G&r z=%rl<7ea8am2=#*`0qGfo!w$MCESj%M+Y~7R#VW?U45Vk-J5Av9~rvjJL7eg?@TG& z&(&E%^zv;96SxO*5kf;ML=WhkxB0j4qS3&!JX6Nj@V}lt5IO|mtJAW0kJ3ZoV*)av zsy*fde#@18JJn;C7N}Fwz6oI2em9esk(^PMy;Kq0v^R>VnTo6IDqF`e(!P~6ENm|V zs@jFuRS-so_~HBCH=q~#$-Y7EH|6mIht=66$b(KJA?GVS?xw*kh>{)5I9^0K`qOo^ z$8N8DI=ZwxDSB#%IvU$P$HXODrmY(I1W}A$^a1$c&|(dMKM}iu;WqrVX#ZZwHvEsC zX)!=kpl##MeFsJ0MGV0KFFQfB_Q1;C-Wu)v8humx)miNLtV!G>BDC0sd=yT15Vg5^;X=LJww#0Bdw~p^t zo@+r(KAlO=0Zdka#^~K+>h6G*`-fS8PT#kq2aK@uwq_8prMYFpW-~L?r-`Gkt6(gu zMV=gGe#Qi<0sAY|xnAF7O#q*Y#LpFC+}pvv@xg?lXoP__h#&R5lo(avDhw*}FWFgVo~nqUlN@iOBb_T9iOKdq91B{N{$_>`GQDwN!(GLG zfGvaj0r=4Vr45lLhA-~*@8Aa+Ah6t%Dm(wrvR54roPHW#NmKp>4TdZ2p`VqK9d9{& zPk^BGW8g~w{deKk+X7~;A}eciIs~wlP|BD9Gl1D3U<-3Oioi$FiPP2<7sX#|?jQu| z=1RSX2ZbIo&osFi?NOtHejy+U#QD3gt-Dp9%4QgvBjD(p>tFw zaNO6m&k$%uf(?$lz)N&hTyDg}j{5aZkrXJ7(FLj?yf>-tXf$ z@PIMC{m*XCAbf;=s0x_3v=+&x&E} z8|iw0gL@Pf0!Va{7+dx9EOkCFf#SQ32^>BWvi|cx zjgm0gCEkkQDv&|9;OleZs)MBtBfp-4KzOADXe6HdHQH8!n9gLJ?etskfKE0!f-R4z zIfBwWgV=bh!@}iJ1Hcw26(r5Gb2P-;moQP+zfEd1?ewxmwKhB?2sGu%_0LT)HWNdW z-Rv>~NXGyQ+(cbYsA@WbmA)@^PfC|cK4%0q&2&8e0?+7*acL){UAO^9R_>spB=vqk zydr6{0VxyKMEkx@!!bZB1N6Mpih9M9o9A?#oBU-XHQ6laPcMWVpcV$4pyp7}1piZE z%uO=pF?x7R)ujYk&HOBht5;MlG(mmL$80R9C?=f7cxT)@rjr~O2nqNgSKtq!-(`ve zUrzh(hdBuNMZq1xu^WP@ug_7>W$y-RouM?Y@FCx6>i3!w_5AUaNVW2UM2TTFe+c6S z_#%1@p}5W2VsUo_vb_1f*Sn+AdpOFT3Co{VTf$uq72gndYn*va9VNdxNSMm-c7`;b zOP&Bfx+&w`hwa(J68Rc$`zts*6olRyKW*q}ufM-(A)YCE8G?V_Pi{*>f`;br6ja7M z--=gW7}s>UtX^ZC*sg)1VN0zeYjec2EV>Xk781*ZT&f$1c4p zwOqOp?lXXZ!a;A+tyB*g>Boc$W7x>IPM_Gns7pmtrj!_P^E%@QCwxrf| zpL3OaqO7fDMhG$y*PQ*qE@;mx(6!}1n-C64YhyC zp97 z+#nTATO^c=%Vz0~`u9)o9M(fhOHg;d6V)xN0WkLwjH}DVpC!vUFEQ7|M);rn73td+ zoW-cT&?7$m`fn|Ou&36|GOcXp(cl4cSLO-ECC-7zw0uw)CGoDb-1^5@G7eFShC7x- zlG(gzd5>q&o}M!5`NwrQBR$c04d&P%)xez2_#IKv9~3QvzvcR{2`{;YL|&F#!Adg?ib;+-=_j~9Ds{MKMv+%GVeSR^Z|^lcu1S&l~Q-( zx}Cn2&Pnjy#^&=O<>vwz?ceL-`FvZsT-K7|^;WFWmN63S<akr-b zb5uYyT8oR&)UTAs(pm|rr#cE{DNkmp#xK?i+G!>_8IxEoHtEXa;9^8qx|M4=tivUg z@(>dKT;Ow#1T!IEmvI(O(!_oLfU~Erp01FeB|!Uf$!oPL(*6WHXNdNVGUWX_O|Fj- zzCq9$A27~qc~o-rV5`dmka>>th_rhlu<&IpWHwdWtA@=s6<4U|XxLQbl;RQ=FZzmE z!X8d(0S6sj6=ES%HiVdMDR~O7U{bax;3hmbwki1QPD$6{)LeBsV~uXfS*NU1p1+bl zBbH+R|MoGoxM7nAi@AuVbxSw77VwK~a2#EO;yz@sS_}fDGzXKlsg-_)7#MlQgp&2P z;z4*#miCzkytbEOttF^owv(>M3gpHr>)lvg!n($}(PHHHMk)B)8t?U|oF)?j{Xg=d zaN>i)??_oIq?xOpj(^T(5BrKq{Vg42rQ!<|y|_UvB+ z`pVskl%{s1;}PjgTxlzN+QTx@+9+~%Bz&^ZqaQ#FLrwdoZQaBxUM>et z5lT%kIJNPwcvnh)arpP_`Fm;e!0rw#q zZPwCkU}cNINX^yWT72LFu`fI2ykJyh)Be<8x7 z?1V9M&z`+ zC%6elA!x?yB@iwRbv4Gv2u)kSemkY8;ULfotQXV&fi~nqj%jc1?913ohR$?ww326* zrG{!Jm2M5MsjZ*<5`o*IC=gWUo*x|I5SaFr46U{u8mhKj3=HZ46`KIo`8&A|ACL1? z(*ZLqjLUBhBgliQL+3g9J6|yt$D~gwK_hfb-9MWFw9g-{Ujpe=_PUWT0WE?QnsmF< zdJN2|`s$tjy-BE~1_EE=!i~-5>642NN#x(?=sPh(6hsGELX(8;X+Mz#`h_CQK^yMq z6Qsw4eOak-7Si1lGFC1W{Bg1hw|T#7>M>FoF>dCZ{c;3BZ*j9JbjnXTZNhQ%6O}mU zZSS_XKQ8O#I(hSrk#Z+qUnOZ?zO0hypM^`uG~C(n+TyKV+Gjy%4~hMtUHHVeo67=_ zLo>XSs(j1gzQXf#;nmLR~Ck-tnL_m!a>Jx-|yibLG%~ z^TUW8%pv@?z*F^B_9gDzIH-D#kMvuzzZt{JRgwZj`oO&3=XRf`i9RxnO5=fI&K$qK zLM4T@WIsMIEEgFF&akOI7^Uz@Nx;XD5w#__{e0G~_J&$)`Ee&xrS0gyo3R+%C&_Hu zpSiAKoo>$4mY~=ny(m7;&I#xaYQLnCRe@py6mS4Op#CM}C2BHMU)?}T%#rEbU1+(r z1XtSt%qFSu3k13*WBPapzmxJUH^~dW>*n5e(!$E+YPBua7f*xly=jDjPRT;|_f94% z!%G=CIp2J;p60_d<5zgw^uK=97?B@6i0OLfec^6C@3K&$qmIbyD>`G@q3-n65CREU z**Xua1^l}!g`rKj5I}ube^^^^ttC7Gr{Itu1+zm;INUD?Gq8j^0iP&Y{NHiSzYotko*j}l^ zPL3wrfD}kvg673Z?e?w8R=-!NWnJJQ#h*2z(P`oVHp#w!wA!)N{y41TY5}{KlAHXE zw0g*}^-FyC*VfxIKB2^N4RiE(IDao_m`WUl`@#bfDQCfvXx=v4pEjT(W5VbCJ-9Ab zoS}`^737!cpIxYGdDbqz+OcVI{>ncHa=iS)wD^TQzIwi^!0~=KElK_3ukSQf20mg_ zi=Gyx^r+BmDX{3)hpV>l%*ujT);?lHti| zvR)_!B~;kigg|E{Fc67b0IV$*Q<{IAdi32_V>z~XPp`Z68&!?IFeeufB?HYk05qv* zng79^MBW~~J-@y}$88Ex`kLjKrb>)C;hQM^w=ed8%4Yk4!hVq$CxbUc_^UT{5%a_0 z0H;EGd&gwAY(jL4MK8_2zRro*o3YD_;@Mh;P7dm zqxLT_$r{Eu*aOKH{X@ZoiX(r=kAbUuKm_Z7yh31ja|ry6|8Cm^Gj^S><|XKaJ6-&H z$-0T{{VpCP#VdnDfLp_ZKPG_S>R-!EiQoM~q#+ zYLVqe5x;Y+al7F3>zSjEeU$BC)$1pC4eQGa@KA+}IOk3$VF7eWbRR0H?;6In1jc1w zPc*!$!c-i28X38sl!;ng{DO$Z$`xwoohI3#J$h-S-0K{w5Eg-mEuID9=rZ`)Y1b=B z-!cAU#?71)uP0G55kUK)=aROk5HwGi*cXOSR{Be)b1VZ% zX=$3z10m5-*Y+CUnGR~!WVxvSWI*1!5?+25`C<1V5e5v7VG6IaD6GD?G${pxfyZ-UX< zZ(Ql(O}Vl8-7kk6Kv-=Z;pGw1ehl}!R|~-W#Su@E*E|JX6Aj3J#Ydttw8C%Z^9%^) zh^-kF!H~r?G?U;=YZnk5z3c$uDX5P30cj$U^>#t^Uj%M1+3|n1qV{*bE(ryK2U1CV z^_r0X%4zIL_hHX^wT^(6jUWZkwMiw=$cYoj4Q)~EpsS{&M^qFlBVLXk(j9RRf3*{ugO?-E~s-+SciPK_G@IyILP%4X$I|-a8ThyXhLlHoA~hijI2h zliQf}E?36rH81804-7H_Gs88v0*CaXwKpQv_E^*_*`U$?SvrVj>Ck*-)21|-&b1|@ zU`U+BI{pTg0}r!1{IfNg*BSm;a+~kuDFQeZ9|(WKg^U4cjT}JE#2+F(%i(zw1Gs6h zcvF=#>WcaTs7?Zwja0DGZw(Y`lLl04amWY?@w_ZI7OFcag#suXY0YdEP*S$sZ>#U1 z9Esqb%)eL?v$suv>b1p!qm@g%SwSqL-gdq10vSQTlbxIpEf6(YIE1Ep#`6v(!|7vM zH9#+FT>CQC(P5nC~K*|gV5$5d|jS@88r1@NSG2TsSnGMPA9e&1` zj|0@;3dF1v@GHH9ldc3H3I3~1IZm5AmRsvz1b!>x4UovZ`Z9#n@#TW5ZDRQvA!(TC z5OaU2e3on}6OQ|+x5p%1C*u&wj|Xgnh#yuXBotdfC8e=wi5QN%YN)yP2ezp1MM~e6 zy0L9giWQDQ=85FStiV+Rp78-J5Edlyd z3T4nzeHtgK6|d^Mq+cK~CF3CxCl_MAP5q|?;DkD_y)3Z6 zqXdF7bNU5Y+q0x<=WM+F_sf?Vvz{+o>8@h>&M5f9k#(aQbFj2??xLTxFDJ%O2bI3Q)kpHy6lI3B zp5NZ52)&tFyj`s%gpk2cSKF5{NlMhcLQmD$xScI!yFK_VO`?`OchEnMc7ot_UVEy2 z%qG_V-Iab+$UT}ImygQE5<@zH!Zy#UDfP(HFxYhs-08l&MEP0r+ zIe)U?&-k|Zb?k;@D07`N3fT>3uDDYinR72R+1>wy^F1fiU(KAq571-j?{Ec@3qWF; zSd%TZOSkQXym-o0Ehobqs;_+49*VsTUuzr}=Hvgo6}ItNI1a$>tPQ3KmD)avZQP`I z+=%^5twgdo3KE`YwY@A_OaTx>!<>qimLGBPkBmYhu9olLo0F8w$sh>1I zMvf)OF$i(x3!Jp$VH9Wc4uVd@xLYcgutGkrp2jbKj9<76gN_0?VT@_7(8j(|_%F{` z;y1Jul(nBOG3}+sTn%nZHl)V(+i@(#6$S3`33M)AJ8A0A)%4RV&zG{lDWC4CExk1Q zUQ}bZ-4-hyEu3W}2CTYEZg3W^rti5x-Q1AF)2~_Kq5iu+bzS6JGur-!ahl^^7GRFu z!=Kj%GkFAD4^xUwjaP6$w23j>vepWC4iCbRV3jwW$dVhQN2v0W);xrfe8DcGo^%DM z9HkE3uBXw*mQ`Rec&hT^8TT;1^65r(4F7?f4-y09Gey^V0!J%Kr`pAEf$N!7AaDVj zB{nhuFHCBn_VglhtX%#1e*MlCt-3kK1NQbo}bO&Ds6j z!o{-clVnR~%lc4fvn!`4BuGeGGgtMN-hfqM$}}L)`CbM5ryMcudvy!kGLBgD;QEar z3v#Rhs8D`4fmW#>KUYQ6m<%qt@q6!ZUegKRI6A|fDkTDJfaac`%}cfMj5Q4h2Z}zQ zzO~yQ)C+hCP*E^+)DbZXb-1o{9nblf!eNB`TT=p-VWuJdP@;-PN&gSKkYW2eb6}<* zsoSZ!=2lDY5BLxTzLSe%HmKSnWOYaSvXdAhYPfY6h ze;HTknIZ%g#Yrimx`KP`@*`PjfCzxWrfgEW0E#TtP~Md#n*#J>XGkyV81?fOj0-Di zKQK%HVXqQ%HXVMY7Z-Mw9c4L?Vz~uVa-L+WF{_rET2vmalgaYRcXNucsEnXnvN7Do ziZ(aS4)kLNYXhuT9FKr%kB^CFH947XieU8?L$$9ec9i9T;;4?sg-NwIjsXCnp5G~P z0>rEzX5F>a4+Z=W5IT4dWq%B!@2Ip|gT2&w2S#5y0#d19eaj@(G)px&~giP*rT1Z*-q{fbOC&c4&oi21afn?opd4WkbfeI@$i-SpC)QVnRWL>>ElAqZA98(dGk_m-QF~&t-1%R- z8e-lMBj~x;IDr(cmrpP7fHA984R&ans#P;S$e3XHx*|3mpdkLbRv~IbMD?4e6%#11w5FIZAtZd>ex#1OaI3}u zrdk&{k^%$iIEnhNH~)YnM9tSz^uWLe|BbP;cOI4Eg=DR+tC_iQ;9m9@-&C}$Bm0z=g zPHq0H|Ad(Gg1~g|_H%0?swdn!ArlpMlaAK&%{%-lDh;#o!~bLsDMTDpX@2jCDFv8* zkS(^v4E4;Vqn8&i+bTMH<+6o`pGhWvfRfE^4W6fZcuW*KU zG8H4-KlPboFJI2fEpd0F)y5JFNi;E5#!zcwgCs{rNPEyhoYPnJg*lrCUdX%e6sJzP z%w~;e>`2Q#$^jIxMN>EwdyCa}UAkdx$;mBGMTZ0%Jy}tGk-Ad3RmxWI(TsXE7hZ|? zh=E1e7qV|Iz4%b*|HW!TfKZ3f^9|`l!Q;Z)WlWqjVX&syxU`<0&9%Z8sC{jV@ufT| zlxRT<_52@6B63)c%;%oT7`{U_MMD&XrkmMrybvKcFCB2xvV}g)5|si;xb{L{Pf za?z2}$}e^If%b=I8><#jHKROh-O1&$oz>AOEt6_q^7yqIBen`Od9ywQeG4NHDA-v6 z@TqeAB0FBC_-?k(Vm7!j7zqwFaa7;H{u-V_`qz~NJRg_0W6Sc-RBLG1I(ly=*Tfg? zZqPNu^Lb3uO2u>ONZM3bkjIiV;Ag-J|2KmG_%-Ea&3_}ekqzZH{U=NcD~- zu8=S&wsKd#{B}D}r1dtrkp&?RKJ$eTVt2MM!B!SlmKP7w?L|&uW51R$ElXldPcut9 zviYMGETCYJx7ToHWxiru%&2aSbhH^ds_HB<3j2dY1x;CaVfp+e$N7Am1-g%Ji{+~j z`p-39=W`YY=Yuc42ky-AYYYQup zSc}L%m>#?de2>1Nacfg?sZ+lanG&^)7HEagW?OuyHhzAeM`N(ivrs8pwEu2!@k>B| zJAaVRelS%%_I?icTfM}z4ZQno)^$1g=f-v&`*eMD^-}CYJcouc&I@0ncvtw82iWwt zpByD`3?8tteue{~{JhL0ZoSHOEXZ2dd?xc{(I~Ufa$`4w`uMaR`38xp`gH~&Zi21~ zwzejgr5d{VyP>&;^VUwZedOP-=&_9ENud6%?OQ^y_RT!CS_cmtm?5M%9THd_mFqI8 zmGR7Xqkj_0OfoxCcn)INUTw%4EY*w#%NUZPq+Gs6m+dgLGjpjJG2Pv^(KJh0$unD0@0u>BC5I6k zn!!`r;`iX?X=4DnXNZHSknZ-|&qU9s>9tW+edCp+Ua1?*$Bk0>le`O?Nm%zpXToW9 zw=8bF32Ru^5^u6|&ZRnnj=)#+sq!T741H6$m`3w4PY^jxcS&utE*b;jQy)#rJ_h*@ zYZ{n;50fc~>j^xC0+)9Q3qJUqNrT!Rslrc*RUZ3OOlk#UAXnw;5Rz>Z;t9j^;CG?(-7y8@K7PrR zwxW40*fl1pI=xeS;2=|7C|SP!<jq`XuL{Bj2*h7WLX13HTj)Yqb$Z2>)RyV@(#d#iVc>wdOqEI}|H6 z(xpe<%0=KU)?h-A6riQ$u!8OwNLCfKiaQFK#A1am`h3DM)%5iavV+uj$2Cneljg*W zk$!$!yX3^FfSR}SOA2qHHkiAR-ogT}-Hip|NEBLKZAC#P3-7Gy%^GG&8n#8yMe%X))bV5BKT6f37isHAuI$RFwPP&O~y@$+!6sF)0=t|`Dm3uj%6 zGY#38SR63-Vv+m3Pqevw^oyZgwwe?I1twtQ>OfH<#WKzAD(mQkGZ_;O`%aKPBGMch zk?DeZ#*B~}R+FPKp09GuR?Vh`3?a~G4%K%*bnn{e_aH)hCOfu1mLkzk(`&sO(UE=p zPPA5LN{TMy&j;j_ot?a7EN!3VN<1D}oE3=$LHUj9juF$i5WT*#M5Z5LZKI2Ya@bXb zcSZ0KgUy!jG^p{(ju~;HU;GocVTz;tASx7c;hN}N-jOgjY3CI(*M%=^eg*=D+$fXt zKNHu@iF-~myxtUf<=b}eg#YB7w{y_BYQe6KRO*)3Y$*{Z-Vq9e7ErXpm$t71^yrwj zCbJS}@BZlf^p3puln5%jLmO)NAUlf?cHbbsxiU@Sgm3vl!8{_n#QyHr=}U(^S?8s5 zg%kB->|wx1Sr|^a0hBPg&zCGKK`b~Kd6iP^_S9%QL|e! zd2UC(81)C_Dk%P8teq!sh1{{GG}LDrtbIBuC30&*YgNehc~_=b<<6L`{Z;O^S%+ zX2-PgAp@UD!pBv^X@Vn>_YFOjENNDq7425v7?||Y(QG>`LZYiRQk@6u`GeX#^BG7r zaq!4@LAGVG1$du=mmYOKM4Bh5Zu8g-y*?Gq5@@|Jmz2ua6dE~k5v2-e+2$o(&+)!) zixN~m#u{;HQT)P9gt>o;UFa4z_%)I2=A#b-EYhdNy?8`?7!EZebrnagBmt7vK%Z)F zcX*SPpQ(sh8>@0^X1B3>{UUjVp#&c6zN|XMpwSgr4Fj@uwW6b7+4(J#W7XgR_HRqX z0UZTKU~Pu!_z~<%-3rQ0gc>eYqbze9iY5Hl2!?3Ey

5jUr?#5KlyX3qo~8uwZ3+XiA{g(k2l`Z;Fo1md=}DKe}})O37mjRKDZ|IS;`WX-_k0 z(v0FpdbP~$=oPBdj*Z^Pngv)8PhTPijkB_pM>fK27#Eh|L^Xvr3CevvK^#K1)~l?zq2Ridv4l! z`YC{8X6JKrR_y3G(ig%(MAffxrOP$7yB>R)k7yH0ph! z25_Us`0`Xqy4x|5eYsE-tlDz0$%^*5%S?)9h(IcXGgY8&9-;hH_cBdSl$NCs z>uwzk_8!kZ57Qr7cL~`QO&A$R;ux_`?mIU2#!+ajBq}~KqwS4fv0Mh!?^ZA)NqGkC zJ(j)t?yem5tQq6!=J#!Ld{gqrQ%qWIw^yOr*Z5I3^IhH}7SH5uH)L8dkk`}(%?`nD zF1(v(d|EqV49Q7j!)5Q&wEHA(s}K4$U;9P4J}75~TQ1*ZQ99=wZ(~+DLAnzr{K$Tgj(LZND2n!Xz#zf zN^!E3l_<CF1R|70}+6*AgI9$ zeDL0u_^ZpAk_?5!@jC1U7pRntx_G%oSG~(7k2TkPS0J-WF2T2e$nY4Qbw;7_n_7-i z`djoER)`1pupP-2B~R~MfHeVWO!a8rGsbp?Oncv|A-Z<+e|vw0(IS5W`F z)(D`;jKBC)m#R6u7s;NKakyAEhrz9`s>)}wu-2PD_I7txLd4hj=I~;1r&_P~uo(t4Jm^!%)g6=A1)cYAn`P9U`Ud@fP5=CWJ6(UD*Ae#&x=#J4uS*0|LP zN(1_}*Ng2j1r$vu4s6KpB9$~fWV+4i?Q_TRPDECuK}*pqrk&}R6-yvF#a-(3;xe#o zly=#4X?q99_k2c0h85#4i#SLXt1~B&*nB2hEuEqkQ%8|r0b#*<@6!9y#?2cfGL=RO zs3N3YDXT7CLaU1KpWHGgKD~U$k1`MFDV&`>=ciww$L+eg9uod!f};fUh?_bnnECiU zq^ZH+=J(n>uoKy}9@PpzI26!bX+N?n`g&ON9TXdKA;99EYCI%-2 z4ALT!FX?^P2(bp%M<7qtT=i|L;a2GaWOUGQ( zTr6i{u(?7taN^RcxJ@J`%4hr3MRL>^TVI~0^yzLeoO2$j<`DPw_82vw*Z6REt?it& z3=T_24*~R_1OYQwBr$xK?pm_uU9wskpznA8k;!LR)t#TB3)Tpu#isAx-gCk?yfpq0 ztr;a&7!eqX{CO$7^2T6cL2{v&=>rkf-P$epw+yhM%qIF#d(!o)SicmFenME1`?rph z_L~eUH#tn^+H(pEepKNov*7Cx@#X4AV|-`YmeC&@&n*c+7O}I!b5y>!Sd|=^HOfz% zqHTtLNv2-S<`&36u1$AH~8X&W6VDaj2#g-a47RcP%msTJ@aA zQZtVJvAvzwYxJct5^wHNRdHh$j@=n0Sf1eE(iHW6jB} zD|8=1;(K{DBlx^k_<)r1{Qb-Mw?f|af>w3Uz=UE!MNNg$tFs@;-%$}OCvhb-ZdP>8 zzy2^2%h{Ml6?){b!m7*QKUO@3h5UC&fdiR~WXcpM9U*67l&aGrOFFZ=I@=2x$C3@` z^xG!4Ws1;hqMumcc!a5hr~bacu_;Qvrc(DJpl{Ht_bnf9Hbr^U!fm;1+bmYBJ)NhY z>6!r_g(WGTsC$B2=aWB%Pdx4Iq`lyIE#uQ-ltpyq=6Z(la9)q*$oJ$@U>DW<86MFA zMGnth-=u(@ktuPjFwY@sQI*b5^*`kM6rZWPigEuxuD-G%>S+5KQBXjnK^ml_8>G8a zYG6p|9y$dS1f*l=?(VLkq#K4#>F%NH8SlOSHxHj+IKO?)*=wD()~08TL7F#5bc@n- zk1E$A_4$4*5bHJNF)YzK@Z>*l79T|HS_yrfD`L{Nz#jSumFC<8W$y}RYz7D z=_FtRU3@Bocn;QXv<*)pk8_vMhO$2XRWc7blq93kwj;SjZp6|@LyGJ7Ba7B6JWDFk zPV81Q8`vpFvP%igk-2#@d_I&@v6LvKR!yAMHN|QZS-EBJq-`Ufa_T?tu z;{AuHw3B^!PABSpe)TZdK@NLD#dHhhDm5?RNGS4Sq(%Dhsvm{P!IL|=uoKf&pQ)w{mD;Bc%^RpFL|(^+=|o1*1n%Gry;Otj{o`h|8W6-aj#q5PjKD1F5j#y*G~$) zOT{jFxoTW9@p3C9#DNg4P#p}btm(q0E^dUEJuU}`^8($t`bl_PFh}#AzqoL<$nYZC zBmduSp{bXbd(G6moTJ8Lq?IK-x(|~Ev2t6bSE1ia@#Pn**y&%2nz=x8@P5?Yz>7?o6jGDCn}ZT7L1!e@u^ z;oHJG#g_%etug9R<*uPt1*bK@mU7hWJTrKwOzw*30C z`I_>&wQ8s!!I-}KV3?%KVqrILTj1#4oha=B=pigrXHS5cUkGsm*<)u)nYx~~CHcp}P z!~K1c#udX76AQf^Ic||wvG21h21GIOJrU*u{C40X054WVwcqu%Lrk8zL6e7-EZ67f z&+x9{?T6=PihaU|C{-&f9edw)V7b}=-VFI}rXQJ*6YN&Kmi+4cy2XK#m5wfI6ZhfT z0(OL@`P2nFT0I`cv)Q{P`x+xs@I*vLCZEMe`Clpe588sSj8;T6iNgne#=^5Ezrn=t za0Z)H+0WUp@IjarS^~t$5>(7mb{JVw;~V*N#C$Zn3v?D5JrN0aZ|QU1YO(B##QM%x zri|ieMq=e5o%dT7xQTiWYvfEtyOElv$%iI4?Y-);Ocfa@o-dEKccZ>v|2IgPq8-K%qo#zA3GoSDj>P9KCq28@977f|0__BI>!K^X#q(Alr*GBiA@Ag?zPF1^uU0KM`>pT) zKsRP1Ktm6oWV$MO5RN4$yttt(s4Kaac;3Q)gW!aZAxJ5}9BHc6lKVhwaZ($^M!&_8 zkFANQ#nq!h&lf23R=b`vnYk?x5C*jhyrc`98oo#p%S%4zv-nk;d_mbbAGTSRzCRrH z4kWNr=q^y~*m@3~Q_Af4+E2unKWDQx%#Gz%A?#^34x-9GFk> zf~l547n8VUFKpYtU3|78z(wgZbIl_xo}NPs2Wkj3mVeUwJfbdhO?%)KPsE)fSjL!5 z?#3nlAfUcVU%~28Gt{uZxVfruM&c^ohb}Gd zhHW+_Wz5ROsil@Qgg=kwHES9PtS$COC)^XC>@3>jfB5%{5k}#-NL@qC-~|rO^(YBa zm{u;uk&}+9`&1BdcI#N)~Wa6#R5oIW|8D%uX~k1i&K+9n4g zS`u&THiOn!F3~BZb>nPp3|RC=Do#_-F70m09~ZRfw_pG=tl9W16{B=Ykis*%yYsvM zW&vdp4sLNo0Cm(VZZ2o1FIkA{hW!x~K51llOh7*)N5vooG8i*> zH#$?DIFL}hLtJB#T&NNG^SDp-I2drm6r85E3d&PV;rt93SPZU)DlNWdTGA8O+2eMh zW=}oPt6dhRoBT$WL-A*vukQ0>=YN^-OZfREj|9;ARttj*AvqXiVdZKu(+yam~9Ni3d*??uO86T}1hy0CKrIKNR=e>YshkY3Z zLqervE?u%3?>XI+O>?E!!S@Z~PL^|XD@Q`PkXMXtE2 z)v6LdD(7#=%e%s_FH>yj0fr=?RgQSL_9w2=;{_o69e{ zPKlONC29wg_Y>zwC1E1g9L8#vs-%#wtY+FNbP0#}%GjtZO>K0%M_TqUpIOFhXQmoW zhBsP2d)0=#lyQ9?AWD8D!d4w#`llzQhAK6N^}9Nn)IAvKY;M%AL@}76^PV(UN%rGc z5`z`?X%9#e?zLTv`rq;_Dm#e5)>dZN`KwMZB(9Nk&5_)~4PBCO3z1N6~82D79f=`o*-b_9*HwBA~#0W%Xrb}^jf^MOj%G7wqu`TqO1 zZ#t3jv_(U&63)qa0aYe4ykFbc3a&qu9pY>Z&Q4ELnW|NJ__!ZL!7h8#J2FzCg`B!) zxO}096#6hM(8i9H zAhKRj;dbYqXYdocLeFBtS_2>iiJf?_Q2KQ$_?NFX!b$k^>PHEQuBN3M)z?CCgz2z&E155YPtZlJj?VDjf?_Z!csA<9v^; z33CZ~4!mOTmnsxFID!mTZl08<=-V#uOp4#W=M;d7SSNQBU^zk2=b$lB_VnN5n!rgt zZ`OF{PFE^3iNrWd9wGFF-v!)1?YbQcNe10y2lIY75>o8WB*9mPlhTocrVXcFEwAtK z0foF+%&!pKY0b2`{=(Nr6O&ZWpyKA*o;w(EpZwG6{OtJfEDvK96MlxYlvA_r_jOpz z9y%?}s5+k0zU0p~J^F#TG$Y15jsp}BrNJ{-v@rnk9nU9dGOC1;gIG?g+CUsD`p_zFLnVYqTE9%Asq() zqIX3FA8D6k$X99+yGm`0gyfoXE{{hlcNfgVq@qWY2iDlb{{Bg!#4>mI9wF&CAkk$~ zs$cRjx)Z6$Cb*YYS^D1H(h{~N#Mf>j)8a4@f##OsysY|+A?LpQX%%BE% z?>_1}SCQG&kn2(_5N{<_za&ibSX{m2;4!>?uZTw`skwlF+rUk2AH zv{ioj>3HU^0uH+AEt5d7^n~9Ij`npjU5j*$cgX?><%kjaFyz`U?aKY1MCI~@HjjKY zx@4p86$^Nt8h`f@*;Tzws9t?q0U~&F}2QbKq5Nj^I8`s)|z;5ie=im_;KRq049&YNj%iV1^qn z__@Y)_X*(>oHe>z*H~F8PLW*P=TD9OwHA%3to7Sfk%p_{LP@cSx7y<_b*YEH;I)7s z)g&v%;opNu`mmRW$HjE|pcf%d$EQnY;nww3Z~h~1x9+&{!K>OiCcmtw=NDnl2VBap z8}l3K7#Nw51yJ_|E1>V;>3pbecQ?xC$I%LhdfAKoLOi6(y(vi)tL8Y^$MlxMNBRKE z>GG(lZJaE*X$Lk6$}1z0yY6WFR66vgFZ-Mq9H&wJJ-k;_0*s9_02miyO^7mkX=sh3 z4kywWo)ysTh~}NrdUX6&E;3x3M?+H_CB*h33mfie!#`CCg=P>ws>=5qMRAZ>y&O7Y zjI=wuor(yjP)7gHKmYa(7J`A1n1*4}=h z%=j5iN;iz)g>GGs`adX`E?&8V#$QV{?r2(!(3J>|*C>8+yU)dA2l{gl=8(g@`*q96 z$Cx=bw%aaMsd7135F4uWv4sZ>9tI z2w3=$wblCJ^SL^N+DzEa^ZaE$c!N=yD0V|D>*&oB-G+XV39GDO z!cKlw8JfF5ZpG_{zsVd-)|QM{9ll$5IK(RcZFO7zx@U;CI?~E;QF-dyEqc2C>S@dF zYMPhC?!Ya;LdB@OCK9XW^3PSGYOZ-WHx!C)&w*xnz|lG@ub-z~2{9G47bWb?L4(ZRFge@GBJ;@`!9MHt4~lIDUHPl8OeuVsIG9E`6w$I%5{5bSjo0e zt7h9y4cq(}li`Z{fhMuIuRvutSPvyG3wij5MpK-CFE?b$UJQ`!b zy=MIiAq#z?NCV&CbES+c9$LVgDPT(OaIZf>f@Pf!hmLM(XU;1dpMoA9oS(E^yULh2 z-s5Hss!WjB_O~$Sz*Sjw`f{KWK@yT@h4R>NiJ->M^pxn;6;-itejd9jpqE)}DY`u9 zVFuYJ;4Q|U4;1}%Mv~)cWStO7?mScP=vu*KAj-MKY1`9ICqhTgaQ@F%N9n44*_&K5 zM3}_2_gB>Xe_wo;oiAW~h(A!7EQ|I&lyrnCa#bAQl!TyY$+#Pl1I?fit`Jv6`Xvr~ zp+tFmpfAK{u;P79Yg~Bv;pV;lI@YY-YQo<%0iWN|ClV&M>DZ6{cGVMuR9vg_ZP~5I z6mBs(`&M~?n^mzM`=d$4YX!+y~N7LG!hp5Z^6;t36*PC1F%Bu zR^jcXhnTr`9l_&srS8Fr0z%`GL_T&4t9KU#WS@%e_ae^h^Aw~n7OQ>EmnL zYgMYXc7K|ElngB@LNSp!fCV+KExDYMnlyaB!RdGO3dmO1KD$eMoEH{47OL9&*dqA3 zGt=YqJ;`kH>xQj=dkg{1daE+w=EDr^DC=OsfRwbXAamcW=&p7v@l8me z*gU!MwOiX;*2=y+@W4;VfO!W2=W0kJNPBbcrylh`U|gOOySex966*vp)K6c8v`ug0 zA%iNlR6WKVQ6XKD)8!^(CSaUpTYpby&QzwM(xoT){B`>l@UDgzWO8_2qYXAEU#vQj zDSb~GQ-ghu_yjPIwNd1VkL7jf`LwG)$5X=>;1n;{H)u=a3M0?h&4&`jdOh4VzK)su zWmA7J+?%f=)S(CTfcND;U-@!X+&^`$M^YZw6LF7LIbE`jdhjp!%2>TW*R!ioJ4dDH z^e58yWe?IrBDI$_GE=3eejGGVllyv$PW5LnbQ*rrgnqkPQz!JbL0o9Nx_fx&XfUFd zQ!=;>IS%@Lu3l+)`>NP0~ZBuC-xDGp9 zY=r_?g4S+OTe%N&15aHt?oC(sy6!ZlTQ)C^d$8z0jAi`zi{adu##K@wzx7ZZo9;vr>|?|4N2OaMWaNTGD*rwJ zP)IpD3$z(J?D8z^nkKDL`V~$LM1m$)64VBP&5fhV+IA(c@of@WTJHmYA{Nf>!&VLA z>Cd*OP$PgejY`yI8Q)MO?bR$JU?pjZX!y+@72-TU1}vp}hvTM5d%53T7fI>iRacVUVlhL`*K+Ynu*{-cVxox- z6`y`$cvyFqvd(R1^yFahsR1kvVy1caOUWCsy!-MeO#sJ4M&uH&+2U!H8(d}+DW`ar ze**!1XKLl)dfo|JxFf|r#VpOACJkRxQV4Ihzm48i?q|Js*}gq^P;_iu?Rkz-jvx4q zWTvsfTzxg)Vk1QMWC?A$4ki#ja{$WqSCR++&5SY013lm^YQVZ)ne@$88b zO(`0@`VPW`VKeJ^wL%aQ9ZgI&3)3PAOqJWFFl+`_3cW>4qLL{*7MG+cI57rLJ- z)oa!z=1QPDlp(U=)LfO9IJ`aA=CpCT>lIC_Plr$!?fy2_{9?}+pa5O-@=6^Rc`J6V z4(<;Ex1E9$$e1X&54dUeL!RHHNa}d@?xy;Eal1JE=IFDpY;hg<2p=tY-OA#1p^q|H z33o&;>_@EP_S&v<+lz=*id*Di)Ld8gQo+l&?79&B`#LQ+ znP5N@qiSf#$}2y?VARv#GYj<2gHLIozT+m5<%@5Fe$n$Nc1f_7Ki&%JO5~MaitxjO z7gkaH!boD={+3fh_plDn0K?K&!!N94qja`FOoS|EPqv7~t z!5gXC6CT%$`-i}RU;%sDt>j>V0^0@_rR4c)j+~sq>AdkAI(xH3UX@T<;wUpFe$v)6 z?Hj4$4iO?2Bwd(O`o8AtJo3>9a=rmRE1?=L&sLAFgv^4|v9Pu!BCETo;_ybxjG68Z zRRp_tKAZZ$?3>w=<`i9H=QRK4V-BKG2Hv9Y#ewq0S$?1u5z7E+&X1$Qu2=Rp_V5Gv z!6d88zIjZQ2J$IyD7?dKwtuh$0Fnb7mm2r#Y=A|xSh!pXGVe;b9aUBSv3QHv@t|}G zC+A_q?~a99rSM?;+{ufLus;$K5IG#oQh;oSROK2ua694oMrA%x(8RGr3e6s+9>c(g z%|$*|cc!7v+DhOiG5#>a%Qk$|7h9=@Rz=an`KmB4@V(z@x5M>mAWGgQRcda=_&i_z z0iT#O8Dm?&)=#N`k|LB90v5hz2hW3CXJw|WuK-v;<1a8R_-Up+i_UxkZ%4B-f3cC@ zv+>rmeE!m59X^y%RFYNAHmXq)3yOlkMZg-7(vC7$qFItcEIZj@f*det+c3cv*2H)} zzvunH!<{)+!Th}!;B!IoH0dN*{z^%~RhskZ%8_rL{m-YX)Sdk=ot|v1l@#gz(W6|{ zw6#+EeH|euKg`4Yr%9D5IJDCCY7Wq?;b0vBA+7CVDC6aEx6cP|SK-o|t2mAYyF;#K zEvFos*DCaqfO>Z4V)$=lb8xiA_f&!*QhjvevImN+-&4~`Xjkxk`~9gAm3IGTZ#L2` zYx~f}vowE`wcR=A%uCJ}HfJt}*GxBfm=}r`Rw(`Z5;a7_NK^B=Wc~b7MK19;5ZJ%d zFE#F-{GD6eYw=F(Cb$4zz2y5+HM7F$ZL@dR1_1+EgmOLne$ia@!-OIv=tSIQwVO5F zFuTG}*c*#D2$+++>s|pd?fn%r6so1Y=Gq*ycA-s-)$fKkJ_yAEvB$lA&1E{I!+LYt zy>@Z3I!N*Ob0OFAAR{OtWV!@+vf*(p>K!g+&5Y#a36{X8MaSF&mByBCzJG6*W&l!i zaC(4-T$BdEUr@P$abA<#7se2?uE_6FOR0Sr6Vh*xtOQ)n7(N%Ne#YfpTc)ATi`fQb zn^=^S9X9)rAgIormHzg1V$Y9&}uDoiI z>Mq+_X|Ap?{n+1O0$;SK?bfTZBCE?h%R|ZT!1JGI`y!L9rz;$_9AhY%&6o3v;x((J zOo>%Qt za#xL)uPD=7D?lvcQFD~u{PfWCn9z^ruWV5_XD~?(I6^Hfxr~f##B&;r=loN&z!NT#=WOeB1x0{-{$NLfgR`otvON`7SdDxYLKg~F@9>F zac}Px776<@(?LD14I-x0vchUIwyqztWLv0Y*a{_EX_>EVu-RSmw|H)#RaYFv(^kVM zyOE9s@55xa=KJdAHd3pu;w>k_i+8n)9ld#vw>f0=1Fz(NhAz2HhdU@=$92)tqv8xr0t z?C&uDiIYrW`|4QrQTG#dk#x(&m8L8fb zkKrR_COmdeL(Q1&Bh&hNdwaV)WK~Tgj}B1u@>FUwkcB+zaN;DDTLB8d=jO-yk)prE zd9fG5Nh(q94BZP{!Vbc@*<^#Vx&HOv6FtNg4|Za)UGP{gvI5-_zOU z4ayk?%`=Wchue+yMNd{P{F=z5&|R&;!v@l|M53=X-v7P6`ta%y@46F}gvWvfi?i%# zqODAi9de)u49?l$xNp8z$1#52$F=@3K9)1}ZbL1-vaz7x_mDzqMG>229YeEjJ7u1s zzcR>H;Z?#eZ)eUoCFX4FT5RI@6i83nZvz&r!-r`Sfv=)ez8!kzpXlq5duT`{jOCMF&_hSHxEjPnLgbYg^|16I;zP=fr!;yY}nN z#yXxhGF7Uehi1EUf&q88(p#>N0M4#{mvWZ|yWP zMf%JAG$t?T7T!fYpe>ZbU0;(?{WYk&RQlf%O$0rrTsiv$t-wULx7GWe3TqD9htaX9 z^jHYij-fYqx&!Z1RHU28_ON&!CGrHGR0a2;Pp6scdd{khi>(C^`5yjbC zDt$1t7_0QSsU?J-z^=|?@y*l6eLzpM>kslqs4V8-v-P zc&qI4Lc~(xeh@pdNy_*4=s)&|T_G{;tUR|K%^A5p98Bq7bG2I5^~B@VvU!u1WPeCi zv?2W@#_?{vJShF@E0xRG;#xeep%eJCkJ4c5@+#%wMuVXv_9C&N2*RNG$ zyAYbO)La4x7uQD2jIhGj(h6o|Ygd!Jglm|8W8x6dwimTBZHm!52R=AX4e+`w;c@A3 z=bw3{j&f6&P$EU9%Q+&`>NCD|4EtrQttQ|p(*yF-J~PO9o&8EnJ%!C}>*cA*;=I(R zMaJ#J38u$U&)PyW!D)+-Z_gF;1vRuRbVf5~6x@eV2l(ph_O7-BY_9}Ht&x;bwuo6* za(EWQvgwk>*6Q#*)>Sz@;rje5kGz~G?++*j*B6GVZ@N7{OoG#GcL>hji;4n8F@nA@j=yAcv%E494$GFH>W9ygV<&b zyr8yA+>;jZJGJI$hVaTP(PZ&M0){iYVeP5#j9)U<#e|5(Piw0y)*hK4b>&JZ5idD^ zsx_z{#jh&_T<^_@$;=5p`!ZoH zi7xxNixAykCG^)F`@_cRth`62{`=0TYlJKrnrBIeVwyc5mw0Yi2c)IA{Wwpx49852?HyjcawJX^i2=c^Scj?kxm%e?aOcdPBGm zOC3%x%tX?hkG#!>Yj^a;$ZyOSrLw(o$sFeK1>gG+ZE5wYv7G~UdF zL^O^9N*&b{;H@m|>0VP%!tjzkd8ADg_?#B2hQXcUJN0qchyw~cV4$T?3#X8k(rPef z?242{W0YwSi;SosL9I0XAXLSm+l*60{zg0ECj#0ld{M@k*jM;0AiJVvxC zxQv!O5;=lsM+2mp^z7`m^;`H@)`YUtzaglAx~=oUtJT+)^P?iF@)-Sc>2gQ`Mw+N;LQYU?KO@u&)fS9NLzQ-OqEyZloLdeMV+xy{0R^rY}%np^T$a~7M#jMYJ@V2 z_8~-b1{O-uY5h)-@)yxc0}CUAEZ#}K6jJe@r+o{}9|;gd{n53`fA|bv(F1brj+W?F zzIvw6*t!#e3df`fqco3^NH^d<8v+4q?HRM5PcmSAiA4YPcXg z&nl)9Cx0r!IF4ruMd54$iYXuO16R$oWkHD{kZF806~F0v>w1A{yhRnsJ(Bj{KFfha zy2mRui?qpYHJ$QWe1#Lm2dMj+0srU_AMdidA#7&4Ty`z{;=7Ixy-*Y_cQiFAcU7E5 zbzhcB!MVn=if?AYycN3jmGg?YlmYgsy!${_@lehV!-v64I(g<_>Ng+ReRt;VjdM4T zrtva;uLxEqRc}6epQd3k5iknZ-IXiRjX`51*XNi|LKf=lm>eD5=TM`3>*}8XCb@!{;*`_OfV)uif6=J`LdWmbCrx1G3Y03>W zvZ|F)+$+j=WBvKqrm6NYrl3uq+~@qR+BiMgp(_SstjS%~NCN*~Rwfr|%9}d}AQ5Ac zo)TT2!h31(Bz4oc9#6BL^6Pitg&f%4`>?`6q;oE5aI*SmAcqKtE*tlfLmGYjPxWH)4yl&XKI*(=~;cMjLPwAu?Gar0aZ%v&bUY@y)a_oF9zJmBW8{ zSN5n_QNVJ;B->J0A(rU7T6JLClLi2VQCsjbEmT>9w$hqvs5(sVBK$m%l&qeg&DT?x z8qiZ*W!~{Y_QS@}yajI#?9yvH?#5FMZTBv=wrqaO6%x9v{kb$=WK@_+U|D_|&5nt> zafDDNy1O$!++wYfHA;~`3ARQC(mHz<-ac6L1u`o2i#(1eX1=%;-xLvX6vg5cKcIT` z3b0INK5UQ2in&ABOHyl0Pjz1w8rUIz=t4nyQDpUMbg?or46LU>h}UreOpNn> z&X4k++QQNr7?FaknZJF107aQ$pou`(D+lBsHYji@<%XnMywz4KM>(euWK9}PU?_aF z(LxT8!&H%1RVy$l{HxKbe^^I!P{jbEv4gzTn#meE4-xm8dH1gB2MqNqIhILrAD^Ld z0l7$Kagj6iifXzE$Et#XYtl2^9i9^;aywBa>&UygJZ_T+8l1zray{2C+nf@~IJffz z=ywrzkV(|jxn*9Fb4CR!H9*C&`ZFe6*3In{EzNhZgw79nG|CcM9{X2ozTKdY`uN>3 z7IH~EyxGnerFC2h8cq6^KIW+8@tH3!RYg|TP1@Wu>UQ!dMvs%feaU9+S>?)$URYl1#`mnW?Y{{a#;~{z(q!N9^kMAWF(Js+uG$ib}h?}5lf`mtD zaXIEpi6c%zVD*VkIg?HwhIYE8z~OWu>u1%oow?@WO+|QrpicEcaYIm6to6r#U z{)RI6!U+YX{6!oQ0KLNEeNMPSv$A%nhdZ$TmgL;U^%~PNvD{o1^QWukZ@}%Wt432r zE1&-4oa$P6nQV1Vy;9*E6_#&M17u2nmZIP$105jBn0SSj-W6B*~jd8@+I zsxP1zR^TQs+iiZsEKm>?x-L-EK>~3AMfb^yQtXI(XO=KLaqZVwQs7 z!$$V~#0{Yc$p?ITSYAFs7@wwB>c{~2%7Dj#Hn|@Ty!rB)Vsv_F=qiKE2rKFvTapGt zzTPUfVeFtSJCPEwJjH(6a%Vq^%h7wrq>N!vgR>0St|kcpynBToP2A!E{T0k5;wa(D zwoR(^v^@@`kp#%Q3^}#reG;gorr>xcx~?T6B*21&F(X`DfyVvuBN7v)JwK0DzMNsL zAIo~^*^2IX;^-Uk;3(^;8DP(d2)8Lnb!0^Zlalu=j0+D=_ovwJ=BS zm4%7RjA-+T``MoofSzt3{&Y4OAGQCiRBB|lu4?pykH|XM+#gJy3qsu${5A-Rp!)MDq4}{d`GlbohA-x%eFgs4DKjZ zBj#cK?lQe^;2%@a)L(i!;_)uNT$&t+EUZ8G@) z_}v6fPDs8OEI>!~hij1T3iPtirkYmjx`1DvTQrLst)b=1SU_&lH`=1o?l;$82ZzH2 zt&}N+QCqV4k<;&uPlk>LZpB`=I?%kWRrx)+OSl`sVMWZmtN%*NX(6XAYPP{02oC zO~_G8m(GVxY0yfdHZLobPVI-wyXo`EwciSd{po46!6cLnqVtv!d{QIV z7PWs03;!gwYkv)65OD2HRq(6gEpzg52T<*|un_3-mNe=YIerUl@>E}6UGW1ef5mFh z+`|CrCBr5&8-h&dglm|rt`4VU#976?l)mk2o~%ZJ@ofj+kqGT(`}(@1)7%rC82lM% zgMgTQ56dNvPcnSwL=CUc6w!h25Xgd0W)ER72MHV!P?Hnfb0o87Ww~-j-Hb4igPYbp zr=YG?!PusE;vpK>UU_|?c8R}g)OIgG%TPaM>J%oDp%j+xuX;kMNe8Dc0GBEP+^L=| zl+EG>6}-SV8=Lu7gU+Ogb@)Y{h~}0A$3i|&!Vk5-xS~RQzCQ%p9FV{xBEIicfbfNV zq8-FcXs=Q3w+by1aancvrV@|y z0a@cJTyX%&ww;qH6%jH2_6>V?&8DqRRn3j1Rgkx;%t?XeI-g;tLn*aB$ zc9Yh`!=Pw_c$*_RDsj;OF9#o-i<;hbShBN%+C0Lf{N=2Q6B`xrJp5L^kk@*8XeXmR z$*=tXxB$cgf2X^QZ>#Bg+YcS5AEC=8%V}k!88a91|9KlZ^?^H&9ik1N`u!4h zy!wNjnJz*641q_(gX#T!x7hCByI%Fv-QHDRH}SZRv5`RJhI>PEgde5D-Is}BjCDjb zLY5auS7aQe$}O@lgoW+@d!^_!V6Ah6Mg8isR4a`G24|=rod&HI z%@kGG*DJuKkV^{3auH79w47Mlxn5H#ljI+p6<5ogr{KeGlqxM3EgH@kXbQJf4G~p| z;lO0Q_!YjU_1{Jk<^`XI|6e=0f5e^Lm|3}~v?hydaWa2)Jjt1FZkAa+h~tfofY4;T z%_YI1vq#3a<}dKkDLGu)oFTuvbab3V@&}TtK)|4)r5m7c){IUB4-3+7ljyTQg=N{f^8NMrfVjEVch;s4n6wXaB834VZLk&g)hfHpgYabs`6$E5$GYtavh|%Q-%V z!zqc9PF$a$K`O5SME?+POl`ZbHlt>ik#c_6vYc?Gt{2aEMxls966d>#ckpcvUktd2 z_xF{{T#+lXx=x_jL0QgZ(U-uswr)`qrm31Qk?q`I?wU7>Ebf`G(BBr6c~QUX#9_Lp z$1|{c09*jXop=}yD;(-q2!NqxIi98dC&LNB4tG??GDFlPcQ~Ivh0$`R3@2Wk5>AFX zp&hD70;7TDOqCOiTNhd>&$5=gN*DfIX=so0y(OD9TMD`~4l5?U9zD>}#QR6- z2fY6Uo)k>#b@eNltOpL$Y;W_wj$o@J!c&T|Oq=e`*M|4$<`#L}IB%wiHXAQc14851 zxVMQ-!GliCdH%imrfFg_ecWE z7I>6K$_}a49ZH z5L-gRA^gyh&(8~q9WuGEk2O@CVlY-nsX~5x_pjb8iT`^#)E&HT zKmZI_Hhe^vPSKr|_1{GbR4l+((VAbr?1opg@G8;N;@%Z)zFLJP`cuXb<9oGQ&M60& zPhIaPZ4Wdh9;6K3Nd>`5tzyd_IfN|FtpCnpLCBKkDpPX=f(MPcQhU|k3^6ij=eiSF zIhGwZmL-o7@8xR(_QDN-cvhO0k-4$W-d<7xvXGxbjp*`}o??G{vxdYa7{&K6esrSI zrWl?3%a>n#-5BK-z3e`Pr?J5QL`mc1k)EQ>LkF!~@}qT`{1@BH;nX4T(~nukrA7Tg)7Q(1A)1Zu$yQ`F_w^ip)`>q+$G zJOh9FRx{+Q9S4>${z&+N0M9@GOw4*$noPStr!Jub&gEAS`8^kmpM`@#ilRRU7J?CCzPRDK1^zq z!*S!APXpYA@A8D48&Z+kB=nQO)IKc_e%jqLM=xrGm}!=Eh9U#-SMP`pAllI(IO20aiJg*|waY+(qz^x?z^QBJ^_#n+$k3Ay&eYH2%pp|XTo)D7mtqkIV zZ=w1WT4iGsrod(PSJ`|hrxPd%Js8R8g5aZOrCm>`h&B?Ni`GCW7i z5g5_(>=-MQSVHELJcuN)e}h&AKg9?o4XzWN`{wgK{zYM3V_WH((%;B1{x+#xw{bReFki*# z+S1NZ^Qt*PGfAQdymRufSvV)Z z&vrPyT!e29(R3z3m9_pU_W?7wV5^*HAMZzN48N(>Oj(*tT8LI3{T7#E4F7N56b)a^ zY|c;`sjJYQJdZGa%onO2e2@;9ihTx~SZeV1NX8eG4fI(7?YTc=Lv*XAqwRSvBUZW_ zR?lTNxFLKvlnpO-IPZ~+4KYE(i~RY){oN8^t2 z^#spph)wiwwC()mnZC~uhfAkVGF^xN)0s`AO!Ati&3|f1&vYLiCt+e>$<2KI=);C= z!d5WG&Ok$#t~m$?q49^q3@})UbZ%aMf?V!|;dj>Z(27v=Z&!Q-84~%iS0E|Qbde}p zF<7mZb39t2rHd3ficgS@h^-0+!pAW(PSiA}rrKC_YpR?rBBgltThG3v2A;lAc&Eg; z7nYzEV1EMtEeHsJU|@dP1fjM7U4B{Fi0E&F+^<$M5mrOWryHB)llw}r`8wb>%jv#{ zK~syxo=Lq1GLDb9HGLaL=Ix)HbM`kugi82g+o!v`bcti0c$kU^osdD*aOk@`B${&m z1~|(Dr+vLf@V$i*l*W3@U)5%Ob!raZ>?u%a(#Jqbm%_!7>OOvmCn9&DAKfd+HtWJE}_?$r?xT;RtgraIzDCD9dD; z)~oHiuAm=WXUkS10I42V|I=q7=yAi%bom=~$B1nv!BbocpIMh~N+<17+UF~kV7#ipTC*B`@+B(K6XOb{;(wSPUVOg^JOlqk-4I!|0j%0ES?^K%(B zi~A2N+kZan4_%{g34Q`fE+XWt=t>5^{W%j7@C;cPp@a-hwGq-YuJS@Km2KDPm&dC8YW=&dzQCkvtY-mzH6Bj5UsrCEG)EQ44rl&QX5478ZhMPx!;xEa^d6!h>yyg z`z=s+9DoIU<$(=@H|%ho-M74*{V=ZG&b3mLQPW#3mFFMQP(YI5d z!U3kBpM_I3FLuBf6K3ut6C?A+h?iL+ndJMbUsInv6F;WB!m3ZuBYa+#Bb=chTJK6` zmboGN<6ZLj`p7CK`iUUZS(@EaW1CH^>JgSNXdcZ}r?9>F%+C~;__=~~pu*t@7U(ag z5_<7ljd^c)Ydv0lLfL34Hg~Ps{C;%4V)B&8M$u4jj#* zC)duv)bFhPL z2TNV+tR4%-dm3YMuk0L+&#g@A-Y9pwTPr5{+$b#^$$d+0BAS!sQA})k7mWN@bWde_ zxV^}~EnaV-v0(b}t?#!)n0I_=Qye39;W$NDxWj3i1+X2+7M^hRi&SJ% zOp}XairrDv@=B+_pSyKO-m2mGfTHi}OptUKA`b16l(@uWgC#Mwu=6*^Nn+k2L(wF& z$M!yFt>Fmn?wDI2&yY1@X^1|0uyZ-4;Jq1D%}##B zoTPusixjJ$+Bi6+Dx^fYnNCK)Jsu-I7H>NfPN8dDmd*3(uP@-EWz@~@^LU%hH4U-& zG}h-EqlD2nFbQR^~8{CvO&rhOL7+srvAPy8v|z&t{N?NW7bAj zA^yEL6gx;A~h4 zvEn9F!}TtPv3bbok^X=u<;`&1J)-Y9x;%`EOA;y;HJmsJPxMbPT@JUiHJT-Re^p9T zrX<$1Oo=RQXXC`KRF8F69?F-Xj|!;`fPDh{FXx{q*=|jsa$uKJL2!zJ?d*uwLHa^- zwVFW8&NDNja=R}><0Xy}+KXkX&n1PZF<)_HoESZYjL2a$HI+Yq$=$egsZT@x5*>wb z)9uzyj=}9aD1{X*12>LifR$MEo0;j2KC|EIr1UlhF^0aIarO{nguU{~;``js1u-<} z=nU}TjKFQ8_|x|*5Bx*$cf=EL@-7WdGBT$m-2koGqrr)5mvzA#o^ z4n-}09H27<&1o?7p8GJp*}&0T#HWEcCV=(>nK>ZrggM_sJf$2CDCPLsd-~0jq3%_a zk=Fu`<76JSO9e^9JB)PSlCCFKl8d|KZb?0VXLqFDJKTGP`EN)RjZD519;gU@{jUn zB#5yU&p*v~<~Q*QKkqa?i~+lfFu?~BNHT8kq*GUH{Hs-vDb) zaoKi=wZh$0*-UinD#)>DiM>wsvpqlEJ4*VE!H^dR1^aCkl?3Ei-q^q*vOx2%v?xH4 z0$x3OJ#}1w{-r5RLOU+5Ccq=rkajw;`06e+5if2;T1RDKyn~b9lmdmZIu~)Yl$-$ZNDT!bOJWcUzx9^chGK1jdlJAoLcH;9M|U z0WfkULz~8XSS@0ePEc*(gX5n$8!$iu0PEFUO0%JJxnlqK)tqhZ zf+bDN_N#e>RAe{vqf3j@ICR7c(ILS&5x*X37ha=j32K3vCh8bOf;T$YzYZH z5s zGNM*PMcK|9-%RZ64QZvaavLRoFe_17Mj!W$XxFiq%0W>N^+Qq_o?56M)L_<@rCOV+ zRAgIZt&%|P4{}~QVeWHni-CeUTj0_2>dsd+1J^ z$kGEN?iHJ&ASdu!TI&W*?uQu}OeC`hYRsx2DRrzWdnWmT)8z2qEWjFJ{v%>uB5kjQ zWgN6Ubwr^^%43g83J|4ISW7B$ZY516>_MmEDeQG-dtqsMxsf5l=uBZ|Zq%WoCNrF% zEgDFV;9$Zot;+e#dL!r#k?=S(zpX!$CeE$;qpW2+U~4`7r@(4u4+7rhpsk zX%2hZy^igF((oYR-hcD`-!&Nc0`w0PFz`z+wWoZ(r#_%8kp5xF0Y28T{jYwo0au0e zjd=G`1aUN(p0`;N*!c%rbiaOzaLMOBwy&5^|AFGg1=3jCwON6be16TZ)x!POHh%cA zj=;{vcsy?na(i>=0JlPO_19Q&fYlHH7-RoCPSqa)S+D07l05Mu4J`?rEKvhhu81fOxT>WPE{n;q)7^rN0QokGAT+ z8_XZRoD12^fFKI~Y5$G2X5?QB2J91%6u^=~ULn09*0%q6qapp*QvS=#88jP3S=27% z@pSh7f6}aqZ@uV&y_}%_`f~qMkx21FO#%4qE<)btji&KA9O^%GOJtXSJ0nWaaZ&K`A%s9RMvEn0Y!Akg$a~k!fJO*MLQj3qAb{DDD z2Xt77Cfo>qy4x49cURwmA+b76hxK41R3L(4k{wa29$V|TW1=sj)oSM=$KzQV zw^-FEgaHw!U-H1!_Gq(~xHvA2>-CDsWm!@w7I~CvnWYC1*2xq@9R9yP0I??O$(uW8 z+n_>J!tpNgjLd~Cd76@J`JJ6Y^FbVlF5va4onX2F<|XYH!@ zLCJUILs0=3q_i3ft@6&$9ghUIeg80mZne^SgK_VI>k$`6w;y(ePS<$p_avoZN2!|j zpYB5+2lcT>i}4njTz)mqP4@se@jq-0&!B#x0>ba^UZq6QY|};kx`jV!u=~$U#EbZx zju?|0ykN>tJRD-tq0Jf<7gulWbRWZpljOTI)6%MYbI4g?-k(sXqO}#wv2B_5hT|^! zez#Y#SXsu>{fAFR*Oqt(RTC+4T_bpH)aY?zYiOSR=P17$InTiq1>Z9$W7+|Gm|_w8 z=}B7n;W8kql2`FAT07!qcF@~15BgT@IEIP``%4z{+B1EN`2Hw88!eGyB;*dRj z=`i@y#IdyTw1;9c{f^|+=Svb90PKdqbQ{Y!A}xw_*jk`Jg*8;O5d3(!JpaVLGc&)S z$>O$ksz(bC3@BaZ#OhM`2lSo2A-rJMb?uasMhG zZe@7GD1FdKVWK2q|! z0h2|wIs76Vw~}AC;>#-Mml!>+voAg(HCVTg*uH>jvxRWv)Q=Os?4=&s&gCV6mj^hO zLW6?ig9V`Q*D34Q(AQ6+)EUE;&z%U_Fd~zT)m#`W9xk+ zwOYDX6UFJq=~o;5lkd;O1X?kQxh}`SjwOlUu?9Q`>Cmy06wK>Bs!e~Y6;E^3sT>qg z{F{q86_^S4O?#4&!tg)@Dsr9^QWEHGGZ+1nBU3}irFr`fS_w^8V$jMZG&j2d15h=5 z%)SGUh=QZQ-)yB4BiBv3B)!@22Kwmw@j7uX5AHj_QO&s1?-|g1znJ28r{!uc(Co6} zK91+!N^;U7K`G@j<+`85<~iY4%7=4vkxttOjnbE^QLyvXvLWAAb)N6VJdGymVu1;_ z`#WCgibYBS<;Dx2`&sNLbYX&cL$j3TjJWs4Xp?bLHXh~zO*Y5v(zZrnh?GbowbcTK z-4`BLFYBobTV5q|(SlltA-XTYN4BLEPrHp8Knu6Q0ovoZ;6P{ zWnfL}PP>0UVWofG>S=b}fmqAcYy+qXWpTU~?p%Wpt&ip;*HX=S^U2fDrb?-;OKS=n zvh&|!2YL&e;9RhP%#a|4nbPO^xH(Z0_$)LvmM0(kAB#tSBVyYeu!LNsH{W|FprW5I zLYvAeM%-zN1)WIu-NU+AYS=_ctsqj7?YJ??;^Xidt<|w%)IJDda9)Dg(qnuDu8!vY z)}?nlx{JCMGzdQ5TPWXy6B{|G_+sz-ZLcjJR`|3Y%XVR~NfdwkDy6k%K{I80CSAzu zUX-x)F5{PwApHY?50W~cBXDiHneVTHw?y|U6ofkx^?#-E&<@M7;?^5Oy`oUh#yUlN zDYQ|&!bo{ALqvK}ZK=VhbT=vUmiC3Q+VgvNRhL(T8KTu?{W_98B1xK|$RkcXIpG(` z8M32HVHr_AKD0X(pty_XE(sIq#`lSUy8E+fJBC()fBUPo!qx`YxxExeebCTXJIpjA zh@l0%OorYBY+!(tA_B+BwywqotT#_^9#Z=X=I{Ul6}4`wvzR8DXy?1pII(jx=av)K{p8EO%2dk_unk4JH8t<>gPnTEB8qHx#3uLg z8Kxy~9Dn7c`{aDcw(6hL&2a1a_5CzUlPcgzkS-y%Yn=*#4<0_~vfBE1pW-iLGWHy5hPG z7gL>g_v$j))793A*Cfz34+U+)-8ke(=l9Dy46nk>JI@eHf$ISu8D48s;f_eMN7d?m z;__6LO3Rq*An(V#+fGr3W48mJXc>N$l?w!@A2$Y;QvI2hFkhRNa4jib5xa|?0fxi5 zAy;c!<$BTA9ksAT-kvpp7l(7vaoTwXCEuy)AaG#LBmcz^(@R_K52Ks}X0T9Rid1gu z6R)H0ZS%6xcIJ#6etaV&n2W6Os3|^r1&?a#%i^(&hF?iqzM{P@pJ~cCXyepA;9_F2 zwj0^)m;KwPUV>Jp5et=vgj27Qb33OV=fZZVZ?>r_M7XA{p6| zAbE~1!yIfjWMAfxlaz};-x63|zRToSO?mi)^*!|GOsDoyP;fBPgdg_^*DO~G|IgvQ zJe8X_(e7vX8lq6D%d71KGhlfKV`UqgJ}rWH-qzm&k0hh2mPzhX?0ar9Upjo_H5XIU z(mW@nQZ+yd!wJ?J^74%{nhTz5!d$?jg@YqN6c`#RMq9L|n1qTs=_JY<@^M8tM1{+7 zPkg=VgkSrXcaIp`U9ZgO2RPS39Ts< z*yF|u2VP%xMa0^&1WYw{)W!k{6QQg?6}^jd%f@SP!-3;OCd1YwLEGDE)%QV@@vRlp z4XnENQwP}mkK3t}{j|2(gvygxE8NBpQSfR+bG+22i%a3Waj2S2cUelH!{KX*#fzS| zNK5Va#-Ji->q+#E>BF|2v+g|6laE>IIZFQb_rcD$EUoSj3`ni_$7xo48X($Zmx`O- zc&+=AnZv-P{>mEALqfnxk|4XK`@_RSDg7HU*=TGJVW^U@DzwD))s8X-^}SLcMb__OB+56t%?MpM;`yd`yh+hDSy; zrew2BVa@+_)daXsvQ3EB(d=&>NL@`mVlm53Q$Y-=eDSQtvVgK!mp>~;tDK@ATsTYH z5rH{UN?A{>MMMnh=d77YRo&XziqzdvIg(|hKXa9y;eoYKD`VF`z0kfp?3Q%RP!y~V ziy(aV42yN*5&Ua1v9%JJhz~@O87-SXG{9}inkXvq=3x`>G+)Nu&UG=beIt&SBWx(L zBWo2t*@L9gkh1k=%$MW4y>hafLqh)*^bu$%!1LGJoIU7c~9V4#wwDU;DJk4gq z@j{0VKb||U=9L5l4!_OEX7tbjD;t${qE@|IFNZ=$38mDT`LQIPh<}K`Kvi+e#U!7a z+9Xeyw)_pcq$cf*j05(_Qwp$o-`SU>sRKFH-sS4zQQ=)j$ zn(fUQCt(yOC(^5Rx`rr&^Vzd|bHtXoih|PqHmj)eQ^DCl>&*yr@I_#t?R!TQ3Jj~H zH2*=yw~#$5deQu95Tp-Hj2 z@CRQT>7no?8<)PC(p5ylMQs{Cchy;Mi00Cg$#M}-%BWVO<>i3w#$Lx^DOTyiaaH4< zgFxnRRj}~&+Y(Tk4B$Sg?LX3mUG%Y+4zo%lG~QVJy2MQ>=|Ux#ZI52Q26ymAIG&LQ zVQT}~9Tzmhb$&PN>_jX69_MS|^c zQaUIvP7eSK9@GG! zZqm5x{nC7f{;|%v;|R1bV%|Ge7MAfCNc6=ZM6uBMejIki#q|hyL~u}bg^>ciW1||4 zx2^YQzrrYX#2nb`t-N0BbIl|Gl<` zBEY-8f3<&d1^-=I8GH*?=y};KBSomz{NP1__#$Z}DZIwl4$f`QuUA3*ps;mZ|H17% z>@q!Xb5nEkrO@~+RG}uf3>YlD*-5~GaW>RRAjhs2pDTH&jPqq&|LcU&I7at3&~S8S ze~%tcuyij2FUUPoxt0Rv-(d9v!DZ%^kElc{Npx%se<&8r#*Ul%8jB<29uo$ff**YI z(2O-E&uf5BXBwS9DZadPJ!a1O*S`{osOJ_#!baYoO>30?_;zG@@ zoAEGEP{&=}K#uQjhx6xOb=e*lUIS)3mBD58-ePNqtbR8SsU2|r)Z{wuyJr#a8h%AI zSCb;J=4MK|TihvWMeh3=F`m8yxO5;{l>lM6GlnptA-g*ECzupOY{3y!kg>#2_O&Oz0vNJ$8J~G zy1aZ~zQNvqCS3doN4?{hqIX+HkJd{hAoOfpb@)!I#zgyT%hS@k@2z%Or*Q z5wO8lLmnaChO*(u=%RiMjAeB&wFyb*O5?i}u&d7Vz2AM?KX+Ihq>JaBtv1U$T=8>J zMWl9Htor-?1_3~Tt?skXhD@TS9QYko1J7#4-S0Sde$LaT`B%l#%k&T-Jbiyh)UQ1N+^ zQf^X*+<4=*#qkP3A`0d!$05z_vn($9)#pe%J6qr7UaHVuzhc&(Yf?ex2x7snv^|H1 zf~vCkh%=G+EcK&gVNKuKA*q7l<5oK38If@5b{Xv)SGO~HvM-t}7uC2)1F2N?^G{(o z5#?aP!mwDF#Qzy?0TFXs{3|7;OCXieiivnULGVwIg(z z3ILdLy!t-O>*3GJQoe!NC>WjZM-^|Gi;X1{in@at^)WWI9AC7!G<)z$xLEIeBXg%w zvIUof@96%=-FuZPahJ%VY8k3h`#7vyyroE=2-%OiNr*^{)QRN#=Sj_M$+7I=#TFu#6$2n3}IltR#Xlalon@p zH0kxuCDp{<9S!*9gZgi3GGmKyWGwX_2_@3XTWq$8b5U!&4pZ)>*J4+W&$*n_&6i24 z+gX!`vTwToSM&x7^Hl+(i_T`0;0$L+x5Exm?Ba@&*%o(|PrKoyroCAIj@O`vDj=tR zcgFB!8}!+aN>FN-YDA2)D9mU&()&<+d8!Ck{3LGVUtCRXa=ON5M}jIYX*+qZa$ZO+;$f$@O%g)Jz?YXlYrECtvR62@CeXy1t>Dw%SagLCzFyX2A za31N(?XN1~%CM<9pZ;a;faOm3L2vSyJXB#NY)?Uk(fH^Pz*o}_&o^q|QpZ|M=UKaU z5}}*wPCK`Qby13z>YsJL9HCz@uDX3Or#q@+qR2+Mxq2fct4G({$Pq_hu8R}5VKCuD z59&%~$VfL`!FqD%J~?%(N|-Ew%-zp;m2 z{kE6m-XLmUD+4e460|&PFJyny((ed==ccD)vKgF{O zYvJGtcuX&q6{UY;;iU7jyRGc|EX-8i3MJDXcw=&!ji?LT7H(PU2W%T`X_vSRy-psjUJMvrb|RuKOyARwm{KZsBifm+(sgkWP(prrkMsnk5r zEIO#{uv$r%pJEtazqmq0Ecl!nF^d+1!5AITXm7SS1o$5>SVL7mCaHGPlwt9CI;}-T zGr$6DsP8kd1}npqc{IPzDaO_hx@7+K1(^6N-A9lYAt{a}H2EwP0tHH<)ryN3lbfDP z=nvfM0;BRlI`cd*l77qtMa!Zt`W!C2>K+c)l%+k+vX^1wbm*4W77gX@XgW0njY zR2BO2^1zu5M)R-J-r6w2=6-9j=r^o-`}N&whdcO^9;uq59unMSI!>QIUsUU|Mz}MK zwnp1uCD0#LWR=gvMd*{ONM%@-9s?Zct?NsphLVkwGrbb33HJQg&6jEcC`TOoxttTa z4S@F1A%CznpHx?=7Ol(%ikc0RD3a(IPMoX46qhX~8Z0QGa7LRfRMggpv6=n>_4wnr z;mvLym+cN1?+0p$HM_*WtQ3b^Xx5+xpN2_EJ^{+e+SWT>EPR0sg?OSz5I zW)uBYde!rkYSa)pxT^;FZMcJ36Wt4=jSd?fE)U?F10UOj7(6Gq$B5>qOBWGdJ|X`4OR;8c7~htZI_R?EVEO|fXjkfeO>|cv-9L`@}%BWoe$QO?W{QkPLWfm-t|(M3nscRr($#V@0-m;0D@S7u@=Dg-7oE%bS?VXc0eZ$RmERcU^o zUyoU$4I>C2Yb~Wyz%}00nqaMs1n}^qFIbCR zC(+d40z4|@?01adjm6)mGQJU|vlS0AL)wqNC0ex+1`5(@<G0$i*P1hcl6Yl z&@LWKRX0}wfTAa z^_Jbvw|@{9+g1M%yq=OXA@X#qx?(e1;(oY2=qzo%^0{}*t5K;=^+V;==){$-4#aX6 zRhor9_`Ap^u_*r!2z&-CBw*r1Bd;yARO3-eZ=o$vT@cpNn)kph2PlCkhaa|63s~Fp zhjTOvIqoNpN}RK1h0Yc&l~iRMH1+O`Koqz4%6a|7Q05?iq{NGj!?{l^EQqcbaDgG} zayuGs?y-3?*zvK6RjN&HP`)eWs~!_hN4lSo3LEIk9s>m-gA!_bjR0<{IJ?RY+#@wf zl%hWPCRO^e{Z>Xyf>t12DeXXwQX^8@VI9lnDj{TC+ClS@$Dtu37X?j7`TyJEl(O|fyvi@Vz z?<9=(GkDBfN4LAdqv4nbL%xV%ZdN_bKEE6a*<25bFSZ7+1C+{uFqMN1-VgdDL9?4djNqp#wx7Mfgr!_Lp%XZN8g3 zcX#pk_1mp09>3qGdxn#K^5{Rqd;EovbPwQmJ2-01@#OVX<;$;w9|m| z^b`K-NK^kI7F>$Wpgv!~jPdX^1>A1Q-Eih@Y9d<$Sf$l@tj!{?QpZl_`*1g?X7CFB zBfL1Ln7XORB<<}@^~}{jsX2~*P>7<0z;3^v#pxES7DnDvH46nRt~FjXdTkW zG0aaq%CG#cCdeBy%CARo&={n(7ae@x!Ys4NULT=+y67rhnf-|J;l8}qY}Wm~?TXgJ z0QK+~zfiqVrI>o{7}~W!JE4!Bm;G&@iv3~H!^1_U)(T#hW7Cxq7S6QiYzPjBnsmlD zAnJYnjqenyHUU?{2DanqJ5XiL7i69<)N-QIii(W>bla$z z4~i%A;1??TWc!&)U_IxOQdhR-O1^KZ8wGh%5y#_ZhhuqJ)W79+O7t;_WAoplzjtL& zZjoxSAm(pgdeQ@((G&O^kf$GWK-%O)?P&ESd|8tI`^z^9Zqlx!c%_bHo}TCF9JOwQ z;6R@JuGqHn*aaL+Aby1(>QdVfLdsRixnp!E)6W_Ez7=(w^#>BliP=fA|G% z1x{W1l!9lDmX+S!++J{9+^m47j4jUd8tuE;%=!fSW~??p zvwugR$~_FJgptju*gL7*5uNq@nM7!GRnMFGisQa%J$6|CH-@{LsG&7HiDtH9L#0tr zlj~JUxlzJnU_WC*i}LRaTFS5wVTt!0KN;-SzQ5o+#;5J4Ajz z2Oi-Hg@k0_*5c>k@0D(kFEgagUq4PvBsChM&6Czk8m>9}sY@?HyT7|2fgp9Dei0v6 zl)@{0xh~NV3;wy{-{jhDpY<&0Ea{>AS=?mrSs&(v!A{&QN>h1o)rjV^iHX(+&W|oj zZ)VaME`#xK6+G^(w)|r>ZhLOg(Cud`W=@Dc3>kJ%OAJV4-u4DK;!H9A+@`lre#c+2 z9&Zm2FQ;9u2n@G$F^;vKiA??hWrvq2Uda2+ugGlVY&CJd%wO2jAUfj3=5y;{V+;E! z`sm5MkRA7A=^3|F>>ptFvgfab=R{Kt=Rf-$O7&=rZ=g%mz{K-DC%Z#v8-SI z{0E7BOt|0&CAiRIZBv;@WzlI?V|95;ixB!B1v7zASxM-g<_-=_X-a7+%F<^(7#nd@ zjUSpulo=W+5+24$^4JEk6~fUO9hZWG5023$vmXRNgk*;6WrjJ0v2m}}GsnY6guiZ2 zKQ41<=H-8$7=Z0NZGFw>;#j%-IpN{Tll>5dNT9SPKWr_7q$``O9ECUW-YSK)jS~-rXpn2qXC!34!zYIYp zr4+_(%Ba{_Dbc7?@mx3rbU3vBXI?vUHYwe@Bo>{zYq3DBVe^r6yczT1(i&FJg>Tic zVjJ?y9IglR=JgYPo1vbdgOU2j>(*h|>|h)`>}>s+1L;_@Ie%nGs>V-WYG1+d6kC}Q zmy78crHJi|(cauiq-n>hy@@sY1rMgn-$q2ZKYqhTRrluABG2CZaGRFCF#P{va_!(A#@23NaP zS}rZ6EuxAgb$bLKTfIIF?LD-ir@PhSg-6&m-!J>Mx;=Oxj;twOcnF2cX*00iWz~=t zt3Oes+`9(L(Ne`1{W~0MCZ+LFvaikeDJbl|UFR)OIz&97P2`yl)hkt`(O|U7yK@-< z)tOIrhD?@CTOQqWq}4$DanZO~>&_djLIRz`w6>88%aG7$y~uokt+^%f^R{}5qV3ng zx6=1mGAEyA&JAXVcx)AcJjBu~r=Z#rK2|4}Z-paJuu7CWONlY4s$eFGQJJ!s>&V`` z=-O^170X;ib0u3j_6I^NC++tncbO@m_md6jJQQ4R!NuWuTOK|C5t&NA}x@F*8t%`TmX8b#mlerS`X z(w1LCqsX|QR8~u9PM1&6KEj_HQba(wVfAZsCon}Mjm}~7`v^5^4h5ziw_Ar6kZ%_` zhweU*B)>^G9bb?|bQbn-aafZ96%*ZE&0UXv_35;1I$2w|l}OD-kjAGOL$ld#WZdzj zLJkKQhWU)N=IRg67TX4JrAzA?ADq7~75McZ1d{5H&2o{=FIbFYZ(?IdJa^5Rs`pWO zd7(qJcok)*&G{pJYPMxwbhs>_H{EF?*>CjWLx8D|>rhH}L*-q#)SKw*qcfxEJ>gah zaGEpcNTCqk0Kbr}pfG?*KY_Q-e@t*@OH)OInh$h%(4@%W)*>379xgL>QBW;G`E^dZ zx^_FH3Zmjj_xnVI@2H-}=6dXK(CsygjgENzDutC+Z{sk9gfV33-hGuEOJe-ZM}+UX zpX|h!orvSMDS`anoO(fiDB}`=vznqJ+ZpZ0EUYSBAhdhh|(U8Wi_nV(clx$ff z;}sztxE3*lqu!;XuK<*xCK3|H9p0-Z_r;k5CBv~~npTJYu==a!_COO`=vwZg8z362 zFoR!XE;D;n`HdhBhKiT4=Bt5-fc0?V`)zKH7f2Gyyz$f3ND0yfX7OdEQ#DHl3Y`!` zQT%VFq6y}j!C&b7qw`za>3Ni72i!p63@5YOse}FLmL&}XkJG6;=kn{&RMf3f7TXN( zV*XkfC}U)-v{rTXjOn+S2wa8TU)$4;?Iu|pDwLg4+doXw)-O~=TRQ&}o|s6JxdLro z^2~n0cuYtmKd-ZeM-TlOg+Jg|pddfDPLCDn8yx$IPC-S&kZTIIcyYx@QMaYKsn2?g z4pX;UxJy%qoR2VHA~Yro3HYj#M1C9Geu7bSJ!&T01uY|UY%qhHRBk2Jn%88d5OTH|qKsr; zjYXt_i9N!|to35Uwl&v!4IDgI+E$Fh+}A}jEzZIrQgR*j_h}4({_X?R;flSz`tA&l z?S_5iy`M>J4JY79^gKm3DOyE7%F1f|dlw>= zHX98D!`N8M5fFY+&)@(op>st$YQNwT)hV+g6UFn}hJ?Z~fMjG%DkdTw_!w5XQEJ`_ zDs^;MiWuc?7WcFSwQ|-SL1}Bl5g`|OnsX;0=8x)Lq|<8Pxlq|X*GzZIWO%>q(%RJiPjL(!|cJ2>Uy`XEvwMegECPe zswy(HNu3%M??LR2jlNTyV1b9qYhwMz6~=HJe{4%#!u0437?^0PC5-aAKxD1Z09Fa$ zW#i1ynH;NocH!d%{g^Nw-Wx&*WJP0J7ALJPB9HMhbBwtScwTIl(BTcta=Ll~IrZ)2 zoFGj#{lYfgFKCVLA8KlC{po6QSss|kPXrIMG0Sx$Uei%%)m-Gg?KJUF7d-UsBH6ey zQgnZDjF z8kr^(4^Rt~%B`bDb&P!H)&B7a0?%!9ZNXk)qtx-Gya-^_1od(iL~{<;U|?i2F;P3y z6%OF&rWPhdicwbjt$}_7P5q5QtzOeYvbmejTr|&?ZrJA2M?7Ess&A1YhG3Y7_ zPN!dgugF}*~TeuM31mGc_9yT>;he?aP0Ubqno4s#*@m#_p_ zKT&5n1RWJjsoZS~Y`JW)%0Tns^*HW17PgvVv6?ik^_eu~-xP@1v#en` z#JVC@eY*!|eH_z-`@S|Zf0yTCv&7G5Z?`(SJuff!=9(bOzFA5zA)jn8Y3S(pL$ne0 zkXfFkj@;}HgNse`P4iRO5dfSAvw$50+#RTE{bUkOM+I#toOcoWJFkP$hOW+|^HOA% zMWaNfY<9-F5+`lqASeStE=ixcj@o9 z&F3K61>Q4M`4ef=rJ+;zcJ6hqX=@Q8*lb<3j(M^&nc zx2}5oXIx>BNopXz1%;|5hCIj}SY1{|DZ(7wE>2j8)#NG*$@#L=YAE-}?T2;%|15R9 z&+uyTk_WC)EGes2ckYPXFP92z)BW9kvd9Q<9GQ)RVsaft-QoOX z&JD{NR#`JLk&W(-s!Lax5m%C{p?EI%E0frZ#7D1JI+=z(PiFIz;K2mipucUC?7A;;kAFeMj@4MBP-gQ~!04?)#bg$tDJ~LiN zhJvaV@|u40G}7CUoQ=Jv>9XB|Oe-B9{ zYs9$b*Eiy)>l)T)#>tDA%#sB-mYHlJ|Kd%1r6K~U(pt4Y3pw{654%iihd01h+q7T4 zKJfRc{a>Op{!4HU&Zp^b4E2A|to#)Kr=d5H5>J0m#>$jg2o;X?vxksaVHi;K4GL;M zoUpPx4F%Xz*Z9{kgZ~l~?!SYbQv$Ftz=6GL$lF!|Am` zM?Xk_Y^2>CC{Ln)(rW=pI!$;A@cli`Do7uYBI6(T-=Y)=)F97liipoJn2!k9s%!YC zxGQAm{~BQDe5Bg*Dqx-d1Bud~fy>U{zA<%%zilRcigAr)Ta?Pf_wj>B!%Q zHv0TnQXI~J=Ximo7?CWOKAF`^ovC3wrVV>`z|@r&FvOQBYkByc8a8vPbmI#{5_v5Z zizcJ~+TE)K2U-y<9W^6|#r+44ujefGxq7D0feRrFYFRhyv(eOdO&naQSv`p824VYo zIEF2rUp*XJk1*yQQc!0dAc~P_DYl5u&uV>6(X>0C%LK$+ z1GAGwd13#R%r%wtst~zX;zJ?;X47t!?W6_NS^yp44ONKLw^Bp3lJ2XZW`X3tJ&fSM z+mQkQDTU)^>NvNX?5? z`Ozk7IWXD`304@I17|D+W!Y>F5_ zerq{wt!Xxx=OB8D#Mjhh7Inn#qV25aGy!Pq$h46KiTE?9JeGo6bge$La-z)yi|_r1 z(63iv7YQ5fk1`g!eto{n&FP{UCKMe`HfY4-vub8D+g=5`GD9~k<0O}5=Gv4&tP)9_<0D8OVU2W#S%2{D;8jGh(HT?!^+^1hG zn{Za1M>ghiVm<JdAJ69bF|Ipt{<9(~dgbH^_%TNe}RjwnUYrnS-iav~=J`i*yi zL536z`93RR|de$)R?nFhcroP~yB>i+TCpGAG?P&bMggHv{&N}(7h0L)p&sz$Q0 z16^LugrhGCD0w*VMd`mDK0ApzKh@_k$>Q=O`TkxMVX#RU)?rw!k)A^_iNo4T#$$$O zj=>ecC%dap1uI-7Q$gzz5YGCqw?RExkN9k05U8DlDhmN*u~R`)alb?{W8h)VI{@LC zFo0*CAKj^gdE0SnpI5)mgy|Z89g^<&!qHu*>C^E83kfvF?z_CuO(h;Exg1!md}jJD zDW3)S+ysl7H)-6g=<=6E34y27#zNe7ru`?i4rI9LTcjmeFsbkI_OCDC%DUD-0eSYt zi@hj47G!KWIFv)Gjog64{ys#R6t3W72iSnA+GntZ4HY`m%F}hmJMHUKSC)s_Dpz|! z?eH5<%Kh%Lo5cWO6zAj`g9;Jn(S@4Qfs@oehCuO7+Iem7VPa#XJl8;~oU#+Io{;#j z^$)xtO_g2bDB0!^n~BehsodS`Xr1C!CK)x3#l{p%8I2A3S$G z|GnQh4}tv_v+psrDGZj(imkus4~5nJ6hd~{nTr(l_2h-}Y4xbH5&%LJ{ ztvXT*a6}ln)waMwa`{?VXp{8zixj;aoO#7j9!hOg6z8Lkwf@ZVdO?HB5@Af-wh?@AteV+w0!>vqTU=2Ku1q_bM$^Ib4Ix>ge^o2fBIC@^y2>#9V` zk2(O(C;+<~{#Tt^e};4qJhLC{Hw%i#CoF?5*}XarO-FQZK^uagLfy6xHT237gz?Co z@@Xi(v5MwMg)U=((`p1p*juDlvp@sY?MG={PrE7pGEbgHbg~_p1WGV@+KrKc9{QQ0+LsI# zRH4-vgizu9&CSa-(5wI$$L#TT360Ga#L3{r}3WKA2x4zh?qu|Zp14n`Xq`^xB&bT-q*ENF3$`7_P zPyyJjDM(_lAF~ZO8z|1NQP}ZV{!oLR0NVXxM>a<|AHvKbXqp2dbPJM#GJAap(BBH$ zEB#)dI78KTW{&Qc4D@<$4(tR~Od$2+h0wc1x@_;V_ke7%nOp=9DtH6P@x&plFjIFU zNU9B#*M3Y&hZ$2eOb6tEQ<>I`3`#Gb)5!qwYiVyVWC4JZ5wv|9>_>&Lmz6zSsH}d7t}9vYvF67x+{h9Hec3`Y8I_2PHt)81_#eKOzSAmI+LVpU#&a_j=t% zVYT}eqfH1X4u)TpHB;^B2miJrijeOv6A$ zZd077%j4f|VWZiqj31O9t;C&2it!||k+o{~%V|1+47Q!B`KjK0(ZH_Z@7L%=`m1_8 zri9yNgnQ5Aap)L|z=L+|ZWEkWqifM6C#3vNS1D7XE<+Q&zwA|zQL5)V`!v~_Y(l^- zNX}J|!z;B}%k*!R$eVX{derdYG=y)~p^zOjD=fk5cQq3PfCa4``?f>@8$$@Ltj+w$ z%}EyFy9-x~?}y`w*&cDir80F!b%niTND?Wm6E1w0TNG5L`0CD# z)>Qpm>b4;%W+*3{9ZpJLmPSG^KtB(pdACVNYy&fQZL1BRgKL%aU+6UYU|Hc>?G)DzpFX?|CRUFPjM|>*eD4hgkZsghu|LE zA;I09AVGr%cL)itL5D$uySohT?k>Td!3UTb_$KF^_p7>pz^%Gfw}0xYsoi_G%cC>W^%ZbWKFdGcuAQDz_DU9iK#YkeXYDYrl%c$>8=JJS3pYnT7hA8s(~;5fo((f>I*Xhp_7v|+ zS4h!5rD81h=Z|!f3-a)%GxZs9q^Wn2{yhhinQb~Rl{9+kTn?? zOIY+)r&E^yA~TVr+a*B0>NiDZz?kf|kY{7vLTx}rKqW*JE~JhwqrLap)L&D;YVw(Z zat__9z67vEsRTz6k1op?Fp^}W%{k*vja>cWn}~Jh*YAB$_a`W=RPg-m_jwN z@X%~i^AWqtSU5G(SttcGLdD1OYTg^Guob_MUe`w-M96;jTT$3lY_=cY$g|veS15L@ z&L|zBP+F{P>&({SEXUM=i)q}%km_n>Fy!pH6AaeGvUHjdKQ!IS^Ds)g*1gWDE7lqr z?}JyZ=kc13wcX8ytDvu0<3+CL8n3rnSX#|*+U9tEy)fT3s};j-0TVcaDrcBtr&<#< z3Q^BQZjJU+c?FHqv*o6^zlGy7%F9sOH~xi5zY|XS4a*;Qjf__koPiv^tx_WAem&Ck zf>k;fG9Sf8AIHXNjOdI}o;Aq~xJRFPNvBgVxG~m)RdGx~m33AY9Wr-{PK9c#`{88` z%!p;cibCuL67%<;mY0y)rNvY^&e)(`dT+9 zTsW~6WKG|18XuHf{A-Rr2@fy^xn|%sM$8}`ZVPxV-#?Sajw;#RjD$De8Uc1D7Zu9V zH=K_l+j@FS{gTC&5!@fIe@4=~(hrEj{MUN6%q%Brxm_mRr74_pOD5Q9?DmjBEonq27o)~S9Uoig0 zSrYuI?EspbmtLE<3Ot?f-ME5{MB0s&^hT7QMeeOK8J>zBbuknx{5YKOrAdvd;eqKRvbAATQsw#5zm??Mf!S{0sUajm1(lm_x-`oShdVOG~(p7vvg5 zr^9AYmeZP47E_og3SHftk3z_K5I3~~ghm&M3V*$o>SMV z{%HoPAeAk%8gNOfS{&Ci6RK6T7@=Pwp<^lWQW&n)C4r*$@nt(v;&79t@Mw zX(uCqUy8)hGXuhaLl_UEVb`H^j)>>`jOxgj`G|hO1=x4pz)3*a*UCA@ml^LXs@o12! z5;r$DO_M2j62yTDb8q#-h<8cq^$br`fseR>Wef%pACrX^%ZDRT3r)!+uV7P@rKBK9 zyLp;ptq$q3Mfue_j`%$ftN|)(GD5K@d|MsLDUo=B{;Y@-rNK=UQx%O1SX6OVzM?J* zj}v`k`!=jC`yUSSRlWVEPU#u2qT#o}4l@I@@+HaI!hgSw35IFHdS;T|v+GIxau1{J;K*7q7gj#!tF z+dlP8A;(i#)r8yqG_BeV%CP#dyli80OdXiCwn0t)vifz|eFJlnz0jc%x;2@ttqOgH zee~wc;t_djlMqfCV-=FDFq-o9$lSyL3$F#e7HNK=;z^2nb3BQ*15{qmw#qXeWCLol z%bUI67W}rFDn36poULTNzfh)h#!hAi2dn5!%dON>3?P<;-5R%;-lZ*H|E8 z<|r;7lRo~whZG7oA=pHi}5sNsIMtWWJ$Fqh!JaRm{0wY~n zW7ftg0UHiW8C#$WhAGd45HpTpZ70s(+fG$+cyzxK$8KkOM=2ddl#FIyI6K$6ezYSf zZquos+0hcHjS4#(?qw}*fKyVOHT6;zILX?V2-B>P^fCs{uMXgd{DwetC55ryQ7P}= zIb-ymO;eARARFu|F>BR7elv2Lve#LAyrQ*T zf4XbFXJ6xTT3vBuv%kPVOkk?6Z8$&T_I^Wmexe~|9gXa{p573S82^h)JlEZ6Kg84^ zeZ(7r+AB9EUSX@iPn4=3WTXfU$w$Eq<_2Y*9ahkM&vy zG3Bf0M=n;EXhgpIO}obrGdTO&Y-#tayTeIU#ZConjt%WCAFi&K&LYvzPPezR7Z)TF z{T^7ATT5dLt~+aOjs2kN0-J521FTEFw(C*%>;WrQa$QYr7wn)ox9yT^j?5Y1!?@71 z!Yu0$DKY9EM5-d%?qN%S%AcnOLy&(4Bt1=*^d}N}YShKHj-tVO-2F?YE$P4Bo$qv( zt3V*c^YfDb=g*R-mv}q%A9PFP{DddzZ zPdXg7*B@)Q7N?afg>S~oux>x?Ygc%hT7(wzJ=w~tln>A8M~E6hVFNgk6Dr`D@k9@p z^Y@VT-Hc!%9~OZp*DUw^LXTt=TUiQ2dqB;aj|ySjxL?@7rx1ipYEB!}7Vv1@?mKx6 zE`~`>^KP;PO>&Ql1xU>>pY@|5NS_h&=tXw7*FD+la5l5s8(3R`S_G@#72=BB2WnEq zO&KOugxq1J`1|FByip1rrrYsWzdgNOu=0g%4iF75-iYyu4v5?#bn59jvEhd`*KMwl zkX5S4fg5WXc4i50ch$JaL&`KqV^-FSXtH&+*Ap#R5P|md{ma(gzRXZd-O4stw^dq$ z=;MxX9W8>0#J!+HQK9e>03F(DiQ`2h(4Bk>TQVysFP)nq!ecjfzd11Kc|!0O@hXe> z{PkQS4*K-d0SBuA8IFb3JG+kT%89QF+F^DlfRmu+9=;CP>Q~%vPqVarq(-N=xWqyy zOCJ4_jjc_^Po&4niwl!}{!2gSHE1ZGc8|r(5LCk&vIA-!Mx;w;tB{HI+F!!;zIVY~ zU3-^1lq%3;Z2LQh&e*3+trLEoI9Ko8z`Hj0IFVNZt?+82j&v(LY)YD!Y@Hp;5)^Ls z=RPac8y6yQec}sQ?jD5V2|8g13I5yj>BuX@+ULfze*MK=?EaE#2|<;|>{z%--Zo*x;>^*T2pJo| zzEPq4#p`3LVm&ma*l;D@%61yoKLG6w-YzTkQG39)=%SkQvA)O3AoG6b zb(}4nU@sT?%#3G4%-Ybjt&A(a;ma75QtS!5voa9#=^jB*<5FFyqtJI95k9@{j%V$I zuxgmU+wL8DmV*(L*Its?Ue_N_I~I-~uaG#7c%F>t!K-VcQDQDZ6RU;(J7WLLlpKD3 zz?ZY9f>|q&%v1HT|B{?^+%RL%G};SP-`1P^V8HO9Xk-9XEo&Wb%TxqNxefrT43dJ3 ze1GbqH(B}xTpRZo!MfjNs+>b#O|xwk>tMl4XJCABYzzlf zw(TPoJ|oC~(4in0&zgn#kWVxJZ7TNq_6Xb9)9G*rkpOyJ4>&p0GJ5PwC{z~0LdU>p z;%z~FhV)(fYw>jn!6y`Lv%0m{EOCcvkSI!)9)RmLQ{m+qigVQRaq z*T_G5BS=caoK1K@~kSUhu3|-UflFVnt#fEk*a*K z7-xPl03}=%8@xG1XqWl99vnlk<)1wJAIfYRr4<7}1wy>aw>ptCg6u^Lf)E790+}d} zmt9jS>CA?Hx(5WooMOB9;?USv)NURRPTJ5X&%I}${~>#MArp}dKaoFI^9&W8$+6fs z=eFFaIqetqKtu-k2&On~<+D*=ibIWnS`D;BKsg9v%0kM#@VT0ackS<67oV#CvTmRa zEF6)zW0&!1QM|L8ZI^*h8pZ_|_fcGj96KLmlEW{aYzPRz!9H)x8Ql{|9 z8IN^aKdoi+Sj=}>wS@)To{2D2Fsq#0P4(PH4IE>A1z5In5HQwL{~E^PenU0k@L50l zxhe6lZ&LNlky?yY)(Q-%=crox^O0s-N2*c{+!AP|i@%D5WzFSDL18a*zY@p;%RZrS zCxQso>1fB^r5;*7SG1kSUaCoVIm?CKBEN{oAi9PpTFv@FZ%=(%(?mOdqTX8NM!i3>vTQn+Ml;Maxz$8CGK=0ns;n4r7=Pec8Y*9aiIccfWomTN(O| zqO;g*qLR;ilUXdvJnKeQb~`q0J*M-3s@@FepZh@zcdup__^XaJY)cIV>KK9Vbdlb%bv(|)-w1816+RJg-TC6txxApWT}ry} zx$+x3*)Fk^xE^O88qXx&=3%87hx!hXeapXcL+9sDxVg zl_(+x=G@6=<;l#Ni8joDhz9hn@}(DC}1c#X{w^ao=DEBv{LIY#ggJ<{2A@8c+%1>|^Dhx_aG@323!yc>{_CSLqR znY=S4WkEjG+*e4QpC!Eu*UO0Gsbr3EKtwM71nQ(#gC|9>IJ*q=`EoRVzZyJc+RUIR zqvZ!KK1%}12=JKtvyZh=Y%#jezxUF{N(6K)9%^;Xb-H@iOnIpFl1I*yAG0`=Ltf?D zYKw3$IlOd6s`8EN{J|Q$E<}pBJ#paQ*7-AqHSQ0ld_FT1DA4R&n@QoYhmS8L!8F?LA9^! z_7!$yas3DLwe2mV--CkUFvH7C+E?w|_OSm5xbkZ*EY29W6n<3TI#e^n0Llnm#!nHy z{Z*M%g}Hy5(Y~%Bx(b$|OiPO)o=k-bh!UjU$oc6kl zzTM8wMJZbn=!84uZWS9oI;usX4*m}d(0o}*YISDFvRHj)XBNrd=2fP3+ojz>tG`}$ zG1Q0<3YpHB3*Bj5WB&n|dn|%z(7mYi@Ue&(`=ytkV_q((()#qnAcdHLRpZc~@lqVV zA2O|Qd<_XGFm3$tW3<7)byH9^X`o3H8(T#jeFzEc#v_dKN&}|)^+_NSe&7itpztvbT<_|vo&_30g zVNUy#LI#ZLG8Yzr#>>!~{W&%*Jkp$rDCyrWsT+M`s*i1E4mLC_B@P|@Q@&)ZL{9kK zBI*Uelc>n!m;~L_H7!2yoR1TL`p6P$H|a7w556z9 zp}hiE46`|VDM^@|M>eclP6pQ*#MmPr_=tFwM8kVG*40axTm)`Q{#KhgVrR_c*4<}Sr_ zM90e@iKfOoci(r|^5_Qp!td4FTxInA%w%9g z$k?mNzyg--t&JKn-o*!_N$MVi%H~K+hRkTJkwUpBKlioWqUWd5mg(2S?%`=;@W2Rl zC!xgVC9WQ#y9cH0f#1#>bwnktReR;sKGS#|p(x2o&yYNEX(%I!PT%0_Cuv{fljNnfBu`p!W_8=#cn1Ryd|mCTb){APhZwhyc)g~lq3z2#6;&RQ{Z*Jgi zPE2N8TdSE)-gs84?UlE?T~==$9*TD&R!EeqWl`KxJ~RUMW=B6QU(~?i-?S%R^Mt4J zK1+^zPA+9Yo^S#F-P(PuJ;Vvmbb%@tf)fLv6&LF!*DjiRYMV>UGv@1qzQoe@0js|E z;}}!SS5fTOp;sPFGktdDC5g^&GY7thPk7ur&DwdvUe1Oy%iWp zotJa$)S=cFmI2eE0*$~ipgk4~c+|zDd`UkZ4CYifnOQ3-23724YU0Wts0HzS<7Dc# z@inR?WpR>Igk%r5hTorOT?+9Qy!s;7LYtU1kax;L0nPV8>U5Vi>57>)j2U`Vt!bMz zqw7hnJp+{+jj$+dGjd^0U1qhE5fKwZpuzhn7w^yvuE>|zW~}t{rzr@KhWv^y!pr6M z+0XeJBP4{(Uz)FFtM3=T1o01gzXPwihs)%s`*VUWzbExu>J6~-QjTM0x@da}6J(wy z7t7tK*0gj64-sy0MiYuh?q;j_q*0&k_>D4nkthXcwQ}ak$JSQ&OvSrP(5abzdW_J+qo91K zO-n0TUhC_z9fW+GATa2~!1ZJr&jPPchK;Iuv7))ByO#s6aaGh->-rjtk+*7AT2zJQ z8DOT;SmWV08r|&oCcw4ZHH7t+Kp1-wb%MgU_%)jGuc^F?vr|@iHEPWI6{m}>m(4wC z^_#zpcmVSUWue<_=c7E9ClKhItRheUhZ^jm`I!#hnFML2Kq>KL_a`ZTnmB)n(rlZ%tbb|WFkuGW{EQ=zd$e3_z_ z=m^*I=&;7hv9ore@KnP4Fb4M0PsH9gP+p*_h~CV_o4N^8=ksf zQH=LwMcnYwR`B2J=OyR$9(FxqRt&fO{ z{UZL_cmG~T=~I4E-%W{%aWqF_E7hK?f^fL{wt|N0pRcw=-UsPB=;^vi`8B{jg#kb8 z=5|DQFWuF2Pi(X>W9w>gi=eOgYWStPJf|6>I`B1Jgr_iSw=Eam+?%tGu zG880*v53m{2YHiBIy!J3e4dG;ilu6e(fAHqNk- zk1!z4+i}gX=(cPD!(iTTCRe(-uU)n)@3y(wZy0>UDr1%D+9%rzMo|%|55ki8Ew0Gj zcOx7!xYB#L_2MQjc2H6-Syl93rY~2CS7z>eV%Hcwy*3c@*y%6_N=d_Cga X((1I*?`=I7J)K#$1fE#wcV|N8=fb(WdJTthugr9R{$d?-))2Lm;YNNkRdCNU7`zv4d1_kDJJ32 zyM)%7ELhq`it$&O|NDY&LbNhwKC!#fc62e~W^eE#;IJd9q@?1q(GS|FH8*!-yyigJ zcD=osIq6uCrCJTZQ+|RVmOF4)e9Q2|=(spgx&N%v+@k=7Q&r{=A;f z2hRI4AkHBI->b?jpNBNl3zno8$=5@L9y*l;6A1sLiM3B6h4XW9q>t(fMKJlrFIZ)* zkoI3s8#PxOC*x~^GlHes6)gJ3@1ATa+v=W1vBlt9SA9w*tW*>JSHN>eQ6rGeEPy5dj7m;O4yAq50C-f_7d(wcaPLd^>Z&H~(?WPSp=v;0^b zpWyphQkg#l;*AG3d=XQUwf;9=O4r65(iF8zaq;4B6DBvhBmfl4fzmhq#T|EN*#6$$ zW3>}cYPWQOq3=5qvwXcF3m&3gh{2gV>PRZpcBUmkw2}63`3U!c>;xG5U-SW(b;>>eAz+1~+MKb{cFtw^|R6ni?j znUQI~!seqWy=(8JPS{Yr&q91pXF>#`FIAGP{!8bM0mt`q%sTK(J`M4-v!l^av9?hj$Eyvo2l&L9pFd*7J)Np-DBkb6#3eyxDxb_2#Nt){VNgK?adR%d$I}Eh zo)$KWwh=xAw;84Y{Tz&Y*aNtD{H-o~vtWAe`j+PP*#2HuaO2OVqtJ?f-`t637EHe9 z07Hyw8)e($$;`&xVIbuJkwmkg;3WbAGs|d#ufy5V)3E&?cR|^y^HLoq!@WBh_yaC~ zBSsL#Sj<4vWGHAhfT8%|4}g!^{~C-~y^?H8i9q`?qoLs4fv2s9N{6Rih|#`t$G^|0 z;J4EJY_NhS^v4Id-CI5W?IURiNv)_W>vbd;5f0no;Kxv_v(lbH|L+6mG}V1?y2GCC z145s6c2+#VeisjW(_$Mf`;R)1C-_GCor+Gt<%z~bdP&*S&wBRPJ|?fI{&}?XN43s# z1rqe9lG|=$IK&pT;r&2*c{Y$0pxyB0DgZIV75fXXR^I(*KdVga0G-o@ZBtKEvK? zohuK3fzfh}js$D_WT~4RpMxlk2Jd#|L1+Pn2br)ys<~TSbEUOMW=d#Rpqf>CyPk)a zmW`i%=!eF4*gL10-?lW=8#SdN=9YWVcUPu5oJVCow17I})R>cR?i-RvrPzzQqtY)? zyS*%E)Ktg+hXvrV)}K;O5s$>{Jh!?#!vY1eu~wUlB+&gNV*?6 z$MEm_VxWGR#a`1ZKa`Ny0^>~^=T9tM-NQ=Oa+Kf!MzC8_GZH@#xf(m4LZqX82g^JW zdHJwXP0gzE*?V+ALL!Xi z`E4h*XvWq)<$0b*p-n+(AI-Y;t^T;Di?jz|6FSB-`qj;M7--D$@?rFk)}_FZ)ZOLu0!!k*HctMsjWRFqR+hw^Qus_r8luE*slQjvL4?_~lODUDxzRGv; zPJ6k268N@T>=(z};JSB6e=a`w_iPg#NB^#`l|R^b5YGeft2APQj&MzX=duTQ)Z0zw zuF>qV`_5F);)mu>E$Ay=(GHl3qa-BfGgS(Grg-X9RY>#d5$=m=$|KpBdZ?&-xsbHT zmMn{$2M$3fCd<CLRqEG}ba+L-3VF&ox~OGU`SwY6Ggz_zEj!ET(>8BQbNHyV3{4^d4s3lL@dZO!Yr z{-4N9PL|1>ZpH+cU7B&mc57h`I+xAGj@+j)Csj7%*9JZ0OvfSNF)@4Fcp-0rkG}QoL@@h@&Yde#5Qm)S2Q&OjhaVBLS=jOU|(^^Wn0>ng&lJX?uP45_~aE8Z#b~gp3odyBXoGR=gFN(vCEfQ7Ifrq*3wh_ zYJp3~(TfYZ@$t2+r^yU6X8a%tb#zq2;+*3ilkgQ7sf$%!^etv&Tl0QwNF_##5u?hj zY|97^3HB?ee4|W-)wgc#+Q2C{+FZ8Q3B{MkKP9okl;QglDD4%@%l7afss-Wnl)4r@ z<$ToK2h4Id7LpT^db67hjd9Xks%;rnY@1zy*jp}-9z?pudhvMXCQfZ6|D_AzAxF#- zrpxCZG8rQzq`f}26$|KKT&)wR3GPbbRd6gh0&{NLd&VYNY?1} znX|Z{!zVey%nv617;5>&4c1Ds&_+k?@?+Cpy5a-Jy+ua5jjLoo#Wo)2uUAp@>9{+I zS?mGo*HkI6=m3k0x+^&IuY%(1+i1x{S!=sE$Dz8f0FVb;_;_ zjp4|&XWvVL)J0U%S_GA2BPS(wMVTi4)H$=3lZP|@`LJAb$HBL)K`oL@!jKVXNFtcw zdti##THIP$chv^^TPmW4@{-*7Kr}w13*=?Yyp)uJB1XF8haXcZ{Dt(EbXI?~#n=DL zkl0-ge1TeU=}h)O6Yo@*bChowqac#Y5lY-D*_(k9IhaQ25|a*+)bEs%HMxNxP_DtC zLBXkqPgR=h=X`w1XTs`*I%X*Bb?I(k`x_FcQQ*t%>_5SHR^pjN4?R+$$4u!DseCic z$G#X6>1)xEsJ85{;iQa$F_AgBOmj@zhoUzJRn3x8>+e;->ns9gOjo-CA9dbU<~3!P zv>M&=rX_v$T2>81*!55L414TiF2*Ov*jQngB|Bc}gT7=Mc;1C|N2GwEKRS)q8QKCh zopWD8ql9LH*ST1r=@v{%!8iSA5_N)hMfvu!DIFRPfCEy%lRtm*-W%j+YMdO&$%bqT zYF4lG>6>B9Nf|2^mt#1=O5VmG7}{|K7#B75wlpC+Je`kaA6G-9@av$R zhdV`9m?gjGX{MJ(ZROQs^=n2tU!+Z3c`L^(_0o&j5-n-eBghQtWDC1)>TQ1iB8- z6KP4`roosZm-Lg4GO+Xu>A8O1&9ds_4(lUXELqWx6|WQCbQNP0Er`xWL9#B|JBr74I(A$Boziylf9u7zqtXT+^VIe0t3h_5hOW-Fl#KfIV{rS~R zJ$_28hnm`Y>5^=+h&_rsMARIQUzzM+--Mw75vP|3bW0;CMZ+#?nb4y>NT{hgqoAkcmlJ{@1lf zLg7FHZ}7>@xp}V2u4d3S{8!PNY?JwrLEY|^XH+u=arFZQGVJqr*HZ&5iy0 zN<)67{yqpWDe7fbqe$)1AVtXg@j=d@4~qoj;|q@agcaZfz0*HU%{1jrzMx^3w6(Mc z7mI?)@*6EeTVoHLp)bX+raeyDSkrrcDil4ParWIC1b7G`O#Vw@_Bo0U*V+6 z6UL-RWVjWRzvYGdcA}7NLNT283*R@_CZ_+M3~-1lL^aePwpe1)c2^oYvu&o&zFCqs zPfy5LBY0hc%ncaqxJuA~M#Ygg&(V^j+LBTmwiYihMf&b435f6A^?8myhB;*`BSmdv z2ImO44K$#|4YcVaou?2-hiM%p6V(UQzne&3EpdELKS9ey=Z#a1!5-0o8T6dv=kt(g zX-TOp>H){FlY`I7-nUHCoj?tpJ8{k(R=Wg4qPXJRYvn(^)i0;4O{pWLm5*4>WEWS5YWO~rri(U`#^er+}A=1c~5MTwv1G1wr>4W1jK6SW`Y zryU$}CkdXD@YBy&rk-VMClntJ;#`-;UMQs%OI^hrv7TvR7(y@x(1%r%5P>Cp;Fx4l3a zN+KgUjtJ6A>VSStGIHMub1nVqVxknKR2tHGz!!h&DOYiVF0es>wVO!1J5fTlo-yUc zLT!yQZ_y_;|g^QxzXXwUSuy?bbGF-!IxSD>;+LR+G!< z&?!=ogUF?z0KW+Qx=AW)5Rm;tz)Ab0xH^Ji_ka8Z~!AYBSc3a9yT7GZO+tz>Bc5D)wOQ?dv6;|0~-2H2a3${AWEP1WwtD8zz ztIH7jIX?y6W;EOHVc#b+g=XJhE!o_Kq*}3^eN%5tq$MsW6oJ<<-^|smM%Bg4Am^yU z)%i2{r0d8U;&@bus773NDh=F?cj6WGMU5U+8!*6?$znOnzffH=m$Q?{Q{Yaml6iav z?l?jk&If}i-=%O)NQM}=1O-r69yseZU$PoLD<2)s08sb86n6j}JLk0KYba@J>1wB2 zVFaL`uHc@LhJo5LGT*BuG!6U$(rMMQP-Jb!h%Vigh=g~jZw?OK;_v`MzZUbnY_h0x z8!T%6a34aU%bR47;;yJv$|0KL?Lk2bw38Q6E!>-_cRg(xDP8?(A5G0y@ph&+89!n< z&Toi*ZLquouR0eCvn$ZR=E(0SN4o0hmm>cY3_9rsg@U3O-eNvIKfKRzz1o+hlSoMI z{w4ihb_zQ%gyIK%KvAnPM}v??9~tQACRPWnll$`XjVzwKBzuVD@MP%;kE|JfCkIEe`J| zpH0|c>MDDbH#6pLY~j_c^e2q$l{+O;swjZ#<|)6;s5{b{?!9k*<}b(g6l5}SiN}8x z8Z*MaSTFGbt7i6Uv(lE>vv3dJ0)#$iu#D8U7DuMMwk@mDaF*X7n? zywzB0M?ylml#~3VNtHe&2@w*Bxhxo5QI)d*y|k^pYn?0#Bc zM(r2Eo)5Vp6lVA4{~}+F^yj!RL;tn?C862djCJ4_*z!|D6YYD}GTw!q!J(M0^tFeC zT}RI^h3@Mm%B^*;8Bg18+EQN*z`7{k66Y0eKiw~OWXCy>OA>_iUFu6lugLr5=ijTnFH`f&RO7;!M^RIg1xb{E3c~y9DjrbJd~A^_F+T&dYbv_ zgnFvdkl&YavwY-Hd2etdX8fA_>S31)qxC~!MXWvTO*`8_LqN6rd6@txk!SP+8&I8p zz5vuCEhK~kZ8(6k5Cv(`W>{b?(-h}#E{+tw%{q~+;nQ9zec}|ZH^M~3RUi}!rdIct zIj8P73pg*73ti+~C6POwaW+USOGl>YTJeA50;@jP|AF@Q9iTK_`-feW+2iT#R(jh+ zOzwL$N@86s&{y{o%o9>&k1xn75bQ^z&Jie#+AcH2y#$>u5MR2@L<#ujI0d)Y;NXs~ z9!waUB8%+D#a|F?D4?K~g;x6_z%emlLDGc3P7`-rv6V(yPI4%QDSHCoyiE4Db#Dze zsnYUvZf|iofavo$BHZtL{>OY^zx>{{f&JLws1;qAOj21UwVsRJXhr=uG!~I@y&P8Z zzfEH>|A!Ku*yR6<3L@Dd!aV-1+C~50n!Pn`6>JO>j4~z!FK@T}4;JmbY|v+60lL|= zW;QLVxi+SOxMhHe zPNuF@;pOx}9ukfcUv=Q_+eh(_cy8MUz7-UX&?0xS+7k6T;zl0EW=AP)qc@-b)5JFE zVsS-Dj*FIODC7)U7h>kU3p!Bp9jq;!+jgACGkC-UCAozPKOhHkl~ewW!9^4n4fM=T zT+_?T*7XqtWrP&UQI^S*(x$)MUUlzZx2;56=z`rpY0`h;X;$&)%ueFWJVC1PV=*@Y z7R`!(_TyeGR_>zS`LUexm{>Mw+v#3+;_Bbb!M`QB5G4!QHkm4jDj?w9tkBu$xrcFj zOu)BoN^}3~88yEa=4?9eO5V^nY|r=pdd3h%_d}#=V3MZlgk1AR0$SPMZN40Kr1|j` zB*ZYE!tBTGYlI1gLEJx@C$rImViOS^=`6{;>{;g2b9a8R}z zyU>4MllcPOC~$Y_*Lo&@cG#-CY7S?u|Cq z!@V=})|&O^z4v=F|D1KsI#qR6)!zGj^;K1bhMGJs_8V+8G&EdA1sN?gG<4_3`=h@w z9i-UXRO^aS7%1n!0}z=nH5A?g=y0pcOX&*pg!1_q+oT)p8^LN^d-S3DO1y= zB8Qe5zzLt_v18ZGMg0hLdgmqMNQ(-rI@CvBMin+q4=d7X2DukZG`mJ%8d@30t6LW- zB;JX~1Smx zPS~YYn$;LekfZKe+Q&?4k8%*)6AMlt55Jj634khqn7=<&0-Dz)d`9Jg-|5i5Qa-3) z!)-vLS0P+?1Y%?iH&r@G+9$k#40IE}&0+j=rWE`n+2v8MY$woAPHNy5|1h-gp|>ZI zLTPO2%$~&;9B;hS4xd`U}~HlX1RQ=<+$d#KbYT*qVAIrr5FsjZeQF~YXsR+3NSR+wMPyKX{Tm%N1TOct!I zsQ{V)TD7r+^L{}*v(*BZt9U>2G+1C5H333MF8PH4dyX%B_dYt?JKM}2O{P>e+LJl` z?Q9vHEGRpHz>WDl$EbOgo^HmY=6J5EQ5(>Xn2ix|&M!AIXgdG2(B58LTbn>xUsQJ& zmQlgG3;EL5^cS8`AmZQ|e}?g7XH`=@w|F+h2MJ&{WKX?1-&^W!7fJn{Ct?~ZMG$cJ zVxl0DS+RB`vzb>+EMIz2{W>5>#bN0pqq*;7hE2?FPCu%9JxZ@C9jt4_+naj!B~ccf zWmiV2kfr1|(5T~<9JCy&+6c6vVS8+ zQh7?6?$vHH$mYe){xZa#L2Q8oi6D34j?p9xVue3Z45cLB=^mWL!T9>7ZT8-5eMidB z1Zwv?~_){@mX-C{AwUy&Y>-?rrjGFhy(%ELpzUQ zHFNh_mko?dzLYZ%FfBtvu-}i4GAJgT8a-@RH`=kt@GdL)P*0NOU+#C^A6^l6znK5t z23Gd)tubFT2|uaTg)X*V>|~}0i{WkCBBfAZj;*N2e)Djn(TCw!&BA^S>)WIK0W;k| zn+Lct6z?Mo10-row=0V;BgpZ>l}BXp4V;tVe3XTRWGh-KAt`ZvzV_{Ic1KJs7EW9m zuah=N?&9JT3_j@G($70!172YjVC{jV0i6$fM zYB1vrt1tRjhok!@RmYA*mat*-OZlP9O25QNZmw$ddX==*Jyjgq<^!U+qmwvVxAO1+ zRvEL?LcdBvm^wUlO_s2Q_Wo2VfoNR~b_t(`+Gk zhx45#5aJ3oa5bWw@dz7uaV9^Qa_qWay=_DJ(~IX@|*>H zVdTB?BJN|YzR?UTOMxrGj20C%@dKGgARRR=E)+&1uLUlKwEJJ4?HVkF@^)FelduI7 z65r?5!g0w&5alV9syMcJ`Ud?wjbDnchwWzy#%nrFKZOM_s(KxWogW{Hu#k=xa<67y zt^NGqI+D;mT$wLLaps9zhi_Kb_PXpyt_rITPd!O23RU-gQ>8)?grT1BPIVwGNcL>F z%N9FS3Iv#SUJ(uw_IOaS^7<4!oTmoD4^>-}^*w;kzn4-2JrB9LI=%VHP}wI}qAoYX zD-2LOJKu@mx!7w-KuxL7JCN)W#j6>txsQvnkU{vzIP9AXii<}xFCmvdG2%Q(FrQ+n zsxrh-$y!0*wB7&)cw2W9+MN@n$w*%G|MmSPsΞ!$zRt_U%qaQt%D2YIfRR;z3~n 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 z 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 diff --git a/docs/public/screenshots/02-cloudflare-api-token-permissions.png b/docs/public/screenshots/02-cloudflare-api-token-permissions.png deleted file mode 100644 index 8410da5f04debb21dacd71e72ca2d296fde514bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83120 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 diff --git a/docs/public/screenshots/03-github-actions-variables.png b/docs/public/screenshots/03-github-actions-variables.png deleted file mode 100644 index be9d5952bcad7656e45f294f988c8bf739ec60cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55232 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 diff --git a/docs/public/screenshots/08-github-actions-secrets.png b/docs/public/screenshots/08-github-actions-secrets.png deleted file mode 100644 index be9d5952bcad7656e45f294f988c8bf739ec60cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55232 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 e+)(lDpS)|k{T+S%tO8)bF?hQAxvX-accounts` | D1 名称 | -| `DOCS_PROJECT_NAME` | `edgessh-docs` | VitePress Pages 项目名,只供 `Deploy docs` 使用 | - -## Worker Secret - -| 名称 | 必需 | 格式 | -| --- | --- | --- | -| `ACCESS_TEAM_DOMAIN` | 是 | `my-team.cloudflareaccess.com`,无协议或路径 | -| `ACCESS_AUD` | 是 | 当前 Self-hosted Access 应用的 AUD Tag | -| `ENCRYPTION_KEY` | 是 | 解码后 32 字节的标准 Base64 | - -生产 Secret 在 GitHub Actions Secrets 中配置,由 `Deploy` workflow 经标准输入同步到 Cloudflare Worker。Worker 的 **Variables and Secrets** 页面只用于核验同步结果;不要在那里维护另一套值,也不要把 Secret 写入 `wrangler.toml` 或源码。 - -## 普通变量 - -| 名称 | 默认值 | 范围 | 说明 | -| --- | --- | --- | --- | -| `CONNECT_TIMEOUT_MS` | `10000` | `2000` 至 `30000` | TCP 建连超时,单位毫秒 | - -## 资源 binding - -| 名称 | 类型 | 说明 | -| --- | --- | --- | -| `DB` | D1 | 加密主机资料与 migration 状态 | -| `SSH_SESSIONS` | Durable Object | 每会话 SSH 客户端 | -| `ASSETS` | Static Assets | Vite 构建后的 EdgeSSH 前端 | - -这些 binding 由 Wrangler 配置生成,不要在 Variables and Secrets 中创建同名值。 - -## 本地变量 - -本地开发把 `.env.example` 复制为 `.dev.vars`,再填入开发值。`.dev.vars` 已被 Git 忽略,不应提交。 - -本地仍执行 Access JWT 校验,没有匿名开发绕过开关。 diff --git a/docs/reference/limits.md b/docs/reference/limits.md deleted file mode 100644 index ea17560..0000000 --- a/docs/reference/limits.md +++ /dev/null @@ -1,41 +0,0 @@ -# 支持范围与限制 - -部署前先核对下表。未支持的能力不会因为调整 Cloudflare 权限或增大超时而出现。 - -## 当前支持 - -| 类别 | 支持情况 | -| --- | --- | -| SSH | SSH 2.0、交互式 Shell、PTY、窗口尺寸同步、Keepalive | -| 密码认证 | password 与单密码提示 keyboard-interactive | -| 私钥 | 未加密 OpenSSH Ed25519、RSA、ECDSA P-256/P-384/P-521 | -| 文件 | SFTP v3,单文件上传与下载上限 64 MiB | -| 目录 | 浏览、新建、重命名、删除空目录 | -| 主机管理 | 每个 Access 身份最多 200 台 | -| 终端编码 | UTF-8、GB18030、Big5,取决于浏览器支持 | -| 网络目标 | 公网地址;Cloudflare Workers 不允许出站 TCP 25 | - -## 暂不支持 - -- 带 passphrase 的加密私钥。 -- PEM 或 PKCS#8 私钥。 -- SSH Agent。 -- 多因素或多轮 keyboard-interactive。 -- SCP。 -- 端口转发。 -- ProxyJump。 -- SSH 压缩。 -- 会话内 rekey。 -- 团队共享主机库。 -- 本地账号、密码找回或匿名访问。 -- 递归删除非空目录。 - -## 行为边界 - -- 地球位置不表示在线状态,也不显示伪造的延迟或在线数。 -- 同一城市的多个点位可能接近,主机列表始终是完整入口。 -- Worker 处理明文 SSH 凭据,因此不是端到端加密。 -- `workers.dev` 可用于诊断,但正式使用应从 Access 保护的自定义域名进入。 -- 同一个固定来源 IP 白名单通常不适用于 Cloudflare Workers 出站连接。 - -需要新能力时,先在 GitHub 提交具体使用场景。不要通过删除公网地址校验、Access 校验或主机指纹确认来实现快捷绕过。 diff --git a/docs/reference/screenshots.md b/docs/reference/screenshots.md deleted file mode 100644 index f5583ca..0000000 --- a/docs/reference/screenshots.md +++ /dev/null @@ -1,52 +0,0 @@ -# 截图清单 - -文档已复用本地 EdgeChat 文档中的通用界面截图,并保留确实需要 EdgeSSH 实际环境的占位。后续只需补齐下表中标记为“待补”的项目。 - -| 状态 | 文件名 | 页面 | 画面重点 | -| --- | --- | --- | --- | -| 已复用 | `01-fork-repository.png` | Actions 部署 | Fork 入口 | -| 已复用 | `02-cloudflare-api-token-permissions.png` | API Token | Token 模板入口 | -| 已复用 | `03-github-actions-variables.png` | Actions 部署 | Secrets and variables 入口 | -| 已复用 | `04-run-deploy-workflow.png` | Actions 部署 | Run workflow 与 main 分支 | -| 待补 | `05-deploy-success.png` | Actions 部署 | EdgeSSH 绿色成功状态与关键步骤 | -| 待补 | `06-zero-trust-application.png` | Zero Trust | EdgeSSH Self-hosted 类型与域名 | -| 待补 | `07-zero-trust-policy.png` | Zero Trust | Allow、Include、Emails | -| 已复用 | `08-github-actions-secrets.png` | Worker Secret | Repository secrets 入口 | -| 待补 | `09-access-login.png` | Zero Trust | EdgeSSH 正式域名与登录页 | -| 已有 | `10-edgessh-host-list.png` | 验收 | 使用保留地址的主机总览演示 | -| 待补 | `11-pages-custom-domain.png` | 文档站部署 | Pages 自定义域名入口 | - -## 截图规范 - -- 使用 1440px 或更宽的桌面视口,保留关键面包屑和页面标题。 -- 只截与当前步骤有关的区域,不截完整桌面。 -- API Token、Secret、Access AUD、Cookie、邮箱、真实 IP 和仓库私密信息必须打码。 -- 不要用模糊覆盖关键按钮;敏感值可以使用纯色实块遮盖。 -- 使用 PNG,保持界面文字清晰。 -- Cloudflare 或 GitHub 改版后,优先保证概念与字段名可辨认,不要求像素级复刻旧界面。 - -## 接入示例 - -原占位: - -```md - -``` - -添加图片后: - -```md - -``` - -提交前运行 `npm run docs:build`,确认没有断链或资源错误。 diff --git a/docs/reference/security.md b/docs/reference/security.md deleted file mode 100644 index 7e59e5e..0000000 --- a/docs/reference/security.md +++ /dev/null @@ -1,73 +0,0 @@ -# 架构与安全边界 - -EdgeSSH 让个人管理员通过浏览器访问 SSH,但它不会把 Worker 变成“不可信中转”。理解信任边界,是决定是否保存生产凭据的前提。 - -## 请求路径 - -```text -Cloudflare Access - │ 注入并签名 Access JWT - ▼ -Worker - ├─ 校验签名、issuer、audience、有效期、sub 与邮箱 - ├─ API:按 Access sub 读取当前身份的数据 - ├─ D1:读取或写入 AES-256-GCM 密文 - └─ 一次性会话票据 - ▼ -Durable Object - ├─ SSH 传输、认证与终端通道 - ├─ SFTP 辅助通道 - └─ 进程与系统信息通道 - ▼ -公网 SSH 服务器 -``` - -## 身份边界 - -EdgeSSH 不信任单独的邮箱请求头。Worker 使用 `jose` 验证 `Cf-Access-Jwt-Assertion`,并检查: - -- RS256 签名。 -- Issuer 是否属于配置的 Team Domain。 -- Audience 是否匹配当前 Access 应用。 -- 有效期。 -- 用户 `sub` 与邮箱。 - -主机 API、会话票据和各类 WebSocket 附着都要求有效身份。 - -## 数据加密 - -每条主机记录绑定 Access `sub`。Worker 使用 AES-256-GCM 加密完整主机资料,包括地址、密码或私钥、服务器指纹和位置。 - -- 每次加密使用随机 96-bit IV。 -- AAD 绑定账户和记录 ID。 -- 数据库存储 `v1..` 格式密文。 -- 列表响应不返回连接凭据。 - -`ENCRYPTION_KEY` 丢失后,现有密文无法恢复。直接替换 Secret 不会自动重加密数据。 - -## 不是端到端加密 - -Worker 是 SSH 客户端,需要在内存中处理明文连接凭据。以下主体属于信任边界: - -- 可以修改 Worker 代码并部署的人。 -- 可以读取或修改 Worker Secret 的人。 -- 可以修改 GitHub Actions 部署凭据的人。 -- Cloudflare 账户本身。 - -因此,EdgeSSH 适合部署在个人或明确受控的账户中,不应把未知第三方部署当作凭据保险箱。 - -## 目标地址限制 - -Worker 会解析目标主机并拒绝私人、回环、链路本地等非公网地址,降低 SSRF 和 DNS 重绑定风险。地理定位服务只接收服务器公网 IP,不接收 SSH 用户名、密码、私钥或命令。 - -## 会话边界 - -每个 SSH 会话由 Durable Object 隔离。浏览器使用一次性票据建立主 WebSocket,辅助通道使用附着令牌,并校验同源请求。 - -## 操作建议 - -- Access 策略只允许明确管理员身份。 -- SSH 使用低权限专用账号或密钥。 -- 定期撤销不再使用的 Cloudflare Token。 -- 不在日志、截图、Issue 中泄露凭据或 Access 信息。 -- 真实操作前核对服务器指纹。 diff --git a/docs/usage/files-and-processes.md b/docs/usage/files-and-processes.md deleted file mode 100644 index 5bf8591..0000000 --- a/docs/usage/files-and-processes.md +++ /dev/null @@ -1,44 +0,0 @@ -# 文件与进程 - -终端旁的辅助面板通过独立 SSH 通道运行。它们与主终端共享当前受认证会话,但拥有各自的附着令牌和消息边界。 - -## SFTP 文件管理 - -当前实现基于 SFTP v3,支持: - -- 浏览远端目录。 -- 上传与下载单个文件。 -- 新建目录。 -- 重命名文件或目录。 -- 删除文件。 -- 删除空目录。 - -单文件上传与下载上限为 64 MiB。大文件、目录递归传输或需要断点续传时,建议在终端中使用服务器已有工具。 - -::: warning 先用测试目录验收 -首次部署后,在专门测试目录中完成上传、下载、重命名与删除。不要直接使用 `/etc`、应用数据目录或生产发布目录。 -::: - -## 进程面板 - -进程面板通过远端命令收集: - -- CPU 使用情况。 -- 系统负载。 -- 内存与 Swap。 -- 进程列表。 - -显示结果取决于远端系统提供的命令和输出格式。系统过于精简或权限受限时,部分指标可能不可用,但不应影响主终端。 - -## 系统识别 - -EdgeSSH 会读取远端系统信息,识别常见 Linux 发行版、版本与架构。探测只用于界面展示,不会安装软件或修改系统文件。 - -## 辅助面板故障 - -遇到面板无法加载时: - -1. 先确认主终端仍可执行命令。 -2. 检查 SSH 用户是否有权读取目标目录或进程信息。 -3. 查看浏览器中的用户可读错误,不要上传包含凭据的完整网络记录。 -4. 重新进入工作台,排除辅助通道的临时断开。 diff --git a/docs/usage/hosts.md b/docs/usage/hosts.md deleted file mode 100644 index 165017b..0000000 --- a/docs/usage/hosts.md +++ /dev/null @@ -1,37 +0,0 @@ -# 管理主机 - -通过 Cloudflare Access 登录后,首页会显示当前身份拥有的主机。不同 Access `sub` 的数据彼此隔离,同一身份最多保存 200 台主机。 - -## 新建主机 - -选择新增主机,填写: - -| 字段 | 说明 | -| --- | --- | -| 名称 | 用于列表识别,例如“东京测试机” | -| 地址 | 公网域名或公网 IP,不带协议 | -| 端口 | SSH 端口,默认通常为 `22` | -| 用户名 | 目标服务器的 SSH 用户 | -| 分组 | 可选,用于筛选 | -| 认证方式 | 密码或未加密 OpenSSH 私钥 | -| 终端编码 | UTF-8、GB18030 或 Big5 | - -保存地址时,Worker 会解析公网 IP 并尝试获取城市信息。定位失败不会阻止保存或连接;地球上的点位只表示记录位置,不表示服务器在线。 - -## 凭据更新规则 - -编辑主机时,凭据输入留空表示保留原值。切换认证方式时,应明确填写新方式所需凭据并保存。 - -主机列表接口不会返回密码或私钥。建立连接前,Worker 才会解密当前记录,并为一次性会话票据准备连接信息。 - -## 搜索与分组 - -使用搜索查找名称、地址或标签,并用分组筛选减少列表范围。地球视图和主机列表都是完整入口:点选地球标记或列表项都可以进入工作台。 - -## 刷新位置 - -服务器迁移或 DNS 指向变化后,可以从主机编辑界面刷新定位。刷新会重新解析公网地址并更新加密资料,不会检测服务器是否在线。 - -## 删除主机 - -删除操作只移除当前身份的这条加密记录,不会关闭服务器、删除服务器文件或修改 SSH 配置。若对应工作台仍在使用,先退出会话再删除记录。 diff --git a/docs/usage/terminal.md b/docs/usage/terminal.md deleted file mode 100644 index d46b70a..0000000 --- a/docs/usage/terminal.md +++ /dev/null @@ -1,46 +0,0 @@ -# 终端与主机指纹 - -EdgeSSH 在 Worker 内完成 SSH 2.0 握手、密钥交换、认证和通道管理。浏览器通过 WebSocket 与当前 Durable Object 会话通信。 - -## 首次连接 - -选择主机后,EdgeSSH 会建立 SSH 传输并展示服务器指纹。首次连接必须从可信渠道核对 SHA-256 指纹: - -```bash -ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub -E sha256 -``` - -命令需要在目标服务器或可信控制台中运行。不同密钥类型可能使用不同文件名。 - -确认指纹后,EdgeSSH 才会继续发送 SSH 凭据。已保存的指纹会参与后续连接检查。 - -## 指纹发生变化 - -不要直接接受变化。常见原因包括: - -- 服务器重装或重新生成 Host Key。 -- 域名解析到了另一台主机。 -- 负载均衡后端没有统一主机密钥。 -- 连接遭到中间人拦截。 - -先通过云厂商控制台或服务器本地核实,再在主机记录中更新指纹。 - -## 终端操作 - -工作台支持: - -- 交互式 Shell 与 PTY。 -- 浏览器尺寸变化时同步终端行列。 -- 全屏模式。 -- 当前会话日志。 -- UTF-8、GB18030 与 Big5 解码。 - -如果中文乱码,先确认服务器 Locale,再切换 EdgeSSH 的终端编码。编码设置只影响浏览器怎样解释字节,不会修改远端系统 Locale。 - -## 认证方式 - -支持密码、单密码提示的 keyboard-interactive,以及未加密 OpenSSH 私钥。更复杂的 MFA、多轮键盘交互、SSH Agent 和带 passphrase 私钥暂不支持。 - -## 退出会话 - -从工作台返回主机总览会断开当前 SSH 会话。不要把浏览器标签页长期当作后台任务运行器;需要持续执行的命令应在服务器端使用 `tmux`、`screen` 或 systemd 等工具托管。 diff --git a/docs/wrangler.toml b/docs/wrangler.toml deleted file mode 100644 index 7edafdf..0000000 --- a/docs/wrangler.toml +++ /dev/null @@ -1,3 +0,0 @@ -name = "edgessh-docs" -pages_build_output_dir = ".vitepress/dist" -compatibility_date = "2026-09-20" diff --git a/frontend/index.html b/frontend/index.html index ab721a4..c51b424 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -1,10 +1,10 @@ - + - + EdgeSSH diff --git a/frontend/src/main.ts b/frontend/src/main.ts index 4dbc76c..6e4019a 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -13,7 +13,6 @@ import { resetTerminalForConnection } from './terminal-session'; import { WebSocketReconnectManager } from './ws-reconnect'; import type { ReconnectLogEntry } from './ws-reconnect'; import './style.css'; -import './workspace-theme.css'; type AuthMethod = 'password' | 'publickey'; type ConnectionState = 'idle' | 'connecting' | 'connected' | 'disconnecting' | 'error'; diff --git a/frontend/src/workspace-theme.css b/frontend/src/workspace-theme.css deleted file mode 100644 index bb4d687..0000000 --- a/frontend/src/workspace-theme.css +++ /dev/null @@ -1,242 +0,0 @@ -/* Hallmark · macrostructure: Workbench(保留) · theme: EdgeSSH white / orange - * pre-emit critique: P5 H4 E4 S5 R5 V4 - * 独立适配上游工作台,不改其 DOM、布局状态类或业务代码,降低后续合并成本。 - * 总览的 --home-* 是品牌来源;终端输出继续使用上游深色 ANSI 调色板。 - */ - -:root { - --sans: var(--home-font); - --mono: var(--home-mono); - --workspace-dock-height: 40px; - --workspace-on-accent: #fff; -} - -:root[data-theme='light'] { - --bg: var(--home-bg); - --panel: var(--home-surface); - --surface: var(--home-surface); - --surface-2: var(--home-bg); - --surface-3: var(--home-line); - --border: var(--home-line); - --border-soft: var(--home-line); - --text: var(--home-ink); - --muted: var(--home-muted); - --muted-2: var(--home-muted); - /* 小号橙色文字用总览的深橙色;实心按钮仍保持原品牌橙色。 */ - --accent: var(--home-accent-hover); - --accent-strong: var(--home-accent-hover); - --accent-dim: var(--home-accent-soft); - --workspace-action: var(--home-accent); - --workspace-success: var(--home-success); - --danger: var(--home-danger); - --shadow: 0 8px 28px var(--home-shadow); - --terminal: #080d12; -} - -:root[data-theme='dark'] { - --bg: #13161c; - --panel: #1a1e26; - --surface: #1e232c; - --surface-2: #252b35; - --surface-3: #303846; - --border: #394150; - --border-soft: #2c3340; - --text: #eef0f4; - --muted: #b0b8c6; - --muted-2: #99a4b5; - --accent: #ff9a70; - --accent-strong: #ffb393; - --accent-dim: #ff9a701a; - --workspace-action: var(--accent); - --workspace-on-accent: #29150d; - --workspace-success: #69e6b4; - --terminal: #080d12; -} - -/* 所有组件适配限定在 #app,避免反向改变用户自己的总览与主机编辑弹窗。 */ -#app .topbar { - background: var(--panel); - box-shadow: none; -} - -#app .brand { - gap: 12px; - font-family: var(--home-display); - font-size: 22px; - font-weight: 750; - letter-spacing: -.7px; -} - -#app .brand > span:last-child { color: var(--workspace-action); } -#app .brand strong { color: var(--text); font-weight: inherit; } -#app .brand-mark { - border: 0; - background: transparent; - color: var(--workspace-action); - font-size: 24px; -} - -#app .home-back { - width: auto; - border: 1px solid var(--border); - background: var(--surface); - color: var(--text); -} - -#app .workspace { background: var(--bg); } -#app .terminal-card { - grid-template-rows: minmax(0, 1fr) minmax(var(--workspace-dock-height), 0fr); - box-shadow: none; -} -#app .terminal-card.workspace-panel-open { - grid-template-rows: minmax(0, 1.618fr) minmax(var(--workspace-dock-height), 1fr); -} -#app .workspace-dock { grid-template-rows: var(--workspace-dock-height) minmax(0, 1fr); } - -/* 工具栏属于应用外壳,不再与终端输出一起固定为绿黑色。 */ -#app .terminal-toolbar { - border-color: var(--border); - background: var(--panel); - color: var(--muted); -} -#app .session-target strong, -#app .resource-metric-line > strong { color: var(--text); } -#app .session-target span, -#app .session-metrics :is(span, strong), -#app .resource-metric, -#app .resource-metric-line > span, -#app .resource-metric-line > .resource-detail, -#app .resource-network #resource-network-iface { color: var(--muted); } -#app .resource-metric-line > .resource-percentage { - color: color-mix(in srgb, var(--usage-color, var(--text)) 70%, var(--text)); -} -#app .session-metrics > div, -#app .resource-metric + .resource-metric { border-color: var(--border); } -#app .resource-metric progress::-webkit-progress-bar { background: var(--surface-3); } -#app .resource-sparkline { background: var(--surface-2); } -#app .resource-network .resource-network-select, -#app .resource-network .resource-network-select option { - color: var(--text); - background-color: var(--surface-2); - border-color: var(--border); -} -#app .resource-network #resource-network-rate-up { color: var(--danger); } -#app .resource-network #resource-network-rate-down { color: var(--workspace-success); } -#app .terminal-actions .toolbar-button { - min-height: 30px; - border-color: var(--border); - background: var(--surface); - color: var(--muted); - font-size: 11px; -} -#app .terminal-actions .toolbar-button:hover { - border-color: var(--accent); - background: var(--accent-dim); - color: var(--accent); -} - -/* 成功仍用绿色、危险仍用红色,品牌色不能替代状态语义。 */ -#app .live-orb.connected { - background: var(--workspace-success); - box-shadow: 0 0 0 3px color-mix(in srgb, var(--workspace-success) 14%, transparent); -} -#app .process-kill-result[data-state='success'] { - border-color: var(--workspace-success); - background: color-mix(in srgb, var(--workspace-success) 10%, var(--surface)); - color: var(--workspace-success); -} - -#app .terminal-stage { background: var(--terminal); } -#app .terminal-empty { background: var(--surface); color: var(--text); } -#app .terminal-empty p { color: var(--muted); } -#app .empty-glyph, -#app .terminal-empty .small-button { - border-color: color-mix(in srgb, var(--accent) 24%, var(--border)); - background: var(--accent-dim); - color: var(--accent); -} -#app .terminal-empty .small-button { - min-height: 40px; - padding-inline: 16px; - font-family: var(--sans); - font-size: 13px; -} -#app .terminal-empty .small-button:hover { border-color: var(--accent); } -#app .primary-button:not(.is-danger) { - background: var(--workspace-action); - color: var(--workspace-on-accent); -} -#app .primary-button:not(.is-danger):hover:not(:disabled) { - background: var(--accent-strong); - transform: none; -} -#app .host-key-dialog.changed .primary-button { - background: var(--danger); - color: var(--home-surface); -} -#app .event-bar, -#app .dock-tab { font-family: var(--sans); } -#app .dock-tab { font-size: 12px; } -#app .event-line time { color: var(--muted); } -#app .event-line strong { color: var(--accent); } -#app .event-line.error strong { color: var(--danger); } -#app .field > span:first-child, -#app .field > label:first-child, -#app .auth-fieldset legend, -#app .segmented-control span, -#app .primary-button, -#app .secondary-button { font-size: 12px; } -#app .field input, -#app .field select { height: 42px; } -#app .privacy-note { font-size: 11px; line-height: 1.65; } -#app :is(.host-key-dialog, .process-kill-dialog) { box-shadow: var(--shadow); } -#app :is(.host-key-dialog, .process-kill-dialog)::backdrop { background: var(--home-overlay); } -#app .file-tree-row:focus-visible, -#app .process-copyable:focus-visible { - outline: 2px solid var(--accent); - outline-offset: -2px; -} - -@media (max-width: 760px) { - #app .terminal-card.workspace-panel-open { - grid-template-rows: minmax(0, 1fr) minmax(var(--workspace-dock-height), 1fr); - } - /* 资源独占第二行,让窄屏不必在连接状态和操作按钮之间挤压指标。 */ - #app .terminal-pane { grid-template-rows: 88px minmax(0, 1fr); } - #app .terminal-toolbar { - display: grid; - grid-template-columns: minmax(0, 1fr) auto; - grid-template-rows: 44px 44px; - gap: 0 8px; - } - #app .session-target { grid-column: 1; grid-row: 1; } - #app .terminal-actions { grid-column: 2; grid-row: 1; } - #app .resource-metrics { - grid-column: 1 / -1; - grid-row: 2; - width: 100%; - height: 100%; - gap: 12px; - overflow-x: auto; - border-top: 1px solid var(--border); - scrollbar-width: thin; - } - #app .resource-metric { flex: 1 0 auto; } - #app .resource-metric-line { justify-content: flex-start; } - #app .resource-network .resource-network-select { color: transparent; background: transparent; } - #app .topbar-actions, #app .brand-group { gap: 6px; } - #app .dock-tab { padding-inline: 8px; font-size: 11px; } - #app .field :is(input, select, textarea) { font-size: 16px; } -} - -@media (max-width: 480px) { - /* 窄屏优先保留返回、语言与主题操作,仓库入口在桌面仍保持原位。 */ - #app .topbar-actions > a[href] { display: none; } -} - -@media (pointer: coarse) { - :root { --workspace-dock-height: 44px; } - #app .topbar .icon-button { min-width: 44px; min-height: 44px; } - #app .terminal-actions .toolbar-button { min-width: 44px; min-height: 40px; } - #app .file-action { min-width: 44px; min-height: 44px; } -} diff --git a/package-lock.json b/package-lock.json index b7e08ea..6925ab4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,321 +20,12 @@ "flag-icons": "^7.5.0", "typescript": "^5.9.2", "vite": "^7.0.6", - "vitepress": "^1.6.4", "wrangler": "^4.134.0" }, "engines": { "node": ">=22.12.0" } }, - "node_modules/@algolia/abtesting": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.25.0.tgz", - "integrity": "sha512-rSTin9Uta23uaewYVQEp8XI9T3iA/zrg0/1G2vhf8oFFDxFL5vybnZ5IQwsVAg4JpKxPX4/WYNKdcfWrZymk7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", - "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", - "@algolia/autocomplete-shared": "1.17.7" - } - }, - "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", - "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.7" - }, - "peerDependencies": { - "search-insights": ">= 1 < 3" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", - "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.7" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", - "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/client-abtesting": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.59.0.tgz", - "integrity": "sha512-bm2XN0hCSMYwStSsCBT0/PUB2BDxoyR1Lnub3c392HMEy9bi8PUSW8vR6zltVEKWG2t4PQFWMD5C07bmJxGgPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.59.0.tgz", - "integrity": "sha512-XOFPOTa69WuqHR6c5tMgnUUwwqQgNSzMpxmhrgA9KmxRf8WIqEa0cokHJvohk5CYb7CZx0xeSL6Bk2IUJ7Lv7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-common": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.59.0.tgz", - "integrity": "sha512-PC8ipLOYFKRTfIUY1J3FJxS6ryzWziaXmIX9/sNMoUR8L+XhF7hX2QAeUI87YVl5zujvlYTSOb+HAIqKXDjyHQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-insights": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.59.0.tgz", - "integrity": "sha512-yFNcCMM5fHiyoR0HuxMrzy+VjDcmhFUZTm2IJ2DHwGsVH3B5SEob4zTmeEZ3j/AZqNnmrJOCKl/tJnBg7+84bA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-personalization": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.59.0.tgz", - "integrity": "sha512-GYja6HkDt2VrQhWmB2cLx3Z5fDwI9no7q+xwCWcFrTPm5CLH9QZvK0XLO9co1FcNIDxxkMaP3AXM39/XcecEOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-query-suggestions": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.59.0.tgz", - "integrity": "sha512-Wofg7bMpWh8N5qDDZs0wy6whc+KMmdNsxgrIGp9Ug2s1Bka0uq7AjyckdxReKPHLA0Q1qH8X/SNh0wn2t2X2Lw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-search": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.59.0.tgz", - "integrity": "sha512-fHnALZfbEnODczGk14Y/1YBRApp6UEpZUTexGcMUPzY7RDc7q4HN2Y6jh0KUG8Jo9B+q+wOoQEc3ziR0ErbuFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/ingestion": { - "version": "1.59.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.59.0.tgz", - "integrity": "sha512-Fa38s1mHgoaLCT117sfJ6P78rtxUt93CYxBYpq1VOIcslaF+cH+1h5uikAPsKfxLnsuEDZHiBiaI6eNPTsQMRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/monitoring": { - "version": "1.59.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.59.0.tgz", - "integrity": "sha512-NyNsRSqM2tF1MX7ZGw/j4rduoEJiQ5wfvbSo/CFVdEzYCjyxbGFRPOZyS/GETJG9rk1TdHOq8NZqKqk/u1fm4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/recommend": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.59.0.tgz", - "integrity": "sha512-nXBK2uygWtvbCOffMWqqfjjcEtp9enDKY5/2Pw/Hhw8VVaOyK2ThbGK04bNX/Le+qoK1VHYkodWGVTKfw0Otkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.59.0.tgz", - "integrity": "sha512-yb+4afX/zja8QwX0KmV4/ae2kyYkRknsE79CRusYS2U5D8qwn2wq0cn1x12f3tm3F3+5FgmDdbuGdQTuCLSKMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-fetch": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.59.0.tgz", - "integrity": "sha512-Lp52TmpA1QtNmdHzs505Xwf4tgII7RAapkDSF9AAtWIBETcGaTIaXci4Rd9nS6SdaWK1BWTSqAPp5wzh6UN3Ag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-node-http": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.59.0.tgz", - "integrity": "sha512-YYHLEs5rC6oRTFwT7bJaKBR9NSFzikeVHGAT1ffATmUQzR8XqyhHXjoieAUoR7fBU6I5cfy1FVeh5GoRgriuzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", - "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", - "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz", - "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.8" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", - "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@cloudflare/kv-asset-handler": { "version": "0.5.0", "resolved": "https://mirrors.huaweicloud.com/repository/npm/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.5.0.tgz", @@ -466,57 +157,6 @@ "node": ">=12" } }, - "node_modules/@docsearch/css": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", - "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@docsearch/js": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz", - "integrity": "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@docsearch/react": "3.8.2", - "preact": "^10.0.0" - } - }, - "node_modules/@docsearch/react": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", - "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-core": "1.17.7", - "@algolia/autocomplete-preset-algolia": "1.17.7", - "@docsearch/css": "3.8.2", - "algoliasearch": "^5.14.2" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 19.0.0", - "react": ">= 16.8.0 < 19.0.0", - "react-dom": ">= 16.8.0 < 19.0.0", - "search-insights": ">= 1 < 3" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "search-insights": { - "optional": true - } - } - }, "node_modules/@emnapi/runtime": { "version": "1.11.3", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", @@ -970,23 +610,6 @@ "node": ">=18" } }, - "node_modules/@iconify-json/simple-icons": { - "version": "1.2.97", - "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.97.tgz", - "integrity": "sha512-Z6PmM6jvWVU7rmLzqbxCLJA7SeqCnK6lMHXtjyzHPLZebwuoojBEcHHycppahDzEeN9xujRkrV5J8QpOhMyNrg==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "@iconify/types": "*" - } - }, - "node_modules/@iconify/types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", - "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", - "dev": true, - "license": "MIT" - }, "node_modules/@img/colour": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", @@ -1921,93 +1544,6 @@ "win32" ] }, - "node_modules/@shikijs/core": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz", - "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/engine-javascript": "2.5.0", - "@shikijs/engine-oniguruma": "2.5.0", - "@shikijs/types": "2.5.0", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4", - "hast-util-to-html": "^9.0.4" - } - }, - "node_modules/@shikijs/engine-javascript": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz", - "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "2.5.0", - "@shikijs/vscode-textmate": "^10.0.2", - "oniguruma-to-es": "^3.1.0" - } - }, - "node_modules/@shikijs/engine-oniguruma": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz", - "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "2.5.0", - "@shikijs/vscode-textmate": "^10.0.2" - } - }, - "node_modules/@shikijs/langs": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz", - "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "2.5.0" - } - }, - "node_modules/@shikijs/themes": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz", - "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "2.5.0" - } - }, - "node_modules/@shikijs/transformers": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-2.5.0.tgz", - "integrity": "sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/core": "2.5.0", - "@shikijs/types": "2.5.0" - } - }, - "node_modules/@shikijs/types": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", - "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - } - }, - "node_modules/@shikijs/vscode-textmate": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", - "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", - "dev": true, - "license": "MIT" - }, "node_modules/@sindresorhus/is": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", @@ -2035,321 +1571,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/hast": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", - "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/markdown-it": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.2.0.tgz", - "integrity": "sha512-NoQ2yGlLWj4wpxMs+TYmRKk3thDrQ97agr7sFqfLsAlvoS8SNQuTrlObhFqG9iugdTtgOE9jpJ6FNM4ZGsa5xQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/linkify-it": "^5", - "@types/mdurl": "^2" - } - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/web-bluetooth": { - "version": "0.0.21", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", - "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.4.0.tgz", - "integrity": "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.43", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.43.tgz", - "integrity": "sha512-zdiLhnbe1QQqgDT8xZMpNmyqZ3qlI+/Q/FHQco57Kwl/b05HhCzN6eVGN9QU9rbga4CrS0H5SYY8VGHZCt/1Hg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.8", - "@vue/shared": "3.5.43", - "entities": "^7.0.1", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.43", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.43.tgz", - "integrity": "sha512-PEZoAk3NQmsn/ejMzSOCyTYqwGqczrWm70PuhBKjjv1+TCoQAaO/zOqNwjV+honlNstT5ILxtc+8r8UUfj+iEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-core": "3.5.43", - "@vue/shared": "3.5.43" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.43", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.43.tgz", - "integrity": "sha512-FCbrG3XNCRl+js3huuKx4IVHBLTvMkJhVepjbxSPu1gn4yWLaYtGNQdjJGZaMytXB6qb76qQDDmDSLy/vkmleQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.8", - "@vue/compiler-core": "3.5.43", - "@vue/compiler-dom": "3.5.43", - "@vue/compiler-ssr": "3.5.43", - "@vue/shared": "3.5.43", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.21", - "postcss": "^8.5.28", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.43", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.43.tgz", - "integrity": "sha512-GF62orf7KiJX9RqrHNGrYBudsQGD0OhJ5nDs90O8UiDuS40+YMYomiXu6w6EuvtXuRDc3MSNis3EaaSKAVSWpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.43", - "@vue/shared": "3.5.43" - } - }, - "node_modules/@vue/devtools-api": { - "version": "7.7.10", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.10.tgz", - "integrity": "sha512-KxtEpUOOpFz/qOGRrAwA36QF7DqIA+FXgCYit9mk9wjbaZt0sXOFz81ElOZtKA4HbWHUdwNjZHBFsFFyp5BZiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/devtools-kit": "^7.7.10" - } - }, - "node_modules/@vue/devtools-kit": { - "version": "7.7.10", - "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.10.tgz", - "integrity": "sha512-3WNi2Kq4tbpVbmhml7RiphmAt0279oh3fKNeWMQIrltfX8Q91b4i5PL8DtyNKdwmcsGrV4fg+erwWOmD05CLIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/devtools-shared": "^7.7.10", - "birpc": "^2.3.0", - "hookable": "^5.5.3", - "mitt": "^3.0.1", - "perfect-debounce": "^1.0.0", - "speakingurl": "^14.0.1", - "superjson": "^2.2.2" - } - }, - "node_modules/@vue/devtools-shared": { - "version": "7.7.10", - "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.10.tgz", - "integrity": "sha512-wOPslzB8vTvpxwdaOcR2qAbwmuSP0L+rhpoC6Cf56V3Jip+HWb7PQQXOUPgBNQARpXsbQX/+mvi8kKucmBGRwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "rfdc": "^1.4.1" - } - }, - "node_modules/@vue/reactivity": { - "version": "3.5.43", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.43.tgz", - "integrity": "sha512-G/c9GyOZNI2jVaaS6OX1EF1SSFSv7H0ERqNTl4+DTFMlZmB5eVAB53aLQNam/7NL2NPtaDD7RdVrzf8uJzMuOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/shared": "3.5.43" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.5.43", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.43.tgz", - "integrity": "sha512-hU6U6VnVhBGQDpvlnnDlIB8ZGJBiOcgk2lh/0InltHiz3D8oSkluvuvY+do1G2H3+udeKFsmaBlgVYP7gXQzEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.43", - "@vue/shared": "3.5.43" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.5.43", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.43.tgz", - "integrity": "sha512-Bb2Jc0YjjJdMt1SJmb9b2L/IWd3I8lIT9x9eS/xvvP9CiVgna0ffua74xKRmt4/uSJ+0r4iN8ex1jrqkhQGWQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.43", - "@vue/runtime-core": "3.5.43", - "@vue/shared": "3.5.43", - "csstype": "^3.2.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.5.43", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.43.tgz", - "integrity": "sha512-l2Ygjv9NehV94PSBxNWsAHC0j/eIIKbn92mBuWXAPGLnn6HfJ6MH5ubsd+Nk0YoZ5FRuxWI1P2VSoh+dbPQhCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-ssr": "3.5.43", - "@vue/runtime-dom": "3.5.43", - "@vue/shared": "3.5.43" - } - }, - "node_modules/@vue/shared": { - "version": "3.5.43", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.43.tgz", - "integrity": "sha512-uksS7YGMR5NZyr4JNq0Rp+QyLns0ueaz20KwzIPW9R0LH1Vnt4E+XUM29PNseEbf1www2gOuhuDi5AKOIXag9Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@vueuse/core": { - "version": "12.8.2", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz", - "integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/web-bluetooth": "^0.0.21", - "@vueuse/metadata": "12.8.2", - "@vueuse/shared": "12.8.2", - "vue": "^3.5.13" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/integrations": { - "version": "12.8.2", - "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-12.8.2.tgz", - "integrity": "sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vueuse/core": "12.8.2", - "@vueuse/shared": "12.8.2", - "vue": "^3.5.13" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "async-validator": "^4", - "axios": "^1", - "change-case": "^5", - "drauu": "^0.4", - "focus-trap": "^7", - "fuse.js": "^7", - "idb-keyval": "^6", - "jwt-decode": "^4", - "nprogress": "^0.2", - "qrcode": "^1.5", - "sortablejs": "^1", - "universal-cookie": "^7" - }, - "peerDependenciesMeta": { - "async-validator": { - "optional": true - }, - "axios": { - "optional": true - }, - "change-case": { - "optional": true - }, - "drauu": { - "optional": true - }, - "focus-trap": { - "optional": true - }, - "fuse.js": { - "optional": true - }, - "idb-keyval": { - "optional": true - }, - "jwt-decode": { - "optional": true - }, - "nprogress": { - "optional": true - }, - "qrcode": { - "optional": true - }, - "sortablejs": { - "optional": true - }, - "universal-cookie": { - "optional": true - } - } - }, - "node_modules/@vueuse/metadata": { - "version": "12.8.2", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz", - "integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared": { - "version": "12.8.2", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz", - "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "vue": "^3.5.13" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/@xterm/addon-fit": { "version": "0.11.0", "resolved": "https://mirrors.huaweicloud.com/repository/npm/@xterm/addon-fit/-/addon-fit-0.11.0.tgz", @@ -2371,42 +1592,6 @@ "addons/*" ] }, - "node_modules/algoliasearch": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.59.0.tgz", - "integrity": "sha512-wUXzaeI7B526W4y1gFg3lcxgDZ67XSgRJIiellYWOas/pLpO7rOtxm9Gr2E/C8aiSDXIgx1q5TdSsvK67Uakqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/abtesting": "1.25.0", - "@algolia/client-abtesting": "5.59.0", - "@algolia/client-analytics": "5.59.0", - "@algolia/client-common": "5.59.0", - "@algolia/client-insights": "5.59.0", - "@algolia/client-personalization": "5.59.0", - "@algolia/client-query-suggestions": "5.59.0", - "@algolia/client-search": "5.59.0", - "@algolia/ingestion": "1.59.0", - "@algolia/monitoring": "1.59.0", - "@algolia/recommend": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/birpc": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", - "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/blake3-wasm": { "version": "2.1.5", "resolved": "https://mirrors.huaweicloud.com/repository/npm/blake3-wasm/-/blake3-wasm-2.1.5.tgz", @@ -2414,50 +1599,6 @@ "dev": true, "license": "MIT" }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/cookie": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", @@ -2472,36 +1613,6 @@ "url": "https://opencollective.com/express" } }, - "node_modules/copy-anything": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.1.1.tgz", - "integrity": "sha512-AoT6Imdr98feSpFfmFwTFN73ccdr7uFPf27cBCgYvyyRyn1BzLRxMvrHNmwXO5LJMddRy4Rdhw2b1h7vSMKsEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -2512,40 +1623,6 @@ "node": ">=8" } }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/emoji-regex-xs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", - "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", - "dev": true, - "license": "MIT" - }, - "node_modules/entities": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", - "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/error-stack-parser-es": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", @@ -2598,13 +1675,6 @@ "@esbuild/win32-x64": "0.28.1" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, - "license": "MIT" - }, "node_modules/fdir": { "version": "6.5.0", "resolved": "https://mirrors.huaweicloud.com/repository/npm/fdir/-/fdir-6.5.0.tgz", @@ -2630,16 +1700,6 @@ "dev": true, "license": "MIT" }, - "node_modules/focus-trap": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.8.0.tgz", - "integrity": "sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tabbable": "^6.4.0" - } - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://mirrors.huaweicloud.com/repository/npm/fsevents/-/fsevents-2.3.3.tgz", @@ -2655,62 +1715,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/hast-util-to-html": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", - "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^3.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.0", - "zwitch": "^2.0.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hookable": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", - "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/jose": { "version": "6.2.12", "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.12.tgz", @@ -2730,145 +1734,12 @@ "node": ">=6" } }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, "node_modules/mappo": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/mappo/-/mappo-0.3.0.tgz", "integrity": "sha512-xk2pmX+k9nxyL6C1k2zP4oD4t6mZRWKHaiK/wV9Ac+33+qrEPNElLMwBOfOQQZxGvABV0qFKEn1adlzEeW7ZGQ==", "license": "MIT" }, - "node_modules/mark.js": { - "version": "8.11.1", - "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", - "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", - "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, "node_modules/miniflare": { "version": "5.20260917.0-alpha", "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-5.20260917.0-alpha.tgz", @@ -2887,20 +1758,6 @@ "node": ">=22.0.0" } }, - "node_modules/minisearch": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.2.0.tgz", - "integrity": "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==", - "dev": true, - "license": "MIT" - }, - "node_modules/mitt": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", - "dev": true, - "license": "MIT" - }, "node_modules/nanoid": { "version": "3.3.19", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", @@ -2920,18 +1777,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/oniguruma-to-es": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz", - "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex-xs": "^1.0.0", - "regex": "^6.0.1", - "regex-recursion": "^6.0.2" - } - }, "node_modules/path-to-regexp": { "version": "6.3.0", "resolved": "https://mirrors.huaweicloud.com/repository/npm/path-to-regexp/-/path-to-regexp-6.3.0.tgz", @@ -2946,13 +1791,6 @@ "dev": true, "license": "MIT" }, - "node_modules/perfect-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", - "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", - "dev": true, - "license": "MIT" - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://mirrors.huaweicloud.com/repository/npm/picocolors/-/picocolors-1.1.1.tgz", @@ -2974,9 +1812,9 @@ } }, "node_modules/postcss": { - "version": "8.5.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", - "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "version": "8.5.23", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/postcss/-/postcss-8.5.23.tgz", + "integrity": "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==", "dev": true, "funding": [ { @@ -2994,7 +1832,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.18", + "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -3002,70 +1840,6 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/preact": { - "version": "10.29.8", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.29.8.tgz", - "integrity": "sha512-ej2aVZ+vZ8WO7tvlQWRM9N63A0KzF9q4mWJfDUHgYaIofWY9hu74QdnQrjoPMmZi2/nZ5gN0bJCQF49xQqx09Q==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/preact" - }, - "peerDependencies": { - "preact-render-to-string": ">=5" - }, - "peerDependenciesMeta": { - "preact-render-to-string": { - "optional": true - } - } - }, - "node_modules/property-information": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", - "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", - "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "regex-utilities": "^2.3.0" - } - }, - "node_modules/regex-recursion": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", - "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "regex-utilities": "^2.3.0" - } - }, - "node_modules/regex-utilities": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", - "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", - "dev": true, - "license": "MIT" - }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true, - "license": "MIT" - }, "node_modules/rollup": { "version": "4.62.3", "resolved": "https://mirrors.huaweicloud.com/repository/npm/rollup/-/rollup-4.62.3.tgz", @@ -3111,14 +1885,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/search-insights": { - "version": "2.17.3", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", - "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/semver": { "version": "7.8.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", @@ -3182,23 +1948,6 @@ } } }, - "node_modules/shiki": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz", - "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/core": "2.5.0", - "@shikijs/engine-javascript": "2.5.0", - "@shikijs/engine-oniguruma": "2.5.0", - "@shikijs/langs": "2.5.0", - "@shikijs/themes": "2.5.0", - "@shikijs/types": "2.5.0", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - } - }, "node_modules/simple-icons": { "version": "15.22.0", "resolved": "https://registry.npmjs.org/simple-icons/-/simple-icons-15.22.0.tgz", @@ -3228,55 +1977,6 @@ "node": ">=0.10.0" } }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/speakingurl": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", - "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/superjson": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz", - "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "copy-anything": "^4" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/supports-color": { "version": "10.2.2", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", @@ -3290,13 +1990,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/tabbable": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.5.0.tgz", - "integrity": "sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==", - "dev": true, - "license": "MIT" - }, "node_modules/tinyglobby": { "version": "0.2.17", "resolved": "https://mirrors.huaweicloud.com/repository/npm/tinyglobby/-/tinyglobby-0.2.17.tgz", @@ -3314,17 +2007,6 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -3367,109 +2049,6 @@ "pathe": "^2.0.3" } }, - "node_modules/unist-util-is": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", - "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", - "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", - "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", - "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/vite": { "version": "7.3.6", "resolved": "https://mirrors.huaweicloud.com/repository/npm/vite/-/vite-7.3.6.tgz", @@ -3545,574 +2124,6 @@ } } }, - "node_modules/vitepress": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.6.4.tgz", - "integrity": "sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@docsearch/css": "3.8.2", - "@docsearch/js": "3.8.2", - "@iconify-json/simple-icons": "^1.2.21", - "@shikijs/core": "^2.1.0", - "@shikijs/transformers": "^2.1.0", - "@shikijs/types": "^2.1.0", - "@types/markdown-it": "^14.1.2", - "@vitejs/plugin-vue": "^5.2.1", - "@vue/devtools-api": "^7.7.0", - "@vue/shared": "^3.5.13", - "@vueuse/core": "^12.4.0", - "@vueuse/integrations": "^12.4.0", - "focus-trap": "^7.6.4", - "mark.js": "8.11.1", - "minisearch": "^7.1.1", - "shiki": "^2.1.0", - "vite": "^5.4.14", - "vue": "^3.5.13" - }, - "bin": { - "vitepress": "bin/vitepress.js" - }, - "peerDependencies": { - "markdown-it-mathjax3": "^4", - "postcss": "^8" - }, - "peerDependenciesMeta": { - "markdown-it-mathjax3": { - "optional": true - }, - "postcss": { - "optional": true - } - } - }, - "node_modules/vitepress/node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitepress/node_modules/@vitejs/plugin-vue": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", - "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/vitepress/node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/vitepress/node_modules/vite": { - "version": "5.4.21", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", - "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vue": { - "version": "3.5.43", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.43.tgz", - "integrity": "sha512-o5qZoksdnjIKvW1srZ3ab7pcDNYAerBjRe54D0LBLfRdCYFrSgBHVXokMas35czQc0//lmx4/tuY4ZNQ+Rf2Ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.43", - "@vue/compiler-sfc": "3.5.43", - "@vue/runtime-dom": "3.5.43", - "@vue/server-renderer": "3.5.43", - "@vue/shared": "3.5.43" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/workerd": { "version": "1.20260917.1", "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20260917.1.tgz", @@ -4216,17 +2227,6 @@ "@poppinss/exception": "^1.2.2", "error-stack-parser-es": "^1.0.5" } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } } } } diff --git a/package.json b/package.json index 7bd79ea..167baf4 100644 --- a/package.json +++ b/package.json @@ -8,18 +8,10 @@ "dev": "wrangler dev", "dev:web": "vite --config vite.config.ts", "build:web": "vite build --config vite.config.ts", - "docs:dev": "vitepress dev docs", - "docs:build": "vitepress build docs", - "docs:preview": "vitepress preview docs", "typecheck": "tsc -p tsconfig.worker.json --noEmit && tsc -p tsconfig.frontend.json --noEmit", "test": "node --test --experimental-strip-types tests/*.test.ts", - "check": "npm run typecheck && npm run test && npm run docs:build && wrangler deploy --dry-run --outdir .wrangler/build", - "prepare:docs": "node scripts/prepare-pages-project.mjs", - "deploy:docs": "npm run docs:build && node scripts/prepare-pages-project.mjs --deploy", - "prepare:deploy": "node scripts/prepare-deployment.mjs", - "deploy:secrets": "node scripts/sync-worker-secrets.mjs", - "deploy:worker": "wrangler d1 migrations apply DB --remote --config wrangler.deploy.toml && wrangler deploy --config wrangler.deploy.toml", - "deploy": "npm run prepare:deploy && npm run deploy:secrets && npm run deploy:worker" + "check": "npm run typecheck && npm run test && wrangler deploy --dry-run --outdir .wrangler/build", + "deploy": "wrangler deploy" }, "dependencies": { "@xterm/addon-fit": "^0.11.0", @@ -34,7 +26,6 @@ "flag-icons": "^7.5.0", "typescript": "^5.9.2", "vite": "^7.0.6", - "vitepress": "^1.6.4", "wrangler": "^4.134.0" }, "engines": { diff --git a/scripts-tmp-local-index.html b/scripts-tmp-local-index.html deleted file mode 100644 index c5ecfd5..0000000 --- a/scripts-tmp-local-index.html +++ /dev/null @@ -1,613 +0,0 @@ - - - - - - - - - - - - EdgeSSH · Private workspace - - -

- - - - - - - - - - - - -
名称大小类型修改时间权限用户组
- - - - -
- 连接 SSH 后即可管理文件 - -
- - - - - - - - -
- - -
- -
-

主机身份

-

信任此 SSH 主机?

-

服务器提供了尚未为此目标固定的密钥。继续前,请通过可信渠道核验。

-
-
-
目标
--
-
密钥类型
--
- -
SHA-256 指纹
--
-
- -
- - -
-
-
- - -
- -
-

危险操作

-

确认结束进程?

-

将通过 SSH 向远端主机发送 SIGTERM 信号。该操作不可撤销。

-
-
-
PID
--
-
命令
--
-
- -
- - -
-
-
- - - - diff --git a/scripts/prepare-deployment.mjs b/scripts/prepare-deployment.mjs deleted file mode 100644 index 77a7565..0000000 --- a/scripts/prepare-deployment.mjs +++ /dev/null @@ -1,143 +0,0 @@ -import { mkdir, readFile, writeFile } from 'node:fs/promises'; -import path from 'node:path'; -import { fileURLToPath } from 'node:url'; - -const CLOUDFLARE_API = 'https://api.cloudflare.com/client/v4'; -const PROJECT_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); - -function requireValue(value, name) { - const normalized = value?.trim(); - if (!normalized) throw new Error(`缺少 ${name}`); - return normalized; -} - -function validateName(value, name, pattern) { - if (!pattern.test(value)) throw new Error(`${name} 格式无效:${value}`); - return value; -} - -function normalizeDomain(value) { - const domain = value?.trim().toLowerCase(); - if (!domain) return ''; - - const parsed = new URL(`https://${domain}`); - if (parsed.hostname !== domain || parsed.port || parsed.pathname !== '/' || parsed.search || parsed.hash) { - throw new Error(`CUSTOM_DOMAIN 必须是纯域名,不能包含协议、端口或路径:${domain}`); - } - return domain; -} - -export function deploymentSettings(env = process.env) { - const workerName = validateName( - env.WORKER_NAME?.trim() || 'edgessh', - 'WORKER_NAME', - /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/, - ); - const databaseName = validateName( - env.D1_DATABASE_NAME?.trim() || `${workerName}-accounts`, - 'D1_DATABASE_NAME', - /^[A-Za-z0-9](?:[A-Za-z0-9_-]{0,62}[A-Za-z0-9])?$/, - ); - - return { - accountId: requireValue(env.CLOUDFLARE_ACCOUNT_ID, 'CLOUDFLARE_ACCOUNT_ID'), - apiToken: requireValue(env.CLOUDFLARE_API_TOKEN, 'CLOUDFLARE_API_TOKEN'), - workerName, - databaseName, - customDomain: normalizeDomain(env.CUSTOM_DOMAIN), - }; -} - -async function cloudflareRequest(settings, pathname, init, fetchImpl) { - const response = await fetchImpl(`${CLOUDFLARE_API}/accounts/${settings.accountId}${pathname}`, { - ...init, - headers: { - Authorization: `Bearer ${settings.apiToken}`, - 'Content-Type': 'application/json', - ...init?.headers, - }, - }); - const payload = await response.json(); - if (!response.ok || !payload.success) { - const message = payload.errors?.map((error) => error.message).filter(Boolean).join('; ') || response.statusText; - throw new Error(`Cloudflare API 请求失败(${response.status}):${message}`); - } - return payload.result; -} - -async function findDatabase(settings, fetchImpl) { - const query = new URLSearchParams({ name: settings.databaseName, per_page: '100' }); - const databases = await cloudflareRequest(settings, `/d1/database?${query}`, undefined, fetchImpl); - return databases.find((database) => database.name === settings.databaseName); -} - -export async function ensureDatabase(settings, fetchImpl = fetch) { - const existing = await findDatabase(settings, fetchImpl); - if (existing) return { id: existing.uuid, created: false }; - - try { - const created = await cloudflareRequest( - settings, - '/d1/database', - { method: 'POST', body: JSON.stringify({ name: settings.databaseName }) }, - fetchImpl, - ); - return { id: created.uuid, created: true }; - } catch (error) { - // 并行部署可能在查询后率先创建同名数据库,重新查询即可继续复用该资源。 - const concurrentlyCreated = await findDatabase(settings, fetchImpl); - if (concurrentlyCreated) return { id: concurrentlyCreated.uuid, created: false }; - throw error; - } -} - -function replaceOnce(source, pattern, replacement, label) { - if (!pattern.test(source)) throw new Error(`wrangler.toml 缺少 ${label} 配置`); - return source.replace(pattern, replacement); -} - -export function renderWranglerConfig(baseConfig, settings, databaseId) { - let config = replaceOnce(baseConfig, /^name = ".*"$/m, `name = ${JSON.stringify(settings.workerName)}`, 'Worker name'); - config = replaceOnce( - config, - /^database_name = ".*"$/m, - `database_name = ${JSON.stringify(settings.databaseName)}`, - 'D1 database_name', - ); - config = replaceOnce( - config, - /^database_id = ".*"$/m, - `database_id = ${JSON.stringify(databaseId)}`, - 'D1 database_id', - ); - - if (settings.customDomain) { - const routes = `routes = [\n { pattern = ${JSON.stringify(settings.customDomain)}, custom_domain = true }\n]`; - config = replaceOnce(config, /^preview_urls = false$/m, `preview_urls = false\n\n${routes}`, 'preview_urls'); - } - return config; -} - -export async function prepareDeployment(env = process.env, fetchImpl = fetch) { - const settings = deploymentSettings(env); - const baseConfigPath = env.WRANGLER_BASE_CONFIG || path.join(PROJECT_ROOT, 'wrangler.toml'); - const deployConfigPath = env.WRANGLER_DEPLOY_CONFIG || path.join(PROJECT_ROOT, 'wrangler.deploy.toml'); - const database = await ensureDatabase(settings, fetchImpl); - const baseConfig = await readFile(baseConfigPath, 'utf8'); - const deployConfig = renderWranglerConfig(baseConfig, settings, database.id); - - await mkdir(path.dirname(deployConfigPath), { recursive: true }); - await writeFile(deployConfigPath, deployConfig, 'utf8'); - - console.log(`${database.created ? '已创建' : '已复用'} D1 数据库:${settings.databaseName}`); - console.log(`Worker:${settings.workerName}`); - console.log(settings.customDomain ? `自定义域名:${settings.customDomain}` : '自定义域名:未配置,仅发布 workers.dev'); - return { settings, database, deployConfigPath }; -} - -if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) { - prepareDeployment().catch((error) => { - console.error(`部署准备失败:${error instanceof Error ? error.message : String(error)}`); - process.exitCode = 1; - }); -} diff --git a/scripts/prepare-pages-project.mjs b/scripts/prepare-pages-project.mjs deleted file mode 100644 index 6f4a502..0000000 --- a/scripts/prepare-pages-project.mjs +++ /dev/null @@ -1,92 +0,0 @@ -import { spawnSync } from 'node:child_process'; -import path from 'node:path'; -import { fileURLToPath } from 'node:url'; - -const CLOUDFLARE_API = 'https://api.cloudflare.com/client/v4'; -const PROJECT_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); -const WRANGLER_BIN = path.join(PROJECT_ROOT, 'node_modules', 'wrangler', 'bin', 'wrangler.js'); - -function requireValue(value, name) { - const normalized = value?.trim(); - if (!normalized) throw new Error(`缺少 ${name}`); - return normalized; -} - -export function pagesProjectSettings(env = process.env) { - const projectName = env.DOCS_PROJECT_NAME?.trim() || 'edgessh-docs'; - if (!/^[a-z0-9](?:[a-z0-9-]{0,56}[a-z0-9])?$/.test(projectName)) { - throw new Error(`DOCS_PROJECT_NAME 格式无效:${projectName}`); - } - - return { - accountId: requireValue(env.CLOUDFLARE_ACCOUNT_ID, 'CLOUDFLARE_ACCOUNT_ID'), - apiToken: requireValue(env.CLOUDFLARE_API_TOKEN, 'CLOUDFLARE_API_TOKEN'), - projectName, - }; -} - -async function parseCloudflareResponse(response) { - const payload = await response.json(); - if (!response.ok || !payload.success) { - const message = payload.errors?.map((error) => error.message).filter(Boolean).join('; ') || response.statusText; - throw new Error(`Cloudflare Pages API 请求失败(${response.status}):${message}`); - } - return payload.result; -} - -export async function ensurePagesProject(settings, fetchImpl = fetch) { - const endpoint = `${CLOUDFLARE_API}/accounts/${settings.accountId}/pages/projects/${settings.projectName}`; - const headers = { Authorization: `Bearer ${settings.apiToken}`, 'Content-Type': 'application/json' }; - const existing = await fetchImpl(endpoint, { headers }); - - if (existing.ok) { - return { project: await parseCloudflareResponse(existing), created: false }; - } - if (existing.status !== 404) await parseCloudflareResponse(existing); - - const created = await fetchImpl(`${CLOUDFLARE_API}/accounts/${settings.accountId}/pages/projects`, { - method: 'POST', - headers, - body: JSON.stringify({ name: settings.projectName, production_branch: 'main' }), - }); - return { project: await parseCloudflareResponse(created), created: true }; -} - -export async function preparePagesProject(env = process.env, fetchImpl = fetch) { - const settings = pagesProjectSettings(env); - const result = await ensurePagesProject(settings, fetchImpl); - console.log(`${result.created ? '已创建' : '已复用'} Cloudflare Pages 项目:${settings.projectName}`); - return { settings, ...result }; -} - -function deployPages(settings, env = process.env) { - const result = spawnSync( - process.execPath, - [ - WRANGLER_BIN, - 'pages', - 'deploy', - '.vitepress/dist', - '--project-name', - settings.projectName, - '--branch', - 'main', - '--commit-dirty=true', - ], - { cwd: path.join(PROJECT_ROOT, 'docs'), env, stdio: 'inherit' }, - ); - - if (result.error) throw result.error; - if (result.status !== 0) throw new Error(`Cloudflare Pages 部署失败,退出码:${result.status}`); -} - -if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) { - preparePagesProject() - .then(({ settings }) => { - if (process.argv.includes('--deploy')) deployPages(settings); - }) - .catch((error) => { - console.error(`文档站部署准备失败:${error instanceof Error ? error.message : String(error)}`); - process.exitCode = 1; - }); -} diff --git a/scripts/sync-worker-secrets.mjs b/scripts/sync-worker-secrets.mjs deleted file mode 100644 index 894d3e1..0000000 --- a/scripts/sync-worker-secrets.mjs +++ /dev/null @@ -1,66 +0,0 @@ -import { spawnSync } from 'node:child_process'; -import path from 'node:path'; -import { fileURLToPath } from 'node:url'; - -const PROJECT_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); -const WRANGLER_BIN = path.join(PROJECT_ROOT, 'node_modules', 'wrangler', 'bin', 'wrangler.js'); - -function requireSecret(value, name) { - const normalized = value?.trim(); - if (!normalized) throw new Error(`缺少 ${name}`); - return normalized; -} - -function accessTeamDomain(value) { - const domain = requireSecret(value, 'ACCESS_TEAM_DOMAIN').toLowerCase(); - if (!/^[a-z0-9-]+\.cloudflareaccess\.com$/.test(domain)) { - throw new Error('ACCESS_TEAM_DOMAIN 必须是 Cloudflare Access Team Domain,且不含协议或路径'); - } - return domain; -} - -function encryptionKey(value) { - const key = requireSecret(value, 'ENCRYPTION_KEY'); - const decoded = Buffer.from(key, 'base64'); - if (decoded.length !== 32 || decoded.toString('base64') !== key) { - throw new Error('ENCRYPTION_KEY 必须是 32 字节安全随机数的标准 Base64'); - } - return key; -} - -export function deploymentSecrets(env = process.env) { - return { - ACCESS_TEAM_DOMAIN: accessTeamDomain(env.ACCESS_TEAM_DOMAIN), - ACCESS_AUD: requireSecret(env.ACCESS_AUD, 'ACCESS_AUD'), - ENCRYPTION_KEY: encryptionKey(env.ENCRYPTION_KEY), - }; -} - -export function syncWorkerSecrets(env = process.env) { - const secrets = deploymentSecrets(env); - const deployConfigPath = env.WRANGLER_DEPLOY_CONFIG || path.join(PROJECT_ROOT, 'wrangler.deploy.toml'); - - // Secret 仅经标准输入交给 Wrangler,避免在命令参数、配置文件或日志中留下明文。 - const result = spawnSync( - process.execPath, - [WRANGLER_BIN, 'secret', 'bulk', '--config', deployConfigPath], - { - cwd: PROJECT_ROOT, - env, - input: JSON.stringify(secrets), - stdio: ['pipe', 'inherit', 'inherit'], - }, - ); - - if (result.error) throw result.error; - if (result.status !== 0) throw new Error(`Wrangler Secret 同步失败,退出码:${result.status}`); -} - -if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) { - try { - syncWorkerSecrets(); - } catch (error) { - console.error(`Worker Secret 同步失败:${error instanceof Error ? error.message : String(error)}`); - process.exitCode = 1; - } -} diff --git a/src/accounts/crypto.ts b/src/accounts/crypto.ts index 2763f61..76ee252 100644 --- a/src/accounts/crypto.ts +++ b/src/accounts/crypto.ts @@ -1,8 +1,5 @@ const encoder = new TextEncoder(); -export class HostEncryptionKeyError extends Error {} -export class HostPayloadDecryptionError extends Error {} - export function base64(bytes: Uint8Array): string { return btoa(String.fromCharCode(...bytes)); } @@ -16,13 +13,8 @@ export async function digest(value: string): Promise { } async function encryptionKey(secret: string): Promise { - let key: Uint8Array; - try { - key = unbase64(secret); - } catch { - throw new HostEncryptionKeyError(); - } - if (key.length !== 32 || base64(key) !== secret) throw new HostEncryptionKeyError(); + const key = unbase64(secret); + if (key.length !== 32) throw new Error('ENCRYPTION_KEY must be 32 bytes encoded as base64'); return crypto.subtle.importKey('raw', key, 'AES-GCM', false, ['encrypt', 'decrypt']); } @@ -39,15 +31,10 @@ export async function encryptHost(value: unknown, secret: string, accountId: str } export async function decryptHost(value: string, secret: string, accountId: string, hostId: string): Promise { - try { - const [version, iv, ciphertext] = value.split('.'); - if (version !== 'v1') throw new HostPayloadDecryptionError(); - const plaintext = await crypto.subtle.decrypt({ - name: 'AES-GCM', iv: unbase64(iv), additionalData: encoder.encode(`edgessh:v1:${accountId}:${hostId}`), - }, await encryptionKey(secret), unbase64(ciphertext)); - return JSON.parse(new TextDecoder().decode(plaintext)) as T; - } catch (error) { - if (error instanceof HostEncryptionKeyError) throw error; - throw new HostPayloadDecryptionError(); - } + const [version, iv, ciphertext] = value.split('.'); + if (version !== 'v1') throw new Error('Unsupported ciphertext version'); + const plaintext = await crypto.subtle.decrypt({ + name: 'AES-GCM', iv: unbase64(iv), additionalData: encoder.encode(`edgessh:v1:${accountId}:${hostId}`), + }, await encryptionKey(secret), unbase64(ciphertext)); + return JSON.parse(new TextDecoder().decode(plaintext)) as T; } diff --git a/src/accounts/hosts.ts b/src/accounts/hosts.ts index 845811b..907a0e8 100644 --- a/src/accounts/hosts.ts +++ b/src/accounts/hosts.ts @@ -1,8 +1,8 @@ -import { parseConnectMessage, type Env } from '../types.ts'; -import { decryptHost, encryptHost } from './crypto.ts'; -import { APIError, json, readJSON } from './http.ts'; -import { locateHost, type HostLocation } from './location.ts'; -import type { SystemInfo } from '../backend/system-info.ts'; +import { parseConnectMessage, type Env } from '../types'; +import { decryptHost, encryptHost } from './crypto'; +import { APIError, json, readJSON } from './http'; +import { locateHost, type HostLocation } from './location'; +import type { SystemInfo } from '../backend/system-info'; export interface HostPayload { name: string; @@ -82,7 +82,6 @@ function validate(body: Record, previous?: HostPayload): HostPa } export async function hostsRoute(request: Request, env: Env, accountId: string, pathname: string): Promise { - if (!env.DB) throw new APIError('主机存储尚未配置,请检查 DB 绑定并执行 D1 migration。', 503); const match = /^\/api\/hosts(?:\/([a-f0-9-]{36})(?:\/(credentials|location|system))?)?$/.exec(pathname); if (!match) throw new APIError('接口不存在。', 404); const [, id, action] = match; diff --git a/src/accounts/http.ts b/src/accounts/http.ts index 114c6ed..11c1ce8 100644 --- a/src/accounts/http.ts +++ b/src/accounts/http.ts @@ -1,13 +1,7 @@ -import { jsonError, secureResponse } from '../http-security.ts'; -import { HostEncryptionKeyError, HostPayloadDecryptionError } from './crypto.ts'; +import { jsonError, secureResponse } from '../http-security'; export class APIError extends Error { - readonly status: number; - - constructor(message: string, status = 400) { - super(message); - this.status = status; - } + constructor(message: string, readonly status = 400) { super(message); } } export function json(value: unknown, status = 200, headers?: HeadersInit): Response { @@ -40,8 +34,5 @@ export async function readJSON(request: Request, maxBytes = 160 * 1024): Promise } export function apiFailure(error: unknown): Response { - if (error instanceof APIError) return jsonError(error.message, error.status); - if (error instanceof HostEncryptionKeyError) return jsonError('主机存储尚未正确配置,请检查 ENCRYPTION_KEY。', 503); - if (error instanceof HostPayloadDecryptionError) return jsonError('主机资料无法解密,请确认 ENCRYPTION_KEY 未被更换。', 503); - return jsonError('服务暂时不可用,请稍后重试。', 500); + return error instanceof APIError ? jsonError(error.message, error.status) : jsonError('服务暂时不可用,请稍后重试。', 500); } diff --git a/tests/deployment.test.ts b/tests/deployment.test.ts deleted file mode 100644 index 17b499b..0000000 --- a/tests/deployment.test.ts +++ /dev/null @@ -1,105 +0,0 @@ -import assert from 'node:assert/strict'; -import { readFile } from 'node:fs/promises'; -import { test } from 'node:test'; -import { - deploymentSettings, - ensureDatabase, - renderWranglerConfig, -} from '../scripts/prepare-deployment.mjs'; -import { deploymentSecrets } from '../scripts/sync-worker-secrets.mjs'; - -const encryptionKey = Buffer.alloc(32, 7).toString('base64'); - -const settings = deploymentSettings({ - CLOUDFLARE_ACCOUNT_ID: 'account-id', - CLOUDFLARE_API_TOKEN: 'api-token', - WORKER_NAME: 'my-edgessh', - D1_DATABASE_NAME: 'my-edgessh-accounts', - CUSTOM_DOMAIN: 'ssh.example.com', -}); - -function cloudflareResponse(result: unknown, status = 200): Response { - return Response.json({ success: status < 400, result, errors: [] }, { status }); -} - -test('deployment settings use stable defaults and optional workers.dev deployment', () => { - assert.deepEqual( - deploymentSettings({ CLOUDFLARE_ACCOUNT_ID: 'account-id', CLOUDFLARE_API_TOKEN: 'api-token' }), - { - accountId: 'account-id', - apiToken: 'api-token', - workerName: 'edgessh', - databaseName: 'edgessh-accounts', - customDomain: '', - }, - ); -}); - -test('deployment secrets are read from the Actions environment', () => { - assert.deepEqual( - deploymentSecrets({ - ACCESS_TEAM_DOMAIN: ' team.cloudflareaccess.com ', - ACCESS_AUD: ' access-audience ', - ENCRYPTION_KEY: ` ${encryptionKey} `, - }), - { - ACCESS_TEAM_DOMAIN: 'team.cloudflareaccess.com', - ACCESS_AUD: 'access-audience', - ENCRYPTION_KEY: encryptionKey, - }, - ); - assert.throws(() => deploymentSecrets({}), /缺少 ACCESS_TEAM_DOMAIN/); - assert.throws(() => deploymentSecrets({ - ACCESS_TEAM_DOMAIN: 'https://team.cloudflareaccess.com', - ACCESS_AUD: 'access-audience', - ENCRYPTION_KEY: encryptionKey, - }), /ACCESS_TEAM_DOMAIN 必须/); - assert.throws(() => deploymentSecrets({ - ACCESS_TEAM_DOMAIN: 'team.cloudflareaccess.com', - ACCESS_AUD: 'access-audience', - ENCRYPTION_KEY: 'not-a-32-byte-key', - }), /ENCRYPTION_KEY 必须/); -}); - -test('existing D1 database is reused without a create request', async () => { - const requests: Array<{ url: string; method: string }> = []; - const result = await ensureDatabase(settings, async (input, init) => { - requests.push({ url: String(input), method: init?.method || 'GET' }); - return cloudflareResponse([{ name: settings.databaseName, uuid: 'existing-database-id' }]); - }); - - assert.deepEqual(result, { id: 'existing-database-id', created: false }); - assert.equal(requests.length, 1); - assert.equal(requests[0].method, 'GET'); -}); - -test('missing D1 database is created once', async () => { - const methods: string[] = []; - const result = await ensureDatabase(settings, async (_input, init) => { - const method = init?.method || 'GET'; - methods.push(method); - return method === 'POST' - ? cloudflareResponse({ name: settings.databaseName, uuid: 'new-database-id' }) - : cloudflareResponse([]); - }); - - assert.deepEqual(result, { id: 'new-database-id', created: true }); - assert.deepEqual(methods, ['GET', 'POST']); -}); - -test('generated Wrangler config contains resolved resources and custom domain', async () => { - const baseConfig = await readFile(new URL('../wrangler.toml', import.meta.url), 'utf8'); - const config = renderWranglerConfig(baseConfig, settings, 'resolved-database-id'); - - assert.match(config, /^name = "my-edgessh"$/m); - assert.match(config, /^database_name = "my-edgessh-accounts"$/m); - assert.match(config, /^database_id = "resolved-database-id"$/m); - assert.match(config, /pattern = "ssh\.example\.com", custom_domain = true/); -}); - -test('public Wrangler config never contains maintainer resources', async () => { - const baseConfig = await readFile(new URL('../wrangler.toml', import.meta.url), 'utf8'); - - assert.match(baseConfig, /^database_id = "00000000-0000-0000-0000-000000000000"$/m); - assert.doesNotMatch(baseConfig, /^routes\s*=|custom_domain\s*=|ssh\.dltwcnm\.ccwu\.cc/m); -}); diff --git a/tests/encryption.test.ts b/tests/encryption.test.ts index 098bc47..2f02248 100644 --- a/tests/encryption.test.ts +++ b/tests/encryption.test.ts @@ -1,13 +1,6 @@ import assert from 'node:assert/strict'; import { test } from 'node:test'; -import { - encryptHost, - decryptHost, - base64, - HostEncryptionKeyError, - HostPayloadDecryptionError, -} from '../src/accounts/crypto.ts'; -import { apiFailure } from '../src/accounts/http.ts'; +import { encryptHost, decryptHost, base64 } from '../src/accounts/crypto.ts'; const key = base64(crypto.getRandomValues(new Uint8Array(32))); @@ -28,23 +21,9 @@ test('ciphertext is bound to both Access identity and host id', async () => { test('wrong keys, malformed secrets and tampered ciphertext fail closed', async () => { const encrypted = await encryptHost({ password: 'secret' }, key, 'owner', 'host'); - await assert.rejects( - decryptHost(encrypted, base64(crypto.getRandomValues(new Uint8Array(32))), 'owner', 'host'), - HostPayloadDecryptionError, - ); - await assert.rejects(encryptHost({}, base64(new Uint8Array(16)), 'owner', 'host'), HostEncryptionKeyError); - await assert.rejects(encryptHost({}, `${key.slice(0, -1)}A`, 'owner', 'host'), HostEncryptionKeyError); + await assert.rejects(decryptHost(encrypted, base64(crypto.getRandomValues(new Uint8Array(32))), 'owner', 'host')); + await assert.rejects(encryptHost({}, base64(new Uint8Array(16)), 'owner', 'host')); const parts = encrypted.split('.'); parts[2] = (parts[2][0] === 'A' ? 'B' : 'A') + parts[2].slice(1); - await assert.rejects(decryptHost(parts.join('.'), key, 'owner', 'host'), HostPayloadDecryptionError); -}); - -test('host storage failures return actionable errors without exposing internals', async () => { - const invalidKey = apiFailure(new HostEncryptionKeyError()); - assert.equal(invalidKey.status, 503); - assert.deepEqual(await invalidKey.json(), { error: '主机存储尚未正确配置,请检查 ENCRYPTION_KEY。' }); - - const unreadablePayload = apiFailure(new HostPayloadDecryptionError()); - assert.equal(unreadablePayload.status, 503); - assert.deepEqual(await unreadablePayload.json(), { error: '主机资料无法解密,请确认 ENCRYPTION_KEY 未被更换。' }); + await assert.rejects(decryptHost(parts.join('.'), key, 'owner', 'host')); }); diff --git a/tests/hosts.test.ts b/tests/hosts.test.ts deleted file mode 100644 index bf87a0f..0000000 --- a/tests/hosts.test.ts +++ /dev/null @@ -1,146 +0,0 @@ -import assert from 'node:assert/strict'; -import { test } from 'node:test'; -import { base64 } from '../src/accounts/crypto.ts'; -import { APIError } from '../src/accounts/http.ts'; -import { hostsRoute } from '../src/accounts/hosts.ts'; -import type { Env } from '../src/types.ts'; - -interface StoredHost { - id: string; - account_id: string; - encrypted_payload: string; - updated_at: number; -} - -class FakeStatement { - private values: unknown[] = []; - private readonly database: FakeDatabase; - private readonly sql: string; - - constructor(database: FakeDatabase, sql: string) { - this.database = database; - this.sql = sql; - } - - bind(...values: unknown[]): FakeStatement { - this.values = values; - return this; - } - - async all(): Promise<{ results: T[] }> { - if (!this.sql.startsWith('SELECT id, encrypted_payload, updated_at FROM hosts WHERE account_id')) throw new Error(`Unexpected all(): ${this.sql}`); - const accountId = this.values[0]; - const rows = [...this.database.rows.values()] - .filter((row) => row.account_id === accountId) - .sort((left, right) => right.updated_at - left.updated_at) - .map(({ id, encrypted_payload, updated_at }) => ({ id, encrypted_payload, updated_at }) as T); - return { results: rows }; - } - - async first(): Promise { - if (!this.sql.startsWith('SELECT id, encrypted_payload, updated_at FROM hosts WHERE id')) throw new Error(`Unexpected first(): ${this.sql}`); - const [id, accountId] = this.values; - const row = this.database.rows.get(String(id)); - if (!row || row.account_id !== accountId) return null; - return { id: row.id, encrypted_payload: row.encrypted_payload, updated_at: row.updated_at } as T; - } - - async run(): Promise<{ meta: { changes: number } }> { - if (this.sql.startsWith('INSERT INTO hosts')) { - const [id, accountId, encryptedPayload, updatedAt] = this.values; - const count = [...this.database.rows.values()].filter((row) => row.account_id === accountId).length; - if (count >= 200) return { meta: { changes: 0 } }; - this.database.rows.set(String(id), { - id: String(id), account_id: String(accountId), encrypted_payload: String(encryptedPayload), updated_at: Number(updatedAt), - }); - return { meta: { changes: 1 } }; - } - if (this.sql.startsWith('UPDATE hosts SET encrypted_payload = ?, updated_at = ?')) { - const [encryptedPayload, updatedAt, id, accountId] = this.values; - const row = this.database.rows.get(String(id)); - if (!row || row.account_id !== accountId) return { meta: { changes: 0 } }; - row.encrypted_payload = String(encryptedPayload); - row.updated_at = Number(updatedAt); - return { meta: { changes: 1 } }; - } - if (this.sql.startsWith('DELETE FROM hosts')) { - const [id, accountId] = this.values; - const row = this.database.rows.get(String(id)); - return { meta: { changes: row?.account_id === accountId && this.database.rows.delete(String(id)) ? 1 : 0 } }; - } - throw new Error(`Unexpected run(): ${this.sql}`); - } -} - -class FakeDatabase { - readonly rows = new Map(); - - prepare(sql: string): FakeStatement { - return new FakeStatement(this, sql); - } -} - -const key = base64(crypto.getRandomValues(new Uint8Array(32))); - -function environment(database: FakeDatabase): Env { - return { DB: database as unknown as D1Database, ENCRYPTION_KEY: key } as Env; -} - -function request(method: string, body?: unknown): Request { - return new Request('https://ssh.example.com/api/hosts', { - method, - headers: body === undefined ? undefined : { 'Content-Type': 'application/json' }, - body: body === undefined ? undefined : JSON.stringify(body), - }); -} - -const input = { - name: '测试主机', group: '个人', host: '192.0.2.10', port: 22, username: 'root', - authMethod: 'password', password: 'correct horse battery staple', fingerprint: '', - initialCommand: '', termType: 'xterm-256color', encoding: 'utf-8', -}; - -test('correctly configured host storage creates, reads and updates an encrypted host', async () => { - const database = new FakeDatabase(); - const env = environment(database); - - const createdResponse = await hostsRoute(request('POST', input), env, 'account-a', '/api/hosts'); - assert.equal(createdResponse.status, 201); - const created = (await createdResponse.json() as { host: Record }).host; - assert.equal(created.name, input.name); - assert.equal(created.hasCredential, true); - assert.equal('password' in created, false); - - const stored = database.rows.get(String(created.id)); - assert.ok(stored); - assert.equal(stored.encrypted_payload.includes(input.password), false); - assert.equal(stored.encrypted_payload.includes(input.host), false); - - const ownList = await hostsRoute(request('GET'), env, 'account-a', '/api/hosts'); - assert.equal((await ownList.json() as { hosts: unknown[] }).hosts.length, 1); - const otherList = await hostsRoute(request('GET'), env, 'account-b', '/api/hosts'); - assert.deepEqual(await otherList.json(), { hosts: [] }); - - const updatedResponse = await hostsRoute( - request('PUT', { ...input, name: '已更新主机', password: undefined }), - env, - 'account-a', - `/api/hosts/${created.id}`, - ); - assert.equal(updatedResponse.status, 200); - assert.equal((await updatedResponse.json() as { host: { name: string } }).host.name, '已更新主机'); - - const credentials = await hostsRoute(request('POST'), env, 'account-a', `/api/hosts/${created.id}/credentials`); - assert.deepEqual(await credentials.json(), { password: input.password }); - await assert.rejects( - hostsRoute(request('POST'), env, 'account-b', `/api/hosts/${created.id}/credentials`), - (error) => error instanceof APIError && error.status === 404, - ); -}); - -test('missing D1 binding returns an actionable configuration error', async () => { - await assert.rejects( - hostsRoute(request('POST', input), { ENCRYPTION_KEY: key } as Env, 'account-a', '/api/hosts'), - (error) => error instanceof APIError && error.status === 503 && error.message.includes('DB 绑定'), - ); -}); diff --git a/tests/pages-deployment.test.ts b/tests/pages-deployment.test.ts deleted file mode 100644 index f0063f8..0000000 --- a/tests/pages-deployment.test.ts +++ /dev/null @@ -1,56 +0,0 @@ -import assert from 'node:assert/strict'; -import { test } from 'node:test'; -import { - ensurePagesProject, - pagesProjectSettings, -} from '../scripts/prepare-pages-project.mjs'; - -const settings = pagesProjectSettings({ - CLOUDFLARE_ACCOUNT_ID: 'account-id', - CLOUDFLARE_API_TOKEN: 'api-token', - DOCS_PROJECT_NAME: 'my-edgessh-docs', -}); - -function cloudflareResponse(result: unknown, status = 200): Response { - return Response.json( - { success: status < 400, result, errors: status < 400 ? [] : [{ message: 'not found' }] }, - { status }, - ); -} - -test('Pages settings use a stable default project name', () => { - assert.deepEqual( - pagesProjectSettings({ CLOUDFLARE_ACCOUNT_ID: 'account-id', CLOUDFLARE_API_TOKEN: 'api-token' }), - { accountId: 'account-id', apiToken: 'api-token', projectName: 'edgessh-docs' }, - ); -}); - -test('an existing Pages project is reused', async () => { - const methods: string[] = []; - const result = await ensurePagesProject(settings, async (_input, init) => { - methods.push(init?.method || 'GET'); - return cloudflareResponse({ name: settings.projectName }); - }); - - assert.equal(result.created, false); - assert.equal(result.project.name, settings.projectName); - assert.deepEqual(methods, ['GET']); -}); - -test('a missing Pages project is created with main as production branch', async () => { - const requests: Array<{ method: string; body?: string }> = []; - const result = await ensurePagesProject(settings, async (_input, init) => { - const method = init?.method || 'GET'; - requests.push({ method, body: init?.body ? String(init.body) : undefined }); - return method === 'GET' - ? cloudflareResponse(null, 404) - : cloudflareResponse({ name: settings.projectName, production_branch: 'main' }); - }); - - assert.equal(result.created, true); - assert.deepEqual(requests.map(({ method }) => method), ['GET', 'POST']); - assert.deepEqual(JSON.parse(requests[1].body || '{}'), { - name: settings.projectName, - production_branch: 'main', - }); -}); diff --git a/tests/workspace-theme.test.ts b/tests/workspace-theme.test.ts deleted file mode 100644 index 2f8ab5c..0000000 --- a/tests/workspace-theme.test.ts +++ /dev/null @@ -1,33 +0,0 @@ -import assert from 'node:assert/strict'; -import { readFileSync } from 'node:fs'; -import test from 'node:test'; - -const read = (path: string) => readFileSync(new URL(path, import.meta.url), 'utf8'); -const theme = read('../frontend/src/workspace-theme.css'); -const main = read('../frontend/src/main.ts'); -const html = read('../frontend/index.html'); - -test('工作台品牌适配在上游样式之后加载,首次使用与总览一样为浅色', () => { - assert.ok(main.indexOf("import './workspace-theme.css'") > main.indexOf("import './style.css'")); - assert.match(html, /]+data-theme="light"/); - assert.match(main, /localStorage\.getItem\(THEME_STORAGE_KEY\)/); -}); - -test('工作台复用总览品牌变量,不覆盖总览组件', () => { - for (const token of ['--home-bg', '--home-surface', '--home-font', '--home-mono', '--home-accent', '--home-accent-hover']) { - assert.ok(theme.includes(`var(${token})`), `${token} 应复用总览定义`); - } - assert.doesNotMatch(theme, /#dashboard\s*[.{:]/); - assert.match(theme, /:root\[data-theme='dark'\]/); - assert.match(theme, /#app \.live-orb\.connected\s*\{[^}]*var\(--workspace-success\)/); -}); - -test('适配依赖的关键上游选择器仍然存在,终端输出不被品牌换色', () => { - // 只约束适配接缝,不锁死上游整份样式,以免正常更新产生无意义冲突。 - for (const name of ['terminal-pane', 'terminal-toolbar', 'terminal-stage', 'terminal-empty', 'workspace-dock', 'resource-metrics']) { - assert.ok(html.includes(`class="${name}"`) || html.includes(`class="${name} `), `${name} 已变更,请复核适配层`); - } - assert.match(main, /background: '#080d12'/); - assert.match(main, /green: '#69e6b4'/); - assert.doesNotMatch(theme, /\.xterm[^{]*\{/); -}); diff --git a/wrangler.toml b/wrangler.toml index 8901864..8055438 100644 --- a/wrangler.toml +++ b/wrangler.toml @@ -4,6 +4,10 @@ compatibility_date = "2026-07-01" workers_dev = true preview_urls = false +routes = [ + { pattern = "ssh.dltwcnm.ccwu.cc", custom_domain = true } +] + [build] command = "npm run build:web" @@ -27,5 +31,5 @@ new_sqlite_classes = ["SSHSessionDO"] [[d1_databases]] binding = "DB" database_name = "edgessh-accounts" -database_id = "00000000-0000-0000-0000-000000000000" +database_id = "2c1b7a95-a5d6-4a72-a8d2-4132b74aa268" migrations_dir = "migrations"