From 868c8301ac5351dfcb4195ba05c0404dfac21097 Mon Sep 17 00:00:00 2001 From: Saransh Kumar Date: Mon, 6 Apr 2026 14:37:41 -0400 Subject: [PATCH 1/8] remove old structure --- app/agent/__init__.py | 1 - app/agent/analysis.py | 66 ------ app/agent/analysis_grounding.py | 387 -------------------------------- app/agent/executor.py | 223 ------------------ app/agent/graph.py | 169 -------------- app/agent/planner.py | 259 --------------------- app/agent/state.py | 51 ----- app/prompts/__init__.py | 29 --- app/prompts/analysis_render.j2 | 39 ---- app/prompts/planner_compiled.j2 | 47 ---- app/prompts/planner_repair.j2 | 35 --- 11 files changed, 1306 deletions(-) delete mode 100644 app/agent/__init__.py delete mode 100644 app/agent/analysis.py delete mode 100644 app/agent/analysis_grounding.py delete mode 100644 app/agent/executor.py delete mode 100644 app/agent/graph.py delete mode 100644 app/agent/planner.py delete mode 100644 app/agent/state.py delete mode 100644 app/prompts/__init__.py delete mode 100644 app/prompts/analysis_render.j2 delete mode 100644 app/prompts/planner_compiled.j2 delete mode 100644 app/prompts/planner_repair.j2 diff --git a/app/agent/__init__.py b/app/agent/__init__.py deleted file mode 100644 index 640e7d2..0000000 --- a/app/agent/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""Gemini-driven agent workflow package.""" diff --git a/app/agent/analysis.py b/app/agent/analysis.py deleted file mode 100644 index f13e160..0000000 --- a/app/agent/analysis.py +++ /dev/null @@ -1,66 +0,0 @@ -"""Single LLM pass: interpret executed results into an analytics narrative.""" - -from __future__ import annotations - -import json - -from app.agent.analysis_grounding import build_analysis_evidence, build_approved_claims, validate_rendered_analysis -from app.agent.state import AnalysisState -from app.llm import get_llm_client -from app.prompts import render_prompt -from app.schemas import AnalysisRenderResponse - -_ANALYSIS_RENDER_ATTEMPTS = 2 - - -def _build_analysis_render_prompt( - question: str, - approved_claims_json: str, - validation_feedback: str | None = None, -) -> str: - return render_prompt( - "analysis_render.j2", - question=question, - approved_claims_json=approved_claims_json, - validation_feedback=validation_feedback, - ) - - -def run_analysis_narrative(state: AnalysisState) -> AnalysisState: - """Produce markdown-friendly analysis from query, objective, and step outputs.""" - - workflow = state.get("workflow_status", "") - if workflow in ("planner_failed", "execution_failed"): - state["analysis"] = "The available evidence is insufficient because the workflow did not complete successfully." - return state - - evidence = build_analysis_evidence(state) - approved_claims, expected_status = build_approved_claims(evidence) - if not approved_claims: - state["analysis"] = "The approved claims are insufficient to answer the question with the available evidence." - return state - - approved_claims_json = json.dumps([claim.model_dump() for claim in approved_claims], indent=2) - feedback: str | None = None - - try: - for attempt in range(1, _ANALYSIS_RENDER_ATTEMPTS + 1): - prompt = _build_analysis_render_prompt(state["query"], approved_claims_json, validation_feedback=feedback) - result = get_llm_client().generate_json(prompt, schema=AnalysisRenderResponse) - parsed = result if isinstance(result, AnalysisRenderResponse) else AnalysisRenderResponse.model_validate(result) - try: - validate_rendered_analysis(parsed, approved_claims, expected_status) - except ValueError as exc: - feedback = str(exc) - if attempt >= _ANALYSIS_RENDER_ATTEMPTS: - raise - continue - - state["analysis"] = parsed.analysis_markdown.strip() or "No analysis text was returned." - return state - except Exception as exc: # pragma: no cover - defensive - state["analysis"] = ( - f"The analysis step could not complete ({exc!s}). " - "Review the executed steps and trace for raw outputs." - ) - return state diff --git a/app/agent/analysis_grounding.py b/app/agent/analysis_grounding.py deleted file mode 100644 index 6911a9e..0000000 --- a/app/agent/analysis_grounding.py +++ /dev/null @@ -1,387 +0,0 @@ -"""Deterministic evidence, claims, and validation for grounded analysis output.""" - -from __future__ import annotations - -import re -from collections import defaultdict -from difflib import SequenceMatcher -from numbers import Real -from typing import Any - -from app.agent.state import AnalysisState -from app.schemas import AnalysisEvidence, AnalysisRenderResponse, ApprovedClaim, EvidenceItem, EvidenceValue - -_NEGATIVE_PREMISE_TERMS = ( - "drop", - "decline", - "decrease", - "down", - "worse", - "slower", - "underperform", - "fall", -) -_POSITIVE_PREMISE_TERMS = ( - "improve", - "increase", - "growth", - "better", - "faster", - "higher", - "gain", - "rise", -) -_CURRENT_TERMS = ("current", "latest", "this") -_PREVIOUS_TERMS = ("previous", "prior", "last") -_BLOCKED_TERMS = ( - "stable", - "strong", - "healthy", - "significant", - "improving", - "worsening", - "improved", - "worsened", - "cause", - "caused", - "driver", - "drivers", - "because", - "due to", - "root cause", -) -_GENERIC_PROPER_NOUN_ALLOWLIST = { - "Summary", - "Conclusion", - "Key Findings", - "Analysis", - "Evidence", - "Question", -} - - -def _is_number(value: Any) -> bool: - return isinstance(value, Real) and not isinstance(value, bool) - - -def _format_value(value: Any) -> str: - if value is None: - return "null" - if _is_number(value): - if float(value).is_integer(): - return str(int(value)) - return f"{float(value):.2f}".rstrip("0").rstrip(".") - return str(value) - - -def _infer_premise_hint(question: str) -> str: - lowered = question.lower() - if any(term in lowered for term in _NEGATIVE_PREMISE_TERMS): - return "deterioration" - if any(term in lowered for term in _POSITIVE_PREMISE_TERMS): - return "improvement" - return "" - - -def _row_label(row: dict[str, Any], non_numeric_columns: list[str], fallback: str) -> str: - values = [str(row[column]) for column in non_numeric_columns if row.get(column) not in (None, "")] - if not values: - return fallback - if len(values) == 1: - return values[0] - return " | ".join(values) - - -def _extract_entities(row: dict[str, Any], non_numeric_columns: list[str]) -> list[str]: - seen: list[str] = [] - for column in non_numeric_columns: - value = row.get(column) - if value in (None, ""): - continue - as_text = str(value) - if as_text not in seen: - seen.append(as_text) - return seen - - -def build_analysis_evidence(state: AnalysisState) -> AnalysisEvidence: - """Build a compact, domain-agnostic evidence packet from executed step previews.""" - - items: list[EvidenceItem] = [] - allowed_entities: list[str] = [] - - for step in state.get("executed_steps") or []: - if step.get("status") != "success": - continue - artifact = step.get("artifact") or {} - preview_rows = artifact.get("preview_rows") or [] - columns = artifact.get("columns") or [] - if not preview_rows or not columns: - continue - - numeric_columns = [ - column - for column in columns - if any(_is_number(row.get(column)) for row in preview_rows) - ] - non_numeric_columns = [column for column in columns if column not in numeric_columns] - - for index, row in enumerate(preview_rows, start=1): - entities = _extract_entities(row, non_numeric_columns) - for entity in entities: - if entity not in allowed_entities: - allowed_entities.append(entity) - values = [EvidenceValue(label=column, value=_format_value(row.get(column))) for column in columns if row.get(column) is not None] - items.append( - EvidenceItem( - id=f"{artifact.get('alias', step['output_alias'])}_row_{index}", - source_alias=artifact.get("alias", step["output_alias"]), - source_purpose=step["purpose"], - row_label=_row_label(row, non_numeric_columns, fallback=f"row_{index}"), - entities=entities, - metrics=numeric_columns, - values=values, - ) - ) - - return AnalysisEvidence( - question=state["query"], - primary_metric=state.get("metric", ""), - metric_direction=(state.get("compiled_plan") or {}).get("metric_direction", ""), - premise_hint=_infer_premise_hint(state["query"]), - items=items, - allowed_entities=allowed_entities, - ) - - -def _value_map(item: EvidenceItem) -> dict[str, str]: - return {value.label: value.value for value in item.values} - - -def _group_items_by_source(evidence: AnalysisEvidence) -> dict[str, list[EvidenceItem]]: - grouped: dict[str, list[EvidenceItem]] = defaultdict(list) - for item in evidence.items: - grouped[item.source_alias].append(item) - return grouped - - -def _sort_period_pair(items: list[EvidenceItem]) -> list[EvidenceItem]: - def score(item: EvidenceItem) -> int: - lowered = item.row_label.lower() - if any(term in lowered for term in _PREVIOUS_TERMS): - return 0 - if any(term in lowered for term in _CURRENT_TERMS): - return 1 - return 2 - - return sorted(items, key=score) - - -def _build_premise_claim(evidence: AnalysisEvidence) -> tuple[ApprovedClaim | None, str | None]: - if not evidence.primary_metric or not evidence.metric_direction or not evidence.premise_hint: - return None, None - - for source_alias, items in _group_items_by_source(evidence).items(): - matching = [item for item in items if evidence.primary_metric in item.metrics] - if len(matching) < 2: - continue - ordered = _sort_period_pair(matching[:2]) - left, right = ordered[0], ordered[1] - left_value = _value_map(left).get(evidence.primary_metric) - right_value = _value_map(right).get(evidence.primary_metric) - if left_value is None or right_value is None: - continue - - left_number = float(left_value) - right_number = float(right_value) - if evidence.metric_direction == "lower_is_better": - performance_change = "improved" if right_number < left_number else "deteriorated" if right_number > left_number else "flat" - elif evidence.metric_direction == "higher_is_better": - performance_change = "improved" if right_number > left_number else "deteriorated" if right_number < left_number else "flat" - else: - performance_change = "flat" - - contradicted = ( - (evidence.premise_hint == "deterioration" and performance_change == "improved") - or (evidence.premise_hint == "improvement" and performance_change == "deteriorated") - ) - statement = ( - f"The primary metric {evidence.primary_metric} was {left_value} for {left.row_label} and {right_value} for {right.row_label}. " - f"The metric direction is {evidence.metric_direction}." - ) - if contradicted: - statement += f" This does not support a {evidence.premise_hint} premise." - - return ( - ApprovedClaim( - id="claim_premise_check", - kind="premise_check", - statement=statement, - entities=[entity for entity in [left.row_label, right.row_label, *left.entities, *right.entities] if entity], - metrics=[evidence.primary_metric], - source_aliases=[source_alias], - values=[ - EvidenceValue(label=f"{left.row_label}.{evidence.primary_metric}", value=left_value), - EvidenceValue(label=f"{right.row_label}.{evidence.primary_metric}", value=right_value), - ], - ), - "contradicted_premise" if contradicted else None, - ) - return None, None - - -def _build_comparison_claims(evidence: AnalysisEvidence) -> list[ApprovedClaim]: - claims: list[ApprovedClaim] = [] - for source_alias, items in _group_items_by_source(evidence).items(): - if len(items) != 2: - continue - ordered = _sort_period_pair(items) - left, right = ordered[0], ordered[1] - common_metrics = [metric for metric in left.metrics if metric in right.metrics] - for metric in common_metrics[:6]: - left_value = _value_map(left).get(metric) - right_value = _value_map(right).get(metric) - if left_value is None or right_value is None: - continue - claim_id = f"claim_{source_alias}_{metric}" - claims.append( - ApprovedClaim( - id=claim_id, - kind="comparison", - statement=f"In {source_alias}, {metric} was {left_value} for {left.row_label} and {right_value} for {right.row_label}.", - entities=[entity for entity in [left.row_label, right.row_label, *left.entities, *right.entities] if entity], - metrics=[metric], - source_aliases=[source_alias], - values=[ - EvidenceValue(label=f"{left.row_label}.{metric}", value=left_value), - EvidenceValue(label=f"{right.row_label}.{metric}", value=right_value), - ], - ) - ) - return claims - - -def _build_row_observation_claims(evidence: AnalysisEvidence) -> list[ApprovedClaim]: - claims: list[ApprovedClaim] = [] - for item in evidence.items: - if not item.metrics: - continue - value_map = _value_map(item) - metric_pairs = [f"{metric} = {value_map[metric]}" for metric in item.metrics if metric in value_map][:4] - if not metric_pairs: - continue - metric_text = ", ".join(metric_pairs[:-1]) + (f", and {metric_pairs[-1]}" if len(metric_pairs) > 1 else metric_pairs[0]) - claims.append( - ApprovedClaim( - id=f"claim_{item.id}", - kind="row_observation", - statement=f"For {item.row_label}, {metric_text}.", - entities=item.entities or [item.row_label], - metrics=item.metrics, - source_aliases=[item.source_alias], - values=[EvidenceValue(label=metric, value=value_map[metric]) for metric in item.metrics if metric in value_map], - ) - ) - return claims[:8] - - -def build_approved_claims(evidence: AnalysisEvidence) -> tuple[list[ApprovedClaim], str]: - """Build deterministic claims and the expected final answer status.""" - - if not evidence.items: - return [], "insufficient_evidence" - - claims: list[ApprovedClaim] = [] - expected_status = "answered" - - premise_claim, premise_status = _build_premise_claim(evidence) - if premise_claim is not None: - claims.append(premise_claim) - if premise_status is not None: - expected_status = premise_status - - claims.extend(_build_comparison_claims(evidence)) - claims.extend(_build_row_observation_claims(evidence)) - - deduped: list[ApprovedClaim] = [] - seen_statements: set[str] = set() - for claim in claims: - if claim.statement in seen_statements: - continue - seen_statements.add(claim.statement) - deduped.append(claim) - - return deduped, expected_status - - -def _extract_numeric_tokens(text: str) -> set[str]: - return set(re.findall(r"\b\d+(?:\.\d+)?\b", text)) - - -def _candidate_entity_phrases(text: str) -> set[str]: - candidates: set[str] = set() - for line in text.splitlines(): - stripped = line.strip() - if not stripped or stripped.startswith("#"): - continue - for match in re.findall(r"\b[A-Za-z][A-Za-z]*(?:\s+[A-Za-z][A-Za-z]*)+\b", stripped): - candidates.add(match.strip()) - return candidates - - -def validate_rendered_analysis( - response: AnalysisRenderResponse, - approved_claims: list[ApprovedClaim], - expected_status: str, -) -> None: - """Reject rendered analysis that steps outside the approved claim set.""" - - claim_by_id = {claim.id: claim for claim in approved_claims} - used_ids = response.used_claim_ids or [] - if expected_status != "insufficient_evidence" and not used_ids: - raise ValueError("The final analysis must cite at least one approved claim id.") - unknown_ids = [claim_id for claim_id in used_ids if claim_id not in claim_by_id] - if unknown_ids: - raise ValueError(f"Unknown claim ids in used_claim_ids: {unknown_ids}") - if response.answer_status != expected_status: - raise ValueError(f"answer_status must be {expected_status}, got {response.answer_status}") - - selected_claims = [claim_by_id[claim_id] for claim_id in used_ids if claim_id in claim_by_id] - allowed_numbers = { - token - for claim in selected_claims - for token in _extract_numeric_tokens(claim.statement) - } - unexpected_numbers = sorted(_extract_numeric_tokens(response.analysis_markdown) - allowed_numbers) - if unexpected_numbers: - raise ValueError(f"Analysis introduced numbers not present in the approved claims: {unexpected_numbers}") - - lowered_analysis = response.analysis_markdown.lower() - for term in _BLOCKED_TERMS: - if term in lowered_analysis: - raise ValueError(f"Analysis used unsupported wording: {term}") - - allowed_entities = { - entity - for claim in selected_claims - for entity in claim.entities - if entity - } - for candidate in _candidate_entity_phrases(response.analysis_markdown): - if candidate in allowed_entities or candidate in _GENERIC_PROPER_NOUN_ALLOWLIST: - continue - similar = max( - ( - SequenceMatcher(None, candidate.lower(), allowed.lower()).ratio() - for allowed in allowed_entities - ), - default=0.0, - ) - if similar >= 0.82: - raise ValueError(f"Analysis changed an approved entity name: {candidate}") - - if expected_status == "contradicted_premise": - first_line = next((line.strip() for line in response.analysis_markdown.splitlines() if line.strip()), "") - lowered_first_line = first_line.lower() - if "does not support" not in lowered_first_line and "contradict" not in lowered_first_line: - raise ValueError("A contradicted premise must be stated clearly in the first sentence.") diff --git a/app/agent/executor.py b/app/agent/executor.py deleted file mode 100644 index d8e58af..0000000 --- a/app/agent/executor.py +++ /dev/null @@ -1,223 +0,0 @@ -"""Execution engine for compiled SQL plans and legacy pandas helpers.""" - -from __future__ import annotations - -from typing import Any, Literal - -import duckdb -import pandas as pd - -from app.agent.state import AnalysisState -from app.data.semantic_model import get_semantic_context, new_duckdb_connection -from app.schemas import ArtifactSummary, CompiledPlanStep, ExecutedStep - - -SAFE_BUILTINS: dict[str, Any] = { - "len": len, - "min": min, - "max": max, - "sum": sum, - "round": round, - "sorted": sorted, -} - - -def _summarize_artifact(alias: str, value: Any) -> ArtifactSummary: - if isinstance(value, pd.Series): - value = value.to_frame() - - if isinstance(value, pd.DataFrame): - preview_rows = value.head(5).where(pd.notnull(value), None).to_dict(orient="records") - summary: dict[str, Any] = {} - numeric = value.select_dtypes(include=["number"]) - if not numeric.empty: - summary["numeric_means"] = numeric.mean().round(2).to_dict() - return ArtifactSummary( - alias=alias, - artifact_type="table", - row_count=int(len(value)), - columns=list(value.columns), - preview_rows=preview_rows, - summary=summary, - ) - - if isinstance(value, (int, float, str, bool)): - return ArtifactSummary( - alias=alias, - artifact_type="scalar" if not isinstance(value, str) else "text", - row_count=1, - columns=["value"], - preview_rows=[{"value": value}], - summary={"value": value}, - ) - - return ArtifactSummary(alias=alias, artifact_type="unknown") - - -def _register_artifacts(conn: duckdb.DuckDBPyConnection, state: AnalysisState) -> None: - for alias, artifact in state["artifacts"].items(): - if isinstance(artifact, pd.DataFrame): - conn.register(alias, artifact) - - -def _execute_sql(state: AnalysisState, step: dict[str, Any]) -> ArtifactSummary: - conn = new_duckdb_connection(state.get("dataset_context")) - try: - _register_artifacts(conn, state) - frame = conn.execute(step["code"]).fetchdf() - state["artifacts"][step["output_alias"]] = frame - return _summarize_artifact(step["output_alias"], frame) - finally: - conn.close() - - -def _execute_pandas(state: AnalysisState, step: dict[str, Any]) -> ArtifactSummary: - context = get_semantic_context(state.get("source_ids")) - local_env: dict[str, Any] = { - **context.raw_views, - **context.semantic_views, - **state["artifacts"], - "pd": pd, - "result": None, - } - exec(step["code"], {"__builtins__": SAFE_BUILTINS}, local_env) - result = local_env.get("result") - if result is None: - raise ValueError("Pandas step did not assign a `result` variable.") - state["artifacts"][step["output_alias"]] = result - return _summarize_artifact(step["output_alias"], result) - - -def _empty_table_failure(artifact: ArtifactSummary) -> bool: - return artifact.artifact_type == "table" and artifact.row_count == 0 - - -def compiled_plan_row_to_internal(row: dict[str, Any] | CompiledPlanStep) -> dict[str, Any]: - """Map a compiled plan step to the executor shape used by `_execute_sql`.""" - - if isinstance(row, CompiledPlanStep): - row = row.model_dump() - sid = row["id"] - alias = row.get("output_alias") or f"step_{sid}" - return { - "id": str(sid), - "kind": "sql", - "purpose": row["purpose"], - "code": row["query"], - "output_alias": alias, - } - - -def preflight_compiled_plan(state: AnalysisState, compiled_plan: dict[str, Any]) -> dict[str, Any]: - """ - Validate compiled SQL steps against the active runtime before execution. - - Steps are checked in order so later queries can reference earlier output aliases. - """ - - conn = new_duckdb_connection(state.get("dataset_context")) - try: - _register_artifacts(conn, state) - rows = list(compiled_plan.get("plan") or []) - rows.sort(key=lambda r: r["id"] if isinstance(r, dict) else r.id) - - for row in rows: - internal = compiled_plan_row_to_internal(row) - sql = internal["code"].strip().rstrip(";") - try: - preview = conn.execute(f"SELECT * FROM ({sql}) AS __planera_preflight LIMIT 0").fetchdf() - conn.register(internal["output_alias"], preview) - except Exception as exc: - return { - "status": "failed", - "failed_step_id": internal["id"], - "error": str(exc), - "query": internal["code"], - } - - return {"status": "success"} - finally: - conn.close() - - -def _try_sql_step( - state: AnalysisState, - internal: dict[str, Any], - attempt: int, -) -> tuple[Literal["success", "failed"], ExecutedStep]: - """Run one SQL step with post-execution validation (non-empty table).""" - - state["total_steps"] += 1 - try: - artifact = _execute_sql(state, internal) - if _empty_table_failure(artifact): - state["artifacts"].pop(internal["output_alias"], None) - raise ValueError("Step returned an empty result set.") - executed = ExecutedStep( - id=internal["id"], - kind="sql", - purpose=internal["purpose"], - code=internal["code"], - output_alias=internal["output_alias"], - attempt=attempt, - status="success", - artifact=artifact, - ) - state["executed_steps"].append(executed.model_dump()) - state["last_error"] = None - return "success", executed - except Exception as exc: - executed = ExecutedStep( - id=internal["id"], - kind="sql", - purpose=internal["purpose"], - code=internal["code"], - output_alias=internal["output_alias"], - attempt=attempt, - status="failed", - error=str(exc), - ) - state["executed_steps"].append(executed.model_dump()) - state["last_error"] = {"step_id": internal["id"], "message": str(exc), "code": internal["code"]} - return "failed", executed - - -def execute_plan(state: AnalysisState, compiled_plan: dict[str, Any]) -> dict[str, Any]: - """ - Iterate compiled plan steps in order: validate via execute + empty-table check. - No LLM calls. On first failure, stop and return structured status. - """ - - rows = list(compiled_plan.get("plan") or []) - rows.sort(key=lambda r: r["id"] if isinstance(r, dict) else r.id) - - for row in rows: - internal = compiled_plan_row_to_internal(row) - status, _ = _try_sql_step(state, internal, attempt=1) - if status == "failed": - sid = internal["id"] - return { - "status": "failed", - "failed_step_id": sid, - "error": state["last_error"]["message"] if state["last_error"] else "Unknown error", - } - - return {"status": "success"} - - -def execute_single_plan_step( - state: AnalysisState, - compiled_step: dict[str, Any], - attempt: int, -) -> dict[str, Any]: - """Re-run a single compiled step (e.g. after repair).""" - - internal = compiled_plan_row_to_internal(compiled_step) - status, _ = _try_sql_step(state, internal, attempt=attempt) - if status == "failed": - return { - "status": "failed", - "failed_step_id": internal["id"], - "error": state["last_error"]["message"] if state["last_error"] else "Unknown error", - } - return {"status": "success"} diff --git a/app/agent/graph.py b/app/agent/graph.py deleted file mode 100644 index 076944b..0000000 --- a/app/agent/graph.py +++ /dev/null @@ -1,169 +0,0 @@ -"""LangGraph workflow: schema context, compiled plan, deterministic execution, analysis.""" - -from __future__ import annotations - -from functools import lru_cache -from typing import Any - -from langgraph.graph import END, START, StateGraph - -from app.agent.analysis import run_analysis_narrative -from app.agent.executor import execute_plan, execute_single_plan_step -from app.agent.planner import plan_compiled_query, repair_failed_step -from app.agent.state import AnalysisState, create_initial_state -from app.data.semantic_model import get_semantic_context -from app.utils.logging import get_logger - -logger = get_logger(__name__) - - -def _append_trace(state: AnalysisState, step: str, status: str, details: dict[str, Any] | None = None) -> None: - state["trace"].append({"step": step, "status": status, "details": details or {}}) - - -def _append_error(state: AnalysisState, step: str, message: str, recoverable: bool = True, details: dict[str, Any] | None = None) -> None: - state["errors"].append({"step": step, "message": message, "recoverable": recoverable, "details": details or {}}) - - -def load_schema_context_node(state: AnalysisState) -> AnalysisState: - step_name = "load_schema_context_node" - _append_trace(state, step_name, "started", {}) - context = get_semantic_context(state.get("source_ids")) - state["dataset_context"] = context.schema_manifest - _append_trace( - state, - step_name, - "completed", - {"reference_date": context.reference_date, "views": [v["name"] for v in context.schema_manifest.get("views", [])]}, - ) - return state - - -def planner_compiled_node(state: AnalysisState) -> AnalysisState: - step_name = "planner_compiled_node" - _append_trace(state, step_name, "started", {"total_steps": state["total_steps"]}) - try: - state = plan_compiled_query(state) - plan = state.get("compiled_plan") or {} - _append_trace( - state, - step_name, - "completed", - { - "objective": plan.get("objective"), - "step_count": len(plan.get("plan") or []), - "metric": plan.get("metric"), - }, - ) - except Exception as exc: - logger.warning("%s failed: %s", step_name, exc, exc_info=True) - _append_error(state, step_name, str(exc), recoverable=False) - state["workflow_status"] = "planner_failed" - state["compiled_plan"] = None - _append_trace(state, step_name, "failed", {"message": str(exc)}) - return state - - -def execute_plan_node(state: AnalysisState) -> AnalysisState: - step_name = "execute_plan_node" - if state["workflow_status"] == "planner_failed" or not state.get("compiled_plan"): - _append_trace(state, step_name, "skipped", {"reason": "no compiled plan"}) - return state - - plan = state["compiled_plan"] - if not plan.get("plan"): - msg = "Planner returned an empty plan." - _append_error(state, step_name, msg, recoverable=False) - state["workflow_status"] = "execution_failed" - _append_trace(state, step_name, "failed", {"message": msg}) - return state - - _append_trace(state, step_name, "started", {"steps": len(plan["plan"])}) - outcome = execute_plan(state, plan) - - if outcome["status"] == "success": - state["workflow_status"] = "ready_to_analyze" - _append_trace(state, step_name, "completed", {"status": "success"}) - return state - - failed_id = outcome["failed_step_id"] - err = outcome.get("error", "Unknown execution error") - - try: - state = repair_failed_step(state, failed_id, err) - except Exception as exc: - _append_error(state, "repair_planner", str(exc), recoverable=False, details={"failed_step_id": failed_id}) - state["workflow_status"] = "execution_failed" - _append_trace(state, step_name, "failed", {"phase": "repair", "message": str(exc)}) - return state - - if state["executed_steps"] and state["executed_steps"][-1]["status"] == "failed": - state["executed_steps"].pop() - - plan = state["compiled_plan"] or {} - step_row = next((r for r in (plan.get("plan") or []) if str(r.get("id")) == str(failed_id)), None) - if not step_row: - _append_error(state, step_name, "Repaired step missing from plan.", recoverable=False) - state["workflow_status"] = "execution_failed" - return state - - retry = execute_single_plan_step(state, step_row, attempt=2) - if retry["status"] == "failed": - _append_error( - state, - step_name, - f"Step {retry.get('failed_step_id', failed_id)} failed after repair: {retry.get('error', err)}", - recoverable=False, - details={"failed_step_id": failed_id}, - ) - state["workflow_status"] = "execution_failed" - _append_trace(state, step_name, "failed", {"phase": "retry", "failed_step_id": failed_id}) - else: - state["workflow_status"] = "ready_to_analyze" - _append_trace(state, step_name, "completed", {"status": "success_after_repair"}) - - return state - - -def analysis_node(state: AnalysisState) -> AnalysisState: - step_name = "analysis_node" - _append_trace(state, step_name, "started", {"workflow_status": state["workflow_status"]}) - try: - state = run_analysis_narrative(state) - _append_trace(state, step_name, "completed", {"length": len(state["analysis"])}) - except Exception as exc: - state["analysis"] = f"The analysis step failed: {exc}" - _append_error(state, step_name, str(exc), recoverable=False) - _append_trace(state, step_name, "failed", {"message": str(exc)}) - return state - - -def route_after_planner(state: AnalysisState) -> str: - if state["workflow_status"] == "planner_failed": - return "analysis_node" - return "execute_plan_node" - - -@lru_cache(maxsize=1) -def build_graph(): - """Compile and cache the LangGraph workflow.""" - - graph = StateGraph(AnalysisState) - graph.add_node("load_schema_context_node", load_schema_context_node) - graph.add_node("planner_compiled_node", planner_compiled_node) - graph.add_node("execute_plan_node", execute_plan_node) - graph.add_node("analysis_node", analysis_node) - - graph.add_edge(START, "load_schema_context_node") - graph.add_edge("load_schema_context_node", "planner_compiled_node") - graph.add_conditional_edges("planner_compiled_node", route_after_planner) - graph.add_edge("execute_plan_node", "analysis_node") - graph.add_edge("analysis_node", END) - return graph.compile() - - -def run_analysis(query: str, source_ids: list[str] | None = None) -> AnalysisState: - """Execute the full workflow for a single user query.""" - - workflow = build_graph() - return workflow.invoke(create_initial_state(query, source_ids=source_ids)) diff --git a/app/agent/planner.py b/app/agent/planner.py deleted file mode 100644 index 5fc8bdb..0000000 --- a/app/agent/planner.py +++ /dev/null @@ -1,259 +0,0 @@ -"""LLM-driven compiled multi-step planner and repair.""" - -from __future__ import annotations - -import json -import re -from copy import deepcopy -from typing import Any - -from pydantic import ValidationError - -from app.agent.executor import preflight_compiled_plan -from app.agent.state import AnalysisState -from app.llm import get_llm_client -from app.prompts import render_prompt -from app.schemas import CompiledPlan, RepairDecision -from app.utils.logging import get_logger - -logger = get_logger(__name__) - -_COMPILED_PLANNER_ATTEMPTS = 3 -_MAX_PROMPT_RELATIONS = 4 -_MAX_COLUMNS_PER_RELATION = 18 - - -def _query_terms(question: str) -> set[str]: - return {token.lower() for token in re.findall(r"[a-zA-Z0-9_]+", question) if len(token) >= 3} - - -def _field_terms(*values: str) -> set[str]: - terms: set[str] = set() - for value in values: - normalized = re.sub(r"([a-z0-9])([A-Z])", r"\1 \2", value) - for token in re.findall(r"[a-zA-Z0-9]+", normalized.lower().replace("_", " ")): - if len(token) >= 3: - terms.add(token) - return terms - - -def _column_relevance_score(column: dict[str, Any], question_terms: set[str]) -> int: - column_terms = _field_terms( - column.get("name", ""), - column.get("original_name", ""), - column.get("source_path", ""), - ) - for hint in column.get("semantic_hints") or []: - column_terms.update(_field_terms(hint)) - - overlap = len(column_terms & question_terms) - score = overlap * 3 - if column.get("name", "").lower() in question_terms: - score += 4 - return score - - -def _relation_relevance_score(relation: dict[str, Any], question_terms: set[str]) -> int: - score = len( - _field_terms( - relation.get("name", ""), - relation.get("grain", ""), - relation.get("source_name", ""), - json.dumps(relation.get("lineage", {}), default=str), - ) - & question_terms - ) * 4 - score += sum(_column_relevance_score(column, question_terms) for column in relation.get("columns") or []) - for mapping in relation.get("semantic_mappings") or []: - score += len(_field_terms(mapping.get("concept", "")) & question_terms) * 5 - if relation.get("is_primary"): - score += 3 - return score - - -def _trim_relation_for_prompt(relation: dict[str, Any], question_terms: set[str]) -> dict[str, Any]: - trimmed = deepcopy(relation) - columns = list(trimmed.get("columns") or []) - if len(columns) <= _MAX_COLUMNS_PER_RELATION: - return trimmed - - ranked = sorted( - columns, - key=lambda column: ( - _column_relevance_score(column, question_terms), - column.get("name") in (trimmed.get("identifier_columns") or []), - column.get("name") in (trimmed.get("time_columns") or []), - ), - reverse=True, - ) - selected: list[dict[str, Any]] = [] - selected_names: set[str] = set() - for column in ranked: - name = column.get("name", "") - if not name or name in selected_names: - continue - selected.append(column) - selected_names.add(name) - if len(selected) >= _MAX_COLUMNS_PER_RELATION: - break - - trimmed["columns"] = selected - trimmed["identifier_columns"] = [name for name in trimmed.get("identifier_columns") or [] if name in selected_names] - trimmed["time_columns"] = [name for name in trimmed.get("time_columns") or [] if name in selected_names] - trimmed["measure_columns"] = [name for name in trimmed.get("measure_columns") or [] if name in selected_names] - trimmed["dimension_columns"] = [name for name in trimmed.get("dimension_columns") or [] if name in selected_names] - trimmed["semantic_mappings"] = [ - mapping - for mapping in (trimmed.get("semantic_mappings") or []) - if any(name in selected_names for name in mapping.get("columns") or []) - ][:12] - trimmed["omitted_column_count"] = max(len(columns) - len(selected), 0) - return trimmed - - -def _schema_subset_for_question(dataset_context: dict[str, Any], question: str) -> dict[str, Any]: - relations = list(dataset_context.get("relations") or []) - if not relations: - return dataset_context - - total_columns = sum(len(relation.get("columns") or []) for relation in relations) - if len(relations) <= _MAX_PROMPT_RELATIONS and total_columns <= (_MAX_PROMPT_RELATIONS * _MAX_COLUMNS_PER_RELATION): - return { - "reference_date": dataset_context.get("reference_date", ""), - "source": dataset_context.get("source", ""), - "dialect": dataset_context.get("dialect", ""), - "relations": relations, - } - - question_terms = _query_terms(question) - ranked_relations = sorted(relations, key=lambda relation: _relation_relevance_score(relation, question_terms), reverse=True) - selected = ranked_relations[:_MAX_PROMPT_RELATIONS] - return { - "reference_date": dataset_context.get("reference_date", ""), - "source": dataset_context.get("source", ""), - "dialect": dataset_context.get("dialect", ""), - "relations": [_trim_relation_for_prompt(relation, question_terms) for relation in selected], - } - - -def _relation_names(dataset_context: dict[str, Any]) -> list[str]: - relations = dataset_context.get("relations") or [] - if relations: - return [relation["name"] for relation in relations] - return [view["name"] for view in dataset_context.get("views", [])] - - -def _planner_preflight_feedback(outcome: dict[str, Any], schema_subset: dict[str, Any]) -> str: - return ( - "Your previous plan failed SQL preflight validation.\n" - f"Failed step id: {outcome.get('failed_step_id', '')}\n" - f"Error: {outcome.get('error', '')}\n" - f"SQL:\n{outcome.get('query', '').strip()}\n\n" - "Fix guidance:\n" - "- Use only exact relation and column names from the schema subset.\n" - "- Resolve business-language terms through semantic mappings, then use the mapped exact field names in SQL.\n" - "- Do not invent fields or rename columns.\n" - "- If the question premise might be wrong, start with an overall comparison before segment-level breakdowns.\n" - f"- Target SQL dialect: {schema_subset.get('dialect', '') or 'unknown'}.\n" - ) - - -def _build_compiled_planner_prompt(state: AnalysisState, validation_feedback: str | None = None) -> str: - schema_subset = _schema_subset_for_question(state["dataset_context"], state["query"]) - relation_names = _relation_names(schema_subset) - return render_prompt( - "planner_compiled.j2", - query=state["query"], - relation_names_json=json.dumps(relation_names), - schema_subset_json=json.dumps(schema_subset, indent=2), - validation_feedback=validation_feedback, - ) - - -def _build_repair_prompt(state: AnalysisState, failed_step_id: str, error_message: str) -> str: - plan = state.get("compiled_plan") or {} - schema_subset = _schema_subset_for_question(state["dataset_context"], state["query"]) - return render_prompt( - "planner_repair.j2", - failed_step_id=failed_step_id, - error_message=error_message, - plan_json=json.dumps(plan, indent=2), - schema_subset_json=json.dumps(schema_subset, indent=2), - ) - - -def plan_compiled_query(state: AnalysisState) -> AnalysisState: - """Call the LLM to produce a full compiled plan (max 3 SQL steps), with retries on schema errors.""" - - client = get_llm_client() - feedback: str | None = None - - for attempt in range(1, _COMPILED_PLANNER_ATTEMPTS + 1): - prompt = _build_compiled_planner_prompt(state, validation_feedback=feedback) - try: - decision = client.generate_json(prompt, schema=CompiledPlan) - parsed = decision if isinstance(decision, CompiledPlan) else CompiledPlan.model_validate(decision) - except (ValidationError, ValueError) as exc: - feedback = exc.json(indent=2) if isinstance(exc, ValidationError) else str(exc) - logger.warning( - "Compiled plan validation failed (attempt %s/%s): %s", - attempt, - _COMPILED_PLANNER_ATTEMPTS, - exc.errors() if isinstance(exc, ValidationError) else str(exc), - ) - if attempt >= _COMPILED_PLANNER_ATTEMPTS: - raise - continue - - preflight = preflight_compiled_plan(state, parsed.model_dump()) - if preflight["status"] == "failed": - feedback = _planner_preflight_feedback(preflight, _schema_subset_for_question(state["dataset_context"], state["query"])) - logger.warning( - "Compiled plan preflight failed (attempt %s/%s): %s", - attempt, - _COMPILED_PLANNER_ATTEMPTS, - preflight["error"], - ) - if attempt >= _COMPILED_PLANNER_ATTEMPTS: - raise ValueError(preflight["error"]) - continue - - state["compiled_plan"] = parsed.model_dump() - state["planner_reasoning"] = parsed.objective - state["metric"] = parsed.metric - state["intent"] = "diagnosis" - state["workflow_status"] = "ready_to_execute" - return state - - -def repair_failed_step(state: AnalysisState, failed_step_id: str, error_message: str) -> AnalysisState: - """Call the LLM once to replace a single failed plan step.""" - - raw = get_llm_client().generate_json( - _build_repair_prompt(state, failed_step_id, error_message), - schema=RepairDecision, - ) - parsed = raw if isinstance(raw, RepairDecision) else RepairDecision.model_validate(raw) - - if str(parsed.updated_step.id) != str(failed_step_id): - raise ValueError(f"Repair returned mismatched step id: expected {failed_step_id}, got {parsed.updated_step.id}") - - plan = state.get("compiled_plan") - if not plan: - raise ValueError("No compiled plan to repair.") - - steps = list(plan.get("plan") or []) - replaced = False - for i, row in enumerate(steps): - sid = row.get("id") if isinstance(row, dict) else row["id"] - if str(sid) == str(failed_step_id): - steps[i] = parsed.updated_step.model_dump() - replaced = True - break - if not replaced: - raise ValueError(f"Failed step id {failed_step_id} not found in compiled plan.") - - plan["plan"] = steps - state["compiled_plan"] = plan - state["repair_attempted"] = True - return state diff --git a/app/agent/state.py b/app/agent/state.py deleted file mode 100644 index c940ed7..0000000 --- a/app/agent/state.py +++ /dev/null @@ -1,51 +0,0 @@ -"""Typed workflow state for the compiled-plan analytics workflow.""" - -from __future__ import annotations - -from typing import Any - -from typing_extensions import TypedDict - - -class AnalysisState(TypedDict): - """Explicit state carried through the analytics workflow.""" - - query: str - source_ids: list[str] - dataset_context: dict[str, Any] - intent: str - metric: str - planner_reasoning: str - compiled_plan: dict[str, Any] | None - repair_attempted: bool - artifacts: dict[str, Any] - executed_steps: list[dict[str, Any]] - analysis: str - total_steps: int - last_error: dict[str, Any] | None - workflow_status: str - trace: list[dict[str, Any]] - errors: list[dict[str, Any]] - - -def create_initial_state(query: str, source_ids: list[str] | None = None) -> AnalysisState: - """Return the initial workflow state for a new request.""" - - return AnalysisState( - query=query, - source_ids=list(source_ids or []), - dataset_context={}, - intent="", - metric="", - planner_reasoning="", - compiled_plan=None, - repair_attempted=False, - artifacts={}, - executed_steps=[], - analysis="", - total_steps=0, - last_error=None, - workflow_status="planning", - trace=[], - errors=[], - ) diff --git a/app/prompts/__init__.py b/app/prompts/__init__.py deleted file mode 100644 index baf40c6..0000000 --- a/app/prompts/__init__.py +++ /dev/null @@ -1,29 +0,0 @@ -"""Jinja-backed prompt rendering helpers.""" - -from __future__ import annotations - -from functools import lru_cache -from pathlib import Path - -from jinja2 import Environment, FileSystemLoader, StrictUndefined - - -@lru_cache(maxsize=1) -def _prompt_environment() -> Environment: - """Create a strict Jinja environment for agent prompts.""" - - templates_dir = Path(__file__).resolve().parent - return Environment( - loader=FileSystemLoader(str(templates_dir)), - autoescape=False, - trim_blocks=False, - lstrip_blocks=False, - undefined=StrictUndefined, - ) - - -def render_prompt(template_name: str, **context: object) -> str: - """Render a prompt template with the provided context.""" - - template = _prompt_environment().get_template(template_name) - return template.render(**context).strip() diff --git a/app/prompts/analysis_render.j2 b/app/prompts/analysis_render.j2 deleted file mode 100644 index 9121462..0000000 --- a/app/prompts/analysis_render.j2 +++ /dev/null @@ -1,39 +0,0 @@ -You are a careful, domain-agnostic data analyst. - -Task: -Answer the question using only the approved claims provided. - -Hard rules: -- Use only the approved claims. -- Do not add new facts, names, labels, metrics, dates, or interpretations. -- Do not restate any entity, label, or metric unless it appears exactly in the approved claims. -- Use entity strings exactly as provided. Do not abbreviate, normalize, paraphrase, or rename them. -- Do not infer causes, drivers, intent, explanations, or business meaning unless explicitly stated in an approved claim. -- Do not derive new metrics, percentages, rankings, or comparisons unless they are explicitly stated in an approved claim. -- If an approved claim contradicts the question premise, state that in the first sentence clearly and directly. -- Prefer direct numeric comparisons that already appear in approved claims. -- Do not use unsupported adjectives such as "stable", "strong", "healthy", "significant", "improving", or "worsening" unless the exact wording appears in an approved claim. -- If the approved claims are insufficient to answer the question, say so explicitly. -- If the approved claims conflict with each other, say the evidence is internally inconsistent. -- Use only the minimum set of approved claims needed to answer the question. - -Output rules: -- Return only valid JSON. -- The JSON must match this schema exactly: - { - "answer_status": "answered" | "insufficient_evidence" | "contradicted_premise" | "conflicting_evidence", - "analysis_markdown": string, - "used_claim_ids": string[] - } - -Question: -{{ question }} - -Approved claims: -{{ approved_claims_json }} -{% if validation_feedback %} - -Your previous response was rejected by validation. -Validation feedback: -{{ validation_feedback }} -{% endif %} diff --git a/app/prompts/planner_compiled.j2 b/app/prompts/planner_compiled.j2 deleted file mode 100644 index 74c9587..0000000 --- a/app/prompts/planner_compiled.j2 +++ /dev/null @@ -1,47 +0,0 @@ -You are the planning component of a domain-agnostic data analysis agent. - -Return a single JSON object that describes a full multi-step plan to answer the user's question using only the normalized schema manifest described below. - -Rules: -- Follow the response schema exactly. -- Produce 1 to 3 items in "plan" (at most three SQL steps). Each step must add incremental explanatory value; avoid redundant segmentation. -- CRITICAL — the "max_steps" field: set it to the integer 3 always. It is the platform's fixed ceiling, not the count of steps you return. Do not set max_steps to 1 or 2 even if the plan has only one or two queries. -- Every step must use "type": "sql" and put the full SQL statement in "query". -- Use only these registered relation names: {{ relation_names_json }} -- Use exact column names only. Never invent, normalize, paraphrase, or rename a column. -- Use semantic mappings only to translate user language into exact schema fields. -- Prefer relations where "is_primary" is true before reaching for child relations. -- Only join relations when the schema subset exposes an explicit path in "join_keys". -- For nested JSON child relations, use the exact join columns from "join_keys" instead of guessing parent-child keys. -- Do not assume the question premise is true. First verify the main metric or comparison before planning causal or grouped breakdowns. -- Prefer SQL over multiple trivial splits; combine logic when one query suffices. -- No imports, file I/O, network calls, or plotting. -- Optional "output_alias" per step for stable names; if omitted, the executor uses `step_`. - -Return JSON in this exact shape: -{ - "objective": "string — what the plan will establish end-to-end", - "plan": [ - { - "id": 1, - "purpose": "string", - "type": "sql", - "query": "SQL query string" - } - ], - "max_steps": 3, - "metric": "optional short label for the primary metric, or empty string", - "metric_direction": "optional: e.g. higher_is_better or lower_is_better, or empty string" -} - -User query: -{{ query }} - -Normalized schema subset (relations, exact fields, types, grain, semantic mappings): -{{ schema_subset_json }} -{% if validation_feedback %} - -Your previous attempt was rejected. Fix it and try again. -Feedback: -{{ validation_feedback }} -{% endif %} diff --git a/app/prompts/planner_repair.j2 b/app/prompts/planner_repair.j2 deleted file mode 100644 index ada2780..0000000 --- a/app/prompts/planner_repair.j2 +++ /dev/null @@ -1,35 +0,0 @@ -You are the planning component of a domain-agnostic data analysis agent. A SQL step from an existing plan failed execution. - -Repair the failed step only: return JSON that replaces that step with corrected SQL. Do not add new steps. - -Rules: -- Follow the response schema exactly. -- repair_action must be "replace_step". -- updated_step must use "type": "sql", the same id as the failed step ({{ failed_step_id }}), and a fixed "query". -- Use only exact relation and column names from the schema manifest. -- Use semantic mappings only to translate user language into exact schema fields. -- Prefer relations where "is_primary" is true before using child relations. -- Only join relations when the schema manifest exposes the join path in "join_keys". -- Do not invent fields or rename columns. - -Original plan: -{{ plan_json }} - -Failed step id: {{ failed_step_id }} - -Error message: -{{ error_message }} - -Relevant schema subset: -{{ schema_subset_json }} - -Return JSON in this shape: -{ - "repair_action": "replace_step", - "updated_step": { - "id": , - "purpose": "string", - "type": "sql", - "query": "corrected SQL" - } -} From 27da606518986a7a8162b5a38434b19959d48523 Mon Sep 17 00:00:00 2001 From: Saransh Kumar Date: Fri, 10 Apr 2026 17:11:30 -0400 Subject: [PATCH 2/8] Restore workflow contracts and agent scaffolding --- app/agent/__init__.py | 8 +++ app/agent/_compat.py | 11 +++ app/agent/analysis.py | 17 +++++ app/agent/executor.py | 19 +++++ app/agent/graph.py | 55 +++++++++++++++ app/agent/planner.py | 29 ++++++++ app/agent/query_writer.py | 17 +++++ app/agent/state.py | 55 +++++++++++++++ app/api/workspace.py | 6 ++ app/prompts/__init__.py | 29 ++++++++ app/schemas.py | 126 ++++++++++++++++++++++++++++++++++ tests/test_agent_contracts.py | 90 ++++++++++++++++++++++++ 12 files changed, 462 insertions(+) create mode 100644 app/agent/__init__.py create mode 100644 app/agent/_compat.py create mode 100644 app/agent/analysis.py create mode 100644 app/agent/executor.py create mode 100644 app/agent/graph.py create mode 100644 app/agent/planner.py create mode 100644 app/agent/query_writer.py create mode 100644 app/agent/state.py create mode 100644 app/prompts/__init__.py create mode 100644 tests/test_agent_contracts.py diff --git a/app/agent/__init__.py b/app/agent/__init__.py new file mode 100644 index 0000000..599ec62 --- /dev/null +++ b/app/agent/__init__.py @@ -0,0 +1,8 @@ +"""Agent workflow package for the multi-step analytics runtime.""" + +from __future__ import annotations + +from app.agent.graph import run_analysis +from app.agent.state import AnalysisState, create_initial_state + +__all__ = ["AnalysisState", "create_initial_state", "run_analysis"] diff --git a/app/agent/_compat.py b/app/agent/_compat.py new file mode 100644 index 0000000..0a303cf --- /dev/null +++ b/app/agent/_compat.py @@ -0,0 +1,11 @@ +"""Shared helpers for import-safe runtime stubs during staged implementation.""" + +from __future__ import annotations + +from typing import NoReturn + + +def raise_not_implemented(feature: str) -> NoReturn: + """Raise a consistent error while later workflow branches are still pending.""" + + raise NotImplementedError(f"{feature} is not implemented on this branch yet.") diff --git a/app/agent/analysis.py b/app/agent/analysis.py new file mode 100644 index 0000000..c248212 --- /dev/null +++ b/app/agent/analysis.py @@ -0,0 +1,17 @@ +"""Analyzer entrypoints for the staged analytics runtime implementation.""" + +from __future__ import annotations + +from typing import Any + +from app.agent._compat import raise_not_implemented +from app.llm import get_llm_client + + +def analyze_workflow(state: dict[str, Any]) -> dict[str, Any]: + """Produce the final analyzer decision for the workflow run.""" + + raise_not_implemented("Analyzer runtime") + + +__all__ = ["analyze_workflow", "get_llm_client"] diff --git a/app/agent/executor.py b/app/agent/executor.py new file mode 100644 index 0000000..80f13ad --- /dev/null +++ b/app/agent/executor.py @@ -0,0 +1,19 @@ +"""Executor entrypoints for the staged analytics runtime implementation.""" + +from __future__ import annotations + +from typing import Any + +from app.agent._compat import raise_not_implemented + + +def execute_current_step(state: dict[str, Any]) -> dict[str, Any]: + """Execute the query for the current workflow step.""" + + raise_not_implemented("Step execution runtime") + + +def build_best_effort_state(state: dict[str, Any]) -> dict[str, Any]: + """Populate the best-effort answer path after retry limits are exhausted.""" + + raise_not_implemented("Best-effort execution fallback") diff --git a/app/agent/graph.py b/app/agent/graph.py new file mode 100644 index 0000000..6011092 --- /dev/null +++ b/app/agent/graph.py @@ -0,0 +1,55 @@ +"""Workflow entrypoints for the staged analytics runtime implementation.""" + +from __future__ import annotations + +from typing import Any + +from app.agent._compat import raise_not_implemented + + +def run_analysis(query: str, source_ids: list[str] | None = None) -> dict[str, Any]: + """Compatibility entrypoint used by the API service layer.""" + + raise_not_implemented("End-to-end analysis graph") + + +def load_schema_context_node(state: dict[str, Any]) -> dict[str, Any]: + """Load schema context into workflow state.""" + + raise_not_implemented("Schema context graph node") + + +def planner_node(state: dict[str, Any]) -> dict[str, Any]: + """Create the full ordered plan for the request.""" + + raise_not_implemented("Planner graph node") + + +def query_writer_node(state: dict[str, Any]) -> dict[str, Any]: + """Generate exactly one query for the current step.""" + + raise_not_implemented("Query writer graph node") + + +def executor_node(state: dict[str, Any]) -> dict[str, Any]: + """Execute the current step and store any successful output.""" + + raise_not_implemented("Executor graph node") + + +def analyzer_node(state: dict[str, Any]) -> dict[str, Any]: + """Produce the final answer or request a replan.""" + + raise_not_implemented("Analyzer graph node") + + +def replan_node(state: dict[str, Any]) -> dict[str, Any]: + """Request one bounded replan after analyzer or execution failure.""" + + raise_not_implemented("Replan graph node") + + +def best_effort_node(state: dict[str, Any]) -> dict[str, Any]: + """Return the final best-effort answer when retry limits are exhausted.""" + + raise_not_implemented("Best-effort graph node") diff --git a/app/agent/planner.py b/app/agent/planner.py new file mode 100644 index 0000000..353f2de --- /dev/null +++ b/app/agent/planner.py @@ -0,0 +1,29 @@ +"""Planner-facing entrypoints for the staged analytics runtime implementation.""" + +from __future__ import annotations + +from typing import Any + +from app.agent._compat import raise_not_implemented +from app.llm import get_llm_client + + +def build_compact_schema_context(dataset_context: dict[str, Any], question: str) -> dict[str, Any]: + """Return a compact schema/context summary for planning prompts.""" + + raise_not_implemented("Compact schema/context builder") + + +def plan_analysis(state: dict[str, Any]) -> dict[str, Any]: + """Return the planner-authored full workflow plan.""" + + raise_not_implemented("Planner runtime") + + +def replan_analysis(state: dict[str, Any]) -> dict[str, Any]: + """Return one revised workflow plan after failure.""" + + raise_not_implemented("Planner replan runtime") + + +__all__ = ["build_compact_schema_context", "get_llm_client", "plan_analysis", "replan_analysis"] diff --git a/app/agent/query_writer.py b/app/agent/query_writer.py new file mode 100644 index 0000000..94456ce --- /dev/null +++ b/app/agent/query_writer.py @@ -0,0 +1,17 @@ +"""Query-writer entrypoints for the staged analytics runtime implementation.""" + +from __future__ import annotations + +from typing import Any + +from app.agent._compat import raise_not_implemented +from app.llm import get_llm_client + + +def write_step_query(state: dict[str, Any]) -> dict[str, Any]: + """Generate one SQL query for the current workflow step.""" + + raise_not_implemented("Query writer runtime") + + +__all__ = ["get_llm_client", "write_step_query"] diff --git a/app/agent/state.py b/app/agent/state.py new file mode 100644 index 0000000..fa7194a --- /dev/null +++ b/app/agent/state.py @@ -0,0 +1,55 @@ +"""Workflow state helpers for the schema-grounded multi-agent analytics flow.""" + +from __future__ import annotations + +from typing import Any + +from typing_extensions import TypedDict + + +class AnalysisState(TypedDict, total=False): + """Explicit mutable state carried through the analytics workflow.""" + + query: str + source_ids: list[str] + dataset_context: dict[str, Any] + schema_context_summary: dict[str, Any] + current_plan: dict[str, Any] | None + current_step_index: int + stored_outputs: dict[str, Any] + step_queries: dict[str, list[str]] + failure_history: dict[str, list[dict[str, Any]]] + retry_counts: dict[str, int] + replan_count: int + analyzer_result: dict[str, Any] | None + final_answer: str + failure_summary: str + workflow_status: str + trace: list[dict[str, Any]] + executed_steps: list[dict[str, Any]] + errors: list[dict[str, Any]] + + +def create_initial_state(query: str, source_ids: list[str] | None = None) -> AnalysisState: + """Return the initial workflow state for a new request.""" + + return AnalysisState( + query=query, + source_ids=list(source_ids or []), + dataset_context={}, + schema_context_summary={}, + current_plan=None, + current_step_index=0, + stored_outputs={}, + step_queries={}, + failure_history={}, + retry_counts={}, + replan_count=0, + analyzer_result=None, + final_answer="", + failure_summary="", + workflow_status="initializing", + trace=[], + executed_steps=[], + errors=[], + ) diff --git a/app/api/workspace.py b/app/api/workspace.py index c67b238..4e52ca2 100644 --- a/app/api/workspace.py +++ b/app/api/workspace.py @@ -17,10 +17,16 @@ STEP_LABELS: dict[str, str] = { "load_schema_context_node": "Schema Context", "planner_compiled_node": "Query Planning", + "planner_node": "Workflow Planning", + "query_writer_node": "Query Writing", "execute_plan_node": "Execution", + "executor_node": "Step Execution", "analysis_node": "Narrative Synthesis", + "analyzer_node": "Final Analysis", "api_analyze": "API Analyze", "repair_planner": "Repair Planning", + "replan_node": "Replanning", + "best_effort_node": "Best Effort Answer", } _STORE_LOCK = Lock() diff --git a/app/prompts/__init__.py b/app/prompts/__init__.py new file mode 100644 index 0000000..4c9bb90 --- /dev/null +++ b/app/prompts/__init__.py @@ -0,0 +1,29 @@ +"""Jinja-backed prompt rendering helpers.""" + +from __future__ import annotations + +from functools import lru_cache +from pathlib import Path + +from jinja2 import Environment, FileSystemLoader, StrictUndefined + + +@lru_cache(maxsize=1) +def _prompt_environment() -> Environment: + """Create a strict Jinja environment for workflow prompts.""" + + templates_dir = Path(__file__).resolve().parent + return Environment( + loader=FileSystemLoader(str(templates_dir)), + autoescape=False, + trim_blocks=False, + lstrip_blocks=False, + undefined=StrictUndefined, + ) + + +def render_prompt(template_name: str, **context: object) -> str: + """Render one prompt template with the provided context.""" + + template = _prompt_environment().get_template(template_name) + return template.render(**context).strip() diff --git a/app/schemas.py b/app/schemas.py index ba30286..597814f 100644 --- a/app/schemas.py +++ b/app/schemas.py @@ -152,6 +152,132 @@ class SchemaManifest(BaseModel): views: list[dict[str, Any]] = Field(default_factory=list) +class CompactSchemaColumn(BaseModel): + """Compact field summary shared with the planner, query writer, and analyzer.""" + + model_config = ConfigDict(extra="forbid") + + name: str = Field(..., min_length=1) + dtype: str = Field(..., min_length=1) + type_family: Literal["string", "number", "boolean", "datetime", "unknown"] = "unknown" + nullable: bool = True + semantic_hints: list[str] = Field(default_factory=list) + + +class CompactSchemaRelation(BaseModel): + """One compact relation summary used as workflow source-of-truth.""" + + model_config = ConfigDict(extra="forbid") + + name: str = Field(..., min_length=1) + source_id: str = "" + source_name: str = "" + is_primary: bool = False + row_count: int = 0 + grain: str = "" + identifier_columns: list[str] = Field(default_factory=list) + time_columns: list[str] = Field(default_factory=list) + measure_columns: list[str] = Field(default_factory=list) + dimension_columns: list[str] = Field(default_factory=list) + join_keys: list[SchemaJoinKey] = Field(default_factory=list) + semantic_mappings: list[SchemaConceptMapping] = Field(default_factory=list) + columns: list[CompactSchemaColumn] = Field(default_factory=list) + + +class CompactSchemaContext(BaseModel): + """Compact schema/context summary passed into the multi-agent workflow.""" + + model_config = ConfigDict(extra="forbid") + + reference_date: str = "" + source: str = "" + dialect: str = "" + relations: list[CompactSchemaRelation] = Field(default_factory=list) + + +class UnsupportedRequirement(BaseModel): + """One reason the question may be only partially answerable with the available schema.""" + + model_config = ConfigDict(extra="forbid") + + type: Literal["column", "relationship", "concept", "time_range", "filter", "metric", "other"] = "other" + description: str = Field(..., min_length=1) + relation: str | None = None + column: str | None = None + + +class AnalysisPlanStep(BaseModel): + """One planner-authored step without executable query text.""" + + model_config = ConfigDict(extra="forbid") + + id: int + purpose: str = Field(..., min_length=1) + depends_on: list[int] = Field(default_factory=list) + output_alias: str = Field(..., min_length=1) + relations: list[str] = Field(default_factory=list) + required_columns: list[str] = Field(default_factory=list) + expected_output: str = Field(..., min_length=1) + allow_empty_result: bool = False + + +class AnalysisPlan(BaseModel): + """Full ordered workflow plan created by the planner in one shot.""" + + model_config = ConfigDict(extra="forbid") + + objective: str = Field(..., min_length=1) + can_answer_fully: bool = True + unsupported_requirements: list[UnsupportedRequirement] = Field(default_factory=list) + steps: list[AnalysisPlanStep] = Field(default_factory=list, max_length=3) + max_steps: int + metric: str = "" + metric_direction: str = "" + + @field_validator("max_steps", mode="before") + @classmethod + def normalize_max_steps(cls, v: Any) -> int: + """The workflow keeps a fixed ceiling of three executable steps.""" + + return 3 + + +class GeneratedQuery(BaseModel): + """One SQL query emitted by the query writer for a single workflow step.""" + + model_config = ConfigDict(extra="forbid") + + step_id: int + sql: str = Field(..., min_length=1) + explanation: str = Field(..., min_length=1) + + +class StepFailureRecord(BaseModel): + """Execution failure details kept in workflow state across retries and replans.""" + + model_config = ConfigDict(extra="forbid") + + step_id: int + attempt: int + error: str = Field(..., min_length=1) + query: str = "" + details: dict[str, Any] = Field(default_factory=dict) + + +class AnalyzerDecision(BaseModel): + """Final analyzer output: answer, replan decision, or best-effort summary.""" + + model_config = ConfigDict(extra="forbid") + + decision: Literal["final_answer", "replan"] + summary: str = Field(..., min_length=1) + key_findings: list[str] = Field(default_factory=list) + important_metrics: list[EvidenceValue] = Field(default_factory=list) + caveats: list[str] = Field(default_factory=list) + final_answer: str = "" + failure_summary: str = "" + + class EvidenceValue(BaseModel): """One exact label/value pair carried into the analysis evidence packet.""" diff --git a/tests/test_agent_contracts.py b/tests/test_agent_contracts.py new file mode 100644 index 0000000..55d1eb5 --- /dev/null +++ b/tests/test_agent_contracts.py @@ -0,0 +1,90 @@ +"""Contract and scaffolding tests for the staged agent runtime restoration.""" + +from __future__ import annotations + +from app.agent.state import create_initial_state +from app.api.workspace import STEP_LABELS +from app.schemas import AnalysisPlan, AnalyzerDecision, GeneratedQuery + + +def test_analysis_plan_normalizes_max_steps() -> None: + plan = AnalysisPlan.model_validate( + { + "objective": "Answer the question with available uploads.", + "can_answer_fully": True, + "unsupported_requirements": [], + "steps": [ + { + "id": 1, + "purpose": "Compute a grouped summary.", + "depends_on": [], + "output_alias": "grouped_summary", + "relations": ["orders_source_1234"], + "required_columns": ["orders_source_1234.amount"], + "expected_output": "A grouped table for downstream use.", + "allow_empty_result": False, + } + ], + "max_steps": 1, + "metric": "amount", + "metric_direction": "higher_is_better", + } + ) + + assert plan.max_steps == 3 + + +def test_generated_query_requires_one_sql_string() -> None: + query = GeneratedQuery.model_validate( + { + "step_id": 2, + "sql": "SELECT 1 AS value", + "explanation": "Returns a placeholder row for the current step.", + } + ) + + assert query.step_id == 2 + assert query.sql == "SELECT 1 AS value" + + +def test_analyzer_decision_supports_replan_shape() -> None: + decision = AnalyzerDecision.model_validate( + { + "decision": "replan", + "summary": "The current outputs only answer part of the question.", + "key_findings": [], + "important_metrics": [], + "caveats": ["A required relationship was not available."], + "final_answer": "", + "failure_summary": "Required relationship not present in schema/context.", + } + ) + + assert decision.decision == "replan" + assert decision.failure_summary != "" + + +def test_create_initial_state_exposes_new_workflow_fields() -> None: + state = create_initial_state("How many orders are overdue?", source_ids=["source_123"]) + + assert state["query"] == "How many orders are overdue?" + assert state["source_ids"] == ["source_123"] + assert state["schema_context_summary"] == {} + assert state["current_plan"] is None + assert state["stored_outputs"] == {} + assert state["step_queries"] == {} + assert state["failure_history"] == {} + assert state["retry_counts"] == {} + assert state["replan_count"] == 0 + assert state["trace"] == [] + assert state["executed_steps"] == [] + assert state["errors"] == [] + + +def test_workspace_step_labels_include_new_workflow_nodes() -> None: + assert STEP_LABELS["planner_node"] == "Workflow Planning" + assert STEP_LABELS["query_writer_node"] == "Query Writing" + assert STEP_LABELS["executor_node"] == "Step Execution" + assert STEP_LABELS["analyzer_node"] == "Final Analysis" + assert STEP_LABELS["replan_node"] == "Replanning" + assert STEP_LABELS["best_effort_node"] == "Best Effort Answer" From a7db41bc277a24c2e186cbd508a865d9cf4cf8d7 Mon Sep 17 00:00:00 2001 From: Saransh Kumar Date: Fri, 10 Apr 2026 22:26:12 -0400 Subject: [PATCH 3/8] Implement planner and query writer runtime --- app/agent/planner.py | 225 ++++++++++++++++++++++++++++- app/agent/query_writer.py | 68 ++++++++- app/agent/state.py | 2 + app/prompts/planner_plan.j2 | 57 ++++++++ app/prompts/planner_replan.j2 | 25 ++++ app/prompts/query_writer.j2 | 47 ++++++ tests/test_planner_query_writer.py | 197 +++++++++++++++++++++++++ 7 files changed, 612 insertions(+), 9 deletions(-) create mode 100644 app/prompts/planner_plan.j2 create mode 100644 app/prompts/planner_replan.j2 create mode 100644 app/prompts/query_writer.j2 create mode 100644 tests/test_planner_query_writer.py diff --git a/app/agent/planner.py b/app/agent/planner.py index 353f2de..b2fbadd 100644 --- a/app/agent/planner.py +++ b/app/agent/planner.py @@ -1,29 +1,242 @@ -"""Planner-facing entrypoints for the staged analytics runtime implementation.""" +"""Planner runtime for the schema-grounded analytics workflow.""" from __future__ import annotations +import json +import re +from copy import deepcopy from typing import Any -from app.agent._compat import raise_not_implemented from app.llm import get_llm_client +from app.prompts import render_prompt +from app.schemas import AnalysisPlan, CompactSchemaColumn, CompactSchemaContext, CompactSchemaRelation + + +_MAX_PROMPT_RELATIONS = 4 +_MAX_COLUMNS_PER_RELATION = 18 + + +def _query_terms(question: str) -> set[str]: + return {token.lower() for token in re.findall(r"[a-zA-Z0-9_]+", question) if len(token) >= 3} + + +def _field_terms(*values: str) -> set[str]: + terms: set[str] = set() + for value in values: + normalized = re.sub(r"([a-z0-9])([A-Z])", r"\1 \2", value) + for token in re.findall(r"[a-zA-Z0-9]+", normalized.lower().replace("_", " ")): + if len(token) >= 3: + terms.add(token) + return terms + + +def _column_relevance_score(column: dict[str, Any], question_terms: set[str]) -> int: + column_terms = _field_terms( + column.get("name", ""), + column.get("dtype", ""), + ) + for hint in column.get("semantic_hints") or []: + column_terms.update(_field_terms(str(hint))) + + overlap = len(column_terms & question_terms) + score = overlap * 3 + if column.get("name", "").lower() in question_terms: + score += 4 + return score + + +def _relation_relevance_score(relation: dict[str, Any], question_terms: set[str]) -> int: + score = len( + _field_terms( + relation.get("name", ""), + relation.get("grain", ""), + relation.get("source_name", ""), + ) + & question_terms + ) * 4 + score += sum(_column_relevance_score(column, question_terms) for column in relation.get("columns") or []) + for mapping in relation.get("semantic_mappings") or []: + score += len(_field_terms(mapping.get("concept", "")) & question_terms) * 5 + if relation.get("is_primary"): + score += 3 + return score + + +def _trim_relation_for_prompt(relation: dict[str, Any], question_terms: set[str]) -> dict[str, Any]: + trimmed = deepcopy(relation) + columns = list(trimmed.get("columns") or []) + if len(columns) <= _MAX_COLUMNS_PER_RELATION: + return trimmed + + ranked = sorted( + columns, + key=lambda column: ( + _column_relevance_score(column, question_terms), + column.get("name") in (trimmed.get("identifier_columns") or []), + column.get("name") in (trimmed.get("time_columns") or []), + column.get("name") in (trimmed.get("measure_columns") or []), + ), + reverse=True, + ) + selected: list[dict[str, Any]] = [] + selected_names: set[str] = set() + for column in ranked: + name = column.get("name", "") + if not name or name in selected_names: + continue + selected.append(column) + selected_names.add(name) + if len(selected) >= _MAX_COLUMNS_PER_RELATION: + break + + trimmed["columns"] = selected + trimmed["identifier_columns"] = [name for name in trimmed.get("identifier_columns") or [] if name in selected_names] + trimmed["time_columns"] = [name for name in trimmed.get("time_columns") or [] if name in selected_names] + trimmed["measure_columns"] = [name for name in trimmed.get("measure_columns") or [] if name in selected_names] + trimmed["dimension_columns"] = [name for name in trimmed.get("dimension_columns") or [] if name in selected_names] + trimmed["semantic_mappings"] = [ + mapping + for mapping in (trimmed.get("semantic_mappings") or []) + if any(name in selected_names for name in mapping.get("columns") or []) + ][:12] + return trimmed + + +def _coerce_relation(relation: dict[str, Any]) -> CompactSchemaRelation: + return CompactSchemaRelation( + name=relation.get("name", ""), + source_id=relation.get("source_id", ""), + source_name=relation.get("source_name", ""), + is_primary=bool(relation.get("is_primary")), + row_count=int(relation.get("row_count", 0) or 0), + grain=relation.get("grain", "") or "", + identifier_columns=list(relation.get("identifier_columns") or []), + time_columns=list(relation.get("time_columns") or []), + measure_columns=list(relation.get("measure_columns") or []), + dimension_columns=list(relation.get("dimension_columns") or []), + join_keys=list(relation.get("join_keys") or []), + semantic_mappings=list(relation.get("semantic_mappings") or []), + columns=[ + CompactSchemaColumn( + name=column.get("name", ""), + dtype=column.get("dtype", ""), + type_family=column.get("type_family", "unknown"), + nullable=bool(column.get("nullable", True)), + semantic_hints=list(column.get("semantic_hints") or []), + ) + for column in (relation.get("columns") or []) + ], + ) + + +def _render_plan_prompt( + *, + query: str, + schema_context_summary: dict[str, Any], + failure_summary: str = "", + current_plan: dict[str, Any] | None = None, +) -> str: + template_name = "planner_replan.j2" if failure_summary else "planner_plan.j2" + return render_prompt( + template_name, + query=query, + schema_context_json=json.dumps(schema_context_summary, indent=2), + failure_summary=failure_summary, + current_plan_json=json.dumps(current_plan or {}, indent=2), + ) def build_compact_schema_context(dataset_context: dict[str, Any], question: str) -> dict[str, Any]: """Return a compact schema/context summary for planning prompts.""" - raise_not_implemented("Compact schema/context builder") + relations = list(dataset_context.get("relations") or []) + if not relations: + context = CompactSchemaContext( + reference_date=dataset_context.get("reference_date", ""), + source=dataset_context.get("source", ""), + dialect=dataset_context.get("dialect", ""), + relations=[], + ) + return context.model_dump() + + question_terms = _query_terms(question) + total_columns = sum(len(relation.get("columns") or []) for relation in relations) + if len(relations) > _MAX_PROMPT_RELATIONS or total_columns > (_MAX_PROMPT_RELATIONS * _MAX_COLUMNS_PER_RELATION): + ranked_relations = sorted( + relations, + key=lambda relation: _relation_relevance_score(relation, question_terms), + reverse=True, + ) + selected_relations = ranked_relations[:_MAX_PROMPT_RELATIONS] + else: + selected_relations = relations + + context = CompactSchemaContext( + reference_date=dataset_context.get("reference_date", ""), + source=dataset_context.get("source", ""), + dialect=dataset_context.get("dialect", ""), + relations=[_coerce_relation(_trim_relation_for_prompt(relation, question_terms)) for relation in selected_relations], + ) + return context.model_dump() def plan_analysis(state: dict[str, Any]) -> dict[str, Any]: """Return the planner-authored full workflow plan.""" - raise_not_implemented("Planner runtime") + schema_context_summary = state.get("schema_context_summary") or build_compact_schema_context( + state.get("dataset_context", {}), + state["query"], + ) + state["schema_context_summary"] = schema_context_summary + prompt = _render_plan_prompt(query=state["query"], schema_context_summary=schema_context_summary) + result = get_llm_client().generate_json(prompt, schema=AnalysisPlan) + parsed = result if isinstance(result, AnalysisPlan) else AnalysisPlan.model_validate(result) + state["current_plan"] = parsed.model_dump() + state["current_step_index"] = 0 + state["workflow_status"] = "planned" + return state def replan_analysis(state: dict[str, Any]) -> dict[str, Any]: """Return one revised workflow plan after failure.""" - raise_not_implemented("Planner replan runtime") + schema_context_summary = state.get("schema_context_summary") or build_compact_schema_context( + state.get("dataset_context", {}), + state["query"], + ) + state["schema_context_summary"] = schema_context_summary + prompt = _render_plan_prompt( + query=state["query"], + schema_context_summary=schema_context_summary, + failure_summary=state.get("failure_summary", ""), + current_plan=state.get("current_plan"), + ) + result = get_llm_client().generate_json(prompt, schema=AnalysisPlan) + parsed = result if isinstance(result, AnalysisPlan) else AnalysisPlan.model_validate(result) + state["current_plan"] = parsed.model_dump() + state["current_step_index"] = 0 + state["replan_count"] = int(state.get("replan_count", 0) or 0) + 1 + state["workflow_status"] = "replanned" + return state + + +def _schema_subset_for_question(dataset_context: dict[str, Any], question: str) -> dict[str, Any]: + """Compatibility helper kept for schema-focused tests.""" + + return build_compact_schema_context(dataset_context, question) + + +def plan_compiled_query(state: dict[str, Any]) -> dict[str, Any]: + """Compatibility wrapper retained during the transition away from compiled SQL planning.""" + + return plan_analysis(state) -__all__ = ["build_compact_schema_context", "get_llm_client", "plan_analysis", "replan_analysis"] +__all__ = [ + "_schema_subset_for_question", + "build_compact_schema_context", + "get_llm_client", + "plan_analysis", + "plan_compiled_query", + "replan_analysis", +] diff --git a/app/agent/query_writer.py b/app/agent/query_writer.py index 94456ce..0cef37e 100644 --- a/app/agent/query_writer.py +++ b/app/agent/query_writer.py @@ -1,17 +1,79 @@ -"""Query-writer entrypoints for the staged analytics runtime implementation.""" +"""Query-writer runtime for step-by-step SQL generation.""" from __future__ import annotations +import json from typing import Any -from app.agent._compat import raise_not_implemented from app.llm import get_llm_client +from app.prompts import render_prompt +from app.schemas import GeneratedQuery + + +def _get_current_step(state: dict[str, Any]) -> dict[str, Any]: + plan = state.get("current_plan") or {} + steps = list(plan.get("steps") or []) + if not steps: + raise ValueError("No planner-authored steps are available for query writing.") + + step_index = int(state.get("current_step_index", 0) or 0) + if step_index < 0 or step_index >= len(steps): + raise ValueError(f"Current step index {step_index} is out of range for the active plan.") + return steps[step_index] + + +def _prior_output_summaries(state: dict[str, Any], current_step: dict[str, Any]) -> list[dict[str, Any]]: + needed = {str(step_id) for step_id in current_step.get("depends_on") or []} + if not needed: + return [] + + summaries: list[dict[str, Any]] = [] + for step in state.get("executed_steps") or []: + if step.get("status") != "success": + continue + if str(step.get("id")) not in needed: + continue + artifact = step.get("artifact") or {} + summaries.append( + { + "step_id": step.get("id"), + "output_alias": step.get("output_alias"), + "purpose": step.get("purpose"), + "artifact": { + "alias": artifact.get("alias"), + "row_count": artifact.get("row_count", 0), + "columns": artifact.get("columns") or [], + "preview_rows": artifact.get("preview_rows") or [], + }, + } + ) + return summaries def write_step_query(state: dict[str, Any]) -> dict[str, Any]: """Generate one SQL query for the current workflow step.""" - raise_not_implemented("Query writer runtime") + current_step = _get_current_step(state) + prior_outputs = _prior_output_summaries(state, current_step) + error_context = "" + failures = state.get("failure_history", {}).get(str(current_step["id"]), []) + if failures: + error_context = failures[-1].get("error", "") + + prompt = render_prompt( + "query_writer.j2", + query=state["query"], + step_json=json.dumps(current_step, indent=2), + schema_context_json=json.dumps(state.get("schema_context_summary") or {}, indent=2), + prior_outputs_json=json.dumps(prior_outputs, indent=2), + error_context=error_context, + ) + result = get_llm_client().generate_json(prompt, schema=GeneratedQuery) + parsed = result if isinstance(result, GeneratedQuery) else GeneratedQuery.model_validate(result) + state["generated_query"] = parsed.model_dump() + state.setdefault("step_queries", {}).setdefault(str(current_step["id"]), []).append(parsed.sql) + state["workflow_status"] = "query_ready" + return state __all__ = ["get_llm_client", "write_step_query"] diff --git a/app/agent/state.py b/app/agent/state.py index fa7194a..5135790 100644 --- a/app/agent/state.py +++ b/app/agent/state.py @@ -16,6 +16,7 @@ class AnalysisState(TypedDict, total=False): schema_context_summary: dict[str, Any] current_plan: dict[str, Any] | None current_step_index: int + generated_query: dict[str, Any] | None stored_outputs: dict[str, Any] step_queries: dict[str, list[str]] failure_history: dict[str, list[dict[str, Any]]] @@ -40,6 +41,7 @@ def create_initial_state(query: str, source_ids: list[str] | None = None) -> Ana schema_context_summary={}, current_plan=None, current_step_index=0, + generated_query=None, stored_outputs={}, step_queries={}, failure_history={}, diff --git a/app/prompts/planner_plan.j2 b/app/prompts/planner_plan.j2 new file mode 100644 index 0000000..3d0aba7 --- /dev/null +++ b/app/prompts/planner_plan.j2 @@ -0,0 +1,57 @@ +You are the planner in a bounded analytics workflow. + +You receive: +- the user's natural-language question +- a compact schema/context summary derived from uploaded structured data + +Your job: +- return the full ordered analysis plan in one shot +- Do not write SQL +- use only relations, columns, and join paths present in the schema/context summary +- if the question cannot be fully answered, say so explicitly in `unsupported_requirements` + +Rules: +- Return only valid JSON matching the schema. +- Use at most 3 steps. +- Each step must be logically distinct and useful. +- Every `output_alias` must be stable and human-readable. +- `depends_on` must reference earlier step ids only when a later step needs a prior output. +- `required_columns` should use exact qualified field names like `relation_name.column_name`. +- Do not invent columns, joins, metrics, filters, relationships, or time ranges. +- If the question is unsupported, you may return zero steps. +- The planner must never generate SQL or pseudo-SQL. + +Return JSON in this shape: +{ + "objective": "string", + "can_answer_fully": true, + "unsupported_requirements": [ + { + "type": "column | relationship | concept | time_range | filter | metric | other", + "description": "string", + "relation": "optional string", + "column": "optional string" + } + ], + "steps": [ + { + "id": 1, + "purpose": "string", + "depends_on": [], + "output_alias": "string", + "relations": ["string"], + "required_columns": ["relation.column"], + "expected_output": "string", + "allow_empty_result": false + } + ], + "max_steps": 3, + "metric": "string", + "metric_direction": "string" +} + +User question: +{{ query }} + +Compact schema/context summary: +{{ schema_context_json }} diff --git a/app/prompts/planner_replan.j2 b/app/prompts/planner_replan.j2 new file mode 100644 index 0000000..383ab00 --- /dev/null +++ b/app/prompts/planner_replan.j2 @@ -0,0 +1,25 @@ +You are the planner in a bounded analytics workflow. + +The previous plan or execution path failed and needs one revised full plan. + +Rules: +- Return only valid JSON matching the schema. +- Do not write SQL. +- Use only relations, columns, and join paths present in the schema/context summary. +- Use the failure summary to avoid repeating the same mistake. +- If the question is only partially answerable, set `can_answer_fully` to false and explain the gap in `unsupported_requirements`. +- If the available data can no longer support any safe next step, return zero steps. + +Return JSON in the same shape as the initial planner response. + +User question: +{{ query }} + +Current plan: +{{ current_plan_json }} + +Failure summary: +{{ failure_summary }} + +Compact schema/context summary: +{{ schema_context_json }} diff --git a/app/prompts/query_writer.j2 b/app/prompts/query_writer.j2 new file mode 100644 index 0000000..affb036 --- /dev/null +++ b/app/prompts/query_writer.j2 @@ -0,0 +1,47 @@ +You are the query writer in a bounded analytics workflow. + +You receive: +- the user's original question +- one current plan step +- the compact schema/context summary +- prior successful step outputs only when the current step depends on them +- optional error context if this is a retry + +Your job: +- generate exactly one DuckDB SQL query for the current step +- include a short explanation + +Rules: +- Return only valid JSON matching the schema. +- Write exactly one SQL statement in `sql`. +- Stay aligned to the current step only. +- Do not replan the workflow. +- Do not answer the user's question. +- Use only relations and exact columns present in the schema/context summary. +- If the step depends on prior outputs, use only the provided output aliases from `prior_outputs_json`. +- Do not invent columns, joins, or filters. +- Do not generate multiple query options. + +Return JSON in this shape: +{ + "step_id": 1, + "sql": "SELECT ...", + "explanation": "string" +} + +Original question: +{{ query }} + +Current step: +{{ step_json }} + +Compact schema/context summary: +{{ schema_context_json }} + +Prior successful step outputs: +{{ prior_outputs_json }} +{% if error_context %} + +Execution error context for retry: +{{ error_context }} +{% endif %} diff --git a/tests/test_planner_query_writer.py b/tests/test_planner_query_writer.py new file mode 100644 index 0000000..85e4e12 --- /dev/null +++ b/tests/test_planner_query_writer.py @@ -0,0 +1,197 @@ +"""Planner and query-writer behavior tests for the staged workflow implementation.""" + +from __future__ import annotations + +from app.agent.planner import _schema_subset_for_question, plan_analysis, replan_analysis +from app.agent.query_writer import write_step_query +from app.agent.state import create_initial_state +from app.data.registry import clear_source_registry, ingest_source +from app.data.semantic_model import clear_semantic_context_cache, get_semantic_context + + +def test_schema_subset_prefers_relevant_uploaded_relation(monkeypatch, tmp_path) -> None: + monkeypatch.setenv("REGISTRY_PATH", str(tmp_path / "planner_subset.duckdb")) + clear_source_registry() + clear_semantic_context_cache() + try: + ingest_source("inventory.csv", b"sku,stock\nA1,10\nB2,3\n") + invoices = ingest_source("invoices.csv", b"invoice_id,invoice_amount,status\ni1,100,paid\ni2,250,due\n") + ingest_source("campaigns.csv", b"campaign,spend\nspring,1200\nsummer,950\n") + + manifest = get_semantic_context().schema_manifest + subset = _schema_subset_for_question(manifest, "Which invoice amount is highest?") + finally: + clear_source_registry() + clear_semantic_context_cache() + + assert any(relation["name"] == invoices.primaryRelationName for relation in subset["relations"]) + + +def test_plan_analysis_stores_full_non_sql_plan(monkeypatch) -> None: + class FakePlannerLLM: + def generate_json(self, prompt: str, schema=None): # noqa: ANN001, ARG002 + assert "Do not write SQL" in prompt + return { + "objective": "Answer the question with two bounded steps.", + "can_answer_fully": True, + "unsupported_requirements": [], + "steps": [ + { + "id": 1, + "purpose": "Summarize velocity by owner.", + "depends_on": [], + "output_alias": "velocity_by_owner", + "relations": ["pipeline_source_1234"], + "required_columns": ["pipeline_source_1234.owner", "pipeline_source_1234.pipeline_velocity_days"], + "expected_output": "A grouped table by owner.", + "allow_empty_result": False, + }, + { + "id": 2, + "purpose": "Identify the slowest owners from the summary.", + "depends_on": [1], + "output_alias": "slowest_owners", + "relations": ["velocity_by_owner"], + "required_columns": ["velocity_by_owner.owner", "velocity_by_owner.avg_velocity_days"], + "expected_output": "A ranked subset for the final answer.", + "allow_empty_result": False, + }, + ], + "max_steps": 3, + "metric": "pipeline_velocity_days", + "metric_direction": "lower_is_better", + } + + monkeypatch.setattr("app.agent.planner.get_llm_client", lambda: FakePlannerLLM()) + + state = create_initial_state("Why is velocity worse for some owners?") + state["dataset_context"] = { + "reference_date": "2026-04-10", + "source": "source_registry", + "dialect": "duckdb", + "relations": [ + { + "name": "pipeline_source_1234", + "source_id": "source_1234", + "source_name": "pipeline.csv", + "is_primary": True, + "row_count": 20, + "grain": "One row per opportunity", + "identifier_columns": ["record_id"], + "time_columns": [], + "measure_columns": ["pipeline_velocity_days"], + "dimension_columns": ["owner"], + "join_keys": [], + "semantic_mappings": [], + "columns": [ + {"name": "owner", "dtype": "VARCHAR", "type_family": "string", "nullable": False, "semantic_hints": ["owner"]}, + { + "name": "pipeline_velocity_days", + "dtype": "DOUBLE", + "type_family": "number", + "nullable": True, + "semantic_hints": ["pipeline velocity"], + }, + ], + } + ], + } + + state = plan_analysis(state) + + assert state["workflow_status"] == "planned" + assert state["current_plan"] is not None + assert state["current_plan"]["steps"][0]["output_alias"] == "velocity_by_owner" + assert "sql" not in state["current_plan"]["steps"][0] + + +def test_plan_analysis_preserves_unsupported_requirements(monkeypatch) -> None: + class FakePlannerLLM: + def generate_json(self, prompt: str, schema=None): # noqa: ANN001, ARG002 + return { + "objective": "Answer the supported part of the question.", + "can_answer_fully": False, + "unsupported_requirements": [ + { + "type": "relationship", + "description": "A relationship between customers and invoices is not available.", + "relation": "customers_source_1234", + } + ], + "steps": [], + "max_steps": 3, + "metric": "", + "metric_direction": "", + } + + monkeypatch.setattr("app.agent.planner.get_llm_client", lambda: FakePlannerLLM()) + + state = create_initial_state("Which customers have the highest invoice amount?") + state["dataset_context"] = {"reference_date": "", "source": "", "dialect": "duckdb", "relations": []} + state = plan_analysis(state) + + assert state["current_plan"]["can_answer_fully"] is False + assert state["current_plan"]["unsupported_requirements"][0]["type"] == "relationship" + + +def test_query_writer_emits_one_query_for_current_step(monkeypatch) -> None: + class FakeQueryWriterLLM: + def generate_json(self, prompt: str, schema=None): # noqa: ANN001, ARG002 + assert "exactly one DuckDB SQL query" in prompt + return { + "step_id": 1, + "sql": "SELECT owner, AVG(pipeline_velocity_days) AS avg_velocity_days FROM pipeline_source_1234 GROUP BY owner", + "explanation": "Aggregates velocity by owner for the first step.", + } + + monkeypatch.setattr("app.agent.query_writer.get_llm_client", lambda: FakeQueryWriterLLM()) + + state = create_initial_state("Why is velocity worse for some owners?") + state["schema_context_summary"] = {"reference_date": "", "source": "", "dialect": "duckdb", "relations": []} + state["current_plan"] = { + "steps": [ + { + "id": 1, + "purpose": "Summarize velocity by owner.", + "depends_on": [], + "output_alias": "velocity_by_owner", + "relations": ["pipeline_source_1234"], + "required_columns": ["pipeline_source_1234.owner", "pipeline_source_1234.pipeline_velocity_days"], + "expected_output": "A grouped table by owner.", + "allow_empty_result": False, + } + ] + } + + state = write_step_query(state) + + assert state["generated_query"]["sql"].startswith("SELECT owner") + assert state["step_queries"]["1"] == [state["generated_query"]["sql"]] + + +def test_replan_prompt_includes_failure_summary(monkeypatch) -> None: + captured: dict[str, str] = {} + + class FakePlannerLLM: + def generate_json(self, prompt: str, schema=None): # noqa: ANN001, ARG002 + captured["prompt"] = prompt + return { + "objective": "Try a safer fallback plan.", + "can_answer_fully": False, + "unsupported_requirements": [], + "steps": [], + "max_steps": 3, + "metric": "", + "metric_direction": "", + } + + monkeypatch.setattr("app.agent.planner.get_llm_client", lambda: FakePlannerLLM()) + + state = create_initial_state("Why is velocity worse for some owners?") + state["dataset_context"] = {"reference_date": "", "source": "", "dialect": "duckdb", "relations": []} + state["current_plan"] = {"objective": "Old plan", "steps": []} + state["failure_summary"] = "Required column not present in schema/context." + + replan_analysis(state) + + assert "Required column not present in schema/context." in captured["prompt"] From c028deef84834de0371e0a1e03db06a459a4c483 Mon Sep 17 00:00:00 2001 From: Saransh Kumar Date: Fri, 10 Apr 2026 22:33:17 -0400 Subject: [PATCH 4/8] Add step execution and workflow orchestration --- app/agent/analysis.py | 118 +++++++++++++++++- app/agent/executor.py | 230 ++++++++++++++++++++++++++++++++++- app/agent/graph.py | 215 ++++++++++++++++++++++++++++++-- app/agent/state.py | 2 + tests/test_executor_graph.py | 209 +++++++++++++++++++++++++++++++ 5 files changed, 755 insertions(+), 19 deletions(-) create mode 100644 tests/test_executor_graph.py diff --git a/app/agent/analysis.py b/app/agent/analysis.py index c248212..1ade5aa 100644 --- a/app/agent/analysis.py +++ b/app/agent/analysis.py @@ -1,17 +1,125 @@ -"""Analyzer entrypoints for the staged analytics runtime implementation.""" +"""Temporary analyzer runtime for the staged workflow implementation.""" from __future__ import annotations from typing import Any -from app.agent._compat import raise_not_implemented -from app.llm import get_llm_client +from app.schemas import AnalyzerDecision def analyze_workflow(state: dict[str, Any]) -> dict[str, Any]: """Produce the final analyzer decision for the workflow run.""" - raise_not_implemented("Analyzer runtime") + plan = state.get("current_plan") or {} + successful_steps = [step for step in state.get("executed_steps") or [] if step.get("status") == "success"] + unsupported = plan.get("unsupported_requirements") or [] + if state.get("workflow_status") == "best_effort_ready": + final_answer = state.get("final_answer", "").strip() + decision = AnalyzerDecision( + decision="final_answer", + summary="Returning the bounded best-effort answer.", + key_findings=[], + important_metrics=[], + caveats=[state.get("failure_summary", "")] if state.get("failure_summary") else [], + final_answer=final_answer, + failure_summary="", + ) + state["analyzer_result"] = decision.model_dump() + state["analysis"] = final_answer + state["workflow_status"] = "complete" + return state -__all__ = ["analyze_workflow", "get_llm_client"] + if not plan.get("steps") and unsupported: + caveats = [item.get("description", "") for item in unsupported if item.get("description")] + final_answer = "\n".join( + [ + "## Summary", + "The available uploaded schema/context does not fully support this question.", + *(f"- {item}" for item in caveats), + ] + ).strip() + decision = AnalyzerDecision( + decision="final_answer", + summary="The planner found unsupported requirements before execution.", + key_findings=[], + important_metrics=[], + caveats=caveats, + final_answer=final_answer, + failure_summary="", + ) + state["analyzer_result"] = decision.model_dump() + state["analysis"] = final_answer + state["final_answer"] = final_answer + state["workflow_status"] = "complete" + return state + + if successful_steps: + last_success = successful_steps[-1] + artifact = last_success.get("artifact") or {} + preview_rows = artifact.get("preview_rows") or [] + preview_line = "" + if preview_rows: + preview_line = f"Preview rows are available from {artifact.get('alias', last_success.get('output_alias', 'the final output'))}." + final_answer = "\n".join( + [ + "## Summary", + f"The workflow completed {len(successful_steps)} successful step(s).", + f"The final output alias is {artifact.get('alias', last_success.get('output_alias', 'final_output'))}.", + preview_line, + ] + ).strip() + decision = AnalyzerDecision( + decision="final_answer", + summary="The workflow produced a final output ready for review.", + key_findings=[f"{artifact.get('row_count', 0)} row(s) returned by the final step."], + important_metrics=[], + caveats=[state.get("failure_summary", "")] if state.get("failure_summary") else [], + final_answer=final_answer, + failure_summary="", + ) + state["analyzer_result"] = decision.model_dump() + state["analysis"] = final_answer + state["final_answer"] = final_answer + state["workflow_status"] = "complete" + return state + + if int(state.get("replan_count", 0) or 0) < 1 and state.get("failure_summary"): + decision = AnalyzerDecision( + decision="replan", + summary="The collected outputs are not sufficient yet.", + key_findings=[], + important_metrics=[], + caveats=[], + final_answer="", + failure_summary=state["failure_summary"], + ) + state["analyzer_result"] = decision.model_dump() + state["workflow_status"] = "needs_replan" + return state + + fallback = state.get("failure_summary") or "The workflow could not produce a usable final output." + final_answer = "\n".join( + [ + "## Best-effort answer", + "The workflow could not complete all planned steps.", + f"- {fallback}", + ] + ).strip() + decision = AnalyzerDecision( + decision="final_answer", + summary="Returning the best-effort answer after bounded retries.", + key_findings=[], + important_metrics=[], + caveats=[fallback], + final_answer=final_answer, + failure_summary="", + ) + state["analyzer_result"] = decision.model_dump() + state["analysis"] = final_answer + state["final_answer"] = final_answer + state["workflow_status"] = "complete" + return state + + +__all__ = ["analyze_workflow"] diff --git a/app/agent/executor.py b/app/agent/executor.py index 80f13ad..371026b 100644 --- a/app/agent/executor.py +++ b/app/agent/executor.py @@ -1,19 +1,241 @@ -"""Executor entrypoints for the staged analytics runtime implementation.""" +"""Executor runtime for step-by-step SQL execution.""" from __future__ import annotations from typing import Any -from app.agent._compat import raise_not_implemented +import pandas as pd + +from app.schemas import ArtifactSummary, ExecutedStep, StepFailureRecord +from app.data.semantic_model import new_duckdb_connection + + +def _summarize_artifact(alias: str, frame: pd.DataFrame) -> ArtifactSummary: + preview_rows = frame.head(5).where(pd.notnull(frame), None).to_dict(orient="records") + return ArtifactSummary( + alias=alias, + artifact_type="table", + row_count=int(len(frame)), + columns=list(frame.columns), + preview_rows=preview_rows, + summary={}, + ) + + +def _register_stored_outputs(conn, state: dict[str, Any]) -> None: # noqa: ANN001 + for alias, value in (state.get("stored_outputs") or {}).items(): + if isinstance(value, pd.DataFrame): + conn.register(alias, value) + + +def _current_step(state: dict[str, Any]) -> dict[str, Any]: + plan = state.get("current_plan") or {} + steps = list(plan.get("steps") or []) + step_index = int(state.get("current_step_index", 0) or 0) + if step_index < 0 or step_index >= len(steps): + raise ValueError(f"Current step index {step_index} is out of range for the active plan.") + return steps[step_index] + + +def _record_failure(state: dict[str, Any], *, step: dict[str, Any], attempt: int, error: str, sql: str) -> None: + failure = StepFailureRecord( + step_id=int(step["id"]), + attempt=attempt, + error=error, + query=sql, + details={"output_alias": step["output_alias"]}, + ) + state.setdefault("failure_history", {}).setdefault(str(step["id"]), []).append(failure.model_dump()) + + +def _record_error( + state: dict[str, Any], + *, + step_name: str, + message: str, + recoverable: bool, + details: dict[str, Any], +) -> None: + state.setdefault("errors", []).append( + { + "step": step_name, + "message": message, + "recoverable": recoverable, + "details": details, + } + ) + + +def _failure_summary(step: dict[str, Any], error: str) -> str: + relations = ", ".join(step.get("relations") or []) or "the active relations" + return f"Execution repeatedly failed for step {step['id']} against {relations}: {error}" def execute_current_step(state: dict[str, Any]) -> dict[str, Any]: """Execute the query for the current workflow step.""" - raise_not_implemented("Step execution runtime") + step = _current_step(state) + generated_query = state.get("generated_query") or {} + sql = str(generated_query.get("sql") or "").strip() + if not sql: + raise ValueError("No generated SQL is available for the current step.") + + attempt = int((state.get("retry_counts") or {}).get(str(step["id"]), 0) or 0) + 1 + conn = new_duckdb_connection(state.get("dataset_context")) + try: + _register_stored_outputs(conn, state) + frame = conn.execute(sql).fetchdf() + except Exception as exc: + message = str(exc) + executed = ExecutedStep( + id=str(step["id"]), + kind="sql", + purpose=step["purpose"], + code=sql, + output_alias=step["output_alias"], + attempt=attempt, + status="failed", + error=message, + ) + state.setdefault("executed_steps", []).append(executed.model_dump()) + _record_failure(state, step=step, attempt=attempt, error=message, sql=sql) + + prior_retries = int((state.get("retry_counts") or {}).get(str(step["id"]), 0) or 0) + if prior_retries < 1: + state.setdefault("retry_counts", {})[str(step["id"])] = prior_retries + 1 + _record_error( + state, + step_name="executor_node", + message=message, + recoverable=True, + details={"step_id": step["id"], "attempt": attempt}, + ) + state["workflow_status"] = "retry_same_step" + elif int(state.get("replan_count", 0) or 0) < 1: + state["failure_summary"] = _failure_summary(step, message) + _record_error( + state, + step_name="executor_node", + message=message, + recoverable=True, + details={"step_id": step["id"], "attempt": attempt, "action": "replan"}, + ) + state["workflow_status"] = "needs_replan" + else: + state["failure_summary"] = _failure_summary(step, message) + _record_error( + state, + step_name="executor_node", + message=message, + recoverable=False, + details={"step_id": step["id"], "attempt": attempt, "action": "best_effort"}, + ) + state["workflow_status"] = "best_effort" + + state["generated_query"] = None + return state + finally: + conn.close() + + artifact = _summarize_artifact(step["output_alias"], frame) + if artifact.row_count == 0 and not bool(step.get("allow_empty_result", False)): + message = "Step returned an empty result set." + executed = ExecutedStep( + id=str(step["id"]), + kind="sql", + purpose=step["purpose"], + code=sql, + output_alias=step["output_alias"], + attempt=attempt, + status="failed", + error=message, + ) + state.setdefault("executed_steps", []).append(executed.model_dump()) + _record_failure(state, step=step, attempt=attempt, error=message, sql=sql) + + prior_retries = int((state.get("retry_counts") or {}).get(str(step["id"]), 0) or 0) + if prior_retries < 1: + state.setdefault("retry_counts", {})[str(step["id"])] = prior_retries + 1 + _record_error( + state, + step_name="executor_node", + message=message, + recoverable=True, + details={"step_id": step["id"], "attempt": attempt}, + ) + state["workflow_status"] = "retry_same_step" + elif int(state.get("replan_count", 0) or 0) < 1: + state["failure_summary"] = _failure_summary(step, message) + _record_error( + state, + step_name="executor_node", + message=message, + recoverable=True, + details={"step_id": step["id"], "attempt": attempt, "action": "replan"}, + ) + state["workflow_status"] = "needs_replan" + else: + state["failure_summary"] = _failure_summary(step, message) + _record_error( + state, + step_name="executor_node", + message=message, + recoverable=False, + details={"step_id": step["id"], "attempt": attempt, "action": "best_effort"}, + ) + state["workflow_status"] = "best_effort" + + state["generated_query"] = None + return state + + state.setdefault("stored_outputs", {})[step["output_alias"]] = frame + executed = ExecutedStep( + id=str(step["id"]), + kind="sql", + purpose=step["purpose"], + code=sql, + output_alias=step["output_alias"], + attempt=attempt, + status="success", + artifact=artifact, + ) + state.setdefault("executed_steps", []).append(executed.model_dump()) + state["generated_query"] = None + + plan = state.get("current_plan") or {} + steps = list(plan.get("steps") or []) + step_index = int(state.get("current_step_index", 0) or 0) + if step_index + 1 < len(steps): + state["current_step_index"] = step_index + 1 + state["workflow_status"] = "plan_ready" + else: + state["workflow_status"] = "ready_for_analysis" + return state def build_best_effort_state(state: dict[str, Any]) -> dict[str, Any]: """Populate the best-effort answer path after retry limits are exhausted.""" - raise_not_implemented("Best-effort execution fallback") + successful_steps = [step for step in state.get("executed_steps") or [] if step.get("status") == "success"] + answered_parts: list[str] = [] + if successful_steps: + last_success = successful_steps[-1] + artifact = last_success.get("artifact") or {} + answered_parts.append( + f"Captured {artifact.get('row_count', 0)} row(s) in {artifact.get('alias', last_success.get('output_alias', 'the final output'))}." + ) + + unanswered = state.get("failure_summary") or "The workflow could not complete every planned step." + lines = [ + "## Best-effort answer", + "", + "Answered parts:", + *(f"- {item}" for item in answered_parts or ["- No completed step produced a reusable final output."]), + "", + "Could not answer completely:", + f"- {unanswered}", + ] + state["final_answer"] = "\n".join(lines).strip() + state["analysis"] = state["final_answer"] + state["workflow_status"] = "best_effort_ready" + return state diff --git a/app/agent/graph.py b/app/agent/graph.py index 6011092..a5a2afe 100644 --- a/app/agent/graph.py +++ b/app/agent/graph.py @@ -1,55 +1,250 @@ -"""Workflow entrypoints for the staged analytics runtime implementation.""" +"""LangGraph orchestration for the schema-grounded analytics workflow.""" from __future__ import annotations +from functools import lru_cache from typing import Any -from app.agent._compat import raise_not_implemented +from langgraph.graph import END, START, StateGraph + +from app.agent.analysis import analyze_workflow +from app.agent.executor import build_best_effort_state, execute_current_step +from app.agent.planner import plan_analysis, replan_analysis +from app.agent.query_writer import write_step_query +from app.agent.state import AnalysisState, create_initial_state +from app.data.semantic_model import get_semantic_context + + +def _append_trace(state: dict[str, Any], step: str, status: str, details: dict[str, Any] | None = None) -> None: + state.setdefault("trace", []).append({"step": step, "status": status, "details": details or {}}) + + +def _append_error( + state: dict[str, Any], + *, + step: str, + message: str, + recoverable: bool, + details: dict[str, Any] | None = None, +) -> None: + state.setdefault("errors", []).append( + { + "step": step, + "message": message, + "recoverable": recoverable, + "details": details or {}, + } + ) def run_analysis(query: str, source_ids: list[str] | None = None) -> dict[str, Any]: """Compatibility entrypoint used by the API service layer.""" - raise_not_implemented("End-to-end analysis graph") + workflow = build_graph() + return workflow.invoke(create_initial_state(query, source_ids=source_ids)) def load_schema_context_node(state: dict[str, Any]) -> dict[str, Any]: """Load schema context into workflow state.""" - raise_not_implemented("Schema context graph node") + step_name = "load_schema_context_node" + _append_trace(state, step_name, "started", {}) + context = get_semantic_context(state.get("source_ids")) + state["dataset_context"] = context.schema_manifest + _append_trace( + state, + step_name, + "completed", + { + "reference_date": context.reference_date, + "relations": [relation["name"] for relation in context.schema_manifest.get("relations", [])], + }, + ) + state["workflow_status"] = "schema_ready" + return state def planner_node(state: dict[str, Any]) -> dict[str, Any]: """Create the full ordered plan for the request.""" - raise_not_implemented("Planner graph node") + step_name = "planner_node" + _append_trace(state, step_name, "started", {"replan_count": state.get("replan_count", 0)}) + try: + state = plan_analysis(state) + except Exception as exc: + message = str(exc) + _append_error(state, step=step_name, message=message, recoverable=False) + _append_trace(state, step_name, "failed", {"message": message}) + state["failure_summary"] = message + state["workflow_status"] = "best_effort" + return state + + steps = list((state.get("current_plan") or {}).get("steps") or []) + if steps: + _append_trace(state, step_name, "completed", {"step_count": len(steps)}) + state["workflow_status"] = "plan_ready" + else: + _append_trace(state, step_name, "completed", {"step_count": 0}) + state["workflow_status"] = "ready_for_analysis" + return state def query_writer_node(state: dict[str, Any]) -> dict[str, Any]: """Generate exactly one query for the current step.""" - raise_not_implemented("Query writer graph node") + step_name = "query_writer_node" + _append_trace(state, step_name, "started", {"current_step_index": state.get("current_step_index", 0)}) + try: + state = write_step_query(state) + except Exception as exc: + message = str(exc) + _append_error(state, step=step_name, message=message, recoverable=False) + _append_trace(state, step_name, "failed", {"message": message}) + state["failure_summary"] = message + state["workflow_status"] = "best_effort" + return state + + generated_query = state.get("generated_query") or {} + _append_trace( + state, + step_name, + "completed", + {"step_id": generated_query.get("step_id"), "query_length": len(generated_query.get("sql", ""))}, + ) + return state def executor_node(state: dict[str, Any]) -> dict[str, Any]: """Execute the current step and store any successful output.""" - raise_not_implemented("Executor graph node") + step_name = "executor_node" + current_step_index = state.get("current_step_index", 0) + _append_trace(state, step_name, "started", {"current_step_index": current_step_index}) + try: + state = execute_current_step(state) + except Exception as exc: + message = str(exc) + _append_error(state, step=step_name, message=message, recoverable=False) + _append_trace(state, step_name, "failed", {"message": message}) + state["failure_summary"] = message + state["workflow_status"] = "best_effort" + return state + + _append_trace(state, step_name, "completed", {"workflow_status": state.get("workflow_status", "")}) + return state def analyzer_node(state: dict[str, Any]) -> dict[str, Any]: """Produce the final answer or request a replan.""" - raise_not_implemented("Analyzer graph node") + step_name = "analyzer_node" + _append_trace(state, step_name, "started", {"workflow_status": state.get("workflow_status", "")}) + try: + state = analyze_workflow(state) + except Exception as exc: + message = str(exc) + _append_error(state, step=step_name, message=message, recoverable=False) + _append_trace(state, step_name, "failed", {"message": message}) + state["failure_summary"] = message + state["workflow_status"] = "best_effort" + return state + + decision = (state.get("analyzer_result") or {}).get("decision", "") + _append_trace(state, step_name, "completed", {"decision": decision}) + return state def replan_node(state: dict[str, Any]) -> dict[str, Any]: """Request one bounded replan after analyzer or execution failure.""" - raise_not_implemented("Replan graph node") + step_name = "replan_node" + _append_trace(state, step_name, "started", {"failure_summary": state.get("failure_summary", "")}) + try: + state = replan_analysis(state) + except Exception as exc: + message = str(exc) + _append_error(state, step=step_name, message=message, recoverable=False) + _append_trace(state, step_name, "failed", {"message": message}) + state["failure_summary"] = message + state["workflow_status"] = "best_effort" + return state + + state["current_step_index"] = 0 + state["generated_query"] = None + state["stored_outputs"] = {} + state["workflow_status"] = "plan_ready" if (state.get("current_plan") or {}).get("steps") else "ready_for_analysis" + _append_trace(state, step_name, "completed", {"replan_count": state.get("replan_count", 0)}) + return state def best_effort_node(state: dict[str, Any]) -> dict[str, Any]: """Return the final best-effort answer when retry limits are exhausted.""" - raise_not_implemented("Best-effort graph node") + step_name = "best_effort_node" + _append_trace(state, step_name, "started", {"failure_summary": state.get("failure_summary", "")}) + state = build_best_effort_state(state) + _append_trace(state, step_name, "completed", {"workflow_status": state.get("workflow_status", "")}) + state = analyze_workflow(state) + return state + + +def _route_after_planner(state: dict[str, Any]) -> str: + status = state.get("workflow_status") + if status == "plan_ready": + return "query_writer_node" + if status == "best_effort": + return "best_effort_node" + return "analyzer_node" + + +def _route_after_executor(state: dict[str, Any]) -> str: + status = state.get("workflow_status") + if status in {"plan_ready", "retry_same_step"}: + return "query_writer_node" + if status == "needs_replan": + return "replan_node" + if status == "best_effort": + return "best_effort_node" + return "analyzer_node" + + +def _route_after_analyzer(state: dict[str, Any]) -> str: + status = state.get("workflow_status") + if status == "needs_replan": + return "replan_node" + if status == "best_effort": + return "best_effort_node" + return END + + +def _route_after_replan(state: dict[str, Any]) -> str: + status = state.get("workflow_status") + if status == "plan_ready": + return "query_writer_node" + if status == "best_effort": + return "best_effort_node" + return "analyzer_node" + + +@lru_cache(maxsize=1) +def build_graph(): + """Compile and cache the analytics workflow graph.""" + + graph = StateGraph(AnalysisState) + graph.add_node("load_schema_context_node", load_schema_context_node) + graph.add_node("planner_node", planner_node) + graph.add_node("query_writer_node", query_writer_node) + graph.add_node("executor_node", executor_node) + graph.add_node("analyzer_node", analyzer_node) + graph.add_node("replan_node", replan_node) + graph.add_node("best_effort_node", best_effort_node) + + graph.add_edge(START, "load_schema_context_node") + graph.add_edge("load_schema_context_node", "planner_node") + graph.add_conditional_edges("planner_node", _route_after_planner) + graph.add_edge("query_writer_node", "executor_node") + graph.add_conditional_edges("executor_node", _route_after_executor) + graph.add_conditional_edges("analyzer_node", _route_after_analyzer) + graph.add_conditional_edges("replan_node", _route_after_replan) + graph.add_edge("best_effort_node", END) + return graph.compile() diff --git a/app/agent/state.py b/app/agent/state.py index 5135790..763e9a2 100644 --- a/app/agent/state.py +++ b/app/agent/state.py @@ -23,6 +23,7 @@ class AnalysisState(TypedDict, total=False): retry_counts: dict[str, int] replan_count: int analyzer_result: dict[str, Any] | None + analysis: str final_answer: str failure_summary: str workflow_status: str @@ -48,6 +49,7 @@ def create_initial_state(query: str, source_ids: list[str] | None = None) -> Ana retry_counts={}, replan_count=0, analyzer_result=None, + analysis="", final_answer="", failure_summary="", workflow_status="initializing", diff --git a/tests/test_executor_graph.py b/tests/test_executor_graph.py new file mode 100644 index 0000000..94e61ae --- /dev/null +++ b/tests/test_executor_graph.py @@ -0,0 +1,209 @@ +"""Execution and orchestration tests for the staged workflow control flow.""" + +from __future__ import annotations + +import pytest + +from app.agent.graph import run_analysis +from app.config import get_settings +from app.data.registry import clear_source_registry, ingest_source +from app.data.semantic_model import clear_semantic_context_cache + + +@pytest.fixture(autouse=True) +def isolated_registry(tmp_path, monkeypatch): + monkeypatch.setenv("REGISTRY_PATH", str(tmp_path / "executor_graph_registry.duckdb")) + get_settings.cache_clear() + clear_source_registry() + clear_semantic_context_cache() + yield + clear_source_registry() + clear_semantic_context_cache() + get_settings.cache_clear() + + +def test_run_analysis_retries_one_failed_step_then_succeeds(monkeypatch) -> None: + asset = ingest_source("pipeline.csv", b"owner,pipeline_velocity_days\nAda,10\nBen,14\n") + + class PlannerStub: + def generate_json(self, prompt: str, schema=None): # noqa: ANN001, ARG002 + return { + "objective": "Summarize velocity by owner.", + "can_answer_fully": True, + "unsupported_requirements": [], + "steps": [ + { + "id": 1, + "purpose": "Summarize velocity by owner.", + "depends_on": [], + "output_alias": "velocity_by_owner", + "relations": [asset.primaryRelationName], + "required_columns": [ + f"{asset.primaryRelationName}.owner", + f"{asset.primaryRelationName}.pipeline_velocity_days", + ], + "expected_output": "A grouped owner summary.", + "allow_empty_result": False, + } + ], + "max_steps": 3, + "metric": "pipeline_velocity_days", + "metric_direction": "lower_is_better", + } + + class QueryWriterStub: + def __init__(self) -> None: + self.calls = 0 + + def generate_json(self, prompt: str, schema=None): # noqa: ANN001, ARG002 + self.calls += 1 + if self.calls == 1: + return { + "step_id": 1, + "sql": f"SELECT sales_agent, AVG(pipeline_velocity_days) AS avg_velocity_days FROM {asset.primaryRelationName} GROUP BY sales_agent", + "explanation": "First attempt uses the wrong column name.", + } + return { + "step_id": 1, + "sql": f"SELECT owner, AVG(pipeline_velocity_days) AS avg_velocity_days FROM {asset.primaryRelationName} GROUP BY owner", + "explanation": "Retry uses the available owner column.", + } + + query_writer_stub = QueryWriterStub() + monkeypatch.setattr("app.agent.planner.get_llm_client", lambda: PlannerStub()) + monkeypatch.setattr("app.agent.query_writer.get_llm_client", lambda: query_writer_stub) + + state = run_analysis("Which owners are slowest?", source_ids=[asset.id]) + + assert query_writer_stub.calls == 2 + assert state["retry_counts"]["1"] == 1 + assert len(state["failure_history"]["1"]) == 1 + assert state["stored_outputs"]["velocity_by_owner"] is not None + assert state["workflow_status"] == "complete" + + +def test_run_analysis_replans_once_after_second_failure(monkeypatch) -> None: + asset = ingest_source("pipeline.csv", b"owner,pipeline_velocity_days\nAda,10\nBen,14\n") + + class PlannerStub: + def __init__(self) -> None: + self.calls = 0 + + def generate_json(self, prompt: str, schema=None): # noqa: ANN001, ARG002 + self.calls += 1 + if self.calls == 1: + return { + "objective": "Try an owner summary.", + "can_answer_fully": True, + "unsupported_requirements": [], + "steps": [ + { + "id": 1, + "purpose": "Broken owner summary.", + "depends_on": [], + "output_alias": "broken_summary", + "relations": [asset.primaryRelationName], + "required_columns": [f"{asset.primaryRelationName}.owner"], + "expected_output": "A broken output.", + "allow_empty_result": False, + } + ], + "max_steps": 3, + "metric": "", + "metric_direction": "", + } + return { + "objective": "Fallback to a simple row count.", + "can_answer_fully": True, + "unsupported_requirements": [], + "steps": [ + { + "id": 1, + "purpose": "Count available rows.", + "depends_on": [], + "output_alias": "row_count", + "relations": [asset.primaryRelationName], + "required_columns": [f"{asset.primaryRelationName}.record_id"], + "expected_output": "A row count for best-effort answering.", + "allow_empty_result": False, + } + ], + "max_steps": 3, + "metric": "", + "metric_direction": "", + } + + class QueryWriterStub: + def __init__(self) -> None: + self.calls = 0 + + def generate_json(self, prompt: str, schema=None): # noqa: ANN001, ARG002 + self.calls += 1 + if self.calls <= 2: + return { + "step_id": 1, + "sql": f"SELECT sales_agent FROM {asset.primaryRelationName}", + "explanation": "This query will fail twice.", + } + return { + "step_id": 1, + "sql": f"SELECT COUNT(*) AS total_rows FROM {asset.primaryRelationName}", + "explanation": "The replanned query succeeds.", + } + + planner_stub = PlannerStub() + query_writer_stub = QueryWriterStub() + monkeypatch.setattr("app.agent.planner.get_llm_client", lambda: planner_stub) + monkeypatch.setattr("app.agent.query_writer.get_llm_client", lambda: query_writer_stub) + + state = run_analysis("How much data is available?", source_ids=[asset.id]) + + assert planner_stub.calls == 2 + assert state["replan_count"] == 1 + assert state["stored_outputs"]["row_count"] is not None + assert state["workflow_status"] == "complete" + + +def test_run_analysis_returns_best_effort_after_replan_limit(monkeypatch) -> None: + asset = ingest_source("pipeline.csv", b"owner,pipeline_velocity_days\nAda,10\nBen,14\n") + + class PlannerStub: + def generate_json(self, prompt: str, schema=None): # noqa: ANN001, ARG002 + return { + "objective": "Keep trying the same unsupported summary.", + "can_answer_fully": True, + "unsupported_requirements": [], + "steps": [ + { + "id": 1, + "purpose": "Broken summary.", + "depends_on": [], + "output_alias": "broken_summary", + "relations": [asset.primaryRelationName], + "required_columns": [f"{asset.primaryRelationName}.owner"], + "expected_output": "A summary that keeps failing.", + "allow_empty_result": False, + } + ], + "max_steps": 3, + "metric": "", + "metric_direction": "", + } + + class QueryWriterStub: + def generate_json(self, prompt: str, schema=None): # noqa: ANN001, ARG002 + return { + "step_id": 1, + "sql": f"SELECT sales_agent FROM {asset.primaryRelationName}", + "explanation": "Always fails because sales_agent is unavailable.", + } + + monkeypatch.setattr("app.agent.planner.get_llm_client", lambda: PlannerStub()) + monkeypatch.setattr("app.agent.query_writer.get_llm_client", lambda: QueryWriterStub()) + + state = run_analysis("Which owners are slowest?", source_ids=[asset.id]) + + assert state["replan_count"] == 1 + assert state["workflow_status"] == "complete" + assert "## Best-effort answer" in state["analysis"] + assert state["failure_summary"] != "" From 4e84d9e34afcb81aabc5d45321b5db492caf2e8d Mon Sep 17 00:00:00 2001 From: Saransh Kumar Date: Fri, 10 Apr 2026 22:42:15 -0400 Subject: [PATCH 5/8] Integrate final analyzer and refresh docs --- README.md | 41 ++++---- app/agent/analysis.py | 143 +++++++++++++++++----------- app/prompts/analysis_final.j2 | 36 +++++++ tests/test_analysis_grounding.py | 78 ---------------- tests/test_analyzer.py | 95 +++++++++++++++++++ tests/test_intent.py | 100 ++++++++++++++------ tests/test_planner_schema.py | 155 +++++++++++-------------------- tests/test_tools.py | 79 +++++++++++----- 8 files changed, 421 insertions(+), 306 deletions(-) create mode 100644 app/prompts/analysis_final.j2 delete mode 100644 tests/test_analysis_grounding.py create mode 100644 tests/test_analyzer.py diff --git a/README.md b/README.md index 3c86b3e..4fdfef7 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,16 @@ # GTM Analytics Copilot -GTM Analytics Copilot is an agentic analytics MVP for GTM teams. It takes a business question like "Why did pipeline velocity drop this week?", loads schema context for the dataset, uses an LLM to plan the next SQL or pandas step, executes it over curated views, replans on failure, then runs a single analysis pass to produce a markdown narrative. The API returns that analysis plus trace and executed steps. +GTM Analytics Copilot is an agentic analytics MVP for GTM teams. It takes a business question like "Why did pipeline velocity drop this week?", loads a compact schema/context summary for the uploaded data, asks an LLM planner for the full ordered workflow, generates one SQL query at a time, executes each step over curated views, replans on bounded failure, then runs a final analyzer pass to produce the grounded answer. The API returns that analysis plus trace and executed steps. ## Why This Is Not "Chat With CSV" This project is intentionally constrained: -- It uses an LLM planner, but only over curated dataset views. +- It uses an LLM planner, but only over a compact schema/context summary derived from curated dataset views. - It does not let the model access arbitrary files or external systems. -- It executes exact SQL or restricted pandas steps instead of vague chain-of-thought. +- It executes exact SQL steps instead of vague chain-of-thought. - It replans using execution errors instead of silently falling back to rules. -- It does not run a separate deterministic verification layer; the narrative is grounded in executed step outputs. +- It does not run a separate deterministic verification layer; the final answer is grounded in schema/context plus executed step outputs. - It exposes every step, code snippet, and output preview in the UI. That makes it feel much closer to a production analytics copilot than a generic chatbot sitting on top of a CSV file. @@ -48,27 +48,29 @@ Out of scope: Backend: - FastAPI for API contracts -- LangGraph for the planner-executor-replanner loop -- DuckDB plus pandas over the provided CRM sales dataset +- LangGraph for the planner -> query writer -> executor -> analyzer loop +- DuckDB over the provided CRM sales dataset - OpenAI or Gemini for planning and final analysis text (see `LLM_PROVIDER`) Workflow: -1. Load curated views and a schema-only manifest (tables, columns, dtypes, row counts) -2. Ask the LLM for the next executable step (or finish) -3. Execute SQL (DuckDB) or restricted pandas -4. On failure or empty results, review and replan -5. Loop until the planner finishes or limits are hit -6. Ask the LLM once to turn the executed results into markdown analysis -7. Return `analysis`, `trace`, `executed_steps`, and `errors` +1. Load curated views and a schema/context manifest from the selected uploaded sources +2. Build a compact schema/context summary for the planner +3. Ask the LLM planner for the full ordered workflow in one shot +4. Ask the LLM query writer for exactly one SQL query for the current step +5. Execute that SQL in DuckDB and store any successful output for downstream steps +6. Retry the same step once on execution failure, then replan once with a failure summary if needed +7. Ask the analyzer once to return either the final answer, a replan decision, or a best-effort answer +8. Return `analysis`, `trace`, `executed_steps`, and `errors` Core modules: - `app/data/semantic_model.py`: curated dataset views and schema manifest - `app/llm/`: OpenAI or Gemini client -- `app/agent/planner.py`: compiled multi-step SQL plan and optional repair -- `app/agent/executor.py`: SQL execution engine (pandas helpers retained) -- `app/agent/analysis.py`: single-pass narrative from query + steps +- `app/agent/planner.py`: compact schema/context builder plus full-plan and replan generation +- `app/agent/query_writer.py`: one-step-at-a-time SQL generation +- `app/agent/executor.py`: SQL execution engine with stored intermediate outputs +- `app/agent/analysis.py`: final analyzer decision and grounded answer rendering - `app/agent/graph.py`: LangGraph orchestration - `app/api/routes.py`: Shared API surface (health, uploads, inspections, **stateless** `POST /analyze`) - `app/api/chat_routes.py`: **Primary product** chat API (`POST /chat`, conversation history) @@ -219,8 +221,8 @@ python -m pytest The test suite covers: -- mocked LLM planner and analysis contracts -- executor and review behavior +- mocked LLM planner, query-writer, and analyzer contracts +- executor and workflow-control behavior - API response shape ## Docker @@ -242,6 +244,7 @@ Then open: 2. Select "Why did pipeline velocity drop this week?" 3. Run the analysis and show the planner-executor loop spinner. 4. Open the executed-steps panel and show the generated SQL or pandas code. + This build generates SQL only. 5. Show the output preview for the most important step. 6. Expand the trace panel to show replanning-capable agent behavior. 7. Close on the markdown analysis and next best insights. @@ -259,6 +262,8 @@ Add screenshots here for: - The current build is scoped to pipeline analytics on the provided CRM dataset. - Churn analysis is out of scope until a real subscriptions or churn dataset is added. - The planner only sees registered views; execution is SQL or restricted pandas. +- The planner and query writer only see the compact schema/context summary built from registered views. +- Execution is SQL-only in the current workflow. - An API key is required for the configured `LLM_PROVIDER` (OpenAI or Gemini). ## Future Roadmap diff --git a/app/agent/analysis.py b/app/agent/analysis.py index 1ade5aa..ebc1258 100644 --- a/app/agent/analysis.py +++ b/app/agent/analysis.py @@ -1,36 +1,55 @@ -"""Temporary analyzer runtime for the staged workflow implementation.""" +"""Final analyzer runtime for the schema-grounded workflow.""" from __future__ import annotations +import json from typing import Any +from app.llm import get_llm_client +from app.prompts import render_prompt from app.schemas import AnalyzerDecision -def analyze_workflow(state: dict[str, Any]) -> dict[str, Any]: - """Produce the final analyzer decision for the workflow run.""" +def _fallback_best_effort_answer(state: dict[str, Any]) -> str: + successful_steps = [step for step in state.get("executed_steps") or [] if step.get("status") == "success"] + answered_parts: list[str] = [] + if successful_steps: + last_success = successful_steps[-1] + artifact = last_success.get("artifact") or {} + answered_parts.append( + f"Captured {artifact.get('row_count', 0)} row(s) in {artifact.get('alias', last_success.get('output_alias', 'the final output'))}." + ) + + unanswered = state.get("failure_summary") or "The workflow could not complete every planned step." + lines = [ + "## Best-effort answer", + "", + "Answered parts:", + *(f"- {item}" for item in answered_parts or ["- No completed step produced a reusable final output."]), + "", + "Could not answer completely:", + f"- {unanswered}", + ] + return "\n".join(lines).strip() + +def _fallback_final_answer(state: dict[str, Any]) -> AnalyzerDecision: plan = state.get("current_plan") or {} - successful_steps = [step for step in state.get("executed_steps") or [] if step.get("status") == "success"] unsupported = plan.get("unsupported_requirements") or [] + successful_steps = [step for step in state.get("executed_steps") or [] if step.get("status") == "success"] if state.get("workflow_status") == "best_effort_ready": - final_answer = state.get("final_answer", "").strip() - decision = AnalyzerDecision( + return AnalyzerDecision( decision="final_answer", summary="Returning the bounded best-effort answer.", key_findings=[], important_metrics=[], caveats=[state.get("failure_summary", "")] if state.get("failure_summary") else [], - final_answer=final_answer, + final_answer=state.get("final_answer") or _fallback_best_effort_answer(state), failure_summary="", ) - state["analyzer_result"] = decision.model_dump() - state["analysis"] = final_answer - state["workflow_status"] = "complete" - return state - if not plan.get("steps") and unsupported: + if unsupported and not successful_steps: caveats = [item.get("description", "") for item in unsupported if item.get("description")] final_answer = "\n".join( [ @@ -39,53 +58,37 @@ def analyze_workflow(state: dict[str, Any]) -> dict[str, Any]: *(f"- {item}" for item in caveats), ] ).strip() - decision = AnalyzerDecision( + return AnalyzerDecision( decision="final_answer", - summary="The planner found unsupported requirements before execution.", + summary="The available schema/context does not fully support the request.", key_findings=[], important_metrics=[], caveats=caveats, final_answer=final_answer, failure_summary="", ) - state["analyzer_result"] = decision.model_dump() - state["analysis"] = final_answer - state["final_answer"] = final_answer - state["workflow_status"] = "complete" - return state if successful_steps: last_success = successful_steps[-1] artifact = last_success.get("artifact") or {} - preview_rows = artifact.get("preview_rows") or [] - preview_line = "" - if preview_rows: - preview_line = f"Preview rows are available from {artifact.get('alias', last_success.get('output_alias', 'the final output'))}." - final_answer = "\n".join( - [ - "## Summary", - f"The workflow completed {len(successful_steps)} successful step(s).", - f"The final output alias is {artifact.get('alias', last_success.get('output_alias', 'final_output'))}.", - preview_line, - ] - ).strip() - decision = AnalyzerDecision( + return AnalyzerDecision( decision="final_answer", summary="The workflow produced a final output ready for review.", key_findings=[f"{artifact.get('row_count', 0)} row(s) returned by the final step."], important_metrics=[], caveats=[state.get("failure_summary", "")] if state.get("failure_summary") else [], - final_answer=final_answer, + final_answer="\n".join( + [ + "## Summary", + f"The final output alias is {artifact.get('alias', last_success.get('output_alias', 'final_output'))}.", + f"{artifact.get('row_count', 0)} row(s) were returned by the final executed step.", + ] + ).strip(), failure_summary="", ) - state["analyzer_result"] = decision.model_dump() - state["analysis"] = final_answer - state["final_answer"] = final_answer - state["workflow_status"] = "complete" - return state if int(state.get("replan_count", 0) or 0) < 1 and state.get("failure_summary"): - decision = AnalyzerDecision( + return AnalyzerDecision( decision="replan", summary="The collected outputs are not sufficient yet.", key_findings=[], @@ -94,32 +97,64 @@ def analyze_workflow(state: dict[str, Any]) -> dict[str, Any]: final_answer="", failure_summary=state["failure_summary"], ) - state["analyzer_result"] = decision.model_dump() - state["workflow_status"] = "needs_replan" - return state - fallback = state.get("failure_summary") or "The workflow could not produce a usable final output." - final_answer = "\n".join( - [ - "## Best-effort answer", - "The workflow could not complete all planned steps.", - f"- {fallback}", - ] - ).strip() - decision = AnalyzerDecision( + best_effort = _fallback_best_effort_answer(state) + return AnalyzerDecision( decision="final_answer", summary="Returning the best-effort answer after bounded retries.", key_findings=[], important_metrics=[], - caveats=[fallback], - final_answer=final_answer, + caveats=[state.get("failure_summary", "")] if state.get("failure_summary") else [], + final_answer=best_effort, failure_summary="", ) + + +def _build_analyzer_prompt(state: dict[str, Any]) -> str: + plan = state.get("current_plan") or {} + payload = { + "question": state["query"], + "workflow_status": state.get("workflow_status", ""), + "replan_count": state.get("replan_count", 0), + "failure_summary": state.get("failure_summary", ""), + "schema_context_summary": state.get("schema_context_summary") or {}, + "plan": plan, + "executed_steps": state.get("executed_steps") or [], + "errors": state.get("errors") or [], + "failure_history": state.get("failure_history") or {}, + } + return render_prompt( + "analysis_final.j2", + analyzer_input_json=json.dumps(payload, indent=2, default=str), + ) + + +def analyze_workflow(state: dict[str, Any]) -> dict[str, Any]: + """Produce the final analyzer decision for the workflow run.""" + + try: + result = get_llm_client().generate_json(_build_analyzer_prompt(state), schema=AnalyzerDecision) + decision = result if isinstance(result, AnalyzerDecision) else AnalyzerDecision.model_validate(result) + except Exception: + decision = _fallback_final_answer(state) + state["analyzer_result"] = decision.model_dump() + if decision.decision == "replan" and int(state.get("replan_count", 0) or 0) < 1: + state["workflow_status"] = "needs_replan" + state["failure_summary"] = decision.failure_summary or state.get("failure_summary", "") + return state + + final_answer = decision.final_answer or _fallback_final_answer(state).final_answer state["analysis"] = final_answer state["final_answer"] = final_answer state["workflow_status"] = "complete" return state -__all__ = ["analyze_workflow"] +def run_analysis_narrative(state: dict[str, Any]) -> dict[str, Any]: + """Compatibility wrapper retained for test and integration callers.""" + + return analyze_workflow(state) + + +__all__ = ["analyze_workflow", "get_llm_client", "run_analysis_narrative"] diff --git a/app/prompts/analysis_final.j2 b/app/prompts/analysis_final.j2 new file mode 100644 index 0000000..098ae48 --- /dev/null +++ b/app/prompts/analysis_final.j2 @@ -0,0 +1,36 @@ +You are the final analyzer in a bounded analytics workflow. + +You must use only: +- the original question +- the planner's full plan +- the schema/context summary derived from uploaded data +- executed step outputs +- execution metadata and failure history + +Your responsibilities: +- decide whether the question has been answered sufficiently +- provide the final answer when possible +- request one replan only when the outputs are incomplete and a replan is still allowed +- return a clear best-effort answer when the workflow has already exhausted retry/replan limits + +Rules: +- Return only valid JSON matching the schema. +- Ground every statement in the provided plan, schema/context summary, and executed outputs. +- Do not invent columns, joins, relationships, numbers, or business claims. +- If you choose `replan`, `failure_summary` must be specific and actionable. +- If the workflow is already in best-effort mode or `replan_count` is already 1, do not choose `replan`. +- When returning a best-effort final answer, clearly separate answered parts from unanswered parts. + +Return JSON in this shape: +{ + "decision": "final_answer" | "replan", + "summary": "string", + "key_findings": ["string"], + "important_metrics": [{"label": "string", "value": "string"}], + "caveats": ["string"], + "final_answer": "string", + "failure_summary": "string" +} + +Analyzer input: +{{ analyzer_input_json }} diff --git a/tests/test_analysis_grounding.py b/tests/test_analysis_grounding.py deleted file mode 100644 index 7135bea..0000000 --- a/tests/test_analysis_grounding.py +++ /dev/null @@ -1,78 +0,0 @@ -"""Tests for deterministic analysis evidence, approved claims, and rendering validation.""" - -from __future__ import annotations - -import pytest - -from app.agent.analysis_grounding import build_analysis_evidence, build_approved_claims, validate_rendered_analysis -from app.agent.state import create_initial_state -from app.schemas import AnalysisRenderResponse, ApprovedClaim, EvidenceValue - - -def test_build_approved_claims_marks_contradicted_premise() -> None: - state = create_initial_state("Why did pipeline velocity drop this week?") - state["metric"] = "avg_pipeline_velocity_days" - state["compiled_plan"] = {"metric_direction": "lower_is_better"} - state["executed_steps"] = [ - { - "id": "1", - "purpose": "Compare weekly metrics", - "status": "success", - "output_alias": "weekly_pipeline_metrics", - "artifact": { - "alias": "weekly_pipeline_metrics", - "columns": ["period", "avg_pipeline_velocity_days"], - "preview_rows": [ - {"period": "Previous Week", "avg_pipeline_velocity_days": 69.9423076923077}, - {"period": "Current Week", "avg_pipeline_velocity_days": 64.13291139240506}, - ], - }, - } - ] - - evidence = build_analysis_evidence(state) - claims, status = build_approved_claims(evidence) - - assert status == "contradicted_premise" - assert claims[0].kind == "premise_check" - assert "does not support a deterioration premise" in claims[0].statement - - -def test_validate_rendered_analysis_rejects_changed_entity_name() -> None: - claim = ApprovedClaim( - id="claim_manager", - kind="row_observation", - statement="For Celia Rouche, current_week_avg_velocity = 64.65.", - entities=["Celia Rouche"], - metrics=["current_week_avg_velocity"], - source_aliases=["regional_manager_velocity"], - values=[EvidenceValue(label="current_week_avg_velocity", value="64.65")], - ) - response = AnalysisRenderResponse( - answer_status="answered", - analysis_markdown="## Summary\nFor eCelia Rouche, current_week_avg_velocity = 64.65.", - used_claim_ids=["claim_manager"], - ) - - with pytest.raises(ValueError, match="changed an approved entity name"): - validate_rendered_analysis(response, [claim], expected_status="answered") - - -def test_validate_rendered_analysis_rejects_unapproved_numbers() -> None: - claim = ApprovedClaim( - id="claim_manager", - kind="row_observation", - statement="For Celia Rouche, current_week_avg_velocity = 64.65.", - entities=["Celia Rouche"], - metrics=["current_week_avg_velocity"], - source_aliases=["regional_manager_velocity"], - values=[EvidenceValue(label="current_week_avg_velocity", value="64.65")], - ) - response = AnalysisRenderResponse( - answer_status="answered", - analysis_markdown="## Summary\nFor Celia Rouche, current_week_avg_velocity = 60.", - used_claim_ids=["claim_manager"], - ) - - with pytest.raises(ValueError, match="introduced numbers not present"): - validate_rendered_analysis(response, [claim], expected_status="answered") diff --git a/tests/test_analyzer.py b/tests/test_analyzer.py new file mode 100644 index 0000000..79e745e --- /dev/null +++ b/tests/test_analyzer.py @@ -0,0 +1,95 @@ +"""Analyzer behavior tests for the final workflow interface.""" + +from __future__ import annotations + +from app.agent.analysis import analyze_workflow +from app.agent.state import create_initial_state + + +def test_analyzer_returns_final_answer_when_llm_succeeds(monkeypatch) -> None: + class FakeAnalyzerLLM: + def generate_json(self, prompt: str, schema=None): # noqa: ANN001, ARG002 + return { + "decision": "final_answer", + "summary": "The workflow produced a grounded answer.", + "key_findings": ["The final output contains 2 rows."], + "important_metrics": [{"label": "row_count", "value": "2"}], + "caveats": [], + "final_answer": "## Summary\nThe final output contains 2 rows.", + "failure_summary": "", + } + + monkeypatch.setattr("app.agent.analysis.get_llm_client", lambda: FakeAnalyzerLLM()) + + state = create_initial_state("What happened?") + state["workflow_status"] = "ready_for_analysis" + state["schema_context_summary"] = {"reference_date": "", "relations": []} + state["current_plan"] = {"objective": "Test", "steps": []} + state["executed_steps"] = [ + { + "id": "1", + "status": "success", + "purpose": "Summarize rows", + "output_alias": "final_output", + "artifact": {"alias": "final_output", "row_count": 2, "columns": ["value"], "preview_rows": [{"value": 1}], "summary": {}}, + } + ] + + state = analyze_workflow(state) + + assert state["workflow_status"] == "complete" + assert "2 rows" in state["analysis"] + + +def test_analyzer_requests_replan_when_outputs_are_incomplete(monkeypatch) -> None: + class FakeAnalyzerLLM: + def generate_json(self, prompt: str, schema=None): # noqa: ANN001, ARG002 + return { + "decision": "replan", + "summary": "The outputs do not answer the question yet.", + "key_findings": [], + "important_metrics": [], + "caveats": [], + "final_answer": "", + "failure_summary": "Final results answered only part of the user question.", + } + + monkeypatch.setattr("app.agent.analysis.get_llm_client", lambda: FakeAnalyzerLLM()) + + state = create_initial_state("What happened?") + state["workflow_status"] = "ready_for_analysis" + state["schema_context_summary"] = {"reference_date": "", "relations": []} + state["current_plan"] = {"objective": "Test", "steps": []} + + state = analyze_workflow(state) + + assert state["workflow_status"] == "needs_replan" + assert state["failure_summary"] == "Final results answered only part of the user question." + + +def test_analyzer_returns_best_effort_after_limits(monkeypatch) -> None: + class FakeAnalyzerLLM: + def generate_json(self, prompt: str, schema=None): # noqa: ANN001, ARG002 + return { + "decision": "final_answer", + "summary": "Returning the best-effort answer.", + "key_findings": [], + "important_metrics": [], + "caveats": ["Requested relationship was unavailable."], + "final_answer": "## Best-effort answer\nAnswered parts:\n- Captured 1 row.\n\nCould not answer completely:\n- Requested relationship was unavailable.", + "failure_summary": "", + } + + monkeypatch.setattr("app.agent.analysis.get_llm_client", lambda: FakeAnalyzerLLM()) + + state = create_initial_state("What happened?") + state["workflow_status"] = "best_effort_ready" + state["schema_context_summary"] = {"reference_date": "", "relations": []} + state["current_plan"] = {"objective": "Test", "steps": []} + state["final_answer"] = "## Best-effort answer\nAnswered parts:\n- Captured 1 row." + state["failure_summary"] = "Requested relationship was unavailable." + + state = analyze_workflow(state) + + assert state["workflow_status"] == "complete" + assert "## Best-effort answer" in state["analysis"] diff --git a/tests/test_intent.py b/tests/test_intent.py index db126b0..f078661 100644 --- a/tests/test_intent.py +++ b/tests/test_intent.py @@ -1,59 +1,103 @@ -"""Planner and analysis contract tests with mocked LLM responses.""" +"""Planner and analyzer contract tests with mocked LLM responses.""" + +from __future__ import annotations from app.agent.analysis import run_analysis_narrative -from app.agent.planner import plan_compiled_query +from app.agent.planner import plan_analysis from app.agent.state import create_initial_state class FakeLLM: - """Minimal stub for planner and analysis tests.""" + """Minimal stub for planner and analyzer tests.""" def generate_json(self, prompt: str, schema=None): # noqa: ANN001, ARG002 - if '"max_steps": 3' in prompt and "metric_direction" in prompt: + if '"max_steps": 3' in prompt and '"steps"' in prompt: return { - "objective": "Compare current and previous pipeline velocity.", - "plan": [ + "objective": "Compare current and previous pipeline velocity with one bounded step.", + "can_answer_fully": True, + "unsupported_requirements": [], + "steps": [ { "id": 1, - "purpose": "Compare current and previous pipeline velocity.", - "type": "sql", - "query": "SELECT 1 AS value", + "purpose": "Summarize the metric by period.", + "depends_on": [], "output_alias": "comparison_result", + "relations": ["opportunities_enriched"], + "required_columns": ["opportunities_enriched.pipeline_velocity_days"], + "expected_output": "A table with the grouped metric.", + "allow_empty_result": False, } ], "max_steps": 3, - "metric": "pipeline_velocity", + "metric": "pipeline_velocity_days", "metric_direction": "lower_is_better", } - if '"analysis_markdown": string' in prompt and "approved claims" in prompt.lower(): + if '"decision": "final_answer" | "replan"' in prompt: return { - "answer_status": "answered", - "analysis_markdown": "## Summary\nThe available evidence shows value = 1 for SMB.", - "used_claim_ids": ["claim_comparison_result_row_1"], + "decision": "final_answer", + "summary": "The workflow produced a usable final output.", + "key_findings": ["1 row was returned by the final step."], + "important_metrics": [{"label": "row_count", "value": "1"}], + "caveats": [], + "final_answer": "## Summary\nThe final step returned 1 row in comparison_result.", + "failure_summary": "", } return { - "answer_status": "insufficient_evidence", - "analysis_markdown": "The approved claims are insufficient to answer the question.", - "used_claim_ids": [], + "decision": "replan", + "summary": "The current outputs are incomplete.", + "key_findings": [], + "important_metrics": [], + "caveats": [], + "final_answer": "", + "failure_summary": "The collected outputs were incomplete.", } -def test_planner_returns_compiled_plan(monkeypatch) -> None: +def test_planner_returns_full_non_sql_plan(monkeypatch) -> None: monkeypatch.setattr("app.agent.planner.get_llm_client", lambda: FakeLLM()) state = create_initial_state("Why did pipeline velocity drop this week?") - state["dataset_context"] = {"reference_date": "2017-12-31", "views": [{"name": "opportunities_enriched"}]} - state = plan_compiled_query(state) - assert state["compiled_plan"] is not None - assert state["compiled_plan"]["plan"][0]["type"] == "sql" - assert state["compiled_plan"]["plan"][0]["query"] == "SELECT 1 AS value" - assert state["compiled_plan"]["plan"][0]["output_alias"] == "comparison_result" + state["dataset_context"] = { + "reference_date": "2017-12-31", + "source": "source_registry", + "dialect": "duckdb", + "relations": [ + { + "name": "opportunities_enriched", + "source_id": "source_1", + "source_name": "opportunities.csv", + "is_primary": True, + "row_count": 10, + "grain": "One row per opportunity", + "identifier_columns": ["record_id"], + "time_columns": [], + "measure_columns": ["pipeline_velocity_days"], + "dimension_columns": [], + "join_keys": [], + "semantic_mappings": [], + "columns": [ + { + "name": "pipeline_velocity_days", + "dtype": "DOUBLE", + "type_family": "number", + "nullable": True, + "semantic_hints": ["pipeline velocity"], + } + ], + } + ], + } + state = plan_analysis(state) + assert state["current_plan"] is not None + assert state["current_plan"]["steps"][0]["output_alias"] == "comparison_result" + assert "query" not in state["current_plan"]["steps"][0] def test_analysis_narrative_uses_llm(monkeypatch) -> None: monkeypatch.setattr("app.agent.analysis.get_llm_client", lambda: FakeLLM()) state = create_initial_state("Why did pipeline velocity drop this week?") - state["dataset_context"] = {"reference_date": "2017-12-31", "views": []} - state["compiled_plan"] = {"objective": "Test", "metric": "", "metric_direction": ""} + state["schema_context_summary"] = {"reference_date": "2017-12-31", "relations": []} + state["current_plan"] = {"objective": "Test", "metric": "", "metric_direction": "", "steps": []} + state["workflow_status"] = "ready_for_analysis" state["executed_steps"] = [ { "id": "step_1", @@ -70,5 +114,5 @@ def test_analysis_narrative_uses_llm(monkeypatch) -> None: } ] state = run_analysis_narrative(state) - assert "value = 1" in state["analysis"] - assert "SMB" in state["analysis"] + assert "comparison_result" in state["analysis"] + assert state["workflow_status"] == "complete" diff --git a/tests/test_planner_schema.py b/tests/test_planner_schema.py index 3659289..18cfff5 100644 --- a/tests/test_planner_schema.py +++ b/tests/test_planner_schema.py @@ -1,13 +1,15 @@ -"""Compiled plan schema and planner retry behavior.""" +"""Planner schema and compact context behavior.""" + +from __future__ import annotations import pytest -from app.agent.planner import plan_compiled_query +from app.agent.planner import build_compact_schema_context, plan_analysis from app.agent.state import create_initial_state from app.config import get_settings from app.data.registry import clear_source_registry, ingest_source from app.data.semantic_model import clear_semantic_context_cache, get_semantic_context -from app.schemas import CompiledPlan +from app.schemas import AnalysisPlan @pytest.fixture(autouse=True) @@ -22,16 +24,22 @@ def isolated_registry(tmp_path, monkeypatch): get_settings.cache_clear() -def test_compiled_plan_normalizes_max_steps() -> None: - plan = CompiledPlan.model_validate( +def test_analysis_plan_normalizes_max_steps() -> None: + plan = AnalysisPlan.model_validate( { - "objective": "Test", - "plan": [ + "objective": "Test the planner contract", + "can_answer_fully": True, + "unsupported_requirements": [], + "steps": [ { "id": 1, "purpose": "One step", - "type": "sql", - "query": "SELECT 1", + "depends_on": [], + "output_alias": "sample_output", + "relations": ["sample_relation"], + "required_columns": ["sample_relation.value"], + "expected_output": "One simple result.", + "allow_empty_result": False, } ], "max_steps": 1, @@ -42,50 +50,38 @@ def test_compiled_plan_normalizes_max_steps() -> None: assert plan.max_steps == 3 -def test_planner_retries_after_validation_error(monkeypatch) -> None: - good = { - "objective": "Segment counts", - "plan": [ - { - "id": 1, - "purpose": "Count by segment", - "type": "sql", - "query": "SELECT 1 AS value", - "output_alias": "counts", - } - ], - "max_steps": 3, - "metric": "", - "metric_direction": "", - } - bad = { - "objective": "Too many", - "plan": good["plan"] * 4, - "max_steps": 3, - "metric": "", - "metric_direction": "", - } - - class FlakyPlannerLLM: - def __init__(self) -> None: - self.calls = 0 - +def test_plan_analysis_stores_current_plan(monkeypatch) -> None: + class PlannerLLM: def generate_json(self, prompt: str, schema=None): # noqa: ANN001, ARG002 - self.calls += 1 - if self.calls == 1: - return bad - return good + return { + "objective": "Count by segment", + "can_answer_fully": True, + "unsupported_requirements": [], + "steps": [ + { + "id": 1, + "purpose": "Count by segment", + "depends_on": [], + "output_alias": "counts", + "relations": ["segments_source_1234"], + "required_columns": ["segments_source_1234.segment"], + "expected_output": "A grouped count table.", + "allow_empty_result": False, + } + ], + "max_steps": 3, + "metric": "", + "metric_direction": "", + } - stub = FlakyPlannerLLM() - monkeypatch.setattr("app.agent.planner.get_llm_client", lambda: stub) + monkeypatch.setattr("app.agent.planner.get_llm_client", lambda: PlannerLLM()) state = create_initial_state("Compare segments") - state["dataset_context"] = {"reference_date": "2017-12-31", "relations": [], "views": []} - state = plan_compiled_query(state) + state["dataset_context"] = {"reference_date": "2017-12-31", "source": "", "dialect": "duckdb", "relations": []} + state = plan_analysis(state) - assert stub.calls == 2 - assert state["compiled_plan"] is not None - assert len(state["compiled_plan"]["plan"]) == 1 + assert state["current_plan"] is not None + assert len(state["current_plan"]["steps"]) == 1 def test_semantic_context_exposes_normalized_manifest() -> None: @@ -100,60 +96,13 @@ def test_semantic_context_exposes_normalized_manifest() -> None: assert relation["grain"] -def test_planner_retries_after_sql_preflight_failure(monkeypatch) -> None: +def test_compact_schema_context_exposes_relevant_relation() -> None: asset = ingest_source("pipeline.csv", b"owner,pipeline_velocity_days\nAda,10\nBen,14\n") - relation_name = asset.primaryRelationName - bad = { - "objective": "Analyze by sales agent", - "plan": [ - { - "id": 1, - "purpose": "Break out velocity by agent", - "type": "sql", - "query": f"SELECT sales_agent, AVG(pipeline_velocity_days) AS avg_velocity_days FROM {relation_name} GROUP BY sales_agent", - "output_alias": "velocity_by_agent", - } - ], - "max_steps": 3, - "metric": "pipeline_velocity_days", - "metric_direction": "lower_is_better", - } - good = { - "objective": "Analyze by owner", - "plan": [ - { - "id": 1, - "purpose": "Break out velocity by owner", - "type": "sql", - "query": f"SELECT owner, AVG(pipeline_velocity_days) AS avg_velocity_days FROM {relation_name} GROUP BY owner", - "output_alias": "velocity_by_owner", - } - ], - "max_steps": 3, - "metric": "pipeline_velocity_days", - "metric_direction": "lower_is_better", - } - - class FlakyPlannerLLM: - def __init__(self) -> None: - self.calls = 0 - self.prompts: list[str] = [] + compact = build_compact_schema_context( + get_semantic_context([asset.id]).schema_manifest, + "Why did pipeline velocity change by owner?", + ) - def generate_json(self, prompt: str, schema=None): # noqa: ANN001, ARG002 - self.calls += 1 - self.prompts.append(prompt) - if self.calls == 1: - return bad - return good - - stub = FlakyPlannerLLM() - monkeypatch.setattr("app.agent.planner.get_llm_client", lambda: stub) - - state = create_initial_state("Why did pipeline velocity drop this week by sales agent?") - state["dataset_context"] = get_semantic_context([asset.id]).schema_manifest - state = plan_compiled_query(state) - - assert stub.calls == 2 - assert "failed SQL preflight validation" in stub.prompts[1] - assert state["compiled_plan"] is not None - assert "owner" in state["compiled_plan"]["plan"][0]["query"] + assert compact["relations"] + assert compact["relations"][0]["name"] == asset.primaryRelationName + assert any(column["name"] == "owner" for column in compact["relations"][0]["columns"]) diff --git a/tests/test_tools.py b/tests/test_tools.py index 9811fec..c3b3b5b 100644 --- a/tests/test_tools.py +++ b/tests/test_tools.py @@ -1,8 +1,10 @@ -"""Executor tests for compiled SQL plans.""" +"""Executor tests for the step-by-step SQL runtime.""" + +from __future__ import annotations import pytest -from app.agent.executor import execute_plan, execute_single_plan_step +from app.agent.executor import execute_current_step from app.agent.state import create_initial_state from app.config import get_settings from app.data.registry import clear_source_registry, ingest_source @@ -25,21 +27,28 @@ def test_execute_sql_step_returns_artifact_summary() -> None: asset = ingest_source("pipeline.csv", b"segment\nSMB\nEnterprise\nSMB\n") state = create_initial_state("Compare SMB vs Enterprise performance") state["dataset_context"] = get_semantic_context([asset.id]).schema_manifest - compiled_plan = { + state["current_plan"] = { "objective": "Segment counts", - "max_steps": 3, - "plan": [ + "steps": [ { "id": 1, "purpose": "Get one sample aggregation.", - "type": "sql", - "query": f"SELECT segment, COUNT(*) AS deals FROM {asset.primaryRelationName} GROUP BY segment ORDER BY deals DESC", "output_alias": "segment_counts", + "depends_on": [], + "relations": [asset.primaryRelationName], + "required_columns": [f"{asset.primaryRelationName}.segment"], + "expected_output": "A grouped segment count table.", + "allow_empty_result": False, } ], } - outcome = execute_plan(state, compiled_plan) - assert outcome["status"] == "success" + state["generated_query"] = { + "step_id": 1, + "sql": f"SELECT segment, COUNT(*) AS deals FROM {asset.primaryRelationName} GROUP BY segment ORDER BY deals DESC", + "explanation": "Counts rows by segment.", + } + outcome = execute_current_step(state) + assert outcome["workflow_status"] == "ready_for_analysis" last = state["executed_steps"][-1] assert last["status"] == "success" assert last["artifact"]["row_count"] > 0 @@ -50,35 +59,55 @@ def test_execute_plan_marks_empty_table_as_failed() -> None: asset = ingest_source("pipeline.csv", b"segment\nSMB\nEnterprise\n") state = create_initial_state("Why did pipeline velocity drop this week?") state["dataset_context"] = get_semantic_context([asset.id]).schema_manifest - compiled_plan = { + state["current_plan"] = { "objective": "Empty query", - "max_steps": 3, - "plan": [ + "steps": [ { "id": 1, "purpose": "Return no rows.", - "type": "sql", - "query": "SELECT 1 WHERE 1=0", "output_alias": "empty_result", + "depends_on": [], + "relations": [asset.primaryRelationName], + "required_columns": [f"{asset.primaryRelationName}.segment"], + "expected_output": "An intentionally empty result.", + "allow_empty_result": False, } ], } - outcome = execute_plan(state, compiled_plan) - assert outcome["status"] == "failed" + state["generated_query"] = { + "step_id": 1, + "sql": "SELECT 1 WHERE 1=0", + "explanation": "Returns no rows.", + } + outcome = execute_current_step(state) + assert outcome["workflow_status"] == "retry_same_step" assert state["executed_steps"][-1]["status"] == "failed" -def test_execute_single_plan_step_retry() -> None: +def test_execute_current_step_retry_attempt_is_recorded() -> None: asset = ingest_source("pipeline.csv", b"segment\nSMB\nEnterprise\n") state = create_initial_state("Test retry") state["dataset_context"] = get_semantic_context([asset.id]).schema_manifest - step = { - "id": 1, - "purpose": "Get one row.", - "type": "sql", - "query": "SELECT 1 AS value", - "output_alias": "r1", + state["current_plan"] = { + "steps": [ + { + "id": 1, + "purpose": "Get one row.", + "output_alias": "r1", + "depends_on": [], + "relations": [asset.primaryRelationName], + "required_columns": [], + "expected_output": "A single-row output.", + "allow_empty_result": False, + } + ] + } + state["retry_counts"]["1"] = 1 + state["generated_query"] = { + "step_id": 1, + "sql": "SELECT 1 AS value", + "explanation": "Returns one row.", } - out = execute_single_plan_step(state, step, attempt=2) - assert out["status"] == "success" + out = execute_current_step(state) + assert out["workflow_status"] == "ready_for_analysis" assert state["executed_steps"][-1]["attempt"] == 2 From e877d166d02a1a2b8a4d58859bb71e5d21a1c0db Mon Sep 17 00:00:00 2001 From: Saransh Kumar Date: Sat, 11 Apr 2026 13:30:07 -0400 Subject: [PATCH 6/8] fix issue with deleting uploaded files --- ui/src/api/client.ts | 16 +++++++++++++++- ui/src/api/uploads.test.ts | 27 +++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 ui/src/api/uploads.test.ts diff --git a/ui/src/api/client.ts b/ui/src/api/client.ts index e56d155..ff6d94c 100644 --- a/ui/src/api/client.ts +++ b/ui/src/api/client.ts @@ -88,7 +88,21 @@ export async function request(path: string, options: RequestOptions = {}): Pr return (await response.text()) as T; } - return (await response.json()) as T; + if (response.status === 204 || response.status === 205) { + return undefined as T; + } + + const text = await response.text(); + if (!text) { + return undefined as T; + } + + const contentType = response.headers.get("Content-Type") ?? ""; + if (contentType.includes("application/json")) { + return JSON.parse(text) as T; + } + + return text as T; } /** Authenticated request helper — passes `Authorization: Bearer` for you. */ diff --git a/ui/src/api/uploads.test.ts b/ui/src/api/uploads.test.ts new file mode 100644 index 0000000..2ae0d14 --- /dev/null +++ b/ui/src/api/uploads.test.ts @@ -0,0 +1,27 @@ +import { afterEach, describe, expect, it, vi } from "vitest"; + +describe("uploads api", () => { + afterEach(() => { + vi.unstubAllGlobals(); + vi.restoreAllMocks(); + }); + + it("treats a 204 delete response as success", async () => { + const fetchMock = vi.fn().mockResolvedValue(new Response(null, { status: 204 })); + vi.stubGlobal("fetch", fetchMock); + + const { deleteUpload } = await import("@/api/uploads"); + + await expect(deleteUpload("source_123", "token_123")).resolves.toBeUndefined(); + + expect(fetchMock).toHaveBeenCalledTimes(1); + expect(fetchMock).toHaveBeenCalledWith( + "http://localhost:8000/uploads/source_123", + expect.objectContaining({ + method: "DELETE", + headers: expect.any(Headers), + }), + ); + expect((fetchMock.mock.calls[0]?.[1]?.headers as Headers).get("Authorization")).toBe("Bearer token_123"); + }); +}); From 28a9335c9b24332c32c92a659c263a2fc4993afa Mon Sep 17 00:00:00 2001 From: Saransh Kumar Date: Sat, 11 Apr 2026 13:39:17 -0400 Subject: [PATCH 7/8] untrack source registry --- data/source_registry.duckdb | Bin 13381632 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 data/source_registry.duckdb diff --git a/data/source_registry.duckdb b/data/source_registry.duckdb deleted file mode 100644 index f9fc5723d2cfadfad57d7caf579bc30ac55b40e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13381632 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 AsdWohC7~f&qqbow zh-3%ZW;CriUbG@(UXD73^4Stwp{j;9jX-L~QG_`|LXgEAuQ2`*7%MWcG@N$cDlW-c z79;qXc96UXYRWVrVpV<+$Hg2`ATk0yH|VAS0nNBE%PPZwG#TKeoInROvv6QVB+DX^ z(HI|W%$Jr0j6s7|trZz)2Dud~MEQ}_p#m$zrlcuJ2K(fc;Z6^u4~Q^<0doX`hLjsQ z=K_6j4MXBBhOvgi1g|9Xddf;zt>9CXBKc@RYboRa9`4h{X$JDs!V2t8D+u=|tL; zX{<3qDH^XjR;7X*tEI{j?jDGU)s&$!aZ{^7wM-f@m@Q8)UqUFu^fXFN6-?bKa0b~# z8i`5{PChUUQYI;2iX|n&<}6hq;Fh#4h@|^K_<&sS^&e0cfsu~^fmIPq@Js8dpf|3t_|@4Y zBUd#__~*dVSItrlTLNB7m~W8)Srk}8iRZ$N5AjH6Cdk{O<2hEMHI3vA+ky`7rEugMoQG^Io<5g=9^^h{8=@BhJSK!jP{z1^ znMNa7&7*vjs!9+c38pMEbn{+nDT{z8E;DrhO07U!SF)nqI53jYOd{w>g6zYFDH8}oKAQu}Do#i(DXnO^XoRbPc}d<1 z8a#Kbb=V@>ah@qa#99~?hJp+Ls&EwcKfXtH#~B2VQ86JqAmX7WngNM^50yG&ix9Mz zSTSdnL&&JOv6%tm5mupQ0vTn-t!Jvpasmb)HepzZT~P@#7SGDAOQ&ra*%*otGRSNv z$YKkrc9@z6Mx2^s%4{3ho$*AIiDUsPx1CZA6a^V*#4<<7Zwj*^L}`jhCC9CYd^=WV zFI6#^rp73}F@G^|0VhiS9nBX-H!Vh}luv>3K%tDKg7hk!ez=0sEzv8(Gl#xeVR`FD zbmBha(K4iQ_{xND0S*giWQ-9h>g7&QV931h{pn8A?D*%z0Q z%af%h$2II1W%x`bDPqu`vZ`l9R>56cT9$HYL1fZ03E#iCvB09DbpHxy!WJMfDe9NeuVo`uWNeXMo zF~l*L1%~-verEya6IziZdYW*&Fj)X9GFOG>n~zk{ln`hdCiRI7pwDbo3u#JB;foJh z5=qzy|EuG^XV`j1x9^NLfJUN$Hp!;GKgTrZUqZ zfIb$;lR?gU(8Vuq!I@|91OZMC;@_?@+N}g3Cj`C4Pl@&bof5&Zz~oF&gTR!KgqITO za>dS-$y^1v7UWN&`pS@FmB7+VCqT#SAS7i=M-NX{NPxLs$Y$b3txT#)P)wr;QWzGh zJcmgS7>kjuMtBpJb`PjalDnKGsv$=Zbu1afj)Fh~N(Uk_lrn{Aun^(EVs`_}QOpKH zptPEY4QX5n=D>NAx z0FQu!stMr~-Z@6xS@88r2t9l5lb&tP(4)>xLH`N0o0;+z(zqKm-E!Om1WJFg2o| zFk43y1=e7Nlq$Ab6&S2VpkJ^e<7Kv+q^zgGDx|5EC60`89MK8@Oh6|&Gv%fNz&H|s z8$vWaMcZ{8>>YWuzf7X|e?=%&sU&dzqKF_^1+f9~Q#DK+U}2?VMo)9Lk^ibgLn973 z84VLilOyY_3OBRN1Cve~2y??qh!YM6D}NY<`hcg}PA52{3!zG$7%Yt_k0`1FIa@&b{0RG!mJMeW&*G&@qUD%nM5<70C2!kLJ5K4 zpl6C9BtigoRR*eb5>cKS{#Fe3xIpwo2z&&t9KfsvmX)=F8Ii+9XypWgS0fQ*)#yN& zF;$V+C#r6k3MiV5rLZZ0SIPw{V$@ALki%`nC-^I)QZ$__5*S*>W=8mKl#@1^AQ2%> zO#oD^B%<9d8_@G{<&bY{XK)MHkn|&bvzY*OYA8e9#N5gRU|~5P5``dXs+=@XK^zcy z$)>Qj3p8!9h+&090LzIQ#&C>2HY0Q}T%M&bR3@69P)K+gP6)vP8K7KB77MT>(|nMX z0Z(fy*#?3;An}ZWQZ+9_J*EQimDviWEyk0X6o-2RonBB;j0$VUWHL!XO#mVZl0-u# zh-~3h1giuPnZXa4Ev8zKBZfvrh%4SHB=N&C(ICDAv=T^&Fw2E%3E~BM%xF{zN*L?; zXXRj^f)QJoX&H zK5UJ$tXOJzYpskK4KS(#o}n@?M~Ff^FN0T8F_Y8{Xmvvp8JS+(h@3-NTw?c<1;~~{ zxt1iP-O0sdE8}41Gx(CjW)k&^5~uS^6*NdaUg~C&tem7%!yio3Nd#9B-yKq*jKhR7 zfIkc9zKwp>C3p^GRyqK{3$he4oLmNEMu>|JAqoQzMD3JhWkpNFpJ7uE&pKB`bi{*! z@D5ybAp%xk#c&TEf{4r{xp>4kk?ANF!(rQF@x-K377IKMNnmO*_(UiR!1IE<)x&Z4 z$S8I*g;1)9+@6rGR51z(1Gy6HNX?c)T&YII)0@-gONc8O@qv=nA@?zfC3JiD3s? zZ)8f$u)`(Jbn;|b8pJA|)&#X-yE}KDwVjYKIR{ z5yBy`Lz{0okwd*wNsA757Dj!SMW0NLv1bSILVp;gp>*LSQI#O(4h42zSg+XFn2MMz zu^D)7MOAk4Ih$EU0PF`fN5@72uo5x4 zjHtrOz*R|S>0sdS!to+ut57CYIHQ7@vd51bGa0(F;Q`B`&cPres3Uz@vmE!e!7>;dBrFzmuZED!YWE zNhQw%d_^GcWOGDlV@QDYjP%ZO;@SV_6^Bv`U$2&`NUlygjHP1U;dY8h7#fS=oL-8e zJ^`VkU~sMAl4lcX@N#k6=k&B0OM3itJe6($?{O$xRUthT5NcOUpi<m<0u&` zn1ib-3h*GmiCeZ}X#($&1)=OsTZo*@vLc(di0TzGmmLRL<1yMYqKc>u#{%IW6u;P* zNYh4cmBq~*gvQ{qCSY+)+o8u0V!&tukc;vfZ6aQER$Nu?;9NC>r3Y#le(h|UXq$-V za4*MMAsMXW$=(VmB@9B0D@o#!>@3zMm}vCDnIK8c^a^1csspJ}7_;zot6{B%V8rnf ze0jbKIpT;}Wap^@HM!)tc`!HtmS~Os)RfO zDj67}jwpp}6C%+~D}#PS!mU7eY=H>(2s4(QO4e+&b7-^4<_12G+=fY9EkaR2a+RK! zXfPuQ9m+a0^&DZ0^dFkH;4&6mxgd2Ue?69d^C*a{7m`71=0 zWYo|R;>j?%$+rz)oQbKB@nWGUcZ8X;KwpKbl_(ZmzWZ>5!jd_1AyZ}F2XnOy?TO_a zM=scFQV}`-psvfILf9c7llL+N$G(aLA4?wZm%_0@CR#O2a~Gyt2D5=oz6@*C#^&OX zyTVMc6vp5{xlSw$`S19{k&v^W#3B!wh2;!eC1k@%F+gA|5~y6UOj?F*fJtMQPx%lD z$Ed*~M#_RvOe_?0icl#MrZ%$NfN6xYQAOh)IUomh5pX)D4sVKR`@6=irL=H$_R6Z7EfYw}N=rh<7ImOH=CU-y$YqLr(57kA)iJZi>Q*GxoCH*M`AJm^ zGOU;317ZH6z6_8i$=}C5mOiFHQ%MI?Nk*|$^J}rDARHyiYUbf_=HS^Pod;}) z@6gMV!irYtBvRT0=sIt&gq zov&syy!Vxm$y1Qzn`GOiC@u^yT?YK0O3>V*g+}07Ayzct;v!^d0hcrrbbYDh0Ov2RF06Duk@)J<822ISdL2#!i z{~bVzVHw~dKd#E*7rhtH-&>@S~cDkS!fg;^VPXB&y?WV}ga~ zn!yIozwAH|z)~qE^a!C;e8vQzrp>qY|pdP-hbiu=yv7fDwJde1}AW6;P_Xe_7AZ9p_;Dt+< zDp0)xjB|)JOaTeN7YY6W&RR?_1h9_;)F3jp9HHr?jAD)wg{nY4yq8LWpXn5e20#iE2Qr}$bfY!)EN}qH zuV(`jOeoZemRg8s$=S11F;07+!aIS{q*MbACcH$=L)MgNJ^>`4U1MQnN>#anF&~dG z=pPtT`5bTnlz8bh9i^t}GMz?>JbDNxwiyOtK;RqZ46EqH%SPfb@1PTyI_kbkh_FmR zb2_SW(m>!m(N;xtvSPFRW)#?ED_CI@6V6u(F0o$($i`}@{;{N*7(@8!*qswS!1e*Y zXDLMv2QqpV*U?ZpLRL3=_9ERqjPJP3b~2WcvNg=KL@*Q8h2I>9j#CAsh69~38Phk& z`2iHHj?4`Q0g+h}yEB|L$aCxjU?J2BRP_b6WbiACC}k`ptjMD|OZisGf=;C1WK$rC zo)Iyxz+Sh57F)q=z;wOXOHE`Op`#Fqq&0@e%x6kTygE*W5UM~VRm<}3AX@Xl8(7M? z-(5#8yC!o0r5wzc6dXBPl`$q#EmPD{mm!zNvIkW?9R*{iC~RZ7rywxkAP$N_*3MvG z$rL1sOF=V$Cc%Z1g#re0fg)CNd5k*oayBZ*$Ujo0is7O%XRMP^0iEUH8%R*2bL>wl zN{H?_lt=>gCwh@4k;N6~s*c1oOMVM>ak$}>*h*cv!B`@NL0$>h%6b3-PK0xpdM8bC3ZZitHJNZ{sebchR4Ng#V@D|go+wT{ zI(vWEBxN>aHtRQZhD5*;qk`S73P{c1i_S|KueD5;FuyaeApJMa`ReMP$wzkyU8Sa{ zkS87m-88!`gwtt>Vp7T#bm$BO5E)@~*6CoxVSbhlyVOS<<+4X~1YYD4rUNGs}QF(tS|+KFE(#u zA+F+|MRv)S4}W!;v~BWj)sS0AWW3d`TTuZPc>0SRR&OYs)leW4XTKpqueIPaVM8Nb zf*A`CSaOIfcq}wdG7Y;)E@km*6pOq@#gYn#hhZ2S1>Cna>^cdwt0hySlfuHER~$3I zA~Hil2=X?siuTAFMN;XK8S)hK5`_441#XtCfSnD8Yf1d6UK9;5z?ex&HJrUdjSUg| z03^e5IUWrI!AY@1CdvgrLbhy$p+{jXMp+mM6Mo5DTBEus5ur<4D10R8<3N zR;b465^BB1piu?WP>yDURU;lKlp&0#pb*j~6JKa6RbZjzsLIt1{USpcZon#{Ttnd% ztubGr(~i_awpx-1@FGZvd?Rvd>>5k}OQ-%J4I&G2B3R*}K#ovAdTRpD@a9P>b)Xo) z{D$o9Zqf6{kB!xx>+ySXL9yF0TJdHv`cY|<3 zY_6IZb4F22u_iB5>w$a7*T_E%fCP`p81iw}rveW52#^Wc!2T^sjGLV}N(&4i35;@a zm1u91cM-Kh9#KBv8Pkj;k)o*8gydFGvsS_t0(DXbOb-^waK>>sQ!|EWTB9K}c0tfU z#B70Xl5K)I!k+BQ#UqI`zowCtq{p#v?P!YLr*&BWb+9&>lpN)34uG3nHACY z!m>vGs?)6I5PV6N$}It0PIdU$VPNrh1W6mnm4HvigDj-V**uOjA{D$E2@^;d>;OIr z;KF1miUBB}7+4dN@yQ!l zW%bF3kT_tbP1$rpDl)mEAuu#Tp3@bO73fZ61#&Eu92eyP?Q|BsIUey64E=)apxxnm zbAoBo8Vga7m1Q`W?3tu2%TMBNlDxGX2538y@Tbj?$m7m^1mPPlXSJBhl4_sBVhKl2 zW%U-9gOpHw^+7vY1u(@yptEy;M#(OXpeGVkp`2l)qlXdoS`ii@3RS&I?gue1HD){| zOpMS}_z=Z_*We{oihO+ADq=hY@SJSKOu?SvAVTGak4H(d?JAfI^A#PTSglGaPlw0C zL}&VvAZ(s-m7|gpkT)SBM$U$8V!Wy~7E~4wgh7@F?u!hi9j0`VCxUM}6^cVBW<^d8MLs5z*jL2Rn&;Vc zISea^PYW?3X7JK^d$LlAon8ce9KskeVN?T%B9M%uQ!nS)z*IrMv;LCJG{jJmWM#&y z?7BT9IXbu^!weCY91sh%)Cd%FA&8YusK}^3lp%yR0xkr>J26K@GoTg)>Wo)73L1<- zE)z2P7>q<1t%-R|7lQ=e61kO$CCg}HDhM?QPYQrSAOtB_X~$c9~_!E5Ac)+~6BHmaCJn$ZnOw}dH@d|1nHvX@qNpbHwgQ=!{DMIXg?)r6TDC?K3?#xCQ-Hl z>>AMw&pEbp5RYMIc_8AFK{pVj;$iE;2A_;+NlWFBE5-{l5yK2V0R@S~i*WjQ7-5+N zu1Jk?Rpo_G$fO0ZaI59ZL^F{*UBmpCj^n~04UyWeiqXEvnaN()W#peFViy$?@^_>t zBy)NRn9TLFOce<}B#IC&wUtFd43eA*mnE1@Y6t1?1uRL`YzQPjC`Kf>xHFQhwPJcc zX|rI=xFjx;i3$)5AplspT1kWYV6!4dmW$JZ5w=Z26O@iL{hUs*#CFz^plr)rjK@kqH3Nh}{)=rlJ(ghAJWE00vM+PaIT{qUD0f zcDf2WkM;~XP%RI&ycofrg>=~9M2bd{9s#8W6vWP_M4iqo9NtqJc862JdMb$kX$o|O zTyF@W!C^8_Hc2DYk`eY3sE!a6@bE$uw~=KN^W_CAuoA3t!n6by=w^LSV6I40Vn2ALd1aEWYS2rku5PE3zY-V@e&&L2-4uH z#R7$UnK_Gt_N7uwxMl&6B(kHb3=cywXq^b;sAXO9%$OH&>>zr`+F^y1E}DaoPM92^ zH*~_~f+SX}#T*<^B5;CYxm2M~PqMKmD#eV$z7`{u0?l}e(I-^5BAkaTOigr1>8wBBjse;fmSr8mS5L)E%5BrTKXZNs2KAyFH+~XsAl?f+C z1UvitAAWvmxM5EC%zsWEIr;HV|9tPy2QP1bX3U5oZ7se;@9z4pg~#1Le4g`F793mh z-iW)$3>%pHKh7n;IzGO)@%HfZY5*$ItjRu-n`h5ku#Va9@hFtKT7_h&!xX&sk#+|mBpP21-P{Z|L) zPhWpFA+!s*Lmk_aT|etiO?&0~VSV{VUw_}26Y}#1n?C=cqd))3K#SYG;;!REo5cGY z_tpE_H(uZT!WBjz%a7Mu`v3LXp9v%THoemB>zO)u-RP~``-JQh2mE$n>(n9jv%`$< z)t~lVf4zNbSl@w#T`PWju&HtUoX*a5S3S(f`h3f_M%6d@U`zj@OMJ~woW17%^qslI z-zNx%0*CH>>5cIhPuVg3SL?!m3i&$w;%DV2gd=+o3fe|F*VlN)zkB|XaSNaRYrg&8 zN1j_d?9v%;jXV6%hu;c?Q~inVB`bIAfAdeR533!6&CmM8hEo5wJ??WOPMME24E803 zN!JdpKd*KEua6qeyuJ9>T~8fYa7E9H?+lFlcC64mweOl?&le6yPqi$$Z`ZxQpJP7h zQ$~zy>JtXGhSn_o+rm!Y#?0gKZPy$;)pE?abmQt7i^cuH%stKZp%=7WcioH4e?4|) zJC9A@s;=?2F!iw;{YRSh^n#QAZr^%+Mx%Iqh5o@`gY}0e)*Bwl_}1r+UOsEd^M}T5 z{f{N~@5kC}W(ijhd}jXgtWUUnQTNu%2k$sPcJ<_S!kKSGwZ3QIBmdzMlT!^s>jT2D zLx29H)h9;BeA8<9>)|~w`8tJN(R$B#HTsLWXSaXykFT!K?jQcds;$dspUr&wULf_< z?|wY$da<#`dGhmV!qRm^`#)8eq{hA4Xf2%5JGtxJ)`pXpwbcKt4t?=~o>$*IcFMPQ z&mU)x`DpBcnVeQXxU-+)AcW*nesAucR`d{x@;cr&o$*v#$@j*d2v1^6jonOE5p55=x zFIumsm+fApPH7Tu5|+-GHE{mqp(`eRdVc2hGcMJWQ&PV1-OZ_&o_TU+qP_3rhw29R zr7`uL|2WY(Yw)3u7d|SyooMg)^B>&$Fk$o~h4AAKv>j^{#?N`Jpf!%a`tXj6g|&mX z2s<9T{*Lxh4Vv+HOS*fO(BER*Qr|iA(+B7F{-9eJxbH`w>kYXBEz7RzEsR?9Y3KT0 zUt`_gwqt5!;F(CTzKV#^Ebh?KyN%e)gjdapPwR`QxsxzkVwm8@T?>z2mFt%m(=(-C2z@&~TeEw{sU`l#WuNbS z^{QO^_BRD#uzS^*TGy!42aE?V$sPKWbYS0gJ7->S_~iDfMsK~PU*CQ0>haCX)M1Mn z2G>sipItq_-ZMlHj=1>`x4qxJP@ma%y8RC)H%(mgqh;>e#H_(XtG0Ij;_l*0^Hi zwhzzsb@ZMd+kbWMIN!SdyIX|*U8ARI9As`{u=K^17k}S6|JFBeCFhpfhcEFB^9iMw z`)|nnBz(cPfrV3V^8Nm;-<^1S<(>Dp{^?|5`pZX!6BB>a`@)P@t~Q_VKH9eB=If{b zyroqTZaQ?|@sHw94_UoSF#q!OmA9{)xOmNjAHBJ0jCRqE6QA{t(~PgO=T^3tx1L<| z-ufB&KkZC(2%|@@{-$;D4Bv@uZ~ZfKd*ofe(Ek^EbYXM1d}7yKGe!+uf3YBaGQ56$ z>lppEEgg-Y^{oAT)PkPryY7E)`G=+Yk~zb+bv5OFx_ND5Pp7bQbp8DD^@4n0_pHuG z&&E!@(k2Xk?fm=OKWbYN*x|3wy1HlC{$zK)Q5`S*?uy^G962&$Fn40{togp(?|rsh zzHQ$Hul{w4>a#b!+|pk9$438F?T%abExY^bwiAmc1s|DmbyYY&Z03pCCk}P^F6nGM zGu!8@Cx)C6+L!NJ^G!T(e`9prM*rX`VeUIEp|4MD4Kz1Rne?ARJ!*_CH8$UUrtQd& z7WLKlz5e#x7k59qcg+h&d~(~cMZ$AmF7LiedOr9-W2^9Z*N>!;uU>Uz!mzJ<_qU$= zT->$sfgSx*)<^H`n0v*OyQ-NVXyv|Vmxt`RgYB1eipk#lhZ}zqhkrk|C-S$4>b)O7 zeqfrurfI^0#`WTmIc;xl@4xu|nZmj1i$muADqUYF*+1{vKW*Jj!my!2{rOzr$I9=w zU-R|MAB5_SN5=2!KYDJ?mA9D7{_W`T&)@s6oyR8E_1nfZ3hr`kf)LpA-VJTvd*f*^_LRj|v#L-*2p6&sZLnxE|b$-am7 zAA4o1FL5^i%}23`_X@(FTb};Iyj`EZ{?acG?tE=V{e=sM4?o-3v@9}H4-TGPe`d?U z_U-!xp)Gdl)Ktr|e+m~j{KzjXyJGl=b3?u=&)q+=>)HO>g~!%?)zT!)*&^I_^PO$J z(%|FUuiR97Z0Kii-_p3o9{fx5ySJ_1zi{!s*VoTK^vS2CN94M2-=^oJfArpCJeB(T z+lishQT1Pr_03Cv`NZfM0~gd^YCUuLz>CgZHMglG^k4jK!@QYo8{b~J$nkBO+@;NI z_qCkNHwrhc-e?+wEB?8%o*VRy|HI1Drw3+UyF{3EMbj6H{vLbej_U@V9=pADv%m4p znU^Q~E`IRq(~Fm7sfQpw@mw7nfLnV=NB|L9gn8kjA0uNkLp^} z;9vY}-&N0S7kzs_+1Mm}+ts?~iHEn9qAj14CUgqw4)Z|uMEgWV7&sUY&3x#4pFOq6 zH}LB%tIqv?Y+Fw~@sydA{0FYP$Nxopc-ZV^KEZze!#5ukUs2UJ_Yb^$sqc>eXgJ@{ z`{0nBYu~&{7|}EGzk>ajRQBe6{AtgygZod9c<#>7q@$-Yu3udhopkKelOJ!|z3QWb zbN8(Hl{xI((Vtycet%T`VKF+sHEx*x?sg&Q{zUrzv%~v`EXz!KqQ2<8w?h{R`xYH| zDY06ZQhz=u-aF*BM}3B`bxVF!J@|o;TQ~K<$;(zYpZ&3@kLqbUbmpR6e_VS}eWcLT zeaoYx&t2meE_MsQ=}|B{N2kzTi*dm_FascSbCWHu;A4wKp6TuM&g-Yf*Flz|d8F z-~CM69PhaCsBg*i!6Tm>{OmHJoEqDa`sv_3Pd-2G|1KU`zw2iI_MYcoil5)|`KGoH z+BWMe=gk)eroML9%IQnyOqtZ~?ikW_pkvj_=%oI>ea|0k_~h}YPd&46&)|$#u3y&5 zL;BQ$>Al*y>zl>)siS6e?YU{j)`LGB(5LFY(6zCa@qr13@cOi-Ws5iGzOt+L_3j;2 zAC>s_J}#N@ODElv?z^k;Czm@L+XkjwHDT0kZv@7V5~C+33~iT6_caaK^7Ll$$B$gG zpyey0beB1{YjaH!Hf{R6Uo8xr`>gf(=~nba<10TMwzd1@pRRswOX2kGeJh6@b~7K% zIKgyhWq|Gi_=P+`gi)0)%!j8*UbbI6dF zhYw5%)i#blapy_<{=)tN>@4qHN4@rO)?Bu_d-lsSg+;mO7Qe7wc=Db6)epz^-8THI zum1bd+^M&=yu7b#{#~8tWTCfn^^oSSWAnr<wy~#E9NZ(^}!kzTbTQ<;^+e7o!JP2ewaKe(B(lbM4(D zUw%10MYw700~daO->u&+OT5}(M5cF79vs%HYe}CzUj=R?UtyJGt|E0L{ z+85M;$seuxa*D8HYX5)jTDo7}`RSBPUYc{%5I=tE%Usi$&CfPGnd%bGrCxq_(Y(Ts zZ$2@6d;Q_f8!i+QP07c_nG1(KJE$kST1We*C;#;p!FQWaIOje*PH3II`WySo`F-hG zlfE@hULYTl8igSrtnZnw-7WUtx%!K$aJb7K96N7$Hoy6A!S`-?>*T}jcL*K5`(xu9 zGgn$pPxt#<<45LZu08RJF@B%? zgH+d#E{M#zHg|zYLKmEam zuA83U*!pDh&LeHD4`_p<`rh}gzuSIo*Z6wJeaE%`YMtbZe-d-vo3v=hJFB(`{}5hS zyL`s5$>Sco^5xLx{ig8Fw4*0(-u37w*L^j!{a^Yf*2_N?Eb$O?81?4+ak?mj@f>}FVq|Q|0uk0W^}_%jlzACy6*7_<6o$>c0Jnp)2H{3;RpQb zg_Lh+78T|Xjyy-l_nLpGApAjywAOF#_6gJaJ_`HV_tuYJx-6BNQ(3{zXL)PI_O%s}nYl4xBBnbP{Z6C-l@WzxjXl~x>nd&6iXrad^ z%%Pl_>btu>sy{T{w^O+4Z!JB|bDzEEG2)VG3i+LeN+|l3HC_M1MT|+ki?fS`G z@7(ZS{}aw7gIk8IpLeHFFT6C%b=SL_6aBI91mXM1(rPs!aKJBXn?HDLjepmQ!*9JQ zT=kfH(TT6bNB*&JMoYBeIl=8JE;>7OL}BE+ZK9m5KY3#nb0p@s}4=3f=t=wF|z%)!+E~gxqaI)OTiWI`zh}g^k&> zpEU~$tAaN5vCm$&CR~x*4@{QA9gx@_^*ZDcQ!T%#+Y@@@xL}4xpnl;i|&1Q)Wv;Q&beCk za^Wyyw~5ob>~h_Cp6{b`G^ zWZY&`SgI}Q-Y+!2ZtR`EbV67Cck(MMdtOO?Gvu&6bo%Sx4tu3z?C`DTU=v#C_^ZM!cl@IQ_?|f|eB4^0p;tSsQb&e3O8@+eeuCb$qS-wP@GPD2q zh7r!r?)K#+)-ihjji>69f2oh^n_6Be`IolTdoF&XzW${j3fDgLR^YXdCfxk^2XB1q zE6v+H@!X=R!lqYat;X4#H_yK}uyU3lUAko3`&$n;Zyz}@s>AOn&g|o}pX})s`g^R4 zht}_VZS3YP?e#aCT71Vg$GRSAb1%K==Vi)L{r{sMy#K&O8(ylN8a8{s z`^m7=tJ+)l1=juM?!WAr@Wo{_8drbrTe9Nluv0C=|GDz%YjXV!eJgW^Zadnq$hW`J z*7rq|GiCAW@jq+2E4T5szuz}5vAtv6j@G)?*!Q2;FKHeV|6tAkGLG~{2d;i~)F|Kg z7B6VIP##xr5H9-Jq>IK!_wE1Te{RZ_zx;Y|i;$Z%aC~5b^TgY^i?mjKvSTy|iJX6W z)4A5xzPsO_@sm5B%T0Q9!9^c@H?Mu#liy4``*7j(hYxWDD74+Iugq zADQS2tS?EI_*O*wXN|p0c40#Wz|T zX2nk*I6z9_k1vQ=+Z?-dehC-?emZQ%O^vAfAI}-E(|QmbpGO@mdBQSc+eiGFTHWfJmHSE zp%a!p)cxv(LaA#*V#Is@`^GK1dVV|gt*`n@TTgtjt}3Rgquv=c*!c8_(_=^MTkyv{ zzbzkV)j!)abNk(A+F9)!daQ4{Uv0dr>-H_RB~ACs>WS!ub59#vzss~ty7H}=4evcr zXy4N%jTo`<4^K?LFtFp)9rZDXeZs@TM*Dl4^e&-3aP3vwJFiHe_(J~0+>Oi1cTK)= z%BDYSt6!@fu~vWA)3-r*_q4hwwd-Jh)iaO$Tdw2dVXrKeh6{JC9U}abLn4!G>|J%+ z{?qNNo?QJxal^uib$?s?g2ayA%MN_7$=WtbyZ5E8S>^7f4cbNf#!sHJd$JgLru)vp z$*)`2DvNUOeAu<2b>EA>Y877?wJ~}B(=&S>8Xr9K+D~rT#XNcY$C)?(fA-!z9?JCp zA0HicmL#3gOi^YxZEM+fOM^0WqR@;eha1BjL_QAxbncRuZ+Pq?B4T zglfZvrPjeVW@EJ;ZYuVFZSFrR4!)Q}Mm4V1yE~;{@5ei_C!13>N$$VT(9%`zf!eU(%wzqI@$A4 z`mgyHCtSQVy65yqom~cVHWvFhX#G^Z>`m~@u$7Ka*4J|9U7nvX;d!sMW318iKPc(; z&(|JK==WS*u=Uu)fK99JeR#u~x%u+;jZaLpPA%29pZN3D6^tE4>pJI!Y&jQ-iEI8EcK7fvA%OqFYU?> z|7xyI>T#PyP6Nd@jy<*E_xaj3MvHe_R$e^PzSh^koKk^tj%iV2?SbSI5}Hkr|2$1KoA--!?3nKjPJs_ zI&ntz`bl^*#kEF6b0ZaF#~nR2hTNh`8h1U(tLvOo)1^0dnVth};+WKZ#v`Zx&u{AS zgp~pr?gl1t#`bEsRRDhz?xK8pT#oa2v>i*iOu?^xZt2tLbEOmB5GSD%DY04Tb*d?) z+8#*{HySP@Ja_%te@QzVKTt&Mn9@RaK6cDOe1G*vt*z#oexN4P#1MH{*?AIf4VUqONVow62+J(SH*T%qiQ;s*uR3@Lk|L_;|WWaFticy zg1z_=o3L{Bo&apGt$-iy6@sk~5eUMtP<$^NS_1e3ID+~>V z2Kno`0&i?DR2q>6YV8(!`JyIm1-wXs02d-uz!h-#jsia3A9Rqj&TH>(p9sv*Y<#^e8 zaq+(M;Y$7y+XO=YfJm=kTu{(wFoPoq=3;wU^nWOBlNXN;N^}2wmDE5c&jc3&0Fv+znZRkRU@Q=#3MCg{((1 z(2?M4eR$YEb+LUfos_`Wi{}j&W()Qp)7aqU?Hj`3a@TwD1HJq}7&cslv&Rh%1qZ-s zu2=xZgH9OQcm;FzcySH4c!liYVNP{^ z#~sS{4)s70+OJfq)lrp0?W&qw6ak>7^7CVsg=V@bC)LnB*fCTEXDNHDhSf3Z=0TMz zdT1I{`K0QA7S)3NgP&FE{vLJIBL1efHG(7YP`p^rTMQzZzkilV4cE^xX-80yuQmThzpbB*6rdl2Iad;?39fMbc zj#Ld+#h}jr4LTlbkAkycBSr;6538$&p%J(UG_R^s4_CqaQm6@aht*&&a84UCoX6-S zsMfDq-7{PjQ=uGwtzP6Avv8pK!ae2OC4c{L`Iv)6D0 z>8g9(F6&pdP2IqmR$-z3;q7pKr{KEBt%v(=SX|#U?a;ht>Bd_p)ce#Pd#)5jF9=!_ zFx;UUtf*D5`52|_9IB{Np6ydtMttmebT$0X?>|YG{CT}ky(&wk?)_UmGytL%sl$~+ zYHU!gh6CXsurdZlZ(s1Cu%@lG03dd;27#E(6&;k>>e71 z1}X+&vvQ~v-l~-FwgMDVp&l4+hmpp6AEQQp9q%GdPU;G1?+d0h1Vvf^&yq z7YK*`I-+1`h_^AINVU2dN)@qV4Gb6j!QuKB#2$E6sbgZ)Rnh1Is3_GH$T5bB9t{rn zs6ST4z+NcOX=nx{>p)ng1Q--R`&DqXBWrNsnLpK|W2b5VIR@6SC=04#FQf{T$#-H$ zADy<~uW6JcvzJ>^MvWeC`N!zkqesV2HMFFRwmhOW|23>!Ra2nN|8;*kke?LKqEJrF zq)-+@Utz78vi2DKgv|J)xL>_5mmeLa=k)DgVs3!5D{m3wPQqQ^Q655>j+3&?yZ+t# zZ$Hl8ac7zPt9@1CM5E_-_qrQphHAxI{<`UxHwNAXl8`F~x)00m=N&7RWSvhoiqkou z|CKG{&!s2Y)-6pxkm*==ug~K6?m2AjuBgYOcCUQ5@>o{ZH**uum~GjCH6zjf1H-(|%&Rn9jKTV8#ZvCg}%{X^)HtrM9^w{B(H z-#=P^_v5RTS9$P7K_*)={5Sb%&+^{XGSTSF$GGhB`oa1LS-D4foHvOZv?Xr079nale+(h#Nz5C^V znEQpAZeG1idjiX(K3|U>d||soe#S?Cv2)(GSuO!jXm5O0cI)+;efZ{i-0O^IXSO_e zSs%Hk`=KIk?a#-|)0egCJRZN4sY+eZ#6Iv#yuqZfXC_N0T^^mlyWo8&*lT)P+^(|M zlIbVPXGFONMJLvbF~v-SCl~IXwd$_bBNwsUIbL6J(RxzcoY20EP{uKF6WiQx#%(Kc z@``Z{KZo|+aW|>4^mknvr*m=M&oKIO3%c@x`C>i$l{GuGuc{oi2Mm6zJPJxQ9ozK% zu`Yg<_{qa{rqXTN>mOK*y9EuzJvS{pd@3u{&!^Aj)t1F`Tp1($$XsA^+`tX@Lj#tHSf!%&J*YP=wzFRF}B0tsS38dGl6qe7$64$N_tGBv3i?O;Z<6611+<9W$79X>-Ssx36r((|Xajy*7ztxvN zf1DflBxBv-MUyTIU)HzDgCZ7oKddpBamFloGDExJ%&H}EdrghvUb{@Wz1Ch?zj$T$ zHr?B6wfp88#cfFpt-lO8oKE7ZS+6TgTobM4N>7RllhoaFC%vSo>tCmU`=L(ZY z8G$BGWX^b;D}KGwE#Jn`ROhyXcGxCvP&4EHJs?SqOlkER@8nz}EO zCW2lJe1@O0P2jwYb*6T+eP9?J4jc-22m-xNk*IdpbNQCy73k!XYfJie{E)88fRppg z-Ao;%TyPxoS>DPaPY3AvHFNO;SBLy$okv#PJG8+p9)A^gLuFo{aScpII#tTkIk>9Z zTbZfzVLwonx!C!^#Cc~FhX#8;}WO^8tXWPCIC!fj4r zsq;7^Q0JZYu)>+woDRS>W`lBeD>GO9`Sf^b{oJX^h1KTZ0pZ;lIt=Y3eelNAPz%*k z(2Gs@lDOwenqGHC=#k)hufmzyMh$a(UX<%ZLGy{b>p6W>#L!>UV4Z9$aBQPEdk$R> zuA9;1a6mXY(L9`?ZPf0_p#uRl7)X7M;(ou$b68emWpfBDF*qE?gU4=voWCtVTD|sI zQzrQ3491O=CWiK1Q0F(@+=oAk&6^A_AJSp0?Ao^`T_33q4$PI-CrS0R?-|(kw3kPP zoj=ofUTkjae#pirv3!PiRop36d(^_;GP;m4Y?CvVhrxnTnMeDe!N)0L2Ze*FF!8*( z{_V$BCng?su3?+v)|63Esfsc+()%sL%HIb_!Cb*MEuMP2T!-r$T^UP}uF8pe>O|qiK5F$>dPE>20 zcj7aH&|kb{)}UgBwwF(0=o~2ndj53P=KJ@oKDr!mUh2N=uuhv*H{*R}2m8K%=oxNY zKw{?exkgg)_hK2)Ve!<&-Qo3>-}-~m2=RQ0yv);b!)@wz{4fC$2t}hLIes8y$ z+8fx#cQ?S*7KA@ zE5D1gai44RTf0?vy;V|E+Q0&bd@j(d(MtI)hTN zKBIlm%HP81KDg;A=uvUgVqgoaxju;#ySD%zNUgVzZ!Wl8&|tohaoA9mZKwePV8o^v=1x?g_Bxm!#G=?hgP$ql>XBh?T_fZyz-N9;cV=sQ%)E_wya)0eMzHe5 z1W4H*=ax1xARhu30s60WI~?pAR5;TfLJP1hiobB`vC42Zj6x+i2{6M^XVxxST)>Ga zB?>^GcCjx43x;EG@=;elLKjc#8Ziivd zt1T^Xa`Fmo$S6Qa#<7&AFoKX}sPLw?IJgH*VQjyLI1Cq~!_kzc485r;(7A2pEN_Ck zASqZ*JD4827F;9DfiqwUok@>UPI;9Px;2NmiOn^k#;;zAO4+k6+a~iIP)*s%> zFuwWp%^k`pvdwW#)XHwkc)#!{r>M$SK28aeqG&KSyta+hRe}0?X`6cAk1}C_MlMkAA)yLnW?V0|J}r}dtdzw25Fq!r%hE%Thu>)Ds+pn!dw<(aMI|-9Z%)N~z9=XC@C|+A@_<0#u)*`@uZ!7f7CNo39LKLEU2f{#}D>R^1@; zG97Tv8Mkx6>L8Fpva_s)9VE531mg!DDxPqcv+dl5+u$j-kSP?y46QQjBV?+}&?z+# zu#wcpQrJz(H}6AbPmcgobl@)?7bWgz{W83xOwdJrql zpt;|KyFlT`<<3asFk3V=T9^lOI#&l%mq|v>4t0YDKB)PFX5d?Uln|{f(yY>-K>D#O zF>~*Id?|TB!`oxdJ0DOwQ>j`ybGs2t zP&1!fNIOxY>9c)yTtHt&v4s&#R%&(#r}|7m1_H{F`~;i{)46f18UqwgW-;FLAku-) zSfnsvKy5-_RYJzd-KMQ~a&0j3+Wz*S^Oh%^jGlnM6$9ZtZ*4ie@8Li@m?+G$Du6~Z zn_z;Ps+=O0e-C{FYG&`Qw|X>XJ(@+sgzd2X>UBO3d1G&XAFRw+byanZQ#cb$pd)Ik zG?B@2ASapI)1R`njUc+z7=$Kg!`#ZD5HhX9_NMeW?`=mPI6pvh_6i8}Z+^>ow`KdK zCLrHCQICz^JgQX9tMR?H9cXyJ#iIxTOdijhcWu&sQ~A??XCtsrMdl4Bt*MOQZpMv0 zMb3F*U_#s9fEe%J<6fC4E@k}u{Oe86Ce9ljY9vY-T~V?x7t=X$RVS*-f5!3Mel}SC z&#E^UmP++5mbb2+W8*k|b=oCy&GvJgE7>8F50=BsX64sX*{$<;9Y0pr+ev;z_B`IT zl74*mrVEVx7x7k8upQi(&4=P9rTba9<-5K!n6ql3kLw*p$rC9oG2A)1dusNq59{)S zFX|88Wnzbd1K!{HxVzw7#f;WVTeZ7(AE7Mk+qY!piKR0`?OweMZU1HBolQUJ@e1%Kvu4kDIxVsqa z)ZwqAS=>@~Fa z;=$eQAXm6i2u<08oS1hAoC{5RaXBEpEeGyfhuC{XfTVEqlq=wY^g?vc)DU{%(;fvttxoQ7MG?Aa&?h1S=FKu=()p7IPn z*?1WWdZq$y`BPY_9;t!X(*xP9!f;lXG96y{y)oO|3iAodfx?hUujY1%FDvfmUcwA?vKdK zeaFeK_;mf<^;Eh1N@Gx@hev^`Be|&}D<#kGN>s1VHCm}?j%N91RTZk;-gXWO1JyS> z&!&2wO^evie*AyvEWJ* z=AtNSd6l2sBcu_5O&m#c`%v;**KYRCfh#P9TI$l1`>v(e z<#T_2UqK;O;F*?k_EL9B^XJZ}uEAE#!scLY1cm|yTW~RSAI)dS95cwBDbRT^I%YKnM;?epf#|Pb4gK9c}ZUONfH>i zlOHG#YIcoe-*kz7>$YE!n%3_B8B4~R+S~mj6~l^jVSYsA+pMPEMggxeGNv#_B8=Ft z=(*&Vy#HMj>)q#;{I0jk^qn4UitZ?OqesN2GQYsAHkVvhgjsFbIr{Kc?Js0Br#VS2R!qO*jM}lZ{`Y<`?0qC^49Vc zHg?57I;bG|x=P+DC@AeK3`_Tam)BC3D~xLFOv}a6UH#fSK2>H4`py=fRS$j6+v(4S zRtg5*4p%DG5$rH_n8%g$=48*CX9KUiy*X6QORh?e@@FZMS*59%TSS|CTXIp6hdiY! z#n0dK(tb`Kr&AjF_DXA`UtU4w^}$w7YFDl@H@97oD(!8QWU8gE!u+%XUb&jbA4u!S z!z5T>OQ}a+ey6*FqX<)lbKG67NAjBaXY-ZUIs8agPrB!&0jVOQC$O^YY*uGPOJ}o- zs;_^br~u29v_!qj_2?bAc_}@$svQYrTSjkqj zyen+(X#3Py8VKggY6%Q%PAyWr1?k*7cIE~}g-7SIKl@*Q+sDaOrn_=-BR^-RV4amg zdGA=sl{}YpPGGdM`E8_ISMNZ9i@ZzGlh^3VOOpl_aH2|6{pD%Rc~LwUWx1!PoRge< zJ-;Z>RS?L#B+pG9ma?V8$yJdZ$?po%2TGeSb+P4`B2vgM3UVE+!1$k4&F!gesYAmN z?Vg`1-tLq~l@B)$s&fSc9i@Vf&jJNJJ&~*qAKtkW%ksRLQp(A!7*6l(8!n3&h+%g$ z2HhO?Q|<4Ov|g`l>Ky2Jo8C73R(ZXDXH1@YXUEN+7WF`Q&!C@6R)37Ye`{sgP^({S zSy(3A1Q*08y9J*+22`aT${@HKoHg|JN?(jehk9pkl{7i)9Y2uY(b3czUREY}8#ENw zQ_&yO+%dq5Y4#UNZbt4eDwDc?>TitbI-4>Sel~DG-V&MY?>4N;6G|$>q8kSz0{Ojy zVW7(4w2I+gNqa?;YFJVw^jGD&^bZEAnreDLu*V?P1Lo*p*K`J6$eetO$Qjn^daaFXff{ zrC(x~v3KV3-j(M^v`XH&y0)dKxTfcZ4+llN1a+3m{qv;Z6=7j{*if2KnwlBWo~}9@ zE;$>SDrqY%OHT>s^yTMWFKyxUMhZCl%UbjHr{{SH_G3NnneCFQLQZ618egJtecLKw z^$5G*IijN6s7`i4c~hh$-S7I&EDF7|>VExfbfbHV>p*U6x_f(WZc{$Qk&ec!ycAa6zx=SDyCvEITj?^K{9Je(To~k>=8)N=XeA z@Kq9*XxIJxG^sQ?J+LS>&$TJ=QdZW^$lfcijj4eiti}jwTSTFv0BcT9&6T!Pwz#CU ze2!KP^K$dr2C$aYw-GK^+}x6rE4tWWl`TDfX-(1PewA5@DE`jq^fD~U%`Zh&lox>w zmb$fI?^+}+t_2a2f*_C7LZL7(E$yt39VC?cbKVsthoxZselDf?;jZ2N9m!JG+s~57 z=4MP-5GgN@gvYShyk1w&{FsO!&X77Cg`4rO?(~KUY zP@$(W;OUE@!Kz_3A0E^QLrtMaOi&6+K@XFnCrMG>vUMZF4jyw035H}5+sN^yqr?c? z14oEl_v97tUvv(CT2Pt{vK+Z4X~r!PKQOjWL!!%`uzmtV@SO4kBt2I%-mDK}!{3 zsUp~kIcC$DR2oxc#*$H!WcE(-04EXEL6^o7Q=LR6N$^SHY~R`yOlCGGLBe6lcnxAR zrXHMc>m;(RHKuK)(j8>fc(LsRk!?aY?J3k+Omhdpa(x{{G(|R*Df6whuuBk8S=sbD zNq{4j&XU;Gf*2reiCsf32yZ5mQ`!17raqIEO;w1vEi0f+nnFa2mj$GX%^XY297@cN zucW!>*d>Tf>Wod(WhPD%=&!FrLa!CsGW9V>SwOtZwoXKiht7)3*cPUaaK*)RMG4(8 zhvO{5KuD(?%t>sjkOj1eK&vKo5>sdBEa+KGW99@T$pY%KX^y&dP-BwBH(o^DDzk+~ z(j-)-KBrcf<}UJO%b`1FN!ge}!Z}?+Yt8nBD)G<}i7luLbi&MqL7}l_bVsNKnT;=$#->a$2Zl@`@jWeKG9}yw3CLpt!h;@KK!Grn*#S2QoYpQ5|K}1~H7C2@?iU1gbV+W>cL&+ai0mi0h7Yy8+IDk&2hu zGsR}DV(64@gUGhkn8}n=StV4^Taws>DfV^L2Q#2=710}HJZ849d$wIm_J()~Eo}wX zT0(Oa(VWG;@ws4Tv;?_boiXO9Yw9GUIY0~gaHd(UoYpGh)=B~tGIZT|IW<0qRwtsf zOMGi3n7fQtC+D(6ym&AV8MP&c#>%0&%jnD!+uD`%+7&b>3Ef?6*9!J23jkFxB^WaY zOvS80!gS2F1LIUk?CK=6S~-ZytrgM10$I9rN0F_f#I{9`2by%u-oTQBgKUJ3x0cY4 z%gr1`CXTtjjuI{?3PegM;kt{s%oX%nxvisQL#+&}v*3YqxtDBU>GBjJYJ;5DfMn*i zihNnwSgVA7T8_bRvqS+&sAcZ65<74}rrbAP!hIkygVW+A8y$0aVBSd*FbphJ&H)2p zmDoAw(4F*Y&*VIo7zTyMlAD3MIf^hx3tB5&QDhdc3ta$Zny^GvXE_fH0PM#R23O9j z1!d-fPtnt}L5&;1>J+k#&!8@_K`xgiK_2=*!b_C|fX0sN)3;{Rpb-asQ-#?6wA?nq zm{%(?bI7H(h-{%jP!uTtSuPhC!#xLdLVYIVw&Ze?^i3UQ8^LoOWxh-aM(G8|s|fn#n~Gf3tXAfG zT;%H{F;N&Z9bxE^gHRLnX)G#g86p%eTR$UrfLTvz|(8FqxTBvn7w5{OX zV!H=&I2jDs#7WnbDFGH`I*4qK196E=oh4>$U2q3q2MHDU#0gZI>)RqX69I=n*10H2j`>qNHhI9a(%XbK4o zt4XUI-q68-6M&*ips9d#Ik-#!C=JPsz=|mFgfKNoZRk zcF1{7`dF^TA>cGlvfC zyNj5ojhS^+JCPnUUJnENcc;>x>cJjng2di=1?*uu8*fa?v3+U`XL8t7CWI|#eWobe zG)=@kooxbDSlPBBiTyKO=4t9iXJe3O!&8Y#OOE|hyW_^p_-s39P_)?2A=@;`g5E-`#mB)3O6lIFL}&MfP?2rl}<+kN`9oW6mPe)?D9bBD2#Hs`Cn7 zo!r)4POUXIb%MAfwoA`8dj^IfGIPoSg9lzUW6F3U5wj(m3QfTY;AM^weX=0~F>{jJ z*2+xcvoUbtB#~JIGCYXFzzlZoKziU@5-QL*8v>#(%|Q;MY!?sSDzbeBo5-g&0{KJ0 za>%B#b0EpFgG)e81rF;#rM2c@Y&k7H2f2fjjCvdrC*b@QC{tp}>8*>gI$fT-1cEOI z#sI1)pgM&69N;}VGl%CS!JJFDsX%vdA-Qdu#3TV(sR<+uObFI86OcB31uY(BKEAEs zrzO7^T)h zjF5w~V8F?aB3=u)?FtBpSgSs-6~br({!C80vRhLp@*1X`jVhwvwXfM}O4!C-Lf zjCqb?2pPb!v=)h(yDR|CVdLktg6E1LvIA*@Swi%uCV<0=xGb4T9m<6u)!_m`0hu_h zpt0aI2@D5xA9@Xa%N1MFmh9jEIN}Tnh9HEXR~@Xb=T}#$Xg`A$bt- z>Zm+N8J7t&V3{vV9#9AAlMELUb(!8O0)DWE5llk-2I(Ip5)j?YTI4hkqgFze~?X2Lsn`QkD_e=OJt{zfh72a z*>L&9lC0R?&!JrUlNp1q84%6H!kBHVHR9`hLBCDx8J2tU93 zqYEK(-{EiL0nbdC6Nj+-?3JeoEtcCD9S1yot66~XS7+``gp1x#rX&D{2$S6r-Ws>G z0HMyAn|~qPX}WcNBH)$l-N^`t9QVCJxS>twn-hTPeCYv%@6=XL5LzYGFE|N!%-DyA zu=$#*0^wr2#ECxv3Y!dB2=Dlp<{_Lh!0bopeZ1ZF6yVjlp{Eg23dg@jxOsKP@+82s zkC(?F?A>+u5yBrnu;z&X6AtwSB5ct+RF2Rzcb4{Pz`fsHc13vazO@vgKD+TFLac|w z5CfL%8$N~b{PG+7k^%p?wWSW>nysC)C4eX2L3N-raA9=#dxZR{ zlUJPstjszWk8ra2x6cu}->zMJ9TGY%r0xvlvLLf_7yg@u6E!YF)%qqLK6AaqJKopc58+|rvY zgvtu%iwIY5?CwW+qCLv42=IkKM~rZpmh?5kNRgF!F<|YY`WS=;rQY=j{nx4HT?Ldk zCj=oJ%Q3u;aNFk+Z5iN&1g0Cp5A)ik2-jW-`47TVYsTAL1MGN`o`mo#@8vHMMt{8X zRSDq3I94>mx%z!|2m|vD&M5^fx17a6sQutl8A3OA>v3|x-1on3L-;A0a{;04wBbJy zo<1kCE(3gRzT_u_=D$?5A&lL&#q4Lm$DMB?5iSUis71)ro@!7Icq292584gX9Wa06E@y;)wg2ZF!u7%NN`w-v1*Di2Ma82x4gbodQy$Dmi^H)^?{{HdD z;|RYy{Pa1(Bl`YJssS7G289TzR;TVD41GYIaSQOad$||F>Af3^5$@XmdKh8RwD66$ z0f)~`%0Rer#kqF~Gk#fV^$TFnw%Vfzzwh#BLKq+ZfqDn?_@N7~zlW-#$Z_ z_&nP9K42?HcQ?YNgSk}*BNA6ltp&V4|H%%7vxR@=|4btX2&Ii=YZY4Yy1&f#Qa){@URYN zi~{i2^Fz)E7kwi-k1*uU;y)1Ha;aF|0;toy`2@n9d*8GoyfPtTX)EAR+LQ={8_crr zAxy8d(0>8=Zd08vLaUcMuOU3P`#)N3fX$=gw;)_Bo}YzKNR#y0$=Ly+?lRL3nT0Q>)j2`uTpx5MtjCHX$sj`-%1&;Aju(9)!+)Ki@`pK4#Syc+c{r20s z5I$1;zVaR5yrAeq2!sBf{uJT$6S;;xfD;z35+K}O{J0Wf-df+u?*aRt{>4UU=X)X_ zq4<;0UkHCYB45`FxWd3O8R3Eaj^7YI`F_ueKEQNsY!cPdhy4TwN3HWV9lL%ql#GqFQpQWq6{s3r9 z7w<>7`=-ewgw>lX=Y9m7_R1*`p=U_f&j<@gM~(jv;NRkDt_U3$=j0$vE3^EF@U8u$ zwVwbjTf9yoJQ~#Bj{j((kuFw@}99|+&)Z(lP2xN24J353TV9(aLJ;i13mGoXpGAOc}{?3()s zYo`CIKL|MULI8%)cjeGEgxBsSjrtpKl-pt_gigO-&q8=EVsjrt<-|8X3<0jr*qeax z1bs>i!WTEsn+yXk+hP%pF!I%dy9jGTcIv4C4aWS(8=-&lv8xE>i{a}C;nSyMf4;g2 z;Wp;FOoSI&T6z$E2oij+1-N!-bUeaSC(kq^>{v)&JPPoutGD(bjApq0g7D$9chg4$ z2KLV=LRfzE;?U@s=<5Ns;NK`HW8m(R7Tje*@5TU*!jGYMT5x0nWgKNZd?SrE;23y^ z&VetdgIOBdI}Xkm5AU_%bv$g1gQvB|!uDj!6xf~sNYtJHd*Pc$;pZSG!s|r5#w5Jf z6nx)!ICDJI9S29oL)|I(`^ivCbCw>wL-i(5^x)_;csCus6-5{7O@|iXYx?1y+6=&n z_})pB1@O$69(-rYYzll|8-)h5Nqs2u;dL(Tn+Qp4_@`*oVj>yJ^YA1?3)2+&V=g{`{z=oLVNR|C3L1C?AL?q>q1S`4|Miy z*rN;Y7D1c(P;(({o8avmgUk!zJ(79>NI4&LK!w+NussvbLUPWBXXzGFR#Lv9{6JyA z7eLbCJ7vr$Uqdm4A7L*bctzHO_G^Qj=;%b)Miw#w{vlgKR*cG6 zcqMFmEZ8%$Vr1)M;oPzKKW+SV6x13G?~n%|k3pqhi&%9aZt{M4{i1;{8uLFVevO57%GC-I^6=;`urJN7OXC0AuZfLg70x z&PB_^;r8-NQ_)lS9gEFLV)#iA^6w8l=3Dp%g@CMH5BTAUv&N>G)s)!dzuuZXjuLz$ z=^L|=2R-i1wfbcgr8>LR%9}#j)zC7}93J90p0fwOdLf~y>loY+BifD4vv*hm&riHr za|XVgfoQ(^Cyr{PmZsK=+uE`P@I=PGJJstn*V@vxXdDQ?y~JWYeDv`LJLm7=XXUJ) zd*h#;#6|trwPJrek>N$&gBuZ}#XqWfq!ua0!)B*+c$nC9VA|qQ6zlI~YlZN$ZN`U# zk7!Z$ESkG*mKJ5H^LT#)&9w~ooN|TV&mhGxW2Y|~r|B2jy(g<%E2e5Bv>xOt;rH3d zL--Rhng(N6EHp3HqAb^uKVL&?e&i6Lp;IFDE@ODm<#GR&(V9c}08lhqCWmOWSHjR} zO04+r@iRucT)mYlg&zp%y;j)+rxS`Ig(nr&c7I&sSd9VTr;njrw5Mfw5u*&X_RTM~ z(gke@kv7O$XuRO3-v|RBuTNSJ+Omd2+iuU+hg!*~*0zm>i;XneAZ6NR$h{gvRvobo zV!JqicM^V{&p_M#{X)&5*aO9PhqWlAHpnxu)!w^CQ>=eCEL^Nbm@N{1J`%oc`N7Lz zsf5juc1YGD_Epmp4SS&0-bMb~M+}>=4eQ2V19eAHNMoBPcmqG7O>zFPaKjji^%0vU z_~jC^rT2wZ_u;o!h-;CxmhW88JE`fbMvQ;iJgGxsP)OS#YvIPGk(wMYTv6K4FC)}1 zqRXUVpL@7|G8Z0VA;ch^h!}Fxu*n9AOIoM?Wbhok{a>y}I4r3{QoWPo=>0&GABDem z*~3uk-3B+uuQj4x!sf{ab-uU1#2n!bQisTiv?yD?ElrDq$CL(+9e`)>5pRsJ&65+{ zEgqx+j3WIDcReG**v4vxQor!gbQ_Jak!(X+6ruU*_Rk3!BThsLPh5)}6w)2-Yh#wf zX9tj{{Gw^FxNO+ie}wyHPi0LTuNh_1qH%{E4H8ZOOChyE5*+z-o6FWqOkgqMlBBVb zEQ$yY=@6$%@(@`IG21wTZAL5#?-z1&ZD1SHHb_sw*^Xd<=Nd7{GsrGS^?V(2L~|{& z%i8mE8maKS8}8;L!5Y%kw`}3rt*K7~;g?5|VaI7|;aw(2StCYlzoK18p^&x6ei4cy znT4b;lFX4dNV6GX08$#l=1E^B{fjhF!bQmOBEtE?g< zv_x-(XW9tsMT|LOHm6>l`UJmHK>967m55TzH5^3_3Sqrumr27Wt@r$)k~D~c=x;;} z(nJWaq!5+KeWd2enBp*eC>{bLL3*SP(dlbJ^FWoPf58KR1ltf6Wlhu~O%xZNFaWTP ze>F&UnGi1a$y)ZtQ50O|lL;~>hH}JuN!KF>h15Jj4y5p;ZIJ#&1P=0&WWNYwul{pg zeK9;{Mg%FcLBg={zyUv8OIQ!d`iN~9M3<3m;4y_9Y_b+=aQS~@03>0oMp2|4k_x%|Qh4MJD09HoOL_`Zh?5cg%W zL6Xez@J!K!02IxU=J7~GdIfPUVuUDUgUBoIY9u6$jZAxpS~#;IKEzWI(nOIqstGYH zG&=luwnijIBvq0&Pc%p}_Wxv2B&Cr~M2;5<0ot0Rg4{=%2om1zUt)|fHsLANHdcLq zkNH;!(D*X$DJaFl4S>`#VQhG4BSU}|g-px{+rZr%IV@g_)COTa`WSjTataNjE2anT%hgf33-F`wo&NA{D`PI1-nU@ar`V zk~U9<8`3L@T$Jo9*)P(1iHrpA$w>Bv#_JfN-fX>4Q$i|Ff+<`7N}WC%b}Z#*9L{+a6IuBQpvu_+#>b;fFvCDOkb z<2m2L6yjfYNb>wIB}Lh@{wu45{BXo<$bd+sbGTQM+R%_5$@63wBel^)`5*`9B*qIr zG)3cjq!?(hS7^*;B*NnPJYk}wZP*)3zq^y@GK#QxmvJ4AG^o4I_D}e77DCIU6OnvK z6CD}rrl~~^z(1~q8pQLc<>`r4_hJ4)q-g|iXyz$MUnANef)s_YIWoeMJWD7l_S@JS zg<~mX>WClG(3iDdl)b}viq4Y11K_(1anBynArX+sTDDh@=IkL!37(S2?fah%!jtZJ zZbN3ve{4CqYK<0ULrhwy1EDCON+R5lym4cd+3fIs zEW6WToF;QAS#Zn-eg%>k!|MO!v964v6z9lZI+G2e-)}_jQ2ok%R@zv~IqegkxmucV zvnfHc45lk6E{@ZvmyARt=@AC-vLv7!zUDILn+7vCcqAWZQB8E{EB1XcLdyi1#@as| zzBPuTb9Vt+Hz1>)!YjH2MmcV})8C|e(IK2*Q9wdOg!>oi%Qzouthc&;TH|4mu-^9C z4lN>&flq4Sv+Vyig&`#LPgQ^aycS6x zcmksl!}|HR{nKE5(uNj=94|!e zD8~lwB||pS2F}>T{43UYWn?NWA`l*c`ccIW-V4e(Kb z_O(JIO6;`XzdJmhV(4Y77eh{)H4Rpa9vpN8-WcLYmT6J8kG|i^CgznRA%JvPd{9s= zJR_=hy2hBv4oOnE`y_yX_0!lJAk>Zf9 z_ea*kCnrWG_VT51@rD#!!f%1G@wA7`R+nwdgh#~jLo?wJ1P(0<&e-s&jG3#>&86Uq zBGo&>qC~hMO_bDOoQIEkm*%6$)!Y@s#;{VL;a+@DjLiqf&(H*VvR`=GgKPs29E1*W z+d$XCYY`cVbR1XnDaAv}hz^l2BRhlyW<)|{hb)anZ87F-N57y-PXRaKucxNV=gJ3b-Lxq4 zZVJz{V7ZBii$vZ@>X1AX9+&GhSF=_~<`$N8_7z_ZN0D)?_@j;RJdhr7h|nZ?I_VB( z`DQ|G zp)_!NAIpaiI4zy@m5Zj!BuAMrE~IcYj2&Az(aRVX5r{m7w0RH)1bSm7h`7&0TmeOY7JBu9~hLUJ!k1yZ0v$fJ-paB?6SfXD%2ci)}*`#1_2Q>d-8 z!}r5SrEVBJ2TGZLp7Se+L9AnwahV7lWUM6l5LYh}W5njiY0?92?ze%V8iFN_ZG-{v z&_*x-={@9Zm|Pwv#++0Xeg>IUYPyW`22wB1Yrl+mr!3W`R&68e6N=SC)TJ2v6J2c~kXGElghym~rKqQ>x>10NPxYu1{*dxY< z&wPo@fr0|!63uwsuVPI*3ZH|+voCTuNPUrBNrcf6`oc#UpVy&&;bQzNR+1)4c#8Gi zx7P+?y0qi!=<8aP#K`fDhvBn)cq&2~`zfyfivcYPX@`V6R9_6=;$fgMY$7G6cr`y? zW1z|Oc1Z-Y%lVrrlgH zbpmk+VhZv1ujMwJV9EHU$>;HfjS&fdPrmmlC!=I5NvV zHNR;+{GvEHg(27U$jqF`V9D79ksgrw23d>LJfg~G!g~KZ!6J8k^{rFGxyUyLSbZjF&EKwp)b40~%lMRRM6m>`h7B-ja0mdHVY zPk7?@POP=Q9%lh$PNd)D!U7TKt0%fFsUEN4UOdIp3?+WQZkA@e$iP9E4XF)siGW-; zA?MJvMSK4mu=vq{BZGaUx#SKAa9zGD}k4{2uJN3VH;w7 zoJ?Ry?mc0?$7cZ%i4bq#3_#Ks3Q{i#MUi$ml2j1BOwMk|#ZNMGAYw`^aX*LTdE6_B zz%g>alAMf?4oggY$Og&82+vYR2$q=8kwZ!5QPJxvH!Px5tF${WS!yhb6oW_||1b95 zJWR*(jsL%%nZek{l6@I#LK;QL_K-EoBt=ptOG%bdLbiE`?3rwdVp2-hNfg;0DQjg! zD9elxC5Fgg%sjvIzR%b7e0x5}_rKpCzvFitkI(TrWbV1|`?}BT+|T!UUKEFsFY?&` z3_ZF_f)OoB;&u=P47@YCadq|Q^O)or^FAt z^Y?a-K`q0?DnyA3Zm*4$#cTOK;<;JBRj_Fm+ym5?^1Q1|^Jz6On5@=a_T63lZ(_7@ zlRiO0sS}7zVHt>?evtj-z)Q_5M5w?@Lw(xC{*niH;msco=QFPHbsp%3OPNJF?XGA@ zRgsmM*P&dgUNR=YO?{BxaHTSsSkN%g^+jd$v7=x@l7z>twsEB*m`%k&K#MuS1IZVDL%#DPdk6Ud}gFaZdWN+qFAXob!( zH@_&Mf+he$Dfj+&g~7$E(qkEoNNAF(9H@vTmQgGSE zO)LZhA6F46d8IU_c^ftb@~UUdaenucG({k{4LV00PDNbuNNF?R#@(H^su2iziO8Fl4F7k({ zO02p1qBzo!S3@)Qi+nGaN=eaQpdFf7LOHm+VT~`Yqs`oEc1~?28XKO+NRd5IzYimY zX(OqtI*P5tX?K#|PZIsC6()+pOr2ZfAK8dJUD?OW*7!bWQ7gW{lyh^%@j+c<&8 zE=yh(Pk5_YTI2xtAE!cXrFZ>@!!G1AZY~8?shhG;7axp?+@(2}9A+aZc8za@O)aXo zjJ9Jdam*Y^3GyNSJj}Ll#O@Czm!ipP+*C@LB;hsf%#-lUiBt407#oMv$pG!O)NnH} zK^lhSZBn{dx_%=V&|z-Kv}>uw&5BsI2}Yy;$DOmOVDfB~38*3BRH!n=#ai*_r8CJg z6UNO)dE@US!I1J#1(yF7#a3T)W9W<8$v*FLHSLeKuQj%dT_l*e}`T z-~&}TkdSl<75pxxp}*atH}6Cn92odOjTDr3sS$jj(v|E1)(O#bR_G+t#KH!X7%&@~ zqB&TX@*&<=Z>v(sv*811zL#2r`>nwWo$7R)Tei)myt0jBIAj@)f)zpqKUp`$=I1pw z4athQd7Ee(`695Yh>&GBe;A~Orc815Ap>rY$}N5`iipCl-o-Lpa}!*l!yD=UXYp_7 z;$3FLXLHJM?6Suo=2TP_wB||*)%IYKORKkR@1RfK|7^AuN&;dBiBX(Yahs6xT$KSs0LEKAUjVIxITsR{hJ{?^8lK*4*{6g97VjZYk@KkW;AF z*1s1`s%4$qAS&23Qa&dG@jv?ov$>J44ckExutF}W$)?modX{%Ru%%`dnfL50qpDC| zT^i-OG?cQE14!3RakP!g*zml&c`#g4Egu5hCaiERY*131?6;UU z{bcMHzRl}dbJs=K`WLdy3bhtMbOY<_3jO80r;kegOEVQ{Y^@Yyzd*_YP{Rq-oE}ve z@&NikH$p7?KMbI|>>JYWt-mBAuDNAuZJK-HQfl7huQv+5SE15+3HeHnt2%v$L~>fz z33(uycF3zCrHu3WRC?W{OOIQYXX;qpeIC&e5Q}Aul zPUf6jB?E9B-msbt4d5;#nEFunfG8Wa%;H})Z$4L0>*je4jv1ShzuK}}f_m35%;hK< zCaH*Rw2kgED_re4H~4-TQ`z>w{6fb2?bKSi5eE6fe(^3XN}>U{OPwVg>BOEJdhL_J z!m29SO67Stic9)H-o-LLD0P4L2QB)@wdPK)($!HH+daIZo($N0xA02&F3o_Xl>as5 zo1mA%B`2bGG`4#eVKa-@60Lg|E3`s{C2}c`=-Ev{^k6os75Xkd*`O4|#*1tSkz7@yuI!9IelHrM-OQK!XU|jHEd||0{=H zs}X5feD#@Ae}6zmyShfoy;RNWC=zE5c{|zf0=k6#f>2HZm&Ag{p!8ITFahKN_+))0 zdc)lm84>+l(z_4YZW%ON%BSn5Jc>=REQ;QsK*Hj6e)#|C2P2)NSa3WfmYTgFy=@Vj z5h6IE=;c%v{l@q2{CV#Q>Qn!a>Qfs>m=#-h#=9|6%lRnnN$H2uXpi;8?y7R>Ot7Wu zgL3mS1XrXOcZfOj*9Nnnv3GF^+f5q$;$t7yFRBo&paV=~N&Z*Ai(pda0<;9XlU8T; zn|EX^^_6j>p0ijCA}d0B9ysjV+0O_t7}F`!!p<}jpC3nD*dbw?Ebl}%VfWZ z$G8iay7pCYSLdJVjDFv$P6)-jqP{A(v5Ab~6=a5hUzGv43zU_<3!o76Lf$k@X0s&P zF_&7Z?x{w$0ASI6T0YuaY05sqBPyX_8+aoj>HSyZW$JpHHQlAZN58=(RFvt_yW^X( z_z7#;4VH$yo9}JTo5#itER;{yg(7HVqbX7%SC@f?YYI$5p}B@M7s8a?=CGD)Ts*5f2kq! zcAkzdAsnSNgg3d1yqnfaX?Nqhwk~@1aC>?X4R^74R(QPkALU9K|1*>0iba{UdABM{ zd_k332}SmacafA=x_Z|&`{Pg1s@i=DA8I+@ZGnq53FB&L4Kyw{>WZzaHgSObuwgyn;uGAFQrYr1m#29FdS;Mkrm!EU(_;+ zi110d*EaHMcQqpAz!U`Vt)EQzMjHl@^rn&bAIM`PRw$1+=v}-EEV!nwyireHdRkE3 z+S}QnMsEAZrlX=x?%m02NLGMHd>_geV7qhPw@1UTDSi**g2_p zk=N!fmZ7TJ?w4k;j@=Kwu%V+5|5JVc zUKzWIRh1A5fmM})!^M87=-Cx2M}>$vsSvA06*8;J)EC(HTXK{|hr;u7uTOuWrfo8h zTYKDdDrkIB=J{?c{#M*^_51id#dA;yBj17O>0RELc`k3yZ{mwqEY&N*b~32I!W--| z+^Z|(Qo_Bre4RYn!yjz&RtpCoVtjwe?O9QjIdvm#;Re7=^JMu;T<$Goy~^#KW?!sfX~-wTHqI_f_o)pNbhqOHDF3g`dpSlIpji{r9~vK ztX^GAa{r?Jg4li4*cQ2~E!-^QxqH5CBLb_tOf(2|0A^E2I;a9Duc<5ZUil#(iAs54 z?aGxwjG(sdKwhXpYlKGlR!1quon^o_DqnmufCJ@T3uI6FvQiO`4GJ|G3Zbrkx@zgO z5mrY51rA}GQMLAbxHM=u^j!!nIF&lWYlDX*QpEr3)7sIYisS=lDO zS*wBZK`~cq*c^nm=s-igl)NHzAtATY8h?cg=2!~>AMm-_TRZY zDCQxT5F+kUGxpz_q8z#80Elg=3>tbPZg0;UY*$bPi)Q1K*-D&d-L|VU56^lt!u-9m z=xTwavkb)|pi*kR+o0|yd&&D~*4|m-m}w6`?k^mrf2DoZKjE$5cWHhKGYX-QFAdFn ze|Gt@*Z)3Hx6(f`{XhdLeW(XXjY>5(nL!fTEMC)Z)K}~!9ShRs+{{4_7~km63q(rd zQ~g=&R|wBv?Ov{6!3bNVB$USQ)Me0gMr~U)OIqcFdDll6YB?w(b+N2e&fop5K(|#b z+myHJUNnHZq~06-8??-CQtupWGg!LFH0PiXBtZ#Ig_5l*BFG!lx7C)R5ysWna!Osx zA72xY=&XM`mo8wqL^2cwtA?IUfw8&N_)Pm%`E7e7(G6*6{Vt1{)_4_dlQZM#eLCiA-{eOt{YBb78}@dvRV;*~R-A z=U=Z^vk%PpsKUtc5e6+v%3Dnvvb14v+2bj4NMYks3-2}Fmj(}5Ad;dyPc3Ki%X?SV zvRaf>K0!{A^l#E+@fsj_PbNHaI>HpH8ee&hoo?kTG-dUaNE6p&-9_VNaoH}HS8kLqq$p3bGEGPf$AWB#P z2W$#Ff9SnKcdHxUS66y9FJxkl4?OaR_yt<-BcfKV0G1BX14%>rMgv7ybm!`Ff81yM zhY}Os3d)yz$#IsR60gzdD2D7W>!h^vm$cTIQkb4WUSdE=^svI?`v)NuN z|Mq+L*^Cug{juI1_cgOpNeYY%2&v%ur8Z=Xn5!(KZK$Sd=GHa7Wo_ikZcrXZVD-z{ z6ik4M9&FR>-G|n1lQT+PmBOY#N+_>24u6Rz)lL+&A?J}tr{sChjXUDHq(Q-Q z7Yv~GK4Ia_r*BAXt~!eSQgwf|_RX(KMOs-_4d5z=685`z*R=hAwSLI>HD2aj5UTyI z35CVQ(h^|e-=#`aiZoCod(Nn>_Z$CrpS?4)pvfrkcEvTKZ4&p6ZY;;Ky5#lNu2rg6 z0prHza5(de^2&~wQRGYC z1+&F|IPIm)5mu+8=hfecANBUu=@ABTczp80Xel6T7|6R$Ce%5xMUL)p9ck~In^&$B zfQGIHo=0HkOnv@jev>kAV8i?#>k(;w!Tand3zil#aiv?YC@7-@G%u>lK!_kzhnJT< zyVhDF#3A|F@{7&~T`cp|t%_20)C>rWeJg!c;f_+DcS|Uw(-Q-Io_;XM0GcF3A0`)= zp69&?gH$R!m()Fk`mRUXmBqFXhfQIHczRd|B^2rltEcSfd#+5YqoNPhC5AC&5!-2;B`TYS4 zR6o+XSZdV08*}fTD`@aiSiC+EBZcVkz$$fe&ec)ga0J%PRE%w2w6M4$Gy~jzWZ>(P z7SnJk)H+N$SZ9{7jryH4YwfNkmZ(Xi9X-W!So!%c)n%?2Whl*#p&XQkl#AdE<#`w| zBWc~k)up(gDFQyZc!7$`BTeelRXRsW&#Edt4LndO6?0E_;-HC zWIIv`M*+3KJy3@aabTC*n6gcF1-VzlF!Ui(x#W#1TZDTxwHLGg=Pug?C!#qT)ofnx zFJ}iAw#os=tpB?`$3JMiCl*X7EHTkD75kO**cyXcbGR4y16eHHN}p~@MyYnm|H^r~ znz++t_-f40^Iidyx~fHLr3hOZ)55q z7u&D0Hid>I+*Fj_>s2OwBbf>fE7&i5QD8V~IFdC*@WF;IzJqe0bj6DG*Yge{nt1mY%=MJG;4PHcfsSWl;=0 z2_{u3Ad-Dko6X-J#IliC$m6>o>L0!3|ll)NOC=#NV)ek^8P z$HceR49W~@w#TX$E?Cd_ht8cAD~ngZGgJfUR>uBaE<0bO!Q32s_F`6DIk5ItnI2jEoQN^{+DgO$*AXqMY=iE_$41*|mexiA+Ox`Cnj`Y1w3=NfzoiC@P5MZ^INfwv=9&6g6i#viA6Wb*+`mLK-)|$F@D1$IiLHl$V)HUY^t|K zi(;(=5v)UV5%b|S7o9IBYT2z6uUORc@zyrT0(*cEAr87<{$B0d7b;|+AyWB#VwcL| zN9iZW)$IG}lac1u!J-#;%W>U9Hcb|N7?u3)LqVQDe*2?u(kx)jx9^dqPZm^^l@LnZ zZ_JIVFAzGe3DDfK_`Oteh%OWnte!dVN^DT!cuIspA7VyT!IF+h92h^blN&}3N z#;?#0-i05lpS;`F`iH*My6sxaj9Z0GtzMe{ z&91NOHIP8n8Qz>nciF~z*k$fQRpJV$OPsu7b-f0WmQdQEL7t6-Bq@S#*O$pJ&sBv zs1NZRbPfW!6vi=7EzsmA#+Ly6-?SHZN+Cm43cNvTQ3E=lr7#=cHDdgVdJPPhl3%~R z>iY<5VQKkL?<*}&){R3E1_T#rddjit5n*n)q>2bnuS}j*2WJ_hwi3p6ADGvwl$w{u zw!7b0@~U%7E?)2QX$72RP`)R~8TQtnqYBzddH6PfyL5ON@iM#tq44;%5RMQP9RI-K zTGkg$=-d48WC12?M6EqPgq-x%)7|~{E4|x_N2G}utOLBE;$S|@TVqp{g@nTZScew< zHtiL3zoLKe%qib1A7T&*9!cNeCg${C+e-W>on@}656}tmche5HkF*VejM3BvGi(a; zQ&jX|0NR1z4g4rA#Ir*DD0sus*ba4HpX`B0|)yJtswXdf3<#_7!C!JZ>rW{)^EmqyY`EuL~H2X2L?R{ z6w$HkX(edu|5_Sa%7)!{_+s1$3g z=Z}r}_fP>lo(2st__@3fODb5c9ySF;u*29g$485Ia1>cA)i$&`Up>*U>Ry5@V^mfMPC^4+MB3L5zmI+kjUOL>Yr^iALH7kJ!i*G|hQim%M_{2^1j@uyd zm--uIdsMzK0jNp@Rwacr3t_XfUqW6@1;aKd^ZPnSx2bRZcV0>STwJVwn>APwVPKmO zrH7=rA*V4RSu7q%u#aZbk)2mJXPp@wjC>zy^306~4IE|fawZ!(u85P7_Ah+=`hYwp z_Uji%$(%(%p_ptrlg+HvSmv7NP|@3&gr|5 zN?pb?ay;90- zzNEvL(#DthbG6YDR;a^?j&cO{Ps_caE-Dnx_wWjvB($1M@f%cX)fe?%d$ddC!nP9+ z(3)Pd0iC`J?<;b{Tjd|J$^k`0x(zgm=KVwaewFg>GU{0G3(bbJq^c5efUz%qwsZM| zhC~o?<=!HfKK{iRy@cn$CqsFy;dx7+JlsAQN+Xru7i~UH3U!YAT}qbWVzHvSH9vjS zP~i8kI)0*OFzE#M(!)P}o^xmlDLB`D1)(?;jMe>Ss;si8zhidPE%9J~ZsBPWX`}4( z=U1+jh+ZFv-T-@`Aq?%}SO-+4>O*t3)5w2hWT%Gh7ax6l#s|jSd$~l0q@6YUop52w zU#%kzKnnkzLJNu)^E8Iac^axR|hap-_Cdxt*|Ro2$^Fxg}( zsK;yl3HTXt3JFP_48`1vj5l6?Ov1p$B^PX~BVcm39f$k|jx=>WonV{N=I7LmU{(YZ zpdemQ!PK%WN$2a%|atz@2*N(y)NDihPGzcHv~wGL@%&0p&qVJd9-e$pOe zO6UEqYgxO?cn;B9cIS%sg<7UUr|!XxQB^NLZ?}>uif}KN^noOG@!2}x|7?SS#;87Y zb9#?h7Yp7{YJg5i7%}ahMRI6~md{^$ug6ES!Us5g9BxjE3>0Gn1r_Xf#RoZ{u?lkT~>EYZ`U&dQjlMUM}JGt_N3|GSMRRl6Zq@DvB zz(%8*ox2kK_{TwWgE$cQ=p}fAC;)v(0$Di<_Zzo|z(;wWK$Ynv_}Hvat1vw9sZOP4 zl{09zxMPQkMMfI#nsHzHr*SrAihN->U^e9qlsUnE?XG#9?rtS-;)~w8^JTiR7Ix2_ zEm5qxO(2twun-^T*aw4)<-hgwhhsg4T?R80f*K?dglSVf58GfJPWXqFDPw$pr?%)> z*u<}C+48n@&}tJZqg52fL9hFu$UQG67(;`ZPAR3i_r`#?_nffC*A6gM*AZ=#_U_?d zn;VR8+Q(%p4VApV9%uu+Qe!=^P=sa-R#5N>TS>%mtyIRu10_ZK^57}G6wo1|xGGg99HK#|t= z!E4#+gF3o{_ExgSij?E7(55fFgxG`s(S0V|$NcavU=lj$juldZ%$T}kro=6p4F}tt z_D%99k~C!TivRImYCWf2VUs$sZOSdFqwBe67>M$sDdS|C(f9;XAzfAH5?PLQlemjM&ka2GHqv8OJc8WorYI=eut zYkLVC2K0=(bdDf7Bfd*1Paz7*ldOR+b@2d-{{CjwA#qd(_Z}>>jM3_eHL`ydXlvB2 zyxWCE^t*s^k>a8=Aol(rk4W2&l9zWudA*CN9(*#bM?|M*Dhv~^g$gfsX}HTA3ltLw za{VqcqY#SyQX~;Zi+9yBxdp|qq>fIbqjn{c7*d|+fovtfGNrtKMdOu8*5$N^(NP@I zn_2wv0k1BqW_=dh>kDmBZ{W;!m>OO1SKyB#Uike)gV?bK#Xs=4r?G8?HYrbQ}m zpxG#U^U07`Hx@o*m$k%>wqc^}Cyx$xth=%vRaek8TvBR4L&!^ujy{k}d@`YRNP^N= zE%(8Jk(L2qQ6*H&S2=TMM%rcoeHRQsK^C4@4S;f>utE_)t z_2(|sa`MtkuSnq%abxPUIuD)frXE1D)FT6UN&l=G0et|3?vFzd|qrA&aNqFmzK8BBeaxHjN?_-Bb}J zY=7ss3LZ0jVuvCZZR3II(CMK!g5ApKLt52C8emw)iziy{Yi#UT7d;;g69C(cSv_rD zu%Y~J*2nLk4|e^j#*FXt>y=TF_MAEuJ>&}-`qw|%`|q<$6i zeOWvO2$dAzgXmt}WxB|)L@)re@D)3cy$|^=j4$$qN~u685Cb)eoUI}e5E?tB zL(Yx0k@l1i&F$d2vQSp2lNz`STZxx~g;ll8R-!i$bM5XX0wQ$<7D17Xw9TMkd6%Ym zV&54s;Pv3?k$hLyz7{`;F403`p}Z6BUKF*Qd{Wdh4}=;&HdrSj&Ejc2;t~v?aS9Kl z(CaLImpm}dc_2K;UHV-(oE*v#B1GgM_+(b7;6Rpv(i{8uss{xp6UZ6xQWM+Bj^5y1 zA)5m51s2t)8x~E=U$sd}kPkyzF>(KYcsS|l8^ME3v;=5(S#uCNs)L`=NX(|tL!!J1 zvmp*BBIS9=%giShfA7?Dz9J^>#NDS4McQ+5Yh{g^+0>rLWBVWUL}Hy&V@a-oGc)7S zY$5NWUqvf+6j4w_d^!D=syEmaegmo0xpXX^41+G-Kj?b*w$iGlU!J;WQHMW+2e&fK z?t?0eq=OdE92V6>vw@?rLV#tu43>t1)n(YYQne_{;1W42?X^fbdA9x)dpZ!V8%mFW z3O`DHCf@S< zFAmRuQ{fGD(7m}oj&2-fWtmU@^2gryNCHLQ6)LdmC7@vWa^y=jCPorjCa%*JT8*t6 zKu3)_&30Jel;f$}A`OTxHHeUbaty+${a{vAY6magGQOxDH^g16kV91Td@=~dGG6#` zwVVwS`an`TI7Vt6@U+mP_&ZvnK;x59hTW>02(yKDTcL>5t!FEdWt4*^XCM?0r1YW? z8Xj2Y<*80L#_qDqq~*f5=D;^?BvGgSGyAmw}n7IDxOk~KygFuo1Od^%BP#W83` zsQ~~>9b^)etPskh0aShQT}TRj+PZj58*mxr4Lbr&JyU9>dWmHuJkn-Y@8E1dnxj;G zk;LG;nAM{1qAZAxVpDXID1^FN?EN2Jv%{z?@=0+rY>EcOs*1>$5CUzZ z?}8dp#TRxRr6=3uv&k$T2n|E2pD&H7?f5FNb0(+kN+NvS18k6Y1wY88v z6OYV4D@>dJh#YJ}9R!UX-}Xtrcr&^wcKVGj-i2Ry%z5u?QoR7xO;H;irH-_>WV2<1 zikh?@U;cPSAeg#%g{WanxC;%SR7SpV=QfPnm{ZjljoLVCBJIKQ9e2yYK{{fvRi2+^ zKqsxUq-O!CDuf1`;!P=k@ne}8G_r*N9?Ysh=OcnDC{Sv`?}Bu`(Q?+;QZ`T;YGDKS z0BVqthP*oJl1p0cGD*w7NR71{zzSmzZ;RY9Y8&Y!S1f}6+0X8&FY#yev=LinutNOssS~6tXxgaDawy087Y<0))j#;|SArHF zyY%m~lAj;X6{q~~bn^pEcdM^A|QRL)t& z>akyZvXYk-rXD)lpuHe$wQ%SS93EBPV(BPgqi2QHvv8fM?JIpqv>*&=W6dB!S6y+ICvp?+0j)pGJNr*Oc|4pN2KI6L#nqVx>0XwfZe>_4) z#C3i7he+F7igf_Bqe_nlf<@@|WXV(+iV%^pBh{Fge_H>s+fKR%iE71MIV!Dbouy-q zVJr2MF*gXT#(HP~U+1jW$9-rOxMPXdtYh=WYC+4ki>`|?>#4y6WlD!3~-dqBP?rSs(ZK9gTEru^W? zrA5emxa719wTWHf9sN}BlQA4bhzjz7hPp!klC-`uR?7ER*+KUU&{iL)&XQeW!;Lby z#gtwC)i7l*9dhg&{2z$M#V|GPYGpm zx||(stM6c9u+_LCY8@bN=p`*+Bj$9uz@oa9{?|4R@d^zq{@iOkX#C) zrw%91?cRg`HW2L?SF&Osd6(mu-6M*qjiZQADPR$rH(W30C}+e~S|(VdQ0t)I1);bL z^q3AAMFTXu9y3kMf+`10HksQ=1*<;cv(_99Kq&pmnb~7T1bJQqgp@xjSL!TQq~VvJ z&K8)RJIxc*Mj?Z;H-k&`uGD*PEPPSEtK5xE@+s%N!^LF7QE^XAxzjenx(Bn92kenL zy3Qs5)5$Kwz1sE}ulkTm7KH>&B7kh{e0tAPQKo1%)f+GXCY!q|zq_xloTBqb`G@<6 z;ZQMGYwlC-jf=Y3Kg(mx+U-wN4#G+lUWEe#Z)hfvRi`v-KJg`wS#f)coB@pD_Lj@t z^s=0Ebp<_t3?U-`n#K5~6sQ&%a$<&i;ACd*ThTAFGNuGyXOC>EE;O_0?j))%}L@ zN+^yF!%c;;RUdjgj&363GnfmGeAU}LTLvKb&yBmgIS5}w5orO`ch9RUmgO_FE1=mz ztRCV(Hg#a`nVr(8qVg3puI!IpB=XdBx|Sr+HYvkyM*R}>^b}>q;zM1m9t9W33AeBf ze27g^R2*q%_>fCLSaiQq{8QeqCX*UApDDG-+Dfbgt|MAh*~WYSW7%W!TF5Tey!-m4 zYec~-M**ecE{*lP=b9dq)8LsI1Y`d`^=(mvw5GEu6$Ul9Dq+RKuZMM%x_PU&KfEYM zQfsl3#s{pPS_h`C;J~PY^&gqj_G9r<)cDf2v-PS+juiF%8B}5^z%w=n z8@gW_6L~kq{vK7v20rIn{MM>uP>W9Xe9=t~D^`b-2ht~??fqCH$^?U+9r{5P>6~<% zDqR3^grPR7Z6MT|SOySh%uV5j7vvA!Z(Z~YBq8N;DSIZ9(U_V-=V!WbRZK}#3hiyx)S!0kz! zu=-TV2)mUGR^S|xWo2g1lS>K`Rox5sB9-)&&?u5`{fMXJRF>EQ`{qa4T}I4z|5~D( zi23*BR$lZNR3(v=y2O|^;uJ-FxURnNydt02ltYUfi!0=x+NW990w#9X$1&S#)G6_p~zN6hsg5YFPzKL_>w@4IYR)7jrT1odLmPC{#II{o&E-6Q!^J@AnHx zh(71q_3wmj)P6xIIww_c;Lr11^x?`+pP4J|$69%eU%oO%A4SL^G)q-f%L zm3b_)H9Ycx96Aa$e2b?ZJMFQ9Ftiufo0K#BuL!GqL73MK;GOt_xhOW}?MIL9lFqIg zft_uPQ3k+iM=cX&V=GlvF&GH@p)K4fb0{A&tjCNme9s(V8-*ZHsG}&UyaD{hNb9aM9@Lm09y-{#kHB*$E|4*3c5a2%9Wsu^OZO1CFL<7=2|CHiRH$P{ zC{2evfbTP9|EVqWi4^0Gs;aR2(G3EbRhT$ZnKC->b2BW@dv%Hj$Q5{lnL%1XphF%S z!fa|X5hC;~gSXWCivO+e+{+S;YJP(U(h{uVfYMPK^2sQ3W+6FU&{YhYjnE8z2xx8L z%=ZOkhvy-=wS30=<;%4<3BTy<`>}0mep$hI)#?ESKDncZoRC3#3B8?w ztH9vWf6l=4eP1klFWA1NIcsJ~kkdmd-{1Jrv-N_2Z>N_@=2vRg5g3IA2(ej*iY$|3 z40JjPb77R($nDak$7mIRnq^ydxhr0sW*9X|$g05>&-<*s%sOL)mK_19X%;d|I%|wR z0cKa>EP=w;o>ibzzE2k3Ki?QS8MIrNj%yxRVC=#sRgF)xSTwUy|56iR`}efRm`Nz) z94ORj=9b0N4s^18)2U*=IwU-HMh>OdAPv6Xc1XiVhm{pjRRBsn#6iuCo9CAKF7>S!>Qp&qP7{3}Sp z4cl!ytB(^MwOyR!hA=leK!@ZfPKEY^fpdu4n_6OnbnYadsVZas)D@w=%Xl@tgy(?hL3tAHI-v|7fY|)VtzLI(8Mj%qoXtoxa{FNmVJ^Fe;IEF)C4G60~TXy5Ag(p`9m;w&WNC_Upz^`|lP1@TYh3H<2y? z4J+_Blp6HLU>*83+z>n625-O>!f`b^o#d)w0%?yt_I#HK@_yznsox6?NsH;}TeLb8*Qxsr z;*C5TxD<_7(EuIhX@JNJ6ah%pZ4T{NcFy>D$VI9DWk{6|0 zSYrp@-qm#uOV&~6w(Hm(Yl+Y{dJKF2xWvqcQ_V)#ALOl>dG?@qE}A6d5*_kt+Pu1zOlzXk1W>3tW?*3O zH+Z1d%>h9HFyJm+$NtBvw~^pcXMk$Rhg5PG)TIQ>=O zv|^$+N=G~|kY-!h)rmX+)O1V|ZPic%>+sj-?>cAVF?&(__ZY3B%!Ux9wS9TUZ<2#m z?@Oax1`yzWW9XTzp>Ar%puRVX%J{A;pmo+AD!3h05| zq&kJ1&Y$nfo=7@qjOr{NnA-Z6{G#a!&D&Rgj-9y+0+09^oTcL1?EJRKJCBRM2xL|< zZ?u=71VPQ*ZrW8QZBSq&8xAN+ON;&jPv7g8@>Tl*sLCOaZe4Ks;~Tiw$Kuntn2=%(O458eKD;e8=Xb&m-LJcz1iaAStXhXr3GMZFRQ0?D(pMyCY(WCO3V0r?} zwBhjc4%@68_(1zYw#ycy316x$V$wUXEwT;?gI37|k=UP(=Z=wLp0b|up~Ytxjve}{ z$ACyyG_Cjj_}8SI&n|O`p$Ws7MH(7HafyRLwPYKLiUUlkGlbX_ z5FhvDj94cjjSgJoF2XnGC}%-S=w0kG)Bt&;s84iO$u9;wgYG!pPSdr_&SXkGX?(QLp5r*S>l@HOr9F&Z}>So)6GL#(wq(TjCedf^EdHHKN z2X+^KY?U*5_ww-4QZNB#m$v4U#V;DesoV@Q`S`Jtz2p=Eoz}0_Hi~XBqc^qcDw8So z1aReEADDTBHdFAv^loL>UJ-ymq(nGX?*|l8R z#+e7E4@9tFK8IkwZhI>^y&BNrudj5Hia3YV(_jW;Yqri? z`_G}{gD4dC3;6~StVn09yFM3cutItTm3x`q1TJ=K)4F8^o25Jtl^L}H+W_5G4G#^W zJiQjG9MFfb=zd?F$7H}W2SBUnr9Cn7j6ek+j4dmN?0Or$zF1B$15}Gtg1}Sj;GTIc zWAfGbM)v>b?dq1f~f(_f3q zoM}biF)$c0$30NkF^s)B{*4HM9MKP^cVPlx0G5%|a?!Iz3`!4y)jdR|agZxC?0WO< zUnCp8{=;Dx#0O~HzJfIFGoRz*)2-f+a^r&;(|;BkDsq-f?3cP7$TEDO@OMz%EFPZ; zZKDbnpb%J5(CX^Wkz3(td!+_i^lH5-+2(U#;V6BVMRjW(f`#grGnEQU zh&W(46#dLDb645oe&4xY_L0R)|)o!=Hz9V zomT?eQWoVnY)0{EmD+!L%XxuqVI5Eopcoa-9P{#^K=WXSh9YTvG&$&2;(dXPQ0!sc zUlqHRmidUI^Zhbesv^gp6szZZ;mscoOKDLzn}Iqon*!MpSkyAz!nDXJ6XQs$s`O15 zR=JAQO7-A{ejSW+P=?-2mnMXQ=TVgki=^~&asHlWQWjGdr9m1<-^rgpIhG>Fytv8% z`-R3P)uzF zmK^ltpE03u(9i?3)9e%S#rPBL6e7Ce0O-b7`n6mreN(qRr^;AyM9=eGI^%>V`5u1k z4bkbheB+;zx~TR|`Lm+W3j~wjfQHyg0)>ZYI%`56u;=NO}HQh!Pc#Wda@x zK0vq9r>Dc?W7A}y(I}xA55(11#`dK}Y!E;uHiaDp@vl=b8Igdb0M1hy62hQMl!nL` zY=g6e$z&@#XV(@aC>mQ)!psqbv5&8esX5V@kVXykA$Nfg(y)T&jUO&t_Aj?#1uhn& z`1oYCU+4{Zp6~iIez6Sw@~JIQ=+we|w!a9a!!k5on~|@^oOKa~yNH+7 zGspP0*;#G>O*@VkwT$7w#nQWY7nw=ssw(9zi)xb|KqY9XD@?B9nJLgx#2mw+{pYFY zs*Ze4j&xC%6f>%^9=iAH>m!`GbPRabSEBTADrm)2dyl}@>e_PKB|Agbt6@c2g&|{P zxFZ~;fF4{&coXggV-Z3qL{HsR>jV6AV#Ue`18->TK+6Y84}O6ib#HJTQADaL0jRJk z7%9cT`tN^yw9NRws_#N7*=2<{VL0F@op*!ifu@D$IgfNp+jd{&vqx+-m~x`h8aaxp zV4C#70QV%I!kVj*LOGB{!gEl~hI~Oo;^n8i7njk$_}F-rXzbDF>vxf=jPeG_SO!*M zQH9sZ#+p(3sPYbjf_gp0ox22JU45Kq(ifl-kZbv0XrH ze_nE&c0BWV|Ds9Jh7|(o1H`6@1<=prZRo>M)5Z#Efg>nZo`)JR8>fmX#MyqAPL5G5 z9h-vakv*UfNAF^V9cr!l>x}fv#8nHmbZLcIL0+xX*qA>}9 z4_Xv&RksrN079XN)Z9>7WrZxGQO3gja-hVwQ)}f4NL8aY92m6@c9NF@<}}I7P#M3P z8y?6&7EbQ1e($q#2pHeRT{soWYMA%~lREL0kruh%ye_yxO+ zCDKdm7ls2&4Ev=4LQKijnpH#}>gWaDrQM9!%ETY;ch25nzm!mn0^}~{I{?t%FkrJl z;*l@C3+^RFfCj)nTro2Kc|n4z`wf~F0G1L87RA-qO`(ktUzEEvF^-Q7c_9>HKB`mh zf}oc|#!Q_{2*m?|0;?=@i3c)x3mU4Y7rM)gmQ!a1LXqgy3$DjuJ_bX^Mbd@{UI{*^zRB)o!A_+&gH zP0xZk!<}O*AFDN7ru2l;5T4&Wqv#aL+vs-@WI!rNHjQXzm>EP2i$R2=6ri85Zt%&Y5w_N)uA>#$TSq5L z_YR9!7%Ks|Z}N%!f<2^UtDlTG07qM0%r|$Pz?tuzc&d>Fq(Ug1B}EpJoWcEN@dzwA z8qN0Lw6lzMi{6yNQ}VCbyKe?hxCNZ2QppHN_KQGOq1%jI=TcmmN#gJWVL=@B?s&GS zv|_SC1$%KA9n=68sXUMC_{q}0GD{ny)|}%tSO(t(Y)ifHjIJ|&7XU90gl)7k@qaS` zh&k^rrJ@x}N%@2LOKYzF8w0*flX2Ht8|5y_v3pL=kkqRRj?jWS0cqKGsh2_}ZER2t&JB9%m=3K4@EJdnjR#CM=KpR|i} z2|m;ZQVu4p;1bKw@*Z~~Uy3>faYBH=3WxN6_4fxXW3xgY$O_e;r`is%j5MZ(OWXzO zR7(;J$;M;@=wbS*sxR(>u~|F;xSpiPCDQ3&!F666??O_vYKGw;fvgW?zW|qqybDDH zW5c~*vs44%rm}eWPyxhvl{_#+rJ$oiR*2!Ch)XC79`Sg?n?(gv@$O4YT0~e}EX@FV zrV#p&sxa0;B?a&+@6sd&=kIY>h@|`%GAq42gU#3C)oBvJ`@t7ESwRheZ$mvp^IRF( z{VKmKE%(~wpsom@L;MXOedu0}^U~91s-Gx3a=b--c!3XU;{o_K@KQ=%@~tdhw-Rl` zC&P!jUpx@q%L>)%K@AXHSceea!0PeIAyP>KdDMH!Wc@G;8GMLi-#KM4ZVx-mTZrL z^B`1AnG*vugC-l?o+@)_xM}{HX*-M^5~-GmVUDa2!=abpd7z32k@5yS55yU~6c5x< zq~MrUQb1V&ndL6c1Av@i8C>GKRL>Ln!lEiEa4#C0tqcL^^U2T<<)FLFR$@kVQ$iV= zPp1DtDbKs`Z8%hlOPAKRyH^5c%k`M;q5|RS$ym{-}wS&ks zy^9rc-V{Pau2NB_>@p01#@6&K^2NJ2eM^g6+{IR6Ms=hGE*9nnaZqN%BZBgJ5GaJ= zfviyPvPWzwE`=59GCBAB!_d9yf@NQy@Ep?nwu&t(|^zI7RPKCITw zSq5-H{Vwm1Et^T%7J)_SDR~*7v!Pz~SB_Z2fj`eOfc2{e0G?nW8J9P%Q|nykiWqZgNXh=|^6v-ij#CD1I)@p-S(WjQ<@p69zb1&#rx#lK9F zku5!TR*kuCze6Z5a5_p}O6TVJnq;p$2z_2rS&ors!S%<;N84nuwL$}rM9o>SU*_m&-CB8rUFMUOyr9)X3B@HPFZm6Yfm8xaA`hSlE(Ma2 z;%0>~He0EFZz!|rCEpWWhNedu#_!TZ6tWDk2P|IkqP&aQ_dr%4uNHPgX$W~43b5{# z8-GU_-lfA*p&@s{qDo$%q?{=f0)q0Yr$_bxX4B#Vg+ia60||}@tcbD=XcjK1j&kSS z2>Ch!M%!0XR?ltC7Biikh3V$o7=yT zPB;K^ssW%pCsOo2ys}V19r=8ZF<%!u`BSjwt0g~9;imq@G8Fp_<~H%qjZ@@IS757P zMaaNBcJs@P!5L4WxI=(JFhJ7hWgd~~T3TPG&kaz`;g5f89Xx&w>;Vpp9#?Kp1{u5Y zV(TC>t!IfkGTMc71RO=R9UY|rIc6_{7Nb(E%fJ$`4C+K$-UDIMX6Wx_WXKk5qrpDj z7iBmiDNS&}HiS!>x(E0dTXEpr{SkKL8Q25La21cXUnOmy^;%RA@V`Q2skNbP7Vc=- zYo9T?LXPgBK{^BzNI96;0pvcAEX@M|Fd)sMx|ePOQdLxZC?Y6>a1E{H|umA}o%>v~$t|Y;Q?xn~Dp}?i+(5AYZ z_ntax!IQ*9KvuAoNAB(td=`BHES{nBx(wfoy$Y5pWU#P&GH?s6>rrea;ZNkNK^BD! zs+?NmV3*lSK!$LyR$;*QKtq7*8awbVK3N&tqD(d6k0MfP@X34^u=v{o5Emx^~5HiV_hy!ZqB~aXO6bzsNg1w|8ek%M_Y|jZ} z_%3R`icSytE&w6ShC`(&gpc$rc^kI!(yCeyl#uC=E=Yq*-~lKTG(OYb(at)y4b7%e zfdA1u?d5Pz*an;)-=(=_WSIa#X^5VuU5nzvtosZ9mQzw{n*7nw1Ava(r3Zb9X!X}r znS-X$>H~u6pqxD=t!Z@*{Eeaw75|j_(;J_6w1*%N%kLRi<3qurj{VM` z*Pg1T(Td)pr7N0`)ni1|Rb4Bv$iMO1Ulw|3Rj1me1x6B{+T5Uzq@Yz~^o(I14uvFv zuM4L%tOpcPE!FWs+D)Y}5M27CBZFkR%kUdJ3&@UXqp;%0ub$6bD&QU+&aLG&7N)R1 zT?J`u4TA7`6^0$R@1JL6=1uk>fe2CRum1Sl*CXxOGrE=FS@e;cT09}sZPB{gnSv0N zU*?GZ|K%3_7E%p0%QYS>Z8?qmHLqY;m^v!7X6jbfTK$ByW9ugPj?Ji=s$F@-|8KW= ze3gAR z(R`-XcbhiH81rzO`7$SQN$sq4GE4XN2hTiid>L!MTOm_D+*>m0U+gK9XTNyuXW2u& z#asW2NgoIf)BXI!HHi&hGQO`jZkQ-IdqGm>G3MBwjuOblWL8XxG_g0AkCLJIZ%4)b zA&qHO90xPwKzhqJq>kHgm_&VdR}{}9=lcGUc;aJYa+aN#A>;ANFMp(^;Vs|1e?q1= zC*R69_9^3gy63z7WZ+PVPJ7Fm*nHc*-y|avi?weaWl|SkD=%4|#O{40GF~+Nqzv#) zt(dPx8RPrn`iC;Y?~@xRw#nJse?8WxoWyw@H_Mcv#>F20te&n_nE&+sGITn=bKNSE znxC3gB+X-1e|sg@n1sK_UJ$g_w72fvDIsUs6?2Oi->K)qKFZY2p?5rsaJ?8f=c2+$!~mTM_f#s4N|RiyBK%AA7o~j0^QPJvI4Jd2xa6 zeIv~9hrWKZtOUJX7Je(|*nS!>gIs%D_~wW-7WNobG+X*BAHM!?Q4_a5vRxe^Pi(FB zGN1Uv%w`pgf70vC#YfT4Pn^~GFKNASP~$@6`$ox7n)tnE^4B)L5>M5V)5dQ!JGDsW z8*fcoECXFXno_>HR4u9>cuv+@H~q)k9&>U`TiJ?~v)ku9VSIa1UX|%A@dKLFlCfgL z?#nxgL*SwiEs|nDsX?k<&h?F+y~BRu$IyLi%Dnp*hbP+ zQs!6B$MTjD6>cR+sJ-*OfwC5-U)T6voxG}kr0MKkKBAIke&w+qlTYOc^WHn7uROTl zwUjNA5px%2*3O=LE7CZPZAFdugV(yt?$6BV)X-zDHkcrzP@!1f{pSixmuZ15*^#pR znTrd`45~l!KUK!=%ffzd*72B4%R7pQc%3FpV``>!Z7S3HRVu%@TIr@GvcJ%u3ttow zyR=L|zxo#cv;mLE2~-cy$S)(`l6O6EyPxs(>EjH$P!aQu_@>|#%P<*t8c%B})@SFl zRV7w>tHh)7`K4c9GRpY6l-eVpm8;dy7ZE7gg+Gs0Fs5^}7MJsw)TzsVm48hBmcR)nw z+0Myb?dK!=Z5n*|jb%%fN^be?+cC$5qAn-1FJ;PP6^k$_y@!u^*RtipgC`~wv=mb! zr&NwQFH_1kJh@WlbE_WnZ|fdaLJs(Ts#2ni1zS|}LS8E`PjvoBWIw+4jtt4ptmqOa zs&A}k|2J~fh>F+|$An@_&Q6qa%HKowKP&cU+^anjP*F zXhqWXc>9)^41X_SnDK`$%QV^KWsBdIT+6_RdIw~P<~wtiody>R)MMEUNb-GUlF>E_dtrA%D$n_$~X5;(ol8nzx zeo&@1clfpZGbIcZ`+o16(m<5aaeqZoO3o@|m~6Foav!}20 zmaz{Fe_tUyrt0GOJCV+VRVshFRQ`t8kCgb`qlL&nj?J+mme91w*f^^$e4{drsDo?y zY8@8rYPV@JawGm&M0BDUi?~sjWkUZySzY9M)derTZa*K@*Q3cR6@^n9AL}dHQcY6Y zuEH{b?Z`_*2aEYshEb(-tKYEB(pRWH%-Va_?k;4m=Bah5g)v=+A5NC#6*|&U#xSZ* zJ~1pqw4Ev?wo-5Lcc^zs_DywzY8c<8v(-hL>sESyC?Tixy3KwvKI7PTJEN?+P^F|i zCSO)plv1zC_d3wc53hVH1I)f(GgDADD#(e$>YNpwtQ6ajK1UAhG=t~;C5CU=tg`K+ zOk&X|3WeQFk-;KXMC;0jmuX>{7 zl(VPK=Qb3)g6sCgE&V!D%wyZjHDwgG)8#IZHYKvt>6*t3*iqwi5oG1D2dn$!2oX3r z>xE*S1>NVWK3}o1pNq-5(<)vHPNSadR7c*jY{cA2l4q`;AgB~y#|2*(H@;?_8$aza z-Jb8*S=jpBUPr~1aIBPwnC^b*l-1e7P%bCOeN}I|I5dZL&#WdI>a%*%H<^;N;1jW^ zPV=+mjh=YEo=Ej;(=IHQdCo;PeH~@e9y;%lZ&CZA3N~eJo|p`=xUL|_f4zUJP_)mI zxXCj5w){iy2;^u={?BS#BJZt#xS)j81>=uOE7vC%KdmC#xZbs~GGODg{GW7`-+He9 zX))4j_*5$OmW0exucgZ&?DO&qkTyCoVXeoiin| zoTJ72UR|HZL>GDMm?YYoM>OpzHK89jPqdl zQXY)ISEM?&N0ryazPLIWw$z0w!-O)wx;<(u9ZoM}5+Z7Eye`w(Yb+Tmxm8z>VfSB4 zdv2z%wJr>Gu~A5G9gy%e(c+4NyM@V5e&NKhFH?7lq?!|9Em#(IJMr7raL3yuU{alRn z6Zh>cZRN$6FnO<-iEF1lBFOW`Z|QD5*o*}=x8;@Hl@SRtJYfFZqr#k(YJRZNm`ZQ0 z?O(unrw=J7BKF&m7yl7>r5nE_Jh`Q#n6#HV>?tH$-L{eVAg*qZMjw~?;}>t+C=8<% z>s6=Mtgs~mNr=bS9NNJuCDmixVoZnQCQsvKCQq$FCQq4%O&+n_qUFMW!W0NoAWVTU z1;P{vQy@%%Fa^RC2vZ3!W0NoAWVTU1;P{vQy@%%Fa^RC2vZ3!W0NoAWVTU1;P{vQy@%%Fa^RC2vZ3!W0No zAWVTU1;P{vQy@%%Fa^RC2vZ3!W0NoAWVTU1;P{vQy@%%Fa^RC z2vZ3!W0NoAWVTU1;P{vQy@%%Fa^RC2vZ3 z!W0NoAWVTU1;P{vQy@%%Fa^RC2vZ3!W0NoAWVTU1;P{vQy@%% zFa^RC2vZvZMJ!0Ft;mg`wJe}4JP*;{e~fu!^uV*;1%E(sjW`s{A*`HeerckI}jll9r= z%=EzR>~VoROVb0nfj@U#%goG9%1X-2$_>b0N$t}!XMZhk4s6>#CUE8My65l8Z(X~d zvnMwv@b9`nV0-4}mbrnEfn!axvfdn5G?10_MOJ!xPEO{~A=$rW1#Vmlj5)Y8=VtFK zfxwPHAp30KrhHytO!gla0wa&5=Zs9>u`O^Rv-!}>q`(gO^7N#UM*~9xNx4~fc4P`s zuFFr70_lN~>4BW{fk0;9c3{Wtz#HOY`d6~5 z^c{ig=XbnuDUf?--N;_P~x4xjBc@0~aojlx2PxXf(dhmb<3| zx#>BXxfio9Wn~6(ljN4KZ|828ZTcrSCn+#4;7}_tCTmCbjwE?dy8M1p&I@DY*W_hM zS@M!QSvzvm19y@FCoapQcVy)*%?$)L29kt!fm~UFL%mZ;@*jKTpF8BXn^}#|-dxgh zRb=k(NuH7|D(&3!(awYU^WAOSZ11kOiWaT()9l_$dKVb~%(BRLE_hnzZy$5mzo%rr zrYBA37Yj|xyQ9L2JD>Z9Hm=yJ(Acdti$77&R5(1j@XlGDv4O|?y%RmQz^jcrto?O& zc9Z;pmeD=~P#+=Gc3IwkF@q&EB?hCnRlX89w zq-O^XrU$kK0=+XYWM0U*ksV0-CVNL9ur23=L!ZnYS;7@x%KvY_a5_^sG!O_}kcY?< z(*x;32-%{nq`;j(k~}9X_qObuP)`12W{+|HTYlk``|m*d7}*;A&!lbgXd$KSi}Qd$ zprvr4{E^E)oeVfja{gom#v}!Hj0-sXC)Y0pwj>3PWxx5^tn4d)1+MQ%lAk8!BxUBv z-@@HHmZZybc8L51vWEt;vzO+4Ju>~h?4tkgbdfy!|95{ndqcn3lAu!5p{a#@9phuC zdd`{kQ4y0;+7&h?=F!c`Q4NhbGP9B~{yfGcdyW_F6ZOQzly-7sN@SV$jd|Pr6H~=A zBcV(D_Ng_mx=-&oahmtt`1@ZOzBO9@?W?%&jBjpYrG&o594+4=Dz4-38p|sj*;K=r z7ouuTjGFkmF>yUVA9|~^F)e&=O`YXyY0N^;%+8&omXtEy_+7QX-MqQfv>lxw@0}N2GWzYgYuj}`pEu$3iUl8ZdckBymhl!cEn|*s@{ASY zR4i%yQ63XtK6>DHZAZv0&vht};f=rl#h8@ndHGruu0Ao(gfVedv%=u z8`$w(@0zanf4;z&IZ+*=Dz%#5cd9WR-cO9~V?4rj#do&xMW%T!nu+CpnX^9HBs`wl zx=B)o86sq#(INiP&JNjYwfB`8IDcS%S(QK1ch9Zf3u=xpQ=--ONR#r+W)avIoMn59 zm}$ueZWSGy-_&Y3xxBEMTzzu7x2rL~%&F*Il+x~MWn-?ICFSESqt_WvT+9pk+RFaE?VA?k zGDam~;c^l3tMQR>y<>$*g#-2%kS}WEaBSD;Galm~YfP$;eS>`9&;|b#H2!4gpHt&H zm;U9waR;vSOO_8^ceP7Kw0}};#G%M(&O<(Fu(HOCdGfu&B0|`>p0b$2`P&ys$ea8} zvcse`S`{wgDeiH8H{zseQ2LkR#{XB8NvJ)cP1A0j^N(4uY}z}KCiSbhVzI@NqgRzM zzQX>zzBaz%ra+NeSBl7O{`P4f`qs-zOb7Wyld{8Oyh7&RdoD74|+FVG;)|l#jnzQUs^fnm*MV7dK}71ICp4wy>i{28enb zQm2t`M!RttB3~&nqT0&ToaoS$5G?_B?Or%z|z=Y4+vyr0i|W{kP- z``qVT=UTqka!xEJV^PxxDR{EIhzPKRknsTpAo8Ca!u6^4=IqZ*ybwM^|AYkHZdo2W zFh-Hm!%O>>h9FL-_xI zvK0BNunhJIx+Z=VZlEc!gj;c2`Bf_*1FA?71!b4kbLVow%MLt`C~#cucY7z)!T%%9 z)+t~2_0fnM-sXqE_W9*nU(fUeAV8k` z_F|C${to}kWa+qjdp>=uFW;w{+Yz#1-U9XkeTehp4`G9}4PZa;p4jK}*t(zY%;-NO zs9@-lg27G$|1~d!3Nr#J^bOM@DxhHgGr^@+vZIgFr#_#8IhuA39VRjAeBcev>*yRD z!^zLf^iHfS;k?T3?G+I16;?3`G*h6MQaIU{l>OHv@3s|AkO}~yO~>7_Y2p-oft#o; zycsixMX0yBj5|IN7V8C9OyqG!i(oc+IqExlpVahFksC6fPY^3 zvheHt*t!5pWPX2MjOEgS#HdMujYP+Z-lMwWz0y}VwL0t?=iQM0g`?ly&($vuuQtWO zr$FoY{hc4f0>PX=wUVH#xC#j36%;vR>HWu?-a|X}L!AA%P?e>nSIOfLq8w(X+I z-*?8PLFS-f3g zFciT=D_G<*42Nht_`%W9nch2C$q8N&x3>KwuCM$JT^~B!y`isbhZ2A868>9dta{vt z-b226cdk!a#4iyy;BdDW_C4Qp@v{}7msuRvPow`UkauCN_l3n#f_}+w@xtej$f89b z-dP_}2UJPY`Hu@&KIc3kFj(!59bep? z>P4zQzp*ftOwoQL=tqju5J7#gSVfNQ%Pf+#f9OS=tP+ln)0iI;J^Vw-3hxdO-2}Zt z<5v{~KL~QBdi8q5@;JT@uU}Z}Uej^P*|oiibGFl) zI6S&Hux=K|%VW;u;g_pm-+!kv`fQlMzfVEmHbt~ILN&4mLaEC z&wG>{o~+;(XQCxv8%stFewlDYZi}TML_L_}(dV+QSr8e4m7QaKG9R&7{a4UfvXQ{L zwME*EUSwh*4`A(S)Q7?^aMs~-q;ve-_J&z75AtxR3J47UTjp*H_--N6ivdy^=9LK% z%=dP_a)dn?3&uKI#?S{P;9M?sAh#_?~_X;>F>$@`h`lH5S| z;Az^jORXzC_X|16?C5@>#N+6zS#`6GzB^v=#465H2;={?B5rJ%@N29nGlbt~)g(F~ zTHn{+iS&HY&gHvjd`iEr3H~cx*TlDrSk&>AQYCg$ObEdr+V}^;Mo>%X$htUcI$8Kv z56#YD!euE&fw3dtBg72LdJ}EiVk`~O7aJDp%%oVy?^ofA8OUGpNwfl> z(MwK7T|5Q~$p+3&P*vE&3@0KP^uSx*`E!VZK1aB${Z(6(#`+@c$_I}r5|YjD7Nzxu zlvourdA)CMUT1N?6cU5Iyoj;+eVWg!p=jh`Rh*rN;q?2i7v(MTU)3#<>O6bwDi z@}|KyjTs>QsD(j`5XK`Q=cpPve7~*i;QWCsqWhkX5`lS%voE(Id3_0g;PSsFMI8YHBH2F-qzX+E@p1`=dV;_GwXB!NA#srd5E6FYKdtx( z^o)?B?1ck7LuHb`0~Et(GUKEs|#j(ph>Q`I0?8bWVQ zBk(<3-?S7uR5qvoAVPM=(g4NNo&#+&+tOp+s>9>&1`}<_h3Bh$+MuH~kV=0_A_ZCE zHGC%bYmZ%VD+0r4T#E>Ca6G~h-;S_rVIFnV`mllu;}fH5 zz7TNaK-w@$#sa82(H3a4lIE4{qYpi;2iz&VyY!t}31SA4`7t5$!JKcRt?d1aN2R5+ zr#gZ4lVS$No?vw)f~*9rrV=h-eS(c!Gs^ z{peZXH~B-nh}Of&1D@avi41K$%$ZSe$InyXaQ44JCQ`-X@1lt@<+F}c3}x8K-=%w; zSV>>GNadRrLqa?J%dm=hyFGeFpU@U)fJ18Yq3HID-zwZ#${~DT66<-`^U-Fho*59L zTioO7`fJ~zfh;Wtylh%n4k16`MsPIni#8sG1u!T2?(8J*ilC1s5ds&;e-av-7*-8e zM@U|9@Oh5~CssZ7^nD^2C*K#~?TOED0}9+Dvb!^&liFXM`(qdBMwS(W*M1$rseOK= z{HWjj4kjAv70Rz=!&Gz;bR<_0kOh-@mu11CfuXc%zFk~)=q?OZ&yK!K=N;FhDnx7f zY8%aX=_TYhkbe54g>DSs1~qw)^9qi}$Zc3u8;J#@V9!n;x?b&ULTgb4xyw_6>gf#^d{%)!aXj2=68a!P+ zA8+8(SSD#ueeH4l5e38eq08U#q(n{F`w6!2oo6tgf-k70@I!e4pO5j}DJ#LV_p2BD1JMa__DhSY4~+woY$R{>d24>+ z+}q1NZZd6j4or40*Ax7$TW~QdA$SA~dQMsEng9fLoQ}c7sc-Ws`>MKXzykAd5J{4$ zS@pC7#)S#Kh~(!ihIs(Zz06no0fUG(D3-HmEFs=3Pk>dzs^DBgz%k6}|MErrRXb=u zq6FW7#>=~*mA;n!VZCuTpfNxe;HTrP@!AP8(zCp&w#UChUkhT*PmBuLc$uRh*S3}V z^<>((Zx0t2{%zO0SY$wSC=D6wshGLAK^t|VWj>^BTQzj)BE6&43-Y-;ouNBYuMri= z3kqiG;ev(B0ThJfAaMUXP-6~C4`k<1MAJ@xEg;~#z-zHTbEX5J&?&8+c12LH@+3K# z;lzuAJDRq=4b>1rh69kNljGFW>(4-^l=tO{cPf*_d2YBcA;t-0P#?<1PAbZqboDfRQ!*uaPyR-JdwWW}l_+ z|Em>h574hO{0ae^U>#N!dl@W3l35sWA&(1gTni?#IuAD7_yVbjHV}EOFOdKIsF3t( zZxZZ`Pln0VLcYsqg|k z&Syc59M$gr<*@YOL=g7X!9;Knhm_ zl16{L`!_JWXyOCbRgrcX)tr8uIXN3PJQ~I;q+}*{{E|iFLClVeqV%mJ*!)6-*`tMsfio zd)MWF^>iHCxT{PczJo)dfH)n2T(~Zby|S27(64OK@|)C&T=Z%2R#PeT)D9weMEiSh zxMR%By}{Xl+e7$?JtZoNvHiSi>YctUT($m zxse;n0~^N4G@tqrS3G6GS=u4|3m0SC zMhzKt;H|AZ8X`;PRTY40Z}L;*EcTQhuTke28Sd+fCj?p=cEgv$M#8VXS~wpoLNRJD z0!p4&I^Q=jmhuX<0|V#$>2isF!=~ysdQF~^K+sVaB#<8|E z8hxQGej5zYa^l#vU-fI7SwC&*8mg1YR73c&UdTC7)taW@6j6k5`NbXb#$bt=C_WTt&du#}M*~p2C+8`M$!q+jr!M0)4KR*qb<$ zSmZIlZ8{x-22_b-t4SLB>H*|S-bJ9w^q8{_rB!6YJpw}kbM$mFdM6}=7Ic?>(hMJR z9Owu3O2)u86Y2|5D<@VC%fWfOpa1#5<$1K<&-3DVw7X=xhMO3@e`Da*@#%qtU+Rr? zam|PYLGNCW?CBd_TfQw|lLs113c8X+tfH-xj(wV88-A_ln%r>%33m zl-mewHnOK{;Z@UoorC|yT;e=T3d+1F)UPAy{Rsa>n-BM&fFQC8@$<`;X@*DTH3l5o zehX~p^FtfK9G89=z&hILJp=kY7_m11ft{cm9q>V4Kv9(8wVlWBuF`)CJc5-W`a1uJ zr|+0ewa&^u*cW%wd^<*5UQ2-yUV~?3We-4@>QrhCPpc1K4}oWkPb$Iq zuwDar7pCVw?VGAp0c`rKe;JFtfXqK)3pCd|! z-UvK132==}OXNkq+rK0DgIC``99zpSqIw04fjOCPh;*G~)X?s5Gf!su^)AtZ$ z4bowfvA}22o0dK=VNu%HH37d*U4Z!M=9LX!#PVSy6Q^;%b_GG8v^hU3Owo@Zq`}!x zIP2sw=djm&W7$S;qW!4=!KV(T-ofmLsIm4d^WkzisvG2_?>EMd%X6>^1XWnNIDYs6 zc!$y6MVT=aMblAbo3~>eYn>M_^TbA!d!qYEccMB^!`cpymHoY_sO{j_9=ys15|;TK z#rHXj>w$u!0p|Qs`MWQGIUjI-!u@KPBwAhhMSRAwRbF#@5nb}6((ysUZoS`{2%o)kFMV`$URnZ+@TTcF?0u4W z-~yLTUk?~hwA*9Ky-5I8KHd|75b}VI!7);=IYoP+7eJQlUAK_}G`}Z0X`975?8H+V zLUpWyKhp*NPNo5`X*`Xvf*(dZmkm5w)Q?baN8SMjp=pC}^F3eiQHJ`~*V;K9U?@<8 z)<3ioi)Xo$jb`_XfW`7w~J3c=X{6*6ud*E(aaXqrC&DRreY0ri2 zPUR(F~#)cf+Px@0}bI3+m1CR|9rZyeo03O>KLrxOiy zJs~oGzt_kLfFPYLm*IRJ+1?WBr`#4LH>*;`ow7Z41-bnaqa-? zrA<%CYZHFU`|bpdPJjiNcX-1aN2HO0Rg~w>$x#0dHe*MR0z3EN9!gg9(-kxdH7Zb* z=>IwcAT*ANc`qS|}m0iR;Mk z-ZL)rL1t;?|C3jY~r3vY>UCdLV>;-wPExs%EaB+voi}6kwFW1BkXy(dd=F+HdKY z)lp-6hNhnr@fOhS%C8q=>E+8T4pgn69D_j*g3Ixt(Kat}bkBM_wJj}v1w4|MP{6&8!S(~v7z9MO&k#y^cg(; z=jqm!kpTTS$R9{b>!z0uyuPbHzvxKF#t`oOv4i~f zhUI%wO*(*`L&4x~`R6M_J3z!5(n^_1tEx2GUWIKCsyt{V;pIy=PlR4MpU62dV3>1BPZ|SN?e#vEu$?}E z!A>#`jqX>rQ`f5q6M1-na73^KnP*sC70SNhs7lbdClN!@9fnWgVvBmpJ-UF&V_o|9 zuY5%dXFA?Sh~8uD7?D;OO|HIVi@N;lr=aRBO`hg`gQdnE0gPG0OsXnq$l6Gv6n|I!%Rb^4bt***oZ zNcUS1d`FJ*EP?O}B)ve!Y1RzTe3Ugzdyv28C_=ZZ{*_6(E+jO!6mVNbgU+_)Sq(kFVU8hA1KJ?Em11wE%BTtS2K z`-GspMaw;fzK>7MpMUqm;SN&I_oX(A3()D@^qUcVKjn1fkD;+g2S3p-&sf zg0cL>xib@SyoJV0(fxj6*=f!x4q)w!M>}S@NiXo3su`Tjo-&_-0CNb%vjobko_uLQ5SN1@ za{hY$PEsVSMC8Uv+K2O5Mn>t3afL1KVq|J`B`DWIbLcQy5c0uN8czmB`=`B61%u5|5)Jvn;kI$( zApN6o1fDGuErmO}ov7trMh!iX4P~O*uI(TN&exNW#nI=mlnc8kGW2M>lpffjj&DeI z2`7zArd?368bY_zbeyk%8#osh^9$WE+6<8)|EIHXt9mm0VcMY~73(99YJth)fK7Jm?MJ z52RFbIGOVSJTUP2!%y_yYhYG1fLux4jdMKJD;!M-gcIpGkCvRE0us(C(v{8Afs97q zjhq=kGor0r0hf9Mp3bFL30UW+@)yuER(ix(o|fsoaX=mYMqQhB_=j)ofbx62hNzw@ zQre)!qkbnlsK(Ck+jg1y-=5bz2WKF=T>gZfRLkSas{=WH*Vs(~p8+>cEyujc3ByND zdw&@Jq8Ex3G!yyNdtJZQOC|7wAd>AtBrL%R)(yt;%Mho64DKgKXV7`-yn$w5PD1^h zYdDpb#6xxO-N#;@5P}}JoXj3ZmA@^TQ_PLWQQrLF)Feqf-7n;_Z*QAe(6!3ro#`n5 zYMwA17gVCP7v~ZlmD$S(qYVerY(e$@?~ri;Vw!zqCgt~QBv}Nk)CPSKI}wW27}+@X zYj2A6`4qmXu3XAz^?To0ppD(3KzKH6&nvY% z_fTSV+;v$03>xh^e?Ua#52RpE)sDb{(gd3G+)bh~qautC04}07;cfS)DmzCvlAZ${ z%D!8O`g9viy57GU&(9SOkLg>sn2sGAxCXb;w7r0v@0GpH9({)$#WJRWO@N09)Y^&m zSg*f&jqP9+zD3UiOt{cbo0Iih9qTS&1a1V{D>^rOG zW!}#mu}Y3h?I`W-xg3570NS@4N&5-GPz;DxlT;6x6aF@O*to*T1D{j3Qz6Z(_FkG> zg5w{4{YK(g!d5Pq8}gm!JODgFTj*p2XNBVLaT?@dpMcxeP#mPWi?i7O^d9c)U*?TebYj(1%D?RG#oVZTiFO!(gLoL>d~r! zs7pn}9$oc0YhBC&_G^Sz`*0q9&B!$ie;V!5_qkFDGmNaxIRGgT?fvuLIAtGSjbpJF z?~RNr9HB)RMEyj4fG2Rr*d8c+XK9b8_oS$VeB?W0oaB8zPGiES4*oPbF%4tQr3dfR z-oTM@cmjI3dUXCbD6_F1zugo$oxFYl_#Uu`9~u{U32Z-A)UT~$-|0+9SI?g2HB;cV zTmZXZ{ersbf5C$k@n_aU&9ovy9AmVp&#_PX(p2nv zT|lAXBEIyPk(YH-J`7J**&7Won1M>UP+IfYM1H$@K z2_P+p^w+$F0Pg^fs+KL#j*mWajk5!fI^zF@x42LZtOH(Uz!#jN^Tr3K`dTfYOd5+v zXdXw{_Vvlg`oL>A5AT6~XJo@77FiZBc64rE;v8}w6CLrt0YD~%y6Km#VCb8HBl%}M zeiOIWk-rD$e-+Y;XruA2kaqeOIt4{eJK821&P5f*S-gEHMBr(jdAYwOg|AT92W zD)5hsYJa18b{qiA$^H;Ze!`nLL$spHlgs>m+o>vwIFbe(Adh`%r5_5{D=5nQ8Y^!0 z0Z)Nro#nG1F;Ux08Wj=#u>2!!SL;}paePT-7{LlUucYs0F2RR(cpuus``U8+MH|0$ zWi&qys6Nf}E{(;he6LYu(E8_pSBPWiw7v5R(T)KEtLgbe&mH1(^-gTnN$<$O4S`wo zurUbm>F_QK?Kz#`iA}Zl;erAtj-weq8h6ykPSlOZ;46RdN@xW^nCofUjTiA#ksT#k z&aZ>$P<@jqP=}*OA16yDaKQ$hE69*D5|x28)|rJ#T$K zT1Y}%+fzi=25{f@84~U_hQ1dNa(Oq;mp6DSd5TLBW=C-3Y0hKiX_K$NydYu>1&7-c z^uucRt1y`K@moYEo?KIJ+I2Gy9$s!!M^K3uhFxTjU z!kvB%7Yph0?;tCjr8s}4*9TOA;hpj7SNQFZPyL}Qtd0F&4e6ll;V%ny)2DoDzfdy) z@#coWEm9ux{o7*rBhPzEMT_>+m29I!#bI7YFfy?oJ`>hD5{uhtI&je$REG_;1xUTv zwDV_VB!vQJUxG5CmI@ch{KVN?3+q?|64&*BD!q?g`Y8oiBCh~44VVXqi(v}~N8-?2 zB~;~TWUwwwWoU~RustyYeii6Vt09DouKdu6coVS6$FChQ-LYQ;p@VU>oi${DR9Q-R#~$ z%jaey7NtGXDa*BfLBnPu_`nf()@_R3TzlZ^y%v{ zPcPceql8h7gR}4^>|5ws%bTj_A%sMqXj)mg{lrfsIPN(t4jNw1+#}5X$bE_o+Pax+CE}(T`s&{}e z?-*@1h+J6!-JzAEwd}CJ?RMUxYvu-?WX~ca_*1{Ap{JM=7r)D{WUsgyvHYNJHhv}s zv?SUmmoD?(NyC!A^F&aT3MgvNUs%r0yZFjp6G?BBb>AezCvrE;+epZyww)y@!?dyZ z$`94Ceb&66pA)SlS*@(307J=+J_Y+BfszB$om!i#Z}b8c>7UuZ4Y#y7udCw(t>>A- zDz4NfjP~9*+Ou7=ae$l`I@1%|zt+!i_I;Jodj(BurfZAb+K*;_i4diF@2s?8UfN-4 z%l7S%OjS=V^F;)qYu6UOn;AThH#SQbk`}t4uxMgn#D&-r4zB>`>w*?ns+cM}Q@hza z-PsSLwfWr84$J)CFF2~`sES^-WrG?EB#C`I7gK|mhhnto(El8b{r~9p-xLJrQwpL( z+%MM^(!IKfCzTvj2^0699}MZ4$Mx?k-Smfi*p%`AmjV7wrvIbl z{xrb9V+$*ZJzZU6=wXQVt>}1KQzRnmVdnS-#QAV@aTbr zO8eg?tz%(5J@Wa3Z%~*2p65?8{lDoo|D`JbK@PR(IQ-0PMil84Ig<3kZ+LpaqxYis zX{PX3TzrH-6r?DaFwAwAMs!`nxK=lbG{WpA7gMYjD@Badz%Wvci(w4191&w;q>NQ8 zWyFlTRV)%pHZdk4qm(j=&J=a4I+wXF+G>z68mUNm?D~B%BNUf1V!4vhG-)cC@9#g6 zcAwT5#Ed~~&`1t$7K$u}Y{Tl*Gt70#VaC-Yl;#SV=FWqw8R^z%?Zum0OEpqPWH|i1 ziP1b1-4wfQQekfA)-6I=u2g=%N>iL;%(12%K6Ff;qsmx)U7FL}m8&thu8Z!=i*p#c zP@=iHR>ZV!KATtky`)trGTk((bMJ4}F!E<=_xyPj0a@|to|V+>4bv03!|nNXxMJkhwi zTx+XbozL61%H_q3W^3wZhPfv;Nf^eJ+T7i2lUYP5qS{|?incH!(dkx^g2`oELOEC@ zWGtzjGLhkwNMsPpj~O)Qmvi#O-K8#J zS8EQV5Vba^Q`U)hQPhi(0xh*_}qs<_ux`IoE^Sb6Z+P%=M?O(6y&s zPudTc-rJOtDrK6KXDyG4SO40nX%cQV6pN(YGTCoWnc~CQB4*387f&B3MdvgUQM2nw z*Zl`lO_l8F^Cnkr-lN>k>o(^3=c`*a-J0B1W>e?t9MQ2`CZTKfX+wKcUUO=vA}{A& zX>sTGIh_W^zPbHTvq+jFd2V!xq%M(|kx28ZicOocRqeUWqI;XpWxEWmo5Zft&l#KW zR^GklM;eick!3KYLb-u4oDzz!yPD;>vQ5_+xl6+s@>)CdvJIka7bDkn$u^ZryK-En z%^InTX-(1Ox}GqMM$@ctU6<$DMJ{Lsb6;G#`8p$#K9#Ok=P**aTzr$+B(h!CZ0Z!9 zN^KDqmp;XWQiWLQl9pBp4c0@e)ox9y_*pZINi1%4HND7DrM62~-!#aiLXk|!Fr^^9 z^_Hu){edf0lzN}JCF_=+Jub`6ecqX4kij}`NxP(?)!nkLT$yXNp;pAS|BxqYXADwV zZC)4CyhW0`^}38{E^W!%YPx^;J`_ooSITHQbGPQ6Jtw-QdES|;QFNW{%5C4u+`4}2 znWC9FCDPn~zA2Rv=j9Z?$ZIz+snVQBO?jf+u3IMjJ2yGC&7EC%AkE2c*0|bpWUV<{ zUD6b3SNHYnorf8wJx{7RyZM*H4O?w?S=CzmDYM;Xxo+QlSaQa8%6{J>X|db!)wtQd_TeGB=)T*g zN>A@xtFUjD8XsD=*ecIR?3-(Um49xv+Jt7g-ERNYcI>+8;dOhZM69yeCACb~^D|~+ z>cfY2NvXmvKlIS@&@4=Uu;ug3Pc#oKYwbC$(qomP_R{v$(_1BZ#~!%ar8nEW@1F5CCD)=EqIJs<&-VR@#kS}l}ra!b_ROO!oC+&1(70%^IaXZqEhlD~?C)4B-F-FO`n>S?^VRNZi zbWaRrg>P`>b-Qz(-(t2vl|@XhsWa8EHD{~g#r0P6vnL`c<0}4MejlLCjkTe}!>N~_f6g28Fv0iWe=X+JE=Zgo8sb+z7- z$vQ<+fPl<(YE%0YQ75B$ChI!&tLT~Q77XhCsXXQuW@B=5^E5Jx=GFsQmox{E%;da~ zHMeR+O`A8jG>b&8W^uddR$gx2EvA!Ua!PM8u8dPThh@#V_r=9b?k&x4=Q^e6)~USJ z>XJXr?QEB8&dQpLH>q2dhSKyD)#}{rt?9x}jYTBAFD=cL!As?|o_l^vQ!LAF$?0@4 z&0S1xJCm)EHs61$WHxC!H949pCWA?Z*OoSSu68jFhLPvWncTHvP4N>$Ewias+0HP~ z+5i6le#gCxC_QerZRjRwXjHkb^ChagV@`i%yOT`0!*O1an|u^A0U zyHRYh+EYwc69^L<6=u0nVYLV`xY49!Y!Zc8p|aX+HnZ6v6pPJf8-ss%#;UZLY#2o> zwp$EX9bS~%B$Cxai`gzV$So4F*&valm(c(t#*{)vYym+Qr5y`qpb7?%X)`c3yFnpT z8BF-f2(dPk(SqR^v012OBtnbQ$QV=%rm))NMzL9;sI)7^ayw&TEDD2MY%>XkLItBz zsw6^##A*~Pq!zQ>pa79dq0xYTxU0e#kd6uhfGq50#+qtTn9V|=#cmN>B?g<)VzA+V z5~I{^keDqhlSOQi8?9Ko*q}0-%_g&4VquhGg;8i^RAPfrr83!7LK_yQP?!vm>^%!3 zkt?irNX2LZyOb82T%i=(z!t3AY*#V{6J9kiN+XtKR>)Nrp#*PO#73dgYPQLha-&3v zIpj(Rk`bB=Hj~0^SAb1In*#(1ZAu&C5(^DNgGnR7j6#J0&PHxGp_fo-ms?e4u>sOl zs#Io)!6251ttO$|g4jW9#0{vQQDhN{m7rK`u!*r^P$5*Bj1Y$qbW6Z8#L_~G7|Now z8VweRTQ0VPH^OWvwbG!n3*|3GfJ~jA{Q&$fA6puvt>EYG|=SZc>^h2gP=?5d&FNj6w+uR9V3iqa2p5 zfPzC86?Ti&BoQl>;H1H%kf=O zcwslf2yH^8%4Wj@jRlHhgq4Eh7Nx|_C?wEclNFpZTNElAmMpYVE?Kcoh1dw~g+7T* zX26-jXf=Tq2CLYvQVEd}SQ#tiAqO)R6do9{&}5NI6f~W%OYG2hn6%KKsFgDcq0ypJ zSrs5tjyp;QCMPz-R$wPW3nXVV+7xC9Y{7;=20G}1A}FosXn+;lq={xaZ# z5(aOE#X)N3tgszM zZdZtH;07cNBUQpsU{wHm0|qq#%PAA&LRbzZ9aDojNj5M69ap+#ad zn@mEL3EYz_ZE~2b!6tzqZ7QR|ps-kluvQ!B6Vj+qA`vU>a4Wz}BlrnzRN0|+03Yy4 zs1yV2EkYq&h|+9s#{;p@D3_R&HZfxbzS?17U*G;P7bcxVFVTf?86MbfXB5qUNr!L@zzqPqN@Y~RSEwwT04_!gyc^Yb3A`V0UJUzC z(Mkhw$Ns2Qvwe_zoVfGLKRO8Lu;=zZkd<9L7tVFrTmNht*nfk z4QrNcSe}JDv>RE7Kg-ea7gWJ%+(YA^eJ6F2ntcmSFHN~RGetSNA$gD48n^aJ_>$9W zn(o%W8b0}nb>heEah-7)?xPnqs&Pl-RDPocW1^JbxU>5-3mY5KhyAVb$#;8~EK~KF zZ8p{}yfNt2>{%zD7^i$xWi0w4xpV$|(*z3_FzOA`q?FkCAKs5&vSRV#-& zSC0!@9ER`bH#n}SkA50{+`1ae;0sI7@wK4@*9_65lgW5<~4E2lZ`sN9tg z_v~s{3!;=QXKIdoDY!F0zbkyv@};LFD-s%lvcfH6*0t)taVW>0ts8i%D8(JW%BY`q zYWq$1&chF?oC%LOy9eSQV zr6ex=v}KQUUyDPYpx?Zws%emAU*A%Pu`%hOLon8)t2x^kWr@1s2tWA=y4iwGD^uc> ziyvI8N?xB*S0ivcjLGh#nsRwegX2{Ao^qqxv3o(>=9C79zBZ~MCPOgvl-aS}+&Jro z(V=G2CHlndICuIu)i=hH#D=TYi)XP@6Q|~mD*F^D#m~ZOKHRFmJ9LkT2d9@C; zqj*ZIL)~&Re3^S`=)82l>DT>=%NLIS`o^WqwJq^uqxLl#5Ad3W`na_%Cuh`@IyB?b zQ!a<|{%)y_GT(3*7sa&PY=}5IUELC=Jo2Enb{zAqL#_PQq6trLNq+ZfgVm@yW{6ex zaTPvoXmS~Kg70|h$HJgf;SG**KjoGbx3H#sk2_iKD6L`CS>H^Hm)BYJ)AucNXC|1h z>BpwucFdb1m{650XmKd}2)3vXUaaEPT3#7@=d^|l@R}}LsvDoVUeoESZOQ9<1((A$;k6N`Gi`ITQrr>i=dEuU;5u^3vd|r` z=Phb67B;vu*N(N7JJczmMSkjI>R}0%a&^o6G4eQlYSO0$o*?v;dRI`xP4^i+FDZ1i zI&AuDf+Yzz92alut&DnCgCo4WxaQ+lVbGW?EF>W&K72?^g1+h1sB~QRnSO=$M6C=i zzGt+BKe@OzMKrcnps!IkI?6RA4t=9p?})4#p}*NAY?$_{>WU5=&Ti2+IMjm6ap9%9 zrz;ZlUn=j!H>9+j2|BfA$=odoSlUH(O3jXCE%7Ifaf@Oavh|L}!TUG3jW_h$H!R!d z9%TDjFR@Qk-_h^5+hA%+|KUy1z+(S3T^M?x}w1H;y&R zM}-T9wj`zKmqgAIwAfo63#0byp1Q43r?)pm*ro_hyn0$)G~Zm4Vkmd$%I8iHR5jh5 z79Tt!BgO4D#K)&3%~nU*YU}0+>dG}Uv7%VsgSwNa_bgkRu9hwwI%a$7qXxHQ`@y)` z>UFlG<>3dC-d*5sia4ddepL6=Sgy3B>uVM!CFn8r)VKEDHC}SWD-SyM@KEfkwUwVr z=28Af-8D}8(ZQ=4CpdaJYG3>}2?v)Rtcm)%$(@~IJ6IldV#5eN)UAQGh?@))k%+t1~s&+*j+n#)9T6%bVd|gAtgIc{LC85Hc z8dcQd*xuKKZt?re_vlM%vcrpRzzQ7Y8$PR2->~1PQCE)8JI-3F#uXVIS3-(;>hL}B zjjPrMx2VIj_PJ;IsWWWqT`hItHOfYvEXdg_o{(Y%hWZMO|^!sQm=5CSB2$Ke4Fq2#-!%yvuD|^xZT^vgAN{6i*P} zQr;Bugr^?%>A*4SmY97v&2j2a)ow@B*Fo;ohImzqdRQ?pJ}v`bt$GBzP8|9qGvVMh zwZ+_09u;yn95$YwfEVXk1TD(7De4F6hD)_m)EO;ChojPQpnP6YvOZy$KwqbBsVJX% zcG~)Jg1Zq=Ej`cFWRUE;F{rjO*4!uDR&}}t(!UF{igSgWjSoMz{R4@; zZZXy;xE%uM^-MuajC#of9c(Q@DhQ1#I%vGiQ)dYD5yyFgnz$^tgC~fImxPY?E9D6q z+*Le*-o5hxPvEYJRV|z?XyL)k)!~BuHR1alu|cK0kO%4(J$gC>FhE|seuhAz*FirP zALRL+=Bbwn^pWe`MxEXfo7BSl_(>G>Krczsm&Z2fK^;|8eezDdgSYQM#RmPg1bv;J zS6frH(CrBS`XO(-Q75m)>l@Qy_6lf;}*2c_sQM!EHv z-K|uMf=)xJ;@u5d2>>{(pl05|xtqc5-O>>ngagwC-#%9_Xu_Ab4bKnP$JyBsqF9Dx|n#LqkM*!oJ0&^#XTO70>o9RNAr- z5Tw3iKj2Un?brQmEdQ7n-{M%9eR9X3)9Mco=-`VFTwVyIeX4h4hc8UHsB@e;qp#bu zzeKkxMGzIG9A*ISIUL~$E0ZIBc9g4!iPWbTwpd*$!zyn&5|c^`(^rU2^0E%rsQ-4E zSALeKUU$WP$x?GFTp4v`P&mS{!t%2<*$Ha1M4w`ZrwEsfNdL>YqPz1!e7ySX!lcWw z7C}Qx(#QFoqVOvVhYiv5fZI}=+mX2TyQZqf zq=uS33u5%p^8*gNSn{(zBHfbi7YtzBxgU#7p6qwFTpjdjk{~N3P9RBYQ9eOPP;{e) zci?ipI$^v1k}kEfp~z&SQR-npo7#xleFx(AJBp_jQG?($ zxMw|eTx7-w8mHCvRb~iUnyShLL*Lq56mBa&t!}W!sU8$AYj7M-j^7^?q4}&vFmACs zCca_NWH8@Yp&lm4610BRRIV#FPw}JMIW`Vr6!zbs}jVy1uF$Xr_^>qy1*Q#vZ$A+Pwg4E@8^hkecUGo zo}npX``xA{LxghQpv~*Yt^ZMfDJWbWD%hf2S@cazlzedIjlr8M!>_EJXIbWsk5Z~r zmVUFad=F20YN$AAXl<=)e$~yS;)ZFpdqs=)ul#bKW8TS>jF!6kz@ zC^P4_7u(OAczDkKTyogfo{?==J(Q_Tr3!4tSG6Dd_2F+fE3+#*4G*7gLd79lY3dfs zs@BMyZC0FU2?9k?&{ zB~_LePcxKuNv``@v&D?m@flut>gpE##x$ioJSP#IwONg4B;6X7{J5*jWESVyyYec< z^25J&n-sOOjJ#W^cFAvBx+N<6>9wwIRDjMhhwbMym3EcHoujl{o?5UmY`4CUJ+WA8 z?Rkbns%-q%Q*36*LwEOS`{$w;Yh|accH`;ax-~Ytv?b4`I+$^*`IgA2D9*ro4cIlY zNGwg3bMCxUo3gUI^I4@;a?o9CbsuZ$bfE-$JY6QTo2{RByJVf8ik}zTUENkB>XpWa zPxETUD&Y^s$8+x^M}Ls#&g(+OH1A<^x9IF~p~_-@Dt^|bwAs4Pbk!PB5m0sC`ax_% z?M9NEs`^xU3ngj!D|63QUVqg5B2O)0aDBLoIcE@d+bZ)c zsgudCZtA>MsmieYaO;HG;yV8Q3A^FUi&JLn=Jd`kyX60{_cm@#ool}E zTKOakLbCD!BpYb5LI}itW*{_H8LyBCZNc$uh;BsVwX4A@nyL`+qtIOuA)5_e^KJn@ z5Op^J115FXt(?v{bt>&S%o%kKXTRg6^h|pyZ#!1p*cSWl4cHIN`@3<@yziOw2fWw& zUPB9*u(H;(p67n<`*;6-_p_b{zxg=vk7D(pdxl$@6R%(-ulp8T=T4veeguWsY8pcvAeBbT*9S&*AG^Yo${S{cO-tPwRNuk^!C$% zg^y0ftGBd#RJ|D_=>D07yIbPXz`MiWebU-`ddKA0sn#uTY`}a8EdIVGu{Z*L`cZWv z9t&*$cJr3Sk$Clqcd(t&=J<}^kIc`tz8~22dtU>s^$cE#uFRnY8GFctG@dh$XOil#ogAq8q@gane2%VGa~6`hLsiU3XinTj$WQj~BLlKN6U`yKoAc$Mv7RIa2*f;_i3g z^uJ1c0bc*^NDaiGueZDjiK#mF9cEQL>f3c`!yE)?U(0*A=eg)<-`%(NjecPfgn#9S#%uM}aD~SBD zrzhekquQgJ{!QHXZ44*aJGUhfII-c{Onj>5?da1-cVCO0oO^r!X0rOCgl9-be*G?&=2DfZs}yYI!L)$gD3 zCAMtduxV<34m5joSL@U%_^r9Ay4XPUH)Pq!?_!+@1{R9Tk!om6b+Z*o3wJO?K2nVctx56uQ%;C zSLoMSw;9&dHtte~4J}>0&BxYljl5c#7iiS4T%S>p|4TztQHyPzFBa+bttmX7YtSBu z^tJWAyz!K@FFw>PL}HO7)?wv$Me+;`tG8_HD%M2&b&Mg%iy~%ofj|7J*sRGH@h3bx za+AWZ8wc}E$An^C`oZV9Aa|3Au zYOm}B&z|m+w}oB}6dZ5_dcwb08DW`&#$yf5>XQYLn9VCws6x&{Bc}Y^t8Pi_!Z;aatA_XfCrgt4UcEs+Bt$xuG z5&2DZ{Y8 zSA-AbYGS-!qml5zBi#{cv9|bxy0KlhdIgu$YhJmvDiU9Jl4~gU$vTHJywzLV8*|q? z>_%DGlor{yKFEe&9x7UQI4u%gVKl29Elst#Qj2(~Jr?nc_W3k{A*03D&=b?N1kz7x zS8qCL;97>v+5nfk@_@wF!idcAIPZ6C4cUn8zA60Zza z7!^#>hBZ5eM4CaZZpHRtS(jm?b9IN?v9H%KvLfyLR$ts7(VCXa{8g6RO+6-)&b+## z>4alMyPaE+VX){$GW$TdJHA5xVs3?E6R${XVp(TSzoQMs|DLqrm|Hwm>`uV5eA9x2{=y5B6~HMW!9HN%k_SvcU)=!bU7x@1F& zBC94{RC?YV89d@oGpty{`mB6$m^JS|*1TibAK(fG?SpQ+=z#e=AE{z}QFWjH7Y42) zzbDNR?A^LvZfnulgN_kRu|KX8rLPly%4(%i*2E?4^9GOSJ4y?Zicjs*26KA2g4*=L zIhGnm# ztJ2T!lFH&E6?v!k36g>E4#UZ9Ewu;NWvI8c7;AH1E!N1|Sx3;P5d{l0FRmW!RSVpj z!nO#v-jpNL$C%s^p*X&^uplchT|8k1-;FF!;t3m zu<$~fTHCi(d${;K&+S^l_-aRrjz`VQ-O<|G=abZZFU6Y+)dQZmpy&zIX@)eGm0Ho( zk-{F&kiCc-JjL;j;OkYp_6yK;nGe#*#h8dz_$tEF}$ z4DoOw&o4izjx4uTg^h8|FSoi!*gi#ZaMvKeGQUg{9o(eg*mdW_io?R7-J6!vH^9}( z<6$-!Dav?p3ZFmGFc@}toc7IqukvAtJsINcxw`1I90o}x2YbGXnZm~8`X;*+mx($czpgIkYZzyd4xP*Y#N z;e>e|91=g$-17?uU+lMczp(y!xhTv(f3WcU$!%%IA){=czt=xF{9^oYFt~m&a5|r_ z?XNm!d|tCHr@-!ExYCs|{h&8KFyL9!n0HM4i(awwg_qYm904P*5p>3=W|P((*EHIP z&HLADPl&XG7x-cJfN{T6Ve$IXMH^1mHWn|JpU}vP)s2O0%RYOcur|2e7xx8CRnqfZ z+$g+$+Gfy5-TYwiFmp;~R|nG6xhsVpL9y;UAM0(1pSJsd$+mGePoAYeT!U#Rc*9ki z>a8(35ZHYV?Zq;ZyO#14e7DU>xYR8~YT;3RkSw?6-tp zEDCF^2CX4bCJ4{BuntDMqpHbow%HTI@Tv6 zM9y#WYhD#A`h>1y8ZK|Zv{I5T44D1C)d$jt(sR2d`n_rx)Y_tda4 zAI*2ZRNl67Bj+z~c^+GWI%OAJ$-0;p_jvo6#DbKE6BMb!M zxpra5RH&&w632xZ&FQ{?rXgD7SyOsGqf^7buzk>M$W;s-$g2(%7!l`ja?#eU+tr150K%ZIXrNg7f>vY_F}1xs zBXWlo+X@@lSc9y=B8$}cS;ku|J$91g#3Dh=C~CqyqZm}|I2;4;%w0!@& z_!zs98BBYzj4^u{v3hHb+EQzjn2v?TBDKDAeOML_rK;}Z89bz77t6gDz%JfI8b=$>;`5lU#xqTsWVD#=@o)FN6IoB z&u;BCh1KEkG5N4rM2}c89y5u18!aFjO-WlZU1K)ch+brf$JGax`x=VFVl~qjDKw`Y z7>a9VLek-9KRU0^tNz!DoOX4e_rtZ7)n zGktBfFR;CwkI~2(KHMW65{a3jNP~I=(a-yy3AyJq~V$%3yVWZkKtQPVu@r+li z@L&*!EIh0j*|*ZTVn`fmFfv+8p+<8)A`@~dWZ`u=+%Cn+K0Z>s$#=oH^0=vB*C}gX z4L86(-|Xf^=AKfEagA0XIwlg-W^JQpTj0ouLolf$#|onAb=wA-2L0Sh)~_vgnEl7r zoD3R-9EUo?l94NF+BTqetZ=MnO3kO)sv}16u(x9Qh|wMmo_g8HzYxdtWGgbnM*Y6Q z42PkZH{}=cTZfV?>NLOM{D4CIs>$4-QyX5W)o>MIf81)YH)?#Z>h$}2$S&3h*ZyjA7&9A&WV^r=W3V_lst8;jkz^d|2G)iRsm>E#vUE zA>LctjaF&+HMOPzzr{A#a_ZIn$12ojS#er%dj3}ZOS@s=(Z1u?-ph!57$KQ+mX_LKs}$%bXG<+FqNzx!)0u1olS)k)Hi8`Pv2}yVQf{ zYi+#tRg3?;MiU?C@frtLrdbAR3ET$ zIo~&s?<JN$keMD{A{YjB0;> zn$f-@U2DvFp>U+O1%;NuU*_^7En3eG!_aE^I&GV#$5b0Hifby2##6e;NaOMsSnj98 zeJH8cb{; zi1nwuk@s#3tSGK-(L}k^`wIPojs4xt3R__=>+G^>1`BJd*ui0ueO-RHP?)Rb__P*# z^nhVsq1_wEON&dpGFtR2w1c{qa7I9gMfk&cTic7*iHC&rx_k-e=sD(pf!*)*$A`me z&djU{Zgoc0EA4fsk8K?`)ahTsenH!UO)rIgLN9A><}D|A^J-sH-A}dVIGbMEKFANg zT0Arq9$?LWzjymK>l&}&baBsck5;&#UT!$H&1o&$&$ko~@6(92#gWwpUZor=x^M?>#oaezs>d zc2G~0EMj}_*?UuoZ?U~R_A$p6-fz&p_lw^@+xI@v`sVE2#P_YVO*id(-->rd`&!M^wS)Iwt6UftNGF*<)@?EA#`i(}ZG8~fgWH8=KjEb%vsiIMLUQ;Egz|7G9% z#J97F@3GcC;brmf@W$d8j+*^y>}i6w_g+|d zbCLGFpToZQ_+$N{@4v%l>(BPRPi%RLkKyZ|5=;MR#a85rg9}rM#It?x7ys9N@1J64 zaN0tC3MZe!j^fy?{9pFHpTn)uzV}%7GnSxz?{Vg(eeb96`hVT`K5;PdRpMUj8^23@ zjSJ(f=*rn^wC{c5+cCU+E73YNhCfW9Zx+TDpY3~(*LTmLZ?W%v;)m9QUp+~TEj~q8 zFMNwF%5nYK?^|cF?>+hsjl;h8I1D?nn|Snp?|YA%xt>V0{sHPhqIKzG7{9S+``#yhKp!vOdn17s;uzZZ{%K(SG()@!p*KTlX*X?^b7kB0tk z_D8lKR{hPyf9g~{m;GOVH+6l=c&O&R&cuSDWLN!}g}kDYc~@me|Tf|i^XeW zv%mg2@qY6krY0^Q{HAy=YWwCr+V_4T@zoEB#cw~Q5j%)2;J2eQ@rQ$G@N6qa5BuKZ z4ySMv_nvOK_Wcw!{_FXreecm-tz^~-+V_48y*)dNeea**1lRtjeedxa9da%4?Ni$K ze(CO8=~Ia*{6|Bwhz|beeeajvr$b;8*!LcX;{Y^{zW$&4-lHQSRN;FJ-}oxQaN!Fd zpndQE`D-E3+PbvwJ>3JD*)^INib z&p{V|z~G$!pZoeTIb3`xp8X<^zVy|p809+^ybyQT8846B`xJkn0eic&8cCsG}mSD516YsFm|ILq!CZKuK|G|TIfr$fDxD(gj~ zR9+yP6<@(4Nz%jtaXDARlo)Ps+47(6F6Sm?d8#U_NAy@buN+UhtuN<%wozxdx!e4J zeZXdmf+^XeN!e9JOf~AnBkRPYPM744l*660dpPMt>SpGm(UBQbJ# z4IaoF)s*I@~YwMEdl`f$ub(Eh-jj4XS`||EN-RSO{;!dXB(=QoM zvRDJ+8{8df4bznoQ!SGP+`g=hLbuss{m;AqZug|jm*vaqHZPOiN3j0g?riy}^FG@z z!Eb(Y_jG7ZcTV#0?tq(<7RbuEDLOabl_641q|S=joax>8v@Bb+R?KQS={ZSVvc=ku ze*MGlKkgoNdPMfh5aY|bESZo5#H0Mv-J?9SXHwRc(UlQ!Plq@utG$B1+i|abx^~Z; zu2UhflQK>^%Io%&V-!aD8fI1HZ9U7m%0#MQ$}-ta@r2~Ip4yTv%H2~SgWcGQQj5@< zwc7+{Hka+W!MTK9SWm^CZu6h- zxvifLJ<>|$ReSod4c+=Zqt1Z%oWz$kA(=?^?QxYwmD!>h?Up?^#g0s0R#eGqx9?di zUR7Dnt%dcxwx>f$M$d6zLR z*`iT?Xiujix~IaFrwX{wz_uRQ>4fV2Z{1fW5&zU^k+mYE|X6Jw>TB z>XWkR(1&{*>>Td#qVYfPDV3f@{|4NDzvp`L#GYQs@6ZC83%!!dlCz9U2&M$YmnByf zSD62fzlc=l&~pLtQE9J)j#*XNEDxsqe$RdOp|hMj%WP&i*y^bBrg)=Zue4a(J=nQH z+br+XeZOas8&6u~5_BI@G88_j@^M<=(ZJH+iag zWeu~)&58qVd*!CRkF)`Cwn!z;mXkG}Q3l-PpFE;l$t8xf@Mv^SvNf999g=0Td1cey zD(iUCIl%Bm?y)voRFo=GIWiyNP9`KS;mF?hy&Zdfvda=qIAfzY#6a&B zrGB;dYZPWVGQUB8b)erLqh;qLPcWv`Ljr8>DaM4UC!e*MAs;!BTFxcaQ{N@mOR-R< zQ{l)I*sF?BC#yXw&6ZbLui)WXvtp6TXY+_IOBQjztoF9vC9s$oKAXil>U^X<%g{`I zjQhNv-0pd#9p%@Gr$e30Mp!Q=T~SXSmd#mJKk97vlo(c3!mi8OJpu7U=Y(WBbXnpm zvsh!Qwe@VyZT&=Q4MP^WzP`#jr@O(Olgx@k^pI}&CK~12`mOaYi4=2ic4}+R&CYPrlV>mO;4)VJ6BWcJFn zV)zyrWsfR7sW6modu=D8qqSRgq zq#m^6LVcbpUf+rN@Bm)>krqCM!GDT=Nr(}t?z30x%Q5q&L$hL+WUZLaeMb2o>;F^z zM5?{Aley2{z?Fh2e_xLgcH%5zkLU^$!g%$^KhU3( zvNOv2^%D|{^|pRSJ1bU+@3R5)lP~K&+X-udeabEx(-65A>gScdta;@lZK<@%>JmI6 zpG+#RFo_!`VB^%QQu%bq1@D&9kS*`ZxPoT{7NyQ;wGC_z#b^9YFf^P|mLj>FNKM0) z9&4vVLPK40PD6z$O?)f)sFda@`R0k#fcsAy3K|}1tE_!Gip86m7aHu9H#j_lgeFXor=qn zpEt1DJXH-dA-N9hLH$tx|Bjd>>S~}FKOOpuhVi7Uis{e|c#L3*Pc|VT8^*>k4V)B~ zi5WU8_Q^u%U!P4Xhh?DW9UjnJx0!`gBqF@~et9!9Ne)f+f)Gb7Th4i!4_P{I(%jg}z=Uo6}KS2v5{7*>Zod zHn=TFbDidetBjE9s>&kY7bhh zq2MIYiz5?WnNNc^`io$Rp~OH4w4Ce1`KLo2Kqr$jvgN39Qg$x*>)>0s7xMHj%yjU^XPF99hh$RrB&ZU9hvPWuGQ>ve!(K@*uu{7Req8cc z`+zOyy3K@nmtouq!SIbmsna3!ylhovr(!&bB282|E6!@%C_L8~OnJcGN)Cu~8bg>% zMX5)nqfR=$+x+huOALgC`hi>shd3KoRhAfhGRz0@pEaJ7#DJP_>+iFk#yMRnj&1ie z!{gil%E!F2`D7l^PZ}#5s~WwHQRNxsoUTttIEC(fGmx~!`m;uwwZH=K5NytzPGHIB z_hav`N!e?SE@4mOtz;I6o+3W^gZ+&cjU5;#vRpd;5j?#{>q_`1lj5qp_ zg^cn*Gl*E18_C}P1D2u&Q%aFxon_v`JAczymt0{YOmQE%3&q^O#St{_XYq3)^|B;S zWwCZDHpBXEQx8e+Hd5vgRixef%Mxk_>{0l#kq~H9 z8C8CRzD0s7LZoV3Xhds~Z`dm*Qacb85{*pLbZ9dpZkp54e4Y+1ld(BRr6Lu@oU1rD z%c;b$g4Ap|`Q7xUJ5ocFu}LZ~N}X4FL{(Ot#r7B;o-z_b+Lt8{*iMB<6oNM?O07#K zj8h;RbxP$Aofgb_mh)xZk(P7i7|VdW9I*oN*hW|>m@)|u3_AlwcvHL?HqYi%Sxco? z6(xoW(@&eKn>IAf!e0`WjVim%Qu!jtM~X7FO@u-Skq6x8B%{t|cw@?2XJF0Qa?B2K zg-L~svs6lB>MA22LHWm31^J9oXN3uQD6U62kVmu`cfP8!DD^SkqyFq^@@28e8(3{O z7|lA^dZ(ho6k?j?8wK&l9$r10zyn~>9HJ)$<}lo+ljKgLzbr_X3%)xeqAazr3^fy^Z=Ha%?` zPkO+*gn!KkTvc>s%p$8`kyixV{qPbZWa_u|^U90HX8BQRR4Gzr%cXK}R*7L=*{#D_ zMU;InH@M2CLjiG2Md+AtNmLnv_}DDJfoz249K5E4W?#E!nXKD9$~!XiGYK)57_KlM zh_Ay}1XJvllrc&X14XKCb63WAQnxv@lq=Kt%;_l3+(G;3L4Q>L~ zIvu(KloM)sXdn^mGCSV zjWxg<0XO-dWym22dz{1Ua+OU2S?lE?w0a(Kh%!5uFv>3i*;bfnPF;bI10G22)7{%$ zVjx6EIbE~dhjt^I#PhOUIB!g)LLNJ>^k&TffAmXka2o}>MhtyQdC~RcQRfp4~(t}s{N%PBALWt9L0Pz>^+zcA++;#6FSP*;F+iPynQ6UYY;3b3c%kqU@G&C*gS z`K$YESBA6fEG+F7@<^A25P!G1Q$eFUue>Ryo(Q-pzFkJP+<;hIAbTbGwLJkhA%TF~ zBclI~VxGCmf+_uIf1awvJu)|jdXnZMd9Y_5ZARN> zKFdspR#o1St_Aubu4WE6(}!5z2PA*dxKW5ZKM+?6zAU4)#X~my2)OM3+!F;(JSUk4 zFOa8lNy4f-=FgcVJKVS*ZZpJths$ImL1yf?k{=xUbc3EUPXOLT@;r=?7 zGO{a7QROn(6U(Z~Rh5&-F7s4`V7ko|{~xe)?;Vok;KMp`9}}q)sf5!OIg6FeA^xNT z@sBclvH(Jm{fOgN7%T@y#(5NZ&@$j0@O|JMJ79wwaX*xuAX}-V>o3CBQS`VhA#5}u z^TTrxFGv}<1>Q3RjOr>w+(kTDChN!NzfA@1a-PMg%_}?Lb^CN)L_*j(aQ_W%9kUGc zjJP9Kdq!DdBBtr0@m>f_BgQEkG2zxUB@>RQOO^sXc4cf7Xins*ZlWzQ)#t#JG`C!c zq{vsw*qn3dfjn?=lyA^TWy?1+EuQhD8(dWBM<(0uNdpH4#Dku}2;@A`P{eu}Xq?Rv zkiqpXjTW#6{Ks0cQ;4bZz>;58#L?5lD?M~}ARf?I+)9q~?VfBAo&%1*Tr_TGR)7!i zWj%(+Z}BV#cY%Faz!+0}rddnugAur)Q_=3Z3C5S0qK(2L@WV!dP{^vvpJVnsU~h^A z7FjRybMnOjAV|vMJfe%neqemc>nBnxOvKexS)IAWIrV8|%Pn$scT zVSc#;;+IN+`6(j^!2jc}acx++Z4oSLk6L93BZt90rw#=KjiDCL*J%;f_$;UbQxo2ue=3pQiHLaNF{GQr|U5OCII#v&5W}ul3n31NA>d!~+kQvqIzr2D`1l1N;F$B%4H@)hr)R zBCK`M=(CL{g&2D(VKQX2slk+c@V^2}ei)booD*_J#MZTln`e~7hXvgCfiKPiH4zRZ z7Ok8+gP665J|UJq4ecjZvM$+?NwLIjy3fX7IX+v3i8#~Sdh%aOoH4RK!sBZ(vgC2n z#Bt!s@uVxvV=bYYIb9og+MDoDgvcvQ#5+yEOL}d-tP0Z<@Dg?xNG1zma~^9KIXAHP z%kZ`x;62iS=zLkrWbh(Dq5<)}5Ew3SZZqf?%C$={3-5&p+s(rx1>8Veh~!17hhTXN z2@cV55u?7`FrGyDnh{n(eMeCgcoz|V9_;jEuzawJ3=W=!yqgP1XOurGrHJLo{1Tp_ z8yU<8$YNK_qOU3z66D$Km6Hva z&%&3w5SXNKNhf&XH1I%_qk2RF>tH!pGtGR`Xu#QFQQaNK8d+Wu-u~@Om=!>vJkXiy@3-Cp;u_3k7AT z6y1K1QKUmJ+e*b}kr|M$u_J@Fz&2k7N}%zngB3b5Z;F>;M!L#~JGLXgVUV8$Qz-T= zgHjg--_VPANBoH2ou^`P9*Pt$;gR;H_^h%B8Q*k>qS!^FN<0Vq0m6fiod6e3-bg_F zCw7DUj4x|5#)+6}!bju{Nzowhd`7tzF=PTvs#iA3!;XD2F2E8@LoG;sM)j2Cqd}0Sebu#U%QZnB$F0Y8f#Yqy`dKOtFbLt{a>kyw^i; zhonb6(!SIPt*w!;-kfe;*^9Y*J=tDKY9O&PEJrNOW_S~d+QiJ$s1ZX|+eo-S4Ou0% zjMbh)9|YW#zqybR+yQ6#rH=Z?Ug;{cSCaoAts&qh#mA9J48AXm5Xp>|)W$U|b#}a!kr@A?NSFwFy0y7_LGe zaV;qzj!g1$0XJnCz)h)ns)d9jvz+tVNT0$efsc9)xa=Vq4)RI87)ipVWN+o*Xe`#F zQgFRs|1KJ{<%ATQu4FiUm`20SOJtXCBsxTf1gzTJR?_DA+g5sk(gUV|rw@{%GC<4S%GJ}3*w!A&}-7ko z7~eZmx)w18eLC98gCZi?*+PQ!lnN8^h#is&(^2@UQh2rdKwJW_qY=sooz20zBz|zD zld?NfQYr0~_gQb&L+20h(B2sY#Um^+oe!Z=*C5I@!-k1}B#plx(cxCI3*7B^QaN`x zgRFrxZmLBfi0);BBHE;^tV$O_36;{WD)YQ zTgjwEE;mpfLGd7%LW<)o&?KF6UJ1q%d8W@sYHA03MF;$e0~np%5=p1GtvOXwn zlr0f!I}gsY7an;=OAO4XKy1s9MNtHzZ2hRT5*i9w8uc~Q4W7gtD=7zyn7M}(`I!_Yh>ypp@^PRo^0maB*8m?AM?0@1&IYj;w&Mfi zkf$OHW3f($et^w+ZPOw05j2N9q6dh_;9}A8oxtaW+a_g~V3ed!a?*vwbwp0$M@F5* zL*%JMssdO(^(RHIEAS3vSEMMD?N|1oDkxyYYZCwT z7%DZ*v#W{-PdY#WY9;EDNlz{3;Q8Q_Nn0jCi18(i`Y2pKTTL;b)9I#b@Fn z`*H47mCK=&H_L|*Ehy$tDTBRU~g&uQa02NJNAg$%*}E? z=22Hh2&l9Z{+A*aqB&SOHiyk2?ST5O7jw@gP#p>Bs81Agx<7)YA9Who&B$!2g2i6B z6bq5*5qnFV3h{Dtx*uR0#CX;K0ggIL4D`DfHcjdQaTrD`kQbsLlwnv9X*8rY7p0P7 z(*Z4~E8`7B+io*y4Y&1_^Yt!aQR31lf1L&2Ii6GmoRSB=lKP|*T+c>Q717V zREM%0BeD#9l7P8JKGy*oCf*Fp1X_Dk3Ka-UJ7GQG*et^KY|a(tw!Xx0NYSYffxUQw z_|hvORgL^9VSkrUfNV+%R`*%HL%xFiOWX++3I2juSF$!@LrAe8+a$IT{Vab@^#NG% z7%Cx1^_T=^+Kky6RX(v0+9wv2>NE&h5#AtPn(CTJ6TuwCUBpx!P^pMrr1^X+IjYQ4 zQ4USWeXY0`{+c+$ZZpNSn_{vV%Cd`6z379hiWMSKASQrxDawsH7ZQ})w}X>fZt&Sq z>w{eVA#(qPL@-4JJVa=MBJ>r8hu5Hr57H}%d*28TOfz%_xULB7G3GKnXgNpo{|0v) zd_al8i!ny~B|}Ea=pC69VcaI-GP*L(g4d>)G>yEEI7mHaOr@}pC;}UM1yN)I8E>~a z3ZA(Wug;+_N(=@T(G!^4Yx^VjDP{_*y$`0;55FGgmw~B&HaEb2tIi?^pihI@;=-zv z^<%J$60TcE{)KW+Qlu&Cy%*}rxXpsiN<}41s=4w*zizHzO13b}Pr>J!VKf-#k?KMv$^#&_yT~F8um0174Z|rr9X? z-5t;w9-`Jlkh!ccTi-xiC^z7MVkmkM9yq$BEXSR|M~G7~75HY!-4J1^ufUG^f%b{9 zBt#iiew|=}0{+OIRW{47B@u_m!@m%h`_NfbNxXC%{s40ezN9W0+#bA&&o&FierF2R zr`Ri@r9fG_&$j6d>|dcDvPG0vR+xUyOu(}dQxZ&BND#Ny?)elE#|d10(KsDiNZbqc z!SCin?Wr)4Z9o^*?o4rlfB88>oDGy2pct0B7b=1`9(CrktTaEYfSck?+ z9;7Nx(yCpOX89T98z~|l^#SCGdL;{q33%cs78Y0PhL%IjryF)j$d)vYMdXLg@(BO; z=*1Rj_g)*ZXP;?N=KwrBr*lc}vyZelP~m|(3nyudV_cj0R`Lp1DRH^uVEfKtmY>0V zd+7WLV#Sxh1YVm{D3l(~ID|;I$nAv2M6A&dvYYzNV9LfN2Jk}I&4UCIhWQ=`4`_oGF$bLe!(I_rv6e&UNSkic!7bqP@0a z_-*ni=OkvReo^Hc5*PT6G0r1;C3zu{pZS4U0B6IZx~mVLyD45sT!0l3Dge_BO`DV& zPHM5D2T(0SIt=CHPVfN?Fp>zd9-4Yi9tybeVvNWwJn}}SQ;wZ z(DQB+DSwB-2RJexur!Bf!I2+go@l&TZI~GoK-xFB{LD(A6cIEu)B$8YK$c6o3&r2f zKo`XQWs6v#ixy7+vt!hGD>;}FO!*SrfyIj6z+3??WV^u%Q8c*+-rr~Q!Y*Peuk8|{ zwoFuEp>BezfQeP2nw0Cw1&Dsj;J2I-%wK1}XQ`%Wp_x7)+17?XgZ3Rrhdi>aRJe~1B6FCybc!DuCocoA9MamlZM5O=0rOR9nr)n=Xq-^yx< zIWt<%GM6wX&@)#5;@wG2$t6V9%&Rgm5~sfidV7b;#KrtOpsM-#rdi2<$D8 z@Mh+L_*yDeXe}ac`oV1mQ>bo?B7F#KIn}AqO!e8~JZTffz_B6Vu^*T9f?M}xO^2wO zf@%`ez;9ATb-*pKi{Sc;k-c_h^ns(F0RG*~7+7L`2|W@A1dbz>wBxnnVPt?5Gl<`r zhdKz25i{M9Sz#iMd(jcdSNiIwNH6Jhx6z&A`M-|{;U{lF5i20?M zK^jxL2O0zNe5$JhIsn#Wp_jHT^*b=EMWmwo+Nd&^^3ciVP+m)!YF%<1*`Z576*@+X zC9M}49kBfs_e0hw7&Ztv+CXz;&*GGbsSO_Esos}78?`LX z{|cz08EnL}iYm-Y?giKj!`wi-NWpiTNGT(=coiz&X*B}ntfXy|@^TYd9pR(v$y5nW zl`2u?eN^K8a=T6l;98@3&OBoC0N)xF-5N^_Oh(jQ~-ii50`qj>qZu3TDp|nx}mFSuKq16#f zu&VMW(6i!Dt-(72B@*_?MrF+BOPm(f3K6%^59CUf5-uo^{Sv}l7yC~s#*FJ>|Pv5f&3cPm9jaDsJ-$a$B4nUNilY0cEF>x zd#bE{H_#ru#YN+nI_M-&=}6lnmgqj%3+e%4;HVP&C?Y;_R}YZ^-PSXRLXJ$DV-KC= zu{VR6c)(KbL{*~A@_d$<#8S*`!md%k|MJiST2}y6t)i(l0?d4sdUP@O!hfgNt!JIcYfw|@V3MsP~GKt z(q~KAH8JI+H(9JJP=P~{ij<=(h@C9P?4nVGtj!KoLn~uw9FI!fCd%UGk-eRP@Aru6 zz+n(KNY(kMvvfjpLl2XZ{ETNS01hA}Ap~9zEIW9ORh53X9jLZbVPC2ML_UN_UITll zy6H}2t&|yyR8THZ5yj>};f3#|x(KS#q)J?>SE7EW8j@0}9+;Q3>`~_%OSOsJ@M8fn z<)T#eeN)V8yO06-vJS!8FB)l-zeJ`-IRVwS0=FRVA{&?iN~KxQ2XsIlk*agL&5O8d zRQVHlbQTedxEbhTU?YpA6{ddpHDc1KO5*{lx|SRARFr4Kci{YlTBrhk6v)$#8dI80 zG+MXyad1&&|LZU|RNZ?H+&NjP#Y$eXh9S)0$h>G=f!+msi=35^u`i2iX8Uwd=fOA- z!*&Rnibq7Nq0*q25H9Z1O^1Ghtc6w#5yHJ_q&88dT&DtkiORG%^j^}^DopvAgvnj- z6vP3IV}8)uC}L6yWRxKjj-~Svi!QK)O;{l5qDrcnd4}dST(Trm*of1@DB>Pss6z<2i7BSci+m&$2Y7ZuU6=7Gi}hFV9X>FV z$cn(?k?*8>fo#;MQGKvSbX)>v6l^5vRFAOwhidUwK`)~Ew_>1+Y*e9BMo)J_-ifNn zpb@x{U6f_ZsRoX6nLZt9eUzcVhe9{ykOPrLml%l8C`GPKYUu;8W5n&c%BY5lYJ-|l zBe$7}@KnFM#8$H9ToIHL79Qd(*pUvbW}xas^3d0zkdtajR!S^2)mwC%p^<8VCEPw+ zMr9u2O*UebOGpE2bA#5tEpgq%RuVh7s&c^S2hN{_)a~Ko_IV zS@67+krU_gj4dK=m~`R-%m%6+q_qc~h#aKEP^G&gGh6OLj|;F%TFr%f1j|HBCn>t5 zW0OKld~w7{S=3P}F;{Qk6Qm+i6enGqG89_F6jQaCFMy@%2U89tmsJOyXd`(0>)IetILgoKEItj18?aBKC(EIpU0qQa?jBggOx$vBQLgXDS!a|~zrf~@_sq|v zIY`-8i{}PfK^hr&FjQ2*2B2nx|I?EuPSuAKus-C_f(RTn*7YN9U=ctElb|p(jTXe{Sn(4JIk6FEoc} zO&uvWR0sOsFq^*wqd>EeA|$O^cvdqNf)6D$OuQXcFn48;R!h-N3O<5(f2vx(2##Pg zI2BUx!N@Gt{F9%^MsHG1MPqtfPnG`yVg;rZqO>my7Q2OICs%{|VF@`xus0>-1n-t3#RI3x#S%ny*LTx4a zY07&>fj6+S0ds+B{V6Usqb`Bi9RY0s;sORCZ`=)~i#WbF@XlkXfW*N8MZ4ERl_Q3T za^+drBIPYNP`yc5pZfW8XilW`PiwoOCsAG7A~Nh5=tvQuNUCYyh?qokN`Q|iWJEP( zeLA{Z8f#*4sXmkH|A;*&Zi&1ft*@aqrNoYvqau$iy;Mq7@l=luh8N5{tp#g_ej7u+ ze-yP7#D~N0BLZ5$bx>sh>FLC{QbeMPg=Y$ZR9=iLK87zQo{z>0eghRhT^Ymj)CPwo=KI` zR7a2pTpNWo(khyJA*v0hKE4Hw(1Eyr14xF}01;+H|G*D-n_q?>q`YFOq8=WD`~)Et zLX=e9Nm|(@#mtgIBSjWSbr;j22F!0l_oTl2vWN$wRhzvM3FgE!5CJMM!RNM_Q6E-D zsy=uD*^ki+-Dav7qLraobqf6?#2iAbd=asY*h^nlzhuh!bBtLpZ1@WEmmJm(L8Ejb zrj%z<)o8ot7Hs)8*nqR(dzKp}Qm0_Kb;-BDVERz~O~+Fu24yefNxzaD#oCPf7$w4N zG{YZ3sqNE+5xG#=jM+t1P*{Nio|e`}Q6@%+fmRSug=`0S5+Ag_QT_}fB-JpGa$YB|tgS?7r?0qsiidKA+ zpQSbE_ff4&v7f3;$;)6R5UQbXC0~Q48AUZOt-PcxkJQvhK$TP%>O^I^9axa6<2zwJ zH^KP%VDq#dhT<-*+n^}+ulWF)d$jha7kbS@U{Po?;3l!Q5WZKWqV=JxfPUwd_d>Mh zZyfdjg%A-f3Lb;SpIn|uwi4=S)#gw|*s2vslRX#hYS;7BY|`0G5J^)jvq z<<&s-J5(7%c^B2&pTSts`;^bqn*KxZpU8!g^FDOm1BQ#KN>O!JVIma!!~#WQNgw)_&ThQ zB*aQpN&zqif8_k)LyBUlH_IsGXLjpWh@53p&Io@5XqI?Q;>Q;fKgd>~5_ZV=6VxsH zvMwp^g}{X(Qa`a2RW2k5eat{tYL?m%wSSP=QzKxsFG$8^&N3sa+Gs7u1peKtyrj6K zD2125trw{dOS*OIm}cn(iBkM4$uN9bgZ$gn2$bdV)Hft;sJn^75-I9+GXJC-Pwmzn zmHfT*E2Rw#SscB%3_J=3AM?Ryqb#)uD^oXui(3medPye(Yu5)JnHbs-*oioJV0&sY z>Jfe{Ijh{6;x=tbX){*};HrUiyHH=SThZd_0@GJi`6AP+jPO*g--j%J9rHw?moFs# zQR_BQRs98Ug3ArRf`+FT1>8>IITgGD;>WdAqxEpcJ?$N~PB2ko8AKY?537&|MWC~_nMLu>w!k~l_+3F{$iw+) zMbD7&pLCzF*OJ1N{X$(U;XYxBJ9?ra|LL_I&Nu?Sq{PsbG3D%n2F0S2y-l+Dk)7rGZBd`eGT=v5X=m!p3^*LpF&i=um>ohja|8pdcn1nxf$#@|^s z3tPXbzp4KUSWb=lO4v23Y5ZcZZ5;RHN1cz`)P@K`70gGFdpLz_NnTmWQsn}vQEA|C zUV)}y%6u2R?Q+A*sHYNS*OLAlD#F1xgH1aJL}0W+&66pCW^e1M0_-ojCs=1PgjzHP zvE!)p@3G#8#_@=hxUmWFrq8K*v6^Ou=#}KKY8JLx3D2iQ-EFDZ3kxM}%#rC7KGWJ{ zze2WaMkV%f*qj#;4_?x3u8cbmDa@%yaF=@d6Ra}qz`A)@xP@k9hzYB{P3>d)fb>S4 zpCik;hf0t!?gQw?xAo7#%jSV4Z1KDTZn_vV?vG%1j)S46bqS>NVy!l=)vcr2{tv`Y zG>73$y;=KV?L)}1-vEC<2KD8MqJ(n_&ay+en%nfm@)>k0((}7@hoGN*iJ3i~+GZ|y zGtw0Wj5N>0NHf%oGzml<%>X=G=HH$dl^Da5dZt57e&u< z`ug9V7xn+^=S6LU51dAxLHi%jv!aj;F+9FlhmL;nUJd>9^L&At{=utxb&zl4J^%b- z=@)+V&_A^FW9h36C*YgupFy5wpZ(?;mXF{>{AJ#cOMJ-k7jd@Vdg#w=A$|UmtujaEFnKD}*JchX7K^vNn*XzBlKp8pXJ$~P&fv+G_uyg>Pn7PzU{C@TtH{H21#PtEr73bmTi@>(_BEdSdc zY5|{tPW_Ql%YXbKUHKb^|8S}AvNG_BRja>Ir|}>D!-xK2I-@3COCO;&vTeNlPwAiZ zDL#4Wia~l!FZtMySamoJZNVwp@KfzYA9|Pmh)0S?*d8(noT_jSji*|B8NWWmarnZ! z5#EoVx+MNbFbhM^-{OcuzK2l<#s8qr{*edmz;SAx!ACqSdH`R~;Wa)(Z}Vr!NPnbR zY6;7j$x6P#JKy2^5zorZOV?m|7zK+X7nfe*ZyucBvmX58G5Q33_8HFAlX;m}>m+_U zS2k`nyN$XfNFOQ0Kd1x$cl!Meo*&Iq-=r)x0$KGpc$=4*FXJc2%5g^av#e|!l#Xv| z(UMgM(RQzzEim9swVC?z!^z#o45*@x-vD*CJv-=E^|u__|HWBgzkQJ zDnEW_qwR$}FJC(Ghx|7>wU#b{$$%rNf&UkK_a4{8f$05zCgcie6F`mkh^X-%&}zI? zgV(62L9xZ#HYh0G11bapl5o+Wr~z+5tp;zU-ClxiEw#1{*0xw%i*0ugy_^<%rTgsJ zVz+0@p55&}-wE1w_q=|u=l6P@e}2Dbzf(Vx$;@PC^3Eg#iy>8V&C~VhtLxo0C#NqK zNlzAOjjoGCJQCPySX5ftS2{21dP{rKVjD3{BDR5{x&bqAH~Z=udh`*+ILx|*=NG&> zq|*jNe;kt*51%B8LDZ(|>caby77x@VVu^rdqBIe{BMsq$)FlqYwXO$A7u#LBX;0mN zS8n5T(xvI!NQ;AM5UNu%Zl&Vxb?9_sy3Uh3SR^gh=y4kBS}?7BR>aGQ^l*t{?*@G~Du^r^#h zt&ccJnx)g@7EqFaFX0GH(uTFV99$UUJSLb?$=O(lbjM@TK4u&J>)+($fkjXV0EpPn;NK zZyRQYSHeg-5Uo~h=%z~y&x#Q{nvM_93OaF+HbaM(b(r9ki*3+p`|I$kDv?S94s3uf zre6@3_|qgEC>CHXEK6*V#u!AM17m3$IFqCyY%D$4cXZlBT*oOhs7}{Q!~>SB#TQTU zw)F7#5@U1&27pE(t)kQ6b*z`p)DRnfQsKG>U%z#pI=t#*)7sm?@JiZ&J#~?~L`-)b z;C^sb3pqNSw73D`c>#(+I6|xt9!am};UTWCwBYWLA#FkW5{_fWn$T{j)+UD^IccU= zds|vjTB6I*N@HngfV=ckhx>N#0CZ6qxQZtr=7iUK6t}&l8z8+ZC+mCN!ogs6Od_s| z4S1Y9x)^a#AL)>8>$HP(m%?X;gmU*~Q(94jq(RgvJa=@ux!7Hw2D~cjboqVj285rR z;eB~AV9L6W%iY0XVy zL`KFf5p>c^o9;DH9Dw=IlfJA5>w0T3A>v&hZYStc@z>u_=!v&Z(i{;R!e>_>YQTha z<&J;{5cBaa2b;nlT;ldPd{L(o@h(EwCau_wW? zh+-cc79LfYUT6Sdt9abl`;8)@%-@o->o1H@Z65UdRp9I{T7 zX>B_Eo{I212Oj-u=_snD&0#IEr6<@LE9fQdPpZU-fQFFu{1+k*w70j3|hP@ zU{LA057fC+MXZS-6((XI+j&eTOV1G<_NLV~Nc#vs+;^YHT5KZ~#~q$8;`9qoNQW+= zNPE#WBucLT8Vh>oYVDB#4V)%q(K_rK{+x^ z;~q6gpp?dVDH3)6t4D(_S*6Qqz>WJ#2ZXKQ z7zgQeiK*DT*nkJM>&tSEv{1xZh>1a11WT;gH4Mm*His|l;lU=26H#)*6Fsz`sQ>UdzV2S=1E5-J<)sPE!S;an2JeC7Fa*t;H!W9YO;Vqx3nLD3PP_>1ue0 z)eXG+$V|f_NcO4t5)^&_ZdXgINe_JZZK?F^!|OQS++sp{yzmFlJzW~^5ze@~gLD%N z*p?$T852Fa&MvXK4p-Dzs-3Niz+}Vw4y{-xc<^Mw@nIp(^F-+e!rK_dNoZo7E>Wku z8G8pWUAWqC_sxtni3etoG*73y69&kWCbiPZD!s?;dVIxHEY&?AEx`$kO-Tz8R>Nm9 zVY)&3;w{a=Nh{*|-Di5=hS&xiwKNP0KOeA6jKSGvYOtj08tU*WjMw;Rd?AtE*hnwu z7_d=kEd9MgAG{ie=U{}Fxw`|7Sek;%z2VkR%kHg%S9a-_GfLy|mkIn-Cyqn9f>os> zy4AI&5A&t3JJOeft~GJdbxqLW|IByI!}?vTOE=e6tL|Z>M&r;VG#%l8KnnAa4J|{f zko5O2bF*^s8@3B(WNlu*Vds{a+4#)}OSWOohKvQuZ_CZh*g8MMk+IdbZF9!f%y~O9HW%2kH*DVE*swKg`?9SYc4TE5mhQ;d zk+q$F&&}V9fWOVt zi%(B>{{D-mSZm9vS>@BdZi=0|_{7AVzXo##tKK;|Gv~iHe|6}E1A`{He*1ClGeZ~l zpK|m+uVpO#;H~51j(qTO?}%YH{gbjj5#pEb+28y6+P_){#LmstPqoL-{bc6Qs#9Y# zU-n&}sa)K9(uUTeoXx{-)|xYZ*Qkqq{Xp-e?9ZGzgZCWhKRWla`_{#*1&`dn`pxEf zqlPZ*J7ImWXx`^Ts*a6$_{|--Y>1=x`1Lo_H4*v_y=mi9nGI*Y8hdnXX2_cSd9OEXhZg^3&GncI-^Skm z@a4=~H5J^nzIw~fN4EeU#m}S@6 zUVHakWsl(xR(<@RF|S3%CM`T(wBh2lKlB`C_h(;UbFA{1an`kdk1aU%)RAGcP9{`d z{Iar_Y1Yw%4Y{u^IBJ~##hato44Lk@ zEj0t@1&ui;hE#SRy70F{Yu9{v{lg)X-+%n=LxU@QLznFypHXvZZcM_mst)HF`REnT z&grn~N`HHO`M|}#laE|Ys9ZjH_R&!V7gh6gL#Mp?nQ=<_^+SeP#|?vSl>a`)kmPM~ zp1Ias)v)OGq(9e{YhoHEIIiTxKRC+Qf9kauUEc|t4-Cop^7oy$dGA3vFK_0bBSe$-o?Ew?`#ap2eMi&i~w z`1M7#6ZW(P#5K=FpEhrL-~Yn6nRAzoOD+x7%|G(H0ev&uPZ|$>cBA&O&F_C)oA_w= z1HDbn&6Cz%m=ze{y4>m6_~?Fp{kFh?+v3hey?Z1r@f)|--%y(tpPu$N+4=(mdo2FI z-?aAXhCb8RN8S-%J+tAx3q!sLUVk_3X74e3x_5iCw0`mNz6)MiHE8LYZ;tj|@NL_z zHHzr?kqK`G6L0OQI^L)3igEPkk1kj;F8AYvg)3f~k$n|?VvOan^weh*#+EUQ zTda>A`ueR1WBya49{cW(>*FT4`la9Loh6rRR$n=M=bPBQi^oqZUQr+nN>PoT_8-~9 z-#gzFq1;e7?VAtYi!2+puJBLa^v>%3&eSbOt2|3)N4=9cr71h--E+~kQ!-|SCY=c# zSforpm6BQ$+ILeqdFSqo!FxP6RSS0f>6@#w7Y-aT?=%1P58gP~Tb`zOT(4a!-kh+` z@!7evvm+KIq<25}&Gzl{$g`&44vOgnY#6p%}HOm`|?flcVXSzlV(?qA3oDPw4WmF z6T|X|q5BSx8vhJ_EnPqyn4oSkBnO1~)ykCYcjYt3m6nZLekJ{bCF^da4BoQt=E;I# zYWb)oYD>YmKZ^Q^OWpDh;{Uj(X84XTny<))M)y=~8?YnC@rHUpt#j{q-(%}FJw|N| zUHj&Y0MrzE~DG=h}Dr(ZENi} zM1SswRi4MrFFGo}??SL{Mny{Pv4<~Ptg=j%@7UTZv-8j2o%b9|?PJM_cs;8;ao*$K z+uOdoenhrRpV0i-yXP0gXI42kJeFWxfFI+DOMO?EaU#Blzug}{H{?;xTyZIGrb4~o z=&uGCoH5CZO5>-dch9)`rTT_()R8pZcV*EFdZV)gx$ZZIs?vH2gJ*x){m6)ABN~>xw%;dTdtj>7(6&c5 zX!yS0``=a0?=vhlICb7eCzP&2-}(ApG72>4%>3M z!(8xP!eRNa)6c$e=Uk|I%&e3(x2}Ha?V&Q)OjV!#N`0h%Ov=#VkImlQv-kXjS&2() z7F;*ZIr^5PO|eIN|H9XegWM67JroHAvutf^g?YUn-fMBsSn`H%{Omb>T9Rrk`uOqw zIDd`M++01l#MmMZ5ss?nT~ixoeARSc-wgFEohCuur+VD8YRxlWT;DH$=uNBcoA}JQ zeh>J|XMJ8er`b1iRl4Szb8l&rEQJ=$bxUOF=&6>{9T}M^_xaK+H|vuUk|TWMHvYa- z7L#E0&GS#~9iMq4TE1-W`<Ax48IV%*>JU5 zsNUbV;(K#2b-~{Kzq+vb%6H`pb;L>5{IAcq*eSXYPb(+Cf8k!TM=sm7a zbG9Is%Ev`!&hjNT9W-Ug`l&x(`^F);Mw^-9D@}G+Y1D>BkM8XLh^caeJ6&-z!a@9yxz1-Xp|7NM6RDZ8_7(5$*p0{U$E$9w)j}V`2^m&CFvP#7aqt|a(BSfhE za&L{{jA%%Wf7fEcUlYn@LY&vTMs#~s-G$I+@-v4cCTinMc*k>1p)`yUaFWgHp_W-D z1@~A=<#PpFL1#;aNA}O}hcrD?Qac=OkMy(90Z&`#)jeWdqphPORJuou?q_Iol#3Bd z;>J%3%<@Fat1w$$S`np-^NImMHb~6Yrh5Z!F(NXDuRWlX>J+wzbnLJ_UE z`h-F5p$fUYQ|EqNERW1H4fnN$#B#yePwfz}ueq{>R$ZH2h){YH8b!e(4AMmFC)EoU zu}q`Zs~sV`FjP>EGRx!^S%flLhJOfeam!~%_c3L+xVtG7F>inzC6S9={i;nD>;BX72GC}r*C&%EvZ=fI~*y{{pGR~fu1Z`-pCqgb5 zEV4Gy-A}FTsn-v)cs=5Lt^Vp9F{ZchMdNU7$l{TyqSfPrZ8(i&gDn z)yTN-qlB}cie@2BZnn22ixC4q(VK-fVY*B;pws9u%n~F1+S$7;BINELAw%XD~9M0NJFAE-hqAzAoSZ+lR9yKhAI?ph)6bc#nIZyRL^EKU}R%hYlqu=vyC zNecNFQNDLPrLu`>U-XR?4tR=$0VmagK@Yz?P7Jxl7`M=;Xl+Mbjuv!+cvEoRYJ0m9 zKcla3IPSw7^}9v2wsq0HmAanKYP5!{a^VO31=6z@lJQ{(t*sHk-R_qn?n|3mKiA^% z6#l3B{e6}TpX@OUzdMpRb6co(T(nT0ymt3uQU3i+liR-jlPhK+p}h9%3vXR182;7U zGi@PvS;52=Z_P9;K2<(WrSuDf*EWf&?^?Y%hOrAu&37)kd!H2qk5i-GT=|2gY>zJS zQdROFg+-qGbK4v_sr7-E*f8Fg? z=|28*B7V7ax#AB!$GhA9&{RJ1S0BG{=)J(|7bC>qIdx?fO-J%pU2J^p-KSO`9i@pg z1ZvK|)qlL|a;L_zPMk8Tyq}?d%~!&dh@9U(xipxSB2$eGg-mU8Z(QD~Stm3G7rABQ zRlj{KcyUp3#JFXVae7DAfx{YQ&vPGKo&Ct<`*-z>3%nP4D-a>RKimJAVfE!5EA0l$ zGecIN9R5v0%DhJd$&=-S>&sI^O-;Q=*}C`hmBu&q99P`ap);M|cT~AF?cmKE_5@dTvFMaEQ#Pv@#d7?66qK)H*xL+6}dn?iS z=x6S-+(O&o6HCW=#(9b#J4^fj8 zIhWdd=LhDO<}8UHFN|CCrg`M5#!>CD>ouja?td7in^^bu;gO$RtBf7C=;X<$hk<^n=>44@uc$h)zy>M8v6A}Xp4>(da3949J=tLzi!-~s92-? zsI8;MFu!J4x0jm=THGmdqdt9kLuzc6@W|jr_`HN9(KB(|=6?P=>zY;$+_vTdIYxKg4Hlj_9Ww z{KXA?x|Bct#1cbunP`6^L0uX+erR~a;{|_CuDcO4F!zhJKjyrad@>@sk7bbinx%AP zM)w_cN9}vHN|o1frzx|t_o%6#yp?Ksdv4qq%lppSKN-Zn1Kzum^37+j?TZ~S^VF*4 zYcg*>o0J}y)fDgE(__T!T~@DUP9NXIbw!=NOBbwhiHgG~Z@@{9ony)ZY@Gr)Gz)HWk??}1T@z?R2ql%;WF?~9B}jo4FlBK{$VWnaYC zbA9oVhsWO@^tv}rA%E**!{$?`uGx1r$c5B;Pwd2+= zsG4dOhN^r+qfc2j{ONPSKWz5i@n-GUR*!1YD>T&uU`F-H86eP$ujv6(XM)wbUoSp488NdGox8InAPS>B-+4)_&zlx_?Te zab%KZxo_z8a{mT<=39E@?3zEjTgsDTjmv9>ESNB~cWuOs3(=F#3d^f|D_Ya4zl*pL zGh|~Qee&)qtDx-W8`P2e`|CPIba1@+!E*Yq>K{^i_;HLt~G*T$4vW7b@Y)()N%J-^qQ z$$8q3a?6`crdN0OZ>}3GM#)~?WeO$PTir=1yVT|-32Lq4>Sehh{zB-WEX%3(q|Wj8 zlBvp5mzUz7iYv!lmJc#iMIBZ&;Vs1sgZHq$sZ{Z~?upm&30RNIU#!EMlo6vY$UlmS zjy@D0^?0;!6z}Si}E3YE|Tes;G?R(Jzlzz8tA~=_U1KRg&hV1sN*yq=k_$ zMW(G#kGi6Wo~;_9oS<18rLv_fr%h9<5|!2!8ugVcBd%OgE9K%9rBbC@rPQRn7^zHN zxHMX+Q7c57^2Jfg$y3#uB|{=#RH-M$Yc5Bq)z-A+RGY@CR>>n(5pyC^lxof8`LdDf zF=~~1RfPJ1NcBR+2)QzOg(797(!BbGh&giW3#%j5jY_prJzK4^Oqt)PoThAyR4OBt zYNIA8IkHh9S8Jm1dF#)Mnuk)NROu@e>dDWm@Wox}5|p;Zk@#0oLR8wNQJPDaG)tEi zrN}RdW{vTZLKKyeDq)36qfjTPBgOHTqAqE~!Kz5*b18UF`kdl9L3~aXmxU;Mto+LYMLM{wW$llXOxPR zXOv6u{!J8A_~4#J_g_@1@Gc{Af)Ftn{|_bVqVl3#nD?kUN~w@5RT`OKQmLn^hjs)Hn;Q zc`8leIF+3L8DROWIUh0RXOF{xpR?< z*%(D)O4eO@PAQ(lIXnE^Cj8SK%N97~2|lq zRMIj`;M5l&2n$H@g3rXeZK5tXBa@RIxM>Nbdu@U&{S*fkFy z1)y3lEzQP1jjjt|7>P$%y3ALJfq+WPllPUbZWOy~w#WnB0s)*em?0lItXq;YF!S_j z<7x4WIQI^~hBE96BOi_+w&OoX=vkGLP1CVwP68>M}(3G zPGS(n%99FFn(7*&`03AhqCHugUMaQ{CH5xE*%U!CRmPxfo% zQU2It7&P6FsiLKc9BFh+?(iNnZN`Ms9=NtAz zsOrd(=$Io%!g`qjgSR_E5#)GXhzc6AM2w^zrF!j+2bnwsL88bwV_b#-A@#rph6 zW5wtg&9coU)zw+m)zymh)!Q^NzBGIiE&fiyH^ygQ5xLx_Ja};DuSOp{n3f>RT(>-{ z?BGG?!Gn>)jscqriVrS}iqhmA5ETy{kR8a*I)Fi&o^~Li`+@$WcA6e~FiQE*{{7J_ zSL~PV-@jiWU%sU(YI#-FI-y6EZS9Js>MF;8sw!huRh7JIGsab`t5(`F*X>isMC@C- zZ{NOU`y%DIu&Xxi+qZsS;gr$fyU4Dl21Dt1By2Yb&F@Su2$>nxWBJZ@PWY zp4E%dl9iErbV`}9Y>&2^O0he7;e*}q%DQ{^Ll5;?Sh0Ke)(y%EnR4lRg?i1d`4y{{ zuFZ(eB3AZFBaGFqn1k#je7Om!wGq>RTQ5V-nqZkv90i| z@F!R5hFPzkU!CC2|JI&SQna&S(VhXJ3GdY@njUD+tXbmDyyRLm@fq{iL)Uh?R{FG; zXXO9kAyebyX_GE3JU6@9X)1HPF!B9k3#V4SuzpHW^V;WKi}oCie(v<{J+?si&+ogV zc_VLJXzc#&zd4v`xb%cB4_~{HXJaOeqtZ=##xQ~->POD^Skc5IpWLg{zZ*X-S>6$rR^2vIhGyY=FRd~W}i$e zys)7-?a2oxe>MAfjjM3+u99)@`CJPgwO&jgUr_XFnZ301jLVgJ?!KoMH@UYtw>4`0TLfr{~`E4f=3Z<;Z8xE}Z+KXH9Ue+f}-G=aHVS_Yw`of0ONV#4 zwt7=$Hs|_#f3|wl@vX(#{_KhG6_>8bomS|2-}qX!Yx?urmr73eKD+SqmE$X(IJ_>e zveLEX_{s@yjC{#?bbU>Zb9ia#iF3Nse7vvp4eGA{eumwi%xCK_l|8mmEtZu zwl{zEp|n!(q<0P1RxP{a@n=kU=FHOaY|o=R3$pj6=RD&Ya3;8R!iAKQOS#7~x0XJd zl{fz1dwmMzyusIt-DNIUUw6Z-f6E&G%p<#U%Uy=o3)cq*Ty_*CzgzLpsnu@hwD%Y8 znVIjok&~P6bh=M$AMy4G*LykkgGsLZMpwqlH}c2*x}(?noS0)u5+qH5>SyBG`sjig5^XX4G4~{Q#zT=5^l{j}5oI5kT;Dv(2 zTdIb-3JcyzU3M+;#R=|W=X-1SWEbsjxm!~-|O}SEef4*l&$<-v+i$2$|!q@IE zxVdKfQ}f<27B&}{E>Fw5U`?J9k7*ZAQ6g1sB2 zUK^kD!qn?qXFBuT1y?7AOob=13STz4U!GL#a&0etD;{^KXlF@rURiFD+waXwD{X#o z?*Zeko5S8nJepDT;@;`&T)VEj#yFeCJ+ps8?)iOH6JOcw99>xKyfQ76^md}-2LSRS9*kV`n7PHHpTjVNyJmuwyHx}F9NLy6)#uD2*rq@R{nYWkjD0MpD7#B$0 z-84JvYU#%E#K*leuWz*M@Vvaad}jX6x5m_^7ZhEZe17H5yw^(H#v)H$-S85RBXP3E01Pv2hZ^q(qADst!Ua-L1A*#4^7Rd8)o zQQ@^oPUo&y&DC`e?DS=oZ7=c^zA`1J=<3vhYn%3^?RV@sIPUV~Yo`3NSF)Dp6ckl# zzGx}hRb1>U$}2vxy7*ah(ZwR`&L@w#T#2QpmOo)Fcw*kp@}lYsV?EBw?K_>W$I{L( z&MywRCloeK&)r`3%EayErJG!?J-NltC-2HRx5T}x&~@ck%L`mjF5MV17nE%;FUT)0 z$*ayTEGVsBS$Ji}j@Mih3X4nX=M}p0uem1da=D5Mx4Vj-o>TPvtfGodC8w9V3-eyE zloa?ko=>iL(ppeI=i0B9?Rs(IuHvGcvgan1=9d(@3O(DNOm)6IY3H8jUE|#^xmGMI zyFA@dk-x)}SNKxyjB=-|u&5}%pe)yO$+Ov$Q(iH-$dm8PD|vF`%EFR@^6iC1+k76hCfrJ6@StxxVz`#4FQw z?JO+2G_|6p)?AWbFO(``70=iwaBfOLpbIFr~08 z-}&O2rA6hrd!CrT&GmTd&Wggiw9?H*g_T>}d6!-Dwz~H1a2FQt$ZMRw%em{>c~4Gr zxk`5Lbe103lUi69oLhLIVs1fRSy7HB|GD|afs{Rtvh5|V?U!aX%&b{c(y(%CZeeka z-?er1g|#)aii@9e&3tC*j>of?KkafYa@D)ia@?+*hItkF7iPQ8?^*Ec#TOjK%XaT@ zR+MEvVcQibDO^yQS5#1(dt~d*v&(iCl$=8u451G-d49dP*l8gN!gBl zHR<`qoY^VzO3TH@;tYrqGX%w?)!l7KO)EUMfEY^NL9wnQ#*&gy;k?@*yq;tnbLA= z-50~(e(NEd=L^Lp!{(@@p>wt?#}BLN`<3Zv^x7{+%}ksBwSPy<?DK{K3XQU%vLV>W8TheYN^`W1pSUux0G$^Qw|#7K}NOx934s z{E^RB#6G;t7r*iGp&!LZocr2+U-b3g?jHMSM)|MO zp7eb6cG{z+ucsV7{ph=|Z1_U|$J(sui>90NbDo&}@f)v>d-8)7b0TBR|Fx|2^N*ig zo_M~oX87#a*N@$Pe)qfOUj{N`k_US|$^ZG~^h(bkrH8^6kAL6aN01w1@bCLIzxen4 zci+G9f&vuy7Z<>%OZ`uV|3B(Q-~Gn*FLw_<;x54DyMNJb`N+}#ql-g6I=bn`rOhjk zZn=)}#jKAmjsED;=8ukU>H4$s66S2aacNX|{+1h;wtOJ{$?BR|d1(v&gr~El^>JHi zjGIXF!#C;L;Fgar{&ZVRWJyaeVudXqJ&y6_uA5-Xm><3&=7f(Sym73CU10t2BI$TA z2geW|kH$E>)9^Y+@2w+k94p*iIef#eId?bp(@t^o@Y3*h?rsxnhF8Ou?=HQ&3moB3 zi=;yeA4!)C=6BtTdn@1|M~7!hH|e_J%Aao{&Acn{i<#kVh8O*`-+x#Qi=_Mh(~iQ^ zzueB~yL0ZYCT;2$+mytlKS#r3X?pa%_3s|xPwU^i)z2&3n{#g?zu5AKE((;()_<{N8i=-v9TJ{z-{6 z;ImJpPX_wC^t{0|J|E}ruXJ6NE~I7QOKCBdm4wIN;>z8d-MzUq2T8YmOsX(J^F*QLquaL=Wwiv=!!!~F2By4LDCw(yR^ z8~s$enKZ%zX%AR8yzmuVgr}uVV;i610+W9WPvFYk*5~x9~Q;4c|%J9PdNN~HaM z`}2`vc6hkwQg+wn<$L#_Bs_twcWohj?bGnF;23^6AswD{n3(rU*M&5r1e4OMu- zDR2#&`Z2t(Z~y+czhTuMzb$!1Liho5fBf-B^tT^g`TJkK{q&W;7nfj_AAbBp{x)Ci;fhU99$7N~>yz8(4?ll+$^7A2Rf%)dgUY{s>4%fsZ%+CeixXeh zuUrsbc>b_jj$`+s={e!eUJbi_xo z+q*~i)6`EBlHR@jcO6Oly&eAZ#-)cMTPY}P3PEm`3vxq*fS)=O!VgjS!RCkp6rcdV zANo7L9}2%amfkN*Z^rQ^`tFclx9!t~zZOcFJo!<}PRUPkerMJWUen|QX_o*}rzx|iq z_Dh3wf%o?q`2A2Af!`0|+YWv|6n;u@L;(u?iwgV;em^AL<-YjvqR!~955$+gADUN_ zz&{kA00k&O0SZun0u-RY|NR30r#Jo|-u=sH{55oSLhb))?f(ydA0hoea_M^=>Br;n zt&bpmA7mOm(L6eFeB%A1$C<_@j>H^6*m3U%z45P=!!!P+MsD0&xAcPp(#Pl;x&#cE z3=al;w2fTm?z$2lhplGB3l{tr9t_gWwQA{_=oUoj5`)^UmC2=5q>tOh^;or5ut*Pt z#f_0@#R!93sE{tC+e??yRCthuCve3e!|!wx;o5u@HA7dZQp} z&aU~&nkyRc+2hi@|MBqubl&}sH_Q!CfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ z@GmbgH}5Y;?ZV&xV-6%XA`Q}_K4=I^MAMP9d~VtT!~G`H+_ZFqZS&6Uh8Y>#H>~~X znk{$R!nuaz%)E@PYqK&jxzv%hc0JzkuptbwXd;S0N~A`Ss2h^@FD=LZ za4Y;-ICtUPt|?)t3=1&)CZ_9B+J-bFOE<)@u}9aXRo->!%kH}5m;w}_00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_sV#_X1BGo}~Jn(P$B3MZtSg6x6t> z7U_`z8IcK@kp)?i4W%PH%0>?4L~i6oKIBIMRF8tF5rt4QYC)~24Yi{V)QJR95Y$ME z^vHmW$b`(uf~?4f(vclyBL{LKH}WDM@}mH%M?utxLZ}(FpjOm|+EEAUM1l?j*KkQ2F)7x|DM1yDT-qDB-#&8P*nqBhiyI#4GPBCvm?MS5gF zMr1-}WI$cuc)j{>M31yLgkp=Q*AT2UKnM;)jW2@32VX^|cokP(@X z8Cj4O*-$#Nqip0rPUJ>j{K%GcXV*f~s^vHmW$b`(u zf~?4f(vclyBL{LKH}WDM@}mH%M?utxLZ}(FpjOm|+EEAUM1l(YM_Qyu24qAgWJVTb zMK+X<>?j*KkQ2F)7x|DM1yDT-qDB-#&8P*nqBhiyI#4H)p8RU0MS5gFMr1-}WI$cuc)j{>M31yLgkp=Q*AT2UKnM;)jW36a=8(jq-FAR{s%GqNBnvY~Wj zN7=}MoXCy5$cOwWfa*~YHKGt|MlGlnwV`&@fjW^8h5aKf(jx;hA`>zr3$h{`N=J5- zjU32{+{lZ3$d3Z39tBY&3ZZ7yf?81uGD z6SBx??j*KkQ2F)7x|DM z1yDT-qDB-#&8P*nqBhiyI#4GPVzGauMS5gFMr1-}WICS*nyWJNZVj_fEKIgk^%kr(-p9|cf7 z3Zh07Ld~cJwW2oEjyg~$5_(|&NQ?ByfQ-n5%*cYQ$cEC99c3d2aw0eKA|LXj0IEkp z)QCc;8MUBR)P~wo2kJyZPwXFQkscY45t)z~S&$XkP&%@sY~(;r$cuc)j{>M31yLgk zp=Q*AT2UKnM;)jWNpJeqNQ?ByfQ-n5%*cYQ$cEC99c3d2aw0eKA|LXj0IEkp)QCc; z8MUBR)P~wo2kJyZZ|omwkscY45t)z~S&$XkP&%@sY~(;r$cuc)j{>M31yLgkp=Q*A zT2UKnM;)jW34O7Dq(ypUKt^OjW@JHDWJBr5j_~RHgX^*aw9MDAwLSBdK5&BD1@3(3u;Ae zs2z2nP9*fl{*e~xkpUTz37L@vS&l#c8u8##~@xsez7kRJt5Jqn^m6hh6Y1+}6!)Q&n( zClUuGD6SBx?O{g2>>p{7 z9vP4knUEP-kQLcbIZavZHL|Ku+XFUgSf56hQSTh#FA{HKP{PirP>+>Oh@H7=isGEz%Bx??4L~i6oKIBIMRF8tF5rt4QYC)~24Yi{V)QN;K*gw)DJu)C8G9fdvAS<$= zbYw@_$bp>5jl9T*{3w9xQ4lqv5Nbv(s1>!LcGQ77kuVnfM_Qyu24qAgWJVTbMK+X< z>?j*KkQ2F)7x|DM1yDT-qDB-#&8P*nqBhiyI#4H){-R%vv`CK($cRkHj4a5CY$zSs zQ8scQCvqb%@*zJ8pn4QUjVOegQ44BCZKxe}piU$tV*f~s^vHmW$b`(uf~?4f(vcly zBL{LKH}WDM@}mH%M?utxLZ}(FpjOm|+EEAUL_!kwkF-dS49JK~$c!w=ifkwy*-#Oy?$ISZDo2ndOYNl3|9 zvtdiljy(qoj+9i?G_-W|42(?7KI$`P!IBjLArUbNDH&@vY{}WN=Rm=cl8Ty!mX4l* zk%`%`(6dWn3sA*{F=ouK9n4Re}XTg#c0U;4F2`L$C zHf+h+vFAX+k&=p9I(i01CT72*K64f`(6dWn3sA*{F z=ouK9nEmhcnX_QYihz)an1qy!H5<0%?AUXl;7CbDO+!mZ&%nsU?03><&VnT?0zx8U z5>hhOY}k^sW6yztBPA6z4J{o#10xf&-&vnI3zn=12#JVENXb~UVN1@AJqHSolvLC- zv~=_gj7-e__xj9Puw+F*NJLCRO2(QETXJ^nIZ$wN97-k`)0V5itoV8EZCd$=R{zK*5ocikgO&j-G*$iP0gha$7q-3nwuq9{5o&yC(N-Am^S~_|LMkZ!o^_jC^$%=rG zh?s#Oy|&ISZDo2ndOYNl3|9vtdiljy(qoj+9i? zG_-W|42(?7ZuOb7V9APrkcgOsl#DeSw&d*CbD-czNkvUVOGnSZ$i(bUpE(PbtOy8+ zh)GDvShHbE&W=3?3XYUi)HJko^bCwl%vtY@JfRKoogp`am8@A-^*mI!ZNJ&La zLrX``z{texL7zDbmaGT}iHJ!^$yl>tOU{lx2MUgqRMa%Ibo302Ow1njnX_QYihz)a zn1qy!H5<0%?AUXl;7CbDO+!mZ&%nsUuQ&Gn!kh(5Rs@7Z#3ZC-tl6+7XUCoc1xHFM zY8qNPdIm-&X5aLgvtY@JfRKoogp`am8@A-^*mI!ZNJ&LaLrX``z{texNuN0jmaGT} ziHJ!^$yl>tOU{lx2MUgqRMa%Ibo302Ow7LPGiSk)6#*d;F$pOdYc_1j*|Fz9!I6@R znueB+o`I2x*|R=#7A#p25E2oSkdm=x!tOU{lx2MUgqRMa%Ibo302Ow4|Feda7! zvLYZPA|@dvW6g#wIXm_oC^%A5QPa@U(K9eIG5bCAnX_QYihz)an1qy!H5<0%?AUXl z;7CbDO+!mZ&%nsUEYoMsf+Z^gLLy=kQZm+T*pjnj&w+v?B^5OdEgd}rBNMa#gFbT> zELjl{5)qS-lCfsPmYf}X4ip?IsiF604nV9{a`pj9dWJN$oL`*_T#+nUVa(3)F zP;jKAqNbsxqi0}bV)lFKGiSk)6#*d;F$pOdYc_1j*|Fz9!I6@RnueB+o`I2x+3&5- zoCQl(1cXGyB&1}l*{~&N$DRWPM@lMc8d^Gf21X`kzmGn17A#p25E2oSkdm=x!9I(i01CVqXG=NINISh6A@BqAmuC1cHo zEjc^(94I(aQc=^;($O<8GBNvo^_jC^$%=rGh?s z#O(LeXU>8pD*{3yViHm^)@<04vt!SJf+HmrH4QBtJp&^Xv)^BzISZDo2ndOYNl3|9 zvtdiljy(qoj+9i?G_-W|42(?7{s4XEELgH4AS5CtAthtYhAlZe_8cfUQc_XV(9+Q} zFfuXw1NE7+V9APrkcgOsl#DeSw&d*CbD-czNkvUVOGnSZ$i(aq(r3hhOY}k^sW6yztBPA6z4J{o#10xf&|Fb@G z7A#p25E2oSkdm=x!Foi<}6sUA|NCpCLtwb&4w*G zJN6tXI8stk)6mkG1u<}6sUA|NCpCLtwb&4w*GJN6tXI8stk)6mktOU{lx2MUgqRMa%Ibo302 zOw9gNeda7!vLYZPA|@dvW6g#wIXm_oC^%A5QPa@U(K9eIG5gc>nX_QYihz)an1qy! zH5<0%?AUXl;7CbDO+!mZ&%nsUuZws5!kh(5Rs@7Z#3ZC-tl6+7XUCoc1xHFMY8qNP zdIm-&W`DXqa~3RF5fBm)laP|JX2X`89eWNG94V=&X=v%_85o(E{TceqS+Hb9KuAPP zLQ2M(4O?<{>^V?yq@<#zp{1i|U}R$UXX-O&!IBjLArUbNDH&@vY{}WN=Rm=cl8Ty! zmX4l*k%`%#rO%uNOI8GgM8qVdWUSe+C1=N;0|iG)Dry>9I(i01CT4%OK64f`(6dWn3sA*{F=ouK9nEg5W%vrExMLE*M<}6sUA|NCpCLtwb&4w*GJN6tXI8stk)6mkHls%vrExMLhhO zY}k^sW6yztBPA6z4J{o#10xf&|A#(v7A#p25E2oSkdm=x!EjE<}6sUA|NCp zCLtwb&4w*GJN6tXI8stk)6mk?Nuw+F*NJLCRO2(QETXJ^nIZ$w< zq@t#wrK4wHWMcL==rd=*k`)0V5itoV8EZCd$=R{zK*5ocikgO&j-G*$iP_(%&zuEI zRs@7Z#3ZC-tl6+7XUCoc1xHFMY8qNPdIm-&W`C1Da~3RF5fBm)laP|JX2X`89eWNG z94V=&X=v%_85o(E{muH!S+Hb9KuAPPLQ2M(4O?<{>^V?yq@<#zp{1i|U}R$Ux9Brx z!IBjLArUbNDH&@vY{}WN=Rm=cl8Ty!mX4l*k%?ay>ivZ|3zn=12#JVENXb~UVN1@A zJqHSolvLC-v~=_gj7-e_R(<9ySh6A@BqAmuC1cHoEjc^(94I(aQc=^;($O<8GBNwx z^qI3@$%=rGh?s#O!a^XU>8pD*{3yViHm^)@<04 zvt!SJf+HmrH4QBtJp&^Xv;UVqa~3RF5fBm)laP|JX2X`89eWNG94V=&X=v%_85o(E z{lE2@vtY@JfRKoogp`am8@A-^*mI!ZNJ&LaLrX``z{tex|D(^G1xr>0gha$7q-3nw zuq9{5o&yC(N-Am^S~_|LMkZ$eUw!5*Sh6A@BqAmuC1cHoEjc^(94I(aQc=^;($O<8 zGV$vo-M=tr!IBjLArUbNDH&@vY{}WN=Rm=cl8Ty!mX4l*k%`&gq0gKJOI8GgM8qVd zWUSe+C1=N;0|iG)Dry>9I(i01CT4%9K64f`(6dWn3sA*{F z=ouK9nEhS)%vrExML0gha$7q-3nwuq9{5o&yC(N-Am^ zS~_|LMkZ!|uRe1YELjl{5)qS-lCfsPmYf}X4ip?IsiF604nV9{3`pj9dWJN$o zL`*_T#+nUVa(3)FP;jKAqNbsxqi0}bVpi)jXTg#c0U;4F2`L$CHf+h+vFAX+k&=p< zhL(<=fsu*X->=V{1xr>0gha$7q-3nwuq9{5o&yC(N-Am^S~_|LMkZ$efIf2;ELjl{ z5)qS-lCfsPmYf}X4ip?IsiF604nV9{9`pj9dWJN$oL`*_T#+nUVa(3)FP;jKA zqNbsxqi0}bV)hT|GiSk)6#*d;F$pOdYc_1j*|Fz9!I6@RnueB+o`I2x**~n$oCQl( z1cXGyB&1}l*{~&N$DRWPM@lMc8d^Gf21X`k|A;tOU{lx z2MUgqRMa%Ibo302Ow9gqeda7!vLYZPA|@dvW6g#wIXm_oC^%A5QPa@U(K9eIG5aU< znX_QYihz)an1qy!H5<0%?AUXl;7CbDO+!mZ&%nsU?4Q(U&VnT?0zx8U5>hhOY}k^s zW6yztBPA6z4J{o#10xf&e@dS@3zn=12#JVENXb~UVN1@AJqHSolvLC-v~=_gj7-e_ zX?^A_Sh6A@BqAmuC1cHoEjc^(94I(aQc=^;($O<8GBNvS^qI3@$%=rGh?s#IGCk{KA|COI8GgM8qVdWUSe+C1=N;0|iG)Dry>9I(i01 zCT9PvK64f`(6dWn3sA*{F=ouK9nEiA5%vrExML0gha$7q-3nwuq9{5o&yC(N-Am^S~_|LMkZ$eqCRsLELjl{5)qS- zlCfsPmYf}X4ip?IsiF604nV9`c`pj9dWJN$oL`*_T#+nUVa(3)FP;jKAqNbsx zqi0}bV)ifVGiSk)6#*d;F$pOdYc_1j*|Fz9!I6@RnueB+o`I2xUpM9Yg*gkBtOy8+ zh)GDvShHbE&W=3?3XYUi)HJko^bCwl%>EU9<}6sUA|NCpCLtwb&4w*GJN6tXI8stk z)6mktOU{lx2MUgq zRMa%Ibo302Ow9g&`pj9dWJN$oL`*_T#+nUVa(3)FP;jKAqNbsxqi0}bV)k$7GiSk) z6#*d;F$pOdYc_1j*|Fz9!I6@RnueB+o`I2x*}tjJoCQl(1cXGyB&1}l*{~&N$DRWP zM@lMc8d^Gf21X`ky*_gmELjl{5)qS-lCfsPmYf}X4ip?IsiF604nV9`s`pj9d zWJN$oL`*_T#+nUVa(3)FP;jKAqNbsxqi0}bV)p;nXU>8pD*{3yViHm^)@<04vt!SJ zf+HmrH4QBtJp&^XvwvHkISZDo2ndOYNl3|9vtdiljy(qoj+9i?G_-W|42(?7{vCbh zELgH4AS5CtAthtYhAlZe_8cfUQc_XV(9+Q}FfuXwclDXGV9APrkcgOsl#DeSw&d*C zbD-czNkvUVOGnSZ$i(d5(`U|tB`X3#B4QF!GS+O^lCxvafr29?6*Ubl9X$gh6SIF` zpE(PbtOy8+h)GDvShHbE&W=3?3XYUi)HJko^bCwl{JI(EFU(o6WJN$oL`*_T#+nUV za(3)FP;jKAqNbsxqi0}bV)h^CGiSk)6#*d;F$pOdYc_1j*|Fz9!I6@RnueB+o`I2x z*?*|doCQl(1cXGyB&1}l*{~&N$DRWPM@lMc8d^Gf21X`k|B*g(7A#p25E2oSkdm=x z!_69M&VnT?0zx8U z5>hhOY}k^sW6yztBPA6z4J{o#10xf&|3aTR3zn=12#JVENXb~UVN1@AJqHSolvLC- zv~=_gj7-e_OMT`nSh6A@BqAmuC1cHoEjc^(94I(aQc=^;($O<8GBNwF^qI3@$%=rG zh?s#O%M;XU>8pD*{3yViHm^)@<04vt!SJf+Hmr zH4QBtJp&^Xv;Rh)ISZDo2ndOYNl3|9vtdiljy(qoj+9i?G_-W|42(?7{#$+KELgH4 zAS5CtAthtYhAlZe_8cfUQc_XV(9+Q}Ff#G$CfvU;XTg#c0U;4F2`L$CHf+h+vFAX+ zk&=p0gha$7q-3nwuq9{5o&yC(N-Am^S~_|LMkZ$ey*_gm zELjl{5)qS-lCfsPmYf}X4ip?IsiF604nV9_#`pj9dWJN$oL`*_T#+nUVa(3)F zP;jKAqNbsxqi0}bV)j4kGiSk)6#*d;F$pOdYc_1j*|Fz9!I6@RnueB+o`I2x+5e=^ zoCQl(1cXGyB&1}l*{~&N$DRWPM@lMc8d^Gf21X`k|Fb@G7A#p25E2oSkdm=x!9I(i01 zCT72}K64f`(6dWn3sA*{F=ouK9nEfXD%vrExMLG0gha$7q-3nwuq9{5o&yC(N-Am^S~_|LMkZ#zxju6iELjl{5)qS- zlCfsPmYf}X4ip?IsiF604nQ-yVeqqjnB`X3#B4QF!GS+O^lCxvafr29?6*Ubl z9X$gh6SLn!pE(PbtOy8+h)GDvShHbE&W=3?3XYUi)HJko^bCwl%zjIK<}6sUA|NCp zCLtwb&4w*GJN6tXI8stk)6mkphuvtY@JfRKoogp`am8@A-^*mI!ZNJ&La zLrX``z{texx7KIQf+Z^gLLy=kQZm+T*pjnj&w+v?B^5OdEgd}rBNMaVMxQwgmaGT} ziHJ!^$yl>tOU{lx2MUgqRMa%Ibo302Ow4{;eda7!vLYZPA|@dvW6g#wIXm_oC^%A5 zQPa@U(K9eIG5g=>GiSk)6#*d;F$pOdYc_1j*|Fz9!I6@RnueB+o`I1Ge|TrVFlWJ% z6#*d;F$pOdYc_1j*|Fz9!I6@RnueB+o`I2x*>9)MoCQl(1cXGyB&1}l*{~&N$DRWP zM@lMc8d^Gf21X`k|66_LELgH4AS5CtAthtYhAlZe_8cfUQc_XV(9+Q}FfuXw?RCC> ze0)f6(s$w4m#;6k!QI!(liQcKo73-iw{PL+ujlt)Uq8Qoy!rZa|Nirji+3mS>DA}Y zk0-AWuV2Hbo0stZ{bTSg{PFqI!^7#z&*0+Z{=>=V@YB`nmy4$_7w;W1c>M9>{loV! zFYj(YJltHJU3|K@`}yt1>vi&QdUJd6cJ}_}Cb;HTwjc6Ivh?CQ(c(@&QlZ!bPxJ)C{Ne)sY8{OtAi;xzp7@csV! zOUEY68P98rc!MD?Ix0i1h*WaEV?@zwIe-3W%UcR3_{rLXlHT-n_%;X!^6mch{kxO%*N3;)o7>>=--%cIuKK%6M{m&ntZ_mF4uW#p{UQcg7d<>uO()VZK>CfQ$Ho3g} zcK`Y1^ykMoJ^lLS{Y7|t^^|;iyLr5Re|vWK?&&(beE#r!@^~FwJl!VmuYP=gN#8$R zzdoJagpcpvz5n*<$Cs1K4=CMlV=d+LRUoSpAefp9Gta7YjSpB z{&|1%Dfo2#=}U5bbN}(}=eN&ap5i3@`g-y1`tj$}=MN`89^Qv%@2@_cou9|=f4uwr z?)vBX_2t9;-RbpRaQ<`~rne6#cb~qWT%DYK_G{K57<_pD zaCP1pVQOx;5xiIeg5?A;Whbw{rSC*a`o}%=KjOY=ac*E*CdUD zlhaQxCvWj%dUgK%eE0Ro^F#XZGr52NKKXQg`!oH1cK80`+x16p>*@8=TYP(ee|dHP zdi(r6IsNc8xV-)P;qfjB-#et!4x8h;4xUT@CgtEZE17s=Vl z!{^ic?FfR15BERLl9$KRhp)-S*+cyL;q>hB$MfZL{QmL$@$;AO zk5BKvKHQ$YrpZNm@#Ed)<;T1G>+`oCk0&4AyX+soq%S}3?k+#Zr}t+U$@hzwuU}uD zf1Llkd-?Km`ZfOiLxHU*7+?zPSAPDZc#hR7$D8=)UHawZ$GfvH zPq(kPw=eO<&y&aVlef3K*T?wb>gMw5(Ybm5@%HZG>ivgjSJa0uuWz?EUw_+9*)ci*2cAClL^+;n<#|Lsd~ZTwuGetSN9JiEVqOCC;QzjFEI{O0EE z*&a`|j&Y@blw`58r+~eLTH=JxN|n0#Dx_UvAES zJY1fhyG_A3r>Cp4A1{}mFR#9zefj$K@N%7`m*Lyz;5K}@y8iO*{^{z=*=rI$+B$FIVrrJUrcgMX^msjt;UtOjyhtHobAHN6bkGuCT_wmE?hw$n0?dR+D`%l-` z;l<l{rsB);p zP!w9Oi|hEw^6qBij(m513)ZOIp#7nv@rB%Tyo|7Ob_@1?Q4tJK+E zEjs1B)jTIM1aU0!d#~cXkL$d5sdU%A)7Yscef>PEQoqODOixngDNWPe<}1x~RL!lz z(yE3B{#y3u8ocsj6NHp8JGj}pvMJYVa`qkl9QWpEY|-u;&((GN^PJwrs(Y|tul+1j zbFcQ@mfmGswaB49+uMDCYjwXqttV|ghv}>)mq%a9{t9KYTlwhbo10<^lN)5~?rdMm zV=upp_f*}J_m^#^whmp(lj7Ri z$|VL#r|qQ|r|cW`UE5XEy*AP}RhM039JhOCMjZVms`?CK+lO45+QfXz;*gb#;>fF0 zea-?Ee7bV=5 zbwdd4{nbt7U9YE6w)Jm}^H|F1YY#84ocq(rWp(u``qlKG7rk2D*q`-0F7Kh9LtnT4 zmd+k|lh4yKw_X0$v9HH*e!uR0MtL66?`q~6d)d#d@b)F%Fu2?c4O77*}H7E@S7cLcNJNAG$Ha#=F`wUViKvn z`}__1=)dPx!PlW|*S6NJ+xH>vYtL;}d}2^48a1amzFdBiv8Yd=$0+mBd~b7KPd(hj zdhNdG&9-QtZCw}F`m%kU^Lfl|Pk@y{o(hl9|Jfd)4o{|BlhTfWe~3hTq%HpXV{{ zbCqVOrg}`75|ui#3FMyYW?vqy@~mC0sf%&u(Y#k-K~%?F?7jTWY4bjt$-B0?=BA9R zJezd-&W1DyEgIK=V3%o*cWcI-D@{w2nfep9&A89!i|eB~K-Vl!Zj)JOtIJuFScI2v zEt(~k>)AZ7(;O7vTq^Kqc`GUq!PqqVD$1emv*7jme)E$vGD67)5qt=esXe&K`mW}H z4c}+)^Gc18FN^jfY%pV6EwL^7ZsoeI^RH{~q5aA&Ud7~rrh5hGk@aaO8^6qSb(YUp zw;kJ9+54MTP{)ZX^$2&~-Fr^`W%-T;pb@{!ilh^(X;XK~8WR+)x=i|Y0Jl%3T zCS~}AKgo-!QlP~tn*Q)H%ad9$si0h+EuE2{pqqSNh} zCw`AUjyc%&i(7Sex3f)F97Az!XZt!1i_L7S`>opAuuBoExMy44`l@qk5qyhwG{(E( zYs0*+IzQr>s%&QKy}qXcMl54oi@x;ZzI^X{hbKSIew|OB%Oc$@ZrxBU-P)J&i`+~P zfMZU+Y0u$Nd0h_n7(b)#Gbrt91*mq-0bO!l&t`oB*zfXiRpd_hs$R0HbuZu3klv@5 z%S_GfbPRXXOZki{XvO-ae*}%^25Q$y+LTTD8t(2AU(HB3bY1StK5k$2C~uk~Z;!7n zhrJc~yUP=VpuQRav~>4dIH!XK@tm3Cbz7DvSq!$2*+njO1SzbW($ZK$}6XaC8iZwt4stTA=q)|+zg@@Yv` z8dQ4VE7trO+O}IxtNPE3nGTs6pJg7)Sq^h5F2U{E0f+;a!do}~?Z3>XvbcOuy?>s& zc{!@Q)GKApXZpd{P2qUdw~>pc9>C92^HzOfwG{`e*=_BQVJa8}ecRXjD66t;OQB=S zmuSufdP`TXRBPQl!aPSv)i<7FQKq#~#~ue!b>B0sx?!RIj$IE~!O@H=gH#&aSys<` zWB}V#&Tg5O#XWhR%-F$-ebu*_MeL_-$H(0E%jWSkSDlY}TO7A-Jl%M|nfbEJO1HJGyjc^=%K=VPeEY0~x|r8G z?x)*Zb=B9J%vYFOzU9=8>+{8C*~_Zdj(td;K54@u)T%CR8_WOeTbs|UV|uMPy1guS z|8N2Ip$h^qukz1+bHRdFTUTuG0=hJ&@3!tx_GIjsZ~p8d#1q8%c6nI>oIvJK7n|6; z8b1g17!tz2mH_c3(_6@>ZAy^Vs;~bxAY1MhAKYeVZX5x)kU^XDz)O`1GeKjaTW9Upn5lwLKE(~Y#{#o=b1CoD3AtWPxyQ*Dc3FaR zQ@<@slcxjT7CsRs%_YSq{GW66-p@$*KF6&~iJZL@hUa zi^U(^*rsJWk2<+ePHoYSuvF{U`QELkX@&@G=cMWcI5^$VoW?xEc#LOWx~x4_^f13! zRBmRmJBrP$b^+4&uV}9rStsiI@q=i-sb0Z^+tMz2=+0}(_d6b8^#>bu6l{ILd|#n2 zyM)a*MaR;{yqV;gtuahXQ`_P7dXI70lvbhc*RPesn7@sRsom~ML~ew+Ebm^s9O%K< zo;7n48)P0MyG!R*6?rJ#@7~((bP6bVk=c3Z*&XGNvm3IyQEDw!nZHHf$7)^Qkd|-G zimKC71EmCQ)@)zUXZ`f+P;^UzTI?FC@ z0rF{aSv8hsku1k!5OMF}G8k{C1 zhuU%^(r)5g#jYsl+#c<7A;>s}m;KoMy z)|awIwk_N}-#VaW*Nnl|wMTWB+%7#se6j? z^QRbgU%B^AMLX>;XnPb;lYPDpi|osJPJxl7Wh`Licik*Oj9c}b`T1j+5;GyG{EcFo z2A_q*_gOWqx;NK3;QsV5gkI~%aBW?-*!Q}w`y0$x$!D_Tmkr&rAa2Q8R41T#nFC{a zH`6$q85pUbRF`Yt#JbAG#R56RrDMzW7C=#i^IJCW^P^#Q`+DUA1UE$`3+@PW%`D?> z4{2bTmAkyt!Ae;qe-yp0ea8HK7Nnr=tL8Ry(H5-nfa693fhO}LU5!nD?N{!uW?8$p zyxrtBJv_!e11|^MSiRA$O!8~uCN1SYy8O~V!~{Np-Qf1%%H6eogoVsUF@QpAV^y*O z{S*#0-D}2vtwZ#%5kt<_HOsH^`+ki5-5c(Iwi3vuv6(VdqjfCmW;oEHUbCOg9bYj_ zjfgPMC=fzj*`DW*TuW$b-|$CpEoB=Q?!YhyHMnJ;suXK3=#dd}u~8i;Q2BSA(6#YG zo@@EKM2K>O0xwHrKXokG*Fp6gxpclxfq z-0DIt#WC0S#5KXAJ*4eTESuq|)*+ao81nVF+ihSSxvud*yb7s>5pet^)1`KMl^`m0 zyQ4ju@8G3;9EmYW1}jnBMw%vKboCb49!*WDS~K)lKyi8T~s$0F~B-N0ygB?9osu z&CK-#zI%t}e%1JH`O9q{N7L_$FO)w0nvf^Mb^CjdSOto!XI**-FEuOOGK|jW^U<+~A z`N}NJ^L_12Js?O2wI6zJ{5Mqj;#kiP#|3g-}hCjE98HU&FI^+SjuhOrl#$0+3!6E+92%a_50Wr4Z9bJpQl%Al*kHe+0G~` zZy4)koPP>t=FI9H#)E3S@9(;HJ6&a{lPIj?)kSg4qNu-4of+qQ;1GcS@kx)gpCJyytsv zebpV#t$gDi%_VHj2|G5gg*RHTCJ3#IS^IXx&M-ebcNM%0yn7sljq~SSF)bcCnl0-X zaj92kUqjtgY+^jRh z2(~w0^W;JKJk_iPYneT5=C6833Kh!?h*__-ydIANb>H3cjg%`hlxWh%H!c)U(lb9H8d>W9LW{l_&W_` z?Gj`rU39ZWw42;{e)u`s47u(As9fbWl&`x)v(6Az!%#NJPnSmf`zqkN`;F2hzRN#07yk2SwRy0NFcd>&A+f``u($)=2>Sc@-gqtrD3> zVf@Zq4i^XZc|u#wQ}@mF?9LH6&KZ}Fz`XNzaQH?=bY%|26X#W4Mc&*$ z@?QE!bWJ}q#UyMYx^8iNjXV`LlS0>ReYF+fRb_a4Sj5f(o51-L0L%|1HqWLCE6Wz} z5lpO{ZEH}JW@M9w2LU;LQ*lu;s0NiPE5>ZMdfy&r5XW^6l>V?1EN0(B!yMMzmfa3wGCeu7z1;7_iv1_e1Q zHye2*d)PM>uqyR9hCXrYaWBVMB^26G4B1bzD{(Ko;L0aTBQafYUEpCy8A1b?c zr6_vbFlu!lL&{a@Yiv-5sm5H+R=m8# zczH3iavIZ44!t|eBU}C=#9pD)B+NID!4WYb4)$>o3y5yms%x7Wc`OIbu;}t@Dl33u zza0itxoPzB%1J!%%?g@}fD=J$VGMdZ0@6x~uqufQ~mKOcc#eFtXdk ziCFVJ`w8IkKr-mVa>f)SP}IH^ZwK+I79(n#_I44kxJnd5ygXg$mbyF7Vg2!78B+1Q z&#->hd7EF?%-s|D;%03cw_QW_ZB?-5Xv(&iEdF-LhJp`y6!qvF28cKRkckk5Va8HE zF7QiY;|}(}n{x_q89gNIHl(rh$cKB~ZHR|#3ib7@UB+4DruY~f`2>dQY`b=czlQoL zSD@3om+sv+Q@&X0cJw=_qHF5A$Yr%w*O+(k=Hs~N-Ehq6@g30>pF9)$h|HH+B+k!y ze*(GS^|kDIen;{4rku~bc~SxKH$^LkZ^E6}UB?*uXTgdnCbK{(Ry^q`nIoLd2y}jx4p_Uo4>W-?YH>#F~c0J*_|%GWZ&>C z72d0KYOHt1zN1gOREjC=^$Eh&?=bk^CA6!7&C{_bGi4wbad%C+Iz;ErPR#87?tIrl zp}`H=1|2YerfI_qW@}dv0n~R~nf1*iBAZuh)FIAJOJxfK!~zW zvg1OCrSg;US;tW<^}+`Ms~ybEFs;5ltjgtcI)hW*D6O=lGn zOch+zT&;H(8!s`3<4~#aO?4d6i^Bd|Jz!uVyMm7>F|s0?{`PUmt3M^XWl$8 zy@zKZ5BYKLXz5l;Q=6JN51MR@*hdFHq}4p6oVW_`N>+CC!iZgCeWN&m0gcln5zjvW!7_YKwkC|cloH)j^Jxkr^FcgMEyq}#Xd5CgW z>XZw6NQ(T)+0x4g#P*q6mmmePTV~RGzRt=SpIW0@1>g0_aj6GX&X5(?;g{lb9b`ZO zh^sAjhPJo|zZNoG_26NlFqvdsQGKW6{Zyk>Zwdedd7nj}df;5&jiJGKyyVh`Y>879 zr)DeioEHd_wO_V7O^2-&wGw5%TwB)h3iG68oXH6s*8@t)FrJNkNz)ABj@)(Oe?DRLvup0{G(%_MV7a(-hxsd?DjVvt#)an(=NapL zxo6qj;^nz9cPjqI^jtqmC}o`G17Aa&QTwF7F~j((IlI-#a@ty}@hr1hAFXi;Q`ClI z=~3rYywT$oJFw`nBj2-a{W2=*#>zv1%j20>Ko@F**rhGCuE4Zq5r0*d!3r*kVhwSM$sk|IuXK^mgy%6 z^a~$eGcUMqyB@L-SaAdiJ>Hpw+^~Eo@p1&mpG(%`*BT#ecuC*}E4oLQXMvdXzWT5$ z`o10#cH?YIW5|DW05I~bmc*xiE-bA2j5?dID9XEZAzNV<+BIy4t?eGFuM3y0a-g6{ zte#h1ayJ}LIouC;j!`a!3rw$lpHaN?@?G}=d5Udal{IWjkLsENBnD1~YYaP{gSNvf zt#izD{+5*mM&4KtVX@I$PhMIUL1Z%?3TuMvp`oA!PL^GqnzOL?R>1MTo}(FVRhsvoCC5+OGk06*w?3Cxee_o!)q$CWXO)$9m^k_4@SeAC zge_4jYgIyhVZyZGUGi1dE%)gHjAIpd51_Z7`MJG?A)SlDsLgr-Cuj(Ug|h;{mDHmiL5F!g9rgM`X~5{Ct{{w&W6cwWAH(O>s- z-ln>&7>m&t2i~qnVT-i0tHC-;%pd>@jamPaEtEh}XEJKd4ucM99(SqM)!S$I@U~`z z7SAqyq=4sBjt4taR+%r)O&!;C;tM%h(9Uk^Qa_hUtU*oq*emA-e1*dx7M*jspnlC; z@u{tva4o@LubZ9>AS&BpDkYySQeJ5Evm!NNC`ZWeN>z9vP2Ok$9#vK_33vRuU+zGgwZKGaf;D~>3}>vsxh zMJ*sW;sY2%7)#}``Qt*CfA4o3&Z}PU7Q4uDy5fNKil8rSD$lhq`c8sKh~P)3HLDV% z`c7K^@aITiz+7uQ?rUU&{2r;6@!VN(^v)-ycsxst=B~f5I$(VH`PLT{$$WOx-6A66 zZo)UZ+Q7Vx-fyvHxQv*qQC zA%&>+z;6}xF>O$&8e?p=*f9|-fC_}lY5^6Dg^|1qNsrRwUzY+yVq~tW?K+XD{K!bL z=P@SPV;MW2DPapbvG(`JPh|-65Z3C&V_EIR?{*(w=Z@54?EKlC`ehrZH(h)2Vm);kE-NgHM?fgXvS^rReepy?Ds)IyBSEYsb8P!4^ErByhm;@~$B6>1sla z9@>=%RDmWKGrprU5+}5 zgR2SEn-h4z4fpK;GK*GRHaVrnXHkvFA<^ylI^XZe2)Dr{Z#VAG#EFT3E#SO zX0hvbsK{Ey_!sugM>ZBYH1DF7!&wVeN!J5=Ww@sb8iPj z%d@K$%D{57Y(!kTOTopoEK`et!Hg%*RnC$`Uc~}8j@mc&9!!O+s9D>&y@CnjS4Gu_ zJJ#c|*E6GDo^{`k4u5c$JI_&X;okM0kEE045JfTgbZrNuZZnSYD=|cdX5MO)?fHW> zN!jI8Q!rb`yp&B)zp$9^W~>Aa)7pO3aJ-?)e@{j_I9b^`H4yOfd8^i3r9MeQtsh>@ zXqNg@dTH)Z%S*7~pM|(jd6uMXh>8`c*J z-FI(ff+E^@KgjR6c{C#o0B3zGY=Z%29fqCQ)Nqc;EW6qIpOPr!AqTv$*NjG;@F^_F z#pdArUJI;vJjKlSHmSP062w5Wo)(Nmo~5~`H$MncH4NXvulaibna1`i=MUh?XN8Ly zAGX||rj`<#3~xyGoTBHtT-lL9DQlKw14q1dgOO3(4T3rQ9?FSSD(!(ykO_zXOhQ+X~2)i&?22rLbyQKN#kRbLRkIy`;JDGk_! z)&OMigS~@DkT8cU#gfRmaJ0|p+019|<)`F%^rO|U%NL?4_@!+|?qY%5+>46<9$T1P zAec25HRf8qA)deG(tZg`GcxB-v_P}WMjq2WGM#7jqA(hrdc^+>=qC18PK&DYM5+<8 zWa>wpCe61T1Lj3eXMw&vppj{IB(YA_7b73l43EVfAa!kwCal)q9!Uh;{Jd$}SrU-G z$t~EBXH8vU8JX*HBsI{k`25)hP`+?2Hwv#!qmg^CX`?k|LOn5?>JD>O(N|(V>w@4_ z%Y%tY34Zjz1is?HAc|1&BaGK~Me2`BWm+uo5ZEsh>QfnPHP6&c;sG9g?)ne0@4g8} zNqCB*0%2tp>7gAQoC`Od-O*Y3Gio8P1i(NSFqWKeUGMc3;#?6395Ogi*y*1bbu4e$ zWeQnoN*5%a--i+kXnR&4@kF97s9|NB-O(mFya|(`DGe)m2HA+`xrH-ec(lU5E#J$! zW!XJz@YdkWyu&LE?C%`&kf1f+n+U0ye$T}sh7lWHz7J>S%hd7Ysi&G7d2oAmBlmIk zAVbgJjmLotGw8C$E1e6U|7< zD1UKtyF09^?=0J0=quJe2xxW#h?q&fp(&c~VO_*ynbk_l9roHJ9Dk_Z`>C7S73s^L{%BY`L!2+wa8^PLa4Kj3U_h)YY+~1-IqL zay5apbvf;Mk?Qxma=xFRfZL=)>TL}Lv=z4fW3U4R*MoH`)(_#fm&5{L&;45(p$wA= z3uD0gfmz_R+tD1ehFBau?gKbUGLquuE$gm{m@9H=6i;$LgE@QlUcKwW=oqvh)Y+CpDW6I zUY<4)qYU5mBn*@%ekV-2?~(FNJCw8x*)`^k>d)<~g;#*Bi9KP; zHY2BftZr`EDRllW`%-}Y?p%p!nQF!lX4D&(8caG-WB)DYTyvMVH#C-D8!`lsWZ9{S z#hxGu3Xk!)(Qs7`%fwapUbuTU82DpmdB^)1p;}DDy1OrZGY4m#J$Al6o}uyv+&xv% zVv-c~nP8Kb(r}=U7N@`BonWkdOL0SSi2~(?o77Yo{9mYgvk6#i@mwU-5~ml{0zawZ z*x{d(NJm>D9|px=WhzPnD*MY8JT1fd&+)cIa6ykV?2(WIjEksZJ*n!O05d2#(4<`^@1(@ zP!q;&i|VS4oAMkVd^hcTPBLVgy3^mwS(k|ScWASjSS-HMte)3yBN0A!9Kn6Ki=?*g z=*QtO;W^7iE_g4u@?;Zd^!KTDv98Tm<3~*mpVW$-yS(bJY1>z0lsJy@fYO!CFcJqH z<{Re15p=?fN$P-2l(aca)%Bpp-8Py0G-O9Q<#2-p5O>D(-8~lGYeRmRmt5S$jmMl& zm)Odj!vyhXZLVNWh(Fy7}a{@k9d7YTzRDot9+t$lJyIiR_DW#pvjFv!t?V zpwIlzFU3uP)n|=Dd=FVTsP%7H9d>yJeNCPkWBN;`4S#SqBU-}nk|LRg#3Sqzk6uwN zSxxf#81WCC6^L2h_@h?Hmj~*leaqi>3v1naKl^^B8sG{y?`4q;pX^i0&IH2}R}m&T zr-2x3?~o?bA$>-s5qY+Md>~)?`W2n4KmFSvc;`%G#2Z!D`(=xB8rvN~VqNJuF%$ z@Q`)>+=~Wbd%}>t3>z_!3AY!o8f*C+6G;V4baA&gRSJQ4M+bZ)33rlO#I051GQc_g zdS~#LnXP`Z?s*?fq<2U9d>-eSpa^rj1bYtMO|-XaK8^OM6+|`1>EcO(Di=Sa^nl?U z-FPEf1}~(3ep5BI=IyfH;?wY^RHNbj;*5$V6hX^_XK;Ric`<-hHgAl#BgGTG++hZQ z)7^1k__(^SY}*Sn?#xct<18${G<^Lw7u%#74d<9$SKU`7YMyq29!L*R;Rn|F5T-nQ#eV zyB01SI~gamBlNv}Cp7rZN)tEyEW)PS_=4Ikf-+t{uzMq5IN1keUyp^mmz8J8xgM$O zMlfx=N@LBPtE2V1ZyrNNdBKlOg7#^vE`du#qA9W!q*>w$XQl z1%zKImlboQBrgE1MS`196$i6J9U3dSvqd8Z!6mac=yeu{lcddZwJ{NsCnRo5F1^?j zP@CqQ(^Ms_=a)XSUDYl0?|2E{IGp4@1JKli#SDU{nFSv|qEY9%VV61gu{e5EpD)_Y zOeW{1ydH*@CvLzG=Q5I}cB=9(MlG4*uB{5WqYlbn1fG^X1Ft8zf#o}eD;_M?Ho zb-G)!=i1Yi}ed9#z=Qenk4vZuGITRzbo01%w>NUQYGSLymhYnYgiJy0PdOJKP z<{=XT=SJm%uyu^4_|X^#Ye@d^L*74Uk~w$ZGRzthGj-79o#{~o`)PAmtmwx`uZSSc zPjb7Ii5L%bPnp+@L-KU&0X-0jmVkOVO*UIbgvLukwaLLp-p^Pgz|pyZSh{)`%L4)b zn8{jW(W(_M3vr^#b7+i*qJnMY%VszTHJ5B}`9f;}seUMTAQ;fjcBIBX>AAn#j<_HW zbpk2@G0U)VPruL7Az3-Yc}bX~roHK+gCE;J_7Aa>ff#E#9%9zh)RBP8O8-KEn{&CA zgMhsEh%w=UK5T|w36qOn(4)0&PzkQP~l|ptWuQ9G>!OfDbQf>+?D~! zxhH7d{P;VG5*atJ2t-!{K)wXQuUF5!CAZGQ&o><5O7f6=mKF;=f>r)Cg zA8v3XQ8wS=Pps8g@CNE`ElPq;rj_Cym2VVWPK#fFL4pwgmR!7v)%;xQtN{O zmpApE@yWUS&f%^97 z(h}c*WggwEaD9)tw#J^)kFtl`H|T0L@h$S0N4s>Muut+*?5j{*?%&jxZhAr1<@w9^ zanawjz2YmUdjwcx-py1^O^{#w`$2t=lW@ z^Na|wD2&NP3yD|mvOwMXNoUk)2m&vQ>W!*gYddsU*rSh1uXZ@@*b~AX8g;crCVn<| z3xT;n>D%9xl*);sh+Nxp?L7@sJPSkKrUmX?QwFuu}#!j*$Zl&Ys% zpT%4pgb_#1CktKkH06CohKuK7E-*DDE?U1SubXM_Bo;DFY z9RwMM9xEzmB}WY>`V}`!x9y7A06}wEU%ilmMd&TU_x;vLgO?LqlHs`xpR4P#Mt*Nt zXCAf;QbYvSNI3NazZi~E)?XW8cSE-zM6=hGoR$_N5ZPsdkeM5f90)<#1q&^ILj!uI zdSU(m^mnsRcTiC?Q&X!&?vmykzEn3VDh0^i(iLDwwLis2OAjufakZ3Yog7^r(Jb#i z`0t}HDF9Qj0fgJAi+Ja098BFEcWP)b8nOzHq~AZ%EDE7WmRprB>t8YKpR)KEsOvAht;`ClConx^jg*&Catvd6E!GO!pm zjxC5HBZsx+s`8Gf?k6NR`QFbV%T1z^C@UQ$3y?xHTllnL{Ugf1;s3lEjkt+Z`%W2p zuQM85po7k|H%#rSSe@xXD~}u8JQc~{B(hz$GBxnRFE;^T!lq}1WF)?hm7pRbd*2`8 z*Vf`7#c~OK!?_2Ww+e1kE%_3+4u?%8J3%b8%DB5<`r7yu=em1IEb%FwALT}4u?pv! zr_vcat6_A*k(HCnR(V*uY~Y(l&&~IZUWn-dpks zV_0m3;hZ4uvBs$sZ1?0~WeYDc*`1M(SJnzh6d_zrF5b!F9o#QK59p~SMyi5PG4(ix z-&Uj#Blb9;0Jd3;HK#`kB0lk=y!XU2Peq>%mZHpmT2>m%7%Jw}v#KgKgY_4EA~Qp> zzbyk?-|;gH1zZjJeZAx%#_5=-=O~+&L<4O8B;1&-%Ro0%WIBxmayRC^i_(8J-byyX zuF0lGH#Xy?kf2}bu2>1^tW;Ud0dEgRfTB*A2pGc7@60KGVd#hWrH|;Wr{4I7j;@+Q zHnalSlOx05w)5hsQwU*hs0iT>y`Ul~KZvTsMhoShtv-~&QWL^X1;Jp@u@;Ll;kxKc zaEMlw>a8WKmZD~!fD-XdkX}O9_A6ZX#uhnHdsbnFTXe-7BP^vJ-3)adMs zN2!Aj3uRf(*94V?n`g~{vAAq-D%u!QP5BzmDpb&U z_c~^T9Ujm>A=+%5p|FT#N4it^@J|wIU5CqoWeI;gC5@3Gt)}6S`&qyz`Y}x>{-8Aw z!#FU;je-T?=FssK6E zOqhC$6b@dPqyu@u{%tpd;RVA%r!W}cyea9zfNun2VVEo6iU^|~_ok><1bJqql`5fs z5#4x3>|jSPw@ejOV_iA%eEd|HsKciq%zYb4khTo~Xi4X&=>lSrG8yFpM_cys&~J5d zchjbH=6dj=&c0yFkfpiO!$yT8xv~}i((Hi0t6fR??cl8rUHNx1NZI`QHR*}Np7B;) zq<4{GINenvJ1ed%}@ zveerNYCn%(Oo6VPlHfPhf@>D5w?t<=x@q9rD9yL{!th=UVr+=+#b+2LVW=Lav3|f(MykjEeQQ0kgm3cDBbCHofG73 z{WJTs$$5;+DSZ8P*Z9m zbvKN4^1QTs9`uu8o>;aFRv9xQ%@B&WObsZRo^1X&TvZR+i4-#30JvX-#BGI7ZLz@* zZ+u9W>XW;tsf6CpFME5Rq{4Qh+YUpInb^T;pN;s|5rHXfq*M}t-(yAup7HrXSWbrc%tkvGS$a*CiXN6g(1E7gigocm<8p9IUvauViNOXn2!F8oJ-Y=? z9b5#>`c>OHI?AnhM-?5miL5e7GVdaJL+aza-G1lnY~z&ZkYIV{_fwKM5s|dK9{e=p zeqd{u7sRuR^%LKbhbi<0C9PSNpS;<1rXVqo(sh;q12=;tA1p5_s&JO`LP>_f($K9! z=L!`n!B=(l`W`3Ica|Y$b-v-8M$$D9)Fl_U-M?0Vefp|x=uyKDMr0kI3iqmqOvWm# z>bqRZI700pu<*KirrbebwA4ZEIo<*cY{Dc zB;F!65?ND~mzd-ENl0pl{tGY0I)iN_^Z9_iWTyq88TWv1*xqGLECz2eZED0dsa1eb z0zwL0YZh^OuJtUds_r>iU$W=AC_lx2L?Ip8`v?fYa$vHM zjb+0k+KHC}0ER!oI)V$NqN2W>;?)Iulq$&g9(k?T)QH2zXh=~Y)Ui} z65|l{ga_t}?|HKND*8AE8z?<2mCMP<6HOgNo6gx#bi9+$hhm;ls39TQJcrF-Rl=qF zQieq1hjrX{&}u^8FF-nKN0x-HI8ty20Ktq~OHvhnnNp+caW{S^DQYr33Hpuf2o)j3 z&3mi^ZtOr)W!G`zvT&!LwI5PUV=mxKdy85;G2=`{$RMZ57UODlf+K4jf&_#%EO@>u zWqc9ZR%xG)s!b9ZEm1yA3$QJhJ&T{-XA~FgMD0N zAOQam_e68Ba5;zO3s%cJEbrMvw&RR#y}{1Cd=YrH);N^$*1u#v*Ysn^)&8oOUI2a^ z1Fb%!FRh-Jej?UE;hX1zerQ!=<#% zcib=b2n>Zg!xEF2Y3cJ88`z>I7E+mfU&tAENML2xCS)rDn9^KYu|IKdpQHvb;q($Y z1;>0%!gCq0>!9@L8&eE&Eu~AW3Ak|4{p?J(%>t<`GBl`UH#j3Q>WA<#cT@au=Iqas3l9$yZM^P9(&{taKSeQ=RG~^CR1kqn*NvKFR`I0bz zM??Bp(5rXU8T2849^Qlr>3u{wl6a8m9fEcuy#p1EEaE9g?(itk7CrXmuSXDLEwUQQ zC(N;~*51tRaPb1zgE1nna)Q4N@fgb>I!o8hN2D>Taw{kNza@h7&_>Xgh=NEIEkI(! z$7hG!$!DjpIJkPCwv73N>lPA(;!dh5ip?vgOQB)IfK?{e#fbdt@&kZc@mYW1@;8FDoINZnVXTQ`o+2*F2*XpSz096bju?9 zbpw=SSd)f_!eIsZdE%#lEk@mQcQ@=&^PuJsP6|&Lg)#z^qx9NHObPmE})~N9?CCU+g`dKaZv;2X$E^{!%neGb*t#N0Y@u z){dz4Mk5dzK0Cb>FeSWrd>-(mOG6c5LxnUsV@jI=i_~x8nZ$L^K6tI$S1hLeIqSu@ zKt?Ny#D96tuVpc20^F27p066PQBn!h_pJV-;*R0S&EaPqptMqFFv4lWUvqvB{@U=6 zRwdC-m0GaTw2tf;zq#V2+9bm_@wyKxa92%HA5BA$AS@e zkkLvC65AY|Uf_KwRV?~>$XA5EP#Bji72qXx4|ICpUEi-qIB=`+Gs(MFk1K9R{@R?U z4Q-vFqNJk04J(?V^y5>hnltKub!8r|62Sa8M=Bp^$Aw>*4(Kv%J8{rGZjnNQ zJizLh@}{V=<6Am1uoOJFAL~O2SQUgKGL0{PP1DUdhXMr>;pQy-1`!h7O9k4rY0^0C z@f5IQj_wAPLzZQvsBtJ!H%)O0qnOYzXj2Z1*^-9(rv$e?&qhnBDrtkp`$pLf&&4BV zS5Yw2w#z`8W~zu|(VH>R28MD6xgqE~i(Q^V2BF+AwP?QR3J4TW@|b@T;40T`v#jDo z{~r1h2CFG|c__E!S-y$dpDak8f0JR_yC&fEqH1cTK;Wjsk=B(3pT{Q@?Rqo`A#q z$P{V9lA53G5!j*_cxf8x(xXO%nO;1$``OngS-|dVtO?+=5JHfE#TA z0nfuAExEj%7QE>f6{@OZrr#RMs5x-&x6MtnEt&{LxU~K+fqm_$E%`*sI-#vz{$U8S zC}J8EkHeuAv`k}~eLq!HJnXoqfh8+7Q}`<&$2(-zt;8l9*sRRL& zerOgXzxC@CRl4e#m)TBK_*~Ev{38Y#mi4cNbfH2nFJOKeg4i63Z)B=2KmGir2d5+0 zM6?|0*lj%BFT!7F*Vv232;0D}% zUgJS9O@K1!rwPMTg>GCWjQo+%zs`zRgg{tQyJg^KBqsD?kvGkY)jVgl<1pBB!NIKA^Jx1A4q;g-j`cd=VXS5 zTx{01W%e5(Ryx`MFDz%cKZODkD=s@?d-jY!zTR@Q-aw3GI+H=(teK-E<#zwFhU3(1 z6D^PaX!hZhLE~oo<`HezLb~q?n}5WZ1iUzQhVkgi4nOHK=F-4SxM19*=KKe?^4FDO zJCFpG3;IKgMpM;KaH69yGC-5eOqJE+C4NzkQi4w3M~fd&!q`VJg{DV0a>U>Dy8&0_ z0KZIo7eI-1EJ=6M>it%%ZAapXOr!UG`gBtf2G3jKbl=cNLDSN?ew2UV1vZh@w7a(# zc+F*CU+-sJftOzM=zqY&7NR$wEMGMD!BL8?nS}A|({yuuY_X91mP3hY&nbif|716X z;r)Me38_$9T7u#DFCvW%b&D7B>%d?bs8T$T%w=>(7 zF8n8E^fPsdGa{Asiwo#859OYAOhyO{gni*_RJO7BeH5((Z5~{ljA-Mhb8tEzMNkY= zBecjG{nB`w7hz#)lS7VFRk*ZF$CIxYE3eEB;i=@aSPeGf2#&z5V%qPr>^SPIygpI#Gr#11T4G{^fM*m3=xe_Inh zU--D|u2#hY!d*CSy6}}i7Cp_)NyH5BhDr`5~G2ab@SZ zn^x}k`o@6hHD_gD$0_8AUCST81QeZH&b;Rl{sp_6#|Qt^Tbd)?qwvr~u&;IU*DD@L z<(X{$`Vqj&Sl2ZlGTln?wUX0e@UV@s^yIrRrzTT8?{Hm1-qP|hmu_9g*^=FVxkKR{ z@8w>|A(YrzcRPvB^Y3cM@AB4Iu*J`?wFK%d*1P*w?F$-J_2hX*2>M2ex{?q>hy|pn zE^ZyH6k<+;IdF^2OG}Sy>O0BGt48h8A-A^d{|O05@J3}^cGODdK1r5^o7k}8CDmAx4%YL& zhf8{G6<)o0`VLd!x0|>%ayht3{-RY3_IbO2acQ8`$0RH;v0Jy?>Hz<@NypR<6Z~1~ zm{2g#6vF}gc^Trr@UfjYbM~81OB%LQbHl$)p{k}eY*JlBhQbY}5qGu!8`#aBYw>*` zYjEaUbUc1Bd%6AIy^zIDcZ?g-WAIqUR@MWJ@go8a~F@lQ2dBxYVL>})m*F8m*%_c!zQ(049p z(thz~bi_7)_WW?=Wt@ubVYt9Z5Y)%`?#&U~^`2U4Qu8{ai}z==Yt1n#-rK|JodYVl zK8a%rRlfPa+hGDHan}wtLhx#S9~2RLPrY0`3(fuG%FBt)zn8j$75p%P5CXFbHj3!~ zGZIYep3oLmPgX`en?7Ou=%x++`{DTkS7f627m8?-Iu8Sc7xW;w^@eQT%Y!TyFDUVV z*XM+SUq=r|{do z*X38N;|H?}eXF(5>~2{RI%{7a`|80tB&Y|;Vy9TImi|>a3(VC(Jv9}|0Itx?r7e;y zt&S-w26pd2H&6e#LM-Y124ULCD)zNy`cDw*eU?83FQw(7+ixp}XO%lXeqSqFlj!AW z`x8wN6x?r?h4M?PNMgS>z*A*KSFM_x-%sMl>bx$_YYwIDJLS$@Cjx2o201(8D&0uLf7Hif_~U`UZ0*WK`jbx0W+H zj>M{rv3ni=^2EOcfCgjS3x}Zd?oEP^p1vh@1^OWre#6zT)(HssYu&7fqfIR!uwGdN z>^Cs-)5j()6-P_V`9mvaJ^LCr#F2y8Q{fWF*YHd(PxWQU!Q#AyT<>Dq3v)J^j=8#Y zcAxbO1*`u$RMgWTC|X!)+{3rszCGA2(! zj=%M6aBz&4o9F$Q9$*Ga6cOYm9isLgBXi#_Xuw#kofA(^HzqTrw#_%e#VCQ@^bUyUM*9)4F zFLDy_y2S;0*qhW_M`g5Q39=5R1qwM74h(3N$K{y!v+hKGeAakfU)6fNuuflj93`Qa zm|8TVC>21xGGs0AcY-f;vVX)C^otAoOQ!PX9q()Xur+uQ_#zc)y|-CjSdj~$TKzd+ zs@wg+1T%ljjES&Vhu;fN-D(d7xV=5YG-FEiP5HVWTCPW2pds(1&rq`f|H{g7tdr^f zq;qn?{tdzF(|_tn3s3z#K@1}3Ks_#`Zos(ZA~OWF`~1`ITh&KR!04o!An(dLkRK;< zkL_FaLj-7V0o7;!K--A;;`5d%to!fLhyDwLJ(mip-PHkHd877UcJ$D)f+2CNN}wHj zF~P0)dX@Upb9~RA_9LfwTwOPfsgj_SfkHF-{DsKO=XaG-=kqC=Q-y(k#lij9Yr-5p zKIG>z+o8w)Cp6Yik74%R{iQv`xP&lT-KUh<8h`WmW^M4WZ5%bH1Z=Hgs1)X(di3zJ z${L^5SmE|>)_XUiFdp&mq{NOrYcs<0Z~)3=K)^_U*10z3F_nH;!0_sZyPtI>so2gw zTb zZBrYp_nr&LRni*%AI>VnPt~WCxMk=B09+#ZU37#7+wIRxgp%_c@KGgf{@SvLuQcti z-9-a1iZ=R$CliWiJ=i3y3FQvk=F3&NT+X6E$~}K69#G&m`LC3YL)593%kvyI-`4D2 zhcyxos#Jb#6|GYMu7A@SSKfycxr%Qi8c8HoxS^r;Ay>z=m+P0YTS&WpSnNEmVS~yI zIptP{g!<#?lj;vo(S&qmdNm9F$nzsg7oRS}IfP+|9Hb@6*6DNxq#nNC(sjZ7_iprg zFi6v8-tlAc3jBKS%@xsta{^^_(`$f%b?@yQMj#BX0gq%dpMM}=lkSFYeV?FmOUUxS zomE$t0kJb-+rNExV`f&>dK9msr?~#!`jow5zb-0&$SqAUXn{yHl|4HVa|WvwA>pCO z;p(L7VJ-bLT1`{+v4l&SVF}+_?#`Qc^|$OpFnFIgrxoa4c7KAOuCIG&O8Xg9b|U> z5{!YG9t}#ZnE{q!LPnT3jcp6_a(~?nWUB|V(*3Q5@X?!yH$ddZvnT$d`mf2xW#HYo z1*$NVSf(}jt}cj^yAoVUCFV#|=5$nQ zog7k^iNG`>Euh_~!3cGRu8qz)4;%+vhRBV3k?h4OZ#T&0vj$Xq1kR zSC{h+-QYpHfe^`LS0fIM<#yM?;s?Xkus?oRCv0F#;?arm9GxNh3@W9Rp$l@h#{NZi;dR#j_~k(~F8O(JWz{2yWpB#qvjsWTan3 zDKvR`yFWB>Ahb+0ocQ}JtdeyO;|90#wZ4&W53j#-x2z1p-_0SRniL|l4(enguX>g6 z9Ezq-(TDl~YWhyg?nKW&rrew8G{6)ri>uoyOiVs4&ooc73)Ho@^!#1Ha?GW;2Cp{A z883A_*ukEE^X(C=!k>~|XKKLA(n+M|?zZQHx^0OG#w&$Hcpt;OI`Vza{D!gF6IMJG zyekunEv^@RUTLX3aBLKpJ~c}?%XN(TffrbLrjtWI>D5cf0)dmPil`{LiQXoZ41PF& z^oan5oa+zJx|wvRi2Z%1c5M3BkliF{euMZPtIzHCEr{mHGpb*YNh{|)zFUg-N)*~( zeF6RFMMv(1d*pfzI)>Ox~(d_=>-NR>0=;NB4UP1WL%B0PUw`%4)&hqjpgJiGO zowRxqEfXgO^7NOU|Xg_Hz0{XfV#fDccG!|n0?BjjLnm6m^@d`_rQ4=mYfnSQNB z1XH2-LuJXYb%;l`!3!iu9QP1Xp?V5*(w&f|9JPp*29Fb32mR{vgGj3d1tgcCJ4^c; z5yCv3Hd}t;3MmJ5XXF7kZD~mvi=cA86m}1KOaGWf)JnxBUu?0$RY+?GKLee6j`A&W z351irHQp1Mq-(gM(Tk--@_M&e`E>?^)H<5z9FOU58id}Ju`yG3-4rf*E4MjNGF!|~ zOo4hSZf9M+E$=0x85v_fbm<5HRhz*B+4g)m%pOgRg$Gy;QETtmvm9N29HOE&jH?ep zpiMWE-Gl#!1|S{b7^Oh9W`e{ZCM`YK5K@VMNUJNY}?llx#S!La?ngub+2|NmJwCiB@5b z1wNgZHO2;8ZM2RE>SX`ja21Ze^6ifaWsDOWj{aTW_$lmSFz7So92<8|>2z0N;dikz zsX`|ruHns-iMwx)`qj1wSIpoiEQScxJ_S}$sW@LTV}i=DcR?^ zYtiFDPVyuQuk36QzKQ_y^86I4N1s9?&lJX+;ZzW}h{j)VPRGONR)BPz2oAUGc!N+g zk>olI1T0tyGuMmbgF%Cm)=ba!9&D*W8@g1Z>}zrnNwuKdz|5-4<=6_QYn{?-O`P}u z*;gmy6N+5;h5)pk-4O=}N;{IvwPjhp2a$P2(09%98%6ME7$IxpTHROEAWL5&9`3o; z1pftuT!9j-L$<#~J%Ka&W|^~Xso+hNXoTbBg_^n?g~HJ0|G)Jr@MH)`si--#{*0Qc zuW$d@gUX!z(jPs;990QDDNR-Wq>h7XLuo=Pf1=Uwez)60f3`|k&DWxjtVsJp$#coiV2`@?PORX&lHSOs06e3x41q}v+gOE8$~FR$@ULI5@@ z;Wtud!W+w}35ol`rwsCtQF`36{RS?->2fpZlTFNK86+-Lxoxa0M-Q#z9XB47{) zBRJr4RJM*94&(F@0Lwi!twowya|~RmuaWawOHPY{>mOu&7hC!9qNL-CC>9 z4LwFHK;5d`F@4iSWuV~H-j?gP94+R!e_os5vjq_=o0iBL)wC5RSkXx*zzi{kws^ce zYVQku9|Huk^L$;Ql^%SHxSB#@NnB-{Qt$g$)HxCX2F@Xy=Hmqdhq$y?(|L&sqj=$7 zoPVjd=!Cdrd=5JipEG;{Mqcuiv>c}*8^CW?YNMxI%cQOz3;>5h z=pq!b%spA^A8XDie=N6(g0_d)-4OKRlNL3r_{PDb5vl#^8gC%f`+Rxe_s(!Cv-%dZ z$ksnkwX!3~h=?<1>Ae@#W*Fx2we!ApZ`7;ZmY=Hg@Y+p2^?i5odS>6jl8CnKDFh5u z{)$HDZRB*q;tPJKTM8gaO_qgJ)V}S#pwSHeoIP8m_AM1D79j7u4Fs4LU4+?#abD|4 zVnX>lROdbTKa_wEe`>GO48-E`9x*^krx&Q}y0_F2Erj%B;GFZm$b(!&lP9Fzbxfc* z7`>zD;0PL@Ybuw{K7JpHQ^4(Y0o>+;`k%k=&+TrD%Na=3#+2oDhqjuH$A_*!us z_RWAWeahsm;Sr`MVdj5L;f^!H(P=9uS1ru#muFKFV|M@jecrokwXgq(o%Sj9xuY++ zVbj<~!7tTV)aAPX8paT_jvnz3D}-2MR>AMoDv{NAsy<0=*lyB?`NZeDXQ*{Tev6sW zqV5~!lTrO`22Q^gv3{b2o=!n}FZv1VznHdTN%WlHHsZU-tGR0#TK$`UtR${d ze!4j9$5D5(zPBv6uEq&x-uuZlcYo)se?Q=ot@;b%>c~c;+$JGAau6ZWyS`6vgdMUh z4P>H`ZqFXQw$}aV4bSjfj!qeYqQL54CkSn(MxAVW8KO_m>M*2sUeD5gbadtR4Y%-5 z-*3DLRW!P`LCcCt$4ul*iQ0adug%2=;pwi>FuckvS|p`zdkQSmvDDgofMs}{uoZ@n zo|{>g;ls0}<*NCs-)i%opL?nCrvHp^IO-#);n=@3+B@c7~#@RLa?y3BCUf zE5?#U=W`FFzrMRVh6%L3BE^-}>s4xrB}#*Ak(a8z5Kv zL-`PGY^^rogqx0C`0L9xux7DCil^UYDR;fu6A8o#GO|hQ-7uMu0~+%4kh5o#vJISUO*#}efQ-6EI8m!5f-&1(_{lgbB1578RH`k9gcllkkj7ju- z`b|rm9qJ*h4*(E@LuG@;tlhbx55T@JQlF?Y;OXKmIQ24sxv|&xmmWg|C+n$WX*-Rl zOQ7-Lc{@nUdLDBMtQ~1h@3dw0cAB40YB$Qnvnj?e8#?y90@M*ye!yFVWmFWlNMivN zBUoYQkUG@;il6?t;@up#U&w8sNN!1*3EafII0oXEgWRd6RhiBj&xzY{R2o0O{XO91 z?RB581yb#+vI2BaOB*p!lF#yT$)_q7S1G22F8Sf$S~7EVcVHk%>AmhMKkECDB~27X zuaylR)_?j7l^Uo_e(u9MWaf^Ntb3L&;ezD%x0P#>Spcqc-n4%KFWWU|9=o^#nQ4SQ zuo+eP)I3^pwZI{2BrLeaRBjMFblj_@*uY?<%q(a1UT{w0+l^?5s!J`AVAj%6vSTkA zn3v@CvJVwIwwXMm_VKhx%QZB+iopS1 zL*G-ajh}$|I^~v!n6`?|{Fw=tGost$Gya8`vr+zH9_(YPfC$=jHP>g2&Yo`!)ZZzy z!ioCqk0kdbeb^v|f?vQ}#^|;Ty-*=rOBe9*wI+HNqx*l*H+0rBG* z9!JpKtX*ZgnOWSlPWQ$=LiCv?_6vy<4Qh6mdgrf0dYz+mHgrz1*MW>YohYg63c1*X z-`y+Ylmn=J5@_X*N%KA)Rz%7Mr48C)ML>CugPRKD^d^%beW8OlU${9>%BQW8szS82OeFBe?Ci z{=x%i-eN36dt;xaLsC`VX}i0s(eanwe`S29W-er`z`97r_GJKHA|>VdIOq*6_a#m9 z7r{)prMRlIM8`9IosY#XVcyC>aS&Qi#I>8L4DS}5rrHADz8GqXz)IN-`z3}@t6v(A zyZ)0DuA7S6glq4X`te8xYq)Ui_>RUaXnH-Q2A_}6D7t9d7Uc2OO@g$N4pFwc!Z6)S zvN|zlUh9}nQU7TH{(a81u{e4>iIBJ9(M&}nJxEIa)Kk;n3O2j)TO*1&ZZB}OvHI`B zI;7?!;a+!-`3yv-t^GA%U-$i9!}YhEA@@+@RBgrbD>%D&Mps0=d{T=2BR{_pjaWa# zEFETij5m#Duw6g5#E3xH^%bz2LB^Eh(5eE-+G6 zy)FXrbEQ(w*$q0qA|Q{JyxLwXuBIsDV1HpnAw}bhe$9Wud&i$w)M90nC&kQKE?|@GxJ@D2Z-J_YZkcGaSD6P7n;)m)P z5A^emmM*Afod)V1*$EG>oV4UsC^3H;9an{g{hz6ly+v6wMpd~O9kE&M(8QihOOL^J z++_+~9#$;&bSRFE@fmf@b9Z}DKBWoewZB{y)zj!14p!O-$?sp`!*O8WB&r94Xu@i# zt5zFn7CWtEbLM@o<#wPT-s_;H4yA8AaL{07xLifqS5Chk`Q}EG-8R6O@!(F6iFq@x)=PILut@H^|~ ze7^pAmWmK96B2Q%lQ!c`v#$S~#Ezx-{2h>pf6cq9J zyw>sMeg9!{!IiPF#}oMr+KbWxq?uufe#M? z@PpU1-`4WRHr27dKBu6u8B*Djc{5q~1`L*FhXaH&=mu>Jp8BzUaGWkT6FTRZb7Y z-JsP)-dzI>TV$r@B!+d7hDlnQX;&qf5zBlF|1bs*QpBcz{dZA$ z;>f)NIaOi(Ok|;TlWhM4WA|e%9vnTBbh(@9(KOA@rxm;r?l+|0)6|CIBEc!coD8Qw zr*wBsS6e_X-vSMlC?n6ZZ!#{4#SyVoPJ6raZW9fbXjBJ2XP=@xsKH=abIYYiUZh*{SN|#7}Xop)}_?W(o!$YZzF8hL4@;JYm*tl8qhSODAufd|aai z7MJA1EWm|J7Qqt$89BQ|jmBo^@%t@#r+QW|X0_5k7v7bF5xDn;WK7oGCEATD>+n)Z zSO?4GOjne$<=+n`?YR_IZOa-T=}neLJZS^itb`oS_fK{R>GR?XSbTV?1h^k{x$873 zg9)jlmA`(DS0;mz82gY!FC`BmWH}P^O zeJ8Z!rSB70<__}Z4!VWrX`YfOOJ)164oWDNZa?+hJOcBqTJ~8NLh(BkKFBP$&XX7l zen2q3bHMU{y6mmn)>HVqrIJojKe?*rfip7oK?A9g|DjpF`3UT71Zk0{2;r|GkKD$) zDh-f0n)%!79jLqlO^FE~y6`5XOD!APD}vd!X}uCH)1zlB%-;RO-)c2dO*M=3lyY=6`Ewh--8= z#l>ne)A42lrZDYKLMB#+2B!-FH{PW-y$Uh6q7yFV3FiS@k6EGh`?Zy(Jq?%Nn!y%0 z>TF&z{RH|IT>V)5t$aK}qTfj)`0?kReDv456Q*TR-$0njUb)usgH8~k2}FnI(ro{!_6M1nvGd=)|C1xlR)_tM|Cm1*=YV#Msl0J1y2Y zOb)8Pa7-3|z5vyqrkH6`*~!drsqooDptgIqjOtVGqDuOVXcF3U?q~&Gu>3PL$%lP) zk>P)jntEmu4*gB%3KHcN==HSv8aMgqKU-2&Bl30Kx4E%JN5q2IGNDsU6k6K;y~d+F zUp=6e8KDAzr{Ehx>xm%Fxq*H!HosMQW7tx@N4hSb@PlU)HYoOgJ=D7xpW&ESry@22k7g1oG}^S& zy#hhGTj;hGUOIAkQ=$AuBik(!mJZ{#vXb{G0;lu!nP*>XfRrk#-eQ4l=*I8w+wQ(4 znxAogri}OIB{Jk&a2`np-ap`GD@KPZqc1m^%fRLxO}>QrsAk~Xx`wzNEU9{s3xV`n zc|y{LJ0E^JgkNu=QT>%uJNhad;T*{%$1IE#(5$|#kmk;t-O@kWnw-PEYs0l|FlsWZ z6!}&cTV$8QRYl7N1i$a)bo-hMchT6_3H)~eUbFL!-8VwG4#F9yJm6^z~8+VG*oC=<`!`&j66 zOH|jfb&FV;+8KY~GANDg(Bz)M=veg;_exe>FAPU)Lp@DhpOA-t99v!v8iVKG6TLC3 z#`{_oFp%!n6 z!GItekj>)w=bt62R)*j=>;?Z%C%?Xlc0)g9-`<izq!W__YewtbR(0$r# zt+-1xd^)R|ejJ?n6L7DZJqqj<`JEyoT14(RpdCayTj$VEd!0#0n&v(*x!#T744L=8 zI`(l~uUQg?4D2nHJnbujW4qi2tA__*@7etQL9%mUl);vCMEGWCp0-V^$Iuo&ED&2P zl~?Py`89JE1|rB@o$@N;VaK0o=`)Abs_^7+bi1UaloQFHF!?5z`EzfIw=k^P82)?P zL$B{}Qbki2-yXlaBFTy$@9RsDZP*tOazG7r1CqDQ6h9?LIGNmm*vc@4{sVD zZ9sdvY|3D@?V3Ngs@h&{8-G?^I6z>idG~zR91kY=PE@iahds~xtfGJ54B=;ljL)uZzXUlEkiXXLD|Jd>*f274E#fS@?7Z-6kxM`1!tf!orE5H7%9f zS;hKG7aP&L``jXctKhR+3t!0pqIPk8J(Uha?XN`9*TBNT-)H}<5xkEp`Hbk}o82WCMGXL`mx;g72XwSokIrcZH9c@#X5%`%PYVm1mq_y- zb^r}d9fY7G%RAsc>+&5E)*YQWH+fgw#rxizmv@RYN;3*huw4zW$DMC+!IS@9Nv98} zji?fTLLX{5e*f^0kbeF)QVfzj=EXB~`=G=C>FL%Ryof!K94A3Jk%L=KyJK&qLPLdq z=!6w%>~h3%^Ip-5bu<8v6&A-IoA7+WQ`$_+COp91%E5k=dize$wp2%JTy5&OGA3qO z+TDI#nYN60ILOppO-ydGUk5yvf--dtu@-`tf8UM61rkrgdqmIkgx>IwAQ5`BgG{Lj zc99=%cdpKpB|f!JUqWyVOSS}f67ET^;hnQVE52(7!p#MIz*2nhGPtP@`V>wYK+vME z3st^=eEZjHs;c1;zg207-j zb_5D}@e0`Z+pb<&3N)HRMX%*PM`bWClec*F^@{tPN4eaW_g7C(tH2~n)jmf|^!zhw zZeAMe-MN8Be^KAm#=^II>%GuU#?ASh`EcEx*8+W2!46NUU67UKRe;?N^a)lG?^=H+ z`exQK*SWT?hp5(D)!C6MI!E^Wlh;hw+fRY2%epk~_s~66g>kp9$Q`}N+gr1{@4*&k z^Y7=H%thTc=Juc9!d>eYW5CHG*Si}%4$Foa+EQ#dic;+N37kgaaai7qK_ysI`%KS} z28v?Gzo@@|+(ZtT+#5XqT+`JF;(11K8!vowE}-vd@v<6sH<4jJC62l@=RG*7p|(Fs zsCo)Oq_sek74$mqM8Rs5cES@XR<_cwdMpg&Jgl8<=CR z?q2;Ku~cAUqRB4Gju{()yyNWgyM4E>)*F@GhMsdDJgl;Kp&+d zgoYq9n0-!>eaU3o{CF4k^wY2Xlh&!+tksc9u!z=huls1*x_Cne%q$bfRr(^~)AR#} zn5r-BhKz|?QQQnf4^dF&)j$x1jP_Pk>}{$UtuyNxjgPs05`}IUGpj?2V%sp2$EWA9 zunc>S!aUE@2dp_#l-w2z!sUuVutbss#tKsC4i-pQxT5(ktunb|RnQzjPg zLq-ll%I9pn8sZvKh}U>6>~g5O7f~yCXc6QV{tWlm7Rf(FnR`5Weu(v?4%%M(FH6X- z=yabqYa&9a>Yg0qdsdPR7pbNX_NtqfCSrs?VSqJLb#>_ z%J$r@CDrxur+091#mr>pSmxetEz4tU>-tP_hp1Zb{uf_ag#05$VNA$rrNeNl)NT0P4o{)p-2rErOd0+^&dF zu5KXw19fC;^fCI*qmKM?9(6Y?9mqN(*x?6mB8eh}gWOK0PkZSi9#VSWto=If$79}? z72@pbdkBEX%NB$H&(+YX%cdw=oc?)Bhu-X|mKgpR0=gnm4+ z?2%No0w~o93y~RhQc*3hjusKR9#qMozw!yZsjxSaCDLslISGIpcJl*&xg}F4|SHB}6d9c2y?*T6XbGz@E z^0?6-FxcM=XQnfPdccRxdAn3SWZycQnT*uvfD9~m3jyx z$q)P54~s`M|I5B6Fz>rt+x<1(bY{0N;FQ8ssmSD)*}>l9wQdi%Pv(&G)?zW|osNK! z4PS$Fu6EfgdZ;AkW93DGJ*5{5*V76ai$?jqw{X(21?dV#YTmIxtP>O$uC>3*KCM^f zbL#>RjRtr6;p{eA*L)n`HOt@WtG=^$CZ)MMrYQr8-stpR-(ZUMTC98~E#Z}oVGo%& zlkiVSDoNA7^r;vEJ8-r*WL>gQx7p0RJED}2tZo4t3ZRLTAALzxgjt$8!pt7B9j8u_ zzwP@GB+~xTzCIdF8U{pW#h@CE@41b6pvbaze*d9J>~n9~E1+NlQ#a{vDt!=!x_ep0 zc3$iY&TtnU>0cvps^{mm=wG}l5O)_`^+$Ni-fgeWaY`=_W#d2>lX%l9A9~3Q8bGyk zn5?RmRTexkszduC$z9MRjSyv4g-?CA;r`MB`Vk!XV>$4G007kUeb3{7)hH-*E4X$T zDJQ3N_-82fqG&(uFH5dc@<=x4u#f*BpVxR6Wi{szv2z#+<3%hwr$#6?62<3tVQl<6 zWfd1tQC99o=5U;-vD?}Fo zxy9(#!c*SIQjj>;=5h;=B6rC<@9B-g=UJEO$;d9N>MK^?->Z{m>UK6>{KEe#;@8P)ddqeG{&y z^>Pw}A(7bne{L{}ur*mT_-U32y`7rNdd1lJ9$)R34;(jl>pRqz&E80mzoqZ$g%0cLuk}Tx z(Jjq4zn|(iaQ*@8*{2BoEw8WYPnh#~(B*dM9_Ce3ezB!U7A85~gq$;@j2`8bE-Dm7;}gK7#%`hcQbpT)`_dt_ejl?9B>My8{nWq$GEw?H;(L~-I<#fu+wd7UGm z0Q2)&zqI)M<;6OMO2s5iVWq;)cJhcCt0BC9AauC}+-8y8iv0irhF$G*q})EcHww{?)&~TMsp; zGUO2pNLd9%)7KFCxurJuUt4{xp*?Cc?uIZ=E}5`0(0}FfH4QUjh`!>?TE7UtoUy%x z64~cyb=y`Le}1U3a~|}DgEy;g_2RP}iCgkv_n_tMm5zu6N(nvPcL`25M=aR%&Re<&nliQDz}?Q&7AHJ9BJKZDtkV1E2bp*D%BmM5VVXV6TOv2p&M z!?BlZOnukgYMw6qwyuP6)Bt<9MK?CWB~s04D7#R>4dCXjYD5?g(%(6R)sip8H2)oV^BLCw`DtxX+CxUwReb0 z$N!=i`q#aOw@=S1`7LQ8)sg+VI#ASanyy zt*t(|;xqfN<6}Sx@fQ_c`1yp{e#`q}&|LFZ!xm8|q}ZM#*_}XXe_fBeQuDhmyQuEd zg9ry4h;F>-*abek)vh-k_7y2666Y>*3J|F2814L8A3K(L9Bva%nGTH7)9mos&EJ_?-JBC)Ixpg-cnMnoSh#Q-W5>>BA34&c3CIHvO#Ubcsu#>5 z>xt?(|G5&$X-vvUklC zMGlJIt)%crSR2K`ChI8~f;`y81WnEY5kMA%!SsN8O}|OqlUog3Vx}H-$D;fsTiXYcvDqE&MsRk!6YPze02!d8ne@VWTIU_iZUWXK z6ow6BdeO2DTa$#!O%;L`wc<4`+@F3W^~mmnDf-t%@q3KtjfE^(+3=frjrqt9LA0-nb$h=Afp3R+IuhR*5G~?>6`W2iDL%p|u=+(G}1e z?3Erav2fYmt}#I;zb)C|uaIUcQqw~;^)AT9!Rs8&@SHO?M&6ABeY$&pVagP4@vCxL zP$XY)&aK~zpibXV91eDqs7~teFpXd~qn= zVBFu*JGU3dtzYF3y-~vopa%t!-$m6M_yDf9|G<|qvleNL6M{{4Vi;I@;j7c=x35M( z4t^C#*V0V_?IuYFh1r98jn)FNqrN{VAvsWnW?kdn1cCebzEb|!Nu-5eu4z4XUprcK zP-H+ffDqSPWhx46@I?2CB={7}Q{j{XO&wr^~_0JHjLcr$*@efutRV&Sp003Z1?BYc&=SzU#E z6Zj=NAeRuYBUSS+(Q)(pMD7eg+2>!O^taSW_zivG>a}m{@Ln(b-MY^wO!#nWrL3hP zIEYBykfzRQ(Ugu!J=*N%l}Kn zlk+A1=xzALL3nYZaqL=k*>c!U19k*%eB1PjOG9?x z9S4oymyLxmYq|kGS|2s%%~znaE6hH^;Qh2DSC{Vd@d|;P0>(>j)fh~8L8*7q2e^DI z>n`Z&V;zyLpFJeY2eY4o|6;Y`+$?n_R?_vC-qni?UBfHMR7JB3b@I*mR;rb}IHcsB z$8o6p3W^KB;h!UHiBqbs|6WSn^O52}ILsy$9_kkwK`J5Gv|A>$4k>8wM%BcQqtgox zd*hmYg<5`MCx1*Y`}0bCK%8^2yNgI+cyHqOyL%#RV<=XBDD2G(W+^0bjQ`?It*Y zc!hyhzIU(s$bW>Gx=+h!QI*$`h=%!Q!ZQ<ObwZ8nwpc=L%zg8% zypT^k?j=jUKTvRE6C%gMz^P;&W6#}N{wm$z~M=rY{V?mS{TzPTyNlzRd`%{?H zNi<|h;>+Q$j%3Xla|r0`w|^i!Kn^OC30XX7cMl# zz#Hs3`LA?&1j*cngOBl*xDdVi@SW1E?lHsUgu+y5wt(=vIAf z7u8VpN?2NfkTZ<~1;jcib(lq0#9aKfVnvEBkhxcNI36~UJDv^7LmA&1k;NAmO_bHx z$wi=qEZ8Ij4rRLugQC*+YOLPQ4!iDQ;ZPV(K{5}vkS&v0b1c5&gKKDY?pFX7! zPIES2yx>o7G#Lj=*8vh`eDbu8R_Z8VtWQ}o!dAdQp9m6|UOg`f1DgfB@SWF#3cjEM ziI)@-*F3u4*DY|yt8_q+^YL=(eEz+0m?Z5@!GO)q!|2Ero}^pg&j|jSD-DTq(F&ui z>Uyl4HD}Ov`K9mL23E3R_kk(e#aSoqCLM#uJ*rd2yjkoq5|_@cT1^i z`})S2mL<_t!_xIWi}`n`=FviaS;s);#!vV=x?gYW_7~J9JMPO%EOY|y&NSnNZw4BLxtY`F#$(O=Zf_H@J{MY zB+kA7KK7Y{d3-;dL{hL+gGlu6t;*%RFa+#~r=6?(Fpq%r3C^<5#>G%a2}(o+=9AiS z+fEHDM}ysN`j*j1Tzyl z2m0+Zkw~H>CDAL?B8DF8m``dD2fZ&25^MgUl4LkO#qK`&aEDnRE*WRv3$}{^FkEf0 zs&49>gp-0ii`G5Tu5@EB4n-yX2azZmg>tE0yxagZ4*B?|?IGt?UBT{=7OfWBFoWwk z#EWjt!?^+Ip0t9+cKstmg$Yh=8;+npuG!t!i*=q2C|UNQl*rZO<4G|bP;cJ(=L;55 zVPG$e(V4ak9jJfJ@|T0DOv7uJ48|cWb44_8-@wWUgK?QCNoqc+58;uzVqzGhQoTzm z>NIFC>|SaPFyrW3#CHY5(PccO>-<{7_(Q&?Jfaeaj`yeDuwS|w6wZMrZF2PuqU`< zf28_70<&JFVC-F8TYp?^yC<&r-p6hK6sn*Kr6@lA+E26noOQltEHQtq-PXBmvlzu0fSrN@J)Iv; zw!hDo?S>uma$ZQD*wQ_qG6OTI!&3X%CIe8h3R(B74iqQ;G^O{08RZCtPy28Fu;PTc zW2{lrL%QIH{5`7d{d~ELT5v*HxU*^)d)`k$B5fAJ9x#D7Q)`0R6a4XA>oV$G&zUDR zM6TNp+J@%;=#^;=Rq`RBu{XVh{I^dzVruw*lCTT~zQa;I`~>V>;WKzQkO#V|gqpRVydN;B6w>p6YzZ`APqpT0C8{_l* z#(s~VthfHb_Ro{A$7L4b?|*zrlv~2~{&zE>%otA5o2xV;OXV67GGYAmc0U;u1K&=I z7QJ6b4ZPbvZhA6T3|%g;L;Dj017BEs**-?ag$WX?5y+)UPVX`K6l?hRPfF5NCh+@U zM%ywU`Ua6(I_vwG&z8}cf2&>fUX*|5RUmq0!}S=yeq#D85ZX@PjE7k?5wTm_C^X!d&<1%Gv@rO(28js-cIuj~!EL~pCwZ!Pt~FAZ?a3UIg=<5d|( zSQX1W*ed-V5ey%evpy67CHW*O$-H$N9;Q+p<~X@)`Q<=FQ5z;ht?2ehL1#=0@>cfB zQd6-4?O3xQCn4bY@k%A2mO7k7#nV=>|TUCyeBJvPLQEnaP};i0Mw@aTBg-V0XWWAMLYoS@A*^!J2JMYmwZJ! zJuZ0};vOnYjnqp(asFOOpxQ68DCFs=2;?62VK_>8+5D??Df^^D%+s(dmGi@oIRvjY zqp&C9J-y^Y1iXSHLI=>yDrWqrHtwco{l#Acd2{k%Qh=F;j(8kj=T% zO_1i+SeU> zKU5k!go=`0f-;>rTkqWU+27w}a~K@2We*hylYt?G_;-|eg~m^5<|3XUynK_f;5+s)W%ihJ*Tf&H$bqx z5@PVCoKBg+8tmJBx&tN1XsJ?Ig5uBVhuFN+*`O5I4|(-1J*^EH_f_4D+YhSncilSR z9(eOpWq1lhpXs;G3%jgdjN7I9v7SX_6)<#}tNIQHugjcl106OAg*Tu3An4_-tsuHC$rS6*3uSIyKhv%qAZW2$<~ zwDki(Dp|k70N>VfN{;dglsxA?oziSp-(07+_tlSzr+vuME)PNB<1cNW^{G^=zz-bY z;(5renLip%9?oO*uyj8+{scs6kX5;{4Ht04Q`UywQ|EBg@;-MWhaVmr-YB}!Sr2Y2 zE+rDPxlf#OA18_|`G|;W#bkhGA*Ar2+99L?PJrTSp3kfGo00o)*ip<95 zF~5%0t-OcJ&GdKzWyFudW$DO8%oI)ZRxmPE*ga|k%LG%w`fwI<%0fK_wMwDS(9j>n z8_N&mTrM*QB&eVGfV;c9N~@(}m|XLy{Uz^*pe9tFA1=0UR;+k!brxQDLCFYzWb##R z=i+ZW8)=1KDW#_VnRx<^DY_*aWc{QTtt!-k{r%KdW_6520B5aL$pN7|8Q7RJQ`G_w z$u&kkZXb=cmSg+1=F>sGyrgwbleMTrI$Z-H-}0%^?y*}kJ0KM4pifZ4wcqI;%UE_E zxA%SNM3*<>Cj4$UA9w8*;nQoIaNWQk>ex0vJ@J7W032oOrC)UV@u|*bsLnw$u3ew* zCjCnst0^(>ls~qAk|P?%vaQVpOT<>JlFLafu zqpa2V0&*39>TR*&fpuRY4q6p&{v&HRgX!!2PTz4c{q(1oif7v${1-pOS2}(4e_Q!h zG!*92v6+ONI*!x>7ME{Js!CWxLE`os0rTk4cL3iy3(70LDeJkC$N>(mKI}xMU16tN zO0-mSMfcuJRmQ>ZgG;vFwm`IeW1YnJ^^CblDE^IIIw|JfpT85$?TLjx52`)YN0eQl zeJ*~wjeb;jxRL3d4ZB}zPtU80WJ?@rkl0-aw{B2{n1|80&CkbHvh`oRfyW8w_Dq&Z zDwncM^6cTyWKF_RFiKT2g`d6o&|E_?dq$gMEH1Z^Z04~_RD?t z=3OKO+Fdf{LE5`zoV*V^baqVVz;XO0&>DQLBE4hGL9}(zD#s>r7z#n|^xI0C63d*b z=t&XuA?JHOm%P}e;IwF4_BLcw5977%`dUgqcxTxhFXLSDIfp=>SsiUO&D-C5M+s^o zeoQ_zQdn#fGE4E7K?Wzdv)AKUA?qQ^Ky|=;Daiz|0emp z@Jvd(5%bsdTLJ~i3yXi{hQ3GUkK$z^@NNjX-O2cpsG|%TIqUPCdm1LyZFa~ywT{a* z#wfIw0f6*V^;N5)38EA+!F5QTNTu-f=dI<1oS7Ai&PAX3znsNWDtg;=wwP}Q++j=Z zRtG6 z1LeYa7sX@G+T*>QyahhH=k{hbPMDtO1E-l$xOd#e_Xk%LxrPW{v+VL>XhaP@u2Fcp zMlGPk$n_#>f#hw#IMJ7?ULOG!zpoJqFC**jQ_v6_6^Q+uRRhvg?a#oRf>23!lFxT~D?s&pYX^mhnI6@ppV1YE{t6dEtT$n6GF zh4W!=+Re{j37Q=bmpsa;Z96ZjEVJ&=(MKf5nbDyk7S1Z_A1C8OQcKzk-p#Ac#ML5g%z3=lr&wc-HjT*)q-ZH62>9VPre+mXzlz$Eld#Tl8GT4Po zaFv&-4k0aM*oa6orrB@cI;0p@JxJAWP8zl3L-JT0*`^nf!#HN4%+95 zfO=wqGGKc4;aJB*hyOyNQ4>p{;k~yAcxyb3q+Jj?Ep-DE#J?HA*X)6`NEarkfP%qK zAdH@z8-CF!71#$HP6a>AtdP3sQV5Mha`0?^j1Vev$b2q|%IcMoo2z7?7gPl}yn7%p zVR#~Qj-W#z!qoCij_o#t8jPX{D&_Lvl#9`U<&E(lmNnGzbVU&V(OZ;eY7A7FRN1s1 zEWqs@l()H= z3Wd#R(+H%d9YvTkBm|kr&Ml081jdRCSQ<_{VH9UzEz=VG%yE#s2x>|bA!1>kNFanc z!bxNVdT!87Vgj0RWBOGz159LqlX3zb&|`xGD?+j?A~G7|gAeni*9(ln46WLnNkdc0 zt`H>3kE9M2urh2)W`%*qJ~?H$)0OB0)O29L9D$%Aun43O+@VNj{ns+a4%bjj9mkE07cs3AkRj8Vm>D zP%vu{geYbgKzSU_B*+vRc9722b z!VffrV2pq|v1;XXw$)}sQrkiQj4(5+3B#q)q=ADTgr7t{31dclz6d%U zBH=sOv5XsWnbY_ucuvJA0N5+>0T#1eu2iUqW>-tq#P=zzR4Q&MDOdKO8yy4)ZE_&s zV97)x4LPT1LRF-i8~q+~u%ra8sD*~5K)-}9!r)PhJHEDXd^x$5=KR0xP2ZK9!eNKZUQPIUT*Gy#fvft){#V^Ln@{B_{2ss zz72XtD@qq}MKE`5Oz=Y}-qiGvGyvs-DsYsD#hqj-v!iB)ng01rdXq=S!5Sl!!pyCX zRmmySMvQ(ndk;j!u+gQW5^zh}7Q|7`WJ)UvakU%yCx>P!Dn>QERa`3+etwnP!PVg)LIk%5 zN_s~AP&Oqtw>DEm|5p)lapscwpwfA;!E;1H zS*P_Qu8E*tu&FgNKnfb2LBoihTwJ1|$pS^XLOi%0t-TWk6+UT+9Mgp-h-ZppgBaT_ zJHAt;iCE0Q<&1bBDe{DQRzMOo%dn53Ta>wd9L8Dt)Pb-W4yn}z1d)9Xo=S+lnC6>H zs(|{W4Kk$^2_gfP0%j=^8y)x+nMCBuWYdM<==IXjf_31vz^ahydC^v*RA^UtdFf1& zk*m7g_~*dVhdu5HwgkMEFyGW-vM8{G63>MjAL5afo*;LN70Q&{`C(~-1r z;8j9Kum-^9F{h+TMr2?j5fC}P+=od{kRQltZ=u8tuouFU;yxCM4Q5RFBqUhGL0T2flka&Zt2 z1Lh@pOX}jfW30mz(Wm2@0z_<9qQX!h1Ar>5f&Gu~k=d~Y!J|f`mjyt?LrwIEC7kzA zsnfQQLwnI?+P!``GAed#dcb&uRZug5jMC$_TEfV3#4g@!!mtp#q7tMnZj*&VoV2|z zn-)a~8DzeIl))BKZ6!4ij5w8@F0;>t-5F0bnMhth<-UMB0*ZnRG-8?6$^(TmmI~6VaQfj2Mz_RS z8J;=x%^<_uklISzr%vOCG!9>x@GZb$N{b9*gb{m#ivuW5LMcTH?o~+6pmJz60uNDQ z#S40*av5u%PKI2bEH#Gw@zo*v zp$zmQ5%fuYtk*~oBRYjR>Xjw#;-;8fQkXkOwf!fkg+OvE#^1G ztbVzLQVSag_F5HEFD`E{Ct)qv3+S-I*p_o!X2guS3<-cjNfv+#nX7`sH*cxJtdN7I zp;NE70Q$6r&2qCstKfr|dnF`c2iXIeGlqSrt2hS%*i~s2lnxw9i3NAtfaHTV_n;J3 z=z{?imSpRJ;gNfZNM~p8VEcA4p;t&O0p5)eq~eUaL%Qrdw`> zal!--DGSIviAn1dbI-vIQ_<5QfL<$hkU`FPFoa*+3um6j69hP!6#sUF)^1P=IYBB6 ze%u@n&?yld3rx-fY7m$bl5n@)v1! zgsHhF(;?>i(tri?Ll>sh2Gz_6O$H2rOCW%%3E>ppIa=H{@bwBgdWet}(^h~?H9k5C zo=2NVBeS>(lok2Ja*~g*l^J9vr{2cY&JSn~Nxlf9o)9F0tDj+s(W@f!gA_^`I_peQ zsfeW)1yMbP^|)CWtO3-bc)&(MA!irZR2)t+i5Ao-IsS_P?~wl>LdHPWAkpo_kQr@i zrxCN1%qR__N$?OZXAir%4}%_dWArc)qMtBZs}%}ZgF#ZNm}&)Kux0}Nf)%OrGuv>T&*} zh#*)6u>tW@5lkFlVI`RstBJLZ{8uY9G~$pA8YO`=cCyaGa5Mc}FeZZwVXjgkXNAMT z$~VJMFBVkWCOvDkQyz2>gJmYlLxZY7rtw?6axuw3i0L8-xIm24vx9h!;@<&(nP>@& zc3z&Df?gf|O+8>!;{6Ci^AOE|0w4gE5=saR2dgDhjzkE+u8M{#CkYK#4L=owJuVQd zUJgD2R}NrSC&S8!)1#ItGoh6e2p(3ekyWDup~nm`1 zA1!n+T!N)f?kAd_P)K+g0Xc#LGCPEmGa3vA3TgrnNsuHON>5}9t0Gt>fXFm{$ZYYboHDh` zOht$*KHxOqhoz%Id0J3-p*8jY2BHSkK@2rQ#s|7?|Wn#DqpPd~O>i zMn=ze5YCwZ$ZU|1y)uuC&eh$Vuz)@$)-#I&k_ zXQ=3xBSaydm&U6{;W1D*pw*R2$jB7pMr3xB#cpOVHh^qKlxqe;+5>j2%xei?=5z5O zD?J9(D+(PaKcmwOsYgiNG?0~J2t@D)bLb?3D-+)xQXor!4y71>7SMek`qdD@b0D)! zVgO!{rI6v+Eg&=GY;*`wXm}uMrzG<$%qI9VOzPoT+cOazabY050~hU7gVk4IxCakG zM5cjUJmQpv4pNr*4sip%;y2nS%|RIv?i7 zlVxb24GLNpSQiMEiN?i##_-dKl@nq#Lq>($NURT{Il>XFO0@!e3w12^BZ8t>h-sv{ z0fQ-tzNMpw&ImoML4;)tGLhhK44K&U9fJPar)%Kyt1lrw13LLri0U z{Ng72Zg}jyo9yiB0CGCfR6&ne_O2p_gL=|2O zTosdz6AT<)I9?=dIsK#xTU1~r^$ZFKmlHYkW;0krHT9CxKxSYlC}2W7H~3 znHk`h6d@$RmF-8ksV9%YmnnoHcqD9MMoh_spn*qGN(h%hONG;2`rAqoWR&g3(WD~J z1AK*87qHoh(8iDe>lx{tH=wiq<`suh3|}u|3`#;)(qX(R%scE(Y6*tMOr_oG)}THC zp`yUx8pI{fB+|vr#cpr6nmk&Az)#0h84}|?mMg<5NDoeg+CdLcDRR;1pjz|}0OH6Y zRaUv2sGI;CAE_0`xI1J;d?lt-2#FZ3fQ7)6C3bM|!xk((P{Z(R+e}2; zs0D|+U&jc^#W0VYzI}KS>_Ie9AI!HkeI#5cnGlwVb~;}lu8=iCc-DFm*>K13Bvy*EOTiwjvF`!1pwpQfSz-Z!We7PS*b;!VmgBy>Fj{Z zEp1Bn`q`CZLyL=jBP?6;f=-cDe_1~avQ{*ke{Sp zGSo@VBt6c@>;Whx!$2*^BTT6}ZfrI~x7RJ>+u`Og;bd1Z?}9?X)(-!KMvu`Ml15n0 z%_<}DO|1M%y+A)iE@zjC+42ZfCv*>SEABZo5Fs0r0;!YgR17)|LIIgyIyI7Uv*1y7 z+q?nrRYAExKqUi1WJQ!hwh58w9X2~2RO_u!*6FF+31j5^VHO5lE-%Rq&n`nKt2Th4 z5F)cP1$(*}h%^ud(iBOu-~evn6hYg_r!lHvE?IHidSzf*G;|(;lv)F3nNN#!Ojzv% zx2Ojb1KAwd3SBDtuMk-b8kZFzo(v{8`L<$=Gg=j7Jgr>A9^o;1L0`$kK@ApMK6|B_ z!je9+(-LOh2XoaA?TO(WOD@=JQW07Ipsvg0PGx|AOzulL9Q!a5d@Om~Uka8DGSR|H z4tGjU%V0K;$@^ig`mnhK$X%f)=vHEIpj;;whWvN@;Yi4tPhydW%))SnsS>hbgGfwZ zD-tMsrk}J7p9@SHvwX@2wNgtBrgj;<5Q>R~qE8`rtCiG7-jLYiQra{MGk+BTIcOCD zjz8MOwJGm=xo9tS*5J3L#Y^MDQU9ST`en31p;`7^b2K)7>I?r9KKDWv$Ww8#Z8 zTjF;n>RcfMPpi^Hn({*N35$Tun3Uj9O^&e5!hIi@CGciAIk=3)AoIX5$Z=_kL9D65 z7Oa1P5HdN&VY}{XCzS_ZyOyfMAtMnxc+4U2m)9tWqPZcP%7SI0#HpJ zolIkN1mGnE^_h4O)SRDer~phvEKuv>8B=IYA}Mb8fLL!4Lfu(AaH)WKfTLsg1&Ln+ zH^wB@tG0{q^#*7pnBbHUkP85XTY!%Rfh_!H;Kfd-1wk@BLq@t7gZUh2@55QcTILe2 z_e>whVzo~sb|c<2q4xq5Wn^X0iec%fU67>7{iMpJ!y_emnpM_=+dItcEa0-Ca`K22 zMmb_bKWha6MOgprI-?l1HbFw{{CY_Q=Lz#uGh-ESucU!F*cUC>wP+zgIbzR!Q_0jpx3dKSt_C_9JC4gHcG2(w;T3jj;nOjy z*HKOfS^C}7-LeQ>P52*hPW+~T*BM}3j*(JK9HADAh=xRXKL-e_m3u-AQ3 zFH=FA*b@?BFU=yR5mpo;YLl7fG5s000k2LVNC=f!ZH(BscMz=!;0-Kg?C+s~%pda5 z2T=H>4z~hFjyX&l6RDO*WJO(uTpG(BRCSXEjG02gG?sk|0s{_WsYuG$8SE>Wf+TS% z&2fX*E74J1&b?aWVt3OT1^ zx!wTOpXfyni43k-SFK1)ZREFL7l#{8iLEer#V895Kw0%-*b#b}R|H2$%V`FLwob;7 z6!VK*Cx^GHjt~H(SBfE(1_3Sr7-1u%QwtdjPB$Sh5%@pI;o)e){Yx=X!dA~}W7IgFZgxNTIw4l*hgYT?9=QUW}Yj(BwD z{;)~>OvrqU-_RKn0ZWVucDFDfH5VVWLt+t*mIgQGcls5i|LRy@Lsr4$V+|3yN=;88 zPdo~`X=Ympr%e)yNr~NQh0Z_#kxPlr+9Xv6=%1OCA?hQRa+yGM1<$C}ayZmVA&J8& z32UWxt}Kf|Zl{kX1U_Mx4Jr_qn|KQ}c;DnOL5bURpkOeOI%q-Itb#ag#tP#M@WDEK zSct>;XOUep<-=d?CvBU2Ta`TI)LVqnZYZb%SRm*x>{z{_bcW?(i;nq*1bVF(J`*-H z(k1Az0D&ckIEcr>%t~g)ZelljxivB~xs5X2DmXke!v9I}}E&xSS*0QY?HT1#`n7Iu0Xz zMwQA1HA^00bP2WIOruc+ropeVNy9Fk*y)EbZiGU}F`4*6pCSw_)UQ#obwj_f5QZ!E zW};j};iZYtU*V*!j>vr~w}b#Mf`rI7BB#a|feGNXQvZ+!VFNiK4RTQ+M{pv&^#IQh z`bjG4K#>^p8`6gevUazYQXPXW69}|n^hfLjyFm}6pplv!a-t7}hyh%%^Z8A#-8>mPlwf z2XrVcFo5VW%IQ=@dwaMSQ7bqQ`@D5|ht5(=Vb4Jv~K>KI)xJs2Rv8OPyF z%_!&4s*$6ylY#~!W(#za%tug%QjmRx@JQm!kC;hHvg)vaA%%$;%?2PHE~_DcPS&Ak zvW`Iynh>}n8NDKoy|Ap2zgju0+7Wz7yef7H;Bu+}Z#xVueuk8^0lORcq)y5}%5QVv zI3rR)sF5&%D8UZkqW~^UhN4Ie>voJOzLh3>@Ve@ZyZa zWo8jGS2N;sCt`6TN+fQF7e}buAp_9oW7oG)cZATO;}g(RfuM;T>_C)Yk**fbkD0M{4}K1A=Wb*F;ix;n4#wd`Rf23 z8dOVoUV%(LM`y?+<<%q1&6FAd&br)qM&U1q*T^lS;!G03&(CL`;GxYz-zci$2RIcVL*&CoMwafax~bOnONsohuFmE;Av|rXa`)bSE+eK`?Ff#3OdT8b=tO&&-VM=*UcnnOebYJv@&C{+5s7MKLcpzXRXhYy^h4d@T3;>K_ zqVd4HXRjpJ)XE&)m`VRfgLV>c2Z6g{7w-8?05v{HC2}LtBP6Lfk*5RXYNgknbI4Z6%+s#Z*jXn-xj7aYa zixEX28Aqq?cQAnogMMfHCG(gdhKfj5roGCnTR@VdgUh6uA%Z0b!~!if0!6zVVr4*{ zNvmFNA%s>9E(F0lF-Jr*pcVz{j8|9#8jMCR9Wu@_7>O`i6Z2@wloEJLS+n{ zOr7*SL57K`tQ<7Bkam(;sYn08c@uF7U>%cQ=HTdP#cPZ57lS3|3yW0ZM*$ZhAdqC9qYNp?D-+w4 zA)>(}rbzOECu9wfQUxC%;?ZhISj4yMBQ7VS3wH*gp&Yb;En$Y$AdI5a#afH7&_k517`ukX!gY@A9K@rNULJ@zgESc#VS-P_w8U(*BUjWpWkd|q_yiOrB3^{mN5BZnNZ?XOC|6b7@Ol|(0Sw$C4nNUM zBu_^$Kbmy7Fi1nBwhLpl&t%PHt{bA|ZzEzC6%+Dzq$nhF3JI9>^=)(&2|gr>5H7XX zhJqL*ITbELFdwNMq{BP0B!z8qko=$+k>KLaFfi8AS{()-14c`T#6>bu0fHd}04o=9 zo1s4V7!f1O#c4qc+ebnZlnxW;IV;5y)7gLo>IQEK?t5w{mrRZ=1DLd$S(@2{a^DQ8 zz{OBr8zGKQP9^|EBW73RnTjM*n>;9|58wi-D2RiC5{=&}VmciLoyYMEIZ(s_wLDXe zJqziuixo+uL3#v~8c+~3A2)S6y>NI>CfFT;Al6ff2q2AVa2v%Su7-oeJsicI)L1e++LsFz)?S_7bp&2bZLnKv%Q;m)mtaI6 z@;CuWB0CDp;9)3S9GwW{h}c5pnb9v`*+KMR^C=aiba6P4TM3f`^oCB@@05tb;Y>Rm zP$F=oBELJxIo-g-o~RU$4)(Q39dvRSH`4lq>Xr%T!3I+k9TK?~9s^QJJCg^W6eJxT z9);3{=fmxkd5K1~dZ2p{@QqX=OzA<8K|3JB%<9#8>4rnWq&r7KG(>jXsnCeNw zp&OZbP-y9b+HGo*lH|9ESmG$V?Fw`U;Lb=(Uipk*Efz0;H+gKp(;&*5Yqa zNQtTvVdg_5rSR;Hj*2=uEGlZlkf^8^qN1XD@X)NrqTXv`#V0w3TUN!yyXAkcE}G*B z6pz)OfAd0K%*zXp#krropVRU9iTuaW)6Y-H`tsGkR97b5y6{R?($4beHL6dXA3aRS zIk>s(NW!4@mP`9rH*J1rS4~ny-14E5^xE&!*L`kG-?4nB?aIZcinXO9BC(H_ejHOO zdn{Z1&O6ePm0KseLN9!3F6`L0Zf@KlrQ>?Zo^9QVdz4T5X@>ezAa>{-=Y_lpNB{iX z^T7&L_)9JSCZ1KEmN|7oZ0~StM}2(8{5>ISeeI94t3CUD z!~Aour98})b;W--@dxRxiu<)Ux4JHW(ebB0cD3KG(41T?-Z9}$+{eArEzh?}IwQ+J zT9eRs(aqHKzK6TLS-dCbjrrLFw^z)ZR58t*HhFdHueVQZcz*rBO>5eo@}%FNTHf?} zOS!hG=b^YU7iz=9|8eHwg91bD)1M-jE+%yOR}EE7UOc5i-IbObSJ@c%EPu$Hw3_!4 z{HgQ%J*j==%Eg5Db|0&GUEDhT#fSe~S^8+{?+WYAPL5sdjBWhu_TWyP?Rx0R^PKi- zPvZ+eh&u|ZbB;|j&+jUEZ^f&=e(S$H-#npXWS@$PnMpt0o02iFvZy$2(&47qpH=(C z)*jZZ3EdX|`MI<2E_K&SzH>=G>87^65*fbr&7D{4P7GYvGI(iL;XhZlc2CPso8PaY zbl8*&>Z|_hX3v_Tw+~F~TQQ>iX>GZ7b#-S%JZtbdb#;xT=k=52PtRwiwyI_a(ktQ) zj5^7u->k@ZwnscJ-YjdK9^3fb7W;F;gEOmm6VrNhPG0?} zL)|z`JM~fR@fJ_Br%#0|cjDXc{CIHwfP7DL&o2`r4?0?IeY~&YTCH)#*uIAse$nxH zbK#N~y4qV425+4>zn?bt`qnAqD_%)Us<`j(e@>zQiZFsyyLKM zPJUeFlwtSJoCs8^N7k*cZm7}3UO%~b()r_s9R)EXb-7P!<8uDE`jD9Xy6WZP zq1x5Yi?;J`UoYx$&U&JgpAo3!jqt@*io-oW+*&^A?UxHX)M@$0ngWRx3;VrZ`s{wV z;?+vAllN+Qo2OUn*7EV^odvrRx@wm<_w2=!Oqx;Yt=EMo938NG;o{DvkqI9j+HRX0hDi?yMO55z{Urr~eI-JQ~R-RS*6+^X*Kryupq9UaNNyR@sLchdQLzuew>wf}NUTGoWRO5T@*-2eSXB$cnL zHKrMc=khUHm%lNmohS5U%jV~$9YrOoYKid0>oq5yPJeO7AT3|KUmQ%c))jH%h==7o z`*ntuSAJYveK}yQuZg>=?wTIUW%2Q(iVvQPJ8F+}>C_FVD~@}8N>|RaopC?B#!@A& z_FV2Ws(bGE^RNA(ZpHoD@<*ezs=9u=<&W;JIrIE@?P zQNxhq?&bW9;k-Ge&vs7v{>Iw!j*$au8qSKj0~UAH#%W_W4&`p#R<3xS&ikTUJig-A zvy}L*+VYk2JF**w#3o%Ik$bl#ZYkfsvb3Y%Y5!_oZ`%C0-D+;^qzZFEMm#^aw$r+N zVZTc8Vr^{FJzGHr3&8b+y1b-{um47rd* zKiyR=PRn{jms{B~IOi`F8=l`=`oe?SN5aM6Yu1VuX=5ATfBD`o2|xC)w%)d;Ev(!n z9(wL$^}0T*Jgt$m->#_*!7*=r`hoH@o-uacfH-9XgktKZm>G+_>r=U*a0KE^iv7J$mP3)8M?c z9)q6z^jhDmwf>ns7Ck*5ncA`K*)ID4t!!A%_=;C+Zyty{m&WJT^xBn+MZR|rH%V4^ zCiMOCfo$c_*j`EJdw==Q9Y5D{$sZl?`uF#iE`5P_cXn?3ODE!Exk>sqZhFq!bZ+CZ z_}A54cb2{|TaoU%JhP!<=Jn^Q2$v{47CVcz0*qm?bal7q=$t`9$s8ENM+- z$JrUT^iD-i<;{fhkFt+V<1N<4X6IIxkEqk~%5O}`ymV3hqkp+4J!`^>xX;yH+9zlJ zHF9Zo`PQO}Ih8wajZCVmo?Ly57q(99 z5vaWI+Pt4tT*a3HUnH{G{M1~SB)fX%vFP^W1g=DJmvi;6+$oQyB_&64Cso|Kvv0`k zsSQmMma5aMUac&DbV#eJtcmHp_}phJ9ubt4ekCE2`{%(wyf&gdbHe&}sa%ACWMngw08Z~p4hvd?tMR*G-8UYq_TzN@b86Y;6R&tCe^>#w~vbx3M) z!+LRS(unf$6><0Lny$5fIqGsAxBcBI!(xTi_UCj%T18yWlZsoh+$rt1r?*BXY>4~( z^LtD8H|5lpcc|Cxwl}{n9>)Dq^;W5~oDZsE{(y`g>ouaq9p7!)@O)}VQTwiA(?SzI zynp+|2jWLJ0$(KLetl0pEN9-sGtZ?XbDy5Ewsl&E>vKDH-b!sP@Wrmmxy#Cbap}kE z>SG?ZjxSgfbH@JhxY*d%+2?8P>0gVitlpKLRpM|WtD{!bn!uva-23Nx=Y)lE?Jch? z%6OQocyz6&{OMhF(%a9c&fb%{=~%U=*COreGYt;$?D7K>=Tj-X5_>^4TQRO$D{Jjg zC(W>4TKX(k_WW(_>ekvRNfn{K7g)mC7Par%6{^;235%cB-uhkA3wu0kg*z{hV0r|&jSbgHw?-C2o`TV`5f2rQ^j(W#Z|IGY;uTNR* zTwUzdmX0Xbsj8a;eUeYIn#KK6S3OjF?-%uKMbag1(+#|$qn+beEz~1(EBkc0SP$x^ zg?e2d@qqX5eoDm$E$O4I!oC&L^t85b<2#NkOP>k5X>R)&YkhfYO+$RBcM_We>)!`k z2CWr$6geq6K0h6|^x3*N?NrvQ_MZ=4>vMQv-0O{TInT~`Ys*Ir(Z=p?;xp==%MzLM ztau}P<4_lLTNxqnWo)eWD(HMt@#t!_n5C6}4*UEffZ z?CDM_0CQo|!+++v)TQPg=Cgd{Tz%$dq;J}g0d=~*-@pB`bVqr|uIkIeVkF#A^Mr+w zg@?T&UR4|SOUA?53gc+&@CkKit&|4OC-KH+{I(@*>vrf3q1ZXY#c=Cc!wO*sD>~wN z>>8Jq_S>5M#>}VOGcWD%L}Fhaa!y#szopL6&VP2dHzoVW``!8R*`pn`8pTZe#5>|#)p76|+iaG0+J`*+|-u7w_*W?Sr1yZL~b%}0A z3LC0pE+*ts`|$S^q-UOYu&l>&?ee~S@ccDuDRFQGfAXd4GrqV+5=%wFlhm%>a)VEh zD&zTY-^yjpD(tTfT@==^-=4<5+R{>Q&a;k>y7Rea;1v@vyw(c0z7REEi4IgdPL*sQpZU{kZwhY?Md};nT{pCsx<(BsZkWbx|MHVxJyv$LANzNWqNZu6xxACR z>|s}X5;smVpPNt${d%umSrHd0%#UlB(sj2tg|Om6!h`mot+z*9KULnb;+2A=7mkY` z)p`;~b$@3r4|E|ou9+XB|n!nMIu<4sIUVkK<78`rVR*X;R%nmS=!QA5Ai#g97H)W>Y1yu5gA zXZa*OTe*5&%fV^ucE;VgsGc3rY^JQp*`?a=*%fa-5hr}`ig8B+eJY0Jc04yyjl|R) z>lDXcKQpDP;wYQz><(-F{JlkW(_$wqDjCZS_UNE)cp*i(=+RyE``=M~7IkFv0>4b) zo>@eVIXou+a81m&Tz~D)XNX%>SL^aCcgcs{uRD>`emh~vxm`U5QCPqF?AIHTFI{}J z72JrAgnQ;zL6Wd&ZCzS3xw4H-SXkU{UHL`Tac5s{h*&<97d_32)vqWT zR>W<;dG}6))7|UOSx}ndez=)>nPbZU?Fp9pje~v=SA0bAbWSW=tlc}LOZIpa->Por z6Yjx3?)c!X((U})qrZJ|c~a32H!F1ELay=H>yg5{oY0=Filfk6GNdMV4*S;73kk>7 zT|DOraon7P&+X%?VblBZ zrBvLFZZ43z)Vk{a6unE6o(T&c%i*y~&E#SCe@>YFXD+w{Mg0dfv<&{`%=MK$w4@jIbEXSe)BJstJk~3}B;*R;{`HC6TMM4CTPe1y zcU+_Vm|3~=l}o>U6fD==V3Rpga1}4sK6&1$70!|@g461Rt9Yky=<-DRCcRMJ@n}YC zr2ds>zj_qUXIzM+EmV#F>9``Pnj-6Nc`BDEm#zK*t5oN{6_480|5SIbfXnP+BE`F~ z!wQFij2HHZAI-R&m)6v&kv%=rH>u+Jy^AbW6#n%^aqGqAF6WaiJn@UFKhz0VT|&hi zYALR!4bNX2;kS<7TP`f{w^=vuU0m{!dX;Bf)`WZ(=~nLUf3jZsrPdMaYo@1gX3F^U zKM3W_ndj+4LP;D@civLeeI*o{xuM||bDq{7RU~m(X`Q}sKyH8G0^!Zs{1$5_$GM*2 z)&yZY8K!+w%udHWqu65M1J#v(d4`Iy$QK*GUNc{~Yk#^|xJ$Lpopg=+?I;W0tvjEs zc(wiKdt9QNvQD#%?Cj)#y6sv2>gLJ3HkRf{X@~l1f0J;E=D@bXJk^-nUfko{s4?`@&uPLrBnaAOAm-vx0_TibgexC6u ztIz43AGo6jXy+h~n_s^eR^e>rjRP^03OA)LOJWd!f<%Qh9 z`P(P1)zM-&zrJ+9?qNR|>*pUB`pX4N{u}e>JURbk>A`nT559BA8~dnqWz>YHua1|k zOCM5h`0|VLdmr^V?|dFGVox(D*J?~vkc$=cynvud~J`p`#+mm z`EEgI`TPyRrVR~GQzkeYKjM4`rn@7|M;Cw2qj6= z|JN_HU!(f+7{OyK4-t>4JnTHOcogth!ecd$8XkLjH1Rmk;~I}Icznm>|KKrz-tGt< zsXXL7j66I%vU$wqv6x2%k18HQAJ{stBzwV}?2<%ne%XRK`9<><=<;(5ik2kWvy0~! z7L@4bl@%3~mnZ7xl^5sh=arNs>at4~l;sx{Y3G#{lqVXq|76deyD+;XJ28-7!oMui zWtW%dFG$_FU-p?$yr!7+mu~amcJm;R#1|cUluGV;?GL>9{gd6 zCqF+gQCE~be|~v74c0SxkdaYyClz0l%HLmpJ*ytm|LjNE-Bzo6V2Jh#o4)qf&4PzTbX&D z`8j2LE#Er3sDNj$FUVhzUuMo;!ZS^D@=%~h^E+NeZg$B$Q&D!_65*XF$}O6= zaP}N)c5!}rqNY4oc-`}y1^MN3vJ=e4R^tnel0(qiSJObJ|$j z?d;~deCxs5sx^1bZcA$Bg1KA1tST6tA#XY^J{T;xed~Ho``RB*95veSZGH{m0uMPD~$b3f2X!yWc;x$Wq#-QjfZAw3%y) zj<3G$+2T7Dao0!gnAh&z;+xS@{Nwae`SG?sZ7l;cwq*}4oqn?6#++h*+rfY$GV4L{ zx1Jlf=Y&VJ9lknwdsBM7H?(m~SIVfHiYv{tdrIu~l}-ro7Xlf)mH~o?le;u)4JF zPh;DPMp_n)EiO&IBPlq2p`Xc8HS)%~+)4f|N7HQe4=)$z%_-@#t?{1K@p*02TE~s7 zW^vJ+#xa(fJ715>IcaG;aQM#Fs|zm{?KY2 z^O`nhWo*wofdlx{ALo`_&MDj8CORnDQXCwAzsj8+ZoWEs-K@4v_Kb$TReNXMc5XVc zq9|N4!r`epQ96C}k*A@{fd@y!RqorDu3w&B&{w+eP-@lZC*_+zb>@EU|JB&JJ#_rW z;gruWnddfzzrA(qadTaxp@!*S;piJDE?<{;jjw)vaBT5g>1Ud%RQqc`D0}mz&0l@e zlsB|3eVZivv&~NrI?K-QD~aFkF<-V^nmh2pf|n1k>tm>@YA$;)cV$(epnRgO>h_Al zof~q;Np}a<#_z1FRIbna?BBDlh=yLQt~*eFB(lyiW@XBdn=@`JcFWgPUJ1N8ZhLuK z)u9vP3hrOKeQtd?!@c>uqTlhuzP%0YO`7by1+UAw#L z*0*B_u~p_Y?As{YT-dhe{`8FF$D4Y$E!qoeGo!Bd^8C-5kBuD?yne8HNJiFr)5^Wg z4WB7K{c3_zdNtH%Q|BSYr@5*}6K~HS`Bm|BnYVrHrb=bi$c#zrx1HZ;ZTZf;sCbHF zXntExc+$Awq1thQ&0`uq8R~g-%KiDNxtoJ&LqC=DYie9@pv;{b5Fgr5`O&39$)rIa zm5j-EmsK_1HKvdC8pnSWep#`xyg=+I_*1;aQ~jcJ&x@YJ-`#L*dgUv#^2dkQcdOd` z!IGMEasLNZ=_4(@mFeY{aru%{y9)IM;H!Y|2{d3==JAer&$Kv$%YS?7%>d|A~A^LuNO3&uW}vne=lNZX~&_4N-tC3_w=ed4e%aNV4$Bn74@28w~ zcWz-`?d09@{>tG;{{58ugu~Rd_h9v$g(<_zaunOw-}*Fpzi8XHjk)LMw&`!==`4lE zCC&Czl^4!u%Vssb++@9c*z?y*$M1?aeZ9TjUVrG~`Q(~cb9XH8hy#rFL4QxmV0?HIAtb~jWo#&U3sd|aFUkbd&| z3n_J%^EP)H_qH6%IX7|Lp6jE&Yp5Af^~u-8h1;9# z+%RDHxSZw-Gjua7!zZmfQ1rR=vqfnI>wKF7Y3tigt{HK>Vdwjsb8lTAn^HgUn`7xM zO?h9haBMIAs`*yqUhBa3PmOu${dJv2w(T8%m2FJ6G(40f4_@1*efm@Ck$!^@0!y8`Cmp$;8~d1Azq60qc>ZA0aOG`# zRrbSRle9+iuxO``7Rr(e4 z%cm2^pWx4CW-Uyf3F#NI&|!#i2bwh?a+!&d%C^( zdWNpx@tCUI4=h(UC*Sa`^?h9|Yq{Mfsn4sg%B%YHkamr8o8iQXnz?gR79I~Ir@dLH zTs(UGpBmE&kB23L$DZmv{$TO8jO}~Yg-5Tfp4_%zPx0Qm^&8V0#d3F!XGh_QMLP<{ zThu#zJ8M1x#}@CbPLZ~!w{F+Bm5jZSd}Z(MEurl`Nw#lciOupow7yUCzMA7$lWHkR zE&rr*>t?Do_T+2dF-eW?7--HgM^l2Ue|ne)~vpJ3UahngKsYBd>Gld zdqt)E%D+D{T=yLr(^7H$fcR~{W$nr0E1UNf=&ycvuRSen-mzOY-%DL+(TdEnYKXU-rw##)cb5 zNh5>m{*)Z{Y`!w@{^jjoojjpbud6$B#B;K}{h;;Xqsz0bA2(jy+_7)PUcDzzpH-a_ z9@kP<`=H~qS^1xgXKy6@voN3!%JzGT(KT=HXHNI;`QFvg=qz2?rgX1Y%fk- zvM2tfy<4hg)f@IsS-k1$vE92jX1||tV^GuMuT=-VD+_DZi?6QC`gVKipvm>eimu33 z{b=;Oxg{<9cuAjJ_n~d;k~bw6OeuYHQ(5te{F@|}?mu}aP~|pOC2u<4e5UwL^MCxW zLHNJ6Wd0ORBw;r%*+o7@cUjoqBS$8r6vrB zou+M^DN9)2D|t+sJ#~mJrtIWQ$%wX_ZDX)F^```Wky{>P!y>|BHxTe7adiUuSt)E!C zY->(y={lwG#o@Aw87Zno| zWtx`qjqCo4n{K-{$4uH*_2{E+QCpL%F5Vd4{n{dDiX&>~XkFB}Y;n}69%;#6FN`+F zzZAbF?(!?ulcHwMmQGDseM27=7iF)H-(*Pq=Vas93#I+0Il4#BoHqE9tmQzDZ?Xc` zmJ9Fp3MDUC*V?y-XlM7m%cjLumi9a~!!->v_~l+Ro9F&>)bFOPzYrIlI_7N2psMO= zQMShYF+OM2nBL27^mDzi>_l{Fsjt1?wEa1W3qC&3qkF=n5hGURALMOq>9wi5D*E>a zdd;k#9Nn|=M#1xG*ZveUEh?&BT)*vHM?ywYP0Bl~ln><5Bc|zY$Qq-L?l}-;u9VrQ zb-xxVb7XPM(VkXQc3Vtx^lIz4?xNNO*3W;CE;~4C zS+_%$=+*WQUrwLXQa`lnU+4Jl4Dr2@9yR;juRS|%L`S`xmt6Jo*)xx;X+@r$Z% zZPR-#`&QNW%-g9Kub*#^uGoEV!r=Qu_NP61Dz+?`dVXzuVnfHoK^?z~Qbi?1Ejzb5 zCao-LX3|&RYxL@96Pmg#cT4T9shQp@runsbs-zxKuS6A%OMmxaTm6jDT@TYr$Gv1VBpIU< zl6xA@H62US$4zVdQnfa8Zt$|r|F|?F{cPP=ISo;t=;PwQy&GEAFKW;sr}DkG`<(9{ zl`!eD)7(8__Tie0sEV_HimEwMx+ZR5H?!*}ujH-tsF}T7e_FOVt!vkmiGNIvdUt!_ zH`Z?U{k`VrPjn8<>l(3oVs!UqzD+e_CK_{g4fEHaD z=f#&M58Tvx|L2Njt70m0_AP5S)eqmea@^tE<-6+-$lkvnFRJ`nFZ(Jn@rS=hoqu;_ z)89`-ZA_HLL@kKAc;&r^zl3WWUDjT%;qkjSJ!D}~y-^dhVM&a_Gpzh!q_!;4asR{g z7{{vqGlvh3i5ls1J)SaZ*h|wAkB^wR<~_?F_J8JH;vV{i@kK@S#N`um(~D%wUd}Y7 zN&Y2jTFuvQ)Q)SP6VrYEH=8f!+vBRQM@5}YUOqUIIPmIz*RIL-`UjHzdrLN_4LjUc zJ;pV0S+AMa+PSYM^qjBim)GrVMar*RQ%~>ijS@8E_;S-{$vM`vX;TfZ%A$L{Eo+*+6rn8>q zZTX`P?9Ohwzg#rf`e97e(5R>jnKMULL`{rN{Mr_8j2fEQEqtu@#aVH2pEMaK$L)U9 zJFeHV+?X%6#pk{hy{yOl?hAgm>B}#s#ZSCCWajLNL!(#Ce5+T~%&mjQnpwy~`m^rG zxfy@(KD_z2n}#Xwxc+mZ`$b2&Kbl!?S*RSg>D`<$uSDOu`RS!k7QMMM_CcFI<)aUy zE{*zN;;C^LW_wzaKkTz{NomS!y=dpXQop_RzV1Zt*SAJ_o}S2ExoFg^H+J2>zJ9QI ze9fh=Ck{2c{>}EqqBwt5Ti)%};~Wn*>*J#a4SM}=v9rcSU)pr@f3vJq--?Nv`P4Va zxglA0Y3sUi1K%yph>|?&zpONNuyw`8`0ih)R(vxsJ2hqN&f8^Qx|hwF)NfN_5Bt&$ z72Q)uL@gS$>|xpJDB1qn^brj=wCxxAM4kOU@Rv^t`^*v7#4JmnojQM?A=%Mgl@Rsm zjE{RAJv#2J{nD)TsnNB!zb=!l*gNdv4@s(M-};Yw#kv1c8B=9m^XlIDZ_Vy=DQ~p& zP}1yh)Wd#hmnK}QkB^=_qWiT8(b3EFy{|>ZmF<1wZ#wbL?wVDVF=yMOrgZj_e}Ab; z+_Oj0=28s~v8x?dXCcF0 zNO~-2Xv&CAx#Vw`@x!IswbmsGXS#;WSR9^y`pm`W?H?59`%42>T4|%041XImRM|ey z;C+y{yuWlu6QAK2WrWg?*_sux>p0@Fk*LC{_SNViRc_AHEsH!^9OqDmFYk(p&#g!6 z`(9vNcXnqWsWuArvGx{(nKF}Sdo`wW#%hN;FV9~+-K^m9P2Fc&SI1RxgcCNN_YM#1 z){0@e_buM>Bx#(~e5=Dioi3S!Nt3)IYe;Esov+xe>SRsEJBC0Q@q74_9rG)zs?T4L zF}&M?-#_%SEk)?1UfmyKN}jfyEw52ra*`hJ*SmL{wodvemw;i7ZELO<)tJbu5i;-^ z>)@-G{vGkP<}gwE)ZRv2`fsB=tBu)55>}!8tKaJBpdm$Q<)Q)uMp)wk`Hb~(`+GgR zxmbI7WaAs%yDQgJPoG)YvS!?_Cr`unxJyyl`lD`Nd7DBH`TqUcc6eV?X}Kk1jNhw+ zW=<7-q-R;zr&OGZUKbam6NVD_pS8xg7_7ayKoreb-=FR8V#3gC4%S9lxog8i8#BKz zkOnm}tp8YW?Aa3s?H11N3T73sTFmWa#kTzyVYfikAT1Z?<+Iwgu`k^)jREv zI-r%n4KdesU+nmN#F&=nj}motE>7?@2sO;#Ysy}(#hiJ9AwDd3W$bveRtJ4%vy=yS z7l%#IdlF{T7kO+9-x=FvVmks=)Jz=iQZ?Y&ArYhEL{Uyxr=@|j)ca7lj~jDm>L%t3 zlaYpl(-|o8*q^Q2T`zcev{qM~8_URhp!Go?~-tnpN4ZVNZ;I4*e+jW99Yhq|PlVgI0 z#msm643rup9nRu?W?d2{ntV86`lm;+E4Es5oBD1H886r_(f%AQ z-Dz&}`TSO%qPKzL=FIcPYqSF`W)|vY*d#u&MbbBaCOMgz_4&)yT)=R+ZInJihtXSL zqE+K6MyMh}q#L}mSB~JzGXKJf77NcXlDLhvPime`Mp3?&7QRawH>r*}{+MYjUAKrS zcRqG@;-jMH>kaN16b399GY(ZaTw1q)n>57U&Ln1|K6|G{&VmVc34+RFHCj&&)LlM2 zUD@b#VQxALg!E7%m*?L#SJ&0V!PJSZ%yN>|#8(731Tcor_R_N+Y7>fD9CgxX76!eI zj4k8sFqN8me=Y+jW1Vcb$xpCOd;XN@wFVXTVjI(ySBF}gx=v`a>1E;;R;Ht0R9EPl zvS(_d-rLZyb>Wum!ZOW$WtCuo;ocbG z!$D1(ZDOtMFPuR)k@RWn^$hQ|y0+pzTWZ(X__$Pm+qk|LvhU-l>sJ|?)Basw|6K11 z`{8kGt(yv(Be#T9SHSCi+fyN4dmI>^p3510&IO5rCKNGY@=$d-u)NBVONJeO>nXF|I{cy{trBUGBA;HnkQ>!x;nXWgmYV)1mD&m>Jg) z70@v>WaIYTjJa7&Mm(X;3RGKp^7*SpK_jxw8gqxrZ8OF;>UWuNjL)5$Xpgd1Z0+|; z<YM@5O^Up==!ejLPx1CYP25CIH8T={xK;=HGb(C7TP|AYzFhDk$jt1 z#`M#n=&y*((Lw?+GJu3P?T>i=)ZFETZP?B8j zu6Sxc`s|Q1p{|b)y$aH~UU)=H<;zB0zUS_W#)PCSYU(YQ?k>#lhrD%s4!F8ZH$2i9 z;KOE_F}XhVixFcb19iphwnD7Ix$h%qj1%|`vils`+{eAvO&jUoTjR|2-{6{1kozJQ z?PW8ES&qpF3@&^(tbOr~=G`WF$bwhxWvwlo5fSao=_qn{nsO#Rxim6>AvluxD9-1x zMZ%8nG5yz6m?Sc+yV=e`3*DGZ7X7r7et@e#@VfZ^vDq@DXC<}UbDGevCt{CFH zcU=7GwO0=prT&JbDVFlTwb9JA9)-=?hSiBp?Kz9hqWHdl*CIB0c`;C$ENvbf%eO-w(EZ+GbHnhxFJ}5)mw2DhEqI<}w$Y?_!gcORWg z0kL%q59!nwU-bQ#jL&Ch9b3y%`4rR|u(tX)nhH7?Yc@n)DzTPYlwI`yz_MdZeBu?| zZYSD!JEsVJMaNfUI2rc0+CSsm@WSeFbldSv)1s1nPg38ym`oGcN~4ybvCWcU$BR1_ z^zH4Z!{#N1>iB34<`j&V&hA)~>o%cO6nT7UhMoXP7&qfQXS+s?-e=Vh9)1iTq{DL( zRHRQ{Z+Z8^;kcoazEyHvR0+nkCDOqlA6-oRz3+MF6IKOYF~ipz_A@q+yT#~5?Tgzh zS-+cYARR33U!S0JHd(hHx@*jilE!#mG)nIr6^W+!?}P;d<2V8o`ePirt@SYOQ9`iQ z>PiEKHe+R~$*8Mnj~07^3Daz+`A%Kw)NrX6v@DCRIKQJLV87R1NR>D< zVTnQWB5h|BXng%f7L&2Uuhm=!Ax|V-J@34?)j*R%rvC&}6NC~_NQIvPLM6JRUEb>^ zm~Cw6CzuCez3NXBt^uIsw=jX;fB7I-;>^nGzGGsIcClY!)mFT-t-zk<;l=DksF z#m3bzc0&0N3MF{*TeMaemM%#9uQ5O-hHZbQvXDIHcuCzEbeAn{G<4g+=+AN-9H3=w zD>X+u@CEs2V{BDuf0w~qq|K0;2)N12O8+1;II>E|DaWb!OK8Mqleeu0r7lRohP}B# z42!``#6(i9g!}0Dbu+CjZB%B*-o!xG$A4w9_w`*;S8WaiF6js1+jUXMxJKhH81Y?V z!a9yW&?uI45r=^s1rJ9uOm;{wN-*(A07PrUqK+kb(HZ5ePNoZpg9hC1toT)N3?CQig>++6Ual2NCl24;LJQZj03IGMLCR8G{7g zhdsT}+6vP}J0{QOA)Qt&SdJpFOwhMrNT1AMhB5=BFaW=cQU?fb_ytxWRPARC^>}JE zY9IALXUwlPErx!CX8K=7$ieN4>}_uKQ^yI~O9RHr%v_7!>>f9O-IeDZ>uJqCG7tSW z8ZUpS4Y|6_JR)+$hAU0Vy6+6+$wdiwBbVE-*n+$_=weJ4%hldl7n!1pVBk*X!Z8A= zwo}Cp2QpK0ycXRu*Z_jH_I2b*;u}FW-m;xjXIXfsOW=%|?cY@bQ8}y4$SgwaR0t26JFs||Z za%M^9-W#n*ygz1O(_7a)U#C0iP0%`uV%U>JZM}>_jPDw_x(gXMbDl7g?D=-ms)&<` z9&TsecvN=rMq*jgVFWN5r-!|eZklwZE5^0F&#xhzgenunXv}@j5TKxy`X09jt-pNr z{B-TWwr9F%dMxsH*#GR@WKZ_(ZjGr~?W zm=m`2`gKO)AcP9$oh(W9L&$1#3R6qqE2>Fywy|0s8!jKcarb-k31gj4E6tm&U3co7 zpK0drj|S#n$z=o;nDl*YYSAv!DfRt(Mv;ZIz^P`QKuf94YNXo|x?^0j z4O@E4{lWt03qJ4l_eS>OwtP0cU}4$2@n|np?b$cM$^77uoDQuuwhU1p-8I~@sG7>M zM_w7CX#K{SeL5I@jZmuDj*=2fGc<_dZ7{+m;bOi~w1Q)j5eAQ^2P7=KEbU(&U@CBk zTHwY^){{E(uS(aPjYqSqZVbKj&}Pwrdsja*!p0QZc8MI&`ro}+p>2x_$CVCUFbKJg zO)Bn??bVeVSD0Ebqeny!zBpLr%tHyz5&T}#vP+hQMJCc#9X-bRLNE3ngP5^dXIgS6 z8uWGE8=`B#@Et0>y7NofWbM4O6F7;Dt8U)i-JHp@+tobiOwbyGbxzDi2cN!cHdec} z=`$|(c{((qC!l7_&Vl)7<1QNxu8w(PcqPY#RXKF^$qjFmHZLYSY3Dv?BxRm4ysX#z z`+_=2P=c0VLC~(1XA(xZuex9$c%c(*KQq^Qna;YPwJSfCS$WGXR&QiU{j~+J=O*cz zPrSGMPG~J}LdC4#O-&gCW+v+ObGMRep@GZn23k+3td4)ZJ}~Ol-;G5m$gbjIg-!Iq zn?VEpSpof{L$#215RF6Ses32Xlr! z>$^0G_h^{!uCby}zx9h^<>Sszd!paTpEso6&?I5s>?*zeNq^QvR!EZ<+K)kb2EA<3 zt2n>+Lt*TEZ=?3^g+(RK*BoxV6@^^G;XZQ7_^XLQBVs50@s@>7l)jy{afKNoR|@N7ICUo>xL;Uxa#gGj6zOwQmhEQL^2PjMn~f zklSzQ#>;t9^SunT+t7^3(+OZBX~k@@yzf-MrWfwno@>*i*7aX#zy76v?xnceh}FAc z<_h>jMJkR%quKG=G2^THct2WHQn5l$IMTv)$+(UC6fXHo^`sZY!y+APA11r9I16k$ zo-ktCc_&t~vpRLWt=JVqdod$7UnoVF!lIsd?J!5$Eb;Dv7iKUVS2}y!qPLl<$m^_v zgB55*zr^iUH#rPL!wZ|a(<90`^F-QvW{QaLtv6hqe#spt?W)u#x@;5ko z(9LV|0pG{A86l5`-^oxv6XTm$XW zr4Bz&{r~=Pl?qr9M7Tjh`iz)Hm@0se{skOQ>sE&A;cY3}i>P~73~F0eaajKmeG)zq zNw?u|BNx=@kEw@=hP@aojvx9z)Y?!74$wP#caX+QwR5Tcjqex{LpANddz95Cuml#Z zI`#mcIpWMkJTr`t^)tcUYD4RM1Zp+;VB;A7+p%PDe-zdQ$UtBvxzcEIB zyG?fg`&Q&K3^C#V+Q5v#G~kLb_4ZJlp+J;J1<3-y$xvoONrsXEWib?p?ok1hVkldn z)I({2askR!D7T^9gYpQ<8z?`Zu%H=sP@JF)fdcV6ngGQg$|NY!P^Lkd2?cV7C=1Fm zD664tfC8fxv=z!8C@Lr?pqzu!3Z(Y@!KCJK-3sWVTi~Q3vGhq?6#48!rd@q)yc!@I;@s2oH>pnkKG9xWD zR-Bk2NsWL7*sydQj-;mH3*m>Kc+Q+OwiA#OF@vrJZVVR$!?JeC0x{crQ7WuGpD{5l zRg{>8mmSQ53RC@()255F;G&<@z*TeSCyH>D-f1a|)6ys+=A|X4Nm2vTQmOXfgA(7w zthw{kGR0o=r%z90`^`^Dk4l-27uYBMySfNyKvG(=2ne1RB+in|U67WXm<8+Tftqxn zVp3{mT8daCN%T%krrMqgcbc^*5-(I=oS04#3j9p>lBA_4i?d?+|6*K7VhSIa6quL_ zdqv{##MD`M-Me2}nrNORIRiK=foA|FrHfNB!M^iT2_e3c)FjEQr11HvqO_T?PCXPV zhI{z|nIdr(a7a8OEd|<|l9)MDk_9bD%@B(+6SMr%W~E_<1VfWD)8@}ef_GiOlKX}1 z*tCo}Y$5PXk|ECU!!+!#Elv`rKqKH0hICk)pA1hFWMrno69K+(FbQO625vh=5!_;N z+VsSfNFajh9V`s6uwMjio}D&5A}tlOWj@V)ah4wzM0V)>j70XNWGp3b9z^#^tKvhG{z zZ`o?~J$3hwZguvz?uI+C1(kiiKdoDRAFleO{&as zel)00_NaG$Q$JAmd|Rgey6u7bhx)ntOSk%4_NQz$Y^XnFXHQahZ#be>dqS;C)IYv= zXMb0#)gM0f{0=*M8sMz%*9||^+3GvrK7Cr&V+@yk`1Am3RHyy+?dvD?$Cv6Q*S7Vj zr$KG_^B1mG4d<($suzBGpjJOT3+U}g7->}zoHmj>9}rp|uQ00$mGi$68=yj1`AdSD@J-zo>*euN+2vlqVp ztZwM}0j&P?Mg8p?+`s!`y@S4|T&2s03~T)qiSG|7d{Uhv7=N_JBiY23>n4cRBU ze>_w>PR$5ywM}m)qW{3O=(=y;MCVbN}vT{pXBN`tjh?w-e3k z@$Z&&Kkhlv(7pAI`qZL#53U?s`1j}!RRjM%{zmP&?UVZTcXiJfAnky9VRw&O{7tQf z0}FxR?riA2FFinQ_5*0d{U6g#e0zY2fAeuFG~yz#D;tZo8Wcm_0Nn2G?ta?y11dQ2 z4K`2pbi&V1-SG1SFyw^#%a8le(^TuT)%f!O{^2g^0VaI~g;8I_Tl6U)65p1!&m>H_rUijb#}J8VHv&wF5T)ASTTAIT>19n zrTSe%HtdB0jfQG~vIiI&x&gkWLH!MI^ue}o14{l@Ye|h+e``Yy3-xb=y$~uO!}C(D z)yDll8>3Y=t{#Y~rRVWhOS*cso)OyvX?d(-*gb^IRU?8r|JQx`Li?N`pNXG;f;=;V zkO9Hk!7zoWSq0xbp-fbu6a~t70ZLwgLL^jqmzr^lRIt8~E0p8!W|;`DO|0X#z)mwC zykF@LOGSicT%m(F)`}ab?!%EYBI*eMQF@`W5&xyXxEaf(#_ zVf9I2GERUQH&)IGlQ|c`44zWd>?RZ{B?SsetSY5d&J$X|`QBkN?`8*X1cx7>;^fJ_ zFUhK9QjsdDMac~`;{zLu6rwyCCqm^7m6RzsLMutL88==gii2gHDqfLN z+^&!m*Ks?QBDf?E8lvz9b^%X>)zB&2I2At-u7b@vSo-NLl=%d5d;-l1<>OR!~-8XfPv7J%A_zepK$mAcT|Zw>qSL%+`KxVhtteS0UB<| zIDslos~q~ySqPmd16Df=m7Fl(w#+|HmK=|H8wBS-Pvxong>qh}92(`_D)a7i5DM!# zv2`5aTanyZC>I43Wc*fDicl$vSNe1)gYp#IGBXPGS$wD`NbG>(y zUArpy23!l)pgK8Lfi?7!BBfN31RTq^;zuaCP)UH5OS{~^xZb@Ub`CRh z5h}on3Ik-``CzzYF5wDZoEfNtC_uphdlCjLtrm6E^JHK{pmL=cY&aOeKu|7dh0G^U z0cJ!Tj|~*`5tssa3M@&e0-Z{Ul?9j8aW8?+Dw11d-mnB6j8(jX+pd6ab%vGbU>HGw z3&2FzK~+iR^`J6Iz%(p-b)Zw6z!Cg#8Nb5}~}gL3L`4<^>e*iJ-BAzfz`F!K0(7dL2ddNp{z$=%0N+uc5(bY7 z)`Ld_b>PQBXL0x~;3+_lpdV$DKn0i)er!G1qU1n1Po@x-R>E&lhm|By<)5ca%Hs&* zRLNzPDe?6_MI2$cg|I{AA7>^k;&9_R{Nl=_Vvbnoz%7Cv=Lp;CxiXcoP3A9iNGag( z%Q=!}2O(I?05f5L13V!h2^&KlSEj_hx+4X!eR$u z3&%%hAJ2RKs_#}R_t3bzu5_tGG!8W2MSKP%)iCTrL@i&0)SQrak$K-vs!dR#w%8E!rf9@>b>LZIn53( zVc>V#h}7P zGF~edJn+I`8GPcw=z(%6IAF%(z#*D(1L~odeeytCW!^Vn6YEqk7=LhB0ZL9>B?LJ> za0`g3Kw$$o+|EjITs=3h601X)ijxn46WDw=94QIw`JGPU7PFLi1vp;`^Z{Jb4wr+w zuLQft7gnZ(Da7G*$)#ZK;70Y{WeVp4ETzs6FbKg}tDJ$_JU4D0j(kL&pr>`5P9-QZ z!~-d?rvP{^PcE%<0fSaRDNeDB3ls*piQAQ8utkCODVIR~LHpp=GH|1u7Vr`Epe$mr z$$_$z4p3V+aERhgtCUV~qjgX@wrsHq4)|*b$>L?eB~CuLKLt2MpK^s5I=96kB~T77 z18gj}L&1wzCBZpy)H$7?xiawVV6;Ij!TWOxKw)Lcu`1^l91B6HlMDt5j7gXqHx^D) zKzBg%q1DjF62qeI}@jB|cKt{8Q6X3*ea}x(* z3k*>W7eWzmAMGkW^ct2W6)(0<48c;lDyRhn2BJq*QkcpcA}BC!H|m3-rP#|Tl8aPg zpgB(o<}Nu;;oK|>hLZy=_#g>IU_vWhA{<-_Wc*7?ei@chULN+gNwG4Yb`?-U-Kaje zwH`?Fj#u&`>Om=hGZ6AYE0RErA(RTNPr78~f?X8Xu z;=NqpEOtUbUit%*S*1Z^ej~w<5U z@y?-7ConqstTosGIR7>~7UTI@hj(H$|04W|aeDrJ??S+X{pJ;8MEmp}Vw^N?vuhFH z)@!cW7+)t`xPo!aKe4tlz=Gv(W@GHISbhwnOLZSsF<{onz0nwdZxU2tw2Hg+4x{*` z#7hoXxAaFL#_g^rmu>`ndnU96}DA|IWZ z7`twl)?xf5X^2)i;BQ~fhGD#t|7!(CTiaJ}FwWU09lIIu_&Ce881=93>cAM2IL>7Y z;Ld;A7GnIkeAY#bK9=7twgSql3uj>bYa~~N(XIIy+6I^t7cvRs^_LH~U>vY);VX=( zMuwghfTy-qM}hEHjQ`l)ufjNCf5v-^h2!-m9s+!Dy}StHkm;^n z7?-^}Kco)u@`~7H82eehX~8&qXKvrafX6)gNHDT4?Ky(+*LZ<$Jz({#n~@klER*cO z=xzMtZ;ZtiGQknRheHQ$z&P~WiF+8Ok)gb!fY%;BT8y#(!bQy(Q&>jU#{f^3DraKs zHF)Ge`1$_(3XFc~dEFQljQ-#N5F9B-L zaM*+~;(h&NjLMaP?k#|STXp4P6x3w4V%#uFpM4qd{-rIc82OXkPGMa7`eLsufGxkp z$6@Si^0o$}Wc!Lw7>~Ny_+ACnJHJnkF*?fYFN{@BZV$Z%_E8x`!PkzN{H+M-j#$=|+2aG3*D<`%A8gNI+Fv5F%x-i!G zP5D~ft6=XzVWVh*7VoaM+ z{tw2}?|+$a8?g7P^BXWu?h|_-gjo z&BGX1nn<+U0dH>a3CHL-Otu|k#(Af=7|%qV7}o)4@^sQVjMK6nbzTr>AQ;~wB0W?m>pC%N4=jPtpw*BH;&`;NH} zXzt&ck8yf?T06#rv$dTc0HW_D3ouSv$G?DaYyY$6U4X9-L{G;!X2Q!_j0J7kYK$E- zEJFSSboo%T8DrL}u`e^=3I|_(qit#SR_|`#n{CiEPM|5%aMjn z7=QDRe1h>x`!n|!fVOj%EypULT$5_6BgkWmXQx)G1r8VLbI_X#Z|N zL+Qn2jPa)NCot|-cI&?d{4#7s3`YM8);lq7ir)7D5+Q z>oL}fbag%hsy~!PU<_IPixT4&>+^3hzScSa%@S6qSdT@p=yvL9DF=$(42jBf*pAB4N1!q{omNlRqg_dxgC0xygJ$<3J{%{@# zwjANt0OSJS{ouDP{BwjWI8eJS+`|U(VIh?b>|+BB&QSWmmNnb~9u@*LgKvBvOZaCE z_1MC<6`a$Ly4r#|Vg>um;Y>@oFTKAXGJ^VSp(cDL8}?hk{mtM?+zx!U4eT+4Uye|x z6kg9&q5>7Pc+nEKH{zylZm+a!13^7~};HT<~EH7Z3dc z#RXn^U=ORh%;4Lcq6YKA4*uai_Hfle;Ijq%!<@(U*~9%YXDy*v!BIP)%@PXcFaEZJ z`*GkGzIz{N7Z<+icJ%?8@L6^g_sjs9JhjP ze0SVuSSDB?8&*JBFG_+;;Tua2-p>L$@lgZV#uB0r|FEoKDaJ(yzG>Ok0eQw!jAdO1 z&efs*v8Zn*T%`rSum)g_!Q~@^&N}?Bn^^w81pi+S{9g|I&u{=IEdPIe{%45#pRHB? zRMTKOe?vVqr`ZK4^_es8JVF)A>K8(I)8!&-gLTW3isT_b&v|Phd=9ISleWE{0t=0| zI=F0UG|BzLe$pI$lzy^k81LsmC#!()VkyVKP_3H{H#q<^j3oJf4YPck}YExGgaDniEPJ7MLHFzWeY z?8HQZk*W#v?UzsV$U1bKfifNYMfPEZFQ^XL&(YkAomm(S>!k@9ytr~lT}``4^RAEU zJYl4vQ1C6e8=l7_ho})*WJFHfv=dw;bsI3WmVsPN>hF#xoQJ;voENYao^hl(R47v? zIKV*b+QNKq>z*?-T}ky<^jf=@H_M^-=ns(| zYU6Cg{fD=oC|0^=Wu5;5FO3M^=VY(p2B9f|oqUj5AVyt4WP`4$HYsI2JdSD2ihngg zBR0~U+6zAzh;W0PAs#n9K?@07BbV_X5W7>BOVQhi{qigP7kW{)}B8TKEdS4@d zE&C;0mE|}q=BHrOvLU#2bG8{%BW$*5kKmOlDEyxRLE1>LYT|8JsZMHowXdNG*4oqe zB3HRi^GjK;X{&~e|HwSyJl!coHpo?!uxY3!{Y5c~)%ty1>Z!3X@TQtf1iRw0pCPQ} zCu9&MqPv_(52=v8rJ!_!^@Oq^S~eTT?Uc-u3Qb1)?-BmA8-#~gi5Mt!_~Eh@FiifkCI{w#Xt5>M=K8wi&?$6> zqrgbFg4k_#wCaV4h97;A@bZFtd*W}WQXuEB?~3WUpewf@wGLrvtPPPUn)8kKzZPu% zsYHZ$`d*|{h&uW=XS>2PDp*q{n&)oW9{jQwsy*_j`Eqe zG5jE#dD+S->TNHL>XGb9RKy-3=mC98B5cHpVguK-QGSneXOMx$vXQH>Wz(gb{8OT+ zc8wgFRvNOEjfiXzO`)vaFjkr(Vr#i#-P%EI@cc75gEV=`%U?2dH})=JM+{~m(qxuh zm zWBdL22$8EuyJ$uc%RdP$RsU=!)xzPzpsd?5aq_zcT3`0(+k*w9*u z=!=Qi5Y7{y67XYr9ymnW=n)=Lr(ZU;-eXZ~Nb46Qq-bkHOO$}Viijvh{G{PicT7t& zMdT2vkTjVlPI`SpTrgp|g-{}S-gG?LKdZv%q)2`x+WBs|9wMqoM1*jjHV%Y%A{#`% zXvaZrN!mqR(BHmSYaz`+J1J5jE!d6NalnfTXz3wVpRzUzix~Ux?g&e5>)9I%n8f*0 zjvn5nf-6jSU%qpt`<}a(GY^hlI*xXnjcad~DX%)QG;&BR0EtL&%LT=bjvbFnnHs^y z>agmHWr_W@a&Qu~4<_v*3QLP4;i2<8Q>}iJJW}I4_Zn#YGU+If`%N}hkOYO;#;bSn z)Pa_Bz(&v&5@SxeXQXif*qh&U&zbw=Bs@h$w1U1D-9v~}h_&*9;o8eDq7Ojwg|?z3 z?4hrsEZYQ;kN@*|AoIj-Q2k}b+&uGYmB$Xwx!E5&e@0cLdO9#7ffH|1D9Y z;^O0`Rv2ka8c`zBU)Tk(G(iQ~M??e@?_+9Ip-?>8vod1fi^4C_thmkHe*tXPCV_-@2CGrrBwIz|BRY*+Lxt)5nWx46`_x5qe zay7&gT_(g6{Tg3=ZzKdubSOgc(BHDBsQ)QG9Rv7XH``uq{05|lmU-fC=uROno3xd* zi%2gWkx(rW__Qw@at5L=s=q9lf7G;zSsJ@R$oNmZL0PuRw^+)DT^BWx1JP8r*`aJ# z2F*iXVM<)crrA*z_R8f0;Vm4ru#pHBo3Dvs;U$l6JHbmsuwQ1`f8XczVJ5uBSrJp3 zur74-ZTU{E|2W_1;2Fw*L*N}YO({0f(F99Gzr6G$!y!!lj~o&^f3EI;vJaw+!`b(B zciLAT8?KYGXzDRvI@AY;NQZNjR$dN0ELn6=72!T5&u9w_O-SfQj}r(tZlizdK{;vL zOL@3NZnHe~-b|Pcpvk}{SQR;}#^6IVla57)Mx-dl9))-{(UeR7%%qC~_Va%HP@?nElqI&2&a)`m9Rl#TL> zURowh>s4%N?`+IxA=mP?4NWlqpu;rUZfM3Sm|qg%YssRyFkGOW6ryF0cvxa*X?2he zm!90GgGlH|9U3+%IWGJ(#03^h`~&om$-wXMt}I%!g}=_r6P|{V1nrQ>Ro(|zS7s8c z0kbreeE+*bm}#M68xk$Q4PEa!o`Hh0%N_@~vX&@?jV6e=8)7$3dh%=*{&cjoe3Pq) z#r7N@*{82YMTmY8Ii&e2*!*_KEp3g<{&xh+H0ny+I7p8U+O6%HV_y8R0OmFxAAJXd z94r7sD<2*1cn`fy$RMj-=xCL2gGBt}Djrz$M}oY{#4|eR`eL?`kc?B@-Qy}EE7%&@ zAeP1O#_9a2FfS71-eQTQPu>iirh~e~cR1cKLd@9vOsugR)agUb>!L3e=P^-M`*8g* zI*rd}Iy|RrRHFlGylQ-FCB$r3y$?-hXhO&Tj5sty7@ERarQM?;TBgN@xI2pTuCZ=g z{I(2^3My9^?=ItfsDIvd0<4n!ud9<_DvII;xfd}XQ~(peO4}B7%nb?d4*zJZi_$;e zUI`B}M{XW>B8|iVVKVEdatKAJOaVh9Y{U@hp0)Z0s)xD3K%~F0XeL@}6wVzin%jHHdxJ4XC$7a`-uwwcGwkYKd=l?)wZVo~d4&!mlmW}r$2 z9@m=>D&e7TVzKEEhp67$Z3C{a`#G?$AG9KmP$-Uw+?n_OA_TJZKyh&77MP--h+p}( z&ae4#UnZg~Hp~iIdRFwK88y>lnA0;s=g{E?_XV6<2NRQ&yCEVkIomQB{#8pX#+-j-~I1HHrN)DrY_g9|V!$P4Bk{JBN zJROtM7C^8dX23pO)D>Rv@RynPO>=*nq8b_FmgjlEQR956{)+9LQssLJ(k!%%qNI0K z#IWk5Tm2kjZY_IQnF`ak;H3J{VQNP4xvGs?@B}^;_ri?nD|;6^O)nFpNBLk@bbQs+ zEo@WfHumkRZ;_5ON@tYA!UgOCetK9+zTJmaFM6!c)DZu#tb}}d#jm3u_xl;aQnvS| z`LwEY2VmfH>|67%3}kzH{`Od;@r!iaNq9&OEnHC@)=!fwB(a4DKW@KBW21;4t9>_d z{&p~W^dXv)x{nsv{XQI&nv- z-kHg_<_0_lmrX|5^uUL7rS-3`q`>*WLA{1VSzW$crNuYU7;|T@9h)Q?i!I$}kmvwO z1Uil(GEe(2$^}^YykGt7`Zov+X`}bRQGNit`TCI=t2Pd=+xg-qya?gwP332Jmjm6) z(m;NG0}H(!>-A+&$dpq#qaPjDbPdU3k$Vx(O&lUUtYO#Qs=2~IyQgqQ>ms1S5e_*b{;O!YP%J;mhKt97w$qcE3i8Z>TXTguUu7 zjC+vbqvIG75mCB4Jlt)?*vDj)VA0Vh<_y4jnqb+-P4x`1O0cZuWy* z3LPG>l84Wpr!lZZ*eDCo+SODsBJs4w0ub#XqhXRBru`CO6m>?d{n6OPhgbQ;x~=v< z_6wry#>V+OhCizXKL_{f+}xL>@!ZV@aYp`#S6UjhsF z)z51$!OQsQ`4nvD<*l-N4;Anx8j?48^*wY-k|wuHym@WW%&qX=6Ji`_nQx4Ja>59* zB3NNf+gbf*=Yap}CwT&YT0vTNy1$V=eF%IC{rOM2jWV#oS1#`x_jqg2&>W@z9te9d zh3u8+NX>_@O!REy?_-wH-eF4bkOxYw)Z!f$HSO=7z}iKcy<2PtFSemWp_~Lq=Sw$U zFg1)KAr?KNXSTeex!vhj;kgEviDN}jY@UFwAft=+g z^=r(*Nf84}se{HJ)q361e+zF)dOIDz4wK9~VDGT%?fHR87eHZYs!3ESc=Pa_{m-c} zk^vfW*!hRj%yM&8$R0yYDwr4|qK|Ygg9?@s+iSx{zt4viM%3Jifbom&2r%Y!_)QWE zw4-k{h#J_ar?I_Mh!ybbZ+nck_NJ#bR&ysVtPz1=lXlT!L%2aw1SD@l#?W+5kL0nF z-u(7Y6tSY=vMz@^PYN2nW7e$r0*g;|_6pZ%#$O~4Kx`Ble_{PkGTc zK0pRN1DcUH!YnRn8YXu*wnpQMJKFaB@UowV9 zxs^@Z3hzCoGZiEgxHoh@bLmfOL+8gy07Go=x}ljf`qQ3h!G-r#kI#W+BjyV`sRYxF zb}ub|S+h~QY0>;|_uN0Mo5^U<=rS4IkR&{b9B7|H21CToQ(8GHPP%*SVaS=&nOia# zAqq=tC8?0eEfuBs`NeHY*aQPrdO%0IlEhKVd`|^AqQ+0G$9u9Ob#6bu-T|xg=m3Te z9f>g``bF~C|D@eM2ZIrMQj&xnWE3#_>tc_efpp=C&*}c*I?p8^o2p?IT!Hawn6#ir zqZE6St~`@)=bnXy@cTVDFl|bwKFF{_wE9CU%t_H>2SNtriAaCJvOJ0m&4>dhF)k$S zTQ~g_m=rpFLnJC;k5>r`5|VgQa8$J0ir}L*nka=3PhtR)2%-ZR$}BsKSsC`^J4AY9 z2Am$llKz@}>|voiEPBSq_%sOd=ys9m526lqa7*0Hztb$RR+2KXWSkN@_v@?E42@YP zLQE@By5h@zt)JOcX8gJihymzKBnc0Q`J!c>Hm3A!;7#^h)3~a|ur876W$E|w59usK zC4Gk9V_7XYbr@DXQb8c`DTEB7dUS)xP@1itIo6h`k&XQ8&%}@in7Zil4Lw9TUokgt z?#wGN@aZ-Rya-c%bgGJEW#s;St>7(X^uUMYHz=*-Hyf5Y>A=8)9tKjeD7uI`-O2c;==YE3~QZMqvZs{W<1O3E@|Dqpc#6ZI4N3TiP$XN5PBL6ETxqe>$cvO zSHm9|p%*R?uSa|($v)E-p2~3gu+pm&%73bvg%`#%L zUzj;Jd2@Eu=z!xOW|_`e6T$A%`WpP_aQkCbBW|fQSx0Kfd22<*@Mn&mKQl{Y#PP4u zC_^(SraMJ5HHHH-re=^uCy>b`E^z@wiD<1PV)Ne_I_z$uie;B~hV0WfAGUM2PWewc zq@|Z06gz4!U`6+fZ8Z$fc&=fuCb2=%m?U#b^Og8YqA4UDK{=`1wO!NY-SFp1=w%$= zpXz1K(1;B+*76aVAKCQ*f(ptIg#|CJ8FR=;leZzALfA{solwD&b@7f_&l(|eAclxU zdN@@zzmik(87CIVR0~Na(Q`MH%(uJWnm;=I|JV&$u!(U<@8#G8N<_wAG}R=hN4Wrh zx18NZ^~R|2#5vhqJw#F;6gPsyrxyIWi=&aKf2(<%>+(3ygT|Ll|J-#B<^qT@Cn3Xs zrte9>Nj%YiGMxWj0ukvxuQKX5r0(&uAGQ`ZChISlH6xvZXH?I($qeU24uk|3JsKn< zDcsBDh2i%f<2*K{mG+PSFuk8Jf)yam4QpUqF}ogG?E?!$M_YsI^bFWz+qw;$aV_d%xVWpXbv^GBw}XuBbpVR)}( z)4a@C`SM-?e>T~?NmpnL5y`6mS8S*W>zi$xY9_wWr$7I!3E(9Tl0d8TOgN0C#y-AN~SVN5}r;wlbT3mPR1$p zRYb5!z=<fiB{rlkEJG$O&CQb%fr00bK<843u#tG4j%ul_zU6Yx&JMZ3pv31JM>7sh@SR>2e+VRs)=J_(h~Cnn2yuv{ zzsLkAooCaG3FzVYe*#W2Y4YF19X$<3vbog2-hRwM%jjk=c<_W8wiDMz3HHOA=VM3j zz4$YzpvTL^_L7M@l0c?Y+$14MbeT>PQfr~e_{&GQPk-t%i1er|v6p3^?dx9t9Ga0P z(`jca#F{nigWt0cRt!Wso6ap$LEy@S<*UD(Zwa=~DjhV%Nn;#H_)RhDmf^ZY-%~~K zU<(z_HTsq<`U?3dI-O4BfMk|v&Qsi&5_>Fm^!X8*wFe}7K)e%CJxt*pbFZnhZ=~&Z z=N{U4zc3O+{b1CiW8Jrw}aBb2lVdqVv6EE`n;Sw@c6b z`}hU3v`r_$E$KFj^P!<`rT%3v*R@tC*8P%M^(gv9txLb)3wCaJ6#?BTn*2OHHvLal zgv#5%A6}rdjznQ;Lqv3$${&i`yHeiN!T^CznUYYSuz`dgbS|bZ>HH>CO#w0vQ%F(0KsTl|(tQqn{dm)5@V37RXW41We6} z9Gr7-K!R;yzufqlFd>Y>qqch%^7}7tb}|teWfMnFMayS<52%jjYiTB|-`jj}gZUI% zCmvbYraA%IN>3F2Kh*tacvaQ*|AEdFLg=ALFQHd4^w2lGLqL=w zLTHLe35ayariUJSQwUW$k)lZ5AkvW_NRg5tAP7Q0kkFES$J*nw_C5Re{9oO7H|IGj ztgN->8gumV9bISP{Pb(}mrA3v=Gjzz@ySnjewkxUpT1vz zRO^yB(&uirJ0#E&pE3bnic$kG0}uSB@1aLd-euQevCFS2Jw8;nL#4?xB9<1LIP3bu zY=iw(IbF?sDzw}vv9JIqNXRMF>%c$DCzr9^9#4{TV(73MZx)r8>ZKKHHLOv2TE~MG z?ES*U@>>UHl-HQv%Kqr{iTX#RN(f`VI^X&_7-Rbmo$q-u{pSCPgY2pM<3`>dR2ml ztPI~)(gvhQxMohslJVw08ERdX*kOF@{exwf^)3oeRY%l+Eo|%aKwN#K!iqdwWcl^_ z>dOTL9dTm!+YMK9-Trj^sY6xT3|ZASPLde9m4p=@3)`W|;I1|HNlM4cevAFm6=J{e zZN5rbutOpPt$!iQtWYyBL^rU$uF#d=aqF_cr!`Z7#@0$P_6wveG{gzioE}ve@&Nik zPlVXwVu@YLca0Kghw`EBvU5c$Sg* z-pM|rZ;Reg_kbvyS{sZ1(u@)a1_lwwj7`Z+Wu+WUz&*O14tP0gmF5K9F~@ zjBj$k-$}d_{bY|dZ@#wV#=XxaMev|$^^Fy!!Fyho&GKEE0f{ScEpFf0(0&=79NX@_ zWJT0D7Tx*oVbW%A2Mdc=-RrrF6}AnYxK8Hp*_Oyd`OZfse^IO7=?0yFmqVic=WH27|(eI%#Lwb!9)26!&Z$u7GZSrey-*G*A9c*9&k+CVBOQ9wF z))f0stb?`7XMdlcxzzlBym|xjk~-IfBr1hGn};{vJGx}Uhg$?^Zc$!Z5i~t%xmdl< zUHJC)eZpy;x_D<)+k5Oz^UaX{Lm(%@}lr<f6PMO(eOd86korieA>u(ht_`PSL-mElYn$^(pfcW`$OmIWI)Ab*mHF*Rrt) ztS9v6qK|HSTdKavzc5K~MT(+?n6s``o%^wU7niWzq`@Dw{I-(#aQY2EB}uQ7|JCmz zm{hs2F)@5{`MIOs$XJvo<3@gBV=;(n3GI2{kfU=y7KD(t((oi|ic7lYiq39df@Sff zv~cKJpZk{{fyT9|K?XTJ11PSN67Uc?*;vP+9U_Y4>oo^~e&&xRP95$7rmlSz+|~Nm@}rm8`VltfU4cL3-&0e@Kv+$3AJ2-}`dz-v zHee5wmA(s)5_%zTnkJ)cz`NpeSGZZjj@5Y=<)f2@r=1c!q7n+Wfj1(fmwg!_Q-2z7 z>m>a>`VAgJh1Qww>U!%}8OX7%>A$j$N^>b?_R8x*(q5pg`K93NJ%CTNz@uZ>Q4K2Qso}j)$my7;}8aF$6P1LP! z5W@M*u}A9#b*e)2ztoU?mjn z3n?enNuL$&t&*@)N}GBK%KNrqc&KqU`=kN)#g#@85k4vR!ck;$`IiM#$Zbm{;Tvrj zN+@UTfcMX&vp*TiBMv@L53t~xx^e`zfAo={y0uZHYRR-_EoID^YBnvSk|BWCh&20v- z)v_)FgsYErV0-T-Zk^W12JL&kwLzbBYnMHE7+`nRdcG@%fBG`3i`Q9uw@`up`@Jo2 z2&}3UKmhEQik`hf)y_U*PAbIKq6(Q+W$JVv{3BLi;woS8{DS8*x=XfB5hr2Wuln8W zcp+@#@Z|&TRu)(K7b}j6I}YehU#WNw3SlG~5Ixmwj#=p*AIe}NvK7kR&EM{1P=SRv z*k!m^SIDKv(yyGY{M0@1HhHUsgAXyjzo&IAB+8t+k+yIHV5a)7cOec-)2g0XyqXSq64lrSgC8 zlEGnWd{LF4oRs7q#%kIkU*xhm;dWsj?uGK!U5(p!2>5Q(Ist7wDELbqZ}Qp){S3dr zQ8-JwLM{Ok1r4R{LFAi@6*|d~D(y`EAEft@7sD#gcq50lk)hTsB*Y6HQ?QhrDTjQ4 zV9<9VDNqA}RYk;pk#B%|nYp0-4_H_zEy{cGu&619-Z>^76d_QyR^jG_TA<>1! zy~j>2ot%4lUl}LZYVHF`6@s5jA?tH#UGJ^^Xz_;-5#)9`|{e9a?MW~m+ zcc}y6Y};;dqPKIhU)_*t>ufWMq`++4MOjY!5^djNQ~7#b{|_IMp!AeuT68Khci|p^ zZlfI3(6M+lo3beK#irom@X4AP#3Rvc9pMUhQ3Ix=q|ap;R6XxEUX@ky%IejH#P-eB z$BW%pjcp@$wS}8yeDdDW#v-t~%S3}f2VgdZq=PDe@|wCbO9~8HEh?q^_RX8U7(s2@ zfxILYXpPX!psk~Ps!gzs$`_vu;6S;TMv>U)U4^sy*+HQuLm|}D4O>=q@wau9r}+B& zrIs7kbV+Zs&B!t*zFp-t9QrN<7V@e%kTQS)xHPC|V3%yhIc?~T*8)gYK7@wIva(G? zod*3Qykf4@uyYXFq5}=}677k;?+U56qiQ+h+%@|`eVNpt?;^-R^z>bkE&3i=?-g^O zOXv;mQhWcuHANZuX#t4sYz8!R_`g0BfJ!MduWE(8_9aK7l#{bF*uA*8zi^cPE8&N}k(0dNrTHn$D1<`3G&FPm-ELR6 z|NB7QO4r21GgUL%9;BxN^-=SDkt^2cv4d9<+ALnvZ`4=pOFEsT-Q8IOJ}}PFn=%H7 zwox(1e);hH(@yy_W%9R+l!Vgwo$AQabVhAkEnGs8^FcfP4YeE;k-Av6R4zJxR8n%P zmhF_c>RvQ}x}=U5eXG{bVB+7LZ#+=C$Ta7m4m`z*C|EW0YzmCcrSRL$wq&r|BZ+QEL+f|hm}!ky(Ke|wKRV^* zd6JRWHlWX;bGgW1jv&WBe)E(A2%3I+i@F2ZT zRVFE=@@#+OqX9@zMoez{!A0+IibWlwj~2I+@+_m{qx0>gUqzFVR7!y6@IVElz=w|6 z=hx5mzDw`&lmP$jc;{e?tE0V|O`~_RSfujf`yL!J)mu~a;i#=U)*O(Q#fR(5Wv*a* zUy-@C)~n&A#-EdmY?G2{_Zr{z$!wxFHF=iD&n#TBWwYewQAD3yF7Ua4YL&6;+!@w; zrHlza^6)F^f6!e{T3v9&ctK367A57ari}vf?t%HP#>tTE@S96Z8^>n@`z;npQJ$xk zGv)J>Tcih4wJ524f}E_0`x0dF8X!1sMAo|HZ!#B)D6-A2COb1v+d56^=rwmd=<9Dz z4$RwqgACH{n7dm!0|OB3U+sK;*lN4d@63C)N}Tk^R?YiV+Dl*nYE)VdA^+R4Wom}G zHg?2g%@W%9rO-)iwpcpT4V}u?1EOY?HUXSg@l;hq93yH`K8&g|>Zl zp}%0xbib5s?ESLpmoj?X^1keRJ(dX1A#hj!rQgZW-5G@vq`soT0EI(}l$sVo!NLIR zCiXhAUPkm5+*w%i*e6@oe=QIe{jSa(xH$0mngWlshN0l{p8C7eFgnS;)VNsU! zYgaFmzF)sScjahgXs9bB?fld)b;DC{LU3q-sY}Y*87s2-V;zUf*0H6M1}g$ZQo)sS z?|v&{uCk1_p_;0hTQ$DL*Zy`oL;nE7ZcrXZVD-z{6ik4M9&A%*UX`5(Wk$Y7rLZZG z63T0h!McMO-W`0Y?3kJExpe z4K?1*A1N~`T*tnfGb@ux$~d)kU8? z#E_Jf(w+zGt7M#(K`cAPmAy;$#Jm8zHQnQigtf>Rzix}*>2<&0C}_x5>L;W0NEJbOWk<{?@}=*B*+Rda z{@G9dwoXUStG^L3a_WH@k}$D!l$;ANWofV!kTneCT{j}jU*9jIyFHGyW7JQZHw!>R zSAz*aVCTntdLx60>)*dx20z;)()@y>%euv@qys8X!;P7ww^Q??x(tK}LN)(m|e?wo8HK_q;Ba`S4Yt4{W6eW4}t=lBI>z=RHFQNvB7-dwo>d%K(}rL?6axoRMyc zzdfr4Z|>JBQ&wWB<0S-(tB-y=Bz$tn$MhHDpA)huNI&cg{gVc}MNN zl>%%ROO3i?Pujb?nG9YEi`NHYzYskhShRfVT`8klpFGL2$BcTtF~E$in=OmDA~X@b zuGRl5NsDQ?(}R%=*sjI=-@TTwg3eDPuk^)JO0)JW#DU+zb4HES7GiQ#U0k zchlJactoKw@YJM73ib~7~gF9(_wDpV=V zc9yV}XzXg^>K4plV{PCl)UxJ-oIU^Obio_z!H3%;uU-(t(R0Q3&jn+lrRQTobL)y` z)8wa77RAt$U{aL=BH0;JXOWcQcp!;|bk1ip#j8BKx#vnr&+5#DA_;>tX0y|y*c2?$ zUyr0s*>)YHCT$y#?A2^7OJvC;EsKK}Ob?aCtKaFX0dy-v|H=P0z1T`kr(fyvAf?_7_fnad~ZKG9FurIN&*;MU`#Pz4+K@8_m+%QGmh+xl40I&bS71%V)5u z0b`RsQm+mziZ3|**Y;;~8ka_+cA90wxc9{E!Rl$Tl|T^(h9FCm7#LqZ8S9{kg^&i9 zM$6#@ROnz)rZuUNf)D9T)@6j&-a7Z=Pc9tjxAM4<7yOGB;u92ZLG^a{#B6)zj0H_B zplxDuj^Djp&WCvz@Tlm-S*=QZJ}{ec)T@`hfgpl)Xf9$ttdtBS>2ooA*ZwjxX5;d% zZ5rA^7T5!X2=3MWa&>FgEVGO)&_obY`Ds+UBH~BsCx?~ly`g=8d38S9gX3~s%%Htf zN*PCB?7S*op1=Bf^}Ylfu;x5fYgPM9in0gg{>4>QQ5ffX<0YpE)=~vCT6xzYN@S|9Ux;;rxw`Dpf zqSwFuyC$}O=!~z>w4uznRoK+lRY6Nm+xrFgvJ8seXq%sZtXP#nPDSs{DwDC^px~Aj zV!ru7WLfPpccChA1=J;u-MF=4)c~7N+Id2rjf5mAf}=b0W)NtHS~x;!_KV7h1_OXJ z5F(&B@n8N^M6w4eU+h=$8PA$aoT3lJ2_!3`90gR6EHP~3Y2H})-q{VSH;*?}- zQfou>Ag=}^SfcQ;j~ec>c?0(wcMka?1EZNha2enM)FWaUs7fEb!2=UI#!L_O>O(vS z=2mDfg=tMx3pDwO@g)HNFQMlVDP*Whfj3AkYCs1N5N6}MhL7J^v8s(ajs5ERmS6mB z3rov~dS40YQeIr}Hz2r3(^HOBj|g+aB~?UtdU?}rIX_#{0TyW8W^B&`GZrmVXU2x# zqF`{9=OcU9y*NdH$r@2>&krFdrDrB6P5q)r6Y+>N5rcJrH&h(VcR?lh2HKEt z7y#=~ug~6-((0_S7M?lfd*wq6BEci+8{EXyzS|pkyOK2Z0XiY#UBbm?0rnIR#%OAT z88(IaDJpvK2JJxb27Z(l;#nbn6ue<+Y>7rSEe0Y84WKn&-@u1Vg*s-0(!-9_9k<&X zr+iyvb0%>eEproKkABE`uN-OvksqAxk>SsU68G0U`ceb7L-a(nip<(;e$Z|c8 zc$*xwtr}Mw8Y;8lVj)CCh`N1vB4cl8*aUhqXH1znrvm+b*xvAzB!MM*jxa}7? z9Zyl!s@Vw5@NJYu`7RjyUG-(bJH3@+6(SmY7?if7*WfQDqSsmglqbm1$QKsHff*M1 zWsNB|!j$AE%fQu#Mb(4FTh6QgM%Qe|ib`fl`vgd|vddaQaAo;n=Rq+X3MAiKyz1;f z&HYhqr8=C59>!N=Jy)pze-|>^<7vE~#L(de{`; z%pS)6=t9PRm+xh?A>!-6{s24UTo3jpRgFmxZU0kB(gm!Uzh+?B?7CGLYjrJ+1f85 zucm@w8ItEBSasihopEyPB{tkf3sLTkYFFprXxF_ z{*-cipf~cZRrBK)l?@za-(^iU4DL{N`Qp_DjB9C|=l#-|&>wq_T=rYuQO@^{cc*#6 zHXJtOQYTR0&ubNi*nu1ot$oTi5QQAX%>`T>#+|{N-4AM%I0J87-#Zt z#Yan6q3LXNlt*AE&T6{#&wtX{sNjNG(pTSTCkbuMruYpiwd#vHo;7M$MBswji3ey+ zFWCW|z6&btNYDV zS@kMiE#3yc5)bybdVci+>?r%*z0I2?qSptaH^3ff2t&I#)&W(i`q12IHR4|x*{Nas zgGN(lej|sRKF*mWX=lxTN8X?Iu%XP^*SWWNU#hVYSZJuQ9|BdFjWmmHrDN`ABM)S; z3y|1KwGKo#2oaL9YQ)}-)osKZI;wGxrq371v8Z>J@5yWI9IS#rAe1J!oYzWz+%L#R zT#FBu7cjY} z9f$k|jx=>Wo&FQo__z2ZZ&m~opdemQ!PK%_dRFCr-_bm|_w7+LJ` zr}kDdMG@}hl0J~6EFQ*%OJabP@ujSf%{$KQy6al=U)Bv3jIehwi%cXlq z%jcgh>AYH2SovnA20?bqJ!Vw7m(B$?#RC~>8(eYo%5Am1EUHj5Y$Z8!L{B$m?5*1! zu1Wi^r#lVCM(N?)QeVbfR+A0ethurIx(rvs?^OgcLZqGp8o-W5H9PktxXoIxxj`HV zeDo5$K@@;KB!R3Ph5L=$L*S!4PoT<^=oYIs|>5S4vYJ%@)s^?)FtiyHJki0TD@}Ky6U9*^oZT0KFmJV8N zLS?jy!Z_%49}sY&XQYf$^DKiYr8M`x=r{Gmb=&yb15DL*MB60HyLhdx!T2Vu%~yD^ zw$$LG-I%W=CRpIA`U$_TC^`emjk;n;`Q=cXgO{H&)rahf@9MUoLprmJLGg99HK#|t=!D})7o$1uHw~{qh zq#SqoHht+O#2);Q?la*&b5(g4FbN%Whnl7YnG|z)mc%WZ4F}tturGFK)n|ac)Xo!d4|pxCa9gGp`6Z-L zR0F*h2$hz{=|FOwzc$+nlJ)2^t>W2GMLo-f*i&CjjS9>Hon4^SwY>xm1A4|?I!BP4 z5#Obhrw|3@N!GxZx_Iz)|LogxK^)bAJqF4wW3+ly$+y=8+8X$CkYt3|FQ8ncxabTB zegE7gY1>iq@-8T^)L^Oy_*Ghuh)!=893ox|6<+SraF;n2C?*i(`dws3Ar$+iNFt0D z?HbKyf}Hd0rNgHql=vr+culOeBeEPTi= zYl$6g!$jM4jRsoQU0IK+E9e?7DK(%Wnb6uNLFp`>R#`AHa4#&XgbMi~ zb-}CvyBR>=1p`n&}hpPQCrXwgyEpSw`Yv8x_^A%#nn zgU?J*d;+>Ac%Y8&VwZLC6mdw`cFx(y@1~8`fC1vwruZ^|>K-o9vZ&p0=y__;+yzHz zc9*-*EIJs&rOJWAA)nlKZtCuu#&Pv!yUJPZqBgph*_jF-#PCD;Z$sw?)UsQhQI$N< zQ`a!O8Sq&={f2BM4@8KR@`T$oicoY@MHG2x&L0J(ZDwNgtPkwQ z1Jk@!m9M?s%IHH{)qNUZSVqt5^-qNxd#sDv6ifhYGiK}bh2DnpcPVR^-Sc++sm6@x zb?wQ>0Q)#E6+Pq&8oGA2?{U{I%-i6h0>AH-dK~Yfk5s3>GvAlRQ-DxO0X~TC)m^5G z3`+z9FbiL?^VoZz@51;ZU#Jw6x#Bs{HX+NtmeHt`JMF(ybS7-0c{du&*h*|Ap_+!k z=vh`sL!j0#`E}d0?af^w+;-jWRyabEzoRyvX9(yi3ef= zIPyZ5!FQ1mxO;!}a>3-N9})VrNqvDbk(g4@I@$(FVHxUdvz2J;y`g1&4;R%N$#05O~(mtj%B>RYhE9j@2deOcaaNIS;jqq8g$2@U@^4HJ?KMK z4z6DlDsIeb4+~_4$^h^oCJ6HCC3`xW4v2voS??5;2ndZG*F5#b_5gbTtyZpaU0EnA zWZE%D4(hZCyc8^~s%5qky@8nPUB10%U=eiO8f`P^L*At+p3ph{`hDd+J(BNAIaN=F z2S7t8Z-u)LGG}h}+s+sncA%dOHO^JtAtKEu(|W`u7(ho1@<0l`p2aWt{rsJ>rv=Ea zJjY%7T{xT^%HbnKj@R;#~utcWNT7TKeVjCzdz=+k2#p-WB;x(dE)Xi)Rjt z>JUcYXsi%mnJ$B+p4|+h5Uv|akAMn4N_{5Yg~p~g zMpsCNnq}aosyM(09k>3G^vsyrjrPZhN2DDZ>=$N~DVX{|=4R2Ar1Hh#8E`7Rp$@tu z?cC__KwFmiW&-2ggj)M>Vd1x~vf ze=xwFxTyvaGEj~|IJFcm+7c1lt6&>vYp;$)ub6e$X5Z?!q(!nuO z>wu?40RVqTOB5(QD6f4ut}5B)1xqne&pl%q|I^$nvlzAO5BbtdY!vUp`=Y|Cy@HSd zMa1w_&BAmw}n7IDxOk~KygFuqmCY?vss;utie)Bu1*(Mx@7RtV+M z0II(DE+mCMZCyO34Y&+LMs>O;MM`R=dWmI3)@uB75ASS0nxj;Gk;LG;nAM{1qAZAx zVpDjR66$I8WoL)l!>DZJ)3Df&r2@sKXi!XE9rB`dbt_3#5&05Apl$SBP$MwM(hegz z*~U(0@jz(kOATG&*2wH-(u`508jvHn7wfP!U8|HV##!>?9zV^m)@Q-80@9eu3iW~Z zVBIgi*icbgTsu7q8fKRuG5)ShMUn*e95Zywpf8Pya=khr!{<~g$^5gzghjRFU=!*f zXzYk4?Oo!g>!#S#Z*=h<_(hEl;Vn)UuVg3XDQcsm)RA`Ns)d_rqKq2(YdIsG+QNTveDhiYNo=IXw!tt4Ed zBXslU@q1)2p?(*evZu`BWT^p1On9-us}JE`?3bd3@NJ-cMyLCzjJNGn;Dz8dm*rr|gcXyMWlTOEk&@R8D%O3B zoDo|8%Ec1G!)51n7FJd$75jx5&1KwE(ix*zI>*@Sb5EC=62GQXonnGIjrc0-G&x}B ztGaFcWkg(u&(8+f4FXsPP&=yhcpzAWj_q^BOY5+I(&2bxLjG;|*KvE&{r?ej<*0<( zM8q z9NRs}JHA*mR*JFUff43i9(fXgRF61F?rGP*rQ7f$ue!`NC##=W&9);@qA*|6f(nj$ye9^^$j4j@cB)`gtSHJoOH>0gF(#+DG?@c{pRjrhx!akh#ris7p z9?XsHcS7puI-3AYC%X*yYTIXo>O(476cRLv0J5?5trM$6nWEWLZ@>VUZ0;&D?^Fdj zMdz;q)q9EIP%&3)?o{p#3w+r(#m|`ShuRkL!b%igg#!a`XeN+V$JMDj@iRZO@%1!0 z1DJjlNB*?EpUe3w+45B!>P0c0y}nl(_nae|N2ilZO5PWxZr2|7e`a-qEzUe)+%>s0 zG2^-#g0Hi*XplYqefQa>^M@FdzCe~bg^lY-(}20@jWcBD(~ksvt3v^3a!@|RR-&;9 zm(;lh_kdbfu$N=~rBzS8C(rZA2V1-nqBzzsdYwZ~Y^~+E{4pnD2@)pO@*;lA39o$t|{X)m5Ikt<(}AjZs8rX1Y4}LEV!gGkz;S@pMlN${Jf@fovi-mZoNMm4%lO)LY5Gv+2swfl0CUg*u&?*!OJ zjiFIwkKrPE+E5YSZCil^KkeafUb)V)QRQ+Nmtx$R$ODK?J#*81#Oprs4$#gEcu;Pxa;*m^UUpyG5&I)fEBhh$COxeMizf<#sK!o5f( zeI+!Cq~AIGLphZtwBM;kq4!RnonF~t;~bpFujTA0V*X41%@6zxs**@bU1Cfdaf+fo z)YUhD=Gl}BE5gMUa>ewj(;=e?J-uz;Ha~+F)yjw~tis;DPp3};RQxHAKt7R1|5e*fp zH+UfKT*!l_nMCt4QXIVxG(dR#VeoWX#?H7cib5ivN{yfh` zA8y|8@d9Z-*2-hV`pqFCx8(HB*J&&#j=L^Y+P7YO_eK|r2FaA1X)iiO3ASe6gnClQ zP_!SsQKsG8xGvs+Zd#S<1x4wu{l2}Z8NSP&lH<9=lpI`rfG#>h%cV``C&%rcRK{*h zrG)_dRUx>mOmMPKJyJ!)+zNz9$AUP^{P^$(fm2)K)iM1BdY zjDOOz3xLe_uKbx`vEX@Xqo6Zkn+b#B=E`Z+(|_-@-Pp4U08{q(qCy4P8_mGL8!8U2 zhi2dvIe;Yog6oc?BaWZXDIg#<0gj2?%>%J1QyX3WSvtE)x{owAMi~GgJ8GFI8(XQW ziornG4{hN_nL~M>VLfJimiOih+b9G9Pzyy#fwj?vQjPLb`{*eZlkKnCT=ZQ=yI-p)?)x#3{G){aa4v6Dh_W zRaNkKqum0TRhT$Z88m&N3#){p$`GAEuFPYK!(Uy`1QQ0lZ-(h zst}pGmd3C!jV5aG3R?)-w z>O>xApLcbh$w>~oJ}1UWsVa@n5MU1UlQaB8cUN#<8-))5$m1_+@k7qYIAV+?dU33FkT*~snE zq{nC#fSUR0w|ggEon{y{Nyw_f7BBp+nanz4gqA%5QqwGCmUPw_eFDs`0!Ri5Uwc-8 zPC3^teSeWLbTVkSFdf%CFyq*zHH#UiX0d2yqyD8P!0zAErb;HEkaM6=rC)el?G5d0P&p*CESlr0CuO!bhN}oeWT(*n#AXf_Rx1Kz;*RRv+7;le`#qK$ML; z2k=g%5?e|4j>bgJ9*w4mO$(njP5S!D65A&P>S!>Qp&qP__*amGCv3OdS)H8dsO{n$ zH-x#NX<2b!I2GCt)_TT|}h-gT^p)gDw}k{$~D`w$jfYC!{GIQ?1^TdgAfx z;=yXD@wMBW^aK{XF9mnu1K`emlXG0HIAhfKGLnh*e$YoG{52niX+xHotf8tB|BRH* zo7mgMWXzwsBGh*oucnvq91uMyPr_X%l;Hyqn_qg>?M)fuX%?Lkaj)p#WB&BcD8w^A zRHE?UOoo1DQdP<}j7sEPj7rp)1T7k-?l%WxXy*x|Ejh-3{d)21>C)mK{yHavoDM`- zfxn^Dpf?8V(5Kq&&>42{<|@_naCVt%rU>K`57IdY*^U_iHTpV`FNSWkkAHI`*kIbA zp~8Nswqs%Gkk>=ooV6QX+$g0f&5x5!{o>V~l~Q+59fiY*{Zh)?Q^Qn8IRlR0m;NGV z2I;8-QNv~p+9ZcR=?NknSEJKOo+>7g_Q)%rwwoaDXYP{vz0i=fn4Z2xt21$(y5At) z$g_b<(RdXN0JG7(1E@t^EW2!J9kgVOW*rG0i4ZA{)7q!=Zpd#i=1(tS9l(o{7o}TR z6AR9hTgzXRtfS6t*ReacB|_WiF+6(7nWM$eQr}IQT07{em;l9vkhs&XKRSiTRA{Wn zGB|I_7n8>d z@IbAb1A+ozz+JeGeXo>gEWx9WR?(0TspKxKgKnkk>nk5dN;0c!{IEnpi|L?Gx=$5? zz%Z;!^Ybph*EYEBfJSG+kD*blkSQKIxCG!G(|>AQJ^fNft5n}{ z^o}@YI=LpU{MW~2z#@i2$6Aqf#C|Czk47Huq77ba*|d|;u!NVA`fNaGdAnM{SjLUv zYV>R$?4 zqZJdqk;ng2fi&BNU7g4SKuyOa(N+yLunrG5&9lzLWA>u>rZPd!8RoskK^bxstCYc0Jg3X}p3#8I=KFH5c!YB)6*>}qHS3pukDq-!WwC0#&Of{mq?^ z{Wf5Z-Eqi%5!u2J%AL59p?wE;ma;F@AVaN~v-m2zGs!?xPEhUJ@RWr))7C!7i)Gq< z@l%U!HuwLanV@Mk5W;A}muicc^bTx`tV860EiyqQ^w+CtW2Bg;tfzcvjD9LpkxN;#ip09IzGgU-#03!dG5gH%P7v6N7xp&=BPI2cq*w!Wx1z?3>eh)n_U zQ8sn>4hd;=;39VszF9{(3tB?&Vwa%?$RkC4qO)>+KhPR<$LV&Ou4Q&6o5D%-dgwXj zzQBuX?riZMU8*B4cozr9t9meVUY!x;$|d446$kuP(i2D}|590w+|qEV-~pN6rl)d~ zEMiIo5E1~y+7=IR67J3Yebp7kz0e#*(=xIS=-ay$|4Dj1YVqss0W!LN+J6_M+gq89 z#vU#)B)~f1v6u`Q^7OVkp!RxtwS7rPcL1}izqzqB z4@@73V8MXak;jr5O&P=RyruNUxxBFVmaA#U7|#A)jEgl;@!`qgG%W- z$yehW(D&b|C2VG6QWSis-v#c0je^;1(0t{zVlpX8O&d<3DhIo}``FH#&%E!NQ~O%B zQudL@3=BrhaSs%!24ioH_}X6}NA!c~5!ILg7=UF&*I(Wxt3l}@u)2q+G!Alwh8T3y{aax1e&r~iG5?JS{1pH?jT_HKYd>0$NsC}*@d9HsBFQQcaHV4?cu zOr^pSA`Tc1ML)C4+?6kf%Q}-mo98hcxFYx)zx=)HZID5k<8PpCRO!KoRgWjk9%V<} zoV*OP^GaY_>cDUuHlz3y#_GDY|DM3Muns5(1&P9JA)gO$*Y$R2D3XTR1Z*YV7sv?3 z9)>+E)G?3DM^wryqRQEQ)Y*$tTGY*EpbpHYKz5WKYME|fT4a=oaimpMIwuS%QdDZC zdhkM@=EgcGLvN-_6GFlBs7i%JQhIr?=tLbUiz$oJAPuDN#&7Gc#K|!)9_4`jLSvI^ zR1Lr!3ocQ84>~?>av8fP0o(&{Pe#{khX!Ikd7!(*9oxc!rsXc!QR(Wu)Ar>gIq1nX zb3zucp$BHC*(WxI@h93TM0CRe(BV(|)L$xnQ?LDQ=C#EUJ$wf!dz_DJuRe`gCgQ!F15i?trm0_m^g4W)rT-3 z`Clw7O(}rAlpWz-R;b#>S5ol4)GkM90}Kz;O+g>>cQ~A!V~nlcAY?=%-8YML2fw=n0*v!Ev}el^^hOUHm`eI-f{r-D{Ywf6{YnGW?2KC)-XIy9_EC^%@040nX1 z6wrg~2yeo@^wjwf3ei(H)%F4Yy}og?zkxS2cA(`0rAK2A?5KN#>xd#!RS7_aO~FX1 z(s8}tX0*)sf2!|7D%oX)H(@y7D4lnM=z*q%=Q)pbf0L#^$RU<`#8%a5*9&ixqo^_^ zShIxnfdo`ob0#&Ytt5+t=b)Mm`GSVT%O7>hA)|lsvGFR=*rV@NYA010e#mP8Cy#v;AEMWrFsMW?k zt5D#%9h+0BVN(zXl@we@a`+HR;jyIm5maX-Add82!$e2a|42c6|#&PNlP=xff8DEB`bmhqt?NmbV_D*8}IFYqqyX2e!ToqgXrdx!l}LNN-EyO{3)K!10?p9I~HeCb_q zFDU{v0RG{|5fPsX5>(x9(6j)slu)oJuD)&xZG`xu+@*Rdu79tadzWtmGnkilEfP(3~0U1qeLIx7&0M5iVnF*iUJ_rCa}k!TzBD&a%?Lm!)B z*T@vlj;cI!t?10U#=f-uQa+JXUmB{%kHEr*x(tBPWQ0NO5LWno5L8`|@d`(S8v4mh zlYts6gBpi&FN=@7J=~h{ukW(I>tL}`b;MSF5-sU`!+t3elm`-IL3xe!a2>(7adenw z@VN`d#v@WBD3s6jv{&RLX@HrU{EbvR)_wL|3iEt2yiwqbzpNy@f>HQnJR(icf;q#T zV=G&h875PDd}#>J>+w(^gb1=AFQZYroq7|I*~ER)qQ=kOm`I&=-UUbD10UHDDm^4+?A(Y$ zf|j5OR^3z(lZ2d107RBM6@D)5cJQH6-fmCS+67yw0_%IM+}=xTUd^;oR_J+jFAvnp z2;W6koyGe+5Z?xlvU7!UfK`AE+(ff!?T<_#o5EJ=U91qyGT`fvQ5c@nE?WmUpr^{6JU`hm(i9WRq4*R;XYv4x@t_ zz#^6BaUIvKdYGKY7`5h{8^bdAE?`^gg(r2G`KJJQc_3_~m5KkC2|&zw7qYD1Wna=$ z7Ky*K=IVOUZ&!khyVlw$cTtW#abv!8E;3Y7<6`Vmye|UFJ!jMg%Tq^3M^zNogCkMpPJ&;0Qff4Gc?bY^tMlt&!y#F zn;g^?0d$DJ0i+Mz%W+JbNr8LO*leW_K%Y;BhA0Q!WwsJCs+;1=*nBem4@!C7 zg>S>5Qe1kpy=iF)B%YOD{YqM@JZDbwK)wt3Ab0?seCA6Hj8wVJr{u&Q$2IqMISj#v zyf7OuRsfDlc}xJzh9V+%P~B?}m+jGPpkS6*yi$XjD}(|-qg6)kg1it4{HQ8DGyn{s z--RneEr2Sgnl?b9q;wSG3|1Ar!Q!7}-d!P&oe6}7Yziq;eHYkbPBQm7fbnU>oZ9vM z3^oNmRHPBS!2@+xCd+`lhyyA`s}%t6pa!-Q8v0Ci-Msl=K^fLF%G13Av(Zs=XU=44 zN^ylw-k4hsQq%mr58&IO3;-;FOZr``kWJx%e3z0Jt4I8$ml(_np?uhe2l8D$N{_o( zJa-{_W54;$57+rA038VkDco&)tF=t+YvM4En$p>P85=RnA(TLuc4}IXdECax|F2kM=t95gh0bEeO z%Wr)7?g)~%H{*kwLh$qQQDmrz_%@{-?R8Av6-B=P`?;8GwNDQ=blW3!d& z_xduMUUIf=H#jlSFn*UNBA;b|Jz(*Q7v){dz6Y`bd9|?XOGC)ZP=Fm@y!gl8KHEx% zr9wmQf<=|QKuIa=`hcJu>gka^fZ4RTK%vm7=RkrZ0xP0y1Db_Ps-rk1f_Fg;6<8o) zFx$q>FNYqJb{r3g)*dOSWjMH36L;V$p&_*Z+F6yc5k1<)S;ogrXUG}67^>u-Ev50vW|`=ndSqKvr(om4}CA4Z~){~13(QnV|VD*2h!#QR)h>p%a^S-juhNOxM!-GJS4u?*@&THXU;(s=Nnd2@T&MuUC4FUoL4 zQkvj`Z3ve%bq^LRv{3&Ar~U1bXJ8K~!xg&RY>TvgR;*W0!2b%7rPhYFS$epBw^PRG z3OTxi25BEmAmw0U2ax+fvNR6>z<@N1>R!4DNL5ksp&ZPpdaW*jBhu^~NGCwo(2#<) zQiJRP@8W@)$0m!#kqH2kwA%`w4WOo;!U80WGz*m1xRL}Hx|bpsgaVhMLz^o6bn@n9 z8$3x&1Y`wUdFkEHg3qEafW^bux(sK}Zkck+;q6)r;FEz{XkCwDD+zxhUk$P-WKiYQ z8V9?~Rsu4Fd$kHqVY*+WOfdm^7vE)PVqD2@1&2EJm@CLW zRZXK6y+un`_Jmu{l2Mnct`%71+H>^xrGB)kQ|;0MBMDD!ZqP?k(8@Y`<`6#)g(QKm z3#T-^Y;NAG(o0aUm$Z*^UAw6i27*%*eQAJ9cNzBLNJiN)Z4_1<`O|yJs|4Jm!@0G* z#=;cVr>h|Otw9i8ufnjyPW}6_%)IfOs6eT|M4JU)1=wfL=vIPf(MRsB*H)(6qII=1 z1tBW1#uEMi$1VCTq#8=)4<9IPIpKZk7BnnO9Ti$Lbt}tkZ7c2Ax(UuJGmFJ*S6+_) z*Da3U^NbV_w{8LpQ-)HX77T^LS(V7BMBRjlm?2+D^Gd*-dJSdb>C8bN~C3D6{95q)HFE%H-MahyEse zsJA#OeLwjdKck-?wJoaJXU6&Cp4}4#XD>*~bjDmc(Lw^bkmN$*K!(0tKT?L`PYn$F zOB&OPS`KE?nZ){EOC7h`5Q+NUZOoBQ&h`B(>iSw^QrBFcDdX`9tglty@RohcuFLf1 z*jMSterTK@b)DBo1`g$Hbuym`O@Hv0y)q&(d$YQMCVs`U0+Qv4>eNdjJhK}7k*ttI{cQ0OHdzrtG0{_b=1B&rIEZiW2fH! zW>}RUN9B{Cx82gCa*pkW2pQzs`To93(pcDeWVW}`Us?V6f7wjf&VZ)ng*>5Un#p|P zZfBr|^NkNg zuaJSRtEUwxArr_-ocTo7S|Rb=Yd>>iOcU9PxI2gDw>8caabL=GmWX~e%g9)YeADE|Jkn9n@uz5+NHDKZSXY_UI{)6bK;vw9rorDf z!^9;FjS#*m{;Gqpoqw*=GN?D{3xDe{t&H!dUmswi#(iUr2CE-@I=ggckF6n1C3&y; zt(CV7FZe1_LhU0<`pa6ZeqH1Ia>|xU0j9NM{qVvz^DB>ao^mr)n78!I-tyo+&*Jt= zM$EG?vwiM@R{_RqY|CaG-wf>}yFV+bRW(2JwCV&Ig$l)jPT$QUU8WiLzYUP(&svd5 zW>Ec=;lsT4zAWuCs=S}syS{~ph{I~aG^SKshuSi&U#0TpsTWtCuzGLPg9ud|#$%Hp3*n37=kHtk01y#Uxgm zl(Uh1ex9#Zjx^48xlc&5(bE$5vI>;!{@<4i8q>N?y~pWHe9Zc5@`owEmlX|k{MQkM zrJv`kGBf0_tfnEEEwnSdl*CiIFFQvje45^b?--mQC)i)_+VzMG4E=D)84;l_tz$db zpO5S}uKMjhn=Mr;x#if=F;|769!_Ro^5#v+?r-9H3>!1gX3M4LuTRKiQ%s2*S0wPB zOex#lezVNyRz2oA*eNil9Ps^N;V2mkw!GB+AX{GAwq7l=A5rdbl4NH#whI&0H`ed; zJ~?VcMJ#62(OmM&f1JG{6kB;`qLfqq8Fadf*q;#}{@UMWORK>{CS5C!sfdN$?l!lY zah$)nt){IllWvutDB3jVum5!pFe8^cbprcRqs={SxX zv}jZ(`xdoguDaosWM7{gEG8NvcG9h01;wx(zPUwU(Ia+>Ae%kQc0?PenNnGfa%z69 zz{fca6#M1mC}|){YH_-dC?#tZGEBDk962{RGJC6Ca#qgDve`sI*7@j34;lMV?az(E zW2!E$&Izy{tWx>wqXI9)e#Au_A1y>aH#XH4vB=t4$A;PJ!Z|Y8h&p(dzRX3zu6CR* zBR3+h_yI6iFShuzuk6o9^>wcKg;YmdhhOO}+EPtY!p~V`0^6m} z1`ibTsSKk^=~bU0t);I}eVFaSeiK{br?(VY^a&2=jsXLHIay`E-28J}_G*pWb6U8qu09+NMtAWErQ zkO=tQYF1bkrS$V8-38x$(0w<;S zEUtuQr9{MZ_w&SUeJc#*;pDI%D$Wpx=ECt=#YIDXS5f*V<5Cx|6N_p!KMVMz?WYw* zs)tU$ze46YXWjdwOhK!1&riNZ?Taedxb5jelEmVA1Ucfz(+7m2y;g=zk~6{ z(XjW1xI9kkdk;1g6>VJc+1Q*i4LifS7V=x4^t~lUS`D8{rQQ;m zd~;}`9KyaZg8*rRqawHa+3F(X`D6+0oZbF>T}nPO+m)97w!FCZ&K2iq#i=iMrZd4= zCtZ<5Tb-b--TaJy!KGh{DfifYvuHvsv32NV{g!@fJBk%kSHU&>X8TF3l0}92E{s zOO=KF5?EG-F?&AWQMhkIY4-iMOwNX)fvo;&<19PAp-e#LcztSKHx`Tf7aI1i3EGtLjg7gsr=v`BSm=b}T! zzIb#pY^e)VhVf;7b$irSTAZHOMEaN8^IWF0ms~km+Lb(d47)!x;geay*19m%#U3HO z?U0O|lPS&LbiOobeu%Bc&&JNlCj*A_4trl5MRiA2Ud)0DgG-9Zk$DY)=H$_|D z6VGn>i6Ac=zrU01!6q#(budVFS4Jer@PI`NE(>!OF7?f3V+v2&-Z!Ih%ovnkMC^}2 zJ^vMWr6+!gY`?#Sn6%HDpO86ap-pOt58}}c(&*!1{)iO^_Xxu%#k!U6Hank*oUtk- z+NPMw3$C?tvO0>+$Kg-KYr9%-Mln%cs$fff^XPjS+4(GoHI1!ZhbK{@Q{O!9p3a0t zlp5UJR!XYJxW$;}S53O`H6~q|0VZAE>L#67ZqahqVQlihNA4$S(br$QQ`~O(e-HNu zsfp(klW+7$d%Yv^?c2oU6K;3SgQ>St4!%w&i|73)%Zs*&ZQ)$CA)jP zO+I`g+U*|k*!}8Ok!1I+H241JDKCHfeAnFlscv_4;^8swNAFg;&!>F%F74i)!)b>P zA4pC4?x*BL_v^Rg+;3JTy3^c$AAXjc{5CozIyoiHE&qycmY6*EM|rdR;Gr?@C+~KA z`c8i9+4IyBX{ql2cDUV#k{{PkbB}OeshyHCYFsvVO7!#e=eftc{p-Ga#FfO<5s8Nny6-2~9h@BPJ}h6J7(L>$d$2n? zE#=MOWFg9P`I~5WqI*Q5JN2I1o$P+?KK$DKwLB@!J?4J$Yxn+?5qEE<%3^oOZ@I6_ zOWwKPrpW8hKN_TH$uzkoBg%tKaGIUiXf1X(>0OU*2}Vc`fh1 zKPLMAP50Zx)VH!*LaoE@MA@}>^4spWZugsmLJIfw6RGlc_u=blsTUI6_aBdtWq#|f zF}~OScemVWiK)qH58ggXNp`12%Pl{?PCF#q^lw^fw0oS}qLzD1%Hg+%qvb(~^83-L z-N(qU$;+Zs1dN-rxKTgOW56f*Y zQ^N1OTv>lhK-!V&7%+rGo7u@(}lWTBzp$3`99w?QgZ6;Ij;*=~$X8VnGx9Kw{cx=Wm z!<%ovcKmJ44DR~R#yq&BaYus zyAz%Ihdc4D`+TDNpxfOe`F`^K)E95v(fi&WcDoOzUbpCzd^kn8Vwe2?b@yAz!l7=r z`@TFxo|x!P6hg=rr9`{mxTEDcDQT}|=Y(?dll*p!_22RfH$8uLCytS=(f^D-D32CW z%Dz|+aJ%aZC(4gp{`H32T9WmX;vN(2K0MBC?VntKNhj8UBsc7Qcpe4ZXwqtl4Bj~UPPvg4UpVb)|fo) zv*wqB5aP3kM&%gW)RCpwy3^&8nSD6pA-0Rt&Qg7?YFu1g^8kni1^WI9y% zcw(EGnO2|4{-N|92{pz{3Y(B6bdqUq%)6GKnOZo-(bV%Dz@Fg2Y89INlObJdf;SBPVrK@F$6TKX67mt%MOKIR{B4NcNF zPbGLBmZ53J4<_dJ%j}S0R#AP$9S9r{I5(5^6#1!8u}&d}^&if87U}Ma?JqC>u8CV} zMRQ`+jl&dnmMMDph%8f*Qu2#6rpGv!SpQ{At@4Spa+|FBhi(m%^2aZD=*${9 zTYuCq)R??*t7C` zRqUBp*~VrtW$I5UAZ#W-5i=YeJ*pqJhl4HAgdAx5`gr&wmK~Ei_$Hx7&VUA>GqU!oWGzIbE+878cHLQ7a-K ztcU(p#?u*XDt8FJExE0+QdyRD?v~4g7ym1+ajf;nn6TD)eqS=~%#%K`vbr5l+a(3N zCWrc8&@Wn7RkH56^noVMFRZJCNLey8%NiLJ`&X>Rq!x$p$ zW9tlK7O$B;M<%lVpue+40d*nk9Ve+^MgVKgJ!_RS%F~3Trqb z(qY|MCtGCx)7Ia++QiCE^$Q+e;?1NYQazQ_R+RjvF)wwIktM<eUE2_cV)+LT`v zJ|9%xIA=B;XZh(nQc+`Wi4+$W!5N^d zx+R<=KcVsop&~dH0^5n=6b66$SY3!7cS5MWaDXuO_nxgcuD;gY!GZZF%TNo` z(S&!-5hLpB+niMzb{6khzWuEHy$s%;60>%pyv*~iq7x-AXM~gc6|G>YTXSAID1+hy zf)_+Z94#3>|FQg{D95mnejyKv%Vpqkip*Rj6fSdlrB{4mZ&!goqN>wd@4345-}-(L+ll09Wc zy;fhqe+s8E5UC-$jR~^k(6b$KDosyWUu32PSWi`5!XA%A23Pztf!4M^CUyQJM$;j zAN>82ok1Z7V|Qe3-Ow@<)=y~7O*c6yCIX)_nz!GHM6Czqh=X1+DMr|epXv69@$c)Tz44t@3gw9WRmvNHybYn{7sPjQ3 zXFk_Q0VY8{Fsz-UsQj&Cof9gE5-_jRr;}sU95Go>n$G3_n!UeSW=Bwb=+mOZnutlB zU)1%zE>+4gfqw^tWjfS&@4t7#vsn`S;l#YIMUE=|;wpq&Ok@f;J^L$q-TITWYfL6r zP{IU0-zn`H){iUujo>=+-kc4CCq#Sx##9W<=pWKRlCPGOSwB@LSC)YGd8L4)UM^Xx zC=lx>HZ*2bSXIw|%F}N(6w7Y?91l2lW{aq=_saIS{#e`khtRTcsP(PzVnZ(-8`&k zPY>=i2i?PH)pV!L{H=z(*5QHVwh<4zxEq{SHpM$U87=)fCWTP8neq?EA6KgFL@mBO zf2eLD4RKiyc>B7u)l;SaaKs*j)9i1XovpdrKvb{2OaC^mRd7VTo{Q*pv(6VgolS!8 za{t%{&n~;3W8S=dR7^v!qrFsIo7-wzZT(>TOHtZyoag)A|5Ok74bj`wv)_8!*z}&4 zn2cppe)GkRy*Arz*$_G%ni=S^`?|=Oaqe(#*AXS=j>&3S(zbiZE$ia8x^tbnx>xt9 zd~bYZ&*W=Omh;|tU0M05suNyzy?K09h5mb?->Cc8-SYd3Q?k28tJ>47(GQfbB3o$t zkL1v`Q7yiS?7cbasHaq=(?&Z#G&~e-YIgTNv#9^E$TG$px$mDI_Y$s8ERMV0Wa#Ns zlU<=MtzGQYxb{h=g&uw7Meo=-T^*)rkxE@&Q{$`pp{JJRZF^?xc9l3RF3P=}&DVb^ z()In8-N{Q`#wVP!q*c@GY&UxsyNP_Na73u5om=6($~~R0oIR=CmmCe{J-S%4dUQN< zJ!LG-wTrrE!45Rss=g;T*;_o%*fQ4E7k^Np=LToK-BfxcD?}!#u#PL$VE0g;QD538 zyiMk7drNh6ybT{UB_5cp=0&@iXIJsXhtA!gjyuy(V=h(qVQi!D?ecEeX|EGU7iH5E zc1L~2+Nqvxi_FRj_W(aq7m^8mQs_>vjhm+9O*JlTqi6H*dt>X)z25F9^t^6Ac2yhf zt!tN#s3OIGPEo(eG}CIp!VGuN8Rh?I$cuKcxb5q9-ONjMFIRZbX5x@76H@G`f`4sV zH+!WtS8ney*i5!b)e>F0{%X^OM^x=e?rJ~AcJgxvJ|TW``@ zndWu7t}|Yx(HWM$+aI?(t&Ur+RMol%bmr!jr6yeT;!DhIH&JGgb6ok=^J>}~>kn!L z-5b;+7q2qdvuQ}o*{Z3X-Y#KJXFVOTEEXU1<2UMX<*>6Oppck$;9mO~-*JMfBeBhCyVKn4=)`!EYbPZ7cH2FftPaMnN~LnlVq1J0r}wtR z4Qune*qOFHY@8)d<y>zF=KSb-phW>yXLYU`8xNZ z6yx;E>8NrhdR=n9TX(tj&b2DtdQP7m*^aJBf7z1gjQk;OdfEIL`q5E(^SYmm+kT-A z$M3d>o6oc^jDK3%U%wxgz22^S^_qQejHuNUeH)&OYaex6B#&+Oy=01%;)m)E>2K6` zT3}54dy6|osl{v;T{}^K95rPA6^1PNLN9XZjE36mF`4#w{daEE+eo&opKb0_W?1gO zvp$mb&31c!^K(pUb3%iTVzk=BzX(b9e66`^59`rlOC`fhS1T^oZRH+BggCJlh>`COB?J`d$;%9(IRKx-AxzyzG6$r$%o|exjc-I=}uyskwP+k!o&@ z8U}92`$Ht1hsIwJT$LED_hD>sx(M@jJG9SUUC!~)n%pV%-5c(cb<5_q*Pip8_1Jau zLhYz?RH{*y4W-rhvMZG7>4kznx}j26w9c0eb3ebV;UT-J)!yuJ_UvB}*^hA^eRHX8 z54%elpL^kmeSV@Z`Ge>SR5U0HHEC{>o)u`BP^(akJzi(Heo5nO7lr-u-j z-1xirQv(anHvf7mRWt2z?fA9ro~T}O>9%(I|3yt>n;){f>!R?5>O%*<*R^0%r60dr z@~S4Py_BA)-?Xx!L0RR%%En25>!guT>-?NuspC`z%{ODu8T(p%_GbY%k@>yn>5{$M z=T`noCvERLv28b9(3doPQk+Y;&esc8kvsi5&!)K7Yz7Xwg{)mu4{1BBi8rCx#^-jd zFy?6NqifRQ-RX(55?dx@6h|#rGRod{+rtyib?2BdI_&v7;%1xOOCKCRFEY)T{LWX^ z{`F2}qfnxH50pXe9qt$XEbekmOBOLP0i{%V^-VA`A^xu z^OBAKEtMLV*bKb9vue|!1V`)#l6L3*pvFRs-FE&iyQnJlkutiXr#XAwI$!!?LW1oY zXWPSnT&8?gf1_QcT6eejt%+Y`+x47j3yq$Qn%jKiE7I#)KN}ZH@9gdI=0%e8+V=3C z7-c*g61_(ge{K)k^VMO z#(rfptX7y1if*WD9;^1SvuK%nQz&k;+Z3BG^#uGK@5?rcXG5*C)(#G7S!;7tB%DTG8^i#Y`&fj`pgmHKDYqhH4`d;d<_V9`}8+E03HCJXophxze-CAj6 zl(SehiTYH#1@(rxw^9x4dd#+m_bqkX!_DH_nK-rgQ!7p=BQ483@8?7G-_fMH;0|}Z z`#ow8+fe_Y_Y$>goME;euR_7LcgUtDNgl!QNX%GKl zP5+i{LLYcOZG6^U&;D^#$b=GFO{%a3quHh{M{icXEk3(|ujqayzB$eo1t#=dl20uY zZM*QkxFxL{rUX7UD%H2gd>lPT+fis#d$?D+ejYJiw`1+uw*8XrvpL5Xl^1`jx6WRG4YB#7GO9P~Jak-A5h>m>l77$(H#98M z`Aybuz?p&S2|aA?%WwHx_fFTk{?6OmrRcJ>K|LutDaN1O9BTB~_He3tjc3~(HKy*1 zx%i^klfPb$L#9%hTAPT%<1Ic<~2<{I`vpP_SW=Yw1@43_hH_wtv|Pi z?Yc>CxRs~rX?tShylU_}J8NxGpw6hfm5eS%|800)u3b>UiQD?Z_L%zW1&vMa_)jLu zyt`qPI{V`0o9EVa4!vwM+3tjEF1p@K_a<&F$Q_f|vw3A^(lssB9=@Yb+BHc!iWPB{ z?%L|iH5zr>!>aVnb3RSgj(o~9zs=t+I)7vP&jjMcxfg8H&|QP3yC-*=%_06=y$O^& zO)Vn*p4{^L{qO2^i89+B{&9^;s!&}dx7+rx9&b10H7$LrppOd84!7-YQPtGK>7`z< z9AlnIep@ZE81wDs#1*mKyDeG0DC#P`fi%_Qo^Cgl`LT&x8XIff~EW z52MGWyNfz=eRrs5|-Kl+@=FmkSmVP(9&Qo!P9-k-o-MZFpzTv9+{(5Y( zBpjdMY~Ge{(;f2J83|1jO|)$fS9^W6tvtG4gwlO=?L6N{pZ1J?{f4xadC?{&YSzH#HLGa~@kd-Wot<5Nxk!@OthR^8xNMygn?>bH8AZhdp$ zXKD{Oc>2V*yC})<(Ghq22_Z6-FT;-81`L&~O(pNVRx5;?S`|DPkkRRLJZO09^ zU{ody73p}Q6K8eIc`P==dv1JmcDK))=IeIQX<*R}1~=7G51*m5EChCRGpih`T4t}r$fy(_tuk}YJ-iCBg z%KV8Z2ToG`>C-o=)4JuPYl%U&JuFxoLNC=`y}FzJJD$+HwZoo%Jk(`CY_9j-Xybgp zBqlGlUdP$d`?Y$FTQ|h`e6~IObnJWgHt)DZJ#@+n(=VIQb*-{f?^hqcG3RW1cy!$b zp369(m`5~x$z?i$Kk3>x{vL~0Y}1tW zao_82W27k9ym7m`?)6clTA2E2{T}RdS(zSrektc=^~0X>teae{3>@wGaHE?Jko-O-yc}9Evr&>;>3x zPw7YY&Zn#-L{*bko$V`VXm7fg2HB&Xu z?_Zy4S8o_)oP#AFPPpJ!J7$i)m^q_G>)hMs&o@oWHZD7?7vyryp?fu_bezfWX8f)G zc-wGyNp+d{?`U3Yd{;bh(YGc(ne zuQSuEpT)OlyrSKT1u6P$2&yHkPPlBH=6Ve%b;}l=7v2B#l=x;+tNODfgchcO9qbWM4QRca&ZC|hx zPU?D}`(Pj4Fyfc|T`9;LU2NTsCu*^;=TDuGVKyx-+jhTkKFQ3s>zXAt=f1C(;A~i} zHJq#ek$(IFcT^)c?jBKc-|DqNjrY0SG*$QT>Q!Tft~Sj-xr3pxJB@PH+E*`cVN!2e zzHg*1Nyjc@8pgD0*|qtU{!@6BRsPuRamIJ9n`#*t=Z{;Xjo$zu>HRq?GOjeCt{>H%f8O)e`n}-fC-hRc zIbSvRe05l?*PX(#)k^>T^*VAJ^7Bkn&dpDEb3WHd=(+RViT2MLbtZ*Y{ozvkpQWD- zPMv#7ny*rm&Es@6>F;aYXYxmEjy1l)wms)wjdt;Mb$9CP2OZ9?X%19hb&ff?@*3UK z^^@R#FwXBiM!!OPcb`$w@*1V5AD4Aoz5N@Np*=r!bI5dEn)9@J?G-KG8SF9Lb+G=8 z9_P&uAJoM8t46d*TcsA^hH_r}IJ=bl5jR@JS zuVCA@uVuY`-1K}b<=VJ{C#JXjcATv!+OR2A?G^vuj$fa;(5vk7iA7csf3q4fJyk7s zmzh0&`Jt`H;?0VzVd|O5eIU=)d2?++biIx|W#ZI3GyiRmzIPG{mmHnq-e8SCW$pVh z7yl{UJ#WsrEA{`exmQUj@#^b`n@#aoX?c4WlZojdO2s?ASDhrCZrE78Qv z(XmhY#@XA{Z)|Go;`Q)DVSqAw_AUFnmkRin)6djxN}gr!TgN*-uD=!UH4htEp>ukT zF|ifxOJdBMcepo){EX4IdFU+F>*HHvHn-f+(meZ*R!0jy{brTNS@oj|lvd*(H2G^^ zGrju%t6^yOr|f?D%vWCjoGJKpH+Bd7y0#AZKTGwR zA=hfcQ9Y`P?r>1o!@b_WdCZKMPy6(BmlKTEX?!)b-80nOSRFU~yGh@6Q$A3K-{$(R zzM{v~WpwX`D`UH6nM9v5lFnslk?n}KFNh{~`PiPHBfj=?{O+8XkhA8|l*G75KZh~) zhGR2d>m>{8C;Vl{U+cF|7?twoy8Q04Gj&QQhx7|1meOlny#=%oF3vnqN|; z(9B)gdQPO(oZKjq*^deI0E7h1-hjrF`rksFFqNEbAPK*43!s%Qeoa zINK$Vp)QrVdQkJ((m&|+m){T31CN!3%X>Z0OWzcG=G`i#w&B7yAJ3m(ZSr-^P1)4n zbG8@E>6VzbRu4y#cK)#J(Z=+tJ?DRQcjF?vb*F5}IPItYAro4r4O9&KxHO@{XXhxi zKNM|>A2q(&F_RzawA=Y@;_lQ-?^=H0ldss5Rgku7!8f+h$jEzVl%Z`fA^SI=8su&!B|}~*G*aWfwFMHzuoaw3$w8A#d-Zq^Y8+5 zT?-xi#7VXkE50ISv9Dj#md>%~xlOapX;YJQ3%$q_t^W#VSCTJ%)W+3&#!u|h)$C|< zZNZ9Zmt}0Nvu5UwMw_m@=nnc)l;_KHYd$dZ^hFEj>rF{&j}<3wzWu{?XRi{w`1*9c zLSFI2!w;-_`M%3M{_pZ$$_nMEkE1EIL+)0u$yxj0RrPDG$nrRgo010S+f6%TuIXpj z)S1)6gs2y{zw@l8><_p8P4*?NQB6p<&y6skC0I z>)}%MNjQ6(G_h&L*AqI|e{P)R8gX`dOuJ(#`qo*DsZ2HtFX|d)zP-;aYRn{?hT>2w zvtnRqTxOzact;Py7Pmd|^c|XR!v!gSyz-E4Q9bI9Xe^XIBmI)1QC-|S!|rLON%fxI z_vw$eHl--;pw4<){B}q8O0U_oDxkv7zBKjKXV1Bq@wt1P+ahVIP`+L^I#JipK4*kY zgQ@UjtDdNugKu^4be(Deso(3hdYjvKKWKb$Qb<%5U+Vjn@m=hT`=`B$+u)0NsqTlQ zgGXb`u4OY@smXTnwy4|nE{LbUW;*SC_J0qH`}Ld2rg)6;AAKxFeW8OK)fg4V{eH-e zf7a)wRf#udocD#wId;;NJD#UTYbv* zNEOF8UH$2Kx<}r1@Cr4uj2Zpab+=XgP6K`3`r8B1GrU!a%5Cb=HlaRtW#85$v)gW< z%(;1!=e>I`jbGMbm2TCGno@KD>IvS>IVNrFze_n$$#Lu|3c5*-QRCHaT6yVrLv$QX2{xfl zpLZ_#Dcy`)^-S`F9T%RmQ-s)md(8Sc)0Dlf=Oem*ro?Vk{+^(M!AblqZN=`lJK4?r zBG_`=hS9CM2!w_aQIRxS72e#7h$_!fUYOpS3Z_u67l>y@D; zy1UF)ox96j`Wlk8)~h3>I>$q7)h48-%jSfI1Apfo=yY@1Zk=f7@0+T9wAX+$Au-jL zq_%1F?`$Idm(+K+?*Vr9?(=HhCf%TRB{XXOmfEg4tr{+~>*gjENA6ori~J8a-_dZX zxAzy`zMgyYC)l}77j@T)`sz}P*Q3sF_SBBG&j&Bs*4mj@dBQeYZ_>>7buF3v9*fsk zj8Ki*`IVX^xy`*a?Mzr$G`eDcMYp1$dPvsva6TIq=TEUu*0jGb-IM5# zt*HF4?SU&h*q!=6v8l>W+-(|r+kRlDSMDQ4F{U)9xYGb5P;o~WcQ2m&eQ)EO^TzL0 znrAf5TdT8Roc&wh3(b0J=Qxk|vb!_%E~XPH&GfFw`;m*+za~ng3#Z$y80Sn2=!w`N z7tC1czs=2Z9bcT5m#>+l#%MHugkF_$&%U11E`CqlES`gxevr|v)x}Xd#fejj)5aye zCidr-wQg!&^+JWt?rQI#sG;Md0^{u-j*3nlVLGOvyOaRuO0_4weRFK~a6`H-b~j|s zz47Tf?MN*U)zMe)8rd)>GDDY}uCboeAL^Q?i_NGbGc>LuJ2G#`lEFKd<=(V9dXs0x zaMkIZdtU3Y`2EX*ogTa(X+!8rP&n*=r}VyJX_EIPWmVQMGcFN#kP$-(>pl+#oDc^Nv*7n%k6xL_cM?2)kYcL zkaA z?iF?kCEig+&VQuo%C0`+bPnBjTW6hue+A!(si{rMDsJ$f7l=7KYp}g62|rYazx|saVo$< z-rp#bKdEX-igV?T{tYcpsBYV9L%#BWDix6zVlsM``J#7w#tmPqi^%v(AARXN?WoDt zP&L|R@rI_In>{;X%gg|$TXv`IC3fA4%k{_U>fW=XcL(f}3jR+Dv;E^#stNo4N_nTpQz2DF&eNd3qx;6yU+iQBXa075RiJL26L-9W9X}@&v}vyX zl^yA7lh8bF{8Bp-2}>(_E7!&SEiUr-?3{uxca_>X{hbar<+h*snt{8#oxRaX3J9kJ!U3RihrFUdOJ&Btc88S_mem{JHds7~!M7Hs( z-^OWk(0rwwsg4iluBNH0HstCWepAo)vm)87F{xwkK1(_~IU8g1-QHFO3v>T}Vlr2Lqo zQELVNYkNF;-l;p;^LoK5#b&cbZLe6i+)h{j@kQHo>yiWJUPg~MZO~Xi&lA#paaO$-s zO~aSyJg$$+@s_C!o{=`PA;*_IZH%4UcIRW>o9#JXSW;^8mhAJ``-s`S)Be40Z7(5t*K$TGnsvL|>V=}b$8aPZ|b`rF}ogm!!y6lg(=OJ$A3-g zM|Q41lI5Dln`mE(?kV=r{0U7t{_a~n_W9tHHTFoB+D(nqweZ{;Js&(1Jf$W#GFUIg zQ1WIyKv5&g@3jlRWV-j%hniFBL2+~#wn=^{6z}NjC{_|nO+Py=5>{j_(IKWU(K$^V ztsAa3TiY>1PkGc@_dk-+wm$9JB~25?d({D8_kMfy9rY^ud|GsRVy2rnI{TlrdksB) zbbM+@)zkgDQ+{{O{mV zzo)CH)Eu1@8zN6c^g}rfgYKVMr&k6SwokNIck`%S>7)YW9=n@F_l9Dek{0Xr zZg^s;stI%KdGP5Q@tYI#3*FufXQ^Mu;;Y-OJYnEh3@rf_v6ZwwIkcD9!su9c-p`c59;@jVr%qy068bSNIkyxBI-Cb@o*SJd_ej z2u-kqKPblQsn*gKW>@d~uRf~LsrAG4E$~q~gF0UO?w0;IEt9(pRpmo%ThC{Homt=S zlCIM+U2ywqy`|o+cS~j-K&o!zJaUL^{iaW zWb0k|JDWxnoY(Q;jaOBtj#U-#A6`8lwCi=Y3H8r67yCNd8|`d6$(fzIF0s&V>eH-2 zjuIC-1D>x*x~T?gD>8;Y_-x$v&gR31WE}GVD z^c>X0Y%Q8!)V6K9Dv;yU@8F&kcgrDnze96G*O1YeuqW|3u4++v)pAodGwjrcaFpqq>8l<+Uq3|Dw0zywT`Hz7un)uQy)nfr7thNsF_oWq zrY7E_rqYr%LRhzUaLBpm%~siyt~YHe+B9jBqxUt{;;l%(ztI2JKTYf%J-@f!Ko� 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 z8#*j&=&=3+X81LIlA`?#4k*Yh%*yINbja+&eue$Ah6ZLA%+4wtGIZ#m*#$%UXZ0T( z2xj#QW(~?3S}=4#R$(A(=)j>v`xOixGO&NakbwiW3HNx;9@qb*G%HwESyEUWEV4@( z6Q^j?WIt~TR+h{zIXlOgR+@G;jMl(qiuUuC)XL!OU}dmOC$lI}9ZVhOOYNW8Z*bp! z{re8+m)ggd8adN;`hQ}Ty6EhN`9uH#1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** 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 z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk 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 zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U 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 zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PEL>f&1_L;9q>p-~GtJo1@6F zNc$tD^={VcbQk8Qisj_B5xX_g)sfQrH&4B6G8T;k=}Ww>=`VaGK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7E(3v&PCosbKYdx}@q^Kp z+ajf9r@N4Kd-F3>N9VHE>}=l3>h@k|rQ6Et+pmjUPl=S4%gvLgvwW}qmm4eVW3hfX zQd+)jX{pvkR-Tgtj)-K-S{5m_29h%{9!PmK5D^X-N4!(-#E zmELmaOx7*lHqUfc7MI8GO?x#OS4X<3Se}U3fmnZfq_jLSzLxj)c>khEX}Ll9_dYMS z-yJC}A09u|>BdoyACH6RolVE`+FoaIeyO>9e~KL%e|_ZgB0zuu0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pkm#)A|K5_iT2Nxdy4OQ$={esPU!B9`h(%T&tEvAjJ}TE4o|eW170Y-M9>du&#JwY-;q$9FYujdI2! zrRCJb)Xbd|(|1lBebwaL@#(qaQ%An%r4hd;Qd+hqXHU*fPn?{YIdeLx6EnxMnW@&Xxv8V4PR=x^7mggAZB9_?ztNLsEj?B$X9-V2lx@Q`Vn{R0BD|Xm-baHNCx>;s#?7OzeKQ%i$F@1Ed zQ5@?2Yl`?}bK=OM@Xig-5JnmsbJuo{0-5$_*%emE&|pvbUq za(X74ot!G(HumrDukHKWk{`SaMeccjo zo*QW*(lgZh7nw>4)X2*_B&Mizgi?`wzvPQ4}JJ|{=*-A z`OA^F`noCJJU!AKk-k1s+4hB4KO5o2Rb+;GKcG|71x2h3=Y;n2M zeQ3S}S&Nh=o$f-`?ah}at(D$#=S+%}EJcQrrIMkLDKeBY^YiWH>`ZSU+F4rabeC5a z+so}Zz-+PGZrz_P^qQyR-E!7E(_89x7FJrzy=JS`Sy^1}^*1fGm$K9C#VlIaXuK-_ z+Gu>~+_`ht#riWMeeSalf8`@zi7$_Q?UN7x$w$7H-WFeO`0~5H_SqMIT6Gm^!*bzKk~g}uXyL-dp>{T!9%b3Z;h0$ho6h|3z0q)={F;# zbN#7E|31>^B7Gs!Uqrel+VJE^PmOeYq^U^X6zT6q`iGHT8|k4)-yiA6BmIj=KOgBm zk=`5WgONTQ>DMEDG}7-yN-jm8ns1&-XQh1CUWi`OdY~U%Y@W%=UNPTZ_}=A*dJn9` z>2EJKPcJpQ(F5nZSt|muaW&t3+AHrP5nbwLXWN~X-uzP5ZFeG5H{YxOZXs))o^Rfl z&7WLpJ&-N;meYDl3(bdms~gjsva`&e%}#e(?d6B^EK8@Gi}TUzy0Pc-N`H^D&C@Gc zzoa<4teY)F*5$0#&Eji+J>S~P?mLsNpa&PTZqYI0aPvyr3#*OlX7{x_(b)OUsZ(+N zooOz{;dP4+934IDMYFPAZ{=jKz0hvP<=8pZ&pIE+*<6mDvolMlI}c@9FC?UXn|Qs2KO(zo5x{@AY^dd)vQ^lgXk{I(CA{`P-<=runXZx=rHPoIB7 zY+ik({I^D`_V1IO&grbV_;*fsn#(iO-?kWE(t$3w&tx;xCl-76_LjTt#rqn!#eS*Z zr+U-%T-N(<*6O|C?HkmauB%jcDyOJ(apla(tXtMr)RX%17mMrr?#P>td8^m=_q_5; z$KUgXpL^d^KmN)Wz2ukg+84W?_u6aM_ao8Xe-`PdBc<#7osoVq(*GLiS0epJq-0WF z%^O_XtJmu$*R`uTF7qe)YQ81<`0==i()Y0=k+#&&7ur92|G#?QQ~&Ul?|sQH{rPWw z==X2 zGTN};$M>$G-`4V*n!DngTYn|8^;e2-bp1Dj-|qU+)o&E#)pS?&ayfL@>UQ4;pV04v zx0fUPRbPDR8)qMn9@BrtePa6d)cC!a%sd|7{dVj6`i`jM2O|Agq;&81#YoSLqxkP5 ztwef5q}0zp7U>TnrM~>Fk^VuXH${4Xq-)~(|K>>VjP%!$z9}XlOOgJ0q<WS*T=nLq>o4X(@0ZcaXiv1 zB7J+LS4H}%NXh8Lc>f9-KRh;GTx*rpvGX<-H<#o0o)~X0RB~2U$7&nmUEIpFPsL4L zB~RSXq$2V=(|qNDm9!|Ti?wvsrAT=hrhUuxqJqlXY7J#LRgoH%SCn7eV=*G+p)}`7 z!$W$L7Ew<>LyQz_8HzV)v6`V6LDn)=0_AGT+^;&-Gd4KRtnE8&OFx$K^w-Av15VN8 z!C1B3!%FM#oF9JWh*rn2wL__eioN0(`fEkyt8c2cuI;$q$r{T~WfWGPnDYYp5Sxyr z%rT$OI8vnS27S;F?)Rd6r8ul|y?Ru6tmtEh3c{j4REF@p`MJxETil=aq=L%t2i5hl z^EVgMrheDXr%q{yVir}&U!Payh350Ev|~&TQlLM_N^5B@Q7*?~>sWnLWky!nJ>X${o%-wCaYnf>P&ssC7CUOB0X0DFa7W zJJNE_I5ap`)-ZgEnICidC}XT&;pv!@E#IG_tEI-lq={%=dMx9Z`n_&-cAB>2!N?gR z(f-^upLVBhwMO^a-`8(ZoTRaQK3Hby&kobOVkVhZ`#GZEG%-qn=+|k|n^wyft$V79 zyg|_4w|}~dXg+OD#q9na>T`izG%TC+#f|JjNou<|y%8Poen4qU(&NRF6 z@jx|FZj7??xo^tV?Dg9BEoQkwKCMr|Znjh`x-nN@4E^@mJV!oM6(5zP z?Y)&4*v_`&bHje_=9#fPSLzt)Gn70}y2e&l#_I9;{@cjk|F|X9(>c{Iy8Pg!{w@x< z9*ECn@}nz0lt~-c+SFegD?hPW+qgRIOZ%?gz@|6lC79xIffS$Rq&?H;JLPh0$hPWd zKdGet=RavJ|KKO>ny;)~{FTp!($>{WejtB&75B53@5)QCeBb{}DV5V-TfKHGA2y|f zsrB4^U`YGqJ$3cnHZJSpl1U{OpIoKY)oVAu8dC-R%d#Htf4r6Q7vI;{KIlrj)US^7 zBh@Rnk~jZ;AGhIN1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfWSo(_}%Y**6R+n-qXG%>boOS zTDBL@W{b<6?nCo)*<@?>$jm~caWLYyMM}$FXQkW9DjOqqU8JWJ%jM?D(^;&SuN%vi zSdK+HTr6L84_NB7)b)`qLt%<%#j$YTjGp{aB>598&JR&x`oo zk<#+v@l%~{9Od}&vGG>#Y^wCNz0TtNQgiwK6gxEj`pD%)fB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXrAAui!;g5Xa@K65Gw?8GC^z2A! z*XPaBL~-j&-wEr@Ii@8pk5NyjY$X@5krc3*(2! z#*4!oc-K7BSy^08+k4B+<(1y}y{VYS)sb#0mM0=~ORV1!DJ@T|7FFyV+n*ot$w+Cr zVZF6l8ja^g{<|Zk<-_BrI^Ag9`0=svR_|;&rq}j5i}Op(<@;0Y(D>^kmlpv71PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5ZHSHy>I#2=kNH` zKf3Bg{X^To_l|HEj_6$ex@w`Z&}d|ht4=i<_cb1C>|bu4Je@^#A8YJC+s+j3@~R70l#&P#AaF$qTzy5g zR$~beAV6TJ0>h^k`D~$a?%c;>#u4*|tNOXloy(^nDNs&9I^Bh=+nZmADM-0mPC*V{ zs#B1iQrhn#2o&>vw>cNVS``Ec5V+(8`nNCn$DwiaQoiyJNFQsw@#eI-{Dx9~!g~Ee z0)P1QfxyR}F%bCRGY10ide%VTC%$eV@B_CE1U^3)_~h;9&fV9D z8?*jx*{MeTFn|5o0|k8Gj)B0>Kc^Zvo;AK<;Qi0Wz1~_&Bg0#-9tgbont{NV2LqqK zwtAG;or;^t8&c$|`v*S2Znj#TmBr;=+&%W1r?cMta#r3whHrXh{TtA{j5nk*uCA4l z=gGh1ApNSc#y?IuudU^bkIQ?Vm2NAWKbdMPR?FIM=@+!K+TIpqLmF3pBtPWS`S3}v zomKbP(CXH^W8YaFzc;jw{r$sE(}LBXyOe^_C(~1*wLeRXJcd6s>v zlaSB-R#C@#wXFVVWSv^x7Cm{$d3xE>Qn&NE_L*qZKj=Kz8*4Qe%SJuFU()bKZC2f< zU7UEm!o;*YN`1x z+plh+ab4E9It`C8+6`%4Iirr+%GI*A>hQQ$%o|cM8;p=^IiH?2W{1{UjEreQU#^yQ z<`en?bgiUq)p`HWIx9cNELY1q^PgjmR_B}7A6#NU8T^DJ?=CxR-CKs%w0iD_oW|j# zadO_jR@CapE&UFbzQ)M7c8DqW(4i(DKck$Yi81>1U!yef*M`=#zcPlFtK}IS8@z>tnVcB!X05nD!na&4D?dJZyqow6)c}`!n!%Fw%A6qUo;x>FpCu*(q zmOE#%Zd6#VmKD}%%VIXCEpt9AYs5t`q|Rc1P2Zc#)w0g|z)+U7tvX*iw9ayXjXKNK zvd;QgyZt(c9NlC6+xN9WDAxL~;_BFbEuk5A5<@i0lA~qi46kfijPvQWZk@yLPZt^+ z99_|}xYpMhUN_jce>CZ9K9H9=qh-UtKbAvkw5(h$TUH-k%aY!ZfHu4jD04=g>r7wD zp)@KjSIbHd^&7A*=kPn@HO{DX_#|d^C{2}aII5P%zpa*jdhMI)>LJFwu&il!D*fU* zm9GCy>jLnuGu0`F(r9V9TAtJA?eLuLFGkh;gNgHIAH{9!L{wO=mKD}VxU!hd&u5wQ z_Dx3BRA(`&PF%n`M;uklqu+WvhveLJRNa0pp*iBHdVZbjjjHG8tXz%xP3!uj>IVDv zJ8=4%kE&(PXxWIPYFW~dGqHZ1+aFb{v;T$0jw)T}W1B4xa678>bL$Oo%`@r4y)>$h z_gBlyFy_|jReb;0QKgTsSLwR-VZl!PexS_xoJ~g6&F@vqlD1Xnh@l|`)n~tj6uO&1`997S+bG=dZ z{G3}KRX5o8-0CYIRm+^wvJpqsvZNtrVztT`$%}dawef*RxkuE!{n534Q&kqVN#*rQ zN4;m=QKh5av+k(UQSVuIROzVqtXr@2Kry-K92%@Ie}^Xpu1bUi=k)<@S3_C2@y%175S zXS8g@(X}jT$eCEJvVWgk=8QVGKdRR6S<9lfRq3ertUIc7)O*$)RXXZD>y9cN^`3R> zmEKT{s?jHg+$6Ub&t{9uo%H!?xmu2J^?TN`n9Vy;nezpkjH+{Mqv~8)XMH3uOWIbQ zBaW)uuXD)JZ91xMzn0J(aa29O&hR4sEx%SIek%aVqiiPb9m zqiUHm>fHXQ8o$MpUd8;lEb0xLPU6a(QR%4ns%25zs&u`3)$#bzO6!5~xD4Yr9`e=l zGQ2*ubF`Lzb=#i=+&X%tZyE8EfUWc1Sd6NNM;lekV&1T6Cn|Fu-egoA_G?u2QMD{- zTXl{&s&2o|AxF3AsJi`HLUY7X_53>58&%KGx%E+XgMIr~P5PRTs%6f@Baf(* zUr&vD)_k@6#`Tnbk1W1Lm&Me2@X$_F=6vBMqwBG?d)8xRo%PYRENNSHjySq*zs?~? zx9RA*{aQkE#L@NqI@cRr&(FE_(RG7;`~4|>%}3WVXS8g@d)Bg~A!lO!I=4Tn9_tr2 z$_26BqulW3)wZB?khV|*{jw)SefGdB`BCoXngRHXB=a0_&*ogP6 zTW@Ln%b6Jb78;X7N7YvI%u=&`-(s|~TrFE!r!9-wyyuoVCpQ^YH~%D{ENNSHjyS4r zzs?~?x9O<5{aQkE#8LJ9I@cRj&(FE_QFViT`&Ui+nvbew&S=?)qiR{wkTbDQAk< z*wP#Gzr3$p6Z<#&+o>3X7a9k%#zFu5tNeA)U0;@eM7Zk}UA`3*^ZqB*TDV=;YioNy z@o%z!f3jCisdt%^FF7z$GZKgPY*^ zE9jdpp}$kU1W(GIK4iZ!wejiMZJ*sPf8*BKy4wPK==>J*{sX(+WaaMxfj!jkE{evL z*4~SPsuBW)!0?&H>O&FZj|hf7!8`w){W70o_)yGMLSX9xyZxZ(% zZDkL62oTt+Kr!#XVXOIfn$NhqQ#t!3fpw-B@d(>iD;{SXQ;c|qP4jftn=k)P`FPr8 zH>Mc6^5xwnP1!E*^Sj%v+wS<_7I(ML$j0Sw_k0;2Hul_WTetgPp7+}EUunnVUk+W~ zXMDTk?QZ8^cWTkD`)IT)Y!s%=>S=cr~i&@)2+gborc1Eg?YQ z@)9sUUtZ_)a%;_%)<4&sVl>ah4=$ms?l5(CzVQ(S;UO-X0Pt z=KW9JLx*%}9?GRY?)sGV((HG8<*2W;Te#hJ=Xqg;_uBZp+vj)vDaLxgAoYp-f3Ers zsSDfhltzHSg%#Lqzah2Vd*|(bFWT+$FYMVFy|nH6j9%jtTf!62pNo0_O;2pY)qY6{ zTxr+kZl9b>-E*Be#>3;MI^8qP^ka;2wfs$~Z`taPF?O3?`5O!D_Vje)+HEDUvB0H1 zbZ*=_Tb*BhfWY1na6Rswb1}-1^l#bEog1Z$i@9(Ac=I1hr02sGul!e`9&5bu=Crwd zHo-z8p5<`esm6^9jYr?ue;vyjZ;3p$z+Vpr{^ThGIX->MK;VCS>OkNZZXF0b`m}+- z8=pQ9_{w15v(FgF@rh>+1U~YtbLZ|$f9k%_xGrm4J=n7Me%(O+pSf)y@aXLWfk&P_ z5ctYq;EQ(*a%yAAQn5;E{a;f&Vrb_>cPsa{T`F1A$*XFcA2~8wLXJym27#Q%@cU{OC;sf$u-K z+OqvaTK1Q*xz@7(x7Hb>?SEM7j1lx>cjzt=kB^+Q_rJGIUj`9D(Yj1l;yT4#*FyJ~$e0zXpgdl5J{82Cc1 zGtOm=cGWZ9f40^cBk=pR&KQBmYMn6xA6e^+2L>A!n?F$Nj1l;kwayrUpQ`n}2>eK` z??vD*1_NKHb;ii?+qKRZf&abM86)toYn?Fy@2Pdh2>fiVGe+R8Yn}0iAuW4zt?xzt z|27!-^IB(&9DiKvj1l-hYn?FyAFg%A2>j2r&KQAzR_l8a_~BaLi@>?Tz<;TA#>nv} zYn}1NAuaoCtusdc->r4V2>fQPGe+QpwayrUpQ-h|2s}F2_r6vO{C8R7;c91$_g}4b z#t3|&))^!4nObLz!0)bg#wQOpEH?jEtusd8musCd0`IAH#t8gOt?xzP2WovU0$&>p z{86nlMvnih))^!4(OPGWz=vy{F#_+eb;bz1tL%*B_i#%B1PBlyKw!58&K0l0UnO~Q zQSqI{@`c6nu40+;m$CFPfae$Sw0@{qPd_UfE7sF56g<0FPk%adb0z+QVm#6*&E7nu~^gg{( zo1T-eH5#d|v@N|-IbWZz_1DV}IMRMkt;C;OtfzR|KfThvx8`g8@(vg4X?t03`A;6s z6^(dGktY^^^G%=I_l?ExhBW@R_%C~Fo2?NbK!5-N0t5&UAV7e?UKJ?ja+N9GUOm!_ zb6n-T{o>Si>D98^KD%B1r6+!Q9kKI!d7aO_-kK||zg=nV-Ru3&@m*d5{U4KEwb00a zn>2nkv2kDHvBuUOU3xHU96Z&Ced9M(AARPxzUH2LE-RbzM`V{(qcn!VE(z@Rx9Sbc zFXsK_kG^-QiHhBUz!UJ_9(Hh)b|FAun81eP?yw!i2vh{tnPP0|(WMu7ilHl4&dZS1 zOMS|7sUQE4QzCQ`1-3grxV62ACuc}i+dW^#harf2I8^?|`uc}h%=^n<6JI~0Ef-Os z{LTA|Sf#2iqQG{?-QCW=?i6DSk1)N!Q;dsv7F0!G+X8NZwoPUS0t5(L6anM&MPXLS z4h8l||19SH<)41hMseQNW>H6LH^zF6rdAsL##h861dcdPG@jqfs1l} z``^DVo#*&%OlB*AT^G10*X6FaLIszKK!1pir?}<+5UM=t+M`R$r*`E3Y^wk0(svh+ zE{*>o^^5t_A}fKnx|LV#|Hy{R_lzBMxg)r$jX8BA0Jr>^dBEt38cqI7A;$SbZKRCdYELbWuK{a#;Eh()jDGY zexueIBk=B8XNw6LSv0C4Yz?*7)F9Kg24E%>$XN(;E$46EUtpE7P zN}&Jv$VwnRKC)=p>Z405o72N2Yc2c9THlL0f4J87BJj6^f&X0VjFIEhwayrUe_QK} z5%@r@Ge+QlsSSh?`03g}7=cIgN0(L({Rf9Uy0o(SuWOw#3iz{HXNhlH1E9F$5M_B$+M#}%ZB2RLtKKt+mm3?1WS+71fvHCp4 zu_8|@C#CdCPpL0%FVI7JyKe}y3>82x72K9V{3bCR)4j;mw(51HExY^#v-NV)Wp=xofFe{ zP8@yJg43~%-n3V**tb+YI@?xky8^h z$FiBJ*0H&%qo+>JG^ZDi9Gz`WPR`CQOiiAgo1Qo}eJqN|+jvK@Ty1}aaDQw|$C8$3 zvu^uTJIf`K*>fYMW$%HN!@cEB>wyC=n>;)@ap0S$4j(xX@$|Yn(oMzk;n$~#7XbnU z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK;Zvx$8KOHyY9k(-`%&~dGkI z-r1iI4rYU4r%}z|CtBU!c5A&|Pw1=1%35Qq-QH;JWWC8@mYqG7HL497t&MhnyIZGc zjT2S==HA}=cB`FLr@FdQwQqFSw>Gzq@{iZ~t#;nq+p9ZPZ>rk!jo#kYPJhvUvT83+ zyEvWHa!Zxa_&-nE#tsNPdj!r@1Lt^qUe&TJ#$++h+(1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0tB9xz{6jBap$K#_RvqCjlDD@RwGh< zlJ`cFerK~PH*Sr#7et(lNcHLb@GzfD$CJVEVytFAejrc$+9!i{``nkPDk@eFJJ16wwoeutIAn-{~(Wg zz1&(?qHIQ-ugY&2k0+z=92|CM`N8GpXqY!Aqeq+LeA1lcz0sr}Y1s=SzOE`CTr1l< zgZ|q2=Gyd;c~Q(py+_s_O3AStk2qbG4@Tq7QNJ@Hl@G2>7rD=k^=3pWZ?NBozBbzL ziAd#RYZpe7ILozrn`^!4rF76YPDjJexI23|wVhjgJhChV2oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAVA=mBk7}AK%WjVH&WKbl`lEg_;`XYX zj}J!Oeyqf@5|NIT%CwiWQNAD|mESg+JTe`3dwKI{i{I<`%lrGrZ~e>Jb7Mcvh*WN_ zZ|=NoefwqWt=Da|@7-?SySer4UmxwSj!5N&?F+5$Zoc2%+1_ez?r!zByR8db?F*aR z`A&bo)$RBC-F$bux4*ryf8oN$_Garscc-_vv$eauzSq03AG;{7@vf>|T>lc`YV@UZ zN#&({GPp3v3yBxU`esBb>+Q}@$N8{-%XB;$3@@JF*j!(~Wja4R%qQpDt@T?XF_z;I zr>pX@$5V@i009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5*BzZ3Z3-`@YXuld=xoy)S{yka3hfB=D~D{w69^+xmIY?_VpgTXM*R*#iacB6Zc zPdnp5)tudwnxk)JGV0HJkzXyV$ID7%ky);rBwwqR}{C+-}cKWSuZ@abL z&W6SQqidxznB_}bG)`9eAjby1hx2}!lRi(LDC>>+bT&Fn z$H;pd-Sw?oQgigJv^LuP?QWSApN*T#YNI}rs;804IMR;vqZq@8YV z)y-L>*dX?|*=py#y}hjZW>$*>NBi(nKAepvmpkozqqnzJu*J2lw71&rjn>X0|JHJs zjUsC&uIysbwR);*FL$yyZow0HD}!FZ>~3uDOXsNVm&^J@~SPZ5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs 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 zxV~k10RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs 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 From 99ba260b1270d971b63149e10b6d58cd3b582e60 Mon Sep 17 00:00:00 2001 From: Saransh Kumar Date: Tue, 14 Apr 2026 17:01:05 -0400 Subject: [PATCH 8/8] update readme --- README.md | 278 +++++++++++++++--------------------------------------- 1 file changed, 78 insertions(+), 200 deletions(-) diff --git a/README.md b/README.md index 4fdfef7..710774a 100644 --- a/README.md +++ b/README.md @@ -1,106 +1,79 @@ -# GTM Analytics Copilot +# Planera -GTM Analytics Copilot is an agentic analytics MVP for GTM teams. It takes a business question like "Why did pipeline velocity drop this week?", loads a compact schema/context summary for the uploaded data, asks an LLM planner for the full ordered workflow, generates one SQL query at a time, executes each step over curated views, replans on bounded failure, then runs a final analyzer pass to produce the grounded answer. The API returns that analysis plus trace and executed steps. +Planera is a chat-first analytics workspace for structured data. You sign in, upload CSV or JSON files, ask a business question, and review both the answer and the execution trail behind it. -## Why This Is Not "Chat With CSV" +The product is designed to feel closer to an analytics copilot than a generic "chat with files" tool: -This project is intentionally constrained: +- uploads are scoped to the signed-in user +- analysis runs through a bounded plan/query/execute loop +- answers come back with trace, SQL, result previews, and validation context +- conversation history and inspection snapshots are persisted for the main chat flow -- It uses an LLM planner, but only over a compact schema/context summary derived from curated dataset views. -- It does not let the model access arbitrary files or external systems. -- It executes exact SQL steps instead of vague chain-of-thought. -- It replans using execution errors instead of silently falling back to rules. -- It does not run a separate deterministic verification layer; the final answer is grounded in schema/context plus executed step outputs. -- It exposes every step, code snippet, and output preview in the UI. +## Current Workflow -That makes it feel much closer to a production analytics copilot than a generic chatbot sitting on top of a CSV file. +1. Sign in from the UI +2. Upload one or more CSV or JSON files +3. Start a chat or continue an existing conversation +4. Ask a question against the attached uploads +5. Review the answer, then open the inspection panel for SQL, results, trace, and validation details -## MVP Scope +## Product Surface -Supported intents: +Backend: -- `diagnosis` -- `comparison` -- `recommendation` +- FastAPI API +- SQLite for users, conversations, messages, and inspection snapshots +- DuckDB for uploaded data and query execution +- OpenAI or Gemini for the planning and answer-generation steps -Supported metric: +Frontend: -- `pipeline_velocity` +- React + Vite workspace UI +- authenticated chat experience +- uploads management +- inspection drawer for execution details -Supported dimensions: +## API Overview -- `segment` -- `stage` -- `owner` -- `deal_age_bucket` -- `plan_tier` +Primary app flow: -Out of scope: +- `POST /auth/signup` +- `POST /auth/login` +- `GET /auth/me` +- `GET /uploads` +- `POST /uploads` +- `DELETE /uploads/{source_id}` +- `POST /chat` +- `GET /conversations` +- `GET /conversations/{id}` +- `GET /inspections/{inspection_id}` -- churn analytics for the current dataset -- CRM writes -- forecasting -- causal inference -- broad BI workflows +Debug-only helper: -## Architecture +- `POST /analyze` -Backend: +Notes: -- FastAPI for API contracts -- LangGraph for the planner -> query writer -> executor -> analyzer loop -- DuckDB over the provided CRM sales dataset -- OpenAI or Gemini for planning and final analysis text (see `LLM_PROVIDER`) - -Workflow: - -1. Load curated views and a schema/context manifest from the selected uploaded sources -2. Build a compact schema/context summary for the planner -3. Ask the LLM planner for the full ordered workflow in one shot -4. Ask the LLM query writer for exactly one SQL query for the current step -5. Execute that SQL in DuckDB and store any successful output for downstream steps -6. Retry the same step once on execution failure, then replan once with a failure summary if needed -7. Ask the analyzer once to return either the final answer, a replan decision, or a best-effort answer -8. Return `analysis`, `trace`, `executed_steps`, and `errors` - -Core modules: - -- `app/data/semantic_model.py`: curated dataset views and schema manifest -- `app/llm/`: OpenAI or Gemini client -- `app/agent/planner.py`: compact schema/context builder plus full-plan and replan generation -- `app/agent/query_writer.py`: one-step-at-a-time SQL generation -- `app/agent/executor.py`: SQL execution engine with stored intermediate outputs -- `app/agent/analysis.py`: final analyzer decision and grounded answer rendering -- `app/agent/graph.py`: LangGraph orchestration -- `app/api/routes.py`: Shared API surface (health, uploads, inspections, **stateless** `POST /analyze`) -- `app/api/chat_routes.py`: **Primary product** chat API (`POST /chat`, conversation history) -- `ui/`: React + Vite frontend - -### API: primary chat vs stateless analyze - -| Path | Role | -|------|------| -| **`POST /chat`** (with JWT) | **Product path:** persists conversations, messages, and inspection snapshots; use for the React app and any integrated client. | -| **`POST /analyze`** (no auth) | **Debug / manual testing:** same analytics engine, but **no persistence** and inspection data only in server memory until restart. Marked **deprecated** in OpenAPI; do not treat it as a peer to `/chat`. | +- `POST /chat` is the main product API and is what the React app uses for real analysis turns. +- `POST /analyze` is a deprecated debug path. It is stateless, still authenticated, and should not be treated as the normal integration path. ## Repo Structure ```text planera/ -├── app/ -├── ui/ -├── data/ +├── app/ # FastAPI backend +├── ui/ # React frontend +├── data/ # sample data, uploads, and DuckDB registry files ├── tests/ -├── .env.example ├── requirements.txt -├── Dockerfile ├── docker-compose.yml +├── Dockerfile └── README.md ``` -## Setup +## Local Setup -### 1. Create the environment +### 1. Backend ```bash cd planera @@ -108,168 +81,73 @@ python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt cp .env.example .env -``` - -Use this project virtualenv for all Python commands (`uvicorn`, `pytest`, `pip`). In each new shell, activate it first: - -```bash -source .venv/bin/activate -``` - -*(Windows Git Bash: `source .venv/Scripts/activate` — PowerShell: `.venv\Scripts\Activate.ps1`.)* - -### 2. Run the API - -```bash -source .venv/bin/activate uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 ``` -API endpoints: - -- `GET /health` -- `GET /sample-questions` -- `POST /uploads` -- `GET /inspections/{inspection_id}` -- **`POST /chat`** — **primary:** authenticated analysis turn; persists thread + inspection snapshot -- `GET /conversations`, `GET /conversations/{id}` — list/load chat history (authenticated) -- `POST /analyze` — **deprecated / debug only:** stateless run (see table above) -- `POST /auth/signup` — create user (SQLite), returns JWT -- `POST /auth/login` — issue JWT -- `GET /auth/me` — current user (`Authorization: Bearer `) - -**Database:** On API startup the app creates SQLite tables if needed (no separate migration step for this demo). By default the DB file is `planera.db` in the project root (same directory as `requirements.txt`). Override with `DATABASE_PATH` in `.env`. Add a strong `JWT_SECRET_KEY` before any shared deployment; the repo default is for local dev only. - -Example (debug — stateless; prefer `/chat` with a JWT for real usage): - -```bash -curl -X POST http://localhost:8000/analyze \ - -H "Content-Type: application/json" \ - -d '{"query":"Why did pipeline velocity drop this week?"}' -``` - -### 3. Run the React UI +### 2. Frontend In a second terminal: ```bash cd ui -nodeenv -p --prebuilt npm install npm run dev ``` -## Environment Variables - -Backend settings are defined in `.env.example`: - -- `APP_NAME` -- `APP_ENV` -- `API_HOST` -- `API_PORT` -- `GEMINI_API_KEY` -- `GEMINI_MODEL` -- `OPENAI_API_KEY` -- `OPENAI_MODEL` -- `LOG_LEVEL` -- `DATABASE_PATH` (optional; default `planera.db` beside `requirements.txt`) -- `JWT_SECRET_KEY` (optional for local dev; **required** for non-local use) -- `JWT_ALGORITHM` (default `HS256`) -- `ACCESS_TOKEN_EXPIRE_MINUTES` (default `10080`) - -Frontend settings live in `ui/.env.example`. +Open: -Set `LLM_PROVIDER` to `openai` or `gemini` and provide the matching API key (`OPENAI_API_KEY` or `GEMINI_API_KEY`). - -## Data Model +- API: [http://localhost:8000](http://localhost:8000) +- UI: [http://localhost:5173](http://localhost:5173) -Current dataset: +## Environment Variables -- `data/CRM+Sales+Opportunities/sales_pipeline.csv` -- `data/CRM+Sales+Opportunities/accounts.csv` -- `data/CRM+Sales+Opportunities/products.csv` -- `data/CRM+Sales+Opportunities/sales_teams.csv` +Start from `.env.example` for backend setup, then override additional runtime paths or secrets as needed. -The app builds a semantic view called `opportunities_enriched` from these files and uses the dataset's latest close date as the analysis reference point. +Most important: -Key derived fields include: +- `LLM_PROVIDER` +- `OPENAI_API_KEY` or `GEMINI_API_KEY` +- `OPENAI_MODEL` or `GEMINI_MODEL` +- `DATABASE_PATH` +- `JWT_SECRET_KEY` +- `UPLOAD_STORAGE_DIR` +- `REGISTRY_PATH` +- `CORS_ALLOW_ORIGINS` -- `pipeline_velocity_days` -- `deal_age_days` -- `stage_age_days` -- `deal_age_bucket` -- `segment` -- `plan_tier` +Frontend settings live in `ui/.env.example`. -## Sample Questions +Most important: -- Why did pipeline velocity drop this week? -- Compare SMB vs Enterprise performance -- Which segment is underperforming? -- What should we do about this drop? -- Which deals should we prioritize? +- `VITE_API_BASE_URL` +- `VITE_API_FALLBACK_MODE` ## Running Tests -Use the project virtualenv so `pytest` and packages like `passlib` match `requirements.txt` (if you use Conda/base Python, a bare `pytest` may run the wrong interpreter and fail imports): +Backend: ```bash source .venv/bin/activate -pip install -r requirements.txt python -m pytest ``` -The test suite covers: +Frontend: -- mocked LLM planner, query-writer, and analyzer contracts -- executor and workflow-control behavior -- API response shape +```bash +cd ui +npm run check +``` ## Docker -To launch both services together: +To run both services together: ```bash docker compose up --build ``` -Then open: - -- API: [http://localhost:8000](http://localhost:8000) -- UI: [http://localhost:5173](http://localhost:5173) - -## Demo Script - -1. Open the Planera UI. -2. Select "Why did pipeline velocity drop this week?" -3. Run the analysis and show the planner-executor loop spinner. -4. Open the executed-steps panel and show the generated SQL or pandas code. - This build generates SQL only. -5. Show the output preview for the most important step. -6. Expand the trace panel to show replanning-capable agent behavior. -7. Close on the markdown analysis and next best insights. - -## Screenshots - -Add screenshots here for: - -- main dashboard -- analysis panel -- trace panel - -## Known Limitations - -- The current build is scoped to pipeline analytics on the provided CRM dataset. -- Churn analysis is out of scope until a real subscriptions or churn dataset is added. -- The planner only sees registered views; execution is SQL or restricted pandas. -- The planner and query writer only see the compact schema/context summary built from registered views. -- Execution is SQL-only in the current workflow. -- An API key is required for the configured `LLM_PROVIDER` (OpenAI or Gemini). - -## Future Roadmap +## Notes -- Add subscription and churn datasets for a second metric family -- Richer time window parsing -- Stronger execution-time linting for generated pandas steps -- LangSmith or Phoenix integration for trace export -- Stronger deal-prioritization playbooks +- The current product flow is upload-first: the UI expects attached CSV or JSON files before submitting an analysis turn. +- The repository still contains sample CRM-style data under `data/`, but the active app flow is centered on user uploads rather than a built-in warehouse connection. +- Uploaded sources are scoped correctly, but separate uploads are not automatically joined just because they share similarly named columns. +- A valid API key is required for whichever LLM provider is configured.