From cc2da99d6f2ac4fad5fba03006377f54262a6dd2 Mon Sep 17 00:00:00 2001 From: Anso Date: Mon, 6 Apr 2026 20:09:55 -0400 Subject: [PATCH] fix(fleet): resolve stuck update states and improve detection (#405) * fix(fleet): resolve stuck update states and improve update UX The fleet node update flow had several bugs: the in-memory update tracker never cleared terminal states (timeout, failed, completed), leaving nodes permanently stuck with no way to retry or dismiss. The Recheck button only re-fetched stale state without clearing it, and the POST trigger rejected retries with 409 even after timeout. Backend fixes: - Add DELETE endpoints (single node + batch) to clear tracker entries - Fix 409 race: detect expired timeouts and clear terminal states before re-triggering - Populate error messages in the tracker for timeouts and failures - Include error field in the update-status API response - Auto-expire completed entries after 60 seconds Frontend fixes: - Add retry (RotateCcw) and dismiss (X) buttons on failed/timed-out badges - Show error details via animated cursor hover (CursorFollow pattern) - Recheck button now batch-clears all terminal states before fetching - Recheck shows loading spinner and disables while checking - Extract NodeCardProps interface for readability * fix(fleet): detect update completion via process start time Remote nodes that cannot report their version (e.g. older builds) caused updates to always time out because completion detection relied solely on version comparison. The gateway now tracks the remote node's process start time from /api/meta and detects container restarts by comparing it across polls. Also extracts a createTracker() factory to eliminate repeated object construction across 5 call sites. * docs: add troubleshooting for first-update timeout on old nodes Adds a new troubleshooting entry explaining why the first remote update on nodes running pre-v0.40.0 always times out (neither version nor process start time can be detected). Documents the fix: dismiss, recheck, and confirm the node updated. Also adds a screenshot of the timed-out state with retry/dismiss buttons to the remote updates feature page. * fix(fleet): detect update completion via offline detection and error reporting The update completion detection relied on version change and process start time, both of which fail on nodes running older Sencho versions that report "unknown" and lack the startedAt field. This caused every update to time out after 5 minutes. Add three-signal detection: version change, process restart (startedAt), and offline/online detection (node went unreachable during update and came back). Also add a 90-second early failure heuristic for when the remote image pull fails silently, and surface pull errors from SelfUpdateService via /api/meta so the gateway can report them immediately. * fix(deps): bump vite to 8.0.5 to resolve high severity vulnerabilities Fixes GHSA-4w7w-66w2-5vf9, GHSA-v2wj-q39q-566r, GHSA-p9ff-h696-f583. * fix(deps): bump vite in backend lockfile to resolve audit failures Vitest pulls in vite as a transitive dependency. Bumps to 8.0.5. --- CHANGELOG.md | 24 ++- backend/package-lock.json | 201 ++++++++---------- backend/src/index.ts | 148 +++++++++++-- backend/src/services/CapabilityRegistry.ts | 10 +- backend/src/services/SelfUpdateService.ts | 15 +- docs/features/remote-updates.mdx | 35 ++- docs/images/fleet-view/fleet-node-failed.png | Bin 0 -> 32806 bytes .../fleet-view/fleet-node-timed-out.png | Bin 0 -> 33134 bytes docs/images/fleet-view/fleet-node-updates.png | Bin 28622 -> 34048 bytes .../images/fleet-view/fleet-node-updating.png | Bin 0 -> 32279 bytes docs/operations/troubleshooting.mdx | 55 ++++- frontend/package-lock.json | 8 +- frontend/src/components/FleetView.tsx | 113 ++++++++-- 13 files changed, 450 insertions(+), 159 deletions(-) create mode 100644 docs/images/fleet-view/fleet-node-failed.png create mode 100644 docs/images/fleet-view/fleet-node-timed-out.png create mode 100644 docs/images/fleet-view/fleet-node-updating.png diff --git a/CHANGELOG.md b/CHANGELOG.md index bea253d9..3eb71a74 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,24 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] + +### Fixed + +* **fleet:** fix permanently stuck "Timed out" / "Failed" badges after node update attempts. The in-memory update tracker now supports clearing via a new DELETE endpoint, and terminal states are automatically clearable through the Recheck button. +* **fleet:** fix update completion detection for remote nodes that cannot report their version. The gateway now uses three completion signals: version change, process restart detection (`startedAt`), and offline/online detection (node went unreachable during update and came back). This eliminates false timeouts on nodes running older Sencho versions. +* **fleet:** fix 409 race condition where retrying a timed-out update was rejected because the tracker still showed "updating". The POST trigger now detects expired timeouts and allows re-triggering. +* **fleet:** populate error messages in the update tracker so users can see why an update failed or timed out. +* **fleet:** detect probable image pull failures within 90 seconds instead of waiting the full 5-minute timeout. If the node is still running unchanged after 90 seconds, the update is marked as "Failed" with a descriptive message. +* **fleet:** surface remote self-update pull errors via `/api/meta` so the gateway can immediately report failures instead of timing out. + +### Added + +* **fleet:** retry and dismiss buttons on failed/timed-out update badges, with animated cursor hover detail showing the error message +* **fleet:** "Recheck" button now clears all failed and timed-out states before fetching fresh status, with a loading spinner +* **fleet:** auto-expire "completed" update status after 60 seconds so nodes return to "Up to date" automatically +* **fleet:** "Update All" now retries nodes that previously timed out or failed + ## [0.39.3](https://github.com/AnsoCode/Sencho/compare/v0.39.2...v0.39.3) (2026-04-06) @@ -18,12 +36,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * **fleet:** filter invalid version strings from UI display ([#399](https://github.com/AnsoCode/Sencho/issues/399)) ([2089e75](https://github.com/AnsoCode/Sencho/commit/2089e75ef1e973f3e04aa6cc448211db35d95848)) -## [Unreleased] - -### Fixed - -* **fleet:** resolve root cause of "vunknown" version display across all UI surfaces. The Dockerfile was missing a `COPY package.json` in the backend build stage, causing version resolution to fail at runtime. Backend now returns `null` instead of the string `"unknown"` for unresolvable versions. Frontend guards all version display points (Fleet Overview cards, update buttons, Check for Updates modal). Fleet update logic correctly flags remote nodes with unresolvable versions as potentially outdated instead of silently marking them up to date. Consolidated version validation into shared utilities (`isValidVersion`, `formatVersion`) across both frontend and backend. - ## [0.39.1](https://github.com/AnsoCode/Sencho/compare/v0.39.0...v0.39.1) (2026-04-06) diff --git a/backend/package-lock.json b/backend/package-lock.json index db57efd1..728cabd3 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -7,6 +7,7 @@ "": { "name": "backend", "version": "1.0.0", + "hasInstallScript": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { "@aws-sdk/client-ecr": "^3.1019.0", @@ -683,40 +684,6 @@ "node": ">=12" } }, - "node_modules/@emnapi/core": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz", - "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.2.0", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz", - "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz", - "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", @@ -985,20 +952,22 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", - "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.2.tgz", + "integrity": "sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@emnapi/core": "^1.7.1", - "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" }, "funding": { "type": "github", "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" } }, "node_modules/@noble/hashes": { @@ -1015,9 +984,9 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.120.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.120.0.tgz", - "integrity": "sha512-k1YNu55DuvAip/MGE1FTsIuU3FUCn6v/ujG9V7Nq5Df/kX2CWb13hhwD0lmJGMGqE+bE1MXvv9SZVnMzEXlWcg==", + "version": "0.122.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.122.0.tgz", + "integrity": "sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==", "dev": true, "license": "MIT", "funding": { @@ -1099,9 +1068,9 @@ "license": "BSD-3-Clause" }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.10.tgz", - "integrity": "sha512-jOHxwXhxmFKuXztiu1ORieJeTbx5vrTkcOkkkn2d35726+iwhrY1w/+nYY/AGgF12thg33qC3R1LMBF5tHTZHg==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.12.tgz", + "integrity": "sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==", "cpu": [ "arm64" ], @@ -1116,9 +1085,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.10.tgz", - "integrity": "sha512-gED05Teg/vtTZbIJBc4VNMAxAFDUPkuO/rAIyyxZjTj1a1/s6z5TII/5yMGZ0uLRCifEtwUQn8OlYzuYc0m70w==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.12.tgz", + "integrity": "sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==", "cpu": [ "arm64" ], @@ -1133,9 +1102,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.10.tgz", - "integrity": "sha512-rI15NcM1mA48lqrIxVkHfAqcyFLcQwyXWThy+BQ5+mkKKPvSO26ir+ZDp36AgYoYVkqvMcdS8zOE6SeBsR9e8A==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.12.tgz", + "integrity": "sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==", "cpu": [ "x64" ], @@ -1150,9 +1119,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.10.tgz", - "integrity": "sha512-XZRXHdTa+4ME1MuDVp021+doQ+z6Ei4CCFmNc5/sKbqb8YmkiJdj8QKlV3rCI0AJtAeSB5n0WGPuJWNL9p/L2w==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.12.tgz", + "integrity": "sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==", "cpu": [ "x64" ], @@ -1167,9 +1136,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.10.tgz", - "integrity": "sha512-R0SQMRluISSLzFE20sPWYHVmJdDQnRyc/FzSCN72BqQmh2SOZUFG+N3/vBZpR4C6WpEUVYJLrYUXaj43sJsNLA==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.12.tgz", + "integrity": "sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==", "cpu": [ "arm" ], @@ -1184,9 +1153,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.10.tgz", - "integrity": "sha512-Y1reMrV/o+cwpduYhJuOE3OMKx32RMYCidf14y+HssARRmhDuWXJ4yVguDg2R/8SyyGNo+auzz64LnPK9Hq6jg==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==", "cpu": [ "arm64" ], @@ -1201,9 +1170,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.10.tgz", - "integrity": "sha512-vELN+HNb2IzuzSBUOD4NHmP9yrGwl1DVM29wlQvx1OLSclL0NgVWnVDKl/8tEks79EFek/kebQKnNJkIAA4W2g==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.12.tgz", + "integrity": "sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==", "cpu": [ "arm64" ], @@ -1218,9 +1187,9 @@ } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.10.tgz", - "integrity": "sha512-ZqrufYTgzxbHwpqOjzSsb0UV/aV2TFIY5rP8HdsiPTv/CuAgCRjM6s9cYFwQ4CNH+hf9Y4erHW1GjZuZ7WoI7w==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==", "cpu": [ "ppc64" ], @@ -1235,9 +1204,9 @@ } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.10.tgz", - "integrity": "sha512-gSlmVS1FZJSRicA6IyjoRoKAFK7IIHBs7xJuHRSmjImqk3mPPWbR7RhbnfH2G6bcmMEllCt2vQ/7u9e6bBnByg==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==", "cpu": [ "s390x" ], @@ -1252,9 +1221,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.10.tgz", - "integrity": "sha512-eOCKUpluKgfObT2pHjztnaWEIbUabWzk3qPZ5PuacuPmr4+JtQG4k2vGTY0H15edaTnicgU428XW/IH6AimcQw==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==", "cpu": [ "x64" ], @@ -1269,9 +1238,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.10.tgz", - "integrity": "sha512-Xdf2jQbfQowJnLcgYfD/m0Uu0Qj5OdxKallD78/IPPfzaiaI4KRAwZzHcKQ4ig1gtg1SuzC7jovNiM2TzQsBXA==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.12.tgz", + "integrity": "sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==", "cpu": [ "x64" ], @@ -1286,9 +1255,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.10.tgz", - "integrity": "sha512-o1hYe8hLi1EY6jgPFyxQgQ1wcycX+qz8eEbVmot2hFkgUzPxy9+kF0u0NIQBeDq+Mko47AkaFFaChcvZa9UX9Q==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.12.tgz", + "integrity": "sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==", "cpu": [ "arm64" ], @@ -1303,9 +1272,9 @@ } }, "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.10.tgz", - "integrity": "sha512-Ugv9o7qYJudqQO5Y5y2N2SOo6S4WiqiNOpuQyoPInnhVzCY+wi/GHltcLHypG9DEUYMB0iTB/huJrpadiAcNcA==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.12.tgz", + "integrity": "sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==", "cpu": [ "wasm32" ], @@ -1320,9 +1289,9 @@ } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.10.tgz", - "integrity": "sha512-7UODQb4fQUNT/vmgDZBl3XOBAIOutP5R3O/rkxg0aLfEGQ4opbCgU5vOw/scPe4xOqBwL9fw7/RP1vAMZ6QlAQ==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.12.tgz", + "integrity": "sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==", "cpu": [ "arm64" ], @@ -1337,9 +1306,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.10.tgz", - "integrity": "sha512-PYxKHMVHOb5NJuDL53vBUl1VwUjymDcYI6rzpIni0C9+9mTiJedvUxSk7/RPp7OOAm3v+EjgMu9bIy3N6b408w==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.12.tgz", + "integrity": "sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==", "cpu": [ "x64" ], @@ -1354,9 +1323,9 @@ } }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.10.tgz", - "integrity": "sha512-UkVDEFk1w3mveXeKgaTuYfKWtPbvgck1dT8TUG3bnccrH0XtLTuAyfCoks4Q/M5ZGToSVJTIQYCzy2g/atAOeg==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.12.tgz", + "integrity": "sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==", "dev": true, "license": "MIT" }, @@ -5782,14 +5751,14 @@ "license": "MIT" }, "node_modules/rolldown": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.10.tgz", - "integrity": "sha512-q7j6vvarRFmKpgJUT8HCAUljkgzEp4LAhPlJUvQhA5LA1SUL36s5QCysMutErzL3EbNOZOkoziSx9iZC4FddKA==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.12.tgz", + "integrity": "sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==", "dev": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.120.0", - "@rolldown/pluginutils": "1.0.0-rc.10" + "@oxc-project/types": "=0.122.0", + "@rolldown/pluginutils": "1.0.0-rc.12" }, "bin": { "rolldown": "bin/cli.mjs" @@ -5798,21 +5767,21 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0-rc.10", - "@rolldown/binding-darwin-arm64": "1.0.0-rc.10", - "@rolldown/binding-darwin-x64": "1.0.0-rc.10", - "@rolldown/binding-freebsd-x64": "1.0.0-rc.10", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.10", - "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.10", - "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.10", - "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.10", - "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.10", - "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.10", - "@rolldown/binding-linux-x64-musl": "1.0.0-rc.10", - "@rolldown/binding-openharmony-arm64": "1.0.0-rc.10", - "@rolldown/binding-wasm32-wasi": "1.0.0-rc.10", - "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.10", - "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.10" + "@rolldown/binding-android-arm64": "1.0.0-rc.12", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.12", + "@rolldown/binding-darwin-x64": "1.0.0-rc.12", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.12", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.12", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.12", + "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.12", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.12", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.12", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.12", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.12" } }, "node_modules/router": { @@ -6621,16 +6590,16 @@ } }, "node_modules/vite": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.1.tgz", - "integrity": "sha512-wt+Z2qIhfFt85uiyRt5LPU4oVEJBXj8hZNWKeqFG4gRG/0RaRGJ7njQCwzFVjO+v4+Ipmf5CY7VdmZRAYYBPHw==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.5.tgz", + "integrity": "sha512-nmu43Qvq9UopTRfMx2jOYW5l16pb3iDC1JH6yMuPkpVbzK0k+L7dfsEDH4jRgYFmsg0sTAqkojoZgzLMlwHsCQ==", "dev": true, "license": "MIT", "dependencies": { "lightningcss": "^1.32.0", - "picomatch": "^4.0.3", + "picomatch": "^4.0.4", "postcss": "^8.5.8", - "rolldown": "1.0.0-rc.10", + "rolldown": "1.0.0-rc.12", "tinyglobby": "^0.2.15" }, "bin": { @@ -6648,7 +6617,7 @@ "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.0", - "esbuild": "^0.27.0", + "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", diff --git a/backend/src/index.ts b/backend/src/index.ts index c78e1e9a..26aab653 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -346,8 +346,16 @@ app.get('/api/health', (_req: Request, res: Response): void => { // Public meta endpoint - returns this instance's version and supported capabilities. // No auth required (like /health). Used by remote nodes during connection tests. +const processStartedAt = Date.now(); + app.get('/api/meta', (_req: Request, res: Response): void => { - res.json({ version: getSenchoVersion(), capabilities: getActiveCapabilities() }); + const updateError = SelfUpdateService.getInstance().getLastError(); + res.json({ + version: getSenchoVersion(), + capabilities: getActiveCapabilities(), + startedAt: processStartedAt, + ...(updateError ? { updateError } : {}), + }); }); // Auth Routes (no authentication required) @@ -1103,9 +1111,24 @@ interface UpdateTracker { startedAt: number; previousVersion: string | null; error?: string; + /** Process start time of the remote node before the update was triggered. */ + previousProcessStart: number | null; + /** True when the node became unreachable at least once during the update window. */ + wasOffline: boolean; } const updateTracker = new Map(); const UPDATE_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes +const UPDATE_TIMEOUT_MSG = 'Node did not come back online within 5 minutes.'; +const EARLY_FAIL_MS = 90 * 1000; // 90 seconds before declaring a probable pull failure + +function createTracker( + status: UpdateTracker['status'], + previousVersion: string | null, + previousProcessStart: number | null, + error?: string, +): UpdateTracker { + return { status, startedAt: Date.now(), previousVersion, previousProcessStart, wasOffline: false, error }; +} interface FleetNodeOverview { id: number; @@ -1258,22 +1281,71 @@ app.get('/api/fleet/update-status', async (_req: Request, res: Response): Promis const tracker = updateTracker.get(node.id); let version: string | null = null; + let remoteStartedAt: number | null = null; + let remoteUpdateError: string | null = null; + let remoteOnline = false; if (node.type === 'local') { version = gatewayVersion; } else if (node.api_url && node.api_token) { const meta = await fetchRemoteMeta(node.api_url, node.api_token); version = meta.version; + remoteStartedAt = meta.startedAt; + remoteUpdateError = meta.updateError; + remoteOnline = meta.online; } - // For nodes actively updating, check if they've come back with a new version + // For nodes actively updating, check if they've come back if (tracker?.status === 'updating') { - if (Date.now() - tracker.startedAt > UPDATE_TIMEOUT_MS) { - updateTracker.set(node.id, { ...tracker, status: 'timeout' }); - } else if (node.type === 'remote' && version && version !== tracker.previousVersion) { - updateTracker.set(node.id, { ...tracker, status: 'completed' }); + const elapsed = Date.now() - tracker.startedAt; + + if (elapsed > UPDATE_TIMEOUT_MS) { + // Final timeout (5 min) + updateTracker.set(node.id, { ...tracker, status: 'timeout', error: UPDATE_TIMEOUT_MSG }); + } else if (node.type === 'remote') { + if (remoteUpdateError) { + // Remote reported a pull failure via /api/meta + updateTracker.set(node.id, { ...tracker, status: 'failed', error: remoteUpdateError }); + } else if (!remoteOnline) { + // Node is unreachable (restarting); record that it went offline + if (!tracker.wasOffline) { + updateTracker.set(node.id, { ...tracker, wasOffline: true }); + } + } else if (version !== tracker.previousVersion) { + // Signal 1: Version changed (or version now resolvable after being unknown) + updateTracker.set(node.id, { ...tracker, status: 'completed' }); + } else if ( + remoteStartedAt !== null && + tracker.previousProcessStart !== null && + remoteStartedAt !== tracker.previousProcessStart + ) { + // Signal 2: Process restarted (startedAt changed) + updateTracker.set(node.id, { ...tracker, status: 'completed' }); + } else if (tracker.wasOffline && remoteOnline) { + // Signal 3: Node went offline and is back online (container was recreated) + updateTracker.set(node.id, { ...tracker, status: 'completed' }); + } else if (elapsed > EARLY_FAIL_MS) { + // Heuristic: node never went offline and nothing changed after 90s + updateTracker.set(node.id, { + ...tracker, + status: 'failed', + error: 'Update may have failed. The node is still running and its version has not changed.', + }); + } + } else if (node.type === 'local') { + // Local node: check if SelfUpdateService reported a pull failure + const localError = SelfUpdateService.getInstance().getLastError(); + if (localError) { + updateTracker.set(node.id, { ...tracker, status: 'failed', error: localError }); + SelfUpdateService.getInstance().clearLastError(); + } } } + // Auto-expire completed entries after 60 seconds so nodes return to "Up to date" + if (tracker?.status === 'completed' && Date.now() - tracker.startedAt > 60_000) { + updateTracker.delete(node.id); + } + // Assume remote nodes are outdated when their version is unresolvable let updateAvailable = false; if (!isValidVersion(version)) { @@ -1291,6 +1363,7 @@ app.get('/api/fleet/update-status', async (_req: Request, res: Response): Promis latestVersion: gatewayVersion, updateAvailable, updateStatus: currentTracker?.status ?? null, + error: currentTracker?.error ?? null, }; }) ); @@ -1329,8 +1402,16 @@ app.post('/api/fleet/nodes/:nodeId/update', async (req: Request, res: Response): const existing = updateTracker.get(nodeId); if (existing?.status === 'updating') { - res.status(409).json({ error: 'Update already in progress for this node.' }); - return; + if (Date.now() - existing.startedAt > UPDATE_TIMEOUT_MS) { + updateTracker.set(nodeId, { ...existing, status: 'timeout', error: UPDATE_TIMEOUT_MSG }); + } else { + res.status(409).json({ error: 'Update already in progress for this node.' }); + return; + } + } + // Clear terminal states to allow retry + if (existing && (existing.status === 'timeout' || existing.status === 'failed' || existing.status === 'completed')) { + updateTracker.delete(nodeId); } if (node.type === 'local') { @@ -1338,7 +1419,7 @@ app.post('/api/fleet/nodes/:nodeId/update', async (req: Request, res: Response): res.status(503).json({ error: 'Self-update unavailable on the local node.' }); return; } - updateTracker.set(nodeId, { status: 'updating', startedAt: Date.now(), previousVersion: getSenchoVersion() }); + updateTracker.set(nodeId, createTracker('updating', getSenchoVersion(), null)); scheduleLocalUpdate(res, 'Update initiated on local node. The server will restart shortly.'); return; } @@ -1368,14 +1449,21 @@ app.post('/api/fleet/nodes/:nodeId/update', async (req: Request, res: Response): if (!response.ok) { const err = await response.json().catch(() => ({})); - res.status(502).json({ error: (err as Record)?.error || 'Remote node rejected update request.' }); + const errorMsg = (err as Record)?.error || 'Remote node rejected update request.'; + updateTracker.set(nodeId, createTracker('failed', meta.version, meta.startedAt, errorMsg)); + res.status(502).json({ error: errorMsg }); return; } - updateTracker.set(nodeId, { status: 'updating', startedAt: Date.now(), previousVersion: meta.version }); + updateTracker.set(nodeId, createTracker('updating', meta.version, meta.startedAt)); res.status(202).json({ message: `Update initiated on ${node.name}.` }); } catch (error) { console.error('[Fleet] Node update error:', error); + const errorMsg = (error as Error)?.message || 'Failed to trigger node update.'; + const failedNodeId = parseInt(req.params.nodeId as string, 10); + if (!isNaN(failedNodeId)) { + updateTracker.set(failedNodeId, createTracker('failed', null, null, errorMsg)); + } res.status(500).json({ error: 'Failed to trigger node update.' }); } }); @@ -1391,8 +1479,13 @@ app.post('/api/fleet/update-all', async (req: Request, res: Response): Promise { if (node.type === 'local') return false; - if (updateTracker.get(node.id)?.status === 'updating') return false; + const tracker = updateTracker.get(node.id); + if (tracker?.status === 'updating') return false; if (!node.api_url || !node.api_token) return false; + // Clear terminal states so they can be re-triggered + if (tracker && (tracker.status === 'timeout' || tracker.status === 'failed' || tracker.status === 'completed')) { + updateTracker.delete(node.id); + } return true; }); @@ -1410,7 +1503,7 @@ app.post('/api/fleet/update-all', async (req: Request, res: Response): Promise => { + if (!requirePaid(req, res)) return; + try { + const nodeId = parseInt(req.params.nodeId as string, 10); + const node = DatabaseService.getInstance().getNode(nodeId); + if (!node) { + res.status(404).json({ error: 'Node not found' }); + return; + } + updateTracker.delete(nodeId); + res.status(204).send(); + } catch (error) { + console.error('[Fleet] Clear update status error:', error); + res.status(500).json({ error: 'Failed to clear update status.' }); + } +}); + +// Clear all terminal (timed-out, failed, completed) tracker entries at once +app.delete('/api/fleet/update-status', async (req: Request, res: Response): Promise => { + if (!requirePaid(req, res)) return; + for (const [nodeId, tracker] of updateTracker) { + if (tracker.status === 'timeout' || tracker.status === 'failed' || tracker.status === 'completed') { + updateTracker.delete(nodeId); + } + } + res.status(204).send(); +}); + async function fetchLocalNodeOverview(node: Node): Promise { try { const composeDir = path.resolve(NodeRegistry.getInstance().getComposeDir(node.id)); diff --git a/backend/src/services/CapabilityRegistry.ts b/backend/src/services/CapabilityRegistry.ts index b50b83e6..2a1435c5 100644 --- a/backend/src/services/CapabilityRegistry.ts +++ b/backend/src/services/CapabilityRegistry.ts @@ -68,6 +68,11 @@ export function getSenchoVersion(): string | null { export interface RemoteMeta { version: string | null; capabilities: string[]; + startedAt: number | null; + /** Error message from a failed self-update attempt on the remote node. */ + updateError: string | null; + /** True when the /api/meta request succeeded (node is reachable). */ + online: boolean; } // Runtime capability overrides — services call disableCapability() during init @@ -94,9 +99,12 @@ export async function fetchRemoteMeta(baseUrl: string, apiToken: string): Promis return { version: isValidVersion(rawVersion) ? rawVersion : null, capabilities: Array.isArray(res.data.capabilities) ? res.data.capabilities : [], + startedAt: typeof res.data.startedAt === 'number' ? res.data.startedAt : null, + updateError: typeof res.data.updateError === 'string' ? res.data.updateError : null, + online: true, }; } catch (err) { console.warn(`[CapabilityRegistry] Failed to fetch meta from ${baseUrl}:`, (err as Error).message); - return { version: null, capabilities: [] }; + return { version: null, capabilities: [], startedAt: null, updateError: null, online: false }; } } diff --git a/backend/src/services/SelfUpdateService.ts b/backend/src/services/SelfUpdateService.ts index 904d44e3..4a185dce 100644 --- a/backend/src/services/SelfUpdateService.ts +++ b/backend/src/services/SelfUpdateService.ts @@ -12,6 +12,7 @@ class SelfUpdateService { private static instance: SelfUpdateService; private canSelfUpdate = false; private composeContext: ComposeContext | null = null; + private lastUpdateError: string | null = null; public static getInstance(): SelfUpdateService { if (!SelfUpdateService.instance) { @@ -57,10 +58,21 @@ class SelfUpdateService { return this.canSelfUpdate; } + /** Returns the error message from the last failed update attempt, or null. */ + getLastError(): string | null { + return this.lastUpdateError; + } + + /** Clears the stored update error (call after reading it). */ + clearLastError(): void { + this.lastUpdateError = null; + } + triggerUpdate(): void { if (!this.composeContext) return; const { workingDir, configFiles, serviceName } = this.composeContext; const env = { ...process.env, PATH: process.env.PATH || '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' }; + this.lastUpdateError = null; console.log(`[SelfUpdate] Pulling latest image for ${serviceName}...`); try { @@ -71,7 +83,8 @@ class SelfUpdateService { timeout: 300_000, // 5 min max for pull }); } catch (error) { - console.error('[SelfUpdate] Pull failed:', (error as Error).message); + this.lastUpdateError = (error as Error).message; + console.error('[SelfUpdate] Pull failed:', this.lastUpdateError); return; } diff --git a/docs/features/remote-updates.mdx b/docs/features/remote-updates.mdx index 2e64fb44..f3c1e65b 100644 --- a/docs/features/remote-updates.mdx +++ b/docs/features/remote-updates.mdx @@ -43,10 +43,18 @@ Each node's status column shows one of: | **Updating** badge | The node is pulling the new image and restarting | | **Updated** badge | The node came back online with the new version | | **Timed out** badge | The node did not come back within 5 minutes | -| **Failed** badge | The update command failed | +| **Failed** badge | The update was rejected or the image pull failed on the remote host | Nodes that are too old to report their version show "unknown" in the current version column. These nodes are treated as outdated. +### Updating state + +When an update is in progress, the dialog shows a spinning "Updating" badge and the summary card count changes in real time. The Fleet View polls every 5 seconds while an update is active. + + + Node Updates dialog showing a node in the updating state + + ## Updating a single node You can trigger an update in two ways: @@ -58,7 +66,7 @@ For remote nodes, the update happens in the background. The Fleet View automatic ## Updating all nodes -Click **Update All (N)** in the footer of the Node Updates dialog to trigger updates on all outdated remote nodes simultaneously. The local node is excluded from bulk updates to avoid losing dashboard connectivity. +Click **Update All (N)** in the footer of the Node Updates dialog to trigger updates on all outdated remote nodes simultaneously. The local node is excluded from bulk updates to avoid losing dashboard connectivity. Nodes that previously failed or timed out are automatically retried in a bulk update. ## Local node updates @@ -79,6 +87,27 @@ When an update is triggered on a node, Sencho: 2. Recreates the container with the new image 3. The node goes briefly offline during the restart -The gateway monitors the remote node until it comes back online with the new version, then marks it as **Updated**. +The gateway monitors the remote node until it comes back online, then marks it as **Updated**. Completion is detected by three signals: a version change, a change in the node's process start time, or detecting that the node went briefly offline and came back (indicating a container restart). The "Updated" badge clears automatically after about 60 seconds and the node returns to "Up to date" status. + +If the node is still reachable and unchanged after about 90 seconds, the gateway marks the update as **Failed**. This usually means the image pull failed on the remote host. Check the Docker logs on the remote node for details. + +## Handling failures + +If an update times out or fails, the badge shows **Timed out** or **Failed** with two action buttons: + +- **Retry** (circular arrow icon) clears the failed state and re-triggers the update +- **Dismiss** (X icon) clears the failed state without retrying, returning the node to "Update available" + +Hovering over a failed or timed-out badge reveals the error message with details about what went wrong. + + + Node Updates dialog showing a failed node with retry and dismiss buttons + + +You can also click **Recheck** in the dialog footer to clear all failed and timed-out states at once and fetch fresh version information from every node. + + + Update tracking is stored in memory on the gateway. Restarting the gateway clears all update states, so any stuck "Timed out" or "Failed" badges will resolve on their own after a restart. + If you run into issues with remote updates, see the [Troubleshooting](/operations/troubleshooting#remote-update-button-does-not-appear) page. diff --git a/docs/images/fleet-view/fleet-node-failed.png b/docs/images/fleet-view/fleet-node-failed.png new file mode 100644 index 0000000000000000000000000000000000000000..1b4fa09e034949a29bc0a5487c33d2d886d4b367 GIT binary patch literal 32806 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 literal 0 HcmV?d00001 diff --git a/docs/images/fleet-view/fleet-node-timed-out.png b/docs/images/fleet-view/fleet-node-timed-out.png new file mode 100644 index 0000000000000000000000000000000000000000..bd24fd79d87496142fd2b77fed32dd5847b05920 GIT binary patch literal 33134 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 JDWV_ne*oRqym|lt literal 0 HcmV?d00001 diff --git a/docs/images/fleet-view/fleet-node-updates.png b/docs/images/fleet-view/fleet-node-updates.png index e1a07932deb16d2c740b53dd8135a1be696bef36..2435e8d7d9f2e6c8f9aec1b6a28490c94032ba96 100644 GIT binary patch literal 34048 zcmY&=WmFqoxNdQGzT)o1rMSBWFU2WNad)SA6zf@?v-iY5y&CSfZ zefcmrD9iNGq-T|Yt-h_OsHmZV+bHM7+p(Q~JxLt?H+dog&q|>@l26HHf-k2gQQp)c z1OmBy)!94&9>>R+{(2wesarn?OTexRQ$m7NNF_H%;wDas)IbWq0_f1lA|yjYLl+5* z@dCXiBw*6wuB`DyAMvm}(!*O&#Frptovk0=mv}1HB#&%xDsc*HV-~~G($mAx5;w41 z8zcU-k|&~(m9+|Vq;;GTO^=(=F)H_xN*^!vC0~6uJGaOJeUAXn<4GT^U)t1r1*K=E zR@w!oIQ;zibGY}<_XlCO`=2dk@))wJ?qc*9b2;aP_q~^MCL7Yy(wO(;&R6`_thjNW z7~+?=^kSGH;*P@~`F^Yj$6bhR_BEOTyjAD?x@oLbNaJr)(4XL()}vCCb9aUQ#0~DtkIZcxSP(vr(eg%UA0*j}JkcQu417 z|FO*8;xgH2{W4clH0F0A^I1qk`%)kklDGf19SXatlsaWa7j9ajO9%6Xbf9G9#(Jfa+ zitcYJZ-Wq;UDUq>k$b@1f2Di20#$>!kB*PGS)Il=l+w9NaE{0O&(~Ttu|m?)(kOq0 zUy;DwJbWJvKnhY3lXr2~TlxaW_aMDgS}LyKeRHVF<(CUZ6cZDpvzG0#9Wg!*(xkt= zy?w*=$S!Gp_!zW_Ax{CR)W2p79TC=t*V#E3OD{%sW##aZ*?i?jxG0a)rVi8tW(@3t zdbA;B=r}F)!9t~eR41z;*ynnGOscfCUkj^^Xxh;8sL{n&?9V6SMpd)F6n!01U@|a2 z8rAhVo}L2~pC`widXeH3d;2Hoj>1EIN{BorECtRS14JA&s_AOF-)O&KH$H%ue~H*u zo;ML_D9~8mi3cm@0CRSBR@9Q7`bdNZ4-X$XG&kZ4nTt}4Lkc3-Ab#aaH+8iT&Po}c z^wWezFFw>N|LWLJU{Tl5aK6#8u{z|^J)Fe2vb-GczWnWSyH6p7g@l;+^yH*g-LE?Y z=^(>-{N`xp{&Xqfs^lZn*U6O?0WPk@%U&D)foQ}O;X-a}LAunu%ODkQYAMzNb#?Uw za4G2EAT?eFN>hwCJFnw*UN?o+a2(<6=xC|MwQRlFaw_k_@4mH(n#>0xCY)32owAKiKZZtduJKWp3ot^1EKH|ET|-`T(S7ppx&=BoUXIvDB;gJGr? z7n|(X_>bu>Z2bjgNl3EW!&})r2zCHl}xOj>zpQQ$II0KnSVz0sJ2DskL^%#3Uh?{D#Q0B zi|nJ<`uci{Y~KbqICN6M-+BC|&>(@cx|Wuf#M-N%^46^QPS+ei;p63cYYbxEoH&m3 zzcx!8<~YXHiwD{MSw56+P}gv^=40DTU@D8V<$9EZV1@`9g=99?09{VU?cNw7o_Kq< zlW#^UHe+d@rz|zJx^4Oj@ixtKp+lR+MkpMTV|9}Gk){Ce!5j(A+m3C-0;0WTWd{;>($+aQW1fUyUE+&FWZ=& zc3QD*yc|m1CnF%}`s{g-=??tr8$c;ub6wEakcxZ@C9*p_Ie8X&KX~5^Qo$hOB}P}j zf^7A~3EeGjyxs8(ulhZoEf{#)0-eJ3YTm~W+&7*nkmUYz?>oLvHy zkyHe08>IVsT;QU9!9YP+5_8nY$J<*VNM==$*#CA;iz?yy?(F37&B#vS@Zv6@PpuUEBKKZ#}^n!hcZhcTfx;pb1~n zH(o-OyYCuoS4jOHzWK_c2>RmIzdbE<#QMGOvHEwhYS(|C1MV#hq4Qu1WjvJ=Auf>b zfkeO!Qut@LDBX^-*Z-uV5%Qmd_Je^>zK39}x7f{lCk)2lv6U?@7gyKUW37&ww^0sR z*xcdjj|*3@m&YN@HP;4i+dTmG2j* zEmjI%>~T7ce#y>`myr%Vry&~ummRW8*~zsq)Ef%nQsKhZ)@NWYOFd(G7^p>;gzSx^ z;8fwf?u2iq2tMv6gxt;)DeVZ53b>sfh`jT~D}O`xeO}q1b$CC_kL!;kQ{I37B}2M} zvR&dpDI9oP?E1}cp+^@!m%J&g#;R?Y=GvHGRicE{MIzbn_IS<`QkY^8Nu2gvZ|Zk7 zME5k#6J!J%SI+y4^{^{J&$C?&mzBTU81dY3S6_AHHR%z8gF(L2s(bGm#ji4QS;I zB}zgmQ=QD5)zvsqequq%n9$Su4SaB-#HiW{8v2xD>NM?j)x8U0K}d%z?Ud(J*p>@_ z%#npkzn*4T2ppwE9mQ&1KCDZkzrPQcyPc@L6D2k(ML@rm|2@KM!{>S| zk%{X{j#uH+`YNZ@G_}jkWUho{|4^8Rm2hvE2VV6?joFC3|Fdp;*bQ%Bjb~ZA`ThCY zD0)sN?ASg<{9~e`-zJ%tGE}>47Mel4DxLqh;kZ;EkNvt0=`;pG)7#St(tshC(RMb5 z=ep;C*~@$rNgJLv)V6CIu^AJ2&bW~G-R8NAi%Yq7?fwrugH2slgSOu#UOrLL(1xR^ z$>fOV1+q{L&R&t)4#n$HXP+==d^Bvi2x-FU*3InFLmJj2+9*=P_Z|%XMAp7WwuI52YeLS|dC{(UA{*KP~*Dq=op-$Z-TAyfZ@f>ZfO|EB z_>kW0RvKbZp|a5O#s%Is5kw}7sUTGyZ(hS%f0v&7kT78{)JARhr1n3Qqa^B3RfvdQ znk(%iCpf+x7^hmjL3%Lcl1@?(Fi0gw7q8D-FPy@ctmEe_J@xfT?8m5Y65wGsGQ@w5 zQBY_1e$IQlnNdDLSdCvSrq)#5dbr#fTI8&H@5NF6E!K?WeIua8XCGJuemXAm2d;2T z(>3JO$MEXF*47qw&*ziND*y{sq}?)|AMxAZ%pAzq{hn=uyk|4rcR5ukCFl*0_iSUW4FhcoimfqhX{=#wiDP_r~TwW2WO7e3CDRhEMjRm~IK&3kE?_ zdl{g35n}ZGD#dm>5gUZ!z>eMb+IE!eNK=90f{lOy3+Z$$d!gnmkkddO_3cljP7F3J zl;gLGi}Zm2jd>Q5qH%=JJ~Hz(4ZmYGZLw$o^47T;75K)4W>9baKOS|$SNty}NCc>q)= zspWF5gl_4-FN?w)WQML-K844Q$gFo-QyyZn16ACmALPGNmd?LD@CCUKH;#>1F_Yx| z3L-b{rQt3$>TOCw7b!kGduI`Uv>v(lg%iUpFG-B~1Yd1W)A#NS83(B+c_GTV!5ORKzspcI{}$dU5J#^qEx7|nK~?Fy8#-(^cIt1G z68&^sCqnb`nNLhsEDMVn@vU>*erAb59aK8`CJW1o7(|X6w7aVpi`YgE96w-Uc>w5K z3_<}=Qs9M63CYbLR}`FXz!NhGSOa5J~4rBz1z~wn9g;a zS4X-%Jw4pY1#NZZ)>C81byI%>$8gL#TQU-p>shZ8Ek@->S`vZ~%6&8N9+sDNgjo#a zxCrOYBe3zbawVRoBJ_U5c+ZgaNL2l@T zEvd0{-y?bsb#AHz**8t9@s+-4X%)}hek{gBkR55sh#vc10n1?|6o~rOP^~jy43Eyj z%t7?{?Rp?<9p{IP7V&zA?aIL;{^dZ*S}xcPyzG8p2~^E zRMJlg#2fJ&Nen{I;qk*oaub;5uw7x{ohbii3f>#UjWBYQBeU9_N$>`Hnt$h*7gkOgH0Zn+bu2p27u@S;CAri ze)`qwmnu&0I~$#b{Cp~W)c&1Ii7@o3asl^q4RJTgP20e^rkz*;mge1f?~8UV*mdO$ z0Ksj%zum_X^96M>c0KF)-p;uL&^w++;RdG*U=5*YM1WKR5LhG{k7PdQeIEdc6*&UT z4m(1U9MfoYdKiBf0HgF2D3lPsrtL_^BBgZcDxC(K)LIc3a*dzO&Olc?Zw6>^*_Vnu z$2d}XCBVf^YqDzNLxJODiP zoX0+&9-W`RHTpmE(3pzB3M23Um;@l05gz~|zIzl0{s!>;_lLOm#p!7dyVWL#uhN0a zO?S)I5yxI$UVcE47lCxboKlFqcf2jU8y^60nhyFx6>%eCjfjxY!27H|`(>Bz;k$Y< z$ZU7IXz(RJPPoN(g`37yJj*mC7!P2QaR7#8^}9sj5SNFbtTfuoeDDKCqEfq7`h|PL zVVv)P?G|h{k_=F@FBhJ#w+lSB%NmA;6ME6W9RVzb2f!U&U1H_cpuvlcj`t)jgQJTJ zy7pmJ;C_r#h<~fs76cvS5V)zvlNo=zk^h<-^k$7qgDA#dyZ<>mO)=)|M8@O`&0cbqxV%Uc~Qc zx^RCS7`tkj7jEl+O9X;M#BD=P(P7jT^dIAwLm>-*XLSESS!#CNk*4uT_-s8-EbQ}J zaTLIF8>_43(MP{gSegQCUm7rkA4HL~5gq3of)a7KxVTW!(Leb+UXSrq8MJ%t4JX}H z^!H1f`xYst*7!U+U5Vc??@?I_ukPA}`OMegzq0ylp#X$(9ROlw3kGwuvy;OB6PYPH z@rAJ+_<(_5Kz0TE-uY8NTlYSmEvcj0A`x3p0pAqPD2rs0U!-)r6i$e@9~1m-Z*MQo za6&e5n=X(8B%kYpi4I6NihauwZ9_J&7{W-s29@1gbhxa+4!)+p^wEDp=}B>SZ?Vy0 z3yH!%JwMCAKPe)WM)pPF`CoW%^t2W#4Q(_uHohOqh#0@?+PClRSj-$J)g(yBLuemt?*a1N8-b%$q2mhBQB+h^Ol!E{t_4H?%;Y3P zg1@4`I{N(_C;UWjMyLNBm`?H#Ca#StzgtFZUxsJ*v*kjcn2yg`fscb!Ky`2m!4>lA zB%QV)^LyBeVg=K4Y+4BeWG(ys9cw{Zf~n=v9I$VlfiS~y8e0KB=->a>9os;jH}*LyX?E}U->P!l&!31a77_4K0a}T$g@==6$k5DPLSencQ>W$5K*?TE35OhzGv0#ss7NF zxKup&sI;hwDlE&^))ri!tEPh8#!40}`1~BhWVmCgs-Oqycq9!z%ysN%TZ6M%E^53X<7Z-7;F7Rx;j?`i;fe z{x*>KOyXgW;oYHxgYnEL)ZOw7JJD|~Vh#HW8`%{FKUvREw3H0|l&%xuavhkryp?*I zY-mvMo4Kr?{1i>Ct;^2wNk~XsU0vnrsT6c|@nVP?9bO&^nVCQKS)Qna_{_jvbyhQ$ zmx<6VXEpUs9Jo2ZuY|enb0F!RJo?Q)J6SH5tzmXg zrq$m>(9-MzK1I>l6@Aa(vKUTXaIx2Sh9n&DF9@$ZPR+>No4>-jKU1YR4k);RQaSb> zhzM*8(!oVV=KawGiR`SuDkZ(Q%xSz3XCzJ^!h@7(=jO(2zw4~5y*j$zzwGbFp05A5 z!$?CfPmq)r8VX;VWF?k1>hf&K`#lGaL6m*Z@iflTu<$Tq$~r~y>@7|!zVy=ZP!8!$)(zh2_1J9Ri(fTQqVUmkbfj+Av% z-4FIsIc36L4-mpU9#?qKUtY?t8Ggq9DHdxU%*@Pua!J%In6vXe(C> zMU&u6;ylrD`9mmFzfsr*QfDJKL@#WTA1vJvX?(=q=clK?Btt9|cR@B30(|-caV-a` z@wU4e$qFSQ-KV)7EzClP ztf=lB!oQfOo9FRalA}*0n)6y_jr-}S^VETQ9Jt!O9m4PWid5p$#vZ1Hn)qWeV3+r^ zogLPqN)gqhS;k_VrK2p1l~6v^#BdIfas@y;!oXAI>lS+kp67=BJx6*e#2^-Mi;m~2 zzSRpbO3;ppk%U;s5>td9Y&@^Y;OleN9&lK}W#(B>`D)NAR~b23xf4d^OP)Qs!%cbj z^JeBQJF$VWA0|WkAGZA3V=8$Jn*Z1x-8^(&))Nuu1!Q`~;$y1KgpI!NaVW-h{j#7d z%3To+TPsRhfFd5JjhvpFE1WRK5Fa;u`G8EPm52ImvPcFsjO4fV#)`8O`*?LO{`+VO z@$|{D5*sY4U!_P<>eM)|h|dGtaa8UBYiXQeT)UA7bJF?Ri~(0NXkuD%IehZm1>;!m zoYV^$^SaCMG+e;KS-RS&fJb8tj^9cc$ z8LCikR)6;m9l~DXl+q{z7k$OVkw$k@(O>My&}tXQfr8t1nN|=}xd3s54X@YDc5Eym z(TpyEOksq9sD#$Q`m_PRR@~}_L7Ekj1=b#%YgLeYf6ib06n)5hcA;@?{OL*YeX*FQ=L|d-{1iJ_ZOeN3ge&wKd}%p|kP~TQ}19Vo{PSae&!Cs|-9FL7h&^+mzb_ z6o0er)0#&}rFXtP2DTS!+Hh)(#=tEy|wzj$xtpTv()mDSz1 zd0so*I6Pr~sHpMq0ahRq0kyZ!S6dR4?ePSSV$|1A;Q~&Gs72nVE7`=}L={CDR}F>9 z0J-iG#mW$J2^q*~;$|m$_UY04d7-*=%49aClX}8Zv#Czc`}?$TEn87W2D7@$Xb*#l z>zq|_W@rXZ20Pt=ALsW0;>pCiSOPQ$#Df6tZ6^NEqspmO-29{Z>KyM$XZn(0!8LFj zt6hi_4NGRUGIgwtZ?@Hg$+NJ+Itl86qR?|uR)w`%4NfPT8Il5S25c{)>(coJ$2wsK@~7@PM3xo8h9|s&f{XZmsFUFSQ)hw8(UgfEbTXV zcxO3n_Q+;@81mIF7SvB~plYo7^&@*^IFe$T;k_OUN@=Cn)NGQSpeq@Wi$BR2Tk;B) zG~dn2QF(hUflx^oKKNefoo-eShM9!2&j$+UE=(Ge|Acy*7I~oDJztcQIr_Y+i1y=1 zEm4f(Mi5h=`n0H1U6k&}qB-3Ghih@vQM0ID$fg>H&Q2o*J1%!;RB!fZ1d4kEgyx1__pLc* z1q1}FaL?9ivw`y1PTz0X9u)s^wv60L+f7Y+V%HH_!1aD|YZKrWeEMNYHj_ClQ>x1> zD<6vUTMD!(mN(X_cejle5eLGaurC)Mjue(ZW~>Ohc4albbF6M;>MiaMn(0=>ZCM*1 zT8Wtr3i>bg|Cc{!X~>T>Hms0Ywm|UtRT?*6>5{_5x<+YS#NEs9A=$EdYXT`gMa2-^!xrpLPiZ@jk&)Xl#{pH$&#Qpd>)u`S8Tk!Vk$@&3rl z8E7@|l8c(bSUY_B(FBVMfF{jxpuBeEq%&t-QXXB|Wj{sx% zQD=$n+`GlaJ|5wG$5XUJM1bk=-4TVFXsNa%PdeiJv;-Q`)_ly>oB>)`hYb?j9-yhz z?T0FJ)E%L9mN%K{OQ5rz;J^b#zFj=uU({}8?)tR+y8BSm?!x?WER8i^UBNGMGYP8~ z2h90QYEy|)&mBU`1y5wX^E%bF(4ezQo+4;`1nY(V`GBoKWSm*Ph0ZW-%6WD?(wox5 z4E8b|0~KUdVrz@2Ozf*;d-m|;Fky7M^*Id1FFwvCT#!`)%)7@7IY`jvwY6}c2pPU@X{+RJH4V>ZJqi#*yW zM)V#Uz+inC7Jz>3;yzcnGuctetk4b?XTPsqz;Vm!y(H&y5QVX`*d^A4| z)2buzJ{!;zp>NRAp(wpZ)|ImY5)srt_2!GpIC7i8>K|B)__J95n7VSAf8r4XGZB6i za9m9a2vDYUY}s_=9oOhGC%;^R76f5DNB5V z)$X!@#7dhre!BcoDs9erm-z2L*@~yE7Ng5WZPPVO;c-c+>-CVfwgFFGXWrTp z$No|g!|F@izcU`*Io(kRg4PkLqP@|8C`^2|FhvsqY=D7O!WOp+Pq{a08@Xa1F% z$C@5DFV#sJrbSy0Rlc?*^#&@v){KFi`NT;rtsb{ScKbyf^_9BBfwvq7-6^gJg`Mu; zX0vgr4A3BB?Y`J@+;GmFWfZ3W7bcoESN|JkzNp2To&jcl4A(sDI**!>*%fbAWRSw$ zda+=X(YQ{g%HO~5P5aGm$tRt>y)9FyG^e5Au}N>Oe7R=DU!&MPy}lrCuT<)Li`ki= zxBx+#X4M~zj0Xbiq*w34(}~8D-(P32ZwGBe zMAX^P{l>Rje~sui;M#s?UKz6UXvilRu_#;Z70(^Bjf!b=Xw%l8vtpFxGh^NHrfIZk z0H-X3)|?IMBr+5!ReWCApB&^iAU?IRJ8Z-@5Qr{Y?ZKs%(PFql6G*i1|I{PNpI(Hz zkSn_}ZmtRULay#bfTKy@=Z~tXlv!H}w|;5PqT1nDu>9$0#_l2QaXCkl_H@?hedNn- zjcmtU;tk{O9^tuyIxL+$JaR~3edBiBl^Fv>=fB*egKijwg@FsV*C^_AON-8hq! zX%l9#(a}>=m$G2v`|#0|z~0@`Xh?C2qsmc*{(9o;qhIFqR+b-Q94E1Dboc(y@M@&N zV}@PMruCl2D*+1ig`#OTml7Y%L2gJ)Y9DgEmhMAS)w0cH+xJ>t9SBijcKWov?cG*% zwhA7L)c1imdiwn}p#>2$biYLCv@u4$iBB5tN>apkK4_6r>EP5G)vnaQ4==RGf%!r3qKLxcnf1WvC;byBjkG}NbB2>4z?el zONa6AO;NqB>KFJLnS;`8yyasuGr~$~v6Hv#8?GL~KU@ii#v_LG7bx9$L<|@>EIxu9 z8id^XqsH8;ooDOAJF|O>uvq(_-Q;&P2`=mQTvc`|tjEm}ob6V8s@fXXdaP;k_|6sD_|bVEW|r<}qZ?CdgHYdt+SUUr33aG~+nmp!zdd zHE7z(XFPviEbf)jhI!?VSbYssr&@g%#Us8@-;Xso@eZb?!I@H=zLXlRMM_L{ClW9w%mgUVea0eX zB{r<`@~rmN>Or?{m@yL#bXAM`&E!6f^gGS$@e2plOJP!*i~)3~Q4_e`OV(LhYy}$U zQgXw0_O|~uNdEDYAL2KHHRTotu-zixIY>NN>Xc^eKysG+J%d7DhK?Q{Dcb`Fc@wfBZ{2R>LsIfe( z2*s;5gmUkwkw1^BC5q@z9>cV4J)d%wUV?{1+b48BCJ2xM`ST1U2L}hksce}5MZJlP z8M5fF5r9T5nnaooNBdiXOTOkl#Z}#foj%-(D)p%1n~yFY&8> zn?W@HoDXXURsp@e&-j0=n>i$C>C@O2oB;rKYqDG=xoN^3R}#lPb12#8a~itg5QYW;f|?a@@JeKgWEQOQ0nY_VECyIyc@S zkYbCONw|0La(CyMBjs~~bf(qniwk;+F0nv+zu@rvM;;h`<++AZp`3|{#eSJMW zh(9W3aUeO;towKk-J)=0!B`X40>1lI`Zvx^;lL{ z7NAQJ$0m9rv|$b>bm9{e_hL=$jb-`>4v+KzE+#~1vHfVKINxU(nkw)243JzXIAJ^% zHXFvxtDjzyw#M7)C$fL(#smMgTWbLXUPG^=!thzZ1&LRKPyZMAA>i}hOVR@5d(XcA zv~KS1DF68}JXu{pd~GCGv+N568TW+mS^YwyLfb0FCtOPBF1O=J58Z7)+$d7qGHB%+m6%iF8f zbKM#ETfm*AUX|2PEM)*`)Av#K>DmEVKxzjV2B==Be=tM?y2cxOMuf1$)M3o=py9_Ia7fr=E8u&+#PVMM7gec}7;Bq) zzUc4=e5_n@K<^eB4$|z{OV%azKCL!pSJAjW+ziCkVl$mLyiS<+RB#eM2g&p| z*l%Qk4G{+P+|4jxIXnro?siyhqn~I8#_D+VLq>*w?63-b(A z4x~s9t>sz5V`bg9Ff-$XWwi3E8Ty-Vey_E6}X*D zfBb{U*GE6WO}8DcLcuIHuy?KXof~iha|Mm4tNn^9`e{!N7Hi4W<)}jiO{f!Q>V`4R znb$+4zZ#7)xTVYgv_&nc48vhBu%r%5@PiPBrgh+dMQs|#R1c{2z*~pbt=NMZ7k)l1 zR7e5T`mn`afr~bro>(zy--wC{-W^oXz(cmvFvF2y7zPB0Sfwh*3hq!ke5~nK5dN^- zrK(3D%ngnjb53$j)ZE01iE zRU29xESQQU$~cjZrtjdJ2u+EhUx5r}$oCJ;eWj35{YQ46m8Qv6zyk$EW8kn$&bF|L$1)A)1? zx4fNW)bFa8vJE^L5F&W-){Vk?NOx?KTGhNyXr5d$9KAHX#rZEQYD&usC-ekl%_mdr<4;62; zkQep-Il-IyYymp)pXtd|KVL^17N3kZ zl}Fw>;LiQhqA1{|OSh8pVI)lEVWV&^;fHkC5#^pbTWhq#zvu*R1SN?#&RRQLy3Xrn(vB6CP4=!}&=9f4S$q`p)v&h!_ zeAd(O;dznqQCts-|HHeoi+UKO2jxX46nBHWM8{7_hP@DGnbjr~TRe_Dne9Sn{sEFo z69_a)jLxQSs6!qn+NzRT_T(+FvcKi;jJVlzdriJt^~TQ%VdWU`6g%h9Gn#)yQD(2m z1l+rPQYJx}66E|y4Jvk5_z-9Q@aYm`+pvU#%`G4RNlBzEf7{sc%A919ni}xFjn@&L z{Lfp=-~Z=Wr${ErmA(U6pqcBAg6)V|Al~L;BOKYO-NtGL`SidtdTzhowxsvX9Y~s9 z&A&fYy_br}Jv9&W4Yx!ZWU6T6{`ykz?dJMa<#Q#pyt4CtITYO9bn&WQCEnPS)t|t$ zOZ=Y_?H)1cUG4>BIjvsof)^{_M4|Kqg<;Z$EoAY$oyGjFbRCfMqB>7#ZrW0^x)0P< zVV+BVzRt=KooL<=Z?Du79@gJ*30h3q(+?eN#XQ*D{5PC1F*$PU_@v_HwF|hzt~5Zf zy$j{A)t{5Jn-GU8rt%U!>~@y=NysQ*Z1xedU`p{T%7TK>(?94dy;kQqv(FY$V z4u`>!h&~O<5@=?>LqHdrKYj^Endo7xW4kx*G8OF%Tob(p06_yX4)*Pn<2x{Q#Qs3vaDM;kM%}r6&>G^j z?NC?YPb(`Dpt5iD55vQ@cc*pqz{@*8jRRRGswFHB|H?n^`vPz^Uf>TjI_BUqcJL)7Dq!V>CZ0+$euOMbT`5--wjD98CVJ!e$^^ica>5&$Mf$dE5})94&8a+-OL|8N6;iNCyW_qf0XvPmG9H0 z5ngEIporiy9>Bt_HbLb0gOT^ErZGoRx8F|XTC*0_#(z@2@ZIXBq`b7f59M7_z5*Sl zRDKghbtuH-vsneDk!xFBDrWkxmSR%_e=4#+@ngyEpdj^iHg@yI!8SnOI>zz{n_WAS zatka+xK6m+ooxF+(~y6YcnP96RO=YDU3{;3&gYq$ zeoy?pXZ!_xCnETx zhj;vMYdCLs?B)~nU3wzfB_dfqX0t{qeuJgwym{^W3@BgrViXptckdH3VFOITaDO2a1tMPRwi^qsld{pgdvsGvPb>OCh187pFzIIJ)Vly|Fh`?#hY`SX@&+OB}VvQI6I z%WHW9vvg<5_fu>Q=99_|U5#w_0nLG*j?smPm9jL)agd5Ftmc0>f3=EW-9&zx$rzoQ z!&C71MNJJUC!QUUaGp0BPCwx`s-}H$qnf)`f)o4GkGKvFMA`Kvx9>OKWu6mi)mX-x z^2tBDc@3k2n`@yK453a(a5P8LFNKhDjux= z4oe^qIMU%WuKryL4b6=Km*F|D^mKHWGO#lBka2xE{8{}KZWpi}O;m;kboEy%h>~X)m%SUo2N+R#9{|elB9FHqpw=d$ABgTY@^Z8mmxm1SjsV7h&*n8E7^BnN)U7623z*Z{QI6|DE`?(Pm? z(hjclY;0@}o1IV%C8qnMsYT|06Rw7dzW%r<;e^n|Ev2Eb2DBxQStu?XFeOx*OV0w4 z31CO!(QC`eOnBWJV1Br&PZQu%tgWp9(J@;an}QE?PB*}2lMFS}lLN=I(QP<@57%0z$$9QGNZ_5Tpt~xG(OECg8krKe*VE2#X^T z7`{tnP$vZG6?O%7jl*OjC0W{A7wg!%g#Kx`{*dCkU!K}7)J`XDsBWuI5@v~FyWh0m zc6us^DRQLfA-cnk2xK&td8sc3TEUAN!dtYlvvr0?KschdnXx@|T6S~%2va-0355QK+3dbn09)B& z)%f~cUNwXT1x?prQQe&);q%=CLEjuHA~m=kRd1f>90?v;)uzF{Qzw+nMRi}lQ6%!3;h6}#8Fsn=W6RF+6}J`93v%D3PY`TG}!d?67d zN%$EH;tu(Q=&}Nlor0l+wDhzkJ8OH+f!I*s-m?Qsrt_;Fdk=#{pF#n3#Nsg;%ItEJ z4o}h5lnYT$&25_@Z3C-GemT@s0A&aC_!|lY!xFSUk)&8D13}VN=++v;K^|Q*B1;HX_LW@6u{hgi9_UmADYLN*0TEEUh;?)9KUe?iC;$+9cB5 z`i|zOCg3Bw``^gx@hjn(7Pc2VNwHE56D_!A}>b@D`gaKUOajrWI;tq1j zyW3Fh2>b|l?m_I+l~(uta_u#_{0UNR&Z|nfxi~20U$I>`Wc`FIY1Ih@=~&U&KO*K1 zZDi0AHw{m@c#;vUHtMW!s89+mCYS1L3hs~m_}63?rjcGa)Ki&wHa^CM+S@I22#r(@ zM+x8|6;6y~ud1qa3!V^}O^mMaE&SqOU|Z*n0tZf5pQC1epyT)KAhEIF?tfvlkcl3^ z=`tGhDY2ku8g};W{`|SAdH3$JFMi>cO~O!JH%cf{d!PI1S!O3<2)JNw;DXO(=dvYP zugL!cwhTdxL|Q@k19}Ypx25DNLH^Y??z8Z~x+dSQLG})-1Zft1SRxD&qrD&Yc+`;zdl)7Mxbx9G;wcbA?9^;7} zkU8gMn=po9{T&UuYX1*)Fq2zH1jChelPPR-1eD3``u;Wr$E#P#pk8!!CaVGQy;W@H zs2Q7*m9$UDTi763({VU1i6#flGCZxXlYal&W-4c5f&)WsRB%XO$#B8jQczucomeoH zLPv_YcdLV@R%J8ekLghpdNfinGlnP~io^b7lfdweLo<2y@ps19Sb%Y47)t@3ImaRI z4^w4%A=&@(HPZ!zY#6HO_J@8x8Y4kfHuk(mZo)I!X`0lIx zM<8eT?9BGY2in@p!$f_@F8_e+h<}>BL}Fs)bDZ_O!pB642`czyq)F(i=+#!Ryy?!# zajZ9d0*Fa<_h*A~T31)@)D(~Rcy5pRGFw&Ec}uyEd`+fo6l;^~$rm%GBHacXZD;3N zgPDXgrnO&-^C%+C#u-7+g|P4OwarHqhd2E(M6TyQ#bg%b?;i){5`LQFa^f>66J{e9 zDA5A{8t{MrFQ6nt_P=`Lt6!M~W5fQ%df_~=8Hnh^!QlIVs^RBjPs#RE^g4F&5mjGj zuCzu173>r}!~ESNPte5Q=`JrCuVk3Ox(Z@*)|{)v_yYGqpSacEYx9h!#EK7zEbgZI zoE1ZZa#Qw%i4@;H8bPS>5Hp(W=a`7u^XAy?OHcj5(dl~si{GB`1H-^bIPMv>Hy~eDR3Z%n^OC&^m*V=B4yEWIOkGNhk1 z>U^)gNg*}J9kzz!l9fsroL*FU)q1K(ngQx#w!&r<2jf?h)6?6PbW1dP5Y*P_p#i;S zS5sOQ&j|Y1>Agh-t=cVEn#9_5qaTBd*9z>!(%wxcYNzLvStq%HLD>$a&78+tW>OWU z{z@Qi-R2jj912d)%=kedb}ZfWaxH#{}W@z$5>-ghxtfq*rEEn-^abZWc{CL#vP+IL#q%_rOPQ{?do+86k!q!fK%1I*eMo~5&>(@YR&&`;G znf6H6)2`O_Cc5yWW!8}0x5i92FVLrgm$c4GZnEnA21$Fjv{dK@%dn-I2j0lh$tbr+ zw7zh(9yx8=BpNH)FHyb9A$8?Td?b3CdmMU-(0?V5;VG=7l#-6i_eU-9?oHJv*EVtmo_ynEp8|_jrb2u6$z!z z4z6qE(x5wh6Gk@L$UC0x<1VpR*-Tu#x_a|DpL!`>y9%p%6&9|Tv15qg_Mjd(>tKpiC>EPk#QFV)En?+Ws_=@9_TsE&z z!_DG_*PEYcm)uVnbv@_b<>@Om8OKh$QM0%~Z?5#Iz(zSa@280@zN98s} zv?`2*Ag7U(l~`Vtbd}ks4j*aIEAj?VjAo~yI?;LRqk~0M&qc^8wZq7u6zN_?T|cU< z=b)=QbwYC@3GTUaf*Do1anA?5-1l2_{c|JA3iW3?mUvQVjBqhQI(#9~QM zoV}LfWj)pdco6)?&!?d*e#e)Cv)_9|>l)gVRF!Y9jOXlA%G=+eVC#^2H3QXGv~fGY*IM zyh`68mT+P^qay}lb}5)Ur>f02cyh#_%cqH?A#xP8lS zxl#noW}Z{N34QrrH)}1y1Jqp+yz*uWH^Ia1zI^-xxn(5a&1CHD%ZW`^?RoCXdQI!r_JoiPgxUiMjI4Z5C#~F zvdUKSHGg1jmEb#pn$)WtQP9B!Mb4VhqWcub&IU^igySpddyaUjp+*z|Of zF9Ov%yu1Vgk{o@YXC!g8jP&U8xiXR115X*W|EYAN?~AfM=E$tGI=WXjfbrJ$ zVY6$lJqLk{-$2?IGl0>A~&HplrXNAq;MWcQnDVtFmC2@pQj zFqo{bt#t?1r=Sd(3XibWXwL9-Ap=iMz~e(O8qVimk~3GUlU)9HP|+t{ESWu?Zf?t^ zF6G4txhBBKo|Vt9ZvaN~;|lcy!f;P!^VRC70MMs~I|5`X@LrfPz$ctfZTz9=c0Mfzo-M~5y}DJ>JMjYAop%}!Sjx7_oZbObkDneR@9w3fSKaVxGqyAPD#z) z$A*d87uXvfrsFo5gG{bKeV#$;lp35I5eq}nnRO0r=cTG*nWePop+Gqyg6`FefLdIU zTJ}IZI5Ta9Q~MV$*t<&1H>`lWIyF87M1c{}Q&l@^D>q<3Ch1B$o1je)?M1Ow2%b-B zVW~ucGvfA-L5_KFcR)`kt(iJ=Z@(rx8|8XsE&T!Q^Y<-6C-vDju$?^f0b~}z2Diy* zKHTkz7m*@6LmLi(M^%Kc>1-t)be7E{*ucE+_E2RcQv_pVos{@UCoqW;n za-n|Fdk>Ha+yQ`PxnqquUR?C@pKD3TqWk0hC4efR$txL@^-}pnzqwt(34r!K_l#)Y zdP?>$t$c%LWv84qhjezS%sA{FIeDcXzFxh+&5pkjzkv&809wvs{Q2FS#y#1Dyl`CX z{z2`rL#coFcN6{2<-K`)nGzhcN<-mSPoF8&&%71u)y2|YuJ~A*84MZdSZLkM_&|F1 zR$!mJ^JH9sT5e(Zo)jH>^%V4s#$<3zso`h{L#GZDQ>5m2iTfROfCUM{kNW8A;w{DT_2%kWjrD@3zm{VHFi^mEQ z!dOuwsnU_|=p!EL>Np)QHTjGaeMMY8eHc^`9f_tDR60LAbZBO5WpWuoF@^Z0-G`jm z)gRSry$Q*QZ;qmcRpVb9&WhYv8q!d{!S#{SlEA^W6&YHa6Mk5M}a0 z{(Sr;@I8a%8fGDa+AHv~B7^#f;t!&6zy)fgvXhljFf(AFvs z2cL=BA~^w%XMR6@pj!!&h7DFd$QL+AJ8IZjNia#VTYaH=|BZdvzq-DRh2xdC(7z#) zey_flNqE5Cz8`4lDI;d|mPaDm)m$;@@n%(-a_>^%XbkCkZgn;q@W7j154xA1;0@1+ za|V_4AGxV%NbLInsiPW8Sd@c~(UvpbWHn6An1uZ&5AN{yYu3DC4omndHxs-e=N~Wg zyWkXiOmv8iBjbeWy^wJfyD;mBXVyy_{L=476b!2jTyn+RA$_PKyqL|g4;ZsM?F<+0 z%yCU0^FMG#rTrM8Swo}A{T`a@KQgbGR{cd31&`lw<7ALiVHtcye1mLU?0%KSBQ}C3 z-0?VB74}^y7Ks%h^xIG}_l|s=S@atHYwT<$ENSt$e;6d;qG$=;Jvbl7p&;flLxWF4 zCfVQicz>kq6h%`&8y^wl;a`4uoI}g&JL>&f#eBlOsP~3WcDQ46uJ4y0Ql-NKG&x@{edp7y;kAwJhmnHdN_)A+sp4PLFO8gS5AI^GBwxNPxBS_o@x^rNZf@cm zLoov}HQ?72m*dH)|9lFeqmN90F6i;fB=+ujqZ%!~?g*b}&~ir{9iqHATM4Ir752mDMkwV29I z66=fXeX(n7%k`M=Wq&?klWkfcj@fN4!*8e7HDD)otBLGw-aJ)Ab0M?L&ZeIn$tBGi zBfK`zeLny#KMZzsh`HQo;A5J3tM9X0xH4k&vdQ84tY_*I9mPejutK-bq!4LjckCIC zqliJk=1>^c*3;&oi(U#&<34u(rM11u?avPwuXNd??SuuJ&ozesjdwc-W@tc-e7<{f zE%MGlyQOsqD1A){{!kso$<|YT*B6fQ4qKd;f_!M+PMS#wl-hMe(1F0bS+k|eqW{f- z>NFQJLr67B|1BQ&K8lbq9qpZ`yx^?41?mghU9%@_c^0@Kcxew0mu*{|HASQ!I7CWr z;W3zoH^P2FnW1SmsaV`vi^v=DztjC_e7E#*TPK>_f>PbM17-_+?CMY=g?}9J(5x~n zj*N8vpBBJ5%;GJFl~C4-m+%ms8h^m65jGGRoGzDRBUyhr=7)wn24CY(KXfe#Zh%^@ z31LlOf$O*&iRP2a>;eO14)>cKX6_On*6Tgv$AJc`{P5`KJ2#-Q8&-hr%fT|8^3h1$ ztFTi~5czBrtg3M_j}J?aB5DwuM^IU3%>!Vx3?X}T59mO{+siM{-31~Y#03?XskGgV zvj}tM@=^Su6CF^Ckiz>hv?j=%L@HhZj_4y9corRIWymEa)57w|$_o$CmKKTcEvWGV zpcf(Iy}M6)`#TB#C90vnva{OtJA0__yq7uJ|3Y$&9gKVrA*Zn^)aPy})ImgWlourD<-ZeAF4 z*ek&37-y16D_HTwcoutaC!UfK;R|+e(w@A)-)k@Y$)pa6FaEC2L3z5ebj|Qg#elIZ zl2+2xc1)f6>~{EW+-8(3KKi5}gttS5hcPVzu&@sLA-N2m zzmp4D(vLKP2xRN2HXRp)YRtuggB|S{&D2=pBd{U)^m!NGB<-1J{@~h`#yl7GFWcHi zItUIl`Cv|$qlg{j_0s5zhxYAi@VLhCl?lP=83v)4^LCe5ekV5(dPvU{nskSx%$9?_JC)Z&v8J)4u!r8>UQkk19D=;Jfnom)QPNg__6?TKVE#=~Xu>mA0fv%Zyq ztmx}2V0Xo1Y$loBVY$7!zt_=U_`EJUuk6Tz?=msF6L!B2k?08BI^`<61Syu~v^_~` zq*BMy1XBZ2VU+C80`gxQ3N7?(g20x_e@kRZvxmo#r=pmUh+ zUcf-oBj2>k{^v3XO_~2qcjn72`*MrNed>2zwq|$1g{JyeU3HX1Vf>hLcD zX~(Xv#<=>g-Q3Ya0=C!0YKz=nF8yGic^%hJ`p)$(B{4&YAk$IrUA-^U>{WtTuj3Eu z^4+(E9>+;NY$Wp22lPk)xA12iNeP0V9p`qzZ{UkLvD>jZe$E!?^xmzYOhSVon)*3r zY$eX<`)|}a9De1ya_hgfQwd#vp+lRaBXs;oJ9>k`PSsGLnyW_J<1NlW!TEAs~dj6p$Q%ye}>O?W>nurF$Cs}7r6g)j4BEZ?`mv*e$Grw4QfT? zLcXe&)n|$>f2lu^MfN^BXAD~lbas#INa$1W8M6s;Vd_>O`HAzCzFx-Bk$QIeLyEer zdE^5#k^J97#^pD)v>x)}{|K&~F5gq-I7=PgzYY14g@O;=KVougJWcI6S3OF%R1VZ*=Q_E9nXtBRJ<}~My-v)Mo zqoecA*VO#W{VvmK6%Xzp?OL;LOzb^?QPW~vk4z!kgUsT6r#I}keU(W!wW-RAK)^JU zKRD|}B9O?Vo9w7`TePJ=!?wJLr_bvG(t)N$3>?ppM6dPyy-UyztwxAk)5tgV6w_x| z*b671-T5nqhLIh={hX1h^rk$^!i#Eu`fue2rV2c5t@YC$H&3x?p2IcuysR-IVcqr1%-1sF0WX_i$2nPy&xxU{49JTK z#{W*@+p&m>3fq{9rd^i>`YQV|f*|N>@4rj9_P`!;WOJ8Js5?@^oO~w6e))Mg#CpD2 zj^q46;rIFDj8tCqHs3tsjTp4h&>shc9gtTAn#)8c$CKU{pHCfi2u!2)@L?Yvl=l@l zs#WBZ#E=Zc^;OZJXCxRZjGe>Qk30VMXyz`>3$(|Ivv6_;6*65JRgVnZwRWb>uLDjJ z2-!r%lg2(h62?FJgq*pD=x(}ktY8pr#X?W-n>~~8pe$BFe=dHNG)n6YXW1m7AxCKQ zM-|^mw@d0oP~!YbNP`m^m?1_1qF;Ub?kD2C3_sYA!qq4zB(;Z&n!x}ceYiAbpi*ZX z%0UV_pSh!DhyO9|Nq$}3-`S?9EW)ezFG~ZmUcr+*K_(RU`<&LfuKNH9lzTQNaYPH= z6+P&c^6}u?I^;zw4RP;jV}{>Fl=pZPk?_xtOiR*dS>7==7GG0eKAX)m9h80Aax8vk zy}>!}j08^=p-bc65MKjmo7rxzkH=kj`KdmE^;R8JoYC_4N|l;mpZyv9E#iaHx2y^X zcPqeQJrgFSATK|51prORIA**bz+a<5D%>AqkkU7jv|GV1?!a<~=eTknitg~2U*g4y zQyb38PT32N42@bsHdttkFPTfwGA(J<;uN%6Q+n#P_CxbBH|K|aK=9ShT#k&v_m#w; z7KOO}2bhX~Iz8NxiM8`W)S$5C+c$ZVMAcNdELQmCC;@5RWkyoy6)j$~`$=iflS&5i zm;t~4y-MxG4|cP{JtAK8MkptLy1orm7_#sp7yi2^^cYBH%Wv7`wGDK2x2_hfpJDm> z`HAfwHc-&P??@}Mp~B0^Wjqb*t+i|egm9evXvi$ffB!6Y1=NUTmXj=5gwW5YpF!FK zd_{b@1Ik|sh5v_HTHkSp-z|+Nsy*}t143C@!8oYFzT*G8(K!IEWSvX72BT|gJ~^$; zlN2Pxp7S@+7R{44JASYF?Fn2AY+JcP_Qc4wu$H3vLT)R4&Ik6^@%AG4xuo|ewt~c@ zYm#^VM@kNyzImT3@^Zcg!UyG2nE6rB>6?rYNp z;fPczk0mIFVE%qzSyD2tB0sove(or`O(C+;|1?Mg^`~z3Gz+l0H;yh2=95!b^mTWq z!`WzHe^+k1HZx+K3vzeIsuMc>Izx3n|IQL}-QC>uF;V}Z$mxabd0)*O=E>Vnxe(04#wf-;`)Ld0AFn$IwkIqGGYY0j=M=7 z0dKXZarEs8*doJ$sZsSsMKM;x8Ruoj_qMY?ECEche%uaU6l7GG?*Z^M(|Lc58V-_u zOYujundDn@W8?L4FSV}p*T(%HgYSn)jGzc@F{uDkP{Km0D`61}|c$?Pd_y34Xz)i+0TAHgv^aUBk% zx&b8?df3$oJhof`FtY~xaA*}!fZp5Kaabsc|c%(7Jz{V7{bNKK28W2OFI1xD`6C4`>96WEY?cV zKWcCSJSZ8WUIy!8D_?^hSUe`k7A=$I9)DN(5 z&wtM0=*<-Eb8GYVb3c`^?nqi;p|P>CS%{9B`{25ZIK=?K>r7w+#efzTa>Taz^06&$ zKWk3d)>dMVa`HBFPa3D$bNli3_kJYxVOSuoTh2Kp+Rc8N3C8>kYs&f1)jSoGpCvA_hm$aZxmCC6izv*Y9FB z0I8CX%Se+E|29YG~E;DO-2BEv&W^bWWlG=@=lfYyX|{N3Oc0y7NAn(m&S z6HOp!LM4nn^?zD`aw1C}I(qfbRI5W;QS)Z~q0bf}VeK0{XwVph@@DUI+t;3?1dAwW zv5HS_KeBNF5^Rw0Z#S`|wABu`vDEiw>=@jgfQQ8>sz~X8->KRKXaBmfhUr*aL&(QL zqs$q+ZX>f|^j*#zg zxqkg3bSv@ znUvU)eS(%uQVAQbJ#(v&-XA?a9BmF#-)}2KZ}_5!(~|~#b09-^Bdtq7YW6LBu7H~w zbS&4z8}#103o-5h97MjFo5*lI$ENHd6pJEApKaW$Xxe7Y3R30b$GA=!bm|_qQu*dQ zHMuiEuAcpmt5v)U^>JpI5e|SEAo#~&8Qrp;eTH*jZ2pjh*RoQV7-~KclZ5pmh9KOg zoqV-7ZwXMwDEsdSm7t&|(APbF2NwcWlax*q$F!u!P2|U|__@YrltnEOIp;oE?3C)1 zq0jc$HUn&7nn}hExJ&ZgLLslL)3^<6*t7V)8H1}i}y7EP@ID1&#(BGSXbV%ps9!JtkX=4=XO|KF$Bx`1`fU5SW{s{cMRJ(aSfoaEf zKF{msxWRGh*y4KfD$_%Ds$U4@u2-;?+y}76JYJ8Iadr_2Ms%G$-Ud86UW|phDVYg< zmdy3PVeuj6G#WB~9rl(18w=kF&;Se0GO=;}jaV;NFawvW9OK`vPWT}Kt^(EbsOsaA z>X4jNI{=hnRX-~af7kaa9+^G6&Urx5>T_ot`ErD2PT;Eoe9rtOiK`BrG?ju4L0LyG zwmdE>VWD*1QPIS=1n#L#M_EC{rm$v!QpSe7&^0ifB+tz#NZWz49p9Sf`|_hNynp^K zu>B06%x@Qt{1wEBW2_~tGI+Z71nn7Ci;-R9>ci!KDKGQpxA7s=`^$#$+&yUxeYV7# zGX9Ae4g2he)P3h4@@(^=w>3Cl^p<>%#7-(g^xP;;#J0tZb5~R+}pd>_F!VjY+=Y>jmLdW?!Cjup3Jip2B zoIZ7oP-(1P*u5_jKXhk**oDFBJjd@(J6v-o@uSnO`qAva z5WF~5aaXA8Li1$bO791rCS=*U;>2S3atoZa)iu^PazLv*ugc4NGj@aaE}y~To*Dr- z9-)SpG?K|kL{*~W&-QHV;)!@+ErraL)*Tt>_J9-Cdui?5;%rj9LB*j<Pc1J8W~vCMfTNJ?G)Tic~d zelWlEN$ZljN)PTdE+R=Fn`;YbBSSO--jl_?`@r+?IBvBoImZspLN1C)nIG9~*Py*e zmfpLn)z&zI8vdkUw6N7b(wWAw5E8j<;wDic8k83zDl{tT_#x(qU-8Z5I*(8u&N6Xg zk5*4UrfLXF=TDIuC^|BJyM9&f!$)2P(*+N~PfOP$o{9?uq8c<_(B0~9Y>?ustF<^X zORIlJtXWDEMAvCKU{^}Lzun|&*_*g0FS8=26$@FvrQ`N+DgHRW-dDxVDSew@L_hqy z*!-;-Vpa0`Of6^SQ2-{^ zzS1NR?3xkUQaWFF+gIzi;HNlER40Y2!CtMfC~LMJqGgKl4VVd!GM_)To~M15TcxNX z+6)A4@B^Qxzg>l@^+uaC>_iPsXP8sowgU<72TF6-i)F(qUW+(D=(h#Jv37ol=y->) zxpCXewX5|Rv9Hm5L%E;*+YajH<6ZY9=(oX?fU$6{ouO(oM$(6$Jb_obttZLwZBYn9 zG!L&%m^?1su6t^O8#CfN|6#squ2$R!PQM)$)w^+fK|k<02mC@{I-h($rKtbvL1)d!^f-N> z+mn7vzAV012Im0?jxI@WAULDpy;_}&vVCMzl)nji`eysTbW1FAma3;5fe{NPXJ+CK z&ByX|PgZ@b4zC9q(9fRWi>%uxnc#HEOQZ=~O3t`&kah9yo~(uQRn)X zWpD;NpmrVhysPqoz4JKx~`N^tvn`URoTcE>SG+;vkGbK=uX zBz2{Fuh6phpUa=Hv3s|WaH}s*vj*oiqz+@j!`bpms$`NSaJBf?-r^G2%DEryR@bF*eGGnnu zNaB$BNqGdjNjNq1$2uEIrsp0kR&7B#S`@{}K1%c3`b>7Etu?>5t;*&G#7nII*~R5% zpRid|f-R-3Y{sWg1+PBG5dSIRXBtX*p??ATsxDH;`>^}tzA?v_YoQPbAFqJ*8KXZy{))pT@wv{n&|2}#vRgm=#q zfqBhL>VipaSns#Hr{?L^ahEk9y)MF7jqi;R-bg*wOV%y8p0)NR4zI_Qd!MjE?I(pT z0s?pS1bp1UtIzRiU{mpo9^NEno~M~Fv`!l|Urb2_CBuuyyWB?tB()IvroC+P42nvQ zYX<>sn)%(QPZ2X-EAiWX8|x!p_F{%CyAUzLSkk>R5hcEU{Y#hUc&c}n);VINU!aI1 z`U2KJLW9`mw(}?8IyFG*1n(*-@I`0sl2 z6vUI?HrDVSDdaM?VcF=4;S>)j)}r4P9@pmO2k1dkG|=LRzczWBh1sc^#(g7+D*OTT zx26iCXr}QRnxw!i#7gXQOYfKZu^GM;y!0Ngy*Uc$5RC)f1;!JgGOw!3E=y#IdW|1% zbQ!guwJ@~4ZbPet)NKe@A?Ml6=#6=|OJ2t+i*eK-B1+&!PK5?{(5ZrK<-17y=D6bT zG};&l!K|ujJDe4)QYinT-m{NWM|NY`TdJ+Qv4Ug}dXU0c+^3SHNu8(x|Gj~K5ELjG@=<=mc?v-dXWS$J2`18a2c@hLl_pmetcK{L$3c-`h8o1AOe4K+hIrO~eH1id0V1YwFZSI&r|7Fcmqfhu>w{@% zGP)i29M|4RYO~DFh{ysOSFGLwi_dh4%vs}2RdDT=wQ_ZFLxu=RJDM)7Jj;*81&nU? z7?a-G|7O(SW^nX>c<=)Jr3q21-iS8l=IuPSWw|moAkJ zLY_&f-Ca}*eko-WUUN}+)RMfHB=H#5Me&kZ9PS94HA8n0#!LNHrzhli#QVX z8q{w6a5^OXYR#Zr^u4WxG8fvlUM08A{td#<&hKBM*%7mB9>jVscg>Kyo^5|*J=hPP zVeSw}f@#*y#viY7eJ&$W&BAT{crMjj%lE3hw^^;8=qrw5mpsP97ns5naq!TdNVI{P z6w&-sM97045laAgj;3wWc{Qy&vIQ%{M2RAnv*mv4N-?9(3#Uje3<})HI-t-7h;qUP zlJ{KLoX`@!t5sN?965PaMh%{@x$*BEoAoBiwk*2?W!FhCZjO>dXx3kxPh-y5kWEIC z_M4nj3ZlqCWZt@V?xjXA$Bb&EH4UNa4QDw?G&S87JA-oJZ_7cVO<#I$T50~Q-LGHM zqEajpf%FV=hQ@83$29(S$N_f}&*mWMsD!0~h5vN>o0@MeTe)}{@tT)WS;;y?_`8!m z1P=P?pWTZ$D>g0r{Bd~0rcjys-UwG&!O|g-*O>=Fu&(r@OerO?wN}lH1}%k}R~^cw(`lEi?ejnOD0!+^SNx3x zNt+%*0t_%qd?{u;FVFIQf~f*D{QgpobTE8@KpY<$eyD;$Xef!>tn{UjtR%#>J7j=P z06|zS@~_K{-11=lAs9fw$@0s5u&M$kZs~60-JFN zb>0O*E6qzqdcL~L{ht;vBz;bC${^k*fm4(F&N?R06F?1jvs+@u(p=H=^7BBof~5l!yEY5H)^ ziNAlpk>JKgN1vUadsW~>c44;WS(JTa@VG=mF@|I5PdtGxrCime>k0#{u*$Ns4>mTS zkoSiG2f%6H`|9fIf?-c6+}|BESZTBbNT8p7C1zCxL29oNZq2AU5G-jy=0t%F0X zEM4jTPzK)z5Y}YA0i{5YtmFs1LQzozeSJX6FYUYm{NJQS|In-{ap%>ml$1^9HF9za zXA=3a@Hpy0qO|SK7v<#u6rKR+G}%IE(OJgKhktxigOQ+A zX0?G)TX-2DiqNaJ0{9+AV0KK02@LSFo3li{PWYw`WL`Fa%2w9asuJ8`R*0npqEW3_BF@Tx>R1h#PpBy!;}oiV*`XV8)O#gmo(ji{lEY zt~W&>U6-gXzOn(jaz~9@RQZoUNTuCsgyMr=R{#aL)-@hcTIGq77+~S+@HYUq1AJB* z&{O<@^b0DK)}w}=3*AeAWsxQDYqzv4LM?FuAMTY?p95LaTsdgy${2Yauab}L1hxdNt}Pc}CY?+1;uH5GGPpQ;f>3GwufcgT(z>0WZzxj$Cq}`| zYj$SrhA9XdDL5nNG`U zfevR^IGAXM@L4Gkpzy!2ARo?HU`~@~x&PJM?|Md{?g&0y|7S+HCVbWm17Xnypjv~O z30dHVFdtVKHo58aQzKn}d1rSUgo1_sm)d)q*5iciO!K=KHGVD6peuU+)|wdLxHsb! z!I3b{M__Us80Pg62ax5D%1&M*1VStWale&`$Ua5iOZSs-+m0Wgo@|+Lss#~Z8;KBN z1SZ4wsp+`)+rqvLfC!`sG2c`bjuQWL`G?9_%azwU@0hTMPi7qQvo;|gBfQfBMdN;< z$%A&@zCffX>^H4TX2N@m%aQC&v@h$?dNsuoULZ+LR5U4O`XN>0)esN6sY|rVdzDxM zDV^&A880{aH-zxt|SV5-j@^q$z-&e<_mAxGj&;q`(q8ye^>`ickuKrKnDT*^%?D% zzqa@0kfvo3BA#eQhASSzLC7I-RaDNmDH{R{5)#w*PPo;OSX~GY?5FUsBr!s-ZSP3- zRj^n~%X0#Vts|D{Vv7&Sd^y3p%xGkBJm1R%`m-lN?!GM-7m*?7wJice}fB;J#5@Eb&Ug1_Lt1x__| zhJn^menvaih+5ygIZ}yfm8*zuO)KRZCPj}I>F%7)kRF%3Lxb^j`Uok+QE3XhF#{^ zGnrnRm@vsk{ytyODb%j+M7EpJuRA}h7`c5-MGN^F$Ex*&?Nxu0XWo+y&2WGbDKXNdKe`dWg(kn4-$xQ`4QH!xDpfw! zeR54rN&2tR{Ijwf-Jcj++YkNM>My}yjX^)Kxc;jSK9lj0T8yMg zB1DtkC}1MPcXMjvbGNIJ00K=}P;pdo%Jqabe)7 z&=w_f=F3|ki^`4-9D|2IZ<~am_K>4(e@_h3375=(R-i%Osxus?!C}CBt8CEG&LO=O6)% z>~jmBWmYhh1)rH_A`zux^#I0`(En})wFQ=FlRcfoE3{(qae9IaMZP><2ZRmKf%g5Y zXYF_V$(TX^VNy#S&)Nt)7P4GGz>R*($|zk+gZbNTz(q~&j_L~?_|(jhb5&doNX>&F z^vucZV63j<<#yBiiL(?zY~n@MA4 z443HC>9W}>P6Fe|KlM73hn*|;$(k_`Q}~6b1xVby3d$b1{&stLu(x+aO+{vEZD{}E zR&#a1=K?!Me2Hny`b)IJTD16^Q7Gc*`$8ivnWK&^K|A(=0yWDk=VRGBu(8?p7ESnq z;q%Mq{dr)Zzu`e2tZ(Ln&9OQzt2E6-0HCJu=duL-qhkZJH=`P@ShO76WN4RKZtoUmF5<{+JgsV0_q5ziGGvE3(WhQy-JDWE&|H0Ttz?Y>&@?sp(`jC z8ZR(^7cmY$fDrWS&#;UvjsW-O@CGh|xYUpK3b)RLV?NE8_Xx$5)esx?<%-KM^fO*} zNQ>k|y*^N&;m*o%HxnO_RVAkTXCbxjfcZ&hBr6MEpB#PHD8NVqrfd_ArkeIyv<2k& z`2zmJNvSp;FuceYfexBsaprN_A@wpxtjEpkxrj}bD6!d$-k`_o#aU9(80?#Ol%Zv{ z-KN^e*QP?*>wQYUu!mzcW8Xw5dtHLYkQm|kbx+oAgeeP;ucvw&t5x>*$Gr_+fm5BL6dxxf?g{29d9Qyl zbSnlIu=L|d$Tg;i*XEokIK0!>*ECk3k_!HLU;lWql*V@jrXtxLHUr-n=#`as=am7B zD~?5NBN6WnP|?y4{z<22tc$erjH~Ro5A! zD@r-Lqap2~j`rRI4=J~W;q@gvBr;>7zj*|5BpP%uhwj#Pf|u|z4wy!2TNj>8J1X00 zu@JeDWZ$>{nL(kO+Gn48;|&NDC@qH{nH}l@5Fm*K&|Ud+n-7TtrwOM%5k#82cZ-z_ zU=(y&S6qzqe(|;4dN%hYq~as1jxF!JE*68VHOf5lJ~cMs>&W5OZM*6djVd+WnszpN zZ>tfX?XDy5Ldo4Uvb|{aM4~LBE3>0u&J&EuwqHJd2#c zdQ<3KAg4=*{+E(VL;5Q>vUovTd>q=l!XY0tw$rpK<4F(3i{gwyPQsX3m4W6gHSZ#t zq}+YH<~R3umWy5bGIMmu>V#*Rls9|xU_{=aPINc%slGdd+CzQcQdI4uky;AjfI1f` z`xS{fib$bEe37Ed*X`luRzfXh?L*1hzsF_t@@(rz)5PtzW|WT60BtU8`Cdf9VG!OIm!r=K7(P-qqllYR8tiysD=HD6=1D%2yX zgCt$?5+B)`jGzOsp@f$exj8KZkdo_zM&k2I4n$9;9i%!$vb1l;=Qmg|N*F|{)!rNWy>wsm>m^;!|k+N)O2CFjGe`ANx*M_M_uWpS0m%Y~pKai3YN zzWnl!zx8V6*;$>>E$jb&Z1&wyT2uYi-?oEd<=8V~DP}$|_8)9Kn4W&P)Kx7L`6hT_ z+;KL?lH9d3?Xjc8eUN%iZG4e?t9^_D^4uSzQvIpV=+QT5+jP!|1NBXYCdzeEUhnv1 zQ|!x4X;=LsfhFDS^KJZElAJANgz!7MqOWhbp&vrxtYr&_nZ7=Ad-4QXM@d#nyI14~ z;?k!UxtuvBXsWbBBE`f~Oy2_H|#<;BAAWo=?sXW4Tk_aifGeaw7S*_-8RIfGmvSlh{r%ZJk ztWPHMtpDs}^181y$Y5{RZwZaTmqhfH;2P<$5Lza2(}ocCKXJSL7ezRPPQPLVhPgY9 zqEtw@9&)QHkG({nD6m^7v8b)-sHIo_YjGt~m^6e5n|@#sneCVu@>$9ImO3RCU#qPb zz3fc;CiF8eUjh43isE{WF*6AUns;vUknY!>PrtCl+yBN5Gw`4~hOSr`nzOP@BF;*1 zn(rH7bm}hG>}cQY``oOAJna~%oN^J{QpD&^)QElW^fyo2lALpw;|hsF0y9aG3RZ$u zW$$7(vUqKps5s9Y_VI@|Ont80$$`f!&{sl@=2nRKR!98SmCkBXD2u`%a_9pGKIHM5 zT+_2dfE2HJ;bGrmzrw(D!Jbvid*6u8X0-9D!wAJIVQE!SsjrDtVQrsM$>*yt*#!8& z{=XkayXSVV0(t%&8U23e8d`o`;?uD?deepf;)hD1Lu85%UXkn0Y>HvhYD-VEV@kE* zpYZ)iaHaH=%$>^HuPrutC-wIG>cyApOj+FDCOY2pbNcrfnFJIqlPgOY`|~u^|2n2S z;AJ@RLVi!eoC4Q1%L^!DSXb2sI6{vQpKe2{&wa;MG1vDU|~v%>pq!DME+!JJHolw&_7s3 zzE2f6SCqI%ofv8wRB++6I&SH_vA#YX&|k`kfn8p1d8Y|0uZ5xsoKcAK;(ESh4v z>bNd6r|8n%Qh(_a6dN3%g7~GCB^Wq3am9a@FGq4p?J*qtvhSJytw0ThZzi5YMGMg+8+AI*bZiBDes#PkdJRAIxJp4V^)FdE&Xdkn zn08mq#psCop09B{#3)G6p8@yNRH$^M39j`=KY7A{AA?M2=iVX-&3*=CY8N1v*Cb1G zVDPo)Z>Bd*LV=_QetI%PC;nw(X0MzG)J%cK$>r(XwufZ8NKpTW9i-kzCf)STLR22# zWsnDMN+xC7#c;n<&Uvp%q|O>I=&va8=n$=>QfMF9Qbu|m6(fi&#PYgL?jiI~0@ukQ xS4Ob9a{Hq(0FgXCBF6E6;L#IQ_yY#%Nj#r6nhp0CY4AHwl;qT8E2K?={vWrx=Q#iX literal 28622 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�OoSPws5CZ<0sK=b8`g1 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%0D8mT{Uj-wyMqV69xLtFdZ}2wjn5ml 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 literal 0 HcmV?d00001 diff --git a/docs/operations/troubleshooting.mdx b/docs/operations/troubleshooting.mdx index 4c9169d8..370d6123 100644 --- a/docs/operations/troubleshooting.mdx +++ b/docs/operations/troubleshooting.mdx @@ -328,9 +328,60 @@ Nodes running very old Sencho versions that predate the capability system need t **Symptom:** After clicking **Update** on a remote node, the status changes to **Timed out** instead of **Updated**. -**Cause:** The image pull may be slow on the remote host, or the container failed to restart. +**Cause:** The gateway waits up to 5 minutes for the remote node to come back online after triggering the update. A timeout can happen if: -**Fix:** Check the Docker logs on the remote host for errors. You can also update manually by running: +- The image pull is very slow on the remote host (large image, slow connection) +- The container failed to restart after pulling +- Network connectivity was lost between the gateway and remote node during the update + +**Fix:** + +1. Hover over the **Timed out** badge to see the error message for more detail. +2. Click the **Retry** button (circular arrow) next to the badge to try again. +3. If the issue persists, click **Dismiss** (X button) to clear the state, then check the Docker logs on the remote host directly. +4. You can also click **Recheck** in the dialog footer to clear all failed states and re-scan every node. +5. As a last resort, update manually on the remote host: + +```bash +docker compose pull && docker compose up -d +``` + + + Update state is tracked in memory on the gateway. Restarting the gateway clears all stuck states automatically. + + +--- + +## Remote update shows "Failed" + +**Symptom:** After clicking **Update**, the status shows **Failed** with an error message. + +**Cause:** There are two common scenarios: + +1. **Immediate failure:** The gateway could not reach the remote node's update endpoint, or the remote node rejected the request. Common reasons include network issues, expired API tokens, or the remote node not supporting self-update. + +2. **Delayed failure (after ~90 seconds):** The update was accepted by the remote node, but the node never restarted. This usually means the image pull failed on the remote host. The error message will read: *"Update may have failed. The node is still running and its version has not changed."* + +**Fix:** + +1. Hover over the **Failed** badge to see the specific error message. +2. For immediate failures: verify the remote node is online and the API token is valid. +3. For delayed failures: check the Docker logs on the remote host. The pull may have failed due to network issues, registry authentication, or disk space. +4. Click **Retry** to attempt the update again after resolving the issue. + +--- + +## First remote update always times out on old nodes + +**Symptom:** After triggering a remote update on a node running a very old Sencho version (pre-v0.39.3), the node successfully restarts with the new version, but the dashboard shows **Timed out** or **Failed** instead of **Updated**. + +**Cause:** The gateway detects update completion using three signals: a version change, a process restart (via `startedAt`), or temporary offline detection. Nodes running Sencho versions older than v0.39.3 report their version as `"unknown"` and do not include `startedAt` in their metadata. If the container restart is brief enough that the gateway does not detect the node going offline, none of the three signals fire. + +**Fix:** This only affects the **first** update from a very old version. After the update completes (even though the dashboard may show "Failed" or "Timed out"), the remote node will be running the latest version with proper version reporting and restart detection. Future updates triggered from the dashboard will complete normally. + +1. Click **Dismiss** on the badge to clear the state. +2. Click **Recheck** to verify the node is now running the latest version. +3. If the node still shows "unknown", update it manually on the remote host: ```bash docker compose pull && docker compose up -d diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 1fa04e36..f0a822e4 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -5825,9 +5825,9 @@ } }, "node_modules/vite": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.3.tgz", - "integrity": "sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.5.tgz", + "integrity": "sha512-nmu43Qvq9UopTRfMx2jOYW5l16pb3iDC1JH6yMuPkpVbzK0k+L7dfsEDH4jRgYFmsg0sTAqkojoZgzLMlwHsCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5852,7 +5852,7 @@ "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.0", - "esbuild": "^0.27.0", + "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", diff --git a/frontend/src/components/FleetView.tsx b/frontend/src/components/FleetView.tsx index 0bb0e639..69f386af 100644 --- a/frontend/src/components/FleetView.tsx +++ b/frontend/src/components/FleetView.tsx @@ -3,7 +3,7 @@ import { Server, Cpu, MemoryStick, HardDrive, RefreshCw, ChevronDown, ChevronRight, Layers, Wifi, WifiOff, Search, ArrowUpDown, AlertTriangle, Box, Activity, Play, Square, RotateCcw, ExternalLink, Camera, Download, Loader2, Check, - CircleCheck, CircleAlert, Globe, Monitor, + CircleCheck, CircleAlert, Globe, Monitor, X, } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; @@ -29,6 +29,7 @@ import { toast } from '@/components/ui/toast-store'; import { LabelDot, type Label as StackLabel } from './LabelPill'; import { MultiSelectCombobox } from '@/components/ui/multi-select-combobox'; import { formatVersion } from '@/lib/version'; +import { CursorProvider, Cursor, CursorFollow, CursorContainer } from '@/components/animate-ui/primitives/animate/cursor'; // --- Types --- @@ -72,6 +73,7 @@ interface NodeUpdateStatus { latestVersion: string | null; updateAvailable: boolean; updateStatus: 'updating' | 'completed' | 'timeout' | 'failed' | null; + error?: string | null; } type SortField = 'name' | 'cpu' | 'memory' | 'containers' | 'status'; @@ -288,7 +290,12 @@ function StackSection({ stackName, nodeId, onNavigate, labelMap }: { ); } -function UpdateStatusBadge({ status }: { status: NodeUpdateStatus['updateStatus'] }) { +function UpdateStatusBadge({ status, error, onRetry, onDismiss }: { + status: NodeUpdateStatus['updateStatus']; + error?: string | null; + onRetry?: () => void; + onDismiss?: () => void; +}) { if (status === 'updating') return ( Updating @@ -299,12 +306,46 @@ function UpdateStatusBadge({ status }: { status: NodeUpdateStatus['updateStatus' Updated ); - if (status === 'timeout') return ( - Timed out - ); - if (status === 'failed') return ( - Failed - ); + if (status === 'timeout' || status === 'failed') { + const label = status === 'timeout' ? 'Timed out' : 'Failed'; + return ( + + + {label} + {onRetry && ( + + )} + {onDismiss && ( + + )} + {error && ( + <> + +
+ + +
+

{error}

+
+
+ + )} + + + ); + } return null; } @@ -357,7 +398,18 @@ function ReconnectingOverlay() { ); } -function NodeCard({ node, onNavigate, labelMap, updateStatus, onUpdate, updatingNodeId }: { node: FleetNode; onNavigate: (nodeId: number, stackName: string) => void; labelMap?: Record; updateStatus?: NodeUpdateStatus; onUpdate?: (nodeId: number) => void; updatingNodeId?: number | null }) { +interface NodeCardProps { + node: FleetNode; + onNavigate: (nodeId: number, stackName: string) => void; + labelMap?: Record; + updateStatus?: NodeUpdateStatus; + onUpdate?: (nodeId: number) => void; + updatingNodeId?: number | null; + onRetryUpdate?: (nodeId: number) => void; + onDismissUpdate?: (nodeId: number) => void; +} + +function NodeCard({ node, onNavigate, labelMap, updateStatus, onUpdate, updatingNodeId, onRetryUpdate, onDismissUpdate }: NodeCardProps) { const { isPaid } = useLicense(); const [expanded, setExpanded] = useState(false); const [stacks, setStacks] = useState(node.stacks); @@ -419,7 +471,14 @@ function NodeCard({ node, onNavigate, labelMap, updateStatus, onUpdate, updating {formattedVersion} )} - {updateStatus?.updateStatus && } + {updateStatus?.updateStatus && ( + onRetryUpdate(node.id) : undefined} + onDismiss={onDismissUpdate ? () => onDismissUpdate(node.id) : undefined} + /> + )} {updateStatus?.updateAvailable && !updateStatus.updateStatus && ( Update available @@ -701,6 +760,19 @@ export function FleetView({ onNavigateToNode }: FleetViewProps) { } }, [fetchUpdateStatus]); + const dismissNodeUpdate = useCallback(async (nodeId: number) => { + try { + await apiFetch(`/fleet/nodes/${nodeId}/update-status`, { method: 'DELETE', localOnly: true }); + fetchUpdateStatus(); + } catch (error) { + console.error('[Fleet] Failed to dismiss update status:', error); + } + }, [fetchUpdateStatus]); + + const retryNodeUpdate = useCallback(async (nodeId: number) => { + triggerNodeUpdate(nodeId); + }, [triggerNodeUpdate]); + useEffect(() => { fetchOverview(); fetchLabels(); @@ -1056,6 +1128,8 @@ export function FleetView({ onNavigateToNode }: FleetViewProps) { updateStatus={updateStatusMap.get(node.id)} onUpdate={isPaid ? triggerNodeUpdate : undefined} updatingNodeId={updatingNodeId} + onRetryUpdate={isPaid ? retryNodeUpdate : undefined} + onDismissUpdate={isPaid ? dismissNodeUpdate : undefined} /> ))}
@@ -1234,7 +1308,14 @@ export function FleetView({ onNavigateToNode }: FleetViewProps) { {/* Status / Action */}
- {s.updateStatus && } + {s.updateStatus && ( + retryNodeUpdate(s.nodeId)} + onDismiss={() => dismissNodeUpdate(s.nodeId)} + /> + )} {!s.updateStatus && !s.updateAvailable && ( Up to date @@ -1271,9 +1352,15 @@ export function FleetView({ onNavigateToNode }: FleetViewProps) { variant="ghost" size="sm" className="h-7 text-xs text-muted-foreground" - onClick={async () => { setCheckingUpdates(true); await fetchUpdateStatus(); setCheckingUpdates(false); }} + disabled={checkingUpdates} + onClick={async () => { + setCheckingUpdates(true); + await apiFetch('/fleet/update-status', { method: 'DELETE', localOnly: true }); + await fetchUpdateStatus(); + setCheckingUpdates(false); + }} > - + Recheck {updatableRemoteCount > 0 && (