From 343e316799888d428a256a6b694cb3dce03ff945 Mon Sep 17 00:00:00 2001 From: DXC Date: Wed, 3 Jun 2026 17:29:41 +0800 Subject: [PATCH] =?UTF-8?q?refactor(pipeline):=20=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E4=BC=A0=E8=BE=93=20=E2=80=94=20=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=20ctx=20=E5=AD=97=E6=AE=B5=E5=90=8D/panel=20key/step?= =?UTF-8?q?=20=E5=BD=A2=E5=8F=82=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .qwen/settings.json | 24 + .qwen/settings.json.orig | 23 + .../code_replacement_state_audit/SKILL.md | 141 + .qwen/skills/wq_gui_data_flow/SKILL.md | 206 ++ .../skills/wq_gui_frontend_scaffold/SKILL.md | 229 ++ data/icons-1/1.ico | Bin 0 -> 6 bytes data/icons-1/10.ico | Bin 0 -> 37685 bytes data/icons-1/11.ico | Bin 0 -> 8525 bytes data/icons-1/2.ico | Bin 0 -> 6 bytes data/icons-1/3.ico | Bin 0 -> 6 bytes data/icons-1/4.ico | Bin 0 -> 6 bytes data/icons-1/5.ico | Bin 0 -> 6 bytes data/icons-1/6.ico | Bin 0 -> 6 bytes data/icons-1/7.ico | Bin 0 -> 6 bytes data/icons-1/8.ico | Bin 0 -> 6 bytes data/icons-1/9.ico | Bin 0 -> 6 bytes data/icons-1/IMG_20250904_123453.ico | Bin 0 -> 81109 bytes data/icons-1/IMG_20250904_134825.ico | Bin 0 -> 94690 bytes data/icons-1/IRIS.ico | Bin 0 -> 22693 bytes data/icons-1/Mega Water 1.0.ico | Bin 0 -> 6 bytes data/icons-1/fenmian.ico | Bin 0 -> 14922 bytes data/icons-1/lica.ico | Bin 0 -> 18560 bytes data/icons-1/liucheng.ico | Bin 0 -> 13993 bytes data/icons-1/logo.ico | Bin 0 -> 6683 bytes data/icons-1/table.ico | Bin 0 -> 47684 bytes data/icons-1/uitubiao.ico | Bin 0 -> 96083 bytes data/icons-1/图片矢量化与编辑.ico | Bin 0 -> 51518 bytes .../屏幕截图 2026-03-27 172136.ico | Bin 0 -> 6 bytes .../屏幕截图 2026-03-31 144131.ico | Bin 0 -> 53114 bytes data/icons-1/演示文稿1.ico | Bin 0 -> 11192 bytes .../生成软件GUI矢量图标 (2).ico | Bin 0 -> 6636 bytes .../生成软件GUI矢量图标 (3).ico | Bin 0 -> 8652 bytes .../生成软件GUI矢量图标 (4).ico | Bin 0 -> 11054 bytes data/icons/uitubiao.jpg | Bin 0 -> 208783 bytes data/格式转化.py | 85 + docs/SMOKE_TEST_ROUTE_B_MVP.md | 350 +++ frontend/.env.development | 2 + frontend/.gitignore | 7 + frontend/env.d.ts | 15 + frontend/index.html | 13 + frontend/package.json | 25 + frontend/src/App.vue | 225 ++ frontend/src/api/request.ts | 94 + frontend/src/api/tasks.ts | 155 ++ frontend/src/composables/useTaskPoller.ts | 238 ++ frontend/src/main.ts | 9 + frontend/tsconfig.json | 24 + frontend/tsconfig.node.json | 12 + frontend/vite.config.ts | 21 + license.lic | 8 + new/app/api/_smoke_test_train.py | 201 ++ new/app/api/endpoints.py | 222 ++ new/app/api/modeling.py | 786 ++++++ new/app/core/algorithms/__init__.py | 40 + new/app/core/algorithms/base.py | 85 + new/app/core/algorithms/goodman.py | 123 + new/app/core/algorithms/kutser.py | 211 ++ new/app/core/algorithms/registry.py | 135 + new/app/core/task_store.py | 91 + new/app/main.py | 62 + new/frontend/.gitignore | 24 + new/frontend/README.md | 5 + new/frontend/index.html | 13 + new/frontend/package-lock.json | 2412 +++++++++++++++++ new/frontend/package.json | 27 + new/frontend/public/favicon.svg | 1 + new/frontend/public/icons.svg | 24 + new/frontend/src/App.vue | 225 ++ new/frontend/src/api/request.ts | 15 + new/frontend/src/api/tasks.ts | 13 + new/frontend/src/assets/hero.png | Bin 0 -> 13057 bytes new/frontend/src/assets/vite.svg | 1 + new/frontend/src/assets/vue.svg | 1 + new/frontend/src/components/HelloWorld.vue | 95 + new/frontend/src/composables/useTaskPoller.ts | 51 + new/frontend/src/main.ts | 9 + new/frontend/src/style.css | 296 ++ new/frontend/tsconfig.app.json | 14 + new/frontend/tsconfig.json | 7 + new/frontend/tsconfig.node.json | 24 + new/frontend/vite.config.ts | 7 + run_smoke.bat | 6 + src/core/pipeline/context.py | 21 +- src/core/pipeline/runner.py | 63 +- src/core/prediction/automl_trainer.py | 544 ++++ src/core/steps/data_preparation_step.py | 8 +- .../water_quality_inversion_pipeline_GUI.py | 50 +- src/gui/components/chart_dialogs.py | 430 +++ src/gui/components/data_models.py | 50 + src/gui/components/image_widgets.py | 351 +++ src/gui/core/test_modeling.py | 112 + src/gui/core/viz_thread.py | 346 +++ src/gui/crash_dump.txt | 93 + src/gui/panels/step3_panel.py | 6 +- src/gui/panels/step5_5_panel.py | 6 +- src/gui/panels/step5_panel.py | 2 +- src/gui/panels/step6_panel.py | 2 +- src/gui/scaler_params.pkl | Bin 0 -> 2847 bytes src/gui/water_quality_gui.py | 2 +- 99 files changed, 9127 insertions(+), 91 deletions(-) create mode 100644 .qwen/settings.json create mode 100644 .qwen/settings.json.orig create mode 100644 .qwen/skills/code_replacement_state_audit/SKILL.md create mode 100644 .qwen/skills/wq_gui_data_flow/SKILL.md create mode 100644 .qwen/skills/wq_gui_frontend_scaffold/SKILL.md create mode 100644 data/icons-1/1.ico create mode 100644 data/icons-1/10.ico create mode 100644 data/icons-1/11.ico create mode 100644 data/icons-1/2.ico create mode 100644 data/icons-1/3.ico create mode 100644 data/icons-1/4.ico create mode 100644 data/icons-1/5.ico create mode 100644 data/icons-1/6.ico create mode 100644 data/icons-1/7.ico create mode 100644 data/icons-1/8.ico create mode 100644 data/icons-1/9.ico create mode 100644 data/icons-1/IMG_20250904_123453.ico create mode 100644 data/icons-1/IMG_20250904_134825.ico create mode 100644 data/icons-1/IRIS.ico create mode 100644 data/icons-1/Mega Water 1.0.ico create mode 100644 data/icons-1/fenmian.ico create mode 100644 data/icons-1/lica.ico create mode 100644 data/icons-1/liucheng.ico create mode 100644 data/icons-1/logo.ico create mode 100644 data/icons-1/table.ico create mode 100644 data/icons-1/uitubiao.ico create mode 100644 data/icons-1/图片矢量化与编辑.ico create mode 100644 data/icons-1/屏幕截图 2026-03-27 172136.ico create mode 100644 data/icons-1/屏幕截图 2026-03-31 144131.ico create mode 100644 data/icons-1/演示文稿1.ico create mode 100644 data/icons-1/生成软件GUI矢量图标 (2).ico create mode 100644 data/icons-1/生成软件GUI矢量图标 (3).ico create mode 100644 data/icons-1/生成软件GUI矢量图标 (4).ico create mode 100644 data/icons/uitubiao.jpg create mode 100644 data/格式转化.py create mode 100644 docs/SMOKE_TEST_ROUTE_B_MVP.md create mode 100644 frontend/.env.development create mode 100644 frontend/.gitignore create mode 100644 frontend/env.d.ts create mode 100644 frontend/index.html create mode 100644 frontend/package.json create mode 100644 frontend/src/App.vue create mode 100644 frontend/src/api/request.ts create mode 100644 frontend/src/api/tasks.ts create mode 100644 frontend/src/composables/useTaskPoller.ts create mode 100644 frontend/src/main.ts create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tsconfig.node.json create mode 100644 frontend/vite.config.ts create mode 100644 license.lic create mode 100644 new/app/api/_smoke_test_train.py create mode 100644 new/app/api/endpoints.py create mode 100644 new/app/api/modeling.py create mode 100644 new/app/core/algorithms/__init__.py create mode 100644 new/app/core/algorithms/base.py create mode 100644 new/app/core/algorithms/goodman.py create mode 100644 new/app/core/algorithms/kutser.py create mode 100644 new/app/core/algorithms/registry.py create mode 100644 new/app/core/task_store.py create mode 100644 new/app/main.py create mode 100644 new/frontend/.gitignore create mode 100644 new/frontend/README.md create mode 100644 new/frontend/index.html create mode 100644 new/frontend/package-lock.json create mode 100644 new/frontend/package.json create mode 100644 new/frontend/public/favicon.svg create mode 100644 new/frontend/public/icons.svg create mode 100644 new/frontend/src/App.vue create mode 100644 new/frontend/src/api/request.ts create mode 100644 new/frontend/src/api/tasks.ts create mode 100644 new/frontend/src/assets/hero.png create mode 100644 new/frontend/src/assets/vite.svg create mode 100644 new/frontend/src/assets/vue.svg create mode 100644 new/frontend/src/components/HelloWorld.vue create mode 100644 new/frontend/src/composables/useTaskPoller.ts create mode 100644 new/frontend/src/main.ts create mode 100644 new/frontend/src/style.css create mode 100644 new/frontend/tsconfig.app.json create mode 100644 new/frontend/tsconfig.json create mode 100644 new/frontend/tsconfig.node.json create mode 100644 new/frontend/vite.config.ts create mode 100644 run_smoke.bat create mode 100644 src/core/prediction/automl_trainer.py create mode 100644 src/gui/components/chart_dialogs.py create mode 100644 src/gui/components/data_models.py create mode 100644 src/gui/components/image_widgets.py create mode 100644 src/gui/core/test_modeling.py create mode 100644 src/gui/core/viz_thread.py create mode 100644 src/gui/crash_dump.txt create mode 100644 src/gui/scaler_params.pkl diff --git a/.qwen/settings.json b/.qwen/settings.json new file mode 100644 index 0000000..0fff81c --- /dev/null +++ b/.qwen/settings.json @@ -0,0 +1,24 @@ +{ + "permissions": { + "allow": [ + "Bash(\"c:\\users\\duxin\\appdata\\local\\programs\\python\\python311\\python.exe\" *)", + "Bash(get-childitem *)", + "Bash(select-object *)", + "Bash(python *)", + "Bash(where *)", + "Bash(conda *)", + "Bash(dir *)", + "Bash(cmd *)", + "Bash(del *)", + "Bash(powershell *)", + "Bash(git *)", + "Bash(type *)", + "Bash(.\\venv\\scripts\\python.exe *)", + "Bash(\"d:\\111\\office\\zhlduijie\\1.wq\\wq_gui\\venv\\scripts\\python.exe\" *)", + "Bash(c:\\users\\duxin\\appdata\\local\\programs\\python\\python311\\python.exe *)", + "Bash(venv\\scripts\\python.exe *)", + "Bash(findstr *)" + ] + }, + "$version": 4 +} \ No newline at end of file diff --git a/.qwen/settings.json.orig b/.qwen/settings.json.orig new file mode 100644 index 0000000..511c3af --- /dev/null +++ b/.qwen/settings.json.orig @@ -0,0 +1,23 @@ +{ + "permissions": { + "allow": [ + "Bash(\"c:\\users\\duxin\\appdata\\local\\programs\\python\\python311\\python.exe\" *)", + "Bash(get-childitem *)", + "Bash(select-object *)", + "Bash(python *)", + "Bash(where *)", + "Bash(conda *)", + "Bash(dir *)", + "Bash(cmd *)", + "Bash(del *)", + "Bash(powershell *)", + "Bash(git *)", + "Bash(type *)", + "Bash(.\\venv\\scripts\\python.exe *)", + "Bash(\"d:\\111\\office\\zhlduijie\\1.wq\\wq_gui\\venv\\scripts\\python.exe\" *)", + "Bash(c:\\users\\duxin\\appdata\\local\\programs\\python\\python311\\python.exe *)", + "Bash(venv\\scripts\\python.exe *)" + ] + }, + "$version": 4 +} \ No newline at end of file diff --git a/.qwen/skills/code_replacement_state_audit/SKILL.md b/.qwen/skills/code_replacement_state_audit/SKILL.md new file mode 100644 index 0000000..79659a7 --- /dev/null +++ b/.qwen/skills/code_replacement_state_audit/SKILL.md @@ -0,0 +1,141 @@ +--- +name: 代码替换请求的现状审计 +description: 处理用户"代码替换/新增"指令时,先审计磁盘真实状态再用 ask_user_question 确认——避免覆盖已落盘的高版本代码 +source: auto-skill +extracted_at: '2026-06-03T05:36:58.746Z' +--- + +# 代码替换请求的现状审计 + +## 适用场景 + +用户给出"代码替换"或"按某版本代码新增"指令,但**没有提供与磁盘当前状态对比信息**时。典型触发: + +- 用户贴了一段代码说"请帮我写/替换这个" +- 用户引用某个文档/旧版本/旧 chat 说"按这个来" +- 之前的 `state_snapshot` / `memory` / `git log` 描述可能与磁盘现状不一致 + +## 核心原则 + +**永远不要盲信"用户给的代码是最新版本"**——磁盘上的代码可能已经是更完善的版本(用户或其他 agent 已迭代过)。覆盖 = 丢功能。 + +直接覆盖的代价不一定是显式 bug,也可能是"丢失用户已批准的设计决策"(如 duck-type 探测 / ctx 抽象 / 信号协议 / 二次确认窗 / 错误定位)。 + +## 5 步标准操作 + +### 1. 确认文件存在 + +`glob` 或 `list_directory` 看目标文件是否已存在: + +- 不存在 → 新建 +- 存在 → 进入第 2 步审计 + +### 2. grep 关键符号 + 读关键段 + +- 找"用户贴的代码"里的 3-5 个关键符号(函数名 / 类名 / 关键常量 / import) +- 在磁盘文件里 grep 同样的符号 +- `read_file` 关键段(行号从 grep 结果直接拿) + +### 3. 构造差异对照表 + +列出: + +``` +| 目标文件 | 用户贴的版本 | 磁盘现有版本 | 直接覆盖会丢失 | +``` + +**关键列**:"直接覆盖会丢失什么"——让用户判断成本。具体粒度到"功能模块 / 设计决策 / 防御层 / 入口协议",不要写"代码差异"这种空话。 + +### 4. ask_user_question 让用户拍板 + +3 个标准选项(措辞可调,但**必须给出现状 + 三选一**): + +- **A. 保留现状**(推荐,磁盘已是更新版)—— 直接进 Smoke Test +- **B. 强制覆盖到旧版** —— 写明丢什么 + 备份建议(git stash / 复制到 `_old.py`) +- **C. 混合:只取某段增量** —— 见第 5 步 + +**不要在第 1 次 ask 时就列具体的"哪段增量"**——先让用户在 A/B/C 之间选。如果选 C,再做第 5 步。 + +### 5. 若用户选 C,识别"真正增量" + +对比 1.0 vs 2.0,识别 1.0 真正独有的部分(2.0 没有的): + +- ❌ 排除 1.0 比 2.0 简单的(2.0 是超集 / 工厂分层 / 多了 CLI) +- ❌ 排除 1.0 整体被 2.0 工厂分层超越的(_make_objective vs _build_model + _get_search_space) +- ✅ 关注 1.0 独有的功能层(即使 2.0 不"明显"需要) + +对每个候选增量,再问一次"采纳哪段",让用户具体选(multiSelect=false,一次只选 1 段最稳)。 + +## 落地原则 + +执行"采纳 1.0 某段增量到 2.0"时: + +- **最小化外科手术式编辑**:只动需要动的文件,只改需要改的段 +- **保留 2.0 的设计决策**(duck-type 探测 / ctx 抽象 / 信号协议 / 二次确认窗 / 错误定位) +- **顶部 import 增量用 `replace_all=False` 单点插入**,避免破坏其他 import 顺序 +- **同名变量全链路替换**(如 `self.config` → `clean_config`)要贯穿 ctx 构造 / v2 调用 / v1 fallback,避免双源差异 +- **单步模式不一定要清洗**(不走 panel 完整 config,与清洗器无关) +- **清洗器这种"防患于未然"的代码要给日志**(`self.log_message.emit(f"[清洗器] 已删除 N 个未知 key")`)让运行时可见 + +## 验证三件套 + +落地后必跑: + +1. **AST 语法检查**:`ast.parse(open(p, encoding='utf-8-sig').read())` 对 5 个核心文件 + - 必加 `utf-8-sig`:WQ_GUI 的 water_quality_gui.py line 1 是 BOM,plain `utf-8` 必挂 +2. **关键符号 grep**:确认新代码的关键符号(import / 关键函数调用)都命中,hit 数符合预期 +3. **顶层导入测试**:用 mock PyQt5 + `sys.path.insert(0, 'src/gui/core')`,验证模块整体可加载 + - PyQt5 mock 模板见下方"参考代码" + - Windows 环境调 Python:用 conda env 的 `python.exe` 全路径,不要靠 PATH + +## 反例(不要做) + +- ❌ "按用户贴的代码原封不动写入"——1.0 简化版的覆盖陷阱 +- ❌ "保留 state_snapshot 描述"——state snapshot 可能不准确(写的是意图,磁盘才是事实) +- ❌ "用 git log 反推当前状态"——git log 不能反映工作区未提交改动 +- ❌ "靠 memory 推断当前状态"——memory 可能是 22 天前的(已确认过期) +- ❌ "磁盘和用户给的代码看起来一样就不审计"——一行之差可能就是"防弹层"丢失 + +## 参考代码 + +### PyQt5 mock 模板(worker_thread.py 顶层导入测试) + +```python +import os, sys +os.environ['GDAL_FILENAME_IS_UTF8'] = 'YES' +os.environ['SHAPE_ENCODING'] = 'UTF-8' +sys.path.insert(0, 'src/gui/core') + +import types +pyqt5 = types.ModuleType("PyQt5") +qtc = types.ModuleType("PyQt5.QtCore") +class _QThread: + def __init__(self, *a, **kw): pass +class _Signal: + def __init__(self, *a, **kw): pass +qtc.QThread = _QThread +qtc.pyqtSignal = _Signal +qtc.Qt = type("Qt", (), {"QueuedConnection": 1, "UserRole": 0})() +sys.modules["PyQt5"] = pyqt5 +sys.modules["PyQt5.QtCore"] = qtc + +import worker_thread +# 副作用: check_pipeline_dependencies() 会打印依赖检查日志(可忽略) +``` + +### Windows 上跑 conda env python + +```bat +cmd /c "D:\xxx\anconda\envs\XXX\python.exe D:\path\to\script.py" +``` + +PowerShell 单行 `python -c "..."` 在中文路径 / 双引号 / 单引号嵌套时易翻车,**写临时 .py 文件再用 `cmd /c` 调**最稳。 + +## 案例来源(2026-06-03 WQ_GUI 路线 B MVP) + +- 用户贴 1.0 简化版:300 行 automl_trainer / 简化 worker_thread.run() / 简化 on_run_all_clicked +- 磁盘上 2.0 落盘版:545 行 automl_trainer(_build_model + _get_search_space 工厂 / argparse CLI)/ duck-type 探测 v2 + PipelineContext 抽象 / 完整二次确认窗 / 失败步骤 _focus_step 定位 / [DEPRECATED] stop 保留 +- 1.0 唯一真增量 = **"防弹级参数清洗器"**(method_map 14 项 + inspect.signature 过滤未知 key + has_kwargs 豁免 + 未知 key 数量日志) +- 落地:worker_thread.py:run() 内 set_callback 之后插入 53 行清洗器,self.config 6 处替换为 clean_config +- 验证:5 文件 AST 全通过 + 关键符号 7 项命中 + PyQt5 mock 下 import 成功 +- 净增行数:407 → 457(+50 行) diff --git a/.qwen/skills/wq_gui_data_flow/SKILL.md b/.qwen/skills/wq_gui_data_flow/SKILL.md new file mode 100644 index 0000000..a3a4964 --- /dev/null +++ b/.qwen/skills/wq_gui_data_flow/SKILL.md @@ -0,0 +1,206 @@ +--- +name: WQ_GUI 数据流转架构 +description: WQ_GUI ProjectSession 事件总线驱动的步骤间数据传递机制(完整重构版) +source: auto-skill +extracted_at: '2026-05-28T09:07:34.967Z' +--- + +# WQ_GUI 数据流转架构 + +## 核心结论 + +整个系统是**基于文件路径驱动**的管道,所有数据存储在本地磁盘。重构后通过 `ProjectSession` 事件总线实现 Panel 间完全解耦。 + +--- + +## 1. 旧架构(旧代码中已删除) + +主窗口通过 `self.step_outputs` 字典 + `step_dependencies` 配置 + `auto_populate_*` 系列方法管理步骤间路径填充。存在高度耦合问题: + +```python +# 已废弃并删除 +self.step_outputs = {} +self._init_step_dependencies() +self.update_step_outputs(step_name, work_path) +self.auto_populate_dependent_steps(completed_step) +self.auto_populate_step_inputs(step_id) +self.find_step_output(work_path, step_id, output_type) +self.add_auto_fill_buttons_to_panels() +self.scan_work_directory_for_files(work_path) +``` + +--- + +## 2. 新架构:ProjectSession 事件总线 + +### Session 核心 API(`src/core/project_session.py`) + +```python +class ProjectSession(QObject): + path_updated = pyqtSignal(str, str, str) # step, out_type, path + step_outputs_ready = pyqtSignal(str, str) # step, out_type + + def update_output(step, out_type, path): + """Panel 完成后广播输出路径""" + + def update_outputs(step, {out_type: path, ...}): + """Panel 完成后批量广播多个输出路径""" + + def get_output(step, out_type): + """Panel 可主动查询上游路径(用于自动填充)""" + + def get_step_outputs(step): + """返回该 step 的全部输出字典""" + + def scan_work_directory(): + """主窗口 on_step_completed 末尾调用,扫描并广播所有已知路径""" +``` + +### Panel 重构模板 + +```python +class StepXPanel(QWidget): + def __init__(self, session=None, parent=None): + super().__init__(parent) + self.session = session + self.work_dir = None + self.init_ui() + self._bind_session_signals() + + def _bind_session_signals(self): + if not self.session: + return + self.session.path_updated.connect( + self._on_session_path_updated, Qt.QueuedConnection + ) + + @pyqtSlot(str, str, str) + def _on_session_path_updated(self, step_name, output_type, path): + print(f"[StepX Debug] 收到广播: step={step_name}, type={output_type}, path={path}") + if step_name == 'step1': + if output_type == 'reference_img': + if not self.img_file.get_path().strip(): + self.img_file.set_path(path) + print(f"[StepX] 自动填充参考影像: {path}") + elif output_type == 'water_mask': + if not self.water_mask_file.get_path().strip(): + self.water_mask_file.set_path(path) + print(f"[StepX] 自动填充水域掩膜: {path}") + # ... + + def on_step_finished(self, success, message): + """由主窗口 on_step_completed 通过 getattr 动态调用""" + if not success: + return + if self.session: + outputs = {} + path = self.output_widget.get_path().strip() + if path: + outputs['output_type'] = path + if outputs: + self.session.update_outputs('stepX', outputs) +``` + +### 主窗口两处改动 + +```python +# 1. __init__ 中注入 session(所有 Panel 统一注入) +self.step1_panel = Step1Panel(session=self.session) +self.step2_panel = Step2Panel(session=self.session) +self.step3_panel = Step3Panel(session=self.session) +self.step4_panel = Step4Panel(session=self.session) +self.step5_panel = Step5Panel(session=self.session) +self.step5_5_panel = Step5_5Panel(session=self.session) +self.step6_panel = Step6Panel(session=self.session) +self.step6_5_panel = Step6_5Panel(session=self.session) +self.step6_75_panel = Step6_75Panel(session=self.session) +self.step7_panel = Step7Panel(session=self.session) +self.step8_panel = Step8Panel(session=self.session) +self.step8_5_panel = Step8_5Panel(session=self.session) +self.step8_75_panel = Step8_75Panel(session=self.session) +self.step9_panel = Step9Panel(session=self.session) + +# 2. on_step_completed(通用动态获取,无需维护字典) +def on_step_completed(self, step_name, success, message): + if not success: + return + if hasattr(self, 'session') and self.session: + self.session.scan_work_directory() + + panel = getattr(self, f"{step_name}_panel", None) + if panel and hasattr(panel, 'on_step_finished'): + panel.on_step_finished(success, message) +``` + +--- + +## 3. 全链路事件流 + +### step1 → step2 / step3 路径(通过 Shapefile 栅格化产物) + +| 场景 | 广播的 water_mask 路径 | +|------|----------------------| +| NDWI 模式 | `output_file` 用户指定路径 | +| Shapefile 模式 | `{work_dir}/1_water_mask/water_mask_from_shp.dat`(优先)
若文件不存在则 fallback 回 `mask_file.get_path()` | + +``` +step1 完成 + → step1_panel.on_step_finished() + → session.update_outputs('step1', { + 'reference_img': img_path, + 'water_mask': mask_path # 可能是 .dat 或 .shp(见上表) + }) + → step2_panel._on_session_path_updated() + → step3_panel._on_session_path_updated() +``` + +### step3 → step5 / step7;step5 → 下游训练 + +``` +step3.deglint_image ──┬─→ step5.deglint_image(填充 img_file) + └─→ step7.deglint_image(填充 img_file) + +step5.training_spectra ──┬─→ step5_5.index_features + ├─→ step6.models_dir ──→ step8.predictions + ├─→ step6_5.models_dir ──→ step8_5.predictions + └─→ step6_75.models_dir ──→ step8_75.predictions + +step7.sampling_points ──┬─→ step8 + ├─→ step8_5 + └─→ step8_75 + +step8/8_5/8_75.predictions ──→ step9.distribution_map +``` + +### 各 Panel 监听/发布对照表(完整版) + +| Panel | 监听 | 发布 | +|-------|------|------| +| step1 | — | `reference_img`, `water_mask` | +| step2 | `step1.reference_img`, `step1.water_mask` | `glint_mask` | +| step3 | `step1.reference_img`, `step1.water_mask`, `step2.glint_mask` | `deglint_image` | +| step4 | — | `processed_data` | +| step5 | `step3.deglint_image`, `step4.processed_data`, `step2.glint_mask` | `training_spectra` | +| step5_5 | `step5.training_spectra` | `index_features` | +| step6 | `step5.training_spectra` | `models_dir` | +| step6_5 | `step5.training_spectra` | `models_dir` | +| step6_75 | `step5.training_spectra` | `models_dir` | +| step7 | `step3.deglint_image`, `step1.water_mask`, `step2.glint_mask` | `sampling_points` | +| step8 | `step7.sampling_points`, `step6.models_dir` | `predictions` | +| step8_5 | `step7.sampling_points`, `step6_5.models_dir` | `predictions` | +| step8_75 | `step7.sampling_points`, `step6_75.models_dir` | `predictions` | +| step9 | `step8.predictions`, `step8_5.predictions`, `step8_75.predictions` | `distribution_map` | + +--- + +## 4. 关键约束 + +- `__init__` 参数 `session=None`(向后兼容,主窗口可继续不传) +- 所有 Panel 的 `init_ui / get_config / set_config / update_from_config` 完整保留 +- 删除所有 `self.window().stepX_panel` 跨界访问 +- 使用 `self.session.get_output()` 替代直接读取其他 panel 的 widget +- 监听使用 `Qt.QueuedConnection` 确保跨线程安全 +- 仅在 field 为空时自动填充(`not widget.get_path().strip()`) +- `update_from_config` 中优先从 Session 获取路径,再用 Session 广播 +- 主窗口 `on_step_completed` 中使用 `getattr(self, f"{step_name}_panel", None)` 实现通用动态获取,无需维护硬编码字典 +- `step1` Shapefile 模式下,**不能**直接广播 `.shp` 输入文件,必须拼接 `{work_dir}/1_water_mask/water_mask_from_shp.dat` 作为产物路径 \ No newline at end of file diff --git a/.qwen/skills/wq_gui_frontend_scaffold/SKILL.md b/.qwen/skills/wq_gui_frontend_scaffold/SKILL.md new file mode 100644 index 0000000..5d26c65 --- /dev/null +++ b/.qwen/skills/wq_gui_frontend_scaffold/SKILL.md @@ -0,0 +1,229 @@ +--- +name: WQ_GUI 前端 Vue3 + Element Plus 脚手架 +description: WQ_GUI 项目 frontend/ 目录的 Vite + Vue 3 + TS + Element Plus 最小可运行脚手架,以及 useTaskPoller 与 Element Plus UI 的接线模式 +source: auto-skill +extracted_at: '2026-06-02T08:17:33.116Z' +--- + +# WQ_GUI 前端脚手架 (Vue 3 + Element Plus) + +## 适用场景 + +为 WQ_GUI FastAPI 后端 (`127.0.0.1:8000`) 搭建一个**最小可联调**的浏览器控制台。 +后端已暴露: + +- `POST /api/modeling/train` → `{ task_id, status, kind }` +- `POST /api/modeling/predict` → `{ task_id, status, kind }` +- `GET /api/tasks/{task_id}` → `TaskRecord`(含 PENDING/PROCESSING/SUCCESS/FAILED + 模型指标 / 输出路径) +- `GET /api/algorithms` → 算法清单 + +前端已有 (`frontend/src/`): + +- `api/request.ts`:axios 单例 + 响应拦截器自动 unwrap,baseURL 走 `VITE_API_BASE_URL` 缺省 `http://127.0.0.1:8000` +- `api/tasks.ts`:所有提交 / 查询函数 + 完整 `TaskRecord` / `TaskStatus` / `TaskKind` 类型 +- `composables/useTaskPoller.ts`:完整轮询 composable,支持 3 种用法(静态 / 响应式 taskId / 手动) + +## 1. 一次性补齐的脚手架文件 + +`frontend/` 初始状态**只有 `src/api` 和 `src/composables`**,缺整个 Vite 骨架。直接照下面这 7 个文件铺一遍: + +``` +frontend/ +├── .env.development # VITE_API_BASE_URL=http://127.0.0.1:8000 +├── .gitignore # node_modules / dist / .vite +├── env.d.ts # vite/client + ImportMeta + *.vue shim +├── index.html # 挂载 #app +├── package.json +├── tsconfig.json # 严格模式 + @ → src + bundler resolution +├── tsconfig.node.json # 给 vite.config.ts 用 +├── vite.config.ts # @ alias + 0.0.0.0:5173 +└── src/ + ├── main.ts + └── App.vue +``` + +### 锁定版本(2026-06 联调通过) + +```json +{ + "dependencies": { + "vue": "^3.4.27", + "element-plus": "^2.7.5", + "@element-plus/icons-vue": "^2.3.1", + "axios": "^1.7.2" + }, + "devDependencies": { + "@types/node": "^20.12.12", + "@vitejs/plugin-vue": "^5.0.4", + "typescript": "^5.4.5", + "vite": "^5.2.11", + "vue-tsc": "^2.0.19" + } +} +``` + +**`@types/node` 必加**——`vite.config.ts` 用了 `import { fileURLToPath, URL } from 'node:url'`,否则 `npm run build` 类型检查必挂。 + +### `tsconfig.json` 关键字段 + +- `"moduleResolution": "bundler"` +- `"allowImportingTsExtensions": true`(配合 `vue-tsc --noEmit`) +- `"paths": { "@/*": ["src/*"] }` + `"baseUrl": "."` +- `"include": ["src/**/*.vue"]`(`vue-tsc` 才会处理 SFC) +- `"references": [{ "path": "./tsconfig.node.json" }]` + +### `vite.config.ts` 关键字段 + +```ts +resolve: { + alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) }, +}, +server: { host: '0.0.0.0', port: 5173 }, +``` + +`0.0.0.0` 方便局域网真机调试;端口冲突时 `strictPort: false` 允许 Vite 自动 +1。 + +--- + +## 2. main.ts 模板(全量注册 Element Plus) + +```ts +import { createApp } from 'vue' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' +import * as ElementPlusIconsVue from '@element-plus/icons-vue' + +import App from './App.vue' + +const app = createApp(App) +app.use(ElementPlus) + +// 全量注册图标 () +for (const [name, component] of Object.entries(ElementPlusIconsVue)) { + app.component(name, component) +} +app.mount('#app') +``` + +联调期**全量注册最省事**;后期打包体积大再换 `unplugin-vue-components` 按需。 + +--- + +## 3. useTaskPoller 接线模式(双实例) + +训练 / 推断是**两条独立流水线**,各起一个 `useTaskPoller` 实例。核心套路:把 `task_id` 包成 `ref(null)`,composable 内部 `watch` 会**自动 start()**,无需手动调: + +```ts +import { ref, watch, computed } from 'vue' +import { submitTrain, submitPredict, type TaskRecord } from './api/tasks' +import { useTaskPoller } from './composables/useTaskPoller' + +// —— 训练 —— +const trainTaskId = ref(null) +const trainPoller = useTaskPoller(trainTaskId) // 传 ref 进去, 自动 watch + +async function onStartTrain() { + const { task_id } = await submitTrain({ ... }) + trainTaskId.value = task_id // 赋值后 watch 触发 start() +} + +// —— 推断 —— +const predictTaskId = ref(null) +const predictPoller = useTaskPoller(predictTaskId) +const modelId = ref('') + +// 训练一成功, model_id 自动填入推断输入框 +watch( + () => trainPoller.result.value?.model_id, + (newId) => { if (newId) modelId.value = newId }, +) + +async function onStartPredict() { + const { task_id } = await submitPredict({ model_id: modelId.value, ... }) + predictTaskId.value = task_id +} +``` + +**关键点**: + +- `trainPoller.result.value` 才是 SUCCESS 后的完整 `TaskRecord`;`record.value` 是任意时刻(含中间态)的最新记录。模板里同时展示用 `trainPoller.record.value ?? trainPoller.result.value`。 +- `poller.isPolling.value` / `poller.status.value` / `poller.error.value` / `poller.taskId.value` 都是 `Ref`,模板里必须用 `.value`(它们是嵌套 ref,**Vue 模板不会自动 unwrap**)。 + +--- + +## 4. el-progress 状态映射 + +`PollerStatus = 'idle' | 'PENDING' | 'PROCESSING' | 'SUCCESS' | 'FAILED'` +`el-progress` 的 `status` 接受 `'' | 'success' | 'warning' | 'exception'`。 + +```ts +function progressOf(status: string): number { + switch (status) { + case 'idle': + case 'PENDING': return 10 + case 'PROCESSING':return 60 + case 'SUCCESS': + case 'FAILED': return 100 + default: return 0 + } +} +function progressStatusOf(s: string): '' | 'success' | 'exception' { + if (s === 'SUCCESS') return 'success' + if (s === 'FAILED') return 'exception' + return '' +} +``` + +模板里 `v-if="poller.isPolling.value || poller.status.value === 'SUCCESS' || poller.status.value === 'FAILED'"` 控制展示。 + +--- + +## 5. CSS:深色控制台风(slate 渐变 + 卡片玻璃态) + +```css +.app-root { + min-height: 100vh; + background: linear-gradient(180deg, #0f172a 0%, #1e293b 100%); + color: #e2e8f0; +} +.panel { + background: rgba(30, 41, 59, 0.7) !important; + border: 1px solid rgba(148, 163, 184, 0.18) !important; +} +.app-main { + display: grid; + grid-template-columns: 1fr 1fr; /* 左训练 / 右推断 */ + gap: 20px; +} +@media (max-width: 960px) { .app-main { grid-template-columns: 1fr; } } +``` + +深色背景下 Element Plus 的 `el-form-item__label` / `el-descriptions__label` 默认是黑色文字,必须 `:deep()` 覆盖成浅色。 + +--- + +## 6. 启动与验证 + +```bat +cd /d D:\111\office\ZHLduijie\1.WQ\WQ_GUI\frontend +npm install +npm run dev +``` + +打开 `http://127.0.0.1:5173/`,联调期望路径: + +1. 左侧「开始训练」→ 立即拿到 `task_id` + 黄色 `轮询中` + 进度条 60% +2. 后端 SUCCESS → 进度条变绿,下面出现 `model_id` 标签 + R²/RMSE/MAE +3. 右侧 `model_id` 被自动填入 → 「开始推断」→ 走 `output_zarr_path` 展示 +4. 任何一步 FAILED → 进度条变红 + 后端 `error` 字段 + +--- + +## 7. 已知 caveat + +- **第一次 `npm install` 约 150MB**,要耐心等。 +- `useTaskPoller` 已有 `onUnmounted` 自动清理,**不要再手写 `clearInterval`**。 +- `request.ts` 注释里写明 FastAPI dev 期 `allow_origins=["*"]`,**不需要配 Vite proxy**;如果未来后端收紧 CORS,再在 `vite.config.ts` 加 `server.proxy['/api']`。 +- `feature_start` 后端接受 `number | string`;el-input v-model 出来是 string,**直接传给 API 即可**,后端会自己判别。 +- `v-model` 绑 `ref(4)` 类型注解是必须的,否则 TS 会推断成 `Ref`,输入框失焦报错。 +- `@element-plus/icons-vue` 全量注册后用 `` 调,本期 App.vue 没用到但留着扩展位。 diff --git a/data/icons-1/1.ico b/data/icons-1/1.ico new file mode 100644 index 0000000000000000000000000000000000000000..4012786aaf7d31ccf7f963c14aae96e0b80b9f39 GIT binary patch literal 6 NcmZQzU}Rum0000A00IC2 literal 0 HcmV?d00001 diff --git a/data/icons-1/10.ico b/data/icons-1/10.ico new file mode 100644 index 0000000000000000000000000000000000000000..7d1af4d22e17bc5ab10472b99b210b4da2f783b8 GIT binary patch literal 37685 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 Hu0mjfAn$39 literal 0 HcmV?d00001 diff --git a/data/icons-1/2.ico b/data/icons-1/2.ico new file mode 100644 index 0000000000000000000000000000000000000000..4012786aaf7d31ccf7f963c14aae96e0b80b9f39 GIT binary patch literal 6 NcmZQzU}Rum0000A00IC2 literal 0 HcmV?d00001 diff --git a/data/icons-1/3.ico b/data/icons-1/3.ico new file mode 100644 index 0000000000000000000000000000000000000000..4012786aaf7d31ccf7f963c14aae96e0b80b9f39 GIT binary patch literal 6 NcmZQzU}Rum0000A00IC2 literal 0 HcmV?d00001 diff --git a/data/icons-1/4.ico b/data/icons-1/4.ico new file mode 100644 index 0000000000000000000000000000000000000000..4012786aaf7d31ccf7f963c14aae96e0b80b9f39 GIT binary patch literal 6 NcmZQzU}Rum0000A00IC2 literal 0 HcmV?d00001 diff --git a/data/icons-1/5.ico b/data/icons-1/5.ico new file mode 100644 index 0000000000000000000000000000000000000000..4012786aaf7d31ccf7f963c14aae96e0b80b9f39 GIT binary patch literal 6 NcmZQzU}Rum0000A00IC2 literal 0 HcmV?d00001 diff --git a/data/icons-1/6.ico b/data/icons-1/6.ico new file mode 100644 index 0000000000000000000000000000000000000000..4012786aaf7d31ccf7f963c14aae96e0b80b9f39 GIT binary patch literal 6 NcmZQzU}Rum0000A00IC2 literal 0 HcmV?d00001 diff --git a/data/icons-1/7.ico b/data/icons-1/7.ico new file mode 100644 index 0000000000000000000000000000000000000000..4012786aaf7d31ccf7f963c14aae96e0b80b9f39 GIT binary patch literal 6 NcmZQzU}Rum0000A00IC2 literal 0 HcmV?d00001 diff --git a/data/icons-1/8.ico b/data/icons-1/8.ico new file mode 100644 index 0000000000000000000000000000000000000000..4012786aaf7d31ccf7f963c14aae96e0b80b9f39 GIT binary patch literal 6 NcmZQzU}Rum0000A00IC2 literal 0 HcmV?d00001 diff --git a/data/icons-1/9.ico b/data/icons-1/9.ico new file mode 100644 index 0000000000000000000000000000000000000000..4012786aaf7d31ccf7f963c14aae96e0b80b9f39 GIT binary patch literal 6 NcmZQzU}Rum0000A00IC2 literal 0 HcmV?d00001 diff --git a/data/icons-1/IMG_20250904_123453.ico b/data/icons-1/IMG_20250904_123453.ico new file mode 100644 index 0000000000000000000000000000000000000000..24e27214dcfa822c4c7ee6396bb3f5ab4fe57d6b GIT binary patch literal 81109 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 ES(o z6F|K*260Aw&spSkTELyTv=h$)(KGAo`~G}3`=jsuq2oC3zW2f2!6D}kVJ56#5vvB-Tepu=pSWSh7g)gCrOfAzj5Q> z;OO%QkBhQg%%)M~GsZvr>{CaGG|&6J-e53%`1mnr%yXGG=;7l%V;}$n4kqViS(Rn+ zE8qUsXm#|}ufAyjRNs9?F8lY5zP|NQH%Iuj5w)Cj;J$MmIJRcIDIkOA?=#t220omuf)2>wDu3qb< zAjA^CeBb}*-FN@)|MNdPU6i#(O4e`O-TZg|C;$FvbE}c^oPpCCeqyb-0OJBDZtMMLCrfEdGOIjS2*C?*^d^eJc~WLobE%xLyeO>=FqJXNvg~(%_jlfT z=RM(i%8LQ0vcZo2}IBWU2eloLWBipukbFlchf)7*9a z|K7j--(Oo>Yoz?c@BQHiAAC?YbTUsnq3{F*!i-Yib&SzfS=l4gYuE2=tZ&@DaU)IQ z-~R3&9h{8qon)TFz(#OZl%);yC3M(f|ggwBoBLvL3 zwribWo38-J5a?FMQt3EnJ|=}!#d-O_LieO?U%RLqnkBq?o+qFE5`PipM92b`S89%5 z%!JNUf=h}2@~utNtZ!~o$G?7kSQh1cI=k`W8{5}!W?9B;iTAk|;H1iSkzrGp1{xcI zO$k0hDHUf`3k3pKkpZh7>;xrc-Iz84)TXfgkk&*jU7W4M!h;+3qo%I^-+%Y-e|rA` zA+*yUXbly2*+7Ema6T_`&RO7d#&8Ca0Gz+;a923mn4+qxN_oB$c#h}tx|T{S${6Rc z3TT6kVvG?Ux&%8>;7AC@px{)LO(|uW$$r;U$Oz7ag9y{@5>%QbS?zn&^AHd~9Pr$X z!UrMK{Lb(FLyW>O2oH~rr*Wwb8TS0pr-Ycg2ETVao)L_Fmv=kitvhd)6*@VYfBM-@ ze`V!c-}=t)efRhCJYQSsCt055B~WgZV$4Pgu5cWlW(7hx3Ve)BH=>RMOKB08dq*kz z?eG3@V|{IXwYRmtIvjLuh0KjX) z^ir*Pd4A8=`<6*%TL-+@z-JptBOp6z)dXRvF^z;1MB#8WR80du^PJ%F{4Qwi1oXVX ztv0B!)siKR83QR=E29wnURz5~3C>Gt!8DRWr+b_7EYoI!aivcrvIT*542!RMHpYxG=CJu9DQn3fal)a8J&(>8u{KWA zG_os?K-Inc;8WL@XX*kSU?Cf?UrdSYVsT z|NkofpZ)qQV!KrKXit>@wZYi(2&@V?s%&&A8;CTJEtzX0T-QJiQGfc$Cm( zjxq#MF9xUtI~*xU1QBF;z=C9HUZzS%kuRG@X(+WST}HNh-JYsu1QkUQ243Chqtitc zctzP%m2{n8wn#gXr!+1quuTThIISrmoO6tc@3N|H2xS;+2$32KMAlL>nolyDbaFz4 zF|5e-B2Ki1LKViq&FqH0fhKy_hEh$Qm#)h(B8Zq&Y%*ZPoK#+%zi7X`GZ=Lx7j2 zCHtjc{mbwC=#O`w+<)QqZ#>$cJl;DI48l-mcdh5}2AX>Gpxa$v9dbr{ov;%IjIkER zg69l-0J^!CEf_{Kh-8q~YT4&#Egh#+HcBgK;9!J+ZL@|RATYZ*p2Lh`VKCNc00CQu z4D12B$E^8BptNzZtXqbNC5Bw^0hWoxrMUh|NMxG?E>P6V8>ih3XHMht&brixX_@VI zPZ*_u8*7`vVRti1?FQ43y?p5gSnj9gCtOs}FIo=Tj27&@!>CfKs+7a1BUs?Dw!*+E z=EC{u`yZ8M`QYKhPe1=WD{A5S4TSiV27)n`=M^E8Q{%ZD83X3uXN_#2jb1~b?*>p> zRT?!7Jen*oJ=b+ySmG8`L0QrCyAhx?mW-g_WeA}~)eQTQ;L!C2ZIDvuHbw^rVjlva zHZ~c6FbN^XK=egQd30LzIz9xR&_zIJ^HeD{9QGgz&??QLGy%DSfn1q`(d)QT2#M`y508pc zZEyCWT~lGsSdy0P$A9wOUKJ1)O=Ce?XTy1m?uFDa|>(@p8s=0SGU5(Zz4iRSYf?j3v3Ul$Lpp zaM|cm$rcOdoExKm{QW=vm%sa86N;54%Aiivwdvq84P%T1!$38%8@U$hFoIKKOqK&a zEjT6wnw+XyWkp-$Qni#-tvt`IYsolwJy+JXQYOucUN@4BM3{mZgJ(%j#xZA*sPy|$ zoR%`FG?;q;@>&XTi-g*c1RhC}Rbk*Xsx}5kp*M?*B$M-`3_QnZ6epSI`{T)UIOudb zJ_uka)zqpiYeztt=wupqJP#{5J~>sGHjV0c{Oyg^k9KBjE8W23MI}!r3&#;qseq)gG$b^F$JA%tzphUL}DBGgj0<+iIZ;u+=QA{DqwI=XDVm#Jr~y#f9YF9BRi zIfontnqQ%2bit*+gaMpY@s{zPO@1yn3SQnW&r?rb$EoXDI1V!UAO53%`tAoGdSQeh z2bEgtrfDc8Lh!PvI+4dHjgu@ZAeCj5WEq%V!Rg-7yx;2@gYqJyoK@CDL1`iigkW{u zs7CdBo!LA#oQ0mJjp4%CKc2OyG?+ODP(#LPzaKV@Je|f>t&0L|KO`+046rA7zvD3) z?H!IQSVk1EZ{JlKl~vshLr2i8P>hj5KPs!L(+M!ao9lgq@abgEq2o&Xp4;t&WhJNc zlrt{1ey~5eb^BIP-d@1Md$#L8*3xaX1MBwtsLc6`;vgU0{r} zybc35j&sf{-{-8;??wHA*XcigbU*aH{b!HUWU+buPGfLowFVHOs;Qtf4FpeReKSEw z3kn^c4(GntMw6&%pa!R^YMPYBK-!Kmas=ykqSetb2waEJMplvUtgjCH-OzQ!MIFk9 z_ylmLrEJ1k6bOqML)wPmJNrhDd z8FK>wE204E0k*^#?R7gZ-o3Rk>UTm=5(qr8h!ZJQCkzO|Lh!t-s#*#L@_=!g8iXR> zje-EcaLCSCQ4~M;$@@Qg_p|XlHHf&519*dVzBY$})U>uQDA$7nA+@!0!+z&$uf6c* z>-Sa$J@B$NWN&2#m*RT1sT&OYS@Y{f&Ee9&N8GE+{q}otyoeVIj45mpLT}yN zymsx{-MhCpHrA@DYE%F7U~HLg0B6x=Pz~&Qt0Mxt|Gb`Uc>%=rys9YP`sus1l$5dW ze(#TNU*F!@JDSAlaL|V^LBjze-(?g6<-DkrMtLDQ=S|aup^pifO_NS1D9h4ygn~y2 z@uA>=npeQ0!LI9QjbtsgR$<^iN@bqihjRJ#A9OqSCgLx#xbGai} zzZ0sa@qKT)$i}mU>o~Fo$ZpUJ)`ne#(0Ceqo?BL>t@MyZoYYdTul6~oSzcroXd(od z%tAnlpXMc_EY8aIhEYm-k>?Rz*R|t%jnb~;_WGTo$Y+aek(ITqx7Rz4K($nPQPs8L zmQXaEXPzqtz3B5tN1aX(CmF%!-t8eq8bap(&ENSCXL*AOi!&+QXfdBY{p`J4FT8ZH zx3j*!xw3T=>^h{lP&#oPp_MA(iBe<~=iG8RkPxD*Dx-}fXyj2>KxA1%@r+r)O4eq` zVAU|7&dMsrK=IFYd=Da4ip^}1AYhCzsQ*O}0@k39DS)6heclJMs4+nz}KKSVCUw`AxH{U4B5&$vFlUZgS27>sqEbFR{I*}v9B92|x zvwIZ*;%Ik3Q5L)V`+xHNAOHB>kAlFp#eN7iAvIJ+2*Bwn!;T~Jtkf2qK?u~cfP-jj z>JlI$W)&BSRyy!qgiKM^l)#ndMd7)w5P;QKIKu{I2&XwbO<3-oz!4(LOU?-A;8l_& zb6uz3_488B7Ma$%8~SU*s8M<{PqM5GL(g+XEhVE+6eAe+q%o-9i;hpH+Z$`o_K%D< zo9hEc$!wmaIWTjS(q#?LCGfqfs%~tp2q8`6`#zcX4eKk@|+n`H)4**#% zP#AgfB8fWgd=WDs1vO~~CA?nbIW9v6olfGSP-WdXf_5S&3I#zrNefI6tIP8AbT(S) zcYJ10-RX62zw*_m4?fx6-fm<$J9rfIR=gn6hE!!ynio}?70?%>GzE~B5dsb*Ng-a8vcYhNnT9UGCM_1Q69nuW zTc#173sOvFRsZ0i=9ho@o1BwB{r(TX^X*^KT027Q?eF*deW*${iZX{% z@-P0?@4WlLM}Og0zq42*@4WZnt(({DTCNOw>+9=rl6aoGw}0@-r=K^NZfvXwjz9_p zld_fs@ad)~E6%8FbW!B4pq-BA)#`MTDTTFaJl_#QBx&Vh>U&Xyc)jigk7gGV^rFj2mhx2F0JoKFYVED;rpYQJN z{Oy15ZyE>yW}kfe`MnqJoSd96E`I43zww8E{DU97{Q-kQ5~-zhT|din8w7f?QDr4L zXO1HP--9h@V>5sojORJfW>nUlj*l>^swT^;wLzHXrSG|EE{g(EVb>F`E0QEvN(;`K z1~w<>tgdBMOGv$y z*&^w6JO|d6hRT3y=8J4&b>KMcc)Xa$xp17)a{4#ddcMOKX^t@F0MDm2BtwT=;hU2srLX79xY@P-EuK7AHt)UqDJ&*Y)1s-Y@*(H`6>m z8K1;yVG!wc{LqIm7$DG8K@4WT3pZi7_bw7IVovrO_!}YBsE3`I_3l&5g6mc64!1}Xf zoi=}ksG}&Vtf*|Md?{Cbt|W8L6l(JaIF9RL8y&Tr2*wy?R7qJBC9sn0%N`jxP;D^H z8EK(w*I`g@vxjnpfLscSJFwy{4h>`#tDyoYpCRJUBzSoU>s3S2xS>#1guMWGjMS=+}E7|J=-~wgY?RHO&j~b7qF|f#`8FJ1iN>8RcZ8O=hzYS`qprsq)FB|f+uN;|8M{C zfAoV-cZKU!ASDUVFQwFX2&V=!H%ZE;j~)unwyxcH^7v6Nbk?rjO-lebpoNzM-qMyZ zFSI1>%bI!nob1AF3sUE*?aI0l&Y{24_7H+U0m8b470*M_R#Wn_#_DMBDj9j&fIrIOM`oG;P}Y&8Si$%g*aakx^@%4|U< z?K-pzlCHpJ@qPbbcjw~|KYHnEGvS* zgNVGU8RLsM^L>v}TvlMw2}bQ-HByD4uarviqTlh?SAyw0%Zny2Do9ExfzFDmkxg^s z+K5p=0;Gghm1OYbx}6YV;F%XisTG(!%Z}vdU@K&FML8UF%d(8q3<^>yy$hqILWi3 zjG{13vZ|_A2Hn7gBb1dKPgBo@1h1&--Q9f#ngH1Myw%m!#q`9FdQq=GpU=Y3vl7~R zXMbGPa&vtMhpGWhIXs@Y4&B~d$+G3kd^R+Ts!|)NPu~VFk9C zu|i?p0G+$6Btqcap|7uL1cxkwQLLIWT^wH9T+<{X1X7fFT(&w-%UH;c@(6q`gs5xX zG+-1lF};o#`p&b*j}P{Cf9=7XAhV)%JgRbAlj z))r=H^0Iau$CAULN(!tT@a(oR#g-fxMVq5gaQ1j-(r8jwvJ<&N&?K)qfw;BZa|E3& zs;WV0mIH+o=wk4Is;U-(Ih@y0I*tI90tFz9txg&Sg;<*8x$8O>s#5)K$EMvhO^XWJ zT#XM%bmqHGC-RdlZ=eJVBw`3*32?oXZI6~s<8U#Z$KbkQd;sR0jE3FQ$)W;V3PD$1 zl)X*}H6Cq3-z{sIrsdY!>W3eF=y~qV>)Uma%Lcf&Mm0n@TI-KK{^*6fH>1!?i$Y41 z7Ij`WvqctoZdC!`yE=--<2k}W%7{X5GD~;%$D8Yeem9uMSy9%E8RZIr0C1?XJZ02i z($saeSY({hFvL|o+1l){3~%Ly%+qXqa&ox)SQWFceD&wjyrcw@xuPfms<-{%7!yV) z=TvKm##&ke155@u9zeB&8ljdF_CUK;TH~&?fnbJWApBb0gSu(p34p^zfrpxgRT5Pa zEVMPu`svey!1sEgxPINuN@@!@298RIY#NGDS=nIM(u|Rz0AbZtA%XX+P1|#W1hm;0 z)o5T`7L9JSyUhtH;ylas&jTdf>ib`2i8YqoEeRx7B zd$zx@1S)KC2L?eJv|d1rcfqDcxG15FRoBvSppKuWIkmk9QQ%D%sUrkNB(X&`#(A8T zuIp6*^OueQX4~m>(e|twWI6%2o?S0sZjJVRw=BzGz}JQ$klQ%*Tn9E7L2+7Ez{}uV zfH71`kEcmpD?;(G*9lzy?tAavfAHw5Z@lvC*;9h>jT<-0vO<_RgbK!cy}^ecefG=W z`bHzo-r;0894_Kmz+%&*jn3)-JdEp#UN;B=@4=(PB&#;o2K`=`3{Z8n+@DQePF-w6GM=47(s4%nz#6i$> zd~p(!#?WDh5v-<*Oc@3=+jO$A+V6*M)!@9QO5>+bo@GV8zPf^Rb$x3M(+^1A3c5YboSDVqo4o98{lwty}w_4{-AVR5vR4|x_~|;Nn5I09}PvX z^U3~+=R&>+HCoFBFjac@+G>f!&fcMmrQ7LCV^q^{Yl8*H0dRv+Q8Yy*JE7M!YLS#y zM+0y(1F|dN8*N_*6f}eoO2PGd0=@R)#=-I8c${=1FY-m4RuJTrO_CIrj|6E8f_+DMrkVipg92P}gRnUrskm+@U)A7P}L>PGUI2A$|;A2-&6chz? zLUy}Bl4ek?#2Anr@a@`YV5C)L#R1Ku>nr|f7|a*>{!!|=qJr~>z}=1rF-5I=ohZxl zm43%kCn5TsPA1dSV{Od!Yg?}CEEdW7O3(8msdU{a&-G4Ej~_mMRF+k*H@J82PSXGz zAPn4}fAhBM&`%%iV1!?~cVlPo@Zfj>C^%*o1NHY0CyO{+Ss5(i1Uvwi@$u2*_RVz{ zN)lzu7@-765M`ypFwzP+4snI6Wc6%1QySlX;r0)I@Z;AvM|W?nPUG=|Pv3d5U$f3z2PoG`w>KXx3a=Z1u$$9u<)U@j{oCy2PudM0qSU_mb&98J>CpX{u!ce;^# zbTH{fy<1!1qi55}I3EqXQ0U#`LTa{HR82EuTfL|Jv?3OeX{wzegcw2ITR#UC7py?l41 zwfWJzyG2=pcPeXHq=c9xNe_;WyWQ^X>)Wrsv`H|2@Zf0J?-eyvC>i6f3vd+Yq!SHq zTpzvn-g~dU^71P$tgnsw^Tn*HrRxaa_fE&-FmR=u)(wyp3`UcAo~1B(WImr=+ZwRx z>EyGAr=>=ZccyU)cgORgy3QF%()?(gfIFn7+kvbLpa936$7!$I-Mn_~qx+AGx_JHd zTYNA7!B0Nfy0(=RRZ%t=o2~VJoHja^Kqt%!gXp!!R-FiF(G{SC?5@jN~(F1_Cn{{`rxxihlsF#*N;ypf^pyD zix@mfQP(xrA3S_8T8$Q2MiBaBe-|2V82=Z)^LwY$_~XwWjaCL(9{lJh&&H>Rgi_VG zi;V5==YmmJiP=fza4}z0c`>evT){XkynA>`86T`{4IQ3j#p$$;La!*v=_KuT0;OeD z*Pg?NgD5$f6uL3ms^C)!T^wLsA-Q*;L=8))QOXN@&yEvhun2~qKiV4&qPrV|{Ru=n zjchtWgu7@w%L;((^}+FcZPXDqdV|tj*c_e2ur4boSy+IpZ4`zea~@Z!F}JUeb`Pf# zn(VB=3B|phM+iPTo?~K~Oad5+!KFA3FN+*w2bfFPj#`5Hx8mGwB!nVLo4|t-?{t>2 zE+E!+Dj9QxQ`f0BII&$Oa9wuYmqi5`A0-tmWgy8zDZi4SLRG7Sqok^8LfG0$S2nHO zRkN|$KRjAU%gd^&DvKAVvKS2qTABL~9>4L%>%w(?KsFm!@NVSn?(VyOSj%RWZ zi%Q>n@x|GAKTVTg_{NL(??2nxcx}E|V8T3?^t<7convkE^{tg#*ZN1NX;!GJloHBq z>eh{w;lPKcwp;hEuRPj&ay(Bn=+9>qYn!)0Pk`_3AI*zexq=$ZfoZLY%<^j+D@ZpR zcQ=h$fBfY5AN{i*1)h_pS^nV3aL^BYs9@|I%mBT?Bu?un@Uy%~v!clJjkVQ-qw%wY z_~!QL$?j33WUt%x^Wfu0C(jNcgvd)BhJousk)kN&-eKZ692*36maenC(fjQ2DWkNk z<){w@l&0xE-Z>(K+_}Cwoi9FrcG!(P-*b+}W6njbs=xoQ{utO3fK9}I`u1!d7f}=l zrhNzH=~UJg=ict_NtUL_n6=ShHd$cc-jKDe?Jx={C3#WiCGZ6(rH<<)Su>p#Nvca5 zi1$K=Q_~Hcd<^S`QYcH?DRHeZ-x9@Yfn3P;0^joi9?4Q%94|IxjirhFaC^01Hp+9j zjkya@Z!PM>EXft$#^pTo!|SR>xoxhe&Oz|%{`&Cu|2rZm4*REiyQCsUPv-#rqbU{HbfMrD$l+@u+ z*o#8vXq+Z_%_z}%BTd=Z>Om0rwtfi^!Qp8VC)sEa^*f>Ky7M?cI-LuKgkY%af*2T{}s!>~8#&f?qwE|94!fIE6oK%i5kvgGy7d{Iak1cV!@ilPQ;vWDVXT|?Lq zxIFUVMztYID^*}+3m`^UqKthm0_?{(ZHD<<;-#_&yJ3#Uw!l5jqUie z&!2w#+utb5{D(h$Th?E>duL;7tuhKM)f^fdbnbuev z=nP2m3K^8HknMP(^*|GhqrtZwzD@5e0MbLK;_SOFlt-@jK6+2%qyuhs&kp! z@go>YdKQv1s3>0>rNXI0kVv+p4bnkw=L+JOc91C!ap!l>geVeB;MIeeW;+>URcz@jE|x z`(0=;4jf%V*3<1cVIZQwm$J(8Vr!!(cyBUIPAbVTWk4^fn%O+}eK*T1DIsii98uO4 z#B`KYm2J}|q{z!GvrW;6PG%`3xU3V;^C(E!pt`OUAw^l_-@PUTKbkIj9j6meDWORMBWe(sd|*;YNOO!qqh4oa5Z!-rr~xDA;A*Xz zscKjU9<=wftOVA(luh7!?a1g7YU+kCvdE<4ig{8cS-CRk&KF6VJ@p-Na(psROGe498=FxlI-bUj2J~788ihc7vNTm_(raYX?FN8>izib z_oS@ecS6jrp}A{?(J12>m(^c-(f`EzOnLn_Y_ce%ZCen zZ!(Rc9kFaMp-CJki@8HrKl|kKM%A}&Zf|UDNu|3TV8on)*@exek?{h5JkJ>+-mt4| zrU6R;5y9xoFK-Ih?Cy{Q9*mph^nt6SFqz zrfGIMNhZ^zmcZIP8P9HB8!?S=6avAufwDieegZU^WbjRp$9W0d!>R&~r6ZtMS`v-9H=8F&FD$rTV52|({K*5`;wyw;f>s&Nf*{S6!BiP+ zyS zgwkx?R7H7wa8x(46Lq$>x1T)Sm37q{41^c1uCK_tjs|+A-vJm8X--L;6a+gfgDxS4 z5VSh#*+vRrbV{k#S9{p#K2$fWr#q(@=@)NrmQWR~5wt#orQceM8nse2s48LUj~8~| zf~9O@cSy7B6v*X7w@$xbEA@2m*mK488`t;7iK&mTZ>&voW7W_gack2Ei@nrFYrqiO z1p&bojAtxMJ?H|D%P2LQmHUVD(^DYpr&;YfPLh>SKmjH%K000iW0auzJR9DEbtjk_ zjDj>RT#w~hyt&p%vWig>24c|nI75rYLe^!G=f3A!Y!_f61UXw7_+Az#vQbijrYAPK z7kO)gXu8P23xlRh8G*)xn`Pr7nF&Vk-MjJl(bJ+x|LR};j@G7zP!tG4gs4Fu+VC+U zLOA(+0XKYeMb(v+E473uqXJ(z4z$wWy1xGDg9FcX7fH2$FuQeqTT1nlx88xcI_ex9 zpF;b`_3i81+mp#;?{M7jb+)(G4vwdd)c5YLt*&@XX%+getedK;v#fyRy_8^0E$Oke ztcSKW#P+#jR71C~);eSL-pSN1H8?HVK$DwNpsN9Cibjs>Ypnov_B%iV#d^>eMVasK zAAS3qUnf+ZoX+QqJc|00*&JLYVcc;U)NZX1Vp-3g9@?sBTUEp$6K2DSsw&SrCoSU* zFOsURtJhy#SIRtr{Ey^WmL>_169s=VIiXBkyMB`rO;kycdhN9rF>~%eImq&S(2qEy z$Kyp+H=|(}LN(h?kY-Sv_kG8;j28%IWFu>}0^NFYzDUBrTP#3ktQ9rUjjCjUa8s8l zGcH37Wth7}aN6+#a7t;tNF~rfY+nRe66mb8v?T)Dp7;B%=RJ7%I1Iy$jg6mv_-U4x zcWzyO>E6xbd44)ef!JIF^3x_2ZLz#8K{Dw0G`6HE>~OM3%HwfT)@n5B&F71?(O^7Y z@E{n^;F^VUXI8o58J?w>XQh3b! z+AEu>C2y{-ZBpS{m=#*y(`3dOz5jG?|LBAg?l`Uon}n1_dGFRXyrWUB>+J0v6nXiJ zUw?%Vw7Y-YH03vc>2*v%lPgZL$t+u2TdAsMGEedxh&{%jFz_g;A3WakZ5JKL6P=Cd zh2#WiRJevr%p4xg`rUB8h&MM^U$}RjQTE;kpEZpRg6Q$%rvw>4a9)1#*0Y_1)5D3? z!zR0Xlj9S{@~phQ)%nZc-s*J1maUnWK$ayC%^Rqm+s41jf=7_cgNh$PFt@qZjp_K% zHx0u*A!03*om*JiE?tCxv9r1ocrNtPtn}U0RnK+lY`XUF!Hy$>(J1Wp{NMiFAHVtL zS2)mD>MURMR#v29c?HE99(eQV%r-a!PB&T|_E$p6$aDei4vo@TG6&?1LJWHE_7>M= zmZZ8!0qXJS#-NWWayWe&&kNfN#uy$Ad-q;`F)yp#XS+g(z<0~4ezFUzf7p*|*{rSg z^1PbO(rz#6b)yvUt9WZ;VCOMXL9tEU)OecAXYrr|x%JWMWTV&H`o-0G2HGYsy?FcR z^r)=rK{u>b1B6a&`dwG8I3_xQ3_#fnt?c|M=?SJ&Q?G9E}pXTtW zp;GRGXkp<8&}j)h;B8S~K_&l%JKJ|}Y%|?dRrB2+yz~BtpZpL1#&3k4^M~L6v*F6h ztFOIsJV^|~uiPC@#)WJ!pLY7r zpT6_Mz;~hYXCshSqttS6mjWPd1*EO0FXwdFX7;v0ux+8zM%Q&C6{>3^fm4RKU||4B z3nhpPka=rBJPb&S<8d;b=BKB5oK(gT#yv*CKkV%tdLH<3%dx|2YyGdhzR9TKf*qP_=_qoFQor@qeJStIL{VUjnaxvKH=~tKUX-eVVycpI*!2XX zi=^;;e>P8Ni}dGTdtuOx3OlX+&W*K?KK*3(@Wl6^@)`wV&=UqyPA3o(~?M za2#!#B(IV*-&*bZK6hOTovqNf1rt#jqvKg@5X%dh*>4#%MWDLO9gYWsewyX+A~`vo z_IhE|3G*}!qoCL85z5B1w62@Y)gEWi#adK(St{Bx_M|364+qh7Ucg*Tr32l}XA4k= zK!kGt+{(L^K>Lv`rMGU$UzR#n`kJH@hgQ!mAb~=GE==*>C)^~pStIFVq_jiy{ zFTH#x>Om2(N)5D_7;W-WzxUaZ3q%}X`B`3ZJC@c?_g*d$m?ma9n>ISKScl-CtqWTp z#9JUrvC0Toa0ERHcKn61j82I2D$wcWyj3_sn;ZR`*H=O34nuK%JWcYvDhm9|-~NW@ zi97}SbpQV0c$P*XklP5>4<0@hg5SKky3$3$5vQD|-~m`(RJ(hNMx*OD)?MG}g#7xo zo~%s?{@O7JEbc5VI^96&1`)Zw8b%(vcY8F0(r?bWOK^GnI^R7s51vdG^ToZpTm25# zS`GW1B#riuVq?tp?IAWQFI6mMS~Xopn4kj4;8tJ6&gupG3l|F=p^LPdClVpEGW40N zL8(C+ilLPs1P6#24IGeRwL)PGW=82Y?6ksPz>#)c@A~HUbQ;fRyOYxe!}>eFaJ`b% z-tJWJ=+1VJ3A8c{Y=T}%C||+uS}ddk99B}6Rp7g_s9t+zC5`hk&s~RNkHG+6U9PPL zMbQif(PExU*+7#6(5j(|*K%^W;8_k^wbAvxyQ?5&>5!(;dxxj%gAURv5KIwG9hwzV z;bt%l%1X!cMUiJ9$L4e&J=s4xI_mZYo7)@rUf7;3k{dU+I)N8?V*hx)S3+BG(?D5T z2-@q4C_u-jg)MIAo7+7JrGpZxTAVa>3E_v82UMzAT?N{gpW_A zpc~-(@jRuB9i1F0jfbn7fBL5%QA)q@^RGX9`t+T*@AvwhC~{wXVQV&9;Qz<}>F;c9 zkACZ4{&Q`ijJ8WlHm0f@APiv!VxPESRs*o*`a}2yj{zVZZP4Q*{vx+l}b_uQ3Xrv^d+x^b-wkWqv7_Qu;AgQ~83Jr6N9T{J=9@9&?c zNp|;U|HV6@>(U30(x}s|%KGT|czb(w9%F#U;}{uWbRlGhqi$MYnzO#C5R)Qn;W1MG$x~J1_yt zNw%PCHv~47k}Xjg-~c<3je@oUH2WHDPL9*@Nfrdb`ugy6jj zBf~+%u&iV}H(Q&7`8@R)>jYx&AQ6^msiBWl+Sbq}%jM>JKTAP~q1%CW`*>b#uMHnQ zJv{|3M(gCkW7o2|er=GZX;Ic+{mKi1^U3L{%Zcy1l~j3EV@`?!YGKHb4?cLjGVF(8 z$e43-I@#ab3p!ol1#2tOXb>D6PtvSd8}`2b+6&M2PT%|VSvT^AJz!{7Qrm_q2s#*N z9)yDUE3?%WH+IN4f{wb zd3rKSfX2%oJREbd>U0+8o+D1j>1fz>+*}B8|LM_eQGnb_-j9F{z}% zZEK5Qgu@^;+r*=hxwhR~Uyr7<^x6JXLhzlNTeoj+&t_SY*8l9EzvFn$#@bL5e*MPi z>9hFB5Ksg5AAIHv$5i!$s6#^DMq~t5>TM zQ$8AooYElRMF9n7O898x=6Reba&QzU3A8Czbuk$BCX;!Z7V$h$N*^4a1ddBEIoN+} zFxlAJ&TExtMG=TJ13!;3$*THy{^T71WEqEkqe`W~an|jG1UQ>grc&j3vA!C-dT*$W zJl;zl9RfUG+B5M37Y;?y$}p-Mn&(9-*nA$>mFoBUTnxjA`ap+nvJ4Oz3}Wc{=Jxtx zUP#4cRdzaFzu(B%@2f)4s#r{}mX>qGz}fJ4xvQ4)L!3}e@;H-oqPTlQzw>lf6 z(aNKzr*FUapcg^g;LhH`OLuN;4x^p@@kj5*y>1kO3ZdZ+TOW0ytp}+z0YLyv(C42Y z<%L}9MQi<#F&4+=c#=mQpL0~%7O*b-oScp)-0?TJqxnpY*7^u4;^@Qo4^C&}UdPi! z4L5>!e)7R=lC5oYq9MM1tN)kRuJ7*7jI6%#jk^z?%#s2Kb}h$pC>t?bROrF z0-GbviYy00sL@)$&H)N^UCYChsqczc?hT8q(#G_9;oACYUV&nlY;@T58dSQR#pzf| zXlk7=QY#^;W(g23TtR&gB9%Aa*giO#RF#=bQiqc1G&7j_Q8$j`JS%K)uGz`Scyh8h zIEd%@0vLS2g@)O_P`Dd2_$CQu;M-9D7$iV}Q{ z1xZ0mqLO$#F9_urK1J76UDeRm1fB2%8Zx2pAgvjpcdiY}TJ8g<$lcjpbRr3521b(% zbVi1QKudY&=4z6cSqczP7|_{5G3pkjOmlU35{F^f37zRYUnIrRX&T3%IN*C?rSEYr zN|lfLepx#i_(KJN4$_lJ!hF*k(7MFJwlp-gp359)_k}*4ra|N(0ZLYaa6v#n-zWo7 zBx7Lojn1k%O*F+sm(q1O?QvOGzT-KZ8->G=e(mcUOprK9vsC_#f9IR?NqRDwdY*T9 zI{E$&-u~;q{!4Y0HOdru@%jBc3|(Vzw-e2#^58fx^4wv7+)&c=`#ps6MVdRF&<*e) zKKc0mBB|$#+;hdsu;(~XhVxvSrrGEBAOFU0emx9%mSy|<^SY}3%CFzsz8NZn%M#T^ z(+yS*4>O8ON;QF?q2_{chO#_|-dx93#`HUWnnPnd#JyH=QR=1ySw%IO&8_GLq>Z0H zm>`W+Q@wQO=FQvvtgK6^d_U@T(9ZrRTG3wD(+FjGohB)PLJ;5ESpY{Uawk)$(gNf~ zkfvrd^a7t!=4^9l@DHQa8W=6rgZujoW9GS_+*0c}44^Zp1gt9cw zn7W2~g+UW|?5dK@#4B0UWj~*X3F%1fi5sjcVI6&Igqm zg!~Zo`plS~m6?l@v~UGqSs7Rv6-kX(l?oIZHE4S%ZGRYggzB4U0w0QkmDL4Qjo!=EOgi?f|yAeJ)V_s z{mE0$b$VT~z1?dn?Kn(o<@sVhmB0%2&E{4oj;k~&?%oUi@Fj$G5O`te7nS^1zx!u@ z{lEE5;o`DPlB{{}y@!AGFa8|G)#P+u)%x8Jb0I*upTX#%Y&@NO{mqyAT^+rAt*Xr* z{?R)@5cs~Ybp?{4p7+xq?~li`Uf&z7MBn<>S13Z0eU_$0l7hn@bi;n=Af&d}0<{9P z)6jQMr`gf*JO~`lfdkTy7^pr=vo;F4p#yip4$6ACbHW(+JlgH}3A9Q|j?neZb%a<2 z#U)rjLWrzb2mvu-S()RLd^Rh(U1xO!(&t7qXu;s7)1grQpO^cGr|WA&2~|kci5xFr z8Y!TwQ>T`=Ke*Lu1k@XAK@Db6+a3#ue;{VHnq;l20t1?Om8X#Q6ghNDbh|=IB^$8H zP)0FO@Uyd`aFzq=48tKMs`vap2I%-v^gG^0)&bQ zH~}blh{-&k%rh<=C=SC|+1#cy3L(0GJgZ9JIX*j>I)dNWT79~AVrTpC@eDvliZOGX z{lf*PYy=%Tq~D1sMrl^KuKR5Fgc!+%b2!O2SF}Sl%r~<1VniX1pG-@H^mtwj2P;fe z(>U3L^fYscAwqajFq@WDr8?k1N<(xMIH*Atz=*ZQ^aSKk1@Y#(jqUa8`o}9h~Voo zD;maAUAitCtvah~L7vw*hSoD>YCy&`BCPBag9z_-oge_Y%`kFq+zdhTjKK1vLw|pN ziV1!3h3*QZ(4wwXlDLam&M@0r?Pbtv3jb@T?H=q;lSDG6xG*IIP^24rm^4D*wN+0x zI?oi*I9@D#kKVo2O|yJ5hFLqEuG8&$Qj+m;ktR9esM~W{T`cM}20aSggny@Dc4IhkoPPb_Q*ro)~hjzrK6*h$6qX(`4+Wc&82lGd4Z5VnE za|9N&L9A{X23pES6^0v%G%gb9dR#*!BRW1u0coV>nABzS!KeFm-C#o>KUo+=Uw>u& z_%s!c*Y9_-GTGTV4Fadzb;6Ewc#_*0=zx~NPSYrja|UV)ARb!-tpkCHh3O1nMK}XA zCQgeeaOtq?`!2N0T7?#F;jgAqRV5$qjQ5V`buFj!B=nqa=%3CKN)^qORm@y7=Dy^p%%3{D5I1dp#GDC2g{#?gg&&WhEh|DhgTT5aV(} zhh2{`kR`|}P~ZuA?wTJ)5x}O9adGMh2WiB)Q|(Gpz&1XK)F{t(yY~wv}XzOlFJYllaDs5lp(FR6?(A3m2jclJCmlbXqH;sWw1U zjlv*~Wu94P6gIN1gMg>8Y*aNG0TxdPx^t)Fc}`iGJOk>nD;jU;Dc$&jvLcPkEbjJt z#0V_`Is@hzN-~^>!*9a`13CyU1}`@UAR)I~i+Pe3zwq;S?%ce$m}h$jhx^B4OhAd6Ge`p>Q2SDx z!vx4q=n29iS8Vioqv}T1OgLo$fO3{Y2XQHjvQbB;^Rlc@PIK2|-ChrB2TikcZ~{xm zfJ3H)bfaiE>T$<-K0tYPiiOq)P#S_^=t^10N&+bbV+wuDAy^q?NDvAb2}4Y}Xcz}k zqcS&*l4TB39bt$#L8r5FWp()SEB)i+F~F=E$b8dTwttwUY0>S8FmhzAqR5#q5<+or z=s|v9xpxr43&#~KSPKPPJsHPF!{|f>96M+rY9$T^{je;d61qAH7I$&LJDpBMPdCFCD1%nBbT}z}J(2Z)4 z0^N31!Vx$`04^A5K3fz;p}UdTSnE(SKpL|fk?YR?^qnztpdTDVpKG1x)oA40xzl<7 z{V~KKP;#PB(Xg{Y8G&cxx#HffL9gq%T<`74YwJCjHH69+Z)~p(-6pHHZw@imNBfEA zdb2oBvV7PRwzUuUyZyzYIGJX>esFU$ytV-Z=BGQSE5q>Bmu?8dXC-(g z4EWD~{f3(`voKUZ>RUFT_Aax@N(%lG(&5S;FT}qMg1PcPe1@k@MVZ7JvDJ?sZ zw;8Q7!oKpNpdeEzi>gS|xTrE^pkOGQYC201hF;r`A3k1NkBGsXf_O;=0y`kJxw;aX z2E*;*5F5Ax{P(o1U?jWI-JSrkPD(tF3HW&@eb-NiXj}4%4I|sn-E>JwTtTzAyEuiQ+VrPHx-pBJSS2wTs zUb)wC7%2+qv;N?d#V3!mwe^0Slt7eLy4UsBH$6`@0y(#?54CENMOA?w4iz@{LQE4- zb*%++`cWV-z-PU#9|q3*_xD#eK(6|5G7mdk7*r;v2E{Af>AF~w)6<0U03*D!GjSMS z>3PaDj?1kK9@2?g)KO2AT&D&*R z_VyPr2|UXwL7`6uT^Bs9(UmNN$l2M?7ID*s{u_1umY-)CGcfldD~dN?fAjW@SI3h$ z%k!htalA+xRVP`th!<5|5If^g>!uabvwa;rblgthdQgZ)uIGe7Wanj2SAbmjpx^Ix zVWdEjrBKO6xBwn^UgmX@mpg~YpWZ)#=~|&!9f=^Mpg}>|d{#hD4#ddX0coQ%)oY?U zT@nO%v4myc?|%MlIEc2^LqO=u(&ca(nL>AQ%CsoxES>M>!X{)Ui6KxfG;ib#Bn|0gpLcN=87Uu(l{^j!{d(;nl0jF zV@*(15rwz|eX7Gw^yJa!hX+qPy@(L^`t~S#d4pjWB&ji7EE0^_-T^43!7TB***`oS zk55aXCbNv=94^_E8qHe8?lVcr#sw|FuD^U!7qRP zMaoH%WMxrok5s9P$utQf$oq^TS!~h;#41IO%BsoYe0wt(&lj>LtAnnRsw~qaIl-7s z=VOM+YzBjV5i*PUey7tN4FHpYgpx6{f*NSKWKu%e3nS_{E+Wl%I_vd^&_<#4;n8F` z4EzXJMHK{OIPBE5Dhk;f^kC2dh%~#4IM-S+N;{!%C4oV+Y%+^&*FH#v)+Lj=Ve>3Y z(rj^>?d%q1C5sw=<@E@`8U#9YdnreM@an6OeQS>*{-wbN76%1>#vShwLz}iIXKuaieh`CzcLEbEFVwfXHUmT zT*{^nJM|)4&C5{*Vm7aPlV$>eEfL6h{r`y zLTfCCpoJP@Wv(gVd4rSF*peyr=g;;yIlrU$PCSA&151&K!AW{3~0No z7jbMg);*9ct&xD%A=sO+uQ8LAN;6OzJv`WF#H_9KDfU41ww7565Ikc%PE=j1AawnJ zmZdTc0VW>@8fH;eNm{`?GH9iOR?kicN}Ynk?RHG=(tpdM4l)cQ!A4xb2Lc; z*PV^Cx&r#)-oeBb)S-AW=i^DKkr5hE!~0RE3o1Bj&^Q_1(4OIP-VJ(!JKdfSNppX6WAoP0^wH7eJ{792bXHcUM-@`y=x9#Y z2q)JVcVvBB%WQLVCC>7r(-@|NA|3hybW$0Wva(Hn1h}P@^gLp)ay@4@ZY_mZXoFuIbj5_zW z*H(#DR7D`&XAlU6Kpw!TSEeAFLkJ9(k`mg)wT4E`PKVl@L<4@3n;;M#;~?|k@K$Fr zxaG%X6X(@n=o}r+27P~Mm6ei0jpq=9S#du|tZgS+pp~ie`ZOB`(?m8Py>@!K0IGH67gdzvK2cF}s40?6lL}9qLItu)t*X_S} z*VS5EeWW6elQ>D{i}`G^D2i+js+@q0bIy`9&mT#z_U#6!b~mb(o~>9hBvl4!vPOG z>;qQoq;avkSBy`q)nT{aXY<8Gp;CBw^I8-H{yZUAs65sbJ9SydG4!05Fz_8x30F|h z7*%tsu6v&314H zpvYh)P!-I3LtPlx;e(hTXZ>C`2t!v07+55j>xHft0b&b^v@%Julhc#^gF`D>nH6OY zEtOIV7gXgTYGu5Jt|qj#F``t*dF(kZ$o0+BMN$rWf$Jhn(IQE!y4hSGHcB0z00$8e z52ig27%?#Ru%<$QcF^idhZ>;r8YKHGffvwcJG0;W{ijaVD~9e|X)u``R40e&BFlpyoK0shy>cz=BUwW~w4Ifx z2@!z1z>Gi)i7UfpS%b)IUUTk%iX(_^K`&*my4?B6yN}t!&8fDx!}t_6osvg3w~f^MsT_#DCQw|yHJiX0$wOOcMVJcH?IBu$`qL@8a{ zadsBGuaY#&veb1c9{^pglAu0ho4dL7=^#3ZFrLmAah6t63FfqYBxPM=Lbg}@&?OtU zM)!A4KK=aQ=C#puT4$v~2;_1-514j#ASLcc?#4>MV7+Fw(g#O#VAfz7dM+|Jj>{wg zaytfmO?X5I0o@yWC)w%gY(B630Q~Ux3^WR9Vy&abxH}QWRd2JB)9!E5MDa44I3ju`#5zxQUD#iKQxXQ1f{O3hS4*SqgXNicDNXbjoA^D zMUer|QsY73yN=uC-o0!6q5^7h3M!7MsMS2q)>j7%$t0cw;leSE(NkbYL;qZ(v@Kjf z${vKSC1^A-;gGTY!_z@OXv=(oFS1nb?o?S9$9YCEEec(MEHmhrxIXSgK~>49>&O}g z--1eyR6q@p4MjpWurA{)Uk$xLu-QCow0ZgNmTsCVmBR=I<{@fog`0|S0)QQ{MMJE( zX^1kC5(c7OrW25` zgAcEj>i}Av#(Em3j>qz}2}E<_T6Yj}-*ZY?7+|je2O;$RFyxKSuyKK38Ou8_Y&19~ zm<65_h6G@uKr@bcSikX=7kTeCLLdo>OoOs)F`drm)7f;A0t}N@b(Q6LnwNy}G|v>B za*AcCT-UYJrF9eqYa4JgKKm%K(+ydcR%>hhECZGAC=#7891Qv(PKup8&#hr(hli7u zl`diC$?gfX`4jW?*Ke+_^q%eQPm_g$PzrR(IbqDPy45gh#d9Gvv1-pj;6b$z_`1L> z0D&4Shi0dIfh|wksd8Wm+xe&J@(7Gpzzi}HJHn{#34~@}paGIF4BCl0f^z{wE4ag% z?|GEc!1o+bZAPP&zRU35(fHNZ{B8)fCs1mHP9jjiB^VT*VQvis81RCh!r)SvGBBNI zlUZ7;Cb4b^8r=znRF!~?w63MgDK@pk*|i%!<0wm1t*ZAwIjL*a@B5vgrcg?&H?KL3 zQODB?#Mw2XoIvVMfThzH3@8DFXsNQif@xbYu!BY&e>N|(9P0Ls1X3p>(D6S#nIeR* zcRC&=OkktX_@HE*fNoi16o&~^lyZfX6A{W3tEumc97b9Ibcq$t@+=HIS(e?E?aaCP zbUcsK#Sy#t!q5HX?Z2>|-v6zK&*rNu-MWd7j>{yc8=GO3;!l4#meQPz_U~MuN5Sa* zPd+_9nf~U#`E%d;#%o0>7jgXX@srQ)-zO-ch&L5I8qW?+5`yud7b>S2AA^Q=kw`>P zQI-9XTUU93YGvf8KS~#7zQ|s9;hGcFy43SbzW@FhV=@|fJ5OWR6Hm&+>G(h2+S+2A z-PqhNL1RsN0tQYJBEx`pJ0l2Xt(<;d6oWzU!_VK|J9t)AZOjQkpXXC-+od))Ix%P< z0Cfrz<-w>H+zkWIi{5?zaTo?^S{#A0-h`?h`ylRN?;5+3y#I@ z0^j8@6%TflfC4DP1luWQFyqD%9Lh0_f+U%4Fs0l9`5+keY+Vpgk5!qa8T7rubUKx$ z#dHQr9#Vo*njLvxji*P9kt{V?(Ljp}#|_mWLu;;`v|QKqG%b`uUwwVk7jRd2JJFi!x-bngn47XNaVm>k4^|n*HPW;! znrJ|RkQKR6m1t_z)S43aQGWa5Pd>l*%Ju17o*u^u>b&rkZ{Nv(&lR8FzB@EEef!U5 ze#EzL3yjT!2MNWz-^artFADnfY3vC1jn_5;FIwqu52AI4fk-^edV}HE{{QE@fAZ6h z-@dlpBS@Sa%{|v}p~Aq+7N8Dz>*fdoepX{v`mCGR1!Fu4Sym=-)=Ve0C%mm|zCq2& zNqKTqo}N^oW<*g@%U&P#BEQU~AGnrO=6Q~b5gQJMK@b63v4}B2X}OqBtM}i6CNdDr zEUKF~SO3y)T%RS=#k@&UP_J@1FklpD&orLr$7%EK2Rr?KPY61jEw(lX-LBB4m`;<^ z(=sb{x9i=#xiaX6&vqu0X?E}K8WReC>zlvidLBqXpNapp>$n|WWYxDpHok3WI=Ai+ zLEGlh_J_;C?pCU#X&{+v$NIK|)U6&4B*bm&_p-I#ZZk_M0ZJJ#QSHlW-M}8ON;sgY zSe9kK-_!PhN@>@1rJerL&LW3B16Av#`kEc00i|W=Ot5?PtbrMTNAP!0lctb1*dcrf zu7$e-AR32r=uLxRudV~p9EIeE3#)GkN|#;`ayK*xL$eSySeqhE7K?bEl>g)(|Nd-| zGD2S29K89JySnF(7mM+{B*3oHi?~eF3Nsz_AONe1iV5h$f@-sd3*nSU9TyNHqM{x< znN-`?!6{XBLU;`wp%tCawdV^il#=B5u=6i|@0l*fBJ6qVFDw=&Ps^YYFJH@6ug{_m z34L!dRj%))StcB|yO*VD^~y`b-he)QIA1Je*Jqnko}t0RB=Mo{Il(nX`C5G+aZx-w}7LiV$T4t%k) z0?h3sfldbBb;<=(HB0j*$qJ(-CNQQ_>ZY!=>k!8!aa;xgHwZ=t^!gs5%n;NheD6UP zrwNE3m-W{6;Dy%)alR-r)$RG1=#%3`w;T5RVO3V$&R}mZ{^au`J3Sk0p_J9F8!&+w zSm=smWj&7v3{(MZxD4_*?VNP2bOqF)mPy|Zg|TX~P%3X{ zWrI3C@R4xf!xUji4MF)CW(ga+Eh6`eRRFI(pl|pMq+(y{oc#>e*ErlGg=3o zGA|q9IOCH-R%Wyk5(4mOuNMeh-MStXjXF3iU?K_25Y`9zPF0w>rG%W-`G_pVR zJa;kZl5ViIwi>uD)UfA^I87FmQ$KP}r}4pFLI|rR*rT!pgaA{NW|b@?;5?>SjRvd3 za5$88O&u6x4ar8FfV77(dKPE5w^ka}q*)P0PEn|bkEf2qwtEBJR3P7A)m06Vr{fqB zuo|5lPi*2#j*m`PhB@d*OvjI(O>3zjr?0eB&7kKS!)Eg;jTfCD7^QU zUS(NQ22%$?s+(AA3FY3F*4MIttg1IiPrwFiU`#6DyLP%QDCUBn;es%x^SmvEKr=uI zVji|-)~ZlgKVo~J(m@GS&`3vVzrCQqW$Y0CoHpMgjz^^%T(jaOT`> z)B18MCVV>d0~w5Ent`4Q%%f4-bDd#-0MUdPKQl3BK0@9T>RQE+<{K(y8h{V z_y74n`{d;0U~O%a1B(_IeuIwNjl%V{)gS)kea!s7@a@0x$!8y|^qkY#!=fG!R&}RO zn!3n~xZbC}J47B{WGP`J@WFLJqEgGybt>A-=Ck>0t{SgdT_a6RTpyJn z9tea*NdG`$wE)BfW|sjYCbjnfDI^T3bD1WU=Q(x7RJEv7#e`{^+HsiYurP8ueW$4) z`n_o)NDg7_K<~#N>^#|xwMK)kr=Y1fvubDn1aFRdX<4Rm?Rjhvg^XjE2)5c+x{g9W z%@SnLXa(4fc~J!}4_%iladV}A^Q+ry{az1*7d^1@5Lw`&EHz9XY4FQ0zXqe#h2#4m zve`y7AUq4A3^3kZHURlsO9>mGmF(g`34}ES3G~_62G@1l@u{41V0YSqIc;D3GCBhG z1Wca=qiJ=$+tkAHsG+814+TpN20GYt0A0cHcrX~)h|6k_Ec?ii0-i2NiJ+xc-C5VU zou=F75>_t>Hr|;>0{R_nKdWj1)Oj2CS&>)3-7!p-EeJRe_#x*4usN&X2_Y1Wdw?bf z0-1(eSCtSVP7*j(D~cL;KIjMA8BkVD6^MWm@Z4pyd^_*VK2dOe;M^=YMj`Ts^cU_M zX4h|A3j*)m_dfbJzVnS2@7;^zH1s_fr;15Y6nh7U_a8jX3J_RsQ8~uhu-6?80A9Uw zdwXkZ`@Ii8M}*$IzD}C4U~qM5lGZhpb?d6Es^ZDPV}!_PrBA5FSk31tpwPOWE-Jx(a}Ym1PI!%g%l*73u^cAIsg{i8MMdE8n5N z@#|l=)6;6o8B{mQBFPHJBhpwo2`$R3_5*L&?FS-sgx8J2wc)^pd46;{oh51Nd%m5$ z1vKS$FchqrU;iurCW2@OJb{f6pd0}*Z#DsFqiTqcKqSKkHnz@XbxptIhJC(Rw)zt&J6%Mhf8& z!dwqzbTwE$XdSe7TWze4qHY&q^Zg(EWOx5ydu#JI|Jr}!m%jeW$De$*cQlUdh(!QA zT*r=^hY-=u%mm=Nl}!eUM_zh9=surJ;@!uOP+h>JanJQY$xQ$m(kj-(^HW2F7j|Ka zk?Yzq$`CBV$R>fBx&h$=Fqw#;TEXxq=-;pFD$k1?T6j$*p-E*jjRCN(VDq~JU7dVFmPHPtK&d)M5vg}^IjODg6toT zv#Ln)Vr>|`@pGGHEt5F!c0dQ@ZbJhf6LlzXf`+4xQ+*_5Mx+O03IC@mBZ2YL7xm0jh(r z$gEdsC-}m0FUw-kAK3XK;2+xX9l|y%B1GC54K{;mt$uq1P4w(|i%TM&GwgF)X90t2L1;DZ2q#+Y55FkX}~ae8`El$A2*gO5HEf(3rZ@q^c2 zx-08yzR2uUffj^=RKAr9heXY`7S$4FB2~34%hJv*rMGTuC-Yglhyas7Y`@#xO3GDeS&=P+>++8Y$iZImEWOSGP!q|Xjd zDp$>8$m!q3y`DEvYa!h z4cAbRA-?Y)9v_cqa}Y6Tl*)5ZT81YlVAF8Qrqfxk+i^S}ZVkbUw04u+6VT${&O5Qq z>B@HlYMaFf=xV`q+vQMmpc?>u)UNM#NJPu5Zmnq!#vYPR3e!=6!;vOQyY8U@X*o6+ z0trsdWHM_9>8$lU$Mxn}17j!c>{R=Z0Kowp+&~_!loD+mV)vmR2Cu*Vm6esD4<-m(2(yH(YI!@%6&?=Qq2|#e(6nJpL{YTb3u}-kT9!CKrQHs<1l)$hC;&?_ zZ{xZpF1##9NLcsW)?&N8ZhtTst*_s?bLZK!oew_z#DyX5B8(yk;_WD*MOuO)XI>m1 z9bCVDBS{j^g-fXG0ul1@{U;#8hwvhU-qs~5ZNX~T_^|wKw|xtf!On*?Xm{_(cb#D; zG{Mqg0%pKKlM6w+AsbJsPOk?SZg)^CKiuMGwo3{c*KrDJOIC6n)C^h$G~3(3(|138 zYx+sp?+F;!A>VxC)nETBzgCnrNbOp@21baNR;&!O3>|tVJavLLYRF6!5iETg24$mo(EsY z*~6#*%9i$+;A~|u2t6k+LB;cINU?#ijo860j_7qdNl{Wey2ciXVZ~S)hyWL91&VAy z5BZYKK)^GUr4_73APVMr-rD;5_O)x9TU)EEYn^Vlb!EnwMVxkfea1j_a305C@1(8W zfpCU9okF(L>b^u_n52mX2_QLvG|W2CR{kHVVs@Oj1(;w2i}io7j$1R25s1i_K+am? zc-A)pIjjX4m5m#<2I$7(YJkgGB^!%R*z}DtV5!(t8}4d*v2Zjy+nigc*J^2kn>}lC zQXtExlN^}$OZ=dfk+pb98&tQyvSxHSBmvH#g*Muu>UL{!$MwUAQ2cD1{+Ivs_hnsg zZmg}12H>o1{gm1Om2=VYeaC^mUD%M;*VHf?2L#W6tOX7h(z&{nlhX<7_^_1?4C7)B zaALsg5#oXTpbrw~NJKuQOLY$g$elSjc`q87O z`==n?3-wk=BHK6wbWdC823$l1nSk9?F!=;*5`c+XYiZw5TOBU}o)sKTrvnTEqmAQ0 zGd}1{*{V25&DjFAZFht%%dxuBRkYN=dTS|!MIT&UsS5Rl*VDRd??sU6b+uK{4@Xu&8 z3L}u(&hvaSnLc{-WICHXd9pK|=j$6Az#+0FKL{@2CPU7E8Oh=VX&r`9U4w#JufGyS zU6_Uhn1Kb4?WpiJN3+%i`kUIcs$E!Z_y^H}?T=*?_(j?plyi_8u-Li=-jC%qN{d7S zJ_iF{VXMF+IZKV&rMVpAZ1oN7%wvlWYf~F=hA5ik6fs!~UyxuD4YIRhI;#9AGK{#iW!+li8!4J;9(q z0b#thw%QJZs6d>nf{itS*12xz_q)-xYd3D)zOk{fzPdW{z~P`INso?C#vgq$nM@aP zl4T%0OBh?ksTV}{P_Uod9KEfmShi+;dU|~0`c12|xkY;+kW*QfW*N-%#VcKS9DqQy5T6Bh8LetCMzGZE&2QxhEcXr; zu?<1nbl+Aa+q}!p6>pPotJV*v2r{}*9kN(9WI+&X0g(*;5W;CVU%Rycr8p}esm2OR zKtC-woEE`r8oMN{lycL+BD9lGKq&({EJ2*FRa~}pRRGg1AP68ks+4Jfn%#Ou3yWK4 z(-yewu-Bzqvt!!8?l8)<(M;MUWp4`P&d`TO0r+k>M z!w)`r_-o(!xs{bZwWCCS#8(R0 zdkQzj3X1|B2646&jC#;}X^935hPErM%c2N856TmbEMPg7oiMV4v>^Bk0?%FnU>QO< zXQ(L98Nh?taiY{FJY`k)I~{GsnK&PSE+3Sx;jsq3_xa;z51;K=r9Bu6`?XhJj$vkC zxkxk0g>c;A%5ZZN)_lL;Sa)ed{fi+zfGb!cmNEESKfk_zSd3=? zGq^6Ofm`sQSuEylqya0$w%QQ_ixO6+^*k`nRyFO4Y!^zq{@VVEHl;ZS723~jaqxB} zwO_Zp#b#pGE?R)w2Dk9`7IbbsiG@R!Wb(EJ9K#l>+x+UhklOkIM~JE_?aWs2Qg(kf z7=y=i9H*77!Eo?avLD1he;!F4mo5s>TH={+E+ zY-!A`mPt$5ZwG`qb|^W>IuvDWOU1^}2T%9L)7kBt8wCuNA)Ve3#_VO8LGT!?qNp7; z05KUX2iSrHlwx2qGZ0JRsu=?bSojHi9Le(n+KAhw1EIXFXURr5!s&LjR#b4?_KJYT zZbL@6DN@EsUPI3@a2S+^4r3oOF9_}-b+LuBw*CNwa)KEFCtX3s4b5SOYgPPzDf`c8 z%hK~a4BThueD=xb+#D)*S4W_M?nVxTNP(h7lQJb+vSnMcJmawDhv(1ypS5Pz8vn5; zcxE|jWJ|UrQV=sp00fBCp}M-NE8nV{@5y23y!Wi<`_8>pXi{2hF2okPQC)S;-d}j% z=Y0Z10!ol%nxbSy5d^3p-6T&KvAx#4-mI;yu4tNu4A3x`&1OeO$Fu2dVcS6vlYWd0 zAn=v3-!K5jnO&r*=Xp-I(_1X2u$U%6wKSj|Bw5&TW1T6A;`_eMEr>T6J+x@b-jZ>3 z!O^09izG>ql}ZSAVVH{RdW(fEijq~Wkvg7mo;ZX(hk+*u5CM`vJ$x{pi-Ra3@%4y? z=XhSzv?Pv+l7^moD5L4XhjuTxl9u$A<<#YZ??^uzSz{OUF!JXtkz%^$V4lG90KPAF zGPy=FGA#vWK!G&?38X$Qk*om+!;2)Si~Y}#ElEEo{YVsRNiTkL%07c3C*D3OYl#;R z0T0L~fsqg9S||fZ*9+1cdEOMlN9ReBNK(>|!e%!~ZO6U5yM1YQn*`%Ht~2vIFXB|Q zqt)v5M!oj(>mceN$0~#Tmk5_qI_r%{$A?vgJBQT$WcrY2d7MPDEP;0f5RXj$mQ^E+ zP3+RU4lrPzA%%wA!u0gV5TInrIEo5UwB3oY5G<>@((RlKMxeK{e1cecOu?%SK|>xNZLk~HwW)05N5 zWHOu2g8<`3pqO~Dc(yp-P?bUphhhcQHSh{*)x>e!Xgr`_WQn3KQ5-D6Fbq{yrCSPfph7VoDQG@~+(*S@IJjdr`Dnj`s=iqXB?&v`SQ_6}U(B^@v>fCB}xf#fILODV2E6PitF|Gu# z!Kn{RV1j|r>TzjDLabAY60VCWV6P1Pds1>hWs7D}6g=N=)~$Cx|5;Vl{2+jjX_{kpv^gVRS$v15AB zlw~=Xdm9@Y6{Z-TojQ&KyJoVm!Z`Omf)h|%LehgTS0|mP(wsk#1K^rPySNHNGNjKx z`2|scl4V3uq+1;nV8XD%T12`E<$lpci{hSgv{20wn1ON#==wf?4&b)Xbx)WtbWF7D z_+dm#irR~3e(_MxxnVG3!--iG8L?%@|HyNozZ196)G5oIt&MMe?F*VB`C(9PS%JGq znd0pDm}FSsf0E9EITrC^vus`0sx22aop;P17Pq z?FCn1e*IUz>U%yD+P80i^mP9?4TEmC8$`+JSwCikU;DLhfAG;KfBL;2ilUTb!6B~# zbzND30U6diAfPNu5L-f^q4P|53}tCmK#rn}?1yFbLf7$&qcpK}SPT)bC0YJ7eq(juOeD>Q#3h+=SEWi^aKRpv}xqpk}y=!B`TANX9z{u(SC}G6(g*>5c=Dv`C<8G3 zmV?prwM$tApuSUByd-!LJh90~=XsuhYz#bj$fPu(rkaE~0#70wQcErj1+r)%T|%wC zgi_FZQ2dzu0(#J#Gl&TRkM z<(=1VUayEUqcvhC|Ls5d$!u;gr3weyx6zp? z{f_j@zPQ9GbWXq5#Wpy9fR!K!6h)!8HmxH5wTqt=x8$OK@t?fdAJem-$Z`^;h{MQK z&tk-Ez<~9LE@U$fvVpxu+RWW)+ zibvB~!F;|@WEuYEDKxQhlBggjyIhx2=@dIvPF?e5`4v}=d9ymgpYt%QXHP=c)^jD9tzMSkw-+y1SpaTCz1}& zmlq{o92O{T33#~uCNaMr&+U4=`y{rqp~x1(L)a(93V;X4!=f`kbw!ta{9a`4~1~v`d85 zS)51`x))7T83GMSk_@H;Tj_RM^lKG)12;(q#yD+1X;)3wF_y2P>kB{rqd)t(09RS8 z&?rf^SKHrs_cMeA9Fx#q5{+Ckw&UWrEJ`noBbtp)0A-g>zDQd_#L#ht2Y-=}g3y}M za*hN#(UY6u*H${MW@C3}r`Kz%GCT<4D4dV&JOdtz*&2tolAhKVZ}ei&dmeN}>UmO> zFZTyI)yV6_+gkEhX!PW=2*M5_NqZR4QKdnpQc+ac+mfmdWgjiq2-rnd0KrF=JLvhM z!r$T3obOJ8w4&N8ib7Fjf#*e@^*j$BJB@h}S$$a+o*o~boSYbDwbO1l8x2l22IG6K zyP$O{C0)~V0*Nupn+=!v#kF=0RxaxndJa*h6aDWf-H2y8&3GpIIGiT*2&~uZOCBC& zCZ6A=zgX0qpY7+h#Pc1pd=kH~4S0@kwmKBI$@5||on71LTv}_XvT!!BNl>{UN^k@! zE0v?;Q>t5PHS4;nnWc zPFY?M+LA7%EKnnX=S($H72I+(NFsS&c(bi`SFK$<0Ng?>mckDWxLt<`nzxN zEL>!2RTG4tJPZ5)j6R$fgc*>KsMj1lG>H&TApjBuAljPld6>hvo`-x}Q6MBYaNnt| zTb$sF@W1}6zoe>ip5=k(&RwAO^zo93$+D$5mr7n7^GlZHIi8wdEOGjME|vxP9f;cI zygZ;MCKZCw>KSDnT`}YpV)#dY&Q~9WdI?>JZolOlzc}+QY6H4-D4sz7mgl*LPmk{J z9oasB%CaoZMq}7sh+uaSFH|X9M0@kmBZhnM@IjG=q=-i^Mui7-Y0{1Ti(h03T~p}k z;#4N=pyc^nmNcex$jEUbQHo;Sjz)uey{_v9opTXB?9ycZoC@#@HwneaDWl~14p}~k z<n^UY@1_nO+rXc5*f#bGNeFY~b)F zvq4kWLvXEARaIG@qr5|0%aRaBQO&A>5Y=m^DN0uKi)gn*hN+CkQ$>-7<0+Y2NjU7u zrmY$p2mxW(Xw*efoX_W!<0v3x0Qn3_R{Z$Z{V2|?stLtW#4%;@)+?8bEXjFZK_AQn zVTjM5C{#BLi%tgF>bxi|lU5i;l40&m6D@W0^I~tD|1#9l7gxu{NqJHEgoK=#rI2?~ zoM$<=CyNK~6D(1Q2j3o00~Cg2Uo7d0^n5=5EB(1RFI8E7|L)`e`hWW8z$>9V7JyB$ z=(!EUxPED8Fd7esBRVVKDy+XK!YHP00Aw%}oU_Z87ZKq~(rW?#4Xp;@H;IZ4ka6%-;=beq+6Z}l|HpGe&O&xZ>y3B z`Sloti^9W$v-QVEWtQ|u)9Gw+X?K?pAhHZW+3|3UtWsWJby@IzPvE&I3@2p9jORef zxfu45=yvEv#0*Rdo}O)#e8zDV74&RI6f8j$4NZ|H86!5HUpU@mHm_8GE5=E7cs4Y3 zRo6A}WQnhtrpOC7_~}Ovq9m21C6+3Q;%nEpch4zO+m%ph2 zd>4v%5|#kX7@*r?c?@6tm7KdUka~7-IGfKEO(nigyeNXrB1xhm%ZF$EBuYN}=Ih`5 z(%b*{|Ihyb=^6Y<`Pjy@qhAU}RH$wxswJSk&5NhQ#i{Y)I;6g{lQ6f)F}}Rt5cj*(^DJvBno%f86eRsrX|yZ}OGqs7>xpR!RsTRr8iny6 z{qTMCzNG4?I^O5re8Y8Jf#>%2k8=h{xg<)Pn;V)U`hH04)dfGm<}XTkZ9vn5_CKSn zB;WTnRYit2t+B|n;)#`=CPm(=#E}JHm>v>&B zzBHZTT(r>V6(%_GvZ9lB0$lIB^jXq!mi#p$Euz1G?!r9J_x2A7^{8ZvtkrJ+-k+Sf ze*E<>elE-MPOtY%U;EPOVBGC=>h*?YsOR1S%a)I>@A8E=Li-lVheggI$Ais5<_RhM zoy%sk8HSPXdpHLfDT-W~vOeONaT!^ZN|CRWOucG&K{S~yo*ws!FEY%C$oFR&mbSgp z6hvO+4Yn)|Rf*$Rk;L`YUKj+}#+pWk`dEkHXn{0QHfr^%jsO8gR%rQ3Mp7(Ouf<6$ ziEvvZ&gnc%q^s2^hMWBAN^jYLJ%5YmeIz}5ppBpyEqN34iCmaO;2$pE*#$>xc^lAc zi(+;ctDk;ostuqr!so3lX>c#Pz;pP2`M*=93Ka=ZPM=7Uz-ZM(oFKsBUaDIN3=F<5 z&mnl43{5BxVu{WIqCzr=h6L&OzyBxyf~&B*moI<$%U|+?2#h0D=}#7}AH(l62r!T* za+WerN!|T?uU?enf3bOe@gM%hqUCu%bN;x1<$`EQNd(I_`-NSdB}qun;N@?7z6Vgg z;#)7T5s(YdTNIw-w=ZoAETbv%#@fov4QtIvQPiJ*@Zr5j&z>HgnX0_Cy=|J>U^F(h zb<|^2p+^g^^XbiUZ!?UhX%`><1!~aqFSW$P2v3*-)|9MDi9_I)6I)L|2u{ayFHGxJ zm88*UEKkS1x4v!9bj)!Lg zK}BT=_F?o6Cy-OoY&Jd5MfFVP(;UZ}W_3KBJugw{7ANJz()MS$#OX2c!V9}7wJ+ZH z`K1r|_TpL4rGIf|(^(+>FT|vqTfV*Xr}koNd%gpoFP-zImTHm9IEG4t%wjNj&&ddp zd~TFKR4KxgOwFp*tHxn}B(PLvwnTD@EZ^N&+gj^63%hITosA8nT01&A`S_CuFJ0Yz z_4?+~Nq@0$y}+l|82AhrqCH1k{?e8GsYU+_#rZG(lTZDx7quXl_>x5G=%qbODdG$a>r3*kheJ)qE#<2ZRi z)OkEkMorUfdw~p6RR!NfhT2h(Kr0)LCl8*TAn@j5ebXD6!jTvE^7Gq(05N}Y$DiND zphY~Nu06MqSdug@HWFYM{U83p(}SZhjN4T;N|L(| z9zTBkD2$VjK6&&<-}}BG%AJ)BLaw@?A&?B5<>C10pBK)8=X>Bqg4e(5=Pz!Ui^7TC z4Wub2LECipM?M0jAzb`=MNt(+BY+ah4NCch0|-;GTHPYgPKT4ld_I{>XS10H=3mGZ za2d*r++NtbTWfl?W>`&=t@y4Nc{bTlkVz0m+0yoJ=~06j(30M~Yyil0{UTrOQ_tit zAS;AaN7I3rvZ~27Lm}U2S@+Ra2bCMZkmsiZMHVQcOlJkl(Kyi|AxE1CafwC+8SX_< zNTP^AhX~PW9LHH4!;fE~ z_r=R$c{vh(;01a}tCx!g<1ZEr7e@%4H&H1%E~UH_c?HgG6*fxpxdZN|7sR#;gM6GF zY37CTbm1->FHTb2sF;HQXooO>XB7npz$Q4%-Sw5u$=PsiW$mB+?w{_gci2jCaIz2u zp=McczHR%7wx9BQOjAbWJ_~9q7kfPFI_R=}cI# z_@@+dy!UAD@!qr9VgWmV3%jf5Ux2LL$_u6cbM@!*)0$McAJ1>eLio6g(%9zPR zs*17&T>AtoCW@1-mFBwoL*&%EAj)c?nS@;iU{-9JlGz|TyPu67!>>rdzIY;Koj z{>xu`=legoEz64M*+~+ss#+n!^W|AgB!w>=X8$_g&R@C>{#C#J#jEwjUqk8W(P$(C zXC!?NC`shpp#(r2e!NnF{T9a}FbmUnQ7TI&j1pZ_r<3uMhmWX4D=&(!o*!_gTgVS1rV3w+-X6a`Z=lEH=_ z`mdO^1~Q$`S3iB1)J}_D9WNefbbH7WqEXWfq7#nl`(F!|{I|Pp;XDgk$AP7Miu@&~Tf0kysqFdAXVlq0d)*6OcBV0o|+s+6D<@wN; zg0}y9^1}aLKY#J}p`{MJrO$g`vL*_ch{&p8FQymWFfYI>g+do`ntt`&H#J4RbLVcm zj&y-~z4pVOymxSNmcT!mxG-_}&)c7Qz1_5qPtJNPD_{QdSA2V>!$1UD4l)T3IAzI%p)*#3UN67ha#xV1hujJm6UJY>K$h6UUviV2 zw^*NQQ(ruHE)d0wUr8dOVdsOuob!X35*#x6?@{=Ys%v~d`tF~6zfxhQGut%vG)b$v z^y-bvtyY~3-jez7NY+eFR0R=54#mZ&fBFT3_u|v2itPHqk3W0}D}*4L%#p)GbG{go z6h@(an0SKX2IFdxV9Ww>>XhJG!-Muz0XI{XB{I+zG*wBHc%{>*87fOmui`i{G^J8u z#!mdB_wP>Twj>Jw#XtCWHhPW!`oI5Q|KUIXgI2qMaXOFVyh|N0-=-Cq1sG6i1_A1~f6Jx?o@ zisRa07*XM(Ktg3$j;E((rBYdKRloS!m6u+=`45Zi(t3}nRL%zD)8UA|X`(46mq}6n z;Lm?z%0duDU;b(h=@O9s!g;d7q{J(L4&$D~8x@WfSzPZ_?N0Y6UA45zy*Nx?q|OlC z>yrF?fqj!|X1NVWIKUD$p=bF;xp6@=d*Mkv|GO8LKKA;G9 zNWRwU(q~UgC&Kc_`=*dEr80|(E-FTUG?sN!P<1<;`io@t;UgX?CfudXUawt0-P<#2 ztjr@-6a_)7(2sHznP(M= zSZfFn>@y9cWoh4d=XKP0W&YJKzWdQfAE^@GZq?RTdv_l^;YER{Fe-%M2*)VM`FNqz zZD+ApSD+h^s)io|yg#S$o_|Epok8-ZdVmV()6bg$beU;NEEu2+zWDOgSo~a&NFixl zDs;V`7wt=a86LDKqzT&j7s-X^w8D$ypV9!9KQEpmWY~iBP3<~gY+uV42VC^E{`ddr zpHd4Kbjna3!w5+M^BKJXFs3kGxUN=jjh`M)_K&HGt6)m7S>s4o)!}4zb+fm=zOlM> z2_EFKL{~k}RjjH?q+n;;wsw|0~?;oBHo*teaog52-u)DMQ zh0na&s#PJw4ZM`72Z`1Y3@X?b5uea=uTLu5qgOdde;?hsZ+o#H<#xh|lCi$gS?e}> zO-tk}!_nl2Kl||h-q8^de$Vy2hy?30X*_own)s3=i6V-XBJ=Dy<@u3XYYBJ6F`*(7 zfC8%=Y;6dg2=jJ14Wz$7l9eJ1^Bls52=p}$=?d+J#TC$pdwy_qbbR^hwTDmk?D<5=au@MoI3NichBH!;@UmPlQZ%(y zGhSY|6oEfDI)1qSR5Pt=6|^6$-sLom+&;AZJ11^j>|r`BO_MYXLP^8LJIBIb9nFa{lN(JdX`D#zN7Af)W#4w6nQ?FE*380N=Qt6Kp5EAx3Z-4RyG>- zhSF#ya{bKbPu_b(WT*H(vdFJ=n|U^HT~}39qIrN~+IQ`Z>sR6|`(J+N51t+#?>#*@ z9gYL|$g9Drm{)xy}ou<-fpOATR0s$|k}> zYMnrbz@)o}=#}vKX)E}A>65?E$@w`V2T@6x7FnJOyi_$!${J~c+?J1qqn*{>%h#{| z*Z<8=+AC`}UwuPX_0!X{x}~=owbQfycruIA^xZdK-rZd5=sc4pYSq}@-fXoRAAbBG zj>6TojWCP}7PPFy>AJl@z%LNn$xT}Olw66r|GBFQot z`XV!w@+cKWUSC_a9d9(XRYh9wH7p&=`uJ@4$=>nPqyBh0_k%EuBR{}@IF4QEv=_v& zgk`x})x5N`b#-T}iF6&{r-rT{ob>*I&(la!bjF$1I({Vj32>*(Sv+h;7~Hpa?zjjoN+af>vVYv{i{R*#0qXXg2a0X0!ZWtzs)rC&9&97 zt@W2LZ*6X@9}g!V+`2m&PhP#gYnfV(<4{QR@+a@#GF62s(*9t$w$cmyfDlwU*K@bG zHopBU-&#U5FTgu5lp^Qn@dcOc{CK8aCJptuFqQb!o}qyI`Av9U+>s|qdxnd75#gf3 z@rPoR7cl6j2Z;2D`P3cpizJ;3NQQRF@C}WN)X+`%py328pn+j|A6bGjOc{W9vLwu% z+-87%5JXHG9XCm$G-WX}As>wrh6yGEl5v{n$bpn)BD7D)9fyAiRU2vcB}w81A&C<> z7fZ4m_*s#2B) z3}>?iBEeAF1VI!%XQH5vebc=MK!tgLg6+>&rbRfX| z%`nMzN(X4aFj0AaW?eihYW=btSV0jIhJuJ9Ne~4|l6>EXr>v%-hD#AUOs@iDJ@8=v z35XI>;pqqXmb4rs_=sEpc$E}r<4R~6Wm%yV?F17zE{vi$N;F-ws?{(IXZ8ZX8Ox+# z+v0Wr(n4rVNCucriEkfVFBqnR3)`+S zevs$6Y3P@);Yx2c8WpyZq^a#X72?As%d+QrnC|legLjk3vOKjHvMjed?KID~H`j07 zxd)4=Jm*n>33-MI;>FB+S%HwJe=*eKd4XuD@ZqVk1y;#&fRE*Y<-D9GA+wLi{FLNo zkl5KcO+()yHU*#RfIq$BKLxEW&q#8hB4SX}f*^p7g69uT1`9VlJ{!IN;hiuJFI~QJ zd3#+au?DmGLe;ddyz|*COW(V7C(E+Q+6gjbK zgI5};&fpk9`XUMf{y*?BWR+ki#JdlWsHUn!*NRW28#;+V#h~)}W%B$&Iq!~0F}Z|Y zDY}Y8s&iURB|qGM+HKatIFVGH{?WXE96{P2634mc*VKzDmlr%&mbVJZDkuyjF(d>d zj^`cM1?U0YTBNEfWi?BZlq88PNic#W#|-r)ryqPdkfZ>{c|V7R?{@% zgjvW{=zTrU%d>nwTXec@xWQ$a9|n-g(UdWQCzyr-bD^A3w5qDe?N+U2>6W3CMLwF$ zZyyg1PKW*ReBn4j7)1!41#^?<*!7jp)>?0EWyRFh3R8jOHsv{j(1s=J`abF7WkD2E zP~Opyz!@?|!$&G42j#I z6%qOMlr#>T1%e(Xahi(A@Z(B&7+zq8&zJu5Ykj#h2yKRFZfIk7K|-N+I*3`#F`f0p zFfYmz$NubV*T;jwhqpeyer4;8S8n8a?gl}b=im6^+c&Q4x~_x40?UR$pzGSkYEK~d zvmb<_B+h1Y8H^gqaa;ios&G>b!_c;&oE}f65>8LJLQ%pN=qE7}(G5eV)V$Gn9L34T zT5qM>rA&D0{8z%N8e9aN2oM(V$g-uRU{TD7Tu#Kvi(#zmI-lIT|DB`L>1-~`a$NMLvv(a?6aD1qOQ04o6P?UwG>zB9I zE^lu_{Y^?TIC+3coMO4F3WUx`Yaxo`JPX4>RiK=pxR|aXOdv@UNf1>@T3hL!4oAo) z1CKzA*|5k9*r`G~L(nvi@I;Cz?Rsy73!`=fu1Y3eGgjKxpbJi$jDLbWJU?Y&@M+4Gs2{no6t=GSkpVWLcs4lFIn-!kMHm7UVi1}8xT4Z_9Qu&@#Lv3&8Kjp3&0xN;6MI*{~?u`QY9r_j`V+{ zJZ#DmT~6Z}Ce1Q|hyMT8ox6{p?$f9eR6^$?L*xOYmz8*q6}igwE0+{ZWPsL#wgz7S ziKf6937pF4^M~3gXwtgpb3t`FbZL4 z7$co`eWly$w01W)xC#?S5it;6PCAyKnQUg;ahgb5Lh+s#c^CweEGMvZg%=G)qM|r% z*6X4mjOO!y@%w+mu&kz=pvTdSd!Vja*W%(hn*}AwQN0-5V~8UPf}&~D>4c&Ubb3Sa zxGc}p1P>YGa8=bbonb&kiy~lDbmB!>UlgQU!msphd12ANNV|f4IVpakFuJt8xwF0X z{s$igVTj5bCdg8Sq;;@lMk`D5_QuL@{!Zr*;6bT(aj&lM#)nr*1MLMzEA)a_BHR3F_tg7v~ zilP{X5xOyEhO$&(Gm>cyS#YMNML{5#=GscH-Kd`oMzVsffh`x(dnTC;(LUb~>Yo?LID_@P0bUL54 zn@v#=;nzvWTSZZ?Hw00PNE(eSAPvzEf>x_h!8VwyDyZwUS?&)Cr+ECFoHI0+q?X5J+da|6Zbf4}YY^<$`0uRoqApDJA{Z_MP zKHNL>{9wLt6FC1ZZeF{5{qk-Y1Vx(Ko}0!>mKUfvNHxe*DzG%U-I*$OjX*tho&4$sDe@qFeufse5C5M@4& zd|gv7ZEwDG{Yu?3QLu%fPpbbojxEFV17F}dUBU~SFKj^+8deR&A)@eAKp#>dwFbmc zq;V{W63k%Y*s4}>z-OpK5(01SY;T?Phk2HYvMQ@uLM|?z=bjE@wo>ANBNIM6Wg@F5 z3G}dbr5syQ{*V#}!)#=zA$5w7`w0@pmjzP2QeqZfGNo#9So-no8yJR_v64c>@=$lOBZ-p9PjNP9-NF%N7L!t zaea>%@?qvhOp(fFt#qfhvY91;VX@;IpsaTwm#2 z+TG3(Us(d-&(oV%FWr3U`eZVD@^pXy@VMP>ef~4A>8hNiuq*5|YOCGW!O0*^6Hyel z)_RI8zV(^cKfZHs|KNa@TW}tLB3ANTgmXopY2+W=zBif9e)F$=>p%Vb|K8pEj~dO^ za5R(@4ZejjVB$E>o%x(8OT#d-qTJg*;CU`W#1=k%6h@LPse)h{+H7IxQ`jV%hEc24 zJl6wj3qZ5%x~?C1X_5>FLxkUyMHmLlC=G_OOp{n8m06N5<_nlj5V*qgd{YO)1DF!2 zN-8*7i-jTq2Mi*gWm(-Y)>zimwXMyK>3lJp&$Bc=IUDGj)^0W?vsscPs-|TKS`S4@ z0?OihiY(RZ^+wI=4+hn^&^jK&5JZQB1~;-><2y^>OpQD@I2paw@&*5Q4lQC1O;=kpeWyBK39q1`*bp?HyRWc z69i!aFc*D-MgR{)&JgBZ(x_XcEhsfjMcyEkV@qGf6wM!k=vcNwP#O%3X;L1Yz0nX{ z;(MB706<>3>*W2DQ=Vt9T)xbUT7p5W%(09n@x4yx*}?ID_dotl7)F88*8gio*rab zBFc&+pqT+odBHA3ViD;bX=QT`_Af!`Yb$XSG6l$_UJ#gu=6n9}$!W9EWLb7PpBsh|r|EP$X*3#=Ah@0@sp?{31Dht# z|Exc_cmH9p)4KW6jqm*4A7we+a^SZQhGSKczxmZKPUnlCz4u{A<}Veh`{FIIM*kX6Wra%dMooHffFdBDiob{Sd)Jj#%XDg zZV-kb>?a}MfRWM?4yn=I9nv7(HA+S)Al)q`CEYbbN~EQ`-{<9D*fp+a&z^I>=iK+_ z-ZK{wRG48NuOnj^g-FO4jA?NZkrC!@W|(}*AJm}0HkgJPPTgq3wEnZ>&lreCq+2v- zO;gY+Z-E(O<<5RA@76OeMQs#VYWn}#6VD#i)bx1xs&1k({TF+Ejpl@+LT;2}1v|V@ zlPE-Vo9e3o(Yrd^vBEmXst~nbwVZzuSVgvJyE{-y4I2gJKh2Qny4qr`|CVZ=b5O}^ zRme5PSMF=vNO{ZF#ul@x^neK=+$EnQP0mgueCFop0GdRlW|={Io1I!jIM*xIM@VD$ z7*!)Vmc;ehRs3!8AV3}&{liH-I3>@QW}(^B+}2Rj+71`IsO1z;5fk0lo8_u$H|*|X zdPST5%o(O!^igG6RDu7N9d7v;Ns6pNfN$sZ^g`>yznQ}=<$9j*Z*Oq2RJgwkap>1jBoF^SK925 z(voBT;Oy=)Nxa~tiFf`Hwtl-8Z9`{e<*$P2*So8qRcJ^`)8a@|cyza{8o~RQwGiC0 zeCQ`m?G+%BN!#)|@{gB*{o72+czWUp?siH;iX@&P-nW$o{7$T%2)xjTL4 zJ~!~irurQ_J?UJYXw9qnQJC1<*Cwr2QHfP1S*uJoTR(=#B~I?TLv#ZTNw z&nTIFfdrGFjXGH7l4Fil&c|BQ=U_5UT^^a?ad+e zPwP3o1ST=!;A0F`_K|gE*gmvBCnu}&ljzf2)l@1ZK?8dv#b8usH@|}HCHsn`|wH;VFAxS zx!&7cz9G!2A9Sbd=c}BCcwg^4x4hGwKKC<1fHZ?*?tjdhRC02icv^*YR-)*=b9|X_ zr4_2rpenOoI-KP6FIiQ-3;Y|JQm98*3QzS0ANMTfGR($4I{QJtK$r>^W+WZg=R5Yh z?tWbny=!f2|IuEvVy&YLTa5Sj`J`2bD$`00AJX9Z=M1Tw1;>R}_PNaLx&uyWWMQGr ze0=hDhQ%xbYinxfFDdRTYS~@y9M+x>2${pdNYR9(J$5BhfuUOUl<#20-a*2A-A473 zkk6wZ-%V%WzoAQjU3R);i+q1=CxIVkF_Rv)Szfxb(+H^bn&|)f2$Y7uKA|)((4vtQ zz$mb*RwOo64zr+yuY+EUaI?5^4EEh3-+g`sPwU?}+1d(MKqFU7xlOJy(ejx7qE;Bp zQi>GH7;8Pa9P~=!yLY#gXuFEq7YP;q6?oMeh-AZi>HZ*D#Ofl=%RMwDP{zPR^Aaa1 z+w#EaN$=<5#{c!9{kfpxD0E2x<8<3)4F$@I-$|K~*Ij#pqiK9VmI;5orY$QLcijPUOoi4nR7?dl;I=t4CCMV}gHk6?=UaCM1JqiQTpQgW4S^FksAE>yP|_IdMvT9R zYrB%eCW%M?=rF$stcXjwa$ zD7CF6wC%`4%WH60Dut&OkoDtnN%SaB&(xMf;@5Z65ym_yO^b!7jV|MPd!hMF8cG*7 z6NT`@`|MY`)L-Pej z&*B=GXs*4PLf8Fjif8Rw_4Gc@PkCK-!}SbGbZ5&s+0nt^5zVBS)a!uAPH9(rK4oE~ zvTfmDio%=@L^WUQqvl0de!pFN4n2-r;D;t~zsFL=%YKtYGMRP4@Q8M;x~MS|A){T7 z%s7#kQ+%fL!fAR22HC1F9W*OAhfWqsI29XgXI&WfyqY>1`;w7iBzT*-b5#wx0MKHB zEQ6m=J$WsP#)6PGIV%^K~ZyzcSKvAlcpWk zb9P1#Q=(`BYv9ixT;HKyF{q9(^6MtR=p9*=%4x!P=84D6pngnp1c_fbo1bqTl6~UX zgZ(L1QpF90wHh;9V2t14eyx---%I}vFI#w->St&&-|BgE#GL)2P;U)TH|*DE5{-bZ zJcfN9wk}5F;@Te`l9Q(|8U%;=GX)7O{~$)vs;4{+m}|A-Gu5m#hw(Se*PGKy?kbA} zGG~4Mi_TLm^8d~Jnwy*~TP{jZYqnHlXx%xB10L%F1T{*P{PW6zRTRQ)mtttFzodQN zbruk2`tOoSLV)O@>S@tva&Ug|;{H>a_r+;EOSHuOiCWLZ5t2$8#ha4ai1M`=94U(7 z#l5xaN%=ezzfl}*m|`4AT8w!x>YlbdtiE*d^Lp+tLGIItZL9ayBW5h);J}Y%TP-e& zKu9@Ut7uu3lzw~u($vh14ZnNR*;-3QMKd8DNB|3v&NJI=n58T0RbeH&2HWmcpNE zs$V52p)PR61PjfOg(Ntbj0F;L(Sm@yShcs6{iB@X?eXNs!f%{$wsCH#T&nZi7Y1lL z7u%LC+q>%TTh;7iphhEwtxK7xN_~EJqQ4fTjrjbMDG1O7G`E!5yqYj|-C2RGqgvTR zCE>YS@M?utnG3^q3zIB|rsg-rsucQnS)nF6pP|CE??WZ2paJjUigooPT|2t-m-a%L zJpXD3$~4{F9KPFT^gldTR6rxn)1;y8HeK;pX5|5s$BL!@MHXWf3K0537~Vs*oo3*M zk|S`qhL@vI(|;cmx)roE$?D)xueK}qr-2JUsnAzAUSFXtF~DLgvq~SOiH&mlE}#Mg zeJD)VI~ECM^C;Je&?X4SH!ynonr#3JiT}&Zt}eG%Z#SL%dpN}O(zaU)|Dz%>Tyt9O zI0IxfiiY}cGjVu8#&qB0E)@UO6qXFsrn8R<@Rm~amb5lsc~y1Sz{u)IP1beQ1uCYk z+XBq4(mPHY3#@aY0YY@=>`5PHA&!nq$if?Q49rnbk2%P)O1B~>E2j||_o?h*BliJ# z+NUncnZudnP0D6XmBQN`bD8uMyxywxH?r~T#m# zfB3iITK>#YPU>$!^VD(VI%p?$ zGq$(_UwF1$2xD`%$Ps*88qjbPLmkugK}3!mOGlSY5^DbfVFFULZa@}UJ+QlF^RtZ! z=V?&h=2fu9VW^$9mD&L^r8>GDciapF$T?0ywSBMUHO4*}!hWqKL&Ch!%E+cC6oZ?}=y4!WaL6%Apu)Vf zM8JTaFr2k(4mg!Ta=vjr?EX7^5X+JO&Dz7;;L~%_2Elpvceg8QyJhu$XbD+~pSR{i z>L9e|fjZ-MmMU{^%`O@zrhsdC{1 z5wFMC?4UD$4DYrV%GWUZ(7#53F)`#}P+hzxq+49d)!EA^T+qo%t3~SU^q0NvoTyju z7OH(COZ5Evbdof~$E9|wXBguZ73YZwl9tO5Lj58PYATS`3G{6y`j74AXcl8k24-fX z4nG^dT(*+*0>I+jMKDn=3;WkX-0udNQ6NSee_vs1fCfjWte>PZ_nATWk(;)syR;%VF3YSR2hj9#e@PC}xUkN`AXkDBTw4+2s)h1FDn@iLt7 ziSTc&IT5a7XK&|FMQ%{F_|43?78WIUhHx3UAWz5?rP(Z_Ugx3gtW z@v?!__Gbwi*m1evO1^}})NcE67kg-$O(K zFz}{G6xj4#Mrw+R9VDMEk%JV`7sNA_!#VbNV^dF40A z^_9eb@2@dnaqlVqAY2X7qq%hA-}8RT(4{Iw4_(4d?7#A3Av+V^`GCP+_Tmf1x2xYh z8(GdOssAWm7d)aU?iK$ue=vuyS$6zf+~>rN#f`kM8PMV?jh+w21#f>I>SAFam)iMt z>dGk7F8?L=OQB+dde6jQ4h*;v+*=u7JYDO!>U{%lk{_g!LtbM+(}0m{BYnlE_hjDv z9yyFTS;RO{j)7>3{z2O&HZlIuXx*bzP+PP{y7~f$T(MyJT(Giy(`3eMq+)OZ_P zAYFnV*;Umx2@w_!;Y`S)b76S#z}`(V7`sMY`DFg|WqYA2aF?+V%p@ML*M-YEf~WbM z&4G?Wv0xz4uC83YA}PiG^<|rYj3H_BTLvq&!iKon|Kg~V|7ru4gTUkdKoPz9=sbQx z>o=ffVY+c@qo=9uz)fJZF*)uSC#SZbmSG_)J;GrzXe@kb&s!*oJzj$hE7|md+6p1z zhRrdu?S^G~Y5TrIaYqwhZJs7)kfc{ZRr0OoYf?PY#C~^P zwP+fBELzGQ{FPZ{Y`$uAL>LLCDjGkf zgLL5(i_4Zpv(`f8N?|nyPdhvFMDGZ3Gk~L1k)k>pGLk*}05ZYR%SZn`k5eI!*J!@F z&k7Ebu}1C(->U!3I8vJeU-|1#CtT*(Mo$&PMKkHIhXi_~O`y!{er=o$puw40el_|0 zn$i-JtZ2VYw_NYI-N&w|tgFE#845QQL%)sRh%80QB&}EnPxX>!Qw&qO zxZa+x(I5HEiHlndovuEK2JScgJiGI~dlt?5Mj0SM*pLF8iHBLw6|cL|%v$ineLIQJ zoR*y?DJc}?K^3z+syQtHEEoYx{z0d($#>LQNOd&HFD7Qjrq3(RCZx5vJMrv_!~;J0 zadU%k2_B^@`{StwZifESHHe(y)>g)3F$#E4j^kjOyLXeREv_u$Vi*OV%h}HD=MR2q z=_QoUM;ZO_R+4jlH8t}Cf^R}KP!kOr%mb?RVuhAcE(RNytQPFT5Dv&R zgEC?`;wR!MbUn`bIF}RoKG&R>OJ5(Z1$8;nr7Tn9ezOis!c3Q?@z>rPE}?Of%2V!uOz=7U9hV4Htb$2J1ar1qmzjpY zH5a`al3E*&3P8N}A)~}S;($~5+Ks9fO%`hd9T7vE#N*#@^v1sOE`*<96x5A+Y1l(> z_>0eEYtp=Okphk2Xu0-9dlqYt@JcoV;1}pBBVCh8AlzB5;sXXeXQu|;{1X8C$jGNR zVY2D{T54M}3O8d2lTshKM9kOxa?eDg#)N_hl2(G;@>;JB=A|JVJepHR6lj%oRm!F4 zq`h(9{CkbHNi@!lEKS>UKfM3>lpY8(`2t+e$EJY&x4BSnC1P9+EkEpNUDojb;8Mz4 zv+Q_u)nF#x$JXjs88G0`X`T8Tl{YpXH9u`>gkT!F65e~Zzt7O$$#l13RrqM zU!rqSw!O&)4)eLdEbxlyz(O|ZmWc;<)RIkgs>|4zu5kY*euLNINA*FfV>)%{g1aS+ zNZ5uSr?I+~381)k5ZD8TrJ6923Y=%2fwL}>;(}$frEveF9+J$8m+p0SaGAAPbH=tLsYI?fgHlcBFD4%p+y78N{ zo{7>SUWy!9`;e((VU9avTv)}2D> zN2w+57a}-{*p@!2ld-Z!OTLea);|^-5DekvjFBx{ep%r8wRnxP5vT(waN;vTO&ftd zC=Vn)dmCHQfAy`e0cj#`drIu=U&Geqyzj5@$ijILotB9(3-9&jIJs=~ZzW>H_7ah9 zycW+#8Rb)ZJIf+VqisZZkkJ5TvbIgfc*krP`6uE9-ZJLL+9k(vYK1_HA>c5-llwGw z6fBoopztghom1LPSgJU&lBJ&7wa%dRRNZ(9p7g#!4xOrFoPw6Z8RJRu$y^{;5bS2> z-=I#F>wU3l*mTw!cx^x;qbvCOJ+Bs`mmql1{Bo8j;Lz?U;L=y(Ryc}egF^q~Z;Wqh z@is`!X$_eHeTSvAZ$G%r@m$052FePf?Hko(=Ppvrwf z|C#hxwN8*O4gosRZ*qjU8y*eTS-}{p+K#Fr* zlYtsVm|Vq6mLpAdidWHjlU^Do+-Z(Kaw1q{RvU1T#k{yZtY&?eKaz2agvyyRBO%T)-AuicnJbCf%48|PUO zChDRNoV-^5FN1b^VeJr%W7YHORJzW@uA4)nWWzg8RmJ zP#{Ap&=_u+C4DbNTR-C)k6DI)2_SIYQfn<~WW!vt!#4hoS_1ioh+Sl%XIe0lNo!u|E%Q1+?}5MNE+P#S!!nn4IXLcr+ToO!FB@LL750x+;|xJ;OGVHPjN zrmFy{B;17nPMN^nG9zWg&ep|yyY?}ON2^uzQ5_UbtY}s~n4sI7-?QU%EHiMkEH}_+ z{^!&2i8X%`UIhN3I=0!Ya_GTpG@Dos7FR0v-+t4;f?RlEdBIkI?(Ug<<$l-a50sJG zic;a>%~bSp;YW9ImNA&0Q|(H1t5C&q46sB{;=I5`Kw$OMK7e9mVq!`mOs4v^@YQJ6 z<9f&3X6>8X=Q2hM1zd7)phv5s=a6HH3LY%dx$YR7paPw%E|Q zAY=QcNsfN+lUO~h1HN<3R8heg%SS{F8UwRBjX~GrWaGiXs9-^&Xk+=1k8BCbws%0m znW0{!7FjPPDDLkwyW%~rG z{if{F^zbI2-O!U4EPefnK@I>a6QC^C4B5~(IQY7++2r$+Y>;+#cKMT$A`b{MtwQM2 zpn0Ad68xA2I{vU>hXgbNa7E*EirRtxT*UTD8!W@gC# z#fKrXFIYBhW8BtNQwz3`-Sv4r`tAL6!SXJcDuxC3n_{-|KpX9=iELFX{*1q}Hfjvh z0{po37AP0IBT9dTvRPN?ynXxAWWUAW{VD3Fx%8_{n^Ll2{K7!evzS`&u3V}~XD%i7 zw3t!2EmwyT8WeOZmA-oR3P9?D&~&8hi8~Yp9?~NPncp*2I639lwj& zFi#BEFdN8aSs}kjn8x^P7$idnLShH&C^N`67<7~KBKb}CGjkbJgLsDUduqvC*pDYP zrL{z_KGxZGxF76IbC6KSUj;t=e2~ydyGwWs3EbX&{08O*SSCyDpU&<5#SDj=>d&)5pxGLr?td$iAlOqBHY!TXhM2<= z03q+? z<94phK5RkvX{bW4iN|R1;FIXXq|Edh>mKBizN)RhrSWoU^+v4!#GP@5##rJEo@QZZ z*Zy?$bjfphdHM9X`jDAsaU(TQ`#X+XG|dL;*R~BgG_Be35Y1NYCy{(y*ZJh(yZ^8J z=r*XlxM$LuKbtFBy$(D*AqK1<%VK`%%l$#WH_!cdU}j7g4z#H6O@Iw$aj`rHheg$r zO;b1LjQhq)yISdNDNAI}dZGn)`-&1pf6qx|g@%?-qEKufIrtwmcZ|Bx;ppEXA;-p0 z;3>%?Tkbs|017vGDbxCSgkYKw!wB{@Y5c5h!M>%EUe2UJchkGeW9_MwzAyLbd^`Un zw9#Eb%To}+@`L0FiDEV@>o3)zu`(ZI(YoMeIQ|MdGWPToU^ zW!`reO-$m^XueBEf8(Zz5DykV2C2Tl8a``V+UK?K{`AT6ML)xUqNM#gco;cOZG&`g zWn3)Aa!!t1bl4gAq7+ukJE!%Te5rAiT*C^2q2L6kvTQ+aLE^#hy}PbEI26_M4b|%Y z1>VX(ft1zJFV!SfOQLUCsbjgAChHS}<9sR%3vy=A>fwYuE?`lnoG#X=f=>ixO8|LNbsuJso@xKa#yh>1$Q?1s4g z^iRrlEe&-*LC2AQ2)tPeJieY}V?4--O;0g@t{t#h74Tnl_h`kzk>B>!&yx$DIF2{{ zF8@E2O}xnnbKtK1bMr_Ncz>2$*HO7IAQsi_NN?9JFj&^|n0p@)xPPH-q&v?Pg{0gN z@C79DCp3Shmt5B8SQH7C!ashuL2KtLqb&TOz_>oo`)%UusT6BP<*pRP(cvMDd3nGb zGrpfJ%ZqIrWKK@bDTaj6{8DBnLqE`O=J)ix()sVKO#3yPWUbb4t^Lz=v*oP5sdsn@ z=lGS#0WTqN6c$|mTy0sS^Ffa2h2lPLl2+$Wjvk(J3wWBU>X<%?ZRk}B=~tA8WN7ev zi11)erc2Tbvu-@Ey7%SiAHha)x#0Ff%RMv06>K+dIv$rLmIYPTqtsjes_IUAPdv7 z1Na8gWd5ofvabmPcl@QNvQ5OKulJ7ca7seIeu7arI5?nV;OrVvVkQ0i9{o~E!Ij@* z%<>8=$M-=O=+k51rDx!I@)fh+{YtX0+Mn2xM*6Cb+o9cEuDqK(bwqqk7(fC+rW#sOcVpk_t@GgI#HsT0dpd#9vkc!!TH%jwuFz+ zQDGS(E*xIYG^;yOmpYr8nxCKF&>%Q|MI~hIL>du#(!=4~7CK2ckKR(*)f)72}97ie^R z?cN+e^z^*bEY%tW&1Z}%PXn3KRz+5AogXtRCanRj(biVq<70;n&8%(eEm|l{K}|4c zBPwNyZ`76|oRZ&c3!9WrMk=&7mWBx1WPslSY1wlE8lST4!BC_sJ&3ku5u?txgrphg zh8!X-?1NKCaoJu_mtysfT9nY~)fTa64)W`i*MQ$Qlf9?q^RUuAm6sd}eu=#(M)iDq zW`HegG^&6`2Jha11`i`VT)>Ew&Ji|3aINlleewVvHTn_2E&{oHF!uM~O#k^9_J1aF z;H_`qY5&u`=-Vm--PM)*ow)<<^d>dcajcvsupNY9g5|ST#V4ViZTJxWjy3h!g7(Ud zek<&0g(Ofq+xvJO@<}A~naTWq{o{7vWwyNU-O~wBVoFP~q*5$Sl$tK$sse5UaOCGyLa#sZX7Q}apDV>aScz^g|ydotua4MuRcDK1l-ToLp%rp5>;~)95OfLhP}h(DcAH4#;;pw2u(;70u@@*>CH&XU>`y88(^+fL*0* zu=ez1S?zE+P}1x&fNuozHo;()x^8Pv}9Oa(?N#?gP9jr3LCDqbnHJPxy)f# zw1sw;L{&*1IXOO%rS zBrgO5*HLBq96DZW3q&ypL#0Ka=!eGLA&x|b#ba^9>4xntDw?x$bsa5JFwI}}d->Dr zz7kI-tp5QMO|P80wFf<(pYCEjLyv3a12KTECiJ-clcy)}NXO18dnX>Rx0}#$)$=SN zH=0#{gC{SaHXOd+FfH)bW8>$w+EdT+!3A%$O|9{u24G2t`rTu_%||0wefQBD(iyx2 zj$&>8!(jzaYd~ITjoumo62rjzbwwE46W)_zea|#&7P0D_t|eDIbzbtizk_q=u!Z z<5;l9YY`fQ=4h`6YRhemKU2xRs{XgNxA-2#<6vLTkdp=Vy0;f;;+uXIlRZi_JtMc_ zGFpqV8u3;zY5pXX5O@)K4Awxy*SD0szrWh6czr?4WreH0d;VQda4GI~zIB3inV_IeiU^gm*D7%>$ zLvS@_8#wLKfd$(1H$+kma=)U#5}s57Q)W{UY)c^ zHs=+BpyWvcM{718i?$y=Ec-jVIJvDb^#&K zH-cSwR_8CE&1M&Cb4W)T*?d!K^22t zkLPI0kj{a=5Z{++g`Cj|x&Op`?hDkrKF8{^2X2j`N@f!(rEKFMA_f4Xs&dh@BP?8B3WYP2r@(k2O0&GlkP_tQpc36&Lt%4E!n#uk&Ot;tXnf1<3wrlc zvAccIq_qqzRAZt+Gp~{X`I72&e8i*z1v+CflIl4ROp26JbDyN&+faXTC53Xq1uC^x z2bF+8OHp=|;gb}!f5rsr7$eMnXq5p0*}!(zB8WWngo5+&WId_0RGY^k!HS^&f+RsL zn0M9#b2n=M3w@k6J(HEgrlUih=d@n;9rKh;gHN_<7HDIap#x9&T059iS5pU+bsk|X znl@4wLJnaW#Gk?TelA~=*FD4bKK;{=&ZmWFP$!ns^vvr0+YYguF=FC`KQzQf3CZWD z-yJBvyPO{az|^xiK>UNVD+6n*c2Lo5X?LVyuiQSecgoGVNKg%*E&a9|zJWbJq<9MC z9(>moeEK&YcqorPPI~2T8ucdgKd%+Wx_>K=NqM#&WtK?E3da7_`G0ZRm9F|>$1iS9 z%x$&eIHLi{3=k-T{L*4lyw}qn^5{h za`yMnrv857^+)8m-w3{YA(CA?u$`<}w}8RT7iMegs# zNM4C95){n(@of%+<)NwM%c_~u62mG$FQQ#G3sQ~jij|ZJ{{Z{;it5*im$LOIdz#Sf zPnny|yY7f>&L_*dSCfhm?bk;+*%yE??^$DyX@l)x^iaxoiy(%EA2qKP$&!A?=7E6S zV)Cw^nTH3T5g|^GV^fHD#4CgGCR;58C{s_*1@SNU9Hp(zK=RH-R&!ln<~TWTz&mYP znJv;ZwsP37(b=BopS#G$!u|PqJ**12T)A1<-T@Pb^}fr8#*m@Y?%Gn9tP!fq-;LOY zA9#xh+!+I~70H@1FO=x0U069Rp3D2G2BUd(Q2bahr3!zX+v@B0l)wviZdmd^K0X<{ zlxv+us=P#if8O0RF-ds0H2pLRzUC#7E@rMM70ifzA(W@iQBH0tp6f1B0g4CWGQvSo zt555IDEs}Xu`{junM9fi06ONCrHGJ@3?g=!i(;G4>YV8jAd>3Dg%X;nd@P#YU0g)& zL%5g6CT%2!-D)rd{@fSzET5jv4ht&${oe z=WLKfVt7I6JX(wa(uj^)&Nd@+u61d2b}n^WVR6WF_tlM)0#wNItH=%lPiT(+>G7bc zc)tyd3K5x8Zfjjumfo^#hyXR3O*@a>{Ekm9Sh69J&u2MbJRt6qW5>4;|GRjw6-STa z6iddXmc%^ANa%wpk?rOEGOaAzVKZ2I5zIziBd~L$@V-CDlO;M1>ktp$A|d#BVz+Fz z!mNFu-TWlbG-fTKN z>sJ0A4Te>ig$xOdr~{8hn>1#|T+$T?18o}%>5I%hER{4qZcwIhNK(`R={9t1V!d%; zw?3DVfuw(0w?ZqZf<_HwhV>E$58AES@8%{N>1HXAL%JvbeX=-&05^%qI@ zqOla}`C2_~a}%FWTi8jk-#)f_y}$Yxauo2i<1Wcf<%6s4Nr=udto-K-PrxOxoOw@H zafTm6E|<^e_`_;GxT;Mo{>c%&5GMVyj6gYpRZ!sp{$ z*qPe!fdX3&i+9(|>ge2-iM_kyXXvu?78%vk#4JoT|0}>m*$gCeG zlc@Fj{S=Lx2Oqu(x?~&?o<;H0Zav|uFo>aYP-Zr3dw20ltrIx}_7;fhK>0@YhiI?dN<^mH$)`v9Qt_*mFq?n;o z31-IOE2g;mOQ<4LTLtM7;D40SC*n57aM=Eotb2$YsFwZE>0Bb1@%v-9preOr5?@iE z=yNc%36U}k;v5S979rK#-tZ&PYv(qgf;j2gUW8}J)l29Yny%dKBK5q?*wV_k-B6ID z?q+c>x;*nvUVdubrr}qmKn1ErMfS}aX%}n*K@X zsp9A3fyC2I1hb!eL?3P!cle0h2Iq{%#nf2Zw~{LTCBp-cHs02|<5$+(Ys=E{>Lu0K zlfs;2_B_CZ(*7A$9#5!b@W>3~0UW=;6@xT_s^8QzI@$Sn-@QSzN+^K&_j?u72Of>_$ZNa-d_S2r^OI)io} z51GG6zDUaBn@NwjExDZRt{_9$Ut-hCul6{pC>L#?c9vKsaX*a;EpE!mv*1{3xupuK zU(B+muL~4^n|2(BBpyElaM%2atj3l5g*J=(9>8e&40`0ziu*Y@DqMhxt-gKPF$q@x z@8;23AUgRRa4zdOk+$?NE)Mm3ihoN~NZKy7HEj2p^{`(SU|50)#*tsM#wQ#nA(vG% z-*^O3Yx^t%w<-(nnZUIB0|2}U2%Ok;UjwTZk4uquoSu3ZeAM5;jCnMkXO4}(t2=?> z-d_dm+8O!nzo~k6*`{-@r3D;gjwF0)YdS8&JjL(oa#wwxE;#_3ozgd-C=|+PS#`RG z5k|V=eKvbByK?pPFTw?PRS@8?yqzOXh)2hi^e_mHulln`5VF&i-yS!+^0wpD5%%|r z2}+z#Lt_jpgey%wa%FJ_xL+l0-vTzNTY!?i&tqUa2TXY-GDeHEW@Vhda>?d69opYX zT_2w$gGOasqAGZj%_0Tdp;$0K|L?m$Ylqm~i%FX&fO-^&&t8hvt)3IP1Uqo(QMr6iILz+U~ z{OHV^0s{Wb4v7)KKa4C?(aE!l0N%~W`*v$$+qXd~bCB2Rs;rrn z`$$1DMT;XLmCKHq;bUpo*t;d^WEFTGJuHZO*Y7A=Dc8iGmwR?~3+MK{GXvQl?Pi)h z8;hnhDu-pmnc8P)s`8W!{`3hJy?cqEv@a1Q@}vBKcc^=7K~~6 z`Axv}^3l`6=D~l%r7InGAXbL!QNw)4_J_xVXZ`XKj1yzY*#~h8-D!AE_tJ{K&xu)a z@2w15Gqy9-ZWUE=`VVhsxf>5Apsj)p94vf_C2(NO=Ivgn4q84^0$}B6f-F)eskfMk}1N;?h{ykPo7Vm3im9C7M1H3qNnBYz$W9h|*P@ zu3tUk;3J};;P2&B8T=g)R_BW@kztwNRa3t0)7VZE*9S~hvQ?i=6ciFiyz|2E8m6<= z#kesm+`kK`gOivjyv!^#OrwKkZ5G-L)bgYGVx`#cp{DEseBxlTvei1cJXi|7u9(}WiI|iw<2+4Gr5vH1DnRM|@I31B64B%v#vxklgagU>Pr_<5pd@8b`5 zFS8Kle=2*8`#YaQOSHO%7%E$zh~u|BEhF$(^q zlDetq$@D|2c@CYHFB;+4y5cDKa-+tC#^~XXXfD+6biG0kZ~+fQ*VeUryZd!(aUn1~ ztN|+$L}W0AHM#*XJteXoH9d|R-7QPpCIc@4>GPxcHQQQEYK4mR!~YiJ3|#kmPd6mB6k zchL^z5%4lMw|YSD4(L=!RWWdSyIzI=%fYc2?u9 z1U+xZrqz9pi3i8<{(xxZZb$QB!2DGif*}xPCQTch*0g$5Rawzets#jaD|4?=t{Ych z7q;yK51)M*ZCbUIJ!Z*a1=08dz4A9A`;NDuL0QO($huQs+YtWaI8n;B8ipY*or5_$ zDR@6ALu7vn{T&L(R{?;D5Syv1aF*W9UcbwBq}H!3QJ`C$2_3TK0>s8yfFO2>De!lXx5$yvtBHz9K`o& zK$9BYQVA^eqZaX|NHG`ZH)UZ>rS@TPIJ}0DTJ;yyj_zfDjbO0@24y$l2w3!>(QzlZ zlbMN$0}q6hmzN*4B#8F}PXnqaCR{{)1PL=42JLl1Dt^p}V48%eSbJ@|ZkqFtH!Ar} zwd%CzR&`;erObZUlZ%UchhtR3CryV?;B$;E2@t_iuAd4M(_r}NeTK{%2s~|T3cUJDp@ z0zdV)rO$ys4}diKMzEq}@rIu`FwlUCip^?N|4J|KtF^ADV-@}=)s$YK+phI&n=l{? zBux{nNc0qMZ+$y>;*!;CF6DM1XV#$uQZ$8YwJ!4!E(;K)ZPtQ|3S@J()zrql467Zk z{$3Y=hqcNCbCeS=RPLEP3?jY_*o!m7sdT^O2*Mn|&g)WQh{#h7bNYmnmuL3QSsCF& zhk=IX5}_y~rE%P`U=L(f*5JKTQ&mj{dd`V*2~h}ZfdXN;&|6e%c04PO83gx3fd zyiiZ|#6pH#h2^ZBAYIG5x>0ggCRY|YJ9GG+&yKP&INpUmyi=jWcwluP zKXfmFL=C{po+KAVOfTe_f0^FM=g#B~ylV=0he-L=-Qn_Ji~JrD5s|rHmV5WlYM@u_ zWjZL*g}bb*J$1!hO;4v=izT)8ct&5f3S6XyZ9o*1UCLkKp`~W68X~RaXL(_3YoScLWp?;6R{{*2!bJ? zqL3klW4$!$QMq>8y^ifpB7Q7m>>B=^LBf95obBwaoN$ww19w)1k(N4I{mq<%BPaWE zGoDmsgyn@?54%Qn%+7coXO%&_e%g=Q##GF zoV85md)-8lXTC}z^j2%>;L`Uf5a1}$@9$6CHamwe|JIom++5kn4@nlUO^B@eym3R& zzqFt)289&s&N>C24Kx3?`T5lKKLD9QX1<465_KU5l_XiM*O<|8L~eLu)@UcmvknF{* z+wQ2Uy0fwFxbCCJPh!NhK{FRd@#7~?`6z(H4<*ddH1<5tC*$$z+FA+77UP~Mj(yjo z!=~9{UbAX6n{k=4#6jzgjA2nkNN*5yTJ5ubAM+Z*?gE`yk|QB>eNR_)-}81a?Tp70 zNfLLqwj#|)zNTRNKzccl8E+>&^%I2gA+Fyt+3Fnh$1hD?RNX{_{cC#j3HPS zj_L$>hV34)&JacexxU#b1!}>u}HHBmOAf!Fn&R|LQ9@_x7Il2Yp@B%QC-yc~_8R$MaS@EneWK=E`RdLJz0|5t=4!v`OGU8Tors16w=1Pd_H4WbBAXc=}7_`Sfc)B62>s|61!$8oAP3n?9E{V)v3O$};0 z(HKEjN{{>$(ZX_GVrfEPNkSA)j*siLdR7*uX$(ggrjz#n&u$t z=%DmeDh%~mXg2Dg+>pkg%(1mlTtR`Q%;!kOGQsgSqX_2UB=!boL6ga3V`Ia0U230} zBuNm21SD;op7t%Pj%01pF-vgUs|G;~p^xLJ8hVKtG0$6DU9Fl%r2_L97du2yHDf@Y ziR*fnRaI5x?!8Aj;@RTSXuP`GyLM$aM&r$9BTNYqdK}32pA} zdr$lb@3Gyet+eY*S*&zgFJHeT@VKZkM;F8gdk63`$@8WAxiRp`w#!|0*5rv#f8{1o3DW=8c>FEhPJvlJaP<#{HEUMD59XmjlfvxE}6gEkE zba;r^N&#L}MP6tcvg2jqn0M*YB}IY4x<DTF@p(iZ9ZSfGIZ!iCuhiOAps=aZs*mT zH*_6oXq|RjmW9Ov1Wyzwx(83^)V506g9)9Jy%q3gJ^3Q?QmxF6p7 z2=&S4CKZczyC5KRVcT10IF^neVev0Yb&9A9hU& zkDuPY_vE8b?ms&?fL}M^)h%5!&YNHg$0;&q4}vHpNpy00dfFdMrqjd2gJ1sU*I1T8 z@KjMgefktDxx(DIaSgNxo<}OFqFlLrsmPJVNfJAAKfvZZ8}w0HBw*t-O~X)-u;-Ty zQ@3hcn_Fd3`aTq>!_jDcV;y2KzA_pO=Qf&7$FVsU0hb4d5Z9zxZdEPZP%6|tL_7i3 z0F(eMTd&nPmXidrS#NLx$O{%R594`gEJPkdZwhhhnmQN^Dj;BH6a_+T8F4%Wg+Y?G zHaAaCPV%y-)+{PddTq;%)38Sup0uP>^f*|_H-h)tjJf4n5 z13d>2da{J==GQBc-P4;Gbfi zp;s#9)!of2mo^>89?hKnlTjEa{n7ZnTc3<3cBR6MCle3~Rq=Cgyz=?azkPN#5JX-x z^llF{nbBx87!2biee~?`cmMbY|MCz11X|N`Wb=Gk<0nmH+n!HnQ>f#ks4Q|iA)&5y zRPn4T3RkJr8_imyVZyP>_Whv3R3s7Yr>1F*MsqZo?LFPEAq1MM)oZW5@-j?LW%1>g zUTU?Pp6^3zFH1uNmbGL_&hkRjjcV1Z{MK*$o9JALrzD(z2yecEqTD30-O%;mUM9f} z8yg!>pYGKg4N6-D6&p$%5Y#5q>F& z38y%ujr&%$%5yBa9AR3Tq$w)V3ECi1npftFg+%&q-}B~+1BNK;XWNUiMDn48n6st#RuG_a8;(Xb%OdJDG#I|`@9ge+ z;AZEYcJr)1WI4|Fd=ijcjY*EL3qrXThJi$E>ip2FR$&%&=g!?Ij;dyLu~@wP(lwPZ zf+%^Ibn~_OVsU9}{owfQ2S53+-D)!|pJ(arI@Te=w+!w0__WvS&FAyIy{F&!#@C)b zd-izm07m%4P(KI)>d*mRAdH~x>2xZ~piAhw?vW>H6Vqnfaq6|&WHMSf6U0r6rW zRAK06o2}_=IvNd$u}x5|SuiJrA9=V;WgW*Zsv# zpyruy5)gO_j*)0hlt46k2b5t+`a8e%>#`(2dv?%l)`?L7k*Q=wmS+pwUf9l!t5Um1_bB+##gCIgO$x#KwP zcEdEG7hy>$!g8#x8zk;r)D6_fd6w%WDrTkAeYU@^$npviCCp}X65vriJw2UFCa0&T zh{H(GJKGDpR;>oUFN;#GR*#aDsW9zM7vQNVx}HZMTc!%4A4r1Kr;$+Wp$CQ4A&CNj z`3Hks2};nH6?tW)3+9FAl1vSxX^>)!5Tuz>Rkd2J9>8LtPR)R;CTeJ6j8`@q4d|~Q zKY?Xm5XLE1L)A1|tybXs{eGVqQV6T7Yasljx$SueN5^59-@SY9)~%0V@yBwOWnH^= z?c}r%*@q-;ZEe<&WGoeEo#n%m!NJifbP;3);KCsgM~n!23{Q@ak7ZeY`Q;lYCujY^ zG>V|&!|Ru~Zd_h>>_r&G zhyBUS34$p8_`%b=_xGShbew~O!|`yiz1sTv7e9aV`W4DLj?=V1oXi$>mctv190V{{ zyC{J!RzE%Jivmzv5=VKKmL)C$s;T065DpbZIXXTScy4{QmuK0=#zuv!fNjN9u3WiP zt65v?Yn0?$VJlmk8?)IwPSel5^_knBe9~^Wp$C}T_wLz@rwt4i#k7pp5PNgTVr*K9WXX9Jr! zG*W~y%QDaNHrF?%(@Cq{s#ZmvbPYXD$rN#%did7LO0O%5(gz=X zJSHZxlsYvUjk?`Vo)e_l4_<%uM$NM5Y{&Dwh!{&2MLx#JR)R%MlC7<;o}8R@+D!}G zZ{?7v1>hk7dL|AL-w%#YN4M@gl2n9bR&|o6%d$J`-RqY&sCu*2Y^?M;oFKk;`~Kr+ z2YHqrpAPTbd(i20PEJp0eT5lw48&lAPNziJaKsDz-rlo!-g>67{mY87SS(7{#&tTw_ndAe3=MvJz8_w_dWB>`z>Fl%^V_%YWO-UbLAtQ2CQUuZKqFj#ICuLq`_ALT5AHsOF}>p+9i2SgduGojZ@zr#-Os-M%FUN(wnGpEFWtCK z0-)v$a?y1N)helzg{M!SUcGu1(ivpXH|L8*6&Ff~myBWK`FYp9P?^iWwFq_E5<$LEK}oJ1UR}+V*01cPEOYEJb*psws=P-RX8F z|hSsvo47eOA?>rI6gi;Mu~{bxk;zph8;1IiA&^_7X^9Ni**3iz$B{G>YY1x*Vosx zG?NvHVc6+xQK?jhqhT0^2sbc{npNv{TOvZ%JW}U?pwjKMJl~ry>txhE2*6 z;sYfF0kWwnOhgw@9LJ`iuYtW16o?P3ax5oGf?*iMXqq+9>9R*hCz_^qJ8j!>N$yVB zYScD1H=gbvp-J;RlI6T1iORyZ`@_kd2m3biRY}k{YM5eswR3%EO_N2A=c}S`mUK@@Op(jbAt^=^< z1)<$+CYVC(?>&9`wXc13JemZ)fAz{GSpq~hoz9>h9E~TrO8 zlO*~l<1R2B4n=jwF^YK9#rRX)qt?g|TQfU@~^rgM}%FT~% z-+AR`&=esP zEcfi-(D%K!KJ&)v>e|CckAn~*KHW6KrKK_dLR0V@ASw_J4JJ!j6uK&>P^VbkPU|N> z{rQ{(U%&G5OMm*O-@kVG5{sngnEcVsYd2qd@aXaW!O`{(%9AHg_6$WuZxKeX-n?lq z7M||~zW?Dzw=vd?;;+2>cIEH=-M=%RFFMGm38!E$syq+h1OhD5t_AjHiXtB#9yXf| zO*3o<_T_{Wo)hz0)Azk+&kontR%KZkjfMy?v#Pd@=u%BXE^kJffs#Z|>$>i`?#jyQ zFaGSFl6m%ZwlbyUa4or)Z-I8)wkhO5&vjJu%Bx2m?=y zqtLP}Of4j7JRZT}3)DJzo2n`x4o%f`d`-*Hb(X6@e$nkj5pvS^o;-c$-OqcjJzuyl z-MH~j{@HiJC^4;CRxk}yy}G+5iqdF2J2^e0?$-Dir2A|%8Z>vA9Oonu#4rgR3wSOa zB*SB?RvQckH1mg;8s+4o0MU*3q9Vnp$e|)2QL17KlA~-m9Fp;Q{_S7>B}o((wxg*E z`nrXkXNg(0TFr*%2Mv-j;ksZ(7I{j8VmXd~b~Jc)cuJ{OXklrHQ?s_#Y1FIQ&c@pP zy~F?YJAWWaP)KqdLTDI<+1lE)th(oUr>CbS!zhXdMq(V3Z%ybv=a&H3Uva#$veN1F zk~sYKH@|XrcDAv$lIMAxq&&wRpPUM!Xxoc!2NdW>j~;2d(P&sSORw2zkVK}iZh@-{ zk)3JEG6Kb(?Cph7Y*o!pyE7aONwh4_x7%%CUP#45A`4|-7yx;)(P*fsU=EK)qiff$ zpPZZ|$-L2MFk~PK{K*;6#EQ+$O%kb!q?RnpWLcr!_DK?-^@mhBkmngSt{|Y(1P=N{ z!L4cvnV5*9@mNOuGXfp~MBpxBNIpBmae^!>!{LCiGc4UOWm!2o={xq~>XpllW*uE- z4yRa1mwnGPOpWkWWkrP=n&S#^l41KrVc!em$2><+E=|FKg(Hy>vn&fFvDt*{1PN^Q zi@e+Ifx89{A4|szSq2hbg{f?8tTSak7>s(|j_>)i*@EMNyIr~jWyWMO=Xl|xkMB%? zU8;_~U^#wX#Flk)Jefaw{G=>P{8?cDR_i4<0_ee)USD z(cn4m$&)A7Z(N_vrnhh3dHe0pM`842?^&}6lva`i-!D6jI?0~mx3@N*eRsOCw+Cjiicg9DyFZPc5qtE;~62XP|E3daixNh)BV7zXx# zVG6dfzELn0SpcYzWZ8SS?%cR~g<~1t^R~A(@7{aB5Z5-)W;N~V)l0(xU~9wBlY~-+ zwMS2$bTKk)x-K$PTCJ9*!TgG27|Svxk$>;~57_x^KAlXdqKZm6X+8k)1zG^FATEEp zuATM!hG8u1d0u4G$%JFMwY4=wL5;_zVT57Os9CT=V=-}9EanWuOc7eaST$=l152mV z?ZJ&b3{R4Y6NUmw2wqrLjZC)D3?ykL zNs?K$`or;q2Tz_oI~a~e{lOrP<7NZV5@`x5ks$CSIv4*ILT=#ogj_A;$PyJlbvp&U zuU2m~8espKrX&FX*xcOok+TimQ-;i+2}T)E4degF+hXAKmLv}!KRGx&Q8jHmLAX^M z#~3bDDvQN@I2=im^ycd~A^uA+q$Cva%yGS+zIW@{{y}eLg@X?b_(I@UvwXeY02GTc zHhQqdVh*9Fk5op&i~{i+?)aoZr>88A3{X4(X?U(nX{RJF5PG9ptw!`72$w!QJbd=- zFiFyt-im~l?_O+7q5UfA{!R-BbhLP5|)oKx9c1EWk z-EPOWfxuFt6w9)`UhnYmuv)c9mJd!47CROP1Tvb)84Rah3Q}j;>T2)!=(tgb%P;N+ z^xUnLUhnj*Z&hL0X&8E^-Ev$%jKWT*HJjOK5>>0FtjM=NzC#nEzw(8*_V$lIzW+#3 z)c;>s@A)K2n&0P5(ffA5EMmHq9P={(jUPH zg%k?CkV1M#IR-@#VBi4o%--Jat>2mH>1l7udzYDI(^X|De$TTvL}*@IY|Qmc_jG4I z&(D0npRcoU3`1wV%);X#Tq}uWeeEfYr+ zQxtW2ewj_DdcA%i5KuKW91bh0W-sh$Bn&$;H%a_=|INQVe03fS21JpcPT`x5vl%%b zM^hBX0R_>ASZF>Uuj_M78>KVp@n|%ez#A>IyZ>uw%Lb>85 zh=2@|X3X5SY`X&B7C$hI+$6Db60yh<+(Huw<3V4f<1D+~ZZ@0qcxYACSTD1+xmB;% zdxQQ0rMXFxAMPB}03k9;mBp7B8r(@d&y%DZSwmscg$8%J2%#*XZuCq3$#@hD2D0fC zMUml9uvV*sGL-WsVzE>@)$a5bwza#nc?iCRe;jyK!`=L z)9ck6t!yUap&^9{66&YZa41-<*Hft!byKQLr{i!Ka(^LCeKH;nhnt%lun6q;QpuFd zwSq)m)E1j4R%zupx~^jmvuVy(j^pEe7{Ic0mZ?-qRW#FFCX*~lQHE{?Z8LLe&&zxd@x znN0czzxQoyi@gZ>7fZX<8Jt~QVd>#-m=53Uwq7eBUjGMPis9NDrHX#jIiUSFaJ=7r z^HHr<*9~K!C`lwVs#UA$R03^0mgrJke&^fYDpjgqJ$rWV&fVc~;Fmxr4_PvdN8tHJ z1ENWELnld}ZkS8k3`mfd4k8kcCH~~cf4|%9%0b!3fvgW66hJZsZQI)0+bNaGn01A_ zE0mX}uN<&hftYO2XT5;JG%dT^>F|Px^4y(BI8txaLA#A!8*m6jqk`ZY42F^ z5{c+=X|irNrK+%^qQ1H1SGr;L`+bh%X&U-JUDq{D6D1K8AOLU&n<6UN1FEWGxem|6 z8wigBNsh;pcs$nY^|a9_pU>;Mfr?A0@(lw>Pq>W6l@$`HLy_w9@x$TJhr+qe&(F}m z8e&Xg$A@fXB#@s0c1Te)MwY|707VpnK%p}X{k4b_h<3tA!bj2+lt~)$D$HgRH+p** z#v6@BS%$VP1J5xRwuN}n@P#=JP)#B6fdgEWD2jnVpi-#><=`AL8~|{MIMTM8a9e7 zvbB6x6nsm^)oL{%(0ewIN27*e6bkv%i_4V*%DGmn6AFa{kv}^-kH_NxmRzkq`0(Rc zH1a#&es?^Y_&8P_LEdh;RG~DO8+u3DC>{elQZN+E=ktUM@?h%qCeI7w@t8$=rfwJD zHk+FpmSs<8z-fXvfuvh47(X*;+37foPN(njcruxcWm*@Pm%ISxTFbKB(A&uncxKxG ziPuI*aN;l!rXr4~vu3Mf@=yHItZi0x$qFDAb zSJgx^84Lzn?KU-xHky+>jo|t4pm0KptwhCWBexk=6=VwfzEh5U_-HO7b4!^Af{Y4>*FDr z!Cu%N8bHuEOc|onKm)Q^xm<>6A&}9k*=qTCJ{SyjyIr*UpjIwuE;Vh$FdkI=3^*W6 zf`A3g_^9#*S(LpH{60Al`0}ggkw_>S4M)PEjrFz9zkKFpyx}0skuB4D^7z3}8BvtG z*B?T@Ajo+}9E<^h#`MyhEV`CR6!XD{}5 zw|?*aZ+-ajr>%DTb(TGT^j{Z6e;0c7`sx2qB001R6MgXQf@SDrvQfy&asaaQve|m0 zLDQa0I{oSAU-*1{zdvwO)OsOjnAY|6&F0n?2;2IDAe2LPG9Iba8o&R&?{>SL|MTDc zc|M!DcjsWWg4KIG7AJoA{qIG>;mLTM$t25_8a@fJN?elqc;6I_nL?r9%C%C}kzevR+bt8pa7dEGJsi#gGYsgDfmUGKpt(>Ld$AY{ zAbxN@pF@!Y`5!h-!>AFA1S8;Npr{q7HCC>brfRAN7_e9@hHQ;+$>6dN%OU-e1iL&~ zz(HAM+ctg_kf0Uh%`6L|2FzDPQ=M5Dae=_yk8b2<6PQ0(i;KsmSSpK|I2B& zLO(XUDGt3VOi+Ukc)#KtTwvEB@(%oECK{yddG!9Q6rqw(0~BDC>jG@6)@b7fGJr`I10hXc@`p#>R|W`GI^m`LzLjf{vygWMD-``~z=K8wmWg!Ga_Dg~&HCqr3kUc%&UAA;n(SIU>?q9g#=PaFAo?#``!MIBdxXW^!4G8zewMw4tdL$O{@v)KxV zgGg^U$>;N(PG>rqh&;^WJDqMYDE9|L*2|*V^UCMr5KTl}E}hwI>VhW{NGf=|0B19B zawZ&{I(9G=L_%WFRfobM<@#D3jZ(=32%9NN)wFJRAP0lC4XJ(b){dgm;UG@eaHC)p7}QG*nID>}vc0&1S1uD)WGE_IMfSe0-cY9*q_<8Ir=i zI6c(HXtp8h!C4IzEgT9SpPsK)1Wgfl zZyy+@eRW+z;(Jz-M2d2AtnbUOpIfGNu)h(er6Sw7Fx|XqMES*Yfnp!H?!a=!GuJ-za-MyWDzYlyAlJZIre=SOW7fMEIyJ3{XrxWnM@}jIN*JmR8mnDL$}(Ut}F+xu5KtAG|99eh~;v*gMQaEjZi2= zGprzh8Up!iK(H!`fR&UaiD6)cjMv+2wr<_pt5&N%A3uS$8si`(H@qPu zsCHyI5R1hy|Iy1qKd^L`(P*?-yop4jKHdi>oTed4u&C<>NWM_^^>0Foz;&>4xgfj) z#iX$;+o;zQi3GkVfv{?QSv0SN3vY}R&c6{3fAgm(c$4ASgUy%MOTv}|ikwt3nNPAPF9nVX`T;-|3(KMe0lG&=C#VMyy1l`4I*rGo(-}lB?(gsQd)=X;K7I1=#fz7a z3Lcby_VZuzK5lz^6P`|zc3i~a;fq`@cmM8Iw>Ri?hlzMxg4H-#D%Uv98w`dxmLc5a z%}qHJ3O3bN2xS2h1TmXVUC#0c-~G;C|MV9N;Ob2Qkp|?`lwlYca)JN(xZ;0(OF(KU z$7OQ4ub&^rqfto`5!pM%uwG@Ttmg|hq_xglt#fLEtFvj0LFr(pE@6l)lM3z9O1F3^>Z&Fk|o)`?EuZYLuX!H)x0n4(E zv&2T>#bRkK7lsarBakjiL0&vQ&e7xwZ~lRc0dsXXs@h?<4bLbxaNt%COQeui3g%I| z4n|FM`-A@X^=#y|hz)=JP%fiShyEcT8AcZa6jN?DeD-ge4fLBX+=!!pGI}2vh+t{8 zIF_X;!b4M$NH`!#kx1z3x(KdtFdHeVHrm}><5;%dYFBHGJGXD$z=IOr+1V_XYpqT< z8VP{{TpR0#9tgoQ9@@iPUKa_%^_};>Rj)Tc`Si23we@Hu zv~qy;1SF#AvJ4Gc71)F$!3>`us2kc*<||Y(fw+zZZDj8BJQkKrBZc1 zpRcd4Ynq0}K^8?)0x!<=*$7%~uGi~>1_muGQ5-kl9}GY{O+f@A&Ov~bg6J;;(G%s3l4a41mR{`E))tXiu(FZ z177ZL8i3_u@w)Sd_5h(>IY3Upy8$%~h-Be_#|vEy0l+DaXkQC2$x zUx4)`2m)Yu$ocsVWE_cGG0qxY1t@L@tFz!T1jRhAsqibYf;`y;B>8#Z;-yIU@4f%_ z@yX?CwYqbAcRZOLAD=#c{1Dz8XW?>|{(xUM?a5>kiNvb48hVyi=jZ2t@cZ9oyxyZ8l^#C0@1d#X(y3Ido9pmOWHOm& z&krH=HWUKBDl!ka+`u~u0#INF+p4v_6|q9*;K=khPHp@je`fLUX+iXdieO z(nFMp-_&(4#Lj`}(zY$a?Q=QMVxj@_G7^a>ih|gK;o)#7fYnk!WWR}N7@1VOSZ!&V zwsagYZZpiQqa#5O^0^Eo)sf_2FjQ0x`Q^Yb23&k_RI&t2**&pX3=h2BNPmx$`5-BDWmBRgowch!wrTDWjOiKeF%jd09xVQK#CyKw!q*5OwWY{ zHxdDyGUOu!r^SkL-@CQb?e>waoG>l>(WCob`CMAGL2HvLdhBa!gc^^KyaEX$~>wpPeiDz$hl2J0QL zT+cl)l7gR$$ot$BZR+y{d?#VU7>P#0vNRYd9-7+S-ckm`{!nRlx;`KK+wZ;wAp3Ub zgJ1r-(P(aLtZ}S&wX_3)Kv0&|k-Bmq|H5&t&`7}b>hx?rn>(u&@Rid^L)SxcpwTj( zy?kZp5I^(oyKh}zUvF>hu$-^nXbOUGadEY=v92geKAV}(XT#ypjUhoKL3X-5O;cAZ zkfBB*(eZdR91h&X>WxSDTkSSMz>-K+RkXV%k#*R;R><{wy`=9%MM=D3awk$uGhSi3AS#*>xNUFOq{n*j^(DNJfv?>B>2q+ALH{71*I&Pz3sidy?$>{DwSC;%?q5paI(4VT%V0bW6*JUJe5lAtFNCemy340Gnq`**Vh({ zMW@q=M8bD&AH4PCv8t+r;RtZ0v4~-UlGp8a%YHx0`I_zS*DqeS+U=n>zPP-(xhZ-m z;HGza0|*}hD}F(a5(hr`Qg9&_y2*W-1l$q{qaBeej%5>y0}cmgV}UE5sd_8 zN#M8@te8T&ZlqI5p63UB*m+SD)#>&%b=2wfHrMlD|0UdeyW88_o0W1|*Uc}#eo?D8 z#^Z6nKL`fpN~Ja)PY#b>ee}s^%axn>=l|KC!QzHk4Tg$g8gd|jZ~xhBhId$^D6Cdc zlL!J2a9z`aghpL=6Yl;1I?l;-$^fat-rreYEtmCHZ#sw2u`v2tXR}$QUiV9We;}Z# zYA75IgS>v)?sh5KW0*h?plRsBkqruF{HxW9Ln~`M#Kip~K9Y6A2qR=CM5%?toepSG z8HV{yRR%x);SgZDcs%Nb#V}kHIKu)3ZNO3)404i$-?4Bw!f{-+S_uT?Znu}sX3*|z zg@tH92SPJ-m^=`!STu&Vp3tu&B0SJeF$RleSpzKD`$J`WW9`dlFVe{b%X(kDJb`bm7eaST!&Foa1YPLf z7)_?dN?qi=fBJ{t_e+8E%TgNwj6j{@XKsXRw@s7t`7SQ5bGeMFjasdiuA6Va z^^_*b)3Y-jnNKm}G}*Et_22jph6 zxwf{ZYT8%No`Z)qk$|h5@rnWzB#~(J_~dM+>jJEGp^is14tQ={Xw(BX*57RVu{Vu_ ze4%+zmSW2Rwx7|&=l!hbo^HG$M@I-RmCi{CDk zDGz=*uz~=a4XzQxFhCq`+kmkEEe+f`uXEraK@e&3Ae&M zryTGGm=c7v5>rqU>WI_}!hN^P_4vU-7&&EGFJmp1S69VHkM5bKh0HPVI_Yo_koRsM zAfnM2+!q=UykQ_Qon2mCWpkNkqqVcMmCd9sF0M(MZq%Ezxt>ad2SbhHe7RgYn}PUI zh9YCp&}cFnDjH3~h_}*c=Q5dkqalfc9FU6T>ce~Ye(~Y29zA@ZjV6R^6_0{0ZLS+@ zg&Y{r1>gDQbvPLGvLK{aRE=Sn!G)56{G+$tcvx?AZc4SE|MH_mBHAAgAKbkq z@!aw0#n$E~;c{T2>hbgks@KbiJlAZta=EPIxTe#|T%U7ZR?)^T7~=DbrG0dCys^IF zVLZurjOqZ?s_W9}0#W%{qmK9xMmRGpecuWtl}b3!0{CH3$nzB*2a^ z8mTZmK}KGvK>U!>E(q`l4i&{sxB`A@sHlVs5&$H>1V9ekzPTwvP^KVa_4Q;jmSx$r zKyA_KbZBHOoJ^;Y2qZe&?oKt2R`g96S2o|Wi(2;K=j}e&H2?L;7@D2;wXf&Qo z7q-Pvq$GiUlSCo%$pp}nYqk2*M|Yd8uH$kndsS_;Q8PdYf)AjsU@L?E3i+0Va;1iB z74-4RIm@ye>uZHVzSZqbrgI+;xo@Gs?Th}k!M0{jHe^#qEWjWxX=vXYW?Grkk?s_5Praa@(cna>k z@!rnXV5lTwurDi>%OuU5onNf47u+P->kseWy;Ce#{2m$yRL5h{M-T3}2=~=Z?dWYhD3Oe}TJ3tXMZEvsJF!@FHaC2*c3zk!JP^2?K-5@BM+3JJ_%tS9 zRE7CBj6p;}xG5I>egIP%h7pg)Nsw_xLTfy}5ClO{RNN|5DiuKxSacGg$Uv^yXav9-3wf77A+{jWClZYghr?_( zQ>)bpf`Dvb9ESmb6ZmT(1{hW0=(>k^0a=!t&4$ZG1OlL`Y&HSKtR?4$VVt+R;oH=S&m`6IF%Kspq7Qf-?JGQ*e8=I;$(r^6ieCgb%DCxC0z3iGoR}K z3NQfci)D#6@(gJs4c3z$_zJu%V_TLA{iRoy1B1bEYrWtsZD8On7m^@UYR&D`9#cH*D@7*^siS_LK(lV`R6gHUMUOya-s;U|Zg;pz2t@Z{AoP(&?Qxw?JP$cb_ z_)su(aZ|EP^U0(8j*BQ3OYpqRW+LxfEFDSmBMG5veZBC%{_p=<5{0*(K3*h9DBXY-}}MuK7I7y)yZYC zRIw1e@Y#!_bUIzF)!u&VDdV9fK{z=*6Gbr=i(KCn8;$mzTl?Fa8>LE#Bx&2SUY?w$ zQpunk{P@?O?CtOM`vc-1|M4HrX1c14GMO~uT!T7tKA!S5jT2)mq%kVy+FRf+M z#d6g!?NCUDnJ!eKu6m>4_Xoz~(fZn&WrG-lrs-%j>h*f-jRs8p-9$i!;U zKv4;j3Wq{?)>*IDdBBf?5}T%hDJjb`oY`n5D2n0?SbuQj<0a8-4o@~N^a+=1Hiu&s zvk>vQj^dJdO#>4qK|mlO-gCubF$lTQfTAn|8y%i?^rsxu;%knx1OpAkjKVy}1HBEr zJXns=>jB*<5C|xW!Y~Xr9O81zwimD$L(V2V=b>oQSuXL|3WA`KIu#6=F4!9wCP?&_ zXpiCbG9yh3g+rv9*xTN;EMurBe#GUj*6Qh0!pkrq+MUccH*(|Y{PMCmRMc!HS;*%| z08uKEB(9uQZ!l!gwXVUb)Nf*Zb9dL|Y7>CZka6bk87LYDo{p1;hb;vgy+jct2j z7*-+?o6Ysh%j;+)oJ=N~t@c_jL%7|qj?co8kQ@k{pI-(;!HuQ<5@LeIByl}hE=basAulh39@!N6kS)M~X- zsRWi>h~Nd<6w3L6#cebiMP*Vg9*bu(sYD_UTCn*Hv(A?*!dXE^YP;R`0jCm-3wX60 z4u@^q76b@a1VIvkBROs7-Gv-zg`gayiSxy)p;fk1$ysKH=> z_h|U70L}_T1!|77;(6Y~c+k`DL?V&J0xIwMe7;ME*>)2|G!pLjRhMfOjYa^p+3w!j z--$-Tsbun|RIvc3+~<_j?hgLd|M1pU(6Z#<|}>$z;!Hgsp<5dYP` z_|FkGc`}`XI|PRA(5f;tMOACHo$bwXr4|Z;@OW<6e!t|UDZ?~@0}WAJi1FeAzyUBq zx?NbFy9izo6cvho$aePoTkTdZ8K-Eb)&{a)v)P`_0qRX6D;f5=;-UgSiJeJ+LMs z_+t$lS<0_Ll2dKqS@Xl^$V3d)UUD-sN7+IR)Y z#6~_0dSpXHwb(Lf#Yc*q2{@4Ms$l3u6Y+Bt*WsDH^7k&143H0ifpOKq{T;c6zjj zc9siZG%#$Zi(TGwr_;d`62IS%ry|&o25lddF5sfVQxp$+ix`F}m&@?Aq4DSfa+9FT z#L_~`g7gP$5d>5}0#AT?3&7Mc$HZbgRMo)LG7yjnf*6lScvR&$04l_jpUGs(vcUaB z3RA=5VSIqw2ay~km%x^a=6M0ibPfa*c-)EmBGkgp7QpZT*8!5XcqWsH2N+q%OD2I%rvuIizBVkgvn)&CSfH#?1n=Wb6VMVKnm#!_%chgMZYZj@x4Sh|wE28) zS__hJ4TeguKYZ`)H*^$83VdwK8c(M4nQmKVKAZ0LhYpgQ$N?dhOnv<6ms=b8wY9>@ z=@nYBdD`vn)@FewiE_0S@QVj~J1 z@AXafrc@F|zFes-7xu>bnxbitOyfAyx&H0ndgsNuB2a~#l+8jXf~ z<*Zn!HaHzpt^}aWs@iM@%odntSZ1f&oj|~C6c}I=Fgq`Sj}U|XTrdcL0B9SSPNxg9 zXNqjK+Z07@Zf+!!$;o7r$)@M?dAG03=T^1Wz~k*Q$|4U0ps&SqOw^bLdc7WA?4!WB zxNYM`lVn+7kiZ<>ad@APrl=Ka)3N%}w(W2@j3Xa$?*+RUltZj2zz=gnq8@k@v6~(V zNELkA;bz0O;bFBb3qPz#_Cp2&ey^7`V2}#VDtuFUS=LQbc*BrfJjZ z%;#e{&ZnyCWIVx;Y8WCTbr;%X!#Im!JjlXgDT;#1r*C#=cuqRg4Oy00FKp#iO)K7% zXR~=KnHnhL<%-zZT)TJsAe~I4lCU7!-`l)@@Am%QmftVly?r1`QoYr_ye`ocwN}Xd z{_njX3c-@QkV|n$4&q{IFUe4&!`myWM3FGzoqvE>|XJv7{N+!a)oL&t_6LJ#Eb?#v{4bl0W;&I4>#e7seD?Wd z0!bpKZ9$jfCf4)$NI1kW-cTrH+IFQ{1M{Douou>NJWeL#`CQgCART$RT-NLL!Jxlh z$W^O#lB65Wwj}Ty>ua2kd-md`p&Ru^GZGH2uV;sf^6&q{&r9XX{@(iC+qYPTyS=~b zLgq{lMKWHmVOku=cDlXkbUN3KUw!fg$FY%65Iuy(`NfrGFNuHo&;RLkGJ#lncz^)D z>EnGXXNi&>$X>4}z^7kFKt}xv8eA%u&nrU(UK$Qo0S-cX^t!#t1Pr^d!$R8`l5__l zk=QvszaU8(>*kSq8w%p_7~)U|gCWYg1E>U^1G-#rX9~fskb335)b=Hl6<|` z!h2#k-4W~!1T*NBz(fXZG-4sR5;Q+J+!qT9u*MGcqh6!~1!qqpkqCz)-EODRXh@P2 z2*?;l{T<7;pFe+|%VtS8kuRh#&aM*iC_z%9z+Dk4t z{aq9sJo0!LSr(V}LK#hT9YWl8ceV$Ll86Ez*#Z_uUzGd~q;L2LmrFNo4^6RNNEq-k zp2>K6S*(JBW94jathHM0cs%y$XI~I*;_>~v0`IeJyV>b`VHZw%SuYNAZ?rmxM<>p5 z`R?0KK$FX|+GzaQm(Nnkcsv$ytyb%6>(lAPvcTsQi$`6{1xdK;?cUbb+MqvVS+A;U zH>Ik;`)GWX9 zb(ZlK%T?lAZ@-n!q+oUq@j=kE1%q<6TEi(1pl6#I8GLtjK{#HMt>U~5FxK7X#GLL2}2@U8G_FSe#dbl(P+2Z zRfdr7iz23BSAb=t_(2Sy7;vm1l_Wp*LqZT8+MxZW+kv+N2Z#AM?*tHt9+CuhZ!8uw zO;b?@GZeQ2rcGQ${U#p{Z?&=a08fxC%T&?sb3O;nHmqsK5V~wYjGMk(+JtNM+wZ-( zTsYJDyk4tqZ?2m*2;=;Isa9{HuY}p!-2D3aVJIjU@|ow)k6bI~op+up>iE_1aU>jG zUn^*kdQJKL;?+$Bc(-1rTCMpdF`Lc6>&SBp`bP%-&|imdicOJ?H>3IV6eMfI)|@Lwl~+XAGOu#<#M^3n;Rd` zOM>v?<;zGoyq3@TARdElv|29?U){O2D+gdL?JPmDTP&6f+3Y{~gZITi@am@4huJ;& z{(4=IdINJd8lD5%!!1ivI-PuRbi(=gOd2%simP>_$f$N)6I-3=EU#rz7-GrCrTu7*Ra()Fh!U}11WEm0= z;1N-x(dY<_cHk3tmWymQ#UhPBqt#(qHXcv(AVd%rfk>KWa2y0TVD%1+J9QoX4H`sQ zt{e!)(IJWy?~ehRf{0!IfWO^p#nI+rjwpP7KU5v_Ib1c^yMx;X>@&ue8ptZPp!QoV zz(+P3!BQL>aKB+1qxA@q1VcDBj5{exQNU=%Fz~1FSMnM+r0cpQLLLI~n~@a$OEAdR zG)?^Vcsvx#f=bV}p`jm*MwwJ*@7&sbet6>bdSyRIdSH7sRGvI~Fdk2@Z?2QcWWX<- zUtC8bArD0^9YBH-B=xsH{Qv^JMIo2Vyf{3vO#RI_9_!`;aw`bp`1ni|fz`|**=(^= zq1+VeCC+QL+V<84&vE%|VyI0<+9;b&l^gA|v-92U4c7`{M|%B!tKH>&Y_~t$Twg~R zHGM6Y+1cD^_xhb~FCd9m#j;@-f-P<-=l0JF#@Y&%JFp?&d zHy%HXMWgCyd~$M1dpyNr_3!<`@4fZLgI2p=sWwqPJe@;+yICxk{eJ&?Av>Q=!r?H) z`P3V+aH!sF6Mz2)-*X&ClBDru0@hU%h@3%Lmi&^((i!OCXVw1b~m*^-a-U z!d3yzUj3F0Y8F(_!_70DPDD{kB$MTG8B6~~L6}UZHiF*Z1{4XEDUb&uVoxL-b`eCg z2~%oWmX|1y7*|%1UNIgUx{haXq6ph)>>kF%I9!=vJU@~!!1IpnU_Kv@f(wk{a2Ss# zkiLza&1U1#2uVfZ+v4?l+Xy0t{~Lc#7>@@JsThVC3GMfQmSgc4P|Gbd77bGra7!1q+3EF@@fgdo&z~P<(h0v`ip68+7gvU^ zN5Ual4oqh{P^?`}I+d8tEfZj`zQI7zfaf=&QP74U@Eqq&B@@kNI~)piy1i1ht||)S z^`uitw;Sq7$hKLn&d)CH+}Z8*l*Ph+aPQttvD9j}6-E86ci)mE>4RT>_~g-p(HNK% zu~?Ksvr(F+&n~Wftamoo3x!-P0>Q?broK2j5e1%QSwVyiJ@4aUk;w7s>B0W4<2a>q zb!U5X={O(!@>d?(Q^;ik0lzk$v|4RZ6vv}6Ns$6C24$&`%buK`?eFbEB{!K^rhRyH zdjHPO``>z(q@XiKYkR%h>&bE{k`O=fyPg2Z)}gL4feD_9@^da~t`_d$IU zi$&{o@UVHkkQGOg?o=w-Zgv0Q`vWkZbvj)U_8?a0@*2|L zktHYtCCNk6 zL0N`g9141G66K3wx-~xFu`^~o)@WeFFYrwZI#6^#j7MRSEb&# zb?d;#d7mF1Z^84iDC9DOp=w%oA`x9U&UiAl7A@Oetgo%vmcc+f8~FEs@snUM!1~0K z(~I#~OQ(|_+9S(>cszEnyEz=H$ETOG*(?!{yWH+)hez9+YdTsox(VXJojq+bZ??J+ z^E#XVgCBkO#nDN(*V|lQx6vXG!lUAl?m8@29zA-X8`hW44kZ!rWa(70T5oNx=XbX^ zk)73^&St;(@Z+Ey*x%XO+S+ifR-zz$^vP#;Z{NZ*F5bskwsUy+G9HUq=Av9K-aXhi zEt~av!$BD|$Zm2pnWWO`{k<(s)sBu%TJ0`LQO{nyqG9Lgq*C!m5AXc?v#+{+?R(#O z@7~?5n_{!m?Z;!W@nmdR24wKW;swrIE>{9_=>GjXAanlHAODDESY3w)lmz{^St=DN ziUb`Sh@8nWP_D>CB7S^)lFR2XgR)u$SWP?*Vtp*4^e~=mCjHg3!=>Y*DQW=+Gdxuj zw5|#S0%#r#>nGQ0nayNN#S+7Drmk>Im87A%z$1r_fRA!|*_a)A48;K$KAQ16b*YisD+Wu!R7} zB|*d(`hdaU8>|o>{A1}T9I8>iJe(>V(RWuw5M?&MtlyEt2o6-3YIF3SS%uP>?fap zwYjyXYU4;a6z~Tovl&CfAOH2IpWnNC#{tAc%C;Ah=o?S2kTZyIrc*fbk|tUN7_Y;ZZ)93kAWuZ|eH2~CCuN{Cco4g~-Cz&RXVYGmjC3lFZ~k#gYW)MqdT~|F4gKSQ3Mnrif#u=qzAe$D80}rQw@iL-}#;2`r@mX zX?7sQr!P&)4 zr_PnDaiqR&RXk z-8WCquU?&AuCL`f-F_qzLdx86A{x4Pdw)Egw>n*)m&s*P$LCju3GUvX{PlnQr~l+1 zL1w~o`SkI_&z~I?OU3DA5(o`J)H- z4)%8b&AA0whhxPSE{*e8jPj}$QT4c$YxTlR=ZNI;rYZH5AP3$if)=d z)(aCg*XoTY_j36{t=8@jl-X=L(iGU1@H{UF{Z7wCtYFnY*9~X6jHeQnO10f?@9%7+ zk_j4=a6R0s5d?%oMx)VmCPk6t-p*z+0Uu1!K#y`(uKCPdF4XB%_i=)YaG_?-=6zf^ z9BQ_jZUXYk*9+O4Ml<2AE3&OMg#$jG*Ik`qT5ZN+rVzO+mK{|z_)-1 z?{xe99zhVBn_J@%#G9ha0SJdI$Em6Y`M$H6fMRJ{troT=;8_;J?)nA;K#~y1pbYi^ zwEYDgAsXzeuz2#X!2zaaGbyi^DVEERAKhOp7S9fkgF$(Bd!yCrzGkkBMkANY)o!;W zQG&_UYL!eT0rFa`M#8~i3-&j0;y{=!YT zo;r9*vw|UE}DJP)MeL{yp$8p5OWHx94-C*=m(a z-h9^HXRFs&}z4Hxom%^>ZWyidd_lOK$exkKnR8cvj2;(o&_Y)G>qxokOP2pA5SLl zy#4g1SpMp(XPHcDG@YNES4N}p?OVICSm@%i#Bpq+(XcIhX4_HfYmaC{^d)3i~y+kYKrplKQw z>g2LHpN~z(qoqn&QAa@VnofBiXCw0~&cR$Roo1^ICTBtD5Bhi+gh~qzGh`-X$T{`- z*qzOFXStl~I>-5nrIMQ@L%|S)N3g60YtikQZj{TFa5((<;e%g%@F9raqT$KhxV*fI zM8bvvz@lESCrMJf-DVhXGMNwrP))VlZAlUxXN3t7C?^VF;&>=52m)LVXm~}s0sn^4 zpJ*_}Azm0T^&#^{0IwPE^Lbgeh@ix&RBAQ@_yWgyJDqko7)obSH#emKaxgWTE$r{^ z_J?qYA~`qGkPBcmMGztMZ|D3HWTy&(uib`qB#fslSZEA}{r#P-@BQw3Lv{SK4?aS# zwEgh@ol>PrB5Wh$p+_SSZ`z=coi7)Q_uqe~cvDWL5~c+pN)hZ$>RKVkdBLA>Q?3&( z*Vg9xpg#=w#h~o}OcI^4~xYjc!Wt3g|`783S&CKF-byt08NoINXaH64|7eq_M;xXH@aUp~et=L%)7f~bv z$qVRJ#I{LL6Cuqhc8y_R7DBq4(MTAt>0I?uvj&DL_vOaax&6JsYE=Hh>gaR@njwi%fxD- zoAB;VXY>8No&I2`p>E!BmZ^Arpr}X3C#;wC`2a8l&H=w5O8$kZ!`$3iJ$ZEh7r**- zI4FPd^`YpOLNINIA-Zkb2fLdg(MK`tRk1vo8}8Ney|>@|;;UyvRh!K8a5!Y?dOn|p z{LInFLe?dUrgh!aROR}n^zCoIJJKd+mzD4S?mJH(-WpBJQl*Iy{m{`7fBHv%s2e88 z>%+kXKvn0tT=vzglSnw|B1o3?USHqD<1xnL84QOz+gpZVwz~suG`36&dmle4)FDjF3slN|>X$QT7P9)na14qcviISYpI zZfz7^93JIzS%K$+vcFiaG#l;pjkVcyR;|_0?+e{Qe>Ry$B4Nh?)m^*OW;~v5w`1sl z6!v)8{k`4Gs~cGkRI1fPJfWzH4zyYT9ATxjAOI4b0TLT+7`kQIm=4YPAORL5t_WcK zL#K;XpIFpj!3G-K!~K3=f-pHy1c9<2+8Eh_YS;<-MK|CX#rYfz0D#owd7sah$)pYs zUplMh##-Uz>~eEs?YdM$TQ;~D=W}3l;B^=PS60q)v6Mu~xjmc=l`nXIgna`#MislEVXL|`teUqkWzhC_2had0l z@9>wM6X*8PQP#_hL zHkxg13>?^vwY+UwbHh5lxX5MFD`zzxj~?E?ttg|fpC2<`&)ZKQZf_Lo&GzA|(}iX2 z?QF2XIUiFl*Beg`g5l`pOC`XFs;U9aT!E); zGMg`#3#gkVDJTbMitG)Bez2B8E0TyueH`oYtQiInq|>Qnxm>-uxk;zfnB{2O)^s{0 zTqX-2hDE6`dc&+c4C+D1c}vw)*2|{T=^pSef;b}5@5hcdi-qq72$9@w*XH^fLsQe) zOj7~75DY>7N}-T{{^Bqmi|Chd#GtJRV1-Q64hAG2$3D1!=d0(h%GEjsvETu#D2m`> zL5)W+7{u8}!C(;Ree>CDIz2czIKM0=6Jf)!o2_0b6h1q%X+gedq#o{L7q)5+}7gFAozmwyeBQ=~f{i?UvC`KEYlck9!y z59^I)yVc5NGi$l*%C(y67VLMB$d{r>#^Zxv5z;M6(rhxG&1S7m|6p(X?RVZhe0h9* zeKQ%WnM_7e)q8htefjLj=i}aa`f#XfKl$m$Tbube9^V}(VyWD62VfQDW?2Sa#7;LB zjRpb%q$v>OpzJ{u5XW&kpp~6FD@^S|w+wRD@*+%lSTDU+$TZ+f?gWFu{%}AuzH+(t z>rX!S@gR+^)$7M!PC@xNgB;>1WN3!NVekaSV^B}q=4YROadma`n!cD$ zgYO4lT#W{Vcmpz8_JfxawYh`gpkA-S!Mn8e`CJ(e)2Wmo2qE}vpy$D|IbMLAM#u{T zD`@~_gM*uAeXZaFuqu;DrwmY~3Qq|Gn(J4$tMLwB~Clm4OV#!0(g>IlNkN)Jx;K^FpTU(ogAT`<@zdt~e)Gt2#s8*}+wXN}^ZCOEU|Nv;0njpPS|*czd3@a;3=Vd-77M3dZ+RK!uYdX> z%lQmlPp49mP$(XYwEK_%`{2&4&p-d_?yX%v?4J2}B$Ur&NZJDeM|CuVvFY;F$;rxD z{Po}b$MJL)PbTBBXz`}_um1c0`Rx26l}^!K-^ZVQC4d2ay0%tWxrlPD^~tAS4#664 zfB4boE609#f0y`g|K-1!&f)g&wAz z3JmFFBq$7(v0*!YNuWqt^n=Fhrd$@_VI2i!cuW^dK#?>W%~&)7&N7N#E*E$2+(voM zE4rB?y?Fvpt@j;>)s7i4J3)oB{$^pKI0f~=>L2PK6Mlcw$2% z##!#}ZqIeyvVj0axLn&?>mPmeskK<%y}dh`OgGlo2$F6#T7m$16QydyvLJHP?RMvK zdDxt|KpehWtx~Df)z#H#q`{V*bTd#{6+@vg1(#cbB#1_%na(7kfo7RdD9ECcX1QG6 zJ=kGD`&Em@V?$+V>IO-X0Z9VLn`sMzIMemh(=!Hnn&m(s9*>Sup(V?KLN5E4fAu%{ zTrQPLRcp2JXzce(sZW1~=tHd-#1SJ%atuTFmS!|!){gB)xRtbVVXN+dlV`irk$ghGMA0Bmubk8ia* zk|bu+sl%5?Z$5o|bzK@yXZP;jF5TR$=W}0t_4QhzaOdvrk3adcR4S&@sk8HIhN1uX z$3H5SDw4=wT$Zw# z>2g7LM3Mwexp5Y`j|VRs3a_7laLCJ2q^RreTJ{QB@mvI^BM60GI;P{>k6|ToA-&vweAa z!?0|--8*`9qK(1)kc>wtlGxeaWEiiH;|lrgcrq;(%RDc(JN@I+i@UdPr;_p0)3cSc zN~TiHW((~-AkuGZYil~!3Ag))fAIZ3{i7c?nk_jTjm6`x73|9=lW{m43zi`5>Vc+fC<(sp^}^-lWvNnYG=bo+TlS})eUV5+!_mma<&|F&1cARP7JV#) zbj2cpMx#Yjo_f8JPG{1oRJl~sb({5hdP4<-^1D0Ru9YJQoMFr(U{~{8m+R$vbFN#a zz48Zw3wx2v74Z4zIF1~U9^AWa%x5lGhR0DWIfjXT9UN{x!AC*-8IYZH9awJY)C8sw z1S%55;fohxS$g!~t}+}>C$mPQ+3)ohmfdP~UY%c;t2II3Suc}F#8<1;^TU^3ugA8` zBw|W441z`hr)_d^dD-vv+bA0_1Y}$znMnF2f38qCIlG9*$jBav|M z(Sy4@=Z%Jg@n|HSOeA8lIK&Gq!*b9v&0?wCY;|YTiK1!BQ1P)0=>~hGZOkJfIh~B} z?{2vXw?3OKEYt0Ft*;dl@tB7qeJp+N_O5A|j0fmtm1-jriEOSHzW1H?H#at0?T+KD zV$s-08>2Q!QPfc;oi3H@hG7hPyT&>=E^9jd+y0};@GYp$frxpvl)9G(-@06?6{-7U}1DQ0a z)|1KPyKlV_@cV!9%a3|pP!>IWaR2SM-ki)}T^$ZbXqw`E9Pi_NK6bfSg2U5I*6Vdy zmLShd*AubuU@&NPdL&Kv2Llo8Og@Svk}<#?l*-l1tD9ea{Ao`a4TkE?O|jN&5$2?L?xxSneE6%+)^a(X^>Q5h^ywRy*F~1|H{0EhKmY1yAN=YUAAPd7xA*a{ zKNkcxpUXxT?+tGs?7K)hzgBRqTyx!Mwc7L9v{1;qN%w=hw`#RUe=yR?S(T`wDEKbc|evWiNFq`Y4AX~TtF1WwsC>yLjfrq zl<(iY<1Ck?oA7_5ZTg0we`|j?l}Pd&=b@=rCuhx8duwwol}e_P34E3SDx863t+RAO zLC|~EYBkt00#4MW>vKf|NXg~p70b}3p~s^U+p>TC`Bx+bbhnd}bBY9hTYoUPyt>jx zBV9KR4__jTf;^c{XVYmk92R`+?)ElAGmGUa5(lN%SS-Vbip3AM8ki_sz!- z!m=EY1Y+gz9P5`vWiVj9VC>{U1P^1@dZYEpXJ7VuU1#MgR;rb1ZLwG;5(x=x{`2eW zn|i&`Zg&mSmi*%8#=34fbKTtC*{;9aI0;OHT_cN7BFPF}6sOm`lN|F?y^^nj5 z(ZPUNVcE;^Xma;p2XUT*eSnTp+Gre$gtj-bBGLld_Oe>7ujSIy>Fn_3al6xjv99E|+UE8Pg;Yl!Jz8O=r_mx#Fx`Z$5gMPDIj~bUvHqSf*U5?(S^eJ=k4Z`oZq{ zWIR%}Q6Lb2grS8a%fVD4IvJ0)H@AI0_KipP34(a`{IFQ6GK|-PuE%1Ec24}pXvB$5!AoJ}&(fHTGz z2mEYf1Gd5889wJkFvdiiYz!u6gak+;2<33nNjmAGF5jl;V!B*&!rMRHaKHg)$CC?uF8IBk%LP6gErZRQ zzVlMRfHCO2(J;=o>TCNZZ~EU>^Z+l5d_wjkS&QNFFa4*B8!z`BZ+y-R>7Q0J?9I!B zbHY1uy214aUN_8(2Ip`4cV7?icD%W?b)b3Ugg0{LO?v0|!r5Qm*oDi;L7DFxyy>6Z z7&-7p)-SuZgs1O5+cjV6xBc0Vmp2Xt0FO%T-|b9v!q_#AozYI_4+OlO9xwXs+S?7M zTYH^C>!oe~n|b4;Wj}A=%1dk9H}+Av$)W)4#M!}|h@CIrmt`dA4ZN2iXT$FWpAFUy z@7309&kYuDH0}F&^U3B7T%O){FK0cZfH2C-M@#yl^0uaU)Ba>1Pod@lHNp|>w> z?JfL%-t6a%@v+H`ix0rrN!$ps-^&Hw4rl-Fb}gI3#SK22VsN{r9WEjV9DQl)e%|co zjrhdKjf(}~G#%XL4?Pi^3w$>G&Ib1u-mM*8#fzbCb^JH-#z~`F8*-&(KX0(l@J8Nu zD1cmqA`?mO@VVl5n+G|6J2hQ4vwk3GA8dGC_VZ>xZ;ZVpHyO)-PE*9|VY}IqOJy3~ z%mLnRws_&UJ2~tc(#xzja)5V(wbSlqC1h*se%|cojo8QKMz~o3*+x(=bEG%$*+$2n z;N5~xyy*49pG{MGSr*Q+pEvt?^M6BbTr2>mrg0YgdMEk--;=45ZEZT+$n2aGIq7rL zuuiMMiQlPR_w!~yZ~kw|O(2udY|bW)AQz1@5b$or%arnRggEcz;yAIx=HgHph_>$M z&3@j9y)HLdrU1@s&XLrsV&{@WF7R$6yH|%3eSmkyr}qZl%dfDXH~V?>$(Ng6L;~6y zqe;2i-tKhq?cCoqSFh1E^X~C{C?i- z=gqz&H#x)sxK->laeA6>c$qkEzrEny8rT!Om)T_hwA1U>)@<~D9K6BDz#Du*c=K_~ z4OCtR^{?31dE@E?v_F)scva#xsv7;o?`*u$1MX~QQh#ab3%ro>kOt$%FK1ir_yi2Y z=oN1=->w^eFWT)->2wyd_?Ql_whpk|2-&GJJD&ZyOdL8zimpeJJg{;jgg{c!M?CQv z+7W0yV+z54@|R#Zev2s{_JcPW@YzbH+<5o^+yv0=H#gg*@_~TYo=mqF;x;n%1aCDu zJA6;H+xgU+wtBt9zLeg!b>K@zpHGblsWAkmO64WvvYbI1a-`sILZBos0>96n6K_n@M0S%|Gi^1= zgb+TiT?kpbHd#$UBZHY{Fw$V<^Z60-OQFsShSTaxm?r!z$OA10Kr|jlM>GMS-^U{^ zQzm4aGuLz^J}u@%ju0k-z5t5zB3bIpO>T%q)b-^^4{UGVgEuzq#)@rC*xcBG#x4_` z@dPUflBGz%Kv7-*BZ~?#sUm_&!wN8USSc#Y3sIIIb_^x>~k)`k_=pMe7^hOi)}TaeZdeXqW`8MAKqC%OtMP+XXY zpf3nvn(+Cgs*$SSl*)+eGn0(Q5I!W#I0TX$D@G=(pI5C6gnR+yhx`~>975HI0vtVY z7#2+)fue})TnROz<-(huc$rL^@caFEa@hyC=&#FAallCAh5Yatei%l8c|*#8l$B{y zW^~P`M%QR8j^@S|oHVHzkA3SL9+~|{-{dA~0)C%N>a}Fk4&1q9176zDh{nzYVkQtv z(lpOUnvz}|f<7O@0aDgUbSJuyG!qCIKqO>fXrUj|$|IOLB#bXEnu&?S%lX|~Q@p*? zryL5vt2h;dTZeJN4ir3kfcFwMFC6yHp9{QOy>8dDw>1(BqC78xPScOt784?wL`hMY zg+z)hn`1nt(Fjb6BVhuaZS61u2@KBRiimvt!3@Htwva|?8OA2#%pTbiPXhbJPUf0@&@BM29{`tXfBoRb75J7t~ zih_`d$wTuotT>EFz=!T=65AR(v8|~cF%iVjl41k{d2GQDt$R8JUTcfu>7~_}JiHi_ zhF2gVgi@Y+uTOoLk&-3>&7B>XUgpPlkDJOJjtuF}SQ0y$JMhuYW-QsY+92wXwm(zi|<`#TmZaHrI?6C}+P@V#RFL|T<(`tGV$Kk(z5i55aD2W8r zJYT|h#*-)ybYkhZj=}JfQn(irA8f6||9gH7?paxf;^Gp70_6DyLViCQqcMnBEAINt zY@9cDD&i*1y?p~BH^SDE*Va|zMj#qD5pQe6(^nmdBd1ofZKZ4V z^+9fuf_xi3yt#2J&id=y=rZz9771Zza|dRY0{47&A!dyop}0fSHq++q_ov?V(v4g3 zrF)lRLu(ktd3o%gp=s5wrY78R!7P04r~_FsNT=f7>r*aq0Cq(7mu4rze$UBJ=Xd)H zcQV>eoLxBF1jGq%$DK_Ry21Cgt^MQ;n}32w$5_(D=Z~C@BPt8g+7*K#l7N|nPXN(` ziHeAc8_$@_bJl1w0iQ7VUT=9L?+SD$5`YoJXXjU{@s#HH0mH{igH!@t?@lJLVA5DT z^Y!B~r6kUdS+@Du@uH_Kto`?TpXwnJ(5+%OCZ;3xHshT4z3O%1c6&+L;GOuL*W74# zgZFA{-+05Gbi!&do+%NN0neyX%R0gh5gbIXRTxRhBwk_ zMRn4zsl$p9@+DKtSoBX)&}`Pkp%aF(P=iPJQw7B zPogAj;_@S>vOgf=r;eC@3`eeVBlvyLN=g!6dEgDyc85{uH_#bP!q?r3zh8DZhLx7E zLdx^|nMbl7Ym_BdD_xKH1FXbHmX+bJmmh|Z=tMk8ii?;}{+Hy()~9-i1hhZoG(R-w z-3S&vz&iuTv_%iH{M7^lIQoKGm*e?v!>zu$B##2 zTdV5mWG$E|2?tTV$G|Pmz0ZnE2f+-K+z^RnoGkFMyniiKK~=!aUsj&Mwrow(=+_mB0YVjk--13JWu}h5ML5BA&njWqBM_L-nPP z=ef&`fOOJz#iIDti))b|DT1lY{D2w9rAJI*)>$6=+~g*xl;P)(o{FInAR3EF{%ZqZ zulK2pj6lwc?GHK;X>EdDz}sPZf_H{^tVWKdUhqLF5LPvK8&ucjrPEfE=06W{0czI1N zVsQxq#p?Pv3c~^JxLwf%D$Bw+XzY;G zbk4hEww0z+wA5EwT8fjWm!Y+zi|>%L)S`9o_9>5i0M3_gdjT0{q0@xQ2JgJ*MYtEd z=mmZ^M!3AU5HrIF9luLi)CjBvOrO2s;1w8LGDym_O)mF0y{ND4q%09uJr=c(`HH9A#&f8@qV7R~*s4fI{n zPNusWzS9+F54=eg{Z0r~0!^(6UIw(Bm_FsR(fIo&H?%Zb5YEHVlgok54kVK?2mIda zQyxA5Cvtl}aj%!C;WexsK3(Y3iyJ(83EvZbJAK*ABqzKb_h9fw3bIK{Ldt~IR)CQ< zT^j)2C?VEIR8zRIY3L0yZ5{SN957|02;_>WR{zZjRBS$88;z$ z#Ur%d(4cAM%|bcy1{QvfjQ}|^6X;AN*~*a-hLYBJJmKI;ALK^8i^Vg>@Cs0zVy;sv zc<=V99&!TOJB__D*&Jw2#yHI_FWkL_w_kT-f>($4$_bbaUJMd%NET=bPztb6RsaNb z7_U0}$QygrJZxI9(kM`lwBGQ>panQG^?eBYl~JzfmzE4U|D@2#e+No#q>(}ONQJ5D z<0qU`r(ESmq*X<667*+~CgzAqxrwT=wOi7aasc#RZuCyVIpc;S(Y^<}>Kj$nd%sWR z5DBQi>w8YbE=+XA<n_hcZe#9=EmL-txw#>uJufVgWc8fUY|A7%jIMJ@Q7@BsUXLz60&hq>yEDDpG(; z#29z{%mp}q>|$13k0;%R8GLWKoB*1+OfR4 z0gGo8@sb{`?R)X2C%Fsf? zuKm;eSsMm4g3?H;V*v<_*#mDZ+;lY>Px4*>j%i?g#0GaOb=>rJ@~%9?;Pg)KZr+AH9qp{4xw8x) zZ{z?%-fZO@Ql5FK1f-A+2ybjoF}6530#MCwg%wUKOSY)T%+l7KKu3&rvMK9D%c0^+j$BxdYG_#Hf-G;;}gUWk~N(M=dKTz=O+c zu&SmOA)lY41KoM!CTE#)6Y$f%3*%$zQ#nThI*Z$VuS$D@#{j|iB@)p7+bTM2b$9a~ z9P`VkaKx{d;Lx8wg=HH^^V71BIiS3ePslZGITcVI?$q5}@q5w3!+YwtHkoC|7x1wI zlHjyBctxYR*V@q0fi_CnMbA@wK0DB)5;%N{+$t-Z(SNzo&QbO%a37KpfO=4=6W*)i+f6Bb-;I6?p6?pK)%U-SH`g|yxG0SE%?7TxdkJrw)t#vSypi*ltS`UBGV|@F{CRy6K!9KiddmZStw9Z|5*s8pvdRLCQs#z=VoC zES^!RHs<&SNN&_!ZbQ`u?O)aWHgGVKT)c;1kl za%bUALZh|(qq%OX%Ct3fx9NtqS!7wdc{h?AOhlt0jVeAw+d6RmywRNeg7?ZZn*Pg; zbndC;Mxt3wn=*U=Y0vdeZu~0vXW`^Am@~QvZJo6ANAHH-lZj*^$tk}6`c4Bb`qMM$ z=<4P)X)#mgSIjik-M;S|eX5s{fSM4e#&Uyo(}I10M<3wbw5T@sbaB`II==0$H`hV5 z$MDU?lQ4bMQ2g|?SqMe^xbw}8h$rJ5=GuSWsNqJ9F1*^H*S1rpE(Vl0vePG&lA-$K zK6YVJ=hbMuEGnz5Ix}uG5yyX4?LasjMm#AUW}VRl$|As($5yezvBH4+FE@rGZe9g7 z%J>P6Y}S11i<}Ah$B}>np+E@VI$;K49WAUBlbrNZnowE^+`pm;NB;Z?yu7-aeF8K% zP~ejlJ!tIHeX5s{fZD{$)+i0vpQxpQfYFjH*tml`jZFRAAKvJ_0P64yIc-)QQ+G5BEN^%&E1g<$1weMD z^m?-KQg(had1=4>6D!u^{T*G%4~1n1F@VnI7Tk2sER3!wLqf=Cx&fCP_LFEQCVjOc z?9yrO1#fK6QEoo6T+Ufoh109b(bU+??WH#IrYF-xJWhEV3b4A~#0kHB5udyL1+3dy z&nd`BInpjaz0qo4?Nj}X1a!hW3Ae-BuQ_q|1>Sz$jR|h>Ua<0>o_4>pc^9_V?7^q1 zMxm^zh@CvtNzOlLEYKOlzn5>4PcW+f@J0=36jVYmoDy6v${T56x&7yjT?BRHTq^RI z6^_$7f+v0&;V9$qp3Y8O|LA)Nh6;Gek1}BI+0}?kj~Iz7kDr66$`0%saJiAb27Y1M zX{sU+Q`?<0I$ck4BQoGQ3>ZHA=?lkUTwxq7ZC#vCf#MtF)XhXPoNptEAHPUbYByl}a7KDTEb=2*rxH!bO` z&&{;z8D2Y%UifGmjP4{(s2ZElcS)7Z9T#=1sMImiL2onPs#u}ps2(@&|b=xhL*s(j(EFJWCn9C<;Rb+37MGfp_L z6t{i;Q=BY>Mojk+rtflNjcL-U$V+soQ&#v0lnmN)lN%!gp56hi_>8J3$K&5Q1r@$d z>}l(i$G1?<_N0K3Ot35%2?Ik4^N~aWZhc`h=KttX-1O)hXliR?evzA%cw(u6eWOq1 z=mc~kvYQn4xr_5zJG@u1KkH_y+v|6Jw?EgL7wpu)ve51|f`4`0E{LKa7ET(@5WIy` z0Aq&@#hmdK_;B-XY_6@BQE=(U?ev;Ay!@8h)uwj?+7|y(&FwF5jMS8av1`YfnsSgL zpr8~odnqX?Ike+>A6Gj=(kTp zAQYC7bg9U;fs-4}8Sdyh4~SBt6nvx|oW0|XTaoYq^6;A`4w_Jj=dL>i;|tmI_N{__ryNU${|9fc|-TN(`?PoMIz z0GtFk8RZs*wBns@drGXD&< zNDS=tr$8AWj-5ITW=l8TTDMbjA~g-@BX6`Po>N<^l@8$UT0r_3lvb6q1xK#~PQOM`MX zMINvcjVBN?Oq3UwqNd%CEC2pBj=J$7yt%p>VG15f#hU2MM&e`ZQ!dBM*dO*Xp`AoI z;k}5=2Jcpf8@wBC`!h~>I}RtaEF5x#Gw@zb13DYparn`b5ekNQ{?ErjDf{@SX_fd{ za2a0us0NoDJ4c14iazj$SI6bG)caRo)af?X^8?2lxn{1G8ddHd9!(8De){hZFr>H; zF%^kSZKrJF9i35ZZf?iw9WB`15=CJo4<-3Q#G^5sJ7*|vJo`}07&D9=ew-;N(|j3V zxzU&8DuB)jkhv>p;N&LAmOv6C%FFQYAD)BX{%Z+te0U|ATLUPfQ-=(LJ2q!YBHl4= z2}A;ZG?t(tBe^V6sCy_2WmhZij3GXvzYaWWH>@iFx&7X{$#FkTGv(ny01?^f(D z&8zXwVy0(~Q{Zo|+YY0<8%InTsjkZ#dQLuf;z$$>E5j=rb|IdKA{YocUQw=XRi>;w zz0#J}N?HY}Wh^n!ypbMkc^Z(alN%VopI_N7mnHR|O*H8go4jBULkmJYYBjWWmEXqs3Q3BeR0{OHkDSiWf&{{D^AQC3(e9jd8N;Jx3c zdRPUpKWzWZHagkioE3Y)XCu_>yPHYpgmI(Yg??JAW=;sazM&Q(49=0yPw9@p{ZwE` zNeO0EmZN${GdAs{ecUwf6n*3k{Z!F^)ai8q5Ygib-(TLy;YlaZkdACJTcu|k$vBXp zzo`6+$06b|nDHn=bf74kw{&)3f{!VCb6p)a?QWDO1N+>BX^`bcpQdCxWW(|S436CR z$+2nBN=O2eMi0mR*Pe@K{^w*IHa3j5hB~x$cFC0pH60M_A4nn@SLZ=iRN&w5H{tjj z|AD5~cJ?vIgsC4-pK{p_>?O>082jkyHdWA{_G?bYdrd8z&$^jGx(=gUlP3B{xV087 zJL)mFvJ3@z(wuY40dUyVku1lreza9$PQAF^@y0_wF{M+E_qV4#(_h|Lh1Tq) z!%BLuX=DA1VV)o{O#p6 zXlQL==OLNL>EqF0%8lLxM3$4*yFy0EsZd;F5aq^tTJ4xjrBjnjnyGX4Tu1(al^c7$f4WNZ z`MgLTzVn&ISpKU^aN&Ys=x*4>78F@5obrv8RRZx?0!0<2xc|jX`1=dXIeO52f63tX zsVqJK?-8We(Qa9zmfY%f<3yH`z>^7H@D56qhkyB|I!=}|Z-P_+*61(N;KmIr$E4wf zSih|iTX#397K&c-M&T3*J|0T0Dbt~x2{~egh4{feZ=toLLnR;;d$mvH7zt=kbL2*#Q){}-UEDgV7s1YY?D*YumgoWAd$c5e z(+Ex;{iPdsAXpN?tZ~C779*X0`pL_J{vhU!9}2Un4a+yw$h&Dvce(OLtp}TOL``J_ z=h0uiurwO_&KoNd(BM&s(~#?&fXYTly@|A}JMvIcx^nd?haxW+<0GvE9hDWQC_rHA zjt<=O;&S$*P=K6;Xt3l)U82)}X)Qh>r!pK+m6lGqH*#b2N^aco%hYipKW(g{Y{&_G z_Jjp^>8IyoRHzf39Z}vs%<0T|8$%NL;Sg$SJ8;jlD_8;0Nz8k*PxW#;uqMPA;bpH> zWP$f0%5Z_twGs9|HyAf~i*~JXH|=P^rY&`tIi?&33@ewfl;`$7SNQpphqK@+h^;f=^q)8Cg{w5zG8G8bB@ZBFOGH2KNU1HiKbx37W+YCVeE?!D zT?o)~Ndsm=z#lHa@BZ}xI-}jGsL8>W8{Q7A190@FhNPAG$QWd~$zI5k3a~{$)2VsW zCg8cBU5MfNQAE3A;J{$^T@cL)7~wGPdVZCfPEz8rz1OF5j0AMTxaG!kAK~0bXD4ya z#(J6c&S&j#Zkk;GwtuEOTC@Xj`NnO)o^~vlJPHN{X|M_IY^ya5m@{r9M8uD!Yq#?~ z9Y&lRZ*270^4rT#ndrizdLVhD@yWwTa=-mpjC$Odm4@#Y6J2a`R5qH#Vi>1ajkz z)efJIV54O@p4ZYm)}C^D5O~8Ozydxto25z0IRY}CvxJF!17rmpUNs3v9XJwQ?H%x| z>5E91Fe3T*%~Kz+Z@_Yj4wl@o22f2F@Y6D^o&tEvS?+QpRAQK(<;M9Q?D(x~lwg#U zz~X~v;HxKBp|iP(?~-ZzUBO{65t~J^;5*c+8KoG1wSDc(;=6 zMPz}e`9B?KAxtb?yA3ET!0bt*`BwUFJnM(<=oKZUm{mChoegbRwMD%+esj68N5h9w~D+fbNikvd{1VU{TZj3(-WKpD|h)D*wxU4kG9rh z)QDnCRslfP+I}W(x$bLV;gk_Dx?@BR3vSKF2(CGO9z<6g#Ygg^@kA1l{4id7e>+}TzMiK6mLFx{ z<%Tz5sbr>P!BBvbw4VCTn?8V~#XFgW2{?Z4 zM8J%)5+enyV;2&sa|h8c-dOk1qugZi0XVPqHrmbZ6hjX1Zf2Diyq!+34&HM_mv$5_ zTe}@bXB3C3`F|>w#N%L5?FTq${3!T}!+2-oE_8Ku$(>#NY%aXfg}%#F+H!8L?D4cn zK;MAzhF>{*%yrO_uyzP)x>DiC&gUscfI?se&RaYOlg5-F+Sv`CQX>2*0=W6USNR#K zLjJPGs0s?87qKNd_M zr|uXYZB?3Fp%_1M2*!;p!}gj6tlhHRBR@bk-YBafm3CU4L~C1}Fb0@6Jn`XvFFUO~ zh)6jFQ)GMdQszc5QJ7bND^EQLW=DsFrpUp#iC|#_FT7iWB`eo4e`U`6ftMTUJJH9g z(T+PAtYD=C>pgFD$qxsC;zIm;=~}jUNa^)1a?o9FbjqcYf)FAB$r~98F3(elgjEg& z@rj89v|so7uHoJAyEVXx*9|^fUAf@b4lM(%ZEaY-wg&mb3NUM;asXx=lbw!(?$XN( zh4V0f(kP&{3-7Fz`vT<2LAmfoeX1CCYaf9Ao$bZ;oi}=S8aV=W1|sr!OP@ow&SQO& zr9%qp(i7)n#IOQHqj5fLl>8Wep3jEx^9SE>!81^D!;DTH1R^*h(Cbv?TzMl>&Cid7 zP*57d2OD?egLPZ1gfO1G_rRASH}ZER6yoJUw!T371msfisER@bDE3;P${`ZaZhB;c zu@m5Qpm`O$w#-KGz()e=5q5R;PBiUoKvm^X3@tBJ2Z6fbO~;{^{1(g@!<}i#nr*V? zjKdm!FFEj#MmfNDRzYg_I0OJ3^0AX*8z?6|2g+bN7y zn&h;!6)4WbQ%kGy_NtBSO}DIofsz{)K&A5m=(7P;dXv8K#z-w8mK5fpq9`AtD~<#vDf-k77M^>{_AU*LTnM44L;jQ z?S%I-6?296(wr8Y?!fP^t%lLkfd$jXux+1y%#&MN<#pZ9=hJgV0lc+#I}(YQEs`r2 z-spf9xuz{gF|{_YPo^DU-bfz+MeC`ISxE%`r85pgQIUaIERjkx z&IfClA^hUO*KD)vft4HfoGbqYZJlN;roVr@F}O>jFuwr9N(z9y0zCNYM`))we)fIn zXL~B{a-(&~uBLW$b{I1jn$3V zvb|2;P1}){jW_BS?`hXbE_H4@H+~HSZJupx3frq7Dl3w^2w z3&1|7u+J^r=2K3B-R2@*c%68%!J`-OPTcZ3y#!jO>hA8u(ls^kmF8p4)B_|#QpIpAF?ycNt5_JrK>{OC=d18;m z+&8%q>RpVdgs_POe8pw><%6&ADi6tqe7DZ$-DKKXuS~N>1JCpCZIpY<)w>s69k}F# zgQWsWn`#VxpUScs$T^2`H>GofcjC?ke{borH%#Am)0CF^zqWcOYHAuVdF*hE8$C*j zjp0^@JMHYeAwNJ>C5%`CudUpWV_WqZazIyHX6U6?AulOYizvaf_pshJ6 zrE73T-rVsUw$Jo>CyuD#rP93od~Djab`h3y+lI&U%WL+zcZ> zUs_A;oftc&5N97dPbQ|-NhkJFpK@^mdTAKvZ|@G4sU3R@j~w9LOrC787Q7C;c;kZ& zFq%7YMAZZY0zrPcmigt@Rwrf&cSO}Vh{6zFd2bUEiMUFQm7N|rasfLUT3FD0oJUq~ z0k%Iou)N`^Pl`Ob|A5SBO0z9HDBa5Dv`d!-QdR%5gie-Rz-1tp#&| z*S|A6VmiE&Q1588bo{wQ0;a?3Wxf}euZQp(STtvf1J-#=w$r4O&ucuhr;J6}s1mH* zyc1it?NCa_i?7mbR<}ELpi5w>|zUA15X|Pk-b_ zj`kEwZ><8T0IWa=n``&TG+{>HgQ+S%p78z5@QDLYAGx?gpH67$D(!{om(9OIs`6_^=v*Aw@XszzLG#)aY+lbZ)rRFEuAD zD=EQYQx9N2z#A*qr$t*yKnpm^Bft3;oH!XWfrgaBNegGeBX~5d*T85z=c#`M#b3?PsjiJ5{Eh|D4P&6e1l6V(r%Lxb&unV1x=02pEVrwP51N0PgE9)BQuh;{jK-Cfcm-^0zs8fQ-C{aFfWX?TN?53 zOK74?ZN~ z0>Q!}e6%BuBfjz{{PX!`e1fpwPX~ZX3yTy5=TejlI!rHZ1%7qK8XWh{J5bwdAe0|Q zw4oUX){^99(09iTVr+E%AVwrNmx>-dE;;U8X%7vJ58#-=7zl$XmjYIVOW z8bd>KE83%R)Hbx?@z>wOpPqOR!O|j*&hzn35s9080fC}oeEHY^!Jf_-792Pc`QZS9 zem_Q5lp+`i=ENJSKN^dots{mlwe`63skd?OOB)a@F5-Yg8LCghOCh{@czZ)L&bjU` zTyx&h7&WXI`JoU;#g!BlC=Ph>Murj7uj?*48jroQo)sgVq$}g5O@xZ_u(rMxM_u&? z{LjV5;jn|oqoSyQ!)_}|i`42%W=EvYcruRGwl3^yZpBN>*W+jRypApr=6&=Gp_VPl zVhWYyM5^HFEvkRKJL#i@N9Uh-lv-+)jkkF9`BbuBXHfs}J1 z34dWBc1II9|3{DFFHbMW=T4rF#j_`3_>f{1GAs-2Bz%A4PTckMGTi>3J*uXR=XGj1YV|}*Chd}iCXV>x%~ZHSKM$PP*w_b#AMJ)afzyea>m=WwCbI7P)BDgkVp4vQr(4h58j9=<0@qb zOFL1+j->YyOOQuz-~|@=MsNVCP?I-mCBR3M?9~YV}%}A41jGp$HEh#)&I^ z{s5A^drfsjHdJ&pp4`>O1GF)m6$!@+#M`)@+;~GKXb_`HicnHqh){k3d_KWb4A}%_ zaqxi^vOelheqR~Sdy|Q7Bsw}UqBP`^$W5AizpLGdcf(Acf|RI za^|2|M>mF+`8{y!@tFF00Mka7B3wR#)3vcbgadYr^uQ$*3qY2S-zeg?nMfku*^RM7 z3)E?hde@*g59P7o0ykW7GG>f^4{xpCjaAi+=x8LLf*%NnflvSl=do{~IhsWCrZzyd z*_uG_($A+WnVl^-`oQ7%!RJoIv4_rNIw<+4?EC}Wr|e3@{^?#^EC44GXXRe^a)ozm ztesG|d~&X&XMxYePjgfniC1sjh=rH`5^b$rc;)tQ;;8utOAjokzs|K?>DM?Y#qeQw zLmjHfvZ!mpoA+FY`3KMBy!wPY-Gp}1?#2&iJDr=Dd*Y3p7pMDqv(=#mEpy+8mFeHf zhs;sPW=P8snv`H#D{NMoax@ys@=AwszE>~nFTLh;7@JjOYlr+dyWCjqkiWLo*5SSN zJF#^24y@c*iw(7%*wx&IjxMsS2!>4qfZ7r;P?R6U>%4A=y+-Yx;K?iOd~sgpjlP~O=Gh5v!)LQ4DbAgo zHO(!}IQGh4VCAxH_`=1911KG^U$fwo%QIh?JkxoY&7*Swb4$u1G5g0$)Mj$6dYZhKkOaKRtF!+>%w~eF3$$w zw%7(*NwS59>*4>^8iL--pGK5!wLHbx>d5xPNAy)^kx$v%lQMePy0URu(e0E0d2XWM zHG8>4XO*s46m`w5sB3CRLt6}O-E^jdKwdb2ilPt>7*dKc!%9+q0Xj5qB zKv^(SnPkdc>izer52o`brQ)(%0NF}UmAJuwd}V$0He7M@U-9N^8*uRK(RlUtAE2P1 zKu%3P9YeXdm6yB((B0jIqdxZ&tXR4k-@57~-14o<2c8E2WOBq{4#%hD)w0qDq2meXg!{yDo0OB|MPA(8M?|F zZ>ST~@l2eP-mgYInJ7Z$!B1l8N88X*-H6$9#^7JS{WeCA9HAU(P7A}$jI^7(PG(ze z)$QC|vki+re>1k%cHr1WRft5w?C_DN|L9xrj3gt*8z;O85f=Lyk7KyVNElMKR$p{1OYr?C`z@TC$@Zefor5x@S#S z9D7Cm;*5m9(oYPPnxbpqz*nIhpt<5g9Oen1ZnGi*e`g-FKjh1|9 zf!y&&{sSIRZPO@biTrNb9KB3BjkfA_sZ+#M-UYdH5j>*Gl^Sw~=@FKfE*X!WIFM;? zSqW?asRKXt9t5^}m;eew(*42*!$A-B+yd8aL6K;-j^tS~0|WN2%$OU*U1?dk_{~Ognw*Tbg#w zBgJrdu-alfT214pX+%>SI=i%!F>|_-O)jn9nS)&p zJ^*J0ZqAw9;5#}y@!q;k?DXLgh`ho!q1XG#1#5gcKa}S{%jdPWO<4o#1@XvWS4b=m zD!~TL9)%AhhnApnq&)JABI;yN4F;vHQn~n1zo!YCs%v2cLm6{7IZEl5B2zy@ zIXcL`Xzh4Q&EfTksuYUlVzhR}rSVC5=T!i*;+Hj=G2N+v8Ce162;ldj=jt??S)GAK zQd&@uc8Sezpx=d>!`lO*NLfT91uAw>3B3IF*kcg*7b} zZ`_r$1+V?^lK$-Qb~{vG{*cPrUU=4^F(J(rE~b{NAE3fvPeuX?j-WvlaNCJyb1ZaeMX zxO0Q|D!Jev3^^D`x%t1$8+#cz-UPgX-GteVXrq_#ZqLeVbdn4$dA#`gGCcU$iwOA* zeCE@~;;4o5ZA%{(ZhdXpiuZ8mJ^x02MHv#YI08ljH(mQB6c!e#kz6j%-T&A#SiW*K zAIBW_8@T?O%MgxGB8DV8?bd9r#vkwcC*EDNg)_k%a^O@fo;M4hI&2O?A&McFMdocY zuzvGq{OY!UASML9_mzt=dAyF%cTOSXcey#phpz5!+&`s79U z-E9x!qH|Bg5%UkW#rnIw#GVAeIcoIutlKDK0r(dO=%?Kce}Cm*;N<4NgExjp+xy8I zkycFg=lt%xpLDtJ_T34ebirqRCX@31;>*4(FzhISl6m4AKl(Lai^t;`@bLs)6XMSM z9ug=yNMQW&0>cjzQx<(%M7z5rq-lyoBEjF!{_=MPO6LkxED%!{eOe^qF_BD4T>p9P zEfJY=oWO{MV(j9JM9JJU1x6h!F!XToz#~tp`XnBW@1kq27brbMpkki5`;n&`3v=n}095y1Q6#EkTxzuGz6e>nxc{!o8#`t6WOo<)(M=+2}WOkmtS8M+UA>^$gEp zU1|1!$K2NKx0eZ&4c`06Ywd~n?cI-}G%tk9&pIB#pdZ_I$fLLA!4n#<<=`VPX)qYX zuErK#D_u1AAVk6uTc#N+u7Y;Lb=B{|^s%E+R9MWJZ^-%fvp?UD=B*95?PuS_f`h9N zjl~g(L@;wwB@$iTm{2J*2Fu-ja?9%fyX!HCcmg+Gc|QAlt7~diQ!;tOS&01s?5?lJ zukLsh(-$6$>#n>MewBxC*0c#2H>?D)jt-7cq@o>d?&`9<&GdHbf{kJk2f-21>& z_{NvdM_zs*@&i6JG_^vQF&IADmTE1TX&gR|vIE{&{t-}`j~SE3s8Cx=w@Kmmp=M_t z(At8rqlPdHrFCj)ZNWWHyn+!2O~uJaA1Y%7)G9zM7RR*tQ!#49&=l=5omdnhs~bG zz6V;3pw4&R*ME#>9($2-6b~)K9k*VKb5A{-crpvsCf4t`reDB6TVA#w_IP-`@aNB*)0&QIw zRyhQZ-*y8Q%sGg8MH{D%y71dr_3moGZvw$EuDj-9+;q(s_|?v`PfBV-|z2!1ULNr@9+<+K!NB$%Lh;6?uVYlSAO^xAP~T* z#~q9(|NL|I|5&Rs{gE@b&~9fY-)!?_d&w2PFV4Zi?Nhn(CdO_xqJ>gX*kEm-l<28dVezI){`Mqh@y#M<%iZ&~R_-n=96EG~Mi(6Rk);-X9PA=;}*x%lE#-76B=s zZ~yXkJoCisxaF4b;Qqh;oD*Jt?v1T{cZrO=H{PY?edFmp( z`s(|*?pJr?)*HTx3qN}%>euhWzg}3%bklx>duE!e0ku>m$B-tmH6wQZ@?pey9F~2oQ|LU{sGiAG;sZ+M^xaOUp$BDf9loc z_{Qbu;G5t59J(7jaqnXVd1>Oz+$J?iJc$QB*QZ$ z{Epouyaq;(kVi04*-*U$Mt1@;CLUlr)ko1u;q8Vz>PzShxXC1Lx$U1g{xhfGuz9nY z&Iy&HQQO#x&MxYl(t5DBRk!bh4cj1!3ovo4tY2=nkrB<^@i?M!N-6GVbN`Nep2F$p z9*1vTaUL!>{Zlyel%uhurV&let^CZ4sZ%k6HZ&!oc<@)(;mS)sjW2$BF^r}?xb@mA z@XgE5!PhT78HQi*#w#imD{;uInW!i)gAg&?d&{->^od8}rmtU&g36KDx}#b0RS2|o zbl}Thy#SY=bs|1}{E;~P;K_WXps7TL4n#S1(E^~h0pI=N*|_!#7vTG!I~zvC$Ga?{ z_&;mLG<^BOlVI#=!{l+&ItzyKP`70(e)T_>Vc|hlyb5EbW6xD?oN}hGc@;Mk9gb`E zQFS2U_jaGkoi{n=1aylfc2+EMiUf4x*J+<#eR~BqtgXg`3FC0X@9yXQ0vqZ&d4y@+ z(}EGhhp9DmTjZdc+t`*n2Vkm>SxFCEhz2&6Z!rnZSwNsXdIA5^K{u^YnhW5NMS zDKLH+4?uM3BI)$wx!0DWX2Vv@J-7-#`1L)!0c2ZU3%X-TG&Z*&pAUSHk!=<&bP7=y zs%sk&C@;pS;c`mBvEHl*e2DNNnsVdMviH}*tZ&0fN6b;mOrSd!hcE0$h%(Wz@=N0V zHCs?Q;Q)*nI)pphnl0NQ$_jD9QS*89t=ZkoyZ6S7946Zn@F9_iV$0TDs2DaBMFsiX zF7l0pBM}4wl4i1=&N+E8USIYh{`by@F|@Q0Z@sq(qbo;ZXhjLrNtV}pYpZ#q%Ap5N zm-W@wLv%(lX?&%^BeMd}ojD$&s1W~pc{wgQ`xN}o&+f#C1BT<=Q;y~5WJ1i|$xZL} zX=H;(7IBadNIZU3yN`-L;gD5L4OdT=BDY48r?s@DvOr1CuhtH`>!T;*+$AMr7k3I7` z9((i!$?W1XK44>4eG|s8BGF33YHNE(2lljeprk0DJDzNijCdrvRjmn_F^x7^7q1A6CJ&F)5o%ga$wUXr3D6wZUsG!T!= z;2!dBlh8i#;+y!~`B!1r?s}%5M(MSiw%~>TEWy{lbPm=$_ZO^q>2|Do?QVSY^JhXd z?m=AxjkxyHZ>&-fiJ&kNLU&9Gyi_tY_x0nFYkz@@uDOZx#Z%e3eK&Wk1BOxVJQHnQ zomjhmD`rkQAeEf6w!RtNjm?;wNKtUcKIw{|TftJ<| zbhNai@_=Ef-27X2)+4#Q4hKz>=Of(lz`xPBtqITHe=~N!elM0h_)8ekZp@l8#(KL# zVAJ+`gohMi#8AqBEUC#X2HQzP`!N@KKGqlQ90=VTz<|;^0=&2 zn0M}SCn)){hzM;3VB0QHgH!VfNQTzmj-gt%!Zr*?BQeZ1i1r;fY-$5XE&xu*-? z`NFxFI%zznPZ^I1;|{<q5Rb2^e-PMS3l_OD7RFcZ)Kd)*cOuvDLo?pU=Dhu)=SYN#rSO4JGn0eeH zoOQw?Hj~LL{>y{^fiIkgA6#`IrcD};*)yhK=9CFI^uY0)@V2?5Q!N!*ZIzwCL|#E5 z4w*g{9b4=1@G~!SyUE#j|I;sH$+Jsv<29FYW?U*ke}K;#+(S!xejlECWhvU%R^!~0 zj!NO&QP&7xR}9l8%1*hfp$YZd>#=ao%oNPVZM7&IF&ven^eP6>+}cJtt5H-?pmOsY z_~YLnX9aoY2}d%_()TwYIAREnnO}u)IE=Seu7wdz;HdeuLLhx1gnv^_9VU(&gVK^x z{#~M%{<$l24-+0>3#UU~;VzVSj$%sBeY6hHs%T_QaB z6oJvFicekgZPC`&%E2_Ry|rA7o`1H$*b~LDgH9L!dhR6-!l4K`89`=>`i4ev%%#@~ zj6Fr5>KrlY#4m}7$9+zWJLYnMk_F=2D`gN-?d}F~)Hz=hs60{lCZ8fcSha@hrg}O% zyTpR?uMsFaLd-bzE8@5-zArHKWZ@rsq3;0;7)=7kHo(ot^Fc z{6kMXBPtI)PhjF1V&dY@inSXy$mqIcJk?gBnLb}xvP@vi(E_7CB~G~Pdt%Wg*9ue| zCXTt_8=|YLQ^eyE?uFOh5-6E3#vXQ&xcD1435;GWrY*Waw6wPJ{dZQb5@Q#BMxgX? zaook<=4-#d>tTVyg<{B@^Tg(@HRAu>@lS!#CkTu?McjV><0)F6dihO(vBwMl%yYyU zU%EjYd+GND^5=@L{pdF`Jj67`CExg&KZMW0*i=8g!9EW-WJA)MWX7Y zD?~IJ<-jga`EreRGt>VgIdeQ?YIqfhlzHC~7-Op7G7fsm{7e5&(VO}-y+1Y0rVH&J z^rY}+>r-jZsJ@zd&b_@(UOI!h0-5u#9u!=LHuAWib}JK32D$+6ez*k_#*Ig?zz4rS zi2VFKKB!}3^>#k#<&Xt4&{kWAKp@N`zTIT0YivgK_BtH0U^*vbp~E+5eok}Zc}LF1 zS1&o8;cDv|P}dm6ocUFVwlp9V4yBxg^!M*SU5~H-6SEFF5W?)_6LItMvW5%4R5Ro7|3fF9@Mb)ec5V1H6wX8{H3r#QL zCT2_;g=HV?f-l*Qn}6|jeE+J8Q*Hgpw=c!E-OYIRrFU^~RV9A>t;_JhOgfhX#>gpPZwmrE1%FiGa3iTvl zu5y+sQck(j@~f?{p3ocV)p*pN`lai18e%(HV$l=l{g!WKEqlSiV)Lhoa<~QI^ag1Bd0T;=u9(KwiuaXPG$pAIos5sm2{1A z0+ z6kXj>$vb}_wK<7en;>G;_GZq3NZX#(d!jQ1*tZdjvGeizKRk%r{`4rG{>ROjJ#!km zy1P(PSRkhc@iGgb`1tV7 zxLn`&2l#ZMd8d7uPhfue{{Q7@L@jglk9HR7NJA~8sqAkgB`U*H+Wc8(1XB6=WTqpP zThN(2L*-J`rmr=77HT)XnY0)f$^ zN2lwE)D*#RB$c+-)0t^HCAE5yI^lzSAnhrITjx?spUcQ|)nvv->(!*EYLd5AB1)ms zR%sYYB*BR#?XNt23C>EPB^`-!pTCusnqQJIP*zsXbj9N&yg+FwtrlnrBf+rJI_ZNu zDDkFDVW#o{80qPrQ|a9l9_{xSIbsyoOVNh3YcVw!)-;((6qgh;Y&4cYetrQe)cIR1 zs9F$pds8XGm4Ad2Y)IZ{rJNTIWBHoR2o5d7%&8MN9w3$|L^5Gw#PEEX+Crr!BLN*+ zUdHhW)P_ht`6p~|TBjIeLDV_*Wcm;NPDn6|3iEN(AMe4A57y(shklJwBS)d6w1X`# z*<`g8no5(E?%meBmV8Wip4kr;mCx(9qXwfCe6}PqNS7fN6K6fP_sTMB6K>6n6ue3) zmijL5TirqngsxAech%|e?0y2B9?zZ*UO$(56EYv6>NTl)?diy@mfQUY3Kz}$Y@FF& z{tuUnzV<`h|M;7LKZvhhdLn-R<8Nf-*dOR}{VjjNPkwYe4nN^gy!OxEaNK~-VYt71 z{KfrfFrD`}t>^h<-$>e z0UrXXLphCoh&Q_Y_sUInmj8E){|4%M(TI9GW4bvyIjXwHT9zQBKyc%y%% z<1_}9H$EaL;Z#Ci4JGO-5T7J`PNe%c46MnoBg~IpK!U!>3DFj zV(f$PZcNAqYlqKP+_dR`3vY78jX|b;u<;AW^8-c8VAI||c$eWd7lcL@lO|im&U)Hq)$07*qoM6N<$g1XQ1LI3~& literal 0 HcmV?d00001 diff --git a/data/icons-1/Mega Water 1.0.ico b/data/icons-1/Mega Water 1.0.ico new file mode 100644 index 0000000000000000000000000000000000000000..4012786aaf7d31ccf7f963c14aae96e0b80b9f39 GIT binary patch literal 6 NcmZQzU}Rum0000A00IC2 literal 0 HcmV?d00001 diff --git a/data/icons-1/fenmian.ico b/data/icons-1/fenmian.ico new file mode 100644 index 0000000000000000000000000000000000000000..9a3f85cee2c7d331621c02d6382114337a689ecb GIT binary patch literal 14922 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 IM6N<$fAe>L1*NC~u|{Kyrl?6Y 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%0DDs(0!sYP5iBA0zn?hB<4A|8}DL?`OP>=b;`JK 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 LNkvXXu0mjfiF&C9 literal 0 HcmV?d00001 diff --git a/data/icons-1/liucheng.ico b/data/icons-1/liucheng.ico new file mode 100644 index 0000000000000000000000000000000000000000..71a5177b2dcc4fe456307890494488d1c6fdd173 GIT binary patch literal 13993 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 -Mxh(;vGl$AEMdgU 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 P00000NkvXXu0mjf(nv3j literal 0 HcmV?d00001 diff --git a/data/icons-1/logo.ico b/data/icons-1/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..9158369d472deaba29d3d69c649ae79862085982 GIT binary patch literal 6683 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 literal 0 HcmV?d00001 diff --git a/data/icons-1/table.ico b/data/icons-1/table.ico new file mode 100644 index 0000000000000000000000000000000000000000..1a46946426a37c1ce2ee75be91738a73c8e714ec GIT binary patch literal 47684 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

@gDw3!(oDM$F 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 LNkvXXu0mjfF)8s0E58*APE{^ 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 literal 0 HcmV?d00001 diff --git a/data/icons-1/演示文稿1.ico b/data/icons-1/演示文稿1.ico new file mode 100644 index 0000000000000000000000000000000000000000..414c7a0e36716ae26a6d602f2bbc3411877dc89a GIT binary patch literal 11192 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 literal 0 HcmV?d00001 diff --git a/data/icons-1/生成软件GUI矢量图标 (2).ico b/data/icons-1/生成软件GUI矢量图标 (2).ico new file mode 100644 index 0000000000000000000000000000000000000000..8a5899459709199bdb5fba1e950523f1e5bcbcdc GIT binary patch literal 6636 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 z zZG0XdTAG_6xLdINky}w%Fo5PIZA;32;jMLe{*6s=^y+~$8@bMlx$($FBSb6kxZUu2 zyzo0)@$j$aVDh-(VjaY?#cm-s3*voPvt>WNIo60{bxy!Tb~JhbVjCeh29YHJJuS(P z`~kVRrzrzy-Si3gII>=B$Ob;zb)%~2J(hg`>h1EH0fP( zJI5dJqj1X2C@SoW51;>&#_2iHK$wdRzzJ6_pf}iVe*G^=rR)0$$E)jb;K(Ud)->W& zvl}h$0L&%>`sSu%R6#yQ4DHtjtb)e4(i&g!xSvx4omc>%-Rc@sF%39=q6T{o90g}K zi?{W#5K?*?u5=BTXo!-Iqmr((V1_+*O%_?_l8YyQ`{)W7`5?Bu_c$^$GQ@N2xR`=S zx^u7M_(_zUe<$W$HVt!UPlLzjWdej4&BV(2?E>Am*Vlg93OOJj9xaQbOB><)#5TqK}TWC(R>z83;X6 z9{N4g?L#O0NOhyt70VK*{!s0RagX4!n2pqKV6~d)PR5`>&Nw8OkFqRYUjVJ%0DL~O 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 literal 0 HcmV?d00001 diff --git a/data/icons/uitubiao.jpg b/data/icons/uitubiao.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d0f8a5a552c1f5479e0743ed694c7c0971f92304 GIT binary patch literal 208783 zcmeFa2S60b7A`z93^_;1Im^JzkOc(EIcF3l3^@)#kQ@aRMRHKd86+qO20$c(N|q>s zh=?K*L`9IlK}@^eUDwt7-hIEl+tS@rU3I#uPNnZVr?yA7AA(3!6;%{LU@!;-2L1zW zPjkpC_}JTkKq@M{ARG_~gaIN0W9@UQ@Z zut1V8qfPq)B zv9O77aEKTwNGTZq@v+?mBER996KMhdtgB@pqSWT z91t$>vl8HJ zLICB6LCOLpLma}?A!oI44>{NOk^-4sb&E~c5=&4Py*#}=1|k5WgOFm7f}}y~%C*op zA(=&K2gS+mKPA_{pd1qcDh;eY+o_fIHl*37@Vs&7sI%@Z*@8w-1=%zAYoAF^D^E>G zEI;BKNVPHI73fN0x$k>wzizUhCeyI=yhPR2>GSZJGsj08y(-!sod73YD`yg4ZWJ_N zFmuaKJxyNCdePK*uEOM~cAKw+kReB%5i5Ey_vWA%(}{{xJ>}<8coH=))y*1GK+e(7 z9jKbg2{`oX9o!wlL6sU86Tr{L?q5Bkd#^^dzFqddMdg<9s6hejqT|hOHp**fw@lts zyrhy8n#8WF%?~OMRC8DXeTzL_G%RFW6dTf_j6d(9toDO=hw@Hzxdo8Eu`(5p%nCSe^rD&2MfRqxz-a=j*T-HzOngo*?fZJBI#Z*BYuHO} z{_Jf$O7YvJPu?g^$7)S0Q4YyXp1pZ+OIE7~9z=5|Y${Z)Qo85evWZWr#x|&U8?+!z zAeLVC;4RmLG=Y7NsaD6K4K@tnlKLYG_D;c(@96L$N{5k>iXQ40HxpMa4j>M{-yEXn z-O@Y|nwFTQw2;A6G9uh9saM|Q&Yi^EVdtf`b!8j0uk7Fr0-iVVen>WpQ;2BA!`=S1Dt)X+#1R11}&)T;36|O|O=G%ybQo9NAap~q3%VhZE zZDv0Sg;mY)-AuLBUC>Z>P>a$vq@oDBMjR7Fw0UA6GOhgleHrz5?X=UQNRo>wwcU(L z6*sId%-moZIe6V=VC{$!^ig^Hu;}Qcg&X5<)#gs}*7vJ(PI5#Q_GN$;^SQ1BdQHt? zK+X&2*02l>KM|p7@p^hDf-w2vMA4h@#nntcZQJP5q*RU$xA=VSqIVjDffJ0a1L|2# z!C@|DxV)>nk@-x%VpCY2V%{x-(vyidyXNE{i&d*$e|MMm$=jKf{>|mr`ERFLg_;ef z@_eUdWtLl=f{hCl(jR4=P>WI17)O&2ncr(CZE2LWNDLSY6Fac~7PHT^eb7A$*`pV! zIEd-@DF)Xc&5>cazkdE;Pyg5}79K|Vgpk4R)#d@gdyMlXiRRIPBpx}2GV9X^6Fkr^ zS^>*4X%~Hr)1I8gDN1}wxnb=)-O~6ZWLfYY5vT1%sXmI!taTS86{8;ApJcl{=U2&g zhdo}SQzPErsm4?`z8W| zu8xP@>wJQ^l##)9+x>QDTmZwd3s*{qq><%IV)zkT{281)Q)Wt9OJMg`AyK~krjLx+ zB*Rb`?u!iB>lT77oVOeHp%tKo#L;KGJr2FCGAvbHKYI=Co5q2D%p+P8Ta{@u6qu4I z**;0V|1LkpJr6$ruc@rI8o05c`yw5T>Vz)l2EgO(GPU&fxVzbJ?mcW4L z)xB29v@{t_;~;k`eNijXuz;*kcTA~Uv_DQNb>9dr_mei9%iACl$-5!ubJx--O-M|% zXZ1$aZC)=pdofk|kCc-uJ+nm5sCsb9M-$Pc7^HFN+VT)a!17+mmbQ$~j#g}v&tHY}O2$kWXd z*&LFltc%U(QBmPxz#V04C(}3+BbtmqVBQ__R$mb3^%V)#r;iQdIbAQ(llw27B52jf zvOe66#b9nmlkHr6*&qbG(sz2PQ%kU5oX*Kx6!M7n?$LrkNBtuS*pcN*zVnY$$llvq z9MULh8#8$RY_aKH3u|dofEHnG0Sv)rFro6``aZA4Yd6SDahn0Zq7Rn%|8wf zK(60>;TmMP^@ej9i|S-ec&Po=61h6R+o$lGn2mxIQk080K*3j%GRdP3_vcemI&c*? zNJ*uVD+ZtLPoA8fHPD@w^UBmHbkIjWuHo0XmLJ5WbuT#Pl>i^mR4PjHB#h0BV+~E;eXKLi{Tz`rM zW!mPIX?oWDoHpJam|h87-m=TYeTbb09H0?`^~g!j#uQ7@T<0!&K9Tn{%_!Q>?RLc- zevbYlIJ~%xY8X|mh~-qKM394hZBp%;wnkGG0TFu)UjIf&KuH*~o>LXPBv#yIWMIfD z!yYe#@mf;=DX(PRLrXq-2-Bgqa~l*$9h>mLhJKi&ncu*zQ1y^*#MzgdBjx>l_b^Oh zK9OY>B9v<;bIwLjqs{wXE8<-qi{aHGUL_t6AsDL|AiG)oE*En`js9Bc)LY{5Xsx>s zmJ}x7UaDofr=2PdrF@s{8bitNPgyOsBU^a99M+6UtySy}JmgrOuM&9CBJ88p`u=85Lj zm8)tVCO>{+Qr>v#F@DDJ>8oi`cPNqL@zMNJT#0>(S#gPB6_%K<`@v6Rs&q4+7H9a} zdU+FdDDxR%`B?o^muV;WQP+mZ3^#b>s0v|i_X*vMjEk!t13`QuVzWg3A;*-26)h#D zRyQ1Kh{)U)oXwr-#CkFm3;NB9YPti>I_D%Gxtu*Edt!l?Y9CugAh9DlPyQ$ayL|kb zZCu?g{wve61D?T7*>xl5edkid$Gmh2Re~dKV#%_@Q(Ov~`?D^kjLqVYwLGl7&`Lk9 zb;s*`Ct;T*`*76S$lX@{wj;r~)p(a+jX}OG#$}AGD)?mzu&Zw|w3ut%Em^HFT%@Nd zbqZ19ebq@=H8dIxlfL&;PtoL&Eg|rDB>YP+h95ugyu$jp=YFeKug5*2r<~R4V)1K{ z`!yx=IIe_74#y>im$YmtxgBZ~)t`yUdeYg% z{~kLX$DP_vg|ez3H*Pag?Lwir&ch_(&Bl0U9b}h7sjsF&Nr`EicPsQje4I|v#ntJ` zx_YUDX_<_h>6s4BmMFd)cXxh$4s>X7ju<#^@fu|>m*YD`RPQQ-ceFx@PH_@u6{M`+ zG`&y8*o|n}eN=~zl5p`k^{o0WW6N^QVhQoCu)+Sb@-A8V%BZY!)_Eei&dkU0EnZAl zuldrc9mvW^n9HM=W#K$-I1`x+K5>-K=4?3H#W8(}Y$aBsqc8Qw@O(b(Hf=kEEk;%5+Neap+;0TMf%oWI0 zGA1pm@e2*)ik{{mz-%u$)cfF+Q3rXeVq|)+R7^V=oqO&^C${!RLS)HcOd?-et1T}a z)ogRbJ%!qRPCsrziur{aT!2`zljOj1%tpXlk@Rg-OUnx4$A5lb9TT}&Ed zHeY8eZrOO?f2T&7lGi}?>eJp5&HVel&*URJ%(G~wX8PPDBo-|~-q6dj_nK!sm6akn zA4s#Dksza(KFFj$XRNE<)<@4%5SN`TI@Oc#K&>Yi1oWYSprRFK^< zTOMx*cYUn;(w>hzyZ4>BXK+_dcbIWX9wS5Rsqan$NBE{$+^aC*y~R5>eBfF1(HjTn zZ*7C<6LJv^nX5z;k2cC)tR1;dH^hA}#Ka*wP0VL4$!#SqmG|6!jTYbgPpELuJjB}GJz4i6I&rifR?J@NxD>Qsb~AJS zUeC0C=(>7Bs)?Vlyl>>~*6=JA9xNH7F2Xn$iH=%g^aW%B`AU3Qj*Ti#nFwPE?KY^{ zNY>bUu{OS!N;PUQgFLWP>`9eiN9SzUBWHoh@i&ImBFQ4zmYZ(fLUq0knZz71Li1-T zQ_B!aLH*VT9v#E1ThZ}@$&Z-5@^=k&$~{+nSU9-NW=4a|z%m<-p4Mh2@CBAPU>Kg1PaMt-$=q{PH_o`zaP>h0MiKQc2q!TNSrfo6;u zQM~;WK7~kBqQsGIGToz=YJ5cpnhEcwnAPSzed>4I)#}vY?gaD@SHxh~BNI6>?EFsL zOn%)^Bg}#>yy4`ge%+h$Y&!c!rmmCuoYgO`zfEDA&P3^9V8b`+m~&&IZn0H0gWEJ2 zPxsvPu~PGvk<)Z@Dh9^>!d*1FXH!cAFCQ;}R&n3KJN>*Ml+mlO>uyqYB7YOzixCXa za~n1`K?$@dtw-&HW}?so*TP)3K^!SI=Nl7>)2J@!7TlpUcCqnlKcb4n32@tDAVRNY z5ZVtals_ZRpk>tPx*?`SAnp$GpRN`dx^`0zz5YgDZ6W*(3GX{)F zF|i7_ zSuyK+wYFC5t(6u=k+!1N&CJ=He6q`wtwtt13Ys@~&rqzKnQqcde6W>CcX5+s4%HHy z_6$;NSV)EH?w-j2YlShZ%Z_o_yB1;MRT;^GU$!wtB|Ue%d_i-wdSyw5Ikv(B9g8)& z`7Wie+Fa+jmS#H!TyY??s zGmPHEr46&*2E~kTgTk5kTr><>RLY;=C91lp=W1mcUbHFI4+QHqUo41z0tuxkRKeu( zqqD-BzTq^QKIr2tSK7HbnZ~Z1w#KefoDf1s0nsjiB1nnUT8 z+m%_>0<)POrz*W{yva!uOJqJy$Hn0YilPJFT56d>=R*Cv2F*E^A!+A|UUcO@=2iE) zRiM1aac$s5zEpnEbCBT$79~rtls=qN`#4fxuoa)jHk#<32CJjcG?n60HUGg-+=X(L zt9CE+3il}poyFc?Y&b#YfH|+^DpBs#+tw^7a>XkOa#A&Hw5$8rsf4#+HOG)XIujMm z(VNxE>oZ|O1J$eb_=0y`*$erHi@b2oQIYE*Z_QD4R!1Z(luW+ic0IWqG(%?3`|tt? zbx&3ADDLW+2F-ZcwWDp#4}2i`@D_9YWg;OP-ENo-b&>OxQ_#Ev!Ju^lhsu8C*C+Q~ zFsq-~234(?9oE;WM)uyyt)(M=#pobSm@zj<3q9;G4jJW3GGMJO4b~4x>31_}4!Km; zJAR*m2m>8i2kF<;6 z=IB-x*Xxs$)Pj%jZ*;9b*}T0z?ZQ-YcS&Jf^f7nf$qYeEc9}D+4uvm0c~s(4anfr? zb@1`ESvV(iM4#QqG#NPM#dk}gOy{BY(>1D6k0FtwH6#7P$FWyL@-vJ%$Im$igE0JB zy03(*II;}}5V6H&r0eLrJ34`+gg^|?iCF9#o-4PP^o(>)sz+;57$SQjALZx|MPe)- zG}>Y@?VLMFjxu3$F{YvtZHYg>KcC3MMe6vRvneN-*%@r$`|jY7M-4Lmjtixf7p(^` zsw;=oo}9c7e0!i;V3G5k=dC28GebPjPB}#+Fp$n%rRUG3)V**3v*Oaz%54x~?UcWc zmbj%7N%dnF{K1M42cpPXk>tby0vNPbw)Y{PG7n!_JfCW!UuC4-m6!ksRK1%T@4P(h z{v(8N?S!$n6^zYvpfpE32BSP!0wcujHdQ4Rci2YeORrOJm&{XCm)Dj_69IdoSpSB|MWc-E68u%)V=7l2N3h*V-| znJtB3D0Jh8U(>sUTuBe4b1aG`WYJ-xL8p67GMgNO)@pQ0<;6Q;acEaRFpkb(<5r4W zw$yi3j^%XJC}4A#BU`DNN)Ocz$s6}#qIg7*iBE1v>!k8}F8PW2H$fI9p{iI zEZ~DaL!u5maVdQHJkH^E1CAh=-xTqnpkP9suV&|&fi!|cMN;C(`n+NXcXs?}$vgU8l*48h5Hr2CRm)Vmdm#0E1x{+KWo_19G6r_69wn8>uRWZzV6 zEN^%$wvi8vfO0hAuXIGsQj-=mlA`-(&gKc)^hSUiQaZ3VxmxJSiJ(NM1x*7MU#;;V z32g6WXrWXuv|Z#?gVH~&n;Cw87B?Kcbf|^?-uZ>mcCmqH{b?sPi>{^X>js!wX48gUa{Bx-Vy*uA%I9zfR&g z0-aRBE`GV%TBDh%n90MVtDQ5x(tmY4K0Ix|nsa%wXCCN+kwMh6Y#A5#!#smx`d!yw z%AI9zNgN53F9<;m-U!dWXgFI|uz-i1J>E#JBtm&B$+?xM+Np9TeqVLe1-iNT;z(t0 zHl|R2O0kAWzE9$*NBIRYHB@m1jz^UnI19*Q-r6&6ip7|fY=hE6R_Ub$wY7_=_Hi~p zv2?zVtLDsZFK4GrH^L4+<=Mw%q%_9Z>$ZZNjR^9!4j?~m>(HiKjN!bvY&SCDtvE7| z%77-DRf=NBj695>F;#j0rfGxsc1M>k@#{J4UPDBGrAy*E*~xftO_Rt*Rg2J_P+!;x zT}YNO6Fqq$xAZp1&FZbg?dZ;XK@+L(b*o;aA9S#7d9Q5Gt+13W;W=JF6`9UE)TOZK z_;laZlb4}WY4-@bk9ZJx-qGnBq3IQLk2sxlr`1BY-Jw~U^#*!gyyC_b;2 z;S;Ahx(DT}?9a8CBnS_2Ybe{#nLT|=7(~sYoFK<}siU9!KvVp3L{7JWcy+jL zJzX<^S+Iqu#| zi!XO<9PLHebTg!~=}I|)(&2DLwGu765Q`v5^u+~h#By8=?Qk5ZYT-o4V}CXFX0BO} z3RzFi+j!T1L8+Nqq)e%)IQd&@`<|~Ml%FUv zQ5%>zS3hA@nj>s8*psH2uOaqSIeNUBMy^)X>qQ`fXMr!^BuRGfOji$9SkG*?&SR0Q zY@2GQ21*sPRQ55XC|#lLik1^t8#vkl?!IT*5Htrn6ufVQi<~{ zO8bNlF&kc?QQ&Z^&zF2KAUp1Xtu?cc@i{`z>d=0=g__OADRskVJfbR94eht7Y_wDH zOK??;UUgE{W*rC#+$7SyZ-XlzI*~7xoMeAzs$LF4qdn&DyjYJt;bx?udQKcW;6NlM zy82{6n|95M<8RN5zC6g?@hCDQ*+Co;ZPZGfYZ_4J!h5mjxF&WiQ^E z)-HwihDT&|?@}_mC*(@xjha3rmSUdf29n0Auvg^soIzLa_+pC}fANup#o z-smJjXS$_8>O6=$zV-IlGlvQtW!v(zM+uBMs*`)Cd1#|)UB|{79?(rEn-A?vBs;Y* zNIx(xLU-zotDmpM?1|`uwp(yYjuSC*0q~VE=MgPOP*EZa=*^3qfKJ9ugMys?BYF;& z%KgrPI#uhI{zm$*9aZB;*bB9*bVMFJpaS_V^K+8#M=$EE2^Yq!+qOJ3s~GD#BEx*L z{^(HofrRJU*jvu4mS*R|9a3_}hJCY_24aR9==vi7Y>?=fc|^f$$oxL2`GamtkEHO< zq5{9C1s<~TIU!HMHHl*_>n;a~F1Tm6+?Mn}+{(Y>QOd3RB!NS}B+k{TYXf2Eq}g8RN-`KLv>Oo+bp|FA`{X{ zD~?f&?cq%hgXd4xqY`;1)>ggi`Y-n1tCuz>PeqCVVT6#fD&r zgsR+ewTlkQ6HEyAS%gmurwu!QCZ}Zb#u>HjquQd)s}*>HLkt!r7Z@$<6IaGPYkFjq z=OF{0<3W570X{9Y7@}qzZIL>Iv)Ad`behZDSeVBR@`P2BF;1izYfmt61-x5^>*S9f zFh-AO>OX=V=kFdCCumTN<6j7_S{h-Z_wuC8jh0iDyGH7Eab(2r-Rt&h>2$J(HFb$9 zn%tNic3QsuDj1{DguOQ8F1kza>RRuol!Qp7zJQzvemLT{yn^1+&I;`gk#k=T3*xV9 zmtU=uH5Z5Voxdy|KvLn&!N#qx`H(3PPVso5;yJ_nW1DW-DJ6}S$KQr6w;jNhc6&V& zeDg-~W?80#n0O5b7cT=^X0dV#BX?nd(PHNL!8 zsy9b0JnPwJ1tw4XqZSIE)9=JwmEsUog35e2`6}H;n;OMS7@W z@^lYsEE5Qecr$I^og_UXzG=05D^koQZl?bV*CPZeM`v~F>5#!|548r5w{mC+w^?vX z;c`5=`yla(3C^ml=Iq-GH_l+^K8{{+1Cu2ADZF$~^wG-L?~;w+A&bGC^si1Nb{Mig zTS4P(7}N0(Vt^}T#XX4-hw1wo*{kdK&9tZa=~C$<>EO{p;5_#doj_Iw&RsAm)fqL@r!ZS zOr_3|GPpXuDUmD17gpA|J-YoYB2!g+mnZ}fTOyJiyqqlo9t|V#*V+o{W&t7vkpzQ4 zB_Od3cZ}T!05fT0FO<@UP|jb6@++Oh_0dCWt`5goNN?FkwM)Q5Z_pMieGw zV=ah8AwQx@1gfMU-O@Uic;1;=ii!g;demhC>FO#H) z)9xgRPfosO1P`2RS0Hlcym~2dk!cy zoC*tPKNdg;!^VJO;Q?1raM-*#1PmwG2|&K{0t60%Gwj?EL8+h=ajw1M{wx<(6d#>T zA_=6bu!);}@gX+0o!EjY#{8ylUg3+0ct|qrnBK0syfL*d3U~UL3K$GM1~-Rue!Pc+ zBWdkCJ>3on2<+5Cn5&hC8^4>QJ-;nbv;uIUPvIbu+Xz$*=v+Si9T1w`sR<@7S7i>90u zRpnKVP%xi18rH8Z%im@kG3}Nzpg~k$YLKq0t0(hkoe_o$!^MzDK@p?~pfiH- zFK&N@ntH=YK5GW%{tzgL6~ht)tz&zvN0E~}R)}ryJ|cgeq9VZ{sQ`n*qepC@r@;T3 z18>*M66MQz*0gt{=T4Pe3%umN*eio!V)6QDd2A_SpTcvhh1%^T{vmS(SwW2~e8poN zF7GAx(*$3mz?46DQO*}o8yrAwp#QlheWg!etiRVMvQPSi1IGf?3IYbftv}XoKr4*l zhH$=*_i#ug^EYcd8YqpAwfuW^Xjj$ul=J-Ik!U@+C#FLo;}{QUf}p&-u#zv7`a5bcn@5hm7DwbaBJsqk-+sg!^8>N|~PB zcL*_I_JhD-qD`zZImg;V^L-Z8&>bgClFukxgOZm}lO9p5`9r74>|76ONqTRZS&qJk z83pv@*#dotzK16=+uqZ|Q{UAQ<>C>NZRKs@WP%M;e(VV>T%f&-d`$?(hGd0e-vJ(V zLckaZLO4Da?y*Q^FbV?-G-4s=u<-Z7;gW!%Ss@|NAb0=-4Bl%MhJ7J;U^oI!_{B?@ zASko!78dElCr4P7!pxm&d3y@O)@vhpt{+6j9Zn;>fV)`_p#(jbf1nWU$&P=van6G0 zO2Xlomq|_3#7H>Ms|X_ya0F5a0dyl+Kw80IJP0nR-8LZOp~fbCRw!mBpt&8usr9k{ z%bmNMK?HMx%5}TP@j0K3X6W<(N_%y`Lwosw+OymLaeS%0a;|6;v%bAE3a002;q124 z>wM7x3d6)mMI4R3z>Z_iS(|a6A%Fc1nvx?R?AWn0$a+(`XnTtn+CtJva-0Wl z=~VNCy}?4xPmnY^#}b<~b(fGg=p$W)vjL3-!9%wG)X)8=Zj7sJpSh-xkn&uDJWg(- z6Ze(-8FgQEV-E~cP9O7>z?gBkB9DbivFLjI=FBhb#;kyxgL!&bd{;L{wbPbx?DWk9 zJN0C*|Hk>U&g^NbB$t8K3GD$=#=7G13t`b?)NMMq9+p1WsGYostY9R1;{UiuH4-Uz zbPmk4b?=r97y>_xev0+}mWh4*i=IV(oY;E`nQ4MGNf{2? zAL!qz&PqT6_4poe8t&C)1yGm^njF$kGP+ zG7DRUJjeshTRG&PB3RD|4b@S-r@d7wxX{MJ$ELLno_%;L=%turE4rLR4KFw39X#aC z_jg3(yLICa72|)R^ZBO6{kiiw)P@zypz04!8h)%1;^}|vNROMWnJQ_x)pq{LiA461 zke;HqN;-4i{88Ta+{W7O5V#wD0c?OVqxC6C28i^D-r6EZ?o&R8Coi2ck7FA9(mPL2 zU0aTk<|5auyGE;fkPU_i1^WZNzYoxM!yVwipe_MZo^LhzUv^ztA$h>;;$tU=3-oMX z^<;4R&%a?Jh<7J5UvxVHpMQlSSfR{bjX@sP+t%4n&u~u#UnWVLGQl~vrL{JZE4T9erJ7GS{EV z#l5AEv+#cGGQ)6QX}PodP3(X|hU6QOAQalr!pS4sZf7pAa|KKpUjb9bWjrt_D->e^ zxSZP^tOJu4I52Vw#kdbV8i0p9&z6PDd`GvnH*dorC*PeTYRTzoGwY%}++1C(QRq*7 zI2<9oV-sWw4@m^Z5perI4HBw*;yQ~nkuQzRwL@6qfmR-ON3Vy*WE~}lEkaVrM^A&4F-KJgP^Es7U`!)z=RbE z2OfQy^B5{1xFV3TO${EmFr9LR)5{s%d;^82ZxOv(5jLHaQ*dxQcKLK5I}l`b$*mOE zYXatuC%CUFMd3h4FTn}8XJBEpj$uRT8N86JP)Ib;oJRm>2ykM59HMNE3T5XD2`nZm z%h1=k=U`@|`M;3h7f#WE=>`HJB!oolOwmQ)B5={&TcBM2by5GtaAZu=-+fUyK$(+w z#qh{_6y0LYrhIQFyHAJ^e$uG*>#>W(3%HCouPcKMZ(38C4b&Dh2zRqit}`VRrIut? z6jbMi+<}L5eLWh%4hE+AJ015|jWh0loN2$w-4Kb)wed)W-V~g?nMb70&q@5%5apYr zb@`9u0YEdvfb9CQ88q={1;d0wFhO6IHHIAsjsm8w_YE-J?v=*8I~E$%i7i=(HQII7 z_VyF`?RHg(0pudNY-Ceu#%f@16&p-#VEdsf5(4*#WeAnQrS2koE>KbYbnfwmhu(ab zY%{w^l+EJt-t&rHBI+>S^nk6oU%(L$NqEsDW94RHZ7dJ0BK_;b8i)yb2()f2L+FO#3Ly6c+zoYU9_b?`ltmK6n&o*}LHTuDhfl;LVs+Rx^0P z`PeD1x&36yh1UQ}v%7msU|f4kU`~Ht0<&_muy^M7-Z5u{WbUkhb_=WBTm(vdFW!zmrAD|IFVcE7 zq`I0j^|n>#!U$evp&9M_naLJ&&gKvC^88)AI~mMxZQ*IL7wvVdq%qD=A-_qzw}F+M z?9D5P7(J^tUmMxM+3R)JWCiU%t-bot{4wrNKUrBg+1hy6Ss;Z)Kp^PYUTx<2P@65j zv7r0866`4A`MnoDtN;Ub`_I+?lh`}qop$Pfo&(Cq%E@cDMuy~|098PHQrI}5Tx>n< zXz2L95NYpAd9PWpM@zddJHHHu2LuO9%O{r0E{tkFIt#yf+4Kx?!A{$txfA`D2jt3E zAM;JwJ{J}6CM0Y}xNO_KhoN~kAFiBsEB~IFI9j7TtkCvuJ4NinEcZcom@R!juI%pV zp1n7U`H%{~yS2Toy{Cnfo~swy3Z?JshVoJTxWwtr55!`{?~1k+a6ujSuyO@r7T62# zu^ZkK2ruA?wy<|WSs!w;-I+SuIon(9E*?9$S)c*!_XHF>+wrp^dhAuw-@5w;-Ob%A zOvl~A1X?Yi$@{7-xevLyIoYGEneCn3P(Wb;C2R@c33|RRo^~qo%*TN?676h(cKn59 z3e-W*y*ewftAO9Ev!4qaXmyVs-RV|9Qad#_#|e#cve<2V?Cjla?Ooiwc9zS&sIX|2 zooCFSV_@ES`=6(Y_*ZG}yzRdCoqXTNXR)8$Ok*`l++i&FSH}drfp8bt{{YJk23Q7K-SbY5E zT>8(8kN;VsZN%ws1>&+7k~A)6-L`lmzyYD4j*%?ee?3d`lF+l)Qwvl++Rkp!Pm5DKxEFwb zea5|Tw1T7Wn=fPnEE_S)ey0sM<^tgPa||0jB$|C?Yh zKLGYR{yzzO?e;oDOQ;v%;tq9ug@K0q%9Ta^OF`r z7cntp%pW+c%jreea=Y7ocKtW%^^rZZi@g0ty?&!!|9?ikb{slkOcb4vU80X)Kd~N+1`4Y1hw-yscS;62oR^l+EjTH(eB8Wu7ghYgd#BGF7 zRwBa4|1R^JoRrPuYqEL8p%=_DPNNj0{DZg}6rJUcrvk6g zuB|Vqj!m04$6_YLxlE>)V-IQ=ckX@i&v7+^dwaU_e-KwY==*0}E!iuw$tSJDF4&Tr z{IKzT%|q$huk7RMh$NMc5zU7OMST-j!yxY9|PEoY=>9^rFDt+UkIfD}XI}I@mi~*rEg++)%dPg!0@0&bvK8 z005w8fTQN+|fc0RP0^!ioQv zr^&EO!qNL^&<4<7JnXGe04vcRK$CrcS+@GH{P|mVO`}{~J#|sufIY-7%xCI9eDklb zMLsm27$*EX)De`mfvyTapdD6ryIE}UGivUqBs{*sWcpB>|4t6;UoHngd-}ge6y*1b zV*V>~<@0Fb`-C|1D}?w&W7?B}`coa+rj;8e*hE+c7!lx0=+WDzPaRor?cxL6r(S?iGhL?H6L2-ahu z{HP1B~WXj5-Ua?tqan~^6TudpH#6|o)PT);`I>zB0Uw~zUIa{K?J8Mzq3#!>`^ z5E8V2i3(Zou*}5aFks0GWod~Jvb3_wmu=hX`t7zve zIZ~|WDN)%%qW5&Q?pRMpU+6+VlP~%b;N}Y8>KQkRlsU_>4Q!4Ja9St+2nG^rg;c>)c5mknuUbL zez{HaH|Akq*)#((0N#VXvT6SC=!=0c1Vb4Fn3J=Bu9=_B7vZy>^vTLfvC@cmHpHuK zGjTRAjD!bPOLbI91H!yNX5TqG>4JdL)3Gl&A~$Yw37-q&o>p5=xUpG}3!xeVOq!zr zQ|55s3WL zv>&W4j#{dYtQkyRnLEoxpsFOjwdD4sIr)Tx8C!Us=h!|xjjRszVo=99V9r&!FEx}T z+H}~OpziQ_0shy%Dvsm)XltjgXqJ^{XJ2=_twrSCZ8lX?x?;CzELs`2{uh3YrT{AU z_}A?29^g^Ox7girU$eVIf}w$M|G%eqljMLS0oBa?-uz?@5TisOS*anO}sh=@Vm1Bg7BK{V zphq?$=ai8!>Gblv!#15F#`+rpVqtX$Y^M=N_<4ut+)|e+JlG#dvjvZWM4cX*0~PtV zU!&iCjsBBk%75Tg@0%+3XVaqpieIB&PVoL#oBvb%8UX_(Q}`bV-T@cAwYt-%4`=dQ zJUF6Zw?=gTng3gxyTob~&sXM`uLS-_f_G?ssXQol$QcSEpzyyd^nSxdBC@tAT!wLh z-9{>?;Pw~&6a>0U@ZP7J(g<3|!aPeTs)ALcp6E=7JMr`YXYf{mz+C)`X)_ddZlvPGuWt=;=Zqt$L*({g~kL-)@0(_5%QrDE6dK_=IvF-uMQdKoONTd|L zkrp-oTIvqBPshcvaPv$yZxJ^#l38gn?>r@{c+9*GGcl^JX>TnNKndC{*C_vI~XAk&Bp6KIbm(AanB2{?xtl-&to(RfmHMSd<&D)KY*40 z+<(Uyt!}n>Pb4K9f##HH10mbFvMQHV-#b-7L!l3kD0tL-i1#1+@9<2~(222`eU|)U zPPp;-{Y0s#f%q`*m+`hQTX?1xmT&xXo+186#Ph$;Go)tu=)eON`DdbG%>LtjPL)Tk zjw_%v_S1GN;o-zr&0OM2UCP;)k*+Z{u(LL+@rS86IQ$>-48eL|@eIRqzH<5C>IQhl zvHnkPGeSO;;SUji|E}8o9f|GuA!}>E?}Rr{-a8&AK6#q>hVu}yf9O2K%GKG;)dTQ# z@i8x4KKL?mbpbpA{lNoL_&rJgVLY%WNg)mco!BXp?&}ZPeXoU@(wngg&~GOTinA!M z@g08j+zSL^ru#lJ9MaknVPT1|f>{b%Si=xVQ85^>$%rsa$l3;hv_V+fSc?h+11+-c ze@2EQyZ4a{$MbPd6)6BN5(n0-8u!o*+|IFa8q1rhP@P6$HiEQP7loiN=Cr>M-9RD) z;Ua?Kf_q#zBph%;3f%rnE}S?VDUSF#TsWLL%FZ`0Y4-7mb|o)eEP~&QYUt;$$3goG zZjH{pQW;2nAh+K)$^I}GeRM0{Sv_B!(E6?NW3PLZ^CKU`Q3mnH2w^ zGp7!e=QHCwL*NDps^_g*mdk`M3>N1^1<;;4Q*mTC*QU~b%-vFO&8O*1Csn+e z)O8%8+GwudRJh+%xc}FwaDRb3{*xV5eh_)&5^YuFEk7qM=IdxjaVs3R!*jn*8_|Q@ zj>)q(pK()NhESl3)|@ONNVaeiA$-T%qlRQc;`_cv9ua`k@6Q{mY;F69@C}s-R{|?9Wa5(>m z{ZzOTY{}23OORC@BzSwN5WWoK?B6;+F_G|3kw@x#54?eF!#%26a6W{c%_<{8}Ix#Vm>blUn`88;vOBgC>8l4d6q z={C|C^J=OU-vvIqO}uyuAPJ-#8Ro6h?2wXZKCc;iF|~}?Z`R8Y*OtEZB$RtY`#Dz+ z?U1iuTbTVFJF>iiXut~nH}v>>OO^k;C*J=$^l1Mp+F!^w8~vYyJnr;6e?%THlsqR1 zS&=@4KVBP^u;3~hiV!A<-Jcs7bWhv=aNx4`e?%Uae7R_~uDeU~NFJP8xmt1UW&Y~j z5~?6aDhJkEU3wPWUvyM^JE|z}SGj>Ut!K;@Z}yJuhj|9t7(&%&!=~;pkAOT*GARKh zxhFHM6fZjuEHXU28Q>bLB=|5VBqx4SC_cI@(YJ#9XvB}Q51;+i9aRv3i4?FmCa|MQ z0z4!RZucv8R3ZPy#Pm+P6z+nC*EQKdo5d10X%4yXAy zGXAii$|v$+tV73f*`&wuCm1(%i|@a0r4aa{;D6!td}liqI4~dI*}ZXZJC&VVz-8yJ zBpN^yyO_fe%^SH(ZD*7MrQeu`1Qe;4)T^XDU&inD-9vJh3g8j?yoF;QrTbK-q|?x zdQO3XkO2Ofg_aXZ(xq`B3&I?o;@%s$6?%tHlnCxGFI!r;(l2z{2eLvP@`!{7^h@?r z$%~ltzJDG|lXn6o;2dNW!m^>sWOtHE8{3wvDf!sM3Tm6&LCoRVZP*~SthYjwJKFNxto|vS1|&)dWr?&9fx#_MmN1l!6&xlkY5{CsEF>fakbB@Rf`j+vc=MV;8g!SwXkccZ`W2Pxs$5CVo8aA7)Jac#=QPnE3uQe*$CTF97);m*Xb_ z@;@%b4+HXl;g9LZrTL6>1A83paV35jjsI~mK4r?E(D=~*h{pf={P;5z{~v|Fl6;FM{W#~Ds$%(oe>UF{q5Q?#^g?=UgjpsvO>SNo^bfbU8A4;|m0B#)O| z0|kcJ4f_Y~mDF=lzZ<~?7s$R_NmVCUuJHG;< zfsllFJE8G#z!*>{7A6)R78V{cAs!L&hlB9LLA>|(ul{T|fk<(nASeg}%nE{#{(oHi z1yq#Z^8k!5CB1a#vUEvFgTm6?jnXB}5)vZ0Al(AeozjhTBQ4S)NXpV8qWC`e`TqX@ z_q?35=efIg?#$eIX68;@P|%1_{tklZfw1%u8Vbt)KRQK0MMKAU1j59^#sTJ?2|*}m zsA#BI7?@;ukFe2EFi=1M01*Z;goOVQCKi*7wxtI)sX#~)R945cpnjfAP*+di%GwL= z9h#hyTG-UrKRfr8oPwE!6&6<1(713$NhS0oZChB*#x}foVDMbtC!)Dz$1d_>2%tuX z0s;sCfB!#rPyzA)I{-Jpv^)_A_`f$)bks+fnCQR=;N^i^fEf}9zc#7NBPIbIOAj(Z zp^&74dQ5UCvuxiiOn3Xt%2QrW@0^A8iGC=>-xUxZ8n6c8q z7)l5+N_=B%!$nMpOIWR>z$jY}p{%z;54RdL6rV6WJ55ceQ}oH~va}G zpwi_GDUIsxT!ml5uWY^&e4G-^r;ANCB#_9Z`D0T0^?hNzvB>B4qDuDdgmoLsjiWE1 zVka)@O^&{g%e?`+JSzU)SXZI!8pz^~(I$iQG?Tv|-UfT$1y#3a?(|EBZXH7Ifi*6yQ#qJv5G;(<4!p1_2ETm4D$U4)u$qJd8@WLR;gr}|Gg&kpq8 zUR}}eZ~=77_-X7O|DmDuNce}27yS-x7~#2Z^O93*hv6SE(XhzB#lNwC&;W~OaZ2L( zUq5UfLTeR-d-fM(2`oYZ7JZ+ItqA_eF!L7#kaF83IS2+g|4-i0?AyASl)w`Ksb`7os#BHh0;(C+3$rcEpLkBkWN?g8L|j0ix+QUOJ;$G7JJR#r6N zfwk2CvDSuetM$J%eB1lLjtPF~Y-!f5`T6qnLNRn`CI5%+^8e61aBW3XnTP!M3wy9{ z-v2ll@Qd>0i70=j|8)I7JX-h2kBFba4H*wFcA)*`c$}>+t@!`&?f=6E$dq1EBE7D@ zK%W5o`T;mr)axI6|6|-*mJg@ouH)Y#qJg}Edxr0&0DBuubQ2b``g-m=4`{duz|s$E zvqPl+F%g2Frg`%p8jpbw|L-+MSbcgU;D1~pZoL1G&|@O-w;Bum7wcdC?cV@Q`{&<# z1+)SGD`c%j2nwpSM!a~~C+x2CA1@DjH>is=<&OCO;=890iulTL!}Aig^8fJA{EwM6 zK<@_UktWX+09w=kXleKO`~^KAR^Q%Vdd`~X`5Es17j)^Z=LW_c{R_f-9o{JFxsgt^ zW)dvRKp@?3D0G+p(?g7AxBJtN4}Ldq(~7r;bOW<8F|X!`4tOD2JKOIS{h;4vZlX0U zx49L+tgfPN1{xbyyzE?wSLN$eT~5c(fQ?86i0Dy(%Nj)PN-}QrGw{E07;N$+jZ0PS zcw8dHdP19ilc`I*r(2Uz<^GiwgzX(FRB@!g^ZnC3o7^^S+0IkCGA{{hFB^J<^K{|S zW$5`djOWdJ{*7VN!GPK`>cGKTDVTS*p+eDPd-l&o9}E+kBYlg>T--5=McvQ|Wsp#R zJzk1_QJ4_xxynJp%!Ua;Kw!!~hI1{xXF_FszgB8`1Nb_@RG|v&zW*z` z<<}poi}E`7#n1;oj*&Pz`Hy->GIBr9-G^gG+)%ieX)r*HGWA~(TI&>Z;^lmFNK~YZ#|bCb(b<)N`208O#$oU!ZCK#-6ij2&{Yl@ z3F!{mh|+3m0Grck^M&I3cKw(96r-*;6!i1?NE*aD9!gV@g(A*FxUjk}*wS^UNlJ}^ z!P!}gLjTtW|3+ZsBXFzv{slphZfzZzkMNniu|Wz;^&|pM<|t_jup;p1 zD4)!PYt=&{5{aW0I0h*p7(}=_==!)S>@au;UOh;bn36PKnFU43LPi0D6pB7+AuGVa zh5D>s&O*mUvEy0YjVuu`0|{#?L6v9!0)gU%GXh`vWVI`VeA=0Wsi>mL`yh`x1lWxd z`{v@5(epV_=_r{Bup{weiDdbd2oGFCER=Ck-Y8(@7lnq$g%XBiJyRl-6_slMCi|#J zAsC_|vI|(fr8JDobmbWe*r;^2Gu%qfkAS^|zhq`~Z8#uj=7Ug?LYc83IPC0Sl0|>x^|yR3SGq{sHdS=ec*BsnB+ZDoLre51?R7M zhj|=gtJavRn(Wau50%y30ajcEW*9KUr(YXb7E$yUVR({8wW18)dr=lZapK9#`MHl* zkh8+2G4&kI@0~}b@;WNL2K;dN|G?UnF@io7@bsa zu9n`VaZ2!`4DU5Jk_4M9+aBG4fVGxtolsu<;WLHSj;((Eo)B6my*Wb4lVT}8C1u-> z?x(SL=He@cg5E{J`V=>G-nm_iQ1hUD8%8}>6pvO-BkuXethIv|7Rb4Q_LCFWqGI8r z3!HC9x@jUUs(9Zk3?ht>VdEH9LvID#39Fwah8WcYHf#mhFh-OCGh?|HL`i{LHUxrN zk4g%}qqwND{7_?~MWJpao(0B~SJX?B8D7=*&LA`$jSxBa>Bt%F{=*|?qG9oCuQgx( zxQ(06f}*Aa6lkRA{?2`%@=)lRHl`Ox-{&7|x1+PjL%a*B*>|xcDpUO>likm?FKubE z+h$+T56|!9rS*yB55z^*1UXXY)@#iFIUZ?tOTL~Yd*bR9ll%21*=)aiXv!UMt&G>{-jq)F;IZT=P3clP_vp~Z_ikA6jmRtgt^h!Pm05RxX>oHY@M#}tr>=FpQNbHk;aSK>^Uh4<*5H147+a_(%1kyKv>M@f zJnEPz+>^u5UiS(TD?Bn%Cb#Gq>(Yydex(B{RLSC6GyE#viFdTPZJs1TPO>LGVSEkb#nBFSD&-Ei9WT0))oJD zH*eQHf0D~yjU3Ph)91ya+Nd&U=i9ER6N*NFW4P4n)*<@k}F|#lR;KD)< zmXk42;hH1Cw z`w63`(%qG9_2`GgLE6lmDg^v?v-yLWjGgMghWEkeU2H5)S^mj$xEi{PB7Z@-LvDR- zHUz>Njz6r&q;?i>kVs>17n6PZ$RV0$X`S5(JwZYl^rlc;vpE@bSH>7ZMI$bsbC+?_ zmRSR@?0lDJw0nP^6pb@T&%Unn_MF}N^>k`i=Ua@IJ#IvFZE$AK%K)7f)BM}limzr3 znoq!%1dgEQPmH19uUIo-i^Rv#eqB4`PE-O3`Xy|6*y3^Cfy}qy+f9~rVPW^<4NUhr zoVILk0s_m;nLUY;1lJ#3@USKMKJ>Gj4sTV%*ZEmScAIK!Jm*G zdrfWxauDb&+Wgjxw!*v zXj+&YhfDIpTOIb~zsr1H{{X#%YWz8ROfmd|t5NjMAc3W*oFMR&BW|&q6Gw7WSG>gF z7NQDiP-?gEY!5B3?2p3XP%^^XdJ~SzofvCm_ErUw#yUqXK--RD82`wFA!B0bNE)V8WaBn4Ux<(Op8Q#GLx1)c)Mqd$k@S)Al-J1WyMQX> zH_&G2{@fz35_HD1$EX^wrhsMnmZ}=V>XCm9S8TS(Z+A67&9et;LVji_Xme zlBHV$`mFQ4;-~2aF7{t}4?UjR=qOZQ-<8Pk)JlDQfh+Thdcl){LFnm4*l$_UU2$m# zhHlKCY4vf2w;g@D_paH)W_SH(O;YpEgY)NK|Cb=0y)h+re^w@Q!S9Fg7wssTR}`a@aT2-8csKYLFHi{fSD zZVO*uGJMrP9{vmZwCJ~a+u=s#bxN@95KzL>6^{5sa`Wylh&c5xNQUUYHC6f5CpQLu zn{FLiKRZ7JKBq=>=w^?~_XufjSpQa$c!f=n_4Jnip2ZB~g+3 z8uEj?Fe6hE}8e~edyVh)Lf<5zdg(ZN2`b=9{;!3 z2>Wy7rZ=s@k5XTe=RmIem;koUg}?i3GYj)n<{rYnAy;!7_<)d0@MUMvg3lM9yYfK& z>7HAH?Sp_4$F8@l7q@o{f#SyRV^%ND?-qii3?SyK$khDWlN&9+?7ZL$h7bVb$*#j@ zM#4tX_S~mk&&>=?V6<>L1m5(fYeP8MdwHGS%j&TQ6my9|M83`6)cu5aiZP3PoBmz* z)0>x{e$$(ipLf$6lYVCtHw?DUlszWZ!;{yI7+@p1&~uxxKlL~pS8mI2>qxa@TSex3 zBc-<5^nzx?1JhS8X7APl1w5zJxNjZ)^agVJtQj_Qt{Jwj%O0Br^tqP@6xn$?*iWz_ z(YAG?ZbbyYrQD#LRoGdre>~D}8*%F>@^)po#_TUbhTF5T2G;*k`YG2Hn6rE_at+-k z7Xeg6r)Kyr=rc{liwz2JLI-H~=X6S5TSB-ZZJzb5*j?gJIVkOk0_DD22O|2#27xUD zoPGBX!`NR?B?A`X55vyw(`(o^aTp!&vf?FHk)>Y^Zz8v6Zxr^U9tGz8DmaT~J4c^R z`3usKCXy5du*96ZH9sZp=@N`!fLq)%QeAl65S>M1o}&U}+X=#T5CBVBwD!%^RWCN6 z03s#BbI^YrDfOgWN*g`(V8AK^^Q^?28#XId8Q#2sm*15H{mwJJ=(~&hDHnDt-TEyI zKv_9)uKRnP)kDasJJ>I77SJ-pMS$A`CK9@>1K$0ynXb8}*k5H`&$|GNf*O+j`6?m{ zDD39gb`N)68$pCpuExo&&4a+(JGx1~K+nnkY|(Wyz>9lQ8ebbfb!Wgy@?}%_-SB!# zn(X-}Pe_ei?aRAC*A+yE*812&;J@FQks8+jUPtAhohW?!+m6R%FE*Hb9*nj#CGo%4 zsl4`HaY7Mzc?QGhO^-^bJ3pMFp0Ed$Hv0mq@#PwATSsGePuk=@Kag{IxWqoT@Z9?@ zZ0jJPw9c0e0_et@pL&@9fbj#s3Tpvo9NT%?-J9>_0j1TFIhg;{LYsh1`yZr!bC;!M zh1`diACA!av~JYZkQxL3_$%)@IFtUjsg|)EyLF2A4{Ho)fX`t2C6xfk3A4ZOFQ{k> z5XWF3(`u)U1pHpS$2|}OJe)6?hX80mw}~_fp#UnPvl#d2#FOOn>$|WkZ}9MYNtuLn z0zlAAxe&xZ*^_@;Em&m(=HnjbGbQEzo9CvLC-?`*Gs7y&syecWd|c%46spo0H4D7g zgukE#IZ5S&^rwK*eRwZ9ogg+lJ-D(Y=32x& zhuN)1n~ovPiQAX{(#KJuY!a3W!_DvFNfplH3)ZLnT?xuV2QF9H2*L#gOAZ%tN?)1jfwgVp) z?Map?czhE(<+2Wc3$NXDkZ@RZ>b{%?EZBEFol($ez2vG;>}?0G72^00Q6*T{L}bR-t_@$c-G_AL%~2H37Uriiw$r+(#H)|X z_`&+g`&Vwg$jR2R5up^3C9XT`4nx^EZ}%2K^=rx>z^o8-)O{&ls48vc@9dIJo@Y(z zntkbJEFvDx;h7-pFw>ZN`%!5>_wg6whIh=DM#@XuNAk`Qi5`2X>Vg05?A`HR7H(w3w%}GHP7=BXA^}sG(Ys*-oYX;;y2cE%6W=ezdno1&0Q-v|E zo${~EFsj6p6lWR_A+DsZAlZ||=m4E1;jiviSOY{STBbHG9WJ388nLR)lvY8Nn9kuE z8Tk0!=_qfZc)HDoEu%hvDsqH)A(oV7P9j6Pi&gz_37a(`5yHAyeXJoeKMjN{06%Dp z_*&+~@HVHidk0JIu+700%FRG}r}bO+ME}QBESu&4%!5jjpZ9YZv6ie2lg$GF8yLFM z`1Ni0D)&msfb7QD2Zj@wopD+(uFQe9_Oa#LoaE!_3*fIxdfeyXy=rkS>P@DIe(%r{{*{825@7t1 zuhBIVn{Zzh&6OTF5K?#w`eUHvZ>52k1&OOyN>_LW1~`cX>{yMP z9?)d#G1*Kw6}D-<-HqO*QySg4aYW+g35deHl&BU~vN)SwcCg} zQuqvr+E&{tOk4>?-Sz_zSDc+}s=~H-6@?B9%;(Q>=JniMr!?&*_`jUc!+w7~LL_)t z3i)zh`vh(^z42*$bw`Zcs>RDxn*EBTD=NR2jVE)`J-CRf)G9Nq91x1SqEA}TiSu9g zYsIvvyofaBDO$B;yhQqa_x?R$e3tiSZvIGNjyIYbAJOXigZ>YJ43|#YuKn1B-ID;0 z`Mvf+JTV+ahgjQ7?;pN3=yq3RpZ!7pK{CD3+LYitD3x< z?sB9$Djvg3_C&?XxFU-#!WIdX^k2^CQw(;xc^*CuX&bLQBS3i0YAhE@B`c_Ba|dzz zex&Oz9fXIe_IfN%uEx;{1q4O^!OXvpU@{bY9-0L|;#D+sbKm-`;+A=UK=E@Vv%$-S z`XrT0>(Wb>O2Wm;U|$L-&`B)Jpo6W{$btR#_R?4QSTWKy<+v|Sq zjShE*i$xTC@=_nj+IE+rCX{L88u#YHHqjfo`j~J>KVR(R(OvQvly%h8_6?ORhH>*> zosV7i&A%F7^9KgAmw4iFbEx>Lr(|6Cal25%q`A@TXZzH*r;Si?ZU0D?ti7T&2ul8cX5o?uZVQyaF1z z80>bby=na3|A)9U+s?sBlPcpVw^!%QFazSJ? zy8+g5rOLEhi~MoC0c-vs>a+z~Jx}X+!j)LrIpv~kRd>tSE0?G_`#<=tvG5ad-rpwY z`sxuQL9EqYF3h{e!*|PsBFpkYQYn8t#Gf?0i|2gqs_9OH@I5r^{`|YLyXh9{6HypC z`78Nd0@kO7#&^BkJQmJEDESVHA^B))S^|2d)0q(F31Pm+!s3C4RGcJ+<4N#weL@<# zkMNi>^_W?_xAKGnV(`&Oo2Ai4r#v*=6LNd?$tdCIGrp~EJNUwAUAHv4*kpLO&{Vim z`Xf3Qa%>Vy&QFC#g!>NRO4%;tF2ubJ;$T_&tYn0M5e+niiLTHk6U)(Tx30$RDU(4%1UTSPNy;MpgW z2yr9AV~4mV#lEvvmG7}F0mO^#eI-Axt3SpEE4d(@UEpoKHU|#DbGz~CtG^L#`QuX< zk-|Xr6sj4aw8<$VQucl%#I-ZYW=Yb!Y*&PTGzmN_3^vZ;28jc{w6tKa(+EVH^-0fFWlUoa4c&hzbB?20l#YXHyel4A!4L?SC6a@Ycg99kIDo@kwr zSX^1`{-lBC04Li^K)lWbNizU%PudhFvq8HroWj+z?O-`Pg`+zT<-aYgGQ6y5-b|i4 zpMWk!?o_sJpP}bqL`x0$FZiXso<+Vo^niBezlsR$cGMIYlf5W~yjj&_lACF#6mzy1 z7(GymWme}!2$(92o;t;{s0}1WlejQIw*|DDaU@mZS!BP8CozxBoiDJLj;A?~i-1zc zd^FyV2t?S7O?s7^VHXKFaik8>i_9RsT&#Q#7yL(VKkFCe@Nzy|$Prn8cDP$l{f_Fa zHO8QgisQSun%pwt(B_tHADm`M6tuZJ`G5&}s`(Eb9){md^{k5=q&ShD_KxbKF z8>gX=-lCzd!rYGa$}buYxIN3gh=8cpB+@!s=!3_FnKzvJO2SZZzmdRfMr`p=$rh+> z8luvEL9_aT<}P!-1jjosT`jFYsdaEHK3oaD_Py_@$ zSqp`E38c*S478#A+{fc~IC}8q3#jIq-E(T~*+$G9o{l~D>7ZK}%7vk(XWNd*ki+li zA||gc6$?J6ZuvKM3ZgC{T0Q7hw!ObNr02Yx*zFmcIx=K9{LuB}vm&DH-r#%It3mT! zINz0T=biMjQN5ay+=$fboAo)3Elfvo9vMTE=lfDCZP|G<5|6f*C|_s~Sr%hO`%ZEaWi>6L2c#nGEAAAI{(= zqr`h@8CxpwYGMWS(xa%Gi-r?H(nhPlw&Bhkn4tO_Sw@=_wA;ySg+=2#Eq5qCs?X&g0*Oh61)`6*UVzC4VhEC zx{}+usxqD%J)b^;ld^NFJ}&Rpw`5Ls^;iB2lISGiU{zKYce+ipCH5I1$P@{zzyv&N zrQRE7_d^{8z4dt}DxzZ0$63`ZOf7*tvp13UFgX!GG2U(KR9i9r8u9bZ6ohgv(> zCY=75*m6RUB?M<3Y?J6YIcDMUOgk)D#5j{1PZR@-1EjU5{zhKeI1`#_;TcE};z`JS zSumN%)Sk|K37Je>iy$lxTeQ~ID^_cLQUN-mU0t$^ z+ino?soAWMAM$wA{p}N#EA@WsGxTu$QY|UVpb5oijBs{a+K+jD%G=m^ghdQ!afQGjuR=5Ko8w)VYT8r&zyfMTz;*(pbs zW!m95jX3OAkZKTxR8r__(-;qlE6N7%aUyqi=tVmqza$e&$>JaUN~W`B58$)%Y%36lF~9@T|C&B^pzgJ264%o3&dt~`&K6BZm+ zOhggInNo|zIq`iLn94mn$^BD*L9x30UuF(-h&?Z+|J;T}>EK47A$DB5hl&{Hn?on!0JlPQsuOo+QmMd#?9OcdNM1mDfKiV@Yvq zrTr}0^|60HRYy_hP`3th01*ge@oH8wCci!C$1Lbj6zKg1A*^6`O(rnTf#AG}%VeaF zrA=HWp9~jc0gfIRt{p6si8k^ulB@$zA9fkd5Zrwu963_RSe-CNb>tyWA#mDJ8XWVc zOofTVaMuA12KrJz3ClhCJYfR8S4))7k9m{9uuS1ckT%C?o2Ue{ox}ihq;#C*u~}%T zpMCUxYRGPDmc$>AtHV7l#+pw501HdAX?TQ;Y!ptfeqo}!);e2`oy||eeD>vJ%Td@o zmUgWISZN(cmX`nEtK1S46Vi*QPU0R*_4Ajgd`7`KP@KvOaqVN~tf>$tU#PriNuW3o zvhN7c+-2B>S+yO$s+-M0`_ObRGm`}qZ`6nsYlu^gy)eiA=|q~w;)qV@tnWiL|I=Ot zev3mULH=76|80xZ`!Md%Zwd6ebZ#6uF4FCYV7qXKTB0*ol~;J4xO6A(7tc2kLRazi zU37QpUrH(&L-7-2bbqGP&^arJ3Hg0~SowW*alU=BJL--YQevXV@)wkFKsMCnYMnM7 zTrrL3DWT#OzvU?dElf1tnc2&kay)eW3rbob%zScO626db2#c>!?`!5QoB#?@EE>;n z2FZagB392C4gKVLN>@Jbz+&I*#%4gfsXvElGJ*VeSbmA%%0 z&wOB4+)BL_#z1bO6(%W{-bL2-Y4r9y`TIuY-{drI;8emJaH26`Qty@M6J?d`iYFMK zlNPeV&GM2)XoEZ=cCIf~=KV~3NdK6!M^ho@>0hvUA#}dPfYj=%)#Pb%{U3$Zj3^{% zwtF9?U+Ie~ybp}0u2H}6wB?GWwHF+Gc4=DG`CM@?PGU@-FixmAS-G7#*?(*yPeo&* zFx+S4kxj1A%j%9n^dcxEn0dvJ z8wLM1d{H>av{!KSN#}4OE8QLChaVd4hYl{7DUZqeDeu`eR+aYh$X>RNV9(B*E`Qo> ztdt6VKW}gKE;^t#;LQ;o+EuN=k8ca1<#anGL^W8+(zIYQX{u3N zmIA}-nG_fv&aFaw$atNZ5~YpB!SpRN1sfaY* z#^P#;>aDp2hvbAHGpLTew-|ROnwYS~_D$il{;y~X_9PadcD8a1XkGkM?voc6qU)26 zM}dVmQZ7*pu1~N`d+UU(U7epu!E^#bU-NOec=peJVJV`|#ML1f$!jmO*|etMGp(4y zl(_$dRKxwS;y+b3myKr@9TM8<5orC#BRa6e@{*Fj!iN_6o>ps zfm@f^LcvqTY@6#%PP(Cd?`%-|<8 zt=K^;8xE}7A8Wv-@vSZbt&RK?2OZM%bIyl0FAGEjgq2NhpHX{Jx^db5z$jd8q-{^- zlC^D*J&VED#NY(AM+|jd@^>oyX%r;zmVH`6onAjF@-l`%#yUo`q=k$5U0bsH7&Gu; zd&PXDyb;Yd8@h7wc&cyL5*}xr1Bp(QNs51Mpr}d0nz&?K9BO6RRu4z0<(L0{ipS`@ zH$EEOBko|ztN}F~p8WQOe1Gs6v141LSaW5yiQ*gj8%Yo~TJBd6Do}1D2cfKGAxy(C7Fur6)TR3li@LaeEYlSQZawXbG_I;YE{x^ ziC9Fec4Lg1Kv*FrZcvo?i`eRXqZXam271d|;orwUT)nH`P5-YaQrBiMFcb6LiDe2Nt zMW~_(L;e=@-klmN*^q=NljK3Vbf7& z&b{!KPTd4L3=ojK#uHCrR9ROXcjaWXOS6 zX)jZ6k-buAgfu!=CJ>f!p(T^cd$G3FLL05~7KBbbW{c)+N^Lc_H#n-S>DT|k&rZ9* z45y8e>!8H>E(~1^Y7QmFFf07NBdCYAe&~DmvGPyz$;l!*?dLKBVe-bLgDXrvy4TLd zjG}oZ?;C;=9D!T>j|P7vHUF{JUI1DYWow#-99}Yd;T02;Cp^4#V#C#extgkl$y-F7 z{sNzW=ZMI_pC-&E{ZNdgpo|F<1%+G=wCsmwRMcS{5D2Of= zwrdw#I1REJC>te%r~@Qkyd<%1ZS_3y??@bOpAvR(^om{sp{MNOPUKR%zx%8=t#xvt z&YVvl***e&-Ir;)XX?*`f8F{q=GqotrF11AAW2=1m%m=My&iuc_x`d-@txV9M8mRC z5YQq>_J6ZbBN+81lYT!pgJew{^PSOS#g<6hbk8UB0hPK=6L%RPX&&<_5-Uur;m=R~n^SnOJtS_iRY`c$YWFj3YU5jK;- zOwJM#F_5^gWGDNjw6}j1sIy2oHfR&mG2-L9ZfOLv**FrZg$!0;Q*Fmq4q+Y_K$l$M1&Z_(`EolgDL#d7B92kh56;>d+{E($G0&ljkV)>$0!TCg9FUjUZ{;U z3Yw#tf0N+Iq5@~N+Ok#9y;cxGayG?zla%d+ZBD!^_Y}5?nAy{@KtSUvCl5gnRGnk? zjp!2rsTt8Q-OeD2VTtPy8zV6=JkmyNu6LP&K!HI05&~8aX%L&L>lT@8cqkLu8PO(! zWogqNtvzmnH7S`>AD#(X^~*Vrbpr(^poS*MJ(VcHO`r^Ecns9yB5gP<0%J}HPl*4C z?Ei3f*hS($QF7oF2VqMM=vTe0QeE56+1+e|6Y$j;)Y5!ScZhY9+z-%hdo|rvVNt_n z;%6FLRhb!}Rqjbs+z6TaU@=YBK~vmkgkuCm=dzjtgt`{AZy}Q@9g|~c!t!W~cFLjA zQd$n}!t{SZ7AKksknG;-YY5=w#Q%b(RVu9BRU}@EEGCQxX!Fx*bpgZHs;2AIsiSL7 zqrG35%~h_uAsAFdlw9(JTSdjy;mn{$`u8JDHngcWQ6|JT&649P*r}vCY*&|@7tv0{ zeU_z}CVo$%-*`$Geh=~ulgA) zk>;I(-kbQOeF|I;xwB_b?U!MT;QVUSQJ3_cg8GUMi5E#-uh`C7Z4G{TI*(a*D$ZJV zMs)57yjW?i@WHuE2yHto%cUBr&P=9(H`h|F{!p9T6u&ZvFBYqD7ePnGT9ctb_l@`_ z{^#TP(aYkDy#$9VtNm!1xghIbf~KD7+nOQ})Y#@D+dKSAZREs|Vcp3gwPkjFJ-wL&SH|07DrP}2uL_^>!`$SE1;Fzcam%*CyT1(?4!gOqv)oV%~rXleRoKckirJ~ zZS}$R+|P1?@ngYf@W-JZOKXl3>!9R=-@(L_J8sMlo8y7|7wo*8eu7^`;c8IsQyNGA zAB`aA*J+e5C017wB&(7>=*H;xKwrlS%Rt0RwCB}Qb8Q)fq6)(&)8)d7<$$8hXqnO@ z&O<^wCCuun7*I?!P_GtSbRpT2U0wu6Gy7_M75=?f>9(2kQKsUAyOG|RbG;FlfTc_} z0=48FaY9}9E1(D~dkaL_`>;$%1S}ns*{hnE1@J}2IZ(imc5ngjkVs%eA8t1^kknYZ zec%&~`ZyB|-*f_s-)La;DAjonPGOr!av(UDld|xar2won@!xgMn9y)BNG5oeQ631# zS-;8w#y#-<7(KcL{;$-HJA+_7@#ph&#!u??q#dgRhDMl7+oOGlK*)3T6QjP*llBmF z_23f7r()@|9~c>kY^M=-rjN_vMqS#Hq5VGpsKG_-@tl1v!@0b zhVvwetUMI2aiaHoBT;?0 zG@DPK;QgdSP0W(ZiGwBFa@_b8S;s^%vQCVFQC>zC2bl0Qi@be{30-Fd>b>bGR#7s_ zc1oWOB5_lGDIZ~5Lq*~XKkHip9!BcEZ>7>NlJ&VOoDTo!FDTDRqm$^dh(rhGGlsJ2 z(%ZBny&so$E+(t(jN21}OsL^p7?KFE0tT}RA4lJ4xj&(fC4LHM$T=2A28#n1I=ZW| zm8LL!bwowjq)e_puToNBtAF&0w1m4dO)0~1v}H>)-jKiw?z<~()m%o~MY*)#Ld`>) z@j5%aXeaD@G{GHop%#9@;YzVh|3vP`XvCQCP41Aa;I^L5MUXm9;?A7M zrP=KCc{?|W()0KA6Xh|Y?IU>FCD`myN3!Htrm&DFx7!Yfj@(iM2KU%#lg&YCJu#K5 zQr{1FCM8yaWuzl?j%W&!|D^s{81cN9MdoV0XIkA}*v)RQ=98#BOQGy>w0PNd9Fd`Q zAu)VPr-zPA7R!=gcC@Zpv!YMif1aql?$*;Nr8!%9$J_Es$jQ~DZ6i=VX;bMCidjGR zQ8BM?49OeZv20d+ZeGe`;$Lh7`^9c;$>5B$NHU#D;VslT!&~jR@Ix!~CmqXVt6s{_ ztg477nWc%p&mEAq*|)rfwGpQu%Yu*r<4i|${e6kQ!r(gJqT)I5h!weBkh~{8@A%2Y zbdESFJz9oMyGtcNs_&j?B~28GF`dC5eb#S-x8xx9jf5MCHq>C>RX%lAHDudn`?)5I zh~OOae(wgoCTW%qv8cQjV0-e}m-#ALvqVl$rTxfb*F{OAP_N&ZaGKMW`R$4vp7sTE zOEiTPg?JL9BGsaulATPZG|K2!`y+VVjGbnPjYku3#7_Ow^4=u7S&^ymc5Yl~?6Dy0 z(CG49F9Ksikaan656CRO9`k0eTY5ft5Y($RDWD%lxI6l09Plavfmj|*#?9&jfNl3K z(?%2Sse3^&S>AYx0mr>7Gf)*np_r_b5@E6Q2Ou+P9J1|UnSfc1CRzBqcxM7B&D5+N z{0-0=I|D1C91AiF<^yG0ipR3_*$D2bbaV*<*)OaG2LL;G-heH;0Os%fV9SDLS$jtG zKnD*KYNrmHi6+@1TAT$sNW>5@V80Lk!6kR#ejWJ0SQ{0C*c)<3-BuQfyaWtosXCfRrnJ82IB+2nWDo5GVarNhxNnF4ZXi0 zoO1~g#tq*eLa*!RJB|vxUvK0}*=e;^U_~=+QZu%V@ z+?zD{LASKf&Y-F@`G8W4l2o<2BM(D(0I1?WGcX4fr(_Y6xu5h683v^o6fUBQN`Yaa zgebyf?Tvt?MCE2RbCD!Fz?J)$QcKfh2CrE(nQDZLODFIJKUak|`*?R?&9CAs7MpSE zGrx6;EFC23A`HUi?GlK4OFZyIgp!iJztRB3&Td8Vgn1t%Rl(9@Rq*axv)^A(zYL)s zc*!h)pi=SnSV!(#m7{Kukj0DHW$pMCoe;(mmMnuTI|6>Se?w>0(?g)1}nj77BtRzdcOrx!#Xp0(38?i`< z3H+(Y|6Ms0t7n(4=sf}bxQu+7rrXw+HAA%cgFt@$w!CJmu!wBe=QB(Ca*Zr8Aq2yf zG*k=hLq#nx%D_&8Gq9&rohY>)1d2mR{&&GE&9mO|C7OynvnsFo!y zpQ4o2eKanIr!^YpkPQ^Z=s~pD*kl|U2B$28AS#Z%o0t{2!zH)$a8rPY$(7lNS^kZuI5C9a!R3VT%SWY4{daW*bJidLB4f-2U2#k!T`J`fQ=Zy_AhASiT46J@5_t!fGdMD z!*YZPjDZ3s*sFlJbm$mut`}OsDLgAg@UN=r-D1S7-V)_i1~|2Sg{iE4AeRbh5PjGq zX7zt)i?CD73&}^*XB#9|ss$b-RSHPTMLV0*iA9!K)uBObB|k_Bl#-9S-^O~UkJ2Bg zsutG0zK%BCGxL^kqL(E7b28`0uI{0cN%1#pQrO*dVo71?O*%^BDWf$rqJ_Y@B1SLo z8n5C?8w_b1VRWV?2P!+x^sufIHAN!}c-rNycq z(^tE%d`Iw3Wpm8?*%n@FsF1YpQ9?{h{z3~@sZv~3ES@fq!=g1XN5R#rBs%PxQWblW zHZJxkCWGjw&pdH49qRwX)H{dQ@qS;RCry(ycG9?M)Yw)V+qP{xjqS#^jmEZZ+qQZq zpYQM9=RW;so}Tx-XEHMzYwfl7$dkVZL`8d{@*S^ZNFS$vtODy_0SLY|M z_4UQPyQ*LKqiP9fW)My3K4CID+$b#kRq;Vo{vJ{k!&TxIT4d+)ZMT;+hB;P%k(=3l z?oaU7cE^CD2FK(nAVfO?dKMt^1D2wiU@TdiwM+)cLY4_pNOORP`0=X)F^~Z?1UrR% zI2GM^W`?rm!ezP>05GIND`Cay@LT8=`4kk|fV-0YgmRs72>R5>yM24bf0ELbb~kwL z5Og+lqiW(sQx)~KJRDDDWR|yd_N*4Foo|DVG7l50Olghevw<19+bhzF?Ls%J%!*n+g413C;2W8bp>%s0zG8kz_;G25Ri(7w$E6PVob{sQMY2MB}Eo z411x47 z@R2OzK^&erg9jX=Lk)mWQTc42`~gY)|3e23>@&6>au}%Z+XCMOHcb4vc_0UO0A3bY z8p8tl@vWmqx6vaVqk#{gW(&|m0DdR~OfdNaX;e?TA%6!jO$-%?efh&{6gd@N(j8R- zhI}Ryf&!Q+5Mc|NCeJ>!H&EHMl1^bPA%H)+54JDR`$%8lW9A)w1r`ADQZzeW2vSgi z&xiBFjl2O6jsS2+fWwa)Q!r)pA@JFsG6GU0z{5oYN*>^^)cFr=;jsXxK0D|yk_p;% zPS=THMxjCk>LpHqa{%N>KfZX6giD z7Jf~gAAeO1eg>%oM}E>xrN=(Z%YtCT!q64dWHpb?D(I|Xj~Kdz5bDqTnHxi;$|$x+ zFQI@=FRu`(K!L50Y`*ztK6cHL==xnS?{O-7NL_{l&iB_FB|zGG_F3U0@=P`)tVVk6UbMcP#%82)D=u>0D@mg z5%AQ*5~Uq77Hpj`=KCPPg}{`ge%8zhs~CM?AvJs8uCDXA83dnlFFF<#q7EasXVpeh z;ZZS2i*$%p?GOt+Be1x>*@ra?`XPadXdyd*>XA@gW^FH6x$c}XM})JGwkkSXv};>m z3a}BT849iBbuw~HH+ga9Kc3-;4WX)Ukc6j)=RI%>hNo6jZNs{0ae9rTary^b>bO-2 zNh*k{r?Cj`e~HO9bU8K~whtPdP;YhT<%lE$W+8LSDcJJ+njJ8FGXP1be0KbRIJH#c z0RK^&4VWgN8r;;Kcd*PcTSBh=2&PzoEKW0LtOVd0fV?AyX}N3}5YcgcM0B8?6(BV5 zJ`$6kcc}`CU!8~ns}TqT;y4x_Ca{|^AF(umCm0BqNpl3KV*oRqbVIsb6ahF7@R%Xs zDpokK$8ACm{5oL?srVptfX!r*QGWtGwU0PNv95WbKDzJNK- zaE#>uC$tXWqK_4T)=v-6KaYw;)Qg)e;f2VApwa`m43MNa0=&d z576R;S(Qi%CZO-D!x+#r;4}ar4mS^&#eb&{7Y4985sl6tITYX`W;QJ%dxIGZRscxz z!S+gC;R+L3&os5Yc^PQdly5UHtt~Y=dyk1rVHq%!`5VmuSC*dvclaI#3j@M%8sNJD zqMVTmQ6!OcuJO0Ec{9|JRL&xe3g6t~Z)?*-g2L*bBZQ>8t9iSB;_Qom;+FHV{TO%m z(?oFKQ-UH7-Ts|D8tji2yaIktF%POh~KaEu_v&$aK9@8xe zTD0+JM?((*kKP(VrU^#@tCEYblY|xHH*my~)*<(UahKXfAq%0EP#7bWap;qnDtj)7 zAeG*tIbdC3-GIp-W`LEHI&aLgULHg|pcDj~b&m4*fiEXH|L2X%y&63gGxUn-xNK!` zb`tF@fZo5bOp{7=V3uzSh7yJ$txSupju-De>Sk_B_Ob5W`I&b@*%`vm{x1Be?7bZA zw<2l;;=Xs@YoFU_QJRVOhqY6!cw6G<%4dtzPy&`mViqqzOrF=r9$jFMuH^~+-GPj# z?XGRM{q^`v<4oH1VU8?j{dxUZ+so0W!l|(JWzXLJdER3B9vM?%4^i%pP;C!U{(Jo= za`=K6W`{7+56i9#4pLW46__#kkKVfn?jm60(mp}z0yqjA9No87bUPOQqbUHV2Be@) zBP_*L09Qcu#g0_90f_nh05L{QJTLz$rSqcpSIp5sqVd@x(cBY${DQAgkJ$;<$(G&6 zqF7~{{Th|C`Sj$=KnfkAd+5NdnMGm1zL6R8qk^{c;3Ab<*;RfIFIsMfj^#Ha5qG1+ z*`2@j_O%)P@j9bTEAg1n_9K!)Gg)m4osP{{-H0|QEvG3>VhVr9h*D;bu1W=6UH{NP zO)VnCO}i_OMJb*lP%=4_+frPZ^jOGoy0+`L<&5Q+*Q*dK(SZ)d!nIO9%uz>o9$+9W zP8bV2d!l#Q<19WBV=B83unw5ZcYwPDVrfw_ju`+809K%2<-cU-KVt#vDLTlD0Eb~( z$6pUzm!5fJN#NQH>4ZC{>jJQYk3_nTzYIwGi(&wZ02VJ91F9euh_Y2*PR#tpQa)nu zCfL5iCxIEW51BF|?7XG?FA6$+hsC$3WTEi*tZ!d|J=G`7X*mHhwF2XGh=tV_a4L_nprXNXbYj1_K~Au%^L| z+6*o0@Ri$^L#V>{e9VSl+gH}lD6p=z-H0+mHOhq8$j4O?9g}0g_#I4s^B7?Mgy}^6 z-BUj(XVP^vxQmys`y+b<<~yA|)p&>lG#q&{Zk~@&Ge1-_lI$-b5y-FTzjJ&8zWsv0 zJ`5h}*X`m%M)v&~sqeIV|0$_IQ~pPuG>THZgxn7^Lq-vF?7)ccRzWTo_|N`(RJ=>> z$Go?H<`Aydx$h8%^&QDPh1*a@v^7!H%pXyhP9b;GrD0X`pwYXKOpqQH)Thw-!YsB&kKhDpl~@3fcR*x&mJ`OF&G zDO{PloWc6g9F&4MGHLR(KIJ4^4uY8R|5>S7h1Z9bD!SrXR{&JUKhQ}jwR^p@>%;JY zK}Q&oQD#+e%EAw|#A1$tA7X{2HUe^3vm(jO0{Q$iWP{~>NY(xSdlnFd0fQC%NCZC~ zCxm-I@m>`V9m4{Kdxn99D*wF`nC1kC+)sdPw88;+3_sW>0JgS~G0j6W5xT*#%}S$z z+h>4JC|Dkdc#J|#7|vWGfxv%)K=7ULpmQ*j3Szp|X-OGpuLKilfXm@jVTK+pmFlPbW~IhC>uU48)qm00pwjDIm;8gmF!j6m=u>x2h#${KuHpMdN6mm%l*vSX;$7xUnDXa%T_Zf>?Gr*8;fLIBbEir(@KZv{kMbw~Q z9}WO;ci+_U&Xg?WHA{LZRKS6dJJt-GL^_b^9{}G@#RTBaXNMytXnDyJx)`8Pamf9Z zo57)o%ebD7o#0H?KO~n7@Dd<|9>6Yt0UZS%aGc8kq0lrBZ~;Id{*csDAXBJ(cG0RD zOo5g;lUx3B2(&MJ9Lg8@4gfb+VQeO!ZZVUxrguOB7!U_bKpC}I#r6_x_+y|H#Xo-v zaLk{JVFn3sR)?_lWAf^+2B!zAd)ze^K>IPXKYz3c$o8mef@00%@Ss03l@h!f?kpAn z!7Y>eDj1C>fCf*2;Le0fWQlqPMFf;=imPM5{`*VBa?DTc@mS&4-b^S@ET~vtdfv^L zE9B*alHo;N5qg8|^RRC{hCR^j$dkeBB$}8@N*nyV+x~%=s-x|w71b>v|AAbE5{XxD zA%;!L(DPQ%NOS}szM_+V)se|r0;H5v0lEVAKph(Npc0adKC|K~ndS&(ZXI1dxyE|c zHP20m73cSE6Q>1nB=^G_YxKAjRz?WYlpv`OuBz7J0et?riOA>a>mk0`F=Zm5;Y2xi{zz_kYSZPb% zHk8EdbpMg1Ce}^RDnyO~BWm+yZ zZ_YP@gVO1oD}!!{->{kT7&vcks~R|)jJqz&ZfVX3Yn^O9=7DO@Cx+u%is7W!<0akU zg_1vVrRqu$vAxHuey_tb9PvP{w1avIQ`Uuzxi?){AC4~(eQ#cb!?8DUc zgiLWoO4V;XYQH(^^deN;4{RvD3jr<27q7JMTT*&t^6Q@0O-r5@5h-5Xgp|116zln= zV!kC5cTArH(GexqzAI%FNO_g)%BqHabi)981VNvmPe3g5af3V3(bcCQu4jQ}xE-w; zA|k?Bz5grq+aq`1av~Wn0}1s*u^3C;sQsCM2>bPkh7mF$PDd)mmokB< z?|FC&7H|_F5ZElF->NthMTK$v>_SDlP}Y-iOd0(utKNQHD|cU085ow}DXpDzv?p|& zflOlphjCHDPpi=|q&aq-!4r-nR_fP~J5Bivw1> zS_DC2+M{8kZSAtulZB27R0RTYfUv>#ztjwaNczV>O}*!U+Ql6-XGg2lXtzfMu{LYh zZT$Vpr;8UQ>8BAYuh9~|T6gDY@17~dc+)qd!^z0{&r1p{^gWnLiqbM3iK7Q}_`yLe zq))l#!k)AK<}G!9@xrOxvl*MAkQx+t3DtJT$bN#qbGm5ynJNN4X8=KAy z!+gHM^=kjJw_J8ChLaC-Ys~ei5yHVy(|EAVWidHLXyX3)Nvy?|IrtX@4&xXOvHJ$& z@==a?pnm*s-^*W1^#%R&&0#w)LDi3?grQ1)^y>)1bxSyS6?_r164##hu@?DxP5rU1v|kHx z%;|5V`*6RHtz5y|wRNFfMlBzb?Q)e>hO`EnZwE$xZjq@6;#K&W`5I2-c#0~Haa9m3 z`|m@+1>4%_@h`l`7cbYPTgoVQ?1@kOK~W{Z@RVY$^0GIp<1!k0Xr}7jk!Hzy_NmdF zOvVUTaXbC)%U6n$iVRE!CkqDdImTA_dLNbq#58b;rYhAX?=Wzebw$t$m)w7|&}Y3^XZOznQs!qnBr7#Mm-f~GMj3^Y1q&)d4TsM;rS$bIfzJ<=DbJvut(PO!z-@-AIOe3 zl=u=8f9Dlmv|jS~gbHID7-N~{zDNJDgw%00jQ#=s$I8PVZFg2ep?Rbt(PLJwt~M7i zB@4XJmD-lxS4sEw&Nsdu6-iZgN7_+nJmS)EX&^{T)#1Yy0nKXNHMN4RdXVa4TF;yVacyzkS8A zV>Dlw*V1=ak}IXv95PPi%J4H5qDUFFc^8JbzTe)^RfKoPF)6@-9>j)8Qg>N(H~ftO z482)yiioR}eG<6Rypo11&Nsoa8!IPg!7|h36mcC83Tm`i_4He9B+ZOz=V6_S>LBOA za^j#VmSS>o%!|`xT-;;!{IEP-+$_oOChFf6*)*C}d4E>I__+HL@O> zup>_G2cpN^%x9jRRd1gX{;8gXdEBV0jXwh$4w*3V#>8;;A4_Sw3!dc`-Ui=^Jn?ML zc{^vj23gjedj>PJ2WEw=wQc4mE`OsxV{hPi9G*zlDA= zUUg)C|NG6vTm2(26ltMSC}-jC6Fxn*snlbpcfROzDVLIV4DY#|SIND%5l4bWkev5= zO4u7Su)33W%7yoim-dOvBsB125rbDr{gr%QfDpONv6)=gkARuR8;R ze9J&}wda82cjm84Lxnfi??YNfkBqi)q>OaD492`qCEqG~reWfX6w>r^f85^unD`k$ zG3l2ef3mBVw~G^g%aM8!0_5%ma(3YTZSkxdjQ>FXTCv|$cw3#*7dEZE&efc}L-wn8 z!6Mu#tlN!&p10aJ?Zt(ff|q^o%dqKq;LEPGoRvNALT@XzrxPr~elOVf3L731@5s1z zpngwaOJ;&C%)BsY@rT%(=2ytK<=WGKAk=ZNLGZ8l4jUc{-u|+$-*=hAe!txF)Vo;~Eo&&OID_;G=_ zZjbQ9huB8`4sUDiFYl)?8w7`Tdo`1Yy}JKJKa5Q$e;BXU+#YhD1@gY>gmO~w;2$V} zMp~g8Y610pik5wM`M#)EG^kCB3B=ldVsUIh9ZhTL^{;MPU*qRlm=1LMp50 zP3Bf^k`Y0AY-SiUX7t4v?GtT&3d`Ex+h=pdBm;0Mn;7YRdgPbwlB$Q!I6?)J zVsFR(OJ9piWQt~)j=md(ec;*PJr1V4`#FMV3L}3rAb-tamtho>wv@f#t65m+ozI*V znZ6{ugdmVo=tt)}XrUA`Hv0*R6`7xh&5@H;H6~FqAbLCRTZ{ub6becdwwL_A+6Ql9`S8{Z9A25Rya4ZFL>+ z{U_YFRVJ;Kp@y1zmDAYY;C6Hl;4z8w3ylyf5An!-&aehL#SWF`;tgH};F^hao+Csi zwa|FPv1y{pm_KP378;}M(+_5ysj&E@a_#rWQy4n69&JbN)w_pUr_sFkWRI z@zQJmy`Nf`SRx1It;z%uuPT*N=t#+>h@}lC4=cI`q2{tU*);5QRm2K-&Q2Z&ADhCCp~2 zeU@3?IySt)P^|cbyWi&6S#PUpI9Nqja`E-`+oIgyro{sooTqEvWX$rsk#n+&Qu0n5 z_Jk}N=tgBNcVLR-`qzE6kF}K|J1>#%lqHwoto&h9M`Ot58p&_@&7xEG1n6_aTuEL0 zF0w_b5^)Hd?J)RSgQN@l8pb1wb>RkAqEo&cJ>pd6=Emsx$iHmAxu^ds!3TZGHPE+L z!CC(~`!qI@u2eYzkkS0k-8scHHE*z=QOX?$9-!|X#(WAhseFPe4e>I`@|Unyw<~3b zn>NBvt@|m{z*=p=z};$@*5xv%B047GvneR-SVvo=L-FAs%i)lbO&KhWPL{`xqoB$fw$jI7+N;$A z1b;aidwR-S(62Ve7dJ^=4)j$W@k{0>g^HZDPx~6#oCj25p4hw1FPrW1DB+TGRArLMae$Za-{f?Jtw`*Z?MUiKqDkoo*dcALs4?n$#uxF@0Yxx-idPS>E?hi{J zk(V`(jvu5 z`5=oLrnq3|l~lQDFE>mkH-Si=ErkrUO9nSNmhyd6qv4(uR{YXMjFtlpY^jE}_}tKU zx$v^|y6c~&hK~1Sru7DqpvJ1Sa4J_5l4hh6wapmMfneR!6js4+V>l^lTN{m$g-lDG zw@7FT^)NAs<)eOmtLn2d6_LvJGi9isQ?i$I!v}@`IKWxHrH-YnZ(F&6NoMtk7NL#1 z=r`;`iELxf@41?1hzEl}u=N~I3sO2?9gu|U5BDp#fN$Y6806C2a2zn{H7N~FMen-Jjpbq z7aICO$?@^_f&OjsKqQE; zd4{@LXP2BL5l{yM8VM?(e*o%xHb7@zM3d2N#j!!LVBrI;nZC-*J!R}=-y*jI<-@rP zf9GP-1doou*o{JZ$M3zYThH=e!TjHmEXVED8Evl@+6!IUr?|%n_~)abcUGADQ05(8 z5F5Mfl{f+q?KhL&L)ehQBoKrKD{+DfSZiFC)|k-T0ru@|Nf~3^wB8O>Z1RBiOC|F2 zislE>!H3V#_bhrytbKKg+HMs-v2@<9sl;UCI@fm(YOQ!?pZB)q*LaU}vty5Y5)N{n z_ac&O({H}kj_G=r-CDcz4xX)4!*FW5k7}Hpde6OJ{|8D;^^R){dPf96%HBQP+NV3% z#ITP4?|aBjRHoO>+F~7WESd~1xnq&K?hoKtm!`RcYzYgeX(U(Uk1hkDwawB5$Li`yS{J*n za|%r7*`8rvn^>EBC~<0wj%Uv>Fxl__fk+h-QaOV%V$NMhB6LyYhaZh}Lyg#KMAoVH z8y)aAeX00;2s?eDKcnL?jZ9{!yryw^fvby*Y|}HQ^~0Ngvnrr;JIcj$AaidTU0`Hz z9euLmooIVPYqrY88FoD)nM2x88D4g|zBU$g;W?>{800-)jyo*M)B2<8vNQA$6{zD9 zR%+;TC&3gaf4XIleR)J2u(dnLZ|8&jS?j^(Sd;1>2sR$+ALvMtz$yRDvF`+9&P;<{ zh+SAUf1wZthWdtc@6#s#mSgTyoa}>}_JSY}rWtQCGl6s7n`6M{iF?`7l|tK22L{b2 z9?VeMj}L%dGEZFpw_bWdyj$r(aNE>KnrJnXA z8}O<1n4=|8Epi^;y`erfVrtuI@BXCxDGIjj|NQ`(i{_6uLy6a!=w-+&p0#86d9iz6 zT(_ZS0xn}iL7unVTz{+FWjBR~GD3#yXNA*>K-GN5>j50mmUQz}ggxgy-r;9_B!-CS zX;I;t6jfYf59x7Y9Ub_kIK3}T9nEzSURX&q50VY3wGMgJY466cMasU-+q6D_9Q)bU z#>ToY`^A)3R;#gM=K`)zqP*vXsN6v}P#4;kJ_ObewwB3cd%(y1iNwW6wevldX7y4+ zw~4~mJ5To?XkCfM=t1=Ic1@x-w{{NQwTNh1u=H_YkJWE0F4XM!@rXh~GD+}99Lvz& znfX(hO>MX}&c)cd`Y%`ZE%t8vozv$z(YH6fq1uKkbQh!YwSl0*)^iE*gbOGH0D+J)~$QUveDED1cY=!@3=BFjQQ5m93PDjS{%QP2+I$>C^>*(c45 zn#AsH`=srwdppPGo-~vh%#gy*_1)++T~eMjg2pmEgVfw};Y0&faf^BD2j z=R$wf5bRTZgo45>e+7wAA&!u*hM_nD%VtRfVSS%a@h;YylRM~9Yc4j-Ps1mI)kbwHW(}`ZP_W@E z**LBBJd(XM&w0gBfe>)XchC0~Q8OWecbF7M)$q{40Vl$SZfL-+6!hmW28Fney?1a9 zOQmHcc#-8Vx^csbh2|MXk5Nwi13{l7bJc$p356#6#Id~t$1seo@%)qV>+)&d9!vWR ze*PgWU-#U^vIeJHNr`IL}Dy7-N$Ga`r=rvLzDVKVlFZp8|uv&}< ziNUInW|(1IwS-|Pq_z;1A;YAC$KHBrQkj#HxDqy%txto(m10P@+T;-xVGjD0iG@`bcVi&2jHOYBfij^$z zX~;WXW2EIno$4{W(y;iMJEc;RZ0wQj)izn#lksd2SvHS6`*&QVmoZ!A<7{~x%RlG) zvxOJV4uzow&`A>tqRi$?%KZqHDJWX5J+76CB`tzHzq$y(9L{dAB>P+RkR#9LpiEQ& zluzWN&Oyyt(@<=JNDlp~c$3rLubrXT7MJwK%XHPKQ%k}N`9x_3*fw$TV~v@s|I%|@ zfS9aW#`hy<4F6V%997+?9at);7nzIKyl!G*soNkJgSI(90BD|h%to7JC33Q~jaI!L z#)Sy8+>M3IpXXK;dY+@f``Q$CZdc;UTB6(Vfc+rZ zqpYFzJXUmL5&f;sQ?~J8`QBBPA+92NkUOJggng^ zF8t#Bj`2TU@DGA&puF2fS3oj=QF8NTkS??k+o z_sHUaa~e|X8smo0oQIt5B-w~Nx^~Q%E2;}$uR$%BEWuSfFVRCi68nf?maim>xdNCZ zfql?;$D9@G(Me;LTkdcp%J{ckm}l*0hPhW?gLSgyIHzq}I?X7)MbS`S=Tod2`XcH12}cyL{c>145ol{<>}hkdNc^2}};y8i7v z9~BA{t$YoOU|RHfxH*s{PG4}Y{Ir;v>4A5$*w(bG1E-?UKdhgiA+^*Hk;`xK8hfHv zvj)Fu!WT_4&podYhaGn`(zaz>qH9UW?nL9aWVt(pzBl5rm*^whn_@_j%3M>1yb5W{ zt#5>>o%EO0#z?k7eUBR4>KfMJo7ur-jSCx-Mv&flQHoj!4?FQh@>=q$h{>r*t*{Pk zKD~$HolHCQsy1w=MYwfwA`=_OQnE2f1QQe%f#6@@LV!}o`<>T0^=_8M=^egFIyt-W z1dRyu&-ED9bXc7xGk>oq*aq@T>qbQ$(e7K2hyU9Z8^Efm)y$icg)`b=N3c6c>|vDv zeERNzzZ!WV=f;nS!UIC=XRQasYBl~qmr)_pdvI!=d7;kLzV(6yjJmbn#shGcyeG}D zViz#q$2KNpxBcGLe;^5G9_b$YxOEL{-+^Rx)zTW@&=bN+T#fHnZZJW9#?9RRo~{R+ z+?;CD2cDsGt%+=Oum#0LLv_g7*%MfKHfL~yD|g&$=IlzBQDSO3ZrY09PVw{6U-#wr zmGLF3z=G-`_H*pcFZrPwCu=cF;T{+jG~s#ePDr&~jJru^lP1Hu$ zw>$R26?jYlm-)KwJXRR*+&*F=wa5Vk#dowWkM1wSoNHgQrQcR65UcVQhjXX~=}Y&i z-dIp_FU1Xy8HT1Xm1wgd7PCerQdDL0aZTs60w*F3R@(M6d7*7fXk58^P@MtQgZfvB zmEX47^0G(?EOk|h%-I)k_BE-POvrjGYkwP?Aowp+!=6Kp&PcCIdQ(3=5xdUyccO^05|;+T4}~^}voDdm zdCKu=@$_S~4^%axH@d`a*6I`*G~AhfCAN>e??2OzD9kdfP23VK*xSr3uyYkc ze2H#=N8cunv!T`oTieQxUuzTEZ>$o zO_Y(3@DIM^Z@l1x7 zOX)_39`M0m17v=%|J=Ohju{A@7A4A<7sjE-7UmId4Xh70NooRK4+K{JIabiOBipnh zyUZ1>g0o}IC2@ZFqR&u^+Qxp++U6m#uGQJQ`HHr@ej{|aReAGiA1D}()Zbc{z3=>4 z;LTh2h={t5Lbxb<70P#;ZH?VE@&4oD>}kBsOgTT7Tl-;9?PCUea_*HT%*ir|@Shiy8O_ny&+WjBH^72B;iK!MXNpevJ5oNN3t|uk&nn9B9lIGfvW4)g8K!FH z^XpmOQztDgLDSHT9vIM4Syk*PN5YBY7F~t&S!}W;k?W5Ri^*K5e`e)a?wW3GS6)fG z(E$&KMHt3(%{86QrXg;A7se}D@2_(roF@r{`hmqp$`Rjv1XDgzR?J76%ATb3$Cb#$ zPJh>8)HYs<*^8_?_Qxr?|I>XL?U+52s-?NQVhisa*F;L;JMP9+sCkz+^G;vTTTa+o zp!H-+!pW%h1*Lo?Tfd6vE8@?ZxTrjr!wy?V07=-+W+5i8@Q??{}Igl z!)`~Hd*{^IQ-)X6=Myh;f=7Grekva5{nvTk%Y9&So0gBJ;q)_KN81x&D?I*2^1;P( zVe$>oaM+XjPXFannsLAQA1H|RRqqz^geGws{q17X8cevl6TIu^|D9@Z)TPY-R{aH5 zL5%;zO`OKWe>mjz$z8lbjkJcMq+5n5xd_Ga{G+a!81kj|CS|qh)%3~vV(@%#=+Ej` zQ>~8c1(wZw@;k!!tFWO~1j$dQx8%e7436wKY;R^1>!SRL-)v65(2MN~H4mm}>{q!8 zj_JFxPuKwE6J{dCRUza;+;(A1j@Y705|u8)`F2>@S2E0JDT24=KJm>jNJjjg4D7`EY$a3_rv`A2`p~(s@{25_mw`G| z8Usc;HIapz0ya96xZ6y5b9rHVnTIp%LURpt4kB_4ho*SiN`gRb4T?Q#nS@{Nv0ND zns{ruh*f=AojZ6v^n(e1@c0Zyf4wSs-8=Ze^hF0nMExV3q~vsYMV#~$p{7oQ2)`dJ zlSjo`xW!Vb;&zS&w_mpI)x-Kyp$Td@_a0?)@HhStF|OwH_OL=l^8 z44Vm!VPVLVZ9e)j3xCt0LSiNx0}PX3G?DH8`ZGpp@I&^Pme3vHz+Lp}7rN&KvUi2d z&M{yFihP0Ml3)*PfGVqi#Ydq*Q+sE{xJbU;C@IJ_lq+)<&PG=scF1oKuFWoq8p!ny zt)?xH{|5>k&a@TohNiGNh6xFFxYoV3AKkBG;!rIH5HU8B2`!+#`I&5c${SkE`@iKS zU3#V-qQ|W>)|)OZT?02zHV?k5uhEaTl7bOkvdWC)rhVM%noQ$x;p|tcS&fIVk-r_v z3A>uua~s`B|ux2at`r?%@V(AzeUpBNXqMlk(0SjgL-qi#!sFk9`n7Gt7i zl=?LE;TT~|Q^~_cQwhD~?1Bs&D?7-Kwa^u9RGkZb`Jo0+4c8jYxj!`xY`~7w-bTSn zPEg&B!0T!%$cWs^nxE6V{@hZr2oG&mvf?A!>iCs0H3CBBd#(7xtoNVt@qtwhGin=mn5We^ zKPP*LHg~A}PTK5eC)IMi-|nGvcZmU}#>Hy=cbcRNF={)C^F1d~itwtpzrJ6qckN&7 z;S+q|S!1oLt1*(QQJ{TuZLV-ilH%IAYky-80K3h=he{Sa6Y9J29WR2k$)`CxyfEpc z9vDg98)zG$^8rg?QLSV>j~S^aZLHgKVLW|C+pyaa@O)A%H|Ev*Od5!vtu(xn%!7*;*}S6*}TpHo_1V%u1i>iwxnh+CtmrY_8+uIb}$xV1GRwty_u zuIFw#?xi_kK|F?wjQ3o{t9jbnS*~?>;0)<0clM5;R(jXL zL(qwOhwtiFOZ4>zXfr#_=z$9L+e8PPRR@!*N*YDxsN+-XCAHzw36TeIUk_9yFlND& z3w4}k_`a4kugJ)FnLYgoOqOUU1EXpEgqPEPYjCfdY?e9cZB$Xpo_rhK7K@ej<#V83 z!Adq=yjr}aV@YcMWPgq`uJSkT2?HIyxz&)zV!bh8#Z(A4ra(RN#%^^*{3PKS??Bn% z?kNUKh69`H!MWY?oTQ41FTF4w%Vk!zH~o!+yE%YD&u3t^6Fj>>xGHj_ee(`pSshMr z2MSZ3L3Nce2-^mu$)vu?pJ6>Pw;?a{;0r6hs&l4N-1+YaZX8;@1;(OST<*z{$aEN} zP1^buQ=FT^G!BTRJ@_?HrnVexdC~adU<1bZD7nW)uzqKV!2~0SDgY1JLo?Rbi0uP0<(1gM@NHJ zP(zeNCSN#ysD=;vh+@3Jt|SS0&#)y!IfFoC;;!sJkoJH2=X2Cnkz>!=w(FE@VuG`O zphxMqZrhM_Y4^74rj5HibNPE@?FtIWs^aD8EQ;Z2AGpDi#2*7KiiC0s=4&NQC@qW( zql2Y1`5+{DI5GFncjw}l{P4g#0r1o|6ulLbcm39{r`81w2!Q?elod>ofJ@@*+Da_91bv4_cI)#@(aT)5N2i6|>0CwnnJ#U)(6x z!^vrh2^fr)`KiK#t?he6kF6dE7=MxXgod&0M)R7Y*Y4R1IqicuJp=k1rr(a$R-+Y( z$oa(Z=h<`=I@f1PfPd~<~%6m?5^5qg2y&t%sZnyyjj24K8NB2dEn>g<`oq?*)48){KkS} z-&A99-f@E6oh_h zz@@0owAy}C!x+x8)k4Fw2F@zp7h;E_3L75D2=l<@tRW=UAzXD@|&o5a;AuE&9Y(3@GAzL@wiYeof^v{80O)4wii7OSlldDY!(k&=l?rRF(~aFz?=4YA*zh|5!$u$URzVPpytn*U2h z--t(`?<}&PuI^C|H6IJ{mz-5YHuU;;MT(1&V=A0IgVD5r#^Ab&)#u6s9{wq3&0KXR z%2kcZ!Y9#858lnV;k5lHKgWW#IWu`z?`*9dibC@c#g-Dw;PZg;unkilhd+En@mfsA z8LHP7qp{6$o%WE4snO7&bTDnWfJWvuV0tJBZ1F9vNuC@k(C`U`BCM3@$rT z6}1DVU~}*0u22nUfJi?Z6|S|lt+t$$KSg}`j(jmQM+F|dH6}Qea%1EGO8TnT?Vv?EVUYDjujb#5zo5n0Xgax*J%3VN^|JCP)3b#{6wjr34bW%Lq#=5mk~(G%JDQT6&6S~DsD&9ZpL4=q ziW8k_v1i|Bcr)+0#igEuGaOxnU2gj>U*%$PdD_K(-~~1)_k9VY%)cs0z)ZVp-5^q1 zgD;zGGO(-Lq8$r)L;D8;HLG_^cOEBSxe4=2Qu9M%%qMn9GmV+Inq}?LL_~tke_M>U z5LVky(V{fxFfrq~DtRR7C{&v&7G&SyMMZhuFQZ__-JH0s1~vq;t!rS%+BeEa@f$7g z*N#rIp3vovKgKV^g_|*&eV*FG%ml8A9w>`yo|P`|LfVmyfIN{t@mc9IalaLy6+K`k zZY#FP#(;Wa(IeW)LuJ{MQ0@gqrLSm5=<>v$|9+h~Bhwrh7`@9HS-JFX*b&Sl@AA4h zj`{hqY({=4L{5;4mfj$iY~7!z&)kwE2a=5tIX37xPB zW_j9Q_1E-1uRP%W<`J%xzVMiehc%;yH}3<~N0hy}*JNs`va@O~JjK7gHF_Hy!L)-< zH*kL&jZoR`wbfdzFYL8NR3k3Lz8!cwpOMG9w5=kX0yg+Zj6@fXh8tb+Ad6bW^mP zg&S~}j2ww10i7cY0Zqd{5Lq>%x%lH9!wxT`Mh8&sH7$BI3n3f`^0(gZ$CC{Tr(@**P8`7)1G-8!2d%GmH`L5{v2!#fv6;zL6y;S8-XfLCO%&S; ze{f|KuG!GiYKebspbY&b&o4niz7jMb^?;q?5*%NT&VaF(AjB44L%08FIo*M>eV)c> zy|qYEid!nB?aO@NkONobruVl~FOFt*?VmU}l%}LH>+Aw{1Ly*F-1Dfh7V~jB(A;2d zb2uoGDxXr0ubrvcch0}n*G1Hr!R;exbBWAvKYB8A!+m#E4IYrW=TOQ1L^?CuubHAu zpSK_5_k(r8DZmz9*l)w1T?CD~E%+bEGUv6HR+}aqx8U!r*<=vH*MZ)^9jQVs_x*LT zOf(m`KaY+OTw^0#E}pokOl)i{DyBP;z`HUM8lmdK>Z09fQf&7D2>O3+uM#GHK;Jv` zir_z9uISgk>8to0265vsEyiJ||4^Lki)y5ib4HPRBDDF~%yStQ9ytq5X-GY0eK#>G@cMtAX zytq5XA-KDpFX!BQzklw*O}~tjSW6^hFN(07G&mgim{@rc8&cJ%;OopwYvv5V}S?MNrc+(wiZ%U|(-v7U_jGs~My&W(|Bnj_nn z?i+B*k^;}AglS!aVHYuL6kBGnc6$41Lh4xGaJ}R4 ztN+h7G9K*9kzS;A>9{pV$J1T!6MlpQC$w+PY|b{q=P-7dei6>z@7Pd5=a9_kI&EOl zMbxUGzEysj*FxC*)y5YlB-)&Y*V#{C%t!axvXc*l=&jdPI<4^2>=rU|; zyEUH9p<0ps*9r*kh%Sj#b$x)zru%Zj>P#;$6deq9ycv{bEuHT~si?WdgJZlaqfUkr z*t5aQRpvbjjX`}*&uZxxoAoy~vX>SSF_-7-bgK-a&u$YWs81$5ZLC<(v zMz@6I3g%Dzt-Ogv>lyMD8ZuGS_JDdHo2)AFwby+66;-X`Fn0B;W0* z4-HPK=e}3Xhc0Wr)ojlyja^i7pQ`5j!y4RENZ}9lp{RXdRqOc9>_{fAkRq-#a)b&r z_cnK4>DsoYG*WZ}LT)QsU?L8l+m2t%#N~~^FDg%=FB=WaRza;B;W|z0P1+bby;N3i zo?|lKV>_Pkb%DFCZy-GvNOM;l^giULgh>&+qRpyFa@*Wb=Ng}}Y#rC#h5SUk&M8A& zx#(7GNY9X3PY7lawTh*xb3RE1V6RUP;aE)G0O_Mj+MkAm5sPl6LE$0PGqEzN6EA~$ zg|Ien(_nG195c1kci*7#wP{a^-`creyy&K2fmBvffcZCaMNnSVJ;ILr$_S^%w#5;C zdT_Xl6M@0%sQAy;?n(jR6C{w7H6EBf5Ss-6>zA?W) zSf2g+6FfBB5C}}BNRy1x^+VIbYgYC&%?RJ@T}|lzwNoZ;#!}PiqgI3my60OOXpvQ- z&V^@g_(G>P$obVZfplKQkW+wRz4+a%&(J}7As{-saN2XbJ*u?aEM86_eVPg^nr7!@ z87`91xOkP0R5ep5;5*>XDk@TsBGQ5!h9dftu(PKM5w!=PAB#GLkJ7^?x>@ui_Mv`# zE4A~~&qVOd#f6Ie^BjCY5FS6#iwoM)PDGp#L4-#PyDz4F6{|I|PgKNWDGRZZe(f$W zGVA25eq2&KPRoM;%`@ae#MmM1see}dq#HTbvn$Wh7gE#N0 zqB8YXR|_E#zb}53ttQiYr+leP}794V*iCT>wgrP-;>`|-56Kml3IEqo@i zLsST#NeteF)WO7H1nCsGs31j1G_@jA%V(=}UH`;tuM-E&sWaQ-XeQEHFO3|eI!J2w|@#LvgM=~);O>5`%zFi!%X#r5$cZ z(}Wnx^P3alnX1~?9bzN7NTiYX0EAD{4O&Af{Gw3s&)#_Y#M)pFEl_V~75X4VdCgF3 z!Bm4wU0uw}te;^&+k@le6PN_%9h*#Bi2gX3kihBP7@`!lEX~e#6YP>?5x(n5^3}km zBe6>u#+$-Kx{-h2V4#R`lS1~4;_9wC2J1inRrjT?cBBEN$ih9A7jqZrHfK$3VX@B1 zQJV552J;`d!GC?Nj_AV_Qado4Yv7JJc9~Ig<+$&uxQnmsQ%(m|997tC%$-eq;XboyWU6M3Dx+&{8*Z5TO+* zW{TLQIaV~mbo#<+xIl3#7vfCPQWK~!P!be;R>IILTzCPNhn4yn%0|PYS8U5NhXiA6 zz|!%HgLlcIVA7R4p$WTiS!YBVS$Qrs-ET^4BB?ZmOwF`k$xf`(rs+F4w-MU-#S62BX^*>dNPM z*)$WyNfA;<6xV&gmP=2-|9sgw=K{6-F?DlbnG#u1NOOp4j{(;PIvC?B%W92Le6T2E z%l`jPooD}9byg>iE9YI{?YaW1w*C)g)K=4QXdkpa$84ak6Gv{jH+)prlo6S-FYue1 z<)dpCHk<@9WpA$X91)%E4e1C>`=AtPSjls#>+Cys#c6`%WbEh)lQ=30$1>wmd&c=6xYGqT_8Bzn(1t>AyF@kP z8bkfmCSf84E}1YtD)B8O;rXfY7~!g~7bXMj-1*xTy}i}C_~2k6m3F9mx6= zf5737MzV?8Iy03ls11-^rF+g2XheMY9uv=q9yWa0&cV@u>0YUnk;qM!vq@$!uPt~| zSnRLAGIigCOxOx?p%VDff}4NyJnEwq6@8KK9a=P?sVOhA5!bqVQN0t$sQOyu^iTx4 zs4)vcf{`Q3|A183|YYjeH z#G~-W)$ne%P8=XS-?QtVv>M7MF=_J6*i?E0g{p+A`k<^b-Tc~y+bi+MW{&#k>l!)*@Q#h}ycw~Nzp zJk!>ZhXq!ayOB>3{MLxSea~Rv

r?aXnx^?S;>v+$3x1GPt*R(6sfn!tFkSJn4Cj*u&IZ&w1khmwFYH z^M+J$)lr*nn(g+k)*`OmQY<$uI6X(Y?Ed3~A~ z(&K!s8-VOtb@RN_x5p2esZ|G!FXnrs{Kb7#{vKfumGH7Lnbwq@Kx>TcJ5ShWllnlRusmNOEiTH(5OaKrLF7t1uV-6( z3F-;g3NdZ8(ntlGU1m4f#@jYF{fh%fnOEm(r#g9$F!Rjo9!NCWS2%Md+Ecbh4H#V3 z%yTl^gTt?v$@V0JpyK$9au*4kvwmj{v@HPW;yqFmX1le`EO%p*UPTpoqpWMU=BEvJ zTXM_;N$Ih;Z=7@sJ;mY^InBOWkmog|*a_@x8t#EG+#GBlxY*dco{DO;vRq!tQO0mL zv=_G0#qwB=W{++x9~ta>Tjy0uhbhS_UFbxc6N+Dsvt<7O zlR(j9+awnaJ*G0l*jD5u(E}>dChB_=;M3aN?IL)7OBLK3*&|2~i2HVd)JlUY++>*( zMgoqAjslR4hhk8q*px^?nvM}z5`ZQgGf{y+#9)9(J5qrWfgLc6M+Fk-%}InP5s_Mq zm~<%8j>JYKScQ*}%}OyQ)T0wIn5ahyHl+dv13}T+h>jBug&2;A#3_fsqY722HYEZE z3k;6LK#veYKag}G$SkmggoCuDSW+x0K!jmT$wE>|KvN9ZAqZH8$qONxg%l$pViajY ziqt6r!v&W`1sdrB1=5T~Oz|50qs&w_C9*C=v}wANP+YR`N!b=ft`7_)-I#Z2b)UNF zeUSTA$JF$m-jl@RCG$tH+WyP68@O+`t4>SdESm>1Hg&HX!fATPp+1WoeXd*p=_f(y zCdwb)>pbBpH}Vdz?4MSooT^F*cW(vRu1YW}#t)2K`9a>)gYPQ@l@=FWJ(c`!sqrG3 zUmi^I?ORHon_t7qag*;ClspbYody|OOj^+-&1{5f*Gd>~ebyu^JUkGH`!2m7{{SVz z-}-fBV^Pzs39LM49G}SP?EMM5yQZpAoE}zjo@lHWpfan)Cl|3D<==1r03|m?#XULH z=lh}k0b@({qopT=rr*H_SI|59eB|Pn%+;Wvbc=IC#eELqb?Wh*eHT(K;xdul5)RQZ z{Gf#ePui}TOPxw}68`|y&6lD#E2QH7^FxUejSG0x@@R?Q8mN3{qiWVl-@y?$dP<=1 zzlo~KKwjnv;ToB#?(CzkNXQZ}4w3_!J(B1&kJ>JWsmW8NT}E%pUa#xO!Mo9Jt$E5h zUjm(E1rjNN+>X65G}c!`pJ>2V6e$Y2u-jijadLDPzPk4&sU--xb_bvm(gKYY7z<`o zU^rZk42q$$KX79z*j{@BZ*qHqPHK3xrykGlzw%r}y)Cqaw$3t7;*NU0w?>P^(_e9{ z!%&5FpMbEBXZJ(;6B@n`Q?M5}mb7nkT`fUYvp^3UY?gH z9n~bFz9uwvdUYkTl5!`ca49iF)ki!vfSo37`(2maZ~;4JI`O&J9UUN!!~Xy^ZW=!m z>Z(RYqPa4t9q2({j(av8`_%)fN$Urk`3A__ADy z@=|3SghHsJDTHxF1sI|PXchtxv0w;>U|kgo1n7yFib^p>D9FGiWzZBUz+rBLIR(&N zA~s<}aYimgx*$L$3yLWS3z7k#*FP=1cu*v1m4ZNMb7r#>E(4BOo6YLH8y{a zwV*y0Huif1^>c5%x6;PPMW0VJp3>z^R9lf)VJ#*ZIe^%<;DZ~ENyEDVA$z5ZdZeeNMMTWM%@zid=2d0lTrw7R`X=%w~ZI#X> z9L#AKBGl%*L>aA}&^80i_cU~n&wF>ZE^ z?aVb7>raHuE^%veG`N-2H8M0_1Zjgg+gQmR)y+rb|11%lz@yd-y zM=~yhym`Wrpmw9Yd+INhteo0DpH!&R>>^Y#{Aib7)kx7ak`|Cg@NPWHS8nDy>?NZ| zHpigYi`zmwH)x|`j2l}+VWW>u<7aO4+s>qoH!u<`L$aIo8@ZnI$C-2yX`J+vM7-Fh zW--oae)c$#mDd`!&SkB3n`_jaQ%eh@ds@=j3!`&f_gptCUzwvQ7Z3U2abc;th{MI& z_VncsZ+kUAfL-WWhsk1lgTB?x{Fg?d*o$#-;2d_^bom>N{gSq-rvc*1>4#IAFWJtw zxUFT%onL6XOW8G%3X#T!B=)t8Y0AeJZ2;3SW>V1OytEU1yNLjhY%O?l*W7FW05kn3 z<|>p{W{*xND#?T$l|0jKd(Vl(+(440a-MYpF{~Yk_Nlvzp*R1auH}2e7MG32>0Y3r=WU()eC_Te!8|0!Ys> z2ogp1Z3C#47y>0E z#=xUWRi!s#R3~7HfRqU)6rd;v4APVdCWLmRICNxCj*v(&N`#Y2R3T%q>}pY=5rHVs zgk%T_Mj`-@7(&KkjY4OZUyJ_NIaV_Nif_egP9P{Nl- z)qJup3NS@R1#BF{1SS}*9$=rWQOReM7I12w6mU`2BqkU{q_k%8wQ21jk$*U~*3`zJ zyGquSaM+)0ed2BEq(8ALYn`+s?@TtA{Pg~jty=Y)EP?Q;I59Xc?lCbKSh?SWnm@N~Ay z*EKgb$w=A~nU}oAl8VAUGnGdtmd$y>-V2ukRkM?pDJQGayq7hZC5JY-8uI47g8sBP zG=aDmJFQ4nMR0qOxRRp&8$Z;;`_`{A^!mz_w5qddWphmKJrBL9Pf@28Cx^+SdSTS7 zMe?txl*>s2URx1{SzgAthP~!M#+L!*Wegx*_PMpLx-$=@S~rwcC-CZDsK52(Uo?Kt zslwx1rwOFiA77E{9+}+A7E;>r%^Cyu3gSQHq;MQp5TbB>HB69^u2#IdBW{O6{Lwge zIfZRXY7t?gC1w)RH!rg;G+RrEaOzWwPvDQ8p?y{lDo^n@k0!oTV-R}kJyuQcbl9Fhup*d!XR!yO9>;3ZIzc0) zdSQWL&6*geXOSc^PS0yA8upJvt>#}2e$+h@hJ$+xi%(XZ{FjuMW45%_C2>W@qsvD> z@%P1xV!dTMax*X$Q8ZbtE;bXeZfGtbJ)=vIMXu$jppxse@!UPKvGF`zk7J{F`PYKe z=)K38aULEEOQUy`*SqxoR)Bg92MZp!4$5BaEkCS23@HI9FuMvv`Z%%y8*T}G2`nspiGev;l!RikYlomsDV%;9^Y4T>+1 zyc3&#&O6&M9?8c>^;n*Os5oZ>ux(%glg!Bm7JA(oD$v$;` zqr-q3mIeIhUc8i_CCdkKq|k-6v^K77WwTM$ad2#*;ia0D+H<47Ix=~rb+_2Nw0Xf> z_0-`(@PmWRb54r2H98Vgrts0ZPUWUjqN{7#9@BP_=N({l1?{MTQZ+g6&dr^-vn+Ht!?DLO--N|L!X(DP;$ zCX`9J8Y5sKMJPfbSOg-WB^0MbY!Hg&g%!m}0ghPY1;{g|0e}iJPUykNh}aGYq#<*W zGa^8kfng{voB$C*IVhG+fMDGLSm1*)bbw}ASm?2=%?v(WvRv-V(Qe*?tBP}hJS1&2 z?U~VufDW?>15zv;32TMh(Qs5%BbAi7hY4Zxe1vOXZ&P-$UgNGe8w|kogVodKPN})p zVLb3J6Z#%Kjma9TZaKpEs-R?Sr(`mRz4E+UGxHrXn`W`N4!I)Xw##Kxz_DKylQWnn ziq31Jc)4hHnVY9Iz>N;&3?|%qbL>qhr7paI!{@x29CEyzw|&D1H_a2zKymV4(0kJg zyt=aID0yp3yr_uiaTn&_t3_wyCk~-a3R3ATV>vFtOgfI zWxi8+0}gQF0DA!H((()1$9=mJgH3M629$92j`8@T41|K`n`N2hp{265)&eI3&l@n( zOSL=n=#Pdi&j+2GM~%m_LF-BD+qPbX}WgpXOKd};)q;8|UC|*`i=FyL$RDWU> z0{YmKKdOMw1VLztRpK1hbb*C*H3j-Xu6c08Ps== zeQza{U^j+IP&j67_g==@XzdTUQK@N8z3z_J*7;9IRmSv;(3ZHjaSkKS4U?+DX)o48 z$48a}zbOi2LyQ)V0)ILEAH3yk1yr~NDI!7I&(2oBv+H|B>R!pMZngga8oS~Clk*n9 zB~Uoh{%876%vET6N2d@R3xsVpt{09b8kd8)#g-8;{W51p&fG#&GEhBjj`lTGv3eIV&SS<`f?DRDvG0St z5pYF_z0{>(PD^}YnRnE&o~PG54Hq%|^stM$oi2!+v7eGNuBDU4WRwByNstn##|%)k^@y0(1Lw_Zs%I zbl}*XOq#AK#-<)SS#91sRd2gK{_WRYaHE7wr;1tRHi|gkE6-yE>^jShng>ZCaTf%t z-63?Y^4|B#?`z<*v+L#&aG^ExJb*KoU++#Aq~(Hg6r!NpvxFM)7-3lL&^La zU#lhl?iE|b{FB_L_>Dio<@&Bq?&4gRq%hw_FNw(dPVr>^X2g4zkgXrXYQCO-vemj= z<)!Ms+bVvZ?|G`Wi9y4e#`+yB+|U02QfkPx57W$!QZtPgagIl<6#xc7`M&N8*804o zr(`YWe!loqwUa6-#5OfdaW-SG3y)TNWhd;zb?sK_hpxjyYINLu(>&u`w0<**r-53lhLV?9&Q322bi*vm8TSNF*>4273;c>U)$G7n<@Vi}DEemULa0)x7}w?LA$I#3$Fc zPP=sVwZpV&)K$NRcpD;cYaO)(qn-wZq@O4>+WU^0j*vA~80j3sOF6>a<{kF!9=W|l zDC1E{WGO+#;I?5rC5jnYIHwW}u4!zJBm(C7T{&GI;7#fEc3gyd;D8x|3-ml@o9+Cjf+ zhMqII6Hl7M0|u~)#C1DQaM<~jy#$)?$ots)7h8BY+)3-xxmW4!-QB44DVB@b z-FhEvEDxtgdD5C144#4@OFM;(wvSpi-p2JVvD|(#H||$154@ML zzEIA=W3R3ox|KhbCpw~;tsvS799a7TbID*u{ig6iRN&tk7OF4dGfGp&Smxic!(HQk zgm3c{=(fa;(mm9)LoYSJ$Mddkc+aF}9qrBDq^fZCxvg*(HnWQk(lSA{$nw}ovFYv$ zpp5&N5{F>5HzAI-fo-qW=5r6c51lDeZXI`yFPTaPuKB#Q5_srE&$WMQX(yL zT>Fq(bF_1q(pYVA(Wn;}gNfrUx}4W~d9L@Gri9}q$&ktoK4`OW1blbBmi#qsRZcF* z%>38Mc=P4*vfbCqeJ^d@s^2q3&R-_yE$w`_()QB!>Qw7LU6!dYRT{*qPZ&6JrIMO9 z>i0d-x4rI+3-$}^*siJ%g^v-p#xKunB!&Ugwx}61kEKKOi6)EYJC3$X^i zXJq)(LtuyLP=Lm}?CfMcuPP1hMn|NhbKcf8UG8&O!Pe&x&^;w;;YAVkWRM#wXFGG| zcFDbvL_?%^bduy?JyE??C033bRkX{IhVe$xPZ1l7W4Lqw0Hu(=PqI~+0;bn2hRvPH zhY-n$Fm4ZmqAxgR)O)e5*TdRdPbX;(`(}ghu4UrG7}(cRNw^A_gT1Vd*}w2!S6K0z zM`yL&Y$MLXe<2GVqT5iOJq=-6)e!02*9SC~yb$KNXj(zIAodkITGa# zWN(Z{EDN&F7~K@-TY=FO)-Pv6PImg%-n3NS8Hw!NZZpQ_$^N>3fa3uorGtKOKBu$bFI+ft6bk&;Nj4wgTuoGp*nidTao@n$!mbS<8j_w*2C+W z)4W)Vl&Wbc-)C|`02fA0uIAr(Hs>_j)=`!lZv&gRWT#If25Cw)BnnZ5Ar2{P9MT-p zTJDE5mXYTgsWFO1{Uv5se3}p%?)Sx{a(0&NoO)d44%8t8q8Tewf;cq2q)Qh}k>1Vh zk*3d#^mD)mpt&*#)K!jQ4r7a5y5p;)9)i=-({Or}vo><|Q_I)7orLT?Jahi9;3K}xy?NeX(03xh!G6K1fVG}QNlwpMwD<;OesdDW1#Iv zU_@#=5RAn_I0%hOfSHI)e29i3YnZ@Vu8yWMhhsjTa`Hfvc9=a-K9^hq@`%x`7!Yot9F$%fwcAA+Q!}K_g z#yfq38hq=+Z6@^}ODfB(D8nCnJBiou`a-0-&RJk$)PSTpSe9HI9Llm_|WijbwRV*E`xWy&A#F6?Ir|lBm{T!}g?NgLwzUR!X z=-t-_;lcEhX`1f?kma$_!tEodjR^FGC{p}4!uA#Qac&!PBL~jT1kJZ#&PSOby%$Hi zS5{Q3uj-0_k<4Aw;ntjcHewKg09z$7z9@O6LvSjZ;r{?lcf8dvik@liNbze0*z@#v z{{Ur+%Y8qd-8sLCJ!kf7J-Vm=0OglVGL=!P+x#wnrv77A(!;41vBjHe+MlNWV;7iy z&1!DcYJcnf&iD4AQ+1>l{$JRdVmeF|cCV+;nF39@Sh+Q}_4Pkd{{ZX8tCJlMa-a zi-A=m4cgfE6Hgnt*^kE_0RqfvbXNx`a_)Sb=qgah5K5r@2jW9`E4ueOD*4|>y84*nTa^!IzgZRsAh1wsB7QS|qF%~vQ}@Su(-(3xiDr~ah*D1;#h zY_v~dWgCZFAI{Uo~*ij_#I^O6E9g54pHus1DtzN@ZH71>p0TfG1qY>CN@F~Jy_)-!Pgcf>Q3c!b!ecH zXkP;+t83U}nXfNwWMy#$gb?<)9YFw%-3wSWrQxd}=Dp4Da&B+hdR0l%-2Md7o<3x( z_>R%ed2O>f+1k)Dw&wYoH-I{ixTP55V%HnU$2H@iK05~9<9>u|(%tv6jGm-CGb>vY zfU$dX4WYT!_qYzR7w9(Jth^TCq?GNMyEZ&Z#>XR`%+F&%H_4`f%_pFXatvq1j4 zv>RT)Z@W)u8U2Kp<$g19VKseQuexoUI*VZqi>v1^)xWU? zvQn#`fOj0JU}r^&JZ^EfQRfdqxKh-(h$EccK?d=io3+rL0dDX*073q%o>xn46oFgLamH_BdUREascHcHq-}`tLyKrO;(nzNO;;k{3xSV+}dbe1M40=3Op;?}gD zYe5VeSO*)OdTx4kRBB~Qk#-ny=4#rgtmh7=IC>mHqVcBAWJl&A zXR)fNXWGp6{zb0%%w^yQs#c#!bA9p@G#+G`=}gu{s}BW^&9hYQEN0Fhs%H*k2s94p;V9Y14L`08@rk~jIB9E7Y;XwMZihNf)vG>yfJI^9HI+MhZ7ParLpdMP zG&{lSBT&0@8^lFT6+KAljww%O)qp&Cq|?l}hGM#_lXf%X7<81x-SNHgf%B5ySdVai zc8_YYu9q~);6_%lLRB?b>mu_gTDB=5`3}e#nw?>l0nIQx*`>wMyzYuqrl+DgY#RQ6 zay!29+N`CN0F3aKlGh7364x~7K?cMg;*u^?l`PvcFxF-_)dx(lw?QXs;udTA z*_8U%l>$O2yn})L1#q@U>mB!vT^o(L>=y#&z&WIV;nYK1)MbQ@(a=Wc4zc<)Bcu(< zuvTsa;D(}B!Fx2^xSetai}Qj94!6mV0Fg;{RzLH!8vv~~N578I;yFqpGj+KvK9 zBe4jD!%~e25T$VZ8SWX$5yjIihbudqz0x0@U~%q3-Umo=!R`x7P)LclwX-;o*0%eu zPf4+`)aX-uV+4{HwM@EZb@oB;sp$}!;<~iUtLIBMpSmNxg7a@&c zxh2jwEzoANt8o7Sg{`TTu4pY|S&_M|nc9~UZJ^ZH3!UAnq-xGp9C7NBxTLe@R$7&6 zO`#~&Y=MRaD#VaVFrjE{3M>dNjt~n1j6#8>Wzz`6bU=@E%vc8LrXwYqQ=k-1I^sZU ze4;}dI^5%wd!<&dQ9_)g{F5E5E@ww^QCH$P6Y5TmFxA%gxy8+ZeUM~8cdlsQbtRfF zzohk(ztXqAC@f4<;ZagEOwXpJA4`F|N1r~)p!;Q}@E9!6ypzyNS1OlR((6*A{1-w; zdhTh*vgCx%98@orSFav_^c$>Yc)=9UGY|bbB7jSblmp2e;j5 zUW2aLE6W49g-BzxTT7G;r=q8+ zW}&jjAU{H?WxW}UOH@)xa2GY`6;|}f(U({^AHnkch^kzxi8_MWkb;YJYp+KDX^I|c zPdKK6@yYc={{XQXXNn$a?o)hALwIERrcdlfyqETmExKcW6nbau{#$h{{28&Z>Sd?6 zK+oaTKTZDt(_-GV6w62Op`XL*zMMb1V)B34Z1-waKlT3Sar;J|>u7)N{fCVx;U?5; zudGj=Fl76cx00KGjB382{{Y-Xsq-BQy7EYE@hY#VKlc$YE&ZgtXg3ewZRoETa60Ci zEf*5<_u&515uy6re;S#094uUq%Ni@*`h=|^D(bN_}HO-qG*CL*NpaYy@dG-=q`2l@3`%LsY zo~5U{^dh*l`K&Ih%^r6`<*rQa+WL06u490E3tY#s!tHw;3tZO@kl;uosIDgAR~CYT zsz@z(ue7Ie_0T+=pq`g9#y57h{ULU>Ypk_b9h?#IntaR`sE;&}TYKC5dbnWNb> zb(P`&0JAM}T21n!RpOl9AHnxA?k;xJ!|2Tb%PdVOYJ-Ay7u~RGQBsdWHVVayE~EsH z#ypeURF@ME^$C8ell!=oW;5iTD zh17jG`^{T6qE)M!{{Z1tA5K2=R>kcl3UT?IccAh9VsHNd63P&S0Rx|9ntKRxn@>&- z^qcV@4U(c;sj5+w5^`O70U0LwGO3PmMX$b#T4Q`)Ij1vpJq5P}cM+=Ir6D~CJqnDe zbIRn)bnCbp3LIi+^pI^E?5$^y$nQOmYMiI7YsO}qk8~cQH-p$#!Ns^L*8|O3!yLd} z1M{?L>xV;!QSItI2hO+j{bsealq)^Z@8*uvN7ndrP^r**@}&4PjhNqS^9j^-9)tN5 zFqjYs+(09^pt|lZqZ^7(%{9pNtD9PPma>GFQ(TSRM?Jz-%DKTh>$G<(BbS-QWJ{&YE9G4yzHlJ8dn=xVy)cH(uVj9mMxu>OPVp24de+F15%uCf$C>0(;f2 ziY7WX1{XSf#^Tp#ZkaY@YDv&oi+5de%lV43v1ofLfnhWFs8YWD(UjLj*a76^GLf-poFAtyH8_*^Eg=hp}v$8 zI_+uc9LINWVfWkS3f;h7FAYp{NGFagu|3-<97E*Glz`AWNg~~5+GW zjIcU+zLgNnTi+qe80~mbn5H7>9{C;Rx$b+r+-^YZ7qIMCdQJpYGL^xwJ83L|t}Yn^ zY2dT9FD(E|F$7%dAyw&k688LZSYr0|QMtqHVKTeiThW|b&PcFUTvKUPo!A99@~Xk? zf}VLj20;UT)QpXzZ^@?ngaH2lep59>? z6*c&z1IeWawrYu__aiWmaU~B69>+EDM;tF}gV^Rk(&o9O7Le&Sjsy@5?{%A6E=w2< zJTt4fWq=mS-~k|CWG%V%`M1*Ma@ z&c4b&wtI)MMrR2&cMwJ(2Th?nS@hg?juv4TI>N}#r&5+1c|sh=OJE%Oc&V9dhg2Ed z_YSs1Wimg!MVIG-nBeCPqlLy+#0+h_UoOfhOUr?@aK^yrXLYaYlRO53NN$RiMTa_9 zInQ;NInzw?TtMgo=I@pJn9J&SkOPQM60O>~tYFC)A&|$u!Nd&CI%bvT#qYMJz*se{ zXv&`MOi7!2hMaA*4U<^rmq#0)AS@1zvN5s%#*pT@zz`fAU`55n?kH9Gv)Tim$f{x{ z&6i>uo20eQi)8jl2KGGMZyAN0Vt8jY>Sng#A&hrNXvetJ+Y7{<88)$L(eb=qIRNN$ zdpCyy9Mh;FJvu5e^+$5%O18e4-c$~Z^}#u}nUgX90NY9oI+fl`?u)W$E;G8I$f9zlkMP{KO2@gdmAWYzSdD0^CYUc zEju-IPPbTTbAH*k9_oh))g^1$s~%W-*!MU4Bqqd$){bxj;{ z`>$ztx|A5yXUnH&d`^-R=ni{70X}5BhvY?tD~Dp`qa%ja8{EX=Kxy_-xO1a_Yji%i zJ91H?nDogPc#dZJZxg-3j4)OoBB74#kVy-?`I=eyYBtmAIg;Sug7}G%fL+WZ)uJ74 zXwmE+Bxat-N4Z9VrXj#5ZJfrJ5N;m>+a_MnVsnW162~Nl(hnD#H)_tvjdnoUcdl`ZNCkVSl+&@6x_M{gA)^0C3a!KhWv*nwzP#Yj%wlGlw`H zW|eYlv`n!Ye88{J%Cyx;ILUHnpC^WI?oM288u}pFU3$oJ)70O}k)V2wLHcV2oPJ2j zI>OjBGOiWi2MpbX;tZ%i?9TNHwvLz{M?T#yh1QgG*{&YAuHTkWMZvfr5J9*g>Igj` zjX_@&`d{ed(ls|yn#DQ1uY>bPJFGVkSsd}kZv}i>qdNtlke4(8q;l_(oq+jm>?98* zK{d;M@V|rYsD<%6OX|ma2?nfq?m8Z}lDYY?xsG&i8DwjV96E^i!QKx@vieWZO?Ssx zsx@EnAhNgI=wrMHd)OId;rE_iaJ!LLsQY=W2PtOtWAIhh&D*VG<POm&{DG%!hb$MMup-mTaE9xO!4n56t#G#p4r%UIR;cWG z{L|cmQOXXUcPtuimKzIo7Z1WH*vr!nIC*Q9hHhslc#| zs&d4Cv9NdxE{g2sPT(yim^+opa0%{h{7;;3C&aBOcWg+c?vyS`l_5o=E{4b!T{;1v zr4*q+REUj*Sg{f5&@2}eT*zEeQ3B9gpdkoYoQ;XyW!7C0#UeHf(OgitqN70Iz=JZv zQBfcm1qekbZj6nFL?IYC6)+|&S#$`H#LovfO85)Q14(pliQ7g8*{&Lv-*dW(kBzA) z)0o<$X(y2W0`Rp+Q#DCoTo&3xG`m(aW*T;Hb)=U603&Zrk`&RZ(vo>6QD~UK>V|0c zfXNVhOQXzNcHZu2KD3=h#_Oxb4_3ogA50BAVfot3*K-=tsLig9BG%T|8||$Unl){u z#G6S?HB_5~Zhg8)Zj4~>WbFWx11tpIis9iG}e3c8j=~a z8eYdYYSomq!2IdmW4iraVIU*KI00gF`!rt0005L))rfTl9mm$#bGwMWOK}Z=duUwr3;Rk~Cs81;{I<*xEt#xfuUfR5R>bhx?BE^*Y7do5O1 z-ZSVvHz4he-fnY!_YX3o2CmwcHmnsGo>ZHdodA<_RE!au+M7rd`52u=!Fe3qeOxY~#N51b+P?w?Onm?HjiL! zz&=^CSQ>R}ocCF+xa%XQsdD}sjWU{6O$jqj$A_{<0~A5c>Wm$u!PFe?U?7{db=>%~ zaSAx9q10tAbXW37(pbwznc{FZHr2k^ELnQ8&yy_0 zgFyM^1&QO2a4c=2kES?=MxSnPo=>xLl$`X+E~c4Whr||$GYWBrVFp4)!&)1jNe`17 z2KPI!pf#gcIDjrne?^13M`doB66X_Uv4hHck3(8FpVG4$#2aB0T0#gV$45;j?W6jD z)JD%(J4=e4%gF(Omk2Q+>qj1tG@O8oI!9W@X?o;v=-km@I!SNAD05W64(+oX?`p%H z-s4JXFj71f(b7NI(^NaoVllVyqzUneu@Q64n3o;p&Uf1qe<}+iwHzszL5CD|PGJsd zEpRt$fw2et`c$E7Cf#VK_Bu8hPtIP#DG#tDM(%>oB*QTsGl;?DfV7a{THtKvxLATZ z2s(lmHA=yVwcs*q=mS|W7m_j1*NyVTJ&ETx)|+!nY)cDtWCv=}F2}UqIUDSl?vd6s zb54Xb=!HKfID$|llA#+IJ5r5FwJO9cOfwC&8XmEs^r>oo5zI8&xQ}AzZ3o)FF!vK0 zDknX`jA?txvs%$|f92LqfKz66Q|Qtqsp*h&qJZ^B(IkW9o=bgg{G|l3&?9tlSC5U3 z%0k%Z1yNc(!h(%W#EyAbB7jOT zAZk&qS_DJN7>AVaBx*;pKDD1@cl_unIj1fq#N3l}{(3rq>RBtd0l0gor2awJJJMk` z1c^Khd~p8&+2!{@AC)psaE~Tq^a4KGNWx^9bsRGifhNSGN+1|uj?_R>j6lZnFr_Yv zLOqbNU=XmCffxk^Nnvs)rxhtA!?0Ola!k2ng3h;~({qVyHCKJ8798tOPz!XbtW5N1NwP_~zjjV-+iU#Pb2s zyhPLZPq(#N6>WFYbDvKm$+hj**K}-Q(>tZ|MSFqNwii41lh#i1t&J)(1*OW+q}mdM zcEuySjCQ3J&J5>)~P=5aaYa+vTOT_V` z*9V?!@|BJC3+3!TR(~hZrZQ`yx@#!xHmKUfS;ImO@J8@^LD3p z_bj$5$;O+MR$e+DgF(io9(g}MfiF>m%^=GhFME!F2;FZvAOJf_0d9^gxEg6`nG^Mr z?~+R!fcYJmv>u$I&A&~Sp{V6>_L2n+`|7RlK$$<5G~F0`eDyEM&0|S2Nc%I@(^BJ}Ro^Cc7O=M*`HGZt-6^sWos$XN~M&m9dP{MnLY_h(sJLJZ^N7RHE$mMIb1e@=-;GT72k@tqMODVZF5GJ zv8(CYjV=`DkGOAB1KH)q==wcUH?v-@b3#bSq_|VcIoOOM6HDU$s>w6$_M?~_GUeGY z>zjS_w@R;1H#f|_snG9lE^WA%w77LW+~o1=+BB)u+eTZX+?0z7nd8*ql2CMMju~VQ z=+L#K9all}SK^L(M%2{Qu){3dCPxdtILKlyc4-H!bdP?FJm45E25SvX!Jb*tP*X!p zC^q{x7Hthtk3TuizCi=B@7?M^`d!8@nJPsr>Lf8)@X#Wz92w*;gqr0k1+wxjqE(z+=rW9);c<0 z2wh*y$o~49;Fd+<2C3=88Ro2zd+-(H9*+7A=_ZMJ3(6Ezlzg(V{{S(ru47v($c?JP zCy(Q>Nfo!5A(4Q0moyJO({{e<(TZ}+lCqv^cTjA0kvcu2YRkhjTbx*F+i*Iw4)svO z2_b!v=-vLIcSXHMil;REo^rdK)mSLLMSq3(5PMH@-dveDbZ4V9vK!A&XvO@e(>nVH zcI@ovPf%+;lGgQ9_X?+j@Rm$Et+i3JXfnPzVa=3F8^*0J0oEbmuW8C`S~S$G?@RO* zs@gckdh47_yX$vxMZtCQI|iavuXw`XUfk_su$&7x6JaYx;7>!_xD&i+dI-~%oUrG< zlnu9SQ}6x2NJGljW4?i-x~1Qi73Mk~hpFk+6-Y-7e0rP}Ju6b7Q;AAHnkQz3>^6HG z$8_dt9`52hK`6oLIJo|F>~vVLoiRg|BUsZ*K6RaSTL;+-qwacWS-kPq?pE z8Lu6z?CoW7I6gcvFP~CR5T<*Dn!@AM8hz4q9py^!a|kd(7<{|A@3!pEH?Zy&7wNL0 zVw`@xrox*40Milw0HmQN~Sm?Hnz96{?F2=5@Gcr#o_MEbw0WNuVyo)fhC^6xXxR}j)@a8$^f}G9VG5euy_p5797BI z?fLG`!TM8tJA<;!Mt$4EMvWeBp7V9JxHZ9$z%*1Z^*LSt01leOKT5RO8M9Byg2@2FNQDE?DG?hns|i>N!c%#S zVOY?x1fy7=ps*e`r*JhR6BFnoQAvi7=AJbvO%i8M5}2ipQ=GBPwH1<22E+5XH`02V zH?N40*A9I%3k-G}*w1G>(Eb2hyxq zu0JI5876s>LzEXgpa1{>bO1U6uhWGg3f+W!%vrK#3bHi5X7wFfdN+4>D;5WqQdnFg z(6|{1G2Nh?jo#*$?izu9om5s4!dEgkLuQy<_PR^P!zG$VjFH0a8gyG*^}6M*(a}SNg132Ky!|u9M&WOWhaNVue^&HSzmz#h|n}UD7X3bjY6h5Gd4)3wmX{*P3!>Flh_8N z_9@fA(#txf;*qwvW5#-y51prJ&fE3MVjZaRaLlk4(=bvuaeE1UONY-?JD%J0h(t~7 zRf$|lBNj}vQ?Z@5PYsK zk>*GHC%Cx#yN6)VC0x{mj8Mv&A0rpFZQe~>XNpRVgs!zLt^)2n*k|%tCs1UXM*je? zC&(*P$i#tarB;%X!0~uzZSd=Ydne{-^(PaT=Uvjy&bIb@QmJDIbKDxycOBgWtde>f z2BpV90aCo5IMr=+Iijg`>R8J$&OGViZ<6uXG&%=+CfVBhqLbk@DT6d4$|Kbz0@>Pi z3};Ty*?T7oZfL$#B`Cd*scRYLRI%E&wYw<1oi?(M=bkmN=@7K}Ek02hk3eloXw`ZR4P=%2M;PmI>pcw@bB^GRhG1hZ z(o$oGPz}9OVmGoDo&8RE=C`Kiz>X=7mw?8NlpymVY0w{L^S((BOWo$M(F>M&A!E4y zrx|M+V}k8r7LsBuEZt-1adk%1bL)xRA&Mo@!9t^fpE6DzAdvLBSefQ)Un9NTsmBFs z24fq|qmjEO6Sq*rz&_X)onomZ~G5wb)=)xVjOd;g(7Pz&-&IGl? zsm(Sc(t)K*-Uyz$6D3Y*waSy?iDFb!g$8>_%8hlF9$*Y0IG~y)MHQCmP`1k9cekMFU@Go z?$6446<(i)a1H119r_ZJah)4Ssj<&@Xbf+ho1ei_D_dCel~s>{&Ro~8(ws8Oq!rQ9 zMCoKVcTKm*{{UMXJ3ZlYR=>bQ=8^MBtK8z_)H<3zb)wB3fGFp>YNvx}u2=l+kF5&URab=k91jX9Wj)Bxzp|%$ zLR2brf0OQPju-Gqml>iNuVW({u5PIrZ4JizZ{MxTrBsk~Iv$X8K5(Kq8OD6{Kt&@= z^y5a0+E|BE9CR$|W4Ck>xojA?^q_vO%+u8Ra^gJg%stg*N|i;N;r2ZCjn=EAe=jO7 ztQWH-*B=stCIcDj_Y$%2T0YNlY&LP%hWjJ;v;P29FCQM5X!XbMXa1_IIMZHev-{D1 zbkd&>@(Rr?^k|=vpGTGeQx{J-=SmF)~iF5Xf|3} z<=nd3%l`ewvZ}%u?e_N*VZmto7T$}LUKQ+}_oM#+LU{)%Y$ST;edzxH(6OreM|B>S zvVZsFU#F_v%dG~DEbaX8Z_0nuia6YjWZp*k4Rk|4=aod*}LxvKT$l7mG%Sd-Twd& zli<|~pR^rOa{4l({C~lIounUG;N+)pZX?z1A!i1o>mK6k$oXMl9?jqI`F;&7Ib>iS z&EN3(ehp{8+8(OE_^O|u_%6p!rvCudM<-I@(YK^}LUS%sEph1!sNKsG06x9n@cDiX zGpOZtfSuAGye0TGEPrUaxBmdu)cpSd!6MRVKDCj`6W|e^uW=_I1mo=Y7f)33slg8C zpS)!FH5)%Eycq6z`^rz$R^jRPr7pT=@@OC$Hk}?jp zYO3S64m+HF_kZfBx{f#K4(A`ZKlN6HKTR+H0Q(950N=Q-f9O$_JY&+G&OdT@=vQIsUF^EqOaA@ExOyF@zy7`-_wOTXI4c?I z_Y@^x0$bVcDLT#^KzBI(qrXCgs^K(8*B`Za=vL$D1`W<&=>$L2wD+P17Rc@7?b!SNz=llso+)RB3Q&$o)vB2 zo(Z&d&yWbe&mM;Up3d;0@Qg6M!K2Q48ahc)Tzhet+9(AjIkijK&Tu^FVRnvrBXqLr z8`2wdrI~!{l5%@ddYn{N=4*aY9B25{{x1`+O%sSEzD(2kFL<_vvFjT;JhD8XwPX!V z;f+W^8q=dqMPSaYJ zS2z=)BcR&aEnmT`GifVFtsLk3R`hwzhn;Ou<(F`_%L$qkIjpogprLe+WNa6a&tz;J zZ+nAUJnkWSf59vTwDj=6&muTuiM^qW4ZnG{{Og8!C~!B%aVXwJf>ieoHYs>X#f1%LZ2UEB!o_TKZW#gD*r(<(ZOyg494s)QkT9yvYou;=* zg}rN`l64RVG_}JsNG)?nxGf^Y5Og4o2wdeFu9Vc*lR9Zfa>3&RLalK72iirL3%QqY z>nuK4^Jwp}?OTtJPAuJqViVHa)PuIP&OW-9Qe76Od5+G7$Js{ZuU>!8zP(!7vYca5 zJsFK9hl4}8CuKLnyc1(9nmmKfkJ_G&_MUH;b*N&x1oE;%B;b;8OB6>0(nAd%#DR+Y zwKuQ>Qc2tgX-}TjBU2xXkNZg*zE*38Ptn{D^lka$%%xM2A`zy>Uq<%2CuOS+4l*{! zV{hi$&|G&((PCTD<<-0e;oLaAHS~(DfC*#y8;*hP>2*A$XnkqW>IQBwk*V(nI8!ww z%$^5ik*B?{Y4W3yzPXPYI3B_*KqE4(Ec0DSqVRPFC5O4LEpW==p&#dXJHhD+9(r|o z;I9fG#i_)x`kg~S62wj26VI)8OQLzXWR~<0_NY3{A5`h?a> ztkkLQFAbolZ(FJ*^u3Xf?uvaq5i;{bgu>@&WI(i1fXUs1qj*gfT9oE;* z;bR**Lje*yPatYiY^{UIw6#9ZM@0eo&WR-+&sH?~IgdC)Nhu_fZb`W$l1V$sCsI@| z*7*<6vSJv(syCE|Pir<`CMS-DNH;`A=E&Y@_2buw3aUpj#jXXe8^Pb#exeA}5pYK9 zr0%6Du@K-HC@x^pj}|h+e_~CuGWwXDZNDjD)g-p`=r(dkwaI2D71&8-jl<(N$s=!( z-D6!^;nK$d;nld5n8fYmSSGR7*|0aNovuCdz4Cj`YKaP4g-6w%-(ndT+~Z?C_Nb&9-=oDJHi;VWte#~ z0$tQ5ZG^4txwM0^{fIg-h_<7IMx&_#M6EFO2|k+$_a!PlNXP!pduki_F+23AwDk#{p1|11tTIfS-dAvQP&B zRt^FMun~h(aAGW)_xA>X@C|Gt)q$ySW7uq(_;3s?JOu1p2sH@_xDo6v#=HH&to_0E zEr(^6OMxE3a%R470Fj3Pg4j%IGn$)$4!}7xU5){SCxB~USq@aZJUaoon)mkxv-bwJ z84D3Bcy|<_)@)2M< z$!kp-l{}YH+$s6KgMJ-w)+{ccF|?H~xQaiLJbL5OA&&Par$9A!oP&vCl1(G!k;X|} z;`hAoB>TV(02%-Q8-jJh-WJPOGpCu?dC&o)V_@=QVAjlUq??jSB$iM{tk9#ko9aPY zrg<)dm?KZ%VnP-t@U?2fCS2IGL0B*+)8&_J*O%=70E3u|KoZ}4p}^gi>i+=Z4S_Eh zR<`988|EE>7%U1;gVMEkU<*7$AeFBE%iU9rp{%zEr$Q94@)dV{Jt)X{gUb1^rf@{ct(JG<=QG^yar;q26Qo z5`Qo7XWY~Nq-Y)(U>j)7zBt>uKHj!{koQAYp|amZt#`%`2C|*AM>L;Q1J=Cy?&oy& z_l4iv)c%%GXrqvTwJl{eMM&6MCX{Az7p8&RpY&-*$Xa}s{{TAS>_dsYCxNgh1VWvn zM+?qIXd@!~Hl5WH1JZZI!@tTR!MUpQxROcKl1U`ol654Lyq>iBwyn=`d(LMPOPqI- zf6nfK+?u_LEuL&~gW8)&#UmpVcf_jHfJu(HA;P(+=4|jkB!faXvPPZp$lcCkx<^KY z5I`fcxC6u5TwX0bMzO8+NJ+cd*5;iIuoLUIw)*8hR}#83z7vZ{42_m2n5AjV$FSMW zZGB~2RL}SD5(3gCu}gP%cXxx7Al=;{Atk+ZNOy;{AR)~n9n#$*B}gOwFMfZ|yXVc_ z`P_Tv)ZCpjcjkm>ZloL1CKQDtEmt@F)S;5bDy)IC4ois3aLZzPZfkyaM)WkBVVz+1 zzB*C@J>k^RL7W#aCSK!w0cmDF<%W5? zc|wdYaDJM*DE{!in}p73AAv(SwIesWdZMj1 zyXQ>_nl;mac=p0DpLg4ya1-=~ZxIan+z`Bnu+$s<*6*;C6F&0jGkliF^*Ex;8^_c+ zFc0r5fl+(6kkERg^wBI4AnU(nF>o`zoy@@dl=Mel)$rHPw=*O{H(|nIo2tnQYdGw& z4rJ4Htuxqf*_+`Ptm+WQiPaU%D8N(EYUiwjO~?r5i~E5?c`E9kv#zHOb+nDLB`G7= zUuP+j&fh?8vdhL$ty0IbN8lOn4R!|^?@52hOJ8sSVMOV+eLXYS3RD9SY}qJkUy36v zGj(DXQ){}Z@^dkN6J*6J1%EnIe%pHsZoV}dUg@ahxk*-64^LOhaZwp;$x8#C_QIE- zh;J6*p2Zygvc>)~wFn-HGzydTiGr<1qw_^8U@w-!Xn8x8_2tNiq|d)A>UBDQ{RJV% z{+K0~wm{{P3q|)J((F&<t_t`SkAOb;+1VguD}TW#HGDB7n& z!{y=^XVGyFPvp_%aOfcLriCvxQE^ZW2oU=?P#*BjP#vMWG!1N&2HQU@(O(*)z8ReN z{bE2OLrt5l5;>S+i36d0>GH~8yP`3oCs^K2$+wZ5KsqV>wDE_@E9vdZ3rdPzL|P~p z`733LC<9Y95d*AP+N5x>X0JRxtS^^O(pI4;IfDmQmMegPk{0bkC}pZl5e;9TT2Q8M zH@k<^04e5W-2VAOC?G62UcxACv1YL}Q9oKgje}x|8n%cMvs*V}J;D+eLRX9(PpMCo zE`is`9IDX(XKnx&UErn^@w}*_qA9{}fZ`7%P@`l}C^@D(CRrj;dVL_bY_g7}aa233 zV>He}0DHpD`P~dW+o5z8GALP;O2_k#)1U!V__-bHV5xix&Tbvkf$k9^nRL0HU?>Vy z5Qn-Iafw*Qc`^C;gMcODfajr6q$Z>hf1Ak@2>WTXn`5(#q2ko8jAKXf7|&vRr!GNi z`TKqDkveFzxTHa3-fKnAUvqY&qw96sjB> zWZl{1JWZ6{MSfALJ*NhZdDoFl`2{C1_LsMJk#>E%N1be|{=?8Al_zQqXFLqMiTO%U z%InTII|0^5`JURZKWvt|u04+)H0YsDKf#1at3NOB{zU>yi`x9)=Y8p*_8hL2AUW7O z_}}J45+FEJ5C{W=P=FcSd1KrK?8;yrJYjCgH608k-y!RNfZv|z84NKW2sdBI@pqFX zW0s}mK3)nEROKWmuCNs(Eh~+0w^-(HnE25E!7vw4?Nib`if~{?j(eo)p)Jc&pfii{ zRyf>?yI*MjY0=gkD_92>EWuWwlvPJ@Wp(XPXh1G`b;!=jre@v99)n*qZUAA`#6uRU z%Kfrd;HNFYX2{=_nO*6q`Zmb;oz;i!_Og<$((lB)lnt8;UICE!+=*lpoj7uhi2X}( zU)+_E2v)v`t;r5)r_2c}WxRo0=GB{=NqX%9kYNuG26#Rg!H@-5G1z|QV-IiDB@p*M zm%C1C?{D@m`s1K(A;4YeXYu*W4w54@e0a!QQmCo?NeeDS)>Vmu(#RAe2RI$bO-y#x zP@<$vSdCs(&qM*v=t=b2K<+jCnP9dmfB{`X*JxMb9@qB-g-6-Life0 zrEw|8!073;i;Qtd%zTAw8U%iONzj|R6#OddnE1I1vi2gI%)&FV z)7K8AMYB&V9!9(kU0+as*d4pJ ziGC0ns4rN+-k@0emDeg_-0ilTH>GjbPY&;OZb&4&?^8NXo+KOfIv>CMO33Xuf4)lH zA5`W+t?>4jMWPMVQ7QY{)F?QoAnV1X6?or8TxbZIIWY>(piojw`aMwZ9Mmr6bflUC z@%hv&eHh93AnB9eB5@F$%xs+t7h>?JM0eI%-Z<> zyNHewBi`|D1Wh@^kQHMC|7^IxJ)MI-W!3m%sRfJ)yVb3Y@12ma3ML`#4AEmPWmpXU zh@?^}L@w2dD%*_=B}pNES(am&rkX+91%k*>B9CwHs8RYRvTU6N`z=k}@+(tkl6a0? z;la>u2F*uV{p?6uIikoYzM1A_%mJ6^KQR-lv`nk?4Qv#PO!;^ZINkKu%oeWULA2U zS-{1-KeD>87sog>^-;4GedK@51Jx`Vbv#+%nP8a&<6KiEjw)4P&k0q4F{2B)JYxvKrmOt%w2G3ClulynBlWJx{6@{G?U``r%G^Hnb~EQm)h-5E zv+x4WPm4I?i;gykXT+IdMx;n})|5p-Y`u=!D3A9ba_0|)6R0hT3t3i?G|PpMo!SlT zXSNrQvxB^}A&3+XKK#gQH+0NmHk)q}EK*8e2}D1E4V?yWT4ZY1s&Z94dL!V;6hleg#Qbb|5rGkycgU@mvO-!6jkZ;;Qf>2z_) zJ|A%up%}3%X;Xg_SYhQ0Ke>&QbO(9cm93-ul6wm;iIMZ$3C_PD@q}GZonvlktYsk5 zkUVnVBaR~?c!~v7k5GUya{B5+w;eIQDwontOHxC}>J0?$PI2|cNK5kTxp?TmM3B-U zQ=#G$e+IpMXeKBhjYGRj(<}YohYfAjV7K{MlG7Q;{pyOFl{yGPD)figtG#t89}s3% z)T=1o+jnxN@vX9kD8OWMIj@v50vn@Yg@~Ta=^5Is73JhzJ~AGmS^XkTlE~Z|)@x ztHT3`0x%bHCf`u3`eSK#U}gObO0!~9uSAofrA#v7*3A?qR4I?wQTP`p>bp?Bq!>MP zxD<}#w+eYQG4j$BtG9WF>tZ7%5O3!<2_dU>%!N(%;N^Meu`|uQ4HZ+^&dIjhiQ((% zk_)Dbl6)OpC(@))_qaa$8hWH;_2MCkua@Wg1SdgidtSwxxxCUIvpRfoS3|c4E;$Vg zWPy61bn01^eUdRZi!VT;&o&>yR25U$?9?W)TZbahITJwb~nFY zgv;@o2j6jE7@$%?vWr9?0m%|J$n-nXWSnZIv zDxCfP3TFz4_;?{%bVkf@t4ERH(ZdkK;kIbR)=?+;J*GXK~7A*gtVk!nc(p=I^(zV7hMhri}? z=`p$EdSXD)RvcDr?XT>cfy+CRW|{`)q#YyIp%}dZa3@ZwXjREOdp|$#H&W z746V(k^o$_y4rlcpA8mdpCMY7f75w@@zs>>8KA&A&u+f$u$4IAm1Yk`o*vFSK=$}+Fxg@G4AACT1swZ=rhtG7jYX7 zis#X*_ToPv0siUa1PJQtW~3-5!CntlU)kA?MaS8H5ksS}2uj+z5Ayt`hqKfhKR3SY z5cD_OU>H9Hu>1uL+{mrru70!ZU<|F`&X@pj0QdTS6*{|qFp z@D9e;4DOHpL7Mp|wok7}d?j2rQf(d##XqRVbRRwxuXeUV1+1`via#2W;dto(>+ZIN z+%KkC@eC%hqqjzI>%)h}5c*aKy9IXs!7QI)?j6Gu4$}sTH}M5jz9?Z!qwV{R+y>@8 z%nGDN-QPDa-A5e}P^@{~{2n#(kGa0hx7Xwj^5+$Nx;L`jq~jH10<=pXK2%1AYop&O z6`$CNy&~<#iR0d5N{}V*EA#y6Uwjtn;mnQtQg@5e9_tGFO!1!KnR~hO$<(T#d4Qs8 zwSN&naf3)g?lzGi?=MJyo%kY6eR=wksdo$9FQ!%bTl100h-v-sbANkVH+8t48JykO zRoqrSqt2gN`o01&oH%}fA}}yIs{qu>*6PY+pOoUFhGF8ZZ2d-Rl_-8bYV=cs$TO5I zeP7X*?lE_caJJR0sp>}Li)!O7to|S^Ku78yWW=y*{vR$Qq4h)It<`1B0)_6V_t~uG zXDED-i(L8TnE)pC`=0u<)FZL^lr2ri+SAYjvi)z#aWp0hEz^5<5s&47!k$Uy3%Gpq z_)|*XSFBNe3Vd9)*PAG%cv0vejLu@*sl9IoIF=qA{?{zM)luRVo$`@x4+vyZoQsL` z^WNHEQom09iW=qTX|};Q`P@u!QuoA|K7C87l5(JP&c@BL3Y*(Z!aui*B|BOfdImw_4b{kAv4 z_fvxnRJvYWELL>!J;m;sj4hn^vqE7&6PP%0tOG-?{L`I6Da&6^{vP{>!Y&BM=H3dJ z8JJYBn>SGMxo;$ae6)D*Dm?{QELm7-)(?g*;j({0D)v~Qr{&UIcB@1FBU19BWW!GNJgP~oXPaiHa>@~(crQ%yqUQN#EHd-`GcqNY59*oM z2so#zA91{yAb;2^#9jk(bmJi3znu!G=3mwhpkkS_5I9# z!j~TjuyuKsG+EdT`O5r`+-cYc49O-E@!Fsl& zsC`bQ-93KhHMzNF8z7%H?$FJT&gq>#%J|3#-spWzVv=yIW{ja-Osc^pAdbq1`~-eu z&-t$6C*v(MzUnwnVcZXooW;!RGrpTNe(=r$TG{Q=uS#SY3@)@kd{T?U{v@Y+BfQ@y zla@;SOW!M(`j_~W?xv>bLp5BMErg;yBsd()kKU?ou+V3ZTZL9gPYgUuX68DQE`Te`*Y%_a2s zcB>l2!>C>)N@J$FslhQcdr5`yJRSNq3~82Q4q9Uw;eltodW0&wvuoU zZdv^$e5y3;t(!)hLh>eBu8;@~wH5iXL^NQ{VO)pou@aQzVCT9L-0q}Q+ozw-_ZPJD z2k@S0m|C1ITGwm&^|WrX+MqcdfrcgcgO=SB&D70lupuYfil7|n#BOR#{wd$!Y9&(9 z2x|W=YmK_JRB`-7S`74y8bc@P``iG@ynqmB>(?+)h8{W@U3b7+he(K79r+s@g(?aJ zA|L?46@Z*UUes*XU4F0qQtkpUfCN>F?naMeQVr&H`kdwiFHt~oA*fQE@UNm#5E-yb zD4AkhfmkS#86Y1GNIFY4isDcbjID?4p0jIz?|whV#ZAlhDK9$si&9YXz4uu%W(s!4 z&Q*JMN#IfAx4qgmWxLa`yH9lT0*rMwFH>7s?GTChxCkWa&GfB)&2dZ zwfq6i_gtu-UD!ymCj#>mFZUvnElF^oo5{V@TUq?l+{Wn&C3X&r?_$;Ufir5^C>m_N z!X=a0c7p^)Z*F?k{>rL0%^pIovxqb6i}5oXpGLC7ll4l$`9EJ`DmFXW-29+r$`Hcl z_K-EK07;;ZotMz&@6gYMt~32qz18*3sEQoyAbAu%&xUQGk}?mTy{v6Iq`@u?KIX5Wh#$7rL*aIYXgv zT{XI8gZ3!S3pS)yf_%%z;aYM#Kj{~V)<|*LS!B&KsKSWVCyoNU0ebw=y8z@hQJ}l87 z*YP)cV>S3f|AHd4<KB}xs^wDPN*1?`T};Gw`YkrJ%tR1v?h(8;JoVORw$ z5Gtc)vo)OColW^3Ur_H`7*&&E50DV7$ZP>&g}rSyd*(X^FR@)yh~1GZt5}$M2MY50}qdqCup7GAX{iFhtNz_SmmgD%C2^;iR{F!XzfsHXjL^FJsX>NGJJRZH4fhWc$85 zM=ax5w1u)rLV6*+q)O)cE(oN@*2&y!)DUXXd04sy-}c5;B2X*78E*RbIY0RUQl18J zAM}N)J6N3t1Vz$mhnhl-7f~W)vWwL-)jdqv6hUy6G^YqPd8M4J0%7V*#pP~J;--h5 ze{3|#W!I`@dn{od3RK_wF3ub!So-IA(yaGOOt;tC9y%BzNF0J__>>g1`(8A#RB+KlXtQbjK`=w6qG2QSevSQn z+G8QX_+!_ZhoNx&5Gywp4xZ3;Pc`CVw+)BIhBe|Hkp;i_172*IQdd2mFtiC>fzXBA zY324tlSN@z%7LR7i#>FJs*oxvvR491It0tj8k-kPzOYD(Z8V$rFlStEl_dTyERHtE1PCR ztfbQfaSE4c>m8x)0Pyit)XX9aw2|^#&T+cqtRphDQH6vWpKTw_1DvB%66Uzj5(^G( zGYPa+K^hO5Oq%5sX6a1SMCH+F&?wvN2)&?ODyISzumT5LGIfeFSraHB1mg#(__9ecXD4 zHTV=jv#S=a;H~J0>^e78FPD3q7?r%tw^acp0u-bfu6P~R=D0YWiR(!vk6onk0_M0l zQxh%V$f(;BEdhl&!?eai1T9}$OOhCD?R*ai#)@m~( zDt;U)1xdiC^$Cd5bSpHydwT*FS3Gu_ZcW~okGRJf*PXyRr};9Gk+rs!opbsZWG=eC zXVxn~2dfGA{6NJ+Hs?%wpZA^DORjV{RhgssfPx~N2Q;1f?5BZOC3GOSc`Z!cJGOve zj`A18M_md*@7rKr!B^q>c3@@c*4%z7DuJaa9K2zQdOSfXNW+y+tLlrVb9nfp*^`5G z^J|fvd>&u!63k&(G_XRuHKFF>!H18PrTndag4*sUoE(JYDxxa;9ggPUH)tVt8C6oV z6OQT^SqlaOWYvVf@f|^+7awXsQy_j2POwzxw=N$;HTCo3cQ3$9salt(=7Skh)#)I> zPD^o`4?Y`bc>Hkl0W@4}2J9LIiRXtyh-hf20};_VDP8ss@jGLr#m>~fNbLYO@R}6+Ad3Oi=XL< zJC*dd;;HI#8ikiyIPXij&%Vs^7?k|x(u6#DX^>sbPk$n=omOt9^B*3 zKF*$SDRF+FzHlD~Jz$6)*Me6Vuf92X1R= zt)S@k`iUUL5_fWDYc(6?*T2l)XD5;k$C9@?_5ObG!nl_>vztr)jpMId{u`o%89e{MuKs*-aXH}y?$4CN8D2~pmzEw;)qh~$fh_}IHi`;Ora}^%j zFikXpbeo%YJ%`MBLOK1d|BFH%k3W|F93&JD5jj>pg(MOdL#^h{g0AHVp+YB^vwhdw z@cRQNGU@^RkZN&YcyAN`G=*2^yyjMwd2C2ZSNnh;^&QJ#{oqEP)_gwiLn>}~z`)0_ zhL5?wzIi{`lHIB==a#$=#>*=cBxF}y+jewB|G+9c68 z{Yr8x)dx4*?MS@a2Xg*^F0vmF=R88NqDl&ZNUQk_k!;>tLYmwj#M3ZL|MmHymx+0{ zb`6LQ*?gJO5@T-_FyMD%nFlUgC9ZoUYewz%9NcerB(5ZtJD9r_Kn_O|Yy<~#`$Ovr z))%^Ox75(|rH@#o_w72&kON%XTv7@zF^~!){o@G6g<15ew1)CPj`mdAzH4G5(6GDy zbo;#Fq$7>|QqH9uA#&=F3wXcYEWWte&bI5#pEG#yeg$YDvh!2 z?E}2d=dxHc8pop$8t-wW5n)z?CN0+|oc^sPB;EvXn~W-F>U`qp$ejl*f@ z>*cSex9xT-v&;8xg+F69sOFKaOAeXVAX(QC5$yfk`}k0PY#(f&P^qLXOzagt+ra`q zKHCKgW=G55Yrd^9`ft$jb?I7y@lOc5wM6NTDM{d7Trna+2;e%Bk_*`1AfiS-?BXb` zt*9m3t+1rl5$i#rrJAL(Eof31;31N;E8V2t51}?g9Z&XYl5A3~CxJej$VI62h&Z|d z*l{W_n7oK)VSziI?3IK9Wg{X6J0?Z};`M`_iI%{}Q^&J~ z;AgTc5q*Hg{?R~*L)-rXW=kcHQ!Yhg4J>yd5urSEG{U;_^ zimrog_KUiX+S34nAR^%iVYUHb{2R+i^9*#Se%4UZ82<)+D)oK@*Gcmx^E`lGtu1J$ zHKiOjy+1w`{wjwL6p`Tp|I8BFsNPRJX8U|@EU-k~N}~i4MB$^UHdk(?DK>=4Kw*-J zrP*K&PBOl`N$XMqkRt<>gjZSP++OcAE@b}H^pTldf+;96w)p3U^AK8oD<9dG%8{I? z{tAS#N)K&wpwZbW`#68xCA;J<MS}%6@{$59e*@qH1Ck2;$(9%gT;UWXY9zfffM-CU^Z%~@-I3x= zRRyfl)HPu3L<`4Vg|PP%C6OyWOg!4S6ZA8U1d5&mWr)k+=63U~RCZD^Va8awo?i3D z>PlTo>^!?uY>ZbTupP7{F?K~CdF%m7vhJjXtSpMp zj1JzH*V!iGx6DGg@}xSNoKJ5M{xnHFO!QY;-TBZc}UtRBdJ;ug5*cO*4) zRhA^hiFaohGQTj7FY)SqP4qRZ*fe0dN|$!zk}&?R{zu0WQL0~@TH>p6v?H!->#w+M zB%Ra6<=g9cZS7qX$QyPyv%bEK@!J;ypGymP>qIkaeg;;)5y#%7H3~9jnZ7zG%j|x@ zmr2C}6X2{5V+Fhj)N^t-6-fKl`1t`N!vpR^H9_P0**@T z{C;O-`_%>?HagbVg(rR3tC@X{5rT2g{83>czOj&~Z86 zNET-63}BHJhT_@pL0;we0@w z8C*)27L*5v;GV_hHAe*K=?z2wVD#N{msX^4q;Xm;1*fvEKgZp%e@sqTL<|B6&&BN= zNutngZ<`=ypZchj*pJ#BJGrQj=J%36AI187` zw_#3EMf|bv{{z;0xfvuk3dwJdK56=B;MmBw&-l@Uz|0tSx+q%= z-wc}R-ZMyJV+mP|Aw0AB$5U9W_`g@=m-$$?78)lt7C(E%2*%k~LO& z+lXw=VAAz@`aQyRdeHU8Gl1S|ESlD{FhGy;-LD}J3L9PJ&j4w^<)BTfgNZ9Rk|YNI zR=|iVjAspcmM`*u9lN3uca>u)ys4rD{=>wv{U4^QG)$eg zXEDBZeVrEnC&pjUKRKGf*aK~i#Iv&aZf?&iDG~3Qe1=Hdq2ho7y4os=6KMY*R|o&N z`qd;2D6u2>M^VDVY9Jmk!dPc+ztw>e_H)2Kp4o_Udc}4(izxL-@cocwffSA%*liX6-_84hYNj%$AG%zUf>+E9Dw+L5hV{&ms`LP^ER651m zS6y7>+;8rcdJ= zbf$N*1baA6C3*U2ISFsN?p&2G$oBstNsDa{9kJzx>F)Dl>WF6h&(`N_n z)H7#WwZvRXIvOxN%?rh_kR}3QIDo {folder_path}") + continue + + print(f"\n📂 正在扫描目录: {folder_path}") + + # 遍历目录下的所有文件 + for file_path in folder_path.iterdir(): + # 仅处理普通文件且后缀在支持列表内(忽略大小写) + if file_path.is_file() and file_path.suffix.lower() in supported_extensions: + try: + with Image.open(file_path) as img: + # 处理透明通道问题: + # 如果图片支持透明通道 (RGBA/P/LA),转为 RGBA 确保透明背景不丢失 + # 如果是普通 RGB (如 JPG),转为 RGB + if img.mode in ('RGBA', 'LA') or (img.mode == 'P' and 'transparency' in img.info): + img_clean = img.convert('RGBA') + else: + img_clean = img.convert('RGB') + + # 构造输出文件名 (原文件名.ico) + new_filename = f"{file_path.stem}.ico" + save_path = out_path / new_filename + + # 如果目标文件夹中已存在同名文件,为了防止覆盖,可以在文件名后加个标识 + # 但通常图标库同名直接覆盖较符合需求,这里默认直接保存 + img_clean.save(save_path, format="ICO", sizes=[target_size]) + + print(f" ✅ 成功: {file_path.name} -> {new_filename}") + total_converted += 1 + + except Exception as e: + print(f" ❌ 失败: 无法转换 {file_path.name},错误信息: {e}") + total_failed += 1 + + print("\n" + "=" * 50) + print("🎉 转换任务结束!") + print(f"统计: 成功转换 {total_converted} 个文件,失败 {total_failed} 个。") + print("=" * 50) + + +if __name__ == "__main__": + # 1. 定义你要读取的两个源文件夹路径列表 + SOURCES = [ + r"D:\111\office\ZHLduijie\1.WQ\WQ_GUI\data\icons", + r"D:\111\office\ZHLduijie\1.WQ\WQ_GUI\data\icons\word" + ] + + # 2. 定义统一输出的目标文件夹路径 + OUTPUT = r"D:\111\office\ZHLduijie\1.WQ\WQ_GUI\data\icons-1" + + # 执行转换 + batch_convert_to_ico(SOURCES, OUTPUT) \ No newline at end of file diff --git a/docs/SMOKE_TEST_ROUTE_B_MVP.md b/docs/SMOKE_TEST_ROUTE_B_MVP.md new file mode 100644 index 0000000..b9e4e9b --- /dev/null +++ b/docs/SMOKE_TEST_ROUTE_B_MVP.md @@ -0,0 +1,350 @@ +# Smoke Test — 路线 B MVP(PipelineContext + AutoML + 软取消 + GUI 缝合) + +> 适用范围:路线 B 重构 4 部分(pipeline 包 / AutoML 训练器 / WorkerThread 软取消 / GUI 一键全自动)落盘后的端到端点火试飞清单。 +> 目标:**用最小数据集(1 个 BSQ + 1 个 CSV)在 10–20 分钟内验证全链路打通**。 + +--- + +## 0. 前置准备(5 分钟) + +### 0.1 装 Optuna + +`environment.yml` 当前**未列** optuna(属于本次重构新增依赖)。若不装,Step 6 会自动降级到老 GridSearchCV(仍能跑通,但会触发 fallback 日志)。 + +```bash +call venv\Scripts\activate.bat +pip install "optuna>=3.6,<4.0" +``` + +写入 `environment.yml` 的 patch(提交时改): + +```yaml + # 路线 B AutoML 防爆引擎(可选;未装时 Step 6 走老 GridSearchCV 降级路径) + - optuna>=3.6 +``` + +### 0.2 准备最小数据集 + +```text +work_dir_smoke/ +├── raw/ +│ ├── sample.b # 假彩色 BSQ(任意小分辨率都行,建议 50×50×6 波段) +│ ├── sample_mask.tif # (可选)水域掩膜;不提供则 Step 1 自动生成 NDWI +│ └── sample.csv # 含 3–6 个水质参数目标列(Chl-a / TSS / SD / TN / TP / COD…)+ 6 列波段反射率 +└── (其他文件由流程自动生成) +``` + +**CSV 模板示例**(`feature_start_column` 默认为第一列;目标列必须**在特征列之前**): + +```csv +Chl-a,TSS,SD,B1,B2,B3,B4,B5,B6 +12.3,15.1,0.8,0.045,0.052,0.038,0.061,0.072,0.085 +11.8,14.2,0.9,0.044,0.051,0.037,0.060,0.071,0.084 +... (≥ 200 行;AutoML 智能子采样 N>5000 时才生效) +``` + +### 0.3 启动 venv + +```bash +cd /d "D:\111\office\ZHLduijie\1.WQ\WQ_GUI" +call venv\Scripts\activate.bat +set PYTHONPATH=src;%PYTHONPATH% +``` + +--- + +## 1. CLI 烟雾(最快路径,3 分钟)— **A 级:必跑** + +跳过 GUI,直接验证 `automl_trainer.py` 自身可独立运行 + Optuna 子采样 + 降级路径: + +```bash +python -m src.core.prediction.automl_trainer ^ + --csv work_dir_smoke/raw/sample.csv ^ + --feature-start 6 ^ + --n-trials 5 ^ + --timeout 60.0 ^ + --out work_dir_smoke/7_Supervised_Model_Training_AutoML +``` + +**通过标准**: + +- [ ] 进程退出码 0 +- [ ] 控制台打印 `AutoML: 目标列 X 共尝试 N 个 trial,最佳 CV R²=…` +- [ ] `//___AUTOML.joblib` 存在 +- [ ] `/automl_summary.json` 存在且 `success=true` + +**若 Optuna 未装**,期待看到: + +``` +[AutoML] optuna 未安装,全目标列回退老 GridSearchCV +``` + +产物文件名带 `_AUTOML` 后缀的逻辑此时**不会触发**(fallback 走老路径),属正常。 + +--- + +## 2. GUI 端到端 9 步(核心场景,10–20 分钟)— **S 级:必跑** + +### 2.1 启动 GUI + +```bash +call venv\Scripts\activate.bat +set PYTHONPATH=src;%PYTHONPATH% +python -m src.gui.water_quality_gui +``` + +### 2.2 UI 配置 + +| 步骤 | 操作 | 期望 | +| ----- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | +| 1/9 | 点"选择工作目录" → 选 `work_dir_smoke/` | 左侧步骤列表高亮,UI 不报错 | +| 2/9 | 在 Step 1 面板选 `sample.b`;**掩膜留空**(验证 NDWI 自动生成路径) | 掩膜文本框保持空白 | +| 3/9 | 在 Step 4 面板选 `sample.csv` | CSV 路径显示正确 | +| 4/9 | **关键**:其他步骤(2/3/5/5.5/6/7/8/9)保持默认,不改任何参数 | AutoML 默认开启(use_automl=True) | +| 5/9 | 点 **▶ 运行完整流程**(不要用老 `run_full_pipeline` 槽) | 弹出**二次确认窗**,文案显示:
• 掩膜:`未指定(将自动生成 NDWI 水域掩膜)`
• 去耀斑:开启
• AutoML:开启(Optuna 子采样寻优) | +| 6/9 | 点"是(Y)" | "运行"按钮变灰,"停止"按钮亮起;进度条归零 | + +### 2.3 观察日志(重点 4 大检查点) + +#### ✅ 检查点 1:ctx 路径传递 + +启动后**第一秒**应看到类似: + +``` +[Runner] ctx 已构造:14 路径字段,4 目录字段 +[Runner] 步骤 1/14:step1_generate_water_mask(requires=['raw_img_path', 'water_mask_path']) +[Runner] 步骤 2/14:step2_find_glint_area(requires=['raw_img_path', 'water_mask_path', 'output_dir']) +... +[Runner] ctx 路径校准:water_mask_path = ...\work_dir_smoke\2_Glint_Area_Mask\glint_mask.tif +``` + +→ **若没有 `[Runner]` 日志**,说明 v1 旧路径被走到了,**`inspect.signature` duck-type 没探测到 v2**,回去检查 `worker_thread.py:run()`。 + +#### ✅ 检查点 2:Step 1 NDWI 自动生成 + +``` +[Step1] 未指定 mask_path,自动基于 NDWI 生成水域掩膜 +[Step1] NDWI 阈值=0.4,写入 1_Water_Mask/water_mask.tif +``` + +→ 验证 `/1_Water_Mask/water_mask.tif` 文件存在且非空。 + +#### ✅ 检查点 3:AutoML 启用 + +``` +[Step6] AutoML 启用 Optuna 子采样寻优(timeout=300s, n_trials=20, max_samples=5000) +[Step6] 目标列 'Chl-a' 共 3 个候选模型,最佳 R²=0.812(model=RandomForest) +[Step6] 目标列 'TSS' 共 3 个候选模型,最佳 R²=0.745(model=XGBoost) +[Step6] 训练完成,产物写入 7_Supervised_Model_Training_AutoML/ +[Step6] automl_summary.json 写入完成 +``` + +→ 验证产物: +- [ ] `7_Supervised_Model_Training_AutoML//___AUTOML.joblib` ≥ 1 个 +- [ ] `7_Supervised_Model_Training_AutoML/automl_summary.json` 含 `automl: true` 字段 +- [ ] 老目录 `7_Supervised_Model_Training/` **不应该被创建**(AutoML 路径独立) + +#### ✅ 检查点 4:AutoML 降级(仅未装 Optuna 时) + +``` +[AutoML] optuna 未安装,全目标列回退老 GridSearchCV +[Step6] 降级路径:调用 WaterQualityModelingBatch.train_models_batch(132 组 GridSearchCV) +``` + +→ 跑通即可(仍能产生模型文件),但**降级**属于非优选路径。 + +### 2.4 9 步全程观察清单 + +| 步 | 期望产物(路径相对 `work_dir`) | 期望耗时(50×50 测试数据) | +| ---- | -------------------------------------------------------------- | -------------------------- | +| 1 | `1_Water_Mask/water_mask.tif` | < 5 s | +| 2 | `2_Glint_Area_Mask/glint_mask.tif` | < 5 s | +| 3 | `3_Remove_Glint_Image/deglint_image.tif` | < 5 s | +| 4 | `4_Process_CSV/processed_data.csv` | < 2 s | +| 5 | `5_Training_Sample/training_spectra.csv` | < 5 s | +| 5.5 | `5_5_Calculate_Indices/indices.csv`(如启用) | < 2 s | +| **6**| `7_Supervised_Model_Training_AutoML/`(**新路径!**) | **< 5 min(Optuna 5 trial)** | +| 6.5 | `6_5_Non_Empirical_Modeling/`(如启用) | 1–2 min | +| 6.75 | `6_75_Custom_Regression/`(如启用) | 1–2 min | +| 7 | `7_Sampling_Points/sampling_points.csv` | < 3 s | +| 8 | `8_Prediction/predicted_values.csv` | < 5 s | +| 8.5 | `8_5_Prediction_Non_Empirical/predicted.csv`(如启用) | < 5 s | +| 8.75 | `8_75_Prediction_Custom/predicted.csv`(如启用) | < 5 s | +| 9 | `9_Kriging_Distribution_Map/distribution_map.tif` | 5–30 s(纯 Python 慢) | + +### 2.5 流程结束 + +- [ ] 进度条到 100% +- [ ] "运行"按钮恢复可点 +- [ ] "停止"按钮变灰 +- [ ] 日志末行出现 `=== 流程执行完成 ===` 或 `=== 流程被取消 ===`(取决于是否点过停止) +- [ ] 控制台 `on_pipeline_finished` 触发:UI 状态被统一恢复 + +--- + +## 3. 软取消测试(3 分钟)— **A 级:必跑** + +验证 `threading.Event` 软取消链路(不再用 `terminate()`)。 + +### 3.1 启动完整流程 + +如 2.2 启动流程。 + +### 3.2 中途点"停止" + +**时机**:在 Step 6 AutoML 跑 trials 的中途(看到 `[Step6] 目标列 'Chl-a' 共 N 个候选模型` 之后任意时刻)点"停止"。 + +**期望看到**: + +``` +[STOP] 用户请求软取消 +[Step6] 检测到 cancel_event,本 trial 完成后退出 +[Step6] AutoML 在 trial #X 中止,已完成 5/20 trial +[Runner] 软取消:跳过剩余 8 个 step +=== 流程被取消 === +``` + +UI 状态: + +- [ ] "运行"按钮重新亮起 +- [ ] "停止"按钮变灰 +- [ ] 进度条保留在中断时的百分比(**不**归零) +- [ ] `on_pipeline_finished` 触发(用 `success=False, cancelled=True` 区分) +- [ ] **Python 进程不退出**(GUI 仍可继续点"运行"开新流程) + +**反例(不应该发生)**: + +- ❌ `QThread: Destroyed while thread is still running` 警告 +- ❌ Python 解释器直接崩溃 +- ❌ UI 永远卡死(`run_all_btn` 一直是灰的) + +### 3.3 旧 `stop()` 路径回归 + +为防老代码忘了改,临时把 `water_quality_gui.py:stop_pipeline` 改回 `self.worker.stop()`,跑一次完整流程,看是否出现: + +``` +[DEPRECATED] WorkerThread.stop() 已弃用,请改用 soft_stop()。 +``` + +**这是预期行为**(弃用方法保留但打 warning),流程仍能完成即视为通过。 + +--- + +## 4. 失败 / 降级场景(5 分钟)— **B 级:选跑** + +### 4.1 未填掩膜 + NDWI 阈值设极端值 + +把 NDWI 阈值设到 `0.9`(几乎无水域),Step 1 应给出 warning 但不崩: + +``` +[Step1] NDWI 阈值=0.9,水域覆盖率 < 1%,请检查影像 +``` + +### 4.2 CSV 完全无目标列 + +准备一个**没有目标列的 CSV**(全特征列),点运行: + +``` +[AutoML] 训练 CSV 不存在或无目标列:未识别出目标列 +[Step6] AutoML 全部失败,所有目标列返回 success=False +``` + +→ UI 不会崩,会在 `automl_summary.json` 写 `error: "未识别出目标列"`。 + +### 4.3 Step 1 路径不存在 + +Step 1 选了一个**不存在的 .bsq 文件**: + +``` +[Runner] step1_generate_water_mask 异常:FileNotFoundError +[STOP] 流程中止在 step 1 +``` + +→ UI 弹错误窗 + 把左侧步骤列表 `setCurrentRow(0)` 自动定位到 Step 1(`_focus_step` 起效)。 + +### 4.4 Optuna 版本冲突 + +装一个 `optuna==2.10`(API 大改),跑 GUI: + +``` +[AutoML] optuna API 不兼容(>=3.6 要求): +[AutoML] 全目标列回退老 GridSearchCV +``` + +→ 降级路径生效即视为通过。 + +--- + +## 5. 验证矩阵 Checklist + +复制以下到 PR 描述 / 验收单: + +```markdown +## 路线 B MVP 验证矩阵 + +### 代码落盘 +- [ ] src/core/pipeline/__init__.py(17 行,4 export) +- [ ] src/core/pipeline/context.py(PipelineContext dataclass) +- [ ] src/core/pipeline/runner.py(StepSpec + PIPELINE_STEPS + PipelineRunner) +- [ ] src/core/prediction/__init__.py(追加 train_with_automl export) +- [ ] src/core/prediction/automl_trainer.py(AutoMLResult + train_with_automl + CLI) +- [ ] src/core/steps/modeling_step.py(use_automl 分支 + _train_models_automl) +- [ ] src/core/water_quality_inversion_pipeline_GUI.py(run_full_pipeline_v2 + LEGACY_ATTR_MAP + _sync_legacy_attrs_from_context) +- [ ] src/gui/core/worker_thread.py(cancel_event + soft_stop + run() duck-type) +- [ ] src/gui/water_quality_gui.py(on_run_all_clicked + _collect_minimal_config + 按钮重连) + +### CLI 自测 +- [ ] A.1 `python -m src.core.prediction.automl_trainer --csv ...` 退出码 0 +- [ ] A.2 产物 .joblib 含 `_AUTOML` 后缀 +- [ ] A.3 automl_summary.json 含 success=true + +### GUI 端到端 +- [ ] B.1 启动无 ImportError +- [ ] B.2 二次确认窗文案含 mask 提示 + AutoML 状态 +- [ ] B.3 日志含 [Runner] 前缀(v2 路径生效) +- [ ] B.4 Step 1 NDWI 自动生成路径生效 +- [ ] B.5 9 步产物路径全部存在 +- [ ] B.6 流程结束后 UI 状态恢复(运行按钮亮、停止按钮灰) + +### 软取消 +- [ ] C.1 流程中途点停止,cancel_event 触发 +- [ ] C.2 流程被取消而非崩溃 +- [ ] C.3 UI 状态由 on_pipeline_finished 统一恢复 +- [ ] C.4 旧 stop() 调用打 [DEPRECATED] warning + +### 降级 +- [ ] D.1 Optuna 未装 → 全目标列回退老 GridSearchCV +- [ ] D.2 无目标列 CSV → 写 error 到 summary,不崩 UI +- [ ] D.3 不存在文件 → _focus_step 定位到对应 step +``` + +--- + +## 6. 已知未做(不在本次范围) + +- [ ] Kriging 多进程并行(当前 backend="loop" 纯 Python) +- [ ] Step 5 radius==0 内存优化(整波段读入) +- [ ] 进度条 sub-step 粒度(当前只到 step 级) +- [ ] Step 8 全图预测(当前只对采样点预测) +- [ ] 全项目搜替换老 `self.worker.stop()` 调用(仅本会话改了 `water_quality_gui.py` 的 stop_pipeline) +- [ ] `requirements.txt` 同步 Optuna(仅 `environment.yml` 写) +- [ ] 单元测试套件(`tests/` 目录为空;建议用 pytest 覆盖 train_with_automl / PipelineRunner) + +--- + +## 7. 出问题找哪里 + +| 现象 | 看哪里 | +| --------------------------------------------- | ------------------------------------------------------- | +| `[Runner]` 日志没出来 | `worker_thread.py:run()` 的 `inspect.signature` 探测 | +| `[AutoML]` 完全没打 | `modeling_step.py:170` 的 `if use_automl` 是否进了 | +| AutoML 报 `optuna API 不兼容` | `automl_trainer.py:236` 的 `try import` 块 | +| 软取消无反应 | `worker_thread.py:run()` 末尾的 `cancel_event.is_set()` | +| 二次确认窗没出来 | `water_quality_gui.py:on_run_all_clicked` line ~2848 | +| 9 步产物路径错位 | `pipeline/runner.py:PIPELINE_STEPS` 的 `output` 字段 | +| 老 v1 路径被走到 | `_sync_legacy_attrs_from_context` 没调,或 v2 异常 | + +--- + +> **作者注**:本清单对应**路线 B 一键全自动重构 4 部分全部落盘**的验收场景,编号与 todo 8 同步。 +> 跑通 §1 + §2 + §3 三段即视为 MVP 验收通过;§4 用于鲁棒性抽查。 diff --git a/frontend/.env.development b/frontend/.env.development new file mode 100644 index 0000000..73033fe --- /dev/null +++ b/frontend/.env.development @@ -0,0 +1,2 @@ +# 联调期指向本地 FastAPI dev 服务 +VITE_API_BASE_URL=http://127.0.0.1:9090 diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..df26203 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,7 @@ +node_modules +dist +dist-ssr +.vite +*.local +.DS_Store +*.log diff --git a/frontend/env.d.ts b/frontend/env.d.ts new file mode 100644 index 0000000..18fd41f --- /dev/null +++ b/frontend/env.d.ts @@ -0,0 +1,15 @@ +/// + +interface ImportMetaEnv { + readonly VITE_API_BASE_URL?: string +} + +interface ImportMeta { + readonly env: ImportMetaEnv +} + +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..286a51d --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,13 @@ + + + + + + + WQ_GUI · 水质反演联调控制台 + + +

+ + + diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..013abb7 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,25 @@ +{ + "name": "wq-gui-frontend", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc --noEmit && vite build", + "preview": "vite preview", + "type-check": "vue-tsc --noEmit" + }, + "dependencies": { + "vue": "^3.4.27", + "element-plus": "^2.7.5", + "@element-plus/icons-vue": "^2.3.1", + "axios": "^1.7.2" + }, + "devDependencies": { + "@types/node": "^20.12.12", + "@vitejs/plugin-vue": "^5.0.4", + "typescript": "^5.4.5", + "vite": "^5.2.11", + "vue-tsc": "^2.0.19" + } +} diff --git a/frontend/src/App.vue b/frontend/src/App.vue new file mode 100644 index 0000000..02e62bf --- /dev/null +++ b/frontend/src/App.vue @@ -0,0 +1,225 @@ + + + + + + + diff --git a/frontend/src/api/request.ts b/frontend/src/api/request.ts new file mode 100644 index 0000000..c9a1693 --- /dev/null +++ b/frontend/src/api/request.ts @@ -0,0 +1,94 @@ +/** + * Axios 单例 + 响应拦截器 + * -------------------------------- + * 1. baseURL 默认指向本地 FastAPI dev 服务。 + * 通过 Vite 环境变量 VITE_API_BASE_URL 可覆盖, 例如: + * .env.development: VITE_API_BASE_URL=http://127.0.0.1:8000 + * .env.production: VITE_API_BASE_URL=https://api.example.com + * + * 2. 响应拦截器统一 unwrap response.data, 调用方拿到的是真正的业务对象, + * 而不是 AxiosResponse 包装。失败时统一抛 Error, message 优先取 + * FastAPI 的 detail 字段。 + * + * 3. 类型增强: cast 成 UnwrappedAxiosInstance, 让 request.get(url) + * 的返回类型直接是 T, 而不是 AxiosResponse, 调用方无需二次解包。 + */ +import axios, { + type AxiosInstance, + type AxiosRequestConfig, +} from 'axios' + +// 在 Vite 下用 import.meta.env; 其它环境 (webpack/直接 ts-node) 兜底到 process.env +type ViteEnv = { env?: Record } +const viteEnv: ViteEnv | undefined = + typeof import.meta !== 'undefined' ? ((import.meta as unknown) as ViteEnv) : undefined + +const baseURL: string = + viteEnv?.env?.VITE_API_BASE_URL ?? + (typeof process !== 'undefined' && process.env?.VITE_API_BASE_URL) ?? + 'http://127.0.0.1:9090' + +const _instance: AxiosInstance = axios.create({ + baseURL, + timeout: 15000, + headers: { + 'Content-Type': 'application/json', + }, + // FastAPI 开发期 CORS 是 allow_origins=["*"], 不需要带 cookie + withCredentials: false, +}) + +// ----- 请求拦截器: 预留 token / 日志位 ----- +_instance.interceptors.request.use( + (config) => { + // const token = localStorage.getItem('token') + // if (token) config.headers.Authorization = `Bearer ${token}` + return config + }, + (error) => Promise.reject(error), +) + +// ----- 响应拦截器: unwrap data + 统一错误 message ----- +_instance.interceptors.response.use( + (response) => response.data, + (error) => { + const detail = error?.response?.data?.detail + const message = + (typeof detail === 'string' ? detail : detail?.msg) ?? + error?.response?.data?.message ?? + error?.message ?? + '请求失败' + return Promise.reject(new Error(message)) + }, +) + +// ----- 类型增强: 把响应拦截器 unwrap 的事实在类型上表达出来 ----- +type UnwrappedAxiosInstance = Omit< + AxiosInstance, + 'get' | 'delete' | 'head' | 'options' | 'post' | 'put' | 'patch' +> & { + get(url: string, config?: AxiosRequestConfig): Promise + delete(url: string, config?: AxiosRequestConfig): Promise + head(url: string, config?: AxiosRequestConfig): Promise + options(url: string, config?: AxiosRequestConfig): Promise + post( + url: string, + data?: D, + config?: AxiosRequestConfig, + ): Promise + put( + url: string, + data?: D, + config?: AxiosRequestConfig, + ): Promise + patch( + url: string, + data?: D, + config?: AxiosRequestConfig, + ): Promise +} + +const request = _instance as UnwrappedAxiosInstance + +export default request +export { baseURL } diff --git a/frontend/src/api/tasks.ts b/frontend/src/api/tasks.ts new file mode 100644 index 0000000..a15d70f --- /dev/null +++ b/frontend/src/api/tasks.ts @@ -0,0 +1,155 @@ +/** + * 与 FastAPI 后端对接的 API 函数 + * -------------------------------- + * 全部用 request 单例, 调用方拿到的就是业务对象 (response 拦截器已 unwrap)。 + * + * 后端路由: + * GET /api/algorithms + * POST /api/process/deglint + * POST /api/modeling/train + * POST /api/modeling/predict (额外, 与 train 配套) + * GET /api/tasks/{task_id} + */ +import request from './request' + +// ============================================================ +// 通用类型 +// ============================================================ + +/** 后端任务状态机 (与 app.core.task_store.TASK_STORE 保持一致) */ +export type TaskStatus = 'PENDING' | 'PROCESSING' | 'SUCCESS' | 'FAILED' + +/** 任务类型, 区分去耀斑 / 训练 / 推断 */ +export type TaskKind = 'deglint' | 'train' | 'predict' + +/** 提交后端后立即返回的最小任务凭证 */ +export interface TaskAcceptedResponse { + task_id: string + status: TaskStatus + kind: TaskKind +} + +/** + * 任务详情 (与后端 TASK_STORE 里记录的字段对齐, 通用 + 各 kind 增量字段) + * 用 [key: string]: unknown 兜底, 兼容未来后端新增字段 + */ +export interface TaskRecord { + task_id: string + kind: TaskKind + status: TaskStatus + // 去耀斑 + algorithm?: string + input_zarr_path?: string + output_zarr_path?: string | null + // 训练 + model_type?: string + target?: string + train_data_path?: string + feature_start?: number | string + params?: Record + model_id?: string | null + model_path?: string | null + test_r2?: number | null + test_rmse?: number | null + test_mae?: number | null + n_features?: number | null + n_samples?: number | null + // 推断 + // (model_id / input_zarr_path / output_zarr_path 已在上方) + // 失败 + error?: string | null + traceback?: string | null + // 元 + created_at?: string + updated_at?: string + [key: string]: unknown +} + +// ============================================================ +// 1) 算法列表 GET /api/algorithms +// ============================================================ + +export interface AlgorithmInfo { + name: string + doc?: string +} + +export interface AlgorithmListResponse { + algorithms: AlgorithmInfo[] + count: number +} + +export function getAlgorithms(): Promise { + return request.get('/api/algorithms') +} + +// ============================================================ +// 2) 提交去耀斑 POST /api/process/deglint +// ============================================================ + +export interface DeglintParams { + input_zarr_path: string + output_zarr_path?: string + /** 算法自定义参数 (D_max / band 选择等) */ + [key: string]: unknown +} + +export function submitDeglint( + method: string, + params: DeglintParams, +): Promise { + return request.post( + '/api/process/deglint', + { method, params }, + ) +} + +// ============================================================ +// 3) 提交训练 POST /api/modeling/train +// ============================================================ + +export interface TrainRequest { + model_type: string + target: string + train_data_path: string + /** 特征起始列, int 索引或 str 列名, 默认 4 */ + feature_start?: number | string + /** sklearn 估计器超参 */ + params?: Record +} + +export function submitTrain(payload: TrainRequest): Promise { + return request.post( + '/api/modeling/train', + payload, + ) +} + +// ============================================================ +// 4) 提交推断 POST /api/modeling/predict (配套, 训练后才能用) +// ============================================================ + +export interface PredictRequest { + model_id: string + input_zarr_path: string + output_zarr_path?: string +} + +export function submitPredict( + payload: PredictRequest, +): Promise { + return request.post( + '/api/modeling/predict', + payload, + ) +} + +// ============================================================ +// 5) 查询任务状态 GET /api/tasks/{task_id} +// ============================================================ + +export function getTaskStatus(task_id: string): Promise { + return request.get( + `/api/tasks/${encodeURIComponent(task_id)}`, + ) +} diff --git a/frontend/src/composables/useTaskPoller.ts b/frontend/src/composables/useTaskPoller.ts new file mode 100644 index 0000000..34349ce --- /dev/null +++ b/frontend/src/composables/useTaskPoller.ts @@ -0,0 +1,238 @@ +/** + * 任务轮询 Composable (Vue 3 + TypeScript) + * ----------------------------------------- + * 用法 1 — 静态 task_id, 立即开始轮询: + * const { status, result, error, waitForCompletion } = useTaskPoller(taskId) + * + * 用法 2 — 响应式 task_id (异步拿到后赋值, 自动开始): + * const taskId = ref(null) + * const poller = useTaskPoller(taskId) + * ;(async () => { taskId.value = (await submitTrain({...})).task_id })() + * await poller.waitForCompletion() + * + * 用法 3 — 手动控制: + * const poller = useTaskPoller() + * poller.start(taskId) // 开始 + * poller.stop() // 停止 + * poller.reset() // 清空状态 + * + * 设计要点: + * - 终态 (SUCCESS/FAILED) 自动停止轮询 + * - 组件卸载自动清理 (onUnmounted) + * - 网络错误不立刻终止, 计入 error.value 但继续轮询 (兼容临时抖动) + * - waitForCompletion 是单次承诺: SUCCESS resolve(record), FAILED reject(error) + * 外部 stop() 也会 reject + */ +import { + onUnmounted, + ref, + watch, + type MaybeRefOrGetter, + type Ref, +} from 'vue' +import { toValue } from 'vue' +import { + getTaskStatus, + type TaskRecord, + type TaskStatus, +} from '../api/tasks' + +// 显式包含 'idle', 用于未开始轮询的初始态 +export type PollerStatus = TaskStatus | 'idle' + +export interface UseTaskPollerOptions { + /** 轮询间隔 ms, 默认 2000 */ + intervalMs?: number + /** task_id 变 null 时是否自动停止, 默认 true */ + autoStopOnNull?: boolean +} + +export interface UseTaskPollerReturn { + /** 当前任务状态, 初始 'idle' */ + status: Ref + /** SUCCESS 时的完整任务记录 (含 output_zarr_path / model_id 等) */ + result: Ref + /** FAILED 时的错误描述, 或轮询过程中网络异常的消息 */ + error: Ref + /** 最新一次拉取到的任务记录 (含 PENDING/PROCESSING 占位字段) */ + record: Ref + /** 是否正在轮询中 */ + isPolling: Ref + /** 当前轮询的 task_id (可能为 null) */ + taskId: Ref + /** 开始轮询某 task, 已轮询同一 id 时是 no-op */ + start: (taskId: string) => void + /** 主动停止 (会 reject 未完成的 waitForCompletion) */ + stop: () => void + /** 清空所有状态回 'idle' */ + reset: () => void + /** + * 等到 SUCCESS/FAILED。 + * - SUCCESS: resolve(record) + * - FAILED : reject(Error) + * - stop() : reject(Error('Polling stopped')) + * - 组件卸载: reject(Error('Component unmounted')) + * 已处于终态时立刻 resolve/reject, 不重复等待。 + */ + waitForCompletion: () => Promise +} + +export function useTaskPoller( + taskIdSource?: MaybeRefOrGetter, + options: UseTaskPollerOptions = {}, +): UseTaskPollerReturn { + const { intervalMs = 2000, autoStopOnNull = true } = options + + const status = ref('idle') + const result = ref(null) + const error = ref(null) + const record = ref(null) + const isPolling = ref(false) + const taskId = ref(null) + + let timerId: ReturnType | null = null + let inFlightTick = false + let resolveWait: ((rec: TaskRecord) => void) | null = null + let rejectWait: ((err: Error) => void) | null = null + + function clearTimer() { + if (timerId !== null) { + clearInterval(timerId) + timerId = null + } + } + + function resolveOrRejectWait(rec: TaskRecord | null, err: Error | null) { + const r = resolveWait + const rj = rejectWait + resolveWait = null + rejectWait = null + if (rec && r) r(rec) + else if (err && rj) rj(err) + } + + function applyTerminalRecord(rec: TaskRecord) { + record.value = rec + status.value = rec.status + if (rec.status === 'SUCCESS') { + result.value = rec + error.value = null + resolveOrRejectWait(rec, null) + } else if (rec.status === 'FAILED') { + result.value = null + error.value = rec.error ?? '任务失败 (无具体错误信息)' + resolveOrRejectWait( + null, + new Error(error.value ?? '任务失败'), + ) + } + } + + async function tick() { + const currentId = taskId.value + if (!currentId || inFlightTick) return + inFlightTick = true + try { + const rec = await getTaskStatus(currentId) + // 防止 await 期间用户 stop() / start() 了别的 task + if (taskId.value !== currentId) return + if (rec.status === 'SUCCESS' || rec.status === 'FAILED') { + applyTerminalRecord(rec) + stop() + } else { + // PENDING / PROCESSING 阶段, 更新 record 与 status 供 UI 展示 + record.value = rec + status.value = rec.status + } + } catch (e) { + const msg = e instanceof Error ? e.message : String(e) + // 单次失败不立刻终止, 写入 error 但保持轮询 + error.value = `轮询异常: ${msg}` + } finally { + inFlightTick = false + } + } + + function start(nextId: string) { + if (!nextId) return + // 已在轮询同一 id, 幂等 + if (taskId.value === nextId && isPolling.value) return + clearTimer() + taskId.value = nextId + status.value = 'idle' + result.value = null + error.value = null + record.value = null + isPolling.value = true + // 立刻拉一次, 避免 2s 空窗 + void tick() + timerId = setInterval(() => void tick(), intervalMs) + } + + function stop() { + const wasActive = isPolling.value + clearTimer() + isPolling.value = false + if (wasActive) { + resolveOrRejectWait(null, new Error('Polling stopped')) + } + } + + function reset() { + stop() + taskId.value = null + status.value = 'idle' + result.value = null + error.value = null + record.value = null + } + + function waitForCompletion(): Promise { + const r = record.value + if (r && r.status === 'SUCCESS') return Promise.resolve(r) + if (r && r.status === 'FAILED') { + return Promise.reject( + new Error(r.error ?? '任务失败 (无具体错误信息)'), + ) + } + return new Promise((resolve, reject) => { + resolveWait = resolve + rejectWait = reject + }) + } + + // 自动模式: 监听外部 taskIdSource + if (taskIdSource !== undefined) { + const stopWatch = watch( + () => toValue(taskIdSource), + (newId, oldId) => { + if (newId && newId !== oldId) start(newId) + else if (!newId && autoStopOnNull) stop() + }, + { immediate: true }, + ) + onUnmounted(() => { + stopWatch() + reset() + resolveOrRejectWait(null, new Error('Component unmounted')) + }) + } else { + onUnmounted(() => { + reset() + resolveOrRejectWait(null, new Error('Component unmounted')) + }) + } + + return { + status, + result, + error, + record, + isPolling, + taskId, + start, + stop, + reset, + waitForCompletion, + } +} diff --git a/frontend/src/main.ts b/frontend/src/main.ts new file mode 100644 index 0000000..9489de8 --- /dev/null +++ b/frontend/src/main.ts @@ -0,0 +1,9 @@ +import { createApp } from 'vue' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' +import App from './App.vue' + +const app = createApp(App) + +app.use(ElementPlus) +app.mount('#app') diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..d333bf0 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true, + "jsx": "preserve", + "resolveJsonModule": true, + "isolatedModules": true, + "esModuleInterop": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + "noEmit": true, + "allowImportingTsExtensions": true, + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + }, + "types": ["vite/client"] + }, + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.vue", "env.d.ts"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json new file mode 100644 index 0000000..1a555ac --- /dev/null +++ b/frontend/tsconfig.node.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "strict": true, + "types": ["node"] + }, + "include": ["vite.config.ts"] +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 0000000..46f2711 --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,21 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import { fileURLToPath, URL } from 'node:url' + +// Vite 配置: +// - @ -> frontend/src +// - dev server 监听 0.0.0.0:5173, 允许局域网内真机调试 +// - VITE_API_BASE_URL 通过 .env.development 注入, 缺省走 src/api/request.ts 内的兜底 (http://127.0.0.1:8000) +export default defineConfig({ + plugins: [vue()], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + }, + }, + server: { + host: '0.0.0.0', + port: 5173, + strictPort: false, + }, +}) diff --git a/license.lic b/license.lic new file mode 100644 index 0000000..ddc8237 --- /dev/null +++ b/license.lic @@ -0,0 +1,8 @@ +{ + "version": "1.0", + "product": "WaterQualityInversion", + "machine_code": "76E4992A5CF08BA570D6150908E04755", + "generated_at": "2026-05-28 14:21:35", + "expiry": "2099-12-31", + "signature": "DC9AB900D7033A281E54F41F3F76D026FFA75D635484D40C7F6FC1F6023E02AB" +} \ No newline at end of file diff --git a/new/app/api/_smoke_test_train.py b/new/app/api/_smoke_test_train.py new file mode 100644 index 0000000..63404b0 --- /dev/null +++ b/new/app/api/_smoke_test_train.py @@ -0,0 +1,201 @@ +""" +冒烟测试 _run_train_sync: 用合成数据走通真实训练管线。 +不依赖 FastAPI / xarray / dask, 只验训练 + 持久化 + 回测。 +""" +import sys +import tempfile +from pathlib import Path + +import numpy as np +import pandas as pd + +# 绕过 main.py 触发 app 包导入(只导入 modeling 模块) +# 当前文件位于 new/app/api/_smoke_test_train.py +# app 包在 new/app/__init__.py, 故 new/ 必须在 sys.path 上 +sys.path.insert(0, str(Path(__file__).parent.parent.parent)) + +from app.api.modeling import ( + _get_model_pipeline, + _load_train_df, + _resolve_feature_start, + _run_train_sync, + _MODEL_CLASS_REGISTRY, +) + + +def make_synthetic_csv(n_samples: int = 200, n_features: int = 8, noise: float = 0.1, seed: int = 42) -> Path: + """生成 [lat, lon, target, lat2, lon2, feat_0, feat_1, ...] 布局的 CSV""" + rng = np.random.default_rng(seed) + lat = rng.uniform(20, 25, n_samples) + lon = rng.uniform(110, 115, n_samples) + target = rng.uniform(0, 50, n_samples) + lat2 = rng.uniform(0, 1, n_samples) # 元数据 + lon2 = rng.uniform(0, 1, n_samples) # 元数据 + feats = rng.normal(0, 1, (n_samples, n_features)) + # 让 y 真正依赖前 3 个特征, RF 至少应该能学到 R² > 0.5 + feats[:, 0] += target / 10 + feats[:, 1] += target / 20 + feats[:, 2] -= target / 15 + + df = pd.DataFrame({ + "lat": lat, + "lon": lon, + "Chl-a": target, + "lat2": lat2, + "lon2": lon2, + **{f"feat_{i}": feats[:, i] for i in range(n_features)}, + }) + tmp = Path(tempfile.mkdtemp()) / "train.csv" + df.to_csv(tmp, index=False) + return tmp + + +def test_load_train_df(): + print("== test_load_train_df ==") + p = make_synthetic_csv(n_samples=50) + df = _load_train_df(str(p)) + assert df.shape == (50, 5 + 8), f"shape={df.shape}" + print(f" shape={df.shape}, columns[:6]={list(df.columns[:6])}") + print(" PASS") + + +def test_resolve_feature_start_int_and_str(): + print("== test_resolve_feature_start (int + str) ==") + p = make_synthetic_csv() + df = _load_train_df(str(p)) + idx_int = _resolve_feature_start(df, 5) + idx_str = _resolve_feature_start(df, "feat_0") + assert idx_int == 5 == idx_str, f"int={idx_int}, str={idx_str}" + print(f" int(5) -> {idx_int}, str('feat_0') -> {idx_str}") + print(" PASS") + + +def test_resolve_feature_start_str_miss(): + print("== test_resolve_feature_start (str 不存在 -> 抛错) ==") + p = make_synthetic_csv() + df = _load_train_df(str(p)) + try: + _resolve_feature_start(df, "not_exist") + print(" FAIL: 应抛 ValueError") + except ValueError as e: + print(f" 正确抛 ValueError: {e}") + print(" PASS") + + +def test_get_model_pipeline_all_types(): + print("== test_get_model_pipeline (5 种 model_type) ==") + for mt in ["RF", "SVR", "LinearRegression", "KNN", "PLS"]: + p = _get_model_pipeline(mt, {}) + assert len(p.steps) == 2 + assert p.steps[0][0] == "scaler" + assert p.steps[1][0] == "model" + print(f" 全部通过: {list(_MODEL_CLASS_REGISTRY)}") + print(" PASS") + + +def test_get_model_pipeline_bad_type(): + print("== test_get_model_pipeline (坏 model_type) ==") + try: + _get_model_pipeline("XGBoost", {}) + print(" FAIL: 应抛 ValueError") + except ValueError as e: + print(f" 正确抛 ValueError: {e}") + print(" PASS") + + +def test_run_train_sync_rf_end_to_end(): + print("== test_run_train_sync (RF 端到端) ==") + p = make_synthetic_csv(n_samples=200) + out_dir = Path(tempfile.mkdtemp()) + out_path = out_dir / "model.joblib" + + import time + t0 = time.time() + metadata = _run_train_sync( + model_type="RF", + target="Chl-a", + train_data_path=str(p), + feature_start=5, + params={"n_estimators": 30, "max_depth": 6, "random_state": 42, "n_jobs": 1}, + output_model_path=out_path, + ) + dt = time.time() - t0 + + assert out_path.exists(), f"joblib 未落盘: {out_path}" + print(f" joblib 落盘: {out_path} ({out_path.stat().st_size} bytes)") + print(f" metadata.test_r2={metadata['test_r2']:.4f} test_rmse={metadata['test_rmse']:.4f} test_mae={metadata['test_mae']:.4f}") + print(f" metadata.n_features={metadata['n_features']} n_samples={metadata['n_samples']} train_size={metadata['train_size']} test_size={metadata['test_size']}") + print(f" 耗时 {dt:.2f}s") + + # 回测: 加载 joblib 再 predict + import joblib + saved = joblib.load(out_path) + assert "model" in saved and "metadata" in saved, f"joblib 双 key 缺失: {saved.keys()}" + assert hasattr(saved["model"], "predict") + assert saved["metadata"]["test_r2"] == metadata["test_r2"] + print(f" joblib 加载 OK, 含 'model' 和 'metadata' 双 key") + print(" PASS") + + +def test_run_train_sync_linearregression_fast(): + print("== test_run_train_sync (LinearRegression 快速路径) ==") + p = make_synthetic_csv(n_samples=150) + out_path = Path(tempfile.mkdtemp()) / "lr.joblib" + metadata = _run_train_sync( + model_type="LinearRegression", + target="Chl-a", + train_data_path=str(p), + feature_start=5, + params={}, + output_model_path=out_path, + ) + print(f" test_r2={metadata['test_r2']:.4f} (LR 学到线性, R² 应 >= 0.4)") + assert metadata["test_r2"] > 0.3, f"LR test_r2={metadata['test_r2']} 太低, 数据生成可能有问题" + print(" PASS") + + +def test_run_train_sync_bad_csv(): + print("== test_run_train_sync (CSV 不存在) ==") + try: + _run_train_sync("RF", "Chl-a", "/no/such/path.csv", 5, {}, Path("/tmp/x.joblib")) + print(" FAIL: 应抛异常") + except (FileNotFoundError, ValueError) as e: + print(f" 正确抛 {type(e).__name__}: {e}") + print(" PASS") + + +def test_run_train_sync_bad_target(): + print("== test_run_train_sync (target 列不存在) ==") + p = make_synthetic_csv() + try: + _run_train_sync("RF", "NopeTarget", str(p), 5, {}, Path("/tmp/x.joblib")) + print(" FAIL: 应抛 ValueError") + except ValueError as e: + print(f" 正确抛 ValueError: {e}") + print(" PASS") + + +def test_run_train_sync_str_feature_start(): + print("== test_run_train_sync (feature_start 用列名) ==") + p = make_synthetic_csv() + out_path = Path(tempfile.mkdtemp()) / "str_fs.joblib" + metadata = _run_train_sync("RF", "Chl-a", str(p), "feat_0", {"n_estimators": 10}, out_path) + assert metadata["feature_start"] == "feat_0" + assert metadata["n_features"] == 8 + assert metadata["feature_columns"][0] == "feat_0" + print(f" 列名 'feat_0' 解析正确, n_features={metadata['n_features']}") + print(" PASS") + + +if __name__ == "__main__": + test_load_train_df() + test_resolve_feature_start_int_and_str() + test_resolve_feature_start_str_miss() + test_get_model_pipeline_all_types() + test_get_model_pipeline_bad_type() + test_run_train_sync_rf_end_to_end() + test_run_train_sync_linearregression_fast() + test_run_train_sync_bad_csv() + test_run_train_sync_bad_target() + test_run_train_sync_str_feature_start() + print("\n>>> ALL SMOKE TESTS PASSED") diff --git a/new/app/api/endpoints.py b/new/app/api/endpoints.py new file mode 100644 index 0000000..4a012f1 --- /dev/null +++ b/new/app/api/endpoints.py @@ -0,0 +1,222 @@ +""" +API 路由集合 +============ + +把业务接口统一收口到 APIRouter,再由 main.py 通过 include_router 挂载。 + +当前包含的接口: + GET /api/algorithms 列出已注册的所有去耀斑算法(供前端下拉框) + POST /api/process/deglint 提交去耀斑处理任务,立即返回 task_id + GET /api/tasks/{task_id} 查询指定任务的状态与结果 + +派发链: + POST /api/process/deglint + └─ BackgroundTasks.add_task(execute_glint_removal_task, ...) + └─ get_remover(method) 从注册表拿到算法类 + └─ remover.process(input_zarr, output_zarr, **params) +""" + +import traceback +import uuid +from datetime import datetime +from typing import Any, Dict + +from fastapi import APIRouter, BackgroundTasks, HTTPException +from pydantic import BaseModel, Field + +# 并发安全的任务状态存储(替代旧版的 MOCK_TASK_DB) +from app.core.task_store import get_task, set_task, update_task + +# 算法注册表 API +from app.core.algorithms import get_remover, list_removers + + +# --------------------------------------------------------------------------- +# 路由实例 +# --------------------------------------------------------------------------- +# prefix 不在此处设置,统一在 main.py 挂载时给定,便于将来按版本拆分 +# (例如 /api/v1、/api/v2 共存时复用同一个 router 对象)。 +# --------------------------------------------------------------------------- +router = APIRouter(tags=["deglint"]) + + +# --------------------------------------------------------------------------- +# 请求 / 响应数据模型 +# --------------------------------------------------------------------------- +class DeglintRequest(BaseModel): + """POST /api/process/deglint 的请求体""" + + method: str = Field( + ..., + description="去耀斑方法名称,必须是已注册算法,例如 'kutser' / 'goodman'", + examples=["kutser"], + ) + params: Dict[str, Any] = Field( + default_factory=dict, + description=( + "传递给算法 process() 的超参数字典,例如 " + "Kutser: {'band_lower': 773, 'band_oxy': 845, 'band_upper': 893}; " + "Goodman: {'band_ref': 750, 'band_diff': 640, 'A': 0.0, 'B': 0.0}" + ), + examples=[{"band_lower": 773, "band_oxy": 845, "band_upper": 893}], + ) + + +class TaskAcceptedResponse(BaseModel): + """提交任务成功后立即返回的响应""" + + task_id: str + status: str # 一定是 PENDING + + +class AlgorithmListResponse(BaseModel): + """GET /api/algorithms 的响应""" + + algorithms: list # 已注册算法名列表 + count: int # 算法总数 + + +# --------------------------------------------------------------------------- +# 后台任务执行器(真实派发链) +# --------------------------------------------------------------------------- +# 注意:这里使用 async def。 +# FastAPI / Starlette 的 BackgroundTasks 支持 async function, +# 会在响应返回后自动 await 它,不影响主请求链路。 +# --------------------------------------------------------------------------- +async def execute_glint_removal_task( + task_id: str, + method: str, + params: Dict[str, Any], +) -> None: + """ + 后台异步执行器:按 method 名字从注册表取出算法类,实例化并运行 process()。 + + 状态机: + PENDING -> PROCESSING -> SUCCESS + └──> FAILED(含 error / traceback) + """ + # 0. 安全检查:任务记录必须已存在(POST 阶段已写入) + record = await get_task(task_id) + if record is None: + print(f"[{task_id}] 任务不存在, 跳过") + return + + # 1. 状态推进到 PROCESSING + await update_task( + task_id, + status="PROCESSING", + updated_at=datetime.now().isoformat(), + ) + print(f"[{task_id}] 开始处理 method={method} params={params}") + + # 2. 临时硬编码 IO 路径(未来由数据管理层提供) + # TODO: 替换为真实的数据管理服务返回的 zarr 路径 + input_zarr_path = "./data/temp_in.zarr" + output_zarr_path = f"./data/{task_id}_out.zarr" + + try: + # 3. 按 method 名字从注册表取算法类并实例化 + # get_remover 找不到时会抛 KeyError,下面的 except 会兜住 + algorithm_cls = get_remover(method) + remover = algorithm_cls() + + # 4. 调用算法(注意 await,因为 BaseGlintRemover.process 是 async) + await remover.process(input_zarr_path, output_zarr_path, **params) + + # 5. 成功:写回结果路径与状态 + await update_task( + task_id, + status="SUCCESS", + output_zarr_path=output_zarr_path, + error=None, + updated_at=datetime.now().isoformat(), + ) + print(f"[{task_id}] 处理完成 -> SUCCESS, output={output_zarr_path}") + + except Exception as exc: # noqa: BLE001 顶层兜底,绝不让后台任务静默失败 + # 6. 失败:记录错误信息与堆栈,便于前端排查 + await update_task( + task_id, + status="FAILED", + output_zarr_path=None, + error=f"{type(exc).__name__}: {exc}", + traceback=traceback.format_exc(), + updated_at=datetime.now().isoformat(), + ) + print(f"[{task_id}] 处理失败 -> {type(exc).__name__}: {exc}") + + +# --------------------------------------------------------------------------- +# GET /algorithms +# --------------------------------------------------------------------------- +# 返回当前已注册的所有算法名,供前端动态渲染下拉框 / 选择器。 +# --------------------------------------------------------------------------- +@router.get("/algorithms", response_model=AlgorithmListResponse) +async def list_registered_algorithms() -> Dict[str, Any]: + """列出已注册的去耀斑算法。""" + names = list(list_removers().keys()) + return {"algorithms": names, "count": len(names)} + + +# --------------------------------------------------------------------------- +# POST /process/deglint +# --------------------------------------------------------------------------- +# 提交去耀斑处理任务。FastAPI 在函数返回后才会把响应发给前端, +# 因此通过 BackgroundTasks 把耗时操作丢到后台,接口本身立刻返回 task_id。 +# --------------------------------------------------------------------------- +@router.post("/process/deglint", response_model=TaskAcceptedResponse) +async def submit_deglint( + payload: DeglintRequest, + background_tasks: BackgroundTasks, +) -> Dict[str, Any]: + """提交一个去耀斑处理任务,并立即返回 task_id。""" + + # 1. 生成唯一任务 ID(UUID4 足以保证全局唯一性) + task_id = str(uuid.uuid4()) + + # 2. 在任务库中登记一条 PENDING 记录(并发安全) + # 注意:output_zarr_path / error / traceback 字段在执行过程中被填充 + await set_task( + task_id, + { + "task_id": task_id, + "method": payload.method, + "params": payload.params, + "status": "PENDING", + "output_zarr_path": None, + "error": None, + "traceback": None, + "created_at": datetime.now().isoformat(), + "updated_at": datetime.now().isoformat(), + }, + ) + + # 3. 把真实执行器丢到后台 + background_tasks.add_task( + execute_glint_removal_task, + task_id, + payload.method, + payload.params, + ) + + # 4. 立即返回 task_id 与 PENDING 状态 + return {"task_id": task_id, "status": "PENDING"} + + +# --------------------------------------------------------------------------- +# GET /tasks/{task_id} +# --------------------------------------------------------------------------- +# 前端轮询此接口获取任务状态。PENDING / PROCESSING 表示仍在跑, +# SUCCESS 表示成功(含 output_zarr_path),FAILED 表示失败(含 error / traceback)。 +# --------------------------------------------------------------------------- +@router.get("/tasks/{task_id}") +async def get_task_status(task_id: str) -> Dict[str, Any]: + """查询指定任务的当前状态与结果。""" + + record = await get_task(task_id) + if record is None: + # 找不到 task_id 通常意味着客户端拼错了 ID,或者记录已被清理 + raise HTTPException(status_code=404, detail=f"task_id 不存在: {task_id}") + + # 直接返回字典,FastAPI 会自动 JSON 序列化 + return record diff --git a/new/app/api/modeling.py b/new/app/api/modeling.py new file mode 100644 index 0000000..ab5c2a8 --- /dev/null +++ b/new/app/api/modeling.py @@ -0,0 +1,786 @@ +""" +app/api/modeling.py +=================== + +机器学习与水质反演相关的 API 路由。 + +接口(最终路径, 挂载后): + POST /api/modeling/train 提交模型训练任务, 立即返回 task_id + GET /api/modeling/models 列出已训练好的模型(未来从磁盘 joblib 读) + POST /api/modeling/predict 提交模型推断任务, 立即返回 task_id + +设计要点 +-------- +- 训练 / 推断均为异步后台任务, 复用 app.core.task_store 的并发安全任务状态。 +- 模型元数据用模块级 _MODEL_REGISTRY 暂存(开发期内存存储), + 未来从磁盘 joblib 读时只需替换 list_trained_models() 内部实现即可。 +- /predict 已接入真实 sklearn + xarray + dask 流式推断: + * joblib.load 读模型(缺文件时降级为 Dummy RandomForestRegressor) + * xr.open_zarr 延迟打开影像, NaN 填 0 + * xr.apply_ufunc(dask="parallelized") 沿 (y, x) 逐 chunk 调 model.predict + * to_zarr(mode="w", compute=True) 流式写出, 内存峰值 ≈ 1 个 chunk +- /train 已接入真实 sklearn + pandas 训练管线: + * pd.read_csv 读结构化训练表(支持 [lat, lon, target_*, feature_*] 布局) + * 按 target 列 dropna 清洗;按 feature_start 索引/列名切分特征 + * sklearn Pipeline: StandardScaler -> {RF/SVR/LinearRegression/KNN/PLS} + * train_test_split(80/20) 划分, 计算 test_r2/rmse/mae + * joblib.dump({model, metadata}) 落盘 ./data/models/{model_id}.joblib + * 测试指标写回 TASK_STORE, 同时登记到 _MODEL_REGISTRY + 注: 旧版 SPXY / KS 划分留作未来扩展, 当前固定 random 划分 (test_size=0.2, random_state=42)。 +""" + +import asyncio +import traceback +import uuid +from datetime import datetime +from pathlib import Path +from typing import Any, Dict, List, Optional, Union + +import joblib +import numpy as np +import pandas as pd +import xarray as xr +from fastapi import APIRouter, BackgroundTasks +from pydantic import BaseModel, Field +from sklearn.cross_decomposition import PLSRegression +from sklearn.ensemble import RandomForestRegressor +from sklearn.linear_model import LinearRegression +from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score +from sklearn.model_selection import train_test_split +from sklearn.neighbors import KNeighborsRegressor +from sklearn.pipeline import Pipeline +from sklearn.preprocessing import StandardScaler +from sklearn.svm import SVR + +# 复用并发安全任务状态存储(与 deglint 共享同一份 TASK_STORE, +# 通过 task 记录里的 "kind" 字段区分 train / predict / deglint) +from app.core.task_store import get_task, set_task, update_task + + +# --------------------------------------------------------------------------- +# 路由实例 +# --------------------------------------------------------------------------- +# prefix="/modeling" 让本文件内只写 /train /models /predict 等短路径, +# 最终完整路径由 main.py 挂载时再补 /api。 +# --------------------------------------------------------------------------- +router = APIRouter(prefix="/modeling", tags=["modeling"]) + + +# --------------------------------------------------------------------------- +# 数据模型 +# --------------------------------------------------------------------------- +class TrainRequest(BaseModel): + """POST /api/modeling/train 的请求体""" + + model_type: str = Field( + ..., + description="模型类型, 例如 'RF' (随机森林) / 'SVR' (支持向量回归) / 'XGBoost' / 'MLP'", + examples=["RF", "SVR"], + ) + target: str = Field( + ..., + description="反演目标水质参数, 例如 'Chl-a' (叶绿素a) / 'TSS' (总悬浮物) / 'CDOM' (有色可溶有机物)", + examples=["Chl-a", "TSS", "CDOM"], + ) + train_data_path: str = Field( + ..., + description="训练数据集的 zarr 路径(包含 reflectance 变量与 target 标签)", + examples=["./data/train.zarr"], + ) + feature_start: Union[int, str] = Field( + default=4, + description=( + "特征列起始位置. 表格布局假定为 " + "[lat, lon, target_1, target_2, ..., feature_1, feature_2, ...] " + "可传 int 列索引(如 4)或 str 列名(如 '374.285' 波长起点)。" + "默认 4, 即前 4 列视为元数据/目标, 之后全部是特征。" + ), + examples=[4, "374.285"], + ) + params: Dict[str, Any] = Field( + default_factory=dict, + description="模型超参, 例如 RF 的 {'n_estimators': 100, 'max_depth': 20}", + examples=[{"n_estimators": 100, "max_depth": 20}], + ) + + +class PredictRequest(BaseModel): + """POST /api/modeling/predict 的请求体""" + + model_id: str = Field( + ..., + description="已训练模型的 ID(由 /api/modeling/train 返回或 /api/modeling/models 列出)", + ) + input_zarr_path: str = Field( + ..., + description="待推断影像的 zarr 路径", + examples=["./data/scene.zarr"], + ) + output_zarr_path: Optional[str] = Field( + default=None, + description=( + "输出 zarr 路径, 缺省时由后端按规则生成 " + "(如 ./data/{model_id}_{input_stem}_pred.zarr)" + ), + ) + + +class TaskAcceptedResponse(BaseModel): + """提交训练/推断任务后立即返回的响应""" + + task_id: str + status: str # 一定是 PENDING + kind: str # "train" / "predict", 便于前端识别任务类型 + + +class ModelInfo(BaseModel): + """单个模型的元信息(GET /api/modeling/models 的元素)""" + + model_id: str + model_type: str + target: str + params: Dict[str, Any] + path: str # joblib 文件路径 + created_at: str + train_task_id: str # 产生此模型的那个训练任务的 ID + + +class ModelListResponse(BaseModel): + """GET /api/modeling/models 的响应""" + + models: List[ModelInfo] + count: int + + +# --------------------------------------------------------------------------- +# 模块级模型注册表(开发期内存, 未来替换为磁盘扫描) +# --------------------------------------------------------------------------- +# model_id -> ModelInfo 字典 +# 读多写少, 用一个普通 dict 足够(CPython GIL 兜底)。 +# 写时(训练完成时)只发生一次, 无并发风险。 +# --------------------------------------------------------------------------- +_MODEL_REGISTRY: Dict[str, Dict[str, Any]] = {} + + +def _register_model(record: Dict[str, Any]) -> None: + """将训练完成的模型登记到内存注册表。""" + _MODEL_REGISTRY[record["model_id"]] = record + + +# --------------------------------------------------------------------------- +# 训练管线的模块级辅助函数 +# --------------------------------------------------------------------------- +# 设计要点 (与推断管线一致): +# 1) 模块级函数: dask / joblib 后端若走子进程 pickle, 嵌套闭包会丢字段。 +# 2) 同步执行: execute_train_task 用 asyncio.to_thread 派发, 内部全程同步阻塞。 +# 3) 失败抛异常: 异常由 execute_train_task 捕获, 转 FAILED + traceback。 +# --------------------------------------------------------------------------- + +# model_type (大写字符串) -> sklearn 估计器类 +# 与 OpenClaw model_configs 思路一致, 但此处只保留类 (参数由 params 透传) +_MODEL_CLASS_REGISTRY: Dict[str, type] = { + "RF": RandomForestRegressor, + "SVR": SVR, + "LinearRegression": LinearRegression, + "KNN": KNeighborsRegressor, + "PLS": PLSRegression, +} + + +def _get_model_pipeline(model_type: str, params: Optional[Dict[str, Any]]) -> Pipeline: + """ + 模型工厂: 按 model_type 选 sklearn 类, 用 StandardScaler + 估计器构造 Pipeline。 + + 与 OpenClaw 不同之处: 把 scaler 放进 Pipeline 第一步, + 推断时直接 pipeline.predict(X) 即可, scaler 参数与训练时严格一致。 + """ + model_cls = _MODEL_CLASS_REGISTRY.get(model_type) + if model_cls is None: + raise ValueError( + f"不支持的 model_type='{model_type}', " + f"可选: {sorted(_MODEL_CLASS_REGISTRY.keys())}" + ) + estimator = model_cls(**(params or {})) + return Pipeline([("scaler", StandardScaler()), ("model", estimator)]) + + +def _load_train_df(csv_path: str) -> pd.DataFrame: + """ + 读 CSV 训练表, 规整空串 / 空白 / NULL 等为 NaN。 + + 沿用 OpenClaw modeling_batch.load_data_batch 的读取策略: + na_values 显式列举 + 正则二次清理 (防 cell 内出现 " " 等纯空白)。 + """ + try: + df = pd.read_csv( + csv_path, + na_values=["", " ", "NaN", "nan", "NULL", "null"], + ) + except FileNotFoundError as exc: + raise FileNotFoundError(f"训练数据文件不存在: {csv_path}") from exc + except pd.errors.EmptyDataError as exc: + raise ValueError(f"训练数据文件为空: {csv_path}") from exc + # 二次清理: 残留的纯空白 cell + df = df.replace(r"^\s*$", np.nan, regex=True) + return df + + +def _resolve_feature_start( + df: pd.DataFrame, + feature_start: Union[int, str], +) -> int: + """ + 将 feature_start (int 索引 / str 列名) 统一解析为 int 列索引。 + + 与 OpenClaw modeling_batch.load_data_batch / load_data_single 一致: + str 走 columns.get_loc, int 直接返回。 + """ + if isinstance(feature_start, str): + if feature_start not in df.columns: + raise ValueError( + f"feature_start='{feature_start}' 不在 CSV 列中: {list(df.columns)}" + ) + return int(df.columns.get_loc(feature_start)) + return int(feature_start) + + +def _run_train_sync( + model_type: str, + target: str, + train_data_path: str, + feature_start: Union[int, str], + params: Optional[Dict[str, Any]], + output_model_path: Path, +) -> Dict[str, Any]: + """ + 完整同步训练流程 (由 execute_train_task 在线程池内调用): + + pd.read_csv -> 目标列 dropna -> 切特征 -> train_test_split(80/20) + -> Pipeline(StandardScaler + model).fit -> 评估 test_r2/rmse/mae + -> joblib.dump({model, metadata}, output_model_path) + + Returns: + metadata 字典, 含 test_r2 / test_rmse / test_mae / n_features 等, + 调用方负责写回 TASK_STORE 和 _MODEL_REGISTRY。 + + 注: 旧版 SPXY / KS 划分留作未来扩展 (params.split_method 控制), + 当前固定 random + test_size=0.2 + random_state=42。 + """ + df = _load_train_df(train_data_path) + + if target not in df.columns: + raise ValueError( + f"target='{target}' 不在 CSV 列中, 可选: {list(df.columns)}" + ) + + # 1) 清洗: 仅剔除 target NaN 的行 (与 OpenClaw load_data_single 一致) + df = df[df[target].notna()].copy() + if df.empty: + raise ValueError("target 剔除 NaN 后无样本, 终止训练") + + # 2) 特征切分 + feature_start_idx = _resolve_feature_start(df, feature_start) + feature_columns = list(df.columns[feature_start_idx:]) + + X = df.iloc[:, feature_start_idx:].astype(np.float64) + y = df[target].astype(np.float64).values + + # 3) 划分 (固定 random, 未来扩展 spxy/ks) + X_train, X_test, y_train, y_test = train_test_split( + X.values, + y, + test_size=0.2, + random_state=42, + ) + + # 4) 构造 Pipeline + 训练 + pipeline = _get_model_pipeline(model_type, params) + pipeline.fit(X_train, y_train) + + # 5) 测试集与训练集评估 + y_pred = pipeline.predict(X_test) + test_r2 = float(r2_score(y_test, y_pred)) + test_rmse = float(np.sqrt(mean_squared_error(y_test, y_pred))) + test_mae = float(mean_absolute_error(y_test, y_pred)) + + y_train_pred = pipeline.predict(X_train) + train_r2 = float(r2_score(y_train, y_train_pred)) + train_rmse = float(np.sqrt(mean_squared_error(y_train, y_train_pred))) + train_mae = float(mean_absolute_error(y_train, y_train_pred)) + + metadata: Dict[str, Any] = { + "model_type": model_type, + "target": target, + "feature_start": feature_start, + "feature_columns": feature_columns, + "n_features": int(X.shape[1]), + "n_samples": int(X.shape[0]), + "train_size": int(X_train.shape[0]), + "test_size": int(X_test.shape[0]), + "params": dict(params or {}), + "test_r2": test_r2, + "test_rmse": test_rmse, + "test_mae": test_mae, + "train_r2": train_r2, + "train_rmse": train_rmse, + "train_mae": train_mae, + "split_method": "random", + "trained_at": datetime.now().isoformat(), + } + + # 7) 持久化 (目录可能不存在, 顺手建) + output_model_path = Path(output_model_path) + output_model_path.parent.mkdir(parents=True, exist_ok=True) + joblib.dump( + {"model": pipeline, "metadata": metadata}, + output_model_path, + ) + + return metadata + + +# --------------------------------------------------------------------------- +# 推断管线的模块级辅助函数 +# --------------------------------------------------------------------------- +# 设计要点: +# 1) Dask 调度时, 函数必须可被工作进程 pickle 序列化。 +# 因此 _predict_block / _load_model / _make_dummy_model / _run_predict_sync +# 全部是模块级函数 (而非嵌套), 避免闭包陷阱。 +# 2) _predict_block 通过 model.predict(spectra_2d) 整批预测, +# 整张影像的 O(n_pixels * n_bands) 一次性预测在大矩阵上必 OOM, +# 因此外层用 xr.apply_ufunc(dask="parallelized") 把矩阵切块 +# 逐块进入此函数, 单次内存峰值 ≈ 1 个 (y_chunk, x_chunk, band) 大小。 +# --------------------------------------------------------------------------- + + +def _make_dummy_model(n_features: int) -> RandomForestRegressor: + """ + 构造一个 Dummy 随机森林回归器。 + + 用途: + 1) 真实 joblib 文件不存在时的连通性测试 + 2) 训练骨架尚未接入真实数据时的占位推断 + """ + rng = np.random.default_rng(42) + X = rng.random((200, n_features)) + y = rng.random(200) + model = RandomForestRegressor( + n_estimators=10, max_depth=5, random_state=0, n_jobs=1 + ) + model.fit(X, y) + return model + + +def _load_model(path: str, n_features: int) -> Any: + """ + 加载训练好的 sklearn 模型, 失败时降级 Dummy。 + + 优先级: + 1) path 存在且 joblib.load 成功 -> 返回真实模型 + 2) 否则 -> 降级为 Dummy 随机森林 (n_features 必须指定) + """ + p = Path(path) + if p.is_file() and p.stat().st_size > 0: + try: + print(f"[model] 从磁盘加载: {path}") + return joblib.load(path) + except Exception as exc: # noqa: BLE001 + print(f"[model] joblib.load 失败 ({type(exc).__name__}: {exc}), 降级 Dummy") + print(f"[model] 真实 joblib 不存在 ({path}), 使用 Dummy RandomForest") + return _make_dummy_model(n_features) + + +def _predict_block(spectra_3d: np.ndarray, model: Any) -> np.ndarray: + """ + 单个 dask chunk 的推断函数 (xr.apply_ufunc 会自动调度调用)。 + + Parameters + ---------- + spectra_3d : np.ndarray + 形状 (y_chunk, x_chunk, n_bands)。 + 此形状由 input_core_dims=[["band"]] 决定: + xarray 会把 band 维移到最后一轴, 然后按 (y, x) 的 chunk 切分调用本函数。 + model : 已 fit 好的 sklearn 估计器 + 接受 (n_samples, n_features) 输入, 返回 (n_samples,) 预测。 + + Returns + ------- + np.ndarray + 形状 (y_chunk, x_chunk), dtype float32 的标量预测图。 + """ + yc, xc, nb = spectra_3d.shape + # 2D 化: 每个像素一行光谱 + flat = spectra_3d.reshape(yc * xc, nb) + # sklearn 风格的批量预测 + pred = model.predict(flat) + # 还原为 2D 空间图, 强制 float32 节约一半内存 + return pred.reshape(yc, xc).astype(np.float32, copy=False) + + +def _run_predict_sync( + model: Any, + model_id: str, + input_zarr_path: str, + output_zarr_path: str, +) -> None: + """ + 同步推断主流程 (被 asyncio.to_thread 调用)。 + + 流程: + 1) xr.open_zarr 延迟打开 (dask 数组, 不一次性读入内存) + 2) NaN -> 0 清洗 (model.predict 不接受 NaN) + 3) xr.apply_ufunc 沿 (y, x) 逐 chunk 调 _predict_block + 4) 非水域置 NaN (zarr 支持 float NaN) + 5) to_zarr 触发整图计算 + 流式写出 + """ + # 1. 延迟打开输入 (关键: Dask 不一次性读入内存) + ds = xr.open_zarr(input_zarr_path, chunks="auto") + if "reflectance" not in ds.data_vars: + raise KeyError( + f"输入 zarr 缺少 'reflectance' 变量; 实际: {list(ds.data_vars)}" + ) + + reflectance = ds["reflectance"] # dims: (y, x, band) + n_bands = reflectance.sizes["band"] + + # 2. 水域掩膜 (与去耀斑算法同约定) + if "water_mask" in ds.data_vars or "water_mask" in ds.coords: + water_mask = ds["water_mask"].astype(bool) + else: + water_mask = xr.ones_like(reflectance.isel(band=0), dtype=bool) + + # 3. NaN 清洗: 填充 0 (model.predict 不接受 NaN) + refl_clean = reflectance.fillna(0.0) + + # 4. 核心: 用 apply_ufunc 把 model.predict 沿 (y, x) 应用 + # dask="parallelized" 让每个 (y_chunk, x_chunk, band) chunk + # 独立调 _predict_block, 任意时刻内存中只有若干个 chunk。 + prediction: xr.DataArray = xr.apply_ufunc( + _predict_block, + refl_clean, + kwargs={"model": model}, + input_core_dims=[["band"]], + output_core_dims=[[]], + dask="parallelized", + output_dtypes=[np.float32], + dask_gufunc_kwargs={"allow_rechunk": True}, + vectorize=False, + ) + + # 5. 非水域置 NaN (zarr 支持 float NaN, 便于后续可视化/掩膜分析) + prediction = prediction.where(water_mask, np.nan) + + # 6. 包装为 Dataset 并流式写出 + out = xr.Dataset( + {"prediction": prediction}, + attrs={ + "model_id": model_id, + "input_zarr_path": input_zarr_path, + "n_bands": n_bands, + "created_at": datetime.now().isoformat(), + }, + ) + # 保留 y/x 坐标 + out = out.assign_coords(y=ds["y"], x=ds["x"]) + + # to_zarr + compute=True 触发整图 dask 图求值 + # 中间会按 chunk 逐块调度到线程池, 内存峰值 ≈ 1 个 chunk 的体量 + out.to_zarr(output_zarr_path, mode="w", compute=True) + + +# --------------------------------------------------------------------------- +# 后台任务执行器 +# --------------------------------------------------------------------------- +async def execute_train_task( + task_id: str, + model_type: str, + target: str, + train_data_path: str, + feature_start: Union[int, str], + params: Dict[str, Any], +) -> None: + """ + 训练任务后台执行器(已接入真实 sklearn 训练流程)。 + + 流程: + 1) get_task 校验任务存在 + 2) update_task(PROCESSING) + 3) 生成 model_id / model_path + 4) asyncio.to_thread 派发 _run_train_sync 到默认线程池 + 5) 成功 -> _register_model + update_task(SUCCESS, 附 test_r2/rmse/mae) + 6) 失败 -> update_task(FAILED, 附 error + traceback) + """ + record = await get_task(task_id) + if record is None: + print(f"[{task_id}] 训练任务不存在, 跳过") + return + + await update_task( + task_id, + status="PROCESSING", + updated_at=datetime.now().isoformat(), + ) + print( + f"[{task_id}] 开始训练 model_type={model_type} target={target} " + f"train_data_path={train_data_path} feature_start={feature_start}" + ) + + # model_id 用 uuid4 前 12 位 (8 位易撞, 12 位兼顾可读性) + model_id = f"model_{uuid.uuid4().hex[:12]}" + model_path = Path(f"./data/models/{model_id}.joblib") + + try: + # 同步 sklearn / pandas 训练丢到默认线程池, 不阻塞 event loop + metadata = await asyncio.to_thread( + _run_train_sync, + model_type, + target, + train_data_path, + feature_start, + params, + model_path, + ) + + # 登记到内存注册表 (供 /predict 查 model_id) + _register_model( + { + "model_id": model_id, + "model_type": model_type, + "target": target, + "params": dict(params or {}), + "path": str(model_path), + "feature_start": feature_start, + "n_features": metadata["n_features"], + "test_r2": metadata["test_r2"], + "test_rmse": metadata["test_rmse"], + "test_mae": metadata["test_mae"], + "created_at": datetime.now().isoformat(), + "train_task_id": task_id, + } + ) + + # 把训练指标写回任务记录, 前端轮询时可直接看 + await update_task( + task_id, + status="SUCCESS", + model_id=model_id, + model_path=str(model_path), + test_r2=metadata["test_r2"], + test_rmse=metadata["test_rmse"], + test_mae=metadata["test_mae"], + n_features=metadata["n_features"], + n_samples=metadata["n_samples"], + error=None, + traceback=None, + updated_at=datetime.now().isoformat(), + ) + print( + f"[{task_id}] 训练完成 -> model_id={model_id} " + f"test_r2={metadata['test_r2']:.4f} test_rmse={metadata['test_rmse']:.4f}" + ) + + except Exception as exc: # noqa: BLE001 + # 失败时 model_path 不一定有产物, 显式置 None 方便前端判断 + await update_task( + task_id, + status="FAILED", + model_id=None, + model_path=None, + error=f"{type(exc).__name__}: {exc}", + traceback=traceback.format_exc(), + updated_at=datetime.now().isoformat(), + ) + print(f"[{task_id}] 训练失败 -> {type(exc).__name__}: {exc}") + + +async def execute_predict_task( + task_id: str, + model_id: str, + input_zarr_path: str, + output_zarr_path: Optional[str], +) -> None: + """ + 推断任务后台执行器(真实实现版)。 + + OOM 防护策略: + - xr.open_zarr(..., chunks="auto") 延迟打开, 整图不一次性读入内存 + - xr.apply_ufunc(..., dask="parallelized") 把影像按 chunk 切分 + - 每个 chunk 内部 reshape 成 2D, 调 model.predict, 再 reshape 回 2D + - 任意时刻内存峰值 ≈ 1 个 (y_chunk, x_chunk, band) chunk 的体量 + - 整图完成计算后再 to_zarr(compute=True) 流式写出 + """ + record = await get_task(task_id) + if record is None: + print(f"[{task_id}] 推断任务不存在, 跳过") + return + + # 1. 校验 model_id 是否已注册 (避免在后台任务里报模糊错误) + model_meta = _MODEL_REGISTRY.get(model_id) + if model_meta is None: + await update_task( + task_id, + status="FAILED", + error=f"model_id 不存在: {model_id}", + updated_at=datetime.now().isoformat(), + ) + print(f"[{task_id}] 推断失败 -> model_id 不存在: {model_id}") + return + + # 2. 自动生成 output_zarr_path (若未提供) + if output_zarr_path is None: + stem = input_zarr_path.rstrip("/\\").split("/")[-1].split("\\")[-1] + stem = stem.replace(".zarr", "") + output_zarr_path = f"./data/{model_id}_{stem}_pred.zarr" + + await update_task( + task_id, + status="PROCESSING", + updated_at=datetime.now().isoformat(), + ) + print(f"[{task_id}] 开始推断 model_id={model_id} input={input_zarr_path}") + + try: + # 3. 探测波段数 (用于 Dummy 模型适配) + # 这里只读 zarr 元数据 (.zarray 的 shape), 不读真实数据 + ds_probe = xr.open_zarr(input_zarr_path, chunks="auto") + if "reflectance" not in ds_probe.data_vars: + raise KeyError( + f"输入 zarr 缺少 'reflectance' 变量; 实际: {list(ds_probe.data_vars)}" + ) + n_bands = ds_probe["reflectance"].sizes["band"] + ds_probe.close() + + # 4. 加载模型 (真实文件优先, Dummy 兜底) + model = _load_model(model_meta["path"], n_features=n_bands) + + # 5. 包装同步执行, 丢到线程池, 事件循环不阻塞 + await asyncio.to_thread( + _run_predict_sync, + model, + model_id, + input_zarr_path, + output_zarr_path, + ) + + await update_task( + task_id, + status="SUCCESS", + output_zarr_path=output_zarr_path, + model_id=model_id, + error=None, + updated_at=datetime.now().isoformat(), + ) + print(f"[{task_id}] 推断完成 -> output={output_zarr_path}") + + except Exception as exc: # noqa: BLE001 + tb_text = traceback.format_exc() + await update_task( + task_id, + status="FAILED", + output_zarr_path=None, + error=f"{type(exc).__name__}: {exc}", + traceback=tb_text, + updated_at=datetime.now().isoformat(), + ) + print(f"[{task_id}] 推断失败 -> {type(exc).__name__}: {exc}") + print(tb_text) + + +# --------------------------------------------------------------------------- +# POST /api/modeling/train +# --------------------------------------------------------------------------- +@router.post("/train", response_model=TaskAcceptedResponse) +async def submit_train( + payload: TrainRequest, + background_tasks: BackgroundTasks, +) -> Dict[str, Any]: + """提交一个模型训练任务, 立即返回 task_id。""" + + task_id = str(uuid.uuid4()) + await set_task( + task_id, + { + "task_id": task_id, + "kind": "train", + "model_type": payload.model_type, + "target": payload.target, + "train_data_path": payload.train_data_path, + "feature_start": payload.feature_start, + "params": payload.params, + "status": "PENDING", + "model_id": None, + "model_path": None, + "test_r2": None, + "test_rmse": None, + "test_mae": None, + "n_features": None, + "n_samples": None, + "error": None, + "traceback": None, + "created_at": datetime.now().isoformat(), + "updated_at": datetime.now().isoformat(), + }, + ) + background_tasks.add_task( + execute_train_task, + task_id, + payload.model_type, + payload.target, + payload.train_data_path, + payload.feature_start, + payload.params, + ) + return {"task_id": task_id, "status": "PENDING", "kind": "train"} + + +# --------------------------------------------------------------------------- +# GET /api/modeling/models +# --------------------------------------------------------------------------- +@router.get("/models", response_model=ModelListResponse) +async def list_trained_models() -> Dict[str, Any]: + """ + 列出已训练好的模型。 + + 未来实现: 从 ./data/models/*.joblib 扫描元信息, + 当前直接从内存 _MODEL_REGISTRY 读。 + """ + models = list(_MODEL_REGISTRY.values()) + # 按 created_at 倒序, 最新训练的在前 + models.sort(key=lambda m: m.get("created_at", ""), reverse=True) + return {"models": models, "count": len(models)} + + +# --------------------------------------------------------------------------- +# POST /api/modeling/predict +# --------------------------------------------------------------------------- +@router.post("/predict", response_model=TaskAcceptedResponse) +async def submit_predict( + payload: PredictRequest, + background_tasks: BackgroundTasks, +) -> Dict[str, Any]: + """提交一个模型推断任务, 立即返回 task_id。""" + + task_id = str(uuid.uuid4()) + await set_task( + task_id, + { + "task_id": task_id, + "kind": "predict", + "model_id": payload.model_id, + "input_zarr_path": payload.input_zarr_path, + "output_zarr_path": payload.output_zarr_path, + "status": "PENDING", + "error": None, + "traceback": None, + "created_at": datetime.now().isoformat(), + "updated_at": datetime.now().isoformat(), + }, + ) + background_tasks.add_task( + execute_predict_task, + task_id, + payload.model_id, + payload.input_zarr_path, + payload.output_zarr_path, + ) + return {"task_id": task_id, "status": "PENDING", "kind": "predict"} diff --git a/new/app/core/algorithms/__init__.py b/new/app/core/algorithms/__init__.py new file mode 100644 index 0000000..6cd03b7 --- /dev/null +++ b/new/app/core/algorithms/__init__.py @@ -0,0 +1,40 @@ +""" +去耀斑算法包 +============ + +通过「注册表 + 策略模式」组织不同的去耀斑算法。 +所有具体算法都应继承 BaseGlintRemover,并使用 @register_glint_remover +装饰器把算法名和实现类绑定。 + +外部调用约定 +------------ +1. 所有算法子模块必须在本 __init__ 中显式 import, + 这样装饰器才会被执行、注册表才会被填满。 +2. 上层(endpoints、worker)只允许: + from app.core.algorithms import get_remover + 来获取算法类,不要直接 import 具体实现类, + 保持调度层与具体算法的解耦。 +""" + +from app.core.algorithms.base import BaseGlintRemover +from app.core.algorithms.registry import ( + get_remover, + list_removers, + register_glint_remover, + unregister_glint_remover, +) + +# ---- 算法子模块 import 区 ---- +# 新增算法时,在这里加一行 import,确保装饰器被执行。 +from app.core.algorithms import goodman # Goodman +from app.core.algorithms import kutser # Kutser +# from app.core.algorithms import hedley # Hedley +# from app.core.algorithms import sugar # SUGAR + +__all__ = [ + "BaseGlintRemover", + "register_glint_remover", + "get_remover", + "list_removers", + "unregister_glint_remover", +] diff --git a/new/app/core/algorithms/base.py b/new/app/core/algorithms/base.py new file mode 100644 index 0000000..47bce25 --- /dev/null +++ b/new/app/core/algorithms/base.py @@ -0,0 +1,85 @@ +""" +去耀斑算法抽象基类 +================== + +设计目标(策略模式 Strategy Pattern) +------------------------------------ +本模块定义了所有去耀斑算法必须遵守的标准接口。 +未来的 Kutser、Goodman、Hedley、SUGAR 等算法都将继承本基类, +并实现统一的 process() 方法。 + +输入输出规范 +------------ +所有算法的输入与输出均统一为 **Zarr 文件路径**(字符串), +而不是内存中的 numpy ndarray。这样做的核心收益是: + + 1. **解耦数据存储与内存计算**: + 算法只关心「从哪个 zarr 读、写到哪个 zarr」, + 至于数据最初来自 GeoTIFF / HDF5 / NetCDF / 内存数组, + 都由 IO 层负责归一化转为 zarr。 + 2. **支持 Out-of-Core 计算**: + 影像往往超过内存上限,zarr 分块(chunk)天然支持按块读取, + 算法实现可以借助 dask / xarray 进行流式计算。 + 3. **可缓存、可复用**: + 中间产物落盘后,下游算法(大气校正、辐射定标)能直接消费, + 避免重复 IO。 + 4. **易于并行与分布式**: + 任务调度层只需把两个路径扔给 worker,无需关心数据细节。 + +约定 +---- +- 子类应实现 process(),完成「读 -> 计算 -> 写」的完整流程。 +- process() 返回 True 表示成功,False 表示失败。 +- 失败时建议抛出异常而非仅返回 False,便于上层 BackgroundTasks 捕获并写入 error 字段。 +""" + +from abc import ABC, abstractmethod +from typing import Any + + +class BaseGlintRemover(ABC): + """ + 去耀斑算法抽象基类。 + + 所有具体算法(Kutser / Goodman / Hedley / SUGAR …)必须继承本类并实现 process()。 + 子类可在 __init__ 中接收自己的超参数(如参考波段、阈值等), + 真正的输入输出数据则由 process() 的两个 zarr 路径参数指定。 + """ + + # 子类可覆盖的算法名称标识,用于调度层按 method 名字查找 + name: str = "base" + + @abstractmethod + async def process( + self, + input_zarr_path: str, + output_zarr_path: str, + **kwargs: Any, + ) -> bool: + """ + 执行去耀斑处理。 + + Parameters + ---------- + input_zarr_path : str + 输入高光谱影像的 zarr 存储路径。 + 数据已由 IO 层完成格式归一化(波段、坐标系、空间维度均已对齐)。 + output_zarr_path : str + 处理结果(去耀斑后影像)的 zarr 存储路径。 + 子类需自行创建该 zarr 存储并写入结果。 + **kwargs : Any + 算法的可选超参数,例如: + - reference_band: 参考近红外波段索引 + - chunk_size: 计算分块大小 + - 其它算法特定参数 + + Returns + ------- + bool + True 表示处理成功,False 表示失败。 + 建议在出错时直接 raise,由调用方统一记录到任务状态。 + """ + raise NotImplementedError + + def __repr__(self) -> str: # pragma: no cover - 调试辅助 + return f"<{self.__class__.__name__} name={self.name!r}>" diff --git a/new/app/core/algorithms/goodman.py b/new/app/core/algorithms/goodman.py new file mode 100644 index 0000000..c6f3ecf --- /dev/null +++ b/new/app/core/algorithms/goodman.py @@ -0,0 +1,123 @@ +""" +app/core/algorithms/goodman.py +=============================== + +Goodman et al. 2008 去耀斑算法的 xarray + dask 流式实现。 + +算法公式 +-------- + R_corrected = R_raw - R_750 + A + B * (R_640 - R_750) + +其中: + R_raw -- 原始反射率 (y, x, band) + R_750 -- λ=750 nm 处的反射率(红外参考波段, 远离水汽吸收) + R_640 -- λ=640 nm 处的反射率(可见光差异波段) + A, B -- 经验回归参数(用户可通过 params 传入, 默认全 0) + +后处理 +------ +- 负值截断为 0(Clamp to 0) +- 仅在水域掩膜 (water_mask) 内生效, 水外置 0 + +维度约定 +-------- + reflectance: (y, x, band), band 坐标通常为 wavelength (nm) + water_mask : (y, x), 布尔类型, True = 水域 +""" + +import asyncio +from typing import Any + +import xarray as xr + +from app.core.algorithms.base import BaseGlintRemover +from app.core.algorithms.registry import register_glint_remover + + +# --------------------------------------------------------------------------- +# 默认参数 +# --------------------------------------------------------------------------- +# 与原始 Goodman 2008 论文符号保持一致, 方便用户交叉对照。 +# A、B 通常通过对纯净深水区做 (R_corr - R_raw) ~ (R_640 - R_750) 回归得到; +# 在缺乏先验知识时, 退化为 A=0, B=0 即等价于 R_corrected = clip(R_raw - R_750, 0)。 +# --------------------------------------------------------------------------- +DEFAULT_BAND_REF: float = 750.0 # λ_750 nm, 红外参考波段 +DEFAULT_BAND_DIFF: float = 640.0 # λ_640 nm, 可见光差异波段 +DEFAULT_A: float = 0.0 # 公式中的常数偏移项 +DEFAULT_B: float = 0.0 # 公式中的斜率项 + + +@register_glint_remover("goodman") +class GoodmanGlintRemover(BaseGlintRemover): + """Goodman et al. 2008 去耀斑算法""" + + name = "goodman" + + async def process( + self, + input_zarr_path: str, + output_zarr_path: str, + **kwargs: Any, + ) -> bool: + # 1. 解析超参数(带默认值, 方便用户按需覆盖) + band_ref: float = kwargs.get("band_ref", DEFAULT_BAND_REF) + band_diff: float = kwargs.get("band_diff", DEFAULT_BAND_DIFF) + A: float = kwargs.get("A", DEFAULT_A) + B: float = kwargs.get("B", DEFAULT_B) + + # 2. 把同步的 xarray/dask 计算丢到工作线程, + # 避免阻塞 FastAPI 的事件循环 + return await asyncio.to_thread( + self._process_sync, + input_zarr_path, + output_zarr_path, + band_ref, + band_diff, + A, + B, + ) + + @staticmethod + def _process_sync( + input_zarr_path: str, + output_zarr_path: str, + band_ref: float, + band_diff: float, + A: float, + B: float, + ) -> bool: + # 1. 以 zarr 路径打开(dask-backed, 不物化到内存) + # chunks="auto" 让 dask 根据每条坐标轴的大小自动决定分块 + ds = xr.open_zarr(input_zarr_path, chunks="auto") + reflectance = ds["reflectance"] # (y, x, band) + + # 2. 用 sel + method='nearest' 提取两个关键波段 + # 返回形状 (y, x), 后续与 (y, x, band) 算术时会自动广播 + R_750 = reflectance.sel(band=band_ref, method="nearest") + R_640 = reflectance.sel(band=band_diff, method="nearest") + + # 3. Goodman 公式: xarray 沿 band 维度自动广播 + # R_corr = R_raw - R_750 + A + B * (R_640 - R_750) + result = reflectance - R_750 + A + B * (R_640 - R_750) + + # 4. 负值截断为 0(clip(min=0) 优于 where(>0, 0, _): + # 不构造布尔中间数组, 底层走 dask 矢量化 clip 路径) + result = result.clip(min=0) + + # 5. 仅在水域内生效(水外强制为 0) + # 优先从 zarr 内部读 water_mask 变量, 缺失则视为全图水域 + if "water_mask" in ds: + water_mask = ds["water_mask"].astype(bool) + result = result.where(water_mask, 0) + + # 6. 构造输出 Dataset, 保留元信息(波段坐标/属性等) + out = xr.Dataset({"reflectance": result}) + if ds.attrs: + out.attrs = dict(ds.attrs) + if reflectance.attrs: + out["reflectance"].attrs = dict(reflectance.attrs) + + # 7. 流式写出(Out-of-Core):不一次性物化大数组, + # dask 会按 chunk 边算边写, 内存峰值 ≈ 单个 chunk 大小 + out.to_zarr(output_zarr_path, mode="w", compute=True) + return True diff --git a/new/app/core/algorithms/kutser.py b/new/app/core/algorithms/kutser.py new file mode 100644 index 0000000..73aff2f --- /dev/null +++ b/new/app/core/algorithms/kutser.py @@ -0,0 +1,211 @@ +""" +Kutser 去耀斑算法(xarray + dask 重构版) +======================================== + +旧版痛点 +-------- +原始 Kutser 实现(参考 Kutser et al., 2013)通常写成像这样: + + R_corr = np.zeros_like(R_raw) + for b in range(n_bands): + for y in range(H): + for x in range(W): + if water_mask[y, x]: + R_corr[y, x, b] = ( + R_raw[y, x, b] - G_list[b] * D_norm[y, x] + ) + with rasterio.open(..., 'w') as dst: + dst.write(R_corr) + +问题: + 1. 三重 Python 循环,每次只做一个浮点运算,解释器开销巨大; + 2. 一次性把整张图 R_raw 读进内存,大影像直接 OOM; + 3. rasterio 写出要求 numpy 连续数组,进一步放大内存。 + +本文件用 xarray + dask 重写: + - 用 DataArray 维度广播,三重循环 → 一行表达式; + - 用 dask chunk 保持数据常驻磁盘、流式计算; + - 用 to_zarr 边算边写,输出格式与算法层彻底解耦。 +""" + +import asyncio +from typing import Any + +import xarray as xr + +from app.core.algorithms.base import BaseGlintRemover +from app.core.algorithms.registry import register_glint_remover + + +# --------------------------------------------------------------------------- +# 算法实现 +# --------------------------------------------------------------------------- +@register_glint_remover("kutser") +class KutserGlintRemover(BaseGlintRemover): + """ + Kutser 近红外扣除法去耀斑。 + + 数学公式(与旧版完全等价) + ------------------------- + 1) 水汽吸收深度 D(每像素): + D = (R(λ_lower) + R(λ_upper)) / 2 - R(λ_oxy) + 2) 全局归一化因子 D_max: + D_max = max(D) over 水域 + 归一化: + D_norm = D / D_max + 3) 每波段水域范围: + G_list[b] = max(R[:, :, b] over 水域) - min(R[:, :, b] over 水域) + 4) 校正公式(每像素、每波段): + R_corr(λ_b) = R_raw(λ_b) - G_list[b] * D_norm + """ + + # Kutser 2013 论文里使用的参考波段(nm): + # λ_lower = 773, λ_oxy = 845, λ_upper = 893 + # 允许通过 kwargs 覆盖,便于适配 MERIS / OLCI / Landsat 等不同传感器。 + DEFAULT_BAND_LOWER: float = 773.0 + DEFAULT_BAND_OXY: float = 845.0 + DEFAULT_BAND_UPPER: float = 893.0 + + # -------------------------------------------------------------- + # 公开异步入口 + # -------------------------------------------------------------- + # xarray / dask 的算子本身是同步阻塞的。在 async 函数中, + # 用 asyncio.to_thread 把同步体丢到默认线程池执行, + # 避免阻塞 FastAPI 的事件循环。 + # -------------------------------------------------------------- + async def process( + self, + input_zarr_path: str, + output_zarr_path: str, + **kwargs: Any, + ) -> bool: + return await asyncio.to_thread( + self._process_sync, + input_zarr_path, + output_zarr_path, + kwargs, + ) + + # -------------------------------------------------------------- + # 同步核心实现 + # -------------------------------------------------------------- + def _process_sync( + self, + input_zarr_path: str, + output_zarr_path: str, + kwargs: dict, + ) -> bool: + # ============================================================ + # 步骤 0:打开 zarr,建立 dask 计算图 + # ============================================================ + # chunks="auto":让 dask 根据 zarr 的存储分块自动选择内存上限, + # 数据不会一次性全部 materialize 进 RAM。 + # ============================================================ + ds = xr.open_zarr(input_zarr_path, chunks="auto") + reflectance: xr.DataArray = ds["reflectance"] # 维度约定:(y, x, band) + + # 维度顺序约定(也可根据 ds.dims 自动适配): + assert "y" in reflectance.dims and "x" in reflectance.dims and "band" in reflectance.dims, ( + f"reflectance 必须包含 y/x/band 三个维度,实际为: {reflectance.dims}" + ) + + # ============================================================ + # 步骤 1:取出 3 个参考波段对应的二维 (y, x) 切片 + # ============================================================ + # 假设 band 维度的坐标是 wavelength(nm)。 + # 用 sel(..., method="nearest") 自动匹配最接近的波段。 + # ============================================================ + wl_lower = float(kwargs.get("band_lower", self.DEFAULT_BAND_LOWER)) + wl_oxy = float(kwargs.get("band_oxy", self.DEFAULT_BAND_OXY)) + wl_upper = float(kwargs.get("band_upper", self.DEFAULT_BAND_UPPER)) + + R_lower = reflectance.sel(band=wl_lower, method="nearest") # (y, x) + R_upper = reflectance.sel(band=wl_upper, method="nearest") # (y, x) + R_oxy = reflectance.sel(band=wl_oxy, method="nearest") # (y, x) + + # ============================================================ + # 步骤 2:水域掩膜 + # ============================================================ + # 优先从 zarr 内部读取 water_mask 变量; + # 如果不存在,则假定整幅图都是水域(开发期兜底)。 + # ============================================================ + if "water_mask" in ds: + water_mask = ds["water_mask"].astype(bool) + else: + water_mask = xr.ones_like( + reflectance.isel(band=0), dtype=bool + ) + + # ============================================================ + # 步骤 3:水汽吸收深度 D(每像素,形状 (y, x)) + # ============================================================ + # 旧版:D[y, x] = (R_lower[y, x] + R_upper[y, x]) / 2 - R_oxy[y, x] + # 新版:一行表达式,dask 自动构建 lazy 计算图。 + # ============================================================ + D = (R_lower + R_upper) / 2.0 - R_oxy # (y, x),dtype 与 reflectance 一致 + + # ============================================================ + # 步骤 4:全局归一化因子 D_max(标量,0-dim DataArray) + # ============================================================ + # 关键:先 .where(water_mask) 把非水域置 NaN, + # 再 .max() 跨 (x, y) 聚合,自动规约到 0 维。 + # dask 此时仍然没有真正计算,等到 to_zarr 时再触发。 + # ============================================================ + D_max = D.where(water_mask).max() # scalar + # 容错:如果水域为空导致 D_max 为 NaN,用极小值兜底,避免除零 + D_max = D_max.fillna(1e-6) + + # ============================================================ + # 步骤 5:归一化 D_norm(形状 (y, x)) + # ============================================================ + D_norm = D / D_max # 标量除以 (y, x) 数组 → 自动广播 + + # ============================================================ + # 步骤 6:每波段水域范围 G_list(形状 (band,)) + # ============================================================ + # 旧版三重循环内部还要做一次 min/max 聚合。 + # xarray 版本:把 (y, x) 一起 reduce,只保留 band 维度。 + # ============================================================ + R_water = reflectance.where(water_mask) # (y, x, band),非水域 NaN + G_min = R_water.min(dim=["x", "y"]) # (band,) + G_max = R_water.max(dim=["x", "y"]) # (band,) + G_list = (G_max - G_min).fillna(0.0) # (band,),容错 + + # ============================================================ + # 步骤 7:校正公式(最关键的一行,演示 xarray 广播) + # ============================================================ + # 旧版需要: + # for b in bands: + # for y in range(H): + # for x in range(W): + # R_corr[y,x,b] = R_raw[y,x,b] - G_list[b] * D_norm[y,x] + # + # xarray 维度对齐规则: + # R_raw : (y, x, band) + # G_list: (band,) → 缺失 y, x 自动扩展 + # D_norm: (y, x) → 缺失 band 自动扩展 + # 乘法结果: (y, x, band) → 减法对齐 + # 一行表达式完成「三重 for 循环 + 标量索引」的语义。 + # ============================================================ + corrected = reflectance - G_list * D_norm # (y, x, band) + + # ============================================================ + # 步骤 8:水域掩膜过滤(非水域置 NaN) + # ============================================================ + result = corrected.where(water_mask) + + # ============================================================ + # 步骤 9:持久化为 zarr + # ============================================================ + # mode="w":覆盖写入(如果目标已存在则删除重建)。 + # compute=True:阻塞直到整张图算完并落盘。 + # 由于数据始终是 dask chunk + 流式写出, + # 内存峰值 ≈ 单个 chunk 大小,与整张影像大小无关。 + # ============================================================ + out = xr.Dataset({"reflectance": result}) + # 保留原数据集的全局属性 / 坐标信息(CRS、wavelength、...) + out.attrs = dict(ds.attrs) + out["reflectance"].attrs = dict(reflectance.attrs) + out.to_zarr(output_zarr_path, mode="w", compute=True) + + return True diff --git a/new/app/core/algorithms/registry.py b/new/app/core/algorithms/registry.py new file mode 100644 index 0000000..d70e841 --- /dev/null +++ b/new/app/core/algorithms/registry.py @@ -0,0 +1,135 @@ +""" +算法注册表(Registry / Factory) +================================ + +通过装饰器把「算法名字符串」与「算法实现类」绑定在一起。 +上层调度层(FastAPI endpoints、BackgroundTasks worker)只需要拿到 +前端传过来的 method 字符串,就可以自动派发到对应的算法实现, +而无需写一长串 if/elif。 + +使用示例 +-------- + + from app.core.algorithms import BaseGlintRemover + from app.core.algorithms.registry import ( + register_glint_remover, + get_remover, + list_removers, + ) + + @register_glint_remover("kutser") + class KutserGlintRemover(BaseGlintRemover): + async def process(self, input_zarr_path, output_zarr_path, **kwargs): + ... + + # 派发 + Cls = get_remover(method_from_request) + remover = Cls() + await remover.process(input_zarr_path, output_zarr_path, **kwargs) + +设计要点 +-------- +- 注册动作发生在「类定义时」,所以必须在所有算法 import 完之后 + 注册表才完整。可以在 `app/core/algorithms/__init__.py` 中 + 把算法子模块 import 一遍来强制触发注册。 +- 重复注册同名算法会直接抛错,避免静默覆盖。 +- name 会同步写回到类的 `name` 属性,便于算法自身查询身份。 +""" + +from typing import Dict, Type + +from app.core.algorithms.base import BaseGlintRemover + + +# 全局注册表:name(str) -> 实现类(type),类未被实例化 +_REGISTRY: Dict[str, Type[BaseGlintRemover]] = {} + + +def register_glint_remover(name: str): + """ + 类装饰器工厂:把传入 name 的算法类注册到全局注册表。 + + Parameters + ---------- + name : str + 算法标识,建议小写下划线风格,例如 "kutser"、"goodman"。 + + Raises + ------ + ValueError + - name 不是非空字符串 + - name 已经被其它类占用 + TypeError + - 被装饰的对象不是 BaseGlintRemover 的子类 + """ + + # ---- 防御性校验:name 必须是合法字符串 ---- + if not isinstance(name, str) or not name.strip(): + raise ValueError( + f"register_glint_remover 的 name 必须是非空字符串,收到: {name!r}" + ) + + def decorator(cls: Type[BaseGlintRemover]) -> Type[BaseGlintRemover]: + # ---- 防御性校验:被装饰对象必须是 BaseGlintRemover 子类 ---- + if not isinstance(cls, type) or not issubclass(cls, BaseGlintRemover): + raise TypeError( + f"@register_glint_remover 只能装饰 BaseGlintRemover 的子类," + f"收到: {cls!r}" + ) + + # ---- 防御性校验:禁止静默覆盖 ---- + if name in _REGISTRY: + raise ValueError( + f"算法名 {name!r} 已被 {_REGISTRY[name].__name__} 占用," + f"请使用其它名字或先调用 unregister_glint_remover() 注销旧实现。" + ) + + # 同步把 name 写回类属性,便于算法自身和日志输出使用 + cls.name = name + _REGISTRY[name] = cls + return cls + + return decorator + + +def get_remover(name: str) -> Type[BaseGlintRemover]: + """ + 按算法名字符串取出对应的实现类(未实例化)。 + + 调用方拿到类后自行 `Cls(...)` 构造实例,再调用 process()。 + + Raises + ------ + KeyError + 当 name 不在注册表中时抛出,错误信息中附带已注册列表便于排查。 + """ + try: + return _REGISTRY[name] + except KeyError as exc: + known = ", ".join(sorted(_REGISTRY)) or "<空>" + raise KeyError( + f"未注册的算法名: {name!r}。已注册的算法: {known}" + ) from exc + + +def list_removers() -> Dict[str, Type[BaseGlintRemover]]: + """ + 返回当前注册表的浅拷贝。 + 可用于: + - 调试日志 + - 给前端暴露一个 GET /api/algorithms 接口 + - 单元测试断言 + """ + return dict(_REGISTRY) + + +def unregister_glint_remover(name: str) -> None: + """ + 注销指定算法。主要给: + - 单元测试 + - 热重载 / 插件卸载场景 + 生产代码一般不需要调用。 + """ + if name not in _REGISTRY: + raise KeyError(f"未注册的算法名: {name!r}") + del _REGISTRY[name] diff --git a/new/app/core/task_store.py b/new/app/core/task_store.py new file mode 100644 index 0000000..aa1545d --- /dev/null +++ b/new/app/core/task_store.py @@ -0,0 +1,91 @@ +""" +app/core/task_store.py +====================== + +并发安全的内存任务状态存储,替代早期 mock 流水线中的 MOCK_TASK_DB。 + +设计目标 +-------- +1. 在单进程内提供事件循环级别的互斥(asyncio.Lock), + 避免在 update 与 set/get 之间穿插 await 时发生状态不一致。 +2. 暴露异步 API(set_task / update_task / get_task), + 让调用方在 async 上下文中显式表达临界区。 +3. 保留一个同步的 has_task() 用于轻量存在性判断。 +4. 生产环境应替换为 Redis / SQLite / PostgreSQL, + 但接口形状保持一致, 便于上层调用方无缝迁移。 + +使用约定 +-------- +- 写入初始 PENDING 记录: await set_task(task_id, record) +- 增量更新字段(PROCESSING/SUCCESS/FAILED):await update_task(task_id, **fields) +- 读取任务记录: await get_task(task_id) # 可能返回 None +- 同步判断是否存在: has_task(task_id) +""" + +import asyncio +from typing import Any, Dict, Optional + + +# --------------------------------------------------------------------------- +# 全局存储与锁 +# --------------------------------------------------------------------------- +# TASK_STORE: task_id -> 任务记录 +# 任务记录字段约定(与 endpoints.py 保持一致): +# task_id, method, params, status, +# output_zarr_path, error, traceback, +# created_at, updated_at +# --------------------------------------------------------------------------- +TASK_STORE: Dict[str, Dict[str, Any]] = {} + +# 单进程内的事件循环级互斥锁 +# 注意:asyncio.Lock 必须在事件循环内创建, 故在模块顶层实例化时 +# 仅获取引用, 第一次使用 (await lock.acquire()) 会在运行循环内进行。 +_lock: asyncio.Lock = asyncio.Lock() + + +# --------------------------------------------------------------------------- +# 异步 API +# --------------------------------------------------------------------------- +async def set_task(task_id: str, record: Dict[str, Any]) -> None: + """ + 初始化或整体覆盖一个任务记录。 + + 用法:POST 端点收到提交请求后立即调用, 写入 PENDING 状态的初始记录。 + """ + async with _lock: + TASK_STORE[task_id] = record + + +async def update_task(task_id: str, **fields: Any) -> None: + """ + 按字段增量更新任务记录。 + + 用法:后台执行器在 PROCESSING / SUCCESS / FAILED 等状态切换时调用。 + 若 task_id 不存在, setdefault 会自动创建一个空 dict 再 update(防御性兜底)。 + """ + async with _lock: + record = TASK_STORE.setdefault(task_id, {}) + record.update(fields) + + +async def get_task(task_id: str) -> Optional[Dict[str, Any]]: + """ + 读取任务记录; 不存在时返回 None。 + + 用法:GET /api/tasks/{task_id} 用此接口查询。 + """ + async with _lock: + return TASK_STORE.get(task_id) + + +# --------------------------------------------------------------------------- +# 同步 API(轻量) +# --------------------------------------------------------------------------- +def has_task(task_id: str) -> bool: + """ + 同步判断 task_id 是否存在。 + + 适用于不需要锁的轻量场景(例如日志前置判断); + 在 async 上下文中仍可调用, 因为 dict 的 in 判断是原子操作。 + """ + return task_id in TASK_STORE diff --git a/new/app/main.py b/new/app/main.py new file mode 100644 index 0000000..233f3e1 --- /dev/null +++ b/new/app/main.py @@ -0,0 +1,62 @@ +""" +WQ_GUI FastAPI 后端入口 +======================= + +应用启动与全局中间件配置: + - CORS:开发阶段允许所有来源,方便本地前端(Vite / Webpack dev server)联调 + - 路由:通过 include_router 挂载 app/api/endpoints.py 中的业务接口 + +业务接口说明: + POST /api/process/deglint 提交去耀斑处理任务,立即返回 task_id + GET /api/tasks/{task_id} 查询指定任务的状态与结果 +""" + +from typing import Dict + +from fastapi import FastAPI +from fastapi.middleware.cors import CORSMiddleware + +from app.api.endpoints import router as deglint_router +from app.api.modeling import router as modeling_router + + +# --------------------------------------------------------------------------- +# FastAPI 应用实例 +# --------------------------------------------------------------------------- +app = FastAPI( + title="WQ_GUI Backend", + description="高光谱影像去耀斑处理 API", + version="0.2.0", +) + + +# --------------------------------------------------------------------------- +# CORS 中间件 +# --------------------------------------------------------------------------- +# 开发阶段:放开所有来源、方法和头部,方便本地前端(任意端口)联调。 +# 生产环境务必收敛 allow_origins 为前端真实域名,避免安全风险。 +# --------------------------------------------------------------------------- +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + + +# --------------------------------------------------------------------------- +# 路由注册 +# --------------------------------------------------------------------------- +# 统一以 /api 为前缀,便于将来做版本管理(如 /api/v1、/api/v2)。 +# --------------------------------------------------------------------------- +app.include_router(deglint_router, prefix="/api") +app.include_router(modeling_router, prefix="/api") + + +# --------------------------------------------------------------------------- +# 根路径健康检查(方便本地调试,非业务必需) +# --------------------------------------------------------------------------- +@app.get("/") +async def root() -> Dict[str, str]: + return {"service": "WQ_GUI Backend", "status": "ok"} diff --git a/new/frontend/.gitignore b/new/frontend/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/new/frontend/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/new/frontend/README.md b/new/frontend/README.md new file mode 100644 index 0000000..33895ab --- /dev/null +++ b/new/frontend/README.md @@ -0,0 +1,5 @@ +# Vue 3 + TypeScript + Vite + +This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 ` + + diff --git a/new/frontend/package-lock.json b/new/frontend/package-lock.json new file mode 100644 index 0000000..50c06bf --- /dev/null +++ b/new/frontend/package-lock.json @@ -0,0 +1,2412 @@ +{ + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "axios": "^1.16.1", + "echarts": "^6.1.0", + "element-plus": "^2.14.1", + "pinia": "^3.0.4", + "vue": "^3.5.34", + "vue-router": "^5.1.0" + }, + "devDependencies": { + "@types/node": "^24.12.3", + "@vitejs/plugin-vue": "^6.0.6", + "@vue/tsconfig": "^0.9.1", + "typescript": "~6.0.2", + "vite": "^8.0.12", + "vue-tsc": "^3.2.8" + } + }, + "node_modules/@babel/generator": { + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-8.0.0-rc.6.tgz", + "integrity": "sha512-6mIzgVK8DgEzvIapoQwhXTMnnkuE4STQmVv9H03i/tZ2ml8oev3TRvZJgTenK2Bsq0YWNtzOrFdTyNzCMFtjJQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^8.0.0-rc.6", + "@babel/types": "^8.0.0-rc.6", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "@types/jsesc": "^2.5.0", + "jsesc": "^3.0.2" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/generator/node_modules/@babel/helper-string-parser": { + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-8.0.0-rc.6.tgz", + "integrity": "sha512-BCkFy+zN6kXQed3YOT7aJl93NfDSzQc3pBfsvTVPs9gU9X3V0aefEF5kwBT0E+mDWH9QgKaZstYUQN9VdQZT4g==", + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/generator/node_modules/@babel/helper-validator-identifier": { + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.0-rc.6.tgz", + "integrity": "sha512-nVJ+1JcCgntv8d78rRo++o2wuODT0Irknx2BF8Np4Ft2CRgjLqIs4qzSZ8b66yGbBdMWGmZBO9WEZv1hhNiSpg==", + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/generator/node_modules/@babel/parser": { + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-8.0.0-rc.6.tgz", + "integrity": "sha512-rOS8IpdO7mQELkTPlCsTgPejO0bFuZdEDCGQJouYbYf9e1FLTym7Fei2pEjq8q7MWbX0ravcd7QQYKs1TxOuog==", + "license": "MIT", + "dependencies": { + "@babel/types": "^8.0.0-rc.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/generator/node_modules/@babel/types": { + "version": "8.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-8.0.0-rc.6.tgz", + "integrity": "sha512-p7/ABylAYlexb31wtRdIfH9L9A0Z2T/9H6zAqzqndkY2PLkvNNc580wGhp/gGKN4Sp9sQvSkhc6Oga8/O+wTyw==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^8.0.0-rc.6", + "@babel/helper-validator-identifier": "^8.0.0-rc.6" + }, + "engines": { + "node": "^22.18.0 || >=24.11.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==", + "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==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz", + "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz", + "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "license": "MIT" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.133.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.133.0.tgz", + "integrity": "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==", + "devOptional": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.8.tgz", + "integrity": "sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.3.tgz", + "integrity": "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.3.tgz", + "integrity": "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.3.tgz", + "integrity": "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.3.tgz", + "integrity": "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.3.tgz", + "integrity": "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.3.tgz", + "integrity": "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.3.tgz", + "integrity": "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.3.tgz", + "integrity": "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.3.tgz", + "integrity": "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.3.tgz", + "integrity": "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.3.tgz", + "integrity": "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.3.tgz", + "integrity": "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.3.tgz", + "integrity": "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", + "integrity": "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.3.tgz", + "integrity": "sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/jsesc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@types/jsesc/-/jsesc-2.5.1.tgz", + "integrity": "sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==", + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.24", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", + "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/node": { + "version": "24.12.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.4.tgz", + "integrity": "sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.7.tgz", + "integrity": "sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz", + "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.28" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.28.tgz", + "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.28.tgz", + "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue-macros/common": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-3.1.2.tgz", + "integrity": "sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==", + "license": "MIT", + "dependencies": { + "@vue/compiler-sfc": "^3.5.22", + "ast-kit": "^2.1.2", + "local-pkg": "^1.1.2", + "magic-string-ast": "^1.0.2", + "unplugin-utils": "^0.3.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/vue-macros" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.2.25" + }, + "peerDependenciesMeta": { + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.35.tgz", + "integrity": "sha512-BUmHaR1J+O+CKZ9uJucdVTEr1LHsdyvv7vG3eNRhK3CczEHeMd/LtsHAuD7PbrxvI2envCY2v7HI1vC1aBRzKw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.3", + "@vue/shared": "3.5.35", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.35.tgz", + "integrity": "sha512-k+bprkXxuqhVajgTx5mUHuir7TwQzUKOWR40ng1ncAqQRPnrLngGGgqVEEhOnTMlc8btHYVKmrP8s5Qyg0hvYA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.35", + "@vue/shared": "3.5.35" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.35.tgz", + "integrity": "sha512-G5VPMcXTSywXBgtFOZOnHKBxKSrwXUcvY1iaF5/hRcy7t0J6CH/d8ha9F4nzi00Fax1eLV0QHM7v4mQu68jydw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.3", + "@vue/compiler-core": "3.5.35", + "@vue/compiler-dom": "3.5.35", + "@vue/compiler-ssr": "3.5.35", + "@vue/shared": "3.5.35", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.15", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.35.tgz", + "integrity": "sha512-rGhAeXgdM7/ffTJGXT69rCCdTmjDewnFuUZfBQQHTdcEBeWdT5HCGY60y2ytLJr9/Dsu7IntUi5z/w0h6Rjnzw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.35", + "@vue/shared": "3.5.35" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.9.tgz", + "integrity": "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.9" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.9.tgz", + "integrity": "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.9", + "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.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.9.tgz", + "integrity": "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/language-core": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.3.3.tgz", + "integrity": "sha512-X6p+7nfY7vVT6dQwUJ+v0Jfq/lwIfhL2jMi91dQ3ln4hnlGXlxsDu/FNkeyHYgvYtyQy18ZX76IZy7X4diDbiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "@vue/compiler-dom": "^3.5.0", + "@vue/shared": "^3.5.0", + "alien-signals": "^3.2.0", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1", + "picomatch": "^4.0.4" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.35.tgz", + "integrity": "sha512-tVc+SsHConvh/Lz64qq1pP3rYArBmK42xonovEcxY74SQtvctZodG/zhq54P5dr38cVuw25d27cPNRdlMidpGQ==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.35" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.35.tgz", + "integrity": "sha512-A/xFNX9loIcWDygeQuNCfKuh0CoYBzxhqEMNah5TSFg9Z53DrFYEN2qi5CU9necjM1OWYegYREUTHmXTmhfXtg==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.35", + "@vue/shared": "3.5.35" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.35.tgz", + "integrity": "sha512-odrJ1C391dbGnyDRh8U+rnP7J2amIEzfmRk5vXy7xi3aZhEXofTvpi0T4HJb6jlNqQZTNPR5MPHSB3RHNkIORA==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.35", + "@vue/runtime-core": "3.5.35", + "@vue/shared": "3.5.35", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.35.tgz", + "integrity": "sha512-NkebSOYdB97wi8OQcO3HqzZSlymJi/aWsN/7h74OSVhRTm6qGs3Jp3e0rCXynmWwSlKeRrnlIug+ilYoHBmQDA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.35", + "@vue/shared": "3.5.35" + }, + "peerDependencies": { + "vue": "3.5.35" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.35.tgz", + "integrity": "sha512-zSbjL7gRXwks2ZQLRGCajBtBXEOXW9Ddhn/HvSdrGkE2dqGnumzW8XtusRrxrE9LvqtiqDXQ+A60Hp6mvdYxfA==", + "license": "MIT" + }, + "node_modules/@vue/tsconfig": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.9.1.tgz", + "integrity": "sha512-buvjm+9NzLCJL29KY1j1991YYJ5e6275OiK+G4jtmfIb+z4POywbdm0wXusT9adVWqe0xqg70TbI7+mRx4uU9w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": ">= 5.8", + "vue": "^3.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vueuse/core": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.3.0.tgz", + "integrity": "sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.3.0", + "@vueuse/shared": "14.3.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/metadata": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.3.0.tgz", + "integrity": "sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.3.0.tgz", + "integrity": "sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/alien-signals": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.2.1.tgz", + "integrity": "sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g==", + "dev": true, + "license": "MIT" + }, + "node_modules/ast-kit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-2.2.0.tgz", + "integrity": "sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "pathe": "^2.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/ast-walker-scope": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.9.0.tgz", + "integrity": "sha512-IJdzo2vLiElBxKzwS36VsCue/62d6IdWjnPB2v3nuPKeWGynp6FF/CYoLa5i/3jXH/z97ZDdsXz6abpgM6w07A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.2", + "@babel/types": "^7.29.0", + "ast-kit": "^2.2.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.1.tgz", + "integrity": "sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.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==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/confbox": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", + "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.0.5.tgz", + "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==", + "license": "MIT", + "dependencies": { + "is-what": "^5.2.0" + }, + "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==", + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.21", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz", + "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/echarts": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-6.1.0.tgz", + "integrity": "sha512-q0yaFPggC9FUdsWH4blavRWFmxdrIodbkoKNAjJudAI6CA9gNPxHtV2RcZNEepZVlk4yvBYkOkbk6HIVpIyHZA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "2.3.0", + "zrender": "6.1.0" + } + }, + "node_modules/echarts/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "license": "0BSD" + }, + "node_modules/element-plus": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.14.1.tgz", + "integrity": "sha512-UFnm1+BckNi+azkKJ7L32q1uXs9ekr99Z9pWTQPeDR05jqEWUwQq51ro4kZMVrANbjknX3Z7ukCZwTi2T6Tr9A==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^4.2.0", + "@element-plus/icons-vue": "^2.3.2", + "@floating-ui/dom": "^1.7.6", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.8", + "@types/lodash": "^4.17.24", + "@types/lodash-es": "^4.17.12", + "@vueuse/core": "14.3.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.20", + "lodash": "^4.18.1", + "lodash-es": "^4.18.1", + "lodash-unified": "^1.0.3", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0", + "vue-component-type-helpers": "^3.3.1" + }, + "peerDependencies": { + "vue": "^3.3.7" + } + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/is-what": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz", + "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "devOptional": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/local-pkg": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.2.1.tgz", + "integrity": "sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==", + "license": "MIT", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.3.0", + "quansync": "^0.2.11" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", + "license": "MIT" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "license": "MIT", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magic-string-ast": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/magic-string-ast/-/magic-string-ast-1.0.3.tgz", + "integrity": "sha512-CvkkH1i81zl7mmb94DsRiFeG9V2fR2JeuK8yDgS8oiZSFa++wWLEgZ5ufEOyLHbvSbD1gTRKv9NdX69Rnvr9JA==", + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.19" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/mlly": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz", + "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.3" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==", + "license": "BSD-3-Clause" + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "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==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.4.tgz", + "integrity": "sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.7" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.5.0", + "vue": "^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/pkg-types": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.1.tgz", + "integrity": "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.4", + "exsolve": "^1.0.8", + "pathe": "^2.0.3" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/quansync": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rolldown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.3.tgz", + "integrity": "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.133.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.3", + "@rolldown/binding-darwin-arm64": "1.0.3", + "@rolldown/binding-darwin-x64": "1.0.3", + "@rolldown/binding-freebsd-x64": "1.0.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.3", + "@rolldown/binding-linux-arm64-gnu": "1.0.3", + "@rolldown/binding-linux-arm64-musl": "1.0.3", + "@rolldown/binding-linux-ppc64-gnu": "1.0.3", + "@rolldown/binding-linux-s390x-gnu": "1.0.3", + "@rolldown/binding-linux-x64-gnu": "1.0.3", + "@rolldown/binding-linux-x64-musl": "1.0.3", + "@rolldown/binding-openharmony-arm64": "1.0.3", + "@rolldown/binding-wasm32-wasi": "1.0.3", + "@rolldown/binding-win32-arm64-msvc": "1.0.3", + "@rolldown/binding-win32-x64-msvc": "1.0.3" + } + }, + "node_modules/scule": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", + "license": "MIT" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/superjson": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz", + "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==", + "license": "MIT", + "dependencies": { + "copy-anything": "^4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", + "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/unplugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-3.0.0.tgz", + "integrity": "sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/unplugin-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz", + "integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==", + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/vite": { + "version": "8.0.16", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz", + "integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.15", + "rolldown": "1.0.3", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.18", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.35.tgz", + "integrity": "sha512-cx89fnr+0kVGHiNFG6y6s0bdjypJRFNZn6x3WPstNdQR1bi1mbB7h4v5IBGTsPJU3nK1+0Iqj3Zf+hZWMieR4Q==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.35", + "@vue/compiler-sfc": "3.5.35", + "@vue/runtime-dom": "3.5.35", + "@vue/server-renderer": "3.5.35", + "@vue/shared": "3.5.35" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-component-type-helpers": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-3.3.3.tgz", + "integrity": "sha512-x4nsFpy5Pe8fqPzp/5vkTPeTTDBpAx4WVtV47Ejt0+2FQrq4pRRsJs7JmYRqMFzTu/LW+pCWEjQ3YVCkPV7f9g==", + "license": "MIT" + }, + "node_modules/vue-router": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-5.1.0.tgz", + "integrity": "sha512-HAbiLzLEHQwxPgvsbOJDAwtavszEgLwri6XfyrsPECIFez8+59xc9LofWVdc/HEaSRT822lJ8H9Ns38VVond5g==", + "license": "MIT", + "dependencies": { + "@babel/generator": "^8.0.0-rc.4", + "@vue-macros/common": "^3.1.1", + "@vue/devtools-api": "^8.1.2", + "ast-walker-scope": "^0.9.0", + "chokidar": "^5.0.0", + "json5": "^2.2.3", + "local-pkg": "^1.1.2", + "magic-string": "^0.30.21", + "mlly": "^1.8.2", + "muggle-string": "^0.4.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "scule": "^1.3.0", + "tinyglobby": "^0.2.16", + "unplugin": "^3.0.0", + "unplugin-utils": "^0.3.1", + "yaml": "^2.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@pinia/colada": ">=0.21.2", + "@vue/compiler-sfc": "^3.5.34", + "pinia": "^3.0.4", + "vite": "^7.0.0 || ^8.0.0", + "vue": "^3.5.34" + }, + "peerDependenciesMeta": { + "@pinia/colada": { + "optional": true + }, + "@vue/compiler-sfc": { + "optional": true + }, + "pinia": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/vue-router/node_modules/@vue/devtools-api": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-8.1.2.tgz", + "integrity": "sha512-vA0O112YqyDuNA1s7Yb2gCgToQ/OxOWiFDO5ThLCcDy0ldHnSd1dUTaSYhOldbqoNgumE4dxtGAoAaSUKUD1Zg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^8.1.2" + } + }, + "node_modules/vue-router/node_modules/@vue/devtools-kit": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.1.2.tgz", + "integrity": "sha512-f75/upc+GCyjXErpgPGz4582ujS0L/adAltGy+tqXMGUJpgAcfGr6CxnnhpZY8BHuMYt6KpbF8uaFrrQG66rGQ==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^8.1.2", + "birpc": "^2.6.1", + "hookable": "^5.5.3", + "perfect-debounce": "^2.0.0" + } + }, + "node_modules/vue-router/node_modules/@vue/devtools-shared": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.1.2.tgz", + "integrity": "sha512-X9RyVFYAdkBe4IUf5v48TxBF/6QPmF8CmWrDAjXzfUHrgQ/HGfTC1A6TqgXqZ03ye66l3AD51BAGD69IvKM9sw==", + "license": "MIT" + }, + "node_modules/vue-router/node_modules/perfect-debounce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", + "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", + "license": "MIT" + }, + "node_modules/vue-tsc": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.3.3.tgz", + "integrity": "sha512-SWUEG7YRUeDJHT7Xsuhf02elYX2gxPzzAII7OxDAh4KNOr4QHQ0Lls0YfnaO5GNd560CwVa2HTfdqmA5MqvRqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.28", + "@vue/language-core": "3.3.3" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "license": "MIT" + }, + "node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/zrender": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-6.1.0.tgz", + "integrity": "sha512-oEGMDB6pOP2S6OwRR4PdVv610zrjnA3Bh+JnSG12fYJlBKjtNAoEb5fSUoCOOINlH96I2fU38/A2UpRKs67xYQ==", + "license": "BSD-3-Clause", + "dependencies": { + "tslib": "2.3.0" + } + }, + "node_modules/zrender/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "license": "0BSD" + } + } +} diff --git a/new/frontend/package.json b/new/frontend/package.json new file mode 100644 index 0000000..68455fb --- /dev/null +++ b/new/frontend/package.json @@ -0,0 +1,27 @@ +{ + "name": "frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc -b && vite build", + "preview": "vite preview" + }, + "dependencies": { + "axios": "^1.16.1", + "echarts": "^6.1.0", + "element-plus": "^2.14.1", + "pinia": "^3.0.4", + "vue": "^3.5.34", + "vue-router": "^5.1.0" + }, + "devDependencies": { + "@types/node": "^24.12.3", + "@vitejs/plugin-vue": "^6.0.6", + "@vue/tsconfig": "^0.9.1", + "typescript": "~6.0.2", + "vite": "^8.0.12", + "vue-tsc": "^3.2.8" + } +} diff --git a/new/frontend/public/favicon.svg b/new/frontend/public/favicon.svg new file mode 100644 index 0000000..6893eb1 --- /dev/null +++ b/new/frontend/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/new/frontend/public/icons.svg b/new/frontend/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/new/frontend/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/new/frontend/src/App.vue b/new/frontend/src/App.vue new file mode 100644 index 0000000..e5db726 --- /dev/null +++ b/new/frontend/src/App.vue @@ -0,0 +1,225 @@ + + + + + + + diff --git a/new/frontend/src/api/request.ts b/new/frontend/src/api/request.ts new file mode 100644 index 0000000..368e9f2 --- /dev/null +++ b/new/frontend/src/api/request.ts @@ -0,0 +1,15 @@ +import axios from 'axios' + +const request = axios.create({ + // 注意:直接指向我们刚刚改好的 9090 端口 + baseURL: 'http://127.0.0.1:9090', + timeout: 60000 +}) + +// 拦截器:直接剥离 data +request.interceptors.response.use( + response => response.data, + error => Promise.reject(error) +) + +export default request diff --git a/new/frontend/src/api/tasks.ts b/new/frontend/src/api/tasks.ts new file mode 100644 index 0000000..e9e93f7 --- /dev/null +++ b/new/frontend/src/api/tasks.ts @@ -0,0 +1,13 @@ +import request from './request' + +export const submitTrain = (data: any) => { + return request.post('/api/modeling/train', data) +} + +export const submitPredict = (data: any) => { + return request.post('/api/modeling/predict', data) +} + +export const getTaskStatus = (task_id: string) => { + return request.get(`/api/tasks/${task_id}`) +} diff --git a/new/frontend/src/assets/hero.png b/new/frontend/src/assets/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..02251f4b956c55af2d76fd0788124d7eee2b45eb GIT binary patch literal 13057 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 P00000NkvXXu0mjft=yBf literal 0 HcmV?d00001 diff --git a/new/frontend/src/assets/vite.svg b/new/frontend/src/assets/vite.svg new file mode 100644 index 0000000..5101b67 --- /dev/null +++ b/new/frontend/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/new/frontend/src/assets/vue.svg b/new/frontend/src/assets/vue.svg new file mode 100644 index 0000000..770e9d3 --- /dev/null +++ b/new/frontend/src/assets/vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/new/frontend/src/components/HelloWorld.vue b/new/frontend/src/components/HelloWorld.vue new file mode 100644 index 0000000..c232865 --- /dev/null +++ b/new/frontend/src/components/HelloWorld.vue @@ -0,0 +1,95 @@ + + + diff --git a/new/frontend/src/composables/useTaskPoller.ts b/new/frontend/src/composables/useTaskPoller.ts new file mode 100644 index 0000000..ec47ea8 --- /dev/null +++ b/new/frontend/src/composables/useTaskPoller.ts @@ -0,0 +1,51 @@ +import { ref, watch, onUnmounted, type Ref } from 'vue' +import { getTaskStatus } from '../api/tasks' + +export function useTaskPoller(taskIdRef: Ref) { + const status = ref('') + const isPolling = ref(false) + const error = ref(null) + const result = ref(null) + let timer: any = null + + const start = () => { + if (!taskIdRef.value) return + isPolling.value = true + error.value = null + status.value = 'PENDING' + + timer = setInterval(async () => { + try { + const res = await getTaskStatus(taskIdRef.value!) + status.value = res.status + + if (res.status === 'SUCCESS') { + result.value = res + stop() + } else if (res.status === 'FAILED') { + error.value = res.error || '任务执行失败' + stop() + } + } catch (e: any) { + error.value = '网络请求失败,请检查后端状态' + stop() + } + }, 2000) + } + + const stop = () => { + isPolling.value = false + if (timer) clearInterval(timer) + } + + // 监听 Task ID 变化自动开启轮询 + watch(taskIdRef, (newVal) => { + stop() + if (newVal) start() + }) + + // 组件销毁时清理定时器 + onUnmounted(() => stop()) + + return { status, isPolling, error, result, stop } +} diff --git a/new/frontend/src/main.ts b/new/frontend/src/main.ts new file mode 100644 index 0000000..9489de8 --- /dev/null +++ b/new/frontend/src/main.ts @@ -0,0 +1,9 @@ +import { createApp } from 'vue' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' +import App from './App.vue' + +const app = createApp(App) + +app.use(ElementPlus) +app.mount('#app') diff --git a/new/frontend/src/style.css b/new/frontend/src/style.css new file mode 100644 index 0000000..527d4fb --- /dev/null +++ b/new/frontend/src/style.css @@ -0,0 +1,296 @@ +:root { + --text: #6b6375; + --text-h: #08060d; + --bg: #fff; + --border: #e5e4e7; + --code-bg: #f4f3ec; + --accent: #aa3bff; + --accent-bg: rgba(170, 59, 255, 0.1); + --accent-border: rgba(170, 59, 255, 0.5); + --social-bg: rgba(244, 243, 236, 0.5); + --shadow: + rgba(0, 0, 0, 0.1) 0 10px 15px -3px, rgba(0, 0, 0, 0.05) 0 4px 6px -2px; + + --sans: system-ui, 'Segoe UI', Roboto, sans-serif; + --heading: system-ui, 'Segoe UI', Roboto, sans-serif; + --mono: ui-monospace, Consolas, monospace; + + font: 18px/145% var(--sans); + letter-spacing: 0.18px; + color-scheme: light dark; + color: var(--text); + background: var(--bg); + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + @media (max-width: 1024px) { + font-size: 16px; + } +} + +@media (prefers-color-scheme: dark) { + :root { + --text: #9ca3af; + --text-h: #f3f4f6; + --bg: #16171d; + --border: #2e303a; + --code-bg: #1f2028; + --accent: #c084fc; + --accent-bg: rgba(192, 132, 252, 0.15); + --accent-border: rgba(192, 132, 252, 0.5); + --social-bg: rgba(47, 48, 58, 0.5); + --shadow: + rgba(0, 0, 0, 0.4) 0 10px 15px -3px, rgba(0, 0, 0, 0.25) 0 4px 6px -2px; + } + + #social .button-icon { + filter: invert(1) brightness(2); + } +} + +body { + margin: 0; +} + +h1, +h2 { + font-family: var(--heading); + font-weight: 500; + color: var(--text-h); +} + +h1 { + font-size: 56px; + letter-spacing: -1.68px; + margin: 32px 0; + @media (max-width: 1024px) { + font-size: 36px; + margin: 20px 0; + } +} +h2 { + font-size: 24px; + line-height: 118%; + letter-spacing: -0.24px; + margin: 0 0 8px; + @media (max-width: 1024px) { + font-size: 20px; + } +} +p { + margin: 0; +} + +code, +.counter { + font-family: var(--mono); + display: inline-flex; + border-radius: 4px; + color: var(--text-h); +} + +code { + font-size: 15px; + line-height: 135%; + padding: 4px 8px; + background: var(--code-bg); +} + +.counter { + font-size: 16px; + padding: 5px 10px; + border-radius: 5px; + color: var(--accent); + background: var(--accent-bg); + border: 2px solid transparent; + transition: border-color 0.3s; + margin-bottom: 24px; + + &:hover { + border-color: var(--accent-border); + } + &:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 2px; + } +} + +.hero { + position: relative; + + .base, + .framework, + .vite { + inset-inline: 0; + margin: 0 auto; + } + + .base { + width: 170px; + position: relative; + z-index: 0; + } + + .framework, + .vite { + position: absolute; + } + + .framework { + z-index: 1; + top: 34px; + height: 28px; + transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) rotateY(39deg) + scale(1.4); + } + + .vite { + z-index: 0; + top: 107px; + height: 26px; + width: auto; + transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) rotateY(39deg) + scale(0.8); + } +} + +#app { + width: 1126px; + max-width: 100%; + margin: 0 auto; + text-align: center; + border-inline: 1px solid var(--border); + min-height: 100svh; + display: flex; + flex-direction: column; + box-sizing: border-box; +} + +#center { + display: flex; + flex-direction: column; + gap: 25px; + place-content: center; + place-items: center; + flex-grow: 1; + + @media (max-width: 1024px) { + padding: 32px 20px 24px; + gap: 18px; + } +} + +#next-steps { + display: flex; + border-top: 1px solid var(--border); + text-align: left; + + & > div { + flex: 1 1 0; + padding: 32px; + @media (max-width: 1024px) { + padding: 24px 20px; + } + } + + .icon { + margin-bottom: 16px; + width: 22px; + height: 22px; + } + + @media (max-width: 1024px) { + flex-direction: column; + text-align: center; + } +} + +#docs { + border-right: 1px solid var(--border); + + @media (max-width: 1024px) { + border-right: none; + border-bottom: 1px solid var(--border); + } +} + +#next-steps ul { + list-style: none; + padding: 0; + display: flex; + gap: 8px; + margin: 32px 0 0; + + .logo { + height: 18px; + } + + a { + color: var(--text-h); + font-size: 16px; + border-radius: 6px; + background: var(--social-bg); + display: flex; + padding: 6px 12px; + align-items: center; + gap: 8px; + text-decoration: none; + transition: box-shadow 0.3s; + + &:hover { + box-shadow: var(--shadow); + } + .button-icon { + height: 18px; + width: 18px; + } + } + + @media (max-width: 1024px) { + margin-top: 20px; + flex-wrap: wrap; + justify-content: center; + + li { + flex: 1 1 calc(50% - 8px); + } + + a { + width: 100%; + justify-content: center; + box-sizing: border-box; + } + } +} + +#spacer { + height: 88px; + border-top: 1px solid var(--border); + @media (max-width: 1024px) { + height: 48px; + } +} + +.ticks { + position: relative; + width: 100%; + + &::before, + &::after { + content: ''; + position: absolute; + top: -4.5px; + border: 5px solid transparent; + } + + &::before { + left: 0; + border-left-color: var(--border); + } + &::after { + right: 0; + border-right-color: var(--border); + } +} diff --git a/new/frontend/tsconfig.app.json b/new/frontend/tsconfig.app.json new file mode 100644 index 0000000..5c750c5 --- /dev/null +++ b/new/frontend/tsconfig.app.json @@ -0,0 +1,14 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "types": ["vite/client"], + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] +} diff --git a/new/frontend/tsconfig.json b/new/frontend/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/new/frontend/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/new/frontend/tsconfig.node.json b/new/frontend/tsconfig.node.json new file mode 100644 index 0000000..d3c52ea --- /dev/null +++ b/new/frontend/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "es2023", + "lib": ["ES2023"], + "module": "esnext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/new/frontend/vite.config.ts b/new/frontend/vite.config.ts new file mode 100644 index 0000000..bbcf80c --- /dev/null +++ b/new/frontend/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [vue()], +}) diff --git a/run_smoke.bat b/run_smoke.bat new file mode 100644 index 0000000..a3a2b90 --- /dev/null +++ b/run_smoke.bat @@ -0,0 +1,6 @@ +@echo off +cd /d "D:\111\office\ZHLduijie\1.WQ\WQ_GUI" +call venv\Scripts\activate.bat +set PYTHONPATH=new\app\api;%PYTHONPATH% +python -c "import _smoke_test_train; _smoke_test_train.test_load_train_df(); _smoke_test_train.test_get_model_pipeline_all_types(); _smoke_test_train.test_run_train_sync_linearregression_fast(); _smoke_test_train.test_run_train_sync_bad_csv(); _smoke_test_train.test_run_train_sync_bad_target(); print('OK')" > %TEMP%\smoke_log.txt 2>&1 +type %TEMP%\smoke_log.txt diff --git a/src/core/pipeline/context.py b/src/core/pipeline/context.py index 2bf8d29..b31a0ea 100644 --- a/src/core/pipeline/context.py +++ b/src/core/pipeline/context.py @@ -20,23 +20,28 @@ class PipelineContext: """流水线运行上下文(在 14 个 step 之间传递的内存字典) 字段命名约定: - - 主路径字段统一 `_path` 后缀(如 water_mask_path) - - 目录类字段无 `_path` 后缀(如 models_dir) + - 路径类字段名 = panel key 名 = step 形参名(全链路无翻译) + - 训练/产物 CSV 用 `_path` 后缀(如 training_csv_path / water_mask_path) + - 入参影像/CSV 沿用 panel 原名(img_path / csv_path),无 `_path` 后缀 + - 目录类字段无 `_path` 后缀(如 models_dir / prediction_dir) - 元信息字段无后缀(如 user_config / status / log) """ - # ── 9 步主路径(按 step 输出顺序排列) ── - raw_img_path: Optional[str] = None # Step 1 入参:原始影像 + # ── 11 个 step 的入参/产物(按 step 顺序排列;字段名 = panel key = step 形参) ── + img_path: Optional[str] = None # Step 1/2/3 入参:原始影像 water_mask_path: Optional[str] = None # Step 1 出 → Step 2/3/7 入 glint_mask_path: Optional[str] = None # Step 2 出 → Step 3/7 入 deglint_img_path: Optional[str] = None # Step 3 出 → Step 5/7 入 - raw_csv_path: Optional[str] = None # Step 4 入:原始 CSV + csv_path: Optional[str] = None # Step 4/5/6_5/6_75 入参:原始/训练 CSV processed_csv_path: Optional[str] = None # Step 4 出 → Step 5 入 - training_spectra_path: Optional[str] = None # Step 5 出 → Step 6 入 + training_csv_path: Optional[str] = None # Step 5 出 → Step 5_5/6/6_5/6_75 入 + boundary_path: Optional[str] = None # Step 5 入参:边界 SHP(panel step5 名) indices_path: Optional[str] = None # Step 5.5 出 - sampling_csv_path: Optional[str] = None # Step 7 出 → Step 8/9 入 - prediction_csv_path: Optional[str] = None # Step 8 出 + sampling_csv_path: Optional[str] = None # Step 7 出 → Step 8/8_5/8_75/9 入 + prediction_csv_path: Optional[str] = None # Step 8 出 → Step 9 入 distribution_map_path: Optional[str] = None # Step 9 出 + boundary_shp_path: Optional[str] = None # Step 9 入参:边界 SHP(panel step9 名) + formula_csv_path: Optional[str] = None # Step 8_75 入参:公式 CSV # ── 目录类(命名不带 _path 以示区别) ── models_dir: Optional[str] = None diff --git a/src/core/pipeline/runner.py b/src/core/pipeline/runner.py index 0d758cd..0f2371e 100644 --- a/src/core/pipeline/runner.py +++ b/src/core/pipeline/runner.py @@ -4,10 +4,8 @@ PipelineRunner:基于 StepSpec 声明式调度 14 个 step。 设计要点: - StepSpec 声明 requires(ctx 字段名列表)+ produces(ctx 字段名列表) - - 默认约定:ctx 字段名去掉 `_path` 后缀 = step 方法形参名 - 例:ctx.water_mask_path → 形参 water_mask - 例:ctx.raw_img_path → 形参 raw_img - - 可被 spec.parameter_map 覆盖 + - 命名约定:ctx 字段名 == panel key 名 == step 形参名(全链路无翻译) + - 保留 spec.parameter_map 字段骨架供极少数特例覆盖(默认空 dict) - 调度顺序:按 PIPELINE_STEPS 列表顺序,requires 缺则 skip - 软取消:在每个 step 前检查 ctx.is_cancelled() - duck-typed pipeline:runner 只调 getattr(pipeline, method_name),不强依赖类层级 @@ -48,101 +46,76 @@ class StepSpec: PIPELINE_STEPS: List[StepSpec] = [ StepSpec( step_id="step1", method_name="step1_generate_water_mask", - requires=["raw_img_path"], produces=["water_mask_path"], - # ctx.raw_img_path → 形参 img_path(老 step1 形参名是 img_path,不是 raw_img) - parameter_map={"raw_img_path": "img_path"}, + requires=["img_path"], produces=["water_mask_path"], description="水域掩膜生成(NDWI 或 SHP)", ), StepSpec( step_id="step2", method_name="step2_find_glint_area", - requires=["raw_img_path", "water_mask_path"], produces=["glint_mask_path"], - # raw_img_path→img_path;water_mask_path 不变 - parameter_map={"raw_img_path": "img_path"}, + requires=["img_path", "water_mask_path"], produces=["glint_mask_path"], description="耀斑区域检测", ), StepSpec( step_id="step3", method_name="step3_remove_glint", - requires=["deglint_img_path"], produces=["deglint_img_path"], - # deglint_img_path→img_path(老 step3 形参名是 img_path) - # 注意:glint_mask_path 不在 requires 中——step3 形参表无该参数,内部走 self.glint_mask_path 回退 - parameter_map={"deglint_img_path": "img_path"}, + requires=["img_path", "water_mask_path", "glint_mask_path"], + produces=["deglint_img_path"], description="耀斑去除", ), StepSpec( step_id="step4", method_name="step4_process_csv", - requires=["raw_csv_path"], produces=["processed_csv_path"], - # raw_csv_path→csv_path(老 step4 形参名是 csv_path) - parameter_map={"raw_csv_path": "csv_path"}, + requires=["csv_path"], produces=["processed_csv_path"], description="CSV 异常值清洗", ), StepSpec( step_id="step5", method_name="step5_extract_training_spectra", - requires=["deglint_img_path", "processed_csv_path"], produces=["training_spectra_path"], - # processed_csv_path→csv_path(老 step5 形参名是 csv_path);deglint_img_path 不变 - parameter_map={"processed_csv_path": "csv_path"}, + requires=["deglint_img_path", "csv_path", "boundary_path", "glint_mask_path"], + produces=["training_csv_path"], description="实测样本点光谱提取", ), StepSpec( step_id="step5_5", method_name="step5_5_calculate_water_quality_indices", - requires=["training_spectra_path"], produces=["indices_path"], - # 老 step5.5 形参是 training_spectra_path;ctx 字段同名,无需映射 - parameter_map={}, + requires=["training_csv_path"], produces=["indices_path"], description="水质光谱指数计算(optional)", ), StepSpec( step_id="step6", method_name="step6_train_models", - requires=["training_spectra_path"], produces=["models_dir"], - # training_spectra_path→training_csv_path(老 step6 形参名是 training_csv_path) - parameter_map={"training_spectra_path": "training_csv_path"}, + requires=["training_csv_path"], produces=["models_dir"], description="ML 建模(GridSearchCV / AutoML)", ), StepSpec( step_id="step6_5", method_name="step6_5_non_empirical_modeling", - requires=["training_spectra_path"], produces=["models_dir"], - # training_spectra_path→csv_path(老 step6.5 形参名是 csv_path) - parameter_map={"training_spectra_path": "csv_path"}, + requires=["training_csv_path"], produces=["models_dir"], description="非经验统计回归", ), StepSpec( step_id="step6_75", method_name="step6_75_custom_regression", - requires=["training_spectra_path"], produces=["models_dir"], - # training_spectra_path→csv_path(老 step6.75 形参名是 csv_path) - parameter_map={"training_spectra_path": "csv_path"}, + requires=["training_csv_path"], produces=["models_dir"], description="自定义回归分析", ), StepSpec( step_id="step7", method_name="step7_generate_sampling_points", requires=["deglint_img_path", "water_mask_path"], produces=["sampling_csv_path"], - # 老 step7 形参是 deglint_img_path / water_mask_path;ctx 字段同名 - parameter_map={}, description="整景密集采样点生成 + 光谱提取", ), StepSpec( step_id="step8", method_name="step8_predict_water_quality", requires=["sampling_csv_path", "models_dir"], produces=["prediction_csv_path"], - parameter_map={}, description="ML 模型预测(采样点)", ), StepSpec( step_id="step8_5", method_name="step8_5_predict_with_non_empirical_models", - requires=["sampling_csv_path"], produces=["prediction_dir"], - parameter_map={}, + requires=["sampling_csv_path", "models_dir"], produces=["prediction_dir"], description="非经验模型预测", ), StepSpec( step_id="step8_75", method_name="step8_75_predict_with_custom_regression", - requires=["sampling_csv_path"], produces=["prediction_dir"], - parameter_map={}, + requires=["sampling_csv_path", "models_dir", "formula_csv_path"], + produces=["prediction_dir"], description="自定义回归预测", ), StepSpec( step_id="step9", method_name="step9_generate_distribution_map", - requires=["prediction_csv_path"], + requires=["prediction_csv_path", "boundary_shp_path"], produces=["distribution_map_path"], - # 老 step9 形参是 prediction_csv_path / boundary_shp_path;ctx 字段同名 - # 注意:sampling_csv_path / water_mask_path 不在 requires 中——step9 形参表无该参数, - # 内部走 self.sampling_csv_path / self.water_mask_path 回退 - parameter_map={}, description="克里金插值成图", ), ] @@ -157,7 +130,7 @@ class PipelineRunner: 用法: runner = PipelineRunner(pipeline_instance) - ctx = PipelineContext(raw_img_path=..., ...) + ctx = PipelineContext(img_path=..., ...) result_ctx = runner.run(ctx) """ diff --git a/src/core/prediction/automl_trainer.py b/src/core/prediction/automl_trainer.py new file mode 100644 index 0000000..8075a47 --- /dev/null +++ b/src/core/prediction/automl_trainer.py @@ -0,0 +1,544 @@ +# -*- coding: utf-8 -*- +""" +Optuna + 智能子采样 AutoML 训练器(路线 B 防爆引擎)。 + +为什么需要这个: + - 老路径:11 预处理 × 4 模型 × 3 划分 = 132 组 GridSearchCV + 对中小数据集 10 分钟+,对大数据集 5w+ 行 直接 OOM + - AutoML 路径:1 预处理 × N 模型(Optuna 调超参),用智能子采样避开 OOM + 再用最优超参在**全量数据**上 refit,最终保存单一模型 + +设计要点: + - 入口 train_with_automl(csv, feature_start_column, model_names, ...) + - AutoMLResult dataclass 返回(每个目标列一份) + - smart_subsample:N > max_samples 时随机下采样 + - 失败兜底:optuna 未装 / 全 trial 失败 → fallback 到 WaterQualityModelingBatch + - 文件命名规范:{target}_{preprocess}_{model}_AUTOML.joblib + - save_data["metadata"]["automl"] = True 标记 + +调用: + from src.core.prediction.automl_trainer import train_with_automl + results = train_with_automl( + training_csv_path=".../training_spectra.csv", + feature_start_column="374.285004", + model_names=["RF", "SVR", "Ridge"], + n_trials=20, + timeout_sec=300, + ) +""" + +from __future__ import annotations + +import json +import time +from dataclasses import asdict, dataclass, field +from pathlib import Path +from typing import Any, Callable, Dict, List, Optional, Tuple + +import numpy as np +import pandas as pd + + +# ============================================================ +# 常量 +# ============================================================ + +# AutoML 寻优阶段允许的最大样本数(避免 OOM) +# 5000 样本对 RF/SVR/Ridge 的 Optuna 寻优足够给出稳定 CV +DEFAULT_MAX_SAMPLES = 5000 + +# 单次 Optuna trial 的默认超时(秒) +DEFAULT_TIMEOUT = 300.0 + +# 默认 trial 数 +DEFAULT_N_TRIALS = 20 + +# AutoML 输出目录名后缀 +AUTOML_DIR_SUFFIX = "_AutoML" + + +# ============================================================ +# 数据类 +# ============================================================ + +@dataclass +class AutoMLResult: + """单个目标列的 AutoML 训练结果""" + success: bool = False + model_path: Optional[str] = None + cv_score: float = -float("inf") + best_params: Optional[Dict[str, Any]] = None + target_column: str = "" + preprocessing: str = "" + model_name: str = "" + n_trials_done: int = 0 + n_samples_used: int = 0 + fallback_used: bool = False + elapsed_sec: float = 0.0 + error: Optional[str] = None + metadata: Dict[str, Any] = field(default_factory=dict) + + +# ============================================================ +# 智能子采样 +# ============================================================ + +def smart_subsample( + X: np.ndarray, + y: np.ndarray, + max_samples: int = DEFAULT_MAX_SAMPLES, + random_state: int = 42, +) -> Tuple[np.ndarray, np.ndarray, bool]: + """当 N > max_samples 时随机下采样;否则原样返回。 + + Returns: + (X_sub, y_sub, was_subsampled) + """ + n = X.shape[0] + if n <= max_samples: + return X, y, False + rng = np.random.default_rng(random_state) + idx = rng.choice(n, size=max_samples, replace=False) + return X[idx], y[idx], True + + +# ============================================================ +# 模型工厂 +# ============================================================ + +def _build_model(model_name: str, random_state: int = 42): + """根据英文模型键名构造 sklearn-compatible 模型实例(factory)。""" + from sklearn.ensemble import ( + AdaBoostRegressor, ExtraTreesRegressor, GradientBoostingRegressor, + RandomForestRegressor, + ) + from sklearn.linear_model import ( + ElasticNet, Lasso, LinearRegression, Ridge, + ) + from sklearn.neighbors import KNeighborsRegressor + from sklearn.neural_network import MLPRegressor + from sklearn.svm import SVR + from sklearn.tree import DecisionTreeRegressor + + factory = { + "RF": lambda **kw: RandomForestRegressor(random_state=random_state, n_jobs=1, **kw), + "ET": lambda **kw: ExtraTreesRegressor(random_state=random_state, n_jobs=1, **kw), + "GradientBoosting": lambda **kw: GradientBoostingRegressor(random_state=random_state, **kw), + "AdaBoost": lambda **kw: AdaBoostRegressor(random_state=random_state, **kw), + "Ridge": lambda **kw: Ridge(**kw), + "Lasso": lambda **kw: Lasso(max_iter=5000, **kw), + "ElasticNet": lambda **kw: ElasticNet(max_iter=5000, **kw), + "LinearRegression": lambda **kw: LinearRegression(**kw), + "SVR": lambda **kw: SVR(**kw), + "KNN": lambda **kw: KNeighborsRegressor(n_jobs=1, **kw), + "MLP": lambda **kw: MLPRegressor(max_iter=500, random_state=random_state, **kw), + "DecisionTree": lambda **kw: DecisionTreeRegressor(random_state=random_state, **kw), + "PLS": None, # sklearn.cross_decomposition.PLSRegression 暂未集成 + } + builder = factory.get(model_name) + if builder is None: + return None + return builder + + +# ============================================================ +# Optuna 超参 search space +# ============================================================ + +def _get_search_space(model_name: str, trial) -> Dict[str, Any]: + """按模型名返回 Optuna 超参 search space。""" + sp: Dict[str, Any] = {} + if model_name == "RF": + sp["n_estimators"] = trial.suggest_int("n_estimators", 50, 300, step=50) + sp["max_depth"] = trial.suggest_int("max_depth", 3, 20) + sp["min_samples_split"] = trial.suggest_int("min_samples_split", 2, 10) + sp["min_samples_leaf"] = trial.suggest_int("min_samples_leaf", 1, 5) + elif model_name == "ET": + sp["n_estimators"] = trial.suggest_int("n_estimators", 50, 300, step=50) + sp["max_depth"] = trial.suggest_int("max_depth", 3, 20) + elif model_name == "GradientBoosting": + sp["n_estimators"] = trial.suggest_int("n_estimators", 50, 300, step=50) + sp["max_depth"] = trial.suggest_int("max_depth", 3, 8) + sp["learning_rate"] = trial.suggest_float("learning_rate", 0.01, 0.3, log=True) + elif model_name == "SVR": + sp["C"] = trial.suggest_float("C", 0.1, 100.0, log=True) + sp["epsilon"] = trial.suggest_float("epsilon", 0.001, 1.0, log=True) + sp["kernel"] = trial.suggest_categorical("kernel", ["rbf", "linear"]) + elif model_name == "KNN": + sp["n_neighbors"] = trial.suggest_int("n_neighbors", 3, 20) + sp["weights"] = trial.suggest_categorical("weights", ["uniform", "distance"]) + elif model_name in ("Ridge", "Lasso", "ElasticNet"): + sp["alpha"] = trial.suggest_float("alpha", 0.01, 100.0, log=True) + if model_name == "ElasticNet": + sp["l1_ratio"] = trial.suggest_float("l1_ratio", 0.0, 1.0) + elif model_name == "MLP": + sp["hidden_layer_sizes"] = trial.suggest_categorical( + "hidden_layer_sizes", [(50,), (100,), (50, 50), (100, 50)] + ) + sp["alpha"] = trial.suggest_float("alpha", 1e-5, 1e-1, log=True) + sp["learning_rate_init"] = trial.suggest_float("learning_rate_init", 1e-4, 1e-2, log=True) + elif model_name == "DecisionTree": + sp["max_depth"] = trial.suggest_int("max_depth", 3, 20) + sp["min_samples_split"] = trial.suggest_int("min_samples_split", 2, 10) + elif model_name == "AdaBoost": + sp["n_estimators"] = trial.suggest_int("n_estimators", 30, 200, step=30) + sp["learning_rate"] = trial.suggest_float("learning_rate", 0.01, 1.0, log=True) + else: + sp["n_estimators"] = trial.suggest_int("n_estimators", 50, 200, step=50) + return sp + + +def _make_objective(model_name: str, X: np.ndarray, y: np.ndarray, + cv_folds: int, random_state: int): + """构造 Optuna objective(5 折 CV R²)。""" + from sklearn.model_selection import KFold, cross_val_score + + def objective(trial): + params = _get_search_space(model_name, trial) + try: + builder = _build_model(model_name, random_state=random_state) + if builder is None: + return -1.0 + model = builder(**params) + kf = KFold(n_splits=cv_folds, shuffle=True, random_state=random_state) + scores = cross_val_score(model, X, y, cv=kf, scoring="r2", n_jobs=1) + return float(np.mean(scores)) + except Exception: + return -1.0 + + return objective + + +def _refit_full(model_name: str, best_params: Dict[str, Any], + X: np.ndarray, y: np.ndarray, random_state: int): + """用 best params 在**全量数据**上 refit。""" + builder = _build_model(model_name, random_state=random_state) + if builder is None: + return None + model = builder(**best_params) + model.fit(X, y) + return model + + +# ============================================================ +# 失败兜底(回退到老 GridSearchCV 路径) +# ============================================================ + +def _fallback_train( + training_csv_path: str, + feature_start_column, + preprocessing: str, + model_name: str, + split_method: str, + cv_folds: int, + output_dir: Path, + target_column: str, +) -> AutoMLResult: + """AutoML 失败时调老 WaterQualityModelingBatch。 + + 返回的 AutoMLResult.fallback_used=True。 + """ + try: + from src.core.modeling.modeling_batch import WaterQualityModelingBatch + except ImportError as e: + return AutoMLResult( + success=False, error=f"fallback 导入失败: {e!r}", fallback_used=True, + target_column=target_column, preprocessing=preprocessing, model_name=model_name, + ) + + try: + out_dir = output_dir / preprocessing + out_dir.mkdir(parents=True, exist_ok=True) + modeler = WaterQualityModelingBatch(str(out_dir)) + modeler.train_models_batch( + csv_path=training_csv_path, + feature_start_column=feature_start_column, + preprocessing_methods=[preprocessing], + model_names=[model_name], + split_methods=[split_method], + cv_folds=cv_folds, + ) + # 找产出 + candidates = list(out_dir.rglob(f"{target_column}_{preprocessing}_{model_name}.joblib")) + model_path = str(candidates[0]) if candidates else None + return AutoMLResult( + success=model_path is not None, + model_path=model_path, + target_column=target_column, preprocessing=preprocessing, model_name=model_name, + fallback_used=True, + metadata={"source": "WaterQualityModelingBatch"}, + ) + except Exception as e: + return AutoMLResult( + success=False, error=f"fallback 失败: {e!r}", fallback_used=True, + target_column=target_column, preprocessing=preprocessing, model_name=model_name, + ) + + +# ============================================================ +# 主入口 +# ============================================================ + +def train_with_automl( + training_csv_path: str, + feature_start_column, + preprocessing_methods: Optional[List[str]] = None, + model_names: Optional[List[str]] = None, + split_methods: Optional[List[str]] = None, + cv_folds: int = 5, + output_dir: Optional[str] = None, + n_trials: int = DEFAULT_N_TRIALS, + timeout_sec: float = DEFAULT_TIMEOUT, + max_samples: int = DEFAULT_MAX_SAMPLES, + random_state: int = 42, + callback: Optional[Callable[[str, str, str], None]] = None, +) -> List[AutoMLResult]: + """用 Optuna + 子采样跑 AutoML。失败时自动回退到 GridSearchCV。 + + Args: + training_csv_path: 训练用 CSV(Step 5 产物 training_spectra.csv) + feature_start_column: 特征起始列名或索引(之前所有列视为目标 y) + preprocessing_methods: 候选预处理列表(**仅用第 1 个**,避免笛卡尔爆炸) + model_names: 候选模型列表(每个都会跑一遍 Optuna) + split_methods: 候选数据划分列表(AutoML 仅用第 1 个) + cv_folds: 交叉验证折数 + output_dir: 输出目录(默认 _AutoML) + n_trials: 单模型 Optuna trial 数 + timeout_sec: 单模型超时(秒),到时强制停止 + max_samples: 寻优阶段允许的最大样本数 + callback: 状态回调 callback(step_name, status, message) + + Returns: + List[AutoMLResult],每个目标列一份结果 + """ + def notify(status: str, msg: str = "") -> None: + if callback: + callback("步骤6_AutoML", status, msg) + + # ---- 1) 参数默认值 ---- + if preprocessing_methods is None: + preprocessing_methods = ["MMS"] + if model_names is None: + model_names = ["RF", "SVR", "Ridge"] + if split_methods is None: + split_methods = ["spxy"] + + # 决策:仅用第一个预处理 + 第一个划分,避免笛卡尔爆炸 + preproc = preprocessing_methods[0] + split_method = split_methods[0] + + if output_dir is None: + output_dir = "./7_Supervised_Model_Training_AutoML" + out_dir = Path(output_dir) + out_dir.mkdir(parents=True, exist_ok=True) + preproc_dir = out_dir / preproc + preproc_dir.mkdir(parents=True, exist_ok=True) + + # ---- 2) 加载数据 ---- + notify("start", f"AutoML 训练开始 (n_trials={n_trials}, timeout={timeout_sec}s, max_samples={max_samples})") + if not Path(training_csv_path).exists(): + return [AutoMLResult(success=False, error=f"训练 CSV 不存在: {training_csv_path}")] + + df = pd.read_csv(training_csv_path) + + # 提取目标列(feature_start_column 之前所有数值列) + if isinstance(feature_start_column, int): + y_cols = [c for c in df.columns[:feature_start_column] + if pd.api.types.is_numeric_dtype(df[c])] + else: + try: + idx = list(df.columns).index(feature_start_column) + y_cols = [c for c in df.columns[:idx] + if pd.api.types.is_numeric_dtype(df[c])] + except ValueError: + y_cols = [] + + if not y_cols: + notify("error", "AutoML: 未识别出目标列(feature_start_column 之前的所有数值列)") + return [AutoMLResult(success=False, error="未识别出目标列")] + + feat_cols = [c for c in df.columns if c not in y_cols] + X_all = df[feat_cols].values.astype(np.float64) + + # ---- 3) 预处理(仅第一项) ---- + if preproc != "None": + try: + from src.preprocessing.spectral_Preprocessing import Preprocessing + processed = Preprocessing(preproc, df[feat_cols]) + if isinstance(processed, pd.DataFrame): + X_all = processed.values.astype(np.float64) + else: + X_all = np.asarray(processed, dtype=np.float64) + except Exception as e: + notify("warning", f"预处理 {preproc} 失败: {e!r},改用 None") + preproc = "None" + + # ---- 4) 检查 Optuna 是否可用 ---- + try: + import optuna + optuna.logging.set_verbosity(optuna.logging.WARNING) + optuna_available = True + except ImportError: + optuna_available = False + notify("warning", "optuna 未安装,全目标列回退到 GridSearchCV(pip install \"optuna>=3.6\")") + + # ---- 5) 逐 target 跑 ---- + results: List[AutoMLResult] = [] + total = len(y_cols) + per_model_timeout = max(10.0, timeout_sec / max(1, len(model_names))) + + for ti, tgt in enumerate(y_cols, 1): + t0 = time.time() + yv = df[tgt].values.astype(np.float64) + mask = ~np.isnan(yv) + X_t = X_all[mask] + y_t = yv[mask] + + if X_t.shape[0] < cv_folds * 2: + notify("warning", f"目标 {tgt}: 有效样本 {X_t.shape[0]} 不足,跳过") + results.append(AutoMLResult( + success=False, target_column=tgt, error=f"样本不足({X_t.shape[0]})", + preprocessing=preproc, + )) + continue + + X_sub, y_sub, was_sub = smart_subsample(X_t, y_t, max_samples=max_samples, random_state=random_state) + if was_sub: + notify("info", f"目标 {tgt}: {X_t.shape[0]} 样本 → 子采样 {X_sub.shape[0]}(寻优用)") + + best_overall = AutoMLResult(success=False, target_column=tgt, preprocessing=preproc) + + if not optuna_available: + # 全目标列一次性 fallback + best_overall = _fallback_train( + training_csv_path, feature_start_column, preproc, model_names[0], split_method, + cv_folds, out_dir, tgt, + ) + else: + for model_name in model_names: + try: + builder = _build_model(model_name, random_state=random_state) + if builder is None: + notify("warning", f"模型 {model_name} 暂不支持 AutoML 寻优") + continue + + study = optuna.create_study( + direction="maximize", + sampler=optuna.samplers.TPESampler(seed=random_state), + ) + study.optimize( + _make_objective(model_name, X_sub, y_sub, cv_folds, random_state), + n_trials=n_trials, + timeout=per_model_timeout, + show_progress_bar=False, + ) + + if study.best_value is None or study.best_value <= -1.0: + notify("warning", f"{tgt}/{model_name}: 全部 trial 失败(CV 全部 <= -1)") + continue + + # refit on FULL + final_model = _refit_full(model_name, study.best_params, X_t, y_t, random_state) + if final_model is None: + continue + + # 保存 + import joblib + fname = f"{tgt}_{preproc}_{model_name}_AUTOML.joblib" + fpath = preproc_dir / fname + joblib.dump({ + "model": final_model, + "target_column_name": tgt, + "preprocess_method": preproc, + "model_name": model_name, + "metadata": { + "automl": True, + "best_params": study.best_params, + "cv_score": float(study.best_value), + "n_trials_done": len(study.trials), + "n_samples_used_full": int(X_t.shape[0]), + "n_samples_used_for_search": int(X_sub.shape[0]), + "was_subsampled": was_sub, + "split_method": split_method, + }, + }, fpath) + + cand = AutoMLResult( + success=True, + model_path=str(fpath), + cv_score=float(study.best_value), + best_params=study.best_params, + target_column=tgt, + preprocessing=preproc, + model_name=model_name, + n_trials_done=len(study.trials), + n_samples_used=int(X_sub.shape[0]), + metadata={"refit_on_full": True, "n_samples_full": int(X_t.shape[0])}, + ) + if cand.cv_score > best_overall.cv_score: + best_overall = cand + except Exception as e: + notify("warning", f"目标 {tgt} / 模型 {model_name} 失败: {e!r}") + continue + + if not best_overall.success: + notify("warning", f"目标 {tgt} 全部 Optuna trial 失败,回退 GridSearchCV") + best_overall = _fallback_train( + training_csv_path, feature_start_column, preproc, model_names[0], split_method, + cv_folds, out_dir, tgt, + ) + + best_overall.elapsed_sec = time.time() - t0 + results.append(best_overall) + notify("info", f"AutoML 目标 {tgt} 完成 ({ti}/{total}) cv={best_overall.cv_score:.4f}") + + # ---- 6) 汇总 json ---- + summary_path = out_dir / "automl_summary.json" + try: + with open(summary_path, "w", encoding="utf-8") as f: + json.dump([asdict(r) for r in results], f, ensure_ascii=False, indent=2, default=str) + except Exception as e: + notify("warning", f"写 automl_summary.json 失败: {e!r}") + + success_n = sum(1 for r in results if r.success) + fallback_n = sum(1 for r in results if r.fallback_used) + notify("completed", f"AutoML 训练完成 {success_n}/{len(results)} 成功({fallback_n} 走 fallback),汇总 {summary_path}") + return results + + +# ============================================================ +# CLI 自测 +# ============================================================ + +if __name__ == "__main__": + import argparse + + p = argparse.ArgumentParser(description="AutoML 训练器 CLI 自测") + p.add_argument("--csv", required=True, help="训练用 CSV(feature_start_column 之前的列为目标 y)") + p.add_argument("--feature-start", default="0", help="特征起始列名或索引(默认 0)") + p.add_argument("--n-trials", type=int, default=DEFAULT_N_TRIALS) + p.add_argument("--timeout", type=float, default=DEFAULT_TIMEOUT) + p.add_argument("--max-samples", type=int, default=DEFAULT_MAX_SAMPLES) + p.add_argument("--out", default="./7_Supervised_Model_Training_AutoML") + args = p.parse_args() + + # 智能推断 feature_start_column 类型 + fsc: Any = args.feature_start + try: + fsc = int(fsc) + except ValueError: + pass + + res = train_with_automl( + training_csv_path=args.csv, + feature_start_column=fsc, + n_trials=args.n_trials, + timeout_sec=args.timeout, + max_samples=args.max_samples, + output_dir=args.out, + ) + print(f"\n训练完成 {len(res)} 个目标") + for r in res: + marker = "✓" if r.success else "✗" + fb = " [fallback]" if r.fallback_used else "" + print(f" {marker} {r.target_column}: cv={r.cv_score:.4f} path={r.model_path}{fb}") diff --git a/src/core/steps/data_preparation_step.py b/src/core/steps/data_preparation_step.py index e0b6ef7..ae8dcbc 100644 --- a/src/core/steps/data_preparation_step.py +++ b/src/core/steps/data_preparation_step.py @@ -126,7 +126,7 @@ class DataPreparationStep: @staticmethod def calculate_water_quality_indices( - training_spectra_path: Optional[str] = None, + training_csv_path: Optional[str] = None, formula_csv_file: Optional[str] = None, formula_names: Optional[List[str]] = None, output_file: Optional[str] = None, @@ -153,8 +153,8 @@ class DataPreparationStep: notify("skipped", "跳过水质指数计算") return None - if training_spectra_path is None: - raise ValueError("必须提供 training_spectra_path 参数") + if training_csv_path is None: + raise ValueError("必须提供 training_csv_path 参数") if formula_csv_file is None: raise ValueError("必须提供 formula_csv_file 参数") @@ -170,7 +170,7 @@ class DataPreparationStep: from src.utils.band_math import BandMathCalculator - calculator = BandMathCalculator(training_spectra_path) + calculator = BandMathCalculator(training_csv_path) result_df = calculator.process_formulas_from_csv( formula_csv_file=formula_csv_file, formula_names=formula_names, diff --git a/src/core/water_quality_inversion_pipeline_GUI.py b/src/core/water_quality_inversion_pipeline_GUI.py index 1419c57..89a0758 100644 --- a/src/core/water_quality_inversion_pipeline_GUI.py +++ b/src/core/water_quality_inversion_pipeline_GUI.py @@ -173,7 +173,7 @@ class WaterQualityInversionPipeline: self.interpolated_img_path = None # 存储插值后的影像路径 self.deglint_img_path = None self.processed_csv_path = None - self.training_spectra_path = None + self.training_csv_path = None self.indices_path = None self.custom_regression_path = None @@ -511,7 +511,7 @@ class WaterQualityInversionPipeline: left_shoulder_wave: Optional[float] = None, valley_wave: Optional[float] = None, right_shoulder_wave: Optional[float] = None, - water_mask: Optional[Union[str, np.ndarray]] = None, + water_mask_path: Optional[Union[str, np.ndarray]] = None, interpolate_zeros: bool = False, interpolation_method: str = 'nearest', enabled: bool = True, @@ -546,7 +546,7 @@ class WaterQualityInversionPipeline: left_shoulder_wave=left_shoulder_wave, valley_wave=valley_wave, right_shoulder_wave=right_shoulder_wave, - water_mask=water_mask, + water_mask=water_mask_path, interpolate_zeros=interpolate_zeros, interpolation_method=interpolation_method, enabled=enabled, @@ -655,13 +655,13 @@ class WaterQualityInversionPipeline: water_mask_path=self.water_mask_path, output_dir=str(self.training_spectra_dir), ) - self.training_spectra_path = result + self.training_csv_path = result self._record_step_time("步骤5: 提取训练样本点光谱", 0, 0) self._notify("completed", f"训练光谱数据已保存: {result}") return result def step5_5_calculate_water_quality_indices(self, - training_spectra_path: Optional[str] = None, + training_csv_path: Optional[str] = None, formula_csv_file: Optional[str] = None, formula_names: Optional[List[str]] = None, output_file: Optional[str] = None, @@ -669,29 +669,29 @@ class WaterQualityInversionPipeline: skip_dependency_check: bool = False) -> str: """ 步骤5.5: 根据训练光谱计算水质光谱指数 - + 使用band_math.py中的方法实现,支持从公式CSV文件中批量计算指定公式 - + Args: - training_spectra_path: 训练光谱数据CSV路径(如果为None,使用步骤5的结果) + training_csv_path: 训练光谱数据CSV路径(如果为None,使用步骤5的结果) formula_csv_file: 公式CSV文件路径,包含公式名称和具体公式 formula_names: 要计算的公式名称列表,如果为None则计算所有公式 output_file: 输出文件完整路径(支持绝对路径),如果为None则使用默认路径 - + Returns: 包含计算结果的新CSV文件路径 """ # 参数解析(保留原逻辑) - if training_spectra_path is not None: - csv_path = training_spectra_path - elif self.training_spectra_path is not None: - csv_path = self.training_spectra_path + if training_csv_path is not None: + csv_path = training_csv_path + elif self.training_csv_path is not None: + csv_path = self.training_csv_path else: csv_path = None self._notify("started", "步骤5.5: 计算水质光谱指数") result = DataPreparationStep.calculate_water_quality_indices( - training_spectra_path=csv_path, + training_csv_path=csv_path, formula_csv_file=formula_csv_file, formula_names=formula_names, output_file=output_file, @@ -727,8 +727,8 @@ class WaterQualityInversionPipeline: # 参数解析(保留原逻辑) if training_csv_path is not None: final_csv_path = training_csv_path - elif self.training_spectra_path is not None: - final_csv_path = self.training_spectra_path + elif self.training_csv_path is not None: + final_csv_path = self.training_csv_path else: final_csv_path = None @@ -911,7 +911,7 @@ class WaterQualityInversionPipeline: print("="*80) if training_csv_path is None: - training_csv_path = self.training_spectra_path + training_csv_path = self.training_csv_path if training_csv_path is None: raise ValueError("请提供训练数据CSV路径,或先执行步骤5") @@ -1033,7 +1033,7 @@ class WaterQualityInversionPipeline: print("="*80) if csv_path is None: - csv_path = self.training_spectra_path + csv_path = self.training_csv_path if csv_path is None: raise ValueError("请提供CSV文件路径,或先执行步骤5") @@ -1506,7 +1506,7 @@ class WaterQualityInversionPipeline: if 'step5' in config: self._notify("步骤5: 光谱提取", "start") self.step5_extract_training_spectra(**config['step5']) - self._notify("步骤5: 光谱提取", "completed", f"(输出: {self.training_spectra_path})") + self._notify("步骤5: 光谱提取", "completed", f"(输出: {self.training_csv_path})") else: self._notify("步骤5: 光谱提取", "skipped", "未配置") @@ -1615,7 +1615,7 @@ class WaterQualityInversionPipeline: # 生成散点图 if 'visualization' in config and config['visualization'].get('generate_scatter', True): - if self.training_spectra_path and self.models_dir.exists(): + if self.training_csv_path and self.models_dir.exists(): try: self._notify("可视化", "info", "生成模型评估散点图...") scatter_config = config['visualization'].get('scatter_config', {}) @@ -1653,7 +1653,7 @@ class WaterQualityInversionPipeline: # 生成光谱曲线图 if 'visualization' in config and config['visualization'].get('generate_spectrum', True): - if self.training_spectra_path: + if self.training_csv_path: try: self._notify("可视化", "info", "生成光谱曲线对比图...") spectrum_paths = self.generate_spectrum_comparison_plots( @@ -1701,7 +1701,7 @@ class WaterQualityInversionPipeline: pipeline_info['step2'] = {'status': 'completed', 'output_file': str(self.glint_mask_path) if self.glint_mask_path else 'N/A'} pipeline_info['step3'] = {'status': 'completed', 'output_file': str(self.deglint_img_path) if self.deglint_img_path else 'N/A'} pipeline_info['step4'] = {'status': 'completed', 'output_file': str(self.processed_csv_path) if self.processed_csv_path else 'N/A'} - pipeline_info['step5'] = {'status': 'completed', 'output_file': str(self.training_spectra_path) if self.training_spectra_path else 'N/A'} + pipeline_info['step5'] = {'status': 'completed', 'output_file': str(self.training_csv_path) if self.training_csv_path else 'N/A'} pipeline_info['step5_5'] = {'status': 'completed', 'output_file': str(self.indices_path) if self.indices_path else 'N/A'} pipeline_info['step6'] = {'status': 'completed', 'output_file': str(self.models_dir)} pipeline_info['step6_75'] = {'status': 'completed', 'output_file': str(self.custom_regression_path) if self.custom_regression_path else 'N/A'} @@ -1784,8 +1784,8 @@ class WaterQualityInversionPipeline: # 参数解析(保留原逻辑) if csv_path is not None: final_csv_path = csv_path - elif self.training_spectra_path is not None: - final_csv_path = self.training_spectra_path + elif self.training_csv_path is not None: + final_csv_path = self.training_csv_path else: final_csv_path = None @@ -2109,7 +2109,7 @@ def main(): 'interpolation_method': 'bilinear', # 插值方法: 'nearest'(邻近), 'bilinear'(双线性), # 'spline'(样条), 'kriging'(克里金) # 水域掩膜参数(可选): - 'water_mask':r"D:\BaiduNetdiskDownload\yaobao\roi\roi.shp", # None表示自动使用步骤1生成的掩膜,也可以提供: + 'water_mask_path':r"D:\BaiduNetdiskDownload\yaobao\roi\roi.shp", # None表示自动使用步骤1生成的掩膜,也可以提供: # # - numpy数组 # # - 栅格文件路径(.dat/.tif) # # - shapefile路径(.shp) diff --git a/src/gui/components/chart_dialogs.py b/src/gui/components/chart_dialogs.py new file mode 100644 index 0000000..61d94d0 --- /dev/null +++ b/src/gui/components/chart_dialogs.py @@ -0,0 +1,430 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +图表与交互弹窗模块 + +包含 ChartViewerDialog、ChartBrowserDialog 和 InteractiveViewerDialog 类。 +""" + +import numpy as np +from PyQt5.QtWidgets import ( + QDialog, QVBoxLayout, QHBoxLayout, QPushButton, + QSizePolicy, QFileDialog, QMessageBox, QGroupBox, + QListWidget, QLabel, QComboBox, QCheckBox, +) +from PyQt5.QtCore import Qt +from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas +from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar +from matplotlib.figure import Figure + + +class ChartViewerDialog(QDialog): + """图表查看器对话框""" + def __init__(self, title="图表查看器", parent=None): + super().__init__(parent) + self.setWindowTitle(title) + self.resize(1000, 700) + self.init_ui() + + def init_ui(self): + layout = QVBoxLayout() + + self.figure = Figure(figsize=(10, 7)) + self.canvas = FigureCanvas(self.figure) + self.canvas.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + + self.toolbar = NavigationToolbar(self.canvas, self) + + layout.addWidget(self.toolbar) + layout.addWidget(self.canvas) + + btn_layout = QHBoxLayout() + + self.save_btn = QPushButton("保存图表") + self.save_btn.clicked.connect(self.save_chart) + btn_layout.addWidget(self.save_btn) + + btn_layout.addStretch() + + self.close_btn = QPushButton("关闭") + self.close_btn.clicked.connect(self.close) + btn_layout.addWidget(self.close_btn) + + layout.addLayout(btn_layout) + self.setLayout(layout) + + def display_image(self, image_path): + """显示图片""" + self.figure.clear() + ax = self.figure.add_subplot(111) + + try: + import matplotlib.image as mpimg + img = mpimg.imread(image_path) + ax.imshow(img) + ax.axis('off') + self.figure.tight_layout() + self.canvas.draw() + self.current_image_path = image_path + except Exception as e: + ax.text(0.5, 0.5, f'加载图片失败:\n{str(e)}', + ha='center', va='center', transform=ax.transAxes) + self.canvas.draw() + + def display_custom_plot(self, plot_func): + """显示自定义绘图函数""" + self.figure.clear() + try: + plot_func(self.figure) + self.canvas.draw() + except Exception as e: + ax = self.figure.add_subplot(111) + ax.text(0.5, 0.5, f'绘图失败:\n{str(e)}', + ha='center', va='center', transform=ax.transAxes) + self.canvas.draw() + + def save_chart(self): + """保存图表""" + file_path, _ = QFileDialog.getSaveFileName( + self, "保存图表", "", + "PNG图片 (*.png);;JPG图片 (*.jpg);;PDF文件 (*.pdf);;所有文件 (*.*)" + ) + if file_path: + try: + self.figure.savefig(file_path, dpi=300, bbox_inches='tight') + QMessageBox.information(self, "成功", f"图表已保存到:\n{file_path}") + except Exception as e: + QMessageBox.critical(self, "错误", f"保存失败:\n{str(e)}") + + +class ChartBrowserDialog(QDialog): + """图表浏览器对话框""" + def __init__(self, chart_files, parent=None): + super().__init__(parent) + self.chart_files = sorted(chart_files, key=lambda x: x.stat().st_mtime, reverse=True) + self.current_index = 0 + self.setWindowTitle("图表浏览器") + self.resize(1200, 800) + self.init_ui() + self.show_chart(0) + + def init_ui(self): + layout = QVBoxLayout() + + list_group = QGroupBox(f"图表列表 (共 {len(self.chart_files)} 个)") + list_layout = QHBoxLayout() + + self.chart_list = QListWidget() + self.chart_list.setMaximumHeight(150) + for chart_file in self.chart_files: + self.chart_list.addItem(chart_file.name) + self.chart_list.currentRowChanged.connect(self.show_chart) + + list_layout.addWidget(self.chart_list) + list_group.setLayout(list_layout) + layout.addWidget(list_group) + + self.figure = Figure(figsize=(12, 8)) + self.canvas = FigureCanvas(self.figure) + self.canvas.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + + self.toolbar = NavigationToolbar(self.canvas, self) + layout.addWidget(self.toolbar) + layout.addWidget(self.canvas, 1) + + btn_layout = QHBoxLayout() + + self.prev_btn = QPushButton("◀ 上一个") + self.prev_btn.clicked.connect(self.prev_chart) + btn_layout.addWidget(self.prev_btn) + + self.next_btn = QPushButton("下一个 >") + self.next_btn.clicked.connect(self.next_chart) + btn_layout.addWidget(self.next_btn) + + btn_layout.addStretch() + + self.save_btn = QPushButton("💾 保存当前图表") + self.save_btn.clicked.connect(self.save_current_chart) + btn_layout.addWidget(self.save_btn) + + self.close_btn = QPushButton("关闭") + self.close_btn.clicked.connect(self.close) + btn_layout.addWidget(self.close_btn) + + layout.addLayout(btn_layout) + self.setLayout(layout) + + def show_chart(self, index): + """显示指定索引的图表""" + if 0 <= index < len(self.chart_files): + self.current_index = index + self.chart_list.setCurrentRow(index) + + chart_file = self.chart_files[index] + self.figure.clear() + ax = self.figure.add_subplot(111) + + try: + import matplotlib.image as mpimg + img = mpimg.imread(str(chart_file)) + ax.imshow(img) + ax.axis('off') + ax.set_title(chart_file.name, fontsize=12, pad=10) + self.figure.tight_layout() + self.canvas.draw() + except Exception as e: + ax.text(0.5, 0.5, f'加载图片失败:\n{str(e)}', + ha='center', va='center', transform=ax.transAxes) + self.canvas.draw() + + self.prev_btn.setEnabled(index > 0) + self.next_btn.setEnabled(index < len(self.chart_files) - 1) + + def prev_chart(self): + """上一个图表""" + if self.current_index > 0: + self.show_chart(self.current_index - 1) + + def next_chart(self): + """下一个图表""" + if self.current_index < len(self.chart_files) - 1: + self.show_chart(self.current_index + 1) + + def save_current_chart(self): + """保存当前图表""" + if 0 <= self.current_index < len(self.chart_files): + current_file = self.chart_files[self.current_index] + file_path, _ = QFileDialog.getSaveFileName( + self, "保存图表", current_file.name, + "PNG图片 (*.png);;JPG图片 (*.jpg);;所有文件 (*.*)" + ) + if file_path: + try: + import shutil + shutil.copy(str(current_file), file_path) + QMessageBox.information(self, "成功", f"图表已保存到:\n{file_path}") + except Exception as e: + QMessageBox.critical(self, "错误", f"保存失败:\n{str(e)}") + + +class InteractiveViewerDialog(QDialog): + """交互式影像预览对话框:显示影像、参考点散点图、点击查询坐标/值""" + + def __init__(self, parent, img_path, ref_csv=None): + super().__init__(parent) + self.img_path = img_path + self.ref_csv = ref_csv + self.geotransform = None + self.fig = None + self.canvas = None + self.ax = None + self.status_label = None + self.init_ui() + + def init_ui(self): + self.setWindowTitle("👁️ 交互式影像预览") + self.setMinimumSize(900, 700) + + layout = QVBoxLayout() + + toolbar = QHBoxLayout() + self.band_combo = QComboBox() + self.band_combo.currentIndexChanged.connect(self.on_band_changed) + toolbar.addWidget(QLabel("显示波段:")) + toolbar.addWidget(self.band_combo) + + self.gray_check = QCheckBox("灰度显示") + self.gray_check.stateChanged.connect(self.on_band_changed) + toolbar.addWidget(self.gray_check) + toolbar.addStretch() + layout.addLayout(toolbar) + + try: + from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas + from matplotlib.figure import Figure + import matplotlib + matplotlib.use('Qt5Agg') + + self.fig = Figure(figsize=(10, 8)) + self.canvas = FigureCanvas(self.fig) + self.ax = self.fig.add_subplot(111) + self.fig.tight_layout() + layout.addWidget(self.canvas) + + self.load_and_display() + + except ImportError as e: + layout.addWidget(QLabel(f"Matplotlib 未安装: {e}")) + + self.status_label = QLabel("点击影像查看像素坐标和经纬度") + self.status_label.setStyleSheet("background:#f0f0f0;padding:4px;font-size:12px;") + self.status_label.setWordWrap(True) + layout.addWidget(self.status_label) + + close_btn = QPushButton("关闭") + close_btn.clicked.connect(self.close) + layout.addWidget(close_btn) + + self.setLayout(layout) + + def load_and_display(self): + """加载影像并显示""" + from osgeo import gdal + + dataset = gdal.Open(self.img_path) + if dataset is None: + self.status_label.setText(f"无法打开影像: {self.img_path}") + return + + self.geotransform = dataset.GetGeoTransform() + self.projection = dataset.GetProjection() + n_bands = dataset.RasterCount + self.height = dataset.RasterYSize + self.width = dataset.RasterXSize + + self.band_combo.clear() + if n_bands >= 3: + for i in range(1, n_bands + 1): + self.band_combo.addItem(f"RGB (B{i-0}, G{i-1}, R{i-2})" if i >= 3 else f"波段 {i}", i) + self.band_combo.addItem(f"单波段 (B1)", 0) + else: + for i in range(1, n_bands + 1): + self.band_combo.addItem(f"波段 {i}", i - 1) + self.band_combo.setCurrentIndex(0) + + self.dataset = dataset + self.display_band(0, is_gray=False) + self.load_ref_points() + + def display_band(self, band_idx, is_gray=False): + """显示指定波段组合""" + from osgeo import gdal + import numpy as np + + dataset = self.dataset + self.ax.clear() + + if is_gray or (self.band_combo.currentData() == 0 and dataset.RasterCount == 1): + band = dataset.GetRasterBand(1 if band_idx == 0 else band_idx + 1) + data = band.ReadAsArray() + data = np.nan_to_num(data, nan=0.0) + self.ax.imshow(data, cmap='gray') + self.ax.set_title(f"波段 {band_idx + 1} (灰度)") + else: + n = min(3, dataset.RasterCount) + bands_data = [] + for i in range(n): + b = dataset.GetRasterBand(i + 1) + bd = b.ReadAsArray() + bd = np.nan_to_num(bd, nan=0.0) + bands_data.append(bd) + rgb = np.dstack(bands_data) + + for i in range(rgb.shape[2]): + p2, p98 = np.percentile(rgb[:, :, i], [2, 98]) + if p98 > p2: + rgb[:, :, i] = np.clip((rgb[:, :, i] - p2) / (p98 - p2), 0, 1) + else: + rgb[:, :, i] = np.clip(rgb[:, :, i] / (p98 + 1e-6), 0, 1) + + self.ax.imshow(rgb) + self.ax.set_title(f"RGB 显示") + + self.ax.set_xlabel("列 (Column)") + self.ax.set_ylabel("行 (Row)") + self.fig.tight_layout() + self.canvas.draw() + + self.cid = self.canvas.mpl_connect('button_press_event', self.on_click) + + def on_band_changed(self): + """波段选择变化时更新显示""" + if not hasattr(self, 'dataset'): + return + is_gray = self.gray_check.isChecked() + band_data = self.band_combo.currentData() + self.display_band(band_data if band_data != 0 else 0, is_gray=is_gray) + + def load_ref_points(self): + """加载并显示参考点""" + import os + if not self.ref_csv or not os.path.isfile(self.ref_csv): + return + + try: + import csv + lon_list, lat_list = [], [] + with open(self.ref_csv, 'r', encoding='utf-8-sig') as f: + reader = csv.DictReader(f) + for row in reader: + try: + lon = float(row.get('Lon', row.get('lon', row.get('LON', 0)))) + lat = float(row.get('Lat', row.get('lat', row.get('LAT', 0)))) + if lon and lat: + lon_list.append(lon) + lat_list.append(lat) + except (ValueError, TypeError): + continue + + if not lon_list: + return + + px_list, py_list = [], [] + gt = self.geotransform + if gt and (gt[1] != 0 or gt[5] != 0): + for lon, lat in zip(lon_list, lat_list): + px = (lon - gt[0]) / gt[1] + py = (lat - gt[3]) / gt[5] + if 0 <= px < self.width and 0 <= py < self.height: + px_list.append(px) + py_list.append(py) + + if px_list: + self.ax.scatter(px_list, py_list, c='red', s=40, marker='o', + edgecolors='white', linewidths=0.8, zorder=5, alpha=0.9, + label=f'参考点 ({len(px_list)}个)') + self.ax.legend(loc='upper right', fontsize=9) + self.fig.tight_layout() + self.canvas.draw() + self.status_label.setText( + f"已加载 {len(px_list)} 个参考点(仅显示在影像范围内的点)" + ) + except Exception as e: + self.status_label.setText(f"加载参考点失败: {e}") + + def pixel_to_geo(self, px, py): + """像素坐标转经纬度""" + gt = self.geotransform + if gt is None: + return None, None + lon = gt[0] + px * gt[1] + py * gt[2] + lat = gt[3] + px * gt[4] + py * gt[5] + return lon, lat + + def on_click(self, event): + """鼠标点击事件""" + if event.inaxes != self.ax or event.xdata is None or event.ydata is None: + return + + px, py = int(round(event.xdata)), int(round(event.ydata)) + if not (0 <= px < self.width and 0 <= py < self.height): + return + + from osgeo import gdal + import numpy as np + dataset = self.dataset + n_bands = dataset.RasterCount + vals = [] + for b in range(1, n_bands + 1): + val = dataset.GetRasterBand(b).ReadAsArray()[py, px] + vals.append(f"{val:.4f}" if isinstance(val, float) else str(val)) + + lon, lat = self.pixel_to_geo(px, py) + geo_str = f"Lon={lon:.6f}, Lat={lat:.6f}" if lon is not None else "无地理参考" + + self.status_label.setText( + f"像素: (行={py}, 列={px}) | {geo_str} | " + f"波段值: {' | '.join(vals[:5])}" + + (f" ... ({n_bands}波段的更多信息)" if n_bands > 5 else "") + ) \ No newline at end of file diff --git a/src/gui/components/data_models.py b/src/gui/components/data_models.py new file mode 100644 index 0000000..e4bf8ad --- /dev/null +++ b/src/gui/components/data_models.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +数据模型模块 + +包含 PandasTableModel 等数据模型类。 +""" + +import pandas as pd +from PyQt5.QtCore import Qt, QAbstractTableModel + + +class PandasTableModel(QAbstractTableModel): + """支持DataFrame的表格模型""" + def __init__(self, data_frame: pd.DataFrame): + super().__init__() + self._data = data_frame.copy() + if self._data.empty: + self._data = pd.DataFrame() + self._data.fillna("", inplace=True) + self._columns = [str(col) for col in self._data.columns] + + def rowCount(self, parent=None): + return len(self._data) + + def columnCount(self, parent=None): + return len(self._columns) + + def data(self, index, role=Qt.DisplayRole): + if not index.isValid() or role != Qt.DisplayRole: + return None + + value = self._data.iat[index.row(), index.column()] + if pd.isna(value): + return "" + return str(value) + + def headerData(self, section, orientation, role=Qt.DisplayRole): + if role != Qt.DisplayRole: + return None + if orientation == Qt.Horizontal: + if section < len(self._columns): + return self._columns[section] + return str(section) + return str(section + 1) + + def flags(self, index): + if not index.isValid(): + return Qt.NoItemFlags + return Qt.ItemIsEnabled | Qt.ItemIsSelectable \ No newline at end of file diff --git a/src/gui/components/image_widgets.py b/src/gui/components/image_widgets.py new file mode 100644 index 0000000..444af38 --- /dev/null +++ b/src/gui/components/image_widgets.py @@ -0,0 +1,351 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +图像浏览组件模块 + +包含 ImageCategoryTree 和 ImageViewerWidget 类。 +""" + +import os +from pathlib import Path +from typing import List, Optional + +from PyQt5.QtWidgets import ( + QTreeWidget, QTreeWidgetItem, QWidget, QVBoxLayout, QHBoxLayout, + QPushButton, QLabel, QScrollArea, QFrame, QGroupBox, + QFileDialog, QMessageBox, +) +from PyQt5.QtCore import Qt, QTimer +from PyQt5.QtGui import QPixmap + + +class ImageCategoryTree(QTreeWidget): + """图像分类目录树 - 按类别组织图像文件""" + + CATEGORIES = [ + ("模型评估", ["scatter", "regression", "validation", "r2", "rmse"], "📊"), + ("光谱分析", ["spectrum", "spectral", "band", "wavelength"], "📈"), + ("统计图表", ["boxplot", "histogram", "heatmap", "statistics", "stats"], "📉"), + ("处理结果", ["mask", "glint", "deglint", "preview", "overlay", "water_mask"], "🖼️"), + ("含量分布图", [], "📁"), + ] + + def __init__(self, parent=None): + super().__init__(parent) + self.setHeaderLabel("图像目录") + self.setMaximumWidth(300) + self.setMinimumWidth(250) + self.setup_categories() + self.setStyleSheet(""" + QTreeWidget { + border: 1px solid #ddd; + border-radius: 5px; + background-color: #f8f9fa; + } + QTreeWidget::item { + padding: 5px; + border-radius: 3px; + } + QTreeWidget::item:selected { + background-color: #0078D4; + color: white; + } + QTreeWidget::item:hover { + background-color: #e3f2fd; + } + """) + + def setup_categories(self): + """初始化类别节点""" + self.category_items = {} + for category_name, keywords, icon in self.CATEGORIES: + item = QTreeWidgetItem(self) + item.setText(0, f"{icon} {category_name}") + item.setData(0, Qt.UserRole, {"type": "category", "keywords": keywords, "name": category_name}) + item.setExpanded(True) + self.category_items[category_name] = item + + def clear_all_images(self): + """清除所有图像项""" + for category_item in self.category_items.values(): + while category_item.childCount() > 0: + category_item.removeChild(category_item.child(0)) + + def add_image(self, file_path: Path, display_name: str = None): + """添加图像到对应的类别""" + if display_name is None: + display_name = file_path.stem + + category = self._determine_category(file_path.name) + category_item = self.category_items.get(category, self.category_items["含量分布图"]) + + image_item = QTreeWidgetItem(category_item) + image_item.setText(0, f" └─ {display_name}") + image_item.setData(0, Qt.UserRole, {"type": "image", "path": str(file_path)}) + image_item.setToolTip(0, str(file_path)) + + return image_item + + def _determine_category(self, filename: str) -> str: + """根据文件名确定类别""" + filename_lower = filename.lower() + + for category_name, keywords, _ in self.CATEGORIES: + if any(keyword in filename_lower for keyword in keywords): + return category_name + + return "含量分布图" + + def scan_directory(self, work_dir: str): + """扫描目录中的所有图像文件""" + self.clear_all_images() + + work_path = Path(work_dir) + if not work_path.exists(): + return + + image_extensions = ['*.png', '*.jpg', '*.jpeg', '*.tif', '*.tiff', '*.bmp'] + scan_roots: List[Path] = [] + _viz = work_path / "14_visualization" + if _viz.is_dir(): + scan_roots.append(_viz) + _wm = work_path / "1_water_mask" + if _wm.is_dir(): + scan_roots.append(_wm) + if not scan_roots: + scan_roots.append(work_path) + + seen_norm: set = set() + image_files: List[Path] = [] + for root in scan_roots: + for ext in image_extensions: + for p in root.glob(f"**/{ext}"): + key = os.path.normcase(os.path.normpath(str(p.resolve()))) + if key in seen_norm: + continue + seen_norm.add(key) + image_files.append(p) + + for img_file in sorted(image_files): + if img_file.name.startswith('.') or 'thumb' in img_file.name.lower(): + continue + self.add_image(img_file) + + for category_name, item in self.category_items.items(): + count = item.childCount() + if count > 0: + for cat_name, _, icon in self.CATEGORIES: + if cat_name == category_name: + item.setText(0, f"{icon} {category_name} ({count})") + break + + def get_selected_image_path(self) -> Optional[str]: + """获取当前选中的图像路径""" + selected_item = self.currentItem() + if not selected_item: + return None + + data = selected_item.data(0, Qt.UserRole) + if data and data.get("type") == "image": + return data.get("path") + return None + + +class ImageViewerWidget(QWidget): + """图像查看器组件 - 支持缩放、平移""" + + def __init__(self, parent=None): + super().__init__(parent) + self.current_image_path = None + self.scale_factor = 1.0 + self._update_timer = QTimer() + self._update_timer.setSingleShot(True) + self._update_timer.timeout.connect(self._do_update_display) + self._pending_scale = None + self.setup_ui() + + def setup_ui(self): + layout = QVBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + + toolbar = QHBoxLayout() + + self.refresh_btn = QPushButton("🔄 刷新目录") + self.refresh_btn.setToolTip("重新扫描工作目录中的图像文件") + toolbar.addWidget(self.refresh_btn) + + separator = QFrame() + separator.setFrameShape(QFrame.VLine) + separator.setFrameShadow(QFrame.Sunken) + toolbar.addWidget(separator) + + self.zoom_in_btn = QPushButton("🔍+") + self.zoom_in_btn.setToolTip("放大") + self.zoom_in_btn.setMaximumWidth(50) + toolbar.addWidget(self.zoom_in_btn) + + self.zoom_out_btn = QPushButton("🔍-") + self.zoom_out_btn.setToolTip("缩小") + self.zoom_out_btn.setMaximumWidth(50) + toolbar.addWidget(self.zoom_out_btn) + + self.fit_btn = QPushButton("⬜ 适应窗口") + self.fit_btn.setToolTip("适应窗口大小") + toolbar.addWidget(self.fit_btn) + + self.original_btn = QPushButton("1:1 原始大小") + self.original_btn.setToolTip("原始大小") + toolbar.addWidget(self.original_btn) + + toolbar.addStretch() + + self.save_btn = QPushButton("💾 保存") + self.save_btn.setToolTip("保存当前图像") + toolbar.addWidget(self.save_btn) + + layout.addLayout(toolbar) + + self.scroll_area = QScrollArea() + self.scroll_area.setWidgetResizable(True) + self.scroll_area.setStyleSheet("background-color: white;") + + self.image_label = QLabel() + self.image_label.setAlignment(Qt.AlignCenter) + self.image_label.setStyleSheet("background-color: white;") + + self.scroll_area.setWidget(self.image_label) + layout.addWidget(self.scroll_area, 1) + + status_layout = QHBoxLayout() + self.status_label = QLabel("就绪") + self.status_label.setStyleSheet("color: #666; font-size: 11px;") + status_layout.addWidget(self.status_label) + status_layout.addStretch() + layout.addLayout(status_layout) + + self.setLayout(layout) + + self.zoom_in_btn.clicked.connect(self.zoom_in) + self.zoom_out_btn.clicked.connect(self.zoom_out) + self.fit_btn.clicked.connect(self.fit_to_window) + self.original_btn.clicked.connect(self.original_size) + self.save_btn.clicked.connect(self.save_image) + + def load_image(self, image_path: str): + """加载并显示图像""" + if not image_path or not Path(image_path).exists(): + self.image_label.setText("图像不存在") + self.status_label.setText("图像加载失败") + return + + self.current_image_path = image_path + self.scale_factor = 1.0 + + pixmap = QPixmap(image_path) + if pixmap.isNull(): + self.image_label.setText("无法加载图像") + self.status_label.setText("图像格式不支持") + return + + self.original_pixmap = pixmap + self.fit_to_window() + + file_info = Path(image_path).stat() + size_mb = file_info.st_size / (1024 * 1024) + self.status_label.setText(f"{pixmap.width()}x{pixmap.height()} | {size_mb:.2f} MB | {Path(image_path).name} | 适应窗口") + + def update_image_display(self): + """更新图像显示 - 使用防抖避免频繁重绘卡顿""" + self._update_timer.stop() + self._pending_scale = self.scale_factor + self._update_timer.start(50) + + def _do_update_display(self): + """实际执行图像更新""" + if not hasattr(self, 'original_pixmap') or self.original_pixmap.isNull(): + return + + if self._pending_scale is None: + return + + if self._pending_scale > 2.0 or self._pending_scale < 0.5: + transform = Qt.FastTransformation + else: + transform = Qt.SmoothTransformation + + scaled_pixmap = self.original_pixmap.scaled( + int(self.original_pixmap.width() * self._pending_scale), + int(self.original_pixmap.height() * self._pending_scale), + Qt.KeepAspectRatio, + transform + ) + self.image_label.setPixmap(scaled_pixmap) + self._pending_scale = None + + def wheelEvent(self, event): + """鼠标滚轮缩放 - 实时响应""" + delta = event.angleDelta().y() + + if delta > 0: + if self.scale_factor < 5.0: + self.scale_factor = min(self.scale_factor * 1.1, 5.0) + self.update_image_display() + else: + if self.scale_factor > 0.1: + self.scale_factor = max(self.scale_factor / 1.1, 0.1) + self.update_image_display() + + event.accept() + + def zoom_in(self): + """放大""" + if self.scale_factor < 5.0: + self.scale_factor = min(self.scale_factor * 1.25, 5.0) + self.update_image_display() + + def zoom_out(self): + """缩小""" + if self.scale_factor > 0.1: + self.scale_factor = max(self.scale_factor / 1.25, 0.1) + self.update_image_display() + + def fit_to_window(self): + """适应窗口""" + if not hasattr(self, 'original_pixmap') or self.original_pixmap.isNull(): + return + + view_size = self.scroll_area.viewport().size() + img_size = self.original_pixmap.size() + + scale_w = view_size.width() / img_size.width() + scale_h = view_size.height() / img_size.height() + + self._fit_scale = min(scale_w, scale_h) + self.scale_factor = self._fit_scale + + self.update_image_display() + self.status_label.setText(f"适应窗口 | 缩放: {self.scale_factor:.1%}") + + def original_size(self): + """原始大小""" + self.scale_factor = 1.0 + self._fit_scale = None + self.update_image_display() + self.status_label.setText("原始大小 | 缩放: 100%") + + def save_image(self): + """保存图像""" + if not self.current_image_path: + return + + file_path, _ = QFileDialog.getSaveFileName( + self, "保存图像", Path(self.current_image_path).name, + "PNG图片 (*.png);;JPG图片 (*.jpg);;所有文件 (*.*)" + ) + + if file_path: + try: + import shutil + shutil.copy(self.current_image_path, file_path) + except Exception as e: + QMessageBox.critical(self, "错误", f"保存失败: {e}") \ No newline at end of file diff --git a/src/gui/core/test_modeling.py b/src/gui/core/test_modeling.py new file mode 100644 index 0000000..5f0415f --- /dev/null +++ b/src/gui/core/test_modeling.py @@ -0,0 +1,112 @@ +import time +import warnings +import numpy as np +import pandas as pd +from sklearn.model_selection import train_test_split +from sklearn.datasets import make_regression + +# 屏蔽烦人的 sklearn 警告 +warnings.filterwarnings("ignore") + +print("====== 🚀 启动 Mega Water 模型终极体检脚本 ======") + +# --------------------------------------------------------- +# 1. 完美复刻侦察报告中的 CSV 数据结构 +# 报告指出: 目标值(y)在左边,光谱特征(X)在右边 +# --------------------------------------------------------- +print("📦 正在生成符合系统结构的模拟测试数据...") +X_raw, y_raw = make_regression(n_samples=200, n_features=50, noise=0.1, random_state=42) + +# 模拟真实的 CSV 列名:前2列是水质参数,后面是 50 个光谱波段 +columns = ['Chla', 'SS'] + [f"Band_{i}" for i in range(50)] +# 拼装成一整张大表 +data = pd.DataFrame(np.hstack((y_raw.reshape(-1, 1), (y_raw * 0.5).reshape(-1, 1), X_raw)), columns=columns) + +# 按照 load_data_batch 的逻辑进行切割 +feature_start_index = 2 +X = data.iloc[:, feature_start_index:] # 截取光谱作为 X +y = data['Chla'] # 提取一个目标参数作为 y + +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) +print(f"✅ 数据切割完毕! 模拟波段数: {X.shape[1]}, 训练集样本数: {X_train.shape[0]}\n") + +# --------------------------------------------------------- +# 2. 严格装载侦察报告中的 16 个真实模型 +# --------------------------------------------------------- +print("🔍 正在加载底层真实配置库中的模型...") +from sklearn.svm import SVR +from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor, AdaBoostRegressor, ExtraTreesRegressor +from sklearn.neighbors import KNeighborsRegressor +from sklearn.linear_model import LinearRegression, Ridge, Lasso, ElasticNet +from sklearn.cross_decomposition import PLSRegression +from sklearn.tree import DecisionTreeRegressor +from sklearn.neural_network import MLPRegressor + +# 将参数压至极低,实施“降维打击”,确保 1 秒内跑完 +models = { + 'SVR': SVR(), + 'RF': RandomForestRegressor(n_estimators=10, max_depth=5, n_jobs=-1), + 'KNN': KNeighborsRegressor(), + 'LinearRegression': LinearRegression(), + 'Ridge': Ridge(), + 'Lasso': Lasso(), + 'ElasticNet': ElasticNet(), + 'PLS': PLSRegression(), + 'GradientBoosting': GradientBoostingRegressor(n_estimators=10, max_depth=5), + 'AdaBoost': AdaBoostRegressor(n_estimators=10), + 'DecisionTree': DecisionTreeRegressor(max_depth=5), + 'MLP': MLPRegressor(max_iter=50), + 'ExtraTrees': ExtraTreesRegressor(n_estimators=10, max_depth=5, n_jobs=-1) +} + +# 针对报告中发现的 3 个“被禁用”的第三方强力库,进行刺探测试 +try: + from xgboost import XGBRegressor + + models['XGBoost'] = XGBRegressor(n_estimators=10, max_depth=5, n_jobs=-1) +except ImportError: + models['XGBoost'] = "IMPORT_ERROR" + +try: + from lightgbm import LGBMRegressor + + models['LightGBM'] = LGBMRegressor(n_estimators=10, max_depth=5, n_jobs=-1) +except ImportError: + models['LightGBM'] = "IMPORT_ERROR" + +try: + from catboost import CatBoostRegressor + + models['CatBoost'] = CatBoostRegressor(iterations=10, depth=5, verbose=0) +except ImportError: + models['CatBoost'] = "IMPORT_ERROR" + +# --------------------------------------------------------- +# 3. 开始残酷的体检循环 +# --------------------------------------------------------- +print("\n================ 开始跑分测试 ================") +results = [] + +for name, model in models.items(): + if model == "IMPORT_ERROR": + results.append(f"⚠️ [缺库] {name:<16} : 环境未安装此库 (建议: pip install {name.lower()})") + continue + + start_time = time.time() + try: + # 极速拟合与评分 + model.fit(X_train, y_train) + score = model.score(X_test, y_test) + cost_time = time.time() - start_time + results.append(f"✅ [成功] {name:<16} : 耗时 {cost_time:.3f} 秒 (R2: {score:.2f})") + except Exception as e: + error_msg = str(e).split('\n')[0] + results.append(f"❌ [崩溃] {name:<16} : {error_msg}") + +# --------------------------------------------------------- +# 4. 打印最终体检报告 +# --------------------------------------------------------- +print("\n=============== 🏥 最终体检报告 ===============") +for res in results: + print(res) +print("===============================================") \ No newline at end of file diff --git a/src/gui/core/viz_thread.py b/src/gui/core/viz_thread.py new file mode 100644 index 0000000..566955d --- /dev/null +++ b/src/gui/core/viz_thread.py @@ -0,0 +1,346 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +可视化后台线程模块 + +包含 VisualizationWorkerThread 后台线程类和辅助函数。 +""" + +from pathlib import Path +from typing import Optional, List, Union + +from PyQt5.QtCore import QThread, pyqtSignal +import numpy as np + + +def _viz_infer_wavelength_start_column(df) -> Union[str, int]: + """推断光谱起始列(training_spectra 通常以波长数值为列名,未必含 UTM_Y)。""" + import pandas as pd + for i, col in enumerate(df.columns): + name = str(col).strip().lstrip("\ufeff") + try: + v = float(name) + except ValueError: + continue + if 200.0 <= v <= 3000.0: + return i + if "UTM_Y" in df.columns: + return "UTM_Y" + return 0 + + +class VisualizationWorkerThread(QThread): + """可视化耗时计算放入后台线程,并临时使用 Agg 后端,避免主界面未响应。""" + + finished_ok = pyqtSignal(object) + failed = pyqtSignal(str) + + def __init__(self, task: str, work_dir: str, extra: Optional[dict] = None): + super().__init__() + self.task = task + self.work_dir = str(work_dir) + self.extra = extra or {} + + def run(self): + mpl_prev = None + try: + import matplotlib + mpl_prev = matplotlib.get_backend() + except Exception: + pass + try: + import matplotlib.pyplot as plt + plt.switch_backend("Agg") + except Exception: + mpl_prev = None + try: + wp = Path(self.work_dir) + if self.task == "mask_glint": + from src.postprocessing.visualization_reports import WaterQualityVisualization + viz = WaterQualityVisualization(output_dir=str(wp / "14_visualization")) + preview_paths = viz.generate_glint_deglint_previews( + work_dir=str(wp), + output_subdir="glint_deglint_previews", + ) + cnt = len(preview_paths) if preview_paths else 0 + self.finished_ok.emit({"task": "mask_glint", "count": cnt, "preview_paths": preview_paths}) + elif self.task == "sampling_map": + hyperspectral_files = [] + deglint_dir = wp / "3_deglint" + if deglint_dir.exists(): + for ext in ("*.dat", "*.bsq", "*.tif", "*.tiff"): + hyperspectral_files.extend(list(deglint_dir.glob(ext))) + if not hyperspectral_files: + for ext in ("*.dat", "*.bsq", "*.tif", "*.tiff"): + hyperspectral_files.extend(list(wp.glob(f"**/{ext}"))) + if not hyperspectral_files: + self.failed.emit("未找到高光谱影像文件(.dat/.bsq/.tif)。") + return + hyperspectral_path = str(hyperspectral_files[0]) + csv_files = [] + processed_dir = wp / "4_processed_data" + if processed_dir.exists(): + csv_files = list(processed_dir.glob("*.csv")) + if not csv_files: + csv_files = ( + list(wp.glob("**/*sampling*.csv")) + + list(wp.glob("**/*point*.csv")) + + list(wp.glob("**/*.csv")) + ) + if not csv_files: + self.failed.emit("未找到采样点 CSV 文件。") + return + csv_path = str(csv_files[0]) + from src.postprocessing.point_map import SamplingPointMap + map_generator = SamplingPointMap( + output_dir=str(wp / "14_visualization" / "sampling_maps"), + fast_mode=True, + ) + map_path = map_generator.create_sampling_point_map( + hyperspectral_path=hyperspectral_path, + csv_path=csv_path, + point_color="red", + point_size=100, + point_alpha=0.9, + show_north_arrow=True, + show_scale_bar=True, + show_legend=True, + downsample=True, + dpi=180, + ) + self.finished_ok.emit( + { + "task": "sampling_map", + "map_path": map_path, + "hyperspectral_path": hyperspectral_path, + "csv_path": csv_path, + } + ) + elif self.task == "spectrum": + from src.postprocessing.visualization_reports import WaterQualityVisualization + viz = WaterQualityVisualization(output_dir=str(wp / "14_visualization")) + csv_file = self.extra.get("csv_path") + wl = self.extra.get("wavelength_start_column", "UTM_Y") + n_groups = int(self.extra.get("n_groups", 5)) + param_cols = self.extra.get("param_cols") or [] + if param_cols: + output_paths: List[str] = [] + err_lines: List[str] = [] + for param_col in param_cols: + try: + out = viz.plot_spectrum_by_parameter( + csv_path=str(csv_file), + parameter_column=param_col, + wavelength_start_column=wl, + n_groups=n_groups, + ) + output_paths.append(out) + except Exception as _ex: + err_lines.append(f"{param_col}: {_ex}") + if not output_paths: + self.failed.emit( + "所有参数列的光谱图均生成失败:\n" + "\n".join(err_lines[:20]) + ) + return + self.finished_ok.emit( + { + "task": "spectrum", + "output_paths": output_paths, + "errors": err_lines, + } + ) + else: + param_col = self.extra.get("param_col") + out = viz.plot_spectrum_by_parameter( + csv_path=str(csv_file), + parameter_column=param_col, + wavelength_start_column=wl, + n_groups=n_groups, + ) + self.finished_ok.emit( + {"task": "spectrum", "output_path": out, "param_col": param_col} + ) + elif self.task == "statistics": + from src.postprocessing.visualization_reports import WaterQualityVisualization + viz = WaterQualityVisualization(output_dir=str(wp / "14_visualization")) + csv_file = self.extra.get("csv_path") + param_cols = self.extra.get("param_cols") or [] + output_paths = viz.plot_statistical_charts( + csv_path=str(csv_file), + parameter_columns=param_cols, + ) + self.finished_ok.emit( + {"task": "statistics", "output_paths": output_paths} + ) + elif self.task == "scatter": + from src.core.water_quality_inversion_pipeline_GUI import WaterQualityInversionPipeline + + training_csv_path = (self.extra.get("training_csv_path") or "").strip() + models_dir = (self.extra.get("models_dir") or "").strip() + if not training_csv_path or not Path(training_csv_path).is_file(): + self.failed.emit("训练光谱 CSV 无效或不存在,请确认已选择步骤5输出的文件。") + return + if not models_dir or not Path(models_dir).is_dir(): + self.failed.emit("模型目录无效或不存在,请确认步骤6已生成 7_Supervised_Model_Training 下的参数子文件夹。") + return + pipeline = WaterQualityInversionPipeline(work_dir=str(wp)) + scatter_paths = pipeline.generate_model_scatter_plots( + training_csv_path=training_csv_path, + models_dir=models_dir, + ) + self.finished_ok.emit({"task": "scatter", "scatter_paths": scatter_paths or {}}) + elif self.task == "generate_all_selected": + from src.postprocessing.visualization_reports import WaterQualityVisualization + viz = WaterQualityVisualization(output_dir=str(wp / "14_visualization")) + parts = [] + + training_csv = wp / "5_training_spectra" / "training_spectra.csv" + + if self.extra.get("gen_scatter"): + if training_csv.is_file(): + models_dir = wp / "7_Supervised_Model_Training" + if models_dir.is_dir() and any(d.is_dir() for d in models_dir.iterdir()): + from src.core.water_quality_inversion_pipeline_GUI import WaterQualityInversionPipeline + pipeline = WaterQualityInversionPipeline(work_dir=str(wp)) + scatter_paths = pipeline.generate_model_scatter_plots( + training_csv_path=str(training_csv), + models_dir=str(models_dir), + ) + count = len(scatter_paths) if scatter_paths else 0 + parts.append(f"散点图: {count} 个") + else: + parts.append("散点图: 跳过(无模型目录)") + else: + parts.append("散点图: 跳过(无训练数据)") + + if self.extra.get("gen_spectrum"): + if training_csv.is_file(): + import pandas as pd + df = pd.read_csv(training_csv) + wl_col = _viz_infer_wavelength_start_column(df) + if isinstance(wl_col, str): + idx = int(df.columns.get_loc(wl_col)) + 1 + else: + idx = int(wl_col) + param_cols = [] + if idx > 0 and idx < len(df.columns): + param_cols = [ + c for c in df.columns[:idx] + if df[c].dtype.kind in 'iuf' and df[c].notna().sum() > 0 + ] + if param_cols: + spectrum_paths = [] + for param_col in param_cols: + try: + path = viz.plot_spectrum_by_parameter( + csv_path=str(training_csv), + parameter_column=param_col, + wavelength_start_column=wl_col, + n_groups=5, + ) + if path: + spectrum_paths.append(path) + except Exception as e: + print(f"生成光谱图失败 ({param_col}): {e}") + count = len(spectrum_paths) + parts.append(f"光谱图: {count} 个") + else: + parts.append("光谱图: 跳过(无可用参数列)") + else: + parts.append("光谱图: 跳过(无训练数据)") + + if self.extra.get("gen_boxplots"): + if training_csv.is_file(): + import pandas as pd + df = pd.read_csv(training_csv) + exclude_cols = ['longitude', 'latitude', 'lon', 'lat', 'x', 'y', 'coord', 'coordinate'] + param_cols = [ + c for c in df.select_dtypes(include=[np.number]).columns + if not any(exc in c.lower() for exc in exclude_cols) + ] + wl = _viz_infer_wavelength_start_column(df) + if isinstance(wl, str): + idx = int(df.columns.get_loc(wl)) + 1 + else: + idx = int(wl) + if 0 < idx < len(df.columns): + meta_set = set(df.columns[:idx]) + param_cols = [c for c in param_cols if c in meta_set] + + if param_cols: + output_dict = viz.plot_statistical_charts( + csv_path=str(training_csv), + parameter_columns=param_cols, + ) + count = len([v for v in output_dict.values() if v]) if output_dict else 0 + parts.append(f"统计图: {count} 个") + else: + parts.append("统计图: 跳过(无可用水质参数列)") + else: + parts.append("统计图: 跳过(无训练数据)") + + if self.extra.get("gen_mask_glint"): + preview_paths = viz.generate_glint_deglint_previews( + work_dir=str(wp), + output_subdir="glint_deglint_previews", + ) + parts.append(f"掩膜/耀斑预览: {len(preview_paths) if preview_paths else 0} 个") + + if self.extra.get("gen_sampling_map"): + hyperspectral_files = [] + deglint_dir = wp / "3_deglint" + if deglint_dir.exists(): + for ext in ("*.dat", "*.bsq", "*.tif", "*.tiff"): + hyperspectral_files.extend(list(deglint_dir.glob(ext))) + if not hyperspectral_files: + for ext in ("*.dat", "*.bsq", "*.tif", "*.tiff"): + hyperspectral_files.extend(list(wp.glob(f"**/{ext}"))) + if hyperspectral_files: + hyperspectral_path = str(hyperspectral_files[0]) + csv_files = [] + processed_dir = wp / "4_processed_data" + if processed_dir.exists(): + csv_files = list(processed_dir.glob("*.csv")) + if not csv_files: + csv_files = ( + list(wp.glob("**/*sampling*.csv")) + + list(wp.glob("**/*point*.csv")) + + list(wp.glob("**/*.csv")) + ) + if csv_files: + csv_path = str(csv_files[0]) + from src.postprocessing.point_map import SamplingPointMap + map_generator = SamplingPointMap( + output_dir=str(wp / "14_visualization" / "sampling_maps"), + fast_mode=True, + ) + map_path = map_generator.create_sampling_point_map( + hyperspectral_path=hyperspectral_path, + csv_path=csv_path, + point_color="red", + point_size=100, + point_alpha=0.9, + show_north_arrow=True, + show_scale_bar=True, + show_legend=True, + downsample=True, + dpi=180, + ) + parts.append(f"采样点图: {Path(map_path).name}") + else: + parts.append("采样点图: 跳过(无CSV)") + else: + parts.append("采样点图: 跳过(无影像)") + self.finished_ok.emit({"task": "generate_all_selected", "parts": parts}) + else: + self.failed.emit(f"未知可视化任务: {self.task}") + except Exception as e: + import traceback + self.failed.emit(f"{e}\n{traceback.format_exc()}") + finally: + if mpl_prev: + try: + import matplotlib.pyplot as plt + plt.switch_backend(mpl_prev) + except Exception: + pass \ No newline at end of file diff --git a/src/gui/crash_dump.txt b/src/gui/crash_dump.txt new file mode 100644 index 0000000..d306022 --- /dev/null +++ b/src/gui/crash_dump.txt @@ -0,0 +1,93 @@ + +============================================================ +[2026-05-12 11:14:51] +Traceback (most recent call last): + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\gui\water_quality_gui.py", line 130, in + from src.gui.panels.step9_panel import Step9Panel + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\gui\panels\step9_panel.py", line 24, in + from src.core.water_quality_inversion_pipeline_GUI import WaterQualityInversionPipeline + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\core\water_quality_inversion_pipeline_GUI.py", line 45, in + from src.preprocessing.process_water_quality_data import process_water_quality_data + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\preprocessing\process_water_quality_data.py", line 9, in + from scipy import stats + File "", line 1412, in _handle_fromlist + File "D:\111\changyongruanjian\anconda\envs\WQ_GUI\Lib\site-packages\scipy\__init__.py", line 143, in __getattr__ + return _importlib.import_module(f'scipy.{name}') + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\111\changyongruanjian\anconda\envs\WQ_GUI\Lib\importlib\__init__.py", line 90, in import_module + return _bootstrap._gcd_import(name[level:], package, level) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\111\changyongruanjian\anconda\envs\WQ_GUI\Lib\site-packages\scipy\stats\__init__.py", line 632, in + from ._multicomp import * + File "D:\111\changyongruanjian\anconda\envs\WQ_GUI\Lib\site-packages\scipy\stats\_multicomp.py", line 11, in + from scipy.stats._qmc import check_random_state + File "D:\111\changyongruanjian\anconda\envs\WQ_GUI\Lib\site-packages\scipy\stats\_qmc.py", line 26, in + from scipy.sparse.csgraph import minimum_spanning_tree + File "D:\111\changyongruanjian\anconda\envs\WQ_GUI\Lib\site-packages\scipy\sparse\csgraph\__init__.py", line 188, in + from ._shortest_path import ( + File "scipy/sparse/csgraph/_shortest_path.pyx", line 21, in init scipy.sparse.csgraph._shortest_path + File "", line 1349, in _find_and_load +KeyboardInterrupt + +============================================================ +[2026-05-12 11:57:28] +Traceback (most recent call last): + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\gui\water_quality_gui.py", line 3123, in + main() + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\gui\water_quality_gui.py", line 3093, in main + _dialog.exec_() +KeyboardInterrupt + +============================================================ +[2026-05-28 15:45:11] +Traceback (most recent call last): + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\gui\water_quality_gui.py", line 3123, in + main() + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\gui\water_quality_gui.py", line 3097, in main + window = WaterQualityGUI() + ^^^^^^^^^^^^^^^^^ + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\gui\water_quality_gui.py", line 1352, in __init__ + self.init_ui() + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\gui\water_quality_gui.py", line 1586, in init_ui + self.create_content_area() + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\gui\water_quality_gui.py", line 1943, in create_content_area + self.step2_panel = Step2Panel() + ^^^^^^^^^^^^ +TypeError: Step2Panel.__init__() missing 1 required positional argument: 'session' + +============================================================ +[2026-05-28 15:45:19] +Traceback (most recent call last): + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\gui\water_quality_gui.py", line 3123, in + main() + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\gui\water_quality_gui.py", line 3097, in main + window = WaterQualityGUI() + ^^^^^^^^^^^^^^^^^ + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\gui\water_quality_gui.py", line 1352, in __init__ + self.init_ui() + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\gui\water_quality_gui.py", line 1586, in init_ui + self.create_content_area() + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\gui\water_quality_gui.py", line 1943, in create_content_area + self.step2_panel = Step2Panel() + ^^^^^^^^^^^^ +TypeError: Step2Panel.__init__() missing 1 required positional argument: 'session' + +============================================================ +[2026-05-28 16:00:53] +Traceback (most recent call last): + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\gui\water_quality_gui.py", line 2149, in on_step_changed + self.auto_populate_step_inputs(item_data) + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\gui\water_quality_gui.py", line 2362, in auto_populate_step_inputs + if step_id not in self.step_dependencies: + ^^^^^^^^^^^^^^^^^^^^^^ +AttributeError: 'WaterQualityGUI' object has no attribute 'step_dependencies'. Did you mean: '_init_step_dependencies'? + +============================================================ +[2026-06-03 13:56:59] +Traceback (most recent call last): + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\gui\water_quality_gui.py", line 3354, in + main() + File "D:\111\office\ZHLduijie\1.WQ\WQ_GUI\src\gui\water_quality_gui.py", line 3331, in main + sys.exit(app.exec_()) + ^^^^^^^^^^^ +KeyboardInterrupt diff --git a/src/gui/panels/step3_panel.py b/src/gui/panels/step3_panel.py index c1eb23b..200c259 100644 --- a/src/gui/panels/step3_panel.py +++ b/src/gui/panels/step3_panel.py @@ -325,7 +325,7 @@ class Step3Panel(QWidget): } water_mask_path = self.water_mask_file.get_path() if water_mask_path: - config['water_mask'] = water_mask_path + config['water_mask_path'] = water_mask_path output_path = self.output_file.get_path() if output_path: config['output_path'] = output_path @@ -366,8 +366,8 @@ class Step3Panel(QWidget): """设置配置""" if 'img_path' in config: self.img_file.set_path(config['img_path']) - if 'water_mask' in config: - self.water_mask_file.set_path(config['water_mask']) + if 'water_mask_path' in config: + self.water_mask_file.set_path(config['water_mask_path']) if 'output_path' in config: self.output_file.set_path(config['output_path']) if 'reference_csv' in config: diff --git a/src/gui/panels/step5_5_panel.py b/src/gui/panels/step5_5_panel.py index f184890..6a33037 100644 --- a/src/gui/panels/step5_5_panel.py +++ b/src/gui/panels/step5_5_panel.py @@ -187,7 +187,7 @@ class Step5_5Panel(QWidget): def get_config(self): selected = [n for n, cb in self.index_checkboxes.items() if cb.isChecked()] return { - 'training_spectra_path': self.training_data_widget.get_path(), + 'training_csv_path': self.training_data_widget.get_path(), 'formula_csv_file': self.builtin_formula_path, 'formula_names': selected, 'output_file': self.output_file_widget.get_path(), @@ -195,7 +195,7 @@ class Step5_5Panel(QWidget): } def set_config(self, config): - if 'training_spectra_path' in config: self.training_data_widget.set_path(config['training_spectra_path']) + if 'training_csv_path' in config: self.training_data_widget.set_path(config['training_csv_path']) if 'formula_names' in config: sel = set(config['formula_names']) for n, cb in self.index_checkboxes.items(): cb.setChecked(n in sel) @@ -217,7 +217,7 @@ class Step5_5Panel(QWidget): def run_step(self): config = self.get_config() - if not config['training_spectra_path']: + if not config['training_csv_path']: QMessageBox.warning(self, "提示", "请先选择输入数据") return parent = self.parent() diff --git a/src/gui/panels/step5_panel.py b/src/gui/panels/step5_panel.py index 5193471..edc1e94 100644 --- a/src/gui/panels/step5_panel.py +++ b/src/gui/panels/step5_panel.py @@ -124,7 +124,7 @@ class Step5Panel(QWidget): glint_mask_path = self.glint_mask_file.get_path() if glint_mask_path: config['glint_mask_path'] = glint_mask_path - # 注意:step5_extract_training_spectra 不接受 output_path / training_spectra_path + # 注意:step5_extract_training_spectra 不接受 output_path / training_csv_path # 参数,输出路径由 pipeline 内部根据 training_spectra_dir 自动生成。 return config diff --git a/src/gui/panels/step6_panel.py b/src/gui/panels/step6_panel.py index 729697e..c35121f 100644 --- a/src/gui/panels/step6_panel.py +++ b/src/gui/panels/step6_panel.py @@ -363,7 +363,7 @@ class Step6Panel(QWidget): # 回退:从 Step5 的 config 字典中查找可能的键名 step5_cfg = main_window.step5_panel.get_config() step5_csv = ( - step5_cfg.get('training_spectra_path') + step5_cfg.get('training_csv_path') or step5_cfg.get('output_file') or step5_cfg.get('csv_path') or step5_cfg.get('output_csv') diff --git a/src/gui/scaler_params.pkl b/src/gui/scaler_params.pkl new file mode 100644 index 0000000000000000000000000000000000000000..04943c54b940ca26ad7898cb1a38d90defce7e59 GIT binary patch literal 2847 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 Ydns{Dfsn=H%HM6)1P6kZG?qsA3ot$9vj6}9 literal 0 HcmV?d00001 diff --git a/src/gui/water_quality_gui.py b/src/gui/water_quality_gui.py index 02a8057..ae03a99 100644 --- a/src/gui/water_quality_gui.py +++ b/src/gui/water_quality_gui.py @@ -1432,7 +1432,7 @@ class WaterQualityGUI(QMainWindow): 'glint_mask_path': ('step2', 'glint_mask', 'glint_mask_file') # 步骤5可选耀斑掩膜 }, 'step5_5': { - 'training_spectra_path': ('step5', 'training_spectra', 'output_file') # 步骤5.5需要步骤5输出的训练光谱 + 'training_csv_path': ('step5', 'training_spectra', 'output_file') # 步骤5.5需要步骤5输出的训练光谱 }, 'step6': { 'csv_path': ('step5', 'training_spectra', 'csv_file') # 步骤6需要训练光谱数据

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