From 89b1f97a6f9c204a044ef205636a214fc76dfd63 Mon Sep 17 00:00:00 2001 From: "douboer@gmail.com" Date: Sat, 21 Mar 2026 18:44:12 +0800 Subject: [PATCH] update at 2026-03-21 18:44:12 --- .gitignore | 1 + README.md | 49 +++ bootstrap-new-kindle.sh | 39 +- calendar/config/themes.json | 146 ------- calendar/scripts/export-theme-backgrounds.sh | 27 ++ .../scripts/generate-dashboard-manifest.mjs | 72 +++- calendar/src/components/CalendarCard.vue | 9 +- calendar/src/components/SimpleDashboard.vue | 34 +- calendar/src/components/WeatherCard.vue | 12 +- calendar/src/lib/icon-assets.ts | 2 + calendar/src/lib/weather.ts | 34 +- calendar/src/style.css | 130 ++++++ dash/KUAL/kindle-dash/menu.json | 9 +- dash/README.md | 10 + ...e-voyage-5.13.6-bootstrap-validation-zh.md | 72 +++- .../docs/kindle-voyage-5.13.6-bootstrap-zh.md | 31 +- .../docs/kindle-voyage-5.13.6-watchthis-zh.md | 374 ++++++++++-------- dash/src/dash.sh | 360 +++++++++++++++-- dash/src/launch-theme-from-kual.sh | 100 ++++- dash/src/local/env.sh | 46 ++- dash/src/local/fetch-dashboard.sh | 74 +++- dash/src/local/location-env.sh | 64 +++ dash/src/local/location-sync.sh | 164 ++++++++ dash/src/local/render-clock.sh | 5 + dash/src/local/sync-theme-backgrounds.sh | 149 +++++++ dash/src/local/theme-json.lua | 90 ++++- dash/src/local/theme-menu-service.sh | 39 +- dash/src/local/theme-sync.sh | 14 + dash/src/start.sh | 20 + dash/src/switch-theme.sh | 20 +- dash/staging/kterm/kterm-kindle-2.6.zip | Bin 0 -> 417136 bytes dash/staging/kterm/kterm-release-latest.json | 200 ++++++++++ .../post-jailbreak-root/dashboard/dash.sh | 360 +++++++++++++++-- .../dashboard/launch-theme-from-kual.sh | 100 ++++- .../dashboard/local/env.sh | 41 +- .../dashboard/local/fetch-dashboard.sh | 71 +++- .../dashboard/local/location-env.sh | 62 +++ .../dashboard/local/location-sync.sh | 163 ++++++++ .../dashboard/local/render-clock.sh | 5 + .../dashboard/local/sync-theme-backgrounds.sh | 149 +++++++ .../dashboard/local/theme-json.lua | 90 ++++- .../dashboard/local/theme-menu-service.sh | 39 +- .../dashboard/local/theme-sync.sh | 14 + .../post-jailbreak-root/dashboard/start.sh | 20 + .../dashboard/switch-theme.sh | 20 +- .../extensions/kindle-dash/menu.json | 9 +- scripts/kindle/ssh-fix-all-keys.sh | 10 +- ...ndle-dash.refresh-kindle-backgrounds.plist | 109 +++++ scripts/publish-calendar-dist.sh | 162 ++++++++ scripts/refresh-kindle-backgrounds.sh | 115 ++++++ scripts/sync-layered-clock-to-kindle.sh | 133 ++++++- todo.md | 4 +- 52 files changed, 3510 insertions(+), 562 deletions(-) create mode 100644 dash/src/local/location-env.sh create mode 100644 dash/src/local/location-sync.sh create mode 100644 dash/src/local/sync-theme-backgrounds.sh create mode 100644 dash/staging/kterm/kterm-kindle-2.6.zip create mode 100644 dash/staging/kterm/kterm-release-latest.json create mode 100644 dash/staging/post-jailbreak-root/dashboard/local/location-env.sh create mode 100644 dash/staging/post-jailbreak-root/dashboard/local/location-sync.sh create mode 100644 dash/staging/post-jailbreak-root/dashboard/local/sync-theme-backgrounds.sh create mode 100644 scripts/launchd/cn.biboer.kindle-dash.refresh-kindle-backgrounds.plist create mode 100644 scripts/publish-calendar-dist.sh create mode 100644 scripts/refresh-kindle-backgrounds.sh diff --git a/.gitignore b/.gitignore index aeee04e..36f9301 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ data/tts-cache/ apps/miniprogram/utils/opsEnv.js calendar/node_modules +calendar/kindle-backgrounds/ dash/backups dash/downloads diff --git a/README.md b/README.md index 57e3e60..ce874c6 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ - `simple` / `default` 等主题已经接入当前运行链路 - Kindle 侧采用“低频背景 + 本机时钟重绘”的分层渲染方案 +- 通过 `scripts/sync-layered-clock-to-kindle.sh` 同步主题时,天气背景会优先按 Kindle 当前网络出口位置导出 - 新机 bootstrap 方案已实现 - 新机 bootstrap 当前仍是“方案已实现,真机恢复出厂闭环未验证” - `launch-from-kual.sh` 与 `setsid` 脱离方案已经落地到代码 @@ -39,6 +40,7 @@ - 导出 `kindlebg.png` - 导出多主题背景包和 `themes.json` - 预览不同主题与方向 +- Web 预览页里的天气位置仍优先走浏览器定位;Kindle 实机同步时则优先读取 Kindle 侧 GeoIP 缓存 关键文件: @@ -56,6 +58,15 @@ - 切换主题、维护运行时主题状态 - 在需要时拉起主题菜单服务 +运行规则: + +- 时钟刷新原则:无论 `debug on` 还是 `debug off`,设备侧时钟都按分钟调度刷新一次 +- `debug on`:设备不进入真 suspend,保持常亮,并持续按分钟刷新 +- `debug off`:设备仍按分钟刷新时钟;普通分钟刷新只更新后台缓存,不主动把时钟刷到可视屏幕,刷新后立即回到低功耗调度 +- `debug off` 下短按 `power`:设备进入一个 5 分钟的可视窗口;窗口内时钟仍按分钟刷新,窗口结束后恢复到普通低功耗调度 +- 通过 `KUAL` 启动 dashboard 或切换主题后回到 calendar:同样进入一个 5 分钟的可视窗口,避免用户回来时看到静止时钟 +- 背景图与主题资源保持低频更新;分钟级高频更新只发生在本机时钟区域,不依赖网络 + 关键文件: - [dash.sh](/Users/gavin/kindle-dash/dash/src/dash.sh) @@ -161,6 +172,12 @@ sh bootstrap-new-kindle.sh prepare-storage --download-kterm --kterm-version late sh bootstrap-new-kindle.sh post-ssh -t simple -o portrait ``` +说明: + +- `post-ssh` 当前会同步 `dashboard` shell 脚本、`KUAL` 菜单和主题包 +- 它不会回补 `prepare-storage` 阶段预置的原生二进制,例如 `next-wakeup`、`xh` +- 所以这条路径默认前提仍然是:先跑过 `prepare-storage` + 注意:这条新机 bootstrap 方案当前仍未做“真机恢复出厂闭环验证”。 ## 常用命令 @@ -176,6 +193,31 @@ npm run build npm run export:themes ``` +### Web 端定时生成与发布 + +如果 Web 服务器需要每小时自动生成最新背景图,并把结果放到固定静态目录,使用: + +```sh +sh scripts/publish-calendar-dist.sh --output-dir /path/to/web-root --once +``` + +这条命令会: + +- 调用 `npm run export:themes` 生成最新 `kindlebg.png`、`themes///kindlebg.png` +- 同步 `calendar/dist/` 整个目录到你指定的 Web 根目录 + +如果希望常驻运行、每 60 分钟自动重跑一次,去掉 `--once`: + +```sh +sh scripts/publish-calendar-dist.sh --output-dir /path/to/web-root +``` + +说明: + +- 当前导图依赖 `calendar/scripts/export-kindle-background.swift`,因此这条自动发布链路需要运行在 macOS 上 +- 如果你的线上静态服务器是 Linux,只适合把“发布目录”指到该 Linux 机器挂载出来的目录,或者先在 macOS 上生成后再额外同步 +- Web 服务器应该直接服务这个发布目录,而不是只服务 `vite build` 产出的 HTML;否则 `.png` 路径可能回落成 `index.html` + ### 主题与截图 ```sh @@ -194,6 +236,10 @@ sh bootstrap-new-kindle.sh prepare-storage --download-kterm --kterm-version late sh bootstrap-new-kindle.sh post-ssh -t simple -o portrait ``` +补充: + +- 如果还要执行 `--start-dashboard`,默认同样要求设备上已经有 `prepare-storage` 预置的完整 dashboard 基础运行时 + ### SSH 恢复 如果 Kindle 上已经有 `KTerm`,但外部 SSH 不通: @@ -271,3 +317,6 @@ sh -n snapshot.sh 3. `ssh kindle` 依赖当前网络和 IP;换 Wi‑Fi 后可能要重新确认地址或 SSH 配置 4. `KUAL -> Dashboard` 与 `Dashboard -> 原生 UI/KUAL` 的边界切换在 `Kindle Voyage 5.13.6` 上仍不稳定 5. `stop.sh` 当前必须走保守恢复路径,实验性的“快速切换”方案已在 `2026-03-17` 撤回 +6. Voyage 右上角系统状态栏当前仍可能短暂闪现,顶部遮罩还没有做到完全压住 +7. 天气预报的位置当前使用 Kindle 侧 GeoIP 做“市级近似定位”,结果不保证精确到真实街道或精确城区 +8. 当前架构下,分钟级时钟刷新需要设备被唤醒;而设备一旦被唤醒,屏幕/灯光会一起进入可视态,因此暂时做不到“不亮灯唤醒并肉眼可见更新时钟” diff --git a/bootstrap-new-kindle.sh b/bootstrap-new-kindle.sh index e6d6ce8..6608772 100644 --- a/bootstrap-new-kindle.sh +++ b/bootstrap-new-kindle.sh @@ -29,7 +29,7 @@ print_usage() { 模式: all 默认。能预置 USB 存储就先预置;能连 SSH 就继续做 SSH 后半段 prepare-storage 只做 USB 存储预置 - post-ssh 只做 SSH 打通后的自动化收尾 + post-ssh 只做 SSH 打通后的自动化收尾;默认要求设备上已存在 prepare-storage 预置的 dashboard 基础运行时 选项: -v, --volume Kindle 挂载目录,默认 /Volumes/Kindle @@ -39,8 +39,8 @@ print_usage() { --kterm-package 指定 KTerm 安装包;官方 release 用 .zip,也兼容外部 .bin --download-kterm 在 Mac 侧联网下载 KTerm 到 dash/staging/kterm/,再预置到 Kindle --kterm-version 下载指定 KTerm 版本;默认 latest - --no-background SSH 阶段不同步后立即切主题出图 - --start-dashboard SSH 阶段额外后台启动 dashboard 主循环 + --no-background SSH 阶段同步后不立即切主题出图 + --start-dashboard SSH 阶段额外后台启动 dashboard 主循环;默认要求设备上已有完整 dashboard 运行时 -h, --help 查看帮助 说明: @@ -66,6 +66,11 @@ print_usage() { 6. 对这台 Voyage 5.13.6,脚本默认优先选择“不带 armhf 后缀”的 zip。 7. 如果脚本没有检测到 KTerm 包,会明确提示“这一步仍需手工补装 KTerm”。 +关于 post-ssh: + 1. 它当前会同步 dashboard 的 shell 脚本、KUAL 菜单和主题包。 + 2. 它不会回补 prepare-storage 阶段预置的原生二进制,例如 next-wakeup、xh。 + 3. 因此最稳的用法仍然是:先跑 prepare-storage,完成设备侧步骤后,再跑 post-ssh。 + 推荐操作顺序: 阶段 A:先做 USB 预置 @@ -86,12 +91,14 @@ print_usage() { 1. 恢复出厂。 2. 语言只选 English (United Kingdom)。 3. 到 Wi-Fi 页面时,不要真的联网;先按 WatchThis 文档进入 demo mode。 - 4. 第一次出现 Add Content / Sideload Content 时,只点 Done,不要接 USB。 - 5. 遇到 misconfiguration / Configure Device 时,执行隐藏手势回到可操作界面。 - 6. 再次进入 ;demo -> Sideload Content,这一次才是真正导入 payload 的时机。 - 因为阶段 A 已经预置好 .demo 内容,这里不需要再从 Mac 手工拷文件。 - 7. 退出 demo menu 后,进入 Help & User Guides -> Get Started 触发越狱。 - 8. 越狱成功后,Kindle 根目录应出现 mkk、libkh、rp。 + 4. 搜索 ;demo,进入 demo menu -> Sideload Content。 + 5. 到这个页面后再接 USB;因为阶段 A 已经预置好 .demo 内容,这里只需确认文件存在。 + 6. 弹出 Kindle,在设备上点 Done,退出 demo menu。 + 7. 进入 ;dsts -> Help & User Guides -> Get Started。 + 8. 按设备提示继续完成 register this demo -> Skip -> standard。 + 9. 重启后如果看到 Configure Device,用隐藏手势回到主页。 + 10. 搜索 ;uzb,再接 USB,把 Update_hotfix_watchthis_custom.bin 放到根目录。 + 11. 弹出设备后,进入 ;dsts -> Device Options -> Update Your Kindle。 阶段 C:安装 KUAL / MRPI / USBNetwork / dashboard 1. 在 Kindle 首页搜索: @@ -119,11 +126,12 @@ print_usage() { 1. 执行: sh bootstrap-new-kindle.sh post-ssh -t simple -o portrait 2. 预期结果: - - 自动同步 dashboard 运行时和主题包 + - 自动同步 dashboard shell 脚本、KUAL 菜单和主题包 - Kindle 立即切到 simple / portrait - 屏幕马上显示背景和时钟 3. 如果还希望后台常驻 dashboard 主循环,再执行: sh bootstrap-new-kindle.sh post-ssh -t simple -o portrait --start-dashboard + 这一步默认建立在 prepare-storage 已经把完整 dashboard 基础运行时放进设备上的前提上。 最省事的直接用法: 1. USB 挂载时先运行: @@ -135,11 +143,12 @@ print_usage() { 这时它会自动继续做 SSH 后半段。 最容易做错的地方: - 1. 第一次 Add Content / Sideload Content 只能点 Done,不能在这一步导 payload。 - 2. 真正导 payload 的时机,是隐藏手势返回后,再次进入 ;demo -> Sideload Content。 + 1. `Get Started` 只负责触发越狱脚本;真正退出 demo 状态还要再执行一次 `Update Your Kindle` 安装 custom hotfix。 + 2. `Update Your Kindle` 之前,先确认根目录里是真正的 `Update_hotfix_watchthis_custom.bin`,不要把 `._Update_hotfix_watchthis_custom.bin` 误当成正确文件。 3. 首次 SSH 最稳的入口是 KTerm,不是 USB 直连盲试。 4. post-ssh 阶段如果不带 -t/-o,会退回 themes.json 里的默认主题和方向。 5. 如果本轮没有预置 KTerm 包,阶段 C 结束后仍需你手工补装 KTerm。 + 6. post-ssh 不是“从零补齐 dashboard”的入口;next-wakeup、xh 这类原生二进制仍来自 prepare-storage。 示例: sh bootstrap-new-kindle.sh prepare-storage @@ -465,7 +474,7 @@ print_post_ssh_summary() { SSH 阶段已完成: - 主机:$HOST_TARGET -- 已同步 dashboard 运行时与主题包 +- 已同步 dashboard shell 脚本、KUAL 菜单与主题包 - 当前用于出图的主题:$RESOLVED_THEME_ID / $RESOLVED_ORIENTATION 如果你要继续验证: @@ -477,7 +486,7 @@ EOF post_ssh() { if ! ssh_reachable; then - echo "当前还无法通过 SSH 连接 $HOST_TARGET。" >&2 + echo "当前还无法通过 SSH 连接 ${HOST_TARGET}。" >&2 echo "请先在 Kindle 上连上 Wi-Fi,并在 KTerm 执行 sh /mnt/us/ssh-force-dropbear-22.sh" >&2 exit 1 fi @@ -485,7 +494,7 @@ post_ssh() { log_step "SSH" "修复设备侧 SSH 辅助脚本权限与 authorized_keys" prepare_remote_helpers - log_step "同步" "同步 dashboard 运行时和主题包到 Kindle" + log_step "同步" "同步 dashboard shell 脚本、KUAL 菜单和主题包到 Kindle" sync_dashboard_runtime if [ "$SHOW_BACKGROUND" = true ]; then diff --git a/calendar/config/themes.json b/calendar/config/themes.json index 1cc35a0..dad3873 100644 --- a/calendar/config/themes.json +++ b/calendar/config/themes.json @@ -75,152 +75,6 @@ } } }, - { - "id": "paper", - "label": "Paper", - "preview": { - "pageBackground": "#f2eee5", - "paper": "#fcfaf4", - "panelBackground": "#fffdf8", - "frameStroke": "#7e6b57", - "frameStrokeStrong": "#5f5143", - "frameMuted": "rgba(126, 107, 87, 0.32)", - "mutedInk": "#5a5148", - "badgeFill": "#f3ede0", - "bodyFont": "'Songti SC', 'STSong', serif", - "displayFont": "'Baskerville', 'Times New Roman', 'Songti SC', serif", - "titleFont": "'Songti SC', 'STSong', serif", - "cardRadius": "1.7rem", - "panelRadius": "1.1rem" - }, - "variants": { - "portrait": { - "devicePlacement": "logo_bottom", - "viewport": { - "width": 1072, - "height": 1448 - }, - "backgroundPath": "themes/paper/portrait/kindlebg.png", - "clock": { - "x": 347, - "y": 55, - "width": 220, - "height": 220, - "faceRadiusRatio": 0.47, - "faceStroke": 3, - "tickOuterInset": 6, - "majorTickLength": 14, - "minorTickLength": 7, - "majorTickThickness": 4, - "minorTickThickness": 2, - "hourLengthRatio": 0.48, - "minuteLengthRatio": 0.72, - "hourThickness": 9, - "minuteThickness": 5, - "centerRadius": 7 - } - }, - "landscape": { - "devicePlacement": "logo_right", - "viewport": { - "width": 1448, - "height": 1072 - }, - "backgroundPath": "themes/paper/landscape/kindlebg.png", - "clock": { - "x": 659, - "y": 57, - "width": 220, - "height": 220, - "faceRadiusRatio": 0.47, - "faceStroke": 3, - "tickOuterInset": 6, - "majorTickLength": 14, - "minorTickLength": 7, - "majorTickThickness": 4, - "minorTickThickness": 2, - "hourLengthRatio": 0.48, - "minuteLengthRatio": 0.72, - "hourThickness": 9, - "minuteThickness": 5, - "centerRadius": 7 - } - } - } - }, - { - "id": "classic", - "label": "Classic", - "preview": { - "pageBackground": "#ece6da", - "paper": "#ffffff", - "panelBackground": "#fefefe", - "frameStroke": "#3d352c", - "frameStrokeStrong": "#1f1a15", - "frameMuted": "rgba(61, 53, 44, 0.3)", - "mutedInk": "#3d352c", - "badgeFill": "#f3efe8", - "bodyFont": "'PingFang SC', 'Hiragino Sans GB', 'Noto Sans SC', sans-serif", - "displayFont": "'Palatino Linotype', 'Book Antiqua', 'Songti SC', serif", - "titleFont": "'Palatino Linotype', 'Book Antiqua', 'Songti SC', serif", - "cardRadius": "1.25rem", - "panelRadius": "0.92rem" - }, - "variants": { - "portrait": { - "devicePlacement": "logo_bottom", - "viewport": { - "width": 1072, - "height": 1448 - }, - "backgroundPath": "themes/classic/portrait/kindlebg.png", - "clock": { - "x": 347, - "y": 55, - "width": 220, - "height": 220, - "faceRadiusRatio": 0.47, - "faceStroke": 3, - "tickOuterInset": 6, - "majorTickLength": 14, - "minorTickLength": 7, - "majorTickThickness": 4, - "minorTickThickness": 2, - "hourLengthRatio": 0.48, - "minuteLengthRatio": 0.72, - "hourThickness": 9, - "minuteThickness": 5, - "centerRadius": 7 - } - }, - "landscape": { - "devicePlacement": "logo_right", - "viewport": { - "width": 1448, - "height": 1072 - }, - "backgroundPath": "themes/classic/landscape/kindlebg.png", - "clock": { - "x": 659, - "y": 57, - "width": 220, - "height": 220, - "faceRadiusRatio": 0.47, - "faceStroke": 3, - "tickOuterInset": 6, - "majorTickLength": 14, - "minorTickLength": 7, - "majorTickThickness": 4, - "minorTickThickness": 2, - "hourLengthRatio": 0.48, - "minuteLengthRatio": 0.72, - "hourThickness": 9, - "minuteThickness": 5, - "centerRadius": 7 - } - } - } - }, { "id": "simple", "label": "Simple", diff --git a/calendar/scripts/export-theme-backgrounds.sh b/calendar/scripts/export-theme-backgrounds.sh index b4c8f06..e9af85a 100644 --- a/calendar/scripts/export-theme-backgrounds.sh +++ b/calendar/scripts/export-theme-backgrounds.sh @@ -4,12 +4,15 @@ set -eu ROOT_DIR="$(CDPATH= cd -- "$(dirname "$0")/../.." && pwd)" CALENDAR_DIR="$ROOT_DIR/calendar" DIST_DIR="$CALENDAR_DIR/dist" +KINDLE_BACKGROUNDS_DIR="$CALENDAR_DIR/kindle-backgrounds" PORT=${PORT:-4173} SWIFT_SCRIPT="$CALENDAR_DIR/scripts/export-kindle-background.swift" THEMES_SOURCE="$CALENDAR_DIR/config/themes.json" THEME_FILTER="" ORIENTATION_FILTER="" +LOCATION_LAT="" +LOCATION_LON="" print_usage() { cat <<'EOF' @@ -19,12 +22,15 @@ print_usage() { 选项: --theme 只导出指定主题 --orientation 只导出指定方向;必须和 --theme 一起使用 + --location-lat 导图时显式覆盖天气定位纬度 + --location-lon 导图时显式覆盖天气定位经度 -h, --help 查看帮助 示例: sh scripts/export-theme-backgrounds.sh sh scripts/export-theme-backgrounds.sh --theme simple sh scripts/export-theme-backgrounds.sh --theme simple --orientation portrait + sh scripts/export-theme-backgrounds.sh --location-lat 30.274084 --location-lon 120.15507 EOF } @@ -38,6 +44,14 @@ while [ "$#" -gt 0 ]; do shift ORIENTATION_FILTER=${1:?"missing orientation"} ;; + --location-lat) + shift + LOCATION_LAT=${1:?"missing location latitude"} + ;; + --location-lon) + shift + LOCATION_LON=${1:?"missing location longitude"} + ;; -h|--help) print_usage exit 0 @@ -57,6 +71,11 @@ if [ -n "$ORIENTATION_FILTER" ] && [ -z "$THEME_FILTER" ]; then exit 1 fi +if { [ -n "$LOCATION_LAT" ] && [ -z "$LOCATION_LON" ]; } || { [ -z "$LOCATION_LAT" ] && [ -n "$LOCATION_LON" ]; }; then + echo "--location-lat 和 --location-lon 必须同时提供。" >&2 + exit 1 +fi + selection_output=$( node --input-type=module -e " import fs from 'node:fs'; @@ -143,6 +162,7 @@ fi cd "$CALENDAR_DIR" npm run build >/dev/null +mkdir -p "$KINDLE_BACKGROUNDS_DIR" python3 -m http.server "$PORT" -d "$DIST_DIR" >/tmp/kindle-calendar-http.log 2>&1 & SERVER_PID=$! @@ -153,8 +173,15 @@ sleep 1 printf '%s\n' "$EXPORT_ITEMS" | while IFS="$(printf '\t')" read -r theme_id orientation background_path; do out_png="$DIST_DIR/$background_path" out_region="${out_png%.png}.clock-region.json" + flat_background_png="$KINDLE_BACKGROUNDS_DIR/${theme_id}-${orientation}.png" url="http://127.0.0.1:$PORT/?mode=background&theme=$theme_id&orientation=$orientation" + if [ -n "$LOCATION_LAT" ] && [ -n "$LOCATION_LON" ]; then + url="${url}&location-lat=${LOCATION_LAT}&location-lon=${LOCATION_LON}" + fi /usr/bin/swift "$SWIFT_SCRIPT" "$url" "$out_png" "$out_region" >/dev/null + # Web 侧额外维护一份扁平命名的背景图目录,方便 nginx 单独暴露给 Kindle 拉图。 + # 主题 JSON 会把 background.url 指向这里,例如 /kindle-backgrounds/simple-portrait.png。 + cp "$out_png" "$flat_background_png" # 根目录的 kindlebg.png / clock-region.json 只给默认主题兜底使用。 # 定向导出其它主题时不覆盖它,避免把默认主题的运行时入口意外改掉。 diff --git a/calendar/scripts/generate-dashboard-manifest.mjs b/calendar/scripts/generate-dashboard-manifest.mjs index 999d14e..61e9f34 100644 --- a/calendar/scripts/generate-dashboard-manifest.mjs +++ b/calendar/scripts/generate-dashboard-manifest.mjs @@ -9,12 +9,14 @@ const clockRegionPath = path.join(distDir, 'clock-region.json'); const themesSourcePath = path.resolve(currentDir, '../config/themes.json'); const themesDistPath = path.join(distDir, 'themes.json'); const themesDir = path.join(distDir, 'themes'); +const kindleBackgroundsDir = path.resolve(currentDir, '../kindle-backgrounds'); const dashboardBaseUrl = 'https://shell.biboer.cn:20001'; const themesSource = JSON.parse(fs.readFileSync(themesSourcePath, 'utf8')); const generatedAt = new Date().toISOString(); -const defaultVariant = themesSource.themes.find((theme) => theme.id === themesSource.defaultThemeId)?.variants?.[themesSource.defaultOrientation]; -const defaultDeviceClock = defaultVariant ? toDeviceClock(defaultVariant, themesSource.defaultOrientation) : null; +const defaultTheme = themesSource.themes.find((theme) => theme.id === themesSource.defaultThemeId); +const defaultVariant = defaultTheme?.variants?.[themesSource.defaultOrientation]; +const defaultDeviceClock = defaultVariant ? buildRuntimeClock(defaultTheme.id, themesSource.defaultOrientation, defaultVariant) : null; const defaultClockRegion = defaultVariant ? { x: defaultDeviceClock.x, @@ -95,30 +97,74 @@ function toDeviceClock(variant, orientation) { }; } +function resolveVariantClock(themeId, orientation, variant) { + const regionPath = path.join(distDir, 'themes', themeId, orientation, 'kindlebg.clock-region.json'); + const exportedRegion = fs.existsSync(regionPath) + ? JSON.parse(fs.readFileSync(regionPath, 'utf8')) + : null; + + return { + ...variant, + clock: { + ...variant.clock, + ...(exportedRegion + ? { + x: exportedRegion.x, + y: exportedRegion.y, + width: exportedRegion.width, + height: exportedRegion.height, + } + : {}), + }, + }; +} + +function buildRuntimeClock(themeId, orientation, variant) { + const resolvedVariant = resolveVariantClock(themeId, orientation, variant); + const hasExportedRegion = + resolvedVariant.clock.x !== variant.clock.x || + resolvedVariant.clock.y !== variant.clock.y || + resolvedVariant.clock.width !== variant.clock.width || + resolvedVariant.clock.height !== variant.clock.height; + + if (orientation === 'landscape' && hasExportedRegion) { + return { + ...resolvedVariant.clock, + rotationDegrees: 90, + }; + } + + return toDeviceClock(resolvedVariant, orientation); +} + function buildThemeConfig(theme) { return { id: theme.id, label: theme.label, updatedAt: generatedAt, variants: Object.fromEntries( - Object.entries(theme.variants).map(([orientation, variant]) => [ - orientation, - { - devicePlacement: variant.devicePlacement, - background: { - path: variant.backgroundPath, - url: `${dashboardBaseUrl}/${variant.backgroundPath}`, - refreshIntervalMinutes: 120, + Object.entries(theme.variants).map(([orientation, variant]) => { + return [ + orientation, + { + devicePlacement: variant.devicePlacement, + background: { + // Kindle 端统一走扁平目录,避免设备侧自己拼主题子目录规则。 + path: `kindle-backgrounds/${theme.id}-${orientation}.png`, + url: `${dashboardBaseUrl}/kindle-backgrounds/${theme.id}-${orientation}.png`, + refreshIntervalMinutes: 120, + }, + clock: buildRuntimeClock(theme.id, orientation, variant), }, - clock: toDeviceClock(variant, orientation), - }, - ]), + ]; + }), ), }; } fs.mkdirSync(distDir, { recursive: true }); fs.mkdirSync(themesDir, { recursive: true }); +fs.mkdirSync(kindleBackgroundsDir, { recursive: true }); fs.writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, 'utf8'); fs.writeFileSync(themesDistPath, `${JSON.stringify(themesIndex, null, 2)}\n`, 'utf8'); diff --git a/calendar/src/components/CalendarCard.vue b/calendar/src/components/CalendarCard.vue index aad47fc..76fc3e5 100644 --- a/calendar/src/components/CalendarCard.vue +++ b/calendar/src/components/CalendarCard.vue @@ -36,7 +36,9 @@ function subLabelTone(cell: CalendarModel['cells'][number]) {

{{ model.weekdayLabel }}

- +
+ +
@@ -110,6 +112,11 @@ function subLabelTone(cell: CalendarModel['cells'][number]) { gap: 1rem; } +.calendar-card__clock-wrap { + width: 220px; + height: 220px; +} + .calendar-card__headline { display: grid; align-content: start; diff --git a/calendar/src/components/SimpleDashboard.vue b/calendar/src/components/SimpleDashboard.vue index 1d0851a..46c6aee 100644 --- a/calendar/src/components/SimpleDashboard.vue +++ b/calendar/src/components/SimpleDashboard.vue @@ -109,7 +109,9 @@ function isCompactCalendarLabel(label: string) {
- +
+ +
@@ -176,7 +178,9 @@ function isCompactCalendarLabel(label: string) {
- +
+ +
@@ -254,7 +258,8 @@ function isCompactCalendarLabel(label: string) { height: 480px; justify-content: center; gap: 16px; - padding: 0 16px; + /* 竖版顶部区按 Figma 节点 284:7 额外下压 32px。 */ + padding: 32px 16px 0; justify-self: start; align-self: start; } @@ -275,6 +280,17 @@ function isCompactCalendarLabel(label: string) { gap: 24px; } +.simple-dashboard__clock-wrap { + width: 480px; + height: 480px; +} + +.simple-dashboard__clock-wrap--portrait { + /* simple 竖版时钟整体下移 16px,和顶部信息区拉开间距。 */ + padding-top: 16px; + box-sizing: border-box; +} + .simple-dashboard__summary { min-width: 0; } @@ -304,6 +320,10 @@ function isCompactCalendarLabel(label: string) { display: flex; align-items: flex-end; gap: 24px; + width: 100%; + box-sizing: border-box; + /* 横版日期标题组需要保留左侧 24px 对齐边距。 */ + padding-left: 24px; } .simple-dashboard__day { @@ -370,7 +390,10 @@ function isCompactCalendarLabel(label: string) { align-items: center; gap: 24px; width: 480px; + box-sizing: border-box; min-width: 0; + /* 横版地点行比标题再向右缩进一档。 */ + padding-left: 48px; } .simple-dashboard__location-icon { @@ -395,7 +418,7 @@ function isCompactCalendarLabel(label: string) { } .simple-dashboard__location--landscape { - width: 424px; + flex: 1 1 auto; font-size: 56px; line-height: 57px; } @@ -406,7 +429,10 @@ function isCompactCalendarLabel(label: string) { gap: 24px; width: 480px; height: 99px; + box-sizing: border-box; overflow: visible; + /* 横版天气摘要整体向右留出 24px,与 Figma 左列对齐。 */ + padding-left: 24px; } .simple-dashboard__metric { diff --git a/calendar/src/components/WeatherCard.vue b/calendar/src/components/WeatherCard.vue index 4612f29..ee6dabe 100644 --- a/calendar/src/components/WeatherCard.vue +++ b/calendar/src/components/WeatherCard.vue @@ -4,6 +4,7 @@ import { computed } from 'vue'; import WeatherGlyph from './WeatherGlyph.vue'; import { HUMIDITY_ICON_ASSET, + PM25_ICON_ASSET, SUNRISE_ICON_ASSET, SUNSET_ICON_ASSET, VISIBILITY_ICON_ASSET, @@ -45,7 +46,7 @@ const metrics = computed(() => { ? '暂无' : `${props.weather.aqi}${props.weather.aqiLabel}`, accent: 'metric-pill--air', - icon: null, + icon: PM25_ICON_ASSET, }, { label: '能见度', @@ -131,7 +132,6 @@ function forecastKind(day: ForecastDay) { alt="" aria-hidden="true" /> - {{ metric.label }}

{{ metric.value }}

@@ -245,14 +245,6 @@ function forecastKind(day: ForecastDay) { filter: brightness(0) saturate(100%); } -.metric-pill__dot { - width: 0.42rem; - height: 0.42rem; - border-radius: 50%; - background: currentColor; - flex: 0 0 auto; -} - .weather-card__forecast { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); diff --git a/calendar/src/lib/icon-assets.ts b/calendar/src/lib/icon-assets.ts index 25d7388..bb4d437 100644 --- a/calendar/src/lib/icon-assets.ts +++ b/calendar/src/lib/icon-assets.ts @@ -8,6 +8,7 @@ import lightRainIcon from '../../../assets/小雨.svg'; import nightIcon from '../../../assets/晚上.svg'; import clearIcon from '../../../assets/晴天.svg'; import humidityIcon from '../../../assets/湿度.svg'; +import pm25Icon from '../../../assets/simple/pm25.svg'; import visibilityIcon from '../../../assets/能见度.svg'; import sleetIcon from '../../../assets/雨夹雪.svg'; import windSpeedIcon from '../../../assets/风速.svg'; @@ -79,3 +80,4 @@ export const WIND_SPEED_ICON_ASSET = windSpeedIcon; export const SUNRISE_ICON_ASSET = sunriseIcon; export const SUNSET_ICON_ASSET = sunsetIcon; export const VISIBILITY_ICON_ASSET = visibilityIcon; +export const PM25_ICON_ASSET = pm25Icon; diff --git a/calendar/src/lib/weather.ts b/calendar/src/lib/weather.ts index d02a3ef..63e1af1 100644 --- a/calendar/src/lib/weather.ts +++ b/calendar/src/lib/weather.ts @@ -26,6 +26,11 @@ export interface WeatherSnapshot { aqiLabel: string; } +interface SearchLocationOverride { + latitude: number; + longitude: number; +} + const DEFAULT_LOCATION: LocationCoordinates = { latitude: 30.274084, longitude: 120.15507, @@ -193,7 +198,34 @@ async function reverseGeocodeLocation(latitude: number, longitude: number) { } } -export async function resolveLocation(): Promise { +function parseSearchLocationOverride(search: string): SearchLocationOverride | null { + const params = new URLSearchParams(search); + const latitude = Number(params.get('location-lat')); + const longitude = Number(params.get('location-lon')); + + if (!Number.isFinite(latitude) || !Number.isFinite(longitude)) { + return null; + } + + return { + latitude, + longitude, + }; +} + +export async function resolveLocation(search = window.location.search): Promise { + const searchOverride = parseSearchLocationOverride(search); + + if (searchOverride) { + const label = await reverseGeocodeLocation(searchOverride.latitude, searchOverride.longitude); + + return { + latitude: searchOverride.latitude, + longitude: searchOverride.longitude, + label: label ?? '当前位置', + }; + } + if (!('geolocation' in navigator)) { return DEFAULT_LOCATION; } diff --git a/calendar/src/style.css b/calendar/src/style.css index 7c1d810..1db16c4 100644 --- a/calendar/src/style.css +++ b/calendar/src/style.css @@ -153,6 +153,86 @@ img { grid-column: 1 / -1; } +.page-shell--default .dashboard-grid--portrait { + /* default 纵版给底部额外留出 32px,避免鸡汤卡片继续贴底溢出。 */ + gap: 1rem; + padding: 1.3rem 1.3rem 32px; + grid-template-rows: minmax(0, 1fr) 232px; +} + +.page-shell--default .dashboard-grid--portrait .calendar-card { + /* 顶部日历区整体压紧一点,把高度让给底部鸡汤。 */ + gap: 32px; +} + +.page-shell--default .dashboard-grid--portrait .calendar-card__hero { + grid-template-columns: minmax(0, 1fr) 272px; + gap: 0; +} + +.page-shell--default .dashboard-grid--portrait .calendar-card__day { + font-size: calc(5.9rem * var(--theme-font-scale, 1)); +} + +.page-shell--default .dashboard-grid--portrait .calendar-card__lunar-day, +.page-shell--default .dashboard-grid--portrait .calendar-card__weekday { + font-size: calc(1.64rem * var(--theme-font-scale, 1)); +} + +.page-shell--default .dashboard-grid--portrait .calendar-card__clock-wrap { + width: 272px; + height: 272px; + align-self: center; +} + +.page-shell--default .dashboard-grid--portrait .calendar-card__clock-wrap :is(.analog-clock) { + transform: scale(1.2363636364); + transform-origin: top left; +} + +.page-shell--default .dashboard-grid--portrait .weather-card { + /* 纵版天气卡压缩预报和指标区,给底部鸡汤腾空间。 */ + grid-template-rows: auto minmax(0, 1.08fr) minmax(0, 0.72fr) minmax(0, 0.82fr); + gap: 0.54rem; +} + +.page-shell--default .dashboard-grid--portrait .weather-card__hero { + gap: 0.62rem; + padding: 0.7rem 0.78rem; +} + +.page-shell--default .dashboard-grid--portrait .weather-card__forecast { + gap: 0.28rem; +} + +.page-shell--default .dashboard-grid--portrait .forecast-pill { + padding: 0.26rem 0.1rem; +} + +.page-shell--default .dashboard-grid--portrait .forecast-pill__label { + font-size: calc(0.82rem * var(--theme-font-scale, 1) * var(--forecast-pill-scale, 1)); +} + +.page-shell--default .dashboard-grid--portrait .forecast-pill__temp { + font-size: calc(1rem * var(--theme-font-scale, 1) * var(--forecast-pill-scale, 1)); +} + +.page-shell--default .dashboard-grid--portrait .weather-card__fact-icon, +.page-shell--default .dashboard-grid--portrait .metric-pill__icon { + width: 2rem; + height: 2rem; +} + +.page-shell--default .dashboard-grid--portrait .quote-card__icon { + width: 1.8rem; + height: 1.8rem; +} + +.page-shell--default .weather-card__hero-main .glyph--large { + width: 5.6rem; + height: 5.6rem; +} + .dashboard-grid--landscape { grid-template-columns: minmax(0, 1.24fr) minmax(21rem, 0.76fr); grid-template-rows: minmax(0, 1fr) 216px; @@ -196,6 +276,56 @@ img { font-size: calc(6.2rem * var(--theme-font-scale, 1)); } +.page-shell--default .dashboard-grid--landscape .calendar-card { + /* default 横版顶部整体下压,避开 Kindle 右上角状态栏遮罩。 */ + gap: 32px; + padding-top: 0; +} + +.page-shell--default .dashboard-grid--landscape .calendar-card__hero { + grid-template-columns: minmax(0, 1fr) 320px; + align-items: end; + gap: 40px; +} + +.page-shell--default .dashboard-grid--landscape .calendar-card__headline { + padding-left: 48px; + gap: 0.5rem; +} + +.page-shell--default .dashboard-grid--landscape .calendar-card__day { + font-size: calc(9rem * var(--theme-font-scale, 1)); + line-height: 0.78; +} + +.page-shell--default .dashboard-grid--landscape .calendar-card__lunar-day, +.page-shell--default .dashboard-grid--landscape .calendar-card__weekday { + font-size: calc(2.75rem * var(--theme-font-scale, 1)); + line-height: 1; +} + +.page-shell--default .dashboard-grid--landscape .calendar-card__clock-wrap { + width: 320px; + height: 320px; + align-self: center; +} + +.page-shell--default .dashboard-grid--landscape .calendar-card__clock-wrap :is(.analog-clock) { + transform: scale(1.4545454545); + transform-origin: top left; +} + +.page-shell--default .dashboard-grid--landscape .weather-card__fact-icon, +.page-shell--default .dashboard-grid--landscape .metric-pill__icon { + width: 2rem; + height: 2rem; +} + +.page-shell--default .dashboard-grid--landscape .quote-card__icon { + width: 1.8rem; + height: 1.8rem; +} + .dashboard-grid--landscape .weather-card { grid-template-rows: auto minmax(0, 1fr) minmax(0, 0.86fr) minmax(0, 0.9fr); gap: 0.58rem; diff --git a/dash/KUAL/kindle-dash/menu.json b/dash/KUAL/kindle-dash/menu.json index 1a788cb..0f5f27a 100644 --- a/dash/KUAL/kindle-dash/menu.json +++ b/dash/KUAL/kindle-dash/menu.json @@ -1,12 +1,13 @@ { "items": [ { - "name": "Kindle Dashboard", + "name": "主题选择", "priority": -998, "items": [ - {"name": "Default", "priority": 1, "action": "/mnt/us/dashboard/launch-theme-from-kual.sh", "params": "default", "exitmenu": true}, - {"name": "Paper", "priority": 2, "action": "/mnt/us/dashboard/launch-theme-from-kual.sh", "params": "paper", "exitmenu": true}, - {"name": "Classic", "priority": 3, "action": "/mnt/us/dashboard/launch-theme-from-kual.sh", "params": "classic", "exitmenu": true} + {"name": "default-横屏", "priority": 1, "action": "/mnt/us/dashboard/launch-theme-from-kual.sh", "params": "default landscape", "exitmenu": true}, + {"name": "default-竖屏", "priority": 2, "action": "/mnt/us/dashboard/launch-theme-from-kual.sh", "params": "default portrait", "exitmenu": true}, + {"name": "simple-横屏", "priority": 3, "action": "/mnt/us/dashboard/launch-theme-from-kual.sh", "params": "simple landscape", "exitmenu": true}, + {"name": "simple-竖屏", "priority": 4, "action": "/mnt/us/dashboard/launch-theme-from-kual.sh", "params": "simple portrait", "exitmenu": true} ] }, {"name": "Dashboard Debug On", "action": "/mnt/us/dashboard/debug-on.sh"}, diff --git a/dash/README.md b/dash/README.md index d690798..906805d 100644 --- a/dash/README.md +++ b/dash/README.md @@ -59,6 +59,15 @@ If you're using KUAL you can use simple extension to start this Dashboard For on-device debugging without suspending the Kindle, set `DISABLE_SYSTEM_SUSPEND=true` in `local/env.sh`. The dashboard loop will keep running, skip the `sleeping.png` branch, and use a normal `sleep` between refreshes instead of writing to `/sys/power/state`. +运行规则: + +* 无论 `debug on` 还是 `debug off`,设备侧时钟都按分钟调度刷新一次。 +* `DEBUG=true` 或 `DISABLE_SYSTEM_SUSPEND=true` 时,设备不进入真 suspend,dashboard 保持可见,并持续按分钟刷新。 +* 普通低功耗模式下,设备仍会按分钟唤醒并刷新时钟,但常规分钟刷新只更新后台缓存,不主动把时钟刷到可视屏幕。 +* 手动短按 `power` 的行为单独处理:dashboard 会保持 5 分钟可视窗口,并在窗口内继续按分钟刷新,窗口结束后回到普通低功耗循环。 +* 通过 KUAL 启动 dashboard 或切换主题后回到 calendar,也会给同样的 5 分钟可视窗口。 +* 分钟级时钟刷新完全在本机完成;背景图和主题资源同步仍保持低频。 + If you're connected over SSH you can also run `DEBUG=true ./start.sh` to keep the process in the foreground with shell tracing enabled. If you're launching from KUAL, `Dashboard Debug On` now persists `DISABLE_SYSTEM_SUSPEND=true` and immediately restarts the dashboard in one tap. `Dashboard Debug Off` restores the normal low-power behavior and also restarts the dashboard immediately. If you're connected over SSH and only want a one-off foreground session, you can still run `/mnt/us/dashboard/start-debug.sh`. @@ -70,6 +79,7 @@ On Voyage 5.13.6, if `stop.sh` finishes but the home UI is still missing, the cu * This code periodically downloads a dashboard background image from an HTTP(s) endpoint. * The interval can be configured in `dist/local/env.sh` using a cron expression. * When the layered clock renderer is enabled, the Kindle re-renders the clock region locally every minute. +* 普通模式下,常规分钟刷新只更新后台缓存,不主动把时钟刷到可视屏幕;手动短按 `power` 或从 KUAL 回到 calendar,会打开一个 5 分钟的可视窗口,结束后再回到普通循环。 * During the update intervals the device is suspended to RAM to save power. ## Notes diff --git a/dash/docs/kindle-voyage-5.13.6-bootstrap-validation-zh.md b/dash/docs/kindle-voyage-5.13.6-bootstrap-validation-zh.md index 465dfe4..f0151ac 100644 --- a/dash/docs/kindle-voyage-5.13.6-bootstrap-validation-zh.md +++ b/dash/docs/kindle-voyage-5.13.6-bootstrap-validation-zh.md @@ -80,11 +80,15 @@ sh bootstrap-new-kindle.sh prepare-storage --download-kterm --kterm-version v2.6 ### 4. WatchThis 导入点 -必须特别注意: +按这轮实机成功路径,直接记录下面这组顺序: -1. 第一次 `Add Content / Sideload Content` 只能点 `Done` -2. 不要在第一次导入点接 USB -3. 真正的 payload 导入点,是隐藏手势返回后,再次进入 `;demo -> Sideload Content` +1. 搜索 `;demo` +2. 进入 `demo menu` +3. 选择 `Sideload Content` +4. 到这个页面后再接 USB +5. 确认 `.demo/KV-5.13.6.zip`、`.demo/demo.json`、`.demo/goodreads/` 都在 +6. 弹出设备后在 Kindle 上点 `Done` +7. 退出 `demo menu` 这里的详细说明看: @@ -93,19 +97,43 @@ sh bootstrap-new-kindle.sh prepare-storage --download-kterm --kterm-version v2.6 因为 bootstrap 已经把 `.demo` payload 预置好了,这一轮不需要你在导入点再手工从 Mac 拷 `KV-5.13.6.zip`。 -### 5. 触发越狱并验收 +### 5. 触发越狱脚本 -完成 `Get Started` 后,设备会重启并执行越狱脚本。 +接下来按这个顺序走: -验收标准: +1. `;dsts -> Help & User Guides -> Get Started` +2. `register this demo` 三个输入框都填 `111` +3. `Fetching available demo types` 选 `Skip` +4. demo type 选 `standard` +5. 设备重启 +6. 落到 `Configure Device` 时,不要点进去,用隐藏手势回到主页 -- Kindle 用户存储根目录出现 `mkk` -- Kindle 用户存储根目录出现 `libkh` -- Kindle 用户存储根目录出现 `rp` +这里不要急着跑 `;log mrpi`,因为还差 custom hotfix 这一步。 -如果没有这三个目录,说明这轮 `WatchThis` 没真正落地,不要继续往后做。 +### 6. 安装 WatchThis custom hotfix -### 6. 安装 KUAL / MRPI / USBNetwork / dashboard / KTerm +回到主页后: + +1. 搜索 `;uzb` +2. 接 USB +3. 确认 Kindle 根目录存在 `Update_hotfix_watchthis_custom.bin` +4. 安全弹出 Kindle +5. 搜索 `;dsts` +6. 进入 `Device Options` +7. 点 `Update Your Kindle` +8. 等设备重启回主页 + +如果这里报 `Update Error 2`,第一件事先检查根目录里是否真的有: + +- `Update_hotfix_watchthis_custom.bin` + +不要把 macOS 生成的: + +- `._Update_hotfix_watchthis_custom.bin` + +误当成真正的 hotfix 文件。 + +### 7. 安装 KUAL / MRPI / USBNetwork / dashboard / KTerm 回到首页后: @@ -125,7 +153,7 @@ Rename OTA Binaries -> Rename ## Wi‑Fi 和 SSH 验证 -### 7. 接回 Wi‑Fi +### 8. 接回 Wi‑Fi 让 Kindle 连到和 Mac 同一个主 Wi‑Fi。 @@ -134,7 +162,7 @@ Rename OTA Binaries -> Rename - Guest Wi‑Fi - 开了客户端隔离的网络 -### 8. 在 KTerm 里拉起 DropBear +### 9. 在 KTerm 里拉起 DropBear 打开 `KTerm`,执行: @@ -151,7 +179,7 @@ sh /mnt/us/ssh-force-dropbear-22.sh dropbear... TCP *:22 (LISTEN) ``` -### 9. 在 Mac 上确认 SSH +### 10. 在 Mac 上确认 SSH 回到 Mac: @@ -180,7 +208,7 @@ ps -ef | grep -E 'sshd|dropbear|telnetd' | grep -v grep ## Dashboard 闭环验证 -### 10. 让 bootstrap 跑后半段 +### 11. 让 bootstrap 跑后半段 在 Mac 上执行: @@ -188,9 +216,15 @@ ps -ef | grep -E 'sshd|dropbear|telnetd' | grep -v grep sh bootstrap-new-kindle.sh post-ssh -t simple -o portrait ``` +前提说明: + +- 这一步默认建立在第 2 步 `prepare-storage` 已成功落地的前提上 +- 当前 `post-ssh` 会同步 dashboard shell 脚本、`KUAL` 菜单和主题包 +- 它不会回补 `prepare-storage` 预置的原生二进制,例如 `next-wakeup`、`xh` + 预期结果: -- 同步当前 dashboard 运行时 +- 同步当前 dashboard shell 脚本、`KUAL` 菜单和主题包 - 同步主题包 - 设备立即切到 `simple / portrait` - 屏幕出现背景与时钟 @@ -201,7 +235,9 @@ sh bootstrap-new-kindle.sh post-ssh -t simple -o portrait sh bootstrap-new-kindle.sh post-ssh -t simple -o portrait --start-dashboard ``` -### 11. 抓首张验收图 +这一步同样默认要求设备上已经有 `prepare-storage` 预置的完整 dashboard 基础运行时。 + +### 12. 抓首张验收图 在 Mac 上执行: diff --git a/dash/docs/kindle-voyage-5.13.6-bootstrap-zh.md b/dash/docs/kindle-voyage-5.13.6-bootstrap-zh.md index 5fe57c0..2c7115d 100644 --- a/dash/docs/kindle-voyage-5.13.6-bootstrap-zh.md +++ b/dash/docs/kindle-voyage-5.13.6-bootstrap-zh.md @@ -8,7 +8,7 @@ - 预置 `KUAL / MRPI / USBNetwork / kindle-dash` - 可选预置 `KTerm` - 预置 SSH 恢复脚本 -- SSH 打通后自动同步 dashboard、切主题、立即出图 +- SSH 打通后自动同步 dashboard shell 脚本 / KUAL 菜单 / 主题包,切主题并立即出图 对应脚本: @@ -106,9 +106,14 @@ sh bootstrap-new-kindle.sh post-ssh - 修复设备侧 SSH 辅助脚本权限 - 尝试同步 `authorized_keys` -- 同步 dashboard 运行时和主题包 +- 同步 dashboard shell 脚本、KUAL 菜单和主题包 - 立即切到指定主题并把背景画到屏幕上 +当前边界: + +- `post-ssh` 不会回补 `prepare-storage` 阶段预置的原生二进制,例如 `next-wakeup`、`xh` +- 所以它的默认前提仍然是:这台设备之前已经执行过 `prepare-storage`,或设备上本来就已有完整 dashboard 基础运行时 + 可选: ```sh @@ -116,6 +121,8 @@ sh bootstrap-new-kindle.sh post-ssh -t simple -o portrait sh bootstrap-new-kindle.sh post-ssh --start-dashboard ``` +其中 `--start-dashboard` 的稳定前提也是一样:设备上必须已经具备完整 dashboard 基础运行时。 + ### 3. `all` 默认模式: @@ -135,23 +142,29 @@ sh bootstrap-new-kindle.sh 1. 恢复出厂并进入 demo mode 2. 到真正的 `Sideload Content` 时机 3. 让脚本已预置好的 `.demo` payload 生效 -4. 通过 `Get Started` 完成越狱 -5. 搜索 `;log mrpi` -6. 在 `KUAL` 中先执行 `Rename OTA Binaries -> Rename` -7. 如果本轮没有预置 `KTerm`,这里先手工补装 `KTerm` -8. 连上 Wi‑Fi -9. 打开 `KTerm`,执行: +4. `;dsts -> Help & User Guides -> Get Started` +5. 继续完成 demo 流程里的 `register this demo -> Skip -> standard` +6. 重启后遇到 `Configure Device`,用隐藏手势回到主页 +7. 搜索 `;uzb` 挂载 USB,把 `Update_hotfix_watchthis_custom.bin` 放到根目录 +8. `;dsts -> Device Options -> Update Your Kindle` +9. 回到主页后搜索 `;log mrpi` +10. 在 `KUAL` 中先执行 `Rename OTA Binaries -> Rename` +11. 如果本轮没有预置 `KTerm`,这里先手工补装 `KTerm` +12. 连上 Wi‑Fi +13. 打开 `KTerm`,执行: ```sh sh /mnt/us/ssh-force-dropbear-22.sh ``` -10. 回到 Mac,执行: +14. 回到 Mac,执行: ```sh sh bootstrap-new-kindle.sh post-ssh ``` +这里默认仍然建立在第 1 步已经成功做过 `prepare-storage` 的前提上。 + ## 相关文档 - WatchThis 越狱路径: diff --git a/dash/docs/kindle-voyage-5.13.6-watchthis-zh.md b/dash/docs/kindle-voyage-5.13.6-watchthis-zh.md index 81c5c49..c9375cb 100644 --- a/dash/docs/kindle-voyage-5.13.6-watchthis-zh.md +++ b/dash/docs/kindle-voyage-5.13.6-watchthis-zh.md @@ -1,34 +1,57 @@ -# Kindle Voyage 5.13.6 一次成功路径 +# Kindle Voyage 5.13.6 WatchThis 实测成功路径 -这篇文档只覆盖下面这个组合: + +恢复出厂 +USB - .demo、DONT_CHECK_BATTERY、hotfix 和安装包一次性写回去 +Demo Activation,点 Yes, 重启 + + + + + +这份文档只覆盖下面这个组合: - 机型:`Kindle Voyage (KV)` - 固件:`5.13.6` -- 目标:完成越狱,并部署 `KUAL`、`MRPI`、`renameotabin` 和 `kindle-dash` +- 目标:完成 `WatchThis` 越狱、安装 `custom hotfix`,再通过 `MRPI` 落地 `KUAL / USBNetwork / KTerm / kindle-dash` -如果设备型号或固件版本不同,不要直接照抄本文。 +如果机型或固件版本不同,不要直接照抄。 ## 核心结论 -`Kindle Voyage 5.13.6` 应该走 `WatchThis`,不要走 `LanguageBreak`。 +这台 `KV + 5.13.6` 当前最稳的顺序,不是“`Get Started` 后立刻检查 `mkk/libkh/rp`”,而是下面这条完整链路: -这次实操里,前面大部分失败都来自两个错误: +1. 恢复出厂,语言只选 `English (United Kingdom)` +2. 先输入;enter_demo, `;demo` + demo activation - yes - shipping mode error(电量低的原因) + 1. 把 Kindle 接上 USB。 + 2. 我在根目录创建一个空文件 DONT_CHECK_BATTERY。 +3. `demo menu -> Sideload Content`,在这里接 USB,把 `.demo/` payload 写进去 + - .demo/KV-5.13.6.zip + - .demo/demo.json + - .demo/goodreads/ + - extensions/ + - mrpackages/ + - dashboard/ + - Update_hotfix_watchthis_custom.bin +4. `;dsts -> Help & User Guides -> Get Started` +5. 按 demo 流程继续:`register this demo -> Skip -> standard` +6. 遇到 `Configure Device` 就用隐藏手势回到主页 +7. 回到主页后搜索 `;uzb`, +Update Error 2 -- 插usb,继续重启到 register this demo +输入三个111 +standard 页面 (详见下面说明) …… -- 误走了 `LanguageBreak` -- 在 demo 菜单里点错了分支,提前进入了 `Resell Device` / `销售设备` +**再接 USB,把 `Update_hotfix_watchthis_custom.bin` 放到根目录** +8. `;dsts -> Device Options -> Update Your Kindle` +9. 回到主页后搜索 `;log mrpi` +10. 首页出现 `KUAL` -对这台设备,正确思路非常简单: - -1. 用 `WatchThis` 进入 demo mode -2. 只在正确的 `Sideload Content` 时机导入 `KV-5.13.6.zip` -3. 用 `Get Started` 触发越狱脚本 -4. 安装 `KUAL/MRPI` -5. 用 `renameotabin` 关闭 OTA -6. 再部署并启动 `kindle-dash` +这才是这轮实机验证真正成功的路径。 ## 需要准备的文件 -### WatchThis +### WatchThis payload 来自 `watchthis-jailbreak-r03.zip`: @@ -36,203 +59,216 @@ - `demo.json` - `Update_hotfix_watchthis_custom.bin` -在本仓库里对应的是: +本仓库里的对应路径: -- `staging/watchthis/KV-5.13.6/KV-5.13.6.zip` -- `staging/watchthis/KV-5.13.6/demo.json` -- `staging/watchthis/Update_hotfix_watchthis_custom.bin` +- `dash/staging/watchthis/KV-5.13.6/KV-5.13.6.zip` +- `dash/staging/watchthis/KV-5.13.6/demo.json` +- `dash/staging/watchthis/Update_hotfix_watchthis_custom.bin` ### 越狱后安装包 -- `extensions/MRInstaller` -- `mrpackages/Update_KUALBooklet_HDRepack.bin` -- `extensions/renameotabin` -- `extensions/kindle-dash` -- `dashboard/` +本仓库已经整理好的目录: -在本仓库里已经整理到: +- `dash/staging/post-jailbreak-root/extensions/` +- `dash/staging/post-jailbreak-root/mrpackages/` +- `dash/staging/post-jailbreak-root/dashboard/` -- `staging/post-jailbreak-root/extensions/` -- `staging/post-jailbreak-root/mrpackages/` -- `staging/post-jailbreak-root/dashboard/` +如果你已经执行过: + +```sh +sh bootstrap-new-kindle.sh prepare-storage +``` + +这些内容通常已经预置到 Kindle 用户存储,不需要再手工拷一次。 ## 一次成功的正确路径 -### 1. 恢复出厂并进入 demo mode +### 1. 恢复出厂并进入 demo menu 1. 先恢复出厂设置。 2. 语言选择页只选 `English (United Kingdom)`。 - 这一步非常关键,不要选中文。 -3. 到 Wi‑Fi 页面后,随便点一个网络,再立刻退回,不要真的联网。 -4. 在搜索栏输入 `;enter_demo`。 -5. 如果 `;enter_demo` 没反应,走备用入口: - - 用 USB 连接电脑 - - 在 Kindle 根目录创建空文件 `DONT_CHECK_BATTERY` - - 弹出设备 - - 回到 Kindle 搜索输入 `;demo` -6. 如果看到 `Demo Activation`,点 `Yes`。 -7. 设备重启并进入 demo 流程后: - - 跳过 Wi‑Fi - - 店铺注册信息全部填假值 - - `Fetching available demo types` 选 `Skip` - - demo type 选 `standard` +3. 不要联网。 +4. 在搜索框输入 `;demo`。 +5. 进入 `demo menu`。 -### 2. 第一次出现 Sideload Content 时不要导入 payload +如果这里没有进入 `demo menu`,再考虑备用入口;对本次实机成功路径来说,直接 `;demo` 就够了。 -1. 第一次出现 `Add Content` / `Sideload Content` 提示时,只点 `Done`。 -2. 这一步不要接 USB。 -3. 这一步也不要导入 `KV-5.13.6.zip`。 +### 2. 在 Sideload Content 页面导入 payload -这是最容易做错的一步。第一次 `Done` 只是让 demo setup 继续往下走,不是真正的 payload 导入点。 +1. 在 `demo menu` 里点 `Sideload Content`。 +2. 到这个页面后,再接 USB。 +3. 在 Kindle 根目录确认下面三个东西存在: -### 3. 跳过 misconfiguration 锁页 +```text +.demo/KV-5.13.6.zip +.demo/demo.json +.demo/goodreads/ +``` -demo setup 完成后,大概率会落到 `Configure Device` / misconfiguration 页面。 +4. 安全弹出 Kindle。 +5. 回到 Kindle,点 `Done`。 +6. 退出 `demo menu`。 -不要点 `Configure Device`,直接做隐藏手势: +如果你在 Mac 上手工操作,对应文件结构就是: + +```text +/Volumes/Kindle/.demo/KV-5.13.6.zip +/Volumes/Kindle/.demo/demo.json +/Volumes/Kindle/.demo/goodreads/ +``` + +### 3. 用 Get Started 触发越狱脚本 + +1. 退出 `demo menu` 后,搜索输入 `;dsts`。 +2. 进入 `Help & User Guides`。 +3. 点 `Get Started`。 + +接下来按这轮实测成功路径继续: + +1. 出现 `register this demo` 时,三个输入框都填 `111` +2. `Fetching available demo types` 选 `Skip` +3. 出现 demo type 时选 `standard` + +之后设备会重启。 + +### 4. 遇到 Configure Device 时不要点进去 + +重启后如果看到 `Configure Device`,不要点 `Configure Device`,直接做隐藏手势: 1. 在屏幕右下角用两根手指同时轻点一下 2. 两指立刻抬起 3. 马上用一根手指从右下向左滑 -触发成功后会回到可操作界面。 +成功后会回到主页。 -### 4. 真正的 payload 导入点 +### 5. 用 ;uzb 暴露用户存储并写入 hotfix -1. 回到可操作界面后,搜索输入 `;demo` -2. 进入 demo menu -3. 选择 `Sideload Content` / `导入内容` -4. 到这一步再接 USB -5. 在 Kindle 根目录创建 `.demo/` -6. 把下面三个东西放进去: +回到主页后: + +1. 搜索输入 `;uzb` +2. 再接 USB +3. 在 Kindle 根目录确认存在: ```text -.demo/KV-5.13.6.zip -.demo/demo.json -.demo/goodreads/ <- 空目录 +/Volumes/Kindle/Update_hotfix_watchthis_custom.bin ``` -如果你在 Mac 上操作,可以直接用: +如果没有,就把仓库里的: -```sh -mkdir -p /Volumes/Kindle/.demo/goodreads -cp staging/watchthis/KV-5.13.6/KV-5.13.6.zip /Volumes/Kindle/.demo/ -cp staging/watchthis/KV-5.13.6/demo.json /Volumes/Kindle/.demo/ +```text +dash/staging/watchthis/Update_hotfix_watchthis_custom.bin ``` +拷到 Kindle 根目录。 + 然后: -1. 弹出 Kindle -2. 在 Kindle 上点 `Done` -3. 退出 demo menu +1. 安全弹出 Kindle +2. 回到设备 -## 5. 触发越狱脚本 +### 6. 手工安装 custom hotfix -1. 退出 demo menu 后,输入 `;dsts` - 如果 `;dsts` 没反应,也可以从顶部下拉进入设置。 -2. 打开 `Help & User Guides` -3. 再点 `Get Started` -4. 设备会重启 -5. 越狱脚本会在下次启动时运行 +这一步不要再走 `Help & User Guides`。 -如果这里弹 `Application Error`,官方补救是: +正确路径是: + +1. 搜索输入 `;dsts` +2. 进入 `Device Options` +3. 点 `Update Your Kindle` + +这一步跑完后设备会重启,并退出 demo 状态,回到正常主页。 + +## 7. 用 MRPI 安装 KUAL / USBNetwork / KTerm / dashboard + +回到主页后,搜索输入: + +```text +;log mrpi +``` + +如果 `mrpackages/` 已经预置到根目录,MRPI 会开始安装。 + +实测成功判据: + +- 主页出现 `KUAL` +- 如果这轮预置了 `KTerm`,后续也应该能找到 `KTerm` + +## 8. 进入 KUAL 后的顺序 + +进入 `KUAL` 后,先执行: + +```text +Rename OTA Binaries -> Rename +``` + +不要先跑 `Kindle Dashboard`,先把 OTA 关掉。 + +## 9. 这轮流程里最容易做错的地方 + +### 不要走 LanguageBreak + +`KV + 5.13.6` 应走 `WatchThis`,不要走 `LanguageBreak`。 + +### 不要点 Resell Device / Remote Reset / Configure WiFi + +这几个都不是这条成功路径的一部分。 + +### `Get Started` 后不要直接去找 `Update Your Kindle` + +先要完成: + +- `register this demo` +- `Skip` +- `standard` +- 重启后隐藏手势回主页 + +然后才是: + +- `;uzb` +- 写入 `Update_hotfix_watchthis_custom.bin` +- `Device Options -> Update Your Kindle` + +### `Update Your Kindle` 之前必须先写 hotfix bin + +`Update Your Kindle` 对应的是安装: + +```text +Update_hotfix_watchthis_custom.bin +``` + +如果根目录里没有这个文件,就很容易出现 `Software Update / Update Error 2`。 + +### 不要把 `mkk/libkh/rp` 当成当前这条流程里的唯一人工判据 + +这轮最实用的成功判据是: + +1. `Update Your Kindle` 能正常跑完并重启回主页 +2. `;log mrpi` 能执行 +3. 首页出现 `KUAL` + +## 10. 如果某一步出错 + +### `Get Started` 后出现 Application Error + +按上游 `WatchThis` README 的补救方式: 1. 长按电源键强制重启 -2. 再进 demo menu +2. 再进 `demo menu` 3. 再执行一次 `Sideload Content -> Done` 4. 这次不要再接 USB -## 6. 成功判据 +### `Update Your Kindle` 报 `Update Error 2` -对这台设备,下面这些现象说明越狱已经落地: +先检查 Kindle 根目录里是不是真的有: -- Kindle 用户存储根目录出现 `mkk` -- Kindle 用户存储根目录出现 `libkh` -- Kindle 用户存储根目录出现 `rp` - -如果这三个目录都没有,基本就是前面的 `WatchThis` 没真正成功。 - -## 7. 安装 KUAL / MRPI / kindle-dash - -越狱落地后,把这些目录复制到 Kindle: - -```sh -rsync -a staging/post-jailbreak-root/extensions/ /Volumes/Kindle/extensions/ -rsync -a staging/post-jailbreak-root/mrpackages/ /Volumes/Kindle/mrpackages/ -rsync -a staging/post-jailbreak-root/dashboard/ /Volumes/Kindle/dashboard/ +```text +Update_hotfix_watchthis_custom.bin ``` -然后: +注意不要把 macOS 生成的: -1. 弹出 Kindle -2. 回到首页搜索输入 `;log mrpi` -3. 等安装完成 -4. 首页会出现 `KUAL` 卡片 +```text +._Update_hotfix_watchthis_custom.bin +``` -## 8. 启动顺序 - -进入 `KUAL` 后,先做这个顺序: - -1. `Rename OTA Binaries -> Rename` -2. 再运行 `Kindle Dashboard` - -不要先跑 `Kindle Dashboard`,否则后面如果 OTA 没关掉,还存在自动升级把越狱覆盖掉的风险。 - -## 9. kindle-dash 默认行为 - -本项目默认不会在 Kindle 本机实时渲染页面,而是定时去下载一张图片来显示。 - -因此: - -- 如果没有联网,`Kindle Dashboard` 看起来会像“卡住” -- 如果刷新计划不覆盖当前时间,会显示 `kindle is sleeping` -- 图片最好直接按 Voyage 原生分辨率出图:`1072 x 1448` - -默认抓图脚本在: - -- `src/local/fetch-dashboard.sh` - -默认刷新计划在: - -- `src/local/env.sh` - -## 10. 这台设备上确认过的坑 - -### 不要走 `LanguageBreak` - -`KV + 5.13.6` 应走 `WatchThis`。误走 `LanguageBreak` 会导致: - -- `;demo -> Yes -> 重启 -> 回普通系统` -- `;uzb`、`;dsts` 行为异常 -- 反复进入错误的 demo 分支 - -### 不要点 `Resell Device` / `销售设备` - -这个分支会把流程带到 shipping mode / demo 出厂流程,和 `WatchThis` 正常路径无关。 - -如果你是在 `WatchThis` 流程里,demo menu 里真正要点的是: - -- `Sideload Content` - -不是: - -- `Resell Device` -- `Remote Reset` -- `Configure WiFi` - -### 第一次 `Add Content` 只能点 `Done` - -真正要接 USB 导 payload 的时机,是秘密手势之后再次 `;demo -> Sideload Content` 的那一次。 - -### 看到左上角只有一小块图片,不一定是失败 - -这通常只是图片尺寸不匹配。 - -例如本项目自带的 `sleeping.png` 只有 `600x800`,放到 Voyage 上就只会显示在左上角一部分区域。 - -## 参考 - -- WatchThis 包内说明:`watchthis-jailbreak-r03.zip` 中的 `watchthis-release/README.md` -- 项目主说明:`README.md` -- 图片抓取说明:`src/local/fetch-dashboard.sh` -- 本地调度配置:`src/local/env.sh` +误当成真正的 hotfix 文件。 diff --git a/dash/src/dash.sh b/dash/src/dash.sh index 15e6d2e..7bca7bc 100755 --- a/dash/src/dash.sh +++ b/dash/src/dash.sh @@ -11,35 +11,69 @@ STATE_DIR="$DIR/local/state" BACKGROUND_TIMESTAMP_FILE="$STATE_DIR/background-updated-at" THEME_RUNTIME_ENV_FILE="$STATE_DIR/theme-runtime.env" THEME_SYNC_CMD="$DIR/local/theme-sync.sh" +PID_FILE="$STATE_DIR/dashboard.pid" +THEME_BACKGROUND_SYNC_CMD="$DIR/local/sync-theme-backgrounds.sh" THEME_MENU_SERVICE_CMD="$DIR/local/theme-menu-service.sh" THEME_MENU_LOG_FILE="$DIR/logs/theme-menu.log" TOUCH_HOME_SERVICE_CMD="$DIR/local/touch-home-service.sh" TOUCH_HOME_LOG_FILE="$DIR/logs/touch-home.log" REFRESH_SCHEDULE=${REFRESH_SCHEDULE:-"2,32 8-17 * * MON-FRI"} +SCHEDULED_SCREEN_WAKE_ENABLED=${SCHEDULED_SCREEN_WAKE_ENABLED:-true} +REMOTE_SYNC_SCHEDULE=${REMOTE_SYNC_SCHEDULE:-"10 0 * * *"} +REMOTE_SYNC_ENABLED=${REMOTE_SYNC_ENABLED:-true} FULL_DISPLAY_REFRESH_RATE=${FULL_DISPLAY_REFRESH_RATE:-0} SLEEP_SCREEN_INTERVAL=${SLEEP_SCREEN_INTERVAL:-3600} DISABLE_SYSTEM_SUSPEND=${DISABLE_SYSTEM_SUSPEND:-false} BACKGROUND_REFRESH_INTERVAL_MINUTES=${BACKGROUND_REFRESH_INTERVAL_MINUTES:-120} CLOCK_FULL_REFRESH_INTERVAL_MINUTES=${CLOCK_FULL_REFRESH_INTERVAL_MINUTES:-15} PRE_SLEEP_GRACE_SECONDS=${PRE_SLEEP_GRACE_SECONDS:-10} -MANUAL_WAKE_KEEP_AWAKE_SECONDS=${MANUAL_WAKE_KEEP_AWAKE_SECONDS:-60} +MANUAL_WAKE_KEEP_AWAKE_SECONDS=${MANUAL_WAKE_KEEP_AWAKE_SECONDS:-300} MANUAL_WAKE_EARLY_TOLERANCE_SECONDS=${MANUAL_WAKE_EARLY_TOLERANCE_SECONDS:-5} +SLEEPING_SCREEN_ENABLED=${SLEEPING_SCREEN_ENABLED:-true} STATUS_MASK_ENABLED=${STATUS_MASK_ENABLED:-true} STATUS_MASK_LEFT=${STATUS_MASK_LEFT:-700} STATUS_MASK_TOP=${STATUS_MASK_TOP:-0} -STATUS_MASK_WIDTH=${STATUS_MASK_WIDTH:-372} -STATUS_MASK_HEIGHT=${STATUS_MASK_HEIGHT:-24} +STATUS_MASK_WIDTH=${STATUS_MASK_WIDTH:-360} +STATUS_MASK_HEIGHT=${STATUS_MASK_HEIGHT:-48} STATUS_MASK_PASSES=${STATUS_MASK_PASSES:-3} STATUS_MASK_DELAY_SECONDS=${STATUS_MASK_DELAY_SECONDS:-1} -RTC=/sys/devices/platform/mxc_rtc.0/wakeup_enable +RTC_WAKEUP_ENABLE=/sys/devices/platform/mxc_rtc.0/wakeup_enable KEEP_NATIVE_UI_STACK_RUNNING=${KEEP_NATIVE_UI_STACK_RUNNING:-false} - LOW_BATTERY_REPORTING=${LOW_BATTERY_REPORTING:-false} LOW_BATTERY_THRESHOLD_PERCENT=${LOW_BATTERY_THRESHOLD_PERCENT:-10} num_refresh=0 background_needs_redraw=true +dashboard_exit_reason=normal + +on_dashboard_term() { + dashboard_exit_reason=SIGTERM + echo "Dashboard received SIGTERM" + exit 143 +} + +on_dashboard_hup() { + dashboard_exit_reason=SIGHUP + echo "Dashboard received SIGHUP" + exit 129 +} + +on_dashboard_int() { + dashboard_exit_reason=SIGINT + echo "Dashboard received SIGINT" + exit 130 +} + +on_dashboard_exit() { + exit_status=$? + echo "Dashboard exiting status=$exit_status reason=$dashboard_exit_reason pid=$$" +} + +trap on_dashboard_term TERM +trap on_dashboard_hup HUP +trap on_dashboard_int INT +trap on_dashboard_exit EXIT start_theme_menu_service() { if [ "${THEME_MENU_ENABLED:-false}" != true ]; then @@ -77,14 +111,13 @@ load_theme_runtime_config() { } init() { - if [ -z "$TIMEZONE" ] || [ -z "$REFRESH_SCHEDULE" ]; then + if [ -z "$TIMEZONE" ]; then echo "Missing required configuration." echo "Timezone: ${TIMEZONE:-(not set)}." - echo "Schedule: ${REFRESH_SCHEDULE:-(not set)}." exit 1 fi - echo "Starting dashboard with $REFRESH_SCHEDULE refresh..." + echo "Starting dashboard with refresh_schedule=${REFRESH_SCHEDULE:-disabled} sync_schedule=${REMOTE_SYNC_SCHEDULE:-disabled} scheduled_screen_wake=${SCHEDULED_SCREEN_WAKE_ENABLED}..." mkdir -p "$STATE_DIR" if [ "$DISABLE_SYSTEM_SUSPEND" = true ]; then @@ -99,7 +132,7 @@ init() { fi echo powersave >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor - lipc-set-prop com.lab126.powerd preventScreenSaver 1 + keep_screen_visible start_theme_menu_service start_touch_home_service } @@ -118,13 +151,20 @@ stop_framework() { prepare_sleep() { echo "Preparing sleep" - /usr/sbin/eips -f -g "$DIR/sleeping.png" - background_needs_redraw=true + if [ "$SLEEPING_SCREEN_ENABLED" = true ]; then + /usr/sbin/eips -f -g "$DIR/sleeping.png" + background_needs_redraw=true - # Give screen time to refresh - sleep 2 + # 只有真的画了 sleeping.png,才需要额外等待这次整屏刷新落完。 + sleep 2 + else + # overlay/静默同步模式下,直接保留当前 dashboard 画面直到真正挂起, + # 避免 Voyage 把 600x800 的 sleeping.png 只画在左上角,压住日历内容。 + echo "Sleeping screen disabled, keeping current dashboard visible before suspend." + fi - # Ensure a full screen refresh is triggered after wake from sleep + # 无论休眠前是否显示 sleeping.png,唤醒后的下一次恢复都强制走一次整屏刷新, + # 避免长时间 suspend 之后局部刷新把残影继续带到下一轮。 num_refresh=$FULL_DISPLAY_REFRESH_RATE } @@ -143,6 +183,29 @@ background_refresh_due() { last_background_epoch=$(cat "$BACKGROUND_TIMESTAMP_FILE") refresh_interval_seconds=$((BACKGROUND_REFRESH_INTERVAL_MINUTES * 60)) + # 背景里包含当天日历时,不能只按“距离上次刷新过去了多少分钟”判断。 + # 只要北京时间跨天了,就应该在下一轮调度里至少再拉一次新背景。 + current_day_id=$(lua - "$current_epoch" "${CLOCK_TIME_OFFSET_MINUTES:-0}" <<'LUA' +local epoch_seconds = assert(tonumber(arg[1]), "missing epoch seconds") +local offset_minutes = tonumber(arg[2]) or 0 +local seconds_per_day = 24 * 60 * 60 +local local_seconds = epoch_seconds + offset_minutes * 60 +io.write(math.floor(local_seconds / seconds_per_day)) +LUA +) + last_day_id=$(lua - "$last_background_epoch" "${CLOCK_TIME_OFFSET_MINUTES:-0}" <<'LUA' +local epoch_seconds = assert(tonumber(arg[1]), "missing epoch seconds") +local offset_minutes = tonumber(arg[2]) or 0 +local seconds_per_day = 24 * 60 * 60 +local local_seconds = epoch_seconds + offset_minutes * 60 +io.write(math.floor(local_seconds / seconds_per_day)) +LUA +) + + if [ "$current_day_id" != "$last_day_id" ]; then + return 0 + fi + [ $((current_epoch - last_background_epoch)) -ge "$refresh_interval_seconds" ] } @@ -176,11 +239,161 @@ fetch_background() { return 0 } +screen_wake_enabled() { + # 这里的语义只代表“分钟刷新时是否把屏幕维持在可视态”。 + # 分钟调度本身是否存在,不能再由这个开关决定。 + # debug on 的目标就是高频亮屏调试,所以这里直接强制开启可见刷新。 + if [ "$DISABLE_SYSTEM_SUSPEND" = true ]; then + return 0 + fi + + [ "$SCHEDULED_SCREEN_WAKE_ENABLED" = true ] +} + +refresh_schedule_enabled() { + [ -n "${REFRESH_SCHEDULE:-}" ] +} + +keep_screen_visible() { + # 可视窗口和 debug on 都需要把 powerd 留在可视态, + # 否则刚画完时钟就可能被系统重新收回到睡眠界面。 + lipc-set-prop com.lab126.powerd preventScreenSaver 1 2>/dev/null || true +} + +allow_screen_sleep() { + # debug on 需要常亮;普通低功耗模式下才把屏幕控制权交还给 powerd。 + if [ "$DISABLE_SYSTEM_SUSPEND" = true ]; then + keep_screen_visible + return + fi + + lipc-set-prop com.lab126.powerd preventScreenSaver 0 2>/dev/null || true +} + +remote_sync_enabled() { + [ "$REMOTE_SYNC_ENABLED" = true ] +} + +next_schedule_seconds() { + schedule=$1 + "$DIR/next-wakeup" --schedule="$schedule" --timezone="$TIMEZONE" +} + +compute_next_wakeup() { + max_wait=2147483647 + next_display_secs=$max_wait + next_sync_secs=$max_wait + + # debug off 即使不允许自动亮屏,分钟级时钟刷新也必须继续调度。 + if refresh_schedule_enabled; then + next_display_secs=$(next_schedule_seconds "$REFRESH_SCHEDULE") + fi + + if remote_sync_enabled && [ -n "${REMOTE_SYNC_SCHEDULE:-}" ]; then + next_sync_secs=$(next_schedule_seconds "$REMOTE_SYNC_SCHEDULE") + fi + + if [ "$next_display_secs" -eq "$max_wait" ] && [ "$next_sync_secs" -eq "$max_wait" ]; then + echo "next_wakeup_reason=display" + echo "next_wakeup_secs=3600" + return 0 + fi + + if [ "$next_display_secs" -le "$next_sync_secs" ]; then + echo "next_wakeup_reason=display" + echo "next_wakeup_secs=$next_display_secs" + else + echo "next_wakeup_reason=sync" + echo "next_wakeup_secs=$next_sync_secs" + fi +} + +silent_sync() { + sync_failed=false + + # 每天 00:10 的静默唤醒先把全量主题图和主题 JSON 拉到本地, + # 这样后续切主题可以完全走本地目录,不依赖当下网络。 + if ! "$THEME_BACKGROUND_SYNC_CMD"; then + echo "Theme background sync failed" + sync_failed=true + fi + + if background_refresh_due; then + if fetch_background; then + # 后台静默同步时只更新缓存,不主动点亮 screen。 + # 下次手动点亮或进入 dashboard 时,再把新背景完整恢复到屏幕上。 + background_needs_redraw=true + else + echo "Silent sync background refresh failed" + sync_failed=true + fi + else + echo "Silent sync skipped current background refresh" + fi + + if [ "$sync_failed" = true ]; then + echo "Silent sync failed" + return 1 + fi + + echo "Silent sync completed" + return 0 +} + +refresh_dashboard_hidden() { + if background_refresh_due; then + if fetch_background; then + # 普通分钟调度在 debug off 下只更新缓存,不主动把新背景刷到屏幕上。 + background_needs_redraw=true + elif [ ! -f "$BACKGROUND_PNG" ]; then + echo "No cached background available for hidden refresh." + return 1 + fi + fi + + echo "Clock cache refresh without screen wake" + "$CLOCK_RENDER_CMD" false false +} + clock_force_full_refresh() { eval "$("$DIR/local/clock-index.sh")" [ $((minute % CLOCK_FULL_REFRESH_INTERVAL_MINUTES)) -eq 0 ] } +hold_visible_window_until() { + keep_awake_until=$1 + + # 只要用户当前正看着 calendar,这段窗口里就继续让分钟刷新走可视路径。 + keep_screen_visible + + while true; do + now=$(now_epoch) + if [ "$now" -ge "$keep_awake_until" ]; then + break + fi + + seconds_until_next_minute=$((60 - (now % 60))) + remaining_awake_seconds=$((keep_awake_until - now)) + + if [ "$seconds_until_next_minute" -gt "$remaining_awake_seconds" ]; then + sleep "$remaining_awake_seconds" + break + fi + + sleep "$seconds_until_next_minute" + refresh_dashboard || true + done +} + +mask_system_status_overlay_once() { + if [ "$STATUS_MASK_ENABLED" != true ]; then + return + fi + + fbink -q -V -B WHITE -k \ + "top=$STATUS_MASK_TOP,left=$STATUS_MASK_LEFT,width=$STATUS_MASK_WIDTH,height=$STATUS_MASK_HEIGHT" +} + mask_system_status_overlay() { if [ "$STATUS_MASK_ENABLED" != true ]; then return @@ -191,8 +404,7 @@ mask_system_status_overlay() { # 实测需要延迟后再补盖一次,否则系统可能会在我们第一次覆盖后再重画一遍。 pass=1 while [ "$pass" -le "$STATUS_MASK_PASSES" ]; do - fbink -q -V -B WHITE -k \ - "top=$STATUS_MASK_TOP,left=$STATUS_MASK_LEFT,width=$STATUS_MASK_WIDTH,height=$STATUS_MASK_HEIGHT" + mask_system_status_overlay_once if [ "$pass" -lt "$STATUS_MASK_PASSES" ] && [ "$STATUS_MASK_DELAY_SECONDS" -gt 0 ]; then sleep "$STATUS_MASK_DELAY_SECONDS" @@ -255,6 +467,24 @@ powerd_get_prop() { lipc-get-prop com.lab126.powerd "$prop_name" 2>/dev/null || echo "unavailable" } +screen_is_visibly_active() { + power_state=$(powerd_get_prop state) + case "$power_state" in + active|Active) + return 0 + ;; + esac + + power_status=$(powerd_get_prop status) + case "$power_status" in + *"Powerd state: Active"*) + return 0 + ;; + esac + + return 1 +} + log_battery_stats() { battery_level=$(gasgauge-info -c 2>/dev/null || echo "unknown") charging_state=$(powerd_get_prop isCharging) @@ -285,8 +515,36 @@ rtc_sleep() { echo "Skipping system suspend, sleeping for ${duration}s instead" sleep "$duration" else - # shellcheck disable=SC2039 - [ "$(cat "$RTC")" -eq 0 ] && echo -n "$duration" >"$RTC" + # Voyage 这代机器不一定还有旧的 mxc_rtc.0/wakeup_enable 接口; + # 当前实机上能稳定看到的是 /sys/class/rtc/rtc0/wakealarm。 + # 这里先兼容旧接口,找不到时再回退到标准 wakealarm 写法。 + if [ -f "$RTC_WAKEUP_ENABLE" ]; then + current_wakeup_value=$(cat "$RTC_WAKEUP_ENABLE" 2>/dev/null || echo "") + if [ -n "$current_wakeup_value" ] && [ "$current_wakeup_value" -eq 0 ] 2>/dev/null; then + echo -n "$duration" >"$RTC_WAKEUP_ENABLE" + fi + else + rtc_wakealarm_path="" + + if [ -f /sys/class/rtc/rtc0/wakealarm ]; then + rtc_wakealarm_path=/sys/class/rtc/rtc0/wakealarm + elif [ -f /sys/class/rtc/rtc1/wakealarm ]; then + rtc_wakealarm_path=/sys/class/rtc/rtc1/wakealarm + elif [ -f /sys/class/rtc/rtc2/wakealarm ]; then + rtc_wakealarm_path=/sys/class/rtc/rtc2/wakealarm + fi + + if [ -n "$rtc_wakealarm_path" ]; then + wake_epoch=$(( $(now_epoch) + duration )) + echo 0 >"$rtc_wakealarm_path" 2>/dev/null || true + echo "$wake_epoch" >"$rtc_wakealarm_path" + else + echo "警告:未找到可用的 RTC 唤醒接口,回退到普通 sleep ${duration}s" + sleep "$duration" + return + fi + fi + echo "mem" >/sys/power/state fi } @@ -311,6 +569,7 @@ hold_after_manual_wake() { sleep_started_at=$2 sleep_finished_at=$3 actual_duration=$((sleep_finished_at - sleep_started_at)) + keep_awake_until=$((sleep_finished_at + MANUAL_WAKE_KEEP_AWAKE_SECONDS)) if ! manual_wake_detected "$requested_duration" "$actual_duration"; then return @@ -318,17 +577,22 @@ hold_after_manual_wake() { echo "Manual wake detected after ${actual_duration}s, keeping awake for ${MANUAL_WAKE_KEEP_AWAKE_SECONDS}s" + # 手动唤醒期间,系统可能已经把自己的睡眠/锁屏层画回前台。 + # 这里先强制要求下一次 refresh_dashboard 完整恢复 calendar 背景, + # 不能只补一层时钟 patch。 + background_needs_redraw=true + # 短按电源键提前唤醒后,先把 dashboard 内容恢复回来, - # 再给出一段明确的可交互窗口,避免 2~3 秒内再次休眠。 + # 再在这段明确的可交互窗口里按分钟补画时钟,避免只刷一次后就停住。 refresh_dashboard || true - sleep "$MANUAL_WAKE_KEEP_AWAKE_SECONDS" + hold_visible_window_until "$keep_awake_until" } main_loop() { while true; do log_battery_stats - next_wakeup_secs=$("$DIR/next-wakeup" --schedule="$REFRESH_SCHEDULE" --timezone="$TIMEZONE") + eval "$(compute_next_wakeup)" if [ "$next_wakeup_secs" -gt "$SLEEP_SCREEN_INTERVAL" ] && [ "$DISABLE_SYSTEM_SUSPEND" != true ]; then action="sleep" @@ -337,8 +601,12 @@ main_loop() { if [ "$next_wakeup_secs" -gt "$SLEEP_SCREEN_INTERVAL" ] && [ "$DISABLE_SYSTEM_SUSPEND" = true ]; then echo "Debug mode active, skipping sleeping screen." fi - action="suspend" - refresh_dashboard + + if [ "$next_wakeup_reason" = "sync" ]; then + action="silent-sync" + else + action="suspend" + fi fi actual_sleep_secs=$next_wakeup_secs @@ -350,6 +618,13 @@ main_loop() { # 预留一小段可中断窗口,便于在 Kindle 本机或 SSH 下手动终止进程。 # 这段时间必须从 rtc_sleep 中扣掉,否则每分钟刷新会长期晚于计划时间。 + # 普通分钟调度已经改成隐藏刷新,因此 debug off 下应该把屏幕控制权交还给 powerd, + # 避免设备每分钟都被重新拉成可视亮屏态。 + if screen_wake_enabled; then + keep_screen_visible + else + allow_screen_sleep + fi sleep "$PRE_SLEEP_GRACE_SECONDS" echo "Going to $action, next wakeup in ${next_wakeup_secs}s" @@ -357,9 +632,46 @@ main_loop() { sleep_started_at=$(now_epoch) rtc_sleep "$actual_sleep_secs" sleep_finished_at=$(now_epoch) - hold_after_manual_wake "$actual_sleep_secs" "$sleep_started_at" "$sleep_finished_at" + + # Voyage 在 rtc 唤醒刚回来的瞬间,右上角系统状态栏可能会先闪回前台。 + # 只要系统已经把屏幕拉成可视态,就先立即补一层白色遮罩, + # 再进入后面的手动唤醒判断和 dashboard 刷新,尽量缩短这段闪现时间。 + if screen_is_visibly_active; then + mask_system_status_overlay_once + fi + + if manual_wake_detected "$actual_sleep_secs" "$((sleep_finished_at - sleep_started_at))"; then + hold_after_manual_wake "$actual_sleep_secs" "$sleep_started_at" "$sleep_finished_at" + continue + fi + + if [ "$next_wakeup_reason" = "sync" ]; then + silent_sync || true + else + if screen_wake_enabled; then + refresh_dashboard || true + elif screen_is_visibly_active; then + # Voyage 在当前 overlay + RTC suspend 架构下, + # 普通分钟唤醒有时会被系统自己拉成可视态。 + # 既然用户已经看得到这次唤醒,就顺手把时钟补到当前分钟, + # 避免出现“亮灯了,但表盘还是旧时间”的错觉。 + refresh_dashboard || true + else + refresh_dashboard_hidden || true + fi + fi done } init +printf '%s\n' "$$" >"$PID_FILE" +echo "Dashboard boot pid=$$ at $(date '+%Y-%m-%d %H:%M:%S %Z')" +refresh_dashboard || true + +# 从 KUAL 进入 dashboard 或主题切换后回到 calendar,本身就是一次显式用户操作。 +# debug off 下也应该给同样的 5 分钟可视窗口,让用户回来后看到会继续走动的时钟。 +if [ "$DISABLE_SYSTEM_SUSPEND" != true ]; then + hold_visible_window_until $(( $(now_epoch) + MANUAL_WAKE_KEEP_AWAKE_SECONDS )) +fi + main_loop diff --git a/dash/src/launch-theme-from-kual.sh b/dash/src/launch-theme-from-kual.sh index c507ed6..b56fea1 100644 --- a/dash/src/launch-theme-from-kual.sh +++ b/dash/src/launch-theme-from-kual.sh @@ -2,19 +2,99 @@ set -eu DIR="$(dirname "$0")" +ENV_FILE="$DIR/local/env.sh" SWITCH_THEME_CMD="$DIR/switch-theme.sh" -LAUNCH_FROM_KUAL_CMD="$DIR/launch-from-kual.sh" +START_DASHBOARD_CMD="$DIR/start.sh" +LOG_FILE="$DIR/logs/kual-theme-launch.log" requested_theme_id=${1:?"usage: launch-theme-from-kual.sh [orientation]"} requested_orientation=${2:-} -# KUAL 里的主题入口先切主题,再复用现有的 launch-from-kual 启动链。 -# 这样可以保留当前已经收敛过的 KUAL 退出与 detached 启动逻辑, -# 同时把“选主题”前移到进入 dashboard 之前。 -if [ -n "$requested_orientation" ]; then - "$SWITCH_THEME_CMD" "$requested_theme_id" "$requested_orientation" -else - "$SWITCH_THEME_CMD" "$requested_theme_id" -fi +# shellcheck disable=SC1090 +[ -f "$ENV_FILE" ] && . "$ENV_FILE" -exec "$LAUNCH_FROM_KUAL_CMD" +KUAL_QUIT_GRACE_SECONDS="${KUAL_QUIT_GRACE_SECONDS:-0}" +KUAL_APP_ID="${KUAL_APP_ID:-app://com.mobileread.ixtab.kindlelauncher}" + +# KUAL 菜单项本身应该尽快返回,让 KUAL 自己先退回首页。 +# 真正的“切主题 + 启动 dashboard”放到独立 session 里继续跑, +# 避免动作链被 KUAL 退出过程提前打断。 +# 这里直接起 start.sh,不再额外绕一层 launch-from-kual.sh, +# 尽量减少首页闪出的可见窗口。 +mkdir -p "$(dirname "$LOG_FILE")" + +if command -v setsid >/dev/null 2>&1; then + nohup setsid /bin/sh -c ' + theme_id=$1 + theme_orientation=$2 + switch_cmd=$3 + start_cmd=$4 + log_file=$5 + target_dir=$6 + kual_app_id=$7 + quit_grace=$8 + + printf "%s launch-theme worker start theme=%s orientation=%s\n" "$(date 2>/dev/null || true)" "$theme_id" "${theme_orientation:-default}" >>"$log_file" + + # 旧 dashboard 还活着时,会继续按旧状态补画时钟,导致画面叠层。 + # 这里在真正切主题前先清掉旧实例,确保后面只剩一条主循环。 + pkill -f "$target_dir/dash.sh" 2>/dev/null || true + pkill -f "$target_dir/local/theme-menu-service.sh" 2>/dev/null || true + pkill -f "$target_dir/local/touch-home-service.sh" 2>/dev/null || true + + # 主题链路也沿用 KUAL 的正常退出路径,避免我们刚把 calendar 画出来, + # KUAL 又把前台切回首页。 + if command -v lipc-set-prop >/dev/null 2>&1; then + lipc-set-prop com.lab126.appmgrd stop "$kual_app_id" >/dev/null 2>&1 || true + fi + + if [ "$quit_grace" -gt 0 ] 2>/dev/null; then + sleep "$quit_grace" + fi + + if [ -n "$theme_orientation" ]; then + "$switch_cmd" "$theme_id" "$theme_orientation" >>"$log_file" 2>&1 + else + "$switch_cmd" "$theme_id" >>"$log_file" 2>&1 + fi + + exec "$start_cmd" >>"$log_file" 2>&1 + ' sh "$requested_theme_id" "$requested_orientation" "$SWITCH_THEME_CMD" "$START_DASHBOARD_CMD" "$LOG_FILE" "$DIR" "$KUAL_APP_ID" "$KUAL_QUIT_GRACE_SECONDS" >/dev/null 2>&1 & +else + nohup /bin/sh -c ' + theme_id=$1 + theme_orientation=$2 + switch_cmd=$3 + start_cmd=$4 + log_file=$5 + target_dir=$6 + kual_app_id=$7 + quit_grace=$8 + + printf "%s launch-theme worker start theme=%s orientation=%s\n" "$(date 2>/dev/null || true)" "$theme_id" "${theme_orientation:-default}" >>"$log_file" + + # 旧 dashboard 还活着时,会继续按旧状态补画时钟,导致画面叠层。 + # 这里在真正切主题前先清掉旧实例,确保后面只剩一条主循环。 + pkill -f "$target_dir/dash.sh" 2>/dev/null || true + pkill -f "$target_dir/local/theme-menu-service.sh" 2>/dev/null || true + pkill -f "$target_dir/local/touch-home-service.sh" 2>/dev/null || true + + # 主题链路也沿用 KUAL 的正常退出路径,避免我们刚把 calendar 画出来, + # KUAL 又把前台切回首页。 + if command -v lipc-set-prop >/dev/null 2>&1; then + lipc-set-prop com.lab126.appmgrd stop "$kual_app_id" >/dev/null 2>&1 || true + fi + + if [ "$quit_grace" -gt 0 ] 2>/dev/null; then + sleep "$quit_grace" + fi + + if [ -n "$theme_orientation" ]; then + "$switch_cmd" "$theme_id" "$theme_orientation" >>"$log_file" 2>&1 + else + "$switch_cmd" "$theme_id" >>"$log_file" 2>&1 + fi + + exec "$start_cmd" >>"$log_file" 2>&1 + ' sh "$requested_theme_id" "$requested_orientation" "$SWITCH_THEME_CMD" "$START_DASHBOARD_CMD" "$LOG_FILE" "$DIR" "$KUAL_APP_ID" "$KUAL_QUIT_GRACE_SECONDS" >/dev/null 2>&1 & +fi diff --git a/dash/src/local/env.sh b/dash/src/local/env.sh index d0e9d0c..c034faa 100644 --- a/dash/src/local/env.sh +++ b/dash/src/local/env.sh @@ -2,8 +2,18 @@ # Export environment variables here export WIFI_TEST_IP=${WIFI_TEST_IP:-1.1.1.1} -# 测试配置:全天每分钟刷新一次,便于验证图片拉取与屏幕刷新是否正常。 +# 设备侧时钟刷新节奏。 +# 当前默认每分钟刷新一次;debug on 与 debug off 都走这条分钟调度。 export REFRESH_SCHEDULE=${REFRESH_SCHEDULE:-"* * * * *"} +# 是否允许按 REFRESH_SCHEDULE 自动点亮 screen。 +# 默认关闭;debug off 下分钟刷新仍会执行,但不会因为调度本身把屏幕维持在可视态。 +# 只有 debug on,或手动短按 power 进入的 5 分钟窗口,才把屏幕留在可视态。 +export SCHEDULED_SCREEN_WAKE_ENABLED=${SCHEDULED_SCREEN_WAKE_ENABLED:-false} +# 静默远端同步的唤醒节奏。 +# 默认每天凌晨 00:10 唤醒一次,用来拉当天最新背景、主题 JSON 和全量主题图片, +# 但不主动点亮 screen。 +export REMOTE_SYNC_SCHEDULE=${REMOTE_SYNC_SCHEDULE:-"10 0 * * *"} +export REMOTE_SYNC_ENABLED=${REMOTE_SYNC_ENABLED:-true} # 调度计算依赖 next-wakeup 这个 Rust 程序,它要求使用 IANA 时区名。 # 这里必须保留 Asia/Shanghai,才能正确计算下一次唤醒时间。 export TIMEZONE=${TIMEZONE:-"Asia/Shanghai"} @@ -16,7 +26,21 @@ export THEMES_INDEX_REFRESH_INTERVAL_MINUTES=${THEMES_INDEX_REFRESH_INTERVAL_MIN export THEME_CONFIG_REFRESH_INTERVAL_MINUTES=${THEME_CONFIG_REFRESH_INTERVAL_MINUTES:-1440} export THEME_ID=${THEME_ID:-"default"} export ORIENTATION=${ORIENTATION:-"portrait"} -export BACKGROUND_REFRESH_INTERVAL_MINUTES=${BACKGROUND_REFRESH_INTERVAL_MINUTES:-120} +# 天气目前仍然是随背景一起导出,不是 Kindle 本机实时渲染。 +# 如果要让背景里的天气跟 Kindle 当前网络出口位置走,就要优先使用 +# “同步时按 Kindle 位置导出的本地主题背景”,而不是服务器上的通用背景。 +export WEATHER_USE_KINDLE_LOCATION=${WEATHER_USE_KINDLE_LOCATION:-true} +# Kindle 侧位置缓存使用 GeoIP 做“市级近似定位”,不追求街道级精度。 +# 失败时必须稳定回退到固定城市,避免影响整条 dashboard 链路。 +export LOCATION_GEOIP_URL=${LOCATION_GEOIP_URL:-"https://ipwho.is/"} +export LOCATION_REFRESH_INTERVAL_MINUTES=${LOCATION_REFRESH_INTERVAL_MINUTES:-720} +export LOCATION_FALLBACK_CITY=${LOCATION_FALLBACK_CITY:-"杭州"} +export LOCATION_FALLBACK_LAT=${LOCATION_FALLBACK_LAT:-30.274084} +export LOCATION_FALLBACK_LON=${LOCATION_FALLBACK_LON:-120.155070} +export LOCATION_FALLBACK_TIMEZONE=${LOCATION_FALLBACK_TIMEZONE:-"Asia/Shanghai"} +# 日历背景在跨天时必须至少更新一次;平时不需要高频拉图。 +# 这里默认按 24 小时做兜底,同时 dash.sh 里还会在北京时间跨天后强制补一次刷新。 +export BACKGROUND_REFRESH_INTERVAL_MINUTES=${BACKGROUND_REFRESH_INTERVAL_MINUTES:-1440} export CLOCK_REGION_X=${CLOCK_REGION_X:-347} export CLOCK_REGION_Y=${CLOCK_REGION_Y:-55} export CLOCK_REGION_WIDTH=${CLOCK_REGION_WIDTH:-220} @@ -44,18 +68,22 @@ export CLOCK_CENTER_RADIUS=${CLOCK_CENTER_RADIUS:-7} # 这段时间会从真正的休眠时长里扣掉,避免分钟刷新慢一拍。 export PRE_SLEEP_GRACE_SECONDS=${PRE_SLEEP_GRACE_SECONDS:-10} # 手动短按电源键把 Kindle 提前唤醒后,额外保持前台显示的秒数。 -# 这样用户有足够时间看屏、切主题或继续交互,而不会立刻再次休眠。 -export MANUAL_WAKE_KEEP_AWAKE_SECONDS=${MANUAL_WAKE_KEEP_AWAKE_SECONDS:-60} +# debug off 下这里固定为 300 秒,也就是按 power 之后保持 5 分钟可视窗口。 +export MANUAL_WAKE_KEEP_AWAKE_SECONDS=${MANUAL_WAKE_KEEP_AWAKE_SECONDS:-300} # 如果实际休眠时长比计划值至少少这么多秒,就认为是被用户手动提前唤醒。 export MANUAL_WAKE_EARLY_TOLERANCE_SECONDS=${MANUAL_WAKE_EARLY_TOLERANCE_SECONDS:-5} +# 默认 overlay/静默同步模式下,不再提前显示 sleeping.png。 +# Voyage 上这张图只有 600x800,提前显示时会只占左上角一块并盖住当前 calendar。 +# 如需恢复旧的“休眠前先显示提示图”行为,可手动改回 true。 +export SLEEPING_SCREEN_ENABLED=${SLEEPING_SCREEN_ENABLED:-false} -# Voyage 顶部状态栏遮罩:用于压住系统偶尔重画出来的时间、Wi-Fi、电池图标。 -# 当前坐标只覆盖页面顶部空白带,不会擦到天气卡上边框。 +# Voyage 顶部状态栏遮罩:用于压住系统偶尔重画出来的时间、Wi‑Fi、电池图标。 +# 遮罩只覆盖右上角状态区,避免继续压住 calendar 自己的顶部内容。 export STATUS_MASK_ENABLED=${STATUS_MASK_ENABLED:-true} -export STATUS_MASK_LEFT=${STATUS_MASK_LEFT:-700} +export STATUS_MASK_LEFT=${STATUS_MASK_LEFT:-600} export STATUS_MASK_TOP=${STATUS_MASK_TOP:-0} -export STATUS_MASK_WIDTH=${STATUS_MASK_WIDTH:-372} -export STATUS_MASK_HEIGHT=${STATUS_MASK_HEIGHT:-24} +export STATUS_MASK_WIDTH=${STATUS_MASK_WIDTH:-360} +export STATUS_MASK_HEIGHT=${STATUS_MASK_HEIGHT:-48} export STATUS_MASK_PASSES=${STATUS_MASK_PASSES:-3} export STATUS_MASK_DELAY_SECONDS=${STATUS_MASK_DELAY_SECONDS:-1} diff --git a/dash/src/local/fetch-dashboard.sh b/dash/src/local/fetch-dashboard.sh index 897126d..1f05c54 100755 --- a/dash/src/local/fetch-dashboard.sh +++ b/dash/src/local/fetch-dashboard.sh @@ -6,6 +6,13 @@ output_path=${1:?"missing output path"} DIR="$(CDPATH= cd -- "$(dirname "$0")" && pwd)" ENV_FILE="$DIR/env.sh" THEME_RUNTIME_ENV_FILE="$DIR/state/theme-runtime.env" +local_only=false + +if [ "${1:-}" = "--local-only" ]; then + local_only=true + shift + output_path=${1:?"missing output path"} +fi # fetch-dashboard 既会被 dash.sh 调,也会被 switch-theme.sh 单独调。 # 因此这里每次都重新读取一次运行时主题配置,确保拿到当前背景地址。 @@ -16,17 +23,74 @@ THEME_RUNTIME_ENV_FILE="$DIR/state/theme-runtime.env" background_path=${BACKGROUND_PATH:-""} background_url=${BACKGROUND_URL:-"https://shell.biboer.cn:20001/kindlebg.png"} +weather_use_kindle_location=${WEATHER_USE_KINDLE_LOCATION:-false} local_background_path="" if [ -n "$background_path" ]; then local_background_path="$DIR/../$background_path" fi -# 主题背景如果已经随本地部署同步到 Kindle,优先直接拷贝本地文件, -# 这样切换主题时不依赖远端图片资源是否已经发布完成。 -if [ -n "$local_background_path" ] && [ -f "$local_background_path" ]; then - cp "$local_background_path" "$output_path" +copy_local_background() { + if [ -n "$local_background_path" ] && [ -f "$local_background_path" ]; then + cp "$local_background_path" "$output_path" + return 0 + fi + + echo "本地主题包缺少背景图:${background_path:-unknown}" >&2 + return 1 +} + +is_valid_png() { + candidate_path=$1 + + if [ ! -f "$candidate_path" ]; then + return 1 + fi + + # Kindle 端已经确认有 file 命令;如果将来某台机器没有,再回退到 PNG 签名检查。 + if command -v file >/dev/null 2>&1; then + if file "$candidate_path" 2>/dev/null | grep -q "PNG image data"; then + return 0 + fi + fi + + signature=$(dd if="$candidate_path" bs=8 count=1 2>/dev/null | od -An -tx1 | tr -d ' \n') + [ "$signature" = "89504e470d0a1a0a" ] +} + +if [ "$local_only" = true ]; then + # KUAL 触发的切主题链路必须尽快返回,所以这里严格只读本地素材。 + # 如果本地包缺图,直接失败,让问题暴露出来,而不是把联网等待塞进交互里。 + copy_local_background + exit $? +fi + +if [ "$weather_use_kindle_location" = true ] && copy_local_background; then + # 背景里的天气信息当前仍是导图时烘焙进去的。 + # 开启 Kindle 位置天气后,必须优先使用同步到设备的本地主题背景, + # 否则后续定时刷新会被服务器上的通用背景覆盖掉。 exit 0 fi -"$DIR/../xh" -d -q -o "$output_path" get "$background_url" +# 定时背景刷新和启动阶段走这里时,优先尝试拉远端最新背景。 +# 如果远端暂时失败,再回退到本地包,至少保证 dashboard 还能继续显示。 +remote_tmp_path="${output_path}.remote.$$" +rm -f "$remote_tmp_path" + +if "$DIR/../xh" -d -q -o "$remote_tmp_path" get "$background_url"; then + if is_valid_png "$remote_tmp_path"; then + mv "$remote_tmp_path" "$output_path" + exit 0 + fi + + echo "远端背景不是有效 PNG,忽略本次响应并回退本地主题包:$background_url" >&2 +fi + +rm -f "$remote_tmp_path" + +if copy_local_background; then + exit 0 +fi + +echo "远端背景拉取失败,且本地主题包也缺少背景图:${background_path:-unknown}" >&2 +exit 1 diff --git a/dash/src/local/location-env.sh b/dash/src/local/location-env.sh new file mode 100644 index 0000000..51e2f9c --- /dev/null +++ b/dash/src/local/location-env.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env sh +set -eu + +DIR="$(CDPATH= cd -- "$(dirname "$0")" && pwd)" +ENV_FILE="$DIR/env.sh" +STATE_DIR="$DIR/state" +LOCATION_CACHE_FILE="$STATE_DIR/location.env" +LOCATION_SYNC_CMD="$DIR/location-sync.sh" +refresh_if_needed=false +force_refresh=false + +while [ "$#" -gt 0 ]; do + case "$1" in + --refresh-if-needed) + refresh_if_needed=true + ;; + --force-refresh) + force_refresh=true + ;; + *) + echo "Unknown argument: $1" >&2 + exit 1 + ;; + esac + shift +done + +# shellcheck disable=SC1090 +[ -f "$ENV_FILE" ] && . "$ENV_FILE" + +if [ "$force_refresh" = true ]; then + "$LOCATION_SYNC_CMD" --force >/dev/null 2>&1 || true +elif [ "$refresh_if_needed" = true ]; then + "$LOCATION_SYNC_CMD" >/dev/null 2>&1 || true +fi + +location_source="fallback" +location_city=${LOCATION_FALLBACK_CITY:-杭州} +location_lat=${LOCATION_FALLBACK_LAT:-30.274084} +location_lon=${LOCATION_FALLBACK_LON:-120.155070} +location_timezone=${LOCATION_FALLBACK_TIMEZONE:-Asia/Shanghai} + +if [ -f "$LOCATION_CACHE_FILE" ]; then + # shellcheck disable=SC1090 + . "$LOCATION_CACHE_FILE" + + if [ -n "${LOCATION_LAT:-}" ] && [ -n "${LOCATION_LON:-}" ]; then + location_source=${LOCATION_SOURCE:-geoip} + location_city=${LOCATION_CITY:-$location_city} + location_lat=${LOCATION_LAT} + location_lon=${LOCATION_LON} + location_timezone=${LOCATION_TIMEZONE:-$location_timezone} + fi +fi + +quote_for_shell() { + printf "%s" "$1" | sed "s/'/'\\\\''/g" +} + +printf "export LOCATION_SOURCE='%s'\n" "$(quote_for_shell "$location_source")" +printf "export LOCATION_CITY='%s'\n" "$(quote_for_shell "$location_city")" +printf "export LOCATION_LAT='%s'\n" "$(quote_for_shell "$location_lat")" +printf "export LOCATION_LON='%s'\n" "$(quote_for_shell "$location_lon")" +printf "export LOCATION_TIMEZONE='%s'\n" "$(quote_for_shell "$location_timezone")" diff --git a/dash/src/local/location-sync.sh b/dash/src/local/location-sync.sh new file mode 100644 index 0000000..b2c4910 --- /dev/null +++ b/dash/src/local/location-sync.sh @@ -0,0 +1,164 @@ +#!/usr/bin/env sh +set -eu + +DIR="$(CDPATH= cd -- "$(dirname "$0")" && pwd)" +ENV_FILE="$DIR/env.sh" +STATE_DIR="$DIR/state" +LOCATION_CACHE_FILE="$STATE_DIR/location.env" +FETCH_CMD="$DIR/../xh" +force_refresh=false + +while [ "$#" -gt 0 ]; do + case "$1" in + --force) + force_refresh=true + ;; + *) + echo "Unknown argument: $1" >&2 + exit 1 + ;; + esac + shift +done + +# shellcheck disable=SC1090 +[ -f "$ENV_FILE" ] && . "$ENV_FILE" + +mkdir -p "$STATE_DIR" + +current_epoch() { + date '+%s' +} + +cache_refresh_due() { + if [ ! -f "$LOCATION_CACHE_FILE" ]; then + return 0 + fi + + last_epoch=$(awk -F= '/^export LOCATION_UPDATED_AT_EPOCH=/{gsub("'"'"'", "", $2); print $2; exit}' "$LOCATION_CACHE_FILE" 2>/dev/null || true) + if [ -z "$last_epoch" ]; then + return 0 + fi + + now_epoch=$(current_epoch) + [ $((now_epoch - last_epoch)) -ge $((LOCATION_REFRESH_INTERVAL_MINUTES * 60)) ] +} + +extract_geoip_fields() { + payload_path=$1 + + lua - "$payload_path" <<'LUA' +local path = arg[1] +local file = io.open(path, "r") +if not file then + os.exit(1) +end + +local data = file:read("*a") +file:close() + +if data:match('"success"%s*:%s*false') then + os.exit(1) +end + +local function match_string(source, pattern) + local value = source:match(pattern) + if not value then + return nil + end + + return value + :gsub('\\"', '"') + :gsub("\\\\", "\\") +end + +local city = match_string(data, '"city"%s*:%s*"(.-)"') +local latitude = data:match('"latitude"%s*:%s*(-?%d+%.?%d*)') +local longitude = data:match('"longitude"%s*:%s*(-?%d+%.?%d*)') +local timezone_block = data:match('"timezone"%s*:%s*(%b{})') +local timezone = timezone_block and match_string(timezone_block, '"id"%s*:%s*"(.-)"') or nil + +if not latitude or not longitude then + os.exit(1) +end + +print("CITY=" .. (city or "当前位置")) +print("LAT=" .. latitude) +print("LON=" .. longitude) +print("TIMEZONE=" .. (timezone or "Asia/Shanghai")) +LUA +} + +quote_for_shell() { + printf "%s" "$1" | sed "s/'/'\\\\''/g" +} + +if [ "$force_refresh" != true ] && ! cache_refresh_due; then + exit 0 +fi + +if [ ! -x "$FETCH_CMD" ]; then + echo "Location sync failed: xh is unavailable" >&2 + exit 1 +fi + +payload_path="$STATE_DIR/location-response.$$" +rm -f "$payload_path" + +if ! "$FETCH_CMD" -d -q -o "$payload_path" get "$LOCATION_GEOIP_URL"; then + rm -f "$payload_path" + echo "Location sync failed: GeoIP request failed" >&2 + exit 1 +fi + +location_city="" +location_lat="" +location_lon="" +location_timezone="" + +if ! parsed_output=$(extract_geoip_fields "$payload_path"); then + rm -f "$payload_path" + echo "Location sync failed: unable to parse GeoIP payload" >&2 + exit 1 +fi + +rm -f "$payload_path" + +while IFS='=' read -r key value; do + case "$key" in + CITY) + location_city=$value + ;; + LAT) + location_lat=$value + ;; + LON) + location_lon=$value + ;; + TIMEZONE) + location_timezone=$value + ;; + esac +done <&2 + exit 1 +fi + +now_epoch=$(current_epoch) +now_iso=$(date '+%Y-%m-%dT%H:%M:%S%z' | sed 's/\(..\)$/:\1/') + +cat >"$LOCATION_CACHE_FILE" </dev/null 2>&1; then + if file "$candidate_path" 2>/dev/null | grep -q "PNG image data"; then + return 0 + fi + fi + + signature=$(dd if="$candidate_path" bs=8 count=1 2>/dev/null | od -An -tx1 | tr -d ' \n') + [ "$signature" = "89504e470d0a1a0a" ] +} + +fetch_png_to_path() { + url=$1 + output_path=$2 + tmp_path="${output_path}.tmp.$$" + + rm -f "$tmp_path" + + if ! "$FETCH_CMD" -d -q -o "$tmp_path" get "$url"; then + rm -f "$tmp_path" + return 1 + fi + + if ! is_valid_png "$tmp_path"; then + rm -f "$tmp_path" + return 1 + fi + + mv "$tmp_path" "$output_path" + return 0 +} + +cleanup_stale_files() { + target_dir=$1 + expected_file=$2 + pattern=$3 + + for existing_path in "$target_dir"/$pattern; do + [ -e "$existing_path" ] || continue + + existing_name=$(basename "$existing_path") + if ! grep -Fqx "$existing_name" "$expected_file"; then + rm -f "$existing_path" + fi + done +} + +echo "Syncing all theme backgrounds from remote" +"$WAIT_FOR_WIFI_CMD" "$WIFI_TEST_IP" + +if ! fetch_to_path "$THEMES_INDEX_URL" "$THEMES_INDEX_CACHE"; then + echo "Themes index fetch failed: $THEMES_INDEX_URL" >&2 + exit 1 +fi + +cp "$THEMES_INDEX_CACHE" "$LOCAL_THEMES_INDEX" +: >"$EXPECTED_THEMES_FILE" +: >"$EXPECTED_BACKGROUNDS_FILE" + +theme_configs=$(lua "$THEME_JSON_LUA" list-configs "$THEMES_INDEX_CACHE") + +if [ -z "$theme_configs" ]; then + echo "Themes index is empty." >&2 + exit 1 +fi + +printf '%s\n' "$theme_configs" | while IFS="$(printf '\t')" read -r theme_id config_url; do + [ -n "$theme_id" ] || continue + [ -n "$config_url" ] || continue + + local_theme_config="$LOCAL_THEMES_DIR/$theme_id.json" + if ! fetch_to_path "$config_url" "$local_theme_config"; then + echo "Theme config fetch failed: $theme_id $config_url" >&2 + exit 1 + fi + + printf '%s\n' "$(basename "$local_theme_config")" >>"$EXPECTED_THEMES_FILE" + + theme_backgrounds=$(lua "$THEME_JSON_LUA" list-backgrounds "$local_theme_config") + if [ -z "$theme_backgrounds" ]; then + echo "Theme config has no backgrounds: $theme_id" >&2 + exit 1 + fi + + printf '%s\n' "$theme_backgrounds" | while IFS="$(printf '\t')" read -r orientation background_path background_url; do + [ -n "$background_path" ] || continue + [ -n "$background_url" ] || continue + + background_file=$(basename "$background_path") + local_background_path="$LOCAL_BACKGROUND_DIR/$background_file" + + if ! fetch_png_to_path "$background_url" "$local_background_path"; then + echo "Theme background fetch failed: $theme_id $orientation $background_url" >&2 + exit 1 + fi + + printf '%s\n' "$background_file" >>"$EXPECTED_BACKGROUNDS_FILE" + done +done + +cleanup_stale_files "$LOCAL_THEMES_DIR" "$EXPECTED_THEMES_FILE" "*.json" +cleanup_stale_files "$LOCAL_BACKGROUND_DIR" "$EXPECTED_BACKGROUNDS_FILE" "*.png" + +echo "Theme background sync completed" diff --git a/dash/src/local/theme-json.lua b/dash/src/local/theme-json.lua index faf19ba..d245753 100644 --- a/dash/src/local/theme-json.lua +++ b/dash/src/local/theme-json.lua @@ -234,6 +234,56 @@ local function first_orientation(theme, fallback) return (theme.orientations or {})[1] or fallback end +local function orientation_label(orientation) + if orientation == "landscape" then + return "横屏" + end + + if orientation == "portrait" then + return "竖屏" + end + + return orientation +end + +local function ordered_variant_keys(variants) + local keys = {} + local seen = {} + local preferred = {"portrait", "landscape"} + + for _, key in ipairs(preferred) do + if variants[key] ~= nil then + keys[#keys + 1] = key + seen[key] = true + end + end + + for key, _ in pairs(variants) do + if not seen[key] then + keys[#keys + 1] = key + end + end + + table.sort(keys, function(left, right) + return left < right + end) + + for index = #preferred, 1, -1 do + local key = preferred[index] + if seen[key] then + for key_index, value in ipairs(keys) do + if value == key then + table.remove(keys, key_index) + table.insert(keys, 1, key) + break + end + end + end + end + + return keys +end + local function shell_quote(value) return "'" .. tostring(value):gsub("'", [['"'"']]) .. "'" end @@ -330,11 +380,45 @@ end if command == "list" then local index_path = assert(arg[2], "missing themes index path") local index_data = decode(read_file(index_path)) + local orientation_order = {"landscape", "portrait"} for _, theme in ipairs(index_data.themes or {}) do - io.write(theme.id or "", "\t") - io.write(theme.label or theme.id or "", "\t") - io.write(table.concat(theme.orientations or {}, ","), "\n") + for _, orientation in ipairs(orientation_order) do + if orientation_exists(theme, orientation) then + io.write(theme.id or "", "\t") + io.write((theme.id or "") .. "-" .. orientation_label(orientation), "\t") + io.write(orientation, "\n") + end + end + end + + return +end + +if command == "list-configs" then + local index_path = assert(arg[2], "missing themes index path") + local index_data = decode(read_file(index_path)) + + for _, theme in ipairs(index_data.themes or {}) do + if theme.id ~= nil and theme.configUrl ~= nil then + io.write(theme.id, "\t", theme.configUrl, "\n") + end + end + + return +end + +if command == "list-backgrounds" then + local theme_path = assert(arg[2], "missing theme config path") + local theme_data = decode(read_file(theme_path)) + local variants = assert(theme_data.variants, "missing variants") + + for _, orientation in ipairs(ordered_variant_keys(variants)) do + local variant = variants[orientation] + local background = variant.background or {} + if background.path ~= nil and background.url ~= nil then + io.write(orientation, "\t", background.path, "\t", background.url, "\n") + end end return diff --git a/dash/src/local/theme-menu-service.sh b/dash/src/local/theme-menu-service.sh index 4c0d603..f00adb7 100644 --- a/dash/src/local/theme-menu-service.sh +++ b/dash/src/local/theme-menu-service.sh @@ -15,7 +15,7 @@ RUNTIME_DIR_DEFAULT="/tmp/kindle-dash-theme-menu" EVENT_DEVICE_DEFAULT="/dev/input/event2" THEME_MENU_COMBO_WINDOW_SECONDS_DEFAULT="0.35" HOME_MENU_ITEM_ID="__return_home__" -HOME_MENU_ITEM_LABEL="Return Home" +HOME_MENU_ITEM_LABEL="返回" # shellcheck disable=SC1090 [ -f "$ENV_FILE" ] && . "$ENV_FILE" @@ -114,8 +114,8 @@ theme_field() { } current_theme_index() { - awk -F '\t' -v current_theme="$current_theme_id" ' - $1 == current_theme { + awk -F '\t' -v current_theme="$current_theme_id" -v current_orientation="$current_orientation" ' + $1 == current_theme && $3 == current_orientation { print NR found = 1 exit @@ -138,6 +138,9 @@ print_line() { render_menu() { total_themes=$(theme_count) current_label=$(theme_field "$selected_index" 2) + grid_left_col=3 + grid_right_col=24 + grid_start_row=8 /usr/sbin/eips -c print_line 3 1 "Kindle Dashboard" @@ -146,26 +149,35 @@ render_menu() { print_line 3 6 "Selected: $current_label" print_line 3 7 "--------------------------------" - row=9 index=1 while [ "$index" -le "$total_themes" ]; do theme_label=$(theme_field "$index" 2) - theme_id=$(theme_field "$index" 1) prefix=" " line_text="" + row=0 + col=0 if [ "$index" -eq "$selected_index" ]; then prefix="> " fi - if [ "$theme_id" = "$HOME_MENU_ITEM_ID" ]; then - line_text="${prefix}${theme_label}" + line_text="${prefix}${theme_label}" + + if [ "$index" -le 8 ]; then + row_offset=$(( (index - 1) / 2 )) + row=$((grid_start_row + row_offset * 2)) + + if [ $((index % 2)) -eq 1 ]; then + col=$grid_left_col + else + col=$grid_right_col + fi else - line_text="${prefix}${theme_label} (${theme_id})" + row=16 + col=3 fi - print_line 3 "$row" "$line_text" - row=$((row + 2)) + print_line "$col" "$row" "$line_text" index=$((index + 1)) done @@ -198,6 +210,7 @@ move_selection() { apply_selection() { selected_theme_id=$(theme_field "$selected_index" 1) + selected_orientation=$(theme_field "$selected_index" 3) /usr/sbin/eips -c if [ "$selected_theme_id" = "$HOME_MENU_ITEM_ID" ]; then @@ -209,10 +222,10 @@ apply_selection() { return fi - log_event "apply theme=$selected_theme_id orientation=$current_orientation" + log_event "apply theme=$selected_theme_id orientation=$selected_orientation" print_line 3 5 "Applying theme..." - print_line 3 7 "$selected_theme_id / $current_orientation" - "$SWITCH_THEME_CMD" "$selected_theme_id" "$current_orientation" + print_line 3 7 "$selected_theme_id / $selected_orientation" + "$SWITCH_THEME_CMD" "$selected_theme_id" "$selected_orientation" menu_open=false } diff --git a/dash/src/local/theme-sync.sh b/dash/src/local/theme-sync.sh index 02f35f6..9c19f31 100644 --- a/dash/src/local/theme-sync.sh +++ b/dash/src/local/theme-sync.sh @@ -25,6 +25,7 @@ mkdir -p "$STATE_DIR" force_index=false force_theme=false +local_only=false requested_theme_id=${THEME_ID:-default} requested_orientation=${ORIENTATION:-portrait} @@ -36,6 +37,9 @@ while [ "$#" -gt 0 ]; do --force-theme) force_theme=true ;; + --local-only) + local_only=true + ;; --theme) shift requested_theme_id=${1:?"missing theme id"} @@ -118,6 +122,11 @@ sync_themes_index() { return 0 fi + if [ "$local_only" = true ]; then + echo "本地主题包缺少 themes.json。" >&2 + return 1 + fi + # 主题清单是全局入口,平时按天同步一次即可。 # 真正切换主题时会走 --force-index,确保马上拿到最新列表。 if [ "$force_index" = true ] || [ ! -f "$THEMES_INDEX_CACHE" ] || refresh_due "$THEMES_INDEX_TIMESTAMP_FILE" "$THEMES_INDEX_REFRESH_INTERVAL_MINUTES"; then @@ -165,6 +174,11 @@ sync_theme_config() { return 0 fi + if [ "$local_only" = true ]; then + echo "本地主题包缺少主题配置:$resolved_theme_id" >&2 + return 1 + fi + # 主题配置按 theme 维度缓存; # orientation 只是同一个主题 JSON 里的 variant,切换方向不需要重新拉整份配置。 needs_theme_fetch=$force_theme diff --git a/dash/src/start.sh b/dash/src/start.sh index 51799fc..8fd558f 100755 --- a/dash/src/start.sh +++ b/dash/src/start.sh @@ -6,15 +6,32 @@ DIR="$(dirname "$0")" ENV_FILE="$DIR/local/env.sh" THEME_FILE="$DIR/local/theme.env" LOG_FILE="$DIR/logs/dash.log" +PID_FILE="$DIR/local/state/dashboard.pid" mkdir -p "$(dirname "$LOG_FILE")" +mkdir -p "$DIR/local/state" # shellcheck disable=SC1090 [ -f "$ENV_FILE" ] && . "$ENV_FILE" # shellcheck disable=SC1090 [ -f "$THEME_FILE" ] && . "$THEME_FILE" +stop_existing_dashboard_processes() { + # 主题切换后再次 start 时,旧的 dash 主循环如果还活着, + # 会继续按旧主题或旧坐标补画时钟,最终在屏幕上叠出两个时钟。 + # 这里统一先清掉旧实例,再启动新的单实例 dashboard。 + pkill -f "$DIR/dash.sh" 2>/dev/null || true + pkill -f "$DIR/local/theme-menu-service.sh" 2>/dev/null || true + pkill -f "$DIR/local/touch-home-service.sh" 2>/dev/null || true + sleep 1 +} + +stop_existing_dashboard_processes + +echo "start.sh invoked at $(date '+%Y-%m-%d %H:%M:%S %Z') with DEBUG=$DEBUG" >>"$LOG_FILE" + if [ "$DEBUG" = true ]; then + printf '%s\n' "$$" >"$PID_FILE" "$DIR/dash.sh" else # 通过 SSH 或 KUAL 触发时,父 shell 很快就会退出。 @@ -25,4 +42,7 @@ else else nohup "$DIR/dash.sh" >>"$LOG_FILE" 2>&1 "$PID_FILE" + echo "start.sh spawned dashboard launcher pid=$!" >>"$LOG_FILE" fi diff --git a/dash/src/switch-theme.sh b/dash/src/switch-theme.sh index b62867f..665cf7e 100644 --- a/dash/src/switch-theme.sh +++ b/dash/src/switch-theme.sh @@ -7,10 +7,8 @@ THEME_FILE="$DIR/local/theme.env" THEME_RUNTIME_ENV_FILE="$DIR/local/state/theme-runtime.env" BACKGROUND_TIMESTAMP_FILE="$DIR/local/state/background-updated-at" BACKGROUND_PNG="$DIR/kindlebg.png" -WAIT_FOR_WIFI_CMD="$DIR/wait-for-wifi.sh" THEME_SYNC_CMD="$DIR/local/theme-sync.sh" FETCH_DASHBOARD_CMD="$DIR/local/fetch-dashboard.sh" -CLOCK_RENDER_CMD="$DIR/local/render-clock.sh" # shellcheck disable=SC1090 [ -f "$ENV_FILE" ] && . "$ENV_FILE" @@ -22,16 +20,19 @@ requested_orientation=${2:-${ORIENTATION:-portrait}} mkdir -p "$DIR/local/state" -# 切换主题时必须立刻联网拉到最新配置和背景, -# 否则用户会看到 theme.env 已更新,但屏幕内容仍停留在旧主题。 echo "Switching theme to $requested_theme_id / $requested_orientation" -"$WAIT_FOR_WIFI_CMD" "$WIFI_TEST_IP" -"$THEME_SYNC_CMD" --force-index --force-theme --theme "$requested_theme_id" --orientation "$requested_orientation" >/dev/null +# KUAL 切主题的目标是尽快把 calendar 画出来。 +# 这里强制只用设备上已经同步好的本地主题素材,避免因为网络抖动 +# 又回到首页停留几秒,破坏“直接切到 calendar”的体感。 +"$THEME_SYNC_CMD" --local-only --theme "$requested_theme_id" --orientation "$requested_orientation" >/dev/null # shellcheck disable=SC1090 . "$THEME_RUNTIME_ENV_FILE" -"$FETCH_DASHBOARD_CMD" "$BACKGROUND_PNG" +# 背景图同样只从本地主题包读取。 +# 如果本地包缺图,直接失败,让问题暴露出来;补素材应走后台同步或重新部署, +# 不能把联网等待塞回用户点击主题这条交互链路里。 +"$FETCH_DASHBOARD_CMD" --local-only "$BACKGROUND_PNG" date '+%s' >"$BACKGROUND_TIMESTAMP_FILE" # 只有在主题配置和背景都成功拉取后,才把当前选择持久化到 theme.env。 @@ -41,6 +42,9 @@ export ORIENTATION='${ORIENTATION}' EOF /usr/sbin/eips -f -g "$BACKGROUND_PNG" -"$CLOCK_RENDER_CMD" true + +# 这里不再同步阻塞等待时钟重绘。 +# 背景先尽快上屏,让用户从 KUAL 返回后更快看到 calendar; +# 后续的时钟和遮罩交给 start.sh 拉起的主循环补画。 echo "Theme switched to ${THEME_ID} / ${ORIENTATION}" diff --git a/dash/staging/kterm/kterm-kindle-2.6.zip b/dash/staging/kterm/kterm-kindle-2.6.zip new file mode 100644 index 0000000000000000000000000000000000000000..85d71171a3df054d78940340039c5e8120eb1b37 GIT binary patch literal 417136 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

yej~2 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

  • y_*DLH~|!%|$O*22YrR}OpS?om}i!el6UAxq^#(*|J*tJPE9m_}d)s>tY)vvGcN&ySW0d$oX&hU$OEu zz$@v$0B$b#><`In(sycgV3|TD*7)8oEG_O{!WqS5YM1~ z`V1=4XV6H{U0x-l7hh6uiOjEAc=LS$Ps%`*K4-!jLilQ*4|bj{t6x(iYa=WEN$}0@ zNn7Y|ZTbAawG6yi--#Vpo7+mBJgVcEieEnZt`2cMH(7me%XQgfg;780EAqQn*Qh=F z2>!rHe#8TXd|ZOy~TwsUH!W$uH8{XgV(&~khx$^K_0U#FVi*25*X0jo(e4a1(qDrTLW^X{#mJ58V?rK@?Y|_qQb$(9eJ_H@)-)Ekc@EGPhlZGw$H zJ@Q16@~yp*-!^wu(R|I3MiMyhHc&)t%J@a(T1DE`0>#dDx$AoV_c z;%gZR@K`xZ!J!mzF!dbzw60`<)Crz9lo-gh_Qlt^ZBH2M(%sL3$7gAMQLRfeLf6H; zLR?Mxk-cZ!QRSPSevCtjcdd%p5(_+3QJlK9v^(?-Am2F1NNAe`+I9I=3>e0e8vTvB zzY>{oV7^6}fcA-1WUu*Apy@_|rW*yC&fXLCvy|VZlTmJVc(zG;jsACB!MIrr+P467 z((=H1;hUBRR!N)*wlDFkD4(T0SwPu9GuHG$=m+D?cmntyc#%FomiymGyZoaw%l#|m zd+K964>$?XcVtA49Inm$@fOnW7s|Kdqn!3u*x$3- z+pH(dO>!qWBh@DTXb)~m_emvPLQnYVH)m7Ymr(J)yoQR|Ok0ov8V>^}Yu-#h%QV_-PxNWj|yi*PdC{p_mC2M!LQ=mkpI3|$M~`D zQ{*lwq;#ChwQnj{QsMs))?P(qi8VI-F6B#umZG2ZkGmB8lzaKpUg-SlW_8w3M#8)1 ze{wGSe6gMK^u*9Y!B_O7l$g_NyDNG|#{Y+2+dnvh@g{Fj`0EHI2Ov(P{4jaM_1j-L zX_wqPx=(uT<6~~g`^sls8@|%MQuW>Ej#I{Dm)xxK>^?2fXWR@uKX!Z~jxnJ5dX8@- z#y1M%3+eI2F}}FA;R(6I z-N0K^AATk_Ig_*WQCB}0%`ZB_{ECWWCqH2ljPpf>mLYMpO@~(m_oqU@hZ^Q!)s%{ zP;IP$w!kUSp2ifM`HMR}MolMm**H%gV_v5(Tx)ua+Ro+Cm(#Z03dg_ul)hPyvKbfu zhhFTVyQ-Dmjh8$)`T%-1V}$GE-g~4&w~T9Td1_snXRIsGkWqGr6UBDW>mOh-CLa1V z$78f~HqbvK`m{W-TGqIytL+K=T~ED&>)CEY?ou-EtSfSQ|K*Wa z`q^=o2zTBeP|u;*)|(28?e&Sa9r54Qk8QSe z7KiFgj?b5B!0$NQp0hmg3gzVz@6aCq2grA8*ayjP0Pf3!Z>I&9L;#1#Y-I=@J%*y2axPqgf2nDM}u3mxv&au}7)`OO)&emugV&}*F>*Za*UzLsd zS6OWb|E;5YnHrRd=`uCCOssnuybn3*@BYr$t?f#`dRIZ12Pj{gkjDHz<@~nCc{kK| zgyUH8ZBlKHOL5++P0HvhQk?tH8}v!yR=&XQbqA7ClWZCMPxds7MGB(xH+njf5bebR(VH5ELXQ z(mAA&4rw-!?rzxV8Zc^XY;1e@JC8v=@%e`LUpN&rw{e@{N9C}PqYUaA9)GFB=f$mxy+oLU!nICi?Bw2{cDFjyv>`NX!^3)gy8WP|~bt)!Fp4%=g*K7&21~nuC_U{MN|t_qGQtWT*DC%ya&*W5$U|FiI+f??5_BuXMK9zToq@~#vX3M?CDFOz z^|>_S_xl2xxHot_MyEnVCOjqU zq(1Vb@2wi@@x$azL5(j#lqr}*nD%o z1^oT@$_P2odNf%d9gU%xkMpSYi#jkJKyI=TU^-xv_Doox86Z))Gc5FI5pOUyR?cebXx#xVLeY z!|lqx8#OBR^J;Zy`CDO2c$N#2d@s-tDx}%ke)8Y!i;JWR^Bsy2OkX4;3^!|-bfT4K zN%C&LnVP8t=yOg5T%9aS$y*W_S6?tuYOIBIoy!g05pi4~S9;8@M4A=f(gv-zyU5sV zd1dZKdM3A5sSGH3p6hao5;{5FNFX^S@bJ98L!f@US_k zxHs$Q^RNf$Ra{^q_ZhvSJ)i8ey4xE?I*b71ASV^vLm%nklUUeWFpKES>UugSKdYrR zP^yw(-;sa&*pYiTYKB7-c)a7D0Q>fDDE4sSD&zKpe3>w)pUZ5u(P5gx`-T(M%G^7C1h zgG;zU(6E1jk=)3aC+!Bo&Z-Wdt1RaZ5JQC+w>LTjlry_Ds;fy-U)YJpUWe@ z^f^w2z^xePcABMP%`2WnQ4oGs@kHvgN?Jf{n}>B4r9vZxSiH~}U2}2Y<+#wDpmdop z=TzAeIYv$K0L4Rp=j_XtQF&i?u3WtQ72V~T&P9w8-Ae|^ul~Do(%`?ySNOM9mNOeO zXinR?a16&^;uUk&-{kwJV;xQjQ>b?qsX2Cmp}|Nl*%P!ce`=I z5cO^)CFtr95()_>9N|ySMiDzF5`8977m(z(v;JV{AhEf_-{eQdEAe(JZ||QGdp0=p zV-ejjVnBQ#9Uu4_6UL3({y1iN2Fn)F0-a3;T!+Jtj?>8W_P8OCtUV*{uyna zCQX4q+|AfG+MYvtb?2||oMMvRMf?b#X_>^k4WYHI9gOcgF~QH@)&Lr=;xRd#jHoei)e)Sk98bgFyW~MEwp<8< zlrG+fgZv_{E>1V)CRW%lwB60`J7#xLZ+uQA4G(*H=l465;UTO z*PoeFdJWP3kL0XG+SL-kbFuQB7U>G?bh6*Ja$7`9($@S#2;yaLv4;{8Ofg?$Ml3oQ zn0_xX?+r6`N+FS5vBHE}(K#uy^MNm?&zjv1%z5`IxfX42F;CCZRK^Dyre-FwoNF^X zgv8D{ef(Lp{7^_K1;NC%312+{l&ZTVfP6J-NH01{N)wMySZA_PpP>7=H^W`7a{--J z$MT}9|4h50I`(NHFhOsX)kM0`vSVN}n(hM~OCf24RcJ#Ya#m3B>-{TI-rVZ)l1rij zzn%I-Zgk}R_)swID2L251&`I?G$V%Lt7Ic%}UHjQxXH2Zwx(Lc>N*vnb75>S5$ zw_~3>ZYS}wu9_Y@5&zW|QU|(B{AGSBJ@n|f_4$`{CnWV<#E+T=#RxQ~-l^${1Tbw%HOUY z^2~=9+r;vx)NJ^+8f=JfzPiM(GPP+0|31^N*Ubp}pfjYMzr0aV+b4io@IvL_v;1W% zf1KWJyme)AM9%MU3`RRcf+58)~EurLpAS&RJDFss%KR*k3iPZdiTqt{`KAVC<4VRvibE@ zXqNQgmIpAqb%`#D1-^bC?^#wY+SJ=+n5 zN2|P+=s%Y6KdNi~^b~owMH{m=;2K*q=v(fP^O=SiP(<%Azw^}UZU!WT8`D_Zwbs74 zRWuIGRZ|+TZpo!Ir8%M~`vD)5;=1oAy&yLW<@YegCn$KaZk)+uDgJ#8fMEStF5JFf zSd2BZ{}Ai#s*`xD(KrA0s$z5G3>-sOb=N?o)Mtm7db`#55H#EB8Z1s*AERAdx?K@chYIOT>|e*c>5b0u~@T>~IGi6l;GF z)vHt4Zav+&mcA?nt|>^YHCPgzuXpe=uX@?SxmW8jol$LrSU|3)^Unmnv*^E9P8T03 zE|bMu_2laEa%(v#Ok^s@suKUY?+Sj(gi=M+Hl@lyC~q5beeXzPuyVN)>`aNZel{9)RE13v{bIB&^Fylq@MJdi2Q zucXK?Y{Gh#IZQe9MF~nw{4*Cp5DSM<;U`u;LB{b_F)1xg1M6lq-?z<`no}t&?Xtc< zT?^*6yP{)pwp{7~B7?auir?dJ7SUNQ(j0YLS}RJBpA8^>Sg{|~MA)vpJ+3b6xVGP@ z_HnFYP>Q($RO?@QW7mR$cVL|Or4$SGiawL>9dZOmje0tMN9^M0@H}5Tj+@-EpW*N% z6v$~-GS}bI$*S@`VENT~s`xJ`k*v;>-9DC7b4C|j>4q0Ran7z~q1;*1TZ4GCe^**M zb}7z*k;8|`Jc@-wiSc*NO12{%8)X>Art;1z_SPvMsCT zmp!og?%;Q;FeAM8GJE98W$0vM;}#!h*W)W%2eQkaunr~*um8+}UsfPYqSAf591lRQ zXR#6!jbCKQTAUm9?m^U{oIj(b28WPYsG;|u zysFN&i5KmJZlb*Iiwh%ZzlEU?4XFv@k^-pH_iPCvxMHHRAg|br2Gu)ZM=GTTU~*IK`~+E_UzXjs%UHY}1OI?w)zIfvk`g$G}+cMFOq*m9QfZw=Pjy{z9sLG}@7B&BZx4LldSpnls9))a z5aBChee()YHgDho)>@Iql`hL^=G_R%!3M&Wz5&R8RH= z&T5^Ov#&&l^`Ka#7}V`VcB$ zbYnQX%XA}nC|&*oq&abG_%DG!tF_g^EC+?^GlenAHP7UQSU=g_{%`a)j!3s!?yNa$ z@2Ug|4F9<^b;#hbNKlghqzS`JIV{+iHQ#k#eH?*M2QkoMA{?;b*Mv+6Aj>fxZFc=6%kxb4UxS}Mn- zyg9OcC80yM4JqO))#eE~rRfbSX8lc#++K`c%e*z%%Zi~v9!_RO$94FFT6ME^S@y1} z1S&xS!tyod3#cjG&kHpxLvrULSf%N%VAuwspBs+nM1?C}cN5@rdu#1;CrZbP8}3N3 zm=6c0gL}Ugt&as(al?6hj`u4uw-o`(0Y-Cp4}Z)tfmhVOozzy02{-X;Cz-;O$Hg#* zDzn7|Q;kCvtXZtx+$7oHGSf_d#nCh_e4h&;Po4)vjum+x}4>v zX&)GgVHht?ZqX$@Ag%8XX|LeC+Ve%tZ#9Y>v{2UJ#nmu&b={BUO^!m`I1gq{`BE}- zhuXhlt{ReH4AC0g0r`N2Y>=`|{C2lL_{8~EePZMWo5Gm0D1h&f=LTzPWzq>e?BtjW zLb_&8EP*a_8o)DX<0uz)>a*pR?n)tKQ#LqfABO8 z`46kIaH#tg@^mk`P`Fka=mFSo#n_+=Tv}EV^oyI}MRDU}U-f41p7QD2KOc3JJ2gqg&;P0 z3>iErbg*mn2O3GA%|g9AA2ma!H=t}AK$WhCd1t_wwmBb5(;W+N+lw|3jx3GNvtxOQ zW}9Urxc5IzvIe1R)Obpz(TT{Q+d{>>jR1oDJn$8dng*yGAWe3(x$#*27nFxx5Z91u zuTUyD#Svg&3%9bdki5mw-59gGLLpPhT*e3xQ~^*?Z;`%>ziGUVA1AI^;CKbT9gYIEa3 zPYn1cHU78rSK`Jur8Il4d8mb&c4zDre)ZCfhqrZZyN;*&VijYtq*Zkn${eu0)$sue z{377S>^j3P|Lno!-F~W#ke8656Zbp&91)WAPK*Y3oP;N33f>kBXd3=}sA+gjRn^wW z_$o;y5b+*79XcIb&ngfld6OW=^xQnoFFb%de1~aQmvzi4J8{@u!PNStU4F6G(Z)9O z6+Gxif_Bzho`r$)@DdxgNw0#PYow>k&)J7=FBfBNANoE7e5+@0VwsfI>=le<8i;%! z`#$V_^!sbpjGzX4m?ZT;h*#81d_yNB4N1Gr<>_l5No;SrTP=4B@lf>AHvccli;trl zr4k=)mqL3(!TGt)wAlYGp!DYdE#dzaF!i(Oe_+w5{}sTf@khh?rL($O==p<5@q#VQ zWXGze<^BjdeL(a&=svEF4M6pzn%S4geD3g#C-^Qb@^+}p`flp|p`;BGqv)(DkN*Wn z+ZpTc17Jy2IUArCDC#0r>!N_Q+8*^=hf(hI-uu_@VhiabF-|%c&}ecb_&q#)EpD7| zQDA*dLNh41G5KG?XHCAJ>JKZ_U`nrXAEFX0A}^#l?QQ*Uq%iHyy)TgY#RIsT2j)%U ziIJo&rFRlHxaGt?=~IxdS@+Xg6Rk<3`8k%?EFSn=#9E$^%VAEQn~Fyn4WwzQeO)y) z{(V9B7UBIkin&Z02r0E|D*geS|DNZe4SECrG<@!CQT#?&g)rwR!SZHbkk^ZE7JQUSowOQtD+28+AqTrCA=1@T+Wi& ztKa)D#xJh#qe_cI0#-B&4jVAL^oOghU283khqkd*vHsBo{O2p8zHNK00~`<93(vh` z9nmirDN~%AXY2m4WTyfs2*Q&X%X83W!R}>=r#{_4q{K#g$?0!S*Lsnhnd&Gi|;gn_dP$ z??=I)jh%bC6C9*qs%+27aSGRBHpv(yVlW;%8r(tt(O)jmY;b#?6Lc=-GUV+D|Cddc#cgpmBTtMbRoo3i9n0wj zGyzjMaBjJo`3m!qpz3a}g}`HODs8PO5kx1Ydq??#Ie5N~E<`=LU^5*<5U)9qrg5N#mBGJdBe9=PXJkctPG9TDk%&>4ogApAuxMdjQxR2!v2TWLq)#qWyG|(Y#Eeu5B})jm4Dv)VkKU1%_`>H zV?QCFoAMu3VL4)!rrQHii^NRRaPC#}@n0SI9kPZg!_4+V3>srRS#GYTQtn<1RUJ<1 zvogLWI^l?MA(v!03r+0lo9Sn%{+mOX2^8=Z;d$iIR*?%M2ug)@hrd{dy|=iiGN<4_}9G-1|rz zF~?e7{TB)soIa;Rhu`g+FpKcKM}$4Dy||n`hilKinR9~a)LhOg&Hc!J=@*0w+W*E} zqs3?!Uo)h-Z65qvtKL7`uI~j9@BE?&hD3N+rXo+Pe0%5iv-=@dXYA`5H-dAGt~$A# z4&^2j3q^$89tauMe|K&We96E}Df*%`a~Ufzs)sKJKW%%*LrW>+s!p-j{t|Id*J5Lt z@~riU7Qfg20Gd{5UGB4}wSdnpbm3v#4TiW>{#Ne)*+1}xoYl;P+T~RBL=4=b9!6Z} zG~CYLcyE7*Z7+w^-$cJ^mopaKxPQr(cxNx5e6F3^H}wM;w`Vvvi#G)t5r->f7N1@G z291=m#x;!9Ll)r=G=it{2dyGjw!^p=TgN8g<)Iplc$gUwcW=plsc@*s_0d7z3Fmqz`@ z^5ea+$06-j2YTZ2<~slj9wZ`O84F1 zk(`Upo*?j-XDc`(o%MSLR`KHUlf8*-s2c#1ZAS?69Q7hTA)bc>Bft3YmazH+vp6D0-9&*brOh(G9 zn~h(Hff_!QO@-g2sNOK_L{0{CX(^`q+3^gw`;d~IbFvzyRL%o`rB!Z2vjWnZ ztTuk>cf6^5j?7Ft8kZ|s4v!LIBIWHnC%44U_^#w3<;*r3{p(jm1BabgBI9WBFYsFJ z?m=*!1aEInP@|B%8j)KkLz4BE#1F9vh3iC-JeWDM>V%c*C%39uDIG`V=ncyczJHb=kjiv7!RaVpp(z`D{q~uzgLTdkCAkx5MD}na>wu8A>{2uM{=b$j};lPp& zOv|BHh&MkFQ2w{qp$esDB+z9W(M+95F;x8Z#pf1E1k9pdnpl+z{vXt8jgm`2bWw9Z1rv(I6?4%;`PLwQV3H>32v9NmwYLRsg#V}B z*y186cqb=g0dnPfNQEYznDPOKRlblPGa3Au^||b`;rwfl-ycaC0+Zmr#=!%~P?PXI zbuV6R$)bKtPl)odZ?i);YBD1Dm9%!%2qQ0oqjX5?**{riRafAdF{PX0hhDpG2|>$& z(sXi3o{_7(FBP(fsv|CQ&{d?}Q;z3@GbQ0lFXkisq;i!C-pB3Tn@%fkuV1)F1MJGv z#e4SN+M8+v&Dj3YkWjJ+|DYJ)9l0WH5{mh>zray0Hl|?TzG7Tza`v(Q?kDpkeHp^h z$Mm{Nvl zglsP9eO8aeGOI&?>-JZnWVdf~X<6|16I8!EUlwSJ=~OM|7ho4w}J>L zOD^{z6|+@ZNn+3=F_V?ZhZ-4#*ZgZY*aLrJ?HJm32a@09fHd?kV`=ox_wpW@*@+BB!Kbybw&?@flC(n?N z97zr>H>U%0hUG!0VgayM=*NuyAVKIb6EHWff{s+R%H^(l;_JEkYsVp=TO{TxRfu!& z2V87N5I4(=sV_2><{`~G%;b$lG z6^)oG^aY27~zPL9^(bc%!qTVu@{7?B?O{~doh3!SzP#`G*{Hix_ zQ9xn8TiE8m5W%MPemaj?H0}#`tz~Pu#>H!;*-G6#SU-ttQF=~?i)FsyLq`U8{bMa+ zRnH=)QT_Is8KvWXvU6<2=^8KY*Vx7ZNGUgjh9xp-1=Knr_0z@v)-L(KzIgJamkZxS zka2%%>$!3P33M`XP#CK@_#~R8Y1_5tO>|F8tfpH+4FidVPrJ+el2^ngP&xJF>Sb!p zMi97$eUIZ)zRal`$o?=^xp3{}N_HW;35%z*SYu5z6CJTm?N+QO zzWoa=QDJ=vV&3p)BlPL|?MoN|QAmH;AMEw>bzS00)rv)k7 zYgDoV-9nrAmBG68K~W;+VIHCf#-Qd(m<0x6r_}lu|7{Mft3jZvP$-!bp4=~be(O2L$kKtb6Y zd<-d3_n~AopHr6tlTXhqND*`Mq4h~;55$3XU~v)DTL`XHQOb+CZZ_tS*BSa9VAlN*ZK9X#rEIZrRCwKneEI zHj~>t4x|a9i~bjicUR`cVg}PFePg; zh`R6gaSy@sJTUnzOJO?I_jWb#p>_%$*FwE>tRfElK zCTnVt2KOFwd=-KD%ep3~{9N|ukHSc>q}p)&?TM<97O9u=|9Z73=K`BPIKsQ)LdsWE zPL|pJWBqMKPe)fjy_0ew|6bKB8P}ytu@jDAf8aB)w5t*8sTDp$-}uBnwsXPw&0>JQ zux54|`-!a9;uB_tnbV7y%-DB-Q-2@5|8q679Z|*@`-c2N-~UrMHYaGV$|AW~TLvQr zAU$V(o+I{5)PIL4^D(tBmV1ZJ4X)ZS%vwX~Ka+U=9R6Ue@R=#kh>S;w#)Z_CCRqWm zX2F|Ht=nzVHsJUh?P6zd{b#xEMp@}ink20~ZLQ;%5814`sXaSAl#EChMPK%w)p@o5 zdJLYe!RLVfjO3Mn_ZIisr;iCaC}CSQrx(1)`@F2Jh$2(3cF)E7QDp?=DEo0>V-WF!=hs6hcLQNQo1eW|RwCN0WKTbe#vbpbNNI1L6hpcRz>)9g z@=Q)0E6|PcZ(M3AkeJ3`|40tUAYme;9BDrsQP4OdmOeyIvzy<~HsH z;W*5Q+5rOqsf!+XC>6H6f+bgH5UHygoX=%bqG3sM63d5rup))>j?6v8P&5}DQu-{p zrpj6I>ForznKQvF#Dk$(-+QC_Rs%iO1o)!?Ud6@QApnC2_w~y|aU7tj>+LG0bdV)@ zg7pe^-%ewL%O?L2%c&tOyXWwSjW7JQSiuLO(vK9>Dd zO2LxOCic-|it^bm!NomyhW0h}Y!jQ37aN@!&17hIg`$xRKy~z4E3MreTH`gGw^oDS z9-_fjw(_T{&WCF?J38gM#!pwUcJdRO7Jccfo_9+eWPFe?Uj@l7w>grNNm zec_0o(oBJk`-qM?wZxO)RWfHqYQO2TERk?AmN=iX%beV^=i7O_EhvY*wxG@A7N)G; z#pl1T$OH2eq}6wRALdzz%v2@%!chrxdj=RD{@u2p5e~eofe%(cD7TFS-8v32h4B<4 zS}(L|=P6Napt`##)D#Llg<8P^J=%C;Fwz@@hXi0f&?*%3JyswR<3`D0;r-Ee4vcB_ z-=VlXCd#!z_;3Mnv-z!O)i~G2!QlP`Oq59Dbb`i;VuFXYs1;-o@G?+zOwi;6d%z%o z3#l4aNO*hK-Hyo80)L{xHMSpw^4Zjfcc$%*<$_{GhfR^XM`hbS3r3e-#d{te-XVC0 zYz(CaH;Q`6b9;2&!m->NE#3<-cZ`h*jJ=JuifZf8FDnup^{g87S%!bxVbe4>?cKEt(6@hv3>@M24AWTj4C{JGp4}z!rJ#Z3a(%MR zl6=82gZMpFe7PcsJaBpK55ZD1(lg*4KBq{oMgDXw?JL<{ z&0nUSsWmxoKHzDsR(!kVhW?2m-xF!m7H;GK$a**9zxx093I%_q0DqWPDb%v&+79=B zR=^)|Yr{D3fjfYpG`7(6Li{z)h$oUd_VH6@9M3hl@DGRFISy2y&0o&yCV~4Eo>RWz-X1J zABBFg{NA6O7a)CuTVrYJ`!$H}bVOXGC&Zw|vWiMk-7L!HvW}bll0?4MHZrH!{~jmX zDx#hl>XII@q(!5$q|xbfn!}3sncNyyQI3awQ+n4aahd~9;8BH+fZxlUMq1|CabBr+ zfiY*Jfye7Bz)&7Lfp6N>!8Ys{{ifHFi`4QXxTom}#fB@0x%XQ+kEFaCBJbJ+r|}$` zFpYRqZwl3nnUVLZ3{+lAd~5GSr%HI=Pfbf#!HqegN1>(l6q; z^(L&0%*x}`Jx1(#oTIq;W|c&sKW3LHi7Mya0f-{+oqBE;%aAECgutH#wNxb*zTqYJgZo?i1 zWI>mSTM&hYCkWL!&ntOf?GquXa31e}cw;)7J5TH#LcT7f|MjoX4h}QPIA2+he~iN1 zGO<%!bDr|&UsJJg-O@Oex}wyr`B7__iNP!%4~AM!;DGAK?q$2U3|bQ}og!(wlBgw# z+r5|5#VIl+@J%k`&&LJ~K4Y_B0S!vgMmn7KO2pfoifME&NuNDl9}>2qJQ#OSZ%|H1 zaGTxea3iQ~+kzL`38Lfj^GILCxP-1WAM8zdHc=X>ruHvSC}Z5x z$_T7oMWlBhSfJ83S8bjn)aFcvvYOQp$IJC}-u@KWkLwhpY;&{Jv5kx_y_u%2p0GfJ zW&b$lvyl7ACalf$!Kh^)j}ZLN-C{{I53PLKuhC=Lut5}girp>);k4arNvI0b^5U`u zAF(O8-<8xSBg#=BKY@`Lhg;N>%^>mSQNHqG$b0d7%EI$9)e6vk_5i|&N1rhaE-KZ0T7qWS*yHeQ!zc(yjH}%5!7Zw%9 zY_!z>q?JvcyO*w$_yxkQ<<6Zp9#Wh|3JEmmuUPmDt2DkT)_YUB)b!tZq{94qdT`Tn zU~fg&G2|jEHrPzWUuNLoW|i4Sezi3HV>e?j)l4)?xlN;pwC3?1)>UBJp(KU!XM;>w z6UA7P1SdDO!$DfbQAeinILO()1bWRJ^JZ0r9Y_wI91J6KT6Qq+H88cLGH4ETkCegwg%sEzea&<2!ayMl3Rg}iaS1ND4SgFByw>ptk&O0NHVU}^ArkiL(6wOZV z-aYsENe!QmFHw}g!W_U*)dibGI7tG(j=kW;1%6o*rii=LP^cm!X~K`OL$YHYW*4UH zKQV5P8r`B|ZwF%SRo`aMDU`9{6L5(VsjFsR~js4z4R=3lPZzZ{@-u?pU zXU$%S39@hX_TJ4eJ7m;ti1pgf{TvOKp2Mv+?JX7y8Xid>rNCVr>VaZ->O@>!{0qd=6FO#8B&JLYS%~H0f5FG8rKWe!?ug#^+l%{UMeO% z_5uV|U(C-^RLor^<8*ld=FJzdaUapke~gZZN0Vj>iQ8^{XCexsY8l_(`@Q$D;W{0x zRv!Q-fbaYesh#Z0<%y`x&0BI*9>W6%jrLM`&zMj?DWRYb*2xspm%Dd^v>RdSAsqD< zc}LQk-YNfysMqrJZi$~OUJe=>7bzYw0!RjkUEmnJ#^)toO0PaJS#~&HISRf1CRg`x z-CM`?&?!<=={rGT?aonx-~^9E#J5^$b}*otuJ=YzP`rGHY-UFqODOWYlgGimd~h#s zY?t%Wo0QTTGr(fibNycGdTF!z6U1fQWaM5<3nf*%WJ1umN?_x#+}>1#?``YBJ~hZH z)00u3vfvfrL}CPX``;=3dXM{mXAXBhX9qIvM7p{xvE0x#xKhueACuO4}Se0EwN=||RQ z5EI|)^N6C=bU9Uk-i2oQTwF$DaEv(HFy`k2-}C7Zhzi&H(NYP5vV!i$(J0A5IRy#) zHV)+nB{g;sy3Ko`0Cd*!E^o8-gl+oDwW?{vN)R)g@q}#REBs7xcw3^)?>aR<8q< zM)lT@mUQ$3>%mYXWgBhkXA@)cYAmBNVkVq}oKDx7OIsumElM{%RUK|QsH3{xRI3Aa z@1vI~yKv%PmuoK5ImvXzCqT^uvIfup8|UAW;fPR6F@4qXpVms&C22qAvP6r-3HUrWZ_%@|%=3wFd(LixaoYiy>RIpfwzxY zAtc4x2Qxp{&fbM0Eph2vmM@!O`(9(8bG%%H#4!cEWMCn#?P68s;I`c#wcNe*g-|E5 z)nkRZ&zhJ8RmfiBljcEo9r>6abew6AEuRSz)4I@OXy;n*XYS z!v6;6nat`uo*Q}y1{URTz%s*6pS7%56t|BDUiCCrw24~yz41txKqEqo?UNenc*499 ziuGdT#04+Nd|Ih;EsQDHEwq1v*d5s2Dszg(ze;e>xgW?f)H3!y$j-b&dYWV%%A{O& z3t6o0BOCXUJZFRX`a>TlmOUch))^I_F)?s{8s!#C`gOv_@J;tP!dd$|v&qb^;dSEx zjwN?x+o}XgeYYQw*T=;hcRgNk#_gXpwmR|3L)QjD-$B+vu8!Y5kcQ2hU)|l(k>y|F z*f^Lv5+^_J6vF%+oKq`>zAKK+7p{J__#5mu$gt9@(d8*L`;ylSHq5bX8l zfo1LhGvtboOkN?oOWr96EPZ*IuC~(IZD}{_It@VWG`kUo*d@ra^!Z*H3M_z(`dY31 z{aV!s4pE=kG%pxrwO9R+sEFDFQ1&McsLZSFCRVdSylsT1`~uVPOyAu$tH*-Lj?p06_l zsu#T8tmc!Q-H{&lHK-E3zKk1IQH&|fiJE5V^UNwx9GzuFO?3=)Q-qVUe=YR}=kN7r z#uchl0KeUQabRSv_y@D*e4c&$0OV60F%aVj`NF4l zSN>nJA15DQ?hGFdSH5W8GRdd8%Sv&4J|)u1h%)fOzgXPZw{%=li_N!gB(`8BVdqrf4<%L34WHv ziP6ICv^$1wmp@3nVCRy{DR`6$^OGky)cecj(Q<>3ckBr>3w$qyd%LQ7>1ravzFU7k zzT7pyBcB2L=zBe_0G9vwHFm6SY1XCSNb^IQmrTB6?N`|efBIN`V}Rkvu=#aArqIgu`y~&gH0m;AcwE<5~73?z`Wm@ zKmIrqG9MYWg46Tb(?xcbDW0!wUf-~3L4V%VJ?K)oUWZ<F=u-+CvAw9 zy?<@+Dh;H2EdW&g2J2lsGP01m8~pdjAP0+k-Doe7O9)rB57ar3>hheZDJnmnh;ajj zH_%N;A%Dl5$*Eh8mkEnv%FfAOuSk?5HVgMdY_n_LEtTKjOkPTk!^?%!7IF8MvIueQFwHb@qryZKE!U$NM2&;mhH#A^ zhG^C0C&tVxpvHuOwHtPeD;L7h2&gV>}CC@Q-xBl%v_jpjVC`X z7as0s-$GpHa+Gx4Rr<$KF`6`K`QMcqPe<{`Gi;LDCujq+hJ(Y$>oXmEHSjchKCs(t zODC-U-{E0nCP!V#61Cl{I$PXwaIq8qesRS}ZnjyYa-k0%+?SQWbH(XBnUKFs>Eoky zX=6&+2I}^hZn=T7tj7g)$W04+zhmRx$(NaE`Hm$u{W#^CHeV?%2;{d-3ss}HdAnj0 zx85>?poiMwviM*Hwz3ShjX&I?qmeH;G-{}HAD0iV4FV^qe3D z2x(+S-PpH}mF#^`K#P3d&;ul^gwHFkizYy6RQ*_%T@US+Tvti=_Rk$nFW88deR2IZ zvENFux*(&<)h9?f1!X}g{>*L>!%KwkXL`)>jHAOT1l6+dR@gxE8v1ir!Ydqd_KQrE(PTfh=r+;& z&8d-EluqaeqmK^u{x?cHK%8x|m0X zoFOO&VW0t8^GMQV3I<6O4G1qqyh1IMTuVYBPcUT_q}+=FXNaG78wA3rfAN^9WP_<= zcD5q9_5Nl>XYh`H=HK=ywtjw5ZPWYqI;MppMh+KVS01YppY-xVyo(~!mSeu*)fP^F z%JG~w;dH762gsE2Kj+SwQinWIda5LOjuV=YGOlMc2?F=;)Kj9N+l0PRWaTwTl%>_o-_J+0G{91&n0-?te*$s`5pbd51!xB&)5^$_4@e$Jg?Kw zwC{UOKOcnWSM@W_#Oy2jd0*NO>gQ5Czoeh{!}DJqWB-eO_TzblqphbLV|hY9ABgA2 z^m7@WmpS_I&}824OPuU1=qq1^t4+=_u8r{ddEbAu{qyr24VhW)x8ISUMIAL$^14ws z$bI|_ZR3+nhcTbjqrX=8CS@0V8`>Q38`b`27k1f(;54Yr{#Ns+TsI$GsMgJY#LlTQ zI}`7&6&|QX_Tz&W<^8Dl8Bma=&DA@)z5;u#A)oPC)?cXl_`a^61?l2@Ys2Pf4#LIW6MQO&-l7*bDtKUOYsZ1AJ0Si z2P}arV*p-HI%tvjNtX5LukTxQsnbY*CD|<(9nZGiGUt-NA$O@R@goyTS-hX74b1^4KQf|pmsrM*C0`}&uCTPPwLv`F?U+g>pz-@&p!^k3 zrd)i1(q**!OqmJ)ep1zjjikYDIRPj>KFyu?aL{7`@M;S|lYjR35R&)0er8Xm7e?JfA7 z0Nh5Pt>Y%Evyl5?1YpKB6Q>@7U){IYw>K8lbN;Y)qk*;p`+keQ!5Wb7Pbt6X^ji`S zG!{_5F)nw=YK$B^$M)&3)tpmy-3R%M{X`$Nq?t)alcpwqDMc#3Ov`!je+Twn>7PAa z_E@%FGj)rv(|C&VAr;>(tYSNcRE*hg^;E)<=o z*8W)SW3f0yUz3Wr0q?(wIuaNETCFkqeh__r>ap)vGr+aqDv!q)&o~5H&%BwkPO+^g zj^a1u$4L9pH_%kHI~DEHf6qtfs&=Wajhd#4>IGf{G3(ZI~k)~ayavdW{XV56tAk{!EeZ zU`kh?IE?mtF?{>apBdR%I3s5DS2%bk@`iGJfo97e?VlNnIXpzem*?N5)X@!y&8eax z1L4dyhVh*Hh?OEcC+#6LBzdX}llT7~@7VvRNaqDklY1!Tr#P8D{9ILTKe1Jroc*1l zVinET-yfxYTGfaQF`PLGze@uf#J<#X%etV?#pP4rt1DKn4)m&rFgd{mG5(VxAogw^J6pc?HyC}Si!$d$l3Hyvo!&A)T0hN*6{Rh zb?lm={Ci!&F^A(8Wsfr*b)Dj<>y-1UtJfy<-E~uRKF0JoWf)ldm6zwwpEB&DE%-m; zah}ozpLTg({yl#8kH?k2z95e)DH9@pWc#7` z>!iFLIq|$V)FeE$`03ZNM%kz3j&khJSdEJaSDxc#8n1YwdE7E&cOJJ)K9~G7a0|`{ z@)I6B?S$wXReNn!H-wW`Yc3Zw^qsU8&BcQEt#`3O#aY+4GE3{9k zMY%Ff3vlfij031+6rXp#@`LDe~rfYaC zzFf)aY*<|N?GNwG-VPZ2R>Qyx7}zm(rvL_&ZMFi40qlvtOcTGMY zXgx)LCDXTIOtf+5w`Wr>BJsl1{$<{(N^NhY`~5urKhL>5Ex&(d?*c9!td)`9=J)Tk zNoxPfy;(G24c2?ObdNo}NcQj}llI)hf5PvXJ?vr9P1E!qCN0%GN$=rW<@4)C!CSK_ zBM?8N%PYI>*VA6;OzL;9SCaO8+j0e{yE~imp#k%PFLjg#Uy(D;-qY*sJw00K(HeT~ zR#4v$>vt^gBt*V9D>DxKp4jM%eBh!z+E4`*pTafd4IXSg z@-=0$ir1pAfKn6t8E2f^-`Gh$i#9jKW}~{>3#c_=eyz?giRV38$x|3(I}uhf%4sjg zeLx<$O!kHHUqRVbu^%{G&X}sqspqOa!*5E1O9m2GT#J4O^uFR*#Q0o`zftXNQMR|~ zVOTT6Fdw8zT~bG_)v4uJaapfsR{1zH#mAY@m*Dk^2f2(DLtKV!t4g^3{HvUn!7H0j zZ$RAsKdiM0cD43W^G=?{{FD<`To5h_};I-FV)|QA4VmQkUQY_zrjAx=R0YQ zy>+=F;Rg~D&u;|%0ZA;E8jJMB2Qm-M);~D@a5!Vj@+E#9@&{a?Xq5kIc-Xqyf)j$2 zlVJ}H@+q0LKa}MisGO(h&tsL88S3?j^4rkH4lU=OHq@7;{sh1G8lmiE#Azw=dCitv z_*&EvP;z*GwkS*61&WPjWAVS-!BamtG1uiAiL!L=@g0EsX6)}Zt31Xoq^Ra;*$3f!1jj2r zN&2Dh7Y?1swcM=mC}2riy-?QL63gctAL?4;;Fk`mH<_JzK|YS)F1?QYILnIz3F(tNz}PPn zs54Pti*HII$TMm()Pv(4Pt1k0o%AJrz6I#>v^wL)nNfoN@}ABQzSt)*+C8Q>>M{9U zRlhoO_Vo=?ug93%=`m(^exc((P_JX;dAY52Ob60I<=_LV`X$p(_c6A~y(h-|B%aIk zb32|pk5@D@_g*P=Bya`}3B-Y0)H*5Fao*`;-{+vQ0=#bta7+`^`%qUjVhSFke1c;d z1=@ms?8uw3%&17bz@Jh!-6a7PU!pk0anUDnwYm8M^_}(yI8^E3O-y6m%qhdVx^S?O z<(*uqz8ft;9_1VMyp~^~`3L;pfi*@r(0_>CUyc`bXFcKMu^m_!2T>M-@w$qEbI`}V z&!>N?xHV7U6Sooqv$%C#8vcqfsb3A`+vWgT&h+J|G=+3t&GAu&`rjI@i#x zm`^|Eg1)=l;R4hZGeTSybL9?4+EM z12eDK2`6WLLDn~sGO7g}qsPzRlhW8%0pP!%A%BR=KSp%fCh0ZDHN$@RWX(`FukNH?OP}^a{BG^Mn5j?WO|{a;3h5i_$YxnLeT37W zL<`#R23xIRk+{&{Wx*u{zF>{JEZA7!GX`4keWdR1_U1iRpw()NtnQF{@Xpg-Z7%*u z;qciL)g6rT-FAn`Hdy~HsGoJSJY^VrVFphKJs%+YQ45%&9VJ!iWJVh8vj|xmG<}e?oQHb z{#Nv>74u8|;0fuyxkvE3h-jwpoP(Px_F!C&a(Cjo(3Mx?IK^GAQ*18NV{WU60^n}q?7#1^aW7dO?p z)gXJIFj9cu3vtG@T6LrO?gG>i@AQRd*V^(+?$y0XJ8%!j6mLUbh<+19&oN0qqT|!2 z$o`yZhvr+JL@zVgKHs{1eB2aY4_wQ}o9Wv}H;WFmkw^{@*=S&c z=+L^1{-PsJn&ZHaR9Wh%(SMj>oKGEmteH1u&G_*hZBUhuUz%q< z&wSb!Vji+9dmCLkkj2sYa`z*B_4E9mZxsn`xHY8Y`+BKdUrfyRFMXpZ+Wj*x_IO{y~CS2*xm}>4F}>GTSx97-c9|L)wUBB7Jm4-Y2h5 z+o>_0JY&g|r+h4@VnFTcrF3mvgR9Ky!O3*<_*|F&<#OyTkwp?7I(~SOz7wWyl&z11 z`2bu%Ct&PFdsT`~B=3t}AV017O5XKs%_-W!{{2Bt(Gd3UOis}o8fJrRoeZ`~-Lt0! zcQ#sGJ}i-UIPaHq9lUQzR;qj9A%^ld90Uz=3208zVk-jbKC^V1!Y_XOpGjPU|D?D1 z%~KPJi`wMQi~3^qS1A44Q8rx(yb_HpvB+04P9ps{_)>M5@)Tnz*JXxv`HE3`p2`8a^au?7?mhk^>m$9kbSVZ03bnl>wu|s;!BXTz4@FuH`z5@m) z=eh%l4zBZ{+-t@&w7n@%_BMk&kFU;pt8O=`qegpH&;@g9a5k$wQD+&hI@3oV%#7t2 zo@y3_NO#0Q=hdO_>(EDx9pl^=``8yuS=?Xy4}QOcJe@tZHN3k_Em8hlF{WvFCjO?4 z&2;WxJ_j4DA@s!&RQXc{2dRA8MNxO!n56Vu*ylII@4`YW7#Nc|N!GxG0e7MA)bXZn z#jiz9G%5Qpp0(Y|y~?v7a64_^3Gc1+@e(xb_u&E0)5Z*ED(we(4$ub}@0L6-t;zZx z&%^2g!YY}ERnfhGRdP#qkhtLvhM0kn788D_U`J6JnW)IhMG0mQfAj?e5PL(tHcFF;> zDkj4Me1EEZe?I4c@zP?-XFJ#I7d@=kasP+w^&oq_0&nd<9PmdO#sw?aGGy9ux1s(6 z$qR~(du8@Otq0F`5Bh<2sRQN;pO)#~E`0~}bF{m!Zui^Wln<#n;=Gi%FR?gJyl?Z2 zRyIqf#G6_o@?h?vUAxtuI0-l`&2pGi+KCY#^wIkz;8*s=$5b-L+!BlaktmZtSHB-t zsqBpiQ`-G;eV;+Sw06dtygkzgbulI{?UlXlw`b@l;S}mI%usl4{QHz=PL%Uv+Gx}t zX>?D2N$KfC$1kByiko*7ffWDKhi09!dGN<&U!S4%ya4Y3pwkA>CXTedp>-|Bzpro~ z&lcNHrxBYAyf!)OyFNL$SFlNF_mNW11j_1PM?LF*$#oVRoe@93QR+e(TfNB@LaVf4 zJr>=YoC`SA6zT7K858=Qh;Pbu{Ac={^7|V*sh>Y2)tD(3yxnLOqQ05x1z7X<5b%KlUM)_Hy%QHT^0Oewl#!Mk-RBw1LX{Hkke!=mL zCtrLb*VSCg1;Sj!tG5gQr`pdAbG2I}PQyUTau?kbD{DDcUObU9L!7 zhB17}pT3{V4W&$4>)ebdLK}c%jEMut&jHVS zP5>;9MIPaOjq*iVbe5rfxzcWczV42||MzHHLRt%FX~byExMOcwcZF4qM*iN$I|0!5 zeC8SJ@=r5Qs?2ri&%3q#^`=Qmjvb+oGteAoo}JsqZ+I_;{${uiR&h?z4%-`xcQ=Kp zAJZzn|H7_s#m98%+2o&FMNe_U;BPy)f5|6}AUzG9%F}Od2Yp|8`pxMeF8WgQNvtEt9mtYc0xW|D`nVZc~(MM94@W_C_g_XR<~q4(LUZC9W^bBJql z8vNO(2oTbYD7vH%woM|U0 zu)y!nkk7oSqJNvrM)mikC&oHxy~UcAE75m0gyTr+U1D!mB=L z-g=LbA9_FF$(#i|N1L;2)VCRY+n+Z548EAUL!{NH z^Gklz+kS`Kxm^odEs1t$Uv1Z?VrMFQjcVj?`$qAJymPr#d`ZaN=B82&3*hrXnQzD& z)mgMZdjA{pMRmga+I13#HS0RtQT{DmXEW-gUH?w-C}#ry(gwLN=94sOulA{?z!$X8 zhKcG9nmU!#e_4CB;)}fc_Zs}>xC@PiqU*phyMtGoKAe#pZ=Yb5$?+bOQ~EQM>mGo8 z7^nUW+CB&CYMP$IX?hO-tozuUh;h zsJOoWzSyvutpi)p<7Mc5J84ETMdZ@*Ln9 zjwj)2vlz!a5jv2zSd?3VH=X0fyu1Ic^Z?kOt#ZyZW-11& z`#-ELY5(tzwy7)Y?Ek@-+s)&9?ze$@o^yP=4&U;-b-KKk?RAyk5NNX=b(CMN%dh^P z^3-9u&rzN_fzN(VUt%cR>L^QJ(~o{nS?WABILgwG_x-wTC|H+qmSt>?Do0tyVV-hX zZ(}*-C0F(~zQO;^NNbT&NFO0RkF;#s56hm;=DzG*n5F!QvZr64m6th5yky$v;cR9M zY7fqe(_}5Hbl)5Y;EEh!v*|3LF@9-E-yISGPHdj z^@w_<)SW(M244SDpwpJg-I+~?^KL`@iy9N;uEs9Ud?UEnV!r2?RTx*p7PNU{g^=cklEx{FTw;ojWJ>Ws#Fe(b{*Vdk{$($@XS&$@ z{dm*^(cozgM?Fprc? zPim=&6#ExicI=O0^!4oVjEe#shW=jqE7C`mGUn}$ zvMg7j$HcPd>oHy8ggIsU=*Ooy9lu-0B$V|CI8$%Qb#ctJ?@YZ$%NFnGxOqS7ic?0Y z>F7f6hu%<(et8E4e#E-?J7ur_1(u4Vez7@7_mlS~N9%r$?7lWaLPvJpv5LJ3_RQWk zo)6QWMA@nmcM?YufBq+@=t|ysd?B{0c1))E);Z@W-38hJQn#W11Qmmgzpuf1tsklH znzf8n{1dcK$PBaB0A=zVBk%O|zP$r=clkauE~G!9MMhvQXzB^dzXP7H#53cJhk+L= zNs|Q{z>_w1`uz17ci>kU(8k-SGqmgaHmfk4WK7%i+DNmthBnW}h3R#PW@{khW&?Nk z)90U|@BjPi*c^SdEMEM!anA=H$3AEW-7NPRgKS+xo|}aVHiK$!m~9e2Q2rATn*Jt{ z-B4aoIK1BE9MX=q6ns#r`0rjKb{dt`t-}9+;`hY{xj488du@@xy(HNVDV?L@8_ujGcb;R=JlF7)4S5^jA07n{5b zclE0`Wvz)!dWqEx_)-4EbH0TBNU7&RTdUw4tH#ebQpxnnFzq!KSvJ2(9wr`&oAJ?% z!8M0|xy;l!oC)DY*6%5=_b;-%;aZbp_xh_$j+uI6CG@?3x;bXQvB(OiRR6qY%w+$( z(O3ujS7O{FvQhS%ePmy$KYpX=Q=%->jeM21%;HD2>(e?z` zLzMF{Ml}6o(w?I@GFW6DrTBf@8tz*qOX)4T|4YQKi#pom@!f%`ra?awSa$~x7Qcbk zaD8V~u}0nF+<@^>UK(d?I6o5g8qWkB?9gS5piD7kO;HtB-S(M6UC&>mEd87?t|Q|+ z)4p@^naWm%cPF=iR~Vx2P2~O^d7Hx2Cs8`%jJ-7u<#}(%xC4woK$?3o&hl|M>xUtY zLW&|yLz;Z0;-%?R-y2hVoPJ5@&uWyv(G6G?h~L?$_!qT`Rznx$D2Az5?tH7#~d$m?lSTBJ||NWxSO$3MA!5fq1nUP$b&o1hI_K|j$SiN|E5xLmpIduBPN*6@*oYB8yfDg)2cUyk? z)DH-b0}iLI#1iq15XD&Oqm{mqd+YVdwNTKd`#_)cmzyE1>Dj!~({pgGk&hKYKfkAI zTv{pkX}!RIypoApL-aSqq3SuAz4w#cwkV$IH@Ady?VoFn2uO?oYnY$&+G^QzHV-ru z?b6 zJ=0hs`|!eF3N4i(z4ocdAjLi{ZO7{6od15D@>OH=RE%ZAbt!9D#(_2Kudz5bqrJ-F zT%N7vuzNXR!?jNzC{m7V)fhiO?(+h3yL8)WSIPAS+Wo{54Y!G(aKE=&XYwvRNd8{w z$8*hcEx03>n)VvFMcYr>YlL(&Kkbbx4WYj0rk5qfHoG`{-y7sbB)wQ3C?7IcfP(!qTzp=p4p@{PL zUxEG#UJkd4Zf8i#+}Ou}+%=q=EsyYjT12k*o?>L|1)uFt>e#W0CP7~5 z%bY{;b2U+7pm)`M zR1E4}GT*YFCC0s!57Q@SMB2!`IY~gXC;>Qq%L{nE*-aem$p5yVa{>)alo5;G9xg?fWv0`pJyu_dah-mw^7Ft zC?ou9owAcA+-1LMn?jij`^*fGFK*0i06u^3mw7)Y9<9gOc&73J|My=hoc1c|P-C{} z;`Wnwt(Lv6PUbix_#K>|QS)3$T`ciYK-^DWFN(gOKwC{6D~dD-ZFr7Hz5N_>wwKTu zmBO$rutIMxca^xibH(aUouVozs z)!NoN$BU?!EPiI}H7)Bv>3rM!cOUZ40i~x(pP2rD(i1N6Yn^o2*B6`IN4&eYeNk07 zd{NnXW1aq~Qp#`DIPK5MSuWhex0OBQO?KqjayZuOr(KfSXid>|+cG!X&SJA|XQ6d` zyxPt}bQHBN)w`#YFN2s2Mk>A>JqsezKpv@R?&p)s>=&zf3(n-ZEPLTt_0G+EgW)my7}IwS39HX9 zb6b~TJnD>Y(!LriwVtP$<=Mcpq{SEuVzpQ4L(UeC3@j=b{e#_Y0#bt$m$8 zOg`|hRU6WWfvyIPyXlF8H>8)}up!NO)^6ac!>IEaoo4pBzQ#N(LRhwnO$zt)WoM{4 z=%nAHNL|JUoajY)&_2%*ro#ZkX1m{!Chec|T%}v1`kGy+`%0fGyF%+^T>BWtbJREW z8tXgku{~e)R(crv*w-*NJu%^}G<7J4(U*I8nprTu#vDff9R3#3_ZEDk`}Pt0re%io zrOCb#k9X?+QARmze4F5VBh;e%SebR|rtCOF^}((CJYDyhdIY;-?DJ&emgl(VeZ!kN zT!Asb-8V2Ean*Lxb%7S(fqB;A5aV`NQg5fZdLwZ)M4Rr7M={GTFPjk+W*^qwXz71*WQCx9KO@{v3i;^`a zb-s&|SDHolR-1-@Q5Sr^I9VA;2eXjYbg~m3qQB!vh*-^&&E_8q+Ymo_W^K#U{itBRY&FU3vj z?}vi**4RJ;zKIJjG%{IldGX%}{#|s4g+@F_tq(u=(2@FXc5kg0TYYcybqHCKT%b5vlJ^|{N~7UUj^&bP|P0B473Ptbxj62iW@k$Zg3 zP|W!U`MwlUS6t$-({I{o$oD1F0be`l#^!-Y1>lDVqMibzfy=!s`z?0m>+7fMdqdZ^ zm*{b*x>)b~j{11Ev0vn`*{`R)E9KsSdHl`%A^Wsgmz-RiarsB1{_AnxP{-C-w8l@L zfy@J)kOD_@NApkEh#)GuEiaGul2J{uwV%~;9*8SzG%{!Xq$pB4{q zv8WqFyCK$5$av8H^;Qw~iTE%IuD9~*%Mjg~!@0&V=c&LG+%#|nU|j0{ZhgOZ)aQh8on7BZ4dcLk*@MN{AJ2_gnI0y0R!gj*lqn3S z&yE_CF_uDDKiv1iQ-Ds~5oxn{R@{vG>iyua?Xnlw2^}5^)KPvdYj13{Nn{Ds4|zV) zCi~xQoJYQ0c!QN5V_TARCcdMOwfaDn-bV&wEu{tbp$}vI^F$`@!nb3MYKi9w`eu{D zCvo7GW~=!6WV&N_ZtIHR8);7|`sBMlJD0v#xF+BYm)vB(|z0# zM}KLDFEpqsTM}$5K>fg7O$DQHzS(Wt%w{?#U9VOE@ei796&&USCGmNM8)yuy=rP2H1a&rF$tfSW9B(Po2F%mdhgZ*7m-EQED1NFZ zX#cvLCyphg{aWz;GeMfgC~7#kP3~klPaaLzInNeXph9R0v^gho1IxBbS)8vPBhXmj z^*0vq{?U)M>NVz4A0sXAkk9?L9A_l&zp)<&=zPnEvL*i4E$x4C5clF&fj82&PBi;^ z0RC@2M!_3&+n~<6RJC}0& z?kmyd!h$XDq*w;_CFG#!pvVVrYO^!m@Lg`O3Yu7Q#@%*~>MQ}3k*6Es;QT*hE zS?a!VEPWoo!@Q#%^at7qw*M+4Z3NLqp8;ayqTVOdZ0kU|GmK}H4KMIAU^~B0AHOTQ zehcSesET(wfPSR;e6(@i09R;CW~XlR6~Qw~KCJFdwclx3BjX9DBKq~1dqm3o$BW5y z$aS@Ol=v>%U{N=OeRTGZ@i5ruUhQ|7-QRtMzEj2+((Bk>(=)4zj4Lj`{BmzV#i3^$ zCa!O^pP}4gm-g4-^h-b)@H2`>%ZT3?>@7d`{bu*-fg4?`3hX_<@wdIDe)6M!%F|P{ zD?2Mw?8bhf+?w|QlnMG(yom0)33EYHmWVGEiLL2MpQikLc+DkSSU+XV_8Dc%IF-CA zS+hTRt>9>R2VlwVaLexWg*C=!iju(eq5o&k7@?h2H8g zf~!TBmpbBKQ7^=Zo0Lz?KV99=ckya?W}IGy7uQ+Jzoqi!V*758a(Ku6LcNuo@U02U zOYCe$@^f^ z^E3VKAU)1GgmYNk$IKpU``wr{K=gQwq=#!q*^5q+nAWzPGi7Ce8zX0u_*k{aV88#X z;~n*+3C9ZwU-a)CZ6`>ba^`IopYD_oOvt{&SYE~i%HEOpMTa}EvxC2FU%1P(uQK-c zp`7yVLwi-OUE=%2u_lp~xB_DZU$ZP}yW(S-#HRq)8f8hmcPMeF^~hn}W?V~tMrHwhnpMlMgUi@a3J#Eu=Ke7k_o=@%T6+n;wEY2GK`-7vg+ zPx{;}vbqJR>o{Ex_34@4OXnZ0^Eq1VQ>nm*$^Za-bs>viO%$L7ae7$ZN^EO$VQ(cew_ z-HTeU`qNVt%s4O4<&>|kkIztj5#LML%e{l^I>g^QZ3>fDn7#cm+0#XVnCS|x+~Nv; zYLPGG`>(_XO39*&f@?b7IaR^3cPe61f5H<09cqG}^sDoI?}X@IZgsWS0}sxTcoBS0 zU6?-7=0?F?;s?2X6P_z##bS0H6Q;*-fxa&F2IE-o>;@Q*LmBD7!`@d)n#!LOwL zluUmWY)b2xD$j|}vJ%?{&*M!(;7dzUt{n36E+#v03%jF*KE`w6CG<7G){(n7yeDrxZ%ZVqG=_5Iw zkUgGe$9S6mFZQlJII1ek-`CywY9hW6dIy1J9ufzb0cjL93vp;Z1hisR3%DXOI}yLK zwa#p`tP;PrI^BeiK-K`^V;q<~9CtFoM2PN;;X{4? zoQT=ZTJOkPC6u-#DE9->c5itK{WMlY16&60iDEYP*w2Y-_7ew>gIz9YRVV7X{^sl* zwxOPhU<2*p>uvXX4>`{%6MM=sg)fOVz`in!I#9VE1_Z~+hTi0P)y^L;=$SBw_Fgs0 z$9gyYckl&kLKXIo1#++Cl!fsMe4{_8y%P4b5?eqI;63)NIB(dY*IV)VW@6#B_gL(& z%6ssr71cskPDHG^Qgon z)y~|SWWNDJ#(+kjb?3==b1XBSkg@%o{yO{y>am9Rc$h;tFNKe{SAVAk@hiRI`i+#P zocS`9M{7%E-Ew?$JNO%a!`MoO^k?{6POi_@54z|*Wy zd0@Qkq4&R5@7ok_+e*)ls%L1E96(XXTMa>eh>Z0 zLix=ZC2QiFe^KunT;G^W)B7s;749M00So;A-4D@qn69IbO5TK6AD=9MJ!Y-FV@X;j zc6bhK`q)kk{Ytc+c2im(gZ1(#?ZJ=U4gT05^-Su#*1^zYT`6NS?6%wWhD4jukYJx* zqr(1EupzN^vgAM6LGz#pMs3DMQEQo$8KO4gB0{&`K2|9CzorRiYKV>a$KGcSCJHz%k!QIEQ@!MG68xJXLm<=euF4UN)Gmazis%*oQUgV5pGxSRE{gWbC(d4|N`ZZC# zji z8kM(2*<<;XEfx4w=QZz=e7_=bpPE|-Xskw6U-Oz(CVe(C)m}Q;E%_Sy-mji70==zp z@(IkFIE{DlpJy)@2hKWoulNaL@GN^4{I|yLVIPgkWI)l;JNr2AX0*_}r@Vhe&X*YU+^185C?*I3OWL~TJJIF83X4T*eMpe%0@i457f6$h0q_n`P*ICyAcik`6k)!?YvIy zW*IJ<=IpM^ZMTElICQ*tek{ALZ|E2af#s)0F0LQ0jYGCP#+eh4hZfVdXT4uMzmC>Jx=zqF zW1Zx$@6mkOM8EIFe_S-)W~nu4om&r2V;y=?V0?mq)Ri%%@fV-?Mf>@e|8wqIr4Xujf+d*&Rq9Xv@MC$z82EHx8LvZbxEqknc}(N3Bd?T`g% zAFF)zD;=I*9+Wo3Z31c5+bi=Wo!e-he9CJ~tvzv!I0s(QwN7FWuMf%d+)m1~9sUFH zSaK5VQ{!9BN%5_(2*jl?;XHRz+bW?C@Cw=wQQIG;e(t385aq$9Z1iH-w@0i_D$i-p z*0|K~ah>Ap?OComQJKJ-=6ZGHrRybQUrIZFUD-q4q6vS;BB@U@GO5n9tJ&uFZ)oGK z2RZIciuMZ4@NIxh;WHvO{ttA)X8`uDui&jB0#%;3F@36{ZcqN7?f44^S(#Tk-LfC7{=1%D$wMU+T99jT>hA zFY5|V7+%`proU8Kc&3%T)eIVGCUl2)q<+l2YDEgR^j9%YuBScMsel&QGDhRy;EQk3 zI67rd))yvm=J-9>0};*s5qsiEK2dT-->aIQnUnhdub!0t?Y@fwo=aD1nI94jSf+h%KX^+qd9>vFLA<|M|QN8AZ}*(1pFe0R^s z7=xeFeHx{K?N0{uGB`7t9kshC|1-opIYtNZp)T6nzTSW~m=su5t9P>Kk7RlIO*rx;Y54P(_ z|0>=E_if{W_Cd673c7LRf2n5N3Z+}qwQWnz6QQIgjD%f-x(u&z8pYs#L` zKKt;~wTzXrw+whAh_k!Ney~jXFLL}5#miw!3VvSweTkvoX;#=PiLQ%F5MRBDWhy)` zHL8+fk^#DCui&S(0lM~5;uRj?3B}F*p1Aq4pVm@8VhO#$K2u4*zN-b}(Xa3R23=Wx zeFNQNS+Lat?pKG>M`QhH4ORd~1&OQ~Gmm(0dl958z#mWc1My}=C@?3#i51Rq?V z3ET(q@x}!eR`j6?t61M?hpUg;T3Iyd3oc?`N1q7c?3Cl?`1E`}FJ4b;ZN5BrJ)_09 zCXpvFI)TB}T1NY{_$E6WK7VBrcku_BI8*k+TEyM@*ki_9I;pNW!vd}D*Q9?orw=}0 z!7uY}jn-DPk=EALjK$bVd!lxZ)3}=C-Domm;%sOI$qc)8l6>$?tXHntMRLssds3bw zLu|1BLBsdEY1Jq=_7&5Sqmc&%<^`a>rGWk8z0K9T6| zuY-SN6>u#R<8U|Rp5_4|{R!{GIvl*2*5MT?FY)v)YHR!|T7T6QcKsggnn71*!O+q= zmo?1vU)FW{%HgFQZu(1=g=bpzo6VpV&R<}wG75Wnq8aD~AM@R?`=+r4KMK%kVwvQt zptZ#Jh|95P!p<;mgYWoR4g;R)8swuvcFd(Q;um)%DF6L_(|lPNNBFzR#5=#IWUpHo z2gN69jP&*P)jm-?%O`SYrJps@@AqcN-;Z1^@69v&em9hB6MYk;Yuyajv+oQ)A6&)s zUF6$?r&)ZF_iqjG{Ooj@-kdJ~uT=MG)6;2AOrtc@(s{3$ntpePej8ISUjCtPk-Vzf zJ%joj`#By1)$KOM0PvunRO|HBup!moY?e3>W`1svXjv>}at^Hm~pNBpCSWy*# zEav!`0#|J&>_UU|E#-^+k@x*r=T)BWGE1<&tC$J-A$eZEnQbh#G3Gz)ECj9V9M^n* zrBxZ+Y^}M1_5n18f$KJw*Gu4zn@8ZIi9C__Eo_tf#d<7Oe%sEt53znIjqd_`8$N?q zSWVcgT;-K^IP;+^GNPWzUg5{N+C;kF$F^3>z0Y*_@P39ClkpDk1^+y-tk#x%w`ON9 zpWniEF5c26cG`1kJ;j>f({=l??w;ctX+4S3x)QE?(=LYXF0CnlPibQP_MitZckTC# zngC*e7H8MmkB=7T>gP+pI*w^-NE;fQ2cWN_h&|xgLQsA$>(wNCeZ@rc>hXkTDB2OMkjBuvh{cP+#X{A zXKwcE3a4`dS`xS3?AGFrPmlVjEleGHGITh1Qp8zAT1nevkC3ftY;A>dzxaX$PqWU==1 zv?r&0L9!(Lsk)%mE8Dc9hCLtTQE+=gtuf!54hWL?Y+ zwoiv`-|EyS9@y(4O@)#Ut!^!V)P9# zd>~I#e}%OQ#|Ge241uE+O-uI!M3!^z8x2M?X~ky1rjuy{%DS zskqxA|mm^v14qTlWp2t!pnq7h$aRXvSK7OpnC#T=iF6qc|pI%wy&^L*B^qt z^tH&7_Vzs9P~U-Mf^3oQk8|gH*uI+X#A_EOvEF>ATgt;ijZcmGNa&k5kH{eJUcx(r z+5$W`V-u%&u{$kWW4z%xw~c7?bU(QpI7LF=W23FSk3@gyR%*buDB5PbX#3jvzWGIH zZ~9kM{@rT*tUKS+yM8_;F1>z63@_*V?D=#awaCLIuSE2G#CQ3kyfT2iTz$S@{}8Qi zano0gFK&;*eR0;OqHZalqffutEot^oE}AuTK}Xul<9|xLz;n&<#jb)cr5DWJPzY(Jq{aVm`_b*+N62Z?g74useBi!`$~1EwKK6q{XV4b?zN+^ zw|;V+n&+f3)+T4G-@j7#Iq<*u5_P3HHx8^T&G>voSNc`xN*hLfJ#?k5bA6&lT~E4x z4|c7ht6+#}ohx^k>A$SYS2(=1!%cswvheKdrYn8!CZC93m%cg|`NX=#K2f+h{Y+4r z?1l2Txk%piMSZ^;%5{kHSVPxy3tZ1a!_NoTI{NOw{K35nbv3Rag4q+`hWf7di&kl@`tGt1CS{_p8yB?j8Nr>q_^}?W-$&tYbu1ih5ny z@#X4Dr*w?yN=J01Bf8T6@4C{i+^?Um^t1L6UFnFfbVOG=qAMNIm44N_Qpc~>!E1E< z9_|gp$4Ab0_!`2mg>e!kUZbC}^GGi2^qflgua|x^B(wVet1#`~3O}?fgv4KR@`6lr z_{t;fFOvj@hr)D$k4TY&#iVfR#)-%nj_*NrYQ(-dRBJbC(#Q96<@a0!-_jd;&NXW5 z?RJ$H)`_r#(*#UPv66AsLTHon3C>i0nU7?Nb5H$`isz@WXiw;Z$4cdPvLD`Z9&@P6Z`7QRD8H!! zH73U@A8Eus#WUbkc=d?&q>4+=I5)YBwcz&}O&rJDYs6cCTU?;Sr@FisX9M3mG?*xA z?H3e(D1cr_`GtBWMv^#ZfX}%`gp+Z>XMQw})*fIuuuo=C#?0-ec5C6rKt6oNk8ZUN z#>*2P?&lQ=;0>XVyzvt)J(Ldhp|o}neC^_vm(psVFkVhN{hxU(C~O;*R#RzdypIQl zS6i0EHh_+K3gn@%nTnP~EN^I|l>uxN)1v%O*eDY?WL!t%L;#pto`S6waCxY&j(g%8 zEv>pZ=@pNqGUDYe(6!~#_#k@E^%(EAIGAb@pW{7S{rBT6CRfG;`*ud8yv0Mb%M@Y8 ziG`1LTb6^phB_<YAbsPtQ1?5|IE#G&W^ ztE>24NNp$#;rCT`c4#p_1ExW49KItofXnV^V?NQZ@cGe?NE2k!AWzq9Yz0uAQ zzzVrDr5iH7j<2rK&WJbKV>u=cy{B}D?c$jevpl1qSE{mqPir}RW!kQjV;s6__{KER zI7f^}PwpKln$NR6Mdp-=z{Igg?xJfnwQr)ekFkN!PUu*W53sJcGtWYtAL(a9JUy|Q z%0+tM@s2j`u_R_&gyT4EzNY8gL_@wq8cl~RXQtp+GMeTnd}c6rLEmxI7EjTls5ZVT zioE9p%PVpZZLwyEyHcZsxqpT*4`S_^r`m(~t*E#VjHrQK$NkH}ZU)H__JgVbJ_lzDO z34A@`kq|@TBN=Q7Yow9D4pxAOhXBPA3`p2G#u?4yNSbIgGt2{_EJ*~y4sjrnV@w<; z4#V2{;=9S0ki?tMpRYGpYiySFI^WIR#o27We7Q4H#t=IXJCBWXuZ?c~)qT$Nya0b$ z*+ZYx@2;+@uIlbng}U*rrCC4bAHLl%|Ll8@eT}%%pO&@;=G#wZ?9|2^muFvxZbAt0-qQ95m6Wvbb#w!Si>rh6l!-D7crYr1+ zfBFC9dWv%a;7MN|zTJT_P9D#ASYA0P_SiA^@cUzjPIQ>(9&#nVCsXl`Z5~sdeXY3r>_lUJs%0BbQJ$~i ztfNF9{_QgFanGElI)+veJRT#Op8V`|x&9v)L5t-?hh;>o@F!os=um17(Q$=#A+sFc zVG&)!&&U$$3uxPRg76*Zg;Z`i?76;hI5pQfp0d^KCEiW)@>KFH$>Ax`rL6|`5Rwns zoW~}3-^_V@8oqF9X;pZ3V?Gm-XF7_*YhQ&&-!D&;A|g z5WH*UYH44=jx)RmGLx5QYZejxd{#S>sv0M_Q+A2#wht5jpqjVIjxRNq&`!E9;@V-+bQn}*b%Uc z_2f`QW-jqF1CO~@9A6Q2c_CeU@j#Jolw|s?=d{R+MYeLqsLPaDO54E>|Nn6}Dr2kFbR(l!Z|g>D_BI$vR({z7Jn{S^BFM_%|Zy@SU7YtX}3 zwKhu=vt&&8wK@a&AGQNvi@_!B3(|P6gRO2_bKo068-F+h8_uw`0-5wE$?^fY?m+J| z?WSSg-drv0Tl_`Zo~e?$DC{=OA)5G7Rb}cs|84iocRrSU0)2ZD|PMet`lms7PpG%z^_R8i;oe=h#akmCIAbkMO{IXT}J87o$GtL*_ z=kv860neb<>!;+N2>gR4ZRpb)%+(>-B@z1`h`(OiV8tB*oAV7`&&3|m;S~A_-;d9K zIGLV&{vT5tR{K&DWhD2OO{B)PjVWROo$!`^uvv#TzH#uk8!%sJ!?b5ziS>|lq6+7a zgzoK3mRIUOT3qH#E`(1A_@rRl8}L!8Z-OnN*UdWTt9Sr9ptkXR{;05D1z#0+HW%8h zLfZdXRT$6q5naOnim+Ejc+eqyNU`lH%l_`f^nBi56W`+RvF00l`|x}BIDFyqS>hYg zz8d?UK;7fQMm%`U+mRFL`LO*9TdR@7Nn2$68^4c0zDS<_WB*Umh$lQuBCR4a{&mC) zJFVlXIsKHM*1M|y@vp;H$Q#Xo^1^n0Tr`WIFa{Ul|chBG)&-Br` zh;X6FDQsrH@VRQOkLcD#ze@zeH$Dq|n9MK_*Vsp*u-(-!V1l*PGZiq`D@$y0nsQRwCZ2Dnf2jP~#8O8rQx!v4ifrT$>*8SQzs;B%G6xP->|a^9HF z)B9c;r~kiKYiFjawLRcj$Evl-C#u=L-hAmp2m2r5eZqRj{Z*{H=Ut}Vo>wHz2t2`B zXx>$Qs{d5xDU>Ju;Yr?O#J&v9h)!f+5AFdPSB13MMR8w0YCrY$Lv6F)tWx3*P~1U^ zv-ACxT|&o}cKRrN@m~9>#qqY;rLbw$PWBm+Aaz^mUX z`%{>cGc+G(7}k$uz9nG|_ygXe-4mIw63iPJ<|i%q9wYcJXP9T>4pQ8W4D&~d!n~hg z{$2&Kl&P*HxHf4)WptZpQZe*21yX`(GsOh+$v()>UF389pYKIK|$vWt*JVfkpa@q|4lo{Y}Q1wJ! zz{Zbc_7J>u4Sq`Y$UX9`t#@780%W-@axybl*oFGpT-VW5rId%wu`iPAwM{?!OZabI zrhk$2aWDIRGIYH}g`v!Gm3=KZ5Q%YxsX z`yrd-+-MT(){$xW&tm&?xRV}vAoBprQun|<`3>kh`h8(`_A%%b?6aEi?vXYDTgXCp z&(2!)Vf>3Gf6Dj&U?=}q(jM$~B@g^buzpAN!OnO2B;@%=uqXMNo$CG+)eXDZdk7az zoZR+OwRMIBK6|2B*bkk<_E;61rsx0R6!yx1)6h{~ymj{VpD=xbrp6(Iyk^>=W&bK{ zcknFxsbSl(M+A3NZSeu|!#$mg%qGs|kA zU0v=u>qko3Ny86z(jb#o*o95L=Sf#G=_yG3!YO>`%|KqPa2?OIwh4U{I8n*pNgSX4 z)U9G|sD!NTd^}^#GwDjghOMxdIA5{V8Gw9<`xCa2g)X#{aaYq*<;%5+#mn`H zN}H6!dC$;3h4a^P=A?Z37hxZ4pDo2o7ko87;e&DxBGzM}f>0o-u^5@$wc+ope^%8SzP zC*jxpSA~sdy8?gH7p-acn!mpx{%? zKjkO>^?F3|yWdNFs)z6j_LU>f7cm|_NBkDeO;Xa^1)NjrsWi^-nSMK@?;t%{F8yie zoL!a)`}HrK@jjfvxexWp#`gP&hb-l@!an|g<9RXONzbl@u6kzUL9@;pj;?tgWb z&&&TL^-j=tM#BCr>cboKL*GCfW?ujU-F`MR=U2ji6zY%3Gybe!laA@j_@+qmt}^zo zn@wMych6G<=U#Y&BOuhqI_J3UxyajSBpLG*{n{6zkHqgJXt$LBqyXVL@DxuFP zbTMC!?@hjsoSZSw#xag(C|`%PCknlj?-0|No>cA}z(-R>$MNYQ_`$>&Q?Qr&gG<+I z-@cR|Vt?80e0(weD(7k^FO56TE}W}$LVZt5`@6Z} zTec_esE!dap@mY3yNVDGylZ!9nT z732A@!;!N&IFkI&zYa&H&a7n%O8_nj;SJV zOlwQw4~^-CzhYeG{xr^XG;uff27EhFyE^5{pVF^+wdANg>fr{Z6#`5eylY3!GBj)_U(ndr#%H_lzxDHb3tl z6q!PE?VPUXc@=W?jhgVe^M2N+;gj-y$UCo9be!P(ckh*XtMm(ezlZ(q$o(4ZF;z+* zMyB4O%GT_sOX?)p?|D|cz&a4VH#Fc_d^UHDdWA>Y*-pX7a-KG1>-{z_h9m{qaNe^(m5 zn=9m9TFBAmN*?rooa!<|k}VhFu3?4r?T9@d)M3V>UBKMd|3~h_YKEz(8|RA9Kd~1N z{g`~kt z8tE^uJsWwE&nQnT^_N?H6ZL;Nzy9&5%2)Y5-A?SY+en^m2XCVRJXWUFrXd5=emI=A zw}jJW`X=1jnWF(|gb(HZjX3lDfE*j<5N$2IK1}5{vVZJa!uJKb z^zDW3nw^_;;*T`8-t=jD{#$ykv-PIyS~uzSHj1a`)Aane^o%*Fug{K+WkRigqv+S# zboM#9>gDT`v{sIntK&ufRb@#fAJMceb+*iw{QeR-_P@xnpDQ|c@h$Wm>6etsmzUKh zzfbLbzpOTOmSA`m_b+*$yWjCE;t8);;BFqR=kw(~(K4!=@O9>nTW4P{8~=w(Z{hr} zU))oLPFEgbJ@<9ompN%GPfdRCmefgoB317EOsY)pqwvMl8~V%Xw@Q@NZKCYt+_|aA zn5@Q&betIXV{1n@-c%l+E|8eGMPfu%+l$B?e^;^Dc{&yO_3vkX% z&yA$AW#J=<`cjo7-P8qtj<}C{Pnz)MvG;vA%eIRTJsw7(eb2e#iywr>mu(%tdl+bNc-n%|m$`;r*gbG#7T?^zGkG zrfHn%HMPm~@}tT0dwhq|^ECK3q%lv<-=C{Z=uOZ~SKte9%do?yb#}Rx0aDcAC{=C0n@|WH$ zf9VjmacsmJ9%UNZ#e89bq@4wlFF1)W*kj4s+9!xF>>->ZSilb^?v~umcRIzrZoI?a z(Jh2`RfKmZO}rad@NQheyK#wkNiX{<9*u~4H=1=$iaK$3uKK`dsJ=O=Iq;2a;oFxi ze48Wjt%~6J_fjS@`2u{RmR~N;7n~|zc!>ByESE1-n|y(2V%cTMuOwgi?K@e%@R&K) zNoA~)%2+3h^M$#WC0~$q`yW*2Ji?#Hw3<{+34TzM!w){5s#f_yQt*Q}-;w-aQq+6) z9WgJ}YG1F$4<=NYs7yWeWiI3eJwsOH3}c-W!<w z^V%4eZIsd6J)%{nDizwVP-wqW(mv*H9%$cXFzr|7)BfCRqy0*SzTfI3`X+kr?mv|Q zJ>vT*d|xrA{|l+I<%DOhFQn%58>uaxGwHYP|A(pyS10alvYcJv{CoDjTqWaCf(00c=2M zQ6p%0Vg|j(^oA9IMnrawMB-z*#}^NTLn4n^%ShNC7zh|q_lPGptOY_LBkJ&mqkbcb ze4`_QP&+pP9=mUd*7TdBX=}EwbJL&qyFRmK$ec z3&r>dbwh~=a9kfY#=K!q)SruCn!pRq!gG!C>BfE|6#tMu8t@Mqaap?(A0Lb4(nC%e zpfROJa?8YwkY7B@zNz&EMhuJI)G~2T+)7a5>2bd&$SB#cB1Sz>(t<{4Fg{e+Ml2qs zSt=Y0p|pS06E)lv=L`Fb_G2&_PDG0ILm?qiW-#jU>H}e4A|@L08{iT9X%vJfDC3Zz zqwM0{n~2B5A+v%WBb3myh5V?~)!Vx6-o1Cyy*>Ds68-ic!P$Le?VU=&>uyB`MP*j z`!J;TGd4v0H9i!G=_7>l1et8UVHFM*rGy6tTA0CG`GWe|h$lX@J~y9SI(*^KKwwZu z2DMCBU%UI@u7llNNOJUWG(e+b^4A*@ktRJVU>!6D;*Cn#n7$U|D%#^Q;x(Hd*Vh^$ zLR&)Z^}3jMVnAk8HeW(tyYXPx!QEVuFA>F;}|y85pr4sDv11UwCjZXjn)<>A+dD zHImT9Oh?0UQUA__fKiqsXv80aM%-{SE5JK1wGKd2(7xaf4rb8~nM=k=cI~jrj)Va$ zM~H%fF&RyL4+3BKjrzPl5DRz%!9aX0Hy;h6phCo{4abKJLM*>llJzM6HiHx}50Plt z*Ag>=1C-ssn%J@;X3mw&G!hPlV-b%J0NLHQ#jytEO0^*|ro0(iBtDzf`D-96dYvNg~O+Cg)I7&jSpa9e^Xan_a z59bs^Uq$P*N)^DbM$3bl5JqxgRHMR0tiieC=eYc_))X5XMOKmAW`C$ctEO-=T&>km zxQyQCQCP9BTDy+I26|sep_9Tz6t1CgF@>8cTuNa#g^>UHD0ES{m%^PC`YGH+;W&l8 z6b32mLpv1irZ6tUgB0FH;Sm`gqwsDDt3Fqu?V<2dde^D{izxgdy(cOBpA`g;Ny%6NN8Oc%H)Z6#g@XFH;y8!8)&L z8<{ug2GkQVk8#~YYiBUvmqI|^n#K6)*A?+p+eM3{S%D?sfL8@#5h|paS`XwP5)iYp z7V5v#E4lz2_7VeuCPmNjXoB&Suqnti0=o7KT;n<@427d3;G40bzyR1EwcRTCn!ink ztC)YrNs{wImY{V8bQ7y**{d%c)=9J&BaS;7lj9&JXN~1f>aY6Vv(bI$#?9_cJGO7> z+NzePfzbj+`V@_e7Qt?@xHFm#M8hL`PC)^+f;=jr33|$r5m;6vMJqa-h!6qLvI1I& z6Ik3KV>C;MpkdO$NSWhKkxTBO@73a;5Cz^op2Bgh8l~F#iGVOn){fKxt3V_NQVszz6{Za>wqN0dPyJ*r8z>V zO)88QBIs!Hoiq&AyS>I>01pF%DFcKh1B4+1tLb+e{cfk<2kA!(%D^4SWxPQ9P^|`Q6hHD`B|Wjhb2$7a0d#D7fe}n zj?^hX6graE+eaEhz z4c+%q1sy1XDA%se?yjxd`f?(>w)b{!@9paAx~nrMe#54MsNT-*&P{!to2|%C3O!Y? zUzx*$>UGhpc0Cv#HDdAH?rG(kt*m2%#(!l~G z?F|QMPIJ--qHei3f#%&&W6(H2L>>3>`ks@QW8DNx->{p6XCsQp{VW6))Vbf||9B!6 zACYohPP#wp8Fl-NU@)dB&AFlHM`dSF#+_40BCwnIo_jP(v#8~bG45v86ZM1!4XSa> zYfwI*uHURH5aLAykRVhq?6VL662YJ~x>9)nDWQvBDZd;Rcp?d|Vtks|pHY8#<76nr zJ>FP69LY=LLCTc;a~v$ zdkR;}gB3o1+yc+sS#*mP;!a^6p0;9ms|djbpjXmz>nHI(5jEVjrWL@Jd(TXWiLXSO zKQL0V9BF(8_HIJ{E7VO(+12tCpNDMv5G`3jxonll6Dy1l(*hb0a#}%}T!YNAxiAZa zXrZUHAy1J$6^>(6@}5A@U(gm7Zkbdf-c8GcCrZ7u4jyg}lRh7rlDI}me^ zhNJ$X{mkV##nY~dhgu|5EbkChUBjJ-_@%y`lLxvfE#FiZi2+6MR%x%Gtkr)i98CBr zB}xk@m>P>kv10ipB}T%rfO&3^H+MmB=}3hU2#9KG53kf2$kyuf@$O6wD^N@Z}3P+TDaiVX*`>v9Y*as0@6r$3V z^09t=mA-Kvx7hC}z>y(OOv16S??_KztHpf)8cZn}(M#-M*e!O+OYw%1d6at0O`lSA z6iv_KAV%zl&Q`#qkjG-!Mb;}z>BEvB7V{$O7H?>p8S<8`KvCKl36ru&93UPZ3iykx z1y@SvgV!Rkz{yb}#^Wr?yCWoi$^E)QevlQv3t>#4af=;`;%P%hQ8~a$_mlc-6!Ky# z-D4&frjv|BG?54u8!ypHVkBfH7p99-Iijn0uqf^XNYs|81@i-*ANGEna6eB*2uFt_ zMdTO6yX85L6c$US7sCfymm?(K6!5V@(U;=$S)z{ut`K9esV>o?K!))_4&e18Y77+0 zz>H89@fS&pd!lNNV&%amOVuG6bTOGHMv4asAp?O>A>x*^loSsC`resp4^MUNUD-hg)X-NVOdO**q}T?*TB z7Y3LKMnwv5!f+5#l7I@}Z|%F&-PP;fu=yjqd;5AixA!$<83oSD#LgZmGxEHoB@v6Z z5HpS%E!Z1kx+8cx1RHkbXkCIl9ZY~qlN!h}Kh{*G)O?ocr9^_AIQWn&8)splnolB- zTAx@-9MEd{-EW{LI4=@CHT$N#(~Tna$_5V<9DG_W#7d*#$)GqF=-NB zkuirNiLn@^L^goPQQa9P(ga##v`h0z}zDiukV`0F%(f8IS`@9z93Gth70- zg&c7-5c)YJ>z4b)jvSplE4DaHvBk_sc$^idvvHOfu0fn}2ysS}DuOi!a?27dLNWkr z_jnorjFf}U7RuUE=scOD1h!^N7w9&AWouj2|- zWPjYT9@ohfzGt0r#PoF{RzG-9USV;p4;mpvXESjW$|-%&!~t)6J9WXK&L{GfN^{^Q z&ehVzu@TPJ!4Jiilnvbt=DGl07!8Nxz}*o~#G+4Gk0%zPsdg~BO1?}SH^Ry@ap*xp zqNr{h;FD+UTjPAES)`(lqPc#2@n=J6u^<@U=3(C+=au zK+CEh}QT5I>{Ez)OpGw@cF!#C;Ehu#V#FP}8cYzE9I{c(bMfkYcG80@G4WoJENP z9-#$^D=mJ#;pQxqM0%qsqmgvB+uggZv%9+iTNAM%V)+a+al|7v~9yKDcb{k+@z+28XC=`GxG*8)*OX2^XJ*R24VJM zC}2b(NRKH3Sn-?$H_}_xc^%7p&&~_*es|xNHGD14I)}zGqbw*Ag-9N5pcH~ouAD4R zvgPgH7?`jpI=EkLPtXUom58{Rij>NgG>s2B)x?!KF&fX6hWkP77WEQ0!@mipOsoQW zcz|!7>ivXMI1BG*++rQ0y|wj&&O0*0t7pD_qlfW zxqJI|b#CZspk>1Fj5OxyM2eb-6)PMf@kwrKl*%W!hzs{Ulsw`-g~)Z4Jivck;IQPh zYsk+BKaZYAFUBE&Xy$voM6 zYi=Q$T&X_pV7PD}wjfX7iv41>%blgkQu)N`0`^gHtB=XR9T;$jXtlaxIpvt+ig_$n z;`YSd;ei2ccwMbdT8T!C(IF$6zmKToRgQFvpKs;kv7!TAF`uGamC9%7q1OOkiOXVl zk@^sb2#k94DmbmsKu)>ReIi(sPGkZ3>a?J4`IPR5-=CB5O6^}uzQK2qFOc{n*9ow}4$-Uhhdi%`xNH{_g0c0;t>yqoaphpt@V=*D36a^~vPFafv-QtrP zbG^Ztvb@b=_#3QMxJkFt{f%0w`Pw2TxMX^vOijbt)Y;qHwXwUiL2OYpUNH}Ne`6LG zjtHd{m zZE8Uyto$`X6>GrGbT-n_ipDnxIU3kwbx7t}t2eN!i|&z@8uCP9Lt%v@Sep@f8Bk4D z4=q(#8L-k(Z74iCk`S6a>m%wmaf452MIygYI>R|pnwiHMbJ%(nG*E0oy22b~c|##S z=nbYaLVtBvK1j^b+4A>O2;sPnY-3sA2+Gnl7wAlvS4VXbizdB;w3PXV47o>d#_`gT zhz{_@O`?H~QigPR>A}5c*Nz>1uAU7pch_bS?;RxmB>S~-YlC+X9m?uIiTJ=8{wGf- zQuFwN;h2$q7xm(a&jnTzd-RUQjhGv^KQSXK1EFk$Mi`5Web%^R;Y8G@z(MZkh-`90 zN5+Y)GHykzrG+;=gW?;E2K2zJMxcZl)6lTBYZE;;f)wPwJ~j#rRd39RV*qWxYeRPz zUkbiUO?Rwk0H|~v;XMIyp3@K&qieuMh&$d$O)~zHb`%ODp|fpc*Vab98@qm;Q^1k$ z07}gwF7D3p6%c&#g##>-`a(3p**Fq^;?eM!Id@!M?6PFvMTeC1yn}m|{giZZBQN`I zt;8b+@g`qP%S%%ZPIKB35^(k%^dT+`W#jmtD3J_NCbMZJ4L8bj(}2$yyEu>G9ZMSQ zNJOTglsuCP#npMiUT3LtdR_fZ%U9fdOGD$zTbmrsEzZ`qRjY5i{ex@nX#ddKb?ZOe zv0>w;&7E7eZtMEUo!vd#cer-$>h0To*WG*W`RKiS@B5g$-{bZ9je)_Tz{iJ!BcX6) zUo;j^>>oWa_KCka_{mRcm?p=1nmciVYi`XI##403{Sb^SyA`5|SDt5Hbi_Mxfruv# zv{A<{(sCgpPA){6;NA_;!tsq-XdSIE;zOu)4J-Uj=KqaNI)9GI{3d4XO8^nAwVTAG zqVa~Wc)Y(vyw50l?~{}m9BAa6`4^V;7mtsHi`MD!Ld=&n=gXBilx1A?8Ri*xVZBC) zc;4N0)6@;}_l;C*j5(9Ii`?_q{@v2kqtibt>gt!*_tf?D)YaXnf1u|B4Q6_q!?sj! zeE;0VmDjgw@9UX=-I94#WeZkR-`G<&@2_tBzvz!(F+$v8+pXmqZd5P3y<7t|9>F^; zBnO@48omn{YNB|W@t<~4JcX|H6pxVNeMIO}ls`dX71D_>ZEm4=3creS!#Jdf(^8+J|ay@U?#RkkHJ$+Bh3wrtCm zn~HmrY}uBpY|Fhs=$+6ZfshagBq4+Zk`PMhz4zWBfdm2p5_+=FA138_pLZYo`~KKD z4sv?#GP7pQ(%jctbIqCx%hq#YfQrhMF{K4RDS|u6yI-gsV z?|FaDl2)z0?CpE=TD2Oie5<|wr1zVw@6&<4-_WYnuK7NzEU)nTvsu)%`?A#b zt?$m1&-Tvox#ZAZmG!0k*0b8{pZeTN>lwSILr0COgZMw+wyv&?Je-V2IYBCJ=9yz_1>==@3<&eO||tl`M&pG^||zt_AT6| z)v$4nm)D0mAAM>+sw-Qy>TS7ZxcX*Qh0o>vq4txN+;P6`l`F6Hl;`Z`d;j15*PuSO zE!d`2?f;wq{nw{={(t(N9y=V|s@2}Lty=r~wmWv+y7thmTW#HCyZv_jf3@ZRzy0r< z>eylXRy*#rbE{o<+kK}!_u6xx{r5Xyw>=Ns`QUwb+UM}Y4nM+MJMFs5?tARH*RH$l zz26>t?0ew;JMH_e?GE1cz}2>U(5CA=K8t+*@b`IHTUnm@B{EaOPvgXf z>q}n$xA&4)v!vkbo3FlE<&yfPP0jzh4*!2$T?X~PxyF`jX9eHnfBtKy{&P_|^|ETM z{^L>=()h2-!2k9B*I!?mV1DlZeFa}YKN}zIklRooWUDzBtqL@6|Pn zCL6!L-1gt={5t=@e*F7W{~Fo;zcz+%KJ=e<_U~5pe{T1ijI?i(7gWZU{^!4{`z(EV zT$9K4cdfP5qEMwul>k*#WJ^>85)+`UZBZ%EN)eCo5o%Kj1aFdi@gmu;3($W`d$TuWeOK_tA*`vS-&;L@kbW6M4ej; zy3|?s`^KL;He&9#U6M6QBz_0CWN+{s|K?KXeFD;+H|`2jW*2!gzTH@QXlw)Dsi=ve zeQylEV5-_;QuJ+@R`o1#lzHaShRo-P$R0WJNpJD?s`drJ%#(c)|oOe`Q?bGI6c^+#sGs*MX&s0uyBlg+Z~6}-N@Wv1oc7O#_C(UByNi>4xh|Ye&N3P{ zG6u4I+iZ6cU_*qVkJ-(CGw|ns341M?QC@gS9@{Wg40*N4l(@I9S6Glpc;@+~jdcR{ zwa=CmaiinG4LtGNF>Zf?HN&i3k!&1~WW;o8Hcby&enDQfnwE8I>>wN0MmD;=fp=H~WuhJQ-5-zgZFl*kY^g}Fx28>^$+ zR29OQKBVKT6}<&frQI-S(y}^U&2MP5B*G-GXraMl<_d3`cEv^U-Z?!?@%wq`@(e?q z##oyu(b6>&8_^gup90j(N@hf!SXD2LyTT+(^-*m-mix96O(2PuFai%&iR@rJ_65A(17ozc&HF zo%p=)wcgfW9%~bur;;|fGc3s2AL=|`73r^=)0RZ{?a%#i#cfyAv|;te>aTBxUaH+%00IM7F1xH!`_(8N+MsEq{EIW8y|L-;OAg z%`{QKxgYPd(ogWSEce>_P%0yqW0tI8tUrc+88&F%v>do)Hkc^8mSgz4#>O%{HeNQK zpQ)?;<1^h=#_N(|TVobEdqZ3KP(rzmV!~X^!T_#01$_P$SB$mUE2aF=Ka_U!h;O6^-;77jZe&vUYppXCP9H+lBY`m?PyhSh<6L10cg>jm z{6EF`x6E@RQ`h^wW zj70EQ3$vkThs3KHL!g3J0tR0UImdp$4WsTKKfl;_LMQ)PH+MjnxX*x%QMx4+$aXHq zbMnh+NuPK+j$G8K$p{1PqblO{!G4bcfxu@h`Wi4|VPn$3$E+JV~XFI92&o(OI_bL&0 zF2GAJAWkflhPltWXDC$9V#cdX$25>#??}DJFqy}!_n{2>p-wsf2D4Uk$S8Ns=j!iE z(iy7;yk8*O-fBPre=z3G&p_PW-t1q7|GN|6vw&32eeaF?%wmnS1&N2ZrGEfZoN{=6 z#zF8yd-h{}CTyXChTYb7?Yes#9%4vGW#QkqKn9ONy7!i_OOOpz%n2(SqPMf!Jy=eF zXDhI-LdEguf!FOfJX^W*K82%WBKO7TVzK`?-e2~w*`J@KrB>)4ukE(uwCH?jtn&<^ zsP*%OTS3(p&;$oY(_xuB&O35uCscYCDmmu&B>E9?N2w;RZg!RP(3+j?FLh-I#!$DC zGo3{%dl%yEtG@ehC*r;xywDDDs{%L0LGUV`PNt5%p% zEF5~MsFKP|2vU=oF}GDUWFx+hslQRhMux;&Glm$b>}*u|H>lhW_>B&6#r28%*Tqy* z=0|x%tH6nSCXQDi5o(bhZY5>7&v!z4H^a*UBLq(%-APumV^;H-=h6@5;P(a8Go17% z-1Hv?s6D9iidqSdI`=VEHbf73=|a=}btg-z<9*Q0qF+!tSX8sskow#G$-~mfQl9>y{t;lCHD@Em0<36N1KsC&t$S!5O zQHE37f8Nsm@Ri<1Hw*LZ?~Q4AAZolTYOtk@OdGcwmRnSOrI^NzKbm%NtLKMfOrM4# zAN+e1;m!8!#P;G_nRXT$s}fDH)!YThP@AW&FaJ{5aDb(kGK^|n5ZK0XcB6_pqR4q?D<$>TgcD0VPlvfM{>@XsgbyHaS0 zVuvVewV~7`J134wtu)EJK~iCoWq^cfl39sk7RyYsV35#FGAKwMnPjOTVVGnNASpM= zqCo=q{6NC*1P@iU`se9AN|xW#DQ>#UzJzq$LOjT+&(FbqVm*J+L4a#cQpUcCt-Ut; zX|wEH3h&AUkzI){hYQi22_7e>5NC*Z&8Q2F= zWu0Wt40+`<+4~JFNDt95V0k-LI#)<1tSJTsNHNVtfK&~*)=593GJm^=xH%u;>7m~l z)wEt@)5`lPtjD_+yfChWAIU3Cf-fz51WRHN<&LnK{#o>`NSMU z`flEF_)qtUHYjZF*wv?K!>G$rWEog|Va z8D?K>RyH@D*R-8*F=}xj!}#-p-a2E}UtC~7PFF^B3m}n&7Ug$CCW?0rI?sK#dpROQ zv03%pATG3Sc(8OC_Km9c`rEj0U6QRXc9WqI>_>SWF9=5`8*ZD#On$@=&3<*$)NH2p zcbv%n>-I}uPSI`=E%kDA?0c&G2sLp_*73_rsGCliegP}T&aDt2eJ$`uj>DtV z>}mZ=BogaRi}cRx2;8owKZ!Ipj4Fz*-NzJU$%?b9=U0R2mvFR9#I8 zp8qshaa=GPMjs4)NEqDQR3S!CFD+Hmo~^zJd5N?>l_k73I*mBAP&xlM;6y(#1!XDN zmzG>8FOkeMS&Gq1OC)eJ?bi;?$TNapsZLNjIz5{Dj8_cl-_7U^LzUOC9nn3)zo+%Y zmq>rWEO@E-(EPdntM=O!t(6(ghz0u797D%NJBOiW(m@4*+Bn51R&`y=kgA>$pn+M6 zzn>AN%XEU((P@1WC;`;jc4^5N_!2pDI!iH$;A;5v8T}=}k}(R9r(wlf#q)0{b8Ng# zNu-dw&UW@~BGESMxA51xzh0;m;*YGZ5`GjcLb|`QO0>+udbvd?mQsMj@FS~bg4Z#b zju1BJkNa_m_t(_RnebgLbDz~oBT}XCRM}Dr%6j(p3;!CTZE`D{%RWC|Pi>+PTn?6e z5GcBOCkg0E~&qMC7CsLa8;AhCOp>~dcYN-NmqE;*x%vkaMYO$Fby z*Icff^FUW*^j<~OB|jr{3btQLn;I}HpApQA3OrhryyQfWnYfd4kTExRX{k0C)$^#= zGvy4b$I?c)+}P`B#7g!=3+jx{ZP+R-7~llL;;_RM&6i_m$#KqWwavm>>*P7(qdAli zR1a*YaQPPCIjr8s1w}k1v5MN#-*Yp)vX*{Sf`waP4_M$g@j3L9ndd>NJ+a1flJcUw z9*$2yI)N%R*Gg&dd&u>+y(8nbk{ytqBUr0t_2qCVt3?m%6Pb~BAg3t?pSJ^rwEIn$v-AnxFH6KPqGU+_ngzc zLZo{gculBW-t-aVU7|ekBKU(&4|YVE<`7~d_5_Ux;ebTIb5-pzTG+f%F8XH27eK|%nn{;SB}0D1nC-q2*!(tM!e~Q zX8K5m>bVZWw^H$`^zLB#a{*)!N*}7LJwqveJQ^b_dmGNV=euU7lcq%u=mfNHQh3p- z;b~R3pQ^XhxW}M&c9(}lcGpZWuh z1S^5QG8@5VCkvKPCprn`2958iH+esE;Nn$yWrW{+EO+i9U!EmrfZPGA$?`I+$dO57zK_pqrehRRuDmz&*(G6 zNKg+_0S0h)v>@yf2EnbmE;lkVN;JqSkTVqIbeZb%Y(1)-M{!*Y{1JDI@`tFVy}jP< z@loWQh0H^f8c4=$wQ9iMQ29^q1rziq`5slb%|x*?+s;3BQ;XK{-^v`eg`&~fE@HsT zU2;MvVXH3B)B5_KD- zHwJs8RNnzrL_)el;YC&0h!Rt9_%hZCQ&ZTqs^V3@MCP!M$!32~DSeDsJ-$#m0_jOc zl=verWGPG#Ca&_A4$a&_DODTdyDp|TYBF=eRQc(h6#Ko<;o zHm%muJoTSr8ct0et#}nF{K~uDQXy@{LXioiJ2swvJ;i&Nr#lizhh)OFZCs|hTou!g z$qbW}zhKQ64px`;dRB{iJtIRTdmPF$@8sDC6RziC8qK|)C_nW!+G$kb`gf?Fuv|=L zoMewTSY7V)dS0^5#k3;S+k~f3h1UX6p|T~YdRuaz?Ul%pjN14t?}p8ydZ%!hj8$DHlV7uFw| z_oP2i?-B6Vz8fmdJR}24(A8Yb+E4wMwF4IFJy!CeUQcv!<{iaB#^5U8odUwTs<-(Z zU<_t}m1_e0bpx`4h3r0Hs|1-Dz><|@-l;mom?PK->-VX**&blbxqxQ4sJDfHjKV(W z!p!{EINZ>47xVyt(9`>`1&4H`f2cUbIL!fteuC{zIoHT=n&>K^_r%gG)|29?77AHr zI{8h3>XZs2DHpf6zPa6>EuU=0QSUVk0p?aJFFX&9;H^81&WZt1UGv+SjV&HD- z?{rS;Z3-ZTJ{NPA2Kx6)kfSK`jxElH%Ns!*Ru6w>00XiMWJamCQ2?($7ziaO-C5Pk zZ1AKELfcC&5WfK92Dl7tu;{&tXNX?^zgUSy+l%xMh~%FcJNm3gGyPP zyFxtn<(AUrNT_TS-H(|VZsX9yv0EJFLn?~=OZhHz@dAc%ge>qvI7r%>rgD_6ZX$eE z>g@Q`z$;Gf(^dqp@G0+)wB|WM3g3Q$+Lo($iMP#|-I*bEQT5`*<$Q6rZG&5Qqn)V! zhI2gEl7T-z3&2-17?HlId++r}a{_>C)l z%*_Z|B3<~U*vbOW%oi@t0=f@q0nlSWrF)ojw*W-}YO0lvK>B9z$J63=#ei3Y=f~?m z<*Bz)6l zpDm&ygw0?j8GU)7Qzvq&@K9l#Q-~ZDJpc~<@z=m{Fl%y_;X<*nJioRKQY znHr{vuhHk7Q&W3b6D5ffSq5ZS=Z>+M=26>AD_f&cugaAZ*-WFl2&Lz0OaylBWIGFYJ{R`M4=`$1PDRNogrS8 z5IPS*ql;E>*f%afMzB7G+i*?p>Pl5QVc%=or}@Km`2tVi;Ig!z2^r_Ts+whX+YzCN{Zb<(kzj z4e>yfggPc0$UKlH1Oz&Vd59cB1jPtIsXl5XrC_bnACw$(h^)8|WGDoe_y4bblzT0_ z<$qx{5sYqZbqG~KgWoJ|JYjggH+tkeW8}nmZoD(@eP=AhS&^CkZgG#19{1zF7W-kA zw+p0`^u8;tIo$Uv zn1}-79&>(JdwKlY3Epqy-rV_!E_Jm}@Wp_0Y>VVfcycJEHa@oBNlYy~8yqb6_jDL^ zKITwv0%OJ;&OG2al9`};S85Qjsd@PUD`|UZQsf@mFd2h-NWeiI`FL2Sy+TbCD5B6^ zN^x&M>jM~mhrc8)y5}H?8W?Jg?k}Af=5bKGa1!Tdo)j^JVt5$6!ew~$2&VOrworX) zx>S8?vGMDycP=bTpWiCeL*GKQ8m!1>b)f{r?6i^ z-5aKg?Zx-|+%IA>Fa+I2N1b%hJt2Iz8YAh6Zok<<^e`;D>SVA9nm^_!3$vA#M2YS{ ztNYa2YW8ERgrr{gc)856mjEwgHPTtwk0@?_kRgL-+NWs=TPS^Vq`OX;ZUMiMYNcOF z`hRer{TDTUR}K75Jfh?=0%{mkyTF{6apyE=$Cm?YW#`pN_B6%UjIPtDf4>LgI7l7hG3RG`JQ?g4Az+?ltXJ3{_WFUFhmYA^Exyp!Ko#>rUM@%P}HHjUQP7Q zNhY&vrTeMUIO^<9Gc^#8=H$~F%4v9n zQNu0~hTFPNrua6MA2h|N7Wa3Usy~paO)-Cg?DZ-A4o7cq!A#9tOIEx79xgy+M^$8 z8~r!B&Za6&n_OZfgw!jXd?fZ0M_^enU{bSkXE?>HIV*j=OC+$lb__H!R=~uz`JYMZ z1SVKA2{~uB6{pYfSV|FJdukinDGzGQdq;w zJ*qA(p$DtmsiSKT%w2C^fYoTT=|*|Aqd=mhkN7wEX?s8H=~arTd* zyc+!ukraO6-yNDWb$qpA9b%n2OSHYb)c&9X9=Q?c$x2k7r?9|zb+I2Hf-*?{`VUkW zIh!ZhPX0lDn~+h9!zOX|B-_oR-p(4c$vTd(IN~ss=c^~K^i2%mcC04CGUC$AV}|P! zFL5!8-DK2*KGcna#sS5;1~zCLe^X>pZ)vgO7!8XDkB+q3Sm5JV`Z6N{fdVowt@N#Z z;;lV3M}tE;KTAeD8ja}N11ZEEh{+E)6q8??j)KWQ=6m&iHKtA2|N<%_~D_D09#@(Dyt;KzIo2Uj-zByBU^D;%XRQ zYqYUjvk=4vED2>+Dbnz0CePPhsPG=Noo`N&ET9LRIfu19eeJgb8#@MHW&tBa2p(EP zI)hzxsHd5c@e8;97_Zm^b-U(oYU?8l{Pxwk^PS2pW#(;}_EO8#gN(uZmsnFpx{(nV zizx7s&VOQ_%}MjQn!WsmOpi&8kE%;KQ2@5^lo5f^zHRwhhOBvf^uA3**NF^8rfxP% zHOPt>fJO9zcWBHcrIEY*j7S5{%~VD4s$bFcp?&oJIl2H#e||=g zKoJa?)4eSk85brVtk1vmAW>tTYF4K9QD0b>Gqu=Fumqd5`LCw?zH!Mh_ep@^JZlA& zeGiTIs$fS$F27+Ls8-e*dDkkR{gd9KE>^kaB{Gi#l}XlBK0ft#>>|5^T&#WA zB~P8#vo6|2^P7#kCmZf9Aa2^jAK2@${WFMZ9L6fi*6L!oRiaNu>?XH~N<+Pc^~I19 z_5){S&Zp`FI!T(i;)>RCz23>tXk%#DoF}FpG~O_AzW4ukkplN#i1Z6a*D=BT=XJ7+ zb+L%5^pAw{@1gSgqMTjmp*i}{j+D7mNe(a0Fou2*TT|sH&Z*(lSoy*pJ|0e8RbuiL zYd8R zg3^GhU^Ox*ahqf0knuPE!?JDOxD$%R4TQh8Z;R2lBGcA(#Q`c|wZa!%^h@msKp-_< zSeYSa0lE(8p1J2tbWh0(n{f3nQm$rB%B|{n6J9HuL-U*-ZZLEOMnY$yk)V6QohZ`v zjJPK$Pe(PKD7rFHaYam9m|!eKc3Gi*wkN`o4R6oU&&)t%2T_{t-d`UzKxC!*;h;SPnjfI!lHO-ijDJ3BT8dJ#L+_%Ub@KP6XRq zu|5lD6p}7Z7XvCG%@+CSyQaMLU8v9XUE=7Ko9t=n=BlYd3wf7xGyeOPn|cvQmD0_c z&3w<+3*bLP7HKSFvwc}2O(=i6@h-mgu}HDv#=l=}%h#+uk?BcH%SJzzkNN^M0ZgcG zs-2-pw$RvcXrePT-p5<>EmUY&_jQXHDXvYl48ZQnWe}*SU-oqUfr&khdg&iJfzh>jyux3k8-Aa z{{UM$Hk~1Kj>#7SYYPL`R*3bc{Y9(AoUHS~2G{vC_=zgu9)NCX;H4Twxh1?XsJ*~4 z6l&`GrW$7I?Q36Ydzm%V^CV@%ccJo|6#08lg?vg_I{!;d)3Jpc9(0BRiTfbD$`==; zD@;ZdDxap+>(d?vU4O77o2$Gj(f$<8BIro~9I!7Q*`R zfUJQf&*n@Q2^H6D9EI9Lex=GFk~cWu{Rm_fg31=8*KDkZwTG-g`>X`oLnWZCOQ$+N z<9<4`3*TxEJ>ASV(|KpD=HC-YzZhrdpG4e!3@^)eSA1O!w@Bu-_>*r6@Mo9k{7s-eOL&JW z9QjS9V|(GN&R%|`&=mtYD10no4H*)Pm@6H&RhRuES5Vt2)6NVoFu7?~rWk=Lx1y0_uP z`1Kkw^KH03ZoQ`6#T4dOVRmH#cPIgjdHCNkK^?zxhZMkX?F+L18;COdHXL!xG*;wk z3X6W8JB;6ZNZk%fxdgaTrm#Ao7n;$SAQRwX{>B}W0WRm)tl#`Vg-5~fEbx2!|KE=X zrRLI^^Ico23EpZ~s5BDY>)BcsfZghoeu?T3%fvSw;Z%3G?%1m>=711j6A4P@W+r@XR8$BG8kb-oFE5d437e_U) zMb(Rn`Hv^2(b7LY+^+@TV~vsv-~fs!~*lmk?F3F&E-9MXh3~3 z==p2^>rHYI=*>V%F&FeG>k0SKI;bcOhvLqDKo(q1ZTT@v;aidnyzHgd_^2jQeqpAU zvnDb4bO+v*r8rLRer>eFEJFp-d3xWi6imjOS2$m$Q1c6$N$>BFz`6vs@1DIS2*d37lleY_Q9Yes>=cP(LYbvBeUbBmj_Zwa%*F%HJ4bDTypF^+zMPSQ=& zM94;4S)%*gdpb-^Nn_dO3Fc-`YrpA5`qIC(gjG+q04;h2Yf!*zL_~u+yMYYlpx(!zUWIJk6?SnSw?bKyQVeWt*hY&_xYT^8SxR0g za#~GhyR0T_WK*n>QXJPi=HjIxrlI1jU}~m!`)gK`0rbK>Fmy*vVGKI37r_)S8JN-m zz-HuuP6`3TjR0A0150>jy#{p%7)M}7S;0UvfF(ReooB)Q3?o~s1I}q&$CpciNF#s> zfmr_YzrJvD#p?VAX9-{U?Kjk z9gsaJm<{S)Z9SqL`UYKYb}a?c@PH(@fF!vw?^fZCID*pBWS?~Q{L)VA$@Fns z`y@xBMi85uHRnL>|5|Zk&p`UB5RaA`?oj|_K|Z0f=BYys?ib|BOyN8}a~ljKnn!m*j1l;@Ywe>i$oj?ka)7JP?*=kejl8H}%peX|0QlMFB2 zxahPoNURo016KYk4Un(BUOKLJfevHk`~CQRq&tDF7YcQPaCg}J%mjUX4reZKYn(xs zUrVy|m;Uj>CtS0sZcsg-4O>j=P~zG-ehWX_;f%QJUfObHO|>;EEx2t+J0=z&*JH1M z;4b39LguDP4Ju4$SxzPAeO zsQ=kI9Udb2$YG!W!apPbW#?mf{$tM1VJVW&1d<6-$VLjpTC!F|vzaIyt9Bf(hrL58 z%+m#w$?|N%R!gYFu zw*DxuP=kZO{bc|@78lydRMrrEMd6&ofR2d5_1D0(%mxM9fr1r4|Aq2(*BJSk&Y|6@ zpzl(LwPVkEz-@7POui_Qe6({w3n^9BkYJ*4gcB$NE(#yD!d-8go;fYIou{VoFHBG; z8+@Z0Hp4CkFoeM<*s72EDVQccz)ZPmg@0oATf*tD5Dedlj(x(z8ba4s)Yu&XY+GJ~ zk8`~>>@Sv*&ll4?wQcv;WxO?wZ5?6vGZ*r`Yw;x-|?uG zO|M_Min?v1r;)Tjf{wXwEnC;pH*Kz`gXJg zQ|`6~319JTmTJ&_wylrSaN8Ya=R1e5x^T@e*Hz9wAm|~5adLV8aIXYsB`WVcJzxAL zr)e&wInjO+duS5>9Zk*o8^n`LiFOwY{EFgPE9gh3y%j{wfd zF8o_Z#qu_R%q2xyPUo?~vo6%$1$5Ua_|g0#4QMk$lPAkU4+kk^aIo5Yn#NubKtvc;{lBAl@f0KgNjd0PHi>s4NDr9{D)i3H zjQMv9MkTPp`zF=C&5AML*E1rJD^zgh`}G=9{)Nn+L>kXi) zu=N__6(B-9I6qtJ=6u2Nx&R!%g23?$>?dQuN>2gXi8S1MF^VrbpC8i=kRaeQ12rTh z*uEE-FTWGb5uiL^zi}TeRB<1ffSAfair3_6ikG$&Y)HWl=iO!$T>rmqehaAnIw*e$ z%sW4z7TNmc zp+YcE!4$`%!F=&ith=V20o?;Lg-tWem#N9?H7Q^P8c0MJt^Bj$AwK~fT;~+6;v#iX zTvmB#D~iW-`&-cZ&|*vx85`B~@>UJ}VGR*3T6QuuH=!n0PLPv`zAcUIH<36e9ximK zX9Utej_bPzb~SM+rS$ql>2;33K^^5DOpNG8ZL9N##k#QO-ea(sUJslb@}1K^ z2^q#Khz@+Bd(QIvRt%>MkKzben$32{C z31{TNZ+b?K>>W?HPbQ+2@LM*BoI?2hLc~}8mp=|qcTJNWpYDE5`q^`B7iQ(G>29R) zn>rsE*q-{N%r4M-meQfHB&Vf0)O4S|oo;zHCPfm29pvgo*L+-v3lpM;@>=r= zjpZRY1Z8Mf`_FDf`zZK1ZsM-0bgzomJ9th>F`B1G3tvw?&~@FX^MYz6N#2cDAFn6b zSz)4}7m>jUS-{Ejrt8fxte?F8Wn~0FEA>L%27?J{ukL}QIG{W4j)VD6*3`BTt@gSPk|hxmV`B!s;wh@a?cFk14|Kbd}0x8JeJ z^s6CmO3rjmChk9Pp@2&Z)P2sAYy z3_UUzSord`x?$|a!10=yXZM28mFx1ob+hNqx0RU(MVe!&r`pC?F9!yvdgnRiyhd&N z)AJr8|I0l|&9d{&@lKNf$C!Q)iQ9q1+9UD4ZRrkeIHaj274rOjho{qR`0ZKgpJz2b z$VT`5hs5k?B*Hogy17U3?Xo3RIv&lEdPDja5RZ`Td!cVj`@Uv(dwy)%#6#gQQ!bXJgjC3FZ7eilf7QwS#-Atp&qsnLDFPJTZo8T*=SREWFj{O@C$^58A5#1WwT=K$YOg;_#H&lHV5dpAJkL zTHpj7WXrT}h1SE|1CC{BU?~Z4b}U;0sSu}q){Ej#V`=vKCNf*7PL~l!@ zef@UYU#w*QV=*qs+$twd{Tw)FZM1@-S=%p zX06yTVN!ERUM4&X8=#XjR6Se+I>zDOF(Mcfb2R)lr8wQwP-S$Ni6LEuhzH7u{(1P_ z3OHPrh?rDzx5wI9B_gfnzdBc++oOME7Jp>E>7=)E({BqYHbzia7APJeWSesdz(B-vXZ<{O|lWC#}4&;BZk`IcbBHSmg0_; zKJl9vhL(rGWaHLR1*;1A>+vDp?&$t7G=D78QIzg0!o4rT`ia;+KIvP1aGQOw-+*&P zk2Js=5j{wgjskj89zqL0E#GII7{$iR_w*Vg;xl z23*37LV#ody_0zzWW5ctHh`=%uSIVqBdU=ZwsqPI%4>e|1kF}b`%M=b^uYh2h-aIBI2a>4 z+}ZyZDLaf_O*wui6ya^)VT>`JgYH_Y&-DRv zI`Y9q;4{WPAP?_!=ziiZJJuZQIf+MP;kQ`No*8e*HnrZX=v%WWkG~fej}&=|3ZPBGoZiChd~FP2ibDKMK-ut`mSTZ0JNjP zjdz{%GvF@=HzKFm+3s?V`&_9?cwOss zhT~(A?r$aabLX4WKf&Y~fQyZfs5}YJIf=;bffw#dnN1hWeiS@^%Hena?*})-@8w{R zhd10yM%+n;mv}%*MIh$y8a(?$tsGl>x}%{)(Ll9>AJqy@x8E%c71F!!1Bd%HFkBF4 z)6cJoOwTnN!LS*Bj%tHZtjWloFEEP={x!V6Be&F`U%R-d2sDA=Y#uTeh#hQyZBLQR za30JInMl>vP&usiHdlH!)u}F~e_>+y0*8*oZb_RTB85!NbSJmoqs(3|p@d|CF9FDS z>syqK*XtAkQ(YBrZM++Q89OJ)0BB?j)P}-0k&N!E8mw~IanRm#14#hY zOhJKC^-T$RHekUG88$hfT)>5A;6fpg(SHE2ywkGP|KY73f&}0kzEtt2RXl-v()K`j zi3ySWBn3D_Wnbtn?#aS^LIWAzLBR}=?qoy}*ekJ;wotm~j7I~~b2G^aZ@xrbD8B~K zOBdW}!6tyBsw?6BIt}u}0N^1Nz_JS0Dk%W-#37np?KH-)XmR zLaGeaqpH-!05AbyT{EZt57veMHIw9B%4TpAH&ZItDr@>gcm(r4dWc8|XsN3J4fYd2 zUVLX1$a|OG0VgWJDBc5jvtWQTb5|on6u9WVT}Ej5N+UXLh^)94N(FJLCzW?sMfISL zQXuD_y-Nsc?#yW2PHvU`ApjENl#A-MJ1I*kJ#2A_qS2nxtwZJ6XL=!56#s|wRd@+=4S@Y7bPohOV$^Y`I|Y`{8mp3wbPQde7uCuvCmodWm(IjOLDNJ#WcwT@DuQX zpI}LHYI@|1)y^22q`!9w<*i1(gKxL@F4Y3G+`J74(@O}!0AaEYI_(MQloQHUKQ*!f zk&8!^EASsX<6W6Mg(36D_@jslPk5du@w8+W;w%U@H8R2*Z`$;!@oT<<5pv$V9U@mV z0s65D6n_*TSjsJlpW3PiKv)Gp-&FK9Umi@2oIFUzvMcNPv zLOQO&rhhLXSOMvu13*QWG_N6Mr7z+U2p0YPD$~nyO#_BB5dith*D6I|%wB;ehJYAG z6o@|E0?*rfU04EssU_G43PgF`tP0Qf#$sHdOPr!1pd<3Dwn|BRiG&xQ0x&k z@*U_dOrj}37q0mlD%N~w020Sa^466M)5oy zQg&E}B>36s`UsDx z04E(Hny*K9ZJ~D`3YL6z4!a|{wQRJP9|*q{$f<%~+e5hMxhh{#S%jzi*GUB_r;(qo z)=B2kmAdC%ATq+obEwwozW%Zg&G+nxjy~#)RJlh=$1o8LIulH?95C;EKy%x`RNALT z*7S~6!b>VSWf#_5+g1`Y<{cxte8iPYjTSS3ou9>k*7^Vj08}!Dg8l)=mcU-cb)X^y z^I=6GT>Q-Rrl4LCrk(v^0!V-u2c1V^v*Vs)0mR@529M z=}W+xI`+4(Td7*1N|jO~sEAbADkvl-gtlIbio&f_0f``MYKcIS3PeJ11r-fD5edod zwU)mX*`i2F*q0CzlH0mK1lh8jTM2|Dmp~xE_oMgYdFCN!X3m^Bb7uX``@ZAxW|(i? zm~5A#3i_|jZ@O96(GHE&rK`m^^y%`y3)2x=5$?*7Ay!iZ5t=bW)A4YCneG-;H!(l&aKn|u@}4My^o|CA5BvRVt~&A`6bt$o z_j;Eo2eeUJwd0?&i3&-AwmnxkEsH8M?;s>(@{rDXdg#7tssOxsvC zhqlolb3cx0xbHUp+DU*l{Hbe}R0v1n@J*F|hCkyLVH(;`#QR!)5>#JvAJ{-o0HC)= zSe$?iR@vjH1@6zlxrmbrtI`dJjAPm^RtC*sLHF%8 z1G!{6!iWUB_FcwYv7+wa#@I$G|5;Rco#rg&e@Q=d!{)YMw%#Ary)m>c0L>mjK5Ule z51nS86~X3wQ&;K3Fv&h6;J@=@OxuKU%bleP9zL*VKCDj+O8@|?AmCC9{R(GxXYQGK z7MPBFsvG}=srt?mIdF!2$e;Q_(x~Ls^@ikavs-MWff;A3kTTNfMs`O(nx(DD&m0xJ zs@C=)FA1&XJ_*_|2OEmN`*<5cQcq~_Xei32*rrB%%_=EX))rNx)eQv>H8(R)E`79I zV75)!;#_qMyJh*QDyV@OLh)@G%_>rSKUrSL-#dA~40GK4=JL(B`mv++s@3%|)`Qf~ zu{8zT`8UcN^2#xV=YTWu)WsvphrwMZD0)ZxEWHMA$f?aiKg~Ph8l7%jp}Zy-$AaW6 zzj(i;orWBp0W2$iM8^K5gAnia-nZCDi8~$JQL^}!z+HIGTZH&L&z4Vf(c$UD z$Tx?Y{^6VwO|~D;a%YZ>qW@{#(e~NT>f+oG*}NfMcTtG71@pD69Q-A2HRzK%M#fxGlcB zmVRF`;H5iJ&jk|AgS4!P!l1l)fRx+Rxc`M9&O@s8@qy6YZLk5D^y%?`UZ8Pb(jv!g zhoz;0Y#yK()oUtcOKKBcQ;rxOvEd1sz&?r@w{3>h9DuZQ88|ZUI=wJew}}+CwM>bo ztk2!n@2c8Q=tdyuPoOA;=sGuWI*MT`@{tG7x)s3w@qp~+ZjmKZ$89-~HK7x*Wb)Fo zUUoT^r5*G!(CQP(OEN>2sdDZox8>dx`prqxKJ4_m6lEE_83GI)zyG~95Q3(k!=D1gfw)4w6DNwh6-Zo&$)2>W;v?mT z5}osS-dBRG>!z3z!*NT|Y^U8}%#DuFt_@4KJ7{3MHoa7?A+A`iPlMYEPF85ezI+V- zh2Q4vyD9|5qBuLCwP4@?-14u6j5o21m8#w3quY}}=wJu){)&Lg^2fvzqIpa)=!Beo z-=Y8S_p}cpl_#1dVRT>JiT7nQbmk`dZR)@|_I_3z=|oeq{Q?=E1HC&io)X4wErCAN z-sx2dq$EA?fXdUdoPb;8sXM{63rYSsq|PE7?Fw%PMc@IZ7uEQK=a?!2OCgydbZ;V* z0@}^3S>B0lDD|nC*_XKtFYpwc8@N7j8Q`>V+Y4~zokz;~>~nL$01z>WI!M zT%m88WxC$RRXH2lX+4k=Qs)yC@2~`0cgtzOfd0g0t6_i1^jRaKa8x`#?nxZshty zJv~3Z!Np-c-Rg|eWG`ochojf>M?P^&r6{4quOo@LWNTk;BBp((=0+V;bH{Q$ zmw{7fB2okpO$b$ac8jbgc-*!sn%XN=k(76exGuE6h5x~5xRb+w@UkJRk05?b5JK<0 zIR5h{Ow~}21%I!wtn8)xz~$$RinPa@s)^zFz7*WwhhB2BYu9A9GU*_gO`yLlZHclm z9>aBjAm%%m<9P|r;{GW2i?LcN@-1Qmym`{0OYvN zhTRj!$aN;WIU_T$m?(b$aP9UBd%=qHh+RVbnGK7VCRf?GJ-eI&%jy-rhbP7+B#t}qOP@1*&Q{BRJ-vM} zdCwqa-(W4kO8YF??M&34sgJDvVu*}3cS0fJL%zfr>C84;eloo|1(7l=F2`b!)TQ0X z>jCBeaRRX0?u7|d_ zX-by%H3EV}2V=n?jA5E;L(DoP7Eh9j=>zOCQw_#t7E}RY2u$i*d|L_Q5~|QtL;JdW zgmwa4boYpf2k`7)@4^`4wIrpotAC(*PNdm8>rVxaKW9sxV4OyfSFda;bgKiARLpgR zx`%sW=_797(usPO*%sgRK{Ll}+k78>!ew(FIEjhG(!rctp)~_Q*<`reQgJTU?7P4< z+cE=|K6(NO?ONMR;>qq2DjgnK2k7j70Fe0$g;vASrAC08nxg+!@`Akm1$meto8<2t zRCJTF%T8G)suxL3XBMLE7+v)OAB9$MP@!dy3IJq+k{4#T_PnsP=^AqYeF_HDsTACZ@|9k{g!{KCX;-G`7(t2i zDLrYM8(V7V|IQK&6VZW4E38jhbLH2qTaX25IFEm0h9JzU%%wKK0xtws2V^PHFlQ%4 zv<+AKdADVUxNb_U)IaCc2tndUUe6sr)hvp`xRa!06=ek%l9>80BjQR!3vq4!_K z@*I5*ubcYb$hUT_0 z&A8y;we6UKnMw(Qxf7XufOshKG}%*_{FzX{hZ%Fz@G9*LW%X<-=U4UB%CSVL*Ymwr z6LbE7FzMeCIU37R3cQ?Dqpwg_fr_sKW#rM1I4Z$`LWH_arq*a2CQKKe8>J(MJo?6x z&^}t;ewAAAie-37w@hK2ZT*Qf{)=Q;+5!T6!#;;WsRUMKD=V`#p7@RoIf&;_mUe>4 zvUV)l#*~Qej`3nbjD#WXl0w?+6HaD7MIA{otOJ4U?oi;?cedvE>w@LeWO4AMm0Bwy?S@Et%v2z$J;5cRCqWj*f`}(Yv>l|MU5F4n z^O+~#&R)jn)AuuB>F@Qd4Pr^c6@ivw4m%JZ{% z);2%*uNV;0yc+9{r2pA{&~~@H9N+?hAC$ILeuz%jTuO7Lt$u(#~BZOo@xq{~FJRLn*`#{UfviKqMIa_*2 zs^}~#EJS~q&X$}C9BXV2bdcCPssyxT%REegEd$y8{!$O6H}VQON_1Y&EtX> zY!^V3$AQI(C9)A4pOu{+ifjxkPw72~3kEI+4|piABi>MdHr8G3KrP?f>*rJZpbYbG zU1HPkx){6RwtB(6$p$cmhq6p1|56OX-tz5So|hGc-B|O7ZnF356!GP-)>A1UD3)Y} z@8D=A=eAPz=d5&OvZy5deOS#*qG#fsd@xylaXU9U1x$eMVC(_o)YPA8n??;x@t4Ee z*_dHgRFWq1}K!Fo=B7JeBrc&A`ZVvSqJ%t=unD>qw(OMcGas_?*-B zdsxf-({T-Zg!hg;!vC^~sqmaR#CZvA;)ikDK;Y6Jt2~)e%M1b`4Iza=d^*o&%g7s? z;qnD63kpDUgDlmWIG5R?6*ODp<7zqk@%DZyKjm%fR(7F6fy1yAV4w~Hdu_8Z9Uste zWfOpcA7|gh<>Z{oB}fi}8P)1dAWMH{k{rh5&3~`{c&3)^$iLRnP>{;I+4ug!R-%ew zRWDk!XR{Z4^_KzBOEjkY`XL{{%F%wP^W@OZ+4P@rq$UxgZj)cHxpm0T@QA{k|6bMw z(gM)F17KS46s85)U_mTf{PV$#oSR6BU&V4sO_fS!PUD}NedXSYeEL85chLRD%R1W3 zyRwnfNf`}$kksJ{`}x|o*&KP#mWZD-jJf#8UM{r4)HtXd`bEz~^^Qd4Xk|!7G1V=5 z+FJE#?^|5;UH^H)IxGEra*96v&^1sUA^xNf(Vy4mjz<9&DPIr=b~4VUCSfEYfal{4D4*1VPMEY)-);ndkJMrIK_ef-ee$rWp?3YvU~LzhkJr7LmGwQLu(r8 zS{G(q=)!&3q?Q)}6`P5-^W2_R-2PMYu?5|nD-8&zW zHt{2&Jd89Z^-TwZz(vqRUsuuP0YB9rRRR27oqcNzCNCU26^HvAN-6-NRzT6=OD8^~ z-#Co%?LP=RQEc&8CGw$Ean!q}AQ*jzhj|bj*7XfD$}f``W5Nq{9w?dT;_!OcsDn9S z9jD&Z`Awj2SqE3MJ0sYVHP6I*QPRhi>SsmVml&oO`i@taI1E*8l>Q1TU8zfnJxgl* zXA!K0@8>{?io==s3?m(HH(>%9kv2bbx*SikM^i8D>{nyBm_VA8$joH;@b}70l36`l z_RK@)Pi2Nrxs2W%zqb_!3#C=zbG}vM7}!sJul-@uAlWT<^iaKO{#hA_k~#RO=aQ{m z_@xI)@80NQ?MiCh5Z?ADat?3cs!G!%(sZs)iT6ku+mRCI+X$8b;yU0h8uEsmMI99G z?r>h7A8~VayvI}#VowR=r1xy4P3;VlQLT8x>=F6Pk*M_xwSJ8?MbA;K8!VMqUByPs ztx3#%iyHPC%nb$lz=9}B)48Euk<1+ZaLI{w%p9XHm^-5{(EDa;AM(zfsl5{uDyl{G zkstR%SJu>`U5^48piFQc=iM?}4{>C-<(YxwkJu7z^6~fAgK6t3blJdUs)+35p}iIq zf-hWVI_0=~GbX%U+Ad`J6RGMLNivJcb*AETk=2}X^4~b(oAiSQ3I&mfMen>kh;LXl z46hk3g5~TD=$fm}5fLlFD(nOd^%h&l`9kf`(@>g;bQO{%-p z_%yt!&D+erXu=Qb3UU6|B9)jeq=Vt*ryyFiQxv@fJ#fElL$F-2kPI*QRqVY6K< zF9b=U8P{m9blsq)&sv_HFu*GN!()8IHr`Dq^Nz)T6}dnT9zve1FnO6Vwk~WN3-VeE z>IP8s+gUmO52o@9X^()7>R90`qWbdb2WF4yzeGge;%+_Umz-wH_7gg5aV3hh4Z;cr zdgn~r5AHFW%0k83I%WWDjtYINmJ7EBA0rUdJK@1==Xsa4_B zKs9E}trWT81IscjtkB*;|630W=Boypjm^&}>B31IcOwlfiD}gRvhjjvg_0+-0?8BZ ztXDOonM<3Y3aH%O7IzBI)V)AIcG6O}dMJNjIMd#QCFu+5mPG-*6AYg>6?pztp_A;; zLOCvhQ;M4?%6&Sx&=_ZD-%*b%nQS<-{7+vk_Ha7lrs)YVH~%;g*i552+*j~!YL zzohLZ#{osJ^lsDvp1H z+E8TR-=)eWL1uS%ghSZ_ZTgRKH+iEuX)Vih4qz^D*<0F!{Ch5FCzCDnBzue@KGIm|lJNUm%CK~J+4Z~h+ z5Nxq|z@8dx#0n0AL`Gavgb**t&XA9$@*V8LB)qV8s+`+lt}3CdwU~YnAW~cL+!{-u z0)LU&Mu`yZ6x=yXTc54-uN;+O*euH0%-(##wPL~jhiMppVoO+80y@i29m)`Ejp!+{ z4wq*=AkxMi9IVN@NFDifuy#cQ@FC`Q83rTF37+$;&_7j%@mjUhKcz8D^gF!uUr1woq(K<|mB!lJ>6D#~)XlSF(NkS8*bsWl8}4S;U}o}Y zgXlb$Q!+xSLb?s#ecJ3BQZekMJ^Y@PK=bQYp{c&rsw`AUqVnEQCpVeOv}7R)!fjSH%Ue-NMwY3Ivk^ zU-frJwK3UN`gfWNGA!v9-RbMN-V^h0>dmIW*IO|b^w&F2MF@? zgL4Lf9vj~Ng$|nBN{T!sv~u7T9qI&mv&oyQ$D$eCPV^fACQFuXzjp;}my4-G4ZDP8 zF2Q~z5m|CcfD#g3NOhu12^^3Ed@wP0u1cmG|G@o|q>IXzL!A~4rLww9&bkeQ(?{x6 z3X;%S&XEy0Wc+i*1Ru^;7I%w6&SpD)WuQ=-smC zCoy_L_;A;Tsy^yP{#8eP22=U#J%~B}xp8w4Q*8_1Dug)fz4W=EUN z|Aj{ZQ8KvUBdvJuBZr>3kCNa&S2FieBsd^JeUt?Mt3h!o62i1mtGMy0!>#s$VqX(> zoBrH3a%eX(R5WZtElj5vRju%p7|=3ffPu_@0nWYEUsHw=(?N8}3S`f?P(@haa^Z=o z;2O6-Y%;unz}KLMW`YPKD*@!)+IXkT)^ADb?}t10MfC0maV5$+p)QVz9Avjf<~Tk9 ze%$nyH+s)Ey6?bvLD}M=j%DNqr&(4&&wG!UeEI!#ueuhtNK4r!Q;`_Buyh$C$Hp$S z14F+@4G#3yd$5IPXo(w^AK*4MckW?GZ<_Dq%sJT@w1jpaevt#k)-Q_sc0J3my=v5- zAZn?-Sxwox-1d5}NB^{Mm8y7r;8Nulk1FKhP%Dw2Z$+`@j;Ws!>!+d{NgXUXY=dvt z#-tB-SPHn?O$V^L^(pE?O}qa<@hl*kwDGGP;!~U3?ag2$mII66X;q_^f5zx%b7^ z{6P@YX-xK9R?qAmdZ+&`vEzc7*I!Y=z+6vH%h;2us(jVbPc&#Ni7wSX$qv%7X0}+? zGy=!X$`m#wh+&QUd49vQy(;C`OGPVqlKJ;A-Qxt%^0=jtwnAYavw<&ean3COMU z<;GbI_cG0HSe<){nk&DVROb>I<+Jo)9sSljnp^s`wNW_|*3(jRD@lowLLY_A1pA-W zinA%W#1e#j z!G4)Y=-JM{b+O?-mb`ve`NuOm-Hc~Md;AjMIWku;FR;6B1uq3yr3?O$Pf&((4I19- z!e>5g;NN#F&lrwVC-=zX(W zYxWt~$pOz1)yDqW)J=dZCdsuPms{4#1d>PL>nvN-M~)l7l#w^Ik5&R<@Zz zO|jfUJGw3-7(|t;gUrre2jp z5-!L&LA7hNF@MdHvdT>sDPxEENq3jc^+xF%$eb){w$g9*p3Xrdk`)m9ws-a&p$}3# z>g$HEgCLr>=r*h3y3HzHx~he)V~rYFe`v22=1QjG%c=JZaprdYj-~SJrd48-v*lPB zsy74!n%>tO$mkKphgBl#wSo5IiOSEbl;4+d|F4Nkg3n@tXWBp(Nl-#_oyXo{U-*Wl z2frZI0U?RgNrJ-7@_Xbj=ADnEp&$#E_9>sY^=*9jYokHP@?dN9Po{JLc2GimqX~jE@vwW z&7~;+s`DPz)vq)4d21J1IOQMovun>V3* zP9;uEg}-?4fX1R(4(c@k@?z8@<)x{msd2+`!(}v0fA2ZoF67nE8BTnpj19asq);f56-c zw*d3{1u&iTke7$(>lW{cQsol6Yqd0f7KaortYpJcW;&69V7QNS!6zGhG{sB%Y!F!G z=ff)BFy!CygyL}W{gGwTerL-11b&g062`PDGugNYEmDuXFLRL}Z>hS;4U6cK&c{5F z-%bF=i2jEvMGzl9h-4LcfofAJeYG?Qzl!)Dhv!p2mDg=Tcy3}jlU3&%6l-B$Okd6E z3N(9T4bdrM`!&5(`Mr^tRWf2K2POiyd})U^($4GGqj9FS<}aYcgZ&<_oTSiL>yTZ0 zf2(U$q!IZ?iT*y;0`&Y>$Eu)ewRk4;aZZ7DX9bv7TQEmB}uHIJ; zD>h%={nPBu{U}K-N<`l4ukV5Zy|po{4;$Kn4HFNBv1AjuCzY;&y+#aXQ1Qvs)6D(F z3(22ZMS@n<4(WL(V%;s?sYGe~-U*msj-sVwOKkDi-ujQFF%D8_t{ z_#UBvmXY@3cOqgre9eWBALI zn6P1FhjHw@@jM1g{;-kyc_StC{nf1+$(W{Vv!*@YHP$I%X8D^(&FBY;(5^pG9iK7d z4hqSug$5bBHPtJ3Yh)kpj5$DEJDy&t;8GlLk-$py09qjnSc$q)R-tnoSZBcYLp!ck zDIb@zyk@w_Tm21Oe~An>5-!UG>>+Oh<(DPs2~vQ>m3!rOLskC5S3Kbn*#b_$(v@8w?%~$ zY3P39!cd-`;+U%X1!aNc_f^U=3XVt%NgZ;M*p?)`K#~~-t`chI)Rrp83A-#CY9G<3k|D;p@xjM@3(j~2Iao09a}V%0Fsck#6Gd}KYW@|ynZmlM{y z#WE(-zUNfn=oLC=4F-e;EXQ}0P`>~sZg%pAgTT?qPX1I_cg=#ja-2@8@~Gu`Ct>n; zMlMi)PUEh{4CMYb9|gYdW_Ig_GrT(oE2G@3VzxJucllGdU@4ydl;iknF0S}ByE_0= z9zyws=|I#UkdBwK`?Nfca}Au0VwsB&IPKpsScWtdV$cH}^d?Y19e|o!4cu&wxJz&) zAng!KAMLJ4Em)RP8`y_uMnaV6_+blou<;VQP80fG6Y`O0-RD&*J=n4R)%;LG30&WY zi!uYjwLaO)2mG4M=VBu=m}t=4+g-270>Zs#%4qID{*$1W!~BwRQ$osElDxPj$_HOU zbC~bj)qo6)py+H2tx z-@?D0!7t4i`0WM5b+G2a#jv)Nq2kG~PD_%6dJ$9d*Wnx@ch?^3#jxH)lmuu}sZ%&O zLc&rb@(At8a8A(D-%&i4%9~8P7N%p2aW32m;jF8T!KEZw2(5*C)?MWejm57HmzP`P zI@l+;2=aDq^y?~f-r>1z+4^&qiiFD1DVqDXmS?zY>1XXlerKzcXG%l-W{PPurhZry zmxH?ws%q~%t=wLy(gJ0$pX3XlI`*%lBxHxA%D-=eo!Vqi)?aF>MDkgtbp>@l@h>6l zGMz0b`+bxhPtWr5#1|^KAb<@E<%&4^9wBUQ<9uO*Td|rM75sLUP2HWG0ZA8Wd<%0F z+Kp#mtXFn2?fq4khUf=IDbOn}61u|q4}yP5(Bep0M%XR5ge#h$ee5&+VWLC_JFMgC zSAOBMx<;utNmdWaRs)5Td>?F$8&;p35}le7FNfOF1obf1CqlS-iTTdtVjO+05jFFk zrEcTh8j11X2!{nXGSc*<$?}mXKYLm962}SFn6x!uHL#dIW~p>^Rg|GR5n#f?3}ki> zcZVtvzbf)5epM#O-vU&B^>6{WeEMp95&VBZU%d^iJ@;V6&W9EILvSZy1>c8~X{oC- zr9VVSKI6#FF5SI^E4Svmn$`lid+lSZz_CA+*3&j3=h1zE$Psp%6a0D&?i;B(u9A2` zzy8z+T)l-jXm9->{48b5UN&6mBSoKtFb9!y&ywura2RAJFaW=*VmJ57OPF0{LHsL# zd;;^+o(0zbWYp^%Y`G!^Xsa)XpUWMp0({B7&fai}inG|x1pLm^LlSPyrO25MZ&FnF z(w)h)4+g25u+y$7%5PG}ccrK|qyRFu*uU0}#k*1_FCT#evVQrWcA(9QzET?RJ@HByTbJ7btn=}9;(=u$?mxMTQLT=*WD@ah1a zSlxUdT&IW*r3$i+YXzXV3F>}p=^k*s1Aec}diTM9U--Wp{)0dL!2jlD^j+{D!svUz z!OWQM2;uv|PY{-lB#J@$Et3*UX}2O6!HMPHqmKy&f~eazWsf;*8gQ~qm~ zJUf4Os^ik*pem$7WD%GFq5``4J&ApNL*-8wF66@3gAbD&qhFsE3+_M1q2fjRPqhXP zxj=P*Ob$VYhgKe3p|wfQg>P5`t`nRVZmj?}0<-6f;ee>Bcio#HfDb91s`-%Q8r3q(SPI~*P(y7V}tiWri3G=m!Ro?CWm zWJnTS@4jueX47Dun@kQu+SkBBXz-M+&n%(^4iG`!<*G&!oe~w95|;_I%#8#0-pNaS zL!}&4+t($vx2_N5JRB%{r0EFMh%x>@XmPAA!7V4j{Y5whLC>%pU4!b$4(;~G+{z_? zp^d^gjD0*T{0V1moM=A%T%?WZqJmIHg+qHf=am}(W4huFtA(Wau_ zJIZ_|^M;|r^-`)8Y=wqPnY2WVRUcI>-y?HFB1D-%8K5rO1hDJ*z$I)t{5}G}odEra zsXXS{EXq$hUd--$87iA0jUJbd#j(q@ynJG^eM_I|ai;s|P15*2_Y;j{yOwU`@NWmC zeZ2({m8VO`vV+*Bz}wa`{)ClO3zod#cp& zftZMNkIl1SV;wG_4bBZh2@c9RFJNsR?LXWaD99?Oc{EO^YI+mo_xgEPtm?q*VKv;t z5!}8hxPC-X+BCNy3GR7s4QIM^Hse@}X-2Trt4wQAH${t{yGeRw=1J%h0jw{l%XjKw0*bE zRV0{q?GwziIkXv!qv1U@Sp6EbJwp7%An!ZWDk89GGr_rVHe=TXj3t|+5ZPiFY!NZ2 zf7s+nG&sF69PysEm5x1Oi~9$9Qbv9s=5Iu(9`2(%N#j+7o;QTfS^oXZ@hyzjM`nwjb&@c0EtRny;fRCF^poT%$ zw}R*22$JpmNzh~+iB95V0{u;UuYZ{4zMw;GGc34{?bXN}YKw%)e+yE5$&q?SNWLPp zwh3;ja5;z54rJ@sS}H0*RDi2Yo;vriiR!^r##Jh}qPo0bOFKfeFG9NCj1f{c32UQ) zLmuE3G%BwQT&&F^)|9lwZ*S?lE%ysNPJ@*p@=4Nshh3FqU|M48rZe#jMKp4 z5TTSLuY+^s){&xos-pLX@bI9{Y7_i?_Su>$g%g2m?Ai1P`M)CTaN9pjB~J5 ztUZ(Ln$2T64&*q>xy6<0&n=bTZ>zf#jLtfYE^$H$k28t;os<9eB&_o@V;t;>Ft@^7 zDZB3#C`|{dmB8x&8pkB61%7Z<{7``hsE(z=!>s@%+RRya9vlf5sVk7t@aiU5J5=|T zyMdOGRFT4#wE#V2Du#cX3&D(1$ayXV4+4nxg-9UAT@j~!UdDH38Myct*9OlhBj3K)!=`-In>EjD>c`-)`4%1^p3)gT zmS#I_-S8|{w^dwjN>3RJ(Dd5K@1@pVk=0?j=dFgN96|O?dfpNGm8LY0bi*3sn3qP3 z4CEex^_s!U!`UW&$yVBD_F{8P#D*OPS{T&+GO&-VI54F!yyQC*ryqhz>p2kOEUIOJO@ODyo=rRtT1vlx zmxuTsh-pU)u%N)&Ke2HR_;aU{0BsiXKg5}05dOR4TZ*t$+m^0)JeyvN(kgQvEym&s zJV1#)6Xfdsq##!>PTT!rcJVpg697%lAcXG$_G{U_3y}bvJ;qrh{6m?u>Bk6Q09t@@ zC9>im8#X|uL%{j)to_at89naiTj%7|TBFnh@SI}-&r_M_t?Z?o%GjMjvESCqB2YcU zmFFG2Ydjk3B74Qrurc8^z;y}hJq*W*qVpbxb+@59*P|q-N~m_0QK^=y6PAkAXF&0g z$8ikp$=4L=j!M;^yCdJbM{f;4XI(^l&$N>(LDk<5q?*I}o>z_$-cUA8gbHsHgvTn? zu~Nl~M5$ z2e>D3_csR1Rsef^w6HiJZ3|1E=B^-<)O!iiCV07Xkj7=;sDgGyZ4od(F&q#B&v1%# zRUL2sbR(GZEa6_zl5?E_f!3+sKCpb`6yGj{0Eie9Qmq9~%E6R{m8dTxV9ey^&KuqIQN7D1-|j;G#W&)wv8+F9K3oVeTs7_Y(XLfb!Hr zDj|@9--+f>d<*E=lM#w^Y{MH!*cyUO|0~_Q3Mlq@hytvuXaaB|SGWbwSHj>{>xNR^ zz~wwWZ<81j{R)a1B;e62tlR_t(~zC(fL2rrP3CLxcQ-|&xIh_p1ePdd4D|pxn*7Pe zuyT4WJ+}$H3w(O;sE%fhjA34rW3nlM4J4$(RRx0R7ojjLYFsD8iznqRP(Ujs`Uqaf z5x)2=`IFqoNzP&bye2~P7F>95jl9DtW?POEMz(pWLrl-JUHnXNc!qc zpEbiv!Q_2Ez6|o_1&IKgl@4@R`u$+jfeKv`Te^V0jt$eEm}(27W1yLeDZVd=YgP^k z@q?o+xZwQYw-y@3N{e2GCNrg2*l2nO8&phi@L!DvqE{-MixC-%^PJoR&D~d#j~lpr zMt}3J|1a;rb0Je;@qf?- z2MEuqQoOt##)?1k^z!04$xGZyW8+IEFx${mp5$kh0!@X8%pg6iE4BBUT!SqPysN=H+oJ|EUx zN1IFNyGO>q!*~74_Bdl82P#q_`~`#)_4(%OygA#1IX9vqSULvF0~y9+Cd*)Qv6)VA zS6UH@=DWMhr2(h34MlDRxv`B(NBKU}(L_kF%-KP761>VYBRg97CE>drN*A9uF*Ctb z`mH|Sb+>~&eAx-2KA`XR3B(t?7Wq@Y(dV<_vckzhw9k9&n~ML_4&CVsZC9I6^`j9a zQ5LCdGOYLFz=L)5V}T^`Z(!M4R`T}_NhY>8tjE@E#@5twX6o1|DqiXo19R;B~6ueuw_s5Ig}s72xByl1ni}D~4R|RygtlO6R4us`pqT z&z4w&@vmE#&2zFq_}PRN^dcS5i<{xj zCz`Dq4fe*-bI@w!IWKrVNzo4Yo@NZgsA$s2oY7ZODLWj-S8RcTdxz63vVRev@1{~g z81q(jLGJ5zoU<1H+v$1=T4M=g)xJymUxTr)AioA%t{_keWeJJkL2yUr_ z9xF}dtYK-7;S2hpMlM4og<4-fcB&rQ#2WB%sp?@+oyw9=H?yA5zI>A_AtMay3F6|> zlGw$g-aYgA7|x&Xv6)Blb=Ah*rlV6|9L_)jNv&>S?P~_|HVxdmSeP3d={>eY>OCjF zn_h##^44MNoO0xMX8x+Lo4{;O5_gk?!z7te(|ShJ^K{^LdaYM_?Z$wC;(G)4!g*M~ zRJw1&i%AYi6yX}3lqkf*n6Wzua$H^GmwOanAcRKovM^V944UQuH0%@ld>qzvl+!&% z=-a$k_}NT34;uD&%=ikWBj#ER=ANSAhC&VnX(ZYrbvTuHgK_NdCFCtG5bG^OxfP7Q z9~{hqR)>E=#Y6sQ!L!h7Zjm(OyO5L)r%Gf|3vy5Jse!%ssPbGxLxCYox(<^IH_-I? zC}`k~l=az^3-8yn$et|f?hu$f)@=$QL%tqc5jxIR#X$#x*pxBLIn%nIGpQr*Nzl6v~ zAhH_XJr%mGUC?c@>AST-(DtCG*$BZaU8@v=gCW@6bTk60I2im2UO=a30l^O;_#Hed z{{NR;0hI4b!NT2Q2=0R5Hn=+h?%r>L!GgY92G90^y91!yTb(Bh*)73&?B$OM6zS|kzCLhW~ z-(x;)&w@-qaX33Ulu`ol1@AmF4=xm%o@gF`gAAs_tvey5WIgl~s`u#;$gdiokP3D~ z7Qk5JD*KS+bH>~WDz3DpceBXfIJ*dOzx>~0Rw|4YeAjbOvOcDxOYlCkedg0uB5=L% zG6LZ5KUL9(c@&er3 z31uA$pTgI4)E-J@rHc#|W-aO$QP3nWytoTS6XX z{A+jFTu)H~^kf&n#e)k2cMKf4+rRD*bc-v_Q{jm5g??LnXr}x{ZHW(Md+u@QlFFbW zdzgAwF}Uy!U%o-cNUhIZ$JUd2&U%mk1fAt2a0=*Z!ECo zaht-a-h;{bK|Nr+RV0~<{Hitp$u&8@*y+OP4J=TJHbgBHXJf~wIyF<=(oa=~sk4>k1 z;+*_rb8ZZ5cpl~SkTHP2FJ-s>?ka{8TKsEvEr@Qrs&-o<$|64(4Al5D@L^Sz<8?~M zuu>S4{RkOBm;p{3lMScncBO!J)F{cQLRCR+y@>V@icO^Ub#xc#sGm38dfI?ibvTjQ z9<2=DHdG9jy3Rk@DVw}in0!gPv45Hj$En4+HBz=)P<*k;YX^=vGfCLzRKF##lOn)a;U0@3f(cFsURV_$+k)4e$lOSu8LLv5dD)AqG$7A#_T(H)15UZI>4`)^1IWx`5|Cq2eTBF_)iYKiLk z!E!v>G9I)v(3YwnEft?zBBy}Az*L4Z$G>2z*D|B*n5vr`xM-pJ6dIO4BbLe~XC-=FeGX^#mTkO7dDO1ATx=|fU= zHM_$P&GO+qZ8mI^A}0y0gZ#XH?!#uoS$Fl%)YqwuOPqOWQo~&?6=U_=ml?7ps*|7H zqh`bDDzzPwpg=qT1ee}gQr{y|hlwPq zIf{X+3G)2Hf!kj4(sS~gRC)1hP4{|@bkECIsov2+-Z9npp?84M16uZ(y2xhkBEMh_ z9MyeaF}kA)IbSvUv2^?&5p7YZwlUld$5ZwwkqFiG6RMmt`so?6t3MfKrA#v_ZxmUH z(YdP1^GABGTJ!G|)@6FVPL1e19)W}U=Ut%(Iji8sk{=S=FSx3I9A?9;G6{N{Kb4M# zSr`jUFrGp04O&h|BVer3!f5UcQ;U_MaygaSP*%{!gwUv9(AGn* z8|(*B-@)%vh#Ckfud70y4z&h{9e5To28W?Uzd_cKT3>{=d&xl_d9y=Q%&>HifPK=m zwv60^n;8IG3rUDTx*m{jHjI+GT{GoQ8p#Mu4EzVr znL_mWqzjGM7qM2%^FdRhh@qS&`K^owi-kIu1+udd@qsSDWe`qfyxws4x(Nnzvo~}G z)AL^#$CH8Y&`91rNd2S*hJ>;~`;JL;Nd|^lM!~HtZI)nZqS4GyraCq(!74`+oxWuj ziA@wApAzmJx)vPPxz8R(c`3}ca8M-nFw?Vw9w-~eAZy6mMeyDQy>)W8|1TVn7x~`| zN)2mP+GQx2SFo@m?{O%-3{xb3DC8)}=3B~)uL@>_EJ$K2Twj2Z6sFG`A+@NR^U})% z?tJ?ug6v;WOjg&>#Ygi}w}C5zH8&dTcBaNUCU$iX-8`9QQ>Gt1{T|z2i?JeZv~MpV z^qj%ndPIP_-mr7xPu;(vW{017q7`IK((JHsR^9)j>CNMsy0-V>TH4ZH6xvdyNQ5dv zM5ZbVi3y~=)>5UyRjPnQP#IDs0!bJ84B=h$e&0XNCpmjKd!Id>wbx$jc_vOw6}Cl@A^%4s^bS-&F*xir-g zATLxd>lmvtz*tSW3}_EeF;^<7pUEaZvln*YohDyBM8VW4e|$m(5H4Xr zttQMT4;&-+{(-g6?V}`;=S$R!?jj`h!t-RdsA0-eOyBD|+rqlPs@-WX>%-?3;Y)&3 z-mcUN>UN7{7wnx)tRAixNGS!d4P5_%rgBXk3_h~c{EE$GF0Ndu(gUJxC-Di>Q7otw(r=2FLbBx4A(D0 z3JRo%f|%ym)nqpP{*qKI_gfZO3hr*BTjBKdB(39A=cK&Ir_Qc6CV50+FUavVex9nw z&TIEib$=ybMhgW#SS-P2tEv8DDrsuPVZlu z)o!iGC)HUuJ5;vPyqgm(n`ieYsV%0YK61zOWY8zL2mMPGme&%7%=sw?lOjz~%??cs zFFAI!w|tN<;(NYS7G4jI7$MwvclaRxgA7Ur?DA)NKT_s88hla0C3KZenGu!pmZ;&r znnw`PA_GSw+@j2ixwkhf%dPpv1-!xn{;eWnkBeaClevnL`b^g_2@UI>E_)@o?Uk~X zG`m$guCE^3%#zSBXe5VbNMnh-upD#h22V}rGqlI}2gHGcyc?A?7tgW1H3-#SxcL!y zEJX1#{S)`+smq?(fV)Dq=DiwqK2cW1-#&NmkmGaLE!=k}4c9=bh#2^IuztH(_MM8) z&fymyQ2vtcnfk^alxb7KWkq>VgH?i`e;Oj163G-CU+D>zqQERn_+_>B zOrYjNQzFP74%qCrL`<#V3lN}lkE{6l@8>EWq5w>nxzmU1>n##eR`yT&&#I~&`X0AL z^jr*;rZ+HmHZ}O}L5>mk-Vsr#^BF}exxtw4uPsRdKIHS0T;EC{r=h)1O8lHeeT$@7 z;oh>wmbYLsE@DewV)G+-#wfpDalaDoOxj*oR9<7{4;*V?O)6 zqU-k_DhGls+EhE>`hvWNd6`A3eTMEnT_Ai{VE3R{IBH>K0SEm*K zO)`&{=B_9vD|qG8Qj~8{8lnjc$}5TW^#$7AzfukjK2?8hc%HmPo^=Vr=g13ZbrYo7 zv_4tl!C5c-J+sBH;K#{mYtLEPn5X^FUi2fYcx9tMRH_Rav3r7)^7X72vF{HS#9JL^ z-cm#8pA#g^Eo)3>j9UQnRwdLs7@J?zC!1Kj$2ogx){9lLvT+Da=qiKEA6H?EpQgA~ z(kw}DzK~A5VhLYWkL{LfiPE#~$ZRpBa6}A5k5S-L$l~2b68F?aI1=LKlJ8EjplK+CM@9j0>f&Eiw9j&uG`k&+RtwaS^Z1Z=gdwv+$ex0 z6uQbD4J~kTeTOUtv3;*0g#LrJcJ}^2q~;?~ja>HvkZQO9MC}EBw`@oY&faCv$L@P0 zvdc-P-9FKRPXlHd7iUV4IGPL}S-z|_zEGmo!cc-*$P4Mos^61JO_(32!$6kF491iV z%d^CJwcggV$J#5xO;n^mr%+|vsA*NtlSj&pRgCRw;Uc*wOaBl84Uj6tDK&>^!`z8hQnDkJG0I3_PO}rr!D}ONOBp z0tpR}5IPr(*=^$mU#1}(2;)Ln9E7b8VCeC-qfEfbBNV6!|4Nfl>WY0R+iH=^%mQTF zn@POxO!aD?!E&(;3L-(?EEpD!G9>CKO!EM%lPdc5@;C4Sd`0dFfD#puVqk*A3y0Wz zXg3j53DxC|DuU5gx6L1+o0AiHOTcf_JFU3$ZW8QN$C9S{-4!{*4Y&o8RlJZ*?v7A` zw@wJmo!Dm2HJCf$@)_Ah%oPF*wqF{}^&)tD)%12yT-h=!RyL*|VctrIs0u+sbUzNl zN>{$^7fwbkCcqQOsi*}_O5?;kgHg6?Fs_#s08iN`t9vqinB3d9qMR(k=CL|;*di4W zT-BAOrmXF=zpFpzrr8)TDODD5<(d0g#mKhAf5LcYuYCLZFw7Eo6#~>s4AX!<>xF`8 zfOaAj7@!@i{x_GXCipFcT0);m*VhXtW9hRJXtw=E+mkTm4iRNWC8&?Kq64G%pt*je zh7JA=H=dAtH

    1lLxkXkFj6?!KCD!pY>8Y!(s!AOj989Rx`Y&FElb6=CxO&CY~(X zreF`(n>9uIM|1`XvMcB=&2Q|IGz(KbYxTHDP&E4G!!U9+gcy&&P#l+MM<8R<2)V-Hl+yl@sK?3p4%al{lEnrgasl zY~?wNGY}cm1=oXtNC_P@lrx3KDl7+bS3vG%m=n@uZ7sDHQW&hCFHD)2Oz3#~)}%3t z1P>XLc4$7s)qo`mW6+OuL{MWAA@`%aY7JB&rV8eGEIi1$wCzAdYLT&u460Q!)Sp}m z2tu%)(7%GpuCEdukm{hkFazeO6})RJq+zVTV<^P`2=U<%kAv3oj0W1uGdLy;4Tcv? z@)(%pInYO`Fv&?U$yMutCKO$50QQr!Iw@8ymiMTy1If2rsnz@`9mwVVwf zF^giZy(=c)nihe%gHGI=cP>V1R{1jnTeMv9u$2~h5@FD`mM0#tqrGR z21l`|P1gQ0)p=B2lo9doR>S5bWZvdCo${(LUj`x-j_Z?5a+ndeD)Uzt{g$~eL*e)} zcC{C!dS|ZU1ZvaHzNc5p_2M#nl|!qAK>yW3|BbMreO+M9J_zw;(5xpQK{#~q5F|)gPXOP5N9lCah1Y;i zRW=J>1rHc?%u@Zi6+DcKFvyk#*(xF1kHOCu_G*OZM#M|_wo_@y3AZs@a<52nyQzK; z=Zv)<3kI4u6cq${Iv~$!$fJg$5(fUIG9Cyw9BLf1Ad4#%xeHw1yjXL;{#-^z#iBLN z;GT4L80Lo=d_0F@{wF>xK69I^u&T3hIG5np<+ozB97~XUsyK6h9ru9As_tKTjv{Gm z8<;su(j-u{flkFz`}trZW;hYZD0ikNe&UKPv%uVP#TFM}avxyXIoPY#VLdf&q@a^^ zK4_{3n(`i?;<;i09VR!JfBOWh>%vLO)@I6q%Eb53iOwS0mJIGKM@+dH2EA6(hWFvf z=ti6rDI&JV@$L>$k4epJ42M0&oI${eABa(Ai|MO7=6sQxu5_0WjgEIVMOG|xRz%0Ue<4$M~nfWJZitn;({>lW*NIFBhfE|>YPEb&!Bnu zziEdak6edx&eo-cSm#WTovqK z`K{ov{@o+u3(TJLirN#eQ*%qaW>;B#222*x;EWV;=`KigI<|yFvzJXUTAN_Bln{G^ z__re|dsN8B%z=k42_EVUqBM_pO_k_G7~O4x<4y$}9j*@krbBg~vYa?D(lPhQN7+6c z_TAX!?sFr3ON_RYu-S1NL&&`g^4qobdk8Vst&(3>u1OZn%MB+QM?=VcdGbtMLt!L$ zzbe{}+1|*YS1hsHNU5zImW=#u#*cB7%1y6vS@N6BT-Tpim+dEs0_6Y|zf&sAmdb)JPexPr?8Fnr;Qxr!$!=_ORh6IAJ}b{A9h2l?{d zC8;w?Y($kT0MCnHhYUBm$xZ#z4VkVU1-OiI%$*_1-h?Qpgt0MI>MoKj0Ud@w1=u zS-!k$1-yF!yi7-4nFarrE6-chaSG_gs(5S>#f(({{ZEs-v#_~y*n&+MjuVSLC!D($VR(Xg0TQ-J7_C!2l?a&l5Gb*)ztkEiXQ8ZF zD4+=Y4A+F4s$>56`SMN2&;ddi=OXmn@&ri^@+!M*Wn&PCd}xq` z)^{m)po~8ry~Zs>S;Th~D>;vOwgG(KaGLvYo%L{o-7qDgk(8D+8aUOPBfn!NFLjsS z9Ikh5it#a_L9mKz_RodkFhg#(0rbIJ>vD5agid^UO7z~8>_1Rq_xu-0+J6^XnR8t- z5^XFs-XMC#St4!l6EN%;HoD7HWMn8M^Pi4@9LNzf{6L^$0J^*}B?#KZve@wD$u~)X z6RWK5D(K|eSii`5M`LMWBnWm_PvFlQR&LYaHs|p^fLowdb&o* zT9_am4}^Za24ed~5ZfX5%D%t%p5L}Y?U^hP;h{+)VYtEG@-UY5pcUcq%bF;gbedD9 z{ueA{y{QX0ea3ZZbcr~Z*1)?f#Ixq;(IC%4#eH@Xx?aF8?Hkx7f{@Avd2_vuwbeUpl;+IpWzl7p$QRr%_la}_TYoK5~!Iz@uzzyj?ajE-@$>r zL@3eESULr}0K6M)Tl@F8kaCY2sp}eh`+*M>P|o57*cHKmXoa^A|Ms|w3mcodqqAPs zAc&X4;P@IgMLZZ@RnUujjiu{tun2>31vc*^aM(d(4%(=R(lN8J$n3mzm1T|^5aI>4X!hrwIMtqWjVRW8;js{T1|l=FIb&GJ-KAiQVxTMf7HtFntkrc-DoVp&%aX^qrK;{K zMGk?)w2qXlI5Szm{N-aPUp%Vy0sQ-faT4TRfJYOcT$OmymRYFxTG^o{E&gblI%8_z zPOmsRU#9+KLi zXTJ^{w_JKsz;|@zTUREg25Qb$pHl%l{Vs5w)c#;OkU`t{*2SNxyhsWM+_%Uj_M?mkeS9gu3OT58SK&icm#cye3Q%Thv}Me>`= zA@Rcam1{2*J62C5fjfKJpOG=c@Rq%Ed@CH}`30VqxKy?7wZ2Z-?F_e}OI2>*{C*m| zP|Yo)2$m$9+%s$7Ab$qM>RL(NTb1&wDQrLNOWtPR*S{m!tN!3`l6z=vd&ueu1wMf+4Ny)X zIN`7Jq65+N`g{KY!Q+4m>kUEhqA_s0&XfH$@MOa~*#lXr41y6T_d1m81kraP`a6im zLyp7gmww~<0qr)tU=Tdf23}GDX|86YNB7$XwNFAGHQcWw005u5060*AZ*;c~n#u?I zr4phaKy*G(tCAtw3!>M-l^|LM(Zf)`Z4li7xz`C^3I8K@O*k90?wETKTCnM_5QQVS z>OvKxpy@?$iv~tmV1ZTC{uM&QLuLpw21DBhtP^Gk!O`|EoOAMr7ZO6Ro&O)Xstxq%Q>gTLcyQidAqE{p zebr-~m;x6WE@&4NjF0ucZe7Z;kY`!YQ$V?~36vYSS337GEU`a;myJ-dGHvFwgEbRE zqR_xEv!NV~7+MPx9}FuubY5b0%(2=xDLl8FFs=fBVzsP~++O4cSf&%ZyvM)yj@?|I zxS@RZD{plj3;>_MJ7K-ssK7Cc0%V2t8bdcxfeyABy8Su)1=4dCw0ayg=WSqy&4;n{ zEMc-ILtYWYHFt;!@?+1{(Mf|{+D%KB(o(FKXa7^3Au;=FXo;5oH|tFr_I4`ubJ^I3 z5d%Nsf%4gj>vh+4#PQ{#RH_=^5WuLFvlVc{kI*R#T5+1^UwjwM~c0 zr$ck6L#^AOxpgo|DTACbGvd8;9H3U2J^XHK1Md~0YL;!W(j z$oCfIBYm`|_#k$3qHmM>R^h>!+Cb~%VGnI2A4rGcYNG+HhXxGBW-mL&|NdPXslpUu zZR+?%DW8-q=1psfKw*9@Ic5b1mZ^Zlqt`JoYJeWIQIcB3IgUJV2JW*Wh{g}aM*M0DCQm*Kv|7`KO@^i?x(vQUGSE1mq<>;51?NsjoxE7hcVK>2Y?zD=KgW;3hy3HkaR} zQQPit0O5%QIgbH-74XbO!fgoLo(KFVD2o7$VQ9F$0I}tZ6}5nZv`&r{3$efjwhoFE z4){sO2J{}=YJ`P+4Jm5+3nZwB?VjCuf^N&+r1d*EdPFePBi<3>SRsHY`_?A51A10VrlGtI!QlODGW zR$NnYIoxwh9DXVS?u3s4y|uVXlr{ z4jjKVWtA11X&yT8LAC5GxxE2K5e!f@kbS{uEQUPLdH63`%4|_RmT<-*ey2x#-`n97 zpW=oaj}_S$<%Jg&H>TzHr@4fwcKuXu()g=DvP_DP0)s0RG-S>R75y>hKe$?wRYV6{ zaIYn0)88~%!(jw4eqRN5jyXqu0fzBbb5@smgSmM<+T3ug?ZI}Uo5{Z4yz)2QimTxX zpTC&=PV(qC@#163dk^@VM2Wau%~_Oa0qeKi^?_oGX9;Lu!7dey4`g8J7rAaw4~FsU zHiTOIy4@hy1A+s|-{WXL> z)O8{pA+dLfSZELnl@$T0BiP|V*P^79Js-W)HpoVwo=DPx7yXkw~04?(${ z<(0l)a~IB8^l;8noa74{jR&ASNVZ1%oH+rzk*DJ?ZUH{Q;-_{7bMLX%@#nuN%O#=U z`IO<#!-Z1`jpIk%VsaK6_mjArhMm`>@qKMv+N_QYn#id#P%B2x>Q*uzT>Kkr{y>SHIR-Xud?ONQLL7N0?5?fT?h1~HUaO+@mK; z{~!ZiVc#CIaBp!#ZA!!bkorv_;Ie)e7w=p{mPr&>!y6oHqtFpuQUUvP3fQz>T?Fti zF0P~=D7?@%F)dDmu`N!1oqh@eB}z5rvrO5!T#3hgCX!qgjR4ua)m z&-&ghi24p-P?jluKyxgYjzz>DF!xEnni9yl&y4Ge|$ zi7+>1wA~KpHb=(7K-$NYz9M>huz-Q&+t#kIm47Kix}3*r733Z)S;{95(8;|N{m0bhn=O0W?li|TtzkqjH{94HznjYaC`$pz)gRc^yG(Lz7ouo0U0akl-Hq>u zQ{pHgE=}j+;zi!dTNf4ifb>6Xh)WtxSLEx!0rM=0*|Y9|X#@oA6G@2ORL5F9S{38j zDjZoUOk3Q#JbQ3nJv=2lG5%x&{=OM~qq+WbOYJdKrxU9GIwrdc%kocrCr|T@z33QG z_6JL}hbXNlc2I}|dREs5cvcLthdS7BEhBM<4dvsZ#JyJ0PI(ibNVVUwou$>|ebw57 zte!S(g?o37mmFXW%efd9U~nqj)Tm-wytEucwNC&`bAj)qyMC~`sXI@YktL5r@$Lsj zGp#uTu+Mh2C-&%g_+=*#Vn+u5Uit)#!qbeVvS!NB*B5(ai3sf5&7mVbyVEBPEw+S$ zrOuzQbN?W~9==Tm+wh|Q+lKo?pJzbYCP=H>%e?in`}9!-TO!YtDDvIqx$cUx$MTGa zQ{978ecn@@jZ*_js)Kk`P4-I(n{L~mMZ#FK@sJQ zowZ=jWEJge$t;+|ERw`mIVCP{gF=3=U)1xp<1#lBK5 zXUp9ASIVi|n*beQ-AMu1!?y7XaRAdh12kneoc`N>cm2ky?oCfv z;!D*NODG$k30>H}riio704l#k1YS0u+g3+XZcL^fv=@Gj&&~-O`_IS?Yk6VJ-_x7g zIQmuNgdPqHrzS5)_K%PyIK{0du6x2++(`eta%tcCxsu}==)BD3GXv9#^~Qx7pP9MP zj7vUa?F>7JrYzNp*73*eovmZ7_#miNA&xH{BQAjWV354*@G)PbqjsLv1KjlosU46S? zpZcot3`lAh00ADjM&;K-8c6dv^;Isx)`}&QrJP}w>DyOstS(}g4PKUK9!<`F(Kzv0 z;P{!7l=mwWce!G-H>0El*lVZ3fo_U5=NRl4^=tvbR2@iXzF z!_XSFwf!Ha(IrCu+JtHMLXt0M;4-|r2}}rl8hwk}KxKGs`ojFB3RVx3CEd=-*MW04 z*!z(-nXjukPx~W@o>C2)CE8R|X$Vd~`KyjK`5*pWPY@x(c~bY-IFGYcAXZ?8s$x)L z%}Ty&O7`TlBldkK@R?O~x1l%h*J$+Bnm4epq;f}&OUow}@3kTaPVQ@qIBPXjdd^$2 z>g*kDHY59ZPzJ}f16ch(Xj4V{AV)PDC@>iCQyn5%nBL=GfUs~rzy%( zxkpX87Zq2gXVb{C*s1pIQ@!torQf18m^RwPuG&h)OJ49vl_lm(ewSPmYc)>_s)_L& zZ173$U20d}Oru8)nrlA@bGR>xNjnn=+Nc8996OoQz5oSRiRnTs8nic(v8hKd?K^5v zeU|4{!Imh=%z0H<*?dI>)&se&R^(gDSus;WYGdrX1PQ~6c@HS??iVQhCMk6Ru=VVK zt!D;oWNpu@j6b|c_REK5>0g8DGxQh9f!{2%SN|Ltgu^SGsAAq1u8OojTe-sf-}gK-%21V6rb zxgFK>Bjac@F58oWNq=U_J#%bU2iQWe)q*t?CpHNit?VCKh2n{P(P`PVYO3> z>#s#&@|Vv?qABTt+UM01S6>XfFoM@&F3jhhU}QaKTz|^@Os%5X!%95;q}hvZN21i5 z4js)c=Ni@xI12vHdLK>kLsK`TYyW9#KZFm%3GO>SX$wf%Su&e8t=lVonjR`mdLi1Z zu&Rj;2in2E4{OY8B$F??PI+tpQ`z98VdloRwgbJ!z}LL6*`eV@=;jC+<7Ymy#&0ub?9mkCvw zX4ifg)%($lM_;1E9mZtKJ`?5p`RiS?EhzTt#BBz_pSsasgTa(}Qa3I^agO#Uk7P6f8~Vp!h@t23U}pIdzncapoQvL08-H6y**HZA^} z7n8G}QO*taV->6-#8xq#amQfXVDl!xV-FZ=T_GwXc9QlescJ(;T?9|LGN4fa>6)C%LGzwS^oY0>Q8H{cmZA_6HE0vBB*(YJ!2~+jwwWtWp02h zQxCGt1CV7_VN@+Vi^x`oG1t`CE*ljP2omFtTlaK1BD;%UUgt{SvvfV%N zqqQSxNWvrCiU$~fRJK;Ke{MA-*NmcxeUbc32kQPd%~ocy{+*RQ>JJvvdaU0(fTyqR zWrGbFJB(QS1{gHgsnk?J#p=imabo0eGCJC6R>=dB6=qqYgLe$tJIddiWZrm21sQwc zx(C-dT%BexLWoz}*QV2CaWdfuT2TmHFQ60G!(Z`bF7lKX~o1m^KFu z3$NGe3e7UOzW#~3{AYg$zbP;>wsLqzKv<;|o(E;34=+tD&!3M~{S{BValJhf|^XOVU@bk#7gV@9^YnT;;=7M0Z>j zT=NJFVIv0AZRb^dz&cU_x=1ANb~$yA1+g=SR~SyUojk5G2Eoufyv(MK?Vc%t6&sdk z@zYk?p%=+Du=<8P=gg5GwUS3qyPew6dLk&3kDjC@dxM?$*uJ@+x7+=O&iPw6BY_4C zC-+OC+p(_?(WFrprZPD8_V+z6OL4~eu$$2*f0@} zK88Sr{Niu@?D_}lIfDu32zZb-!a&;i6QqrQ&i!m<0}|??DUlO+goJ^s8<@)we@jDk zKN>IZU`;cu`Vin>HL`$=H5^Ci;=B7Nn&(c;ql6WhG8}cIr#95oNm2eux8tahcWPq8 zatkzA=EIi&In&oRoB^FFr2y+$T3fUo-bdNwjd`?JkUY8Db z1GEZ6GX);G&FD2Ln<%tk$)4k7bBUX3lkjoIeR0@l^iw6PH1;4Voqtu<@cpBt|I%Hx zPpW0MAcw8XVr9z6nCsO+?Wdt@lD)_N{ku+y*Kb@98+Ivrbw9nE0msYhnye2sq5aq8 zW#-&X$RfLuB}q~~MVgTRf+_v~!{C5YLq~kTz!{{Vq~8HbTbU|ZeQIq4(8OE){Rq=I zq`{_K-Zmm|126|blU_ec3Uk~2qUOJ$ZBOoR3+4DKu4Hg;ls9bmIqPV@BZ55OCBIS8 zv)e&>)@!6gOMboTp0YEX`gyqCF+HSzLu0t%tH!Z3ve;an%N5l65@ItLZHvD<%A!bv z)+I?}C#U+a6Vc83ZTj=cHP7>AI?NOW1g?$0hL1)`{HkLkXD0vi2j^+p+FOC@FCzNC zbjhn8Y8PF!8nZz4BiL*i6=P*+{Rn^Uf$;;;&z(1>;lo})Heq3iyw?3dr%?BWm@ z?S$4CFr~@VBdvKSjLehVZ&E+^<)|^FL_5*`f^E--!>~csXK_PU6=WH9#S_slPK42a zQHS0g;@{`cTnOsjt*`#mP$oK1vmc)uNB531x(w0cL??(-0!7=B^8O|;r>7FU$G`K| zzU@8s$D<$tdhU*A!@KD*0j8dlE7uA1OaaKD4eWu}X?irE>m+6Qt0x8p8hC0AUzx%NT6eUBuQ)v@`8Jvruy2ePo&xmYhvZx}vn zKh{sGO=f{H0;fFZ2RJC_-AzwT`>0J~MB*bN`+JBzX*@iV@5-|YnUy^Q+P2jF89zrP zx(w+XpIMBQnVb{OQdXz`5m~n(`B>x;p06D>#CzPHJWwSsJQ(bW**kab!EuKa@@q4P zGvTeQ%N;L!9@$iLU*^9%T)}r~P9!Bs7V6CjQeJpt2Qp>r|c<_7rMiDpo;=d9lAn9}fHlb^5Le9Eh6D;I`@ zb~Rx$bcqrDM_bBeM?6Nq^N8MLQ=gp`9PwiH;mWC1Voxpa+P3FUPhkCOq?E)>ScaqLMHhpd5(YJVDhACXd0Q%Xr7Re$Pc{bNLWN03#pNC=Ew#h2vd z%o4r5C%&7J?e>n^Z#BAar012O$Sdrp2-&%i!9=VLm{<$$pXRxVIy9)B&BlnDi3nnm zTKgJ>2I99TWYHzmz#P^u{>+}NBi$Bm+V2OEue{H=dQX%vgK`!f?F?w|v1D?8f;@XI zipK2Of|^Jk%v=pE)18e=in7a%2@m|HS@vkEy>+UWnsm;#netX@T`F^Esz9}0q)C?O zji(J6D>d9U+aQ?^dnJ5%o7KeT@kd|6N2p6{m`z2_qk7bsYY1hZ=R_zQxR1)LQ!K^w zLY3+(d(Nej#e~7r=S~lv9w&q)-;w-o@f@H16rA0_@HGqU1lw+>$I=3(djwNHHg7)h zm^e)A&Us=Nz;h^}9w;#wvX}dr(aI31d5HdWjn+UEw}pwVcpgaJq|r5N>u$mpL+T*n z;5H_G@ng?a8Do31Q)KT!`MoMdrl?`R=NY>QX(PU5I>mn2Ku#J34Rx2|4#M?<`Imk| z+5$(0CEA_S;e_0%^xUy8ifJD%$M~MN9Q*Jj?Nh5~HJgw=6zJl1c}#p?qy99ax8BIi zMQ$id#+>*j+R>V2!To}iO=!c8z`nLPhf3<^D&F>m=LR~zR{BC2f^3}Dx{Zjpj))Yn zRewrPo~blkRR$s3h`rq3x#E=HFi}{mk4e=NKN5u*yfQ0pF=29{Ho!c+kBJoEx6=Nn{UP6eVi7z>emAJ;$7{@1oQF1;$|v6nf4E9&`h86y`+aSS zHP1<|Tn*y?yoy{uzlM##5ei(NnrIhatO3^d&jL(IUNmu6q?%!0b2_5;5wUOqIneQd zeon@iZ}=0J^9`kw?;_gE`Bd@TwYBeUhV-=)oJCyL);Q15fygk9 z*OR7AU}%S_*c8^)L+o`XN`ArLbzdx)=Q(9uAcRvs9iF}12&Z$)#&5=%BZU}_RRfw6 z>p3DE5qRkBbOQpH){ZZ$`_oRb^Ot`YTLnqlayrnMWeneR^PzMm=OaGmESfu z-#tVexcB=qij&07cvyk_cpeEmr4dkRH8JM#qb28u$`@bCJ+xcg#(ZB4-4ZxWAJBc< zEDidz#?b%!B*T6B03q5%6|gLI{j=3D_PdUOpT;>HS(aMCEr@SM=8H@Ak9~DzZKS3t z^VGWB7G5eF-R}G62<-tr=*rsCf=TH-?Tb8YL2S?K=-<3ZwFlfkpeXYk1HgzsR<1{- z{A($heBZRqPUD9s(cT6$T66BTCJjA_;i7)T%bRB&kWFlqA_J&oZLQu_dYDf2P)!I5 zeGmiPV>B3i#=RnQ{GC)i1@{ufOd2*1caeVO)+U7*q6-hl#4I@^y?#)OBOb3 z4qLv-NSy6rI2q5jcKyQGKKa#~BSR%x!9Mu&cH?*scsYKI81RiGPPJJFGtB(jX~mru z#Z9Ck&M)Jo@xJLxE5Cj=7~n2O&qTf{tw!#yQqs0|7u5t^=d%umihf+dP5RW0e}R;Q z#H1yT6kh6}yQ1IhEe7K}WHGd35_2acac|u3+#;pN^5{&LwQFmC+uiB(q(Gxiz#WE`%EK0xfNx zV~1J#7HKL?DiOK`nDXN8t*PDn)&QhyEhTC;T~L~1Y?utUZtaO>T#?Xi!Y6d{y*iSs zpU|6e?V{0bSRdR7zJ~3?@_d?CWU)tji*F&QG7N6;8PV!(*MW0CT%&FpRuEuGlu#VZV< zZcgtrH1HozzC0D*aS7G+llFzfATq>Xlj%Y`b&9*S^&d4={OXrz?LFoYkHs=0^u`hHIpQ}2yv2fc&^qrT*E{+pKofObsB!T=+SKOnjg)W>ORhJ(l zFU{z(toIyxYFa5U<3-M<3NVI$8+|e~X(+ZXxy4Qxh7$GFBwJ&y#h@g2s%3}Cl0G7U zfsTC#WSIv;B^Lq_`X^t_3wX z>7rb7OQ)Bl<`f8q4R6WiY< z4#@a7REf50C3FPbcBIB*+H%95p{LIUoVdlehi1h=?(Jr4o+7-18ews zF+qD+uNx>B->vVEGnm@L_1+6%^mAIQh6X22YiBR{Wjy6;I;38N2HygQ#4VgrvUg$y zr%Qz?NpQ9tO$`gW(?&Zse?7n$(}SH2uNh#{Ha8hkPgUsZTbwoDr(WzIPI4dGxh5@I z8nT0v&u8HmLqhW@uZbM}tEmD#ktKA-&wP)Rl-oa8)y9(hEbTaQI_YM8-H+;d6rq*qY9g)y| z6sq*}Rf!?cTTSa5n!P#^M^Bjjoq?vG@)IU8+>EFE*bMi`Bdx`Rw(eM#-M*sOG0h{D_| zz<96zU@B!EXbbc!COA2W0Y*ww!s^i7E0LHgInqD>daBsF`hz#3oFXkv3i1u~OS8YP zKvfzKw^g8jR!M^kYBhI=J^ABzH288?{`S>m4`i$5Q36{WD&G7`MteK!)N<=z2;FVc zkongneYf50d*0*kk_TKBH&%r%62)=ipZB8VnGXT(sBw%<7Plzaj}=#orh0Ryy62|` z>Zkhqrh3>@(jQ+9kqC+mq|Vb{W4wa8iPp~INK?Wj0Y7NMpdp)9TLw-^6cQ3xJwch-yVIbj1%Zez#2C!)Q_ZOH?oZm*+Y3>IflC>PXOe4Qu{PL3R+ z+1`;d{6%It{RP9_P{%(>e0ry?&TH~c$ba+?2AZ^MdsPQ?q##pAgpoL}1+>s0%v}fS zhv^@yHUivX|NFVfH^sD1#F#PwSk9y36U4MPDPHJV0)6ImuBWUeDp)W1WTxkllKoU( z@KllQ#oGq{i*cdd3gva$qCJAB3@BVuuVJzwy;RqeIY3kI^H2{HrA@rOqP`O=g;mCP zhb9>CTB1uU?788kbq=WlpN(>d~6Us<}wM%eM_tO?dsK(cLD%1!tk%g zvHGdr_a;|s!ayDC%zP~kR$M1>(Xwa*+TSIW~b=EpxvQlCizkNmQ^v{2F6 zmEtb`9Sr#$AMH2s0JH5riEwXX9%bi*N}a1mP2<1baZ`V{g|c-4{6lD#R$|5v5xsQ0 zkKqsSBYt4W9Pme6O7o=F{QEYP5By{O4up{W4#2+ifK4nO73XE|p(@ZP5__It9meZl zu&ip-Y`623rmVKD)Byc=j`1DN49-#PQZ$kS>_LPxRV%659K+mz9g^;qz{{6{vIWNlpZa=i_y-bYktC93x<*;%9BHBY)YexODT8;Y^6NFhk2ULJXSv_kUFQr;W9Wvz>0Ont4-y?G8 zYw+EmxRDZfkm@bsW!J|)=muoB?Tr))7wpBN!g4eg6HLV4W4MHpn_G+TU$>2X0FV< z4ifr=0b3ZJ_)a->XR_w|nf5)(Qnfr&%{Lb>QnWZOck#Dt(_Sj9rt2`dYxhXG-ba95 zh?EBk_WP!b6!-wtz7kLBcGc*Ph%TTC2%v|JdojxwvpHxF^)gYkX}o+6Uo71A3_w0U zBDV)C?uzBNX^I;LMYegvy9tL;J*o0C?#JmA>@el0lt*U%b&eS%`we*{61&|);I|OG zxU<<{J3sN1pDxX_POo>P*i@ot&H>5sOwsagrPsmP8dU!jG^u-KX&x z4}iL|3um37ujoE2V5w=!JEFzJaex(D%&J72#!m%m6?fWFLdHEuDi*V{tdr|oFz4S3 z>i^GGfscMm+hInL%tkbze!!9;{9T$Zp)&eML%Hlp3yXtp9p4fWDU|STg;U%Uj^KqV z>mZ65ahU}Kmj@8heW5g##r6-XH^P~LMTA%XF^rbqdW$u1+Ee*44xuZkrJL#yU39*j68;*a zYLDlR2~nc`C|N;Rk42bt5_@MZtgj2}q`AA8nXEN^Di$6B4bv+(^~RCTFu`{H$=o2+ zKF@T{+(!DTL9dC2VY0h`NpLViDij=;Tziw*9gcU_Z}B`L5Egu#pf9W@-Cvb05sb>} z<*r-fRZqwTysRAl)#W-KchY0haHab!xzpM0TyPRrsw*mxU(=BLF7;LFGph-`b`7S_ zYGq5;S*4fE`P(NqffIJZUGvzMFKZ;1ufx%p@x#b-<4LM(Gjn{366+5Znye;@uh3VYL9nDw04 zTS_drw6b`XeZ5ZxyYd*n&5_cTkL~w$(ls5noB?a$)hxPm$(vmsnm>s73lyiSy@3^J zMA6V}QT9P85{shtUq5u3n9+S_j*n620yWG-LuPgWqP8uOdI^&yi+|lZ>GGzF#50g(a*gn z-cK6awS~5EZ9Fv42A!+U&OSIm$rSacxQOZRyQX}Co;?=`M{Ij#<7-f zSOp?qvV;ZLJkLazyorWFi**#UheTf45Oq`S*r|w~Q}(h;%Jxl+qe}U|t0u3f)Pw8# z-C+6c)oyx@;`&kSZ3)jRJn`djDkhwp4a`r|n0wpgMcc4fPXBcISrJg$a?0t>;7k8) zO1if6&6o3Ix#L2n!fIZIP(Eu;+*Lb(f1Bw97-W*F3ZE^seNBCaV<}bX4zeMd!#z(f z%Yl0hXa;t+4Xlb7wQc2{=~UGoO?2v3tI;2}P`-|kt$fJb8CX5G%#z5cgnMm>-_A8j z+Bbd!PS{rE|Hsm~hco^E|DO~glw&fd$|>hV3_~SJPDwdr$Z-{7lf#fhLeA$?X6uB? znZlSu&NH@3&gYFyIW@~+IelO6&+qrgcozaKt&V)5T}!Xgf+80^OQ(1z-cI5J>eAHgby;4KPhpN?A8AvfAhho&)l zqx>2d%6yA`B)a#Pfe3G`k)TZo%!u!r1XUJzST`kKmgt}~XSr8bc4diYgh zLY3|-sp9FX^1w*N3^FLd&%vNn3lGw~T&*5py4&}q=&EJO zFgXOE#l57cn{4~GDd=$`jv3rbADB1b(If>B+{z(IlB`jTm4xUS27 z^ZC7=TqW~q0y8nZ9s|6kO;-sIWUID7O&RZ@!TI){P&HL^9APOj#PMry#Vs5`Lwjkz zyLGyQipt#07nn%O^(Ex`_AUHxdA0BEE8f*>p)v&c01zWcMoW= zZ54rV{h9eQrb@S1a70vTwRuj6jn<0W3v_ zxAg^^Y#Sj>pFI8_#%0snuILuY&F!TR#0!N!KyW1h!bX7jHeF98F@};WW;Zk{G z6jLjlE=zx6bXX9C-!&VRp;#v-Foif6lDtbyxqkxc7Z@(CBXQ4@^xZ5EwD+G#&}Bq>nC$;$ z#S)7U<)bF$Sog95XAx|RI-*B?N3|dFw=YtTnqKk%`ChxNV4P63p=tQQk@um-hG104 zd_8$34VPYwbY%7!YXD1ziSYQriVjrP8-N$ z`o1#JDRYEKuYH$UlH2~RX~=W`04+)C+4W125`9ea9487zdmVTe9ZUQT;V2GdfSwW; zE?Uid+SO*&gJqU_K31qkRt>BG*dyXRBQcx__Cf5U2qM@Qgq})sY!+cxB_Gy~eeNG9 zGq>y5$D5HJZ=2<@b26A2r(;9HWkkcc}Y9x>bZ+*6pHFpi{RGU zFrNm`kcI_eO;kvOn|`o+0&s(yA*-F@6UCO}v3qrVKvpV8jS&ap_I7M6RyP5G-VFeY z(3lsX89^lAOERE*BzJH^GKC;<*`db(*)X}Ta6*;n%|~3)BNE^U)_nMxzCZ;&ng%Zo zkw#8hm9wvlFCUL7*NydY7`k6Y)7uuv`R|Xjdn#y z%`H4o;jiYQNTto6PFsYeQE#TXiS{9M3FDY0&=8l({Ci(mv2NOcULfe}$5rLSPu}KM z6c*xx3xHNM!pH}lS3gl4=!i$6I!;WdbL(a#kLM>l5@kSxUZCEk3G1o{d{yKdR3Z$^`ZQ2nH{HUG3%}V~LQQ8RYHWK6p6Y$!MLxiUU)~p^m*>baUPXdr`i= zN92YD6cD)B`5oE?hj!CZLx@?aw4%WxuuPxK`X^wCyq^|3jMRqxc}gT_R^aJyZPFr0 zVhF2XtpaRi=F&IdqJ(ZgMX)pOOI9E@iQ!nZNz<#EXSec#8!Zj|gLcHPDqHz<8cN6*rQG?zlI~B zMy{`3gfNjF1#4A5%--s4TFIQWT<`r_!T9$FXSAY7kE^KeK0<(uMA}nnQ2N-5RSp97 zr4R~l1|7mHsM>AH+bxAU4)LIf=ZN!vAsqS}9y}Nd$Z!a`e*^a=MJM?kV2^HJ~cEVl~F`N z9T?q=sK9`2TioRwA8^(jLNIFK?2}>|o?ZqyDr~Ps1y%I#ffJ8_nCgt6{(4E6e$>AF zic@X)XrMXM^O<5~W>DpB(C8O(h$BsI4igj^`sYMs{`Ar{TCQr+9F?K0GT#F2*8$R# z6Y#)^S`z?Sh4{7^AsyOCUyue!dqDfk&haoIE5u6-4(0Uk|0f0DN$n41(tJ8oHC<6o zFf>>PW`4LnXFf3=?6cn2FnwX=1H7-|UGMkR4$Fzm78p+2`V1*(0lwNhvP$e4k0p#} zkJbM#+?Qww&85}A9|5gw3ed{Z3w4O%8kh`*?h8yZTLL{h#e6XY)D!PmT{Jf((RZId zeOzLIOM;L%VQoc>tjqF1w7*iNMqYO9hg_Y#v|jWTNK?|o$f1h}CaAtxUCc~V^s}an z;-;5=*cbPp1G>=OEhzCq)AOM+-FAhjDykZN`hH$*-bzyp#Zl|qMp6&7^B;=9j_TkK z_A-_j>;>Uvr#nhfUw`bkHq|JriX45R=>8WOn`!U)4C0cvMGtk~jEsOFjSO>flGbi~ zvz>yeq|(V;=sYGn2m@3RlU>)f(7yu?6q8&Ygu-v300@Hjcd50< zRPg}q6@UyZUXzsCgi6I0f-5*11wt-UsJ{3X#{vC`SCU?{R}ZcBN7Bm24KV~>=vOP~ z5D}UcbPby~1IE*XV3lhUxNEqPY#mRDV;k;9vxA4YOg7}_U7yqGgMp3!K;qQ67K3~I zJWvn@*LXZ-*C>s)gX)OwarDAT(S`YzuA@8gxSU*EhHdDj^3dbu^-<(HU{_6~+9uYA za?t29D)aXe8$*>v71HNQQ5 zsQX?-YAaH1?@!qF(iHIFm-gz7$(Mp@r?n}!c^B1!sVBE-H`fW@D+K&g7wi*TcDdzh zqz*4pbQ%cQ+BL4oN8t!SK)^*3vbS8~Ol%3|ETiLqCS4gWVokPi8FIv>)gz^8^azy) zsbF7q*G2v|VhKP(3eDT~)g>)(q4Afe^;UkvlPk*mQk&8m;m-yNO^iRgk{jJ!I@wY3 zhCcnjQ*;)8rf7O5hE|CBOrR7s*E3c$W;0BIR=*nP^8?AME*PNmzj#Rg3S2snRc14q zlI3L9$tPCP2WR}Z=5ts3lIzf7B8%>6$qp;)cVoVQ|I?$+)u zuM^`W-9Zf9(XgMlHf{$QMeD%Cm3alLpSp7gQ-P_@?O;j)gp^mwfH-Xvn(w1BXcLIL zXc)nJm9PLr#jTPu9ZfO$i)}gpA=`g8Yi|Z8yVHWyPhiNVE&5?MhJcx)J+)0o45%X^ zSIc?X!i~&L{Ie%dyu9R%+d_iH{@lz15F2bryUiGgD$}TezwgWZRdPihB)>BB8d*hxGzv-e+r7T|9GA3) zl-J)}U*td@*Jm^=aw0FZY%VTxBP}=Ma0LcPnQ(eq#axF|{S&qgLa4DzK0F?WX2Z@v zx1R3>oZKM?JQ>Q|x7xp)G&L?UwBeWTR=Wm|7~VdNq9svU-?NC|bZMcwXw4dl%ht6f28vBF1V;!oTmk*4!`!iRWujoLj zvaaDu9o;t%@u8{e@)))4Qaa(;J&9f-GE^6~n+I_({6tk-(>=2`d%3%dJi#I=2` zg6e>ilH}WMgKiO7UCfiFo7d*;R)rdN`1@wuh2(W!X| z{DN?LK=F1MTVyByVG%uAX?Lf0Uw_ApX}zAlnLjP*<|fO&zWVX$WgL_+8_w5-cYXYxdDS&bM8NMV1qS2n#I02hj~hU6ZQS)P!$ z-b@#DHK`}mEC0tV+$@?F@!Esf7Zy>mc&KXIr$v4%z(Zv#WaM$VQN-v!y&rou)xw47 zxSw|!=LpqGAR$yRw1`=J9IiNdS4M=Pt+G@J?M=Xi68kOE^S^P zlzTvZ7}>3^z>&6;ikt=9PK@n3404@cRVcxd3}isqk!v17vWAgbFwb_~>^ZpIfc5^p zY{UX+orF~2qyIc+nB8<~k5Cc;gb4}eGuokro5I$WoEwwBf6!M3N^?YQu8BJAvPbUfT^&b}O9v z4|;SiU`>I&Qkr99P76XQgbZHKX4Wea_Z_RuAU%p%W#md!4#l!9$u-fxG$3oY^c9dS zb`C=d)tW7)Kg3})na2Q2r(;*WZV^m2J(qG*B3bqSzgE`ID!868RU*y>o|pq-^MHjX z$!GWe<~@b76mv?fXnt>By-M%HwaDHw`a+5|#rtw(pKr$v6q+_%XN|TdsQdP|`4Ss^ z@l3#1*gypqxNE`grojvRzyU?D2gmlj!?t_WHr0Kb;<*jO?z&$wG@_6~t5=TX4Ljht zVhWQ>?$5P6hLznP5v#!l@B_pl+IE+}Je04D&TB=hN9B?{ct}IfbODhH0{4P}j9e$d z6~~U^rqhy#%{8LDc|WSiQIsybTR<<%gZqs>U8zO>2>(aIS~;oF%<}ZaKk{4z=afSfdDvn301IiJ^^t)9KoNC z56bF8aH$fvvg88Jk*H6t;4`R962(HhKPbzds)w)6vYt1>x@@LHRhjTj?tQH>LXLS= z^8WWNzZ310OD+q|c7!UtSdFRi9{8r{leVRW2S^}27WFQk|c|vK-xM653!xCXINQ0kpqBZxYVO8pkN1rXS75ewL z1RlljP{aDup=GiRal6gdlwoQMYM{|^s1f*s!xqDlKgPs`MijtK*26@M1U+JPrMv}1 zc?=nq1qSpLf}8}ZUg;SC8QC)cpzlP*k~FmMor9LkkpT%%J0Y#~Num@i66*boL^5Oi|RL|M|OOY5P zY~O%E++~9W1oVzR+aUT$LLG zk`J6CqS^k^v=n*3Xm!?EN6_=+RDr=4upQ0nj zQh6iNikWIHf4qa2vR8>NRgwl1*{$P+&&KoFHkqLAgY=*_;Iu11jF&Xm5}C3n3L0|N zjc$EWJ$YSbcA4 zZfgrqc}dS6+fk7+y2S3C{mW}0qos(*o)h~hZtTZxfAyo9R@B(z1iL>)pZ#%h<)OBd zy0gT~5mIZ;ZANS27;>0lHxEvA%>^4qbT`b~PUowWZgi+Pp!E6@2Qt<2)L~L4~tSDKnELcV_dET&SGAT+mQ3sBr5C&{UgKoUyKj?Sz9{hJz{*@;l1R zE9*{(m5PLcp?Zl+jqcT}{=n}vII5-=d9`Y-4*-2qEYrLURWI7_uktPs4kg+IE2LTX`-!==&~i`;qp};6GS|-JT|Qf3{^b@rVQ@ zOw-8J$zqv^Lc;FJd>XjvISCma(_}!H19Kxx(Zi5|IwK`o6%eN}a%e#wMh(h2;>*Bs_C8Uin~B{95vY;r z3yhQ|d#WfsdQg?DwAQCYe859PNKeW66NB;Dfo;KVx*~`Z`2qLRT=i>SRR>xcx`x-} z4cDbf!w};32!pxr62AR=ju3oMjLd#v>Tdd6lt){y>@>9HTgp_uZq!bgqQtMA*;kGA zJW+1?+kf|-klI!|+*Z3QH8)-`_5l`;b_+ti1%9F>P$+!!`(O(-pLwuZz8}fN02Lb9 z9`T%w$-_a<1+Ekl7~*O3V<7wyLQs&F#yjn!|0hNrsu-ZxzA}dpWuuszd=7I~q4a3f>pVD<(roT0z? zB+`|F6_5+q+dr(sFc09Sb^$9X3A8}w483Q6y-pG}Ky&QL2dA2@^bO9RZ!a$d{oc`1 z?CWDfzHK~Y&HqrAJU*}$q&|k=^ugw=G-XBY6<3gXk%oFJwRv-4&zuKzSK<&(!uOJ3 z4ui^dk@AhCe{ZI{Ha@=4uT}T?&-&#(%D2=C@DsMnfs8*Hk-D4_-!4&K!h&z#_o{Mn z+ zxHje5xC#X^p*LnZo4X>rVHTMXMf-<04Lle;+%vHBRBX>zhtkqUN2=+b*erPC7NEeQEQNYgm6piTS?w6U+dA8m@?l@SSy(x+16O^SgIgw&`3tp2>L!;i)Aovm7;f70*W0W4iGTJU_lG-6iZL|DdSpSXJ3n*UYfrfT)qmV$ z+RdoMdh|Z3BW{$4A9;lzcBM@}L^B57L>f8kqGrGuGXOh$2GOu$V?A2K=ZY}+P59AW z@0%T(r(C~oL~5Li-F-?m_@ltPbi6&^4OG0Fm#{aJLj4Zv5&-8Vz#+8eS&IjnTdgUT z4#Zwm{|q>>1);IyC9^Z|?AC1lUJmq)i#1J;Xn}1?8zckgo1XOf)tu@kf0Zb!qb%j0 zgr5D22e*Rn&gIpy<(EL3P<-z(_&scvB>Wy==YS45LbDO`_YJ%58{&f^^2NY+4wPU0 z{zq~TwsjS&Q8eF$h`~j+KC1WCDL8$y9>N+qF-jMip;3UERGMjEn71$ClRZW`fv3T3 zY2_TW8aY)f!*pwJ)af1Nz**gkD{*w8tqP<3PcSwI|5uEmZP4J2-!rGz``%1c4=MtN zim97VdeuSs!9{xy)BEVrpXY#_Iu3`zNM3?&X4(6wt~3ACZ5al-B*-|jxYt-W_CQ1R z`7=~I7DPlc4T+?=KSJZ&HNmQfS`F3>e=1J0(eKqG%z<2rD}I6HK1 z`*up^_-LX(fr=O?^~n6y%E-J;o~5z))OwY(eU}o_D*D52E8XFB#`bSiis^f!&-hy# zWe?|=T3flP9(J~^qLGTeZ=mdd9&SZRrQ55-hI(#ZfhZuQ)=LigmL?{5GEtu(y#dGi z>RwU6i4@&T0dS!g3ZDeZ-+VO~hsOXe5E`7d9B}W^mNtGI)}e-(hA@OD)i~fO^(x?t z!$g%=bC2tiG`;!O=K0$yTvP}^$fRtD4aN@fF|0lbQ0!%k)7TA{L!6<0?W_KrMvU+$ z{fFBv>KJ!{$j;J=&+S8wi#sD(Lla3}zS&WYQGSj?!6^Lp^m*iF#FI$t>7N^KveX9^!_Qq(R+2Qd+-~H4DbqXYnEQ23j z0+f!G?Y=l!8w=gZy=?Z-&&~i{d zz+qF#0vN#li-zp>|7Pz2jfEL3HO!gdBTm!fg+o`ch6hpTjqs#W-3`(9uZ5G8e-%Sa za^P^t*=;Lz2kQp*>atewtQe)>}#ETGGK3Vb@ityoIE}_O-q{hegPN zh{?U*)^k-gH=^FZ*pbf{_PtXsQD1xLtl%W^Zgx|dR?b$GD5qCvq|YE#>0%DA>rjJ#huhkPx1PxVXjC~aKW3DtPx9Ms-h50D#@8e4 zMnBS4A=YUa8WOQuct8^ZeO;@sQV0iQ-i=F<-Yi(8EnqHXO&e7l!gr7xBXwQj=RBmkN)}u4l^X@K085|%lmI9tTf5-9| zx>fT!!2EC%qKVF?0hqp~co|Vuf(-z2n(Paz7|=tZzVa|7gol3e4MfPyW-@P0o45LO z@UMk)CfBVC8Vv;AaUg9}sH=Jixa0>VH+A`rc|7T*qB@09{dvAsZ4K@Md37eei2?V3 zQl8o@?Eb#51lNjk<9Jez4p|Id?GBkJ+>mJlx}kxC{dEAJ-ogN~;smA*8Qn+=Y9d2z zn_9ct6~q)r6wFy0@w!LxQd!WX7)Vja+r5a6%I(KxmgsnJ5;xV^tVM6ap$2C>dZ&ufbPb<{iQ9@8LBdM}h7dmX+>9 zB|mK*IF7}H17eOC0$@81p_Vc9iGzn;=&)@$#?Qc6P3z*mK&v)6ihGj<=(6e_o{3B6 zZlVFvf8l{PX$i@?dFJ3Wb4Q{VE}OuVwg2N(8YnF}`wb;@vi& z!3(-CDEyKDtccQ^m<^VN^Un<)SUt%OO$-mv@+Y62l_QE0#=vP~FO7Q{xC*&0yrXO8 zkd;k);6AE=Lb-T2h@Y^wtAnj4Q1_Q2<p+9;q>e)w9xSWDmrMw~pdr&Fdr}U8jSD&2a8fO$MWqnTadZtX2D77-DXkW8M*O z8&J~}?ll-{pz^({nz{hZ4$BQjO)>ZGkJ?6!mPqUx2#&negl;5ZbG86P{-5x?KTg_< z&Q*b_p&^^+B2p~DqqNIQmX2j*e_jxJ6=a6FoU{vE#!J7ZbT;sK3pYGgD-W=JQyLKH z7X0RFtZrPT*r4*NjYf5iF@C>OTZWsfB}Yl=siNcErm{nFXX}>ce&nNtwtob!oiSIJ z@iI@7H&^ik*IKgf#ZhI-xwmeO3VI7xD-SAFDMLQfo3GuY|LZJ?MU%P5o%QIVv2dR`RFn;P6MdAsy|?y~2$N zBh4Mr0uNVOb&wmh+3=E`h+hU#p(K&nz>y>7PWmCKJ!+}GZOhTDjAe__QU#zR*u3qahe( zeV6oS0yddnj~cFDW9V-0On1t}F+enC9D!RzunIDNjkfc)Ga+qP>}WGPidi2}NNJs> zyV^9}cr;B(F>q*Vt}#CF;TjXFx~EfRD_ON8qBGuH8&J)!hh6mE+R5wuDAV}Kr}1NW zqsS-ob$JU#Y`xl>#j4KTtQPKJ^L2$36>Q^eJA~_-y2ZoJMgA|9i&wXp(m_nOpsh1O zTQ)&E>Oo9+&|YF^PL>?EtvULVg%Yw^t!lBb6P0x&=$#93`fv$ZrS@r&*}0!3!gX0j zRoFWpcelW16XE8KSBy)_vgclssTS(Z!MU7u+PvZBf-j20%J?(aaBCq9tA!6)A>0YM zID2r_;z6gGjHDp%C8qxZHPz@Y#_$rVncf#Ei4jzp*&XhDCl+PbzxyNB^c%ULFMr4#$VI+YRo<{QU!GTDF2$x zfh%`AbK^C6F87;coI&!@-|)Ti8hiR&92?(mS%CS%T&IalP+aoQOu|U41P2uQp{nJ* zTIKqW&cDqBF3sO6s)H3RZ`I1z2d-Jp+>4tCvKOKLbha&U3h{GunF)$x291db|D3t) z;1J^BW;0_M*At{8lJ|4wj>G*BA2-JtzqqBKMiIN8Gd2#6AuzXlGtO}%K_MceKWA(m zoI?EHG_1FEHaG8audGPO`+f+o33xDL92fgrLInifxw(+hY|5Q5YG4PhSf_U`1X&BF zeF(1$@SL%Yd-ofy0&?E5SSV;d5=^TMZwP?S1jbQT(5k50JJ%Mvn?<u|$HTJM2d*4H|9gEj<-mEny6E;HeAjFnkc z=w)|vi)%%An&G9Btx!RW|%d6nuXM-%0wyS;af3|V1 ze;a6CBvNcY`F6SC8sV)=P-Rlpr5xd{4?fO+;m$>G(LsL6hYEi7fBhfry=9o|3p(GP ztbIuNVP&$Bx(xmN=u!ULp<6A&elC-h%Nsw|Og1QF z*KNj{GfiezZU|X^5_7)ms8jkd`A4mZQ(l_lk+u|gMAm$L`R4!@7#($Oa?|G29;}Oum zrxtoKoR1Z$_bqWcdHI@(RC8wXONmAPw<1XPj%yOho)@gIATm5|svtmkV_s=yzuSA3 ziA2HkoHvE|6YgH1-{jf+=XZaRaPl#Urs3g^{@Sv5T%eN}(}4X-akI(w;s%pz#cd`xifc`-7Gq6Jioci`7q^<27T5P&DQ@Yx zUfd{iUAp1A{9@kOxXG;7-<<9UdYi|0KEc~GDWBkKFS≦qC{b^5suH=CQwLf4mKA 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

    xnXw9B*k1)^^)&!JQwQE3Y5?yK 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%0D?>#Vx6o~k>WsCu&1 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 Qz<-=vP*C)Y!2kXK02AW2NdN!< literal 0 HcmV?d00001 diff --git a/dash/staging/kterm/kterm-release-latest.json b/dash/staging/kterm/kterm-release-latest.json new file mode 100644 index 0000000..01a5b3e --- /dev/null +++ b/dash/staging/kterm/kterm-release-latest.json @@ -0,0 +1,200 @@ +{ + "url": "https://api.github.com/repos/bfabiszewski/kterm/releases/26772867", + "assets_url": "https://api.github.com/repos/bfabiszewski/kterm/releases/26772867/assets", + "upload_url": "https://uploads.github.com/repos/bfabiszewski/kterm/releases/26772867/assets{?name,label}", + "html_url": "https://github.com/bfabiszewski/kterm/releases/tag/v2.6", + "id": 26772867, + "author": { + "login": "bfabiszewski", + "id": 3366666, + "node_id": "MDQ6VXNlcjMzNjY2NjY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3366666?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bfabiszewski", + "html_url": "https://github.com/bfabiszewski", + "followers_url": "https://api.github.com/users/bfabiszewski/followers", + "following_url": "https://api.github.com/users/bfabiszewski/following{/other_user}", + "gists_url": "https://api.github.com/users/bfabiszewski/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bfabiszewski/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bfabiszewski/subscriptions", + "organizations_url": "https://api.github.com/users/bfabiszewski/orgs", + "repos_url": "https://api.github.com/users/bfabiszewski/repos", + "events_url": "https://api.github.com/users/bfabiszewski/events{/privacy}", + "received_events_url": "https://api.github.com/users/bfabiszewski/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "node_id": "MDc6UmVsZWFzZTI2NzcyODY3", + "tag_name": "v2.6", + "target_commitish": "master", + "name": "v2.6", + "draft": false, + "immutable": false, + "prerelease": false, + "created_at": "2020-05-21T20:24:58Z", + "updated_at": "2025-04-10T20:16:30Z", + "published_at": "2020-05-21T20:35:06Z", + "assets": [ + { + "url": "https://api.github.com/repos/bfabiszewski/kterm/releases/assets/221834164", + "id": 221834164, + "node_id": "RA_kwDOAHb9H84NOOu0", + "name": "kterm-kindle-2.6-armhf.zip", + "label": null, + "uploader": { + "login": "bfabiszewski", + "id": 3366666, + "node_id": "MDQ6VXNlcjMzNjY2NjY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3366666?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bfabiszewski", + "html_url": "https://github.com/bfabiszewski", + "followers_url": "https://api.github.com/users/bfabiszewski/followers", + "following_url": "https://api.github.com/users/bfabiszewski/following{/other_user}", + "gists_url": "https://api.github.com/users/bfabiszewski/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bfabiszewski/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bfabiszewski/subscriptions", + "organizations_url": "https://api.github.com/users/bfabiszewski/orgs", + "repos_url": "https://api.github.com/users/bfabiszewski/repos", + "events_url": "https://api.github.com/users/bfabiszewski/events{/privacy}", + "received_events_url": "https://api.github.com/users/bfabiszewski/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "content_type": "application/zip", + "state": "uploaded", + "size": 411954, + "digest": null, + "download_count": 30184, + "created_at": "2025-01-20T12:54:44Z", + "updated_at": "2025-01-20T12:54:46Z", + "browser_download_url": "https://github.com/bfabiszewski/kterm/releases/download/v2.6/kterm-kindle-2.6-armhf.zip" + }, + { + "url": "https://api.github.com/repos/bfabiszewski/kterm/releases/assets/221834154", + "id": 221834154, + "node_id": "RA_kwDOAHb9H84NOOuq", + "name": "kterm-kindle-2.6-armhf.zip.sig", + "label": null, + "uploader": { + "login": "bfabiszewski", + "id": 3366666, + "node_id": "MDQ6VXNlcjMzNjY2NjY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3366666?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bfabiszewski", + "html_url": "https://github.com/bfabiszewski", + "followers_url": "https://api.github.com/users/bfabiszewski/followers", + "following_url": "https://api.github.com/users/bfabiszewski/following{/other_user}", + "gists_url": "https://api.github.com/users/bfabiszewski/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bfabiszewski/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bfabiszewski/subscriptions", + "organizations_url": "https://api.github.com/users/bfabiszewski/orgs", + "repos_url": "https://api.github.com/users/bfabiszewski/repos", + "events_url": "https://api.github.com/users/bfabiszewski/events{/privacy}", + "received_events_url": "https://api.github.com/users/bfabiszewski/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "content_type": "application/octet-stream", + "state": "uploaded", + "size": 310, + "digest": null, + "download_count": 201, + "created_at": "2025-01-20T12:54:43Z", + "updated_at": "2025-01-20T12:54:44Z", + "browser_download_url": "https://github.com/bfabiszewski/kterm/releases/download/v2.6/kterm-kindle-2.6-armhf.zip.sig" + }, + { + "url": "https://api.github.com/repos/bfabiszewski/kterm/releases/assets/20954116", + "id": 20954116, + "node_id": "MDEyOlJlbGVhc2VBc3NldDIwOTU0MTE2", + "name": "kterm-kindle-2.6.zip", + "label": null, + "uploader": { + "login": "bfabiszewski", + "id": 3366666, + "node_id": "MDQ6VXNlcjMzNjY2NjY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3366666?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bfabiszewski", + "html_url": "https://github.com/bfabiszewski", + "followers_url": "https://api.github.com/users/bfabiszewski/followers", + "following_url": "https://api.github.com/users/bfabiszewski/following{/other_user}", + "gists_url": "https://api.github.com/users/bfabiszewski/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bfabiszewski/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bfabiszewski/subscriptions", + "organizations_url": "https://api.github.com/users/bfabiszewski/orgs", + "repos_url": "https://api.github.com/users/bfabiszewski/repos", + "events_url": "https://api.github.com/users/bfabiszewski/events{/privacy}", + "received_events_url": "https://api.github.com/users/bfabiszewski/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "content_type": "application/zip", + "state": "uploaded", + "size": 417136, + "digest": null, + "download_count": 17785, + "created_at": "2020-05-21T20:35:43Z", + "updated_at": "2020-05-21T20:35:49Z", + "browser_download_url": "https://github.com/bfabiszewski/kterm/releases/download/v2.6/kterm-kindle-2.6.zip" + }, + { + "url": "https://api.github.com/repos/bfabiszewski/kterm/releases/assets/221772992", + "id": 221772992, + "node_id": "RA_kwDOAHb9H84NN_zA", + "name": "kterm-kindle-2.6.zip.sig", + "label": null, + "uploader": { + "login": "bfabiszewski", + "id": 3366666, + "node_id": "MDQ6VXNlcjMzNjY2NjY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3366666?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bfabiszewski", + "html_url": "https://github.com/bfabiszewski", + "followers_url": "https://api.github.com/users/bfabiszewski/followers", + "following_url": "https://api.github.com/users/bfabiszewski/following{/other_user}", + "gists_url": "https://api.github.com/users/bfabiszewski/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bfabiszewski/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bfabiszewski/subscriptions", + "organizations_url": "https://api.github.com/users/bfabiszewski/orgs", + "repos_url": "https://api.github.com/users/bfabiszewski/repos", + "events_url": "https://api.github.com/users/bfabiszewski/events{/privacy}", + "received_events_url": "https://api.github.com/users/bfabiszewski/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "content_type": "application/octet-stream", + "state": "uploaded", + "size": 310, + "digest": null, + "download_count": 135, + "created_at": "2025-01-20T07:58:01Z", + "updated_at": "2025-01-20T07:58:01Z", + "browser_download_url": "https://github.com/bfabiszewski/kterm/releases/download/v2.6/kterm-kindle-2.6.zip.sig" + } + ], + "tarball_url": "https://api.github.com/repos/bfabiszewski/kterm/tarball/v2.6", + "zipball_url": "https://api.github.com/repos/bfabiszewski/kterm/zipball/v2.6", + "body": "- add option to set cursor shape (thanks @efskap !)\r\n\r\n---\r\nfor firmware newer than 5.16.3 use a hard float version with `-armhf` suffix", + "reactions": { + "url": "https://api.github.com/repos/bfabiszewski/kterm/releases/26772867/reactions", + "total_count": 12, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 12, + "rocket": 0, + "eyes": 0 + }, + "mentions_count": 1 +} diff --git a/dash/staging/post-jailbreak-root/dashboard/dash.sh b/dash/staging/post-jailbreak-root/dashboard/dash.sh index 15e6d2e..7bca7bc 100755 --- a/dash/staging/post-jailbreak-root/dashboard/dash.sh +++ b/dash/staging/post-jailbreak-root/dashboard/dash.sh @@ -11,35 +11,69 @@ STATE_DIR="$DIR/local/state" BACKGROUND_TIMESTAMP_FILE="$STATE_DIR/background-updated-at" THEME_RUNTIME_ENV_FILE="$STATE_DIR/theme-runtime.env" THEME_SYNC_CMD="$DIR/local/theme-sync.sh" +PID_FILE="$STATE_DIR/dashboard.pid" +THEME_BACKGROUND_SYNC_CMD="$DIR/local/sync-theme-backgrounds.sh" THEME_MENU_SERVICE_CMD="$DIR/local/theme-menu-service.sh" THEME_MENU_LOG_FILE="$DIR/logs/theme-menu.log" TOUCH_HOME_SERVICE_CMD="$DIR/local/touch-home-service.sh" TOUCH_HOME_LOG_FILE="$DIR/logs/touch-home.log" REFRESH_SCHEDULE=${REFRESH_SCHEDULE:-"2,32 8-17 * * MON-FRI"} +SCHEDULED_SCREEN_WAKE_ENABLED=${SCHEDULED_SCREEN_WAKE_ENABLED:-true} +REMOTE_SYNC_SCHEDULE=${REMOTE_SYNC_SCHEDULE:-"10 0 * * *"} +REMOTE_SYNC_ENABLED=${REMOTE_SYNC_ENABLED:-true} FULL_DISPLAY_REFRESH_RATE=${FULL_DISPLAY_REFRESH_RATE:-0} SLEEP_SCREEN_INTERVAL=${SLEEP_SCREEN_INTERVAL:-3600} DISABLE_SYSTEM_SUSPEND=${DISABLE_SYSTEM_SUSPEND:-false} BACKGROUND_REFRESH_INTERVAL_MINUTES=${BACKGROUND_REFRESH_INTERVAL_MINUTES:-120} CLOCK_FULL_REFRESH_INTERVAL_MINUTES=${CLOCK_FULL_REFRESH_INTERVAL_MINUTES:-15} PRE_SLEEP_GRACE_SECONDS=${PRE_SLEEP_GRACE_SECONDS:-10} -MANUAL_WAKE_KEEP_AWAKE_SECONDS=${MANUAL_WAKE_KEEP_AWAKE_SECONDS:-60} +MANUAL_WAKE_KEEP_AWAKE_SECONDS=${MANUAL_WAKE_KEEP_AWAKE_SECONDS:-300} MANUAL_WAKE_EARLY_TOLERANCE_SECONDS=${MANUAL_WAKE_EARLY_TOLERANCE_SECONDS:-5} +SLEEPING_SCREEN_ENABLED=${SLEEPING_SCREEN_ENABLED:-true} STATUS_MASK_ENABLED=${STATUS_MASK_ENABLED:-true} STATUS_MASK_LEFT=${STATUS_MASK_LEFT:-700} STATUS_MASK_TOP=${STATUS_MASK_TOP:-0} -STATUS_MASK_WIDTH=${STATUS_MASK_WIDTH:-372} -STATUS_MASK_HEIGHT=${STATUS_MASK_HEIGHT:-24} +STATUS_MASK_WIDTH=${STATUS_MASK_WIDTH:-360} +STATUS_MASK_HEIGHT=${STATUS_MASK_HEIGHT:-48} STATUS_MASK_PASSES=${STATUS_MASK_PASSES:-3} STATUS_MASK_DELAY_SECONDS=${STATUS_MASK_DELAY_SECONDS:-1} -RTC=/sys/devices/platform/mxc_rtc.0/wakeup_enable +RTC_WAKEUP_ENABLE=/sys/devices/platform/mxc_rtc.0/wakeup_enable KEEP_NATIVE_UI_STACK_RUNNING=${KEEP_NATIVE_UI_STACK_RUNNING:-false} - LOW_BATTERY_REPORTING=${LOW_BATTERY_REPORTING:-false} LOW_BATTERY_THRESHOLD_PERCENT=${LOW_BATTERY_THRESHOLD_PERCENT:-10} num_refresh=0 background_needs_redraw=true +dashboard_exit_reason=normal + +on_dashboard_term() { + dashboard_exit_reason=SIGTERM + echo "Dashboard received SIGTERM" + exit 143 +} + +on_dashboard_hup() { + dashboard_exit_reason=SIGHUP + echo "Dashboard received SIGHUP" + exit 129 +} + +on_dashboard_int() { + dashboard_exit_reason=SIGINT + echo "Dashboard received SIGINT" + exit 130 +} + +on_dashboard_exit() { + exit_status=$? + echo "Dashboard exiting status=$exit_status reason=$dashboard_exit_reason pid=$$" +} + +trap on_dashboard_term TERM +trap on_dashboard_hup HUP +trap on_dashboard_int INT +trap on_dashboard_exit EXIT start_theme_menu_service() { if [ "${THEME_MENU_ENABLED:-false}" != true ]; then @@ -77,14 +111,13 @@ load_theme_runtime_config() { } init() { - if [ -z "$TIMEZONE" ] || [ -z "$REFRESH_SCHEDULE" ]; then + if [ -z "$TIMEZONE" ]; then echo "Missing required configuration." echo "Timezone: ${TIMEZONE:-(not set)}." - echo "Schedule: ${REFRESH_SCHEDULE:-(not set)}." exit 1 fi - echo "Starting dashboard with $REFRESH_SCHEDULE refresh..." + echo "Starting dashboard with refresh_schedule=${REFRESH_SCHEDULE:-disabled} sync_schedule=${REMOTE_SYNC_SCHEDULE:-disabled} scheduled_screen_wake=${SCHEDULED_SCREEN_WAKE_ENABLED}..." mkdir -p "$STATE_DIR" if [ "$DISABLE_SYSTEM_SUSPEND" = true ]; then @@ -99,7 +132,7 @@ init() { fi echo powersave >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor - lipc-set-prop com.lab126.powerd preventScreenSaver 1 + keep_screen_visible start_theme_menu_service start_touch_home_service } @@ -118,13 +151,20 @@ stop_framework() { prepare_sleep() { echo "Preparing sleep" - /usr/sbin/eips -f -g "$DIR/sleeping.png" - background_needs_redraw=true + if [ "$SLEEPING_SCREEN_ENABLED" = true ]; then + /usr/sbin/eips -f -g "$DIR/sleeping.png" + background_needs_redraw=true - # Give screen time to refresh - sleep 2 + # 只有真的画了 sleeping.png,才需要额外等待这次整屏刷新落完。 + sleep 2 + else + # overlay/静默同步模式下,直接保留当前 dashboard 画面直到真正挂起, + # 避免 Voyage 把 600x800 的 sleeping.png 只画在左上角,压住日历内容。 + echo "Sleeping screen disabled, keeping current dashboard visible before suspend." + fi - # Ensure a full screen refresh is triggered after wake from sleep + # 无论休眠前是否显示 sleeping.png,唤醒后的下一次恢复都强制走一次整屏刷新, + # 避免长时间 suspend 之后局部刷新把残影继续带到下一轮。 num_refresh=$FULL_DISPLAY_REFRESH_RATE } @@ -143,6 +183,29 @@ background_refresh_due() { last_background_epoch=$(cat "$BACKGROUND_TIMESTAMP_FILE") refresh_interval_seconds=$((BACKGROUND_REFRESH_INTERVAL_MINUTES * 60)) + # 背景里包含当天日历时,不能只按“距离上次刷新过去了多少分钟”判断。 + # 只要北京时间跨天了,就应该在下一轮调度里至少再拉一次新背景。 + current_day_id=$(lua - "$current_epoch" "${CLOCK_TIME_OFFSET_MINUTES:-0}" <<'LUA' +local epoch_seconds = assert(tonumber(arg[1]), "missing epoch seconds") +local offset_minutes = tonumber(arg[2]) or 0 +local seconds_per_day = 24 * 60 * 60 +local local_seconds = epoch_seconds + offset_minutes * 60 +io.write(math.floor(local_seconds / seconds_per_day)) +LUA +) + last_day_id=$(lua - "$last_background_epoch" "${CLOCK_TIME_OFFSET_MINUTES:-0}" <<'LUA' +local epoch_seconds = assert(tonumber(arg[1]), "missing epoch seconds") +local offset_minutes = tonumber(arg[2]) or 0 +local seconds_per_day = 24 * 60 * 60 +local local_seconds = epoch_seconds + offset_minutes * 60 +io.write(math.floor(local_seconds / seconds_per_day)) +LUA +) + + if [ "$current_day_id" != "$last_day_id" ]; then + return 0 + fi + [ $((current_epoch - last_background_epoch)) -ge "$refresh_interval_seconds" ] } @@ -176,11 +239,161 @@ fetch_background() { return 0 } +screen_wake_enabled() { + # 这里的语义只代表“分钟刷新时是否把屏幕维持在可视态”。 + # 分钟调度本身是否存在,不能再由这个开关决定。 + # debug on 的目标就是高频亮屏调试,所以这里直接强制开启可见刷新。 + if [ "$DISABLE_SYSTEM_SUSPEND" = true ]; then + return 0 + fi + + [ "$SCHEDULED_SCREEN_WAKE_ENABLED" = true ] +} + +refresh_schedule_enabled() { + [ -n "${REFRESH_SCHEDULE:-}" ] +} + +keep_screen_visible() { + # 可视窗口和 debug on 都需要把 powerd 留在可视态, + # 否则刚画完时钟就可能被系统重新收回到睡眠界面。 + lipc-set-prop com.lab126.powerd preventScreenSaver 1 2>/dev/null || true +} + +allow_screen_sleep() { + # debug on 需要常亮;普通低功耗模式下才把屏幕控制权交还给 powerd。 + if [ "$DISABLE_SYSTEM_SUSPEND" = true ]; then + keep_screen_visible + return + fi + + lipc-set-prop com.lab126.powerd preventScreenSaver 0 2>/dev/null || true +} + +remote_sync_enabled() { + [ "$REMOTE_SYNC_ENABLED" = true ] +} + +next_schedule_seconds() { + schedule=$1 + "$DIR/next-wakeup" --schedule="$schedule" --timezone="$TIMEZONE" +} + +compute_next_wakeup() { + max_wait=2147483647 + next_display_secs=$max_wait + next_sync_secs=$max_wait + + # debug off 即使不允许自动亮屏,分钟级时钟刷新也必须继续调度。 + if refresh_schedule_enabled; then + next_display_secs=$(next_schedule_seconds "$REFRESH_SCHEDULE") + fi + + if remote_sync_enabled && [ -n "${REMOTE_SYNC_SCHEDULE:-}" ]; then + next_sync_secs=$(next_schedule_seconds "$REMOTE_SYNC_SCHEDULE") + fi + + if [ "$next_display_secs" -eq "$max_wait" ] && [ "$next_sync_secs" -eq "$max_wait" ]; then + echo "next_wakeup_reason=display" + echo "next_wakeup_secs=3600" + return 0 + fi + + if [ "$next_display_secs" -le "$next_sync_secs" ]; then + echo "next_wakeup_reason=display" + echo "next_wakeup_secs=$next_display_secs" + else + echo "next_wakeup_reason=sync" + echo "next_wakeup_secs=$next_sync_secs" + fi +} + +silent_sync() { + sync_failed=false + + # 每天 00:10 的静默唤醒先把全量主题图和主题 JSON 拉到本地, + # 这样后续切主题可以完全走本地目录,不依赖当下网络。 + if ! "$THEME_BACKGROUND_SYNC_CMD"; then + echo "Theme background sync failed" + sync_failed=true + fi + + if background_refresh_due; then + if fetch_background; then + # 后台静默同步时只更新缓存,不主动点亮 screen。 + # 下次手动点亮或进入 dashboard 时,再把新背景完整恢复到屏幕上。 + background_needs_redraw=true + else + echo "Silent sync background refresh failed" + sync_failed=true + fi + else + echo "Silent sync skipped current background refresh" + fi + + if [ "$sync_failed" = true ]; then + echo "Silent sync failed" + return 1 + fi + + echo "Silent sync completed" + return 0 +} + +refresh_dashboard_hidden() { + if background_refresh_due; then + if fetch_background; then + # 普通分钟调度在 debug off 下只更新缓存,不主动把新背景刷到屏幕上。 + background_needs_redraw=true + elif [ ! -f "$BACKGROUND_PNG" ]; then + echo "No cached background available for hidden refresh." + return 1 + fi + fi + + echo "Clock cache refresh without screen wake" + "$CLOCK_RENDER_CMD" false false +} + clock_force_full_refresh() { eval "$("$DIR/local/clock-index.sh")" [ $((minute % CLOCK_FULL_REFRESH_INTERVAL_MINUTES)) -eq 0 ] } +hold_visible_window_until() { + keep_awake_until=$1 + + # 只要用户当前正看着 calendar,这段窗口里就继续让分钟刷新走可视路径。 + keep_screen_visible + + while true; do + now=$(now_epoch) + if [ "$now" -ge "$keep_awake_until" ]; then + break + fi + + seconds_until_next_minute=$((60 - (now % 60))) + remaining_awake_seconds=$((keep_awake_until - now)) + + if [ "$seconds_until_next_minute" -gt "$remaining_awake_seconds" ]; then + sleep "$remaining_awake_seconds" + break + fi + + sleep "$seconds_until_next_minute" + refresh_dashboard || true + done +} + +mask_system_status_overlay_once() { + if [ "$STATUS_MASK_ENABLED" != true ]; then + return + fi + + fbink -q -V -B WHITE -k \ + "top=$STATUS_MASK_TOP,left=$STATUS_MASK_LEFT,width=$STATUS_MASK_WIDTH,height=$STATUS_MASK_HEIGHT" +} + mask_system_status_overlay() { if [ "$STATUS_MASK_ENABLED" != true ]; then return @@ -191,8 +404,7 @@ mask_system_status_overlay() { # 实测需要延迟后再补盖一次,否则系统可能会在我们第一次覆盖后再重画一遍。 pass=1 while [ "$pass" -le "$STATUS_MASK_PASSES" ]; do - fbink -q -V -B WHITE -k \ - "top=$STATUS_MASK_TOP,left=$STATUS_MASK_LEFT,width=$STATUS_MASK_WIDTH,height=$STATUS_MASK_HEIGHT" + mask_system_status_overlay_once if [ "$pass" -lt "$STATUS_MASK_PASSES" ] && [ "$STATUS_MASK_DELAY_SECONDS" -gt 0 ]; then sleep "$STATUS_MASK_DELAY_SECONDS" @@ -255,6 +467,24 @@ powerd_get_prop() { lipc-get-prop com.lab126.powerd "$prop_name" 2>/dev/null || echo "unavailable" } +screen_is_visibly_active() { + power_state=$(powerd_get_prop state) + case "$power_state" in + active|Active) + return 0 + ;; + esac + + power_status=$(powerd_get_prop status) + case "$power_status" in + *"Powerd state: Active"*) + return 0 + ;; + esac + + return 1 +} + log_battery_stats() { battery_level=$(gasgauge-info -c 2>/dev/null || echo "unknown") charging_state=$(powerd_get_prop isCharging) @@ -285,8 +515,36 @@ rtc_sleep() { echo "Skipping system suspend, sleeping for ${duration}s instead" sleep "$duration" else - # shellcheck disable=SC2039 - [ "$(cat "$RTC")" -eq 0 ] && echo -n "$duration" >"$RTC" + # Voyage 这代机器不一定还有旧的 mxc_rtc.0/wakeup_enable 接口; + # 当前实机上能稳定看到的是 /sys/class/rtc/rtc0/wakealarm。 + # 这里先兼容旧接口,找不到时再回退到标准 wakealarm 写法。 + if [ -f "$RTC_WAKEUP_ENABLE" ]; then + current_wakeup_value=$(cat "$RTC_WAKEUP_ENABLE" 2>/dev/null || echo "") + if [ -n "$current_wakeup_value" ] && [ "$current_wakeup_value" -eq 0 ] 2>/dev/null; then + echo -n "$duration" >"$RTC_WAKEUP_ENABLE" + fi + else + rtc_wakealarm_path="" + + if [ -f /sys/class/rtc/rtc0/wakealarm ]; then + rtc_wakealarm_path=/sys/class/rtc/rtc0/wakealarm + elif [ -f /sys/class/rtc/rtc1/wakealarm ]; then + rtc_wakealarm_path=/sys/class/rtc/rtc1/wakealarm + elif [ -f /sys/class/rtc/rtc2/wakealarm ]; then + rtc_wakealarm_path=/sys/class/rtc/rtc2/wakealarm + fi + + if [ -n "$rtc_wakealarm_path" ]; then + wake_epoch=$(( $(now_epoch) + duration )) + echo 0 >"$rtc_wakealarm_path" 2>/dev/null || true + echo "$wake_epoch" >"$rtc_wakealarm_path" + else + echo "警告:未找到可用的 RTC 唤醒接口,回退到普通 sleep ${duration}s" + sleep "$duration" + return + fi + fi + echo "mem" >/sys/power/state fi } @@ -311,6 +569,7 @@ hold_after_manual_wake() { sleep_started_at=$2 sleep_finished_at=$3 actual_duration=$((sleep_finished_at - sleep_started_at)) + keep_awake_until=$((sleep_finished_at + MANUAL_WAKE_KEEP_AWAKE_SECONDS)) if ! manual_wake_detected "$requested_duration" "$actual_duration"; then return @@ -318,17 +577,22 @@ hold_after_manual_wake() { echo "Manual wake detected after ${actual_duration}s, keeping awake for ${MANUAL_WAKE_KEEP_AWAKE_SECONDS}s" + # 手动唤醒期间,系统可能已经把自己的睡眠/锁屏层画回前台。 + # 这里先强制要求下一次 refresh_dashboard 完整恢复 calendar 背景, + # 不能只补一层时钟 patch。 + background_needs_redraw=true + # 短按电源键提前唤醒后,先把 dashboard 内容恢复回来, - # 再给出一段明确的可交互窗口,避免 2~3 秒内再次休眠。 + # 再在这段明确的可交互窗口里按分钟补画时钟,避免只刷一次后就停住。 refresh_dashboard || true - sleep "$MANUAL_WAKE_KEEP_AWAKE_SECONDS" + hold_visible_window_until "$keep_awake_until" } main_loop() { while true; do log_battery_stats - next_wakeup_secs=$("$DIR/next-wakeup" --schedule="$REFRESH_SCHEDULE" --timezone="$TIMEZONE") + eval "$(compute_next_wakeup)" if [ "$next_wakeup_secs" -gt "$SLEEP_SCREEN_INTERVAL" ] && [ "$DISABLE_SYSTEM_SUSPEND" != true ]; then action="sleep" @@ -337,8 +601,12 @@ main_loop() { if [ "$next_wakeup_secs" -gt "$SLEEP_SCREEN_INTERVAL" ] && [ "$DISABLE_SYSTEM_SUSPEND" = true ]; then echo "Debug mode active, skipping sleeping screen." fi - action="suspend" - refresh_dashboard + + if [ "$next_wakeup_reason" = "sync" ]; then + action="silent-sync" + else + action="suspend" + fi fi actual_sleep_secs=$next_wakeup_secs @@ -350,6 +618,13 @@ main_loop() { # 预留一小段可中断窗口,便于在 Kindle 本机或 SSH 下手动终止进程。 # 这段时间必须从 rtc_sleep 中扣掉,否则每分钟刷新会长期晚于计划时间。 + # 普通分钟调度已经改成隐藏刷新,因此 debug off 下应该把屏幕控制权交还给 powerd, + # 避免设备每分钟都被重新拉成可视亮屏态。 + if screen_wake_enabled; then + keep_screen_visible + else + allow_screen_sleep + fi sleep "$PRE_SLEEP_GRACE_SECONDS" echo "Going to $action, next wakeup in ${next_wakeup_secs}s" @@ -357,9 +632,46 @@ main_loop() { sleep_started_at=$(now_epoch) rtc_sleep "$actual_sleep_secs" sleep_finished_at=$(now_epoch) - hold_after_manual_wake "$actual_sleep_secs" "$sleep_started_at" "$sleep_finished_at" + + # Voyage 在 rtc 唤醒刚回来的瞬间,右上角系统状态栏可能会先闪回前台。 + # 只要系统已经把屏幕拉成可视态,就先立即补一层白色遮罩, + # 再进入后面的手动唤醒判断和 dashboard 刷新,尽量缩短这段闪现时间。 + if screen_is_visibly_active; then + mask_system_status_overlay_once + fi + + if manual_wake_detected "$actual_sleep_secs" "$((sleep_finished_at - sleep_started_at))"; then + hold_after_manual_wake "$actual_sleep_secs" "$sleep_started_at" "$sleep_finished_at" + continue + fi + + if [ "$next_wakeup_reason" = "sync" ]; then + silent_sync || true + else + if screen_wake_enabled; then + refresh_dashboard || true + elif screen_is_visibly_active; then + # Voyage 在当前 overlay + RTC suspend 架构下, + # 普通分钟唤醒有时会被系统自己拉成可视态。 + # 既然用户已经看得到这次唤醒,就顺手把时钟补到当前分钟, + # 避免出现“亮灯了,但表盘还是旧时间”的错觉。 + refresh_dashboard || true + else + refresh_dashboard_hidden || true + fi + fi done } init +printf '%s\n' "$$" >"$PID_FILE" +echo "Dashboard boot pid=$$ at $(date '+%Y-%m-%d %H:%M:%S %Z')" +refresh_dashboard || true + +# 从 KUAL 进入 dashboard 或主题切换后回到 calendar,本身就是一次显式用户操作。 +# debug off 下也应该给同样的 5 分钟可视窗口,让用户回来后看到会继续走动的时钟。 +if [ "$DISABLE_SYSTEM_SUSPEND" != true ]; then + hold_visible_window_until $(( $(now_epoch) + MANUAL_WAKE_KEEP_AWAKE_SECONDS )) +fi + main_loop diff --git a/dash/staging/post-jailbreak-root/dashboard/launch-theme-from-kual.sh b/dash/staging/post-jailbreak-root/dashboard/launch-theme-from-kual.sh index c507ed6..b56fea1 100644 --- a/dash/staging/post-jailbreak-root/dashboard/launch-theme-from-kual.sh +++ b/dash/staging/post-jailbreak-root/dashboard/launch-theme-from-kual.sh @@ -2,19 +2,99 @@ set -eu DIR="$(dirname "$0")" +ENV_FILE="$DIR/local/env.sh" SWITCH_THEME_CMD="$DIR/switch-theme.sh" -LAUNCH_FROM_KUAL_CMD="$DIR/launch-from-kual.sh" +START_DASHBOARD_CMD="$DIR/start.sh" +LOG_FILE="$DIR/logs/kual-theme-launch.log" requested_theme_id=${1:?"usage: launch-theme-from-kual.sh [orientation]"} requested_orientation=${2:-} -# KUAL 里的主题入口先切主题,再复用现有的 launch-from-kual 启动链。 -# 这样可以保留当前已经收敛过的 KUAL 退出与 detached 启动逻辑, -# 同时把“选主题”前移到进入 dashboard 之前。 -if [ -n "$requested_orientation" ]; then - "$SWITCH_THEME_CMD" "$requested_theme_id" "$requested_orientation" -else - "$SWITCH_THEME_CMD" "$requested_theme_id" -fi +# shellcheck disable=SC1090 +[ -f "$ENV_FILE" ] && . "$ENV_FILE" -exec "$LAUNCH_FROM_KUAL_CMD" +KUAL_QUIT_GRACE_SECONDS="${KUAL_QUIT_GRACE_SECONDS:-0}" +KUAL_APP_ID="${KUAL_APP_ID:-app://com.mobileread.ixtab.kindlelauncher}" + +# KUAL 菜单项本身应该尽快返回,让 KUAL 自己先退回首页。 +# 真正的“切主题 + 启动 dashboard”放到独立 session 里继续跑, +# 避免动作链被 KUAL 退出过程提前打断。 +# 这里直接起 start.sh,不再额外绕一层 launch-from-kual.sh, +# 尽量减少首页闪出的可见窗口。 +mkdir -p "$(dirname "$LOG_FILE")" + +if command -v setsid >/dev/null 2>&1; then + nohup setsid /bin/sh -c ' + theme_id=$1 + theme_orientation=$2 + switch_cmd=$3 + start_cmd=$4 + log_file=$5 + target_dir=$6 + kual_app_id=$7 + quit_grace=$8 + + printf "%s launch-theme worker start theme=%s orientation=%s\n" "$(date 2>/dev/null || true)" "$theme_id" "${theme_orientation:-default}" >>"$log_file" + + # 旧 dashboard 还活着时,会继续按旧状态补画时钟,导致画面叠层。 + # 这里在真正切主题前先清掉旧实例,确保后面只剩一条主循环。 + pkill -f "$target_dir/dash.sh" 2>/dev/null || true + pkill -f "$target_dir/local/theme-menu-service.sh" 2>/dev/null || true + pkill -f "$target_dir/local/touch-home-service.sh" 2>/dev/null || true + + # 主题链路也沿用 KUAL 的正常退出路径,避免我们刚把 calendar 画出来, + # KUAL 又把前台切回首页。 + if command -v lipc-set-prop >/dev/null 2>&1; then + lipc-set-prop com.lab126.appmgrd stop "$kual_app_id" >/dev/null 2>&1 || true + fi + + if [ "$quit_grace" -gt 0 ] 2>/dev/null; then + sleep "$quit_grace" + fi + + if [ -n "$theme_orientation" ]; then + "$switch_cmd" "$theme_id" "$theme_orientation" >>"$log_file" 2>&1 + else + "$switch_cmd" "$theme_id" >>"$log_file" 2>&1 + fi + + exec "$start_cmd" >>"$log_file" 2>&1 + ' sh "$requested_theme_id" "$requested_orientation" "$SWITCH_THEME_CMD" "$START_DASHBOARD_CMD" "$LOG_FILE" "$DIR" "$KUAL_APP_ID" "$KUAL_QUIT_GRACE_SECONDS" >/dev/null 2>&1 & +else + nohup /bin/sh -c ' + theme_id=$1 + theme_orientation=$2 + switch_cmd=$3 + start_cmd=$4 + log_file=$5 + target_dir=$6 + kual_app_id=$7 + quit_grace=$8 + + printf "%s launch-theme worker start theme=%s orientation=%s\n" "$(date 2>/dev/null || true)" "$theme_id" "${theme_orientation:-default}" >>"$log_file" + + # 旧 dashboard 还活着时,会继续按旧状态补画时钟,导致画面叠层。 + # 这里在真正切主题前先清掉旧实例,确保后面只剩一条主循环。 + pkill -f "$target_dir/dash.sh" 2>/dev/null || true + pkill -f "$target_dir/local/theme-menu-service.sh" 2>/dev/null || true + pkill -f "$target_dir/local/touch-home-service.sh" 2>/dev/null || true + + # 主题链路也沿用 KUAL 的正常退出路径,避免我们刚把 calendar 画出来, + # KUAL 又把前台切回首页。 + if command -v lipc-set-prop >/dev/null 2>&1; then + lipc-set-prop com.lab126.appmgrd stop "$kual_app_id" >/dev/null 2>&1 || true + fi + + if [ "$quit_grace" -gt 0 ] 2>/dev/null; then + sleep "$quit_grace" + fi + + if [ -n "$theme_orientation" ]; then + "$switch_cmd" "$theme_id" "$theme_orientation" >>"$log_file" 2>&1 + else + "$switch_cmd" "$theme_id" >>"$log_file" 2>&1 + fi + + exec "$start_cmd" >>"$log_file" 2>&1 + ' sh "$requested_theme_id" "$requested_orientation" "$SWITCH_THEME_CMD" "$START_DASHBOARD_CMD" "$LOG_FILE" "$DIR" "$KUAL_APP_ID" "$KUAL_QUIT_GRACE_SECONDS" >/dev/null 2>&1 & +fi diff --git a/dash/staging/post-jailbreak-root/dashboard/local/env.sh b/dash/staging/post-jailbreak-root/dashboard/local/env.sh index d0e9d0c..7b9eae9 100644 --- a/dash/staging/post-jailbreak-root/dashboard/local/env.sh +++ b/dash/staging/post-jailbreak-root/dashboard/local/env.sh @@ -2,8 +2,18 @@ # Export environment variables here export WIFI_TEST_IP=${WIFI_TEST_IP:-1.1.1.1} -# 测试配置:全天每分钟刷新一次,便于验证图片拉取与屏幕刷新是否正常。 +# 设备侧时钟刷新节奏。 +# 当前默认每分钟刷新一次;debug on 与 debug off 都走这条分钟调度。 export REFRESH_SCHEDULE=${REFRESH_SCHEDULE:-"* * * * *"} +# 是否允许按 REFRESH_SCHEDULE 自动点亮 screen。 +# 默认关闭;debug off 下分钟刷新仍会执行,但不会因为调度本身把屏幕维持在可视态。 +# 只有 debug on,或手动短按 power 进入的 5 分钟窗口,才把屏幕留在可视态。 +export SCHEDULED_SCREEN_WAKE_ENABLED=${SCHEDULED_SCREEN_WAKE_ENABLED:-false} +# 静默远端同步的唤醒节奏。 +# 默认每天凌晨 00:10 唤醒一次,用来拉当天最新背景、主题 JSON 和全量主题图片, +# 但不主动点亮 screen。 +export REMOTE_SYNC_SCHEDULE=${REMOTE_SYNC_SCHEDULE:-"10 0 * * *"} +export REMOTE_SYNC_ENABLED=${REMOTE_SYNC_ENABLED:-true} # 调度计算依赖 next-wakeup 这个 Rust 程序,它要求使用 IANA 时区名。 # 这里必须保留 Asia/Shanghai,才能正确计算下一次唤醒时间。 export TIMEZONE=${TIMEZONE:-"Asia/Shanghai"} @@ -16,7 +26,16 @@ export THEMES_INDEX_REFRESH_INTERVAL_MINUTES=${THEMES_INDEX_REFRESH_INTERVAL_MIN export THEME_CONFIG_REFRESH_INTERVAL_MINUTES=${THEME_CONFIG_REFRESH_INTERVAL_MINUTES:-1440} export THEME_ID=${THEME_ID:-"default"} export ORIENTATION=${ORIENTATION:-"portrait"} -export BACKGROUND_REFRESH_INTERVAL_MINUTES=${BACKGROUND_REFRESH_INTERVAL_MINUTES:-120} +export WEATHER_USE_KINDLE_LOCATION=${WEATHER_USE_KINDLE_LOCATION:-true} +export LOCATION_GEOIP_URL=${LOCATION_GEOIP_URL:-"https://ipwho.is/"} +export LOCATION_REFRESH_INTERVAL_MINUTES=${LOCATION_REFRESH_INTERVAL_MINUTES:-720} +export LOCATION_FALLBACK_CITY=${LOCATION_FALLBACK_CITY:-"杭州"} +export LOCATION_FALLBACK_LAT=${LOCATION_FALLBACK_LAT:-30.274084} +export LOCATION_FALLBACK_LON=${LOCATION_FALLBACK_LON:-120.155070} +export LOCATION_FALLBACK_TIMEZONE=${LOCATION_FALLBACK_TIMEZONE:-"Asia/Shanghai"} +# 日历背景在跨天时必须至少更新一次;平时不需要高频拉图。 +# 这里默认按 24 小时做兜底,同时 dash.sh 里还会在北京时间跨天后强制补一次刷新。 +export BACKGROUND_REFRESH_INTERVAL_MINUTES=${BACKGROUND_REFRESH_INTERVAL_MINUTES:-1440} export CLOCK_REGION_X=${CLOCK_REGION_X:-347} export CLOCK_REGION_Y=${CLOCK_REGION_Y:-55} export CLOCK_REGION_WIDTH=${CLOCK_REGION_WIDTH:-220} @@ -44,18 +63,22 @@ export CLOCK_CENTER_RADIUS=${CLOCK_CENTER_RADIUS:-7} # 这段时间会从真正的休眠时长里扣掉,避免分钟刷新慢一拍。 export PRE_SLEEP_GRACE_SECONDS=${PRE_SLEEP_GRACE_SECONDS:-10} # 手动短按电源键把 Kindle 提前唤醒后,额外保持前台显示的秒数。 -# 这样用户有足够时间看屏、切主题或继续交互,而不会立刻再次休眠。 -export MANUAL_WAKE_KEEP_AWAKE_SECONDS=${MANUAL_WAKE_KEEP_AWAKE_SECONDS:-60} +# debug off 下这里固定为 300 秒,也就是按 power 之后保持 5 分钟可视窗口。 +export MANUAL_WAKE_KEEP_AWAKE_SECONDS=${MANUAL_WAKE_KEEP_AWAKE_SECONDS:-300} # 如果实际休眠时长比计划值至少少这么多秒,就认为是被用户手动提前唤醒。 export MANUAL_WAKE_EARLY_TOLERANCE_SECONDS=${MANUAL_WAKE_EARLY_TOLERANCE_SECONDS:-5} +# 默认 overlay/静默同步模式下,不再提前显示 sleeping.png。 +# Voyage 上这张图只有 600x800,提前显示时会只占左上角一块并盖住当前 calendar。 +# 如需恢复旧的“休眠前先显示提示图”行为,可手动改回 true。 +export SLEEPING_SCREEN_ENABLED=${SLEEPING_SCREEN_ENABLED:-false} -# Voyage 顶部状态栏遮罩:用于压住系统偶尔重画出来的时间、Wi-Fi、电池图标。 -# 当前坐标只覆盖页面顶部空白带,不会擦到天气卡上边框。 +# Voyage 顶部状态栏遮罩:用于压住系统偶尔重画出来的时间、Wi‑Fi、电池图标。 +# 遮罩只覆盖右上角状态区,避免继续压住 calendar 自己的顶部内容。 export STATUS_MASK_ENABLED=${STATUS_MASK_ENABLED:-true} -export STATUS_MASK_LEFT=${STATUS_MASK_LEFT:-700} +export STATUS_MASK_LEFT=${STATUS_MASK_LEFT:-600} export STATUS_MASK_TOP=${STATUS_MASK_TOP:-0} -export STATUS_MASK_WIDTH=${STATUS_MASK_WIDTH:-372} -export STATUS_MASK_HEIGHT=${STATUS_MASK_HEIGHT:-24} +export STATUS_MASK_WIDTH=${STATUS_MASK_WIDTH:-360} +export STATUS_MASK_HEIGHT=${STATUS_MASK_HEIGHT:-48} export STATUS_MASK_PASSES=${STATUS_MASK_PASSES:-3} export STATUS_MASK_DELAY_SECONDS=${STATUS_MASK_DELAY_SECONDS:-1} diff --git a/dash/staging/post-jailbreak-root/dashboard/local/fetch-dashboard.sh b/dash/staging/post-jailbreak-root/dashboard/local/fetch-dashboard.sh index 897126d..4ce782e 100755 --- a/dash/staging/post-jailbreak-root/dashboard/local/fetch-dashboard.sh +++ b/dash/staging/post-jailbreak-root/dashboard/local/fetch-dashboard.sh @@ -6,6 +6,13 @@ output_path=${1:?"missing output path"} DIR="$(CDPATH= cd -- "$(dirname "$0")" && pwd)" ENV_FILE="$DIR/env.sh" THEME_RUNTIME_ENV_FILE="$DIR/state/theme-runtime.env" +local_only=false + +if [ "${1:-}" = "--local-only" ]; then + local_only=true + shift + output_path=${1:?"missing output path"} +fi # fetch-dashboard 既会被 dash.sh 调,也会被 switch-theme.sh 单独调。 # 因此这里每次都重新读取一次运行时主题配置,确保拿到当前背景地址。 @@ -16,17 +23,71 @@ THEME_RUNTIME_ENV_FILE="$DIR/state/theme-runtime.env" background_path=${BACKGROUND_PATH:-""} background_url=${BACKGROUND_URL:-"https://shell.biboer.cn:20001/kindlebg.png"} +weather_use_kindle_location=${WEATHER_USE_KINDLE_LOCATION:-false} local_background_path="" if [ -n "$background_path" ]; then local_background_path="$DIR/../$background_path" fi -# 主题背景如果已经随本地部署同步到 Kindle,优先直接拷贝本地文件, -# 这样切换主题时不依赖远端图片资源是否已经发布完成。 -if [ -n "$local_background_path" ] && [ -f "$local_background_path" ]; then - cp "$local_background_path" "$output_path" +copy_local_background() { + if [ -n "$local_background_path" ] && [ -f "$local_background_path" ]; then + cp "$local_background_path" "$output_path" + return 0 + fi + + echo "本地主题包缺少背景图:${background_path:-unknown}" >&2 + return 1 +} + +is_valid_png() { + candidate_path=$1 + + if [ ! -f "$candidate_path" ]; then + return 1 + fi + + # Kindle 端已经确认有 file 命令;如果将来某台机器没有,再回退到 PNG 签名检查。 + if command -v file >/dev/null 2>&1; then + if file "$candidate_path" 2>/dev/null | grep -q "PNG image data"; then + return 0 + fi + fi + + signature=$(dd if="$candidate_path" bs=8 count=1 2>/dev/null | od -An -tx1 | tr -d ' \n') + [ "$signature" = "89504e470d0a1a0a" ] +} + +if [ "$local_only" = true ]; then + # KUAL 触发的切主题链路必须尽快返回,所以这里严格只读本地素材。 + # 如果本地包缺图,直接失败,让问题暴露出来,而不是把联网等待塞进交互里。 + copy_local_background + exit $? +fi + +if [ "$weather_use_kindle_location" = true ] && copy_local_background; then exit 0 fi -"$DIR/../xh" -d -q -o "$output_path" get "$background_url" +# 定时背景刷新和启动阶段走这里时,优先尝试拉远端最新背景。 +# 如果远端暂时失败,再回退到本地包,至少保证 dashboard 还能继续显示。 +remote_tmp_path="${output_path}.remote.$$" +rm -f "$remote_tmp_path" + +if "$DIR/../xh" -d -q -o "$remote_tmp_path" get "$background_url"; then + if is_valid_png "$remote_tmp_path"; then + mv "$remote_tmp_path" "$output_path" + exit 0 + fi + + echo "远端背景不是有效 PNG,忽略本次响应并回退本地主题包:$background_url" >&2 +fi + +rm -f "$remote_tmp_path" + +if copy_local_background; then + exit 0 +fi + +echo "远端背景拉取失败,且本地主题包也缺少背景图:${background_path:-unknown}" >&2 +exit 1 diff --git a/dash/staging/post-jailbreak-root/dashboard/local/location-env.sh b/dash/staging/post-jailbreak-root/dashboard/local/location-env.sh new file mode 100644 index 0000000..8084aff --- /dev/null +++ b/dash/staging/post-jailbreak-root/dashboard/local/location-env.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env sh +set -eu + +DIR="$(CDPATH= cd -- "$(dirname "$0")" && pwd)" +ENV_FILE="$DIR/env.sh" +STATE_DIR="$DIR/state" +LOCATION_CACHE_FILE="$STATE_DIR/location.env" +LOCATION_SYNC_CMD="$DIR/location-sync.sh" +refresh_if_needed=false +force_refresh=false + +while [ "$#" -gt 0 ]; do + case "$1" in + --refresh-if-needed) + refresh_if_needed=true + ;; + --force-refresh) + force_refresh=true + ;; + *) + echo "Unknown argument: $1" >&2 + exit 1 + ;; + esac + shift +done + +[ -f "$ENV_FILE" ] && . "$ENV_FILE" + +if [ "$force_refresh" = true ]; then + "$LOCATION_SYNC_CMD" --force >/dev/null 2>&1 || true +elif [ "$refresh_if_needed" = true ]; then + "$LOCATION_SYNC_CMD" >/dev/null 2>&1 || true +fi + +location_source="fallback" +location_city=${LOCATION_FALLBACK_CITY:-杭州} +location_lat=${LOCATION_FALLBACK_LAT:-30.274084} +location_lon=${LOCATION_FALLBACK_LON:-120.155070} +location_timezone=${LOCATION_FALLBACK_TIMEZONE:-Asia/Shanghai} + +if [ -f "$LOCATION_CACHE_FILE" ]; then + . "$LOCATION_CACHE_FILE" + + if [ -n "${LOCATION_LAT:-}" ] && [ -n "${LOCATION_LON:-}" ]; then + location_source=${LOCATION_SOURCE:-geoip} + location_city=${LOCATION_CITY:-$location_city} + location_lat=${LOCATION_LAT} + location_lon=${LOCATION_LON} + location_timezone=${LOCATION_TIMEZONE:-$location_timezone} + fi +fi + +quote_for_shell() { + printf "%s" "$1" | sed "s/'/'\\\\''/g" +} + +printf "export LOCATION_SOURCE='%s'\n" "$(quote_for_shell "$location_source")" +printf "export LOCATION_CITY='%s'\n" "$(quote_for_shell "$location_city")" +printf "export LOCATION_LAT='%s'\n" "$(quote_for_shell "$location_lat")" +printf "export LOCATION_LON='%s'\n" "$(quote_for_shell "$location_lon")" +printf "export LOCATION_TIMEZONE='%s'\n" "$(quote_for_shell "$location_timezone")" diff --git a/dash/staging/post-jailbreak-root/dashboard/local/location-sync.sh b/dash/staging/post-jailbreak-root/dashboard/local/location-sync.sh new file mode 100644 index 0000000..a0a61e6 --- /dev/null +++ b/dash/staging/post-jailbreak-root/dashboard/local/location-sync.sh @@ -0,0 +1,163 @@ +#!/usr/bin/env sh +set -eu + +DIR="$(CDPATH= cd -- "$(dirname "$0")" && pwd)" +ENV_FILE="$DIR/env.sh" +STATE_DIR="$DIR/state" +LOCATION_CACHE_FILE="$STATE_DIR/location.env" +FETCH_CMD="$DIR/../xh" +force_refresh=false + +while [ "$#" -gt 0 ]; do + case "$1" in + --force) + force_refresh=true + ;; + *) + echo "Unknown argument: $1" >&2 + exit 1 + ;; + esac + shift +done + +[ -f "$ENV_FILE" ] && . "$ENV_FILE" + +mkdir -p "$STATE_DIR" + +current_epoch() { + date '+%s' +} + +cache_refresh_due() { + if [ ! -f "$LOCATION_CACHE_FILE" ]; then + return 0 + fi + + last_epoch=$(awk -F= '/^export LOCATION_UPDATED_AT_EPOCH=/{gsub("'"'"'", "", $2); print $2; exit}' "$LOCATION_CACHE_FILE" 2>/dev/null || true) + if [ -z "$last_epoch" ]; then + return 0 + fi + + now_epoch=$(current_epoch) + [ $((now_epoch - last_epoch)) -ge $((LOCATION_REFRESH_INTERVAL_MINUTES * 60)) ] +} + +extract_geoip_fields() { + payload_path=$1 + + lua - "$payload_path" <<'LUA' +local path = arg[1] +local file = io.open(path, "r") +if not file then + os.exit(1) +end + +local data = file:read("*a") +file:close() + +if data:match('"success"%s*:%s*false') then + os.exit(1) +end + +local function match_string(source, pattern) + local value = source:match(pattern) + if not value then + return nil + end + + return value + :gsub('\\"', '"') + :gsub("\\\\", "\\") +end + +local city = match_string(data, '"city"%s*:%s*"(.-)"') +local latitude = data:match('"latitude"%s*:%s*(-?%d+%.?%d*)') +local longitude = data:match('"longitude"%s*:%s*(-?%d+%.?%d*)') +local timezone_block = data:match('"timezone"%s*:%s*(%b{})') +local timezone = timezone_block and match_string(timezone_block, '"id"%s*:%s*"(.-)"') or nil + +if not latitude or not longitude then + os.exit(1) +end + +print("CITY=" .. (city or "当前位置")) +print("LAT=" .. latitude) +print("LON=" .. longitude) +print("TIMEZONE=" .. (timezone or "Asia/Shanghai")) +LUA +} + +quote_for_shell() { + printf "%s" "$1" | sed "s/'/'\\\\''/g" +} + +if [ "$force_refresh" != true ] && ! cache_refresh_due; then + exit 0 +fi + +if [ ! -x "$FETCH_CMD" ]; then + echo "Location sync failed: xh is unavailable" >&2 + exit 1 +fi + +payload_path="$STATE_DIR/location-response.$$" +rm -f "$payload_path" + +if ! "$FETCH_CMD" -d -q -o "$payload_path" get "$LOCATION_GEOIP_URL"; then + rm -f "$payload_path" + echo "Location sync failed: GeoIP request failed" >&2 + exit 1 +fi + +location_city="" +location_lat="" +location_lon="" +location_timezone="" + +if ! parsed_output=$(extract_geoip_fields "$payload_path"); then + rm -f "$payload_path" + echo "Location sync failed: unable to parse GeoIP payload" >&2 + exit 1 +fi + +rm -f "$payload_path" + +while IFS='=' read -r key value; do + case "$key" in + CITY) + location_city=$value + ;; + LAT) + location_lat=$value + ;; + LON) + location_lon=$value + ;; + TIMEZONE) + location_timezone=$value + ;; + esac +done <&2 + exit 1 +fi + +now_epoch=$(current_epoch) +now_iso=$(date '+%Y-%m-%dT%H:%M:%S%z' | sed 's/\(..\)$/:\1/') + +cat >"$LOCATION_CACHE_FILE" </dev/null 2>&1; then + if file "$candidate_path" 2>/dev/null | grep -q "PNG image data"; then + return 0 + fi + fi + + signature=$(dd if="$candidate_path" bs=8 count=1 2>/dev/null | od -An -tx1 | tr -d ' \n') + [ "$signature" = "89504e470d0a1a0a" ] +} + +fetch_png_to_path() { + url=$1 + output_path=$2 + tmp_path="${output_path}.tmp.$$" + + rm -f "$tmp_path" + + if ! "$FETCH_CMD" -d -q -o "$tmp_path" get "$url"; then + rm -f "$tmp_path" + return 1 + fi + + if ! is_valid_png "$tmp_path"; then + rm -f "$tmp_path" + return 1 + fi + + mv "$tmp_path" "$output_path" + return 0 +} + +cleanup_stale_files() { + target_dir=$1 + expected_file=$2 + pattern=$3 + + for existing_path in "$target_dir"/$pattern; do + [ -e "$existing_path" ] || continue + + existing_name=$(basename "$existing_path") + if ! grep -Fqx "$existing_name" "$expected_file"; then + rm -f "$existing_path" + fi + done +} + +echo "Syncing all theme backgrounds from remote" +"$WAIT_FOR_WIFI_CMD" "$WIFI_TEST_IP" + +if ! fetch_to_path "$THEMES_INDEX_URL" "$THEMES_INDEX_CACHE"; then + echo "Themes index fetch failed: $THEMES_INDEX_URL" >&2 + exit 1 +fi + +cp "$THEMES_INDEX_CACHE" "$LOCAL_THEMES_INDEX" +: >"$EXPECTED_THEMES_FILE" +: >"$EXPECTED_BACKGROUNDS_FILE" + +theme_configs=$(lua "$THEME_JSON_LUA" list-configs "$THEMES_INDEX_CACHE") + +if [ -z "$theme_configs" ]; then + echo "Themes index is empty." >&2 + exit 1 +fi + +printf '%s\n' "$theme_configs" | while IFS="$(printf '\t')" read -r theme_id config_url; do + [ -n "$theme_id" ] || continue + [ -n "$config_url" ] || continue + + local_theme_config="$LOCAL_THEMES_DIR/$theme_id.json" + if ! fetch_to_path "$config_url" "$local_theme_config"; then + echo "Theme config fetch failed: $theme_id $config_url" >&2 + exit 1 + fi + + printf '%s\n' "$(basename "$local_theme_config")" >>"$EXPECTED_THEMES_FILE" + + theme_backgrounds=$(lua "$THEME_JSON_LUA" list-backgrounds "$local_theme_config") + if [ -z "$theme_backgrounds" ]; then + echo "Theme config has no backgrounds: $theme_id" >&2 + exit 1 + fi + + printf '%s\n' "$theme_backgrounds" | while IFS="$(printf '\t')" read -r orientation background_path background_url; do + [ -n "$background_path" ] || continue + [ -n "$background_url" ] || continue + + background_file=$(basename "$background_path") + local_background_path="$LOCAL_BACKGROUND_DIR/$background_file" + + if ! fetch_png_to_path "$background_url" "$local_background_path"; then + echo "Theme background fetch failed: $theme_id $orientation $background_url" >&2 + exit 1 + fi + + printf '%s\n' "$background_file" >>"$EXPECTED_BACKGROUNDS_FILE" + done +done + +cleanup_stale_files "$LOCAL_THEMES_DIR" "$EXPECTED_THEMES_FILE" "*.json" +cleanup_stale_files "$LOCAL_BACKGROUND_DIR" "$EXPECTED_BACKGROUNDS_FILE" "*.png" + +echo "Theme background sync completed" diff --git a/dash/staging/post-jailbreak-root/dashboard/local/theme-json.lua b/dash/staging/post-jailbreak-root/dashboard/local/theme-json.lua index faf19ba..d245753 100644 --- a/dash/staging/post-jailbreak-root/dashboard/local/theme-json.lua +++ b/dash/staging/post-jailbreak-root/dashboard/local/theme-json.lua @@ -234,6 +234,56 @@ local function first_orientation(theme, fallback) return (theme.orientations or {})[1] or fallback end +local function orientation_label(orientation) + if orientation == "landscape" then + return "横屏" + end + + if orientation == "portrait" then + return "竖屏" + end + + return orientation +end + +local function ordered_variant_keys(variants) + local keys = {} + local seen = {} + local preferred = {"portrait", "landscape"} + + for _, key in ipairs(preferred) do + if variants[key] ~= nil then + keys[#keys + 1] = key + seen[key] = true + end + end + + for key, _ in pairs(variants) do + if not seen[key] then + keys[#keys + 1] = key + end + end + + table.sort(keys, function(left, right) + return left < right + end) + + for index = #preferred, 1, -1 do + local key = preferred[index] + if seen[key] then + for key_index, value in ipairs(keys) do + if value == key then + table.remove(keys, key_index) + table.insert(keys, 1, key) + break + end + end + end + end + + return keys +end + local function shell_quote(value) return "'" .. tostring(value):gsub("'", [['"'"']]) .. "'" end @@ -330,11 +380,45 @@ end if command == "list" then local index_path = assert(arg[2], "missing themes index path") local index_data = decode(read_file(index_path)) + local orientation_order = {"landscape", "portrait"} for _, theme in ipairs(index_data.themes or {}) do - io.write(theme.id or "", "\t") - io.write(theme.label or theme.id or "", "\t") - io.write(table.concat(theme.orientations or {}, ","), "\n") + for _, orientation in ipairs(orientation_order) do + if orientation_exists(theme, orientation) then + io.write(theme.id or "", "\t") + io.write((theme.id or "") .. "-" .. orientation_label(orientation), "\t") + io.write(orientation, "\n") + end + end + end + + return +end + +if command == "list-configs" then + local index_path = assert(arg[2], "missing themes index path") + local index_data = decode(read_file(index_path)) + + for _, theme in ipairs(index_data.themes or {}) do + if theme.id ~= nil and theme.configUrl ~= nil then + io.write(theme.id, "\t", theme.configUrl, "\n") + end + end + + return +end + +if command == "list-backgrounds" then + local theme_path = assert(arg[2], "missing theme config path") + local theme_data = decode(read_file(theme_path)) + local variants = assert(theme_data.variants, "missing variants") + + for _, orientation in ipairs(ordered_variant_keys(variants)) do + local variant = variants[orientation] + local background = variant.background or {} + if background.path ~= nil and background.url ~= nil then + io.write(orientation, "\t", background.path, "\t", background.url, "\n") + end end return diff --git a/dash/staging/post-jailbreak-root/dashboard/local/theme-menu-service.sh b/dash/staging/post-jailbreak-root/dashboard/local/theme-menu-service.sh index 4c0d603..f00adb7 100644 --- a/dash/staging/post-jailbreak-root/dashboard/local/theme-menu-service.sh +++ b/dash/staging/post-jailbreak-root/dashboard/local/theme-menu-service.sh @@ -15,7 +15,7 @@ RUNTIME_DIR_DEFAULT="/tmp/kindle-dash-theme-menu" EVENT_DEVICE_DEFAULT="/dev/input/event2" THEME_MENU_COMBO_WINDOW_SECONDS_DEFAULT="0.35" HOME_MENU_ITEM_ID="__return_home__" -HOME_MENU_ITEM_LABEL="Return Home" +HOME_MENU_ITEM_LABEL="返回" # shellcheck disable=SC1090 [ -f "$ENV_FILE" ] && . "$ENV_FILE" @@ -114,8 +114,8 @@ theme_field() { } current_theme_index() { - awk -F '\t' -v current_theme="$current_theme_id" ' - $1 == current_theme { + awk -F '\t' -v current_theme="$current_theme_id" -v current_orientation="$current_orientation" ' + $1 == current_theme && $3 == current_orientation { print NR found = 1 exit @@ -138,6 +138,9 @@ print_line() { render_menu() { total_themes=$(theme_count) current_label=$(theme_field "$selected_index" 2) + grid_left_col=3 + grid_right_col=24 + grid_start_row=8 /usr/sbin/eips -c print_line 3 1 "Kindle Dashboard" @@ -146,26 +149,35 @@ render_menu() { print_line 3 6 "Selected: $current_label" print_line 3 7 "--------------------------------" - row=9 index=1 while [ "$index" -le "$total_themes" ]; do theme_label=$(theme_field "$index" 2) - theme_id=$(theme_field "$index" 1) prefix=" " line_text="" + row=0 + col=0 if [ "$index" -eq "$selected_index" ]; then prefix="> " fi - if [ "$theme_id" = "$HOME_MENU_ITEM_ID" ]; then - line_text="${prefix}${theme_label}" + line_text="${prefix}${theme_label}" + + if [ "$index" -le 8 ]; then + row_offset=$(( (index - 1) / 2 )) + row=$((grid_start_row + row_offset * 2)) + + if [ $((index % 2)) -eq 1 ]; then + col=$grid_left_col + else + col=$grid_right_col + fi else - line_text="${prefix}${theme_label} (${theme_id})" + row=16 + col=3 fi - print_line 3 "$row" "$line_text" - row=$((row + 2)) + print_line "$col" "$row" "$line_text" index=$((index + 1)) done @@ -198,6 +210,7 @@ move_selection() { apply_selection() { selected_theme_id=$(theme_field "$selected_index" 1) + selected_orientation=$(theme_field "$selected_index" 3) /usr/sbin/eips -c if [ "$selected_theme_id" = "$HOME_MENU_ITEM_ID" ]; then @@ -209,10 +222,10 @@ apply_selection() { return fi - log_event "apply theme=$selected_theme_id orientation=$current_orientation" + log_event "apply theme=$selected_theme_id orientation=$selected_orientation" print_line 3 5 "Applying theme..." - print_line 3 7 "$selected_theme_id / $current_orientation" - "$SWITCH_THEME_CMD" "$selected_theme_id" "$current_orientation" + print_line 3 7 "$selected_theme_id / $selected_orientation" + "$SWITCH_THEME_CMD" "$selected_theme_id" "$selected_orientation" menu_open=false } diff --git a/dash/staging/post-jailbreak-root/dashboard/local/theme-sync.sh b/dash/staging/post-jailbreak-root/dashboard/local/theme-sync.sh index 02f35f6..9c19f31 100644 --- a/dash/staging/post-jailbreak-root/dashboard/local/theme-sync.sh +++ b/dash/staging/post-jailbreak-root/dashboard/local/theme-sync.sh @@ -25,6 +25,7 @@ mkdir -p "$STATE_DIR" force_index=false force_theme=false +local_only=false requested_theme_id=${THEME_ID:-default} requested_orientation=${ORIENTATION:-portrait} @@ -36,6 +37,9 @@ while [ "$#" -gt 0 ]; do --force-theme) force_theme=true ;; + --local-only) + local_only=true + ;; --theme) shift requested_theme_id=${1:?"missing theme id"} @@ -118,6 +122,11 @@ sync_themes_index() { return 0 fi + if [ "$local_only" = true ]; then + echo "本地主题包缺少 themes.json。" >&2 + return 1 + fi + # 主题清单是全局入口,平时按天同步一次即可。 # 真正切换主题时会走 --force-index,确保马上拿到最新列表。 if [ "$force_index" = true ] || [ ! -f "$THEMES_INDEX_CACHE" ] || refresh_due "$THEMES_INDEX_TIMESTAMP_FILE" "$THEMES_INDEX_REFRESH_INTERVAL_MINUTES"; then @@ -165,6 +174,11 @@ sync_theme_config() { return 0 fi + if [ "$local_only" = true ]; then + echo "本地主题包缺少主题配置:$resolved_theme_id" >&2 + return 1 + fi + # 主题配置按 theme 维度缓存; # orientation 只是同一个主题 JSON 里的 variant,切换方向不需要重新拉整份配置。 needs_theme_fetch=$force_theme diff --git a/dash/staging/post-jailbreak-root/dashboard/start.sh b/dash/staging/post-jailbreak-root/dashboard/start.sh index 51799fc..8fd558f 100755 --- a/dash/staging/post-jailbreak-root/dashboard/start.sh +++ b/dash/staging/post-jailbreak-root/dashboard/start.sh @@ -6,15 +6,32 @@ DIR="$(dirname "$0")" ENV_FILE="$DIR/local/env.sh" THEME_FILE="$DIR/local/theme.env" LOG_FILE="$DIR/logs/dash.log" +PID_FILE="$DIR/local/state/dashboard.pid" mkdir -p "$(dirname "$LOG_FILE")" +mkdir -p "$DIR/local/state" # shellcheck disable=SC1090 [ -f "$ENV_FILE" ] && . "$ENV_FILE" # shellcheck disable=SC1090 [ -f "$THEME_FILE" ] && . "$THEME_FILE" +stop_existing_dashboard_processes() { + # 主题切换后再次 start 时,旧的 dash 主循环如果还活着, + # 会继续按旧主题或旧坐标补画时钟,最终在屏幕上叠出两个时钟。 + # 这里统一先清掉旧实例,再启动新的单实例 dashboard。 + pkill -f "$DIR/dash.sh" 2>/dev/null || true + pkill -f "$DIR/local/theme-menu-service.sh" 2>/dev/null || true + pkill -f "$DIR/local/touch-home-service.sh" 2>/dev/null || true + sleep 1 +} + +stop_existing_dashboard_processes + +echo "start.sh invoked at $(date '+%Y-%m-%d %H:%M:%S %Z') with DEBUG=$DEBUG" >>"$LOG_FILE" + if [ "$DEBUG" = true ]; then + printf '%s\n' "$$" >"$PID_FILE" "$DIR/dash.sh" else # 通过 SSH 或 KUAL 触发时,父 shell 很快就会退出。 @@ -25,4 +42,7 @@ else else nohup "$DIR/dash.sh" >>"$LOG_FILE" 2>&1 "$PID_FILE" + echo "start.sh spawned dashboard launcher pid=$!" >>"$LOG_FILE" fi diff --git a/dash/staging/post-jailbreak-root/dashboard/switch-theme.sh b/dash/staging/post-jailbreak-root/dashboard/switch-theme.sh index b62867f..665cf7e 100644 --- a/dash/staging/post-jailbreak-root/dashboard/switch-theme.sh +++ b/dash/staging/post-jailbreak-root/dashboard/switch-theme.sh @@ -7,10 +7,8 @@ THEME_FILE="$DIR/local/theme.env" THEME_RUNTIME_ENV_FILE="$DIR/local/state/theme-runtime.env" BACKGROUND_TIMESTAMP_FILE="$DIR/local/state/background-updated-at" BACKGROUND_PNG="$DIR/kindlebg.png" -WAIT_FOR_WIFI_CMD="$DIR/wait-for-wifi.sh" THEME_SYNC_CMD="$DIR/local/theme-sync.sh" FETCH_DASHBOARD_CMD="$DIR/local/fetch-dashboard.sh" -CLOCK_RENDER_CMD="$DIR/local/render-clock.sh" # shellcheck disable=SC1090 [ -f "$ENV_FILE" ] && . "$ENV_FILE" @@ -22,16 +20,19 @@ requested_orientation=${2:-${ORIENTATION:-portrait}} mkdir -p "$DIR/local/state" -# 切换主题时必须立刻联网拉到最新配置和背景, -# 否则用户会看到 theme.env 已更新,但屏幕内容仍停留在旧主题。 echo "Switching theme to $requested_theme_id / $requested_orientation" -"$WAIT_FOR_WIFI_CMD" "$WIFI_TEST_IP" -"$THEME_SYNC_CMD" --force-index --force-theme --theme "$requested_theme_id" --orientation "$requested_orientation" >/dev/null +# KUAL 切主题的目标是尽快把 calendar 画出来。 +# 这里强制只用设备上已经同步好的本地主题素材,避免因为网络抖动 +# 又回到首页停留几秒,破坏“直接切到 calendar”的体感。 +"$THEME_SYNC_CMD" --local-only --theme "$requested_theme_id" --orientation "$requested_orientation" >/dev/null # shellcheck disable=SC1090 . "$THEME_RUNTIME_ENV_FILE" -"$FETCH_DASHBOARD_CMD" "$BACKGROUND_PNG" +# 背景图同样只从本地主题包读取。 +# 如果本地包缺图,直接失败,让问题暴露出来;补素材应走后台同步或重新部署, +# 不能把联网等待塞回用户点击主题这条交互链路里。 +"$FETCH_DASHBOARD_CMD" --local-only "$BACKGROUND_PNG" date '+%s' >"$BACKGROUND_TIMESTAMP_FILE" # 只有在主题配置和背景都成功拉取后,才把当前选择持久化到 theme.env。 @@ -41,6 +42,9 @@ export ORIENTATION='${ORIENTATION}' EOF /usr/sbin/eips -f -g "$BACKGROUND_PNG" -"$CLOCK_RENDER_CMD" true + +# 这里不再同步阻塞等待时钟重绘。 +# 背景先尽快上屏,让用户从 KUAL 返回后更快看到 calendar; +# 后续的时钟和遮罩交给 start.sh 拉起的主循环补画。 echo "Theme switched to ${THEME_ID} / ${ORIENTATION}" diff --git a/dash/staging/post-jailbreak-root/extensions/kindle-dash/menu.json b/dash/staging/post-jailbreak-root/extensions/kindle-dash/menu.json index 1a788cb..0f5f27a 100644 --- a/dash/staging/post-jailbreak-root/extensions/kindle-dash/menu.json +++ b/dash/staging/post-jailbreak-root/extensions/kindle-dash/menu.json @@ -1,12 +1,13 @@ { "items": [ { - "name": "Kindle Dashboard", + "name": "主题选择", "priority": -998, "items": [ - {"name": "Default", "priority": 1, "action": "/mnt/us/dashboard/launch-theme-from-kual.sh", "params": "default", "exitmenu": true}, - {"name": "Paper", "priority": 2, "action": "/mnt/us/dashboard/launch-theme-from-kual.sh", "params": "paper", "exitmenu": true}, - {"name": "Classic", "priority": 3, "action": "/mnt/us/dashboard/launch-theme-from-kual.sh", "params": "classic", "exitmenu": true} + {"name": "default-横屏", "priority": 1, "action": "/mnt/us/dashboard/launch-theme-from-kual.sh", "params": "default landscape", "exitmenu": true}, + {"name": "default-竖屏", "priority": 2, "action": "/mnt/us/dashboard/launch-theme-from-kual.sh", "params": "default portrait", "exitmenu": true}, + {"name": "simple-横屏", "priority": 3, "action": "/mnt/us/dashboard/launch-theme-from-kual.sh", "params": "simple landscape", "exitmenu": true}, + {"name": "simple-竖屏", "priority": 4, "action": "/mnt/us/dashboard/launch-theme-from-kual.sh", "params": "simple portrait", "exitmenu": true} ] }, {"name": "Dashboard Debug On", "action": "/mnt/us/dashboard/debug-on.sh"}, diff --git a/scripts/kindle/ssh-fix-all-keys.sh b/scripts/kindle/ssh-fix-all-keys.sh index 63c62d3..0693b8f 100644 --- a/scripts/kindle/ssh-fix-all-keys.sh +++ b/scripts/kindle/ssh-fix-all-keys.sh @@ -21,11 +21,17 @@ echo "Source keys: ${SOURCE_KEYS}" for target_dir in "${ROOT_HOME}/.ssh" /root/.ssh /var/local/root/.ssh /mnt/us/usbnet/etc/dot.ssh; do echo "--- target: ${target_dir} ---" - mkdir -p "${target_dir}" + if ! mkdir -p "${target_dir}" 2>/dev/null; then + echo "skip: cannot create ${target_dir}" + continue + fi if [ -f "${target_dir}/authorized_keys" ]; then cp "${target_dir}/authorized_keys" "${target_dir}/authorized_keys.bak.${TS}" || true fi - cp "${SOURCE_KEYS}" "${target_dir}/authorized_keys" + if ! cp "${SOURCE_KEYS}" "${target_dir}/authorized_keys"; then + echo "skip: cannot write ${target_dir}/authorized_keys" + continue + fi chmod 700 "${target_dir}" 2>/dev/null || true chmod 600 "${target_dir}/authorized_keys" 2>/dev/null || true ls -ld "${target_dir}" "${target_dir}/authorized_keys" 2>/dev/null || true diff --git a/scripts/launchd/cn.biboer.kindle-dash.refresh-kindle-backgrounds.plist b/scripts/launchd/cn.biboer.kindle-dash.refresh-kindle-backgrounds.plist new file mode 100644 index 0000000..5fc08cd --- /dev/null +++ b/scripts/launchd/cn.biboer.kindle-dash.refresh-kindle-backgrounds.plist @@ -0,0 +1,109 @@ + + + + + Label + cn.biboer.kindle-dash.refresh-kindle-backgrounds + + WorkingDirectory + /Users/gavin/kindle-dash + + ProgramArguments + + /bin/sh + /Users/gavin/kindle-dash/scripts/refresh-kindle-backgrounds.sh + --once + + + EnvironmentVariables + + PATH + /usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin + + + ProcessType + Background + + StandardOutPath + /Users/gavin/Library/Logs/kindle-dash/refresh-kindle-backgrounds.log + + StandardErrorPath + /Users/gavin/Library/Logs/kindle-dash/refresh-kindle-backgrounds.err.log + + StartCalendarInterval + + + Hour + 0 + Minute + 1 + + + Hour + 2 + Minute + 1 + + + Hour + 4 + Minute + 1 + + + Hour + 6 + Minute + 1 + + + Hour + 8 + Minute + 1 + + + Hour + 10 + Minute + 1 + + + Hour + 12 + Minute + 1 + + + Hour + 14 + Minute + 1 + + + Hour + 16 + Minute + 1 + + + Hour + 18 + Minute + 1 + + + Hour + 20 + Minute + 1 + + + Hour + 22 + Minute + 1 + + + + diff --git a/scripts/publish-calendar-dist.sh b/scripts/publish-calendar-dist.sh new file mode 100644 index 0000000..6e64cdb --- /dev/null +++ b/scripts/publish-calendar-dist.sh @@ -0,0 +1,162 @@ +#!/usr/bin/env sh +set -eu + +ROOT_DIR="$(CDPATH= cd -- "$(dirname "$0")/.." && pwd)" +CALENDAR_DIR="$ROOT_DIR/calendar" +DIST_DIR="$CALENDAR_DIR/dist" + +OUTPUT_DIR="" +INTERVAL_MINUTES=60 +RUN_ONCE=false + +print_usage() { + cat <<'EOF' +用法: + sh scripts/publish-calendar-dist.sh --output-dir

      [选项] + +作用: + 1. 调用 calendar 现有导出链路生成最新背景图与主题资源 + 2. 把 calendar/dist 整体发布到指定目录 + 3. 默认每 60 分钟自动重跑一次;加 --once 只跑一轮 + +选项: + -o, --output-dir 发布目标目录,通常是 Web 服务器实际对外提供静态文件的目录 + --interval-minutes 自动生成间隔,默认 60 分钟 + --once 只生成并发布一轮 + -h, --help 查看帮助 + +示例: + sh scripts/publish-calendar-dist.sh --output-dir /srv/calendar-dashboard --once + sh scripts/publish-calendar-dist.sh --output-dir /srv/calendar-dashboard +EOF +} + +log() { + printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$1" +} + +validate_positive_integer() { + value=$1 + name=$2 + + case "$value" in + ''|*[!0-9]*) + echo "$name 必须是正整数:$value" >&2 + exit 1 + ;; + esac + + if [ "$value" -le 0 ]; then + echo "$name 必须大于 0:$value" >&2 + exit 1 + fi +} + +publish_once() { + temp_publish_dir=$(mktemp -d "${TMPDIR:-/tmp}/kindle-dash-publish.XXXXXX") + publish_status=0 + + log "开始生成 Web 端背景图与主题资源" + ( + cd "$CALENDAR_DIR" + npm run export:themes + ) || publish_status=$? + + if [ "$publish_status" -ne 0 ]; then + rm -rf "$temp_publish_dir" + return "$publish_status" + fi + + log "开始发布到目标目录:$OUTPUT_DIR" + mkdir -p "$OUTPUT_DIR" + + # 先把本轮导出结果完整复制到临时目录,确认结构无误后再整体 rsync 到目标目录, + # 避免 Web 根目录在导出过程中暴露半成品文件。 + rsync -a --delete "$DIST_DIR"/ "$temp_publish_dir"/ || publish_status=$? + if [ "$publish_status" -eq 0 ]; then + rsync -a --delete "$temp_publish_dir"/ "$OUTPUT_DIR"/ || publish_status=$? + fi + + rm -rf "$temp_publish_dir" + + if [ "$publish_status" -ne 0 ]; then + return "$publish_status" + fi + + log "发布完成:$OUTPUT_DIR" +} + +sleep_until_next_run() { + interval_seconds=$((INTERVAL_MINUTES * 60)) + now_epoch=$(date '+%s') + next_epoch=$(( ((now_epoch / interval_seconds) + 1) * interval_seconds )) + sleep_seconds=$((next_epoch - now_epoch)) + + if [ "$sleep_seconds" -le 0 ]; then + sleep_seconds=$interval_seconds + fi + + log "等待 ${sleep_seconds} 秒后执行下一轮生成" + sleep "$sleep_seconds" +} + +while [ "$#" -gt 0 ]; do + case "$1" in + -o|--output-dir) + shift + OUTPUT_DIR=${1:?"missing output dir"} + ;; + --interval-minutes) + shift + INTERVAL_MINUTES=${1:?"missing interval minutes"} + ;; + --once) + RUN_ONCE=true + ;; + -h|--help) + print_usage + exit 0 + ;; + *) + echo "未知参数: $1" >&2 + echo >&2 + print_usage >&2 + exit 1 + ;; + esac + shift +done + +if [ -z "$OUTPUT_DIR" ]; then + echo "必须通过 --output-dir 指定发布目录。" >&2 + echo >&2 + print_usage >&2 + exit 1 +fi + +validate_positive_integer "$INTERVAL_MINUTES" "interval-minutes" + +# 当前导图链路依赖 macOS 自带的 Swift + WKWebView。 +# 如果部署机不是 macOS,这一步会失败,届时需要单独换成跨平台截图方案。 +if [ ! -x /usr/bin/swift ]; then + echo "未找到 /usr/bin/swift,当前机器无法使用现有 WebKit 导图链路。" >&2 + exit 1 +fi + +while true; do + if publish_once; then + : + else + status=$? + log "本轮发布失败,退出码:$status" + if [ "$RUN_ONCE" = true ]; then + exit "$status" + fi + fi + + if [ "$RUN_ONCE" = true ]; then + break + fi + + sleep_until_next_run +done diff --git a/scripts/refresh-kindle-backgrounds.sh b/scripts/refresh-kindle-backgrounds.sh new file mode 100644 index 0000000..ff25626 --- /dev/null +++ b/scripts/refresh-kindle-backgrounds.sh @@ -0,0 +1,115 @@ +#!/usr/bin/env sh +set -eu + +ROOT_DIR="$(CDPATH= cd -- "$(dirname "$0")/.." && pwd)" +CALENDAR_DIR="$ROOT_DIR/calendar" +INTERVAL_MINUTES=60 +RUN_ONCE=false + +print_usage() { + cat <<'EOF' +用法: + sh scripts/refresh-kindle-backgrounds.sh [选项] + +作用: + 1. 构建 calendar Web 产物 + 2. 生成主题背景图到 calendar/kindle-backgrounds/ + 3. 默认每 60 分钟重跑一次;加 --once 只跑一轮 + +选项: + --interval-minutes 自动生成间隔,默认 60 分钟 + --once 只生成一轮 + -h, --help 查看帮助 + +示例: + sh scripts/refresh-kindle-backgrounds.sh --once + sh scripts/refresh-kindle-backgrounds.sh --interval-minutes 30 +EOF +} + +log() { + printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$1" +} + +validate_positive_integer() { + value=$1 + name=$2 + + case "$value" in + ''|*[!0-9]*) + echo "$name 必须是正整数:$value" >&2 + exit 1 + ;; + esac + + if [ "$value" -le 0 ]; then + echo "$name 必须大于 0:$value" >&2 + exit 1 + fi +} + +refresh_once() { + log "开始生成 Kindle 背景图到 $CALENDAR_DIR/kindle-backgrounds" + ( + cd "$CALENDAR_DIR" + npm run export:themes + ) + log "背景图生成完成" +} + +sleep_until_next_run() { + interval_seconds=$((INTERVAL_MINUTES * 60)) + now_epoch=$(date '+%s') + next_epoch=$(( ((now_epoch / interval_seconds) + 1) * interval_seconds )) + sleep_seconds=$((next_epoch - now_epoch)) + + if [ "$sleep_seconds" -le 0 ]; then + sleep_seconds=$interval_seconds + fi + + log "等待 ${sleep_seconds} 秒后执行下一轮生成" + sleep "$sleep_seconds" +} + +while [ "$#" -gt 0 ]; do + case "$1" in + --interval-minutes) + shift + INTERVAL_MINUTES=${1:?"missing interval minutes"} + ;; + --once) + RUN_ONCE=true + ;; + -h|--help) + print_usage + exit 0 + ;; + *) + echo "未知参数: $1" >&2 + echo >&2 + print_usage >&2 + exit 1 + ;; + esac + shift +done + +validate_positive_integer "$INTERVAL_MINUTES" "interval-minutes" + +while true; do + if refresh_once; then + : + else + status=$? + log "本轮背景图生成失败,退出码:$status" + if [ "$RUN_ONCE" = true ]; then + exit "$status" + fi + fi + + if [ "$RUN_ONCE" = true ]; then + break + fi + + sleep_until_next_run +done diff --git a/scripts/sync-layered-clock-to-kindle.sh b/scripts/sync-layered-clock-to-kindle.sh index 0d8f63d..2bff1b7 100644 --- a/scripts/sync-layered-clock-to-kindle.sh +++ b/scripts/sync-layered-clock-to-kindle.sh @@ -6,6 +6,8 @@ KINDLE_TARGET="kindle" THEME_FILTER="" ORIENTATION_FILTER="" CLOCK_REGION_JSON="$ROOT_DIR/calendar/dist/clock-region.json" +LOCATION_LAT="" +LOCATION_LON="" print_usage() { cat <<'EOF' @@ -50,20 +52,6 @@ if [ -n "$ORIENTATION_FILTER" ] && [ -z "$THEME_FILTER" ]; then exit 1 fi -cd "$ROOT_DIR/calendar" -if [ -n "$THEME_FILTER" ]; then - if [ -n "$ORIENTATION_FILTER" ]; then - npm run export:themes -- --theme "$THEME_FILTER" --orientation "$ORIENTATION_FILTER" >/dev/null - CLOCK_REGION_JSON="$ROOT_DIR/calendar/dist/themes/$THEME_FILTER/$ORIENTATION_FILTER/kindlebg.clock-region.json" - else - npm run export:themes -- --theme "$THEME_FILTER" >/dev/null - CLOCK_REGION_JSON="" - fi -else - npm run export:themes >/dev/null -fi -cd "$ROOT_DIR" - clock_region_value() { key=$1 python3 - "$CLOCK_REGION_JSON" "$key" <<'PY' @@ -98,19 +86,69 @@ sync_dashboard_runtime() { "$ROOT_DIR/dash/src/local/env.sh" \ "$ROOT_DIR/dash/src/local/fetch-dashboard.sh" \ "$ROOT_DIR/dash/src/local/clock-index.sh" \ + "$ROOT_DIR/dash/src/local/location-env.sh" \ + "$ROOT_DIR/dash/src/local/location-sync.sh" \ "$ROOT_DIR/dash/src/local/render-clock.lua" \ "$ROOT_DIR/dash/src/local/render-clock.sh" \ "$ROOT_DIR/dash/src/local/touch-home-service.sh" \ "$ROOT_DIR/dash/src/local/theme-menu-service.sh" \ "$ROOT_DIR/dash/src/local/theme-json.lua" \ + "$ROOT_DIR/dash/src/local/sync-theme-backgrounds.sh" \ "$ROOT_DIR/dash/src/local/theme-sync.sh" \ "$KINDLE_TARGET":/mnt/us/dashboard/local/ - ssh "$KINDLE_TARGET" "chmod +x /mnt/us/dashboard/start.sh /mnt/us/dashboard/dash.sh /mnt/us/dashboard/stop.sh /mnt/us/dashboard/launch-from-kual.sh /mnt/us/dashboard/launch-theme-from-kual.sh /mnt/us/dashboard/switch-theme.sh /mnt/us/dashboard/local/fetch-dashboard.sh /mnt/us/dashboard/local/clock-index.sh /mnt/us/dashboard/local/render-clock.sh /mnt/us/dashboard/local/touch-home-service.sh /mnt/us/dashboard/local/theme-menu-service.sh /mnt/us/dashboard/local/theme-sync.sh" + ssh "$KINDLE_TARGET" "chmod +x /mnt/us/dashboard/start.sh /mnt/us/dashboard/dash.sh /mnt/us/dashboard/stop.sh /mnt/us/dashboard/launch-from-kual.sh /mnt/us/dashboard/launch-theme-from-kual.sh /mnt/us/dashboard/switch-theme.sh /mnt/us/dashboard/local/fetch-dashboard.sh /mnt/us/dashboard/local/clock-index.sh /mnt/us/dashboard/local/location-env.sh /mnt/us/dashboard/local/location-sync.sh /mnt/us/dashboard/local/render-clock.sh /mnt/us/dashboard/local/touch-home-service.sh /mnt/us/dashboard/local/theme-menu-service.sh /mnt/us/dashboard/local/sync-theme-backgrounds.sh /mnt/us/dashboard/local/theme-sync.sh" ssh "$KINDLE_TARGET" "mkdir -p /mnt/us/dashboard/local/state" ssh "$KINDLE_TARGET" "date '+%s' >/mnt/us/dashboard/local/state/background-updated-at" } +resolve_kindle_location_override() { + location_output="" + + if ! location_output=$(ssh "$KINDLE_TARGET" "/mnt/us/dashboard/local/location-env.sh --refresh-if-needed" 2>/dev/null); then + echo "Skipped Kindle location override: unable to resolve remote location" + return + fi + + LOCATION_LAT=$(printf '%s\n' "$location_output" | awk -F= '/^export LOCATION_LAT=/{gsub("'"'"'", "", $2); print $2; exit}') + LOCATION_LON=$(printf '%s\n' "$location_output" | awk -F= '/^export LOCATION_LON=/{gsub("'"'"'", "", $2); print $2; exit}') + + if [ -z "$LOCATION_LAT" ] || [ -z "$LOCATION_LON" ]; then + echo "Skipped Kindle location override: remote coordinates unavailable" + return + fi + + echo "Using Kindle location override: ${LOCATION_LAT},${LOCATION_LON}" +} + +export_theme_bundle_locally() { + cd "$ROOT_DIR/calendar" + set -- npm run export:themes -- + + if [ -n "$THEME_FILTER" ]; then + set -- "$@" --theme "$THEME_FILTER" + + if [ -n "$ORIENTATION_FILTER" ]; then + set -- "$@" --orientation "$ORIENTATION_FILTER" + fi + fi + + if [ -n "$LOCATION_LAT" ] && [ -n "$LOCATION_LON" ]; then + set -- "$@" --location-lat "$LOCATION_LAT" --location-lon "$LOCATION_LON" + fi + + "$@" >/dev/null + cd "$ROOT_DIR" + + if [ -n "$THEME_FILTER" ]; then + if [ -n "$ORIENTATION_FILTER" ]; then + CLOCK_REGION_JSON="$ROOT_DIR/calendar/dist/themes/$THEME_FILTER/$ORIENTATION_FILTER/kindlebg.clock-region.json" + else + CLOCK_REGION_JSON="" + fi + fi +} + sync_kual_extension() { ssh "$KINDLE_TARGET" "mkdir -p /mnt/us/extensions/kindle-dash" rsync -av --no-o --no-g \ @@ -124,15 +162,15 @@ sync_theme_bundle() { "$KINDLE_TARGET":/mnt/us/dashboard/ if [ -z "$THEME_FILTER" ]; then - if [ -f "$ROOT_DIR/calendar/dist/kindlebg.png" ]; then - rsync -av --no-o --no-g \ - "$ROOT_DIR/calendar/dist/kindlebg.png" \ - "$KINDLE_TARGET":/mnt/us/dashboard/ - fi - rsync -av --no-o --no-g \ "$ROOT_DIR/calendar/dist/themes/" \ "$KINDLE_TARGET":/mnt/us/dashboard/themes/ + + if [ -d "$ROOT_DIR/calendar/kindle-backgrounds" ]; then + rsync -av --no-o --no-g \ + "$ROOT_DIR/calendar/kindle-backgrounds/" \ + "$KINDLE_TARGET":/mnt/us/dashboard/kindle-backgrounds/ + fi return fi @@ -140,6 +178,21 @@ sync_theme_bundle() { "$ROOT_DIR/calendar/dist/themes/$THEME_FILTER.json" \ "$KINDLE_TARGET":/mnt/us/dashboard/themes/ + ssh "$KINDLE_TARGET" "mkdir -p /mnt/us/dashboard/kindle-backgrounds" + + if [ -n "$ORIENTATION_FILTER" ]; then + flat_background_path="$ROOT_DIR/calendar/kindle-backgrounds/$THEME_FILTER-$ORIENTATION_FILTER.png" + if [ -f "$flat_background_path" ]; then + rsync -av --no-o --no-g \ + "$flat_background_path" \ + "$KINDLE_TARGET":/mnt/us/dashboard/kindle-backgrounds/ + fi + else + rsync -av --no-o --no-g \ + "$ROOT_DIR/calendar/kindle-backgrounds/$THEME_FILTER-"*.png \ + "$KINDLE_TARGET":/mnt/us/dashboard/kindle-backgrounds/ + fi + if [ -n "$ORIENTATION_FILTER" ]; then ssh "$KINDLE_TARGET" "mkdir -p /mnt/us/dashboard/themes/$THEME_FILTER/$ORIENTATION_FILTER" rsync -av --no-o --no-g \ @@ -154,6 +207,40 @@ sync_theme_bundle() { "$KINDLE_TARGET":/mnt/us/dashboard/themes/$THEME_FILTER/ } +refresh_current_background_cache() { + # 不能再把本地默认导出的 kindlebg.png 直接覆盖到设备根目录; + # 否则设备当前主题若不是默认主题,重启后就会出现“背景回默认、时钟还按旧主题画”的分叉。 + # 这里统一在 Kindle 端按当前 theme-runtime.env 重新生成根目录背景缓存。 + if ssh "$KINDLE_TARGET" "/mnt/us/dashboard/local/fetch-dashboard.sh --local-only /mnt/us/dashboard/kindlebg.png"; then + ssh "$KINDLE_TARGET" "date '+%s' >/mnt/us/dashboard/local/state/background-updated-at" + echo "Current background cache refreshed on device" + else + echo "Skipped current background cache refresh: current runtime theme assets unavailable" + fi +} + +refresh_current_theme_runtime() { + # 主题包同步完之后,设备上的 theme-runtime.env 仍可能停留在旧坐标。 + # render-clock / fetch-dashboard 实际都读这份运行时快照, + # 所以这里必须按“当前主题 + 当前方向”在 Kindle 本地重写一次, + # 让时钟位置和背景图一起跟随最新的 calendar 导出结果。 + if ssh "$KINDLE_TARGET" "set -eu + theme_id=default + orientation=portrait + if [ -f /mnt/us/dashboard/local/theme.env ]; then + # shellcheck disable=SC1091 + . /mnt/us/dashboard/local/theme.env + theme_id=\${THEME_ID:-\$theme_id} + orientation=\${ORIENTATION:-\$orientation} + fi + /mnt/us/dashboard/local/theme-sync.sh --local-only --theme \"\$theme_id\" --orientation \"\$orientation\" >/dev/null + "; then + echo "Current theme runtime refreshed on device" + else + echo "Skipped current theme runtime refresh: unable to resolve current theme locally" + fi +} + update_default_clock_region_env() { if [ -z "$CLOCK_REGION_JSON" ] || [ ! -f "$CLOCK_REGION_JSON" ]; then echo "Skipped CLOCK_REGION_* env update: no single background region selected" @@ -185,9 +272,13 @@ update_default_clock_region_env() { } sync_dashboard_runtime +resolve_kindle_location_override +export_theme_bundle_locally sync_theme_bundle sync_kual_extension update_default_clock_region_env +refresh_current_theme_runtime +refresh_current_background_cache if [ -n "$THEME_FILTER" ]; then if [ -n "$ORIENTATION_FILTER" ]; then diff --git a/todo.md b/todo.md index d06bbf9..e0e6c55 100644 --- a/todo.md +++ b/todo.md @@ -5,4 +5,6 @@ 1. dual - dashborad,白屏问题 1. calendar项目融合xcs 1. calendar中嵌入图片 - +1. 右上角系统状态栏遮罩还没有完全压住 +1. 天气预报位置当前基于 GeoIP,只能保证市级近似,不保证精确 +1. 时钟分钟刷新仍依赖设备唤醒;当前唤醒会亮灯,无法做到“不亮灯唤醒但仍肉眼可见更新”