From 752a7275feb6e0373141ba8c460c4da835ec05db Mon Sep 17 00:00:00 2001 From: Harold <20009626+HaroldGin931@users.noreply.github.com> Date: Wed, 27 May 2026 12:44:06 +0800 Subject: [PATCH 01/17] Add Go2 startup self-check blueprint --- dimos/robot/all_blueprints.py | 2 + dimos/robot/custom/__init__.py | 0 dimos/robot/custom/go2_startup_self_check.py | 168 +++++++++++++++++++ 3 files changed, 170 insertions(+) create mode 100644 dimos/robot/custom/__init__.py create mode 100644 dimos/robot/custom/go2_startup_self_check.py diff --git a/dimos/robot/all_blueprints.py b/dimos/robot/all_blueprints.py index 3d101cca79..8b5bf6d98d 100644 --- a/dimos/robot/all_blueprints.py +++ b/dimos/robot/all_blueprints.py @@ -107,6 +107,7 @@ "unitree-go2-ros": "dimos.robot.unitree.go2.blueprints.smart.unitree_go2_ros:unitree_go2_ros", "unitree-go2-security": "dimos.robot.unitree.go2.blueprints.agentic.unitree_go2_security:unitree_go2_security", "unitree-go2-spatial": "dimos.robot.unitree.go2.blueprints.smart.unitree_go2_spatial:unitree_go2_spatial", + "unitree-go2-startup-self-check": "dimos.robot.custom.go2_startup_self_check:unitree_go2_startup_self_check", "unitree-go2-temporal-memory": "dimos.robot.unitree.go2.blueprints.agentic.unitree_go2_temporal_memory:unitree_go2_temporal_memory", "unitree-go2-vlm-stream-test": "dimos.robot.unitree.go2.blueprints.smart.unitree_go2_vlm_stream_test:unitree_go2_vlm_stream_test", "unitree-go2-webrtc-keyboard-teleop": "dimos.robot.unitree.go2.blueprints.basic.unitree_go2_webrtc_keyboard_teleop:unitree_go2_webrtc_keyboard_teleop", @@ -152,6 +153,7 @@ "go2-connection": "dimos.robot.unitree.go2.connection.GO2Connection", "go2-fleet-connection": "dimos.robot.unitree.go2.fleet_connection.Go2FleetConnection", "go2-memory": "dimos.robot.unitree.go2.blueprints.smart.unitree_go2.Go2Memory", + "go2-startup-self-check": "dimos.robot.custom.go2_startup_self_check.Go2StartupSelfCheck", "google-maps-skill-container": "dimos.agents.skills.google_maps_skill_container.GoogleMapsSkillContainer", "gps-nav-skill-container": "dimos.agents.skills.gps_nav_skill.GpsNavSkillContainer", "grasp-gen-module": "dimos.manipulation.grasping.graspgen_module.GraspGenModule", diff --git a/dimos/robot/custom/__init__.py b/dimos/robot/custom/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/dimos/robot/custom/go2_startup_self_check.py b/dimos/robot/custom/go2_startup_self_check.py new file mode 100644 index 0000000000..706fbfb45b --- /dev/null +++ b/dimos/robot/custom/go2_startup_self_check.py @@ -0,0 +1,168 @@ +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations # 允许类型注解延迟解析,减少循环导入风险 + +import os # 导入系统环境变量工具,用来修正 macOS 的 pygame 显示驱动 +import sys # 导入系统信息工具,用来判断当前是不是 macOS +import threading # 导入线程工具,用后台线程执行自检动作 +import time # 导入时间工具,用来计时和控制发布频率 +from typing import Any # 导入 Any,表示这里可以接收任意类型参数 + +from dimos.constants import DEFAULT_THREAD_JOIN_TIMEOUT # 导入线程停止等待的默认超时时间 +from dimos.core.coordination.blueprints import autoconnect # 导入蓝图组合函数 +from dimos.core.core import rpc # 导入 rpc 装饰器,让生命周期方法可被框架调用 +from dimos.core.module import Module, ModuleConfig # 导入模块基类和模块配置基类 +from dimos.core.stream import Out # 导入输出流类型,用来发布消息 +from dimos.msgs.geometry_msgs.Twist import Twist # 导入速度命令消息类型 +from dimos.msgs.geometry_msgs.Vector3 import Vector3 # 导入三维向量类型 +from dimos.robot.unitree.go2.blueprints.basic.unitree_go2_coordinator import ( # 导入现有 Go2 控制协调蓝图 + unitree_go2_coordinator, # 复用 GO2Connection + ControlCoordinator 控制链路 +) # 结束多行 import +from dimos.robot.unitree.keyboard_teleop import KeyboardTeleop # 导入现有 WASD 键盘控制模块 +from dimos.utils.logging_config import setup_logger # 导入日志初始化函数 + +if sys.platform == "darwin": # 如果当前运行环境是 macOS + os.environ["SDL_VIDEODRIVER"] = "cocoa" # 用 macOS 原生窗口驱动,覆盖原模块里的 x11 设置 + +logger = setup_logger() # 创建当前文件使用的日志对象 + + +class Go2StartupSelfCheckConfig(ModuleConfig): # 定义自检模块的配置类 + """Runtime knobs for the one-shot Go2 startup movement check.""" # 说明这些配置控制一次性启动自检 + + linear_speed_mps: float = 0.25 # 自检前进和后退速度,单位是米每秒 + forward_duration_sec: float = 2.0 # 前进持续时间,单位是秒 + backward_duration_sec: float = 2.0 # 后退持续时间,单位是秒 + command_publish_hz: float = 20.0 # 速度命令发布频率,单位是赫兹 + startup_delay_sec: float = 10.0 # 兜底等待时间,避免 Go2 start() 不返回时自检永远不启动 + + +class Go2StartupSelfCheck(Module): # 定义一个 DimOS 模块,用来发布启动自检速度命令 + """Publish one forward/stop/backward/stop sequence after all modules start.""" # 说明模块会在系统启动后执行前进/停止/后退/停止 + + config: Go2StartupSelfCheckConfig # 声明本模块使用上面的配置类型 + cmd_vel: Out[Twist] # 声明输出流,向外发布 Twist 速度命令 + + def __init__(self, **kwargs: Any) -> None: # 定义构造函数,接收框架传入的配置参数 + super().__init__(**kwargs) # 调用父类构造函数,让 DimOS 初始化模块和流 + # 这个事件用于通知后台线程停止,避免退出时还在发运动命令。 + self._stop_event = threading.Event() # 创建停止事件,默认状态是未停止 + # 线程先保持为空,直到 on_system_modules() 才启动,所以 start() 不会触发运动。 + self._thread: threading.Thread | None = None # 保存后台自检线程对象 + # 兜底线程用于在 on_system_modules() 没到达时延迟启动自检。 + self._fallback_thread: threading.Thread | None = None # 保存延迟兜底线程对象 + # 这个锁防止 on_system_modules() 和兜底线程同时启动两个自检线程。 + self._start_lock = threading.Lock() # 创建启动锁,保护自检启动状态 + # 这个标记防止 on_system_modules() 被重复调用时重复执行自检。 + self._started_self_check = False # 记录自检是否已经启动过 + + @rpc # 标记 start() 是可被 DimOS 框架调用的 RPC 生命周期方法 + def start(self) -> None: # 定义模块启动方法 + super().start() # 调用父类启动逻辑,启动 RPC、自动绑定等框架功能 + # start() 只重置状态;真正运动要等所有系统模块都启动完。 + self._stop_event.clear() # 清除停止事件,允许后续自检线程运行 + # 如果 GO2Connection.start() 长时间不返回,on_system_modules() 不会被调用,所以这里启动兜底等待线程。 + self._fallback_thread = threading.Thread( # 创建延迟兜底线程 + target=self._run_delayed_self_check, # 指定线程执行延迟启动函数 + name="Go2StartupSelfCheckFallback", # 给兜底线程起名,方便日志和调试 + daemon=True, # 设置为守护线程,进程退出时不会被它卡住 + ) # 结束兜底线程参数 + self._fallback_thread.start() # 启动兜底线程,但它会先等待 startup_delay_sec + + @rpc # 标记 on_system_modules() 是可被 DimOS 框架调用的 RPC 方法 + def on_system_modules(self, _modules: list[Any]) -> None: # 所有模块启动后,框架会调用这里 + # ModuleCoordinator 会在每个模块 start() 都返回后调用这里。 + self._start_self_check("all modules started") # 所有模块启动完成时,立即启动自检 + + @rpc # 标记 stop() 是可被 DimOS 框架调用的 RPC 生命周期方法 + def stop(self) -> None: # 定义模块停止方法 + # 先通知线程停止,再发零速度,保证退出时机器人不会继续动。 + self._stop_event.set() # 设置停止事件,让后台线程尽快退出循环 + self.cmd_vel.publish(Twist.zero()) # 发布零速度命令,让机器人停下 + + if self._thread is not None and self._thread.is_alive(): # 如果线程存在且仍在运行 + self._thread.join(DEFAULT_THREAD_JOIN_TIMEOUT) # 等待线程结束,但最多等默认超时时间 + + if self._fallback_thread is not None and self._fallback_thread.is_alive(): # 如果兜底线程还在等待 + self._fallback_thread.join(DEFAULT_THREAD_JOIN_TIMEOUT) # 等待兜底线程退出,但最多等默认超时时间 + + super().stop() # 调用父类停止逻辑,释放框架资源 + + def _run_delayed_self_check(self) -> None: # 定义延迟兜底启动逻辑 + logger.info("Go2 startup self-check fallback waiting") # 记录兜底等待开始日志 + if self._stop_event.wait(self.config.startup_delay_sec): # 等待配置的秒数,期间如果收到停止就返回 True + return # 如果停止事件已经触发,就不再启动自检 + + self._start_self_check("startup delay elapsed") # 等待结束后,如果还没启动过,就兜底启动自检 + + def _start_self_check(self, reason: str) -> None: # 定义统一的自检启动入口 + with self._start_lock: # 加锁,避免两个线程同时进入启动逻辑 + if self._started_self_check: # 如果自检已经启动过 + return # 直接返回,避免重复启动第二个自检线程 + + self._started_self_check = True # 标记自检已经启动 + self._thread = threading.Thread( # 创建后台线程,避免阻塞主流程 + target=self._run_self_check, # 指定线程执行自检函数 + name="Go2StartupSelfCheck", # 给线程起名,方便日志和调试 + daemon=True, # 设置为守护线程,进程退出时不会被它卡住 + ) # 结束线程参数 + logger.info("Go2 startup self-check scheduled", reason=reason) # 记录自检启动原因 + self._thread.start() # 启动后台自检线程 + + def _run_self_check(self) -> None: # 定义后台线程实际执行的自检流程 + logger.info("Go2 startup self-check started") # 记录自检开始日志 + try: # 使用 try/finally,保证异常或停止时也会发零速度 + self._publish_for_duration( # 发布一段时间的前进速度 + speed_mps=self.config.linear_speed_mps, # 前进速度使用配置里的正速度 + duration_sec=self.config.forward_duration_sec, # 前进时间使用配置里的前进时长 + ) # 结束前进发布调用 + self.cmd_vel.publish(Twist.zero()) # 前进结束后发布零速度,先停一下 + + self._publish_for_duration( # 发布一段时间的后退速度 + speed_mps=-self.config.linear_speed_mps, # 后退速度使用配置速度的负数 + duration_sec=self.config.backward_duration_sec, # 后退时间使用配置里的后退时长 + ) # 结束后退发布调用 + self.cmd_vel.publish(Twist.zero()) # 后退结束后发布零速度,让机器人停下 + finally: # 不管上面是否正常结束,最后都执行这里 + # 最后再发一次零速度,确保中断或异常时最终状态也是停止。 + self.cmd_vel.publish(Twist.zero()) # 发布最终零速度命令 + logger.info("Go2 startup self-check finished") # 记录自检结束日志 + + def _publish_for_duration(self, speed_mps: float, duration_sec: float) -> None: # 按固定时间持续发布速度 + period_sec = 1.0 / self.config.command_publish_hz # 根据频率计算每次发布之间的间隔 + end_time = time.monotonic() + duration_sec # 计算这段动作应该结束的时间点 + twist = Twist( # 创建一个 Twist 速度命令 + linear=Vector3(speed_mps, 0.0, 0.0), # 设置 x 方向线速度,y/z 为 0 + angular=Vector3(0.0, 0.0, 0.0), # 设置角速度全为 0,不转向 + ) # 结束 Twist 创建 + + while not self._stop_event.is_set() and time.monotonic() < end_time: # 未停止且未超时时继续发布 + self.cmd_vel.publish(twist) # 发布当前速度命令 + time.sleep(period_sec) # 睡眠一个周期,控制发布频率 + + +# 复用现有 Go2 协调控制蓝图,再额外加上 WASD 键盘控制和一次性启动自检发布者。 +unitree_go2_startup_self_check = autoconnect( # 定义 CLI 可运行的组合蓝图 + unitree_go2_coordinator, # 第一部分:现有 Go2 + ControlCoordinator 控制链路 + KeyboardTeleop.blueprint(publish_only_when_active=True), # 第二部分:WASD 按下时才发布速度 + Go2StartupSelfCheck.blueprint(), # 第三部分:新增的启动自检模块 +) # 结束蓝图组合 + + +__all__ = [ # 声明这个文件希望对外暴露的名字 + "Go2StartupSelfCheck", # 暴露自检模块类 + "Go2StartupSelfCheckConfig", # 暴露自检配置类 + "unitree_go2_startup_self_check", # 暴露自检蓝图变量 +] # 结束 __all__ 列表 From 48be97547f6b0231cd0ddaa16e46d170b2ba3a60 Mon Sep 17 00:00:00 2001 From: Harold <20009626+HaroldGin931@users.noreply.github.com> Date: Wed, 27 May 2026 13:38:16 +0800 Subject: [PATCH 02/17] fix bug about pygame, switch to DIMOS control --- dimos/robot/custom/go2_startup_self_check.py | 21 +++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/dimos/robot/custom/go2_startup_self_check.py b/dimos/robot/custom/go2_startup_self_check.py index 706fbfb45b..dcee8ff213 100644 --- a/dimos/robot/custom/go2_startup_self_check.py +++ b/dimos/robot/custom/go2_startup_self_check.py @@ -14,8 +14,6 @@ from __future__ import annotations # 允许类型注解延迟解析,减少循环导入风险 -import os # 导入系统环境变量工具,用来修正 macOS 的 pygame 显示驱动 -import sys # 导入系统信息工具,用来判断当前是不是 macOS import threading # 导入线程工具,用后台线程执行自检动作 import time # 导入时间工具,用来计时和控制发布频率 from typing import Any # 导入 Any,表示这里可以接收任意类型参数 @@ -27,15 +25,11 @@ from dimos.core.stream import Out # 导入输出流类型,用来发布消息 from dimos.msgs.geometry_msgs.Twist import Twist # 导入速度命令消息类型 from dimos.msgs.geometry_msgs.Vector3 import Vector3 # 导入三维向量类型 -from dimos.robot.unitree.go2.blueprints.basic.unitree_go2_coordinator import ( # 导入现有 Go2 控制协调蓝图 - unitree_go2_coordinator, # 复用 GO2Connection + ControlCoordinator 控制链路 +from dimos.robot.unitree.go2.blueprints.smart.unitree_go2 import ( # 导入现有 Go2 完整蓝图 + unitree_go2, # 导入现有 Go2 完整蓝图 ) # 结束多行 import -from dimos.robot.unitree.keyboard_teleop import KeyboardTeleop # 导入现有 WASD 键盘控制模块 from dimos.utils.logging_config import setup_logger # 导入日志初始化函数 -if sys.platform == "darwin": # 如果当前运行环境是 macOS - os.environ["SDL_VIDEODRIVER"] = "cocoa" # 用 macOS 原生窗口驱动,覆盖原模块里的 x11 设置 - logger = setup_logger() # 创建当前文件使用的日志对象 @@ -153,11 +147,14 @@ def _publish_for_duration(self, speed_mps: float, duration_sec: float) -> None: time.sleep(period_sec) # 睡眠一个周期,控制发布频率 -# 复用现有 Go2 协调控制蓝图,再额外加上 WASD 键盘控制和一次性启动自检发布者。 +# 复用现有 Go2 完整蓝图,再额外加上一次性启动自检发布者。 unitree_go2_startup_self_check = autoconnect( # 定义 CLI 可运行的组合蓝图 - unitree_go2_coordinator, # 第一部分:现有 Go2 + ControlCoordinator 控制链路 - KeyboardTeleop.blueprint(publish_only_when_active=True), # 第二部分:WASD 按下时才发布速度 - Go2StartupSelfCheck.blueprint(), # 第三部分:新增的启动自检模块 + unitree_go2, # 第一部分:现有 Go2 连接、viewer、导航和 MovementManager + Go2StartupSelfCheck.blueprint(), # 第二部分:新增的启动自检模块 +).remappings( # 把自检速度命令接入现有 MovementManager 的手动控制入口 + [ + (Go2StartupSelfCheck, "cmd_vel", "tele_cmd_vel"), # 自检发布到 tele_cmd_vel,由 MovementManager 转成 cmd_vel + ] # remapping 列表结束 ) # 结束蓝图组合 From 9212a551966f46f23cd6fe17eaa1d83250a70f2e Mon Sep 17 00:00:00 2001 From: Harold <20009626+HaroldGin931@users.noreply.github.com> Date: Wed, 27 May 2026 18:16:59 +0800 Subject: [PATCH 03/17] BBox rendering --- dimos/robot/all_blueprints.py | 3 + dimos/robot/custom/README.md | 192 +++++++ dimos/robot/custom/bbox_distance_follow.py | 577 +++++++++++++++++++++ 3 files changed, 772 insertions(+) create mode 100644 dimos/robot/custom/README.md create mode 100644 dimos/robot/custom/bbox_distance_follow.py diff --git a/dimos/robot/all_blueprints.py b/dimos/robot/all_blueprints.py index 8b5bf6d98d..a1304974c7 100644 --- a/dimos/robot/all_blueprints.py +++ b/dimos/robot/all_blueprints.py @@ -17,6 +17,7 @@ all_blueprints = { "alfred-nav": "dimos.robot.diy.alfred.blueprints.alfred_nav:alfred_nav", + "bbox-distance-follow": "dimos.robot.custom.bbox_distance_follow:bbox_distance_follow", "coordinator-basic": "dimos.control.blueprints.basic:coordinator_basic", "coordinator-cartesian-ik-mock": "dimos.control.blueprints.teleop:coordinator_cartesian_ik_mock", "coordinator-cartesian-ik-piper": "dimos.control.blueprints.teleop:coordinator_cartesian_ik_piper", @@ -126,7 +127,9 @@ all_modules = { "alfred-high-level": "dimos.robot.diy.alfred.effector_high_level.AlfredHighLevel", "arm-teleop-module": "dimos.teleop.quest.quest_extensions.ArmTeleopModule", + "b-box-distance-behavior-module": "dimos.robot.custom.bbox_distance_follow.BBoxDistanceBehaviorModule", "b-box-navigation-module": "dimos.navigation.bbox_navigation.BBoxNavigationModule", + "b-box-selection-module": "dimos.robot.custom.bbox_distance_follow.BBoxSelectionModule", "b1-connection-module": "dimos.robot.unitree.b1.connection.B1ConnectionModule", "camera-module": "dimos.hardware.sensors.camera.module.CameraModule", "cartesian-motion-controller": "dimos.manipulation.control.servo_control.cartesian_motion_controller.CartesianMotionController", diff --git a/dimos/robot/custom/README.md b/dimos/robot/custom/README.md new file mode 100644 index 0000000000..b9d9bc89aa --- /dev/null +++ b/dimos/robot/custom/README.md @@ -0,0 +1,192 @@ +# Custom Robot Blueprints + +## bbox-distance-follow + +`bbox-distance-follow` 是一个最小可启动的 Go2 blueprint,用于验证 “检测多个 bbox -> 用户选择一个 bbox -> 根据 selected bbox + lidar + camera_info 控制 Go2 距离” 这条链路。 + +这个 blueprint 只保留 DimOS Module/RPC,不接 `@skill`、Agent、Prompt、MCP 或新的 UI 模块。它可以通过 `dimos run bbox-distance-follow` 启动,也可以在 replay 下通过 viewer 观察 selected bbox overlay。 + +### 组成 + +- `unitree_go2_basic` +- `Detection2DModule.blueprint(camera_info=GO2Connection.camera_info_static, publish_detection_images=False)` +- `BBoxSelectionModule.blueprint()` +- `BBoxDistanceBehaviorModule.blueprint()` + +全局配置: + +```python +.global_config(n_workers=6, robot_model="unitree_go2") +``` + +### 数据流 + +```text +unitree_go2_basic.color_image + -> Detection2DModule.color_image + -> Detection2DModule.detections + -> BBoxSelectionModule.detections + -> BBoxSelectionModule.selected_bbox + -> BBoxDistanceBehaviorModule.selected_bbox + -> BBoxDistanceBehaviorModule.cmd_vel + -> GO2Connection.cmd_vel + +unitree_go2_basic.lidar + -> BBoxDistanceBehaviorModule.lidar + +unitree_go2_basic.camera_info + -> BBoxDistanceBehaviorModule.camera_info +``` + +`Detection2DModule.detections` 明确发布到 LCM topic `/color_image/detections`,`selected_bbox` 明确发布到 LCM topic `/color_image/selected_bbox`。RerunBridge 会把它们映射到 `world/color_image/detections` 和 `world/color_image/selected_bbox`,本 blueprint 对这两个实体路径配置了专用 `visual_override`,把 YOLO 候选 bbox 显示为黄色框,把 selected bbox 显示为绿色框。Go2 viewer 的 Camera view origin 是 `world/color_image`,所以这些 bbox 会作为相机图像子实体显示在 Camera 视图上。 + +`publish_detection_images=False` 是有意设置:`Detection2DModule.detected_image_0/1/2` 当前是 cropped detection images,不是原始相机图像上的 bbox overlay。这个 blueprint 直接在 Rerun Camera 视图里渲染 bbox,避免 cropped images 出现在 3D view 中并触发无 Pinhole 的 2D visualizer warning。 + +### BBoxSelectionModule + +职责: + +- 消费 `Detection2DModule.detections` 的多 bbox。 +- 保存最新一帧 detections。 +- 通过 RPC 保存用户选择的 `index` 或 `id`。 +- 每帧只转发当前选中的 detection。 +- 如果当前帧找不到选中 bbox,发布空 `Detection2DArray`,避免下游或 viewer 复用旧 bbox。 + +它不创建 detector、不跑 YOLO、不调用 VLM、不做 ReID/EdgeTAM,也不负责目标丢失恢复。 + +RPC: + +- `list_candidates() -> list[dict[str, Any]]` +- `select_bbox(index: int | None = None, id: str | None = None) -> str` +- `clear_selection() -> str` + +候选字段: + +- `index` +- `id` +- `bbox: [x1, y1, x2, y2]` +- `confidence` +- `class_id` + +### BBoxDistanceBehaviorModule + +职责: + +- 消费 `selected_bbox + lidar + camera_info`。 +- 输出 `cmd_vel` 和 `behavior_status`。 +- 不做人识别、不选择目标、不做目标丢失恢复。 + +RPC: + +- `start_bbox_distance_behavior(hold_seconds=None, hold_distance=None, approach_distance=None) -> str` +- `stop_bbox_distance_behavior() -> str` + +默认参数: + +- `command_hz = 20.0` +- `hold_seconds = 3.0` +- `hold_distance = 1.5` +- `approach_distance = 0.8` +- `depth_percentile = 25.0` +- `max_linear_speed = 0.45` +- `max_angular_speed = 0.8` + +状态机: + +```text +idle -> holding_distance -> approaching -> done +``` + +`hold_seconds` 从第一次拿到有效 bbox + lidar distance 后开始计时,不从 RPC 调用瞬间开始。bbox 为空、camera_info 缺失、lidar 距离无效时发布 `Twist.zero()` 并等待,不重新识别。完成或停止时发布 `Twist.zero()`。 + +lidar 距离 MVP 直接用 camera intrinsics 将点云投影到 bbox,取 `depth_percentile` 深度;如果实际 lidar 坐标系没有和相机对齐,后续再补 TF 修正。 + +### 启动 + +`bbox-distance-follow` 复用 `Detection2DModule` 的默认 YOLO detector。真机测试通常断网,所以需要先在有网络的环境预下载 `yolo11n.pt`: + +```bash +mkdir -p data/models_yolo +curl -L -o data/models_yolo/yolo11n.pt https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo11n.pt +``` + +确认文件存在: + +```bash +ls -lh data/models_yolo/yolo11n.pt +``` + +如果这个文件缺失,blueprint 会在部署模块前直接报错并打印同一条预下载命令,避免 Ultralytics 在真机断网时隐式下载失败。 + +CLI 全局参数必须放在 `run` 前面,例如 `--robot-ip`、`--replay`、`--rerun-open` 都是全局参数。 + +```bash +.venv/bin/dimos --replay run bbox-distance-follow +``` + +或连接真实 Go2: + +```bash +.venv/bin/dimos --robot-ip 192.168.123.161 --rerun-open native run bbox-distance-follow +``` + +如需后台运行: + +```bash +.venv/bin/dimos --replay run bbox-distance-follow --daemon +``` + +### 命令行 RPC 选择 bbox + +列出候选: + +```bash +.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.bbox_distance_follow import BBoxSelectionModule; c=RPCClient.remote(BBoxSelectionModule); print(c.list_candidates()); c.stop_rpc_client()' +``` + +选择第 0 个 bbox: + +```bash +.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.bbox_distance_follow import BBoxSelectionModule; c=RPCClient.remote(BBoxSelectionModule); print(c.select_bbox(index=0)); c.stop_rpc_client()' +``` + +按 id 选择 bbox: + +```bash +.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.bbox_distance_follow import BBoxSelectionModule; c=RPCClient.remote(BBoxSelectionModule); print(c.select_bbox(id="0")); c.stop_rpc_client()' +``` + +清除选择: + +```bash +.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.bbox_distance_follow import BBoxSelectionModule; c=RPCClient.remote(BBoxSelectionModule); print(c.clear_selection()); c.stop_rpc_client()' +``` + +启动距离行为: + +```bash +.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.bbox_distance_follow import BBoxDistanceBehaviorModule; c=RPCClient.remote(BBoxDistanceBehaviorModule); print(c.start_bbox_distance_behavior()); c.stop_rpc_client()' +``` + +停止距离行为: + +```bash +.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.bbox_distance_follow import BBoxDistanceBehaviorModule; c=RPCClient.remote(BBoxDistanceBehaviorModule); print(c.stop_bbox_distance_behavior()); c.stop_rpc_client()' +``` + +### Viewer 观测 + +启动 replay + viewer 后,Camera 视图里会显示 `world/color_image`。`Detection2DModule` 发布的全部 YOLO 候选框会显示为黄色 bbox。通过命令行 RPC 调用 `select_bbox(index=...)` 后,`BBoxSelectionModule` 会发布 `/color_image/selected_bbox`,本 blueprint 的专用 visual override 会让 RerunBridge 在 `world/color_image/selected_bbox` 上显示绿色 bbox。 + +当 selected bbox 在后续帧中移动,overlay 会跟随当前帧 detection 更新;当选择被清除或当前帧找不到选中 bbox,模块会发布空 `Detection2DArray`,viewer 中旧框会消失。 + +### 非目标 + +- 不新增 bbox 点击选择 UI。 +- 不新增通用 `dimos rpc` CLI。 +- 不接 Agent、Prompt、MCP、McpServer 或 McpClient。 +- 不新增 `@skill`。 +- 不在 `BBoxSelectionModule` 内实现 YOLO、ReID、EdgeTAM 或目标丢失恢复。 +- 不在 `BBoxDistanceBehaviorModule` 内做人识别或 bbox 选择。 + +后续如果需要点击选择,可扩展现有 Rerun/WebSocket 协议,把像素点、bbox id 或 bbox index 转成同一个 `select_bbox(...)` RPC。后续如果 lidar 和 camera 坐标系不一致,可在点云投影前补 TF 对齐。 diff --git a/dimos/robot/custom/bbox_distance_follow.py b/dimos/robot/custom/bbox_distance_follow.py new file mode 100644 index 0000000000..5799319bef --- /dev/null +++ b/dimos/robot/custom/bbox_distance_follow.py @@ -0,0 +1,577 @@ +from __future__ import annotations # 允许类型注解延迟解析,减少循环导入风险 + +import json # 导入 JSON 工具,用于发布结构化行为状态 +import math # 导入数学工具,用于检查有限数值 +from pathlib import Path # 导入路径类型,用于检查本地 YOLO 权重文件 +import threading # 导入线程工具,用后台循环发布速度命令 +import time # 导入时间工具,用于状态机计时和消息时间戳 +from typing import Any, Literal # 导入通用类型和状态字面量类型 + +from dimos_lcm.std_msgs import String # 导入 LCM 字符串消息,用于状态输出 +import numpy as np # 导入 numpy,用于点云投影和百分位距离计算 +from numpy.typing import NDArray # 导入 numpy 数组类型,便于标注点云数组 +from reactivex.disposable import Disposable # 导入 Disposable,用于注册输入流订阅 + +from dimos.constants import DEFAULT_THREAD_JOIN_TIMEOUT # 导入线程停止等待的默认超时时间 +from dimos.core.coordination.blueprints import autoconnect # 导入蓝图组合函数 +from dimos.core.coordination.module_coordinator import ( # 导入直接运行蓝图所需协调器 + ModuleCoordinator, # 导入直接运行蓝图所需协调器 +) # 结束多行 import +from dimos.core.core import rpc # 导入 rpc 装饰器,让方法可通过 DimOS RPC 调用 +from dimos.core.global_config import global_config # 导入全局配置,用于复用 viewer backend 选择 +from dimos.core.module import Module, ModuleConfig # 导入模块基类和模块配置基类 +from dimos.core.stream import In, Out # 导入输入输出流类型 +from dimos.core.transport import LCMTransport # 导入 LCM transport,用于固定 selected_bbox topic +from dimos.msgs.geometry_msgs.Twist import Twist # 导入速度命令消息类型 +from dimos.msgs.geometry_msgs.Vector3 import Vector3 # 导入三维向量类型,用于构造 Twist +from dimos.msgs.sensor_msgs.CameraInfo import CameraInfo # 导入相机内参消息类型 +from dimos.msgs.sensor_msgs.PointCloud2 import PointCloud2 # 导入 lidar 点云消息类型 +from dimos.msgs.std_msgs.Header import Header # 导入 DimOS Header 便捷构造,用于空检测头 +from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray # 导入 2D 检测数组消息类型 +from dimos.perception.detection.module2D import Detection2DModule # 导入现有多 bbox 检测模块 +from dimos.robot.unitree.go2.blueprints.basic.unitree_go2_basic import ( # 导入 Go2 基础蓝图 + rerun_config as go2_rerun_config, # 导入 Go2 默认 rerun 配置,用于局部扩展 selected bbox overlay + unitree_go2_basic, # 导入 Go2 基础蓝图 +) # 结束多行 import +from dimos.robot.unitree.go2.connection import ( # 导入 Go2 连接类,用于复用静态 camera_info + GO2Connection, # 导入 Go2 连接类,用于复用静态 camera_info +) # 结束多行 import +from dimos.utils.data import get_data_dir # 导入数据目录解析函数,用于定位本地模型文件 +from dimos.utils.logging_config import setup_logger # 导入日志初始化函数 +from dimos.visualization.vis_module import ( # 导入 viewer 模块工厂,用于替换 Go2 默认 rerun 配置 + vis_module, # 导入 viewer 模块工厂,用于替换 Go2 默认 rerun 配置 +) # 结束多行 import + +logger = setup_logger() # 创建当前文件使用的日志对象 + +BehaviorState = Literal["idle", "holding_distance", "approaching", "done"] # 定义行为状态机的合法状态 + +_LINEAR_GAIN = 0.8 # 定义距离误差到线速度的简单比例增益 +_ANGULAR_GAIN = 1.0 # 定义横向像素误差到角速度的简单比例增益 +_DISTANCE_TOLERANCE_M = 0.05 # 定义靠近完成时使用的距离容差 +_DEFAULT_FRAME_ID = "camera_optical" # 定义空 Detection2DArray 使用的默认坐标系 +_YOLO_MODEL_NAME = "yolo11n.pt" # 定义 Detection2DModule 默认需要的 YOLO 模型文件名 +_YOLO_MODEL_PATH = get_data_dir("models_yolo") / _YOLO_MODEL_NAME # 定义本地预下载模型路径 +_YOLO_MODEL_URL = "https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo11n.pt" # 定义官方权重下载地址 + + +def _detection_array_to_rerun( # 定义 Detection2DArray 到 Rerun 2D overlay 的通用转换 + detections: Detection2DArray, # 输入需要显示的 Detection2DArray 消息 + color: tuple[int, int, int, int], # 输入每个 bbox 使用的 RGBA 颜色 + draw_order: float, # 输入 Rerun 绘制层级,数值越大越靠上 +) -> Any: # 返回 Rerun 2D overlay + import rerun as rr # 延迟导入 Rerun,避免非 viewer 路径承担额外导入成本 + + boxes: list[list[float]] = [] # 保存 Rerun 需要的 xywh bbox 列表 + labels: list[str] = [] # 保存每个 bbox 的显示标签 + colors: list[list[int]] = [] # 保存每个 bbox 的颜色 + for index, detection in enumerate(detections.detections): # 遍历 Detection2DArray 消息里的全部 detection + bbox = detection.bbox # 读取 Detection2D 的中心点 bbox + center = bbox.center.position # 读取 bbox 中心点 + x = float(center.x - bbox.size_x / 2.0) # 计算左上角 x + y = float(center.y - bbox.size_y / 2.0) # 计算左上角 y + width = float(bbox.size_x) # 读取 bbox 宽度 + height = float(bbox.size_y) # 读取 bbox 高度 + boxes.append([x, y, width, height]) # 添加 Rerun 使用的 xywh bbox + labels.append(str(detection.id or index)) # 优先显示 detection.id,没有 id 时显示当前序号 + colors.append(list(color)) # 添加当前 overlay 指定的 RGBA 颜色 + + return rr.Boxes2D( # 返回 Rerun 2D 框;空 boxes 会清除 viewer 里的旧框 + array=boxes, # 传入所有 xywh bbox,允许为空列表 + array_format=rr.Box2DFormat.XYWH, # 声明 bbox 数组格式为 xywh + colors=colors, # 传入每个框的颜色,允许为空列表 + labels=labels, # 传入每个框的标签,允许为空列表 + show_labels=True, # 在 viewer 中显示 bbox 标签 + draw_order=draw_order, # 使用调用方指定的绘制层级 + ) # 结束 Rerun Boxes2D 构造 + + +def _detections_to_rerun(detections: Detection2DArray) -> Any: # 把 YOLO 多 bbox detections 转成 Camera 视图 overlay + return _detection_array_to_rerun(detections, (255, 190, 0, 180), 90.0) # 用黄色半透明框显示所有候选 bbox + + +def _selected_bbox_to_rerun(detections: Detection2DArray) -> Any: # 只把 selected bbox topic 转换成 Rerun 2D overlay + return _detection_array_to_rerun(detections, (0, 255, 0, 255), 100.0) # 用绿色不透明框高亮命令行 RPC 选中的 bbox + + +def _bbox_distance_rerun_blueprint() -> Any: # 定义 bbox-distance-follow 专用 Rerun 布局 + import rerun as rr # 延迟导入 Rerun,避免非 viewer 路径承担额外导入成本 + import rerun.blueprint as rrb # 延迟导入 Rerun blueprint API,用于构造 viewer 布局 + + return rrb.Blueprint( # 返回和 Go2 默认布局一致但修正 selected bbox 3D 可见性的 blueprint + rrb.Horizontal( # 使用左右分栏布局 + rrb.Spatial2DView( # Camera 视图显示 color image、YOLO 候选框和 selected bbox overlay + origin="world/color_image", # 以实时相机图像实体作为 2D view 根节点 + contents=["world/color_image/**"], # 显式纳入相机图像实体及其所有 overlay 子实体 + name="Camera", # 保持 Go2 默认 Camera 视图名称 + ), # 结束 Camera 视图配置 + rrb.Spatial3DView( # 3D 视图显示世界、点云和机器人相关实体 + origin="world", # 3D 视图以 world 为根 + contents=[ # 显式排除 2D bbox overlay,避免 3D view 报 Pinhole ancestor 警告 + "world/**", # 3D 视图默认显示 world 下的大部分实体 + "-world/color_image/detections", # 在 3D 视图中隐藏 YOLO 2D bbox overlay + "-world/color_image/selected_bbox", # 在 3D 视图中隐藏 selected 2D bbox overlay + ], # 结束 3D 视图 contents 配置 + name="3D", # 3D 视图名称保持和 Go2 默认一致 + background=rrb.Background(kind="SolidColor", color=[0, 0, 0]), # 使用黑色背景 + line_grid=rrb.LineGrid3D( # 配置地面网格 + plane=rr.components.Plane3D.XY.with_distance(0.5), # 在 XY 平面显示 0.5 米间距网格 + ), # 结束地面网格配置 + overrides={ # 配置 3D 视图中的实体可见性 + "world/lidar": rrb.EntityBehavior(visible=False), # 沿用 Go2 默认设置,隐藏原始 lidar entity + }, # 结束 3D 视图 overrides + ), # 结束 3D 视图 + column_shares=[1, 2], # 保持 Go2 默认的 Camera/3D 宽度比例 + ), # 结束左右分栏布局 + rrb.TimePanel(state="hidden"), # 隐藏时间面板,保持 Go2 默认布局 + rrb.SelectionPanel(state="hidden"), # 隐藏选择面板,保持 Go2 默认布局 + ) # 结束 Rerun blueprint 构造 + + +_bbox_distance_rerun_config = { # 定义只属于 bbox-distance-follow 的 rerun 配置 + **go2_rerun_config, # 继承 Go2 默认 Camera/3D 布局、静态实体和限频设置 + "blueprint": _bbox_distance_rerun_blueprint, # 使用专用布局,避免 3D view 渲染 2D selected bbox + "visual_override": { # 覆盖并扩展 Go2 默认 visual_override + **go2_rerun_config["visual_override"], # 保留 Go2 默认 camera_info、map 和 costmap 转换逻辑 + "world/color_image/detections": _detections_to_rerun, # 对 YOLO 多 bbox topic 做 Camera overlay + "world/color_image/selected_bbox": _selected_bbox_to_rerun, # 只对 selected bbox topic 做 2D overlay + }, # 结束 visual_override 配置 +} # 结束 rerun 配置 + +_bbox_distance_vis = vis_module( # 定义 bbox-distance-follow 专用 viewer 蓝图 + viewer_backend=global_config.viewer, # 复用用户当前选择的 viewer backend + rerun_config=_bbox_distance_rerun_config, # 使用带 selected bbox overlay 的 rerun 配置 +) # 结束 viewer 蓝图创建 + + +def _require_yolo11n_model() -> str | None: # 定义 blueprint 启动前的本地 YOLO 权重检查 + if _YOLO_MODEL_PATH.exists(): # 如果本地权重已经预下载完成 + return None # 返回 None 表示 requirement 通过 + + return _format_missing_yolo_model_error(_YOLO_MODEL_PATH) # 返回明确的预下载指令,避免运行时隐式联网下载 + + +def _format_missing_yolo_model_error(model_path: Path) -> str: # 定义缺失模型时的错误消息构造函数 + return ( # 返回一条能直接复制执行的修复建议 + f"Missing local YOLO model: {model_path}. " # 说明缺失的本地模型路径 + "Real Go2 tests are usually offline, so pre-download it while online: " # 说明真机断网场景需要提前准备 + f"mkdir -p {model_path.parent} && curl -L -o {model_path} {_YOLO_MODEL_URL}" # 给出预下载命令 + ) # 结束错误消息构造 + + +class BBoxSelectionConfig(ModuleConfig): # 定义 bbox 选择模块配置,当前 MVP 暂无额外参数 + pass # 当前选择逻辑全部由 RPC 输入驱动,不需要额外配置项 + + +class BBoxSelectionModule(Module): # 定义 bbox 选择模块,只负责从多 bbox 中转发单个 bbox + config: BBoxSelectionConfig # 声明本模块使用的配置类型 + detections: In[Detection2DArray] # 输入现有检测模块发布的多 bbox Detection2DArray + selected_bbox: Out[Detection2DArray] # 输出只包含当前选中 bbox 的 Detection2DArray + + def __init__(self, **kwargs: Any) -> None: # 定义构造函数,接收框架传入的配置参数 + super().__init__(**kwargs) # 调用父类构造函数,让 DimOS 初始化模块和流 + self._lock = threading.RLock() # 创建递归锁,保护最新 detections 和选择状态 + self._latest_detections: Detection2DArray | None = None # 保存最新一帧多 bbox 检测结果 + self._selected_index: int | None = None # 保存通过 index 选择的目标序号 + self._selected_id: str | None = None # 保存通过 id 选择的目标 id + + @rpc # 标记 start() 是框架生命周期 RPC + def start(self) -> None: # 定义模块启动逻辑 + super().start() # 启动父类逻辑,包括 RPC 和自动绑定 + self.register_disposable(Disposable(self.detections.subscribe(self._on_detections))) # 订阅检测流 + + @rpc # 标记 list_candidates() 可通过 DimOS RPC 调用 + def list_candidates(self) -> list[dict[str, Any]]: # 返回最新一帧候选 bbox 列表 + with self._lock: # 加锁读取最新 detections,避免和订阅回调并发冲突 + detections = self._latest_detections # 复制引用,缩短锁内逻辑 + + if detections is None: # 如果还没有收到任何检测帧 + return [] # 返回空候选列表 + + return [self._candidate_to_dict(index, detection) for index, detection in enumerate(detections.detections)] # 转换每个检测为 RPC 友好的字典 + + @rpc # 标记 select_bbox() 可通过 DimOS RPC 调用 + def select_bbox(self, index: int | None = None, id: str | None = None) -> str: # 保存用户选择的 bbox 条件 + if index is None and id is None: # 如果调用方没有提供 index 或 id + return "select_bbox requires index or id" # 返回可读错误,不改变当前选择 + + if index is not None and id is not None: # 如果调用方同时提供两种选择条件 + return "select_bbox accepts only one of index or id" # 返回可读错误,避免选择语义不明确 + + with self._lock: # 加锁更新选择状态 + self._selected_index = index # 保存 index 选择,未使用时为 None + self._selected_id = str(id) if id is not None else None # 保存 id 选择,统一转为字符串 + latest = self._latest_detections # 取出最新 detections,用于立即刷新 viewer + + if latest is not None: # 如果已经收到过检测帧 + self._publish_selected(latest) # 立即按当前选择发布 selected_bbox,方便 viewer 立刻反馈 + + if index is not None: # 如果用户按 index 选择 + return f"selected bbox index={index}" # 返回确认信息 + + return f"selected bbox id={id}" # 返回按 id 选择的确认信息 + + @rpc # 标记 clear_selection() 可通过 DimOS RPC 调用 + def clear_selection(self) -> str: # 清除当前 bbox 选择 + with self._lock: # 加锁更新选择状态 + self._selected_index = None # 清空 index 选择 + self._selected_id = None # 清空 id 选择 + latest = self._latest_detections # 取出最新 detections,用于保持 header + + self.selected_bbox.publish(self._empty_detection_array(latest)) # 发布空数组,清除 viewer 中的旧选框 + return "cleared bbox selection" # 返回确认信息 + + def _on_detections(self, detections: Detection2DArray) -> None: # 处理检测模块发布的新一帧多 bbox + with self._lock: # 加锁更新最新检测结果 + self._latest_detections = detections # 保存最新一帧 detections + + self._publish_selected(detections) # 每帧根据当前选择转发单个 bbox 或空 bbox + + def _publish_selected(self, detections: Detection2DArray) -> None: # 根据当前选择发布 selected_bbox + selected = self._find_selected_detection(detections) # 在当前帧里查找被选中的检测 + if selected is None: # 如果当前帧没有选中目标或选择还不存在 + self.selected_bbox.publish(self._empty_detection_array(detections)) # 发布空数组,避免下游复用旧 bbox + return # 结束本帧处理 + + msg = Detection2DArray( # 构造只包含一个 detection 的消息 + detections_length=1, # 设置检测数量为 1 + header=detections.header, # 复用当前帧 header,保持时间和坐标系一致 + detections=[selected], # 只放入当前帧匹配到的 selected detection + ) # 结束 Detection2DArray 构造 + self.selected_bbox.publish(msg) # 发布 selected_bbox 给行为模块和 viewer + + def _find_selected_detection(self, detections: Detection2DArray) -> Any | None: # 在当前帧中查找选中的 detection + with self._lock: # 加锁读取选择条件 + selected_index = self._selected_index # 复制 index 选择 + selected_id = self._selected_id # 复制 id 选择 + + if selected_id is not None: # 如果当前使用 id 选择 + for index, detection in enumerate(detections.detections): # 遍历当前帧所有 detection + if self._detection_id(detection, index) == selected_id: # 比较真实 id 或 index fallback + return detection # 找到匹配 id 的 detection + return None # 当前帧没有匹配 id 时返回空 + + if selected_index is not None: # 如果当前使用 index 选择 + if 0 <= selected_index < len(detections.detections): # 如果 index 在当前帧范围内 + return detections.detections[selected_index] # 返回当前帧对应序号的 detection + return None # index 越界时返回空 + + return None # 没有选择时返回空 + + @staticmethod # 声明这是不依赖实例状态的工具函数 + def _empty_detection_array(source: Detection2DArray | None) -> Detection2DArray: # 构造空 Detection2DArray + header = source.header if source is not None else Header(time.time(), _DEFAULT_FRAME_ID) # 优先复用来源 header + return Detection2DArray(detections_length=0, header=header, detections=[]) # 返回空检测数组 + + @classmethod # 声明候选转换需要复用类级工具函数 + def _candidate_to_dict(cls, index: int, detection: Any) -> dict[str, Any]: # 把 detection 转成 RPC 字典 + x1, y1, x2, y2 = cls._bbox_corners(detection) # 计算 bbox 的左上和右下坐标 + confidence, class_id = cls._best_result(detection) # 读取第一条 hypothesis 的置信度和类别 + return { # 返回用户可读且 JSON 友好的候选结构 + "index": index, # 返回当前帧中的候选序号 + "id": cls._detection_id(detection, index), # 返回 detection.id,没有时回退为 index 字符串 + "bbox": [x1, y1, x2, y2], # 返回 xyxy 格式 bbox + "confidence": confidence, # 返回置信度,缺失时为 0.0 + "class_id": class_id, # 返回类别 id,缺失时为 None + } # 结束候选字典 + + @staticmethod # 声明这是不依赖实例状态的工具函数 + def _detection_id(detection: Any, index: int) -> str: # 读取 detection id,并在缺失时回退到 index + detection_id = getattr(detection, "id", "") # 读取 detection.id,缺失时使用空字符串 + return str(detection_id) if detection_id else str(index) # 返回真实 id 或 index 字符串 + + @staticmethod # 声明这是不依赖实例状态的工具函数 + def _bbox_corners(detection: Any) -> tuple[float, float, float, float]: # 把中心点 bbox 转成 xyxy + bbox = detection.bbox # 读取 Detection2D 的 bbox 字段 + center = bbox.center.position # 读取 bbox 中心点位置 + half_width = float(bbox.size_x) / 2.0 # 计算 bbox 半宽 + half_height = float(bbox.size_y) / 2.0 # 计算 bbox 半高 + x1 = float(center.x) - half_width # 计算左上角 x + y1 = float(center.y) - half_height # 计算左上角 y + x2 = float(center.x) + half_width # 计算右下角 x + y2 = float(center.y) + half_height # 计算右下角 y + return x1, y1, x2, y2 # 返回 xyxy 四元组 + + @staticmethod # 声明这是不依赖实例状态的工具函数 + def _best_result(detection: Any) -> tuple[float, str | None]: # 读取 detection 的首个分类结果 + results = getattr(detection, "results", []) # 读取 detection.results,缺失时使用空列表 + if not results: # 如果没有任何 hypothesis + return 0.0, None # 返回默认置信度和空类别 + + hypothesis = results[0].hypothesis # 读取第一条 ObjectHypothesis + confidence = float(getattr(hypothesis, "score", 0.0)) # 读取置信度,缺失时为 0.0 + class_id = getattr(hypothesis, "class_id", None) # 读取类别 id,缺失时为 None + return confidence, class_id # 返回置信度和类别 id + + +class BBoxDistanceBehaviorConfig(ModuleConfig): # 定义 bbox 距离行为模块配置 + command_hz: float = 20.0 # 速度命令发布频率,单位 Hz + hold_seconds: float = 3.0 # 保持 hold_distance 的默认时间,单位秒 + hold_distance: float = 1.5 # 保持阶段目标距离,单位米 + approach_distance: float = 0.8 # 靠近阶段目标距离,单位米 + depth_percentile: float = 25.0 # bbox 内点云深度百分位,降低远处离群点影响 + max_linear_speed: float = 0.45 # 最大线速度,单位 m/s + max_angular_speed: float = 0.8 # 最大角速度,单位 rad/s + + +class BBoxDistanceBehaviorModule(Module): # 定义距离行为模块,只消费 selected bbox、lidar 和 camera_info + config: BBoxDistanceBehaviorConfig # 声明本模块使用的配置类型 + selected_bbox: In[Detection2DArray] # 输入选择模块发布的单 bbox Detection2DArray + lidar: In[PointCloud2] # 输入 Go2 lidar 点云 + camera_info: In[CameraInfo] # 输入 Go2 相机内参 + cmd_vel: Out[Twist] # 输出 Go2 速度命令 + behavior_status: Out[String] # 输出行为状态,便于日志和调试 + + def __init__(self, **kwargs: Any) -> None: # 定义构造函数,接收框架传入的配置参数 + super().__init__(**kwargs) # 调用父类构造函数,让 DimOS 初始化模块和流 + self._lock = threading.RLock() # 创建递归锁,保护传感器缓存和状态机 + self._stop_event = threading.Event() # 创建后台命令循环停止事件 + self._thread: threading.Thread | None = None # 保存后台命令循环线程 + self._state: BehaviorState = "idle" # 初始化行为状态为 idle + self._latest_selected_bbox: Detection2DArray | None = None # 保存最新 selected bbox + self._latest_lidar: PointCloud2 | None = None # 保存最新 lidar 点云 + self._latest_camera_info: CameraInfo | None = None # 保存最新 camera_info + self._active_hold_seconds = self.config.hold_seconds # 保存本次行为使用的保持时间 + self._active_hold_distance = self.config.hold_distance # 保存本次行为使用的保持距离 + self._active_approach_distance = self.config.approach_distance # 保存本次行为使用的靠近距离 + self._hold_started_at: float | None = None # 保存第一次获得有效距离后的保持阶段起始时间 + + @rpc # 标记 start() 是框架生命周期 RPC + def start(self) -> None: # 定义模块启动逻辑 + super().start() # 启动父类逻辑,包括 RPC 和自动绑定 + self.register_disposable(Disposable(self.selected_bbox.subscribe(self._on_selected_bbox))) # 订阅 selected bbox + self.register_disposable(Disposable(self.lidar.subscribe(self._on_lidar))) # 订阅 lidar 点云 + self.register_disposable(Disposable(self.camera_info.subscribe(self._on_camera_info))) # 订阅 camera_info + self._stop_event.clear() # 清除停止事件,允许后台线程运行 + self._thread = threading.Thread( # 创建后台命令发布线程 + target=self._command_loop, # 指定线程执行固定频率控制循环 + name="BBoxDistanceBehaviorModule", # 给线程命名,方便日志和调试 + daemon=True, # 设置守护线程,进程退出时不会被它卡住 + ) # 结束线程参数 + self._thread.start() # 启动后台命令发布线程 + self._publish_status("idle") # 发布初始状态 + + @rpc # 标记 stop() 是框架生命周期 RPC + def stop(self) -> None: # 定义模块停止逻辑 + self._stop_event.set() # 通知后台线程退出 + self.cmd_vel.publish(Twist.zero()) # 停止时立即发布零速度 + if self._thread is not None and self._thread.is_alive(): # 如果后台线程存在且仍在运行 + self._thread.join(DEFAULT_THREAD_JOIN_TIMEOUT) # 等待后台线程退出,但最多等默认超时 + super().stop() # 调用父类停止逻辑,释放订阅和 transport + + @rpc # 标记 start_bbox_distance_behavior() 可通过 DimOS RPC 调用 + def start_bbox_distance_behavior( # 定义行为启动 RPC + self, # 传入模块实例 + hold_seconds: float | None = None, # 可选覆盖保持时间 + hold_distance: float | None = None, # 可选覆盖保持阶段目标距离 + approach_distance: float | None = None, # 可选覆盖靠近阶段目标距离 + ) -> str: # 返回可读启动结果 + with self._lock: # 加锁重置状态机参数 + self._active_hold_seconds = self.config.hold_seconds if hold_seconds is None else float(hold_seconds) # 设置本次保持时间 + self._active_hold_distance = self.config.hold_distance if hold_distance is None else float(hold_distance) # 设置本次保持距离 + self._active_approach_distance = self.config.approach_distance if approach_distance is None else float(approach_distance) # 设置本次靠近距离 + self._hold_started_at = None # 清空保持阶段起点,等待首次有效 bbox+lidar + self._state = "holding_distance" # 进入保持距离阶段 + + self._publish_status("holding_distance") # 发布状态变化 + return "bbox distance behavior started" # 返回启动确认 + + @rpc # 标记 stop_bbox_distance_behavior() 可通过 DimOS RPC 调用 + def stop_bbox_distance_behavior(self) -> str: # 定义行为停止 RPC + with self._lock: # 加锁更新状态机 + self._state = "idle" # 回到 idle 状态 + self._hold_started_at = None # 清空保持阶段计时 + + self.cmd_vel.publish(Twist.zero()) # 行为停止时发布零速度 + self._publish_status("idle") # 发布 idle 状态 + return "bbox distance behavior stopped" # 返回停止确认 + + def _on_selected_bbox(self, selected_bbox: Detection2DArray) -> None: # 处理新的 selected bbox + with self._lock: # 加锁更新缓存 + self._latest_selected_bbox = selected_bbox # 保存最新 selected bbox + + def _on_lidar(self, lidar: PointCloud2) -> None: # 处理新的 lidar 点云 + with self._lock: # 加锁更新缓存 + self._latest_lidar = lidar # 保存最新 lidar 点云 + + def _on_camera_info(self, camera_info: CameraInfo) -> None: # 处理新的 camera_info + with self._lock: # 加锁更新缓存 + self._latest_camera_info = camera_info # 保存最新 camera_info + + def _command_loop(self) -> None: # 固定频率控制循环 + period_sec = 1.0 / max(self.config.command_hz, 1.0) # 根据配置计算循环周期,并防止除零 + while not self._stop_event.wait(period_sec): # 按周期运行,收到停止事件后退出 + twist = self._compute_next_twist() # 根据当前状态和传感器缓存计算下一条速度命令 + if twist is not None: # idle 状态会返回 None,表示无需重复发布 + self.cmd_vel.publish(twist) # 发布速度命令 + + self.cmd_vel.publish(Twist.zero()) # 线程退出前再发布一次零速度 + + def _compute_next_twist(self) -> Twist | None: # 计算当前周期应该发布的速度 + with self._lock: # 加锁读取状态和传感器缓存 + state = self._state # 复制当前状态 + selected_bbox = self._latest_selected_bbox # 复制 latest selected bbox + lidar = self._latest_lidar # 复制 latest lidar + camera_info = self._latest_camera_info # 复制 latest camera_info + hold_distance = self._active_hold_distance # 复制本次保持距离 + approach_distance = self._active_approach_distance # 复制本次靠近距离 + hold_seconds = self._active_hold_seconds # 复制本次保持时间 + hold_started_at = self._hold_started_at # 复制保持阶段起点 + + if state == "idle": # 如果行为未启动 + return None # 不重复发布速度命令 + + if state == "done": # 如果行为已经完成 + return Twist.zero() # 持续发布零速度,确保完成后保持停止 + + detection = self._extract_single_detection(selected_bbox) # 从 selected_bbox 中取出单个 detection + if detection is None or lidar is None or camera_info is None: # 如果 bbox、lidar 或 camera_info 任一缺失 + return Twist.zero() # 发布零速度并等待数据补齐 + + distance = self._estimate_bbox_distance(detection, lidar, camera_info) # 估计 bbox 内点云距离 + if distance is None: # 如果当前点云无法在 bbox 内给出有效距离 + return Twist.zero() # 发布零速度并等待下一帧 + + bbox_center_x = float(detection.bbox.center.position.x) # 读取 bbox 中心 x 像素坐标 + target_distance = hold_distance if state == "holding_distance" else approach_distance # 根据状态选择目标距离 + twist = self._make_twist(distance, target_distance, bbox_center_x, camera_info) # 生成线速度和角速度命令 + + if state == "holding_distance": # 如果当前处于保持距离阶段 + now = time.monotonic() # 读取单调时钟,用于保持时间计时 + if hold_started_at is None: # 如果还没有开始保持阶段计时 + with self._lock: # 加锁写入保持阶段起点 + self._hold_started_at = now # 从第一次有效 bbox+lidar 距离开始计时 + self._publish_status("holding_distance", distance=distance) # 发布首次有效距离状态 + elif now - hold_started_at >= hold_seconds: # 如果保持时间已经满足 + with self._lock: # 加锁切换状态 + self._state = "approaching" # 进入靠近阶段 + self._publish_status("approaching", distance=distance) # 发布状态变化 + + if state == "approaching" and distance <= approach_distance + _DISTANCE_TOLERANCE_M: # 如果已经到达靠近目标距离 + with self._lock: # 加锁切换完成状态 + self._state = "done" # 标记行为完成 + self._publish_status("done", distance=distance) # 发布完成状态 + return Twist.zero() # 完成时发布零速度 + + return twist # 返回当前控制周期的速度命令 + + def _make_twist( # 定义根据距离和 bbox 横向位置生成 Twist 的函数 + self, # 传入模块实例 + distance: float, # 当前估计距离 + target_distance: float, # 当前阶段目标距离 + bbox_center_x: float, # bbox 中心 x 像素坐标 + camera_info: CameraInfo, # 相机内参 + ) -> Twist: # 返回速度命令 + distance_error = distance - target_distance # 计算目标距离误差,正数表示目标太远 + linear_x = self._clamp(distance_error * _LINEAR_GAIN, -self.config.max_linear_speed, self.config.max_linear_speed) # 计算并限幅线速度 + fx = self._intrinsic_value(camera_info, 0, 0) # 读取相机 fx + cx = self._intrinsic_value(camera_info, 0, 2) # 读取相机 cx + angular_z = 0.0 if fx <= 0.0 else -((bbox_center_x - cx) / fx) * _ANGULAR_GAIN # 根据 bbox 横向误差计算转向速度 + angular_z = self._clamp(angular_z, -self.config.max_angular_speed, self.config.max_angular_speed) # 对角速度限幅 + return Twist( # 构造 Twist 命令 + linear=Vector3(linear_x, 0.0, 0.0), # 设置 x 方向线速度 + angular=Vector3(0.0, 0.0, angular_z), # 设置 yaw 角速度 + ) # 结束 Twist 构造 + + def _estimate_bbox_distance( # 定义 bbox 内点云距离估计函数 + self, # 传入模块实例 + detection: Any, # 当前选中的 Detection2D + lidar: PointCloud2, # 最新 lidar 点云 + camera_info: CameraInfo, # 最新 camera_info + ) -> float | None: # 返回米级距离,失败时返回 None + x1, y1, x2, y2 = BBoxSelectionModule._bbox_corners(detection) # 读取 bbox 的 xyxy 像素范围 + points = lidar.points_f32() # 获取 float32 点云坐标,MVP 假设已经在相机坐标系或近似对齐 + if points.size == 0: # 如果点云为空 + return None # 返回无有效距离 + + projected = self._project_points(points, camera_info) # 把点云直接投影到相机像素平面 + if projected is None: # 如果 camera_info 无效导致无法投影 + return None # 返回无有效距离 + + u, v, z = projected # 解包投影后的像素坐标和 z 深度 + inside = (u >= x1) & (u <= x2) & (v >= y1) & (v <= y2) # 计算落在 bbox 内的点 + depths = z[inside] # 取出 bbox 内点的 z 深度 + if depths.size == 0: # 如果 bbox 内没有有效点 + return None # 返回无有效距离 + + distance = float(np.percentile(depths, self.config.depth_percentile)) # 用配置的百分位作为目标距离 + return distance if math.isfinite(distance) and distance > 0.0 else None # 只接受有限且正的距离 + + def _project_points( # 定义点云投影函数 + self, # 传入模块实例 + points: NDArray[np.float32], # 输入 Nx3 点云 + camera_info: CameraInfo, # 输入相机内参 + ) -> tuple[NDArray[np.float32], NDArray[np.float32], NDArray[np.float32]] | None: # 返回 u/v/z 或 None + fx = self._intrinsic_value(camera_info, 0, 0) # 读取相机 fx + fy = self._intrinsic_value(camera_info, 1, 1) # 读取相机 fy + cx = self._intrinsic_value(camera_info, 0, 2) # 读取相机 cx + cy = self._intrinsic_value(camera_info, 1, 2) # 读取相机 cy + if fx <= 0.0 or fy <= 0.0: # 如果内参无效 + return None # 无法投影 + + x = points[:, 0] # 读取点云 x 坐标 + y = points[:, 1] # 读取点云 y 坐标 + z = points[:, 2] # 读取点云 z 坐标,MVP 直接当作相机前向距离 + valid = np.isfinite(x) & np.isfinite(y) & np.isfinite(z) & (z > 0.0) # 过滤无效点和相机后方点 + if not np.any(valid): # 如果没有任何有效点 + return None # 无法投影 + + x_valid = x[valid] # 取出有效 x + y_valid = y[valid] # 取出有效 y + z_valid = z[valid] # 取出有效 z + u = (fx * x_valid / z_valid + cx).astype(np.float32) # 计算像素 u + v = (fy * y_valid / z_valid + cy).astype(np.float32) # 计算像素 v + return u, v, z_valid.astype(np.float32) # 返回投影坐标和对应深度 + + @staticmethod # 声明这是不依赖实例状态的工具函数 + def _intrinsic_value(camera_info: CameraInfo, row: int, col: int) -> float: # 读取 K 矩阵中的一个值 + return float(camera_info.K[row * 3 + col]) if len(camera_info.K) >= 9 else 0.0 # K 缺失时返回 0.0 + + @staticmethod # 声明这是不依赖实例状态的工具函数 + def _extract_single_detection(selected_bbox: Detection2DArray | None) -> Any | None: # 从 selected_bbox 中取单个 detection + if selected_bbox is None or selected_bbox.detections_length == 0 or not selected_bbox.detections: # 如果没有选中 bbox + return None # 返回空 + return selected_bbox.detections[0] # 返回第一个 detection,选择模块保证最多一个 + + @staticmethod # 声明这是不依赖实例状态的工具函数 + def _clamp(value: float, lower: float, upper: float) -> float: # 把数值限制在上下界之间 + return max(lower, min(upper, value)) # 返回限幅后的数值 + + def _publish_status(self, state: BehaviorState, **fields: float) -> None: # 发布行为状态消息 + payload: dict[str, Any] = {"state": state, **fields} # 构造 JSON 状态载荷 + self.behavior_status.publish(String(json.dumps(payload))) # 发布 JSON 字符串状态 + + +bbox_distance_follow = autoconnect( # 定义 CLI 可运行的 bbox-distance-follow 蓝图 + unitree_go2_basic, # 第一部分:Go2 基础连接和 viewer + _bbox_distance_vis, # 第二部分:替换 Go2 默认 viewer 配置,增加 bbox overlay + Detection2DModule.blueprint( # 第三部分:现有多 bbox 检测模块 + camera_info=GO2Connection.camera_info_static, # 复用 Go2 静态相机内参 + publish_detection_images=False, # 关闭 cropped detected_image 输出,避免 3D view 无 Pinhole 警告 + ), # 结束 Detection2DModule 配置 + BBoxSelectionModule.blueprint(), # 第四部分:从多 bbox 中选择单个 bbox + BBoxDistanceBehaviorModule.blueprint(), # 第五部分:根据 selected bbox、lidar 和 camera_info 控制距离 +).global_config( # 设置该 blueprint 的全局配置 + n_workers=6, # 给 Go2、viewer、detector、selection 和 behavior 留足 worker + robot_model="unitree_go2", # 标记机器人模型为 Go2 +).transports( # 覆盖 selected_bbox 的 transport,让 viewer 使用稳定 topic + { # 定义 transport 覆盖表 + ("detections", Detection2DArray): LCMTransport("/color_image/detections", Detection2DArray), # 固定 YOLO bbox topic 到相机实体下面 + ("selected_bbox", Detection2DArray): LCMTransport("/color_image/selected_bbox", Detection2DArray), # 固定 selected bbox topic + } # 结束 transport 覆盖表 +).requirements( # 添加 blueprint 启动前检查,避免真机断网时才由 Ultralytics 隐式下载失败 + _require_yolo11n_model, # 检查 Detection2DModule 默认 YOLO 权重是否已经预下载 +) # 结束蓝图定义 + + +__all__ = [ # 声明这个文件希望对外暴露的名字 + "BBoxDistanceBehaviorConfig", # 暴露行为模块配置 + "BBoxDistanceBehaviorModule", # 暴露行为模块 + "BBoxSelectionConfig", # 暴露选择模块配置 + "BBoxSelectionModule", # 暴露选择模块 + "bbox_distance_follow", # 暴露顶层 blueprint 变量 +] # 结束 __all__ 列表 + + +if __name__ == "__main__": # 支持直接 python 执行该 blueprint 文件 + ModuleCoordinator.build(bbox_distance_follow).loop() # 构建并运行 bbox-distance-follow 蓝图 From d5457a68f10993ef3a90fd7da37a010c6df557e0 Mon Sep 17 00:00:00 2001 From: Harold <20009626+HaroldGin931@users.noreply.github.com> Date: Wed, 27 May 2026 22:41:49 +0800 Subject: [PATCH 04/17] Add offline YOLOE tracking test --- dimos/robot/all_blueprints.py | 2 + dimos/robot/custom/README.md | 40 +++++ dimos/robot/custom/yoloe_tracking.py | 237 +++++++++++++++++++++++++++ 3 files changed, 279 insertions(+) create mode 100644 dimos/robot/custom/yoloe_tracking.py diff --git a/dimos/robot/all_blueprints.py b/dimos/robot/all_blueprints.py index a1304974c7..9ca7835d13 100644 --- a/dimos/robot/all_blueprints.py +++ b/dimos/robot/all_blueprints.py @@ -121,6 +121,7 @@ "xarm6-planner-only": "dimos.manipulation.blueprints:xarm6_planner_only", "xarm7-planner-coordinator": "dimos.manipulation.blueprints:xarm7_planner_coordinator", "xarm7-planner-coordinator-agent": "dimos.manipulation.blueprints:xarm7_planner_coordinator_agent", + "yoloe-tracking-test": "dimos.robot.custom.yoloe_tracking:yoloe_tracking_test", } @@ -224,5 +225,6 @@ "wavefront-frontier-explorer": "dimos.navigation.frontier_exploration.wavefront_frontier_goal_selector.WavefrontFrontierExplorer", "web-input": "dimos.agents.web_human_input.WebInput", "websocket-vis-module": "dimos.web.websocket_vis.websocket_vis_module.WebsocketVisModule", + "yoloe-tracking-module": "dimos.robot.custom.yoloe_tracking.YoloeTrackingModule", "zed-camera": "dimos.hardware.sensors.camera.zed.camera.ZEDCamera", } diff --git a/dimos/robot/custom/README.md b/dimos/robot/custom/README.md index b9d9bc89aa..ba55098f96 100644 --- a/dimos/robot/custom/README.md +++ b/dimos/robot/custom/README.md @@ -1,5 +1,45 @@ # Custom Robot Blueprints +## yoloe-tracking-test + +`yoloe-tracking-test` 是一个只用于验证 YOLOE tracking 效果的 Go2 replay blueprint。它不接距离控制、不接 Agent/MCP/skill,只把 Go2 `color_image` 输入到 `YoloeTrackingModule`,并把 YOLOE 的 `Detection2DArray` 发布到 `/color_image/yoloe_detections`。 + +### 组成 + +- `unitree_go2_basic` +- `YoloeTrackingModule.blueprint()` +- 专用 Rerun viewer overlay + +数据流: + +```text +unitree_go2_basic.color_image + -> YoloeTrackingModule.color_image + -> YoloeTrackingModule.detections + -> /color_image/yoloe_detections + -> Rerun Camera overlay +``` + +### 离线模型准备 + +运行 `yoloe-tracking-test` 时不会拉取或解压 YOLOE 模型。需要先在有网络的环境准备模型: + +```bash +git lfs pull --include data/.lfs/models_yoloe.tar.gz +uv run python -c 'from dimos.utils.data import get_data; print(get_data("models_yoloe"))' +ls -lh data/models_yoloe/yoloe-11s-seg-pf.pt +``` + +如果 `data/models_yoloe/yoloe-11s-seg-pf.pt` 不存在,blueprint 会在部署前失败并打印同一组预处理命令。真机或离线 replay 环境只运行 blueprint,不做模型下载。 + +### 启动 + +```bash +.venv/bin/dimos --replay run yoloe-tracking-test +``` + +Rerun Camera 视图会显示 `world/color_image/yoloe_detections`。bbox 标签使用 detection id;当 YOLOE 返回 tracking id 时,可以直接观察同一个目标跨帧 id 是否稳定。 + ## bbox-distance-follow `bbox-distance-follow` 是一个最小可启动的 Go2 blueprint,用于验证 “检测多个 bbox -> 用户选择一个 bbox -> 根据 selected bbox + lidar + camera_info 控制 Go2 距离” 这条链路。 diff --git a/dimos/robot/custom/yoloe_tracking.py b/dimos/robot/custom/yoloe_tracking.py new file mode 100644 index 0000000000..b3856e0cef --- /dev/null +++ b/dimos/robot/custom/yoloe_tracking.py @@ -0,0 +1,237 @@ +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from pathlib import Path +from typing import Any + +from dimos.core.coordination.blueprints import autoconnect +from dimos.core.coordination.module_coordinator import ModuleCoordinator +from dimos.core.core import rpc +from dimos.core.global_config import global_config +from dimos.core.module import Module, ModuleConfig +from dimos.core.stream import In, Out +from dimos.core.transport import LCMTransport +from dimos.msgs.sensor_msgs.Image import Image, sharpness_barrier +from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray +from dimos.perception.detection.detectors.yoloe import Yoloe2DDetector, YoloePromptMode +from dimos.robot.unitree.go2.blueprints.basic.unitree_go2_basic import ( + rerun_config as go2_rerun_config, + unitree_go2_basic, +) +from dimos.utils.data import get_data_dir +from dimos.utils.logging_config import setup_logger +from dimos.utils.reactive import backpressure +from dimos.visualization.vis_module import vis_module + +logger = setup_logger() + +_YOLOE_MODEL_DIR_NAME = "models_yoloe" +_YOLOE_LRPC_MODEL_NAME = "yoloe-11s-seg-pf.pt" +_YOLOE_DETECTIONS_TOPIC = "/color_image/yoloe_detections" +_YOLOE_DETECTIONS_ENTITY = "world/color_image/yoloe_detections" + + +def _local_yoloe_model_path( + model_path: str = _YOLOE_MODEL_DIR_NAME, + model_name: str | None = None, +) -> Path: + return get_data_dir(model_path) / (model_name or _YOLOE_LRPC_MODEL_NAME) + + +def _format_missing_yoloe_model_error(model_path: Path) -> str: + return ( + f"Missing local YOLOE model: {model_path}. " + "This blueprint runs offline and will not pull model data at startup. " + "Prepare the model in an online environment first: " + "git lfs pull --include data/.lfs/models_yoloe.tar.gz && " + "uv run python -c 'from dimos.utils.data import get_data; print(get_data(\"models_yoloe\"))' && " + f"ls -lh {model_path}" + ) + + +def _require_yoloe_lrpc_model() -> str | None: + model_path = _local_yoloe_model_path() + if model_path.exists(): + return None + return _format_missing_yoloe_model_error(model_path) + + +class YoloeTrackingConfig(ModuleConfig): + max_freq: float = 10.0 + model_path: str = _YOLOE_MODEL_DIR_NAME + model_name: str | None = None + device: str | None = None + max_area_ratio: float | None = 0.3 + + +class YoloeTrackingModule(Module): + """Run offline YOLOE tracking on color_image and publish Detection2DArray.""" + + config: YoloeTrackingConfig + + color_image: In[Image] + detections: Out[Detection2DArray] + + def __init__(self, **kwargs: Any) -> None: + super().__init__(**kwargs) + self._detector: Yoloe2DDetector | None = None + + @rpc + def start(self) -> None: + super().start() + + model_path = _local_yoloe_model_path(self.config.model_path, self.config.model_name) + if not model_path.exists(): + raise RuntimeError(_format_missing_yoloe_model_error(model_path)) + + self._detector = Yoloe2DDetector( + model_path=self.config.model_path, + model_name=self.config.model_name or _YOLOE_LRPC_MODEL_NAME, + device=self.config.device, + prompt_mode=YoloePromptMode.LRPC, + max_area_ratio=self.config.max_area_ratio, + ) + + stream = backpressure( + self.color_image.pure_observable().pipe(sharpness_barrier(self.config.max_freq)) + ) + self.register_disposable(stream.subscribe(self._process_image)) + + @rpc + def stop(self) -> None: + if self._detector is not None: + self._detector.stop() + self._detector = None + super().stop() + + def _process_image(self, image: Image) -> None: + if self._detector is None: + return + detections = self._detector.process_image(image) + self.detections.publish(detections.to_ros_detection2d_array()) + + +def _yoloe_detections_to_rerun(detections: Detection2DArray) -> Any: + import rerun as rr + + boxes: list[list[float]] = [] + labels: list[str] = [] + colors: list[list[int]] = [] + + for index, detection in enumerate(detections.detections): + bbox = detection.bbox + center = bbox.center.position + x = float(center.x - bbox.size_x / 2.0) + y = float(center.y - bbox.size_y / 2.0) + width = float(bbox.size_x) + height = float(bbox.size_y) + detection_id = str(detection.id) if detection.id else str(index) + + boxes.append([x, y, width, height]) + labels.append(detection_id) + colors.append([0, 220, 255, 220]) + + return rr.Boxes2D( + array=boxes, + array_format=rr.Box2DFormat.XYWH, + colors=colors, + labels=labels, + show_labels=True, + draw_order=95.0, + ) + + +def _yoloe_tracking_rerun_blueprint() -> Any: + import rerun as rr + import rerun.blueprint as rrb + + return rrb.Blueprint( + rrb.Horizontal( + rrb.Spatial2DView( + origin="world/color_image", + contents=["world/color_image/**"], + name="Camera", + ), + rrb.Spatial3DView( + origin="world", + contents=[ + "world/**", + f"-{_YOLOE_DETECTIONS_ENTITY}", + ], + name="3D", + background=rrb.Background(kind="SolidColor", color=[0, 0, 0]), + line_grid=rrb.LineGrid3D( + plane=rr.components.Plane3D.XY.with_distance(0.5), + ), + overrides={ + "world/lidar": rrb.EntityBehavior(visible=False), + }, + ), + column_shares=[1, 2], + ), + rrb.TimePanel(state="hidden"), + rrb.SelectionPanel(state="hidden"), + ) + + +_yoloe_tracking_rerun_config = { + **go2_rerun_config, + "blueprint": _yoloe_tracking_rerun_blueprint, + "visual_override": { + **go2_rerun_config["visual_override"], + _YOLOE_DETECTIONS_ENTITY: _yoloe_detections_to_rerun, + }, +} + +_yoloe_tracking_vis = vis_module( + viewer_backend=global_config.viewer, + rerun_config=_yoloe_tracking_rerun_config, +) + + +yoloe_tracking_test = ( + autoconnect( + unitree_go2_basic, + _yoloe_tracking_vis, + YoloeTrackingModule.blueprint(), + ) + .global_config( + n_workers=6, + robot_model="unitree_go2", + ) + .transports( + { + ("detections", Detection2DArray): LCMTransport( + _YOLOE_DETECTIONS_TOPIC, + Detection2DArray, + ), + } + ) + .requirements( + _require_yoloe_lrpc_model, + ) +) + + +__all__ = [ + "YoloeTrackingConfig", + "YoloeTrackingModule", + "yoloe_tracking_test", +] + + +if __name__ == "__main__": + ModuleCoordinator.build(yoloe_tracking_test).loop() From d74f2ffd960cd1b87bd2ed33f4b752c992a8fd6a Mon Sep 17 00:00:00 2001 From: Harold <20009626+HaroldGin931@users.noreply.github.com> Date: Thu, 28 May 2026 00:21:15 +0800 Subject: [PATCH 05/17] bbox_selection --- dimos/robot/all_blueprints.py | 2 +- dimos/robot/custom/README.md | 14 +- dimos/robot/custom/bbox_distance_follow.py | 151 +----------- dimos/robot/custom/bbox_selection.py | 223 ++++++++++++++++++ .../robot/custom/test_bbox_distance_follow.py | 180 ++++++++++++++ 5 files changed, 419 insertions(+), 151 deletions(-) create mode 100644 dimos/robot/custom/bbox_selection.py create mode 100644 dimos/robot/custom/test_bbox_distance_follow.py diff --git a/dimos/robot/all_blueprints.py b/dimos/robot/all_blueprints.py index 9ca7835d13..b681b6ade6 100644 --- a/dimos/robot/all_blueprints.py +++ b/dimos/robot/all_blueprints.py @@ -130,7 +130,7 @@ "arm-teleop-module": "dimos.teleop.quest.quest_extensions.ArmTeleopModule", "b-box-distance-behavior-module": "dimos.robot.custom.bbox_distance_follow.BBoxDistanceBehaviorModule", "b-box-navigation-module": "dimos.navigation.bbox_navigation.BBoxNavigationModule", - "b-box-selection-module": "dimos.robot.custom.bbox_distance_follow.BBoxSelectionModule", + "b-box-selection-module": "dimos.robot.custom.bbox_selection.BBoxSelectionModule", "b1-connection-module": "dimos.robot.unitree.b1.connection.B1ConnectionModule", "camera-module": "dimos.hardware.sensors.camera.module.CameraModule", "cartesian-motion-controller": "dimos.manipulation.control.servo_control.cartesian_motion_controller.CartesianMotionController", diff --git a/dimos/robot/custom/README.md b/dimos/robot/custom/README.md index ba55098f96..ebe8fffc49 100644 --- a/dimos/robot/custom/README.md +++ b/dimos/robot/custom/README.md @@ -76,6 +76,11 @@ unitree_go2_basic.lidar unitree_go2_basic.camera_info -> BBoxDistanceBehaviorModule.camera_info + +dimos-viewer Camera click + -> RerunWebSocketServer.clicked_point + -> BBoxSelectionModule.clicked_point + -> BBoxSelectionModule.selected_bbox ``` `Detection2DModule.detections` 明确发布到 LCM topic `/color_image/detections`,`selected_bbox` 明确发布到 LCM topic `/color_image/selected_bbox`。RerunBridge 会把它们映射到 `world/color_image/detections` 和 `world/color_image/selected_bbox`,本 blueprint 对这两个实体路径配置了专用 `visual_override`,把 YOLO 候选 bbox 显示为黄色框,把 selected bbox 显示为绿色框。Go2 viewer 的 Camera view origin 是 `world/color_image`,所以这些 bbox 会作为相机图像子实体显示在 Camera 视图上。 @@ -87,8 +92,10 @@ unitree_go2_basic.camera_info 职责: - 消费 `Detection2DModule.detections` 的多 bbox。 +- 消费 dimos-viewer 发回的 `clicked_point`,把 Camera 视图里的像素点击映射到最新一帧 bbox。 - 保存最新一帧 detections。 - 通过 RPC 保存用户选择的 `index` 或 `id`。 +- 通过 viewer 点击保存用户选择的 `index`;如果点击在 Camera 视图但没有命中任何 bbox,会清空当前选择。 - 每帧只转发当前选中的 detection。 - 如果当前帧找不到选中 bbox,发布空 `Detection2DArray`,避免下游或 viewer 复用旧 bbox。 @@ -214,19 +221,20 @@ CLI 全局参数必须放在 `run` 前面,例如 `--robot-ip`、`--replay`、` .venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.bbox_distance_follow import BBoxDistanceBehaviorModule; c=RPCClient.remote(BBoxDistanceBehaviorModule); print(c.stop_bbox_distance_behavior()); c.stop_rpc_client()' ``` -### Viewer 观测 +### Viewer 点击选择 启动 replay + viewer 后,Camera 视图里会显示 `world/color_image`。`Detection2DModule` 发布的全部 YOLO 候选框会显示为黄色 bbox。通过命令行 RPC 调用 `select_bbox(index=...)` 后,`BBoxSelectionModule` 会发布 `/color_image/selected_bbox`,本 blueprint 的专用 visual override 会让 RerunBridge 在 `world/color_image/selected_bbox` 上显示绿色 bbox。 +也可以直接在 dimos-viewer 的 Camera 视图里点击黄色 bbox。点击会沿用 viewer 已有的 WebSocket 回传链路变成 `clicked_point`,`BBoxSelectionModule` 会用点击像素坐标命中最新一帧候选 bbox,并立即发布对应的 `selected_bbox`。点击 Camera 视图里没有 bbox 的位置会清空当前选择,让行为模块收到空 selected bbox 后停止输出运动命令。 + 当 selected bbox 在后续帧中移动,overlay 会跟随当前帧 detection 更新;当选择被清除或当前帧找不到选中 bbox,模块会发布空 `Detection2DArray`,viewer 中旧框会消失。 ### 非目标 -- 不新增 bbox 点击选择 UI。 - 不新增通用 `dimos rpc` CLI。 - 不接 Agent、Prompt、MCP、McpServer 或 McpClient。 - 不新增 `@skill`。 - 不在 `BBoxSelectionModule` 内实现 YOLO、ReID、EdgeTAM 或目标丢失恢复。 - 不在 `BBoxDistanceBehaviorModule` 内做人识别或 bbox 选择。 -后续如果需要点击选择,可扩展现有 Rerun/WebSocket 协议,把像素点、bbox id 或 bbox index 转成同一个 `select_bbox(...)` RPC。后续如果 lidar 和 camera 坐标系不一致,可在点云投影前补 TF 对齐。 +后续如果 lidar 和 camera 坐标系不一致,可在点云投影前补 TF 对齐。 diff --git a/dimos/robot/custom/bbox_distance_follow.py b/dimos/robot/custom/bbox_distance_follow.py index 5799319bef..c06bdda1b3 100644 --- a/dimos/robot/custom/bbox_distance_follow.py +++ b/dimos/robot/custom/bbox_distance_follow.py @@ -26,9 +26,12 @@ from dimos.msgs.geometry_msgs.Vector3 import Vector3 # 导入三维向量类型,用于构造 Twist from dimos.msgs.sensor_msgs.CameraInfo import CameraInfo # 导入相机内参消息类型 from dimos.msgs.sensor_msgs.PointCloud2 import PointCloud2 # 导入 lidar 点云消息类型 -from dimos.msgs.std_msgs.Header import Header # 导入 DimOS Header 便捷构造,用于空检测头 from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray # 导入 2D 检测数组消息类型 from dimos.perception.detection.module2D import Detection2DModule # 导入现有多 bbox 检测模块 +from dimos.robot.custom.bbox_selection import ( # 导入 bbox 选择模块,保持选择逻辑可独立测试 + BBoxSelectionConfig, # 导入 bbox 选择模块配置 + BBoxSelectionModule, # 导入 bbox 选择模块 +) # 结束多行 import from dimos.robot.unitree.go2.blueprints.basic.unitree_go2_basic import ( # 导入 Go2 基础蓝图 rerun_config as go2_rerun_config, # 导入 Go2 默认 rerun 配置,用于局部扩展 selected bbox overlay unitree_go2_basic, # 导入 Go2 基础蓝图 @@ -49,7 +52,6 @@ _LINEAR_GAIN = 0.8 # 定义距离误差到线速度的简单比例增益 _ANGULAR_GAIN = 1.0 # 定义横向像素误差到角速度的简单比例增益 _DISTANCE_TOLERANCE_M = 0.05 # 定义靠近完成时使用的距离容差 -_DEFAULT_FRAME_ID = "camera_optical" # 定义空 Detection2DArray 使用的默认坐标系 _YOLO_MODEL_NAME = "yolo11n.pt" # 定义 Detection2DModule 默认需要的 YOLO 模型文件名 _YOLO_MODEL_PATH = get_data_dir("models_yolo") / _YOLO_MODEL_NAME # 定义本地预下载模型路径 _YOLO_MODEL_URL = "https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo11n.pt" # 定义官方权重下载地址 @@ -159,151 +161,6 @@ def _format_missing_yolo_model_error(model_path: Path) -> str: # 定义缺失 ) # 结束错误消息构造 -class BBoxSelectionConfig(ModuleConfig): # 定义 bbox 选择模块配置,当前 MVP 暂无额外参数 - pass # 当前选择逻辑全部由 RPC 输入驱动,不需要额外配置项 - - -class BBoxSelectionModule(Module): # 定义 bbox 选择模块,只负责从多 bbox 中转发单个 bbox - config: BBoxSelectionConfig # 声明本模块使用的配置类型 - detections: In[Detection2DArray] # 输入现有检测模块发布的多 bbox Detection2DArray - selected_bbox: Out[Detection2DArray] # 输出只包含当前选中 bbox 的 Detection2DArray - - def __init__(self, **kwargs: Any) -> None: # 定义构造函数,接收框架传入的配置参数 - super().__init__(**kwargs) # 调用父类构造函数,让 DimOS 初始化模块和流 - self._lock = threading.RLock() # 创建递归锁,保护最新 detections 和选择状态 - self._latest_detections: Detection2DArray | None = None # 保存最新一帧多 bbox 检测结果 - self._selected_index: int | None = None # 保存通过 index 选择的目标序号 - self._selected_id: str | None = None # 保存通过 id 选择的目标 id - - @rpc # 标记 start() 是框架生命周期 RPC - def start(self) -> None: # 定义模块启动逻辑 - super().start() # 启动父类逻辑,包括 RPC 和自动绑定 - self.register_disposable(Disposable(self.detections.subscribe(self._on_detections))) # 订阅检测流 - - @rpc # 标记 list_candidates() 可通过 DimOS RPC 调用 - def list_candidates(self) -> list[dict[str, Any]]: # 返回最新一帧候选 bbox 列表 - with self._lock: # 加锁读取最新 detections,避免和订阅回调并发冲突 - detections = self._latest_detections # 复制引用,缩短锁内逻辑 - - if detections is None: # 如果还没有收到任何检测帧 - return [] # 返回空候选列表 - - return [self._candidate_to_dict(index, detection) for index, detection in enumerate(detections.detections)] # 转换每个检测为 RPC 友好的字典 - - @rpc # 标记 select_bbox() 可通过 DimOS RPC 调用 - def select_bbox(self, index: int | None = None, id: str | None = None) -> str: # 保存用户选择的 bbox 条件 - if index is None and id is None: # 如果调用方没有提供 index 或 id - return "select_bbox requires index or id" # 返回可读错误,不改变当前选择 - - if index is not None and id is not None: # 如果调用方同时提供两种选择条件 - return "select_bbox accepts only one of index or id" # 返回可读错误,避免选择语义不明确 - - with self._lock: # 加锁更新选择状态 - self._selected_index = index # 保存 index 选择,未使用时为 None - self._selected_id = str(id) if id is not None else None # 保存 id 选择,统一转为字符串 - latest = self._latest_detections # 取出最新 detections,用于立即刷新 viewer - - if latest is not None: # 如果已经收到过检测帧 - self._publish_selected(latest) # 立即按当前选择发布 selected_bbox,方便 viewer 立刻反馈 - - if index is not None: # 如果用户按 index 选择 - return f"selected bbox index={index}" # 返回确认信息 - - return f"selected bbox id={id}" # 返回按 id 选择的确认信息 - - @rpc # 标记 clear_selection() 可通过 DimOS RPC 调用 - def clear_selection(self) -> str: # 清除当前 bbox 选择 - with self._lock: # 加锁更新选择状态 - self._selected_index = None # 清空 index 选择 - self._selected_id = None # 清空 id 选择 - latest = self._latest_detections # 取出最新 detections,用于保持 header - - self.selected_bbox.publish(self._empty_detection_array(latest)) # 发布空数组,清除 viewer 中的旧选框 - return "cleared bbox selection" # 返回确认信息 - - def _on_detections(self, detections: Detection2DArray) -> None: # 处理检测模块发布的新一帧多 bbox - with self._lock: # 加锁更新最新检测结果 - self._latest_detections = detections # 保存最新一帧 detections - - self._publish_selected(detections) # 每帧根据当前选择转发单个 bbox 或空 bbox - - def _publish_selected(self, detections: Detection2DArray) -> None: # 根据当前选择发布 selected_bbox - selected = self._find_selected_detection(detections) # 在当前帧里查找被选中的检测 - if selected is None: # 如果当前帧没有选中目标或选择还不存在 - self.selected_bbox.publish(self._empty_detection_array(detections)) # 发布空数组,避免下游复用旧 bbox - return # 结束本帧处理 - - msg = Detection2DArray( # 构造只包含一个 detection 的消息 - detections_length=1, # 设置检测数量为 1 - header=detections.header, # 复用当前帧 header,保持时间和坐标系一致 - detections=[selected], # 只放入当前帧匹配到的 selected detection - ) # 结束 Detection2DArray 构造 - self.selected_bbox.publish(msg) # 发布 selected_bbox 给行为模块和 viewer - - def _find_selected_detection(self, detections: Detection2DArray) -> Any | None: # 在当前帧中查找选中的 detection - with self._lock: # 加锁读取选择条件 - selected_index = self._selected_index # 复制 index 选择 - selected_id = self._selected_id # 复制 id 选择 - - if selected_id is not None: # 如果当前使用 id 选择 - for index, detection in enumerate(detections.detections): # 遍历当前帧所有 detection - if self._detection_id(detection, index) == selected_id: # 比较真实 id 或 index fallback - return detection # 找到匹配 id 的 detection - return None # 当前帧没有匹配 id 时返回空 - - if selected_index is not None: # 如果当前使用 index 选择 - if 0 <= selected_index < len(detections.detections): # 如果 index 在当前帧范围内 - return detections.detections[selected_index] # 返回当前帧对应序号的 detection - return None # index 越界时返回空 - - return None # 没有选择时返回空 - - @staticmethod # 声明这是不依赖实例状态的工具函数 - def _empty_detection_array(source: Detection2DArray | None) -> Detection2DArray: # 构造空 Detection2DArray - header = source.header if source is not None else Header(time.time(), _DEFAULT_FRAME_ID) # 优先复用来源 header - return Detection2DArray(detections_length=0, header=header, detections=[]) # 返回空检测数组 - - @classmethod # 声明候选转换需要复用类级工具函数 - def _candidate_to_dict(cls, index: int, detection: Any) -> dict[str, Any]: # 把 detection 转成 RPC 字典 - x1, y1, x2, y2 = cls._bbox_corners(detection) # 计算 bbox 的左上和右下坐标 - confidence, class_id = cls._best_result(detection) # 读取第一条 hypothesis 的置信度和类别 - return { # 返回用户可读且 JSON 友好的候选结构 - "index": index, # 返回当前帧中的候选序号 - "id": cls._detection_id(detection, index), # 返回 detection.id,没有时回退为 index 字符串 - "bbox": [x1, y1, x2, y2], # 返回 xyxy 格式 bbox - "confidence": confidence, # 返回置信度,缺失时为 0.0 - "class_id": class_id, # 返回类别 id,缺失时为 None - } # 结束候选字典 - - @staticmethod # 声明这是不依赖实例状态的工具函数 - def _detection_id(detection: Any, index: int) -> str: # 读取 detection id,并在缺失时回退到 index - detection_id = getattr(detection, "id", "") # 读取 detection.id,缺失时使用空字符串 - return str(detection_id) if detection_id else str(index) # 返回真实 id 或 index 字符串 - - @staticmethod # 声明这是不依赖实例状态的工具函数 - def _bbox_corners(detection: Any) -> tuple[float, float, float, float]: # 把中心点 bbox 转成 xyxy - bbox = detection.bbox # 读取 Detection2D 的 bbox 字段 - center = bbox.center.position # 读取 bbox 中心点位置 - half_width = float(bbox.size_x) / 2.0 # 计算 bbox 半宽 - half_height = float(bbox.size_y) / 2.0 # 计算 bbox 半高 - x1 = float(center.x) - half_width # 计算左上角 x - y1 = float(center.y) - half_height # 计算左上角 y - x2 = float(center.x) + half_width # 计算右下角 x - y2 = float(center.y) + half_height # 计算右下角 y - return x1, y1, x2, y2 # 返回 xyxy 四元组 - - @staticmethod # 声明这是不依赖实例状态的工具函数 - def _best_result(detection: Any) -> tuple[float, str | None]: # 读取 detection 的首个分类结果 - results = getattr(detection, "results", []) # 读取 detection.results,缺失时使用空列表 - if not results: # 如果没有任何 hypothesis - return 0.0, None # 返回默认置信度和空类别 - - hypothesis = results[0].hypothesis # 读取第一条 ObjectHypothesis - confidence = float(getattr(hypothesis, "score", 0.0)) # 读取置信度,缺失时为 0.0 - class_id = getattr(hypothesis, "class_id", None) # 读取类别 id,缺失时为 None - return confidence, class_id # 返回置信度和类别 id - - class BBoxDistanceBehaviorConfig(ModuleConfig): # 定义 bbox 距离行为模块配置 command_hz: float = 20.0 # 速度命令发布频率,单位 Hz hold_seconds: float = 3.0 # 保持 hold_distance 的默认时间,单位秒 diff --git a/dimos/robot/custom/bbox_selection.py b/dimos/robot/custom/bbox_selection.py new file mode 100644 index 0000000000..6bc842b64a --- /dev/null +++ b/dimos/robot/custom/bbox_selection.py @@ -0,0 +1,223 @@ +from __future__ import annotations # 允许类型注解延迟解析,减少循环导入风险 + +import math # 导入数学工具,用于检查点击像素坐标是否有效 +import threading # 导入线程锁,保护最新 detections 和选择状态 +import time # 导入时间工具,用于空检测消息时间戳 +from typing import Any # 导入通用类型,兼容 LCM 生成消息字段 + +from reactivex.disposable import Disposable # 导入 Disposable,用于注册输入流订阅 + +from dimos.core.core import rpc # 导入 rpc 装饰器,让方法可通过 DimOS RPC 调用 +from dimos.core.module import Module, ModuleConfig # 导入模块基类和模块配置基类 +from dimos.core.stream import In, Out # 导入输入输出流类型 +from dimos.msgs.geometry_msgs.PointStamped import ( + PointStamped, # 导入 viewer 点击点类型,用于相机 bbox 点击选择 +) +from dimos.msgs.std_msgs.Header import Header # 导入 DimOS Header 便捷构造,用于空检测头 +from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray # 导入 2D 检测数组消息类型 + +_DEFAULT_FRAME_ID = "camera_optical" # 定义空 Detection2DArray 使用的默认坐标系 + + +class BBoxSelectionConfig(ModuleConfig): # 定义 bbox 选择模块配置,当前 MVP 暂无额外参数 + pass # 当前选择逻辑全部由 RPC 或 viewer 点击驱动,不需要额外配置项 + + +class BBoxSelectionModule(Module): # 定义 bbox 选择模块,只负责从多 bbox 中转发单个 bbox + config: BBoxSelectionConfig # 声明本模块使用的配置类型 + detections: In[Detection2DArray] # 输入现有检测模块发布的多 bbox Detection2DArray + clicked_point: In[PointStamped] # 输入 dimos-viewer 点击事件,用于把相机像素点击映射到 bbox + selected_bbox: Out[Detection2DArray] # 输出只包含当前选中 bbox 的 Detection2DArray + + def __init__(self, **kwargs: Any) -> None: # 定义构造函数,接收框架传入的配置参数 + super().__init__(**kwargs) # 调用父类构造函数,让 DimOS 初始化模块和流 + self._lock = threading.RLock() # 创建递归锁,保护最新 detections 和选择状态 + self._latest_detections: Detection2DArray | None = None # 保存最新一帧多 bbox 检测结果 + self._selected_index: int | None = None # 保存通过 index 选择的目标序号 + self._selected_id: str | None = None # 保存通过 id 选择的目标 id + + @rpc # 标记 start() 是框架生命周期 RPC + def start(self) -> None: # 定义模块启动逻辑 + super().start() # 启动父类逻辑,包括 RPC 和自动绑定 + self.register_disposable(Disposable(self.detections.subscribe(self._on_detections))) # 订阅检测流 + self.register_disposable(Disposable(self.clicked_point.subscribe(self._on_clicked_point))) # 订阅 viewer 点击流 + + @rpc # 标记 list_candidates() 可通过 DimOS RPC 调用 + def list_candidates(self) -> list[dict[str, Any]]: # 返回最新一帧候选 bbox 列表 + with self._lock: # 加锁读取最新 detections,避免和订阅回调并发冲突 + detections = self._latest_detections # 复制引用,缩短锁内逻辑 + + if detections is None: # 如果还没有收到任何检测帧 + return [] # 返回空候选列表 + + return [self._candidate_to_dict(index, detection) for index, detection in enumerate(detections.detections)] # 转换每个检测为 RPC 友好的字典 + + @rpc # 标记 select_bbox() 可通过 DimOS RPC 调用 + def select_bbox(self, index: int | None = None, id: str | None = None) -> str: # 保存用户选择的 bbox 条件 + if index is None and id is None: # 如果调用方没有提供 index 或 id + return "select_bbox requires index or id" # 返回可读错误,不改变当前选择 + + if index is not None and id is not None: # 如果调用方同时提供两种选择条件 + return "select_bbox accepts only one of index or id" # 返回可读错误,避免选择语义不明确 + + with self._lock: # 加锁更新选择状态 + self._selected_index = index # 保存 index 选择,未使用时为 None + self._selected_id = str(id) if id is not None else None # 保存 id 选择,统一转为字符串 + latest = self._latest_detections # 取出最新 detections,用于立即刷新 viewer + + if latest is not None: # 如果已经收到过检测帧 + self._publish_selected(latest) # 立即按当前选择发布 selected_bbox,方便 viewer 立刻反馈 + + if index is not None: # 如果用户按 index 选择 + return f"selected bbox index={index}" # 返回确认信息 + + return f"selected bbox id={id}" # 返回按 id 选择的确认信息 + + @rpc # 标记 clear_selection() 可通过 DimOS RPC 调用 + def clear_selection(self) -> str: # 清除当前 bbox 选择 + with self._lock: # 加锁更新选择状态 + self._selected_index = None # 清空 index 选择 + self._selected_id = None # 清空 id 选择 + latest = self._latest_detections # 取出最新 detections,用于保持 header + + self.selected_bbox.publish(self._empty_detection_array(latest)) # 发布空数组,清除 viewer 中的旧选框 + return "cleared bbox selection" # 返回确认信息 + + def _on_detections(self, detections: Detection2DArray) -> None: # 处理检测模块发布的新一帧多 bbox + with self._lock: # 加锁更新最新检测结果 + self._latest_detections = detections # 保存最新一帧 detections + + self._publish_selected(detections) # 每帧根据当前选择转发单个 bbox 或空 bbox + + def _on_clicked_point(self, point: PointStamped) -> None: # 处理 dimos-viewer 发回来的点击点 + if not self._is_color_image_click(point): # 只接受 Camera/color_image 视图里的点击,避免误吃 3D 点击 + return # 非相机点击不改变当前 bbox 选择 + + if not (math.isfinite(point.x) and math.isfinite(point.y)): # 检查点击像素坐标是否可用 + return # 无效点击直接忽略,不清除当前选择 + + with self._lock: # 加锁读取最新检测帧 + detections = self._latest_detections # 复制最新 detections,后续命中测试不持锁 + + if detections is None: # 如果 detector 还没有发布过任何候选 bbox + return # 暂时无法选择,等待下一帧 detections + + selected_index = self._find_clicked_detection_index( # 在最新 detections 中查找被点击命中的 bbox + detections, # 传入最新一帧候选 bbox + float(point.x), # 传入 viewer 点击的 x 像素坐标 + float(point.y), # 传入 viewer 点击的 y 像素坐标 + ) # 结束命中测试 + + with self._lock: # 加锁更新选择状态 + self._selected_index = selected_index # 命中则保存 index,未命中则清空 index + self._selected_id = None # viewer 点击按当前帧 index 选择,不沿用旧 id 选择 + + self._publish_selected(detections) # 立即刷新 selected_bbox,让机器人和 viewer 同步看到选择结果 + + def _publish_selected(self, detections: Detection2DArray) -> None: # 根据当前选择发布 selected_bbox + selected = self._find_selected_detection(detections) # 在当前帧里查找被选中的检测 + if selected is None: # 如果当前帧没有选中目标或选择还不存在 + self.selected_bbox.publish(self._empty_detection_array(detections)) # 发布空数组,避免下游复用旧 bbox + return # 结束本帧处理 + + msg = Detection2DArray( # 构造只包含一个 detection 的消息 + detections_length=1, # 设置检测数量为 1 + header=detections.header, # 复用当前帧 header,保持时间和坐标系一致 + detections=[selected], # 只放入当前帧匹配到的 selected detection + ) # 结束 Detection2DArray 构造 + self.selected_bbox.publish(msg) # 发布 selected_bbox 给行为模块和 viewer + + def _find_selected_detection(self, detections: Detection2DArray) -> Any | None: # 在当前帧中查找选中的 detection + with self._lock: # 加锁读取选择条件 + selected_index = self._selected_index # 复制 index 选择 + selected_id = self._selected_id # 复制 id 选择 + + if selected_id is not None: # 如果当前使用 id 选择 + for index, detection in enumerate(detections.detections): # 遍历当前帧所有 detection + if self._detection_id(detection, index) == selected_id: # 比较真实 id 或 index fallback + return detection # 找到匹配 id 的 detection + return None # 当前帧没有匹配 id 时返回空 + + if selected_index is not None: # 如果当前使用 index 选择 + if 0 <= selected_index < len(detections.detections): # 如果 index 在当前帧范围内 + return detections.detections[selected_index] # 返回当前帧对应序号的 detection + return None # index 越界时返回空 + + return None # 没有选择时返回空 + + @staticmethod # 声明这是不依赖实例状态的工具函数 + def _empty_detection_array(source: Detection2DArray | None) -> Detection2DArray: # 构造空 Detection2DArray + header = source.header if source is not None else Header(time.time(), _DEFAULT_FRAME_ID) # 优先复用来源 header + return Detection2DArray(detections_length=0, header=header, detections=[]) # 返回空检测数组 + + @classmethod # 声明候选转换需要复用类级工具函数 + def _candidate_to_dict(cls, index: int, detection: Any) -> dict[str, Any]: # 把 detection 转成 RPC 字典 + x1, y1, x2, y2 = cls._bbox_corners(detection) # 计算 bbox 的左上和右下坐标 + confidence, class_id = cls._best_result(detection) # 读取第一条 hypothesis 的置信度和类别 + return { # 返回用户可读且 JSON 友好的候选结构 + "index": index, # 返回当前帧中的候选序号 + "id": cls._detection_id(detection, index), # 返回 detection.id,没有时回退为 index 字符串 + "bbox": [x1, y1, x2, y2], # 返回 xyxy 格式 bbox + "confidence": confidence, # 返回置信度,缺失时为 0.0 + "class_id": class_id, # 返回类别 id,缺失时为 None + } # 结束候选字典 + + @staticmethod # 声明这是不依赖实例状态的工具函数 + def _detection_id(detection: Any, index: int) -> str: # 读取 detection id,并在缺失时回退到 index + detection_id = getattr(detection, "id", "") # 读取 detection.id,缺失时使用空字符串 + return str(detection_id) if detection_id else str(index) # 返回真实 id 或 index 字符串 + + @staticmethod # 声明这是不依赖实例状态的工具函数 + def _is_color_image_click(point: PointStamped) -> bool: # 判断点击是否来自相机图像或其 bbox overlay + frame_parts = point.frame_id.strip("/").split("/") # 把 entity_path 拆成路径片段,兼容有无前导斜杠 + return "color_image" in frame_parts # 只让 color_image 视图点击驱动 bbox 选择 + + @classmethod # 声明命中测试需要复用 bbox 坐标转换工具 + def _find_clicked_detection_index( # 查找包含点击像素的 detection index + cls, # 传入类本身,方便调用类方法 + detections: Detection2DArray, # 输入最新一帧候选 bbox + x: float, # 输入点击的 x 像素坐标 + y: float, # 输入点击的 y 像素坐标 + ) -> int | None: # 返回命中的 bbox index,未命中时返回 None + hits: list[tuple[float, int]] = [] # 保存命中的 bbox 面积和 index,用于重叠时选更小框 + for index, detection in enumerate(detections.detections): # 遍历当前帧所有候选 bbox + x1, y1, x2, y2 = cls._bbox_corners(detection) # 读取当前 bbox 的 xyxy 像素范围 + left, right = sorted((x1, x2)) # 归一化左右边界,防止异常 bbox 坐标反向 + top, bottom = sorted((y1, y2)) # 归一化上下边界,防止异常 bbox 坐标反向 + if left <= x <= right and top <= y <= bottom: # 如果点击点落在当前 bbox 内 + area = max((right - left) * (bottom - top), 0.0) # 计算 bbox 面积,重叠时优先小框 + hits.append((area, index)) # 记录命中的候选 bbox + + if not hits: # 如果没有任何 bbox 包含点击点 + return None # 返回 None,调用方会清空当前选择 + + return min(hits)[1] # 多个 bbox 重叠时选择面积最小的那个 + + @staticmethod # 声明这是不依赖实例状态的工具函数 + def _bbox_corners(detection: Any) -> tuple[float, float, float, float]: # 把中心点 bbox 转成 xyxy + bbox = detection.bbox # 读取 Detection2D 的 bbox 字段 + center = bbox.center.position # 读取 bbox 中心点位置 + half_width = float(bbox.size_x) / 2.0 # 计算 bbox 半宽 + half_height = float(bbox.size_y) / 2.0 # 计算 bbox 半高 + x1 = float(center.x) - half_width # 计算左上角 x + y1 = float(center.y) - half_height # 计算左上角 y + x2 = float(center.x) + half_width # 计算右下角 x + y2 = float(center.y) + half_height # 计算右下角 y + return x1, y1, x2, y2 # 返回 xyxy 四元组 + + @staticmethod # 声明这是不依赖实例状态的工具函数 + def _best_result(detection: Any) -> tuple[float, str | None]: # 读取 detection 的首个分类结果 + results = getattr(detection, "results", []) # 读取 detection.results,缺失时使用空列表 + if not results: # 如果没有任何 hypothesis + return 0.0, None # 返回默认置信度和空类别 + + hypothesis = results[0].hypothesis # 读取第一条 ObjectHypothesis + confidence = float(getattr(hypothesis, "score", 0.0)) # 读取置信度,缺失时为 0.0 + class_id = getattr(hypothesis, "class_id", None) # 读取类别 id,缺失时为 None + return confidence, class_id # 返回置信度和类别 id + + +__all__ = [ # 声明这个文件希望对外暴露的名字 + "BBoxSelectionConfig", # 暴露选择模块配置 + "BBoxSelectionModule", # 暴露选择模块 +] # 结束 __all__ 列表 diff --git a/dimos/robot/custom/test_bbox_distance_follow.py b/dimos/robot/custom/test_bbox_distance_follow.py new file mode 100644 index 0000000000..33fa3ad1b5 --- /dev/null +++ b/dimos/robot/custom/test_bbox_distance_follow.py @@ -0,0 +1,180 @@ +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from collections.abc import Callable +from typing import Any + +from dimos_lcm.vision_msgs import ( + BoundingBox2D, + Detection2D, + ObjectHypothesis, + ObjectHypothesisWithPose, + Point2D, + Pose2D, +) +import pytest + +from dimos.msgs.geometry_msgs.PointStamped import PointStamped +from dimos.msgs.std_msgs.Header import Header +from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray +from dimos.protocol.rpc.spec import RPCSpec +from dimos.robot.custom.bbox_selection import BBoxSelectionModule + + +class _NoopRPC(RPCSpec): + def __init__( + self, + *, + rpc_timeouts: dict[str, float] | None = None, + default_rpc_timeout: float = 120.0, + ) -> None: + self.rpc_timeouts = {} if rpc_timeouts is None else dict(rpc_timeouts) + self.default_rpc_timeout = default_rpc_timeout + + def serve_module_rpc(self, module: Any, name: str | None = None) -> None: + pass + + def serve_rpc(self, f: Callable[..., Any], name: str) -> Callable[[], None]: + return lambda: None + + def call( + self, + name: str, + arguments: tuple[list[Any], dict[str, Any]], + cb: Callable[[Any], None] | None, + ) -> Callable[[], None] | None: + return (lambda: None) if cb is not None else None + + def call_nowait(self, name: str, arguments: tuple[list[Any], dict[str, Any]]) -> None: + pass + + def start(self) -> None: + pass + + def stop(self) -> None: + pass + + +@pytest.fixture() +def module() -> BBoxSelectionModule: + instance = BBoxSelectionModule(rpc_transport=_NoopRPC) + try: + yield instance + finally: + instance.stop() + + +def _make_detection( + detection_id: str, + x1: float, + y1: float, + x2: float, + y2: float, +) -> Detection2D: + center_x = (x1 + x2) / 2.0 + center_y = (y1 + y2) / 2.0 + return Detection2D( + id=detection_id, + results_length=1, + header=Header(123.0, "camera_optical"), + bbox=BoundingBox2D( + center=Pose2D(position=Point2D(x=center_x, y=center_y), theta=0.0), + size_x=x2 - x1, + size_y=y2 - y1, + ), + results=[ + ObjectHypothesisWithPose( + hypothesis=ObjectHypothesis(class_id="person", score=0.9) + ) + ], + ) + + +def _make_array(*detections: Detection2D) -> Detection2DArray: + return Detection2DArray( + detections_length=len(detections), + header=Header(123.0, "camera_optical"), + detections=list(detections), + ) + + +def _subscribe_selected(module: BBoxSelectionModule) -> list[Any]: + received: list[Any] = [] + module.selected_bbox.subscribe(received.append) + return received + + +def test_camera_click_selects_matching_bbox(module: BBoxSelectionModule) -> None: + received = _subscribe_selected(module) + detections = _make_array( + _make_detection("left", 0.0, 0.0, 100.0, 100.0), + _make_detection("target", 200.0, 100.0, 260.0, 180.0), + ) + + module._on_detections(detections) + received.clear() + module._on_clicked_point( + PointStamped(x=220.0, y=120.0, z=0.0, frame_id="/world/color_image/detections") + ) + + assert len(received) == 1 + assert received[0].detections_length == 1 + assert received[0].detections[0].id == "target" + + +def test_camera_click_miss_clears_selection(module: BBoxSelectionModule) -> None: + received = _subscribe_selected(module) + detections = _make_array(_make_detection("target", 20.0, 20.0, 120.0, 120.0)) + + module._on_detections(detections) + module.select_bbox(index=0) + received.clear() + module._on_clicked_point(PointStamped(x=300.0, y=300.0, z=0.0, frame_id="/world/color_image")) + + assert len(received) == 1 + assert received[0].detections_length == 0 + assert received[0].detections == [] + + +def test_non_camera_click_does_not_change_selection(module: BBoxSelectionModule) -> None: + received = _subscribe_selected(module) + detections = _make_array(_make_detection("target", 20.0, 20.0, 120.0, 120.0)) + + module._on_detections(detections) + module.select_bbox(index=0) + received.clear() + module._on_clicked_point(PointStamped(x=300.0, y=300.0, z=0.0, frame_id="/world")) + module._on_detections(detections) + + assert len(received) == 1 + assert received[0].detections_length == 1 + assert received[0].detections[0].id == "target" + + +def test_overlapping_camera_click_prefers_smaller_bbox(module: BBoxSelectionModule) -> None: + received = _subscribe_selected(module) + detections = _make_array( + _make_detection("large", 0.0, 0.0, 200.0, 200.0), + _make_detection("small", 50.0, 50.0, 80.0, 80.0), + ) + + module._on_detections(detections) + received.clear() + module._on_clicked_point(PointStamped(x=60.0, y=60.0, z=0.0, frame_id="world/color_image")) + + assert len(received) == 1 + assert received[0].detections_length == 1 + assert received[0].detections[0].id == "small" From 29af2b126e7a83f7960efda54eecb535c3716125 Mon Sep 17 00:00:00 2001 From: Harold <20009626+HaroldGin931@users.noreply.github.com> Date: Thu, 28 May 2026 01:51:42 +0800 Subject: [PATCH 06/17] refactor(custom): restructure dimos/robot/custom/ into modules/blueprints/visualization/tests/ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Move flat files into subdirectories: - bbox_selection.py → modules/bbox_selection_module.py - bbox_distance_follow.py → modules/bbox_distance_behavior_module.py - go2_startup_self_check.py → modules/go2_startup_self_check_module.py - yoloe_tracking.py → modules/yoloe_tracking_module.py - test_bbox_distance_follow.py → tests/test_bbox_selection_module.py - Add blueprints/ with bbox_distance_follow, go2_startup_self_check, yoloe_tracking_test - Add visualization/detection2d_overlay.py (detections/selected_bbox/yoloe overlays) - Update all_blueprints.py with new import paths - Update README.md with new directory structure and RPC import examples --- .gitignore | 1 + dimos/robot/all_blueprints.py | 15 +- dimos/robot/custom/README.md | 85 ++++++- dimos/robot/custom/blueprints/__init__.py | 13 + .../custom/blueprints/bbox_distance_follow.py | 123 +++++++++ .../blueprints/go2_startup_self_check.py | 20 ++ .../custom/blueprints/yoloe_tracking_test.py | 103 ++++++++ dimos/robot/custom/modules/__init__.py | 13 + .../bbox_distance_behavior_module.py} | 160 +----------- .../bbox_selection_module.py} | 0 .../go2_startup_self_check_module.py} | 30 --- .../custom/modules/yoloe_tracking_module.py | 107 ++++++++ dimos/robot/custom/tests/__init__.py | 13 + .../test_bbox_selection_module.py} | 2 +- dimos/robot/custom/visualization/__init__.py | 13 + .../visualization/detection2d_overlay.py | 81 ++++++ dimos/robot/custom/yoloe_tracking.py | 237 ------------------ 17 files changed, 576 insertions(+), 440 deletions(-) create mode 100644 dimos/robot/custom/blueprints/__init__.py create mode 100644 dimos/robot/custom/blueprints/bbox_distance_follow.py create mode 100644 dimos/robot/custom/blueprints/go2_startup_self_check.py create mode 100644 dimos/robot/custom/blueprints/yoloe_tracking_test.py create mode 100644 dimos/robot/custom/modules/__init__.py rename dimos/robot/custom/{bbox_distance_follow.py => modules/bbox_distance_behavior_module.py} (62%) rename dimos/robot/custom/{bbox_selection.py => modules/bbox_selection_module.py} (100%) rename dimos/robot/custom/{go2_startup_self_check.py => modules/go2_startup_self_check_module.py} (86%) create mode 100644 dimos/robot/custom/modules/yoloe_tracking_module.py create mode 100644 dimos/robot/custom/tests/__init__.py rename dimos/robot/custom/{test_bbox_distance_follow.py => tests/test_bbox_selection_module.py} (98%) create mode 100644 dimos/robot/custom/visualization/__init__.py create mode 100644 dimos/robot/custom/visualization/detection2d_overlay.py delete mode 100644 dimos/robot/custom/yoloe_tracking.py diff --git a/.gitignore b/.gitignore index aedee04af7..e8a05f75b0 100644 --- a/.gitignore +++ b/.gitignore @@ -86,3 +86,4 @@ htmlcov/ # Memory2 autorecord recording*.db +MUJOCO_LOG.TXT diff --git a/dimos/robot/all_blueprints.py b/dimos/robot/all_blueprints.py index b681b6ade6..229df64679 100644 --- a/dimos/robot/all_blueprints.py +++ b/dimos/robot/all_blueprints.py @@ -17,7 +17,7 @@ all_blueprints = { "alfred-nav": "dimos.robot.diy.alfred.blueprints.alfred_nav:alfred_nav", - "bbox-distance-follow": "dimos.robot.custom.bbox_distance_follow:bbox_distance_follow", + "bbox-distance-follow": "dimos.robot.custom.blueprints.bbox_distance_follow:bbox_distance_follow", "coordinator-basic": "dimos.control.blueprints.basic:coordinator_basic", "coordinator-cartesian-ik-mock": "dimos.control.blueprints.teleop:coordinator_cartesian_ik_mock", "coordinator-cartesian-ik-piper": "dimos.control.blueprints.teleop:coordinator_cartesian_ik_piper", @@ -108,7 +108,7 @@ "unitree-go2-ros": "dimos.robot.unitree.go2.blueprints.smart.unitree_go2_ros:unitree_go2_ros", "unitree-go2-security": "dimos.robot.unitree.go2.blueprints.agentic.unitree_go2_security:unitree_go2_security", "unitree-go2-spatial": "dimos.robot.unitree.go2.blueprints.smart.unitree_go2_spatial:unitree_go2_spatial", - "unitree-go2-startup-self-check": "dimos.robot.custom.go2_startup_self_check:unitree_go2_startup_self_check", + "unitree-go2-startup-self-check": "dimos.robot.custom.blueprints.go2_startup_self_check:unitree_go2_startup_self_check", "unitree-go2-temporal-memory": "dimos.robot.unitree.go2.blueprints.agentic.unitree_go2_temporal_memory:unitree_go2_temporal_memory", "unitree-go2-vlm-stream-test": "dimos.robot.unitree.go2.blueprints.smart.unitree_go2_vlm_stream_test:unitree_go2_vlm_stream_test", "unitree-go2-webrtc-keyboard-teleop": "dimos.robot.unitree.go2.blueprints.basic.unitree_go2_webrtc_keyboard_teleop:unitree_go2_webrtc_keyboard_teleop", @@ -121,16 +121,17 @@ "xarm6-planner-only": "dimos.manipulation.blueprints:xarm6_planner_only", "xarm7-planner-coordinator": "dimos.manipulation.blueprints:xarm7_planner_coordinator", "xarm7-planner-coordinator-agent": "dimos.manipulation.blueprints:xarm7_planner_coordinator_agent", - "yoloe-tracking-test": "dimos.robot.custom.yoloe_tracking:yoloe_tracking_test", + "yoloe-keyboard-teleop": "dimos.robot.custom.blueprints.yoloe_keyboard_teleop:yoloe_keyboard_teleop", + "yoloe-tracking-test": "dimos.robot.custom.blueprints.yoloe_tracking_test:yoloe_tracking_test", } all_modules = { "alfred-high-level": "dimos.robot.diy.alfred.effector_high_level.AlfredHighLevel", "arm-teleop-module": "dimos.teleop.quest.quest_extensions.ArmTeleopModule", - "b-box-distance-behavior-module": "dimos.robot.custom.bbox_distance_follow.BBoxDistanceBehaviorModule", + "b-box-distance-behavior-module": "dimos.robot.custom.modules.bbox_distance_behavior_module.BBoxDistanceBehaviorModule", "b-box-navigation-module": "dimos.navigation.bbox_navigation.BBoxNavigationModule", - "b-box-selection-module": "dimos.robot.custom.bbox_selection.BBoxSelectionModule", + "b-box-selection-module": "dimos.robot.custom.modules.bbox_selection_module.BBoxSelectionModule", "b1-connection-module": "dimos.robot.unitree.b1.connection.B1ConnectionModule", "camera-module": "dimos.hardware.sensors.camera.module.CameraModule", "cartesian-motion-controller": "dimos.manipulation.control.servo_control.cartesian_motion_controller.CartesianMotionController", @@ -157,7 +158,7 @@ "go2-connection": "dimos.robot.unitree.go2.connection.GO2Connection", "go2-fleet-connection": "dimos.robot.unitree.go2.fleet_connection.Go2FleetConnection", "go2-memory": "dimos.robot.unitree.go2.blueprints.smart.unitree_go2.Go2Memory", - "go2-startup-self-check": "dimos.robot.custom.go2_startup_self_check.Go2StartupSelfCheck", + "go2-startup-self-check": "dimos.robot.custom.modules.go2_startup_self_check_module.Go2StartupSelfCheck", "google-maps-skill-container": "dimos.agents.skills.google_maps_skill_container.GoogleMapsSkillContainer", "gps-nav-skill-container": "dimos.agents.skills.gps_nav_skill.GpsNavSkillContainer", "grasp-gen-module": "dimos.manipulation.grasping.graspgen_module.GraspGenModule", @@ -225,6 +226,6 @@ "wavefront-frontier-explorer": "dimos.navigation.frontier_exploration.wavefront_frontier_goal_selector.WavefrontFrontierExplorer", "web-input": "dimos.agents.web_human_input.WebInput", "websocket-vis-module": "dimos.web.websocket_vis.websocket_vis_module.WebsocketVisModule", - "yoloe-tracking-module": "dimos.robot.custom.yoloe_tracking.YoloeTrackingModule", + "yoloe-tracking-module": "dimos.robot.custom.modules.yoloe_tracking_module.YoloeTrackingModule", "zed-camera": "dimos.hardware.sensors.camera.zed.camera.ZEDCamera", } diff --git a/dimos/robot/custom/README.md b/dimos/robot/custom/README.md index ebe8fffc49..83219a613d 100644 --- a/dimos/robot/custom/README.md +++ b/dimos/robot/custom/README.md @@ -1,5 +1,78 @@ # Custom Robot Blueprints +## 目录结构 + +``` +dimos/robot/custom/ +├── modules/ # 纯业务逻辑,无 blueprint / vis 代码 +│ ├── bbox_selection_module.py # BBoxSelectionModule, BBoxSelectionConfig +│ ├── bbox_distance_behavior_module.py # BBoxDistanceBehaviorModule, BBoxDistanceBehaviorConfig +│ ├── yoloe_tracking_module.py # YoloeTrackingModule, YoloeTrackingConfig +│ └── go2_startup_self_check_module.py # Go2StartupSelfCheck, Go2StartupSelfCheckConfig +├── visualization/ # Detection2DArray → Rerun 2D overlay 适配 +│ └── detection2d_overlay.py # detection_array_to_rerun / detections_overlay / +│ # selected_bbox_overlay / yoloe_overlay +├── blueprints/ # autoconnect 组装 + rerun config + requirements +│ ├── bbox_distance_follow.py # bbox_distance_follow blueprint +│ ├── yoloe_tracking_test.py # yoloe_tracking_test blueprint +│ └── go2_startup_self_check.py # unitree_go2_startup_self_check blueprint +└── tests/ # 纯 pytest 单元测试,无需机器人硬件 + └── test_bbox_selection_module.py # BBoxSelectionModule 单元测试 +``` + +依赖方向:`blueprints/` → `modules/` + `visualization/`;`tests/` → `modules/` only。 + +## yoloe-keyboard-teleop + +`yoloe-keyboard-teleop` 在 `yoloe-tracking-test` 的基础上加入了键盘遥控,让你在模拟器(或真机)上手动驾驶 Go2 的同时实时观察 YOLOE 检测效果。 + +### 组成 + +- `unitree_go2_basic` +- `YoloeTrackingModule.blueprint()` +- `KeyboardTeleop.blueprint(publish_only_when_active=True)` +- 专用 Rerun viewer overlay(与 `yoloe-tracking-test` 相同布局) + +数据流: + +```text +KeyboardTeleop.cmd_vel ──────────────────────────> GO2Connection.cmd_vel +unitree_go2_basic.color_image -> YoloeTrackingModule -> /color_image/yoloe_detections -> Rerun overlay +``` + +### 模型准备 + +与 `yoloe-tracking-test` 相同,需预先准备 YOLOE 模型: + +```bash +git lfs pull --include data/.lfs/models_yoloe.tar.gz +uv run python -c 'from dimos.utils.data import get_data; print(get_data("models_yoloe"))' +``` + +### 启动 + +```bash +# 模拟器(可实际控制移动) +dimos --simulation run yoloe-keyboard-teleop + +# Replay(检测效果只读,机器人不移动) +dimos --replay run yoloe-keyboard-teleop + +# 真机 +dimos --robot-ip 192.168.123.161 --rerun-open native run yoloe-keyboard-teleop +``` + +启动后会弹出一个 pygame 窗口,焦点在该窗口时键盘输入生效: + +| 按键 | 动作 | +|------|------| +| W / S | 前进 / 后退 | +| A / D | 左转 / 右转 | +| Shift | 速度加倍(2×) | +| Ctrl | 慢速模式(0.5×) | +| Space | 发布零 Twist(急停) | +| Esc / Q | 退出键盘窗口 | + ## yoloe-tracking-test `yoloe-tracking-test` 是一个只用于验证 YOLOE tracking 效果的 Go2 replay blueprint。它不接距离控制、不接 Agent/MCP/skill,只把 Go2 `color_image` 输入到 `YoloeTrackingModule`,并把 YOLOE 的 `Detection2DArray` 发布到 `/color_image/yoloe_detections`。 @@ -188,37 +261,37 @@ CLI 全局参数必须放在 `run` 前面,例如 `--robot-ip`、`--replay`、` 列出候选: ```bash -.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.bbox_distance_follow import BBoxSelectionModule; c=RPCClient.remote(BBoxSelectionModule); print(c.list_candidates()); c.stop_rpc_client()' +.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule; c=RPCClient.remote(BBoxSelectionModule); print(c.list_candidates()); c.stop_rpc_client()' ``` 选择第 0 个 bbox: ```bash -.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.bbox_distance_follow import BBoxSelectionModule; c=RPCClient.remote(BBoxSelectionModule); print(c.select_bbox(index=0)); c.stop_rpc_client()' +.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule; c=RPCClient.remote(BBoxSelectionModule); print(c.select_bbox(index=0)); c.stop_rpc_client()' ``` 按 id 选择 bbox: ```bash -.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.bbox_distance_follow import BBoxSelectionModule; c=RPCClient.remote(BBoxSelectionModule); print(c.select_bbox(id="0")); c.stop_rpc_client()' +.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule; c=RPCClient.remote(BBoxSelectionModule); print(c.select_bbox(id="0")); c.stop_rpc_client()' ``` 清除选择: ```bash -.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.bbox_distance_follow import BBoxSelectionModule; c=RPCClient.remote(BBoxSelectionModule); print(c.clear_selection()); c.stop_rpc_client()' +.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule; c=RPCClient.remote(BBoxSelectionModule); print(c.clear_selection()); c.stop_rpc_client()' ``` 启动距离行为: ```bash -.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.bbox_distance_follow import BBoxDistanceBehaviorModule; c=RPCClient.remote(BBoxDistanceBehaviorModule); print(c.start_bbox_distance_behavior()); c.stop_rpc_client()' +.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.modules.bbox_distance_behavior_module import BBoxDistanceBehaviorModule; c=RPCClient.remote(BBoxDistanceBehaviorModule); print(c.start_bbox_distance_behavior()); c.stop_rpc_client()' ``` 停止距离行为: ```bash -.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.bbox_distance_follow import BBoxDistanceBehaviorModule; c=RPCClient.remote(BBoxDistanceBehaviorModule); print(c.stop_bbox_distance_behavior()); c.stop_rpc_client()' +.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.modules.bbox_distance_behavior_module import BBoxDistanceBehaviorModule; c=RPCClient.remote(BBoxDistanceBehaviorModule); print(c.stop_bbox_distance_behavior()); c.stop_rpc_client()' ``` ### Viewer 点击选择 diff --git a/dimos/robot/custom/blueprints/__init__.py b/dimos/robot/custom/blueprints/__init__.py new file mode 100644 index 0000000000..bc1a2ce5cc --- /dev/null +++ b/dimos/robot/custom/blueprints/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/dimos/robot/custom/blueprints/bbox_distance_follow.py b/dimos/robot/custom/blueprints/bbox_distance_follow.py new file mode 100644 index 0000000000..9e7c435fc7 --- /dev/null +++ b/dimos/robot/custom/blueprints/bbox_distance_follow.py @@ -0,0 +1,123 @@ +from __future__ import annotations # 允许类型注解延迟解析,减少循环导入风险 + +from pathlib import Path +from typing import Any + +from dimos.core.coordination.blueprints import autoconnect # 导入蓝图组合函数 +from dimos.core.coordination.module_coordinator import ModuleCoordinator # 导入直接运行蓝图所需协调器 +from dimos.core.global_config import global_config # 导入全局配置,用于复用 viewer backend 选择 +from dimos.core.transport import LCMTransport # 导入 LCM transport,用于固定 topic 名称 +from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray # 导入 2D 检测数组消息类型 +from dimos.perception.detection.module2D import Detection2DModule # 导入多 bbox 检测模块 +from dimos.robot.custom.modules.bbox_distance_behavior_module import BBoxDistanceBehaviorModule # 导入距离行为模块 +from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule # 导入 bbox 选择模块 +from dimos.robot.custom.visualization.detection2d_overlay import ( + detections_overlay, # 黄色候选 bbox overlay + selected_bbox_overlay, # 绿色 selected bbox overlay +) +from dimos.robot.unitree.go2.blueprints.basic.unitree_go2_basic import ( + rerun_config as go2_rerun_config, # 导入 Go2 默认 rerun 配置,用于局部扩展 + unitree_go2_basic, # 导入 Go2 基础蓝图 +) +from dimos.robot.unitree.go2.connection import GO2Connection # 导入 Go2 连接类,复用静态 camera_info +from dimos.utils.data import get_data_dir # 导入数据目录解析函数,用于定位本地模型文件 +from dimos.visualization.vis_module import vis_module # 导入 viewer 模块工厂 + +_YOLO_MODEL_NAME = "yolo11n.pt" # Detection2DModule 默认需要的 YOLO 模型文件名 +_YOLO_MODEL_PATH = get_data_dir("models_yolo") / _YOLO_MODEL_NAME # 本地预下载模型路径 +_YOLO_MODEL_URL = "https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo11n.pt" # 官方权重下载地址 + + +def _require_yolo11n_model() -> str | None: # 定义 blueprint 启动前的本地 YOLO 权重检查 + if _YOLO_MODEL_PATH.exists(): # 如果本地权重已经预下载完成 + return None # 返回 None 表示 requirement 通过 + return _format_missing_yolo_model_error(_YOLO_MODEL_PATH) # 返回明确的预下载指令 + + +def _format_missing_yolo_model_error(model_path: Path) -> str: # 定义缺失模型时的错误消息构造函数 + return ( + f"Missing local YOLO model: {model_path}. " + "Real Go2 tests are usually offline, so pre-download it while online: " + f"mkdir -p {model_path.parent} && curl -L -o {model_path} {_YOLO_MODEL_URL}" + ) + + +def _bbox_distance_rerun_blueprint() -> Any: # 定义 bbox-distance-follow 专用 Rerun 布局 + import rerun as rr # 延迟导入 Rerun,避免非 viewer 路径承担额外导入成本 + import rerun.blueprint as rrb # 延迟导入 Rerun blueprint API + + return rrb.Blueprint( + rrb.Horizontal( + rrb.Spatial2DView( + origin="world/color_image", + contents=["world/color_image/**"], + name="Camera", + ), + rrb.Spatial3DView( + origin="world", + contents=[ + "world/**", + "-world/color_image/detections", # 在 3D 视图中隐藏 YOLO 2D bbox overlay + "-world/color_image/selected_bbox", # 在 3D 视图中隐藏 selected 2D bbox overlay + ], + name="3D", + background=rrb.Background(kind="SolidColor", color=[0, 0, 0]), + line_grid=rrb.LineGrid3D( + plane=rr.components.Plane3D.XY.with_distance(0.5), + ), + overrides={ + "world/lidar": rrb.EntityBehavior(visible=False), + }, + ), + column_shares=[1, 2], + ), + rrb.TimePanel(state="hidden"), + rrb.SelectionPanel(state="hidden"), + ) + + +_bbox_distance_rerun_config = { # bbox-distance-follow 专用 rerun 配置 + **go2_rerun_config, # 继承 Go2 默认 Camera/3D 布局和限频设置 + "blueprint": _bbox_distance_rerun_blueprint, # 使用专用布局,避免 3D view 渲染 2D selected bbox + "visual_override": { + **go2_rerun_config["visual_override"], # 保留 Go2 默认 camera_info、map 和 costmap 转换逻辑 + "world/color_image/detections": detections_overlay, # 对 YOLO 多 bbox topic 做黄色 Camera overlay + "world/color_image/selected_bbox": selected_bbox_overlay, # 对 selected bbox topic 做绿色 2D overlay + }, +} + +_bbox_distance_vis = vis_module( + viewer_backend=global_config.viewer, + rerun_config=_bbox_distance_rerun_config, +) + + +bbox_distance_follow = autoconnect( # 定义 CLI 可运行的 bbox-distance-follow 蓝图 + unitree_go2_basic, # Go2 基础连接和 viewer + _bbox_distance_vis, # 替换 Go2 默认 viewer 配置,增加 bbox overlay + Detection2DModule.blueprint( + camera_info=GO2Connection.camera_info_static, # 复用 Go2 静态相机内参 + publish_detection_images=False, # 关闭 cropped detected_image,避免 3D view 无 Pinhole 警告 + ), + BBoxSelectionModule.blueprint(), # 从多 bbox 中选择单个 bbox + BBoxDistanceBehaviorModule.blueprint(), # 根据 selected bbox、lidar 和 camera_info 控制距离 +).global_config( + n_workers=6, # 给 Go2、viewer、detector、selection 和 behavior 留足 worker + robot_model="unitree_go2", +).transports( + { + ("detections", Detection2DArray): LCMTransport("/color_image/detections", Detection2DArray), # 固定 YOLO bbox topic + ("selected_bbox", Detection2DArray): LCMTransport("/color_image/selected_bbox", Detection2DArray), # 固定 selected bbox topic + } +).requirements( + _require_yolo11n_model, # 检查 YOLO 权重是否已经预下载,避免真机断网时隐式下载失败 +) + + +__all__ = [ + "bbox_distance_follow", +] + + +if __name__ == "__main__": + ModuleCoordinator.build(bbox_distance_follow).loop() diff --git a/dimos/robot/custom/blueprints/go2_startup_self_check.py b/dimos/robot/custom/blueprints/go2_startup_self_check.py new file mode 100644 index 0000000000..cf50d8f49d --- /dev/null +++ b/dimos/robot/custom/blueprints/go2_startup_self_check.py @@ -0,0 +1,20 @@ +from __future__ import annotations # 允许类型注解延迟解析,减少循环导入风险 + +from dimos.core.coordination.blueprints import autoconnect # 导入蓝图组合函数 +from dimos.robot.custom.modules.go2_startup_self_check_module import Go2StartupSelfCheck # 导入自检模块 +from dimos.robot.unitree.go2.blueprints.smart.unitree_go2 import unitree_go2 # 导入现有 Go2 完整蓝图 + +# 复用现有 Go2 完整蓝图,再额外加上一次性启动自检发布者。 +unitree_go2_startup_self_check = autoconnect( # 定义 CLI 可运行的组合蓝图 + unitree_go2, # 第一部分:现有 Go2 连接、viewer、导航和 MovementManager + Go2StartupSelfCheck.blueprint(), # 第二部分:新增的启动自检模块 +).remappings( # 把自检速度命令接入现有 MovementManager 的手动控制入口 + [ + (Go2StartupSelfCheck, "cmd_vel", "tele_cmd_vel"), # 自检发布到 tele_cmd_vel,由 MovementManager 转成 cmd_vel + ] +) + + +__all__ = [ + "unitree_go2_startup_self_check", +] diff --git a/dimos/robot/custom/blueprints/yoloe_tracking_test.py b/dimos/robot/custom/blueprints/yoloe_tracking_test.py new file mode 100644 index 0000000000..1a9a8ff568 --- /dev/null +++ b/dimos/robot/custom/blueprints/yoloe_tracking_test.py @@ -0,0 +1,103 @@ +from __future__ import annotations # 允许类型注解延迟解析,减少循环导入风险 + +from typing import Any + +from dimos.core.coordination.blueprints import autoconnect # 导入蓝图组合函数 +from dimos.core.coordination.module_coordinator import ModuleCoordinator # 导入直接运行蓝图所需协调器 +from dimos.core.global_config import global_config # 导入全局配置,用于复用 viewer backend 选择 +from dimos.core.transport import LCMTransport # 导入 LCM transport,用于固定 topic 名称 +from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray # 导入 2D 检测数组消息类型 +from dimos.robot.custom.modules.yoloe_tracking_module import ( + YoloeTrackingModule, # 导入 YOLOE tracking 模块 + _require_yoloe_lrpc_model, # 导入模型文件预检查函数 +) +from dimos.robot.custom.visualization.detection2d_overlay import yoloe_overlay # 导入青色 YOLOE overlay +from dimos.robot.unitree.go2.blueprints.basic.unitree_go2_basic import ( + rerun_config as go2_rerun_config, # 导入 Go2 默认 rerun 配置,用于局部扩展 + unitree_go2_basic, # 导入 Go2 基础蓝图 +) +from dimos.visualization.vis_module import vis_module # 导入 viewer 模块工厂 + +_YOLOE_DETECTIONS_TOPIC = "/color_image/yoloe_detections" # YOLOE detections LCM topic +_YOLOE_DETECTIONS_ENTITY = "world/color_image/yoloe_detections" # Rerun entity path + + +def _yoloe_tracking_rerun_blueprint() -> Any: # 定义 yoloe-tracking-test 专用 Rerun 布局 + import rerun as rr # 延迟导入 Rerun,避免非 viewer 路径承担额外导入成本 + import rerun.blueprint as rrb # 延迟导入 Rerun blueprint API + + return rrb.Blueprint( + rrb.Horizontal( + rrb.Spatial2DView( + origin="world/color_image", + contents=["world/color_image/**"], + name="Camera", + ), + rrb.Spatial3DView( + origin="world", + contents=[ + "world/**", + f"-{_YOLOE_DETECTIONS_ENTITY}", # 在 3D 视图中隐藏 YOLOE 2D bbox overlay + ], + name="3D", + background=rrb.Background(kind="SolidColor", color=[0, 0, 0]), + line_grid=rrb.LineGrid3D( + plane=rr.components.Plane3D.XY.with_distance(0.5), + ), + overrides={ + "world/lidar": rrb.EntityBehavior(visible=False), + }, + ), + column_shares=[1, 2], + ), + rrb.TimePanel(state="hidden"), + rrb.SelectionPanel(state="hidden"), + ) + + +_yoloe_tracking_rerun_config = { # yoloe-tracking-test 专用 rerun 配置 + **go2_rerun_config, # 继承 Go2 默认 Camera/3D 布局和限频设置 + "blueprint": _yoloe_tracking_rerun_blueprint, + "visual_override": { + **go2_rerun_config["visual_override"], + _YOLOE_DETECTIONS_ENTITY: yoloe_overlay, # 对 YOLOE detections 做青色 Camera overlay + }, +} + +_yoloe_tracking_vis = vis_module( + viewer_backend=global_config.viewer, + rerun_config=_yoloe_tracking_rerun_config, +) + + +yoloe_tracking_test = ( + autoconnect( + unitree_go2_basic, + _yoloe_tracking_vis, + YoloeTrackingModule.blueprint(), + ) + .global_config( + n_workers=6, + robot_model="unitree_go2", + ) + .transports( + { + ("detections", Detection2DArray): LCMTransport( + _YOLOE_DETECTIONS_TOPIC, + Detection2DArray, + ), + } + ) + .requirements( + _require_yoloe_lrpc_model, # 检查 YOLOE 模型文件是否已经预下载 + ) +) + + +__all__ = [ + "yoloe_tracking_test", +] + + +if __name__ == "__main__": + ModuleCoordinator.build(yoloe_tracking_test).loop() diff --git a/dimos/robot/custom/modules/__init__.py b/dimos/robot/custom/modules/__init__.py new file mode 100644 index 0000000000..bc1a2ce5cc --- /dev/null +++ b/dimos/robot/custom/modules/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/dimos/robot/custom/bbox_distance_follow.py b/dimos/robot/custom/modules/bbox_distance_behavior_module.py similarity index 62% rename from dimos/robot/custom/bbox_distance_follow.py rename to dimos/robot/custom/modules/bbox_distance_behavior_module.py index c06bdda1b3..d0b66f988e 100644 --- a/dimos/robot/custom/bbox_distance_follow.py +++ b/dimos/robot/custom/modules/bbox_distance_behavior_module.py @@ -2,7 +2,6 @@ import json # 导入 JSON 工具,用于发布结构化行为状态 import math # 导入数学工具,用于检查有限数值 -from pathlib import Path # 导入路径类型,用于检查本地 YOLO 权重文件 import threading # 导入线程工具,用后台循环发布速度命令 import time # 导入时间工具,用于状态机计时和消息时间戳 from typing import Any, Literal # 导入通用类型和状态字面量类型 @@ -13,37 +12,16 @@ from reactivex.disposable import Disposable # 导入 Disposable,用于注册输入流订阅 from dimos.constants import DEFAULT_THREAD_JOIN_TIMEOUT # 导入线程停止等待的默认超时时间 -from dimos.core.coordination.blueprints import autoconnect # 导入蓝图组合函数 -from dimos.core.coordination.module_coordinator import ( # 导入直接运行蓝图所需协调器 - ModuleCoordinator, # 导入直接运行蓝图所需协调器 -) # 结束多行 import from dimos.core.core import rpc # 导入 rpc 装饰器,让方法可通过 DimOS RPC 调用 -from dimos.core.global_config import global_config # 导入全局配置,用于复用 viewer backend 选择 from dimos.core.module import Module, ModuleConfig # 导入模块基类和模块配置基类 from dimos.core.stream import In, Out # 导入输入输出流类型 -from dimos.core.transport import LCMTransport # 导入 LCM transport,用于固定 selected_bbox topic from dimos.msgs.geometry_msgs.Twist import Twist # 导入速度命令消息类型 from dimos.msgs.geometry_msgs.Vector3 import Vector3 # 导入三维向量类型,用于构造 Twist from dimos.msgs.sensor_msgs.CameraInfo import CameraInfo # 导入相机内参消息类型 from dimos.msgs.sensor_msgs.PointCloud2 import PointCloud2 # 导入 lidar 点云消息类型 from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray # 导入 2D 检测数组消息类型 -from dimos.perception.detection.module2D import Detection2DModule # 导入现有多 bbox 检测模块 -from dimos.robot.custom.bbox_selection import ( # 导入 bbox 选择模块,保持选择逻辑可独立测试 - BBoxSelectionConfig, # 导入 bbox 选择模块配置 - BBoxSelectionModule, # 导入 bbox 选择模块 -) # 结束多行 import -from dimos.robot.unitree.go2.blueprints.basic.unitree_go2_basic import ( # 导入 Go2 基础蓝图 - rerun_config as go2_rerun_config, # 导入 Go2 默认 rerun 配置,用于局部扩展 selected bbox overlay - unitree_go2_basic, # 导入 Go2 基础蓝图 -) # 结束多行 import -from dimos.robot.unitree.go2.connection import ( # 导入 Go2 连接类,用于复用静态 camera_info - GO2Connection, # 导入 Go2 连接类,用于复用静态 camera_info -) # 结束多行 import -from dimos.utils.data import get_data_dir # 导入数据目录解析函数,用于定位本地模型文件 +from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule # 导入 bbox 选择模块,复用 _bbox_corners 工具 from dimos.utils.logging_config import setup_logger # 导入日志初始化函数 -from dimos.visualization.vis_module import ( # 导入 viewer 模块工厂,用于替换 Go2 默认 rerun 配置 - vis_module, # 导入 viewer 模块工厂,用于替换 Go2 默认 rerun 配置 -) # 结束多行 import logger = setup_logger() # 创建当前文件使用的日志对象 @@ -52,113 +30,6 @@ _LINEAR_GAIN = 0.8 # 定义距离误差到线速度的简单比例增益 _ANGULAR_GAIN = 1.0 # 定义横向像素误差到角速度的简单比例增益 _DISTANCE_TOLERANCE_M = 0.05 # 定义靠近完成时使用的距离容差 -_YOLO_MODEL_NAME = "yolo11n.pt" # 定义 Detection2DModule 默认需要的 YOLO 模型文件名 -_YOLO_MODEL_PATH = get_data_dir("models_yolo") / _YOLO_MODEL_NAME # 定义本地预下载模型路径 -_YOLO_MODEL_URL = "https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo11n.pt" # 定义官方权重下载地址 - - -def _detection_array_to_rerun( # 定义 Detection2DArray 到 Rerun 2D overlay 的通用转换 - detections: Detection2DArray, # 输入需要显示的 Detection2DArray 消息 - color: tuple[int, int, int, int], # 输入每个 bbox 使用的 RGBA 颜色 - draw_order: float, # 输入 Rerun 绘制层级,数值越大越靠上 -) -> Any: # 返回 Rerun 2D overlay - import rerun as rr # 延迟导入 Rerun,避免非 viewer 路径承担额外导入成本 - - boxes: list[list[float]] = [] # 保存 Rerun 需要的 xywh bbox 列表 - labels: list[str] = [] # 保存每个 bbox 的显示标签 - colors: list[list[int]] = [] # 保存每个 bbox 的颜色 - for index, detection in enumerate(detections.detections): # 遍历 Detection2DArray 消息里的全部 detection - bbox = detection.bbox # 读取 Detection2D 的中心点 bbox - center = bbox.center.position # 读取 bbox 中心点 - x = float(center.x - bbox.size_x / 2.0) # 计算左上角 x - y = float(center.y - bbox.size_y / 2.0) # 计算左上角 y - width = float(bbox.size_x) # 读取 bbox 宽度 - height = float(bbox.size_y) # 读取 bbox 高度 - boxes.append([x, y, width, height]) # 添加 Rerun 使用的 xywh bbox - labels.append(str(detection.id or index)) # 优先显示 detection.id,没有 id 时显示当前序号 - colors.append(list(color)) # 添加当前 overlay 指定的 RGBA 颜色 - - return rr.Boxes2D( # 返回 Rerun 2D 框;空 boxes 会清除 viewer 里的旧框 - array=boxes, # 传入所有 xywh bbox,允许为空列表 - array_format=rr.Box2DFormat.XYWH, # 声明 bbox 数组格式为 xywh - colors=colors, # 传入每个框的颜色,允许为空列表 - labels=labels, # 传入每个框的标签,允许为空列表 - show_labels=True, # 在 viewer 中显示 bbox 标签 - draw_order=draw_order, # 使用调用方指定的绘制层级 - ) # 结束 Rerun Boxes2D 构造 - - -def _detections_to_rerun(detections: Detection2DArray) -> Any: # 把 YOLO 多 bbox detections 转成 Camera 视图 overlay - return _detection_array_to_rerun(detections, (255, 190, 0, 180), 90.0) # 用黄色半透明框显示所有候选 bbox - - -def _selected_bbox_to_rerun(detections: Detection2DArray) -> Any: # 只把 selected bbox topic 转换成 Rerun 2D overlay - return _detection_array_to_rerun(detections, (0, 255, 0, 255), 100.0) # 用绿色不透明框高亮命令行 RPC 选中的 bbox - - -def _bbox_distance_rerun_blueprint() -> Any: # 定义 bbox-distance-follow 专用 Rerun 布局 - import rerun as rr # 延迟导入 Rerun,避免非 viewer 路径承担额外导入成本 - import rerun.blueprint as rrb # 延迟导入 Rerun blueprint API,用于构造 viewer 布局 - - return rrb.Blueprint( # 返回和 Go2 默认布局一致但修正 selected bbox 3D 可见性的 blueprint - rrb.Horizontal( # 使用左右分栏布局 - rrb.Spatial2DView( # Camera 视图显示 color image、YOLO 候选框和 selected bbox overlay - origin="world/color_image", # 以实时相机图像实体作为 2D view 根节点 - contents=["world/color_image/**"], # 显式纳入相机图像实体及其所有 overlay 子实体 - name="Camera", # 保持 Go2 默认 Camera 视图名称 - ), # 结束 Camera 视图配置 - rrb.Spatial3DView( # 3D 视图显示世界、点云和机器人相关实体 - origin="world", # 3D 视图以 world 为根 - contents=[ # 显式排除 2D bbox overlay,避免 3D view 报 Pinhole ancestor 警告 - "world/**", # 3D 视图默认显示 world 下的大部分实体 - "-world/color_image/detections", # 在 3D 视图中隐藏 YOLO 2D bbox overlay - "-world/color_image/selected_bbox", # 在 3D 视图中隐藏 selected 2D bbox overlay - ], # 结束 3D 视图 contents 配置 - name="3D", # 3D 视图名称保持和 Go2 默认一致 - background=rrb.Background(kind="SolidColor", color=[0, 0, 0]), # 使用黑色背景 - line_grid=rrb.LineGrid3D( # 配置地面网格 - plane=rr.components.Plane3D.XY.with_distance(0.5), # 在 XY 平面显示 0.5 米间距网格 - ), # 结束地面网格配置 - overrides={ # 配置 3D 视图中的实体可见性 - "world/lidar": rrb.EntityBehavior(visible=False), # 沿用 Go2 默认设置,隐藏原始 lidar entity - }, # 结束 3D 视图 overrides - ), # 结束 3D 视图 - column_shares=[1, 2], # 保持 Go2 默认的 Camera/3D 宽度比例 - ), # 结束左右分栏布局 - rrb.TimePanel(state="hidden"), # 隐藏时间面板,保持 Go2 默认布局 - rrb.SelectionPanel(state="hidden"), # 隐藏选择面板,保持 Go2 默认布局 - ) # 结束 Rerun blueprint 构造 - - -_bbox_distance_rerun_config = { # 定义只属于 bbox-distance-follow 的 rerun 配置 - **go2_rerun_config, # 继承 Go2 默认 Camera/3D 布局、静态实体和限频设置 - "blueprint": _bbox_distance_rerun_blueprint, # 使用专用布局,避免 3D view 渲染 2D selected bbox - "visual_override": { # 覆盖并扩展 Go2 默认 visual_override - **go2_rerun_config["visual_override"], # 保留 Go2 默认 camera_info、map 和 costmap 转换逻辑 - "world/color_image/detections": _detections_to_rerun, # 对 YOLO 多 bbox topic 做 Camera overlay - "world/color_image/selected_bbox": _selected_bbox_to_rerun, # 只对 selected bbox topic 做 2D overlay - }, # 结束 visual_override 配置 -} # 结束 rerun 配置 - -_bbox_distance_vis = vis_module( # 定义 bbox-distance-follow 专用 viewer 蓝图 - viewer_backend=global_config.viewer, # 复用用户当前选择的 viewer backend - rerun_config=_bbox_distance_rerun_config, # 使用带 selected bbox overlay 的 rerun 配置 -) # 结束 viewer 蓝图创建 - - -def _require_yolo11n_model() -> str | None: # 定义 blueprint 启动前的本地 YOLO 权重检查 - if _YOLO_MODEL_PATH.exists(): # 如果本地权重已经预下载完成 - return None # 返回 None 表示 requirement 通过 - - return _format_missing_yolo_model_error(_YOLO_MODEL_PATH) # 返回明确的预下载指令,避免运行时隐式联网下载 - - -def _format_missing_yolo_model_error(model_path: Path) -> str: # 定义缺失模型时的错误消息构造函数 - return ( # 返回一条能直接复制执行的修复建议 - f"Missing local YOLO model: {model_path}. " # 说明缺失的本地模型路径 - "Real Go2 tests are usually offline, so pre-download it while online: " # 说明真机断网场景需要提前准备 - f"mkdir -p {model_path.parent} && curl -L -o {model_path} {_YOLO_MODEL_URL}" # 给出预下载命令 - ) # 结束错误消息构造 class BBoxDistanceBehaviorConfig(ModuleConfig): # 定义 bbox 距离行为模块配置 @@ -399,36 +270,7 @@ def _publish_status(self, state: BehaviorState, **fields: float) -> None: # 发 self.behavior_status.publish(String(json.dumps(payload))) # 发布 JSON 字符串状态 -bbox_distance_follow = autoconnect( # 定义 CLI 可运行的 bbox-distance-follow 蓝图 - unitree_go2_basic, # 第一部分:Go2 基础连接和 viewer - _bbox_distance_vis, # 第二部分:替换 Go2 默认 viewer 配置,增加 bbox overlay - Detection2DModule.blueprint( # 第三部分:现有多 bbox 检测模块 - camera_info=GO2Connection.camera_info_static, # 复用 Go2 静态相机内参 - publish_detection_images=False, # 关闭 cropped detected_image 输出,避免 3D view 无 Pinhole 警告 - ), # 结束 Detection2DModule 配置 - BBoxSelectionModule.blueprint(), # 第四部分:从多 bbox 中选择单个 bbox - BBoxDistanceBehaviorModule.blueprint(), # 第五部分:根据 selected bbox、lidar 和 camera_info 控制距离 -).global_config( # 设置该 blueprint 的全局配置 - n_workers=6, # 给 Go2、viewer、detector、selection 和 behavior 留足 worker - robot_model="unitree_go2", # 标记机器人模型为 Go2 -).transports( # 覆盖 selected_bbox 的 transport,让 viewer 使用稳定 topic - { # 定义 transport 覆盖表 - ("detections", Detection2DArray): LCMTransport("/color_image/detections", Detection2DArray), # 固定 YOLO bbox topic 到相机实体下面 - ("selected_bbox", Detection2DArray): LCMTransport("/color_image/selected_bbox", Detection2DArray), # 固定 selected bbox topic - } # 结束 transport 覆盖表 -).requirements( # 添加 blueprint 启动前检查,避免真机断网时才由 Ultralytics 隐式下载失败 - _require_yolo11n_model, # 检查 Detection2DModule 默认 YOLO 权重是否已经预下载 -) # 结束蓝图定义 - - __all__ = [ # 声明这个文件希望对外暴露的名字 "BBoxDistanceBehaviorConfig", # 暴露行为模块配置 "BBoxDistanceBehaviorModule", # 暴露行为模块 - "BBoxSelectionConfig", # 暴露选择模块配置 - "BBoxSelectionModule", # 暴露选择模块 - "bbox_distance_follow", # 暴露顶层 blueprint 变量 ] # 结束 __all__ 列表 - - -if __name__ == "__main__": # 支持直接 python 执行该 blueprint 文件 - ModuleCoordinator.build(bbox_distance_follow).loop() # 构建并运行 bbox-distance-follow 蓝图 diff --git a/dimos/robot/custom/bbox_selection.py b/dimos/robot/custom/modules/bbox_selection_module.py similarity index 100% rename from dimos/robot/custom/bbox_selection.py rename to dimos/robot/custom/modules/bbox_selection_module.py diff --git a/dimos/robot/custom/go2_startup_self_check.py b/dimos/robot/custom/modules/go2_startup_self_check_module.py similarity index 86% rename from dimos/robot/custom/go2_startup_self_check.py rename to dimos/robot/custom/modules/go2_startup_self_check_module.py index dcee8ff213..45c1814ab8 100644 --- a/dimos/robot/custom/go2_startup_self_check.py +++ b/dimos/robot/custom/modules/go2_startup_self_check_module.py @@ -1,17 +1,3 @@ -# Copyright 2025-2026 Dimensional Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - from __future__ import annotations # 允许类型注解延迟解析,减少循环导入风险 import threading # 导入线程工具,用后台线程执行自检动作 @@ -19,15 +5,11 @@ from typing import Any # 导入 Any,表示这里可以接收任意类型参数 from dimos.constants import DEFAULT_THREAD_JOIN_TIMEOUT # 导入线程停止等待的默认超时时间 -from dimos.core.coordination.blueprints import autoconnect # 导入蓝图组合函数 from dimos.core.core import rpc # 导入 rpc 装饰器,让生命周期方法可被框架调用 from dimos.core.module import Module, ModuleConfig # 导入模块基类和模块配置基类 from dimos.core.stream import Out # 导入输出流类型,用来发布消息 from dimos.msgs.geometry_msgs.Twist import Twist # 导入速度命令消息类型 from dimos.msgs.geometry_msgs.Vector3 import Vector3 # 导入三维向量类型 -from dimos.robot.unitree.go2.blueprints.smart.unitree_go2 import ( # 导入现有 Go2 完整蓝图 - unitree_go2, # 导入现有 Go2 完整蓝图 -) # 结束多行 import from dimos.utils.logging_config import setup_logger # 导入日志初始化函数 logger = setup_logger() # 创建当前文件使用的日志对象 @@ -147,19 +129,7 @@ def _publish_for_duration(self, speed_mps: float, duration_sec: float) -> None: time.sleep(period_sec) # 睡眠一个周期,控制发布频率 -# 复用现有 Go2 完整蓝图,再额外加上一次性启动自检发布者。 -unitree_go2_startup_self_check = autoconnect( # 定义 CLI 可运行的组合蓝图 - unitree_go2, # 第一部分:现有 Go2 连接、viewer、导航和 MovementManager - Go2StartupSelfCheck.blueprint(), # 第二部分:新增的启动自检模块 -).remappings( # 把自检速度命令接入现有 MovementManager 的手动控制入口 - [ - (Go2StartupSelfCheck, "cmd_vel", "tele_cmd_vel"), # 自检发布到 tele_cmd_vel,由 MovementManager 转成 cmd_vel - ] # remapping 列表结束 -) # 结束蓝图组合 - - __all__ = [ # 声明这个文件希望对外暴露的名字 "Go2StartupSelfCheck", # 暴露自检模块类 "Go2StartupSelfCheckConfig", # 暴露自检配置类 - "unitree_go2_startup_self_check", # 暴露自检蓝图变量 ] # 结束 __all__ 列表 diff --git a/dimos/robot/custom/modules/yoloe_tracking_module.py b/dimos/robot/custom/modules/yoloe_tracking_module.py new file mode 100644 index 0000000000..24de93afdf --- /dev/null +++ b/dimos/robot/custom/modules/yoloe_tracking_module.py @@ -0,0 +1,107 @@ +from __future__ import annotations # 允许类型注解延迟解析,减少循环导入风险 + +from pathlib import Path +from typing import Any + +from dimos.core.core import rpc # 导入 rpc 装饰器,让方法可通过 DimOS RPC 调用 +from dimos.core.module import Module, ModuleConfig # 导入模块基类和模块配置基类 +from dimos.core.stream import In, Out # 导入输入输出流类型 +from dimos.msgs.sensor_msgs.Image import Image, sharpness_barrier +from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray +from dimos.perception.detection.detectors.yoloe import Yoloe2DDetector, YoloePromptMode +from dimos.utils.data import get_data_dir +from dimos.utils.logging_config import setup_logger +from dimos.utils.reactive import backpressure + +logger = setup_logger() + +_YOLOE_MODEL_DIR_NAME = "models_yoloe" +_YOLOE_LRPC_MODEL_NAME = "yoloe-11s-seg-pf.pt" + + +def _local_yoloe_model_path( + model_path: str = _YOLOE_MODEL_DIR_NAME, + model_name: str | None = None, +) -> Path: + return get_data_dir(model_path) / (model_name or _YOLOE_LRPC_MODEL_NAME) + + +def _format_missing_yoloe_model_error(model_path: Path) -> str: + return ( + f"Missing local YOLOE model: {model_path}. " + "This blueprint runs offline and will not pull model data at startup. " + "Prepare the model in an online environment first: " + "git lfs pull --include data/.lfs/models_yoloe.tar.gz && " + "uv run python -c 'from dimos.utils.data import get_data; print(get_data(\"models_yoloe\"))' && " + f"ls -lh {model_path}" + ) + + +def _require_yoloe_lrpc_model() -> str | None: + """Blueprint requirement check: verify the YOLOE model file is pre-downloaded.""" + model_path = _local_yoloe_model_path() + if model_path.exists(): + return None + return _format_missing_yoloe_model_error(model_path) + + +class YoloeTrackingConfig(ModuleConfig): + max_freq: float = 10.0 + model_path: str = _YOLOE_MODEL_DIR_NAME + model_name: str | None = None + device: str | None = None + max_area_ratio: float | None = 0.3 + + +class YoloeTrackingModule(Module): + """Run offline YOLOE tracking on color_image and publish Detection2DArray.""" + + config: YoloeTrackingConfig + + color_image: In[Image] + detections: Out[Detection2DArray] + + def __init__(self, **kwargs: Any) -> None: + super().__init__(**kwargs) + self._detector: Yoloe2DDetector | None = None + + @rpc + def start(self) -> None: + super().start() + + model_path = _local_yoloe_model_path(self.config.model_path, self.config.model_name) + if not model_path.exists(): + raise RuntimeError(_format_missing_yoloe_model_error(model_path)) + + self._detector = Yoloe2DDetector( + model_path=self.config.model_path, + model_name=self.config.model_name or _YOLOE_LRPC_MODEL_NAME, + device=self.config.device, + prompt_mode=YoloePromptMode.LRPC, + max_area_ratio=self.config.max_area_ratio, + ) + + stream = backpressure( + self.color_image.pure_observable().pipe(sharpness_barrier(self.config.max_freq)) + ) + self.register_disposable(stream.subscribe(self._process_image)) + + @rpc + def stop(self) -> None: + if self._detector is not None: + self._detector.stop() + self._detector = None + super().stop() + + def _process_image(self, image: Image) -> None: + if self._detector is None: + return + detections = self._detector.process_image(image) + self.detections.publish(detections.to_ros_detection2d_array()) + + +__all__ = [ + "YoloeTrackingConfig", + "YoloeTrackingModule", + "_require_yoloe_lrpc_model", +] diff --git a/dimos/robot/custom/tests/__init__.py b/dimos/robot/custom/tests/__init__.py new file mode 100644 index 0000000000..bc1a2ce5cc --- /dev/null +++ b/dimos/robot/custom/tests/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/dimos/robot/custom/test_bbox_distance_follow.py b/dimos/robot/custom/tests/test_bbox_selection_module.py similarity index 98% rename from dimos/robot/custom/test_bbox_distance_follow.py rename to dimos/robot/custom/tests/test_bbox_selection_module.py index 33fa3ad1b5..884d91bd19 100644 --- a/dimos/robot/custom/test_bbox_distance_follow.py +++ b/dimos/robot/custom/tests/test_bbox_selection_module.py @@ -31,7 +31,7 @@ from dimos.msgs.std_msgs.Header import Header from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray from dimos.protocol.rpc.spec import RPCSpec -from dimos.robot.custom.bbox_selection import BBoxSelectionModule +from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule class _NoopRPC(RPCSpec): diff --git a/dimos/robot/custom/visualization/__init__.py b/dimos/robot/custom/visualization/__init__.py new file mode 100644 index 0000000000..bc1a2ce5cc --- /dev/null +++ b/dimos/robot/custom/visualization/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/dimos/robot/custom/visualization/detection2d_overlay.py b/dimos/robot/custom/visualization/detection2d_overlay.py new file mode 100644 index 0000000000..89e79e828b --- /dev/null +++ b/dimos/robot/custom/visualization/detection2d_overlay.py @@ -0,0 +1,81 @@ +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import Any + +from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray + + +def detection_array_to_rerun( + detections: Detection2DArray, + color: tuple[int, int, int, int], + draw_order: float, +) -> Any: + """Convert a Detection2DArray to a Rerun Boxes2D 2D overlay. + + Args: + detections: The Detection2DArray message to visualize. + color: RGBA color for all boxes. + draw_order: Rerun draw order; higher values render on top. + """ + import rerun as rr # 延迟导入 Rerun,避免非 viewer 路径承担额外导入成本 + + boxes: list[list[float]] = [] + labels: list[str] = [] + colors: list[list[int]] = [] + + for index, detection in enumerate(detections.detections): + bbox = detection.bbox + center = bbox.center.position + x = float(center.x - bbox.size_x / 2.0) + y = float(center.y - bbox.size_y / 2.0) + width = float(bbox.size_x) + height = float(bbox.size_y) + boxes.append([x, y, width, height]) + labels.append(str(detection.id or index)) # 优先显示 detection.id,没有 id 时显示当前序号 + colors.append(list(color)) + + return rr.Boxes2D( # 空 boxes 会清除 viewer 里的旧框 + array=boxes, + array_format=rr.Box2DFormat.XYWH, + colors=colors, + labels=labels, + show_labels=True, + draw_order=draw_order, + ) + + +def detections_overlay(detections: Detection2DArray) -> Any: + """Yellow semi-transparent overlay for YOLO candidate bboxes (draw_order=90).""" + return detection_array_to_rerun(detections, (255, 190, 0, 180), 90.0) + + +def selected_bbox_overlay(detections: Detection2DArray) -> Any: + """Solid green overlay for the RPC-selected bbox (draw_order=100).""" + return detection_array_to_rerun(detections, (0, 255, 0, 255), 100.0) + + +def yoloe_overlay(detections: Detection2DArray) -> Any: + """Cyan overlay for YOLOE tracking detections (draw_order=95).""" + return detection_array_to_rerun(detections, (0, 220, 255, 220), 95.0) + + +__all__ = [ + "detection_array_to_rerun", + "detections_overlay", + "selected_bbox_overlay", + "yoloe_overlay", +] diff --git a/dimos/robot/custom/yoloe_tracking.py b/dimos/robot/custom/yoloe_tracking.py deleted file mode 100644 index b3856e0cef..0000000000 --- a/dimos/robot/custom/yoloe_tracking.py +++ /dev/null @@ -1,237 +0,0 @@ -# Copyright 2025-2026 Dimensional Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -from pathlib import Path -from typing import Any - -from dimos.core.coordination.blueprints import autoconnect -from dimos.core.coordination.module_coordinator import ModuleCoordinator -from dimos.core.core import rpc -from dimos.core.global_config import global_config -from dimos.core.module import Module, ModuleConfig -from dimos.core.stream import In, Out -from dimos.core.transport import LCMTransport -from dimos.msgs.sensor_msgs.Image import Image, sharpness_barrier -from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray -from dimos.perception.detection.detectors.yoloe import Yoloe2DDetector, YoloePromptMode -from dimos.robot.unitree.go2.blueprints.basic.unitree_go2_basic import ( - rerun_config as go2_rerun_config, - unitree_go2_basic, -) -from dimos.utils.data import get_data_dir -from dimos.utils.logging_config import setup_logger -from dimos.utils.reactive import backpressure -from dimos.visualization.vis_module import vis_module - -logger = setup_logger() - -_YOLOE_MODEL_DIR_NAME = "models_yoloe" -_YOLOE_LRPC_MODEL_NAME = "yoloe-11s-seg-pf.pt" -_YOLOE_DETECTIONS_TOPIC = "/color_image/yoloe_detections" -_YOLOE_DETECTIONS_ENTITY = "world/color_image/yoloe_detections" - - -def _local_yoloe_model_path( - model_path: str = _YOLOE_MODEL_DIR_NAME, - model_name: str | None = None, -) -> Path: - return get_data_dir(model_path) / (model_name or _YOLOE_LRPC_MODEL_NAME) - - -def _format_missing_yoloe_model_error(model_path: Path) -> str: - return ( - f"Missing local YOLOE model: {model_path}. " - "This blueprint runs offline and will not pull model data at startup. " - "Prepare the model in an online environment first: " - "git lfs pull --include data/.lfs/models_yoloe.tar.gz && " - "uv run python -c 'from dimos.utils.data import get_data; print(get_data(\"models_yoloe\"))' && " - f"ls -lh {model_path}" - ) - - -def _require_yoloe_lrpc_model() -> str | None: - model_path = _local_yoloe_model_path() - if model_path.exists(): - return None - return _format_missing_yoloe_model_error(model_path) - - -class YoloeTrackingConfig(ModuleConfig): - max_freq: float = 10.0 - model_path: str = _YOLOE_MODEL_DIR_NAME - model_name: str | None = None - device: str | None = None - max_area_ratio: float | None = 0.3 - - -class YoloeTrackingModule(Module): - """Run offline YOLOE tracking on color_image and publish Detection2DArray.""" - - config: YoloeTrackingConfig - - color_image: In[Image] - detections: Out[Detection2DArray] - - def __init__(self, **kwargs: Any) -> None: - super().__init__(**kwargs) - self._detector: Yoloe2DDetector | None = None - - @rpc - def start(self) -> None: - super().start() - - model_path = _local_yoloe_model_path(self.config.model_path, self.config.model_name) - if not model_path.exists(): - raise RuntimeError(_format_missing_yoloe_model_error(model_path)) - - self._detector = Yoloe2DDetector( - model_path=self.config.model_path, - model_name=self.config.model_name or _YOLOE_LRPC_MODEL_NAME, - device=self.config.device, - prompt_mode=YoloePromptMode.LRPC, - max_area_ratio=self.config.max_area_ratio, - ) - - stream = backpressure( - self.color_image.pure_observable().pipe(sharpness_barrier(self.config.max_freq)) - ) - self.register_disposable(stream.subscribe(self._process_image)) - - @rpc - def stop(self) -> None: - if self._detector is not None: - self._detector.stop() - self._detector = None - super().stop() - - def _process_image(self, image: Image) -> None: - if self._detector is None: - return - detections = self._detector.process_image(image) - self.detections.publish(detections.to_ros_detection2d_array()) - - -def _yoloe_detections_to_rerun(detections: Detection2DArray) -> Any: - import rerun as rr - - boxes: list[list[float]] = [] - labels: list[str] = [] - colors: list[list[int]] = [] - - for index, detection in enumerate(detections.detections): - bbox = detection.bbox - center = bbox.center.position - x = float(center.x - bbox.size_x / 2.0) - y = float(center.y - bbox.size_y / 2.0) - width = float(bbox.size_x) - height = float(bbox.size_y) - detection_id = str(detection.id) if detection.id else str(index) - - boxes.append([x, y, width, height]) - labels.append(detection_id) - colors.append([0, 220, 255, 220]) - - return rr.Boxes2D( - array=boxes, - array_format=rr.Box2DFormat.XYWH, - colors=colors, - labels=labels, - show_labels=True, - draw_order=95.0, - ) - - -def _yoloe_tracking_rerun_blueprint() -> Any: - import rerun as rr - import rerun.blueprint as rrb - - return rrb.Blueprint( - rrb.Horizontal( - rrb.Spatial2DView( - origin="world/color_image", - contents=["world/color_image/**"], - name="Camera", - ), - rrb.Spatial3DView( - origin="world", - contents=[ - "world/**", - f"-{_YOLOE_DETECTIONS_ENTITY}", - ], - name="3D", - background=rrb.Background(kind="SolidColor", color=[0, 0, 0]), - line_grid=rrb.LineGrid3D( - plane=rr.components.Plane3D.XY.with_distance(0.5), - ), - overrides={ - "world/lidar": rrb.EntityBehavior(visible=False), - }, - ), - column_shares=[1, 2], - ), - rrb.TimePanel(state="hidden"), - rrb.SelectionPanel(state="hidden"), - ) - - -_yoloe_tracking_rerun_config = { - **go2_rerun_config, - "blueprint": _yoloe_tracking_rerun_blueprint, - "visual_override": { - **go2_rerun_config["visual_override"], - _YOLOE_DETECTIONS_ENTITY: _yoloe_detections_to_rerun, - }, -} - -_yoloe_tracking_vis = vis_module( - viewer_backend=global_config.viewer, - rerun_config=_yoloe_tracking_rerun_config, -) - - -yoloe_tracking_test = ( - autoconnect( - unitree_go2_basic, - _yoloe_tracking_vis, - YoloeTrackingModule.blueprint(), - ) - .global_config( - n_workers=6, - robot_model="unitree_go2", - ) - .transports( - { - ("detections", Detection2DArray): LCMTransport( - _YOLOE_DETECTIONS_TOPIC, - Detection2DArray, - ), - } - ) - .requirements( - _require_yoloe_lrpc_model, - ) -) - - -__all__ = [ - "YoloeTrackingConfig", - "YoloeTrackingModule", - "yoloe_tracking_test", -] - - -if __name__ == "__main__": - ModuleCoordinator.build(yoloe_tracking_test).loop() From 06c8546ce24e4eb9de52aa3f5daf5db277d82f51 Mon Sep 17 00:00:00 2001 From: Harold <20009626+HaroldGin931@users.noreply.github.com> Date: Thu, 28 May 2026 01:53:30 +0800 Subject: [PATCH 07/17] feat(custom): add yoloe-keyboard-teleop blueprint Compose YOLOE detection + keyboard-controlled Go2 in simulation or on real hardware. - Force YOLOE device=cpu in simulation to avoid CoreML/MPS conflict with MuJoCo locomotion policy (CoreMLExecutionProvider) - Route KeyboardTeleop through MovementManager (tele_cmd_vel) to match unitree_go2 control path; direct cmd_vel bypass broke MuJoCo sim - Rerun layout: 2D camera view with cyan YOLOE overlay + 3D view - Register as 'yoloe-keyboard-teleop' in all_blueprints.py --- .../blueprints/yoloe_keyboard_teleop.py | 154 ++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 dimos/robot/custom/blueprints/yoloe_keyboard_teleop.py diff --git a/dimos/robot/custom/blueprints/yoloe_keyboard_teleop.py b/dimos/robot/custom/blueprints/yoloe_keyboard_teleop.py new file mode 100644 index 0000000000..9bd18ee2d1 --- /dev/null +++ b/dimos/robot/custom/blueprints/yoloe_keyboard_teleop.py @@ -0,0 +1,154 @@ +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""YOLOE + Go2 keyboard teleop blueprint. + +Combines YOLOE open-vocabulary detection with keyboard-controlled movement so +you can manually drive the Go2 (in simulation or on real hardware) while +verifying YOLOE detection quality in the Rerun viewer. + +Usage: + # Simulation (recommended for capability checking) + dimos --simulation run yoloe-keyboard-teleop + + # Replay (detection-only, robot does not move) + dimos --replay run yoloe-keyboard-teleop + + # Real Go2 + dimos --robot-ip 192.168.123.161 --rerun-open native run yoloe-keyboard-teleop + +Keyboard controls (pygame window must have focus): + W / S — forward / backward + A / D — rotate left / right + Shift — speed boost (2×) + Ctrl — slow mode (0.5×) + Space — publish zero Twist (stop) + Esc / Q — quit keyboard window +""" + +from __future__ import annotations + +from typing import Any + +from dimos.core.coordination.blueprints import autoconnect +from dimos.core.global_config import global_config +from dimos.core.transport import LCMTransport +from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray +from dimos.navigation.movement_manager.movement_manager import MovementManager +from dimos.robot.custom.modules.yoloe_tracking_module import ( + YoloeTrackingModule, + _require_yoloe_lrpc_model, +) +from dimos.robot.custom.visualization.detection2d_overlay import yoloe_overlay +from dimos.robot.unitree.go2.blueprints.basic.unitree_go2_basic import ( + rerun_config as go2_rerun_config, + unitree_go2_basic, +) +from dimos.robot.unitree.keyboard_teleop import KeyboardTeleop +from dimos.visualization.vis_module import vis_module + +_YOLOE_DETECTIONS_TOPIC = "/color_image/yoloe_detections" +_YOLOE_DETECTIONS_ENTITY = "world/color_image/yoloe_detections" + + +def _yoloe_keyboard_rerun_blueprint() -> Any: + import rerun as rr + import rerun.blueprint as rrb + + return rrb.Blueprint( + rrb.Horizontal( + rrb.Spatial2DView( + origin="world/color_image", + contents=["world/color_image/**"], + name="Camera", + ), + rrb.Spatial3DView( + origin="world", + contents=[ + "world/**", + f"-{_YOLOE_DETECTIONS_ENTITY}", # 在 3D 视图中隐藏 YOLOE 2D bbox overlay + ], + name="3D", + background=rrb.Background(kind="SolidColor", color=[0, 0, 0]), + line_grid=rrb.LineGrid3D( + plane=rr.components.Plane3D.XY.with_distance(0.5), + ), + overrides={ + "world/lidar": rrb.EntityBehavior(visible=False), + }, + ), + column_shares=[1, 2], + ), + rrb.TimePanel(state="hidden"), + rrb.SelectionPanel(state="hidden"), + ) + + +_yoloe_keyboard_rerun_config = { + **go2_rerun_config, + "blueprint": _yoloe_keyboard_rerun_blueprint, + "visual_override": { + **go2_rerun_config["visual_override"], + _YOLOE_DETECTIONS_ENTITY: yoloe_overlay, # 对 YOLOE detections 做青色 Camera overlay + }, +} + +_yoloe_keyboard_vis = vis_module( + viewer_backend=global_config.viewer, + rerun_config=_yoloe_keyboard_rerun_config, +) + +# 在 simulation 模式下 MuJoCo 的 locomotion policy 已占用 CoreMLExecutionProvider, +# 强制 YOLOE 使用 CPU 避免 Metal/MPS 资源竞争导致 worker 崩溃。 +# 在 replay / 真机模式下保持 device=None(自动选择 GPU)。 +# _yoloe_device = "cpu" if global_config.simulation else None +_yoloe_device = None + +yoloe_keyboard_teleop = ( + autoconnect( + unitree_go2_basic, + _yoloe_keyboard_vis, + YoloeTrackingModule.blueprint(device=_yoloe_device), + # MovementManager 作为 velocity hub: + # tele_cmd_vel (来自 KeyboardTeleop) → MovementManager → cmd_vel → GO2Connection + # 与 unitree_go2 的控制路径保持一致,simulation 模式下 MujocoConnection 期望此路径。 + MovementManager.blueprint(), + # publish_only_when_active=True: 松开按键后只发一次零 Twist 再静默, + # 不持续刷 cmd_vel,不干扰 MovementManager 的 nav/tele 优先级逻辑。 + KeyboardTeleop.blueprint(publish_only_when_active=True), + ) + .global_config( + n_workers=8, # basic(4) + YoloeTracking + MovementManager + KeyboardTeleop + vis + robot_model="unitree_go2", + ) + .remappings( + [ + # KeyboardTeleop 输出 cmd_vel,需重命名为 tele_cmd_vel 才能连接到 MovementManager + (KeyboardTeleop, "cmd_vel", "tele_cmd_vel"), + ] + ) + .transports( + { + ("detections", Detection2DArray): LCMTransport( + _YOLOE_DETECTIONS_TOPIC, + Detection2DArray, + ), + } + ) + .requirements( + _require_yoloe_lrpc_model, + ) +) + +__all__ = ["yoloe_keyboard_teleop"] From 2687b405179dc805b01fd29d4b90aca1d0f7ba23 Mon Sep 17 00:00:00 2001 From: Harold <20009626+HaroldGin931@users.noreply.github.com> Date: Thu, 28 May 2026 03:13:39 +0800 Subject: [PATCH 08/17] refactor custom bbox task layout --- dimos/robot/all_blueprints.py | 4 +- dimos/robot/custom/README.md | 207 +++++++++++++-- .../custom/blueprints/bbox_distance_follow.py | 4 +- .../yoloe_target_lock_distance_follow.py | 135 ++++++++++ .../custom/modules/target_lock_module.py | 247 ++++++++++++++++++ dimos/robot/custom/tasks/__init__.py | 13 + .../bbox_distance_behavior_module.py | 70 ++--- .../test_bbox_distance_behavior_module.py | 159 +++++++++++ .../custom/tests/test_target_lock_module.py | 169 ++++++++++++ 9 files changed, 947 insertions(+), 61 deletions(-) create mode 100644 dimos/robot/custom/blueprints/yoloe_target_lock_distance_follow.py create mode 100644 dimos/robot/custom/modules/target_lock_module.py create mode 100644 dimos/robot/custom/tasks/__init__.py rename dimos/robot/custom/{modules => tasks}/bbox_distance_behavior_module.py (85%) create mode 100644 dimos/robot/custom/tests/test_bbox_distance_behavior_module.py create mode 100644 dimos/robot/custom/tests/test_target_lock_module.py diff --git a/dimos/robot/all_blueprints.py b/dimos/robot/all_blueprints.py index 229df64679..2a9bcbc8e1 100644 --- a/dimos/robot/all_blueprints.py +++ b/dimos/robot/all_blueprints.py @@ -122,6 +122,7 @@ "xarm7-planner-coordinator": "dimos.manipulation.blueprints:xarm7_planner_coordinator", "xarm7-planner-coordinator-agent": "dimos.manipulation.blueprints:xarm7_planner_coordinator_agent", "yoloe-keyboard-teleop": "dimos.robot.custom.blueprints.yoloe_keyboard_teleop:yoloe_keyboard_teleop", + "yoloe-target-lock-distance-follow": "dimos.robot.custom.blueprints.yoloe_target_lock_distance_follow:yoloe_target_lock_distance_follow", "yoloe-tracking-test": "dimos.robot.custom.blueprints.yoloe_tracking_test:yoloe_tracking_test", } @@ -129,7 +130,7 @@ all_modules = { "alfred-high-level": "dimos.robot.diy.alfred.effector_high_level.AlfredHighLevel", "arm-teleop-module": "dimos.teleop.quest.quest_extensions.ArmTeleopModule", - "b-box-distance-behavior-module": "dimos.robot.custom.modules.bbox_distance_behavior_module.BBoxDistanceBehaviorModule", + "b-box-distance-behavior-module": "dimos.robot.custom.tasks.bbox_distance_behavior_module.BBoxDistanceBehaviorModule", "b-box-navigation-module": "dimos.navigation.bbox_navigation.BBoxNavigationModule", "b-box-selection-module": "dimos.robot.custom.modules.bbox_selection_module.BBoxSelectionModule", "b1-connection-module": "dimos.robot.unitree.b1.connection.B1ConnectionModule", @@ -213,6 +214,7 @@ "spatial-memory": "dimos.perception.spatial_perception.SpatialMemory", "speak-skill": "dimos.agents.skills.speak_skill.SpeakSkill", "tare-planner": "dimos.navigation.nav_stack.modules.tare_planner.tare_planner.TarePlanner", + "target-lock-module": "dimos.robot.custom.modules.target_lock_module.TargetLockModule", "temporal-memory": "dimos.perception.experimental.temporal_memory.temporal_memory.TemporalMemory", "terrain-analysis": "dimos.navigation.nav_stack.modules.terrain_analysis.terrain_analysis.TerrainAnalysis", "terrain-map-ext": "dimos.navigation.nav_stack.modules.terrain_map_ext.terrain_map_ext.TerrainMapExt", diff --git a/dimos/robot/custom/README.md b/dimos/robot/custom/README.md index 83219a613d..011b260977 100644 --- a/dimos/robot/custom/README.md +++ b/dimos/robot/custom/README.md @@ -6,21 +6,25 @@ dimos/robot/custom/ ├── modules/ # 纯业务逻辑,无 blueprint / vis 代码 │ ├── bbox_selection_module.py # BBoxSelectionModule, BBoxSelectionConfig -│ ├── bbox_distance_behavior_module.py # BBoxDistanceBehaviorModule, BBoxDistanceBehaviorConfig +│ ├── target_lock_module.py # TargetLockModule, TargetLockConfig │ ├── yoloe_tracking_module.py # YoloeTrackingModule, YoloeTrackingConfig │ └── go2_startup_self_check_module.py # Go2StartupSelfCheck, Go2StartupSelfCheckConfig +├── tasks/ # 任务实现:每个 task 自带自己的状态机 +│ └── bbox_distance_behavior_module.py # BBoxDistanceBehaviorModule, BBoxDistanceBehaviorConfig ├── visualization/ # Detection2DArray → Rerun 2D overlay 适配 │ └── detection2d_overlay.py # detection_array_to_rerun / detections_overlay / │ # selected_bbox_overlay / yoloe_overlay ├── blueprints/ # autoconnect 组装 + rerun config + requirements │ ├── bbox_distance_follow.py # bbox_distance_follow blueprint +│ ├── yoloe_target_lock_distance_follow.py # 示例: YOLOE + selection + target lock + distance behavior +│ ├── yoloe_keyboard_teleop.py # yoloe-keyboard-teleop blueprint │ ├── yoloe_tracking_test.py # yoloe_tracking_test blueprint │ └── go2_startup_self_check.py # unitree_go2_startup_self_check blueprint └── tests/ # 纯 pytest 单元测试,无需机器人硬件 └── test_bbox_selection_module.py # BBoxSelectionModule 单元测试 ``` -依赖方向:`blueprints/` → `modules/` + `visualization/`;`tests/` → `modules/` only。 +依赖方向:`blueprints/` → `modules/` + `tasks/` + `visualization/`;`tests/` → `modules/` + `tasks/` only。 ## yoloe-keyboard-teleop @@ -30,13 +34,14 @@ dimos/robot/custom/ - `unitree_go2_basic` - `YoloeTrackingModule.blueprint()` +- `MovementManager.blueprint()` - `KeyboardTeleop.blueprint(publish_only_when_active=True)` - 专用 Rerun viewer overlay(与 `yoloe-tracking-test` 相同布局) 数据流: ```text -KeyboardTeleop.cmd_vel ──────────────────────────> GO2Connection.cmd_vel +KeyboardTeleop.cmd_vel -> MovementManager.tele_cmd_vel -> MovementManager.cmd_vel -> GO2Connection.cmd_vel unitree_go2_basic.color_image -> YoloeTrackingModule -> /color_image/yoloe_detections -> Rerun overlay ``` @@ -64,14 +69,166 @@ dimos --robot-ip 192.168.123.161 --rerun-open native run yoloe-keyboard-teleop 启动后会弹出一个 pygame 窗口,焦点在该窗口时键盘输入生效: -| 按键 | 动作 | -|------|------| -| W / S | 前进 / 后退 | -| A / D | 左转 / 右转 | -| Shift | 速度加倍(2×) | -| Ctrl | 慢速模式(0.5×) | -| Space | 发布零 Twist(急停) | -| Esc / Q | 退出键盘窗口 | +| 按键 | 动作 | +| ------- | -------------------- | +| W / S | 前进 / 后退 | +| A / D | 左转 / 右转 | +| Shift | 速度加倍(2×) | +| Ctrl | 慢速模式(0.5×) | +| Space | 发布零 Twist(急停) | +| Esc / Q | 退出键盘窗口 | + +## 双层状态机(Detector-agnostic) + +`BBoxSelectionModule` 只负责选择,不做目标丢失恢复。目标连续性由 `TargetLockModule` 负责,任务行为由任务模块(当前示例是 `BBoxDistanceBehaviorModule`)负责。 + +### TargetLock 状态机 + +```mermaid +stateDiagram-v2 + [*] --> unselected + unselected --> locked: selected_bbox 有效 + locked --> searching: 当前帧 id 不匹配 + searching --> locked: 重找成功 + searching --> lost: 超时未找回 + lost --> locked: 用户重新选择 + locked --> unselected: clear_selection / selected_bbox 为空 + searching --> unselected: clear_selection / selected_bbox 为空 +``` + +### 模块间调用关系 + +```mermaid +flowchart LR + C[color_image] --> Y[YoloeTrackingModule] + Y --> D[detections] + D --> S[BBoxSelectionModule] + S --> USB[user_selected_bbox] + D --> T[TargetLockModule] + USB --> T + T --> LB[locked_bbox_to_selected_bbox] + LB --> B[BBoxDistanceBehaviorModule] + L[lidar] --> B + I[camera_info] --> B + B --> V[cmd_vel] +``` + +### Visualization 与 TargetLock 的集成链路 + +这部分描述的是“在 dimos-view 中点击 -> 选框 -> 锁定 -> 叠加显示”的完整闭环。 + +```mermaid +flowchart LR + A[dimos-view Camera click] --> B[RerunWebSocketServer.clicked_point] + B --> C[BBoxSelectionModule._on_clicked_point] + C --> D[user_selected_bbox] + D --> E[TargetLockModule._on_selected_bbox] + F[detections] --> G[TargetLockModule._on_detections] + E --> H[locked_bbox] + G --> H + F --> I[/color_image/yoloe_detections] + D --> J[/color_image/selected_bbox] + H --> K[/color_image/locked_bbox] + I --> L[RerunBridge -> world/color_image/yoloe_detections] + J --> M[RerunBridge -> world/color_image/selected_bbox] + K --> N[RerunBridge -> world/color_image/locked_bbox] + L --> O[yoloe_overlay] + M --> P[selected_bbox_overlay] + N --> P +``` + +关键代码出处: + +- 点击选择处理:`BBoxSelectionModule._on_clicked_point()` 与 `_publish_selected()` + - `dimos/robot/custom/modules/bbox_selection_module.py` +- 锁定状态机处理:`TargetLockModule._on_selected_bbox()` / `_on_detections()` / `_set_state()` + - `dimos/robot/custom/modules/target_lock_module.py` +- 2D overlay 转换:`detection_array_to_rerun()`、`yoloe_overlay()`、`selected_bbox_overlay()` + - `dimos/robot/custom/visualization/detection2d_overlay.py` +- overlay 与实体路径绑定(`visual_override`)以及 topic 映射(`transports`) + - `dimos/robot/custom/blueprints/yoloe_target_lock_distance_follow.py` + +显示层约定: + +- `yoloe_overlay`:青色,`draw_order=95` +- `selected_bbox_overlay`:绿色,`draw_order=100` +- `locked_bbox` 当前也使用 `selected_bbox_overlay`,所以在 Camera 视图里会以绿色高优先级覆盖显示。 + +注意:`detection_array_to_rerun()` 在输入空数组时会返回空 `Boxes2D`,这会清除 viewer 中的旧框;因此 `TargetLockModule` 在 `searching/lost` 时发布空 `locked_bbox`,视觉上会立即反映为锁定框消失。 + +## 示例蓝图:yoloe-target-lock-distance-follow + +新增示例蓝图 `blueprints/yoloe_target_lock_distance_follow.py`,用于演示双层拆分: + +- 检测层:`YoloeTrackingModule` +- 选择层:`BBoxSelectionModule` +- 目标锁定层:`TargetLockModule` +- 任务层(示例任务):`BBoxDistanceBehaviorModule` + +数据流: + +```text +unitree_go2_basic.color_image + -> YoloeTrackingModule.detections + -> BBoxSelectionModule.detections + TargetLockModule.detections + +BBoxSelectionModule.selected_bbox + -> (remap) user_selected_bbox + -> (remap) TargetLockModule.selected_bbox + -> TargetLockModule.locked_bbox + -> (remap) BBoxDistanceBehaviorModule.selected_bbox + -> BBoxDistanceBehaviorModule.cmd_vel + -> GO2Connection.cmd_vel +``` + +该示例蓝图同时发布: + +- `/color_image/yoloe_detections` +- `/color_image/selected_bbox` +- `/color_image/locked_bbox` + +便于在 Rerun 中同时对比:检测结果、用户选择结果、锁定结果。 + +### TargetLockModule(示例实现) + +职责: + +- 输入 `detections` 和 `selected_bbox`(在示例蓝图中经由 `user_selected_bbox` remap 到 `selected_bbox`)。 +- 输出 `locked_bbox`(单目标锁定结果)和 `lock_status`(JSON 字符串状态)。 +- 不做 detector 推理,不做任务行为决策。 + +配置: + +- `search_timeout_sec=3.0` +- `reacquire_by_class=True` + +状态: + +- `unselected` +- `locked` +- `searching` +- `lost` + +RPC: + +- `clear_lock() -> str` +- `get_lock_state() -> dict[str, Any]` + +重找策略(当前实现): + +- 优先按 tracking id 直接匹配。 +- id 匹配失败且仍在超时时间内: + 1. 若开启 `reacquire_by_class`,先按 `class_id` 过滤候选; + 2. 再按 bbox 中心点与上次位置的欧氏距离最近原则重找。 +- 超时未找回进入 `lost`,并输出空 `locked_bbox`。 + +### 运行示例蓝图 + +该示例尚未注册到 `all_blueprints.py`,可直接以模块方式启动: + +```bash +.venv/bin/python -m dimos.robot.custom.blueprints.yoloe_target_lock_distance_follow +``` ## yoloe-tracking-test @@ -188,25 +345,29 @@ RPC: - `confidence` - `class_id` -### BBoxDistanceBehaviorModule +### BBoxDistanceBehaviorModule(task) 职责: - 消费 `selected_bbox + lidar + camera_info`。 - 输出 `cmd_vel` 和 `behavior_status`。 -- 不做人识别、不选择目标、不做目标丢失恢复。 +- 只负责“点中选框后自动靠近到 0.2m 并结束”。 + +行为方式: + +- `BBoxSelectionModule` 一旦输出非空 `selected_bbox`,行为模块自动进入 `approaching`。 +- 当估计距离进入 `0.2m ± 0.05m` 容差时,行为模块进入 `done` 并持续输出零速度。 +- 如果 `selected_bbox` 被清空,行为模块回到 `idle` 并停止输出。 RPC: -- `start_bbox_distance_behavior(hold_seconds=None, hold_distance=None, approach_distance=None) -> str` +- `start_bbox_distance_behavior(approach_distance=None) -> str` - `stop_bbox_distance_behavior() -> str` 默认参数: - `command_hz = 20.0` -- `hold_seconds = 3.0` -- `hold_distance = 1.5` -- `approach_distance = 0.8` +- `approach_distance = 0.2` - `depth_percentile = 25.0` - `max_linear_speed = 0.45` - `max_angular_speed = 0.8` @@ -214,10 +375,10 @@ RPC: 状态机: ```text -idle -> holding_distance -> approaching -> done +idle -> approaching -> done ``` -`hold_seconds` 从第一次拿到有效 bbox + lidar distance 后开始计时,不从 RPC 调用瞬间开始。bbox 为空、camera_info 缺失、lidar 距离无效时发布 `Twist.zero()` 并等待,不重新识别。完成或停止时发布 `Twist.zero()`。 +`selected_bbox` 进入后模块就直接开始靠近。bbox 为空、camera_info 缺失、lidar 距离无效时发布 `Twist.zero()` 并等待。完成或停止时发布 `Twist.zero()`。 lidar 距离 MVP 直接用 camera intrinsics 将点云投影到 bbox,取 `depth_percentile` 深度;如果实际 lidar 坐标系没有和相机对齐,后续再补 TF 修正。 @@ -282,16 +443,10 @@ CLI 全局参数必须放在 `run` 前面,例如 `--robot-ip`、`--replay`、` .venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule; c=RPCClient.remote(BBoxSelectionModule); print(c.clear_selection()); c.stop_rpc_client()' ``` -启动距离行为: - -```bash -.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.modules.bbox_distance_behavior_module import BBoxDistanceBehaviorModule; c=RPCClient.remote(BBoxDistanceBehaviorModule); print(c.start_bbox_distance_behavior()); c.stop_rpc_client()' -``` - 停止距离行为: ```bash -.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.modules.bbox_distance_behavior_module import BBoxDistanceBehaviorModule; c=RPCClient.remote(BBoxDistanceBehaviorModule); print(c.stop_bbox_distance_behavior()); c.stop_rpc_client()' +.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.tasks.bbox_distance_behavior_module import BBoxDistanceBehaviorModule; c=RPCClient.remote(BBoxDistanceBehaviorModule); print(c.stop_bbox_distance_behavior()); c.stop_rpc_client()' ``` ### Viewer 点击选择 diff --git a/dimos/robot/custom/blueprints/bbox_distance_follow.py b/dimos/robot/custom/blueprints/bbox_distance_follow.py index 9e7c435fc7..8b92554911 100644 --- a/dimos/robot/custom/blueprints/bbox_distance_follow.py +++ b/dimos/robot/custom/blueprints/bbox_distance_follow.py @@ -9,7 +9,7 @@ from dimos.core.transport import LCMTransport # 导入 LCM transport,用于固定 topic 名称 from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray # 导入 2D 检测数组消息类型 from dimos.perception.detection.module2D import Detection2DModule # 导入多 bbox 检测模块 -from dimos.robot.custom.modules.bbox_distance_behavior_module import BBoxDistanceBehaviorModule # 导入距离行为模块 +from dimos.robot.custom.tasks.bbox_distance_behavior_module import BBoxDistanceBehaviorModule # 导入距离任务模块 from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule # 导入 bbox 选择模块 from dimos.robot.custom.visualization.detection2d_overlay import ( detections_overlay, # 黄色候选 bbox overlay @@ -100,7 +100,7 @@ def _bbox_distance_rerun_blueprint() -> Any: # 定义 bbox-distance-follow 专 publish_detection_images=False, # 关闭 cropped detected_image,避免 3D view 无 Pinhole 警告 ), BBoxSelectionModule.blueprint(), # 从多 bbox 中选择单个 bbox - BBoxDistanceBehaviorModule.blueprint(), # 根据 selected bbox、lidar 和 camera_info 控制距离 + BBoxDistanceBehaviorModule.blueprint(approach_distance=0.2), # 点选后自动靠近到 0.2m 并结束 ).global_config( n_workers=6, # 给 Go2、viewer、detector、selection 和 behavior 留足 worker robot_model="unitree_go2", diff --git a/dimos/robot/custom/blueprints/yoloe_target_lock_distance_follow.py b/dimos/robot/custom/blueprints/yoloe_target_lock_distance_follow.py new file mode 100644 index 0000000000..7d36e7a886 --- /dev/null +++ b/dimos/robot/custom/blueprints/yoloe_target_lock_distance_follow.py @@ -0,0 +1,135 @@ +from __future__ import annotations + +from typing import Any + +from dimos.core.coordination.blueprints import autoconnect +from dimos.core.coordination.module_coordinator import ModuleCoordinator +from dimos.core.global_config import global_config +from dimos.core.transport import LCMTransport +from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray +from dimos.robot.custom.tasks.bbox_distance_behavior_module import BBoxDistanceBehaviorModule +from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule +from dimos.robot.custom.modules.target_lock_module import TargetLockModule +from dimos.robot.custom.modules.yoloe_tracking_module import ( + YoloeTrackingModule, + _require_yoloe_lrpc_model, +) +from dimos.robot.custom.visualization.detection2d_overlay import ( + selected_bbox_overlay, + yoloe_overlay, +) +from dimos.robot.unitree.go2.blueprints.basic.unitree_go2_basic import ( + rerun_config as go2_rerun_config, + unitree_go2_basic, +) +from dimos.visualization.vis_module import vis_module + +_YOLOE_DETECTIONS_TOPIC = "/color_image/yoloe_detections" +_USER_SELECTED_BBOX_TOPIC = "/color_image/selected_bbox" +_LOCKED_BBOX_TOPIC = "/color_image/locked_bbox" + +_YOLOE_DETECTIONS_ENTITY = "world/color_image/yoloe_detections" +_USER_SELECTED_BBOX_ENTITY = "world/color_image/selected_bbox" +_LOCKED_BBOX_ENTITY = "world/color_image/locked_bbox" + + +def _target_lock_rerun_blueprint() -> Any: + import rerun as rr + import rerun.blueprint as rrb + + return rrb.Blueprint( + rrb.Horizontal( + rrb.Spatial2DView( + origin="world/color_image", + contents=["world/color_image/**"], + name="Camera", + ), + rrb.Spatial3DView( + origin="world", + contents=[ + "world/**", + f"-{_YOLOE_DETECTIONS_ENTITY}", + f"-{_USER_SELECTED_BBOX_ENTITY}", + f"-{_LOCKED_BBOX_ENTITY}", + ], + name="3D", + background=rrb.Background(kind="SolidColor", color=[0, 0, 0]), + line_grid=rrb.LineGrid3D( + plane=rr.components.Plane3D.XY.with_distance(0.5), + ), + overrides={ + "world/lidar": rrb.EntityBehavior(visible=False), + }, + ), + column_shares=[1, 2], + ), + rrb.TimePanel(state="hidden"), + rrb.SelectionPanel(state="hidden"), + ) + + +_target_lock_rerun_config = { + **go2_rerun_config, + "blueprint": _target_lock_rerun_blueprint, + "visual_override": { + **go2_rerun_config["visual_override"], + _YOLOE_DETECTIONS_ENTITY: yoloe_overlay, + _USER_SELECTED_BBOX_ENTITY: selected_bbox_overlay, + _LOCKED_BBOX_ENTITY: selected_bbox_overlay, + }, +} + +_target_lock_vis = vis_module( + viewer_backend=global_config.viewer, + rerun_config=_target_lock_rerun_config, +) + + +yoloe_target_lock_distance_follow = ( + autoconnect( + unitree_go2_basic, + _target_lock_vis, + YoloeTrackingModule.blueprint(), + BBoxSelectionModule.blueprint(), + TargetLockModule.blueprint(), + BBoxDistanceBehaviorModule.blueprint(), + ) + .global_config( + n_workers=10, + robot_model="unitree_go2", + ) + .remappings( + [ + (BBoxSelectionModule, "selected_bbox", "user_selected_bbox"), + (TargetLockModule, "selected_bbox", "user_selected_bbox"), + (TargetLockModule, "locked_bbox", "selected_bbox"), + ] + ) + .transports( + { + ("detections", Detection2DArray): LCMTransport( + _YOLOE_DETECTIONS_TOPIC, + Detection2DArray, + ), + ("user_selected_bbox", Detection2DArray): LCMTransport( + _USER_SELECTED_BBOX_TOPIC, + Detection2DArray, + ), + ("locked_bbox", Detection2DArray): LCMTransport( + _LOCKED_BBOX_TOPIC, + Detection2DArray, + ), + } + ) + .requirements( + _require_yoloe_lrpc_model, + ) +) + +__all__ = [ + "yoloe_target_lock_distance_follow", +] + + +if __name__ == "__main__": + ModuleCoordinator.build(yoloe_target_lock_distance_follow).loop() \ No newline at end of file diff --git a/dimos/robot/custom/modules/target_lock_module.py b/dimos/robot/custom/modules/target_lock_module.py new file mode 100644 index 0000000000..8ddf5ba37b --- /dev/null +++ b/dimos/robot/custom/modules/target_lock_module.py @@ -0,0 +1,247 @@ +from __future__ import annotations + +import json +import threading +import time +from typing import Any, Literal + +from dimos_lcm.std_msgs import String +from reactivex.disposable import Disposable + +from dimos.core.core import rpc +from dimos.core.module import Module, ModuleConfig +from dimos.core.stream import In, Out +from dimos.msgs.std_msgs.Header import Header +from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray + +_DEFAULT_FRAME_ID = "camera_optical" + +LockState = Literal["unselected", "locked", "searching", "lost"] + + +class TargetLockConfig(ModuleConfig): + search_timeout_sec: float = 3.0 + reacquire_by_class: bool = True + + +class TargetLockModule(Module): + """Maintain a stable single-target lock from selected_bbox + detections.""" + + config: TargetLockConfig + + detections: In[Detection2DArray] + selected_bbox: In[Detection2DArray] + + locked_bbox: Out[Detection2DArray] + lock_status: Out[String] + + def __init__(self, **kwargs: Any) -> None: + super().__init__(**kwargs) + self._lock = threading.RLock() + self._state: LockState = "unselected" + self._target_id: str | None = None + self._target_class_id: str | None = None + self._last_center: tuple[float, float] | None = None + self._last_seen_at: float | None = None + self._last_header: Header | None = None + + @rpc + def start(self) -> None: + super().start() + self.register_disposable(Disposable(self.selected_bbox.subscribe(self._on_selected_bbox))) + self.register_disposable(Disposable(self.detections.subscribe(self._on_detections))) + self._publish_status(force=True) + + @rpc + def clear_lock(self) -> str: + with self._lock: + self._reset_lock_state() + header = self._last_header + self.locked_bbox.publish(self._empty_detection_array(header)) + self._set_state("unselected") + return "target lock cleared" + + @rpc + def get_lock_state(self) -> dict[str, Any]: + with self._lock: + return { + "state": self._state, + "target_id": self._target_id, + "target_class_id": self._target_class_id, + "last_seen_at": self._last_seen_at, + } + + def _on_selected_bbox(self, selected_bbox: Detection2DArray) -> None: + with self._lock: + self._last_header = selected_bbox.header + + detection = self._extract_single_detection(selected_bbox) + if detection is None: + with self._lock: + self._reset_lock_state() + self.locked_bbox.publish(self._empty_detection_array(selected_bbox.header)) + self._set_state("unselected") + return + + now = time.monotonic() + center = self._bbox_center(detection) + class_id = self._detection_class_id(detection) + + with self._lock: + self._target_id = self._detection_id(detection, fallback_index=0) + self._target_class_id = class_id + self._last_center = center + self._last_seen_at = now + + self.locked_bbox.publish(self._single_detection_array(detection, selected_bbox.header)) + self._set_state("locked") + + def _on_detections(self, detections: Detection2DArray) -> None: + with self._lock: + self._last_header = detections.header + target_id = self._target_id + target_class_id = self._target_class_id + last_center = self._last_center + last_seen_at = self._last_seen_at + + if target_id is None: + self.locked_bbox.publish(self._empty_detection_array(detections.header)) + self._set_state("unselected") + return + + matched = self._find_by_id(detections, target_id) + if matched is not None: + self._update_lock_from_detection(matched, time.monotonic()) + self.locked_bbox.publish(self._single_detection_array(matched, detections.header)) + self._set_state("locked") + return + + now = time.monotonic() + if last_seen_at is None: + self.locked_bbox.publish(self._empty_detection_array(detections.header)) + self._set_state("searching") + return + + if now - last_seen_at > max(self.config.search_timeout_sec, 0.0): + self.locked_bbox.publish(self._empty_detection_array(detections.header)) + self._set_state("lost") + return + + reacquired = self._reacquire_candidate(detections, target_class_id, last_center) + if reacquired is None: + self.locked_bbox.publish(self._empty_detection_array(detections.header)) + self._set_state("searching") + return + + self._update_lock_from_detection(reacquired, now) + self.locked_bbox.publish(self._single_detection_array(reacquired, detections.header)) + self._set_state("locked") + + def _set_state(self, state: LockState) -> None: + with self._lock: + old_state = self._state + self._state = state + self._publish_status(force=old_state != state) + + def _publish_status(self, force: bool = False) -> None: + with self._lock: + state = self._state + payload = { + "state": state, + "target_id": self._target_id, + "target_class_id": self._target_class_id, + } + if force or state in ("unselected", "lost"): + self.lock_status.publish(String(json.dumps(payload, ensure_ascii=True))) + + def _update_lock_from_detection(self, detection: Any, now: float) -> None: + with self._lock: + self._target_id = self._detection_id(detection, fallback_index=0) + self._target_class_id = self._detection_class_id(detection) + self._last_center = self._bbox_center(detection) + self._last_seen_at = now + + def _reset_lock_state(self) -> None: + self._target_id = None + self._target_class_id = None + self._last_center = None + self._last_seen_at = None + + def _reacquire_candidate( + self, + detections: Detection2DArray, + target_class_id: str | None, + last_center: tuple[float, float] | None, + ) -> Any | None: + candidates: list[Any] = list(detections.detections) + if not candidates: + return None + + if self.config.reacquire_by_class and target_class_id is not None: + class_filtered = [d for d in candidates if self._detection_class_id(d) == target_class_id] + if class_filtered: + candidates = class_filtered + + if not candidates: + return None + + if last_center is None: + return candidates[0] + + return min( + candidates, + key=lambda detection: self._center_distance_sq(last_center, self._bbox_center(detection)), + ) + + def _find_by_id(self, detections: Detection2DArray, target_id: str) -> Any | None: + for index, detection in enumerate(detections.detections): + if self._detection_id(detection, fallback_index=index) == target_id: + return detection + return None + + @staticmethod + def _extract_single_detection(detections: Detection2DArray | None) -> Any | None: + if detections is None or not detections.detections: + return None + return detections.detections[0] + + @staticmethod + def _single_detection_array(detection: Any, header: Header | None) -> Detection2DArray: + safe_header = header if header is not None else Header(time.time(), _DEFAULT_FRAME_ID) + return Detection2DArray(detections_length=1, header=safe_header, detections=[detection]) + + @staticmethod + def _empty_detection_array(header: Header | None) -> Detection2DArray: + safe_header = header if header is not None else Header(time.time(), _DEFAULT_FRAME_ID) + return Detection2DArray(detections_length=0, header=safe_header, detections=[]) + + @staticmethod + def _detection_id(detection: Any, fallback_index: int) -> str: + detection_id = getattr(detection, "id", "") + return str(detection_id) if detection_id else str(fallback_index) + + @staticmethod + def _detection_class_id(detection: Any) -> str | None: + results = getattr(detection, "results", []) + if not results: + return None + hypothesis = results[0].hypothesis + class_id = getattr(hypothesis, "class_id", None) + return str(class_id) if class_id is not None else None + + @staticmethod + def _bbox_center(detection: Any) -> tuple[float, float]: + center = detection.bbox.center.position + return float(center.x), float(center.y) + + @staticmethod + def _center_distance_sq(a: tuple[float, float], b: tuple[float, float]) -> float: + dx = a[0] - b[0] + dy = a[1] - b[1] + return dx * dx + dy * dy + + +__all__ = [ + "TargetLockConfig", + "TargetLockModule", +] \ No newline at end of file diff --git a/dimos/robot/custom/tasks/__init__.py b/dimos/robot/custom/tasks/__init__.py new file mode 100644 index 0000000000..bc1a2ce5cc --- /dev/null +++ b/dimos/robot/custom/tasks/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/dimos/robot/custom/modules/bbox_distance_behavior_module.py b/dimos/robot/custom/tasks/bbox_distance_behavior_module.py similarity index 85% rename from dimos/robot/custom/modules/bbox_distance_behavior_module.py rename to dimos/robot/custom/tasks/bbox_distance_behavior_module.py index d0b66f988e..6b0efc8e47 100644 --- a/dimos/robot/custom/modules/bbox_distance_behavior_module.py +++ b/dimos/robot/custom/tasks/bbox_distance_behavior_module.py @@ -3,7 +3,6 @@ import json # 导入 JSON 工具,用于发布结构化行为状态 import math # 导入数学工具,用于检查有限数值 import threading # 导入线程工具,用后台循环发布速度命令 -import time # 导入时间工具,用于状态机计时和消息时间戳 from typing import Any, Literal # 导入通用类型和状态字面量类型 from dimos_lcm.std_msgs import String # 导入 LCM 字符串消息,用于状态输出 @@ -25,7 +24,7 @@ logger = setup_logger() # 创建当前文件使用的日志对象 -BehaviorState = Literal["idle", "holding_distance", "approaching", "done"] # 定义行为状态机的合法状态 +BehaviorState = Literal["idle", "approaching", "done"] # 定义行为状态机的合法状态 _LINEAR_GAIN = 0.8 # 定义距离误差到线速度的简单比例增益 _ANGULAR_GAIN = 1.0 # 定义横向像素误差到角速度的简单比例增益 @@ -34,9 +33,7 @@ class BBoxDistanceBehaviorConfig(ModuleConfig): # 定义 bbox 距离行为模块配置 command_hz: float = 20.0 # 速度命令发布频率,单位 Hz - hold_seconds: float = 3.0 # 保持 hold_distance 的默认时间,单位秒 - hold_distance: float = 1.5 # 保持阶段目标距离,单位米 - approach_distance: float = 0.8 # 靠近阶段目标距离,单位米 + approach_distance: float = 0.2 # 靠近阶段目标距离,单位米 depth_percentile: float = 25.0 # bbox 内点云深度百分位,降低远处离群点影响 max_linear_speed: float = 0.45 # 最大线速度,单位 m/s max_angular_speed: float = 0.8 # 最大角速度,单位 rad/s @@ -56,13 +53,11 @@ def __init__(self, **kwargs: Any) -> None: # 定义构造函数,接收框架 self._stop_event = threading.Event() # 创建后台命令循环停止事件 self._thread: threading.Thread | None = None # 保存后台命令循环线程 self._state: BehaviorState = "idle" # 初始化行为状态为 idle + self._active_target_id: str | None = None # 保存当前自动靠近的目标 id self._latest_selected_bbox: Detection2DArray | None = None # 保存最新 selected bbox self._latest_lidar: PointCloud2 | None = None # 保存最新 lidar 点云 self._latest_camera_info: CameraInfo | None = None # 保存最新 camera_info - self._active_hold_seconds = self.config.hold_seconds # 保存本次行为使用的保持时间 - self._active_hold_distance = self.config.hold_distance # 保存本次行为使用的保持距离 self._active_approach_distance = self.config.approach_distance # 保存本次行为使用的靠近距离 - self._hold_started_at: float | None = None # 保存第一次获得有效距离后的保持阶段起始时间 @rpc # 标记 start() 是框架生命周期 RPC def start(self) -> None: # 定义模块启动逻辑 @@ -90,25 +85,20 @@ def stop(self) -> None: # 定义模块停止逻辑 @rpc # 标记 start_bbox_distance_behavior() 可通过 DimOS RPC 调用 def start_bbox_distance_behavior( # 定义行为启动 RPC self, # 传入模块实例 - hold_seconds: float | None = None, # 可选覆盖保持时间 - hold_distance: float | None = None, # 可选覆盖保持阶段目标距离 approach_distance: float | None = None, # 可选覆盖靠近阶段目标距离 ) -> str: # 返回可读启动结果 with self._lock: # 加锁重置状态机参数 - self._active_hold_seconds = self.config.hold_seconds if hold_seconds is None else float(hold_seconds) # 设置本次保持时间 - self._active_hold_distance = self.config.hold_distance if hold_distance is None else float(hold_distance) # 设置本次保持距离 self._active_approach_distance = self.config.approach_distance if approach_distance is None else float(approach_distance) # 设置本次靠近距离 - self._hold_started_at = None # 清空保持阶段起点,等待首次有效 bbox+lidar - self._state = "holding_distance" # 进入保持距离阶段 + self._state = "approaching" # 进入靠近阶段 - self._publish_status("holding_distance") # 发布状态变化 + self._publish_status("approaching") # 发布状态变化 return "bbox distance behavior started" # 返回启动确认 @rpc # 标记 stop_bbox_distance_behavior() 可通过 DimOS RPC 调用 def stop_bbox_distance_behavior(self) -> str: # 定义行为停止 RPC with self._lock: # 加锁更新状态机 self._state = "idle" # 回到 idle 状态 - self._hold_started_at = None # 清空保持阶段计时 + self._active_target_id = None # 清空当前目标 id self.cmd_vel.publish(Twist.zero()) # 行为停止时发布零速度 self._publish_status("idle") # 发布 idle 状态 @@ -117,6 +107,30 @@ def stop_bbox_distance_behavior(self) -> str: # 定义行为停止 RPC def _on_selected_bbox(self, selected_bbox: Detection2DArray) -> None: # 处理新的 selected bbox with self._lock: # 加锁更新缓存 self._latest_selected_bbox = selected_bbox # 保存最新 selected bbox + detection = self._extract_single_detection(selected_bbox) # 读取当前选中目标 + current_target_id = self._active_target_id # 复制当前目标 id + current_state = self._state # 复制当前状态 + + if detection is None: # 如果当前没有选中目标 + with self._lock: # 加锁重置状态 + self._active_target_id = None # 清空当前目标 id + self._state = "idle" # 回到 idle + self.cmd_vel.publish(Twist.zero()) # 没有目标时立即停止 + self._publish_status("idle") # 发布 idle 状态 + return # 结束处理 + + target_id = self._detection_id(detection) # 读取当前目标 id + with self._lock: # 加锁更新当前目标 + self._active_target_id = target_id # 保存当前目标 id + + if current_state == "done" and current_target_id == target_id: # 如果已经完成且仍是同一个目标 + self._publish_status("done") # 保持完成状态 + return # 不重新启动任务 + + with self._lock: # 加锁切换到靠近状态 + self._state = "approaching" # 新目标或尚未完成时自动进入靠近阶段 + + self._publish_status("approaching") # 发布自动启动状态 def _on_lidar(self, lidar: PointCloud2) -> None: # 处理新的 lidar 点云 with self._lock: # 加锁更新缓存 @@ -141,10 +155,7 @@ def _compute_next_twist(self) -> Twist | None: # 计算当前周期应该发布 selected_bbox = self._latest_selected_bbox # 复制 latest selected bbox lidar = self._latest_lidar # 复制 latest lidar camera_info = self._latest_camera_info # 复制 latest camera_info - hold_distance = self._active_hold_distance # 复制本次保持距离 approach_distance = self._active_approach_distance # 复制本次靠近距离 - hold_seconds = self._active_hold_seconds # 复制本次保持时间 - hold_started_at = self._hold_started_at # 复制保持阶段起点 if state == "idle": # 如果行为未启动 return None # 不重复发布速度命令 @@ -161,23 +172,13 @@ def _compute_next_twist(self) -> Twist | None: # 计算当前周期应该发布 return Twist.zero() # 发布零速度并等待下一帧 bbox_center_x = float(detection.bbox.center.position.x) # 读取 bbox 中心 x 像素坐标 - target_distance = hold_distance if state == "holding_distance" else approach_distance # 根据状态选择目标距离 + target_distance = approach_distance # 始终靠近到目标距离 twist = self._make_twist(distance, target_distance, bbox_center_x, camera_info) # 生成线速度和角速度命令 - if state == "holding_distance": # 如果当前处于保持距离阶段 - now = time.monotonic() # 读取单调时钟,用于保持时间计时 - if hold_started_at is None: # 如果还没有开始保持阶段计时 - with self._lock: # 加锁写入保持阶段起点 - self._hold_started_at = now # 从第一次有效 bbox+lidar 距离开始计时 - self._publish_status("holding_distance", distance=distance) # 发布首次有效距离状态 - elif now - hold_started_at >= hold_seconds: # 如果保持时间已经满足 - with self._lock: # 加锁切换状态 - self._state = "approaching" # 进入靠近阶段 - self._publish_status("approaching", distance=distance) # 发布状态变化 - if state == "approaching" and distance <= approach_distance + _DISTANCE_TOLERANCE_M: # 如果已经到达靠近目标距离 with self._lock: # 加锁切换完成状态 self._state = "done" # 标记行为完成 + self._active_target_id = None # 完成后清空当前目标 self._publish_status("done", distance=distance) # 发布完成状态 return Twist.zero() # 完成时发布零速度 @@ -261,6 +262,11 @@ def _extract_single_detection(selected_bbox: Detection2DArray | None) -> Any | N return None # 返回空 return selected_bbox.detections[0] # 返回第一个 detection,选择模块保证最多一个 + @staticmethod # 声明这是不依赖实例状态的工具函数 + def _detection_id(detection: Any) -> str: # 读取 detection.id,并在缺失时回退为空字符串 + detection_id = getattr(detection, "id", "") # 读取 detection.id,缺失时使用空字符串 + return str(detection_id) if detection_id else "" # 返回真实 id 或空字符串 + @staticmethod # 声明这是不依赖实例状态的工具函数 def _clamp(value: float, lower: float, upper: float) -> float: # 把数值限制在上下界之间 return max(lower, min(upper, value)) # 返回限幅后的数值 @@ -273,4 +279,4 @@ def _publish_status(self, state: BehaviorState, **fields: float) -> None: # 发 __all__ = [ # 声明这个文件希望对外暴露的名字 "BBoxDistanceBehaviorConfig", # 暴露行为模块配置 "BBoxDistanceBehaviorModule", # 暴露行为模块 -] # 结束 __all__ 列表 +] # 结束 __all__ 列表 \ No newline at end of file diff --git a/dimos/robot/custom/tests/test_bbox_distance_behavior_module.py b/dimos/robot/custom/tests/test_bbox_distance_behavior_module.py new file mode 100644 index 0000000000..0b73c51468 --- /dev/null +++ b/dimos/robot/custom/tests/test_bbox_distance_behavior_module.py @@ -0,0 +1,159 @@ +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from collections.abc import Callable +from typing import Any + +from dimos_lcm.vision_msgs import ( + BoundingBox2D, + Detection2D, + ObjectHypothesis, + ObjectHypothesisWithPose, + Point2D, + Pose2D, +) +import pytest + +from dimos.msgs.sensor_msgs.CameraInfo import CameraInfo +from dimos.msgs.sensor_msgs.PointCloud2 import PointCloud2 +from dimos.msgs.std_msgs.Header import Header +from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray +from dimos.protocol.rpc.spec import RPCSpec +from dimos.robot.custom.tasks.bbox_distance_behavior_module import ( + BBoxDistanceBehaviorModule, +) + + +class _NoopRPC(RPCSpec): + def __init__( + self, + *, + rpc_timeouts: dict[str, float] | None = None, + default_rpc_timeout: float = 120.0, + ) -> None: + self.rpc_timeouts = {} if rpc_timeouts is None else dict(rpc_timeouts) + self.default_rpc_timeout = default_rpc_timeout + + def serve_module_rpc(self, module: Any, name: str | None = None) -> None: + pass + + def serve_rpc(self, f: Callable[..., Any], name: str) -> Callable[[], None]: + return lambda: None + + def call( + self, + name: str, + arguments: tuple[list[Any], dict[str, Any]], + cb: Callable[[Any], None] | None, + ) -> Callable[[], None] | None: + return (lambda: None) if cb is not None else None + + def call_nowait(self, name: str, arguments: tuple[list[Any], dict[str, Any]]) -> None: + pass + + def start(self) -> None: + pass + + def stop(self) -> None: + pass + + +@pytest.fixture() +def module() -> BBoxDistanceBehaviorModule: + instance = BBoxDistanceBehaviorModule(rpc_transport=_NoopRPC) + try: + yield instance + finally: + instance.stop() + + +def _make_detection(detection_id: str, x1: float, y1: float, x2: float, y2: float) -> Detection2D: + center_x = (x1 + x2) / 2.0 + center_y = (y1 + y2) / 2.0 + return Detection2D( + id=detection_id, + results_length=1, + header=Header(123.0, "camera_optical"), + bbox=BoundingBox2D( + center=Pose2D(position=Point2D(x=center_x, y=center_y), theta=0.0), + size_x=x2 - x1, + size_y=y2 - y1, + ), + results=[ + ObjectHypothesisWithPose( + hypothesis=ObjectHypothesis(class_id="person", score=0.9) + ) + ], + ) + + +def _make_array(*detections: Detection2D) -> Detection2DArray: + return Detection2DArray( + detections_length=len(detections), + header=Header(123.0, "camera_optical"), + detections=list(detections), + ) + + +def _subscribe_status(module: BBoxDistanceBehaviorModule) -> list[Any]: + received: list[Any] = [] + module.behavior_status.subscribe(received.append) + return received + + +def test_selected_bbox_auto_starts_approach(module: BBoxDistanceBehaviorModule) -> None: + status = _subscribe_status(module) + module._on_lidar(PointCloud2()) + module._on_camera_info(CameraInfo.from_intrinsics(100.0, 100.0, 50.0, 50.0, 100, 100)) + + module._on_selected_bbox(_make_array(_make_detection("target", 40.0, 40.0, 60.0, 60.0))) + + assert module._state == "approaching" + assert status + + +def test_selected_bbox_reaches_point_two_and_finishes( + module: BBoxDistanceBehaviorModule, + monkeypatch: pytest.MonkeyPatch, +) -> None: + module._on_lidar(PointCloud2()) + module._on_camera_info(CameraInfo.from_intrinsics(100.0, 100.0, 50.0, 50.0, 100, 100)) + module._on_selected_bbox(_make_array(_make_detection("target", 40.0, 40.0, 60.0, 60.0))) + + distances = [0.30, 0.24] + + monkeypatch.setattr( + module, + "_estimate_bbox_distance", + lambda *args, **kwargs: distances.pop(0), + ) + + twist = module._compute_next_twist() + + assert twist is not None + assert twist.linear.x > 0.0 + done_twist = module._compute_next_twist() + assert done_twist is not None + assert done_twist.linear.x == 0.0 + assert done_twist.angular.z == 0.0 + assert module._state == "done" + + +def test_empty_selected_bbox_resets_to_idle(module: BBoxDistanceBehaviorModule) -> None: + module._on_selected_bbox(_make_array(_make_detection("target", 40.0, 40.0, 60.0, 60.0))) + module._on_selected_bbox(_make_array()) + + assert module._state == "idle" \ No newline at end of file diff --git a/dimos/robot/custom/tests/test_target_lock_module.py b/dimos/robot/custom/tests/test_target_lock_module.py new file mode 100644 index 0000000000..33e1f56c11 --- /dev/null +++ b/dimos/robot/custom/tests/test_target_lock_module.py @@ -0,0 +1,169 @@ +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from collections.abc import Callable +from typing import Any + +from dimos_lcm.vision_msgs import ( + BoundingBox2D, + Detection2D, + ObjectHypothesis, + ObjectHypothesisWithPose, + Point2D, + Pose2D, +) +import pytest + +from dimos.msgs.std_msgs.Header import Header +from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray +from dimos.protocol.rpc.spec import RPCSpec +from dimos.robot.custom.modules.target_lock_module import TargetLockModule + + +class _NoopRPC(RPCSpec): + def __init__( + self, + *, + rpc_timeouts: dict[str, float] | None = None, + default_rpc_timeout: float = 120.0, + ) -> None: + self.rpc_timeouts = {} if rpc_timeouts is None else dict(rpc_timeouts) + self.default_rpc_timeout = default_rpc_timeout + + def serve_module_rpc(self, module: Any, name: str | None = None) -> None: + pass + + def serve_rpc(self, f: Callable[..., Any], name: str) -> Callable[[], None]: + return lambda: None + + def call( + self, + name: str, + arguments: tuple[list[Any], dict[str, Any]], + cb: Callable[[Any], None] | None, + ) -> Callable[[], None] | None: + return (lambda: None) if cb is not None else None + + def call_nowait(self, name: str, arguments: tuple[list[Any], dict[str, Any]]) -> None: + pass + + def start(self) -> None: + pass + + def stop(self) -> None: + pass + + +@pytest.fixture() +def module() -> TargetLockModule: + instance = TargetLockModule(rpc_transport=_NoopRPC, search_timeout_sec=0.5) + try: + yield instance + finally: + instance.stop() + + +def _make_detection( + detection_id: str, + class_id: str, + x1: float, + y1: float, + x2: float, + y2: float, +) -> Detection2D: + center_x = (x1 + x2) / 2.0 + center_y = (y1 + y2) / 2.0 + return Detection2D( + id=detection_id, + results_length=1, + header=Header(123.0, "camera_optical"), + bbox=BoundingBox2D( + center=Pose2D(position=Point2D(x=center_x, y=center_y), theta=0.0), + size_x=x2 - x1, + size_y=y2 - y1, + ), + results=[ + ObjectHypothesisWithPose( + hypothesis=ObjectHypothesis(class_id=class_id, score=0.9) + ) + ], + ) + + +def _make_array(*detections: Detection2D) -> Detection2DArray: + return Detection2DArray( + detections_length=len(detections), + header=Header(123.0, "camera_optical"), + detections=list(detections), + ) + + +def test_transition_unselected_to_locked(module: TargetLockModule) -> None: + selected = _make_array(_make_detection("target", "person", 10.0, 10.0, 40.0, 40.0)) + + module._on_selected_bbox(selected) + + assert module.get_lock_state()["state"] == "locked" + + +def test_transition_locked_to_searching(module: TargetLockModule) -> None: + selected = _make_array(_make_detection("target", "person", 10.0, 10.0, 40.0, 40.0)) + module._on_selected_bbox(selected) + + # No candidates and still inside timeout => searching + module._on_detections(_make_array()) + + assert module.get_lock_state()["state"] == "searching" + + +def test_transition_searching_to_locked_by_reacquire(module: TargetLockModule) -> None: + selected = _make_array(_make_detection("target", "person", 10.0, 10.0, 40.0, 40.0)) + module._on_selected_bbox(selected) + module._on_detections(_make_array()) + assert module.get_lock_state()["state"] == "searching" + + # Different id but same class and near last center => reacquire and lock + module._on_detections(_make_array(_make_detection("new-id", "person", 12.0, 12.0, 42.0, 42.0))) + + state = module.get_lock_state() + assert state["state"] == "locked" + assert state["target_id"] == "new-id" + + +def test_transition_searching_to_lost_after_timeout( + module: TargetLockModule, + monkeypatch: pytest.MonkeyPatch, +) -> None: + # Control monotonic time deterministically. + now = {"value": 100.0} + + def _monotonic() -> float: + return now["value"] + + monkeypatch.setattr("dimos.robot.custom.modules.target_lock_module.time.monotonic", _monotonic) + + selected = _make_array(_make_detection("target", "person", 10.0, 10.0, 40.0, 40.0)) + module._on_selected_bbox(selected) + + # No match and still inside timeout => searching + now["value"] = 100.1 + module._on_detections(_make_array()) + assert module.get_lock_state()["state"] == "searching" + + # Beyond timeout => lost + now["value"] = 101.0 + module._on_detections(_make_array()) + assert module.get_lock_state()["state"] == "lost" \ No newline at end of file From 791b7b173b6c8553a065758c2af3beced05c7fe4 Mon Sep 17 00:00:00 2001 From: Harold <20009626+HaroldGin931@users.noreply.github.com> Date: Thu, 28 May 2026 10:28:17 +0800 Subject: [PATCH 09/17] fix(custom): robust click selection, task lifecycle logging, and depth estimation - BBoxSelectionModule: add click_hit_padding_px and click_snap_distance_px so edge/small bbox clicks are more forgiving; nearest-bbox snap fallback for near-miss clicks - BBoxSelectionModule: downgrade per-click diagnostic lines to debug, keeping only key state-change lines at info - TargetLockModule: guard _on_detections publish paths against concurrent target-id changes (stale lock prevention) - BBoxDistanceBehaviorModule: add full task lifecycle logging (started / blocked / completed / ended / stopped) - BBoxDistanceBehaviorModule: suppress repeated 'task started' logs while already approaching same target; retain completed target id in done state to prevent same-target restart loops - BBoxDistanceBehaviorModule: adaptive depth estimation bbox expansion (depth_bbox_padding_px, depth_bbox_max_padding_px, depth_bbox_padding_step_px) to recover from sparse-pointcloud no-depth failures - websocket_server: downgrade null-field fallback and publish-detail logs to debug - tests: add regression tests for padding hit, nearest-snap, expanded-depth, and websocket null-z handling - README: document click-hit and depth-estimation tuning knobs with recommended adjustment order --- dimos/robot/custom/README.md | 491 ++++-------------- .../custom/modules/bbox_selection_module.py | 122 ++++- .../custom/modules/target_lock_module.py | 15 + .../tasks/bbox_distance_behavior_module.py | 87 +++- .../test_bbox_distance_behavior_module.py | 23 +- .../tests/test_bbox_selection_module.py | 62 +++ .../rerun/test_websocket_server.py | 31 ++ dimos/visualization/rerun/websocket_server.py | 47 +- 8 files changed, 475 insertions(+), 403 deletions(-) diff --git a/dimos/robot/custom/README.md b/dimos/robot/custom/README.md index 011b260977..cd39bfbb4d 100644 --- a/dimos/robot/custom/README.md +++ b/dimos/robot/custom/README.md @@ -2,87 +2,72 @@ ## 目录结构 -``` +```text dimos/robot/custom/ -├── modules/ # 纯业务逻辑,无 blueprint / vis 代码 -│ ├── bbox_selection_module.py # BBoxSelectionModule, BBoxSelectionConfig -│ ├── target_lock_module.py # TargetLockModule, TargetLockConfig -│ ├── yoloe_tracking_module.py # YoloeTrackingModule, YoloeTrackingConfig -│ └── go2_startup_self_check_module.py # Go2StartupSelfCheck, Go2StartupSelfCheckConfig -├── tasks/ # 任务实现:每个 task 自带自己的状态机 -│ └── bbox_distance_behavior_module.py # BBoxDistanceBehaviorModule, BBoxDistanceBehaviorConfig -├── visualization/ # Detection2DArray → Rerun 2D overlay 适配 -│ └── detection2d_overlay.py # detection_array_to_rerun / detections_overlay / -│ # selected_bbox_overlay / yoloe_overlay -├── blueprints/ # autoconnect 组装 + rerun config + requirements -│ ├── bbox_distance_follow.py # bbox_distance_follow blueprint -│ ├── yoloe_target_lock_distance_follow.py # 示例: YOLOE + selection + target lock + distance behavior -│ ├── yoloe_keyboard_teleop.py # yoloe-keyboard-teleop blueprint -│ ├── yoloe_tracking_test.py # yoloe_tracking_test blueprint -│ └── go2_startup_self_check.py # unitree_go2_startup_self_check blueprint -└── tests/ # 纯 pytest 单元测试,无需机器人硬件 - └── test_bbox_selection_module.py # BBoxSelectionModule 单元测试 -``` - -依赖方向:`blueprints/` → `modules/` + `tasks/` + `visualization/`;`tests/` → `modules/` + `tasks/` only。 - -## yoloe-keyboard-teleop - -`yoloe-keyboard-teleop` 在 `yoloe-tracking-test` 的基础上加入了键盘遥控,让你在模拟器(或真机)上手动驾驶 Go2 的同时实时观察 YOLOE 检测效果。 - -### 组成 - -- `unitree_go2_basic` -- `YoloeTrackingModule.blueprint()` -- `MovementManager.blueprint()` -- `KeyboardTeleop.blueprint(publish_only_when_active=True)` -- 专用 Rerun viewer overlay(与 `yoloe-tracking-test` 相同布局) +├── modules/ # 纯业务逻辑,无 blueprint / vis 代码 +│ ├── bbox_selection_module.py # BBoxSelectionModule, BBoxSelectionConfig +│ ├── target_lock_module.py # TargetLockModule, TargetLockConfig +│ ├── yoloe_tracking_module.py # YoloeTrackingModule, YoloeTrackingConfig +│ └── go2_startup_self_check_module.py # Go2StartupSelfCheck, Go2StartupSelfCheckConfig +├── tasks/ # 任务实现:每个 task 自带状态机 +│ └── bbox_distance_behavior_module.py # BBoxDistanceBehaviorModule, BBoxDistanceBehaviorConfig +├── visualization/ # Detection2DArray -> Rerun 2D overlay 适配 +│ └── detection2d_overlay.py # detection_array_to_rerun / detections_overlay / +│ # selected_bbox_overlay / yoloe_overlay +├── blueprints/ # autoconnect 组装 + rerun config + requirements +│ ├── bbox_distance_follow.py # 最小距离任务蓝图 +│ ├── yoloe_target_lock_distance_follow.py # 推荐闭环示例:YOLOE + selection + target lock + task +│ ├── yoloe_keyboard_teleop.py # 键盘遥控 + YOLOE(非本文重点) +│ ├── yoloe_tracking_test.py # 仅检测/跟踪验证 +│ └── go2_startup_self_check.py # 开机自检蓝图 +└── tests/ + ├── test_bbox_distance_behavior_module.py + └── test_target_lock_module.py +``` + +依赖方向:`blueprints/` -> `modules/` + `tasks/` + `visualization/`;`tests/` -> `modules/` + `tasks/`。 + +## 如何最小化测试 + +建议按下面顺序做最小验证,能最快定位问题在哪一层。 + +### 1. 先跑 task + lock 单元测试 -数据流: - -```text -KeyboardTeleop.cmd_vel -> MovementManager.tele_cmd_vel -> MovementManager.cmd_vel -> GO2Connection.cmd_vel -unitree_go2_basic.color_image -> YoloeTrackingModule -> /color_image/yoloe_detections -> Rerun overlay +```bash +source .venv/bin/activate +pytest dimos/robot/custom/tests/test_bbox_distance_behavior_module.py dimos/robot/custom/tests/test_target_lock_module.py -q ``` -### 模型准备 - -与 `yoloe-tracking-test` 相同,需预先准备 YOLOE 模型: +### 2. 再验证 blueprint 自动注册 ```bash -git lfs pull --include data/.lfs/models_yoloe.tar.gz -uv run python -c 'from dimos.utils.data import get_data; print(get_data("models_yoloe"))' +source .venv/bin/activate +pytest dimos/robot/test_all_blueprints_generation.py ``` -### 启动 +### 3. 最后跑最小闭环蓝图 ```bash -# 模拟器(可实际控制移动) -dimos --simulation run yoloe-keyboard-teleop - -# Replay(检测效果只读,机器人不移动) -dimos --replay run yoloe-keyboard-teleop - -# 真机 -dimos --robot-ip 192.168.123.161 --rerun-open native run yoloe-keyboard-teleop +.venv/bin/dimos --replay run yoloe-target-lock-distance-follow ``` -启动后会弹出一个 pygame 窗口,焦点在该窗口时键盘输入生效: +这个顺序可以把问题快速归类到: +- 单模块逻辑 +- 蓝图注册/装配 +- 运行时流转 -| 按键 | 动作 | -| ------- | -------------------- | -| W / S | 前进 / 后退 | -| A / D | 左转 / 右转 | -| Shift | 速度加倍(2×) | -| Ctrl | 慢速模式(0.5×) | -| Space | 发布零 Twist(急停) | -| Esc / Q | 退出键盘窗口 | +## 当前 blueprint 状态机 -## 双层状态机(Detector-agnostic) +### 1) yoloe-target-lock-distance-follow(推荐闭环) -`BBoxSelectionModule` 只负责选择,不做目标丢失恢复。目标连续性由 `TargetLockModule` 负责,任务行为由任务模块(当前示例是 `BBoxDistanceBehaviorModule`)负责。 +组成: +- `unitree_go2_basic` +- `YoloeTrackingModule.blueprint()` +- `BBoxSelectionModule.blueprint()` +- `TargetLockModule.blueprint()` +- `BBoxDistanceBehaviorModule.blueprint(approach_distance=0.2)` -### TargetLock 状态机 +TargetLock 状态机: ```mermaid stateDiagram-v2 @@ -96,7 +81,7 @@ stateDiagram-v2 searching --> unselected: clear_selection / selected_bbox 为空 ``` -### 模块间调用关系 +模块消息流: ```mermaid flowchart LR @@ -106,16 +91,14 @@ flowchart LR S --> USB[user_selected_bbox] D --> T[TargetLockModule] USB --> T - T --> LB[locked_bbox_to_selected_bbox] + T --> LB[locked_bbox] LB --> B[BBoxDistanceBehaviorModule] L[lidar] --> B I[camera_info] --> B B --> V[cmd_vel] ``` -### Visualization 与 TargetLock 的集成链路 - -这部分描述的是“在 dimos-view 中点击 -> 选框 -> 锁定 -> 叠加显示”的完整闭环。 +Visualization 点击闭环: ```mermaid flowchart LR @@ -126,343 +109,97 @@ flowchart LR F[detections] --> G[TargetLockModule._on_detections] E --> H[locked_bbox] G --> H - F --> I[/color_image/yoloe_detections] - D --> J[/color_image/selected_bbox] H --> K[/color_image/locked_bbox] - I --> L[RerunBridge -> world/color_image/yoloe_detections] - J --> M[RerunBridge -> world/color_image/selected_bbox] - K --> N[RerunBridge -> world/color_image/locked_bbox] - L --> O[yoloe_overlay] - M --> P[selected_bbox_overlay] - N --> P -``` - -关键代码出处: - -- 点击选择处理:`BBoxSelectionModule._on_clicked_point()` 与 `_publish_selected()` - - `dimos/robot/custom/modules/bbox_selection_module.py` -- 锁定状态机处理:`TargetLockModule._on_selected_bbox()` / `_on_detections()` / `_set_state()` - - `dimos/robot/custom/modules/target_lock_module.py` -- 2D overlay 转换:`detection_array_to_rerun()`、`yoloe_overlay()`、`selected_bbox_overlay()` - - `dimos/robot/custom/visualization/detection2d_overlay.py` -- overlay 与实体路径绑定(`visual_override`)以及 topic 映射(`transports`) - - `dimos/robot/custom/blueprints/yoloe_target_lock_distance_follow.py` - -显示层约定: - -- `yoloe_overlay`:青色,`draw_order=95` -- `selected_bbox_overlay`:绿色,`draw_order=100` -- `locked_bbox` 当前也使用 `selected_bbox_overlay`,所以在 Camera 视图里会以绿色高优先级覆盖显示。 - -注意:`detection_array_to_rerun()` 在输入空数组时会返回空 `Boxes2D`,这会清除 viewer 中的旧框;因此 `TargetLockModule` 在 `searching/lost` 时发布空 `locked_bbox`,视觉上会立即反映为锁定框消失。 - -## 示例蓝图:yoloe-target-lock-distance-follow - -新增示例蓝图 `blueprints/yoloe_target_lock_distance_follow.py`,用于演示双层拆分: - -- 检测层:`YoloeTrackingModule` -- 选择层:`BBoxSelectionModule` -- 目标锁定层:`TargetLockModule` -- 任务层(示例任务):`BBoxDistanceBehaviorModule` - -数据流: - -```text -unitree_go2_basic.color_image - -> YoloeTrackingModule.detections - -> BBoxSelectionModule.detections + TargetLockModule.detections - -BBoxSelectionModule.selected_bbox - -> (remap) user_selected_bbox - -> (remap) TargetLockModule.selected_bbox - -> TargetLockModule.locked_bbox - -> (remap) BBoxDistanceBehaviorModule.selected_bbox - -> BBoxDistanceBehaviorModule.cmd_vel - -> GO2Connection.cmd_vel -``` - -该示例蓝图同时发布: - -- `/color_image/yoloe_detections` -- `/color_image/selected_bbox` -- `/color_image/locked_bbox` - -便于在 Rerun 中同时对比:检测结果、用户选择结果、锁定结果。 - -### TargetLockModule(示例实现) - -职责: - -- 输入 `detections` 和 `selected_bbox`(在示例蓝图中经由 `user_selected_bbox` remap 到 `selected_bbox`)。 -- 输出 `locked_bbox`(单目标锁定结果)和 `lock_status`(JSON 字符串状态)。 -- 不做 detector 推理,不做任务行为决策。 - -配置: - -- `search_timeout_sec=3.0` -- `reacquire_by_class=True` - -状态: - -- `unselected` -- `locked` -- `searching` -- `lost` - -RPC: - -- `clear_lock() -> str` -- `get_lock_state() -> dict[str, Any]` - -重找策略(当前实现): - -- 优先按 tracking id 直接匹配。 -- id 匹配失败且仍在超时时间内: - 1. 若开启 `reacquire_by_class`,先按 `class_id` 过滤候选; - 2. 再按 bbox 中心点与上次位置的欧氏距离最近原则重找。 -- 超时未找回进入 `lost`,并输出空 `locked_bbox`。 - -### 运行示例蓝图 - -该示例尚未注册到 `all_blueprints.py`,可直接以模块方式启动: - -```bash -.venv/bin/python -m dimos.robot.custom.blueprints.yoloe_target_lock_distance_follow ``` -## yoloe-tracking-test - -`yoloe-tracking-test` 是一个只用于验证 YOLOE tracking 效果的 Go2 replay blueprint。它不接距离控制、不接 Agent/MCP/skill,只把 Go2 `color_image` 输入到 `YoloeTrackingModule`,并把 YOLOE 的 `Detection2DArray` 发布到 `/color_image/yoloe_detections`。 - -### 组成 - -- `unitree_go2_basic` -- `YoloeTrackingModule.blueprint()` -- 专用 Rerun viewer overlay - -数据流: - -```text -unitree_go2_basic.color_image - -> YoloeTrackingModule.color_image - -> YoloeTrackingModule.detections - -> /color_image/yoloe_detections - -> Rerun Camera overlay -``` - -### 离线模型准备 - -运行 `yoloe-tracking-test` 时不会拉取或解压 YOLOE 模型。需要先在有网络的环境准备模型: - -```bash -git lfs pull --include data/.lfs/models_yoloe.tar.gz -uv run python -c 'from dimos.utils.data import get_data; print(get_data("models_yoloe"))' -ls -lh data/models_yoloe/yoloe-11s-seg-pf.pt -``` - -如果 `data/models_yoloe/yoloe-11s-seg-pf.pt` 不存在,blueprint 会在部署前失败并打印同一组预处理命令。真机或离线 replay 环境只运行 blueprint,不做模型下载。 - -### 启动 - -```bash -.venv/bin/dimos --replay run yoloe-tracking-test -``` - -Rerun Camera 视图会显示 `world/color_image/yoloe_detections`。bbox 标签使用 detection id;当 YOLOE 返回 tracking id 时,可以直接观察同一个目标跨帧 id 是否稳定。 - -## bbox-distance-follow - -`bbox-distance-follow` 是一个最小可启动的 Go2 blueprint,用于验证 “检测多个 bbox -> 用户选择一个 bbox -> 根据 selected bbox + lidar + camera_info 控制 Go2 距离” 这条链路。 - -这个 blueprint 只保留 DimOS Module/RPC,不接 `@skill`、Agent、Prompt、MCP 或新的 UI 模块。它可以通过 `dimos run bbox-distance-follow` 启动,也可以在 replay 下通过 viewer 观察 selected bbox overlay。 - -### 组成 +### 2) bbox-distance-follow(最小任务链路) +组成: - `unitree_go2_basic` - `Detection2DModule.blueprint(camera_info=GO2Connection.camera_info_static, publish_detection_images=False)` - `BBoxSelectionModule.blueprint()` - `BBoxDistanceBehaviorModule.blueprint()` -全局配置: - -```python -.global_config(n_workers=6, robot_model="unitree_go2") -``` - -### 数据流 +任务状态机: ```text -unitree_go2_basic.color_image - -> Detection2DModule.color_image - -> Detection2DModule.detections - -> BBoxSelectionModule.detections - -> BBoxSelectionModule.selected_bbox - -> BBoxDistanceBehaviorModule.selected_bbox - -> BBoxDistanceBehaviorModule.cmd_vel - -> GO2Connection.cmd_vel - -unitree_go2_basic.lidar - -> BBoxDistanceBehaviorModule.lidar - -unitree_go2_basic.camera_info - -> BBoxDistanceBehaviorModule.camera_info - -dimos-viewer Camera click - -> RerunWebSocketServer.clicked_point - -> BBoxSelectionModule.clicked_point - -> BBoxSelectionModule.selected_bbox +idle -> approaching -> done ``` -`Detection2DModule.detections` 明确发布到 LCM topic `/color_image/detections`,`selected_bbox` 明确发布到 LCM topic `/color_image/selected_bbox`。RerunBridge 会把它们映射到 `world/color_image/detections` 和 `world/color_image/selected_bbox`,本 blueprint 对这两个实体路径配置了专用 `visual_override`,把 YOLO 候选 bbox 显示为黄色框,把 selected bbox 显示为绿色框。Go2 viewer 的 Camera view origin 是 `world/color_image`,所以这些 bbox 会作为相机图像子实体显示在 Camera 视图上。 +状态转移规则: +- 选中 bbox(非空)-> `approaching` +- 到达 `0.2m ± 0.05m` -> `done` +- 选择清空(空 bbox)-> `idle` -`publish_detection_images=False` 是有意设置:`Detection2DModule.detected_image_0/1/2` 当前是 cropped detection images,不是原始相机图像上的 bbox overlay。这个 blueprint 直接在 Rerun Camera 视图里渲染 bbox,避免 cropped images 出现在 3D view 中并触发无 Pinhole 的 2D visualizer warning。 +## Task Module -### BBoxSelectionModule +`BBoxDistanceBehaviorModule` 位于 `tasks/`,职责是“执行任务”,不是“做检测或选择”。 职责: - -- 消费 `Detection2DModule.detections` 的多 bbox。 -- 消费 dimos-viewer 发回的 `clicked_point`,把 Camera 视图里的像素点击映射到最新一帧 bbox。 -- 保存最新一帧 detections。 -- 通过 RPC 保存用户选择的 `index` 或 `id`。 -- 通过 viewer 点击保存用户选择的 `index`;如果点击在 Camera 视图但没有命中任何 bbox,会清空当前选择。 -- 每帧只转发当前选中的 detection。 -- 如果当前帧找不到选中 bbox,发布空 `Detection2DArray`,避免下游或 viewer 复用旧 bbox。 - -它不创建 detector、不跑 YOLO、不调用 VLM、不做 ReID/EdgeTAM,也不负责目标丢失恢复。 +- 输入:`selected_bbox` + `lidar` + `camera_info` +- 输出:`cmd_vel` + `behavior_status` +- 行为目标:点中目标后自动靠近到 0.2m 并结束 RPC: - -- `list_candidates() -> list[dict[str, Any]]` -- `select_bbox(index: int | None = None, id: str | None = None) -> str` -- `clear_selection() -> str` - -候选字段: - -- `index` -- `id` -- `bbox: [x1, y1, x2, y2]` -- `confidence` -- `class_id` - -### BBoxDistanceBehaviorModule(task) - -职责: - -- 消费 `selected_bbox + lidar + camera_info`。 -- 输出 `cmd_vel` 和 `behavior_status`。 -- 只负责“点中选框后自动靠近到 0.2m 并结束”。 - -行为方式: - -- `BBoxSelectionModule` 一旦输出非空 `selected_bbox`,行为模块自动进入 `approaching`。 -- 当估计距离进入 `0.2m ± 0.05m` 容差时,行为模块进入 `done` 并持续输出零速度。 -- 如果 `selected_bbox` 被清空,行为模块回到 `idle` 并停止输出。 - -RPC: - - `start_bbox_distance_behavior(approach_distance=None) -> str` - `stop_bbox_distance_behavior() -> str` 默认参数: - - `command_hz = 20.0` - `approach_distance = 0.2` - `depth_percentile = 25.0` - `max_linear_speed = 0.45` - `max_angular_speed = 0.8` -状态机: - -```text -idle -> approaching -> done -``` - -`selected_bbox` 进入后模块就直接开始靠近。bbox 为空、camera_info 缺失、lidar 距离无效时发布 `Twist.zero()` 并等待。完成或停止时发布 `Twist.zero()`。 - -lidar 距离 MVP 直接用 camera intrinsics 将点云投影到 bbox,取 `depth_percentile` 深度;如果实际 lidar 坐标系没有和相机对齐,后续再补 TF 修正。 - -### 启动 - -`bbox-distance-follow` 复用 `Detection2DModule` 的默认 YOLO detector。真机测试通常断网,所以需要先在有网络的环境预下载 `yolo11n.pt`: - -```bash -mkdir -p data/models_yolo -curl -L -o data/models_yolo/yolo11n.pt https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo11n.pt -``` - -确认文件存在: - -```bash -ls -lh data/models_yolo/yolo11n.pt -``` - -如果这个文件缺失,blueprint 会在部署模块前直接报错并打印同一条预下载命令,避免 Ultralytics 在真机断网时隐式下载失败。 - -CLI 全局参数必须放在 `run` 前面,例如 `--robot-ip`、`--replay`、`--rerun-open` 都是全局参数。 - -```bash -.venv/bin/dimos --replay run bbox-distance-follow -``` - -或连接真实 Go2: - -```bash -.venv/bin/dimos --robot-ip 192.168.123.161 --rerun-open native run bbox-distance-follow -``` - -如需后台运行: - -```bash -.venv/bin/dimos --replay run bbox-distance-follow --daemon -``` - -### 命令行 RPC 选择 bbox - -列出候选: - -```bash -.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule; c=RPCClient.remote(BBoxSelectionModule); print(c.list_candidates()); c.stop_rpc_client()' -``` - -选择第 0 个 bbox: +点击和深度调参(实机/仿真常用): +- `BBoxSelectionConfig.click_hit_padding_px`:点击命中 bbox 的边缘扩张像素。 +- `BBoxSelectionConfig.click_snap_distance_px`:未命中时吸附到最近 bbox 的最大像素距离。 +- `BBoxDistanceBehaviorConfig.depth_bbox_padding_px`:深度采样时 bbox 初始扩张像素。 +- `BBoxDistanceBehaviorConfig.depth_bbox_max_padding_px`:深度采样允许的最大扩张像素。 +- `BBoxDistanceBehaviorConfig.depth_bbox_padding_step_px`:深度采样逐级扩张步长。 + +推荐调参顺序: +1. 点不中 bbox:先增大 `click_hit_padding_px`,再增大 `click_snap_distance_px`。 +2. 点中了但不前进(常见 `no_depth_for_target`):先增大 `depth_bbox_padding_px`,再增大 `depth_bbox_max_padding_px`。 +3. 深度跳变明显:降低 `depth_bbox_max_padding_px` 或增大 `depth_percentile`。 + +边界行为: +- bbox 为空:发布 `Twist.zero()` 并回到 `idle` +- 深度无效:发布 `Twist.zero()` 并等待 +- 达到目标或 stop:发布 `Twist.zero()` + +## 排查故障 + +### 1. 看不到框 +- 检查检测流是否有输出(`detections` 是否持续更新)。 +- 检查 overlay 绑定是否正确(`/color_image/yoloe_detections`、`/color_image/selected_bbox`、`/color_image/locked_bbox`)。 +- replay 场景下确认模型文件存在。 + +### 2. 点击后不进入 approaching +- 检查 `clicked_point` 是否到达 `BBoxSelectionModule`。 +- 检查 `selected_bbox` 是否非空。 +- 检查 `behavior_status` 是否切到 `approaching`。 + +### 3. 锁定后很快丢失 +- 检查 tracking id 是否稳定。 +- 检查 `TargetLockModule.search_timeout_sec` 是否过短。 +- 检查 `reacquire_by_class` 是否开启。 +- 观察 `lock_status` 是否进入 `searching/lost`。 + +### 4. 不前进但没 done +- 检查点云是否正确投影到 bbox。 +- 检查 `camera_info` 是否匹配当前相机。 +- 检查 bbox 是否过小或位置异常导致深度采样失败。 + +### 5. 注册/运行异常 +- 重新执行: ```bash -.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule; c=RPCClient.remote(BBoxSelectionModule); print(c.select_bbox(index=0)); c.stop_rpc_client()' +source .venv/bin/activate +pytest dimos/robot/test_all_blueprints_generation.py ``` -按 id 选择 bbox: - -```bash -.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule; c=RPCClient.remote(BBoxSelectionModule); print(c.select_bbox(id="0")); c.stop_rpc_client()' -``` - -清除选择: - -```bash -.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule; c=RPCClient.remote(BBoxSelectionModule); print(c.clear_selection()); c.stop_rpc_client()' -``` - -停止距离行为: - -```bash -.venv/bin/python -c 'from dimos.core.rpc_client import RPCClient; from dimos.robot.custom.tasks.bbox_distance_behavior_module import BBoxDistanceBehaviorModule; c=RPCClient.remote(BBoxDistanceBehaviorModule); print(c.stop_bbox_distance_behavior()); c.stop_rpc_client()' -``` - -### Viewer 点击选择 - -启动 replay + viewer 后,Camera 视图里会显示 `world/color_image`。`Detection2DModule` 发布的全部 YOLO 候选框会显示为黄色 bbox。通过命令行 RPC 调用 `select_bbox(index=...)` 后,`BBoxSelectionModule` 会发布 `/color_image/selected_bbox`,本 blueprint 的专用 visual override 会让 RerunBridge 在 `world/color_image/selected_bbox` 上显示绿色 bbox。 - -也可以直接在 dimos-viewer 的 Camera 视图里点击黄色 bbox。点击会沿用 viewer 已有的 WebSocket 回传链路变成 `clicked_point`,`BBoxSelectionModule` 会用点击像素坐标命中最新一帧候选 bbox,并立即发布对应的 `selected_bbox`。点击 Camera 视图里没有 bbox 的位置会清空当前选择,让行为模块收到空 selected bbox 后停止输出运动命令。 - -当 selected bbox 在后续帧中移动,overlay 会跟随当前帧 detection 更新;当选择被清除或当前帧找不到选中 bbox,模块会发布空 `Detection2DArray`,viewer 中旧框会消失。 - -### 非目标 - -- 不新增通用 `dimos rpc` CLI。 -- 不接 Agent、Prompt、MCP、McpServer 或 McpClient。 -- 不新增 `@skill`。 -- 不在 `BBoxSelectionModule` 内实现 YOLO、ReID、EdgeTAM 或目标丢失恢复。 -- 不在 `BBoxDistanceBehaviorModule` 内做人识别或 bbox 选择。 - -后续如果 lidar 和 camera 坐标系不一致,可在点云投影前补 TF 对齐。 +### 6. 建议排查顺序 +1. 单测:`test_bbox_distance_behavior_module.py` + `test_target_lock_module.py` +2. 注册:`test_all_blueprints_generation.py` +3. 运行:`dimos --replay run yoloe-target-lock-distance-follow` diff --git a/dimos/robot/custom/modules/bbox_selection_module.py b/dimos/robot/custom/modules/bbox_selection_module.py index 6bc842b64a..2f8654f964 100644 --- a/dimos/robot/custom/modules/bbox_selection_module.py +++ b/dimos/robot/custom/modules/bbox_selection_module.py @@ -15,12 +15,16 @@ ) from dimos.msgs.std_msgs.Header import Header # 导入 DimOS Header 便捷构造,用于空检测头 from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray # 导入 2D 检测数组消息类型 +from dimos.utils.logging_config import setup_logger _DEFAULT_FRAME_ID = "camera_optical" # 定义空 Detection2DArray 使用的默认坐标系 +logger = setup_logger() + class BBoxSelectionConfig(ModuleConfig): # 定义 bbox 选择模块配置,当前 MVP 暂无额外参数 - pass # 当前选择逻辑全部由 RPC 或 viewer 点击驱动,不需要额外配置项 + click_hit_padding_px: float = 6.0 + click_snap_distance_px: float = 14.0 class BBoxSelectionModule(Module): # 定义 bbox 选择模块,只负责从多 bbox 中转发单个 bbox @@ -35,6 +39,7 @@ def __init__(self, **kwargs: Any) -> None: # 定义构造函数,接收框架 self._latest_detections: Detection2DArray | None = None # 保存最新一帧多 bbox 检测结果 self._selected_index: int | None = None # 保存通过 index 选择的目标序号 self._selected_id: str | None = None # 保存通过 id 选择的目标 id + self._last_logged_selection_signature: tuple[str, str | None, int | None] | None = None @rpc # 标记 start() 是框架生命周期 RPC def start(self) -> None: # 定义模块启动逻辑 @@ -90,36 +95,87 @@ def _on_detections(self, detections: Detection2DArray) -> None: # 处理检测 self._publish_selected(detections) # 每帧根据当前选择转发单个 bbox 或空 bbox def _on_clicked_point(self, point: PointStamped) -> None: # 处理 dimos-viewer 发回来的点击点 + logger.debug( + "BBoxSelectionModule: received click " + f"frame_id={point.frame_id!r} x={point.x} y={point.y} z={point.z}" + ) if not self._is_color_image_click(point): # 只接受 Camera/color_image 视图里的点击,避免误吃 3D 点击 + logger.info("BBoxSelectionModule: ignoring non-color-image click") return # 非相机点击不改变当前 bbox 选择 if not (math.isfinite(point.x) and math.isfinite(point.y)): # 检查点击像素坐标是否可用 + logger.info("BBoxSelectionModule: ignoring click with non-finite coordinates") return # 无效点击直接忽略,不清除当前选择 with self._lock: # 加锁读取最新检测帧 detections = self._latest_detections # 复制最新 detections,后续命中测试不持锁 if detections is None: # 如果 detector 还没有发布过任何候选 bbox + logger.info("BBoxSelectionModule: no detections available yet for click selection") return # 暂时无法选择,等待下一帧 detections + logger.debug( + "BBoxSelectionModule: matching click against detections " + f"count={len(detections.detections)} frame_id={getattr(detections.header, 'frame_id', '')!r}" + ) selected_index = self._find_clicked_detection_index( # 在最新 detections 中查找被点击命中的 bbox detections, # 传入最新一帧候选 bbox float(point.x), # 传入 viewer 点击的 x 像素坐标 float(point.y), # 传入 viewer 点击的 y 像素坐标 + hit_padding_px=float(self.config.click_hit_padding_px), + snap_distance_px=float(self.config.click_snap_distance_px), ) # 结束命中测试 + if selected_index is None: + logger.info("BBoxSelectionModule: click did not hit any bbox; clearing selection") + else: + selected = detections.detections[selected_index] + x1, y1, x2, y2 = self._bbox_corners(selected) + selected_id = self._stable_detection_id(selected, selected_index) + logger.info( + "BBoxSelectionModule: click matched bbox " + f"index={selected_index} id={self._detection_id(selected, selected_index)!r} " + f"bbox=({x1:.1f}, {y1:.1f}, {x2:.1f}, {y2:.1f})" + ) + with self._lock: # 加锁更新选择状态 - self._selected_index = selected_index # 命中则保存 index,未命中则清空 index - self._selected_id = None # viewer 点击按当前帧 index 选择,不沿用旧 id 选择 + if selected_index is None: + self._selected_index = None + self._selected_id = None + else: + self._selected_index = selected_index + self._selected_id = selected_id + + if selected_index is not None: + if selected_id is not None: + logger.debug( + "BBoxSelectionModule: tracking clicked bbox by stable id " + f"id={selected_id!r}" + ) + else: + logger.debug( + "BBoxSelectionModule: clicked bbox has no stable id; falling back to index " + f"index={selected_index}" + ) self._publish_selected(detections) # 立即刷新 selected_bbox,让机器人和 viewer 同步看到选择结果 def _publish_selected(self, detections: Detection2DArray) -> None: # 根据当前选择发布 selected_bbox selected = self._find_selected_detection(detections) # 在当前帧里查找被选中的检测 if selected is None: # 如果当前帧没有选中目标或选择还不存在 + self._log_selection_state(None, None) self.selected_bbox.publish(self._empty_detection_array(detections)) # 发布空数组,避免下游复用旧 bbox return # 结束本帧处理 + selected_index = next( + ( + index + for index, detection in enumerate(detections.detections) + if detection is selected + ), + -1, + ) + self._log_selection_state(selected, selected_index) msg = Detection2DArray( # 构造只包含一个 detection 的消息 detections_length=1, # 设置检测数量为 1 header=detections.header, # 复用当前帧 header,保持时间和坐标系一致 @@ -167,6 +223,13 @@ def _detection_id(detection: Any, index: int) -> str: # 读取 detection id, detection_id = getattr(detection, "id", "") # 读取 detection.id,缺失时使用空字符串 return str(detection_id) if detection_id else str(index) # 返回真实 id 或 index 字符串 + @staticmethod + def _stable_detection_id(detection: Any, index: int) -> str | None: + detection_id = str(getattr(detection, "id", "")).strip() + if not detection_id or detection_id == "-1": + return None + return detection_id + @staticmethod # 声明这是不依赖实例状态的工具函数 def _is_color_image_click(point: PointStamped) -> bool: # 判断点击是否来自相机图像或其 bbox overlay frame_parts = point.frame_id.strip("/").split("/") # 把 entity_path 拆成路径片段,兼容有无前导斜杠 @@ -178,17 +241,48 @@ def _find_clicked_detection_index( # 查找包含点击像素的 detection inde detections: Detection2DArray, # 输入最新一帧候选 bbox x: float, # 输入点击的 x 像素坐标 y: float, # 输入点击的 y 像素坐标 + hit_padding_px: float = 0.0, + snap_distance_px: float = 0.0, ) -> int | None: # 返回命中的 bbox index,未命中时返回 None hits: list[tuple[float, int]] = [] # 保存命中的 bbox 面积和 index,用于重叠时选更小框 + nearest: tuple[float, int] | None = None for index, detection in enumerate(detections.detections): # 遍历当前帧所有候选 bbox x1, y1, x2, y2 = cls._bbox_corners(detection) # 读取当前 bbox 的 xyxy 像素范围 left, right = sorted((x1, x2)) # 归一化左右边界,防止异常 bbox 坐标反向 top, bottom = sorted((y1, y2)) # 归一化上下边界,防止异常 bbox 坐标反向 - if left <= x <= right and top <= y <= bottom: # 如果点击点落在当前 bbox 内 + padded_left = left - hit_padding_px + padded_right = right + hit_padding_px + padded_top = top - hit_padding_px + padded_bottom = bottom + hit_padding_px + + if padded_left <= x <= padded_right and padded_top <= y <= padded_bottom: # 如果点击点落在当前 bbox 内 area = max((right - left) * (bottom - top), 0.0) # 计算 bbox 面积,重叠时优先小框 hits.append((area, index)) # 记录命中的候选 bbox + # 如果没有直接命中,记录离 bbox 的最近距离,用于吸附到近邻小目标。 + dx = 0.0 + if x < left: + dx = left - x + elif x > right: + dx = x - right + + dy = 0.0 + if y < top: + dy = top - y + elif y > bottom: + dy = y - bottom + + distance_sq = dx * dx + dy * dy + if nearest is None or distance_sq < nearest[0]: + nearest = (distance_sq, index) + if not hits: # 如果没有任何 bbox 包含点击点 + if nearest is None: + return None + if snap_distance_px <= 0.0: + return None + if nearest[0] <= snap_distance_px * snap_distance_px: + return nearest[1] return None # 返回 None,调用方会清空当前选择 return min(hits)[1] # 多个 bbox 重叠时选择面积最小的那个 @@ -216,6 +310,26 @@ def _best_result(detection: Any) -> tuple[float, str | None]: # 读取 detectio class_id = getattr(hypothesis, "class_id", None) # 读取类别 id,缺失时为 None return confidence, class_id # 返回置信度和类别 id + def _log_selection_state(self, selected: Any | None, selected_index: int | None) -> None: + if selected is None: + signature = ("empty", None, None) + if signature == self._last_logged_selection_signature: + return + self._last_logged_selection_signature = signature + logger.info("BBoxSelectionModule: publishing empty selected_bbox") + return + + detection_id = self._detection_id(selected, max(selected_index if selected_index is not None else 0, 0)) + signature = ("selected", detection_id, selected_index) + if signature == self._last_logged_selection_signature: + return + + self._last_logged_selection_signature = signature + logger.info( + "BBoxSelectionModule: publishing selected_bbox " + f"index={selected_index} id={detection_id!r}" + ) + __all__ = [ # 声明这个文件希望对外暴露的名字 "BBoxSelectionConfig", # 暴露选择模块配置 diff --git a/dimos/robot/custom/modules/target_lock_module.py b/dimos/robot/custom/modules/target_lock_module.py index 8ddf5ba37b..51213998a5 100644 --- a/dimos/robot/custom/modules/target_lock_module.py +++ b/dimos/robot/custom/modules/target_lock_module.py @@ -111,6 +111,9 @@ def _on_detections(self, detections: Detection2DArray) -> None: matched = self._find_by_id(detections, target_id) if matched is not None: + with self._lock: + if self._target_id != target_id: + return self._update_lock_from_detection(matched, time.monotonic()) self.locked_bbox.publish(self._single_detection_array(matched, detections.header)) self._set_state("locked") @@ -118,21 +121,33 @@ def _on_detections(self, detections: Detection2DArray) -> None: now = time.monotonic() if last_seen_at is None: + with self._lock: + if self._target_id != target_id: + return self.locked_bbox.publish(self._empty_detection_array(detections.header)) self._set_state("searching") return if now - last_seen_at > max(self.config.search_timeout_sec, 0.0): + with self._lock: + if self._target_id != target_id: + return self.locked_bbox.publish(self._empty_detection_array(detections.header)) self._set_state("lost") return reacquired = self._reacquire_candidate(detections, target_class_id, last_center) if reacquired is None: + with self._lock: + if self._target_id != target_id: + return self.locked_bbox.publish(self._empty_detection_array(detections.header)) self._set_state("searching") return + with self._lock: + if self._target_id != target_id: + return self._update_lock_from_detection(reacquired, now) self.locked_bbox.publish(self._single_detection_array(reacquired, detections.header)) self._set_state("locked") diff --git a/dimos/robot/custom/tasks/bbox_distance_behavior_module.py b/dimos/robot/custom/tasks/bbox_distance_behavior_module.py index 6b0efc8e47..967624a06d 100644 --- a/dimos/robot/custom/tasks/bbox_distance_behavior_module.py +++ b/dimos/robot/custom/tasks/bbox_distance_behavior_module.py @@ -37,6 +37,9 @@ class BBoxDistanceBehaviorConfig(ModuleConfig): # 定义 bbox 距离行为模 depth_percentile: float = 25.0 # bbox 内点云深度百分位,降低远处离群点影响 max_linear_speed: float = 0.45 # 最大线速度,单位 m/s max_angular_speed: float = 0.8 # 最大角速度,单位 rad/s + depth_bbox_padding_px: float = 12.0 # 距离估计时对 bbox 做像素扩张,提升稀疏点云命中率 + depth_bbox_max_padding_px: float = 72.0 # 距离估计失败时允许继续扩张 bbox 的最大像素 + depth_bbox_padding_step_px: float = 12.0 # 逐级扩张 bbox 的步长像素 class BBoxDistanceBehaviorModule(Module): # 定义距离行为模块,只消费 selected bbox、lidar 和 camera_info @@ -58,6 +61,7 @@ def __init__(self, **kwargs: Any) -> None: # 定义构造函数,接收框架 self._latest_lidar: PointCloud2 | None = None # 保存最新 lidar 点云 self._latest_camera_info: CameraInfo | None = None # 保存最新 camera_info self._active_approach_distance = self.config.approach_distance # 保存本次行为使用的靠近距离 + self._last_block_reason: str | None = None # 记录上一次阻塞原因,避免重复刷日志 @rpc # 标记 start() 是框架生命周期 RPC def start(self) -> None: # 定义模块启动逻辑 @@ -72,14 +76,20 @@ def start(self) -> None: # 定义模块启动逻辑 daemon=True, # 设置守护线程,进程退出时不会被它卡住 ) # 结束线程参数 self._thread.start() # 启动后台命令发布线程 + logger.info( + "BBoxDistanceBehaviorModule: task loop started " + f"command_hz={self.config.command_hz} approach_distance={self.config.approach_distance}" + ) self._publish_status("idle") # 发布初始状态 @rpc # 标记 stop() 是框架生命周期 RPC def stop(self) -> None: # 定义模块停止逻辑 + logger.info("BBoxDistanceBehaviorModule: stopping task loop") self._stop_event.set() # 通知后台线程退出 self.cmd_vel.publish(Twist.zero()) # 停止时立即发布零速度 if self._thread is not None and self._thread.is_alive(): # 如果后台线程存在且仍在运行 self._thread.join(DEFAULT_THREAD_JOIN_TIMEOUT) # 等待后台线程退出,但最多等默认超时 + logger.info("BBoxDistanceBehaviorModule: task loop stopped") super().stop() # 调用父类停止逻辑,释放订阅和 transport @rpc # 标记 start_bbox_distance_behavior() 可通过 DimOS RPC 调用 @@ -91,16 +101,27 @@ def start_bbox_distance_behavior( # 定义行为启动 RPC self._active_approach_distance = self.config.approach_distance if approach_distance is None else float(approach_distance) # 设置本次靠近距离 self._state = "approaching" # 进入靠近阶段 + logger.info( + "BBoxDistanceBehaviorModule: task started by RPC " + f"approach_distance={self._active_approach_distance}" + ) + self._publish_status("approaching") # 发布状态变化 return "bbox distance behavior started" # 返回启动确认 @rpc # 标记 stop_bbox_distance_behavior() 可通过 DimOS RPC 调用 def stop_bbox_distance_behavior(self) -> str: # 定义行为停止 RPC + with self._lock: + previous_target_id = self._active_target_id with self._lock: # 加锁更新状态机 self._state = "idle" # 回到 idle 状态 self._active_target_id = None # 清空当前目标 id self.cmd_vel.publish(Twist.zero()) # 行为停止时发布零速度 + logger.info( + "BBoxDistanceBehaviorModule: task stopped by RPC " + f"target_id={previous_target_id!r}" + ) self._publish_status("idle") # 发布 idle 状态 return "bbox distance behavior stopped" # 返回停止确认 @@ -112,10 +133,17 @@ def _on_selected_bbox(self, selected_bbox: Detection2DArray) -> None: # 处理 current_state = self._state # 复制当前状态 if detection is None: # 如果当前没有选中目标 + with self._lock: + previous_target_id = self._active_target_id with self._lock: # 加锁重置状态 self._active_target_id = None # 清空当前目标 id self._state = "idle" # 回到 idle self.cmd_vel.publish(Twist.zero()) # 没有目标时立即停止 + if previous_target_id is not None or current_state != "idle": + logger.info( + "BBoxDistanceBehaviorModule: task ended because selection cleared " + f"previous_target_id={previous_target_id!r}" + ) self._publish_status("idle") # 发布 idle 状态 return # 结束处理 @@ -127,9 +155,17 @@ def _on_selected_bbox(self, selected_bbox: Detection2DArray) -> None: # 处理 self._publish_status("done") # 保持完成状态 return # 不重新启动任务 + if current_state == "approaching" and current_target_id == target_id: + return # 同一目标持续靠近中,不重复触发 task 启动日志和状态发布 + with self._lock: # 加锁切换到靠近状态 self._state = "approaching" # 新目标或尚未完成时自动进入靠近阶段 + logger.info( + "BBoxDistanceBehaviorModule: task started from selected bbox " + f"target_id={target_id!r} state_before={current_state}" + ) + self._publish_status("approaching") # 发布自动启动状态 def _on_lidar(self, lidar: PointCloud2) -> None: # 处理新的 lidar 点云 @@ -158,27 +194,45 @@ def _compute_next_twist(self) -> Twist | None: # 计算当前周期应该发布 approach_distance = self._active_approach_distance # 复制本次靠近距离 if state == "idle": # 如果行为未启动 + self._set_block_reason(None) return None # 不重复发布速度命令 if state == "done": # 如果行为已经完成 + self._set_block_reason(None) return Twist.zero() # 持续发布零速度,确保完成后保持停止 detection = self._extract_single_detection(selected_bbox) # 从 selected_bbox 中取出单个 detection if detection is None or lidar is None or camera_info is None: # 如果 bbox、lidar 或 camera_info 任一缺失 + missing: list[str] = [] + if detection is None: + missing.append("selected_bbox") + if lidar is None: + missing.append("lidar") + if camera_info is None: + missing.append("camera_info") + self._set_block_reason(f"missing_inputs:{','.join(missing)}") return Twist.zero() # 发布零速度并等待数据补齐 distance = self._estimate_bbox_distance(detection, lidar, camera_info) # 估计 bbox 内点云距离 if distance is None: # 如果当前点云无法在 bbox 内给出有效距离 + self._set_block_reason(f"no_depth_for_target:{self._detection_id(detection)!r}") return Twist.zero() # 发布零速度并等待下一帧 + self._set_block_reason(None) + bbox_center_x = float(detection.bbox.center.position.x) # 读取 bbox 中心 x 像素坐标 target_distance = approach_distance # 始终靠近到目标距离 twist = self._make_twist(distance, target_distance, bbox_center_x, camera_info) # 生成线速度和角速度命令 if state == "approaching" and distance <= approach_distance + _DISTANCE_TOLERANCE_M: # 如果已经到达靠近目标距离 + completed_target_id = self._detection_id(detection) with self._lock: # 加锁切换完成状态 self._state = "done" # 标记行为完成 - self._active_target_id = None # 完成后清空当前目标 + self._active_target_id = completed_target_id # 记录完成的目标,避免同一目标被重复自动重启 + logger.info( + "BBoxDistanceBehaviorModule: task completed " + f"target_id={completed_target_id!r} distance={distance:.3f}" + ) self._publish_status("done", distance=distance) # 发布完成状态 return Twist.zero() # 完成时发布零速度 @@ -209,6 +263,9 @@ def _estimate_bbox_distance( # 定义 bbox 内点云距离估计函数 camera_info: CameraInfo, # 最新 camera_info ) -> float | None: # 返回米级距离,失败时返回 None x1, y1, x2, y2 = BBoxSelectionModule._bbox_corners(detection) # 读取 bbox 的 xyxy 像素范围 + base_padding = max(float(self.config.depth_bbox_padding_px), 0.0) + max_padding = max(base_padding, float(self.config.depth_bbox_max_padding_px)) + step_padding = max(float(self.config.depth_bbox_padding_step_px), 1.0) points = lidar.points_f32() # 获取 float32 点云坐标,MVP 假设已经在相机坐标系或近似对齐 if points.size == 0: # 如果点云为空 return None # 返回无有效距离 @@ -218,13 +275,27 @@ def _estimate_bbox_distance( # 定义 bbox 内点云距离估计函数 return None # 返回无有效距离 u, v, z = projected # 解包投影后的像素坐标和 z 深度 - inside = (u >= x1) & (u <= x2) & (v >= y1) & (v <= y2) # 计算落在 bbox 内的点 - depths = z[inside] # 取出 bbox 内点的 z 深度 - if depths.size == 0: # 如果 bbox 内没有有效点 - return None # 返回无有效距离 - - distance = float(np.percentile(depths, self.config.depth_percentile)) # 用配置的百分位作为目标距离 - return distance if math.isfinite(distance) and distance > 0.0 else None # 只接受有限且正的距离 + padding = base_padding + while padding <= max_padding + 1e-6: + px1 = x1 - padding + py1 = y1 - padding + px2 = x2 + padding + py2 = y2 + padding + inside = (u >= px1) & (u <= px2) & (v >= py1) & (v <= py2) # 计算落在当前扩张 bbox 内的点 + depths = z[inside] # 取出 bbox 内点的 z 深度 + if depths.size > 0: + distance = float(np.percentile(depths, self.config.depth_percentile)) # 用配置的百分位作为目标距离 + return distance if math.isfinite(distance) and distance > 0.0 else None # 只接受有限且正的距离 + padding += step_padding + + return None # 所有扩张级别都无有效深度 + + def _set_block_reason(self, reason: str | None) -> None: + if reason == self._last_block_reason: + return + self._last_block_reason = reason + if reason is not None: + logger.info(f"BBoxDistanceBehaviorModule: task blocked reason={reason}") def _project_points( # 定义点云投影函数 self, # 传入模块实例 diff --git a/dimos/robot/custom/tests/test_bbox_distance_behavior_module.py b/dimos/robot/custom/tests/test_bbox_distance_behavior_module.py index 0b73c51468..a728b63262 100644 --- a/dimos/robot/custom/tests/test_bbox_distance_behavior_module.py +++ b/dimos/robot/custom/tests/test_bbox_distance_behavior_module.py @@ -26,6 +26,7 @@ Pose2D, ) import pytest +import numpy as np from dimos.msgs.sensor_msgs.CameraInfo import CameraInfo from dimos.msgs.sensor_msgs.PointCloud2 import PointCloud2 @@ -156,4 +157,24 @@ def test_empty_selected_bbox_resets_to_idle(module: BBoxDistanceBehaviorModule) module._on_selected_bbox(_make_array(_make_detection("target", 40.0, 40.0, 60.0, 60.0))) module._on_selected_bbox(_make_array()) - assert module._state == "idle" \ No newline at end of file + assert module._state == "idle" + + +def test_estimate_distance_uses_expanded_padding(module: BBoxDistanceBehaviorModule) -> None: + detection = _make_detection("target", 100.0, 100.0, 150.0, 150.0) + lidar = PointCloud2.from_numpy(np.array([[0.0, 0.0, 1.0]], dtype=np.float32)) + camera_info = CameraInfo.from_intrinsics(100.0, 100.0, 50.0, 50.0, 640, 480) + + module.config.depth_bbox_padding_px = 0.0 + module.config.depth_bbox_max_padding_px = 24.0 + module.config.depth_bbox_padding_step_px = 12.0 + + module._project_points = lambda _points, _camera_info: ( + np.array([166.0], dtype=np.float32), + np.array([120.0], dtype=np.float32), + np.array([1.25], dtype=np.float32), + ) + + distance = module._estimate_bbox_distance(detection, lidar, camera_info) + + assert distance == pytest.approx(1.25) \ No newline at end of file diff --git a/dimos/robot/custom/tests/test_bbox_selection_module.py b/dimos/robot/custom/tests/test_bbox_selection_module.py index 884d91bd19..079ac26607 100644 --- a/dimos/robot/custom/tests/test_bbox_selection_module.py +++ b/dimos/robot/custom/tests/test_bbox_selection_module.py @@ -178,3 +178,65 @@ def test_overlapping_camera_click_prefers_smaller_bbox(module: BBoxSelectionModu assert len(received) == 1 assert received[0].detections_length == 1 assert received[0].detections[0].id == "small" + + +def test_camera_click_tracks_by_detection_id_across_reordered_frames( + module: BBoxSelectionModule, +) -> None: + received = _subscribe_selected(module) + first_frame = _make_array( + _make_detection("left", 0.0, 0.0, 100.0, 100.0), + _make_detection("target", 200.0, 100.0, 260.0, 180.0), + _make_detection("right", 320.0, 120.0, 380.0, 210.0), + ) + second_frame = _make_array( + _make_detection("right", 325.0, 125.0, 385.0, 215.0), + _make_detection("left", 5.0, 5.0, 105.0, 105.0), + _make_detection("target", 205.0, 105.0, 265.0, 185.0), + ) + + module._on_detections(first_frame) + received.clear() + module._on_clicked_point( + PointStamped(x=220.0, y=120.0, z=0.0, frame_id="/world/color_image/yoloe_detections") + ) + module._on_detections(second_frame) + + assert len(received) == 2 + assert received[0].detections_length == 1 + assert received[0].detections[0].id == "target" + assert received[1].detections_length == 1 + assert received[1].detections[0].id == "target" + + +def test_camera_click_near_bbox_edge_uses_padding(module: BBoxSelectionModule) -> None: + received = _subscribe_selected(module) + detections = _make_array(_make_detection("target", 100.0, 100.0, 160.0, 180.0)) + + module._on_detections(detections) + received.clear() + module._on_clicked_point( + PointStamped(x=95.0, y=130.0, z=0.0, frame_id="/world/color_image/yoloe_detections") + ) + + assert len(received) == 1 + assert received[0].detections_length == 1 + assert received[0].detections[0].id == "target" + + +def test_camera_click_near_bbox_snaps_to_nearest(module: BBoxSelectionModule) -> None: + received = _subscribe_selected(module) + detections = _make_array( + _make_detection("left", 20.0, 20.0, 70.0, 70.0), + _make_detection("target", 200.0, 100.0, 260.0, 180.0), + ) + + module._on_detections(detections) + received.clear() + module._on_clicked_point( + PointStamped(x=266.0, y=140.0, z=0.0, frame_id="/world/color_image/yoloe_detections") + ) + + assert len(received) == 1 + assert received[0].detections_length == 1 + assert received[0].detections[0].id == "target" diff --git a/dimos/visualization/rerun/test_websocket_server.py b/dimos/visualization/rerun/test_websocket_server.py index e62d3536cd..1c8bc10a15 100644 --- a/dimos/visualization/rerun/test_websocket_server.py +++ b/dimos/visualization/rerun/test_websocket_server.py @@ -142,6 +142,37 @@ def test_click_publishes_point_stamped( assert point.ts == pytest.approx(5.0) +def test_click_with_null_z_defaults_to_zero( + server: RerunWebSocketServer, publisher: MockViewerPublisher +) -> None: + """Null depth in a click payload should not break bbox selection.""" + received: list[Any] = [] + done = threading.Event() + + unsub = server.clicked_point.subscribe(lambda point: (received.append(point), done.set())) + + publisher._send( + { + "type": "click", + "x": 1.5, + "y": 2.5, + "z": None, + "entity_path": "/bbox/person", + "timestamp_ms": 5000, + } + ) + publisher.flush() + done.wait(timeout=2.0) + unsub() + + assert len(received) == 1 + point = received[0] + assert point.x == pytest.approx(1.5) + assert point.y == pytest.approx(2.5) + assert point.z == pytest.approx(0.0) + assert point.frame_id == "/bbox/person" + + def test_twist_publishes_on_tele_cmd_vel( server: RerunWebSocketServer, publisher: MockViewerPublisher ) -> None: diff --git a/dimos/visualization/rerun/websocket_server.py b/dimos/visualization/rerun/websocket_server.py index 3b29666fb0..01df186f41 100644 --- a/dimos/visualization/rerun/websocket_server.py +++ b/dimos/visualization/rerun/websocket_server.py @@ -65,6 +65,16 @@ class HeartbeatMsg(TypedDict): ViewerMsg = Union[ClickMsg, TwistMsg, StopMsg, HeartbeatMsg] +def _coerce_float(value: Any, default: float = 0.0, *, field_name: str | None = None) -> float: + if value is None: + if field_name is not None: + logger.debug( + f"RerunWebSocketServer: field '{field_name}' is null; falling back to {default}" + ) + return default + return float(value) + + def _handshake_noise_filter(record: logging.LogRecord) -> bool: """Drop noisy "opening handshake failed" records from port scanners etc.""" msg = record.getMessage() @@ -152,28 +162,39 @@ def _dispatch(self, raw: str | bytes) -> None: msg_type = msg.get("type") if msg_type == "click": + logger.info( + "RerunWebSocketServer: received click " + f"entity_path={msg.get('entity_path', '')!r} " + f"x={msg.get('x')!r} y={msg.get('y')!r} z={msg.get('z')!r} " + f"timestamp_ms={msg.get('timestamp_ms')!r}" + ) + point = PointStamped( + x=_coerce_float(msg.get("x"), field_name="x"), + y=_coerce_float(msg.get("y"), field_name="y"), + z=_coerce_float(msg.get("z"), field_name="z"), + ts=_coerce_float(msg.get("timestamp_ms"), field_name="timestamp_ms") / 1000.0, + frame_id=str(msg.get("entity_path", "")), + ) + logger.debug( + "RerunWebSocketServer: publishing clicked point " + f"frame_id={point.frame_id!r} x={point.x} y={point.y} z={point.z} ts={point.ts}" + ) self.clicked_point.publish( - PointStamped( - x=float(msg.get("x", 0)), - y=float(msg.get("y", 0)), - z=float(msg.get("z", 0)), - ts=float(msg.get("timestamp_ms", 0)) / 1000.0, - frame_id=str(msg.get("entity_path", "")), - ) + point ) elif msg_type == "twist": self.tele_cmd_vel.publish( Twist( linear=Vector3( - float(msg.get("linear_x", 0)), - float(msg.get("linear_y", 0)), - float(msg.get("linear_z", 0)), + _coerce_float(msg.get("linear_x")), + _coerce_float(msg.get("linear_y")), + _coerce_float(msg.get("linear_z")), ), angular=Vector3( - float(msg.get("angular_x", 0)), - float(msg.get("angular_y", 0)), - float(msg.get("angular_z", 0)), + _coerce_float(msg.get("angular_x")), + _coerce_float(msg.get("angular_y")), + _coerce_float(msg.get("angular_z")), ), ) ) From 54e31daa86fd9afe719c5def4359014804276a28 Mon Sep 17 00:00:00 2001 From: Harold <20009626+HaroldGin931@users.noreply.github.com> Date: Thu, 28 May 2026 11:38:58 +0800 Subject: [PATCH 10/17] fix(bbox-distance): replace broken lidar projection with TF + Detection3DPC world-frame distance MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous _estimate_bbox_distance() projected raw lidar points directly using camera intrinsics, treating world-frame XYZ as camera-frame XYZ. Go2 lidar is already in world frame (frame_id='world'), so the projected 'depth' values were meaningless — using world Z (up) instead of camera Z (forward), producing distances of 0.082–0.245m regardless of real range. Method B fix: - Use Detection3DPC.from_2d() with self.tf to transform world→camera_optical - Project world-frame lidar points into bbox, get world-frame 3D centroid - Compute 2D Euclidean distance between robot base_link and detection center - Keep existing angular P-controller (pixel-based horizontal offset) - Remove depth percentile / bbox padding config fields (no longer needed) - Add tf.start() call in start() to activate TF subscription - Add _safe_track_id() helper for non-numeric detection.id fields Also includes teleop interrupt (KeyboardTeleop + MovementManager wiring) added in the previous session: n_workers=12, remappings for nav_cmd_vel / tele_cmd_vel, stop_movement → teleop_active interrupt. --- dimos/robot/custom/README.md | 21 ++- .../yoloe_target_lock_distance_follow.py | 28 +++- .../tasks/bbox_distance_behavior_module.py | 158 ++++++++++-------- .../test_bbox_distance_behavior_module.py | 50 ++++-- 4 files changed, 167 insertions(+), 90 deletions(-) diff --git a/dimos/robot/custom/README.md b/dimos/robot/custom/README.md index cd39bfbb4d..f75281143f 100644 --- a/dimos/robot/custom/README.md +++ b/dimos/robot/custom/README.md @@ -66,6 +66,15 @@ pytest dimos/robot/test_all_blueprints_generation.py - `BBoxSelectionModule.blueprint()` - `TargetLockModule.blueprint()` - `BBoxDistanceBehaviorModule.blueprint(approach_distance=0.2)` +- `KeyboardTeleop.blueprint(publish_only_when_active=True)` +- `MovementManager.blueprint()` + +键盘控制(pygame 窗口需要焦点): +- W / S — 前进 / 后退 +- A / D — 左转 / 右转 +- Q / E — 横移 +- Shift — 加速 (2×) | Ctrl — 慢速 (0.5×) +- Space — 紧急停止 | Esc / Q — 退出 TargetLock 状态机: @@ -91,13 +100,21 @@ flowchart LR S --> USB[user_selected_bbox] D --> T[TargetLockModule] USB --> T - T --> LB[locked_bbox] + T --> LB[locked_bbox / selected_bbox] LB --> B[BBoxDistanceBehaviorModule] L[lidar] --> B I[camera_info] --> B - B --> V[cmd_vel] + B -->|nav_cmd_vel| MM[MovementManager] + KB[KeyboardTeleop] -->|tele_cmd_vel| MM + MM -->|cmd_vel| V[Go2Connection] + MM -->|stop_movement = teleop_active| B ``` +速度优先级(MovementManager): +- 键盘有输入时:`tele_cmd_vel` 优先,`nav_cmd_vel` 被压制(冷却 1 s) +- 冷却结束后:`nav_cmd_vel`(任务)恢复控制 +- 键盘输入同时触发 `stop_movement → teleop_active` → 任务重置为 idle + Visualization 点击闭环: ```mermaid diff --git a/dimos/robot/custom/blueprints/yoloe_target_lock_distance_follow.py b/dimos/robot/custom/blueprints/yoloe_target_lock_distance_follow.py index 7d36e7a886..9d3f01b5a1 100644 --- a/dimos/robot/custom/blueprints/yoloe_target_lock_distance_follow.py +++ b/dimos/robot/custom/blueprints/yoloe_target_lock_distance_follow.py @@ -6,7 +6,9 @@ from dimos.core.coordination.module_coordinator import ModuleCoordinator from dimos.core.global_config import global_config from dimos.core.transport import LCMTransport +from dimos.msgs.geometry_msgs.Twist import Twist from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray +from dimos.navigation.movement_manager.movement_manager import MovementManager from dimos.robot.custom.tasks.bbox_distance_behavior_module import BBoxDistanceBehaviorModule from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule from dimos.robot.custom.modules.target_lock_module import TargetLockModule @@ -22,11 +24,14 @@ rerun_config as go2_rerun_config, unitree_go2_basic, ) +from dimos.robot.unitree.keyboard_teleop import KeyboardTeleop from dimos.visualization.vis_module import vis_module _YOLOE_DETECTIONS_TOPIC = "/color_image/yoloe_detections" _USER_SELECTED_BBOX_TOPIC = "/color_image/selected_bbox" _LOCKED_BBOX_TOPIC = "/color_image/locked_bbox" +_NAV_CMD_VEL_TOPIC = "/nav_cmd_vel" +_TELE_CMD_VEL_TOPIC = "/tele_cmd_vel" _YOLOE_DETECTIONS_ENTITY = "world/color_image/yoloe_detections" _USER_SELECTED_BBOX_ENTITY = "world/color_image/selected_bbox" @@ -93,9 +98,16 @@ def _target_lock_rerun_blueprint() -> Any: BBoxSelectionModule.blueprint(), TargetLockModule.blueprint(), BBoxDistanceBehaviorModule.blueprint(), + # Keyboard teleop: publishes tele_cmd_vel when keys held; silent otherwise. + # MovementManager muxes tele_cmd_vel (priority) + nav_cmd_vel (task) → cmd_vel. + # When teleop fires, MovementManager publishes stop_movement → teleop_active → + # BBoxDistanceBehaviorModule resets to idle so YOLO keeps detecting while + # the user drives; clicking a new bbox restarts the approach task. + KeyboardTeleop.blueprint(publish_only_when_active=True), + MovementManager.blueprint(), ) .global_config( - n_workers=10, + n_workers=12, robot_model="unitree_go2", ) .remappings( @@ -103,6 +115,12 @@ def _target_lock_rerun_blueprint() -> Any: (BBoxSelectionModule, "selected_bbox", "user_selected_bbox"), (TargetLockModule, "selected_bbox", "user_selected_bbox"), (TargetLockModule, "locked_bbox", "selected_bbox"), + # Task cmd_vel → MovementManager nav_cmd_vel (lower priority than keyboard) + (BBoxDistanceBehaviorModule, "cmd_vel", "nav_cmd_vel"), + # Keyboard cmd_vel → MovementManager tele_cmd_vel (higher priority) + (KeyboardTeleop, "cmd_vel", "tele_cmd_vel"), + # MovementManager stop_movement → task teleop_active (interrupt on teleop) + (MovementManager, "stop_movement", "teleop_active"), ] ) .transports( @@ -119,6 +137,14 @@ def _target_lock_rerun_blueprint() -> Any: _LOCKED_BBOX_TOPIC, Detection2DArray, ), + ("nav_cmd_vel", Twist): LCMTransport( + _NAV_CMD_VEL_TOPIC, + Twist, + ), + ("tele_cmd_vel", Twist): LCMTransport( + _TELE_CMD_VEL_TOPIC, + Twist, + ), } ) .requirements( diff --git a/dimos/robot/custom/tasks/bbox_distance_behavior_module.py b/dimos/robot/custom/tasks/bbox_distance_behavior_module.py index 967624a06d..6798953b0c 100644 --- a/dimos/robot/custom/tasks/bbox_distance_behavior_module.py +++ b/dimos/robot/custom/tasks/bbox_distance_behavior_module.py @@ -5,9 +5,8 @@ import threading # 导入线程工具,用后台循环发布速度命令 from typing import Any, Literal # 导入通用类型和状态字面量类型 -from dimos_lcm.std_msgs import String # 导入 LCM 字符串消息,用于状态输出 -import numpy as np # 导入 numpy,用于点云投影和百分位距离计算 -from numpy.typing import NDArray # 导入 numpy 数组类型,便于标注点云数组 +from dimos_lcm.sensor_msgs import CameraInfo as DimosLcmCameraInfo # type: ignore[import-untyped] # 导入 LCM CameraInfo 类型,用于 Detection3DPC.from_2d() +from dimos_lcm.std_msgs import Bool, String # type: ignore[import-untyped] # 导入 LCM 消息类型 from reactivex.disposable import Disposable # 导入 Disposable,用于注册输入流订阅 from dimos.constants import DEFAULT_THREAD_JOIN_TIMEOUT # 导入线程停止等待的默认超时时间 @@ -19,6 +18,8 @@ from dimos.msgs.sensor_msgs.CameraInfo import CameraInfo # 导入相机内参消息类型 from dimos.msgs.sensor_msgs.PointCloud2 import PointCloud2 # 导入 lidar 点云消息类型 from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray # 导入 2D 检测数组消息类型 +from dimos.perception.detection.type.detection2d.bbox import Detection2DBBox # 导入 2D bbox 类型,用于构造 Detection3DPC 输入 +from dimos.perception.detection.type.detection3d.pointcloud import Detection3DPC # 导入 3D 点云检测,用于精确距离估计 from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule # 导入 bbox 选择模块,复用 _bbox_corners 工具 from dimos.utils.logging_config import setup_logger # 导入日志初始化函数 @@ -31,15 +32,19 @@ _DISTANCE_TOLERANCE_M = 0.05 # 定义靠近完成时使用的距离容差 +def _safe_track_id(raw: Any) -> int: # 安全地把 detection.id 转换为 int,无法转换时返回 0 + try: + return int(raw) + except (TypeError, ValueError): + return 0 + + class BBoxDistanceBehaviorConfig(ModuleConfig): # 定义 bbox 距离行为模块配置 command_hz: float = 20.0 # 速度命令发布频率,单位 Hz approach_distance: float = 0.2 # 靠近阶段目标距离,单位米 - depth_percentile: float = 25.0 # bbox 内点云深度百分位,降低远处离群点影响 max_linear_speed: float = 0.45 # 最大线速度,单位 m/s max_angular_speed: float = 0.8 # 最大角速度,单位 rad/s - depth_bbox_padding_px: float = 12.0 # 距离估计时对 bbox 做像素扩张,提升稀疏点云命中率 - depth_bbox_max_padding_px: float = 72.0 # 距离估计失败时允许继续扩张 bbox 的最大像素 - depth_bbox_padding_step_px: float = 12.0 # 逐级扩张 bbox 的步长像素 + tf_time_tolerance: float = 0.5 # TF 查询时间容差,单位秒 class BBoxDistanceBehaviorModule(Module): # 定义距离行为模块,只消费 selected bbox、lidar 和 camera_info @@ -47,7 +52,8 @@ class BBoxDistanceBehaviorModule(Module): # 定义距离行为模块,只消 selected_bbox: In[Detection2DArray] # 输入选择模块发布的单 bbox Detection2DArray lidar: In[PointCloud2] # 输入 Go2 lidar 点云 camera_info: In[CameraInfo] # 输入 Go2 相机内参 - cmd_vel: Out[Twist] # 输出 Go2 速度命令 + teleop_active: In[Bool] # 输入遥控信号;有值时中断当前任务,交回键盘控制 + cmd_vel: Out[Twist] # 输出 Go2 速度命令(有 MovementManager 时连接到 nav_cmd_vel) behavior_status: Out[String] # 输出行为状态,便于日志和调试 def __init__(self, **kwargs: Any) -> None: # 定义构造函数,接收框架传入的配置参数 @@ -69,6 +75,8 @@ def start(self) -> None: # 定义模块启动逻辑 self.register_disposable(Disposable(self.selected_bbox.subscribe(self._on_selected_bbox))) # 订阅 selected bbox self.register_disposable(Disposable(self.lidar.subscribe(self._on_lidar))) # 订阅 lidar 点云 self.register_disposable(Disposable(self.camera_info.subscribe(self._on_camera_info))) # 订阅 camera_info + self.register_disposable(Disposable(self.teleop_active.subscribe(self._on_teleop_active))) # 订阅遥控打断信号 + self.tf.start() # 激活 TF 功能,用于 world→camera_optical 坐标变换 self._stop_event.clear() # 清除停止事件,允许后台线程运行 self._thread = threading.Thread( # 创建后台命令发布线程 target=self._command_loop, # 指定线程执行固定频率控制循环 @@ -176,6 +184,21 @@ def _on_camera_info(self, camera_info: CameraInfo) -> None: # 处理新的 came with self._lock: # 加锁更新缓存 self._latest_camera_info = camera_info # 保存最新 camera_info + def _on_teleop_active(self, _msg: Any) -> None: # 收到 MovementManager 的 stop_movement 信号时打断任务 + with self._lock: # 加锁读取并重置状态 + prev_state = self._state # 记录打断前状态 + prev_target = self._active_target_id # 记录打断前目标 id + if prev_state == "idle": # 已经空闲,无需操作 + return + self._state = "idle" # 回到 idle + self._active_target_id = None # 清空目标 + self.cmd_vel.publish(Twist.zero()) # 立即停止 + logger.info( + "BBoxDistanceBehaviorModule: task interrupted by teleop " + f"target_id={prev_target!r} state_before={prev_state}" + ) + self._publish_status("idle") # 发布 idle 状态,让外部知道任务已中断 + def _command_loop(self) -> None: # 固定频率控制循环 period_sec = 1.0 / max(self.config.command_hz, 1.0) # 根据配置计算循环周期,并防止除零 while not self._stop_event.wait(period_sec): # 按周期运行,收到停止事件后退出 @@ -213,9 +236,9 @@ def _compute_next_twist(self) -> Twist | None: # 计算当前周期应该发布 self._set_block_reason(f"missing_inputs:{','.join(missing)}") return Twist.zero() # 发布零速度并等待数据补齐 - distance = self._estimate_bbox_distance(detection, lidar, camera_info) # 估计 bbox 内点云距离 - if distance is None: # 如果当前点云无法在 bbox 内给出有效距离 - self._set_block_reason(f"no_depth_for_target:{self._detection_id(detection)!r}") + distance = self._estimate_3d_distance(detection, lidar, camera_info) # 用 TF + pointcloud 估计 3D 距离 + if distance is None: # 如果 TF 或点云无法给出有效距离 + self._set_block_reason(f"no_3d_detection:{self._detection_id(detection)!r}") return Twist.zero() # 发布零速度并等待下一帧 self._set_block_reason(None) @@ -247,8 +270,8 @@ def _make_twist( # 定义根据距离和 bbox 横向位置生成 Twist 的函 ) -> Twist: # 返回速度命令 distance_error = distance - target_distance # 计算目标距离误差,正数表示目标太远 linear_x = self._clamp(distance_error * _LINEAR_GAIN, -self.config.max_linear_speed, self.config.max_linear_speed) # 计算并限幅线速度 - fx = self._intrinsic_value(camera_info, 0, 0) # 读取相机 fx - cx = self._intrinsic_value(camera_info, 0, 2) # 读取相机 cx + fx = float(camera_info.K[0]) if len(camera_info.K) >= 9 else 0.0 # 读取相机 fx + cx = float(camera_info.K[2]) if len(camera_info.K) >= 9 else 0.0 # 读取相机 cx angular_z = 0.0 if fx <= 0.0 else -((bbox_center_x - cx) / fx) * _ANGULAR_GAIN # 根据 bbox 横向误差计算转向速度 angular_z = self._clamp(angular_z, -self.config.max_angular_speed, self.config.max_angular_speed) # 对角速度限幅 return Twist( # 构造 Twist 命令 @@ -256,39 +279,56 @@ def _make_twist( # 定义根据距离和 bbox 横向位置生成 Twist 的函 angular=Vector3(0.0, 0.0, angular_z), # 设置 yaw 角速度 ) # 结束 Twist 构造 - def _estimate_bbox_distance( # 定义 bbox 内点云距离估计函数 + def _estimate_3d_distance( # 定义基于 TF + 世界坐标系点云的 3D 距离估计函数 self, # 传入模块实例 - detection: Any, # 当前选中的 Detection2D - lidar: PointCloud2, # 最新 lidar 点云 - camera_info: CameraInfo, # 最新 camera_info - ) -> float | None: # 返回米级距离,失败时返回 None + detection: Any, # 当前选中的 LCM Detection2D + lidar: PointCloud2, # 最新 lidar 点云(Go2 原始点云 frame_id="world") + camera_info: CameraInfo, # 最新相机内参 + ) -> float | None: # 返回机器人与检测目标之间的 2D 欧氏距离(单位米),失败时返回 None + # 1. 构造 Detection2DBBox 供 Detection3DPC.from_2d() 使用 x1, y1, x2, y2 = BBoxSelectionModule._bbox_corners(detection) # 读取 bbox 的 xyxy 像素范围 - base_padding = max(float(self.config.depth_bbox_padding_px), 0.0) - max_padding = max(base_padding, float(self.config.depth_bbox_max_padding_px)) - step_padding = max(float(self.config.depth_bbox_padding_step_px), 1.0) - points = lidar.points_f32() # 获取 float32 点云坐标,MVP 假设已经在相机坐标系或近似对齐 - if points.size == 0: # 如果点云为空 - return None # 返回无有效距离 - - projected = self._project_points(points, camera_info) # 把点云直接投影到相机像素平面 - if projected is None: # 如果 camera_info 无效导致无法投影 - return None # 返回无有效距离 - - u, v, z = projected # 解包投影后的像素坐标和 z 深度 - padding = base_padding - while padding <= max_padding + 1e-6: - px1 = x1 - padding - py1 = y1 - padding - px2 = x2 + padding - py2 = y2 + padding - inside = (u >= px1) & (u <= px2) & (v >= py1) & (v <= py2) # 计算落在当前扩张 bbox 内的点 - depths = z[inside] # 取出 bbox 内点的 z 深度 - if depths.size > 0: - distance = float(np.percentile(depths, self.config.depth_percentile)) # 用配置的百分位作为目标距离 - return distance if math.isfinite(distance) and distance > 0.0 else None # 只接受有限且正的距离 - padding += step_padding - - return None # 所有扩张级别都无有效深度 + det2d = Detection2DBBox( + bbox=(x1, y1, x2, y2), # 传入像素 bbox + track_id=_safe_track_id(getattr(detection, "id", None)), # 读取 track id,非整型时用 0 + class_id=0, # class_id 在此不重要 + confidence=float(getattr(detection, "score", 1.0) or 1.0), # 读取置信度,缺失时用 1.0 + name=str(getattr(detection, "class_label", "") or ""), # 读取类名,缺失时用空字符串 + ts=float(lidar.ts or 0.0), # 用 lidar 时间戳对齐 TF 查询 + image=None, # from_2d() 不需要 image 字段 + ) + # 2. 从 TF 获取 world→camera_optical 变换 + ts = float(lidar.ts or 0.0) # 用 lidar 时间戳对齐 TF + world_to_optical = self.tf.get( + "camera_optical", lidar.frame_id, ts, time_tolerance=self.config.tf_time_tolerance + ) # 查询 world→camera_optical 变换 + if world_to_optical is None: # 如果 TF 暂时不可用 + return None # 等待下一帧 + # 3. 包装 LCM CameraInfo + lcm_ci = DimosLcmCameraInfo() # 构造 LCM CameraInfo 对象 + lcm_ci.K = camera_info.K # 复制内参矩阵 + lcm_ci.width = camera_info.width # 复制图像宽度 + lcm_ci.height = camera_info.height # 复制图像高度 + # 4. 投影到 3D(世界坐标系) + detection_3d = Detection3DPC.from_2d( + det=det2d, # 传入 2D bbox + world_pointcloud=lidar, # 传入世界坐标系点云 + camera_info=lcm_ci, # 传入 LCM CameraInfo + world_to_optical_transform=world_to_optical, # 传入外参变换 + filters=[], # 不做额外过滤,保证速度 + ) # 返回带世界坐标系点云的 Detection3DPC,或 None + if detection_3d is None: # 如果 bbox 内没有有效点 + return None # 等待下一帧 + # 5. 获取机器人当前位置(world 坐标系) + robot_tf = self.tf.get("world", "base_link", time_tolerance=self.config.tf_time_tolerance) # 查询机器人位置 + if robot_tf is None: # 如果机器人 TF 暂时不可用 + return None # 等待下一帧 + # 6. 计算机器人与检测目标中心的 2D 欧氏距离 + center = detection_3d.center # 获取 bbox 点云质心(世界坐标系) + robot_pos = robot_tf.translation # 获取机器人在世界坐标系中的位置 + dx = float(center.x) - float(robot_pos.x) # x 轴方向距离分量 + dy = float(center.y) - float(robot_pos.y) # y 轴方向距离分量 + distance = math.sqrt(dx * dx + dy * dy) # 计算 XY 平面欧氏距离 + return distance if math.isfinite(distance) and distance > 0.0 else None # 只接受有限且正的距离 def _set_block_reason(self, reason: str | None) -> None: if reason == self._last_block_reason: @@ -297,36 +337,6 @@ def _set_block_reason(self, reason: str | None) -> None: if reason is not None: logger.info(f"BBoxDistanceBehaviorModule: task blocked reason={reason}") - def _project_points( # 定义点云投影函数 - self, # 传入模块实例 - points: NDArray[np.float32], # 输入 Nx3 点云 - camera_info: CameraInfo, # 输入相机内参 - ) -> tuple[NDArray[np.float32], NDArray[np.float32], NDArray[np.float32]] | None: # 返回 u/v/z 或 None - fx = self._intrinsic_value(camera_info, 0, 0) # 读取相机 fx - fy = self._intrinsic_value(camera_info, 1, 1) # 读取相机 fy - cx = self._intrinsic_value(camera_info, 0, 2) # 读取相机 cx - cy = self._intrinsic_value(camera_info, 1, 2) # 读取相机 cy - if fx <= 0.0 or fy <= 0.0: # 如果内参无效 - return None # 无法投影 - - x = points[:, 0] # 读取点云 x 坐标 - y = points[:, 1] # 读取点云 y 坐标 - z = points[:, 2] # 读取点云 z 坐标,MVP 直接当作相机前向距离 - valid = np.isfinite(x) & np.isfinite(y) & np.isfinite(z) & (z > 0.0) # 过滤无效点和相机后方点 - if not np.any(valid): # 如果没有任何有效点 - return None # 无法投影 - - x_valid = x[valid] # 取出有效 x - y_valid = y[valid] # 取出有效 y - z_valid = z[valid] # 取出有效 z - u = (fx * x_valid / z_valid + cx).astype(np.float32) # 计算像素 u - v = (fy * y_valid / z_valid + cy).astype(np.float32) # 计算像素 v - return u, v, z_valid.astype(np.float32) # 返回投影坐标和对应深度 - - @staticmethod # 声明这是不依赖实例状态的工具函数 - def _intrinsic_value(camera_info: CameraInfo, row: int, col: int) -> float: # 读取 K 矩阵中的一个值 - return float(camera_info.K[row * 3 + col]) if len(camera_info.K) >= 9 else 0.0 # K 缺失时返回 0.0 - @staticmethod # 声明这是不依赖实例状态的工具函数 def _extract_single_detection(selected_bbox: Detection2DArray | None) -> Any | None: # 从 selected_bbox 中取单个 detection if selected_bbox is None or selected_bbox.detections_length == 0 or not selected_bbox.detections: # 如果没有选中 bbox diff --git a/dimos/robot/custom/tests/test_bbox_distance_behavior_module.py b/dimos/robot/custom/tests/test_bbox_distance_behavior_module.py index a728b63262..87362e1abe 100644 --- a/dimos/robot/custom/tests/test_bbox_distance_behavior_module.py +++ b/dimos/robot/custom/tests/test_bbox_distance_behavior_module.py @@ -138,7 +138,7 @@ def test_selected_bbox_reaches_point_two_and_finishes( monkeypatch.setattr( module, - "_estimate_bbox_distance", + "_estimate_3d_distance", lambda *args, **kwargs: distances.pop(0), ) @@ -160,21 +160,45 @@ def test_empty_selected_bbox_resets_to_idle(module: BBoxDistanceBehaviorModule) assert module._state == "idle" -def test_estimate_distance_uses_expanded_padding(module: BBoxDistanceBehaviorModule) -> None: +def test_estimate_3d_distance_returns_none_without_tf(module: BBoxDistanceBehaviorModule) -> None: + """_estimate_3d_distance returns None when TF transform is not available.""" detection = _make_detection("target", 100.0, 100.0, 150.0, 150.0) - lidar = PointCloud2.from_numpy(np.array([[0.0, 0.0, 1.0]], dtype=np.float32)) + lidar = PointCloud2.from_numpy(np.array([[1.0, 2.0, 0.5]], dtype=np.float32), frame_id="world") camera_info = CameraInfo.from_intrinsics(100.0, 100.0, 50.0, 50.0, 640, 480) - module.config.depth_bbox_padding_px = 0.0 - module.config.depth_bbox_max_padding_px = 24.0 - module.config.depth_bbox_padding_step_px = 12.0 + # tf.get returns None by default since no TF data is published in tests + distance = module._estimate_3d_distance(detection, lidar, camera_info) - module._project_points = lambda _points, _camera_info: ( - np.array([166.0], dtype=np.float32), - np.array([120.0], dtype=np.float32), - np.array([1.25], dtype=np.float32), - ) + assert distance is None + + +def test_teleop_active_interrupts_approaching_task(module: BBoxDistanceBehaviorModule) -> None: + """_on_teleop_active resets an approaching task to idle.""" + from dimos_lcm.std_msgs import Bool # type: ignore[import-untyped] + + module._on_selected_bbox(_make_array(_make_detection("target", 40.0, 40.0, 60.0, 60.0))) + assert module._state == "approaching" - distance = module._estimate_bbox_distance(detection, lidar, camera_info) + cmd_published: list = [] + module.cmd_vel.subscribe(cmd_published.append) - assert distance == pytest.approx(1.25) \ No newline at end of file + module._on_teleop_active(Bool(data=True)) + + assert module._state == "idle" + assert module._active_target_id is None + # A zero Twist must be published to stop the robot + assert cmd_published and cmd_published[-1].linear.x == 0.0 + + +def test_teleop_active_noop_when_already_idle(module: BBoxDistanceBehaviorModule) -> None: + """_on_teleop_active does nothing when task is already idle.""" + from dimos_lcm.std_msgs import Bool # type: ignore[import-untyped] + + assert module._state == "idle" + cmd_published: list = [] + module.cmd_vel.subscribe(cmd_published.append) + + module._on_teleop_active(Bool(data=True)) + + assert module._state == "idle" + assert not cmd_published # no spurious zero published \ No newline at end of file From 9b9e6d74e30a2336e94ea6403412f7c01e4eef4a Mon Sep 17 00:00:00 2001 From: Harold <20009626+HaroldGin931@users.noreply.github.com> Date: Thu, 28 May 2026 12:06:04 +0800 Subject: [PATCH 11/17] Python crush issue fix --- dimos/robot/custom/tasks/bbox_distance_behavior_module.py | 1 - 1 file changed, 1 deletion(-) diff --git a/dimos/robot/custom/tasks/bbox_distance_behavior_module.py b/dimos/robot/custom/tasks/bbox_distance_behavior_module.py index 6798953b0c..28e753ca75 100644 --- a/dimos/robot/custom/tasks/bbox_distance_behavior_module.py +++ b/dimos/robot/custom/tasks/bbox_distance_behavior_module.py @@ -76,7 +76,6 @@ def start(self) -> None: # 定义模块启动逻辑 self.register_disposable(Disposable(self.lidar.subscribe(self._on_lidar))) # 订阅 lidar 点云 self.register_disposable(Disposable(self.camera_info.subscribe(self._on_camera_info))) # 订阅 camera_info self.register_disposable(Disposable(self.teleop_active.subscribe(self._on_teleop_active))) # 订阅遥控打断信号 - self.tf.start() # 激活 TF 功能,用于 world→camera_optical 坐标变换 self._stop_event.clear() # 清除停止事件,允许后台线程运行 self._thread = threading.Thread( # 创建后台命令发布线程 target=self._command_loop, # 指定线程执行固定频率控制循环 From 9f6178ae5e4365303f277ec0016f670d751d96c2 Mon Sep 17 00:00:00 2001 From: Harold <20009626+HaroldGin931@users.noreply.github.com> Date: Thu, 28 May 2026 12:35:23 +0800 Subject: [PATCH 12/17] feat(custom): add SLAM visualization and mutual task cancellation - Switch yoloe_target_lock_distance_follow blueprint base from unitree_go2_basic to unitree_go2, adding VoxelGridMapper, CostMapper, and ReplanningAStarPlanner for SLAM map rendering and click-to-navigate - Remove duplicate MovementManager.blueprint() (already in unitree_go2) - Remove world/lidar visible=False override so SLAM map appears in 3D view - BBoxDistanceBehaviorModule: add optional _planner: ReplanningAStarPlannerSpec injected by blueprint; call cancel_goal() when a new bbox task starts - MovementManager._on_click: publish stop_movement before forwarding goal, so any active bbox tracking task is cancelled when user clicks SLAM map - n_workers: 12 -> 16 to accommodate added navigation modules --- .../movement_manager/movement_manager.py | 4 ++++ .../yoloe_target_lock_distance_follow.py | 16 ++++++++-------- .../tasks/bbox_distance_behavior_module.py | 6 ++++++ 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/dimos/navigation/movement_manager/movement_manager.py b/dimos/navigation/movement_manager/movement_manager.py index ed12dc93ac..85919d2b2e 100644 --- a/dimos/navigation/movement_manager/movement_manager.py +++ b/dimos/navigation/movement_manager/movement_manager.py @@ -94,6 +94,10 @@ def _on_click(self, msg: PointStamped) -> None: return logger.debug("Goal", x=round(msg.x, 1), y=round(msg.y, 1), z=round(msg.z, 1)) + # Cancel any active task (e.g. YOLOE bbox tracking) before starting A* navigation. + # Only stop_movement is published here — not the NaN-goal cancel used by _cancel_goal — + # because the new real goal below will override the planner state immediately. + self.stop_movement.publish(Bool(data=True)) self.way_point.publish(msg) self.goal.publish(msg) diff --git a/dimos/robot/custom/blueprints/yoloe_target_lock_distance_follow.py b/dimos/robot/custom/blueprints/yoloe_target_lock_distance_follow.py index 9d3f01b5a1..0d352dac48 100644 --- a/dimos/robot/custom/blueprints/yoloe_target_lock_distance_follow.py +++ b/dimos/robot/custom/blueprints/yoloe_target_lock_distance_follow.py @@ -22,8 +22,8 @@ ) from dimos.robot.unitree.go2.blueprints.basic.unitree_go2_basic import ( rerun_config as go2_rerun_config, - unitree_go2_basic, ) +from dimos.robot.unitree.go2.blueprints.smart.unitree_go2 import unitree_go2 from dimos.robot.unitree.keyboard_teleop import KeyboardTeleop from dimos.visualization.vis_module import vis_module @@ -62,9 +62,6 @@ def _target_lock_rerun_blueprint() -> Any: line_grid=rrb.LineGrid3D( plane=rr.components.Plane3D.XY.with_distance(0.5), ), - overrides={ - "world/lidar": rrb.EntityBehavior(visible=False), - }, ), column_shares=[1, 2], ), @@ -92,22 +89,25 @@ def _target_lock_rerun_blueprint() -> Any: yoloe_target_lock_distance_follow = ( autoconnect( - unitree_go2_basic, + unitree_go2, _target_lock_vis, YoloeTrackingModule.blueprint(), BBoxSelectionModule.blueprint(), TargetLockModule.blueprint(), BBoxDistanceBehaviorModule.blueprint(), # Keyboard teleop: publishes tele_cmd_vel when keys held; silent otherwise. - # MovementManager muxes tele_cmd_vel (priority) + nav_cmd_vel (task) → cmd_vel. + # MovementManager (from unitree_go2) muxes tele_cmd_vel (priority) + nav_cmd_vel + # (task) → cmd_vel. # When teleop fires, MovementManager publishes stop_movement → teleop_active → # BBoxDistanceBehaviorModule resets to idle so YOLO keeps detecting while # the user drives; clicking a new bbox restarts the approach task. + # When a 3D point is clicked, MovementManager also fires stop_movement → cancels + # bbox tracking; BBoxDistanceBehaviorModule cancels A* via _planner spec when a + # new bbox task starts. KeyboardTeleop.blueprint(publish_only_when_active=True), - MovementManager.blueprint(), ) .global_config( - n_workers=12, + n_workers=16, robot_model="unitree_go2", ) .remappings( diff --git a/dimos/robot/custom/tasks/bbox_distance_behavior_module.py b/dimos/robot/custom/tasks/bbox_distance_behavior_module.py index 28e753ca75..b6bfa8a17f 100644 --- a/dimos/robot/custom/tasks/bbox_distance_behavior_module.py +++ b/dimos/robot/custom/tasks/bbox_distance_behavior_module.py @@ -20,6 +20,7 @@ from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray # 导入 2D 检测数组消息类型 from dimos.perception.detection.type.detection2d.bbox import Detection2DBBox # 导入 2D bbox 类型,用于构造 Detection3DPC 输入 from dimos.perception.detection.type.detection3d.pointcloud import Detection3DPC # 导入 3D 点云检测,用于精确距离估计 +from dimos.navigation.replanning_a_star.module_spec import ReplanningAStarPlannerSpec # 导入规划器 Spec,用于 bbox 任务启动时取消 A* 导航 from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule # 导入 bbox 选择模块,复用 _bbox_corners 工具 from dimos.utils.logging_config import setup_logger # 导入日志初始化函数 @@ -55,6 +56,7 @@ class BBoxDistanceBehaviorModule(Module): # 定义距离行为模块,只消 teleop_active: In[Bool] # 输入遥控信号;有值时中断当前任务,交回键盘控制 cmd_vel: Out[Twist] # 输出 Go2 速度命令(有 MovementManager 时连接到 nav_cmd_vel) behavior_status: Out[String] # 输出行为状态,便于日志和调试 + _planner: ReplanningAStarPlannerSpec | None # 可选:A* 规划器,存在时用于 bbox 任务启动时取消当前导航 def __init__(self, **kwargs: Any) -> None: # 定义构造函数,接收框架传入的配置参数 super().__init__(**kwargs) # 调用父类构造函数,让 DimOS 初始化模块和流 @@ -68,6 +70,7 @@ def __init__(self, **kwargs: Any) -> None: # 定义构造函数,接收框架 self._latest_camera_info: CameraInfo | None = None # 保存最新 camera_info self._active_approach_distance = self.config.approach_distance # 保存本次行为使用的靠近距离 self._last_block_reason: str | None = None # 记录上一次阻塞原因,避免重复刷日志 + self._planner: ReplanningAStarPlannerSpec | None = None # 可选规划器引用,由 blueprint 在 build 时注入 @rpc # 标记 start() 是框架生命周期 RPC def start(self) -> None: # 定义模块启动逻辑 @@ -168,6 +171,9 @@ def _on_selected_bbox(self, selected_bbox: Detection2DArray) -> None: # 处理 with self._lock: # 加锁切换到靠近状态 self._state = "approaching" # 新目标或尚未完成时自动进入靠近阶段 + if self._planner is not None: # 如果存在 A* 规划器,取消当前导航,避免与 bbox 追踪指令竞争 + self._planner.cancel_goal() + logger.info( "BBoxDistanceBehaviorModule: task started from selected bbox " f"target_id={target_id!r} state_before={current_state}" From e9a82939fdd5ea66c9a41937397b97063a05e48c Mon Sep 17 00:00:00 2001 From: Harold <20009626+HaroldGin931@users.noreply.github.com> Date: Thu, 28 May 2026 15:45:06 +0800 Subject: [PATCH 13/17] [fix][alert] solve confictbetween control flow by modify host code --- .../movement_manager/movement_manager.py | 8 + .../movement_manager/test_movement_manager.py | 16 +- .../yoloe_target_lock_distance_follow.py | 13 +- .../custom/modules/bbox_selection_module.py | 143 ++++++++++++----- .../custom/modules/target_lock_module.py | 39 +++-- .../tasks/bbox_distance_behavior_module.py | 146 +++++++++++++----- .../test_bbox_distance_behavior_module.py | 39 +++-- .../tests/test_bbox_selection_module.py | 20 ++- .../custom/tests/test_target_lock_module.py | 19 ++- 9 files changed, 337 insertions(+), 106 deletions(-) diff --git a/dimos/navigation/movement_manager/movement_manager.py b/dimos/navigation/movement_manager/movement_manager.py index 85919d2b2e..20d1ffe7c7 100644 --- a/dimos/navigation/movement_manager/movement_manager.py +++ b/dimos/navigation/movement_manager/movement_manager.py @@ -82,6 +82,9 @@ def stop(self) -> None: super().stop() def _on_click(self, msg: PointStamped) -> None: + if not self._is_navigation_click(msg): + logger.debug("Ignored non-navigation click", frame_id=msg.frame_id) + return if not all(math.isfinite(v) for v in (msg.x, msg.y, msg.z)): logger.warning("Ignored invalid click", x=msg.x, y=msg.y, z=msg.z) return @@ -144,3 +147,8 @@ def _on_teleop(self, msg: Twist) -> None: ), ) self.cmd_vel.publish(scaled) + + @staticmethod + def _is_navigation_click(msg: PointStamped) -> bool: + frame_parts = msg.frame_id.strip("/").split("/") + return "color_image" not in frame_parts diff --git a/dimos/navigation/movement_manager/test_movement_manager.py b/dimos/navigation/movement_manager/test_movement_manager.py index e266ad3e98..e764df6a33 100644 --- a/dimos/navigation/movement_manager/test_movement_manager.py +++ b/dimos/navigation/movement_manager/test_movement_manager.py @@ -68,8 +68,8 @@ def _twist(lx=0.0): return Twist(linear=Vector3(lx, 0, 0), angular=Vector3(0, 0, 0)) -def _click(x=1.0, y=2.0, z=0.0): - return PointStamped(ts=time.time(), frame_id="map", x=x, y=y, z=z) +def _click(x=1.0, y=2.0, z=0.0, frame_id="map"): + return PointStamped(ts=time.time(), frame_id=frame_id, x=x, y=y, z=z) def test_teleop_suppresses_nav_and_cancels_goal(manager_and_captured): @@ -112,6 +112,18 @@ def test_valid_click_publishes_goal(manager_and_captured): assert captured.way_point == [click] +def test_camera_click_does_not_publish_goal_or_stop(manager_and_captured): + """A 2D camera click belongs to bbox selection, not map navigation.""" + manager, captured = manager_and_captured + click = _click(x=220.0, y=120.0, z=0.0, frame_id="/world/color_image/yoloe_detections") + + manager._on_click(click) + + assert captured.goal == [] + assert captured.way_point == [] + assert captured.stop_movement == [] + + def test_invalid_clicks_rejected(manager_and_captured): """NaN, Inf, and out-of-range clicks should not publish.""" manager, captured = manager_and_captured diff --git a/dimos/robot/custom/blueprints/yoloe_target_lock_distance_follow.py b/dimos/robot/custom/blueprints/yoloe_target_lock_distance_follow.py index 0d352dac48..b8a2c10b4a 100644 --- a/dimos/robot/custom/blueprints/yoloe_target_lock_distance_follow.py +++ b/dimos/robot/custom/blueprints/yoloe_target_lock_distance_follow.py @@ -98,12 +98,11 @@ def _target_lock_rerun_blueprint() -> Any: # Keyboard teleop: publishes tele_cmd_vel when keys held; silent otherwise. # MovementManager (from unitree_go2) muxes tele_cmd_vel (priority) + nav_cmd_vel # (task) → cmd_vel. - # When teleop fires, MovementManager publishes stop_movement → teleop_active → - # BBoxDistanceBehaviorModule resets to idle so YOLO keeps detecting while - # the user drives; clicking a new bbox restarts the approach task. - # When a 3D point is clicked, MovementManager also fires stop_movement → cancels - # bbox tracking; BBoxDistanceBehaviorModule cancels A* via _planner spec when a - # new bbox task starts. + # MovementManager emits stop_movement for keyboard/map control. The bbox + # selection + target lock modules consume that signal and clear the active + # target so the old bbox cannot restart the one-shot task on the next frame. + # BBoxDistanceBehaviorModule also emits clear_selection_request when the + # one-shot task completes or is stopped by RPC. KeyboardTeleop.blueprint(publish_only_when_active=True), ) .global_config( @@ -158,4 +157,4 @@ def _target_lock_rerun_blueprint() -> Any: if __name__ == "__main__": - ModuleCoordinator.build(yoloe_target_lock_distance_follow).loop() \ No newline at end of file + ModuleCoordinator.build(yoloe_target_lock_distance_follow).loop() diff --git a/dimos/robot/custom/modules/bbox_selection_module.py b/dimos/robot/custom/modules/bbox_selection_module.py index 2f8654f964..0ec672a01c 100644 --- a/dimos/robot/custom/modules/bbox_selection_module.py +++ b/dimos/robot/custom/modules/bbox_selection_module.py @@ -5,6 +5,9 @@ import time # 导入时间工具,用于空检测消息时间戳 from typing import Any # 导入通用类型,兼容 LCM 生成消息字段 +from dimos_lcm.std_msgs import ( + Bool, # type: ignore[import-untyped] # 导入 Bool,用于响应任务中断/完成后的清除请求 +) from reactivex.disposable import Disposable # 导入 Disposable,用于注册输入流订阅 from dimos.core.core import rpc # 导入 rpc 装饰器,让方法可通过 DimOS RPC 调用 @@ -31,6 +34,8 @@ class BBoxSelectionModule(Module): # 定义 bbox 选择模块,只负责从多 config: BBoxSelectionConfig # 声明本模块使用的配置类型 detections: In[Detection2DArray] # 输入现有检测模块发布的多 bbox Detection2DArray clicked_point: In[PointStamped] # 输入 dimos-viewer 点击事件,用于把相机像素点击映射到 bbox + stop_movement: In[Bool] # 输入用户接管/地图规划中断信号,用于清空当前 bbox 选择 + clear_selection_request: In[Bool] # 输入 task 完成或被主动停止后的清除请求 selected_bbox: Out[Detection2DArray] # 输出只包含当前选中 bbox 的 Detection2DArray def __init__(self, **kwargs: Any) -> None: # 定义构造函数,接收框架传入的配置参数 @@ -44,8 +49,18 @@ def __init__(self, **kwargs: Any) -> None: # 定义构造函数,接收框架 @rpc # 标记 start() 是框架生命周期 RPC def start(self) -> None: # 定义模块启动逻辑 super().start() # 启动父类逻辑,包括 RPC 和自动绑定 - self.register_disposable(Disposable(self.detections.subscribe(self._on_detections))) # 订阅检测流 - self.register_disposable(Disposable(self.clicked_point.subscribe(self._on_clicked_point))) # 订阅 viewer 点击流 + self.register_disposable( + Disposable(self.detections.subscribe(self._on_detections)) + ) # 订阅检测流 + self.register_disposable( + Disposable(self.clicked_point.subscribe(self._on_clicked_point)) + ) # 订阅 viewer 点击流 + self.register_disposable( + Disposable(self.stop_movement.subscribe(self._on_stop_movement)) + ) # 订阅用户接管/规划中断信号 + self.register_disposable( + Disposable(self.clear_selection_request.subscribe(self._on_clear_selection_request)) + ) # 订阅 task 完成清除信号 @rpc # 标记 list_candidates() 可通过 DimOS RPC 调用 def list_candidates(self) -> list[dict[str, Any]]: # 返回最新一帧候选 bbox 列表 @@ -55,10 +70,15 @@ def list_candidates(self) -> list[dict[str, Any]]: # 返回最新一帧候选 b if detections is None: # 如果还没有收到任何检测帧 return [] # 返回空候选列表 - return [self._candidate_to_dict(index, detection) for index, detection in enumerate(detections.detections)] # 转换每个检测为 RPC 友好的字典 + return [ + self._candidate_to_dict(index, detection) + for index, detection in enumerate(detections.detections) + ] # 转换每个检测为 RPC 友好的字典 @rpc # 标记 select_bbox() 可通过 DimOS RPC 调用 - def select_bbox(self, index: int | None = None, id: str | None = None) -> str: # 保存用户选择的 bbox 条件 + def select_bbox( + self, index: int | None = None, id: str | None = None + ) -> str: # 保存用户选择的 bbox 条件 if index is None and id is None: # 如果调用方没有提供 index 或 id return "select_bbox requires index or id" # 返回可读错误,不改变当前选择 @@ -80,15 +100,35 @@ def select_bbox(self, index: int | None = None, id: str | None = None) -> str: @rpc # 标记 clear_selection() 可通过 DimOS RPC 调用 def clear_selection(self) -> str: # 清除当前 bbox 选择 - with self._lock: # 加锁更新选择状态 - self._selected_index = None # 清空 index 选择 - self._selected_id = None # 清空 id 选择 - latest = self._latest_detections # 取出最新 detections,用于保持 header - - self.selected_bbox.publish(self._empty_detection_array(latest)) # 发布空数组,清除 viewer 中的旧选框 + self._clear_selection(reason="rpc") # 复用统一清除逻辑,保证 RPC 和流事件行为一致 return "cleared bbox selection" # 返回确认信息 - def _on_detections(self, detections: Detection2DArray) -> None: # 处理检测模块发布的新一帧多 bbox + def _on_stop_movement(self, msg: Bool) -> None: + if not bool(getattr(msg, "data", False)): + return + self._clear_selection(reason="stop_movement") + + def _on_clear_selection_request(self, msg: Bool) -> None: + if not bool(getattr(msg, "data", False)): + return + self._clear_selection(reason="clear_selection_request") + + def _clear_selection(self, reason: str) -> None: + with self._lock: + had_selection = self._selected_index is not None or self._selected_id is not None + self._selected_index = None + self._selected_id = None + latest = self._latest_detections + + self.selected_bbox.publish( + self._empty_detection_array(latest) + ) # 发布空数组,清除 viewer 中的旧选框 + if had_selection: + logger.info(f"BBoxSelectionModule: cleared selection reason={reason}") + + def _on_detections( + self, detections: Detection2DArray + ) -> None: # 处理检测模块发布的新一帧多 bbox with self._lock: # 加锁更新最新检测结果 self._latest_detections = detections # 保存最新一帧 detections @@ -99,7 +139,9 @@ def _on_clicked_point(self, point: PointStamped) -> None: # 处理 dimos-viewer "BBoxSelectionModule: received click " f"frame_id={point.frame_id!r} x={point.x} y={point.y} z={point.z}" ) - if not self._is_color_image_click(point): # 只接受 Camera/color_image 视图里的点击,避免误吃 3D 点击 + if not self._is_color_image_click( + point + ): # 只接受 Camera/color_image 视图里的点击,避免误吃 3D 点击 logger.info("BBoxSelectionModule: ignoring non-color-image click") return # 非相机点击不改变当前 bbox 选择 @@ -118,12 +160,14 @@ def _on_clicked_point(self, point: PointStamped) -> None: # 处理 dimos-viewer "BBoxSelectionModule: matching click against detections " f"count={len(detections.detections)} frame_id={getattr(detections.header, 'frame_id', '')!r}" ) - selected_index = self._find_clicked_detection_index( # 在最新 detections 中查找被点击命中的 bbox - detections, # 传入最新一帧候选 bbox - float(point.x), # 传入 viewer 点击的 x 像素坐标 - float(point.y), # 传入 viewer 点击的 y 像素坐标 - hit_padding_px=float(self.config.click_hit_padding_px), - snap_distance_px=float(self.config.click_snap_distance_px), + selected_index = ( + self._find_clicked_detection_index( # 在最新 detections 中查找被点击命中的 bbox + detections, # 传入最新一帧候选 bbox + float(point.x), # 传入 viewer 点击的 x 像素坐标 + float(point.y), # 传入 viewer 点击的 y 像素坐标 + hit_padding_px=float(self.config.click_hit_padding_px), + snap_distance_px=float(self.config.click_snap_distance_px), + ) ) # 结束命中测试 if selected_index is None: @@ -149,8 +193,7 @@ def _on_clicked_point(self, point: PointStamped) -> None: # 处理 dimos-viewer if selected_index is not None: if selected_id is not None: logger.debug( - "BBoxSelectionModule: tracking clicked bbox by stable id " - f"id={selected_id!r}" + f"BBoxSelectionModule: tracking clicked bbox by stable id id={selected_id!r}" ) else: logger.debug( @@ -158,13 +201,19 @@ def _on_clicked_point(self, point: PointStamped) -> None: # 处理 dimos-viewer f"index={selected_index}" ) - self._publish_selected(detections) # 立即刷新 selected_bbox,让机器人和 viewer 同步看到选择结果 + self._publish_selected( + detections + ) # 立即刷新 selected_bbox,让机器人和 viewer 同步看到选择结果 - def _publish_selected(self, detections: Detection2DArray) -> None: # 根据当前选择发布 selected_bbox + def _publish_selected( + self, detections: Detection2DArray + ) -> None: # 根据当前选择发布 selected_bbox selected = self._find_selected_detection(detections) # 在当前帧里查找被选中的检测 if selected is None: # 如果当前帧没有选中目标或选择还不存在 self._log_selection_state(None, None) - self.selected_bbox.publish(self._empty_detection_array(detections)) # 发布空数组,避免下游复用旧 bbox + self.selected_bbox.publish( + self._empty_detection_array(detections) + ) # 发布空数组,避免下游复用旧 bbox return # 结束本帧处理 selected_index = next( @@ -183,14 +232,18 @@ def _publish_selected(self, detections: Detection2DArray) -> None: # 根据当 ) # 结束 Detection2DArray 构造 self.selected_bbox.publish(msg) # 发布 selected_bbox 给行为模块和 viewer - def _find_selected_detection(self, detections: Detection2DArray) -> Any | None: # 在当前帧中查找选中的 detection + def _find_selected_detection( + self, detections: Detection2DArray + ) -> Any | None: # 在当前帧中查找选中的 detection with self._lock: # 加锁读取选择条件 selected_index = self._selected_index # 复制 index 选择 selected_id = self._selected_id # 复制 id 选择 if selected_id is not None: # 如果当前使用 id 选择 for index, detection in enumerate(detections.detections): # 遍历当前帧所有 detection - if self._detection_id(detection, index) == selected_id: # 比较真实 id 或 index fallback + if ( + self._detection_id(detection, index) == selected_id + ): # 比较真实 id 或 index fallback return detection # 找到匹配 id 的 detection return None # 当前帧没有匹配 id 时返回空 @@ -202,24 +255,34 @@ def _find_selected_detection(self, detections: Detection2DArray) -> Any | None: return None # 没有选择时返回空 @staticmethod # 声明这是不依赖实例状态的工具函数 - def _empty_detection_array(source: Detection2DArray | None) -> Detection2DArray: # 构造空 Detection2DArray - header = source.header if source is not None else Header(time.time(), _DEFAULT_FRAME_ID) # 优先复用来源 header + def _empty_detection_array( + source: Detection2DArray | None, + ) -> Detection2DArray: # 构造空 Detection2DArray + header = ( + source.header if source is not None else Header(time.time(), _DEFAULT_FRAME_ID) + ) # 优先复用来源 header return Detection2DArray(detections_length=0, header=header, detections=[]) # 返回空检测数组 @classmethod # 声明候选转换需要复用类级工具函数 - def _candidate_to_dict(cls, index: int, detection: Any) -> dict[str, Any]: # 把 detection 转成 RPC 字典 + def _candidate_to_dict( + cls, index: int, detection: Any + ) -> dict[str, Any]: # 把 detection 转成 RPC 字典 x1, y1, x2, y2 = cls._bbox_corners(detection) # 计算 bbox 的左上和右下坐标 confidence, class_id = cls._best_result(detection) # 读取第一条 hypothesis 的置信度和类别 return { # 返回用户可读且 JSON 友好的候选结构 "index": index, # 返回当前帧中的候选序号 - "id": cls._detection_id(detection, index), # 返回 detection.id,没有时回退为 index 字符串 + "id": cls._detection_id( + detection, index + ), # 返回 detection.id,没有时回退为 index 字符串 "bbox": [x1, y1, x2, y2], # 返回 xyxy 格式 bbox "confidence": confidence, # 返回置信度,缺失时为 0.0 "class_id": class_id, # 返回类别 id,缺失时为 None } # 结束候选字典 @staticmethod # 声明这是不依赖实例状态的工具函数 - def _detection_id(detection: Any, index: int) -> str: # 读取 detection id,并在缺失时回退到 index + def _detection_id( + detection: Any, index: int + ) -> str: # 读取 detection id,并在缺失时回退到 index detection_id = getattr(detection, "id", "") # 读取 detection.id,缺失时使用空字符串 return str(detection_id) if detection_id else str(index) # 返回真实 id 或 index 字符串 @@ -231,8 +294,12 @@ def _stable_detection_id(detection: Any, index: int) -> str | None: return detection_id @staticmethod # 声明这是不依赖实例状态的工具函数 - def _is_color_image_click(point: PointStamped) -> bool: # 判断点击是否来自相机图像或其 bbox overlay - frame_parts = point.frame_id.strip("/").split("/") # 把 entity_path 拆成路径片段,兼容有无前导斜杠 + def _is_color_image_click( + point: PointStamped, + ) -> bool: # 判断点击是否来自相机图像或其 bbox overlay + frame_parts = point.frame_id.strip("/").split( + "/" + ) # 把 entity_path 拆成路径片段,兼容有无前导斜杠 return "color_image" in frame_parts # 只让 color_image 视图点击驱动 bbox 选择 @classmethod # 声明命中测试需要复用 bbox 坐标转换工具 @@ -255,7 +322,9 @@ def _find_clicked_detection_index( # 查找包含点击像素的 detection inde padded_top = top - hit_padding_px padded_bottom = bottom + hit_padding_px - if padded_left <= x <= padded_right and padded_top <= y <= padded_bottom: # 如果点击点落在当前 bbox 内 + if ( + padded_left <= x <= padded_right and padded_top <= y <= padded_bottom + ): # 如果点击点落在当前 bbox 内 area = max((right - left) * (bottom - top), 0.0) # 计算 bbox 面积,重叠时优先小框 hits.append((area, index)) # 记录命中的候选 bbox @@ -288,7 +357,9 @@ def _find_clicked_detection_index( # 查找包含点击像素的 detection inde return min(hits)[1] # 多个 bbox 重叠时选择面积最小的那个 @staticmethod # 声明这是不依赖实例状态的工具函数 - def _bbox_corners(detection: Any) -> tuple[float, float, float, float]: # 把中心点 bbox 转成 xyxy + def _bbox_corners( + detection: Any, + ) -> tuple[float, float, float, float]: # 把中心点 bbox 转成 xyxy bbox = detection.bbox # 读取 Detection2D 的 bbox 字段 center = bbox.center.position # 读取 bbox 中心点位置 half_width = float(bbox.size_x) / 2.0 # 计算 bbox 半宽 @@ -319,7 +390,9 @@ def _log_selection_state(self, selected: Any | None, selected_index: int | None) logger.info("BBoxSelectionModule: publishing empty selected_bbox") return - detection_id = self._detection_id(selected, max(selected_index if selected_index is not None else 0, 0)) + detection_id = self._detection_id( + selected, max(selected_index if selected_index is not None else 0, 0) + ) signature = ("selected", detection_id, selected_index) if signature == self._last_logged_selection_signature: return diff --git a/dimos/robot/custom/modules/target_lock_module.py b/dimos/robot/custom/modules/target_lock_module.py index 51213998a5..4e16affd1d 100644 --- a/dimos/robot/custom/modules/target_lock_module.py +++ b/dimos/robot/custom/modules/target_lock_module.py @@ -5,7 +5,7 @@ import time from typing import Any, Literal -from dimos_lcm.std_msgs import String +from dimos_lcm.std_msgs import Bool, String from reactivex.disposable import Disposable from dimos.core.core import rpc @@ -31,6 +31,8 @@ class TargetLockModule(Module): detections: In[Detection2DArray] selected_bbox: In[Detection2DArray] + stop_movement: In[Bool] + clear_selection_request: In[Bool] locked_bbox: Out[Detection2DArray] lock_status: Out[String] @@ -50,15 +52,15 @@ def start(self) -> None: super().start() self.register_disposable(Disposable(self.selected_bbox.subscribe(self._on_selected_bbox))) self.register_disposable(Disposable(self.detections.subscribe(self._on_detections))) + self.register_disposable(Disposable(self.stop_movement.subscribe(self._on_stop_movement))) + self.register_disposable( + Disposable(self.clear_selection_request.subscribe(self._on_clear_selection_request)) + ) self._publish_status(force=True) @rpc def clear_lock(self) -> str: - with self._lock: - self._reset_lock_state() - header = self._last_header - self.locked_bbox.publish(self._empty_detection_array(header)) - self._set_state("unselected") + self._clear_lock() return "target lock cleared" @rpc @@ -96,6 +98,14 @@ def _on_selected_bbox(self, selected_bbox: Detection2DArray) -> None: self.locked_bbox.publish(self._single_detection_array(detection, selected_bbox.header)) self._set_state("locked") + def _on_stop_movement(self, msg: Bool) -> None: + if bool(getattr(msg, "data", False)): + self._clear_lock() + + def _on_clear_selection_request(self, msg: Bool) -> None: + if bool(getattr(msg, "data", False)): + self._clear_lock() + def _on_detections(self, detections: Detection2DArray) -> None: with self._lock: self._last_header = detections.header @@ -182,6 +192,13 @@ def _reset_lock_state(self) -> None: self._last_center = None self._last_seen_at = None + def _clear_lock(self) -> None: + with self._lock: + self._reset_lock_state() + header = self._last_header + self.locked_bbox.publish(self._empty_detection_array(header)) + self._set_state("unselected") + def _reacquire_candidate( self, detections: Detection2DArray, @@ -193,7 +210,9 @@ def _reacquire_candidate( return None if self.config.reacquire_by_class and target_class_id is not None: - class_filtered = [d for d in candidates if self._detection_class_id(d) == target_class_id] + class_filtered = [ + d for d in candidates if self._detection_class_id(d) == target_class_id + ] if class_filtered: candidates = class_filtered @@ -205,7 +224,9 @@ def _reacquire_candidate( return min( candidates, - key=lambda detection: self._center_distance_sq(last_center, self._bbox_center(detection)), + key=lambda detection: self._center_distance_sq( + last_center, self._bbox_center(detection) + ), ) def _find_by_id(self, detections: Detection2DArray, target_id: str) -> Any | None: @@ -259,4 +280,4 @@ def _center_distance_sq(a: tuple[float, float], b: tuple[float, float]) -> float __all__ = [ "TargetLockConfig", "TargetLockModule", -] \ No newline at end of file +] diff --git a/dimos/robot/custom/tasks/bbox_distance_behavior_module.py b/dimos/robot/custom/tasks/bbox_distance_behavior_module.py index b6bfa8a17f..f81322984d 100644 --- a/dimos/robot/custom/tasks/bbox_distance_behavior_module.py +++ b/dimos/robot/custom/tasks/bbox_distance_behavior_module.py @@ -5,7 +5,9 @@ import threading # 导入线程工具,用后台循环发布速度命令 from typing import Any, Literal # 导入通用类型和状态字面量类型 -from dimos_lcm.sensor_msgs import CameraInfo as DimosLcmCameraInfo # type: ignore[import-untyped] # 导入 LCM CameraInfo 类型,用于 Detection3DPC.from_2d() +from dimos_lcm.sensor_msgs import ( + CameraInfo as DimosLcmCameraInfo, # type: ignore[import-untyped] # 导入 LCM CameraInfo 类型,用于 Detection3DPC.from_2d() +) from dimos_lcm.std_msgs import Bool, String # type: ignore[import-untyped] # 导入 LCM 消息类型 from reactivex.disposable import Disposable # 导入 Disposable,用于注册输入流订阅 @@ -18,10 +20,18 @@ from dimos.msgs.sensor_msgs.CameraInfo import CameraInfo # 导入相机内参消息类型 from dimos.msgs.sensor_msgs.PointCloud2 import PointCloud2 # 导入 lidar 点云消息类型 from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray # 导入 2D 检测数组消息类型 -from dimos.perception.detection.type.detection2d.bbox import Detection2DBBox # 导入 2D bbox 类型,用于构造 Detection3DPC 输入 -from dimos.perception.detection.type.detection3d.pointcloud import Detection3DPC # 导入 3D 点云检测,用于精确距离估计 -from dimos.navigation.replanning_a_star.module_spec import ReplanningAStarPlannerSpec # 导入规划器 Spec,用于 bbox 任务启动时取消 A* 导航 -from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule # 导入 bbox 选择模块,复用 _bbox_corners 工具 +from dimos.navigation.replanning_a_star.module_spec import ( + ReplanningAStarPlannerSpec, # 导入规划器 Spec,用于 bbox 任务启动时取消 A* 导航 +) +from dimos.perception.detection.type.detection2d.bbox import ( + Detection2DBBox, # 导入 2D bbox 类型,用于构造 Detection3DPC 输入 +) +from dimos.perception.detection.type.detection3d.pointcloud import ( + Detection3DPC, # 导入 3D 点云检测,用于精确距离估计 +) +from dimos.robot.custom.modules.bbox_selection_module import ( + BBoxSelectionModule, # 导入 bbox 选择模块,复用 _bbox_corners 工具 +) from dimos.utils.logging_config import setup_logger # 导入日志初始化函数 logger = setup_logger() # 创建当前文件使用的日志对象 @@ -48,15 +58,20 @@ class BBoxDistanceBehaviorConfig(ModuleConfig): # 定义 bbox 距离行为模 tf_time_tolerance: float = 0.5 # TF 查询时间容差,单位秒 -class BBoxDistanceBehaviorModule(Module): # 定义距离行为模块,只消费 selected bbox、lidar 和 camera_info +class BBoxDistanceBehaviorModule( + Module +): # 定义距离行为模块,只消费 selected bbox、lidar 和 camera_info config: BBoxDistanceBehaviorConfig # 声明本模块使用的配置类型 selected_bbox: In[Detection2DArray] # 输入选择模块发布的单 bbox Detection2DArray lidar: In[PointCloud2] # 输入 Go2 lidar 点云 camera_info: In[CameraInfo] # 输入 Go2 相机内参 teleop_active: In[Bool] # 输入遥控信号;有值时中断当前任务,交回键盘控制 cmd_vel: Out[Twist] # 输出 Go2 速度命令(有 MovementManager 时连接到 nav_cmd_vel) + clear_selection_request: Out[Bool] # 输出 task 完成/停止后的清除请求,防止旧 bbox 重启 task behavior_status: Out[String] # 输出行为状态,便于日志和调试 - _planner: ReplanningAStarPlannerSpec | None # 可选:A* 规划器,存在时用于 bbox 任务启动时取消当前导航 + _planner: ( + ReplanningAStarPlannerSpec | None + ) # 可选:A* 规划器,存在时用于 bbox 任务启动时取消当前导航 def __init__(self, **kwargs: Any) -> None: # 定义构造函数,接收框架传入的配置参数 super().__init__(**kwargs) # 调用父类构造函数,让 DimOS 初始化模块和流 @@ -70,15 +85,25 @@ def __init__(self, **kwargs: Any) -> None: # 定义构造函数,接收框架 self._latest_camera_info: CameraInfo | None = None # 保存最新 camera_info self._active_approach_distance = self.config.approach_distance # 保存本次行为使用的靠近距离 self._last_block_reason: str | None = None # 记录上一次阻塞原因,避免重复刷日志 - self._planner: ReplanningAStarPlannerSpec | None = None # 可选规划器引用,由 blueprint 在 build 时注入 + self._planner: ReplanningAStarPlannerSpec | None = ( + None # 可选规划器引用,由 blueprint 在 build 时注入 + ) @rpc # 标记 start() 是框架生命周期 RPC def start(self) -> None: # 定义模块启动逻辑 super().start() # 启动父类逻辑,包括 RPC 和自动绑定 - self.register_disposable(Disposable(self.selected_bbox.subscribe(self._on_selected_bbox))) # 订阅 selected bbox - self.register_disposable(Disposable(self.lidar.subscribe(self._on_lidar))) # 订阅 lidar 点云 - self.register_disposable(Disposable(self.camera_info.subscribe(self._on_camera_info))) # 订阅 camera_info - self.register_disposable(Disposable(self.teleop_active.subscribe(self._on_teleop_active))) # 订阅遥控打断信号 + self.register_disposable( + Disposable(self.selected_bbox.subscribe(self._on_selected_bbox)) + ) # 订阅 selected bbox + self.register_disposable( + Disposable(self.lidar.subscribe(self._on_lidar)) + ) # 订阅 lidar 点云 + self.register_disposable( + Disposable(self.camera_info.subscribe(self._on_camera_info)) + ) # 订阅 camera_info + self.register_disposable( + Disposable(self.teleop_active.subscribe(self._on_teleop_active)) + ) # 订阅遥控打断信号 self._stop_event.clear() # 清除停止事件,允许后台线程运行 self._thread = threading.Thread( # 创建后台命令发布线程 target=self._command_loop, # 指定线程执行固定频率控制循环 @@ -108,7 +133,11 @@ def start_bbox_distance_behavior( # 定义行为启动 RPC approach_distance: float | None = None, # 可选覆盖靠近阶段目标距离 ) -> str: # 返回可读启动结果 with self._lock: # 加锁重置状态机参数 - self._active_approach_distance = self.config.approach_distance if approach_distance is None else float(approach_distance) # 设置本次靠近距离 + self._active_approach_distance = ( + self.config.approach_distance + if approach_distance is None + else float(approach_distance) + ) # 设置本次靠近距离 self._state = "approaching" # 进入靠近阶段 logger.info( @@ -121,16 +150,15 @@ def start_bbox_distance_behavior( # 定义行为启动 RPC @rpc # 标记 stop_bbox_distance_behavior() 可通过 DimOS RPC 调用 def stop_bbox_distance_behavior(self) -> str: # 定义行为停止 RPC - with self._lock: - previous_target_id = self._active_target_id with self._lock: # 加锁更新状态机 + previous_target_id = self._active_target_id self._state = "idle" # 回到 idle 状态 self._active_target_id = None # 清空当前目标 id self.cmd_vel.publish(Twist.zero()) # 行为停止时发布零速度 + self._request_selection_clear(reason="rpc_stop") # 清掉旧 bbox,避免下一帧自动重启 task logger.info( - "BBoxDistanceBehaviorModule: task stopped by RPC " - f"target_id={previous_target_id!r}" + f"BBoxDistanceBehaviorModule: task stopped by RPC target_id={previous_target_id!r}" ) self._publish_status("idle") # 发布 idle 状态 return "bbox distance behavior stopped" # 返回停止确认 @@ -143,25 +171,27 @@ def _on_selected_bbox(self, selected_bbox: Detection2DArray) -> None: # 处理 current_state = self._state # 复制当前状态 if detection is None: # 如果当前没有选中目标 - with self._lock: - previous_target_id = self._active_target_id with self._lock: # 加锁重置状态 + previous_target_id = self._active_target_id self._active_target_id = None # 清空当前目标 id self._state = "idle" # 回到 idle - self.cmd_vel.publish(Twist.zero()) # 没有目标时立即停止 + if previous_target_id is not None or current_state != "idle": + self.cmd_vel.publish(Twist.zero()) # 从活动任务退出时立即停止一次 logger.info( "BBoxDistanceBehaviorModule: task ended because selection cleared " f"previous_target_id={previous_target_id!r}" ) - self._publish_status("idle") # 发布 idle 状态 + self._publish_status("idle") # 发布 idle 状态 return # 结束处理 target_id = self._detection_id(detection) # 读取当前目标 id with self._lock: # 加锁更新当前目标 self._active_target_id = target_id # 保存当前目标 id - if current_state == "done" and current_target_id == target_id: # 如果已经完成且仍是同一个目标 + if ( + current_state == "done" and current_target_id == target_id + ): # 如果已经完成且仍是同一个目标 self._publish_status("done") # 保持完成状态 return # 不重新启动任务 @@ -189,7 +219,9 @@ def _on_camera_info(self, camera_info: CameraInfo) -> None: # 处理新的 came with self._lock: # 加锁更新缓存 self._latest_camera_info = camera_info # 保存最新 camera_info - def _on_teleop_active(self, _msg: Any) -> None: # 收到 MovementManager 的 stop_movement 信号时打断任务 + def _on_teleop_active( + self, _msg: Any + ) -> None: # 收到 MovementManager 的 stop_movement 信号时打断任务 with self._lock: # 加锁读取并重置状态 prev_state = self._state # 记录打断前状态 prev_target = self._active_target_id # 记录打断前目标 id @@ -198,6 +230,9 @@ def _on_teleop_active(self, _msg: Any) -> None: # 收到 MovementManager 的 st self._state = "idle" # 回到 idle self._active_target_id = None # 清空目标 self.cmd_vel.publish(Twist.zero()) # 立即停止 + self._request_selection_clear( + reason="interrupt" + ) # 清掉旧 bbox,避免中断后又被 locked bbox 拉起 logger.info( "BBoxDistanceBehaviorModule: task interrupted by teleop " f"target_id={prev_target!r} state_before={prev_state}" @@ -229,8 +264,12 @@ def _compute_next_twist(self) -> Twist | None: # 计算当前周期应该发布 self._set_block_reason(None) return Twist.zero() # 持续发布零速度,确保完成后保持停止 - detection = self._extract_single_detection(selected_bbox) # 从 selected_bbox 中取出单个 detection - if detection is None or lidar is None or camera_info is None: # 如果 bbox、lidar 或 camera_info 任一缺失 + detection = self._extract_single_detection( + selected_bbox + ) # 从 selected_bbox 中取出单个 detection + if ( + detection is None or lidar is None or camera_info is None + ): # 如果 bbox、lidar 或 camera_info 任一缺失 missing: list[str] = [] if detection is None: missing.append("selected_bbox") @@ -241,7 +280,9 @@ def _compute_next_twist(self) -> Twist | None: # 计算当前周期应该发布 self._set_block_reason(f"missing_inputs:{','.join(missing)}") return Twist.zero() # 发布零速度并等待数据补齐 - distance = self._estimate_3d_distance(detection, lidar, camera_info) # 用 TF + pointcloud 估计 3D 距离 + distance = self._estimate_3d_distance( + detection, lidar, camera_info + ) # 用 TF + pointcloud 估计 3D 距离 if distance is None: # 如果 TF 或点云无法给出有效距离 self._set_block_reason(f"no_3d_detection:{self._detection_id(detection)!r}") return Twist.zero() # 发布零速度并等待下一帧 @@ -250,22 +291,35 @@ def _compute_next_twist(self) -> Twist | None: # 计算当前周期应该发布 bbox_center_x = float(detection.bbox.center.position.x) # 读取 bbox 中心 x 像素坐标 target_distance = approach_distance # 始终靠近到目标距离 - twist = self._make_twist(distance, target_distance, bbox_center_x, camera_info) # 生成线速度和角速度命令 + twist = self._make_twist( + distance, target_distance, bbox_center_x, camera_info + ) # 生成线速度和角速度命令 - if state == "approaching" and distance <= approach_distance + _DISTANCE_TOLERANCE_M: # 如果已经到达靠近目标距离 + if ( + state == "approaching" and distance <= approach_distance + _DISTANCE_TOLERANCE_M + ): # 如果已经到达靠近目标距离 completed_target_id = self._detection_id(detection) with self._lock: # 加锁切换完成状态 self._state = "done" # 标记行为完成 - self._active_target_id = completed_target_id # 记录完成的目标,避免同一目标被重复自动重启 + self._active_target_id = ( + completed_target_id # 记录完成的目标,避免同一目标被重复自动重启 + ) logger.info( "BBoxDistanceBehaviorModule: task completed " f"target_id={completed_target_id!r} distance={distance:.3f}" ) self._publish_status("done", distance=distance) # 发布完成状态 + self._request_selection_clear( + reason="completed" + ) # 完成后回到等待用户输入,不继续消费旧 bbox return Twist.zero() # 完成时发布零速度 return twist # 返回当前控制周期的速度命令 + def _request_selection_clear(self, reason: str) -> None: + self.clear_selection_request.publish(Bool(data=True)) + logger.info(f"BBoxDistanceBehaviorModule: requested selection clear reason={reason}") + def _make_twist( # 定义根据距离和 bbox 横向位置生成 Twist 的函数 self, # 传入模块实例 distance: float, # 当前估计距离 @@ -274,11 +328,19 @@ def _make_twist( # 定义根据距离和 bbox 横向位置生成 Twist 的函 camera_info: CameraInfo, # 相机内参 ) -> Twist: # 返回速度命令 distance_error = distance - target_distance # 计算目标距离误差,正数表示目标太远 - linear_x = self._clamp(distance_error * _LINEAR_GAIN, -self.config.max_linear_speed, self.config.max_linear_speed) # 计算并限幅线速度 + linear_x = self._clamp( + distance_error * _LINEAR_GAIN, + -self.config.max_linear_speed, + self.config.max_linear_speed, + ) # 计算并限幅线速度 fx = float(camera_info.K[0]) if len(camera_info.K) >= 9 else 0.0 # 读取相机 fx cx = float(camera_info.K[2]) if len(camera_info.K) >= 9 else 0.0 # 读取相机 cx - angular_z = 0.0 if fx <= 0.0 else -((bbox_center_x - cx) / fx) * _ANGULAR_GAIN # 根据 bbox 横向误差计算转向速度 - angular_z = self._clamp(angular_z, -self.config.max_angular_speed, self.config.max_angular_speed) # 对角速度限幅 + angular_z = ( + 0.0 if fx <= 0.0 else -((bbox_center_x - cx) / fx) * _ANGULAR_GAIN + ) # 根据 bbox 横向误差计算转向速度 + angular_z = self._clamp( + angular_z, -self.config.max_angular_speed, self.config.max_angular_speed + ) # 对角速度限幅 return Twist( # 构造 Twist 命令 linear=Vector3(linear_x, 0.0, 0.0), # 设置 x 方向线速度 angular=Vector3(0.0, 0.0, angular_z), # 设置 yaw 角速度 @@ -324,7 +386,9 @@ def _estimate_3d_distance( # 定义基于 TF + 世界坐标系点云的 3D 距 if detection_3d is None: # 如果 bbox 内没有有效点 return None # 等待下一帧 # 5. 获取机器人当前位置(world 坐标系) - robot_tf = self.tf.get("world", "base_link", time_tolerance=self.config.tf_time_tolerance) # 查询机器人位置 + robot_tf = self.tf.get( + "world", "base_link", time_tolerance=self.config.tf_time_tolerance + ) # 查询机器人位置 if robot_tf is None: # 如果机器人 TF 暂时不可用 return None # 等待下一帧 # 6. 计算机器人与检测目标中心的 2D 欧氏距离 @@ -333,7 +397,9 @@ def _estimate_3d_distance( # 定义基于 TF + 世界坐标系点云的 3D 距 dx = float(center.x) - float(robot_pos.x) # x 轴方向距离分量 dy = float(center.y) - float(robot_pos.y) # y 轴方向距离分量 distance = math.sqrt(dx * dx + dy * dy) # 计算 XY 平面欧氏距离 - return distance if math.isfinite(distance) and distance > 0.0 else None # 只接受有限且正的距离 + return ( + distance if math.isfinite(distance) and distance > 0.0 else None + ) # 只接受有限且正的距离 def _set_block_reason(self, reason: str | None) -> None: if reason == self._last_block_reason: @@ -343,8 +409,14 @@ def _set_block_reason(self, reason: str | None) -> None: logger.info(f"BBoxDistanceBehaviorModule: task blocked reason={reason}") @staticmethod # 声明这是不依赖实例状态的工具函数 - def _extract_single_detection(selected_bbox: Detection2DArray | None) -> Any | None: # 从 selected_bbox 中取单个 detection - if selected_bbox is None or selected_bbox.detections_length == 0 or not selected_bbox.detections: # 如果没有选中 bbox + def _extract_single_detection( + selected_bbox: Detection2DArray | None, + ) -> Any | None: # 从 selected_bbox 中取单个 detection + if ( + selected_bbox is None + or selected_bbox.detections_length == 0 + or not selected_bbox.detections + ): # 如果没有选中 bbox return None # 返回空 return selected_bbox.detections[0] # 返回第一个 detection,选择模块保证最多一个 @@ -365,4 +437,4 @@ def _publish_status(self, state: BehaviorState, **fields: float) -> None: # 发 __all__ = [ # 声明这个文件希望对外暴露的名字 "BBoxDistanceBehaviorConfig", # 暴露行为模块配置 "BBoxDistanceBehaviorModule", # 暴露行为模块 -] # 结束 __all__ 列表 \ No newline at end of file +] # 结束 __all__ 列表 diff --git a/dimos/robot/custom/tests/test_bbox_distance_behavior_module.py b/dimos/robot/custom/tests/test_bbox_distance_behavior_module.py index 87362e1abe..1ffb1e8463 100644 --- a/dimos/robot/custom/tests/test_bbox_distance_behavior_module.py +++ b/dimos/robot/custom/tests/test_bbox_distance_behavior_module.py @@ -17,6 +17,7 @@ from collections.abc import Callable from typing import Any +from dimos_lcm.std_msgs import Bool # type: ignore[import-untyped] from dimos_lcm.vision_msgs import ( BoundingBox2D, Detection2D, @@ -25,8 +26,8 @@ Point2D, Pose2D, ) -import pytest import numpy as np +import pytest from dimos.msgs.sensor_msgs.CameraInfo import CameraInfo from dimos.msgs.sensor_msgs.PointCloud2 import PointCloud2 @@ -94,9 +95,7 @@ def _make_detection(detection_id: str, x1: float, y1: float, x2: float, y2: floa size_y=y2 - y1, ), results=[ - ObjectHypothesisWithPose( - hypothesis=ObjectHypothesis(class_id="person", score=0.9) - ) + ObjectHypothesisWithPose(hypothesis=ObjectHypothesis(class_id="person", score=0.9)) ], ) @@ -115,6 +114,12 @@ def _subscribe_status(module: BBoxDistanceBehaviorModule) -> list[Any]: return received +def _subscribe_clear_requests(module: BBoxDistanceBehaviorModule) -> list[Any]: + received: list[Any] = [] + module.clear_selection_request.subscribe(received.append) + return received + + def test_selected_bbox_auto_starts_approach(module: BBoxDistanceBehaviorModule) -> None: status = _subscribe_status(module) module._on_lidar(PointCloud2()) @@ -130,6 +135,7 @@ def test_selected_bbox_reaches_point_two_and_finishes( module: BBoxDistanceBehaviorModule, monkeypatch: pytest.MonkeyPatch, ) -> None: + clear_requests = _subscribe_clear_requests(module) module._on_lidar(PointCloud2()) module._on_camera_info(CameraInfo.from_intrinsics(100.0, 100.0, 50.0, 50.0, 100, 100)) module._on_selected_bbox(_make_array(_make_detection("target", 40.0, 40.0, 60.0, 60.0))) @@ -151,13 +157,30 @@ def test_selected_bbox_reaches_point_two_and_finishes( assert done_twist.linear.x == 0.0 assert done_twist.angular.z == 0.0 assert module._state == "done" + assert clear_requests and clear_requests[-1].data def test_empty_selected_bbox_resets_to_idle(module: BBoxDistanceBehaviorModule) -> None: + cmd_published: list = [] + module.cmd_vel.subscribe(cmd_published.append) + module._on_selected_bbox(_make_array(_make_detection("target", 40.0, 40.0, 60.0, 60.0))) module._on_selected_bbox(_make_array()) assert module._state == "idle" + assert cmd_published and cmd_published[-1].linear.x == 0.0 + + +def test_empty_selected_bbox_while_idle_stays_silent( + module: BBoxDistanceBehaviorModule, +) -> None: + cmd_published: list = [] + module.cmd_vel.subscribe(cmd_published.append) + + module._on_selected_bbox(_make_array()) + + assert module._state == "idle" + assert cmd_published == [] def test_estimate_3d_distance_returns_none_without_tf(module: BBoxDistanceBehaviorModule) -> None: @@ -174,12 +197,11 @@ def test_estimate_3d_distance_returns_none_without_tf(module: BBoxDistanceBehavi def test_teleop_active_interrupts_approaching_task(module: BBoxDistanceBehaviorModule) -> None: """_on_teleop_active resets an approaching task to idle.""" - from dimos_lcm.std_msgs import Bool # type: ignore[import-untyped] - module._on_selected_bbox(_make_array(_make_detection("target", 40.0, 40.0, 60.0, 60.0))) assert module._state == "approaching" cmd_published: list = [] + clear_requests = _subscribe_clear_requests(module) module.cmd_vel.subscribe(cmd_published.append) module._on_teleop_active(Bool(data=True)) @@ -188,12 +210,11 @@ def test_teleop_active_interrupts_approaching_task(module: BBoxDistanceBehaviorM assert module._active_target_id is None # A zero Twist must be published to stop the robot assert cmd_published and cmd_published[-1].linear.x == 0.0 + assert clear_requests and clear_requests[-1].data def test_teleop_active_noop_when_already_idle(module: BBoxDistanceBehaviorModule) -> None: """_on_teleop_active does nothing when task is already idle.""" - from dimos_lcm.std_msgs import Bool # type: ignore[import-untyped] - assert module._state == "idle" cmd_published: list = [] module.cmd_vel.subscribe(cmd_published.append) @@ -201,4 +222,4 @@ def test_teleop_active_noop_when_already_idle(module: BBoxDistanceBehaviorModule module._on_teleop_active(Bool(data=True)) assert module._state == "idle" - assert not cmd_published # no spurious zero published \ No newline at end of file + assert not cmd_published # no spurious zero published diff --git a/dimos/robot/custom/tests/test_bbox_selection_module.py b/dimos/robot/custom/tests/test_bbox_selection_module.py index 079ac26607..cebeaafe5f 100644 --- a/dimos/robot/custom/tests/test_bbox_selection_module.py +++ b/dimos/robot/custom/tests/test_bbox_selection_module.py @@ -17,6 +17,7 @@ from collections.abc import Callable from typing import Any +from dimos_lcm.std_msgs import Bool from dimos_lcm.vision_msgs import ( BoundingBox2D, Detection2D, @@ -96,9 +97,7 @@ def _make_detection( size_y=y2 - y1, ), results=[ - ObjectHypothesisWithPose( - hypothesis=ObjectHypothesis(class_id="person", score=0.9) - ) + ObjectHypothesisWithPose(hypothesis=ObjectHypothesis(class_id="person", score=0.9)) ], ) @@ -164,6 +163,21 @@ def test_non_camera_click_does_not_change_selection(module: BBoxSelectionModule) assert received[0].detections[0].id == "target" +def test_stop_movement_clears_selection(module: BBoxSelectionModule) -> None: + received = _subscribe_selected(module) + detections = _make_array(_make_detection("target", 20.0, 20.0, 120.0, 120.0)) + + module._on_detections(detections) + module.select_bbox(index=0) + received.clear() + + module._on_stop_movement(Bool(data=True)) + module._on_detections(detections) + + assert len(received) == 2 + assert all(msg.detections_length == 0 for msg in received) + + def test_overlapping_camera_click_prefers_smaller_bbox(module: BBoxSelectionModule) -> None: received = _subscribe_selected(module) detections = _make_array( diff --git a/dimos/robot/custom/tests/test_target_lock_module.py b/dimos/robot/custom/tests/test_target_lock_module.py index 33e1f56c11..e12df3fcfc 100644 --- a/dimos/robot/custom/tests/test_target_lock_module.py +++ b/dimos/robot/custom/tests/test_target_lock_module.py @@ -17,6 +17,7 @@ from collections.abc import Callable from typing import Any +from dimos_lcm.std_msgs import Bool from dimos_lcm.vision_msgs import ( BoundingBox2D, Detection2D, @@ -96,9 +97,7 @@ def _make_detection( size_y=y2 - y1, ), results=[ - ObjectHypothesisWithPose( - hypothesis=ObjectHypothesis(class_id=class_id, score=0.9) - ) + ObjectHypothesisWithPose(hypothesis=ObjectHypothesis(class_id=class_id, score=0.9)) ], ) @@ -119,6 +118,18 @@ def test_transition_unselected_to_locked(module: TargetLockModule) -> None: assert module.get_lock_state()["state"] == "locked" +def test_stop_movement_clears_locked_bbox(module: TargetLockModule) -> None: + selected = _make_array(_make_detection("target", "person", 10.0, 10.0, 40.0, 40.0)) + locked_messages: list[Any] = [] + module.locked_bbox.subscribe(locked_messages.append) + + module._on_selected_bbox(selected) + module._on_stop_movement(Bool(data=True)) + + assert module.get_lock_state()["state"] == "unselected" + assert locked_messages[-1].detections_length == 0 + + def test_transition_locked_to_searching(module: TargetLockModule) -> None: selected = _make_array(_make_detection("target", "person", 10.0, 10.0, 40.0, 40.0)) module._on_selected_bbox(selected) @@ -166,4 +177,4 @@ def _monotonic() -> float: # Beyond timeout => lost now["value"] = 101.0 module._on_detections(_make_array()) - assert module.get_lock_state()["state"] == "lost" \ No newline at end of file + assert module.get_lock_state()["state"] == "lost" From 0d7090d8a870fc5171042d45863aa0cba80833ca Mon Sep 17 00:00:00 2001 From: PolluxChou Date: Thu, 28 May 2026 05:12:32 -0600 Subject: [PATCH 14/17] =?UTF-8?q?feat:=20jamjam=5Fui=20=E2=80=94=20Maraude?= =?UTF-8?q?r's=20Map=20app=20+=20hardware=20fixes=20+=20runner?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit What lands on jamjam_ui: 1. dimos/apps/marauders_map/ — new namespace, full Harry-Potter "Wrath of Filch" web app on :7782. Composes upstream nav + jamjam's YOLO-E target-lock/follow stack into one autoconnect() blueprint. Parchment UI, intro overlay with magick-in char-by-char reveal, click-to-track from map + roster + gallery, click-to-navigate, on-page WASD teleop, quest chip, looped BGM. 2. dimos/robot/unitree/ hardware fixes: - connection.py: free_walk() now also sends SwitchJoystick(1027, data=True) — fixes the "dog sways in place" symptom where lx/ly were interpreted as body lean instead of velocity. - go2/connection.py: 2 FreeWalk publishes on init with a settle gap + 15s background heartbeat. Guarded by hasattr(connection,"free_walk") so MuJoCo/DimSim/Replay don't crash. 3. scripts/run-blueprint.sh — auto-logged runner. Mode resolution by env (SIM > REPLAY > ROBOT_IP). Uses mjpython on macOS for MuJoCo's main-thread GL context. Writes /tmp/dimos-logs/-.log with git HEAD + uncommitted file count header. Auto-rotates to newest 20. 4. examples/go2_phone_control/ — phone-as-controller webapp (mock + real), plus minimal direct-WebRTC scripts (go2_walk_*.py, go2_person_aware_walk.py) and a standalone halt.py for E-STOP. 5. HACKATHON.md — branch-level README with the structure, run modes, data flow diagram, and E-STOP layers. Co-Authored-By: Claude Opus 4.7 (1M context) --- HACKATHON.md | 275 +++ dimos/apps/__init__.py | 8 + dimos/apps/marauders_map/__init__.py | 19 + dimos/apps/marauders_map/blueprint.py | 222 +++ dimos/apps/marauders_map/module.py | 820 ++++++++ .../marauders_map/templates/hp_characters.js | 1602 +++++++++++++++ .../templates/marauders_map.html | 1774 +++++++++++++++++ .../marauders_map/templates/potion_latch.mp3 | Bin 0 -> 1400579 bytes .../marauders_map/templates/socketio.min.js | 7 + dimos/robot/all_blueprints.py | 4 + .../modules/go2_startup_self_check_module.py | 24 +- dimos/robot/unitree/connection.py | 104 +- .../agentic/unitree_go2_agentic_ollama.py | 2 +- .../blueprints/smart/unitree_go2_patrol.py | 295 +++ dimos/robot/unitree/go2/connection.py | 51 + dimos/robot/unitree/keyboard_teleop.py | 10 +- dimos/web/templates/rerun_dashboard.html | 2 +- docs/research/go2_marauders_map_design.md | 244 +++ docs/research/reid_capability_summary.md | 108 + examples/go2_person_aware_walk.py | 252 +++ examples/go2_phone_control/halt.py | 73 + examples/go2_phone_control/index.html | 301 +++ examples/go2_phone_control/people.html | 312 +++ examples/go2_phone_control/server.py | 1091 ++++++++++ examples/go2_walk_backward.py | 85 + examples/go2_walk_forward.py | 100 + scripts/run-blueprint.sh | 118 ++ 27 files changed, 7889 insertions(+), 14 deletions(-) create mode 100644 HACKATHON.md create mode 100644 dimos/apps/__init__.py create mode 100644 dimos/apps/marauders_map/__init__.py create mode 100644 dimos/apps/marauders_map/blueprint.py create mode 100644 dimos/apps/marauders_map/module.py create mode 100644 dimos/apps/marauders_map/templates/hp_characters.js create mode 100644 dimos/apps/marauders_map/templates/marauders_map.html create mode 100644 dimos/apps/marauders_map/templates/potion_latch.mp3 create mode 100644 dimos/apps/marauders_map/templates/socketio.min.js create mode 100644 dimos/robot/unitree/go2/blueprints/smart/unitree_go2_patrol.py create mode 100644 docs/research/go2_marauders_map_design.md create mode 100644 docs/research/reid_capability_summary.md create mode 100644 examples/go2_person_aware_walk.py create mode 100644 examples/go2_phone_control/halt.py create mode 100644 examples/go2_phone_control/index.html create mode 100644 examples/go2_phone_control/people.html create mode 100644 examples/go2_phone_control/server.py create mode 100644 examples/go2_walk_backward.py create mode 100644 examples/go2_walk_forward.py create mode 100755 scripts/run-blueprint.sh diff --git a/HACKATHON.md b/HACKATHON.md new file mode 100644 index 0000000000..2436d8ed6f --- /dev/null +++ b/HACKATHON.md @@ -0,0 +1,275 @@ +# DimOS · Hogwarts Hackathon Working Tree (`jamjam_ui` branch) + +> Branched from [`jamjamDimos/dimos:jamjam`](https://github.com/jamjamDimos/dimos/tree/jamjam), +> which itself layers YOLO-E open-vocab tracking + target-lock + bbox-distance +> follow on top of [`dimensionalOS/dimos`](https://github.com/dimensionalOS/dimos). +> +> This file documents **what `jamjam_ui` adds on top of `jamjam`** and how to +> run it. The upstream-only docs live in [`README.md`](./README.md); the +> jamjam control stack docs live in +> [`dimos/robot/custom/README.md`](./dimos/robot/custom/README.md). + +--- + +## TL;DR + +```bash +# MuJoCo simulation, no hardware needed — best for trying the UI +SIM=mujoco scripts/run-blueprint.sh +open http://localhost:7782/ + +# Real Go2 on its own AP (dimair10 / 192.168.12.1): +sudo route add -net 224.0.0.0/4 -interface lo0 # LCM multicast onto lo0 +scripts/run-blueprint.sh # default ROBOT_IP=192.168.12.1 +open http://localhost:7782/ +``` + +Logs land in `/tmp/dimos-logs/` with a `latest.log` symlink (auto-rotated; keeps newest 20). + +--- + +## Two-sentence overview of `jamjam_ui` + +`jamjam_ui` adds **a Harry-Potter "Marauder's Map" web app** (`dimos/apps/marauders_map/`) +on top of jamjam's perception/control stack. The app composes upstream +navigation + jamjam's tracking + the WebRTC connection into a single +blueprint, then renders a parchment-styled web UI on port 7782 that clients +can click to track people, click to navigate, and drive with WASD. + +Everything new lives **under `dimos/apps/`** so jamjam upstream can fast-forward +with zero merge conflict. + +--- + +## Project structure (after this branch's additions) + +``` +DimOS/ ← origin = dimensionalOS/dimos +│ ← jamjam = jamjamDimos/dimos +│ ← branch = jamjam_ui +│ +├── HACKATHON.md ★ this file +├── README.md upstream DimOS README — untouched +│ +├── dimos/apps/ ★ NEW NAMESPACE — application code lives here +│ └── marauders_map/ ★ The Wrath of Filch +│ ├── blueprint.py autoconnect composition of the full closed loop +│ ├── module.py ReidMapModule — Starlette+socket.io on :7782 +│ └── templates/ +│ ├── marauders_map.html parchment UI + intro overlay + quest chip + BGM +│ ├── hp_characters.js 100 HP characters × 10 lines, baked offline +│ ├── socketio.min.js +│ └── potion_latch.mp3 looped background music +│ +├── dimos/robot/custom/ jamjam's open-vocab control stack +│ │ (inherited from jamjam/jamjam — see custom/README.md) +│ ├── modules/ +│ │ ├── yoloe_tracking_module.py open-vocab YOLO-E + BoT-SORT tracking +│ │ ├── bbox_selection_module.py sole writer of /user_selected_bbox +│ │ ├── target_lock_module.py debouncing + spatial re-association +│ │ └── go2_startup_self_check_module.py +│ ├── tasks/ +│ │ └── bbox_distance_behavior_module.py pinhole bbox → Twist follower +│ ├── visualization/ +│ │ └── detection2d_overlay.py Detection2DArray → Rerun overlay +│ ├── blueprints/ autoconnect compositions +│ │ ├── yoloe_target_lock_distance_follow.py full closed-loop demo +│ │ ├── bbox_distance_follow.py minimal task test +│ │ ├── yoloe_keyboard_teleop.py +│ │ ├── yoloe_tracking_test.py +│ │ └── go2_startup_self_check.py +│ └── tests/ pytest-able module + task tests +│ +├── dimos/robot/unitree/ +│ ├── connection.py ★ FIX: free_walk() now also sends +│ │ SwitchJoystick(1027) — fixes the +│ │ "dog sways in place" bug. +│ └── go2/ +│ └── connection.py ★ FIX: 2 FreeWalk publishes on init + +│ 15s heartbeat thread; hasattr-guarded +│ so MuJoCo/DimSim/Replay don't crash. +│ +├── examples/ ★ HACKATHON SAMPLES +│ ├── go2_phone_control/ Phone-as-controller webapp (mock+real) +│ │ ├── server.py FastAPI + WebRTC + YOLO+OSNet +│ │ ├── index.html GameBoy keypad page +│ │ ├── people.html tracked-people map page +│ │ └── halt.py standalone E-STOP +│ ├── go2_walk_forward.py ★ minimal direct-WebRTC scripts +│ ├── go2_walk_backward.py +│ └── go2_person_aware_walk.py +│ +├── scripts/ +│ └── run-blueprint.sh ★ auto-logged runner; SIM/REPLAY/ROBOT_IP envs; +│ picks mjpython on macOS for MuJoCo's +│ main-thread GL context +│ +└── docs/research/ + ├── go2_marauders_map_design.md design rationale for the app + └── reid_capability_summary.md re-ID architecture notes +``` + +`★` marks paths added or modified on this branch. Everything else either came +from `jamjam/jamjam` or `dimensionalOS/dimos` upstream. + +--- + +## The Marauder's Map app — what the page actually does + +Open `http://localhost:7782/` after starting a blueprint. The page shows: + +| UI element | Behavior | +|---|---| +| **Opening parchment scroll** | Unfurls + per-character "magick-in" reveal of the story beats (~11s, skippable with Esc / corner link) | +| **Live floor plan** | Detected people pinned by stable HP character names; footprint trails | +| **Click a face on the map** | Confirm dialog → BBoxSelectionModule → TargetLockModule → bbox-distance follower drives `nav_cmd_vel` | +| **Click free map space** | Publishes `goal_request` → ReplanningAStarPlanner drives `nav_cmd_vel` toward that point | +| **Roster (right column) click** | Direct select-and-track (no confirm — list is a deliberate picker) | +| **`View all` gallery** | Full-screen face grid; click direct-tracks, interrupting any prior track or nav | +| **Teleop pad (bottom)** | Q/W/E/A/S/D + STOP buttons; `` = STOP; keyboard drives the same handlers as buttons | +| **Quest chip (top-left)** | Always-visible mini brief; click to expand the win conditions | +| **🔊/🔇 (top-right)** | Toggles `Potion Latch.mp3` looped BGM. Muted-autoplay on load → unmutes on first user interaction (the only autoplay shape every browser permits) | + +**Exclusivity rule.** The planner and the bbox-follower both publish to +`nav_cmd_vel`. The server-side `select` event publishes `stop_movement=True` +before adopting the new selection, and `navigate` clears any active bbox lock +first. So picking a face cancels a nav goal, and clicking a nav point cancels +a follow — both via a single user gesture. + +--- + +## What this branch adds on top of `jamjam/jamjam` + +### A. The app — `dimos/apps/marauders_map/` + +A new top-level namespace `dimos/apps/` for hackathon-flavored full-stack +applications. The marauders_map app composes: + +- `unitree_go2_basic` (connection + camera + lidar) +- `VoxelGridMapper` + `CostMapper` (world voxel map + 2D parchment walls) +- `YoloeTrackingModule` + `BBoxSelectionModule` + `TargetLockModule` (jamjam) +- `BBoxDistanceBehaviorModule` (jamjam follower) +- `MovementManager` (priority mux: nav vs teleop) +- `ReplanningAStarPlanner` (planner — consumes `goal_request`) +- `ReidMapModule` (this app's web server) + +…via `autoconnect(...)` with remappings, plus an LCM transport map. See +`dimos/apps/marauders_map/blueprint.py` for the wiring detail. + +### B. Hardware fixes — `dimos/robot/unitree/` + +1. **`free_walk()` + `SwitchJoystick(1027)`** in `connection.py`. Without the + second command, lx/ly are interpreted as body-pose lean (BalanceStand + semantics) and the dog only sways — even after FreeWalk has been issued. + The fix is modeled on `enable_rage_mode()` which already does both. +2. **FreeWalk init hardening** in `go2/connection.py`. Two FreeWalk publishes + on init (with a settle gap) plus a 15-second background heartbeat that + re-asserts FreeWalk. Guarded by `hasattr(connection, "free_walk")` so the + simulation backends (`MujocoConnection`, `DimSimConnection`, + `ReplayConnection`) don't crash. + +### C. The runner — `scripts/run-blueprint.sh` + +A thin wrapper around `dimos` that: + +- Resolves run mode by env var. Priority: **`SIM` > `REPLAY` > `ROBOT_IP`**. +- Uses `mjpython` on macOS when `SIM=mujoco` (MuJoCo's GL window has to own + the Cocoa main thread). +- Writes every run to `/tmp/dimos-logs/-.log` with a + header (git HEAD, uncommitted file count, full command). Auto-rotates to + the newest 20. +- Refreshes `/tmp/dimos-logs/latest.log` symlink on exit. + +### D. Examples — `examples/` + +- `go2_phone_control/` — standalone phone-as-controller webapp. The Mac + holds one persistent WebRTC session to the dog; a mobile-friendly page + posts button taps over HTTP. Two UIs (GameBoy keypad + people tracker) + plus an E-STOP script (`halt.py`) that opens a fresh WebRTC and forces + the dog to lie down. +- `go2_walk_forward.py`, `go2_walk_backward.py`, `go2_person_aware_walk.py` + — minimal direct-WebRTC scripts. No blueprint, no LCM. Useful as the + smallest possible reproducers for movement debugging. + +### E. Research notes — `docs/research/` + +- `go2_marauders_map_design.md` — design rationale for the app's web/control split. +- `reid_capability_summary.md` — re-ID architecture (OSNet/TorchReID). + +--- + +## Running it — picking the right mode + +| Goal | Command | +|---|---| +| MuJoCo physics simulation | `SIM=mujoco scripts/run-blueprint.sh` | +| DimSim simulation | `SIM=dimsim scripts/run-blueprint.sh` | +| Replay a recorded dataset | `REPLAY=1 scripts/run-blueprint.sh` | +| Real Go2, default IP `192.168.12.1` | `scripts/run-blueprint.sh` | +| Real Go2 elsewhere | `ROBOT_IP=192.168.123.18 scripts/run-blueprint.sh` | +| Run a different blueprint | `scripts/run-blueprint.sh yoloe-target-lock-distance-follow` | + +Anything after the blueprint name is forwarded straight to `dimos`. + +--- + +## Data flow (text wiring diagram) + +``` + ┌──────────────────────┐ + camera ───▶│ YoloeTrackingModule │── /color_image/yoloe_detections ─┐ + └──────────────────────┘ │ + ▼ + ┌──────────────────────┐ ┌────────────────────────┐ + Rerun click ▶│ BBoxSelectionModule │── /color_image/ │ TargetLockModule │ + Web click ──▶│ (sole writer of │ selected_bbox ─▶│ (debounce + reassoc.) │ + │ /user_selected_bbox)│ └────────────────────────┘ + └──────────────────────┘ │ + │ /color_image/locked_bbox + ▼ + ┌──────────────────────────────┐ + │ BBoxDistanceBehaviorModule │ + │ (bbox → Twist follower) │ + └──────────────────────────────┘ + │ + ┌──────────────────────┐ │ nav_cmd_vel + Map click ▶│ ReidMapModule │── goal_request ▼ + (free pt) │ (web :7782) │──────────────────▶ ReplanningA*Planner ──┐ + │ │── tele_cmd_vel ───────────────────┐ │ + └──────────────────────┘ ▼ ▼ + ┌──────────────────┐ + │ MovementManager │ ← priority mux + │ (nav | tele) │ + └──────────────────┘ + │ + │ cmd_vel + ▼ + ┌──────────────────┐ + │ GO2Connection │ ← WebRTC → real / MuJoCo + └──────────────────┘ +``` + +Both human-facing selectors (Rerun camera click and Marauder's Map web click) +feed the **same** `BBoxSelectionModule`. The planner and the follower share +`nav_cmd_vel`; exclusivity is enforced in `ReidMapModule`'s socket handlers. + +--- + +## E-STOP — the layered safety story + +Order of preference when the dog goes wrong: + +1. **Physical remote — `L2 + B`** (damp). Always works. +2. **Web `STOP` button or `` key** on the Marauder's Map page. +3. **`POST /api/halt`** on the phone-control server (`examples/go2_phone_control/server.py`). +4. **`halt.py`** — opens a fresh WebRTC session, sends 5× zero velocity, then `liedown`. + Survives blueprint hang/crash: + ```bash + PATH="$PWD/.venv/bin:$PATH" .venv/bin/python examples/go2_phone_control/halt.py + ``` + +--- + +## License + +Apache-2.0, inherited from upstream DimOS. diff --git a/dimos/apps/__init__.py b/dimos/apps/__init__.py new file mode 100644 index 0000000000..7d6879a0b8 --- /dev/null +++ b/dimos/apps/__init__.py @@ -0,0 +1,8 @@ +"""User-built applications layered on top of the DimOS core / robot stacks. + +Anything in this package belongs to the application authors. The core +`dimos/robot/custom/` modules (e.g. jamjam's BBox / target-lock / behavior +modules) are imported and composed here but never modified -- so the upstream +jamjam control stack can be fast-forwarded independently of the apps that +ride on top. +""" diff --git a/dimos/apps/marauders_map/__init__.py b/dimos/apps/marauders_map/__init__.py new file mode 100644 index 0000000000..c5ec421968 --- /dev/null +++ b/dimos/apps/marauders_map/__init__.py @@ -0,0 +1,19 @@ +"""Harry-Potter "Marauder's Map" web app for the Go2. + +A self-contained application built ON TOP of the jamjam target-lock / +distance-follow control stack (in ``dimos.robot.custom``). It composes those +modules into a blueprint and adds a parchment-styled web UI on port 7782 with: + +* A live floor plan of detected people, each mapped to a stable HP character +* A click-to-track flow that drives the same BBoxSelectionModule the Rerun + camera view already uses (no modifications to jamjam modules required -- + we synthesize a PointStamped on the existing ``clicked_point`` input) +* An on-page teleop pad (W/A/S/D/Q/E + STOP) that publishes Twist on + ``tele_cmd_vel`` (MovementManager's existing priority lane) +* Hover tooltips, a full-roster gallery modal, HP-themed quote bubbles, + per-person photo lightbox, and per-laptop SSID viewpoint labels + +The whole app lives under this directory and depends only on public +interfaces of ``dimos.robot.custom`` -- so jamjam upstream can be +fast-forwarded with zero merge conflict here. +""" diff --git a/dimos/apps/marauders_map/blueprint.py b/dimos/apps/marauders_map/blueprint.py new file mode 100644 index 0000000000..f8e96ea484 --- /dev/null +++ b/dimos/apps/marauders_map/blueprint.py @@ -0,0 +1,222 @@ +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Marauder's Map blueprint for the Go2. + +A *thin* composition layer on top of jamjam's target-lock / distance-follow / +selection stack. This file lives under ``dimos/apps/`` so the upstream jamjam +control modules (``dimos/robot/custom/...``) and the dimos navigation / +movement manager can be fast-forwarded with zero merge conflict here. + +How selection is wired without touching jamjam's modules: + * Rerun camera-image click → BBoxSelectionModule.clicked_point (existing) + * Web map click → ReidMapModule synthesizes a PointStamped at + the chosen person's bbox center with + ``frame_id="color_image/web_click"``, which + flows into the SAME clicked_point topic + → BBoxSelectionModule treats it identically + to a Rerun camera click. + +Other web→robot wiring (also non-invasive): + * ReidMapModule.cmd_vel → ``tele_cmd_vel`` (mux'd with priority by + MovementManager — replaces pygame KeyboardTeleop, which crashes on + macOS from a worker thread). + * ReidMapModule.goal_request → ReplanningAStarPlanner (click free map + space to publish a navigation goal). + +Run: + uv run dimos --robot-ip 192.168.12.1 --rerun-open native run go2-marauders-map + dimos --replay run go2-marauders-map # no hardware, replay data has people + +Open: http://localhost:7782/ (the map) + Rerun viewer (camera + 3D + bboxes) +""" + +from __future__ import annotations + +from typing import Any + +from dimos.apps.marauders_map.module import ReidMapModule +from dimos.core.coordination.blueprints import autoconnect +from dimos.core.coordination.module_coordinator import ModuleCoordinator +from dimos.core.global_config import global_config +from dimos.core.transport import LCMTransport +from dimos.mapping.costmapper import CostMapper +from dimos.mapping.voxels import VoxelGridMapper +from dimos.msgs.geometry_msgs.Twist import Twist +from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray +from dimos.navigation.movement_manager.movement_manager import MovementManager +from dimos.navigation.replanning_a_star.module import ReplanningAStarPlanner +from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule +from dimos.robot.custom.modules.target_lock_module import TargetLockModule +from dimos.robot.custom.modules.yoloe_tracking_module import ( + YoloeTrackingModule, + _require_yoloe_lrpc_model, +) +from dimos.robot.custom.tasks.bbox_distance_behavior_module import ( + BBoxDistanceBehaviorModule, +) +from dimos.robot.custom.visualization.detection2d_overlay import ( + selected_bbox_overlay, + yoloe_overlay, +) +from dimos.robot.unitree.go2.blueprints.basic.unitree_go2_basic import ( + rerun_config as go2_rerun_config, + unitree_go2_basic, +) +from dimos.robot.unitree.go2.connection import GO2Connection +from dimos.visualization.vis_module import vis_module + +# LCM topic / Rerun entity wiring (matches yoloe_target_lock_distance_follow). +_YOLOE_DETECTIONS_TOPIC = "/color_image/yoloe_detections" +_USER_SELECTED_BBOX_TOPIC = "/color_image/selected_bbox" +_LOCKED_BBOX_TOPIC = "/color_image/locked_bbox" +_NAV_CMD_VEL_TOPIC = "/nav_cmd_vel" +_TELE_CMD_VEL_TOPIC = "/tele_cmd_vel" + +_YOLOE_DETECTIONS_ENTITY = "world/color_image/yoloe_detections" +_USER_SELECTED_BBOX_ENTITY = "world/color_image/selected_bbox" +_LOCKED_BBOX_ENTITY = "world/color_image/locked_bbox" + + +def _marauders_rerun_blueprint() -> Any: + import rerun as rr + import rerun.blueprint as rrb + + return rrb.Blueprint( + rrb.Horizontal( + rrb.Spatial2DView( + origin="world/color_image", + contents=["world/color_image/**"], + name="Camera", + ), + rrb.Spatial3DView( + origin="world", + contents=[ + "world/**", + f"-{_YOLOE_DETECTIONS_ENTITY}", + f"-{_USER_SELECTED_BBOX_ENTITY}", + f"-{_LOCKED_BBOX_ENTITY}", + ], + name="3D", + background=rrb.Background(kind="SolidColor", color=[0, 0, 0]), + line_grid=rrb.LineGrid3D(plane=rr.components.Plane3D.XY.with_distance(0.5)), + overrides={"world/lidar": rrb.EntityBehavior(visible=False)}, + ), + column_shares=[1, 2], + ), + rrb.TimePanel(state="hidden"), + rrb.SelectionPanel(state="hidden"), + ) + + +_marauders_rerun_config = { + **go2_rerun_config, + "blueprint": _marauders_rerun_blueprint, + "visual_override": { + **go2_rerun_config["visual_override"], + _YOLOE_DETECTIONS_ENTITY: yoloe_overlay, + _USER_SELECTED_BBOX_ENTITY: selected_bbox_overlay, + _LOCKED_BBOX_ENTITY: selected_bbox_overlay, + }, +} + +_marauders_vis = vis_module( + viewer_backend=global_config.viewer, + rerun_config=_marauders_rerun_config, +) + + +# Composition (jamjam control stack untouched; only routed): +# * unitree_go2_basic — connection + camera + lidar + base viewer wiring +# * VoxelGridMapper — world-frame voxel map (needed for ReidMapModule's +# Detection3DPC.from_2d person localization) +# * CostMapper — 2D occupancy/cost grid, drawn as the parchment walls +# * YoloeTrackingModule — YOLO-E open-vocab detect + BoT-SORT track +# * BBoxSelectionModule — single source of truth for "which person is selected" +# (accepts Rerun click + our synthesized web click via +# the same clicked_point input) +# * TargetLockModule — locked-bbox state machine +# * BBoxDistanceBehaviorModule — distance-follow control loop +# * MovementManager — tele/nav cmd_vel mux +# * ReplanningAStarPlanner — point-to-go navigation (consumes goal_request) +# * ReidMapModule — Marauder's Map web view on :7782 (UI layer only) +go2_marauders_map = ( + autoconnect( + unitree_go2_basic, + VoxelGridMapper.blueprint(emit_every=5), + CostMapper.blueprint(), + _marauders_vis, + YoloeTrackingModule.blueprint(), + BBoxSelectionModule.blueprint(), + TargetLockModule.blueprint(), + BBoxDistanceBehaviorModule.blueprint(), + MovementManager.blueprint(), + ReplanningAStarPlanner.blueprint(), + ReidMapModule.blueprint( + camera_info=GO2Connection.camera_info_static, + enable_reid=False, # rely on YOLO-E/BoT-SORT + spatial re-association + ), + ) + .global_config( + n_workers=13, + robot_model="unitree_go2", + ) + .remappings( + [ + # ─── Selection chain ──────────────────────────────────────────── + # Both Rerun camera click and our web "click" feed BBoxSelectionModule + # through its existing `clicked_point` input. BBoxSelectionModule is + # the sole writer of /user_selected_bbox; TargetLockModule consumes + # it; the locked output is remapped to /selected_bbox for the + # follower task and the Rerun green-box overlay. + (BBoxSelectionModule, "selected_bbox", "user_selected_bbox"), + (TargetLockModule, "selected_bbox", "user_selected_bbox"), + (TargetLockModule, "locked_bbox", "selected_bbox"), + # ─── Follow task → cmd_vel mux ────────────────────────────────── + (BBoxDistanceBehaviorModule, "cmd_vel", "nav_cmd_vel"), + # ─── Web teleop → mux (priority) ──────────────────────────────── + (ReidMapModule, "cmd_vel", "tele_cmd_vel"), + # ─── Teleop activity → pause follow + clear selection ─────────── + # jamjam e9a82939: BBoxSelectionModule and TargetLockModule both gained + # `stop_movement: In[Bool]` so any source of teleop-activity wipes the + # current target and the old bbox can't auto-restart the follow on the + # next detection frame. + (MovementManager, "stop_movement", "teleop_active"), + (BBoxSelectionModule, "stop_movement", "teleop_active"), + (TargetLockModule, "stop_movement", "teleop_active"), + # ─── Marauder's Map world localization ────────────────────────── + (ReidMapModule, "pointcloud", "global_map"), + ] + ) + .transports( + { + ("detections", Detection2DArray): LCMTransport( + _YOLOE_DETECTIONS_TOPIC, Detection2DArray + ), + ("user_selected_bbox", Detection2DArray): LCMTransport( + _USER_SELECTED_BBOX_TOPIC, Detection2DArray + ), + ("locked_bbox", Detection2DArray): LCMTransport(_LOCKED_BBOX_TOPIC, Detection2DArray), + ("nav_cmd_vel", Twist): LCMTransport(_NAV_CMD_VEL_TOPIC, Twist), + ("tele_cmd_vel", Twist): LCMTransport(_TELE_CMD_VEL_TOPIC, Twist), + } + ) + .requirements(_require_yoloe_lrpc_model) +) + +__all__ = ["go2_marauders_map"] + + +if __name__ == "__main__": + ModuleCoordinator.build(go2_marauders_map).loop() diff --git a/dimos/apps/marauders_map/module.py b/dimos/apps/marauders_map/module.py new file mode 100644 index 0000000000..f9b68868ce --- /dev/null +++ b/dimos/apps/marauders_map/module.py @@ -0,0 +1,820 @@ +#!/usr/bin/env python3 + +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Marauder's Map web view. + +A Harry-Potter "Marauder's Map" styled floor plan of the area the robot has +mapped, with every detected person plotted at their world position as an +ID-tagged footprint marker. Two display modes (toggled in the browser): + + * ID only -- just the code, e.g. ``#3`` + * ID + photo -- the code plus the person's cropped camera thumbnail + +Data sources (all already produced by ``unitree-go2-detection``): + * ``global_costmap`` (OccupancyGrid) -> the parchment floor plan + * ``color_image`` (Image) -> source for per-person crops + * ``detections`` (Detection2DArray)-> per-person id/class/bbox + * ``pointcloud`` (PointCloud2, world frame) -> world-frame localization + * ``odom`` (PoseStamped) -> the robot's own dot on the map + +World localization reuses ``Detection3DPC.from_2d`` (the same projection +``Detection3DModule`` uses) so a person's map position is the centroid of the +world points inside their detection box -- and the original track_id / class / +crop survive the projection. + +Same authoring pattern as the reID-marking feature; served on its own port +(default 7782) so it can run alongside the command center (7779) and the +marking view (7781). +""" + +import asyncio +import base64 +import math +from pathlib import Path as FilePath +import subprocess +import sys +import threading +import time +from typing import Any + +import cv2 +import numpy as np +from reactivex.disposable import Disposable +import socketio # type: ignore[import-untyped] +from starlette.applications import Starlette +from starlette.responses import FileResponse, Response +from starlette.routing import Route +import uvicorn + +from dimos.constants import DEFAULT_THREAD_JOIN_TIMEOUT +from dimos.core.core import rpc +from dimos.core.global_config import global_config +from dimos.core.module import Module, ModuleConfig +from dimos.core.stream import In, Out +from dimos.msgs.geometry_msgs.PointStamped import PointStamped +from dimos.msgs.geometry_msgs.PoseStamped import PoseStamped +from dimos.msgs.geometry_msgs.Twist import Twist +from dimos.msgs.geometry_msgs.Vector3 import Vector3 +from dimos.msgs.nav_msgs.OccupancyGrid import OccupancyGrid +from dimos.msgs.sensor_msgs.CameraInfo import CameraInfo +from dimos.msgs.sensor_msgs.Image import Image +from dimos.msgs.sensor_msgs.PointCloud2 import PointCloud2 +from dimos.msgs.std_msgs.Header import Header +from dimos_lcm.std_msgs import Bool # planner stop_movement uses LCM std_msgs/Bool +from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray +from dimos.perception.detection.type.detection2d.imageDetections2D import ImageDetections2D +from dimos.perception.detection.type.detection3d.pointcloud import Detection3DPC +from dimos.utils.logging_config import setup_logger + +logger = setup_logger() + +_TEMPLATES_DIR = FilePath(__file__).parent / "templates" +_MAP_HTML = _TEMPLATES_DIR / "marauders_map.html" +_SOCKETIO_JS = _TEMPLATES_DIR / "socketio.min.js" +# 100 Harry Potter characters x 10 lines each, baked locally so the map works +# fully offline (the field network has no internet). +_HP_JS = _TEMPLATES_DIR / "hp_characters.js" +# Ambient BGM — "Potion Latch", loop-played in the page. File ships in this +# folder so the offline field network works. +_BGM_MP3 = _TEMPLATES_DIR / "potion_latch.mp3" + +PERSON_CLASS_ID = 0 # COCO "person" +DOG_CLASS_ID = 16 # COCO "dog" -- used as the heuristic for "another Go2 quadruped" +# Dog roster ids live in a separate numeric range so they never collide with +# the small long-term person ids assigned by reID. +DOG_ID_BASE = 1_000_000 + + +class ReidMapConfig(ModuleConfig): + camera_info: CameraInfo + + port: int = 7782 + # The pointcloud frame (global map is published in the world frame). + world_frame_hint: str = "world" + # Only plot people; set False to plot every detected object. + persons_only: bool = True + # Also flag other Unitree-Go2-like quadrupeds (COCO "dog") with a special icon. + detect_robot_dogs: bool = True + robot_dog_class_id: int = DOG_CLASS_ID + # Throttles (Hz). Map changes slowly; detection localization is CPU heavy. + map_emit_hz: float = 1.0 + detect_hz: float = 3.0 + # How long a person stays on the map after they were last seen (sec). + person_ttl_sec: float = 8.0 + # Re-grab a person's photo at most this often (sec). + photo_refresh_sec: float = 4.0 + photo_quality: int = 70 + photo_max_width: int = 120 + # Larger crop kept per id and served on demand for the "view large" lightbox. + photo_full_quality: int = 82 + photo_full_max_width: int = 360 + + # Per-dog label. If blank, auto-detect from the WiFi SSID this machine is + # joined to (each Go2 broadcasts its own AP, e.g. "dimair13") so a viewpoint + # is identified by which dog's network it came from. + robot_label: str = "" + wifi_interface: str = "en0" + + # reID: collapse the detector's short-term track_ids into stable long-term + # IDs (osnet appearance embeddings) so one person == one code, and the + # roster count reflects distinct people rather than track fragments. + enable_reid: bool = True + # Frames a track must accumulate before it can be matched/assigned an ID. + # Lower = snappier first appearance, higher = more reliable matching. + reid_min_embeddings: int = 3 + reid_similarity: float = 0.63 + + # Spatial-temporal re-association (used when appearance reID is OFF). Keeps + # the SAME person on one stable id by position continuity: a brand-new + # detector track that appears within `reassoc_radius_m` of where a recently + # (within `reassoc_window_s`) lost person was, and that spot is not currently + # held by another live person, inherits that person's id. Robust to BoT-SORT + # reassigning track ids across brief occlusions, without appearance merges. + reassoc_radius_m: float = 1.5 + reassoc_window_s: float = 12.0 + + # Web teleop: linear / angular speed when a movement button is pressed. + teleop_linear_speed: float = 0.5 # m/s + teleop_angular_speed: float = 0.8 # rad/s + + +class ReidMapModule(Module): + """Plots detected people on a Marauder's-Map-styled floor plan web view.""" + + config: ReidMapConfig + + global_costmap: In[OccupancyGrid] + color_image: In[Image] + detections: In[Detection2DArray] + pointcloud: In[PointCloud2] + odom: In[PoseStamped] + + # Web -> robot wiring: + # * cmd_vel: teleop Twist, remapped to tele_cmd_vel in the blueprint. + # * clicked_point: a synthesized camera-pixel click that lands inside + # the chosen person's bbox; flows into the SAME BBoxSelectionModule + # input the Rerun camera-view click uses. This lets us drive selection + # through jamjam's public API without modifying their module. + cmd_vel: Out[Twist] + clicked_point: Out[PointStamped] + # Click-to-navigate: the user clicks a free point on the parchment map and we + # publish that world-frame target on goal_request; ReplanningAStarPlanner + # picks it up and drives via nav_cmd_vel. stop_movement is the kill for that + # planner (used to make "follow person" and "navigate to point" mutually + # exclusive — only one drives nav_cmd_vel at a time). + goal_request: Out[PoseStamped] + stop_movement: Out[Bool] + + def __init__(self, **kwargs: Any) -> None: + super().__init__(**kwargs) + self._uvicorn_server_thread: threading.Thread | None = None + self._uvicorn_server: uvicorn.Server | None = None + self.sio: socketio.AsyncServer | None = None + self.app: Any = None + self._broadcast_loop: asyncio.AbstractEventLoop | None = None + self._broadcast_thread: threading.Thread | None = None + self._stopped = False + + self._lock = threading.Lock() + self._latest_image: Image | None = None + self._latest_pc: PointCloud2 | None = None + self._last_map_emit = 0.0 + self._last_detect = 0.0 + # Keyed by stable long-term reID id (or track_id if reID disabled): + # {x, y, name, class_id, photo, photo_ts, last_seen} + self._people: dict[int, dict[str, Any]] = {} + # Cached map metadata so the frontend can map world -> pixel for markers. + self._map_meta: dict[str, Any] | None = None + # Long-term appearance reID (lazily built on start if enabled). + self._idsystem: Any = None + # Label identifying which dog/WiFi this viewpoint belongs to. + self._label: str = "go2" + # Spatial-temporal identity layer (used when appearance reID is off): + # _track_to_stable: detector track_id -> stable display id + # _stable_pos: stable id -> {x, y, last_seen} (for re-association) + self._track_to_stable: dict[int, int] = {} + self._stable_pos: dict[int, dict[str, float]] = {} + self._next_stable: int = 0 + # Per-stable-id mapping to the latest raw LCM Detection2D the tracker + # produced for that person -- used when the web client clicks a + # character to drive TargetLockModule. + self._stable_to_raw_det: dict[int, Any] = {} + self._latest_detection_header: Any = None + + # ------------------------------------------------------------------ # + # Lifecycle + # ------------------------------------------------------------------ # + @rpc + def start(self) -> None: + super().start() + self._label = self.config.robot_label.strip() or self._detect_wifi_ssid() or "go2" + logger.info("Marauder's Map: viewpoint label = %s", self._label) + self._create_server() + self._start_broadcast_loop() + self._uvicorn_server_thread = threading.Thread(target=self._run_uvicorn_server, daemon=True) + self._uvicorn_server_thread.start() + logger.info(f"Marauder's Map available at http://localhost:{self.config.port}/") + + if self.config.enable_reid: + try: + from dimos.models.embedding.treid import TorchReIDModel + from dimos.perception.detection.reid.embedding_id_system import ( + EmbeddingIDSystem, + ) + + self._idsystem = EmbeddingIDSystem( + model=TorchReIDModel, + padding=0, + similarity_threshold=self.config.reid_similarity, + min_embeddings_for_matching=self.config.reid_min_embeddings, + ) + logger.info("Marauder's Map: reID (long-term IDs) enabled") + except Exception: + logger.exception("Marauder's Map: reID unavailable, falling back to track_id") + self._idsystem = None + + for stream, handler in ( + (self.global_costmap, self._on_costmap), + (self.color_image, self._on_color_image), + (self.pointcloud, self._on_pointcloud), + (self.detections, self._on_detections), + (self.odom, self._on_odom), + ): + try: + unsub = stream.subscribe(handler) + self.register_disposable(Disposable(unsub)) + except Exception: + logger.exception("Marauder's Map: subscribe failed for %s", handler.__name__) + + @rpc + def stop(self) -> None: + if self._stopped: + return + self._stopped = True + if self._uvicorn_server: + self._uvicorn_server.should_exit = True + if self._broadcast_loop and not self._broadcast_loop.is_closed(): + self._broadcast_loop.call_soon_threadsafe(self._broadcast_loop.stop) + if self._broadcast_thread and self._broadcast_thread.is_alive(): + self._broadcast_thread.join(timeout=DEFAULT_THREAD_JOIN_TIMEOUT) + if self._uvicorn_server_thread and self._uvicorn_server_thread.is_alive(): + self._uvicorn_server_thread.join(timeout=DEFAULT_THREAD_JOIN_TIMEOUT) + super().stop() + + # ------------------------------------------------------------------ # + # Server + # ------------------------------------------------------------------ # + def _create_server(self) -> None: + self.sio = socketio.AsyncServer(async_mode="asgi", cors_allowed_origins="*") + + async def serve_index(request): # type: ignore[no-untyped-def] + if _MAP_HTML.exists(): + return FileResponse(_MAP_HTML, media_type="text/html") + return Response(content="marauders_map.html not found", status_code=503) + + async def serve_socketio_js(request): # type: ignore[no-untyped-def] + if _SOCKETIO_JS.exists(): + return FileResponse(_SOCKETIO_JS, media_type="application/javascript") + return Response(content="socketio.min.js not found", status_code=503) + + async def serve_hp_js(request): # type: ignore[no-untyped-def] + if _HP_JS.exists(): + return FileResponse(_HP_JS, media_type="application/javascript") + return Response(content="hp_characters.js not found", status_code=503) + + async def serve_bgm(request): # type: ignore[no-untyped-def] + """Background ambient music (loop-played in the page). + + Served from this folder so the page works on the offline field + network. Audio kept under /vendor/* for consistency with the + other static asset routes. + """ + if _BGM_MP3.exists(): + return FileResponse(_BGM_MP3, media_type="audio/mpeg") + return Response(content="bgm.mp3 not found", status_code=503) + + starlette_app = Starlette( + routes=[ + Route("/", serve_index), + Route("/vendor/socketio.js", serve_socketio_js), + Route("/vendor/hp_characters.js", serve_hp_js), + Route("/vendor/bgm.mp3", serve_bgm), + ] + ) + self.app = socketio.ASGIApp(self.sio, starlette_app) + + @self.sio.event # type: ignore[untyped-decorator] + async def connect(sid, environ) -> None: # type: ignore[no-untyped-def] + logger.info(f"Marauder's Map client connected: {sid}") + # Send the cached map + current people so a fresh client is not blank. + if self._map_meta is not None: + await self.sio.emit("map", self._map_meta, room=sid) # type: ignore[union-attr] + await self.sio.emit("people", {"people": self._people_payload()}, room=sid) # type: ignore[union-attr] + + @self.sio.event # type: ignore[untyped-decorator] + async def get_photo(sid, data) -> None: # type: ignore[no-untyped-def] + """Client asked for a full-size portrait to view large.""" + try: + ident = int(data.get("id")) + except Exception: + return + entry = self._people.get(ident) + full = entry.get("photo_full") if entry else None + await self.sio.emit( # type: ignore[union-attr] + "photo_full", + {"id": ident, "img": full, "name": entry.get("name") if entry else None}, + room=sid, + ) + + @self.sio.event # type: ignore[untyped-decorator] + async def teleop(sid, data) -> None: # type: ignore[no-untyped-def] + """Web button held -> emit Twist on cmd_vel (->tele_cmd_vel topic). + + Payload is a Twist in robot units; the button handler in the page + scales the axes by the configured linear/angular speed so this + module stays a thin pipe. An all-zero Twist arrives on button + release and tells MovementManager to hand back to nav. + """ + try: + lx = float(data.get("linear_x", 0.0)) + ly = float(data.get("linear_y", 0.0)) + az = float(data.get("angular_z", 0.0)) + except Exception: + return + try: + self.cmd_vel.publish( + Twist(linear=Vector3(lx, ly, 0.0), angular=Vector3(0.0, 0.0, az)) + ) + except Exception: + logger.exception("Marauder's Map: teleop publish failed") + + @self.sio.event # type: ignore[untyped-decorator] + async def select(sid, data) -> None: # type: ignore[no-untyped-def] + """Web click on a character -> drive TargetLockModule. + Also cancels any active nav goal — only one driver of nav_cmd_vel + at a time (planner OR bbox-follow).""" + try: + ident = int(data.get("id")) + except Exception: + return + # Cancel any nav-to-point goal first so the planner stops driving + # before bbox-follow takes over. + try: + self.stop_movement.publish(Bool(data=True)) + except Exception: + logger.exception("Marauder's Map: stop_movement publish failed (on select)") + self._publish_selection(ident) + + @self.sio.event # type: ignore[untyped-decorator] + async def deselect(sid, data) -> None: # type: ignore[no-untyped-def] + """Web clears the selection -> empty Detection2DArray.""" + self._publish_selection(None) + + @self.sio.event # type: ignore[untyped-decorator] + async def navigate(sid, data) -> None: # type: ignore[no-untyped-def] + """Web click on a free point of the map -> drive the planner. + Payload: {"wx": , "wy": }. + Cancels any active follow (planner & bbox-follow share nav_cmd_vel + — exclusivity is enforced here).""" + try: + wx = float(data.get("wx")) + wy = float(data.get("wy")) + except Exception: + return + # Clear any locked person so bbox-follow stops driving nav_cmd_vel. + try: + self._publish_selection(None) + except Exception: + logger.exception("Marauder's Map: deselect on navigate failed") + try: + self.goal_request.publish( + PoseStamped( + position=(wx, wy, 0.0), + orientation=(0.0, 0.0, 0.0, 1.0), + frame_id=self.config.world_frame_hint, + ) + ) + # Echo back so the UI can render a goal pin without waiting + # for an odom round-trip. + await self.sio.emit( # type: ignore[union-attr] + "goal", {"x": wx, "y": wy} + ) + except Exception: + logger.exception("Marauder's Map: goal_request publish failed") + + @self.sio.event # type: ignore[untyped-decorator] + async def cancel_nav(sid, data) -> None: # type: ignore[no-untyped-def] + """Stop the planner (publishes Bool(True) on stop_movement).""" + try: + self.stop_movement.publish(Bool(data=True)) + await self.sio.emit("goal", None) # type: ignore[union-attr] + except Exception: + logger.exception("Marauder's Map: cancel_nav publish failed") + + def _start_broadcast_loop(self) -> None: + def loop_runner() -> None: + self._broadcast_loop = asyncio.new_event_loop() + asyncio.set_event_loop(self._broadcast_loop) + try: + self._broadcast_loop.run_forever() + finally: + self._broadcast_loop.close() + + self._broadcast_thread = threading.Thread(target=loop_runner, daemon=True) + self._broadcast_thread.start() + + def _run_uvicorn_server(self) -> None: + config = uvicorn.Config( + self.app, + host=global_config.listen_host, + port=self.config.port, + log_level="error", + ) + self._uvicorn_server = uvicorn.Server(config) + self._uvicorn_server.run() + + # ------------------------------------------------------------------ # + # Stream handlers + # ------------------------------------------------------------------ # + def _on_color_image(self, image: Image) -> None: + with self._lock: + self._latest_image = image + + def _on_pointcloud(self, pc: PointCloud2) -> None: + with self._lock: + self._latest_pc = pc + + def _on_odom(self, msg: PoseStamped) -> None: + self._emit( + "robot", + {"x": float(msg.position.x), "y": float(msg.position.y), "label": self._label}, + ) + + def _on_costmap(self, grid: OccupancyGrid) -> None: + now = time.monotonic() + if now - self._last_map_emit < 1.0 / max(self.config.map_emit_hz, 0.1): + return + self._last_map_emit = now + try: + meta = self._encode_map(grid) + except Exception: + logger.exception("Marauder's Map: failed to encode occupancy grid") + return + self._map_meta = meta + self._emit("map", meta) + + def _on_detections(self, msg: Detection2DArray) -> None: + # Header is stashed unconditionally so the web select event can still + # emit a valid Detection2DArray even on frames we throttle past. + self._latest_detection_header = msg.header + + # Build raw-detection lookup (by LCM id string == track_id) so a web + # click for stable_id N can construct a single-detection array from + # the *current* frame, not the throttled-stale one. + raw_by_id = {str(getattr(r, "id", "") or ""): r for r in msg.detections} + + now = time.monotonic() + if now - self._last_detect < 1.0 / max(self.config.detect_hz, 0.1): + self._refresh_stable_raw(msg.detections, raw_by_id) + return + self._last_detect = now + + with self._lock: + image = self._latest_image + pc = self._latest_pc + if image is None or pc is None: + return + + # World <- camera_optical transform, same lookup Detection3DModule uses. + try: + transform = self.tf.get("camera_optical", pc.frame_id, image.ts, 1.0) + except Exception: + transform = None + if not transform: + return + + try: + parsed = ImageDetections2D.from_ros_detection2d_array(image, msg) + except Exception: + logger.exception("Marauder's Map: failed to parse detections") + return + + # People (class 0) plus, optionally, other Go2-like quadrupeds (dog). + persons = [det for det in parsed if int(det.class_id) == PERSON_CLASS_ID] + dogs = ( + [det for det in parsed if int(det.class_id) == self.config.robot_dog_class_id] + if self.config.detect_robot_dogs + else [] + ) + + # Same-frame co-occurrence = different people; feed this to reID so two + # people standing together never collapse into one ID. + if self._idsystem is not None and len(persons) > 1: + try: + self._idsystem.add_negative_constraints([int(d.track_id) for d in persons]) + except Exception: + logger.exception("Marauder's Map: reID negative-constraint update failed") + + seen_now = time.time() + for det in persons: + center = self._project_center(det, pc, transform) + if center is None: + continue + x, y = center + ident = self._resolve_identity(det, x, y, seen_now) + if ident is None: + continue # appearance reID not confident yet + self._write_entry(ident, det, x, y, "person", seen_now) + raw = raw_by_id.get(str(int(det.track_id))) + if raw is not None: + self._stable_to_raw_det[ident] = raw + + for det in dogs: + center = self._project_center(det, pc, transform) + if center is None: + continue + ident = DOG_ID_BASE + int(det.track_id) + self._write_entry(ident, det, center[0], center[1], "dog", seen_now) + raw = raw_by_id.get(str(int(det.track_id))) + if raw is not None: + self._stable_to_raw_det[ident] = raw + + self._expire_people() + self._prune_stable(seen_now) + self._emit("people", {"people": self._people_payload()}) + + def _refresh_stable_raw( + self, raw_dets: list[Any], raw_by_id: dict[str, Any] + ) -> None: + """Keep _stable_to_raw_det fresh on frames we throttled past. + + Doesn't run reID / projection — only re-binds the stable ids we + already know to whatever raw detection currently carries the same + track id, so a web click in this frame still produces a usable + single-detection array. + """ + for sid, prev_raw in list(self._stable_to_raw_det.items()): + track_id = str(getattr(prev_raw, "id", "") or "") + if not track_id: + continue + cur = raw_by_id.get(track_id) + if cur is not None: + self._stable_to_raw_det[sid] = cur + + def _project_center( + self, det: Any, pc: PointCloud2, transform: Any + ) -> tuple[float, float] | None: + """Project a 2D detection to a world-frame (x, y) via the lidar map.""" + try: + det3d = Detection3DPC.from_2d( + det, + world_pointcloud=pc, + camera_info=self.config.camera_info, + world_to_optical_transform=transform, + ) + except Exception: + det3d = None + if det3d is None: + return None + return float(det3d.center.x), float(det3d.center.y) + + def _resolve_identity(self, det: Any, x: float, y: float, now: float) -> int | None: + """Stable display id for a person. + + With appearance reID enabled, defer to it. Otherwise use spatial-temporal + re-association on top of the detector's track id so the SAME person keeps + one id even when the tracker hands out a fresh track id after a gap. + """ + if self._idsystem is not None: + try: + lid = int(self._idsystem.register_detection(det)) + except Exception: + logger.exception("Marauder's Map: reID register failed") + return int(det.track_id) + return None if lid < 0 else lid + + tid = int(det.track_id) + sid = self._track_to_stable.get(tid) + if sid is None: + sid = self._reassociate(x, y, now) + if sid is None: + sid = self._next_stable + self._next_stable += 1 + self._track_to_stable[tid] = sid + self._stable_pos[sid] = {"x": x, "y": y, "last_seen": now} + return sid + + def _reassociate(self, x: float, y: float, now: float) -> int | None: + """Find a recently-lost (not currently active) stable id near (x, y).""" + best: int | None = None + best_d = self.config.reassoc_radius_m + active_cut = now - 1.0 # an id seen within 1s is live -> never steal it + for sid, info in self._stable_pos.items(): + last = info["last_seen"] + if last > active_cut: + continue + if now - last > self.config.reassoc_window_s: + continue + d = math.hypot(x - info["x"], y - info["y"]) + if d < best_d: + best_d, best = d, sid + return best + + def _prune_stable(self, now: float) -> None: + cutoff = now - self.config.reassoc_window_s + dead = [s for s, i in self._stable_pos.items() if i["last_seen"] < cutoff] + for s in dead: + self._stable_pos.pop(s, None) + for t in [t for t, s in self._track_to_stable.items() if s in dead]: + self._track_to_stable.pop(t, None) + + def _write_entry( + self, ident: int, det: Any, x: float, y: float, kind: str, seen_now: float + ) -> None: + """Update a person's roster/map entry.""" + entry = self._people.get(ident, {}) + entry.update( + { + "x": x, + "y": y, + "name": str(det.name), + "class_id": int(det.class_id), + "kind": kind, + "last_seen": seen_now, + } + ) + # Refresh thumbnail + full-size crop occasionally (crop + jpeg is not free). + if seen_now - entry.get("photo_ts", 0.0) > self.config.photo_refresh_sec: + try: + crop = det.cropped_image(padding=8) + entry["photo"] = crop.to_base64( + quality=self.config.photo_quality, + max_width=self.config.photo_max_width, + ) + # Larger version kept server-side; served on demand (not broadcast). + entry["photo_full"] = crop.to_base64( + quality=self.config.photo_full_quality, + max_width=self.config.photo_full_max_width, + ) + entry["photo_ts"] = seen_now + except Exception: + pass + self._people[ident] = entry + + # ------------------------------------------------------------------ # + # Helpers + # ------------------------------------------------------------------ # + def _detect_wifi_ssid(self) -> str: + """Best-effort current WiFi SSID, used as this dog's label.""" + iface = self.config.wifi_interface + cmds: list[list[str]] = [] + if sys.platform == "darwin": + cmds = [ + ["networksetup", "-getairportnetwork", iface], + ["ipconfig", "getsummary", iface], + ] + else: # linux + cmds = [["iwgetid", "-r"], ["nmcli", "-t", "-f", "active,ssid", "dev", "wifi"]] + + for cmd in cmds: + try: + out = subprocess.run(cmd, capture_output=True, text=True, timeout=5).stdout + except Exception: + continue + if not out: + continue + # networksetup: "Current Wi-Fi Network: dimair13" + if "Current Wi-Fi Network:" in out: + return out.split("Current Wi-Fi Network:", 1)[1].strip().splitlines()[0] + # ipconfig getsummary: a line " SSID : dimair13" + for line in out.splitlines(): + s = line.strip() + if s.upper().startswith("SSID") and ":" in s: + return s.split(":", 1)[1].strip() + # nmcli "yes:dimair13" + if s.startswith("yes:"): + return s.split(":", 1)[1].strip() + # iwgetid -r prints the bare SSID + if cmd[0] == "iwgetid" and out.strip(): + return out.strip().splitlines()[0] + return "" + + def _expire_people(self) -> None: + cutoff = time.time() - self.config.person_ttl_sec + for tid in [t for t, e in self._people.items() if e.get("last_seen", 0) < cutoff]: + del self._people[tid] + self._stable_to_raw_det.pop(tid, None) + + def _people_payload(self) -> list[dict[str, Any]]: + # Note: the large `photo_full` is intentionally excluded here -- it is + # served on demand via the `get_photo` event to keep this broadcast lean. + out = [] + for tid, e in self._people.items(): + out.append( + { + "id": tid, + "x": e.get("x"), + "y": e.get("y"), + "name": e.get("name"), + "kind": e.get("kind", "person"), + "seen_by": self._label, + "photo": e.get("photo"), + "age": round(time.time() - e.get("last_seen", time.time()), 1), + } + ) + return out + + def _encode_map(self, grid: OccupancyGrid) -> dict[str, Any]: + """Render the occupancy grid to an RGBA PNG of ink walls (transparent + elsewhere) and return it plus the world->pixel mapping metadata.""" + g = np.asarray(grid.grid) + h, w = g.shape + rgba = np.zeros((h, w, 4), dtype=np.uint8) + + occupied = g >= 50 + free = (g >= 0) & (g < 50) + # Ink walls (dark sepia), faint inked floor, transparent unknown. + rgba[occupied] = (40, 30, 22, 255) + rgba[free] = (90, 70, 45, 40) + + ok, buf = cv2.imencode(".png", cv2.cvtColor(rgba, cv2.COLOR_RGBA2BGRA)) + img_b64 = base64.b64encode(buf.tobytes()).decode("utf-8") if ok else "" + + origin = grid.info.origin + return { + "img": img_b64, + "width": int(w), + "height": int(h), + "resolution": float(grid.info.resolution), + "origin": [float(origin.position.x), float(origin.position.y)], + "label": self._label, + } + + def _publish_selection(self, ident: int | None) -> None: + """Drive BBoxSelectionModule by synthesizing a camera-pixel click. + + Selecting: publish a ``PointStamped`` at the *center* of the chosen + person's bbox with ``frame_id="color_image/web_click"``. + BBoxSelectionModule's ``clicked_point`` handler accepts + any frame_id containing ``color_image``, hit-tests the + pixel against current detections, and locks onto the + matching bbox -- the exact same path Rerun camera clicks + take, with no upstream code touched. + + Deselecting: publish a ``PointStamped`` far outside any detection + box. BBoxSelectionModule's "click did not hit any bbox" + branch then clears the selection naturally. + """ + ts = time.time() + if ident is None: + # A guaranteed miss; finite numbers so the non-finite filter passes + # but the hit-test rejects -> clears selection. + click = PointStamped( + ts=ts, frame_id="color_image/web_click", x=-1.0e6, y=-1.0e6, z=0.0 + ) + try: + self.clicked_point.publish(click) + except Exception: + logger.exception("Marauder's Map: deselect publish failed") + return + + raw = self._stable_to_raw_det.get(ident) + if raw is None: + logger.info("Marauder's Map: no live detection for id=%s", ident) + return + try: + center = raw.bbox.center.position + click = PointStamped( + ts=ts, + frame_id="color_image/web_click", + x=float(center.x), + y=float(center.y), + z=0.0, + ) + self.clicked_point.publish(click) + except Exception: + logger.exception("Marauder's Map: select publish failed") + + def _emit(self, event: str, data: Any) -> None: + if ( + self.sio is not None + and self._broadcast_loop is not None + and not self._broadcast_loop.is_closed() + ): + asyncio.run_coroutine_threadsafe(self.sio.emit(event, data), self._broadcast_loop) + + +__all__ = ["ReidMapConfig", "ReidMapModule"] diff --git a/dimos/apps/marauders_map/templates/hp_characters.js b/dimos/apps/marauders_map/templates/hp_characters.js new file mode 100644 index 0000000000..62640aea9a --- /dev/null +++ b/dimos/apps/marauders_map/templates/hp_characters.js @@ -0,0 +1,1602 @@ +window.HP_CHARACTERS = [ +{ +"name": "Harry Potter", +"color": "#7a1f1f", +"quotes": [ +"I solemnly swear that I am up to no good.", +"I don't go looking for trouble. Trouble usually finds me.", +"Expelliarmus!", +"I'll not back down, not today.", +"Point me at the danger.", +"Fear is just the start of courage.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Hermione Granger", +"color": "#7a1f1f", +"quotes": [ +"It's leviOsa, not levioSA!", +"When in doubt, go to the library.", +"Books! And cleverness!", +"I read about this. Twice.", +"Logic will get us out of here.", +"Honestly, it's quite simple.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Ron Weasley", +"color": "#7a1f1f", +"quotes": [ +"Bloody hell.", +"She needs to sort out her priorities.", +"Why is it always me?", +"I'm with you, to the end.", +"You'll not face it alone.", +"I don't abandon my friends.", +"Well, this is going splendidly.", +"Mischief, as ever, managed.", +"Hold my butterbeer.", +"I—I'm not sure we should." +] +}, +{ +"name": "Albus Dumbledore", +"color": "#7a1f1f", +"quotes": [ +"Happiness can be found even in the darkest of times.", +"It is our choices that show what we truly are.", +"After all this time? Always... no, that's Severus.", +"Patience reveals what haste hides.", +"Every choice carves the soul.", +"Listen more than you speak.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Severus Snape", +"color": "#1f5a2f", +"quotes": [ +"Turn to page three hundred and ninety-four.", +"Always.", +"Obviously.", +"How original.", +"Charming. Truly.", +"Was that meant to impress?", +"Pathetic.", +"I'm with you, to the end.", +"You'll not face it alone.", +"I don't abandon my friends." +] +}, +{ +"name": "Draco Malfoy", +"color": "#1f5a2f", +"quotes": [ +"My father will hear about this.", +"Scared, Potter?", +"Wait till my father hears.", +"Do you know who I am?", +"I do not lower myself for anyone.", +"Mediocrity offends me.", +"How frightfully common.", +"I don't associate with your sort.", +"Mudbloods, honestly.", +"Curious. Most curious." +] +}, +{ +"name": "Luna Lovegood", +"color": "#2f4a8a", +"quotes": [ +"You're just as sane as I am.", +"The Nargles are behind it.", +"I hope there's pudding.", +"The Wrackspurts are thick today.", +"I think it's perfectly lovely.", +"Reality is overrated, don't you think?", +"Things are often stranger than they seem.", +"I rather like the upside-down.", +"Do you hear them too?", +"All is as it should be." +] +}, +{ +"name": "Rubeus Hagrid", +"color": "#7a1f1f", +"quotes": [ +"Yer a wizard, Harry.", +"I should not have said that.", +"What's comin' will come.", +"There, there, no harm done.", +"Be kind, it costs nothing.", +"Easy now, easy.", +"Misunderstood, they are, not monsters.", +"Treat 'em right an' they'll treat you right.", +"Beautiful creature, ain't she?", +"Curious. Most curious." +] +}, +{ +"name": "Minerva McGonagall", +"color": "#7a1f1f", +"quotes": [ +"Why is it always you three?", +"Have a biscuit, Potter.", +"Hooligans!", +"Rules exist for a reason.", +"I expect nothing less than excellence.", +"Detention. Now.", +"Do you know who I am?", +"I do not lower myself for anyone.", +"Mediocrity offends me.", +"Curious. Most curious." +] +}, +{ +"name": "Sirius Black", +"color": "#7a1f1f", +"quotes": [ +"The ones that love us never really leave us.", +"We've all got both light and dark inside us.", +"I did my waiting! Twelve years of it!", +"I'm with you, to the end.", +"You'll not face it alone.", +"I don't abandon my friends.", +"I'm getting too old for this.", +"Another full moon, another scar.", +"Rest, while you can.", +"Curious. Most curious." +] +}, +{ +"name": "Lord Voldemort", +"color": "#1f5a2f", +"quotes": [ +"There is no good and evil, only power.", +"Harry Potter, the boy who lived.", +"I can touch you now.", +"You will regret crossing me.", +"Beg. It changes nothing.", +"Pain is such a fine teacher.", +"The Dark Lord rewards the faithful.", +"Light makes such weak men.", +"Soon, none will oppose us.", +"Curious. Most curious." +] +}, +{ +"name": "Dobby", +"color": "#5a3a1a", +"quotes": [ +"Dobby is free.", +"Dobby has no master!", +"Harry Potter must not go back to Hogwarts!", +"I'm with you, to the end.", +"You'll not face it alone.", +"I don't abandon my friends.", +"I'll not back down, not today.", +"Point me at the danger.", +"Fear is just the start of courage.", +"Curious. Most curious." +] +}, +{ +"name": "Neville Longbottom", +"color": "#7a1f1f", +"quotes": [ +"I—I'm not sure we should.", +"Please don't make me.", +"Oh dear, oh dear.", +"I'll not back down, not today.", +"Point me at the danger.", +"Fear is just the start of courage.", +"Oh—sorry, didn't mean to—", +"I'd rather not, if that's alright.", +"They're really quite friendly, I promise.", +"Curious. Most curious." +] +}, +{ +"name": "Bellatrix Lestrange", +"color": "#1f5a2f", +"quotes": [ +"Hee hee hee!", +"Shall I do it slowly?", +"The Dark Lord is RISING!", +"Crucio is such fun.", +"You will regret crossing me.", +"Beg. It changes nothing.", +"Pain is such a fine teacher.", +"The Dark Lord rewards the faithful.", +"I'd die for him, gladly.", +"Blood traitors deserve nothing." +] +}, +{ +"name": "Ginny Weasley", +"color": "#7a1f1f", +"quotes": [ +"Try me and find out.", +"I fight my own battles.", +"Underestimate me again.", +"Well, this is going splendidly.", +"Mischief, as ever, managed.", +"Hold my butterbeer.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Fred Weasley", +"color": "#7a1f1f", +"quotes": [ +"Care for a Skiving Snackbox?", +"We'd like to test it, purely for science.", +"Fancy a Canary Cream?", +"Honestly, mate, lighten up.", +"Boom. You're welcome.", +"Honestly, lighten up.", +"We're the good kind of trouble.", +"Pull my wand, go on.", +"I'll not back down, not today.", +"Point me at the danger." +] +}, +{ +"name": "George Weasley", +"color": "#7a1f1f", +"quotes": [ +"Care for a Skiving Snackbox?", +"We'd like to test it, purely for science.", +"Fancy a Canary Cream?", +"Honestly, mate, lighten up.", +"Boom. You're welcome.", +"Honestly, lighten up.", +"We're the good kind of trouble.", +"Pull my wand, go on.", +"I read about this. Twice.", +"Logic will get us out of here." +] +}, +{ +"name": "Remus Lupin", +"color": "#7a1f1f", +"quotes": [ +"Be kind, it costs nothing.", +"There's good in everyone, mostly.", +"Let me help you up.", +"I'm getting too old for this.", +"Another full moon, another scar.", +"Rest, while you can.", +"Patience reveals what haste hides.", +"Every choice carves the soul.", +"Listen more than you speak.", +"Curious. Most curious." +] +}, +{ +"name": "Nymphadora Tonks", +"color": "#7a1f1f", +"quotes": [ +"Oh—sorry, didn't mean to—", +"I'd rather not, if that's alright.", +"They're really quite friendly, I promise.", +"Well, this is going splendidly.", +"Mischief, as ever, managed.", +"Hold my butterbeer.", +"I'll not back down, not today.", +"Point me at the danger.", +"Fear is just the start of courage.", +"Curious. Most curious." +] +}, +{ +"name": "Alastor Moody", +"color": "#3a5a3a", +"quotes": [ +"Bah.", +"Speak plainly or not at all.", +"Don't make me repeat myself.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Kingsley Shacklebolt", +"color": "#3a5a3a", +"quotes": [ +"Hmph.", +"I do not waste words.", +"We shall see.", +"Patience reveals what haste hides.", +"Every choice carves the soul.", +"Listen more than you speak.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Arthur Weasley", +"color": "#7a1f1f", +"quotes": [ +"Patience reveals what haste hides.", +"Every choice carves the soul.", +"Listen more than you speak.", +"Be kind, it costs nothing.", +"There's good in everyone, mostly.", +"Let me help you up.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Molly Weasley", +"color": "#7a1f1f", +"quotes": [ +"Come in, come in, you're freezing.", +"There's always room for one more.", +"Family is everything.", +"Try me and find out.", +"I fight my own battles.", +"Underestimate me again.", +"You'll eat something first.", +"NOT MY CHILDREN!", +"Wear a scarf, it's cold.", +"Sit, I'll mend it." +] +}, +{ +"name": "Percy Weasley", +"color": "#7a1f1f", +"quotes": [ +"I must insist on proper procedure.", +"As Head Boy, I cannot condone this.", +"Standards, people, standards.", +"I take this very seriously.", +"You can count on me.", +"I won't let you down.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Bill Weasley", +"color": "#7a1f1f", +"quotes": [ +"Hmph.", +"I do not waste words.", +"We shall see.", +"I'll not back down, not today.", +"Point me at the danger.", +"Fear is just the start of courage.", +"Patience reveals what haste hides.", +"Every choice carves the soul.", +"Listen more than you speak.", +"Curious. Most curious." +] +}, +{ +"name": "Charlie Weasley", +"color": "#7a1f1f", +"quotes": [ +"Bah.", +"Speak plainly or not at all.", +"Don't make me repeat myself.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Cedric Diggory", +"color": "#9a7a1f", +"quotes": [ +"Do you know who I am?", +"I do not lower myself for anyone.", +"Mediocrity offends me.", +"Rules exist for a reason.", +"I expect nothing less than excellence.", +"Detention. Now.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Cho Chang", +"color": "#2f4a8a", +"quotes": [ +"Be kind, it costs nothing.", +"There's good in everyone, mostly.", +"Let me help you up.", +"I'm getting too old for this.", +"Another full moon, another scar.", +"Rest, while you can.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Cornelius Fudge", +"color": "#5a4a6a", +"quotes": [ +"Have you seen my smile?", +"Fame, my dear, is a full-time job.", +"Do get my good side.", +"I—I'm not sure we should.", +"Please don't make me.", +"Oh dear, oh dear.", +"The Ministry has it well in hand.", +"Let us not cause a panic.", +"Procedure must be followed.", +"Curious. Most curious." +] +}, +{ +"name": "Dolores Umbridge", +"color": "#5a4a6a", +"quotes": [ +"I will have order!", +"Naughty children deserve to be punished.", +"Hem, hem.", +"Be kind, it costs nothing.", +"There's good in everyone, mostly.", +"Let me help you up.", +"You will regret crossing me.", +"Beg. It changes nothing.", +"Pain is such a fine teacher.", +"Curious. Most curious." +] +}, +{ +"name": "Gilderoy Lockhart", +"color": "#2f4a8a", +"quotes": [ +"Have you seen my smile?", +"Fame, my dear, is a full-time job.", +"Do get my good side.", +"Fame is a full-time job.", +"Allow me to demonstrate. Carefully.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go." +] +}, +{ +"name": "Sybill Trelawney", +"color": "#2f4a8a", +"quotes": [ +"I sense a disturbance...", +"The Grim! I see the Grim!", +"Your aura is most troubled today.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Filius Flitwick", +"color": "#2f4a8a", +"quotes": [ +"Well, this is going splendidly.", +"Mischief, as ever, managed.", +"Hold my butterbeer.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Pomona Sprout", +"color": "#9a7a1f", +"quotes": [ +"Be kind, it costs nothing.", +"There's good in everyone, mostly.", +"Let me help you up.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Horace Slughorn", +"color": "#1f5a2f", +"quotes": [ +"Well, this is going splendidly.", +"Mischief, as ever, managed.", +"Hold my butterbeer.", +"How frightfully common.", +"I don't associate with your sort.", +"Beneath me, all of it.", +"Hmph.", +"I do not waste words.", +"We shall see.", +"Curious. Most curious." +] +}, +{ +"name": "Argus Filch", +"color": "#4a4a4a", +"quotes": [ +"How original.", +"Charming. Truly.", +"Was that meant to impress?", +"Pathetic.", +"Students. Filth, the lot.", +"I'll have you in chains.", +"No running in the corridors!", +"Curious. Most curious.", +"We'll see about that.", +"As you wish." +] +}, +{ +"name": "Madam Pomfrey", +"color": "#4a4a4a", +"quotes": [ +"Drink this, all of it.", +"Out of my hospital wing!", +"You'll live. Probably.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Lucius Malfoy", +"color": "#1f5a2f", +"quotes": [ +"How frightfully common.", +"I don't associate with your sort.", +"Beneath me, all of it.", +"You will regret crossing me.", +"Beg. It changes nothing.", +"Pain is such a fine teacher.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Narcissa Malfoy", +"color": "#1f5a2f", +"quotes": [ +"Do you know who I am?", +"I do not lower myself for anyone.", +"Mediocrity offends me.", +"You'll eat something first.", +"NOT MY CHILDREN!", +"Wear a scarf, it's cold.", +"Sit, I'll mend it.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish." +] +}, +{ +"name": "Peter Pettigrew", +"color": "#7a1f1f", +"quotes": [ +"I—I'm not sure we should.", +"Please don't make me.", +"Oh dear, oh dear.", +"How original.", +"Charming. Truly.", +"Was that meant to impress?", +"Pathetic.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish." +] +}, +{ +"name": "James Potter", +"color": "#7a1f1f", +"quotes": [ +"I'll not back down, not today.", +"Point me at the danger.", +"Fear is just the start of courage.", +"Do you know who I am?", +"I do not lower myself for anyone.", +"Mediocrity offends me.", +"I'm with you, to the end.", +"You'll not face it alone.", +"I don't abandon my friends.", +"Curious. Most curious." +] +}, +{ +"name": "Lily Potter", +"color": "#7a1f1f", +"quotes": [ +"Be kind, it costs nothing.", +"There's good in everyone, mostly.", +"Let me help you up.", +"I'll not back down, not today.", +"Point me at the danger.", +"Fear is just the start of courage.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Fleur Delacour", +"color": "#4a4a4a", +"quotes": [ +"Do you know who I am?", +"I do not lower myself for anyone.", +"Mediocrity offends me.", +"I'll not back down, not today.", +"Point me at the danger.", +"Fear is just the start of courage.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Viktor Krum", +"color": "#2a2a3a", +"quotes": [ +"Hmph.", +"I do not waste words.", +"We shall see.", +"Bah.", +"Speak plainly or not at all.", +"Don't make me repeat myself.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Dean Thomas", +"color": "#7a1f1f", +"quotes": [ +"Be kind, it costs nothing.", +"There's good in everyone, mostly.", +"Let me help you up.", +"Things are often stranger than they seem.", +"I rather like the upside-down.", +"Do you hear them too?", +"I'm with you, to the end.", +"You'll not face it alone.", +"I don't abandon my friends.", +"Curious. Most curious." +] +}, +{ +"name": "Seamus Finnigan", +"color": "#7a1f1f", +"quotes": [ +"Well, this is going splendidly.", +"Mischief, as ever, managed.", +"Hold my butterbeer.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Lavender Brown", +"color": "#7a1f1f", +"quotes": [ +"I sense a disturbance...", +"The Grim! I see the Grim!", +"Your aura is most troubled today.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Parvati Patil", +"color": "#7a1f1f", +"quotes": [ +"Well, this is going splendidly.", +"Mischief, as ever, managed.", +"Hold my butterbeer.", +"I sense a disturbance...", +"The Grim! I see the Grim!", +"Your aura is most troubled today.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Padma Patil", +"color": "#2f4a8a", +"quotes": [ +"I read about this. Twice.", +"Logic will get us out of here.", +"Honestly, it's quite simple.", +"Hmph.", +"I do not waste words.", +"We shall see.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Oliver Wood", +"color": "#7a1f1f", +"quotes": [ +"I take this very seriously.", +"You can count on me.", +"I won't let you down.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Angelina Johnson", +"color": "#7a1f1f", +"quotes": [ +"I take this very seriously.", +"You can count on me.", +"I won't let you down.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Katie Bell", +"color": "#7a1f1f", +"quotes": [ +"Try me and find out.", +"I fight my own battles.", +"Underestimate me again.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Lee Jordan", +"color": "#7a1f1f", +"quotes": [ +"Well, this is going splendidly.", +"Mischief, as ever, managed.", +"Hold my butterbeer.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Colin Creevey", +"color": "#7a1f1f", +"quotes": [ +"Oh—sorry, didn't mean to—", +"I'd rather not, if that's alright.", +"They're really quite friendly, I promise.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Ernie Macmillan", +"color": "#9a7a1f", +"quotes": [ +"I must insist on proper procedure.", +"As Head Boy, I cannot condone this.", +"Standards, people, standards.", +"I'm with you, to the end.", +"You'll not face it alone.", +"I don't abandon my friends.", +"Do you know who I am?", +"I do not lower myself for anyone.", +"Mediocrity offends me.", +"Curious. Most curious." +] +}, +{ +"name": "Hannah Abbott", +"color": "#9a7a1f", +"quotes": [ +"There, there, no harm done.", +"Be kind, it costs nothing.", +"Easy now, easy.", +"Oh—sorry, didn't mean to—", +"I'd rather not, if that's alright.", +"They're really quite friendly, I promise.", +"There's good in everyone, mostly.", +"Let me help you up.", +"Curious. Most curious.", +"We'll see about that." +] +}, +{ +"name": "Justin Finch-Fletchley", +"color": "#9a7a1f", +"quotes": [ +"I take this very seriously.", +"You can count on me.", +"I won't let you down.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Susan Bones", +"color": "#9a7a1f", +"quotes": [ +"Oh—sorry, didn't mean to—", +"I'd rather not, if that's alright.", +"They're really quite friendly, I promise.", +"I'll not back down, not today.", +"Point me at the danger.", +"Fear is just the start of courage.", +"Rules exist for a reason.", +"I expect nothing less than excellence.", +"Detention. Now.", +"Curious. Most curious." +] +}, +{ +"name": "Zacharias Smith", +"color": "#9a7a1f", +"quotes": [ +"How original.", +"Charming. Truly.", +"Was that meant to impress?", +"Pathetic.", +"Do you know who I am?", +"I do not lower myself for anyone.", +"Mediocrity offends me.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish." +] +}, +{ +"name": "Terry Boot", +"color": "#2f4a8a", +"quotes": [ +"I read about this. Twice.", +"Logic will get us out of here.", +"Honestly, it's quite simple.", +"Patience reveals what haste hides.", +"Every choice carves the soul.", +"Listen more than you speak.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Michael Corner", +"color": "#2f4a8a", +"quotes": [ +"How original.", +"Charming. Truly.", +"Was that meant to impress?", +"Pathetic.", +"I read about this. Twice.", +"Logic will get us out of here.", +"Honestly, it's quite simple.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish." +] +}, +{ +"name": "Marcus Flint", +"color": "#1f5a2f", +"quotes": [ +"Bah.", +"Speak plainly or not at all.", +"Don't make me repeat myself.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Vincent Crabbe", +"color": "#1f5a2f", +"quotes": [ +"Bah.", +"Speak plainly or not at all.", +"Don't make me repeat myself.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Gregory Goyle", +"color": "#1f5a2f", +"quotes": [ +"Bah.", +"Speak plainly or not at all.", +"Don't make me repeat myself.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Pansy Parkinson", +"color": "#1f5a2f", +"quotes": [ +"How original.", +"Charming. Truly.", +"Was that meant to impress?", +"Pathetic.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace." +] +}, +{ +"name": "Blaise Zabini", +"color": "#1f5a2f", +"quotes": [ +"Hmph.", +"I do not waste words.", +"We shall see.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Theodore Nott", +"color": "#1f5a2f", +"quotes": [ +"Oh—sorry, didn't mean to—", +"I'd rather not, if that's alright.", +"They're really quite friendly, I promise.", +"I read about this. Twice.", +"Logic will get us out of here.", +"Honestly, it's quite simple.", +"The Dark Lord rewards the faithful.", +"Light makes such weak men.", +"Soon, none will oppose us.", +"Curious. Most curious." +] +}, +{ +"name": "Fenrir Greyback", +"color": "#2a2a3a", +"quotes": [ +"You will regret crossing me.", +"Beg. It changes nothing.", +"Pain is such a fine teacher.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Antonin Dolohov", +"color": "#2a2a3a", +"quotes": [ +"You will regret crossing me.", +"Beg. It changes nothing.", +"Pain is such a fine teacher.", +"The Dark Lord rewards the faithful.", +"Light makes such weak men.", +"Soon, none will oppose us.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Rodolphus Lestrange", +"color": "#2a2a3a", +"quotes": [ +"I'm with you, to the end.", +"You'll not face it alone.", +"I don't abandon my friends.", +"You will regret crossing me.", +"Beg. It changes nothing.", +"Pain is such a fine teacher.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Rabastan Lestrange", +"color": "#2a2a3a", +"quotes": [ +"You will regret crossing me.", +"Beg. It changes nothing.", +"Pain is such a fine teacher.", +"Bah.", +"Speak plainly or not at all.", +"Don't make me repeat myself.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Walden Macnair", +"color": "#2a2a3a", +"quotes": [ +"The Dark Lord rewards the faithful.", +"Light makes such weak men.", +"Soon, none will oppose us.", +"You will regret crossing me.", +"Beg. It changes nothing.", +"Pain is such a fine teacher.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Barty Crouch Jr", +"color": "#2a2a3a", +"quotes": [ +"Hee hee hee!", +"Shall I do it slowly?", +"The Dark Lord is RISING!", +"Crucio is such fun.", +"The Dark Lord rewards the faithful.", +"I'd die for him, gladly.", +"Blood traitors deserve nothing.", +"All hail the Dark Lord.", +"I read about this. Twice.", +"Logic will get us out of here." +] +}, +{ +"name": "Barty Crouch Sr", +"color": "#5a4a6a", +"quotes": [ +"I must insist on proper procedure.", +"As Head Boy, I cannot condone this.", +"Standards, people, standards.", +"How frightfully common.", +"I don't associate with your sort.", +"Beneath me, all of it.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Igor Karkaroff", +"color": "#2a2a3a", +"quotes": [ +"I—I'm not sure we should.", +"Please don't make me.", +"Oh dear, oh dear.", +"How original.", +"Charming. Truly.", +"Was that meant to impress?", +"Pathetic.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish." +] +}, +{ +"name": "Madame Maxime", +"color": "#4a4a4a", +"quotes": [ +"Do you know who I am?", +"I do not lower myself for anyone.", +"Mediocrity offends me.", +"There, there, no harm done.", +"Be kind, it costs nothing.", +"Easy now, easy.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Grawp", +"color": "#5a3a1a", +"quotes": [ +"Oh—sorry, didn't mean to—", +"I'd rather not, if that's alright.", +"They're really quite friendly, I promise.", +"There, there, no harm done.", +"Be kind, it costs nothing.", +"Easy now, easy.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Firenze", +"color": "#5a3a1a", +"quotes": [ +"Patience reveals what haste hides.", +"Every choice carves the soul.", +"Listen more than you speak.", +"Mars is bright tonight.", +"The heavens do not lie.", +"We do not meddle in human folly.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Bane", +"color": "#5a3a1a", +"quotes": [ +"Do you know who I am?", +"I do not lower myself for anyone.", +"Mediocrity offends me.", +"Mars is bright tonight.", +"The heavens do not lie.", +"We do not meddle in human folly.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Aragog", +"color": "#5a3a1a", +"quotes": [ +"Patience reveals what haste hides.", +"Every choice carves the soul.", +"Listen more than you speak.", +"The Dark Lord rewards the faithful.", +"Light makes such weak men.", +"Soon, none will oppose us.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Buckbeak", +"color": "#5a3a1a", +"quotes": [ +"Do you know who I am?", +"I do not lower myself for anyone.", +"Mediocrity offends me.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Fawkes", +"color": "#5a3a1a", +"quotes": [ +"I'm with you, to the end.", +"You'll not face it alone.", +"I don't abandon my friends.", +"All is as it should be.", +"I'm not worried, are you?", +"Everything floats, eventually.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Kreacher", +"color": "#5a3a1a", +"quotes": [ +"How original.", +"Charming. Truly.", +"Was that meant to impress?", +"Pathetic.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace." +] +}, +{ +"name": "Winky", +"color": "#5a3a1a", +"quotes": [ +"I'm with you, to the end.", +"You'll not face it alone.", +"I don't abandon my friends.", +"I'm getting too old for this.", +"Another full moon, another scar.", +"Rest, while you can.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Griphook", +"color": "#5a3a1a", +"quotes": [ +"Gold remembers its owner.", +"Wizards. Always cheating.", +"A deal is a deal.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Ollivander", +"color": "#4a4a4a", +"quotes": [ +"The wand chooses the wizard.", +"Curious... very curious.", +"I remember every wand I sold.", +"Patience reveals what haste hides.", +"Every choice carves the soul.", +"Listen more than you speak.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Mr Borgin", +"color": "#2a2a3a", +"quotes": [ +"How original.", +"Charming. Truly.", +"Was that meant to impress?", +"Pathetic.", +"The Dark Lord rewards the faithful.", +"Light makes such weak men.", +"Soon, none will oppose us.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish." +] +}, +{ +"name": "Tom the Innkeeper", +"color": "#4a4a4a", +"quotes": [ +"Be kind, it costs nothing.", +"There's good in everyone, mostly.", +"Let me help you up.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Stan Shunpike", +"color": "#4a4a4a", +"quotes": [ +"Well, this is going splendidly.", +"Mischief, as ever, managed.", +"Hold my butterbeer.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Ernie Prang", +"color": "#4a4a4a", +"quotes": [ +"I'm getting too old for this.", +"Another full moon, another scar.", +"Rest, while you can.", +"Things are often stranger than they seem.", +"I rather like the upside-down.", +"Do you hear them too?", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Rita Skeeter", +"color": "#4a4a4a", +"quotes": [ +"Care to comment, dear?", +"My readers will adore this.", +"A quick quote, just a teensy one.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Xenophilius Lovegood", +"color": "#2f4a8a", +"quotes": [ +"Things are often stranger than they seem.", +"I rather like the upside-down.", +"Do you hear them too?", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Mad Auntie Muriel", +"color": "#7a1f1f", +"quotes": [ +"Bah.", +"Speak plainly or not at all.", +"Don't make me repeat myself.", +"How original.", +"Charming. Truly.", +"Was that meant to impress?", +"Pathetic.", +"I'm getting too old for this.", +"Another full moon, another scar.", +"Rest, while you can." +] +}, +{ +"name": "Andromeda Tonks", +"color": "#7a1f1f", +"quotes": [ +"Come in, come in, you're freezing.", +"There's always room for one more.", +"Family is everything.", +"Do you know who I am?", +"I do not lower myself for anyone.", +"Mediocrity offends me.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Regulus Black", +"color": "#1f5a2f", +"quotes": [ +"I'll not back down, not today.", +"Point me at the danger.", +"Fear is just the start of courage.", +"I'm getting too old for this.", +"Another full moon, another scar.", +"Rest, while you can.", +"Hmph.", +"I do not waste words.", +"We shall see.", +"Curious. Most curious." +] +}, +{ +"name": "Aberforth Dumbledore", +"color": "#3a5a3a", +"quotes": [ +"Bah.", +"Speak plainly or not at all.", +"Don't make me repeat myself.", +"I'm with you, to the end.", +"You'll not face it alone.", +"I don't abandon my friends.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Gellert Grindelwald", +"color": "#2a2a3a", +"quotes": [ +"For the greater good.", +"The old ways must end.", +"Power belongs to the bold.", +"The Dark Lord rewards the faithful.", +"Light makes such weak men.", +"Soon, none will oppose us.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +}, +{ +"name": "Newt Scamander", +"color": "#9a7a1f", +"quotes": [ +"Oh—sorry, didn't mean to—", +"I'd rather not, if that's alright.", +"They're really quite friendly, I promise.", +"There, there, no harm done.", +"Be kind, it costs nothing.", +"Easy now, easy.", +"Misunderstood, they are, not monsters.", +"Treat 'em right an' they'll treat you right.", +"Beautiful creature, ain't she?", +"Curious. Most curious." +] +}, +{ +"name": "Nicolas Flamel", +"color": "#4a4a4a", +"quotes": [ +"Patience reveals what haste hides.", +"Every choice carves the soul.", +"Listen more than you speak.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets.", +"Mind how you go.", +"Magic always leaves a trace.", +"Trouble follows the unwary." +] +}, +{ +"name": "Quirinus Quirrell", +"color": "#2a2a3a", +"quotes": [ +"Oh—sorry, didn't mean to—", +"I'd rather not, if that's alright.", +"They're really quite friendly, I promise.", +"The Dark Lord rewards the faithful.", +"Light makes such weak men.", +"Soon, none will oppose us.", +"Curious. Most curious.", +"We'll see about that.", +"As you wish.", +"The castle keeps its secrets." +] +} +]; diff --git a/dimos/apps/marauders_map/templates/marauders_map.html b/dimos/apps/marauders_map/templates/marauders_map.html new file mode 100644 index 0000000000..f2d0d3bc47 --- /dev/null +++ b/dimos/apps/marauders_map/templates/marauders_map.html @@ -0,0 +1,1774 @@ + + + + + + The Marauder's Map · DimOS + + + + +
+ +
+
The Wrath of Filch
+
A DimOS × Hogwarts Mischief
+
+
+ Night has fallen at Hogwarts. The torches gutter low. Curfew has come. +
+
+ And yet — across the castle, students still scroll their phones beneath + the covers, blue light flickering in the dorms. +
+
+ Argus Filch, hateful caretaker, prowls the corridors. Any phone he + finds is gone forever — locked away in his confiscation drawer beside + the Skiving Snackboxes and Extendable Ears. +
+
+ Tonight, a Unitree Go2 is your familiar. Send the hound to each soul + before Filch arrives. Snatch their phones. Hide them. Save the night. +
+
+

Win Conditions

+
    +
  • Spot every student who appears on the parchment.
  • +
  • Click their face — send the hound to hide their phone.
  • +
  • Beat Filch to all of them before the bell tolls dawn.
  • +
+
+
+ + +
+
+
+ +
+
+

The Marauder’s Map

+
Messrs DimOS solemnly swear they are up to good
+
summoning…
+
+
+ + + +
+
+ + +
— the map is blank until footprints are spied —
+ +
+
The Wrath of Filch
+
Beat Filch — hide every student's phone.
+
    +
  • Spot every student on the parchment.
  • +
  • Click their face — send the hound.
  • +
  • Get to all of them before dawn.
  • +
+
+ +
+ tracking — + release +
+ +
+ +
+ + + + + + + +
+
+
+
+
+ +
+
+

Blimey!

+
A spot of mischief afoot — set the hound upon…
+
+
Speak now, lest the parchment lose its patience.
+
+ + +
+
Enter to swear · Esc to recant
+
+
+ + + + + + + + + + + + + + + diff --git a/dimos/apps/marauders_map/templates/potion_latch.mp3 b/dimos/apps/marauders_map/templates/potion_latch.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..73613947ed3f18f16df05a43ecfc676f6d6dd7e0 GIT binary patch literal 1400579 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℞eQ&r!8aGS1bVjr0W4rt*#TFb6 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

!)ICPRmm< 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

r<6^->Zns$@k>%=+y-M?{B*QtM4v? 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 q6D3!x{>1wgABS7+ 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�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%0A?DMo`O6c&*Y7-Ft7ULy9O4GpCA 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

=^tQQ`*Y76(`?O^000hZkR%<&# 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

N-(e6_lfDEqa^_ub1xl-1p1zUp%Mx;JrZc3047 zgCHL98=&pq%G{Gmv&o3T!lpY8Z*LLUI|B0B0PkJE>vqYH10Y+acz3IN0G9e0IO5?F0qMV(4W1qEv#mZ8WJ}vOw zVDLvfmd5MMTh)p2a7?Aqo1%w}&#V8bAvC1=qC4DQm36m+RJJja5@CQ=rn^ zphyULh)W~0e0Ac+Shm~2K_vsvmZ6zjFyQAhx`NQ?_T~-H34zqoCv!$sRQ*Lv`E{E0 z?9_~DF`T(NkCr_?lENxY@#?Z$7FI{G*E<=by1T;ts&5Oiw zPu^-0B~pGzhUUhct(fdiu~Z!0Ozy)~B8#_hv}QdP%=`7bn|079E_-I%~{9U8rJtPh(Ay5k21{?eY>tH?l;U8mN`@?~!^YtJy#{(tfP z4gflsz2I|7XDjqzXD7Nm+%q?=ItD){XRIYVl??4s77#+0Z9+rfyZtH^;B;1j$vKBjS$^eQPvhcK&GNkO`;Bu|4z;P{v} z+{Z7l{SxO^D6+>6ydDR5u~XAsKzXshXG{bdHvaDz79{TasAhJ`Q&k0iXc*YYuN@ z>ExfBVrhPb&{Sm@uZFSrk@rSIHAm+PqZ4}_wRZvC6KB*a(H?*NH7z4DEf*(1p>df6 z)+u3Nw9LS0WYPI)*oY0U-L+6AwlZfi+WEEBy(8B_YhP%OP5N zM~8Mx#R(K6=2~h{HBoUhx1I~3DU2nmyd-4`?XTvXVc%9#>5u9@GnAqoXqHXI9qSAy zneK9Z4rPICGI{ce6>6t4)96@`Uv{{KBzD?nUr4Wg|5B-WvGge6-hOz$^6RFJ)F{oh zP|5<^T=AXL&y>~S8M6j+Od5#Z#~_3D>5^eo_G1`=K%Jsm{q@pdJdDpki|jup{sm>_ z${MSD+kTFJ_*P{`{Uf~=+p2BL$vB7CY)Spj|HP+T?-rA(lL?OORbE0 zXfSA+8LzxSe6y_&JCw`alp*B^sMgbFC+-i0cc}brzvRb0v>){#(~A9U@~lFER#^aG zII9)xO4|s6n0vK7(Lk#l^IxFOfC?;$aI$=|H^~|hV#pu zYYvqKbZXdutcIL<-isO-A6ufFS;ER4wiL zuQNJTS`HTOtDa0hI0lOA56d~qDjY?Zvuz=Vp`sbO{ar>*p+Mg4%T5adM7?oDk#WEm z>y5MWAJvp?2pyI$fja>&E*kvIZM0MOq{KZahij1NJYUKByd}59w`Y_?<+Z}ZlV}l$ z`(B@t*AZ^Q6j6+3R$ER3pzmy3avvVof?LOFBfsT1%J6zWky-%rOWs0aq2&5LFI#5A zC*FRtsnbG{9ce2;(Pi9VlII}VfJ8xQ)tBVzA?I>DNJropCjpg@uBmO;^AJtI z*|2o5PQq|xIWoW?dS>+H2vc2X!yE2JScCbLde~$uZiBvLy4&Oa)n}HNlaIdYYBfuT z?&K4+Nim@in6&zC#g`4}>(|mdkah~!TCg0JuZ^%k5v-M)Z?p{@s}U+llx5Nh zs^EjVX$)A&NImwPSnq0fC&hLxMM5Y$VS^(L5U?wwkG!^Qk-QLaUh)&U7Rj@c!|!?N z53a5ays7?tr46u77TqC@o#$w~$6p3Lqez<8EVhIG>7HNdYIOa;T+>Vhv zL4A?Z(Bh7ZBG~fkttL)$sQaXm-hwSH+tQ+))!?#TtN}3A@gzB&l=U=cIMB@jaxrB0 zI^`pYj6MHFgP<3k`y(PlGJ|IqYnL(0Eis``>SM-8GGiH`nxr5ttC7I zr>9XZb?Z^;JETs7zh$%AR$b8D4whZDr~S$5|NEq5;eZ5;TT|;y9a>uE+MQt|hY{6n zQB5FuDPf_iwU!CwqnQ|`7rWNu(v&8!!^i$jb$|f@8Ftq3K`g8nY?Ud-7yvGIPzDzS zAe0%hGlo1vW=eiZG2LuE0jVDn5mTv| zu!Tei?@Z|`l8FT2S&el+5}kW;5JWaJCs*GD3^1V>kp&>2ATh5$l>w&9i_vP#O&|!1 zW^c@_+9W8M%5Zg|H74X+@Ux?w$zN4u5dTl;PyCX)J#_!N`mG)7L4{S>0?=(%~N*0#Z)`nZWXNUvCxm0`2E?UdDySK|KPQCZtAjUcRBmIrTB;eIU1(l z{h|yN(A!*2DcD9F%e1MvWP8vhEYSg?%^sQyVXQBY>@?Xikd}_)|NFFL)qn(+TT|0X z9col)YMo^wi4wVWPpu@@sW+OcwT225C|><{uimXr#2HAW*V2hZySGn0PLhKV7Z@q@ ze826nfehKCw~Pp9-gtl`pkZ+w2L|i77qjSUs_zWV00jtdnR|HL-rTR;lR;@Uanzbw zri1)QDg}+4JYACKW31AfQ$1<2UCiCH-0nwDE7~{PnpxIgyrM-sdRbo{#bg*D#Lft8 z%$Fj?91}Cxq11DBxj=8^M*1#8BYKZ@h}j9D%&8IK6ACMVoiFUD2xh42(`(>q1TY%` zpov(}$kGj{9#{{RuvEKT7r~BAVC}B0j${m*IkGb+VyT$l>FK$#e1vr<;?d~qX?hA- z$L#rnBSILgA$~a_r+o+mTX`S=ZBkBw7mqrJOAj9b0k)3%f!2 zag4*+xO9q4_$WvUngdcInrG5IP_`08$RMD7QUb!*k7_i+8%_uf$4wiFBevlcE%tT_ zM)guA>_v4S!XaXqh=ui zXaEdMut5R`2pSj~Vq{i~D4Q@coZ)~7EM=uW$`nUcU_H8@%%dTnLsX%gLiO|7uhsZWk-y__UGpdkog zG$j)QCXb8@cXeP5(_5^}@n@FXgmdcE;guH@9Ti!Do@Y|M9fB}9hm9Trdwbny&?;M{ z-Qxl%2eoE`Z9xQ$+4ewbfxlqV@o-XDQE`{#{%c|_o>LKasQ%J4`Ew_Xi=^0)tW#~e zv~Ocg%sa?2RY0?^SibL8wPa68pQ^EKb0RdvOw)@vgOtN(Tf~W?m5w{{k}i{_?<3tUq0hMa$su9i6*R~ z$NOS?Z}Uz701;Rtdu777s&L}W_(|B{vz`&FqZ~M&SILM%mdvDZY+ZRjO=K)7Of)>O zQNc$O!VcM|D%$=jt2EjM+d$ETqi13EacE6q3BZP9C$LQ8pw4dD1GChA% z1wJh+-~fTEExPcs69>==|NEq5^N0j`TvQuOH9AoS`i)^Fg%Y)GO-(S=>69iZb)gwBR0gb2I$+&mhy;PdLP6cvhxo(k z@i`H5WAhWL1`m=faj9v3D8m(c6_tUEv=i)VTtbZ6nW@DEnN61(=kP$e4PqfI;yW(W zH$$zPQ{;Qo%o>6!54vA7%cskQMUDle`8nkz$y+m7+TQyqwE!F=zH8`a!y194Av`jo z5YK~|h}^kKsSaic2zYV^`bjHCR?1Ahv!{9zp4@EfCui;YZMXSYCche7;?bL^?HA2ZzV1)#*I8 zH|+!YMaTE8;H(I(XENB@_I}lV?k-xr`aJ*RbziJ1gEGIgSkzw&@y5*U-M{{|k#n+0 zq;c_UZZ$^S)88DRxRTZKZiyj6W`k(Sn=VFL02lxaAs){A@TS5G$dp+tp)wDO+mZ7b zZW#CQpNG@qT$r57g{5Gpq#&d2)3;Ij$i<^4|NEq5ROpyiwq&_utw<>Ra?*hlM%ir`sPNe41{+LQMjSccJ14hdue!tz3rpm-szePKL+ z&r8PiGZu1^Y@(gWYmHV1+cQtPSN@)UUhgbLmWJ#>*;4Q!6O{q>+k?vE;@8tbW=yiR z`2WC8Mc0B`F)X()po%+jshXA;d|CsASbZsIA<0v)mw}9G0F;A3a5Dj1ta<#YEoEr- zif((vwOpiBW~<$-C%ORD!eXJ5DKdoQp+1Oa0P z5yYs_1YR;>7{pQ4#kha&sT+QK{Xn@n1W}MGPf0O7>_ZW{X+xP>7(#a20iS*)e?VSyMbHKq;hGvOFbkqaB5JUGmy*u`hgTZ3%UHk&?{Iw#FrHR4h!i+>G)zscQX(G#2HWu-6*I)|!;uXPa+v+z8V^hU18m#e`pu zB@0vwJ!Di*H4eu%N-V82$D-3Z!|1l?fB^wl?Vtu=0+^}5>#w51ke>?>fYOJr{IO%V zX94v@`cx&ED>#zfDXXEU0GAQdVkf~RuA zH5pL>^BU3Z$bVbDSk{WF64&)zbS>E6@5k046SgTpDAVvzBnBJ{_RN#=1dp$l9wrHl zMF^lAO~8{g^XDyABSNDfu=?YPQxZJ|k}x^vSZF_9?UEElj=XMer_6jle4Gx9H<^Ch zCa~v;i8u)o?>n1>OmyLB#n{l!okPI00F?y3kRo8>dBh#OC<{}^D+T)Phr)AoJ6LUt}ZPa zq~}2U39DD_B~i;-_i_-&rM&gL!et^@t4T{1DGI|xf|w#M!N(Io=!1)pc&Q(e2D74w z6Q}($|LElpAzcKA3q6p5F;qz9Ldd=~8UEfr zhW;I;t>lK>;|d01_%K!3+icgbR!5R5wDb~I39*@!&m7N(D|GbQca_Om7*6YZNy(H*pPOSBB3sk5O01yD={c0eg7^FqX z((^e@sW&`{Dv4!H-O_P`$#pacLgQ*-9sUS)~v_;sS-5xOX#BN_w-4G3O=fgmE| zgx0#KK{DrBtT8o%V8vNFjw_2gld!~zxVlrpV9vY!`7sIW{eiBWrJUf*7J>KDg0_}-D5WyWBT@*2IQ>{GH=@Jntb+#1b6eMIQX%i4NP!`FDxO6^E}41rVSkq^MDXr`g@(K$+%F)G(I2vC9I1zAYkd=D$` zv57X{rK8HeEL#(aAep2YeJf_LOG%<785hAFd=kKY`u_M88VQLO3xuRNT|}=Z0?$4w4K3Q zE-9#@m?kT#`b}uxte_cG4(xw9L~!ir@eeCRfHM3MxqwD1_x+NQeyTG_{=tYIOs##GWS>Sqcb6 zg8Sf|%bL~R!B{kk}hZ@g9n2a1Hp38aFhiX<&Zzcw0@KgBJ9zeuXgOi zn(aRHjrT$JgJf_aC0@~R!iK;uSPbv?{^zV6V659| zfC2!_sOGZ1RS0Cuk$xe7O|WE`XBc>Ckf9M^!Zkq$2~R`FaZ>mJv5tqEUsVJkl45G& z^N`6iVuCkEO;-eJA0*ODI?!01D6R$%IzLhMx_04dR4oljh5uPNs>qV{6n*7<>K6x* z+K}c^;2B5YX_wEUQ~NeO!#QW3SDSoqZBQ7PpvI9;gy@|HMEu-H6T!c5CGb}LZanV zaizox8W}Q}BUTSUL@k9d1U`_n<^IuHM%C00Dp(F0!u30W*f? zGa&y27LlqzV3Y9R(CfIHQIruOfF+zMizll)t$Dl2ll;25w?xL7vyTcYCo%r)r}VUp zG}dAsP%rOX$?IPVO=5iGGksag`R$vI?i~8QEnkfL=2Df$G;CtIlHXUWWge=i^`xo~ z`PsMS!a46g|DON*koVzI+xL%IHlZyfE<35Jhn`{Zrs4!Z0KiS{g8(u>vUZDSMvu+psC=5mUJ%zx==g#^J&#a-IUm*ju|001Ben?AO8 zK#|Eh;nPIsLb1a%kR%KwI3Wv#Op`rU;w1$^53@63z@i8T!>XfBiA%8+=(&{maQ6Q! z8~(d+!&LNRX}g|NHTRqE6T`J2`_mQ2akDDEJ-jJlOtOVfSCHhksk>^;g6Fo{&fOCi zVx7t~0)?du6iF+dXrioaaDJ$Fc?)G;s5HJMHK&zyEEymM+Rl)p zI75)&_U7ciEeoj7-^Dvrv7@Z6RAk0E(zd&LC-T$c%6rAX&R&gECjrj-++UpPCOy4h z|NmQ{o$?HU#}MMe%6-wGS;Z*Lq~VWyzs)@#-yW-K`+5@~Se)V%Xw+62+q zausEfV$@XXG7WR?YFMpar81ixQBX=tAnu!11ulK4xT=SpsDLevRuD%QLNEaXbLnal z0h7=YT(w+?=gi10Od_z;2v&NlViHf#sgkA<*12?UZN@S}crzXR9X{IPsW`0uKW()y>Zh)ql4cb>mr(bYEqv4O7u_qJz|_#A;f6h7DF4hDU(;>! zK70t|?~fhy2vv-!iuFm0K`lYrqjzeZw&x!t`|W;wqwX&*5oPCPRhD`KOUVO0B+u3{ z1J;(FkAV;?>v0K^|NFFL;D7~BUDNANMEY_lT1su`ZxhXRPfa}2>D!`cou{F^rm~W4 zZLW^{IiS>}SYPEbb3&(s2x7bA_Bk3!FM`614fh|KtCakrI+!&}iZA<8I<4Id-H^7;`Aey0Om- zRPnQ#YQq4CwRW=c2#{@YbwPF|c8a+~ub3*sO$b604G|?Mj3QP%OsE~Wzz(ZnkWa~} z;SGYbH*;VweMuR2j3O0D#y&-lF!@fU+1%&$uMnX3C*|2wfmEEV=Og^Rk$ajZgq zZTWRgVbBAnTW8o^jIBS%-u92XsTbROo3hbeqU6hx8pVSui@n8Nf%mK1OJEPz^1%j~ zB5;Yg#R?;22n|3Ly08CgAmXA)5q;W1LKB@V1QLl3xGDnibSMQyMZ$PH8}0?=kyFG3 zOnEHS(fZKErpSowjOMUIR=lfGOf?*X{Ll2$^frZAPBo4}VG*c=HU(1gu1Mim`fI@u zg&DQF@~9GBBjU(lje#n`2UknNvrzEz1t2v%EDVWSAglNyok!vKu0qk|GD;>BoyS4+ zu1hXMQtYIxyl2;?oA^u{jw6 z2%O&gMJXkbx$(vPVz8RA|NFFL)qn*1T~kv`HELa_3Y~3-O%qvnPfak@p@SVNHKUrW z;6g3zPF)dV?_3c}bJ^0&{T0u=IJ!F@9W1G5b4j$< zU)TTtRO}t}_Bo6uo~#KxL`#abv^h`fAd0{Mfv0trbyqP7NY9Sn7V;Ke8k}GmS_C_j z1Pdqy-s;)%t($#>wa?E4Z9rd$x zyyN=i`yae8u~vQsp3>%Quz00=dUHFmau{H@A*)EC*8RZuc`+@v64J zje7Sr;JkEabCf_yIHHW)k0S%59$KJNG0+kq4%FA{Ef+}3ViRqWhOKI`lJU zt0rjA?Ksh8P-!JKX9msT2C`@e3rVhqxUbuF(6w{MeYZz!Hs$W!qZQrM9FaR2qx-nP zwP84sHj$I7e=HGz0CbtA_V)-u0IsQ5X%x`_@pr?AN*I+!ssV`sfrLs0i4Y8So|zMH zqg@YrJ|@eJLm9<(s5Ug$rtA6QZF4?jH))C#2Zm#lsHFAenziCK#HBp=*S_`dp9ODt z)O}5LEn&RXyo~8tjh*O>$(U4y&U}g&n2vYih(|mfWocBBYNS)PGLy<8@Zihkc!P8^_fr6g*WDpQqIY{MEnj{DdY===|PYgVR4Gm7`C2D!4 zv^j|swnp47MC`;eyGX#Ll(dyi|NFFL=KuuUUQ<&{H2PVDnvH3ThZKExO-(%0>DZj< zDW(?OS$L^+h&cPLrd}mLO&#svM=SN&VvA`DE4DGteWSZPT6X{WP{GoRS;G{k*GFd{=~RmG`GsDMBPxi!{tfB+i8X~}wx4G{(xG(f~?$xz$`LntsoRii8! z5VspGBVwr8E)syGOF$9yYVBIKfkdO>MqskO%nNWVrSM=j%&5wV>Z^Ijr_9#%aF60@ z`lOe0%S4v(qFP36XBzeS#7yCgE1c%|gz7rWGi_|h;&ve{U^e%@;$hobGga-j{mcB_ z##Zh{m+6$xv(i?jfp9yn;;+nfj4g7{jn5eVYfKY!oyW1>z^x>r{b7=J|sFa zLJJBS6$?5jj~&9H679o8c!RR;JGwFq^u(#M_qJzy4B82KtqmVHBQdf2fB)~hNlqc4 z;jD-VES930H%~74u?x@UyD^vgxw`QC?~MCSk!6bhHk>Je0WnJ5t?k$oKx~;;D$f*H zO~`R;6C5tz2+$8e5sDrt+0kM<2z{Q{YAE+HQ{G^bo^7`_W3bN-j22AYU>;E2NvyUaL~(NgbFU)IdY93yg? zgoibJfe{s+qT5W2&?=j+jHbZMr3(y8C?n~HAkyp#zyY_U+kPj?he{d8+~LDPqtb;K z>PS&0m%93b2L22u0XtdTB4?d*-ti}F|NFFL?SKUUT~kv}H2QVv+I?jvTN3eiPfa{? z;eDTKb*Gg*qclbLsrj^brK&~$Nz9@E>>>xFZGBTs7yT$+Hm4OMt1hHEL^S#f43)Y( zy}W6kz4igX$rnBL`9M(tT~e+RWa23Sah^qB@|GYcmgts!%)t8G~YZ`Qj3R4mu(GaNnY}I2hY55 z<uV4BF2ufp@GA^{W?i!`--ox{n1i5sv7|Kse{qISBk?3u0fBW zV+AMsUk?SH6Q3BeQ7lrylK?1eYFdgdaSL$eA~Y#lNedD#PYzv63H5U6A!x6(+qzpdfc3Or zZh3bKX=ZM-W-tXQhnXkx5Bt44wuZ{UKiTs?L6Z4y?O9nC?afWMSmPY))$;ny4ZOGr zQlD1s|9m9k4-~5GD5)c%keKUMu&nI{F8q?671xRg^-nexp%@b*@!)JDrJWVL*E!m? zZ$(9Tkq@O0Mx5edHEOH$pz=GSiGRDga~Xw8|NEq5^#BCLUDMM~H2P&G>V0MCTN71p zPVGF?>4P0AwTG45DhiM^JT8Sb;M`$;o$kuj0|0O{g-@TxOqb z*xdJ;)U$?m)b1ONB*b`@miArO66-SkXLOH(X}Hrx-mz;|6xrNJF=tz@Gg_kJqMPr7 zopiT-Tg%gB+;(eiEu9Ok)LLOyip%6r$g<#F0n!grU47e!OmV_1rBHbaLT&|yMYw9J zF4=l!Ws5!{zggmdp~N3Xys`@x7(rhY8+UBjhWR4!olij$oyeg+{L@Y(aS#~Ra(&hQ zztC1iswxNuD5c)$rzq_rCGGZCCxqw#6aat-q_)oul_C^#6=o(#MUWl!3PZ<-r|%ku%i>zP?dIj!Z}`YcL#UHpA! z94cG*Fd|Yf)DI)buUIEiIJWoeedX%btJ}$Avz&)Ole5W^=I&D1jIpNe!zssh5S@|W zJZ#;hXB2qg;nnNZ9z^=%2RiZPEV0eIbzd*Qk;-jV*ztHbAL$5y|NFFL)&KzUwU!o~L_|wg!Gc4fEnOf^X1QRA0?j}yKqe_Yw&3fG zG*VkwV8kpRg@Qyd1Vs83vg^uiDb!y4>{8DrT$^yrI>MXV@4)F!DYOid3t}CTV|zJ% zr!@$neBPYr$2?ip3g7fnI?Jc$4xF|shulaUS;51=lTvzV$-DMezSOD!CIE#$wa#Cn zRRaPhl!~Pq8_;#25#*!8fkTFdL8n<+uVmymP6|iDwklv9xfz4Tr=04*u#twu@!qc6 z30gV=6&mju^8tG}IviCjkZyOoy+@hdm$*j)xhV17P$+Y$3YrRT3m%;FMn4dC-fd`Wy`{x+yZp#%Bbq>^Iv`c zlBxTpwB^_IbP6@8lE2MYqh#sQr)p*!Kh}%Qsr}IVw$9Kr`1XFMm`UlZ6ps$T&VPo& zKmiN4EtkU*RSg;EWh}@P70TMaC9qjBTv!VW6&nXEl~00V!8qW$<{Ap$|NFFL(0~MZ zUsdZVG+0tZdW~u0PZCvqQLQA@=}{6YHHINP9-5Ci!B`kyhDufU8J5#O|LE+QhOID#e+@ku}MNiYi{9tq=ul z;+FR8V@|I&$z>H8r+s_1Qvd|sdiKnymj@XpU{K+bDC|mp@`chWj>_1@-G8e9105ah z5Cd^HjY2aPT=fw$xQ7E7G2?;dMhFu^0E1$s;eN9P#Ht~p4%vz!IRTJh>uYa!PhEsQ zawSbb(_Z8aK!&t=tW=)M;gP?^e&?b_LMZ{yHJP~ACl`?I5?Llh*_v0wRPPOt|L@y< z`0p=w?hMT>8)iP+FAX)jR$=|3Vr-d++7fvjr(}pac&5sr2t_UW+eIMG$!67{Ro-SO zwcS_Iw~K9CbSWyh;Pnuk=yLKcGImNqq?Y5)TZf^Obb*KxtaU_@8_AM6Rg_d|qj}DnxKbITzc2G;(;ltD%-G zX#on}57hEAMxZp3yG|TEMzS=823}ij`bWj((H9R=dfHw0A&m(qV%=!FFlB~O6n_qz z!#v*@vapBxc{+y%;S{It(=BX{moP!0s-lQ<$jXAOMzocU53~}gCLqm(5Jhze0Rs!0 z?d9T36{v(tr!vAv`-Vr=_)1|qh(IvW;d@-%y+&?h=%H~4S~8W z$;c=UzV^mx9K*U6?4na5mN^z2{!14X|NPX?s!x1-#P7FbB4fIjSer~bsF-+5SukyZ z=i77&1lD~d@{t76N19Pk1PI%K0?KHlVnHas42VTj#87@DoQ%E@RV<6juNba9ZF&Zf z2eQbGh~aX8=bj^B`GHr*5xO*<#6QCPHpej)N)BixWbe-`=47=@=hwHOGVH{1S2>t` zn<&gvblsk!v&=jHbM@lC+{n3WzaDj^{4gC`+=O|7ucDYKvH^`;rTd2Rpd@LuvUL#yT(Kt@hgZ%ws!^gzmpalG-A0@Ci8a9Z z`AM#J_#tkMCTgm5iAF#OL{ziwxR@Q7-i-hX4Kiy$jV>9}p;U&IMmt6mkLU0TpLdMn zHrQ+7;FVAN&|DK9^>p)6&g1~`DY1X>DC-9?VHos;Y3VKBo(4e8Vn5OcS#q2UhyxbB zt`g z5?-nvVJ9EI`*^S_@xUN4HsZj={}zy~vcPR&R6A1{3o6~}c|4N4>mPntYr6%VmVxTl6L|NEq5`~U=ATT|<7L&|h1nty4COHj#UQLPwxDcq#$HIomG$`44) zKx)7O06@L>*KZ*a#A2r?U?Jc~KqS>r1dnSED5#iFVP>?$S%s&@OHDP}dytw;G28KS z#a!~AeCFmB7Tv4|m{sq>M0#DZ3WjcL`#oECCsW-CKCtX&&q#Ne|7$Pg&gvgiNYF-& z*TW@H=u8q-zC$OTJxj1H-S6Lqw$*FzV%_>Ie<-W0j>SapZJgHXGim@534g1QU>2}= z1S(Zk?hN&tEk?&LYxmWay0#|H?qc}7${U*D$!YnIB6HicrBM>p)}_|g7e;|293B*< zJD-eP-AWc_rM9V#R2{NR^4}TP(C=`ze~t)I23%vZfm zI6XdfL^`lQ;(Ruc{(t?P3zoCa;_8q900A*KZvNfL1e&Xb!859a6Nj7_7zhLhIenQR zp@!@-6^2qJ`{f;oz_h;ED@dfQEw#wm3k1o)jRHa7Hi=`I2tlh}DWVYypu{zOj1aBe z2WI-4FI|I>%&5*x>UpeIX4k11hQlYdJjqoBEzQwtYZei%>JBCfLXDrAm!gw*n=@v> zre;f-Eh-{7$YucoVkDF8{kTg6Xo1=WhO?IB3M8Zi3k(!?_(TzLm-M;r6jtsr7(VUj zD>_{1SwBzt88Ry}TQ@NQrcOgj-Z-h-tPsgZU0s>Tz5JzD%P_YFsAmS`1~J{qYxU?! zU4gRTSy!%n;nH+j;|#8qA~#Cb@6r5#03ZNDM{eF-)4&U;L>MhnVGRJ`P%0{BhB1x> zH-Uj^S{w}!Ey4EYu82)h48#_(mIrDXD$|q}$G2lv`3V%)T(mNl=mm2}1B?r^*-eS5 z>aWzxnD%3**_{PkLuWPmUnfuAjb5}8SNq76`c%K)@l~&Ndm6V=vbD7w@uyE?f34b` z{!7ER?PlWTIr2`^)fvf%kVd_~f(&v#+u)~nO}+;S7m&%jCp3a zKBYLWQHa0)&|6fdJk5Xr002NcZoXUFV@6QC2K?!Q*yI|b;Ns>`GYViM3D&p>?X_ZO z4V{3@L$S|$vTV^P^EtaP|JZ1?GFw=h0$CpFP@rGjEo$sI2FSQRc z9YlZ`j*79#OT(Pz4S)u=w>qTxV*5mcK*<#p8-ugRt%SKPDqiK>)M4CkVmuiOAtlZL z{b+yy4!E4V%XR`j6QxWGy1NaWTI;@U7Xs9DoOUM>mOE^vf4KK!9KQ5g_y(*B#jS2vr zHbF$nuv696DlLj6CJ%3|ybwgd6BG&wL|`%iK?o~T0|wT}!w@1A5KVupDyPHIk3HhVy@Qh6wm8#mEA}2x$ zf=hA^EILH^TTmAS`>Dku8t#V*&)Kh|O7WqQRGPM~f(;jPRS@|OLqfy|5J{_d_ggG8 z(4Gh?h%CecC8||Zag`-ABuC366BX7w8z?hp^oFI!mbKb8|NEq5^9TffS<`z=9lCM|T5Vxt zrx3|^O-&?oX}X_j^@bs=K9=l*Wul=2hfN}yk14ft8kwaPJmPfB6|ypj%G|c#3>k_slkxQ=l>4% zUD9i!|9Zam!no?F=?ts z#au|BfJ549D+|2~?XvUkKPug;n{b#Whh)0hvuxFTh~=MjWe#jhK!hCC*{naV$^^GO661Zks7XJ!Qo zSRut***Z$wVGsN+Ba{bH8Eh~OEn)HqO|&~IE)OQ&J)TJ3noh}x+Fh(xF7j&NokQ0+ zrFrUb@z-3F#blOR2<_BT#HWm-$)1iUn@9%Xh^_rPz~Td>Wgn9L+6|vjAsoNO?K8id zE;pPGX50Wk0@IuSwF}hp0jj!)Ay&`=l;mnrDyV~9_=?`Ay#cMwZR?xY|NFFL)qn&v zT~q5x8~Sspifw5ln^8@7O|2w#p{pV(^@oZ4xs_dXb5$7}@q0#ws&b^8`ranoJjPs> zs;gGorr<7IqrC8Q3bw_!&_b2n{MOxjB%2^&zUO|~Qxxvbb8ZQQekkWfsz3m#%fH+C zNgxzw3J?)c7KUS;FJlq~y0dUFRn`J5uww8aY*!$z9x!-}jBuT*JoOH>g6ltJD{Vt# z6CT2eF(DedeE5hTxYOpYNi0->khWcDR54Xh=GAWw;$=))sBzpR5abEnA|9$O3Qdr^ zhU+tfRvD=C*j6Fequw5Ni-nJM-3cCv)hXAiPyv7;25)_kP?F@FqJt3>iYIq3QjjzG z!9h!s)+mf&g1H{#oj~y;SFtU5R}Hd4v#BqMQj%v+F`1&re>4_Bl08b7lW#Sig9Pgl znD1zRnP{&g9ViA=P5&Qp!}07yq}?*^=@Nr~n<~Hr0~&ho_TD74SV5#JB8&!hJZT_I z2xf}cilrn2#~Y2cDwacyma}qvqw{<(Y|%I_>pGdx@+v^d^iahQ?2+XPS7PV!P4X<- z50X{!y{wiptv(^rGz3U?jI36wpAWUQ^RdLt1I3`dwk@ZxB^eQLQ9%X^Ix=J%^zr8%=IN0sy5qxA$+5TwDZi!;aE5 zV9Ybt&I)4B*SU)trGQ{_t5vVrE18-gjovO(n^ zGAVT7*tRhT$!xPHj&zOUDy3SsF}P))h*%u6M9dni8G=1&20E%+kE=xI8!2&Zt!WKh z-8#ioI-T4tP3hi?*HTQ)+JGRKR?`2p5QApWd8O%2@nQr7IL=a?%Si)IfuNWz5dKY) zWj?64C0;%{_JkoZ5w}fMS4a(S^LIU!8@ULsyNWP0<`5&8Rh)re_Z$>h~Q) z{I0ErCNUliL{;P^lT#nkQs3^l^X@m-OR7#DWYuD53 z_d5UoZ}BIUQrAGmSm{i^b&vos06`UP{_WJ*%@0V!L{zIF9egr7P%uXnZB2s9nwZg+ zi=`gH?`$vPh{ukJQ9RSwYeOqKYfnUwD#0o=kadPc)?=$Z-|iQhtjyZF&9;u-CGywy zdCdpz@)pHQ<--l8eRN^d72WG5u#K&nGIOz2GVJ@0d2NjN+ShrSxV)$k$D91aQFZ_z z0RR)X$iqrCngAgkN7YS31H0>wCe@-|nMm@sO05fCHd_!0rtqM5c zS=VJ1;emd1wd*b3}o+0Rf!E=undMng@UR=*0 zARbKHx4ZU|Y3hsu4#o{o299Q|5N<3#1CcEz5^4!+D6ZPW48?-Tzm&Bj^znKj=GN~B z)Jg>iT9YI!Vq!>m2~3#^${LJl3^unv?qlR;HSU#Kzx=A1^k&}P664Q_Is1YSq!Po={)SReH zy|ubqMzFJ8`827R!p2X4d5nDp z^^}$z6y~KzmwxMLrp-Wl;SRfh>F*Ki7%M9p?9s`D8$HN-FHgxk)=ezgp zYW8-ipP`6DsQ0@YJ>FLLq;@4lIIq+3*cFP$4ekWeD2qJ+30Tcu62qhw$JWG~9t6S3!vo|P9Wg;~s2 zTU4h93)IW2k{>j3yt#Abn4cD~KP-Hn6prc|URR@x?3190wpCsV#Z}9d6%m(3L$c|~ zbms01%!`*qiHWun9KgbrVK2?itV3_1owwMG@@wcW3M*TsIBo`Q`DZGZ4H0)!QLx#gi|NF#b@qh)|U{h->e0X!mDs5#Wi5PK#QLHiX z;vuOjJ(ea7ZH3fTX3mBrds)i$B=SZ$02m-PA$#j1`8kfpmrF9pc+t_-;f5)1adVks zeMlE1UD{mD&bnSsRU6kR(IS?=Wke>E41*fRu=Ec^yu@3u#`Y&0`o8Xc-|zaYzh0rA z&uiUnJ!!x8ZwRF6kvw>+65I1~zW;l0)wAqr3)BAPpB_BGolThKjk12V8uU3B>}edMYx&CJ{7B z+$p3a?uDVeX+(fMI1{Y-rGybk=2%MTq>)Js2P1!cLB4md6V;F+p&?9Bch{; zj%92A-mhc)+NJBYLwEhtFU?7s>(1=$siIGQ1gSI+LE_<`BM|~ggqsKemX=>jZvHxP zsw}G4AvH0I&`_g}1W4qWiIDp#U}5%QF2s?!ni+t)q`J&X;lUWUc(G9RxTy|AcYfbm z7F~UimfS?m?^S(oK&Bi64i;f>F~_K>l?<~hvZajs2|FcP9GwMM6x>^s1S;+#>FX(aY6_+${7)od!zu`Dlj-`4tfTjPRg9fQiQlime4eHUz0** zb3+Bpe1EBa(4lvC7!6P$k7uXObH_I0>fm)2%J+7_uqaLF&9)s(S5k-Ikprc%7z+A% z?zb2}?yR4Un*}^S6PB}f&iPDSt7FI)84v32&O1G; zM5|Lk@{D?yIq*y%9naDeL}8I+5Or<>14!V9IiIW<4Wn}Y#gWb*o*=OScW6?^a17?P z+?ZlVP+PU10Y0iC>9IgmMKCc@kxmVbMmV(~%^Xi0QvL(m>*LL9HD;!@?X=wCxB`>k zTkiv*dN(O|KWU!PAeD<6vAK+;J>M{CJ-I+qjb#KU=R0NNDz;oRMn=i0V?txS7~Pf$ z1YH`{h}-n))CD^z(lB7e6l;sOIeU3%XRef}v;{3zCZmT63Twqi5o|nzk=EzUAzU5f^m<3XNe|2|Z(vE1K+97db;UYy0{6NqoPAy*8ef6~hiJ~&A zf*`XyZbgqBX(s#xWw#3x)f|_D>kLzI8`=q@S1&$wWDdPA-z4TWVNvHd$t>9c<(UMn21dLq)^zRbyO!}BvNT2~>M%g)*BXZU{?Yg$D`xyf3KV>NbDc_A z?&!(tHEN8vu}nMlVA5}OAk?sQIhhR)!f%X`aVGph-#2Q}WmQ$E%|H7UwoaYy?|O8p z+aCyx$AEeVj3t7tIy$y3!82wbSi-wnT95fWOBEG5ia$eCkdLn)CySJ~i(a`%cwRkX z#~rGEJdGuC<=5b&NT-{nUk@`wv_N!zlxY4C&&@ju8jgrt8=Dm@+|Mj;y*|?*EP~^? zm3QARY�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 z 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 literal 0 HcmV?d00001 diff --git a/dimos/apps/marauders_map/templates/socketio.min.js b/dimos/apps/marauders_map/templates/socketio.min.js new file mode 100644 index 0000000000..d6b2d60110 --- /dev/null +++ b/dimos/apps/marauders_map/templates/socketio.min.js @@ -0,0 +1,7 @@ +/*! + * Socket.IO v4.7.5 + * (c) 2014-2024 Guillermo Rauch + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).io=t()}(this,(function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw o}}}}var v=Object.create(null);v.open="0",v.close="1",v.ping="2",v.pong="3",v.message="4",v.upgrade="5",v.noop="6";var g=Object.create(null);Object.keys(v).forEach((function(e){g[v[e]]=e}));var m,b={type:"error",data:"parser error"},k="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===Object.prototype.toString.call(Blob),w="function"==typeof ArrayBuffer,_=function(e){return"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer instanceof ArrayBuffer},E=function(e,t,n){var r=e.type,i=e.data;return k&&i instanceof Blob?t?n(i):A(i,n):w&&(i instanceof ArrayBuffer||_(i))?t?n(i):A(new Blob([i]),n):n(v[r]+(i||""))},A=function(e,t){var n=new FileReader;return n.onload=function(){var e=n.result.split(",")[1];t("b"+(e||""))},n.readAsDataURL(e)};function O(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}for(var T="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",R="undefined"==typeof Uint8Array?[]:new Uint8Array(256),C=0;C<64;C++)R[T.charCodeAt(C)]=C;var B,S="function"==typeof ArrayBuffer,N=function(e,t){if("string"!=typeof e)return{type:"message",data:x(e,t)};var n=e.charAt(0);return"b"===n?{type:"message",data:L(e.substring(1),t)}:g[n]?e.length>1?{type:g[n],data:e.substring(1)}:{type:g[n]}:b},L=function(e,t){if(S){var n=function(e){var t,n,r,i,o,s=.75*e.length,a=e.length,c=0;"="===e[e.length-1]&&(s--,"="===e[e.length-2]&&s--);var u=new ArrayBuffer(s),h=new Uint8Array(u);for(t=0;t>4,h[c++]=(15&r)<<4|i>>2,h[c++]=(3&i)<<6|63&o;return u}(e);return x(n,t)}return{base64:!0,data:e}},x=function(e,t){return"blob"===t?e instanceof Blob?e:new Blob([e]):e instanceof ArrayBuffer?e:e.buffer},P=String.fromCharCode(30);function j(){return new TransformStream({transform:function(e,t){!function(e,t){k&&e.data instanceof Blob?e.data.arrayBuffer().then(O).then(t):w&&(e.data instanceof ArrayBuffer||_(e.data))?t(O(e.data)):E(e,!1,(function(e){m||(m=new TextEncoder),t(m.encode(e))}))}(e,(function(n){var r,i=n.length;if(i<126)r=new Uint8Array(1),new DataView(r.buffer).setUint8(0,i);else if(i<65536){r=new Uint8Array(3);var o=new DataView(r.buffer);o.setUint8(0,126),o.setUint16(1,i)}else{r=new Uint8Array(9);var s=new DataView(r.buffer);s.setUint8(0,127),s.setBigUint64(1,BigInt(i))}e.data&&"string"!=typeof e.data&&(r[0]|=128),t.enqueue(r),t.enqueue(n)}))}})}function q(e){return e.reduce((function(e,t){return e+t.length}),0)}function D(e,t){if(e[0].length===t)return e.shift();for(var n=new Uint8Array(t),r=0,i=0;i1?t-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:{};return e+"://"+this._hostname()+this._port()+this.opts.path+this._query(t)}},{key:"_hostname",value:function(){var e=this.opts.hostname;return-1===e.indexOf(":")?e:"["+e+"]"}},{key:"_port",value:function(){return this.opts.port&&(this.opts.secure&&Number(443!==this.opts.port)||!this.opts.secure&&80!==Number(this.opts.port))?":"+this.opts.port:""}},{key:"_query",value:function(e){var t=function(e){var t="";for(var n in e)e.hasOwnProperty(n)&&(t.length&&(t+="&"),t+=encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t}(e);return t.length?"?"+t:""}}]),i}(U),z="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),J=64,$={},Q=0,X=0;function G(e){var t="";do{t=z[e%J]+t,e=Math.floor(e/J)}while(e>0);return t}function Z(){var e=G(+new Date);return e!==K?(Q=0,K=e):e+"."+G(Q++)}for(;X0&&void 0!==arguments[0]?arguments[0]:{};return i(e,{xd:this.xd,cookieJar:this.cookieJar},this.opts),new se(this.uri(),e)}},{key:"doWrite",value:function(e,t){var n=this,r=this.request({method:"POST",data:e});r.on("success",t),r.on("error",(function(e,t){n.onError("xhr post error",e,t)}))}},{key:"doPoll",value:function(){var e=this,t=this.request();t.on("data",this.onData.bind(this)),t.on("error",(function(t,n){e.onError("xhr poll error",t,n)})),this.pollXhr=t}}]),s}(W),se=function(e){o(i,e);var n=l(i);function i(e,r){var o;return t(this,i),H(f(o=n.call(this)),r),o.opts=r,o.method=r.method||"GET",o.uri=e,o.data=void 0!==r.data?r.data:null,o.create(),o}return r(i,[{key:"create",value:function(){var e,t=this,n=F(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");n.xdomain=!!this.opts.xd;var r=this.xhr=new ne(n);try{r.open(this.method,this.uri,!0);try{if(this.opts.extraHeaders)for(var o in r.setDisableHeaderCheck&&r.setDisableHeaderCheck(!0),this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(o)&&r.setRequestHeader(o,this.opts.extraHeaders[o])}catch(e){}if("POST"===this.method)try{r.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(e){}try{r.setRequestHeader("Accept","*/*")}catch(e){}null===(e=this.opts.cookieJar)||void 0===e||e.addCookies(r),"withCredentials"in r&&(r.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(r.timeout=this.opts.requestTimeout),r.onreadystatechange=function(){var e;3===r.readyState&&(null===(e=t.opts.cookieJar)||void 0===e||e.parseCookies(r)),4===r.readyState&&(200===r.status||1223===r.status?t.onLoad():t.setTimeoutFn((function(){t.onError("number"==typeof r.status?r.status:0)}),0))},r.send(this.data)}catch(e){return void this.setTimeoutFn((function(){t.onError(e)}),0)}"undefined"!=typeof document&&(this.index=i.requestsCount++,i.requests[this.index]=this)}},{key:"onError",value:function(e){this.emitReserved("error",e,this.xhr),this.cleanup(!0)}},{key:"cleanup",value:function(e){if(void 0!==this.xhr&&null!==this.xhr){if(this.xhr.onreadystatechange=re,e)try{this.xhr.abort()}catch(e){}"undefined"!=typeof document&&delete i.requests[this.index],this.xhr=null}}},{key:"onLoad",value:function(){var e=this.xhr.responseText;null!==e&&(this.emitReserved("data",e),this.emitReserved("success"),this.cleanup())}},{key:"abort",value:function(){this.cleanup()}}]),i}(U);if(se.requestsCount=0,se.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",ae);else if("function"==typeof addEventListener){addEventListener("onpagehide"in I?"pagehide":"unload",ae,!1)}function ae(){for(var e in se.requests)se.requests.hasOwnProperty(e)&&se.requests[e].abort()}var ce="function"==typeof Promise&&"function"==typeof Promise.resolve?function(e){return Promise.resolve().then(e)}:function(e,t){return t(e,0)},ue=I.WebSocket||I.MozWebSocket,he="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),fe=function(e){o(i,e);var n=l(i);function i(e){var r;return t(this,i),(r=n.call(this,e)).supportsBinary=!e.forceBase64,r}return r(i,[{key:"name",get:function(){return"websocket"}},{key:"doOpen",value:function(){if(this.check()){var e=this.uri(),t=this.opts.protocols,n=he?{}:F(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(n.headers=this.opts.extraHeaders);try{this.ws=he?new ue(e,t,n):t?new ue(e,t):new ue(e)}catch(e){return this.emitReserved("error",e)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}}},{key:"addEventListeners",value:function(){var e=this;this.ws.onopen=function(){e.opts.autoUnref&&e.ws._socket.unref(),e.onOpen()},this.ws.onclose=function(t){return e.onClose({description:"websocket connection closed",context:t})},this.ws.onmessage=function(t){return e.onData(t.data)},this.ws.onerror=function(t){return e.onError("websocket error",t)}}},{key:"write",value:function(e){var t=this;this.writable=!1;for(var n=function(){var n=e[r],i=r===e.length-1;E(n,t.supportsBinary,(function(e){try{t.ws.send(e)}catch(e){}i&&ce((function(){t.writable=!0,t.emitReserved("drain")}),t.setTimeoutFn)}))},r=0;rMath.pow(2,21)-1){a.enqueue(b);break}i=l*Math.pow(2,32)+f.getUint32(4),r=3}else{if(q(n)e){a.enqueue(b);break}}}})}(Number.MAX_SAFE_INTEGER,e.socket.binaryType),r=t.readable.pipeThrough(n).getReader(),i=j();i.readable.pipeTo(t.writable),e.writer=i.writable.getWriter();!function t(){r.read().then((function(n){var r=n.done,i=n.value;r||(e.onPacket(i),t())})).catch((function(e){}))}();var o={type:"open"};e.query.sid&&(o.data='{"sid":"'.concat(e.query.sid,'"}')),e.writer.write(o).then((function(){return e.onOpen()}))}))})))}},{key:"write",value:function(e){var t=this;this.writable=!1;for(var n=function(){var n=e[r],i=r===e.length-1;t.writer.write(n).then((function(){i&&ce((function(){t.writable=!0,t.emitReserved("drain")}),t.setTimeoutFn)}))},r=0;r1&&void 0!==arguments[1]?arguments[1]:{};return t(this,a),(r=s.call(this)).binaryType="arraybuffer",r.writeBuffer=[],n&&"object"===e(n)&&(o=n,n=null),n?(n=ve(n),o.hostname=n.host,o.secure="https"===n.protocol||"wss"===n.protocol,o.port=n.port,n.query&&(o.query=n.query)):o.host&&(o.hostname=ve(o.host).host),H(f(r),o),r.secure=null!=o.secure?o.secure:"undefined"!=typeof location&&"https:"===location.protocol,o.hostname&&!o.port&&(o.port=r.secure?"443":"80"),r.hostname=o.hostname||("undefined"!=typeof location?location.hostname:"localhost"),r.port=o.port||("undefined"!=typeof location&&location.port?location.port:r.secure?"443":"80"),r.transports=o.transports||["polling","websocket","webtransport"],r.writeBuffer=[],r.prevBufferLen=0,r.opts=i({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},o),r.opts.path=r.opts.path.replace(/\/$/,"")+(r.opts.addTrailingSlash?"/":""),"string"==typeof r.opts.query&&(r.opts.query=function(e){for(var t={},n=e.split("&"),r=0,i=n.length;r1))return this.writeBuffer;for(var e,t=1,n=0;n=57344?n+=3:(r++,n+=4);return n}(e):Math.ceil(1.33*(e.byteLength||e.size))),n>0&&t>this.maxPayload)return this.writeBuffer.slice(0,n);t+=2}return this.writeBuffer}},{key:"write",value:function(e,t,n){return this.sendPacket("message",e,t,n),this}},{key:"send",value:function(e,t,n){return this.sendPacket("message",e,t,n),this}},{key:"sendPacket",value:function(e,t,n,r){if("function"==typeof t&&(r=t,t=void 0),"function"==typeof n&&(r=n,n=null),"closing"!==this.readyState&&"closed"!==this.readyState){(n=n||{}).compress=!1!==n.compress;var i={type:e,data:t,options:n};this.emitReserved("packetCreate",i),this.writeBuffer.push(i),r&&this.once("flush",r),this.flush()}}},{key:"close",value:function(){var e=this,t=function(){e.onClose("forced close"),e.transport.close()},n=function n(){e.off("upgrade",n),e.off("upgradeError",n),t()},r=function(){e.once("upgrade",n),e.once("upgradeError",n)};return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",(function(){e.upgrading?r():t()})):this.upgrading?r():t()),this}},{key:"onError",value:function(e){a.priorWebsocketSuccess=!1,this.emitReserved("error",e),this.onClose("transport error",e)}},{key:"onClose",value:function(e,t){"opening"!==this.readyState&&"open"!==this.readyState&&"closing"!==this.readyState||(this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),"function"==typeof removeEventListener&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",e,t),this.writeBuffer=[],this.prevBufferLen=0)}},{key:"filterUpgrades",value:function(e){for(var t=[],n=0,r=e.length;n=0&&t.num1?t-1:0),r=1;r1?n-1:0),i=1;in._opts.retries&&(n._queue.shift(),t&&t(e));else if(n._queue.shift(),t){for(var i=arguments.length,o=new Array(i>1?i-1:0),s=1;s0&&void 0!==arguments[0]&&arguments[0];if(this.connected&&0!==this._queue.length){var t=this._queue[0];t.pending&&!e||(t.pending=!0,t.tryCount++,this.flags=t.flags,this.emit.apply(this,t.args))}}},{key:"packet",value:function(e){e.nsp=this.nsp,this.io._packet(e)}},{key:"onopen",value:function(){var e=this;"function"==typeof this.auth?this.auth((function(t){e._sendConnectPacket(t)})):this._sendConnectPacket(this.auth)}},{key:"_sendConnectPacket",value:function(e){this.packet({type:Be.CONNECT,data:this._pid?i({pid:this._pid,offset:this._lastOffset},e):e})}},{key:"onerror",value:function(e){this.connected||this.emitReserved("connect_error",e)}},{key:"onclose",value:function(e,t){this.connected=!1,delete this.id,this.emitReserved("disconnect",e,t),this._clearAcks()}},{key:"_clearAcks",value:function(){var e=this;Object.keys(this.acks).forEach((function(t){if(!e.sendBuffer.some((function(e){return String(e.id)===t}))){var n=e.acks[t];delete e.acks[t],n.withError&&n.call(e,new Error("socket has been disconnected"))}}))}},{key:"onpacket",value:function(e){if(e.nsp===this.nsp)switch(e.type){case Be.CONNECT:e.data&&e.data.sid?this.onconnect(e.data.sid,e.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case Be.EVENT:case Be.BINARY_EVENT:this.onevent(e);break;case Be.ACK:case Be.BINARY_ACK:this.onack(e);break;case Be.DISCONNECT:this.ondisconnect();break;case Be.CONNECT_ERROR:this.destroy();var t=new Error(e.data.message);t.data=e.data.data,this.emitReserved("connect_error",t)}}},{key:"onevent",value:function(e){var t=e.data||[];null!=e.id&&t.push(this.ack(e.id)),this.connected?this.emitEvent(t):this.receiveBuffer.push(Object.freeze(t))}},{key:"emitEvent",value:function(e){if(this._anyListeners&&this._anyListeners.length){var t,n=y(this._anyListeners.slice());try{for(n.s();!(t=n.n()).done;){t.value.apply(this,e)}}catch(e){n.e(e)}finally{n.f()}}p(s(a.prototype),"emit",this).apply(this,e),this._pid&&e.length&&"string"==typeof e[e.length-1]&&(this._lastOffset=e[e.length-1])}},{key:"ack",value:function(e){var t=this,n=!1;return function(){if(!n){n=!0;for(var r=arguments.length,i=new Array(r),o=0;o0&&e.jitter<=1?e.jitter:0,this.attempts=0}Ie.prototype.duration=function(){var e=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),n=Math.floor(t*this.jitter*e);e=0==(1&Math.floor(10*t))?e-n:e+n}return 0|Math.min(e,this.max)},Ie.prototype.reset=function(){this.attempts=0},Ie.prototype.setMin=function(e){this.ms=e},Ie.prototype.setMax=function(e){this.max=e},Ie.prototype.setJitter=function(e){this.jitter=e};var Fe=function(n){o(s,n);var i=l(s);function s(n,r){var o,a;t(this,s),(o=i.call(this)).nsps={},o.subs=[],n&&"object"===e(n)&&(r=n,n=void 0),(r=r||{}).path=r.path||"/socket.io",o.opts=r,H(f(o),r),o.reconnection(!1!==r.reconnection),o.reconnectionAttempts(r.reconnectionAttempts||1/0),o.reconnectionDelay(r.reconnectionDelay||1e3),o.reconnectionDelayMax(r.reconnectionDelayMax||5e3),o.randomizationFactor(null!==(a=r.randomizationFactor)&&void 0!==a?a:.5),o.backoff=new Ie({min:o.reconnectionDelay(),max:o.reconnectionDelayMax(),jitter:o.randomizationFactor()}),o.timeout(null==r.timeout?2e4:r.timeout),o._readyState="closed",o.uri=n;var c=r.parser||je;return o.encoder=new c.Encoder,o.decoder=new c.Decoder,o._autoConnect=!1!==r.autoConnect,o._autoConnect&&o.open(),o}return r(s,[{key:"reconnection",value:function(e){return arguments.length?(this._reconnection=!!e,this):this._reconnection}},{key:"reconnectionAttempts",value:function(e){return void 0===e?this._reconnectionAttempts:(this._reconnectionAttempts=e,this)}},{key:"reconnectionDelay",value:function(e){var t;return void 0===e?this._reconnectionDelay:(this._reconnectionDelay=e,null===(t=this.backoff)||void 0===t||t.setMin(e),this)}},{key:"randomizationFactor",value:function(e){var t;return void 0===e?this._randomizationFactor:(this._randomizationFactor=e,null===(t=this.backoff)||void 0===t||t.setJitter(e),this)}},{key:"reconnectionDelayMax",value:function(e){var t;return void 0===e?this._reconnectionDelayMax:(this._reconnectionDelayMax=e,null===(t=this.backoff)||void 0===t||t.setMax(e),this)}},{key:"timeout",value:function(e){return arguments.length?(this._timeout=e,this):this._timeout}},{key:"maybeReconnectOnOpen",value:function(){!this._reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()}},{key:"open",value:function(e){var t=this;if(~this._readyState.indexOf("open"))return this;this.engine=new ge(this.uri,this.opts);var n=this.engine,r=this;this._readyState="opening",this.skipReconnect=!1;var i=qe(n,"open",(function(){r.onopen(),e&&e()})),o=function(n){t.cleanup(),t._readyState="closed",t.emitReserved("error",n),e?e(n):t.maybeReconnectOnOpen()},s=qe(n,"error",o);if(!1!==this._timeout){var a=this._timeout,c=this.setTimeoutFn((function(){i(),o(new Error("timeout")),n.close()}),a);this.opts.autoUnref&&c.unref(),this.subs.push((function(){t.clearTimeoutFn(c)}))}return this.subs.push(i),this.subs.push(s),this}},{key:"connect",value:function(e){return this.open(e)}},{key:"onopen",value:function(){this.cleanup(),this._readyState="open",this.emitReserved("open");var e=this.engine;this.subs.push(qe(e,"ping",this.onping.bind(this)),qe(e,"data",this.ondata.bind(this)),qe(e,"error",this.onerror.bind(this)),qe(e,"close",this.onclose.bind(this)),qe(this.decoder,"decoded",this.ondecoded.bind(this)))}},{key:"onping",value:function(){this.emitReserved("ping")}},{key:"ondata",value:function(e){try{this.decoder.add(e)}catch(e){this.onclose("parse error",e)}}},{key:"ondecoded",value:function(e){var t=this;ce((function(){t.emitReserved("packet",e)}),this.setTimeoutFn)}},{key:"onerror",value:function(e){this.emitReserved("error",e)}},{key:"socket",value:function(e,t){var n=this.nsps[e];return n?this._autoConnect&&!n.active&&n.connect():(n=new Ue(this,e,t),this.nsps[e]=n),n}},{key:"_destroy",value:function(e){for(var t=0,n=Object.keys(this.nsps);t=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{var n=this.backoff.duration();this._reconnecting=!0;var r=this.setTimeoutFn((function(){t.skipReconnect||(e.emitReserved("reconnect_attempt",t.backoff.attempts),t.skipReconnect||t.open((function(n){n?(t._reconnecting=!1,t.reconnect(),e.emitReserved("reconnect_error",n)):t.onreconnect()})))}),n);this.opts.autoUnref&&r.unref(),this.subs.push((function(){e.clearTimeoutFn(r)}))}}},{key:"onreconnect",value:function(){var e=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",e)}}]),s}(U),Me={};function Ve(t,n){"object"===e(t)&&(n=t,t=void 0);var r,i=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,r=e;n=n||"undefined"!=typeof location&&location,null==e&&(e=n.protocol+"//"+n.host),"string"==typeof e&&("/"===e.charAt(0)&&(e="/"===e.charAt(1)?n.protocol+e:n.host+e),/^(https?|wss?):\/\//.test(e)||(e=void 0!==n?n.protocol+"//"+e:"https://"+e),r=ve(e)),r.port||(/^(http|ws)$/.test(r.protocol)?r.port="80":/^(http|ws)s$/.test(r.protocol)&&(r.port="443")),r.path=r.path||"/";var i=-1!==r.host.indexOf(":")?"["+r.host+"]":r.host;return r.id=r.protocol+"://"+i+":"+r.port+t,r.href=r.protocol+"://"+i+(n&&n.port===r.port?"":":"+r.port),r}(t,(n=n||{}).path||"/socket.io"),o=i.source,s=i.id,a=i.path,c=Me[s]&&a in Me[s].nsps;return n.forceNew||n["force new connection"]||!1===n.multiplex||c?r=new Fe(o,n):(Me[s]||(Me[s]=new Fe(o,n)),r=Me[s]),i.query&&!n.query&&(n.query=i.queryKey),r.socket(i.path,n)}return i(Ve,{Manager:Fe,Socket:Ue,io:Ve,connect:Ve}),Ve})); +//# sourceMappingURL=socket.io.min.js.map diff --git a/dimos/robot/all_blueprints.py b/dimos/robot/all_blueprints.py index 2a9bcbc8e1..207303336d 100644 --- a/dimos/robot/all_blueprints.py +++ b/dimos/robot/all_blueprints.py @@ -59,6 +59,7 @@ "drone-agentic": "dimos.robot.drone.blueprints.agentic.drone_agentic:drone_agentic", "drone-basic": "dimos.robot.drone.blueprints.basic.drone_basic:drone_basic", "dual-xarm6-planner": "dimos.manipulation.blueprints:dual_xarm6_planner", + "go2-marauders-map": "dimos.apps.marauders_map.blueprint:go2_marauders_map", "keyboard-teleop-openarm": "dimos.robot.manipulators.openarm.blueprints:keyboard_teleop_openarm", "keyboard-teleop-openarm-mock": "dimos.robot.manipulators.openarm.blueprints:keyboard_teleop_openarm_mock", "keyboard-teleop-piper": "dimos.robot.manipulators.piper.blueprints:keyboard_teleop_piper", @@ -104,6 +105,7 @@ "unitree-go2-keyboard-teleop": "dimos.robot.unitree.go2.blueprints.basic.unitree_go2_keyboard_teleop:unitree_go2_keyboard_teleop", "unitree-go2-markers": "dimos.robot.unitree.go2.blueprints.smart.unitree_go2:unitree_go2_markers", "unitree-go2-memory": "dimos.robot.unitree.go2.blueprints.smart.unitree_go2:unitree_go2_memory", + "unitree-go2-patrol": "dimos.robot.unitree.go2.blueprints.smart.unitree_go2_patrol:unitree_go2_patrol", "unitree-go2-relocalization": "dimos.robot.unitree.go2.blueprints.smart.unitree_go2:unitree_go2_relocalization", "unitree-go2-ros": "dimos.robot.unitree.go2.blueprints.smart.unitree_go2_ros:unitree_go2_ros", "unitree-go2-security": "dimos.robot.unitree.go2.blueprints.agentic.unitree_go2_security:unitree_go2_security", @@ -190,6 +192,7 @@ "object-tracking": "dimos.perception.object_tracker.ObjectTracking", "osm-skill": "dimos.agents.skills.osm.OsmSkill", "path-follower": "dimos.navigation.nav_stack.modules.path_follower.path_follower.PathFollower", + "patrol-module": "dimos.robot.unitree.go2.blueprints.smart.unitree_go2_patrol.PatrolModule", "patrolling-module": "dimos.navigation.patrolling.module.PatrollingModule", "perceive-loop-skill": "dimos.perception.perceive_loop_skill.PerceiveLoopSkill", "person-follow-skill-container": "dimos.agents.skills.person_follow.PersonFollowSkillContainer", @@ -202,6 +205,7 @@ "real-sense-camera": "dimos.hardware.sensors.camera.realsense.camera.RealSenseCamera", "receiver-module": "dimos.utils.demo_image_encoding.ReceiverModule", "recorder": "dimos.memory2.module.Recorder", + "reid-map-module": "dimos.apps.marauders_map.module.ReidMapModule", "reid-module": "dimos.perception.detection.reid.module.ReidModule", "relocalization-module": "dimos.mapping.relocalization.module.RelocalizationModule", "replanning-a-star-planner": "dimos.navigation.replanning_a_star.module.ReplanningAStarPlanner", diff --git a/dimos/robot/custom/modules/go2_startup_self_check_module.py b/dimos/robot/custom/modules/go2_startup_self_check_module.py index 45c1814ab8..b6004b6e4d 100644 --- a/dimos/robot/custom/modules/go2_startup_self_check_module.py +++ b/dimos/robot/custom/modules/go2_startup_self_check_module.py @@ -71,17 +71,25 @@ def stop(self) -> None: # 定义模块停止方法 if self._thread is not None and self._thread.is_alive(): # 如果线程存在且仍在运行 self._thread.join(DEFAULT_THREAD_JOIN_TIMEOUT) # 等待线程结束,但最多等默认超时时间 - if self._fallback_thread is not None and self._fallback_thread.is_alive(): # 如果兜底线程还在等待 - self._fallback_thread.join(DEFAULT_THREAD_JOIN_TIMEOUT) # 等待兜底线程退出,但最多等默认超时时间 + if ( + self._fallback_thread is not None and self._fallback_thread.is_alive() + ): # 如果兜底线程还在等待 + self._fallback_thread.join( + DEFAULT_THREAD_JOIN_TIMEOUT + ) # 等待兜底线程退出,但最多等默认超时时间 super().stop() # 调用父类停止逻辑,释放框架资源 def _run_delayed_self_check(self) -> None: # 定义延迟兜底启动逻辑 logger.info("Go2 startup self-check fallback waiting") # 记录兜底等待开始日志 - if self._stop_event.wait(self.config.startup_delay_sec): # 等待配置的秒数,期间如果收到停止就返回 True + if self._stop_event.wait( + self.config.startup_delay_sec + ): # 等待配置的秒数,期间如果收到停止就返回 True return # 如果停止事件已经触发,就不再启动自检 - self._start_self_check("startup delay elapsed") # 等待结束后,如果还没启动过,就兜底启动自检 + self._start_self_check( + "startup delay elapsed" + ) # 等待结束后,如果还没启动过,就兜底启动自检 def _start_self_check(self, reason: str) -> None: # 定义统一的自检启动入口 with self._start_lock: # 加锁,避免两个线程同时进入启动逻辑 @@ -116,7 +124,9 @@ def _run_self_check(self) -> None: # 定义后台线程实际执行的自检流 self.cmd_vel.publish(Twist.zero()) # 发布最终零速度命令 logger.info("Go2 startup self-check finished") # 记录自检结束日志 - def _publish_for_duration(self, speed_mps: float, duration_sec: float) -> None: # 按固定时间持续发布速度 + def _publish_for_duration( + self, speed_mps: float, duration_sec: float + ) -> None: # 按固定时间持续发布速度 period_sec = 1.0 / self.config.command_publish_hz # 根据频率计算每次发布之间的间隔 end_time = time.monotonic() + duration_sec # 计算这段动作应该结束的时间点 twist = Twist( # 创建一个 Twist 速度命令 @@ -124,7 +134,9 @@ def _publish_for_duration(self, speed_mps: float, duration_sec: float) -> None: angular=Vector3(0.0, 0.0, 0.0), # 设置角速度全为 0,不转向 ) # 结束 Twist 创建 - while not self._stop_event.is_set() and time.monotonic() < end_time: # 未停止且未超时时继续发布 + while ( + not self._stop_event.is_set() and time.monotonic() < end_time + ): # 未停止且未超时时继续发布 self.cmd_vel.publish(twist) # 发布当前速度命令 time.sleep(period_sec) # 睡眠一个周期,控制发布频率 diff --git a/dimos/robot/unitree/connection.py b/dimos/robot/unitree/connection.py index 44101cc19d..1625813f9d 100644 --- a/dimos/robot/unitree/connection.py +++ b/dimos/robot/unitree/connection.py @@ -93,12 +93,28 @@ def to_ndarray(self, format=None): # type: ignore[no-untyped-def] class UnitreeWebRTCConnection(Resource): _SPORT_API_ID_RAGEMODE: int = 2059 - def __init__(self, ip: str, mode: str = "ai") -> None: + # How far to raise the head (body pitch, radians) when the robot stops. + # The Go2 Euler command accepts roughly [-0.75, 0.75] rad per axis. + _LOOK_UP_PITCH_RAD: float = 0.6 + + def __init__( + self, + ip: str, + mode: str = "ai", + connection_method: WebRTCConnectionMethod = WebRTCConnectionMethod.LocalSTA, + ) -> None: self.ip = ip self.mode = mode self.stop_timer: threading.Timer | None = None self.cmd_vel_timeout = 0.2 - self.conn = LegionConnection(WebRTCConnectionMethod.LocalSTA, ip=self.ip) + # When True, raise the head once whenever the robot transitions from + # moving to stopped, and level it again when it starts moving. + self.look_up_on_stop = True + self.look_up_pitch = self._LOOK_UP_PITCH_RAD + self._was_moving = False + # LocalSTA: robot joined your router (sends id="STA_localNetwork"). + # LocalAP: you're on the robot's own hotspot at 192.168.12.1 (sends id=""). + self.conn = LegionConnection(connection_method, ip=self.ip) self.connect() def connect(self) -> None: @@ -175,6 +191,7 @@ def move(self, twist: Twist, duration: float = 0.0) -> bool: bool: True if command was sent successfully """ x, y, yaw = twist.linear.x, twist.linear.y, twist.angular.z + moving = bool(x or y or yaw) # WebRTC coordinate mapping: # x - Positive right, negative left @@ -209,12 +226,17 @@ async def async_move_duration() -> None: # Send continuous move commands for the duration future = asyncio.run_coroutine_threadsafe(async_move_duration(), self.loop) future.result() + # The robot stops at the end of a timed move; mark it moving so + # stop_movement() raises the head on the resulting stop. + if moving: + self._was_moving = True # Stop after duration self.stop_movement() else: # Single command for continuous movement future = asyncio.run_coroutine_threadsafe(async_move(), self.loop) future.result() + self._update_head_posture(moving) return True except Exception as e: print(f"Failed to send movement command: {e}") @@ -321,8 +343,33 @@ def set_obstacle_avoidance(self, enabled: bool = True) -> None: ) def free_walk(self) -> bool: - """Activate FreeWalk locomotion mode — enables walking and velocity commands.""" - return bool(self.publish_request(RTC_TOPIC["SPORT_MOD"], {"api_id": SPORT_CMD["FreeWalk"]})) + """Activate FreeWalk locomotion AND enable joystick velocity input. + + Two-step protocol (mirrors enable_rage_mode, which is the only path + in this codebase that demonstrably gets the dog walking from + joystick input): + + 1. ``FreeWalk`` (1045) — switches the locomotion gait. + 2. ``SwitchJoystick`` (1027, data=True) — explicitly enables joystick + velocity interpretation. WITHOUT this, lx/ly are interpreted as + body-pose lean (BalanceStand semantics) and the dog only sways + in place even though the gait is technically FreeWalk. + + Returns True if both publishes succeed. + """ + gait_ok = bool( + self.publish_request(RTC_TOPIC["SPORT_MOD"], {"api_id": SPORT_CMD["FreeWalk"]}) + ) + # Small settle so the gait switch lands before we flip the joystick + # channel — matches the 2 s delay rage_mode uses for the same reason. + time.sleep(0.3) + joystick_ok = bool( + self.publish_request( + RTC_TOPIC["SPORT_MOD"], + {"api_id": SPORT_CMD["SwitchJoystick"], "parameter": {"data": True}}, + ) + ) + return gait_ok and joystick_ok def enable_rage_mode(self) -> bool: """Enable Rage Mode on the Go2 via WebRTC. @@ -347,6 +394,50 @@ def enable_rage_mode(self) -> bool: ) return rage_ok and joystick_ok + def set_body_euler(self, roll: float = 0.0, pitch: float = 0.0, yaw: float = 0.0) -> bool: + """Set the body orientation (radians) via the Euler sport command. + + Requires the robot to be standing (BalanceStand). Each axis is clamped + to the Go2's safe range of roughly [-0.75, 0.75] rad. + """ + + def _clamp(v: float) -> float: + return max(-0.75, min(0.75, v)) + + return bool( + self.publish_request( + RTC_TOPIC["SPORT_MOD"], + { + "api_id": SPORT_CMD["Euler"], + "parameter": {"x": _clamp(roll), "y": _clamp(pitch), "z": _clamp(yaw)}, + }, + ) + ) + + def look_up(self, pitch: float | None = None) -> bool: + """Raise the robot's head by pitching the body nose-up. + + `pitch` is the look-up angle in radians (positive = look up); defaults + to ``look_up_pitch``. On the Go2 a positive body pitch raises the front; + flip the sign here if your unit tilts the other way. + """ + angle = self.look_up_pitch if pitch is None else pitch + return self.set_body_euler(pitch=angle) + + def reset_posture(self) -> bool: + """Level the body again (head neutral).""" + return self.set_body_euler() + + def _update_head_posture(self, moving: bool) -> None: + """Raise the head on the moving->stopped edge, level it on stopped->moving.""" + if not self.look_up_on_stop: + return + if moving and not self._was_moving: + self.reset_posture() + elif not moving and self._was_moving: + self.look_up() + self._was_moving = moving + def liedown(self) -> bool: return bool( self.publish_request(RTC_TOPIC["SPORT_MOD"], {"api_id": SPORT_CMD["StandDown"]}) @@ -424,6 +515,11 @@ def stop_movement(self) -> None: if self.stop_timer: self.stop_timer.cancel() self.stop_timer = None + # Reaching the timeout means commands stopped arriving while moving: + # treat that as a stop and raise the head once. + if self.look_up_on_stop and self._was_moving: + self._was_moving = False + self.look_up() def disconnect(self) -> None: """Disconnect from the robot and clean up resources.""" diff --git a/dimos/robot/unitree/go2/blueprints/agentic/unitree_go2_agentic_ollama.py b/dimos/robot/unitree/go2/blueprints/agentic/unitree_go2_agentic_ollama.py index 20576ffe14..8719244304 100644 --- a/dimos/robot/unitree/go2/blueprints/agentic/unitree_go2_agentic_ollama.py +++ b/dimos/robot/unitree/go2/blueprints/agentic/unitree_go2_agentic_ollama.py @@ -23,7 +23,7 @@ unitree_go2_agentic_ollama = autoconnect( unitree_go2_spatial, McpServer.blueprint(), - McpClient.blueprint(model="ollama:qwen3:8b"), + McpClient.blueprint(model="ollama:qwen3:4b"), _common_agentic, ).requirements( ollama_installed, diff --git a/dimos/robot/unitree/go2/blueprints/smart/unitree_go2_patrol.py b/dimos/robot/unitree/go2/blueprints/smart/unitree_go2_patrol.py new file mode 100644 index 0000000000..3bfd080a17 --- /dev/null +++ b/dimos/robot/unitree/go2/blueprints/smart/unitree_go2_patrol.py @@ -0,0 +1,295 @@ +#!/usr/bin/env python3 +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Go2 safe-patrol: scan for nearby person, then step back/forward/left/right. + +On start, after the robot stands up and detections stabilize, checks whether +any person (COCO class 0) is detected with at least one LIDAR return within +`safety_radius` of the base link. If clear, walks `step_distance` in each of +four directions using odometry as the stop criterion. + +Run: + python -m dimos.robot.unitree.go2.blueprints.smart.unitree_go2_patrol --ip +""" + +from __future__ import annotations + +import math +import threading +import time +from typing import Any + +import numpy as np +from pydantic import Field + +from dimos.core.coordination.blueprints import autoconnect +from dimos.core.core import rpc +from dimos.core.module import Module, ModuleConfig +from dimos.core.stream import In, Out +from dimos.msgs.geometry_msgs.PoseStamped import PoseStamped +from dimos.msgs.geometry_msgs.Twist import Twist +from dimos.msgs.geometry_msgs.Vector3 import Vector3 +from dimos.msgs.sensor_msgs.PointCloud2 import PointCloud2 +from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray +from dimos.perception.detection.module3D import Detection3DModule +from dimos.robot.unitree.go2.blueprints.basic.unitree_go2_basic import unitree_go2_basic +from dimos.robot.unitree.go2.connection import GO2Connection +from dimos.utils.logging_config import setup_logger + +logger = setup_logger() + +PERSON_CLASS_ID = 0 # COCO + + +class PatrolConfig(ModuleConfig): + safety_radius: float = Field(default=1.0) # meters + step_distance: float = Field(default=0.5) # meters per move + move_speed: float = Field(default=0.3) # m/s + startup_delay: float = Field(default=4.0) # let standup settle + detection_warmup: float = Field(default=2.0) # collect detections before deciding + move_timeout_factor: float = Field(default=4.0) # safety vs. expected duration + z_floor: float = Field(default=-0.1) # ignore points below (ground) + z_ceiling: float = Field(default=1.8) # ignore points above (ceiling) + publish_hz: float = Field(default=20.0) + + +class PatrolModule(Module): + """Single-shot safety-checked patrol sequence.""" + + config: PatrolConfig + + detections: In[Detection2DArray] + lidar: In[PointCloud2] + odom: In[PoseStamped] + cmd_vel: Out[Twist] + + _latest_detections: Detection2DArray | None = None + _latest_lidar: PointCloud2 | None = None + _latest_pose: PoseStamped | None = None + _patrol_thread: threading.Thread | None = None + _stop_event: threading.Event + + def __init__(self, **kwargs: Any) -> None: + super().__init__(**kwargs) + self._stop_event = threading.Event() + + @rpc + def start(self) -> None: + super().start() + self.register_disposable( + self.detections.observable().subscribe(self._on_detections) + ) + self.register_disposable(self.lidar.observable().subscribe(self._on_lidar)) + self.register_disposable(self.odom.observable().subscribe(self._on_odom)) + + self._patrol_thread = threading.Thread( + target=self._run_patrol, name="go2-patrol", daemon=True + ) + self._patrol_thread.start() + + @rpc + def stop(self) -> None: + self._stop_event.set() + self._send_twist(0.0, 0.0) + if self._patrol_thread and self._patrol_thread.is_alive(): + self._patrol_thread.join(timeout=2.0) + super().stop() + + def _on_detections(self, msg: Detection2DArray) -> None: + self._latest_detections = msg + + def _on_lidar(self, msg: PointCloud2) -> None: + self._latest_lidar = msg + + def _on_odom(self, msg: PoseStamped) -> None: + self._latest_pose = msg + + def _person_detected(self) -> bool: + msg = self._latest_detections + if msg is None or not msg.detections: + return False + for det in msg.detections: + if not det.results: + continue + cls = det.results[0].hypothesis.class_id + # LCM declares class_id as string, but YOLO converter may pass int. + if cls == PERSON_CLASS_ID or str(cls) == str(PERSON_CLASS_ID): + return True + return False + + def _lidar_point_within(self, radius: float) -> bool: + pc = self._latest_lidar + if pc is None or len(pc) == 0: + return False + try: + pts = np.asarray(pc.pointcloud.points, dtype=np.float32) + except Exception as e: + logger.warning("Could not read pointcloud: %s", e) + return False + if pts.size == 0: + return False + z = pts[:, 2] + mask = (z > self.config.z_floor) & (z < self.config.z_ceiling) + xy = pts[mask, :2] + if xy.size == 0: + return False + d2 = xy[:, 0] ** 2 + xy[:, 1] ** 2 + return bool(np.any(d2 < radius * radius)) + + def _person_within_radius(self) -> bool: + return self._person_detected() and self._lidar_point_within( + self.config.safety_radius + ) + + def _send_twist(self, vx: float, vy: float) -> None: + self.cmd_vel.publish( + Twist( + linear=Vector3(vx, vy, 0.0), + angular=Vector3(0.0, 0.0, 0.0), + ) + ) + + def _move_by(self, vx: float, vy: float, distance: float, label: str) -> None: + if self._latest_pose is None: + logger.warning("Patrol: no odometry yet, skipping %s", label) + return + + start_x = self._latest_pose.x + start_y = self._latest_pose.y + nominal_speed = max(abs(vx), abs(vy)) or self.config.move_speed + timeout = (distance / nominal_speed) * self.config.move_timeout_factor + period = 1.0 / max(self.config.publish_hz, 1.0) + + logger.info("Patrol: moving %s (~%.2fm)", label, distance) + t0 = time.time() + while not self._stop_event.is_set(): + if time.time() - t0 > timeout: + logger.warning("Patrol: %s timed out after %.1fs", label, timeout) + break + pose = self._latest_pose + if pose is None: + break + traveled = math.hypot(pose.x - start_x, pose.y - start_y) + if traveled >= distance: + logger.info("Patrol: %s reached %.2fm", label, traveled) + break + # Safety: abort if a person walks into range mid-motion. + if self._person_within_radius(): + logger.warning("Patrol: person entered safety zone, aborting %s", label) + break + self._send_twist(vx, vy) + time.sleep(period) + + self._send_twist(0.0, 0.0) + time.sleep(0.3) # let the robot settle before the next leg + + def _run_patrol(self) -> None: + try: + logger.info("Patrol: waiting %.1fs for standup", self.config.startup_delay) + if self._stop_event.wait(self.config.startup_delay): + return + + logger.info( + "Patrol: warming up detections for %.1fs", self.config.detection_warmup + ) + if self._stop_event.wait(self.config.detection_warmup): + return + + if self._person_within_radius(): + logger.warning( + "Patrol: person within %.1fm — aborting", self.config.safety_radius + ) + return + + logger.info("Patrol: clear, starting 4-direction sequence") + speed = self.config.move_speed + dist = self.config.step_distance + # ROS REP-103: +x forward, +y left + sequence = [ + ("backward", -speed, 0.0), + ("forward", speed, 0.0), + ("left", 0.0, speed), + ("right", 0.0, -speed), + ] + for label, vx, vy in sequence: + if self._stop_event.is_set(): + break + self._move_by(vx, vy, dist, label) + + logger.info("Patrol: complete") + except Exception: + logger.exception("Patrol: unexpected error, stopping robot") + self._send_twist(0.0, 0.0) + + +# Compose: basic (GO2Connection + vis) + Detection3DModule + PatrolModule. +# Detection3DModule's `pointcloud` input is remapped to the raw `lidar` stream +# (basic blueprint has no global_map / VoxelGridMapper). +unitree_go2_patrol = ( + autoconnect( + unitree_go2_basic, + Detection3DModule.blueprint(camera_info=GO2Connection.camera_info_static), + PatrolModule.blueprint(), + ) + .remappings( + [ + (Detection3DModule, "pointcloud", "lidar"), + ] + ) + .global_config(n_workers=4, robot_model="unitree_go2") +) + + +__all__ = ["PatrolModule", "PatrolConfig", "unitree_go2_patrol"] + + +if __name__ == "__main__": + import argparse + import os + import sys + from pathlib import Path + + from dimos.core.coordination.module_coordinator import ModuleCoordinator + + parser = argparse.ArgumentParser(description="Go2 safe-patrol blueprint runner") + parser.add_argument("--ip", required=True, help="Robot IP (or 'mujoco' / 'replay')") + parser.add_argument("--safety-radius", type=float, default=1.0) + parser.add_argument("--step-distance", type=float, default=0.5) + parser.add_argument("--speed", type=float, default=0.3) + args = parser.parse_args() + + # MuJoCo on macOS spawns a subprocess that needs `mjpython` on PATH. + if args.ip in ("mujoco", "replay", "fake", "mock"): + venv_bin = str(Path(sys.executable).parent) + if venv_bin not in os.environ.get("PATH", "").split(os.pathsep): + os.environ["PATH"] = venv_bin + os.pathsep + os.environ.get("PATH", "") + + kwargs: dict[str, Any] = { + "g": {"robot_ip": args.ip}, + "patrolmodule": { + "safety_radius": args.safety_radius, + "step_distance": args.step_distance, + "move_speed": args.speed, + }, + } + + coordinator = ModuleCoordinator.build(unitree_go2_patrol, kwargs) + coordinator.start_rpc_service() + try: + coordinator.loop() + except KeyboardInterrupt: + pass + finally: + coordinator.stop() diff --git a/dimos/robot/unitree/go2/connection.py b/dimos/robot/unitree/go2/connection.py index 5568a473ef..9097af74c0 100644 --- a/dimos/robot/unitree/go2/connection.py +++ b/dimos/robot/unitree/go2/connection.py @@ -211,6 +211,7 @@ class GO2Connection(Module, Camera, Pointcloud): connection: Go2ConnectionProtocol camera_info_static: CameraInfo = _camera_info_static() _camera_info_thread: Thread | None = None + _freewalk_heartbeat_thread: Thread | None = None _latest_video_frame: Image | None = None @classmethod @@ -255,6 +256,39 @@ def onimage(image: Image) -> None: self.standup() time.sleep(3) self.connection.balance_stand() + time.sleep(2) + + # FreeWalk / SwitchJoystick are WebRTC-specific (real Go2 hardware). + # MuJoCo / DimSim / Replay connections don't have a gait state machine + # to switch — joystick input goes straight to the physics ctrl, so + # skipping this entire block in simulation is correct. + if hasattr(self.connection, "free_walk"): + # Switch to FreeWalk locomotion gait so joystick velocity actually + # walks the dog. Without this, BalanceStand interprets cmd_vel as + # body-pose lean (the dog sways in place instead of moving) — + # every teleop/nav blueprint on real hardware needs this. + # + # FreeWalk transitions are flaky: a single publish_request gets + # dropped if the dog is still mid balance_stand animation or if + # MOTION_SWITCHER is still settling. We send it twice with a wait, + # then a low-rate heartbeat in the background — this is the only + # reliable way we've found to recover from the "dog sways in + # place" symptom. + self.connection.free_walk() + time.sleep(1.5) + self.connection.free_walk() + time.sleep(0.5) + + # Background heartbeat: re-assert FreeWalk every 15 s. Cheap (one + # MOTION_SWITCHER publish; no-op when already in FreeWalk) and + # saves the user from restarting the blueprint when the gait + # silently reverts to BalanceStand (happens occasionally on hot + # reconnect). + self._freewalk_heartbeat_thread = Thread( + target=self._freewalk_heartbeat, + daemon=True, + ) + self._freewalk_heartbeat_thread.start() if self.config.mode == Go2Mode.RAGE: self.connection.enable_rage_mode() @@ -310,6 +344,23 @@ def publish_camera_info(self) -> None: self.camera_info.publish(self.camera_info_static) time.sleep(1.0) + def _freewalk_heartbeat(self) -> None: + """Re-assert FreeWalk locomotion every 15 s as a soft watchdog. + + On real hardware we sometimes see the dog silently fall back to + BalanceStand (joystick lx/ly -> body lean, no walking). Re-issuing + FreeWalk is idempotent when already in that mode, so this is a + cheap insurance policy that fixes the most common "dog only sways" + report without forcing the user to restart the blueprint. + """ + while True: + time.sleep(15.0) + try: + self.connection.free_walk() + except Exception: + # Connection may be torn down during shutdown; ignore. + pass + @rpc def move(self, twist: Twist, duration: float = 0.0) -> bool: """Send movement command to robot.""" diff --git a/dimos/robot/unitree/keyboard_teleop.py b/dimos/robot/unitree/keyboard_teleop.py index 07af844c60..6261cfb66f 100644 --- a/dimos/robot/unitree/keyboard_teleop.py +++ b/dimos/robot/unitree/keyboard_teleop.py @@ -29,8 +29,14 @@ logger = setup_logger() -# Force X11 driver to avoid OpenGL threading issues -os.environ["SDL_VIDEODRIVER"] = "x11" +# Force X11 driver on Linux to avoid OpenGL threading issues. macOS doesn't +# have X11 by default; use the native Cocoa driver instead. +import sys as _sys + +if _sys.platform == "darwin": + os.environ.setdefault("SDL_VIDEODRIVER", "cocoa") +else: + os.environ["SDL_VIDEODRIVER"] = "x11" DEFAULT_LINEAR_SPEED: float = 0.5 # m/s DEFAULT_ANGULAR_SPEED: float = 0.8 # rad/s diff --git a/dimos/web/templates/rerun_dashboard.html b/dimos/web/templates/rerun_dashboard.html index f0792079e3..2cea9fd6be 100644 --- a/dimos/web/templates/rerun_dashboard.html +++ b/dimos/web/templates/rerun_dashboard.html @@ -31,7 +31,7 @@

+ + diff --git a/examples/go2_phone_control/people.html b/examples/go2_phone_control/people.html new file mode 100644 index 0000000000..d75d0eb5e2 --- /dev/null +++ b/examples/go2_phone_control/people.html @@ -0,0 +1,312 @@ + + + + + + Go2 BOY · 活点地图 + + + +
+ + + + + + +
+ + +
+ + +
+
+

① ALL0

+
+
+
+

② VIEW · 7s0

+
+
+
+ + +
+ + + + diff --git a/examples/go2_phone_control/server.py b/examples/go2_phone_control/server.py new file mode 100644 index 0000000000..cd64d44749 --- /dev/null +++ b/examples/go2_phone_control/server.py @@ -0,0 +1,1091 @@ +#!/usr/bin/env python3 +# Copyright 2025-2026 Dimensional Inc. +# SPDX-License-Identifier: Apache-2.0 + +"""Go2 phone-controller server (Scheme B: phone = remote, Mac = brain). + +The Mac holds a single persistent WebRTC connection to the dog. A mobile-friendly +web page (served at /) sends button taps to this server over HTTP; the server +translates each tap into a robot command and returns the result. The phone needs +nothing but a browser on the same Wi-Fi. + +v1 actions: + 1. Stand up + 2. Sit down + 3. March in place (N reps) + 4. D-pad: forward / back / left / right — one tap = one step + 5. Wave hello + 6. Observe people nearby (YOLO on one camera frame) + +Run (on the Mac, while on the dog's Wi-Fi): + .venv/bin/python examples/go2_phone_control/server.py --ip 192.168.12.1 + # then open http://:8800/ on your phone + +Options: + --port 8800 + --step-distance 0.3 # meters per D-pad tap + --step-speed 0.3 # m/s for D-pad / march pulses + --close-ratio 0.5 # person bbox-height/frame-height to count as "near" +""" + +from __future__ import annotations + +import argparse +import base64 +import math +from pathlib import Path +import random +import threading +import time +from typing import Any + +import uvicorn +from fastapi import FastAPI +from fastapi.responses import FileResponse, JSONResponse +from pydantic import BaseModel + +from unitree_webrtc_connect.constants import WebRTCConnectionMethod + +from dimos.msgs.geometry_msgs.Twist import Twist +from dimos.msgs.geometry_msgs.Vector3 import Vector3 +from dimos.robot.unitree.connection import RTC_TOPIC, SPORT_CMD, UnitreeWebRTCConnection +from dimos.utils.data import get_data + +# Real people tracker imports are lazy (inside __init__) — they pull heavy deps +# (torch, ultralytics, torchreid). MockPeopleTracker stays import-free so --mock +# starts instantly. + +SPORT_TOPIC = RTC_TOPIC["SPORT_MOD"] +HERE = Path(__file__).parent + + +# --- Three-level identity model (MOCK for now) ----------------------------- +# track_id : short-term, from tracker; changes when a person re-appears. +# long_term_id : stable unique person ID (real version = YOLO-E + OSNet Re-ID). +# name : human-readable label (Harry Potter chars) mapped to long_term_id. +# +# MockPeopleTracker fakes the perception+reid pipeline so the two lists and the +# UI can be built/validated WITHOUT the camera, models, or dog. To go real, +# replace _loop() with a stream of detections (YOLO-E) fed through +# EmbeddingIDSystem; keep get_state()'s output shape identical. +HP_NAMES = [ + "Harry", "Hermione", "Ron", "Dumbledore", "Hagrid", "Snape", "Draco", + "Luna", "Neville", "McGonagall", "Sirius", "Dobby", "Ginny", "Fred", +] + + +class MockPeopleTracker: + def __init__(self, tick: float = 1.5, recent_window: float = 7.0) -> None: + self._lock = threading.Lock() + self.tick = tick + self.recent_window = recent_window + self._people: dict[int, dict[str, Any]] = {} # long_term_id -> record + self._next_long_id = 1 + self._next_track_id = 100 + self._name_pool = list(HP_NAMES) + random.shuffle(self._name_pool) + self._stop = threading.Event() + threading.Thread(target=self._loop, daemon=True).start() + print("[people] MOCK people tracker running (fake re-id + HP names)") + + @staticmethod + def _mock_thumbnail(name: str, lid: int) -> str: + """Generate a placeholder 'photo' the dog supposedly captured. + + Real version: replace with base64 JPEG of the YOLO bbox crop from the + latest frame. Same `data:` URL form, so the UI doesn't change. + """ + hue = (lid * 47) % 360 + initial = (name[:1] or "?").upper() + svg = ( + f'' + f'' + f'' + f'{initial}' + f'' + ) + return "data:image/svg+xml;base64," + base64.b64encode(svg.encode()).decode() + + # World: 6m x 6m centered on dog. Dog faces +x. Front cone: +x with |angle|<45°. + _WORLD_HALF = 3.0 + _CONE_HALF_ANGLE = math.radians(45) + _SIGHT_RANGE = 4.0 + + def _new_person(self) -> int: + lid = self._next_long_id + self._next_long_id += 1 + name = self._name_pool.pop(0) if self._name_pool else f"Wizard{lid}" + # Spawn at a random spot in the world (some in cone, some not). + x = random.uniform(-self._WORLD_HALF, self._WORLD_HALF) + y = random.uniform(-self._WORLD_HALF, self._WORLD_HALF) + self._people[lid] = { + "long_term_id": lid, + "name": name, + "count": 0, + "first_seen": time.time(), + "last_seen": 0.0, + "visible": False, + "track_id": None, + "thumbnail": self._mock_thumbnail(name, lid), + "pos_x": x, + "pos_y": y, + } + return lid + + def _in_cone(self, x: float, y: float) -> bool: + """In the dog's front sight cone (forward = +x).""" + if x <= 0: + return False + if math.hypot(x, y) > self._SIGHT_RANGE: + return False + return abs(math.atan2(y, x)) <= self._CONE_HALF_ANGLE + + def _enter(self, lid: int) -> None: + """A person becomes visible: new short-term track_id, appearance count++.""" + p = self._people[lid] + p["visible"] = True + p["track_id"] = self._next_track_id + self._next_track_id += 1 + p["count"] += 1 + p["last_seen"] = time.time() + + def _loop(self) -> None: + # Seed a few wizards; their visibility falls out of position vs. cone. + for _ in range(3): + self._new_person() + while not self._stop.is_set(): + time.sleep(self.tick) + with self._lock: + now = time.time() + # Random walk: each person drifts a bit each tick. + for p in self._people.values(): + p["pos_x"] = max(-self._WORLD_HALF, min(self._WORLD_HALF, + p["pos_x"] + random.uniform(-0.35, 0.35))) + p["pos_y"] = max(-self._WORLD_HALF, min(self._WORLD_HALF, + p["pos_y"] + random.uniform(-0.35, 0.35))) + # Visibility is purely geometric: in front cone & in range. + for p in self._people.values(): + in_cone = self._in_cone(p["pos_x"], p["pos_y"]) + was_visible = p["visible"] + p["visible"] = in_cone + if in_cone: + # Re-entry into the cone bumps the count. + if not was_visible: + p["count"] += 1 + p["track_id"] = self._next_track_id + self._next_track_id += 1 + p["last_seen"] = now + # Occasionally spawn a brand-new wizard somewhere. + if random.random() < 0.18 and len(self._people) < 8: + self._new_person() + + def get_state(self) -> dict[str, Any]: + with self._lock: + now = time.time() + all_people = sorted( + ( + { + "long_term_id": p["long_term_id"], + "name": p["name"], + "count": p["count"], + "thumbnail": p["thumbnail"], + "pos_x": round(p["pos_x"], 2), + "pos_y": round(p["pos_y"], 2), + "visible": p["visible"], + "last_seen_ago": round(now - p["last_seen"], 1) if p["last_seen"] else None, + } + for p in self._people.values() + ), + key=lambda x: (-x["count"], x["long_term_id"]), + ) + in_view = [] + for p in self._people.values(): + if p["last_seen"] > 0 and (now - p["last_seen"]) <= self.recent_window: + in_view.append( + { + "track_id": p["track_id"], + "long_term_id": p["long_term_id"], + "name": p["name"], + "secs_ago": round(now - p["last_seen"], 1), + "visible": p["visible"], + "thumbnail": p["thumbnail"], + "pos_x": round(p["pos_x"], 2), + "pos_y": round(p["pos_y"], 2), + } + ) + in_view.sort(key=lambda x: x["secs_ago"]) + return {"all": all_people, "in_view": in_view, "total": len(self._people)} + + +class RealPeopleTracker: + """Real pipeline: YOLO person tracking + OSNet Re-ID for stable long-term IDs. + + Subscribes to the dog's WebRTC video stream, runs detection at ~3 Hz on a + dedicated worker thread (rx thread only stashes the latest frame; older + frames are dropped to avoid blocking the camera stream), assigns long-term + unique IDs via dimos's EmbeddingIDSystem (OSNet body embeddings), maps each + long-term ID to a Harry Potter name, and stores a JPEG thumbnail of the + last bbox crop. + + Output of `get_state()` is identical in shape to MockPeopleTracker so the + UI doesn't change. + """ + + def __init__( + self, + conn: UnitreeWebRTCConnection, + osnet_variant: str = "osnet_x0_5", + recent_window: float = 7.0, + process_hz: float = 3.0, + ) -> None: + # Heavy imports kept local so mock mode stays fast. + import cv2 # noqa: F401 -- used for JPEG encode + from dimos.models.embedding.treid import TorchReIDModel, TorchReIDModelConfig + from dimos.perception.detection.detectors.person.yolo import YoloPersonDetector + from dimos.perception.detection.reid.embedding_id_system import EmbeddingIDSystem + from dimos.robot.unitree.go2.connection import _camera_info_static + + self._cv2 = cv2 + # Camera intrinsics for pinhole pos estimation (shoulder-width assumption). + ci = _camera_info_static() + self._fx = float(ci.K[0]) + self._cx = float(ci.K[2]) + self._person_real_width = 0.45 # meters (shoulder), matches VisualServoing2D + self._lock = threading.Lock() + self.recent_window = recent_window + self._tick = 1.0 / max(0.5, process_hz) + + print("[people] loading YOLO person detector ...") + self._detector = YoloPersonDetector() + print(f"[people] loading OSNet ({osnet_variant}) ...") + self._embed = TorchReIDModel(TorchReIDModelConfig(model_name=osnet_variant)) + self._idsys = EmbeddingIDSystem(model=lambda: self._embed) + + self._people: dict[int, dict[str, Any]] = {} + self._name_pool = list(HP_NAMES) + random.shuffle(self._name_pool) + + # Latest-frame buffer (older frames dropped if worker is busy). + self._latest: Any = None + self._latest_ts: float = 0.0 + self._stop = threading.Event() + + # Subscribe to camera; rx thread only stashes (cheap). + conn.video_stream().subscribe(self._on_frame) + threading.Thread(target=self._worker, daemon=True).start() + print(f"[people] REAL tracker running (target {process_hz:.1f} Hz)") + + def _on_frame(self, image: Any) -> None: + # Replace prior frame; producer is faster than consumer by design. + with self._lock: + self._latest = image + self._latest_ts = time.time() + + def _assign_name(self, lid: int) -> str: + if self._name_pool: + return self._name_pool.pop(0) + return f"Wizard{lid}" + + def _make_thumb(self, detection: Any) -> str: + """JPEG-encode the bbox crop → base64 data URL.""" + try: + img = detection.cropped_image(padding=8) + bgr = img.to_opencv() + # Cap size to keep payload small in /api/people. + h, w = bgr.shape[:2] + if max(h, w) > 64: + scale = 64.0 / max(h, w) + bgr = self._cv2.resize(bgr, (int(w * scale), int(h * scale))) + ok, buf = self._cv2.imencode( + ".jpg", bgr, [int(self._cv2.IMWRITE_JPEG_QUALITY), 65] + ) + if not ok: + return "" + return "data:image/jpeg;base64," + base64.b64encode(buf.tobytes()).decode() + except Exception: + return "" + + def _worker(self) -> None: + while not self._stop.is_set(): + with self._lock: + image = self._latest + self._latest = None + if image is None: + time.sleep(0.05) + continue + try: + self._process(image) + except Exception as e: # noqa: BLE001 + print(f"[people] frame skipped: {e}") + time.sleep(self._tick) + + def _process(self, image: Any) -> None: + detections = self._detector.process_image(image) + seen_lids: set[int] = set() + now = time.time() + + for det in getattr(detections, "detections", []) or []: + # YoloPersonDetector returns persons only; track_id present after + # first BoT-SORT update (may be None on the very first detection). + track_id = getattr(det, "track_id", None) + if track_id is None: + continue + + lid = self._idsys.register_detection(det) + if lid is None or lid < 0: + # Still warming up embeddings for this track (need ≥10). + continue + + with self._lock: + rec = self._people.get(lid) + if rec is None: + rec = { + "long_term_id": lid, + "name": self._assign_name(lid), + "count": 0, + "first_seen": now, + "last_seen": 0.0, + "visible": False, + "track_id": None, + "thumbnail": "", + "bbox": None, # latest (x1,y1,x2,y2) for follow + "image_width": 0, # latest frame width + "pos_x": 0.0, # dog-frame meters, +x forward + "pos_y": 0.0, # dog-frame meters, +y left + } + self._people[lid] = rec + # Re-entry: visible=False → True bumps the appearance count. + if not rec["visible"]: + rec["count"] += 1 + rec["visible"] = True + rec["track_id"] = int(track_id) + rec["last_seen"] = now + # Store the latest bbox so FollowController can servo on it. + try: + x1, y1, x2, y2 = det.bbox + rec["bbox"] = (float(x1), float(y1), float(x2), float(y2)) + rec["image_width"] = int(image.width) + # Pinhole pose estimate (dog frame: +x forward, +y left). + cx_pix = (x1 + x2) / 2.0 + bbox_w = max(1.0, x2 - x1) + distance = (self._person_real_width * self._fx) / bbox_w + x_norm = (cx_pix - self._cx) / self._fx + angle = math.atan(x_norm) # right of optical center = positive + rec["pos_x"] = round(distance * math.cos(angle), 2) + rec["pos_y"] = round(-distance * math.sin(angle), 2) + except Exception: + pass + # Refresh thumbnail (latest crop is usually the cleanest). + thumb = self._make_thumb(det) + if thumb: + rec["thumbnail"] = thumb + seen_lids.add(lid) + + # Mark people not in this frame as no longer visible. + with self._lock: + for lid, rec in self._people.items(): + if lid not in seen_lids and rec["visible"]: + rec["visible"] = False + + def get_state(self) -> dict[str, Any]: + with self._lock: + now = time.time() + all_people = sorted( + ( + { + "long_term_id": p["long_term_id"], + "name": p["name"], + "count": p["count"], + "thumbnail": p["thumbnail"], + "pos_x": p["pos_x"], + "pos_y": p["pos_y"], + "visible": p["visible"], + "last_seen_ago": round(now - p["last_seen"], 1) if p["last_seen"] else None, + } + for p in self._people.values() + ), + key=lambda x: (-x["count"], x["long_term_id"]), + ) + in_view = [] + for p in self._people.values(): + if p["last_seen"] > 0 and (now - p["last_seen"]) <= self.recent_window: + in_view.append( + { + "track_id": p["track_id"], + "long_term_id": p["long_term_id"], + "name": p["name"], + "secs_ago": round(now - p["last_seen"], 1), + "visible": p["visible"], + "thumbnail": p["thumbnail"], + "pos_x": p["pos_x"], + "pos_y": p["pos_y"], + } + ) + in_view.sort(key=lambda x: x["secs_ago"]) + return {"all": all_people, "in_view": in_view, "total": len(self._people)} + + def get_bbox(self, lid: int) -> tuple[tuple[float, float, float, float], int] | None: + """Latest bbox for a long_term_id IF that person was visible recently. + + Returns (bbox xyxy, image_width) or None. + """ + with self._lock: + p = self._people.get(lid) + if p is None or not p["visible"] or p["bbox"] is None: + return None + return (p["bbox"], p["image_width"]) + + +# MockPeopleTracker doesn't have real bboxes; FollowController will see +# get_bbox()=None in mock and just no-op. +def _mock_get_bbox(self, lid: int) -> None: # type: ignore[no-untyped-def] + return None +MockPeopleTracker.get_bbox = _mock_get_bbox # type: ignore[assignment] + + +people: Any = None # set in main() based on --mock and --no-people + + +# --- "Follow this person" selection ---------------------------------------- +# The UI lets the user pick a long_term_id from the people list as the follow +# target. For now this state is read-only on the dog side; a future control +# loop will read get_target() and steer the dog toward that person's bbox. +_tracked_lid: int | None = None +_following: bool = False +_tracked_lock = threading.Lock() + + +def select_target(lid: int | None) -> None: + global _tracked_lid, _following + with _tracked_lock: + _tracked_lid = lid + if lid is None: + _following = False # clearing the target also stops follow + + +def get_target() -> int | None: + with _tracked_lock: + return _tracked_lid + + +def set_following(b: bool) -> None: + global _following + with _tracked_lock: + _following = bool(b) + + +def get_following() -> bool: + with _tracked_lock: + return _following + + +class FollowController: + """Visual-servo follow loop. Reads selected long_term_id + tracker's latest + bbox, drives the dog at ~10 Hz via VisualServoing2D. Safe by default: only + sends Twist commands when `following=True` AND target has a fresh bbox. + """ + + def __init__(self, brain: "RobotBrain", tracker: Any) -> None: + from dimos.msgs.geometry_msgs.Twist import Twist + from dimos.msgs.geometry_msgs.Vector3 import Vector3 + from dimos.navigation.visual_servoing.visual_servoing_2d import VisualServoing2D + from dimos.robot.unitree.go2.connection import _camera_info_static + + self._brain = brain + self._tracker = tracker + self._Twist = Twist + self._Vector3 = Vector3 + # Tuned defaults inside VisualServoing2D: max 0.5 m/s, 0.8 rad/s, + # target distance 1.5m, min distance 0.8m. See visual_servoing_2d.py. + self._vs = VisualServoing2D(_camera_info_static()) + self._lost_max = 20 # ~2s at 10Hz before sending stop + self._period = 0.1 + self._stop = threading.Event() + threading.Thread(target=self._loop, daemon=True).start() + print("[follow] controller running (10 Hz, idle until FOLLOW)") + + def shutdown(self) -> None: + self._stop.set() + + def _zero(self) -> Any: + return self._Twist( + linear=self._Vector3(0.0, 0.0, 0.0), + angular=self._Vector3(0.0, 0.0, 0.0), + ) + + def _loop(self) -> None: + lost = 0 + sent_stop = False # avoid spamming zero twists every tick + while not self._stop.is_set(): + try: + if get_following() and get_target() is not None: + bbox_info = self._tracker.get_bbox(get_target()) + if bbox_info is None: + lost += 1 + if lost >= self._lost_max and not sent_stop: + print("[follow] target lost — sending zero twist") + self._brain.conn.move(self._zero()) + sent_stop = True + else: + bbox, w = bbox_info + twist = self._vs.compute_twist(bbox, w) + self._brain.conn.move(twist) + lost = 0 + sent_stop = False + else: + # Not following: ensure dog is stopped once after each + # follow→idle transition, then go quiet. + if not sent_stop: + try: + self._brain.conn.move(self._zero()) + except Exception: + pass + sent_stop = True + lost = 0 + except Exception as e: # noqa: BLE001 + print(f"[follow] tick error: {e}") + time.sleep(self._period) + + +follow_controller: FollowController | None = None # set in main() if real dog + + +# --- E-STOP: panic stop the dog regardless of state ------------------------ +def panic_stop(brain: Any) -> dict[str, Any]: + """Hard stop: + 1. Cancel any follow / target selection. + 2. Spam zero-twist (3x) — joystick auto-timeout would also do this but + we want to be loud. + 3. Send liedown so the dog actively lowers itself. + Safe to call from any thread, any time. + """ + select_target(None) + set_following(False) + out = {"following": False, "tracked_lid": None, "moves_sent": 0, "liedown": False} + if brain is None or not hasattr(brain, "conn"): + out["mock"] = True + return out + from dimos.msgs.geometry_msgs.Twist import Twist + from dimos.msgs.geometry_msgs.Vector3 import Vector3 + zero = Twist(linear=Vector3(0, 0, 0), angular=Vector3(0, 0, 0)) + for _ in range(3): + try: + brain.conn.move(zero) + out["moves_sent"] += 1 + except Exception as e: # noqa: BLE001 + print(f"[halt] zero-twist failed: {e}") + time.sleep(0.05) + try: + brain.conn.liedown() + out["liedown"] = True + except Exception as e: # noqa: BLE001 + print(f"[halt] liedown failed: {e}") + print(f"[halt] PANIC STOP executed: {out}") + return out + + +class MockBrain: + """Stand-in for RobotBrain — no dog, no WebRTC. For previewing the UI. + + Same method surface as RobotBrain so the API routes work unchanged. + """ + + def __init__(self, step_distance: float = 0.3, **_: Any): + self.step_distance = step_distance + print("[brain] MOCK mode — no robot connection") + + def stand_up(self) -> str: + time.sleep(0.3) + return "standing (mock)" + + def sit_down(self) -> str: + time.sleep(0.3) + return "sitting (mock)" + + def lie_down(self) -> str: + time.sleep(0.3) + return "lying down (mock)" + + def wave(self) -> str: + time.sleep(0.3) + return "waved (mock)" + + def step(self, key: str, fast: bool = False) -> str: + valid = {"W", "S", "Q", "E", "A", "D", + "forward", "back", "left", "right"} + k = key.upper() if len(key) == 1 else key + if k not in valid: + raise ValueError(f"unknown step key {key!r}") + time.sleep(0.15) + return f"stepped {k}{' (fast)' if fast else ''} (mock)" + + def stop_move(self) -> str: + return "stopped (mock)" + + def march(self, reps: int) -> str: + time.sleep(0.5) + return f"marched {reps} reps in place (mock)" + + def observe(self) -> dict[str, Any]: + time.sleep(0.4) + # Fake two detections: one near, one far. + return { + "count": 2, + "near_count": 1, + "people": [ + {"h_ratio": 0.71, "conf": 0.92, "near": True}, + {"h_ratio": 0.19, "conf": 0.63, "near": False}, + ], + } + + +class RobotBrain: + """Owns the single WebRTC connection and serializes commands to the dog.""" + + def __init__( + self, + ip: str, + step_distance: float, + step_speed: float, + close_ratio: float, + mode: str = "normal", + ap: bool = False, + angular_speed: float = 0.5, # rad/s for A/D turning (~28°/tap at 1s) + ): + self.ip = ip + self.step_distance = step_distance + self.step_speed = step_speed + self.angular_speed = angular_speed + self.close_ratio = close_ratio + self._lock = threading.Lock() # one command to the dog at a time + self._yolo: Any = None + method = WebRTCConnectionMethod.LocalAP if ap else WebRTCConnectionMethod.LocalSTA + print(f"[brain] connecting to {ip} (motion mode: {mode}, link: {method.name}) ...") + # mode="normal" enables the classic sport commands (StandUp/BalanceStand/ + # joystick move). The library default "ai" mode ignores them. + # ap=True (LocalAP) is for when you're on the dog's own hotspot (192.168.12.1). + self.conn = UnitreeWebRTCConnection(ip=ip, mode=mode, connection_method=method) + time.sleep(2) # let the MOTION_SWITCHER take effect before commanding + # Bring the dog to a known, command-ready state. + print("[brain] standup ...") + self.conn.standup() + time.sleep(3) + print("[brain] balance_stand ...") + self.conn.balance_stand() + time.sleep(1) + # FreeWalk = locomotion gait; without it, joystick velocity often only + # makes the dog lean in place instead of actually walking. + print("[brain] free_walk (enable locomotion) ...") + self.conn.free_walk() + time.sleep(1) + print("[brain] connected and ready (standing, walk-enabled)") + + # --- posture --------------------------------------------------------- + def stand_up(self) -> str: + with self._lock: + self.conn.standup() + time.sleep(2) + self.conn.balance_stand() + print("[cmd] stand_up") + return "standing" + + def sit_down(self) -> str: + with self._lock: + self.conn.publish_request(SPORT_TOPIC, {"api_id": SPORT_CMD["Sit"]}) + return "sitting" + + def lie_down(self) -> str: + with self._lock: + self.conn.liedown() # StandDown — dog lowers all the way to the ground (prone) + print("[cmd] lie_down") + return "lying down" + + def wave(self) -> str: + with self._lock: + self.conn.publish_request(SPORT_TOPIC, {"api_id": SPORT_CMD["Hello"]}) + time.sleep(2) + self.conn.balance_stand() + print("[cmd] wave") + return "waved" + + def _ensure_walk(self) -> None: + """Re-assert FreeWalk locomotion gait so joystick velocity actually walks.""" + self.conn.free_walk() + time.sleep(0.15) + + # --- locomotion ------------------------------------------------------ + def _pulse(self, x: float, y: float, wz: float, duration: float) -> None: + twist = Twist(linear=Vector3(x, y, 0.0), angular=Vector3(0.0, 0.0, wz)) + self.conn.move(twist, duration=duration) + self.conn.move(Twist(linear=Vector3(0, 0, 0), angular=Vector3(0, 0, 0))) + + # Official mapping (mirrors dimos/robot/unitree/keyboard_teleop.py): + # W/S = forward/back (linear.x) + # Q/E = strafe L/R (linear.y) + # A/D = turn L/R (angular.z) + # Old direction names kept as aliases for backward compatibility. + _KEY_TO_VEC: dict[str, tuple[float, float, float]] = {} # filled in __init__ + + def _build_key_map(self) -> None: + s = self.step_speed + w = self.angular_speed + self._KEY_TO_VEC = { + "W": (s, 0.0, 0.0), + "S": (-s, 0.0, 0.0), + "Q": (0.0, s, 0.0), + "E": (0.0, -s, 0.0), + "A": (0.0, 0.0, w), + "D": (0.0, 0.0, -w), + # legacy aliases (older UI): + "forward": (s, 0.0, 0.0), + "back": (-s, 0.0, 0.0), + "left": (0.0, s, 0.0), + "right": (0.0, -s, 0.0), + } + + def step(self, key: str, fast: bool = False) -> str: + if not self._KEY_TO_VEC: + self._build_key_map() + k = key.upper() if len(key) == 1 else key + vec = self._KEY_TO_VEC.get(k) + if vec is None: + raise ValueError(f"unknown step key {key!r}; expected W/S/Q/E/A/D") + vx, vy, wz = vec + mult = 2.0 if fast else 1.0 + vx *= mult; vy *= mult; wz *= mult + dur = self.step_distance / max(self.step_speed, 0.05) + with self._lock: + self._ensure_walk() + self._pulse(vx, vy, wz, dur) + tag = "⚡" if fast else "" + print(f"[cmd] step {tag}{k} vx={vx:.2f} vy={vy:.2f} wz={wz:.2f}") + return f"stepped {k}{' (fast)' if fast else ''}" + + def stop_move(self) -> str: + """Single zero-twist — dog stops moving but stays standing (no liedown). + This is the equivalent of releasing the WASD keys / the official STOP.""" + with self._lock: + self._pulse(0.0, 0.0, 0.0, 0.0) + print("[cmd] stop_move (zero twist)") + return "stopped" + + def march(self, reps: int) -> str: + """Approximate marching in place: short forward+back pulse pairs (net ~0).""" + pulse_dur = 0.18 + with self._lock: + self._ensure_walk() + for _ in range(reps): + self._pulse(self.step_speed, 0.0, 0.0, pulse_dur) + self._pulse(-self.step_speed, 0.0, 0.0, pulse_dur) + self.conn.balance_stand() + print(f"[cmd] march {reps} reps") + return f"marched {reps} reps in place" + + # --- perception ------------------------------------------------------ + def _ensure_yolo(self) -> Any: + if self._yolo is None: + from ultralytics import YOLO # type: ignore[attr-defined] + + print("[brain] loading YOLO11n-pose ...") + self._yolo = YOLO(get_data("models_yolo") / "yolo11n-pose.pt") + return self._yolo + + def _grab_frame(self, timeout: float = 10.0): # type: ignore[no-untyped-def] + holder: list = [] + got = threading.Event() + + def on_next(frame) -> None: # type: ignore[no-untyped-def] + if not holder: + holder.append(frame) + got.set() + + sub = self.conn.video_stream().subscribe(on_next=on_next) + try: + if not got.wait(timeout=timeout): + raise TimeoutError(f"no camera frame within {timeout:.1f}s") + finally: + sub.dispose() + return holder[0] + + def observe(self) -> dict[str, Any]: + model = self._ensure_yolo() + with self._lock: + frame = self._grab_frame() + img = frame.to_opencv() + frame_h = img.shape[0] + results = model.predict(img, conf=0.5, verbose=False) + people = [] + if results and results[0].boxes is not None: + r = results[0] + for box, cls_id, c in zip(r.boxes.xyxy, r.boxes.cls, r.boxes.conf, strict=False): + if int(cls_id.item()) != 0: # COCO class 0 = person + continue + x1, y1, x2, y2 = (float(v) for v in box.tolist()) + h_ratio = (y2 - y1) / frame_h + people.append( + { + "h_ratio": round(h_ratio, 3), + "conf": round(float(c.item()), 3), + "near": h_ratio >= self.close_ratio, + } + ) + near = sum(1 for p in people if p["near"]) + return {"count": len(people), "near_count": near, "people": people} + + +# --------------------------------------------------------------------------- +brain: RobotBrain | None = None +app = FastAPI(title="Go2 Phone Control") + + +class MarchReq(BaseModel): + reps: int = 10 + + +class StepReq(BaseModel): + key: str | None = None # new: W/S/Q/E/A/D + direction: str | None = None # legacy: forward/back/left/right + fast: bool = False + + +@app.get("/") +def index() -> FileResponse: + return FileResponse(HERE / "index.html") + + +@app.get("/people") +def people_page() -> FileResponse: + return FileResponse(HERE / "people.html") + + +@app.get("/api/people") +def api_people() -> JSONResponse: + if people is None: + return JSONResponse( + { + "all": [], "in_view": [], "total": 0, "disabled": True, + "tracked_lid": None, "following": False, + } + ) + state = people.get_state() + state["tracked_lid"] = get_target() + state["following"] = get_following() + return JSONResponse(state) + + +class TrackSelectReq(BaseModel): + long_term_id: int + + +@app.post("/api/track/select") +def api_track_select(req: TrackSelectReq) -> JSONResponse: + select_target(req.long_term_id) + return JSONResponse({"ok": True, "tracked_lid": req.long_term_id, "following": False}) + + +@app.post("/api/track/clear") +def api_track_clear() -> JSONResponse: + select_target(None) + return JSONResponse({"ok": True, "tracked_lid": None, "following": False}) + + +@app.post("/api/follow/start") +def api_follow_start() -> JSONResponse: + if get_target() is None: + return JSONResponse( + {"ok": False, "error": "no target selected"}, status_code=400 + ) + set_following(True) + return JSONResponse({"ok": True, "following": True, "tracked_lid": get_target()}) + + +@app.post("/api/follow/stop") +def api_follow_stop() -> JSONResponse: + set_following(False) + return JSONResponse({"ok": True, "following": False, "tracked_lid": get_target()}) + + +@app.post("/api/halt") +def api_halt() -> JSONResponse: + """E-STOP: cancel target, stop following, zero-twist x3, liedown. + Reachable any time (no auth, no preconditions).""" + result = panic_stop(brain) + return JSONResponse({"ok": True, **result}) + + +def _ok(result: Any) -> JSONResponse: + return JSONResponse({"ok": True, "result": result}) + + +def _err(msg: str) -> JSONResponse: + return JSONResponse({"ok": False, "error": msg}, status_code=500) + + +@app.post("/api/stand_up") +def api_stand_up() -> JSONResponse: + try: + return _ok(brain.stand_up()) # type: ignore[union-attr] + except Exception as e: # noqa: BLE001 + return _err(str(e)) + + +@app.post("/api/sit_down") +def api_sit_down() -> JSONResponse: + try: + return _ok(brain.sit_down()) # type: ignore[union-attr] + except Exception as e: # noqa: BLE001 + return _err(str(e)) + + +@app.post("/api/lie_down") +def api_lie_down() -> JSONResponse: + try: + return _ok(brain.lie_down()) # type: ignore[union-attr] + except Exception as e: # noqa: BLE001 + return _err(str(e)) + + +@app.post("/api/wave") +def api_wave() -> JSONResponse: + try: + return _ok(brain.wave()) # type: ignore[union-attr] + except Exception as e: # noqa: BLE001 + return _err(str(e)) + + +@app.post("/api/march") +def api_march(req: MarchReq) -> JSONResponse: + try: + return _ok(brain.march(req.reps)) # type: ignore[union-attr] + except Exception as e: # noqa: BLE001 + return _err(str(e)) + + +@app.post("/api/step") +def api_step(req: StepReq) -> JSONResponse: + k = req.key or req.direction + if not k: + return _err("missing 'key' (W/S/Q/E/A/D) or 'direction'") + try: + return _ok(brain.step(k, fast=req.fast)) # type: ignore[union-attr] + except Exception as e: # noqa: BLE001 + return _err(str(e)) + + +@app.post("/api/stop_move") +def api_stop_move() -> JSONResponse: + """Soft stop — single zero twist. Dog stops moving but stays standing. + (Use /api/halt for hard panic: clear follow + zero x3 + liedown.)""" + try: + return _ok(brain.stop_move()) # type: ignore[union-attr] + except Exception as e: # noqa: BLE001 + return _err(str(e)) + + +@app.post("/api/observe") +def api_observe() -> JSONResponse: + try: + return _ok(brain.observe()) # type: ignore[union-attr] + except Exception as e: # noqa: BLE001 + return _err(str(e)) + + +def main() -> None: + parser = argparse.ArgumentParser(description="Go2 phone-control server") + parser.add_argument("--ip", help="Robot IP, e.g. 192.168.12.1 (omit with --mock)") + parser.add_argument("--port", type=int, default=8800, help="HTTP port (default 8800)") + parser.add_argument("--step-distance", type=float, default=0.3, dest="step_distance") + parser.add_argument("--step-speed", type=float, default=0.3, dest="step_speed") + parser.add_argument("--close-ratio", type=float, default=0.5, dest="close_ratio") + parser.add_argument( + "--mode", + default="normal", + help="Go2 motion mode: 'normal' (classic sport cmds) or 'ai' (default normal)", + ) + parser.add_argument( + "--ap", + action="store_true", + help="Use LocalAP link (you're on the dog's own hotspot at 192.168.12.1)", + ) + parser.add_argument( + "--mock", + action="store_true", + help="UI preview mode: no robot connection, fake responses", + ) + parser.add_argument( + "--no-people", + action="store_true", + dest="no_people", + help="Disable the people tracker (saves CPU; /api/people returns empty)", + ) + parser.add_argument( + "--mock-people", + action="store_true", + dest="mock_people", + help="Force the MOCK people tracker even when connected to the real dog", + ) + parser.add_argument( + "--osnet", + default="osnet_x0_5", + help="OSNet variant for Re-ID: x0_25/x0_5/x0_75/x1_0 (default x0_5)", + ) + parser.add_argument( + "--no-follow", + action="store_true", + dest="no_follow", + help="Disable the follow controller (no visual-servo loop runs)", + ) + args = parser.parse_args() + + global brain, people, follow_controller + if args.mock: + brain = MockBrain(step_distance=args.step_distance) # type: ignore[assignment] + else: + if not args.ip: + parser.error("--ip is required unless --mock is set") + brain = RobotBrain( + ip=args.ip, + step_distance=args.step_distance, + step_speed=args.step_speed, + close_ratio=args.close_ratio, + mode=args.mode, + ap=args.ap, + ) + + # People tracker: mock by default in --mock; real (YOLO+OSNet) when on a dog + # unless --mock-people overrides. --no-people disables the feature. + if args.no_people: + people = None + print("[people] disabled (--no-people)") + elif args.mock or args.mock_people: + people = MockPeopleTracker() # type: ignore[assignment] + else: + try: + people = RealPeopleTracker(brain.conn, osnet_variant=args.osnet) # type: ignore[assignment] + except Exception as e: # noqa: BLE001 + print(f"[people] real tracker failed to start: {e}\n[people] falling back to MOCK") + people = MockPeopleTracker() # type: ignore[assignment] + + # Follow controller (only meaningful on a real dog). Always available so the + # API exists for testing; in mock mode it just no-ops since get_bbox returns + # None and brain has no `.conn`. + if args.no_follow or args.mock: + follow_controller = None + if args.no_follow: + print("[follow] disabled (--no-follow)") + else: + try: + follow_controller = FollowController(brain, people) + except Exception as e: # noqa: BLE001 + print(f"[follow] failed to start: {e}") + follow_controller = None + + # 0.0.0.0 so the phone on the same Wi-Fi can reach it. + print(f"\n[server] open http://:{args.port}/ on your phone\n") + uvicorn.run(app, host="0.0.0.0", port=args.port, log_level="info") + + +if __name__ == "__main__": + main() diff --git a/examples/go2_walk_backward.py b/examples/go2_walk_backward.py new file mode 100644 index 0000000000..56c5c28791 --- /dev/null +++ b/examples/go2_walk_backward.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 +# Copyright 2025-2026 Dimensional Inc. +# SPDX-License-Identifier: Apache-2.0 + +"""Minimal Go2 motion script: stand up, walk BACKWARD ~2 meters, lie down. + +No perception, no blueprint framework — just a direct WebRTC connection. + +⚠️ Walking backward is blind (no rear camera/LiDAR coverage). Make sure + the path behind the robot is clear. Keep the remote in hand for E-stop. + +Run: + .venv/bin/python examples/go2_walk_backward.py --ip 192.168.12.1 + # Options: --distance 2.0 --speed 0.3 +""" + +from __future__ import annotations + +import argparse +import time + +from dimos.msgs.geometry_msgs.Twist import Twist +from dimos.msgs.geometry_msgs.Vector3 import Vector3 +from dimos.robot.unitree.connection import UnitreeWebRTCConnection + + +def main() -> None: + parser = argparse.ArgumentParser(description="Go2: stand up and walk backward") + parser.add_argument("--ip", required=True, help="Robot IP, e.g. 192.168.12.1") + parser.add_argument( + "--distance", + type=float, + default=2.0, + help="Meters to walk backward (default: 2.0)", + ) + parser.add_argument( + "--speed", + type=float, + default=0.3, + help="Linear speed magnitude in m/s (default: 0.3)", + ) + args = parser.parse_args() + + # Both expected positive; we send -speed on x for backward motion. + if args.distance <= 0 or args.speed <= 0: + parser.error("--distance and --speed must be positive (direction is hard-coded backward)") + + duration = args.distance / args.speed + + print(f"Connecting to {args.ip}...") + conn = UnitreeWebRTCConnection(ip=args.ip) + + try: + print("Standing up...") + conn.standup() + time.sleep(3) + + print("Entering balance stand mode...") + conn.balance_stand() + time.sleep(1) + + print( + f"Walking BACKWARD {args.distance:.2f}m at {args.speed:.2f} m/s ({duration:.1f}s)..." + ) + twist = Twist(linear=Vector3(-args.speed, 0.0, 0.0), angular=Vector3(0.0, 0.0, 0.0)) + conn.move(twist, duration=duration) + + # Belt-and-suspenders: explicitly send a zero twist. + conn.move(Twist(linear=Vector3(0, 0, 0), angular=Vector3(0, 0, 0))) + time.sleep(0.5) + + print("Lying down...") + conn.liedown() + time.sleep(2) + + print("Done.") + except KeyboardInterrupt: + print("\nInterrupted — stopping robot.") + conn.move(Twist(linear=Vector3(0, 0, 0), angular=Vector3(0, 0, 0))) + finally: + conn.stop() + + +if __name__ == "__main__": + main() diff --git a/examples/go2_walk_forward.py b/examples/go2_walk_forward.py new file mode 100644 index 0000000000..cb20b0ac32 --- /dev/null +++ b/examples/go2_walk_forward.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 +# Copyright 2025-2026 Dimensional Inc. +# SPDX-License-Identifier: Apache-2.0 + +"""Minimal Go2 motion script: stand up, walk forward ~2 steps, lie down. + +No perception, no blueprint framework. Works against real robot (WebRTC), +MuJoCo simulator, or replay dataset, via the same code path. + +Run: + # Real robot + .venv/bin/python examples/go2_walk_forward.py --ip 192.168.12.1 + + # MuJoCo simulator (macOS: requires .venv/bin on PATH for mjpython; + # script auto-adds it) + .venv/bin/python examples/go2_walk_forward.py --ip mujoco + + # Replay (no-op moves, just for code-path sanity) + .venv/bin/python examples/go2_walk_forward.py --ip replay + + # Options: --distance 1.0 --speed 0.3 +""" + +from __future__ import annotations + +import argparse +import os +import sys +import time +from pathlib import Path + +from dimos.core.global_config import global_config +from dimos.msgs.geometry_msgs.Twist import Twist +from dimos.msgs.geometry_msgs.Vector3 import Vector3 +from dimos.robot.unitree.go2.connection import make_connection + + +def _ensure_venv_on_path() -> None: + """MuJoCo spawns a subprocess that needs `mjpython` on PATH. When the user + invokes us as `.venv/bin/python …` instead of activating the venv, the venv + bin dir isn't on PATH. Add it so the subprocess can find mjpython.""" + venv_bin = Path(sys.executable).parent + path_parts = os.environ.get("PATH", "").split(os.pathsep) + if str(venv_bin) not in path_parts: + os.environ["PATH"] = str(venv_bin) + os.pathsep + os.environ.get("PATH", "") + + +def main() -> None: + parser = argparse.ArgumentParser(description="Go2: stand up and walk forward") + parser.add_argument("--ip", required=True, help="Robot IP, e.g. 192.168.12.1") + parser.add_argument( + "--distance", type=float, default=1.0, help="Meters to walk (default: 1.0 = ~2 steps)" + ) + parser.add_argument( + "--speed", type=float, default=0.3, help="Linear speed in m/s (default: 0.3)" + ) + args = parser.parse_args() + + duration = args.distance / args.speed + + if args.ip in ("mujoco", "replay", "fake", "mock"): + _ensure_venv_on_path() + + print(f"Connecting to {args.ip}...") + # make_connection routes: 'mujoco' -> MujocoConnection, 'replay'/'fake'/'mock' -> + # ReplayConnection, anything else -> UnitreeWebRTCConnection(ip) + conn = make_connection(args.ip, global_config) + conn.start() + + try: + print("Standing up...") + conn.standup() + time.sleep(3) + + print("Entering balance stand mode...") + conn.balance_stand() + time.sleep(1) + + print(f"Walking forward {args.distance:.2f}m at {args.speed:.2f} m/s ({duration:.1f}s)...") + twist = Twist(linear=Vector3(args.speed, 0.0, 0.0), angular=Vector3(0.0, 0.0, 0.0)) + conn.move(twist, duration=duration) + + # Belt-and-suspenders: explicitly send a zero twist. + conn.move(Twist(linear=Vector3(0, 0, 0), angular=Vector3(0, 0, 0))) + time.sleep(0.5) + + print("Lying down...") + conn.liedown() + time.sleep(2) + + print("Done.") + except KeyboardInterrupt: + print("\nInterrupted — stopping robot.") + conn.move(Twist(linear=Vector3(0, 0, 0), angular=Vector3(0, 0, 0))) + finally: + conn.stop() + + +if __name__ == "__main__": + main() diff --git a/scripts/run-blueprint.sh b/scripts/run-blueprint.sh new file mode 100755 index 0000000000..069eff043b --- /dev/null +++ b/scripts/run-blueprint.sh @@ -0,0 +1,118 @@ +#!/usr/bin/env bash +# Run a dimos blueprint and ALWAYS save the full terminal output to a +# timestamped log under /tmp/dimos-logs/. A `latest.log` symlink always +# points at the most recent run so you don't have to remember the +# timestamp when something goes wrong. +# +# Usage: +# scripts/run-blueprint.sh # defaults to go2-marauders-map +# scripts/run-blueprint.sh go2-marauders-map # explicit blueprint +# scripts/run-blueprint.sh yoloe-target-lock-distance-follow # any other one +# +# Extra args after the blueprint name are forwarded to `dimos`, e.g.: +# scripts/run-blueprint.sh go2-marauders-map --replay +# +# Defaults assume the real Go2 at 192.168.12.1 on dimair10. Override with: +# SIM=mujoco scripts/run-blueprint.sh go2-marauders-map # MuJoCo physics +# SIM=dimsim scripts/run-blueprint.sh go2-marauders-map # DimSim +# REPLAY=1 scripts/run-blueprint.sh go2-marauders-map # dataset replay (no physics) +# ROBOT_IP=192.168.123.18 scripts/run-blueprint.sh go2-marauders-map +# +# Note: MuJoCo on macOS needs `mjpython` (not plain python) for the GUI to +# render. The script auto-uses .venv/bin/mjpython when SIM=mujoco AND that +# binary exists. If you see a black/frozen MuJoCo window, that's why. + +set -uo pipefail + +# Repo root = parent of this script's directory. +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +cd "$REPO_ROOT" + +BLUEPRINT="${1:-go2-marauders-map}" +shift || true # consume the blueprint arg if it was passed +EXTRA_ARGS=("$@") + +# Mode resolution priority: SIM > REPLAY > ROBOT_IP > default real-dog IP. +# We surface this as separate env vars rather than overloading ROBOT_IP so the +# log header is unambiguous about WHY this run isn't talking to real hardware. +SIM="${SIM:-}" +REPLAY="${REPLAY:-}" +ROBOT_IP="${ROBOT_IP:-192.168.12.1}" + +MODE_ARGS=() +MODE_LABEL="" +if [ -n "$SIM" ]; then + MODE_ARGS=(--simulation "$SIM") + MODE_LABEL="simulation=$SIM" +elif [ -n "$REPLAY" ]; then + MODE_ARGS=(--replay) + MODE_LABEL="replay" +else + MODE_ARGS=(--robot-ip "$ROBOT_IP") + MODE_LABEL="robot_ip=$ROBOT_IP" +fi + +LOG_DIR="/tmp/dimos-logs" +mkdir -p "$LOG_DIR" + +# Timestamp like 20260528-013742 — sortable, no spaces, no colon. +TS="$(date +%Y%m%d-%H%M%S)" +LOG_FILE="$LOG_DIR/${BLUEPRINT}-${TS}.log" + +# Auto-rotate: keep newest 20, drop the rest. Quiet on first run. +ls -1t "$LOG_DIR"/*.log 2>/dev/null | tail -n +21 | xargs -I{} rm -f -- {} 2>/dev/null || true + +# Pick interpreter: MuJoCo on macOS requires the special `mjpython` launcher +# (it owns the main thread for the Cocoa GL context). If we're in SIM=mujoco +# AND mjpython exists in the venv, dispatch via it; otherwise fall back to +# the normal `dimos` CLI script. +DIMOS_BIN=".venv/bin/dimos" +if [ "$SIM" = "mujoco" ] && [ -x ".venv/bin/mjpython" ]; then + # Invoke the CLI's entry function under mjpython so the MuJoCo GL window + # runs on the macOS main thread. `dimos` console-script targets + # dimos.robot.cli.dimos:cli_main. + DIMOS_CMD=(.venv/bin/mjpython -c + "from dimos.robot.cli.dimos import cli_main; import sys; sys.exit(cli_main())" + "${MODE_ARGS[@]}" --rerun-open native run "$BLUEPRINT") +else + DIMOS_CMD=("$DIMOS_BIN" "${MODE_ARGS[@]}" --rerun-open native run "$BLUEPRINT") +fi +if [ ${#EXTRA_ARGS[@]} -gt 0 ]; then + DIMOS_CMD+=("${EXTRA_ARGS[@]}") +fi + +# Header in the log so post-hoc reading is easier. +{ + echo "==========================================" + echo " dimos blueprint runner" + echo " blueprint : $BLUEPRINT" + echo " mode : $MODE_LABEL" + echo " started : $(date)" + echo " cwd : $REPO_ROOT" + echo " git HEAD : $(git rev-parse --short HEAD 2>/dev/null || echo n/a)" + echo " git status : $(git status --short 2>/dev/null | wc -l | tr -d ' ') uncommitted files" + echo " cmd : ${DIMOS_CMD[*]}" + echo "==========================================" + echo "" +} | tee "$LOG_FILE" + +echo "[runner] full log -> $LOG_FILE" +echo "[runner] follow live: tail -f $LOG_DIR/latest.log" +echo "" + +# Use PATH so any subprocess that calls `dimos` / `python` finds the venv first. +export PATH="$REPO_ROOT/.venv/bin:$PATH" + +# Run and tee. `script` would give us a PTY (preserves ANSI colors, progress +# bars), but tee is enough for plain-text postmortem. +"${DIMOS_CMD[@]}" 2>&1 | tee -a "$LOG_FILE" +RC=${PIPESTATUS[0]} + +# Refresh the latest.log symlink only AFTER a successful tee so a crashed run +# still leaves its file on disk but `latest.log` doesn't point at empty data. +ln -sfn "$LOG_FILE" "$LOG_DIR/latest.log" + +echo "" +echo "[runner] exit $RC — log: $LOG_FILE" +exit $RC From 5cf9326149a82198d9b1fcde646c8737e1067e9f Mon Sep 17 00:00:00 2001 From: Harold <20009626+HaroldGin931@users.noreply.github.com> Date: Thu, 28 May 2026 22:25:56 +0800 Subject: [PATCH 15/17] feat(custom): add yoloe spatial standoff workflow --- dimos/robot/all_blueprints.py | 3 + dimos/robot/custom/README.md | 69 +- .../yoloe_spatial_standoff_follow.py | 170 +++++ .../modules/spatial_target_lock_module.py | 680 ++++++++++++++++++ .../tasks/bbox_distance_behavior_module.py | 20 +- .../tasks/target_standoff_behavior_module.py | 585 +++++++++++++++ .../tests/test_spatial_target_lock_module.py | 239 ++++++ .../test_target_standoff_behavior_module.py | 278 +++++++ 8 files changed, 2035 insertions(+), 9 deletions(-) create mode 100644 dimos/robot/custom/blueprints/yoloe_spatial_standoff_follow.py create mode 100644 dimos/robot/custom/modules/spatial_target_lock_module.py create mode 100644 dimos/robot/custom/tasks/target_standoff_behavior_module.py create mode 100644 dimos/robot/custom/tests/test_spatial_target_lock_module.py create mode 100644 dimos/robot/custom/tests/test_target_standoff_behavior_module.py diff --git a/dimos/robot/all_blueprints.py b/dimos/robot/all_blueprints.py index 2a9bcbc8e1..0b53da7115 100644 --- a/dimos/robot/all_blueprints.py +++ b/dimos/robot/all_blueprints.py @@ -122,6 +122,7 @@ "xarm7-planner-coordinator": "dimos.manipulation.blueprints:xarm7_planner_coordinator", "xarm7-planner-coordinator-agent": "dimos.manipulation.blueprints:xarm7_planner_coordinator_agent", "yoloe-keyboard-teleop": "dimos.robot.custom.blueprints.yoloe_keyboard_teleop:yoloe_keyboard_teleop", + "yoloe-spatial-standoff-follow": "dimos.robot.custom.blueprints.yoloe_spatial_standoff_follow:yoloe_spatial_standoff_follow", "yoloe-target-lock-distance-follow": "dimos.robot.custom.blueprints.yoloe_target_lock_distance_follow:yoloe_target_lock_distance_follow", "yoloe-tracking-test": "dimos.robot.custom.blueprints.yoloe_tracking_test:yoloe_tracking_test", } @@ -212,9 +213,11 @@ "simple-phone-teleop": "dimos.teleop.phone.phone_extensions.SimplePhoneTeleop", "simple-planner": "dimos.navigation.nav_stack.modules.simple_planner.simple_planner.SimplePlanner", "spatial-memory": "dimos.perception.spatial_perception.SpatialMemory", + "spatial-target-lock-module": "dimos.robot.custom.modules.spatial_target_lock_module.SpatialTargetLockModule", "speak-skill": "dimos.agents.skills.speak_skill.SpeakSkill", "tare-planner": "dimos.navigation.nav_stack.modules.tare_planner.tare_planner.TarePlanner", "target-lock-module": "dimos.robot.custom.modules.target_lock_module.TargetLockModule", + "target-standoff-behavior-module": "dimos.robot.custom.tasks.target_standoff_behavior_module.TargetStandoffBehaviorModule", "temporal-memory": "dimos.perception.experimental.temporal_memory.temporal_memory.TemporalMemory", "terrain-analysis": "dimos.navigation.nav_stack.modules.terrain_analysis.terrain_analysis.TerrainAnalysis", "terrain-map-ext": "dimos.navigation.nav_stack.modules.terrain_map_ext.terrain_map_ext.TerrainMapExt", diff --git a/dimos/robot/custom/README.md b/dimos/robot/custom/README.md index f75281143f..d46ef471ae 100644 --- a/dimos/robot/custom/README.md +++ b/dimos/robot/custom/README.md @@ -7,21 +7,26 @@ dimos/robot/custom/ ├── modules/ # 纯业务逻辑,无 blueprint / vis 代码 │ ├── bbox_selection_module.py # BBoxSelectionModule, BBoxSelectionConfig │ ├── target_lock_module.py # TargetLockModule, TargetLockConfig +│ ├── spatial_target_lock_module.py # SpatialTargetLockModule, SpatialTargetLockConfig │ ├── yoloe_tracking_module.py # YoloeTrackingModule, YoloeTrackingConfig │ └── go2_startup_self_check_module.py # Go2StartupSelfCheck, Go2StartupSelfCheckConfig ├── tasks/ # 任务实现:每个 task 自带状态机 -│ └── bbox_distance_behavior_module.py # BBoxDistanceBehaviorModule, BBoxDistanceBehaviorConfig +│ ├── bbox_distance_behavior_module.py # BBoxDistanceBehaviorModule, BBoxDistanceBehaviorConfig +│ └── target_standoff_behavior_module.py # TargetStandoffBehaviorModule, TargetStandoffBehaviorConfig ├── visualization/ # Detection2DArray -> Rerun 2D overlay 适配 │ └── detection2d_overlay.py # detection_array_to_rerun / detections_overlay / │ # selected_bbox_overlay / yoloe_overlay ├── blueprints/ # autoconnect 组装 + rerun config + requirements │ ├── bbox_distance_follow.py # 最小距离任务蓝图 +│ ├── yoloe_spatial_standoff_follow.py # YOLOE + 空间锁定 + 近身/后撤/返回 │ ├── yoloe_target_lock_distance_follow.py # 推荐闭环示例:YOLOE + selection + target lock + task │ ├── yoloe_keyboard_teleop.py # 键盘遥控 + YOLOE(非本文重点) │ ├── yoloe_tracking_test.py # 仅检测/跟踪验证 │ └── go2_startup_self_check.py # 开机自检蓝图 └── tests/ ├── test_bbox_distance_behavior_module.py + ├── test_spatial_target_lock_module.py + ├── test_target_standoff_behavior_module.py └── test_target_lock_module.py ``` @@ -35,7 +40,7 @@ dimos/robot/custom/ ```bash source .venv/bin/activate -pytest dimos/robot/custom/tests/test_bbox_distance_behavior_module.py dimos/robot/custom/tests/test_target_lock_module.py -q +pytest dimos/robot/custom/tests/test_bbox_distance_behavior_module.py dimos/robot/custom/tests/test_target_lock_module.py dimos/robot/custom/tests/test_spatial_target_lock_module.py dimos/robot/custom/tests/test_target_standoff_behavior_module.py -q ``` ### 2. 再验证 blueprint 自动注册 @@ -49,6 +54,7 @@ pytest dimos/robot/test_all_blueprints_generation.py ```bash .venv/bin/dimos --replay run yoloe-target-lock-distance-follow +.venv/bin/dimos --replay run yoloe-spatial-standoff-follow ``` 这个顺序可以把问题快速归类到: @@ -58,7 +64,64 @@ pytest dimos/robot/test_all_blueprints_generation.py ## 当前 blueprint 状态机 -### 1) yoloe-target-lock-distance-follow(推荐闭环) +### 1) yoloe-spatial-standoff-follow(空间锁定 + near/far waypoint 任务) + +组成: +- `unitree_go2` +- `YoloeTrackingModule.blueprint()` +- `BBoxSelectionModule.blueprint()` +- `SpatialTargetLockModule.blueprint()` +- `TargetStandoffBehaviorModule.blueprint()` +- `KeyboardTeleop.blueprint(publish_only_when_active=True)` +- `MovementManager.blueprint()` + +核心行为: +- 用户在 Camera 视图点击 YOLOE bbox。 +- `SpatialTargetLockModule` 把选中 bbox 投影到 lidar 世界点云,缓存 `target_pose`。 +- YOLOE 丢失时继续发布最后一次 `target_pose`,状态为 `using_memory`。 +- 当前任务策略里 YOLOE 只负责提供初始 bbox;空间点锁定后不再用 YOLOE 重匹配刷新目标点。 +- `TargetStandoffBehaviorModule` 固定保存三个点:`target`、离 target 约 `0.5m` 的 `near`、离 target 约 `1.5m` 的 `far`。 +- 行为模块只编排 waypoint,不直接发布速度;实际移动通过 `ReplanningAStarPlanner.set_goal()` 交给现有路径导航。 +- 默认流程:导航到 `near` -> 倒计时停留 `10s`(每 `2s` 打一次 countdown log)-> 导航到 `far` -> 倒计时停留 `10s` -> 导航回 `near` -> 完成并清空选择。 + +状态机: + +```mermaid +stateDiagram-v2 + [*] --> idle + idle --> navigating_near: target_pose -> set_goal(near) + navigating_near --> dwelling_near: planner goal_reached + dwelling_near --> navigating_far: 10s -> set_goal(far) + navigating_far --> dwelling_far: planner goal_reached + dwelling_far --> returning_near: 10s -> set_goal(near) + returning_near --> done: planner goal_reached + done --> idle: clear_selection / new run +``` + +模块消息流: + +```mermaid +flowchart LR + C[color_image] --> Y[YoloeTrackingModule] + Y --> D[detections] + D --> S[BBoxSelectionModule] + S --> USB[user_selected_bbox] + D --> STL[SpatialTargetLockModule] + USB --> STL + L[lidar] --> STL + I[camera_info] --> STL + STL --> LB[locked_bbox] + STL --> TP[target_pose] + TP --> B[TargetStandoffBehaviorModule] + B -->|set_goal near/far/near| P[ReplanningAStarPlanner] + P -->|nav_cmd_vel| MM[MovementManager] + KB[KeyboardTeleop] -->|tele_cmd_vel| MM + MM -->|cmd_vel| V[Go2Connection] + MM -->|stop_movement| STL + MM -->|stop_movement / teleop_active| B +``` + +### 2) yoloe-target-lock-distance-follow(2D lock + one-shot distance follow) 组成: - `unitree_go2_basic` diff --git a/dimos/robot/custom/blueprints/yoloe_spatial_standoff_follow.py b/dimos/robot/custom/blueprints/yoloe_spatial_standoff_follow.py new file mode 100644 index 0000000000..3f9cfbfc90 --- /dev/null +++ b/dimos/robot/custom/blueprints/yoloe_spatial_standoff_follow.py @@ -0,0 +1,170 @@ +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from typing import Any + +from dimos.core.coordination.blueprints import autoconnect +from dimos.core.coordination.module_coordinator import ModuleCoordinator +from dimos.core.global_config import global_config +from dimos.core.transport import LCMTransport +from dimos.msgs.geometry_msgs.PoseStamped import PoseStamped +from dimos.msgs.geometry_msgs.Twist import Twist +from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray +from dimos.navigation.replanning_a_star.module import ReplanningAStarPlanner +from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule +from dimos.robot.custom.modules.spatial_target_lock_module import SpatialTargetLockModule +from dimos.robot.custom.modules.yoloe_tracking_module import ( + YoloeTrackingModule, + _require_yoloe_lrpc_model, +) +from dimos.robot.custom.tasks.target_standoff_behavior_module import ( + TargetStandoffBehaviorModule, +) +from dimos.robot.custom.visualization.detection2d_overlay import ( + selected_bbox_overlay, + yoloe_overlay, +) +from dimos.robot.unitree.go2.blueprints.basic.unitree_go2_basic import ( + rerun_config as go2_rerun_config, +) +from dimos.robot.unitree.go2.blueprints.smart.unitree_go2 import unitree_go2 +from dimos.robot.unitree.keyboard_teleop import KeyboardTeleop +from dimos.visualization.vis_module import vis_module + +_YOLOE_DETECTIONS_TOPIC = "/color_image/yoloe_detections" +_USER_SELECTED_BBOX_TOPIC = "/color_image/selected_bbox" +_LOCKED_BBOX_TOPIC = "/color_image/locked_bbox" +_TARGET_POSE_TOPIC = "/target_pose" +_NAV_CMD_VEL_TOPIC = "/nav_cmd_vel" +_TELE_CMD_VEL_TOPIC = "/tele_cmd_vel" + +_YOLOE_DETECTIONS_ENTITY = "world/color_image/yoloe_detections" +_USER_SELECTED_BBOX_ENTITY = "world/color_image/selected_bbox" +_LOCKED_BBOX_ENTITY = "world/color_image/locked_bbox" + + +def _spatial_standoff_rerun_blueprint() -> Any: + import rerun as rr + import rerun.blueprint as rrb + + return rrb.Blueprint( + rrb.Horizontal( + rrb.Spatial2DView( + origin="world/color_image", + contents=["world/color_image/**"], + name="Camera", + ), + rrb.Spatial3DView( + origin="world", + contents=[ + "world/**", + f"-{_YOLOE_DETECTIONS_ENTITY}", + f"-{_USER_SELECTED_BBOX_ENTITY}", + f"-{_LOCKED_BBOX_ENTITY}", + ], + name="3D", + background=rrb.Background(kind="SolidColor", color=[0, 0, 0]), + line_grid=rrb.LineGrid3D( + plane=rr.components.Plane3D.XY.with_distance(0.5), + ), + ), + column_shares=[1, 2], + ), + rrb.TimePanel(state="hidden"), + rrb.SelectionPanel(state="hidden"), + ) + + +_spatial_standoff_rerun_config = { + **go2_rerun_config, + "blueprint": _spatial_standoff_rerun_blueprint, + "visual_override": { + **go2_rerun_config["visual_override"], + _YOLOE_DETECTIONS_ENTITY: yoloe_overlay, + _USER_SELECTED_BBOX_ENTITY: selected_bbox_overlay, + _LOCKED_BBOX_ENTITY: selected_bbox_overlay, + }, +} + +_spatial_standoff_vis = vis_module( + viewer_backend=global_config.viewer, + rerun_config=_spatial_standoff_rerun_config, +) + + +yoloe_spatial_standoff_follow = ( + autoconnect( + unitree_go2, + _spatial_standoff_vis, + YoloeTrackingModule.blueprint(), + BBoxSelectionModule.blueprint(), + SpatialTargetLockModule.blueprint(), + TargetStandoffBehaviorModule.blueprint(), + KeyboardTeleop.blueprint(publish_only_when_active=True), + ) + .global_config( + n_workers=16, + robot_model="unitree_go2", + ) + .remappings( + [ + (BBoxSelectionModule, "selected_bbox", "user_selected_bbox"), + (SpatialTargetLockModule, "selected_bbox", "user_selected_bbox"), + (TargetStandoffBehaviorModule, "teleop_active", "stop_movement"), + (KeyboardTeleop, "cmd_vel", "tele_cmd_vel"), + (ReplanningAStarPlanner, "clicked_point", "planner_clicked_point"), + ] + ) + .transports( + { + ("detections", Detection2DArray): LCMTransport( + _YOLOE_DETECTIONS_TOPIC, + Detection2DArray, + ), + ("user_selected_bbox", Detection2DArray): LCMTransport( + _USER_SELECTED_BBOX_TOPIC, + Detection2DArray, + ), + ("locked_bbox", Detection2DArray): LCMTransport( + _LOCKED_BBOX_TOPIC, + Detection2DArray, + ), + ("target_pose", PoseStamped): LCMTransport( + _TARGET_POSE_TOPIC, + PoseStamped, + ), + ("nav_cmd_vel", Twist): LCMTransport( + _NAV_CMD_VEL_TOPIC, + Twist, + ), + ("tele_cmd_vel", Twist): LCMTransport( + _TELE_CMD_VEL_TOPIC, + Twist, + ), + } + ) + .requirements( + _require_yoloe_lrpc_model, + ) +) + +__all__ = [ + "yoloe_spatial_standoff_follow", +] + + +if __name__ == "__main__": + ModuleCoordinator.build(yoloe_spatial_standoff_follow).loop() diff --git a/dimos/robot/custom/modules/spatial_target_lock_module.py b/dimos/robot/custom/modules/spatial_target_lock_module.py new file mode 100644 index 0000000000..3b8f855920 --- /dev/null +++ b/dimos/robot/custom/modules/spatial_target_lock_module.py @@ -0,0 +1,680 @@ +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import json +import math +import threading +import time +from typing import Any, Literal + +from dimos_lcm.sensor_msgs import CameraInfo as DimosLcmCameraInfo # type: ignore[import-untyped] +from dimos_lcm.std_msgs import Bool, String # type: ignore[import-untyped] +from reactivex.disposable import Disposable + +from dimos.core.core import rpc +from dimos.core.module import Module, ModuleConfig +from dimos.core.stream import In, Out +from dimos.msgs.geometry_msgs.PoseStamped import PoseStamped +from dimos.msgs.geometry_msgs.Vector3 import Vector3 +from dimos.msgs.sensor_msgs.CameraInfo import CameraInfo +from dimos.msgs.sensor_msgs.PointCloud2 import PointCloud2 +from dimos.msgs.std_msgs.Header import Header +from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray +from dimos.perception.detection.type.detection2d.bbox import Detection2DBBox +from dimos.perception.detection.type.detection3d.pointcloud import Detection3DPC +from dimos.robot.custom.modules.bbox_selection_module import BBoxSelectionModule +from dimos.utils.logging_config import setup_logger + +logger = setup_logger() + +_DEFAULT_FRAME_ID = "camera_optical" +_WORLD_FRAME_ID = "world" + +LockState = Literal["unselected", "waiting_for_pose", "locked", "using_memory"] +PoseSource = Literal["none", "selected_bbox", "spatial_reacquire", "memory"] + + +def _safe_track_id(raw: Any) -> int: + try: + return int(raw) + except (TypeError, ValueError): + return 0 + + +class SpatialTargetLockConfig(ModuleConfig): + tf_time_tolerance: float = 0.5 + reacquire_distance_m: float = 0.75 + reacquire_max_z_delta_m: float = 0.35 + reacquire_by_class: bool = True + preserve_identity_on_spatial_reacquire: bool = True + + +class SpatialTargetLockModule(Module): + """Keep a selected bbox locked as a world-frame target pose.""" + + config: SpatialTargetLockConfig + + detections: In[Detection2DArray] + selected_bbox: In[Detection2DArray] + lidar: In[PointCloud2] + camera_info: In[CameraInfo] + stop_movement: In[Bool] + clear_selection_request: In[Bool] + + locked_bbox: Out[Detection2DArray] + target_pose: Out[PoseStamped] + lock_status: Out[String] + + def __init__(self, **kwargs: Any) -> None: + super().__init__(**kwargs) + self._lock = threading.RLock() + self._state: LockState = "unselected" + self._target_id: str | None = None + self._stable_target_id: str | None = None + self._target_class_id: str | None = None + self._last_pose: PoseStamped | None = None + self._pose_source: PoseSource = "none" + self._last_seen_at: float | None = None + self._latest_lidar: PointCloud2 | None = None + self._latest_camera_info: CameraInfo | None = None + self._last_selected_detection: Any | None = None + self._last_header: Header | None = None + self._last_projection_block_reason: str | None = None + + @rpc + def start(self) -> None: + super().start() + logger.info( + "SpatialTargetLockModule: started " + f"tf_time_tolerance={self.config.tf_time_tolerance:.3f}s " + f"reacquire_distance_m={self.config.reacquire_distance_m:.3f} " + f"reacquire_max_z_delta_m={self.config.reacquire_max_z_delta_m:.3f} " + f"reacquire_by_class={self.config.reacquire_by_class} " + "preserve_identity_on_spatial_reacquire=" + f"{self.config.preserve_identity_on_spatial_reacquire}" + ) + self.register_disposable(Disposable(self.selected_bbox.subscribe(self._on_selected_bbox))) + self.register_disposable(Disposable(self.detections.subscribe(self._on_detections))) + self.register_disposable(Disposable(self.lidar.subscribe(self._on_lidar))) + self.register_disposable(Disposable(self.camera_info.subscribe(self._on_camera_info))) + self.register_disposable(Disposable(self.stop_movement.subscribe(self._on_stop_movement))) + self.register_disposable( + Disposable(self.clear_selection_request.subscribe(self._on_clear_selection_request)) + ) + self._publish_status(force=True) + + @rpc + def clear_lock(self) -> str: + self._clear_lock() + return "spatial target lock cleared" + + @rpc + def get_lock_state(self) -> dict[str, Any]: + with self._lock: + return { + "state": self._state, + "target_id": self._target_id, + "target_class_id": self._target_class_id, + "last_pose": self._pose_to_dict(self._last_pose), + "pose_source": self._pose_source, + "last_seen_at": self._last_seen_at, + } + + def _on_lidar(self, lidar: PointCloud2) -> None: + with self._lock: + self._latest_lidar = lidar + should_log = self._state == "waiting_for_pose" + self._try_project_waiting_selection() + if should_log: + logger.debug( + "SpatialTargetLockModule: received lidar while waiting " + f"frame_id={lidar.frame_id!r} ts={float(lidar.ts or 0.0):.3f}" + ) + + def _on_camera_info(self, camera_info: CameraInfo) -> None: + with self._lock: + self._latest_camera_info = camera_info + should_log = self._state == "waiting_for_pose" + self._try_project_waiting_selection() + if should_log: + logger.debug( + "SpatialTargetLockModule: received camera_info while waiting " + f"width={camera_info.width} height={camera_info.height}" + ) + + def _on_selected_bbox(self, selected_bbox: Detection2DArray) -> None: + with self._lock: + self._last_header = selected_bbox.header + + detection = self._extract_single_detection(selected_bbox) + if detection is None: + with self._lock: + has_active_lock = self._target_id is not None or self._last_pose is not None + if not has_active_lock: + logger.debug( + "SpatialTargetLockModule: received empty selected_bbox with no active lock; " + "publishing empty locked_bbox" + ) + self.locked_bbox.publish(self._empty_detection_array(selected_bbox.header)) + self._set_state("unselected", pose_source="none") + else: + logger.debug( + "SpatialTargetLockModule: received empty selected_bbox but keeping spatial " + "memory target active" + ) + return + + with self._lock: + has_frozen_pose = self._last_pose is not None + if has_frozen_pose: + logger.debug( + "SpatialTargetLockModule: ignoring selected_bbox update because target pose " + "is already frozen" + ) + return + + self._set_selected_target(detection, selected_bbox.header) + logger.info( + "SpatialTargetLockModule: selected bbox " + f"{self._detection_summary(detection)} " + f"header_frame={selected_bbox.header.frame_id!r} " + f"header_ts={self._header_timestamp(selected_bbox.header):.3f}" + ) + pose = self._project_detection_pose(detection) + if pose is None: + with self._lock: + last_pose = self._last_pose + self.locked_bbox.publish(self._single_detection_array(detection, selected_bbox.header)) + if last_pose is not None: + logger.info( + "SpatialTargetLockModule: selected bbox projection failed; " + f"using memory pose {self._pose_summary(last_pose)}" + ) + self._publish_memory(selected_bbox.header) + else: + logger.info( + "SpatialTargetLockModule: selected bbox projection failed; " + "waiting for lidar/camera_info/tf" + ) + self._set_state("waiting_for_pose", pose_source="none") + return + + self._accept_detection_pose( + detection, + selected_bbox.header, + pose, + pose_source="selected_bbox", + ) + + def _on_detections(self, detections: Detection2DArray) -> None: + with self._lock: + self._last_header = detections.header + target_id = self._target_id + last_pose = self._last_pose + + if target_id is None and last_pose is None: + self.locked_bbox.publish(self._empty_detection_array(detections.header)) + self._set_state("unselected", pose_source="none") + return + + # First pass: YOLO is only used to provide the initial selected bbox. Once a + # 3D target pose exists, keep publishing that frozen memory pose and do not + # spatially re-match detections. + self._publish_memory(detections.header) + + def _on_stop_movement(self, msg: Bool) -> None: + if bool(getattr(msg, "data", False)): + logger.info("SpatialTargetLockModule: stop_movement requested; clearing lock") + self._clear_lock() + + def _on_clear_selection_request(self, msg: Bool) -> None: + if bool(getattr(msg, "data", False)): + logger.info("SpatialTargetLockModule: clear_selection_request received; clearing lock") + self._clear_lock() + + def _try_project_waiting_selection(self) -> None: + with self._lock: + detection = self._last_selected_detection + header = self._last_header + should_try = detection is not None and self._last_pose is None + + if not should_try: + return + + pose = self._project_detection_pose(detection) + if pose is None: + logger.debug("SpatialTargetLockModule: waiting selection projection retry failed") + return + + logger.info( + "SpatialTargetLockModule: waiting selection projection recovered " + f"pose={self._pose_summary(pose)}" + ) + self._accept_detection_pose(detection, header, pose, pose_source="selected_bbox") + + def _set_selected_target(self, detection: Any, header: Header | None) -> None: + stable_id = self._stable_detection_id(detection) + with self._lock: + self._target_id = stable_id or self._detection_id(detection, fallback_index=0) + self._stable_target_id = stable_id + self._target_class_id = self._detection_class_id(detection) + self._last_selected_detection = detection + self._last_header = header + logger.debug( + "SpatialTargetLockModule: target identity set " + f"target_id={self._target_id!r} stable_id={stable_id!r} " + f"class_id={self._target_class_id!r}" + ) + + def _accept_detection_pose( + self, + detection: Any, + header: Header | None, + pose: PoseStamped, + pose_source: PoseSource, + *, + preserve_identity: bool = False, + ) -> None: + now = time.monotonic() + stable_id = self._stable_detection_id(detection) + with self._lock: + previous_target_id = self._target_id + previous_stable_target_id = self._stable_target_id + previous_target_class_id = self._target_class_id + if not preserve_identity: + self._target_id = stable_id or self._detection_id(detection, fallback_index=0) + self._stable_target_id = stable_id + self._target_class_id = self._detection_class_id(detection) + self._last_pose = pose + self._pose_source = pose_source + self._last_seen_at = now + self._last_selected_detection = detection + self._last_header = header + target_id = self._target_id + target_class_id = self._target_class_id + + self.locked_bbox.publish(self._single_detection_array(detection, header)) + self.target_pose.publish(pose) + if preserve_identity: + logger.info( + "SpatialTargetLockModule: spatial reacquire preserving selected identity " + f"target_id={previous_target_id!r} stable_id={previous_stable_target_id!r} " + f"class_id={previous_target_class_id!r} " + f"matched_detection_id={stable_id!r}" + ) + logger.info( + "SpatialTargetLockModule: accepted target pose " + f"source={pose_source} target_id={target_id!r} " + f"class_id={target_class_id!r} pose={self._pose_summary(pose)}" + ) + self._set_state("locked", pose_source=pose_source) + + def _publish_memory(self, header: Header | None) -> None: + with self._lock: + last_pose = self._last_pose + if last_pose is None: + logger.info( + "SpatialTargetLockModule: no memory pose available; waiting for pose" + ) + self.locked_bbox.publish(self._empty_detection_array(header)) + self._set_state("waiting_for_pose", pose_source="none") + return + + self.locked_bbox.publish(self._empty_detection_array(header)) + self.target_pose.publish(last_pose) + logger.debug( + "SpatialTargetLockModule: publishing memory target pose " + f"{self._pose_summary(last_pose)}" + ) + self._set_state("using_memory", pose_source="memory") + + def _find_spatial_reacquire( + self, + detections: Detection2DArray, + target_class_id: str | None, + last_pose: PoseStamped | None, + ) -> tuple[Any, PoseStamped] | None: + if last_pose is None or not detections.detections: + if last_pose is not None: + logger.debug( + "SpatialTargetLockModule: cannot spatially reacquire; " + "detections are empty" + ) + return None + + candidates = list(detections.detections) + original_count = len(candidates) + if self.config.reacquire_by_class and target_class_id is not None: + class_matches = [ + detection + for detection in candidates + if self._detection_class_id(detection) == target_class_id + ] + if class_matches: + candidates = class_matches + logger.debug( + "SpatialTargetLockModule: spatial reacquire candidates " + f"original_count={original_count} filtered_count={len(candidates)} " + f"target_class_id={target_class_id!r}" + ) + + best: tuple[float, Any, PoseStamped] | None = None + projected_count = 0 + rejected_by_distance = 0 + rejected_by_z = 0 + for detection in candidates: + pose = self._project_detection_pose(detection) + if pose is None: + continue + projected_count += 1 + z_delta = abs(float(pose.position.z) - float(last_pose.position.z)) + if z_delta > self.config.reacquire_max_z_delta_m: + rejected_by_z += 1 + logger.debug( + "SpatialTargetLockModule: spatial reacquire rejected by z delta " + f"z_delta={z_delta:.3f} gate_m={self.config.reacquire_max_z_delta_m:.3f} " + f"{self._detection_summary(detection)} pose={self._pose_summary(pose)} " + f"memory_pose={self._pose_summary(last_pose)}" + ) + continue + distance = self._xyz_distance(pose.position, last_pose.position) + if distance > self.config.reacquire_distance_m: + rejected_by_distance += 1 + continue + if best is None or distance < best[0]: + best = (distance, detection, pose) + + if best is None: + logger.debug( + "SpatialTargetLockModule: spatial reacquire failed " + f"candidates={len(candidates)} projected={projected_count} " + f"rejected_by_distance={rejected_by_distance} " + f"rejected_by_z={rejected_by_z} " + f"distance_gate_m={self.config.reacquire_distance_m:.3f} " + f"z_gate_m={self.config.reacquire_max_z_delta_m:.3f}", + ) + return None + logger.debug( + "SpatialTargetLockModule: spatial reacquire selected " + f"distance_to_memory={best[0]:.3f} " + f"{self._detection_summary(best[1])} pose={self._pose_summary(best[2])}" + ) + return best[1], best[2] + + def _project_detection_pose(self, detection: Any) -> PoseStamped | None: + with self._lock: + lidar = self._latest_lidar + camera_info = self._latest_camera_info + + if lidar is None or camera_info is None: + missing = [] + if lidar is None: + missing.append("lidar") + if camera_info is None: + missing.append("camera_info") + self._set_projection_block_reason("missing_" + "_and_".join(missing)) + return None + + x1, y1, x2, y2 = BBoxSelectionModule._bbox_corners(detection) + class_id = self._detection_class_id(detection) + det2d = Detection2DBBox( + bbox=(x1, y1, x2, y2), + track_id=_safe_track_id(self._stable_detection_id(detection)), + class_id=_safe_track_id(class_id), + confidence=self._detection_confidence(detection), + name=class_id or "", + ts=float(lidar.ts or 0.0), + image=None, # type: ignore[arg-type] + ) + + ts = float(lidar.ts or 0.0) + try: + world_to_optical = self.tf.get( + "camera_optical", + lidar.frame_id, + ts, + time_tolerance=self.config.tf_time_tolerance, + ) + except RuntimeError as exc: + self._set_projection_block_reason( + f"missing_tf camera_optical->{lidar.frame_id!r}: {exc}" + ) + return None + if world_to_optical is None: + self._set_projection_block_reason( + f"missing_tf camera_optical->{lidar.frame_id!r}" + ) + return None + + lcm_camera_info = DimosLcmCameraInfo() + lcm_camera_info.K = camera_info.K + lcm_camera_info.width = camera_info.width + lcm_camera_info.height = camera_info.height + + detection_3d = Detection3DPC.from_2d( + det=det2d, + world_pointcloud=lidar, + camera_info=lcm_camera_info, + world_to_optical_transform=world_to_optical, + filters=[], + ) + if detection_3d is None: + self._set_projection_block_reason( + "no_3d_points_in_bbox " + f"bbox=({x1:.1f},{y1:.1f},{x2:.1f},{y2:.1f}) " + f"lidar_frame={lidar.frame_id!r}" + ) + return None + + self._set_projection_block_reason(None) + center = detection_3d.center + return PoseStamped( + ts=float(lidar.ts or time.time()), + frame_id=lidar.frame_id or _WORLD_FRAME_ID, + position=Vector3(center.x, center.y, center.z), + orientation=(0.0, 0.0, 0.0, 1.0), + ) + + def _clear_lock(self) -> None: + with self._lock: + header = self._last_header + target_id = self._target_id + self._target_id = None + self._stable_target_id = None + self._target_class_id = None + self._last_pose = None + self._pose_source = "none" + self._last_seen_at = None + self._last_selected_detection = None + self._last_projection_block_reason = None + logger.info(f"SpatialTargetLockModule: lock cleared previous_target_id={target_id!r}") + self.locked_bbox.publish(self._empty_detection_array(header)) + self._set_state("unselected", pose_source="none") + + def _set_state(self, state: LockState, pose_source: PoseSource) -> None: + with self._lock: + old_state = self._state + old_source = self._pose_source + self._state = state + self._pose_source = pose_source + target_id = self._target_id + last_pose = self._last_pose + status_changed = old_state != state or old_source != pose_source + is_memory_refresh = state == "using_memory" and old_state in { + "locked", + "using_memory", + } + if status_changed and not is_memory_refresh: + logger.info( + "SpatialTargetLockModule: state changed " + f"{old_state}/{old_source} -> {state}/{pose_source} " + f"target_id={target_id!r} pose={self._pose_summary(last_pose)}" + ) + self._publish_status(force=status_changed) + + def _set_projection_block_reason(self, reason: str | None) -> None: + with self._lock: + previous = self._last_projection_block_reason + if previous == reason: + return + self._last_projection_block_reason = reason + if reason is None: + if previous is not None: + logger.info( + "SpatialTargetLockModule: projection recovered " + f"previous_reason={previous}" + ) + return + logger.info(f"SpatialTargetLockModule: projection blocked reason={reason}") + + def _publish_status(self, force: bool = False) -> None: + with self._lock: + payload = { + "state": self._state, + "pose_source": self._pose_source, + "target_id": self._target_id, + "target_class_id": self._target_class_id, + "last_pose": self._pose_to_dict(self._last_pose), + "last_seen_at": self._last_seen_at, + } + if force or self._state in ("unselected", "using_memory", "waiting_for_pose"): + self.lock_status.publish(String(json.dumps(payload, ensure_ascii=True))) + + @staticmethod + def _extract_single_detection(detections: Detection2DArray | None) -> Any | None: + if detections is None or not detections.detections: + return None + return detections.detections[0] + + @staticmethod + def _single_detection_array(detection: Any, header: Header | None) -> Detection2DArray: + safe_header = header if header is not None else Header(time.time(), _DEFAULT_FRAME_ID) + return Detection2DArray(detections_length=1, header=safe_header, detections=[detection]) + + @staticmethod + def _empty_detection_array(header: Header | None) -> Detection2DArray: + safe_header = header if header is not None else Header(time.time(), _DEFAULT_FRAME_ID) + return Detection2DArray(detections_length=0, header=safe_header, detections=[]) + + @classmethod + def _find_by_stable_id( + cls, detections: Detection2DArray, stable_target_id: str + ) -> Any | None: + for detection in detections.detections: + if cls._stable_detection_id(detection) == stable_target_id: + return detection + return None + + @staticmethod + def _stable_detection_id(detection: Any) -> str | None: + detection_id = str(getattr(detection, "id", "")).strip() + if not detection_id or detection_id == "-1": + return None + return detection_id + + @classmethod + def _detection_id(cls, detection: Any, fallback_index: int) -> str: + return cls._stable_detection_id(detection) or str(fallback_index) + + @staticmethod + def _detection_class_id(detection: Any) -> str | None: + results = getattr(detection, "results", []) + if not results: + return None + hypothesis = results[0].hypothesis + class_id = getattr(hypothesis, "class_id", None) + return str(class_id) if class_id is not None else None + + @staticmethod + def _detection_confidence(detection: Any) -> float: + results = getattr(detection, "results", []) + if not results: + return 1.0 + hypothesis = results[0].hypothesis + return float(getattr(hypothesis, "score", 1.0) or 1.0) + + @classmethod + def _detection_summary(cls, detection: Any) -> str: + x1, y1, x2, y2 = BBoxSelectionModule._bbox_corners(detection) + return ( + f"id={cls._stable_detection_id(detection)!r} " + f"class_id={cls._detection_class_id(detection)!r} " + f"score={cls._detection_confidence(detection):.3f} " + f"bbox=({x1:.1f},{y1:.1f},{x2:.1f},{y2:.1f})" + ) + + @staticmethod + def _xy_distance(a: Vector3, b: Vector3) -> float: + dx = float(a.x) - float(b.x) + dy = float(a.y) - float(b.y) + return math.sqrt(dx * dx + dy * dy) + + @staticmethod + def _xyz_distance(a: Vector3, b: Vector3) -> float: + dx = float(a.x) - float(b.x) + dy = float(a.y) - float(b.y) + dz = float(a.z) - float(b.z) + return math.sqrt(dx * dx + dy * dy + dz * dz) + + @staticmethod + def _pose_to_dict(pose: PoseStamped | None) -> dict[str, Any] | None: + if pose is None: + return None + return { + "frame_id": pose.frame_id, + "x": pose.position.x, + "y": pose.position.y, + "z": pose.position.z, + "ts": pose.ts, + } + + @classmethod + def _pose_summary(cls, pose: PoseStamped | None) -> str: + payload = cls._pose_to_dict(pose) + if payload is None: + return "None" + return ( + f"frame={payload['frame_id']!r} " + f"x={float(payload['x']):.3f} " + f"y={float(payload['y']):.3f} " + f"z={float(payload['z']):.3f} " + f"ts={float(payload['ts'] or 0.0):.3f}" + ) + + @staticmethod + def _header_timestamp(header: Header | None) -> float: + if header is None: + return 0.0 + try: + return float(header.timestamp) + except (AttributeError, TypeError, ValueError): + pass + try: + return float(header.ts) + except (AttributeError, TypeError, ValueError): + pass + stamp = getattr(header, "stamp", None) + if stamp is None: + return 0.0 + sec = float(getattr(stamp, "sec", 0.0) or 0.0) + nsec = float(getattr(stamp, "nsec", 0.0) or 0.0) + return sec + nsec / 1_000_000_000.0 + + +__all__ = [ + "SpatialTargetLockConfig", + "SpatialTargetLockModule", +] diff --git a/dimos/robot/custom/tasks/bbox_distance_behavior_module.py b/dimos/robot/custom/tasks/bbox_distance_behavior_module.py index f81322984d..45fb9f6324 100644 --- a/dimos/robot/custom/tasks/bbox_distance_behavior_module.py +++ b/dimos/robot/custom/tasks/bbox_distance_behavior_module.py @@ -365,9 +365,13 @@ def _estimate_3d_distance( # 定义基于 TF + 世界坐标系点云的 3D 距 ) # 2. 从 TF 获取 world→camera_optical 变换 ts = float(lidar.ts or 0.0) # 用 lidar 时间戳对齐 TF - world_to_optical = self.tf.get( - "camera_optical", lidar.frame_id, ts, time_tolerance=self.config.tf_time_tolerance - ) # 查询 world→camera_optical 变换 + try: + world_to_optical = self.tf.get( + "camera_optical", lidar.frame_id, ts, time_tolerance=self.config.tf_time_tolerance + ) # 查询 world→camera_optical 变换 + except RuntimeError as exc: + logger.debug(f"BBoxDistanceBehaviorModule: TF unavailable: {exc}") + return None if world_to_optical is None: # 如果 TF 暂时不可用 return None # 等待下一帧 # 3. 包装 LCM CameraInfo @@ -386,9 +390,13 @@ def _estimate_3d_distance( # 定义基于 TF + 世界坐标系点云的 3D 距 if detection_3d is None: # 如果 bbox 内没有有效点 return None # 等待下一帧 # 5. 获取机器人当前位置(world 坐标系) - robot_tf = self.tf.get( - "world", "base_link", time_tolerance=self.config.tf_time_tolerance - ) # 查询机器人位置 + try: + robot_tf = self.tf.get( + "world", "base_link", time_tolerance=self.config.tf_time_tolerance + ) # 查询机器人位置 + except RuntimeError as exc: + logger.debug(f"BBoxDistanceBehaviorModule: robot TF unavailable: {exc}") + return None if robot_tf is None: # 如果机器人 TF 暂时不可用 return None # 等待下一帧 # 6. 计算机器人与检测目标中心的 2D 欧氏距离 diff --git a/dimos/robot/custom/tasks/target_standoff_behavior_module.py b/dimos/robot/custom/tasks/target_standoff_behavior_module.py new file mode 100644 index 0000000000..10ebfa2573 --- /dev/null +++ b/dimos/robot/custom/tasks/target_standoff_behavior_module.py @@ -0,0 +1,585 @@ +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +import json +import math +import threading +import time +from typing import Any, Literal + +from dimos_lcm.std_msgs import Bool, String # type: ignore[import-untyped] +from reactivex.disposable import Disposable + +from dimos.constants import DEFAULT_THREAD_JOIN_TIMEOUT +from dimos.core.core import rpc +from dimos.core.module import Module, ModuleConfig +from dimos.core.stream import In, Out +from dimos.msgs.geometry_msgs.PoseStamped import PoseStamped +from dimos.msgs.geometry_msgs.Quaternion import Quaternion +from dimos.msgs.geometry_msgs.Transform import Transform +from dimos.msgs.geometry_msgs.Vector3 import Vector3 +from dimos.navigation.replanning_a_star.module_spec import ReplanningAStarPlannerSpec +from dimos.utils.logging_config import setup_logger + +logger = setup_logger() + +BehaviorState = Literal[ + "idle", + "navigating_near", + "dwelling_near", + "navigating_far", + "dwelling_far", + "returning_near", + "done", + "failed", +] +GoalName = Literal["near", "far", "return_near"] + +_WORLD_FRAME_ID = "world" + + +class TargetStandoffBehaviorConfig(ModuleConfig): + command_hz: float = 5.0 + near_distance: float = 0.5 + far_distance: float = 3.0 + near_dwell_duration_sec: float = 10.0 + far_dwell_duration_sec: float = 10.0 + countdown_log_interval_sec: float = 2.0 + goal_timeout_sec: float = 45.0 + tf_time_tolerance: float = 0.5 + restart_target_distance_m: float = 0.2 + + +class TargetStandoffBehaviorModule(Module): + """Compute near/far target waypoints and delegate motion to the path planner.""" + + config: TargetStandoffBehaviorConfig + + target_pose: In[PoseStamped] + teleop_active: In[Bool] + + clear_selection_request: Out[Bool] + behavior_status: Out[String] + + _planner: ReplanningAStarPlannerSpec | None + + def __init__(self, **kwargs: Any) -> None: + super().__init__(**kwargs) + self._lock = threading.RLock() + self._stop_event = threading.Event() + self._thread: threading.Thread | None = None + self._state: BehaviorState = "idle" + self._state_started_at = time.monotonic() + self._target_pose: PoseStamped | None = None + self._near_pose: PoseStamped | None = None + self._far_pose: PoseStamped | None = None + self._current_goal_name: GoalName | None = None + self._current_goal_pose: PoseStamped | None = None + self._goal_started_at: float | None = None + self._last_countdown_log_at = 0.0 + self._last_block_reason: str | None = None + self._last_geometry_block_reason: str | None = None + self._planner = None + + @rpc + def start(self) -> None: + super().start() + logger.info( + "TargetStandoffBehaviorModule: started " + f"command_hz={self.config.command_hz:.1f} " + f"near_distance={self.config.near_distance:.3f} " + f"far_distance={self.config.far_distance:.3f} " + f"near_dwell_duration_sec={self.config.near_dwell_duration_sec:.3f} " + f"far_dwell_duration_sec={self.config.far_dwell_duration_sec:.3f} " + f"countdown_log_interval_sec={self.config.countdown_log_interval_sec:.3f} " + f"goal_timeout_sec={self.config.goal_timeout_sec:.3f} " + f"tf_time_tolerance={self.config.tf_time_tolerance:.3f}s" + ) + self.register_disposable(Disposable(self.target_pose.subscribe(self._on_target_pose))) + self.register_disposable(Disposable(self.teleop_active.subscribe(self._on_teleop_active))) + self._stop_event.clear() + self._thread = threading.Thread( + target=self._behavior_loop, + name="TargetStandoffBehaviorModule", + daemon=True, + ) + self._thread.start() + self._publish_status("idle") + + @rpc + def stop(self) -> None: + logger.info("TargetStandoffBehaviorModule: stopping; cancelling planner goal") + self._stop_event.set() + self._cancel_planner_goal() + if self._thread is not None and self._thread.is_alive(): + self._thread.join(DEFAULT_THREAD_JOIN_TIMEOUT) + super().stop() + + @rpc + def start_behavior(self) -> str: + with self._lock: + target_pose = self._target_pose + if target_pose is None: + return "target standoff behavior has no target pose yet" + if self._start_sequence(target_pose): + return "target standoff behavior started" + return "target standoff behavior could not start" + + @rpc + def stop_behavior(self) -> str: + with self._lock: + previous_state = self._state + self._reset_sequence_locked(state="idle") + self._cancel_planner_goal() + self.clear_selection_request.publish(Bool(data=True)) + logger.info( + "TargetStandoffBehaviorModule: stop_behavior requested " + f"state_before={previous_state}" + ) + self._publish_status("idle") + return "target standoff behavior stopped" + + def _on_target_pose(self, target_pose: PoseStamped) -> None: + with self._lock: + state = self._state + previous_target = self._target_pose + self._target_pose = target_pose + + if state == "idle": + self._start_sequence(target_pose) + return + + if state in ("done", "failed") and self._is_new_target(target_pose, previous_target): + logger.info( + "TargetStandoffBehaviorModule: received new target after terminal state; " + f"restarting pose={self._pose_summary(target_pose)}" + ) + self._start_sequence(target_pose) + return + + logger.debug( + "TargetStandoffBehaviorModule: ignoring target_pose update during active sequence " + f"state={state} pose={self._pose_summary(target_pose)}" + ) + + def _on_teleop_active(self, msg: Any) -> None: + if not bool(getattr(msg, "data", False)): + return + with self._lock: + previous_state = self._state + if previous_state == "idle": + return + self._reset_sequence_locked(state="idle") + self._cancel_planner_goal() + self.clear_selection_request.publish(Bool(data=True)) + logger.info( + "TargetStandoffBehaviorModule: interrupted by teleop " + f"state_before={previous_state}" + ) + self._publish_status("idle") + + def _start_sequence(self, target_pose: PoseStamped) -> bool: + waypoints = self._compute_waypoints(target_pose) + if waypoints is None: + self._publish_status("idle", target_source="blocked") + return False + + target, near, far = waypoints + with self._lock: + self._target_pose = target + self._near_pose = near + self._far_pose = far + self._current_goal_name = None + self._current_goal_pose = None + self._goal_started_at = None + + logger.info( + "TargetStandoffBehaviorModule: waypoints computed " + f"target={self._pose_summary(target)} " + f"near={self._pose_summary(near)} " + f"far={self._pose_summary(far)}" + ) + return self._dispatch_goal("near", near, "navigating_near") + + def _behavior_loop(self) -> None: + period_sec = 1.0 / max(self.config.command_hz, 1.0) + while not self._stop_event.wait(period_sec): + self._tick() + + def _tick(self) -> None: + with self._lock: + state = self._state + state_started_at = self._state_started_at + near_pose = self._near_pose + far_pose = self._far_pose + current_goal_name = self._current_goal_name + goal_started_at = self._goal_started_at + + if state in ("idle", "done", "failed"): + self._set_block_reason(None) + return + + planner = self._planner + if planner is None: + self._fail_sequence("missing_planner_spec") + return + + now = time.monotonic() + if state in ("navigating_near", "navigating_far", "returning_near"): + if self._planner_goal_reached(planner): + if state == "navigating_near": + self._transition("dwelling_near", now, reason="near_goal_reached") + return + if state == "navigating_far": + self._transition("dwelling_far", now, reason="far_goal_reached") + return + self._complete_sequence() + return + if ( + goal_started_at is not None + and now - goal_started_at > self.config.goal_timeout_sec + ): + self._fail_sequence(f"{current_goal_name or 'unknown'}_goal_timeout") + return + self._publish_status(state, elapsed_sec=now - state_started_at) + return + + if state == "dwelling_near": + elapsed = now - state_started_at + if elapsed < self.config.near_dwell_duration_sec: + self._log_countdown( + state, + self.config.near_dwell_duration_sec, + elapsed, + now, + ) + self._publish_status(state, elapsed_sec=elapsed) + return + if far_pose is None: + self._fail_sequence("missing_far_pose") + return + self._dispatch_goal("far", far_pose, "navigating_far") + return + + if state == "dwelling_far": + elapsed = now - state_started_at + if elapsed < self.config.far_dwell_duration_sec: + self._log_countdown( + state, + self.config.far_dwell_duration_sec, + elapsed, + now, + ) + self._publish_status(state, elapsed_sec=elapsed) + return + if near_pose is None: + self._fail_sequence("missing_near_pose") + return + self._dispatch_goal("return_near", near_pose, "returning_near") + + def _dispatch_goal( + self, + goal_name: GoalName, + goal_pose: PoseStamped, + next_state: BehaviorState, + ) -> bool: + planner = self._planner + if planner is None: + self._fail_sequence("missing_planner_spec") + return False + + accepted = planner.set_goal(goal_pose) + if not accepted: + self._fail_sequence(f"{goal_name}_goal_rejected") + return False + + now = time.monotonic() + with self._lock: + old_state = self._state + self._state = next_state + self._state_started_at = now + self._current_goal_name = goal_name + self._current_goal_pose = goal_pose + self._goal_started_at = now + self._last_countdown_log_at = 0.0 + logger.info( + "TargetStandoffBehaviorModule: navigation goal set " + f"name={goal_name} state={old_state}->{next_state} " + f"goal={self._pose_summary(goal_pose)}" + ) + self._publish_status(next_state, goal_name=goal_name) + return True + + def _compute_waypoints( + self, + target_pose: PoseStamped, + ) -> tuple[PoseStamped, PoseStamped, PoseStamped] | None: + if target_pose.frame_id and target_pose.frame_id != _WORLD_FRAME_ID: + self._set_geometry_block_reason(f"target_frame_is_{target_pose.frame_id!r}") + return None + robot_tf = self._get_robot_transform() + if robot_tf is None: + self._set_geometry_block_reason("missing_world_to_base_link_tf") + return None + + target_x = float(target_pose.position.x) + target_y = float(target_pose.position.y) + robot_x = float(robot_tf.translation.x) + robot_y = float(robot_tf.translation.y) + ux, uy = self._unit_from_target_to_robot(target_x, target_y, robot_x, robot_y) + self._set_geometry_block_reason(None) + + target = self._make_pose(target_x, target_y, 0.0, yaw=robot_tf.rotation.to_euler().yaw) + near = self._make_nav_pose_facing_target( + target_x + ux * self.config.near_distance, + target_y + uy * self.config.near_distance, + target_x, + target_y, + ) + far = self._make_nav_pose_facing_target( + target_x + ux * self.config.far_distance, + target_y + uy * self.config.far_distance, + target_x, + target_y, + ) + return target, near, far + + def _make_nav_pose_facing_target( + self, + x: float, + y: float, + target_x: float, + target_y: float, + ) -> PoseStamped: + yaw = math.atan2(target_y - y, target_x - x) + return self._make_pose(x, y, 0.0, yaw=yaw) + + @staticmethod + def _make_pose(x: float, y: float, z: float, *, yaw: float) -> PoseStamped: + return PoseStamped( + ts=time.time(), + frame_id=_WORLD_FRAME_ID, + position=Vector3(x, y, z), + orientation=Quaternion.from_euler(Vector3(0.0, 0.0, yaw)), + ) + + def _get_robot_transform(self) -> Transform | None: + try: + return self.tf.get( + _WORLD_FRAME_ID, + "base_link", + time_tolerance=self.config.tf_time_tolerance, + ) + except RuntimeError as exc: + logger.debug(f"TargetStandoffBehaviorModule: robot TF lookup failed: {exc}") + return None + + def _complete_sequence(self) -> None: + with self._lock: + target_pose = self._target_pose + near_pose = self._near_pose + far_pose = self._far_pose + self._state = "done" + self._state_started_at = time.monotonic() + self._current_goal_name = None + self._current_goal_pose = None + self._goal_started_at = None + self._last_countdown_log_at = 0.0 + logger.info( + "TargetStandoffBehaviorModule: behavior complete " + f"target={self._pose_summary(target_pose)} " + f"near={self._pose_summary(near_pose)} " + f"far={self._pose_summary(far_pose)}" + ) + self.clear_selection_request.publish(Bool(data=True)) + self._publish_status("done") + + def _fail_sequence(self, reason: str) -> None: + with self._lock: + previous_state = self._state + self._state = "failed" + self._state_started_at = time.monotonic() + self._current_goal_name = None + self._current_goal_pose = None + self._goal_started_at = None + self._cancel_planner_goal() + self.clear_selection_request.publish(Bool(data=True)) + self._set_block_reason(reason) + logger.info( + "TargetStandoffBehaviorModule: behavior failed " + f"state_before={previous_state} reason={reason}" + ) + self._publish_status("failed", target_source=reason) + + def _reset_sequence_locked(self, *, state: BehaviorState) -> None: + self._state = state + self._state_started_at = time.monotonic() + self._target_pose = None + self._near_pose = None + self._far_pose = None + self._current_goal_name = None + self._current_goal_pose = None + self._goal_started_at = None + self._last_countdown_log_at = 0.0 + + def _cancel_planner_goal(self) -> None: + if self._planner is not None: + self._planner.cancel_goal() + + def _planner_goal_reached(self, planner: ReplanningAStarPlannerSpec) -> bool: + try: + return planner.is_goal_reached() + except RuntimeError as exc: + self._set_block_reason(f"planner_goal_check_failed:{exc}") + return False + + def _set_block_reason(self, reason: str | None) -> None: + if reason == self._last_block_reason: + return + self._last_block_reason = reason + if reason is not None: + logger.info(f"TargetStandoffBehaviorModule: blocked reason={reason}") + + def _set_geometry_block_reason(self, reason: str | None) -> None: + if reason == self._last_geometry_block_reason: + return + previous = self._last_geometry_block_reason + self._last_geometry_block_reason = reason + if reason is None: + if previous is not None: + logger.info( + "TargetStandoffBehaviorModule: target geometry recovered " + f"previous_reason={previous}" + ) + return + logger.info(f"TargetStandoffBehaviorModule: target geometry blocked reason={reason}") + + def _transition( + self, + state: BehaviorState, + started_at: float, + *, + reason: str, + ) -> None: + with self._lock: + old_state = self._state + self._state = state + self._state_started_at = started_at + self._current_goal_name = None + self._current_goal_pose = None + self._goal_started_at = None + self._last_countdown_log_at = 0.0 + logger.info( + "TargetStandoffBehaviorModule: action transition " + f"completed={old_state} entered={state} reason={reason}" + ) + self._publish_status(state) + + def _log_countdown( + self, + state: BehaviorState, + duration_sec: float, + elapsed_sec: float, + now: float, + ) -> None: + with self._lock: + last_logged_at = self._last_countdown_log_at + if ( + last_logged_at > 0.0 + and now - last_logged_at < self.config.countdown_log_interval_sec + ): + return + self._last_countdown_log_at = now + remaining_sec = max(duration_sec - elapsed_sec, 0.0) + logger.info( + "TargetStandoffBehaviorModule: dwell countdown " + f"state={state} elapsed_sec={elapsed_sec:.1f} remaining_sec={remaining_sec:.1f}" + ) + + def _publish_status( + self, + state: BehaviorState, + *, + elapsed_sec: float | None = None, + goal_name: str | None = None, + target_source: str = "target_pose", + ) -> None: + with self._lock: + payload: dict[str, Any] = { + "state": state, + "target_source": target_source, + "elapsed_sec": 0.0 if elapsed_sec is None else elapsed_sec, + "goal_name": goal_name or self._current_goal_name, + "target_pose": self._pose_to_dict(self._target_pose), + "near_pose": self._pose_to_dict(self._near_pose), + "far_pose": self._pose_to_dict(self._far_pose), + "current_goal_pose": self._pose_to_dict(self._current_goal_pose), + } + self.behavior_status.publish(String(json.dumps(payload, ensure_ascii=True))) + + @staticmethod + def _unit_from_target_to_robot( + target_x: float, + target_y: float, + robot_x: float, + robot_y: float, + ) -> tuple[float, float]: + dx = robot_x - target_x + dy = robot_y - target_y + norm = math.sqrt(dx * dx + dy * dy) + if norm < 1e-6: + return (-1.0, 0.0) + return dx / norm, dy / norm + + def _is_new_target( + self, + target_pose: PoseStamped, + previous_target: PoseStamped | None, + ) -> bool: + if previous_target is None: + return True + dx = float(target_pose.position.x) - float(previous_target.position.x) + dy = float(target_pose.position.y) - float(previous_target.position.y) + return math.sqrt(dx * dx + dy * dy) > self.config.restart_target_distance_m + + @staticmethod + def _pose_to_dict(pose: PoseStamped | None) -> dict[str, Any] | None: + if pose is None: + return None + return { + "frame_id": pose.frame_id, + "x": float(pose.position.x), + "y": float(pose.position.y), + "z": float(pose.position.z), + "ts": float(pose.ts or 0.0), + } + + @staticmethod + def _pose_summary(pose: PoseStamped | None) -> str: + if pose is None: + return "None" + return ( + f"frame={pose.frame_id!r} " + f"x={float(pose.position.x):.3f} " + f"y={float(pose.position.y):.3f} " + f"z={float(pose.position.z):.3f} " + f"ts={float(pose.ts or 0.0):.3f}" + ) + +__all__ = [ + "TargetStandoffBehaviorConfig", + "TargetStandoffBehaviorModule", +] diff --git a/dimos/robot/custom/tests/test_spatial_target_lock_module.py b/dimos/robot/custom/tests/test_spatial_target_lock_module.py new file mode 100644 index 0000000000..233850468c --- /dev/null +++ b/dimos/robot/custom/tests/test_spatial_target_lock_module.py @@ -0,0 +1,239 @@ +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from collections.abc import Callable +from typing import Any + +from dimos_lcm.std_msgs import Bool +from dimos_lcm.vision_msgs import ( + BoundingBox2D, + Detection2D, + ObjectHypothesis, + ObjectHypothesisWithPose, + Point2D, + Pose2D, +) +import pytest + +from dimos.msgs.geometry_msgs.PoseStamped import PoseStamped +from dimos.msgs.geometry_msgs.Vector3 import Vector3 +from dimos.msgs.std_msgs.Header import Header +from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray +from dimos.protocol.rpc.spec import RPCSpec +from dimos.robot.custom.modules.spatial_target_lock_module import SpatialTargetLockModule + + +class _NoopRPC(RPCSpec): + def __init__( + self, + *, + rpc_timeouts: dict[str, float] | None = None, + default_rpc_timeout: float = 120.0, + ) -> None: + self.rpc_timeouts = {} if rpc_timeouts is None else dict(rpc_timeouts) + self.default_rpc_timeout = default_rpc_timeout + + def serve_module_rpc(self, module: Any, name: str | None = None) -> None: + pass + + def serve_rpc(self, f: Callable[..., Any], name: str) -> Callable[[], None]: + return lambda: None + + def call( + self, + name: str, + arguments: tuple[list[Any], dict[str, Any]], + cb: Callable[[Any], None] | None, + ) -> Callable[[], None] | None: + return (lambda: None) if cb is not None else None + + def call_nowait(self, name: str, arguments: tuple[list[Any], dict[str, Any]]) -> None: + pass + + def start(self) -> None: + pass + + def stop(self) -> None: + pass + + +@pytest.fixture() +def module() -> SpatialTargetLockModule: + instance = SpatialTargetLockModule(rpc_transport=_NoopRPC, reacquire_distance_m=0.5) + try: + yield instance + finally: + instance.stop() + + +def _make_detection( + detection_id: str, + class_id: str, + x1: float, + y1: float, + x2: float, + y2: float, +) -> Detection2D: + center_x = (x1 + x2) / 2.0 + center_y = (y1 + y2) / 2.0 + return Detection2D( + id=detection_id, + results_length=1, + header=Header(123.0, "camera_optical"), + bbox=BoundingBox2D( + center=Pose2D(position=Point2D(x=center_x, y=center_y), theta=0.0), + size_x=x2 - x1, + size_y=y2 - y1, + ), + results=[ + ObjectHypothesisWithPose(hypothesis=ObjectHypothesis(class_id=class_id, score=0.9)) + ], + ) + + +def _make_array(*detections: Detection2D) -> Detection2DArray: + return Detection2DArray( + detections_length=len(detections), + header=Header(123.0, "camera_optical"), + detections=list(detections), + ) + + +def _pose(x: float, y: float = 0.0, z: float = 0.0) -> PoseStamped: + return PoseStamped( + ts=123.0, + frame_id="world", + position=Vector3(x, y, z), + orientation=(0.0, 0.0, 0.0, 1.0), + ) + + +def test_selected_bbox_projects_to_locked_target_pose( + module: SpatialTargetLockModule, + monkeypatch: pytest.MonkeyPatch, +) -> None: + target_messages: list[PoseStamped] = [] + locked_messages: list[Any] = [] + module.target_pose.subscribe(target_messages.append) + module.locked_bbox.subscribe(locked_messages.append) + monkeypatch.setattr(module, "_project_detection_pose", lambda _detection: _pose(1.0)) + + module._on_selected_bbox(_make_array(_make_detection("target", "person", 10, 10, 40, 40))) + + assert module.get_lock_state()["state"] == "locked" + assert target_messages[-1].position.x == pytest.approx(1.0) + assert locked_messages[-1].detections_length == 1 + + +def test_empty_selected_bbox_after_lock_keeps_spatial_memory( + module: SpatialTargetLockModule, + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.setattr(module, "_project_detection_pose", lambda _detection: _pose(1.0)) + + module._on_selected_bbox(_make_array(_make_detection("target", "person", 10, 10, 40, 40))) + module._on_selected_bbox(_make_array()) + + state = module.get_lock_state() + assert state["state"] == "locked" + assert state["last_pose"]["x"] == pytest.approx(1.0) + + +def test_empty_detections_publish_memory_pose( + module: SpatialTargetLockModule, + monkeypatch: pytest.MonkeyPatch, +) -> None: + target_messages: list[PoseStamped] = [] + locked_messages: list[Any] = [] + module.target_pose.subscribe(target_messages.append) + module.locked_bbox.subscribe(locked_messages.append) + monkeypatch.setattr(module, "_project_detection_pose", lambda _detection: _pose(1.0)) + + module._on_selected_bbox(_make_array(_make_detection("target", "person", 10, 10, 40, 40))) + module._on_detections(_make_array()) + + assert module.get_lock_state()["state"] == "using_memory" + assert target_messages[-1].position.x == pytest.approx(1.0) + assert locked_messages[-1].detections_length == 0 + + +def test_detections_after_lock_keep_initial_memory_pose( + module: SpatialTargetLockModule, + monkeypatch: pytest.MonkeyPatch, +) -> None: + poses = { + "target": _pose(1.0), + "new-id": _pose(1.2), + "far": _pose(4.0), + } + + def _project(detection: Detection2D) -> PoseStamped: + return poses[detection.id] + + monkeypatch.setattr(module, "_project_detection_pose", _project) + + module._on_selected_bbox(_make_array(_make_detection("target", "person", 10, 10, 40, 40))) + module._on_detections( + _make_array( + _make_detection("far", "person", 100, 100, 130, 130), + _make_detection("new-id", "person", 12, 12, 42, 42), + ) + ) + + state = module.get_lock_state() + assert state["state"] == "using_memory" + assert state["target_id"] == "target" + assert state["last_pose"]["x"] == pytest.approx(1.0) + + +def test_spatial_reacquire_rejects_candidate_with_large_z_jump( + module: SpatialTargetLockModule, + monkeypatch: pytest.MonkeyPatch, +) -> None: + poses = { + "target": _pose(1.0, z=0.6), + "ground": _pose(1.1, z=0.05), + } + + def _project(detection: Detection2D) -> PoseStamped: + return poses[detection.id] + + monkeypatch.setattr(module, "_project_detection_pose", _project) + + module._on_selected_bbox(_make_array(_make_detection("target", "person", 10, 10, 40, 40))) + module._on_detections(_make_array(_make_detection("ground", "person", 12, 12, 42, 42))) + + state = module.get_lock_state() + assert state["state"] == "using_memory" + assert state["target_id"] == "target" + assert state["last_pose"]["x"] == pytest.approx(1.0) + assert state["last_pose"]["z"] == pytest.approx(0.6) + + +def test_clear_request_clears_lock( + module: SpatialTargetLockModule, + monkeypatch: pytest.MonkeyPatch, +) -> None: + locked_messages: list[Any] = [] + module.locked_bbox.subscribe(locked_messages.append) + monkeypatch.setattr(module, "_project_detection_pose", lambda _detection: _pose(1.0)) + + module._on_selected_bbox(_make_array(_make_detection("target", "person", 10, 10, 40, 40))) + module._on_clear_selection_request(Bool(data=True)) + + assert module.get_lock_state()["state"] == "unselected" + assert module.get_lock_state()["last_pose"] is None + assert locked_messages[-1].detections_length == 0 diff --git a/dimos/robot/custom/tests/test_target_standoff_behavior_module.py b/dimos/robot/custom/tests/test_target_standoff_behavior_module.py new file mode 100644 index 0000000000..48ef00fe3f --- /dev/null +++ b/dimos/robot/custom/tests/test_target_standoff_behavior_module.py @@ -0,0 +1,278 @@ +# Copyright 2025-2026 Dimensional Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations + +from collections.abc import Callable +from typing import Any + +from dimos_lcm.std_msgs import Bool +import pytest + +from dimos.msgs.geometry_msgs.PoseStamped import PoseStamped +from dimos.msgs.geometry_msgs.Transform import Transform +from dimos.msgs.geometry_msgs.Vector3 import Vector3 +from dimos.navigation.base import NavigationState +from dimos.protocol.rpc.spec import RPCSpec +from dimos.robot.custom.tasks import target_standoff_behavior_module as behavior_module +from dimos.robot.custom.tasks.target_standoff_behavior_module import ( + TargetStandoffBehaviorModule, +) + + +class _NoopRPC(RPCSpec): + def __init__( + self, + *, + rpc_timeouts: dict[str, float] | None = None, + default_rpc_timeout: float = 120.0, + ) -> None: + self.rpc_timeouts = {} if rpc_timeouts is None else dict(rpc_timeouts) + self.default_rpc_timeout = default_rpc_timeout + + def serve_module_rpc(self, module: Any, name: str | None = None) -> None: + pass + + def serve_rpc(self, f: Callable[..., Any], name: str) -> Callable[[], None]: + return lambda: None + + def call( + self, + name: str, + arguments: tuple[list[Any], dict[str, Any]], + cb: Callable[[Any], None] | None, + ) -> Callable[[], None] | None: + return (lambda: None) if cb is not None else None + + def call_nowait(self, name: str, arguments: tuple[list[Any], dict[str, Any]]) -> None: + pass + + def start(self) -> None: + pass + + def stop(self) -> None: + pass + + +class _FakePlanner: + def __init__(self) -> None: + self.goals: list[PoseStamped] = [] + self.cancel_count = 0 + self.goal_reached = False + self.state = NavigationState.IDLE + + def set_goal(self, goal: PoseStamped) -> bool: + self.goals.append(goal) + self.goal_reached = False + self.state = NavigationState.FOLLOWING_PATH + return True + + def get_state(self) -> NavigationState: + return self.state + + def is_goal_reached(self) -> bool: + return self.goal_reached + + def cancel_goal(self) -> bool: + self.cancel_count += 1 + self.state = NavigationState.IDLE + return True + + def set_replanning_enabled(self, enabled: bool) -> None: + pass + + def set_safe_goal_clearance(self, clearance: float) -> None: + pass + + def reset_safe_goal_clearance(self) -> None: + pass + + +@pytest.fixture() +def module(monkeypatch: pytest.MonkeyPatch) -> TargetStandoffBehaviorModule: + instance = TargetStandoffBehaviorModule(rpc_transport=_NoopRPC) + instance._planner = _FakePlanner() + monkeypatch.setattr( + instance, + "_get_robot_transform", + lambda: Transform( + translation=Vector3(0.0, 0.0, 0.0), + frame_id="world", + child_frame_id="base_link", + ), + ) + try: + yield instance + finally: + instance.stop() + + +def _pose(x: float, y: float = 0.0, z: float = 0.2) -> PoseStamped: + return PoseStamped( + ts=123.0, + frame_id="world", + position=Vector3(x, y, z), + orientation=(0.0, 0.0, 0.0, 1.0), + ) + + +def _planner(module: TargetStandoffBehaviorModule) -> _FakePlanner: + assert isinstance(module._planner, _FakePlanner) + return module._planner + + +def test_selected_target_computes_target_near_far_and_dispatches_near_goal( + module: TargetStandoffBehaviorModule, +) -> None: + module._on_target_pose(_pose(2.0)) + + planner = _planner(module) + assert module._state == "navigating_near" + assert len(planner.goals) == 1 + assert module._target_pose is not None + assert module._near_pose is not None + assert module._far_pose is not None + assert module._target_pose.position.x == pytest.approx(2.0) + assert module._near_pose.position.x == pytest.approx(1.5) + assert module._far_pose.position.x == pytest.approx(0.5) + assert planner.goals[0].position.x == pytest.approx(1.5) + + +def test_full_waypoint_sequence_uses_planner_arrival_and_dwell_timers( + module: TargetStandoffBehaviorModule, + monkeypatch: pytest.MonkeyPatch, +) -> None: + now = {"value": 100.0} + monkeypatch.setattr(behavior_module.time, "monotonic", lambda: now["value"]) + clear_requests: list[Any] = [] + module.clear_selection_request.subscribe(clear_requests.append) + + module._on_target_pose(_pose(2.0)) + planner = _planner(module) + assert module._state == "navigating_near" + + planner.goal_reached = True + module._tick() + assert module._state == "dwelling_near" + assert len(planner.goals) == 1 + + now["value"] = 109.0 + module._tick() + assert module._state == "dwelling_near" + assert len(planner.goals) == 1 + + now["value"] = 110.1 + module._tick() + assert module._state == "navigating_far" + assert len(planner.goals) == 2 + assert planner.goals[1].position.x == pytest.approx(0.5) + + planner.goal_reached = True + module._tick() + assert module._state == "dwelling_far" + + now["value"] = 120.2 + module._tick() + assert module._state == "returning_near" + assert len(planner.goals) == 3 + assert planner.goals[2].position.x == pytest.approx(1.5) + + planner.goal_reached = True + module._tick() + assert module._state == "done" + assert len(clear_requests) == 1 + + +def test_dwell_countdown_logs_when_started_and_every_two_seconds( + module: TargetStandoffBehaviorModule, + monkeypatch: pytest.MonkeyPatch, +) -> None: + now = {"value": 100.0} + log_messages: list[str] = [] + monkeypatch.setattr(behavior_module.time, "monotonic", lambda: now["value"]) + monkeypatch.setattr(behavior_module.logger, "info", lambda message: log_messages.append(message)) + + module._on_target_pose(_pose(2.0)) + planner = _planner(module) + planner.goal_reached = True + module._tick() + assert module._state == "dwelling_near" + + module._tick() + assert sum("dwell countdown" in message for message in log_messages) == 1 + + now["value"] = 101.0 + module._tick() + assert sum("dwell countdown" in message for message in log_messages) == 1 + + now["value"] = 102.1 + module._tick() + assert sum("dwell countdown" in message for message in log_messages) == 2 + + +def test_missing_robot_tf_blocks_sequence( + module: TargetStandoffBehaviorModule, + monkeypatch: pytest.MonkeyPatch, +) -> None: + monkeypatch.setattr(module, "_get_robot_transform", lambda: None) + + module._on_target_pose(_pose(2.0)) + + assert module._state == "idle" + assert _planner(module).goals == [] + + +def test_teleop_interrupts_sequence_and_clears_selection( + module: TargetStandoffBehaviorModule, +) -> None: + clear_requests: list[Any] = [] + module.clear_selection_request.subscribe(clear_requests.append) + module._on_target_pose(_pose(2.0)) + + module._on_teleop_active(Bool(data=True)) + + assert module._state == "idle" + assert _planner(module).cancel_count == 1 + assert len(clear_requests) == 1 + + +def test_stop_behavior_cancels_planner_and_clears_selection( + module: TargetStandoffBehaviorModule, +) -> None: + clear_requests: list[Any] = [] + module.clear_selection_request.subscribe(clear_requests.append) + module._on_target_pose(_pose(2.0)) + + result = module.stop_behavior() + + assert result == "target standoff behavior stopped" + assert module._state == "idle" + assert _planner(module).cancel_count == 1 + assert len(clear_requests) == 1 + + +def test_goal_timeout_fails_sequence( + module: TargetStandoffBehaviorModule, + monkeypatch: pytest.MonkeyPatch, +) -> None: + now = {"value": 100.0} + module.config.goal_timeout_sec = 2.0 + monkeypatch.setattr(behavior_module.time, "monotonic", lambda: now["value"]) + module._on_target_pose(_pose(2.0)) + + now["value"] = 103.0 + module._tick() + + assert module._state == "failed" + assert _planner(module).cancel_count == 1 From 6b006aa95c19b8b3176a37065c28322df4b43475 Mon Sep 17 00:00:00 2001 From: PolluxChou Date: Thu, 28 May 2026 08:44:48 -0600 Subject: [PATCH 16/17] feat(marauders-map): house badges + roster confirm-before-track * Add four Hogwarts house badges (Gryffindor / Hufflepuff / Ravenclaw / Slytherin) and serve them via /icons/{house}.png from ReidMapModule. * Assign every HP character in hp_characters.js a canonical `house` field. Teachers, non-Hogwarts wizards, creatures, and Muggles get null = no badge (per design rule). * Render the badge in three places in marauders_map.html: roster row inline, gallery card top-right, hover tooltip dedicated row. * Clicking a person in the right-side "Those Present" list now opens the same HP-flavoured confirm parchment that a footprint click on the map opens, instead of selecting silently. Tracked-person re-click still releases without re-prompting. Co-Authored-By: Claude Opus 4.7 (1M context) --- dimos/apps/marauders_map/module.py | 11 ++ .../marauders_map/templates/hp_characters.js | 100 ++++++++++++++++++ .../templates/icons/gryffindor.png | 3 + .../templates/icons/hufflepuff.png | 3 + .../templates/icons/ravenclaw.png | 3 + .../templates/icons/slytherin.png | 3 + .../templates/marauders_map.html | 60 ++++++++++- 7 files changed, 179 insertions(+), 4 deletions(-) create mode 100644 dimos/apps/marauders_map/templates/icons/gryffindor.png create mode 100644 dimos/apps/marauders_map/templates/icons/hufflepuff.png create mode 100644 dimos/apps/marauders_map/templates/icons/ravenclaw.png create mode 100644 dimos/apps/marauders_map/templates/icons/slytherin.png diff --git a/dimos/apps/marauders_map/module.py b/dimos/apps/marauders_map/module.py index f9b68868ce..edc81bf226 100644 --- a/dimos/apps/marauders_map/module.py +++ b/dimos/apps/marauders_map/module.py @@ -306,12 +306,23 @@ async def serve_bgm(request): # type: ignore[no-untyped-def] return FileResponse(_BGM_MP3, media_type="audio/mpeg") return Response(content="bgm.mp3 not found", status_code=503) + async def serve_house_icon(request): # type: ignore[no-untyped-def] + """Hogwarts house badge for a character; only 4 known files.""" + name = request.path_params.get("house", "") + if name not in ("gryffindor", "hufflepuff", "ravenclaw", "slytherin"): + return Response(content="unknown house", status_code=404) + path = _TEMPLATES_DIR / "icons" / f"{name}.png" + if path.exists(): + return FileResponse(path, media_type="image/png") + return Response(content="icon not found", status_code=404) + starlette_app = Starlette( routes=[ Route("/", serve_index), Route("/vendor/socketio.js", serve_socketio_js), Route("/vendor/hp_characters.js", serve_hp_js), Route("/vendor/bgm.mp3", serve_bgm), + Route("/icons/{house}.png", serve_house_icon), ] ) self.app = socketio.ASGIApp(self.sio, starlette_app) diff --git a/dimos/apps/marauders_map/templates/hp_characters.js b/dimos/apps/marauders_map/templates/hp_characters.js index 62640aea9a..939401a1cf 100644 --- a/dimos/apps/marauders_map/templates/hp_characters.js +++ b/dimos/apps/marauders_map/templates/hp_characters.js @@ -1,6 +1,7 @@ window.HP_CHARACTERS = [ { "name": "Harry Potter", +"house": "G", "color": "#7a1f1f", "quotes": [ "I solemnly swear that I am up to no good.", @@ -17,6 +18,7 @@ window.HP_CHARACTERS = [ }, { "name": "Hermione Granger", +"house": "G", "color": "#7a1f1f", "quotes": [ "It's leviOsa, not levioSA!", @@ -33,6 +35,7 @@ window.HP_CHARACTERS = [ }, { "name": "Ron Weasley", +"house": "G", "color": "#7a1f1f", "quotes": [ "Bloody hell.", @@ -49,6 +52,7 @@ window.HP_CHARACTERS = [ }, { "name": "Albus Dumbledore", +"house": null, "color": "#7a1f1f", "quotes": [ "Happiness can be found even in the darkest of times.", @@ -65,6 +69,7 @@ window.HP_CHARACTERS = [ }, { "name": "Severus Snape", +"house": null, "color": "#1f5a2f", "quotes": [ "Turn to page three hundred and ninety-four.", @@ -81,6 +86,7 @@ window.HP_CHARACTERS = [ }, { "name": "Draco Malfoy", +"house": "S", "color": "#1f5a2f", "quotes": [ "My father will hear about this.", @@ -97,6 +103,7 @@ window.HP_CHARACTERS = [ }, { "name": "Luna Lovegood", +"house": "R", "color": "#2f4a8a", "quotes": [ "You're just as sane as I am.", @@ -113,6 +120,7 @@ window.HP_CHARACTERS = [ }, { "name": "Rubeus Hagrid", +"house": null, "color": "#7a1f1f", "quotes": [ "Yer a wizard, Harry.", @@ -129,6 +137,7 @@ window.HP_CHARACTERS = [ }, { "name": "Minerva McGonagall", +"house": null, "color": "#7a1f1f", "quotes": [ "Why is it always you three?", @@ -145,6 +154,7 @@ window.HP_CHARACTERS = [ }, { "name": "Sirius Black", +"house": "G", "color": "#7a1f1f", "quotes": [ "The ones that love us never really leave us.", @@ -161,6 +171,7 @@ window.HP_CHARACTERS = [ }, { "name": "Lord Voldemort", +"house": "S", "color": "#1f5a2f", "quotes": [ "There is no good and evil, only power.", @@ -177,6 +188,7 @@ window.HP_CHARACTERS = [ }, { "name": "Dobby", +"house": null, "color": "#5a3a1a", "quotes": [ "Dobby is free.", @@ -193,6 +205,7 @@ window.HP_CHARACTERS = [ }, { "name": "Neville Longbottom", +"house": "G", "color": "#7a1f1f", "quotes": [ "I—I'm not sure we should.", @@ -209,6 +222,7 @@ window.HP_CHARACTERS = [ }, { "name": "Bellatrix Lestrange", +"house": "S", "color": "#1f5a2f", "quotes": [ "Hee hee hee!", @@ -225,6 +239,7 @@ window.HP_CHARACTERS = [ }, { "name": "Ginny Weasley", +"house": "G", "color": "#7a1f1f", "quotes": [ "Try me and find out.", @@ -241,6 +256,7 @@ window.HP_CHARACTERS = [ }, { "name": "Fred Weasley", +"house": "G", "color": "#7a1f1f", "quotes": [ "Care for a Skiving Snackbox?", @@ -257,6 +273,7 @@ window.HP_CHARACTERS = [ }, { "name": "George Weasley", +"house": "G", "color": "#7a1f1f", "quotes": [ "Care for a Skiving Snackbox?", @@ -273,6 +290,7 @@ window.HP_CHARACTERS = [ }, { "name": "Remus Lupin", +"house": null, "color": "#7a1f1f", "quotes": [ "Be kind, it costs nothing.", @@ -289,6 +307,7 @@ window.HP_CHARACTERS = [ }, { "name": "Nymphadora Tonks", +"house": "H", "color": "#7a1f1f", "quotes": [ "Oh—sorry, didn't mean to—", @@ -305,6 +324,7 @@ window.HP_CHARACTERS = [ }, { "name": "Alastor Moody", +"house": null, "color": "#3a5a3a", "quotes": [ "Bah.", @@ -321,6 +341,7 @@ window.HP_CHARACTERS = [ }, { "name": "Kingsley Shacklebolt", +"house": null, "color": "#3a5a3a", "quotes": [ "Hmph.", @@ -337,6 +358,7 @@ window.HP_CHARACTERS = [ }, { "name": "Arthur Weasley", +"house": "G", "color": "#7a1f1f", "quotes": [ "Patience reveals what haste hides.", @@ -353,6 +375,7 @@ window.HP_CHARACTERS = [ }, { "name": "Molly Weasley", +"house": "G", "color": "#7a1f1f", "quotes": [ "Come in, come in, you're freezing.", @@ -369,6 +392,7 @@ window.HP_CHARACTERS = [ }, { "name": "Percy Weasley", +"house": "G", "color": "#7a1f1f", "quotes": [ "I must insist on proper procedure.", @@ -385,6 +409,7 @@ window.HP_CHARACTERS = [ }, { "name": "Bill Weasley", +"house": "G", "color": "#7a1f1f", "quotes": [ "Hmph.", @@ -401,6 +426,7 @@ window.HP_CHARACTERS = [ }, { "name": "Charlie Weasley", +"house": "G", "color": "#7a1f1f", "quotes": [ "Bah.", @@ -417,6 +443,7 @@ window.HP_CHARACTERS = [ }, { "name": "Cedric Diggory", +"house": "H", "color": "#9a7a1f", "quotes": [ "Do you know who I am?", @@ -433,6 +460,7 @@ window.HP_CHARACTERS = [ }, { "name": "Cho Chang", +"house": "R", "color": "#2f4a8a", "quotes": [ "Be kind, it costs nothing.", @@ -449,6 +477,7 @@ window.HP_CHARACTERS = [ }, { "name": "Cornelius Fudge", +"house": null, "color": "#5a4a6a", "quotes": [ "Have you seen my smile?", @@ -465,6 +494,7 @@ window.HP_CHARACTERS = [ }, { "name": "Dolores Umbridge", +"house": null, "color": "#5a4a6a", "quotes": [ "I will have order!", @@ -481,6 +511,7 @@ window.HP_CHARACTERS = [ }, { "name": "Gilderoy Lockhart", +"house": null, "color": "#2f4a8a", "quotes": [ "Have you seen my smile?", @@ -497,6 +528,7 @@ window.HP_CHARACTERS = [ }, { "name": "Sybill Trelawney", +"house": null, "color": "#2f4a8a", "quotes": [ "I sense a disturbance...", @@ -513,6 +545,7 @@ window.HP_CHARACTERS = [ }, { "name": "Filius Flitwick", +"house": null, "color": "#2f4a8a", "quotes": [ "Well, this is going splendidly.", @@ -529,6 +562,7 @@ window.HP_CHARACTERS = [ }, { "name": "Pomona Sprout", +"house": null, "color": "#9a7a1f", "quotes": [ "Be kind, it costs nothing.", @@ -545,6 +579,7 @@ window.HP_CHARACTERS = [ }, { "name": "Horace Slughorn", +"house": null, "color": "#1f5a2f", "quotes": [ "Well, this is going splendidly.", @@ -561,6 +596,7 @@ window.HP_CHARACTERS = [ }, { "name": "Argus Filch", +"house": null, "color": "#4a4a4a", "quotes": [ "How original.", @@ -577,6 +613,7 @@ window.HP_CHARACTERS = [ }, { "name": "Madam Pomfrey", +"house": null, "color": "#4a4a4a", "quotes": [ "Drink this, all of it.", @@ -593,6 +630,7 @@ window.HP_CHARACTERS = [ }, { "name": "Lucius Malfoy", +"house": "S", "color": "#1f5a2f", "quotes": [ "How frightfully common.", @@ -609,6 +647,7 @@ window.HP_CHARACTERS = [ }, { "name": "Narcissa Malfoy", +"house": "S", "color": "#1f5a2f", "quotes": [ "Do you know who I am?", @@ -625,6 +664,7 @@ window.HP_CHARACTERS = [ }, { "name": "Peter Pettigrew", +"house": "G", "color": "#7a1f1f", "quotes": [ "I—I'm not sure we should.", @@ -641,6 +681,7 @@ window.HP_CHARACTERS = [ }, { "name": "James Potter", +"house": "G", "color": "#7a1f1f", "quotes": [ "I'll not back down, not today.", @@ -657,6 +698,7 @@ window.HP_CHARACTERS = [ }, { "name": "Lily Potter", +"house": "G", "color": "#7a1f1f", "quotes": [ "Be kind, it costs nothing.", @@ -673,6 +715,7 @@ window.HP_CHARACTERS = [ }, { "name": "Fleur Delacour", +"house": null, "color": "#4a4a4a", "quotes": [ "Do you know who I am?", @@ -689,6 +732,7 @@ window.HP_CHARACTERS = [ }, { "name": "Viktor Krum", +"house": null, "color": "#2a2a3a", "quotes": [ "Hmph.", @@ -705,6 +749,7 @@ window.HP_CHARACTERS = [ }, { "name": "Dean Thomas", +"house": "G", "color": "#7a1f1f", "quotes": [ "Be kind, it costs nothing.", @@ -721,6 +766,7 @@ window.HP_CHARACTERS = [ }, { "name": "Seamus Finnigan", +"house": "G", "color": "#7a1f1f", "quotes": [ "Well, this is going splendidly.", @@ -737,6 +783,7 @@ window.HP_CHARACTERS = [ }, { "name": "Lavender Brown", +"house": "G", "color": "#7a1f1f", "quotes": [ "I sense a disturbance...", @@ -753,6 +800,7 @@ window.HP_CHARACTERS = [ }, { "name": "Parvati Patil", +"house": "G", "color": "#7a1f1f", "quotes": [ "Well, this is going splendidly.", @@ -769,6 +817,7 @@ window.HP_CHARACTERS = [ }, { "name": "Padma Patil", +"house": "R", "color": "#2f4a8a", "quotes": [ "I read about this. Twice.", @@ -785,6 +834,7 @@ window.HP_CHARACTERS = [ }, { "name": "Oliver Wood", +"house": "G", "color": "#7a1f1f", "quotes": [ "I take this very seriously.", @@ -801,6 +851,7 @@ window.HP_CHARACTERS = [ }, { "name": "Angelina Johnson", +"house": "G", "color": "#7a1f1f", "quotes": [ "I take this very seriously.", @@ -817,6 +868,7 @@ window.HP_CHARACTERS = [ }, { "name": "Katie Bell", +"house": "G", "color": "#7a1f1f", "quotes": [ "Try me and find out.", @@ -833,6 +885,7 @@ window.HP_CHARACTERS = [ }, { "name": "Lee Jordan", +"house": "G", "color": "#7a1f1f", "quotes": [ "Well, this is going splendidly.", @@ -849,6 +902,7 @@ window.HP_CHARACTERS = [ }, { "name": "Colin Creevey", +"house": "G", "color": "#7a1f1f", "quotes": [ "Oh—sorry, didn't mean to—", @@ -865,6 +919,7 @@ window.HP_CHARACTERS = [ }, { "name": "Ernie Macmillan", +"house": "H", "color": "#9a7a1f", "quotes": [ "I must insist on proper procedure.", @@ -881,6 +936,7 @@ window.HP_CHARACTERS = [ }, { "name": "Hannah Abbott", +"house": "H", "color": "#9a7a1f", "quotes": [ "There, there, no harm done.", @@ -897,6 +953,7 @@ window.HP_CHARACTERS = [ }, { "name": "Justin Finch-Fletchley", +"house": "H", "color": "#9a7a1f", "quotes": [ "I take this very seriously.", @@ -913,6 +970,7 @@ window.HP_CHARACTERS = [ }, { "name": "Susan Bones", +"house": "H", "color": "#9a7a1f", "quotes": [ "Oh—sorry, didn't mean to—", @@ -929,6 +987,7 @@ window.HP_CHARACTERS = [ }, { "name": "Zacharias Smith", +"house": "H", "color": "#9a7a1f", "quotes": [ "How original.", @@ -945,6 +1004,7 @@ window.HP_CHARACTERS = [ }, { "name": "Terry Boot", +"house": "R", "color": "#2f4a8a", "quotes": [ "I read about this. Twice.", @@ -961,6 +1021,7 @@ window.HP_CHARACTERS = [ }, { "name": "Michael Corner", +"house": "R", "color": "#2f4a8a", "quotes": [ "How original.", @@ -977,6 +1038,7 @@ window.HP_CHARACTERS = [ }, { "name": "Marcus Flint", +"house": "S", "color": "#1f5a2f", "quotes": [ "Bah.", @@ -993,6 +1055,7 @@ window.HP_CHARACTERS = [ }, { "name": "Vincent Crabbe", +"house": "S", "color": "#1f5a2f", "quotes": [ "Bah.", @@ -1009,6 +1072,7 @@ window.HP_CHARACTERS = [ }, { "name": "Gregory Goyle", +"house": "S", "color": "#1f5a2f", "quotes": [ "Bah.", @@ -1025,6 +1089,7 @@ window.HP_CHARACTERS = [ }, { "name": "Pansy Parkinson", +"house": "S", "color": "#1f5a2f", "quotes": [ "How original.", @@ -1041,6 +1106,7 @@ window.HP_CHARACTERS = [ }, { "name": "Blaise Zabini", +"house": "S", "color": "#1f5a2f", "quotes": [ "Hmph.", @@ -1057,6 +1123,7 @@ window.HP_CHARACTERS = [ }, { "name": "Theodore Nott", +"house": "S", "color": "#1f5a2f", "quotes": [ "Oh—sorry, didn't mean to—", @@ -1073,6 +1140,7 @@ window.HP_CHARACTERS = [ }, { "name": "Fenrir Greyback", +"house": null, "color": "#2a2a3a", "quotes": [ "You will regret crossing me.", @@ -1089,6 +1157,7 @@ window.HP_CHARACTERS = [ }, { "name": "Antonin Dolohov", +"house": "S", "color": "#2a2a3a", "quotes": [ "You will regret crossing me.", @@ -1105,6 +1174,7 @@ window.HP_CHARACTERS = [ }, { "name": "Rodolphus Lestrange", +"house": "S", "color": "#2a2a3a", "quotes": [ "I'm with you, to the end.", @@ -1121,6 +1191,7 @@ window.HP_CHARACTERS = [ }, { "name": "Rabastan Lestrange", +"house": "S", "color": "#2a2a3a", "quotes": [ "You will regret crossing me.", @@ -1137,6 +1208,7 @@ window.HP_CHARACTERS = [ }, { "name": "Walden Macnair", +"house": null, "color": "#2a2a3a", "quotes": [ "The Dark Lord rewards the faithful.", @@ -1153,6 +1225,7 @@ window.HP_CHARACTERS = [ }, { "name": "Barty Crouch Jr", +"house": "S", "color": "#2a2a3a", "quotes": [ "Hee hee hee!", @@ -1169,6 +1242,7 @@ window.HP_CHARACTERS = [ }, { "name": "Barty Crouch Sr", +"house": null, "color": "#5a4a6a", "quotes": [ "I must insist on proper procedure.", @@ -1185,6 +1259,7 @@ window.HP_CHARACTERS = [ }, { "name": "Igor Karkaroff", +"house": null, "color": "#2a2a3a", "quotes": [ "I—I'm not sure we should.", @@ -1201,6 +1276,7 @@ window.HP_CHARACTERS = [ }, { "name": "Madame Maxime", +"house": null, "color": "#4a4a4a", "quotes": [ "Do you know who I am?", @@ -1217,6 +1293,7 @@ window.HP_CHARACTERS = [ }, { "name": "Grawp", +"house": null, "color": "#5a3a1a", "quotes": [ "Oh—sorry, didn't mean to—", @@ -1233,6 +1310,7 @@ window.HP_CHARACTERS = [ }, { "name": "Firenze", +"house": null, "color": "#5a3a1a", "quotes": [ "Patience reveals what haste hides.", @@ -1249,6 +1327,7 @@ window.HP_CHARACTERS = [ }, { "name": "Bane", +"house": null, "color": "#5a3a1a", "quotes": [ "Do you know who I am?", @@ -1265,6 +1344,7 @@ window.HP_CHARACTERS = [ }, { "name": "Aragog", +"house": null, "color": "#5a3a1a", "quotes": [ "Patience reveals what haste hides.", @@ -1281,6 +1361,7 @@ window.HP_CHARACTERS = [ }, { "name": "Buckbeak", +"house": null, "color": "#5a3a1a", "quotes": [ "Do you know who I am?", @@ -1297,6 +1378,7 @@ window.HP_CHARACTERS = [ }, { "name": "Fawkes", +"house": null, "color": "#5a3a1a", "quotes": [ "I'm with you, to the end.", @@ -1313,6 +1395,7 @@ window.HP_CHARACTERS = [ }, { "name": "Kreacher", +"house": null, "color": "#5a3a1a", "quotes": [ "How original.", @@ -1329,6 +1412,7 @@ window.HP_CHARACTERS = [ }, { "name": "Winky", +"house": null, "color": "#5a3a1a", "quotes": [ "I'm with you, to the end.", @@ -1345,6 +1429,7 @@ window.HP_CHARACTERS = [ }, { "name": "Griphook", +"house": null, "color": "#5a3a1a", "quotes": [ "Gold remembers its owner.", @@ -1361,6 +1446,7 @@ window.HP_CHARACTERS = [ }, { "name": "Ollivander", +"house": "R", "color": "#4a4a4a", "quotes": [ "The wand chooses the wizard.", @@ -1377,6 +1463,7 @@ window.HP_CHARACTERS = [ }, { "name": "Mr Borgin", +"house": null, "color": "#2a2a3a", "quotes": [ "How original.", @@ -1393,6 +1480,7 @@ window.HP_CHARACTERS = [ }, { "name": "Tom the Innkeeper", +"house": null, "color": "#4a4a4a", "quotes": [ "Be kind, it costs nothing.", @@ -1409,6 +1497,7 @@ window.HP_CHARACTERS = [ }, { "name": "Stan Shunpike", +"house": null, "color": "#4a4a4a", "quotes": [ "Well, this is going splendidly.", @@ -1425,6 +1514,7 @@ window.HP_CHARACTERS = [ }, { "name": "Ernie Prang", +"house": null, "color": "#4a4a4a", "quotes": [ "I'm getting too old for this.", @@ -1441,6 +1531,7 @@ window.HP_CHARACTERS = [ }, { "name": "Rita Skeeter", +"house": "S", "color": "#4a4a4a", "quotes": [ "Care to comment, dear?", @@ -1457,6 +1548,7 @@ window.HP_CHARACTERS = [ }, { "name": "Xenophilius Lovegood", +"house": "R", "color": "#2f4a8a", "quotes": [ "Things are often stranger than they seem.", @@ -1473,6 +1565,7 @@ window.HP_CHARACTERS = [ }, { "name": "Mad Auntie Muriel", +"house": null, "color": "#7a1f1f", "quotes": [ "Bah.", @@ -1489,6 +1582,7 @@ window.HP_CHARACTERS = [ }, { "name": "Andromeda Tonks", +"house": "S", "color": "#7a1f1f", "quotes": [ "Come in, come in, you're freezing.", @@ -1505,6 +1599,7 @@ window.HP_CHARACTERS = [ }, { "name": "Regulus Black", +"house": "S", "color": "#1f5a2f", "quotes": [ "I'll not back down, not today.", @@ -1521,6 +1616,7 @@ window.HP_CHARACTERS = [ }, { "name": "Aberforth Dumbledore", +"house": "G", "color": "#3a5a3a", "quotes": [ "Bah.", @@ -1537,6 +1633,7 @@ window.HP_CHARACTERS = [ }, { "name": "Gellert Grindelwald", +"house": null, "color": "#2a2a3a", "quotes": [ "For the greater good.", @@ -1553,6 +1650,7 @@ window.HP_CHARACTERS = [ }, { "name": "Newt Scamander", +"house": "H", "color": "#9a7a1f", "quotes": [ "Oh—sorry, didn't mean to—", @@ -1569,6 +1667,7 @@ window.HP_CHARACTERS = [ }, { "name": "Nicolas Flamel", +"house": null, "color": "#4a4a4a", "quotes": [ "Patience reveals what haste hides.", @@ -1585,6 +1684,7 @@ window.HP_CHARACTERS = [ }, { "name": "Quirinus Quirrell", +"house": null, "color": "#2a2a3a", "quotes": [ "Oh—sorry, didn't mean to—", diff --git a/dimos/apps/marauders_map/templates/icons/gryffindor.png b/dimos/apps/marauders_map/templates/icons/gryffindor.png new file mode 100644 index 0000000000..af64fa44ba --- /dev/null +++ b/dimos/apps/marauders_map/templates/icons/gryffindor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e1d8aea79d363e473581b05473a819261f202d016f4f7d14008177c2d079dac +size 3921 diff --git a/dimos/apps/marauders_map/templates/icons/hufflepuff.png b/dimos/apps/marauders_map/templates/icons/hufflepuff.png new file mode 100644 index 0000000000..214e439892 --- /dev/null +++ b/dimos/apps/marauders_map/templates/icons/hufflepuff.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc8c8e95ce01e06ba83e37e1f34bead9bb5116988725306f76fa8efb69fe77e9 +size 3803 diff --git a/dimos/apps/marauders_map/templates/icons/ravenclaw.png b/dimos/apps/marauders_map/templates/icons/ravenclaw.png new file mode 100644 index 0000000000..59adcf5432 --- /dev/null +++ b/dimos/apps/marauders_map/templates/icons/ravenclaw.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:887f432c99af28a6719ffc0d53993e7f099e922b20cb6e5698a3fb354b4e24a0 +size 3763 diff --git a/dimos/apps/marauders_map/templates/icons/slytherin.png b/dimos/apps/marauders_map/templates/icons/slytherin.png new file mode 100644 index 0000000000..2567fe83fa --- /dev/null +++ b/dimos/apps/marauders_map/templates/icons/slytherin.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3577f17193e01e4851dea9d9b57c86160be6f62b6342aa262743ff8396061896 +size 3719 diff --git a/dimos/apps/marauders_map/templates/marauders_map.html b/dimos/apps/marauders_map/templates/marauders_map.html index f2d0d3bc47..26943a9fb1 100644 --- a/dimos/apps/marauders_map/templates/marauders_map.html +++ b/dimos/apps/marauders_map/templates/marauders_map.html @@ -75,6 +75,10 @@ .roster li img { width: 34px; height: 34px; object-fit: cover; border: 1.5px solid var(--ink); border-radius: 3px; background: #b9a373; } .roster li .who { font-family: "IM Fell English SC", serif; font-size: 15px; } + /* Hogwarts house badge in the roster row. */ + .roster li .house { width: 18px; height: 18px; object-fit: contain; + image-rendering: -webkit-optimize-contrast; flex-shrink: 0; + filter: drop-shadow(0 1px 2px rgba(0,0,0,.25)); } .roster li .age { margin-left: auto; font-style: italic; font-size: 11px; color: var(--ink-soft); } .roster .none { font-style: italic; font-size: 13px; color: var(--ink-soft); @@ -137,6 +141,13 @@ .gallery .card .pic { width: 100%; aspect-ratio: 1 / 1; background: #b9a373; border: 1.5px solid var(--ink); border-radius: 4px; object-fit: cover; display: block; } + .gallery .card .house-badge { position: absolute; top: 4px; right: 4px; + width: 26px; height: 26px; object-fit: contain; + image-rendering: -webkit-optimize-contrast; + filter: drop-shadow(0 1px 2px rgba(0,0,0,.4)); pointer-events: none; } + .tip .house-row { display: flex; align-items: center; gap: 6px; + margin-top: 4px; font-size: 12px; } + .tip .house-row img { width: 18px; height: 18px; object-fit: contain; } .gallery .card .nm { font-family: "IM Fell English SC", serif; font-size: 14px; margin-top: 6px; line-height: 1.15; } .gallery .card .age { font-style: italic; font-size: 11px; color: var(--ink-soft); @@ -587,6 +598,10 @@

The Full Register

+
@@ -774,6 +789,19 @@

Blimey!

function colorFor(p) { return isDog(p) ? DOG_INK : characterFor(p.id).color; } + // Hogwarts house metadata — keyed by the one-letter code baked into + // hp_characters.js. `null`/missing = no badge (teacher, creature, etc.) + const HOUSE_META = { + G: { name: 'Gryffindor', icon: '/icons/gryffindor.png', color: '#7a1f1f' }, + H: { name: 'Hufflepuff', icon: '/icons/hufflepuff.png', color: '#7a5f1f' }, + R: { name: 'Ravenclaw', icon: '/icons/ravenclaw.png', color: '#1f3a7a' }, + S: { name: 'Slytherin', icon: '/icons/slytherin.png', color: '#1f5a3a' }, + }; + function houseOf(p) { + if (isDog(p)) return null; + const ch = characterFor(p.id); + return ch && ch.house ? HOUSE_META[ch.house] || null : null; + } let portraitRects = []; // clickable portrait hit-boxes on the map let personHits = []; // clickable person markers -> floating quote @@ -1364,22 +1392,28 @@

Blimey!

const age = (p.age != null) ? `${p.age}s ago` : ''; const tag = dog ? 'Go2' : ''; const col = colorFor(p); - li.innerHTML = `${thumb}${labelFor(p)}${tag}${age}`; + const h = houseOf(p); + const houseBadge = h + ? `${h.name}` + : ''; + li.innerHTML = `${thumb}${labelFor(p)}${houseBadge}${tag}${age}`; if (dog) { // Dog row: legacy behavior — clicking opens portrait if any. li.style.cursor = p.photo ? 'zoom-in' : 'default'; li.onclick = () => { if (p.photo) requestPhoto(p.id, labelFor(p)); }; } else { - // Person row: whole row picks this person for lock-and-follow. + // Person row: same UX as clicking a footprint on the map -- the + // confirm parchment pops first, so the user gets one parchment to + // back out of. Tracking the same person again still releases. li.classList.add('selectable'); if (selectedId === p.id) li.classList.add('selected'); - li.title = 'click to track · click again to release'; + li.title = 'click to track (asks first) · click the tracked row to release'; li.onclick = () => { if (selectedId === p.id) { setSelection(null, null); } else { - setSelection(p.id, labelFor(p)); + askConfirm(p); } }; // Small zoom icon preserves access to the lightbox without @@ -1545,9 +1579,22 @@

Blimey!

if (!ch || !ch.quotes || !ch.quotes.length) return ''; return '"' + ch.quotes[Math.floor(Math.random() * ch.quotes.length)] + '"'; } + const tipHouseRow = document.getElementById('tip-house'); + const tipHouseIcon = document.getElementById('tip-house-icon'); + const tipHouseName = document.getElementById('tip-house-name'); function showTip(p, ev) { tipNm.textContent = labelFor(p); tipNm.style.color = colorFor(p); + const h = houseOf(p); + if (h) { + tipHouseIcon.src = h.icon; + tipHouseIcon.alt = h.name; + tipHouseName.textContent = h.name; + tipHouseName.style.color = h.color; + tipHouseRow.style.display = 'flex'; + } else { + tipHouseRow.style.display = 'none'; + } tipMeta.textContent = (isDog(p) ? 'Unitree Go2 · ' : 'Person · ') + fmtMeta(p); tipQuote.textContent = sampleQuote(p); tipEl.classList.add('on'); @@ -1604,8 +1651,13 @@

Blimey!

: `
`; const tag = isDog(p) ? 'Go2' : ''; const age = (p.age != null) ? `${p.age}s ago` : ''; + const h = houseOf(p); + const houseImg = h + ? `${h.name}` + : ''; card.innerHTML = ` ${imgHtml} + ${houseImg} ${tag}
${labelFor(p)}
${age}
From 753c4466f5b2551da1eaabe628beffe5fc20f724 Mon Sep 17 00:00:00 2001 From: Harold <20009626+HaroldGin931@users.noreply.github.com> Date: Thu, 28 May 2026 23:27:44 +0800 Subject: [PATCH 17/17] demo blueprint yoloe-spatial-standoff-follow-ui --- dimos/apps/marauders_map/module.py | 12 ++-- dimos/robot/all_blueprints.py | 1 + .../yoloe_spatial_standoff_follow.py | 63 +++++++++++++++++++ 3 files changed, 72 insertions(+), 4 deletions(-) diff --git a/dimos/apps/marauders_map/module.py b/dimos/apps/marauders_map/module.py index edc81bf226..c1ab5d2c05 100644 --- a/dimos/apps/marauders_map/module.py +++ b/dimos/apps/marauders_map/module.py @@ -51,6 +51,7 @@ from typing import Any import cv2 +from dimos_lcm.std_msgs import Bool # planner stop_movement uses LCM std_msgs/Bool import numpy as np from reactivex.disposable import Disposable import socketio # type: ignore[import-untyped] @@ -72,8 +73,6 @@ from dimos.msgs.sensor_msgs.CameraInfo import CameraInfo from dimos.msgs.sensor_msgs.Image import Image from dimos.msgs.sensor_msgs.PointCloud2 import PointCloud2 -from dimos.msgs.std_msgs.Header import Header -from dimos_lcm.std_msgs import Bool # planner stop_movement uses LCM std_msgs/Bool from dimos.msgs.vision_msgs.Detection2DArray import Detection2DArray from dimos.perception.detection.type.detection2d.imageDetections2D import ImageDetections2D from dimos.perception.detection.type.detection3d.pointcloud import Detection3DPC @@ -391,7 +390,11 @@ async def select(sid, data) -> None: # type: ignore[no-untyped-def] @self.sio.event # type: ignore[untyped-decorator] async def deselect(sid, data) -> None: # type: ignore[no-untyped-def] - """Web clears the selection -> empty Detection2DArray.""" + """Web clears the selection and interrupts any active task.""" + try: + self.stop_movement.publish(Bool(data=True)) + except Exception: + logger.exception("Marauder's Map: stop_movement publish failed (on deselect)") self._publish_selection(None) @self.sio.event # type: ignore[untyped-decorator] @@ -405,8 +408,9 @@ async def navigate(sid, data) -> None: # type: ignore[no-untyped-def] wy = float(data.get("wy")) except Exception: return - # Clear any locked person so bbox-follow stops driving nav_cmd_vel. + # Stop any active task before handing nav_cmd_vel back to the planner. try: + self.stop_movement.publish(Bool(data=True)) self._publish_selection(None) except Exception: logger.exception("Marauder's Map: deselect on navigate failed") diff --git a/dimos/robot/all_blueprints.py b/dimos/robot/all_blueprints.py index 145c6fabf3..590ad2bd3b 100644 --- a/dimos/robot/all_blueprints.py +++ b/dimos/robot/all_blueprints.py @@ -125,6 +125,7 @@ "xarm7-planner-coordinator-agent": "dimos.manipulation.blueprints:xarm7_planner_coordinator_agent", "yoloe-keyboard-teleop": "dimos.robot.custom.blueprints.yoloe_keyboard_teleop:yoloe_keyboard_teleop", "yoloe-spatial-standoff-follow": "dimos.robot.custom.blueprints.yoloe_spatial_standoff_follow:yoloe_spatial_standoff_follow", + "yoloe-spatial-standoff-follow-ui": "dimos.robot.custom.blueprints.yoloe_spatial_standoff_follow:yoloe_spatial_standoff_follow_ui", "yoloe-target-lock-distance-follow": "dimos.robot.custom.blueprints.yoloe_target_lock_distance_follow:yoloe_target_lock_distance_follow", "yoloe-tracking-test": "dimos.robot.custom.blueprints.yoloe_tracking_test:yoloe_tracking_test", } diff --git a/dimos/robot/custom/blueprints/yoloe_spatial_standoff_follow.py b/dimos/robot/custom/blueprints/yoloe_spatial_standoff_follow.py index 3f9cfbfc90..116ee73171 100644 --- a/dimos/robot/custom/blueprints/yoloe_spatial_standoff_follow.py +++ b/dimos/robot/custom/blueprints/yoloe_spatial_standoff_follow.py @@ -16,6 +16,7 @@ from typing import Any +from dimos.apps.marauders_map.module import ReidMapModule from dimos.core.coordination.blueprints import autoconnect from dimos.core.coordination.module_coordinator import ModuleCoordinator from dimos.core.global_config import global_config @@ -41,6 +42,7 @@ rerun_config as go2_rerun_config, ) from dimos.robot.unitree.go2.blueprints.smart.unitree_go2 import unitree_go2 +from dimos.robot.unitree.go2.connection import GO2Connection from dimos.robot.unitree.keyboard_teleop import KeyboardTeleop from dimos.visualization.vis_module import vis_module @@ -161,8 +163,69 @@ def _spatial_standoff_rerun_blueprint() -> Any: ) ) +yoloe_spatial_standoff_follow_ui = ( + autoconnect( + unitree_go2, + _spatial_standoff_vis, + YoloeTrackingModule.blueprint(), + BBoxSelectionModule.blueprint(), + SpatialTargetLockModule.blueprint(), + TargetStandoffBehaviorModule.blueprint(), + ReidMapModule.blueprint( + camera_info=GO2Connection.camera_info_static, + enable_reid=False, + ), + ) + .global_config( + n_workers=16, + robot_model="unitree_go2", + ) + .remappings( + [ + (BBoxSelectionModule, "selected_bbox", "user_selected_bbox"), + (SpatialTargetLockModule, "selected_bbox", "user_selected_bbox"), + (TargetStandoffBehaviorModule, "teleop_active", "stop_movement"), + (ReplanningAStarPlanner, "clicked_point", "planner_clicked_point"), + (ReidMapModule, "cmd_vel", "tele_cmd_vel"), + (ReidMapModule, "pointcloud", "global_map"), + ] + ) + .transports( + { + ("detections", Detection2DArray): LCMTransport( + _YOLOE_DETECTIONS_TOPIC, + Detection2DArray, + ), + ("user_selected_bbox", Detection2DArray): LCMTransport( + _USER_SELECTED_BBOX_TOPIC, + Detection2DArray, + ), + ("locked_bbox", Detection2DArray): LCMTransport( + _LOCKED_BBOX_TOPIC, + Detection2DArray, + ), + ("target_pose", PoseStamped): LCMTransport( + _TARGET_POSE_TOPIC, + PoseStamped, + ), + ("nav_cmd_vel", Twist): LCMTransport( + _NAV_CMD_VEL_TOPIC, + Twist, + ), + ("tele_cmd_vel", Twist): LCMTransport( + _TELE_CMD_VEL_TOPIC, + Twist, + ), + } + ) + .requirements( + _require_yoloe_lrpc_model, + ) +) + __all__ = [ "yoloe_spatial_standoff_follow", + "yoloe_spatial_standoff_follow_ui", ]

QGrqa1GPVw(5VaR8qL_u7 zwdd#@)q@Tiiqy96GNDyA(n8iFZq%lM|8nw-KojX&M9XeIuT)wPohua6g)YKvOvF-M z@s#9G+WYwe5cJ_#)~jA9`sIbFseEJK3sp3HFSCE=GN&FC>|W=JIR4EA)czs=`?O@= z00lp0)>}z7!gmGxKWXW*6+wGltfbt5lo4$8hnajQc5+JYaxz4NOB%aU;rm831zF=I zFoh$7Qo_$auoxRqBm-c6o8~NHU~PnbBBWYEjo`-%C$)hA3B!;niDbKyW<%)jB-&EM ztBst~1i?@>H+75YV!YAITac5O-~7~2S+6*%3b=}o3MqYizxLDsJU{_3m5kAVP!JJ9 zC(u!>%818!+UIV?n|D~6sz;HP&XKq+dY+Q9N|8NPYSHJG#KTDun@rd~l9ie$YP(BS z^F49=y){~f5YYVU@!91dc@%0`ZD4*+{w3yip>%S(ve8273 z(+bX`-GZxb#BOi?6w$vmwfD|vXLE7~@uLzLQa%qp5+?Lgy^dOn0W%YaRs$kw4o+lJ z6&WBv%|X=Akr5}DIGtc)06L_Ay0{5Z57OYwo#)ra0(+P$5j^wNWQwB6ELpov^wIGd zYxa`(g#8|wdq*Gby@RmpN(dH6?rP@-uW0ZRg2Y1Ltwhd$Pcva(tNz_P{XN~O009sL z0S1;jXyv8{0wNDH@k0v}FezanqqPT6MG-_|`#`AZ$c921lTU-+M~&Tyg@6ojB?2@| z*`-1wj`@TXwe|5H z79B=ZTJ2vvagI4e!er8@#D`OjGKqTqvnp?T9YjZUZ~a_wy3=c8cDzAUez$FGbCG5L z`^03{0R>iPRYOc3z+yy8FJ3XB))>hR<%KL$mh_hz4=VZ zT|d&XKdy2W+U-KCP%K^dkZ%Z>MQ|m|iI@^-U^r;BNJdGOQ(liH{pi*r7|N#@;OK-& zKp23*);$~_CtATHChdZk)<(4d3;ZJEVDu0D|g8q^1`^%_t~pjpwel@c=+YYmYV(Yw-W<(-9K zr<}H#1v@^u9W-ua4=a$FRBQP!2dbsm)QN2QrxUc5Z~tAJ`BMwc@A7J{cDU3#YxYa( zAO8(_Y>vnlYk&KtXF@_`{wZV{*(bb0aYAMQ`+)w++*2H*%^CCrsW}nygt$n+p^JIR zt5c29XTQzHB`&*G3>2`@zM9$WtyG?qH9)-H91;0=W%D-68)`yR%6eop73?7^K~+Q= z$B6^ldev=f_eJVvu1px_n+xovV&ac7?2{eUyHKR_7$g#sNGo6vh(sMSFtUx_08nfZ zg@lS85gCHZ-UN?P2$iS=LNq^=q#(MhxgZrZwR6Z@a1_l884jOiFaZ!wvD)8yVsGA~ zUt7sJf7^EA*RnQ*MS8;eISw7N&9xH5IGB-3FiMRQA=v@6B1)%r4;tnTazsGpwUrJh zRjXPMUQH}>3_4elzLXM;dsU&<=`)NFQdOUJu;*E(RJKw@1btEjI&~VLhyd;~f{Ll6 z{Fn|KLoKQ?nvA=+mWPej1xVJgu+ox1+KNRsN3O*@IOQ^V?pwlJ?tl~}=@TRW`?O^J z00jzKRLgHQqJU=V-C^jp6d8eI?7bA>zLjhJl$z9UCC!E1NPDl0g;|NEk>JQ-k{iC( zg(q7*zvlbXggs=_YE^k*fD*43JR5N%s6vg?qcE2LM~iC^AQfPhG81jN!<-}`2$^6( zR9r+z(2f~D4Aq%!+x9~~gXP^$3Y`zem?j=WhYBrc7IAxRM(wlJS-)1g{%1E?rR>2d zdbE?kf(_$g(a|*pv`H})y%yFS#Z)6?EH>Jb6e?nwQc|}jDPoBy_9)Kg9#EU=ue#&- zzI(a8c$Dk+SA)5UDHs3)2vUb24RO28CO*^~1mtDoiv%h*TS^w9p$$4L``&4EuiJEM zlBQ(sIRin5EAKPS#?I9GVNojK9nZ)m;@5rRn-{Wi+F>AtHnfkPQW)xU2z6(5X|Yu@ zmQ*p0g&Q8{N+w5mt5~Tit0KZse_4cm?GOz0A%0s;;Q3~BpuIRh(qI4(Dd0~b<#SS$5B$fh$ z1%xHFjof$}q4hlgj6oDNr19v&qMj<<42>0?tmep85-H!v%!1u9cprqvB6~4IAG1~5 zajjFOrN)=~J=W2JcBLE2dw=YDP!M62I#pq~LAi$j(PYMvBnTM61RwxtI{=8hSZuN} zd3Ln&@253v9$1qK5)DbqZeQGL$}>Ec%FMfv3<982(We&bZ#qOac-Qr4Rc-VNNiwbf z`?N&z02DY|SbGmdN{DM}|6yaTP(?vs?3i}y5-2OZlMd}hGn`#ZVP25OjKVZu%FWm| znsk|mHIn~k$bDw3xa74?t(Pr-qup&7Ct@<+C%4~Y+W`S7YXDJhUU0!$LW72Z<1Mh} zV`vJTuzNZMD1~#~EYE};;M}qel2&||wFZAUNPJpLSQ%(MG;7>Y(Lh<$9~nlDhr7!P z8&;9T4SE?<*~9M{-XF}Vjd0KXaUt-|R*e+Ts+-}=7PC1n=ugDBUJI>8_L@sSBV{ z;Nl{-CDWCut1UQoUp9FSqWQPSd%<};4=#bP9ca!Pm*UByWSgDY`I!^R+;_D32H&-w zE$-FErq;jopo1Yqo(P!kD=JV_W(5H&D_845X(p*F1*B!yGGk|JEf zJb#(5UJ4k>i~}gb7-|575_sw;ePRm8GCiDQz)9}^XKaM0_wKj9?V@z8zmGQ-gr8Y6 z@PlkFYhB-AH@w{MKmPeD7)>dzYLNAX!DN5{B`GcoD&uE}MfIoFetd6`#f0=yVhym? z+d;Yi`?N&$00b9ER_hN!dXI_<&t-$VP}x6Qth~$OH?OMwq>klU`;BtY&5JE+Y0u1KlKsgYz|by6D2Wbyp2W?!3^x4MSp2nk7y zf|`lm0qnV@=2cjkbp?}6K?v>6IHMKPPMeIqsYPP0{~|nR>T?{&JRIT(0|R?i?2w=w zPaU3PwWHC-7A)fXKt8!SV!<%(iUxR~n2b7HB5PV zj+|3V>hK{=?rIENqROhzbG2XPJnLul<&<^Be%rq%*7vz#QFT_~>UQA?_ud$2Z#Q~igJ;&Iw#k%+7kEh4|CC9NHQKiwYWe;-(QzRse=z=^ z@6niFJhn3hA zOi;xYtOV4%1ieQ{WOVMq-3Wl8YNh5asPQ0d!Gx}=Lgfm{{Z4i}zUdUjGG^#N6&-k* zV&wRPCUzzs3_)szm}_7C`azLjcBgiXnly6%|4PH8N&o?XjDR6UK4k41A;KZ)_Cz#j zC?OLT41ps830OK2;J2}8o~owUvu5tUexA#(Z5zs z8H>+|MHl?P{mi;d`rAOn4a_9i01BLB0h2ECCos(Z0DuJr1x`Q#DMxh90=B&z_W=R6 zA5=46urnBQ>Fw=lh7xX6^)B>e5WsfC)KQ{M0USeB7Fwqx{}j)th;twn5}Y0`TfN=?ppM4glbQ%okw}bLr3!$|DNxanK(qVt{Xq+t>eSIn>WGtRa3iK-Te`}xL4o% zTT4Dy*LQnVsjyiR<$PW_VIh#jb-w7DX3^Mw=Mbn3sus|nsSE3l^ImGn<%S&H2GP1XBEM`@Y6AB zn?nx)BHqPJPN+Zv!0?Q+12(5jmX}m%n(Czpvp0D_!V00SFt za~WAW#c}~q0H`Sc`@}@w00ebfRBKEgn3L;TjcJCd5czFWtuS`tTP>tPrgL#0LX;6(~_{L+$Gk z#h@e9+J2m#NH71$0*4>GN6lC#rX>J_kbtt1Y0heuhLRi{iGUE{K%x?E=!A82$uCw! z3Ol37I|XpL#p^x1k)5tIa6;Dud{Y8(K+4*xP@qHL@r?2QVQqA=GEhMd7>Xt7TS~!c zPDu?7We7rq4|=ln*u=#pbm}qpP2Q^$Q&L)Gm{pu$+gn;?KdM8b6~^oQwtv^x9n{50 z_`0elEfsSe;XI@O0AU4CKozw2GNF^p6A==rATp?k6i^-r01IC*KsCD13IZ?Fyowb6 z!3@=>Gm3bkRLQWHU!E_53Vz8B96nwod~t0)=*9kiBbFAf7J$cNVCtCxyL4BO$ERAP z)x==FC6sFoW7$|@oWTgs z`*IioI0IyZN=k6IVCsZ|Qe-%}cYpzu+&~^uxl+cXR?dNHqQhK&DI*S?h4e<4w6@&E zY+-}~L~O?Qi)3-;7XE15rc#7)VmHI5Ahws1Dpt1iaya(%ZJJV?;nXqJ`{eU8J)6=p zsfxKgfUx9Eu$B#_u0~Z)HL$&*LkI3%AR_-*hwd>OnO%|_#BX;%0Ax7;78+NWZpZU5 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�= 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%0D4O-!Y7$xk{FX>A3ouEbgxC`B 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 ZV(t4wRkrAKn11H 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�dT4So<$C+FxVpk7o%#5(R--4w_NIhYXm-Xj6~E zuv}C}E9Ck(rAW7F0wYMl{NS?ZVqd zdG88yiY?B1Jfn`d5|%k$bvJx#N-J7hIg;>%4&1Zi>DxQ8*Y$AIqUhwlG|8ITInDOW zf>xlfM|yV0$0Wx6T}cGM17yJoM3YLJ()RG-3f9lpiHI;G4d_{xi$ay zpYBq?15}hvHzQYqB^f8?MNy5A7`ZG$jF)ioF;D?QsPNL$J|?u=G`f|Uw7~=(A5yw0 zIbL*F5*-4tKVkC|UYEK`4F|BUfcFK`al3OE!;q=uk4H@iE^4H=qP%4px0XsJt=N0# zysTw>tVTC)+bzGvKS}B{%jcWFNT({Nc`lA`pDyPd;?t5gNcX$;&g@^aHz0BlE0Pf+ zZTn@wE@aBKGUZX6Dgg__uOTh7MuDvpA6h>6QImTU$yGNZk=^Jh6^ z{YhO!lKme2LypEO_No|Lgn!_B)f%=A7hpw)n&m2$)d3pIAq4EQUQ4*o0yt$w9|B02 za7IKBki@EH4NDKT&xSz484X5BH7FKl2O!!>Ot3Ev$u7wl%23Bm z#nW4&WBBDsuNitrl{{r9?RX}j>E_noysL|tt)HZd0t!UBJ5k8xWUV)`b#p=qCF?Y= zhJXIlHoV$ZFS155V{)S`v|n|fr8}HR3LRX`Tb}uNNmCv`b|vaw!37SC%M6gx8JnjM zLx62V12h72%3^7-WSFlVh%bD*L*xhDPZXSycVxDR|2|czeR^eoOxZNNmfelY3Hh@- zw22Wn{B7KZ^!Fp)-QWNX0000IX%zV7z+jnzm5`qmffzWrFujI^Fo*$@Fu}!MfS?aU zl`Gs}c07RBjf+XymQPd*m~ExUpeUGARj8~q*KWi14x?$EIuqp_{I&0bs>ycl+Rwc^ z{w0x*J8_---1uVV9;tAUit3#Ee{!=kwwsfUziZ8Vvv0ib`&gTzmPPZ>F)#|;Ae;Vg zo5Mg1qL9qVU-sIF%zzL?yfBP7rk1M0k%d_?XbMAom3I24niaBZ+f_M-zLZlty|!P2vhC)&#bi@$ zeeHPBEwj?DlUn95tADSp|CKoqQ`{0&cUyl6++&iMF|dKdfH)}(IR_A`h&g`G>#VZg zbSth`ZkGyZar~pY-ob3mf4I8U&9qlnT+SMau4m=F&2BHVE~u||UHWP*$?f`2mZnHI ze_Ma5Wg{f2$|z!-P_vYYWCvvmS;p{{_IJGYIsy^|9B)}1yu(cnS|~7>WY9(gBnT)J zhT+68+I+L=dQA15HqqzINcqL+ZrD0gFV^*b}9W-^)Hxrkr4S+CMl zAYkO{GhLW2p)pFwMcMx zcXxLvCAd@E-L=IXid&($TWNvf6ey)YA)9}nn|*Tk0WYcLgkCq}y_V1@rl{Kxki~EahKWw)0Io)g(VUY82}R&X)dHQN>e-qJ_8((3 zL92cW+z+W0F~In-OBtL!@;5!YtdQp(Vrxo# zrPb1H@lqQg0ureNaqZ|MAY(uu&S2Ip$gqcyAQ3=?-hQ#p=LgJ8y2%{FN8qByc@ zY4-H|lBKj&l!2M}4HQ)(Q1rVf$*ak4o%77tu0ETZI659xJi=dqB2-GDmi}?&m{{@c zavH=)NnC>^dW87_z<2AmBEFp-9Ic-JCRx~<(}&R5E7o|JpmufI*NKkp-hZ-+azdNUZIwc}ktpIQ)}o7Lw%9+6Jl{(xI!U@ihMHg((wbr;LN+G|w<45&cy1d~LX`GC`dsD@nBp?EcjxX!G z`XX)fLxf993ljk4Zd(2(KST!fHuDs7p0Y5<`X!eFz0&HAck1o5olp51vzPxD zxF|^21cgb^$Mg@RC?0@CEk~|M-nn&6do+e{MHgE~N0nHo($pO9Mo&W7kWV@aQ|ZXZ z;wFy$C;o{ycD^o{j5QA%Sle@4Vigp!}&p{tgPDu zj=#n-73**0Rm?nWy|@i|EBe?cE||^!5~q-eJXw~ z!Y!s)xN(V|LNe;0ejTT}ED)Tx!sj`0> z2U19L7RI@)iDf3;j1%Z)FSQKtSOsU&SK&O&|kwRiUd)T;CD8jBg|QQ(XSRM)oy| zUxUtmWz%K6VjzKwE#BLTt0!?L%j$(k39}y*}!qsU( zl_WL&Q)%ON{i3qQ*`}l+egz=rRS8aw~-wLNRQ3SQ5T zxjs1*tKV}jl;=yJgX6xLqP#WjqsTJ)7BkYKc&7iJMumLDGScGel11BHd<8pa=GiB& z_WImEf950K;d8$LAapi)s1|bUwga$jWzsGl-AtDF0SGpOoKO~(*yULYvKus;d(BfZ zuGsEd!nup?5W^>DBzxn=Pj(_dt=ZzHVyqMwyN{WV->Db7*YBuvb&l9)K-2hiv1sBf zjV#eGa67JisEh3=88@&t61%$b;HZ56JY5@9!nF5_j=JLsgne*aW&Hn9b^d1d8wD(H z8F#_>b_Yw!ct__knC*zj3?)YgbHb}AMbPMO5*weWgBmBB@>-ol{@%#o*5nG8|}tE(?Ya~`8>q`?M{dV z{1~no8ML;H`12~n^?vt*4P{)#U^P=!iam&hT;7&2^&+aYwaKxAxYtP7eh+< zgoT~YTk4BdLlyWxgs(@vGawcBuN9Gg;MA6bdW2WAGH#wbTGt#Q5Yx`P1{t#^N z$z2uQA?4fDo!=5|@9Bl>mVI^R9u0Pxr)gE}<@iDd;T2_zc;6paB4hJw7CtRvHsHcc zBS_<{-S@oeFj*@&GC3FB0I@!sIbn#Av#@gBccUYAOu&n%(ULq$Hq6sExq6L~gma^g z8(AVQB>H6Msa;Nd2C3-4mmyt^?gsgjpzY{CTNS_M9Tu3M(zRy;6TFx?U)D?g@Z}AD zrUobfNj%6+AHYw}Mr3waK+NIemTHRqIyxf%+l(!Izi7=PrV5vpCG#( zPizj|(q8ENSJpnu4CX)eC}r^K5203g?_`u@OFuzy@#-IA zT&V45aD2|dI9$@m*tZo|P?Ri~iUvLSd)B;VZG+$X2z-6Yq&aHaq0Jc){WC%=QKySK z@EwNW()d*|w!>O2A=*xkw&DoOBN3q((FX9TC;a117U|*D*hL&CKs}uQ%2?1AI=O{H;v0 z43k)F$E^*fc4^nFRy5}9r0Hc`3sdOQ3=YgxIBA%VT~4P=Mvx$X@*>xc$e7wOE^UvD`u8}8zesOd99vn#AY%qJ!-o4;1+kb z!iY}(8NOf5eg(nUktC-g!iYm+`e+8-kF~7Q&`EWkQB@7t1&t1AFVaaPbKw)>BVb7b z=imFujBwx~K5>RbM#Vw%Wp{6j7xasbJ(G!C{99-t!pk7BcP z$eSp$O2C`Hv9$^YQJNi~!f}V@4-g)1JUk#7Cjda!#63)&2lhk2XX9zmqs~Z))yKUF z>NNBb|5x6c>-cH4rMHyli*PG2Fgt`9Si1cE0l%E$EA$71o(I4vIQU&a%aX4Z%tDkV z2Tj8jmO@(UeJmR#<4&ye1e016*+wDU%Z`uF2qDs;uZYp3d7nbO!2ZF!T@^}oc&t2< ze}Q_baX|Z-AzpUEa^2%JO71d#1!JEjVhN)$mDNHp5sJSJe_7{fI3u1Kmdtjtv6!#_ zZdOXk&HejHpS48KZ8wJf_>U3YQ$*a6Lvo@0I)iW1F>>ZiE*;B-_;m+Mr7VBO@qKv~ zPbycst7)xvhfjh4iJ|`#JZS5sIa%~s)b`*v0E96-0ILy)hKwBaHR8QM@DNLLbP#Kp zo}z3-HXbz!uOKU?oN(T)O)`I0XE*ZG-9o`b4Eg8q^^(cr)_G!YD`2R~!mq=no=~Me znAN!fpfPVuA<2*-%GX5{sFj6PX}iS-2qHp(P5xIu_W%?m3tej!H8KbB^qHbqzwtOU);0wg>K^!MzkNXeL_K8m17mePL^Q{7l_=wdBh6IzyGEX3js(?=+3f_dAzlTD0FQ+kFzESo^J~aeEsId?0=~| zuMvRqg>O-TBYwxRveyXlS_xeo&wH!AaQJNrz;6)`cCaZF$ogHTZfJz4f_*+V3&$4F zJ$xS5hfQ=0jx;PAQ5Ke=V5ttzNvW@Bxh3X8f67HN+{U6En(?Zm{TOc27=d4eshwGm zthTyGAGHthXr)4PS}$Z1$mCk9Zq5u|QpT#AjkZ!aOV1r%$!yiG(R4*6DGpWtIpOjt znrNHzjw^Y*o~(*bdn5p35yOH)qkj;_q*;w`h4I?q z!Q%>+Ln4E9PvFTsm@zY1&;>lP!L(#wN{YsR?D!`Ccb(jpa;P2Fje?v0|jE1i7)*dv!0ulKmy&$lVbF*Wr0~LstC6PA_)z-5A7_ zvf>5xZVsLs+nqnNjOix7Ujmn@X|9u`c(s`j>dxHi+|ul-ot`F3ZK`;^tsnGeL*5~` zzyJhJ0DzL~&fws;T1<8&JbVp8BteCk4{vGI=VOSO$lS6m3P^uxxp#bkl$;0vPg+i? z+xbku3*%=GC#@+>BT+@uPk|48{lav%!fH4BCjb};5Ro;Qh-@zOXZoW=4Fb+enu?L% z1{Xw&UKe|Cgp8ARE}y<$Y9KH?0H%3HyU$VpK0%0W61K9g(A{8rVn`b1io!o}+3?18 z^h)5+s>e2Ze*f3)O4?P<*xxn8o^IO{9lP$`iR7wiRM;XJ6#*jQ4zjG&P%5gdE*hpN zO0-T2k>%)$CO`fMK9tgo(*lC~=mAXAtR|+k@_2=qq;3cv!UP2XnL!AVS0xN9b!q+` zATjY_|Nid=(?^h#PFR^t*0GrN?^s5Jsu@Z2p!u1DXUwEy1$`mz*L=&@{s|1&YWA8R zBA{eplNV}xVoqRaYk1z|S!?#1Uz&x%$U@vpCXUDa`)6L`?WI75?HjkGo6;lm{a)y5oD7QLC?FFCxeQ$E#HVl=8IL!kv-r$;A_~Xjwj$a z3J_uy;y?anWZ-q{9=-=bLe48=BCFD~Gyp zXWAz(YFuxAJ}>rZakwth!}ore!|Oi67gYc#M(AizuMI9x!`k2+UQ6j>9$ii{)23JM zBpQH}al&CP1B6L8-hBVwXf=aJXk zXj^iyqP0cL>=*7#zp9Uc2K*Jc(G!l_vZBN3aduo&L_3$u(2hW0M*>8G_fK)pf{#9H zhv0jYo-zVIBgy5@U$39ksxkmg02Bva06=*0TRj;W1A^tE4$-iK+_LF7;;@Zb=%`hL zcNH2Crt^W%yfRAL3}=9D1&W2n&^^rWmhfYnkJ&qC|eH@<>ua5;Wl7%_j|z zZj3>Qm2Yh7%5A?O9PAA%bZdtI(8P|z50lMuSOjh{c}uYklOgQ_pB;Iy5&bZFJ8k%lp4 zEs*phibR;pWc7A2h_dI$^^SjL5HH%~umDgw-REPNRujLr^rgtgVcs6~KG9cocR@C? z&%Hv4E$NJp1|)KQ(t1Tah|MnuL0@(!*=(4i$*d~^Pu&HQ{%yQ{l8}$uK9IH-h}RowCmm6#}~Jkc+X2Z2_W9`Sf3s5omxg_}x_BtfVv*u)kIjYkbxIInkh~$N!{dFxh@}(o+4du z!sBhs@4|~}|Lq%%zDmk<*|3DD?~{wo9FGxT2lhx|&`vU#7a!OjG_-v9YmPySS$2xONY0?jIRCv@LjOOq=TDZx$% zEp6Ny+4A742&{)Igc1LSswN~apv#ys)U(a%80-8}5DWfu+Rq?RY80GdsVmGHWfj5%}A?6oh9ogjB=tPId|8IOys%z6*oH^imCBbg5;hAaJsc9_2<=&;-I_wIU;h6_gN152P}T zPf84*T9m@Vl-o+{m!tH13GLck=kvg~f_j5iZFUHk@o=Yby%wv-mEEirXGQl&6S zX18^iw4SMasB&rzG&c!$%)a?WMKPG$YCEbVJBPLUZ#qkqO>?elAoFgwGW+9}dYw1f zhf%&Px^YH*UB~&;OXXrE@~RRR>BIGE&P&8bStL6?F@I?<{{8ap#JyC`@pkj~8ACbo zC#9*!l?Zq&Z)Sqa4Cp^iT|b^9H5(X|3DR zP-S%@UqMa89ZpuI5t$s%V%jvNb-8Uxs8zowp7-8XlZ0ebCl)jxqLq6KJ*MBD7uBC_ zFb>K5umA9s-{JepcaWo*cBsrNbUY5mXLVI?YwJN2FDzmSmB`~5BGPP5FQw1^zSI-EFv zU%Em4n=;MlZhyhB^YZ>vT)rRr22y1YDZ6Y*&AU$hq-~vwxrGL8hW=K;&a4ZH3$qjq zpsHKB-d|(+PA)c~l#J54E1b@&d@-@x9}`K=51EQru7{)4RTc&qCo-I@{%}O8#3@IK zvXZYLs0qlu914SOvJ#*xm@vS(kue%E$hzCL0)NYXx5&dGb+Xr-`P*~75kSj7ZOUVr z?G+`o2#kfbgksF(m zVpr6ThO!qWranFiM~pb{?po{n34wbX27+Dm;G~2ALTi`>*lzI>9V(B^YaG?|_E=b) z!dDd;O=GA*g+8%-h(YE*eOQG7ZC}^-RUcgKHZB zio&O)R8wJleHmVfF3gR3dZhioMw_mj<T0!?1JDRx zN+T}&tP>;a)vQE~gpiKI?LOQx>u90S%FN`#rYaV1-p|Y5V#z)m-x15KGary-^MNcw zQvlVlOWq0>EQJwo%Tu$tmd$H6ETS|`SfT+9(>*8!&v>(l99239Xb#2|T%Ycm^lJ6; zBI9qX66d7L6}-Q&!&fpn+s>`{`thOK^GD3@O3T(BLdx$#cdjY`cT~_Zw(_5Cbunz} zJ@p0LsHBl}vzbR7l@^&iWJqMH1Vx%sxsK{$>i$PgHSr%Bx7gIXqOXjm_l1$^L78@O9BmF`N)d=3J#S$rnX0M1hN9J{ndrqoL7Ea76sK| zqDr2ACGwbj_hj&n)wVCpKNY!a~d62clIeC}sOg<rfFW+* zGtcUfy)2(h4J@3vdUqF9&S;b$fV~bF9kXnvWK4Bnc*9F230`4{C}~Pb{%cj=>y5U}YxQOWVS5F97{C-_zr0c&0kPKa^{m8>{=p0UJ#A_gCLR2iWKQLc1R2hqh`` z-9}$llB``chy8Y{j&ox;+%a(IDkV&fD4C?Q5#2Or)&i#Cesy$3n1v4mei~oY8o(0~ z#!E5F=VjW-qZCJpZCt!ZB9x)*rZB0r$V7^F;C#xgSV`&aJap5JZMsLFD(Gi}si5{O zPlEhEk_M2!&{8`hq;qOitAfxzA>!W6+$fI!^kE4G^ib1&?IviDauWPgv5nSc)?%CK8&63uY~h&k=MxWE=@F# zH0F<1BG427;>8=^Bg;oV#%zHcZi_CH zNNdYP1+CmwAfxxv51BH_uviOKZk}rmMjZyszR4jYL^KLIEzj?GE*XjbMCb6DiTlvq z?sf!88x_1rl&kFU+Amqwp)l(i(gNmDl>Tt|I>jHF=U`WQ zKxE>Of~A;GZ%*D3poSYAtyR>OK0bUT{sSPP(?cs-GVFXc(uX1v;j5HW1fC2ciDfQ` zRTG?_t(F4{>yE3L$bSghIV%Rq?S{xurlMI$c(rBqspR4gsmy=UeguOS0&W*RYwitkgoZrpFs)T z2Tb7MP3G@ZD=Foe4?v&m!azcbO$9>efNUOUl3g-N?QN9?vNxol9Q{&+$e~UGf?Adx zNzTF5o$Q6ReCIUus1*@0%Bqgm6Zgfv=JzWf|Er&0Frb&_Yd#f~lWk?4xn*1_QM;o0 zT`i2Ylf+T56$Ug&+sUt7752V;4&C3Iz|_5MEixJ2y2h4q+;n=>Po2G4r!xwDa>9CN zfitg!zVhl9YE)z>rpcIJRpi4?Oh%F7>%uzV!>dW0S&AS`QaM29<_5Fl^R{AhzeYku za(DIpB;s z03pWt4hrb$$S}lk(A%tPwkfly6E73H=Qj6Z`Xf+@aG>p?s+RDDxH49!p=t*@TZPTX zGh8=LL?4k~&tlm~qqe3MQQQ6&xm&GmJUO@|SL{~q-mk6BlOF#fqDPb5)!^K#@8IzBaI}6l3m4U==#8!9r}l@? zmq6#&kiq}^dCK~~PwU6P7^;94Us{7lyida)RQHAVf zP4Ip`%>LCr)4O{Lncwv%X)Nk6aFJvzNL9L*1>C{&x$K|O#5L2W8=S;BXsbswzopn= zX;|?H_e~8E5@Eof4s0G_=wT6am)??qhRQtmudaAtJ#5X_@m=N4kE{|xX=uqb5&|MN zUu$0NnTaSsgCi2kFu5uu4w=toJsDuZj+r zjR;%C2jLm}bV>$|^trW~+e4x%y46+aj>DLE+2+m^;;WEuE?UR}&;5-ldk)*zLS$?0 zSwq1D+-v4r9%I?Af34VU^EC|eZ9gT6-Ev+96#`ZKX}u)|9=JWP_N5- z^?$#4ej|P_1;a=5;QHs<#tlm^Nq*kn^PYV04*8D)mFRQ41FyhAj7{fX zlTw7$BDqe^?W6ul6vN?)8CK(gKj3@tQ2Og2!OvV-OPPfK{rDB>Ishsd1Xu)*u*9JR z%V|V+GS|XJ@B{=U!%YNLungY)AnPq>u-ReySRg0D)-`@YKEsFo=_e;3WxTL@I=M~v za@>4Urc9nb=EMTMUMnYND_+E1*)oEP4H4omB)+!k5VBz`_wY^f%hs6 zq93I~h=;&bFz$5g^=7cUsr*f_c7}#d9c^(tai$!1-+?U44?LS030-)x>-e`0(}yMpaVDK6WJh>bw>9CA^hAg0Wiw#+pDFW+7XgX8u7B6i|ZB)>7` zUphVnz`^fSnzByUAc@XH)CAQhTdxR+zi6_p_DxE?bE8{*$b0&gWfw zy$z=ypqhrnT3=0e+aj0W{3ctt$#UGScrt168>Bo+A5SOs!11R+S)xuXikeuQ3Ox8m z3#pkl&RHZAq@(Psj8u4TOYejMf}ZN1G3xX(;^m$|M1N$WX(>J!i;DXi4L@C*2_{5L zHbUuX40|Z&y6*pteYPU$WPBO=ia1B;WR@H;R_9|XXVbuIr~?v7K}Q%f0?44Cu>P`Y%j-YLp>rP+nm27Nc09wkhXvKw&8rg*v(E!4DLRbkSty>6?sV7IKXo>|jck!N!> z%#)^-wU?~pY$=+ZprP?3R9GL=rPQ87a(K_d7_N&9Axgy_FNrf?VXM`SS|wV9#OUvuBTt&~iI(yDkNpjh09^dU#{q93*8V4& zi9c*X5mWf#>IG_(@{=3}hK-<*D#&OE|B`dAfN~$p{zB4%a4+7*rBTz@(8c3xut!%C zBbd5))5&E*n5^Vg2*>^C%4SKp47sO$qStUA6)D)&v{Ov8*@w%h#~QI#=^ys9it~Ri z$y2vXE}qa7xTH|xy>5P>WDC~xx7dV#MhVzo!;aZ>+7;cemqnNRgZ)RRM_%EUMWviv zzR}`8&V{G<&O~iyzZ{pi9p)#!JPE4aK3tO3t$gM z$Y+QzEXtrN=Hz!iTXqd0j`luFDiFAFK4EH-~-oeCQU^+dl zN6wyK+h1vESsv>74l1vBO3J+bi3}E4@Q|a)inb1j(OiVGhG?+xy#~wZ{F#`pvo$J^ z-ZCL$_$+l88QV=?i+O>dO@+?Vg4oYQVB!q;Xt@Po55AHr;wXn@VBroge{eES)fdZp z+Je{Mr~-gZ8Zm?j47^0?W_>(F2;Tu{)+z*aS!m%qyrohRz!rQo0y}x~f6+lgwDHH&ESjVH7KgRc+r9RN7ahTbG*7ClB{2&3 zbc!86@On$Q9ByvkExlPl-i}YeB6ME;MP}6gBA}YiEN|e|;c`x`bbXBksLYYT( zOI^3D+*@HjQD&2t^8tio92hqFlPe48W_~-jy z4i2|fM)l=dt)!IPjBS?Gf@FAtXa5(lRK|WxFZp=g(Y%R#z@1RS^vJNb@heXKt%k+uiRfy+&OsX{8I${C7f33XW- z4`}MCztjJ2QmM@iL%vdT;m5l2gj*vg>`)%nR?}bU4%3039@%zGTdEnj5^#BqQwUG! z!ILe_MeV<+1WN)+X~5K|4vrg}DT)fh;P`Cf@n`zkmNg#Z6{Y&vj%|*LS8R#CL)pyK zJi^SPZgP#N%7aD8Ad{hH0y23}*&!0s>A-TDEK|2-7N>*v31X5;X=cLfZ88S2Wd~%Y z^?o%76p)Eu9H^YIA#vmPK+Xl%f7F#mQY5hvtk7hMv?@?Ua}l-185FS!GyV;ukCh`M z_Ive;V{!?gyyo{-*gV02d)7K%*i9vsek5R9o@*0^1?#FdVWSSJ>!RYvKwwwyij%RhdjJaD+MEHk3uvTwiq6*`&Ia(7FRzT~+%ZMQQ;gG}~K zF`%h>ZOmux@XmsMisSHqFCnCgq4?_cINHy#?F zww3v`q~?hiOsECs8*B|^-bf^q)kzi2hQZR7B@iqo73aLG{8<;6cE;(nN!mm=>-fYi(yCvBn-@XwZLf1WxfM527;_bP` zf{v7>lvwGiZ}Ii=KUsO{RjZ6tvw44}H==P=oPKhf5)_aITHHehb)Is95IVqER1q@> zh=dAFrxq8;kq!AfLX7dumzSIAWAR~j{l}=D$fTE(O7Zk5()G`zQfU!9smOY^Rl)~z ztwR_OLzu7dM^bE|yW;fMP^dHwdDQ>b_ZkMgG1hgsAI?R@WZ2>UzxnpmbX5){_Y$Nr3#hhDdy%Us;{st{0 zKT<;4!Vpf~1mputul$M)dX5|uKn*|NIQUc3!ntme;ACW=`pf6yurxZY9i<*L_ET8=>3hJM^yuPi6ujI3p&3%%PbpBz!^k~6h$#ZWZ26n0@p0%Zo*`b(*>gtP*w0XkMV z2{C(h=oZ--F)uP5N(BA3Ywr{-l3)xz!BJK$m9j@H*?MAr6pT-H-*$dSg?iM+`D!@> z$Ka_VDng`a%#B`(GGb;FSm2Jz!bul3OV{xCn_fuSiO;Xrs%^^Yq?%PLu9b>O=fVEK zA>$dt*Jn~mze@Lx`3W9Mwn9gI{;%bHiu^63Np&0~seHIb@I3fMd}GgNW&5dvI!ZI& zO!F!|mE6P%z~VqpH!1O^k0g5y8}m0%RH1-VKx~w&<@g6LI@@^}!R5Cc=+KvH;g7v8 z%(A$ia{-p0dp>@_3+}}tO2&AI%<29+bZhkehhiRewK17Y0!z&_VC*-1y8;nljIT7F zc^pLDa)TJ;`1{QuGST6r4;H#)AXy-VY`#qOicX$DVt{p~)!`Bh(!*5dA+2@$;|mME zq;;+WE`2W7inT+wNUDK3MSh3j<-$G@?w940G}<|>P^TV&^#xJ;JoEc6_cJRqw1%Ob z5RDjhM+>`fC;LM|T2ZjVf`T>-hy4qIm@euU@r2=FBl$udyXAcQ=uy zeo6-Ai$QJt^g`a~`>pie=G#{B^$@Xvstcd5??rbuxUPRvfAPef-FOWWDN&LlRIoDr z!J=#jPMyeeJ~&@@xD7qk7S;~872&YU%@`v~-scX8iYN%xnWb^ZY#0KsME^P<7hv`b5!@+O7 z=FYdB7rt-3?CU0PXisto-d>w8OVUdgGIQ3zB1w7(T3AHr5HQ7~BkhnG*V0P)#4#vr zd@8;XVev&;DhgKpRxq2I1|SkHkQ*;jSwAkbMqq_SR3hzepZ=O5>42JEINl~KUZs5h z*^pNK-h0inBlLK(Wh?6O>uT~0KQvcgzj&!Mm995IyTcKxu}>tzZ}r=tvROYJYXrl@ z%Jqy#qcf_(obg&TPgaoaL#7_(}z_6 zaMM`VSw+CeGU|0c?wo@l#8JPYnb^^lq~15OEMwJZv|~%yy zioc-*`%_<*%?vMOrigx~pJcAtecS$7AxkS2XWH+=shpx$4Bh??*SK=?vl*9T2hH0? zRZ1mBmAL8O_>l_uPD2nm>OZ))OFSEwxZP}+HqW&-dJvXGYY42BK9l?ENq!`X#3YQI z&6I&#vqMk7AEd$SexbKJqhO`B!q`UB!zjWzOXm~lLf5=g5O#b6;Hh*VmLEn}N^xu4 zx>wk?3fbeh!~j$9$pnlubWTOcc^98>D||;KkYY?P@VU95qOesfY#LTaSW*F_y(=Y5 zh9-&2;~+(sm(wTm2}+Aa1_V@^)Y!V3x7#Ya61?|*I8RXA^w_-497vK6iGPAzaWZ$0 zV)jHTF00ad(mH!$d-LkfxiR}Jk9OWWU zt!G@F2tE#&-ocghuTYUO;o`)eg0JN#kE~dAr4evhM6!H4tI|RjTg!=6!3E{2{?HH6j&Z-)oa1PeX=^ z8gV_amdx?*%fS%qv9s6=#jkrC^s6^d@#|Z9r}*OI%imkKyQ&%fT0W-;U`(Q~Q}MsJ zF*AN(^Cn6i#ck1PD~m#2qsA|qLEvyRF-XNYX+Pj=tQWvMPC3wS9UjXjoMQLtZ+MPZ zDai0}sP>u(06q*o7dQRPq3hu#q}ikjkLLcT(rR3p#Be$tVJIuR{s?MaM>qQTn;8vh zAD|_7MGlTnr9ha)U?;x@@!<%QeP%}z%pQS9ibJ$!Lyb1`FMAaJY{kE{ZJIBU2RrN6 z{=1s*?+jd=Sv=&|{~Oa)%gx?UurBseI^G{p=HD#Cqnoi|M9y>;z;?MPYrgyrl*ErT zK{cT2W0<6qw)p#A%fb3vH1)wPD5;`KnO=mgu#s5shBV*Q!8Zhw-hy^D0m7I;@CB^r zes0vl{4^FO`M>;*H5hQ~RUcer>zpQ(`YjLL31w|{8=3`AKGLv-RMD_U7cbk%OIsNX z4JM}`7gvQHBW~{d+sTTZl)uO?Oz-R)3;EL zU4i}j%1>t2&0JjA9(~s)1m^G6<+@qSS#QeOn)O|n~NMKIVN=~jDle?DA8~o1^vu3_%_-h z*JDyBG;l+W#t{wUZLp{O6!j0GE6I2M-ue}W?uqSx;+k)Q#tc?J%l-M&efWOs-9`Cw zIdhM@m=L9PKSIMo9F_JD|7hd>Z=t?7qG*1aEY%<(m7wH;ZSiUj@u@RYrzeTc$Db*_ z0(tEHfSI?!c2`8#4i5is|A|au_Fw%>dsWAOwvDPK%yl)q;9jH4qCV@d!l)S4GeVk* ziOtc8ZAzHz3MVJVN)TpFY{F&%)#h51qUMQVWP)tmkkU(@Ki$(DR}Snox#tZ{*Nb3- z55J*Zsd9pQ2@3b}c7vt+lB(e^aUrHvSVZUp<$GF^s06?;J4RKpQHPNtI|i^_WfBIj zWTHh~I3D3irb==p76F}AUu+Hou!$mzZunoWs`j!4V-s8#9q?rNf$rBIn$|xmM3)}9 zH;W$CYnI{DL*C!IyQ)fam{Q&u6uWOD3vSatwu4r{ifDxfJJK=Y9@*m4^U7jp5mBUub?gx%Q*shD$ZDV{ahKj- zIw*~?=$1F}3!Z+~KoZTl4YjatM6E3}m3?EUcUfk8zjPHP-_Xu!8l#_aPr6dhpX~2x zoj*f@$c_k-rDgDWwUw=RXn3Nc*gn7&=QFt9Q48CKMyvwcKC+~qKUmd=f2HA_g zY^n2_dd{gTt`tZuc4r%I<`-i@V;!+O4Xi$nj9A~&kI*Wd=F_2`N1~RvQYe@c_-L{y zcZgRB*{YSVP>4)6zxqG_^A95znXd+`tAgz&&S))dlZc)}wHtFq!h$l+LLx}mL8F|! zGSH}Sw#TV4Id^L*2-@CnrZ;I~@r>zJOt3~g>GH{=FS^4d_ylkEerTTyV_w2c`0zB2!F(&_UjdjK-fr&+z~N0ssb}L%|%$C)K!8@nNBB3j&B4O6MMVDqH=2^UnNVB3$46E*Gdcm#5d#7WfN);LQ zkVC=8Dl*SaUE#04WTbGNel^Epq*og_Y!ybAL!-qV^G-Pitz;C97&%#LOxnNZv_({j z>KnO?la*{&1d&>$;hg7VDGm?1M(zUaWY<=!j^dRaZ|9>LPR^r~NTm3o?PuN~89{gf zMDRogH-IX9mkdy=muI0mWwxaueO$*4og}8?M*xB-)4JZEt#Z*|0^XB;VWvjrvD_e% zHIZ&2o*$AXcaXeeoDrrKtqmZs3{vq( zLMZi936l{(l+v}-)J*H zrKJ_=6h%Nm;Ny9}|6ta-&)R3tKKplF$#<=%X-`Riox3gvPvD3#v=9)snN*5ag%+P1 z2QDt3{I@X(I;+2BT?Z00Pih>GlWypL^#=fEHC?%JBIh)eM#Hj*3CBYTwXH8-FEPY) zxQ(LP&KpNj)1&g}#jHb%oHrJG|iUT5_-->eUiIz$ zqBn>sv-s6?nmM=Jju8-^7mq?S?M8rad(=HH4is_>tA~LKtIqve*}xAjF#|Egw~@GDg5E^>A@$FC)= z3{0tR8Y4h?>RDv))fusRG>Y5pR|JunQTr05SS&vdQg~6&u%dsmd$RCf&wLeAS^5Sg z2b}_=^-vI=n{a38cm?NA5pOl+Xenk1i~!%7``k^HN()SSe8N>$GuW}CvCfxZ{ab+y z@~w)##2T~F50k&py|Fmh(ubQwk@mCx{gV$sMUXWjF?gDR*1Y|G< z5TP;o?I`M;g;DE_P^YwnrT7CIGn(0B_3x8}@b%{N6VXyW1}_Dx_FAY2^yyB7c~7ou@wtY`r~#$r-9a5qv{X~x9WS(5RW z7>r6co@;hn+*j%%X=bvRzi{(4-Ch!&RF)7_u7K6e(-7(F5{g-tb^4l8!!Hk=_ZA!_ z%(v4tqHhpQt96xXX~h+dWHqxA9(HUx`|$BS!4p#6meT$g&xBXGenvL(FI{_s-X!Jb zc$m1>2`|}0)ihBo+V-Kik|gC%xg1fLiqb)fS($Ejm^+01Y~H@im0`;dsgrD~fp45h z^Kb2wX9vn2KL4KU;faW1I6SFbPN$VoV@%HpZj6#D`lNGft&`P4@zi1eq7R|N2Eu8V z?M?OB5Dp5(N9pA?+Mx)8xX376bp@#v19mfEij-lM7m3v~obigyO@bTFK8L5woo2bh z+5)kP<~md%4Y7C03+HPS_w(kGfol8*%}2XLcVGQw^qw1A7JUaC@q!)OJzYIaZ^+lu zsiV#(e0M}mE7;~5w6j77-dH-jx*-LVSSoz%40g&Ly>Z=tX(74(JI@V?j0uxo&K>)c zPJ+e+cavju<_zdV2eJ|=ZX0rGHO`WxMDX<()sE#g#C5*j^{@BKHvp*3T=!8;YTZ(1 z`iCQ$9v)q&&L#WWo?VusNEX4$u9(9)$xOEwPXXIqU)FB-l*EiRQP%_Vw*PM_G;7~w znyU9W6i=|fs)H{p0K^DNacQf>x-k}2ak%&>Qu{Oo=YDt;v)f)65T+g)ZZ}KclNU* z<#AX2uL~7jsuV*fjZKMcoRHU8{&W%PebiTv)x=@4y4b$S5Vm-=Pb;?X1oQD+PqPN^ zY)H&b=_tdH3Zx9%BBmQN>P8kVH&YFp9t1c`3!L){?3-G;GNI% zP2SkLQd~BR#UP)1!7Hs4VwW@>!NE1}mLBT?!c!S5;7tBLV09Jzax%XIZ^(!I#HOrfRy2BgXX8ApqfP4 z8oZWke!KJ40C`)c45|(rWiM2^ydUq{3|BVs((yX_laF5M5cJraB^mi9)_a*zv&wC> zxc|-1gLWlYBE)%ei>9qIz^aJheU@XhKzss3`uz*q%M+vt zTp|PcW!vVLy8h;Aj;J;$xa_dYdGC=Il|WY#evZ0h{@|L~Vq8n|XPp3FV0tM#QQ4*P zj|;6kavU;@`==MXdqs2;LV&P=?Bt1uQtI8?xA_j8L+$<(!pYn|2|=rGt{g9$c(sp{ zFy5@$_uNXCgL2K|aA;bNyUCyzlsYZI(H#<*WHv*Ca7GDiM&!=;na)xONmu|?A8KZ8 zu{vY>p*K9sW8mCPn@>$efY9`oC(sf}k8aw0iA;|IMYQ#$*LF5Z>_C!Aun>dJ{bq(OaAg z>lG?R#<1foi~ahDNVzf~$u&>h6ib2pbUqm=JynmoEHXrLD`sAs5$i9nY*l%=<^T7e zpvM35DX$V}28X8Cd_A6Xs7eC|?jD?=wj(;vI0BH@_^Xe4x_^72J*4AGxSW|sHS7Bs zZ5mrfd_1GrJk3S~GvR%k>C>giu&!QEf;c&s`g-p-kJ^_Vo7WvvfX~n=_N@Ib2Xq4$ zh|hVYOwC!W{fS*B$4>xtxN-ofUOOyI!=|(Z02zT4YSvVI-XwlZ#C&uxW3JD_fW6Y* zlCuNAcR_!K73afR&M%UFVJ>>BWF(EW$p51|XZ*4|vt@S0M^_s8wq&=@+z3kL`|cq=N6m+%1xm$$=Tl;-zA|G5B$hP7vzQdIa+l0pFEfETTBLpSuVqoledHCh09r8Jyt$GU zKmKq5m1XgO0Mn~+g)6h*YH%E^95s~z`jO?sHbm;HGZDSfAL%TD9MxcDr-g?$&{h=jM?9)~}UJ2*rqj*jB;2(F3~Te#8OcnHIh6%-VyBuhJ!IigD+j67C# z(dp=93LcJgN^}%`JobLK-WsjYnwxaZ#47x6*uP;77yVnU=d)>0*H;l25~Wq02PJ2o zWVO{*y;aRMhji?sgYgP!q|!Rt_~dD&UoHMZ*_rC5s)I%e2fT!I#y``Rn-!_OpV$&QI*h2=PM=F7_h#y2|RF%Hs;+KCu+`_x~2em5X8Y^C`!j9*_Dv zeU_F$L#m%24@ir${O&mu9>074ikSI?I@8arhnPvW`&{%<2Vw+3S$ zP*oMI_po44!XOuvX{ipEFT;jk;XpX?=iFN=vA+z@-g35ewYgyx6I^b~1PwCfLwBV> zJ2~nI-J+NZB6&!t1SH9qqsWOhN*1MfNpAR;Wr{g9P=8#pxL$BNJwPT{ZFRsww5)qc zFCh2Fb@}657wmFQZfiEZIuZ{x_k(aBtsFpy(A&d)pjg(Fay61)Jbt{okHfP0?6ZQt z4K-J%_2Ia~nUh$CV=}B($^MkF^07z9u+Z|;$2q~;5FQVuH~^wBfIo$aAAD8qu8V@h zgd}ZE;}xY$DOJqV`+d6{XM%IqKqfz#hNhfxL7fVLP`=2gdLQ-85>p{{hKC~!=i+wJ zww-C6tw^6P#D3u8J{coIX-5TO&b+qwOIO+8%R}biq|-25X?h%j_%0G@+}6k}G63c2 zPa`9JM5Bakq6v-fjMO%L${0*&3fsjnc!VY_GO{r}eBxWQT`PiBgG=f6flR_g<)^CV zFLpbOwb>1t6yK}f>Jj*t5;Xq<->z6YU+ihqBSAA=KZ|rQy)`e|m#^c@<+F8Fk5j5T z?APtH=eAGu=fb(={jJJel~WohLSvaMckK8yySrsmFyC;__+W)2R|1~J?jhxrwZ&Qf z@BAzPK<=h`fmqUp{!_IdET{`LYAj4HniuV3GG5WnrBDE8v3(waw)i@Fvzxp$Z7Chb z`0GY8eI$-TONuUeM?{slNo=NmNnem)nye3h0FZ;v&2m&3Lc=JcS?Hq8Dq@VevFi2R znYJoRqyERa&E-?j0{3N!k%PH{BVM-dW$N5;$(zhf9Pu{g1?Z7Stj7|D6+D(mQjZxv zzZVLbSunT3S6~v)*!oZ%d}g)5povo6j;|t1mBMyaE<}SqlFv-m5}L|izWsy3aIrq< zc6$AnS?Bt4oRSAwgU>zM=8e8BmE!ux;5T8g^Quk%Pqcg{cuBo0UT0sn+iBjaNjThR ze8?7E)J(U6_)&$kf3Pt|7hs2@Ea%GP2n@qGY}PyW@sN8Bt5lWRjS!;2BZi%^Iuklh zxyA%|?InM+3ydhVrMgnJ-iHWF(pxjO40{;DB2toETO zq3Gi4rQTmrnJmg9oaa0MGEgS%yZvshoV!f}0DB%U8jvXJi4aeH7!Z5KwtSb4a@YLR z@Dwa@T%fJ#oYzW;tLq*GFk`a8kU`7D!+^yZDtcP`yT;DXuo=DCHR!AiR?+q7ha5Sy z2Hv{`-O)0V{S$clMT>h)2cohMeRt4Ol?Zqk=lOv3 z88w`B{kzEwe+41~y@bzegL$&;@$bi%INuLX=ZfP5zvpy{uo#T!w^}H<@oSVBr~o!B%sD z+Tejo+w)d5V!A%?1VYQ#cJ&=AHU5 zQNwbp4cQ0b;w%N@UWat(T&&h4S4#-063eg*d2~1ps&qx4k^p3WO#8t(j)VYxnb{Z# zchLUje4tS{V66W^Syq@4j^{*X%$-C8&;iy%FOpntk;{>y*ka3=0qmCIjVJ2dh-z=h zh55-8XRZ*b8WbKnQQ#sc%UR*aGBEQ*o)n&8*av08h#L#nY zhX%-{b$82?)Q7s!08~e_e_s5hW2tREP}cFtAX_NgJ7;^DqM0rP%SeCWN8PleycZX7 z)*`ae&r=8~B^gK8)4f}I@ijHcHMaN^G~G#)emZG5zXPT#EkixCrmlaucG{NZ=?Ay^@L0r!RG5HQu`NblC4z6D`;U6JdUWLGi8Dg^^w8zH#1#}ddzsr z{l`j5uNcq@Jpo$sR;<_jLb>%30HmY7{F<+r_uFXln;Ls>`XG;jLt6%#t`>H&qoI_KYbKI641o};T6Z#? zZfW*SQv%tSz}FoeOygeGC^(~tQONSxG3aRoOoSXLz+_76@D^)jjY9weOYZ6VtcPt* zs4tv%Je^+x)JNnf51>M>WFS!_l}8`}EyOSp{Gob73mtjGd8kZ>2UMn-4tys|nO_Hd z#~cR4icdf{8mFeC0{;o(Bp8N|M2y001je>T5m1n!4ifBkWIiKF9Vr5;2B+9{Z&$4% zxWy*3Calr(5?ONxWgEWlH62FR_=?>}K#RYjC>QHkOkA6rhf|QUe6nlB#ig31R7xsd zvaCimJ;!907M#aqU2m}13-@qm*(@*3&~^)qwe$&XJt-}v9|Iohiz}j(Z4^|4XG$rU z>Y_fa#X0Am88J`WXjE%N9oLeAAjJmdU*(B)r*_L1mmS%2h4~Ee!p~E2Icx6LEohb2 zr@A(XTile(P?=>38AK!WaHU4kvGoi77X9a6_yPcPm}@&S@l-p2^Hl7Qdzw zPvfDd9SJ%AN`G052thvC*RstmQp%djOWSV~-pn>hWu&|l+b;0J0)Y6%B`6iqt|hse zKl7tHU0LE&im0O$*RGV0DNjU4IRZ8EtfWIJp5{O8eu*7US}TVC=y#?Dw|g+gMwG7? zJRZymihW;FZCZK!IBqkB*wsGM0x(;OgDr^{+4Je#ytHJq0aL_LWM`qXd*@@2N>Lwk z%ZXYa%b^CMAv|Yd21wP8{rxJs691xigq%+5dOe*X4%X%p3-0Y?@mYCM|r+ zpyKfzmD}36_6Mwu$N~whI&Mh&YlF1br&efMV+GxoGIO!(_ovMYAK6r`CxhH!%9h9| zcj*Ubzvq|32Veb)4A%p)W>y7+T;q4pq3`S%=v?9IK@&s}RD1vpW+5F+J7$Pi*2sbs z9+~XrT*P(XDPqwm<`6ggTYXm0EzihU*u=ZDnKyetZ~L)1PVr*B zy^Sa-|EG4DC{&TYZeW%F4=VT4+Upd;Jb&vQqNXPU(1rj&)r`Exs8AgW4xAek2#5GG z01rr*JuPV&-jo9uz^p~Lq&&pNXwN)@yOj+uq*C5_2LA=l-+Sbwd)jdg%B^jY^TFq{@)s`x&F9 z@Q0@q(|g~Sv&sL!QFeDOnAMdpNvNgYk&#hkAOG5rU0ze&r z4jx6wO^gt}V`X0*UIQe%=+FslR%Y>35TAe(Fra)AlD*LY8FkDE9M& zx$e9?JXbtpFazX5)$ypST4u&YEffmUxS~d8$!FAYaI90X;zJkZu-mi?kMUYdm)yMG zzY-~MyQiixU=Y(jEi{Zq|Ax@-Ckg6a^1?V6EKECR98+wm6SXMH%;%1JM6J1RG3;4c z=hs?4YxcL|B)WGd(JZ}jh+BS;LrNTXA??uLuMEuT?x@|=+`PMlSq6MGj|R9A*#V}x z+$f1o7|}_Khyt!4PJZ|Fv!%H~T{dr$&WNci;@VcMVjzS#nmk3SFmAy#lUkfK^JB!A zf#Aj2$G1dvHb^tM&!1l?R0p5L0ZXVLO0=~eL5Ik8P6Jf*F~ZJZn>0LbUKO72O~)8ys37Z7CUM#Gb&%F%4L z?{5Wdsfx-*hf)^r7hlVF8qQu@gf(!VTeMMGo6r1LA70;I%+2*5(WTZ^t$Q0_)USl$ zS3Y3{)}Azh15YK&0Rlr6lPsWtGOSwJ$Q1LuX1qU*LCZy__-om3Puy1Zc@4ULd@RLZ zBKSnzM{J6jqy>eWuFg2`b_IQpTC})UA#Q(e2$SJLH8)Q z938@rA_DLt{=?lBIZ>Tp`-=t?5=_lxNOEx+_!PBFY=kH1wMV`exOVIx{+;pYFF2I&g}Np1<|Qp+a{xkHQrxA+RIhYXtU! z$awx&3M7Ok3p#4}Jw7MbNUqm2a)wvnZCPf&nRW4@6mSSwJOl+0ZSjSJS@?+C5E1LxAC@sWBb3;m6LJL=X?0I!* zp(Mjo(vsuZH;(mh`~D)8%o3;M9=EF~it&m}Luq$?Z7-o8f>QVu%S-6)^aDT7y^=~zsa>@9 zgbO)V9Ww%McgJo1xb)>J`nsq@NB(+H174!1KYpfDeqAZ^VjUjWofWz)LlE3qIXmE7ydW3&V+Rra)=r- zQ^PB46!Oq0Ap<8BS0Cz~@@2=o;bG^oP#+Du%!g5+;B;^uaZlw!Ia!7YWYI8Mi2VBm zz8XekINd_K_E>M?RP|(kO)BP@z=eyD^&|*lx44YE`xuFovr@e%FywsS+LAnfzbYf2 zK4+Qd><^1QI42gbQ{jv~Yo!r#o7P2>K~a$ta8Y~>(~jsm5G&l4nR%G7)!#XPQG3O@ zHt{igJ~~PRsBwT}aWDRUuc2jwc}Z+@e9dcI?+`@ZILn04G91=r9d_;}T2V5Iz+cU$?wadoNzw7~Q=HgU6_LXu zlSag|XUJCBS<*p;u@ktA^;Ge5P|{6>H*=}@jtZK5lv{@te_aTu?`{oV@ptzkIaL~A zV@8^CcDKd}(a(=y6A4_wDlx3y5CF~?+ATLK8-egDVq)6T9(;j=Fr2g4=X8MFVa^Klqc-aE=iRx5D?Y&aA^ ze3MjImae3)BxPMj>7!j5m zojiXbP+>+svtGM9VTt$>=*#|EKgiGdmVEvaL|^)y;D4RIH~2M5%Jbm)6LxJspR{@; zSmo}_eJ%(O<`jq}v(jlFJ)mniA~oTE_v3sSfdfq%KoVgd1`6cNKolf71HukuWGm1Z zgmYC!ZlgU&Fnkcg{;LnK`=utY-`8K<&#Njg**?l2r^DbsK97C$>-?cSkCxZ8756zn z4&R1dGNCx69u>P$ogQ-2a zP#q!FqMhW)flG+pgMR)xHP{!)>a-YeC^6AbDNi0D%#G*s?-RKd%iVqvNr?7g*tdUs zX*eII*@qan!EoPevFj8g4x|-_hzr5m+_5AohQX2JiR$!L!LVk) z#^Sdgg%_9W_B=&cL+j z<_P)c3hdahzfkf0f9-hebLxNo>F~plC?lE~BOgEx^ypE|SE?QXDO#EhNB(KxL8sv`j5$mjW+3b4S{_3CYq+7{7u#{Ei z%pGI-qKkVF`GJ7b<$Mmzlu{`1&whxPt&TZztVNRYRU&yKLB4wkaDXTDIBmIDpAcDF ztRd%PNs%a1@)w6okgywLM(=XkdOh1& zM!idx3RFz42dXEZ-g}Du+^(Az)?S&QNVN3h#dp{)*N)C9JP|<@+i(-h$%eiOKbaX4M3Fy5CMgZ*p6J8jwYNXiD@dW5iD>)_7Q;L zGI2TL{tb0h2UL)RLzsG+sn!?MOrIe3TsgCwO3ICK+|5sU&Sj~ctOkUw-kttOO=>-B z9roG!AL&@;s~m%Ss5bn(l|)dz$B@+{SZG663bw~qMZO(;ayPF|q;Iq_uqBpg=_?K| zLKDG=icE+Ah(*X+y##kNTkymJBbna{CQ*I+h5L^~c2GeV@ZR7&TL4q3)s?=K@68tR zTAK=o0`)}sK2Jk^jaeZHuLVw+q{Y&8pU-d`c|S)TgHNTRy$oBrQX5*9N$SyB@L=Dw z8lS=1ypOA@+4Y`8D4J2hk|6II2lGxQ*8)yRu;6SiJf>*j@LwXdF7qlgUmh z3VJQ}~#R^=K)#{&dDiEz)$+IZ8Y0 zC7w50;SW++v!d^}eyPlIAgPMN(pTawA$Njx!GqH zWIe%gr;?}iKbZcKaDpDCLKF38wJr84u~p4EcZ+&Q*}BAJ@4gNH&WDsYUIBSl#q9eH zu3851CCcXF$yY~9FzYj}!|^n4zgo@U?p(2>hW7I=c8?8R1KJde-b^3XQ+&-nkg3 z2$Sik)x#!|4gG0)lR|Oz`0~W-(!pI#JA5OA)%IKG^+y3TKp!*vX8pa6hjqWzutPxd zCw?sa9HfRnr*APMmD57Gc*E2Qjp&ord7H3PGe2f~hkH4)Fk}t7j9VXeN8r`fxQ)6~ zE8;Nal$!d=G*Kz;CM_8JwyMyo;OhS{(4_p9`GIJ?kgIIF$?0N_v@ywvXUliF^V_d^ zh&G)-Oy{TT$CZ1-@zJx#qNuya_c&<)%JK$lmq>>Dogww^n4yV<1eRbD(y(fp$&_Ui zu9I{y^2L%rdL$Jn#uqJ&(z-CcecFq>t!=5QApz;%Q>{Z4r$IHImz64Q>T~ zoiIzzO8w?4R*(!mKnxFWzgr%VRx`7kXT;p-%Yr5s>1I||{Y`98A%Tjnw9xjfn#rFV z-pA%EZ^Zx5si^AUhgFS-~xq#`2;W7xuMQ>hltBElNjj?Lg;nh za|TpOMu_4Rf}W5W(*U59L#7eJ^`gxeNIN}s>p#aef8FPuyfH_|&0WWjMUTQktE54e zDxO@Fx4=#?Hz%+FD%<9)6X_6}1M$U|D2FzV5OT-?c}N&`9GV$jmCA_RW$*aYyaceZ z5kj-e+xjc0*_kW*R<&b7eHJ#F7NXHG0Ty6B?GNufm19_u=_)&-a%$(x9!9_4lOMZ? z-pMw#W^a}xy~Mw$8*xG-7qGLWkAQT6mCX!{3RoT}x5Y0e) zEft$kNs%DSHhy%uN8N{?c=y%SXyW~S&damZ%fA#L0y{Qj2oX@Y(LKYE3P%POQDaxn zwG&Y}a(DByf5T$=8BJ*rgFu`xY5~MFKgr@oB3efwVxuNJmjXacUweOewXVa|#4Q#>{0$x8Qs$Cu%lhv}Ft9`z#qiwyxV{WMWP@0KNnx<|Z zB=?aJlMP$cy`Zl>=rzmMwwR5@*K7XG7&O08er^l_GQ;}=|u@? zzLamPMVtyq>lRj_gzcMXq-eT7jDvQjbnr*+1F@L$PkXUD^AbY3jYB;?ePYIkOrR$0z5X#slB+UeO@ms;X^fxBQpl9CndeEqhO!v zMIo-6)tYC^G*&N0v>Jn;#{13MQNfmIeBxtaWR77%{2KX8CPPFr`vwVe-wx}39ajl7@E#1 z(rnxAn%ZRn32?|IF{&EF5fIa*`OGroLz8+iN28r;!`kvI#(e%J*zczil^xKWZKCuz z)aDXV#efnjl-QRnk80r^Z_aL9?baTtB(?3L+8db9)Rdj-4S9JD4Ue%8E_q7I2$Rng zPhXWRVGn4SHdhMMlYudw><9>9X}_vIIAy*y9n(myM>6xYC@Sm{mb7Nr zFB^taCkmER&ipKIN&mZlU-^o^O;+|5cqDaS_upW26$Gq>YKbjGp=Qu??<~}U(>(me z3d>IkK@5#w+H31OewmG+zg+mdlD)Q`ng9~ma4;0cYtD95uZU^IDH%=y@GJ;+yA7G`pF^er~xm&hHM{dp!o&97Je>e}d622h0#fpv%eS*>!sq2@2b z1i81dIcjD9onXSILjb{+W#BRQw37H3!KeC~1FeHHu+%@$4?n>h@P%?O)#5Flq|X_r z+I(W$?VZP^$RWRwb&p>jD~Ss(pZ2}=5ggDzl?J?Y^ktHK2nUJ_)6!w3){A#6L8O@a z7jYVeC8wz0Fo!1m8+8y43vjYMu3b-HMW9;G(wf|x%|h&Sa#;uNN`oz zy=bNulpSdRgG=P3z`~3+p_RhXExSj(A=GxrZv44g z9Vc>}dul_YL#Fce1|jRquqL-#zc>IF3T6!LC(_J6E^pPMv`cxX#cjxE>A6NYbj>c| zzN5dAh9G%4z`3{EuBH(1&7AMcXS1@8PJW$4mDbh4h>0N{rk!Rx638}%)dUU0VZJY_ zM$a#2tZT1oHO?@=z5C3_fBpFj94z+gCvuhHGzJ?s!0aROF#KT`A|yT`M$OscQ%A(lSFe^R$n&VlU{SgJ&-`f1({66j6T@z)I9V zK|2U)Da+I;-7?#KJj zm3&RdH;d3>tAa{)?l%47fR#^m{sNcGvcI?DjK}AoUHBq}eA9QFJP7o99iF8)#0t1f z)7+r}xw8C;^4B?Gi-2r(h{&X$(*%l@`=0i6ND7xh5Fg1B|sY3h} zWr*g*UC<8tI!Xt^rUq6lZs~;GxVg2@97Yyu8uyKKH(iUuuI~$VJ)VMy>&w&5*IP#b z)k#f-ll?pZ>b;(mR+Er4qB-M31+Y!)KiaP0AUM*;%rcDz2gf zqRLXxl?8@yHEPf;5s|Up%tl906K&B3&Q1T%U$zebo4@+IS=9I~!LR<8lXyJ;*ZjEf z%4tbDQ%6-EtxZC0u|Do39Tg30tRwD@^z^QYq<^Q-j!B1gZ_1{mXHX^lJ@&~tijQw& z6;&-`!@&{9+gtz2Boz)js*4y=%h|azf7vsIk(if<->X0x6wN3lt1P84a+2fRq);#q z2G0tWFh6DBl2yilWtRlpBAf#wTaSK+S^6tn(P zsj;PwHltS5PQA+L;Rv5hIaik;-;wK?;h^{4Fq4l#6ep-C)`yv|V`d!l!dLArvjp>H z!rJj}#GLU#Ocy;&OkJgiuIFXr33f}7pSiD{_4%ylCGv32E*(T=AIDIp=Ei|N4(Dzj zx}gHs$|F$GvZj}XHGf+wEXbT-g^Ct2>!SQNA4~t6tzKdF z`v~S3?|t!yKz!Xr;B)cusQ-sI44t=_q8+Y-FTXUV{1SQ@#GbDa)H7`5AMK5|qpc*Z zM27667!R%yDCoFBhs5Dl!gZMGB(>mw27kHqylp~Q;KXDIlrN*d#&umTopSCa(Ta<* zKjq@ZDj52FnLIsgU)md=g`f-Jcypo8dy#v6jgRCK(n_5scf$W;ix8Vm4n#oB5U*hS zkl;@+-f01gHSAO65Ui3SA^+eR%;%6*bG6m-blmfh4<}+&x4drQN19Z|M(D(p8G;() z@+;)DR0AYqHz&P}omjJ~^}iYD)@^*8*u)Eb|MK7catsFp%ya?;6$9)d^Aa7gFmO9U z^)3>&sLE5BI_gD)o$9=t#OVvy3j?)@r>Ejq4N$oXn{hd`?6+Cvcn+y52t^0|bB0MG zWZ-l}`T~5Kls5JMRysJF!f(Ed1IVUD$rCeSO99$gl?7^fBpA zQRzv@LfG;zw!i`xF2bgNi^Qvxo}bHOD5XkuI!&{jOj`{f;fm=5gjk36>bdy*ouoGY z(qwG5GI5NzjFOzrs$U*R4YGkL>cw4|7H;@Zgggj8qj(zeXYIcknDiW=q|}6u%AlWN zxZgs+#9`Ut*RoQ%W*CNd0uMv9;3G6awgqAo@jZB|LWNuL``3g^9T)v30mD(KCH292 zo{F|6i6eu-dC2MU^VhByj#tlmgeFO=90Nj?5a#SRD+2u-2(ddObd~#iML3wztY`!& z6&>cq{dcy@o<&P+&edz5{U7fgZ<^5tVc8@qEw_ZO!&gdO8;&+`Qu=0>fL$)D$B3m# z)dQVq$xn>lfcZ(IOfC>5D;V$EQ-wCU&5|6Iw#cyP-t0=tRLnW+vx0H`!_bjjmdXMpt)qvP=y(PmlxPw4=467=lB}kPMe`{Z zgpX6%1tOcNWlF?sjtdwgn;@3cxtrC8#LDdmbhXa*r)D@k z_G%5nGxj9}_5;~jv}e1m=vXPZNwSknat|03FBNn|8faIiziR>5;wAW7vGW$ctAsZZ zwAd}1n;D5yW8k4OsjRr6Gc}ZHlrSgbFNRu;JC+-Ylq*p#8Fvitf$LGu2+JhiN+l!} z^pT@s0#0opw|P0Q`Oj)DtFQX$7gSG$jf=?{CttTuTU^|#0iVS#xH^H0xw)~s-%oc8 zK3m&YA5N&2&$VD2H2pjm{HjG&){zuAC4C?vOLft%HKLBnhLmWgMu#9^1oYI6%@YS0 zYfLqpkf2-&L@AiCOJy=6ANM?Udyv^C72hg||Knjj=h)cqFyz2IkD6XQ>-MXo8pv-B zWz7CdVSmgO62z0kpxQe+iIpDO*;1`ZU2IpU?n`t3zFCqfZp+k!{!p#5hbk0Z(Oy3m z_z3_9Dw_QSV2VYG*92*UGb)M)HSW*K(=zmxv$o|}1gPMQlI_+VbZ6e5S{oh{Y%H(a z8@kRSDkWR7SUA-a>^bwpHH3s>zmp?z_LI0tOLr7#4caT5cON|W& zY4Nk%neMCU1S`D%@uooohvc7Er!Z!rYj2y0Kh$JtMlUYuIN0CoU2|}eqdF7ry=lm4 zf%xq`_=^^^?Kctt5|}*{($J|gk~VUkMMjbcL*Zn%h+p7QCE~U)Q6OQ9MJF(?)&)uz z6Wq#`wUZXU*H@6tLEx^<_MCsDcO6)14f>oUUFRG@kGEBKQu zlcr>j=7=nl%5kp*=8-qiqMvsc+?cu1p|hX^`&dX;)q$6tw2+AB{6J-Lq=J?R6d?8? zldF-ebgj0@+;CM>W`W8T%Yd>z3y4$0R7}&odh8hARaL6n*9f8ILx>zjl6(VKgf$a*(``;+) z-;G4E^(_cPqK8?`Hn$OWC#xh|5BqV=-rJn> z+w52hNg6wvE~L)|AdQSEYq(HT=1xsa0%isf5gTU=NxJ>vaLJGgHIm7zhn-n+NqSx;&g%V!|-t)R!rPv0furR_UU-R4I9D*`(F zz|f4yoS#~L>6mg(*&r@48&>uc2Mud`B~SA447U-R!=HiK^QwYF5XWHVje1<^HMPchp z(xSRx*UY??e4oOtJSDC86+Nb0{skXTpF~`_m2rNIMLSo7Zmn-sv5P~!zCPbcDaP|$ z)LD*Z*vyXzm^#t}zE|qe9j;`wozJyIoSX{9j547bqtp$}sJ4zEi$Vj{M&YQ+ZPX6} z=E*Lhex30!Y%6jD96i{FYCr0XfbjGcEZp9Ri|n@u8k3p$9<*P1C~)Ig+!nE{N_SM^ zs^g9lXR{qNXj8a)x>`{q_1I4p2n@Sz~JSKvTlLkFPpMQv;+BkNurLxKURan!yEMqd$^T$xukXer=&t)EQ^MCxkeK^Qh z`!)Y1ljn8V>kK<>!)eiatv?t{cVrGc*-6_d(ppJ!+C_3`95F2J>kPjeW*kkN>sM?ORjP{fP@?eXlUdYKJ@|`g+@tOL^AVZgt1~%4WO&whU#b$Wh988#zWd{L0{{J zA|w=%h5u+q6siB2#y*gASl}3o>^|@wo(O9S)rB@q&fnczc>XwM;1}T%YI5By#cv{Q zjlDs2VaNaej`2s6)BGNwa))>&<^){64+3#%;68^%ni|+%ry0fhr8t9Jsg|@0jn4oT z+>J89=-6N|G68VgXj#9WP%~c*cfyNRnfF)z{A2eO-@V#*vhoN0Ly{HM%EGQRc=wt| zc6plk-4KJj;Yo~G>E_0`Wy?y{??)*3`H9j=ZP8+i zo2=s)IWwf}{)azD0MHw0@T4G683+*$vI*(H1q!MB_y1ZTt7w5`ZA{4U47aT;63e5H z$$&tyz>* zjeckU#Ma0=G!y+f<)GAZmsAO*1Na@o!e3eBLKFFbC6`7> zz+UcG8gc3vPrMfkk&hkI;G)LXE&fB$M9SqlcM?LX(;uoiW3B-~fk6P~)DHzD1u z*Hrzl{zcvxSP~mPOljvD#eJstJH(B`CA^I}#t;6z^Kv$+V;!yLgu(5%ZERA$V(~$p zM2=y&fs-^YIb6InCp$E$f$WWR`1q;D6M30o14`_RBGfCZYUqmjlV z@6b@;X**as^I!ZN06^kuivhCy?LiQK7aQ6RTxJKQ({C6Rr<8C0N2nV={ZjYF_Z7CB zD@on#$0Dj|qd*+Q_#^k2O2LOx4h;{!KmQVtIBhGX5yScbC=>pNWw*K5(V4Y#)}emo zee{LltF}YPUglSf-tj+~JI2rB&fTYweUn4cuV)CqWMIIz;BS%0l;G8?wU%xT7vY5D zM-ndV;I=t>=yPTm_gHepk7JIZ;!!3C>mv^>89D;$%5MUx=!`$uQ@bD~W_ejND*77z z+bib1x4pOi_j}Q{^D1sVOrv^SU@xgqrQDZ$g+sNq7rRklR?20jL#5;7#!qPU)}fC? zM7}dPCa)vys!p->2qLAES+i8vmJKIAP^c3Drs*dLK?3JdC1h|RD8NOq+TWp5O^U|4 zp_a6;kqnivtEP(Pj;6*am*An05)ZYJl=UkgP`)>eaHaTS;a&GW=u=yYFeI`0U__I4 zd}k0FgfDm%^t!5kFf)C0XdE}<8QnhU3jhE_20w3}9I9h6g<0sjQ1n5ilt4@bEG$gZ z;rL|2(6E4mmfxJsHYz0B(~&Lj1wr0yh^WDi>y>~hm&_dW-h9K$j20pDkL>L+>DSQ@CZvfbmNey3L5n$6n>kuIWJ5eAPyxf#wT(tCDz5Kv9Eodgvg10jxY`duy74`0=4%>8x zQAGX8)Tpw$HVZ0Mz6-86zDTy<36yc-0_-bkBn6%*%0f@9U~L7p?J$2_C(Cj1G1D#? zQgP{@{JYV|Ipfmdi~cR97yD9JGX3c2QBwRDg@I`Z{tZUuTcnd}W&{ad`uEz&y~IOI zt%;r-JZ}AqC9KgEO4}lz1Wz2#|8XjI=%EfH$5lJRCmuk<-m6l^glk;?F_{}Viu&Wb zPiYg3<=pp4oBVKF|8sN>UiE^l@X46o?o5Z0v}E!*1uMgtO+{JO!#)iF&YTL6Gw+Bz zx@%LA^&MOu67jK@I?ZAO8CT#0c@P)JC>&^WW{d#fwclAuoX?=36}=NyQf2C=P>}i8 zux*>5jCe4?OzaFK&^x0|XfgZY(yu%!Kv(938R>O>n$InqK8h{L#86&847yD&raGKO zu0#t>{6M`HA&IcUq?r%j2ak&0+N&KV_LaU9h!iuKM2)@Pq^kDo7hM&F$uZ!cY-&j0Cdd350RYmOA`kYghxRJ54`ZxCrVeLD^tEC~+?j?%$N%m9HD2_w-PZ6AI^65o8X z$wsGQ(F^C?fID+QBo)RE9EnJHNp3i7WMV2NzC9;J<8+9!ex>muO-Nt9*kPWH8VL|M zY$i!#Hns)6YMjYbHYGLt(s-stf3dDFbF7mrj-8q9(R{I%iIf?aA}E~6HNFvs4#?5Y zXU2+0Rvm=bmoQ@O=*;Jm2+wrMkvyvgq+cldE+~Kgs?_?m(>R1MGr<~9a9s$)0M7gf zE>v!><^8MQ=4;T7cLlH0`K&M!95rBc1c@Z&_-M{@In%}mN!}}mif8pZUqI>J*y?}r zzX(7nu-7^koN_N`>D)4(slao|wV0&G>SM!nevT}Wz<=vNY{~w{h-;y7-O^${4#lo~ zPvmIZ|2fJ^5s8lJPLhiwbHk$AyQ^sd&x%*3fi65`Elff)V-~eSGA7w;#UP*7$T}%e zP3HCyR1N}rojXjhH#-a`Vhm4{p&$}S^Zar(k5*+WK_2IsG!8}UnQkJk4HcH*7%5>$ zbzg>1%Bi`@)MMZbbA`90dbHFx8;bZ4tG_f?`3&~nFg0m$;WHISws)fC_*O*~A#8@t zV`Ky_#``6$n<&++mYQ&_YU^v?AJNciTC#R2dOH2G>+h1!-(&+= zU(0lWQ3vK<;Bc5NH)!jvtZ<>^{5PmG4BAE8!wxtc$f|C$AD1d@L-2C-JaIzra^#AH=@2loA7ODtF8d&H2J^rH%Awcl#bTi5v#vlj03iKuABd~XB^ zL%gvidz>VUyyj~Zhz|h)#<&6{F;G=z=#r1_fx^ND(2@CU)%oi^`SFtgI_S6XrUmD_I=Lk4fFl_!gZ_F>lZ)U&~#^ z-QrhUGas+lb=iFzOeG2Ss)pjmP}@uM$pzRzgVgb;Qhe$w;nIe>9EFh>v2{Md{38ms zq@Cy1-zOl89prQPVNmQ5DlIluw8Gy}N0wB;F*_O^Plf;K-~ECj5Lz$qsL3>{Tg7r( zD+Cj+7UPu!>(W2@fcGC?Pf#@Siwcjp!UUO^xTvcU1LZ*+=EG6J%FSQl2o<-F z>gj@HZPkW9jq44K-UFQ*I5dCQ`9~4^PJHP#cQmiqO`2Y8lRLhx0_e z*o0{9@lL<7H~E1^MpIKS5;e>Dx%pm&>h1KrnV`2|BlS z=P$)yjtfwUYHNHQWz}eTsUoLNBM9H7?Ruu0+3|;SF0NVXg2QkNX&d7LM_%H^jKcSB zJj|7{BQC8+@x~M0r9Tbht#@4>3R=vs7c(H&wk}J{t(m0XjW}y8PTsqWeckf0+^Sw< zDy6XSSC^S>44cTRA%BVj;B;#hJUeI}l8{Z))Tkv3CR=PkSHUK)lWllB^`Q1HUOmZa zV1O;TmH`jzGyvX|Cm6~TFc|DG8)5Of@puFz)#^b8E-KE_v3f`Xt(8!`J1`Cz#9dIS z^w3pEs8lFpAM>`PUth(pTZcY30svYl2<-UoS`1;D_Ayilsq!mKZ&0-7j}MxiO)feZ z9L4Wx#{V-;?FF)?iC*loSQc3PQyCGAH<3M{PlS8EzEI=hn5^QnF}Ckk^>x?7Ruj#y zrQQpL9`^CC+Nn`UfCJz3$+A%A?rD1?M%}vmtY`larc}`o%8uK#cY>QL8y7N(dx@@b z=M<|*Mwo@Rogy>>e3m+rzfs!4*09$hgiJk9*@;IBR_EqgYLc2o8O(@2FmH%X{;$4R z0Dx8vw0D%rw>7L{UL6kg@aa=Drnp+h zVvfrJ18n-u9&NPJcLX$`eqw;&VCdgc+O@j9DBa3{%8wn@AHR_sWFL#USvg@%I*)JJ z{2M;xe2@A!%N6q)uXU)Aw9o3}P^z#NKUax>40@&eZ$VYh)!;1i_y!p*H*x}YE*$sZ zjkIHISIsr7pUOkcjs3RxH<^{qop%(v{#g_p3kCH%>WjWOuez^WQ{$g+gPvct`(I1Y zqYC1o3-*N+aAfXjqmol-lPiUA6&NKr1U6o!>u-)FMdI=QSubA*n0smQCGQA<$tWyp{*Tp{lFhrD~ z*QZAUIwniw=mhL!^t@*GY$-b@IRJqJ)hF~;j_4DzrMoNzP=`57x9OK)T!9?^~t!sr?3@WbOp4f zCCCmQ64(xrt$~byhqIYV5gCBd+ zZBhWBc8mxKt|XGqC78E)Npi;ZEycX}*Qh3zd6)lK{KMT7ho8M!ftf)yN{1+iQ-E8z zvNkHK;_S{%yv)vJVne8=SnP7N#4+z?bO@n985GmI5KM~A#3haGdIOFcL(D*gY8Ej^ z%|fq5So-nc!HU8ZVuV-jzlWWsEvgx8q~QEiLEp1ZXstT^@cVvXAX7&xD~-#)tNrj{u!0uV0o~Em)Dyh4mb@( zD>qqVru0!+vGMDER9=k9d;27mP+ga5=pGu6NmMwR*F+LYq-hN0v1oJ$zZafOi|6h5 z<=AXU*)oY3;JYW+o#8pGPz_=I?w!%_#Cq&u#YH4VCz(!oPu@_2(w$RwF=W_t^?idh*JOs{nKsGwg>d{@R=1 zUL$O?t|du5@kW<8`*Y5+Ay1;}Fhi>}P7>#IU`gzU8|S+lix($QIYQ5C>_+(g#h zSrb;Fts0s8n0q{+!gbB79>H->N5vLwylDTU=T+I(-l_AIo-QGMK0N;$E90MN4dPIT zazitly5PKY^?F21Ke&=|R6hw0Oo%M=C$G}N$1h6hw3Ev&pZFDj)OdIqTI%%6ku7=I_0Y^#hHrFcZQDLgFS(W?J0~>`(i%9qZN4))1dTBM-(PLe}?Aq#MIj!@*ODQ-ZU3%4~cfZWl@y(AF z5-ghViy2}QS71Mi!+5pN^>J^+56lkXhl?d)%suS;4ns2a{*YwfUj zi@7ICENHL}vsoD|7I5(33r2+?a2G0qr+`Hyp}(>bv>FW=EPyQO?$TkRQ}*RYU6>r( z7?MaBMB^wA8nf?l>AL%=n^*1CG-x%#aY4)}lG|C=qtUZt0`H>smV@@et~Yk`yGY_b z7}y1z>P89-iQSlxBk>Pq$8G7~Q|qs%)KdKFX99>tUcH^1#SA2N2*NfygM8ue;YFt; zxlq2y#V04@#6g&@wfz84QpQo1W1rFwu933L)OyHAt&Q3L;lm#QDDG{)kCS)QE2^^2 zCMr^6HCW?>YN?gs9j)ir{TZ_aL4jG;0Xs6e5X zk>U!YCQ;?TtTsEIq4O#Z9JFqB zZ?zb<6=inI=y@!2mD^y7NSjaQjspls0Q|7r{X9$PdWm}sH-Is~_4c>4W~gS}UuPQX zq&~xJro>8Zs_c@p^;vNav1fR0!FaiZ+}q6S{Cv==ATxLC<~BzkBnpI`&SM`PZNdVN z3D5OftNshU8GRBeTv+IyBOn<>h}do{@JP4vLk@i)d9t&6anIEoKPQ<|U!$fqr+8-U zCp}+=;6fk?k$7g`_Vf)N^6BYN^E&v3+odF4R*TKvT|(U8fb#libTcUH`?;-~aZ1wFA)knLf~W zZrL0b;m%p8ozfHj&LMRC_BJ2*o^yt4=M={19-;b2O&k@{=zCN5i|#1KXASOkLD&$P z{qT`p5gFs?H{4pZYLZ01{dcAKV}3?zZf=K zr_XQFxyfZ)i=++X78lxQ$;+0x2?c28=|pVp38u_HYJbRkm}EUZJz==_|Hd3R9DVUN zO8w>SysCQ+v>kQid{)8+0I;DbRIWtH!O>72D&*T`k3b7G%zp@uW1$7e(ol-YUIV`B z`&sH8q~tz{U}CmmhM`Y5`P_xRH|}oGLOE9yVkl|GI8O6xMzAaP;t=v|vLXXG41Ss) z8J?Z?)7&32OFFP&u=*S_v6C{4U&MX^1_{?043mpa7W5>OLI#`XoPzV=CcmA%S;yzG z{4i z+^K5cuX>!`Gx^!@uQurIHU6(-*J)qm^=VE50HU4*%OoL7(_sUU%-I;^>KND~OOZn5 z$YS1ntr?_9BM8IyRHBCYLx*wDY+hX9V_nN*EHcaoq)*u#xlgjmp5~vCp3s`9tUVjiP{G zvENd4Pua;Dwx;ufz6;&3*vVH|D^6v77_zgiw$MvG+%I)mu3^h<@OeG4_+KCK?XpI1 z`TyQ{sxr_@qvGKXm-qC5;MeNiW{&@bL4cufhzxKbxN}4rb2#2B3iBZ-h*%X{QOmBt z6J}!$NAtTkybMR!4i1WAjZPQO6K9#Rh&*7yG$|ToK#QFwTw!`gfu=0rg`+ok9qTm)Q#qV|bt6;$P+z zfZQIU`N0VQcN4qzWy%_W+o7eC8wo{yUv<=0Uk_a6m^W-A&2D3hUoUIhU=%M=ep(&V z6oT3)HL@-aI-w42M> zI8byeHI6IwdOhpzs00G3pg@3wZ0uK;VI5pDYmlifY8B2Y&Jwc zNQSFmxdG;(z&{fAaCUbMR|BM;ra)UPk*9jya_igJ}HsgOc>UZZ?04yPuL$J zU^Pq;5=+j&#=`N4*J#iX%V|Ii8rS{&11rN9*VKNMRD-&B)%p$mTj7c>#uYm1RcHjX}9Y)iF-+qyv#moNU&SP{5c+Sl)Zc zzJcTh+oV59g$B=k+}r%bGVr*(RP9F0_2lbo1R@>w#KG&U=}g+-`>Hq}hdsPWn>b~MAOloz*(O*y| zkeK(xaVLtFuJs7biRzW2z4(&`#tV#HqMsLroV$)YUs|dxlr5yF!E<`J{#u0yYP? z$?=F2Lc>1|Y}5@>;XuA&^;#R;m{{)gf0{+*SBvy^3(gx# z>B?sjt;dQjhakblLwTd`F0>ndwl>zCu#HNF6eOT=Ifm%crG0(={Qdd81U54a9y`UU z;jfZ0?!TctARGmsOnYA_yM4akBe|Un054yH&o#Tt*IXE&#$c_?Okx?f!eha(=ho4J zfhU2(C_uYs*p{Ga6}Jf8T%9(m2tAFd*PjB1oAk) z-uqfKI$3>`sr{1y52@Jc3}8Q@R-oXj;WhDaHx>R5P=^k|~Blir#YYi}#YgYb(hUmW8z03GCZOblGl! zoI_^&yCk)jwpQjRSS~p#V8ziK&=fswUX-m}8m|y0AOlI1^q9iF%0pSvLUAYU%Vk1N z)+xev>cl=&CXv@xGH0>m1Pd>8Y_b)7<;2s}ZcY*Ru^rzhaKKIesBJU;)CiT4BT>YK zBXCjLofDhxkh8=I0Th(4P@BXfw~(*OQF-8Pj;9MfQ`2==>Y`5oG7(D0$(h7Qfx*UL zY=FzVcGoy=-$6;KQih0LL}|1z1Vl_wup@_&lLLz(jeD@fYQD3MkYC~E$gJEFe2$Kp z6dN7FDWNyg9fj4lKdD*qh=&-+k%f!04w!*3xvcT@DuH|Y;W?ZCb0V-36@bdi1{F4h zHgLIVlmLO5dVSaq;fU1i;C<5J`bBveB5nH5^CB+tU>;LRgTB({3?(KqiBF3VwcBj` z)HMb?2WqsH0IkYQb2>I%o>=@AsXXcU8KdrHMYhn)Qm>!sBtpl!lvxlrbVhj#TiN24 zj#j>1ez`1@Ds&&z#Y+K0amNGCj=}l>RdOryZ)+-D?iK|Jq9ABL0OKQdDX2-g37 z4ah`UVL~VN#kO)yBqNat9A%+cI> zE#4(G;LU$ZqoxFp+9A!6zqpWW7>s}qCpnhrN?r^P075(T>k)I6e@0M5DW@d^eDf{( zp_fpl>|g7s-SY2XL&J_^g#)1CsmAg*waq>je?upBSE5V>HI|f|&x?9aFw0oF$NehU z1A426r5*W|k_*%J%=KGwLVUVK3v`&ruOquD&G-ozP`g zxP>NuYk`^)y1`)ndK%jAe<_Gxd#>k3UregpG`*eD*d%T?SAI7OXh8Zxzb{*M=1OeM zqJg7O1vj=?-QtsMC0N4chl$}cK7o1=;Cl=3y;8g+sh7TTD33)>5^Di+%peCj7^)}yw6Z&vDe(p zuZ*t9cC>fa{>_;Bsr!3gPB;6d`*xeFzloQ8|G3rYVMA@O>~=cS0b)xS2#w4q>?4ns zihl|=Snan6c9i*^KZg`Ri+YDpazDDT?al`M)a_;g8hMjOz}9dYMqe$Vod5fO_zfti z`b}Rqn$OY?QKeUoVp)@O0z$^zr?~wF&8vA$-Z;k7Qp(}e&=ijn8H7R{A+|v<9 zt=MT1Bnr8Od+6zB7u~~4!@#_uOT?ak#8n;sYw_N)GNLH5#j703~ph*fi!6sZ+~|r zb<~cIV*)!()7tgHa>#)f@r0DrZB`DpfSrqn|A@GJrQC&l#sxjIZ zCr|H8H0Lg3j3zfamnZSkQt?{H^(?3nq42QeU%|J%dl1{3^xRpa${E^d__Fl>@Zqih zWnjAKlot7WiE? zgeC;(PJJKWQcy#m{3+%|&8OA^u_y>_D=(f^C!pnUN}7}Idz*hBM8Q>Zi6R#zk}H)^ zqhqGiz^XLiQDwfCyx*EO=3 z@3!-ttlGvoEfN_doC;cS3{P|eUu?ir5Cw)UkraLJsIA=1!nD7WYnpmnt}=eRJ7bL9 zxfg*cJrX#P5%fHcr)Pzva8jtj-2M4+_>sS%S(y=-_Hc7~oG}ME+gpl&(RAGPM*FNQ)E88$wD17=$TS1m-Jo4LgvbVg|l;8`%Mm5LRlRG0>cRx9L z!y7Uv$YY?A8%qd9K5Hmt2UX*{LLikk)m?mc?#BQm`(gx_*1xvXNR`Mo+cY8hzpM=+ z)a5KJ;?+@OsVZ}3ow##{j7v>D5cd`slkSRI9nQ5#jwCb(S}-MLGL&-u`h}#OYWn^7 zzy@hj=J)yHcMnteC^^QX>i&7H#U?=-mE@K~(34r6)%71bS8Q5z1Bn^qu*^x~T@4zo zSy`$ZNlU{xB#|=%E<2nlmaz$;ls2lt4`9oMgu);Mxo&2fpt&kzJ%AdJ(CjU(4!X~P zN^N9bvClM<2Nq3Q8x~gDI%KK#FpN#PC&YaA8?F8*;B(I&{3=ThEh>VczBaWLx<^vy96kxAA;^J zf3O$>7AVM(VWh3#GuhO@5)qZD^YGCYICS{z_&1#E<5~vYsX@^S>1d47#)Ss7_qj`l z^XW$PPQzvR|L$nAP&y(=jHiyBtkdSL2ew4IMG3ZB?}c@A@l$)}KxYTR}23csjfN~; z_)?gWK(3uwOA4@$%GbSxz2UKef*v&Sb%MI!h!0rfpJ=DFtRkxekhOh#{F_&o$q&6d zNWHYqRO1p#o>7*C!?^erK%j84n zdTWK{qOw@wO-IiXXp)bMxFYkzDo)qIkML7zbRm?5Uso6Ccj_a2SY7Logp!Z%cwp6y zjS8hL{{5BWX7dd-JG&-9rU5&FyQA!wguBFuIJOELUDEIPSVgN2Ux1XoyVJu zQjjhY9s^ZR2Yd0g*Doq;We7fy247aApwFV6PA$LUl14@8F+DYn0hejZIEh&*2B|Z{ zmkCl*17_QD-@-!+cMK88kEzjX=Xot0O9!YV5PQK4>~T;IKVYXyvf~?UI<2YdpDP`P zukk;8ewX9Q*cJo8u>y{U{o2p9Ia|tiV%`C+SQl@FF#kFavBD?n2yrbcT>{Wn0GjOeSS8X`@)x% zoB$5}2>KsBJU~IAy4nHGyem#fEI}4DRoE2@8mGk{9a?h^Thhq? z!Phi?vh+nMfkPxBpbpLiK>^0AROrJrJeLBWNLW9w;8i5_lj}BkaD3w#Mo_Q402M~U zJga>7iO?<^7vEhy+*V7v(;Me{wjP z2)*NFbYNflwV2AMPh&lL=qN&RIy&-aG&pkYoio!=r)*^?KxO?2n%F0YjK~)Tv~>lU zq#)E&p?(sy_0JUmeAXV)`7)sTsL3_j(vuVO@#whyyktC-^3D!XM=?%lNG*fA^G#F} z=NDwna_&dQcLU1orl+Tk$-w*7_?5(>$ePEk*F_+n)hMe=%?9hRDBBxtjf9?pFg^lM z1`9n&tiW0_(u}P!B%Seq<{T;CvoSfje;ZsykZ%j*m*+4WGo&kKXsHof=E*O-+x*x0 z%}Nbe#i6#-TiQ~dtm$N#@ul==ea*zsSiYu8fM4NE(N4U+(9ED)#I~(9yKH8-=fZg3 zd%5D*=m)R0fvGx~jn<-eRi9VNX8^xkiaA`{&kZmMxlznMXl2e5KI3y}12rzCH61#E zH%x$stBwA(NW$G_n}t_{6L zOB<9qf`H|7eJ{uwq_WN7S*hl7g#VKAqxs2Y8BF^xTQ9rBR5*WXt5U~dv-RwO9)Os_ zNast$rO~~`peCd_I#%pE+(0%5hy!4g!#QT4;$=`cCx^)CB-jeT$!Q{#SV};VxbFqH z?0LBE6}Z?Cxi`qUt9s#00DK;Z*AEJ~n8`N3&;d5e>B<@g2`q&00I^uN#EiLckg@ik z4>A(rlC3A&WH^!_YD)YIRlZo8itm0URDb?(b<$(~5nWj(Byp-`4H-=%=7()+N?^f+ zR@{+7cBjJ6LNiUe)R#ak4vWwN_xs|;m?mQ%hF@#+Qy^ZZqBG^c^33^+r(>DEHrL7& z?hAsxF{`tn){@!Kp^yUJ+$Bu(q2u!kReH_VH+HDs^%5YA{|3S zn02*92;qgIF?C7|0mGkOx*oJ|T~+7EV{nOINa@15nEKZzY#j=2!xeu^uqHuKFgr6u za^@Lm7Vw*rZ{6c>>i8qwhq<(Abes~8d*;m!r`%83F@kFY298)dU95174t8b!43r1G zzUE_>{lz7c_@Dk40A(*k>%~U~w+Ug5eA*g{7ig!GTMD3#PIY>1JO{l=a9sqe2FowK zU=>=T$3!6@w0H)20%-b!2`aL+dqlgv`CDm;HZE7^^dBmpbtwZb>$GwSh~x>Dd;aB# z*r`nj-eh);@BTPrD>)NWv(%OCB3SwSe#+&!b%Ffb7eb*|%6Zs}>+c_bzjbQFWrmVv zPdWK>xBYA!^H2FK6`+Ia^ErK1F6A7ZDc>M104Yu8u2hoXt(|+%sco4?{YD z%yLCV;4tUV##kCQZVX+*@yB&EJKpUY-AGb};)L8;IfZPGU!Asux9tQtPqHj8Ziqpe z1U$;!UT1o^cc))pe~^SC`1Nu>tA2L#np;+u{Qi0XK%$a>gE^uMJ zqwEz_!FbfdgH!7-E2$L7^)~+on;_`ud-aM1Y*TTwkW*LrmUEjAJ{R_fT=>FT1+a{9 zu}T@4j|~hhKH)|0ax)E2Qh!2NxZ;NydydNoKy2+~Zfl#LF@zsPb2WhT1A{V8Yavft#X-H+=Gzfg%pU2&B9 z=^rQk0cH6BMCJ1L- z<;`gB*!}S0=N@~fL)7HkP7*DJ8w{7NdB*l78adL&5=%Vrx7h-I%@0y0-wyNW|M2q? zfXHsU=;UjDX;ET?Wj@k^R}*RwFFG}*jDP$LOWjzMcvvNquY!UsWh{LgBe@(bAu`c$ z-?hQo0ZV3vwIky%2lz}@kGRiRdaD=CZ7o|hv5ElnUMTQ~U#PuHnux81g9T)Mq6{&M zGZKsm5~WG&K;~h<_Q9Y2fZ1#z*S>(e_fa#mUdJvqtN(t#+{^VyYS^c#joPEY?nIH? z@~3Ahp4MP_{b3-LePFk1R}@b*B{I-Q*pDSrG{en0hD;?^0K;{#RUIbxz zIZ$~DMFWX77}rn?*KxMIMzJ~~3hop#xE|fCsQ*{(vJkWT%ZuK@I68>RXkW}adZkLJ+B;^+Y+Rwz;L4{E4$nmCQ!HF?r&4-UE0-C zFwbw->;Y>eT4O)Ui$a3bFOr&jop3F>2(XB#vMBxjj1d^a{~=3$VdG2Y$Id#n#n!b% z{y>%u9XrLwT~1DG-NOR(w>`C5*tYup@=Q3pV`q3*R%Ges8t2n80~81kfdka97`kCN zr1QZc6kymQTR8?(ldKPEVbokvR4huJaHJbWl5Uio7vxcwH; zJq<9r=RaBBdim~Sf=5*h3==3#R_Z?wMk15x<6`UQRVTR)Mgqp63W>g0C-Sim)cu!V zT?0TpdOADGvRrZlj$0Pt@8A5vtxo9Hso5~z=GzOLPo9Kfs7*{TVWAnX5kpv zXYfkr_`Iyq{wfO7=_>TL<>1MC>3aF`$i5ly95lP}WLzkW*b4yFhCoY11}n(15pU~e z^GgZILp3{R26qa}RGNGmpM|(S$r#{g2+IbcPIBF6`L9yd92MxqJv=KXIfWrePcy$) zdJQq73rzJ1x(k{%oH3J7_eChcGyZT1wiu8DWOCWc_=4AUcovaUSgzPW-;GO9Q5&G{C+kyw$8qKV10+G)zU}+H-QuJ+vJEnb*+v5ulX~?B|MxwA?b!gT z01$=*Qaq-Oxx$UnOkw}~q-5}b1dd!-dn`4YQRKRxo^0X363Jnd*VF%@-}@5Tn}7pQ;Za{?yQMfRd6NVj0KlA3Yhc#HPQb>=n3M$V z!a6clNb?JNglSr_X2f&W5vP^tjBE&VBzSa>howB1eQZEgrzX)2EF3`Sys|cK98^Ty zJoAcpT{hIyLxG2fLQ`E4Zr`oNaGs z#Bnc*Z?O0KU1x7=Ug-b@!9bv+PjFx00^ptn9$A5Rp2AWaFmdJ)XF3<4eT||}o9gz4 z;4|AP0>@<0Z9m_>wC^aQYJo^U^b|`y)V=@vq-5m)1fE+}`%E>eVT4*;W$d#OnR!>O zJj>~4lWDb=nSA~&n9KyFe3G)0ZqV$-m=_`&h##~6%Kz=z001~)Kt?5vtIV=vQXs&$ z9s*-pgdv+TQOdv}f!iPkX54@x8H=*YCz>53t{`@BA9;hoR3nb=EP8|cx71lBQ}z1N z+LoQ-?=W&;+v^&*6NOfoM7VFA&3@Hi_KeAPq5~S~Dql9T?%c2PXy2Qjz2h&=OU+Z% z1SeLSQn%h_LE77?jN=&Dj`OoL&^dj^XZF~uGR6IVq);%*D_Mh2~CJFAe)?H zC~yw?;AL{4P+zjwdhrQJkwe87DxM})Huqw79Cf-Db!8Nmd-=(a`!%ed z(`=XWWf@vjO;ptH?@qsml4wmPuy$8$&096AN|DXX&s{Vxl0F@#z090|y%mQ#O zNlas;0|mgLc|n;FgMy4*a2zI>6o~$zmeqYTAeP0lPmN~r-7si3?mb4iZ!&bk73w`a zh1S}*`DIL+Q<5fTCUZTnTQ)!W@>9&(@Nx056md-Zy4Nw5@7j&mJmawlAhc_mgB81^ zU8at>xqYebYR>t|&XLZ|YOG12G%AY3=7_id)x#2&DKCBTHC26`@R zh+}|~XGQzUnR73s`hZ#FM(+Xw@mNm=!NwJN9IUVxWinTQFlf<-H>wHeRrY%re{Bp3 z<3Cv!Vaz~I2CdW?ZrZzk)iTZyE2%}=A;thKSpdzy-UJb&Q4U#T+|R()5ZC}N*o;#Q zh}9QQTK+Kp|VPNWiDBd@A*BER-s$A)a8MOh;6n^PAj zRKfQCNn6u5-|lfgE`vqv3B*qX7QB|q*8l&)kE)S`h+$wWKqth^aE@dHgO)Gpnp7fd z5s5=OXb`smWutty{=?4_u@M6Ftdinc2!LH7>*z9qHj?io3kFvYdC3P;fJv2Q)Fq}s z#sbt7%L&;R@95gq|S5;~=sziNWJmWMW7Z z&jWdb2{2}))1n+eh#2S&;>h&-pj(bFN!lIC(t&TpQsK~u_x@0v7$>m$k=|@^`9rNuy?oIDSl(Rw;L8#*0 zP}e(1>3dRwHPNHwxj@E7$=~+PUMHK~ou2;h#bEQU0Ry)|Vid0Z>=As%Q)q^gG&UsM z&M0FmV8|aO3|TpbLb+Bnw{12Ga%NJd2LBS6Qpjg+Lw6llX7zXX5xUl!(A7h7?BPvi z_icKfAuG2;hHd8j_6U>1%>6Dksiv(cAei|8-o-7 zdnX+HyL)GwjPPH}nLdnek#e8wujS0P+?C$@H9gsFM`?^K{h!NYLD1O81F6%k=>|e0 zB9JaUw!ezjF(HA_h(MtLg`u+31|$>==p75^;O4o90ma+B2_3I2EXayC)landZHAo6 z)~AitMJ>|)<5|ox&9#{w7BwtUpYbcd;>o9({+F??=k396?ewDhuNj!;)xKZ7d~BHh zw;Rr^+a@dp;ljaVpqSH0E_c5tPy~2_WxKw+@TBM*r6A~erVc_W#&&25i?P&yvynBCu%j54;+OR(uq_T4wn)! zH2Ws+v-W)&kvG*f4~wqn66O4@CfsUh`Vv_qW11m?lKqE~?RN}skppCeZ_#7X&toEN zQ4L0u6$S~wh^Kba-kXP1Nr)a$Jjb^O3+N!hP!ddw1SAhqqUM!TOCzl=2;pYwZCHxh zidSl1h1q@Xr!OUzt5Q|4#qHDQV?1cjD(cWsCKW^xO|0f&bZ(uR`4V$HwTvRp5EA3$ zTVcr7XKk=G4umkcJqBuG>C$Rq7Q=w4ZOx8Yk8EBRXu6e`LjS@Ux&)69Wv8~v@ZF6x z9a2iSGb`Ou@+{&ICFwIPP$zjY;2Xo?1gAj<@&jz-1fqMxc za2w{3*-hV1C&AsaW<3SzB1WT9sAb>GJRGiwN3NSqG0_L-blmix?wV5t22H`^#YaEd^ag3#Hoky|4DHHmX!RQ?iamhtI#JCd#ZVw1=l@Iz03eBaDym9@jyJ$0X6DJWZZa7FucTQH zWW(K?@YES^P8IxXuj`pa%Nb^=X2fBFAGMx@TgjTtl?@U*YF6XxQC<5bOkzxPsF8EC zRmHhA{Raw$eU1P7q-5-X1Ylj$>qs7|WrdoJVTFGX@nKJ_y$k8ZoGJaL4y2XO=Mcoe zOVv!qkvp8j#lzAH5^WP{w|3TUBRByA7O24n3>0XrMZ`KsfhMK6jjIJs0;4k=f@dE; zn&B57SWNF6*+j*Hi@LOJOtPS?`J(8t*0$Dir;j!@eD}?*Ym%3_rWF$y&w+_Ib@uV$%~B?k#zY&%Fw7*Cs*D)%7ytTLxI_h^vUkbs1d zzjwGS2p0UpgiL5yz`y{>NJ4N*2HLuIqw#h75P^sWXXaGW~8zGYmK=!qP;Aza@du_GdTc7~})ON%& z1Cf|bt0SeS9U^`6TUf$odE?p?RYpn<OANQ;=U3MlpWz-R&mony0QvOSWymd4UF0 z2s9p`(~v+Bpi8YyQDm%d4MyxS6^w8J&x!C~@f_|Hwn^8mYoxZvh*D%^GeX_(xQeq* zg;Ax0k|suYH}O@KfHP)2OKdqkiUsIj=`+Ij~-vQyzC(SQmj;%ZQNP?B1f(=9-R z3ge`H91|TC0;_IkJ7BXaLIClUpjJIlmCUT}aHDWF?q&AfAdxc3pbCO}+(22$E_S^c z5LSb>Z~R_;`tSe$|Nm|L+4~C1r>G|CO?33RlaZajL|S+)jfpMQmC} zDpMA@N|r$4U!t5#z1=hBJz-c`Qh>II?@QixKb3!6hSs+3Bi+2A+jjd3iC(?*iL_`F z#O_rJ-}=gszi`d#XcTS{sH6Mc!*VJ$fr#2&HIGCI2{P%F7-+O)1c4$XXlb0OlB%U$ zO_AkSiL(X-X|`iV(2t5-9)sv}EOg1ba|ZYfnP>a|pV9Vdh;B?JZI4 zFw-fPAF6eSm2|`;$2m~*3fjs-i@LrMF;ScU^|*=FE=r;ykb~2Dh0K+c%>|VKA$TJa z01HjK#4b#9VUa;o29Ssty978xjDeAA20#gV>gIwX_`6cbZtOVWSynoE*+akaH-0fB zuV>Pi==8L4B6(@G6oF$X(+Fqq9yV0=d}94uH&BqIY)t#2k-Y_@FS*BB*hJi1h&{1mk1Tj%NBPy-241%>-4@-GGKmc$X zBft_70=|;5SO6)O02+gwpbRCu1%Lq=I!oT2oQ;wI*_?VvDaDlShFR^FNk39j-r=k< z^*}P&ZpbA6{(D4S$6wS8kt)JWAzQG}o?ku$2-ECd-%xx}i2@dC76T9i@6=E_n877D z+niBhL4*)vBmyr;bHHmJ`DoBtcC+*Yt9W@6UKn_kGCG_hIKto-AJ>Vck$JcaETnXV z@i6^#Y^}J-8s?g0cQP)UqKP>8KBgGHj#6b)RwVj-tZIs{b2(wJGNU7{T9ZnUq!nW$ zv;5!7GKHG#>&nz5zn|sE<}Hd>iz;PfBZ3&Pt59s=2-3 zW%}W8fK(ibf)Jrc3!1A(TNFhTgGz-oPRcV_ewY9I#AN$`2AyD1`%HcKV?|1zWh1p4 z#eq|-G4WyCB5QS*p?sw&I!YawWk$aU8IG+~vBpm+%QMaC_GTfbmpon|W&MGXr)=*| z;24AhMnQmZMxX{G$H_rZ$BaRRquYw3Rc`okAdb~&OXNZvw#JuK_^b4$cU1zf#L7I& zX|_B|uVIs{ge*L|w?zJW{$`-yI8+S)iX#symMY$V|Nm%@{yLlVZU&grg7Bxw=Y0YK zVf_yp-?x(p0J4;lruZf6F%LIw0T3}25rcp!vqx;|swfFM+g6Jjr&UISI}mhcuQN9e zA)uh(2uPan46X%>I&Kjp7MU|f4~sB@E!`tGGqF`h49^i{#APJZmRQe4OVPI3$4eVB zycM3T^w>tiH#+s0IR)k2qBk{CUO3D9IJ(fgi#pObGDMqrvj<*LHD^#=dpyFdLT@I7 zuUloc6MBBFpVtbpuTa}lz@+pzAbe5BCBO2J|3qClI0#ga`kfc#&)~dr{Owt>g z$$Q@xxgF)YUdbgk@7Q4XB@42xJ_zX>8m7$>mF@`G9#!{s(aS94R{!sCBuKddJF&j> zeaC>Sr3J!0zOVoD#1QCU2&sk`0Dz3#bP&P=Lj{c5DIbzNSak%UfDC{PYLZq43kk28O4TCkb=Zaf z>2~zG9M+3!i#5G}dvm%+TojapziB9 z)f+NPK=%mRF}KP(etfssju$mR4veB3{K}WkFz6UO3{g(Tecatx{a*U z=gp0HVK16(8rs&$Q;HB#!6fmL?;7);SgMz8fcoCAOU(YM^Om?Cj7rLi?C9C`shH}W z#yD9R)*}TR?!}B#5-5?lQPasX2F5f=4omoSP{k+&B4Ejg*Q>Y11W082m}785PGM4V zuyj2#FEG7{t5&o!`j5(2HEvF6{XakcNmQS)pF_Z){qfIY_b+(YamLUGexLnCA7adX z{)Fh>V659)Htx|uK}i8ggO@NuFePo%#VpgQRN3l6O)JHT8FB13-JI@KcwLZ4YXlfA z;1jgjSsi%p1^XlTDCLp>P4Nj_V=$^bIQVRqc^$}Fmp8;nd36lLH2f(~9Wf$25|bhX zrM5`vcy-MWXu+>X1;cWTFq2X zGS{4d5(oeQ03P6gn&U7?fl7!ak2gn^2oQn`jz{#8pjLHo5u^Y6v}D(S1i@fgdoMHi zR%JTfVTgGXt$|~#y$#`ekty}3nXHi#lVUt1R4JxWq4ZauJJV?Z2$swA|DdKouQZyQ-0`|8-b6T2%e5@oj4` zvRYzrIiM4P)^Vvs zN3ZT`aop&1o4h{1?YTSNHa@oQIovb=E))O*X>Y<)pe#iJ0m$fDb+E;N(V=!*UtH}3 zX=@>hDQu1B<7=objcTOo5ehJ`D!wF`gUR>F=jH?VZ~r1?dCsGN-X}9?N#{HmA_oOW z-yy00`x4Lo&#VA73=%?(mpgs}B*!dEKuSQBiu*>DV;zhtA&OLRX!rH|Q2H(ogfx|Q zmny4HfppaKY9BohPZvr@nqs%*>x9ehF!@+!3vSSi7(o3)j`_JLo}h5jRRXx05CHVB!38I83}i0~5syM;%sO)FR3g`%C^RA=8sCD@4oKBY19Hqk zb3$InQMzz#F?x_s7GlIt`BAQa;m|xjx@)*+?D`dm8;lWQE~xH4C29Zrq-5{_1g2kC zdn`4oTLemtVeEGk*@086u{5D~mZ~+Ep>+F?C~?Dhkmvn5^nEHIhnWR|8*R>_=9FPz z_=w>WGZK`{Q$tHcAqYUtsJcBP+$$UKVp1oP7<7l8R}5TAQx!d* z8^hW~?L&F_eV#m(y@;tP=aF=kD|DtOS(V8V3n2-B1ra4O@a>M2&y;Kg+<;>RXG>6A z3fS5~G)DqCt}AvKI+gX>Zg&A@@u^399f6QD`=z= zm-hedBhjgzC)WTM76BpK8@x!Uj3I;qWXBo6!V!i7fsqD>Ll9+)ixrlQ0j{l4Zc37o zwzT}vR-ukjV>3Bwfv8r)-_{f}@|=A+Vft((#vfb0`vVomw;`w9lWa_QPOdVWJ4 zb(rN?2>{552oO}OaJB-_3*@I~%YoLAkQ^4Z)l|Md{IJ2Gmc$9d8i@+5z%XSVtA+CQ zsJQ?8v}D(S1dv};>r6CSROITNVdz^Dxq(rwFxH{5AgTR^A+373+wJF`h&rM;METw# zd9lJ2+1Y57d9XTB?WYM{%-ui#kMIA#s)v|o#@=<4BxHVK%m1XsvOjN+3<+%su%vEY zNC2pO$^tmFL6V1p8k1%aac)gGqUZ@oRe%DPu?v(v+QpeqPoaHV)9iB@n=mY1B+2); zAe4-YV2tVhj$sfAe-12>d&sdSitX3-a$fR$<6Lw6Ou>{?J~ci;j}bXWqLNEF0yi4i zW8cQOHnvEnVhsB#bwS3}KknJ~Wq4{$b*@6E=bYErEeeYu6UirnZ|31Uj65I%<3>%h zE~L_b9EA*CsN_!rj4zOaM(v$SYN?a>ehY!>A86B{Ou)z;nG&|GN)Ss*{PCO!SMv6t zh|k6Fn27!`%@zLfU1k%?l}!UyELZyvUkGCu!2?(VGV4x^JdIQV03-qtA};GCe%Px5t{WPO7%~h4=y)iedsDWej#9VR;OgpioSiw?}wk1{(oy3!peNIvE9@p=eOi zcu1!u?@LDX6jRvnn4(-VT-Rn;k_2NshwhU`*&02KrcT7_c}S29%I_>-JML>CFvFuI zsT^sY(=`gY3W%J)p=3vBy}m87OH)hr8N2aTmQ}M4GGXu zCtEzk(}-(w)c^@eL4w?}?o}Yxh!WwHU=wtXGhi^lX<^^7(B=QDtqA}ID zavl=xZYhvrGEuHT_7{_)IC+?~i{r23ui-AvvnM5PV7WSSMlF_weja%E?groOE# z$dzqR?X4;)cchru$ll2z9?sBZnRJ8(b}lGSYh|gozkvxuxrm)kQB=TzEv4eFloXUy z{%J^pw-I6rgXy0}I8FqdViEuQv}DwP1WR61>n}peZ09PkWrl|k&23GrtrBUxqiVI3 zjy%)zT55q%)3I1Ato_&jH(=+Sw!I{e=d?wgF5mh3-tueJ@AzHY8u0)BzmzL4rb=T$ z50jxlVhy1Zy9jvHz`~R0wE_!d1O+a#?+pP(m?fbB%sc?c1^__vX8b4}xCawwpk~6y zq2}tvQt`UL4>YVay(wFjcN#g8n@z*x!1`q0(Cny=jO<@!(Io9U#rsF@(=!eKVGeA? zmM#&p^1o?QRUf2Y5~mvolyBfjy}EQV2^0(q2SIw9f)`5dGl~UO=5u z5}%&l3qWUgnXRU67*OfG2G*02#ZpZ$XoA}TN(zK%E6Pn3QN-}3Xp)L#LPXv+C-^J8 znHy!FCgzSC{&;BsnlEJm@TStJ#{w{ek5_7t#cag@S<0)_(sQ0cxRMw(zsQGx+ptsVKM=%_Vz zTv(Cv&9(NXD(Thj4+byqk9sxQowbC)<`+FvBWYw;s?#vhCm7*T%v3s>G6SZ>txHX; z7o9UVaaGKB))2B_S%`rI=G8>Hm^J(7T;-`w3w}sf#^1d~IO53lG=WonZV&+kX&7^W zD1bT9(#1y-s2-?{BG|N&@F22kyY1|Km8AxYcWUBMnt|}NMum^*P!Q5;F)nm4&PEF0 znS$v(1Ue^qMKuY%tko*KioulUG_L>qv}Ejn1UpUB>r5N^bw?_VX(OEweN|7aq;Kix zCF%8)mUKQHNBHckB%3WMQp~JtwzR5Htyr>0jWH65R=7+w3n4lc0EL8U0Oq#tN(e#* z42>`>5FpV2>BvMQG+SudK*QE6L0K@rcH8I1U0#-%a(3O&vB!Xy18-5Yz|dh0-^`SX z;lxvEgo^|VwKCCiVBR^Q|FSwm6+r@F+-VFpWi4d42+SeW+q#yI5XsL$ZzGMBEYXNA zz7*#NsyXZI3m>gspovPF0GW3G{|pEKa}AxOZU=ZQArg=8IlYDtJ~XjXxl*Gn<%sMe z`$nxfKFsAcCd@@4RJ9;SLjfk^P$jOfrzt3{o{F-q`Pp$J39$!XdUMR!H(NhJ!rZT}xl_$pEqHw68Z5{7xYsswiolK2E8ZRh7nl(t zk5w%rWjujcuid|TdgW?mB#HSB`1|)Y+e)@(Z+J=OU$o)>A6*x--wWEDWKLrHO1`@4 zG~pCJ^;uj{9xH#0;UmNI)ZqvO(7itRLe75x5;KNTE)vrrQZdsF^Ce zT^*a2LW(pLK}#806nI&ccW5e~VI!+iT}e@_ zJj>y=B5Hkx74*-Di!!??WgXBo&mfZEG6*CAIE61o0UK{NUBy0M8UU#*Pwc_C(AHj_ zq?ubJM07|>n$wx-XxP+UDI$%2dyy3pS6ckLS~B)%m74oy%ur8_zhzaOKp|Fyho`8u@?kaRJ3K+Sf`}r zsA-!sxtz1TZQy2Isd5+~i6>L#3TSDLK+fX_*Jyg18+E;Py%>*FlCKjcc~qqpHQDC* zzw({rU7$1;fI$;M>-GMq6!O@bF%TX-(E#KLfu#@vJn(egZ<+L#isnE( z`Qn*DVRU>`xaVEF_Y~f}?XxfWEQ`>T(fAk3w|M&!%*K^yMMQhGz1#*(j3P-Grk3sU z42cVmeFdcq@bfBXw=~Ob6ub*P+Kbg+e7`VvhSja*kqD*vNB^U77>xZO;xm6I3(SjR z#SRH#%Lr#-e1phU0u2j|Ojy%rl8OsyzTotODlVr2!NQ+rOJx81v}EG|1bX^4MOVNFl$u+b^57HTzzp=|U^Grl035|}-#r}^U^Xwh+AnEqmJ!sz777&P}F zJW-}@+_*{)k~RLdc)AoSE`$pTmlne;G?J!oF%9O7r1jG7ng)^qgmHPm1#d0DgbKJ6 z;V3EwexgW!1Hljc3a4ljr%T#7Uj(#>x_@M(8v6<2WOrjOUmp`$yxQUHb9BJ@5lv5Z zqf88+SW23kx3#K>8Ea$Xujjtv>!h`U=tsKMCe3oi2Bh9K1tDJ^c=aT-=2X6KFf`P| zMAv`+`eg!&(kKAE_Tc!C7ZgT73{7#OB1#=I8tPWxM7lKQbeJ>=sKSfY^6S*l6&)~s zsQ@vK>=Uua*y+h?Y4gk&9+sYJ)i1TJ+VIB5&SLCBg~c$A%c$0UrDN5}w23x-J?PmE zWpzllH#8&ZcqmxU(}P;o|3m~2CWa=K+w1t`5;A>lnru8(Y7rfvgp?Y{8c3`+rL+)Z zaCq942u~+26%hEkMoeD^mj0c~BzR`z^AQiO{AyhPv{B@;ocS=Mx9iL!ldQY(IQU`K z+FX@@gpbUw?QGTOS?(sU{HkguTufmsh;!01aHp$^lr#Op#)r~WlbsgU%Ey!hh1_rf zb+T~S#6W`s0)z~WRssSV9VQ&$xFDdQHHV)};^VvU!B7^TKF(aYPTJ3Rw)<_7ujNrH zfd<~ev1SlKZs8CB1BvB5nL7W+vc*c_eTThxu8QD+1Tv0S^UeSNEnffoq-5~`1Tafe z>kLG?b7!h;X@ZYXwL4MlFwr5`rKz=)isagDLfTW3?|Ok1j^;iwz$;4+Q7i`&AOxkc z?pV-KqLvXrbYK7jE{(y1E&GBcI&@29QkK54VsRNy9hqj~_MIor7_m||`Az2PJCNcT zvWTP!P6#$7u5vtB>Cv%adux#r2Sc|E35p4f{Tx_!*^yx>Y*1YRh0)${!%Bi7@iSp* zVd2{aC8->R2|+!MNVK+KaIur~&19B-CFNmCW^WPr;8-5T|;^trOuz2uTs6W zZWqQ5UpkPs{pC97YnPAm^Gx4R;E*DTL*reON%_hDCD4brUH(h47?pV`1AdmIyZrw7 z7!p7Ok+cX-*6&U*&?|6Nq(((>VH7+}ZK@F-D6Rt#=`&@8W$dkdvnWG){?bE|i}s=n z?c0;eSO#kNKabZE+rVSw0} zB$QQ#h@8)hh-5;H2T`?f7X`PGd9moj|25p+UG5BUU-oqM$|*K6rthkXZUj?jt^ei;4j7}X#!OQ?KpP2QEvO7Nvzeg1o#l{W9Yi$jYE2@29Q`hetB84PtFS9$}E4M>yT59z9~b zIb+9XRJN`gWMzi|>r8-?x)B)wnOr7nX{-c^N^rWBsg$MhCQL;Vuyoggm^XEyNm5?O z-1+GQTC_0-=XJ_-CS#D*ixpQ#?s==Jc|&kutm{sj8jgdEP5ZCeU-12iCI!(45@|N; z?fh1=@O~-O$}~}92ph!!Cx!AfQq2NxZw1XMBmGhjl8^R&L19)ZB$eIXGa;H_Ny@ye zhM#Pik**I#v$|F*Ax@y0`qDVQ;xq!JA*qB-P2Bp=`Z|3E@!mBZpjoZlUUNCQSI#0bEkp#5B_)a;P>5 zjP90M<2nx>y10!LHwTvx>5~n{W)aQ{X-W7Kh_x8fZLJeSiiNahZYsKIw(MeCENPaR zNrW`_x)&v79Z7_styV$`Nz_u65MWeJVIfGFf|GhZ2M|@!5(A2pCbR@wLwMh}ZDrCM zEhOnjHaC76Eri=+>-Td0nX9xWM3IW9B(n*mrY&V02m+z68F`dcY-`M5f;34`iYmq< z@->2awVwWfea&DnsgcIQ4OgUaoOpjHMYb)DfBK@o|6-^!4iRPl_swraO0Cf4GnlFv zp$Zgm>P)Lhh9i<;V)g&u)%&Hu2J~qVfFXe?zv%@A*uZa@A%-#&38qY!Z4p9%u&L;x zdBc(B2=2vQ76B)SvKejY3}IA*{iVoC!$GVNM9llI#a@NTZmtE*Icl(di>jgtSqsEVGnp|deLze`3w=J&ao+nKHEbr|8W$=CnOTS6nf zPc}3@X;RA1|Msa`RHL&xa{JZwf9@Ei%7dI_IkzOEwZ6PSY9c@a@RBtFCOC|SnV~ds zdT#@SN0ddFwL&5c#rRV>>Jh*Vy(DT)D6uETGaqO%dovO{(_+SzF1%2&WzJ=UJZ6A&yL9arRlg>(|t(|2hS1Oclrj#z$tuvhy?F1Ekmkfp1k%Cr2 zNnvTFFGvMfQ4arjApjPe<^V_(PdE_L&$Yt> zQ7>sQY>gxWPUmtoRj4V^2H(c@A|Gn5SkY(jC-T7>J7E9&v}Eo81dw1=<0(WUWrzDe zVSYQ)>FDU#ZWlvoV96@fB*ig`)XcX zRA`WNtt&g(iZpt&jZtJZurM_ux>cYv1t5|F7|25k1j-5vt~O&=NW^hwDnd{!7`#$M zB+5}$RMUc_jjPDai^^)2Ty_YM{ax&`#OExc3Vp>q@qS&}i0Z{%Mb4{eV%1<=(!PZe zT*_ov;ma9Fx?M}O)y+>8B#8_Xk}$x89xwp~LgtD&)d(TZF{XAinyx?k{^ypI>IN;_ z$kgwH-r5g}%N2_T5QXJc(GJwAfn^gBgbD->AlzbR3L%|>Is`5eJV+7X&nCgjUj{Q7 zWHqBJ*)sg;iw&%cp}rr`mR4YAMnov?tWOSz9lbj_-OV+1X-f{R|M&i;{NMk-w}VAs zJ(c}%2?IY+klTTnIgw**7BRFSMGdDKq zoI#1o(1Rirz@jgJXh|Y65I7jp7cUj)=Zr}gs9ZCEbS)KAiH|hQR=9%ZlaXMYJMu`} zjsC7q;M^fQ%&Qw)U;0r5!te+G7TNo}`wR{=w=eV*h~4Gw2NM7Lq-62{1d?FX<4HtN zUntt|Y2r>21z}T-C3C@Y6)Sy~9k6lCT=3=#cydN@H6XLZv=H}!w;uyPNXP!V#-^;m z6e=K){1$i8@cX~yEi2TWqg`e53aRS9sT$qfyL-Fja&`7(2h!C#7*gwZe5`7yQ=0g> zWr>R~spo66P~a673I##)LrOHYRuEWv3lvh#eEbE?nX)IQ%m!=oLT%mEZQDwqaY z2o5@ExonuZLPfZtP)SQN%O;6y5f@^1%aG2X=ZQ{}>)5MsRcRC5qZG$do4y_PU|&w%Z59V-W2(ZfA{EL&jq3SDDVg!BCo%cT8CB?!^*% zi|vYEF*gh!Bsf{tb3_$uIOfD%C(6vr2Gd~>oGMxA&x9|vezb$wV8K9?N)ZRb>rOVU zL~!*PPj%m{?`@ttpXA!R9WzlB^r`Bznm%JGBRm4a6O{y=3U&&7VQ@90w4<4&Tr4uA zG%AY!>zABX1F<}`RMZDuaCy#77&KJ?5SF!L0@D^Zk`7Y3hloK9=uc|YyIm}U2onGM zq-5a$1SMWp>j^}1US(RpWrdXzg?(G>nHecq6{~%g735fwTZ;exPj}S&^ePcSgA+0( zS}BXx$Ut)xG{KfUVMMxtjjM62237`CoNxkH)1L{L*l69BpJCCP`-A6bw>q|7Dk4D2 z!PW#!F3Zdh)|zFM+Z5T@*r^!?9ICEo4`N}3TgNV=sEDUEDr)I+DqS!BTDGN7QX-=5 zE>eg#Bz3Xnmt!LJ|Hd#y@{TI3y|f5B3?(+u5M_}}MMlb#22f#1mjn`2$RZ6CLMac< zcylt1n}CGBN}ZaJR5+)!q)lTfER$5kjPQBJYEvmNqSi_n7iQSRnNaAkF-|HTr<<0K z9)7ykDrd{yR@xs&)2stS_4;Zwbhh{sH2f` zbyv1q%Xmh&R~vQSn`PYcisr=WCnOY@3JRqJ)8^KrOAx*qg6wa_{rh|Goc~`8h`!x6 z-dfsMUX#R!Yeh!dl<-RN@-b8bjm)rxfn8}(HJy6v_5Ur?aXchP;O{oN?apUsq|e!e z%3?Gpr|hPYNDcq{v}D)-1WHg;`%FVpTg9rMY2#`VVS!WZv2Wp!ma27^nV=sqf4}wZ z+|zfmWssSBx|%5_tzz-fNfV&ztT1p9DS!Jtb$O=1?L1I%Dv8y?pXJTA>S#_P*ul90 zK|_jz86XNcnd8qnEdWRh0O4gXJ6Ms&8G|NdB7+=2w2KZlbb>N`Iyp;l=~&kE)IB^t zhA34hQ9FGgZPI#n$s#EAUcL0Y*xGJXz1w#s52d*IQ`wIiKC8x($B%&wz+5F(H+}1R z8a~)qb&|E~$L(`B`F`~fm&y&l`IT5<S5@tv zegAl+D1jhFv?>u!L%VaWNd$;m#6?KlMHP=?>9(XH-kP^K<|OQnN|}sdgq%cWNvMOu z(8V<1jk{{^=Dp9!H13DW*DSQ1JvvKLf(a!_=C1}*IaF>s^X|s~+dcpHTL|aAcgt_T z_xA-)Ey+Ql8BpZ9O}HJA5)kBF(?H@X+p}N=0?5$WJ#t8pMWSbIR3os<1(>%7FcZIo%{ao6YDm+~x>$e-pjyT)qPtLIwEeF1ufO;G|NX!1GYzM| z$!}<{WJvXUidiV~jfnsIq-6Ji1aV+h>nTKdUS*okYbHMuDS=b$q|xEwqU(K^nQX=| zM9>rU$*P7A%w&X^L@ZcTY`Im(qG#vokNPYY)kLx+GS{jzdaQm3fPaG09qb z?ySa(jH~Z;bYp~N4**yuxiDIiF5>Ir~^z&bJ{!-SAL3d*ph9Ag-Q2)IqJ+O~f5LpL#f2&_FtPUL;BRw#m^)U%Ps z51KQuksy#X8vv1Urpw|I4j|FEc$Ts_AXFq(9=xzQK>{P4BJap0EZ!Q!8{DFd*0lO% zNnKRt$Dq17aDZ?z#R!N_^fW$g0nB$CMAu@>x?`tqMh{U!pw=t@OJ^kUwbRUVY~xg- zoNpCJQ_&`av?_&F!hk{h!~y^B*Rq$fEb!nQfWrb@{bqQ1K znH4F>AZoprp#3h|i6YaYBEVpSOgT;++BHl~EmYIaHijK!4B`hrh#9CPS7t!X%5Te} zQ}tSKs>^E~-}LmM(z(e_!x_NJKS%8CIlk&NjZz2%nS{>6$D|Sn!mP$^4x*uhPh6zK z#naA(O`&$$T;4cA#A}f?pu22S4_FO16irjer>U;;R+QWmbRp_^=M+O(w1WYm{| zSRg>qWoXi95p47JwXf4e!_|W#La~P&DC!h47%QddAk=En${;xs-g3*e+EZ3@P-ORr zQj|coxPWRVjpg?M01PF-Uozl|9mgZHGm|JZq_xd<9BC6t91A!$jb;JGn@G%fkwRe_mci%f+>pP>AcboR+Wxu$>P}}=VPt1blOzwp+PE>8}skkDbDgZ2{K)D-c z^j{fq4$&}?<>(L^9VRo@nJcbRuN~N10+dSItOPcoP^VoJayv@^r?3=qY;opk0HcVn zBspNnRj^fa_X~VJ3GE zNi9!IFwJ5LB`P(9niU=Y#<+IvDCXC4*r)q) z|1!l96rBR7*Ppfv*Bc>jOks2@s#QaESq+4>~0UA(HXnnCbafk2UElth^xJ z)Ef3K7j>ZTIj^FWaY@t3RO90kCiEoI+EYGopvx7$3?~lDnGGOE0Z~x6CMFt zYRM=_H-tNIbtb1ZTuEVZI0Tq3E-&0CcS7bYD1XwzEw?ecNulK)$g^)|C$syd_*tZ!6;fG9OVyX37z{w;s zN|V8<;@?=p)wVCn0i_L6rjo!2T{j>RJ%6crfK`Lh}i=s!E zD_=XB^zA-tve95)?rntK7xN`AA|PCyK&vHh_PT3Gz=n=GsOX687!D`ZKV$Q33Vr@v zZmDqalO<>@(E~5RnrO`hAb4aC?bmao;G%f%8q(u1u1O8J}>kLBJerd{$ zVTNlD(JxV~BmnV14!_fC1*mE@h8gYr+I!tLUmJsR{KooC3*<;gB8^_Hh8Tl})Pq)^ zfk`f5aVmAdzgfbxO`8O&Y+NlqX0aqlSo9+f6t5p3dHod}wBLY}lZ*11K;UNFTmiPW zyXn$oEk7HsoA%O;qO*Vh`<<0z_ioPBBmmLh9M`$iB9WLw&6ZMLC(LT<%+=jTda~1N zxMo_Ygo>CV0|oh*48NLXxgC>-#!@f+0;P#Cj=omI?IC35ddo3IK6R(ljc(MNoy) zVVccESQ9{DZD|Po@x%_c7W)$3m$S1ARRr&{p%us& zC13yl)AC)I<#$KQphHya9jOWuB8Ejr1!Ykwi3BA9EzlH95o^pv)W8O?%jG~~OyIp1 z8qo->A-P6bS(Z_2O(GbDEDH_1`L&j2oMm93B?(E)U;thCp?V8YEE*`LlQ2xiu*2Qz zM0Jl#A6f@uIVfqX2_uBN=4fUMB%*5~H};k>_`uptx+@`0jl8c_F6V}=$12o~9Bo%z?ocWj!lcDZ= z%|BU+dBl+jT)V*f{+0-_@_+yoLx@fhIA}~lah*7-g0V6Hix+~wC>12d4Ti)aAOzhp zv&UFs4z%YbtRzG$C%tXzc5>3-icc0&w1QMyr(e8Oj#%B37Z0lltJDXK65ffFDAS_V?E zW2YNzRL6XZ!l^?<71Z4Z1$CcQmMmL_l8_9wlsg0^ip~M>L_;bZAe|hS49jM5LR@C! z29TB^sUKNVp(EKx=+c8kv|W{8?Z_E(bV*E8FP52x8_Qi3Z1YDjtekv`^OH&ZiiWT) zpQ^>3Wh9KV#Opku`O*Fw-KE{G&&AQPo1MhsxctrfL;6Gh=X|1b;{B48Xsd!Wy)zk? z?QuTjq0WY@#*|;Kw5C8Y|OLoAn)Q{+561X}<0Hkdtl2k%W4AcY|F`8hC3NoP1GC_mF5QIkZQj;7I zAqX&FCEwS2d5bt-YL(@!>63l=EQwQT?|uUVIV9^dO&v6+tb;qhtJvBez)B>tx8gq z?+`{&l3-GqsG|jvz+%t=dTfw-L4lhy0WP3$(JfK1;OCZIlef?$XX4=Ol@^D?m~ox| z`?O@#fCT+q)pIN~a!F%rUt#7s6K#8A?J(0RjFoFOhnaktja7Vj3N>O{GgEF zhB=LD7Dq-#4txwSSv2pxaRR`CQ1jc{wbmXPvjofL=@YKy`dRs_3nE6CBwXnjpl#5$ zO^^xk4Ao5`!OVR~iphC|z|WtRt-rNnCSE>GB8#6d*zf$Tft)Hi)+d3Tw{IKs392I7JO?o!RcvZ;K<2~BW)gVZ6#b2qk) z1<^+h<#QQEpYtx)S;J(_{yfaj)?w(UFNi|Ip^<<<8760X<3rU`xf-56qq3rln#Ga( zvq}N~`=n&RE*=4{0KM6M=nW?4;OfgBELjm!W*20DW~49x#vj68E3) z|E=~_Pyl*7U`J$et;Pys;HniVIVb@tN)AZTWpf00E^RY%42ah(wBbXgF8VBs3wyey ze-I0)((`u4g1Ar^|D#(bMI1 zW8SIH{alre^S)A@yUEyHM1mO508_2)cnc&W z6a`qy$7*2fh6N)e#F3=``?O@$fCSuMS9>fqnp*_=zh&cJ6DfUJtgzFmtQ@NSm!W(B zjz< zTEa2FtBurYEyg~axow3ON#mATdu^I+R*z~haKPbG>!TBuQB|_$RvDJOcAN9Hn2`ht zrzt}u+u20DWFumWk&#yBc~kmQgtlC}vDz->seS^}8hC{!;6 zFn6L0K*Llx-b0snyY)UK&ScFPGXpews$oY*XBr1RfS*vn6gEUDwifkYRIt5nhuKmbr!0su>LIl;0`5u>i8 z$_GD0Ui4-XvKJV#1Rya+;nQXWLPLl}76DPPct<}n3tvI#kF2%kQ@YUn>WgCMEXl5X zF<<4n@#@2GSyYopAk8R}s(00L-fDPlIK*VIDbr-slB~%?^pC`eX9FtYbPl%~5XQ{? z%7WHfCc8fEp2e~%R{VzA^Cgr<(+v1VX8xwriGA*+r0N6`YX&4-wqL_u8c<+Mm*ky5 z7+NzXcrbJ9@6S3?pyA7%7u%yZ>|71+kvJ}ZE{=6O!!8nOls1%Z8OuSb+RP+p+;=@^ z^4#3}O$X16Ad2tl{=fe2mm?5U3|JuCp-PUz7z{iotU`~tz{UujfI)KUFBDQ`Oq)pH z6oQM*0H#1tkjD{6k&tmcy&^>fk{K{WKpx1_{%^ARqi9v+vFD<6l_u6fCXu6o0VznV zqVPhUO`(*%oSzMlBw`(*w)iaA-C-X}WJK-~*MJcgKmjKl;KOYBa36uXu;eCq$Z#Xb(+!Ec zI6*et)#oQ*?LsL^wZ6PfqKbx&G)A02mN2Ma7MiYEW?0)|@!lWH`>X!8qT0}QVohOc zj@H-KnEU>H|G)F3idcs@ylV>@nYnKN`=n(3fCS56Q+rG^=xS(sziA?k5+!|6?Id%l z%O+{Hl#X>rX$lZ;95G8n$m#o4KrX{*lO?upAR1spf@woURFy| zMn9LE=jEVCPN7T!2YtlQK-EPsRw9*ungB+u6v%*$?sRze(-dY;O)Yq32;ghBj(eH! z<6jd33Kc~$FWdLw0x?qxQ4|Eji9G2MBccpgja@&Bk$bN@j!QR=G{o?eT&1BaE{jgt zDmZXx=|LidFVrv8Ce6scb~0Cf{eM;Qm`Yxh%q?g#8R{opmGkFpOG-@QiUYm46Bwap=B=uwkzb#ZhS#>GKECER z)HDB=RAx$f=)==q9dn7AMs`SDHL}S~?&Gt@?9ubks&BR7ce;K}`a<3TYVmE;W& zinr~!T;vNxHbJ9Ih=B-jxU(`K$N-9>@emBDB9BYU5`iiI`?O@&fCN-s)N4r`dUI&1 zziA_#Q5{)NtfbFrx*w|jq?T+N!y}1i^sEUIC@Au6q$WgART-OGU{(VH~+ADx-tRcc5GUqkjEYzI4qIWQd#!9RQba76zvnx>W$T0F@n<^rSGzJvb#i zng$S6F*p(~$xs@4WL{@{eHt8oPZ@odyhw2P?Mv-0Lq@e))z@oXZWC%X`}Z`IGwAIr zE0-c&E|8A~H4LplAIv~BaVF@oVHsT3R6$RuU7MR6IyMR;-4!+f57ZF1>~ zComDl=I3{8fY_`MoR&SvScgKw(Bg$b=@i1TpaOvpWcbEVxhUpXud}m7gy#N<2LG+GNlda3|kjj{Tqo!jOQL+jk&9g}^*Y(5BY4^9)y|36G(&P0 z$Q6o!0l94Wlnj-miV(nsHx*;_Wh_1@YS0asQH_%F%HCaxztNZi))o#xnK>dt$cwFV zIE9eN1B`@;B$RfX$xbF`V{0j+^NlM$Z{_n_YU2LXUTVC<}ePJV)Pq`^ktfX^c{RYhspWUWkms3EGa9cx)}f=+L0D30lk!^dJ~Pfgwuk_TZFp zDbrmvbT~sI|A-3<8#0K~N$zv*bvTf@IPyJ&Xa#w(F>?Xb}4!J=w?qZXB0Jy9#S{;E(imSaE=ownV==uI*p3Qfsr79`ZM& z5_)2dQ&}yOQ5@-8wxeZL)yi0J_o#PmhCPW--9Gf@Qq3>9Q3gISw_mgt(5bxX&zv;s zr$;NsH-^k)Z~1M$Q=attLxWT>f&9BEnty*k30!K07?Ggir340sAv|hv&Vq2ri3CXo z#7ZTeT5fQBCTYoUHOg0-SITL^3fxB)!opIN*+Sqf%mBUE>vcn35~S|!EW?@=VNeZ` zh^WpL)nEVqp7#+aCYZyc3L(6Rq5vGBDS(45mTpy4utBi0kb{Vp5cY7GAKI@G67EuD zEPCpHbml}LFag#Y4ivOT+Yfb+5~4n`KG7u_;S>rZZTfM;%p}(gyitndxN5oH^tz54 zr}(#+Oqw$+irQ0Dw~;(tQp)|$BQlvZw}?3rl4&2gG8M9}Cyqx=_oLlKLt{s8)l7sy z2AGV2w5>t9yWEEt_K1AYDi}HR5~`P za!1=8v3jctc}tc|dTeG7vOu&1*Fc_uBcA%pyr+kA|I4G2k599AOxWEiowvq{%5%*1 z6opzzplcrJt2Ez};|!@rYZgwGQIK?NFHVq+tn9y+qn-7!VFtA{lOnd?ZU-Y4EU7Y} zLNV!!Tn3QqJRBm;oX%F%7(;;Rw8=a~5pDqBYi7eU-+IEwpf9-nSIZnBHwuSQZEkaA z4DpxQ{bjzOk!H5s`~qaGUbDV@gFpyfSx2~WHa8~f*a)IY5R@ynxALKdoie8&EEEt> zRfigcOGLm2PGbpiqK^RnLyZlA_}L}Va!+t3xLK1iB6|*lMP0j^VfzhB^v~229=>Gk91s zUH}3ZM23LV4G7Fe6ETu1oDHThJ_E&23Je2w7!4wzRDcB&4Ll6+us|dW8vtg&u%Hwc z7CZvr!y*^PJVt?+!+`?^6f)og0}Bxhf*E82i->q?VegEf7~_B#7z{`dZQwFw0)a&o zTtl8$8DRR5QuzfbnT7ET78+QO$cPv)BHToX(jsmrf+lFPu>~v><32KiP!nK)gTPzh zdxwVlWrAFuDiK0(nji$p6(Ga7WyrX)2=S&wMr>&aCUBdcHz!OE8X`_HnZp9(oGG9) zLfAIS13`>S?qtl`{T2WIc(g^zfDBxZF)`G`E_2b>OjIT`>DbT162LqH95K+~$OmzNIfX*xKoboc%yJws#X!P| zWKlFghy()21|Kp(z{*SzrHlgXU}G2nNGy=(pcxdwgD(hNavK|HKS!eDOBT#iu0=cm{M8(bj`{ZQQ00|U=P;PR75Xn``Y=WyjrKfkQE&i5Gdwv1%?UqAqmWD1}NWxu_DFHF2@M zGV8BwRkF|G^{eSEhD6m|=XMyDN!`0q7}fb*ixBiNB!4f(sz_uN003Z9a2Vub2JxH3##*Kw$od9n7(ggtgAt6vW5C?AhmM*iN+4JQYBoefEY5`i4OlfXF<{A{6kbho_?G}6DH8BeLplsZm@uf(wB}!G z9GC?Q8hX=K~Xsa=%cvud`T=GARL zAFX%$`F`>L|Nr|R|N8oq8|OFNHU0cQ4s-MF{`I`~_WCH#|ArPpK`PNnf}3vKVoFD_ z@L~v{kw9rEI4D9OJYY0H^FC3?DFEq@CzU)4nS%6VOt>APyi3rz&RDpn6O&I>+^w6M zDz;b{Zmb+edAdZ*HlKS%c^6Z{w0gzF*r&C(Jk*c-eV#v$c6?J8%qR5TZt^u4i7ADu|)sezfPc-+;ERlonO zkV(%P7#dUm|Ni|{>8VR&6&x`^BVy{*k(mZxhCl5;+5iD0C;%kXwn)%$(gq-`C?W*{ zLl9^XKnREsC=Ak{s1!f~t%=mU)p8Gs`eZ*6fWwZ2LWBgRsa`J z`5h}VT^DE$0VA+*p`c~up_$;Z^Ur|xddMy`(ed^2oA;znWt*T=9ny&%$^Z0UR9=9? zpWTgB-9qgYS9SY;|N21?p^4EE-R)`6ucn78K;Sfskj7h}aqFx|6A%U+?{c)W%C96^ zh4gr2kf+~7%Lmc41DHudGRTC5+#^PbMM&oZLPjqZ=MSbrHoYD{GeCa3#1crkg~n9D#0LIDp?6%I@cMgeE38117lP{m?;(6w`yD<%`( z#WgCp@?>A4D34HC4j9W;pusw`u!4VMEXN_ZC@RvVS7vHb!osaXbs{dt!MzE|ni>Sv zX;D%|T;a(i1i?5g5Md$Wh-yVBdCis8Sji;(fkROcbTS%)7g{2!E~ZdfC?!>gg}WL5 z`?O@*00eSg*?TE7*kUD0y=8)Z5z%R1?IdyOOqT04mI5Q0UN%z!)wp47ef1MZM}&CSm2dEa?>0iRY)6 zNoVCOg4=-?4XwDN4In=%mdbGSn;hncvlCTEnj@MjDm2QmRV1j5V%J~PIUg|(ii;z= z7_K=5n;8!Br250jaZ;m0&wkBy9Z4ij-N-^6V2M}?v+~IlK1!shGxYVwz`^ExQNGc33;ebu)n>RJ*aGpYL}J$v}V{RzPUM){&G5#)U*y7Tqg_ zq6;F@Vi4%C`20$ArmUKFSX_R#FKq$lnL9&`*K3K8Em_&l)^=MKuFQ`2NRf(gR{~BG z0AKo|)|PQ_VU!AYCIE*Wg(o$#USPNpnGGUIVHmI+1S|niElpFUMH2b)Uu6ISAZvLM zWTJro`=n(500g99Rr`2A_*kWy-(iMn5dl$I?d1XKdX#Iuh85)4AO;yCSdg8=0s`Qv zv_Q>BTe&{AMgFB_kz^ol+wZO*7o@B7QGc88;lHrk6Dokjm|yN<=~=KxWbXJI7& z+e$4YGC{#3P6uJ*C{kmT2_0Lyh8V2)BsZ5N-|xd+{sQ4 zxxmT6ObERo#KbUkQEaQ22)L_Mfq)@mG$=(5x3(g)68W@58Z{K91Ci$m1ip(9Ko*lT z+=_J1r0J!c;$-AU47xIO=PJ~6)@$KRcCvfD`&PNQ+jCByzV1H#%zyLO`}=mU0*2~3 zeblg=3%E4DB8|)d14u4lMoV;?%F^`Yc9ySJ>y}Y6`-OuOxm8M- zx~ri}sV0HtiKWXjIt5dsnAk7 zb-$l>yhH!yf25Mhe-}aj`=n&^00h8ZRO^W|>SO0R&tZjo5kXy3t>DAy&n7B;gpNGj z(k`f`HuYcT{89uj7K)^O?AdJtJq_iRf3jX?_orywR5lBc0|bm%V7{gd4iEsEXe593 z^C|dw$#)uarF;#fU%7fLswCP+INAzI-#2Ms%P1qAp*rXqnv6)Y#I#M)Vf9XG3&I_` z%DI&kaqfomI$nso8n#7BE16;%z2tcXcT`&$JVYjJW>aI{EuW^cj-eyZ&;t}o8VMCP z(r(+NxC+cb$Z!J1Mo}>DiA)rf5wSH$4wQ+^YN|O&0*;>vO>o1I$8lvQi&r=H)#lZc z>t;`Hdh5(=#d>1)s_tZb@9pMNxwR95K}h(oBpc=bKFO1>`7W9K%^Fwh6(dagdFeq8 z9DE(1GwG{P1bIq8DQ%N+70ksWvnUTl0fTRG5RTmV@A`?O@#00a$7RO@LRYIg~WpJ9WI5j9y) zu3-b|*rIAZh9Rs@37bSv7Ve)Gyp57VC8*CCe|Kw*n)qVYqUOXGmy1f6=>8lKrb)|#e##Po{TTvaH1(mBtd3Jp=}u}VEHTM3XtjK7HO{;i zoVkmNWu_dWauW-gc)XDA>VH!(JZ1N+B~ZLF#5}9`p!+#-%=a5Nv9`5x_RRD1FLGo2 zh$#tD?2EOuZFVu03k3cZssD3$0EX~nMj~5%xHJS216U3q{Q$)bu)3=WY^i}IE?5y` z(WU?p;4ajFb!$deA}?_JSv&IEF&&Nv>PK@~ICZz^RVTZCy=z@Dy_;G+V=@EAYrgxF zkT8*Frg!>nOa}J8VQ58uPiVX*_V1aM7oWvU04XeLq#;ke+nKRJ$e@|nxQGp~lrX{CpQ9)%rKMzzU7j>k1L zP~Y;QA#>Gbyf}S^4oiRl%b6jPSMfmBR(atvGW_Am9P6{caP)B)RM znV}+VWumi0l1*sIxWvR{k%p}z)1>9Mak=--QAQ9TmlCf8;8ekAgICcaSsVaL14!y( zwH3{ncP3Z(Ex{8-JgT8&Tw|Pi>Td^?HvHJx&o~JQ01%c&MkcrVObY-`(>57MsX#zx zBG`P3poE6D*kgjgX)54MJw5UR`-eAHU5YH9$IHQgSa z)Rv-D&|2h1rDz%wH&+3DKV2mpZsfo9UDeuvP}0nZF6(CFvO^c3gaktX1&kmAVC%*w zM;k$gvZ@S(I3(r7+FM9`o+hWwb0}jeM?Ai#Y;Lms;sUIa?5uge?u#uJ@I)YSHY^jX(Fv3=sk#2HI83ORW4rH}{tPRQ z8Qu{eT`@}C{h{<0lz;LOi`)Wb840)uA^8x5*xu5}1~TcXvU#>T(<)^xmNU18iygSl zmO8!@!hR5*ywkltD7STviKwsdjrWc_aswt%s+UQ{${q0$Egu$@Hlr$uqt2c_bVv*X z5@k|{k@czok8Py2e%kI~s|OTXVhLc-nJGZh9SDI$fnX&6`=n(3fCOM(Q|pNw*kgs7 zpJ5}J5KU`Ot{8P8u^ehOmLgosa@k_bWb=*`rb6vU8iclAQ$p z%*Y!oxI!ecBTa)qb}EDvoXRO+0uKa=L}lOYxE6ujW+EnzL4wQRNEIKIjRwKNQUVcb zO%o)}DorNDO|<04r`lXTmoQKg76T?d)MLsh3M);1Z>lf8Jv&)Lsh9V=y*1QdFBpNcfq^A(!Tr!#7O~=Tlk&VoeB{4yZ+h=)24^>SN zag>Qg2~it|Wtb3`JldE$Q++?s5eY;^B2NFM+|Hps&A=jn#ZpMUBmqf)Ac8MQ<}x?& zOH-B1iNfTkaTS?>eZk@6&|U%;LVTJNN3Sd&w!GtR#f$~s6aWw@fHVd;>R(d-`?N&t z00bjSRBLG**nY?wpK0b`R0b1oD5l; zA#XLhxHmTDB&eSx-?dXTr|rAXyQm!ijm&@-F81zWn0cHAMpXir3`h`_ZOLlC4Dk!u zHI@+sQJL*W(;`G03-_2aZ1y!)RIEQ^?1>C;5RXy>L~;ar_<#bSDN`}g9?V&aK>-Za zu;GD}8Bus9s%80td_x35a17}YnFUtS;s@YzeAM9&N%JNJIH#J|nUcc3ET!}=T>uB} zFbbRfXc#n<^CgtcX{GrgFnn~I1_E33T#z9gg%j$P+O5vysSzdXXb> z5;mc+CT>c-9w#{D*PLT@yv`7j_<+SR{d|2yU<)w@O1v z&y>E>_`C^vjA4Yvz*&Z-w8)hu8`9b2h!&NnNVwAaI}hd^pszm!Mu%NN4pIi-BIw4( zP>nPhKn_FUIcCQW<|>$wh(!C4aN=q_xmHY=aCot9&D_Pg0m7-o07DHF#0$Uoa8)qj z!x2IuEXR+BiOU3_0u2uGrQZXrb};SJKXu=5BIXiodk&X^C~X|$s*f(TYaaO-o7H~+Wq-Pp=!vxHvr5bB~TMiOc*v|_mb z`=n&}00a?QQ|pWx>UGE3ZDk{!P@PRrt(bKw<0fhSl$Je%wV!UGRRAGaMqw~z)?3V( z)bG#2hkzoW2nYy4cn=4wsQb#1)r&mVWC(IiMj3@OU%4o;S-aD6Q*TW&T-r~z$xs>O zj@ReL)9zvwBo09;Qki6x*QmLf??gw4ZVLRj%SoCe4m=R*C!GTdMI9>^#}ti=GK}vp z?D+Q=p`9P3ViZu6rf2~H;Rr}f-+ic#140C(ks!2zf+zVELBXe5Fsyh9_)_AK8aWnU zj#(>>^)s<6Q*x{)-VU(6)G~{w<*1pnFr}Up$e!@Ah(AtEpr%uL-+dD`4QO0h0!i2T zY}vW@d*f&9m<`|&0aNHL4v_(!BDB$e4Ojpm@FpZAOEhztl(E{6n2ITh0)mZ@c5JL9 z92W4H2s(sNyi9%MSXg$=G#2GZ+XJ|WAi_9`866li?%R6#b4jq`LN?eFz=XS18zH#081IEtpaf9}#%AXKYr>C4(EYbUge@c((vlAZ6oDS5X%7QJh!_a` z;Rj0K+~~5RBPuTc`?O@+00ahD)B9!}I&>!*k7b5!5>a7I?WA+*nii`4h7GhnIUp7i zpdJtwRV5eH!-`DSlmyEtP#l#rp+ge{7JJspQ|%}cCbM@sEYaapP82!l-k_~Zf-cYi zB4|c1Anwjf%oBK2$iaXGgp5c@2-Cc1XdD#l7&xlXXL437`xkx7Mk>yyR#I&ol2R&8 zh6G$eb~hlf2P^CgBnU=$rGg0IJzQMvHf>$UXwZQAho51qk4ndI^qy9AILI2uVNvr z%vsAY=xK~;pRM(?Fu?E<{Wef`NnZq{O7sj?(eQ?RW$Tcj%Y4HXa`6oog%M{IO0lNj zL2WDB3I(XEY6p;ISG|2li=8Reiqy0O&7QF^&jg^?J0B0>QXP6|tQjCt0bRv`z(5NR zeVhiTFL$Jv3}G_ifjY8<00ALLfItHrE^`6AGlL@)3?dL75eEU72#Ao8SkQEk;nTH{6wa15+<3~!Q{xV&UvI+&65H$FKODy~2z*p{SpFT# zhKt^1P&6&8FPXed#@0Z1UoF82{G0*wY7>cRF~<2IkdbFD;?~sW=DTNPVnP(~$=h2? zdr3IM%rUSs!0rLPwalXb`?O^800mrMRC{kT`f0_QjbYwYY9%fx`Xh#4 z+Q#X1DY0j5b%%b+{&Cu$oxLl}mpZudI{iXlXIHpBP4Qnb4nDZaX#7_#tAydj2-lsW zc=%?kjVR1*Hq(ww>#9KAfEvQPF`2Vg-S*mxhWwYUD;?Fi5)?AlY$zDR47N>n#6fmpO->y{@J&FJS&Y!c@QOfQORoLXR z0(4>k4is=iVZwxwjx&IaftdTq03iqv0WKnxF*eQ-vlVc{haOgN1px+wfD;wLRCe$n zyS)v;^G)tkv^dJ*_tT!N>xkh=oefCp4F?)nm6QT4N-~msF)Ki^N=67(Kv~5DBc!Ob z%%1aD=(9o&mIQhGpIhW~H_YOEy2r$+Ga9aH)6FlrUNdXkX8!E&`(^5Xx6WK@S>n)a zxk=_eU!eTRSM&mdRY9tna%R&1`?O@=fCa%|)N5H_;%o`44`m{W5-M$Jg{<@C_-IEz|yvAwul9dprHyhxKzUNR`wLR>hsxH(7;Y3-yLB%(3N8_R0^&& z5~65=su(>*Wnf?cJQEs-1g<&G+*wm>(^lON+7txSp`2)s}5{?oKoOu)tNqG(!Vq`;{I z#@bW1yglE(54{NT1!{lT*NjtbHC39A&^n}EQGIs_WM_4&nLr2-BmfBo?j4e|8itod zzz770N{`NjF70hDW&H?@OjcJ(=tWC{AQO(&S&TpZZ5A@hw%y(8Q*?07!!W`=n&&fCN=rT6-xRYFa~z?_udV5)px4tfbRn zSdMCShovlJhTV>CjU_7zbRu9xIB3WNCIm~FQBY1{owxu3+~nDrrH?L%1E~ z$p}MciUEk?0r8gUIlsjmm!1&0GGR$ph?-__GA3zv^t!R^{^?CFm?~-#CtiI7r|eoA zPmWYLDHa4y$2aH|rx;u|ETQn3AS4uONA@RaMVNxoA4W9Q&qUwur#^ecr0Q%MG%NuK z0003%ImJ1S2qr`c5gZpK-w1LuB62P_czZSzcC7WOhyUzDvV=#6oHWIln3TrUoggkc z$X&e)pj2F&vlW+G;8w17hWZI=c3r)ur8qX#|JnbcdftfAwSWwes~RCvYcAnwjZn;Z zRb107#t_yNL;)}t5bu(X8KB7^HSGZ|k9yyXVYPo1O&cwd)uT^nvT1xg`-p5jEBM~I z^;`d0va;##WC}N0r+HgsXG>HnqbwytSD1^gA zf(*cahh2ots6?o({ce@@K1R9uvo{<^W+%3bnPvr6hAxs%p7GVCGDP!3qbbt!T2MNk zj2@AWMQ~lc{7a?TzsG-GdPv`5v*fSQZZ~P-UL^;I&c;<%zkD}!*m=$XgrEQ*CN<$B z10*+=3J!?@_7;F37vgzRTYpkQsRJpwN4TzV%c{OYY{GWBaV(LCz>3o=aTpz`n0IU7 zN`#wcz~6Puxroi#V;@tG6A{EsytoT#-P8&A>uR? zAw!#9s_l*(IXlpX7nWNLDvD1s;ISn1l7j?X0UBf!0&va3X)KeR;ZhI)WUfMhAQxtQ zXuHgSn3*t~inoNqKEUSvD;WL)VT7qmWc76nBB03@2d1(nNW-WJn6cbXue-bVW;A&? zQVy&YRx?g#y`Hb8j(hw6$JPK700e*)X--5eI|-bcV1W_?Hsl%q`=n(300fU)R_jbO zYFp&$eP!lr6Cr(Dth{mQc$2C1m!+gR2;zj3#y~4Kni?NYn{(B}8i!%aV+i2cw^cdS zw#OJ{#v=UGT&zlmRr@=PmhO9!doFRB>LpI<#@{VTIo!sgq>VOU7~PBii$do(egwVBu&|2Db0oe)8%RzR0W;VT-NF zvo~5wBe_nQuI6F@y#N3NBrM@!$cGq8CIESE&A9_B0;^CHTuW-}q@L{%TG)fdJx=S5 zD3AmHX%tl#=*AO@n<02K?-6cFxy4?KXZOx z7FR5{pVE0StH*oIx2*G9zqxeeXf1loZneMg^E)wZQymB9(@W-dTYN(NKnbeY1ON~K z>Od90+V_XW5&;B&P>1|!pu+@=R1Cxeka)$q30pzpy|xvss$XqqDXP@Z2Y7>= zkq3~f?00mGDWm`Vf~%+h{dEA9%pd|&iOw?=C>+$mMTRs6Lu5uknk*D-NvUn(g1lHa zno_2h-v>Ex!@@kp@@YsybuNoIuUa)|OE|@0Z!Y&7{oJm5Y*MFuT$I(<-N1Z7&K*$7n%t%(M#t)z{JnF7YA{tfkzXF!{@&aa?6mL7@fy=B-|?0EX3CRqf9|W{ z!kPrE02HKD5U_F2czqs_g@OkJ7mXu}*LwgTz~$ee=0hPXu?e06W$wxS8w_&@$dOKD zlTyQa561bv2_+ic2mq$Y1so{kj9CiI|7R?^KfIaFryvH8aRfqXsko$IEsr9Imnsz( zj)>MMa!6?l2B_g`=n{Sx532lPO~1f!itHB8D^MFxTZJKct{{L);B`-xruJPd; ztgPnIh&B9t^)HoA+i1_9_D?Lfz`OAih&NuGWZxpHZv_oDXo7=-luC>R-tQiy47^%j za-QeB)k9SZgoTTtqt$0>K07|e7J})8pxNE=UU%)A6@=bNzyHzj$M$*^0HaYrfSYb! z$4xMfy9bzm!P&L46pA2{86i}ahXq~npTTZ%>u6cMGrD9~=B)gynss|D;QV-F3I}NG zy8feq^V-x3|NE3={{RGTT2^aJGBFCar%E{Whkt|-;CLDfvp@{HX*1v24rj>q{;pEwt+ zcy4m~buCW)px)pA_2Z=A6k#$T0!h9f)p$Un^Rm$VzY1?4v@$1Jyw_zkykN7;C6`%P z845rs^Fxm&asl=t2TMGQ^?Q!%g@DS`#8R481tb2CxXl8r2Gvij!-4^s^z1{k;f{-#R0xoHCbV^MJQ%ARJ-pK@rxTyY-z|TQb8g6&sUbwa_(9A72&GVjkUnI%Y!4bK zmce%y?$Qs*@DUuj62b5`sz|gT+Dz)E&8G^v|NFFL&;SH`U{>oXHMmnln!RC&lM;nl zS*@`ZDTtIR{fC*nuR76Il$>wEk=Ee3!Fh{B*RQ_xu=rh3>(3o!ze+TBEus;&sAfbM z9Am%yiXc=SV?Vq|fJCET-T(s)G5`P+tx3sMC6T7=@i0NFsQNl^pyU{3&KgjSQ4sYq z_h`0jLpLRydn6)Al&dWK!ou|4JWQLK>d1;;MMfowBvzOY->KhVW<8|XR>j$Gl>Mfe zp%{3E-7#9HgAfLM2ZN%Kyvmkr9dC1A;lrtxPgyZ=v4Av`jyf)&6|23@87!#7#% z4+eaHf=#B^S=_{__PZpgAZB_1_`%X@*F&+^mLx~qMe(bNIfQK>v< zPVq_N;oD{oz+*n4ua6+B4{?zfndgsg&T{u&GSA}c|NEq5@qh%)TUL8dGx}Zx3g2Om zvlF>}S*<+L>2?!qHHWdJQ`E6W4{hh${bvILdq$JrAZ0Be0G)1L!HJZcY44ixFyRnw z4kZs@!cexU(4i0Il#*)62@ABrhL2?5aSGAWFj>KhkukUJb5I5rN<$RI%= zKq;y!X1PgLI$}yCDVlZ0&8u5-HPJ2F)zh0=-<6zH6hK7UDU1nM#_)J%pq0r*)TSB^ zI5pl1cn1hD9ED)c7xNWnw19t>#N`zH0M&|0A36N1(OLKAdmqi`8^n!icD&{kQp=Ea zU;mKnyJw@&AOvR!A|y2$cZ`>T33?X!=O}v6P$Er5qX>X}K*aV6RcTtZ!>7wUPy;&Wo>uV#>bvi+X)>Z)$@tD|Z=mKPQ$=-MU4x-~NrII={? zh?ODhqR!W8)MJu@L8U}6u+gCpt5;bh>x^~ zU+7@6AOuG6Xkr`sS;WL?qOz8Ni!l_JPd$OE$(g`CI*-oc$#8>DBi<0^g%c5ZTkSCuX=4-Xy@n1fT%q^%q{c%;dRIYY!h^%_6rI&GEw&tn zd~D<^uD?^U%xr|UpalB6gucaH*ZixT#HtVzG=l&jTy|Z@RRaQW_7I78jS^g9L`bcJ z1S9By04yCsnCbyM@QA&l54Q483F-CWdoo#ctFn=5kNL4!P%#m8R-tG}ely|rmJT;_ zwl_`D0lk7scCuQnqfZr?BVmSswAEgTU+Z_nHf*xaqcpjJJJ*2 zTNV@J@cW8q{9tahNYd%O2d~9y%ELGoeIb(dvIj38(B@tAy@ol2GlHii^JY~St-vVa@669k$0Q)Ltcpm`|bE~$h<-U-NwM0MKK z+Z4$(bNFaErFL7CtS$BS2QbMa6mqL>8+nkwagEexdDdIif~S{)j0dR+LNHh&|NEq5 z^#BCaR9Aa1O8Q(yx~*k{ZxgA3SFI%1p>h^%J(s0q4=3)USN^I%C~ANLN=Z)84OrtR zpol7(luU04N{=O^1c}ZXC@%h&#&%Pn+YORwFw$hvq~y6~or)(Q^FvbYg`z3#p@7a6 zLEl$hFLTwC$4PJ@6p$=pM5A>%O_$fru17e%ePSq4QuN=|2=bu#Bx7w-F=j>+lG$kW zlo4qKVx;U&EH=UrqyV`fb1l=AK%cq6NaR~h=*TgtAQnfmlrP)rh&4xQmOw`C)Y%0_ z=i<7vzm925W_#tkGz=!a<58ymB*Cv)YI!?;*i(YS!9AQ4nhBoxy#fKISZg6AWFL@( zls^eOzo+@N>{l;?Ed+=GR`mbcul`V_0Kq^21PLL)qoJRinLP=E0U}Y5imu`V60u}< zF@WfKDbp#ZECdY_P)iz2+Kb6>(v|_=$m-yh10qe5iggrs*_^Y&AndARY;dy-wy%Q{ zg_=>yJ!S=9bkeITnwq~gJ#6S6k`N}#XInIIr1AvATxHHPW+Yq8 zWD3`D;5n!L|NFFL+JFTYU{-5SOIT6GI^AT#nG}_GQLVhxfoT=1y_A+*UO1!y5iM1W zSDjU~k*7DK%rdP#P+Fu#WpbCKsStq*@0mjiDt~_H?&$No3!Md$3~%4}#2?+>P~?KY z)uPG}0DvF>000IhTxkoR1Lp0ClNJbETtU@lsA!Z@D{WbYqMaDv28Qm03(|iY4_txz zVFHl8wl=N_0vN3kgyP}Spxn9EA)&+c3_LoLcu+HP>< z-xfKvdhxh+Q@nL<1atx_tU@t8ER3iY92r!ll!ORPA!`gEiI#e-AV~=!LG)=*20Kuz0#S|P zu*?=lAvjmQStW{+-E^TOL(Zj2AfZq;9C6m%w0*}iJR=hm7BpCp!WT@)(QzOIv4z=l zhDphYQIbt8U8V_QLrW2~mw1?ViCMK{sxxw-nq0Kd77jslDA-)tQ-#lhC>uf!9u$v| z78I-*D)0c{TvX&%|NF#b?tuo?XVY^}WI%4oTQ6mWdl-G4S8Y8jfvqJhHIt@zJAs`M z9da>M527H3Nl76@@{R+ANX5@NvQZJmlWl!5W!kaM%w(Uuk`AGjpElB}GYGvJMadDQ zh=UUuj(}KdDE_JlK=XR>wE>QR%^MUy$4blxC*02?X<-q}#B%6d!sCLlbi@w3IWU}P zRa)kr=c4DGva+$Wjk^yuTmS$4`j)EXOZbYB>cnT^N|CHU8jQA1`IRoUC_?_)XsRMW z7cwyj({L@)Cj*ikVcH{T(3g2Y=cp4k{BOW~s{FwbJxD?zJ_90#S}Yp<_Yl!+?(^U%0@5LJ-6V zL@bdK0Ym~C%pL5UKoCKfm8B{|Q7SN*Cdj^o=rp@biQ!N7A$kpW>omsUoE)ij7hpR z64kG2Um^0{axsQJpU9eQ%&{It_cWu|hN4l!H^;>J(dT&0i*qgr7*N$>%QxmP4h}K1Nv+vz z>go_%zcpLLEw+k}rpl3m>s7?Y(!_0@XHuusKd(i6>guQV6PL?;qE_u!tM4CD$Ry8h zBQJ8#Ilf=LX?ykeZ`b!-V(}r=P-FrtDoL@3D3Gp-pk*jBsvZc$b_7qHB__D#kbobw z5r?-kg^(K4RocUvH^#8jQJF--=nd4!kibo!x3s zytxt#CoN(2^M>J*8sGX+YW;L9bC>`B|K@7wV|_I|$D&SM`vO=TKBnr4LWkdJ)gGx} z9^3!`03fI$xXx$;|NEq5_kaYGR##&$OQ2Oldmm>BDiV=jS3uTwHuHNFXAYPxHoPz|(shjc3&-mz`QV=w86QCW(--cyldC`N&lYB)Hb zd}U#;U63zx4lZLd7_z@;cHep98r>HaJ7-uU3Rc{G4&W@(jIagq_b(WZM9P}GoAp#v~cL=T9702bh09AX_>zh}rwQeVO2uRw4>sph)tt=5AfJYkGQ4z^;)iHhns|SBGf> zQXmofqN@6DWs8g9bf-Va1eBbG9;pH|NEq5^?(GyU0Hi9G-_A_s~=(LT@ztx zW9+>VDP9t5eTE_wEyDYO84-po`kWIKhkm0TW|&T73@B0n;xZs8i&`qmYw0}dGD(sA z#f>!?PI!2uBLOyW>=3uBL4V(oAekMu2ajQ--I^W}Fhf+L?ozB^>rgDggjA3c9Mg48 zclD1Eq6ak&vA1gCvNoEWnuGA}V9@+1app1*C~Jvm@nfaM>FL@HN1BS1+IEYN_9GSo z2nA9BAb>zz0xZxcx@`K%`6BZ`06@^E4CA=x`vm5 zwTN>Wg=BaqJARtzNm_~=g9DCw#9NF)6356=KAOyIo+f4w*sA@d_E3jt{2OuflRKAs zywa&&MctxIZ0ntAphl9R_aW3o#23BX6nLg=p-+k?Q_KBSw5Yl|i8ZwR;5WXvq2A|NFFL;s6A+Us-!E zL%LVQdf#c~cN4{JVeCCE>5v?&J(daly<|?FTJF0r(!DKXLP573rD^qh)_rqB+N|ua z&F%mH`%{vFD^J+%U;qE&s&FuoMuZ}jO}oSgG|?)D%*n>0R0|XiacYW+q`IBt)_9rF zG7d}(FqK1ko%O0#!OyrizZ9R(cYi_G>bTcg7Vn{;)zRv@78Z6K7wOh>R|!sdUnHH! z6NMlghRFYb`!^ZNQ`shJ;ZtI6xfx!qrKqZGHanWcu2aWcUl*ZFhVu?&XAdr`7jN~u z;fd@s^tRAAM=CW03dGdN2Aq%>7*Kxv{Fn@{)DV65SGyWg(Q3r7w4N zJj9`qS6ERJ+B(0ZP{G!oiV0Mq0`n7hr&#n8-DaaK^14<~@ycb+JKD6<2Yi@yMMc%+ z&>gAL@O^|}GeH1E)3*ssA(pR@sq$!$$Rc4sPa%qn^?5emE7Xi;Jz%jmSTb5C16(!% z1LD}y$6aUPEMKVl>+hmOv#FhshhT0^w|}0c;#sE``f89-(MP5b)JZwO|NEq5_kaYh zSXp}vOvqVedhcO{ixYKGW9(%sX=W6xy_O1GI1Vcp07=nw2bH1eS)#%uFDL;A*c=8l zVQ5Cp0AN6wIEb+PTaj(kzZ-ih9H`ufxZQ|KXGl)F*O<9G`qEz6rg@m=`iMiiO6{s^ z97_#b?zNDI+B3Yf?d{}H8u7T~^`3X)(1H-e=|nB;veT(fO5QIdlPZHV=5LH|E3cfs z-$M^xTCOn7`Nr#m_zulLhJ_JCLSzECQ1HBzCm53Hyet-wpa^2-5&!{iu^_gMNnk(? zNY1(^kBoLLFCD=njmQ%=+Yn8+N0gBu8d2awcWaWp>NVuDw`wZ8Ho7H$|N438h7t)3 zcSkCsUGn$-F?hoXjCbk50)Uasz->0?5YTc|+W@&zkm03-)&YP9G$8_WJ0!r;NC80y z1q70i$BYJhk6ogxf{7WNA=K^Zt>tQ)Q>6P?z?q1n|UpMHi`a z8PG~?682A+io&Gefs0QagBy#Ut}J~Iee9KuA3@b(=WfUnx^W|~I;M;5#MNb2gm>-a z=R95h4wY{1?05f8X2k}DPDl!H=%6sP(};sda^4~!U>q2@AVi62`>eJ`fIBe02I_>u z#_H|J|NFFL;{XK4RapB^Oj>9N+Rtg?iBmy)W9+>#DPElHeYO?sLM!PB7N&asl(Btx zx)*;+lb$|cp`g<~inL!x`hYI_>b>R-NqySkZ-e9hErk{W2qzk(0H($(X`%mBmX8l&m%b#>IfM(fFO9xSJ;_y3kX|pi!q}I5 zxVLDQ>2p`uleV%@OJ!f&`~;pNI-KI^u)TO^=dYvr6W!$c!r~&4UART;=EgXWB9b|g zo&+YJuLfT=O-EW^t*dEz^MAi6O%oQq-l%GZtp+(^fI%jLyW&&=wg+6YCU7X?W~{rK|tk54i;3{7>GmJLU-gN zq9J`+0I^CNID=ze_n3#-FkNq?SlZG_AAWDF`A}PeZuUdJ4^^$7*X&M6$1aV-tUL6X zy_4YN&scbdb0K>XO02iJdFe+=hbg*$LiGw4A3GLBT^vO)Lf+ySK!JG}N|b`AD&;q( z`KY|O!~Vx@47^o^_}$XqwVyxfVgLji0jUsyKra56qAFm@9rA$*0%L+k2#`3yh8*HW zfK1oA(prZaqLGTX0VGr|T$%u)WdoNPK*vljy>aU4v7zO{iX{+TCI2Z4;?|VeGvy;gFl_J(P-+3_WXpia-78 zt$;zMgE24^NV~$TOyZeQg&>(h!OI1m6=ob57li0a*buZm)J*rA7OLlGrVz=hK?;iH zOXOZ`Go+AX=_X~0XT4UO?;_@&`^qnrAwmS8>*rblB@Y zVi!>njj`fpx`i4kx%b7>bfbV@sTCEuWJTDU;Onu6QG7YZ%Eyb(Dv+ZAmNXIo0BnpN zhNcACXp;{wawe5XI%ra2fSO6;!Q0W&0gLsLc17iI6VIMZVlAlB|Fyi5=03HMlWf|% zi7YHBJew<-44Y{(CZq{5v`Wp6n2KN2WJ}+#>oJBzq0pjE2+11gvR|w1|LI^+v~*!b z6RFF_N`jMMhptk$kg$m9tRgv;FfUS^j(-~p1NN8H!(QB z>-Fxr)iL5WkJ-5Ip2(K?K95C0nuLrllO|>shGyqU9`;_y+V{(5NcV);#1{#Ue1Rn7 zs1t+y*jqJ~nJZ&9+3J%=#IB+*8MLBbQVcs4Fd z&167ZAASi>5-UB9gqkaT04YI_7*l4uDpdLKRuJkC5J#s*^ADO^1+};wGNv6&rp>*- zRx8#I@>50r{9K+6v_Fk(9w{TNk*_*W7EWwiT9Mdvvdk@dL@z=}$h|3vynm$jDQq9B2uXm>Ob>Jvs-AK53P_B(#is=u*l_4;IXo3+fB0~d66iTRs zFkp+C4-P1@jI~Z%mRzE~s`B?x{c*yW#ckw$x@l51I>ai2RvCoMMb1htb=|5m(~Y>) zbu`9b_kO?tII=JR0RRHwcaM0IG+38phy@a2=@yoRLbWFlkh1?qq@i=r(W8olufx;4 zX3Fq-q3N~DQL{cuH}`<^G?HJXR{d0l|NFFL=zs*iUswAqHCkckI_+U4rxGz?W$e8V zX^$MMJ(r3kD702Q5wV(MBa^E)Mz{Ze(JD(0S1hJ~p6>s(pVo0Ok~l&j5=lwL3^5mG z1|Wdri)P%%$}z!R1qCI9{Irwl7)_CopPWK|F+;`gkj63_b(6I=}n>iam5)0`PWT|}z z)r!H$ z@P1gY5W}7b)}OTdF9;F7;XYW46vEiBW7oeWN14&379go4Z~zbzj~`*L_A5Mvu?SG| ziGV|hD1jsg0Ea^C2!w+J5eLA4#$D|HlxYsI|NEq5{{RHpUfBCDOWI*2D&Juvu@RA7 zW$dJPDajqH{gxI~sDRT&-zzE*aiGG94HOjZi>b01ATgmawUnTEaii3#!a>e@jP|No zaY1U31A6KiGgTjQbfPh1rkCgD)b`*<>=iEyXx7ln zDJe13g3K!=Bg11Ld%UNs*W3_7BHe?ca|R!7?9#D)O`{;BW6mwqVKPRdbpi@CCm;!= zl)ll3&D0~4h~QLQxD2By07z|_3OhS8iwW)>38lgWG)Nh>CC0opI$qH|L;8}3M{qYn zTbN#p|7q-NZ7=*P7l)6V1BpRaVqGM5d?UVMxu(rsa$Tj_r{h*Sk$_;MWiEMDg%q9J z$MbP+@die|@+re!?bTei{C^b$E3D$(MiT}!3D|0!s6eRFPst1Lh6O(ulB#NDofWMZJUrxS%MOB&kJ98$evNiC%J$EiJoUZ!wL>o+clapVR-8LAMZ~ zDZDY_pKJXpn=r}0TWm(-V{#$mb1z8e?+jGF;=9jm&i2QqEvx*~+DmNR?+xQF!p|m8 zAjw>5J(JEoX_$o=)liN#P=al==V9ViYX&g{QLd5=UJ(WYO(_fn|NFE=-+%;MS6J%| zL~4x6>knaueNlaVWvnpG>KHF9wT2C~&zhQG;7KSH#ROgJ1x&0xCR!F_ZCS$C#ClMr zcovCuo0KuImEoYaY+ADj+-9Q%bd;A2?<}Pi74|*=xnyKS6pV@7DxYEkT6ozJ!Xni- z53@iF=V39vQYP*PTnvyA3PTojI|m%X2x1jg00;me03bVJHmFSb6Io~##Sx1H#)t!j zshNT*;Ig=Np=^W$GMLU^ZtVg~Dfqj*^(r@F9)Hu;8kIs8TU?y9@HsVwC;&#)E(a<_ z1)U`U#$Ja?zSLm`NtT;NkmO3om7pdz%i1vs*VZZ!Mv)-LA{vZMouL>rUrX^#&i9tg zzf6hCeLAMC;^q_1(XQPcmtVRlvyf*p&-W^hS;a`}B_IPDu>cYaQ;Yyc*7z|&go(BS zvy8GhAQiNpeN|+oJ5{YS-^Gtd+bdzer;tGXy{fU=2vK0@gdm&}JYx=;aS-yD&9aB} zVjJ-ltM~s+Z$vNM|6TtGl?s&=S&s|qgDk(4pNW);i{}sq9i8e~a|xRjlI^a|I<57n z##LYI#qW$Qo%N7pNSTvB$vI0vCL3b3;GrY_BLtBzt)vTeq-iYR4lF{#cA%7)2E*no zTrjsTSVt)*aZFrPUAnj_u}zWh7dyVoWk)5R;nk_LNhe1_9l2FWSB`{Ff(TqoBPyzM ztMHWDS@JOYZ+}|0Gb8Rk6z zUDabrHX?y4YW-mby;3c8WvsB#Vapb4HI^EbG;mTd0ANZ003Z-N1m__%*g!Ovkm(7W z0wxIphbeUIvsr2!)J11EtOd8umHQqVW(s~>3N~gQD?c|#xVMVwe`t$YVH@xibun4q zlPG&s#2#0DIkrl8s%`jtS!&VH2Q(-sELULy%3dg+f9HTmI>WGKw)% zog!ntad#oq;<#b8_FRuDD<7AEG%f`_|) zUTT8edJ7Xpp@7|E$e^t%`BbC#^isol)D&$nS1Oi0J)FH-t7q|64Z`8@w=Jz1*@Te& zzusa_&Wi>B$eMGA#~9KmAxk4J0ks4^Ism}S93W^aaS)l7%?SX24jMWMMVU(co2e3J z_U>*BpVjJH~SYZ+4PqXfpaztH-%q^$I^UCA5hbelkg$yl&c1P9<1!4wsw z|NFFL)qn)nSy=loN@{0?n%!mSPZMQrVeGLOsk9vHb(RX$KZjwSp#Up)kSY}-)~O?z zRR+9^Zqgw^_*`g>b=ZJiU?>)BPYeM?S>Xlsr-VXP?tU)rsvgVgoK}Y!5_cCn6p2s~ zGLNzqCT?cAKVQs@RL9!)*=6{QqrXR6t{?ps6Jv)`B>*G{sm4W-7BImGikp*xLL{UE z2b>5ExHN-uDuQm8?5sQL<1tW6;xVnNuS$~l7VC#wswszKHLD!y!;}LE0Bi`m#SWaXiCkbwf}TCg$cRyn63)j-*bu=2 zghs041H*$dIe7>IAyFx7@HI0|R&U1^A5LE4&sGEPZypO>tmvLN!I_o)=vk(*C0l>v zu=M}vzQYxL^uPM=i3958O68+J+1#o+Igs4!5dwP~J@zLm7nAujcU0|`l%1&Uq|d|a zamkT?QTc_V7{0zOwG#8&|H`S*TEGxU;ar3U!vXvmvvmTzA$AWEhuz-me&VmtQ z?aWaT|NFFL-T(yPTUdKfGx}cyiv4FuKNHD;W9>aNA&QhMy_ObaV4Dkytc#1aq@q(P zQ4bRD09feA7vttep%$Cb=IBBG(Z$f^?)=T!TNhe|(S*`l7gKv}Hb~xH2c!Sr|MvSH zF#;!4qyQNRH`3tFRJ9-mgUMu*P?L4 zGl9LG$|o%Q(((85-h*(pi~Idpb-;R+NlP-K=D5n=+rd`yYpiceB07U@3 zx+Mb}HWeu?R}}zW;1QhAG;K7+6d)3S96^AHmUPplb}|0s=(cRNNaN*h<4Ui*S?nK< z1dJ`W7F(r z#Pu^MbL?eRsdtjG450!R{AbpqcbP|2OA(^#A#WEIu~e3AN5*h}%^mSbVQXnU`s02} zFHxK6C4qgG)>PKHT5!!{AN^OfHwoXrTkYTds;s`sc~OxfESt7zHHBn9Q)M5fQ=C=4=+2Y=+b)OJ>ap===lXHv2u=D`b&R4m4DK zBEd#y!G(Wj|NFFL?f?XzU|4%EM7V3F>g{D>#S=wqVeGLuDXE{T^_PjfyynRdk4z&2 z2Fef_@O*~-llmsymO#fH+;*3$T?Xjg4KA5&w!<4sedfzXa{@qnOG z0VNO2qyT~?qB=h=RT;C^sL5|j;icY;?NE|`a-a|w^F$<{ED+RmJ|W^OP=~w!o6AF-EQ`38B=vRC<8Kl*`tOY=ttY0|t4`@v%ZVB|<~$8i2t)JcXyQ zZdveEF>4bpWQ#W^naa)R;_-HJse~o0=1pY2^Ap?^sMWKwfv^xFwH~iZ`ETeg#>=xO z&n|a2xRCFIcXEEdj}~vL?6|%add{iYDK``l$lel67*xO~uB(Vq}EKaiASSy75jxP*bq zx5QpK=L5UX?y_c3ODC@4j zXa9Hof13gaQ$wT#5C}WnU~m;wpRnebIOJIOLi-i1Oo@?cvXjTd=3xghJ|{%%|DQm-ca7i=m$4N&p{Sy|At zVAgM1yr#A^vS~)^6Tw!Td5p3WmhlW>AfGy9%Yso^^wnF1Qe+QG%;z6AYjI^8)-G87 zf#yA`OI!Zd+HxQSaOlPXvdBBXGAkr4kwG-F!=5oChQP%oLGYrNvlsBe47jhOn2xPW zR1M9_?Wrms| z|EapzruS%T^#}{18_5U|lwIPZ!7#{-fPJta=-}~BHk^R~lVD-&ZO8=pE(!o1f zw_9D^>C{0%Z%$puO$4uP8E$zZ@7+#3horR2Nl#*j-D%4@F1pkDAg6LjPPXjaXZFZbNB^__&YCO&7)3Z^CJ_WX%7NHo!vPZ*(6dYI z9k3(|wpn^{A(pMb27Jl32;8CsAk;5-mI5&QIn9=;o`O`hT>H)f3%eDOt?7izBVD+=>$5S|R@o1#HcYPg?{cOzTe~z!NTH99}j;gqW~+SACRe z2WaQzz=e#uSq+MdnwZ%jWtU=IMhytYu4*NwJL?k)R(7;8)5MJ$2w zg(9E(VB6JC|5yIofA$%Ks}U*^2?Si?hEt401j&>d=Jy!DftU_R)>sfSBwFbOtE3`j zIdu<7gXhG`D+^y$RuyF+D2tq+Hc>t%qLRWFOP`WDXxf zN0lFP&>>Joa~Eqe!vzQYf>vP$9FK(6;9^1Rs4#r#ZPR>I9S1hc;xT9Uta1Q?z90wPqR6dbs!Id_7czKebr zcjXhSaAW-?kL$zO3m;`C39pcnqNm*Q{gJoV%KN0ox!`yL|op$$mo$agrelus)n(he%!Vm%gC;@md!E~Fj6v?kd zsYW7n{bcRXG{H8G&Yr-_P z7wIgw#pWzN=Os-{J4#;pH9Dc_^Oh$Xx@bUOCeOUp{hEG}b!rd2OTQqS#{W=;iD7-_ zB!*4T%&$hD zDx&0JEa;AeR4!$_qQgrbG+7FupI9-VYyMuhv`{N}bSNtCcG_zg|NFFL(*Ok9U{~uY zeb`gv+V5%NT@oc}W$j^S;c1)fy_A;BZ)#L#Gqp3a%{hik&WpS(tQapm=r7ubc9pL$ zPb+5OMb7>E>YJ{r?1F7Z1E?(9fBX7Bu6TE0$fS@VPD+t-4jVWDNx<0(k|<6I2{=NE zAPeCY=8BM# z8y(1xJ(XVt2mQ{wXnDAo-DZyUR^uA4n~Q)zb0nQSnCr zr@5pxXKHe?+S5Bz`{9QzJL@YR2{_sccy(TZ10I*h2pkY9b(fR|oFW4q27{|wXiy@~ zUoN2vX#K4ZycIBo+2rJsd7iR0vsnBcc{~RieUJjmv@J%+NR{b17qHa)AJQ3-<$vGK zfA-V=zhCGe21KHRN>d0s%B4dW2TB1898|*37bcxO=uaqBL)Skn~? zM+&~+m?JcugYW^PYD*D_6tgN7tiVyA9Tiy_P1-2zl*d`}bDdnrz|(XNdJQvj6_i{;E<1 zc9CNO5hS_6pc6{Z#uN!I<7zap5atjZBWy&=0A0Hf4^KYX)G}T9t16!5Y8TfEd4$og zX>i%(94DT`;Fp~c`m*13Q~#vju@g7w|D{P`nE3ujSsaWr7MI<*QJtSE?Q({HRya+A zt4%&N&A6NFujzbDB$Qi;o46o+R{TTWC@|xZD5_*Z$VHHmJQ!dj0_R0ZmfZmM?$zEE z3MSfKIBUvl#;y-qiYc0!^y2Y0zLo6P9Tae22kRjjS_KL{vTViH4XxsYi!V&IQAL`O zd(U@$XsbH}ro#j+B)|q_{KRUF4WKmY2oU`~-~O-v(g6Sf038(vGJ!)B1~atN!45|> zmktIN8LaCHgMx$NQ!j#w2?4&YA}>)vlgW^!vyj^n1p!xfT_lQ^q1BwUN?tXYJDpOk z8_OBD9BbDwL3maShTTXHNkE#+fgz~iu=$IlT|`=H4ZiPw95j*=lYL|QB(uerA{q6*Ii-wP7zLC_TFe&7_9seA+`kXM%WI?v?4KqCu0(t56Ted zCXH3n|NFFL(*OjGURe7nMcQFSyA5UOO%@GZPZD!QVY&EcTDT_~JrmGaCnN@9=e2I)BZT*Ca6wO9TS>E6YSulP-74ixN^>MIDRdx^?@(k8%QKhZJvSv$TkbhA4I+fa6;R4l6nPY& zI!Uojx4OKyFHNQjrHq-{OO<|Y~M}3IL=)T{Pn81Ug(^W73klGbFhH^h+ zl~SzMqM3#jMTkzVthS+3L#%G_bE>3N7T|Up_fUeJ)=sWn*VP#^)`KX@Xx)T zF~2i2+s}gOw`LN_jG2$WYHDQ(%vZOH9y@loG6Rt$=XMa_!2}co|6#%e8UPqs%P$pe z!;=Cr*)Ely2Ym1Drfq!;;`8-88{1^8>d8E541yjg$c-hn&V5_8&hNkenxahYXMNe( zMG;EIm67bJr2!T*%#sD1tj|OfKaX?XWI&nH5Xi-mwJ$0`Igw;lBujsU9xq6Eo;A8v zNM_i3DHl-BW9MqJ^h`NJkgGzOVJ?*ru%trZs8$~?UkSQ1x^$PW7+i{SYT!aG$`NP7 z5vWP>A5h$3oD3T<4WAohp2LO88#1j?XLCkYYjy*~KTI??2G?hBkPGz&ThO%g~396WtS z@^3rrhbjp%a;mu}E!)bIqw;gM!xP{4(Wp-U|K?OO?@m#5mdw&}x2O`7l%c|&dY3)0 zYK9|4Ax`%4mZEN6N^St8+q z=B7%*cFHFUZrq)>dICbq14ZoX{;W8i;X{WoLY(2)%uw-OQQ>g!}Wt^ zS%eUH46kUbsaBqCH<--2#;n<^>dm3Ti~Kp(@R>dV8X|wP2wY+qd2xv>1N?R-~GkTg&I~o|5{8-E3rz1l&WTu z8t5j6G{R$;RZePTrC7>_Ql84n`Jc$Bbug%GY4nkuu|R!&os=7GJ>BuFCImU9xyCY}QCVXsyJIH7Lwl@h_T*|~3(v2nejwZ7?30O4Dw^!d@%X!L zf^W-MBPLQZo<<%jj_#ytE~9?K#Ek!qq9z|hZh>UFSND7At)p^m&P-sh#aj86#z7XQZW!yNh`!An@m2&WhNLf;OPKj1Zy>vV5SYRZ!(pnEs{cEO>;Uco8m_^ z=ffe|vgy5Qi*YGq)iw*(;o-JWv%w(`mRsUL{>pNfxX(A$Xf4vx~*#i{^~*D>lBF6H++}38o-PQtMc9!A;WP zFa~5bNc|fo$EzHMS&cVUeorTL_5!Ojkx#IKu`U1q`cP-;fk?(3d2S!{8+ zRY@e}4OVG(rftG=RL{})#D{%`@p+R;mjvGn8UBa=tItvPu^;s7xF_)r#hJOAyEivf zeEuad$n~8E1#JujJbRNV=`?JQ+nOT>6oTUyHCoLWl5=1Aa~U$D`zqh>hMCXrOP)jk zB&`4dBm+A~0Uo%9L_mR71(%!0)DVgRfdBinWZD1(ZBbbJFG6~CN7}7rg0~Xgfnltq z*&$^TD|LsVG$*uAo*1%0FAi5VT;D$lIjH&Q(WLz-X^wI2Asr+Kd=4@aoQl$ZzS#FD z0*Au^aZul9{`Z}@P`zI&@Bjbk084Jo0-{AuNZ1uL`5>Hb>cmEtWF)4*xI|*E)j=Fy z;b9y)cI1J&xUh1b;(={WUjSHz9%dO3yzAGxFv%PQsSY1{s82jxWWs#o~m+_;oervWp z-~0Q$ayCiDu}U2 zivo_4$>c65uzu3P0Ws!k7Xf^op=_Ey&esa4++|1&F5T^H(&mqvB%o=R%kk3;_a=pp5CZ!+!fB)!8l+US^l~PU) z(Oj^64}qOWxi9~v0B7^LGg&FlD8aInSjJ?pIS2&vKp=_h$%O|ZDT`MmB`fEzD4Yu! z*odLvtVGE|ekN=u8$qpgd(LHP+qa%ADW+MRQ%lw?x6d=+cWln|;~p3htD+VvoAS4B ze-ghX9lYBnQmI?y=Rm1={!yHYmpgk+NkffHIMuOv-?uJXoi-yQD?=YG|oB*y#Xm zLF~k#RYyWxq|E0MiS?yyZ-6b!FB=O33Mx6&d26j+n6|&P34~!*A*6wo6jB|OLlEq? zj7q(&{}hJ=Vv(Z~aHr>)|JByOAabNdGXcbtd~$;{V#pdT5#M05fk*_R^-~cNP#ki7 zIszWC#p4Zjffp)MOc#w%*1FGWb;p)X&Df*=bWqyE!3G%yO}3bmWlQ++Ggt=!Zjy*M z+j*WjO1`s!7poVx)>0T@(EVT3Fw5|}?nJUENgPSCv#U!h9KTP?iK?8830fq001Bf?XKAg#tT*G9DoI5Lu0Z*Lo)#hEn#kb6rm6rckWX| zT1F}($#QLU%jk}vBLMDt(lT6rzb_z?};Tw$%AZB}l&4{~}jxg>eT6L$r)kb`D#0U);>D z*2z)7eJ{;18bNXD0S1U-WdH&MsmlxufRwc`$cejJFlqwS14o6##*9)yrtRxw92~Q- zQx?IF(I8afyBKYn;x0L-Gcg(MPfteh6tF%hsK(1GUTaCJiy)DD2?+@hj2nj|Z!IG%?D5wOsMYQN zv&cunera#;W>Wxl&FoTLAm?mO)L>RJDzh$Vq{H((FVTeYKvy!1K~j0J;nOx#1rZob z99@YDZfcUZSAe*Gm_y;tJ=9LUg(<8AOgJl-)h2NK(B}i0qyPJ)WcGjryM+ePQiAFKL#PYqgiMR4>o+6nVLsjZ$Ov^-4Fs%?G%P?f?IxG!v4Rga8^P zIl(cU#sHEWplRuB(IiG*iF16Yfvf||nso#T7;L5Gb@8n=O_!+FzKfOb0{NIbQ|vgU zhV`SVhls5LgZ#_9N6qzayY}(Z%F6NO zpa1P%l{`yx&)>=WR&;Jl_n8F9X&tzbQ)Ic!7eHn%q0fzwmCHsQSRo0EWl;u+ho98H zCML`fBN3)$byVqUQ?Droxam{(+4~d3c)9RL>vPQM9y{V&Xyozh`M$7KMEzht@BNDu zxjatjD(q4-hb-vXSyBkjq!dsX_BdV6X%01|GCWLQW}%xSXr{l9Q>eV9E{(~4^&pr8 zqMv3!K^Zv9D8T5F$W4?{(j9P{nrdN`2DrOakrfS!PzVTWb*9$a>xK0DR5W&$B#R$r zhVll~NFDgKa39;a1~R!G=pI*whjv258C;oiAuQO@X|W5cvtdfVgFhWugewm=dzkMq z62yvHjj~!in3)k$>0^4BTm0wxtC)iWXUP!dbd#8UXdjeHZ{8v zb=c@qzTnTtRxoT!)4`7Rgxrck&8tQ06CvtdEL+s;bHKCCm2(hi)_#(&mq_dWp-oEz z=GK%186nP9%mh1J6!;bV^C>c5BSCz0MiDig$zG*A4^clG%x8oSGjFJ{HvVA_($C4I z1mOZm@5qNvXv93JI_%{{n^RRaXT0rL|LXC@O-a{sKYKya zIZ;KpiZuG=V5fMUWB`|E+UikA?SDN)VE9JAS48zYvghtmtP7u&^_AHK0GL%}1`(YkR);|m@%91o%3lMgS?`o>u&7`XOoRK z?b9auv~{xPI9_k7u0Zxe#y4cf-PDad7d3?L|Wfvh_MtceP67wd8x^rYjvg;q;~s{1h}eTq+V2|P>8`% z%Ow_pvg$%WP|oFI5O_u-KxBeM^(zn8)skt5eXYCK1^M&*3+^3eG>b~ZYvxLNDf zZQg{e+2G=etw(AaBy}V7{nxDZ>YzE11jSw8F%c9niZ5d+wWYuR=s_4=?S@-Q?qE0r zN%axHQDq(kERB-cD2k<#LyaJgVXPmw4JuWq8dCeGj0ET|7FYPgS=T@{#+XCRs=PdL zeP3RQ?OKOMF+?(%!};*OxV*2HwQ9eGc)xHivHf4?d2ps_YVCCA4|T`!ZvwDL@9x%3 zlQgp;xY!n*HfLMLtpp29L_myGZV8mA81z#U>Xf3Z$H@qI89A0a+@`bXYbu zu=VOhBRD@?K%bla@=iAw6QaT5L37Uk`=en52P`4#|Ns7g0SOjI00hKjyhX4f=s5d-!F zy`(6ISmyShVP=7YP@=JB3NY*RDR&V$JKRx$AdPPdd5s`zHAYAZ|K0)d&GC) zyk(D8cej~|7%+;7LzWmzZ!|Da>!-(3u67p3Jz^YPWeSb%=RWSF zzwxztC}VhPN_yx1%ZXpTgIdL{p;jB4^we4JK5>V%mwB$E1FlPK=Zy@(j}pv`&n1S4 zg4ZK#SSKxZ8xofEn3yN=YRAaG3N zu{9epS0g4G!T@CO6!}y<;ITq7JCU!UG#=FZ88EdB_{@`K50}FWijAyfl?ZzJ2hpM zh!GyHqlO|i-HcZl6{*#&KMJ_}p!8N%EnKtxrfe8c$_Ise?M33%tm+M~d#-L}L*lX* zpf4I=37<-#;!Em#Dk3o4%o=08sY@1}5?)x2Rr3;E#))VZ5oAV!kR(44d$d>>;G|1O zwz3(|lyI{0g+r$2X%gth`QLT+TNYfMc6Vy|o!!!0xEsSex!0Xjj?z>r)FmViI8k7d zVI$ujfgoCP*8lsoWZ-}WB3{>PFEx5y=Nms|Vz(4gd0VWc+Ub52tTmOV1h41w3QO2T zfyBOV6*@dpaL%EblRlw$iq}F$Y@q-DwwC^5O() z);DCu{;^1Krq;O;txGZug01g^F+?Chy2>h!*~%78<DWT#^v%V-TYN0yUI20|>HGp7URK2QmvJZY&*am8gn<;A6m(BJL=`ltu+@n9#Ly z!6CIZe7VXoZV?x=kH_j+oL?Bz+=(HS1Pmq*0W?mS5toM06s0?@h)$Q5{qu|`HroNu zNTvUOL&zNdCx3tS0Hg>2WGOL(#fugZ0|iix1Ra&N!vz@@C>RQUheLw`p4L{Xh)%6} zz-^>2^DcL!4}otX$jnhQ>0g+;tA>Z-c**<3cH>6s;xQkc^()w3Sv3cqS6@3Wt1nIqf)VDWWYIdm6Rc>UW z6ZObSB2QBUHzxC4L0l{x70mf|amIZ1Gix(|wryqO)vCsM26qW#z|?oN10`SrsR&9y z2<3+Kf!mb@bRK3r2><)EWb6P0^j=r%4@~-KrAohR2~QWvfl*Dd_sQ}pD}9%tya7~2 zm5HZdfzlx3SXUsnT|nu*m2 z1ONm8#VtgShE7c9&}n!mBH{r_MuSNMk^n+UqT$1hR1#Rb_Rrr+NMvM<<<(|O1#=7} z!m7hB=AbGpVl5hbDVgkna46G3al?jokh4IZN($_b1|0~xaEctgq)tw~r8VrmD@&nG zNaJ&i{3%+OAFOwD(%08nRhjg2Dy130N~y$t+}TY_Ztfvejqv8=akWA`Z|;y8uHcf#S4mOQP9Id{CWs|SJ+1+6Ai z+e`a^!DkG%rXsU=Tk(a-)-HwHa_8Z9J9@iIa?}5~d`3i6%MV+2d1n zS|WK!M=ZjgSEc1m^b`VfCI9=hWZ4D6weD~2Q4U+b=%xeV3&8_|j(@~kVOcY0k|G8&{8jpS0LKFthxJnqgSt33J{+j)&}P` z+V-+hD$^|@O+rN48nvL~%f0Bp-pWMYZ^fv?Y4FrHBO`>p(x3e8UOZ(=6J6LxRU#@Kl%f%$ zB{>8&*2$UymMe<-%t)wM8&b|;wa5tInpp8)wr2^oe2xBp(tu5dL~Rz1XG1hHf=xAa zhce>|Vw>U$RfZ@2Ze{;}=WNS4=49dycwP}3AkE*(2rOTh?8K>#P}P2RyrByzNGY4_e3W}4j= zI{=4(naLv`1=_D5RQr&G7Flt>$R^i;z z^(mDEdMwJtR>-Kw+?mrnHJMa6s(F<<==Pa*nbslUuj);w6%;fCE3Xg$L6kbkOcvl` zS^>hBxrP^%9L)r7qp}K2P$f>2ApiTcWZZxRT~%3o2{k%*>N_uGBac#PZ(*#N7b*Lo zYPF^!)Vx;~SOE!_2VOTw{Zwmm`tvIBoLhLgaC1~}94(`UtM!?f8YtAsN>6IP*}q@V z*oC^E#6dW)R6cbaaS3cfA3y)s!!Gqpbg<1;W5tw1Gih+yX(VsBTkR^s30(*#qs)L? zPF_n;K#7888a1Q57C{N~goqRx-5&7CCt!im?6u-hA$iK8k&U++O0~d%5?%?EY6s_Y zBW~1_d#I+1+HQ++#Fdss68xrm+qq<|`;)0RsVnW+x%Wb!k*Tdq#$n?AO)kQ1_(eFS zMfG@W|H!XOpo7Na4jgwN6(TezR=lGeg2~(dncGn6Qwn4O^00smMFr!RB|&S3xQ?hB zMF|}Vs6rqb23D$t?hGyY(<3H}6jv;9cUW_PU1G2twaJm{P*2kDrMIokSiE4aLDFuc zQ@mMTW^8CYFh*qa3p(RBaYBbodDMQd|1+#1l#--UjhT3aFz}JlBTvE#K<1QTpo-1P zqKS|U08yZ*SyX7CBT|UP+cq`Cfy?opcw|+Wrg*`9zBCrSeQ| zS=NbXcHfTvHQKGAf4N^dyWf=roe63LQ!+Ot^YByyFtx0P0S1RE9<`~qk-l`ll*w`_ zfq=@syp@fm)yLKuisY#q-Pjln?D?>e8UOpVWZ!@UgJ4(dDIIuVWV+2|>4g%#d0(wC z)~Sx2Y`wG!tx)M6#hQj(3US;FMfm!juh?E|?odZV4y#UsDxJ^&{kLGFskKh%#ccoe zl^`REt^#6?UJYnJsC6?GY^_A7kpWj3A%l`CC}kS2%auZtjHS)O2>}wlXLW|qOf?yP za~$@?;Q8uiqg@2*25ENW3NIC9HP&iZ3yiP3|1FXx#0s>k5fEDyQ!-Eazotkh z7*RwQ1}WP9n|0~^C|wxGJi$aEz)(ztoOChi|Nr}>WcUCCmtR-w2{p=8Cz~B*f{Rnh zfnDsR*&((bYW0+gr2opT05RpEgJNn2BD7RGGS$k44=PH!`Y;8kli*`o zyc#Mh>-{I!=n*aq$qUPGDtVG=w~4KMWJuASQX;q-Ee|i%GGB_lv_fi;&jIR6#HBJG zFA9+-w9O!>`jH8kMdIoxrIrfml6cD>Lc}m+@iLa?qFIX!HVqp*5p#_o$Xl1E9}zFb zin$P^L`~hwNkh%ZTophlg@;2z+LOU09z=Q(NJPZAF%_N=(2NA984d&zG8|e2NB_R?3Yq7z>EUk;Hqw&8q*>u&FMs+@(3+?Mk zgQ(?={UjR71)P8j9Tpi4q@3adMz&7Ff|02S09a1)Be5BB>KCfm^JwccG*vD?NmYWy%E#=3$EV?f_+tfTHqjd&Vs`4im|3Q%S#w z>MmVVh$STI?=`k|e|gJqFw=g`{TkLr1jZ;bY(+fnue^B_u0lbWIXE=`Mi5d6bU*+S zX*t1+1HBKkI3$|iAfjxN$`Qr;y&%!@MNZB2!; zigqc4)|}1c44SSAg}AtkeUkN4FP&8}5McKej(fgdxyIt8+6jD3+$u_*Z~&P>NxR9by8N@r3NHq9vk?YqyN6=gwlposvoUA$z4M_8V} z`xZP7AVJVz3qEa3#TEd>P-tR77TR}?I7}H}5`av6%_0JcN>nJZRJ15_$V4OgEuypdC&2lTdL>nXzgn@AYsk!!(`KFy@Z)+?et(e)71E$HnuKi(Zr2D2$=xWTP zdjI(rkfIngAro!Gb{oFrtpPj|6j~6u4WnS9?hM9hU{sWwj3ysq02uC%w~Z+}J14sJ zhx|MitlL!fyP7rW&?lJvZ9y_>i%S2m?bqK-$W(5_>nXO5$~l@6EKc)5y(Jn$~U`6BhsmBwzxYA^%BukPQ%z90uyOF#Xtpw8?l;z z34s`}iIEF~fSWlbfY%vJbX-%`S8R&XAruPUL&=nUb3cPyNxQDyCD1rVz|kKhr$H9g z!{PE?z&Rv|p|5rix)dscQ9PJO=`(KK!D4HGmc;|wQ26_9p)Hb3t9h|VQIXL$N-=uS z?IE0ail*pSaOO?O>a=sQo0oYkF`%O&Dtd)xpJAw!1Qd{f5kUg{seYl6jz{2?azK}e znxnENEC2hnWZ!@U;9J;xDHdpQX?ne3g0~XweP6BN2kDlUYPE-<1|T+u*o$pepqJ*az_Ar*5$WrhFLBWEd7TdTv z6t!5A-lb0kpbTA8@w9+0y z7mOD+N}cvXEMiCs5)uIz9(Zj_|AZEJ+71?S94=DCc4`0bT?^?0p#w=&AVg_B$qm3N z+43-bB5?~yrP?7#YWWk=4Ps`HMl!yF6a8FnWh(AbyD!%;YFq6G=w;Fb(QHoL3|FVS z5w%TI3q?7CODiUI0PW$(r;(3u;$Bkns9l-Lf&6UGPCq8kk|E|L0tu%Y1sOMo!Sfx> zIx9<^G9s8~Vi}KUG;3<{CTueXe+{r$IHue< zOF^%z7E1<}1ZaWL3wgQ}I)*OqyfNgtOD>rqB-J=`Iib=cHh<+$RK~=og;86vZ3IZj ztvx|da0(r-|6|y3ko|wy0U|~$LIfmJbBqNhG=$S+bm~Pj%M5y@c^D9;CdAL6z%ba# zBaQ-PI5YQG8jABDWOUg_>R+a3`;~#{XCkn|k$4O{)-$- z@l(2=v3HRG%Q5dW3g#ZvCFd2V;}wYFh9nK;Gqq8#ey^m0DH8L(>Bbq6NBk8>DD9sY zFmR&;FaQH>JHUViqyPJ)WcL6Bs9IP1DK*+xf+P~d4qx4hSA?dbu$a6Pbkt%Z!7OU1Qauy=TiehC7#fhO4u(1zY-TY< z_6-D(N>mBUl!XPIK?pTyz|n_;^;>AmQCDxCCIr5ovamo!g%CXD2qY~C2oPj*mIOt) zRbNl(|Nr-D%2Av^1{je5>jQW1TmB&xO`t+i#;+VOr{qSAh)DT4o;J#2q9mTsOD2cC6La~5 z2~278%d`wNgdn2iT^<`xWfvzV!T{H5EPKi2MBB1{V|i8M%{!^gCP#cr^!Lxq#$N1h z(=Rcs_usD&ciZbDPT^3n$a33tm?UyM)--a1$SzE4gQJMl2V#>!3DaGrF2?<_3CdI$ z^#_X9k6#WT((Cj%A#O#?uZmN;ZD0nKI{*8mWaNMZmsnSOOhfu(N82B1;$2cXabK-G z&8c0KEj^|Q?CWa=Rf%}$Kt*FuffXV6j4)02(fxXrCWfoZAc{b&RV=K8Bv3>zoDf(H zxqdIvljF~t`|@D`rX-Mn3-;)waun2ti=R?ZN(xI1DIjA=MhT1IIfMh$Qox?y4K4EJ zZgnp%|8dLEet*{!7TbonhWmmslg8ac%N&e>7VY(yvFhW~am^IX;F@Maj&t@ecHiFp zL9GAlb=jLU?zhL=iwC1gt?VB&Wj92~VoSr>5FzHSHfZ)F~kqGi>qU29u1>8 z*t`V8&p(cYx&wAx`p`1Fw+%fF3M5`P9@ZFcyFSARPVvEPi#b(^83h`i*C-d z4J~uq#K=ZOFaQ71{bCM|H3Ui?0tt(u95^OCm|2c5|KF4#0000A14fJp2$?YUs7=H; z3OZ?$YuJgQY?QddGJ`TlwLyT6kXU3Wu`sOThE;TG61JTaFg=Px0hXa<4WdHQEQdE+ zA4r6F_}nKL%PA#mrk9Z2^YPKn!3DjIUisp=;qTVqsTmsADR}VKrlw?XnYI0!TQ4if z>bqgOX2_P#BD1hwA{mIO^~u+T4w=ww%feuuyDim)E;h{UoDhxyK+vJSuGM?MJd!AMT*=Yg@1bD1GA^_xY zpIYToi})=&7HQB6SplSElP1Mb!9wYC9C1*jCBBC6^H-6!I0!UJV9HQ)L+0L1J_;Vk@VJ zIDKTB$+BmxjI%A4i;Z;S393v{L`vLILWOq}F+hQ7xrB&MpvKEb>_y2E#0wN;vElJi z^0YY0#@N&~g@G+zElp|aL}!_&leuJaAx~2xf@#Adg=|?3x>xf)Gf5D1RxqJ$&$N;( zw0%hfDlO_nW(j0>Yu#iGfgX?)eKO_1|4BMB%wPCA2n;l&0ccq)Pe0uVS{T2QJK zQyLc3f+w2`sTmSpCWYqu#mS)w#r&H+^oH7 zjMN^>;VDG)U2m^`>N&eB#JR;+U3p2k#}U~@d8bEr#zaj1o@CUXblP|;NIF-K@uN0s z(^G9+N%uZh$wo0QirR~FMuGK&3eW_A;{`|&(Jzq>N77tN6oM3DWMVMnSW(}6L%@@6 zT?@cn!3-#iZgZFFqElpnwP_0isJ2?Oeu;jHB+~!Ly0Q=Dfq=0V?k8m;p1qH(Rb!YC zY2{X&#$kbhfMINzw1w#f8C7uOW`qPXEH$i26-rS$)UD#;qwIl}!z`h>yFyVQ=!?(> zuwg89=vy)!*DRwd;CbcjqoeV(CHbLaJ-A|;n4|dTi`TDxl2AeoXtN+(ey;s-&f9$FN6F>z^QDnmfa_ehhH#2+xC5Poc}}BDHzTILn^b8T zY<$|oP@T$CLQQI@VEeug)1N-7VkHHZF&vONKjHd}y`zb%NLq=kZ2qhkE?kSktz3-i zq#35hW(iXFn)H(&R01^f#*%e{ez?As^IBVv6mU2RRI0@qV+aKv#7Q}tgpuTR@D>4t zfv}+n;SeY}eFVm8&duvpe8~s^pj<)@7aVy&WDOveY70E+XqI?G#WN*GE}t&0KyWO1lW4(h9wscUJ!e zP$80b)!iFv@ma`9{ewjoM4iHxPK!M#y|ogWj7$F4*E`DYEW{P=YdT*usT){%y-l*x zfjZDt`8Uo;;UxTW6-lr_CzCnffeSATIckdJ4MnJZRyHD_po6d~V(7``=dlQ;yz%PP z%e1&}dgWrv3Q#B@V`AwidCtH7|H_W3pO639MF1KE004kdgI5{a;s5)jWcLCD&Suq1 zMjpac<9jV(C5IHDdr-}!yGb|=?Dd8Y9FshmG+S{)CPeh4JaagF$$iweS zv_;ou={&bZ&CaoTov8v&)v7@5k;=Kx(W)I?W*oXEPGeB0Mt1}jnU@V-+T^dX5m8ulJ2Mz}8ElYP;|>DB=T(y5 z(z&$DeN1a*Xl4gzYyD!ci>gmz!68I(7rIw(|Fo=G_{WD3DYLZBO%iRL-q#5XF`xhc z|8M2Um1Xzr=*$?2@?{s+V@L^9Bg7*)HLc!Al4BT3HMANPU>O3XDzKKW=+n)dKuI!? zfm35Llj>_iZHhxyutqWUf z<6Xb9)|-=VC^!M^oy;M*E0WK4ju0$Ral@?`8XJt7j;uR^rHJ~@1%`pdWRW9b4vNQN z1poWAWaIz^CT7%QY&9@r=?hO~f{PM?d1>sW7O9$_Z2guNBnC1qNS$TL3bl24n`q}8 zElGBN`nQ{a&?7F|w%Yo7phiUh_5Q}zy^5qV3NXRP#4QO1Wr49lDV16KRRB9=NJC2- zl{?7~C;=j8B*KFoI&UKyqK0roc&)3&ORdDbOg`)99ctqhmtdnYSrr)<1Zom_S&>#?rp3@ywUW{+?F3l0D-rS4SJoU3 zcE4biLe3Su>r@M31qu!tvQ#k2fk)tQgzARSXp^zz5n~PWbgn4s9;%pSVDMh=?edCCAAZQePit;*6Eg(t2LyK)MhYE>XKBX6?qQa zsTWClezgH4>a~>|MNT6;X90+1i~~fY5=fv+QXWFs z$^a@?VqC9lGP%g92v{2GXfi~l9vt=KMNVc~X!oED4gB>{bq2trUUOB2g$tTOtZf%L znC{72kwn?rnyiMb|KDId8*ZJgKnBpH+(CV zmi~F43Xy5D5ZNqC-Kj~8?nT1Pa@P(jn6DKsOmQT_JT=JkczImN zy-8if3uY4-5a>7i2z$}~maQNl6TU=}O*zuoe25U4pC*swh(|$E69dS23l`09F z6I&X^qiFJtb7G+R_A;h=%E&{p>4A`&ldzD|D4?+ch7Z8I0Soo4QagD8~;K(r-+ZehTxQQTuAVgF| zP{AkdOO&m|#RTC$iDn0*NDU>pV)^jyC~(u9FoFPEpd86VCadw?vq@c_3bPLABAl-m z#0C(-7rjRVWB>c4Wcz>wzF=4DOf^VkrMnMhx6q`eU7cvHr*$ihH?7#eBmjx+a`wKlPMJ2y$Z z0IlKVLG>`|DGYlY%SAR}%nXGI(GZKF-v$jfw0c#aA+<`wZq_|1xA#6)YM;Tjm(M@s zXHnb?+9~1|IwmK(bvWQ)5GtdDVDju8O4_0>pPg%m?|m$5Y2Q)MfdIfN7=Q^B7ZZ!v z%oHMi%K<2aL7?-NZEZyo=2(siTRJEek3tKrd^2oPJ~`3pAlp|`NpI2mC5z^eEQzC; zq=9|RqLuNd+$u!Nhb9~%|MybOAO8JUff*CVKuI>I5zcW4V&DRFGjkOXR zlG0RECIJUjOpI|otXFQ&e5FWXl^qLqsZVf|913{8?+rDL_c49yHg`RHs*#_ac)ThZ zqvP)S$~m&(@$+z7opOOBs>i(_vPkFxko2(+I1``0e(2H&VefBoy=2QXo z{SpcQY%IV40s`VdUSb_aL=kO4HB5Rn+DHkiBg2yIGbqZKg$IXIjkd6gVjvW=B*AaT zYE%Gd8zj5K^_PZ{f@TYg7O3&m{l^WQ>5?X-*@8P~Z}r#sNws1R&I` z#|)UU&JWVTeQ=&NE%vqB7UN^{R{f1B<~|V@Rigk5 zLG!-wO(~r3{#SM1s0pi;5<_x1IS#8_0gADwk*_E=u>eLD@=*~*>!dHMR;*ujzox;h z&)Ixe_B1y9NFAX=Er);Cm3;`BNM|&GRGV6H#OA3<#A~c(7jaFbqq0EWRn}Vcq#tpP zH;=@ko$vDft77ptn~}PTYq|;bYhwlKEciBwedpnHpQg9Ssg$11_uIUOn^7=8T-MP5 zBA9$MM`S|@bW!l{AjnX02&8aG#IAzY5sS|&``ildrnLq`+^+xov}DnM1d3l*YepWr zT!p&7WrckaQGH>oq;=^`7i)Ev4eavj3rRhft(izaPHETcAMOv|kfG*GJHg=`>=AM_ zT(Cot3L*U)zxovcDMDyfFk6vJ#yKq*Wr3BlfK>obj1Ubpq|D%&wZ1AkSV3TE2(HZ& z+t*~bjlh6a1eHpyQjJ#D>0}JYzfGi8j_^3~eSf31dUeaLa|twz{?V^}^Qu8dh^Lgb zxk|(_sDq$j(q0=f_bp6WtYerBjxbSy&doH)Jn|q^(wK6okwuz9T`@yG3v|9Cr>dPb zhMVT|7mfYp4FD^Vv$*n_GB}rO502qMK0zEVb2F%J=NIZxDmPaC5kuCiKj=wU(U@XTwz&{%C?M+Tt zn3Xjil-7FpHoK=2lkf}%F)@od1g4i4M$WP_-LvL@Ml0vjyro(2qYqEu-OsH+%gj!N zCUMzE5X+hO^VBMh$a625vHeawo$r>5{kP0){qsvd*7ui8sQ?;cAOJx@@S%?o5d#w% z5Meh8m~g;FnlQj12sepY1DUP^Y37cX4G7eCLnz)P3ONJm$}y(jcdsKI3Ijc7I+@83 zECZxbI)8++jl)_cj6a$EFQW*?wLf}5uj)JsZ~y*}>jDN-hg2pUkxl>mq-6Pk1khkt z`z%FBSB09bWrC#=k%3?Au+*WD7V0&pnXJYO7Yx_Xidkq7&;{%m3gXg0!fR9zngH-1 zaDvn30EgLhzDU1_0${%EPg`cP`X}Q$QH<3Zwy}{d4U#~C>x)j(!W-(6uwi4$B%^wp z6&5tD{p?zccsCd`Qt*%4zkZ_VZ>x?YNRCZbhli%zlWj>-Qu}xgFO-d90$A(hn(8Gh zqSMXuq{$J|1eLv}fa0JRW2m}#l4*(dTHS!Fo3BQhEimT9I)SyXF@yXQA2A{*A zQZSjOsNTt2$XpnzuPw+wOkP{_mbSamf+T0!-WQ z#(;58Dky1g@BXhU&qx3(oJbK9PIP!5n9VeMSDYL&fjUNjd6^U#Dy$JyLMv}4ZMs2# zCTdG$3e2vk;HVm2KKT}crpIVnWUcAUdw&*;%=O)XloTdZgnoBh6jdAO=A@;&_VS>q zk1f}76;_?4d+S(n^=XP&^0GxHy@b1!}8sc936JeJ8GywXn9 zQQFD^%8D9Ts*o#ImkZp>RQ+f}4wvnGK_7qVli$Do-_QUnBSkYL3a!h>7y-0HD;EJ5>}a-fML6?s&iXd}H&)23Qe;WutwG9Wf^IW+>i>ke+4gx0!ty}Gz| zBL*ioAvD~RARS$Zk*6aW28Mm{R};O4kVPYGyNtUv^|ZO90FuR{BE?eFe(Ig{^Y*4#~CN1sK8@#7M;>4UD|li_U}?iCYVR>1cu|7wCx@ zXrT#1Z76r_21Lk7_*g&upasawAPXCEaTUg>fCE8KD+sveuxN8J3`4^Jv9hVrk)Yma zm|AKvW?%^FKD!E?3#ih(sOfoKMCcNFq;p`1IxTvIhzc6$%F@U-CZwtv!_jKmY)d zPGJ;K(eVHKq-6F01gBtEdnq+YUBvqjVJ4LlnQdLHu@R|c6>K$@A*5iLl$HUD46w9R z1ONmU1x%n|NMICU1P|lb>$#Cug>qKvvx!>un6mssj`Q1#{V$Ek>)efFDUsC_dP`hh zpUW}ND6~eV!9>bJ6FueER}zEQZ};1RM*KWk^t5TBIYkbJhTTBCDpn`}iyPVIyt-_n zgE0gsVdvRI2v!pWK-H#OVdfzq@DPklgG(S*WDW%fFi$n$x-x+l7()JTTyw0Q%%DK& zW0!@E7$9*&Oel~GfH`BLlnCx4qU~NyE!3xI`XhjL;_45H7UclrA7^Upr;=)D#^j}0 zk_2H2H*vw+!7QHcuM+Y6i{eB|GT;B5|GU}r00aR502-`^@Ie!eNVE(UP==4AeEKLTsfd zMx$)QQ=E}(lT?O}A$45Tr*5ut^zfkZ7wm;e9nS^!F%K@g-tP+Q&>m3uIYeHfA))5!$)35VuW;me1J1YnfBA3wy<5;WcbTqDtFw%l zBquTm00IbegRnHf>I*nX0mZbsoB9Q`_X({z#)Ybs0g~|natqc}`{>NHN__Qw%44-u zoa$7bzOf-&F|yMU!n8t#I_`#+cK2}xhIoCevJlAS9*q`$#&`G8-#$~A2sdJlK%}|! zgp)6ri~UKeslRr9-@dV5?9^1+1g?F~+^Cjv=uV%D02E3PfD9RTR&;U;rHTXuM*_%) z04Y!y)uei`0)^ajfdqBuCL~mM)-z>8Q!bJqPP659wv{oA0Kzs6(2+d-&}9ICcp4vH zG^1)e_@C-@w-TWOv+Ildx2tZCE&u=fq-5>@1h`dIOGzDKRYf}eVdzZ~J#A;KFwg0a z6{@v|q1>*?tCJS zc}h#H#12nDrwIW+(w zMHnODSE7RstHNVQAytOCp!JxDt+|3SHAv>(mn$cWH&RL&097|NdZED8Y7~tCnSheA zX=o%VNzKkN96$hps3aUrr_y&GQffBD;}YcLNn4I{Rl8Pqm#bMgtaQNucq{)`=`&7&9G)g4w8Y$nhNxOfOCqu>F zlc$Gwr!MqI&=Pq-5Iw1V&X^>nI({R7Gna zVTgqh&3R$0yvym9m8IhQqju$qP zPC`&}3A{{jV$j48rDI41231s%SBR9Tp2S^%>7IX|w8`EVhLS}Wv?y*6Y9(qKIC%8~ zLXfI7!vV2sm1n#hKu|FO`N%EN3#szUFY`mPPG_k}Q{+y(S__PnF=Z}{L2A!49%gY# z4RWL#H3;0{=uS&3xt;$bpp=D71_T(W|41(IQxFkjg;PTgX|BTa^#RLE>dl3ikxncu zpdn%q*g@e~DUQ)HF(uoIWQz{36;Nh;f0o2_Rm!UE@r)OC`t^Xm0Y`j)isTSaRRVd!5GjeBA2u??YC5o>jpE!+kdGU$;%C|EV5{8!0IAI=}axK~afBcm!ZLWzcZnoZ4oAdxcjbUIk@(LiFDx%Sf6?H3H(olO$ zA{;Lp6m3FFr%TY^s5M5@GZJ&f!19XH1=_zgb@^F&n5}DWqkm69C~rwoi%a~}sp-Dt zxqcc;8>?kyMpmtcP9inNg}9D?6YbxmY5{Hd*ZqPx#$W^MZAt4w6ECckqFRljbd*Rnc}3~}?z_{gnOOxnHAzWr zlW~ionT@D2Ws({p$^8eEyF-Bn8KK5X%UKBvfDV#?`UR1#d@^R|0&x8C^5|AFn6|sjcv$-Y#QW8e|NJ2>5M5{H!W33M6f!>Um<9 zDOm{bw#&5az0`;Mq;#a;jNnQSCB>*@gk#2gPo4lCB^I zDrwydx;i)i(4jN2E332r)#&pbl_~;Kh=**F@&Lfiq9`#F7M8w3gVscQKy*>^ak&5c zq-6PkgjZKtYYa2$U&VTgWh;piIdNgEFwf~{73wLMskF9wtPU#sv#WJ^yDcH^uWs;o z&55T7orU{qf#^1FY&OKnOq1mQwJt2QA53dowPC199>!Z04BPWgRq9xTMTs$yU50v! zE#T9|5mm%9PMpTRX!E)|wD`>!kWc`mJk1O;V;7r8!NWLc-UGbz7uQ%N3Ie5S=9-sn z_y1 ztBD{nRQ3P=`<7u*Z}gD#X#2m)06>5MP9C=jG*1OcT_MDgJaI(RD1roQ;c|Aria~}d&?89) zxv0fuqh4!;${`{8^*3ZB`lY+T$-alQ}A41e=g@ZLq7h)!f*eh z>wj!89vWZY{XPHtq-5*>1bJT9Qz;#KPX%ioVTgqkL4#9Fu`a=E6)SawiTwP(4^;pH z00jfVf<|_Vb0h{L9BDBD#H0g+L*~Sd84ryCYsK{z1XZ9d^*V>7(0x?ymM^!jN~=Et zMB}e)vBlEOp;)`=b4cP?i8YP_faA&261pI6E)F&fT63jd%_Sy~!r6k`D};-*^Xwgg zXe^t4n)67=ohdS#2pF@u=GjzaY2g|ovD>!U#K=TMsudtu(!`?b7lH%=hgk{}2+PSD z0&7Qv3NBA+c~sT6&2c@}sG4l&zg{Wz@R4vLV5PMZaTsgw1HuG@q!ErPGMPrBbliB~iZ5GCCnh z{RsaF+NCLyFS>sB__K17`KKb2wDunNLpBc#hT@9aQ$)>XWSLd5hoLDxI;i@%4<&!>iW5zpZ`Nt*N@)XYV(2 zlMMx@h5(C1XaE5q0lSoR2nAWuFr)wbv}D`}1k+D%0sodZ6?BUD*{I{mJAv^Ua>hE^DT;!5ifKDh-ei+P6%-9T$3>#2ZNWGLG zh-9ncJ~eC5zfQpbP7z}uh{IIJyoiJ15wyle9_%^B?xo|+KBx>Df&ySpYci&vS%4BW z6=d*i@Dzqqq;VRT+8^FjzgJ%V*U}WHHLE|2UKPbecl^6qtY0N66J_~Fp;V0lf*rvf zB{#r_=1GXq3og)Pyh`95aLn433Q{ z7Hk9@U|?zq5etAN%rF%LoPDV!(MxZ1VS>$V&Cml;Suh-cfh|)V670=>WBM+Ja#D9l zud{6?rRVBtYE~VDIJC1RGZ1pM8nIl}lZu%zV8^5iD#HXkY9tYvEmbC}NWqN(`4W`5 zIX4;Lj=GAC`K|U8ZR0?5KUp5e=3pHhaTOXRE}x+VH$7aVl!2ZzQep!xETx8e;!U(U zOgC(%vF3$y7;8c>483LzK$)6~lUHZ8l@0&(NQlo1xX9*h;F?&%h zq;*MS5399@rBp9G8*RUS4rtI&(*_~+t)I8Qvh&R&zHq~7*l}M+|EWwlWT{Ccam+%+ z1wIJ4rm&=o;!ffa24&j?Qjounobyqh5==}Mz+$j_Qq6b*7ug$^3h~?2CF46VindWI zWdzhM+B+*@_2wSjEJY&J)v6m&YV%Xu5>QxAr82mHIMYUvBok>D(+m-|*!3M%$I6;l zFp9d;@ii6wcgk6|JmftVN+A);O~`~wlv{F2o#GdZATi;~1TIub0wBa%^XBI=+YPn- zZhE`Ve+)kDKgGRkR+MKHhFEN{l|k}6*K>^)k_*PiYT`Sor4Yt(4*tr_J~Ug`|Nou$ zvKg8}EoVv-SX+fM$8b&9u@g}+S!bG z;-Ps}VeDePjXlz?=`DxowDx(`C83O~Veo%i_BM;uo46b{scBv5F{inb`{bGZ?&)t8 z3h6H!G1O<6j9d41DN||QI~j1z4TYN&8gu|~L8L(q2yB*L7a+GRbx2vEP6h(G`wD&$ z%;hVJc&)UNmCI0@V6i>ArUX|CUiZQxFaa6U2nwOr`JK_#x*Veu|NnYT?MkR8Qv0H^ z)s3vJI6?tLKqLakxE0i^jY5Dh03ZMgNl0KR17ZLBq-6d81Uyw(YYaomX^C3>VB@tI~WLORg6H4)fI*7$_H}ln|3;7ZIy2YThByF5lBa|tr55Dt zoa6urDZ~&!AQ9pO$g8v;l67CT#^Jebh#A0_HJ3)FQ8!NiUHY>Au)9`h_mvqO#HW=; z^6JG@5rG>0MlGc(*(XCbskGKYe&gc{imjc3Xr%Uu*#v}0naN!ytW{ATEKo8^We~KG zkd2{wHjNV(DYTT5gK}OgVobYZ7EnoJDY3YTsZwhXvr8YfAaP#gwT%D!v}EJ}28Cr) z>v~~wSws50Z!8ZLwVzQ8q}hQ>5UX{DA*6Rx+q4imCK7K(QqUB-PWS`5#0e;XrRBLh z(0%MBoGM|_GW2L1GP?*JB7(r?VsK_aTwha*r7HRzdPfpN3G#+)wvo0it)uG%EVKLx z{}gxX6fpjh%=_rR%cAPY${Z<%5x9KeIYlhS=v1f-}isQ}^uK+D#J zAYIpm^-KpYaUwkkCPVn$U{GvavR9cHt1!LTh1YRP{XL=^r?BNFHs6&juPn-F^<1>M zJJ1ZZ^t5Hs#YSTk)2EK*pz(w4#|%A@iUqD8j1Fkj8WM>{mXxv5JK0Wk>`Z0$yMU8W~uUP)Le!DB$^Fab7Zl&{>$ z8Pmb^>y)In_AIT@?@1n;N{Uxoev5Ro}u9!4oiaZWq!o zC>3YXnQ4Y-umIU1Tgw6pB^+a>D0zcUnW1t5%9Np5A;dGr`xkWCgi1c9@{s@gv}D|X z1n6efV@yNvUZhIRWiX2pnVVBAuyMhK6)Lr)sw|eX&Mue~*kpbufzZ&RV!`Q=3Tmw* z4sJ&cJ-524qcVyC;1~w8+Mi!Ti-!Gw6l0}d3PNUtb{8oV&Ak>|!MQcsJ`oBb-g1oRar>;B!Y~iUn(47o)2k(pd@(l00Y&r#k8c| zIa1R~Ck+>9pNNv;`E77|D}N86r?bfIvVnNq*wZX&2RVhRx&) zFG?_5jrCbQCuO}4PCR~cQHin(eeCA%vOi~7%r`Z*2$q^F_;{qSCy_^aQDgk)L*LSq zABbWYux(R&1PP;&A_dXF5MuyzVzPE-sJm;tM%tvvTLSwbF*&h2+5!!U$;&j5%EXN( z35SA>pcRw0yb21*kOB;mfN@wRAUGryhR4ieAi1^IQ5#}(Zbqa?=Oo43lI@|wdQkX` zp0J+VNoH3NCTP&UAFmGotFWOM%!7!yEkh-O|fKYr8o z3dEVH{)JZ3F)&!EWM^`@&*URDT!4bmL=YD#{fPhQ-RJ(l+j`YNsHSNtBWWfwC>B8H zi?$&x5Z2LJ47EC!tJtfCL2D1ATt@^Tw+JYZ9I7I8Nl}oT;NkoAYbuS_7T!CBcKKMB zaqj*z*1f-x!HE`l!HB0ZRb(s~W;z`Z|2OA^wt-}h0}_EqiIQ?~kd?(`K2`-}`-%+N zw2n<7Z0d!UU?A~0RGi!uxg_QrSku^OE_|EL;Kogy-F@vimX}qDD>%0rf&|;HgXj`f z5mYA8PK?HL#$h!-nqH~vJ{t)=BqNx%WNfKy8UlcpM-0&hfgpp7#H45HX#pT58du_r zHxT2386hIA%T^lALLE>f3buBa1J#{owt~oDVgVdJu*Y3N-M;y`PG>_x3 z(d^E#8rO@J*YaO^wY)0BqZ}?aRgBTmlf2$w-H73KN{fL+LDvF;9@p~_$r%=d2et{s zkm1o{W{0^Dd*&@_1Wxvj>0gP)%Obh1Y(S9bCfXcTg$NKzHCm zY<2(pv}Eys1?FeiYcEUiQ$#x*VIy)AiIZcjJrhY+5A8jZ4ph*lt^be`1Bb${^#{aE z3;^5^Z_8q*fQtTvf3d&F6#)xh0De+42{mdol5tEBR03eF0iqBl6b1}}8wpue*D8el zbp9_))>mWAHJ65_3btkHGQA32wVaNLk8%dT>C-l?YAjNOUnV9zSySiUW;5W+w?F(o z!Ba2|5hd2wp8v^EbF|8I?$%LB%}Z-*Gkf{b+$Fyjx5$>_^f*< z`pwDViKpZ8yYA(f_p*Wo1eIbjwgQxT;jS$JkVHfxJp~xZl~oGHa=BzH;FHxKe84(k zLf`W|2qYwfg`r9^STtF*@hs)v%K!7->UUERU;h8wj~F`t%$W|Njf z1dlsd_o);b5_V{6eO4?$E|mUWl}zqrrw$z)ps_Usb(d35BEec=l9UuzBLaG$zc)l^ z28Zu-GmdjqH_{{&-U~GIomrsRNx^WMl((VI0({cn{U~4P(@}+gPZ4rR|KSHJ01#(| z02Zhyl0*xICWk2@7MP&oA|YVX#ifZl=yTTbJIO zan0qot;PTQq-6ep1k7ewV=Oe#MnZcpVdhp78JA(Kuyx56hwVLwh_ow0klk9O&^?*C zpKQo6El}MV?aHffRTG*a6hk~()yu;mhUqgLajX`yQCA^YFkLD8lg5rl8=|%|ckU)W z`{wE@6PJjF;B?1grFfA#+=+h~Y50Atta#9?~3eheWsYC$PS!WR{#^9cD zHj4 z6S0UQk|pIuYThMo-+Rx8_e}5M9I7F26iD*##uc#9yi?RVuQFx+=5m;pWJX5sp7C;v zQjMiLO$cuWioX{-koo||lQ06;deKW(fSQRYKqEr=OpT7MaKgW_v}YE>lO>1q7m{g- zSP2(ZREiSc@`@H16w__lA|d9{QvdY|X<~oVN3u)*Z3Ka%0GP>X6k)DxbZ3TK@N$FF z5*U_2aG|34C6a_S)}01B4W9q|q-6a71l(j-`%FaATE|NdWrBMW^;===Fw;pJ3oSi> zrOe$rs00&9-p6RFQ7-&k>Um;T`*K>)qJaZSUThy5G}0!;4r>e&#+Zdfq2 z=rs#byGoRF)U{Rf4NjKppwD{Te+^mj9E~ezAF;X@tB;a(F}i5_Hb5{tX^`C#0E{FJ zP{W8;A+d;+_N>ob9=Z6)QDy>0=XPHn!y>zx|Iydvc83E+gAIEek6-DZM$iA}e!u_T z=x0_M=KtvZ_J2ZYsDzyWt&wRqb!IDKn~63gF%kd!q-5}b1q5eTYbiwFOd~4~U?z|f z{e4}nF%rot9IQ2l71YZpdSI$Cm7>1w%q`ht=<-ygXyJiVZoJY{&le+a4qb@O0`TSQ^wTQn%1cJeU24$ieM_j(uURTM;pb}O<%g5ZLo_M!ILU9}&9Xr1n2-!IBMSLL zY{~|55R?Q06a<7{tJg-7p+*7V>j<()&{3sv1i>aw%SNmI#vL%nKrcOr( z^Qpn45<;HDB#pJ|GW(VGfg4-pyigShgG>`1#sML*h%7+(Sa)fo{@Pu7hSsWfSc@GO zR!u52Ors?{eZ_m-;tf>X(At`raO&nDL>h)LGw=)vY5`C|Ff~w3YF?kiK|sz)j5&%l zAqnudFRHr)sY2_>vNt<1)nHdQ`9IO45iR2*2|NcF*eV?%i0+j%~!6gzXfz_x%1==jx zFep< zvD(NI9&;jhX+B{>+el5apgd*ELp$ji4lwI^5Z2XZ%DGcZ&j2XU+h?7ZPMZTn3kK4?kb^y>ZG|DRz;J8>U*br!(gry( z!h|glG!m!ntT1JUVR*@>Wm5S5x2@s*aB}hEI_5uBw-3lwA&MKLQC@%LWfE8VhX3aj z(NHN5?oihA6*m9a(?AnGpxgT~Hp1bI9^*bCHAajk87Q#hz~Mr|f`WwrGF5~g6#chW zvxd;@0uL_2nsOBTCY{PC4t5&FQ*Jd%=1C>1GN6ePrjsHdYEzW5P#^%L`~$r*4O%Ci zw95OHN+OgYbtKr;(s}<|?}d!3tFwT_A%?-ifnx5FBvtO(#!oH7Tu;j~^}9M7T}#6e zYa^o{E+}fXlwS%`4nxr1Bk#DIC>ZDvL}X_GkGKpqAt2L}Ai}dGlJ)^7&_wDp`}0l| zS~CCpv}DnTPcPJ{~|VTGX-wV7M3B^bd`oooGu3FM_Rsl?=cnIx3UtF$o& z=!?ez;s5uoq32Xt7!sJj){6A&{b=s$fB*jloe<;2-TLm;`ai8|00ARFxB@{UAXIzZ z9)crD(Qvr~233eeCV;e}AP>?%G4~<%QOXxVKE=m5_boJdWV#f|Cj>pTe6uN8(Y2&Z zZcKd5t?&7NwUX9&s82>#FE%cS5%meNNiCm=MO5+d)K$4ya`Y$ps$boR;`F2C(wG1;p|xwS78E2_xY@8x;aHAqT$6dqNQa z=)d_cj)n+N*O|<}|NB`ivW~;6{jqMbavs*x`oKtu5(EY~3NfItKo*S3f=l2mWX%T% z$A}CF1vnFOSoTmQ9TFVUR+czb3kv~CYF)=X9NfVuj;w$jQV?>~N7O8aM8LDLf8pik z;yH~lx&tR03z^wto|wACO-(XRvjYx(Vk4Q5YcH(T$NCxYpuk$$=Gk1sUNaxYOzq?ui1$Vqp$!^nj<rX_`RVP~?VPbg`jcHfyr4I1?vZz62WpQE5kL|V3G-uxUcp;VBSj1J= z#74CqGOE(;FWF{ts~w9ii&n7u7?RH;0pLVI5`s-3=$MmmXzpf~1PaCV$(gzG^!Is_4@!w-B5(I*HzT$6L*q-N$o2Is* z7LuDaqTjyH;VIrjzg_%!IVGF@lqHFzz z793)!o$>&=4$2#t(6=b%Oa0q_)k@{2GzR*%`ORha>a?bbcSh|L5IUl-5&Is7E{(pw z`hWlb`{9sPD_wKvkc^ZOC291zzv=*nlp$@1Wuj*CoYunhOe(Vsa1<1P0FzSOp(!4l zvhT0UWDl9@b#`gz?2p$gKD@t<-$R8q>kFx&H z#rD_~n!;kPlnb2Bg4W{p+P?q3pDy1*p*Ha7+frqRy%j1P0@)D6A;Ay}lwwJWF`@CE z>ON{^Z;z_@nMmriZbrh%9i5C2qm_4qxtx*LFQv`-<_pgx02GjgF8}}_<3}3prbBjc zih)7|+Fe0qzYeoiFIA`2IPFuj<(=JRu5Wgb+hWPi%RJ4}+=mmmxaz@D=XbWD3o1mr zLpT3IBmet$qk?gTNGJTlf7|;fT7UouLQn+y64h+Qkj&Pd8^}WpIF$+q0tbUk98|-A z$3s*O63-Nh=z&vRf%+P>WTyC2IeZHF;f0|L;38_+{mldq)tFh5|{EoTsT7M)j#b zv07QkRCjf*QkIegLhfj@g<-_Z8iSpyC}9JE`g$;60x4)v1plDRQ9skggJikr8>uoz zCIuT9i*C{+J{Jk~o1S(|c|UU$BnAKbv}Ec41x{pCYfMHkS;p#}VS<+w!I@L-q**~d z9IL&C39L~C5%gJ-LW=ECDCg;;80LMo|Llcl|NrjD<+$lezj%XZ*Z;Nv8fO4U2t~9B zL{Ny+lqxSWW0EX@@*dUqyE3wnp=E{`a=ecg;DcGNKTjqb5>4ncI=fB!-! z|Nq*KQ;S1`QP^43&#PHO3YV?h+hLkNSS)2R4}1)E(*YRJ$Nf{YL`p~N7f;~-pB zPZ4e4!eDM1^=tIiNC5$i(oxi}a;s@x)8QVv6UKk4J3rALO?otN5b43G6oSUt1k>5 zQ*!hUgQ?;{lL~~*v}Q+0K{ma5*@4x6A^uh@Iy@ljghyEu;$lD`(ML!8iBhh2|NVdc z^wj}UhG-yL`YlJrd?Pwcm|mFS04k`6Vj2JYq-6Vm1dUhJ>r6zjUxbD@MKw7O<>bi5zTd~32xgp}%(=6qYq}z=9 zi-EC834ML5^&=WyzJ4b8Fu-~Pw+;X~!mtn7lS-m3$oVt^A%Fk`03Mhz0MdmLAu7R@YcIU|O&zoB>|QA*Zb_+`2W2Ik zHd1VYklXqOCmquNzx6Uj;+&*nW*!m)~8(MSg>uX60Gy|vU3kfD!uiA_-NIqd96w?nP5m+c&=1j69Bq3%TaDs=N4+jD$ zjx1c=tHbPI>v|5Jq+-=1$olk?@+J+Gzal7{@#zd0J60ytd%WYqL~gB6ZDIi24iK;r zVi1hzwID#mTR1Xgs2cT<@nhGnq$zDVD)RKzWcE&c#>`jqtl`r za0r@RVXUnaF>zz;r4wl$jjHv7B2?KNERQXNI#(_~pZTt705IOQv zSHi6T1OpJNK*d(o8YhrY$x3MXi5r87K)esl0?80R`Vy}7_gcna!H2t9)q{98#!>c;X8!pr0p9_9dB6ABnz!Dpizq? zB#4p%a404U5{k+$i7Fs+p5=$Mkd{Bra)+p9-@2X8&))l`U{O#X3HIbLhPE%p2@qm7 z6*%Ou7~Hf2o`9?QAsm4vN6aWgs*4jWN=@-rj{@wn6{__hBU`ah4xemSEnqga8>C*_ z-RSnK?Nw!}u8ZE?B3Z)l9xvZ{&Y^?^?(%29uoG5j zQ6N|mLG`9ZctRCl83C4WKdAvFSOWM=(u@cNm1Lg&sVpLqyag8JR`a$bgmTqu>Ag zv}Dr&1wLR{dm2i3S7dt4Ve3~D<#SPuJkrTx6)ZJ`p=`ZDVH}D`lhFe{y@s?ThNP-7 zmPmwLMi;e4g8%ez%|`geL<~H&q>28T(F>Bt#mt_-DnpMS)%@Q)#^l=`Fc)s8KiT!a z``O~s=u!?R;_t2`4g|WDhAk>MrQn86B)~`zf;{;2%%C}U;ifo=iwrg?r|MEV5tcnO z>Ft_9E_vB}Vj}ar(Ya-t5M*|3y1Ub~R^qZ9O*(XxpwRY#z@dc|W=qE)=Mu2u&N{{= zVmck4T)QZtmXmqGYfQb>$Lv-2a|mH1v{hnLRmveDo&TW;k7F%%FF1%yxPtXI#tnx7p& z7*Y;fUP?wXb)vUjrrLTG*F9GA)g(tZd|_8sq@^f`&Pr@BdNW;GNwai<5MfgK8qivf znJ|87rY$Ao$x~4-B;mfCj$LBh&I-s_9Nms2c>6;SW2i!O1p`z-1OS}nSHM;vj7D2V z2R6J=xZnm$1y0k&SbGfus4T41=>g=z-LEN13prBWB3j(eh_4jV)9nO7oDSq@I+_v) zL2FKy`{GC||Iuw<{=fYeGo*+}1{HwTvR5w)_`xtDL0fT0w5;LLJvy8eNK{=mS-P@{ zq@)ePNQ8mn*v@D<|8_q!S*1vepE=q}_OXVWDAHu?zAAZpK@c!+9%L3sGC8qFn-8gr z7=zSQ`%C0k6-JTNa{$*7X6W7&r;55LOj6^yusqdTWxEls`JXu+YGIEgVylj!O}A^K z;vVgCX02^li}SI>2J2P?a5VWT1VOXRjjvFvCzd#2)!Pk;hgueQ|RU-KHL9v@xb z`+xndK}!Goq-6Gh1oU26`z%H(Rz*s^Wd)}bg@Ix0F&H6klj}W)ndAT>0g(|k8!@@Y z79@DjD6AtOaA3*mZVY1QI1Xv-cY&eDW93p_TGG^BO+3Bv0}U3JPSnmjJXwjkRH5~I zWfapy#nV4nF>?M0NOpaA_3;}Vz6K4j~3bAgw`@-EpJ{r@rh|AwpD_o^XHu<6y9bODo+2p&KJ zBqexnNZx`FG0~)d4J9AS)k5yc*Ce?EGZ5{$$Y8NUAWJIsoqPMgc8c4p1w@)<1C@DG zO-4LP-AbtVW27~e(Y`T&YQuBii$}8G|7vv*fq=p&0&+VZ;NgG<7>J_WNO;u%Hw!f6 zj3BKjj20TXDS?HqIUAbLipitY%AW4EcXKYXDb&XNZq9toYh#WfqJ{BjLlkdMc|1`|a-BK@7M@aqdM4bU9UQrbGM- z-s@*oWwp4wn3ASevhybL<@r|SxBs->nhJ;iM|9Xk@!|kuvCZ5kXDFqCPrP^`6TnK#B&tcGmMf@1*Mbax8Y~ zkvE`RsmiCrF?&|@Q8e+cDJKftPm zyfx+;xG^A_glM-SXbn1d{ zTCJKrtPfvr>HRFJYpm?@VY=sR$}Gv&nu4kC3l>WrZS@9bf2N-dO}@7?^SLdJsOzgB z62+oPx;Y)vZc#PZN9ziLcNii*2n)zS=rQG8#O4Vh%>vQY!5ULH~!i z6sf7E4xAhe5jg)^rv;V()Icl0L;u(IWt9K{0)qeonoCm@imLfV3aEdj(MY0(jo z@jbC&f=Xp+IP+SeAP{M6U)ris)24_G5iX<(rD-lZ2}q_%a9PUb)pwg_6Gkn!+k~<2 zinF&OA-L%!`DNn8O0zE{M>cfdH@)U<~3Pbh~pSt&I}j zNNIz9k<=jyxj|#WKmD;NyG|LXW$0?Lr@+*!5gSZsbOn#f_XuO2299bZ#MT~;6&w%@ zp6&nWNM4^_1Dh2@R;43FHqb|FAIwi#1dR@i1x5vONUNu zw4W^112}kuy17;E~?ygZI8w;cNdXw&I6G!ne7JJ3TU0&TpN&d-|n#0rp zARs6OyAWRspePy{6-hxM!UhVtVgPdX$i`W_;Mg~6ZUPd+4oMjQ`?O@%fE2S}Rr@$d z_*^84ePxKH5=ntqtg#bedlac@r<#NSUmDQf4T=WsErRlv)JEhoi;@hMbhJ>?I{HinW*e z8*;eF{$@2sg<zc!I6@3z_ZYn2E>BJb3B!wFrijwI$<8 zJuAeSo=P5f;IiBMdK3NM)`TcV04|c$yx8dJZ~y^@a2tSXM56`35mcc5Z z>-K1X(^v^@ZmNSz2iAe&GUetioL@LsF+Ejn5K51pPU|B1k%$N0>1L2{_bMo1uu~)LN?4b(m|L2!tc~X}z^kvoYQ%^C`=n&@fCR)} zRO>86>SAT8jb-Uy677Lgtg#Z|e->$JrVeBifQT6XP3?F62YcD*0FYoH28l(^Nq`d& z6^Ot6#@(eb+_KoZ9X0plO6#rJY{qtRuykzK^01GFv zM=4+&w_equL}OgdKFa$MmA%?^d3l#FVVA75&w*^vgj4cOaRz}CObo(Nf=@|{!eoYs zuwX+0g&v7jg`hZ|P>YoD%o?(CDU0`2^k>U+b)Nxm+4L+zeVl*tZ7G7kPNaSjj|8Hu z5X)kEEoIn4Iwprp3-UQr16dYer-H!;r~P-k{*-`{J^%q|$uAhlnWIoMEkY>Q5g-BA z9caG=P@@bk5KKGZ*O|9vB~c6!?peX3kyS|zGDS(|AdFmj^rWE#0p^#7)bSqD>WL3k zt6IX(DrQsB3)z2Iqn4|>UW>nX7Dncu7P=w{6DKTDgN=W8hMSb|UqLR(zVZ!w{Mt3; z{d4ofcYf1X6Rnx5gD#WF|G~@-1Fd8LM>6i>9W&Dl9$}saF#+X_j55HII;v+aepOg# zwq(Bl`?O@&fCT1XQ|nAL=v`%6jbVtF5;=WStfbSaf|hD^mLcpR%&=Gx{@dBAYn(q; zqkAAjuP6hUJvwyENGlhxW>`>Njrki?)yXl;X@??tiKxFC@6rMUmLoW~!aJzcr2#~G zU7ab3@nlXFkoKQD!i1;`JY5>!b~X9@6UaRGa$LAz_{R* z!i}>O*=mFzvBPU0LWd)MoMnaJIaL~t|E@vp6q=okQ_RPjBdne!J}Qne8h2?uk3vI` zRn6)0g8N)qXu=L0!b;eLl2UONhWmuruVd?FD{t}OuKT%VOMcAeB4`lTCf0o9QdSv zFQ8Q1fjSDwBG|GA*4cbRvz*o#1d=basUKR&E6g1Rf9}8jury}C7?n9D>g-(5>cZ#% z1|m@g#>zJ(hr>Ne9)2X zmn@bb=kyD~7^70n6hWZ?qsSQF8R9Kh?xIuWq^3N5aD`P4vJ`WWL9r`xQkE%A#JpBN zMN!ObG?GajCjW10ohr>e5z8+6em&esplYgegasFBy}})k;5~V!sQ{r4Bha~LThYel zoA5GP39E<$%C)#!lfU_)PK$1%Kp}WrWld&>w6jbl&pk;#h%v*3QU)RC^;N=$*Ps9H zyZ=HVG(dy@`=n&=00gCARBK5z*ka|{ePN525&cAbCS7(_&Qk>?(aHYwiQqLchKuQcP zjk1y^QNju{IId=Fpn!o(gH);=g1jU~Ynrvs?ISrDzVQxQ_(BpBbmjmHz}uj(AjF6? zgv|0_;X%P$xmq*a71xQ;P7VPk2(nd0WA4KlL&{lw3OnPl*_}GE&c^4;;GYbOFdY~U z%toaix^rhw*?qO;MX~&JEt=~PqL)KX z#K#A+<&{80x;24R_NK^00G}46iAaCy;hc5uiBe7Ud6d9Iq;2v`#hlx>?q*@_^NEX^{*tY0kSkdC5A ziKw-E>O>ZItL}#NYGQu}nS5XnA}-PZIT~jSXb7l?Lp8IFgY*)hA=3$8Xn;EK+)!y1 zfn|tCONs~x(S&l91;`ib#+00iG)RQpLDSY5>$jcJ0J5?xhOtfdzzf)?rZ zmL^n=m%S5|@bbr=B#H;N^y=?167H!@zfNk1Yc8AKxb66RtMXEoApc|U|EgP(03aLy z0|=7tDF`Ak6TwGQ2$@k7Z^(D>z@V4qj*^A4hk^^cWd_a&28V>w32RqHL!gZW1Mp(7 z;5VfBCNRJ{%R)9Yty1m4x$*1rxDi%Wub4*0Z-|Xbi*npf2*nbbuv%Z`r3CWgr=5rz zK#pjU`NWjN^Hj`fgbB&i$#zwI)M+JOQ_tl+sP3+&vvPLbr<=Ch_q^2cNR0_#zz9B+ zyaMZ;Qko;0NDC?<09G;L%aIlk1t@?B1{!A3R7QEbr9cbEQ5|*jOsn< zq!hfv6{akC^a<&WLl?A@py4IAG-%#9&#{T9zt7a|A0Ff7Vl+%22``N?+Pq~9T!eyq zkC#L6Y-xF$xEL5VSVM~NV)~l zMYd**9=B6RxpfB7q{Ys2ebW)}XPh!ch|!6m&<(p^zk!mD(GCV%jbv>kwTKEYZV0%P z5F$M+;Q;_;)of|>Tg7S5b0*knlC_3`^s0Qtl|voaL#$B2J>N0JMak|LOl$$_Www`=n&|fCR!@Q|mfPx>%(OpJgVO675}C?6ETG zkrnFwjIgwNAOgsZ?jRIo)+=d>MnDY6ge4vZa1}dj(;9$N*#>DCSR@Q4Ve3wSdDbf{ zfQ37e)i$0^&KylsUX}TYoJwxDHoMQUZQp=)__Kr)g~2ibIe4!pI*OF^Dv$AycxH z;8zax`#^(Xs(4G2OvBg`Tqlxw0|89!3XuV+=$7mOw13p8al7;I>y+H!#=m`F-)02* zDhGu^oY{tYRu)#~wWs=7 z&t>UZBB`NGtv?gO_pa;xq(2qCv0*@S?4@U2oQafm4s=^ND_e%Ril>au#y`(E{Gj1XbKWgZ9m9*Qmq5?)jeu_P=hi=n+O+G2Typ=cKNbzDDm64M zLI$)ofNQ1KXmHqwMxrf55E+Q5AGcjw5<$Rq6PyG!ClPX>TMQupiGcQ{TNho8e7R|_ zD9uF_;gmB-LpXUZ+@!PJ(p`q(`jnaSpKOL9jZR$<7EG6t@KDn;`~@`2tuWwP(vOn` z9utwGG8{R?$urrU3oEl8T&P)NyMDP|o;5FGLiZkK#(s@sm%Y!mO|F zxD|g#kw2GV`PHo?vVa2#Xe15D!j#gK*K~Iff=#WG?t7cCJ}NVa2wHd}1N^6x3X+v?H0p}sYPowBKc>{ za`kQVSmnA{k=&?+6vC=C>cvJn<^-4tnFebA>++_K-da9~V;Q9}I@Vzn3LudxNJHAZ zVC!_6d5f-6B|@TN6sstf+i;8lP!tLO`_yEjfCcPlS8Fd!;CG4Y{bWhl68&*y>?G4c zYLIO`g`!k#ho;Yt3IMJFI_^fTrq&F!suU}}*X}3?5EF7rkqk7Ll_Efc+qvBU5=@c*KJl00BedigZCgZ+!4;(xvsv;PM(4me-vgp7AD&JORox6xSA-9JP;yRum3>1)PS1s=Wjf(5kjtuXr@w?8Ipm2LosO z&>kWTa-0$w4sXRy{XXGvN&ofio+^Sr`DKV8F#rJw01`5YT0kJkRyP9jN#GQqP^%sk zKT9wa0=rDYDW%jBvZ%oNVvn>qD$d+7mL{==+I-Iec~HT44@ne^5~0Fwj)>PR#1L!G z2wc+W-zK9)b%y&3fBcFW&$ngPYD)kAO925uC^eFaV+6vLWW=08qX7UxfCMwp z+S&p+STMp6L|?AMQPGo)QeJH|P*V?9oerFg69ASN|fn)~AhBZ6;}d7wmRPP&$M@vL+bSS~AQ} zRa+En(ihPIEFCLtLe(zJs$L1rntW>dyRP5ZhV1b;US@y(%RfT&LoJv~BP4wiQtz;( z#vCN06wbghC^?V~_@BS5dIBmyvd))lA^0#(>$_cLDkKvH+F`AeuBkVBO)3_}L?f*) zRaCX*!euO<(*MT)`=n(2fCXV?)@v_JvRZ^oFJ=jY6!Di?jJ-0!Rh6v$gpOSQ`+Z98 zzWlrY+=T!TC?FyLQox9t9h}d=9eFVXgbprEJn6`8mtsN_EQFBl;bM`xHn@baIOwy2 zqh$aZWfdi?mJFCQODfQ1TG2hkTGmBN0OX2lK|vE)Cp%>fNM+tU9$Q#YY}_XjwtveZ zKinUGoI?!=u|pP5|y}8Voe{BTeO6zv56yPbQP)7E$%1x zV<|B`V{^*&KA-n2@zjlVv+el$@}k*JOoajxWC;a{0(g%nA%jW)p%;(}YLL)V(2^XY zAb>f7NjV3`CL)Gy_KNQ;>nCbD(Ww<1sd*GG;%&tPupt8~Bf87JXd@ixmmEna#SG9# zzxtPF{I^oKf81)U00=sF7!!sO5a@9*#q%H#C`1HNq8Yo80c@Fa85nbgY@B*ld^jA` z3~4hmRoXI?*j|8xVxFI>W1u8BmjdTAh{&}`?O@(iUo6KRO32Ia$6;P4`Jv(6Y-Z*jU^X> zX_c$JmKIzE%CeeB7i80nBO#@h!lY)l+byuLYz1{J5+uO0xVj5A$L-qIQpQyL>B24Q z$;pN+dE)|t69cGT8Fls0?r1Vu}DTC;$M!L`Fy$WdWNN zN&9>eKGCQEn223 zB|BJZwpvflXEY{Siwf=ezspw0I1B%jtskH9SJ{_e{~`TE97g~LGHoeI z1RX5Wbg-yK4a8=l4`!&@7=|?=U>8U*5(ZTb%>0x9aP-j&e0^UpEyeEKMhw(8VS!gDV|Dsj_bc$_R!3B5o+U z)#)*#fz9daiwb~<-J0a&?Q4?$($UjPUcDB)&}Hc`hUBhQMD&)vPNS`EbMw4$wsEy5 zsNJ(pf6iqwu4=1~Q1LVJ)vv#|vk+V8YKQS`u@=DOvrI$?RS)FZd2^&cvV0VJE zv(00F=lyr-I!zIs;OL%O0NjKO+5)MxsfnldG0>cdR|K_#nG=km&VJFhL@;_5@Mvzi+&UwcnY?p zEU?uBv<_f;El`-@4WKQOo(gu(PNVK+Y84yN-k~Htw8o68z3<@D!>cXko0$7WEN7iQ z`Uj<}_YMb%&K9Xkx7x%N+(s$Y%1KFC*-Ch+iY`Lp^2JpzIY5D30t>Zr?eErV)G3n4gBUB|9aJejfSHEV&4yD_^uA}}QdDxmN#vfcte9fCi zd{|r%6#=pmAfyQ<2@YgRR{NWv2#W+*gs@Pz%8AbanGg!Y6s=ag_~N6ACvD@E*!p;{ z6VV>u&Yd%Buys+tk0RfYT_g_r-yZD+4&lUwU?M`wgaC1}4-NGH@9eYFp*sWcgdAlc z`B2G4v0+4p$deDFPGbsi!U3l+O`T?-=?e=L5`oTj-YYoJY5O(6ffk`Bz*aMbq=ix# zq(3xeo{6T56B{tmt&l9^C5 z9tXNHY6Xpn2EZt)E|4X%1dUY|d2-hrwOwwK+aT=N7FiqwaX^#m7Xf_#`?O@?fCRW) zR{KdsN?pZzuVsUo5>%wQEGxyX^ax0>bq`MWWH2<1C5v1(j(*xmZBY1hUyUFRv9HQ$~7)`9p4)83Xx{VVmb( z=i5LM07mJkxv!x8luRGdg^|6tr3jtCZ%v~4-zYGB8Mu34qgc&=iXpM_cJC88kpzTU3Cfy9n1g22Io4?zHc zB(XtFHo_eau;LVe0LYs3y#O(2dB94>kg4fiDYeQSEr}aVU_0{F1>)*7Cgon3Xryt5 z9`;WQvMms-P!f0PAn`6x7%~u05-@+pLvhV#Fd%%r*2HoN+ks!^1Yp%h z)RCn`V93LOQz(|54K!J(HArQrYUL?lAQNh7mttV7r4cqvCZ@Zns+iN+yyE$SrD20b zQSh8e@^t%392Z%b*JiN_qO?MjcKcXWdp`(Ko^tm;y{s*v?;26Nmd4jS>wf#V*_{$m zLak}iexdJ5ZKki6javGFeW9O!?He4ur}&5pMVJIW$_jy$gGfw)rvz|KaN)*ADX|e4 zp=t`!kbss?!~aaLDCk+Wpf*);>6u)$<>C6Zj}2mWvLuQDpup|JA>r+#wq^)VGLqCh z&23Gqy$!>N*w6Xv$#Ft&`S(2Vaf+O2N>HTSfaG`*fl~r1lPdAT40R311VgCA5{ZFRti2N9uOMpurXlS=iSSM`c@p#S zA)LK|)n~EfHod5v?pSD&Cn@Rlz>=dtsHj4+L;0f^w3%h(ByIb@*iFd=79B_0@%dm5y?!*fr4(EhPj5V!>g6L&r$>( z`%#YV+ajOLu?jhEt6f`qm9`(_9GQm^uC_WXadDqn=}1WnWHRw`q^TA5hyQ6T^<_pj z$9LS#`@7@4_cluda5w;^(PSYG7^IF$V1xjq`#h?dvNCw*J&~e81hA(Ks$r3gwATKPlI(TCuCGiBV14pO_hd*(7Zmt!qf<&pu3{4Nvk= z|NSfdHydoh<47RK<(g?QmH2zAWd32~u`;jcHzBfH*FKxprHxTen_guz>ifn~M!!7B zVHJP?Qthc2AP~3U2@5)2w1hCDHBxr&-9&-k;$(g9@u`?O^000iJ*RQpdgC}E|ljb-Uy62*Z}tgzPMwVx`zmLC-LO156z zuQP(h+0hh#by8S_lGblc-RII;n~2&EaZ%i1DehRY zaR>G0V#5k?Wj)mAD(9~HcbT3j>vda>S$UzOBbeHYI#pdB0BLzEbP^B>1`Up6&KGD{ zsc}Cs?r5hO{oEP|NPo-s1b?2>AU+M)I_L2feW<~yoPfq;HBagQOzXnm`|8* zw315Um%XhI1XUt2E|NuFN^#Ig6VMosYR*|Af%SA@X*c z{m=Jt|Cw&@pFj19eR#?KE+xpAl(|R|npM4B1G)mB#@KmjNjVO+9?#!5;E9<5|QB?4~tW~-Zq zJBmo-oU!F;G9;QG;Qs+wJdI*SPX6)tl2I2mnfRAK{#@h)Uco-V_e83GFUmQ+nl1WEpO`c z8!}ngt%;QOwE?rp5rVcP}bOQq2$3do_g3U7M|MrHS8GE1gG)z3ek zyH?8K4oI>t4`p?$mu)ssYh{6sxrb08vX#tOrV!_e4XgnP^f&gOH zfB{G!shAwIu{j!j%B2iE*jx&liit8G0J4Jr`?O@+fCOzzRBJ3W>TPA3pJxmo6vcs2 ztfbmukd`X_mLgnC8lpAh#TH2AL0Aw1v1HDqd>HZ%+PN?>BE(Y?9%T{qFDE>&T;ws6 z=3|XQ!?a;|jYWRc(=gPrGE_~!h6*H5z`&x9+y8(2vUjwFTI$7PDTEUnZeC|N0AiRA zg^DN`O5~P8(COlUw;7&j$}~#bj&pA4z<`b0a-0Z6?28X06znU8Mk~Y2(ipjdf2}G_ zIPuJ~Kyc{mr5`69I2~;48&V|D^CBJ*Ct3}KY2nzpTf|1_nzTiGQ@G2eYlDsMquX2s zMVTL~-1eF>-zw3L2!(4Yb0wy^C@rS?sR$fyL>)|W7sQKo+ZN8!T&*e8F4K!qpclp4 zdG5}|7f+eh`%o@W_@@-g6Zn>f@kkkpH`H|*P?Uu65V>NZ)KD0WDb>kyKPGjKF8m$a zR2VI`o#e5~rG$hGgb;!(189a6Ig}QfA(Bg^!6TuA;FKY6Z_qX+?cUTtL8t|Dlm!us z3wr7hV|NHcEwDT$xwk@OZZVT07mG`oele9+5)f{i-T(jl!_AOI$58N{T|M0MH$OL5 zBNU;)zDsJh60qZh&bRZB8%iHOa;PW}0Ynnq7~s)_!O*?s;xvXFLcv`^04CfCk)PRO?xIcz_BDy=f?! z7yX}6OudqUk(H~xrWN!;s*c>N2p=Vg%jy_)q8jrmoq|K+rdlv07TbwRGs)O2YD-?G z?wCMzOEC45-dJgBhsg_;IKR#vag!{m_2_@+N3Tz;VsG=;_^XU|$Ixbq%*F;JQG%#5 z8LaeXNg?QAq>4oLE{M;lHFIkx00aaCF-H_`DzUNX&-%)tJAHe$>M_X~JTJV^=0u~; z&h=7-;`H!t&q3VDhBtkcY*Epm;D-;lKltp2{^g;<#exZ9zpelX0ssaeG6Ic3BTl3Q z5GWYJ0URbB9GRQC2&jRP^d%gb<4KU_6$JOs5E(MZIUaqbQ)`vSr6VF#1@An1$-T6&F(_S?RV(Uh+ zX)TSHx3Q&HomKnaQ4u1Cm5H0>QXIS)f-LBVOl9MsQU*Y!4Z1o1I;2hbaj`&2^Z+FK zi8tE|;ub5gV-f7)Fq9ZB_Rt7$QyLQX85=&Lzn#SDS`#9Pb#>@Hv~6VxjMt-WaFj80 zPX>boN>`Q$VH7pYt8`)&#KFTCQS`SCSa1;n0~h>+h5y*IKiSIvS&AJ9Ljfo3jm#HV zS;RzLX~-=x)rM#>00e_)8K7ZckVK2>hQs|@20((-SVpifmrZD%(c&!jg%=9VKq*#g zyGd3%_^xV2%@BBF4k1*w(==S-#9HKCS^iq;7Re~PXjX{WWE`mq!ytVz*919862g^%=@b(JdVhppr=+MVr9S`=<6ni{M9i)4Lt^NpvxV9mc7Z6Z4OmkN)b_M6 z;g@nXA>#VKSSi$fFyUuYm|??0fz2~O@)NsajH6s>tfdn}B-2i9qL`K4adBR(X^9Bb zERU^nqm=;y00{u@7^@;P(=ZN7Q1S;4UX4ZiL0H|kxT#qh%z56}c&Z?gmMQ2*izCF! zd1#_X?c^DiG-aAq5D&?|Ihka^wewIx_|^A z0Z_m;qf2oUO}{1jUjrfv;Q~V#5MdRK>S>bk#~lVsLF%T{L#7ej<4B!p>2{-TbYG3y ziuLA)FP^swrj@ZvSjT8A)_CT3l{RvkcjzUIFyfr@WT_w#SP$&3&}ujDOL$DVnP%4A zl|SaAE8ogjrlT2fj_y2FWa&{_MF4aH88Z}1CE&DLLWlTl;SFyo@yt^8Ny=Sk!+)ts zLqPxl03Cx0NHii47)idogG~%kgu|6h@JOmQA__9q#4%?;5d;MRO2m~66dHykK!{`o zaKxbuP{mic!H3Y&>=`>EhoWcQx2GJ;8E810O-F9p%gq*B*)1btk_DR?w;lV|y3H9--xi|UJkbN1 zKH%oNR>saPcqf{L=l?t>{)IJh0uU-g*r05k8*S@vnkqr*CfGW}DvJ8mM2-WXha`>O z1YqX?RU|tLbPDBLO4tsdD44@A?uJedy;F%B56NkOfs{i#*}b0TX~?m7O&hs+U6zur zqbwp?Zl$AKD6P-+299Kyg+XJX5|fsJ!9HIYku-P1P0B8lhN_)<+TCvl`E$Sgj%7TP zKy(&xb9*_tc$YOBJrhdVAdHdDYc*@(y}iyOh+|H*`cFHx|Mj<~h&lj(CFI56R|0M| z;MhobTut12B3l+o2U#a#4Vi7cu&I42iz3~tkPGKFQ4^fwn&Q)Yu|(+OrmU5qb?wwB zh%q2R=%kT9U+48R`DmCr*;Xn4^jyKOG5$_n2@M(qAQhYncnQGKQ4-8Fju2J=Tawlz z&;Td8GXD{TAuL!%V`l0~BkmY~q^P&>r4<-T!!X;t3rg|{Wc4^3vLfc*U-|Qi%zZ{l zYP=mL7*cHUtlHiyl)m@T_l?zc6HjW{M7dN%7m1jVtv38#Pchn#qtX8~?(Mzzb01#4 zUBBO-YPZo~o`@(eg3Ja2X4)sgRN$op0in4-0R$}qD_AGFkKUJ0L+r(l^|_rLd0TY@ z4p3!@n^gXMWvT0S5j2TQ%b5qM1LUL_6tYbhj3;gx+8@pT`=n&$fds!`R%r3B8g=BdC!z7qbM6O)3I5gF0rP0_9#Vr4U*>JsE~mYAU@97L7%NV!{#&5QBmQ zSrnk;wJvF3EisurI>~Pp?C0)?v|O(Ml3>a=1TU$RvGjqy))XfaFgilfA^h zdHKT4TQsinsryVb!&+FfivreshIu!0SmQs|Ox1BarnaLs+DrX8eK&qvvUQqT{I~s+ zOduCRfDNVunASb^yNJ5MuC$UC4192HNKX)8t*yj}oMLOUlIEXtR_b+-Ar91U5g^ezFMW z%QND+iIUstP&a(elXalX)9oMQ#-l%)WbAy!^`Y9;0fRtB?QZiT%=ZZ~qXhy31Fu0+ z1rfl>9itK&U7AiAKqCNA`HIDMt>aOob|q-pbSRq;RAz{SnP3W;62j7WdA`ec9wGXn z7*$SZ;XA>GrmtA7g)N*Q{yG`dhMUW1s@jcqSd2*}(2X$XKL#4!QygfGbKG)+KxmxwM1g zwdIVL4EBS;=;E1a)X~Y7XjVHum7!M+=#eJ}rt7%FDhORzXkISg*lHV5mIwsgJ#t~N! zRg<&~2|JX^D4b-OfPN~n8$`@^q7M#M8ipew*w0?pPtQ3T6%i6yow*Qip3UBPB8JTF2e1UlSbESH4yo%N_n%xaDv5k$aFEdN`m2#cj&RcJcYWwTH z$AA60u^=EqfCi`bU^18}0T=-hggj;jj)U*6s)GSPd8(QR4gg$u4sHKxi8pUjLF7rA z%WiPc&@LLFVss^T-24e=metKUAl7bdH&A*6XpuqY0V5l&0qD+(j z`=n&^fCQOYQ`1Z|x?g3Qx?zcV5>b6oO{CMQwH2y$l)h|KE+An6L!&MF8RiuLq>7-E zNWgvq{YMhC@#zLM#Vz(~xse?g^ff6=i?#4g>frhdhQO7u`!x;^V zVY}X9vOV|P8OIdlC+A#5u(X@fA|z{Vdn%QNn7bpYFxD7WaN(%H@ebqANPTGXIPB=; zmZ`Y2vF_@9j^ZVj@e0*!Ty9dSjU%&=V?`Q-p6Pn%(JJqLi(Dk}+Ku1L_`Nwm0!30v z1Z(T9;n@yGh$aweeFw3Z?47VcSxJ*3!(~H)LCgySlC4Y7bt%%!bw~1^2x}m)lFma{^A6A>WBD2MU_3D+ucOe}LUE#l=%Rd-f&O&xBD z)w=Xjx*YL9#Vi0m-5>}EpoA>G-@uo^^MZZGRisbb7-7(7NK4vGm9Ne10elMsxcFqk$gH74ky%rwIrt8VU6a1TRbo_2#MiybG< zDVQl^+RbrGXw0IZ{p6!7l;xv_!dZ!(m`JxG*p&|scobXkVSzg(V+H?YN(l`> z&_lEbz3I)yyHLKen{oSVbI0!?!Y%GlBB8UrQev>;TR4S`&s%BrwYJIV+2p5%6jSHE zJeb8Gu70J1NbJvc-#hl~vrUBb?V~OmNzQhP1WC`l{n)vz&pAn}lFd2d-Wq(djblRL z@Mc-9{CEJK$ps!65eJ4tfol;Sfsaz!Uu40Kin3{7dycYM_X?9ln7t;kAZf-JMn$Fv z-jryLp#b@DRxg26I#}|XZ_?VS@gb)3&0G-0V@Dh_*5mGNAG9|cl}8Z~w7YVXt@1h) zDlA|M=fEaK!%1DeIR|I}gahak9WWe$*~fyCfLw_dRVINn3d|5sl$OPdE_8iWcOg|1 zz!(edG+VVpHJ{QnIdHgvOgh7hb)IeXxP;GGF>^_6jq6@I)?rg#(6dbIb}CWs8G~pS zi*)Swh^~1anHjZQ(RfZUIAoDjV-^BNPY)0XBNg5A3LrU?;oIkTK*2x(M%?tnAPn4O zcqBMP6griHAqKL53NRr5`?N&Qfdo=aR8ucBczDQ~nq?@H5Gfx~tvqw82&buOwhm+r zx*RHwi3bt@tTayE(|lM93z6ag;+zN{!bA0^t@AWL+k;9^!0r}~{kEg7YGgO<>mNaF zM^<`5;9(3Jl?&`djEDYgw=zxjAQJRM5l+i_t*hm`b;<7?@);L`p|q>+%%< zhVZE_--260A%+YjG(=385nxQh4$~5XroP=(<1=QC%iCQ$jDQ)9JSU=bP-a7PTY{=I zv8qNI=9Cp}3;5+bIxdna#>J3pvcT02Lfu?*>2aRiv_vl*q_jS-Z$)Bkajuu;GbP)_ zL_%ItY6y<#0H^^#6Xmw>NwAOsi2z=v4on270{8@sK_jN=le94dKuR}-0OV3ciac}Z z8oP18-gQhz?!{gb>Q^R%QrT!p9wTm-_FGw6{w%ZbGNV)GMJ+vM60tg^>kZh-9Ezu! zPjwRP>IulQG@v#Vi|K;Ho1DWP(LDX$41f@U5CC+#?hFlMm_SiFUZT>e5EDs&aOk3m zx3SoQfYoTrk|6siF%o?1=C6jWM$z=pp;Z1;K$hFlyF8~f>gWTw&~2gQkq&X9WU*m4 zP3=Yt%q!B<9{r6UIl{!cDvo6Jsr&0$$Y#rLO6CfI z01?|K0NqB(aRE?pR1+b(cOhDCUP_uM`wRs|NySf9`GRSSr%i$nNIcZ;(yB@A%H)>+`?N&b00W3e)l*4CsCj7`jcJ2_P!TUrtvwRy@uz92 zq>in$oTkmC=ELl}E6;9!cG>f?mlH;aey5SEsmnz^ewsL^%0(Ptu7U!PSb}1b=5fZ; zQ}NXR0Am0F7usNDMSL5#JF)tS% zUuDfAUkVx$9B*@DlxlhF+&eRIB-Oj?_nDOHV{f^*8pf3|^a6CG$_ z5xvm;X$?N~t#3YxJ11RRe<{ zY)w3;?;-Fg_>3b0Q);_s;>W4zBj!okK2G9y5h^%c^OdOv|7E6vqi%~bI8)LR2eyG-24katk z*moG_M5!0t>1+Z?iLq|qQ%$uZpIEN(`kyJPaHfA6#2~V*U$JecTdrnLQT$xKM9G`F zCDYC#m9W1kbN&DjoW1xgh-zVwlq>*^**G!3PP36?!^I2$P(UeA(6kSi7@#fuVqO^u zT_|GyaN|k>3PBFmiI|gPDmw6T*>y?z*nGXaP-h%WP0_-LwRIM8d<&7%vb4@Gh*(Gz zTrzUcpy+{*DU3J13mq#nF?DkHzG1!p`=mtl00bCI(`!r|_2LqrH z4@idc+ApLR8u`#^CT=1EpUr0PL!w8Y@E5j@dQ@-hjc zpe>&j8&8c@C+jnTO>0rtEgj^%8r!8-JLN6faPbt2XQfZxDLzm`x68`)Pc?UP(y1kc zm|SGwf&+MvZr|<`wgwU`f&mT`0#k(XuHjP7keIscJp?Lo7G{GXSk|gyE(q9UpA~Cc zBpQsBrNt^QYe5W^d4Me5k+OviWKBvetkaS-$f*Wo0B|rz1rYp-i&n7e&GYl>mkc71 zHEtKBSCPeyI&>s`O)9}Ak0X%7x^v~M0Em}>9FJMSf=Qa$P=ujcMTnHuc#ReyCJO`` z&a>grGe-dw4ITwd75KqHLPZE~Kf!97+$zY`9bpD1gQEUkDi^8IINLd42bUu4 zOkL^LO5 zY8MEPNLBzOO$Z9fX5v1RV7o=(25TaMZSn#|)FdgpEVgZOCE~1}gHRcMYrI zJY#&|kW?oXy9tN9Iy&{FG$UI}77O;st;=)#%U{8#5Ojs5Rxb>*rs@1VZ z*K1l`u5oh!$Y`_7js1&A5X}H=$;p49*7cXUY#rAGF%}rnXcl{-TXio?cZ(Ewb!cbV z+oa1CBO7z-LrpPwFGoR?v1Am3Vz5KP#NoCcu#e zUFXUGC;KZ1mLebk5hTuHQ-=O_7$5`_2t^JOJe_4!8{hZ!LkJMG!JUTU9;`^AMS{D# zTXDBiN^o~~cPZ{}#fv+|DNdoK6o2^s*0cV3F)QGo^$v9Xp1;S^fvGymjx9K z;ZB4}_YTdrDL4$~^ldK^3y{g9T^^>uICEk?Ri*nQ+6uGT7ea;TtbcsN&Q4%YVmf&7 zKfd^15NJCVv$l?d{~U%gdd%!(peEUJ)jfnqGkGs@v^nOu5BPPj@Lb~jQc=W_rpH<2 zqg0mX5A;aQ+f1|swqu#i#!H$FTMSo$s%U{yj(O1Hz6t%^K=A)QLzS;@##bBx~k-?yVSro#oK zl7W?kqgOUon~=6Vi=SC_(`+gq3_d>JRtc)(0YpB*DbhLd?*HD?@me*U^_ZTLC`-aQ z(DEXdeeK{lwZAN?a<6!ia02A3?`CN8dIM#H0El4ygtEYoh!rfNdkbGcp_`pe(Qsu+FP;NmC(3d*XU3I~uFegXFscs%vT$ZiW z^C17qwBh~7(n@Ag_2Ir2&+eYjewXTrCe8evYIrr1Wd7_b%xLv*pOCT~SFkE4CNqi%ZX&Ec^pA)51DdWxEZS@W0QF!OTc}?dMsh=f8f(b4BqSPXS$IgesJf(L$l}E_<^$P6U980tF!S!U%C9bOmo_)R!TqOk}NP zrYk(AD*b7V&Av^VIxy0O(;79sdKvrkO-`|Lf`&Hp7JgcLwKh&J`?dxdiO=#H6OuU{ zJx@|W&A45o%#_I1iLyXU4TraCuTuQYtA!_Q`L6gck3Wf5tTm=`6lV^3m(TfB{M;oD=T{>^ zMvj1&llZgJ(ry2|AxQ+t^0I%#J`UIQuWkWB6P0+F*&8l4BAiWI(F};rtNBVEpCr)Y z=n(f}KG}N7tW(6B!KqE2#IO8uh)Vzy7tbjIBR2QsSo>Z%W38n`23+}H|K}6|$~M$F z!Q!pZhPPLnoFwBhIa<8%Qm$Hu}3F4uu1|d=| z({WbsrhmbJ)3yaCJS*MYAdD5v)9VwNjw`1{{~ULSDby! zEoPZ6!3ZtU`FF_o1Bgfi)bT@GF}RMwRZF;CaX^YyCVk=hS3YQZDcBm2^1C5 zx~!)JCH);vpvsVwOKLQ}HYR#2rQLeAH_wz>N=X0ybl7=EHG-F-Kg8|Yx?rW!4Wd~b z@2}UR%9Uru7K8%*oIk_fhl@)*>YJ|^D8JMTZ)B9`G!0+9D1&T@ z{8wLX0zf0i+O{0LWy*u?87BM5`2OBH)tp4-rioR;srlc#OMeow8|e`g+L0Yo9VP}-v8cjLA0asjb{(rGlJNI-vimEFJc^K7!oQ&J?zzZ2l)8HeE`c6b!Pj41+bHW=kD-|0-(t_$dF7QbBXm7{Kosdx?Z z#(G~5hwfRZeRgl@Sg@}-t!DEC@&=b-ivIiPIlxMjk84cEU`be;mi)q^5Er7SIf%@-?yZb2 zbMLPE9)~zGoHou!$51HvTjFB?7L2Y0VxP0 zx>x{l=r@{4Y^nPXeVOrioGOO4wSm#Ypn2Ik1CQ==Iz$_jf^M~FDTnxTX92T#%QeqL z^|{sJz6LWByvFSK0xFe9w?l1QoC=$ix4SlTd?JUnWzRKAU92^{?fUtybKPxr)-_H? z$k(D-Q2E;cB?n===BZ=pexAeHqQL#vc$V+CGA7^Jr380x+HSUCcyvj8NHM-G+dCHE z5+D*JG;DlI7znZ(QNYVBrU_$BAx6s{JTq_9k}O#{KU`*7a^S8|KaZ7~@T{!qVf%1X z^m)8&a^9wLL!I?<%o_+R!?Y}r5)(nd8=jwAPH@X3R4WcOMofe3Wy3_55i?zM1E{zF z@Zf*?@Q46~yyR19i~ci2seEM-;)9p&|I+{YZZcDF;u{+M2LLFF{{c!srbFipo+tdr zucIRmaH_{ppLvZnFU^XVB?$l*|JK|JW>b^n*D5MLLslEpay;aLU*OXcVaAW?z4PZx zANpK}-gM0}WxMb5S@4=PY_)R@;sRUQX#f2)fX+j)1${?xvUc-CXxm$RF1ZW2yUn39 zb5pR=k9)SApEx_?>ciwT01F8KEOz(}2;y?V=VXAH%)P>AtNaXprOIR;Bhi{4M+{FB z#0(O7o3})|AMMF>dy9;z_I$r62F8BnX;$42G6|ih?c#&4III7aldw0Bf_unf98~ZthRB=2A>^Mg_$9)`Ry_J90fHIVSY#_D1(hh(i000^C z&X8Y_KW2N9n))OOBEW=__ll|c0Y!N=O(o_g)b;}KdIalRhHT%33WQuF$W^t`!sP8|ksdX(o8CQlv2gLS+)s;Ua!rkMR z$WD_{#!z$9eCbmv@*X39NVH#>7Y*_^yC}y=ojbsp{}HNWs|9+Q(5ft_z`X|Bs`kcb)p78gjHV8{ZpRzQ`eg_#0532|a0 zKn%+ebkPeLBGjlf*)RXCpLGyOTw86 zj5cp`jz$WY507Me=5XewA}TvJ0F>&|eeL)E5Mq%nz2u~65HV#5eU3CI_4*+VTm&j1 zBdc(AfG8;GjRg}&X%e-9mnS{;?c$;gW|RQocb=@*p7tqU)$3AHg;LtP)1Q5423Iy? z?NKSG7sRo)(SqE%f0jPRyB-69 zv-#k_X*xk~i{s}!WaW@v*-Z|JAW!PYsd%oeF)Z}9YLvX@IEpVqT??nGAkBY?TY-gz z1sQ+8f1*f8*tT>5iKu(Iq?m-b% z8SrOY&lQZXl_h9&T~}3QYwv{C3gSP=NUiVS(Eh7>cv`wo$>`E8mtd&pB2&Y)3!2Bp znBqMD#Eeu6Amr$9MVq*!xv7j3Oy4{%Xt>EY878D4Lgd3e^bbl zSB=j@zO|+>Pb-YIi$3H|@P7md;!o0ukP~uGJ0Ms908JlHnBRBaI^zRM7=M|wdpnSE zF3v41SZD~S_GVn&FQ;0Hw8OH$^R!0*4r)C!Oq4su%qbZaT?m20w`Z5(>aS4){ms;4 zsvhmnL!{0kd6^Uf7Ab5Z=7uHdT`hD=u3k15F2bZ#e3+ehzlQo3N#p&zC7#mp^IaiwYE1tH_u8eneSO?B&bQ%Nl~s(ge=XD#t9xXRpU2R<^5 z&{ZU9YgLkkjN^pG57S2HnnfsHT4;?{9s)=Zbcln$4}|et1)Mal$fQIlU?l4o{_$2E z!o1(c4X;Q{ChJT@8=htE(`4vkn&64j<4Jn2hli}B9!>$clfJv<@-BT?&z|%#xMf@g zTAhyg#jE#|`@>&P;o_Dv82qO{mq8$qfY6>s;c=x3?ybU;e zSczj?n))}(NilI;m(V~teLBwVu`1DVF%jw9g*D)yG@9p{|BtO{jDHo@x47Z)k@zzZ zi6H;#E_srCETxkXXew^Ntcjt>(>FS0dSS2I5qlSU3b9{ zk#5Z3?=_9N`Yu*is;@vU+7^1c*dc)y|I-D0Y5a#6Y;-*^&9gfPL0~?Ol=Ik484jl* z1;LP-S&_i<{?oL->9Ist2$7SF_N^TVoEcH~oAMP>ahG1ciXZiT@bf9H{(Rmx%QiV* zov`3k-LrRf^twS*^V}rA`Za%9pdxFFL1TeKaYG@lxxO6sJR2{ySm$i6;5pb^{!%w} zI_Ky2I>EY>43Ln(SOAMn#}TFs?mm~^IAs4&5fO0-D6H4UQMGEtVhp^}csC`A;T>xg zJQ#?KMC|nECh)pgj$My0O2|9T{_3+=m;UjAsC|Xy=imGj1YLrXxg-(c8mML#@qhy< zp0`HvJvA*X?&1{R45(^)fmNsgjOVWdah9LbOid&KaN|69{vi|w<#|w1M;1Ggo{M%6 zpKqbXPL&;hv}^36Ohko5oH7W21cg>j#U>kQPB##z!+)8F|7?qxBK6}&3`2vp!o>An zuWs$^&Wn!-V2*iPY2{QuZYq5({=4xt_o0(nCVqWC5hfk}#uAjrRZI5%>=-Gc7l6!h z|3GBpJW3*BAz})BlV=9lIfMK+Uw8%}$4k%8NmGt}k!g>%4@<`$;?Ssuy1pT!wZ3j9 zGmoSGWa>`FKZ*yfJGuV#iG-QQ@o3(+|BHUmTy+cOt%<|-vefJD99j1#_wmX+HZ>*|e38MLZYx;k3DBibb!nBh)Ab1FOV;+a^Xd$Sf0 z1Oi~_IU+Die;~zC87uSj0fGbYC?a2ceH=M&Mj(Q;5v&o3m(vQ5Fz1xo)GgZB~xW9V!Xm0j?SEFg;sPe68e4=9Wrib)T z$0xnXxNs)z2;!FKUmgy#`-RMaZ2;1F3o-~9Eis6T5M_D?f^kpM>oUrQ?vN)_l3;?m z+t;|U-j8Jl(*Gej@&2`G#Cx5Bj%0N1R5zFsGa#N`($WSS0;NMedcySFy@yq2GQ6&7xTeV! zXeqMtp7cWLAYvWbBp(P-e5yi}DCq1l&ITstbXz+}G1_Aoo!gUahcUijgj-G#8D^Q3 z5Yqj7p&+$Xai}w*N{XZT$A7!kAu{FqDrH7tKs@`xx=H92;j73@!};dBLhV!@@*amZ zXbz_BregyH2u;$~!oqaY-j3iZmtiYlPDDxr2h`Js_rD|PY^mFd78ifi%%Nw>SMSAOVN8G{e{6PbeAK)(7}n7V16`IYltjn`SBmUvP= za%s5Nw@7o%8(M}_r|C)V?c&R0g;c>cv3!y^iwW8Dm09lp>XRn~NJ4Jz#F5*}PKG(! zf+n5B+F#|2?mEAg$hzsp-zuDoUfKoxOFn#?9gEY;83gjj`q|B-)bq8j`THV9E`=92 zfzDgiR|_bt2q>VsdWw_LY^&rA0U-bj0uv=Wz`#fomr9CujM}D6f6tfy&7KeHb`-TA zOqmY%5g3o7jFF0 zBFgE3BvnTazX~Dda*eb3IHkt07SbA5%MIpwROJ;c;HZzev~~lR4ibas1`FJZC;!> zHw#+qiV;H4{0@ND_EFu|ap)g{ z1;gHAr&7l^R;9WtHry6#KP>f^h}k{_?bx^BLfjAh|MB` z0>$w!&RUeAc^XMl#u%awK#~wVSthY4w%?hBz@tD*x>(bIBKWmQ|6g`*k8!8Y$4n#n z^wQX5xa_8f?z@v5KMZuB0vfBYtr_;~_rt9(Fsu#F6XXPtIOg%&@B~(o#(^+9OI2Wr zIiN(P01;v71Wi{O{iUk;T)OG;CAnNv7g1!( z_<~p0xt>?T1S%6o{H&yDbcOp@oMkTH#!E?!Top z{tf)b`m4I=!0$0v>hs)jvB~D87lFO{gWPJ8Ycck{Lm^!&D^VIZuXD+3g`BbT4mU=V z!)=dbqPp|IDmm4{fAl|;4K(XN77wq&4$`G_S$nOn^U^VF!l{O z$cI?0iCM#sjgpO0x;@zEVE%v=SCr(o)-z#aYt7PohnM`c|M_z_)aM73;9U9=5oZ<= z-UPw^R;P8OCYl7tM~Fg#I-kIVq#(NI6I6Nlq^dF+gyK;O!ajA!`+Rfvl#C0tL?>Z3 zOHkN0w{t}^77m&s!6XV$&Y4L1p-r^0k4t7&twAgm)**&5t+(2ruh*);xf0lWYpapoyn zQW-Es z&p|00;*Nf08e48la59*F-MQnxR_=E-_a4_@EI!mi*(qRi(Z&41zvASJCSBwea;8Ob zFn9thbXl5jOWoSQWaG~wp(o}3IZMY<4yYIurks;>q*~}c ztJ2bCQ=cZR@c4*?_rnh6{vv0sr_%X3^bjExu#aohMoWPfy{${_ryZG-s@Rk0p_&XNl2e zY&C>GeunRsh)wOR zDq3Y%VlMCh?SMl#+&#V-y-P4uulSTBBs^Pnp*}H)6SS%XXgKhhu8^H0QoYH})7?l9 zZk#&JcV+4<*&I#MZO$f-m^mPd-;xfP@$p(6cC@&WXiERh8#&jxdtS-iA@@)uiZqP` z0PJ;ou+F1H2a)JXxHrd=xFrpZBVbhxHM-YFCMBZu40wfD%jo8NtOQt zXHBQHi`3E5<7RJA{{Q=Y4Orz-0&Y2lSp`s=^l@-7VeIu@HL zi$93u!L-E1)Oem<5(9dSgDG;FIGn0mR))X!aO<7@oWn+@lM$ieI_NQEx4%Yl%h*Xp zOqG`~#{r#ObFb<1F?xDF1`t5d=sSZr1O>=6J6z?=q?A%e&>9BnU)5Y-{ihEH2vGY= z|DTn&Os^Ot+xpP+g~g?y`T^sEvvsI;TZ*C?waN-E!fMIwCKXFSw z{Yh}f`N>9|zC(nI(kL0pH2sjoY%}K%_NOeCe%5&v97RovBSRfHS9HcRw5_Q`knr^^ zxt=eDOVrIomR0pTpV%vyI`WusX!nJ~V|Ul4G9C$(mVPhcl7QRBX(*5#SNXEYi`Y$8 z5ibZ^C1@-(vDhDCIPU{hTz0L}sSUIEw3t$YCu0Y9h$^8|%++L%R~68Cn8n2@{lsIi z*MD$4VTk0rI?8*MV`4GJhA~--jx+vQ?}I}D21k7*U#MAQ`=08*14n!K2FFf>RUjOd0QPZ8nA+t3>w}%K zhOM@!moDvbwF!MXo`Uy(^CRm3qDtS?f~d)3x>ogRRZ0wuVUBn<)8XvwsM72$)7Nfh z?|w1_0Qa`8Sj9KivX&DOi6>`V?hjb;1gnkyc(w)ayYx)B10~FAaYrd!={G%fH4!sZYHfQ;_P^y_e$-ZQ7PX+H1^n7ER{7pInjkPMO8+rITW9(u!ozwQ z@gQ?qe9o-=lcBWWl1HoLOCX-*x9iuG-^FnDjk^xKM@^Y=JppSnU35G8V_5YlzxtIO z{0Dg#ft0`0p(T=`In6IwOh@f`@Gd1&=kA0%=L6UhQm001vM(g4SNURyaSVh-=X0?Suu*?QB#xl1?{V@B|qoSs{M`ti%G@y z1UvI18G1t*96Bxu^0=Ku)W~3CFBZ6NixA!cS>w32uh?X;K4s|Kvbqp|aQ~j!DnYNE zi|)MIfhz}@Q17Rvl-ApZpZQjrjUs9tjvYB8u|!Q8w#kHA^>Z>Q^z^u3&O>8A>Fe7t z-b!6YAF??AUI|L|`~bYIBrdbO@OQ=zO*=EMzSl~s@uvLM4WC-*`&;!? ziPgO1l6N`ERj@sux!|nIBl!kHJ%x~k*+A^3>3sp&rf1Dz?yB0F&8UR9aAmc2j0us^ zAh>kK{(tjj0LWEY?Ousn*8;x!)neBGPe4PZn)6lu4BgRV5+((*6A~d?%O#OXfpM=0 z-j=_d3Eu?u8gjqoSg*2wGIwDNRZ@7+)#^K*HcZD$35CpwWHk%*wNcZY&$;mYH>0VD zZSdr8SxsYHx%4g<+BZEDnKo&XMCqOkdPG-_*G{sQrPO3%auzN!c~gr$bu7dGM)t}r zWVn7BAKnwcz zgkwNTFHqro*SbQBia42f5^TsscS2xkB?N@kT0WN!I`K)D(u-8E;UFZGRrj_p_ximU z#)p14^Ya`v>1((`rbN?!`tSn)5>Zi`Q{vXPDbC2YI8wqTWKgT7^`xGBZR4I4Nf<6k zr7K`Zt9(`c&O+ztd?T>FFajGxyn+mOf&KZ>Xmi$k#CV3p^@h>L@kujl>75;SF|b?& zh1>Gp=^em|8VwkvnE*J#V1tYFLqrxU0!881m`U!wgC=-?#f4h|VAc!``%H-~P>fOX z$#C^7cY4KBLLoi<5bL(Tp5niZnmKR|6&%Q5W%n$F&8Vxpd}If zL5NbyS3M}HHkGe(N*-nXINDzsZ1MOmShEjDZdj?H+NRXD?)1!5jL-m=3^ga8nD*}c z({F;=%jWlMbDaOmkJMUAr1S%h=7huE@2y?aU;y&SBX5}7STCD09NW_aO<||n|BP4= z|MD9)a#=8vp#h6~f7m;Yd%qZ%ZnH~G1Wvc=9ZcSPrv4#J2Cc2;E^ucs;$7MDZ9V;~ zl*w?CFzwIm(G6x=j%`gRX)#%rF&m19cf3S$)$Fzg)6+RJeQ#jvh@>k7xD;(O^Kza_32l6BJUW=0Ws& z;vZt$+2JhTYCVP9Uhn6b{>0d*N87`mVAHWkxP6H`<$X6xdhFPE>6r7MX4|&;>|C6H z>c%zAgZ7V^Y=TR_J#k^IfH4vRfQXWwS92&GBTlOX9EhQSHeT=jPAC>0R0DNlMnX4G z`?^aXfIFtZ9ZzpuIXg8O-uvzLCRQ~4fBJv`vCF*VJ8`eN97gz>gcU-9#b5HB zW{xV8th++UqMqO2y4-I172+^h=WD4;MD+KIa=Rxsy!+~U?p^DSZ4wdW*A~PdJjkqYMm7D2fo-1ez)7{=&msy^{GUI~L_U=N4_XsDP_#yg;>)bwDvp zt)-%%&PNs-6KJSPEhf5q&htskPKCZzctn>=*ZwHMbTjO;b$MPMgA3b&6QMREDD-V+ zWVke=lQy?@er;bg{Z$zs-Ry;w2pR_Ty%-6vfC8pt|Am?vYCiLP2=+%+L9Jb;qF_92 zl51+@@y-M)41grwwc5rFmH{qpk_&h=G7>Bxk4w1M(()|pS03e4G~~uo%vufJP9^0J zAPnhM&liQulz&15m!g|BTL;^AZgbu@$_xyQOMG6>z z`mIt}y!cy^C?guK<8W&%F8cH~=tq5S!SMtMdigK7jK~sA~HHN=u59svU-rRgeRE!!1R>IzhvF3sE!FC}!y&xMlhde4i zGP_8rNN_I*2WeMCpq3n2ly=K(EqDv{v$6<)RS27Zi*pbm3*oZ?G(vd##Rf(C2$1|u zJ5k+QQQp5XhoGXMN|6Vs5Q<>KbdmhU0>C83%A5!!C{lAYC(EnWQ-U_AfXN26M3hw+ z{~S(~M~rlGk_4k{Y=M_UY7hf$D5C`$Oh1r>p}?0`CLnJFyHSqapG=jD0ke4La{K%x zDQaF%4lWWwLX4`fD>pQcDg8!Y(m_zVE+CeSoPwPUM~0Z_ia#QgHHQ&b&gUt^MwBO4 zgD2xGZ!#~~!07q;S&vES<=T`a4+8*1Ub-hh05!Sc1Q5`RDy$cmHNoh}`@Xi1rY;XR z3riB6B%{^E44RJ^4>tK7c^FNAD%j_=E-Nv2 zMK2{M$A#1NzOsCsMHV9dV)~?BiAJ00VH<$+^ZlOrEdsm{FnR8R01OV@K2O=jSqWmR zv~|WIV^>x5@QNW})3ZVxj3t3EYfH1RK(PvT3+NslDh?M#0uDM3I=#!A3H~l1fko8d zE_)S3zt0$B)~KWbkuZ&@4~Kk5MHo$PVLCC&3r7&oI2X5nXhIhxDb-jrREzrY_gbl~oq{Z*iZvTKvY0cqD&r^LSc8yN zpHV7*iZDEjH{6J`Nx3{}XV^~S>?%pnf!ir(3ClmG`7gV%0|$#_?ziIC#HP)3xFim9 zR^HiU-tsrEz4xlL>`ZJvC=K0ye&E001WP&=IyJob#P%V3-Pc|&mG;nn4zz~WZ*#M1 zs$*AKMako*CNGQN|9&^W?u?rL@9w`p|2$H<-CF(0ihxj&s`6PKg}Qi=vIKKrrauT3 zt4;lh($se$$G^m>pdIG$4T$eVWaFp+Qs+kwX+>7g(+(p+Y~k@k5Ja^wn?ZJIfGiA{ zhZ>HE3!aEHW`ycfQ$y`BUozU9d-LjaaS$!}05Ad@KoCyM&49kcYAg}Xjr6zSo;-(% zJg*4VE;PnQhJ>78DDGo=A;EfN!HP3bl=L&DZr#(%*oEl z>^wvJ@N3)8@TZ}H!6SB+TfX<2qG3=AXVX~o_iVPvmg8=eMwJ&Y!zU9(0g}5OG5V-b z(PgC%&R82J+7l6e9%uu_O*H&*?Vqc?`-T!K_3T4V=sqnkaT<>2v*|nkdOq!0>LL-p zXgK6k4FS@S>Cu)$`EQ3WSK1QeL?c@}P@o{%9<<0ghC*pFX=iOeTyzhV4lf4?K2s=n z=N6?>!MR`igG0xCXO%pcgzHk{Td9@roBzGouh*R!Q`Y~zRvRL|CA@{O)mctoZ2s&*bi#VZUd$`~T)^D*#lmm8O+70uViB^L*L~ zz_+$CnxI`6{ajr2n1a6CZb+q_v;hj!QXPF)djRs>fw>91`SD^k%+f(|5V(a4E3d?H>sRFq!C7UWL5zHJ9- zkT*eC7Y&b4Grr(sWx7^Ph_{b(6z1XV-I}z-tG9VUgCqmTC$iAlsAiZ6b39t)&<9(H z>THv}^;Jwc&y}3ypKrY`6hS*+^BFyg0D=V8kOdqVcoI* zt-dv8v{N5NMXjctueLIY&Ke3SQw$01aeQu{Xk2uBblWYmq8=Nr-9Gpr|0B?fw`$;` zPi#v%Bj(2F=6UqY6v6=ofH8rn1kBrvKLu@oP#y&5c?yJ}Lb7C9{mLw@N~{=J$e%@} zTYEYF$Vj#0YSqh@&9#oyqU0dNI;LqZ@N^|XOTh$>R8}s$5G>%2yHdS-q{Bzc8DYCG zwrZ)e!b|y8OF*xBdOe}C&RIBCnHCKjSuFA$Qa{L2xxPK5QP;exsfqdK3*Psitxcg^ zM=Omz2m2<;V!4Vp#-`wDMFT>DK=S}Jw`C_Tw8e5Y2Wo^iYaM=u?&q%oxGio~9>$h~ zh^nC9^4sZc)}ai4$=`dONIkh@f4WuZDF&9t{ny{P0)UPzm(1kFr!7Y!6-<8Gt8L_J z*%f*A877@PhESgJJ=eu-#P1Wrw^E-wo@2`*NGRVu3A;mi{Q-CYbX8;&U?G~mr0-!0 zC=AFcIYP~giGsC0@eBXVlD$mSi2`g&iK$EyxFb8BTJD@V>(a06_DIHPk{INCwUJku zR-Hims)=G7NsX=bgx{qi0H--l2FTMEch`E%y#6yZc!7#P1fnrN5N3Q0&yNR-65#e~ zGP;Sf0S5>js*Al-Lqg|%-rd}Oa$a=y-2`i2q$wk7=&Re>Q31EaI>Nho)^(aMF9fK^>+$TzI6 zNQL8gm*+nn&)=POaGqzus9>O&Bq1iAq)v7lp_ zi=`JCy=}?<<+@`qlIp8_mE=M-xzBhGoeyez)9RwBbzRadJF4=d66Xd^CxeEWEBeR3 zO$OmIDP*|bxam|b{j;o5Vc!&2yh&emDbrh*4`tAf5KNsHu4_L`|5ty`B0w9)3udh1 zvl`+V&(;Ut1Vgzh_CoG`zJx5isSy51x~v0^R(an`;_r*(bKvC8*jE;!g{QIl1>`+eoO!w)vo%Ixn? zncR&bw$HCr&#g^~hzc>}#Z|8rqZ9K7a8gkHvE;xTYDeBxi61x|H2O$?%Ai!$h-op& zi6k=Z;?dBEP-hIUQ##E+a>N*^X#%-I$Ex`EzE#oOF*77%zmcn`cJqu^sh?Z|oLae> za;Q>;MAEQ&eu72&u9bI#`+r$Ykq`-YYcbqEKl{9Y$>N35)(Mi0;=(J`NvcFcl|BTb z8T*Tj-#`47 z7>^hJOMyPHAg-m(HpEzaohcBLOR6b~sNoEqti{MQDur;hrvB8sS^^cm-TQW!NND0v z2i?jh$Si89?ZDv;hmpVU{^|ir#-Vr7WrlJxOw(0NTai|1%Q#@0s0yLz{-m zEk~;mo;qWL2OER1`@Dk?1Y6~W!BV3XciN)LxVe)L{)x0H$XzRLeJeMc`F!s(#grA^ zeDmhlZpsw%zy$p{DgxQzhqT%Fp?zEk&} z_r2dAcQV_f=SQt)sh>)<_;Q#9#q}fdr>qBbwZzL}^hlE={prXt7!M4DgP9Xuit;rb zlKWn07`87K4W&FYnMB#wa{OuK^$V*<1JZ4YEdgs~c84l9htz@G>ty3r}f{`Z%)R85zT`L3ON^)v30|1&E8&KFo1CT-GMN#cJihRqY5NY9OH_2ZtiiO}m3%u% zb%Y9GP@BI}ezYQ&y#YXuN(NP$X$KMF7+8$c0B zJuk~)8tK9SeLt({bt~Jer#z}XGKXkKclpUOr@caPPzTmcKw?kVI)vz>|e%X)l7EdIcmRr2tk7ei%Ml=ISxd?cI)BEsGtyK5Ihy(%0RW%`7DJjh=R?cG^ z_pjxel=JYunFG1DB@YDV*=sj`M+E+c$VDSNp=Z}3?=g-ShF{VQ+vI9}@7 zYl?4H7ly9-(inZB2)?q1e@rUqGszd-Ut1oFA5QjKVynKVtbRXux4$4`-5wyG$fA(b z#sG|lFaha{k>g)JSj-YXcou++hC@5s6z?HPCgk3UE21Mz=NPKs9IgXLSV~!(e@22@ z$SJ|kB%J1;4vT=O0fYVjN7Y$H#nA?7cm@U-2r>*3Ja};T0Kwhe-7R>~;O_43?hxGF z-GjS@1Si1q@7bH}i|%v!^6NU)Wp6z+1!aF<+(|=8N#UZtvcB*aULKRoOwohHEzm{G z3h8NQ=tM~D&~)VfkM9O**HiOklseWC<=Hab{RU-zpRZtA$_v4??hHw@>CJ_y2BXIW z!)yAPJ4zkhwshX-%OaJ}#2Yh8B4Pi9WUhlWwCK-cOz1JDqsN>u)}HQsWa@uYE%Sbp zDxlEdAvf457jT}3#Y#1vsW)4GtLbG#k!}MMAWmU}L<|+Ft_6?PVfV2kjiLgwvg3+P zYVai$K_qu|6!L{-fW6EM9^HuYha)+gG0}6n;t%p|jIrHzI{509 zkdJo%h54IYHs|zzii)#3>7Vmb=$+pg<~{WIzhE1!<;gDGo%?6lg_u`ou(A=csnYQC5p>eY(XiszMqe zKgXk~%NbPzx==P1(J&+`z=DaYtxfSExn_n2I|7g>az$JA&wT50$oR<2P*IaTp3&bP@kR?in?1+#QIiZJ609U$jT@!+-J2*;GHD{`Cu*KaBbxz6s#AIo0Nda z2@e}Mt<)xYzSUJqMIq)X0C5r>jK(&PXi6y!jrdt%$M@?b*1zWid zi7F|3KO1fgafdMx*+MdYFbbY9ssJf`k>0{fqk3Y;!k5cDPZOoe3i{LmwX3@%qk4m0 zd^495GL^FlX1~#fS$afS%9gFD%?gwDc@zsDBE0r?kHb~{qnA$a+bgF-w~nN9oaE)l z-3i!^VqH_O9~1fg{enMDI3mFGMF%k_raEN8OT(9m zJTJ{;iO-S9ngON;)mSC7>ftQH9d#Ijh0oO!uRkAINh!4x)^P^g6hE&?t(F`SGN^`{ znOb!@+}zA=CVqYU(S1C=Xeyl;T@ddMJZ!;};#Xu(^Y&|tUyeeY<6~Utbs6Zh zr(V+(FG<3fq0t{~)lsp83vLOu4$JHR`XevCu!~}<)`+YlUSVyWrojb}B4))(@7w=P6a0?FnF>Ds4s>)>6- zR#V*wm|$2fx?NAMi8=i*X>fYGip`x5Uc;j;6eT>aUz4q@(WafvqhvyiC`ZiL4sC#j9ND z4{JZ&k_hHBwqsTMpD>`(yP1j#nI%1!Q z&?^nrbXR6(8W_0GU#LzqZFYM(<+wsDEKD5G_VXOhB1{@uM`}?KEw5;PWTz9?_!FX! zC6>n%#e1026vjAhPf3PQf&z&OhO0q!>ukm%OQjQ{* zAmk{n1?y#-hBm&e;N;~K4OVjdtC5eC?6J+MXf^$^r1!?_YjZBI?_{8?NzBFlC*+&Q z=SyXukn@(Uq=N64NVW;Yg)~m<$jth-I!78Z;vWl_Eei|sq&+CD1dGx)tp0#Oh$E;} z+*VC2pllJL1)~UOW)7wGuI5Uc42d|$AE$y1W;8!*`@hKl#Ik?<&whUSf~cfbJmE!u z29`;A8&Va>_cAJ0@=h9|Q=Z(0q+KlVxY5s%BD;R9g>FdgxVp2`szM4$ZTMT`3(Ur6QGoBLm_WfZmNm)NIN)1rj zFG;>zuZQXHM)D5(!Zq){rWZB$YC0s95mT!Y~jYh&!MR41}3;=e$N#~$*;d88h1 zYP0NzRo3nq@E7;i@>VmGa2KN-TI7^d&B z_B}mL!N~(F39Q!Rw%w76*@=T;;EJt37zs8TvWbz&?w+NN=X3DruSc1Coe3SU(?{(& zGSM4<|1I;muKTo(t}mW;-~6kQnV7!1t(hHMl~QZ}R({6Sg}eDyvl)8Qz+3)Xtcz0f z?j`E*U-vD(05JdnFPyvatGP3&6rLl|kcQG!!4zIdG}n-o84N^EeXsztL5Rt4IDa!K zfWMdH;XQ?W`!Wga`7is%_Mn=yaDb##OeGW0hzR9tYa0Lr*IRPWE&vcqtHa<;LneqnZXI{@iXk5(-6j?$pdEme zd*vQuhy|uW6}=Y4rz2Z=mAR}EPeqe`-roM`*h5%>=M!P+bQ=RXwC|Dl|6V7>`8)Qr zJpdMfufIT?HMv@b0P;vH+CTK4qbSe^SC}+q>J9*}!61IKnNFyL(lYE|Wq+iI1ydbd zJg`&S11z#0OlEa5!Chym4f`R?W2W@KCBU~7}RAD!f<^CdEw)1qopdr<%wX= z8W0O@ql^?p#{QHbt`ZuDZRF`cr$S%BDmxQ@sMV-q(8 zEp4KjGgNDTYKDcTJt&s+6Og6l5JmxNg{=vgQL^GODg>H3~&OXGNWLnb3^)ucrNii*r*M zTym01sVz-g+7f}?MyjAA(qvV(jh*rY=JA?M%wlzVXS~UyS6S5g3Av5TL}|LIe%9+y zkCa_So6m)sin>j}UbZ-@0~Gd^K~S>T@1yr&&?Irn-QNof7$`&ZTCL(9s_5bREp{YU zjs)(f?&l4C#g##6PYdH?Se{_pXetoi?6ywQ+ilKO+i z?1cubEcRnYBV>!$^n)Z4KES7gRDA>rC?y1Hltg+y!_#S7VTzyc#Nq?# z-X`-Zj@6yMGv3m9v=F_KtrpHFXjHxL^P=S?8j8!5E+X!psUAm7qVK;=O{+iZ^6{%W zRS4_Z@r^C!w3;07V>=#V|DFE&{|@VQskr6;y?FaqHc|c?APE8B0FVli%KyL#+8e-tm8 z|8me8FIDmJP&}+*lRjd%28DHl^7qU77i2!W}sIX3KEcLplZQE zKok)tq)sw=VhKfM+Vy3VlEhwP*p0@3T2kumWrdK8oZs7Vse1pploio8PdbbKVW_6L z_s@F1#fa}({5|{Va?0p;C;W?HJaTa#@k=R=K4W)n;;xz#X4W=hy4;8|S73uiWFwY< zmCw54>DyPHq3=0fS7%3i5aybkoRccC82%>jo<&RfsBd4IY42kq>>j7L7Oz@^X%c`C zH~@f{3PwhQseDg~fCfao_kM%JRCKdR?2s=ex_)9X@kJ_UgJZ7A>6jnN84iV=%tp6+T8_h>Si$ZLFZ2Oo}w~Q##r!~i8BEpWEw&$mZ zwH_1GSuk3fM-1Ku05uF!aIHvFxdRRrDSk}lDE;YY*qw0I-UK zw%j2~F^U#y09J<|F>8@H`p*S7rlNc-6KW6i5!l98|~<0(u;g19Da+H6!zo%?h;g+ zqLSvFdjItY7Xfg*=8K+^VzJSdW9f!wi&)-%%8?hey*rr|d@1=lCAhMQ%JS2$DIr;W z19d+hPqvyENnIIPFsENxn`tSub53(`hnhg@=G9439v!6lWl{<0G!Y@KvHlZ45YB!q ztZc)4z-&QPJ(XG^>f~SxdbFExtC~wpdp6y>Qsbs^2^}U zWT=YYQW2NZwOE>ulhdhh*6K4&vvNZmE>8<`JUWzM zffd($+2HQG#Y9YVOg8v`_0ofSUMG;qY=MOWLSYP4Yk%80UyWSO_)l1Ts?H8FAli5K z(q9$Qd!pFYBRdjxult?jaatpKQYh1OEWc<_q)qhU-L8D96WEf#jUoIi&CU+#`m4to z)ZBCVS$tU~OQwFFp2KXD9dbsFDd_&rtGa^A8@XH>x_@&d{OA++^@<^S-eHC_gG%)b zIwWZn9>fl?9=Y0CU@c-dVDp!UpD+zwjQi)CzZ=_Fhv>IjSu3OXz62!d-em^nWl$joVuJ83mYb?W|{M`d)_e(iJ9VZ zUzlj!5fZH>fE`9dZ(Hts(yyH<=fIpODZa39VdB-+{jk`JeK!% z(R=;pz!y}hr{#&px~3aM`_&x$2}9ERy*`Y0Qh-_BRFaY2qw5^$NQF{}J*b@TFxNjT0J&;U{eoW->ch|2VnsS=N*Q|?1Wb$(jW5&sSsn%&7)u(RLabyYn)`E>#6Y)cMipmCe zbH~7Ur6$7_$;Vip@`h{Ojt zx&&jw$Y3sH$(kh*dc-Fg79rA7%b9*LzdO}wB5h$SaEdK7y#3a9Bg_B5{stwyzX$q8Od2<45&A&BSU015(p50mXyI_ML9=OQSnigqn*X? zE?MsjF&5U@&c>>5v9#1xrrOI{Rv^;TCjTHBEcDNe)~)SS%Y)-yD(kLt+`^k~2&aE% z43+-=uYdI5OF^lx_AJ9eWo61UX&GDuW%tv*c%Pq-C9t|p$-2pde$K;wdhL2GtGi?e zV`wWnFm@7S07YO6f~KLcj4Xe;e?aZxY=#z z{bj>bz+lKVSc}m}37Hm-yol8;G!^fX7f+@*wEddIJ%Iz$H(@;7ZDsPW!YrnAx zEW|3vg7Za4mlQZI&;t#zVu~61(}9C>c}W5h=*4JLb_1pGgjFh!G-5i_zOk?%!_qty z3OvwKw=p52Ra=bt{)8f-BABKml5cfV6;H(9C2-$TN;JLbpRGUfd~l-bU4;pN*>!~y z86vd^=EC~I2%>Og{wGZ%8o9{vbA20sY z5wHfrB>DFt(UIZ63&#KF9~J8acPcIBC=C{ef}sTZdPhVt+(;x-?DT8?Bd3UPq;8N22&$( zL2{C5k&!tgzs{%<>zsezcIB?(Zf^#2v+kmerAvh2eE0IU>AG6ouU_SQUR8QJ`?oYS zs^Z+d?k#&smRxDJ)%_PwJOOdYPkKGR34UINfO)XQA8R+tx zN5jm+6l3uGpUO#z=@f}iDg~WA)evaa$khDJZB0~ zz3z7c5OMBUcokf?{!2SnQdazuQm})6kgyCoJmH3Mz8}peUzB$YjV2c#@-WhXLEpyq zj8N_f*EaG}ZJq-@8$Fi+B$16+*HGGiuMT@&%@gRj?aecbIjTbLY)0xbzs z){efV!@?(DXpFS#1x=8PxJ=e#TPc5&uamz(Fv{@ue$&ms&$`#X|B4ysX!A6|VSFVv z+G>{l^vx0`Wnza%BT9)aq547%GU(+#9JwjN1+diH z3U%&lm%#;#{YN>nqxIj)8MoyElo3SzI_T-3FR7n25@AGJRWbjl$<&z+l z^zi72IM(J(PVB2Wt!65yTc=XMV8A2Q??TOJS})=aoMeV5H4QDf;FMyr0MCa54+&X@ zdf1^qOLZrjF_Dj1TYb&6?neuJJWN02$cLJC|BNt4oX9y8<3?&;SIF*yM*N^Hkk~_P5VF+i0LmZg1JRkrm<`4 z=mro01pv#*F+VXl%p?gk;1w-4oW>Gmj5&5eUDBkkC05#h2erO=K>i*uzz78N>P#Fv zE_eQ!?)XcG%eYmZ&POqYC7cp^KN6qaM|e%RKIW?sszuXjyCLkCO5M&yJfA9{Y%1Wl zf&=XB@1NCl8*J7(#aw>W1MA(JBq$YAzA>-VhfGc_!J5s)oy!BHK4maa|6IWknHb;R zi)%ilKvh6qP~!vh2kCpUT10*8AZSi-#lUg(k!ZwwL1wEA59ipf*sK@p*TC|giw>4I z{6b%6i9n+Yz0_}7e1os{P|h%@6f!6%YO#+G$v3HwBz1t00b*H5`~(LUsw+XG1Ho?F zDtm56Dwf52Ngz8b1ns5kyvRn)|Lo_~7gVG)eWxD67L_w`sS-ViSP(b67 zj5;Z|_ORY5T}q35{I}raiZ@t6gLo!B*scXRwo)JjE)W%{e_GT%h2b&>pIS6CSZMWLAiLVjqN!;EP}nkn&|F z2wxQBSN*ChZYb5uGJXG{m0^#5?eDKv3b~{TOVM}G0(L*W$h9#-D&;&ETRDTA#aeSS zq)cTO!on?XCG%@;z31f7&8oExU7lbNjOm0HRq9nn@*KdCZa-8Vxo>5g|W0_RFtv zaNG|k|2fKY`u0*RNwh$1W5{(Z#Y=B4Fe(w@j<>kwgjB3e*`Uz!ORrj5Ps6t3Vgg3P zPZFb*-k&RO5CaATNOmh`3BC3kADw+2Bi~nCgosw=?41)jO$T{EyW#qkPFzAbhm}jm zS_Fsa=^0hWMtX0uL2*%8^uLv1#?86;aygT($r-1i?b|gDS4h%~sJTC|3Ya0@EQhj((t3C72~}(cfuyU{Dy0U} z&Cp>G3CM^|BQOis1SKK0kqrr>gqi8;c-6s}3P_^f7&^^Zsgs zu2>M|t&8s(g*>$~><$7?ixwR6ZAslrGPTs^O%{w9@lvlEC*!0D)pI!>A#+)I8MMY? zoaoj}?YpRohM=TJr7oW?QZ%{4$U-Him;vlz{VQUZ^(PE#r=W2E6u4e=N>o@G2`Jv6 z-^ViRJij01H&MVTew}1Y#^jxz%;z81;ElS{EyLq+Zv7_JUj%2G5p)VqG3Tj{Vvvs% zfUv~qodM|9FNyAdn_(8+p5xzM8xC+QoBPc3v}u2>`Ym#A6|IExn_B! z*;X#fsr%?16NTVb#+$9#0or9E_d-+#KGEl@fH8M}Bt`pt@~IaB=lWyPl}R@hUWz~Q z(p1Cu&xkXo5Er)1Pc&&jdG-B@CL8G0zNjb-pz)jzH>K+#YQ7{^8zQa0eBpae`3E`>m}aWvj&25!h!BIADN4i#cy4kF=X2fxOH(@hO5rd@;vMqAm(iveNBDtFWc(^p|-C zzJ%4>X!Fg6hDB%(yngd`Y<#rfacHihLQDj2Ycf$bA1jCIfB%eFZxwv!L!so&mcHxz@=eh*8y$c1PFEG5r)C|L5VO%#4WPwA=_1mJk%$~Yjb&qM zqYD~-Z!9NZJInOYSEx85R4?zX*otUlfjUC?d8j)9Z9(=;LaDnx-+5_D#L4Tee|h*3 z`=6C*30yCR`P!>WrBIkaA4MQB_<$T_Rc}BcBr{YBxm0ALYPzPLI7Y2ZTS**&Cjn1ppWz1(B}~aOa4=sK`{VUy>HhMw)7e)Zp@2!_ z2G;%@>;sN=3c7O;1vl$~8Cu3Ovh*?3MwHIn@3S9Tg5od ztjC7Hh&@HC4dW`pAA(b(OmbIg|BWZ&eKKAPjTP)N>N>3a>@(R5>N2V~;v!%y~BQ+kj4|A&X zZT^Af>ga+=MMD&ch=zmSER>T+ZKlBOcVtHC5Sh#=ilZBws)pmberLWleRT%u!yyfY z-MmvUD$QJn2ZI5=fz0_taFwQg!MK)(5Y~6mKp2r<2&{1J%YXK>;|o&IQ?aHb`sryg zW@{Lbr6h?Vdr|8`{gz4HS(2}7v>Acgq~@>_0=}|eJ9VWhZ`{ph>8eH1PD78qCkGxe zNF@aXTH_t_i|g#Jdd9ebpjA$e$s#h$sCDu2&8Eb+?qa9Od#>ks<#+H3<;A>5pp2QqeZ#` zBl|aW2L}crhQ6vW^(ays)?RE_3C9*^X|#v;Xm3nDL^9*aym|PHGJ;2#KY(FCwg+`3 zvoEpg`Y+O?#vusA08fW6BXBsNU@kWW+z2Yu>`>&UKTyk4hq)+(5_A9%{R6TZO=&pl z^^TS+N3+VrS_qWfbnP@|=`xOM39(h9Z-50+*ntZdA(=-z+Ny$%VblCqq)M@dsQVjb zzKeKnrR|hSwuLmsP{+lchDu@0`H(hKnZr^nfkzBSzlJ;$c|YM;5E7b0PFA;tdWiu6 z6hX)+VetN|MOjty>Q^q);6%mttGt*ZUQsjz&`psXq|P>u%0@O%qkIJWkVk<$ zFM^C1pA84z0|>E58z53T3w~#~oyyBPN7LA9=4Vx%vUU2B<_~Euo&xE3WFPCM&7W~d zoL@U7h30f}&lw4))!M-9P0W*DixI4{v~MOZn7gkzVy+@EU(p03`iW!tY`nqs*tFQ^xmy76 z2MOTl7bzIKyC^_v1_^E-^u-d5#Oc*g;0@zeXftB+C3f=IX5!|pGJwLy1cF`$)&nq$ zcikbiG92@_NmV^8cyskEkmM<9zT%hkm!a>AJmVLoca_?Mfizj$cX9>|UX5k$ORL%p8(+@gxpveMVB(bF$il|R<4xc{@CMPIlg1GQ&H zV+&(Ats2A7BuqnZ#i-gvNvHqx9oXcINo+n_tZiDVqO_IuKHnr@>B~rBKmTH9q_?`>dlE=;@yNK|bUlf#UODHNhirbt|HO z(P%UNmc~DDr%${0!Z!()}RJoZbgZa zzi_nzfOSS9uLn4oYGG)ws(~^V5Mj~3MpFm( z4i5`R7!N=bMWk{c$ny_SEeHxTOVK7oU4ATzYzi~6B(hCV=G&b+$cQD(^>4x4pG;@^ ziyDxr;{@RtrwK&ANRRl781a2j<{Rrx9JWQ4FR;fC48S2)JKyNX2?3g8Lp1tfc0DEp zP{={1GIB|x2*?2za~lyCQ2F?$AgTF~fV>Hvp35c$$9-2C|KWm26H#MBR4EM(-^dQpg4}nfq_{d za66s!(d`9uf2&f%h&&r?OK6d8WlCzd)P2$Rpv3)$FoBnE684^D77pxJ%yPt5SqW`mtdUN5&F=UH{+s#}~A!r{T#c zyk;9D6=NFY3B}?wJ+Gamw#2MpFGf5kuwT(*h~0K2E~0m6PLC2U^6E6LNuDPDl6*6{ zcN@-K%Tnkwduy7>rNvh(jGi3R^7f$M$0+0-LO&o6z(W68#?ZZ#4pgldHx%W#9Usp| z&K-G&4{87tgh?_npv4pd-;8b%klzLp+E7yME?sXmH)EvZ@Q4Zr{|HZsv^KIJxUdQm z%z#M<`Yc+gaplG+{bY1YPb(WkJtd#z6KoC?r=I4IK7D;lc^q8+qO4PzS--EEzF$mJ zPR&0?b-?JryPTPkb+d43qh&jO6SqwNoaNHaE@}kG1Os3xCwCS;kVt^8)$&QU^Y{1X z2;W>kS1`xzAhU;wSv=gbce)zyKQ>uuM1>&ACJJ(>ZlE+q!okNv7({t61HbJrE>@~2 zjhcc9y}Oq#uio@4P5~?pqU7*zb)9_=0t~|Gs2?=)0*Qp`ddT()0%1wy_UON#d~0=D z#-|mVN_%zQ|LI+wnSmyqB~(#8Yw>$_X4f%nIH0^`2}ULjE`%+$a8c|0{#vw~b=rpE zUcaD$<3gU6@$tgz&zITDoETB-xgE;Uw22gx35D6Yg2Lw3WOfPl@gI{oiM#U3iB~6~ zaT9-kRpbH{-~?a`F?)rFB#C~uN$N!oAcR#aU~Iq1sk;q?g;F^ETroP9mZ0^@j-swT zJe`wx+B4^)gfa&LC`Y*pe^99A| zYdll45k5m8Z z;;@|X?DMB~qq?_Mf8WR*P2_=!+mygJPKOnMC=y&BwGtybdS!~PS^xQCg4vls&0VS# zn`Q;A#c?b=?sD2GR$SO545o|IwTYx{=5Omi)wxwtJWSYuhu@aOyS`rqDZXKE4lW+R z;{FDLnNqN8s!m=Ng5T79GV6$hCI9rvg+>?AM5XR9p*%*H8~#iy*8$kK+)m; zJwUoa960$x`54EileIKj$1CLwY#n=?z%Yyg6@W~MGaF5^|sXI+_BCpgLY zaubjL{KK{{C|!T?*^-?~M>KufFgO82(_QhRaF*HuQr=mN7s=;`e}TP8%(8+>Mf9Eb zlXx3y-_i*9(?poqtofTNPj^RpaAxggpns>&{!;d zRM;BLG!der3c|PT?H_5|;aTL4W=s5LYxd!n01w;hNuOZ8ajd0EF_%>+p6Q2Zj>O|Y z#cJI|EcVx>F@1CrTOrx3xwSUJtYNIhzn4`x%&poENlWMLe~l$6zV4wU8#K-jlkj)( z*(T@dRs}Y+?MG{7pdAjd(0kgwdb>*NtpF*0mO)rKpX{3_#%h^V1H|eMcDbr>MtaP| z%vj>qkwuaf##NhfYFDtmJ1l5)nSoO|DAQ8WNn+??B1jGn#`3MFfk2@}>MWt>1I0Rv zCGv4=&i1eQi#~^>MsKg&bm-)RdEXGdD(>~3+W;68mOyFR@2TY=ONYk{-yt;AT!+ve zLr34(R495q3t`OQnuP`#y$Rfa5Tn146m+N|iLiEqf1W%f<$@X~<9z7P8ANLA_aY^t zaPXEfd_&hH?-b5tj@e8qf!95;t}@=A8c8Moe=zF0J_+>)01M@N^&Rdsyu zTcy6;dXo0t$xhv=?%n6a;0XRH$y_sy5b0L+!9)l^ z?LProc)5PyNg<-L7k1!Tlef1GMv;BSVdKLfwm%mv<)8DutT}}nlfo_fhU#a#`$4z0bM(9OG;?R0$U2EDm-!WmwbJO&3WBlYV5C;+T)`t4pk5AgxyNFPwI1Y z04M}`0QuLO8q$r)ZZMItlYU}6hi%|q>sEd0)6h%q0R1XYCoCVlj9Q;IxF#P zoG0c3dWS28s1iJSKJ*%rZ|QtblZm?`#!W*E39q@PNR+|jrvyQ%n3&-Vn#)Zql|ymU zf(LTJ9I{0#5Di{G|4E1}-f&e{u6u+d+$=gaqQ)-vK-WUCxzT7yB2ymIeD|Z$8=rIr ze17a$mJX(iy{hid@L6O9^rfQy1^PfUeLY9LX~wIak%r)X^CYrZWh(=~7XfB~^vO-G zi9>~fHJGL7w-&nvHNYw?=6~Z)0H|0=#nWBF$|-~<$29aC_nB?3H z;Ahs_Yuvl-%5aDE+dsK3aXE29G*bb3OI_;zvHiLTiOHq4_dH_U!$DY@bDR}3_x5uH z&$oy)EQ*EQR5{+B40ECjM!lzBjj8L%zqWT=VWVN|Fkeb|tN;u`y)B1xucj6y%ycxl z1YjBv%mZWPoefK+KYt<&@ zYXF;_RlKRm#J+52IV!L5KBHBkDme%a1kR<_uT11NQ!W9c8pDA#E284*$e`*Bx}+Y( z4btjT+-802g)cMfnozNJ-->uz_H3?>6&jRYV8fqy>79NF0!EOPopOJ@{I9%}z-!95 z!cIn$V4r_vosTz}5fdkfl75-B3OvTS767_fQgqI)yH`UVN+updG3v{>+?_oXLg*)^ zIA00FU>L4N6Q|iyk*}!N*}UIN%}zGMf&*+FzK@y4xhsZvXwxEB#1V94rm`%Vv^m=c zK3Oj=PI;C8*7bVN4ic@>4wJ^6R_l8g-hQ2%eA^tNSu7KB@66uJu26aKfd8&AqX&oO zmZ`Fx-KH%J%_syQ8UR7))Eq6rly)BA&Yxsl1Odth_!O!3$*Sc8#8rcHS!Z&p9>F}Ll6(pOZmwqcjB9xnGWB`ZU3B2m1kUDz2duzX33 zt{N}QE?my|_{UuWwy7Pz)pl8W?~MQQ=nMGrmp%*sflN`2llm>?*-Cqy7nPL}xE0QS z)Q6x70Ply%#NqS0HOf3Gt1}3X*?C7v0SC{P=gW?YjB17M%CRg7OqEx+mwePsABo0m z2B;_`x`TXbygu;x+m*s&zaAU?GQS>sA(?Kmn2-n38-Lb7nHxo7dG&vn`I--`jF%C2q zW#k!Hn&egTls!2q9dQjRWU&*_hdNjxV)rW}i^Lr6R`nur;E9R0N1PW?zB<}k-Wgyb zfCB(Py0@fak!kRTVRtmx2J8rw;vxFx(cCzbLm19FDT*dm1m#SGWRlT0lvyGo5v^Sw;2Jg+0r+O(d)4{A1Vl zN!a>4^qEsu?#>4*D_MGK%I)`T!aCuWyX}`o1t9=X1OxzRI%lW$X%6P3jVV|90$3zM zQ4VAj!L7c4JtABMBI^I zro5K?TNyUdqbR4L8rQR7UeRv;`ffiWe*qwK>G|h(K7zBPR+KH752Te*vZ`Zz7n`cg zyBSZ%XY14BRlRnHq3FR^?>5S%=YL1)Hu#k_j5S;1F74^jNTB8A8dVwqd@wu{EdQ^q zNlN3bk^WX&T&4vku!8c8Ba=PJ@Swr*2cQuQ)5U3D0*yt!<@JzbNhu$msv%V|7MC$2 zh$0U>lM&dk3x1mxW=d9h*;)FGUsr#>zr~JvtL89S3bV6vxuIfg-cs`FP+}+5X;Xii z7|$mr?r!%^bI(80U5v>&wCjI8@T@QB^jr;dHJAaOgMfTvNkGvfY|S=2a{4bKf+0d5 z&0EN~Dp=~idH}4WZkf>v!b2iqOcoNDbdo!;-f~5BP6I<=Dt3^rZejh?f?@6VzfbcV{}$NKXfnRL z*ytUtng@I8biLYIA?W1h0u+@`r4X}!HP8@AOAsz?zz86yNf~|a^8@x2$dKpu_e%Ya zWf~bl2>2vXhwfM=nrOLMqZ#k2Z{!_68V=J$=U4P5kC8Z%fB$FDfbolLAC4cE9DGX8 z6#jwnF-7xvE?M~yv7OC|%&vF|WtZvffBxsmH}D;7_$RIN&XGyvUxh9mqD4aF| z6<9KPyW6_PsTb?fA$s-lK z2*i>?QMu^`MNP>gNQn8guma`P23|xmjwzPpx-Kc{KE;4c1@0XMhCay104jqdhr@}n zNka{0G?s{n3pSeS?#75hq=LBBWMqUX>~tvJS0&8rE?aHtLp#R=fwRnTX=KHyHA889 z!xOD0ON^mia{!nz00gLaK?%Sk1DnI6fq@^(pkPB1jkus-GL0FYo9H~^K3{|6C1%{> zP>~ib|9wuD>Pj}9Pc8`uk=g7g0=qqh9$v?XgUbj-jTI;?U0bF_U75j-S7LQ(wHA3E zDA#=?fiAC?s{}MZ@Et8%lg06V<|2FLM}g%;nJrFf4<<*5vU^DFWx~I9uLr;qpM7A; zTYWYll_P=dRNVE%CCtkdc?&@JRqGUQlRniU=fNbv{2B==nhvM}V|SW}PE=LP?qb_e zP3aW<8;N|;CCu{HjUtM{Ug!^NGb(HUDgW|y%5*J>VdyTnQeu20o~XiahZsNB#D4Ox z0l>b8N+4uivo|oBz^^PiG!~}1Z#~?Pyhi}tOw6CqD-&pN;wcybXWp;K7%qBnpjuEO zCgfz*B3D8wzxx@wE$5(Eb!^nm=h$$)mTD-^PD+%`ojpzvP@BqvN+oS`4CeRRNh6RA zA5o`_!v22!SAcrhq2gT|$4@Yo$N~U1!6>}Pw<52;u#eIUo^Aq9L1Cx*wgF{wt+>in z6wsa9lCsWblv^0y`Y*_bbbm>aO{f515D*fM>@PGbJYY=uUXj+z-(gH`k1nxUBT&?| zQ^DDu)J@s?JT}>yiM^qI^0#dO3Ka$bcvv-qh;spn z?Sm}pkcva{9F@Z3K1{_j&DWElDh;Ofqd7@Glyp0@ELpoGs?=u31(l?9I5DBpjOOxz zADs2Lo1a#_&*=Q7vOF>*>xShREm7&Rn1Dg7xrdg}%y&JzkeREGKjK8%i1>zZ2tY{i zuqi7-ogCl+jwQRW+4%4SlYyC7lR2h#)4xS>*MXwxO}iEL=B5AX_DgDg%N~AN zNwVcHA-$NRGvO411e(?5E9UQwg}CCUxKdG8@?Ec6j`Jmnho6Yiq7iFAGD#fE_ClxQm^;6dDt!7ytQ(_xx8@cFxm=oyJST zO5QY}4Bb>&zN&VfWIXqMzjR*F9|6U>TrO3GSbpNgQW=XgDiOsoCYAn&^v2Tix)ba_ z|N3#MN##;*-`-xRtBswTvDp+^MzpZ<_ZTpfFWbJYRGi%dz&#>>{ct%zR9cdh6A>nu znM_0p5)Q-UuW62Er^SVI0Dcz11D70xBMXjv&r?`N$3{2rm+C|l9pj?4m_Q2jIBsdC z!n6+)bf7pbu@H(nyZc`F0&a?@=OH`>{W^jQ|m6 zQNF#S{Qk>gt3qaobLQ1*E=N@qb@HQy^Ay~3CW1B`5^ksh z3C_pZ{DDl)gkWPbjT@5i2;nXh7m3QfTIYECenIH_^juIKP9O&pn&4-zN)?@RUemEW zvE}h{|Iix_fVvMQ3b_LdX_`BW{~!yS6jO+B+T8P&rpkb?hU?gzf%G(HdCk0KzN~R+ zubv=#AR|L0m4rtqb)A@iLog1pm;*>j&BS8;UlwG2L3X0l!d@^GCeIKoi;sn-SN--k z?`7eXDw0j*G=XqVh}9yO>kch%>J-7ANN}17z~t)-Z0^k*7w2Q^?TZ8}nfHPcM?$Yd zC=CF48<^hz!_-&BMfFBq4?_(-bi)h`-5r9`3|&Km(%mVd(%s$NDIEgRDcvOvN=qsr z@bQ1Y_u@U5=i=O)_1n*S_Fj9fnh5lF)zw{axXFdbwGO&dCPr^Z!=Eva?g*Q}m<{#b zO1%>_3@ zn40+$WnCNo*lJcgKD9o_zDv9Oi4>iRk_@0^SMuC4uXZXX1I$3vVHE^czm9{~m6h8a z`p_!1r)wc$TdnBP;;TGw!oM?ubosGH(lzLcI_VybSAo9& z;QjM#sk1aAVd4@DDYujt79*B(NY}u4mgPFkpn)Snz`m2KP4EunGMe z*@+Dj>|Y_EL>9huux2cpw%NaF;{;Bk$#=hvhjCEH2A+qQ%9cAhwL*Cq-n_D^svF?a z7%kswR8QnPAner>YWBn#K^)9^I^5R=;&+wo<~@5yRS7sE;}|Zan*C~im6#n{D@6XB zkhYc_VxXzAKEo#Fk^i0RV+93hfc zz&LzH4_)f@JREBUn7&g2dzi9Ycv%e?7-$G*mZLBt)9y##X>#*)Y!OV2C~a3~exk9Y zvPV~KU_;lM&i^>x&n(^`i*z|!8WlO+m!8CIHjpg#wIw~}W^AsIe(n4 zcxi=dh-b^xNHiE=d)kF(8cclj*qZaPVcc+4iTM=Z#yOi&}cFD5WsDC{j3k*>}7<`199W%8o!-y-Bkt{{u;D9N7CB?}qt&*ov`vB&KOxUNtkkb4N05aGxK*LdjD7yg~+k+Bj zS5Zeq--jeP=lD*ighX>OhcdOzrqz$aOS$F}L?A?|Z(Gx5rZ>_h>61pO@8@I|n*dGn z<^0$_CIHBHSKP0r5cw(i@Z8ApY;0M0n)(CIh(8H0FH*RiqgF^S3sU336pla>w7?DL z`)P)4)EP2l9et<*bqS{iFOno-v7frZ9Tjh-C>cZVMsTIaIgI6)$@aHlSgGP=PBuSv zXEc*u^ZfDgm|Ado@jOSgi1lc1CZFQWc?*>OUh$d|NBaSsE>md?u+Vxj{FLv8Cn6Lx zKg6;ZfC9xi!p!Qn)Tyn*iq64N)~*sws<7MR*lEE zO7f33&xN3QzER@h+P65-dq{NS1(W~>lhjEGe>y>6TuJ2XdRie_MQ9}{E8V6uZp+l| zds(L<_O8d)_S71uFQe99M(bj~^2Dx%>8GDfl_D)n)Q$f9+5I{gUM+Yt_pB&slu6$3 zz3iu_zI%&)mG*|`lCbJq4p9X`(OYHae)qifM02od@bvi1)28kbQ{r0 zyeVyw0T56u9gp0qv*j|&F^G(SupkS;iWz$jci_XXk0JU}XeMWJqE5BJnA zQA}q35P8EYm@1D|B=G6Io9)llB{?(f0e)kWG}n^Rz%V@aGV?uIf?ObGH1Lq!^;2=S z5|$iwZ;ND4I;^kPw770U&}n!x{!puaBmj(tp#)lU6(-WtR{|xzS@>r90~3M^lKo#rXQ2ox>Ctcv^0Y#ViNgv#Fik?qI)_i!rMsarD6@p zCPF_^K`WK%xgNt~|M~GdfSbL77#5;R^5nKy3>T5m11)GvXvi2mxbQ=3xC9enJ}jW< zX0m1qL+-a1MdBP|5gTQ-v5j1(RKMIb<`;}sckgS5S8R&Aj?Zd2Cw6T*Iucr}JK>1q zE?s_ZJ`en`e7nT_ zcPf7RSnD6JlBN}}z- z0P3=oAa1M z9$o$b6a|yeD#4-mgRFUQKme5lDNOMS=5f|R&I@acxTMnhEyF&7UBKIKcDz@KQv+ph z!>;&K+p^MiC_~g(;&W!lmymwFkp_=4PE*oP<`%J<(CAyz5u~wmwCG=DdbNZ++bD2( zS8V4iUN=v)Ml1G{!yq9^`B_iY`&-4cyoU7+*_CW!kp`E+`jDv6q5>ED#6m0Hw-4G~ ztY6yYbP9(S0Vetc=qrdGuWh6NL{C}F$I%tAOrgB=mv8Jt`Ll!pqc6y?^s$ z1sjxaA4i8Q*Z$6Y-AX#$sY@aM9Y5IQ2n;EpQ%^bhiyri8O}ZFIvSGA2P~Gz3gyVi%J*TSkoP_06TDO<2!+yW+eB?F)j!hXj!9m{ zbHDHBQ}yPxoxio(sn4lB+q|{ArAx>VSQ#;knU&e+tUdcG&^6{`Zu&%3ocp;_Zz0r9 zkp6>r$*^2Xt<|#kZyVE82MdLF7jzId<=vLp;r)i6F)tJ227hldqFN80iaeH| z_4$<}U&^O$!2C}(>kQGNV6)w<^1bMl(?0=_{Y|&~!a)l{?r_2TVOPA-FX6$RiXr`2 z0G2uHm+3+>NZ`r+UJ;C2pMf|I=m86-qv|_kB`%|&phfbS4z>uE_@lA=y9s%WM9Zd3 zhE=U<_RU5*$1HT7@s?RJgc#mc2K^K<=m^jII~(n!1OJ$?iUS`%g*UpM=Bl*@e%;_p z&a6kIWtvC55x^5gbMEff6g{B@-AS^VXeR$$kFJ!X<075=D8!C`JZa$8t24A!DqOFZyusK95EXw>KRs6U$+7tf$E7it0r6oZxKafCxp+|NM4g=S& zu3XErpBx@vze_Zno%JehcWH8lnF^T2QxXgA!pVCYUK;IkBqYi*$)BA*`UD8$WcH!QCr49eM-ax-fi|>;DY_}v zCw+w8zdaLW{|`UY{>c6E3%(dsHvTL}F}CzoY9(A+)y3`ww=eqP;@F(o>qH@y0ena<8!-l91T2%i+^;+_L^i%wc~HuOMPHq-%ei|rY$ zCsZoqc#jGVWYm@}DqQaSk?0|}QHich-IQ>?_z%ed_qXK$8V4aGkd^Ht~^S{dp-Q=8nS!RjX<;fJtcteeZRrPUcyE14+KqrQtA%vhsUJ1ORIao%SSO^ zC&K$W+OuzEi#mw{LMN*Uh5QVxbpiIb#`=fn2Ws?;mfJ^>H^~KrnQ;+JNJvDG2VOVo zP7+DaB){JY+E(ATYlI}1m0YL0@wnLHx^=|FV1$CrnU9S`WY3ag(jRut+p~TD{JA>S zz1Nk6!YLeO(qipENUn|yIp5X-aJ0bsmVqGxhkbxke(v%uBBm^n9BaxLiLd0 zgdKL!`6uzU%Jn1phA>mP^M5j2HhmQv2BljUtg)@}OXm#NJ`|3g6SGIR4x8NzJRRdWv@_YDBz}gBAk&{GsDTEI_~wrvLKC<-1CK zPiXiW4@hYV0&fiG{ey!}>65Hk;g=C1`So~f62c1x2T23Tx$~vL z$a4A$vEd*|!WR~2KFa-@M`64C7GM9@fS>qSf&TkorR+2H70a5<)!)!pbFi89wu<0O z_WFa?z&fT{lN}9I1!62Z_kof3=kpZ*DACzAjY*^tiupe)v@P@C$}%$K3$j)GYwxcU zb}_6N86KdkuNPlu#xeuqrCPQn&k*%)li2wXxGTj`M zFKjc1nMDs($LiBBFRMC^zlp#S>$=w!^`DvlCxIrS?96%cO^oErNooD*bl9KL9H<-N zHMvLbQ+I9_(;Y2&YzlPYGqexkW*T=Wb>C~4PM*{T(pN@ieZJiSM{kzNZ^8HU41eJp z1I_ep1QNK3t0h1vG*~K{*V`kz8c({k*oL%N+-YHpoP|iJzq*pd+=@$E7vXQY5u)f21|ct*;%8-$8Wea$7GKMrc+3)s12rX zS++dJcb5*T9p}B*IaF#$f`;Ag*eoq${w1o`hZ4OnG%Tn>0`y?##`!~;R<=_@?j-7j zN9YllUuLDvE;Fq-C_Ziz+a5^eJ(3V)nQ{zTBt0;g+)p(HtId=^|6Xb|{}#di=3Q21 zy?Z>n(mkzzl2lx)<%pd3Zg8rmDCf4daw;X2S5uI)QyTL=?f47@|E(l_Iv5naCAKIL z%7rEapk-VFDgu%v&C$d@)RFP9oxqtv1A?ZwJja9%39nU&3|A0=8w6I3u*PyhnC!Mu z&o;H@CgwSQmGx|wdcM>X~wNOEa~n3#s_+QdFwfKi%RRTyo0io zn51UI))W#BL_R*~%BWk|_Wb#77i0TW2H77CNCf!k_ZE;%d8^P%f{z9^@pswN7&DR4 zuCQoUMgbt3D4O7ky!LvX^hB)t-}y4@kGv&6Z_h5<_5l;qz%nQf%)zCiA~vyoM{nDl z3he~LDke;WaA&q={XH6}Nv4LINM(Lc=KQ9eJRzWe?DCAxoK396N_yGov&;YvSgFU9 zRO6W$d1jF|8H+6B;q~CQnx407zw}nTfy5G+LJX| zl#HDT&p#X(^?Gv^)SyF_L+=*cRaNV_KE*1fXDTGWx&Kb#tLwopg3nk=nb)ZvIHm0c-yE-UrD4X6WM1&D7Q{Sz=Q|vClm4NZPWx>uA(%#H@sD6Z zgB5X2So~&{01o}E|AB877(O2j}-5HD2wb8_c^(#k?#s*4SS=!X$3-5jBJ%Y!67ja&;<+Y=~V%&2B zzl1=Xo~nAtPUo-Zgs2$dBV;f$Ny3!+|K=AD{-~c#G*4}}K-LTfHPxL+%%wOQcU=U? zAoi+mA^reij4WPJP=EUFH+Ai>*NIBVN|5p|LS75XyI){mg-HFjTWKD@dOu}GvTzyK zB#i2v6WvrLyr+=NZTRAT_xyh!A-1rK1jFI~`|2su$(Y@T`8R-@1TYN(B#x8^=ehN;yte2{%1l2q}*Sf|fg|Uo`(UoePl(x(gaM$}B0I zj}8MhHKwOYqQT`);E2De1g6B4VnBJAiF?o(2Qo?$4oVpM5z;W)AQrz)VFLgOhd)b@ zmcd-Z7;Bo-T&nyl1G-o?Y`C7K^dP!~(U1`{CKVF}$+k4((|C;LJM+*fY5jl)Qt^dr zo$<)>_DYA={FbxOqvwZdJJ4qzzCcFgRWg$@W)>DFbqH^WYI;!KTM5bDIph@fA}NH* zr;j~K)D;A~HLv3|pkbz1$f7Li(84%v6k)lyDTHcs<+hBV)z4-U=fwLTr{IsD$4^89?5%{6TA zHqR87MP)Y(ccokiyAKo~U(SGVZZc|HT?P~q$t`P;5Kj}{I`A*p3C!wpt(73~b$w|HP;H3eM3~7Qd6=z?$v%O^fNy@G%<{k>Fu-McIvJPX zu#Y*9DDv9PsnaCpL0e<(sox-%QbyW3Eb9lo)&A(eXG4j4+dz z#sKyR51!PF2Ieq8(zjKtfqM7c*RmSfN8tN3VY7+@%+Y9dR-B&b_Sz*A4kdQ3ae>i? zS!;xcb5qL)yQ@P3dMk31q*W;kxW-7&o}%0(3ujFap`F9eK{uJ05dFdb{JU2D(dw-i zep+q;f)wnzPMVO2Zqh7IV9TQhDb%xAWMqfZIkWEH-}I=$eBzqPc19 zs)9>A#ckOCyS|W`%>~b|q zA^BmGpymOT%Yl0N^KfiWpB?%EcavaZ?T7-U0!oc-t8d01SNycutWqYEXvGS>ZIgJ{ za}L(Zl~*r%=g>myQdieo!F{Jf1!)fc@u!h8nzPdvXg8H5-S0Ew$3P6=7}XvIxBL?2 z=tdS-|KPp?qnsqq(3dV#5Tr(PfYSWN%k7)baOu+8#)UVlg5ZuVd2&<)Q8~K}IVkS= zXX z@Rq*QmQ#6E2dh#y}d7o8OEwcWdQ-LLTQz3G;W>~Uy`$>4!nl;WRnu*P>Ar+$XESc zRTfe4$iGU}azITKhkAC9$Aa7NM!w$FJX&gINuG)xZhL2V;r++|PyA5{ESDcxIH%PI zebr1^8;QHp^kaAgN0nk7#arwC!4@nkpN4h`1DTD!JRUE5&mEVwRK7iro_j8ofY3p} z=8XP>fnNetkW6EQ>$OUHQL>us$ym1`^#_y7AUUxg7CF&^KXm#AsYF)CRZVnJq|&q& z)6;g%_iAg18@SoBEL@D+e~c}&cDPb z?NbQ3XUyu{8RGGWk6sjmzK>o>Nvx1uI{s3xw{Z;Z;{Er8e^oBo>|O9y+#v7A`Q5H_ zx$ac=f&~#{k69=}n;apDV`HB!M+XDweRQp{g#}0t11ps|`CUGx=SJ* zaVJ+;4I=L{B{zqPSec~bA0QIAXlP`u`vxr8iIVHpjg!^v-}3&&#K1S2TguA2^5!5Y zfL{P)V64qC4F@ANT;gKiY8()408|zMxr~LRs}>vB*wB$F4!?0+k#k$3h`c|iX4m@| z@Yrr-OXxF+?3LVvSVx0dU5St0QPHGG+`PX_ES7BgY1PYn_FV&ZZ_ml{!Jz2-`{MyZ z43aSJt4UR$`L?5cB$(edhUMXOtHS%Ro|Bw!9%#u=pPOS%0IVk1`OFC05j3>W)79%fvcp^TeOxl2dz#)Uc!63vf z|8EIx!+0!0n!3U^}H>hFNQ*gZ&`z8O{SHUWwT09jKX8DZ^Bhi+|3kCh4|4NZtF?K{z zG*3q~MBlAC4kIXDh%dcio8KitI3b&i;GXvRxP*GIsW1Rdvou`glOs!HtA8S9p>b-c zx+cc>t~7IuKgu^MOv>_sdSfYaRNnHm!kkC@@1p4a%n2%ezbF`&ugy;F;^m7ba^!qm z_pWsf_iY+Po&_fZ+$RMn2livUNLbj~;KfPOY!t63?eQF+LLis-!j)9)-0nU7VOYzh zvU09N_ z+<7~f9l{!=jd^1i)(0zI#Ex{2a%J0Ml8VZ~vn6!W@^5!2nO%ZEzT=DE z1@I+ABUmTDnAf0OUfSLr^XC5Wx=f$lw|CLYH|ml>UAqmrafeUhg1Sa)KhNU0Q}LBu z8~=B{T=}CM8R|W-%PN|ne4VhzenT+oYIxH5{qP;(@ncwq$3u6~{gDY%YKXTGzboYs z067#2Rww#}t<5SK96J!db-}R3n>S*b-pHyWF~Ip(Eq0DzX{=e1KPm#(qkuyz5j8tG zI?Ns+m{q`IBbm{N++PmyVm@0BmwvlRD!nqHqa^apfKG!%`6jFE#BLST$A^$iklPmN z-R}Ke{#7_M4EvsZ4e^C-T`5D{{EbiO@mr1wh6LBkcpMpGNp%RR?6I;A>{oPdwY9&K zYqUjsv%@x?qPPp3AHGrE(wlXf&_{rF;~ z__X(Vd)D~bWAvb3u*0&u77)SqqH{5`m}En)8E_^8&>-;%dU6NztNDjS#jztx*x`st zM4^?nwPc@nxPX$D<7$GFZnVn3K`^7mK8gj5@?eYD{=PUl(nuB5lqqEFCt#2&)}5{} z#FD9&)g8J*4&_%?pH+~V&j_#~)^1K>v=FwS8H(e5ATjK)-zhpjFi?G6V!#a%N6^cBpGur@JZZbfZf|0n8 znkf4tG7BzMMsTA3s}F1bC|)o5P+U?YhWnLWmW&bj6#>R4mZ$~UB$c0vGhwDk`O4~4 z;l-33c_QlFb$}cAk4zmhvQt(J{#)m52FC88?2V@99}5y9rk2`Td@$kxX=E5a02qRf zflPzh3m{Nt_B3Q7%R+fqjvre^9i7#5U8`OPdZx>W5@~7yURhWI*Q$U77U6H#>=06p zQ=zFfN|j-|aMA>v=JwC1Wl=Y!pFWxYJuX!I7Rnv0UP)dhvJWQdmsyx){;kK?OGtL&n!^EAc1$ne20fBk2@WZEOPG6zZiX`x%lrjpfMR*ZK zm>}*fdne#9Lp|S%&2pGgM<^eImb_Kbh_CQB)BTS_xCMSh1fD8AXz+<;$#IL zZW!8t>3BArn+DS2M&W)ky^@onfF~HJ1e|pJ5&xsWy`<=g=;ClOgO2kWrrQ@O6c6y% zh3%;Hn2lg+pzp@L|6M&WOZMVjKf4}E9a*#BCz~cJ7SQ7o3W>mU5Rc4Z$Sh#1 z_}`}(=%Q=fkmK|zH1m)Ahsn{Sj!tZPGbk8rg+ib~Woq6++1A71hoV)eBj)cEe5eqqMh238Q@IBK1AVI3xr z*m;KHuKORhpq0IOWju+){@;B|gD56@!{HYSMfw;W!eoI7{I#I; zK_m^+;Z2!hHY4Gc#7x_>^U5c)S9jsfER|Rt-{fP~?vgTyh`^R9!vB*Vt>$pM z@BYaHBWn6A5x0x7+JAeNe&~F@$S2BN+HZ;x*M3lbTE@q(hwSz|$sE`jHVcB*Br|hk=AP${9-Xrgtk=2+IjJ}i`f)+6SPtQE zCnn|ZI`F$NN zD~?&~+j9q!W4=)LZ^FqU&&Pfnq)js|_i_YXf|pqXd{fm2PtL21Cl|_pWyX9ls5>aB}_sOE8vZle$7f*iJi@~$T&4+lQqSW6Q7WD(c$ke=As}?;%@U&MG!CL2DhJC9aRTDw8w z(suneY!g#AQPR(Y`Jt7@Q?W|fw46b*2wU#I`f%ru;{OhD%r3L)HTt#Nlx|MrM}S&& z=lAXH)JpMehL5ls0lZ+P1BCm)H)q{Kcw$A4W_-=Cs))z}F_IKr1*w7KhQuraNFwKB zE4_VrUae#e)4}iOKjK#EBm*lD;NCgt6vVGj*%96bmgK4Y`n5JDiPdblZt`uG;pk*F zWkm9~-rxP$ZJ0qw65QvlU5A;|f`daBXue(nzK;_|rw9s~>8&()8ALElD0VKC93dR@4?%kHA)9@r=jmM2NmPTiR zGZJ~4&bLsgK}z?~F8-=(@UHrnDPeo_dA<{;>k;}@z#X65!KK-Nds^Bl*GQJqL5LpG z_?T@@m)GL#$`t?bZ<`b?ez?Bzsg$H0(0t#66A#`B$6QnL00(sN6cb25>H?D-R^XiM zhYi^N+#_Tjyn&~3YPgykKH@nZ|1u`<)6$Hy@H3n*E{EbaUG*IDTE|LQnmhI@`ddAW z0{K6M$iM;{$gY^YUSI#{c;(@#eD{veG|v<^O?K_m@S)7OW!FnlZU`pL={m3Z#NNEa z{YU(}<^CSk+VjQ(S+|dVgn|?p7l1pf5vWWn6)3gea%e`k^XdQJPf=V95yyB^_YSg| z-KGa=1S$aLP{lS$NqBXH#%n{H@xTw6^I9wTyX6KkdCwQJb5> zgN-QyrDvD2pUJ(=Z3eYW5Cx*N41AmzrVJCk0NIpdEBcj3j_y;dk1R&|$~qnC<`M71 zznm8UM<`2BSDlPX(dGjtWtsx;`sEpfDW>2VTou}T{9o}J^$Gi;e^s+nqiiR#s=n9N zo$68%!^Gidb*!9D(#5~D07DapWN{T;wOA)ItLm>Me)`=!Wu<9U;3ESUm8Jd=6G10O zr#*<4#R=NlYx|Q+aNn7F2H^~=FhKhvxMOc?esK%iavx zcnGNfa&HG21;M3R#_<@j!jsVHp_-|N`9)QiUywqUUi|p~K6P)?HyxR8vlQxlBS^KP z`&$@YGXV!m22OwicOxbx0u7Mx2#DxpWHpnoDH8eFX|0xo>#S^gK}iSN45s~{kL?vO zI(_sreH<}#UpdE=MP89aXe#0Za;#l}yroef*3O82qH_SpC|c=|oR6{v)4yc-=8Rp| zA6g7pqfVX7A*aIMIUM);PJ5M>d9;bfQAa*VYWp94x(Md2iO&{8+04F~U-5C@mIis~2TY z8Hdo|Zu5C3B zu0mr$j59E_@*Y!ZdP8i)sH)2Vg zS%Lkh>N1;6w7-7=@Si$_+u3jrH{-fii+_F1@kAi)O(X%mEph=WSQIlY_dZ06cC$-U z{d+mDJPWfR=d$0D0AaL6^qg8;utW?f%#5xtU(bsB#mdtVO?K7uG*b%PXOc}GK_?Okx@^<2 zk)T^J6_Jpqf%aE|pa4qhwchq+m*m@(rG-OX5{X^>Yl`ZpFV0WguMUwuD4_rhY{i80 zqs(NGrbIB9_lURw7kRNnbPo|9SBXf<}M~Af?PSsu!~WZ zcAk{`ykYW^Zx>=vvY4<6;0o^W8oLt>gvKvsXee>3X&JX?l)J|K*Ps9Ck4p8DPs$=_ z@HV8f#xmTS`XWH9di$qo8HrtUD8u~K$b&o$Ll6@Mio`Bu$uALblfd}3J0h)FRJ@(8 z)_+*U)kMc8R031*?AO;^iymN&ERqCqJ;4OBD;X9%k}I_gw+>@#yg>(N$=p*pKVImA z`L0DS+Unosx5UJGY{3|k{(U@Laz^p|a*XC{ZqN3Q$?8sGgu=l&C=0;D(bd8~2}@7i z>ybxgzGn}_0G(g}ka^|vq%b*pPWRaB~g>(>EGNlLbq)b%DlCczl+q8}r zJg>|Rl==nzp+#B>@LI`w>ZfdkTRTpsGEP5G_!uk#0UkOl06`f`A5ADf;xoMwDXA!& z!lv?dVA3lzV%=keMa!NM-+GOqdqvf1GQMi*8jT@i$gD*CWyPp$t{963;>iK%szF6m#%I{@-ie-^IeXQl(5IV2ri86Z~BGEM4(`(+8DqP}jxKJolrNwSWS-Gc9#wz(<$Q$L7$hhXG zAxRl!vr3g{Z0+;O5X%X0P~uwjr?tnmt<>`_(NgP`=f4xT*2@aoy`bz=9Lli^!yFoD{(xEuCH0+4do}#rn_2z#<-X(-;a-q-+@tjPyoV! z+v5ZN`?SY)ENVishQ9b<|2iE1BSqQ}PO5ewYO!(O=l|;4AAi(I^Z8vv#Vu<~gBr`Q z5~2w|!0XkdWR=%t##b6)J9O}*I!w@WK zzh_CqudSYPe$OQUcAyE;D6CxZ8W^w7BC*Gf%h(d;j{`758eX9v&qwdkix0eNCb?K~ z35inE8cRms)1-=wE*DlP+_T!x8M^J!Ri=sh`^1{E+ZjxU4W2w3bVzfH6-^m?MV7bD z=c66T!g-#SlIt)c-?6CkS3xt1_K3;jj;UCdMg_(2m?Lh2U6q_KBXP>O_4ek?`Re(q z&@wsoO5^8~ln8W500_Y6Nh}(l0NCQ0SjJjnZ-vuQKWxIwy~XVhB!T>Kd=d z@vQL3{5t_s;Lr~^${XVl>F+dtp~_(=7HwacFTYqn&AT^^0+#yiiRyZ>J^gu_TD>OR z@_v@Ox+oRLnXN_xRK<4IisY=jWB8x=Cmpi*Q=q) zW>DWgWOm1>exVSpYr{Pu7|$C03yz|D6e$za(^N7*XslFJ?fY2&#nA8SEC{T&4ihGD zZ8D8wN*^$#wu|3?&BE8PNUeYXCz*$xD->=qY@Z$X9lL&apoonHXbSoxGskS(0f7>i zr$1;4A<61`iH#Y=$WpBFmAdVy@~vtN5(P!)*!TC#@YZcRS+a%_t+*iK_&{Vv}D|66S10O-N`uEeItggH0tzf&Gb1y>Z;IXwj$(4RVRg z{@#FId`{i65(>+P<(xLpue>XG2K;j!$i4G~1V?|hCHZN~GSOU31a`h6+EZ$jbh4e; zI5n1EdT*L^`U(PQyRX7Hk93GCycU1kb66EM3=jSx3gXnZq1<(?+sWR-pi@gs?c#BY zoqVY0RdP?sy`r6XRx2-Y_W5v}eF$4%chl;r>*ogWs(eNR!J@&x>-{xQI9nz6iRDmH zkh#1EtN^w4(#Ujk$fgK0HLZn|lHr~eX`HXXn8WB~&ficSW43|5pBd|FN@E@+(g`Ol zI;w@LhRk$USKs}ful|ymNqM{%YvDS5dMImoc%6^gGX|hu+}~jyf~g6Z+){({AG#>$a`R^^M<^8N5kvX>C%D1AdP*Jq z=|Vde)hhceRxl<5?t|u#kXl)poB0(p>ri2nxmhzdTOjIAOhm25ASJK^aL~ zIP=*hMT|xUnSog=g`X245!7txq+a52wi^soQw!zKWg z@9l!Uf?%6HgWb!1N*dw5t8NVsF-sy*r9dg>Jj$@7#LoCgb)mF~On!~5`TRt zllm|1Q9d0$Oy`prlsIW6S>J}?n^||&RNnyUs8ypIj)~Tf&FoEwILqtgwZ6~VLF^oK zI!h0Q=k9RN4=R>_v;jn@C`d-OlSH|KqsUx1&eQ5PHEaPATU%rr0AxQ87ZjTWh!hf% zByp9vv%sCTr5m}gS)5hju@{tNlK9cD?p(mMwbnq9GMi6dO6y$|Ee%PHl$7U4ON~3B z%Hw8gOly9LGsS2|T;}Z0G6Bk0-mE}+pF)cj9n?%yBFu{lVVadFj@pw#zSzNcPHvwz z-xOyNQ(WepT_sw6R7lP82Ngt&hQGG^LKM1%*5tS~59^~Z;AL|iWr+uAeEj$ti2@@D za)n|8V!hAAC)bd}X2%%txP~{t185o9rlt6H`=BuC%PK?~>)4Omu>9Nj4uStMV*GxM@uv5{dmtBT_&6kJ%{ivP=> zFJAUj90W$}LMp#lo~YoTx@y+%4uafg84B#3>8Tl zI8GMdJJeIyL4nV$(eDg(a`60V$%5T7=>OG}!_}=7U7DwCY?kKvL<(jH4(9=m}@#$O*t+v*oA>^F~lf$X(E_x-SOp5Fg^!g#wsDkM5Cr^HJww3F$qU3WhG5+Ls^$o*60U-x9m;CM>nuhOJB_= zg+#HYV|E=bKc`GwL`%#5b6R+iTU+amFDtUD1c!j#ZyW_pZp?5@G}S_=OC9EGDABK( zY^n=nkTOIvHT6l-V4YyXN7HQlEx_@I;{bxS)HxfK>)cx0RG5JxFOU-&Yf<97D%!7f zQcWX2J}OeLLfKH)q15lZY8rT!XV#7Uu&kbzGII^Gt0yBTDQzFJluBEDjmt^2Uu-?! z9i-{o^(`nl4S$AX(O!Z`1_tQ7StX(Ri7m6GcLf5#cX&a0_FbA)4mR$5qXYbcN}7KX zgN5i!u^ka|yyn|P2VE2>C84j-)cl#Y;|1R{R6-DhODc-1=}hUh4U&}8@$I|(t~69^ z#@LIep$l5i8v6aNRKuSw?dMVAMFC7}mg_x`$!wW%Tp55B3W3%3;1nH>0?|Gjc9_oW zG({T#Kt}dn7?(lo)nFQ&m=%ieJ@VeLu2-7&Rh%;Q&Rggm)tDFs4t}BsU$V+C5-x^B z2kiO=_CM` z9PlKLv?|FxD!zUHZNYC_>D9vHCrZ)XzW`JeOn(#~s0TPt%tu)|-V_oDu~wL;`qlRT z0P;W$zw1Q70hPURQnmpJ3`rrX<+Q)B1}?c5S5K|IFKM%uX}zbR?8v1salz@5U=I^g ztf)}RIvQu4A``k9C;p!_zv`>905~ud0uVjgO^mQ}tE|mB0*C;QHw6qxvjD(YT(rZ9 zb*qx11_Ko&(I9AZB;ZKIg(g$Q5PY2zk`o$xoAzB_;k2xNewrug^C2!d!=TKIh6yHr z9u4+y2^2*p(Te2)QWS3xM&SErbDHwFn^8qRy^aK zWZ+|)im8JASyx?Z%pdf&N zWFnA@1k5C3AOc#%ltOPWGAxybH9*4Jej2X#^0RG@5&LA3guYx?HyN@QPhKkG57b;lmVMG;-XrE;|3zJ1wbFYYPk z&ii{7fq3AF>sH;YO7ElrXF&i(el3AjahHSw{K`lKQHWY#mEK`2{-;W{F!HJiUeSt# zJ&P>jbTuhv_e#U~B|ATe0gq+dD?V7*qC+VoIWMxZ)%$t%4izQ8#bA0T3e>Dw-fX90 zhaJhGf*j89wr9H1PlZc$leE zh)})+!dTUQ+64$e1YrVQ`rpJ7Mp|rhgGM$;@`(?a2+<)?d}j;x@=)YFyj&n4Gp?&) z;TVe+!zvS`O@jpQk_gP$Npxcr-nVNumzY^KZYFvwy?f<{A)Wc}yeC$&(qg|?k8%PL z5vIJM$BsH&dL{7cuy1-ADCfY*wJP2Q9MexfPWz!cTZ+z@?k;~tKX!Z7?f%tIdqThw zfNTJH;*=Fb9ydc>OsP~VCd5@D@ge&>b!j6Ac7C7$NFwwg)d49WZl{lOXryUkA?he) zLH6NiCL{YXds!8S1rmUb7^-t9`j|^1R2>8vsSh&a(|8|5%ph{?H-Z9Jum2;~*1D|| zmvjL0A+iC_S$+ckG*k>b1TZyb%(`VzCPXxCjED=ax6r60GBU%Ggh)sBT#Kutbk(3* zdX0`%eI+VQT#0FIY;liZ^P1Kq~}@%k&K9K zM4I)dcXwJkF4;OCYtbw;$beVaStTP%CGE?C!g+**Wd7ZoYCvyDQ)cQ64_4hLrtwP*5Vo{ zX*Hw|Rgy5F4B2JR3mgPzz{|_Nge$rKQ>#>VAciX%iMZ37nQjuQk8IuQZq$jVM(r-R zlXYUPJ^^E{d(k{8@e&}NaxE4RQ(VDt4n7^C6BVQJQBTbX`<0(#B5mhfSu$26`ZZ80$T&^eS?MaKvXP2u6kx*RHlgOQWrt0AXT z^8lrq=yTJwp$g_+Pm@ueIpsrnF93esM;%CtVP{4R#HK2chUIa-Tr7zhBF`%~pHzWV zVgwr9^Q?SYw|q7Zi8aqFH)?raDKoK4Tb@SKmw>3uk=KNC()Y4!b2bT`X7;6>XiCZh za0dVn-L~Q$8=wVfuq78D8KMyeAqqHy4)rrB9+5s&5hR96o*CoqnjaC5%S>TEo7J)u zC2f}?(?mmp!aYt%&@)QoCZ9l!i2C^upq2# zS%At1u}k@ z;v$_(Hoh%U|GTJXkA;+wqOhN6buBFYdI8eJ7RseJqa210-iw5D`akNZpiNS@@k1+y zEFn{fD52e1lrJ%jQs`j3`?8#bj~is`+Pad-MQia;h1m<)EMAv`>hfh-LZ%b-^N*ax2<9!eXEm5qo z6zUEoX|<=Jv}%Tk;MOX%uLhi$d}1B##4W;g6H1yzY|*=vc!TNMA-%c68NmG-U;!C{ z6lvU7VW=vhM_r^3)PVf{5iHkMQKiWD`h)AM|4WpWbUP?muAFPpb2S}fXoHZ&b*r)v zN$`kvY5*2s1Azc+n%}{&W)wU$o)!-t1us!*!;-=Th(JQaaLh=M7_3pVLf8tx$%aHg zjUVZDt1OvTsCN12!E{uyr@@UgGvm>=snuc!iO!Lhjr)eG`5#>jn@Bv$d4Z?*Pc9~mO5N1XOR2V){Go<1$%X32!YzN@qCZ==%Q30MC(qe;CrUf_7ZZb<6Y($?>GwWNfl+HC9O~}J zx}BxU0<2h-?xi$NIH2*1t#sNO?xAEQYk1e0Fyaqg2a5JF&2A+ zv9!3vZ5{s##`=12bv&r3-J`Jt0&dXo$z=Wh|c zDNn61(&^Tesr9TpY#1YJc=JFV;XLOBB6B5d5lzttsQ~gc@bn`Px+&iTCj@4n6DOQS$06cn&bUMh#XRdoZhxhRDUjAdjvZ=UtiPJbo!J z0g@5W|VaENAF@7%so>L_qxIz;}<$eqKu#-KU zR|4ipkJIp5&*q6%s)#0x@XmC?#B%$7 z6|Vv~k#G~HlW?2iP()A|;R8w$zLJ5^gasiH3xp0-C|Hq99)=Wc#WW$)C(FEeN^)4@ zz>8hBF*voVpG48_R!4scb$3V;lSq)qpJyOG2r-2b^RR|H?tIVL0*C;@+|RZ_B;pA) zC~L|(7h*<>1}^IWSEU6o7G;U4(*W-!RnqZ6#mqA}iUSdBm95647*Hahlp0(lk-_vA zrL(gl*_+FSK*a%RIkijLrU|vJ2y2>5R@&6BNs?N_g4_ugQG-g~dE9qaJ@?vEdFA)C z)w934bT^(&Kd%1PK8>}qjTEFaE193Z?!wboW@@fYh>Noz_xxHR7y?d~si6o8kv9Sq2Genpg|4pXv#6ms z=MjxNb*$980JCW0u|~oa=m?>8oodLU=#m8mvC*#@Kh776Z^f=&p)JoKMgS}PyBUid z1Oh}FR9)eXGK8_mXNMBh;iZgLi7f;6w))#I#lx zNH_u_7to!k{%FQu*F+j=GUEk^hhHp}>1ymA&t|?BFB**u(nM2)lGKBD4PRctnO*tS&O{F&=_w3_?p-9L6prRz#QG{x>8T+*$uwwDLsNmnI&p z*zv-!I&Tp-i}tcA_o4nh3rJli7|7>^nT>pg-v9fwWbc3n31`#mS$JS;B})%uEJ+p- zpHnR)xxsuC>;0FN}L0hy$gDj@H(1e5? zG>R6RvRMflZJ4!{KZ5^br-z{io%)0Xb!qhcY&CmBa`3?OuYFZ`yr~<&4xS0hK4_{RbOaC4YG$pk! z7z0!?msUt)ghV4QE|W-*-GAVkE>pmb875zb_O-m|t=YZEtiX`BG3B}eXgOa%Ti-w4 z-G8)IzK@;g{T}y9tNxO8SCC^-QO#_=QWV_FkcDyr$_Goa0?AwokhQAaHY6;(U~FKT zk4q$nZqZ8VVRBm^dy#pL@-a;*e#5J?EB#QR{7M3)nu~QySsW0DOsRPCM#065#%f)^T0u?G z8<~7zfOKF;05HPbRUSe@m%K@)C_xLNT?HJ}!%`q1hX4DtWY2&E)n8WYDK;Qg>otdodc$wMt$< zjdptUAW_hpGpDo*_W$h{cl0Q7cC+PbA*+Q{DP)pfwt;W~xrT>94HOiSiJD_bDNU@b z7AxrN-bAZ56`2dE7^B4k;A=mPsdMXxX{KVsg-2)&{_bcluPD;^N3uEhZ8Z;jpBLKr z#70lV6d$)Zo0*{uGdFQ=p0t!Ei>c&sBd%;QEYL`{B(dkl zo=h10cI?o(D-^M0lcWR!0GvT?8NsfCIy06~C6&nVTVJluEF=|S<+o{z5xFCOCgld> zuqq=!*juS$lUL)I#2DDXo!M4q~Wq{?3 z#S*eBMTJ)fp++*9`CX8*$&_7DI@U7MD3+JHDCOzeSjcg z5D-Yj_+KE=#upg|9R-$&N}1eBFiaWaJrhAPk~$okgv?5#xymt*K<~wS({KZT)?r<% z$>%^iFK>ASIl`?T8DR#~i)i~n-Tzg_Ks-19@{d#h{R{jc&t6iW3-FIbnG9pEH|=4>-Iy*Z;>QR6}x$!2<(aJUf&q|%KJ+{J;pyO zJ}x3!)yT#R3c*W761!O6_o-UGW?P}DH%{=wOG{Xp`KBzTs@&R01AO30;R$cF;;fM5o}lkc3^*#*+qqG@_?u(UN2~wG-&oLl0F2& zE7>Ypf#^Kdmk>oOK@kE|T?~NxZc$a0c{$!=#88=*B(iLmA(o$o?c3cCFG0LWrMv>lo?*Kn>8+Nl#;(Kg<~cNGGBx zV1P~YdLao=k*Qde$%q8PV+|1^mOCs*;_6LdMx?~(-7G?!1r4a#BAU_+hU<_TZU6hE zWZnP-jbK)5FGE;XMB1%k=6Morc~z|>)ahH1Yc+?ZoR%#wzpkv`{yu!eQf)lA!N1#N69ChJ<7Zefpot3aAxTTC9)x55X zmTA1~dK`3}$3AL9@&Q0>M7A?juE{MnOux)C<8$dth(RHZk?8Ax;pV!Q0rDYw4S%n(BZC1s~ zSl9ma{ASKttNQmV$;s^x{LOaK%i1ogl~0Vz`FOCIL07cf-CzWdXs7}t2mvc4mhlJE z-sD^;R73<#94rth0dxl(K@7sPiVRe-S6-5VN%lMvW$@wlg?uRN8eIrDG1~34evEBe*Ia$yNS$#l2#w-FV4$zY@I1v@79gu}q zw3=&%rLsVV(p`*p{V984w!e3ktwinBsdr5ECbOK}uM64i9X|zW z3yh3AUMe>`4UNrNv{CN zS-#7`=dLX$R#OrfxwmrWe-Mny4$6Z>-0r)jKTvkm_u)rQRy)?~MR&>hPh0z1Z|3)J z9p9Hzg{-`w0}CJqi>BLOggV7gbr;h3tRIvjU5qQ&E=~75KM4y%NS84QC ziEZC+1|$Bs8cEjX*Zn<}wEz30Wb1$gt6Nj+Of{Nog_^%*CBqRdMNv(#b!ncZ>a~Ll z9kKcqFl$Jg?~fJZUpn*u`(OI6|KCDe{2V_*04#v4vfkG2W0FS_U>t~rP1(x;i-?25 z14D&T20F|F7g`D5K2+kGc|vl6#R%tSIAEz`K0Vd;r1yj*{ti`wM3<8aC|K?7L)xDz z343I54XrH(j&~rU$u%M5<3>#&#u;2emr}4JS2aB0n_eA})e4Jvx@8=TV`~~s%qmB% z+wJ^~b1FKn*xzQ-f%uw}w{OE?KxuKt2G_&7JJct@proc`Dk4Nd_qJBAKXI`@@1+xR zlud;Ovny1I+Lc3P7nY8&@Sd@Eg{lbZ{4QSHXEi( z2kUbBRf4I9StX2Nj7S;dN_S0cGwMrX5|! zMg?yID#QpP=GT4zvN3?eEe1ss5i1B35s4${kTT{^hUmUbfN>~9h-0EF4=RXF&*U!Y zguL0jA%f7|y;$}s?8jYg(lyIktrUBUS@)kh>_sF?|0UOd z(8l!j-B;5fd9CQJGWN@CUBg|RvX|Gb2SnU_-G%3xbJ>sjexHfoOmO}J8gprQXTmTD z(4XPwJfOPECY+dxLeq2wh5{%LEG`<^5z`iLb`;VzD9JR6A?(=&@f_Sh-Irv<cK_&{E@>V{^D zVHYW^NDVry7zzS_8d{X1Cn@N+QB|FG`n8%4KYyKiZvXqVWZwV;bW+r7Z!>ylr5cK1 z>1z?CHBqhQ3E`p?YCV<<45hHt^6Fdl(-M=7W?d-W6>c8lIBhV&g_AoR+^R5&#i16? z|Nq&F8*Snegpy_e0fh!2A)LEy%DRmJb0i&d7W%3%L8z`~M36IUP+6T&JRBMt36Jfy z82|a)i}?9rg_YGBHO=M8{4_&==X|`72QmHZkUjDXGP%{>`?Oxi?J&$SNwtr}0uH(C z!Z%xYX&2TAwJDjyCrI~mN4V6z>Q18=s8I)vKYxpTGl=v3)(f5g>HrD=00K*i@XLV; zhX`ekN^lX9`l!4pl^~$EO9F`S2&9xKMaVg#D1;*mn8(FYNVU0UW-Y~`JIQ4xDjtAq zuf;JDp-`yN-5d;|&O}P4>W2vAL*_BeD9CFtz)n1RXJaSz|L>z+?{uoB$y(L?vcibh zJ`%lKT5sN_kDQ_a2tfh>05WTD!NbRFz83)=A}~1#076cveVq)qgtw#Ae#z6{&qrXBH|-tKmiOCfcid&INS)i-#uS5Y-mwerC8)?;gK z`k$_(%*}6Ya%Me2v8R%iiAn8@IuW_JGNQ2~Z3n0zO%w|m33IUAywuQ+itg_`mv{R! z00_W>0ReXJbqSU@AW9f1X@%U}8@RrL$5knACLrA<$WMNdaDK{?jT~AN=tNm)tTSZ2 z9Nvit9uMhb3b+g)P@@e{5DhsIY*Et1_0Ebdn-(i<&l59CClHN>(uKzBx2|OSqL;-7@&3 zFq)Dg1cR@6gNf92q|$HCq)c?{`p5qIo;xn&{WFg%q@|AI0HX|=cgX1?2!8MkYxZ5E-O~bEH{Wl2 zvO!sfRL?UmiXPWrRHLACA%fBFYo2J2)&pOLKq}j8+`!#UItatX0>FS#!k__y05m3q zU|=BT6y}JJ2oD&JRC0@R7o^+DS4C>PxM~&ImK79ce&lZnobIg|)OJ=yEJi&*P}50O z1y5RX$x9r%CZ0_hh3|>oOtxE2A<^buF4?ZgKETyc{x1z$S2%9%(4^@lljqwws; zZ|D4u_U$)roBV!1qGwSLF#xH+00PvG@H%)1d!iDy=O70K-x|QMaf*8=;GX!ov zh{=czWM!SkFtiv<2^c7WsI6P0RHvC;O}<4@0Ynq9J^#a6b6@%iGoqRTD8m2{+>UMy zoi&5wEEReJ01Tx(!AS@K5imvwBLD{yWW?4L2`Y+0`cO9R^I@c_|3&GR78;=7Jq`)n zMPcZu2d;%uppFDfWWmv5@KBhHo{drdmu$UN>sTdaxxVD;Oyay`AK7 z@M1H_{`Gd8WTN|(p*>)RE8&K#fQC5P`}h$ZLslv;8xYm#^&&rU0M=2-$r547?M#C2!w;MqzKqmg4r3Q#v``h5zFc{$$aAjCmagMonl;vrzthDXX`SW z;yOglYH`f6nU`AXtE{Lak_2eLKw(4Q{-gMUIoUaR{H0C|0V==%ZIyWBcvXDIfK!RI z3keE?h`@w^QDj6=X28Nh1`-HN4rf?rf=*VDQZ^wFl8t03lM_)`=E(u0Xs5YAK# zND&uI0@$#FbAY+DV_|fEp2!&5c=XnHGaG3CGSIcz3thS3sV>FvoG-#PkxFFBef(FB zO3Xrp%1_*-g!zIi`4}54@%B`V=wmGBdWf;UPtK5tUC%VCoSq>9XsvdJwJwY^t+oqb zZ~yzmWbXh5YG6}qY<*~B<%-Q^>0KUGfl*Dr72*J@YjuSiCG+uBuP_EWk8QHtjjz;H zbs1Br<}(NyQ4w(4_SO1jj>Bj)g$qbWRbe8nfqqUl6y9wrH}~;?Aq{p){Y#&$mJ)@5 z6s9-`+>J0=syDl^^}ua}ph{rO8A6i`A~O?}0frPaYIK9_KHaU$}0f-cSu%zZ|y8BA3x6k!XN+u5^XwFTQCsxZZHs%{U~{e4v7~!O!8l zHRYUUh4;XbyK63E9PMmnrUTnJH9Aao%d_l$__~y-l)X`rYLzo++nkas%s9o*q4P zBydH!W{#`PYCJNb4-f{7U`(>Be_|#*fP|Q4nHeHNK>wWEAAI7CX7rT_@X}&9P3r}L zA#@Z^X}UwTPb?SLG~wK^?v-6w*!r%&MQ2(2l0e)xxY@ zO;{9r>B}u$wL_63rDoBF(MP$d0DL`7D1Pls&$v0?5VrHF2_g&x5$7{0uTTIfTxVA z)QVxF)11tOgc(UOi9kv4HjrEX!4U{>)GHuD0@${MHP$>MC}*nS$jBJ%&(v(BS#5g9 z9m$nT8hZHF)X~CaTeUR*=VFusMa;ITIHI9|{O6L>^|}3jPmkN`7)DTbWMpR2%hi;5 zVF*IZnWTfug@p@S#=&Z$JfN^9SXUmTJH{BxYhwhdfhggZjja~q?s#U;WHmC1hj%9s z@I1*T^_N59$~cqBP|uDe$|Ox}Erib9?C)nSjKAIKuZ?)9UWLs~MLZuL6(``cH2 zB6k0#&vG{upn8||Msj36S?rmyf)Vn4jo{qA@Sezc7N#=DnKMd1QoTr*^!wdStBl(YdM(+ zY8V^&NQ@l?4$H2MVp77GD}JJGTz;y8?$^GN7n^RANghSZAB$1UX&|dN89PB`Iu(*& z2MgS^E>0(B5$Y;0XxTeH7?f4aqFcsyncb7x-EE0v9gjF_KFctsi+s2L3#cjN*g7jG z_u6@x{~IZ)XX9JzUVUvZ9ee0-E3$7ufZR8S@fk?~B@h;Qt|7h2pz}Tt6|n|MGKt8y z4ykfXAP~VFchr3tPal|b1oSIHq1>cvYllLWDQ~dABQea!5M9bK3thDT{=3|%@){2; z%0r@G)Mei0{%z=*1gs^NI_;6}Ffq3gk|4;y>d|&6lEY1$q`X8!MT?@V&+|mJJxXm@ z5KXb_ONHI@EgYg5sr)u2i%|XxCEI1=L!?W?ZE>CEcP8bsL7LSs7THIdq*rsbv;Ic< zhIZP_40G21-?;YDK7XC7@2xqHla;Y0=XN&;EQ`(_k4Ma8%IiEl({tNlsLSx)T}ldq zj7W+zBy#O{4EeH{5gVDDi;!kJf7#Ky{B!V)VO+eH4#ruT3XtO2K^Z5;OsJ+UK9e1Ri-6ve{Cq5wQuyr z>+1|zbPk+DFs+ZsgSJ^b(L!*m~B~YvehLC3^LPETSPAl+5LYx*1K( zDzeQXo_|3x!|GhafE)o704}gNB?w?ZB{=GX7Er*(FWCqpAcoMu=s<&P@B}UXPn)If z7SB2oxKE=rw?R|)Eaej4-00#JY(l$)T$Y|7aipP+KNY>I>a7qkKoJ%fkpI{1{}7xu zKv@qJ0LqeN6D6`k79k(wc>TwT*=jngKE)6=k^BHJ*cnL7A&=MMvBR^7qiX{!rgc-m#801#V>UNNAzU%j?3EBdUeeJ-n@WPAuVrI8893{5z|1C6mLS{W`46GawT`rdog zwB@wxT_ZiBS)XfrTs}O@ZvOH1l2>}(m8kq5(tV!QlKEb;(bU?Wcdn3IeJ6QaYB;7k z<5U}OMgxa|3d<(qo-q(~X!vA?V!kLF?G20`N@%`$bqJb<w4-&7IIEblUtb!iiKck=2BlD8 zGf}NP%i-{+>M5j-ERtXe1yUBa?}ij?&vj?*@U4R8i!&g}&>zJS(X%xMSSDk`6-8OI ztJEgoovQAY>+u4D$Sb0m1gqyPNlfU(u});^pHShKkY;Cg2fEp@(mUcpCUHlow97;m z&~=Dt6E)H2g(*Xp06IdDpyje|Sm0u#0f-nA222ry0u>fCAt;PUCW>6BkT45PMrbOO zvqkuxYYo|^TCmZZ3slUwTj~ra0>b&pR@cJN$eO78SY`7OvIWewpp4xfX*=z<1iUj5 zp2&8pCdJbjg;V9+FOv3jo;PicwWYt#Vz&w5kn`Kk6yc5gGJoge_}KSf9lhkg!`c7W zFBCmG2t5TfOk4HbHKQ>RJdlgL7SN^1mn=AmcnMYE9Wve=LX<)shG4t8g-Zz@fC`SK zi_$eiB@Dv-(9z8~cs3n&lyRHiR+_PBdf;~etf;n9RB}7=;=Y-rTj*~Hy|KkWsI10CIAYYkTY3CF`^PtrcL_b)Fyy4 zo)LCj;JlGSxdfzFvs|~urJpUh!q)c8FKr9n1RSxYbJ8}lOD=-UF`;-wqLghw6X~6y zzALeX>m!u^W!CwuR$ggZsKejie4M~3Rc1lfZAYWv+Et~o?#lJC(s~u$k}lWe6UjO^FWZHlPqFPhyOf@KT2=nctS#49YZAmjmAwh~VYb2&=drcJ4ak$6Msb6aBC|HVx z#rICKEQC8QC5gLRHzhP_&3&nM8UcdNIuIyH@THg?k!tEL!66xTll0F#joZTv zDICl}f&&N$aO*>@J$!(KJx4p2tM$*375H4pe3-lOf#e<`Ie` zpnNW_RW^?0vZ{@Ce{3!N48X;D8Nh&$M%}LAvX^Wg12~Id7s;F}N^GKU2nkk`>P{Mn z1VPM@FGzT@EE=9G$~v$(NA)^fghcPEAer+jZOyD$tvPVF#WA=d(0R#Y++dnXJPN1U#2~rvMz=fbtC6ucH z!0VB^7@=_lt9T-f#k1Rj8cYL6>n^0KV3B-9DNqIi29d$)1HcAPgCb{0p-31;%S{(6 zBG%`a#&*`UZgV$=`I>H*+QLcJ=Dqg%@J=0Rd+nvmXYS=pZ>ROjtzlXi{`Hv&`@ERD zI|Vj>F8fK&IX#vMKmY^)9IkMOa3kQE6*-(~-++u#VA^0ShY(Cg8ur48L!)RBNW?ED zZ78L`B5~A}x!SfPny+Sd7U50S%KsMiwcFJbUSc9m-Zaj9kpKI%Wa$6|M^e;NMlPyu zNXngIgKZI=MNh3H)TzoQDRq+z9d8p+l7Zw7I=b(hzcRh@uho0I>*$T$K2~d010l&q zuxG%(9m)Vy1Vj+5zWxo?KJ+R~C>ep212O=?qL$-6kf9B7v+sHyrF+`&Db6<9l&<~3 zQ&X0%%j3sSmj#PZdXg$0moC0Rv&Rv>?|0?=fABFQm>T}S!mQ7vkc0$eh+@V-`y|n} zT}%zNSeopV?)9?l(X&%+M5xOdFDk~Ua6u{zNNj^O?hn1q|9|2M#605kZpt%83QG|TT~3GcfPWVWC+*0o?>#Z8aZIlW>rIRFi47)*HFa7|v_Y(7sI0k!ju4(a zQ+G&es(Tw+wQg-%G)>uQ%w#Io@vhM9<3j-|h*6bp-|j9DAcg9#97AD5L<;R70?KAY zPiiMGppUevLTs|P2P3C%m8wIP#r868+8V;DVUuwM@v*| zOhn3UXDXdxgMU#)Nl~r65aFzrYPE-%bX^_{CLT|5P&YKa?a;x1B?1swAtX_#Q!iuC zIo@X`>F9rJPb0S871!2;>JyE)s5@167q(~zTP$>TJ&IRXszVkaOjFIrUUEeIJ7nBk z&h<)|_p+E~+KNrH!inLHr~gYBmBVoZ#*MyvW{@H(05a?NAmV^i8ZeYnV-~gx6b)ek zPTJvmj6j$1eY#J>)lG7;K+E?bjSj?*PDER2iE{{P?2(q}K2v=4L|^G7u65h7}7OL$eGFD*L6BJ~e6uVM?m0Q^(_5 zkVcy!LV;nK5#%>(y~!#`9Cn!7-K8e>too(6+8`IUmS0sC7;bNU39*5|tfZRJ3d~0q z&j0(gMB{)1yi8L&Z$nyl$;x_ZW|>bpGf}NDZ|VprX?3Te?Lex){y64nlVdLUtCeBK z6jP47p4M4~?2;MK^&9iT-TRX>jy6S*lQ!Fd#-~hyhAsdKq6O3ofGPu5=wlCtYexcf z#5;~hsneQw$0e;0!8g=faMUA>#?@v`i&5omLuOUyU;Xy$5BtgyrU4k4T9&@IQV*FO zW@Pug%tN{d~(R;wpV$@84W%#$e-+iX;1-^TfkWC;!zMv zA_`(4Vr2e7qF~S{5hw^S0VzyK8K%B1tGh_`OEjf37OAR8*)2w4xS?!OhX-qg)?HOg zEk8f_iDXBedb0!jIth!qfsK{WhEeCFgvhxE>n2hMrzThXPuhy*l%w+}T`He~?)Ke_ z7|4^be(OD3P^~Ghx2OdK(2Ta;5K44Q001Hy15pH!3t3RKA|W0D43h`-u3r;trt3ci z`j%Rq#00ozHZCr)wK5vUNDvidlrR^xsEdU(U|7_YMNORNhev)4sv9Xq2Mc^n^$>(S z?`iL8^G#aw7?xBj|en4 z@C@!47GeBcw!-=r2o&i$`*7}d`&}DD%FomKEkVl5@6zx3PtZXC(IEqIS-9Z@wgAAC zQfLtmuYaeM(H`UJ^vQmb5gFk?><(-gu_F6wWk&=MS>QrVDyq3VI9o3FJ^`>4j1XIK zZea-rO8@($MEn2)(MQwMPcr&~srp)Nh^G$~Gfz!D3!&MgYBiP(v_4}1p-}T43^EaE zaWEXb3^?QqJgd^cArKHWBt!t-rk&R=Xjmoxi@~bf4k%2qYj2vAY{;y1xw}?wi(s!_2HNoy!|D=_&l%d~~9S$?{x0idJ=@eGJ_Az^JzbH;bm{ ziP5%#j@)Kuk;!vz+1AqJQLBzN=EB~NXj^QVfVZc#`bpysTp3wbZ4r~W1=N13YMTEXi_QK6ha@!c7LB~dz$Z`u5pw^(7AVd?b zWXRxm5K0%m2gT%BM!ekP;NpK7x$8sQ&7;vhG_icQw?JfAqSKO(+>){GVk-83UmL@>vR*eY+6KH$^^#DFE(ox%zS6gj2@I4E#aKt_Nl=VZZ+92|x$ zs1zmi0F?+NkEpv2viCX4Ym$r}i)ash2__$_r=3VH2Kjr-Ty~~ZYy{*@q8_W=w=bD* z8zrf}Kh)#aWrE-phC$ekH^ee3Fe<=(mZI29O=FQboLN;P930pW<%F4YCy`j^qgv|i zr#q2+MnX}$R3YiI_@g;VkpKJCWaIz_6JS#7Y<+lcC2GHA>6ahfpHZzp72@A6sdbhn z=AY?S=8(6h@7kT<|to5KQmr_aYu^l+@i&hpVX)n2w+@74>Gg2 z&b{WL2!DhEMPz^kH#razG1dbO1eLU}G!Iz1Kw!v>T~p@!BV{3*hafW=Bassfjf3rcgJsbkd-wT77(h(nE; z23b-9+DrWZtCl47wj%DYB@CHZt6hGT00|gn;$YDuLd!=t#V!j8C^~(N#SO*~?XH%v z?6fw<00Cq**ZpABDKi>+S0PHyQ)rXeuwYQQZt{FNi@BOn zE=6yQ7aZd<+ylHi$fBLW9CuYnpFkarL=mBc^s)sOWh-2ZrRTfYkeJ~%twFnW>k_b8 zb0&9mrvK*FYPf`eu%b$uc#w`OvfX*0r@f2^84bwHKpYX5Wh^l$f_N%K9k?JNo7Mdt zOM80HOv`Uqz29E>Ak4CVOfVBq2nU6<>;dv!Nh*`CLLUNx5vG?z+y^n%$0>V&yN`FY zl9a8yC>Vst$wHwdw+5+$!bprtvUqBqN3{;pocb-|Rk-FcibYA}nHIuV5bH&gf%xF{7Sbgxi>boyxkBwGcm0gUnH3_n$>~(~SDA05%q(&O#!D%}g zbcw5q>D?IPePWX!)?hd$WelnXB%$*Fp92F^c3ZdzA!H6^P)@p$F$)y2iLD0JLx-Ho zmgAQgk<-i2lj0e0&@W`->j>>#Y9~czX96gVW5lj7;;{r7o zjS0yb1(B~5YR%?C?;ICpsv;g$~lHJ zP>;**OqHz7hEvEJ^z%{4W@0HfmAgBsuh*4MwzWCsLMxkxZQ$voD5{YPl|TkauTs3@ zK>=+wO|6s>N?N5?m3*j^Bpe%8cWii!5S}P0W=ueZO~{+8`;m{RdzB8BP)aAcp%p?$ zD(FM#>0~3F)TrP4KQpsc9S)n(64!&FSlRS6g@j0;35Z?guad1LPzrzm?m!X0@(g1r zF;>9h066BHeoAS0g(KlV(Z3>Mlr?lkV{)n}krI0yZJA8Y7V|_aFywl1pK`}JBwESI z5VCMmIa`l&9>HlYss_f}kNuRv~UsET&*ecPb46h1hRZCg4#~ng9SP2xI^Wff#U%46z;-Ys>@%Q($LsGP0R$z&Kjh zEh2KIy8@IBmmZS$N|<;g8r__;p~BO5U^lf`p!qeG9c^P-@>ga*ZT(J)8kteTrmFxf z+^X)a`rSG;OEXdk&C@e2qBW+X7r~8?s%WJ%QrtLEyz_MOku`E@%B;aDGbVwsf`Zr| z4-pB4c8K1YE(my}>?sAFq<zf#elEj5Hw&i2>s=o)ll2an(qP3`b~wIs__a2KAWg!aCKq+g1K&dmWmH z`zzHA|NkYA^8f$uRBh40IAEEPu}|p%00NgJ3R6gw)>%jfRAK;t)3*p57?}3KrX(nn zK$6m^#RSAOB&U#Yk?CjaS_>lY=Y-J!G^L=lQW-Kw@YMX_Tgr7S@rmxCl@@aiG^AqPb-}4 zlT~>YQN=yzYQovjemHqxVoCn8AVh}>h{Y|Sfqj^xArXk-mQencPL4E^&9)!dWOEIv@=hi-H?8gL=4J*FCvLmnj*_;3T*Z;C!`EO9w@05zVZZY+eq6 zGc$@!#Vr;kPWKpJ7TQtiQdt%ybm#q-e!P1Znv&SA#?n@l?k%F~9zyKx@{{Oy5ZiR= z_Ojqc%RW~r7`ILg1Sb}sI8}e?Lgx5U zZNwp3+o%8gq-5s+1q54E<5)s+TL~)vVS;TFB~@3fy)gk+5$kn^4Kyd|)da{4VA8B( zzgqxnTHiTYOkz8U|MO31nRe9zK^T=fUhS1B%B5Z*R0xm*5P*_$0w~FS*)c@g*A;#t^R5{TsNz0n&beJVo9SESv_spyOR&{ zk~`3(j>M?Aq?SjVnItW;D;ccx;xX&Rl1F=<~uwKcX*0%>noo3_$ z7UN@X@6)|0e-vXXax=1A1`m@vA;`pKwN4EVh?J0gfDqU8Z@jYp^$bW7b65VbU^d}p zQr1(%vvZ0r5W{OsEq_X`j0hCN(25|9GH7|VfEnv&)P6$-&U^;|Cj}=Rl*x-$*rsZD z_jW#^GIw*_|JYB%2(ODM>nx6uV#-qMc);0d#T`Ekb5)Tr%*t%o@x{K@zEFLA{oi2} z40FT-%IMSVt!-0l+{kN*$G-C!<@>h2zB6Rc$UhF@X0e_?1OSCFF-<1G9lEyeiVlYQ z9Bku9TZ(un3YgS?VlP7MkhK5%v}DhK1dCl+`wuf}TO}&(WTUeZ0cByVFx4q`m8(6J zqKtQj*Co(y{=7+>V-=em5opMaAb7(L_b4qpm2$6>e>@}(gKk|YfURE&r!c6UAJwjR z{pvT>U;U%i_bLG~2}CAJ+-#}IA_5RrC?ZGVWH6zeEx`#*V+B%~3;TxT&ri5%Te!0lyAki6H>`|XbNLDrnNU8NoHOl1?3MO{1qgfF@C5- z_w7Pkh_&Z}tek0Pa4w{eJk)54X&nYxM^IFx7ORo-W2Yi_Ra)jolO_{RG}4y5exIPM z;06p}ROct#+h;>@W7S#t#7T9brV~4F8w`M0Cn#_bMgo&HaF<1dX|EdT5~Qa093(N{ zw)}*DeCX#vDr+gS3ZCR;yb2D4a}L}k(meIV@71%bo&7;LJ*TT&ZK=otd0~KH9RP#^ zlG6m>d4XzIA}PKi&P2@5iu4lojE|g(aIB)emIHDznsmd8DXC_pb(@tkiWn0_^$=JB z0w&C**vbm3tkhf>9A%-q!U~xY%~ONoBH9dfXgp1@pu$3s92`B$MTfDI1Sq)HJVJpf z)eB=3_9pJCN622`qPF#jsvj2>1ewgjEmdE~*zp8)hEsByX&a&obLy`0GANoJqbmJa zb{aK8>KhFNrIAQ7eiVRNU(d(8SDSka!?<9jLmSTeJ7Ou=uFOE;ZXwM-yzybgJq-5{_1e;!0`wv7~RRwD=Wrk@I<$+zSJqw{w z6YM>P8FX+LD9NPM)oO)JA{3~}C`wrep$s(o&B!6Lv2yF66am7!f2HZdjrxL9>Mrf|3e5o8`wrT&aEFem|chIF&~nZgQjm01KP_25=@ zB!s{!T|v}EJ}1kPYq>nt8fUM2ev zWrK|qRefFTBwZ;~6Kp+}4lJR}YZQc~7wr#0?}#SrtpkE1X}%H+|N({-0A@V z@(grX04ga!+pAK87?{b10s$EYF!Wd%q^4$q1^`sS%GSNsmrpcMt8&Nr2HeVB#RQN} ztmMn3K-QTFrzHxX5JPDN#^aGYfDEVCvH0R(^g@F=`qnffsfVPTk>4q&BZ+&jR13vk zJ;}qRzleKV7NgZEcK0}VeFTy$@yBkW86q38ygnyoj*?%v@w=@6W|zBC%b;w?VL;*z zSKTbjg=U2|S1dlzQ4lhUNu$$RJPE9%$qG0ip!FGA^%*klka1o6^&z_Q4H!?RNV2Xi zJs~ru@tjGZF5T3jjs{9xm_^(e0074c)P2JZVZkFic*9MRLv|{5{kJtNFsi~mW2vlBuNGg z4TQkMmQe{fkjnZ#Bm&OaE2NNC&lNM0p3rj*Q5V}eysrnzuZ#W!fnOG6A%%A=-w%H} z26jz4&wp_B5GemrKimIy)l~sC3MB#z8*NL=A0_FQIf?->l9T`Yq-6d81jv8u{A7X&VU?0Jb|K%;rIrFA3o*}Z3CIJEzDwUT#d zQv3Zy8Czwdzb#4UPq|5>5&?=Lry)h&8lufu1Pmi=Oh=RG?Rn?lxOSbI*~|FfKAm^; zq;*GP%%@SEFhs^zzr?!T|kg2gKCx3l81F`xP^D6s~dD_^c5JU0GOi) z3dGvv0P!DXbsU_1O@9W57Cqlr?_@;rJ7}l;eVD?j4DQ#W8S4Qs3M2#u1VpREag7l` z+7M+&>VpIMUgu{;=^8m8J{UcQHPW#| zkwesq4=A;ss4y_VlsOU_jIv!xdy%V@v)v=a^mQI#-^}kNskxC$8Uiy~_LZx4-@6731lFq-mm2`fl6!jic?uaVYoJa;Yh-di_lSRLh1x zsJ4+LkB&@>Ezx1{8r8Zf!p_}u9H@=26#2q(MQN_oKg?FmFm#+X%8D7e5@4X!Reu_K z43B1d9{%;$npq7JI}{$vCIIk|zW?gHCGgt`cpw-K2b7((ab)|ssN{c&N}|O(;wfgt+9VJNi4)xn(xdv2Uz`I?C_;U)$Z#R zoY|i}l zoMU@h&oMe=`tcEoRFGNoT(pgttA-%HGHk2O`>tes{rdW)pEK*`KmW4+JPKmW63QlZ zH$1RE#UwF|C=tK{ie14_Hf4{P@|D787^5^T6l>cOne~zG34~_>d<>XchC`%v89j{l zoc??CyFdH=)QRw4AOB+Ih6$b)S?Wspdca2jrV`bJ1u7FC>Jot(5Mv{W-YNuI!PW{6 zMqvN@q-6d81m{;(doM+}T4dWFVeBgsm2p?>u-4&xlq)@lrDTpNOB*FTL;zu`jK-j( zFOgHfFJWL>G1Nbdvju7_XW;tUg-BdW@ziHrX+~F98LMs(qh5O=VplN9$^M_BM(`*1k8>G|Mded5-hBHd#gNH<%>mlXLE5g3jbT{G=br58XKzOZI0K$24=-4M*lbksw)5Zc z;53a;Vuw;r@s#FxsX~MRfJlRar~ri^w7{%^V(j^)g+M_qg}A>20ZI$mX_-o@k1U|E zh?PIg5rAVO`9ySGZb%qgs-TlX&16_qFgF*`MLTTt&-fc8_|CX`$^D+0_s-7Si#SPm zX1kk7$yKXGj!KgxiD_7ug4z<&gPM~2lE z)5)Vuu4<0*zPITtTR#8$q-5rR1dmQtYfm&S}X&j149_!m#R~*Sq{Vs6)L14fz4H`QckZ|KaHg_U;l4@x%yP}ZF zrR9pVuvU8>oFJi!bxpiqA&bi?yI*19>GM(DD4GX{n60P*w29ajGP2al7{mCMYWIRAnQY@oiuEtUGu zK~z;WOZ8YF5y)1Ixe*1KlGkzb{EJ$_sy|q7t|+%0$J`HAukugu5tTzGj|V zEzd#cieTl)p!rz>DW&O6y=Eas7)d|$0v#U^I-nefxBvjeAVN{MaaI@*>151VR4Or| z)7)f znUaUU1e(zWn-rr@taev zJ(EdOm8-pm6|6LBaE4?}!9>^uZ z0ZQ%mj^77}J9r;9ToztrJCM;Iz^f1!>ShF+sPW?-4trrOYmEOyT^GHw~W4NcVsL|4;}p00=fB9SjCBaf1v4A}TNu1UUmw%Q|QyrUICD zs$#)O6Aex-m42E?vk|Hgb&Q@2tbqi5q@<&SA^f&-k_vnf{nVzd4jBQ%MDKB#QWlju zht{MQUVZz1ap9jqs+!tnQRX+@j5eJ*W_6%7D9(q%Yz1wLCGS)cy~c& z*m$pC*@h3c7Gbe!hluMus~CAKi!`V`W7Vi?H(vjzan}+eprVjM7z=2U9O5I$rzK@A z59SQF0Zs^`g8@ZTu9bA4OBSl^d3yi*v}E!C1+`{V!)Z3MT?Y#NVP&TkQJGUMu^54y z6)Sz0mF$K5Qpc-ORDgi8t`m^R*-ZATf_O+#ld<#I=%y=%#!5I593i8+8RWX}va#9N zNEY=^X5T9C??>{_RcCs7HviPFR4pnpq>f&yrrd@a;Nq1znChi4nSg+ZCi%u72xAcI zVK@~;jVlVEy@iNuz>*j5FK0or#>pfmLJseA!+Cj|*Gw>?G$tSxVZ2oF_N4^cJe*}! zBFyR-M}4BlN9q~NAPY5LI(F51l=ER9N~Gde6p}-!Oq~;cMBiML)z?y~ELC~2b7dp@ zy0d7iIT)REZc5ZAQ=DU%rlGhHNE4aJ01y(^l#g&@T6~6J3{W`~0-~O)Ano*#e$9_q zEpx+-To21t$=FMTO-^vcfU^06zDdNA5*m3nZP3+(Q`axe_QZ zy^qpVXm`0@%Upr^`b<#R;phX(u#y^j0w>wc#-(LgTB#+OOZPE-NxBW>o0RU=1)mJv zclmLTt6^pFOpxsOP;&<{g@JFCGFuqWp(loa8|1=II^FX9;i&gM9xKoJ>CKOCq@@f+ z03iVofblzm>Xg_Tg{BW_cL@%*sR!*7hZ11F&0;A``M@x|C(h%_mM>|q6Fw-41A#)k zVBwJg2X9rPzU@J;W~4+V+vN@9h&j~~asmJQq-5=Z1oc~4YcERrR^?j{W#~^5xp`x( zq}d^S6RSOjCX7M1NycZSKPeq% zkg(me73Zq^dr_1e(zRHgPhm32*)~eu^CPc>w{M}l%_Ue}X!h5dbGX{+K#39&iIpuQ z%GT3RN*}&SZ;!Pq;M<;>T*VX$XR1QNAtV5iSAjweIH>Uf$lzl!W))ds0cZsSvpIXQ z#r2jicH<*PPwxsyB|)fWVhb8)R~U;)$1F^jqr88QY!ujS^ow4I64+!i9y3?}-R^(; z5EKPM1cwq=j_A{jWld9z0!ug{0BQDM1JtmfZRq^~(@UB|CYCMiV1 zFe~iPt|T-R2d8dCkm(nk7aZ)lC4`B&3Q~(Rkliq>y75$>bpN`vr}p60#x|t#kloAN zlsRF zQA7HwV=ONdnSoWTq}O3!4yrYmiR^lfhL^PwHSe^^?nz=fv8qpHms)2n!2U;7Ve^oV z>aeDa!MhqH*ba14;nTnWdCLF&ivSQLL;xdc&R9?`xH*9nf>;iowo0U_Nc!xo=LlG| z`fKC}4`=v00Oe_m6d2uHor3YHO5sEn%!>Z#(Vzgtvcf{+zCFVlWX~{-H!xu2iU#7n0SgKcYZgpFK~N$} zBx*pA1xLV$sp3~LQJymUM382j{6GRDzJDO7C_6K%?{AGpT?`>6$5Hn+V#_^j|NhjZ z2{^T&_+_07t_lJX1jpE{qlq-3`PMWB?gp8l6^?=-NZ~AaA=8O^~2v_)4~J3|%k#uSBQgWyZDD%)M$E zoO1V#TZ^V;V5p(3V$M0$2u9?QrkiRlhs|P0ZY^fp<`0LBAnO?$U7Ym`HuFi+?u-32 zjSwUxqeM0n_1+4CXd{6fsE8AtHSi&YFw6-@Qar&Y`~)G4Gh#(tMoJz-P!M5l#({u) zKq^>-(7;o0iU|&G<|F;yr~ie|H^+4)J8Y`f+mRuH%&*&0WZdR|n^^z*q-6Af1jArd z>n}rCTtw>MW$1Yl?SWJ5F%zMvl&bxVq(lNhYgxo zT*j7FDURdl5GX%v(@&!&s1vhFac#t{QFUxh_QqRoQzAl}xtpzOcXovXB zo*9uGn`0baxavo6TaYBFOC5rb5m z&8Afnp%V3z03Z+$l@5w>?wE51O93)777P^VwUb5jwVimRm4M2t#HpGkK3s^$+5EQ~ z{sd0iSmjHiz}H&HW*>NhWXStA={{B3(r`Lw$eO-99v3y7xE_d-r`bXFqKPQ?8;iE} zE+U_L*wF+_Vv7W=3d=d9RXR~dKG8G8*wrYgKKL5v2LpCY)D4(S5py{>Gj`*q3?2$G zl(YZ)v}D%-1g=?Bdn+~CXa#!DVdiZUp9?f^QoV}Ef+5ZsiA(Q9F_F_%WyT|`F+vT{HO``Ij$V!DLxxHu z;*ZctNuc0fR7xVvRe@uXEl$!}xXlAb0}zxyofaY)g2OG-W{3Wv(c93PC2cG+hWS`XDfvG7OvzC_F9#JlCwD@XE2kBo&mPLS-w(O*E7Y zz#yZz1P=~P2TB_o@KiHSWEocu`f0EtVh9jQ2Jb-kTdxVI`6$!$nkwkTc^&$2qbW5# zXAnDBJ+`pF-XqiG@|U4+Q<;|Fh^{9ZvUc-l>+0L>-jl8MI`59>5ttvqpv_z-2biAA zdB{l>VY0p7E33+^KUSSmCF?c}Jknr>RDIzPwsEG#hS#)MKf8xz$`>J6{fdX6T(*B` z{nn1`cCG*Wv}D=<1l(9uYbi!LY2_-4W#~^AHGxm8y^!IvlxsDnB2AFh)cMMf^SM`me}Z$ia1qEV1O*VnB+arM5+RcTFU`k^eZS1 zEHfaqY}GYJ1D1tK6md7nUoq1TlxQ%LOOyxX^EMx3KVQDmg1qRP#6Mc*+T0t2L2h68Ar z?8y-M@IG=Vgw$7Q0rZ>JHcQiyl4?mO2#>1xNyWPT#OtifI*xG4iwL?`d93DC8mx@v zH^K7$7qxv{fK1hRcxs3LmsaAJG#ZGO3fq9-WCLAGR zRAHjD=%!jCOJxS6pSf?@{{2dlgr4OaZD)4G|0fj}wXZkjz`JQ!bhB2WyLgE!d6t~^ z*2T0-XSVy!3Euzvv}Do%1z2EK`!7qlYUUchVI!9kVOdq}B-F{#t73z zV&p&oFpHd2*r+DZLU{U$9smRijEry`w7{P-0}8+~CUFcVoKd;B@+%BuALg6PMcOp1 z>ol;c#rpI`YFcWxcHG2V(#C7@fB1%>ND%7DXX(HHzIL(D&a8VB6Q#-sy~I1aGoyCh zHL-0!hB2=jYv)eYGcy#FLI)jnl z2))#XEa|&?nil4wQd_DR@f2K6%5NO;45uE1u&(e(=Tl(Ds45wpo10Z@f=HB_2{A3~ z&8>-Dl+0RqvFtI+a6uR^Qfh@ zF&Gx)jb1A}@7pmY&}5)#iAa#56_J7Kgn^6zau5ZiW{kuUoSNB$0s@R*Wq2o__WAq`;$4RK^*ZPakh zR>He8%UspX6YVq1j(=l@X(PxHdy<)6)?-19PjPh?^E%I^{y%Zq7XxFhLLm)HRe-=3 z#kb_Z&|+jU5peL4U_Af(v}Dl$1dmo$dnQIIWF<=fWrLRzQE^qRJqzKWl&Zb9B2^SBMDeV<8{f8 zQ539GWgH|LPNGzj`~!=(JmOf9U|Llz9<8j)K8wsI?QMD*5=05Lo92mu8yX-{L?4Z2 z*&{&-3?7XrP^Tkm35=bW`tPWJ#@BChI)@8RZqZFglX^EWQZ7x_gp0lP%`lKw`>8MK z%>8{}5lHPMbSivAlHcaq;!M{ttP#QxsxV z2kMy=jl+W~neQ?#YB$GMI}D8NzH|By-j_L=|Eb;zt$aMi@Ah>(Ol#rI@OuzMkcfTYnUBqCBs zj7pOZnlbm0gE_3_##J0;%~JpSv_$5B1T#xiYcE8qe=3TNVI!Lm#WPXtyvyO*pQ?3) zj&y0wCaycAKBf9kh@CBKZXGMBLw-y}Vg(o2qjriVnd1`FBOLJes2Vm|iwwUU*Bh#q z82kF_2r#^jFs8cxhlX+sFuBj_0E;5yKOrxG2iTMeX4V>Vg34REps{FRulI40&@6ik zjl^&PRuC~bBQN&xp#3N3eS86BJD7W}hV2#gT|$dAHW&M6r)rIj!be#&zHM#H@tZQiSp!O~lQa#qQD0AW5RH9C(56z?ew8D3&N}(| zSN`{}!_;sk+A9x6!#7W~p?f)pv@`+h_Qz+=0;aC)(c9;2M?UUj_G=tec8>X+y#0$c zS2ZmvEdVQ#nuxWa7#IQ>cWZcLfyXNmP;rvYvt~R@1o(dn;IUQI8!>JX47Ge%CQft= z6D3wc0t5E4BEe1E{eZjQOWtNuBm@t>C^BWykXiDSp9Cq%;2pb=I$tsUy^^L$iz%bC zcKHZZX>I+nYj~ZcvVVWG_s@VS0UH1Nq(t)o1O`o1>kBm~cB!hJVJM3ac`s4yJk6=! zq-u4B8YM-rKet;dR&Z8Ar*ZB=FflmL1&4EuAER6sB-1?=O`pX(Ju_zEEgru>9%&RTjfy2=<2MeFN zP}r_Ccuu^@B+`svDQY`kpr|mg0YgmU0t6z>9Ly+-_H&B1#iC4lZon!vB3o{5F^~c< zUK^y_P^n@|PU*8-RPk6_af{)U)Ed%mQ(F4g^Dy&^EqZiU5TM6b-M@*Y5JRyT2n#(; zfB*eb_N;}MXL}UFgGXX!oGq<{fTpqnRyp|t0O?rj5)}d$jR?X~pwK`rSUIFKciMlv zGa$>IW!B*c0H1H*i;U@4Q?tZdHd*atLg>|v8G+!-9uPAQGuTSU2ax;6m4s+GG8>|9 zG0TF4aj6ajYOX2HKhx&=y&!YgT}O*Hi!d#AMrm1kYa7>pDUDap+o& zWdhY6g@aM7zZK!K7Akdzrc@y%61`$>D!yKzqpxE!i&&l+m%c%D06Hl|0F+Vg zAVdms$O7Pnj2TcS43Vq|WQ>^52Qo3v6oWA}E}DZ~Aizv5KLJ7;vXG9bI>RdzVRkZr z@St6vj0}c3%-m=%sEb0RnWIUO^$GLwW+jUWCUO?oSW{_ZL@xxCLcoq4Xyc%D6R}S( zMcpdWYuTNRSx3)cwvO zL{t=MbhXroJ*F9$%<30_Dnkbvk;QJ9*AyX-L-N8>MxiU@LQ>WwTeYj4(o}LxImLMv zC7GL{Lub)~r(t-ox=;J)cA}}Bnny?d{hjUkT*t}4@Wlwh!6BmQG>yL8;r)5T zYVNNZNvC}TqX>XY9&^r~Yiak`$AHBwhzc+OF#`+`oMOTxfaVeaW27L!<<24)5@1QQ zjjI7Tq4E`_s?$PrS;uSQg21B~Ol5tw@IZ6yzA69v#AM?D2vcX%>rcgSgl77!Vd;q# zwVP87q}a)26{|Id9pvTUf=3n|wVXKG&_-t;*8Y^1+zxh%7YBh=8|6+OS+NshmXEco zWY<{aR=}$a%2T!WF6B*<6y}C&Sl@J8BMrM{1(A$sM^USs(OH!`poIwZNj_NjRRVm( zwQOlgc&fsWd2Q_9%GFmi@Vxrn`BmRP^E_($fD+IY06+o9;%*G$L@y?Q+Ok8y2Oyxu zYMlR$Cp55k6@kF;dH-G>HxBr59V4A4)(b+eruoP^DKu8E|-%+dtB~xZdX7NK#?2s;GJWDN(V@RX9S*Ftw^2zx$R1JsH0bptomg8)t zai}~MQXefqC0p0vlXSi zal3L7HY)9yh0j|K_S64w+lDdGgY|b(l^sTH2ipGEfd=Rrpa5(IXJKO^K;tSAfC4Z; z%e<^^3yj#-7m(_25iLR zlsMA=f2(@`(((?ZmtXt8>I66dqyPYG_D|JumH-qG9Gq!rKrrd#%8Ym>5NYHq!68ZL zs~!augyU)JRFRybF}k*Jy}|&AV@qT93sR{@sQ1#PVdq;8jCQkTuiGVI%EzcqK!p2Y z$aU4_Xx)ZSM2Q9$8U`V`d3>YFcF`Puc&QM~)FdCCQnNquB1xhcG;rki5DyN;4@c#a zu0m+-=xBKm;z_Aj|F$`=E+RYY0VDv00095{v}D!*1$kxE<7^gSSLJHmVd{Gm;cs8< zF&4pAm8$)QA>0T+$H)dc0jQ_LtcS}6APQz$kD+;f*DFGE#zw(jsF+o(Fubtfo74pc zEz*vI($oktJWY3Ccq9M+r{6p+Ley|Qa#(0n|Ky?1|A~M9|5X4J0F*EQJVb>7u1sPx z2xLG28WgyRPBd6sD#-w2Qq!sjvKZ!!!Px8pCusxO{_cTZOw-FM2xL7-8rE^vNjuCs zwQ^z)bT?VEL|GN)ARbwwaSTBffrLm@*)Zsh10sX!k=88;W}3vqZA=xIiMU184j8Et zlhCh9PBAR$9d%1_Ql{E4d@kv7q}Plgx#Hi=LAOY}WNu?oMMd(UU?3P`1cm9l!qE%7 z2w)79^kwORA}}JFL5Lwe!D^Y}3jQU}gueBaQguz~$U)UVdDyAG%Dy<*Tia++^;3$V+qHK}9!ugr%mJDF*kU5g(fQ~oG zbcPIEWz}Voqu_$9!so$piL0cDKWAckX@SSO#*r{L7YMDh%cfabVJp>SPEKu4UqHij zzj^&M&Xy^c-ONg&4py4Q727F`c$)kF_zLccM&lUO473Q=?M6UR+!Z6in6L@rfqGuz z>%J07JSN1ovYOjl_Ux5BegB-m3gQ&v23NAHLq$t;S8zi%+|wj{4)kpe<1FFGR3jx^ z1kOkFJD-k()XCg}EL6kkMS6%4h)J2j*c6d4yeI$rq-5p*1nXE<`&dHyT?K02Vd-fS zVS!<+yv?C*73=+kt@I6-sX(~K-^^~SI@+`w4MWgeyVpPelB{~qJKfR(F*raM@wO97G~P32+TO! z(7n;c+9olVXQ5(0!osRc2u~9NA?F=o$EC=ec~W&CzF97Bu}-SdWE{%PBO;*a z8%W#Ii=hh`^LaIbW;jrTR64OB@u_m@aLrx!$(Xg}Lrgb3s!H%ZsDa=J$Pi>?m$J*m zgoXh?g5n?`peD+E3bvkrh8}iI-=dp6RR=tL(wHoO;nB$H-vw3!*xXV2ERf`u92;P zr5{}jaXB5u!+_-qvb7H39b9-yKVR-VS~+5^-3{A6Z}9}0rUGo2N51E6^_4UG~cg3k(a$w9BAVZe}M1>wft8vtA*+*4Fz+AO7_TCISEZv}DhK1lwR% zYfnP>XGLn?Wr=+gX@OU*FxKIQ7HfU1Fr)}!C}1S*<8(6ws+EO=oMPrELnHyPh)UWf zC}2tLJbvb?ltW{J|&vk`y=z{!z6BKrBELqmABTv>mtQkP5a=LnZ{klQAO3r8`E5>;BhZ zWa*KsM5a@dpucQikHwvf+rpj!V~x`bsgG;VP$8iy)Tv7_ADf1XBCK$4W_#+Nr&E5^ zOBB;+sBk6;xR#o=Ioik52xeCqBu^WqU5JpgdefNLC^^tDX+ESC8LvpGKU>onX0Y>D3nWb#2>v$GL` zsHPV4|dm z!c}Wfk5+V@_pZA?wAT4gQjul7k!fx7jlLK^b{JVQ zF+*VBXu?K_Arvy=f_Y7u848XVZM$$yOpQodRu+GkzG&jTobHz>MTRPrdds!PiwNp; zw1l-$d$#JzHP(qUFLD>Vkww4&NI*nOB2$Q_1Y^b!W{*+v;bIVQFnNaqQYruYv_##2 z1U^hvYfK%uk1PtUX@j>B4S`Qhptm9-DylWKj@@B%nQZgI(ca3}a)KYX`%%`>`pOQi zGW)5-{rfaKx15JsI5w|Bp*Eml$oYB7*$=uXd0m{SvJxGTWe`Vwj3o#}6@__iu3I|> zP_X+=jkyOr}&3Pw*t+d?N$9-<- z8g3Pve_baHa@4Em(mq504i=(x0syH11Z}st01iM9q?S$0X=9|+#G@f7JTQ33;8zGR`|y^O%en|?Rhs|% zv_#i{1ZGQ9>u)o7hl#q4ZH8@61ut2wy$fOkrK)wN8dUSSSFZy=tEnjDJ0BfG5g`zCtSZ&GJ}Pj@ZxueZGwKD*^xl=#0- z30)tI=*xMn4O&^UhU3CxR>ZmU8N{b*6#!B?U?aBHaARqiL&CuU0g4PWP;ij|;Q$m@ z5^hWp!*gMhfS)DbsZGQSN7^x60+(V}3&Py4eTE-=W&C(rddlHOG&y+G#_KHkzN-*5 z2TI$?=CYo`0!v;wk&2FCCL@-*?`4U(zLJM`^_AZ9AFBRXwK*1-E^(pPqVNI$C=enK zOQihESo&D0f8j=hrJMb20 zEE^e;+-w91!I8*7U`cs01wp@Bz1HpkR2T#!ZL@GOW(*Sm0~k2_a3TX(5g3RFSO^Fh zTI{$H27-4duNHIJq0Z0JheP&w>EldB3*yXJ4LA0Jkl%+@)hgEJxiKkf>;LVCgfL4C zNMQtaMf4`GsyY=Dubkb3cl&kFgc?1WNmk!r5MY@WH)008kt*N^6 zY+V2Qv_#&36XZ(OYfnRXg^609Wh1!{MK4pWylvs+BWiu78eOP38QK5e`z7z5r|S@N zMX{})qfcr+swD8!IM?;^UHm=gok{oi&78Z-&luS3Q7RGvuqrzpgAu9#Kqw#qEY|P@ zgEF>oDA|Vr6cC~?Bn`_)67!fyu<*MITC~t&szfSQhnjqP^$#3+vU)D8wyfdTzHzti z(O9B+wNE&&E+IRucd@Q^GR=zzl||7&hRzt4iDTERZ(v^fzMkKg? z#v>>d3~Y%CXPFfo&Zg4`HW?tm;F84#k473JHQL$nj2{~ZBY4V#s!1O-F}e4Sryr8P z)OB?U{vPn7MviH5hhGR`!NOqSvkC902qOSGb-E0I7~tT{O{l~L2LXZ+OF9rb7YcSl zpecxQ6v(1B0F72=;bbNU<6>btpTY^joW4FyJ$RW^NjysrR0R<|Ey$U!l2Mkx8hezJ z>vK@M!k_>9v_$cM1OrS|YiS+Gk7^oSZHBiGp&L`Jy$9kAB57&2nSDN-nJecR-uJ5* zMQ0W2b>1UCu5La{MSbebxkuzVca-(%E*j^fJvGR8@{+29jO-;hkr8Y~K` zw;C8WNhNN2On<*Adx`XVp$`7Cp`#>$Uo1`aep~o77h21*E zfw-K!4OIvfAd6=UAkJF*k7E~mdO3r8RT(+9TLB;qu(Su|0bl}lM>;bk0xnVeZZRt2 zV+o_nH%IOWwFFBF>%g$y z$+tiKrj{9+RPlBc3&`Q`iCD7IpB8^r=P7o()YIo>b4AXwxb89?x(0u6jyw5WN<2FN z1MmQlCynoT!6>NJf<4;sX#ia_LHT9;_a96uU2l@Z>x{@xwbmllhr(a{4@`k zxEuL4o+F06~-j5=_M_q1A;Yh{wrvdpB+b*6z!bDp`yMViUZK_LJ5UdeA%3|{(r7E=uYi0_~;AAw?=O-*_ zcbV7)n~TRq)`e265Ud5dct*waA|MbQ7EC21?$2h^pizrWp7#v9! zH965Ckb=v){KEQwa*XyR31@VsKt}plfqSPstx+$TrunjJ($2{aVQB`87)3W#l!8Mh zzt}LLY?PuAX|5T%zFwrVohiP%ytiim^20owfJ8^{|CplKCG>R;^tSuQ9^Ep(-y{;pyBf1kB-6>nYhaxM&jbtTamIS>B4A7;;;emw423t(>ppDOO?nYJWCGz@(Q=kIQ07PqNJw`EX z_X!kMvMK1CrEhrY#+P5cC9!{3$EkF0>$GGVybwt4tR$9(trfpb^#$)_Dc*FD^9!~i zOJTo_Rx(F46ukpIa0TlHOw_bMZ-ksClIO4Gp zCU3m0QGQP=20aT|6)`AD11i3~iE_=>?T4chlsKXzA;A_Q=@hVu8P-$=(NCp6#3$r4 z>OWdbf>p%%W9`dyeP2bRhsCJGMCHswW1HUp`#)PSAg0><$qPOSb!L0#bod5m;ibMv z;yC?es1~dx`I0hn`TIwm{+`rn-UmXmS$e-r1MQ*w#WA19+i?dQ+pg#LE4Pyql|vrf zf~+a)TaT~a@30J@{Ho^xH26rP_%FIclPf0Mpy3rjia#hH45USBDMW^PWD`>UaEW(V z6e~(l&{i_^>8S3r-`2`z@2gNr$gTevGsSeii$A~I*XJs7PnR}{)}TJi2oZF#5*n8L zI!lN+I;fB&&0E$i-PcinL~KAt3Msp%VrtLGpT5mg94$YLK;yV~s~OX+K;$332Hf5O zhAnjeYkm~LRrrWf28dIv*wKpsXdsH5Qi%+d_rAbhsld`-_y4y48eECrhd5fEA%XjU zUT%`mV2SvM5^GRp;y{TeWj99KDNvl@B+B_(!+ib7<5K`qxd6^F0q*CL`3a?JyLi%R zLIq`M0Fo>Kv##la1$?XYLCDKU+H0>omks+9Y7`yA2m@HRWo%V)=xN<+qhOD9DOqC^ zzKom*pA<{?)1W0VPEbXNw!~w|$;ybL7U9sFMC}ui`4vvsgXs~(6(mhFu)1~4fzuoVLykR zOr;!dH54gR9FzjUK(i$C{ifBynLbfZ3s7LrTu~m~y?GZM{lU4_gDq%SV}5$1-7Itw z30MiH@p+XTJ1@@wk&G$q2jZH`I>~R6K86`T3}h_ul>C0fFzJ&TQ34mDY^HN{2CL{P z2qs#Vv#0J$^{)kY<0!5==qCh>rY$^gW=`IH%6Q+~w9DRAShny!&x&gq<+|t3Ws>ZpVDkw8tsm3O-Mf5OF$N4^Gw+8B^a7%C0dhT1Boga= zmKw!)q1Xi&zNrxv2^WqKm-gMYV@)f;TiDry*4{Nf zA^SQ*{DF;On-Ai)^cuS!iWGw+*z76BSVD1eBX%Ab*bejUU$uV854O_);N^=xyt>-5 zLD_MxRZIw8U66qW&lDnzz?n6Q^mBd#51c)yceIvAjz<8-MX8k<_;FX{O^AuYu;b~c z)Y@2r>8(SUfyIfshv91Qp7%Q;(hsO*Vc7x$)gh~kYTUgUWW{F{Ej5)Z02s-t2h0E) z-4#$_6?V`?VuQxy+=h)xNy!V~B{|f0R0fL7QUwcKLp03scOaL+f zeJm4B(q|t|3H-#RjvOul>t35%;J-Qq$KCYpj@&*pDN;=q?h>F&^sXxiJ^vzj98O*Q#RHw}ogqcR0GDPj z?W!}#N(y7()I=)g3n-^kHC?u&$yzg!UBw_!0LV~C9r0#*YSC4{AnNz3074Sg!{4YNofg(XrJ#kmT zVRLy5XS-7)$bgfs8;{3PF%7FlWyZT_aVGnj;e!vQe5Lu(PV=6KCO@zr@7>9nDgef6 zo0q*&VG3^r+oKlfFg5ZPw^(Cllp$d&L%ncmkj6LBAWyoyqqCJiU$eQ{`Cgq@z*&>K zJ|zZ@zsl#a;#+rIOJB#KrYBU7;TIl25iwCjO-j15!AC19ToZ^hGkpk_=m+KJ)78E` zYspt?eVku;H0}Jd@+H1VV4G@8U zo$8=;xk9RLFY>u6cp3cfXwXha(feRJ(GpmBOX3ZvWcPEqDigH5(G|SDPK;l3!A4gX zbjc?#=xGh7zSrSLdEt0OIX#|xi+4p!pnORBg6x0CnitdNkEOZIIQNw=$;J5S_)#(V z&*`NpA>G+XB#jN;VJ(reGXgYDpT6s<{&%i&Y4hKysjDVe1@0RjBKQ!E9$29qn@qdG zg8+w1(pW~wBz8@Z=iQz>PpV-IKZ#yh5o5Ya$^GOlshC&HoWUsF_4$IZR9W9xx>)*9 zOXgu_3FF)E=ZfwMU&{mjaJL)wJ9yV6cvxJX%}B)Q`FH~Cl2MV7zN$bOa$>h7ajk^@ z<%by%a2=}Gts+=u5v3Yu6&8=LgkxPN zekv94bM2l(n?a(rqIDAPxv@-SNz_mt*_$C(30|D3`d%v2?RZhmA3=VfSbwz07p0r1 z=c0+bf)L+WSsD`*T}ayVT>dk_$js3^%jB`Qm)@QJs1d6W?LGV-U5x_J)iS%44ydK^ zAC!gNTEz`ic1h3;iTzG%Nn06bP zE8TxMx!1(7#u#-VFv35poW83#aKj38)`{xK9MKtnxvRfEJ0}12q;~KB`IF}IvQAAd z^*u}mhMo7WSCy6PHDp}%^?D5`B5a@SmQsfp%@t&8Mq zs(=4y9}M((qnD>b>FnGo1z;E*FkChci(rFtyW3Hrnb+qvj;3z{&0 zqSC1kT^AHq+rY)|W0V2ACknjZKh2n%2m)vTuY^*6E6~UD^yILW(WPqv_h0MU zCqO~`Yz)X~U<{(_GrwZh?G7%}*plrgbc3z8!?qddBG&}GExMHhdf^7|6T0zy6&XQW zb{SdK0;*(JXUzo}5q;Zw39U0W$``SB#|^(~Td)0cW|D9Z78lQWA>TyOz*zX0BoE?t z*?*E8R2yLSR%l>}s82C;Qen1`-X7eIXCNjr1_f|1-@6)!gAuRIPX?g?={s|Es$#cT z4nAuTGTWZ|YvBd|SoKq7mg%$fbA%!k_54U9DRU+ofU*0?2oCDFa;o%mjqfD#c#{U+ zh}1DY7Q2o3iue3*g=8BSVVjkYi%%s)KYf^?cq`qFRum8PVW#bBfrIqs)5A2RWln=A z>N(VKnHUVZ>5=iL^*7~TzAbl3uQ!Gj!bb4;#b}1qDHCrN^_h(S z<30OVUv7cGTuZ$tDG5) z@I~{#b*-0Uvd)U6?-~ZN?%kTy(a67bYeF|`@JC=f<=;Gpv`B4t@Q`d!6r$Qu?GgZ7 zrc6h2nR&`7{G%%3<%~_gt$sjarepp~0c)ouw=AsUM4w8s+m!t`0;WrVGTHCfWi_i$ z7-d29jmmARzyB4mWfVEn+i&+9GUA?k|IKOt`(~(wou$c~<@X)3_h)r~RitSeHrm0i z#x=cAV*YlRY>t(qGGi?rvI8lpi#KA@zu}^ZqLJRCpBl);O!n4v-kYq| zvL9ZqYkn8NY-)^qedt z$=OErjCn7+s81!dc<^6;I-L+cqohyHN+||YWs7!ViiIG8G~Gx7kI^VtH!A2T-52a# z4nN;}qi^>f;}IDjyJ3zGVR9KD-{R!6Rl_%B@UbLEMWQ6c8FK|g42ZFz-u9)naq$W0 z-_e;SaJd2_+GYKnwQ#qT^$I0^=%DV0mY&6SotQhZ?qmhtQ$ITmvH@tw>$}4o3xIGv zco3{-a5^xk7zq}RCV=D+R}6^dk-gFRC~6(&0Rs+M0W>gxQ5Z3yz`43=m6!brr4Ukx?Ohlm>rC@Rvk zskXs^Z9j=#S52e=<)U-sS2MgAk3DpS>@BFW+v~wffjPy9vsd(}((dnyfZaT@a?QyV zvNW+h7(kiXvcPGOE|}SxEdk)aCcmYb*2wZMiz!k&5zPfZ&J7^Gq64}c$1N%OD8R<; zyQVf({aPzpLV{IYZeTB@@cH=}skQiz@P^Mgzry#2PdKMU&B}R6F)<8qR{mZ*Tml}4 zGh~#um3D?GWaGAe{Ddu=D1z@wyw=EY*c=*K*DwnuxMP=z&&#mbpq*W_KLL-Bfq6hC zn#`BLk2a=`=Le%KG0+?r9H%lroha2FL}AHgE9OC81EcTox!6l+&8&{E$oFZy4pQTp z7W}sKX-V@u*gYdU>$I<=%?}_6@MEUa(Pm>u}ENPHDyg zpKP{iS1fNscahZ2?Fqqf&8GUTR@j!Ik5Gsy2(kbCD)Zh!4BQc$m>hT$=lbi)0I6rl zeJz1eoUUh5ngfeQ581eHOM_;Y7EN9@5Aj|Wles_R(RF;`IE6}th(i>p7Kbj+*V|-b zW$nBk=mgm>O~X$A2>V#p;^F)FXD#P9c`TzD=RH{qt<%Zm=FKlUNRPFtbee51shg$@ zlcu3)?R>d{;zred!q>@k}^+Jm5bCzcb}VK0yOiVTTo+dKpcRe z$PT_un?OM6pMonlOiL|`DyBe2;DQhlI5I)#M-mU% zfCI0HqO9bTqB(~}d$ahXzf-zs=$0#8AACZwQ{e4aKu*8_8)Zw(o(M=D`yTHOphkXF z(v`kDb2uQkI1EED@$|RkI7Z281f2)n>oDfV5}=0PxCI0_EC+BC3w({RKbiYAIF+Ju zI?izW>~bL99x&nYVWKYQ7Q0s;@%D4RA-nAf2!cN^)27- zZOLY|W|}A&RZ3N>tzAv=Y)mN(g8TUiB?jp*ac^7za0-{_sZ(vevMAy~&#Z^E+9Jkk zZnB%$hk8Vo;`R#YT639Kl2?rcC0df9e046G9yFhQOJB3?XVscSu07qD=Kg%S?12Y^ zTw8bv_`a|$wTz>x)vYT5w&U*bVOr@Msl!_ahJyN+U6Cip*AgU7OGNjRGr2+==7s_Tu@U_nRi*wbXCl zonmux&s+K1!$}(QEbaR{4Z0<~97_UF2v9iMynAJp(Iinlvx>*D4Yi%M zwRs5UNCfAYxD*1@mA3>pEc*01_V|vzNAEa!q4m|PVMUcg7)X&O)GAB7+lf=QqxLa6 zioHPT#nHT|YhJwZ(%Tjp1wH*L!rhYw;3^YIQXaN}wX`=a}(BHJqtp&01!0D>ZPsR7z0lU=)`-Lr0TXc9wqK zxqIfp>%ZLEL^dJw1JBQKkUY0RdCIWegx(*DgXp-tAyFvVo?A>?sj@WEG>4uvxU4Vh z2Y{rWsdb$a`AHPMBXi$Z1J}lNKHau-sWWf0N|wl*A}bZ>IIWjw4A;kmvUcizY?=Bg zooCjGE|q)m)|!WS$;75?BmUBLcV^0&8^3l-vhqMVU^Gt|4$@fd1Em8*8tFxN3}-!&pk^lw)SOYPDZgJ(P~+)Iq(NPM#B=$_(AlHTvW%1pAq#BcT27 zTCh_r;md21on`*k=0|a5fy$PN|HHS>aj57}Jv|j6Wdk6Ysaf_uAH;2Cy z94c)6ki>XM`|?vop$KNiPNf(%=mD#29ftlWA&()QenFJpVpi0{ple5smibcuhc9)J zW)rJ^X`sJ#hrcvy7pDh=4GpGp?cZtzm|FdUT%wl0`+HCk-vhvV?~II)H-~dXa7df0 zH`q|gP?O+oVhCtsm}^F^o_;y*|Iu$@@A}vQo-lvCkcaYpoZ_9rA#GW7wl#8#Ws12J zomIeGu-p4}^CHLJ9ILyH3Jf6hFC*^{x(cfSfP-dBz81U~+UY*+I2L`UBIe>q0K`iM zU6!7Xrkc<_igu}S2f>o4YL!E{M&Kci*{NTVk(Z&CbTJhDt{BQt}pMmPlY4JN+l*Tc;puc`G z4A(wm2(T*7X2GiE`IAC_fKbk?k}@OkoBDWvzw+hD-{IS$A@4X!v>ZYI5Gvin&~?cB zJZ}R4(Z*+8(n*kAZQP@9_#lMRgc%9mNaTr@Syd%156ahONmWuHc}NZ3W3}FsO08I! zv{xG`#{$NE@$L1rL&gn3__yh<~Zh8_~q!RGKMKW(c^Ct1j=qEa==n`UgzEME^eOQY!B5UE#u~X9$ z5|y>;(9MKbiIIC&zc;pEhN?HEA_l9-;+sx zGSKtGaEqn>Y!vYQkmrz1()9H2t@|oLV9^#3gbc&x3Sam2_*5m1#b8O4}w&Mi(V6nvkFBp4i*o)>7RF5saC2MOn_7~Qkdi$R!FuA+$XEOa#Bko z@>qCuM44k81de`WFqQc2=Y3UBXQT`;E#{1PJE%pBKq*21R-n>$Vvf~iB#G3rCBAdA z&1h*BhWZIaralXa0}5#4sSEEvk*I9o$)R{$jB{#|fgINOkej_|?ZTLwY*TqoSyh^rPd}f4s(DQ$ zC7=b6A5C&cpviH}y@hX&ZW@{vS#E29PGecbg?0ls+r=f)@>n3nIWECp1!G z5ovEMUoje`8@y062qKq^G)PR`IM#S-Tkn09U;d*xOZ%?Oo~XD;lb(|s_niUq=ft*J zm8YaGt#>P9%Hb-6q!NUVa6^nv|MLbF{hSke9eKuNEi#87I`A>=7mMIr@ycVQuoL|? zg}tikxQ4i$Vx(Tm#i{|m5B35f>tE;VXE@m@IFm9z32sdcE@a8-rMmM&T}{52*_FMu zn0k%j5|{TfK)^d~eIg<_l7Yum*U0t6RW}~_5ZEO*8{;LXCKPM?rC*{0@RgCRXwzy0 z8uFUR;M(;42?|{|^l@(*e|%K>F3V_U0Io4_2)GYOa}htROkpAcM;I^j?S2d z(*!wdm0pq3fZUPqKHC~4QhUbYTI!LPR(Fp15$C@F6V7&HE)6~&i;Yn$e*xcOz{P3p zz>pFt19)xrX&Kvp%X<&iqyZ5TqOM7r#vFur^T4cH7L0~4Bz{>L45CO6HFL{k&>ujsHK4!4CzdL zRTYmkvOmSiJ-WEg10{t~BduNhk%y~s&cq3fYjji(&F<6~uy~bOD?~WTcvUmW?p^2w zsc4>(BS+cI6<;ZwXjc1?vN4cee_?t4>_0*9J{h1pAnDc?7--N+h@_lR9co$O@A7kMNXYLlF=NjG^(HXFQbgdSl1z;XJ?5cnS-PAO@c|nKyrBTs0k$oWTL`L za^wS)PFkPD3UeP4TUX#5f}+Ok&;v#jqc8eReEW8rUDmZ1sbZvUAKYTu=T7v9*6L~( zr}EY;s7%ttN~t&of3mC#8;vmp^8p}$9@W`U$$n|`O(p^6XJxS2ogs}$CM-_QO`3|!~gQ_x$z%<*Z=_Q zpaw1~0(Ww@!PQoDW_a)52I^&V+r|Y>tsJbHI62~8%`)_`{y_f z7DMnSmJ2dP<5^Ji|R5JfQ{wB7ex zyQLocXN6VWR6I;QM0R1V#0B}n7H-vASRqHbFitiXWwDARF-9d`a_dw|O(q$}+DrHa6RlYCgEuTaEt&t*P`gV4eW`57fHguEWBTpw8 zxscX|FW zC&{SvofVE>9{gDEFVi25JQuBKP?BQ3_c65+$H}V-LKdoc^7SWcqNlxFxwRU$DkkVw z0yAgb9-*y*AM1H)oY8Z8ilu60`#AvK&v;B3FW^{leRc8daP{^#i-l(U&u0q&Ev<`S zrZ)h}@GrhAFklu`e~wk)PSzTu!0Lk$9x7bZjS-&~3;nn?I{Wi~m`KwJ+Gz|XU=)LJ zWGq}R?@1QTf_hm>x(wIPX|B1LnF{e3yPO1LTJkwP{lk_N*~*K?O-onJ`x4zg7G9a; zdOTUDmj~eTo5P$u1KdH~c=UP^$as-33@n@PmH8HI5+~(OD~{GTgC&4N%}A?FVYcH9z!dm>OK`C zfK@(Qb3`Sz4-NQGrem= zk(4?n7YmpwBq1qcr3?UM*h^Iz0)$z29$0}u#j_YRzQPG9slOQU9WA=H;1~yc5L5Miw;msi zFKv!X!sG9Xm4m@zGgC?vkGdr<-eexTRn$Z8L|0PXr-}>Ya=7%|vxJ7^C&FEdhb&J8 zR)`_BUsljoV=}{~0kUMAKltxhg2GGbaK~egX$mJvp<1KNV*jP^GEj~4^@z@Ir&P>q zY<@A8R}CyPb5TmTuqOIf-**APIjFv#y8N=Kt+Rz4T?W3+3;yTDDfS>gYK@Nd{pe$c zFH2UQ0{UPc71ZJ)^y&IB=>6NBKl@5-=%6ijhz?C;+XUe7I{zsnA>!*hqzONWf|}ldf?3>yPf`LULpz+0)SB+NukK zI+spG4VQAIkL_Bo(Pk>Nvuu6KLp;_jt*Mjvqu%;BW+!2qvaQAz3D-NTWG?BynSb-s z^5k2XnmNDls>**VbWS>?>Q6KMl6@HMkPf#Q5m!}-LCf6m2qdKb#K#~{OKSnlY=EG1 z4h5fATx>C7JxOGEHfBB_A)J6hlw;m4EgzihROovTY1#m5rEH3}Lb{ed*tp}$DWqDL zX!BLg6rAa7KAU~9g=plChy@U_qR5i~i>>XyKxpp%(x6|^%6M^CS(hBsIwKm5|I$|i zQRn1e382;{NJ(Vk5PNGT%pKgRjFG`<+cJi>TAPGb!kJlFJ|eiZq56?GXNIzK{Q2_W zatTgov9v($u+WJ3`I?<8rA7+Q%|Vx1$ZBh4X_?_` z>r`K%$o9a($KSmw<|fHiBT+vX&&^f6B?k?HK}Mxv9WF>ndc2CH!~^+?21u_N=+wpM*& z9aeX9LXF-K8~XRG@h6iGfwoNVHxSL*30?l1bswfiM{!*iSMC#7 zm!^#%x@;G1SIRq`W{4kO385m4tDUv{*aGIuWEvx>SB#6G#^HMH|%=E)0DB>Y87!RR~b0Dpa z6_gA3Tzcz~yE*iG_AC$UoK2YVnj^AV*6aJMr+|$xuBiGiOhgA+IFJU!0LYK~&1Tg@ z#|lp%B8^X~m(qsGvj)DI*=Ehcw~H4i9mrnIwL($AEt8c;B`CJ*0u!Wljz9i3qIjBe z4d+KC7+ItZdA}gxMQ0cP`b{0Ltn^rbX|k)o%6A(!LsY^T`C&8-?P*SAWDd-1EcB#k zRw%lloKjR)xNMU3z){xMG7pP`cHNr`PoEfnY_?P{#n-5sU@CCbnB!ffsQMLFLVxBG z(TUp}^;NNIL#%6ATIw)**^z=sfodd+EMy|f`sez5y&ZNwSnM_sx64o0+)9iR*8hs5 zj*!j>cP0!DOJHp;zD1Qg876eWrj!P3p?1I7CPw2Z=<9VmoSlzV7JRK6_8PVG^22H#0Z^Q5U{$ba{uUIOf>%fp@5ajf^VZP4n|isP+8cfAQT10Q)TT^jrl-jTquo zZTr&jN#W{lWdT;WxJO4(*x)zr`w&0`xnOrtGxjvWc?>pKWJq>OzMiQQ*J_$qddNw2 zmtCN{V_3{+2Y>CUuPj3mFDC1hx}73ABl>-el6D;hk)#_ z2U~LFLMZp$j0vdn(B$?{P?BT{8{>vK@*5Bq0d zR~NcZQLTe^^Mivkk@aB&SZ2_nZI3pCPTGj8OEvrs>FU}Da*k0ss&tWB zZRkL_!-p2!W*2Gcg#JD}2INnKs@ORZC|UiQ^f7^t@{a@*mC|n@bCUWwt;L&P&QNX2-S`u?zv|I#m*3<;VrF7XwCmtseAi(> zn4!L&iokLA-Gm$fB3(uP;Vv06<28%nNCI z)7Ww@yGV=zUM}R={$pg^bQ1aUVe40Qc(n2T>S>s^$mFPw8wSnS^YuxGHJ=q)ciadq zZtAWl>}y?Gw^n)wZOL>|U&-N^=}N;|v%bHty_Dz-^85`4RGgi+mQZi||hizE~Z0QyT-}HR@dn* zMe(}B(T@q_k3Qxv#G^RQ7=UanfA}-D_{>34c5%Dv?chZGw&#pUHzCE(CFM`-W)0?Z z^#-Lp{x>T%skyMKB1X>CTNW0mEmYdNRR9YK6D7@?1fV^Q;Gs`~lsyxGC7eBXv*72v z&ZIorzlS~qIZ73!>|Sby7JtM^z`CQ0*Ya(z4*2hEBmyCHG}l>{Iv_(_N?T6e)EbN+fo#HB?=w}M=0R))d1K3P+w zS0JCoTTm!cu?<`?tM)uil@tT4&WX8$L8hvW+ES!HQ1p&haa0Rk-&mftw;fut8%EEO z&k}(955K+W>%KLA@u%i@*4tw2qNwMsZ80cYFM5;_CXlYL8i) znO0|DQRvY2s{!MWjGf03N*;lcCaYvjS2ly0hgt?+3^Uv|+C&qC{M&2t|&%y0#a0dx!uqC$BwRSdB`$*oppGfe2T+{6lwRC*C!x)`#u zqsr+=t{R^BBskUxEBSD-iC=c*pBC7h#tmC7;@NdKK(C+wvhWOA**~{0tAAY!KIJ*; z`xu@E>i>w}lOAz{To#kYngFDyQbn(CCU;w%L&}La3^7)Dup~d)cEYvtjylttyP9=g zFlWsn_Bfa}5!Vp-d6%qGa!??g^zrlQa6|FJ&nVo)kZ3k#!B`PvQJeza3ymISdhDj1 zk*kBBwQaPCkp`U6sx{5Mi93T-3ZfU|X?z;xR08um>o?sJrJOp-T`t<*08s9GBxJO& zN77bxAT2bg#Ma@6zlq>DOyIk1?Ifv7J}>J=P2BYGRCTDCU&r#Rmwxps-XQ*4*7s%F zK{T?bPadDusXKc|WRiJ=5na~?sDQQFw6X@e?ob<8@+(Oc!T>ifJ>;JM zdv?(IM2G>}zx?nA2Ap`||D6OK)fFESt#(xK8DI7vc=4U&lbxJ0vDUGivs3x8FbVw7>YW7{M(I2HQu?sBnKDiSan+GN5)yMYpKM?!{tCgEDyiZK|A@P;XQRgAr zd5V~t9EZbNa&iuF8WZ=cpJO0{SjYeO)n6wMi!WCe^8$_wyZXl=uZxDIr7>6nP*_mu zQMp(+Xw9aFO^NLDRg9Z@f>9a|9BNq$l3GkuY=g-xC$sCD9s@OP5HrNw-@5Ki*+b71 z69FqT8&3mVUE`$>QV&}|ZB%0{urmcF8jn4G4BmRLu3(r9%BJkPK7W|u^tnp{srk3+ z3r|1xQbG|ESkp=_VXkgP6&5#~e6h}Y=z5l)0wSlo)MePm8_eS^tR_ z=`J}(QgR1r_$Lr3#;l)$t3H!_l&(Rk;lK*2^2apsrsuHrXCS(oWr(VVy|!qniY^O& zN|&!rv>Oq6xWpZA&^ZJm6W4Gt%ipy`i4qNdsAZ45ilIp7ena) zKMxgik(}eGd-+JL#d47QSXIB@Lt2^r)(N)CO`wO%@LP7UK3kEu&b0w&`?DMMUuO^y zSkB6x`UVL}1RFZ)yGC&iP5&3)3nXBe#S1={cUA+EDcS9s5f=RG?|8Q zEoke!Pc(`NV7o|iVW1pO+<8l>n0T+`>gs>Z{ZMdWyfS*Rf}Mw;m?#<5ys*F*cH3Ta z{*tFCrPe>*TB!HL8ixjhlcDNLp-GH7&Xm27|QYFP!h_ewqR3;v`czV)0w zeP(20-qXFSR+V?a@Lv1M(^4#2`}N>Wc@Bj?0lw?P^XbvUuUY^WJxAln+#h_vSDKVl z5lT-qb&;H6(9c&a{=<0fLb?qj#3r{vySGdZ(=8>E8QnV4pEa%a%5k66QrXPc84A3sbPJil zPCv1E&aC$jzu<{0s;s4GJJF@MiUf3W4o7H^A9TxM0RYG_g3>7%y}C7@JN1I0q4xR9 zb!KK&nJvW+w~z`wv?zIcnYd;>o}7sLgDL@PcX(`ltdMq9pJZP#$$4)Qeu1&CvLbHV z4f|6nqSa3t00a{4B}vif+KwSr#=QF28&&)-zAyezR+a`X-2AGlWn`*WbmcGns+I;L zA+2b)e+2dZi1Fcg5>WO?|2<5TwKNqad6$jW;h|r8JOyBfqSD76* zTsalSnfd)dK}zZYSK)~V;JZV4T4cQlvz#B5Dcrb>g9OYlZ`&+1X3#AW!C;k{EhP)1 zdl}6-{c7T8lp-2UHJg0xL+v9;KE)vt)=%K~7_k68R;VWddY@v!h?B>Oax15HJMDOe z?RiCuBB%006`M5hH>>Bp$Rn6k`3;szd;RF5H7pfa>bP}CmpFY!+jt(lr#2!U`mrKB zY>W{_Pb-@H;;-4Od4!XpM(Fo