From 346d918118c74527777e09af03c3e74ac2e9e8b0 Mon Sep 17 00:00:00 2001 From: opencode Date: Sat, 8 Aug 2026 12:27:05 +0300 Subject: [PATCH] chat: interactive mode (natural language -> tool calls), shared LLM driver refactor, run_chat.sh; verified with gemma4:e2b and gemma4:12b --- .opencode/session-goal.md | 9 +- .../console-2026-08-08T09-09-21-626Z.log | 26 + .../console-2026-08-08T09-11-01-487Z.log | 97 ++++ .../page-2026-08-08T09-09-21-753Z.yml | 11 + .../page-2026-08-08T09-09-31-437Z.yml | 11 + .../page-2026-08-08T09-11-01-570Z.yml | 11 + .../page-2026-08-08T09-11-09-014Z.yml | 11 + chat_frame.png | Bin 0 -> 2203 bytes chat_map.png | Bin 0 -> 2159 bytes demo_final_frame.png | Bin 12459 -> 3039 bytes frames/demo.gif | Bin 0 -> 41178 bytes frames/demo_summary.png | Bin 0 -> 32335 bytes frames/step_001_map.png | Bin 0 -> 3724 bytes frames/step_001_view.png | Bin 0 -> 2203 bytes frames/step_002_map.png | Bin 0 -> 3935 bytes frames/step_002_view.png | Bin 0 -> 2210 bytes frames/step_003_map.png | Bin 0 -> 4241 bytes frames/step_003_view.png | Bin 0 -> 2312 bytes frames/step_004_map.png | Bin 0 -> 4169 bytes frames/step_004_view.png | Bin 0 -> 2033 bytes frames/step_005_map.png | Bin 0 -> 4206 bytes frames/step_005_view.png | Bin 0 -> 1930 bytes frames/step_006_map.png | Bin 0 -> 4240 bytes frames/step_006_view.png | Bin 0 -> 1729 bytes frames/step_007_map.png | Bin 0 -> 4194 bytes frames/step_007_view.png | Bin 0 -> 1641 bytes frames/step_008_map.png | Bin 0 -> 4367 bytes frames/step_008_view.png | Bin 0 -> 1966 bytes frames/step_009_map.png | Bin 0 -> 4555 bytes frames/step_009_view.png | Bin 0 -> 2014 bytes frames/step_010_map.png | Bin 0 -> 4407 bytes frames/step_010_view.png | Bin 0 -> 1860 bytes frames/step_011_map.png | Bin 0 -> 4592 bytes frames/step_011_view.png | Bin 0 -> 1930 bytes frames/step_012_map.png | Bin 0 -> 4647 bytes frames/step_012_view.png | Bin 0 -> 2893 bytes frames/step_013_map.png | Bin 0 -> 4505 bytes frames/step_013_view.png | Bin 0 -> 2733 bytes frames/step_014_map.png | Bin 0 -> 4593 bytes frames/step_014_view.png | Bin 0 -> 3046 bytes frames/step_015_map.png | Bin 0 -> 4500 bytes frames/step_015_view.png | Bin 0 -> 2894 bytes frames/step_016_map.png | Bin 0 -> 4648 bytes frames/step_016_view.png | Bin 0 -> 2825 bytes frames/step_017_map.png | Bin 0 -> 4793 bytes frames/step_017_view.png | Bin 0 -> 2919 bytes frames/step_018_map.png | Bin 0 -> 4659 bytes frames/step_018_view.png | Bin 0 -> 3074 bytes frames/step_019_map.png | Bin 0 -> 4921 bytes frames/step_019_view.png | Bin 0 -> 3281 bytes frames/step_020_map.png | Bin 0 -> 4805 bytes frames/step_020_view.png | Bin 0 -> 3566 bytes frames/step_021_map.png | Bin 0 -> 4802 bytes frames/step_021_view.png | Bin 0 -> 3778 bytes frames/step_022_map.png | Bin 0 -> 4978 bytes frames/step_022_view.png | Bin 0 -> 4471 bytes frames/step_023_map.png | Bin 0 -> 5116 bytes frames/step_023_view.png | Bin 0 -> 5182 bytes frames/step_024_map.png | Bin 0 -> 5069 bytes frames/step_024_view.png | Bin 0 -> 6379 bytes frames/step_025_map.png | Bin 0 -> 5111 bytes frames/step_025_view.png | Bin 0 -> 7772 bytes frames/step_026_map.png | Bin 0 -> 5111 bytes frames/step_026_view.png | Bin 0 -> 8515 bytes scripts/run_chat.sh | 32 ++ testbed/.gitignore | 2 + testbed/README.md | 29 ++ testbed/chat.py | 233 +++++++++ testbed/demo.py | 312 +----------- testbed/llm_agent.py | 463 ++++++++++++++++++ 70 files changed, 950 insertions(+), 297 deletions(-) create mode 100644 .playwright-mcp/console-2026-08-08T09-09-21-626Z.log create mode 100644 .playwright-mcp/console-2026-08-08T09-11-01-487Z.log create mode 100644 .playwright-mcp/page-2026-08-08T09-09-21-753Z.yml create mode 100644 .playwright-mcp/page-2026-08-08T09-09-31-437Z.yml create mode 100644 .playwright-mcp/page-2026-08-08T09-11-01-570Z.yml create mode 100644 .playwright-mcp/page-2026-08-08T09-11-09-014Z.yml create mode 100644 chat_frame.png create mode 100644 chat_map.png create mode 100644 frames/demo.gif create mode 100644 frames/demo_summary.png create mode 100644 frames/step_001_map.png create mode 100644 frames/step_001_view.png create mode 100644 frames/step_002_map.png create mode 100644 frames/step_002_view.png create mode 100644 frames/step_003_map.png create mode 100644 frames/step_003_view.png create mode 100644 frames/step_004_map.png create mode 100644 frames/step_004_view.png create mode 100644 frames/step_005_map.png create mode 100644 frames/step_005_view.png create mode 100644 frames/step_006_map.png create mode 100644 frames/step_006_view.png create mode 100644 frames/step_007_map.png create mode 100644 frames/step_007_view.png create mode 100644 frames/step_008_map.png create mode 100644 frames/step_008_view.png create mode 100644 frames/step_009_map.png create mode 100644 frames/step_009_view.png create mode 100644 frames/step_010_map.png create mode 100644 frames/step_010_view.png create mode 100644 frames/step_011_map.png create mode 100644 frames/step_011_view.png create mode 100644 frames/step_012_map.png create mode 100644 frames/step_012_view.png create mode 100644 frames/step_013_map.png create mode 100644 frames/step_013_view.png create mode 100644 frames/step_014_map.png create mode 100644 frames/step_014_view.png create mode 100644 frames/step_015_map.png create mode 100644 frames/step_015_view.png create mode 100644 frames/step_016_map.png create mode 100644 frames/step_016_view.png create mode 100644 frames/step_017_map.png create mode 100644 frames/step_017_view.png create mode 100644 frames/step_018_map.png create mode 100644 frames/step_018_view.png create mode 100644 frames/step_019_map.png create mode 100644 frames/step_019_view.png create mode 100644 frames/step_020_map.png create mode 100644 frames/step_020_view.png create mode 100644 frames/step_021_map.png create mode 100644 frames/step_021_view.png create mode 100644 frames/step_022_map.png create mode 100644 frames/step_022_view.png create mode 100644 frames/step_023_map.png create mode 100644 frames/step_023_view.png create mode 100644 frames/step_024_map.png create mode 100644 frames/step_024_view.png create mode 100644 frames/step_025_map.png create mode 100644 frames/step_025_view.png create mode 100644 frames/step_026_map.png create mode 100644 frames/step_026_view.png create mode 100755 scripts/run_chat.sh create mode 100644 testbed/chat.py create mode 100644 testbed/llm_agent.py diff --git a/.opencode/session-goal.md b/.opencode/session-goal.md index 199c945..4311761 100644 --- a/.opencode/session-goal.md +++ b/.opencode/session-goal.md @@ -17,5 +17,10 @@ - DONE: headless raycaster renderer (vision 160x120 + aligned depth grid) — testbed/room/render.py - DONE: RoomBridge with all world tools + echo/boom/bump — testbed/bridge.py - DONE: conformance runner — 9/9 green against testbed bridge (testbed/conformance.py) -- DONE: commits for skeleton + bridge milestones -- NEXT: unit tests (world/render/bridge), demo agent loop (ollama LLM + scripted fallback), README, setup.sh, BUILDLOG +- DONE: pytest suite — 33 tests green; ruff clean +- DONE: agent demo loop — LLM (OpenAI-compatible/ollama) + scripted fallback + auto handoff; E2E verified over WebSocket (scripted: 26 steps, beacon activated; LLM mode completed missions with gemma4:e2b) +- DONE: testbed/README.md, scripts/setup.sh deps, scripts/run_bridge.sh, BUILDLOG.md updated +- DONE: commits per milestone (skeleton, bridge+tools+conformance, tests+physics fixes, demo loop, docs, lint) +- VERIFIED: conformance 9/9, pytest 33/33, ruff clean, demo end-to-end + +COMPLETED diff --git a/.playwright-mcp/console-2026-08-08T09-09-21-626Z.log b/.playwright-mcp/console-2026-08-08T09-09-21-626Z.log new file mode 100644 index 0000000..e871804 --- /dev/null +++ b/.playwright-mcp/console-2026-08-08T09-09-21-626Z.log @@ -0,0 +1,26 @@ +[ 28151ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 35175ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 36177ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 37178ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 38180ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 39182ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 40184ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 49096ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 50098ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 51100ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 52101ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 53103ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 54105ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 55108ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 56109ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 57112ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 58115ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 59117ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 60119ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 61123ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 62129ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 63134ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 64140ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 78549ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 88888ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 89892ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 diff --git a/.playwright-mcp/console-2026-08-08T09-11-01-487Z.log b/.playwright-mcp/console-2026-08-08T09-11-01-487Z.log new file mode 100644 index 0000000..a98b051 --- /dev/null +++ b/.playwright-mcp/console-2026-08-08T09-11-01-487Z.log @@ -0,0 +1,97 @@ +[ 48770ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 49773ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 50775ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 54224ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 55226ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 56228ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 57230ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 58232ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 59233ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 60236ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 61239ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 62243ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 63245ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 64248ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 65251ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 66255ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 67256ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 68260ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 69261ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 70268ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 71274ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 72278ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 73283ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 74289ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 75291ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 76295ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 77301ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 78307ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 79317ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 80325ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 81336ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 82342ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 83354ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 84359ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 85363ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 86368ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 87376ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 88395ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 89412ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 90428ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 91434ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 92454ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 93462ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 94478ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 95491ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 96506ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 97520ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 98556ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 99575ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 100594ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 101605ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 102628ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 103653ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 104671ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 105683ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 106703ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 107778ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 108821ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 109857ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 110893ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 111960ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 113007ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 114057ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 115118ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 116231ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 117283ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 118336ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 119407ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 120553ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 121613ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 122714ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 123835ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 124928ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 126073ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 127177ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 128439ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 129670ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 130790ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 132026ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 133143ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 134286ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 137272ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 138376ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 139440ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 144358ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 148352ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 152146ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 156809ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 162641ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 166053ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 168606ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 171349ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 177037ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 179429ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 183147ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 188179ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 +[ 192874ms] [ERROR] WebSocket connection to 'ws://127.0.0.1:8001/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://127.0.0.1:8000/:40 diff --git a/.playwright-mcp/page-2026-08-08T09-09-21-753Z.yml b/.playwright-mcp/page-2026-08-08T09-09-21-753Z.yml new file mode 100644 index 0000000..5b7e21d --- /dev/null +++ b/.playwright-mcp/page-2026-08-08T09-09-21-753Z.yml @@ -0,0 +1,11 @@ +- generic [active] [ref=e1]: + - banner [ref=e2]: + - heading "AICC capsule — real-time view" [level=1] [ref=e3] + - generic [ref=e4]: connected — waiting for frames + - main [ref=e5]: + - generic [ref=e6]: + - heading "first person (vision)" [level=2] [ref=e7] + - img "vision" [ref=e8] + - generic [ref=e9]: + - heading "top-down (sensors)" [level=2] [ref=e10] + - img "map" [ref=e11] \ No newline at end of file diff --git a/.playwright-mcp/page-2026-08-08T09-09-31-437Z.yml b/.playwright-mcp/page-2026-08-08T09-09-31-437Z.yml new file mode 100644 index 0000000..5b7e21d --- /dev/null +++ b/.playwright-mcp/page-2026-08-08T09-09-31-437Z.yml @@ -0,0 +1,11 @@ +- generic [active] [ref=e1]: + - banner [ref=e2]: + - heading "AICC capsule — real-time view" [level=1] [ref=e3] + - generic [ref=e4]: connected — waiting for frames + - main [ref=e5]: + - generic [ref=e6]: + - heading "first person (vision)" [level=2] [ref=e7] + - img "vision" [ref=e8] + - generic [ref=e9]: + - heading "top-down (sensors)" [level=2] [ref=e10] + - img "map" [ref=e11] \ No newline at end of file diff --git a/.playwright-mcp/page-2026-08-08T09-11-01-570Z.yml b/.playwright-mcp/page-2026-08-08T09-11-01-570Z.yml new file mode 100644 index 0000000..6dd9f51 --- /dev/null +++ b/.playwright-mcp/page-2026-08-08T09-11-01-570Z.yml @@ -0,0 +1,11 @@ +- generic [active] [ref=f1e1]: + - banner [ref=f1e2]: + - heading "AICC capsule — real-time view" [level=1] [ref=f1e3] + - generic [ref=f1e4]: connected — waiting for frames + - main [ref=f1e5]: + - generic [ref=f1e6]: + - heading "first person (vision)" [level=2] [ref=f1e7] + - img "vision" [ref=f1e8] + - generic [ref=f1e9]: + - heading "top-down (sensors)" [level=2] [ref=f1e10] + - img "map" [ref=f1e11] \ No newline at end of file diff --git a/.playwright-mcp/page-2026-08-08T09-11-09-014Z.yml b/.playwright-mcp/page-2026-08-08T09-11-09-014Z.yml new file mode 100644 index 0000000..f574927 --- /dev/null +++ b/.playwright-mcp/page-2026-08-08T09-11-09-014Z.yml @@ -0,0 +1,11 @@ +- generic [active] [ref=f1e1]: + - banner [ref=f1e2]: + - heading "AICC capsule — real-time view" [level=1] [ref=f1e3] + - generic [ref=f1e4]: tick 158 pos (11.86, 11.22) yaw 26.5° 1.43 m to beacon · 3.0 fps + - main [ref=f1e5]: + - generic [ref=f1e6]: + - heading "first person (vision)" [level=2] [ref=f1e7] + - img "vision" [ref=f1e8] + - generic [ref=f1e9]: + - heading "top-down (sensors)" [level=2] [ref=f1e10] + - img "map" [ref=f1e11] \ No newline at end of file diff --git a/chat_frame.png b/chat_frame.png new file mode 100644 index 0000000000000000000000000000000000000000..6ec5df30dd0a35b2268f8b8185327abef0c3afaa GIT binary patch literal 2203 zcmaJ@dpHve7oQBP%^O>;O)<9=Gxuq38AGxpMnvwnO&T>*ir1}N5|Z2!Y4#$w$#qgA zq(b>xu4TE!+eQqpsqy*a`|o?c?>Wyozvo>3IL|r1^E@Zb8E+?fK=A+o0FZRBw{h9S zvOT4O_U+m2SC`QM0Lb6L=9DY7g!jlP5@rX#9p6--p`vydL_v&~Crag7+ashvo~Lcy zI9{&RTOc9aJZdRqv9O!=u-bjd%?oMeW^X@(P7C1A@cjH^7`n5CU-rcBh+A(YhF`qf z)I?lC@4w*D2E4}v21)!}>;+Tcx?|){-~QD^rT+iv(4nb*;|gYqs|NpFD`*2w*N-lb z5`*Z+@=lM797w$G&07Xoy%6UNSpJyD9T)#c_v%#SdnsSqq?+=24tp7YM{2_pWELyv zn4)%&W5uT<-*cQJ_MP|=3@XzTr5iD|3aVdBh2`3`LiS?v9nZ#%SpO&*06mt~h9?Y> zF@J>c^{kJ)pwhIwwAxg+d~S-{cbKnUrYEKq+%8)}&dc4uNPp9#tkn~r!7nDY<8tduzUH8WxRT=@Y+ zBQNbOeo{ojoQ2v!KN?e%)A$u{IP=ET!(@}NG}|F7l%5g8WLesP{URUyhEU*^NhuAj zr)A^MFdntjFfK>eN_SU@sXm8>InB-2XZGRc5g=$Ob$gxG{dFVf<>`?8t~4{o(YSmy zw3}dR<`E>zZHU8WZ*Of;ia4|VqMOM1w+~WvvZ5JBOGL82y9jPw3104Y*WLN;6n-Me zfO@Uj!nj2plaQ8HDML5GS}$(~AO8N5x;nZtQ+y0&cJg?{Lw|eTRsoE$QGQ&e@^{Qf znuHYVuWX-&>zN0%G}}ghEM*|9mqct($Dg{&?=`=NQxJ=oWwRTPue`kdCgM7_(_OYg z!%h*Ga?!(M&g?MRHLTf_D^%uqKU&_ffJgk;o!sc4cB{T0)?GJ9NeW)N{5jGxZj-x` zS$hI;?x%n+wEBbVN_(b;tgYHD{fkfgjoLBhfoRsG~k zF(&sae!&1`DNoQhD5daQ6}nG%K&;Q7Wp6gYKt(xuJ;uTsl*sY$6Vac22>w50{twL$UCi*g6fee^={+wD9b3I1Nor zzFI+1(ccuNCcdOBCM-86M;gGL)#g!(yUI{|>D#GG6eeKo&(H(yjVkMt387HN^XJg` zWex|BaHpM6V`OZc-)8Fg+bCx=dRy_Tw8Mt)x{^0r1^xRV5Ga(vY{z#`1$V70AZ+4= zg-EB5ld7js9z}ojptzPhS1jd|6(DvfFH0HI1}qr$pS2MDC3`LX3qD=BZG*n} zvrbNA7lvW66N-tt{aO?kh}~AiuS_cu)(Fo15#f&4Z$&?|((dt_AuxiH>b95ptYtqDFAWCMNL(J3#%!_^CL|nDN7il4yWm zh(o6mIaLulu4S7}GYgN4qO-IZTg$d}J}V}WcvfI6>9GX1@;x>93kbtd=EWNoAmAy*Z@Q22BMUEUm| zjwOKGubtSw|2>gJf(y>2no0B-B6{iwH3%=;L=|(d&S&Ets1Poh0mh9y|Dfl3I?nUQ z4|Al&*8n}$pc}(DBRA6N@ zLSH5Yvx|nVBxgQWM1wwS@^fOX*8G#A)+FYYZ;i~~7vz;lRw*G2uywYMBfog~tt)F&b%WnT5NFP8ds5f4@dTls8yV_Y>UTYrfAoIFGwLGlq(?m+vN+8Wv zdm#_DL=L4R>d)c*DCGg-=SLREwUw)p*t&Z9j%hcQHv)a~H2Wmi`mt~NPgL9)*iB#{)WLp8lz5V3uTqp1ZqkKZeeZAJ^t$&f@DQLj=s%lSFaUm(!lKuV4-;506*)`fxl*?(=?JB~;V%{gvvLAtdP#L?+7;%50clk?5Be9I;O}dt9d740a4b z(Hfpi66FYBoC>XV0!fmC4DKVff+c|1VsQy>wa*revup_FeXr5^<)-JdAbO0P| L@iukVzKQ<^4p|~| literal 0 HcmV?d00001 diff --git a/chat_map.png b/chat_map.png new file mode 100644 index 0000000000000000000000000000000000000000..99ba7b740e1ed0564315d6a941bca59c7a97d8e3 GIT binary patch literal 2159 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 literal 12459 zcmV;cFjUWpP)004Lh0ssI2`oL~D001y@Nkl0rVXZLESm| zf)B(}pY#EoT?SeLKm4`U1_BB-fi1yr&CjtEg{A5rijiv7anp6E0=p z(uV7vvFnx4xo)hqJp(ZOG1$)eFiXr8qht{a2#D_>iIYxl_$*!BX9fg8Km@@jE#)T& zSV|HuZH2qTyxqZ#j$wxxFL%QLTO$pEmpEV%LD|A)K^L){(oJXq$)s!+TLb~S$P;1w zWB`X*HpT>J0iV#tq+?9B8gr-xVX;p-OPeOXtb-(?-CRkqIeJGLGkg3TQZ^Ao7;0Zx z5D-A%37P9B0GL3COtK|wm(Bww1SH%kc*7Wmxds@#VVCRJcw-#q`J{IQBeoKOOc!Y= z7*T*&IOEKKhnfXc#{$g2kC*Xd2D}w6Ldh%%?3s;;#&|(e@P;wQ&WV+Frg+XmV`x}5 z_IV#apU_PTMnsOl%G_<=!Di6Z4FUoQ$YXWMj}x$jWQ&{Svej$Zz{W&cF{7L7aKop7 zHxYG?qBj=WLn;lgwox=nbd#cwl%nVnVKI;hBQPVY({-qw-4in)0l2vaKy-8cco;u6 zz^2-Qp!PY?maJVmrK>xb1szh(J43!BnYA&@mjG6_C~mR`S2#nL)Xb`m5tso55Cs`f z(02e~=okddE|X@i5#aHKU5^LwhHlAXrBl*olS}wr8jM}Uh%`(zZRwtkvsBS1iH;Dj zjURZ514TspNa}HoE{_BjYXF5vEG)s$fP?H;jnP(h-mm zK~SIvR{~&FFnEgOF)@DBfcJDyp_b5V7Vc$R(=H-zwwq{6RhwdI*y+~}ZP;n;^@6L` zSt~2kghh_>lrmG4qygNjA9<5Mm*-&xHojvY~5e z!)R}HjOR_X$5>|*mTpRiW!{_U%r())z|6uXTvUr~k(7QkpoVbBpkombQcjHJQN~=4 z5U@tem(m?OXgUs}W~evzIY=YM&N;f-AH#^H{Xbh|{HN9#w+So>`I2>zLAXgt0IZ!S z5bzxVK@b75eGSb-1MnLM@kkVmAg0=ss8Y$QDK0M1Lgsx7p-Gm)N~1ew%!b;!NtZC* z8*0d-gs$SOUmrM18A=nbirB&{%}}yX4y>|#&1?uTA^-w(1Q>Zr0FBUeaRm!TsE0rz zeDkBoj{LaaP*DT)~m)fUmuMH%HWVpaKH$C!c!;#sKi3DKG=4?{?6a#&ebnmkTbW%5|bkT@z4K`1(-#*UwQFajh|U$6J)Vy)sm~ssh!5J!PQI>SESJztfXybyGXw2L zzTQW2XZ*Ey?iPYtun<0dQQ}0Q6HR;CSz;KUS(u@-{D(h(ud}o+o#9Vjd`7J_vIqhO zW=D%GT1VEMD-N3+C({|mwxhz$A|?^`Ov??4_yz&XNsv7J?sgrX^@OekTpPf{R&P5? z?u@_j?%k>4(-)+4ONoyfL0OKg0dmcTXl|KVx~^T6@t^+Sy|u}gKl_XuXRX0;v?!P) zYrXADT1Jg;3dv!!25GPW`v#ryjRB6RDp%g<5Q48bwl3BU-4gq-2aH?BZm3^>_wH2b z>5DQ|tOaYKQZ^q&Ch_|NmI1iiwsme@)+T@U=YO|0{!(B@LEgkxVVr%7h^O*%S|Wg` z0~DV6+UZz?P-CteG1NB$SPw58aA>!jQLXlFhbcaxi}zKqb(UWLUZAC^V6CKpYr#^e z5K=MojwWlQ@YnQd*pZ(zP*2Z7@%rmZ9M0D6Lyx8s<$Da}q z6v{d_HJ81PMbL*VA6mpW1Q<^&a|{T2LZc)%>{-dpN+g|HObE7(&WF~G1_aAyb1z02CTbzU2<4X4J-ihufp_m)+@{Ngj{S&1}K zrT=di+3X8R0Y3yycOVLiAe7K?oGEC9x(~VB0AP)+a3|lb8;;zC2htfWQ0gNM@tuko z@tfa&@74v)mF9`&O4H;r-KoA7l02W51n~1g^9`HzO z;4X3waxw7d87miYMhltl7A+ORufKcuFyXBO%@Z9ankSlS(X9fmwbbH(3sJ#B6yaFJ z(SFqGgN50)oteAzZh%|osdWe3m%_F6TCl8Gi2w8l?;Th9%4eU^@xMzVEb%0?h=33j z01yPT(jbCGJuZjVr!q}tsx;M7YniGlxRhW_CgLRForyNO%xosw0QcT_ZKbtdTd$33>C1|R zxKQ`-jbH!X-7kIi863mBzL;38)>})1~3QU z-g|32wZ1m0E7its7u@YvjVPDEz_iQ_l!>gLn3@R z;NBXy)=j>pn{kd~LnP|tBa+4#24jG&f}Lxjq2?m0U?9XKC!A}BTJvf2O49~CW~kq5{GbyaSjm!2?!yHsOzPqUB8PmbZ0PEGIF!R&=eZt?Zk?w(O{MC#)>=!cMcuFk z)B0(76v6--VK%_Row;{+zzVpP(%VXfdZCs*h}r^#9<8B_#YO=ELcuCr5g|-mK?I0E zM2NJ~Qiza62=|yZMUB@Dryl~aCngd1+pUPBca)wPGR>ob3ONwUnwRI@xGS0^a#xx6iD6JJ+UwTWh71)(TN+RFM3a z;I>KxT%)hQd-qG9c?O1MMiVPYNmn`%$smnL2tsly-@Fw8#%uP8uMJrAa^B4q_+yJ{ z3u9a_vQY@G7g!HU>Jb)t&OFr0@Z8eTTq!=DJg$nx}-ySABXh=1ei@6@m2P@s_ zaH#V=dly|31RMRdDYCxU^DRUzAE zR^g&sW*~#DZWu(l5;*T|@fKR@`WhO(CSYUf*W_=vxxO_7jqa7TCenv>H(nWt@SER% z@7BTkyBaee<~kn+-NRv;XI<+wPt!C_Zl%o+8{o_)2~Qg;=`Ja_2jJcstu(Cs2-HR+ zNYG`8^_$;+@8A6KhplRWOul+0gcw3$1R^vM541>{z(UzuY0>Ae6KY)#a1_*SR-X~a zAG(R&%hwZF=G189FTe55-CGxyt5OAPw0xM|J|Cueo^(6S)2x8!s!q60wbr76mi3lK zlr@~E!%@7(*!0_audTGwR{exa>ADSYx@o}i8}Hoxk{W7{tz6b(es?S4Fwq!9L$$G5 zH2_@IN?!*sWfP4%sD?Ic7roZPixB4t=Nh>xr>p%U^}9}YKFrGa1aS10 zhVvW>PRZzvf;%%S-QHWF(#U#Qcy=^uGZMuoLyc1yY7|jNiz2{?L_RlsM2b8X`YpF zooiJ;Z268&vg2EC{Lo_H)J;-0UwG})!w1*iTkoFBrV>_WBi%7d!6GbO2P$kZidvV} z<@N8~{o)@#!|I0AIH!(~+FOmV5=BI#8#@p!OdzbsaYZYA4Zxa5+Zqtq?D%XcxKXfQ zE@o;D`TG7;NfkWRk`+8nH8Y;f0Z)^OSYxePbz7%Wizc+*xbvf0sMPZG(-)Tke*1g> zwYT0nzjpgmrT1Q1AI=-eB-#eSB#~v4j8@8WQ$ot)Jqs+dIon} zZTA?u*U_Qa(Gi8j*q5NI3Rb|=^yZx(&vU(X>)@%6WU8(EiaN@w(UlD!wce(_uH~(_ z|6*C%tG8buJ-+DghGpiFyXLM5&e9vV+FPYo%T#%)G*y|ZsG$;x*mx5s>(Ad}4!USH zUmLW7qnr2W0E5?uo;A^9-$5s|7}q5v#)$9@m2bff1mqOf=|<( z@BZYer{?)E%_Fx(HFB2diu4dkGnCCo7piB$zVp^!+z5B(_d>D6hNm#T^#Gyu`$+?yst9J6Pv|JUiJ79;scNjZoJPr;+ z<>{e?T2sZTYF(8M-BYbL0vNWsj&-UURZX?dldjV=-FfRLPhHH1!<15(C7Eb<3^6Wi z(XT6bwdhLK{++jea{HxELMr`m>1r^=z4ytw&ZV_7)v{Kuwa2fRDo+)?|D%dTL{*{q z&rkBbPfO<3zM>nx8sH({gx0=WW0B4IxS>m1y5x+%_Rd|cc&)17qI4;Z09p=m^4?HY zUAutmG~IdYCl?p<#lbsKJ_w;f*82c%z17l6i!uS#%AL1<^2$q}j4qK6NH9;GJNMdq z?X}igd$o##zSc68K3N4I)`DMq=kAw2^I`NfWH3(hmC;bc_=#@eB;xT*&4Vsi28>(G zus!c!PzCmd4GaFh3!|BW-^3&W~@u{D~28_ugw&`L^0i9miQq zsiphzTY*3=n9g-Mv-NiMm&vJ_3~2!fj$F+n0GuPNd=QXMwESc?(c3o$<8&>8m)fM& zlNL3tC3Ia%t@B*xL*zi}?1PDu4H8?r(UKOanM;<;9wMOWc#nb7R>$8jKxCfeY~agwG}RbTz} zcmB4d!uLXGL-nILa=^Bw`nJ|L@BAom&XEt9>afz2UeC#@7XdCk0iO?>8?cYYMv zu^7o1g+Y6+wEIP0f9G%G_ga|grZC!PxUmRm;uUAx{DCEWRRu>q*?<;NU;H6lb<(a$ z7RE0Ggl)0AUX)N`$79-(B~r*+nMxUWrs|22vAWLb@@^6p;zk^n+2`dD?%aFT0DGD` z`ME{y`u^_`z9N680=Hr9M`u!$Z`b*o7Ihn8~coVBNM0J zfSv7(fgdAFn=0t2cqNK)d#}PNu9`RQ{HR8`U1YJQQG;jImQ$H(nJhZXFRtUS=`GdX zRr80xapy-0uy|R0I;t_GSjJA&F90Q-p7CzcoH>?0*Q#eJyzlZ5J~%zOIi`~%4uNOW zq{lq!bz*hQY1uurHmxPXY^!$~mE~m^EX;`A4lafedY4|gwmv>t%>ZSV zmmS;rpX0w*y#2(R10#Nh5j&yI-LgFcuIYmxrsyvHx3Ma?JHwKHu>%b=O-aP)t%I97 zo=aQQYp=Z6U9W7YUd*W9)5Hr`QX;4DNl%iD%hImp?zz20)AAZ!0kc=n4=O%RSJRlxfE*WSJxDNM{mPb2d5=VM%! zREzYjH-1>$Y*TSd=?WW9#x`D~aa?}VYiviEUi!dzt;kWI*Ps@Zdmd{xp{P%xhCY+}6AZ;tRPJ%yV;j^6OLe|&DC&E8huyNh44*v4yc z8)S(90I6jrA|j^Y{!dLvz&poqznuK8ee2=qk|4sF>xlt&3OPaWfOh%{^JLllBtFAH zOe5u$XPB;_iyW>^8E2Q;fQTI%rke2a4FC`xMx~B%7TEs?o0Gs>kV4_U6AXe#Bs#PZ zRcB(*JX3m0=yOz1rf-aI2ahuB2nQG$zs2?>T?Z+npczmFG>#_+CGpO|)nc zve_)i7WceS&8Nh^q3-|kt6AwQ``~LWc)EAiqF)wK?B5?*fc$cVlLzMV(g*L~7JuIz z!pSE`pY)8uJUP%a=kg^#{My0OgD#H;u$=Cl8W`Db?)QE(?Xr3K#x#aS+`Q=YZSnWr zA)I`2GK-R5efB`ln9oao_`_To`asLox=9;{dG^?3v%7i8xoaSk%LW+E-Tt|s_P=>K zBv`sQRY=97;k5Eowu3&@mfmyn%5$G>pBo1S7Nm_M)Yn)5XHUv$Bb;l#lZLwg%O73I zP6BkF@3_yek|3ELdc#E1CAug0Vu!VAH5MKftX8EgHv6EkhI$rNr6}6pC|(~uhM4wW z5RZ0;v4<~-xt}cdi;_J!tBw1e4X17XC`OYmwXP8tUVa&CI&|@QD2$`!ej`78rUCbD zovs)g*XM5^GBfEz&t_;wc-T-88%;{rCA`mP>U=zBk1CEiegfNcc_DW1V)(!Nwbjl_DAW0d|#P+PnUAD zZ8;uVp{u_#y++@{+lP7m!fStI-|f_G0;Xg(68K^BS>UUmdsenTf7=@875#o~`#{T; zQ7+q4iR|6H3Vf1n(G;Lr^nSqUK`b0?}b{^tVO5jo)!=h zt*gi;+UMoyz1g*+t=aWw{+Z(|cHi#j9Q$df4~Bz?Ulg7F2vhINc?X5Nc>-g}`zxrvn6>d4${ek1|XX!F@9=|uDOBon*e#+IJ zpk^yAiNXUeS5+`>VubXqn?sTKJ!2A1a4~t#6GdQ50UE9`&~9Dem?9-TyRLm*TeaDf za%Gjaj))XyVU9n5hS73b_}==uwsmdmY9H&{wyyo`w{H(`VD{C17jvBMk${YL%d*Uy z)SgL8iNb>}R|>Km(m1}28A+xn4t)GJ84tz9Enj)@S)b!oFYg(XRapUJEbbS%^_V5) zwcDRsmbNZ!S=+MP`p%jku5DRY+gZ|Iw{MBT zeC5Sw-?tq?yb>Ndx9YadgT;d^*YUv?E`@yUyj0bMwaKP<+zTP8*+iT!yo}b-$pm}T zXIl3QcUy0zl~P*irL@whlx11t%9P<`wa3E3m3xotgf|2J<_pHWNo`&Gvb1Gcmt|d+ zwj9^v(w0T7w)yAQe1evA+HHiWIiazAe2=V@Y&%Mo@Q+t=HCD(~JLFYc@{Xh+ez>sXO2OiPyEq zITx37QmLFT61LwV$=SEwI=8j0YhTv3EbH;O9+&mFtjFW}+U-xR$D^WEx+dl}j;;5e zj+w`AVQD>?=g{$JK-slb9DlTG7I$du3V=sc_W+B|XPj@3toMo%zZZ$#1=}Wuk@OIS zW4Zz>>bGs{q7#0$#%t?qqiLnJ_S$+~d#$at($>~;A>$fX-V+kN`tl2R-ukhff8)}> zT07TTYU@-k^}*aDX6|mx*WJ1+O`Ew8@(!n!VPZEbCBT|J0f{TU;k;yB;&Sxj5s zhh36(B+{UbH$qYSbD#t`o&pdacCXRO8?K)@%d@ZNCVe)V(D{`>!Q zS10amol`Hx!`j+fE33|Yv*xK)#vuOfmtVN^-5+lNE8S65>3|VcAeRGf$K!hMxZHmE z1@qhMx*F7VHLkkpIcRTc349V_opJiBpL@1-P7N})oZ=Pdd(w>AQknsO(2}g@p8NeP z1BNjpz3=Rf#^Wr%<9)&`;`agEZ`USk6Q7)!*Vd<2+S*&~YwKn0rRa=C#p`iW`Ic9J z-G1qXH^2L19+&*`H2Gx*sV2+LQ~~j8d^NeDG4ryT>wWd*7uvF}>*92EY0cv5*y-!& zU#SIRpJ-avW{Hl|?J&ZQmOaEiY0og}=!SYkSW5Bi@}Up?(lr1luOM5xm#=<@R=iBd zUwQFay+MMe6xK$o&hfhTQd%vvTGjD>TBK3MCLkcUU;4xwcYfSE_gNKLYAsQ8cg_cM zN^}ebzjphDRYUW2U6(~8?{!(%Rkv+Dhgs=1v(K`2>m!`kt{R&YAG}{v+y2h){EIHw zh5WWWP)hmGhyL;Xd0ic_jG5~!}acjF?|Ox~|$I>g%$&LDqiN zlIU(QFQdDxHh`DLi#uSk8}^8^978FAmJ>@JEeQhho4@tjov{mcL1w&o`WIRB#G2X{@Aa5%x|9qg|HHoGN$}4#U}x`%d@Bu{@Z{3k?;H!Ud+1E z#Y{i@+253viZi}!Vo~pS7+_{DTwi(V6Q$N~zwyIbAMEnc#-D%f)4jE2Su_XMS~JUR z@?CUiS)A??S&_D^eQAAh5vy_j@{7;*E*2>9&P0m{SQwQetdIT1Kkovau`_hR!^P7q z3Yb`k%}QUb2;}_%|L*U8eD@3i6LLX8=>?^b5K6IIj7lMx=0n^MD^?oQx7siW3frm6n?-p?f($>?(JolEV#-+t*6R0xT_ z_3i(B=`1^+|0A{3%kil5kT&h_u4_}z>)Kt8%VLb%vaBN|V%qKN%1f+`m1_(dGHXce z?p8!Ze&ttxy)(pmINa)tU4UJ<={E5wXNut;0Prcl-E!;JFYKN{;DTIGdOH@Bf&o|x z0cjQlH~xb?D%(DzZdkn$yz<=g_FvD1WF?>mhxtM;y0t22Du@Mu00@M%`JTGC6|+>v zWq!-OW2v2*<~Ir!y8Y6>w7DbvCulBJn3v;GdP;U{2E)5UYcSUA$8jBL5Zkt8X~(rM zOFyoCS-YC(FMrm&?{<7igyEwf{k6`}dhZO=bfIFkocu0$9`0|GL%bT`TeqIR z$-FKSAsz4C%N?r7WM!*vnPi(uxN8T6kxI}id8{?tiH16pmX21MT zf3>r)$UNWb49mK9hQ1G#b*5UMblUp6@#K~5GhFx56$C&NpB|0ZXb6G`S}Idzil=Bn zSZpF0t)#L0?c(j{mbdUeU7cc~6fT8(A)-F|MtaGR&yrP3HTx{`_dowX zX|~zR0PBFnx-RXwn0AlH^>}PYL)(r^KQ8^a@^R%afA-mDp7}^;VTNfwbk-3wyFH>O zq$I3yz7sVAL~1CpADFK}>e_&Jr&wTC`Ra}S;6%s9GQ6@TK6MMpP^*HyFrA0*^mZwI zSih=_J9Fh;dYTH{t|KBuqLOQ%wJS2$S>2>C|L_0%zw&(1t?8I?Yc?bm9#;Wx(B514 z-ohXI&EIW|&pgZ1bRdtgMDlh+ls8=6KC66_O?KqhvCr2B41v}Mh(vFcs`ZOnp1Kn* z1W`m0)RVxsAb@OhUf+Ih`OZ&gM9}Hh0ASqg!ZY!OqOeDpx%9%7OJ^!nN+%lfwTu1& z@bJN=V=V}}INa);dvEXk{aqbPSl1SV#6GaN8rNexF74j2AD8xPzy4dtRgSCBbn9RJ zf!6jo(GBAuD(q0t!v^4SOCGfJ@YUnzhXibnLG=DjDb!-4JVeZX`UP+HH?x4S-a=QH z(0keN%5%$i|ND$EE>!~HY`8k5LMSe!F!xd_kJ;JBT(RH^-li%=9I#R5&b{%ir~Z-G zXZ4@`?0;HM*GGfQW?( z#+60l9~p@xHwNq4QXLPs4!uL~_)8!DNV8D{K$<}Wi!2S+L06aoN#b_XoH27GH}+)N{AXI5I{p6(RAG+7%XDPUMT zy!!l_46>SN2-p!zkCiQ@V77Ng`%p zk=_-s7UMZu+ks`3)&)q`4!56QV=O_8uK60yX4!^};8euPN~_;R7S!M*B`i_w1{v31 zZr}#dsY?zFg5GJx9BpZ|d=4|K!wJ9ZmKpqB*rZo|0t(8@A79@5Z*ylrfvHF@Qk`)g zq;kOEJ~#lUl*x#C^dckZEbH1i>gAd=7H2F=gVq2Gy!w1I#SiCdc9`-*1_szD*jDWb zp)rPdCNfzjUw(+*Q7kuei+9$XgoRD6V2idkhI)^gp~o$tLcxT>AS7fWHrRUSx7*Jh z5%Jr937w%b)-I)p&1g#EfOQ5gKn%dU7z;Ll#Y*tk)iM>m%i5(gsC-+8rO6lmkdam; z=Shq)Cddo`19lIwat@?%CttRZ%C!r?g7NU-(cBDRunsZkBo+(+DrKW<_z>(~UYPFd zHGHtW2>qodTtE>*V$o^C1d&i~KhKEp=3kXspmwZ9lx`t0z)8M{P%EZPC5+)Dwbh~E zg}X>+=p9;@<~y(bp;iY70WgceaIu3iTd2DjXDyF z-RcFPcHWuj;Nh-OdWU6Y9hz+ntwU$|{2#K2aQCbQh_En#Y#ps8G!WfHhxg4Q-gJ$E zacCNS9QC16SG(oL0E33mqkjwFF&BVnmO9c%A!T4Fx&tE4SV)BRbA%8aG;j;&(3LBIfjnzV??YuMW}oG}0b3u@I^4zkd+D+Hu5 zH=z~U6O!&ADlJuTs9BBhtIszC8#eydUlt!!w!cn(#(5{neJ~6Xy~FL_gW< z1`#39kvIbtP;1nzQjWYw zN+JP*M#}&Y-6Q}|DT@#a+Z>*HpFh3$#cx<5q!%Z+pb=uyK--5rr4`Dn&r2cq8M=ra zO7FJos$~~9j0*KZ(UAk1f?*RzK}PG{BoSbCs7b+NH3gH;C-Q*?3~F9QSj%_P%@oBC z-DItd)j6tOg+Kr_U<&`$j-rEZ`7JlXAOkSl^Et@U9IfZG z0B~cLcafC)U^E>=ikU?%^Ucpo_ecN(fJT%cI9!FRF{2CxZ`^GpBcrpM z6)ZqEEM5S3bb!GFF15gyFb05#u0a5Vk{;8W~0JiK)27J~Bg9rdxQr-VL#`{>0 z+s(2J1^d|1iE4R-&HrBl1`n!<@KVMsC?F)}U)|$+wCrBitTBX%R@WPMbJRoOu=6%}5b;zD9=M^Vu-K1|EjWw=!%sZc`k-Y`aNG!EUlgkTrOVd3cBFf3g?~ zSq18VVG9^Y!ahG1y6_kQ19(9X2!Ym9TTeLTYr}(XnY9?hEVhU_T8S%~QtB$pH<~R* zfH8dVNhT|$J3v^}2TQWOJ4cI=nbFJ!c(I(AyAkkC5g>#q_AOw<%#VXEJYK*68f5^3 z5BmxL3n5zUN-*e>76|~7cxP9JLB0eqYylg+vu$aI7%b)?5J8X*RxC^IK7%xh z)?@+N=&$yJ1qC`A)UgEsSGg^@f&=%69~AKDDS-%TAr4r#N8jk>t}+0tWC1bIG7vnP zT-E)TCj%G&!X>j1fL(Kl-bWgY&HKj5Z@!rs9jb(tw($n)GaCC?4A%F;WFF*kw4$|Ue2p=rqBe-DY-fo{mxE@uJhEz`qtu9X% zurBDc9ST?qOXaKS4a1C%S?O@lk}iBO00WpE69FL+jM+XA$Vzm)sodCgEpI^#{%LfWDfF~8*Aft~vXe!!O1K1zu8w3QTOS%L>Nkl3b-@iXJFfiEPKY&2=_xASn^z?Ric6D^1PG@_2M@viVy?ZT9P0fvs zsMFNYfI5x!^^I_N0~}soR|l`HMV-2un%e5>+N!FWs;cVB%Ib=Ws)~xrva$*otgNJ@ zw73{nR8#_m78e#4K_JkAg2McK)PdyX73AjT=j7yNXXj*Pl$AoSofn-*$6ya&>ZYaddRKb<5eo;kK>qEn8a$8ykCT>zh_q zsAFegVQX$~ZDxi#R;H$wCMK3fMy3V^CI$vK^!1H(b&Yg&4HLD6wY3ejwe>YLbTl-y z)zq}EUDH%nR=;{xO-bpRqN1vT0_v#9%PY&tq0UuVStS`6)KQd{R*;fXkd%~{l$4W@ zkP{b|5fhUZ6-6B>5fRB>ev!O#MdHd8@ynORg@wh0g++ygM1+KX5fuDIK;X*7iEgQM_;m2zFWAQ~dpPY3cVA_>+T?Nj+1Pyp>8Q)kA|R93BwOk6(h6=q zo$>KHB0rt6>Kdal2v3TEG=q@_pG{SGFSu9wFyhrxZRYV<$SZY9%y^P4 zFNO4=ct3)~S6TkVK=WaAtWY&{a*AE76DQ3Ms*QrEBG3Y5nM_2D*_fTxq)wh1s|vxv zEpr9Ck&0nvM+&M|=R}d*+Cjr{lpt=wOF9^8!}av90-Rt<^Tv^miLYRgzA6^K@fH>CQN1NwQI~ssiz4<5jVb)6k#A z3bcqd&jxq+)UrlKDN(E)OT{7aPsk%`m1YZbB~nGRh!^W3pw)vDqh&`T+bKBTiWKHi zOCAxa%5kt8Vc_yp#A=k(E^CLflGr;*lI5k%br8E~@`iG$vScx&-&Rau*UAItZL>{Eaa8@}fmq^C$p3ti&B>n;C>}akb;zq2jLV z32ESi^T=!4u{qE3V&s!}r~=uX{ryE`vUClfN@D{&TQLrN#n1-$9dlcm?-o8%VWfr-&F`4Z$|7A`YNpvNyrPW=kd#A<~L6zEFE^fu^#LtMaHg z4dIy-iwguhp^LKNM#r|F%4?(-m%*r`hZ2e3A>CWN60ah6N{Gl#Kw5N__(FcwPP7>< z?s1Z9K};$7KxE#k1DmwL2CpO=fr)AlfU0v_jL8X7_5?|qxy2hjgQThJzr%4<`=tN2 zza-9SClw&U1zv_@Ku+rUTq2eUUfCrYEB=q**Xkm z=-7!26JPqc~BWvUAP3P$Tkk6ws-oYI$nR;=`5T}IBmzpx-T&|MiU&Z+=}D( zXgPjidVs)_m4^DIa*&`2t%{UrC%g7esAfNythT3<+kGd@5I={aTc(Q-v=eTjkVA=B zO**5ra#`ts{zTz9X@Ri^;x4)jq?xRpG(tR~!to2Vn3K{XZ)2i-Y>a6`AQDo|#8G}~ zCTG?JWG`uu#0E$#(&MJc$eG2)rN%F^NKVSiM-Ip3b(pZfaFx3T8;)@}W6G)`D1UuS zHKEpIiQ@&Igg*apQq-s^w-H>%uq!sP2cg54TB|@vIFj6n-_MhGO2JrPHF@Cq4SoW+ zqN4MO_$TqE0x=;8rxPlrR}>x#*us@`YfhxDshJ6<2wpXB9s!j&nP0AkA6>P3Ig)yW zVJ^}ssC?^IXBxJox!6N3WoLf1OuPhhi8Vo$J6A|EPA-{C9l}+-oz=2VGg-(G^w9)H zj%Kq2SjaNftA^H$g4sG(u5Z};;+$7FS)6Qr&|GhRb5PDXB%@zXKHy2-Vk7SGv$rWL)E0ZF)nWXiyT^8s$@JB z>BX8&m-M%>t~dH$D0O&Xef@>qcvD~ik8y9ResghB^JewaJ1?jV-VR=GPQ>Ij!z|W9 z7bm;dcp2vW=2HC|%DRT*Z((gI}=@W+-Gen5eqfk0-XZ-<&klBW|rR8b&A`;Ze=zsuJXIp zOM5xQ7OgMP-h0sttf>e&(XY?Vs9CQCt4J=@HDOMg>@^RpNOTci=JJCdA#T3qOPmun z7c3C$H;KFzUJyRRUnzLsnzHj+b0yC>msS@sRZg%i@01Em=++_*|CC0C}# z2!#U50!o(kZ%~d#Bwi?UDY4FLb&G;bfb`4&W4IaTG^jWM|Wrd!$ zN{mwz>D;f918BCK!`_hIhdDOJm23*!r+V}fR@?YO@uuCm*qJToS5-IlHmq(^&aCj) zm0m>O_71u;TlLbVnW_0^=&RIOSB;BVR9o9Y?NkflT`rxXN_N(%9wXF8PwOy)6?gBX z>J0OA-|l~ywi{U~JkPaK+rtz2EaRNcN*)B>e)Fwk*wcg6bN65Ol5;=zJ~7iOA}!FL z$L$CuZ&;&^s&9*Ga)O=qSoiGOZ>WatRJdH8F~3^ZRer@bhvo9(O`g5+fh(_W*4~-s zuB{(l$#_}lr?)AZ#Q*r&TbFwyo^$R&cS`g0w%hN}>;#m$FH${m(M^51n|!}<`J#dL zsM+IZBq5jPXri2(Q)zc|u@BZx-`^k3Y2J-DXj<1P-5*CZzpT0_yz$EJ&EpmQ-NNz1 z&48zGCaF%p>Sk%~!?=Hd`YtoNsfEuo=?c{ zj&|R5le~NEwKwLfqq2+lbglPWbDwc?@8dW=+ckH|C+?0Fc$`l52Gsdb%lP82`q00= z%eLzEtiXra^)Ah-??V<}j$j}DWWN(j-e;4&h&7$CDEvuSjm2>MX$6r>{OJ2rbCD=rZ)l{d>TpGtu9pZHk=kA3bUq*w-KWR>fUGck6;=SSVdJ18%Yg=*d_p1_wCd1W_NU1k1Vx zYfl6R%Y?)U1SR*_+e`$;_5>uZhNP?phf{<`Pxz&;24n_@W^0BNxrTry0_6k(Nnd+a zLcHmc18eI7%UAdalf&~U{0bn!Avl&JGM0s` z5i~pD%&0rrHDYEWG;1OpLE+kI5#HqL2ZsbAlOs1Kyi=2dx-}!pmLtY+BB2xEQ*}Pm zno;wsp?#}S3j&do7o&Y$BI_)o&4MFw;E`K0(S-2m&EP;>w`h{y=#!^n?yZKkLSouk z!+R*A0jFZ;UPm$F#xk+RzLJS$vy9~kiJh>B;+c$M5sc%KjXPTyd-13@R&Xs=yVdQ= zUYy9O_<}sQEEhLPTw-u-4A3oxXfj@5Fa8ufUPU(MnqZ8EWsG`Af}CuEj#~o7WPzl4Wn= z-L)itw`6avWZ%8SFu|mVl%yH{~6n&3&jZ0W7C=?Ja#sg(5TQ|XW3WS$fm^GAXiz7s({7C|eMR(`?W z%D9OJY>BFC8A>S$PxnBBg6Zjd>912jZ{VQANf2W}>QP848hhH~$@F8uG|bR+?5QkV z_ssE>OdQJW1KI4imf3(lN38vDYJlehdTSAFW zAU&~^0{4A4iOB*FA!56}JS$|Lj}=%Cly6_3f15H>`v{q9fdq%hLH4CHBi#$)LUZFm zxl!z3zfee6eQxR$IE}I}LmR^B4vF3`RD>2L_GP5(Lz5|sBKn}da?nC6s2UV%q+L{B zpBFe)SnFO`2`p-7FUk&u=1dhO^cB@v<@L!G-Lop{ohsI3FYX2wk64wISmhunOYX}R zkF%G6g*d_IJr*AiS^P~!2Ht> z${Svno7I=^vzKaFRg?u+P*PRQ^_60+R-_%VhEWt%z(M8yW|i9l6^`uX)1cfd*1-aJ z725k!n6Rfu$I1z$r|xOU}J%}9*bRcBMHp0ig~O;qIvS3C4ohO*btEmsfW)Z8el z6r`$_G_QFSToc<@^H{EiW4UG@r#25-BV%1^t5dCk2-6KKm7}UV^CsZ#C2wA;8h5;E z?MJ1~cYOV+svH~Y&c3V*4y$ctujP=hBsPbmC)ZgPpMcm&%+l)tbpKjLUXYb?c`zPV)`fL+`YUsN}v1IOGb zKi*$KOkKZ(FeI>v+?Q`UZPV2A=pH<^d8WSkly1#Qj|y_(7FOX_5|0x!oQ+(KE!>Tj zZOAeqYFp;CQZ>plkw(c&!W~$tWm38s-WKh0X>A=1txZ(-cs4q^bn31gbUf2(Q0Q+| z4sYizZq>2rR1>b-rRvhT)D=tBX&~Hb-ruR(UuU_|b$z?84xt)ldB?Q4- z?@6@&Y{`CLc}KV|v@Wf4KDBQk{8srvb>&9iE#0m}>H+gh1F6(~ZxF?Zw0>nL9uwhPu*4cx8h3=8z^&w5-4oG5# zS8&|f1RahEMvRBq zPVf#q4A`8AiI|8x9FJ0*JbpNwsyLP~FhOoRnG!LXNidntHJMW~kykQFJ1|+YIa$Cp zRirpoPB3+g>ru6yMn3O^qsOC~&Eh0;V4EUw*MU~&rdIciR&P2nB7%6pllcB+BK|Ye zqg)ReJSU;HX``2?$2O-Tj)Wh&_PRc5dL(r?GoC)xG~@AzV3fx8@#BcTMLrtBq-t>9Mz-ED!)jm}ln{ zX5meF#QIMjU4C-%@l4s_6eJ>)YH%)JFVm?>Uzh;<&Lwn`&X^)n>QW*Ja_w@!L6!#{U49}ouB-t{zCcE*0|J~c#1$GFC3IF zt(-0Df6O$24=ge!cAkX}7%%exET+t9e0hGT%%t}!y|k19v01BFG(^qLWbM{mj$pOg zW!~Ov*^FsIjP6kNxY>cUOBV^b`s@i}Gn8?KB3R|e(4+7Q?26s1=W>r{fu#;9ojFvB zF;4m9xhER2lLU2$c~T|WUJodg7`<>O$&i!QVW`jaHIR1-YJ0e=>^Nck#K)4T$|B~5 zeebzgwrkbw0u{gk9YGyh#rmqX5y-V7{ek-G_3^SBhz!Msn$1Ubj_Z#H8fu?DY4O85 zt<+ezv(OXAVKCSTf3`A|BcG|%RR3aqqSE@wU{k}Zr?c&0N2jkgH|{-K9Vs%n-`w=( z)%F4+^Xk3k!#A&=tv|Vc@7~c70E>0j8-vVZ)(3|fGV6=azdGwjB*i-CPpV-t7eHYK znG2+LUY!e~3uK)SK9guMAHtdsnGfZxS)C8#?P6UBKR;%%5FxM(S%?&Vxw;S~g2lEN zEkS0v7$Z}0G0ds*Jg#1xvJiG&T-O8RyaaSbxQWAcXW6hsb#2_1byIXy}G(~ z7$>dnydV-&#G$SMXeP=K=H5~*>`?5b66BGa47NNg?&}UsjFE3P= z@I#~U2jOaGhiV;uzk7J&hQ*B==0-+lKh{S4Pe3dCSwHc!X5ytw|9|!qQ3Q3sb))wk zDtq7Av!5$vW76=qf@~XgDBtJfW9&vJuLc*l~W z^el_zREOY3kB=muAA^(OazK;{O9-W;5WXhe8L&N}@%9Zlx4zcQv$+0NU@prUo}0kGo}$DLG{lo}cbIAF>ePIHhHt<=QN}YVP$m z1cKL+Jhlpon$nueP0*Ip&PlNn0%fMVvxB&DugD<_bLA+Zken1D%iID?f_?KGsHhM} z5oAVNTjT>F>wY67?)M4#opc0BVE!x~zf_m+@%ZP4B|Zh?Z&b`cf$>W!{vHy8g1#S| zc&{{nPiETNJN=&0w6L)GEK2bk4F87$75_&7_+35vtH#{821xof`=9_pc83yq5RR!j zwuxu?mw07)v&MiWeV}q@G-WDsMR|;@d@AhiyolEDUW)nx^;=L zWV1Gs*J_Tv?$%n@T$!j0u7?Sfoby%WLsBtgCdFfMYHc!^+{QWg1bKzpF0{_}# zoU#<#QoNdmRj1!*^7r&iJc zqn0cgZlP{?X&(8wEh#fIvIWVvNcz&VgQoZjz>m(#v1CMBv9M+Oy@j*nhgiAKaAx^h zMW>{J+|sR})kElo@fz$j(D*_zs8y;>2GE+T0xD!xGBE?P#tU~_v4+Lth9OI#r>Ho} zd!3WmD+g}X78log1#wh8a1OGmo>f8Ey0&;-qJ@rNVtl|V{5Pz=1$?)3pPrg}^zGc) zmt=jPJL~T5`80a=N!|XV0krqH{lhUdF!=K%T59T_PuAb7+rKI;EiG-o%%*)8s9IY3 znwom=b84t^l@=7Eq;mQ0!0zt-w&7IS%tBkNd7H2Ym1&>=NQY+_?C#^8G@Rx-t zW2P_Bj9FKiZ4E%<(El$Go@350>Pm`5Y!WiwskK_Em5U!xTwgLZCBS?oC=KTYgHY1}j%?q8!xH!P$x#>KEufl^TJG z_8S!&-&0W%u={-~em{--dsO@siSN_6&CUN-h`)#4PbG7Isu2HZX#NjW;a_Frd$IXd zJfhh6`+D;Si|N7mzL-GgmVB3h;Du zs6hF=WS}K%yKTfTyEhJ-rk)`NKu>YDQA)2TIgC_3iPw~m(5EnV_;oHUo_TaVQf)*@s5o+0f=BrMy3+ z%E)nN_=W^M7je?|u6teWQ!xU^mFBr2uq2@Ustt`v7B3+-X(YY;vZNdR3Gqh!PMPrG zIm5EX@X@)1V2ptg9Q8`)rlEL3az2?PFV=}TJbgaa2ObaKxY*D9jSbDOh)qqi!lguA z=e=z1*J}*Vfq?we3JGr)CT%RJ3x8Mh_FV}FkY)G)!e znhK~Y)X#JWhZKO<&Q3wN-NZsOa^3eW*W8kUAd74t_kC8#;*Jyrk4RSDpOG*7cd$A)-=rKp*%f9uJQrhzcZq>`^#X$Fx>l@`AOsV=M-OIzp75P#en}zqM z+&ONJKnpgD@}1X9s;7mDXyHrswYDXtEkQQr&#FPXzZLb(?>VavSouC@{}T22r`Vol zW#vCO4e_N6{qfTNy8{vK?w;R+?7vM$yceKfgDlG4G&MB*-J>IL`@H9DkNq6o30_s!Uv1A2(sM%ouEz5)z2-5K2QsP)0ZPsM4yvoTF3DNF9! z&hRBSZFIW)WP?QV<>VVL(am@)YP8H;wQAT_Qn7d1^wKQGdJ!2OFX1ccHp_(tnO^8q z`8;;eH9d1WOm=fns9m>(d9#3!dG3_r)MQGCai|_AXlvdVFD+Jfr2rHu1O@45xX*BB z@m+u-AuhM~Xo@Qa`&M1+yv`Tl#qCnAmx6#CP*`UqIbL~hWVcP_;4me-dy7($KIeq7 zwa#xO{ZPkS0_Oibl72Qk_TxqTr>&!J50br?t0;h$mi}>uzIRAJPL##PeSfIT-#_@X zrqRcC(RVTW>2%reGxU9z=u?LNYs~Cx0R5m<6%{{2=QoDUK3Az<&YS)J+9LWEM}Mv3 zF%#?^=9NFx@nzZKfnwTKtPf_hB?D@d>17Q$l8WfyVynFgp+UH`h1`aHrk3rUNxTMA zNXW9BLRgJbyvoo6yky->?nMv-^YvtQdWuO^lezqn0=U`OJ{^!$ambX-7APGR=>B_-z~sEOhcq9wZ3w2-VD){!Lj!Dpvb&suWN zr)Xait8vUlHP!K~Cc)}w%guE{oJExI-8ka4uulauStm-+>jX-;zTNN}TJ5H(rA>(| zQVz+MY*%*66_do1t~_y_!RXbq{t}QbB$z%VS2n))@6v+*lB5YA6zkejl3^g*aXbX(j54q9g8-S>$*S7tKoC=OFGd-l12fa7HG?DgY)=rHYi8 zpi3&%rF0G?T_{+RXLTpdZLBg+;=~ra-8@@q9W@N0C=d{A^&9Dsy5g*-2$vruDQ3OA zXJLfJJ{6!gu`$1Zp3Oy)+p)DciuO<^+Q4qF&uPB2O$qM2WHmcHPD4m^j868HwZxhB z(|4cmBm@wc`HLOAzNPkxPSU_#1-Tora;{5}MNUF%bAK3@jK2|NCrD;OjX`v~j`r^! zZ~6(gdT^zW8Km0oCLz+ChT*5v?3u@sJzZ-GS3K><%EGcp*WfIvTo1D#-~dW>18^8O zG&$$F3Tn(QaMx`uD@Ik$pdisXG&9%M&Rv-Y0;W8j?IQ(37D1a$$5{$4i zr{PS7a=_{z2Oy0o8^b&x#@^Xz%shbZkD9N#EuRKwe-=zckGQ$2=GRN^s$-ojP; z#J6a(W?_DXqy8b3%8qAYcb>Z#(#26)R?1*<(|c$45zPA))^9#+%{zYp7jP5s`upVl zz7LDy<9jRi+rk#L72#7K_EY=yr^GBOJyr5E8xr1|upe_!-$rd%Smc+h623(3r#UE; zu>Epj0;<>ltNrTmjfDv}z8-n{m!ADAl5=9&jdvRy0(h&i>)?lMLH3 z7+^8X5Ud)1S4!Di8tgum=WkV+o?xNXIV(OWq+-_E#%gR6kRnF9CKgvy(^!5xFqBJ3 z_>A$xz6%KwJcectZFDO0lpHnF_G`!&7Gh8h+t%s}<6~1Ll|qxiX`?tUMcQe0wK_l_ zE@`~bfXLaLYp00lUwe1j6k(jvDQ%RoIhgR{>aCG!0xhwK&uCSMcz{l_1@vms(G3VC zWXFUM-mtMPGr{YM)AI44Q>WIfDVeI#6i=j>@Zn52K0SPtrcO6l%rE3$meOg~b4)EV z^dOQ5k$CJZyOWxn#Zf~sw$u&_5i$0GLn@8j8H_NDd#xAbsa1K;_OPCq*u|i#sEhXH z(t?Pp8Ul%5OW&PU9814D$8|mhtrAXxh6$UP2VzRC4h3-;o-K<;ckJiG#yfDkKCgmD zpe9XB!W7@ec>e4*6*Fr;i9Z7bLXU}Fxfp}NsM6vshZjeRF)t<^`}(vCo+WuoD3IPT zmV;bjwvY4N6a&t2Y41EV_8JRARZc>M{Ct(T3vfeLCPwN{CdJ{V~?m9&ca#G!J@o9J7ObY_b{;<8~mogfRlIQo>Y@ zk#*ap7sysO+r!B-f!>RQp;s>L2@GIpv2?{mYfUq;H^gH{BLZ)6`sk&VGb%s4G$QUr zPz8{PBRCUAM0hGbS45=)%_#=GRSaXK2K9q5P`ijnsyqueKq5{Qu6At$E%~wS5LgLxnIxvliR(X3ub}6o)5pc z^?D&%ntN|C{<_`XQnER0Z#m6nYi}hhh&?>^Y@UPd4)U7^J3TC=2fO_jpB_9LlIA&lK6?G;;fo3L(!-b2E>90% z%?9zjeZ81;^X=YhLFwE5joPPg-)wjD934C#zj<`{dZqN}?ZK<3sAw~O764nO1)Xx+ z8%H4voxG<7OK97NC_D>;MWz*~z3ofUpM`a?r;) zQV{QL&hTtJ1J`=3j_81Mx-%wr6K$kWn7^>o-0>72SMk&Ng8`z`lt{Clb}}SUh%mJb zSH6JcaNc~VW(ULZ!k$j{P`f~22>nSk5h*@Z2Pea-ISPbk*Ez6C0D1}o)yit;Xs<)0 zQ*i)tt4B(^tUR({f$@~3Xb(T~L1gtRBRw82Km?=|4bWU&Y}O_7xu z6N{}{H6bs+=~ITm!j7?-Zi>L=l%@vbv2k%eWJyq6Q$|#X*$#mA{fOQlxvjrZD*ah^ z_Qwkwb$NedtI?-Hz5ju0`(u&x&;9+KOY(2?->BQ#u|y0^NB*0epG`!@sc_x`!aJTy zN{68`-BZ5Mrpq?O$-7#u!`y}Y3UGV#9O7BiwTaiRK?$N@5T}F%rsMf##+R)sizfWxlxuYBJ10Y=%nM@` zDQk_7OV|j`&zlx(jpo2t_b*!%Vi-o*6NxmQ{qG7f|LhpZuXR$s%P5DN?5neG>>ZOKGG=vVuF<>RA(m&b@$$L_2!?<)gPG;`36_NyCm+TxBqE#^bd3O zv$b(wnoqw|5q)bi1XU6JHE8{c^YqQI-aiG>kAfS;)w`{-XvRYyxcYwW8~d4fAIvb$ zd#(hW$uUXN`gqq$CQJ+cI^tNbL2U#IBD(z;WI-N#s@ZwM_slM9_Er{L4KRLfBJ6r@ zMF~Vl)u*ysSvV4R4U{#MjZ0seM^ni+`kemZNU7mTRh4JfQF#8kO$?^2VI4VT_O0&2 zFXWT_!fj9c=oZ;ukGdqg0DQ?N!J1R)h4xghk(UrXOaMz>KLi&Ok5ZjReCxGC#h*GH zvhcq-UiU5kDZVLd9Fe>fVQH2;pDt?#GLI}^2F(?&<)_)aHC~QKt+kZTSYBE)&-B_y zhw%6hOVVaHZ-eCx7u>2?bLQEmwA`Y`Bp&B3W0L*GJ=Dm@J3V<5@ba&5e?IETPlI@< zZ1Ojt_k#w|pF+Hk2GAd4-DlR%Ujw>-JfI&1*MInRDDLSTYSN1x|Jc)fx9*aiG`NV4 zTl=a^ZWbx3U#XqJD?=??k=q+c>k!ak8Ystg=@J7dGyqRIFiyY`sU}dltau{UzH^r^ zw#P^0QXD&tR#Bo#E@4~okVD8?I)i+rmHGtfxVkP7ISL(N0H4sRHak1f$G<-5XMLex zZk^7USg0D9V1aO1(bIKzI7_T19~~B)q6u+DD=b}z3n9Nqc-yZtOg8E-7>XPCyKyhW z9N}8y#HOF5?}fdbSnYZ-pGz?TK9gLRJDK2YIL~(-WbK|ZmTGV3HpJ!VK+eovJIz1~ z0N`u0ihmsYZF*0*+khXKzIazLe|G@m2QBVT2QWTH;QoNo{WF~V*8s+sY2!Z^bzfG= zpX7}HWpsZpyYX4b_+O~|W_;u0uHb((-OnKpMY!9z8`rWv47IW5N`{>vBt#kqNcg}4 zfVk=Q*ozAhf`Zhn*JPav?U7d_8%1*Cm>x@02KbXk3pH51LWMvP6%8Nt|I2 zCu5D?nv`djVcasM%soTK=`Km~-?up7TgvV`sg0S<*ja85h92`w%(sQ+S-$8!i0mMs zkj33#er?FzV01b*Kop<*YHmER4==aT5W1S3XbfV@jP|GZHE#fLeoSlrIEgFDOS`RTom0UcQil5H7p)S{xM*0MV@?czVRHg5)F8QRFJu8y0>zvivjyUg6*1o zWLSnwoYVFswtf&vo`9Vn`)GbUf%Q=#efhckv<&=m9_yz*mw&+f`cH%Q>PBFi`gq#-ibV-R1+9^JHT!~b8gi>k6}Ry&8kG=(+ZfVf z^G(9)yf53~a8g|7(Iq79Tgy7@9pjgV|4L4wj!%p^!2P7V(cZ1)0q#uXWs2NF@V#`7 z)V5Z1DWqSKPR<1(6&oIT7LESo!}|Y{?Na}NNcuI}s=K8+$L+0(W06Hnh%E3AWDtV* zHJ+cc0OJWES#yCxz!p^eio`M}$ymrDCt-J(4G@S9VE0Xn)P@#YtZaQwNM7Qq9@P)C ztr@=crrmcK2`;I-$b^HaFPlXVtNW!m)eydn^o3R742L0_Uen6(G(KO};l6iBDZpF% zJb%5k34^22zMb$i&dxP_2I_6UDXEQ*WNv+5z6Jsoe~iq3Of-G8>ApBjS1T4OB@qaTCdqF*y7r=hFB& zb!c@v!Q{-x&&ILq)km9_5<`>uIO%)I&*0;TCIdCt{l(6D_%d|FvuJYRsE$CndMoaq z$hP*AWFYcw$@FjXcp;W*-xo(JB;aPk79=~}Zmm_(gWh_8Wca{$xFeMOq?OzQaNw+;0}+OGj9
1fB}ndFr}jy;#!apKa!cBiaaae3#Ik+4JOY{)ckFTptv zzCI?G#@((HMG9vTT#S2sJ!jA9p6zG5D0uGv<%{sjZk1tbzIefc&nw|bz}R02_1~+6 zKkDv3Rt*0!L-My>Ti;)_^;MStUNQWG`ucl5jX?Q2R<~6dk~wj8RuY>7O?i{vB;Fg` zXUZWO4ETH(uQ;Kbw@QKP?3StJ&gU?o)8S0B36+y&(^Pv{34@&2Mv4@)dJ0dn;En~9 zDY%B#t8iQ|H5lnK5h)tu#I_=?*?G6%fRS>tK7gv0r~8CoTH^K_B66(=Z_GD(X%C3; z$hatpydZs^9I`kSvJ{6i_8PZn)WrgEW8ftkFu?IsP9H21Odll71;h!pckx6>dC zsO4!8paXZA%R1v!L7HC1-ZGa9I)EAAK5TBDc^6%7#lvsDa4FrVF9`w;r$w@6dhSn} z=j>e8woFSllUvIV+}c~qOIH$tX2&*5PqJ4ZY#&Q4>(Y>(6i2;;V2zr|)s`=*d0enA zUh`I2)AJq{hYeQ;ne}?{bGCITYye5gS@le|fwOv7>&>yE2{XKn%4t=zC!C8@LJ0Q7 z{Pp$fIfk&)4f9*I&<3iHgJmCrJxPGx{|(fBqs{$Y-|@Y_@yBTUSzz*y27A7upFj0C zzJ%{b8}iEm-rrek_$_ne&x7wjlMnCUi$d+C2Np34qrW*DM%gF0)p%9wI6^~CrVpf&qjJ$_*#Sl1 z6d{y~c1PkBH4j-KAr-^g9Qm-_zJ=ma_kC#DB@!LZvew5ad!zZK7)ON=`}%tM;FUXE zHFaX^9EBn^LR{6CcVm(8rMJ&d5N&`FIrYd2Jb#NTZB#rB&zr4zcy^(0ayS9loMDY< z;|(|OZRg{aHa=r6e%kbUs%X0&=ThTB+esadv-j|yzG3VnmOr@BO^cnfb5$}_LG?Eu z8uiM-yB*#6fQIkW`a2tFKbp`VC(-_Z$?@$h()-TPPdXg`Hv0SJT7@4DB7KF;pSFm; zokjZY1HQk_qkSrj|J9xU>M+{ZB=JvdR`_Q<;%E98MQiIq!JX`@C8`1nv#jbxzrMaJ zR*WGoNpO`=eNUO5;dsYscC~oJS>>@7Uy^H3T~vz*k;EgK7rbO4UczE%6GVEBB$$%Rp%f$8N_EfwIN##eON?7Gf%2vimtmf?nt1#DcVZ} zyi#43Mg%wVLXu-1HAgeGzBYo87|uqk2dgHnvbbO8SRip>URk`%xcBA2JXtJmkb?dN z-K^(B1Y^l4d0EmRw52IDuiI64BGiE9ww3G=+d_2Dm?%>`k_e;8{^iTDg*SSBbS4pg zxa9j0CcYRa+6eS2#JIQx&{fWyF*jANOOdL{{A_0vS+GNc*y77G}xC{NBPaoUOc>N?dg=IC!WsQ zd-G70|43;gexVD}R5(p8 zC6c(WF(nhbqqd3zqW7{=EQ}{jQ!27j@>45BCi2o8<=mE22_H|IC0OiEW@X;(BC$yK z>PF2;@S}fkA>snc0ogxB*T1ZV_~8MupGtY4H1^L3?EIXZJk$or z_g%!yOzCsG}$?tso_(ASo#?DJdr*Atx^Wf7*yf(bez6h6kJz?82)E@>V@RGPyLF za@2+g;9N105e}o6L0K%TJw;d$khYu>h%Z=?-6z4SU+kK@8y!f-U4g*?MuO!NuxxQ1 zRK%jYb7YucRu8P>f^soDOJpirvJ=j=_8X!J-EI|0I3>2X|6G(QogZVsf4?1Z>Tu1P&J42{6N8{^#lGYD#gtgUpCg)#(q?JXJ!#x^i@0EWZuQIWTGk? zd^e8KNVzHVT$%NuS7pR(@FS(Z)`d;+V$HF;(pd?#5v z0j+sFf>tN67#_a|Nk3V@VoxX_1LG)1l2<|^I*iBIgQ%Yq?K~eu1ob#*8-6OQ)kZm{ zsZjJuPu8kMZs}<0Q2ZVZ>&48-I;^?_t9A$8`%D*9luz0J{3sD_Iwn1eaU9Y3tWooKW{p#9c3; zhw<$&fz`^ZdJUWRW*-Y}mbSy(w^X0P_IEnSPao_6&Y;#jG#_mVJx{oH7{?=O0y`WX zzj3uMVs#^?uU;I)?W8#A_`@pP3O#%<9hSb@elJANC^Dzpo(RfVdyK z<9;x}_+#Et>+fY`zFkLrb#2@?12XS#H&iw8uAq2-wY`7P?c;C@p?@PwcsF^T}ElUBabqd@I=ffj1HD#(Kvh}jxL{M>3U zNs`k5dd`q2mtHkLU9OXKQW3UNdnk>3MUPLKi8w!9yKy&j0Qc^6eWl?-iT2I-+!@5h zjgre!`+N%C(&V({Cta#2j=h{M(Mc4JCQ*Rz%CJ;z@s)-1wm;M+B)z3#h1=Ps!ALnX z-(O!HbE%dj-J+=@np>QQbayDH2uSH)<2vLvUGHkD#HG=aHL86gl8l#^t{iQ)z_=SIuzGvxwILM^!C zu7C>j1FpDRa%ZA@vjV`*YnFut;6ApbB42;@)q+C1Q$@v9%~l+Rc_3}8679!R*7+@1 zi1jj9r29r`=T?1jQN8hG-;Jol?PGZpR(lgw54EjrYo_evOKN}dmfhrzJNrC8O}qSAZ2s+i zxj(kj^XJ(7Po44Os78VLCN74W$oug--QaBv_A@{`8jNbjPC|A36L#QMhHgms`~E8m z%%?Cb#9{zUy*liJoY5A%a;Nl6pyBZjkg;s$cl}p6HHZj{D;cS&t9(2x1^bfs@Qbx} z8SHAOhf`%$MdPJnS1l>4ZX?G0VtAjg_FWq*o@sD4O#n!~azW z%L|}%hh!)6hZGjL2eMlgpq}1jg=T^J*ova;w1G=pBBPe;ad2FW4p{YAh&8NgSB|Ny z9>~E|-ntd45#O;3E!I|IShs;yqN76P_m-DAiCQ#@xJo~?$1tlecP&zmvAt^o{brRpF z#3LhPBL3fcC-n66BNw!ogF8)4ZJ6Ub_y>0=D`n9KcOX-$kajSxF&!^2JoBl@!#Zvb z4z8mk?7-r-95L1tqah%!*R=JI0c5O4!kABFO5#y2Z7I`TMK_i^IL55%(Wuy=b-Yt% zh0ME0F9erN2o#rnWyA6Mc$Z*}6R5a-Fx$ksJ4oi{DVL_n8mDwBEL?fk83d=usYWNh>D;@P z+4_Hr?(A)6Uhm#wow8taFjtJDLT8XOE2Eyhmy++qi?5EZc+UPbkfod@ZAqu@4&WJ< z+N|$3wXw^w8Z4+Nw_PG0UuRqLK#%L)p;K%L4>uiBS9`$JEHzK1!COaR$-?8J)e8i| z9DT1GQe@_RW+5n0`DW6IGTy!|+}Y~3E#aZzo{ikiHotbvRdQ|V03MO~=FkDHX*>@u z@EFce;@}QD;}IZO_NJ(V(`wnw09Exh2F;m{uSDXUA8&jj$P0d<`f42M;+(pF_gC0%o3X_&ib!%N_D@mIHcs#-pD ztb{HX|BrV9Rc-Z~O=rwrzu9~Nc%jmkE1IK!vd(arDg-nZG0)9&5jr<45scIr+qzi0BaxBOl65|d`&37>fn-<*22X17w+ zYlqo-RxdUN1CRNfa(&(9H(NgER6k$F905G=^LyOx7k$s`zPvd(`JC~Gv*xi&9*e?f zbHQ~G7sF+SY@+L+n>T@V&`tbx5aw76S_MSk#g@=HU9^>!zzPUn`#=U_$f$sj*I44O zgRo98kTD7aoLxY!fP#X;$*O}!msz5B20%@IOT~#yml0zzo#NxVfMYS)R~%=ETA55N-SLQT-8##{)UP|ar{6X6 zxc2JqY4L?j*1O;Ac=0=co!cNm`_|mkg4b2~mvVT|%L!qA+7h1ea8-%Zy2D4KbazQ@ zJn{MICOiBrfo@90s{DsgF+ z-75d)`R(2H_4SQGcTdXor%b8wJ3}m=#)U>zK8=X<0-j76S*IB`JxOjUaCQ5n$TXjf zMZn8aG#7Fnm=pVoDSb}*InVTI>Gvvw=2ew(I?S(|#FDWf@|PG&6L z^pN;+miWuP4CUt zZvH*jZmF#kdzlr!-fjk4&W1zpZoS^fscN0Gevjd6osCDOx>s*L^+{{ZmXkuj*8Z-b t-)}eGb+XpmaH#6F&gN3v)o*t`NsHFqbG*x2fAh1v)9;+VTLA}JtN}^2A~gU2 literal 0 HcmV?d00001 diff --git a/frames/demo_summary.png b/frames/demo_summary.png new file mode 100644 index 0000000000000000000000000000000000000000..f048b367496765a5ab5fec137022982edc87669b GIT binary patch literal 32335 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�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 L@iukVzKQ<^4p|~| literal 0 HcmV?d00001 diff --git a/frames/step_002_map.png b/frames/step_002_map.png new file mode 100644 index 0000000000000000000000000000000000000000..c468c2e057f1ad880d8f3e673e0ae2b34e34e58d GIT binary patch literal 3935 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 IT>JTd03DWbBme*a literal 0 HcmV?d00001 diff --git a/frames/step_002_view.png b/frames/step_002_view.png new file mode 100644 index 0000000000000000000000000000000000000000..eef158b1f24871505192b174f3a6e8456ba6d39d GIT binary patch literal 2210 zcmai0c{J3G8va$b?9Et)h%99?nUQr;gt4ZEu~!E1m5l6L#+GG}EsQ~oJ!IdPEMsKy zWf?xnnn{Xei53j`%ysWQ=brQZb^myu_nh}V??2D;ob$X1<~NP_xW%~v0N^t*Mq!S6 z;ZX&19Y4bTUQbN`;Cf(!(zOcC+aS+*f{h@NEFX2wbvBsZx>bXsFo^4_pqV&|-C$MM z^cC(`YtV*lv)9<1Hb-;igwaA&r)g}io_u@;Q%FJrnU6jA9=tIxxk;zzhcD|_PBP|m zB9?O_x*0j`9xk82h%xyre}Leo9F^e01|Hx#mvYKXLN;5|5aE;Lv{T3*cS+r6`b|E~t4pT{Pg&=8X&T7TAKpqYb~#rQYyA@nM02O&Lgh>9=73YUc`~5^ffY1av#=Wjyuz(+VB^# z&||$)pH(wJ)rB_F7%{g8WwOCRHOi4mvou_+4Ys@^MkLQ_wv*xZ{AL=tn!(xNHpV4nNh;< zgeB&4sp@~A&@u_1hutK!>GpX0F^DTex zD)7rD3rlT<;_)5|V_P+5LCYl{mxDK7ng|eI*~oO}fb!o4 zWiLAXnw-2Ww`e$)9;oYA_&MZh(gOv3pQXFTm*O`T&_-fJW$gfIEaDC;lKjc1m+de2@l zrrSU6_XLE7!jKOUkZJb1Ixk+0HRs}vK)#`md8q-jiJ~DK<|yW{Q<_TBF`!9@r*9*J z>+V|M{B^z^xvIBcSGYK4H`D=Oi|W*iT!1XziI+O7boSGmx04`4^IELK{q-v#BB%a+ zE|(-fhG!e06Np^$Raq3g615Vtgg>cgp~n137- za^WQ$(j5gjq9Hc8-vh&(|JUY6LMGf$U*Du~M21rehLZU%h0bj5`rr`|yGgsJe}_wv zGWI%>qN87`KzKob_f$WzIGz)TjgFKFP@by%Kd6u7-wR_mUZkP_Wy2OC6tsOQ#}cak^&of;SbXcbs+ za`YO4*S`$4(DGpPcb6l$QwvyNxDm_Y&n3bTuT#5gf*-#Ql$PUH;LKh2F@VmH18j^Q8+Pn4lOzS-r-# zA)ZG;(29V*Z|^%qdxRd77LN0Y-Z$9Mrh&rkRyw#3x91N~kAIAp5riD7GM(q<9Nl32 z4e*{W-=)ERM)Zl@(;?oS?7{}fp_4I97zcLKyMZ#Be06Y9XQ$oGi09qr{byd1EFPfM zI?k}HjV#L02ey&~E_PY)ixS+^%T1`wt<>6sg!B^2L^~{nT9}xbDg3@-Y7OC$Z+qWF z$+K9(bumG=8!P&SpzJK*RQ&p6J+hYhfZXMsT+b=cW20^Vn}L@b~u*X$^KD=JGL_5i6{yS+|{U#x6tY?SFB8CpR#l@<~z4AS2?Y0*dL z5#(=`Dq}`Hj9IW%q8uDzF;?xJ3sxl{sB*O;&Ow{n#+M1FUg;=GKEA3*8OC-&XlzyZ zD}h~i6P3=eW6s(!QUk}wf@YrBux^l8JJ+*A{D|szPS~t)Z@5G~^kj_RUbHfOp3aKi z-E}xLDm3|nP*uM*l0XEaPPCxl2{`^b8~7n7H=gM|h@LBpyXN@Vzv%BOtKrf$jmw|g z87=OQ*f#pt6fFr8GWMXP;4oww+JzaHbW08&m8PHywoG)jM#xO@9-75Hip&gGICz+j z(l39T#?081cM@&Prykz}k0iw8@8iQ%CuC4;vX)YJD7NmWs<3rn+`E36qHE=XCD=Mk zCa=1&bU=ck&^>5B^cN;4#pz-b`j^>l#9`tFl@hqjam&oFo=E@0;Sn7xSLE@>>54^8Y3L afk3N$KQ^=!8+`P8044@EQMGzbQU3z;*&(g~ literal 0 HcmV?d00001 diff --git a/frames/step_003_map.png b/frames/step_003_map.png new file mode 100644 index 0000000000000000000000000000000000000000..1ae169e6a394e6acfd2e81550cdf19ce2c3e6e73 GIT binary patch literal 4241 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℞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 P00000NkvXXu0mjfN~PeB literal 0 HcmV?d00001 diff --git a/frames/step_005_map.png b/frames/step_005_map.png new file mode 100644 index 0000000000000000000000000000000000000000..22e1b2abad1348df1208af1ec52aa7742308d2c6 GIT binary patch literal 4206 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 literal 0 HcmV?d00001 diff --git a/frames/step_006_map.png b/frames/step_006_map.png new file mode 100644 index 0000000000000000000000000000000000000000..7114ba50660056069f3b5f41ad2b5d43a9fded93 GIT binary patch literal 4240 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 literal 0 HcmV?d00001 diff --git a/frames/step_006_view.png b/frames/step_006_view.png new file mode 100644 index 0000000000000000000000000000000000000000..0b29e03ca61177d89941f380e318f85aac0bf80e GIT binary patch literal 1729 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 D+&sm` literal 0 HcmV?d00001 diff --git a/frames/step_007_view.png b/frames/step_007_view.png new file mode 100644 index 0000000000000000000000000000000000000000..20d96b90613b4e580fb59b4b9f73457db541216b GIT binary patch literal 1641 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 trv6bCj^*gTeeeH}>iZ6UsPpNywN>cwIKL zHb%-?uMN2jBez*m-|zoC|4+~7=aGjS0;sfK2><{9ogD2i@0h%k zXa(7w{?!p~1pw^6<79uqJGywGxF>wlLf!TxB69QLf~-@Js`{g6GemqlHo%+HD!+J<&sHyQQF}fA2=?aAdpKA z!dCcv^e(`j{@DM^|K#n``pX6Fhw^1g7gZGhi`(SR`t~5cM#_a)>8ElM07sG{BTSEP zk7erA{n~)AjZJhVPZM7;nI&r0q!M4I13?GcL&2NL=% zMmzo^8qt|1)|0kMkAw$!4vcJ3PC`#%?l3xIf

yg^cw>nAXSvClo5>xDw09=!p!2gx0Zr; zWpBpd31v|_-78sU)JbCS4ZuHKP@OWDf02_CDR*aA+bInh?rJyP>vTizum={zTn|?` o4?tA#Gy={QfPxFMlxT{=VvUlLi2& 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 literal 0 HcmV?d00001 diff --git a/frames/step_024_map.png b/frames/step_024_map.png new file mode 100644 index 0000000000000000000000000000000000000000..42e190c958d125f301a273e5fe3b61e22557cae0 GIT binary patch literal 5069 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 M1!pU~1?D;P)004Lh0ssI2`oL~D000=WNkl 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 xbw;a literal 0 HcmV?d00001 diff --git a/scripts/run_chat.sh b/scripts/run_chat.sh new file mode 100755 index 0000000..e9cf3c8 --- /dev/null +++ b/scripts/run_chat.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +# Interactive chat mode: bridge + live viewer + chat REPL in one command. +# Open http://127.0.0.1:8000 to watch the capsule while you talk to it. +# Usage: scripts/run_chat.sh [--model gemma4:e2b] +set -euo pipefail +cd "$(dirname "$0")/.." +BRIDGE_PID="" +LIVE_PID="" + +# 1. bridge (reuse an already-running one) +if python3 -c 'import socket,sys; s=socket.socket(); sys.exit(0 if s.connect_ex(("127.0.0.1",8765))==0 else 1)'; then + echo "[chat] bridge already running on 8765" +else + testbed/.venv/bin/python -m testbed.bridge --port 8765 >/tmp/aicc-bridge.log 2>&1 & + BRIDGE_PID=$! + sleep 1.5 + echo "[chat] bridge started (pid $BRIDGE_PID)" +fi + +# 2. live viewer (optional but nice: watch while chatting) +testbed/.venv/bin/python -m testbed.live --http-port 8000 --ws-port 8001 >/tmp/aicc-live.log 2>&1 & +LIVE_PID=$! +sleep 1.5 +echo "[chat] live view: open http://127.0.0.1:8000 in your browser" + +# 3. chat REPL (foreground) +testbed/.venv/bin/python -m testbed.chat "$@" +EXIT=$? + +kill "$LIVE_PID" 2>/dev/null || true +if [ -n "$BRIDGE_PID" ]; then kill "$BRIDGE_PID" 2>/dev/null || true; fi +exit $EXIT diff --git a/testbed/.gitignore b/testbed/.gitignore index e1736e9..66cb77a 100644 --- a/testbed/.gitignore +++ b/testbed/.gitignore @@ -3,3 +3,5 @@ __pycache__/ *.pyc *.egg-info/ .pytest_cache/ +chat_frame.png +chat_map.png diff --git a/testbed/README.md b/testbed/README.md index 0803dab..0ad4466 100644 --- a/testbed/README.md +++ b/testbed/README.md @@ -22,6 +22,8 @@ over the protocol, no engine hooks. | `server.py` entry | `python -m testbed.bridge` — WebSocket server. | | `conformance.py` | Runs the 9 core conformance scenarios against this bridge. | | `live.py` | Real-time browser viewer (itself an AICC client). | +| `chat.py` | Interactive chat: natural language -> tool calls. | +| `llm_agent.py` | Shared LLM driver (controller + autonomous loop). | | `demo.py` | Agent demo: LLM driver (OpenAI-compatible) or scripted. | | `tests/` | pytest suite (world, renderer, bridge, protocol). | @@ -62,6 +64,33 @@ taken); stop the old one with `fuser -k 8765/tcp` or Ctrl-C in its terminal. The demo prints a full transcript of tool calls/results to stdout and saves the capsule's final first-person frame to `demo_final_frame.png`. +## Interactive chat mode + +Talk to the capsule's brain in natural language (any language): + +```bash +scripts/run_chat.sh --model gemma4:e2b # small + fast +scripts/run_chat.sh --model gemma4:12b # bigger gemma, slower (~20 s/turn) +``` + +It starts the bridge, the live viewer and a chat REPL — open +[http://127.0.0.1:8000](http://127.0.0.1:8000) to watch the capsule while you +type. The model translates your words into tool calls: + +``` +you> иди к маяку → look_at + move step by step (auto-continue) +you> повернись налево → turn(-90) +you> осмотрись → vision + description +you> активируй маяк → interact (when close) +you> /state /look /map /models /model gemma4:12b /steps N /help /exit +``` + +Each turn's transcript is printed; the current frame lands in `chat_frame.png` +and the sensor-built map in `chat_map.png`. Any OpenAI-compatible endpoint +works: `python -m testbed.chat --base-url https://api.openai.com/v1 +--model gpt-4o-mini --api-key $OPENAI_API_KEY`. `--auto-steps N` controls how +many tool steps the model may chain per request (0 = one action per turn). + ## Real-time mode Watch the capsule drive live in your browser: diff --git a/testbed/chat.py b/testbed/chat.py new file mode 100644 index 0000000..032813a --- /dev/null +++ b/testbed/chat.py @@ -0,0 +1,233 @@ +"""Interactive chat mode: talk to the model, it drives the capsule. + +Type natural-language commands (any language) and the LLM translates them +into AICC tool calls: 'go to the beacon', 'turn left', 'look around', +'activate the beacon'. Every tool call and result is printed as a transcript, +the current vision frame is saved to ``chat_frame.png`` and the sensor-built +top-down map to ``chat_map.png`` after each turn. Works great together with +the live viewer (scripts/run_live.sh) — watch the capsule in your browser +while you talk to it. + +Commands: + /state print current position/heading (proprioception) + /look take a vision frame and save it + /map save the top-down map (chat_map.png) + /models list models on the endpoint + /model X switch the model mid-session + /steps N auto-continue budget for 'go to X' style requests + /help this text + /exit quit + +Usage: + python -m testbed.chat [--model gemma4:e2b] [--model gemma4:12b] + python -m testbed.chat --base-url https://api.openai.com/v1 --model gpt-4o-mini +""" + +from __future__ import annotations + +import argparse +import asyncio +import sys + +from aicc.client import AICCClient +from aicc.transport.websocket import WebSocketClientTransport + +from testbed.llm_agent import CHAT_MISSION, LLMController, ollama_models + +DEFAULT_URL = "ws://127.0.0.1:8765" +DEFAULT_BASE_URL = "http://localhost:11434/v1" +DEFAULT_MODEL = "gemma4:e2b" + +HELP = """\ +You are talking to the capsule's brain (LLM). Type what you want, e.g.: + 'иди к маяку' / 'go to the beacon' — the model walks there step by step + 'повернись налево' / 'turn left' — quick turn + 'осмотрись' / 'look around' — vision + description + 'активируй маяк' / 'activate it' — interact (must be close) +Commands: /state /look /map /models /model X /steps N /help /exit""" + + +async def chat_loop(client: AICCClient, manifest, args: argparse.Namespace) -> int: + model = args.model + controller = LLMController( + client, + manifest, + base_url=args.base_url, + api_key=args.api_key, + model=model, + system_prompt=CHAT_MISSION, + log=lambda role, msg: print(f" [{role}] {msg}"), + ) + auto_steps = args.auto_steps + print(f"[chat] model: {model} (endpoint {args.base_url})") + print("[chat] type your commands; /help for the command list; /exit to quit\n") + + async def cmd_state() -> None: + out = (await client.call_tool("proprioception", {})).output + print( + f" pos ({out['position']['x']:.2f}, {out['position']['z']:.2f}) " + f"heading {out['rotation']['yaw_deg']:.1f} deg health {out['health']}" + ) + + async def cmd_look() -> None: + out = (await client.call_tool("vision", {})).output + import base64 + + raw = base64.b64decode(out["png_b64"]) + + def _write() -> None: + with open("chat_frame.png", "wb") as fh: + fh.write(raw) + + await asyncio.to_thread(_write) + print(f" frame saved to chat_frame.png ({out['width']}x{out['height']})") + + def save_map() -> None: + if controller.pos is None: + print(" (no position yet — ask the capsule to move first)") + return + from testbed.room.mapview import draw_sensor_map + + layout = {"obstacles": [], "beacon": {"x": 12.5, "z": 12.5}} + if controller.beacon_pos is not None: + layout["beacon"] = { + "x": controller.beacon_pos[0], + "z": controller.beacon_pos[1], + } + img = draw_sensor_map(layout, controller.pos, controller.yaw, controller.path) + img.save("chat_map.png") + print( + f" map saved to chat_map.png (pos {controller.pos[0]:.1f}, {controller.pos[1]:.1f})" + ) + + async def cmd_models() -> None: + print(" fetching models…") + for m in ollama_models(args.base_url, args.api_key): + print(f" {m}") + + while True: + try: + text = input("you> ").strip() + except (EOFError, KeyboardInterrupt): + print("\n[chat] bye") + return 0 + if not text: + continue + low = text.lower() + if low in ("/exit", "exit", "quit", "выход"): + print("[chat] bye") + return 0 + if low == "/help": + print(HELP) + continue + if low == "/state": + await cmd_state() + continue + if low == "/look": + await cmd_look() + continue + if low == "/map": + save_map() + continue + if low == "/models": + await cmd_models() + continue + if low.startswith("/model "): + model = low.split(maxsplit=1)[1] + controller.model = model + print(f"[chat] switching to {model}") + continue + if low.startswith("/steps "): + try: + auto_steps = max(0, int(low.split(maxsplit=1)[1])) + print(f"[chat] auto-continue budget: {auto_steps} steps") + except ValueError: + print(" usage: /steps N") + continue + + controller.messages.append({"role": "user", "content": text}) + steps_used = 0 + while True: + try: + turn = await controller.invoke() + except RuntimeError as exc: + print(f" [error] {exc}") + break + steps_used += 1 + if turn.text: + print(f" model> {turn.text}") + if turn.interacted: + print(f"\n[chat] BEACON ACTIVATED: {turn.message}") + save_map() + return 0 + if not turn.calls: + if not turn.text and auto_steps and steps_used <= auto_steps: + # The model answered with nothing: nudge it to actually act. + controller.messages.append( + { + "role": "user", + "content": ( + "Your last turn contained no action and no answer. " + "Carry out the user's request: call a tool now " + "(check the CURRENT STATE note)." + ), + } + ) + print(" [chat] (nudge: model gave an empty turn)") + continue + break # the model answered in words; wait for the user + if auto_steps and steps_used >= auto_steps: + print( + f" [chat] (auto-continue budget of {auto_steps} reached — say 'continue' to keep going)" + ) + break + if not auto_steps: + break + # The model acted without commenting; let it keep going for 'go to X' + if controller.pos is not None: + save_map() + + return 0 + + +async def run(args: argparse.Namespace) -> int: + transport = WebSocketClientTransport(args.url) + async with AICCClient(transport) as client: + manifest = await client.handshake() + print(f"[handshake] session {manifest.session_id} world {manifest.world.name}") + print(f"[handshake] tools: {[t.id for t in manifest.tools]}") + return await chat_loop(client, manifest, args) + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Interactive chat: talk to the LLM, it drives the capsule." + ) + parser.add_argument( + "--url", + default=DEFAULT_URL, + help=f"bridge WebSocket URL (default {DEFAULT_URL})", + ) + parser.add_argument( + "--base-url", default=DEFAULT_BASE_URL, help="OpenAI-compatible endpoint" + ) + parser.add_argument( + "--model", default=DEFAULT_MODEL, help="model id on the endpoint" + ) + parser.add_argument("--api-key", default="ollama", help="API key for the endpoint") + parser.add_argument( + "--auto-steps", + type=int, + default=8, + help="how many tool steps the model may chain per request (0 = one action per turn)", + ) + args = parser.parse_args() + try: + return asyncio.run(run(args)) + except KeyboardInterrupt: + print("\n[chat] bye") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/testbed/demo.py b/testbed/demo.py index f98d094..d388f5f 100644 --- a/testbed/demo.py +++ b/testbed/demo.py @@ -33,8 +33,7 @@ from pathlib import Path from typing import Any from aicc.client import AICCClient -from aicc.errors import ToolError -from aicc.protocol import SessionInit, ToolSpec +from aicc.protocol import SessionInit from aicc.transport.websocket import WebSocketClientTransport from PIL import Image @@ -42,51 +41,6 @@ DEFAULT_URL = "ws://127.0.0.1:8765" DEFAULT_BASE_URL = "http://localhost:11434/v1" DEFAULT_MODEL = "gemma4:e2b" -NUDGE = ( - "You have not called a tool. Continue the mission: check the CURRENT STATE note, " - "then call a tool (turn or move, or interact if within 1.6 m)." -) - -MISSION = ( - "You are a capsule AI inside a 16x16 m room. Your mission: reach the glowing " - "beacon pillar and activate it with the interact tool. " - "World: yaw 0 faces +z, 90 faces +x, coordinates in meters; three wooden " - "crates block parts of the room. " - "Perception: proprioception gives position/heading; world_query gives the room " - "layout and the beacon's exact coordinates (call it once at the start); " - "vision gives the first-person frame; hear tells you how close you are to the beacon. " - "Every tool result is prefixed with a CURRENT STATE note: read it — it tells you " - "your position, heading, distance to the beacon, and the bearing to turn toward it. " - "Standard loop, one action per turn: " - "1. call proprioception (and hear every few steps); " - "2. compute the bearing to the beacon and turn toward it (turn yaw_deg = that bearing, max 90 per call); " - "3. move forward 1.0 m; if the result says collision, turn 60-90 degrees and go around, " - "then re-aim. " - "Never walk into a crate or wall twice in a row. " - "Call interact ONLY when proprioception puts you within 1.6 m of the beacon. " - "Keep tool calls short and decisive. Stop once the beacon is active." -) - -COLOR_NAMES = [ - ("beacon_cyan", (120, 210, 235)), - ("beacon_yellow", (255, 190, 90)), - ("crate_red", (178, 64, 54)), - ("crate_blue", (64, 96, 178)), - ("crate_olive", (128, 128, 60)), - ("floor_gray", (60, 60, 66)), - ("wall_gray", (96, 96, 106)), - ("dark", (30, 30, 36)), -] - - -def _nearest_color(r: float, g: float, b: float) -> str: - best, best_d = "dark", 1e9 - for name, (cr, cg, cb) in COLOR_NAMES: - d = (r - cr) ** 2 + (g - cg) ** 2 + (b - cb) ** 2 - if d < best_d: - best, best_d = name, d - return best - class FrameRecorder: """Visual mode: saves first-person frames and a sensor-built top-down map @@ -171,63 +125,11 @@ class FrameRecorder: return summary -def vision_digest(png_b64: str, cols: int = 12, rows: int = 9) -> str: - """Coarse color-grid summary of a vision frame (agent-side preprocessing).""" - try: - from PIL import Image - - img = Image.open(io.BytesIO(base64.b64decode(png_b64))).convert("RGB") - except Exception: # noqa: BLE001 - digest is best-effort - return "(no digest: unreadable frame)" - small = img.resize((cols, rows)) - grid: list[list[tuple[int, int, int]]] = [] - for r in range(rows): - row: list[tuple[int, int, int]] = [] - for c in range(cols): - px = small.getpixel((c, r)) - if isinstance(px, (tuple, list)) and len(px) >= 3: - row.append((int(px[0]), int(px[1]), int(px[2]))) - elif isinstance(px, (int, float)): - v = int(px) - row.append((v, v, v)) - else: - row.append((0, 0, 0)) - grid.append(row) - lines = [] - for r in range(rows): - lines.append(" ".join(_nearest_color(*grid[r][c]) for c in range(cols))) - return f"frame digest ({cols}x{rows}, center = where you face):\n" + "\n".join( - lines - ) - - # --------------------------------------------------------------------------- # LLM agent (OpenAI-compatible) # --------------------------------------------------------------------------- -def to_openai_tools(tools: list[ToolSpec]) -> list[dict[str, Any]]: - out = [] - for t in tools: - if t.id in ( - "echo", - "boom", - "bump", - ): # conformance-only tools: not for the agent - continue - out.append( - { - "type": "function", - "function": { - "name": t.id, - "description": t.description, - "parameters": t.input_schema, - }, - } - ) - return out - - async def run_llm_agent( client: AICCClient, manifest: SessionInit, @@ -238,205 +140,25 @@ async def run_llm_agent( max_steps: int, recorder: FrameRecorder | None = None, ) -> dict[str, Any]: - from openai import AsyncOpenAI + """Autonomous LLM run: controller + nudge/correct loop (see llm_agent).""" + from testbed.llm_agent import LLMController, run_llm_agent_loop - ac = AsyncOpenAI(base_url=base_url, api_key=api_key) - tools = to_openai_tools(manifest.tools) - messages: list[dict[str, Any]] = [ - {"role": "system", "content": MISSION}, - { - "role": "user", - "content": "Begin your mission. Use the tools to reach and activate the beacon.", - }, - ] - summary: dict[str, Any] = { - "steps": 0, - "tool_calls": 0, - "result": None, - "interacted": False, - } + controller = LLMController( + client, + manifest, + base_url=base_url, + api_key=api_key, + model=model, + log=lambda role, msg: print(f"[{role}] {msg}"), + ) + try: + return await run_llm_agent_loop(controller, max_steps, log=print_log, recorder=recorder) + except RuntimeError as exc: + return {"steps": 0, "tool_calls": 0, "result": str(exc), "interacted": False} - # Agent-side working memory: a compact summary of state the model has - # already observed via sensors, prefixed to tool results so small models - # don't drift (protocol §9: agent memory is the agent's concern). - beacon_pos: tuple[float, float] | None = None - pos: tuple[float, float] | None = None - yaw: float = 0.0 - def state_hint() -> str: - if pos is None: - return "" - if beacon_pos is not None: - dist = math.hypot(beacon_pos[0] - pos[0], beacon_pos[1] - pos[1]) - bearing = ( - math.degrees(math.atan2(beacon_pos[0] - pos[0], beacon_pos[1] - pos[1])) - - yaw - ) % 360.0 - return ( - f"CURRENT STATE: you are at ({pos[0]:.2f}, {pos[1]:.2f}), heading {yaw:.1f} deg; " - f"the beacon is {dist:.2f} m away at relative bearing {bearing:.0f} deg. " - f"Action: turn yaw_deg={bearing:.0f} to face it, then move forward." - ) - return f"CURRENT STATE: you are at ({pos[0]:.2f}, {pos[1]:.2f}), heading {yaw:.1f} deg." - - def observe(output: dict[str, Any]) -> None: - nonlocal pos, yaw - if isinstance(output.get("position"), dict): - pos = (output["position"]["x"], output["position"]["z"]) - if isinstance(output.get("rotation"), dict): - yaw = output["rotation"]["yaw_deg"] % 360.0 - - def log(role: str, msg: str) -> None: - print(f"[{role}] {msg}") - - # Progress monitor: if the capsule keeps moving away from the beacon, - # reflect that back to the model as a correction (framework-style loop). - dist_history: list[float] = [] - corrections = 0 - last_correct_step = -99 - last_collision_step = -99 - - def distance_to_beacon() -> float: - if pos is None or beacon_pos is None: - return float("nan") - return math.hypot(beacon_pos[0] - pos[0], beacon_pos[1] - pos[1]) - - def maybe_correct(step: int) -> None: - nonlocal corrections, last_correct_step - if pos is None or beacon_pos is None: - return - dist = distance_to_beacon() - if not math.isfinite(dist) or dist < 2.0: - return - dist_history.append(dist) - recent = dist_history[-4:] - moving_away = len(recent) == 4 and all( - recent[i] > recent[i + 1] for i in range(3) - ) - bearing = ( - math.degrees(math.atan2(beacon_pos[0] - pos[0], beacon_pos[1] - pos[1])) - - yaw - ) % 360.0 - deviation = min(bearing, 360.0 - bearing) - facing_wrong = dist > 4.0 and deviation > 40.0 and step - last_correct_step > 3 - detouring = step - last_collision_step < 3 - if (moving_away or (facing_wrong and not detouring)) and corrections < 5: - corrections += 1 - last_correct_step = step - hint = state_hint() - msg = ( - "You are not making progress toward the beacon. Stop and follow the CURRENT " - f"STATE note exactly: {hint} Call turn with that yaw_deg, then move forward." - ) - messages.append({"role": "user", "content": msg}) - log("agent", "(correction: re-aim at the beacon)") - dist_history.clear() - - for step in range(max_steps): - summary["steps"] = step + 1 - if recorder is not None and pos is not None: - await recorder.snap(client, pos, yaw) - try: - resp = await ac.chat.completions.create( - model=model, messages=messages, tools=tools, tool_choice="auto" - ) - except Exception as exc: # noqa: BLE001 - provider errors end the demo - log("agent", f"LLM error: {exc}") - summary["result"] = f"LLM error: {exc}" - return summary - - choice = resp.choices[0] - if choice.message.content: - log("agent", choice.message.content[:400]) - messages.append({"role": "assistant", "content": choice.message.content}) - calls = choice.message.tool_calls - if not calls: - # Nudge a model that drifted into plain text back to acting. - silent = (not choice.message.content) or len(choice.message.content) < 8 - already_nudged = bool(messages) and messages[-1].get("content") == NUDGE - if silent or already_nudged: - summary["result"] = "model produced no tool call" - return summary - messages.append({"role": "user", "content": NUDGE}) - log("agent", "(nudge: no tool call; continue the mission)") - continue - messages.append( - { - "role": "assistant", - "content": choice.message.content or "", - "tool_calls": [ - { - "id": c.id, - "type": "function", - "function": { - "name": c.function.name, - "arguments": c.function.arguments, - }, - } - for c in calls - ], - } - ) - for tc in calls: - name = tc.function.name - try: - args = json.loads(tc.function.arguments or "{}") - except json.JSONDecodeError: - args = {} - log("tool", f"{name}({json.dumps(args)})") - try: - result = await client.call_tool(name, args) - output = result.output - extra = "" - if name == "vision" and isinstance(output.get("png_b64"), str): - extra = "\n" + vision_digest(output["png_b64"]) - output = dict(output, png_b64="") - log("bridge", f"ok {json.dumps(output)[:500]}{extra}") - messages.append( - { - "role": "tool", - "tool_call_id": tc.id, - "content": json.dumps(result.output) + extra, - } - ) - summary["tool_calls"] += 1 - if name == "world_query": - b = output.get("beacon") - if isinstance(b, dict): - beacon_pos = (b["x"], b["z"]) - observe(output) - hint = state_hint() - if hint: - messages[-1] = dict( - messages[-1], content=hint + "\n" + messages[-1]["content"] - ) - maybe_correct(step) - if name == "move" and output.get("collision"): - last_collision_step = step - obj = output.get("collision_normal") - hint_msg = ( - f"You collided with an obstacle (normal {obj}). Turn yaw_deg=90 and move " - "forward twice to get around it, then follow the CURRENT STATE note to re-aim." - ) - if not (messages and messages[-1].get("content") == hint_msg): - messages.append({"role": "user", "content": hint_msg}) - log("agent", "(collision: go around)") - if name == "interact" and output.get("success"): - summary["interacted"] = True - summary["result"] = output.get("message", "beacon activated") - return summary - except ToolError as e: - log("bridge", f"error {e.code}: {e.message}") - messages.append( - { - "role": "tool", - "tool_call_id": tc.id, - "content": json.dumps({"error": e.code, "message": e.message}), - } - ) - summary["tool_calls"] += 1 - summary["result"] = f"exceeded {max_steps} steps" - return summary +def print_log(role: str, msg: str) -> None: + print(f"[{role}] {msg}") # --------------------------------------------------------------------------- diff --git a/testbed/llm_agent.py b/testbed/llm_agent.py new file mode 100644 index 0000000..91effb7 --- /dev/null +++ b/testbed/llm_agent.py @@ -0,0 +1,463 @@ +"""Shared LLM tool-use machinery for the demo and chat modes. + +A tool-calling LLM (any OpenAI-compatible endpoint) drives the capsule by +translating intent into AICC tool calls. The controller keeps agent-side +working memory (protocol §9): a CURRENT STATE note derived from what the model +has already observed, vision digest for text-only models, and a transcript of +tool calls/results fed back as `tool` messages. +""" + +from __future__ import annotations + +import base64 +import io +import json +import math +from collections.abc import Callable +from dataclasses import dataclass, field +from typing import Any + +from aicc.client import AICCClient +from aicc.errors import ToolError +from aicc.protocol import SessionInit, ToolSpec + +MISSION = ( + "You are a capsule AI inside a 16x16 m room. Your mission: reach the glowing " + "beacon pillar and activate it with the interact tool. " + "World: yaw 0 faces +z, 90 faces +x, coordinates in meters; three wooden " + "crates block parts of the room. " + "Perception: proprioception gives position/heading; world_query gives the room " + "layout and the beacon's exact coordinates (call it once at the start); " + "vision gives the first-person frame; hear tells you how close you are to the beacon. " + "Every tool result is prefixed with a CURRENT STATE note: read it — it tells you " + "your position, heading, distance to the beacon, and the bearing to turn toward it. " + "Standard loop, one action per turn: " + "1. call proprioception (and hear every few steps); " + "2. compute the bearing to the beacon and turn toward it (turn yaw_deg = that bearing, max 90 per call); " + "3. move forward 1.0 m; if the result says collision, turn 60-90 degrees and go around, " + "then re-aim. " + "Never walk into a crate or wall twice in a row. " + "Call interact ONLY when proprioception puts you within 1.6 m of the beacon. " + "Keep tool calls short and decisive. Stop once the beacon is active." +) + +CHAT_MISSION = ( + "You are the brain of a capsule robot inside a 16x16 m room with a glowing " + "beacon at the far corner and a few wooden crates. The user talks to you in " + "natural language (any language) and you translate their intent into tool " + "calls. " + "World: yaw 0 faces +z, 90 faces +x, coordinates in meters. " + "Every tool result is prefixed with a CURRENT STATE note: position, heading, " + "distance to the beacon and the bearing to turn toward it. " + "Rules: " + "1. Take the user's request literally: 'go to the beacon' means turn toward " + "it and move step by step until close; 'turn left/right' means turn ~90 deg; " + "'look around' means vision and describe what you see; 'activate' means " + "interact (only within 1.6 m). " + "2. One tool call per turn is fine — you will get another turn to continue. " + "3. If a move reports a collision, turn and go around. " + "4. When the user asks something not involving movement, just answer briefly. " + "5. Keep the user informed with one short line after acting (or if you need " + "a clarification). " + "Call interact only when within 1.6 m of the beacon." +) + +NUDGE = ( + "You have not called a tool. Continue the mission: check the CURRENT STATE note, " + "then call a tool (turn or move, or interact if within 1.6 m)." +) + +COLOR_NAMES = [ + ("beacon_cyan", (120, 210, 235)), + ("beacon_yellow", (255, 190, 90)), + ("crate_red", (178, 64, 54)), + ("crate_blue", (64, 96, 178)), + ("crate_olive", (128, 128, 60)), + ("floor_gray", (60, 60, 66)), + ("wall_gray", (96, 96, 106)), + ("dark", (30, 30, 36)), +] + +LogFn = Callable[[str, str], None] + + +def _nearest_color(r: float, g: float, b: float) -> str: + best, best_d = "dark", 1e9 + for name, (cr, cg, cb) in COLOR_NAMES: + d = (r - cr) ** 2 + (g - cg) ** 2 + (b - cb) ** 2 + if d < best_d: + best, best_d = name, d + return best + + +def vision_digest(png_b64: str, cols: int = 12, rows: int = 9) -> str: + """Coarse color-grid summary of a vision frame (agent-side preprocessing).""" + try: + from PIL import Image + + img = Image.open(io.BytesIO(base64.b64decode(png_b64))).convert("RGB") + except Exception: # noqa: BLE001 - digest is best-effort + return "(no digest: unreadable frame)" + small = img.resize((cols, rows)) + grid: list[list[tuple[int, int, int]]] = [] + for r in range(rows): + row: list[tuple[int, int, int]] = [] + for c in range(cols): + px = small.getpixel((c, r)) + if isinstance(px, (tuple, list)) and len(px) >= 3: + row.append((int(px[0]), int(px[1]), int(px[2]))) + elif isinstance(px, (int, float)): + v = int(px) + row.append((v, v, v)) + else: + row.append((0, 0, 0)) + grid.append(row) + lines = [ + " ".join(_nearest_color(*grid[r][c]) for c in range(cols)) for r in range(rows) + ] + return f"frame digest ({cols}x{rows}, center = where you face):\n" + "\n".join( + lines + ) + + +def to_openai_tools(tools: list[ToolSpec]) -> list[dict[str, Any]]: + """Convert manifest ToolSpecs to OpenAI function schemas (skip conformance tools).""" + out = [] + for t in tools: + if t.id in ("echo", "boom", "bump"): + continue + out.append( + { + "type": "function", + "function": { + "name": t.id, + "description": t.description, + "parameters": t.input_schema, + }, + } + ) + return out + + +def ollama_models(base_url: str, api_key: str) -> list[str]: + """List model ids on an OpenAI-compatible endpoint (best effort).""" + from openai import AsyncOpenAI + + ids: list[str] = [] + + async def _fetch() -> None: + ac = AsyncOpenAI(base_url=base_url, api_key=api_key) + try: + models = await ac.models.list() + except Exception: # noqa: BLE001 + return + ids.extend(m.id for m in models.data if m.id) + + import asyncio + + asyncio.run(_fetch()) + return ids + + +# --------------------------------------------------------------------------- +# Controller: one conversation with the tool-calling LLM +# --------------------------------------------------------------------------- + + +@dataclass +class ToolCallResult: + name: str + args: dict[str, Any] + ok: bool + output: dict[str, Any] | None = None + error: str | None = None + digest: str | None = None + + +@dataclass +class TurnResult: + """One model round-trip: optional text plus the executed tool calls.""" + + text: str + calls: list[ToolCallResult] = field(default_factory=list) + interacted: bool = False + message: str | None = None + + +class LLMController: + """Drives a tool-calling LLM over an OpenAI-compatible endpoint. + + Holds the message history and the agent-side state (position, heading, + beacon, path) distilled from tool results. ``invoke()`` runs one model + turn and executes whatever tools it asks for. + """ + + def __init__( + self, + client: AICCClient, + manifest: SessionInit, + *, + base_url: str, + api_key: str, + model: str, + system_prompt: str = MISSION, + log: LogFn | None = None, + ): + from openai import AsyncOpenAI + + self.client = client + self.model = model + self.ac = AsyncOpenAI(base_url=base_url, api_key=api_key) + self.tools = to_openai_tools(manifest.tools) + self.messages: list[dict[str, Any]] = [ + {"role": "system", "content": system_prompt}, + { + "role": "user", + "content": "Begin. Use the tools to control the capsule.", + }, + ] + self.log = log or (lambda role, msg: None) + self.beacon_pos: tuple[float, float] | None = None + self.pos: tuple[float, float] | None = None + self.yaw: float = 0.0 + self.path: list[tuple[float, float]] = [] + + # -- agent-side working memory ----------------------------------------- + + def state_hint(self) -> str: + if self.pos is None: + return "" + if self.beacon_pos is not None: + dist = math.hypot( + self.beacon_pos[0] - self.pos[0], self.beacon_pos[1] - self.pos[1] + ) + bearing = ( + math.degrees( + math.atan2( + self.beacon_pos[0] - self.pos[0], + self.beacon_pos[1] - self.pos[1], + ) + ) + - self.yaw + ) % 360.0 + return ( + f"CURRENT STATE: you are at ({self.pos[0]:.2f}, {self.pos[1]:.2f}), " + f"heading {self.yaw:.1f} deg; the beacon is {dist:.2f} m away at relative " + f"bearing {bearing:.0f} deg. Action: turn yaw_deg={bearing:.0f} to face it, " + f"then move forward." + ) + return f"CURRENT STATE: you are at ({self.pos[0]:.2f}, {self.pos[1]:.2f}), heading {self.yaw:.1f} deg." + + def observe(self, output: dict[str, Any]) -> None: + if isinstance(output.get("position"), dict): + self.pos = (output["position"]["x"], output["position"]["z"]) + if isinstance(output.get("rotation"), dict): + self.yaw = output["rotation"]["yaw_deg"] % 360.0 + if self.pos is not None and (not self.path or self.path[-1] != self.pos): + self.path.append(self.pos) + if len(self.path) > 4000: + self.path = self.path[-2000:] + + # -- conversation ------------------------------------------------------- + + async def send_user(self, text: str) -> None: + self.messages.append({"role": "user", "content": text}) + + async def invoke(self) -> TurnResult: + """One model round-trip: get the response and execute its tool calls.""" + try: + resp = await self.ac.chat.completions.create( + model=self.model, + messages=self.messages, + tools=self.tools, + tool_choice="auto", + ) + except Exception as exc: + self.log("agent", f"LLM error: {exc}") + raise RuntimeError(f"LLM error: {exc}") from exc + + choice = resp.choices[0] + text = choice.message.content or "" + result = TurnResult(text=text) + calls = choice.message.tool_calls + if not calls: + self.messages.append({"role": "assistant", "content": text}) + return result + + self.messages.append( + { + "role": "assistant", + "content": text, + "tool_calls": [ + { + "id": c.id, + "type": "function", + "function": { + "name": c.function.name, + "arguments": c.function.arguments, + }, + } + for c in calls + ], + } + ) + for tc in calls: + name = tc.function.name + try: + args = json.loads(tc.function.arguments or "{}") + except json.JSONDecodeError: + args = {} + self.log("tool", f"{name}({json.dumps(args)})") + try: + outcome = await self.client.call_tool(name, args) + output = dict(outcome.output) + digest = None + extra = "" + if name == "vision" and isinstance(output.get("png_b64"), str): + digest = vision_digest(output["png_b64"]) + extra = "\n" + digest + output = dict(output, png_b64="") + self.log("bridge", f"ok {json.dumps(output)[:500]}{extra}") + if name == "world_query": + b = output.get("beacon") + if isinstance(b, dict): + self.beacon_pos = (b["x"], b["z"]) + self.observe(output) + hint = self.state_hint() + content = json.dumps(outcome.output) + extra + if hint: + content = hint + "\n" + content + self.messages.append( + {"role": "tool", "tool_call_id": tc.id, "content": content} + ) + call_result = ToolCallResult( + name=name, args=args, ok=True, output=outcome.output, digest=digest + ) + result.calls.append(call_result) + if name == "interact" and output.get("success"): + result.interacted = True + result.message = output.get("message") + except ToolError as e: + self.log("bridge", f"error {e.code}: {e.message}") + self.messages.append( + { + "role": "tool", + "tool_call_id": tc.id, + "content": json.dumps({"error": e.code, "message": e.message}), + } + ) + result.calls.append( + ToolCallResult(name=name, args=args, ok=False, error=e.message) + ) + return result + + +# --------------------------------------------------------------------------- +# Autonomous loop (used by the demo; nudges + corrections for weak models) +# --------------------------------------------------------------------------- + + +async def run_llm_agent_loop( + controller: LLMController, + max_steps: int, + *, + log: LogFn, + recorder: Any | None = None, +) -> dict[str, Any]: + """Drive the controller until the mission is done or steps run out.""" + summary: dict[str, Any] = { + "steps": 0, + "tool_calls": 0, + "result": None, + "interacted": False, + } + dist_history: list[float] = [] + corrections = 0 + last_correct_step = -99 + last_collision_step = -99 + + def maybe_correct(step: int) -> None: + nonlocal corrections, last_correct_step + if controller.pos is None or controller.beacon_pos is None: + return + dist = math.hypot( + controller.beacon_pos[0] - controller.pos[0], + controller.beacon_pos[1] - controller.pos[1], + ) + if not math.isfinite(dist) or dist < 2.0: + return + dist_history.append(dist) + recent = dist_history[-4:] + moving_away = len(recent) == 4 and all( + recent[i] > recent[i + 1] for i in range(3) + ) + bearing = ( + math.degrees( + math.atan2( + controller.beacon_pos[0] - controller.pos[0], + controller.beacon_pos[1] - controller.pos[1], + ) + ) + - controller.yaw + ) % 360.0 + deviation = min(bearing, 360.0 - bearing) + facing_wrong = dist > 4.0 and deviation > 40.0 and step - last_correct_step > 3 + detouring = step - last_collision_step < 3 + if (moving_away or (facing_wrong and not detouring)) and corrections < 5: + corrections += 1 + last_correct_step = step + hint = controller.state_hint() + msg = ( + "You are not making progress toward the beacon. Stop and follow the CURRENT " + f"STATE note exactly: {hint} Call turn with that yaw_deg, then move forward." + ) + controller.messages.append({"role": "user", "content": msg}) + log("agent", "(correction: re-aim at the beacon)") + dist_history.clear() + + for step in range(max_steps): + summary["steps"] = step + 1 + if recorder is not None and controller.pos is not None: + await recorder.snap(controller.client, controller.pos, controller.yaw) + turn = await controller.invoke() + if turn.text: + log("agent", turn.text[:400]) + summary["tool_calls"] += len(turn.calls) + for c in turn.calls: + if ( + c.name == "move" + and c.ok + and isinstance(c.output, dict) + and c.output.get("collision") + ): + last_collision_step = step + obj = c.output.get("collision_normal") + hint_msg = ( + f"You collided with an obstacle (normal {obj}). Turn yaw_deg=90 and move " + "forward twice to get around it, then follow the CURRENT STATE note to re-aim." + ) + if not ( + controller.messages + and controller.messages[-1].get("content") == hint_msg + ): + controller.messages.append({"role": "user", "content": hint_msg}) + log("agent", "(collision: go around)") + maybe_correct(step) + if turn.interacted: + summary["interacted"] = True + summary["result"] = turn.message + return summary + if not turn.calls: + # Nudge a model that drifted into plain text back to acting. + silent = (not turn.text) or len(turn.text) < 8 + already_nudged = ( + bool(controller.messages) + and controller.messages[-1].get("content") == NUDGE + ) + if silent or already_nudged: + summary["result"] = "model produced no tool call" + return summary + controller.messages.append({"role": "user", "content": NUDGE}) + log("agent", "(nudge: no tool call; continue the mission)") + summary["result"] = f"exceeded {max_steps} steps" + return summary

W-^a!S{&ulDP&wN;I>#2QJP2Pk z8#p>{<7D<_#>7*dyO=IrDooX9KZfiB5X%)Zy$e;W`FxKDB5P=RIi;VYp^g0BJ}(%) zt^Z2Z<ZB@oXDmR~p{GUIF*yV2 zS|b{!k7rgo;E=e6U_D%NEnx_sW!loxA`Fm~DmniK(J-1K1TL)?4=bJVW4E;(y`~~N z=wp|5Jo=txU`B7yDS!}_^~hjKtr)WJq+n?&s#E*PZSx38gj!*GleYQqmtc0^CE??9 zD^){BV+7D?uVR9JPC;PY&@2qFvAG_lOI?n=U@y=()5t4w3$CuN&RD4l1(F$xk&Y(+ zAEM;sq$?juB+_jRCNFX2%Fh6=y&BO=(>Ci1Q*C~6Vf$qkd!Jdlyw=X*M(Cz}_dA!{ zbu%u`_a!*<199~8qBdY;l$v-86FgJa|Nag1#J280$Z6U8hUwnoxx$HNEOFGDIY_nQ zaDOs=y~*#Wa{j;U7w4b z&KNbdSF?m^vpHwEbyr6CnVThIOe5oSukq*b=x`$T1eQTx(qE0IZGI1yR4bd8?76cU zMmKWOLrco{Cj{$e_llN%f$pu7#nY4r#)d>D{_0omp$d9#+^QZA3sy+{IUg7EAhfd# zKDADMh^Z-{ew!Kr8`g$|9p=93VO?Cf-gr6z!`hP|nPdepKP@iOqT3maKxQuJz_7y8q){Kfog;SJ|gq zW#Bksc`h>h2^{JiVEQZCEx#7=qt{vGwQJ!aRR*s8keER7dgqxa;M zbLu_~J`3={A@neWtYo2yrorR?nhWYG^`F_^wUy|1XIY#n8mb3POl(jVv_rjOFTcR0 zq}WDH8O*M3$hh(~zFx~dpe!#y{cO9@EAOQrU}VL%xQAL}8k+087mtM?a22aO&3rRF zk}gA&>dfj5L?}<8gC^?T`P6uF|1HYCcSMmB3#(0F$zJ^>#CkQnp8{BaD73&J0*E7i|w$S z)h*kf7MunTojrEd|E`SxrrgXT&s7`iJ3nlOZ0sQC$pHl~mdfbE1eit9!L{5vF{wQ2 zyv0iSty<<#CWAA0TFh1Vg*Fd&n4;cAyIR)!u>-9pBRL~5Ayf1bO**>sl X^zFl2bWY>W4+ESW-0UfK{)B%3o0Hvt literal 0 HcmV?d00001 diff --git a/frames/step_009_map.png b/frames/step_009_map.png new file mode 100644 index 0000000000000000000000000000000000000000..d374639cb77169a9893bb85ba55055afeba7b047 GIT binary patch literal 4555 zcmbVQc{J4f`?rLYB_eCw2C0-$But`EB+FHe>`IcxlEzqOENQVX(bZ%L$r1)F7=uBL z#I==W#yWOlFpV)Y7-oJSzw`Z`-@WJF-#Pc(KR)L<&-?xUyg$$LdY0F7K5@3zmqho- z@8RL$5w$Qkwd3L8HQsr4^8qUtR!?p7@JOUtn4Z5DlD#|z3%oXqYo>V})*i{Y;d6mk z;+SbXw2jxI_K9(=Kzx49HM3ulGma9o@-JkJ`DFX0tPbspA11_H`*aIkT&T^xxR~fgbjvP56 z#bbaoEqMR_JNZ^|U+6-w8VY8pBo5E$7}c6LSU$o3Z1-+i+r)>wU;Zq96FBQ`%&n@b zdYf!+X-OG3QZH3`Xdd7)y?ppeE%jA!MDQ{THJ$V-Cu}tUJ2EyH(wILr&{u3TqF<-s zdHZ&v?62=o!M=WeP3k!>L$}t2C5D=~%|%vCVs*0*d2tB`3=MC7Ryjm1-l+Cyl}eVo z`h$TyrZK)X^W5fAvSP$cn~a419SIy~lcJ3Bag2x{x5TByw;@O_XCgUEiHRbWq>rKW zk@{d#QE{=1bQgXyI>;?D{7zRUV!r!TLYs5JBiLA!`jy&BD;C778#B&fj;UF`*ygaV zr<`529T7kNM0qRkK5NB5qP?x{-AY({nr9bbx#lxYY)sAq~%yBG@Bm5|s=e z(59yBT^;Cy9(`s7H8p;nFJrf#cn8p?2r(&}Vdp3W)QTKyV?G9b+yQE5X8d@ve~PDeMTJ%@iSu-I>?WMg4L!!{zeKR>10 zS2(*m)~(izARV!zA7+!h`wnxLyuiP`sA!AqyGUTHAwk;pP;foaUc=J1V=GvbZI~uGWy~?5ES*2T_c4g=+ zOy4lNT>RZ`T5}7;hdvL$W)7Pf{YA0Jv~KHf2$lz_Ve*^uJM_z@_t@c zT5~|gs0qm!9{T9zfDOcr#)vCBRNY-*Q@P%)i6z9RqN1Xqq5Nj5Mn+(5?Kd0S^<(y! z%yZ$F5s0p-FJA@*PWKgA31_dk^;T1?h~98EQ;uJ7&8>RzX`!VIVr5kSryq*dh!1CX zW@d_;oO}C>#M!30Ef2oGY8oxlK3)yO#wr>`G+3fFISSY8Ng_&T%}oI~gI2bFtkhGH z(@9-`<>Qgu5Q&m9HY_N}KZYHdj*& zZ|~-OoenT4pKW{vF*=ZX5E4X=VEYnJkjhbr{Eic$k8=MOC%jPu zigUIiz(BsV@E+K)=Jjd4Rt&+Jd(>n_UW+K+JoxH%FpsL*Qd30{V+cF?hRL$1(6$u zKo2(87CJjSpR3!{_~*)%cy&JmU7$8EEG!fjsxcTsBuvS>Mh&>0qFBsybJXUi$8^(z zNbabRa>G^?)G@QKuItE-w3Ty`#rpM=`^61An+n$QcCw zjN%u1T;wFCbhaPQ?gE_(U9}MuTLOcyV?h+OTf|Y2QpzRM8sCv~C?+4Jy}Y%x^)!r# zSl;Z)c!yYymj-WERzvj_lL2_BjcoF3lUyh45^;I%v5>fc(lT=ya;Nj9qZ2zWb`(ir z)%bJ2Ed%cQNu0Ez_m}i-Y=jDl^;5^)j3Tzgjo3bJ8o9K!wLr>~2K!2CBxAtH^fqgy zZjula-}dgNK-4_B`TA3GRL?627H043;7~%C1RC2xi6Jc2IDnQfs=$GDXMg>gq%hLo zUlp+pBPM~JYqf5-O|VxKBAH7=2#W3v87Q<7=l&^MNNJrmNw}ozi)`A6&AaaHT@gyp zsik+n=W>FlhpQDXCdn)5jeYQSva+^r+T1kp$1|9tIGaReu1TK`P%&1fFOG*Ihd!jA zSE&o8>cZy|=X0FMy^pcbBqhUB>cwvLLCY(3FdvWUjkL7h(a~(*ks2ZLgRjZrUftP^ zq4Wb1Lv@U8d)Lr~1h9N}jv*ze9x&F{o<)LC72$K8832HuUaa8;{q;DSahC2j^3x+6 ziws$r`jQ|m-Lx-td~2>LA%1Rde%=ABQvKn;?j3>_q06LVeL|-vW7M&T@}%oxF&>kj zLuY3x{5DNaClQNpfV?r<{1M3yZde4n78e$FfVkLtnGuPs8*=^E@o$VI=V89o7Qf0C&Isv$*dlRW+9 z@+?hEOeSI+92{u+$>u8Vs<^yBe(;q?iNdn&oo-Yc?yC31tioREyNUs_7O#r814FP7 z_Fi-JMo0`ZI#f=$y(AsEje(iuc)-p#KfJXoQ8n> ztg5>%iHv?Eyfa3nW>HF}fV5`XW7j;M+I%>+-8!ugya77n;repoHGfPz>Jn zkh`j3nO%gktnG2{c+s6SNMxPl5&ooOMbHZDLd2P0#s^ElGe&-Q9)V4tMx#@C{xF{% zw{X1}-wQdWN`Z-+%P#@;SbX4jy4=c)?RPoBp151EvL{w4=%2+8?VV{|yq)M&mT)cw7ysXxQ2M z^&e0FbxQs7%=#Ct(=)TE&)djj1eTFC3U^S*s@5cE=`?yt!uN+W4jOt>lu_DHx zU;Y_bf1A5N&fjcE;T8UUCw4Eh+TbprG&|}*%cyQwHU0(eeMZMoojh4y{&)$key?jvRtvG-XsOsWC z*0G8%e`2+K2=BZZk&}@%0oQ-}FT2N1iGN}9tT`}0eGgIQyPwgaV^!S8IR|*&i=#=R zd!%9eBX`_IP_3jZaR3OmtPrynrsLdUj&nFlg2#x@?|X$;HYYNwrN!RsZWNvbYTyE2``T`e-R(vOZETwj&$5slco=93~=E6>Nd*oJ&8e@FS^g~<-u z2Pl&amG`T)`z=Lc_r+$AJp}F-(GFaFC_&AmMb>C$MF9?j1pdwjJHq7c>Y|Q4m)T@0RN{AX0%(3QAO{;?37g@xYHs5-j z^NkM#(&x8+f;<5wEa79*R7Lax7OQQ+`RYS_)>X);x0g#FmdKPG4&^IyEyz<9eu+%Y zOgrShX!g6EvK9lBz90syOi2k{!9OGd2lo~73T>ww1KYhaS}5>D@p1P>0lxn$z$Dyx zukKJ!-Qusav=6$1m^gXm%H^G=a;-rfx{KvH@>Q{W+S5OD(co)BiJTc}DDyMi~)QnlTA?Rx$$z+O>d2`vU6v&9H7(I){8Y&=oP;k^pp zS5zy|5S}Bqeu%-R+oJBybo~W1wGTL&`oAaix(hTd$&aj- zJ=LsXx#d6uUuC${ctQfM(`p9y9s)Q)B9r(2VjGszGQ|e2yCrphf@z62E@%M(AJ11^ z} R0DjW&SeRLxR$Op@^gk-2pkx35 literal 0 HcmV?d00001 diff --git a/frames/step_009_view.png b/frames/step_009_view.png new file mode 100644 index 0000000000000000000000000000000000000000..5265f93b49b96f938af920a7e7f5fd9a5fe288fa GIT binary patch literal 2014 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 Vb9B`$;D-q4=hODql_$M!{SyZcdD;K~ literal 0 HcmV?d00001 diff --git a/frames/step_010_view.png b/frames/step_010_view.png new file mode 100644 index 0000000000000000000000000000000000000000..679d8534866913a542b2fdaa421430a0f0ab7978 GIT binary patch literal 1860 zcmbW2`#;kQ1IK4_$>vZlAtMaQL_J8!IR_(ij_Z`EFvlet%Up6BYB9G{$DK3Ap++m0 zO_^)hk=tr=7o)zIquUl?WIT=^pP!%C>;3t>|AEiz^~rK~y(BNEAqN71D&NtL(0|}NaB>V@!g^&1Zz^Z;0)BQA1X~Ng z;(rR3N)!~!hf$t8ebUH8CuNj8hU$+NBD47GVpoz`_vwre9Rd@-MJclp^B$frQm9|5S{^U&#gqE8ErYwddwu&r3f9>J+-H6~L;* zI7z*oy}L{9*$X*!V~@_&#QFKg)b}&6=zQdwhBPAH;;|*7(FoD1*!kvTO#5ES`}Nxx zNyxCoBpxs78H>!f$E?~2C-CI5COL%K&l<6_b8|7rvtl(Ney2wQRl!FlV9k?z5E zTyB!f*Fm?;8q+zEe%Jw-kr4 zoldG?Og&hNy|f0;)&*_vZ1%?@-W|EEbYJoqQJFDE~(g#DP6 zg>^dWDLt?j)OH;>&we0(*x(*vaq9anA@Wczn@|qQTs~?QW(;5=HQnBIC8IZ{dwVgm zObj9&ux!&6mVK!9XS`Wi|4w}OF{V0myE?~_@E!>vh)<}|lYGHFo0}FlB9ga_tX~GO z|4#^=AB24Ve7L3Lozc+34)*dgZCA8vhSx*bS*dC|jEY2-bNfSomzes4fQ8-+(CUX# zy#(V5SsAE9K_7w{C#7|c ze+GbzsEma(52S9OmD;+xu0*-o-#iAY88=Ggq}YhNmlVStf?VD9f2n^pn3p!Tonw_! z(KV!X)8$9v_8rq~q^`HOH>F!B6lxSdG@Q>NmWB<*%Dw5YH2DMo1B=>={Czg3AhIu> zn6&3J(K-p|!Wjhc(2vei<;NYD$2R&XdNNqMbl*9-h5~hi!Ijqf+jgkW;To5Dd7dAg zx#olu2-=}vmAek7D-rAQc`vx zBc`@&-a}+R*ZfVTqbqueo~n+KJLmG;j zz@X-6LQ(QcMMA@bu8YNJQTp;&6l|!YKmk6jeRa#-NjRw3t1j9!oYy134;}Kj>J~3)96Mp z4d3wP2Vuj@y@ybXLA0_FW;EiaCCVon+8zA);_6j1Wh?R(bDs0e&9}4ZUrAN*?Z-gF z!^5+k3S<`9(&XqJ?4xwAsrP53YgG?Bnkie86X~5%@DuLMPEMqNqCkd?#IfgB;c~(% z9;M3GY&`sIymtbHeGdEzC>#xa^e37V!JOvcoF9|eJ!gVy$~S2~Ij;@Ds?ett9A>(% zsA^Sml|y!XcqF1jF;Tkr$t0{Tx8#)4BS6k`y4dUx&mx;vkJ1vKY^5IZRpOqOItM@N zYZ}n>Ve#9yd{&^ClSI9IT0c=k1JqPZb^UvTx_B;RnU;NTrWCOV literal 0 HcmV?d00001 diff --git a/frames/step_011_map.png b/frames/step_011_map.png new file mode 100644 index 0000000000000000000000000000000000000000..5b9a7ba725a123df0347db785ca9326a3880ccf6 GIT binary patch literal 4592 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 literal 0 HcmV?d00001 diff --git a/frames/step_012_view.png b/frames/step_012_view.png new file mode 100644 index 0000000000000000000000000000000000000000..cab11e81d3a59072ff74d30e709218f650c47b9d GIT binary patch literal 2893 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 H*SP-!X}j%H literal 0 HcmV?d00001 diff --git a/frames/step_014_view.png b/frames/step_014_view.png new file mode 100644 index 0000000000000000000000000000000000000000..14d87dcac6f446d98f0794afdc912c3f3b1b4876 GIT binary patch literal 3046 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 literal 0 HcmV?d00001 diff --git a/frames/step_015_map.png b/frames/step_015_map.png new file mode 100644 index 0000000000000000000000000000000000000000..43fd3e267db4ee8d675d2c304593375b6c0d57ff GIT binary patch literal 4500 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\IlcMEfJK!G5 z>E2b(fYVP!yCx=m$lXnXQuc7GWYBpY?UdM9{je+vBUTQZabA@XasKw__?c4 zw1FzU#jN9CdsRDdR_G@7O8n_YUOP;_Q{-~tg~Bw;3w@(;uf-OQ3-ELHtaaqwm-sIR znzRoII^98i9la2o(FEVeIr-ree{KO*2aLn<=Dhnh__^bkW2$r>Y*$83j!Zw2BYkPs z@<|~N@x&@uXK{J58p-!-HXY}PUydbp`(Q{gWl|gy8t{iNGC2oVc;#QdF zPNqf1fsdEQGM_bGx!8G@BZY??nVTkA9`_~LAEZAo*lB;11LzFV;{@l*pkw8+yeY-t zGuJ%A#quDIfKHctxMWl8m7ANVh5vKOdFmyeNP-#MA=YHqYgKUyN!nPX2Y)pu{}4Ra g=KtS~%^vEr>!JK1bNpG(-xe-2Q!A4yWA_LD1T2@4i2wiq literal 0 HcmV?d00001 diff --git a/frames/step_015_view.png b/frames/step_015_view.png new file mode 100644 index 0000000000000000000000000000000000000000..8c86c07829cfcae5f78552493c7fe1b1449efafe GIT binary patch literal 2894 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 B=(qp? literal 0 HcmV?d00001 diff --git a/frames/step_016_view.png b/frames/step_016_view.png new file mode 100644 index 0000000000000000000000000000000000000000..4791107b37dfbc3e10a234bf489dc2682f41f22d GIT binary patch literal 2825 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 H=Mw%eoYH3> literal 0 HcmV?d00001 diff --git a/frames/step_017_map.png b/frames/step_017_map.png new file mode 100644 index 0000000000000000000000000000000000000000..676a551ebbf58f73a2107df17f1e8a7579e1e230 GIT binary patch literal 4793 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 literal 0 HcmV?d00001 diff --git a/frames/step_018_view.png b/frames/step_018_view.png new file mode 100644 index 0000000000000000000000000000000000000000..4876127ca3aad3a0b516c676572be879d8835d74 GIT binary patch literal 3074 zcmZ`*X*iS(7k<>xSh6Kcp|Lf#EHAwnOUy8uDcg`OYZ?i!C2NhXv6H1n%9OE;HCeI` zqRDP7S%!otWXqZ*27P{f*Y#cRkMGAh=f{2D=g)nv`#SNa#)fCvF0cUra29o4A9FIZ zPbwIE>ZBih@KOf=_HLBEo<;EM)y&&|6CLLx1{C;#^*l*h@~pI43KkXb0yQ>oLqUd3jG%( zDBcf?O=EqQ{Qt>Ik(_-f!+&WND^;N)|696nBK|KSGk3@N-opH`;`sKj>+#+F{c=%l zU(C_0K*9Z;Blr-HmP&0M?u=bFftyX&Q}f*Am)q;>jN@#K>Ln^TO6eR2lH)X(8PJV~ zM{GQ0Y{qojjE_?abU-?J`hb(XTgXt=X&2YJuBz-+FcP?fjmMhP3JOph{NVK0!UK6pd*5MS;s)Y9@^}d$e=+wC6kzwWr!=FW}Xb`(EX1sO2$3e?|!s8A=&@vhV zB)Q3CAK~%)&V^?&Pb~XKM~%n$nE%pqZ&Ppmz$^}hFGiT zo?q%SZ^58}nW_PuBu-v-*CEfrE`eUV$MakAudua78K|>t00z9om<*r{?;5>Q>0mV| zWECGRVl#f-BPdQIu$wobWWkYXlg9I)}pU9cmyX9u*jV#Tr@AYWr*J)ny&J~-T8 zC}e=JssyzygDUIF1Oqw8iU$wV-<=)KjbVzwfWPgB70%YFj8w+y@kB`6VSwj~@qAY0 zYoJ>NX}oY&CLs52Lh#g`mPxso13V+3bhR zwq7fB91l6zN;I)=sBfr!MswxP9`~es?7)k+TLcuwbpDLxtE~kadVDn_o0t1Zrt@PO z2MsGES(FGbYn>u4$V5(6iMa%tm8wX{mUGvq3=8A~*&=H(cHjATDC>v(%d*-^pD zvS(qm=WslUeZY&4h6VM`|C-zzD7_^s_Z&{~6u6P5+{1B4FzQXAy)COl6Yb+;?o&~K zRFo-Prb?bx>p5|}7!=-ho^2m4W+gwz-fs6URgVAofaqaW(MTxuRK6}%YGG(^ zs)K6w-eIC-wan7t^Z4<1Lin4KMPz9BFZv2s^KpSgsR(_=YgYGwG^g_*8J>q<5D*9X zD1cK?(Ag zv^O~r1!rB)8NY8WL5=vJy>0g`uzvP;x=sD&(faX`GEhrgeNRVUe#O*gS@Pbo#HuCq za4Pc5{MhtQ;lJx=!F7?%XNGOXNS6=5EWmf%VqnyL9#>2&B+50&OY69EI@z7Ej~?&& z9QXNtO$yg;N??%OG>)dNvr9A@^omc8^oo7J)iCP2qpL`j9`wr}{xJf;xlP$fje!K~ z48!o_Bxfvl-k5v&^bu<5yI*E2qJ_Tos&mMpfKw50pE+S>!)b|0sPwmPhPiESsS^N+NW<|(gA$@3 z+yJOw??FP5gTUZM<+3V_of9J6eJ)4Z;19#;0y%!hFy(mS{Zd2Ofzw3b-V2Id8Llp{ zu~cU}fV}w2pj5S3BjVY@--9(@m9xZQbYHE03p}pc=s}t*zuwb{wC#jv_P^}Sv zlL;viKOTQWOJ_r`*keeQ0Ps9JHArc|wEys~L zW{+Zi3$DsGT$DQgyz2T%Qq{IPXETyt9rxp&j5g=oGTkGd?Y5(%N%bGd?(Qy9Qz`7! zl);ny9o&USp`q_v_|Gk4l-y~Ax~~V$i(EMiDcu2>mvdS?3wBp`Ls&AukZ)YVNkp-e zn(fZD`r~f_fuoy?BkZs*KLVnX|5ihg~k#H!a<5wo(2SW8U^ud%^<8Jdk5=(Bksa zej@W|+1WjVu)4ZJ?Xc_XJ?h=CwczoE!ituVIC0GmbS9YOSHm*q*gBCCezfxM3>5mu|lR( zbQt2HY0M2-!DrVxGVb;9#9t|Q5?nHy((>TM7BjaNrMN7h{roS}6a@P>x;2B}N)3m#**HIexNYy-;BOlGD7x4%XKhC$U(ynx zioNy~K6BGe7rG29p7Duk&d!KaCK|((^YCQBF;h-;@)A$M(Vx@o0wN!-LL~-HetQ6A LV60yTcf$V%cVguO literal 0 HcmV?d00001 diff --git a/frames/step_019_map.png b/frames/step_019_map.png new file mode 100644 index 0000000000000000000000000000000000000000..569a90d0e7745051837188367b8a5a178e2976e4 GIT binary patch literal 4921 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 CgQL0t literal 0 HcmV?d00001 diff --git a/frames/step_019_view.png b/frames/step_019_view.png new file mode 100644 index 0000000000000000000000000000000000000000..e0a0759bc4c745febc9b4e1e56584a77bb0c10a4 GIT binary patch literal 3281 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 literal 0 HcmV?d00001 diff --git a/frames/step_020_view.png b/frames/step_020_view.png new file mode 100644 index 0000000000000000000000000000000000000000..5ff15a4dd8cc46f84ab1538b644291de6de9c9ff GIT binary patch literal 3566 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 literal 0 HcmV?d00001 diff --git a/frames/step_021_map.png b/frames/step_021_map.png new file mode 100644 index 0000000000000000000000000000000000000000..7b211852ae20d25976d95bbe962bf53226332b86 GIT binary patch literal 4802 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 literal 0 HcmV?d00001 diff --git a/frames/step_021_view.png b/frames/step_021_view.png new file mode 100644 index 0000000000000000000000000000000000000000..e33cf0f76ff1eff52f693ec7fa51479968fcd2c6 GIT binary patch literal 3778 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 literal 0 HcmV?d00001 diff --git a/frames/step_022_map.png b/frames/step_022_map.png new file mode 100644 index 0000000000000000000000000000000000000000..f5d354045dee06c0ab59e0ba99eaae4e67335646 GIT binary patch literal 4978 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 V3&1rd0KGIOJsl(Mvg@|b{{hz_q<;Va literal 0 HcmV?d00001 diff --git a/frames/step_022_view.png b/frames/step_022_view.png new file mode 100644 index 0000000000000000000000000000000000000000..840037e3f51776e324e5bc8e502b74e0a4f53beb GIT binary patch literal 4471 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 JPDHLkV1kj5#U=m% literal 0 HcmV?d00001 diff --git a/frames/step_023_map.png b/frames/step_023_map.png new file mode 100644 index 0000000000000000000000000000000000000000..470881e88ae73ee0f96b749111f2ab839340bb7c GIT binary patch literal 5116 zcmb7I2T)U6w+@{v0Yp@~A}Cb?(jroAaETPDL6IW8cceGDfT(~-Q##TNCGjGm8Ui9s zr1z49A_)WtE!0q6(Ep$J{+T=T-a9jA&g{L<-fOS&t@Z64|4>hh^$hPB006+M{pUSH z0Dwm0^kt@{_T1T&JpuqYTea`qHV({Q#f12sx6ka@s8!A>;bamK1N;A_7|r#Aw)Gm< zRYCfn6&V5!4~L&7f?muq(6oZ;82_;Kx|hrWd{Mqk%7<$O^ko~!7drYsb5P9B*Wh1B z*NDu1q`_qtKX>io)d}^N?wLfrK?{t9iT=p$7IcwRn_F8(>7bZGcc+>L2W1&FN+J!* zii_Kx*rIW`(NPDuyV&^;Ab(hvjRm^i0gxRDpnJ|?tsz4TWY&zNX!03VaV=pZSWu70+eqPNW>Jv}E(Lx$SH;=Bi@ zp(hKhEG;c9DoWn$KB=+o==~YunwpUjFk(_{Uh825$?@$~3cxBA78UKKn|qi*7V!A= zjJ~CTLP~~Ju35d$HW(LL2;SHa{p^4V@47~(pW_lngel~O?Whm%txVPSp?0xpIXRfY zO?Uroxt^Y$fkxl$5&MGvB@7SPW2GsK>BD8~%-K#i>Q=lSSYWhZ&?w1kw`g&J^ZF^1 zq+K-5_Um8X>}qv;@uH^KAi^pHwhV7{Si`ozeEGes%sv1YrZuRVKp>WP*LYM8omhU^ zYiVykf*_YqzATmSJtIwTH`B4NPS=MJhsBdcQbct3cBax9SR}B4g%0hnr+|E4)|wh4 zC{tsS5)xww#QsE|hwO^p{kFHAB)2J3u(wUHS`2T9ove4o3`Br&?_e2WfplprGtmd~ zDf&%TXWcD$XfiUl7PgkXzeSL;Xt0~8D$cOH^)TXRIil&NZM%Dt>P}~s{R7I*Y9VeM z6|$R|Svxf~l_a1%iV6uR9#&raLcwQwiWeX3qCX;$3N;^|DyxRzr5;r|QCE79ew{cW zC*7c)EYcdsUXJkWKM6nFxS*imd7s3q>YPLA0jFe&pI z1^E>P^6cCzX>3zisi6yHC+BYLp~=skaSRNBQ?~h*B*bn;Rb-#AYjo;V70OB`4c&qI z@t&~jXhpWlesJ-yT%YkS3G+aFd%gA5_96SFC!efu*JBlTI{ktw02XmZi&>sc-lG*0 zgq#4vK91EyHt$^0TAo8Wwdac=7W0ZZ3&p+NhQG_AvDE_N)2! zgd8Q`gTf>b6e6G!xH!{t7Xp(+@FVTJO^b)2R$-N?nd%Xwj|Oc?Dw}56@N87hS`!6c z^KAa|$)44Ghn0eDJC2P{QGPHlNgWFZ*ROxwO1h+4auRkJ=t~~m+}upOtPW2-INX{K z3JOY|lCI0Q^7ejeU@%Kvd;4%}85ri|;vxY8O;;~P8x+0_*-;sS-~`aP%M&?;T1l2( zEey#_!=oP8#l?eHkzmc&+)d6ycvr;HGM828zI4R?nu4n-+{(%bx=Xkn4N?zWe}h}= z?qioMK63^>Ub9M`zVdG?39r|<`!6i`25%FQJ`2Rogx1(2rvtM2<*@3qFQFb{=Qk92EHI#0KRk$-*^I&@!Z2$cym*w7Ar)!sayDm7Sga{JA8NsFsKgTuELco6$i0&&`;Wk5*V&`SvKJ;Cr$J>TgI&E_0#H z9vc|cI}N-g5|P1ylarIe;xEGo;_ej0un?e7#1S^`i|S=}c6G&1o#65KT-6YX;$GESN3ywYPmh%w_OQUvWed;VI{T?$Wc=^q?hN%) zDeUUgK6~r4i;Z^*`kyl_BxAaIdX&89?)}8tb|fNeYx4rI^ zSx89MFIdnq;n{ipCg2v^tgIo7?4Zux-bAv*zub2SAmH&Jb5j#5+$SG=CIxsxO-;o{nx3tyV*+p%m8p=bntP2_ynl63Y9K2wA{0DDO#KM*MjCbQVjsB*Hv&VJ|?p^sWJbmu%rc!_#>;jUp}(P}WgFCM0* zqhEqP=Y>|?I>1_@f~l1_WMeLl6P9&8Uiv!mu@QKH-RGuJNC*WHzHKaFZdOaW###B; z+?;huN?r+`wR$@3$?84KVngv>d?le-H%W=16OL z?z6A|kv;tLU}$mi(tZpGfOpEg2xRO*vWgX}AY;$^!i6%_8D$nmpH4JG*r zH+w1F^(*xByZ!nPnd$3qvC7Bm-sIK34AzmgwA`n(z_Gz0*B5X-^u~Tw!Jym^`>SCb;DU-wX`6`^+^sPo_K>G%FYMOKp|>XidZM>l+=890A&tN@7J*>tr- z2{p(cTr6>|y1Kf-kooY7kN?m|2sL|wRa?uV3(SIpFVMs;FNrTus78isS41JItA9`x zOU!qEEW@2@0?tp}9G<*CTJrxskeFde)~18-plGUMNJ zm_Zf9)h)8hLLDO-6dCN;gn!e#|JBemxM8ML)BP&*;PCMIqrU0sON##ASea!iY+t}{ zDWiaBk+arjSKngW+lL~6JhE4P)~Iw8cAiF$m(cv_j$5#D5b&H<r{BWm||-(IkxpFN}G3CKV>Qq&IzAKv9zKno|cjBMg8*q2#mFsbXa{VyD9X5Kh_91jrAsatow!3LI% znH{60=XT~)JxqkLO^$P}2{!-9F49*slP`SqPQ^SHAj}#_m;lif8;hN-53*T_}$1=!2k?vh_6oI2{*5R@nwt=Wn(lUfotC_`NN7>9nqu0 z%`!>5a5t(K&ZRht&M0Z{${bEoeGL@pW4rwefp6Q_m-*?ryRM)T@BHp)USF1{=Z>HI zilEy_Z3f0##ZfoMoZ{#x)V#=>;@B}4f7^#UTp$Ke$fA>*^BPbnr;{u2+cU@7vKUhv z%n@Zb%k^Eu;bG{IyOC1wz)R@WT5(; z4wj}0U5D0AcNUa)fE1nF`!m{i_+!bN*fd)XYriP+EgqU!jPy~mZN&9onKybC`uo&|N}Pqt)2=ud zL2vy!#i3r!jxo?eU=PLY9=Ib$bni=qk?JZ(_vz$yyLB+2hhT4-;?z1MOr=gFeMv2# z8turA-T;$!DMOZEj$z#omGus16QqwC81;(?>%|PB;bYQO@3H;07%o_AG zq&I4*T?aCp4^%@EilC)wABH5awHA#<+kKIjx|n4q&J#Pf-XKpDD`)GIX+?mQ4(>an zdeM~Q7M%GMU%n*$-s`$01-tS0^VCsCrHuurS9Ru9 z=azZ?4T);#bJwOeEa?rfwfoDleQc4b+jYwVDp~!IMTKXr_q6Zv`qc2SoqfI6O*eZb z(RDJnjR(pkF8iF^@!g;xdOdsO&#wz?ym4tpakv*{+WYT8vxjSe4llG$xb(v+eM35) z67+MQvPv`Fv_KnMLu22o2!HjJj#-T9HTm9}vCV@IFg)91PSg9X9M}HfTM^f#GhX<1 zP&bIfm&g(wX((Yg^wrUHRN+T{MipWn5k@e+hmd&lEQyJRjdn}9;-l~gLKx^txM?M;FS7II`?=$q>gs#?8Ru{@ ze!~jFX$>XF>gqqIamK`kh%@egdX|i7_x4Xc*2(3_=%#b)4ykdDFn_gnrBK*|?Nb8u ziH$2yuk}!!ec*dnIycJp;MWCr=l6PYL7Jk|Jl0b~QwB?RazEnW{YqR-YS}5+Isut5 zh#MubIcoZ%b!jowk(6>tCwJf)lwth+(ntb~O++EbVe|F9I)cgEPqOCKcTZba+azVj zuf4#(1-$wb0h%zf5nW?(Bg6t&APD%Dq)zsMkoO$jbr6cfTkZ!;`mGRUK?sa$=+%#J zTV<;dz1d6(tQTzpDx7`b5{XH+v{(_p@kTJ2Mln>mLjZBSh%@x8TBon?lV+TrwTU zfE3GS`7An};3(s99_vAtqRtusU-)_^^_Ou@>vl^)DK}>7nuBf7$B!NCRa<`qQK9)w z^Rxi>$m?)WxmtAtHF?;(+O+Y7^rY@kj!G!mE03QH7sFGQAA@5Qi^itMSp+jxJ#D