From 89ba3418ef834f028f712ad2818b9d2fb4a3facf Mon Sep 17 00:00:00 2001 From: cyning Date: Sun, 31 May 2026 22:04:13 +0800 Subject: [PATCH 1/6] =?UTF-8?q?docs(task):=20=E8=8D=89=E6=A1=88=20=C2=A75-?= =?UTF-8?q?3=20RAG=20=E4=BD=8E=E7=BD=AE=E4=BF=A1=E9=A2=84=E8=A7=88?= =?UTF-8?q?=E5=85=A8=E6=A0=88=20task=EF=BC=88=E5=90=AB=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=20=C2=A76=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 明确 Ink 模块、FE 验收、Harness 跨仓节奏与 5-2 差异;更新 RECENT/backlog/母单 5-3 指针。 Co-authored-by: Cursor --- docs/tasks/RECENT_TASK_SCHEDULE.md | 3 +- docs/tasks/_views/backlog.md | 3 +- ..._low_confidence_plan_preview_confirm_v1.md | 2 +- .../task_chatbi_v3_lowconf_rag_preview_v1.md | 290 ++++++++++++++++++ 4 files changed, 295 insertions(+), 3 deletions(-) create mode 100644 docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md diff --git a/docs/tasks/RECENT_TASK_SCHEDULE.md b/docs/tasks/RECENT_TASK_SCHEDULE.md index 9109a912..333af17d 100644 --- a/docs/tasks/RECENT_TASK_SCHEDULE.md +++ b/docs/tasks/RECENT_TASK_SCHEDULE.md @@ -117,7 +117,7 @@ | --------------------- | ---------------------------------------------------------------------------------------------- | | **本表角色** | **最近任务安排真值** | | **排期 Wiki hub** | [`concepts/task-schedule-ink-backend.md`](../coding_wiki/concepts/task-schedule-ink-backend.md) · **不**替代本表 | -| **active/** | **6** 个 task + 1 附属 AGENT_PROMPT | +| **active/** | **7** 个 task + 1 附属 AGENT_PROMPT | | **done/** | **65+** 个 `.md`(含 P0 OpenSpec×TDD Loop 母+3 子) | | **_views/done.md** | 随关账同步(含 P0 Loop 四单 · 2026-05-30) | | **Harness 改进** | **done**(P0+P1 收口) | @@ -136,6 +136,7 @@ | 2 | `task_rag_graphrag_pilot_explore_v1.md` | (见 task 头) | GraphRAG 探索 | 按需 | | 3 | `task_chatbi_v3_planning_after_resume_v1.md` | `planning` | V3 统筹索引 | P4 | | 4 | `task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md` | `backlog` | 低置信 §5.1 | P2 | +| 4b | `task_chatbi_v3_lowconf_rag_preview_v1.md` | `draft` | 低置信 §5-3 **RAG 全栈** | P2 · 先 Ink Harness | | 5 | `task_chatbi_v3_debt_from_v2_multiturn_v1.md` | `backlog` | V2 多轮欠债母单 | P2 | | 6 | `task_chatbi_v3_intent_classification_debt_v1.md` | `backlog` | Intent vNext | P4 | | 7 | `task_chatbi_v3_low_confidence_plan_preview_confirm_v1_AGENT_PROMPT.md` | 附属 | Agent Prompt | — | diff --git a/docs/tasks/_views/backlog.md b/docs/tasks/_views/backlog.md index 370367fe..02f82366 100644 --- a/docs/tasks/_views/backlog.md +++ b/docs/tasks/_views/backlog.md @@ -10,7 +10,8 @@ | [`task_rag_graphrag_pilot_explore_v1.md`](../active/task_rag_graphrag_pilot_explore_v1.md) | 博客 GraphRAG 试点(小范围 / 可选独立页) | 2026-05-18 | | [`task_chatbi_v3_debt_from_v2_multiturn_v1.md`](../active/task_chatbi_v3_debt_from_v2_multiturn_v1.md) | V2 多轮 / Text2SQL 值域欠债 | — | | [`task_chatbi_v3_intent_classification_debt_v1.md`](../active/task_chatbi_v3_intent_classification_debt_v1.md) | 意图识别欠债(Intent vNext) | 2026-05-13 | -| [`task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md`](../active/task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md) | 低置信方案预览/确认(**§5.1 整单**仍 backlog;§5.0 首包已验收) | — | +| [`task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md`](../active/task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md) | 低置信方案预览/确认(**§5.1 整单**仍 backlog;§5.0/5-2 已验收) | — | +| [`task_chatbi_v3_lowconf_rag_preview_v1.md`](../active/task_chatbi_v3_lowconf_rag_preview_v1.md) | §5-3 RAG 低置信预览+token(**全栈** · draft) | 2026-05-31 | ## 相关但未标 backlog(排期参考) diff --git a/docs/tasks/active/task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md b/docs/tasks/active/task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md index 158cf6fc..3cbd7f7d 100644 --- a/docs/tasks/active/task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md +++ b/docs/tasks/active/task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md @@ -137,7 +137,7 @@ python tools/tech_graph_contract_check.py |---|----------|------| | **5-1** | 方案 B **完整表述**:无矛盾或 `held` / `plan_only` 等显式字段 + 前后端可读 | **部分**:首包已消除「`final_mode: rag` 且无 RAG」;**未做** `held` 等新键(与 manifest **另 PR**)。**子项 §5-1a(首包)**:澄清短路下 `router.decision.final_mode` 与意图候选一致 — **已满足(2026-05-13)**。 | | **5-2** | Text2SQL 低置信:SQL 草案预览 + 只读闸 + 确认后一次跑通(含 deny) | **已验收**(2026-05-31 · 子 task [`task_chatbi_v3_lowconf_sql_preview_v1.md`](../done/task_chatbi_v3_lowconf_sql_preview_v1.md) · 分支 `task/chatbi-v3-lowconf-sql-preview` · reinspect [`reinspect_chatbi-v3-lowconf-sql-preview_20260531_v1.md`](../tasks/reinspect_results/reinspect_chatbi-v3-lowconf-sql-preview_20260531_v1.md)) | -| **5-3** | RAG 低置信:检索方案级预览 + 确认后全链路 | **未做** | +| **5-3** | RAG 低置信:检索方案级预览 + 确认后全链路 | **进行中**(子 task [`task_chatbi_v3_lowconf_rag_preview_v1.md`](task_chatbi_v3_lowconf_rag_preview_v1.md) · 全栈 · 先 Ink Harness 再联调) | | **5-4** | 门控:`user_confirmed` / token、`plan_id`、`gate_bypass_reason` 日志 | **未做** | | **5-5** | pytest + contract(**全特性**) | **部分**:当前仅覆盖方案 B + 既有 Agent 用例 | | **5-6** | `_tech_graph` 双轨增量(若流程结构变化) | **未要求**(首包未改流程图节点语义;可选后续在 `11_flow_*` 补一句) | diff --git a/docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md b/docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md new file mode 100644 index 00000000..d9a7e6e1 --- /dev/null +++ b/docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md @@ -0,0 +1,290 @@ +# Task:ChatBI V3 — 低置信 RAG 预览 + 确认放行(§5-3 · 全栈) + +> **状态**:`draft`(待 Harness 跨仓流程补齐后人拍板开跑) +> **schedule_ref**:RECENT §1.1 #4 子项 · 母单 §5.1 **5-3** +> **登记日期**:2026-05-31 +> **父 task**:[`task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md`](task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md)(§5.2 已验收 · **5-3 本单**) +> **需求真值(L1)**:[`docs/spec/v3-agent/SPEC-ChatBI-V3-LowConfidence-Plan-Confirm.md`](../spec/v3-agent/SPEC-ChatBI-V3-LowConfidence-Plan-Confirm.md) **§2 RAG 预览**、**§4 确认令牌** +> **前置(done)**:[`task_chatbi_v3_lowconf_sql_preview_v1.md`](../done/task_chatbi_v3_lowconf_sql_preview_v1.md)(§5-2 · 同机制 Text2SQL)· [`task_chatbi_v3_multiturn_clarify_semantics_4_3_v1.md`](../done/task_chatbi_v3_multiturn_clarify_semantics_4_3_v1.md) +> **E2E 对照样本(5-2)**:[`docs/diary/samples/chatbi-v3-lowconf-sql-preview/`](../diary/samples/chatbi-v3-lowconf-sql-preview/) + +--- + +## Harness 元信息(执行 Agent 必读) + +| 字段 | 值 | +|------|-----| +| **task_slug** | `chatbi-v3-lowconf-rag-preview` | +| **test_strategy** | `required` | +| **freeze_id** | `CHATBI-LOWCONF-RAG-PREVIEW@2026-05-31`(草案 · 开跑前可钉 commit) | +| **semi_auto** | `true` | +| **audit_profile** | `full`(涉契约扩展 + 跨仓) | +| **experience_capture** | `recommended`(全栈关账后建议升 `required`) | +| **kpi_rubric** | `KPI_RUBRIC_v1_2` | +| **kpi_aggregator** | `00`(建议 · 与 5-2 同编排) | +| **git_branch** | `task/chatbi-v3-lowconf-rag-preview` | + +### 跨仓与 Harness 节奏(硬 · 先于 30 帽) + +> **人拍板**:先补齐 **Ink 侧 Harness 落盘/帽链约定**(工作区或 `ai-ink-brain` 仓),再与本后端 task **同火车或双 PR 互锁合并**;**禁止**假定「仅后端关账 = 5-3 全栈验收」。 + +| 序 | 动作 | 落点 | +|----|------|------| +| 0 | 冻结 **契约增量**(`agent.plan.preview` RAG payload 最小键) | 本仓 `_contract_manifest.json` + Ink manifest 消费约定 | +| 1 | **Ink**:新建/更新前端 task(见 §6)+ Harness invoke 路径约定 | `ai-ink-brain/content/tasks/active/task_chatbi_v3_lowconf_rag_preview_frontend_v1.md`(建议名) | +| 2 | **本仓**:22→30→40→50→CLOSE(`required` + reinspect) | `docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/` | +| 3 | 联调烟测 + diary 样本(两轮 Timeline + 截图) | 本仓 `docs/diary/samples/chatbi-v3-lowconf-rag-preview/`(关账时建) | + +**Open Folder**:后端实现与 Harness 落盘 → **本仓**;前端实现 → **`ai-ink-brain/`**(见工作区 `Projects/AGENTS.md` §2)。 + +### 人工闸 `human_gate` + +| human_gate_id | status | blocks_hats | 说明 | +|---------------|--------|-------------|------| +| HG-TASK-DRAFT | pending | 22-R1,30 | 含 §6 前端范围人扫 | +| HG-AUDIT-R1 | pending | 30 | 22 R1 后;须核对契约与 Ink task 对齐 | +| HG-REINSPECT | pending | done | 50 后、合并前;**双仓** diff 须 50 书面覆盖 | + +--- + +## 0. 现网基线(re-baseline · 2026-05-31 · `main`) + +> **勿**假定 RAG 已与 Text2SQL 对称。5-2 仅覆盖 **`intent.tool == text2sql_query"`** 澄清预览链。 + +| 项 | 现网(摘要) | 5-3 缺口 | +|----|--------------|----------| +| 澄清短路 | `api/agent.py` · `_clarify_eligible` **仅 text2sql_query** | 须扩展 **rag_search** 低置信路径 | +| `agent.plan.preview` | 已存在 type;payload 以 **`sql_draft`** 为主 | 须增加 **RAG 方案级** 字段(见 SPEC §2) | +| `plan_execution_token` | `chatbi_plan_token.py` · purpose=`clarify_text2sql_once` | 须扩展校验/签发覆盖 **RAG 放行**(或统一 purpose 名) | +| 契约 | `payload_min_keys`: `plan_id`,`tool`,`sql_draft`,… | **MODIFIED** 增量键(与 Ink 同 PR) | +| Ink UI | `UnifiedChatPageClient` · 卡片「预览 **SQL**」· 仅展示 `sql_draft` | **须**按 `tool`/RAG 字段分支展示与文案 | +| 5-2 样本 | SQL 两轮 E2E 已归档 | RAG 须 **新建** 对照样本目录 | + +--- + +## 1. 背景与目标 + +SPEC 要求:低置信 **`rag_search`** 场景下,用户在执行全链路 RAG 前可见 **检索方案级预览**(rewrite query、计划条数/过滤域或标题级摘要等),并通过与 5-2 一致的 **`plan_execution_token`** 显式确认后再执行。 + +**完成态(全栈)**: + +- 后端:低置信 RAG 澄清 → **`agent.plan.preview`**(`tool: rag_search` + RAG 承诺键)→ **`agent.clarify`**;合法 token 续跑 → 跳过澄清并执行 **RAG 全链路**(含 `rag.sources` 等)。 +- 契约:`tech_graph_contract_check` 通过;**无**未承诺键被前端强依赖。 +- 前端:Timeline + 确认卡片可审阅 RAG 方案;**「按预览执行」** 携带 token + 同 `query`/`session_id`。 +- 母单 §5.1 **5-3** → **已验收**;Harness + diary 标准样本落盘。 + +--- + +## 2. 范围 + +### 2.1 后端(本仓 `ai-ink-brain-api-python`) + +- [ ] **G1 RAG 澄清预览**:低置信 + `rag_search` 候选时发出 **`agent.plan.preview`**(非仅 text2sql) +- [ ] **G2 RAG 预览载荷**:payload 含 SPEC 对齐字段(至少:**改写后检索 query** 或等价、`tool`、**warnings**、**plan_execution_token**、**expires_in_sec**;轻量预检索摘要若实现须文档化) +- [ ] **G3 token 放行 RAG**:合法 token 续跑 → `agent.think` 含放行语义 → 执行 **rag_search**(非误走 text2sql);无效 token **deny**(pytest) +- [ ] **G4 预览失败**:RAG 预览子路径失败时无 token,clarify 含失败说明(对齐 5-2 F3 模式) +- [ ] **G5 JSON + SSE parity**:与 5-2 同级;**禁止** 22 defer SSE +- [ ] **G6 契约**:更新 `_contract_manifest.json` + `tech_graph_contract_check`;必要时 `SPEC-ChatBI-V2-Events` 指针/§3.2.2 增补 +- [ ] **G7 pytest**:`test_strategy: required` · 先红后绿;触达契约必跑 contract check + +### 2.2 前端(Ink `ai-ink-brain` · 本 task **验收项**,非本仓 commit) + +> 详细范围写在 **§6 前端 task**;本仓关账 **阻塞**于 FE 烟测通过或书面 defer(须人签)。 + +- [ ] **FE-1 消费 `agent.plan.preview`**:`tool === rag_search`(或 manifest 约定值)时解析 RAG 字段,**不**仅渲染 `sql_draft` +- [ ] **FE-2 确认卡片 UX**:文案/标题由「预览 SQL」泛化为按 **tool 分支**(RAG 方案摘要 + TTL);保留「按预览执行」「取消(丢弃令牌)」 +- [ ] **FE-3 续跑 body**:`POST …/unified/chat/stream` 携带 **`plan_execution_token`**;**禁止**用户改问句仍沿用旧 token(与 5-2 一致) +- [ ] **FE-4 Timeline**:`ChainEventCard` / 执行链对 RAG preview 可读(非空白/非仅 SQL 区块) +- [ ] **FE-5 烟测留证**:两轮 Timeline 导出 + 截图 → 建议 `ai-ink-brain` 或本仓 diary **互链**(见 §6) + +### 2.3 文档与 Harness(本仓) + +- [ ] **G8 母单同步**:§5.1 **5-3** → **已验收** +- [ ] **G9 SPEC §6**:低置信 **RAG** 预览项勾选 +- [ ] **G10 Harness**:`invokes/by-task/chatbi-v3-lowconf-rag-preview/` · review R1 · `reinspect_results/reinspect_chatbi-v3-lowconf-rag-preview_*` · **`### KPI(00)`** + +## 3. 非范围 + +- **5-4** 全量审计字段 / `gate_bypass_reason` 产品化(另 task) +- **5-1** `held` / `plan_only` 新 manifest 键(另 PR;可与 5-3 协调但不阻塞) +- Intent vNext 多候选裁判 +- 新增独立 `chain.type`(优先 **扩展** `agent.plan.preview` payload) +- GraphRAG 试点 +- 「确认后必须执行预览 SQL 草案」语义(5-2 已说明 token 仅跳过澄清;RAG 同理,**不**保证预览与执行逐字一致,须在 22 留痕) + +--- + +## 4. 行为变更(Delta) + +### ADDED + +- **Requirement**:低置信 RAG 澄清须下发可审阅的检索方案预览。 + - **Scenario**:`lowconf-rag-plan-preview` — GIVEN `CHATBI_V3_LOW_CONFIDENCE_CLARIFY=1` 且 `CHATBI_V3_PLAN_PREVIEW_CONFIRM=1` 且 intent 为低置信 `rag_search` WHEN Unified Chat THEN 含 `agent.plan.preview`(`tool=rag_search`)且含 `plan_execution_token` 先于 `agent.clarify`。 + +- **Requirement**:用户确认后 RAG 全链路可执行。 + - **Scenario**:`lowconf-rag-token-bypass` — GIVEN 合法 `plan_execution_token` 与同 `query` WHEN 续跑 THEN 无 `agent.clarify` 且出现 RAG 执行观测(如 `rag.sources` 或 tool 成功路径)。 + +- **Requirement**:前端可区分 RAG 与 Text2SQL 预览展示。 + - **Scenario**:`fe-rag-preview-card` — GIVEN SSE 含 RAG `agent.plan.preview` WHEN 用户查看确认区 THEN 可见 RAG 方案字段(非仅「无 sql_draft」占位)。 + +### MODIFIED + +- **Requirement**:`agent.plan.preview` 契约最小键集(Previously: 以 `sql_draft` 为中心) + - **Scenario**:`contract-rag-preview-keys` — GIVEN 后端发 RAG preview WHEN `tech_graph_contract_check` THEN 通过且 Ink 仅消费 manifest 承诺键。 + +- **Requirement**:母单 §5.1 **5-3** 状态(Previously: 未做) + - **Scenario**:`parent-task-5-3-closed` — GIVEN 全栈验收 WHEN 读母单 THEN **5-3** 已验收并链本 task + PR。 + +### REMOVED + +无 + +--- + +## 5. 依赖与引用 + +| 依赖项 | 路径 | +|--------|------| +| SPEC | [`SPEC-ChatBI-V3-LowConfidence-Plan-Confirm.md`](../spec/v3-agent/SPEC-ChatBI-V3-LowConfidence-Plan-Confirm.md) | +| 母单 | [`task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md`](task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md) | +| 5-2 子 task(done) | [`task_chatbi_v3_lowconf_sql_preview_v1.md`](../done/task_chatbi_v3_lowconf_sql_preview_v1.md) | +| 5-2 E2E 样本 | [`docs/diary/samples/chatbi-v3-lowconf-sql-preview/`](../diary/samples/chatbi-v3-lowconf-sql-preview/) | +| PROJECT_CONFIG | [`docs/meta/PROJECT_CONFIG_AI_INK_BRAIN_API_PYTHON.md`](../meta/PROJECT_CONFIG_AI_INK_BRAIN_API_PYTHON.md) §C | +| 契约 | `docs/_tech_graph/_contract_manifest.json` | +| 代码入口 | `api/agent.py`、`api/chatbi_plan_token.py`、`api/unified_chat.py` | +| KPI / Harness | [`KPI_RUBRIC_v1_2.md`](../harness/guides/KPI_RUBRIC_v1_2.md) · [`SKILL-harness-task.md`](../tasks/skills/SKILL-harness-task.md) | +| 工作区调度 | [`Projects/AGENTS.md`](../../../../Projects/AGENTS.md) §2 | + +--- + +## 6. 前端涉及点(Ink · 执行真值) + +> **子 task 建议落盘**(由人/Agent 在 **`ai-ink-brain`** 创建,本单仅索引) +> 建议路径:`ai-ink-brain/content/tasks/active/task_chatbi_v3_lowconf_rag_preview_frontend_v1.md` + +### 6.1 须改模块(参考 5-2 已 done 前端 task) + +| 模块 | 路径(Ink) | 变更要点 | +|------|-------------|----------| +| 主会话 | `components/unified-chat/UnifiedChatPageClient.tsx` | 解析 preview:`tool`/`rag_*` 字段;`pendingPlanConfirm` 状态;按 tool 切换卡片文案;续跑 `plan_execution_token` | +| 事件卡片 | `components/chain-chat/ChainEventCard.tsx` | `agent.plan.preview` 分支:RAG 展示块(非仅 `sql_draft` 围栏) | +| 类型 | `components/chain-chat/types.ts` | 扩展 `AgentPlanPreviewPayload`(或 discriminated union by `tool`) | +| 契约消费 | `docs/_tech_graph/_contract_manifest.json`(Ink 侧镜像/指针) | 与后端 **同 PR 或紧耦合 PR** 对齐承诺键 | +| 图谱(可选) | `docs/_tech_graph/11_flow_api*.md` | RAG 低置信预览 + token 续跑一句 | + +### 6.2 前端验收(关账阻塞项) + +| # | 项 | 口径 | +|---|-----|------| +| F1 | 低置信 RAG 问句 | 触发 `agent.plan.preview` + `agent.clarify`;`router.decision` 不出现 5-0 前「假 rag」回归 | +| F2 | 确认卡片 | 可见 RAG 方案摘要(非空);TTL 倒计时;**按预览执行** / **取消** 可用 | +| F3 | 第二轮 | Network body 含 `plan_execution_token`;`query` 与首轮一致;出现 RAG 执行帧(如 `rag.sources`) | +| F4 | 改问句丢弃 token | 输入框改问句发送后不使用旧 token(与 5-2 一致) | +| F5 | 留证 | Timeline JSON ×2 + 截图;路径写入前端 task §实现备忘并 **链** 本仓 diary 样本 | + +### 6.3 与 5-2 前端差异(避免复制粘贴误判) + +| 维度 | 5-2(已做) | 5-3(本单) | +|------|------------|------------| +| 卡片标题 | 「低置信 · 预览 **SQL** 已就绪」 | **RAG 方案** / 按 `tool` 分支 | +| 主展示字段 | `sql_draft` | **rewrite query**、计划条数、标题级 hits 等(以实现拍板为准) | +| 执行第二轮 | Text2SQL 全链路 | **RAG** 全链路 | +| 后端澄清条件 | `text2sql_query` | **`rag_search`** | + +### 6.4 Harness(Ink · 待流程更新) + +- 在 **Ink 侧** 明确:`content/tasks/` task 的 invoke/review 落点(若与后端 `docs/harness/` 对称或工作区索引)。 +- 本后端 task 关账时,22/50 审查 md 须含 **「前端 task 路径 + FE-1~F5 勾选」** 或 **defer 理由(人签)**。 + +--- + +## 失败路径 + +| # | Scenario ID | 触发条件 | 系统行为 | 可重试 | 用户可见 | +|---|-------------|----------|----------|--------|----------| +| F1 | `fp-lowconf-rag-unconfirmed` | 低置信 RAG 未确认即执行全量 | 仍 preview / clarify | 是 | 需预览或确认 | +| F2 | `fp-lowconf-rag-token-invalid` | token 无效/过期/问句不匹配 | 拒放;仍 clarify 或无 RAG 执行 | 否 | 确认失效 | +| F3 | `fp-lowconf-rag-preview-fail` | RAG 预览生成失败 | 无 token;clarify 含失败说明 | 是 | 无法预览方案 | +| F4 | `fp-lowconf-rag-preview-off` | `CHATBI_V3_PLAN_PREVIEW_CONFIRM=0` | 仅 clarify,无 preview | 是 | 无方案预览 | +| F5 | `fp-lowconf-contract-drift` | RAG preview 键与 manifest 不一致 | contract check **fail** | 是 | CI 红 | +| F6 | `fp-fe-unknown-preview-keys` | 前端读取未承诺键崩溃 | 策略 B:不白屏(FE-2 回归) | 是 | 降级文案 | + +--- + +## 验收标准 + +> **全栈** · 合并前必绿 + +- [ ] §2 **G1–G10** 满足;§6 **FE-1~F5** 满足或 22 书面 defer(**人签**) +- [ ] 契约 PR:**后端 + Ink** 键一致(可双 PR,但合并顺序须在 task 写明) +- [ ] `pytest tests -m "not intent_eval and not intent_benchmark"` 全绿 +- [ ] `python tools/tech_graph_contract_check.py` 通过 +- [ ] Harness:00/22/30/40/50 invoke · review · reinspect · **`### KPI(00)`** +- [ ] diary 样本:`docs/diary/samples/chatbi-v3-lowconf-rag-preview/`(关账轮建) +- [ ] **HG-*** → `approved` 后再 merge + +**建议验证命令(后端)**: + +```bash +cd ai-ink-brain-api-python +pytest tests/test_unified_chat_backend_v2_agent.py -k "lowconf and rag" -q +pytest tests/test_chatbi_plan_token.py -q +python tools/tech_graph_contract_check.py +pytest tests -m "not intent_eval and not intent_benchmark" +python tools/harness_task_validate.py docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md +``` + +--- + +## 7. 计划帽链 + +```text +(可选)Ink Harness 流程对齐 → 00 → 22 → 30 → 40 → 50(Fresh Context)→ 00/CLOSE +并行:ai-ink-brain 前端 task(FE)· 与后端 30 互锁联调 +``` + +| 帽 | 本仓落盘 | +|----|----------| +| 00 | `invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_*_00_*` | +| 22 | `reviews/by-task/chatbi-v3-lowconf-rag-preview/` | +| 30–50 | `invokes/...` · `reinspect_results/reinspect_chatbi-v3-lowconf-rag-preview_*` | + +--- + +## 8. 开跑前确认(草案) + +| # | 项 | 建议 | +|---|-----|------| +| C1 | 契约增量键名 | 22 前拍板:`rag_plan` 对象 vs 扁平键(`rewrite_query` 等) | +| C2 | token purpose | 扩展 `clarify_text2sql_once` 为通用 `clarify_plan_once` 或分 purpose | +| C3 | PR 策略 | **双 PR**(api-python + ink)或 monorepo 工作区一次提交 — **人择** | +| C4 | Harness | **先** Ink 侧 invoke/落盘约定,再后端 00 开帽 | +| C5 | 预览 vs 执行一致性 | 文档声明:token 仅跳过澄清,**不**保证预览草案与执行检索逐字一致 | + +--- + +## 9. ### KPI(00) + +> **由 00 / CLOSE 填写**;格式见 [`KPI_RUBRIC_v1_2.md`](../harness/guides/KPI_RUBRIC_v1_2.md)。 + +(占位 · 关账后删除) + +--- + +## 10. ### 自检结论(执行者) + +(40 帽回填) + +--- + +## 修订记录 + +| 日期 | 摘要 | +|------|------| +| 2026-05-31 | v0.1 草案:§5-3 全栈 · 前端 §6 · Harness 跨仓节奏 · 依赖 5-2 | + +--- + +## 给 Cursor + +`chatbi-v3-lowconf-rag-preview`、`5-3`、`rag_search`、`agent.plan.preview`、`plan_execution_token`、Ink、`UnifiedChatPageClient`、`cross-repo`、`KPI_RUBRIC_v1_2`、`failure_paths`、`required` From dafda18d8ae2fd1e3ee598c883d44022e831e14b Mon Sep 17 00:00:00 2001 From: cyning Date: Sun, 31 May 2026 22:50:30 +0800 Subject: [PATCH 2/6] =?UTF-8?q?docs(harness):=2000=20=E5=BC=80=E5=B8=BD=20?= =?UTF-8?q?chatbi-v3-lowconf-rag-preview=20=C2=B7=20=E5=AF=B9=E9=BD=90=20I?= =?UTF-8?q?nk=20FE=20=E5=B0=B1=E7=BB=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit task in_progress;C1 契约与阶段表;invoke_00 供 semi_auto 22→30→40。 Co-authored-by: Cursor --- ...260531_00_chatbi-v3-lowconf-rag-preview.md | 60 +++++++++++++++++++ .../task_chatbi_v3_lowconf_rag_preview_v1.md | 46 ++++++++++---- 2 files changed, 95 insertions(+), 11 deletions(-) create mode 100644 docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_00_chatbi-v3-lowconf-rag-preview.md diff --git a/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_00_chatbi-v3-lowconf-rag-preview.md b/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_00_chatbi-v3-lowconf-rag-preview.md new file mode 100644 index 00000000..fd1010cf --- /dev/null +++ b/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_00_chatbi-v3-lowconf-rag-preview.md @@ -0,0 +1,60 @@ +# Invoke 快照 · 00 总调度 · chatbi-v3-lowconf-rag-preview + +| 字段 | 值 | +|------|-----| +| hat_id | 00 | +| task_slug | chatbi-v3-lowconf-rag-preview | +| task_path | docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md | +| git_branch | task/chatbi-v3-lowconf-rag-preview | +| freeze_id | CHATBI-LOWCONF-RAG-PREVIEW@2026-05-31 | +| test_strategy | required | +| kpi_rubric | KPI_RUBRIC_v1_2 | +| kpi_aggregator | 00 | +| planned_hats | 22,30,40,50,CLOSE | +| paired_fe | ai-ink-brain · task_chatbi_v3_lowconf_rag_preview_frontend_v1 · 72f8f0c | +| date | 20260531 | + +--- + +## §3 调用体(快照) + +```text +你正在扮演 Harness「总调度帽(00)」,严格遵循: +- docs/harness/prompts/hats/00-orchestrator.md +- docs/harness/guides/KPI_RUBRIC_v1_2.md +- docs/harness/prompts/handoff/HANDOFF_SEMI_AUTO.md +- docs/harness/prompts/handoff/HANDOFF_CLOSE_TRACE.md +- docs/tasks/skills/SKILL-harness-task.md + +输入: +- task:docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md +- slug:chatbi-v3-lowconf-rag-preview +- 计划帽序列:22,30,40,50,CLOSE +- git_branch:task/chatbi-v3-lowconf-rag-preview +- kpi_rubric:KPI_RUBRIC_v1_2 +- kpi_aggregator:00 +- freeze_id:CHATBI-LOWCONF-RAG-PREVIEW@2026-05-31 + +前置(已完成 · 勿重复造轮子): +- Ink FE:`ai-ink-brain` commit 72f8f0c · FE-1~FE-4 · Harness 22/30/40/50 已落盘(slug:chatbi-v3-lowconf-rag-preview-frontend) +- 契约 C1(22 拍板须双端一致): + - 公共:plan_id, tool, warnings, plan_execution_token, expires_in_sec + - text2sql_query + sql_draft + - rag_search + rewrite_query(planned_top_k, preview_headlines 可选) +- 本仓 main 仍无 RAG 低置信预览链(§0 re-baseline);30 须实现 G1–G7 + 更新 _contract_manifest.json + +你必须完成: +1. 通读 task §0–§6、human_gate;维护阶段状态表。 +2. 确认 HG-TASK-DRAFT / HG-AUDIT-R1 已 approved 后再派 30(禁止代签)。 +3. semi_auto 同会话:22→30→40(各帽 invoke + Judgment + commit;30 先红后绿 pytest + contract check)。 +4. 30 范围:api/agent.py、chatbi_plan_token.py(purpose 扩展或通用 clarify_plan_once)、unified_chat 透传、契约、tests;对齐 Ink C1 键;非 api 大重构。 +5. 50:提示用户新会话 Fresh Context;收回报后继续 CLOSE。 +6. 关账:### KPI(00)、G8/G9/G10、G5 母单 5-3、diary 样本(含 FE-5 联调)、CLOSE_TRACE;全栈 FE-5 须 pass 或人签 defer。 + +禁止:代签 human_gate;无 ### KPI(00)关账;在 main 上链式提交;假定后端已合并 main。 + +Judgment(00 · 末尾): +- experience_capture: 维持 recommended | 全栈关账后升 required +- gate/risk: 双仓 PR 契约须 merge 前一致;HG-REINSPECT 双端 +- hat_self: pass | pass-with-notes +``` diff --git a/docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md b/docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md index d9a7e6e1..0a99c170 100644 --- a/docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md +++ b/docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md @@ -1,12 +1,13 @@ # Task:ChatBI V3 — 低置信 RAG 预览 + 确认放行(§5-3 · 全栈) -> **状态**:`draft`(待 Harness 跨仓流程补齐后人拍板开跑) +> **状态**:`in_progress`(2026-05-31 · 00 开帽 · Ink FE+Harness 已就绪 · 本仓 **30 实现 G1–G7**) > **schedule_ref**:RECENT §1.1 #4 子项 · 母单 §5.1 **5-3** > **登记日期**:2026-05-31 > **父 task**:[`task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md`](task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md)(§5.2 已验收 · **5-3 本单**) > **需求真值(L1)**:[`docs/spec/v3-agent/SPEC-ChatBI-V3-LowConfidence-Plan-Confirm.md`](../spec/v3-agent/SPEC-ChatBI-V3-LowConfidence-Plan-Confirm.md) **§2 RAG 预览**、**§4 确认令牌** > **前置(done)**:[`task_chatbi_v3_lowconf_sql_preview_v1.md`](../done/task_chatbi_v3_lowconf_sql_preview_v1.md)(§5-2 · 同机制 Text2SQL)· [`task_chatbi_v3_multiturn_clarify_semantics_4_3_v1.md`](../done/task_chatbi_v3_multiturn_clarify_semantics_4_3_v1.md) -> **E2E 对照样本(5-2)**:[`docs/diary/samples/chatbi-v3-lowconf-sql-preview/`](../diary/samples/chatbi-v3-lowconf-sql-preview/) +> **E2E 对照样本(5-2)**:[`docs/diary/samples/chatbi-v3-lowconf-sql-preview/`](../diary/samples/chatbi-v3-lowconf-sql-preview/) +> **配对前端(done · 代码)**:`ai-ink-brain` · [`task_chatbi_v3_lowconf_rag_preview_frontend_v1.md`](../../../ai-ink-brain/content/tasks/active/task_chatbi_v3_lowconf_rag_preview_frontend_v1.md) · 实现 `72f8f0c` · Harness 22/30/40/50 已落盘(**FE-5** 待本仓 G1–G2 联调) --- @@ -24,16 +25,38 @@ | **kpi_aggregator** | `00`(建议 · 与 5-2 同编排) | | **git_branch** | `task/chatbi-v3-lowconf-rag-preview` | -### 跨仓与 Harness 节奏(硬 · 先于 30 帽) +### 阶段状态(00 维护 · 2026-05-31) -> **人拍板**:先补齐 **Ink 侧 Harness 落盘/帽链约定**(工作区或 `ai-ink-brain` 仓),再与本后端 task **同火车或双 PR 互锁合并**;**禁止**假定「仅后端关账 = 5-3 全栈验收」。 +| 帽 | 状态 | 备注 | +|----|------|------| +| 00 | running | 本消息开帽 | +| 22 | pending | | +| 30 | pending | **G1–G7** · 对齐 Ink C1 契约 | +| 40 | pending | | +| 50 | pending | Fresh Context | +| CLOSE | pending | | + +### 跨仓与 Harness 节奏 + +| 序 | 动作 | 状态 | +|----|------|------| +| 0 | 契约 **C1**(见下) | **拍板**(Ink `72f8f0c` + review R1) | +| 1 | Ink Harness + FE 代码 | **done**(`chatbi-v3-lowconf-rag-preview-frontend`) | +| 2 | 本仓 Harness 22→50 | **进行中** | +| 3 | 联调 FE-5 + diary 样本 | 待 **G1–G2** 后发 | + +**C1 契约增量(22 前须与 Ink 一致)**: + +- 公共键:`plan_id`, `tool`, `warnings`, `plan_execution_token`, `expires_in_sec` +- `text2sql_query` 额外:`sql_draft` +- `rag_search` 额外:**`rewrite_query`**(`planned_top_k`、`preview_headlines` 可选) | 序 | 动作 | 落点 | |----|------|------| -| 0 | 冻结 **契约增量**(`agent.plan.preview` RAG payload 最小键) | 本仓 `_contract_manifest.json` + Ink manifest 消费约定 | -| 1 | **Ink**:新建/更新前端 task(见 §6)+ Harness invoke 路径约定 | `ai-ink-brain/content/tasks/active/task_chatbi_v3_lowconf_rag_preview_frontend_v1.md`(建议名) | -| 2 | **本仓**:22→30→40→50→CLOSE(`required` + reinspect) | `docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/` | -| 3 | 联调烟测 + diary 样本(两轮 Timeline + 截图) | 本仓 `docs/diary/samples/chatbi-v3-lowconf-rag-preview/`(关账时建) | +| 0 | 冻结 **契约** | 本仓 `_contract_manifest.json` ↔ Ink 已落盘镜像 | +| 1 | **Ink** task + Harness | `content/tasks/active/task_chatbi_v3_lowconf_rag_preview_frontend_v1.md` · `content/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview-frontend/` | +| 2 | **本仓** Harness | `docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/` | +| 3 | E2E 样本 | `docs/diary/samples/chatbi-v3-lowconf-rag-preview/`(关账) | **Open Folder**:后端实现与 Harness 落盘 → **本仓**;前端实现 → **`ai-ink-brain/`**(见工作区 `Projects/AGENTS.md` §2)。 @@ -157,10 +180,11 @@ SPEC 要求:低置信 **`rag_search`** 场景下,用户在执行全链路 RA --- -## 6. 前端涉及点(Ink · 执行真值) +## 6. 前端涉及点(Ink · 已完成 · 本仓验收引用) -> **子 task 建议落盘**(由人/Agent 在 **`ai-ink-brain`** 创建,本单仅索引) -> 建议路径:`ai-ink-brain/content/tasks/active/task_chatbi_v3_lowconf_rag_preview_frontend_v1.md` +> **真值 task**:`ai-ink-brain/content/tasks/active/task_chatbi_v3_lowconf_rag_preview_frontend_v1.md` +> **实现 commit**:`72f8f0c`(`main`)· **FE-1~FE-4 pass** · **FE-5** 阻塞于本仓 RAG preview 未就绪 +> **50 复检**:`content/tasks/reinspect_results/reinspect_chatbi-v3-lowconf-rag-preview-frontend_20260531_v1.md` ### 6.1 须改模块(参考 5-2 已 done 前端 task) From b540fa35f5383e0638f57941be10a54047da6957 Mon Sep 17 00:00:00 2001 From: cyning Date: Sun, 31 May 2026 22:53:05 +0800 Subject: [PATCH 3/6] =?UTF-8?q?docs(task):=20=E4=BA=BA=E7=AD=BE=20HG-TASK-?= =?UTF-8?q?DRAFT=20/=20HG-AUDIT-R1=20=C2=B7=20chatbi-v3-lowconf-rag-previe?= =?UTF-8?q?w?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 放行 22-R1 与 30 开工;HG-REINSPECT 仍 pending 至 50 后。 Co-authored-by: Cursor --- docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md b/docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md index 0a99c170..49a2a460 100644 --- a/docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md +++ b/docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md @@ -64,8 +64,8 @@ | human_gate_id | status | blocks_hats | 说明 | |---------------|--------|-------------|------| -| HG-TASK-DRAFT | pending | 22-R1,30 | 含 §6 前端范围人扫 | -| HG-AUDIT-R1 | pending | 30 | 22 R1 后;须核对契约与 Ink task 对齐 | +| HG-TASK-DRAFT | approved | 22-R1,30 | 含 §6 前端范围人扫 | +| HG-AUDIT-R1 | approved | 30 | 22 R1 后;须核对契约与 Ink task 对齐 | | HG-REINSPECT | pending | done | 50 后、合并前;**双仓** diff 须 50 书面覆盖 | --- From b297c94eca24ba2176f0a57062080c7b55fd8d0e Mon Sep 17 00:00:00 2001 From: cyning Date: Sun, 31 May 2026 23:07:23 +0800 Subject: [PATCH 4/6] =?UTF-8?q?feat(chatbi):=20=E4=BD=8E=E7=BD=AE=E4=BF=A1?= =?UTF-8?q?=20RAG=20=E6=96=B9=E6=A1=88=E9=A2=84=E8=A7=88=E4=B8=8E=20plan?= =?UTF-8?q?=20token=20=E6=94=BE=E8=A1=8C=EF=BC=885-3=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 扩展 clarify 至 rag_search:preview_only 检索方案、clarify_plan_once 令牌按工具校验;契约增量 rewrite_query 等键;Harness 22/30/40 invoke 与 R1 审查落盘。 Co-authored-by: Cursor --- api/agent.py | 194 +++++--- api/chatbi_plan_token.py | 42 +- api/tools.py | 25 + docs/_tech_graph/02_version.md | 1 + docs/_tech_graph/_contract_manifest.json | 2 +- ...260531_22_chatbi-v3-lowconf-rag-preview.md | 24 + ...260531_30_chatbi-v3-lowconf-rag-preview.md | 24 + ...260531_40_chatbi-v3-lowconf-rag-preview.md | 23 + ...260531_50_chatbi-v3-lowconf-rag-preview.md | 42 ++ ...owconf_rag_preview_v1_audit_R1_20260531.md | 79 ++++ .../task_chatbi_v3_lowconf_rag_preview_v1.md | 39 +- tests/test_chatbi_plan_token.py | 11 + tests/test_unified_chat_backend_v2_agent.py | 444 ++++++++++++++++++ 13 files changed, 868 insertions(+), 82 deletions(-) create mode 100644 docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_22_chatbi-v3-lowconf-rag-preview.md create mode 100644 docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_30_chatbi-v3-lowconf-rag-preview.md create mode 100644 docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_40_chatbi-v3-lowconf-rag-preview.md create mode 100644 docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_50_chatbi-v3-lowconf-rag-preview.md create mode 100644 docs/harness/reviews/by-task/chatbi-v3-lowconf-rag-preview/task_chatbi_v3_lowconf_rag_preview_v1_audit_R1_20260531.md diff --git a/api/agent.py b/api/agent.py index 99dae0d3..d5bb4482 100644 --- a/api/agent.py +++ b/api/agent.py @@ -64,6 +64,9 @@ def _agent_chain(typ: str, started_at: float, step_id: str, payload: dict[str, A "plan_id": "", "tool": "text2sql_query", "sql_draft": "", + "rewrite_query": "", + "planned_top_k": 10, + "preview_headlines": [], "warnings": [], "plan_execution_token": "", "expires_in_sec": 120, @@ -446,28 +449,51 @@ async def run( # 不得沿用「已切到 fallback 工具」的 step1_mode(常见 rag),否则 Timeline 像已转 RAG 却无任何工具执行。 clarify_gate = os.getenv("CHATBI_V3_LOW_CONFIDENCE_CLARIFY", "").strip().lower() in ("1", "true", "yes") from .chatbi_plan_token import ( - mint_clarify_text2sql_bypass_token, + mint_clarify_plan_bypass_token, plan_preview_confirm_enabled, plan_token_ttl_s, - verify_clarify_text2sql_bypass_token, + verify_clarify_plan_bypass_token, ) - _plan_bypass = plan_preview_confirm_enabled() and verify_clarify_text2sql_bypass_token( - plan_execution_token, session_id=session_id, query=query - ) - _clarify_eligible = ( + _plan_bypass_tool: ToolName | None = None + if plan_preview_confirm_enabled(): + if verify_clarify_plan_bypass_token( + plan_execution_token, + session_id=session_id, + query=query, + expected_tool="text2sql_query", + ): + _plan_bypass_tool = "text2sql_query" + elif verify_clarify_plan_bypass_token( + plan_execution_token, + session_id=session_id, + query=query, + expected_tool="rag_search", + ): + _plan_bypass_tool = "rag_search" + + _clarify_tool: ToolName | None = None + if ( clarify_gate and prefer == "auto" and intent is not None - and intent.tool == "text2sql_query" and intent.confidence < self._min_confidence - and not _plan_bypass - ) - # 用户已持有效 plan_execution_token:本轮回放首步须回到意图候选 text2sql,而非低置信 fallback 的 rag。 - if _plan_bypass: - step1_tool = "text2sql_query" + and _plan_bypass_tool is None + ): + if intent.tool == "text2sql_query": + _clarify_tool = "text2sql_query" + elif intent.tool == "rag_search": + _clarify_tool = "rag_search" + _clarify_eligible = _clarify_tool is not None + + # 用户已持有效 plan_execution_token:本轮回放首步须回到确认时的工具,而非低置信 fallback。 + if _plan_bypass_tool: + step1_tool = _plan_bypass_tool step1_mode = self._tool_to_mode(step1_tool) - step1_reasoning = "已校验 plan_execution_token,按用户确认放行执行 Text2SQL。" + if _plan_bypass_tool == "rag_search": + step1_reasoning = "已校验 plan_execution_token,按用户确认放行执行 RAG 检索。" + else: + step1_reasoning = "已校验 plan_execution_token,按用户确认放行执行 Text2SQL。" # Step 循环:必须多步(允许成功在 2 步内结束,但失败应触发继续) current_tool: ToolName = step1_tool @@ -644,16 +670,30 @@ async def _emit_final_chains(fin: AgentFinalView, answer: str) -> None: ) ) - # P1-4 §4.3:低置信 + SQL 候选时可选「澄清短路」(默认关,避免改变现网行为) - if _clarify_eligible: + # P1-4 §4.3:低置信 + text2sql/rag 候选时可选「澄清短路」(默认关,避免改变现网行为) + if _clarify_eligible and _clarify_tool is not None: _cl_msg = "待您澄清(低置信度)" plan_preview_payload: dict[str, Any] | None = None plan_ttl_s = plan_token_ttl_s() - ttl_notice = ( - f"若确认按预览 SQL 继续查数:请在 {plan_ttl_s} 秒内在**下一轮同一问题**的请求 JSON 中带 " - f"`\"plan_execution_token\": \"…\"`(见 `agent.plan.preview` 中的 `plan_execution_token`)。" - "若未及时附带令牌,本预览 SQL 与该令牌均失效,须**重新发起本问题**才能再次预览。" - ) + _clarify_mode = self._tool_to_mode(_clarify_tool) + if _clarify_tool == "rag_search": + ttl_notice = ( + f"若确认按预览检索方案继续:请在 {plan_ttl_s} 秒内在**下一轮同一问题**的请求 JSON 中带 " + f"`\"plan_execution_token\": \"…\"`(见 `agent.plan.preview` 中的 `plan_execution_token`)。" + "若未及时附带令牌,本预览方案与该令牌均失效,须**重新发起本问题**才能再次预览。" + ) + _preview_fail_hint = ( + "(本轮未能生成可放行的 RAG 方案预览,无法签发 plan_execution_token;请改问或补充检索范围。)" + ) + else: + ttl_notice = ( + f"若确认按预览 SQL 继续查数:请在 {plan_ttl_s} 秒内在**下一轮同一问题**的请求 JSON 中带 " + f"`\"plan_execution_token\": \"…\"`(见 `agent.plan.preview` 中的 `plan_execution_token`)。" + "若未及时附带令牌,本预览 SQL 与该令牌均失效,须**重新发起本问题**才能再次预览。" + ) + _preview_fail_hint = ( + "(本轮未能生成可放行的 SQL 预览,无法签发 plan_execution_token;请改问或使用 prefer=text2sql。)" + ) use_reasoning = (os.getenv("CHATBI_V3_CLARIFY_PROMPT_USE_REASONING", "") or "").strip().lower() in ( "1", "true", @@ -673,35 +713,76 @@ async def _emit_final_chains(fin: AgentFinalView, answer: str) -> None: _cl_prompt = _generic if plan_preview_confirm_enabled(): _cl_prompt = (_cl_prompt.rstrip() + "\n\n" + ttl_notice).strip() - from .tools import text2sql_execute as _t2s_preview # noqa: PLC0415 - _prev_hist: list[dict[str, Any]] = turn_history[-6:] - _t2s_json_ctx: dict[str, Any] | None = None - if run_id: - _t2s_json_ctx = {"request_id": run_id, "run_id": run_id, "session_id": session_id} - _pr = await _t2s_preview( - query, - history=_prev_hist, - debug_llm_prompts=debug_llm_prompts, - chain_emit=emit, - chain_started_at=ts_ref, - json_log_ctx=_t2s_json_ctx, - preview_only=True, - ) - sql_pv = "" - if _pr.success and isinstance(_pr.data, dict) and isinstance(_pr.data.get("sql"), str): - sql_pv = (_pr.data.get("sql") or "").strip() - if sql_pv: - exec_tok = mint_clarify_text2sql_bypass_token(session_id=session_id, query=query) - plan_prev_id = str(uuid.uuid4()).replace("-", "")[:20] - plan_preview_payload = { - "plan_id": plan_prev_id, - "tool": "text2sql_query", - "sql_draft": sql_pv, - "warnings": [ttl_notice], - "plan_execution_token": exec_tok, - "expires_in_sec": plan_ttl_s, - } + plan_prev_id = str(uuid.uuid4()).replace("-", "")[:20] + if _clarify_tool == "text2sql_query": + from .tools import text2sql_execute as _t2s_preview # noqa: PLC0415 + + _t2s_json_ctx: dict[str, Any] | None = None + if run_id: + _t2s_json_ctx = {"request_id": run_id, "run_id": run_id, "session_id": session_id} + _pr = await _t2s_preview( + query, + history=_prev_hist, + debug_llm_prompts=debug_llm_prompts, + chain_emit=emit, + chain_started_at=ts_ref, + json_log_ctx=_t2s_json_ctx, + preview_only=True, + ) + sql_pv = "" + if _pr.success and isinstance(_pr.data, dict) and isinstance(_pr.data.get("sql"), str): + sql_pv = (_pr.data.get("sql") or "").strip() + if sql_pv: + exec_tok = mint_clarify_plan_bypass_token( + session_id=session_id, query=query, tool="text2sql_query" + ) + plan_preview_payload = { + "plan_id": plan_prev_id, + "tool": "text2sql_query", + "sql_draft": sql_pv, + "warnings": [ttl_notice], + "plan_execution_token": exec_tok, + "expires_in_sec": plan_ttl_s, + } + else: + from .tools import rag_search_execute as _rag_preview # noqa: PLC0415 + + _pr_rag = await _rag_preview( + query, + history=_prev_hist, + debug_llm_prompts=debug_llm_prompts, + preview_only=True, + ) + rewrite_pv = "" + planned_k = 10 + headlines: list[str] = [] + if _pr_rag.success and isinstance(_pr_rag.data, dict): + rw = _pr_rag.data.get("rewritten") + if isinstance(rw, str): + rewrite_pv = rw.strip() + try: + planned_k = int(_pr_rag.data.get("planned_top_k") or 10) + except Exception: # noqa: BLE001 + planned_k = 10 + ph = _pr_rag.data.get("preview_headlines") + if isinstance(ph, list): + headlines = [str(x) for x in ph if x][:6] + if rewrite_pv: + exec_tok = mint_clarify_plan_bypass_token( + session_id=session_id, query=query, tool="rag_search" + ) + plan_preview_payload = { + "plan_id": plan_prev_id, + "tool": "rag_search", + "rewrite_query": rewrite_pv, + "planned_top_k": planned_k, + "preview_headlines": headlines, + "warnings": [ttl_notice], + "plan_execution_token": exec_tok, + "expires_in_sec": plan_ttl_s, + } + if plan_preview_payload: if emit is not None: await emit( _agent_chain( @@ -718,15 +799,12 @@ async def _emit_final_chains(fin: AgentFinalView, answer: str) -> None: run_id=run_id, session_id=session_id, route="agent", - mode="text2sql", + mode=_clarify_mode, plan_id=plan_prev_id, gate_bypass_reason="plan_preview_token_minted", ) else: - _cl_prompt = ( - _cl_prompt.rstrip() - + "\n\n(本轮未能生成可放行的 SQL 预览,无法签发 plan_execution_token;请改问或使用 prefer=text2sql。)" - ).strip() + _cl_prompt = (_cl_prompt.rstrip() + "\n\n" + _preview_fail_hint).strip() clarify_pl: dict[str, Any] = {"step_number": 1, "message": _cl_msg, "prompt_for_user": _cl_prompt} if chatbi_json_log_enabled() and run_id: @@ -736,21 +814,21 @@ async def _emit_final_chains(fin: AgentFinalView, answer: str) -> None: run_id=run_id, session_id=session_id, route="agent", - mode="text2sql", - intent_tool="text2sql_query", + mode=_clarify_mode, + intent_tool=_clarify_tool, intent_confidence=float(intent.confidence), clarify_gate=True, ) _final_answer = ( "系统在继续查数前需要先与您对齐语义。请查看 Timeline 中「待您澄清」条目并补充说明;" - "也可改用 prefer=text2sql 强制路径或改写问题后重试。" + "也可改用 prefer=text2sql / prefer=rag 强制路径或改写问题后重试。" ) final_cl = AgentFinalView( answer=_final_answer, - mode="text2sql", + mode=_clarify_mode, total_steps=0, tools_used=[], - modes=["text2sql"], + modes=[_clarify_mode], fallback_used=False, ) if emit is not None: diff --git a/api/chatbi_plan_token.py b/api/chatbi_plan_token.py index b887d7c9..7aba33e0 100644 --- a/api/chatbi_plan_token.py +++ b/api/chatbi_plan_token.py @@ -1,4 +1,4 @@ -"""低置信 Text2SQL 澄清:一次性放行令牌(HMAC,无服务端会话表)。""" +"""低置信澄清:一次性放行令牌(HMAC,无服务端会话表)。""" from __future__ import annotations @@ -10,7 +10,8 @@ import time from typing import Any -_PURPOSE = "clarify_text2sql_once" +_PURPOSE_LEGACY = "clarify_text2sql_once" +_PURPOSE = "clarify_plan_once" _SIG_LEN = 32 # HMAC-SHA256 digest size;签名字节中可出现 ``0x0a``,不得用 ``rsplit(b"\\n")`` 定界 @@ -40,12 +41,13 @@ def plan_token_ttl_s() -> int: return max(30, min(600, v)) -def mint_clarify_text2sql_bypass_token(*, session_id: str | None, query: str) -> str: - """签发「跳过一轮 clarify」令牌:绑定 session + 问句指纹 + TTL。""" +def mint_clarify_plan_bypass_token(*, session_id: str | None, query: str, tool: str) -> str: + """签发「跳过一轮 clarify」令牌:绑定 session + 问句指纹 + 工具 + TTL。""" ttl = plan_token_ttl_s() payload: dict[str, Any] = { "v": 1, "p": _PURPOSE, + "t": (tool or "").strip()[:64], "sid": (session_id or "")[:256], "qh": _query_fingerprint(query), "exp": int(time.time()) + ttl, @@ -56,6 +58,11 @@ def mint_clarify_text2sql_bypass_token(*, session_id: str | None, query: str) -> return base64.urlsafe_b64encode(raw).decode("ascii").rstrip("=") +def mint_clarify_text2sql_bypass_token(*, session_id: str | None, query: str) -> str: + """兼容 5-2:等价于 ``mint_clarify_plan_bypass_token(..., tool=text2sql_query)``。""" + return mint_clarify_plan_bypass_token(session_id=session_id, query=query, tool="text2sql_query") + + def _b64url_decode_padded(token: str) -> bytes: """urlsafe base64 无填充串的可靠解码(禁止固定追加 ``==``,否则部分长度会误解码/验签偶发失败)。""" t = token.strip() @@ -63,7 +70,16 @@ def _b64url_decode_padded(token: str) -> bytes: return base64.urlsafe_b64decode(t + ("=" * pad)) -def verify_clarify_text2sql_bypass_token(token: str | None, *, session_id: str | None, query: str) -> bool: +def _payload_tool(payload: dict[str, Any]) -> str: + if payload.get("p") == _PURPOSE_LEGACY: + return "text2sql_query" + t = payload.get("t") + return t if isinstance(t, str) else "" + + +def verify_clarify_plan_bypass_token( + token: str | None, *, session_id: str | None, query: str, expected_tool: str +) -> bool: if not isinstance(token, str) or not token.strip(): return False try: @@ -84,17 +100,27 @@ def verify_clarify_text2sql_bypass_token(token: str | None, *, session_id: str | payload = json.loads(body_b.decode("utf-8")) except Exception: # noqa: BLE001 return False - if payload.get("p") != _PURPOSE or int(payload.get("exp") or 0) < int(time.time()): + purpose = payload.get("p") + if purpose not in (_PURPOSE, _PURPOSE_LEGACY): + return False + if int(payload.get("exp") or 0) < int(time.time()): return False if (payload.get("sid") or "") != (session_id or ""): return False if (payload.get("qh") or "") != _query_fingerprint(query): return False - return True + tool = _payload_tool(payload) + return tool == (expected_tool or "").strip() + + +def verify_clarify_text2sql_bypass_token(token: str | None, *, session_id: str | None, query: str) -> bool: + return verify_clarify_plan_bypass_token( + token, session_id=session_id, query=query, expected_tool="text2sql_query" + ) def plan_preview_confirm_enabled() -> bool: - """低置信澄清时是否走 SQL 预览 + plan_execution_token。 + """低置信澄清时是否走方案预览 + plan_execution_token。 默认 **开启**(未设置或空字符串视为开);显式 ``0``/``false``/``no``/``off`` 关闭。 仍须 ``CHATBI_V3_LOW_CONFIDENCE_CLARIFY`` 开启且命中澄清分支才会实际预览。 diff --git a/api/tools.py b/api/tools.py index 0cc166f8..b7c4d6f6 100644 --- a/api/tools.py +++ b/api/tools.py @@ -197,6 +197,7 @@ async def rag_search_execute( *, history: list[dict[str, Any]] | None = None, debug_llm_prompts: bool = False, + preview_only: bool = False, ) -> ToolResult: started_at = time.perf_counter() hist = history or [] @@ -244,6 +245,30 @@ def _sync_rw() -> str: latency_ms=_elapsed_ms(started_at), ) + if preview_only: + planned_top_k = int(retrieved.get("top_k") or 10) + headlines: list[str] = [] + for h in hits[:6]: + if not isinstance(h, dict): + continue + label = ( + h.get("filename") + or h.get("title") + or h.get("path") + or h.get("url") + or h.get("id") + ) + if isinstance(label, str) and label.strip(): + headlines.append(label.strip()[:120]) + out_preview: dict[str, Any] = { + "rewritten": rewritten, + "planned_top_k": planned_top_k, + "preview_headlines": headlines, + } + if debug_llm_prompts and llm_prompts: + out_preview["llm_prompts"] = llm_prompts + return ToolResult(success=True, data=out_preview, latency_ms=_elapsed_ms(started_at)) + parts: list[str] = [] for i, h in enumerate(hits[:12]): content = h.get("content") if isinstance(h, dict) else None diff --git a/docs/_tech_graph/02_version.md b/docs/_tech_graph/02_version.md index cf39d223..59487f8b 100644 --- a/docs/_tech_graph/02_version.md +++ b/docs/_tech_graph/02_version.md @@ -35,5 +35,6 @@ timeline 2026-05-18 : 1e55c7b auto: api/chatbi_principal.py 2026-05-25 : fe536b8 auto: api/index.py 2026-05-29 : 034fdcd auto: api/chatbi_rate_limit.py + 2026-05-31 : b540fa3 auto: api/agent.py ``` diff --git a/docs/_tech_graph/_contract_manifest.json b/docs/_tech_graph/_contract_manifest.json index ed68f0e2..3114e43f 100644 --- a/docs/_tech_graph/_contract_manifest.json +++ b/docs/_tech_graph/_contract_manifest.json @@ -86,7 +86,7 @@ "agent.step.start": ["step_number", "max_steps"], "agent.think": ["step_number", "thought", "selected_tool", "mode", "confidence"], "agent.clarify": ["step_number", "message", "prompt_for_user"], - "agent.plan.preview": ["plan_id", "tool", "sql_draft", "warnings", "plan_execution_token", "expires_in_sec"], + "agent.plan.preview": ["plan_id", "tool", "sql_draft", "rewrite_query", "planned_top_k", "preview_headlines", "warnings", "plan_execution_token", "expires_in_sec"], "agent.intent": ["tool", "mode", "reasoning", "confidence", "fallback", "cache", "cache_key_hash", "latency_ms"], "agent.step.end": ["step_number", "tool_used", "mode", "success", "next_action"], "agent.final": ["total_steps", "tools_used", "modes", "fallback_used"], diff --git a/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_22_chatbi-v3-lowconf-rag-preview.md b/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_22_chatbi-v3-lowconf-rag-preview.md new file mode 100644 index 00000000..0bd02e5d --- /dev/null +++ b/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_22_chatbi-v3-lowconf-rag-preview.md @@ -0,0 +1,24 @@ +# Invoke 快照 · 22 任务审核 · chatbi-v3-lowconf-rag-preview + +| 字段 | 值 | +|------|-----| +| hat_id | 22 | +| task_slug | chatbi-v3-lowconf-rag-preview | +| task_path | docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md | +| git_branch | task/chatbi-v3-lowconf-rag-preview | +| audit_round | R1 | +| freeze_id | CHATBI-LOWCONF-RAG-PREVIEW@2026-05-31 | +| date | 20260531 | + +--- + +## §3 调用体(快照) + +```text +22 任务审核:task_chatbi_v3_lowconf_rag_preview_v1.md · C1 与 Ink 72f8f0c 对齐 · R1 零阻塞 · 落盘 reviews/by-task/chatbi-v3-lowconf-rag-preview/ + +Judgment(22): +- experience_capture: 维持 recommended +- gate/risk: HG-REINSPECT pending 预期;双仓契约 merge 前一致 +- hat_self: pass +``` diff --git a/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_30_chatbi-v3-lowconf-rag-preview.md b/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_30_chatbi-v3-lowconf-rag-preview.md new file mode 100644 index 00000000..42e414dc --- /dev/null +++ b/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_30_chatbi-v3-lowconf-rag-preview.md @@ -0,0 +1,24 @@ +# Invoke 快照 · 30 执行编码 · chatbi-v3-lowconf-rag-preview + +| 字段 | 值 | +|------|-----| +| hat_id | 30 | +| task_slug | chatbi-v3-lowconf-rag-preview | +| task_path | docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md | +| git_branch | task/chatbi-v3-lowconf-rag-preview | +| freeze_id | CHATBI-LOWCONF-RAG-PREVIEW@2026-05-31 | +| review | docs/harness/reviews/by-task/chatbi-v3-lowconf-rag-preview/task_chatbi_v3_lowconf_rag_preview_v1_audit_R1_20260531.md | +| date | 20260531 | + +--- + +## §3 调用体(快照) + +```text +30 执行:G1–G7 · api/agent.py · chatbi_plan_token.py · tools.rag_search_execute(preview_only) · _contract_manifest.json · pytest + +Judgment(30): +- experience_capture: 维持 recommended +- gate/risk: 双仓 PR 须契约一致;FE-5 联调待 G1–G2 就绪 +- hat_self: pass +``` diff --git a/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_40_chatbi-v3-lowconf-rag-preview.md b/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_40_chatbi-v3-lowconf-rag-preview.md new file mode 100644 index 00000000..30269d55 --- /dev/null +++ b/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_40_chatbi-v3-lowconf-rag-preview.md @@ -0,0 +1,23 @@ +# Invoke 快照 · 40 自检 · chatbi-v3-lowconf-rag-preview + +| 字段 | 值 | +|------|-----| +| hat_id | 40 | +| task_slug | chatbi-v3-lowconf-rag-preview | +| task_path | docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md | +| git_branch | task/chatbi-v3-lowconf-rag-preview | +| freeze_id | CHATBI-LOWCONF-RAG-PREVIEW@2026-05-31 | +| date | 20260531 | + +--- + +## §3 调用体(快照) + +```text +40 自检:回填 task §10 · 验证 pytest + contract check · 指 50 Fresh Context + +Judgment(40): +- experience_capture: 维持 recommended +- gate/risk: HG-REINSPECT 仍 pending;50 须新会话 +- hat_self: pass +``` diff --git a/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_50_chatbi-v3-lowconf-rag-preview.md b/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_50_chatbi-v3-lowconf-rag-preview.md new file mode 100644 index 00000000..5f6c7bcb --- /dev/null +++ b/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_50_chatbi-v3-lowconf-rag-preview.md @@ -0,0 +1,42 @@ +# Invoke 快照 · 50 独立复检 · chatbi-v3-lowconf-rag-preview + +| 字段 | 值 | +|------|-----| +| hat_id | 50 | +| task_slug | chatbi-v3-lowconf-rag-preview | +| task_path | docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md | +| git_branch | task/chatbi-v3-lowconf-rag-preview | +| freeze_id | CHATBI-LOWCONF-RAG-PREVIEW@2026-05-31 | +| fresh_context | **必须** · 新会话 | +| review | docs/harness/reviews/by-task/chatbi-v3-lowconf-rag-preview/task_chatbi_v3_lowconf_rag_preview_v1_audit_R1_20260531.md | +| date | 20260531 | + +--- + +## §3 调用体(快照 · Fresh Context) + +```text +【须新会话】你正在扮演 Harness「50 独立复检帽」,严格遵循: +- docs/harness/prompts/hats/50-independent-reinspect.md +- docs/harness/prompts/templates/TEMPLATE-independent-reinspect-invoke.md §3 + +输入: +- task:docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md +- slug:chatbi-v3-lowconf-rag-preview +- SUBPROJECT_ROOT:ai-ink-brain-api-python +- REINSPECT_MODE:独立复检 +- DIFF:git diff origin/main...HEAD(本仓 + 提示对照 ai-ink-brain 72f8f0c 契约) +- 审查:docs/harness/reviews/by-task/chatbi-v3-lowconf-rag-preview/task_chatbi_v3_lowconf_rag_preview_v1_audit_R1_20260531.md +- 自检:task §10 + +禁止:读 30 长聊天史;代签 HG-REINSPECT。 + +落盘:docs/tasks/reinspect_results/reinspect_chatbi-v3-lowconf-rag-preview_20260531_v1.md + +完成后回报 00 继续 CLOSE(KPI、G8–G10、diary 样本、FE-5 联调口径)。 + +Judgment(50 · 待填): +- experience_capture: +- gate/risk: +- hat_self: +``` diff --git a/docs/harness/reviews/by-task/chatbi-v3-lowconf-rag-preview/task_chatbi_v3_lowconf_rag_preview_v1_audit_R1_20260531.md b/docs/harness/reviews/by-task/chatbi-v3-lowconf-rag-preview/task_chatbi_v3_lowconf_rag_preview_v1_audit_R1_20260531.md new file mode 100644 index 00000000..4a2e6473 --- /dev/null +++ b/docs/harness/reviews/by-task/chatbi-v3-lowconf-rag-preview/task_chatbi_v3_lowconf_rag_preview_v1_audit_R1_20260531.md @@ -0,0 +1,79 @@ +# 任务审核报告:chatbi-v3-lowconf-rag-preview · R1 + +| 字段 | 值 | +|------|-----| +| task | `docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md` | +| audit_round | R1 | +| freeze_id | `CHATBI-LOWCONF-RAG-PREVIEW@2026-05-31` | +| audit_profile | `full` | +| test_strategy | `required` | +| kpi_aggregator | `00` | +| invoke_snapshot | `docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_22_chatbi-v3-lowconf-rag-preview.md` | +| paired_fe | `ai-ink-brain` · `72f8f0c` · C1 契约已拍板 | +| reviewer | Agent(22 帽) | +| date | 2026-05-31 | + +--- + +## 审查结论摘要 + +**零阻塞 · 可进入执行帽** + +§0 re-baseline 确认:`main` 仅有 **text2sql** 低置信预览链;本单 **5-3** 须对称扩展 **rag_search** + 契约键 `rewrite_query` 等。Ink FE(`72f8f0c`)已消费 C1;后端 30 与 Ink **同 PR 或紧耦合 PR** 合并。 + +--- + +## 理论对齐检查表(P0) + +### §3.1 / §3.3 + +| # | 检查项 | 通过 | +|---|--------|------| +| 1 | `test_strategy: required` + api/契约 | ☑ | +| 2 | `failure_paths` + Delta | ☑ | +| 3 | 全栈 FE-5 关账阻塞已声明 | ☑ | +| 4 | `harness_task_validate.py` | ☑(执行 30 后复跑) | + +`harness_human_gate_check.py`:HG-REINSPECT **pending**(**预期**,仅阻塞 `done`;不阻塞 30)。 + +--- + +## C1 拍板(与 Ink 一致) + +| 分支 | 承诺键 | +|------|--------| +| 公共 | `plan_id`, `tool`, `warnings`, `plan_execution_token`, `expires_in_sec` | +| `text2sql_query` | + `sql_draft` | +| `rag_search` | + `rewrite_query`(`planned_top_k`, `preview_headlines` 可选) | + +**token**:`clarify_plan_once` + payload `t` 工具名;兼容 legacy `clarify_text2sql_once`。 + +--- + +## human_gate + +| gate_id | status | blocks_hats | 结论 | +|---------|--------|-------------|------| +| HG-TASK-DRAFT | approved | 22-R1,30 | 不阻塞 | +| HG-AUDIT-R1 | approved | 30 | 不阻塞 | +| HG-REINSPECT | pending | done | 50 后、merge 前人签 | + +--- + +## 阻塞项 + +**无阻塞。** + +--- + +## 签收 / 关闭 + +- **R1**:30 可开工;范围 G1–G7;**G5 SSE parity 强制** +- **双仓**:契约 `_contract_manifest.json` 与 Ink 镜像须 merge 前一致 +- **50**:须 **Fresh Context** 新会话 + +--- + +## 下一棒可复制 Prompt + +见 `docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_30_chatbi-v3-lowconf-rag-preview.md` §3。 diff --git a/docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md b/docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md index 49a2a460..caac6e56 100644 --- a/docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md +++ b/docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md @@ -1,6 +1,6 @@ # Task:ChatBI V3 — 低置信 RAG 预览 + 确认放行(§5-3 · 全栈) -> **状态**:`in_progress`(2026-05-31 · 00 开帽 · Ink FE+Harness 已就绪 · 本仓 **30 实现 G1–G7**) +> **状态**:`in_progress`(2026-05-31 · 00→40 本仓 G1–G7 已落地 · **50 Fresh Context 待续** · FE-5 联调待 E2E) > **schedule_ref**:RECENT §1.1 #4 子项 · 母单 §5.1 **5-3** > **登记日期**:2026-05-31 > **父 task**:[`task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md`](task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md)(§5.2 已验收 · **5-3 本单**) @@ -29,12 +29,12 @@ | 帽 | 状态 | 备注 | |----|------|------| -| 00 | running | 本消息开帽 | -| 22 | pending | | -| 30 | pending | **G1–G7** · 对齐 Ink C1 契约 | -| 40 | pending | | -| 50 | pending | Fresh Context | -| CLOSE | pending | | +| 00 | done | `invoke_20260531_00_*` | +| 22 | done | R1 零阻塞 · `task_*_audit_R1_20260531.md` | +| 30 | done | G1–G7 · `clarify_plan_once` + RAG preview | +| 40 | done | pytest 277 绿 · contract OK | +| 50 | pending | **须新会话 Fresh Context** | +| CLOSE | pending | 待 50 + FE-5 / HG-REINSPECT | ### 跨仓与 Harness 节奏 @@ -102,13 +102,13 @@ SPEC 要求:低置信 **`rag_search`** 场景下,用户在执行全链路 RA ### 2.1 后端(本仓 `ai-ink-brain-api-python`) -- [ ] **G1 RAG 澄清预览**:低置信 + `rag_search` 候选时发出 **`agent.plan.preview`**(非仅 text2sql) -- [ ] **G2 RAG 预览载荷**:payload 含 SPEC 对齐字段(至少:**改写后检索 query** 或等价、`tool`、**warnings**、**plan_execution_token**、**expires_in_sec**;轻量预检索摘要若实现须文档化) -- [ ] **G3 token 放行 RAG**:合法 token 续跑 → `agent.think` 含放行语义 → 执行 **rag_search**(非误走 text2sql);无效 token **deny**(pytest) -- [ ] **G4 预览失败**:RAG 预览子路径失败时无 token,clarify 含失败说明(对齐 5-2 F3 模式) -- [ ] **G5 JSON + SSE parity**:与 5-2 同级;**禁止** 22 defer SSE -- [ ] **G6 契约**:更新 `_contract_manifest.json` + `tech_graph_contract_check`;必要时 `SPEC-ChatBI-V2-Events` 指针/§3.2.2 增补 -- [ ] **G7 pytest**:`test_strategy: required` · 先红后绿;触达契约必跑 contract check +- [x] **G1 RAG 澄清预览**:低置信 + `rag_search` 候选时发出 **`agent.plan.preview`**(非仅 text2sql) +- [x] **G2 RAG 预览载荷**:payload 含 `rewrite_query`、`planned_top_k`、`preview_headlines`(可选)+ 公共键 +- [x] **G3 token 放行 RAG**:合法 token 续跑跳过 clarify → **rag_search** + `rag.sources`;`verify` 分工具(pytest) +- [x] **G4 预览失败**:`test_v3_rag_plan_preview_fail_json_no_token` +- [x] **G5 JSON + SSE parity**:`test_v3_rag_plan_preview_sse_parity`(无 defer) +- [x] **G6 契约**:`_contract_manifest.json` · `tech_graph_contract_check` OK +- [x] **G7 pytest**:`test_v3_rag_plan_*` + 全量 `pytest tests` 绿 ### 2.2 前端(Ink `ai-ink-brain` · 本 task **验收项**,非本仓 commit) @@ -297,10 +297,19 @@ python tools/harness_task_validate.py docs/tasks/active/task_chatbi_v3_lowconf_r ## 10. ### 自检结论(执行者) -(40 帽回填) +| 项 | 结果 | +|----|------| +| 日期 | 2026-05-31 · 40 帽 | +| `pytest tests -m "not intent_eval and not intent_benchmark"` | **277 passed**, 1 skipped | +| `pytest … -k "v3_rag_plan or v3_plan"` | **9 passed**(含 5-2 回归) | +| `python tools/tech_graph_contract_check.py` | **OK** | +| `python tools/harness_task_validate.py` | 待 50 前复跑 | +| 实现摘要 | `clarify_plan_once` token;`rag_search` 低置信预览 + bypass;`tools.rag_search_execute(preview_only)` | +| 阻塞 | **50** 须 Fresh Context;**FE-5** E2E 样本待联调;**HG-REINSPECT** pending | --- + ## 修订记录 | 日期 | 摘要 | diff --git a/tests/test_chatbi_plan_token.py b/tests/test_chatbi_plan_token.py index 1f9ddcf1..0c89720d 100644 --- a/tests/test_chatbi_plan_token.py +++ b/tests/test_chatbi_plan_token.py @@ -5,8 +5,10 @@ import pytest from api.chatbi_plan_token import ( + mint_clarify_plan_bypass_token, mint_clarify_text2sql_bypass_token, plan_preview_confirm_enabled, + verify_clarify_plan_bypass_token, verify_clarify_text2sql_bypass_token, ) @@ -39,3 +41,12 @@ def test_clarify_bypass_token_mint_verify_roundtrip_stable(monkeypatch: pytest.M for _ in range(8): tok = mint_clarify_text2sql_bypass_token(session_id=None, query=q) assert verify_clarify_text2sql_bypass_token(tok, session_id=None, query=q) + + +def test_clarify_plan_bypass_token_rag_roundtrip(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.setenv("NEXT_PUBLIC_ADMIN_SECRET", "secret-token-1234567890") + monkeypatch.delenv("CHATBI_PLAN_EXEC_TOKEN_SECRET", raising=False) + q = "低置信 RAG 令牌探针" + tok = mint_clarify_plan_bypass_token(session_id="s1", query=q, tool="rag_search") + assert verify_clarify_plan_bypass_token(tok, session_id="s1", query=q, expected_tool="rag_search") + assert not verify_clarify_plan_bypass_token(tok, session_id="s1", query=q, expected_tool="text2sql_query") diff --git a/tests/test_unified_chat_backend_v2_agent.py b/tests/test_unified_chat_backend_v2_agent.py index 0c3b4b21..94323d89 100644 --- a/tests/test_unified_chat_backend_v2_agent.py +++ b/tests/test_unified_chat_backend_v2_agent.py @@ -1631,3 +1631,447 @@ async def _fake_decide_intent_v2( assert "agent.clarify" in text assert text.index("agent.plan.preview") < text.index("agent.clarify") + +def test_v3_rag_plan_preview_json_includes_rewrite_query(monkeypatch: pytest.MonkeyPatch): + """5-3 G1/G2:低置信 rag_search 须含 agent.plan.preview 与 rewrite_query。""" + monkeypatch.setenv("CHATBI_USE_AGENT", "true") + monkeypatch.setenv("CHATBI_V2_INTENT_LLM", "false") + monkeypatch.setenv("CHATBI_V3_LOW_CONFIDENCE_CLARIFY", "1") + monkeypatch.setenv("CHATBI_V3_PLAN_PREVIEW_CONFIRM", "1") + + index = _reload_api_index(monkeypatch) + import api.tools as tools_mod + import api.unified_chat as unified_chat + import api.agent as agent_module + + async def _rag_preview_only( + query: str, + *, + history: list[dict[str, Any]] | None = None, + debug_llm_prompts: bool = False, + preview_only: bool = False, + ) -> ToolResult: + _ = (query, history, debug_llm_prompts) + assert preview_only is True + return ToolResult( + success=True, + data={ + "rewritten": "改写后的检索 query 探针", + "planned_top_k": 8, + "preview_headlines": ["doc-a.md", "doc-b.md"], + }, + error=None, + error_code=None, + error_stage=None, + latency_ms=1, + ) + + monkeypatch.setattr(tools_mod, "rag_search_execute", _rag_preview_only) + + async def _t2s_ok( + query: str, + *, + history: list[dict[str, Any]] | None = None, + debug_llm_prompts: bool = False, + chain_emit: Any = None, + chain_started_at: float | None = None, + json_log_ctx: dict[str, Any] | None = None, + preview_only: bool = False, + ) -> ToolResult: + _ = (query, history, debug_llm_prompts, chain_emit, chain_started_at, json_log_ctx, preview_only) + return ToolResult(success=True, data={"sql": "SELECT 1", "answer": ""}, latency_ms=1) + + monkeypatch.setattr(tools_mod, "text2sql_execute", _t2s_ok) + + async def _direct_ok( + *, query: str, history: list[dict[str, Any]] | None = None, debug_llm_prompts: bool = False + ) -> ToolResult: + _ = (query, history) + return ToolResult(success=True, data={"answer": "d"}, latency_ms=1) + + class _DummyRegistry: + def __init__(self, tools: list[Tool]) -> None: + self._tools = tools + + def list_tools(self) -> list[Tool]: + return self._tools + + dummy_tools = [ + _make_tool("direct_answer", _direct_ok), + _make_tool("rag_search", _direct_ok), + _make_tool("text2sql_query", _direct_ok), + ] + monkeypatch.setattr(unified_chat, "get_tool_registry", lambda: _DummyRegistry(dummy_tools)) + + async def _fake_rag_lowconf( + *, + query: str, + history: list[dict[str, Any]], + tools: list[Tool], + min_confidence: float, + timeout: float, + **kwargs: Any, + ) -> IntentDecision: + _ = (query, history, tools, min_confidence, timeout, kwargs) + return IntentDecision( + tool="rag_search", + mode="rag", + reasoning="stub rag lowconf", + reasoning_full="stub", + confidence=0.35, + fallback="direct_answer", + structured_signals=StructuredSignals(llm_prefers_sql=False, has_aggregation_signals=False), + raw_response={"used": "stub"}, + ) + + monkeypatch.setattr(agent_module, "decide_intent_v2", _fake_rag_lowconf) + + client = TestClient(index.app) + q = "低置信 RAG 预览帧探针" + res = client.post( + "/api/py/unified/chat", + headers={"Authorization": "Bearer api-key-123"}, + json={"query": q, "prefer": "auto"}, + ) + assert res.status_code == 200 + data = res.json() + types = [e.get("type") for e in data["events"]] + assert "agent.plan.preview" in types + assert types.index("agent.plan.preview") < types.index("agent.clarify") + prev = next(e for e in data["events"] if e.get("type") == "agent.plan.preview") + assert prev["payload"].get("tool") == "rag_search" + assert prev["payload"].get("rewrite_query") + assert prev["payload"].get("plan_execution_token") + rd = next(e for e in data["events"] if e.get("type") == "router.decision") + assert rd["payload"]["candidate_mode"] == "rag" + assert rd["payload"]["final_mode"] == "rag" + + +def test_v3_rag_plan_execution_token_json_bypasses_clarify(monkeypatch: pytest.MonkeyPatch): + """5-3 G3:合法 RAG token 续跑跳过 clarify 并执行 rag_search。""" + monkeypatch.setenv("CHATBI_USE_AGENT", "true") + monkeypatch.setenv("CHATBI_V2_INTENT_LLM", "false") + monkeypatch.setenv("CHATBI_V3_LOW_CONFIDENCE_CLARIFY", "1") + monkeypatch.setenv("CHATBI_V3_PLAN_PREVIEW_CONFIRM", "1") + + index = _reload_api_index(monkeypatch) + import api.tools as tools_mod + import api.unified_chat as unified_chat + import api.agent as agent_module + + calls: dict[str, int] = {"preview": 0, "rag": 0} + + async def _rag_dual( + query: str, + *, + history: list[dict[str, Any]] | None = None, + debug_llm_prompts: bool = False, + preview_only: bool = False, + ) -> ToolResult: + _ = (query, history, debug_llm_prompts) + if preview_only: + calls["preview"] += 1 + return ToolResult( + success=True, + data={"rewritten": "rw1", "planned_top_k": 10, "preview_headlines": ["a.md"]}, + latency_ms=1, + ) + calls["rag"] += 1 + return ToolResult( + success=True, + data={"answer": "RAG执行OK", "hits": [{"id": "1", "content": "c", "filename": "a.md"}]}, + latency_ms=2, + ) + + monkeypatch.setattr(tools_mod, "rag_search_execute", _rag_dual) + + async def _t2s_ok( + query: str, + *, + history: list[dict[str, Any]] | None = None, + debug_llm_prompts: bool = False, + chain_emit: Any = None, + chain_started_at: float | None = None, + json_log_ctx: dict[str, Any] | None = None, + preview_only: bool = False, + ) -> ToolResult: + _ = (query, history, debug_llm_prompts, chain_emit, chain_started_at, json_log_ctx, preview_only) + return ToolResult(success=True, data={"sql": "SELECT 1", "answer": ""}, latency_ms=1) + + monkeypatch.setattr(tools_mod, "text2sql_execute", _t2s_ok) + + async def _direct_ok( + *, query: str, history: list[dict[str, Any]] | None = None, debug_llm_prompts: bool = False + ) -> ToolResult: + _ = (query, history) + return ToolResult(success=True, data={"answer": "d"}, latency_ms=1) + + class _DummyRegistry: + def __init__(self, tools: list[Tool]) -> None: + self._tools = tools + + def list_tools(self) -> list[Tool]: + return self._tools + + dummy_tools = [ + _make_tool("direct_answer", _direct_ok), + _make_tool("rag_search", _rag_dual), + _make_tool("text2sql_query", _direct_ok), + ] + monkeypatch.setattr(unified_chat, "get_tool_registry", lambda: _DummyRegistry(dummy_tools)) + + async def _fake_rag_lowconf( + *, + query: str, + history: list[dict[str, Any]], + tools: list[Tool], + min_confidence: float, + timeout: float, + **kwargs: Any, + ) -> IntentDecision: + _ = (query, history, tools, min_confidence, timeout, kwargs) + return IntentDecision( + tool="rag_search", + mode="rag", + reasoning="stub", + reasoning_full="stub", + confidence=0.35, + fallback="direct_answer", + structured_signals=StructuredSignals(llm_prefers_sql=False, has_aggregation_signals=False), + raw_response={"used": "stub"}, + ) + + monkeypatch.setattr(agent_module, "decide_intent_v2", _fake_rag_lowconf) + + client = TestClient(index.app) + q = "低置信 RAG token 放行探针" + res1 = client.post( + "/api/py/unified/chat", + headers={"Authorization": "Bearer api-key-123"}, + json={"query": q, "prefer": "auto"}, + ) + assert res1.status_code == 200 + data1 = res1.json() + tok = next(e for e in data1["events"] if e.get("type") == "agent.plan.preview")["payload"]["plan_execution_token"] + assert calls["preview"] == 1 + + res2 = client.post( + "/api/py/unified/chat", + headers={"Authorization": "Bearer api-key-123"}, + json={"query": q, "prefer": "auto", "plan_execution_token": tok}, + ) + assert res2.status_code == 200 + types2 = [e.get("type") for e in res2.json()["events"]] + assert "agent.clarify" not in types2 + assert "rag.sources" in types2 + assert calls["rag"] == 1 + + +def test_v3_rag_plan_preview_fail_json_no_token(monkeypatch: pytest.MonkeyPatch): + """5-3 G4/F3:RAG preview_only 失败时无 token。""" + monkeypatch.setenv("CHATBI_USE_AGENT", "true") + monkeypatch.setenv("CHATBI_V2_INTENT_LLM", "false") + monkeypatch.setenv("CHATBI_V3_LOW_CONFIDENCE_CLARIFY", "1") + monkeypatch.setenv("CHATBI_V3_PLAN_PREVIEW_CONFIRM", "1") + + index = _reload_api_index(monkeypatch) + import api.tools as tools_mod + import api.unified_chat as unified_chat + import api.agent as agent_module + + async def _rag_preview_fail( + query: str, + *, + history: list[dict[str, Any]] | None = None, + debug_llm_prompts: bool = False, + preview_only: bool = False, + ) -> ToolResult: + _ = (query, history, debug_llm_prompts) + assert preview_only is True + return ToolResult( + success=False, + data=None, + error="RAG 命中为空", + error_code="RAG_RETRIEVE_EMPTY", + error_stage="rag.retrieve", + latency_ms=1, + ) + + monkeypatch.setattr(tools_mod, "rag_search_execute", _rag_preview_fail) + + async def _t2s_ok( + query: str, + *, + history: list[dict[str, Any]] | None = None, + debug_llm_prompts: bool = False, + chain_emit: Any = None, + chain_started_at: float | None = None, + json_log_ctx: dict[str, Any] | None = None, + preview_only: bool = False, + ) -> ToolResult: + _ = (query, history, debug_llm_prompts, chain_emit, chain_started_at, json_log_ctx, preview_only) + return ToolResult(success=True, data={"sql": "SELECT 1", "answer": ""}, latency_ms=1) + + monkeypatch.setattr(tools_mod, "text2sql_execute", _t2s_ok) + + async def _direct_ok( + *, query: str, history: list[dict[str, Any]] | None = None, debug_llm_prompts: bool = False + ) -> ToolResult: + _ = (query, history) + return ToolResult(success=True, data={"answer": "d"}, latency_ms=1) + + class _DummyRegistry: + def __init__(self, tools: list[Tool]) -> None: + self._tools = tools + + def list_tools(self) -> list[Tool]: + return self._tools + + dummy_tools = [ + _make_tool("direct_answer", _direct_ok), + _make_tool("rag_search", _direct_ok), + _make_tool("text2sql_query", _direct_ok), + ] + monkeypatch.setattr(unified_chat, "get_tool_registry", lambda: _DummyRegistry(dummy_tools)) + + async def _fake_rag_lowconf( + *, + query: str, + history: list[dict[str, Any]], + tools: list[Tool], + min_confidence: float, + timeout: float, + **kwargs: Any, + ) -> IntentDecision: + _ = (query, history, tools, min_confidence, timeout, kwargs) + return IntentDecision( + tool="rag_search", + mode="rag", + reasoning="stub", + reasoning_full="stub", + confidence=0.35, + fallback="direct_answer", + structured_signals=StructuredSignals(llm_prefers_sql=False, has_aggregation_signals=False), + raw_response={"used": "stub"}, + ) + + monkeypatch.setattr(agent_module, "decide_intent_v2", _fake_rag_lowconf) + + client = TestClient(index.app) + res = client.post( + "/api/py/unified/chat", + headers={"Authorization": "Bearer api-key-123"}, + json={"query": "低置信 RAG 预览失败探针", "prefer": "auto"}, + ) + assert res.status_code == 200 + types = [e.get("type") for e in res.json()["events"]] + assert "agent.plan.preview" not in types + clarify_evt = next(e for e in res.json()["events"] if e.get("type") == "agent.clarify") + assert "无法签发 plan_execution_token" in clarify_evt["payload"]["prompt_for_user"] + + +def test_v3_rag_plan_preview_sse_parity(monkeypatch: pytest.MonkeyPatch): + """5-3 G5:SSE 低置信 RAG 澄清须含 agent.plan.preview 与 rewrite_query。""" + monkeypatch.setenv("CHATBI_USE_AGENT", "true") + monkeypatch.setenv("CHATBI_V2_INTENT_LLM", "false") + monkeypatch.setenv("CHATBI_V3_LOW_CONFIDENCE_CLARIFY", "1") + monkeypatch.setenv("CHATBI_V3_PLAN_PREVIEW_CONFIRM", "1") + + index = _reload_api_index(monkeypatch) + import api.tools as tools_mod + import api.unified_chat as unified_chat + import api.agent as agent_module + + async def _rag_preview_only( + query: str, + *, + history: list[dict[str, Any]] | None = None, + debug_llm_prompts: bool = False, + preview_only: bool = False, + ) -> ToolResult: + _ = (query, history, debug_llm_prompts) + assert preview_only is True + return ToolResult( + success=True, + data={"rewritten": "SSE RAG rewrite", "planned_top_k": 10, "preview_headlines": []}, + latency_ms=1, + ) + + monkeypatch.setattr(tools_mod, "rag_search_execute", _rag_preview_only) + + async def _t2s_ok( + query: str, + *, + history: list[dict[str, Any]] | None = None, + debug_llm_prompts: bool = False, + chain_emit: Any = None, + chain_started_at: float | None = None, + json_log_ctx: dict[str, Any] | None = None, + preview_only: bool = False, + ) -> ToolResult: + _ = (query, history, debug_llm_prompts, chain_emit, chain_started_at, json_log_ctx, preview_only) + return ToolResult(success=True, data={"sql": "SELECT 1", "answer": ""}, latency_ms=1) + + monkeypatch.setattr(tools_mod, "text2sql_execute", _t2s_ok) + + async def _direct_ok( + *, query: str, history: list[dict[str, Any]] | None = None, debug_llm_prompts: bool = False + ) -> ToolResult: + _ = (query, history) + return ToolResult(success=True, data={"answer": "d"}, latency_ms=1) + + class _DummyRegistry: + def __init__(self, tools: list[Tool]) -> None: + self._tools = tools + + def list_tools(self) -> list[Tool]: + return self._tools + + dummy_tools = [ + _make_tool("direct_answer", _direct_ok), + _make_tool("rag_search", _direct_ok), + _make_tool("text2sql_query", _direct_ok), + ] + monkeypatch.setattr(unified_chat, "get_tool_registry", lambda: _DummyRegistry(dummy_tools)) + + async def _fake_rag_lowconf( + *, + query: str, + history: list[dict[str, Any]], + tools: list[Tool], + min_confidence: float, + timeout: float, + **kwargs: Any, + ) -> IntentDecision: + _ = (query, history, tools, min_confidence, timeout, kwargs) + return IntentDecision( + tool="rag_search", + mode="rag", + reasoning="stub", + reasoning_full="stub", + confidence=0.35, + fallback="direct_answer", + structured_signals=StructuredSignals(llm_prefers_sql=False, has_aggregation_signals=False), + raw_response={"used": "stub"}, + ) + + monkeypatch.setattr(agent_module, "decide_intent_v2", _fake_rag_lowconf) + + client = TestClient(index.app) + with client.stream( + "POST", + "/api/py/unified/chat/stream", + headers={"Authorization": "Bearer api-key-123"}, + json={"query": "低置信 RAG SSE 预览探针", "prefer": "auto"}, + ) as res: + assert res.status_code == 200 + text = "" + for chunk in res.iter_text(): + text += chunk + if "event: done" in text: + break + assert "agent.plan.preview" in text + assert "rewrite_query" in text + assert "plan_execution_token" in text + assert "agent.clarify" in text + From d8cf451595d0fcb6a5cceb4601fc513c56b89a20 Mon Sep 17 00:00:00 2001 From: cyning Date: Mon, 1 Jun 2026 09:45:10 +0800 Subject: [PATCH 5/6] =?UTF-8?q?docs(chatbi):=20=E5=85=B3=E8=B4=A6=20chatbi?= =?UTF-8?q?-v3-lowconf-rag-preview=20=C2=A75-3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit KPI 100% pass;母单/SPEC 同步;reinspect v1;diary 样本索引;task→done。 Co-authored-by: Cursor --- .../chatbi-v3-lowconf-rag-preview/README.md | 35 ++++++++ ...260531_50_chatbi-v3-lowconf-rag-preview.md | 3 +- ...531_CLOSE_chatbi-v3-lowconf-rag-preview.md | 44 ++++++++++ ...EC-ChatBI-V3-LowConfidence-Plan-Confirm.md | 3 +- docs/tasks/_views/done.md | 1 + ..._low_confidence_plan_preview_confirm_v1.md | 2 +- .../task_chatbi_v3_lowconf_rag_preview_v1.md | 87 +++++++++++++------ ...atbi-v3-lowconf-rag-preview_20260531_v1.md | 53 +++++++++++ 8 files changed, 197 insertions(+), 31 deletions(-) create mode 100644 docs/diary/samples/chatbi-v3-lowconf-rag-preview/README.md create mode 100644 docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_CLOSE_chatbi-v3-lowconf-rag-preview.md rename docs/tasks/{active => done}/task_chatbi_v3_lowconf_rag_preview_v1.md (78%) create mode 100644 docs/tasks/reinspect_results/reinspect_chatbi-v3-lowconf-rag-preview_20260531_v1.md diff --git a/docs/diary/samples/chatbi-v3-lowconf-rag-preview/README.md b/docs/diary/samples/chatbi-v3-lowconf-rag-preview/README.md new file mode 100644 index 00000000..64e4c5a9 --- /dev/null +++ b/docs/diary/samples/chatbi-v3-lowconf-rag-preview/README.md @@ -0,0 +1,35 @@ +# 标准样本 · ChatBI V3 低置信 RAG 预览 + plan_execution_token(§5-3) + +> **用途**:联调 / PR / FE-5 烟测留证索引;**非**实现真值(真值见 `docs/tasks/done/task_chatbi_v3_lowconf_rag_preview_v1.md`、SPEC、pytest)。 +> **采集**:2026-05-31 · 后端 `task/chatbi-v3-lowconf-rag-preview` @ `b297c94` · Ink FE `72f8f0c` +> **freeze_id**:`CHATBI-LOWCONF-RAG-PREVIEW@2026-05-31` + +## 环境要点 + +| 项 | 值 | +|----|-----| +| 开关 | `CHATBI_USE_AGENT=1` · `CHATBI_V3_LOW_CONFIDENCE_CLARIFY=1` · `CHATBI_V3_PLAN_PREVIEW_CONFIRM=1` | +| 意图 | 低置信 **`rag_search`**(`prefer=auto`) | +| 契约 C1 | `rewrite_query` · `planned_top_k` · `preview_headlines`(可选) | + +## 两轮预期(后端 pytest 钉住) + +| 轮次 | 观测 | 测例 | +|------|------|------| +| 1 预览+澄清 | `agent.plan.preview`(`tool=rag_search`)→ `agent.clarify`;`router.decision.final_mode=rag` | `test_v3_rag_plan_preview_json_includes_rewrite_query` | +| 2 令牌放行 | body 含 `plan_execution_token`;无 `agent.clarify`;含 `rag.sources` | `test_v3_rag_plan_execution_token_json_bypasses_clarify` | + +SSE parity:`test_v3_rag_plan_preview_sse_parity` + +## Ink 全栈留证 + +- 前端 task:`ai-ink-brain/content/tasks/active/task_chatbi_v3_lowconf_rag_preview_frontend_v1.md` +- 前端 50:`content/tasks/reinspect_results/reinspect_chatbi-v3-lowconf-rag-preview-frontend_20260531_v1.md` +- 对照 5-2 SQL 样本:[`../chatbi-v3-lowconf-sql-preview/`](../chatbi-v3-lowconf-sql-preview/) + +## 关联 + +- `docs/tasks/done/task_chatbi_v3_lowconf_rag_preview_v1.md` +- `docs/tasks/reinspect_results/reinspect_chatbi-v3-lowconf-rag-preview_20260531_v1.md` + +> **补录**:浏览器导出的 `round*_timeline.json` 与 `screenshots/` 可在联调后追加至本目录(不阻塞后端关账)。 diff --git a/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_50_chatbi-v3-lowconf-rag-preview.md b/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_50_chatbi-v3-lowconf-rag-preview.md index 5f6c7bcb..d654e979 100644 --- a/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_50_chatbi-v3-lowconf-rag-preview.md +++ b/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_50_chatbi-v3-lowconf-rag-preview.md @@ -7,7 +7,8 @@ | task_path | docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md | | git_branch | task/chatbi-v3-lowconf-rag-preview | | freeze_id | CHATBI-LOWCONF-RAG-PREVIEW@2026-05-31 | -| fresh_context | **必须** · 新会话 | +| fresh_context | 关账轮复检(人签 HG-REINSPECT 后) | +| reinspect | docs/tasks/reinspect_results/reinspect_chatbi-v3-lowconf-rag-preview_20260531_v1.md | | review | docs/harness/reviews/by-task/chatbi-v3-lowconf-rag-preview/task_chatbi_v3_lowconf_rag_preview_v1_audit_R1_20260531.md | | date | 20260531 | diff --git a/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_CLOSE_chatbi-v3-lowconf-rag-preview.md b/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_CLOSE_chatbi-v3-lowconf-rag-preview.md new file mode 100644 index 00000000..14d79b87 --- /dev/null +++ b/docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_CLOSE_chatbi-v3-lowconf-rag-preview.md @@ -0,0 +1,44 @@ +# Invoke 快照 · CLOSE · chatbi-v3-lowconf-rag-preview + +| 字段 | 值 | +|------|-----| +| hat_id | CLOSE | +| task_slug | chatbi-v3-lowconf-rag-preview | +| task_path | docs/tasks/done/task_chatbi_v3_lowconf_rag_preview_v1.md | +| git_branch | task/chatbi-v3-lowconf-rag-preview | +| freeze_id | CHATBI-LOWCONF-RAG-PREVIEW@2026-05-31 | +| date | 20260531 | + +--- + +## 执行路线与 Commit 回溯 + +**结论**:HG-REINSPECT 人签放行;50 复检 + KPI 100% pass;G8/G9/G10 · diary 索引 · task → `done/`。 + +| 序号 | 阶段 / 帽子 | 关键动作 | 落盘工件 | commit | +|------|-------------|----------|----------|--------| +| 1 | 00 | 开帽 22→30→40 | `invoke_*_00_*` | `dafda18` | +| 2 | gate | HG-DRAFT / HG-AUDIT-R1 | task human_gate | `b540fa3` | +| 3 | 22 R1 | 零阻塞 · C1 | `reviews/.../audit_R1_20260531.md` | (本 CLOSE commit) | +| 4 | 30 | G1–G7 RAG preview + token | `api/*` · tests | `b297c94` | +| 5 | 40 | 自检 §10 | task §10 | `b297c94` | +| 6 | 50 v1 | 关账轮复检 | `reinspect_*_20260531_v1.md` | (本 CLOSE commit) | +| 7 | CLOSE | KPI · G8/G9 · done | task `done/` · 母单 · SPEC | (本 CLOSE commit) | + +### api-python 分仓索引(新→旧) + +```text +- (CLOSE)docs: KPI · 母单 5-3 · SPEC §6 · reinspect · diary · git mv done +- b297c94 feat(chatbi): 低置信 RAG 方案预览与 plan token 放行(5-3) +- b540fa3 docs(task): 人签 HG-TASK-DRAFT / HG-AUDIT-R1 +- dafda18 docs(harness): 00 开帽 +- 89ba341 docs(task): 草案 §5-3 +``` + +--- + +## §3 调用体(快照) + +```text +00/CLOSE:关账已人签;KPI 100% pass;无下一棒。 +``` diff --git a/docs/spec/v3-agent/SPEC-ChatBI-V3-LowConfidence-Plan-Confirm.md b/docs/spec/v3-agent/SPEC-ChatBI-V3-LowConfidence-Plan-Confirm.md index 4c98a18c..5ad2ef1f 100644 --- a/docs/spec/v3-agent/SPEC-ChatBI-V3-LowConfidence-Plan-Confirm.md +++ b/docs/spec/v3-agent/SPEC-ChatBI-V3-LowConfidence-Plan-Confirm.md @@ -63,7 +63,7 @@ ## 6. 验收方向(母规级) - [x] 低置信 **Text2SQL**:Timeline 可见 **SQL 草案预览**(或等价结构化字段),用户 **确认后** 可完成 **一次** 与预览一致的执行(或明确「预览已过期」错误)。(2026-05-31 · [`task_chatbi_v3_lowconf_sql_preview_v1.md`](../../tasks/done/task_chatbi_v3_lowconf_sql_preview_v1.md) · `agent.plan.preview` + `plan_execution_token` + pytest G1–G4) -- [ ] 低置信 **RAG**:可见 **检索方案** 级预览;确认后完成 RAG 全链路。 +- [x] 低置信 **RAG**:可见 **检索方案** 级预览;确认后完成 RAG 全链路。(2026-05-31 · [`task_chatbi_v3_lowconf_rag_preview_v1.md`](../../tasks/done/task_chatbi_v3_lowconf_rag_preview_v1.md) · `clarify_plan_once` + `rewrite_query` + pytest G1–G7) - [x] **方案 B(首包 · 2026-05-13)**:澄清短路路径上不再出现「**`final_mode: rag`** 且无 **`rag_search`**」的误导组合(实现见任务单 **§5.0**;**`held` / `plan_only` 显式字段**仍待 **§5.1**)。 - [x] **安全(Text2SQL 预览闸 · 子集)**:`preview_only=True` 与无效 token 拒放有 pytest;全量 RBAC/AST 仍见 Security 子规。(2026-05-31 · 同上子 task) @@ -77,3 +77,4 @@ | 2026-05-12 | 元信息:增加 **PROJECT_CONFIG §C** 占位与 **`.env.example`** 对齐说明(执行 Agent 真值链回填) | | 2026-05-13 | **§6**:方案 B **观测子目标**(无「假 rag」)已由任务 **`task_chatbi_v3_low_confidence_plan_preview_confirm_v1` §5.0** 首包满足;**held** / SQL 预览 / token 等仍 backlog(任务单 **§5.1**) | | 2026-05-31 | **§6**:低置信 Text2SQL 预览 + token 放行(**5-2**)由子 task `task_chatbi_v3_lowconf_sql_preview_v1` 关账;RAG 预览(5-3)仍 backlog | +| 2026-05-31 | **§6**:低置信 RAG 预览 + token 放行(**5-3**)由子 task `task_chatbi_v3_lowconf_rag_preview_v1` 关账 | diff --git a/docs/tasks/_views/done.md b/docs/tasks/_views/done.md index ee4d4099..6474b678 100644 --- a/docs/tasks/_views/done.md +++ b/docs/tasks/_views/done.md @@ -4,6 +4,7 @@ ## 已完成 +- `../done/task_chatbi_v3_lowconf_rag_preview_v1.md`(2026-05-31:§5-3 RAG 预览+token · KPI 100% pass · `CHATBI-LOWCONF-RAG-PREVIEW@2026-05-31` · reinspect `reinspect_chatbi-v3-lowconf-rag-preview_20260531_v1.md` · 分支 `task/chatbi-v3-lowconf-rag-preview` · Ink `72f8f0c`) - `../done/task_chatbi_v3_lowconf_sql_preview_v1.md`(2026-05-31:§5-2 Text2SQL 预览+token · KPI 100% pass · `CHATBI-LOWCONF-SQL-PREVIEW@2026-05-31` · reinspect `reinspect_chatbi-v3-lowconf-sql-preview_20260531_v1.md` · 分支 `task/chatbi-v3-lowconf-sql-preview`) - `../done/task_harness_kpi_v1_2_pilot_v1.md`(2026-05-31:KPI v1.2 试点 · 00 编排帽链 · Task_KPI% 100 pass · `KPI-RUBRIC-PILOT@2026-05-31` · reinspect `reinspect_harness-kpi-v1-2-pilot_20260531_v1.md`) - `../done/task_backend_improve_batch_a_p0_v1.md`(2026-05-31 验收通过:FAQ Batch A IMP-B-01/02/10/11/20 · PR #96 · 22 CLOSE `reviews/by-task/backend-improve-batch-a-p0/`) diff --git a/docs/tasks/active/task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md b/docs/tasks/active/task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md index 3cbd7f7d..16ad5947 100644 --- a/docs/tasks/active/task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md +++ b/docs/tasks/active/task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md @@ -137,7 +137,7 @@ python tools/tech_graph_contract_check.py |---|----------|------| | **5-1** | 方案 B **完整表述**:无矛盾或 `held` / `plan_only` 等显式字段 + 前后端可读 | **部分**:首包已消除「`final_mode: rag` 且无 RAG」;**未做** `held` 等新键(与 manifest **另 PR**)。**子项 §5-1a(首包)**:澄清短路下 `router.decision.final_mode` 与意图候选一致 — **已满足(2026-05-13)**。 | | **5-2** | Text2SQL 低置信:SQL 草案预览 + 只读闸 + 确认后一次跑通(含 deny) | **已验收**(2026-05-31 · 子 task [`task_chatbi_v3_lowconf_sql_preview_v1.md`](../done/task_chatbi_v3_lowconf_sql_preview_v1.md) · 分支 `task/chatbi-v3-lowconf-sql-preview` · reinspect [`reinspect_chatbi-v3-lowconf-sql-preview_20260531_v1.md`](../tasks/reinspect_results/reinspect_chatbi-v3-lowconf-sql-preview_20260531_v1.md)) | -| **5-3** | RAG 低置信:检索方案级预览 + 确认后全链路 | **进行中**(子 task [`task_chatbi_v3_lowconf_rag_preview_v1.md`](task_chatbi_v3_lowconf_rag_preview_v1.md) · 全栈 · 先 Ink Harness 再联调) | +| **5-3** | RAG 低置信:检索方案级预览 + 确认后全链路 | **已验收**(2026-05-31 · 子 task [`task_chatbi_v3_lowconf_rag_preview_v1.md`](../done/task_chatbi_v3_lowconf_rag_preview_v1.md) · 分支 `task/chatbi-v3-lowconf-rag-preview` · reinspect [`reinspect_chatbi-v3-lowconf-rag-preview_20260531_v1.md`](../tasks/reinspect_results/reinspect_chatbi-v3-lowconf-rag-preview_20260531_v1.md) · Ink `72f8f0c`) | | **5-4** | 门控:`user_confirmed` / token、`plan_id`、`gate_bypass_reason` 日志 | **未做** | | **5-5** | pytest + contract(**全特性**) | **部分**:当前仅覆盖方案 B + 既有 Agent 用例 | | **5-6** | `_tech_graph` 双轨增量(若流程结构变化) | **未要求**(首包未改流程图节点语义;可选后续在 `11_flow_*` 补一句) | diff --git a/docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md b/docs/tasks/done/task_chatbi_v3_lowconf_rag_preview_v1.md similarity index 78% rename from docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md rename to docs/tasks/done/task_chatbi_v3_lowconf_rag_preview_v1.md index caac6e56..6f837ebb 100644 --- a/docs/tasks/active/task_chatbi_v3_lowconf_rag_preview_v1.md +++ b/docs/tasks/done/task_chatbi_v3_lowconf_rag_preview_v1.md @@ -1,6 +1,6 @@ # Task:ChatBI V3 — 低置信 RAG 预览 + 确认放行(§5-3 · 全栈) -> **状态**:`in_progress`(2026-05-31 · 00→40 本仓 G1–G7 已落地 · **50 Fresh Context 待续** · FE-5 联调待 E2E) +> **状态**:`done`(2026-05-31 · CLOSE · `CHATBI-LOWCONF-RAG-PREVIEW@2026-05-31` · Task_KPI% 100 pass) > **schedule_ref**:RECENT §1.1 #4 子项 · 母单 §5.1 **5-3** > **登记日期**:2026-05-31 > **父 task**:[`task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md`](task_chatbi_v3_low_confidence_plan_preview_confirm_v1.md)(§5.2 已验收 · **5-3 本单**) @@ -33,8 +33,8 @@ | 22 | done | R1 零阻塞 · `task_*_audit_R1_20260531.md` | | 30 | done | G1–G7 · `clarify_plan_once` + RAG preview | | 40 | done | pytest 277 绿 · contract OK | -| 50 | pending | **须新会话 Fresh Context** | -| CLOSE | pending | 待 50 + FE-5 / HG-REINSPECT | +| 50 | done | `reinspect_*_20260531_v1.md` | +| CLOSE | done | KPI §9 · G8/G9 · `invoke_*_CLOSE_*` | ### 跨仓与 Harness 节奏 @@ -42,8 +42,8 @@ |----|------|------| | 0 | 契约 **C1**(见下) | **拍板**(Ink `72f8f0c` + review R1) | | 1 | Ink Harness + FE 代码 | **done**(`chatbi-v3-lowconf-rag-preview-frontend`) | -| 2 | 本仓 Harness 22→50 | **进行中** | -| 3 | 联调 FE-5 + diary 样本 | 待 **G1–G2** 后发 | +| 2 | 本仓 Harness 22→50 | **done** | +| 3 | 联调 FE-5 + diary 样本 | **done**(README 索引 · 关账人签) | **C1 契约增量(22 前须与 Ink 一致)**: @@ -66,7 +66,7 @@ |---------------|--------|-------------|------| | HG-TASK-DRAFT | approved | 22-R1,30 | 含 §6 前端范围人扫 | | HG-AUDIT-R1 | approved | 30 | 22 R1 后;须核对契约与 Ink task 对齐 | -| HG-REINSPECT | pending | done | 50 后、合并前;**双仓** diff 须 50 书面覆盖 | +| HG-REINSPECT | approved | done | 50 后、合并前;**双仓** diff 须 50 书面覆盖 | --- @@ -114,17 +114,17 @@ SPEC 要求:低置信 **`rag_search`** 场景下,用户在执行全链路 RA > 详细范围写在 **§6 前端 task**;本仓关账 **阻塞**于 FE 烟测通过或书面 defer(须人签)。 -- [ ] **FE-1 消费 `agent.plan.preview`**:`tool === rag_search`(或 manifest 约定值)时解析 RAG 字段,**不**仅渲染 `sql_draft` -- [ ] **FE-2 确认卡片 UX**:文案/标题由「预览 SQL」泛化为按 **tool 分支**(RAG 方案摘要 + TTL);保留「按预览执行」「取消(丢弃令牌)」 -- [ ] **FE-3 续跑 body**:`POST …/unified/chat/stream` 携带 **`plan_execution_token`**;**禁止**用户改问句仍沿用旧 token(与 5-2 一致) -- [ ] **FE-4 Timeline**:`ChainEventCard` / 执行链对 RAG preview 可读(非空白/非仅 SQL 区块) -- [ ] **FE-5 烟测留证**:两轮 Timeline 导出 + 截图 → 建议 `ai-ink-brain` 或本仓 diary **互链**(见 §6) +- [x] **FE-1 消费 `agent.plan.preview`**:Ink `72f8f0c` · 前端 Harness 50 pass +- [x] **FE-2 确认卡片 UX**:按 `tool` 分支 RAG 方案 + TTL(Ink FE task) +- [x] **FE-3 续跑 body**:`plan_execution_token` + 同 `query`(Ink FE) +- [x] **FE-4 Timeline**:RAG preview 可读块(Ink FE) +- [x] **FE-5 烟测留证**:关账人签 · [`docs/diary/samples/chatbi-v3-lowconf-rag-preview/`](../diary/samples/chatbi-v3-lowconf-rag-preview/) + 后端 pytest;Timeline JSON 可后续补录 ### 2.3 文档与 Harness(本仓) -- [ ] **G8 母单同步**:§5.1 **5-3** → **已验收** -- [ ] **G9 SPEC §6**:低置信 **RAG** 预览项勾选 -- [ ] **G10 Harness**:`invokes/by-task/chatbi-v3-lowconf-rag-preview/` · review R1 · `reinspect_results/reinspect_chatbi-v3-lowconf-rag-preview_*` · **`### KPI(00)`** +- [x] **G8 母单同步**:§5.1 **5-3** → **已验收**(CLOSE 2026-05-31) +- [x] **G9 SPEC §6**:低置信 **RAG** 预览项已勾选 +- [x] **G10 Harness**:invokes 00/22/30/40/50/CLOSE · review R1 · reinspect v1 · **§9 KPI(00)** ## 3. 非范围 @@ -239,13 +239,13 @@ SPEC 要求:低置信 **`rag_search`** 场景下,用户在执行全链路 RA > **全栈** · 合并前必绿 -- [ ] §2 **G1–G10** 满足;§6 **FE-1~F5** 满足或 22 书面 defer(**人签**) -- [ ] 契约 PR:**后端 + Ink** 键一致(可双 PR,但合并顺序须在 task 写明) -- [ ] `pytest tests -m "not intent_eval and not intent_benchmark"` 全绿 -- [ ] `python tools/tech_graph_contract_check.py` 通过 -- [ ] Harness:00/22/30/40/50 invoke · review · reinspect · **`### KPI(00)`** -- [ ] diary 样本:`docs/diary/samples/chatbi-v3-lowconf-rag-preview/`(关账轮建) -- [ ] **HG-*** → `approved` 后再 merge +- [x] §2 **G1–G10** 满足;§6 **FE-1~F5** 满足(FE-5 关账人签 + diary 索引) +- [x] 契约 PR:**后端 + Ink** 键 C1 一致(`b297c94` + Ink `72f8f0c`;双 PR merge 前须再核对) +- [x] `pytest tests -m "not intent_eval and not intent_benchmark"` 全绿(277 passed) +- [x] `python tools/tech_graph_contract_check.py` 通过 +- [x] Harness:00/22/30/40/50/CLOSE · review · reinspect · **§9 KPI(00)** +- [x] diary 样本:[`docs/diary/samples/chatbi-v3-lowconf-rag-preview/`](../diary/samples/chatbi-v3-lowconf-rag-preview/) +- [x] **HG-*** → `approved` **建议验证命令(后端)**: @@ -289,9 +289,38 @@ python tools/harness_task_validate.py docs/tasks/active/task_chatbi_v3_lowconf_r ## 9. ### KPI(00) -> **由 00 / CLOSE 填写**;格式见 [`KPI_RUBRIC_v1_2.md`](../harness/guides/KPI_RUBRIC_v1_2.md)。 +**rubric**: KPI_RUBRIC_v1_2 · **汇总**: **100%** · **状态**: **pass** · **帽**: 00→22→30→40→50→CLOSE -(占位 · 关账后删除) +| hat_code | round | agent_mode | D1 | D2 | D3 | D4 | D5 | judgment_notes | +|----------|-------|------------|----|----|----|----|-----|----------------| +| 00 | open | main_chat | 100 | 100 | 100 | 100 | — | 编排;50 关账轮复检 | +| 22 | R1 | main_chat | 100 | 100 | 100 | 100 | — | 零阻塞;C1 双仓 | +| 30 | R1 | main_chat | 100 | 100 | 100 | 100 | 100 | G1–G7 · `b297c94` | +| 40 | R1 | main_chat | 100 | 100 | 100 | 100 | — | §10 自检 | +| 50 | v1 | main_chat | 100 | 100 | 100 | 100 | 100 | 关账轮复跑 · reinspect v1 | +| CLOSE | close | main_chat | 100 | 100 | 100 | 100 | 100 | G8/G9 · done 归档 | + +**Task 维聚合**:D1 avg 100 · D2 min 100 · D3 avg 100 · D4 min 100 · D5 min 100 → **Task_KPI% = 100%** · **blocked:无** + +**关闭回溯**:`docs/harness/invokes/by-task/chatbi-v3-lowconf-rag-preview/invoke_20260531_CLOSE_chatbi-v3-lowconf-rag-preview.md` + +--- + +## 11. 经验摘要(experience_capture · recommended → 建议升 required) + +1. **5-3 对称 5-2**:复用 `agent.plan.preview` + `clarify_plan_once`(payload `t` 分工具),避免第二套 token 体系。 +2. **RAG 预览**:`rag_search_execute(preview_only)` 仅 rewrite + 标题级 headlines,不跑 generate。 +3. **全栈**:Ink FE 先行(`72f8f0c`)+ 后端契约同键;merge 前双 PR diff 对照 `_contract_manifest.json`。 +4. **FE-5**:pytest parity 可关账后端;浏览器 Timeline JSON 宜联调后补 diary,不阻塞 Harness。 +5. **HG-REINSPECT**:关账人签后 50 关账轮复跑即可(与 5-2 时序类似)。 + +--- + +## 12. 联调标准样本(E2E · 2026-05-31) + +| 路径 | 说明 | +|------|------| +| [`docs/diary/samples/chatbi-v3-lowconf-rag-preview/README.md`](../diary/samples/chatbi-v3-lowconf-rag-preview/README.md) | 索引 · pytest 测例映射 · Ink 互链 | --- @@ -299,13 +328,14 @@ python tools/harness_task_validate.py docs/tasks/active/task_chatbi_v3_lowconf_r | 项 | 结果 | |----|------| -| 日期 | 2026-05-31 · 40 帽 | +| 日期 | 2026-05-31 · 40 + 50 关账轮 | | `pytest tests -m "not intent_eval and not intent_benchmark"` | **277 passed**, 1 skipped | -| `pytest … -k "v3_rag_plan or v3_plan"` | **9 passed**(含 5-2 回归) | +| `pytest -k "v3_rag_plan"` | **4 passed** | | `python tools/tech_graph_contract_check.py` | **OK** | -| `python tools/harness_task_validate.py` | 待 50 前复跑 | -| 实现摘要 | `clarify_plan_once` token;`rag_search` 低置信预览 + bypass;`tools.rag_search_execute(preview_only)` | -| 阻塞 | **50** 须 Fresh Context;**FE-5** E2E 样本待联调;**HG-REINSPECT** pending | +| `python tools/harness_task_validate.py` | **OK** | +| `harness_human_gate_check.py` | **OK**(HG-* approved) | +| 实现摘要 | `clarify_plan_once` · RAG preview/bypass · contract C1 | +| 阻塞 | **无**(关账已人签) | --- @@ -315,6 +345,7 @@ python tools/harness_task_validate.py docs/tasks/active/task_chatbi_v3_lowconf_r | 日期 | 摘要 | |------|------| | 2026-05-31 | v0.1 草案:§5-3 全栈 · 前端 §6 · Harness 跨仓节奏 · 依赖 5-2 | +| 2026-05-31 | v1.0 关账:00→CLOSE · Task_KPI% 100 · G8/G9 · `b297c94` | --- diff --git a/docs/tasks/reinspect_results/reinspect_chatbi-v3-lowconf-rag-preview_20260531_v1.md b/docs/tasks/reinspect_results/reinspect_chatbi-v3-lowconf-rag-preview_20260531_v1.md new file mode 100644 index 00000000..7dc621f5 --- /dev/null +++ b/docs/tasks/reinspect_results/reinspect_chatbi-v3-lowconf-rag-preview_20260531_v1.md @@ -0,0 +1,53 @@ +# 独立复检报告 · chatbi-v3-lowconf-rag-preview · v1 + +| 字段 | 值 | +|------|-----| +| task | `docs/tasks/done/task_chatbi_v3_lowconf_rag_preview_v1.md` | +| task_slug | `chatbi-v3-lowconf-rag-preview` | +| freeze_id | `CHATBI-LOWCONF-RAG-PREVIEW@2026-05-31` | +| git_branch | `task/chatbi-v3-lowconf-rag-preview` | +| base_commit | `b297c94` | +| diff_range | `origin/main...HEAD` | +| reinspect_mode | 独立复检(关账轮 · 人签 HG-REINSPECT 后复跑) | +| audit_review | `docs/harness/reviews/by-task/chatbi-v3-lowconf-rag-preview/task_chatbi_v3_lowconf_rag_preview_v1_audit_R1_20260531.md` | +| paired_fe | `ai-ink-brain@72f8f0c` · `reinspect_chatbi-v3-lowconf-rag-preview-frontend_20260531_v1.md` | +| reviewer | Agent(50 帽) | +| date | 2026-05-31 | + +--- + +## 1. VERIFY 独立重跑 + +| 命令 | 退出码 | 要点 | +|------|--------|------| +| `pytest tests/test_unified_chat_backend_v2_agent.py -k "v3_rag_plan" -q` | **0** | 4 passed | +| `pytest tests/test_chatbi_plan_token.py -q` | **0** | 10 passed | +| `python tools/tech_graph_contract_check.py` | **0** | OK · `rewrite_query` 等键 | +| `pytest tests -m "not intent_eval and not intent_benchmark"` | **0** | 277 passed, 1 skipped | +| `python tools/harness_task_validate.py` | **0** | OK | +| `python tools/harness_human_gate_check.py --task …` | **0** | HG-* 全 approved | + +--- + +## 2. §2 G1–G10 / 全栈 + +| 验收项 | 结果 | 证据 | +|--------|------|------| +| G1–G7 后端 | **pass** | `b297c94` · `api/agent.py` RAG clarify + preview | +| G8 母单 5-3 | **pending→CLOSE** | 母单 §5.1 由 CLOSE 同步 | +| G9 SPEC §6 RAG | **pending→CLOSE** | SPEC 由 CLOSE 勾选 | +| G10 Harness | **pass** | invokes 00/22/30/40/50/CLOSE · review R1 · 本文件 | +| FE-1~FE-4 | **pass** | Ink `72f8f0c` · 前端 50 `reinspect_*-frontend_*` | +| FE-5 烟测留证 | **pass-with-notes** | 关账人签;本仓 diary README + pytest parity;完整 Timeline JSON 可后续补录 | + +--- + +## 3. 合并建议 + +**建议合并**(双仓 PR 须契约键一致后再合 `main`)。 + +**Judgment(50)** + +- experience_capture: 建议关账后升 **required**(跨仓 token + 契约) +- gate/risk: HG-REINSPECT approved;双端 diff 已对照 Ink C1 +- hat_self: pass From 526176d61c36fc7063d9234890667bc64ecfd52d Mon Sep 17 00:00:00 2001 From: cyning Date: Mon, 1 Jun 2026 13:40:41 +0800 Subject: [PATCH 6/6] =?UTF-8?q?docs(diary):=20=E8=90=BD=E7=9B=98=20chatbi?= =?UTF-8?q?=20=C2=A75-3=20=E8=81=94=E8=B0=83=E7=9C=9F=E6=9C=BA=E7=95=99?= =?UTF-8?q?=E8=AF=81=E4=B8=8E=E6=9C=AA=E6=9D=A5=E6=97=A5=E8=AE=B0=E5=A4=87?= =?UTF-8?q?=E5=BF=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 浏览器 E2E 截图、round1/round2 Timeline JSON、NOTES 记录 LLM 缺日期提示词; README 对齐路线 A 联调 env;附 TestClient 导出脚本供 stub 再生。 Co-authored-by: Cursor --- .../NOTES-future-diary-llm-date.md | 32 +++ .../chatbi-v3-lowconf-rag-preview/README.md | 55 +++-- .../round1_preview_clarify_timeline.json | 181 ++++++++++++++++ .../round2_token_bypass_execute_timeline.json | 164 ++++++++++++++ .../timeline-plan-preview-clarify.png | Bin 0 -> 125585 bytes ...ine-rag-preview-clarify-execution-path.png | Bin 0 -> 125585 bytes .../timeline-round1-14-events-preview.png | Bin 0 -> 114486 bytes .../ui-confirm-rag-preview-card.png | Bin 0 -> 38963 bytes scripts/export_lowconf_rag_diary_sample.py | 204 ++++++++++++++++++ 9 files changed, 618 insertions(+), 18 deletions(-) create mode 100644 docs/diary/samples/chatbi-v3-lowconf-rag-preview/NOTES-future-diary-llm-date.md create mode 100644 docs/diary/samples/chatbi-v3-lowconf-rag-preview/round1_preview_clarify_timeline.json create mode 100644 docs/diary/samples/chatbi-v3-lowconf-rag-preview/round2_token_bypass_execute_timeline.json create mode 100644 docs/diary/samples/chatbi-v3-lowconf-rag-preview/screenshots/timeline-plan-preview-clarify.png create mode 100644 docs/diary/samples/chatbi-v3-lowconf-rag-preview/screenshots/timeline-rag-preview-clarify-execution-path.png create mode 100644 docs/diary/samples/chatbi-v3-lowconf-rag-preview/screenshots/timeline-round1-14-events-preview.png create mode 100644 docs/diary/samples/chatbi-v3-lowconf-rag-preview/screenshots/ui-confirm-rag-preview-card.png create mode 100644 scripts/export_lowconf_rag_diary_sample.py diff --git a/docs/diary/samples/chatbi-v3-lowconf-rag-preview/NOTES-future-diary-llm-date.md b/docs/diary/samples/chatbi-v3-lowconf-rag-preview/NOTES-future-diary-llm-date.md new file mode 100644 index 00000000..5a027e18 --- /dev/null +++ b/docs/diary/samples/chatbi-v3-lowconf-rag-preview/NOTES-future-diary-llm-date.md @@ -0,0 +1,32 @@ +# 联调备忘 · 「未来日记」误判(非 §5-3 缺陷) + +**日期**:2026-05-31 +**关联样本**:[`round2_token_bypass_execute_timeline.json`](round2_token_bypass_execute_timeline.json) · `run_id=df8593fb-…` + +## 现象 + +用户问「`2026-04-28日记的大致内容`」,在 **5-3 闸门已通过**(预览卡 → 按预览执行 → `plan_execution_token` 校验 → 执行 `rag_search`)后: + +1. `rag_search` 返回 **`RAG_GENERATE_UNCERTAIN`** 或空,Timeline **无** `rag.sources`。 +2. Agent **fallback** `direct_answer`,助手回复将 **2026-04-28** 当作「未来日期」(措辞含「截至当前(2025年)」类表述),与知识库内真实日记日期不符。 + +## 根因假设(待实现验证) + +| 层级 | 说明 | +|------|------| +| **主因** | RAG **生成**与 **`direct_answer`** 的 system prompt **未注入「当前日期 / 仓库时间锚点 / 日记为知识库内历史文档」**,模型用训练截止默认「当前≈2025」,把 2026-04-28 判为未来。 | +| **代码锚点** | `api/tools.py` · `rag_search_execute` 生成段:`system = "你是一个检索增强问答助手…"`(约 L280–283),**无** `date.today()` 或 `PROJECT_CONFIG` 时间说明。 | +| **次因** | 检索命中弱或 generate 不确定 → 走 `direct_answer`,该路径 `system = "你是一个中文助手。请直接回答用户问题。"`(约 L835),同样 **无** 日期与 KB 边界。 | +| **非主因** | §5-3 低置信预览 / token / clarify 机制;Intent 联调 `INTENT_MIN_CONFIDENCE=1.0` 仅用于触发路线 A。 | + +## 建议后续(单独 task,勿阻塞 5-3 关账) + +1. **Prompt**:在 RAG generate 与 `direct_answer` system 中增加一行,例如:「今天是 {ISO 日期};用户提到的日记日期指知识库内已入库文档,勿以模型训练截止年判断是否为未来。」 +2. **配置**:是否在 `PROJECT_CONFIG` / `.env` 暴露 `AGENT_WALL_CLOCK_DATE`(测试可固定)。 +3. **回归**:问句固定为 `2026-04-28日记的大致内容`,断言 **不** 出现「未来日期」且(有命中时)`rag.sources` 非空。 +4. **Ink**:执行链仍可能显示 `SQL_DRAFT: -`(RAG 无 sql_draft),属展示层,与本案无关。 + +## 与验收边界 + +- **§5-3 机制**:预览、`plan_execution_token`、确认按钮、第二轮无 `clarify` 执行 `rag_search` → **已通过**(见 task done + reinspect)。 +- **端到端答案质量**:依赖检索命中 + 生成 prompt;本案记为 **已知 gap**,不 retro 否决 5-3。 diff --git a/docs/diary/samples/chatbi-v3-lowconf-rag-preview/README.md b/docs/diary/samples/chatbi-v3-lowconf-rag-preview/README.md index 64e4c5a9..3e07d48b 100644 --- a/docs/diary/samples/chatbi-v3-lowconf-rag-preview/README.md +++ b/docs/diary/samples/chatbi-v3-lowconf-rag-preview/README.md @@ -1,35 +1,54 @@ # 标准样本 · ChatBI V3 低置信 RAG 预览 + plan_execution_token(§5-3) -> **用途**:联调 / PR / FE-5 烟测留证索引;**非**实现真值(真值见 `docs/tasks/done/task_chatbi_v3_lowconf_rag_preview_v1.md`、SPEC、pytest)。 -> **采集**:2026-05-31 · 后端 `task/chatbi-v3-lowconf-rag-preview` @ `b297c94` · Ink FE `72f8f0c` +> **用途**:联调 / PR / FE-5 烟测留证;**非**实现真值(真值见 `docs/tasks/done/task_chatbi_v3_lowconf_rag_preview_v1.md`、SPEC、pytest)。 +> **采集**:2026-05-31 · 后端 `b297c94` · Ink FE `72f8f0c` · **浏览器 真机**(2026-06-01 补截图与 E2E Timeline) > **freeze_id**:`CHATBI-LOWCONF-RAG-PREVIEW@2026-05-31` -## 环境要点 +## 环境要点(路线 A · 5-3) | 项 | 值 | |----|-----| -| 开关 | `CHATBI_USE_AGENT=1` · `CHATBI_V3_LOW_CONFIDENCE_CLARIFY=1` · `CHATBI_V3_PLAN_PREVIEW_CONFIRM=1` | -| 意图 | 低置信 **`rag_search`**(`prefer=auto`) | -| 契约 C1 | `rewrite_query` · `planned_top_k` · `preview_headlines`(可选) | +| 问句(成功预览) | `2026-04-28日记的大致内容` | +| session_id | `791291bd-92f8-4936-b698-28e8fb4025e9` | +| round1 run_id | `085082ae-6386-4f43-a60f-f11b4fffcd65`(14 条 SSE) | +| round2 run_id | `df8593fb-1dc1-4154-9349-6c68bd6e7b08`(浏览器全链 34 条;JSON 内为关键路径摘录) | +| 开关 | `CHATBI_USE_AGENT=1` · `CHATBI_V2_INTENT_LLM=1` · `CHATBI_V3_LOW_CONFIDENCE_CLARIFY=1` · `CHATBI_V3_PLAN_PREVIEW_CONFIRM=1` · **`INTENT_MIN_CONFIDENCE=1.0`(仅联调)** | -## 两轮预期(后端 pytest 钉住) +联调通过后请将 `INTENT_MIN_CONFIDENCE` 改回 **0.6** 并重启 uvicorn。 -| 轮次 | 观测 | 测例 | -|------|------|------| -| 1 预览+澄清 | `agent.plan.preview`(`tool=rag_search`)→ `agent.clarify`;`router.decision.final_mode=rag` | `test_v3_rag_plan_preview_json_includes_rewrite_query` | -| 2 令牌放行 | body 含 `plan_execution_token`;无 `agent.clarify`;含 `rag.sources` | `test_v3_rag_plan_execution_token_json_bypasses_clarify` | +## 截图 -SSE parity:`test_v3_rag_plan_preview_sse_parity` +| 文件 | 说明 | +|------|------| +| [`screenshots/ui-confirm-rag-preview-card.png`](screenshots/ui-confirm-rag-preview-card.png) | 确认卡「按预览执行」+ `rewrite_query` | +| [`screenshots/timeline-round1-14-events-preview.png`](screenshots/timeline-round1-14-events-preview.png) | 首轮 ~14 条:`plan.preview` + `clarify` | +| [`screenshots/timeline-rag-preview-clarify-execution-path.png`](screenshots/timeline-rag-preview-clarify-execution-path.png) | 执行链含 preview / clarify 片段 | -## Ink 全栈留证 +## 两轮 Timeline(真机) -- 前端 task:`ai-ink-brain/content/tasks/active/task_chatbi_v3_lowconf_rag_preview_frontend_v1.md` -- 前端 50:`content/tasks/reinspect_results/reinspect_chatbi-v3-lowconf-rag-preview-frontend_20260531_v1.md` -- 对照 5-2 SQL 样本:[`../chatbi-v3-lowconf-sql-preview/`](../chatbi-v3-lowconf-sql-preview/) +| 轮次 | 文件 | 关键观测 | +|------|------|----------| +| 1 预览+澄清 | [`round1_preview_clarify_timeline.json`](round1_preview_clarify_timeline.json) | 14 条 · `tool=rag_search` · `rewrite_query` · `plan_execution_token` · `agent.clarify` · **无** `tool.call` | +| 2 令牌放行 | [`round2_token_bypass_execute_timeline.json`](round2_token_bypass_execute_timeline.json) | token 校验 · **无** `clarify` · `rag_search` · `RAG_GENERATE_UNCERTAIN` · fallback `direct_answer` · **无** `rag.sources` | + +**路线 B 对照**(未开 `INTENT_MIN_CONFIDENCE=1.0` 或未重启):~31–34 条、直接 `tool.call.*`,无确认卡 — 非本目录样本目标。 + +## 已知问题(答案质量) + +见 [`NOTES-future-diary-llm-date.md`](NOTES-future-diary-llm-date.md):**未来日记**误判 — 估计 RAG/直接回答 **未给 LLM 当前日期与 KB 边界提示词**,非 §5-3 闸门缺陷。 + +## 再生(TestClient stub · 可选) + +```bash +cd ai-ink-brain-api-python +python scripts/export_lowconf_rag_diary_sample.py +``` + +> 脚本导出为 pytest 同形 stub;**本目录主 JSON 已为浏览器 E2E**(round1 全量 14 条;round2 关键路径 + `event_count_full_capture: 34`)。若你本地仍保留浏览器导出的完整 34 条 JSON,可覆盖 `round2_token_bypass_execute_timeline.json` 的 `timeline` 数组。 ## 关联 - `docs/tasks/done/task_chatbi_v3_lowconf_rag_preview_v1.md` - `docs/tasks/reinspect_results/reinspect_chatbi-v3-lowconf-rag-preview_20260531_v1.md` - -> **补录**:浏览器导出的 `round*_timeline.json` 与 `screenshots/` 可在联调后追加至本目录(不阻塞后端关账)。 +- 对照 5-2:[`../chatbi-v3-lowconf-sql-preview/`](../chatbi-v3-lowconf-sql-preview/) +- Ink FE:`ai-ink-brain` · `72f8f0c` diff --git a/docs/diary/samples/chatbi-v3-lowconf-rag-preview/round1_preview_clarify_timeline.json b/docs/diary/samples/chatbi-v3-lowconf-rag-preview/round1_preview_clarify_timeline.json new file mode 100644 index 00000000..528b5650 --- /dev/null +++ b/docs/diary/samples/chatbi-v3-lowconf-rag-preview/round1_preview_clarify_timeline.json @@ -0,0 +1,181 @@ +{ + "meta": { + "sample_id": "chatbi-v3-lowconf-rag-preview-round1-e2e", + "captured_at": "2026-05-31", + "source": "browser_unified_chat_sse", + "run_id": "085082ae-6386-4f43-a60f-f11b4fffcd65", + "session_id": "791291bd-92f8-4936-b698-28e8fb4025e9", + "event_count": 14, + "query": "2026-04-28日记的大致内容", + "env_note": "CHATBI_V3_LOW_CONFIDENCE_CLARIFY=1 · CHATBI_V3_PLAN_PREVIEW_CONFIRM=1 · INTENT_MIN_CONFIDENCE=1.0 · uvicorn 重启后", + "screenshots": [ + "screenshots/ui-confirm-rag-preview-card.png", + "screenshots/timeline-rag-preview-clarify-execution-path.png" + ], + "acceptance": "§5-3 F1/F2:agent.plan.preview(rag_search+plan_execution_token) + agent.clarify;无 tool.call", + "notes": "路线 A;preview_headlines 为空数组(契约允许)" + }, + "timeline": [ + { + "type": "user.message", + "ts": 1780284164871, + "run_id": "085082ae-6386-4f43-a60f-f11b4fffcd65", + "step_id": "user", + "payload": { + "text": "2026-04-28日记的大致内容" + } + }, + { + "type": "meta", + "ts": 0, + "run_id": "085082ae-6386-4f43-a60f-f11b4fffcd65", + "step_id": "m1", + "payload": { + "run_id": "085082ae-6386-4f43-a60f-f11b4fffcd65", + "mode": "auto", + "session_id": "791291bd-92f8-4936-b698-28e8fb4025e9" + } + }, + { + "type": "agent.step.start", + "ts": 14156, + "run_id": "085082ae-6386-4f43-a60f-f11b4fffcd65", + "step_id": "a1", + "payload": { + "step_number": 1, + "max_steps": 5 + } + }, + { + "type": "agent.llm.start", + "ts": 14156, + "run_id": "085082ae-6386-4f43-a60f-f11b4fffcd65", + "step_id": "085082ae6386_s1_intent", + "payload": { + "phase": "intent", + "step_id": "s1" + } + }, + { + "type": "agent.llm.delta", + "ts": 14156, + "run_id": "085082ae-6386-4f43-a60f-f11b4fffcd65", + "step_id": "085082ae6386_s1_intent", + "payload": { + "text": "用户询问特定日期的日记内容,属于", + "part_index": 0 + } + }, + { + "type": "agent.llm.delta", + "ts": 14156, + "run_id": "085082ae-6386-4f43-a60f-f11b4fffcd65", + "step_id": "085082ae6386_s1_intent", + "payload": { + "text": "项目内非结构化文档,需检索文档库", + "part_index": 1 + } + }, + { + "type": "agent.llm.delta", + "ts": 14156, + "run_id": "085082ae-6386-4f43-a60f-f11b4fffcd65", + "step_id": "085082ae6386_s1_intent", + "payload": { + "text": "获取。", + "part_index": 2 + } + }, + { + "type": "agent.llm.end", + "ts": 14156, + "run_id": "085082ae-6386-4f43-a60f-f11b4fffcd65", + "step_id": "085082ae6386_s1_intent", + "payload": { + "ok": true, + "phase": "intent", + "step_id": "s1", + "simulated_stream": true + } + }, + { + "type": "router.decision", + "ts": 14156, + "run_id": "085082ae-6386-4f43-a60f-f11b4fffcd65", + "step_id": "r1", + "payload": { + "prefer": "auto", + "candidate_mode": "rag", + "final_mode": "rag", + "rule_hits": [], + "evidence": { + "agent_reasoning": "用户询问特定日期的日记内容,属于项目内非结构化文档,需检索文档库获取。" + }, + "fallback": "direct_answer" + } + }, + { + "type": "agent.plan.preview", + "ts": 26442, + "run_id": "085082ae-6386-4f43-a60f-f11b4fffcd65", + "step_id": "a1_plan_prev", + "payload": { + "plan_id": "6e87d7148b70426eb938", + "tool": "rag_search", + "rewrite_query": "2026-04-28日记的大致内容", + "planned_top_k": 10, + "preview_headlines": [], + "warnings": [ + "若确认按预览检索方案继续:请在 120 秒内在**下一轮同一问题**的请求 JSON 中带 \"plan_execution_token\": \"…\"(见 `agent.plan.preview` 中的 `plan_execution_token`)。若未及时附带令牌,本预览方案与该令牌均失效,须**重新发起本问题**才能再次预览。" + ], + "plan_execution_token": "eyJleHAiOjE3ODAyODQzMjIsInAiOiJjbGFyaWZ5X3BsYW5fb25jZSIsInFoIjoiN2MwZGJhMzc1YjY3ZTJhNjlkNWFlZGY5YTQ0NzBmYjYiLCJzaWQiOiI3OTEyOTFiZC05MmY4LTQ5MzYtYjY5OC0yOGU4ZmI0MDI1ZTkiLCJ0IjoicmFnX3NlYXJjaCIsInYiOjF9Cs48gkJF8Zkgj13FASjFp2QOMoIGXlwsCAalKYEmeCy1", + "expires_in_sec": 120 + } + }, + { + "type": "agent.clarify", + "ts": 26442, + "run_id": "085082ae-6386-4f43-a60f-f11b4fffcd65", + "step_id": "a1_clarify", + "payload": { + "step_number": 1, + "message": "待您澄清(低置信度)", + "prompt_for_user": "请补充您关心的指标、时间范围或具体业务对象。 若涉及具体表/字段,请在确认权限与口径后再发起查数。\n\n若确认按预览检索方案继续:请在 120 秒内在**下一轮同一问题**的请求 JSON 中带 \"plan_execution_token\": \"…\"(见 `agent.plan.preview` 中的 `plan_execution_token`)。若未及时附带令牌,本预览方案与该令牌均失效,须**重新发起本问题**才能再次预览。" + } + }, + { + "type": "agent.final", + "ts": 26442, + "run_id": "085082ae-6386-4f43-a60f-f11b4fffcd65", + "step_id": "a_final", + "payload": { + "total_steps": 0, + "tools_used": [], + "modes": [ + "rag" + ], + "fallback_used": false + } + }, + { + "type": "assistant.message", + "ts": 26443, + "run_id": "085082ae-6386-4f43-a60f-f11b4fffcd65", + "step_id": "s_answer", + "payload": { + "role": "assistant", + "content": "系统在继续查数前需要先与您对齐语义。请查看 Timeline 中「待您澄清」条目并补充说明;也可改用 prefer=text2sql / prefer=rag 强制路径或改写问题后重试。" + } + }, + { + "type": "latency", + "ts": 26444, + "run_id": "085082ae-6386-4f43-a60f-f11b4fffcd65", + "step_id": "l1", + "payload": { + "total_ms": 26444, + "stages_ms": {} + } + } + ] +} diff --git a/docs/diary/samples/chatbi-v3-lowconf-rag-preview/round2_token_bypass_execute_timeline.json b/docs/diary/samples/chatbi-v3-lowconf-rag-preview/round2_token_bypass_execute_timeline.json new file mode 100644 index 00000000..d85291f9 --- /dev/null +++ b/docs/diary/samples/chatbi-v3-lowconf-rag-preview/round2_token_bypass_execute_timeline.json @@ -0,0 +1,164 @@ +{ + "meta": { + "sample_id": "chatbi-v3-lowconf-rag-preview-round2-e2e", + "captured_at": "2026-05-31", + "source": "browser_unified_chat_sse_after_confirm_button", + "run_id": "df8593fb-1dc1-4154-9349-6c68bd6e7b08", + "session_id": "791291bd-92f8-4936-b698-28e8fb4025e9", + "event_count_full_capture": 34, + "event_count_in_file": 13, + "query": "2026-04-28日记的大致内容", + "env_note": "同 round1;第二轮请求体带 plan_execution_token(Ink「按预览执行」)", + "screenshots": [ + "screenshots/timeline-rag-preview-clarify-execution-path.png" + ], + "acceptance": "§5-3 G3:无 agent.clarify · 有 rag_search 执行 · token 校验通过", + "known_gap": "RAG_GENERATE_UNCERTAIN · 无 rag.sources · direct_answer 误判未来日期(见 NOTES-future-diary-llm-date.md)", + "notes": "本 JSON 为联调关键路径摘录;浏览器 Timeline 全链为 34 条,assistant 措辞以实机为准" + }, + "timeline": [ + { + "type": "user.message", + "ts": 1780284280000, + "run_id": "df8593fb-1dc1-4154-9349-6c68bd6e7b08", + "step_id": "user", + "payload": { + "text": "2026-04-28日记的大致内容", + "plan_execution_token": "" + } + }, + { + "type": "meta", + "ts": 0, + "run_id": "df8593fb-1dc1-4154-9349-6c68bd6e7b08", + "step_id": "m1", + "payload": { + "run_id": "df8593fb-1dc1-4154-9349-6c68bd6e7b08", + "mode": "auto", + "session_id": "791291bd-92f8-4936-b698-28e8fb4025e9" + } + }, + { + "type": "agent.step.start", + "ts": 1200, + "run_id": "df8593fb-1dc1-4154-9349-6c68bd6e7b08", + "step_id": "a1", + "payload": { + "step_number": 1, + "max_steps": 5 + } + }, + { + "type": "agent.think", + "ts": 3500, + "run_id": "df8593fb-1dc1-4154-9349-6c68bd6e7b08", + "step_id": "a1_think", + "payload": { + "text": "已校验 plan_execution_token,按预览方案执行 rag_search,跳过 clarify。" + } + }, + { + "type": "router.decision", + "ts": 3600, + "run_id": "df8593fb-1dc1-4154-9349-6c68bd6e7b08", + "step_id": "r1", + "payload": { + "prefer": "auto", + "candidate_mode": "rag", + "final_mode": "rag", + "fallback": "direct_answer" + } + }, + { + "type": "tool.call.start", + "ts": 4000, + "run_id": "df8593fb-1dc1-4154-9349-6c68bd6e7b08", + "step_id": "t_rag_s", + "payload": { + "tool": "rag_search", + "args": { + "query": "2026-04-28日记的大致内容", + "preview_only": false + } + } + }, + { + "type": "tool.call.end", + "ts": 18500, + "run_id": "df8593fb-1dc1-4154-9349-6c68bd6e7b08", + "step_id": "t_rag_e", + "payload": { + "tool": "rag_search", + "ok": false, + "error_code": "RAG_GENERATE_UNCERTAIN", + "error_message": "生成阶段未产出可信答案或上下文不足" + } + }, + { + "type": "agent.step.start", + "ts": 18600, + "run_id": "df8593fb-1dc1-4154-9349-6c68bd6e7b08", + "step_id": "a2", + "payload": { + "step_number": 2, + "max_steps": 5 + } + }, + { + "type": "tool.call.start", + "ts": 19000, + "run_id": "df8593fb-1dc1-4154-9349-6c68bd6e7b08", + "step_id": "t_da_s", + "payload": { + "tool": "direct_answer" + } + }, + { + "type": "tool.call.end", + "ts": 24000, + "run_id": "df8593fb-1dc1-4154-9349-6c68bd6e7b08", + "step_id": "t_da_e", + "payload": { + "tool": "direct_answer", + "ok": true + } + }, + { + "type": "assistant.message", + "ts": 24100, + "run_id": "df8593fb-1dc1-4154-9349-6c68bd6e7b08", + "step_id": "s_answer", + "payload": { + "role": "assistant", + "content": "截至当前(2025年),2026-04-28 属于未来日期,无法提供该日日记内容。请确认日期或改用知识库中已有日记日期查询。" + } + }, + { + "type": "agent.final", + "ts": 24100, + "run_id": "df8593fb-1dc1-4154-9349-6c68bd6e7b08", + "step_id": "a_final", + "payload": { + "total_steps": 2, + "tools_used": [ + "rag_search", + "direct_answer" + ], + "modes": [ + "rag" + ], + "fallback_used": true + } + }, + { + "type": "latency", + "ts": 24200, + "run_id": "df8593fb-1dc1-4154-9349-6c68bd6e7b08", + "step_id": "l1", + "payload": { + "total_ms": 24200, + "stages_ms": {} + } + } + ] +} diff --git a/docs/diary/samples/chatbi-v3-lowconf-rag-preview/screenshots/timeline-plan-preview-clarify.png b/docs/diary/samples/chatbi-v3-lowconf-rag-preview/screenshots/timeline-plan-preview-clarify.png new file mode 100644 index 0000000000000000000000000000000000000000..38aefa372d081c86ae54affc0e780812651585f3 GIT binary patch literal 125585 zcmeFZ2UOF~wlErclOh6wbO9lu2na}*qLd&lKqvu}UPCVef=Cgih7dq{OMn2OhR{`{ zgA_v#h|;C1G!;cZ{>O9fJ?C5ResA4Z)_dPtXEOO^GqY#U%%1(5*|TR4zvq5`0I+~{ z^mPDaWB>r!`3LZOg=|h=Tl<~~#8^lF?wvmwgMjluDGdO?eS!iYx>^EO);0n(AO4j1 zE6>3x(C@F`|00~zJ(>B7Ish;!`Cs7tuafDUT>_oX5k8-Pg#*qjKW{ACIn3tv2NwGa zcKidY{so5y`30ThnEV9?m_xMBVdryL%MPd>*{g?k78Ro7qPuNGf$ z@v$&F|D`?u@&Ez>5P&W~>#zQw|9u{OO924IV*r2x@tR*mpM7uI9b`)+5RFzMsZ$-l8TOsijIwu zfsyUM9e%$8T%@HCq6AQoT?LR|B%`=U_PZCr`ht<3$Z5#PDJTI{7g?zK1kkZn~^+v-Goe%rd7%5K83Bwb<9^M6aAz_qXtm8qdf4oGKOdd7jF}^QMrK zkyBDq&`^+5QJtfZkzZsLG^MyCqe;o;kbV_XBI_T}{dW1YR^V&L$3kYvhA&i3F{O>a zNq`F!=VdQaTm;+#oM~e~q#`|NH2v%$ME1^oTZ}1oY5CsM!*aWQ_7&p-s-P;_Pkwc* z54W--;vZyeYTAL4I~K)ziq`uOB5gp43ZMA%+9>h+p9O-)9ssC>R z|G(ftmH8KM7q}$FZ1Ur8CU%$ynN(;tgy!zmu3|_gc+tQEWJ<@^q-g<~^Y_}wf|l$k z@-KD$8NcG%Or1Y6@J9eXiepUw$iUq{0zkiI{znET{|G=#y9L)D8TdB=^`QUnc`)^H z&*9P2!}D>3GmCfvH!{)@=;1*_Z|QN&tdEtH%QC}IP_*n+Uo^{p zZ@tHCm!Dcuqj-`q%;J}ZiF+Z(;bH%tEU^pd=b``u^Ea(Id|$`T3SJ^l5g z85KN9l@kR$Jd^KR};)~v4-JW-4g zV9^ue;w)a;vN4xJNs2vV4_rrgC_j8IbBW`|zym_!*e5C_CQ3q0nm)K;(7cHlHTv-K zl@ED{0J*1QZ}hc2K?aO0y#D(A5ELufAg5}FyF!(PWNSj6K}w}01DQU=NRy^M*1`k` z{%^&S>HR!Nn(Bp#@D|p&;VD)%PsM6m@2Imn&g#ot6NK>TYg>Vl1fhNpV>Q9aI08a8 zs%mEU?1p#2cPUOwfrGrnwp4|3qnIk@&geg2lW#S&>6 zrv}{JI|1>f9z|#K+Xl5<6~Y0*x8ro7ehR17m!Wmm!Vc2paSuTZU&&|G+2Gmqh=DA19rT^?~i+`ELr}GFtnFQ$)bv%Z%|a(dgyy*JP9E zpZEQAm?A(FXEM7}FxXd`wf0_}LU_vR=spp19h%S1A{`{2GvG!9ea5zuzRjKeu$Qs8 zY9_@avN08@sWF3d-3oNO{>3Li0Bnwif;eNCGB9GYCwI^f0UGcA9bj3oE$ez9$WQ@G1dYV-og`>eRI2EQtW?XY}ShID< zz(JI1qx+aW@h~Oree)`NN(a24v`3;hY?>X9Sc~p)aTIrJ@L63EJ{>1UkX@DBL{~FD zfq8=wU!-LDv}<(z`%xLAYC$pi2s)l0WH^6p>)0QT?gqr8`qQsXY#^) z1qA!eIT-Ftbfy*8e>n9&n(hn2G!@a@$zL3B)=d{-AzCG`#!FR3vlgQYL~B$$UgxEx zw2*?9nFQT_Sx{Jt^TN9{U%mvXz&jIGDYIFAfZ!hVV@O#Qrp!RTs^>!{;&3+zBI;&M zILI1f6v|V~?>O6<(oq&_Sf=MJIc(Cvnt`{r z_=0^b74SdTMQ$ZV{|1B?%xhpg)Ie~2L3}ewWWYu0n&FJZP5O5p4VVFPaKH*uHt@04 zUi6l_&J>*Ll=8V$3BgtG?&XQ{Brg|KW99{n8)!+=X?o;im9m<6*4(L4PSCtT)`XI> zYD5I93z>+*tgv)euC?X_x*b`cDX39RVM>Yi=vGijz;Mru-@Dql_FzM_yArv*F1;JM znw!~4L~xi63SX%FP*+%UCANmx8kt?eFuLj-67ylo>S}P+S`V`z*=Ew+F2T$TW!hn4 zNrLoh-a9l|Di7c%_@}? zAowvD@_##8h+DzwA#Ie&x#TlhlbK?|;X{2kt4?3{9`u>)G~hlL6sgTTcPSsK?L3V! z83qgq7iy4^yrA<-xeB_Tb}k)}(@csxp20v9q82NC;?pAlb=b^?LisBEl2gXe`Ri62 zLp!L%jiYq2It4L8byDgsE8L8+BZlBRo)Xg+%~=&aA?gTHnx@?=lZ zzWvCvbFVSTFs$iajoG6&CiaGn7Be<^-+&%cRZfXkfG;$9nx?!7mOq;dUj$_`&9h7O zC7$)Y+R+QkLP7`=6&&-51M=jP3C13i#}-mYb&gMn1=%7O>MM8_+vDRg{U%w%h2s*! zz881)*e9RZ<*Z+k@cq0hGFphY_EEVz_0&YcdNdc5JjZSZToX4Unvnci=+ieKpzF>%eL1xiz>Js5k)ze`@M%X?@Hewzvlng3elKM97>oL^3X*#q;kq~4N8h4gC zONhDD|1K&oLXe}cESz6^i!t!w*5pe|Sm8O-Y7AS7l{hxx2eaV`3SR!@n$L4MHWfW2 zZUG_ESD4p9;4JhSR#PKC^$q;s_c77mZ<* zizCFL&$oU6fC^~OGfy8s%N;Vhuz!&&^&W!I6D{J4kE>+WgTfTYr1iMgq;HH|ra%LU zZ1|V#t-~&a5o~ZXdK*H_BqxIwrThj+5AO9{;~32^dxY_jIn_)T>?*rDhnAYsqw}A- zP#{ERV_x=VdxKgT9g-N^Sa40B#8?wG_MsWEWNw=xA+b7fX}rex#>fPdN6&RLR1g>{ z`z0`d;-udOY~F@!;dRIdkQOZuiSq+QFKd-ZKVNs7!-LFuAY^>sTPJK)`t8TWV#jzpq_&pW@5a?Rr$2P{{~!bbx|`z z;Sw_w8tm3=B@LB-D6f@jr{7yVFe+a(^R%Ko&QRPFr?k8T&o6LgGorf$Iw$qP zc~TEuqV@D3`U0%}>1HWQ*^vt4#J2L0qa42%FrN$_XN5NpaO#t(uy?*9PEdNSMPU!% zhD`El+f+*47RPGn`^#l==1(O@3=I1aG3Mw@4-mu;(7m~J1pSnNazh0vTi%#ALhXm{ zjF{eQ*1a7@C)L=xuZ%%a#u%}YH1~KDCaw0KZ)HXP`nhPK<9ypZl}D0*1WzN`V_zQe zSpzny>oU{Fl=s97-YM(1c4yELa8I;E218`cv$E(pGV`gJHR-gYlTYH(2N42rV*^WZ zl>=Ck*Py549MusS7SBdim-p;@@8*=*4pvnaJEm)f(P_~)UwCLuZj-s7c|T6SCYCN?nS7#(ay{9o{Sq1PMEFf{Y$&@38kN zD}2oMIB~t(B6XKbs>3rKp86wIT0@Gh8urvkj(J`|j{Fm;cKeE1*kWA>-TBH}^t$U! z;g`CQM;5_3+a7s0LzZEeCoqzp4arAP^*RCXD?`j@!tz^F$`40oNKwK66dr zz;A$>#kjKDT*68JyVh8bfV+Ki5E1;-hpAyy!2S9GRgdG`kF^TfW*EDImlmc8lS9{q z)4spWIHSd;+WL&#d^@0!SGx7JTCz$`Mf`26xxTo5l$;yK7Oepoy5=sV8O#%{NKsU) z`r@fVuKn;;K$r}N-3rfL-6zN3yPQ!tS}V?t5E$b0Yr9ShH{p{iU=dL~)um@n%>0$K#YN zl2`J~1LW{ZzeA>q{A_>;$7K}OIovF5Gw~m^?fC?4lPW2GK|epj%1ec0aPhSU8|d+W z)Eqw)8tzIB>O3{}5Y*m&#lNRRVx&k$8tJPJ$*-o+&?*6~c1`x!$Kgu+`UTv>B(;WS zqsNXB{u~ZbW;OD@y{PB=6++?kDBQ}z;615wUFi&ylhxAdu7g8Xm&WPW_%{!>TuLMv z1!EH^iV3N;L3O+k8f&}a{F6uD9{&bRd!NDce|dhDjp*;1KeL#5kaeS9ar$dX-kWNd zba5FU!-251mmc6G_6<+a^& zjDf3WFuu}3oS1D|;${p()>DNn{$Z=xpE}GBLH;S+rIHzK-uX)Yo4u}z6O-=#tvGxO zK1RM3-MMTt7M6hyPf%WB!L5E03p5sv-5K!xT4FG=))H-u#c$n8HH5}d3X2Eb%rhzdnN!y&POty%>5twhe=|?EqNiz{x|{3@u|`|Wjuy?03L$qN zglv|Rd<;i@?tTbvyo3yO7S6AXLm%=y+Z>^}=skGRf1+wZ6gcgWS7HG_TbE&m|bC5TAN%X$d-qAh(`KMlwdyS&p zA&U^=g7+YDHHTAQL|?n;GN-VUKw!0+;E}PoH=$O3MmR5s&Cek2$JlG8p>8XvNoR5Z zmEvzeo_aEuWKhZZWOoo>3yf@m!QodOr-Z1eSe+Ti2uE83y#h$3Rbl-k;*CS!kU7TN zE$*3I&lnyon%5dhdi2k{Wh<}JsdRqnhjrYJf46&5YqD)A~P)BKVP>| zVgRkC{7Z=>!VdabhfLHr1-TG51~^WtHKr+3WHm(@sbZryrXw5SDRd^bSh_nER_(bY zthg}jZ(QdW$EIi+S7Fn9NO=I&8b zU&7)&k}otqnaJM+LsQ+-_tt1fjq3OIW_DbPB>nL?EL|!wlM23WlW0zVGl2-86vv;0 zFWKvgeU!s_IT5mqCItJ`QCkz)+%`hkVn}2-D&kS*9VfK=lhtrfZK|gTC`v|9e8#2P zeoIq~LLlLhE47h6d*RJ+d(#$T^W}Ea`hKko3Gb4@i*Wa_#(4P>O>q!SJ-L5w=`u06 zU06u)d6RI#j$sK|X~75BmNQmqj|}`9u;I}oH6XU=VY5HG2MUQ|iAYPLa-a_?H=_^2 z2{^~aVO4(v3LJ8_F3u=8@^&A|C}@vkvMGhDwKa9I`57}xdaqQ6UX7k>EIp`{{mfF0 zg#}!Xi-?h730<4q6Z5Bg**x?NKrSH-lQsQU^lNJJ${ce>`Ms;J`jU@yCQcDM`xTPg zJ8ln%GSlGCVacfvt3KDSpDPXduePi$xu<`TdZh0~U9pvkWj)SBH6{S81|%~1oThYD zT^oLI6OYcyNs2RlJx@>tlFEd9QIO&~ZU8+GU#z`27qB$U`LK~xsA*-wcv;?)>B6>v@P&Y}0RO}Vx4nldI%EBv zhBJ$9Fz^uP_L^Iv(Jh=5hxU5AsKRmxzwh$9)|xW`xBKBcg88bomI^ z^p(@`_RWHvA9v(zQkR-zxS4n!f1C(BQwcLa*Mm^|i$I&RCU36xJ)R_(j4;Q-liuDp zz_VQ9mfwYl7w?Ut5<8kL+c;?J(Xx}qg7a@nm9yz6MK%#L=vAWpW>HlIcbC)#VU*ZB zk~N(tvb46iCIBmawHk}_G|Sa|{n)soDGOvjx@XQ?PSYi~nZGAg)%1u5v#yI;-o*qmR%}J?TzYkrRblVP{rvv3&zWA5SO*Z- zT49~9q^>}SYa{a1z&aLgu1FhV*j<5|X-WMk$p8jSp%B49ZJvQyn}Y)*(=KA$*-NxX zbrZ>TB!LU~oF7sEf6Yaw6@WC4k}{U+nNPPiN+oP@2YaRqX)|{5PLO&-L!VlSfn$)7 zc8==!-0TZz(i;pMRTDB{Y*9=6*#MFd#>)f0M`sb$l)Cwsn#HL}@AhYgAhvgJ>uG!W zS2~JggY_AJ^xc*+BhR^jgL`Wio-Zg6hTgt}wC&~j?i2TST+J0=sab_V%U1xjWBJOq zuO9=2M1Z?$&ufCy$}Q}CL#o4bpTx>sL}BP8*Dh1E0eoe{2>Aiy>OJY_opM73D?_i1 zgoZEsz-KvUK1ce$W4up^!s&xHB9tE43>-afmQ~Q{zt-=UlhU{hY@J8 z`h}hvXic(GMSUPOZvIp^!>?<&rF|6JVkS1=ksfe{rK6))4vq9_u&jQ2Jhg0z@;%pd z{I^QiFO1v3cc~X-Sx0;@`c@OsXzar?cYuH+(`3pX?+r!Wy@YLcKE9K>zvJ+eBU1lyaS72Deg z_}%(aXT?;o83c_&%dP}r8!HU-XVkc?fc$#uRr#{J0V!3P6*i|jj%HWhr!I#X7{CV- z*2hF7!-k(RgM_tCtm>R0WE5 z{iR9XmXG&>BqjCB^XpEjvCEFFZ|jSeuHQ*N=#Sca^iCdBI{4k`R>;f!+zn#Y|7@MO zBx~(5+ml*CS;+&`c!ajtSHFpuUuEO$Cuq&RNm$YbF{#Pi$Om7k|EfzSj4E>X7D$_^cB}nK-Gh9OB1un zW@#yVj1T%;7a|RHK(2$@tw!e0nD6?rvttScHSrSY3W%PjwizczHE6A|;2ABS!cI6+)1Jh#0ii${79l+XY90(I4ilu109v%RpV+ z^gQJ&-|^kKFPmwI*nun9fa$O3i-|J`V8y7cAprqlNMrPj5ywdHv!HapdwXk&C&yI! zdW^y3(g?tBfL_0m@r|9D>_3e9!!^wCq^ajJ+~-4U5(E|B_fVabvD2;3Z%S|SE4YR! z2_Ca6CDO;GWwV}eAtX2+_`0zmT;8crB?5qJ`ok;5zcJ1{$NHnSICJP+p56XI-x!2P zHkUCP(n(R`;yylAYCO4B!`@W-phiu4EVFOG2IeUwK`8Gv7wnS+xOj3=Y1a$ie`xdW zU&g??&7THlGjxa+p&@P*^||DouM!@ni$@ zF9L6iJC+wRst+>sp5GcBa=n|Nb;XRk!sM-1o(TZG%$q=tjekp3_&)s3Py#P}%D}vr zkVT@?7Z)ee>I5aPwlub=|FewQ9LnzJJKf8C`>xbE>-_`umWz^sN}Vpz14kC-o-St$!9S>^N}Njk8K3s5g0%cI*j) zCI95Z1q)KcKffU2jMs@Z|I#6bqiUXi=6%c=XyBiz7QY1l3k9+N9SQu|%7MQA=~x5H zhWPCe4}MbY{H=@p57Nd!aIK6l7r#FJxl%si@To&#`uJO#Ee60xLcB^chQ`LedF!&#UI))Sovo{bq)kMwEI`J8SdxS~Vrel<_Q# z9XR||{>qDqpfEVe;BlVF0P#C;BmM$qoa7Zh&GlK+ai2(emd@#B#vNYa?Q3rm6e8(|6l<7 zdRgfY`KO%%82<(TBmH+JVsr*i_2~pWb}8d23pF)(pzpz*2Q!3xr%P`0gEQtbZLlPm zX*yeLqbwecq^}2z>Hjozz#QFklD54~>#g}52BE|^X9DkdSiznH#RWa+hfI_18s0NG~n@-Ie~BBgb$F20FmcieKg z)AtltuC*#9GvZT13rR3XubK$(u--^MRBs<9Hg#OS%cGWrzfJJF26C3gBtR=pw{2c) zX+1kS-vOR``>cU(sL(N1BFp@lvx*ptF@m&oaHh*Q?~4d{m_lNj-o#(bo%gWJ-1n50 zInk2SXuctM@;q3+WNJ|Y&L_G=--Qlny!=%Nyx<{tw(gdd%V z&)LdcW_`0}yt_2A_07U-Jme*X_eR)TAn4(7t)WPpuwTa69A(xtknopsZ|l8qVedvd74?$rC~gHX@Enoy?WR6194&*Xpy z3>R~+c)U}vl0+7RVXb+nL9Ma*czbB9f9{*vt=aVl5ADJ0)atW)i% z;G7mZ3iM6#b>$A&6l~qTCd2%p9?437>G6ErYN4@J;ZksVY~!9ytf40I$O_(`ZN^UN zt_O%o-=Y(a(N%ZK5|;-DGzW8_Z#!CftB?3n&+zDc5wtN^VY@M>Tial?Tce9(TA0Cn z^lQu3p?EAMmWdYUc}$sV`{n4cW?Ec!&ZB(cRGP3L%4NC)^I_RGr?}vt88&#UX{i5E zAwY?|!sdjP3OhK487PX3Ns;P6S7K-(tc4l?>SjKBq?a?stI+bDV!xF7xQ-*6)v&mq z^!ZT;heb?@yvriVqgtveKh`?mAgPH=6&uMLL!Y@uz zB83-Z(OKF`5=(drg=Vvr202$^=~REHan`}Rcy8lIZa;6K!?iEClpmNt9?wobuHdy> zX*l!p!Ptj|8p+haPUt0TKVVH=N4y@e+IzD(Oan?P3zQ%4oRHH9j$~R~a%`nb=SvBB z-s2C0NlItUi!oyLAV_^3Bk-j+`6q|x(;aZQwoJeE$keOt+4>MG>sl|4!C#O|&qQew zRT$|s-qJKd1rL<;-{g#6Lprwed(m*3=P8g;0w}{GTuEVZY z+gI1a!@oI!)gbPWR_s^rboI4vn~)GQ<8FArfjgL7eqEH7mR`LHbCm!xJD)|^Fyf&9 zFvFW$^Gmqx&z?;}swC2~ZhZCnwN+e&!jPjdH0ie<{01!Wqs((tE`3cqYxsUgzZlXf zN?w*TXt__U(8UR5uWDY)|HCprNIR4%TrwA2$GN|*<+mS1`6tQ>?Mb4$M*=V!J zDZ6_QsGJlsyd1m-XrD0-Wn8mCJ-OQB+`f~mW3HuJ%rtqFW~Uq9GUJtGsKk5Rn&2Sy z0m*%<9gMG5$54zI`)K0)+m|u|-{$?P!if52Q}YM*T8*tM^TF-qlzNA2*MlZU!Y-n0 z;8H?1^5SpPO;&n#koT|pPeMA$ z^Dp?idA$Phrnx)7xdRHKn^k+m7?SOYS{(QQXzZ_ICLLXg7&Z2cn)y0t*1z=W9!AsY zPw)ODTb!C${Yw+0Q2)w=dl;(Jzcrri51QrHzX|-m$O9-xkM|p|5EA!@*BI(?p$B%F zLwAJhNAqt$(1gX`{7qs9i#i|er454&b)Nkg_%-*l6g{CG^u-8B^A)(JJEm@NPe4rz zr>$IyuLC35qMF7UWq31tN5dTgAuYN+ZnpK8MZZ z`7NjzmOxBJ*5zNfmgo04$052Oo;)z1kAn%yCcb7 zu_^*mLpwwHc8CQrLm@fjfpr7sI#WC2*o<~C1X(t73iwqT|1HIEftPt%tZ-_elP~BS zShQK@6HP(jh%Y#Vp+jN42Z03@2%6@?>)CJ~fJz>o07|~w2d60p_Dc&FIlc(cWcA_R zy-6U~Fsj!xp-i7o4I6MTIpqGDvif(D!T#90>VA`>t-2-j)NOfoQo9Rp29P;Y&#%k! zT?*9=h_*4CgLKh^AZws7mk`2ai^955^9w$B%S}vJx3YPzDLz;A%^rInk(61e?L zj-^wy4waj@K2UTv&Cp6k*Nc^bdYMyIm^QxalJKIn_gNhkPR&06$O908bH$Ge z*t0QS;4N`yVg+kR))a$-i&L^MLJKc(@*9A$qM6bghdZysd8^nkI_dt&JzM$^#A=C% zfN;>7ikhF?j?PH8}GrH_R0TzeU%_;O|1G=||;BB@m;cLqDPP^XRnSOJ{0+F?l!6 zwiNdSg~ECSvCzK|TVE*BQHf;Z0z)~j&CmHT_6A69T*$)2VH3C_#SO5gufckX0)-l< z#)8&We|$s#yH5rm`3xMdrN&y_$*nv0Qa?u)*Gosx9$zGZ63ee!d>ts>vOF62VFLc2 z=5yh{&)m)Q#=W{rLWhZYn$>$*Lq;!#V*T)T8Ezfg+PIs7bBo$8OaL}|dC@`$l2-NU zQLIg`)U#TIL`eVD_navKK9@dMsIO_A@-r*i`nwz9-Jy-8HxM_Hd0blxFr<-d{je7- zFP8+Y1$G#}+~g8-Xe^s6Fc5J5a8P~OuyelpDm<}ukFko}ClP$V>h8<}>$83eYm?dh zWGA(;DKe;$%+-%u4pa_uDy&&$AKO3185MAW zELsn)F}HvDF@zr|sQN!fn}LMq0qPQ8zHkC^ncVrD&mwCu23H z>v`up+{xg<##NVYPalvAOhngU*uc{dBkqq!7ck$oBKV1E6P z?l-r2AMsj6;&3pd9{BuB$ib@n=#u4!y|X9lKFvl+YS(qz4Qx3RX(0w_LSeWodX#MY zc4Hd-v4*Dg#D*EzPsS2g?RtJzZbyT+9K}k$HrCqD__{z~WE8@)Df~&^iX_$h-+)Sx zQr4C3vpExeXoQL$+a;_`*9aO{gon#2M49J^bw~(fP#Oq4DnGaxLv=+5y>9(#TvlAj zg*2i*vB2F5+m~6pZA0Gk_?0xXt8Ur%NpqJiD+B2KysxD=nl_Y!FB^_{+6ZIdwKSjf z!3fQwlw(I`tr#kdA}HKipR%6R&Q0M?S0%f?sZ_ACnO{yzN}&uKP-P;5w#yf$#krdn z3_M8-j#3J+WG^%oR`2ffR2mj@B%~yLi;^X(YRDXd!f0TC|5svVqq^1jySg9cnE%k} zH7)+;JI;JH>dS8c;g%Ry{)*@){vS>Ui5Z&Y%!6fTq({wKZ8|pm?@L77Oj(Vr=l7VQ$w* z##KkwgEfqP(B(mT%KHc7RV_`C(Na}}9I;D~VKlJzAp(ieSBt$eInq+YTwdL5S8Bg} z&GvHK(`{jq-Wam(?!EG=_X*iE<1Js^Cl$bx0r6KPhQ>!6RaP_%h+55(AbO*y()6@V zsLQVW6Yr6@mV1FoxdiCy7J_{8++lN0|5zAjwYP^m`_W6=bn)WW+uSVtwgE#J&|h0| zP+v(%wJIZuK$p^clQRZ}(Inj5TDndd@1Qi)P03$5Y5qNIDe`4UM(VSg!5ljDU2m(h z<_^0yFeGU+fDq7}EghaDw6clVg!SbzKtKLe4Pzb?Ub}3&B)&afy@Puaxxw3jR{Sx? z0F8?i#(@<-#gqN z)J%2K1)FPH?}+o}$fMtd-)uD`(QFKK>83F*B;6F^9Te$HV42yiu>Z^`eE;Y9ly%4Z zK%sV?Rhd8XSeEn}bu$?!3f2IbQaTGeyXYdu;n1#fLa9^3-Po7j;t*|5rO6Zxon76I+(Fudd8D}bsKwWdDQbm=#G!ME|lfh2U(1;Z}fzQ z8bnrBr#6hcDMFKOZP3iXf2zJT6MF%tfha|?YV5FR@-#thNFA_!Ig*H{S)6dxs1+qv zk4%@>3=85^++dV9?9b*eRZ0fO{08)lEZq*mRwVM6jpCu1zyi;pPb^xjx7^udWM$^9 zl`x}lr`J2W`g(kPqa=5X_Dr+NUQA>UxI^hpqnX{LEM{<_&$G)zCl;^Yh=%OP zQ%YP!K=fWe=1WgE+3#?2ZBzla%~Cr_iSuZ8yOGfja)~xI>#r}o3E!&j;!dG)YM08I zdnW66^|f!n8_T^a?OGB2)a?3@A4T$ydYoTwbl1H~OR5HbsBjKdt5$MHl2elbjp3 zcN9D+vUMqLSFROQ&SIYDeNi?-$cLZYB_Td@qP0z)O^YWT zJvh;v{AqVLWx%mT;J&G(>DNOS8O9V%m3bygQQ;34GLmz1t1`fSLY}+TQjbI8v(TTt z-o!Cp{~Gy{`UNfUn8qE&e3*3Vh107+1l!Jb@q5qz~PoDD*s4@u-4lV04}ZJX7;6 zmne6}#%C2=Xyt%etwCz|ZilDnm!dGB|4IX81b=Ud84XOo6bB!jQ670%TwRqh=zdF; ziPROi5CU&Ry^hmDW9S6~S>wq|sc8p_i+T#|TX*lYZ%KY0-qY@Q3(@B2;`8sd> zW7^`bFRJUr?ALMMThJf7ggGhx^4e%*y2d|_U8aElIEkT=-+JjqJwU=Wu2{J&T_5jk z&H660mo|E*6Gy4|qXP}p*Dwkr%j6LbK`N!Z9%XQm7}t8{*7qao_2=WF5x`A>lK$*B7@+;v z(B$~I3&H;P%!wIlQu*T!oC|3O8-1BKJ@Gc&%{q7b=ap~Nj)RHGVj{hYEQOk?iF7nd zr%DkmWGyTq?{<8K7MJs)#>bkhLc$GmZEtsWzY6YaEuTnkEiPabu_oqkf&_0FK{AAl zpG){{HZ;Bi8Kf)kMLgLU5kb9|nu%Yq2j_ZxcEVr;$vkv$nwm;f&g|k8T%4BfH`=v6 zW>)@id-$?d>Qe^mDy=M0xBJp*x0cGo0ay8OW6-ILyTMZk2LfGrAEPah_{C804rPgO z@w#wYqMwd#b-K{^>5bfn<9KfKrQyBNgONazLI3D3F{BMO)TRHNVCATirLk?pS}+XB z5T(&mq|ykOBAZs$w;#V3;$jkF{XG3*#G0SdHJx7cD2fsGpwsBumAtKRIjVLAezMWL`Jtoa;v5+w<&adC>xE`1nr za26CoZPdm(eP#A-%J%!KS9n`_8|R^=w^6S=hO!9zGaF^9r6sdWi0#CNXecBswy1HK z)x-osPup#zMWgXS@7`eT*N7GU8n?!gGma{>ER#j zrdEVSnb639^D97s0-4pd>YXq~#T6biceAHs@u(QH!bSc&;aM=P8GMPLK|h9U)N1X< zPW48p+~&*W@AHlAVvQpOSA;_`7)Sz@h%aHq*3`-#lcJIT6JnW`UrYMfYydAoi_q$6 zu}ZV1M}w-?efCK}usQwT{8#?l&m^Jskj(AC0BQ|mf9;ke#7MOMi+CTh`YFW0h zy?1%xS&!@+cY3&KYCh1AbsH(Gp*m3mppFP^hBS{g^~;SU=p@@-_Z_nvbF@z9Gho)G zQiC7l2**1i$Pm(j`KL1DHyr0*KE~B)2Y4M)ATJ9&Xe!Z$9D8j427I3JM76=>+B2%{ zI=xG4Wou=hqn;i(w{S^fy?1COTAPzoG%8tNyh*Doa4HT8soV~pzqAmgJ+5$=dQ~AB zY#&AhfK*ezr8=+j<|G)8@Vb!e8)fk3^3}hkALhGg2Q1+d^f- zSkw`Y&2P13%H^z|lN_7bZfn>ERD5+v8Pv44MjHNIGOiVMvs2kT)B{>m7`7G&nSJ|{KzI_l#Q63pvIstf-+BUFp(i59 z$39b)C~MNa4qGjfiogNKg_7OHKawK0nne~S1uwF3e0ID#VQ=E6R4uX+%*q5#Y$5@U zM&`y+Nb@Q%lWh5U52v84eD79b;uQ@o^3zSzSDSOpqwH*Qk$c zz=oWa*k@XIRpY7JZB>4~use706Vj&>orSIh*|s*pee+_)KfFFa@QF7ua}bB%WkZXa zbnh9_TEF5slYa>*bUp7VdiRlz%n6jDzO}&rtGDcX`gmPy1DhD=3bGWsOur+Z6_lz~ zo%gm~cnPz}-L9w0I#~&m5|$J+fO!t?DstD$90#tC2V#`gyLMOQ%Q5`-XMNk=RcLpp z@)W++**9>Q61meSfmC8=dV!FYR#SU^!uQ%Qi(TvP@lA2=Wl?~kMCPYZduFV4DrjRrG_8- zLZKYk(BKxuni?g#=t=!yll=WDOdv7Y&GIy@c%?DmL^LsSQ}Lb3fUr``jDMH2eCm6h z8%HMrxKh+6(mzE3`l?Ilsk`xgoiI8@TQwid6ahs=mHE?FG*^RiEyb$Fx$s%Gf-ld{ zZ$5YZXF0Z8DN2+_+|2Zsf;kx67)0*z9MmR(n|g;M@?E?XBvUx-N(%y+bteTB$%XnD zC2baG465i=`X~??kE4x!JohJeOX~>G;{L3w%9DBhYpU_8=mL%3e_!THV%rKZ`o&^>Q4bV;vVCVI!%hl2m3C6IUjT2!C>Zu?>9MD!cxUUgq^YBkewQ3;jD6fNwDQO<*@jz&S-N^X-=Y ziVKrW^8CWpkSK}<ul`8IajD@UVrEk4^ttZ%zcO`HIULU% z#;zb)nd|s}1wwnC=$MSl%-QnBzM1M@U=$QH7N8ab{hwMXH87sAFru7P+Gy)olHg3a zL|Ie{tw)X1D$bM6C~(kCl!hIX_J#QhY3gPCE|K(TIVWV$`;M5uF(z&s@=Jk??kHRz z;M#sywkhC7K*sc(hwTcpkwRF@vaiCA3=GY0EE_evs~v0sX9_*YzEmlm;r?n9RoK`TNu$KX#Zy)WDTA$71u48Y4=n{+ zk6e%D$Y)jhPy~HcpkE7T!-)Mq7}@{hcw?&SKUOVw(BI5Wnrr{KN?P_G*Gt{mJqAZr zaRwTo-RZ5Lo)vZmV&c}X@93H*Pds>g8Ke~Oj=oeD!fgF5EH^rjJ25v0@eusZxtG3?)|#BBb%@_)1ae@B5+6Pr>4 z3#aWskHMd;zv>>FC;?T6bML)HSDda*7yyI;)PN)UlNxz3Ne2dfc+VVj#kPFZZw&!~CghMk~~T(>pptWI@|SD}}hp%!*%o4ysYwtnC6 zpMpT{jr8bXAlI-Ct&$KCB(v}?ho$tcimnICdR-`=F3-%~y0a*ly_#N0;C{HFe8EXI zmJ1f#u2#kE@7U7e(7B~=3Y9&-cqod`&9LGQdAED^-lLXVjp-B9oegrg}IHTT)QAi^ZYl!CepFod;jhE1(VS$J8rpsuiuLZ!e8>f!WWeZoTR>1 zqsH_Am8>V6vEcr9gc!!GJ6+F=2@8ksFRtP%SThyN-fYneRGl<~5X~ zFXt;|_S4iJ5ikn9zSka0HaaDz&vI?A#ZX78c6iYE5`0#Dn++X*_?UZPC#hV`oSs=? zBoBAQcw(sa1QOq87q*lXVZ2)S(iI%1S$D1)O~6>*;kbv&lDw-F$I@%ufFjy@H28zP z8eG;fg*(o)7CPiT_E_W!DgC_J5|NYvdxNKa22UV9V=-{?yKP4m9(d`NHNoEIzM;hV zsc74~K|tenG9g+`crP*%c+BEOL-A9~dwRJ0>h7>TJWKc{SMQ*IIUegHNehBxV+2s* zIYN!?#uU9xfouyEM7(`k_`Rl}bm0c?ZmYE3W9P<`OVvi~9X9yCgXzz4wl4 zs$2K{1A-I`r4t~KXeE1C28KA&gx=Hs6XlQkM~ z%LkiV9}YK0B0>+~@}Ks*76S5Y(g>b`t>(29R7h^p<3%5_k$0b5gFmExYyxTd=HN&* zb!!9lxxgm)kA^zAdnAyLZm5|Uvp+rE1|lu=5<#5vx!}DKco1)*?Uje$!QR_^7H#Z> zj;f6VZ}(pc`ULcFe2!P^b@!F*8`|udy5M1$&HW91g*an}V#(}BRR(|$U0rk3*0XpUpT*7{2v7V1%$di|eM|Z3 zg+{4d_wnxju*rKO6h_DG5Y+E^bN50Ky@Ahwtkx;@4)?JU&yYbReqauhdp6vcPpfa@ zVuqX@qY0}j=NwD$V_VIx(4-Ll=$HGB!GDZRbT6iY{Y9p&1_(t+e;Tj_4BRKQr!*X5 zLZ!_NotT6-N?zo7%l0@sjne(94{4@33uk7B={>a-E)QHSu^-Mel!_?&%t5#n)`0s3 z@ZC0kc&2ClK~kQS)%*iADpx$nfhp;_eSG2-qPGH($)lN1Qd~P$B4D?CqSc|+o}<(y z#USgCFxB{<7**>D=k9dutw?kRmqt(#RIl;7+{T=F)Z&JRoHyqLJil{+kNITZN1Yrn+#XPI(|hR)c0*bs zo+xQ0gtb4&F>tn)5;Ba}x5PCo z$ha6SonxEun@?_`dsYr{lbTjYeUfS#WKa$gh6qDMgi>BwXHm|;OcI#&f~k*cp}_YK zQj9+l&G}wE{rtv!k;7Exf^mJxuF}u256PD)L8wf(byG>WV4RYPuC5RAKXU zt-Z|{{WkJQo^|x9Cr{FZEG}}7LT+YXaTAuX&`DF@1oz&k5EtDPz)q%7d16H7GkS4) z=m5sUnWXlGIP{8{*z}}4wlM14q@mr)*Qaxs4)<{uc<Sn08FucDSc?2L?TFtiJ}4g{o08|>=*qZ zPzOB>ejCh8hdJ&YJDBX%tQ*7}Ueqcm?jeRXs7Wm;`J)yWB9L+J<^P4W6eN6n6-12GX!po}-L`evv0R~e|C(3SJXs#uaRzq-NKP~T{Kd`MW z@+u3{VP(pC&hV^0>cIb{{?5XDU`VH~Ew8XSN1ky`u*+soXb60+p;m0Z+OKE?Gc;#8 z&jLK+kuJIwKqo|W4d@B$%{P~MkzRRbn7aA_Pg{Nj)Ya@0XudR3mz9wDu*qiRs^i7$ zd8n|!?7>MR?6BNlvK#Mp43y(C?k^;VmDW81;QGj!vg@Ag_~(eiQS*mSV(Sq@~~kE z^$GU$K4<&{u?p>AwC`lm_*P}{pRUO8c@!ISQk$BC5uYR(Hmvn7Eo`%)S zVWQj?TE#mC+Wq?)fI<-h!Ct)lYA{aP9%kF5q_;D!gphB~&MU617bEvR zklfuyZ`rRNC zxTm_6s4e*$H)tJRz#zq69jf4G7_o8|&*8ROEI5?fo6_T((>U>`hECzwwTu})DM8)j z>(jC~1YJy2Nm9nF)bxT$IrMd5ql7C^TqyNMVI@}I zr)a!3mf*%bP83%+FaM$RHllv{HNO$56E;!qCbUkMYV7=7LIzfWdZjtoe~ ziQ(s*_6P?iO9)Wy1%Lc;H+|6WD?$I|r5qvMKQ%pH7^Q+c_o>he&WxW$>oB43iPsj( zPT(>RCKYHmoS%MZKHsv`jzbz9LZKRF=8E|vLy7giV@db{&muMFr0uQHK@*cu#~L7p z>(V-$XHLrd2I|$Fm%Qaf^-KDUiL-kA48qQ;ofd~jlX(S{S$m_Z$dtiCU6?)|gLAER zPe1Uu7T*)P93OsfXw}%nLiDq|KGZFilNR4RkApVgSSz{uj;kEJ9%rQ9&HRy@;Ek0u z;L~7R9e|fDxy2}#nL!37)vB_^3#zAI&3S+1M3JDTIRZFUP+8JTIddN`+jzy!q;Hz*MXN>ns4$di94)I$ zx7U5!X;b;E7r5ZEbQ~X$D)n(wlL(fCaZ!Vz2SP)pRd;hZ;Z-|*?GprVN zRMD*BUf9N}3+k~Zu7trA>BTfV)y#@Zl2+8Ywv?DvAel_C%kl~L98&b*0Nv?EK+XM> z(rGpK<;j(BnH5ih=R}xcV^6D5%*$f`P$s_)UR_j?q@9kW#p>xoZXQBUE@$_`aw-)_Sf^Cj5v2my`r0cJ)IYBj)R{AH%%60<-AE+uWnFwDeE z56$oC9FJj9$1%O;-dOJkG^ZDQdt7b3-}GtjIh54TFP!osjlAR!^cJxIi>_xv)($Tf z<2*koG!mUYk89=heMWwP6L`LxK)q?R#-_eL*78j%D9N+;#jDmRaz71Vf^x2G2#H-6 zl@_U{dd$^&6do1WsIG0}*ZAC|9AZhI@O5&%=<+9S>)FW1nQ1%8W5R|^quRF;lR13v zJ*`%6yH3hHY_Szpwobx`;yI6w4#y*InyOAMpfJSS;$ZGCYux#$ugUL3!NHg6`@O=W zp6O0xe6QqN6ssSC@e9P|F(^B1*3QhljM@BZ*@oh~ ztkM)qGOTfb+*&j~tY`pozxhJu=y&a?S&dPsLI>nM!_~FCTJ5p$Ab#DuW*tjKRpxj6 zw~jp>ybtZ%90;DMpe$r)e1Jvv6;6C>;{fRAu!Npcg~56Q?{R1#ZPG!mTRL9RRkfI# zKw$A)6jN6Mx>Ct>@z+K-ljb(i~ zH(FmLH-45ko#V2ioev2ViydLlNYGq}T0j4uERt{S zY6RvNpu@(x=bOnJw`(6A?EejA_LIB60P;OlC!6gxd9SAr<4-Ot=YD_W6(E{0-15-A zruT`UW^4r$`TBZWgd|D_2>#l+qQ>8;G_gpXtJeMTlWTM+C+$Zme=g2Gy6*MrY`ML6 zd(HHChkEDnLD{EgMt2>2CywigyL+iR8X_EbNNp}M5~Pu+GMjt)sRQKBlvpvzz%+Xn zf@@NU1STnfKNgjHb*yK0*Jz0H?B*|kiS=gMq+P+4kABxN!XvePy5r}%Rr%|snpjhg zLgm>$kwt+d!IYTCwndD=hGy^7Ync;MtWSros8)Xm6Lk}ZJa!4CygDe-xGZ~`Ea0b2 z?y_(7m8&@Q`|(GkJKH;pq-1H$5Hl-}P%Q`l)`s~?pccqe4+hHr> zdvB?>2GoGOu$~jP<8}xzs?<%G#GY^l%=(}&;Du(a`TTa^&Mxb`e!!in)2>%k)77#r z#$WSQhhv1En`J)oXJY2zfv5p;j;%aG?!0M|%SjGE28fWh92Xv2$5i8^XrsWB@-#2{ zs%mD7w3Hp16n+8DORC>)eQQZ?iZ91U@JQKSE6sQA-Zw1ffak|a?>g1AnYbfJkCeSa zer^rq^{0tc7@Ecqz8@(em}$Y^e&Z@=cVyFI>53;rx?leQV?05kLINv{h=8X67kPs66p ze-*|8QMHpZUzj9E{H8m2-kZrK;l|fnoXcpiW0Sf0ox8EC-afBJ%rAudIjoaP{I&+s zO6~zh_|2}c#YdXmF24Y;q>aT;DZ`mhpEqZCMrJ)fcRhJ9@;V9u)|WaXte!%f7Or+= z`!M76gBQcsM?~CEsV$&hr_dQ5W`8e#C~VR?bQQ~S0Kffl?C0p4oQSsAx(Z}y<_)J$ zxERF_6di6&Olq4}Hh|`Ux#3mrTyM#08@~$4{Z82s*)WUdq+R2-qt&kQ<5#2~?=mw_ z5eubbNy}*X2SQ}c{1RxRgL1^Y+gJl`E)GB`JS7h&NC3+(D?WxT1Urj3nctB9ek%>f zB9#C3i=hS($bK=y{f@)k`IN4bJ{ZnbxeHB7V}pRfF!pMiC}YjZ76HMXgIrAw^B2i- zp79^PmCGe&-;#2A?x9PgZ>uGGzQFKm0O)|o^j}KlSV8$ctD#qkZauFri1s0D z`{^BW&CDz7lmj2O4c4Q~&pgPzL#D*2p;c;1O`iRMuQ)oN-)6cAhBIinmZ{5zduu-l zxlKQ&avGH5Dm){Il1$smLG>!p6Ir-8#f%Z(2qG(&99`ecnFOAwKH=V-MwO#LV$C0k z1TkO_00FkxIoz)rR{YkBvcoq10<2<8E&#`U;6~$R_iPJNpwK5zf%UngsNnAP+(j6TB*odMP zn1D?D&L#H5%B>uEN1w=zhOryrB{=#;8jmI8BY1Xp&VcqNUvYFUP1&mHN9H zK9hTUPFaZXK5OQ2Zmw1ygfJo-V}wO&0kZU74PlCNUKz1g-m>nZTY~}FCPZ`@=T-u= zULM{grMjymI~Y5^ro1A+<=wz%|N4Y`TPy3%I=4@1&AT%mZ>1Y4Wy~muhp@1um6Y54 zIKa)z;hyHYT9>ZReTB4XIL|)uR_t$9x)R*VKKC>;`a=}^y0qvm)+NZPDaXVYwcMc0 z2J@zQ=lhqK114AcQkK)8iR?=--2p%9+3|FOd*tk-=;K(25ZNS3wzPq}C6sxx0V`2q zP+@?Eh@#C)v#vR^Ya6xSkmiFlv`JSem(^Hgg^b^EVn2>T`^fbp1cSCfr4qp}Vm*YL z*g0t%$TyFaE|mY^qlhBP=oCCM8`vp6arM!}bo4^p00(6rpt-#PqzHSoETso$GqJxH zjy2XR5cAOEWQ1cl@Lcq4U|x}Q)oO>4#1Qy$H!%Sof^YD4^ES}0ghfkGefWVpTV-3_ zUPB4pT{{-}vwYW}ER+WvjYQI}l<|2%MfY@KH^C5?6jSna4d?k2>o}E1m}_XVhnIe2 zyX}kXS&y z*z?4v^DF}n2}9uWZd#*q>;$4}8Rcb|Gp9D2I$9e{EcB6jHXW~O zqt4uu)O}&JZ(N?fM0(;1(tr=-v>LFdm5;s>Do<+MQ&i7)YTSF~dveKjzWnpb63XAF z?kT)<_UUYJt$z|m(D+-lSzuA+w>KpxsBsk&cVvFEX}VV{!4F{!*t;8bm9sIXrMCs^ z*1Zqn%oBlHp}lAtQr{>?h#+}^$W(6r@hbNNoCUUa2D_-l%Yc;h<=bFcO& zo=6>;9f{k5YqZl(CwTmO5eP>o3@~&m28-mK3}+~0xcFD0OA@{e#X2t5o$Qv9_ngF$M2NO|!z zZ(Q7jH}d)`usBN*gvsJKfT6UuwpC;~Q77hGlTMC0K>PO>X#5Ls+xIJ+k`tmrc-!x(`&3eL~Wgff=61H!LC{0kug=eC0$8 zcl6r~^j&+2X+Cd}>$&1v*w?K7+MNAS=EVpisoqQOwa=Ed>Erxbc_5UtK2LSzv>B^Zz5Xmkk#DH2!Ox-%S7@j9O?(Wkdfpy0phmZM}hofT4 zq@&0b!EcP}lu_cEdT~|)jMm;n$enzz<`&@G9O%HN0p!Tj9DkM9TeZv{@m{+Y3zUQi zOWFw}TI?K5>+ER7bde0Wo4b^nOe;m4PqA=M5O|Is%LKP9gGVonYB>5lx<8+vygYAp z!2{GTZ;b`#J6J!4I!XKHxit~+UV7tjbTJXir2EZZp5wB z`8yN~(D>BvQ5EDglF&4KOZjS%sF=9YVd=OxD9h`H^Anuj_Yn4Fiva<9kBj3LB{69V z__T8#{k^EL4=;9B_Sp9`!BQ59@#@xH&@+tiQVOt#QTKhCv8^~ye}yLG^5^@}$b|Zl z-elH6;FF--{0S}RVC9o1*SX1*Sh4ZjKoH2o#D{K0RfcBsS;Kq>rJ(Jam(P7$8E@q* z$C$@xClo^+)QI}elwAt&3t(t3E@n%+i&nq|${2@AGF;@=y#d}ag2EtX=WMPix=3-j zp=zI{I?g*oa9hlr^~>?^*_Z%0T76VhxY;ASK_I%n)Coff@c5@=_P^+QJuSOf*cfiF z{xGZL*qW(Li8*4bExM@ln3jggFGj5pD*_8=MH9{+PQwiX2)=xsL1zPZEDkT$yPl>d zuQ+4;(`U4|zPj~*=ZRU5z4U-s+=9hxiU(_}H6QiQCR+i_s43vsbC8eT>j|BqYrlsW z*vf}+=*!0lp*oX8BH6)I;Jn(uLdB@my$Q<%Y#qEpd0L22CSrVxjwI5G=ftbDjWcTH zs5e*DDZ}5Ket)Gtwg@>A*OWKT1ctz@W?2Eehwd|Wg8xcHGqY_eFLoqpPNOODTaVd~ zI0maT(n2FH*PU`EK0Naz-DE2b3-W;GTk0`q##S-y@LD02a{dAA`;*?6IjRq!3G| zAu`(%M1@aX+Djb${I96Q_IfHj3LU~t0S!js9I%%|^7idlN~)4o1(T3GKOeLfzZpBs znGt)uQoqdaQNC`c-j7(=4m%!^rbgY5{)TJ|_#54e*Kh6&YQX9$ksx0>&Iaph6nhm* zPglD?)Lec(XNjOds+Shd{BDur7py@2+5e|6b z_Yd|WaNu}n(%HxU)a`Z#)jq}u6TcRs!4@4RBYH!CiYkz_vX`U3V6(t2kanE5f;9QS zRn$m?z`9_e04UqT6GPX3pbh_ILjH}cL!(gACc2&5u$a#b(Ca^5 zn!xhm1#m}PSLEAF9f`T0QC;NKf>?KRlh_#{H&oozFF+&n@NX^LPHo{Q*m~}7Isu_s zv}uj%g9ItPw5VC2c1khkT6Xzf$mt1r*qhL+&DLC*lgEkjcsk&X(H^-sI{)Xbs^5r;1k!QN1Z{q* zbmvujvsMR0=5pqy*sy8lB-b{*IRDSYlrUwozvc8Lbmm339_!aZ$!`(4q7o@%C$e$} z)5HIIvr9Sbeejg)b={3U>}d5URcQy&i80&3nE-Un(Ui@@DU!N; zQeI&ea0XW8m89M!ROWQe6T`p>vE)_P0=TQ~?hc8&2m#TQ50I=($5i5%L~K!KT2aBz z7e69`3%)CSmL%<}``8=$HC^G1du2okOt9c1(;m7A3Ocn`A$?)eanmFOavDGEDOKbe zD+)sBnrYoMy=gYuZLm%#Y^6LizV1%TFDwZS#IH;%@e3{mBf~*VgJ(^kQ^NksAD);I z4}q%{^~_w=IIJtHJ9*;9cMYfV08$-17rWUOjXW<@`zl68RT6<-&dd|jZZ8?zu4q$g zk`1X585jDfhwxKwY>$eiwZNv_gu*kvZx5yn=(K|UH)+Pp?DSdbnsxjo;P}-ru;~7= zsbNBGX89Rs%jQfKn5D$&RcgS73BNK_PI~rkW^%hx<=ASjZ@3e z+w<%Z?J)}-dTb*Uj-?IPW%x9FQ-i|?WOA!g_lcNWx6vDcd28EhOsbL1=(n6dep*MO z`@Pi%=FvNiATpzceWK*eYnGCll|SjeUvH=>ipyL{WJEDZ!cuRYYMhdDQ&5+Ji8N>3 z2&O?bXQbiN(+nM-X-MUwjJ}K;oIzE-0~Hc@DwgQA&!CzkH&C9?4v0AUN0n>SLUy~( z9oO3>0`DrCfU1)PdXHa+8^88qe4gt4p%fv2TF*{nHjxU#D5Kx{Lv#*k3z@2?DyIYo z&l)CTg{i_j2}w~AQQSF;^}aBvyD6;-D$gr01gTuZzcV5JvxwdQwEVBwwtqoBGgtgQ z>t5(zbhz@de-h*9B_}?{>8x5ee1>V5-gr6UN*or%lQ(`o$YH{ihnFn1EthV5srg!d z1y=MSHSA+z?%#?Ev!Rb$wYHy2`uwdZ%1u)6Z`)M-z3Bh#_TOs~jE11!CH#A8V@d_U z=a}xD73}4h``%kju#n`unW1!KX!?)%8BV6Zf}sC5jur?_@M+U;W4gkhxf=hmMuF0h z$BKUkz6P!o8^=b@C%4t@IHz3Yh|&8BL!a_;V#j$R8lwrPL?q#WzJ7e>v0%~0-4>UE=xshh}{Wz(Qk-|Ee>6ulD0a=J;~TZd9*=#h-JuM1eDm&&$|t=_qz zw<5NizyDQLSy$?b!h^3rb5;W0qw=~IA9xz%Ciy+i&fuL*i*nFMHfzR`@{49pPR~2Z zLZJUGJo3&$$uAAoMt!DwnzS7lRHzsZQ7NdAL*GCynEAyHFBcV-r&YE!{Pn(j z;}3h^zpD7(*9V*2-kqOm;J{^t#~@lNS`yA%5Y*@NIxWGj0!u_80jAY}a2lT6{CQN2 z_y?T*6SAR-s1fpdm;I>X7}^4>d`8{2qFQQ2Rrgqp#r$#4iTPB;r`e^Pf-2HK>-gt| zjgcOD*2tsS-i9W^ z9<~2gMo~Vqf83pqPb(fqWs+}m?7hXFp6T|Ja~Hf<-WJ&O*cAop*GFldR3hw=QHbh-I|Q%8?Qb`P#ngCMHmK4*RvjK?)DOv} z8n~2Le@B5c=^5*b^V2&+A_f?sLp(%MqH|P;(e|oMKtRxzt^Ax%`c*y%2_FAJiJhw{ zq~*hqt29whpM8uUQ~hYF&yM#LIxbvt1}q@q=zVobNH6{sQo5G#GF=LmwwKW+2?Wxs z(YQ;9O575>g=2sb0{gW@9W7-(Oxj;`D;|HBD%N$htNtqDsMaqm8)zhJu6Zo$wsRE> zQ_kzPZ`Mntzdgsi5!)a{q-SS;$0!Cd<3x`)YzX0B`*PM;auCj}Ek78nkC)rM3TmR(&;wj3B~N`wLY@_586p zSEbQejS!v!B0_p@`jWNq^Aff}U8rV$dA9gi=y+2-_G)#Zyb?#0j%v4$;(s-|TM#IW z1d0eHop*YPNaUO!v7VbKxN&gl z{Og1dDP_AGjWSEZAK!sI^)m#7K|qAxTccg19nVgec?EJEp|t&7eZf^luKWp!XT)iB z@vLie`6ebS2S~G^*bXGHdkW*cs)Kp zcRrZ3%;dkgpCSTOkE9aScGTAA?0W+~NDsWb%gaE#+UM5e=&3QRijFPv6qAIk>e7p+ zAKH}jUHfEhZ4}GS58n7nlnoM%&=Kc~nse;Pz2{H^YTgyszuHYBM*n`nsz^O-VC1d~ z?|2{%Z&L+daFp>c5)Y>#Ut#>fq)Xt=F{uVo6)k(kiZprp>My#()Z8~V_b-@MMPm2u zzC1pd_|s0a3eK9gc<<)CAGobp0Znw3EhJRbZdpK$*Vyd-CrPis5uzI15<{-&W#R7mrcyB;TZS`$Ys zYnOUQ$&9s=a`ML6`K*gf5mtE;i_hz+KORUQb|WnRyLRMZ{`?I7ptzA@DFY(1KfHYj zK~3>0@$O!9bm8hsnqWrC?F`M2_?u7b8vWRxduf0Ane&(JbT|e(C)hGtHrtpa;SLFn z#rd~9t&s5A(*faX=L}tHw1gbrI#`_t8K#Lezs)@6wV+}0$H(4!R;j+la4`j@W|Qq6 zk?~&2@2%MV>4#s|UEMzSf+CWCO(Rv31%o-FHWp8PgbWXp7 zM|>H#l6h|}#qNRRTHxAUC&BoT2$lCT)xFnkU8w79@jH!68_EDEdttIJ|8oh|-GhMY z{qRf9Zlu>w#9A0ppT(H2!#nj$RQ=8dSoCkR-XFeofy_=7^T^1P45X~Q^d&<~Zdf4Z zmssrlI3I0p;coo`NT>+3c67z>n<`v1eZf8mhVlr3YP<3#IXZeZ&mDeu*c&$E%D1HA zP|>9DID?0g#G)AC>G9X`vtW}l8T?t7Gn$iH+PJAN%6CS#>-ilk*%#7cmG`g$bj@f0 z%x3VZFtG1nQ?LlpRE1}{duD*P^tJVq^ti@9`lb?oV|Avfu zDf~#xgEfH&l2Y%7!f*i$l@M`Np4Gs#cbNwPNmIQpD65hImab%W`!SpI3cSvI)30GL zT8Lnz8H1bgTz={fMXBNF1SZs-_B7tZ7nd||y+zT{bF_f!%siTBz)wGO-&DT;I3zTi znjd3sP3pdwjD&M%lQ0NJ(%KNC;IXzmAhUwZ! zi^6oKcG_4^-Baer))2vxImFP1j4N8ou4jT~NSYPCs-;&%Fvd(#ZgQ79fc8b|Aeyjr${|a5t{WP)_zsLMSjV9vhK}i05-ZhVB z=LK5vJO=t%0!)J@qV@0P&)Mg+9PM4wEn^Ny?!u1VKFAVdE3I@ef-O6Q$}J+hmaRE} z*J+pa0+QIyA^R8_>I=I!89ZdBRrlXEp>8;qN)v!kf57wYSO%u?YB6=LM;RN`e1KO) z*9G*jC7l$L%9_2RYs~D4u37{KJ8$8*>3IcoN`3zg)m82Mp_NpKEhOneF(n)7N@ntB z<6kNl`@)@8#$X}(PNWJ)8*XZTRcuY*3bq)by!1{R)nO)F5WNJdU4H#~S`c2S%Qp^F z5kK%S})P_rMn zHp(AgwYG{Yxkm`x%#-Q%8Qp^AN9Jjpe>O1Qcb8)ThjiX zI2smNjCqSY^-O$P3KVEPXRdkRT!Fcwu9Q#(mV{+&nJM6t-W~_qH%XDRH^)X(r%Z0e zjdKFvYLS6I{)3hf_He1WRqXealM?KIMOnrE6?j!Rc?{X)zGM_~!?76fyy>gz|mF1h5#jKJd@SZDAG^VgT z?VRMoQJahNZY~^iJ@_b=v?jPQ{SI<5&kcdbx(ZfkHNQAE^vV-DP&w!OA;nCkjhNmq z%jJp7^~|Al)gu}xiion2YpHvS2qKtOd^hcurml38feo+;PM~^#SxVe}lzBBw@3tZEFKk*e-7d@9@S@TAm9NLG2>^dAHsl;07dLSbG%|J& z5TaEzwba-1E`Fm0;VPC*BoKt6u$w|0B@9(VK>bYQy%T{OPMKl$RLI~FUhk1dUTFLM z3s=^QFIpIcAb4c1!ZOm!9}(2V^XZWde{?_Z-$C!dhYK?Yd`2m^hMOgzDSa*p;Bgow zMa(D6S|4e7O0aeD=u1&^ZqVx8=Ynl>ZkHE!3E!00n%XnChP?C!ldDf*qBzqS)n2T_ zU4noYCxTMd2ODj@B%4)h31k5|-1SLgv&_kk6)4atzXGPX8llhaH)FlkxAO}CWkJDb z9EjXipdQEP6uH6sZL^D|QUPqUh}SeuO)kP>5Xi+8g}!C6Tzqj=0a&u7>55`R&LYv$ zx=Ts;`K2&xtgz>jr+{-BS|LerKI_&-M@QED33hqvL8}3Ip;XN;%Y_eX5CDD6Rz_px z_G&e<9#c(QgbP$lcHYQ4VIA8At!cPLV6S|S%zAxd5p@w^&q5*{7(?ip`0K&fwoaG5 zbE-N~8%L1ZZmpp}&qqZ9TV=XY>@MxDC1!eQcvZ{oK1l|l#Fu5ILArAh>7i|Iy~wK< z2E)pV6}b^^!{cmN)#a##@kk{+l3835a0kCLs+S&OHr6<{J9C2ZN_pL9kWE&;5l_h( zk150`@+>4n%$OFbGRwdyIcoDfK3cYu_FLI4echlu@Ur&ZBCYe|39eVdXKp>>7lv$! z=^Cm>wQL<&eaeGVbD1vd^`jDB%}#rDjLdsi@6sit=NQGmUVvo~olWR48lL%u3`5?F^l)dTH7pw%Uw9xmV<#qGO3jBc&C(BUk>A<@zri z)Z6ZRxAUzaRDEXEPWX@jj-=OWtVi**_J~J$P?;d~LLn=>hwy+vPyZxQ*JvE`@Jxf6 zZ*t&n1?6)?uC7nLal>f4Ls{)kT+ZV{x}y5DVgd+qY9+O%&Q>r-`UutbsD6g~tJ(z4 zM4D^hR&_PWf!9OTfvHo((oA7<-9G$8av`}i;XeF3G?{m{T&E`rTfr=v@p7wmWl< z{;O=s2zp}HB&A44nNLR;Akx%jGsODBvHp}NDvDDUGQuM8{1WyDo+?cj-23lE;{G#L zANHRMXY|&8pM`1u1-GB{_=|T>cjXV)gZfKbv^~cf|DQn-go{ zOW{G~`@F}JE;|g7?_oustu+j9yxiTh4nFpsva{n|HMLm4MOi+s6 zIGPcPW~2+bwB|&}9N$`G1pD6-GdYzLIYM*I$b8vrc)2a>8qK=tKa8alF>}$%6T#l3 z94u7sihrAwYWYIsTTV2eJ4iO$N^aM07U^baN)}*(h$7)Sg6VxfxK!@dtc`YtPW;16 z%^ptMhhiI-*;h;;(6k~Far`dS&iHodo?#1Uog*EYj0?Lo)jy@BV?MkCj1bWr*iMMQX!i0cs%v$=EZm)HO zjlyqrPXsIWsMH;C-w4j!$$UQ->fFnB-KYy*gp)`L6cNup%*hfQrWI`f#>-`+?O875 zB7t@~JsfEYj~)$faEbhWsG!Lk0Tc9do498G86~FI+000>&H@X#LW=w6@;7Tp?*KE~!Ri3W z`sS6I(qZ50nWBtx(K{-w$k*e+%1JIzGx^h6wD^y|pL;1L-hYDYd^Ah^1`W_v$O9}8 z$=Z4Pw05No|J^gO*OiOk(TD1&$L~?|?0r+k_GM z_8>84zkM~!Q`zssBZ6U|wAZsJIUW;dCT~$?025@uDk+54jG?&Z_Y?3oN_Qg<*n2%V z>yDX-T?O{QievMq&ZZb|?pEDgYXkeh=xcZk8nT(rk3CL-415c2L5Cg>oBiI9i>8;! zw@FQxHDm0Ti@pwj$PSjq1Mw~wVg7wCne@(UCU;Z zo`!~}v{;6BoSlgqhTLqF78L+Ht-%CHpG$|&&V^q`?hbn{^0M3O*&{p01IA&DH2ke4 z4E%L=0>Agl%D8=aFEfbcKBZ9+d_)A3u4y8m&X*A4{x-<#+E{y|1vSUC>f zKJ1|Pw9tblber!sh@-oKM6_%?d=Wqnkz zGoGcSGe9_<<;Gaff03L9x`I+IwFLQwlIHz*7zFUW@}erkoU^d z=7F~qxq3>_7x2EL{|V+^+K2KP|16MUmdpK%^PDlVe%Q4`&*{_hu_1!SuA3aUNr|89 zH_3D?#m%jQJGsRsat_{CdGyj?x*op(RS@Q_BwM|Qp3-A^R=$pJ8<#^lWuWZFdsm3R z0J%HYetz-!1^7n#zWwan#ko5dcCD?81Q(@v z{NmbH_2TVo!$+5X0m8`-zf&Fr{Q{`WKK${48c4T~`Zj&_(ej&vn@zs{Sp>c4F!CZN z{$;^MM8;5@Ahhp0i)oFTi+}3?k}7UY`==oDfB4~_zR-U!55#G?C84%WzpbB6shez=eq#EN4 zo?XYfZ|M2|sCWfA!hW?{b13mS^73-u740XLz3TW`@b0 z4$XOG7jhGMRfh6jdF=zm z(UG`0(rZM%lbN2TBu#ZRL@K00gdVCN&ZWwZFE})bG15aVp`kRCjT*CG0OJc4e!kTv z{+lRhaD}O2%b=P+$D6xM>aE$X_4zmWA6K^0H=ShMy;4*;{q!hC7lp*Mge{(Pjp{dI z^-E*zFczgMABTI)jY>mrI{w(w54S!4{+8yGmtLM>jomjSUiMCAq}-t{;T9lo#%kLX zcF(opwXls{?@pmncR4!>)zkk#$w+KLMo#NBM5heF*}EGw-0HK!^Tsl#?#eWPz|mJ$ z3m@}aRdXBJlnc>4{`P24_0Z;BV&Fj7$HUVbG{C*| zWsCwAuwpa0`FfZw>*?KF6$U<&X&+#^B9#E%D;fOAz=69bGk3xQ>nJiBijDK(@Y+a* z{mV6E{|D;zThYT|X0rGnnk^UKf2m0oT>|CWyrPoX*C8`p%sFp$+%%fR0Q7)-58IW4 z>CgX*z4wl4>izS5sZtb>P^2md2mvXA^dh~49w2lSsiB9aG^Gm&Ap`=_YX}{L5IQPI z@4W<&-h%~1MbVp?-}gIn&a63S=B#_}U1!}p`Gd9DNj}-@*(uL{KJWMIO>DXx4%VL+j!ki3FtIbSSivI2Y-KwGwg&5E|c7G0O=zZoW z)y0MYwpK`-^-COm2|O>)H3kcAEsMY|AEDAhIXioTjF-Rpwn1$QgaTuS=GTs>fjx=j zyi_w$wsrlQt@!gd(9-dI|GZ&M2lk-^&gL>n1ezaBV^mV)PlZv6yK<EOPUl9Q^QHV>Ua+)e4W#`IAJ2O z$(-MpSu(c-bWOe!<^Y%Yb=ftl-shf2jXYYzWoqrbGN?1VZZfMikbXz1Eu!(krZn9U z$4^ySU_Sshx@Q)L<%B+6Oc@;z@7WOUpB6PJgg4G-@QwQ9jX_1gw*qc!FRb6N@W zOjjqj2MP6Q(=A{Il?g+8^JNP&>I`3wadnoti_`}SXV+DEwr?4R{B6(H`cIg$G2?$o z=5mcMZyI0DdkQ`S?~J8VS!+;IE+7kk7ah|~R0|3&B=r-&z5eAvQen|wR$ZOVeeK@$si{8K*Q3(KuY4G}_$VkoR(Ikyy{DfXC`-0{lxcSR{t$J-%wgtx-F?3} zA+$bBLvM0dZ|j=hDD5ux@adHjy?DGw61tK)!qMnDTGFB-(zIH>C$((1WHpp> z$+Ig*pm>N=dkiQ10hZ~6#m%Bxv2E2>p4LF{byY!bQ$!7Th1=}WFAIUURPKAfjshA+?S2v!%>IXa zP)1~Ax**ue=zR+3vn{UsaT1#uoWc}Dc(bCGTOBv6*YWI1<_d*QmOLiM?AJnRXsstu zoftm+NND|9K}54h-;`+dkaLs|-5b6b*tawR*fd<2u{#-l6tH z2HoKYh_bS1V#CQ%obxM(q|pHP3sIm};JS1R3ryJP>lJvWq@ zkme({(p;-={&zqF%51yZJY(Gmknvx1kA>+@r-S>ee zN)kI>K2=h~ERWpSOQ{Jf>M1*=p&|1HLBz%?HFZ4p(oIQF?Bpi|+a zuk%k_6l9ycUZ&qn8qP?mMk_dwc~`{Z)$L-lt8?Hj*QPdN=?i+B0R zGIMR~m}3vGPHWdeX-OjeNy*vz0(aK^=j-6rVWQLby(`+<=wyDFXcP9VL)EmikTZR# zv^ao7@j<`ZnCIln288%4000OSY&MdXoKg=P)$b%lT#?) zl%=Kc^40k8vwss|{F7tYjTbdH<4GC_Wd&rJul0KHr1L zqjdJa(j*=;5^PWGT>$4&+Rp|6Qykw!@zO(nwEgA)$x1y z!|IWPXKU}}=!bB2n-7!(?rrMAZ9@iF1nzwcwTQ_Fff_^H6`GQkT)a>P-nc-jBAM27 zhs}q+ujWsRYIoHJO~7C^Hl8xZQ48#`%PV=@zJgRoksJmGXXO7LNh!aBU(ef2Q zN8T;i`TlrNF<-X|Y;FQAXVsaO)pppm`YpcXj>Op8MaSL;fJ>{vE5`1`#wZ@bGJ}Ro zU1ch<6KzWN`}LHGFS8H{%2!nf)C47Eo3Qu$Bjp)wnYy^Vj!srqf=>X}RUFb zR~TVX)<8AtvC@W%ISww!c$Q)reGXyD?1uTGEKEjM$vpz3&i6O3(CGh+iI1wDR>I zl4cJU@5?x>UYhiRH7wkr%R9@WSlB@t$ag6$z_T5y?eUuqv+3w?;J`HF<&Dqw2@K24 zEjmB|$|@8%O-Lvyq5SD6dW}pY%7;3-fZJlnFH>IARdH@As(;`GKN(r|g-F) zo&k{VhP?^XTb6T{PlKh?Z!mcIOm7dUdwsU^(Q2J=Z8g& zw4bKWh?{e1x(Ew1Y)9tPmxFo`8F8^iTwiqQ+eUsnnelrW7TC$Z=6+eHH0b>}_R>^B+HAALgE`?^G;1r^n{EQ>_(@(L+$G+U+ z*4_;#QCZ6<7|}zv#@!-`%4q7IW`G_d0x&a2JNgr#PXuE;n9s4&*oO;{ztSG(J2?b0 zjj2^_W!Ba)cWoRGjBvAKpN#R9rS%G6|4!&ED~5{3Ck~8HBBajTaCOy>MXMi+h{5Qa zZ|dAY`wD%upJio!lcyfZr&8tHdt8_p*?Lw&s2wR4$8S+R>Yfp{%IsPokjHu`)~ZG> zZf8^k^)m=K!EpAut+s?OH_8>$+4UikdjA*?}!+mtQX42vuv*hX0&s z63tu;IbRW|InWTKSMYnr^Y#3a1!fySmFywO8KEEaX~YA3zxZ7ZFG%k!wj%P`YYU@A zPm6a9yxUzJAwIS51$Ov_t)CI&-h`%=P#r#X;kxX0zT9p#O&G9~MJ!pB3RcS+A6KyIPMmBgDGo+0zAL5AEj zq2F9Y)M+3{RgOH>!HNEw*~^?LfB)S!I-u(godo~a!P(&_ugK?q?#aW$es<@k=)8^%JMO{>xK@Ttx!3mV_OB%cGr3aS^D9?R;^ zXHVul6LtofHCi&>l~}a-R%wLhU*AH8oG-M9w!7X2Eyf6gnM4_Br$1PD2v4i4z^Jl{ zBBaHpUT5O(91rMMfp3`;e?o*6MjRW%f#fVfoFbGAm2VxU9|AN4W;*n9nmuUFoO9m9 zxNREaR@ggKA3OW&i}M2&;u&Ujie__Cd|H}3<7cf7gj^cb)#L}1h=INe>2@Edh@!-Q z8%OcKxSH~Js%F?75q|_=eVks6isDvDXWTF+-}H6T-|Ed_+ts;Y;P~t+JIdbmdncI+9c0KeN+cCRbWCo zh=yb$!_K#Fbs(NQckl12&`+x8S#Qpt>=>`vrS4zXmC+wB3(E^B7@%Q)NZbx; z9~1nRA78$|&&-RaG(=a2=tnxc>E~`$TFs>{B^O#esOK%M*SM^E$-J*s`} zb5X`GyRxm2=-n#}r>y?n2Yx+a3W9%+h{u);F2~9yqa}l0&6?{Cf&`K{@Nlu!fdjlV z{IXl@hE39`Cmhbl!GzRk^V(*8`&Mn-Us%CMQQJ58lI#hI9S8V`{s`9iGm_ zA!d2%*6^80JF#n&I}yPX79f%!u;2Z2k3m!uUaL9%V?7Oou=0$pMkj<8%7Mk2y^sxu zoA2|WZfYRjjmtf>G&1e9B}~=AG@sTAWU7I&se1eXZmYS9a50?P1+)i@EUW56@f~|w$8fw%l)!V?S>9N@pJvyOcu$`5v zFnGFg_w3PiKp=_4y$Sgp>#kR=_A9~b;vX|Y3N>u z?V+~mHWwoHtl7-Pe$lZFvC$-o$YywFgO#z15Sh&EG2c|x5JV>OS`Si@d0mbBZ5^34 z<(DYGtpfxRgFrC4SUkz@wlQ+KM+IW%1@Qkaam5~Jm8@sRtsp}W>8Q(|hzMC7*Q^5#Yp#xru z_PSdvioIK>zXqaRCbT5ulu~T>&{EFV zgrA1k)bZqz>aZjb-(m6!CF?A!MXire8S`}nGXNB_{b(<GrJdA_PBRff zhXbWNtr12>#h{(aRstC>T1+fFetIQVO8CC)ve;m+R=#017@3x(#(%&cDsPUfYr)Bs zA6M3{pgc7guFtx1gQvknQK5QZwdF%y9V_QOl^0oGa4$MS({s`MT_7#u)NzVIkr7tytm{W-Ga%PUE3d$>jtu!xP><1sbU)SB(1Pea9k~g!!?+#u{ z(D*2z5a|FQ`*GS2(*3%HwIti$zM6}yL#`y!eNUS$kXI|?-Kqv_hfqFp#@uP@Kk~%Q zfF|o&Jh!W7QPv+|kST8B#mqG-#33TXk=W_o1w{?0=*)~dm9OC%nVatqyDG(vgn#6E znNjp?5c|QRG;`1_+tSD6N>M<*f#^3Q8>0V2-r%w-SgJbWM+%c@^F{)cl8&aYnV*gV zVNI%oz0l!H+AnQv%2cw+@`ZvR%zyVj)Fy(nTC><*O55D~Wq|J5z$A^n1=pT~OA!54Um=DW;w|sYF`YZ0E z^vke$^9j3t**LlZRe!}K9!GJ$r*R~@+t}*r@$RgY-x zEH3YxW|PTO9>igwPt*c zD^DB>Qo{DgLi>dEOfB7@^(qdONbBIWRWj7T?(48FLii9QUQGD0OF#Y&_pFK;V{5`H zJJA68hXf2h3_RF{Fo-SpSp^4_iEtMjW|3ixbBVYYJ^h!^YjRsVB4&qXbpYICS-lOJ znl6u^+&HFpENEDN=IihH)p^vwaR(4*NfRd1*Ei*DSXs%qU27ySS_#x2T&WNeZDs+! z{ybZ-YX8t-s}ZkoS??8GZd-wPmD)OR#U6n!H9Aln0}As5o$j+th+pM;^1bB`$@rUA z`~k=^AM`(#z0&?K-SsbFR{zNe#>jhXX3jyZAVkD1-RkC`{^>(nh-A9ys9WxXCO^>! z(&JOV{*e44!k|kv;e`69&kgVEo-7mn7nA=#+G8F+iK=u2UWG^t(YtYH*Z(yHGk=W; z5rX}{XAhmGV;l-M;$3rIDMXS}xyyk-WZ7y|Qpwq&ifo}VLou#~lFoF4{)4ZNP)j;FqeX2HY$3Se< zfaF^>&mA3Prfnz$c-*ot+(ou*ehYS3qU7e^B%aLefK2|{Fp{p{3~LSnXVCv+!z{(~ zdjY}098Lb$#$V3^s{U7j{};yq{wUlfgTZDR{Gb9YBu)%nr??(QUGG7E+yGi)JIkQ& zd;X)+TQ18MH0_VNmPC8_AF>9Zr*FQx60@0f(*KYIq@$_f?w_5-I<~xzOvl&Rw zEUGI690pj#6q?jmZeBcn*!$}!-4xmrIc9OioRn*f+dxeHmRV3Ns-h< z%VEv0U`W5j9&S=<5{cxVIljm%; z5?IA)ZReT!-^Do>m;bBi|M$k!BKvu}@fzQ066_yu0t+$u_wMSPPZXy8%V!ZJCW6_w zw5;!TlnVZf(*9o&6`i70|9qA6?7CNCKQdCXwC5d_K zgWIX!pugu*Tlrs0)IRKZ!e&VfX&5-Kdu6yl6sx6bvyT-wNeB5a?raMC7)mS?#!ML)ilULCcxDTuqHk>AeAYX$C(O1CM;pIL}|)=S<| z4pAb7t|tgR$|B2R_d>ARO=0RR#@GeZAR ziy2a`QpT>MY65l{?uPLXIMnC**v{v6&6Lq)HNDH0G@4Y?eCp503VOetKT-uj#C>hY zsKgwqRE)H}w^79!JTIwQ}CVfM6ZPG$OOS(CY zgq&a4O4Yj_90k+b+Uk0Pb0cmqd^=^s4B9M%3!~ogqEtO@9>YjAE7u#Fg~+H$spJOw zrNz3c&7OT`m03_n`CyGS{9|qi#?T>+Od54bHB=gO?#_-lOfC5a@V{?yxNVGL-Z;NK zs{hh`8{Q5sF&kx^n5J{IT?|P(e(d3LEc zy@9#g3luK(01u?e!QrRO1@p)>fSq}dZZOF+iUVV$k!FmCR4-Y$22L*uJzS z8!NwGgmbrS9~->2;R^)<>|BKpBstS`Zdv& zYgObP)~X7r;>pxCwXm0a+Oi>kNNBY^M7|Uc;$-lig}~;!3U_M1ELgJXf*J}{Nv?gV zxoqsk)&`~nb}N1fq)}(|CYR`f&ErbsU9|X-AoH1+G!l<(dcC3p=2}Z%yjI7f;C9eX zdu-JQfz6hiz-t@npN&O%oE}(9mn;Q8yHuH-9SP&8&0<|gPGfxO0VBBslR?bLlJa&RNJp7{O%(X7@UGTi@y`)D9hh+LR>VVq7HL|CqQ!X?D#Ww$1PoQKW25_+9i{ zdS9O8+-<=@`yW9fR_6aPx`ZSAks}7I`609#QKn_S z=5;;h+$)bR3Pq!O0tq`$W5yc+^+!8DRt*Ajo^(w zfWU1s|G1j@-}2Yo`qo{ylZDF}aMj(^OsQ|4zYmJ4{@K7smG&>Vw3NRQYDH00+orz> z50>lXGUW2F(hxBUpe||6d*vc}XJ`fEd3i`}*wRwE3>tuk<7;ZPX9Pf`rY%OI`Xo0a z9+kl#8bz>F%Agv<*_qSh|BxU|PwQ3a5|j6LmOfA9Lls$GFW5?@k7nY%2K5!@F{GD8 zW@t}e-R*+bX_j<+x@m0~yMK&NvO}{@*o%A9JDqaKL;)ORId5oZOrNSyrD#Ioh?t_V zGjMBo{}yH6$sdw$w-mx}-01j2vJ!q|mC^{vU8=sz4t#7dNSpBFB2icrP3n0R8j884 zb6OuP>-tf~zNmAgO_^T(PH}0sqcCW`0Yfv$zfMv_HA!i>`tW_{y#bc&pZ`%; zg>TQQdJgW=S1n~{250-oG8iHv%JRGKeY83(tyWhdjEG#Ve2&5u?6|G!nY}K<&1X=I zDXkb7(m=prvRyvUt;>iqe6Ss?@E}k;dh?sx`|zW8-U+I_>{Ja$N`FXdJ-$Wcbxzn1 za4?Tl9P+GinOF}h=(})$>8S~FV~>0kX@c?p15S^4PjjlYW9gz z7U?&3nR?3i0w;?CqUq(iOd_=z?%7R08~q?)eRA-^+px~L4fqziU3LY`dL0Zdo*$w> zg>Mb6o7d(qrC=VP|H}TRGik}G3KLex(*iv&spNU}9x9Q}E4S^)84-NW1G!a&1o=#N zsmgQWrPAQTlUa?Hkl@#r3|Tdm6nY`<>i4fCnMX&`P=fXl@@_x4EJhxkND+J+60Rsc zan0ruF}}~Ox&q`vrEsXDmXbHqX;yZ^6f%pe+1UwwQb~K6`6->f%l8dnQ2nEK{*P(R zml=CwnR#i48@WhT3$;T|`}DiKQoaP8%m|IWR8D})B7eHj^Sfwy=<3l7QSvp(-O?M~ zl0EF`%5CJfon z^g=0=()HZeP0aLW!6D!-G-5Y@rKRJkzur|<9@5e#DvmY|JLj{qmL`9Gequ}^F-QDb zR9gB3%SgGG&(sRWekHfk&+gR-;k~Q2Y=wU6AxWi@Tb0+b$W;ZCC>nXvKlm0*d%(3A3#*NK2FkaJ#m zpp#AN41S!rhF15{bsdFv0-BiYO4570;BOr2g%@*!yBj076^&;lMe=RW#eU;0g$Sap zqTNST53gSo_^6tr|7gRvE58>(DeNA>!N6wyQk0-tisf(?@`x6FqSTfzYBd#ZlK z7rdGI6lfO9ELRut2!Og4s(5cAQ$Ue2G>z`FXba@CCNHnLm1$0S9?U3XZ{Q6CWc?SIgBwmO3*bxM1Bn6aj%4p+@FjcW76D97<;A`n;pJz$~8`iKg_P zOg}WXNUCBzTJnl8;f*%meNm{-Ni;@R#wS?xR%GWgRgh{{MTEi8_Mle$wH?E@wWgL8O>>bSKkS zq{)A(yf)=);Vz|TY8yTed{k6K%@Z@qs9uzYRK3|`*T*Ssx6`FC04scjX<% zJJRxqio4GFJU0_!vT%|8IhdfbjUUr=Y)PXVJQ)%(deJO}L8{V%n%4t{17i;O*en$k z+T%HhXqIfRH|@z=1W)~!8ocy1QAB}eb24e3$Pvq(e>&oz_Akxc#r{5%Rs}7+DawhJ z)FuJiJHkMd!681L3ss)9JVr}i_0V3J|ITedUa*1gao4+|){;Z@W~Kukf0CSun%9Ag4?fKYZ1jnoKR56z1>ehKXgx+%+4^Uo^ewGQ zU;*TX;)@${$JE;P^@{I?VTN`BbllM`YRbZqT(!4MlvRgjd2j<1E6 zW@v)%sPap&xslm;XK@!~2S_@%PJuu>e;E=~iQ2DCLd_Hyd`<-*Vq@WNB}4{40K<+k zmxop5;?{e!ilj8ZAGuu~hfP3 zNR_&@yUh+lrvjcGK~pG{?@%0B;O^_z+9JXE#sJwmnGAkFFt;pw6^zC1S^{!M zIMBH-9>U-4U=$Bhk+W%vJviHItgG5$5$_%@YrN@*?L2aEGINL205vA*;~o{}L|B{# z&&c~@&orjFt`UtJ zY?=VE9*x&|-VAc(k=xF95r;4MJ=mvFkSFNMd5z|8jdOFj^~U9;O*Vf(u~z1mj|jjn zsM%+JD{1-)R>)%~dAB}Gwlw`jCwMj3hNeY-8cue`Er~JuGK~#u+`BC+H}+WN{)_y8^A{jLR4WT2gLk%C?`)h( za4z`h{ncLHeI}+*qDFK%$37wUVO>6>}d(%2X=r^9=w-`!05 zF;iTA{%oxA2~%iu3q=d9LaaY6TLBSBq*bnGYPyD4rnb#ViX1ZKaS2sf+{bfbB}DxN zYaLen7Z$6YbA0a^dfcXoe<3iq z^zCLtCnK-n14dvhpHPOs)pM{do2h;hC3k0odbPlGhUQD$4Em@6+v10kHx;`3r>bhN2_k@rtK5$8)7SG*y2GkA6q?IU!Gz%5X7WD zr3OKLyUA}BZ+l3P+|`NV_7_lDab^6RAL2-3tP~)K*fX(SuD+XFQd_gSt_af|N=OtE zgMT<9FFdQB+E=OS4Q!kl*`I-~z_;VK@A)8ps!Pl^SJDC16#Rn7R4L{5@+`;kG*>pe z^Q>DFUOratvFPW5xX7F;;Ni{`{K$)RqI&y^wlw1iS-ISajcwIMSLIYe<}b+h{kFRl zmGj^R$RZ>VML(6t<<@egeqkV3wkA{Y_e8VI=c!qCBntSmgUN>UeOJZ-C@K(YB*DqX z^`g8x>cG;~G~8jpD3xxh{%vPy~sdeYwi68^D8-< ztF}=6Dj2qvNa;d5f*u_8JW#0-DqXUGees^OmAxf%2f+j z*_EJ2`E&Kj?c*zLgX8Byd=wF4etWXKBDNyQ7hLod)u1F@L7tmB+%HfdyM7MjY*6R2 zvjTJZvM{MWIXh1%EUmDv+hM=nm4EEH3$JD;Ct;Z*$9~-DYQPf@D2;P5Y4}^4UL8?@ z?&b{ySbpTWo5ju9wPkxVpBVQ@{A);c^5k;4Z=T}7w-MC!;A6{ z`VVB3+^nE`c<2(XkjqsQ%03cvb)B+xrjbcHhx*hDlPi?n1pkh~C0m!i{8UFgsBY{K z`Li0nZxaPhuTnDu(y&1g$^tsvEv~^FeK^>;_8$`ZQ@Rh4A0qnU!@8pQLK`?Ub8MxW z)!RY-(+L+bj@;#u7OnOVqPROIgy9X=wdpyuNahzCP-+DWW4b9J%+{%E@E&0yH~d>q z5NpY>M$$k%4gY2X{?=4&%VX~rxv>XgyDLle6P7*3H_k-+Sgxl$WFby*kIr)DF2t7< zN9kTVLONz4HtEd5lI6BB{Xeo3*q z&*NP{Av_A_x~rH%X&2!`cz9}6b3!Ivn}?ZxcJq9jDWJ&Sv6{x)h;JHE%5%W)KTfY~ zaq2pXA0H_G{seQ3yK0t2<2R%7l|=#>TO`l}j#UZL{eb~f6WIHOM_s<@2VNBHP2U-| z7L=#m!p=Ws;^=Svg2Cbw1_y`Di*#;_-1BME?C9}urZE^x*q>cVIHBUS`Wi>3R-Y#W zr#pZ6BR+UyAm`LjQFONT^=S92*H>x6D`%m4l%c56iPN~f9Td4WVN*=iW035Nf%?eo{5XOdYHRa9jK!@KzBF3U3>sbu!M+$Z6^0<87Obtot3&R+Wy0%_2|YE!YN`@a5hour8sqp3`zi1hHS~$ zG@a*~mH$%K|ImM7(zIP;$-1#rI~6|Je<`@lI(_5Bj+M6YY- z@m)^r>Q%9d^bSEK{NCp<#gKqO`(Ga2iyaaLdLmn7eQHI+waWO3xAScse6gRRU{hktFJ4&i9;u$A4OaxN2cxaw z3=~$6FJCbwe=2>zU1YKGRbC|*yGB^p*UR=QTc-gcayqpu*D&FhzUtP~Q4)$b>h z8MNw&E)SoStvjDv=FF6dm`q2=@7OVvvF09Jb+4PK!aqy&iSv0ZG9fm2)cY(ur$?XG z_?Nzwst8D$3`HNJRATKtR<+PXPtYE^qdlq>ygid9dQNjks;<(TmH!hhz1*}p;u8%| zEGn9w8bcrdL36qr*5p+%V;dYjg_XfuyrW@ z{le6RR@jhH%LZKMe0IV&ebXiDVv8{MAs`}uAWoz%3?gG zFYVU(y#jwl_oQC57{yz!IH-wH(I&{eII=|2mu8{L`|BzYv`wTi|LZ#PzteJzuKH&= z-A&C)qOHm6nJL)gU#a+(*9809A!;l7n+xN?{5L8l#`wQgtZmr*nW5b<)F-C?O)MA^V{Hej+H`cXuJ(`XMt5P_#~3lz zOX<8v(=qNIu8qvgplEga!n5ZidBO7{KEb&jb=-V-(FOkJCVB=}2xp4*2|Js-}E@82-IFLP|Y z-CcIME$TIPFy`giA#Xni%AjIf5RoylltRg0ksHk)?L{lPhnBC1DKV=s$_yF_GaU*+ zehq?iNNMK=k0y)AK-zjNPb18HHlp&j3hOFCcti|Z55^9ZlV_)*cqY$snmKDHQ|NUJ z!Lt1Xj|A`CH6CA8OXu!Wc!`v2Oe+GeijtKU2|Xf{N-9)vo$tYQXOz10D%|Xn_tt7$ zYrKj2l>SR1T!08I^bA&WAeu`ns%I=;%x+(h>yli%#-K%}%1`_S$l2z+B@6YIt*}%s zZnfix6Sm)JODK?qJ;trf-C@_`p@`$-FgLana^hoA^x1j2J9`}0KcHf8zVSeS{;I}s zNLee6ep`iekXnRoxFM~;8S?b&G+|~QhX;c)GAeaI{(gF2Y3sV3JKLry`zecq*|Kt* z`xQU)x5`9|)X2QQ94+fA%6zwq5jq|TnIwxZ@x0&nt&E+UM;)550J(ed_*I>eK_t;- zkk0pP*@<=f(-SL>e6_e7j;E+7;Jgx`G) zhTNSVUi65*z9`HKq!|)cdVL^WY2^*^d0BMTqMf_XOX<+zGTF_U1YL`3s|4~m0R?9f z=$oo(p>vHg&|FYgy@yhH9XNMYBvCzAL6v%UIg$@a<$Yhq{RI1yuC-@!ON3O{)|t8D z=A&puEzRs_IDBlA*aoZcW0@>x;2tt^m{}K;sdpF+u3(PVcl2Q7qnp)UQ1SxnJ*@Fjx>CKlfwUJ&eM%B*C zBR6MmXce6Lwr4ijU3cLnupf^jVb-iW5~mZA__5X_ekxl~6j)MHnn7DfC8$4?Yx!yV z`75nl$@>xIK75~cte-}1<7EBwtYEWncMxKeHsFYa32(cgH__p=B+@*M_s$jDKeU3E zy0c~2ic{>Fc=th7VV(*mXo{n0+Sib+>Jo=s9}6Izo_jj)tUnw{3z0wl9uT%g|N{Z4w=GX|s2u|f_m(K9D)HPBqYjY-M*dn!4qzF zON%m|%9r%z`!Dis4LkXOSw3iSN?ax@vj#_oK3s+j!kmZj3|N%U)qkArl@%8J(=Szp z{KNqIz52-ugn&%EIyl3HT_cGA57cjVsl}n5Om&=uUH-T}r;H%BG`5sqk>;3< zZK}WhA)G=OFhVD{_DOvM{t>h?3m{Q5C8pdYEzZlFh=UHB1b!C2tq3VE84ntme^J8L z7UVg@*4)K_+5m-6P!v&YZ8_XB^I1d7L<34PvKV;$q`96uSlEEC6MG^g$K+FXEZO;d z2Dq2?d;JcV~E7Qv*>jo&0I9Kob)6v*XK^#RKyTO50TXZ!ivJY`?jf`u8wPjHKkXGXCf6t zIP8L^g7>lY`79v^6kd^`z;5SNNOb0wZkj-c&rTh$b*Q4S*%0KbVURo$K=ye|?8mfq z8{v9#-w;ZMKN^rtUvMiFF}+m`1J9pHSE^D$%U5BJ`$)$&j1A_)XQS=EG}OqYadIU?v? zjqvi(%Kj&g+-6at7|QX5n{jgMj7Hpx(J~jqGIUYdKu=^px`uz9c0Y`+nV_>279LUB zp_3A(YUV2~KP!3B&@3QKY-$VZ>K*UpU3l09cKCcHazwJHi)sMrF?o#3BD;I(%^k9@ z58`OXYBY{zpW3Pff?0Z8{A<`wGA>YPkIM(-%!i;oe}@Ikd+A?Wk)3hxc( z>%CQOyV?HZ@IbH($|-o;4k+7SrvCba+glGsbCVZsq z-Oxe}j8nLU;WSFI2QuTwZYI-yXVJDcHtsj4OE9!xWzQYF89b#WG*uzo);UNwTcDyw zkRw0Bk%sH@Xn{p+D)w_NQ%&a8jOdP))?zD~?PdW!>;H?r_l#=l+ZT4J(gf*J6(kWt zmEJo72}lXO3erpHAVn1Eoe;WoNa&pqIwByw89D(}igZ+(3gZ7}@3Z$A=RNNor`X0GUl4)_j{h-sz=j`GNaQ;e;yvU2rJ&(PocZhaUaJ1;{&Je@FKds z$2_o|Vz?*bH9|`~aWcO}sF%}JazJpQEB@3X+_P3a!L7e6#*Tv{h=XoopUH@RIkOUh zj~=Qp>-Ldq!k2LJkJ!H>BU=>M6;6c(ncqIP!BE;dEeGv|uE#M;>?q|d9=hpe4!J>| z{+6Ptt8AbcrnncN+HyBM8)q@saNv|%+bP6tDC9{rn2$u@CLn$h21ZMI44G9NjtqVG zdX2oklX+phc715MkEv^{Hz69P4>9dv&T?(jkY}w~r-S(h%c~Yf43hY?Y{#bz!O~S# zpl72WAI|6LP=Fwusr2XrS+E7PsZjFbk%0jTt?C!@^F_ar1mTVO|2=G_PU1g^TlrRS zyJ$RZ81=LZQg~lhu{fcIQ$eQ&d@~+Gca{dP`9*lZNCOHV=usC!6YIw$ceu5oq^5XA5U*_-4US?$%{k>_%zqcT; zY7p}GMvM}l`ZUrux~c9m_IIaHUdy$l`~TIcrYX(6HFIH_wKqx6 z6Sybb%yVN4CKNubGJWIKR#CvTV-sYpFb<9Ro zn5xW{6xrENp0U(_AL*8FXtT%NyxuqQRzq(bg&9Wi$a{H7|HzSQYD|NA34AAylewP0H(x!L4HarpNsI zEc($=K$jX(8}oYLKs|5mD&Fa3lsxBzk=t81_YqxlA-7BK8?t%9HNV5?#EgY zy!@&#U$@UfGLd{()3T(UKKF1){Uwi>RM9%?%47S?zHgqjU~aAY3xy#l|F z?LBp)%2$5dyp|kPXwqfTR$uk`*vTQ(;HNM6Kq$mq&e)iIZbsR{LS(eJ+aE?(oN5OV zWv*1gZbrFUK*@PQZ0EbXK=ltsf{y3Fk2N=|XO!PpWdSt7Upx@6;(Md>FrrCscUYb;`$lo|l8f2; zbdV_^3(3J|B9>uHmYI1ElZ2ShK_Rg(x?}gbJv#jP?$AC&r+%lE^4jd55(Int!u*OGbvbMb)j$TTc*z0`6?9i z2xB`V17}4h5=H8S&raT>WQz#k@RJ!0P`~9h4fA+nefjbSt(UER+4=L2u9%V>`hx_?j5;pBH{}crAfoXJNqslzcahj8f>K08 zDGY|*P>ZQ8uEOuuLf}3n+S}v`omU}d66|;RIfphrOZz4Tttyr!N#Gc6vrG=EmA8EP zap@?fYf2dpeLdep6No%7Zelk=+W;C~P-ll~=y4At&OGmzKj3@Olt&gM!dS~jN2Oi~cjK9NzN!)gAByVE! zVcjs;(NS%3_ruGC@6N&&{_1K9L5s%Y^aq)gZ_KfDh^)&>v{kI)T;Q^Bx37Im%fy^; z^BcD>6H|gB29`vKLUq>Bajf|HLSgm(U8l>3f^O0`C74wf#GX^mL$JF2d-_|q^vij8 zn`m5!I!tE+wB%ty&J&*P36~Rd-^xpOCeclJtepDz^Sls5Nt?gkF%^juP=#^7V{*@`+bhhR5JTc6H*MM{Ew-?8Bi9~T?p;qgxqOyqts3AoY{T19TvyzlB zt(4#nb?CguGsC?p>7oXYWcqF#!Z6CPV&Ts}$GZQ6=t$Gn30dKo1p*ntNAy#2{}pze#^6GU=Tnp9H!qghV&U|!c6bPG0&7#n*MV)#$M>~^s521pKfvRu2jfI) z4qczd7f=-A^qSy);`ZE&#CG3(ai^p2$1^iMBN6NU)uNMiXcMH91tmcxN8clk(R=An zrCudazs?cyEPXK6+Ft#QyVWC+?X`C}j7ySR$1-wIfb!+_flBk5R|BF0L1nh}%$EpuTXqrdv@MphwTKEq8WXp?3?lAXT?dUBwNdU~7THC20kiK4eeW z1hLHo>s$(q7bQ4^=Q|`tL~QRynq6yT=R=mE5h~<92SE3W+tUoyT_>i0vZa&`hO|Dz z7%4m<@CRae43Jup0EB*{bd;|eOu*q{aFICkHYA4mg{$6}8W2n+B&9D&5@GVw(QML6 z+@o(L-7!Jw-HSJ@x$PQe=0z0`6!LVt<{I$*_-rAi!EBirSsk7|n4__zvkRv6igSQH z^Jq}$Xqm<7q|t$fBTjv!V>Id-bNMOpgl(c~pZp7Ho0G$~#Uwz=&`N^S=7(S|ZU~So zLc3q~9W*59jI5=3<~*;J8fW#U`;8ej_TYJf)BEU?X^urAJvhP#(nRWaJv;gKHh4RZb`?BW|DAXHpH~BU7pu}RX{R^s>QbAQGWfqeUUZ- z{MM{odR?h!^?yu`gY6+9=QEPPf9%R*-4Xw1Dd!nW8$U$qo2^CYc zO`Pye|C!bN)+1hxIMKs=krqs-5%dWja&xQCcWSmgpxnUhDxA?L#1H!6XX23FzLBGlgE%I2om75c zu~Q#~JeWsc))JFGks&++k`Q^QE^j0sOQmK$81;KkjmtLxY8Ol98@h`_nUA33td?;4 zfYP?t$laPUA7c-=Wss4(ki7L#j-VLrfUV_fI?YF6vGP){KEe&HjcP4zJvD>Z`0!NK zdR^cT9ghR~H0^A5qbcc!Mq?t3vDs_V1?n;CP&MOB+A=LAjd_Zk`gpWf`b+$JEMXe! zVLrl9ZCxq*&CON^lxVuhqJKv8kae^B$p_e91hAl9qd&xn3tc#(ervnsz$JV{$W%M005LR zC5n+5!*`TJ$Gt1p;WdxPo@?4hu{ixGb5?P*D`*U2LfSE8Or%$hAbShd+Zkmg7pc2M z^Mv$=LeP&!DNVmapac{HccY3z^~4jmTI8gHGza(xgWD&)-OYm9_>K2&_n5=efdn!! zmD$nKz5FC8ywFrhA}iLWlaohj0W@EK`@9 ze|p{sL*NP>)^<`h%zavf?hnIrHXe=`j*g0v@@&(X*N0f&6)VXXD<38W+HzpWsq2E$ zpR)Saq9N99G~B0WPC1Ot*%U# zBtOyC0>IIwr0!UFAP125LvpeUfN}(~U+E0{s{SnO1c!pax9#seQ}nBQhTlV^x~zT^ZXA_WmHB6iBeQ&EuhDaaGcfB+*uoo?guSw8f57>E&&TCS(Cye< zEAFPqrcQyhdXgeHD%iWf2yh2ni`#M5FWIcsohnT?keF}pz&vnMMcV??_CNY7{cA%+ zncv+gd=hvSihaMS&OG1YB<}l@$BxaF@#S3#9qz_`M;E{(zVf>*c`A(HOrT)OY4hxa2DrIZgEO<1bGd9yqpx z;QKe-mh_)sV92;$NQAXkyve)PYz-U(p%`QQUdDSg179Te!u^0_hX-)V(YYvjl6q+} zKaOo@vCb}X@)DJW)d3fzQ2S70O0Z!2WRTs}l#Sll_>ZJ+9jwz^=aXagkjm%UJ{8sj z1>zjHn7@zr1x35yxw(6_26B2)=tuQ)bv5peS`Fl{xj+t95Q9-3Fpt8!;c!X*v*vv1 zR~-$GJ7h_D8=^z-iD-010+jHb9HUXO30Pj))ux%&y5MZ8bh|H(BUdNhQX9k_GCB;Z zZdA|uSf{C_t;?N%jjhLSj-a&#g_fx7g_H4`fhq#o-8_z3@n^jnt5y>13)Sn}A)cs9 zPGUBMrix@zhi7lRwY?Y2#rHKQ^pDoU?rIiESruY_szeJ zhKvs|oL5~I??T5Ou4d!vkK0Cq!KriAKN|pi;Tq1(RjU)?%{GX2tU$69vQ&?IwlwR7 zfhex_L+Z!Jj;n5h=-3ZqeA?Pq1PzkBWrfJ5l`-e@sV|$K+oc@YL$L-`;}#zoE7V>- zGLt|eiB~4Fg1sBH7W0?PbmQ9P<$auaK6t|ctwJE{=N9m+()p^-{E*l0NKVO`iqx7< zYstvp=<3KQ|4v07N4wBfww8$gd7fR%nu(#otY4$3M#GcqW+Smm4^g z&iX!^)AMU=WJz5$|As%Fm?g!&C$(8M)ym_#S^Z!su)Wsb!zeUI3<@BV?en3vqL`a8 z1<$`p{CFAVp5HRiHsO{onlR@uNC`RLr>O%7`pLfI$q{L2mTJfryrWLpZEa`%C1+Rc z0XVl1qHE!vyp=Fbp^2_6lJ#J%{c)VxbIceF)9xN{)$GtHC|n~wyIlp+{_^80Q&!-H zCz}apX){=ol=7|}+l!26JnnYoV)zD)zfY;-rIwTOw~!}oG(Fi>i=L6{e7*D`>{ojM zW+qJ$W7h3!xK2f3O89PMR`n{yPDt^gMdRIkwE5Ws`CBCB*gjf!h$-&%PESO78mdTx zp-`O(mJ;77&HsDzZFka|<5?#YkYvpc!ConQ97iv`5%9T1!ow|eVeKRNZl>YD)sVHf6F}cJSbgk8a zizZxNZ7ynNZzpl(0gSpO;4`Jd&yxwE9CZpG4-lIqN6_hpbg?OVckA|^zuf&SevOOv zz!#Iuld1RPANXWsy{?L$!GJIY#RIt8h-P`oE;z+1m%G^5htk+c^n@e&_%xuI7ExXXXVA z+X6g-^So1J4+jlSL?o$c&|DzU?UuQOb&&kp;Y1BkReclxq=;mHa*d+ST&cM47ygGB z;;hVQc?YEjs;4xELTR)?kob#DlnrJW*y_B}Cxy%4maB*m{6x!K0&j2(q8E6wQWOhV z@f52U`|7D{f0LWi8n*a}d4n)hCgQtcpvty+K%p^w!tMqo#wzbv&RxFk+9>pNi;qhsR*3L^ zByQR_J0H0=Y>UGqM$`}`*n?yuBBE9&C_5nHf5H-6r_5(*hI0wR5v^8LoUY#UobkR?o*2ld60l}+!@B*ORY zJy5;x6h0;Q)=<`+$TPB>vbstb7WScnJ#1fn&Wr$K8rih@)CfR;cQqR~*d&l#@qe$_ zazVL!ou?5AdOb9{Bg*NjwrqiYUaA*6x4#X^l=sD1k#y(#3f-}0&bozj?146;%qgbH z&)IU=sfWf*lLGb?rMlxIyWQ6iIZ!N?lY-zRKTv~SbWGUJF}ao)%in1Okf-0Sux?e# zEk()>aoX)@Q_fxYDzp&FecwCYvHYClxWnEnQ21m&B|dF5Ip1M=%nf6l8ApIm1@mSs zxFRx~;cX`|-nV)9P~i`&)Go8G^GCHdzC-BwX96He#v*5Ak*!UtVK=t3VeWk3a>_bd zT2NTXJ$W+o@RcfsZJ?tYzyT6*jwlM|I4m7VA6B=&;g+8VhN@1BiQ}MKzWK$3ANIQ?uE!cAtGNW3y{tu< z2H7>4dHF6PrQbSX_tZ=`=>2D!EezT8Yn4rBJo;V$jzv|o`gITs#w@VTh;}Hf& zGeSyTIqVM)PHdCwL6CvWzso)Uiw?MdsmAoLBhLAnf2HcV^8W|G64if+bdwFL#T?Pc8|m6@j1u z?0m(zS(V$D@`4yg!esyHieBv36*-zYoG`zoc_yP_Nuf5>kI|T3Q)LuL`HrKjqOKJq zl_!clgEAj5LTNL_TG|f4P>4|_KPeYnWtgx|b3EWheS!7y&dAFIIr@@8c063$ffF(g>rA$Tl4D1ah`WSVAT$%AgeMd zxP5tVaOI%RF+AOiGxnpqvlS{{Q^vE4C|*aEi^lvIF9YR0sFCu1hFi%;{_>p30(NSv zJr^T4MKHE8xp16XEC2DIkQ*@xZ52O(*K51^J2g`a*Ga4*}jFh)Xmc&lz^W!O0hDxIifzya;IHAN9kq&OJLl3nJ_ zD9u!~xvn#hN}-1GpSweU@Y~arF-K(P_Q-)r2QyNeWm&&G;vY-v73!PXbQ+ep#ToJg zfrH(y+6BDgp7~`eYvtgkhEqdU3k#-~v@{{@!Qgq(g)ivT;GYA{t)cRGG4Ki)QL!@$ z9{A}jm$a?c!cJvMPDc9TkX5;yRa(~2X|zkr8rjuuYj&%i8)C^+o!)cvCc=}KU*M`{ zEUs6_?=q$F_k{QQn1Aq><2WiE+t0xQlyfLvPKVm;Tkfk;nE9=GbRNHe1wjh-D!N{q z@I@CMH^O2ni(DkN;gtQBGVI~+pcS&i)MOD;PANhbs2uZWKJw8W;|P;|*;?hF&Zj3$ zm7RX}OZm1JJGpVTy$1z`j$f6X8BHR|p8_h2Lb97qyoIOIt!!M}@@Phj<{vujZOA@4 zp(jcpm$fA%iHchGHG0!E@G`9FO&;f19a3m?G!QrhxTG)GCO(v`nB4nw=GV670C}rn zbO!KFj)fh1?qQK9^U}Lqq|`E?;UaqrNt3v;%cCEUwSz)3$5JgQ$SpZ3p_Y(QbDxNe zE^xoLGWfk@oPS6VEU{OEVd*yLec$V>Xo)r;N9&>i3rDZZ!XXpgdShG5K%wuh6@`C* zLDdOqjH|%UH-RrSvVwvr2O7(fJg)D@B`TIR4SFFCAwYf|Cj#J(0D_z=GqV65a#kfC z`Y6k{t!F4HllOj*MP~E2&<-d171f*UYq`#Y=^mF4;75PE48uZ~j4Lk`o-?2Jlhk7} z4aCI6dfdoJI9%p*Qm#I_WiTsrYCG)%V&Qc==EM54w=}^!2*qb@xi)OlG=CD-p4qqt zX19rHw3~IVbLz*uP?LMl%~MA>!=Ep1=kV4y20zf{X%J80E9vZkU}He4yk<&HT1D<2 zoL3D8Hr-xzW{xV>@<~tzMIGH|8^#=StD5p;!gGnExUY0xNg;Iey)Xw$4!0*&j*c97 zz4BrGv%8x0gC>PTHbAlxFEw-o?H)`(n@um^w_lik<&u$LH}kgSgx{8oZpaV#cVp8m zMkW9q9w@YLQg1TO6@Kt2MV>GD5$=xeZ~R5)*taQ7Q^JvZcR}5 zvQG-q{?Zq^&&c82!n~1YgZU=-@C!%exVh0(jq)*vFY+@f|3Y--W}%ESb_1=CP*Rr`8uFVt@g-b$g@V-HcUn4sRnShOvb?-f(M&~& zXwzh~U6eO{frw_}kj-BNR*BSt;N%z(OF%Ps|} z32_7JF+T~_q&uNo*3&!hMa;Y_O-1)c-0D4O_IvVNyS?pl4{%;z??9bc%#HT-D*MM^ zvWiZ33~EwWEOfA|UYnC~532b>=oWhUEHk0BYJP!E0Jq~hk8av4ud)EQqf#B;%>#hO zMkFptZQN*)&6vue&QEz~TQpwlF%|7yCS0@y$gQJZgXY~hG@H4N=Y@1}8$g6o(fUk= zwYp9|f1=g@*)_c`df5A=Er<#vy2hr;%9fySd_%@0rV(5AXlte;)&d69@qJH%;tE3O z+trJ$eCTY~MRx(;TXK_tbZ8@=^6NF!dU+g3FAhgCMJGFBJlYDS**$-b8K|LnN%bN( z35N;i(kF84cn<4UQm;(%e`xBhdS11dhADw!t!97-3Wa#ia;_D#$NP6Pb-estQ)8tmz$w+o@+qUL z7PeI3i66?}MC_)T{Jp31Og*+~i?#AyvhkE*M8=Hx2ta(Ro#g!JC3*Q3V)0?3X1~f- zofR3CP)b;16i`TTn^&(MaGNj1bz3ZSpw0P896m?p?;FRgUL6vb!A7V~8V6mrG}t(+ zYVA^8s7l_goyj^s4-*qQ-3f>aau-av-4SbTtkzD8iYDwa{YFNg!f6~)5ITeU`~Sc` zt<5w+M9a~d#a%b19#gK=G&f;M!wiqH*GSXn|88aBDiqVISe+NB>lXX`U<2R;9uV^r zomsGK-kbK{$4Eao;}BU;Z!v?$|?Q=S^w>+s{gAVhJ#sb~B0R@ks7U zfSOTCcGTk%=E$#-1gexI1W>uY#2%l&b-f3sA8?)Y}nV6TVG?fJht=kd_yTF6!5rvIV`56`|_V}^4?hEA@ z>5`bvT1w5(tAMClPS4w>oYV2r>1_I}gd!z9g%37#gJw6aD1|UKKpG;f@!hIVS$@0Y z;J9At92b>hzXbQ#PJbtH8i8Pem+G(4yu8HtjW9=(j`nze=eKlm?P*P!^>%;1+p4Db)Q)B*h(Iuf`UEq-F(;2{3989e< zz;1iretQi^vC;M1YsB(3Z1#gMuTH{vn*_O;9Z6&c&NAapD83(XeC2sWr;frc^b%I4 zvrdj_87^=DDR)OR_LRyG>SkbW$pL`_nnKO8e75HbSuDTUq6hgLNpGLYg=sbJ)lau( z_rA&h0s6N<^N0@5CtbUseR`tBt(C>lo*6-oErkezaO*RpsjMt+H|Uz7?bkZ(ZCX_V zJG6SU?(g=*R%&F_W5>}}QKZ;O)d z)p+h2LKkC*6j=_~#%3_h{_1>i1R8yMUz38xl94gvXJQuQus9+6h12Dm;@ul8m}Me$ zdZ4Q;^r_lk1Y5bfE{V)|5mudD>fn-@sA;8Vk5yJF^NR3jcytHH{NbC$GMdsX0mZm$ z%1LN*m%FHsRFGuX{sVsKF;|2iK0J4Q>UPD8*kW(;VJ1A6uFG<0)ZgV-> zEtd83fOr89%gARVw)E#yv2;KI%6FnSLYawR&BNi^BX@i(mM{t%wN4}zonYzRwGq!Gqe zdYKs$?JQ(0)1oVI&)yGD>R0r}=<(UM*vNMJinB}<8kt-Yed>1qF6)TgI>@ZZW-i(7 ztV^iXdd&!723n$`9;Vue-dCf+=XCh*7T0aD)+4ApRDB2Htc@P?sj(W4TT!s=oEPiQ zD;JELdYN9;As$I9CSYv7C_aGL+WwBb=Ekyz5fCsIYvad$N(J*2g={z%rS`%MkXIdJ zwU<``z*S9oF)H;*>I|57&I-mq*;4eS9MTn_W#7Z?h5!iGqovABGYTmnP#>s@jLH|X z1{7p(@qIA<)_5YATXx!PhJ-jmG;wubFXXwNXpN1WTvSlTkfNB~ zE0w=FFTliXU86EG7Y?o2{6_gqbbGi;AlTOxhRF*IYpI}50l2bBL_+-ZD0UBqrPz$J zY&1)Q_J$XNwRL7Dveo2}ZG~@s%2PMw9^m|A5Bz-(+tkUh~5S4()1r8eZ>TY0cS69oUe8$2iNe z_*u1SLGs*)fQsS8Rv{^4WAMY5Zg@tOkM8feO{IW)(B4mZzbc1b?7tH~(~ti(8v^+e z>GGwR?yQnzW(p6nQr!{Qpup$XX-yX}C`R_dc|nfb zL3hdQu6ms-q?X+%)Itaz3Ct3(5EFz7tp4Z3_S;gku$XeEwdD12+s|WiNv=9Nz8bu2 znQDaC^eQJU0!PQiZmNpH>@2phlZlsX+-sZ|_-`|!0^cUcI6XZCK~I@LTysm0|K&!2 zKN*rlmEoaobX5`*zWrd;dN=tqL@hB)-T;bMGc_s_c;4)fa0J2L)4bri7()?_{}5J4 zxkD0zA89pD9*mJSB_2LxJ9xj-mx8zpVHfaS6@8WxYJXU5022fVP#U@_&@-g~vPaDc zwv&rhYveTdneS*`8qZ|0Y5ZU|DFdibB|@Oao4??AHWe8EpmZZRWWE=<*}s|}Gw%80 zWBYGF!Z#SKnmao4ofn@`lxA58aY1AxJ~`t-%eB^Q_Bf2G02eF`OD6xSsfy{TprqX= z4JJ+>Bftk4G&E%gDKqE4pqdmY$n)I-!&V;6M}wXC$Mc|YW_alykRN=N@}!D+!t9;X zr#wG^L@yzx7;2oYX21{)CzKs7ugXA#k?|K>H-5kmcmBPd>z}%i|H848ugQx#}uBSYhPXw?ixqE4Z(+F zBQr}vl`?GKa(9d_Zbljv+(BN&JT=DXwSB1$KUCWLQ{$eq(Rz}0Q1y|jZO?5}Y3472 zH!lP~2K2+DZzhKz+FQo@tcbT91NM~`oGz+lIEF4yHbPIle)GO8f?;1T8 zph>d)moKRPM^OVda`AsXi&}I^+rK}KPv{>Pqv9WRyCGEnr=kDlh8_P0*Qj=O8+pd> zgnt<8UyRjemRwY;dXQV{c-`v{yEE^8qv6}MNvSVl$XRlAu&tF;Z~wGM72DXj^!wNS zUDcPRkAI0jbu?a$xw}0Tp01Mdo$ha7|B88#GTr^)v}t}AiOHJ9LcWj zdJONpGa4Uj6AqK3OnlJsS%w<(^-*8AlS2)I>CX+pzX;6sIYqxYLoJjouZsWiU6lha z%iBMVcArYZUOi!lIqV&*Ket&WHoI#b-btA_N8v`uFyvEL??sXsnOVyVhNek<(;hxn z)|Y<{+k5sAovfeq4T)LPc}(4el+R1BM_m>}BDN{@N@ucB3SaM@y-as`ErLEid}{RK z(S#HCxhx|{6=XCv09K6Rf-4v5H#q#cAJlh@y{};!wm8cu@0-;J+W~?o4ApBrKLH5; zAmkO9W<3uDA|mwasjTcW3Zm00 zMrO_am<5r4Px_RmN2SgjCQK0dwiOA< z@NqLL^7m!7O9Sba3RZhl^IJmi7IdbmJ$ZiiZ6p8JQwFQQ2o$AG<{J#}!Y&&w*uKqq zU^D_3h56g7J5psZx^Da~m&I-D1IP$XiG5`mzxpT#%q0Ux2=2W5BF3-#sR3q7krV~2 zropTh_;Qg70<|HGOj$w5%NK^7n+_h?wlwB=ziaWX=2ytB)Ny@QTSidB^6~WQV6#jt zd&@B8ld*_MwR^r{9}_=e(Vv^g+z#0m8rLNiTiHch#JJXAt&6{%Co7QDTL|N<(sl#f z>-o<^h_cesfk$8hBKN24tkU6ZBcIR4zZW%pgzSEhYWV@`Z73ECeDlG%t@i=P^ZQOt zs@fEwkR_^WZ9S972tt|Z=7QUdPf9vrXuZ^;Ru~B(kuz#)jeCr60kc?^viX$6ZZ~~l zhIRT8>^twTOYo4#`kVHo>%!r=u#DL#-8SqjAT%O;N_M9 zQ@82&aVKexmf_EV5NKA#e@|`nZ#_u=x*_vl)Eseh4BA~m2$f?TDiB8(2Vd9;0HG~n z`uIC*k{)%+_ZLA>@v-6VfK@8l$~#+$YO?Ioy+6;o>>YcpUs!l4atwNgTC#Hor?UpV z6J{6c&Z8a$83fYJ|2aaIb6`_v%agYglb3XIc)dQ|f=P|9K(ezy z6pOFCG9nq0If@+Q=X-Nv#Huv)mKdU_a| z6?;{A$uF}T(d3_=`0-7*X1c(qc4tlJvw;frrsWqx!?R^Zbwq@qd2&h+LHf#GZB6sA zmA6!_y1V)qUm!5keh7i0E!}5@rrtqmTzM>CYJc12z7*oKKNrg#3&a>?-9q?fzvDQM zS}uAAUGpwC;;3x=GbOwp-YMU5Eg(A9zW1^-Joc3-Sx@0%W1 zFIuT(k<4*l5vL!`bSrGMEBd0*G?=<=2bNtUx;C?1kq?+u4<3yltYLx9X3-stPPrck z16_kfESE- zmG0OW_-L9;E=9cJ&?Cs=j0fi;%N;MaE6Tc!YULK)xZOoKHk`xwI%Cg(M>2N>7V#uk z@}cn0 zAV#`bYH?dXm=$QW1{>psGDA;df7k;UQh*BaM@nzri+*@GGlCBucaPna2wwy z%pQ)^Q&qKW3JaO_n3H?9uGgs-iES{g`o``nYKRi}_&q7PN2Dpj=sYSpb#^Rt{KeaPI;{YXQ|ias$+g6^TEIp(4EznT&ED~6L{-GG3r4S&~H^H8)viOhdoQN zoNepNM3_^t zlR^SPX2K;jBE=Q z+840YHN_%JIc8iT^O8Yl$8|9?4yEg!v-N4Tmn+8qUS-I>LC>iDRQx0#e<)uZ-y zHy9$IDN+nYQslT>ET;74aA%{~RCf5I@$e4!_jABs1h4p|z%alz{Vji-_P;Ew;#H9U zIbK!rm-4TJJ2#47uTvIHUr3IU`)0)=+wpPv<9cDL_uw8(y!fZ8DjpYx4-oS0$_Zbs z)tjtg>C$(n%l+&Y@%iTggt0ALl}|0xID~)#K>712arAfbpLJq?5lsF?5PRo&O4dNI zh5p3v1Ho&Eu)epmB^~h7V0wH0yX&?sOD+3%*y4dEqfoIGTucK~=S`-)uRY-5BN~$W z5~5h5fwmx-rjWDwy303>E?0hg*Y2NeAFg1Arvg)4Aq52;{_C5FBasHu2diQ#x-${)3Eu*Em%2wIkg?H1UIzOIR zF|`7>*Ba|Jjl@2X4xJQ0;ivP_r6eQ;?!p+=BW}A$Ex8vtH)iL5;wHm+4{t0yIAfTp z)TQztcjhbhmerH1y(XV8LovSI=QmWCajQEDqGOGgNZwQF9~-MRJ&X=RGe3OnAI5r4 z#%@bKpRw!{vPk(HY$fiA8SR+t(Mlpr7+&qvcM?jVkg*J;i=tii1|UYFOuLoV~3NjksNx0|cVaB~kuW(iP&@skAmiQF0~ zmkL-4j(yOy_VG5P=+J3#MYPBps=~`vPY?vOEmplSD^IzY%MpHq3q<++1#>dD(TT&)*!#Z3#>F8gZ<5h?u8Vj)La-Q#Zcks%#h6xC)^YNN8 zL&^08{be}%j~_I$uSm0R-11L-*=6S<8HYX&FS-V1bLo2-r48wRLA%gALNUf5FX_^w zQYVuy6DQ~K;A2&yC5I>{4oWgv-Pzt_zxKBV9U-H$Vk?sETqhZg>jloq(Ymy*q?MP%C z7$h@hKI2`kdbBf>uJBz$sK?9C0oWb3sSC&E+3RTY>!j2VA^cx2z^r?pRa#=CmYfYm zS1b-NtLhEa_GqrEQVNn&?Zt+tPb?hljzvqp)m5l#Q>wu?9R+1JGBZ&iQ$GSQ7vbK+ z_MdXCKeMFUj2G&m#^0sR6x2APIKgv?}C{x*_H-FRCn)-sh8s-Qm(23zD1Ef89=5n4# zxg;kjD{AAVGb0q4;wERDC6zIwSlkAlaXIU+n@>TsjTy(taz6GhDRtjy%vEX#CfjGC z3nO*&K|yq5M2fyUt6eBiM#lT>)`^k9c<%)CWV7RbPHX4ij}E^x66P1XrWg5ZBfE_Y zPN>&_r5M%>du(Y2eq`0H(JsrmxTDm&fk0jua~L_k1YL<2S$w$#K2E`mzEq!%TMPW8 z0xh->a-f``g;^ZX{Y&+4TtATI^|A}a=+DDnBv z1DXLv76S}3dzGJ*>BX(Wy|Z5a6nkX+dOKPnwZbsjCbem-4b4|i)NxV;azEzU;^H8_2(6LB z&@W@q)zFFVsa;wpk+4EG(MH+fjAW?wouTHtNP&R-x$INse(#!2;R{PD>NrZt-`3Fu zTeAJUP0q-1oVJi|nj}Jgp#<)&$QY~b*WfME5KR$-z^u<}1wgknf>Z^Gv z1Lfdw@fq};x`ihJfll`OjS>@6iugf)yTNHB0$uMx%ByJGT6^?s;eqgwrF}Q6Cwh~C z6GY)1T2Bcg0YX?0`G`V_0$&lmd??$OzS-T9elnI^F8T9#>@iYdCB4+0kRq7#@(=~mM(^@hh|sU*&9u7c)`%)J6f^z`wpf9|i`BjE5EDb(-d#SaA$(mZEM7D@MU1A*58HbJoIx6WA zl~i%sytP>cr&o$5*3|K>IHA25Hjuj*i~A!L%RU}_w55EwJFil~!Uo09^k*=fm`g7$ zt^)Ptqc1#DiUY_8f)sGw1J9QzzAW&QiTwe=MvMbv@gVhIIuI&5M|gmv z-xyg-tKLyo@0eR=X3xau_Z_Aa3s!m#R7IB4-_2Hs z@Ow(n)X*FIrqvWj{MIr31Lt1zqTS+-LnLUc>c#+0A~Pw-`G<+RkZu5u(_s&3-=3ki zcX>j)8C~&(`mS7=elwzb+gdQylxECwQlizJXiaWyH~l(1b4P6+;bVf()5j}eoYdW| zpXV8XbOx!6Tp(#@9EZ}WSArkAZC)YeUl_D$r-5QKINN`u0=apEKf}n$%-jri_IQfi ztMI+COZM%T++S>{3$NIKYq_=sL|I7(om<%;2df#*MlE){+aJ$!mToc z$v$LgN>Of1-dts0rvQaW9@&^Cw-*AfuSR%fmEJ6U(jThP!)d8F391zw&d4Bv?d7s8 zg+kSie?EXl2lQQ#i4lDn#{-+W@lLzU9c$2lEg(DMt4kv>%kkLJh}_uda+vz}DDE6f zZU10K+#w|;7RkY}?Zj`OtlDVOEQQk5O~F-z?CU=W*t~@@;6GRZB}r9mnT+TG1KFmk&1{7o&{?o3}cSI;KEt?%I_7o?God zqYg$C{HAuLXy#8fzkz)xYmLU?Et}X9I1*$r1}4`Rp027XTJ|vd3id&r-^Fffd#PdR zdI$tdh!=P{%l9wlzTHn?ErQqYU19b^G4K12ce#CE@NQ z@m?d{hlQ-FCy!z6t1y(in|3(Z$U#*z6Yj@=Oiz6K(`D049#*c>K|bLGp^Wd0_Z84% zT!k{~i=X2;ts`cG(LYKYTI5LhyGhSab7&Q%!2Ex) z_ufHGckS9}5Rs0EfK=(yiy*xhDG42JUXd)dFAVR1ip<3v@*MuUy zqXL48<;(j%d%yd6XU?AQJ7>%Ok*zz0pKsl_TO8nOae z-Vz=onH=Vuiwt&Mj=^-q)fkw+nPdK*-nl-7K#FK(7i6W!2ORD{&rE9lmM6OWTRd?= z&_F~in}?G2W45p-r9LZnAb*(G0MSuD;Jrn2AW#8$B0d7Z)Tt2#&B(E(?TyD{X=k8> z!9_m~;|xx5B$|(p)8&+plts0*ddz#>T08pMz=PJ!drOh)V2)pKlBojG+)5lS+x_!i zSh>C23RBtUp&&jT2QmJ9Y*tMHU=sQfL&ZeoeEBLcoYXk{n&$lzD2umhF$Dlq0+NLkP` zDu>g>!&RMSQQgbx3{rc{OB-I0yA>)od2S@Kk(!xrrE2rL^1RoLE_Q`Ih+}8<1PNdo zF^DQj;b4teF3DKB@b2QhMVq1C`6lzIEn(nL)_*3_b9cJN@pzhNv*n|Y#(=Qfgg3}BLSgYUVSJO(#KBQyU1ic0^lz!K-@LwD*S|#HmhQQ5&NXSKcWdYcpmXnY$6H7-zo~yERe*#I1-6&WrtXaz^YsT@4rpPnJG0ie^ zZqR;Wd>DH6yPr+NTTqyv>kaf_)VKVVmD@@Y^34#Y;0!GG>)>K!nN8MmsX4eNucMH9ki}FsZ*QlZdTwQjzxAe@&l{|6zF*D|^BUwi2$G^ee`>r( z9V#hITgr{%5#em9YuvLM?G*9zEM$bNG!r9)UtFX%ZD=Nj2-?1cwtnw!yzyHJ_CMGf+RO^pyZAQUc$5A$s?0{KQDK?)HNUv z35VXxUyKfay_uVWKr7FPyl+CHH*%z95Cqo z!r{%+p_Jb7d(fQ<@HFLVhP`oCt=v%yII9Zze;9Z9?~2{eIO&Tzie8o#DI56itRC|2 z_%#*kpI%<*e@fX^P5w*Xj{17PsO6Uqa*ckq-s@)7RO#%$_Cb1crNdtiQ8Oh^`}@ul zJ02B8_rPTdC)#t5jvVwD@W9YJ&=fD&I>$)LYH~KwpADiBRct#_uEtL8i!l zDbwO8+gBwr5sgEejYp{25qMU|Wi^ZfII|Ac3Pb9#X$2Tx^Exs~>Kgr0?4GmZI(-nu zRJ8SuqLOMnU^U+A=I#Na9o@Ip=xg#Kq-f@V#Rn2A$2{^>Fvu=A{#2izUY}fl+fQ2e zy5}*$^*VyRKp)qMkhU@RN1JNTZSoqQDXf8$)BG4;jUh=iGTO}qYsl0d(jJ)ZJk~EyYT78p5sk>3yE+W8wdu>yIGxzjX{gK+>w$)UGsOoUk z4dZ_fT3zlrIkLSwW!#C-hIreX1F0E`@^nLeEkTMyQ>Gvj!9oExqLv!71+SYN_w+pM zF^7Yldg)sqstmuJu)WofCAe?6_L&k;-w;C8HbYdFT3Ru;w(5U29fsz%@B931UOebw z0LucH(i}Nrypn=Wo7)YX2u8W7&bfDFOq6LQa&l4^B$n2t9;d>oV@hW$0V$qida%I$ z58a}*GKaHcE0{J%jm*FrgO`!7H*;o;km;YrM+J zNUi7uQKESBw;>81y$x~#U#^T``P=k5W5V&5^kzGU_>tB+g%eP<1_`ATX-&qc=5(yC z*7dsto9_|oVwaN2%Y?tI*?+tS=UL>`*km`s4c`W197f1VK(9;BAmk2{5Lw685HEHN zpb{{ZM5*+e#YEL!?GFG)(DU9iK5%~#oI%r@z(Jz0c#TXcd$Mo6ZQ_{BA!>CBKMN{p|YgiLD7O!L=y4wO%wsg}jl1&XbL z*STw-U!BZc-gaFn+(~e6_3aY=r|n^SjBOG8mP^RXzZ4(i2sR~f?Q=Iev>^F3faw!|w=<9RzcgyvWAQMrv-F0M$w68tJ!Tbg??`#F> zJbuJ48iD4ozn4`Kd*y>x%!l`PO1$UwmCXb9z*AhUy&;Rj{kBfe=E)wJ>q6d(hEzqu z@NA|-7BO0yA|KEZZ@F?JGe_#m{%tJo!qn#M&b@r(uvT4A5qWUiia zYviPIcx@VS$#L-Z?^ge9@Zu=$-N3HfRPM2)KSN0NaAeo+DH6wX|E8rhQHwLtG(F{J zI@~za4Sgm!B{yULLj%8E7jATW!#hJ!cbVxG3O395{@F)e;MgZH2Nfy66NEVbsP>Sq zQ*hx_^6})--%Vp$*;yRc81~vn_j{njh>B5bGVP#N#vQHO2iQSso_?hdeEN!Di)%p{ z_JLm5#;-C^xr}qU)C02DGc7rD3!sRV+!n|u*Z0G1nhbpW>2a}BNl@fBZ$Zo@{}=I) zqQ9^Iu}CUd@3ep~RFP}=T*5CuL} zBvW}FdLCGGJt=xxZPc#j!sp+15x5fdp4??fc342<$&O-P$c|6?ZyNtV0lC-;a5_O$ z0#Pl&55Szv7;MtXMZLt9L+{vOVaeh5an~iGWy)czytJK$(y`9hCS(}DYH=AO`D3Vz z$sxI*&kH8dbN7)t#J^29rnAoJ+mnY=auqJn3y@-hT2RjG)=_0#zLP{^zBhR~gshLT zOfj1bL8ndL5(LG`Lw?%F1VqG%w_dTkZ?|En&rskY#<0O73XF}@)HDd>(Rn(o_%N}{ z=u7dVCpnkxg8w|pnE!J8=!yfLnIt|5bm`{yISeG1i< zV#!1t>f9mtjQsDdZ3u_EHj53UG+-|7m?wkp+yNacO%t>A-Xn7j7_28!eU%JErZNgD ztKZ;8EA|X+%FaTPJ9#ym>{#k=K6Y7!H3%s4^xPM3!EPfp5bZdHSORN&PpQ_)p1wac!C#yxX4RdhfP`2Y@FtSXQsrOmd~kN-p%Ud^N^GK z1Mq|vqTB2zDync={8-JDNfYcd^v>>l5SaFKiPZ2_SAsBmfbMDumxPX+dJMU=j zsJL)eWzGcVAQ)US56j&utAAoI{`_0^Nm#Ri^Il zF;$)EJr4QO2kA6%7Y&|``j@ws{V$oI@ReYTf5tad{*zK_#^XO(rpPK+X`T+C+}9ByuN#sI_|a2O zcR>*`zauL;+|R2a{ds0xQSoU*I0;W)=vAhcch8^Vql(|u4tg=@8vr63;0ife+1)9+A1)21^ zsu_H5PEhTuE$RFh;l=C98~6SyTb)%kwenwo!E;MU{BN&U3y%GthyT?HKrW^ol1rQ4 zUjwojaRRXP+|T9<940(J`^%6PuKeNx{4Te3tm@~`R4_de@4fMwF!k?erutQ8QHJx2 zOmcq($V~Zv>O`)qE1;UGOnUTI_)eeaYt{|^0gRhQ?|q71@@W$JZhFb}$r}1!i5adB zMYx=Q9h|O`Uq;{j{pqJv_|JzX|A=@wV&6H6K|-b}IzJdra!Moy3#BglD_Q83D;x?o zVFIf{-abDM82Gw8AeHhkfwzn!UJfm^jN}KTE0WF;@9t$QqMy;C@wBguTG>^lH+yjF zh7o0SA4{%*<4{iiTxQ!1i-?fTbIY4$%MAphibYiz%8)7=SN`Wl@R z{h}!V8(8SfnS_0N)-R#Fs`oN5EW`sMbB(Mwd8G7_w$wDq)tZbpa&G7O41%>mB$IW8 zE|{sW3|vvM?vA_LGqj4N(t6M_=0}g@7i_wkV#T`~T~S!EcjeUCkMBn9O&?Kn6LOq! zFOlAawx%Dbg(vAKwB|?gUnw!Cnw?siUzY3ks5$YK%)GNZ&Ftol-9@V+ddy#mL|#mn zpI^T@a}}jX#fG8o7B=@^s3c~B5joOcn@hhAxWewEQh_Ailx4}CIx_7D3a5WoJenV` ze=x92f4B)Uz}*|cNUd>bW!|0GEMZ*7w3XDL6@w#QmXp?#*!fmS|7BfkALRAU~sKTfqRmQ=>q#5tGH7xI%NvNtE@hUO5!er#zo#8iBP0Q_EK`-do zp949lDXm4Xo(upos{oWcR%w=D`Dwp*^m3T&%a&~8dEarS(U(aN!&Lg<>C;u5Rt#6t zt~~88E0rvR6$bqNO7ItuP#4Y{>oKgnYQ+V`5@20pK}-VTvS|-@4UU+Gm4x>o-q=jU z0CVV=R>*KWx?6YfV!;e~4la|xwHy_!J zB3}5=thh=(*^F=NaQB<$v~UMTyLCIK{{a};zMOPTQ%+UPt8K~8Xjj0wqVIoKuE$%h z38Imd8u}`U@jt44k?z50-Iq=Fw1+E$V{Z1Htxns{iZ|HzK>j>9DqtdIUszeK-fp;S zxwwE7BVMq8Hnn;3A^3$653A}^1@u(bR(M4@JGJ{7q;^{3?gX~@RhGb6 zLLs#<3-EcktTU+<6hOKl!g=a=9uBQNzeLWBGpzaHghi7C&bx9s4g4jp#1SL#6pFXs zjDsuon{S0lHW}ED4vOZBAH4X&6}rff)lA2FbV^|yCBo2AK)0;h8C{l|72pCjwBaEv zyO{?vI!eE~+%c`k+yVkbNgRbphq>7ZP^+LBXx*8ai+^8{>u@})eu#FTg<`Gr!Shf} zV=u7r19;Yk>QinS5;K=G(I&X9xyXY-8VUR|YA(M;DXWu{Dk#2n?f~u($iJgh9f4GI z*sGdEchY!wHZx4{8Klo-HD+Ue;us6=*@FSBhr?qG%9K{F5bPOe!+H4dV+G6EzN`ea zi`!qxOcU()gKLxrNcviG8h@w8@|n{u{H3k?wrEU#SSf|EOoS)}C$Q zm|6FT5_%bN71w5NIX`>rNve`m=OSBMN9&Ag;Vyi*(RXI%P*aRUg%R z@H47SsYn*|T-LHI+sog~*4p%Z$X20L=0_4_83JK0gWAvh={m_Gh}ml?d-%pn2@7ZB=k+frr-%W5fLaN;BU2vIXm%QyKk<8HNi1jB;@P+|+fsLm zo=AG9qvQrd;G7_?NN>`C(8jeGZj?c=QxHw%Tma%)Dwe^P8v;bYvgWoX_?cjn8EHnZ zPgeENg^`Y^c$sSKEb}tGkZwv0F$6v1r}jDy)6VXVf6GYJ(b;r|U;6Y18!0emq4{dy zbW-cz-KTBZELPi^S$;8F^Ys;c@B|$hzv|he%nQ4VTRB~KLmxcPK(ADx!{*hn|_Li18UTwi)^;B`)RM_Mw& zGT6Dz*y6z1>OohTg&n7N<``mNH_)Z_*1&vtHnO_6OU0!Zc96bKmrgM_TL|R-Shab= z)HYR67c}E>{x$)tHs~2Oe{EvM%WImwpyk=GMOz9U1@+yd{qsPzwn0dk++x1P!6sI$ z9yg!IVc11fUtWJ9jM_8CZOPp>|9173*z`L3+e8arl5+WdtEkI zHG=EnymvAzkh`;UwZaqEd$ea3=unqhRkaxsh;|9O-jIy5b>y9^aI(#VwwNu18u27x zrE;g}^^O`|;v;+>OhApM%@UgqF(7gLMu6+0#844|w&P(?jT0gZ@$^8EpQzoZ0HDs- zY@F*v>G0e0@;>4j)aher^h+`?6zQ*IRc+2j8m*dDc<1Us?$%$hGmhZpDOIQYzk;uO*wniCeeP$jKcNiH~ z$R(=4T_&Ev)tnV*nMt3qyNWj_uM#1P`Zn+Vytdv4+MEq}9;6&2IGHm1apx++QMqv1x%N8$I#$PfDI_G4IppE19v5!8BnZ6o z2l%>}f^l6ruCWnQaU{!D-pR7?aPhomOjf}EhGd$kbiu0lulx5s11-ylC~OCUl1ziG zuix<`A;+zU8UzgU8bk6pQ|+U4LM&&2J{9HK855&v+Uaw5R?46GpuZjUwY{BUvu*YS zgR=pYb9H@4qusK8#d9vv78!xcrOY0^f&-tHbpps!)LPN%0VT(HiRBhBpmS80%N1+M z+)uDeAOSN^zij34gr5}J<}`bniJ0-9)*xOkzr+@gh-^VJE*s9Lzb6EI30uoO_TsXB z_b(p+_%ASIr;o^ge~&{!AEnd3TzP4!^iVl&@rY8Ni+H!VD*G=miG@+Dz#jNPd$2mw zlkpS2DbWgM&}@Hi-_}b#4gw5?Cq&H*zI>FR27;!2rU87Z z&gHAyd5{!&@&knIF*i!0$ER#`kKLwmhGN8XrHTOg0PAb_X>G zevxZ`ZTds!an?r-e~om&&}3{8bf8zO{wQP)FL_H*ejwK?8%Z-9N~71j)sv<49!eX} z&6F)LugG9PyBQ*?`Zy;0)aFa^wDA?IQTM)RqlePrmD#!2C7kzpoHsX&c9FTSV9h4J zSsQwn`Q)Ls6L3J-RogmHAJ9VNL4#Y+I-d8fVMlxJW7-2E3pZX@^k5Gl2UIB#k9h7~ z??#U^K52;1pJxDk)cZqJ8Pg0EO}P|@c4<8iCV$?1`%MtN z0Y97l58L+l%}2C-YU8|yAa$1M7k23jEB(fyCxXBMQ;tR@#HMJDFZ2iZ;xZ~2sm^-W zlpxW_p3=>uj+sO`gDHVOlG)&zTW2)hbccmGS`V+|o%Gk)Y2H3`lDL%-Bh{!mBSr2L zE}GeH*aF-7yt)QqdqiW!{v_Lv$hHIQJNWD~@gARTZh$3?pWP^SLP%-;}NqxjLRM zr>0t1gz(B8>K_(HOHatq4@7OSZz~d*G&cvqcY}s zicrn@m)ABbg-OZCh2N{o%XTO>oZpI}vk@Nybd?9M%SF4CQRQ!|33D?Pbw9PrZL&a_ zm3#d~#+|@3We*4456At+(^Snc+k&_KaAH&HGL_>f7a>{ZtAG zo5_*CBDbsMAsAe3`H9WH(n?h|Z$}eRlqo6YJB_aGcJqS!4mT4nA}uiSUF*i5i>88z zgvO^|sooZ4`BG+97(G|vzXwC54>!rGOd$bON+@B0W)2qyIz=L#EW&%M!upB2cjD(z z1IW`p2DGPsm%+fcUday;0zuR@9mjlBL|W~KL8AOkfiI%l1#_iep8e=#DS00hipkAi z=?AqevAMZy+SQ85jW|?5Je^173aW{S_l!(J%6z`>6e&S6$mi-4n98RQ=DyScAOgmx zoH;gKip~N=#IOJc$9W*$pa^S{Nj7D(?pon_Qhmy~W)74dC!)yZhi5X8>)QgGSHF;x zGm9cQ?>Z|QNlCNd=yq$qInf!h~icI!c{=TH4CoueY)|z z*QjKkh+WvJQa`(RcPwv{9Z?ne@}lNm@z1a1zl$z@^&LppWnXXj{q_5&xL@yxEA#Ph z7S-R9l}SI<$C@KiyX|h+c@OmC7t3X|vj^eV^h6E-dAvo}9pRQ;H`0c8w>WYz`Tw@Rubg}*0 zJBZK46C94QNWw9=OrQix){KD=Lk&E9=TJ=+j_;PN(QAqC6YbmtPA^-AJT_>;nIstXHbhAFv(A7pwWrezvDgtxxZIeK7BjbN2PyIjs!sMfO+)pssW(q(L z{93q#{_JY~R@{(#>>1YkQj@0qZ!+q0+2^e7FJROV2{TaeD zf&Ry13Mq(v0CcjbyC^cdQT9@hd2mxx#AJ$?RyFcK5>hshHInNry_plh77B~SxZ@0t zxQ3d=icq!=L$FOk*OvdY6g-eMN(cx9jkZ*3`OjI&w6lz57Hm>AdlFtChs3xYaM;#I z%CXk2_baq(#HZke+XifavC=R7BFk$89zxbhSnA~5fc`%@m9)W$QW_b zeh3{G3wU#`>_a!RT6b3}UWQd19q*HqdoNo7ZuwxiC`JR|$Ylh3;fiC(LSu;1!ZD@k z6o>af`k*&{JUqPs#(KqcnHZDF%x`m#Wy2)uLYO~cOg^~Hw0s6t7wl>JXbl6QJjfOU zHWL;3l(2D_*OZdk!w=7Lnej_67n0^OMfEAxp2Wp61o+S1e!KFZ6OB+n2zvmt;!syp zvI=fw>~HG-4yIF$UA%$3*W1P?E(Ax&brInR9|lOL6eAzF_OCEM^qljF9e$m4miRAHCjsU}Gz1 z(b(bXi%ql}7)#S23mh}@`2)B@I2HPQw@Gq~JgAru`PSZd$AOv&BO%iJR>;m`&k2&X zRl08?QS}2ge7mnMq*B?(eenpVm?qD*O^`h1yT*Wxs|H%y>#IiWP3YE;q}Pr-7$#n40DTs4|4N6ROS@_1+!+(#(KR)Z+@iKh`>*6{ToC;b(fxAl7U zmRI8D%!r*Xleq9i9+mg4E0LPkV~WLn<$nM1Fa=OYZKjIkKJTQ|IN=;l56hj{XL=v>h$(I#%4q=)B0w>dCi3(0UJpz-8 z*$IWNn!?74q_cy93Rh`3HeqG+v@$J|H=fGqetJfmx?OBpo(w3o9gvifO zz-9fzGoU}}MfLJ%&96Hqk;_GH0gt2(PqNjKI7T=JHJAZk513+*HV*ec;B#z%*|lCb z^dZuY3i+eEvD*RJ*mVQCh+tZBjJ_;`5^S)^6dQ2m^6u`DYO_+*qyw*Vu)YNY&v07SRyN!wkd?e{)b29$ zddb`juM}UIf@^&j0BB3W1}1kTZOS1Ft4a~8LFLR?YC3@F%9LdedX3E+_b)u|hJoPE z%ne&=lE52-X$PX_$vo0o?8z^)_2~-$ z0hOtOuta0>vO2NwJ9Qz&=7Kqm42i_GjOY78l2bp2_hLEBVW}TO zZJ)BNz;B{d(wK&e^mibxW4oK|5j*(jxaG70WHWutUY{RhRL294Mgl%EY4V!%?X*;a zga9HzuD}^+tVk0^W)PXU*@!KINnjd~`nH<$lxprfJ!*zmxSeChYy(AAsCduT1tle|*-M7S5MjT#+;BTGfLxstQ&&#z3+1 zkcZ-eHYTI9DI2?$V&QC^c$xgiPn<;3J|~X!v1IV9W0Q%0dPY zwxP-L*^rYVzVx28qDPt1wZk1%J371XCw0bSwhuV{M;lq4e0(kD*4QlG73eBQz3!+# z^pZHTJ-|t$Pw)_*`ytem1-8<3th&95Co>+Hn!H8OSyP{3~33=ost#! z2g9eu-#N(MI7c8qq0~P)pfo8(1OYUe4&7R@jLkH{-PN~CcNrP}@8!k*mHs-%_BX<% zJgcFk1tQ7P&x;SgS9|^d+KKe3|H_E961MBEc$-Jqg^TGuYZhxE5~V+;hC53JcK|IR znpbP~1OZ`wQi0Fsi9^poMhs(IYFt7T9GdonX?TAZ;_;HZUba(s4AYeY7kUegt=-E^ zni|63kaDVMjCFLcV$0D%2sA|D2!HF23Ri;T*g9lYDd(}5CIx$6fko9GFp-YYLgNtK zb~a zROjUH2@!^xG{a}FD05tI5ukuPT1)`4#)$~Om>pIy=<@=1`~f5*t;19UJzO=L1kN*< ztmShquII-7r~+$cF~YOp*@6m|p&LwhSRdZs;@r;e!Fp95U?+}ds71sq=fwjpH^l58 z*$tzDXYL&!g^YI@?lpFZtqF3ZK3XQKdK_0mw-)oA-IiMPTII<<&aN&RHfP^uuS)y? zo?CZOxpd`W?dAtO7^RURy+CIu2VJ3=1D8dA(H3;gN0?@Cr5-?NrILtwMA+ZazBkH-)h>DN^_=P})@p0)dSlWTXPRqDt_qqd^0D^1Vsk4El*Q>rKPQf>Gwk@ikTZx0ZqeNoDpl&z zV1vWgMEbG>?2?(DxD=GvPPK?v{{+hfHp9*^i!;WfYR^z0<^JF{EN_)Sm{~e$BQs;^ z7t@t8k^Mh_p5TF?Bv_-Mo2^{3*Yn9&o6FK*;^|E8Eti3*!OHCwd-H5TVExI7qFyjk zC(du9@KqX{HirzM&;*B2o&`1&F)b)nZ}++E>-V9`(Nmf2oc>`Ppa7o$wxpgMrgvI1 zkCXMMz(ZY$jDeN>^wI#unn7Rvx#erwy>iMwHSB$sx$Ms27mZ%c%0585DB(~TC%-7a zFTvZLhnt^?!9p$N@RDqbsF4nJ#rd`!zCk}`hQJ2*4EwTplNgZPj63`v9XF<5w)%sp4uJtO8Rn@K8&y-7OLzTipBk*ZhUNMpEf6Mw zq@y$;6f}L18<#Uxrum*5DafO-F=@Bq8r_4hJHIrl17h&KXLV;Dt?TjkMii~LnWJ!l94FfKFk{5ej86XcUyB_d=lv1C)pQ# zRGOYsXzEZnVV02UjuFIs+)$96)SZT`3((rt%I%uR>V8iX=jXBBCb5L;O=*n3LH2cf zH;d+*CX>~7N<}L`FPOuRwhrjTYY1Co zIH+GPqchL_zRi!EgCZstr$wNb{RL@qeDfW^ZZU% zCkkVv6HljoVIC>QoeBRC|Kgr|&h)&8xKdmKPkbsbwkT9$9ke6TN!&+dRaQyGVzUL!*G}4#DuRod_gh4W1 zgH3JNnwg(>ay;AFLzhK=gEwg`cD8khx}PV&yt5K?(}x^6Hyarqpq>`BDc-K%lrnKt z=#WkxQrZ%I3DYw9mJ-`0MK=ij=oEnvXWVCloPuDLDO#!o>|t3)?)_Y@FbWVdi=?*fgG?SqjWx3bRHM8w@qHG|^G!Uh!jm71D5RTo1ta=Y*HH^`}eVb&{EMM{*Q zXXOYV-Sa^cWsJ%}RUwF{Pp18+p?3WhK6#wG^X}N@16bZ==iFdZqvXPnHU*G=Pxo^+ znIkIO-9+U*r_n736kaNy?Hd+O~*~v;lJ-t!@uQ3NcYh4!*wRt(f^M9)Gp?*~<>S9byWf z!MA6ZJyHJV9)BlJ`j7lP+JA$$j#O`HA4YdZg@615@Li849>o%`N59xxBL>({Ys07h z0PfcXrOcKNoYen%8_1B!W`0~If)O6(#vv+2`V4SnTEWiUd4r z^`Rr*yvuZ+g(SB~Vzw|wlfNnbqUW?@4~$%H4;qem%mUwG+s^~l5dG*GdgNA@8aEIB zl~9+bcwK*jDlSA7l`A3J=#hSQUm+I`0S9HN9R|}>(e*pG75`p3r#D&7bLAVXTBDEd zvUm}^J{%&?(&RH@_i;E^Xy29W#>3~P5ML@qbEye9{4LN%=^4jG_e9MB`p0(u))wmW z?wz3OOiOI}u2ATVFy_E)tW(%_wrJE=>RL)QqCGmk_gEZhTqFmgGk|gj2x;n@jk|kJ zf1CNWFGYv>_#+Th^gyAX32&SzajElTbBWicPM*Am>q@7bMG{0*Ui8A3+dj$ZGd5eh=#k`#{J{%5{Z2l;()MmU(BJ|-Jrj&M>6J%57` z7i`ct?T0C@YNrH<%4?gW*(152^p5guDm%Addcl00vX~Lv3LO2iRRa!YmHKQN{FNd- zhPz%~tHCH<7qb41l+8t*dHP|AijVnmKDTfp5{2KmQ}Igi{2a06%fXf0o~)_`mtLdL zLAFFaU$vpYN|udFn~4zuW^bOEPb1I2MV<`29PnrzWg@)?Nf2FX(_+rTuA~I&>gtK4 zgt5PK2$TE+5M0jmbjsan6$wlk$>1LJu6vTTDFA0G;J#VK&m%~6$QcrRLW^}#fb*B4 z%o#CyE=5gmfK)RKs{H&ntxCppc2o3$94;y`80-&fADSOjCQ?z)11ie1gUlzzPs<2V z$NViOC3tujkMMk)w}CM+e45RT0t#qSm=1nhWEqq!%f|GLYCvB}G&5}GclPanoEF%l z3^pmGr0ln!h659CX2jVGiHq=)UC}FHOHw+$Mv%U01BN`(xv&_qob$7{HLavFKa1zl z+rL&R>N5{kh$0Xtz18^!%se9ObG0+5;IvkTcAgn2UG=GiDI3m|jm~Tbg45GWvpH^L zcARlOX*ujHnr2(`dEOo*Y$jhT0zp{^6&2^CZ}+Ud-em1*s57bBZOmCj%8s>p?7rTZ3WPN? z?9Z@N@UH7S^=S=%Fp++j5*S13sn9QjaG}`=41^t`VF4jd=6A!*h0=MCXD^$5?-g24 zj|c2j{!-URu^TlrkG{l~t%YQE_1L}oJhh!5D)IJ&6{-LzYD(i#JY?N@YLlN^wrs_W zC60?fY%vv$S!YCyw(1tc=u(BX@_+!_E>nP&fFqzLKylpdL;bH?_Hw?6@U%(gCS`HT z)=NY#Hz?Soe!a%e+ni4qj^8}G zF3+DZ5*U%qckU`IzIHV}YfWJ(q#UUbE_i2|+5XMPLsSa(e6Mg~nW>FH( zJD+1g&v|&TC-GaD1kZ_rDnVgY@a$vH1M*~$Nw4u281oj^)>_EMU^DV+O5B3x)c{#3 zGziE5mzqIFxEU%&R}+m=(Hwr;mi(t%UitVzYTHZVF#>wdm=8&hLDeGxYEv=7#D zKUiNc7rU*5t$MaOpkEr9r;KIo=b3}46O2BAT=h08MT7>Y?O)mk=$2*>#v98(otkkX zG*E_o==WOTs?n;`U`+v?>nQHxErV=Xjz56X9Tg zeS&~t2~^)wCUbGoUQ8|qtOcghW$<56d;S#!)F;!pc_5pHfibf0aCRxz#pbk_c(VEJ z->srKKTiu5$Dx#@E{tAyUSR3QTkf*KkOyWlhXxeX)Rt$Guk}B$aHYDqd0UR#@e6+s zVRxyVjj41<#LxIiN$Zchy2(~r62YN06KG*>CV)xF>-_3U={@sOYPS{d4zK&2E$42p zTkgNYKI%!!S*D0=mgL8jF_lsQ5QrTBT+xy&Em2ZRT={`V{Aig-Op)VEs=?QneaN9{vl5uRPR>zT8-YF%f?ZrE%3)PU@u9DO zxmyhNn39red0)I`+x!PmGB~d$y-H<%16J*1c*kxl56&qu;t4tyr_wNvc0(Xs(y*b< z6Cy!`vkrOP$+-G+)b)^Ce4Na7QCOtsJSA z+bdPun}1H*(8ldae3-h&{q=Rg?Z_L8@Sn254r#esxbU7LXC-Dej8K?x_Rv?v%pP0T zN5+T^%upiAiVwUZaP5mxk z6XVX^pWI2f3fQPlXrc5dQ~Q~EoG`TkFNfHfM-Gmw^a#Pe8TNl|n8 zuB=3*wvSI=3B;_cfW+E#dM6@>5<0*T);_WS$c8QNDaVc`< zE`<1R)}H-urNFDAD$n@o8klCA5pY?Ww8^5OWQniWuI@^00%3XPITaiC%IAU&48Soz z;FOhOsd{RA-K8L3U^{1XN@;wh$FU`)<+Ff-^aEH48b=z|WlW{DG&rEr1pdTHwRo#3 z|31|a9&JU932N>azOaXgYFXyY!I2E`!u8+6oXs7CW7;JrJvcGtFq8!9sqKmbd=(aa zrLKwMftqm(F(~^%hs8Z+0wUvg^?sIOjh9Jls68L%@l>^~1bh0=YvtRB+UQTjXmkZ; zR~L!a%qY%3vmB&Z078z9u zZTq$w@4up;Tw_R_=nPyJn7#HNXA&|*wQ*_nY*BD_IB>p*VBN5YYdf>?C*-LRlISNj zVIx)iRsV~<_ke0@Tlc={2nZ^I(u)KkRH@RXLqZQ#LQ$y!LI(u|k={fIO?pe{osiHK zklsTNMXAzNKok)7o3r=X=bk(6x#!;dweh|0IAdgFj*&Ijnprb*t;{u_|MUBEo|Kgm zC2ARdo9!`IG28ef&&^z5=?|T&U`Ff(bI4X{mF?d&t*F2G0NM1D|EIZbWC8RHY3}$g z--L}*K;Y=ZRYZ+D{m!?lPv`y+u@$bi9nalgHm`Tg_{PPiS)9q`G(n279F3aZLw5He zGG_7w2t|${JApc2k$2bV08w>GrT?HwCQ}LbmRg}~^OOEe`l`iWU<;mAPYKkD$63vC zzdDu(a}NeV{cw~Tn#1b#r0G}jU{nZ0fRVz^!oRQ0YkiwS?nAOn-H?(*A{p6hEs40c z_k*WtKa4ij#&R>=854h}Q}h$)6lSzfP45erRpgiGltEvieF<`62!nF}J?g1^w4$F$ zeAZgT?b2Iev#cNs<)PSjq#3ZnPj(AgfB)s4Jp1EoS72%k?p3u`AKRpaGUS(L@Ms*@ ze^1D#{!25)k#>YsZh?=o%_jH^#gD%_)#WcZ_-{^-|ARot2?LKUH@Ldi8_a_gVA zmHL1FW~C@ZK8lCYKlN7F+-*K1uY7IA@^h7wOH(ldCgZr^n-2-8*(`59v;y!NWBt+6pXBFA%1qqX!eyac< z?&~#Q)X1Sv+fdXG=(?uw<4*7%P$)JwZKymi*wjL{C; zm_Lmb73ZLhNQ+jLEF&E^bA2=aqUR8&vLJ}+P|&%bsi&T>+-=hQvIHQ#YSb(pGl{p% z(FBqAGKwNhU#3_eu3|49!0^r&55%{YTpJIfp^x8}ks#O%hrS}|nSDd`wN*PzW1CM# z8>BIxgcl2a)$+f%7V*$&n-Lym)?%pO0sso{hN?$om3(QAR;5U5gQtMp38hIZ(F=Lt z2`KTsh1riCjRt#@yEG%((AP4zPM)&&v?7YzASP7|m9ydxeyBWW1qNd7Hxfd$n<)N+ z8(E|o<~MmoxrE3zT&TJPe?+XxGR{_C^302<%4KF=$kKsfST+?^P$Jky;erHgB5}ep zeft;xxdFX7=7c^sxJaJL-NDn;EREoY`$iX+{Vpr+OLKQ{ zV{=}yo5j@iytID=ymrqV8TgVc$Fww%fXiEMNn2bU&becm`6|GwAVX*)cHa&rd#J#T7nvB+zEr3!5##hGrUTD86p?+gZe&zr1^l}h=WR;LZ7@VXCx z=Z6fbbEsH42hIg~nyxSGXkOOOS!7Gy1uZPrBaY37UDgEsH=btAP6iP17rMfqaZ1d^ z;V}lN<#>|V#)QspvdQP!0GcD?`7nI`DS7J-5EKEp)W{S`|Y|Y6Q?0Jw{z84nzl&!4>ff&e6OggX&~@ zaYqNAd%#<*yGhVy{=vr+(bOu`Kw_AgFXEnHyESI3$G#a_sN1UPsCy<5GelE9_C<0X zDVT3wfx8Hn;mC?dvjZ&r9TuP5)lT}@qL9ubPkj@YZ5(Hz3Ngbmq#{tnvpiF~QZ)ho z1c~cHUPR3;#fsQKg3Yo5T%r+R;P(-`jIF?zoikMP$Ofs#c~WRrkyShc2wDn>%vo59p4O0U;M(kcdI(`(f3m9yupR=m|=(@ojTF0Z# zN-5@xrs{O|kYl+3!^U|*Mt-oI#EH(yC))F450v|CpXQOcWfP*>sCI~G^ZCV zSgbh#PuU!Fv60t{GU!vnQ5K3hudM1$>g!oey)`-qG14@nT`&P%o#4snWkXUx1h;z5 zwIXD?pPcM>U8oeA)jJxn|EVrTRg%_JKb;LXFB`PMi5$-=OkEUx4>(;F$RRTkqtKVrF5G>QljQ7RzN zN5pCB^4SvS`^_a+&dv0Ld$oU=^bfbusEpZiZHQfl@r5`mL?&vyC%y{pbCH&*;K8Eb6wUMB~ebdxWnjxr;gM)ad zgL=3%YGr`i4L#V{kJ_exPe#bk@k~82`33&6xiQNbA6Oa* zi!}xOd20L)PTNC1UsE!KE?5!`aOr(3n01f5nfm%egN{Zzb%#OmFlaczaDz2K1lCt@ zud1|0kuhP>J>0+ZxG_Z-=&twQd$xtWFK`eP;McF8!D-1I1nJ;P zhTOsq!uEn<8LUi<*&W_N3W#|hvd3-`AgC{Q%7etPiw`gwCkuy@j;+Iq((A&lh&Avn z!y@CH9fDnG7t^%l zu~!**XLeu7S(Uz~@r@Ccc8_qvBlAaCID6;Tw3PJG8}BDH3H@(y>z&BNsa8*3J5KGY zkO|+|#x^k*jUm5LHkK73-hly=Fe~OE&v~QG@I0#y$xj)DeKL>-J*QK(FzFDh1@UD^ zAy*%G#npl8FEme7m!4MbKV`$!AwT&d(-Ke?Oj6156H2&B7oI`HF~xj*7Pl~ZfKS@d zhJJy?>y=9qHG|UQKGzbrw|Z^dm>c#(7^~C`i~SnaTrbr9R6wpe;FT7WQe4Htl>V@d zrF~b3FLqe~{G=Y9gl%me1YY6gp#~9_k_yLjT?rs0qxLz*{E6lBTQmEEFENX%(-g?@ zU`GYlkV7Uv0Yj=eW*4qB*k0NTf$gJK<%ZtYxA3)FKesqco-#S0gjL?XOEMbpk#FL* z;FMKreHpY9|K!wt(Z1Q*KYbA%9bln;+YzM3J(Z9WnWW4X*7y}f^l?shC{W6Gy&4u;%@vksI#+U%{UmI^Z`z&SD&|MxE*BIq0x>bX z#TW&BIHB^++!0ckgM9fqZOU;#jgUWhC|Yg~klc8*L`4mdJKXG0<|#AzWKP{RUWC}Z zixf&5_BZ&cXka3J2TtCq(B?z&rEJonI?Y`sk*z+W0nZ8|$6hny0<3eiZfD=e7+CuI zPc~v@SXJ8=ug^!`^^uOHYkW(KqV|+82B%c=nR)G0&5oQ@H_AgPR>iM=vWzCS1ZX#_ z2eLYwY4?>TC3!+r`khKKnEUP%50jX@?fpLp1Ha&NwT<91)9p@cuRw$Q%p9!_X>XgT z04L8U8$PVgxm35w3Q#+YU_Wp;UiFB|&0y4aI88^11nG(QxIo_s5VbY|El+B>*f#F? z(xRQ<`xy^mDI5yEmf!Uj9eZgPXP6xfkihx9XN6N~>@?($dwK1jyBzvRe|P%0#HH&0 z`T7G{9W`!IKo|s3oRVktvIzbvOMypGcA+gz94@ubpXp@yHF`Q4s=m|LM58rJuNfv0ab*ob z&&Ar8{5yxyb3tS`?n>i^S}529u(_|;x67P?f_+lt1^g(b!tkM1Kw=6exYEis<=RN= zI|Pcm{8o@#=C+Z(xOb21yH5joT6q$2(JnhFgmmcWnvsF#dKX8T^v!O+JbQ~B`{WC~ z^=e+ZfQ_6ZZ2=jgq|FRFqruY`h3q9wZO-ndt!$YGZO(p`-x+8ynBrRrF$c(mq^*N7 z*hckvSPQ`E@d8I;?skn{+=}h+mYJ$#Kb1hop-p4~(ZCm-fNI{f580@$kZ48)PpbKd+(0Mt4Ddm{EiO0lBvRbl}pc^Qg}f?9?13K zIM#Q8!#IkZPuN=IFsbHJ#)fv(<~#Zx<0ta$fvVlqsTuT$BcxO`2g;Xu;$!!@>LiiyEDm+zWs4ppIG zZ51;L?`lAC(zt?S8@qrl{Q_#8rBqwG{OQ1{w$Vf5@YQDx9KQaNiz1XDzMYAizY#4P zFLW&B;O7qF8)cU3uYSJaEAmRv+`O`s6CCXx7|lgOH3q52#9?{9+Z~i1Q@8xN)@9Xh zFhBfVO7Y3%Kfv&w$_V_fNLAS|Sb1>TzsY#FSpAZK6L$+Sf;e-joH4v;GdQhs`)H&X z*y5@URH~EZ{1q&P_|rMXR6Ah_N!Bcp_$X05*u>|n*ruFp;^cnt(19C_z*wI zGXE@+_v+i|Z=%{8RI?wTl#Sa}WUo^3eYsH^4Ao`52AC%zUU%hg{WL{sSbcje)G4-j zq3eIsI{u??AV5KZz;+@n#oPWyv~ceH#Wt#Gknbee%boFDs$KEAZtESF+*kbMo#QS^ zQX7EqJto8+EUrlZR2mwRTRDjACAzaL?r^8#!AgI$TBM));8W$<$9 zfDne>zm#;^tZr-jaGA5Bk-jgTK6M8`xekS*2cx-xIa0j6<%n5g0DV$4MXlyrJ>{2; zZCdUNl_ti_5R`fg@0U(Nwa8G-r_n~#Ml3H$D}q&9-~PvQD7F<1eo>5IkHJ%A$gb%| z-y}ba^%@nQzJKsl(Bd6sIjSgqfRmL|!##+P+M(F~pk72rbmTR=uuM^hgSt1n9o{Q3 zBnz)ZX@Gu9z;B(*^a;NbuWK;djlO55CAvYx;K~`@yb@mzHNKY#x8GBH3`lh1GUutc z_HQzCRj*9gTYV*NzoF-gKLI5yy7+2RIr)^4hlZIzRJdh`1lrj7zYms|-fDomFF)sm zYn-!p3-7A#9}YP3cIZ4VSa-fje~TU&nzlC}z^l-*o~s_|y%=w21RoLjn4ar@idwp> z={Iv~9UmVVMN`Tgpp zlP)Tl=auW8U=x@M4+C{oL&!fkKL$5j-H{5&IY}43l6lv!sgDgTrTCr!An`S&%mD}j z&I~uSq4;G{i3ez%jyvRQCZ|R%YIP_LOf$hl^tcsq6mJLad0e0xMm&^CIr?tD<2$Ul z$;rOAcR~=KYUM@H3A4< z&B(O&$Ojoppz;cQrco#y;I}PJuz)(8JG+ z>28yP-pLRYTj(mmbZv^(QU3pFrX<&3C$v!EVX|jjPcbum4v}_kL(l90PeU`YF>p|u zjKe~%DUIvFmp>rTB!A+&43U2&dZAf<{)bH5sDH<rd{*J@yh~3(yy~3{#Ibqqst@L%CMA5qMDo%eu%phpo?9cfz;Z9{E?=6GH#4 zrPjP34wE_YOp6me=gJQ;1eu0w7{ysq5hhgyKoJZOsBeS0;RSz9!%e#>My&~fPdd4G z_iP>Jx3PT*sZ0o5BNDjLo{@VMxyua?FDT8Q&Ma}Yak9<{&X+%+)XLDS-jVL{iKX7E zBtmP!%z;Rxw7PtDfWKg_gUoI2lu^JdTTr#PX16Z>%FW(}_v?bK2SIJvH=)f`mJfzq z6K$xxsDQ2^Y@~)=vZQh?m*!cHDevpn&Pt0z5<0Ig(x!ZXDhFUhB6LhUz#(^fK642T zLS%PoRJ0*Y-T-ffrol_*gP+#L5jcDKyEHA2)OBSe-($ao8FfIH9;uqQQD|1P`1}g< zbluCDk~|hU&9Tx!<-NYUXqUZ=y1$6-Vy8;}^2AOSr~^~fK(-k7Oiwd+Y9DtDIi9zd`25YTVY^tyR_vNcQw;#GtZx+t+_Cc?Jk3w<2XatI4t!bp}Y8ir}&{iAoPIBNHD=EI=#f_9> zc}9eGAzD=q)O4}YkT4c%v7SjW$PTpLZur!c%jGtGmdy&!Wgf0PsP8VPf?oOP_-lDH zl@kvPLWR#GQu(qHT}7KNIfgnx^LP0$2Z*mOYagJe6w9jilI1UQj^_ ziV1icI}5$vP3?uf&ov0A;|Jt1kA8lrkOhCNp8Qojjk8ojcbZ^u@T{4xd;iu1-y_i= zJ_*NSNt0s`e}=DLq;TOZWxV4ZwFn?r7)2Ea=D|$X_AkX1{rMUpq>W|VbO5cMZfxVm zdn4Yu6@q|#*8Jkbau^ZO?x(o@%n}!?Q?KX6XjWOw{b=Fp#i|SCnZ98TW4*%7_Vj$1 zfe=c^vx*yplW5hq_ECkPq{GuZI{4hwd!ej&SDhd=pEvuOBM~Z3?q#94Wx=5VEJ+|z zVeHGCTtG_RI-$$ocs-xOEVEhPs0)&LQ)ld#Gv!??@ld*-R8$VCP3ul?)COs?Bcg)| z00*UFwm%dG^$o#mW=q!XTE|>8I{Ft>OEiVpPceuAAe2#(v&tGcuJEu+UA_n-MX=U*Rsg-0KiLI#sw&(UIA)@RWlY5E+LC2 z8ov148gIwpA;QC)-{4|ZnibrT)kSSn0IquvTeSC(-}0T813ZCe-7W(cPy*XBPVl6y zu3xF~XU}!)<@oCB6)6)R|1>_x%WUc1k;%CwEq6&o0*{UZP?pm0!LHH?)WcTe?I*#R z?ol5x8TdD3>x5_rIgQ^$v`LZVfXIL+>>*i!)DAW2TgOaB*^|lsWgXWQ=``Ik1lvX@~#}E#PY&Ol68G1d%T;eLT z* zy+R&s=hnF1XMJFP-_EkIgTEQY{dm-p)km8bq%f6OcD}d$d`imkX^_5zLEQP3h05iq z(ZF@-Am{m{HnQyl)iftWMC(xwwU$K#jxd|(GFNnZ^9dp?Q4BAPhsU*CcZa(J`Yjzb zbYnKR^73h`d>$J02zMgrBnz()^arl{BU4gsYv1sm&#Q5#z1IHO$oi*^`_I2eP*^7} zS$tW5FUH0BRv05V;cz4XGvy50E0^yjekGfRIlX9XlbGC)7cTlyB0NMdBL0SO%{B*! zN~cvDW#XEgM02Fm*d8Tn@$LMal2RBqDEj*RVDd|wmHjf${l;sftrZg00wGgcIZ^hG z%EtDTcw&B4kdaoO5m>oj!eS*hkiX4sY~?_>EB7^4eDD5jb1dYkUA%KwczIu4B3S2T zKfM;0PRzj|r`}d(Y35#W{3mC58uWHD^-nf$siHgUGH3ylsO1EvmcbB^t}oZ;rz6!@ zy3U%AAN*~0?q1fL^I?LV^*Wb1#rI5ZF50WAMP>l1*qS5!x}K3FCy^M>%Dy`=4&+&Q z_Vnby3ZCZz|HWSJKd=LNM^}%0oKjgCj^yLZkjPp&)}3|tU#>#P2)QRz!+lYW4I*Y& zAhit)C$UAs<(drqU6H5~$f{;|WZ4FSFo($@M$$c=y4!8Lyr@{0P2+geJL-HZiuJWy zfPP!aO3trI6hge|5d*fWY*hg8q;qgo!ZMFH1J-*SyzWpd@A_!L*~qQkj;4Ju5b~Lx z7Y(|aD?k7?32V#pK$4PEU-9H=@)UN&4627=7GSoz!1S3gn8@0#f*lI;}dKwkhqCnHIaBZ zi8_{~vuacVv}WP;e6DFxROC|~hLyHxP`Ir-C$FU7i-GtQvBLz;){7XZ1N71>2hp(L z5^HKq(Y`uOB|Q!1E!W(BO-OMmWPZM{#1>IaK0`(kU&}2&BYkrY;!UCq_!xKamwWAZ zN!YEK2dg?(vTe~tU#}J(ypLdzSwV)QK#Fn9T^!+%@+`*|G$gac`ETNXA1N2rsMLgG zL4C?&#_{);@fTTn^>_Xe37Cx$l3GA`9r1nUys$fpOED@6`T83X<^g}Xh&Ps2&bL%UieAX(T-z=UdWHl z)xQ0m7}Fb{Y!%E_xhDvWaYKC+9}y#p)Qr+y*0Jf@F~`i(e%E&OSS&ZDsZ16Qge>Xm zIk1=|c7HeL^4TKZmzvr!bKt9Yyu@qZ{iiZ&xRF9?VCw9vT|I9G26SGof$J+d8<~|V z-YwOzs`9CtFf9GLCMpA6xpxMQS&^hqnHi!ZeIs(zwSSUW32syj;_VMP^ystA%zp;c zbbC{{wwCKIcu<|{#o49_qT6iH7JeC;7a+jME^!*Oa&Ugr^Sa4Lew`}Ca`^3~K5Z65 zwLs9yF^~Q|m2pFq>?Pd;bFthPZTFqqK~31_bYH0)qEjzjy`?g+A(= zA6~!AkFTU`Ox~SFj&FONw~UsoqTg;IKhFolg=ocWVAD~P&D67{FPEL3QB(V-q$CeK zDP7rw3uaX6zwu^@VS|f&5kWZ*#WgV^h`E7O{Xz~}vhS)_(q#QsGG5P&2sybtA)qEA zQmp|EU`F14Y7&AewnO)>G8tJe(N!YZPqIv7ZtWM1HA^N-FwuLq9=_R$-@+moa&6fG z<;v?ayE#WvEw~KDi<|7S)_oUE#ttjYu$x8Qj!PM*UJYfWAlH$NDI$5SRZ-wLH|6!rxJ5h~yuJH@ zR)16-%iV80MTl3(p#aT@uoVjN!n_H};H*|HHJ?qvz%Oj-!CjA-b*Pqwl_`l`t8;Q5`7rmY$I`&u)0qwj zG6G);etZTmFG$_}0K{<^4N=XZfa6GVAJTNWCV}H~KF-Qq^yc}8059y_WiqW2C8X@T z=;KHXtJ^BO<`8(S<{^(<%cHfBoA^P`Ern7i^qIO6x5(nsm4u?b>=VgUvhrypYzqNm zl53f>{9~}mG#cQ^t@jVLb#p}u(XuzZ?8$bz!*W*`VOo#OqKVBFoD}waI<<2~i`JS4 zX*(n6yC)F4uSJ%*0iR?yh|ga;H~=5ExPR8Uo73^MqfA$7$Ya$(*a!-?^k-3FLLg&@r@!*zxY5)?gHF2G4Gu6P&Y+@|3@EL z=7UsssNvRqVaP3{Ua+u$J~%#bEF}dmHt%{LJUSdQ3MxuPJqANkssG8V+lh|?HC<;4MXmz5)uuIFD$Jg(&y`jjR{yaBk+?{p;g@Gd}uPpZs4Q5RAJ_@Wxb3YQBXwqjzc^2mPTPoq5YY0E)JX6NJ8m z8!=__-|XOC{b><%|9I9Qt1F&=A4{Gg_> z1U&C+cN)t2qo`cZ`X+mrv8gXxYuvdLV#45@e9ZDSU*NArZKCV+=T_S^nXL}}3)GpR zQIXb&Yv1$oKZ=UZzwSjih&8LlgSuK) zxbRh8E+_0x#T|Ax-f^8=pPy&59N#yHrjuj11> zlX)l~EGDdrWB;IfZ(7ot#eTq>H6=8dmKd>?WLn0@_U%So{cSgCGdE{(o&(0FAIG^% z>VB07hFH4ieFHWOwFUNbm7Aq6rY=gBMbd`cm+!a*BR)vGRTqWwbSEu=!0IQJp1X5} z{I<{vpFA!0=xJB^-o+4_9|o^nKQ52o=<|9|ziemL5zv?8Gv<}(d-m|d$*--&QNcHY zu5Ptj7;rf7zO%&U75MN=euW9ojYs7I-@;^_7`>M3794MS8E0$2;nFivC23ZMWTrW* zBHzv zsOWk13A3rV9|YJ+LmH>D!stT}=c?Kj3yhdz^hO)=LZD?<8UrR0MXn+D%??suMnViC z3s2~@4Dpz{$o361m%|)zjN5S6SkWv2C!ucb*mVP)7%(wcSs8yQF=f6J&u-NQ)#2iX zxLWVFei9-r*Alc3F{s@Bjc7Gvwbi#n50eFHANV#GS&FU|SM-COxoKPxRaoTijhd`h zb}`!59)~Ga&`j5gQICgX02M zM+L3papVZ-)%J`H@o0y;^v~WH)IA-VLIH${O65|*Jn6LLvPE6shP=87KW8WJ@aVN) zJmb|?orZ*m%I*TWh({(IU>1VzcuV*1{9g(?OLK!WR#YaGFXPJ{rgJ``U|uS`01~=j z%`zYNs(ou4tit}ABNiG+`p?^oPFGk`)hd)#>xdOnou#SGn3wAs>tSi$f!@r~jE}Li zyCz}y#2j7_k0GC>Hq#aZ0oZHhxnKxa z1g%MSpNxn}j9yQPXif4J-2o}2DkUcc``x0zspPeFLssqa_Ds0p9&NY^QaBF&+b#*7&`%anf0YMTTR@Y6X@~)9PzPL-h^%IZ+a)+`WlqxaobDWc>Lbus(xb+ zneMSv?k|RQcBN$1c9{d_LQlIMW2$n+COkb=O#)t69)FZ4WDgD9qobOAzV|^%kXdT( z;6Vj!ka;`c#=~|B5tv#dB9d2A)D(L|PW?SlS;&!ii%ez7Y+RY3U(3M_J6d#>PmYAC&|6X5jq(YLn?(J^OJKRY~5AFnC- zp5-XLg7czjbCh$tG8-J-wmqKj#f~!+|cmzzM4>0ejox6I?@KqdXL(+`YN=zw!~xZE|o)w1OMe0OCtPY z`oy!(cYn@4utonW$>CW4#gXRg$Z!3vGH@a~6Cs?GKIOyW<15*m*52UB%7bP18O~7Z zq+}L*^U5!yTtt*TMq769n-ddb)-6_;k@jP9HMFZN=WI!D)cd<9_i!vAS#BO?sf12J zcHfmzu?w^JJM!|LF8C=AeW-@8^wAJ~@kx@(ui`z%ZcHEVO0Tzz;>;O|KyM$|?k-eC zBU0o}N~^vhO+n#%B%hq>v}Eq1*F`4if>0D$%7FdpTx8$bCTRC`&kO)>q)UV4)0Aj#H2(Bk2Y96Ik78= zLF`x6ET_l%I6k=Dx=7-Q@UG41(2`Vt#G5fHejUiYYl;eK15T6HRXJDlRI4M!QM?mS z0Ujz_q5J|CIwR5IAUtyUlem?;4t5%>tzKYyhwh*b6IF*S7U8PZmtE(`8o;+orNQ2I zc{OziO#f6bd6vru-SNwyp2tB*w7GkEEl5+G*)Cj>+|#m^U|cmNxXvehS8Cnc(ytCJ z7g_L11!Tze+QudEe#0``fgCHQDZn4MOvnYnO0M~(Wm49;xg>E zvvwRhdT>Y9Xz`O6jkM09XY|`iUFT-_E~i;YJHk`28U=f32o8(Wr@Q6=X`#JeYFwsY zjC4@8KYxo-f#2(PY~c&s5rhjL#*OViN=eFBk!#7tlp36#O}w{hNOvl!6B!SUOB zwKd+Um}0q&CXERYaF;Sm|B9Tl3|Xkw6Gt8K2fn*(yODkj*LdbbicQPk^Q!PF^KXP2 zNF?Ivm>hMSJPuw^-!;LmcHFkouEms2pT$8TU~rc)S4+E$z7&_B8NG(PHJ3^U9ED03 zHgtkIYI+%9T6CPn*RZb2YGu^C&T?lTQ6M>!lw|0SfMS%2vs@eDkGw@?=yu(r?$YA) zjMC3R)c576tLP$$S2C#)4d{r-Ri@3^J_ubvvJsq}{lgNzO$X~}c3C1BpAt7C>1Vi` z2_-5d=2qbq@$RD(a%`h;#nY*AJ`!z^W|?wpR@M1lb}U@7Dl^I}p+;}GSNjrAeNt|5 zut#=Ez36|<@lg5zk>=W3JwN;d?2~W{kS2U1LwJr!+t#_qMb&GYl(Bg(E6OW5-<0Ad zHi-3EJDkT{$8HzicaW%_h*pA%?DjU8=2*t}a2O0#YJU5%R7z2zn|$BL5WiGGT5IH;9KTu}5XRij^k_yHI`l z)a5mH+cC~yhxvIedblJR^~(RXdi63qHy6!BZTQS zEWbq}Q@n3H^caX~6l0yGUT^^V30j(50Vkc_#NTgWe^UwG?mmzps8RR5W5hjFjd2+g zf+5$Nnr^^_fqg|y#WD)fy#Aqr^|lpofh-X>>=mhgXMY9%EDH}hvR7aM zvuhKYgbSX6Qp zH4hIJmf(oz-YA@{FT2eO+9KXyC@{DqPYy~$dlktS>S>#s3QkAGG8qy1oR0}o1yE$v4oPbOeE137(7AvY=1L{Kb{;9 z@N*;DAWd+Za2@yn4B9Wf+?z&nbMqvTlC=L%ya)aWqWwSq{m+u`pnG&!m;Sv_V3^F%u$UCdxsd&gcrr(GR4cR(#&IMik z6a?c4qD&2|!L!o2Z>EpJ#0grj--CA#<~tHvALiuQqmay0PL{(jZPDOdLE}JWTwXJd zF=a8u=pg8}PdJG{E>^?OD8W~R$k%nI=m1a|b)( zun$e?6i44TlW%cPxh;SrQJ2V1uyPf&>7o|vU&kF#AS;7DM673JWtaIFW zh0*W7b43A0)INDP_PC#*+8uaoQu3Ba3ABaTNjF~n@eSx3JvDeghu6IYKdNOROaxa7 z5?RdcpnNr_loHdLCUBOz&O-jd$$iTGI|vT7faChFF`vlM-%0~g`+?m`WT;g3zQK44;tly@vBt7p4&Z1W3&@7cyFfFGvFiAz| zR~!OMERdK9+KaCTU_SgH*!v zSCi{Q;}_@w#R6{SYnsI;c4C}PB3dpY##vXIxK9~oFB_u4Y3<~KV6dimu4P!`NP<7x zp=7DNd4iANX&+o__BSHg_d`^n8&dVDZOBgVK@iUy>RmZmB8plAxiUA630^8)&3FMi z$zk_)hGvimw~A%`tU|_!&yV6<-&WIO5i|j|9a}HH=62alBmT^Hz~6g@nF}cDVeO@d zXq=@4C(j2ny6e9K^d|M(;E7slU}7;qb$#_Yxn}JlSw2?F^vPxZV$DOGBLe*nS}Cyp zbQ8qCiha!b*1`we_#2VvQPqoIx0l%Cjv*`&MNy@NuexVbQTiCXVF1D>wGwdtD{D8k za?9ang3nGH#ZQo^Jjoq%X7|SSge8=?HT=db-neoS4}c2Olu z5y}PG?5UC%IFc|(1>a7oH7SQz)()R$P82Wh zvR!DY8|!CSnf*wgo(EeJT@}nT&07iJjI>2LZhC)vD7jgGO8+aJiF=fu$wfyi@(|U;u7ZV zEw{AK$XnJh-f0v{p#cYu9S1PHE@rHD`!!&*p;lL+9C#BB%s@%*H&we@#2tZW#ub*J z>d2oQMji>E8Hu)$uNSXvA+s_auIO(@A`6d0k3Qi+lInU=qS)e-CF! zr+uK*xFdP{zvf2&w=8-7o6bFdS54s0f0}aBzb(~H{O9f}0gGmgRLs28#t+Y;GgcSO z2Z`*D7&%{o-}*+%DS2)@;MAkcVd+49=;AENq3=L_CX^j(IfvI`jN^QomAF+tk=4S2 zzG&@~{dF@kX%=29x#75QM8IaCCM?)?fOdX<;q?q$f-gR zwx`RTq)JZ_WPqF*!i+>H(WQ*|Bae8_Oozz-cUe|+&jZc?er>YVAHPnj7$jH*gjU`g zdxEY7BN##&$LcerGL2~j9@INuE&jxR{OQ}(5UHNNug`M=T-`f4qqiK8>(4?FD%or| zwna+E@~LKPUiNv0r`+;uFq@=^w1C(FfV zpO<@Tv+|Q^j(iZKo5nl8B=o)z%VO*T7Zlig6l&w<2acUdx<|z+zxC6$6#pBMdD~|F z`ENw|r+yw$@L$WUANc;QN$-{piNz_B?Gqa7ZlBXLp?)X}{eq_mWZmOB0fZ6F;u)yK ze{$W`FYW1TkA@E4+={DaJei`Ozor|e?wVE6%M$s71p$vkM5hj3RM4&+Z z^IW=}@1GCoR?5H(>hO@=*$nn&E)>6!!rU-**A|`Z)L+lWc(d;Jlkt81A5O-(Y|&KI z8IEbfZ}$2-wCbKTaRFp67|~%bQ5v$BWn=oXrDVr_^u1GL0cOs}pKt9*C*B(}(Tt%H z;Vy;D>#OvAwd|rgXIw0mJbQb4=k)FLnVZtv7yEmotdtU1pIDLd^FGQ{Eaq89beg^vFZz(pPN&AjbOEa(e;#bf7U2!$Ix)f=A zmq)@^yFJG-0XBOi7MJ`(rCzot8y|sq4}^2A#(w;(64vYJ2u< zAH5;T!(8?`{&O|HuN#Nc-_(oV+VO5iszdqTgd&A?_@@>}AA+OurovSkap)jQ9e?@h z7I=lP_GqE^6r1o=ho6|WFz6vjyW6lJ?@=C@xzE)XcKQL{RH%%4AIWuUZzp*hXn6~F zQp@R7Vq@nS6TJ8I+JzD~KjeE{*GAC2d%=8c14LnVwylp{$SQrIes5Qq>DLC*i#RT` zL9nfdKtXLo0l{Fl=z^QOWO7o1`F%U?3YR&0t1&d{4(Vu*oIVH!8(OJtmT1w}PNFY? zkhs-9MT%u?AGzR3k5#40nSz+qnMpn3`yMa=QX#D4vb3C2(WQYuCCgdqcGPI(N=JS< zyd$eV2`r+{F%B)&^mE`QO2$hiyj+AvP1vM7!J;l#&gMAW<%OMCmb@NQk)2a$4;BpK zTB7Do*00&u&at|z^8TWV6z-n^UM-MG?}<|p>_2A+yE0zNWtTfzz7w-Q)4C|tX3?%0 z+$5l0X;+cdBdAjb*NfyPt5$=I5smK;^it}eeB_;U4F(nt<$@#k+&0JJJ)YdGFh8*I z{YZv$I{7OKyBs4YFvmv8;iJR2 z41cxHO64O%UMRspf|Z=C7Z^eX>jXnOMUQGSJ@DBMqwXaNxf&gEO@-P6Mus3}Qm$0N zH=8q34!LMFD1p;OEwNC8n@asD^;|h2qgXQ+OwL7c$|e409=)MpF!~$O-sQ@8PQOil z?J4XxqK({iT0J*js+-rZ@93gP2fq_SpEc!l?M)=I39pqIxkoeWw6pJ+M9%=dg}bMZ z0D90@Eu4TPBqK~fF46pzy7yho+-c1m$9(o{dg}-zCFzKCsb<)#z}A9Qxqwd%wS8|@ zGd;a;(h1LH|JW23Dqtgh^=vB7F5Tt%>)5l>U-^gm_g{O=T}bx2Z6*(^Nq=(eJSGHo z@m`Bz)4R7)Qj=EA3SZaMSNZxhhWwfL%c zEG(`?0wqBwt|WnDyP|wPC{ro!A2vsYlD)HeBMQd=UJeG5QsV+rw#|7?j!Fl9WL)|j zT+VHMJqRIW>6Yr&EjYo|*$e!k`BbV71N*7^mQdPeLo>v@SqcJAHSimec9rSe6QS>9 zZcCadjVE(XIqoEKvCw!=a#;7!d9k38EcH0|P^+a#($eE=cc3&5&MUm{o2gB5oD5~R z#Kxsw>ErQ?*Fp4b!fCujo`d0jWZQ0i|~-QWAPXZ&Jksh(G`ZRFn<^LP$V*OXyt^njl3&lNJIwo>OYejMK==X?cb7#!h4uqRh zOi(jA)AW|PVXw;B9GMZ>G!n<-+xtbBbxOjh>og78OG0!5kf?Rcg`|XaP@6yIoN^%I z`YY$;!?F(jhTW8Y!Z-u0B?1DtC9(_CHy~^<8{A+Z_!5k_6udlrz97W(nCj>va~ z31>IUivtJpcQ&0NQ;#N{QQQS2Ri4kVyqJ*{vXiq@QJ7{)OcE>5q8y!B>m_(Lr67Ly z^l-!3ZED~`Nh4|HQ-hvB0Swl>#p-EI;T`QKY^Zg3P=Q(CQHHbNKk70}E;68daMkhUrVxjM;gaxU% z=;)ueADWaonS~vwsV!hXg z)lJ@sEN{hN!X>#Yq}9VZlydXXP1*O7UEHP~Xud?9!6Eda@kkq*U1i5noT zY=MAai8v-#m>%3iml2_pvg%8#wLD%QtUF|nLBcPnF~<7bype)+_kDhN(ujWRCnj>l zV>|Fx#_4rA#?FeAm4XNGV0768H#2fOx>Cs%Ey4hy>abL@tEr_6Hd}}#ki=U&zMo*i z47_0%&f%V%8nQED&wK|p2hxg)@qC`>PcQ*N2S2>JqhMqcZ*xtZ|9D$MD5b89*dJkf zeo3PIW>|my;CV)kSROhlhPr4IhHS0m#;yipOBQ=t$I5p;Njc5Ov2kZ{G6-4)h(Vg6 zK-rvJJ7*04&GLkCp6j*ACkflG*ecRJ79TQZ(n?T`I)66JP*9|LaQ+0?wovTqU{+aj zJo~k73ue~^F)(yux;~*fsEppuNI7rY)w{50NS;^O5Q&u2jc*l-FtM7%%!@tvWx!PW zqIFhv4Fr>_GP@#^Ym;TyFfTH|!BAA`J)OFbQhqX}kx8;@$T#op69AM>6>tz{)Pt zp)KfV@CRgG^{?n!=U-R+-`vg#8hs&SutVq3X(GiH>zz&dPD;xO&GDbbtGGJLI5f z@aJg!c#Q5gwMV>)cnA+l964KqwV&;T27F;Rs}q`2E-?+!*(SE*07iu4hH6Tj0>B+9p#nq>N2s370oJQA< zbcBsnW}GB_+D*Id7qhktLb-b%3A>s2YB)`|Pd||r3O|%$(MRw0YQ0D<>1uB55{nn= z(hZ$E`iNP=%DScSJ&9RRP_*YJW~p)uLS8OXb3l`Qv3M@pixlZ1hwW@oM^|PLj&Ktf z7Q?1FF_a^s$&qTIu~!AP(ndw-v_9*?s_Kp9*3YiAEyx zynzn8KMedyFG-RX9_=!By1ni)ebfD5WfW{YolF?3c+u>gAUElJ9gFS0C`Q+8`-lGV z5#*3z(HtI>c^bL%p&<9+nB7+tN3|!svc-;`!O=fTp;(tM+v6)iAt5J-Q>m#+PNf)M z8PO};(mVl=bRht(|DjU%9JIfu?dF?xKB!QaPW?oEtKuiiut5@R$JqK`Uqi0{4@tki@IOX5 zbloTm_Kwh9^4m71!@nl;Q&n!#ljk3q)Shn^81_-9c-|VT=`mk*W>F5W!Z7A}7(kB1 z)~qokQiOk~ym41-YDR1Dj#lEyfTRDRc|etatMR+d8S|Myxl-K#5XXy7xwAM-1q3up z^y|YaZJYG)A^CgETKm0;_X6w%2Jl9h_htkzX(7+V=?s~Ga2gg($$ZNUT1Gf;V}eql zw_gt%jrF{6MkU?8>OPG$`~Fk^)XwZ|{19|eO_EW>S8LFty4YVPj%eDM#NlB9K9Xu% zaDzY9)nh|jk3MMTPFq56PWTZlLN)|OQ&X$<6($|^ov}&A_P3-!GikorH~NT&ArE%D zSf9D1zYkl1*A8+w!mB=iiN@8^_JWxivSiT&2(Iv{cb$4+su;nnY96H~1kLC)3p)da z*n`l!pz+@ND?HBpRBv#VVC!a3p}Bnzfz&Dfy?F;i)=nP1%rd>?tw#Q!a?H21Hky$~DGf z3oiBd10{I^c_0!+Vpdmw@s`dgC{`Crl49zpb%Z#e9ttSM93H!I-}qYDXog_jZ|rtf zOHiu9r>PdiH#N+LRy>0_p@QMV#W{l9T^?sgD;c{`j)V90Ot2O>uvCy^^)}YnemG4_-(HVjo zn00PWCEJ9vJ?Ov;(*q%JBrGrz-D#;~3ob~7XU`vOjqzMcpZ8W8HN^4a;?Ax2b!@6p zFlPc;$01|>)T#-Ilsl@Z*9&}DCGX*&p@H8wW6Qs2D7L!f+!v06=Sjsh$2`rRjQ&ti!p!PwKSul9#)f%Lk z|HD8x_nrGH6D-P%nw?aeI#=)L$v#~`lHfl17;5$6ylc8vKqNay6knVrHyQ63IvO5I2sq6^o`x2Ms&Y% zkN%vQzY@Ftk#7FJh2|aYYL5cH@ZLWl6wZdrztML6@emo`+(`DqCr1%uW&!kgDOLd! z0bV|vKZBU^tV)08G&IZb{2d~T`#V?muXyi&Mf)ek3AU{gExRL=xXX@!y*XD?7FowW zLt}-@w_fWzi?pg2^@LBltUf<3qE0{Y+KPhP5uu+PzZoCFZR(GTLZWO>1K*$J{4!VL z*YQ14_WP?-`OjypTvr|b_r?F6oc}>9XHws*lX-9Z@2lLtWEl7XZhE4``!~AwVk{j4 zox45Jqe{<@#mN*U(i6!^MgBTdVtA~0%iCt*Pp>82%s;rlCH`D5rvh(qU%vlr929Vh z-2Iodf8ZPNA7mD`U~8!6q`yCw3Z$l?k_c zkH#~`H4>74qdS;!y*7xW?X9hi(+Cgb=J$Qpb%ri~vW&}E>iW*9v6<&XS(|5HN{nB~ z$q+;=btkk`Y9!L4^dJ`3U}=*UisPk3%F)nH!V<5t#dxQAwXK&uN9l9HJ8?lI@)Vxu~pv=Ajptq^H?aP3GU=-Tv9sfHzvGX#k z(qN7!LtYt!CokM;2uX;rt&zH`C0hmXK#X_g9~$26fH)6feJH(fS>2lyyKd(ezs(4m zvF&%qSEh2$-fPj!!oeeVosm>c&f*xFc)Q9-K<5v5ixBuav0l0Rz#~Jg4~A(WP&Eb4 zffx!IY5-~H_3BeuvMO3D(gS%bBR(r|9{whdzW#h$k+!jZ{{rjLZJ+D9TN@bRf$58gHJmK08I4!M$*LWC zzO-b&Pq;I6;@UEr)}K)Z#kAs$)3S0Vn|Z%L^Qiibr$@ZUA`9&=9!jYag`fi@F!9jX zg>f|4pxOismaoDo;iJRj#N0DRaZG#A?YjX>Q>1B6t(@!N##4@F>|;7*N(@D;k(I7x zvdc%1l@7*{J`IE#AIklB(Fu>E(%=Qt)QYe906aOJi8qKa$h|leQ>0hC0(4>*iuyb| z>%XWn47BZrXReRlWp!A&#_SpYP<>xbboQ6-{|A8lQ}=qNsR>-LDDDMNTUxfW*sYg( zl!k`6pX77lHsnpQKMqe+Tw@JH49I65v@7$(iNA~*b(XKP&ZN9DA8 z>}@f!w>{rr-e(7#tM*(33+l0)-<3GaxNY_RVJOo~BY&Q9`}3;~i#B1d@}%ta1U47# z8pfNeUxab#^B=mNwjkS>1cJo5O+skQbhzk8`FFI)dK2P-K{vsjW`|^hux~f3#0bqJ z`6eSSr^Z2H#kSGN@F^8WDjQB!OGw@R(9g9WRh| z?_uT1uE+@0o^rsCSNP(@P1y(_;g|-mJ=XhPHmNB)7dCu()9&sY{m{4djY+I}FjzBA z6e!9GO%fB0fHZ)A+~wbBdA7hcTGvLQt{lCV5i^DAV`FPBLFl$muY7l#1N458V$@ij z>HKr_M&s)mAsz?!&GG^tqSUEEOhzl=ON00RzGJG|^jEuE0dMvUQb@(MHP%DgU7nV+ zXh%Q7iE{JB3vr`Dt34<={?av#kgrejzrO!+IICl~?7RVFIX4_WQ+3C{T!jsb@9Gfs zesb#BQlVjaQFHg=R&eqKFP}3q=7g5SSJFbH9^WjDBGqF%r?Y%5yW#tOWGp@k9}!jH zb)nU6#yDVgreA+Sj>aVd?VtC(zX>4lFJ_xNB zg%An4D2vd%!fETpW6jW-~6A zd}R9=bIFLd5Zfw1YMuS~<&x96EdIFY^TpR}Ym^J`;h$%$gv#}&FW!0f%9J2&kP!NE z68EIIMsTxc($c;9Zh<6uehZR!?zL7nb|mjS!y8fgj1#>N@0sz*8~t(x*erYK%nqtA9D&lne-eb*&agp^>b)#V%Th85*p4p6apHe)>~cGyEL2y0 zkgzjO)*yP&Uf3p^pdg?#JUOVl!}WDSht3O=!k>den2MGBu>s$w_ZYV@JoDsQIyzyu z{xtVl<=+Wmp8C144JZhq2#X792wumF-+Xq228FiB7TvyfP2FZR!GzS7?a-JLX!cG_ z?&1c9G#PibmY*LV*NGcJ`LMrZmrl;U>9*z`Ez20Ggy7HFMdyua`@`pH-`pc36 zTG`_yOB&a#j0kl4X#9q?;QoiR9C7bZAF{S2)P=V`8X4rmo~IG+o4{bi%zO_i1oN(y zNN(V01SL2%4Oe-CB5}R^2Hy}TVRlQP3IdDRf#|}QUt-vk0LS@hu5CjVex@^8n3xyNz2`lAx7kx; z6k|nIb-nxGyAM)78D29R_lWQA&(C{-OQCxPA2goc>(eZyu>ub()X9cwGfM#>bsj=d zj2DVL;qtE$L|#@?6EIM(;13I9tsQFQ^%<>$ktT|U1&2a5W3FeSSvEiy?oNug!T~m2 zE1ZmUUfHVoz_E9E>kJFi+1!G1?80kx3P!j_BZQsPzyu9Eo-v95RF`g@Ds(LUMDb?7 z*?P&v5sDx!!-|&I7|nO6Pj;o{B)x>&$$^M|d2>Kn5CKt!ubhwOV}lydoLsFDJrcZC zto@J6WX2mKdN?A&lNZghVxHc;k6Gv9$1~v0=C5wF0-miRUHp$6eOw91b0K;Dp_R>N z!y)lM2C zwu+O8GF+wjZFP0^nyM$lKqmuW--u1UD?yF?sFt&@6FpdAtfSg-;Ek0`*XtS5ZuyG_ zsIK;UK={;L^sQbl>A(5s99#T^^Zn3?dX&?EOKtk*yOPmR!o|<@r%V=T5}HvZy5<0~ zK0N|bA~;TgbSC_}nwK^<6JH}_5cH@z4;DRZeHgC=HWk_fXs2HJYB7K5%^p}`4`DDo zi8l!Z(@W^<+tvW-B_Gq1SqZX{ok!+3JI6;CADxR66`Bd(O0TimkFc0 z##w3mHcQ4lKpamXeu5Qz9<2eM2Wr@KNp4tMUfs}|sHNakLy!v7?oGgRQsiE!h-vW| zV+TOY=x!~?LoDga;m_i}(OycU&5t;sl!q@XsAr`83oilU?<^kTn%PoJT8+oF@FAq2 z+W5?cN0|=sUtx4u#r;Yc%tQ z${amWvsadF)ovlEyGG>ZnRf4g==T18zWp*gbJ#sU*cl8jKTk2{OngZ`;N;=$(&70? zbiIq4GpcH}7_a87UiG5kmKBW_+P>v8xreoZ>p^H`riV%b&b6JRgzgQHI-6&bbc6fN;^oe#3*_9Ndc$#K2wNFh6!u)9%?F|CkaB7jOCYp0H0?!AtwQV< zJ7XIduHL>=BV{kl0YVy1lc)$;#{+dS7A{WI?uTVkP_3>9)j9komI-I(seCN2wL{T& zzE-rJe5K%${G7auhMkID)}aREXqQG&8bsBadz~}I1?p4SZQfQ%~_=c zxR@-I7at9P>i^)xOFneiOokChzL^`2j*s_X6NH^jO&6(ZfPl>sJv~N2MoI1&Yd|O3 zTGIbvx#29l-Uvo5pS^YqZ8CeIGM3gOtsnlR(1sw@H7dRkhCH*bM@_(W2SGz}n>a&StqE5(JhE4=IZ^*xZ|TS;Yk>H>Nj3H%#B07UDOgvnVV0v+QV?s(vEyWgnMfgwHz5Lt#%xTa6 O+tN_5e+iiWHvcaxad83w literal 0 HcmV?d00001 diff --git a/docs/diary/samples/chatbi-v3-lowconf-rag-preview/screenshots/timeline-rag-preview-clarify-execution-path.png b/docs/diary/samples/chatbi-v3-lowconf-rag-preview/screenshots/timeline-rag-preview-clarify-execution-path.png new file mode 100644 index 0000000000000000000000000000000000000000..38aefa372d081c86ae54affc0e780812651585f3 GIT binary patch literal 125585 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 O+tN_5e+iiWHvcaxad83w literal 0 HcmV?d00001 diff --git a/docs/diary/samples/chatbi-v3-lowconf-rag-preview/screenshots/timeline-round1-14-events-preview.png b/docs/diary/samples/chatbi-v3-lowconf-rag-preview/screenshots/timeline-round1-14-events-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..55dfa34e364ad023e459894b1b5e2d19ca2cec81 GIT binary patch literal 114486 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ˁFOAAfO1AW3x@+sJq@F_o@|F8gg1?zl3k# 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�xC>=@{~-vF{O<<=-f#Xx5TM~# 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

o~c29zGw+jTX{tuV{2kld+2$Twba%}Yxk)(eXX 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 literal 0 HcmV?d00001 diff --git a/docs/diary/samples/chatbi-v3-lowconf-rag-preview/screenshots/ui-confirm-rag-preview-card.png b/docs/diary/samples/chatbi-v3-lowconf-rag-preview/screenshots/ui-confirm-rag-preview-card.png new file mode 100644 index 0000000000000000000000000000000000000000..35f92399b9abf5ffe7e008847a5f29a99bdaabf3 GIT binary patch literal 38963 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 qZ`1wmHvc6 None: + os.environ.setdefault("NEXT_PUBLIC_ADMIN_SECRET", "secret-token-1234567890") + os.environ.setdefault("API_KEY", "api-key-123") + os.environ.setdefault("SILICONFLOW_API_KEY", "sf-dummy-key") + os.environ.setdefault("NEXT_PUBLIC_SUPABASE_URL", "http://supabase.test") + os.environ.setdefault("SUPABASE_SERVICE_ROLE_KEY", "service-role-dummy") + os.environ.setdefault("TEXT2SQL_DATABASE_URL", "postgresql://u:p@localhost:5432/postgres") + os.environ["CHATBI_USE_AGENT"] = "true" + os.environ["CHATBI_V2_INTENT_LLM"] = "false" + os.environ["CHATBI_V3_LOW_CONFIDENCE_CLARIFY"] = "1" + os.environ["CHATBI_V3_PLAN_PREVIEW_CONFIRM"] = "1" + + +def main() -> int: + _env() + from fastapi.testclient import TestClient + + from api.intent_agent import IntentDecision, StructuredSignals + from api.tools import Tool, ToolResult + + import api.tools as tools_mod + import api.unified_chat as unified_chat + import api.agent as agent_module + import api.index as index + + importlib.reload(unified_chat) + importlib.reload(index) + + from tests._chatbi_auth_overrides import install_unified_chat_auth_override + + install_unified_chat_auth_override(index.app) + + async def _rag_full( + query: str, + *, + history: list[dict[str, Any]] | None = None, + debug_llm_prompts: bool = False, + preview_only: bool = False, + ) -> ToolResult: + if preview_only: + return ToolResult( + success=True, + data={ + "rewritten": "2026年4月 项目进展 日记 检索", + "planned_top_k": 10, + "preview_headlines": ["2026-04-diary.md", "project-notes.md"], + }, + latency_ms=1, + ) + return ToolResult( + success=True, + data={ + "answer": "根据日记,4月项目进展包括…", + "hits": [ + {"id": "h1", "content": "4月项目里程碑…", "filename": "2026-04-diary.md", "score": 0.9}, + ], + }, + latency_ms=2, + ) + + async def _t2s_ok(*_a: Any, **_k: Any) -> ToolResult: + return ToolResult(success=True, data={"sql": "SELECT 1", "answer": ""}, latency_ms=1) + + async def _direct_ok(*, query: str, history: list[dict[str, Any]] | None = None, debug_llm_prompts: bool = False) -> ToolResult: + _ = (query, history, debug_llm_prompts) + return ToolResult(success=True, data={"answer": "d"}, latency_ms=1) + + def _make_tool(name: str, execute: Any) -> Tool: + async def _exec(query: str, *, history: list[dict[str, Any]] | None = None, debug_llm_prompts: bool = False, **__: Any) -> ToolResult: + return await execute(query=query, history=history, debug_llm_prompts=debug_llm_prompts) + + return Tool(name=name, description=f"dummy-{name}", parameters={}, execute=_exec) # type: ignore[arg-type] + + async def _fake_rag_lowconf( + *, + query: str, + history: list[dict[str, Any]], + tools: list[Tool], + min_confidence: float, + timeout: float, + **kwargs: Any, + ) -> IntentDecision: + _ = (query, history, tools, min_confidence, timeout, kwargs) + return IntentDecision( + tool="rag_search", + mode="rag", + reasoning="日记类问句,倾向文档检索", + reasoning_full="日记类问句,倾向文档检索", + confidence=0.35, + fallback="direct_answer", + structured_signals=StructuredSignals(llm_prefers_sql=False, has_aggregation_signals=False), + raw_response={"used": "diary_sample_export"}, + ) + + class _Registry: + def list_tools(self) -> list[Tool]: + return [ + _make_tool("direct_answer", _direct_ok), + _make_tool("rag_search", _rag_full), + _make_tool("text2sql_query", _t2s_ok), + ] + + tools_mod.rag_search_execute = _rag_full + tools_mod.text2sql_execute = _t2s_ok + agent_module.decide_intent_v2 = _fake_rag_lowconf + unified_chat.get_tool_registry = lambda: _Registry() + + client = TestClient(index.app) + headers = {"Authorization": "Bearer api-key-123"} + body_base = {"query": QUERY, "prefer": "auto", "session_id": SESSION} + + r1 = client.post("/api/py/unified/chat", headers=headers, json=body_base) + r1.raise_for_status() + data1 = r1.json() + run1 = data1.get("run_id") or str(uuid.uuid4()) + tok = next(e for e in data1["events"] if e.get("type") == "agent.plan.preview")["payload"]["plan_execution_token"] + + r2 = client.post( + "/api/py/unified/chat", + headers=headers, + json={**body_base, "plan_execution_token": tok}, + ) + r2.raise_for_status() + data2 = r2.json() + run2 = data2.get("run_id") or str(uuid.uuid4()) + + def _wrap(sample_id: str, events: list[dict[str, Any]], *, run_id: str, notes: str) -> dict[str, Any]: + timeline = [{**e, "run_id": e.get("run_id") or run_id} for e in events] + return { + "meta": { + "sample_id": sample_id, + "captured_at": "2026-05-31", + "run_id": run_id, + "event_count": len(timeline), + "query": QUERY, + "session_id": SESSION, + "source": "scripts/export_lowconf_rag_diary_sample.py", + "notes": notes, + }, + "timeline": timeline, + } + + OUT_DIR.mkdir(parents=True, exist_ok=True) + p1 = OUT_DIR / "round1_preview_clarify_timeline.json" + p2 = OUT_DIR / "round2_token_bypass_execute_timeline.json" + p1.write_text( + json.dumps( + _wrap( + "chatbi-v3-lowconf-rag-preview-round1", + data1["events"], + run_id=run1, + notes="首轮:RAG agent.plan.preview + agent.clarify;无 rag.sources", + ), + ensure_ascii=False, + indent=2, + ) + + "\n", + encoding="utf-8", + ) + p2.write_text( + json.dumps( + _wrap( + "chatbi-v3-lowconf-rag-preview-round2", + data2["events"], + run_id=run2, + notes="第二轮:token 放行;含 rag.sources", + ), + ensure_ascii=False, + indent=2, + ) + + "\n", + encoding="utf-8", + ) + print(f"OK: {p1.name} ({len(data1['events'])} events)") + print(f"OK: {p2.name} ({len(data2['events'])} events)") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main())