diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 96f427cf..6fa821ca 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -45,6 +45,9 @@ jobs: - name: Check public-assets.ts is in sync with public/ run: git diff --exit-code src/public-assets.ts public/wolfpack-lib.js + - name: Typecheck (root + public/) + run: bun run typecheck + - name: Run tests run: bun test tests/unit/ tests/snapshot/ tests/integration/api.test.ts tests/integration/ralph-api.test.ts tests/integration/ralph-aggregation.test.ts tests/integration/ws-dispatch.test.ts tests/integration/ws-terminal.test.ts tests/integration/prompt-reconnect.test.ts diff --git a/bun.lock b/bun.lock index bfe17a12..7178f6e5 100644 --- a/bun.lock +++ b/bun.lock @@ -14,12 +14,13 @@ "@types/ws": "^8.18.1", "bun-types": "^1.3.10", "playwright": "^1.58.2", + "typescript": "^6.0.3", }, "optionalDependencies": { - "wolfpack-bridge-darwin-arm64": "1.6.1", - "wolfpack-bridge-darwin-x64": "1.6.1", - "wolfpack-bridge-linux-arm64": "1.6.1", - "wolfpack-bridge-linux-x64": "1.6.1", + "wolfpack-bridge-darwin-arm64": "1.6.3", + "wolfpack-bridge-darwin-x64": "1.6.3", + "wolfpack-bridge-linux-arm64": "1.6.3", + "wolfpack-bridge-linux-x64": "1.6.3", }, }, }, @@ -42,15 +43,17 @@ "qrcode-terminal": ["qrcode-terminal@0.12.0", "", { "bin": "bin/qrcode-terminal.js" }, "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ=="], + "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="], + "undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - "wolfpack-bridge-darwin-arm64": ["wolfpack-bridge-darwin-arm64@1.6.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-fFTNUDBRcC30S0Lhi7g6QmA9agstx4RlgHO/DoysBo1rWtSKJfMTHB+USIzbWB5GtG2mP6qI8Ra9t7r1tswbew=="], + "wolfpack-bridge-darwin-arm64": ["wolfpack-bridge-darwin-arm64@1.6.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ELIfqaHOv02DO2zGAAtxCdeJ1WJZFQ30xi2Kd2YsKjXNnjJkyqTKYU6VAeOUi9xZgLfnaRnyCpQDHKE0NtciEQ=="], - "wolfpack-bridge-darwin-x64": ["wolfpack-bridge-darwin-x64@1.6.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-fCe7fUx5OCuZm2iFiROPAgVht3JkfQ18gOiEbrFhtwOw+rGyso/SlSt7renJDQGukAvUQIsweWKywPtGZMUL7g=="], + "wolfpack-bridge-darwin-x64": ["wolfpack-bridge-darwin-x64@1.6.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-MipmD31l5Ezo1e86AM/8Q4Op9oXHztRvqmqf8DMOyoXuvFduf7R/CvZmfpYP8e2EknYj9BIJKkGfYNgohYbiuA=="], - "wolfpack-bridge-linux-arm64": ["wolfpack-bridge-linux-arm64@1.6.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-Q3P9Dx61ZlSfNCZw5lVQOZvZlaBTa0ighVLCZNR0hYjcTSL5c9tBAzoHsKKFwIWtoPq2h1dO9i6kJMSpEbAN+g=="], + "wolfpack-bridge-linux-arm64": ["wolfpack-bridge-linux-arm64@1.6.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-Of+9cL1gBNxNcpIx4TZBRlvf8O8CZCspd7YrUEAQNGf6TFr5ecrYXkLB8bkhpS57IQtlKZh7LW4HfHyQACk4Nw=="], - "wolfpack-bridge-linux-x64": ["wolfpack-bridge-linux-x64@1.6.1", "", { "os": "linux", "cpu": "x64" }, "sha512-1zelTaEZzjI2LyKaeoYP+MWX0D+39th4enJvFdQfLnHx58uavCpE9lVg3LfF29lKUou2WszOYbJOCDJ9ns2vcw=="], + "wolfpack-bridge-linux-x64": ["wolfpack-bridge-linux-x64@1.6.3", "", { "os": "linux", "cpu": "x64" }, "sha512-kX0tmZi3Sf7JCUQDe4jDcTxqHsnO5fzRjIL3e4X7mUht/EtCFfR+aOWpSXtUG1rQe8NxW1fRUnpqd9PbdiXn9Q=="], "ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="], } diff --git a/package.json b/package.json index dc48edad..70909760 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "test": "bun test", "test:e2e": "bunx playwright test", "test:e2e:headed": "bunx playwright test --headed", + "typecheck": "bunx tsc --noEmit -p . && bunx tsc --noEmit -p public/", "postinstall": "node bin/install.cjs" }, "optionalDependencies": { @@ -46,6 +47,7 @@ "@playwright/test": "^1.58.2", "@types/ws": "^8.18.1", "bun-types": "^1.3.10", - "playwright": "^1.58.2" + "playwright": "^1.58.2", + "typescript": "^6.0.3" } } diff --git a/public/app-debug.ts b/public/app-debug.ts new file mode 100644 index 00000000..27f69994 --- /dev/null +++ b/public/app-debug.ts @@ -0,0 +1,200 @@ +// ── Diagnostic Tracer (scrolldown investigation) ── +// +// Captures timestamped events per (session@machine) attach so we can +// reconstruct the WS frame timing, prefill vs replay byte distribution, +// _writeTermData call shape, and rAF cadence during the hydration window. +// +// PURE DIAGNOSTIC. Gated behind `localStorage.wolfpackDebug = "1"` so it +// doesn't expose per-session attach metadata to any JS in the page context +// (XSS, extension, bookmarklet). When disabled, all helpers are no-ops and +// `__wfTrace` / `__wf_dumpTrace` / `__wf_clearTrace` are NOT installed on +// `window`. +// +// Read with `window.__wf_dumpTrace()` or `window.__wf_dumpTrace("sess")` +// after enabling: `localStorage.wolfpackDebug = "1"; location.reload()`. + +declare global { + interface Window { + __wfTrace?: Record; + __wf_dumpTrace?: (sessionFilter?: string) => Record | undefined; + __wf_clearTrace?: () => void; + __wf_lastCrash?: CrashCapture; + } +} + +export interface TraceMeta { + readonly session: string; + readonly machine: string; + readonly startWall: number; + readonly startPerf: number; + readonly [extra: string]: unknown; +} + +export interface TraceEvent { + readonly t: number; + readonly kind: string; + readonly [field: string]: unknown; +} + +export interface TraceState { + readonly _meta: TraceMeta; + readonly events: TraceEvent[]; + _rafCount: number; + _rafActive: boolean; +} + +export interface CrashCapture { + readonly session: string; + readonly cols: number | null; + readonly rows: number | null; + readonly len: number; + readonly head: readonly number[]; + readonly tail: readonly number[]; + readonly err: string; + readonly stack: string | undefined; + readonly ts: number; +} + +const __wfTraceEnabled = (() => { + try { return localStorage.getItem("wolfpackDebug") === "1"; } + catch { return false; } +})(); + +const __wfTraceMaxEvents = 5000; + +export const wfTraceEnabled: boolean = __wfTraceEnabled; + +if (__wfTraceEnabled) window.__wfTrace = window.__wfTrace || {}; + +function __wfTraceKey(session: string | null | undefined, machine: string | null | undefined): string { + return (session || "?") + "@" + (machine || ""); +} + +export function __wfTraceStart( + session: string, + machine: string | null | undefined, + extra?: Record, +): TraceState | null { + if (!__wfTraceEnabled) return null; + const key = __wfTraceKey(session, machine); + const trace: TraceState = { + _meta: { + session, + machine: machine || "", + startWall: Date.now(), + startPerf: performance.now(), + ...(extra || {}), + }, + events: [], + _rafCount: 0, + _rafActive: false, + }; + window.__wfTrace![key] = trace; + return trace; +} + +export function __wfTraceGet( + session: string | null | undefined, + machine: string | null | undefined, +): TraceState | null { + if (!__wfTraceEnabled) return null; + const key = __wfTraceKey(session, machine); + return window.__wfTrace ? window.__wfTrace[key] || null : null; +} + +export function __wfTraceEvent( + trace: TraceState | null, + kind: string, + fields?: Record, +): void { + if (!trace) return; + if (trace.events.length >= __wfTraceMaxEvents) return; + trace.events.push({ + t: +(performance.now() - trace._meta.startPerf).toFixed(3), + kind, + ...(fields || {}), + }); +} + +export function __wfTraceRafStart(trace: TraceState | null): void { + if (!trace || trace._rafActive) return; + trace._rafActive = true; + function tick() { + if (!trace || !trace._rafActive) return; + trace._rafCount++; + __wfTraceEvent(trace, "raf", { n: trace._rafCount }); + requestAnimationFrame(tick); + } + requestAnimationFrame(tick); +} + +export function __wfTraceRafStop(trace: TraceState | null): void { + if (!trace) return; + trace._rafActive = false; +} + +if (__wfTraceEnabled) { + window.__wf_dumpTrace = function (sessionFilter?: string) { + const all = window.__wfTrace || {}; + const keys = Object.keys(all).filter(k => !sessionFilter || k.indexOf(sessionFilter) >= 0); + for (const key of keys) { + const trace = all[key]; + const ev = trace.events; + const meta = trace._meta; + const sumByKind: Record = {}; + let prefillBytes = 0, replayBytes = 0, prefillFrames = 0, replayFrames = 0; + let firstPrefillT = -1, prefillDoneT = -1, firstReplayT = -1, hydratedT = -1; + for (const e of ev) { + sumByKind[e.kind] = (sumByKind[e.kind] || 0) + 1; + if (e.kind === "ws.binary") { + const size = typeof e.size === "number" ? e.size : 0; + if (e.bucket === "prefill") { prefillBytes += size; prefillFrames++; if (firstPrefillT < 0) firstPrefillT = e.t; } + else { replayBytes += size; replayFrames++; if (firstReplayT < 0) firstReplayT = e.t; } + } + if (e.kind === "prefill_done") prefillDoneT = e.t; + if (e.kind === "hydration.finish") hydratedT = e.t; + } + console.group("[wf-trace] " + key); + console.log("meta:", meta); + console.log("counts:", sumByKind); + console.log("prefill: " + prefillFrames + " frames, " + prefillBytes + " bytes, first @ " + firstPrefillT + "ms, prefill_done @ " + prefillDoneT + "ms"); + console.log("replay (post-prefill_done): " + replayFrames + " frames, " + replayBytes + " bytes, first @ " + firstReplayT + "ms"); + console.log("hydrated @ " + hydratedT + "ms; rAFs during attach: " + trace._rafCount); + console.log("events:", ev); + console.groupEnd(); + } + return all; + }; + + window.__wf_clearTrace = function () { + window.__wfTrace = {}; + }; +} + +/** Capture first WASM _term.write crash. Must NEVER throw — caller re-throws the original error. */ +export function captureLastCrash(snapshot: { + session: string; + cols: number | null; + rows: number | null; + data: Uint8Array; + err: unknown; +}): void { + try { + if (window.__wf_lastCrash) return; + const { data, err } = snapshot; + window.__wf_lastCrash = { + session: snapshot.session, + cols: snapshot.cols, + rows: snapshot.rows, + len: data.length, + head: Array.from(data.slice(0, 64)), + tail: Array.from(data.slice(Math.max(0, data.length - 64))), + err: String(err), + stack: err instanceof Error ? err.stack : undefined, + ts: Date.now(), + }; + console.error("[wf-crash]", snapshot.session, err, "— captured to window.__wf_lastCrash"); + } catch { + // Best-effort crash capture must never mask the original terminal error. + } +} diff --git a/public/app-grid.ts b/public/app-grid.ts index bf725fa5..2157fffb 100644 --- a/public/app-grid.ts +++ b/public/app-grid.ts @@ -9,17 +9,43 @@ import { // ── Dependency injection ── +interface GridTerminalController { + readonly isConnected: boolean; + readonly hydration?: { finish(): void }; + readonly term?: { options: { disableStdin: boolean; cursorBlink: boolean } }; + mount(cell: HTMLElement, opts: { readonly cached?: string | null }): Promise; + connect(opts?: { readonly takeControl?: boolean }): void; + reconnect(opts?: { readonly takeControl?: boolean }): void; + scheduleReconnect(): void; + sendTakeControl(): void; + forceRepaint(): void; + focus(): void; + resize(): void; + resizeWithTransition(): void; + dispose(): void; +} + +interface GridSession { + readonly session: string; + readonly machine: string; + controller?: GridTerminalController | null; + _cellElement?: HTMLElement | null; + _displaced?: boolean; + _autoTakeControl?: boolean; + [field: string]: unknown; +} + interface GridDeps { showView: (name: string, skipAnimation?: boolean) => void; openSession: (name: string, machineUrl?: string) => void; destroyTerminal: () => void; - initTerminal: (cached?: any) => void; + initTerminal: (cached?: string | null) => void; backToSessions: () => void; renderSidebar: () => void; - createPtyTerminalController: (opts: any) => any; - createConflictOverlay: (message: string, buttonLabel: string, onClick: (e: any) => void) => HTMLElement; + createPtyTerminalController: (opts: { session: string; machine?: string; [k: string]: unknown }) => GridTerminalController; + createConflictOverlay: (message: string, buttonLabel: string, onClick: (e: Event) => void) => HTMLElement; canUseWasmTerminal?: () => boolean; - saveGridCellSnapshot?: (gs: any) => void; + saveGridCellSnapshot?: (gs: GridSession) => void; flushGridSnapshots?: () => void; loadSnapshot?: (machine: string, session: string) => string | null; } @@ -111,7 +137,8 @@ function createGridCell(gs, idx) { cell.dataset.gridIndex = idx; cell.innerHTML = '
' + esc(gs.session) + '
×
Loading terminal
'; cell.addEventListener("click", (e) => { - if (e.target.classList.contains("grid-cell-close")) return; + const tgt = e.target as HTMLElement | null; + if (tgt && tgt.classList.contains("grid-cell-close")) return; const sel = window.getSelection ? window.getSelection() : null; if (sel && !sel.isCollapsed) return; const i = parseInt(cell.dataset.gridIndex, 10); @@ -232,7 +259,7 @@ export function renderGridCells() { const existingCells = container.querySelectorAll(".grid-cell"); const existingMap = new Map(); existingCells.forEach(cell => { - const idx = parseInt(cell.dataset.gridIndex, 10); + const idx = parseInt((cell as HTMLElement).dataset.gridIndex || "0", 10); existingMap.set(idx, cell); }); // Track which sessions need new cells vs reuse @@ -470,7 +497,7 @@ export function backFromSettings() { deps.showView(state.viewBeforeSettings || "sessions"); } -export function addToGrid(session, machine) { +export function addToGrid(session: string, machine?: string): void { if (!(deps.canUseWasmTerminal ? deps.canUseWasmTerminal() : isDesktop())) { console.warn("[grid] WebAssembly unavailable — cannot open grid terminal"); return; @@ -479,10 +506,10 @@ export function addToGrid(session, machine) { // WebAssembly.Memory. Concurrent fit()/write() across cells produce // out-of-bounds memory accesses that crash every terminal in the tab. // Refuse to enter grid mode in that state and surface a visible warning. - if (typeof (window as any).createIsolatedGhostty !== "function") { + if (typeof window.createIsolatedGhostty !== "function") { console.error("[grid] createIsolatedGhostty unavailable — grid mode disabled to prevent WASM OOB crash. Reload to pick up a newer ghostty-web bundle."); - if (typeof window !== "undefined" && typeof (window as any).alert === "function") { - (window as any).alert( + if (typeof window !== "undefined" && typeof window.alert === "function") { + window.alert( "Grid mode is disabled in this tab.\n\n" + "The terminal WASM bundle does not support per-cell isolation, which is required " + "to safely show multiple terminals at once. (Older versions of ghostty-web are " + diff --git a/public/app-state.ts b/public/app-state.ts index 95b0baca..1eae2ae5 100644 --- a/public/app-state.ts +++ b/public/app-state.ts @@ -38,10 +38,10 @@ export function isDesktop() { return window.innerWidth > 768; } -export function formatSnapshotTtl(seconds) { - seconds = +seconds; - if (seconds < 60) return seconds + 's'; - return Math.floor(seconds / 60) + 'm'; +export function formatSnapshotTtl(seconds: number | string): string { + const s = +seconds; + if (s < 60) return s + 's'; + return Math.floor(s / 60) + 'm'; } export function getTerminalFontFamily() { @@ -70,13 +70,13 @@ export function applySetting(key, val) { else unsubscribeNotifications(); } if (key === "enterSends") { - const el = document.getElementById("msg-input"); + const el = document.getElementById("msg-input") as HTMLTextAreaElement | null; if (el) el.placeholder = val ? "$ (Enter to send)" : "$ (⚡ to send)"; } if (key === "termFontSize") { document.body.classList.remove("term-size-small", "term-size-medium", "term-size-large"); document.body.classList.add("term-size-" + val); - document.querySelectorAll(".term-size-btn").forEach(b => b.classList.toggle("active", b.dataset.size === val)); + document.querySelectorAll(".term-size-btn").forEach(b => b.classList.toggle("active", (b as HTMLElement).dataset.size === val)); applyTermToXterm(); } if (key === "ralphEnabled") { @@ -84,7 +84,7 @@ export function applySetting(key, val) { } if (key === "termFont") { document.body.classList.toggle("term-font-alt", val === "alt"); - document.querySelectorAll(".term-font-btn").forEach(b => b.classList.toggle("active", b.dataset.font === val)); + document.querySelectorAll(".term-font-btn").forEach(b => b.classList.toggle("active", (b as HTMLElement).dataset.font === val)); applyTermToXterm(); } } @@ -110,10 +110,10 @@ export function applyTermToXterm() { export function initSettings() { Object.entries(wpSettings).forEach(([k, v]) => { applySetting(k, v); - const el = document.getElementById("setting-" + k); + const el = document.getElementById("setting-" + k) as HTMLInputElement | null; if (!el) return; - if (el.type === "checkbox") el.checked = v; - else el.value = v; + if (el.type === "checkbox") el.checked = v as boolean; + else el.value = v as string; }); const ttlLabel = document.getElementById("snapshot-ttl-val"); if (ttlLabel) ttlLabel.textContent = formatSnapshotTtl(wpSettings.snapshotTtl); @@ -161,7 +161,7 @@ export async function requestNotifications() { // Subscribe to push const sub = await reg.pushManager.subscribe({ userVisibleOnly: true, - applicationServerKey: urlBase64ToUint8Array(publicKey), + applicationServerKey: urlBase64ToUint8Array(publicKey) as BufferSource, }); // Send subscription to server @@ -270,6 +270,8 @@ export const state = { currentRalphWorktreeMode: "false", currentRalphWorktreeBranch: "", currentRalphAgent: "", + currentRalphCleanup: undefined as boolean | undefined, + currentRalphAuditFix: undefined as boolean | undefined, // desktop/grid terminal state terminalController: null, desktopResizeHandler: null, diff --git a/public/app.ts b/public/app.ts index 12024a0c..8166e77f 100644 --- a/public/app.ts +++ b/public/app.ts @@ -30,10 +30,16 @@ import { import { setupTouchScrollHandler } from "./app-touch"; +import { + __wfTraceStart, __wfTraceGet, __wfTraceEvent, __wfTraceRafStart, __wfTraceRafStop, + captureLastCrash, +} from "./app-debug"; +import type { TraceState } from "./app-debug"; + // ── WASM capability guard ── -function canUseWasmTerminal() { - return !(window as any).wasmFailed; +function canUseWasmTerminal(): boolean { + return !window.wasmFailed; } // ── Performance Metrics (UX-16) ── @@ -73,120 +79,6 @@ const wpMetrics = { } }; -// ── Diagnostic Tracer (scrolldown investigation) ── -// -// Captures timestamped events per (session@machine) attach so we can -// reconstruct the WS frame timing, prefill vs replay byte distribution, -// _writeTermData call shape, and rAF cadence during the hydration window. -// -// PURE DIAGNOSTIC. Gated behind `localStorage.wolfpackDebug = "1"` so it -// doesn't expose per-session attach metadata to any JS in the page context -// (XSS, extension, bookmarklet). When disabled, all helpers are no-ops and -// `__wfTrace` / `__wf_dumpTrace` / `__wf_clearTrace` are NOT installed on -// `window`. -// -// Read with `window.__wf_dumpTrace()` or `window.__wf_dumpTrace("sess")` -// after enabling: `localStorage.wolfpackDebug = "1"; location.reload()`. -const __wfTraceEnabled = (() => { - try { return localStorage.getItem("wolfpackDebug") === "1"; } - catch { return false; } -})(); -const __wfTraceMaxEvents = 5000; -if (__wfTraceEnabled) (window as any).__wfTrace = (window as any).__wfTrace || {}; - -function __wfTraceKey(session, machine) { - return (session || "?") + "@" + (machine || ""); -} - -function __wfTraceStart(session, machine, extra?: any) { - if (!__wfTraceEnabled) return null; - const key = __wfTraceKey(session, machine); - const trace: any = { - _meta: { - session, - machine: machine || "", - startWall: Date.now(), - startPerf: performance.now(), - ...(extra || {}), - }, - events: [], - _rafCount: 0, - _rafActive: false, - }; - (window as any).__wfTrace[key] = trace; - return trace; -} - -function __wfTraceGet(session, machine) { - if (!__wfTraceEnabled) return null; - const key = __wfTraceKey(session, machine); - return (window as any).__wfTrace[key]; -} - -function __wfTraceEvent(trace, kind, fields?: any) { - if (!trace) return; - if (trace.events.length >= __wfTraceMaxEvents) return; - trace.events.push({ - t: +(performance.now() - trace._meta.startPerf).toFixed(3), - kind, - ...(fields || {}), - }); -} - -// Start a rAF counter loop while hydration is pending. Each frame increments -// _rafCount and records a tick if it lands during a noteworthy window. -function __wfTraceRafStart(trace) { - if (!trace || trace._rafActive) return; - trace._rafActive = true; - function tick() { - if (!trace._rafActive) return; - trace._rafCount++; - __wfTraceEvent(trace, "raf", { n: trace._rafCount }); - requestAnimationFrame(tick); - } - requestAnimationFrame(tick); -} - -function __wfTraceRafStop(trace) { - if (!trace) return; - trace._rafActive = false; -} - -if (__wfTraceEnabled) (window as any).__wf_dumpTrace = function (sessionFilter?: string) { - const all = (window as any).__wfTrace || {}; - const keys = Object.keys(all).filter(k => !sessionFilter || k.indexOf(sessionFilter) >= 0); - for (const key of keys) { - const trace = all[key]; - const ev = trace.events; - const meta = trace._meta; - const sumByKind: any = {}; - let prefillBytes = 0, replayBytes = 0, prefillFrames = 0, replayFrames = 0; - let firstPrefillT = -1, prefillDoneT = -1, firstReplayT = -1, hydratedT = -1; - for (const e of ev) { - sumByKind[e.kind] = (sumByKind[e.kind] || 0) + 1; - if (e.kind === "ws.binary") { - if (e.bucket === "prefill") { prefillBytes += e.size; prefillFrames++; if (firstPrefillT < 0) firstPrefillT = e.t; } - else { replayBytes += e.size; replayFrames++; if (firstReplayT < 0) firstReplayT = e.t; } - } - if (e.kind === "prefill_done") prefillDoneT = e.t; - if (e.kind === "hydration.finish") hydratedT = e.t; - } - console.group("[wf-trace] " + key); - console.log("meta:", meta); - console.log("counts:", sumByKind); - console.log("prefill: " + prefillFrames + " frames, " + prefillBytes + " bytes, first @ " + firstPrefillT + "ms, prefill_done @ " + prefillDoneT + "ms"); - console.log("replay (post-prefill_done): " + replayFrames + " frames, " + replayBytes + " bytes, first @ " + firstReplayT + "ms"); - console.log("hydrated @ " + hydratedT + "ms; rAFs during attach: " + trace._rafCount); - console.log("events:", ev); - console.groupEnd(); - } - return all; -}; - -if (__wfTraceEnabled) (window as any).__wf_clearTrace = function () { - (window as any).__wfTrace = {}; -}; - let debugPanelTimer = null; function toggleDebugPanel() { @@ -209,12 +101,12 @@ function renderDebugPanel() { const p50 = el("dbg-p50"); if (p50) p50.textContent = fmt(wpMetrics.percentile(50)); const p95 = el("dbg-p95"); if (p95) p95.textContent = fmt(wpMetrics.percentile(95)); const avg = el("dbg-avg"); if (avg) avg.textContent = fmt(wpMetrics.avg()); - const samples = el("dbg-samples"); if (samples) samples.textContent = wpMetrics.latencySamples.length; - const wsMsgs = el("dbg-ws-msgs"); if (wsMsgs) wsMsgs.textContent = wpMetrics.wsMessagesReceived; - const reconnects = el("dbg-reconnects"); if (reconnects) reconnects.textContent = wpMetrics.reconnectCount; - const sends = el("dbg-sends"); if (sends) sends.textContent = wpMetrics.sendCount; + const samples = el("dbg-samples"); if (samples) samples.textContent = String(wpMetrics.latencySamples.length); + const wsMsgs = el("dbg-ws-msgs"); if (wsMsgs) wsMsgs.textContent = String(wpMetrics.wsMessagesReceived); + const reconnects = el("dbg-reconnects"); if (reconnects) reconnects.textContent = String(wpMetrics.reconnectCount); + const sends = el("dbg-sends"); if (sends) sends.textContent = String(wpMetrics.sendCount); const fails = el("dbg-send-fails"); if (fails) { - fails.textContent = wpMetrics.sendFailCount; + fails.textContent = String(wpMetrics.sendFailCount); fails.style.color = wpMetrics.sendFailCount > 0 ? "#ff4444" : "#00ff41"; } const uptime = el("dbg-uptime"); @@ -249,7 +141,7 @@ function renderCmdPalette() { el.classList.toggle("visible", state.kbAccessoryOpen); } -function sendQuickCmd(index) { +function sendQuickCmd(index: number): void { const cmd = state.quickCmds[index]; if (!cmd || !state.currentSession) return; haptic([30]); @@ -285,7 +177,7 @@ function addQuickCmd() { renderCmdPalette(); } -function editQuickCmd(index) { +function editQuickCmd(index: number): void { const c = state.quickCmds[index]; if (!c) return; const label = prompt("Label:", c.label); @@ -298,14 +190,14 @@ function editQuickCmd(index) { renderCmdPalette(); } -function deleteQuickCmd(index) { +function deleteQuickCmd(index: number): void { state.quickCmds.splice(index, 1); saveQuickCmds(); renderQuickCmdSettings(); renderCmdPalette(); } -function moveQuickCmd(index, direction) { +function moveQuickCmd(index: number, direction: 1 | -1): void { const target = index + direction; if (target < 0 || target >= state.quickCmds.length) return; const tmp = state.quickCmds[index]; @@ -316,14 +208,14 @@ function moveQuickCmd(index, direction) { renderCmdPalette(); } -async function showGitStatus() { +async function showGitStatus(): Promise { if (!state.currentSession) return; haptic([30]); const overlay = document.getElementById("git-status-overlay"); overlay.innerHTML = '
loading...
'; overlay.classList.add("visible"); try { - const data = await api("/git-status?session=" + encodeURIComponent(state.currentSession), {}, state.currentMachine); + const data = await api<{ readonly status?: string }>("/git-status?session=" + encodeURIComponent(state.currentSession), {}, state.currentMachine); overlay.innerHTML = `
${esc(data.status || "(clean)")}
tap to dismiss
`; } catch (e) { overlay.innerHTML = `
${esc(errorMessage(e))}
tap to dismiss
`; @@ -334,7 +226,7 @@ function dismissGitStatus() { document.getElementById("git-status-overlay").classList.remove("visible"); } -async function copySessionToClipboard() { +async function copySessionToClipboard(): Promise { if (!state.currentSession) return; haptic([20]); const overlay = document.getElementById("git-status-overlay"); @@ -344,7 +236,7 @@ async function copySessionToClipboard() { // /api/copy-text returns text/plain — fetch raw, then write to clipboard. const path = "/api/copy-text?session=" + encodeURIComponent(state.currentSession); const base = (state.currentMachine || "").replace(/\/$/, ""); - const headers = {}; + const headers: Record = {}; const jwt = localStorage.getItem("wpJwt"); if (jwt) headers["Authorization"] = "Bearer " + jwt; const r = await fetch(base + path, { headers }); @@ -359,7 +251,7 @@ async function copySessionToClipboard() { // ── Session Recents ── -function sessionKey(machine, name) { +function sessionKey(machine: string | null | undefined, name: string): string { return (machine || "") + "|" + name; } @@ -367,7 +259,7 @@ function saveRecents() { localStorage.setItem(RECENTS_STORAGE_KEY, JSON.stringify(state.sessionRecents)); } -function recordRecent(machine, name) { +function recordRecent(machine: string | null | undefined, name: string): void { const key = sessionKey(machine, name); state.sessionRecents = state.sessionRecents.filter(r => r.key !== key); state.sessionRecents.unshift({ key, name, machine: machine || "", ts: Date.now() }); @@ -386,13 +278,29 @@ const RECONNECT_MAX_DELAY_MS = 5000; * @param {() => void} [opts.onExhausted] - called when the retry budget is spent * @returns {{ schedule, cancel, reset, block, connected, isBlocked: boolean, pending: boolean }} */ -function createReconnector(opts = {}) { - let _timer = null; +interface ReconnectorOpts { + shouldReconnect?: () => boolean; + onReconnecting?: () => void; + onExhausted?: () => void; +} + +interface Reconnector { + schedule(connectFn: () => void): void; + cancel(): void; + reset(): void; + block(): void; + connected(): void; + readonly isBlocked: boolean; + readonly pending: boolean; +} + +function createReconnector(opts: ReconnectorOpts = {}): Reconnector { + let _timer: ReturnType | null = null; let _delay = RECONNECT_BASE_DELAY_MS; let _startedAt = 0; let _blocked = false; - function schedule(connectFn) { + function schedule(connectFn: () => void): void { if (_timer) return; if (_blocked) return; if (opts.shouldReconnect && !opts.shouldReconnect()) return; @@ -477,9 +385,9 @@ async function createTerminalInstance({ fontSize, scrollback, cursorBlink = true // addToGrid() refuses to enter grid mode in that state, so any path // reaching here without isolation is a single-cell terminal where the // shared singleton is safe. - let isolatedGhostty = null; - if (typeof (window as any).createIsolatedGhostty === "function") { - try { isolatedGhostty = await (window as any).createIsolatedGhostty(); } + let isolatedGhostty: unknown = null; + if (typeof window.createIsolatedGhostty === "function") { + try { isolatedGhostty = await window.createIsolatedGhostty(); } catch (e) { console.error("[wf] createIsolatedGhostty failed, falling back to shared singleton (grid mode will be disabled):", e); } } else { console.error("[wf] createIsolatedGhostty is not available — falling back to shared singleton (grid mode will be disabled). This usually means the ghostty-web bundle is out of date."); @@ -615,9 +523,24 @@ const DESKTOP_INITIAL_PREFILL_TIMEOUT_MS = 1000; * This keeps the canvas hidden during the gap between prefill_done and the * arrival of the resize-induced redraw stream that follows it. * - * @param {{ getElement: () => HTMLElement|null, getTerm: () => Terminal|null, shouldFocus: () => boolean, canFinish?: () => boolean, timeoutMs?: number, settleMs?: number, maxPendingMs?: number, minPendingMs?: number }} opts */ -function createInitialHydrationController(opts) { + +interface InitialHydrationControllerOpts { + getElement: () => HTMLElement | null; + getTerm: () => GhosttyTerminal | null; + shouldFocus: () => boolean; + canFinish?: () => boolean; + onReveal?: () => void; + timeoutMs?: number; + settleMs?: number; + maxPendingMs?: number; + minPendingMs?: number; + silenceMs?: number; + session?: string | null; + machine?: string; +} + +function createInitialHydrationController(opts: InitialHydrationControllerOpts): InitialHydrationController { let _pending = false; let _fallbackTimer = null; let _settleTimer = null; @@ -638,7 +561,7 @@ function createInitialHydrationController(opts) { // event log. Pure-passthrough; falsy when caller didn't wire it up. const _diagSession = opts.session || null; const _diagMachine = opts.machine || ""; - function _diagEvent(kind, fields?: any) { + function _diagEvent(kind: string, fields?: Record): void { if (!_diagSession) return; __wfTraceEvent(__wfTraceGet(_diagSession, _diagMachine), kind, fields); } @@ -695,6 +618,10 @@ function createInitialHydrationController(opts) { el.classList.add("hydrated"); } if (term && opts.shouldFocus()) term.focus(); + // ghostty-web's dirty-cell tracking may think it already painted while + // the canvas was hidden (opacity:0 during hydration). Force a full + // canvas repaint so the revealed terminal isn't stale/blank. + if (opts.onReveal) opts.onReveal(); _diagEvent("hydration.reveal"); } }); @@ -763,8 +690,48 @@ function createInitialHydrationController(opts) { * @param {() => void} [opts.onReconnectExhausted] * @param {() => boolean} [opts.shouldReconnect] */ -function createPtySocketClient(opts) { - let ws = null; +interface TermDimensions { + readonly cols: number; + readonly rows: number; +} + +interface PtySocketClientOpts { + readonly session: string; + readonly machine?: string; + readonly resetPty?: boolean; + readonly prefillMode?: string; + readonly takeControlOnAttach?: boolean; + readonly getTermDimensions: () => TermDimensions | null; + readonly fitTerminal: () => void; + readonly onBinaryData?: (data: Uint8Array) => void; + readonly onOpen?: (wasReconnect: boolean) => void; + readonly onPtyReady?: () => void; + readonly onViewerConflict?: () => void; + readonly onControlGranted?: () => void; + readonly onReplacePrefill?: () => void; + readonly onDisconnected?: (code: number, reason: string) => void; + readonly onReconnecting?: () => void; + readonly onReconnectExhausted?: () => void; + readonly shouldReconnect?: () => boolean; +} + +interface PtySocketClient { + connect(): void; + reconnect(reconnectOpts?: { readonly takeControl?: boolean }): void; + scheduleReconnect(): void; + sendFitResize(options?: { readonly force?: boolean; readonly fit?: boolean }): void; + sendResize(cols: number, rows: number): void; + sendTakeControl(): void; + send(data: string | Blob | BufferSource): void; + close(): void; + resetRetry(): void; + readonly ws: WebSocket | null; + readonly isOpen: boolean; + readonly retryBlocked: boolean; +} + +function createPtySocketClient(opts: PtySocketClientOpts): PtySocketClient { + let ws: WebSocket | null = null; const _rc = createReconnector({ shouldReconnect: opts.shouldReconnect, onReconnecting: opts.onReconnecting, @@ -782,7 +749,7 @@ function createPtySocketClient(opts) { let _prefillDoneTimeout = null; // Diagnostic tracer (scrolldown investigation). Created per attach in // sendAttachHandshake. Read via window.__wf_dumpTrace(). - let _trace: any = null; + let _trace: TraceState | null = null; function buildUrl() { const resetSuffix = consumeReset ? "&reset=1" : ""; @@ -812,7 +779,7 @@ function createPtySocketClient(opts) { _prefillChunks = []; _awaitingPrefillDone = prefillMode !== "none"; _sawViewportPrefill = false; - const msg: any = { type: "attach", cols: dims.cols, rows: dims.rows, prefillMode }; + const msg: { type: "attach"; cols: number; rows: number; prefillMode: string; takeControl?: true } = { type: "attach", cols: dims.cols, rows: dims.rows, prefillMode }; if (_takeControlOnAttach) { msg.takeControl = true; _takeControlOnAttach = false; } // Diag: start a fresh trace per attach so reconnects/take-controls show up // as separate sessions in the dump. @@ -1004,7 +971,7 @@ function createPtySocketClient(opts) { }); } - function sendResize(cols, rows) { + function sendResize(cols: number, rows: number): void { if (ws && ws.readyState === WebSocket.OPEN) { ws.send(JSON.stringify({ type: "resize", cols, rows })); } @@ -1016,7 +983,7 @@ function createPtySocketClient(opts) { } } - function send(data) { + function send(data: string | Blob | BufferSource): void { if (ws && ws.readyState === WebSocket.OPEN) ws.send(data); } @@ -1088,17 +1055,65 @@ function createPtySocketClient(opts) { * @param {() => boolean} [opts.canAcceptInput] - override stdin guard (default: ptyClient.isOpen) * @param {() => boolean} [opts.canSendResize] - override resize guard (default: canAcceptInput) * @param {(Uint8Array) => void} [opts.onOutput] - called after data written to term - * @param {(boolean) => void} [opts.onOpen] - WebSocket opened (wasReconnect) - * @param {() => void} [opts.onPtyReady] - * @param {() => void} [opts.onViewerConflict] - * @param {() => void} [opts.onControlGranted] - * @param {() => void} [opts.onReplacePrefill] - * @param {(number, string) => void} [opts.onDisconnected] - * @param {() => void} [opts.onReconnecting] - * @param {() => void} [opts.onReconnectExhausted] - * @returns {{ mount, connect, focus, resize, dispose, scheduleReconnect, sendTakeControl, sendFitResize, send, resetRetry, term, fitAddon, ptyClient, hydration, isConnected, retryBlocked }} */ -function createPtyTerminalController(opts) { + +interface PtyTerminalControllerOpts { + readonly session: string; + readonly machine?: string; + readonly fontSize?: number; + readonly scrollback?: number; + readonly cursorBlink?: boolean; + readonly disableStdin?: boolean; + readonly resetPty?: boolean; + readonly prefillMode?: string; + readonly hydrationTimeoutMs?: number; + readonly shouldFocus?: () => boolean; + readonly shouldReconnect?: () => boolean; + readonly canAcceptInput?: () => boolean; + readonly canSendResize?: () => boolean; + readonly getHydrationElement?: () => HTMLElement | null; + readonly onOpen?: (wasReconnect: boolean) => void; + readonly onPtyReady?: () => void; + readonly onOutput?: (data: Uint8Array) => void; + readonly onViewerConflict?: () => void; + readonly onControlGranted?: () => void; + readonly onDisconnected?: (code: number, reason: string) => void; + readonly onReconnecting?: () => void; + readonly onReconnectExhausted?: () => void; +} +interface InitialHydrationController { + readonly pending: boolean; + start(): void; + scheduleFinish(): void; + notifyData(): void; + finish(): void; + cancel(): void; +} + +interface PtyTerminalController { + mount(container: HTMLElement, mountOpts?: { readonly cached?: string | null }): Promise; + connect(connectOpts?: { readonly takeControl?: boolean }): void; + focus(): void; + resize(): void; + resizeWithTransition(): void; + dispose(): void; + scheduleReconnect(): void; + sendTakeControl(): void; + sendFitResize(options?: { readonly force?: boolean; readonly fit?: boolean }): void; + forceRepaint(): void; + syncLayout(options?: { readonly forceSend?: boolean; readonly repaint?: boolean; readonly reason?: string }): void; + send(data: string | Blob | BufferSource): void; + resetRetry(): void; + reconnect(reconnectOpts?: { readonly takeControl?: boolean }): void; + readonly term: GhosttyTerminal | null; + readonly fitAddon: GhosttyFitAddon | null; + readonly ptyClient: PtySocketClient | null; + readonly hydration: InitialHydrationController | null; + readonly isConnected: boolean; + readonly retryBlocked: boolean; +} + +function createPtyTerminalController(opts: PtyTerminalControllerOpts): PtyTerminalController { let _container = null; let _term = null; let _fitAddon = null; @@ -1176,22 +1191,13 @@ function createPtyTerminalController(opts) { if (opts.onOutput) opts.onOutput(data); } } catch (err) { - try { - if (!(window as any).__wf_lastCrash) { - (window as any).__wf_lastCrash = { - session: opts.session, - cols: _term && _term.cols, - rows: _term && _term.rows, - len: data.length, - head: Array.from(data.slice(0, 64)), - tail: Array.from(data.slice(Math.max(0, data.length - 64))), - err: String(err), - stack: (err as any) && (err as any).stack, - ts: Date.now(), - }; - console.error("[wf-crash]", opts.session, err, "— captured to window.__wf_lastCrash"); - } - } catch {} + captureLastCrash({ + session: opts.session, + cols: _term ? _term.cols : null, + rows: _term ? _term.rows : null, + data, + err, + }); throw err; } } @@ -1219,11 +1225,11 @@ function createPtyTerminalController(opts) { function forceRepaint() { if (!_term) return; - const t = _term as any; + const t = _term as GhosttyTerminal; // renderer.render(buffer, forceAll, viewportY, scrollbackProvider) bypasses // Terminal.resize()'s same-dimension guard and FitAddon.fit()'s _lastCols guard. // This is the only way to force a full canvas repaint without changing dimensions. - try { t.renderer?.render(t.wasmTerm, true, t.viewportY, t); } catch {} + try { t.renderer?.render?.(t.wasmTerm, true, t.viewportY, t); } catch { /* private API — may drift between ghostty versions */ } } function syncLayout(options?: { forceSend?: boolean; repaint?: boolean; reason?: string }) { @@ -1460,6 +1466,7 @@ function createPtyTerminalController(opts) { getTerm: () => _term, shouldFocus: opts.shouldFocus || (() => true), canFinish: () => _hydrationWritesInFlight === 0, + onReveal: () => forceRepaint(), timeoutMs: opts.hydrationTimeoutMs, settleMs: 50, minPendingMs: 200, @@ -1723,7 +1730,7 @@ function sendMobileProxyText(proxy, text) { } function flushMobileKbProxyPendingInput() { - const proxy = document.getElementById("mobile-kb-proxy"); + const proxy = document.getElementById("mobile-kb-proxy") as HTMLInputElement | null; if (!proxy) return false; return sendMobileProxyText(proxy, proxy.value); } @@ -1747,7 +1754,7 @@ function draftKey(machine, session) { } function saveDraft() { if (!state.currentSession) return; - const val = document.getElementById("msg-input").value; + const val = (document.getElementById("msg-input") as HTMLTextAreaElement).value; const key = draftKey(state.currentMachine, state.currentSession); if (val) localStorage.setItem(key, val); else localStorage.removeItem(key); @@ -1755,7 +1762,7 @@ function saveDraft() { function restoreDraft() { if (!state.currentSession) return; const val = localStorage.getItem(draftKey(state.currentMachine, state.currentSession)) || ""; - const input = document.getElementById("msg-input"); + const input = document.getElementById("msg-input") as HTMLTextAreaElement; input.value = val; autoResizeInput(); } @@ -1774,7 +1781,7 @@ function snapshotKey(machine, session) { function saveSnapshot(machine, session, text) { if (!session || !text) return; const trimmed = text.length > SNAPSHOT_MAX_BYTES ? text.slice(-SNAPSHOT_MAX_BYTES) : text; - try { localStorage.setItem(snapshotKey(machine, session), JSON.stringify({ d: trimmed, ts: Date.now() })); } catch {} + try { localStorage.setItem(snapshotKey(machine, session), JSON.stringify({ d: trimmed, ts: Date.now() })); } catch { /* quota/private-mode */ } } function loadSnapshot(machine, session) { if (!session) return null; @@ -1848,7 +1855,7 @@ function flushGridSnapshots() { * data:, etc.), userinfo (creds smuggling), and non-numeric/out-of-range * ports. */ -function isValidMachineUrl(u) { +function isValidMachineUrl(u: unknown): boolean { if (typeof u !== "string" || u.length === 0 || u.length > 256) return false; let parsed; try { parsed = new URL(u); } catch { return false; } @@ -1887,14 +1894,14 @@ function getMachines() { } catch { return []; } } -function saveMachines(list) { +function saveMachines(list: Array<{ url: string; name: string }>): void { // Mirror getMachines() validation on the write side so future code paths // that bypass the discover-source can't poison localStorage either. const safe = (Array.isArray(list) ? list : []).filter((m) => m && isValidMachineUrl(m.url)); localStorage.setItem("wolfpack-machines", JSON.stringify(safe)); } -function removeMachine(url) { +function removeMachine(url: string): Array<{ url: string; name: string }> { const machines = getMachines().filter(m => m.url !== url); saveMachines(machines); return machines; @@ -1913,7 +1920,7 @@ function removeMachine(url) { } catch { state.selfName = "this machine"; } // Auto-discover wolfpack peers on tailnet try { - const d = await api("/discover"); + const d = await api("/discover"); const peers = d.peers || []; if (peers.length) { const peerUrls = new Set(peers.map(p => p.url)); @@ -1940,29 +1947,85 @@ function removeMachine(url) { } catch {} })(); -function errorMessage(err) { - if (err && typeof err.message === "string" && err.message) return err.message; +function errorMessage(err: unknown): string { + if (err && typeof err === "object" && "message" in err) { + const msg = (err as Record).message; + if (typeof msg === "string" && msg) return msg; + } return String(err || "unknown error"); } -async function api(path, opts, machineUrl) { +interface DiscoverPeer { + readonly url: string; + readonly name?: string; + readonly hostname?: string; +} + +interface DiscoverResponse { + readonly peers?: readonly DiscoverPeer[]; +} + +interface InfoResponse { + readonly version?: string; + readonly name?: string; +} + +interface SessionsResponse { + readonly sessions?: Array>; +} + +interface RalphResponse { + readonly loops?: Array>; +} + +interface ProjectsResponse { + readonly projects?: string[]; +} + +interface AgentCommandSetting { + readonly cmd: string; + readonly enabled: boolean; +} + +interface SettingsResponse { + readonly settings?: { + readonly cmds?: AgentCommandSetting[]; + }; + readonly effective?: { + readonly cmds?: string[]; + readonly agentCmd?: string; + }; +} + +interface NextSessionNameResponse { + readonly name?: string; +} + +interface CreateSessionResponse { + readonly session?: string; +} + +async function api(path: string, opts?: RequestInit, machineUrl?: string): Promise { const base = machineUrl ? new URL("/api" + path, machineUrl).href : "/api" + path; const res = await fetch(base, opts); const body = await res.text(); - let data = {}; + let data: unknown = {}; if (body) { - try { data = JSON.parse(body); } catch {} + try { data = JSON.parse(body); } catch { /* non-json response body */ } } if (!res.ok) { - const message = data && typeof data.error === "string" - ? data.error + const errorText = data && typeof data === "object" && "error" in data + ? (data as Record).error + : undefined; + const message = typeof errorText === "string" + ? errorText : (body ? body.slice(0, 200) : `HTTP ${res.status}`); - const err = new Error(message); + const err = new Error(message) as Error & { status: number; data: unknown }; err.status = res.status; err.data = data; throw err; } - return data; + return data as TResponse; } // set by swipe engine so showView() skips animation after gesture already handled it @@ -1978,7 +2041,7 @@ const VIEW_DEPTH = { "ralph-start": 1, }; -function showView(name, skipAnimation) { +function showView(name: string, skipAnimation?: boolean): void { const prevView = state.currentView; const prevEl = document.getElementById(prevView + "-view"); const isMobile = !isDesktop(); @@ -2202,8 +2265,9 @@ function safeTriage(v: string): string { return VALID_TRIAGE.has(v) ? v : "idle"; } -function triageUi(triage) { - return TRIAGE_MAP[triage] || TRIAGE_MAP["idle"]; +function triageUi(triage: string | null | undefined): { dot: string; card: string; label: string; title: string } { + const key = triage && triage in TRIAGE_MAP ? (triage as keyof typeof TRIAGE_MAP) : "idle"; + return TRIAGE_MAP[key]; } // Shared session groups cache for switcher reuse @@ -2253,8 +2317,8 @@ function fetchMachine(machineUrl, machineMeta) { // Peers that fail repeatedly get a shorter timeout — see WP.peerHealth* helpers. const timeoutMs = machineUrl ? WP.peerHealthTimeoutMs(state.peerHealth, machineUrl) : 0; const remoteOpts = machineUrl ? { signal: AbortSignal.timeout(timeoutMs) } : undefined; - const ralphFetch = wpSettings.ralphEnabled ? api("/ralph", remoteOpts, machineUrl || undefined).catch(() => ({ loops: [] })) : Promise.resolve({ loops: [] }); - return Promise.all([api("/sessions", remoteOpts, machineUrl || undefined), api("/info", remoteOpts, machineUrl || undefined), ralphFetch]) + const ralphFetch = wpSettings.ralphEnabled ? api("/ralph", remoteOpts, machineUrl || undefined).catch(() => ({ loops: [] })) : Promise.resolve({ loops: [] }); + return Promise.all([api("/sessions", remoteOpts, machineUrl || undefined), api("/info", remoteOpts, machineUrl || undefined), ralphFetch]) .then(([d, info, ralph]) => { if (machineUrl) state.peerHealth = WP.peerHealthRecordSuccess(state.peerHealth, machineUrl); return { @@ -2433,16 +2497,16 @@ async function openSession(name, machineUrl) { // ── Project picker ── -async function showProjectPicker(machineUrl) { +async function showProjectPicker(machineUrl?: string): Promise { state.projectMachine = machineUrl || ""; setState({ viewBeforePicker: state.currentView }); showView("projects"); - document.getElementById("new-project-name").value = ""; + (document.getElementById("new-project-name") as HTMLInputElement).value = ""; const el = document.getElementById("project-list"); el.innerHTML = '
Loading...
'; try { - const data = await api("/projects", undefined, state.projectMachine); + const data = await api("/projects", undefined, state.projectMachine); if (!data.projects?.length) { el.innerHTML = '
No projects in ~/Dev
'; return; @@ -2462,7 +2526,7 @@ async function showProjectPicker(machineUrl) { } } -function showTerminalLoading(label) { +function showTerminalLoading(label: string): void { clearPreservedGrid(); showView("terminal"); const dtc = document.getElementById("desktop-terminal-container"); @@ -2470,14 +2534,14 @@ function showTerminalLoading(label) { dtc.innerHTML = 'Starting session in ' + esc(label) + '\u2026'; } -function selectProject(project) { +function selectProject(project: string): void { state.selectedProject = project; state.isNewProject = false; showAgentPicker(); } function selectNewProject() { - const input = document.getElementById("new-project-name"); + const input = document.getElementById("new-project-name") as HTMLInputElement; const name = input.value.trim(); if (!name) return; state.selectedProject = name; @@ -2489,15 +2553,15 @@ async function showAgentPicker() { showView("agent"); const el = document.getElementById("agent-list"); el.innerHTML = '
Loading...
'; - const nameInput = document.getElementById("session-name-input"); + const nameInput = document.getElementById("session-name-input") as HTMLInputElement; const nameError = document.getElementById("session-name-error"); nameInput.value = ""; nameInput.classList.remove("invalid"); nameError.classList.remove("visible"); try { const [data, nameData] = await Promise.all([ - api("/settings", undefined, state.projectMachine), - api("/next-session-name?project=" + encodeURIComponent(state.selectedProject), undefined, state.projectMachine), + api("/settings", undefined, state.projectMachine), + api("/next-session-name?project=" + encodeURIComponent(state.selectedProject), undefined, state.projectMachine), ]); nameInput.value = nameData.name || state.selectedProject; // /api/settings now returns { settings, effective } — effective.cmds is @@ -2519,7 +2583,7 @@ async function showAgentPicker() { // Session name input validation (function() { - const input = document.getElementById("session-name-input"); + const input = document.getElementById("session-name-input") as HTMLInputElement; const error = document.getElementById("session-name-error"); input.addEventListener("input", () => { const val = input.value.trim(); @@ -2547,7 +2611,7 @@ async function loadAgentsSettings() { if (!list) return; list.innerHTML = '
Loading...
'; try { - const data = await api("/settings"); + const data = await api("/settings"); renderAgentsList(data); } catch (e) { list.innerHTML = `
Failed to load: ${esc(errorMessage(e))}
`; @@ -2581,7 +2645,7 @@ function renderAgentsList(data) { async function toggleAgentEnabled(cmd, enabled) { try { - const data = await api("/settings", { + const data = await api("/settings", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ setCmdEnabled: { cmd, enabled } }), @@ -2595,7 +2659,7 @@ async function toggleAgentEnabled(cmd, enabled) { async function removeAgent(cmd) { try { - const data = await api("/settings", { + const data = await api("/settings", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ removeCmd: cmd }), @@ -2607,12 +2671,12 @@ async function removeAgent(cmd) { } async function addAgent() { - const input = document.getElementById("agent-add-input"); + const input = document.getElementById("agent-add-input") as HTMLInputElement; const cmd = (input.value || "").trim(); if (!cmd) return; showAgentAddError(""); try { - const data = await api("/settings", { + const data = await api("/settings", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ addCmd: cmd }), @@ -2625,7 +2689,7 @@ async function addAgent() { } } -function showAgentAddError(msg) { +function showAgentAddError(msg: string): void { const el = document.getElementById("agent-add-error"); if (el) el.textContent = msg; } @@ -2658,7 +2722,7 @@ async function deleteCustomCmd(cmd, e) { } async function createSessionWithAgent(cmd) { - const nameInput = document.getElementById("session-name-input"); + const nameInput = document.getElementById("session-name-input") as HTMLInputElement; const sessionName = (nameInput.value || "").trim(); if (sessionName && !/^[a-zA-Z0-9_-]+$/.test(sessionName)) return; const machine = state.projectMachine; @@ -2667,7 +2731,7 @@ async function createSessionWithAgent(cmd) { const body = state.isNewProject ? { newProject: state.selectedProject, cmd, sessionName: sessionName || undefined } : { project: state.selectedProject, cmd, sessionName: sessionName || undefined }; - const data = await api("/create", { + const data = await api("/create", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(body), @@ -2731,7 +2795,7 @@ function removeDesktopConflictOverlay() { if (el) el.remove(); } -async function initTerminal(cached) { +async function initTerminal(cached?: string): Promise { if (state.terminalController) return; // Defensive: clear stale timer from a prior session that wasn't properly destroyed if (state._cachedFallbackTimer) { clearTimeout(state._cachedFallbackTimer); state._cachedFallbackTimer = null; } @@ -2834,7 +2898,7 @@ async function initTerminal(cached) { removeDesktopConflictOverlay(); if (state.terminalController) state.terminalController.focus(); if (isMobile) { - const proxy = document.getElementById("mobile-kb-proxy"); + const proxy = document.getElementById("mobile-kb-proxy") as HTMLInputElement | null; if (proxy && proxy.style.display !== "none") proxy.focus({ preventScroll: true }); } }, @@ -2884,9 +2948,10 @@ async function initTerminal(cached) { if (container.getAttribute("contenteditable") && !container.getAttribute("inputmode")) { container.setAttribute("inputmode", "none"); } - container.querySelectorAll("textarea, input").forEach((el: HTMLElement) => { - if (!el.hasAttribute("readonly")) { - el.setAttribute("tabindex", "-1"); + container.querySelectorAll("textarea, input").forEach((el) => { + const htmlEl = el as HTMLElement; + if (!htmlEl.hasAttribute("readonly")) { + htmlEl.setAttribute("tabindex", "-1"); el.setAttribute("inputmode", "none"); el.setAttribute("readonly", ""); } @@ -3003,7 +3068,7 @@ function terminalSessionKey() { return (state.currentMachine || "") + "|" + (state.currentSession || ""); } -function setConnState(connState) { +function setConnState(connState: string): void { const statusEl = document.getElementById("conn-status"); if (!statusEl) return; const active = !!state.terminalController?.term; @@ -3018,14 +3083,6 @@ function setConnState(connState) { statusEl.innerHTML = 'reconnecting\u2026'; return; } - if (connState === "displaced") { - statusEl.style.display = "block"; - statusEl.style.background = "#8a5a00"; - statusEl.innerHTML = 'taken over by another viewer \u2014 '; - const retryBtn = document.getElementById("conn-retry-btn"); - if (retryBtn) retryBtn.onclick = takeBackControl; - return; - } if (connState === "offline") { statusEl.style.display = "block"; statusEl.style.background = "#cc3333"; @@ -3048,7 +3105,7 @@ function retryConnection() { } function sendMsg() { - const input = document.getElementById("msg-input"); + const input = document.getElementById("msg-input") as HTMLTextAreaElement; const text = input.value.trim(); if (!text || !state.currentSession) return; const saved = text; @@ -3084,7 +3141,7 @@ function sendMsg() { } function updatePreview() { - const input = document.getElementById("msg-input"); + const input = document.getElementById("msg-input") as HTMLTextAreaElement; const preview = document.getElementById("msg-preview"); if (input.scrollWidth > input.clientWidth) { preview.textContent = input.value; @@ -3094,7 +3151,7 @@ function updatePreview() { } } -function sendKey(key) { +function sendKey(key: string): void { if (!state.currentSession) return; const esc = KEY_TO_ESCAPE[key]; if (!esc) return; @@ -3148,8 +3205,9 @@ function renderDrawerList() { list.innerHTML = html; list.querySelectorAll(".drawer-item").forEach(el => { - el.onclick = () => { - switchSession(el.dataset.val); closeDrawer(); + const item = el as HTMLElement; + item.onclick = () => { + switchSession(item.dataset.val); closeDrawer(); }; }); const chipLabel = document.getElementById("chip-label"); @@ -3204,7 +3262,7 @@ function openDrawer() { haptic(5); } -function closeDrawer(instant) { +function closeDrawer(instant?: boolean): void { if (!state.drawerOpen) return; state.drawerOpen = false; const drawer = document.getElementById("session-drawer"); @@ -3525,7 +3583,7 @@ function _wfRepaintAllTerminals() { } window.addEventListener("focus", _wfRepaintAllTerminals); -window.addEventListener("pageshow", (e: any) => { +window.addEventListener("pageshow", (e: PageTransitionEvent) => { if (e.persisted) _wfRepaintAllTerminals(); }); // 30s heartbeat: cheap (one canvas draw call) and only runs while visible. @@ -3542,12 +3600,12 @@ document.getElementById("desktop-terminal-container").addEventListener("click", // Auto-resize textarea as content grows function autoResizeInput() { - const ta = document.getElementById("msg-input"); + const ta = document.getElementById("msg-input") as HTMLTextAreaElement; ta.style.height = "auto"; ta.style.height = Math.min(ta.scrollHeight, 120) + "px"; } -const msgInput = document.getElementById("msg-input"); +const msgInput = document.getElementById("msg-input") as HTMLTextAreaElement; msgInput.addEventListener("input", () => { autoResizeInput(); updatePreview(); @@ -3595,7 +3653,7 @@ msgInput.addEventListener("keydown", (e) => { function needsHold() { if (!wpSettings.holdToSend) return false; - const text = document.getElementById("msg-input").value.trim(); + const text = (document.getElementById("msg-input") as HTMLTextAreaElement).value.trim(); return text.length > LARGE_THRESHOLD; } @@ -3654,7 +3712,7 @@ function toggleKbAccessory() { // Wire up all keys — prevent blur with mousedown/touchstart preventDefault acc.querySelectorAll(".kb-key").forEach((btn) => { - const key = btn.dataset.key; + const key = (btn as HTMLElement).dataset.key; // Skip buttons with their own onclick (e.g. git button) if (!key) return; let touchFired = false; @@ -3681,7 +3739,7 @@ function toggleKbAccessory() { })(); (function setupMobileKbProxy() { - const proxy = document.getElementById("mobile-kb-proxy"); + const proxy = document.getElementById("mobile-kb-proxy") as HTMLInputElement | null; if (!proxy) return; let _composing = false; let _skipNextInput = false; @@ -3885,7 +3943,7 @@ async function renderMachinesList() { }).join(""); } -function removeMachineUI(url) { +function removeMachineUI(url: string): void { removeMachine(url); renderMachinesList(); } @@ -3895,7 +3953,7 @@ async function discoverMachines() { statusEl.textContent = "Scanning tailnet..."; statusEl.style.color = "#555"; try { - const data = await api("/discover"); + const data = await api("/discover"); const peers = data.peers || []; if (!peers.length) { statusEl.textContent = "No wolfpack instances found on tailnet"; @@ -3993,7 +4051,7 @@ if (!isDesktop()) { fgEl = document.getElementById(state.currentView + "-view"); bgEl = document.getElementById(backTarget + "-view"); } else if (dx < 0) { - const card = e.target.closest(".card, .ralph-card"); + const card = (e.target as Element | null)?.closest(".card, .ralph-card") ?? null; if (!card) { scrolling = true; return; } swipeCard = card; isBack = false; @@ -4062,7 +4120,7 @@ if (!isDesktop()) { const backView = BACK_TARGET[state.currentView]; if (backView === "sessions") { const backBtn = document.getElementById("back-btn"); - if (backBtn && backBtn.onclick) backBtn.onclick(); + if (backBtn && backBtn.onclick) backBtn.onclick(new PointerEvent("click")); } else { showView(backView, true); } @@ -4349,17 +4407,17 @@ function bindHtmlEventListeners(): void { if (discoverBtn) discoverBtn.addEventListener("click", () => discoverMachines()); // Settings toggles - on("setting-animations", "change", function(this: any) { toggleSetting("animations", this.checked); }); - on("setting-haptics", "change", function(this: any) { toggleSetting("haptics", this.checked); }); - on("setting-notifications", "change", function(this: any) { toggleSetting("notifications", this.checked); }); - on("setting-enterSends", "change", function(this: any) { toggleSetting("enterSends", this.checked); }); - on("setting-holdToSend", "change", function(this: any) { toggleSetting("holdToSend", this.checked); }); - on("setting-ralphEnabled", "change", function(this: any) { toggleSetting("ralphEnabled", this.checked); }); - on("setting-debugPanel", "change", function(this: any) { toggleSetting("debugPanel", this.checked); toggleDebugPanel(); }); - on("setting-snapshotTtl", "input", function(this: any) { + on("setting-animations", "change", function(this: HTMLInputElement) { toggleSetting("animations", this.checked); }); + on("setting-haptics", "change", function(this: HTMLInputElement) { toggleSetting("haptics", this.checked); }); + on("setting-notifications", "change", function(this: HTMLInputElement) { toggleSetting("notifications", this.checked); }); + on("setting-enterSends", "change", function(this: HTMLInputElement) { toggleSetting("enterSends", this.checked); }); + on("setting-holdToSend", "change", function(this: HTMLInputElement) { toggleSetting("holdToSend", this.checked); }); + on("setting-ralphEnabled", "change", function(this: HTMLInputElement) { toggleSetting("ralphEnabled", this.checked); }); + on("setting-debugPanel", "change", function(this: HTMLInputElement) { toggleSetting("debugPanel", this.checked); toggleDebugPanel(); }); + on("setting-snapshotTtl", "input", function(this: HTMLInputElement) { toggleSetting("snapshotTtl", +this.value); const val = $("snapshot-ttl-val"); - if (val) val.textContent = formatSnapshotTtl(this.value); + if (val) val.textContent = formatSnapshotTtl(+this.value); }); // Term font size buttons diff --git a/public/tsconfig.json b/public/tsconfig.json new file mode 100644 index 00000000..b4d6e62b --- /dev/null +++ b/public/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + // Temporary frontend migration guard: public/app.ts and related legacy browser + // modules still have broad implicit-any/null debt. Keep the public typecheck + // on, but do not claim strict frontend coverage until those modules are typed. + "noImplicitAny": false, + "strictNullChecks": false + }, + "include": ["**/*.ts"] +} diff --git a/public/types-globals.d.ts b/public/types-globals.d.ts new file mode 100644 index 00000000..73e04057 --- /dev/null +++ b/public/types-globals.d.ts @@ -0,0 +1,102 @@ +/** + * Ambient global declarations for the browser bundle. + * + * The frontend loads several script tags that install globals on `window` + * before `app.bundle.js` runs: + * + * - `/ghostty-web.bundle.js` → `window.Terminal`, `window.FitAddon` + * - `/wolfpack-lib.js` → `window.WP` (the surface re-exported from + * `src/wolfpack-client-lib.ts`) + * + * Plus a few window globals used by app.ts (debug surface, wasm-bundle + * handoff). Declare them here so the rest of the code doesn't need ad-hoc + * casts. + * + * This file is `.d.ts` so it contributes types only; it never emits. + */ + +// `WP` is the runtime surface bundled from src/wolfpack-client-lib.ts. +// Re-export through the type system so all `WP.foo` access stays accurate +// to the source of truth. +import type * as WolfpackClientLib from "../src/wolfpack-client-lib"; + +declare global { + interface GhosttyTerminal { + readonly cols: number; + readonly rows: number; + readonly element?: HTMLElement; + readonly renderer?: { + getMetrics?: () => { readonly width: number; readonly height: number } | null; + render?: (wasmTerm: unknown, forceAll: boolean, viewportY: unknown, scrollbackProvider: unknown) => void; + }; + readonly options: { disableStdin: boolean; cursorBlink: boolean }; + readonly wasmTerm?: unknown; + readonly viewportY?: unknown; + loadAddon(addon: GhosttyFitAddon): void; + attachCustomKeyEventHandler(handler: (event: KeyboardEvent) => boolean): void; + attachCustomWheelEventHandler(handler: (event: WheelEvent) => boolean): void; + hasSelection(): boolean; + getSelection(): string; + onData(handler: (data: string) => void): void; + onBinary?: (handler: (data: string) => void) => void; + onResize(handler: (size: { readonly cols: number; readonly rows: number }) => void): void; + open(element: HTMLElement): void; + focus(): void; + blur(): void; + resize(cols: number, rows: number): void; + scrollToBottom(): void; + scrollToLine(line: number): void; + getMode(mode: number): boolean; + getScrollbackLength?(): number; + clear(): void; + dispose(): void; + write(data: Uint8Array | string): void; + } + + interface GhosttyTerminalOptions { + readonly cursorBlink: boolean; + readonly disableStdin: boolean; + readonly macOptionClickForcesSelection: boolean; + readonly fontSize: number; + readonly lineHeight: number; + readonly fontFamily: string; + readonly ghostty?: unknown; + readonly theme: { + readonly background: string; + readonly foreground: string; + readonly cursor: string; + readonly selectionBackground: string; + }; + readonly scrollback: number; + } + + interface GhosttyFitAddon { + _terminal?: GhosttyTerminal; + proposeDimensions?: () => { readonly cols: number; readonly rows: number } | undefined; + fit(): void; + } + + const WP: typeof WolfpackClientLib; + + // ghostty-web globals. The bundle ships untyped (it's loaded as a UMD + // bundle attached to `window`), so this is the minimal structural surface + // this frontend actually consumes. + const Terminal: { new(options: GhosttyTerminalOptions): GhosttyTerminal }; + const FitAddon: { new(): GhosttyFitAddon }; + + interface Window { + // ghostty-web handoff (set by /ghostty-web.bundle.js at load time) + Terminal: typeof Terminal; + FitAddon: typeof FitAddon; + WP: typeof WolfpackClientLib; + + // wasm-bundle bootstrap (set by /ghostty-web.bundle.js, signals readiness) + ghosttyReady?: Promise; + wasmFailed?: boolean; + /** Factory for per-Terminal WASM isolation; see public/app.ts:481 and + * scripts/bundle-ghostty.ts for context. */ + createIsolatedGhostty?: () => Promise; + } +} + +export {}; diff --git a/src/public-assets.ts b/src/public-assets.ts index 367661ba..78fe1f0e 100644 --- a/src/public-assets.ts +++ b/src/public-assets.ts @@ -6,13 +6,14 @@ function _b64(s: string): Uint8Array { } export const assets = new Map([ - ["app.bundle.js", { content: "// AUTO-GENERATED by scripts/bundle-app.ts — do not edit\n// public/app-state.ts\nfunction esc(s) {\n if (s == null)\n return \"\";\n const d = document.createElement(\"div\");\n d.textContent = String(s);\n return d.innerHTML.replace(/'/g, \"'\").replace(/\"/g, \""\");\n}\nfunction escAttr(s) {\n if (s == null)\n return \"\";\n return String(s).replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\").replace(/\"/g, \"\\\\\\\"\").replace(//g, \"\\\\x3e\").replace(/&/g, \"\\\\x26\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/\\t/g, \"\\\\t\");\n}\nfunction loadStoredJson(key, fallback) {\n try {\n const raw = localStorage.getItem(key);\n if (!raw)\n return fallback;\n const parsed = JSON.parse(raw);\n return parsed && typeof parsed === \"object\" ? parsed : fallback;\n } catch {\n return fallback;\n }\n}\nfunction isDesktop() {\n return window.innerWidth > 768;\n}\nfunction formatSnapshotTtl(seconds) {\n seconds = +seconds;\n if (seconds < 60)\n return seconds + \"s\";\n return Math.floor(seconds / 60) + \"m\";\n}\nfunction getTerminalFontFamily() {\n return wpSettings.termFont === \"alt\" ? '\"JetBrains Mono\", \"Fira Code\", \"Source Code Pro\", \"Cascadia Code\", monospace' : '\"SF Mono\", \"Menlo\", \"Consolas\", \"DejaVu Sans Mono\", \"Liberation Mono\", monospace';\n}\nvar wpDefaults = { animations: true, haptics: true, notifications: false, enterSends: window.innerWidth > 768, holdToSend: false, termFontSize: \"medium\", termFont: \"default\", snapshotTtl: 900, debugPanel: false, ralphEnabled: false };\nvar wpSettings = Object.assign({}, wpDefaults, loadStoredJson(\"wp-effects\", {}));\nvar TERM_PRESETS = { small: { fontSize: 12, lineHeight: 1.35 }, medium: { fontSize: 13, lineHeight: 1.45 }, large: { fontSize: 14, lineHeight: 1.55 } };\nfunction toggleSetting(key, val) {\n wpSettings[key] = val;\n localStorage.setItem(\"wp-effects\", JSON.stringify(wpSettings));\n applySetting(key, val);\n}\nfunction applySetting(key, val) {\n if (key === \"animations\")\n document.body.classList.toggle(\"no-animations\", !val);\n if (key === \"notifications\") {\n if (val)\n requestNotifications();\n else\n unsubscribeNotifications();\n }\n if (key === \"enterSends\") {\n const el = document.getElementById(\"msg-input\");\n if (el)\n el.placeholder = val ? \"$ (Enter to send)\" : \"$ (⚡ to send)\";\n }\n if (key === \"termFontSize\") {\n document.body.classList.remove(\"term-size-small\", \"term-size-medium\", \"term-size-large\");\n document.body.classList.add(\"term-size-\" + val);\n document.querySelectorAll(\".term-size-btn\").forEach((b) => b.classList.toggle(\"active\", b.dataset.size === val));\n applyTermToXterm();\n }\n if (key === \"ralphEnabled\") {\n document.body.classList.toggle(\"ralph-hidden\", !val);\n }\n if (key === \"termFont\") {\n document.body.classList.toggle(\"term-font-alt\", val === \"alt\");\n document.querySelectorAll(\".term-font-btn\").forEach((b) => b.classList.toggle(\"active\", b.dataset.font === val));\n applyTermToXterm();\n }\n}\nfunction applyTermToXterm() {\n const p = TERM_PRESETS[wpSettings.termFontSize] || TERM_PRESETS.medium;\n const fontFamily = getTerminalFontFamily();\n if (state.terminalController?.term) {\n state.terminalController.term.options.fontSize = p.fontSize;\n state.terminalController.term.options.lineHeight = p.lineHeight;\n state.terminalController.term.options.fontFamily = fontFamily;\n state.terminalController.resize();\n }\n for (const gs of state.gridSessions) {\n if (!gs.controller?.term)\n continue;\n gs.controller.term.options.fontSize = Math.max(p.fontSize - 2, 10);\n gs.controller.term.options.lineHeight = p.lineHeight;\n gs.controller.term.options.fontFamily = fontFamily;\n gs.controller.resize();\n }\n}\nfunction initSettings() {\n Object.entries(wpSettings).forEach(([k, v]) => {\n applySetting(k, v);\n const el = document.getElementById(\"setting-\" + k);\n if (!el)\n return;\n if (el.type === \"checkbox\")\n el.checked = v;\n else\n el.value = v;\n });\n const ttlLabel = document.getElementById(\"snapshot-ttl-val\");\n if (ttlLabel)\n ttlLabel.textContent = formatSnapshotTtl(wpSettings.snapshotTtl);\n}\nfunction haptic(pattern) {\n if (wpSettings.haptics && navigator.vibrate)\n navigator.vibrate(pattern);\n}\nfunction urlBase64ToUint8Array(base64String) {\n const padding = \"=\".repeat((4 - base64String.length % 4) % 4);\n const base64 = (base64String + padding).replace(/-/g, \"+\").replace(/_/g, \"/\");\n const raw = atob(base64);\n const arr = new Uint8Array(raw.length);\n for (let i = 0;i < raw.length; i++)\n arr[i] = raw.charCodeAt(i);\n return arr;\n}\nasync function requestNotifications() {\n if (!(\"serviceWorker\" in navigator) || !(\"PushManager\" in window)) {\n console.warn(\"Push notifications not supported\");\n return;\n }\n const permission = await Notification.requestPermission();\n if (permission !== \"granted\") {\n state.notificationsEnabled = false;\n return;\n }\n try {\n const vapidResp = await fetch(\"/api/push/vapid-key\");\n const { publicKey } = await vapidResp.json();\n if (!publicKey)\n throw new Error(\"no VAPID key from server\");\n const reg = await navigator.serviceWorker.register(\"/sw.js\");\n await navigator.serviceWorker.ready;\n const sub = await reg.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: urlBase64ToUint8Array(publicKey)\n });\n const resp = await fetch(\"/api/push/subscribe\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(sub.toJSON())\n });\n if (resp.ok) {\n state.notificationsEnabled = true;\n console.log(\"Push subscription registered\");\n } else {\n throw new Error(`subscribe failed: ${resp.status}`);\n }\n } catch (e) {\n console.error(\"Push subscription failed:\", e);\n state.notificationsEnabled = false;\n }\n}\nasync function unsubscribeNotifications() {\n try {\n const reg = await navigator.serviceWorker.getRegistration();\n if (!reg)\n return;\n const sub = await reg.pushManager.getSubscription();\n if (!sub)\n return;\n await fetch(\"/api/push/unsubscribe\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ endpoint: sub.endpoint })\n });\n await sub.unsubscribe();\n state.notificationsEnabled = false;\n console.log(\"Push subscription removed\");\n } catch (e) {\n console.error(\"Push unsubscribe failed:\", e);\n }\n}\nvar QC_STORAGE_KEY = \"wp-quick-cmds\";\nfunction loadQuickCmds() {\n try {\n const raw = localStorage.getItem(QC_STORAGE_KEY);\n if (raw) {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed))\n return parsed;\n }\n } catch {}\n return [];\n}\nvar RECENTS_STORAGE_KEY = \"wp-recents\";\nvar MAX_RECENTS = 20;\nfunction loadRecents() {\n try {\n const raw = localStorage.getItem(RECENTS_STORAGE_KEY);\n if (raw) {\n const r = JSON.parse(raw);\n if (Array.isArray(r))\n return r;\n }\n } catch {}\n return [];\n}\nfunction loadSidebarPinned() {\n const v = localStorage.getItem(\"wolfpack-sidebar-pinned\");\n if (v !== null)\n return v !== \"0\";\n const old = localStorage.getItem(\"wolfpack-sidebar-collapsed\");\n if (old === \"1\")\n return false;\n return true;\n}\nvar _initSidebarPinned = loadSidebarPinned();\nvar state = {\n currentView: \"sessions\",\n currentSession: null,\n currentMachine: \"\",\n viewBeforePicker: \"sessions\",\n viewBeforeSettings: \"sessions\",\n allSessions: [],\n lastSessionGroups: [],\n firstLoad: true,\n lastSessionsHtml: \"\",\n loadSessionsEpoch: 0,\n selfName: \"\",\n selfVersion: \"\",\n sessionRecents: loadRecents(),\n quickCmds: loadQuickCmds(),\n currentRalphProject: null,\n currentRalphMachine: \"\",\n ralphStartMachine: \"\",\n ralphLogPollTimer: null,\n currentRalphPlanFile: \"\",\n restartingRalph: false,\n currentRalphWorktreeMode: \"false\",\n currentRalphWorktreeBranch: \"\",\n currentRalphAgent: \"\",\n terminalController: null,\n desktopResizeHandler: null,\n desktopResizeTimer: null,\n _touchCleanup: null,\n visualViewportHandler: null,\n kbResizeTimer: null,\n gridSessions: [],\n gridFocusIndex: 0,\n preservedGridSessions: [],\n preservedGridFocusIndex: 0,\n gridResizeHandler: null,\n gridRelayoutTransitionId: 0,\n sidebarPinned: _initSidebarPinned,\n sidebarCollapsed: !_initSidebarPinned,\n sidebarAutoExpanded: false,\n sidebarTransitionIsHover: false,\n sidebarResizeDone: false,\n sessionsExpanded: true,\n sessionRefreshTimer: null,\n snapshotTimer: null,\n swipeNavigated: false,\n projectMachine: \"\",\n selectedProject: \"\",\n isNewProject: false,\n enterRetryTimer: null,\n drawerOpen: false,\n notificationsEnabled: \"Notification\" in window && Notification.permission === \"granted\" && \"PushManager\" in window,\n kbAccessoryOpen: false,\n _cachedFallbackTimer: null,\n _ghostInputObserver: null,\n peerHealth: {}\n};\nfunction setState(patch) {\n Object.assign(state, patch);\n}\nfunction syncNotificationsPermission() {\n if (!(\"Notification\" in window))\n return;\n const granted = Notification.permission === \"granted\";\n if (state.notificationsEnabled && !granted) {\n state.notificationsEnabled = false;\n toggleSetting(\"notifications\", false);\n }\n}\nif (typeof document !== \"undefined\") {\n document.addEventListener(\"visibilitychange\", syncNotificationsPermission);\n window.addEventListener(\"focus\", syncNotificationsPermission);\n}\nvar SNAPSHOT_KEY_PREFIX = \"wp-snap|\";\nvar SNAPSHOT_MAX_BYTES = 16384;\nvar SNAPSHOT_SAVE_INTERVAL = 2000;\nvar DESKTOP_TERMINAL_SCROLLBACK = 2000;\nvar GRID_TERMINAL_SCROLLBACK = 2000;\n\n// public/app-ralph.ts\nvar deps;\nfunction initRalphDeps(d) {\n deps = d;\n}\nfunction getRalphStatus(loop) {\n const hitLimit = !loop.active && !loop.completed && loop.finished;\n return {\n hitLimit,\n status: loop.audit ? \"audit\" : loop.cleanup ? \"cleanup\" : loop.active ? \"running\" : loop.completed ? \"done\" : hitLimit ? \"limit\" : \"idle\",\n statusLabel: loop.audit ? \"AUDIT\" : loop.cleanup ? \"CLEANUP\" : loop.active ? \"RUNNING\" : loop.completed ? \"DONE\" : hitLimit ? \"STOPPED\" : \"IDLE\",\n dotClass: loop.active ? \"purple\" : \"gray\",\n dotTitle: loop.active ? \"active\" : \"idle\"\n };\n}\nfunction renderRalphCardHtml(loop, machineUrl) {\n const { status, statusLabel, dotClass, dotTitle } = getRalphStatus(loop);\n const taskPct = loop.tasksTotal > 0 ? Math.round(loop.tasksDone / loop.tasksTotal * 100) : 0;\n const taskLabel = loop.tasksDone + \"/\" + loop.tasksTotal + \" tasks\";\n const iterLabel = loop.totalIterations > 0 ? loop.iteration + \"/\" + loop.totalIterations + \" iter\" : \"\";\n const lastOut = loop.lastOutput ? '
' + esc(loop.lastOutput) + \"
\" : \"\";\n const mUrl = escAttr(machineUrl || \"\");\n return '
` + '
' + '' + esc(loop.project) + (loop.planFile ? ' — ' + esc(loop.planFile.replace(/\\.md$/i, \"\")) + \"\" : \"\") + \"\" + '' + statusLabel + \"\" + `` + \"
\" + '
' + '
' + '' + taskLabel + \"\" + \"
\" + (iterLabel ? '
' + iterLabel + \"
\" : \"\") + lastOut + \"
\";\n}\nfunction sidebarRalphCardHtml(loop, machineUrl) {\n const { status, statusLabel, dotClass, dotTitle } = getRalphStatus(loop);\n const mUrl = escAttr(machineUrl || \"\");\n return '
` + '' + '' + esc(loop.project) + \"\" + '' + statusLabel + \"\" + `` + \"
\";\n}\nfunction openRalphDetail(project, machineUrl) {\n state.currentRalphProject = project;\n state.currentRalphMachine = machineUrl || \"\";\n deps.showView(\"ralph-detail\");\n}\nasync function refreshRalphDetail() {\n if (!state.currentRalphProject)\n return;\n const header = document.getElementById(\"ralph-detail-header\");\n const logEl = document.getElementById(\"ralph-log\");\n const actions = document.getElementById(\"ralph-actions\");\n try {\n const data = await deps.api(\"/ralph\", undefined, state.currentRalphMachine);\n const loop = (data.loops || []).find((l) => l.project === state.currentRalphProject);\n if (!loop) {\n header.innerHTML = 'NOT FOUND';\n logEl.textContent = \"no ralph log for this project\";\n actions.innerHTML = \"\";\n return;\n }\n const { status, statusLabel } = getRalphStatus(loop);\n const taskPct = loop.tasksTotal > 0 ? Math.round(loop.tasksDone / loop.tasksTotal * 100) : 0;\n const taskLabel = loop.tasksDone + \"/\" + loop.tasksTotal + \" tasks\";\n const iterLabel = loop.totalIterations > 0 ? loop.iteration + \"/\" + loop.totalIterations + \" iter\" : \"\";\n const cleanupEnabled = loop.cleanupEnabled !== false;\n const auditFixEnabled = loop.auditFixEnabled === true;\n header.innerHTML = '
' + '' + statusLabel + \"\" + '
' + '' + taskLabel + \"\" + (iterLabel ? '' + iterLabel + \"\" : \"\") + \"
\" + \"
\" + '
' + '
' + \"
\" + (loop.planFile ? '
plan: ' + esc(loop.planFile) + \"
\" : \"\") + '
phases: audit+fix ' + (auditFixEnabled ? \"on\" : \"off\") + \", cleanup \" + (cleanupEnabled ? \"on\" : \"off\") + \"
\" + (loop.started ? '
started: ' + esc(loop.started) + \"
\" : \"\") + (loop.finished ? '
finished: ' + esc(loop.finished) + \"
\" : \"\");\n if (loop.active) {\n actions.innerHTML = '';\n } else {\n const wt = escAttr(loop.worktreeMode || \"false\");\n const wtBranch = escAttr(loop.worktreeBranch || \"\");\n actions.innerHTML = `` + '';\n }\n if (!loop.active && state.ralphLogPollTimer) {\n clearInterval(state.ralphLogPollTimer);\n state.ralphLogPollTimer = null;\n }\n } catch {\n header.innerHTML = 'ERROR';\n }\n try {\n const logData = await deps.api(\"/ralph/log?project=\" + encodeURIComponent(state.currentRalphProject), undefined, state.currentRalphMachine);\n if (logData.log != null) {\n const container = document.getElementById(\"ralph-log-container\");\n const wasScrolled = container.scrollTop + container.clientHeight >= container.scrollHeight - 30;\n logEl.textContent = logData.log;\n renderIterationCards(logData.log);\n if (wasScrolled)\n container.scrollTop = container.scrollHeight;\n }\n } catch {}\n}\nfunction parseIterations(log) {\n const sections = [];\n const marker = /^=== 🥋 (.+?) ===$/gm;\n let match, lastIdx = 0, lastTitle = null;\n while ((match = marker.exec(log)) !== null) {\n if (lastTitle !== null) {\n sections.push({ title: lastTitle, body: log.slice(lastIdx, match.index).trim() });\n }\n lastTitle = match[1];\n lastIdx = match.index + match[0].length;\n }\n if (lastTitle !== null) {\n sections.push({ title: lastTitle, body: log.slice(lastIdx).trim() });\n }\n return sections;\n}\nfunction renderIterationCards(log) {\n const el = document.getElementById(\"ralph-iterations\");\n const iterations = parseIterations(log);\n if (!iterations.length) {\n el.innerHTML = '
no iterations yet
';\n return;\n }\n const expanded = new Set;\n el.querySelectorAll(\".ralph-iter-card.expanded\").forEach((c) => expanded.add(c.dataset.idx));\n el.innerHTML = iterations.map((iter, i) => {\n const isLast = i === iterations.length - 1;\n const isOpen = expanded.has(String(i)) || isLast && !expanded.size;\n const taskLine = iter.body.match(/^task:\\s*(.+)$/m);\n const task = taskLine ? taskLine[1].replace(/^#+\\s*/, \"\").replace(/^~~|~~$/g, \"\").replace(/^\\d+[a-z]?\\.\\s*/, \"\") : \"\";\n const cardClass = isLast ? \"active\" : \"done\";\n return '
' + `
` + \"
\" + '
' + esc(iter.title.replace(/ — .+$/, \"\")) + \"
\" + (task ? '
' + esc(task) + \"
\" : \"\") + \"
\" + '' + \"
\" + '
' + esc(iter.body) + \"
\" + \"
\";\n }).join(\"\");\n}\nfunction toggleRawLog() {\n const logEl = document.getElementById(\"ralph-log\");\n const iterEl = document.getElementById(\"ralph-iterations\");\n const toggle = document.getElementById(\"ralph-log-toggle\");\n const showing = getComputedStyle(logEl).display !== \"none\";\n logEl.style.display = showing ? \"none\" : \"block\";\n logEl.classList.remove(\"ralph-log-hidden\");\n iterEl.style.display = showing ? \"\" : \"none\";\n toggle.textContent = showing ? \"view raw log\" : \"view iterations\";\n}\nasync function cancelRalph() {\n if (!state.currentRalphProject)\n return;\n if (!confirm(\"cancel ralph loop for \" + state.currentRalphProject + \"?\"))\n return;\n try {\n await deps.api(\"/ralph/cancel\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ project: state.currentRalphProject })\n }, state.currentRalphMachine);\n refreshRalphDetail();\n } catch (e) {\n alert(\"failed to cancel: \" + deps.errorMessage(e));\n }\n}\nasync function dismissRalph(project, event, machineUrl) {\n event.stopPropagation();\n if (!confirm(\"dismiss ralph loop for \" + project + \"?\"))\n return;\n try {\n const data = await deps.api(\"/ralph\", undefined, machineUrl);\n const loop = (data.loops || []).find((l) => l.project === project);\n if (loop && loop.active) {\n await deps.api(\"/ralph/cancel\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ project })\n }, machineUrl);\n await new Promise((r) => setTimeout(r, 1000));\n }\n const deletePlan = confirm(\"also delete the plan file?\");\n await deps.api(\"/ralph/dismiss\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ project, deletePlan })\n }, machineUrl);\n const timer = deps.getSidebarRefreshTimer();\n if (timer) {\n clearInterval(timer);\n deps.setSidebarRefreshTimer(null);\n }\n state.lastSessionsHtml = \"\";\n await deps.loadSessions();\n deps.renderSidebar();\n deps.startSidebarRefresh();\n } catch (e) {\n alert(\"failed to dismiss: \" + deps.errorMessage(e));\n }\n}\nfunction getStartMachine() {\n return state.ralphStartMachine || undefined;\n}\nasync function loadRalphStartForm() {\n const machines = deps.getMachines();\n const picker = document.getElementById(\"ralph-machine-picker\");\n if (machines.length > 0 && state.ralphStartMachine) {\n const mName = machines.find((m) => m.url === state.ralphStartMachine)?.name || \"remote\";\n picker.style.display = \"\";\n picker.innerHTML = 'Machine: ' + esc(mName) + \"\";\n } else if (machines.length > 0) {\n picker.style.display = \"\";\n picker.innerHTML = 'Machine: ' + esc(state.selfName || \"this machine\") + \"\";\n } else {\n picker.style.display = \"none\";\n }\n await loadStartFormData();\n}\nasync function loadStartFormData() {\n const machine = getStartMachine();\n const sel = document.getElementById(\"ralph-project-select\");\n try {\n const data = await deps.api(\"/projects\", undefined, machine);\n const projects = data.projects || [];\n sel.innerHTML = projects.map((p) => '\").join(\"\");\n if (state.currentRalphProject && projects.includes(state.currentRalphProject)) {\n sel.value = state.currentRalphProject;\n }\n } catch {\n sel.innerHTML = '';\n }\n sel.onchange = function() {\n loadPlanFiles(sel.value);\n const isoVal = (document.querySelector('input[name=\"ralph-isolation\"]:checked') || {}).value;\n if (isoVal === \"branch\")\n loadBranches(sel.value);\n if (isoVal === \"plan\" || isoVal === \"task\")\n loadWorktreeBranches(sel.value);\n };\n document.getElementById(\"ralph-cleanup-toggle\").checked = state.currentRalphCleanup != null ? state.currentRalphCleanup : true;\n document.getElementById(\"ralph-audit-fix-toggle\").checked = state.currentRalphAuditFix != null ? state.currentRalphAuditFix : false;\n state.currentRalphCleanup = undefined;\n state.currentRalphAuditFix = undefined;\n const isoRadios = document.querySelectorAll('input[name=\"ralph-isolation\"]');\n if (state.restartingRalph && state.currentRalphWorktreeMode !== \"false\") {\n const mode = state.currentRalphWorktreeMode;\n isoRadios.forEach((r) => {\n r.checked = r.value === mode;\n r.disabled = true;\n });\n onIsolationChange();\n } else {\n document.getElementById(\"ralph-iso-off\").checked = true;\n isoRadios.forEach((r) => {\n r.disabled = false;\n });\n document.getElementById(\"ralph-branch-fields\").style.display = \"none\";\n document.getElementById(\"ralph-worktree-fields\").style.display = \"none\";\n }\n await loadPlanFiles(sel.value);\n if (state.currentRalphPlanFile) {\n document.getElementById(\"ralph-plan-select\").value = state.currentRalphPlanFile;\n state.currentRalphPlanFile = \"\";\n }\n if (state.currentRalphAgent) {\n document.getElementById(\"ralph-agent-select\").value = state.currentRalphAgent;\n state.currentRalphAgent = \"\";\n }\n const lockable = [\n sel,\n document.getElementById(\"ralph-plan-select\"),\n document.getElementById(\"ralph-agent-select\"),\n document.getElementById(\"ralph-cleanup-toggle\"),\n document.getElementById(\"ralph-audit-fix-toggle\"),\n document.getElementById(\"ralph-worktree-name\"),\n document.getElementById(\"ralph-worktree-base\"),\n document.getElementById(\"ralph-branch-name\"),\n document.getElementById(\"ralph-source-branch\")\n ];\n if (state.restartingRalph) {\n lockable.forEach((el) => {\n if (el)\n el.disabled = true;\n });\n if (state.currentRalphWorktreeBranch) {\n document.getElementById(\"ralph-worktree-name\").value = state.currentRalphWorktreeBranch;\n }\n state.currentRalphWorktreeBranch = \"\";\n } else {\n lockable.forEach((el) => {\n if (el)\n el.disabled = false;\n });\n }\n}\nasync function loadPlanFiles(project) {\n const planSel = document.getElementById(\"ralph-plan-select\");\n if (!project) {\n planSel.innerHTML = '';\n return;\n }\n try {\n const data = await deps.api(\"/ralph/plans?project=\" + encodeURIComponent(project), undefined, getStartMachine());\n const plans = data.plans || [];\n if (plans.length === 0) {\n planSel.innerHTML = '';\n } else {\n planSel.innerHTML = plans.map((p) => '\").join(\"\");\n }\n } catch {\n planSel.innerHTML = '';\n }\n planSel.onchange = () => syncIterationsFromPlan(project, planSel.value);\n syncIterationsFromPlan(project, planSel.value);\n}\nasync function syncIterationsFromPlan(project, planFile) {\n if (!project || !planFile)\n return;\n try {\n const tc = await deps.api(\"/ralph/task-count?project=\" + encodeURIComponent(project) + \"&plan=\" + encodeURIComponent(planFile), undefined, getStartMachine());\n if (tc.total > 0) {\n document.getElementById(\"ralph-iterations-input\").value = String(tc.total - tc.done);\n }\n } catch {}\n}\nfunction onIsolationChange() {\n const val = (document.querySelector('input[name=\"ralph-isolation\"]:checked') || {}).value || \"false\";\n const isWorktree = val === \"plan\" || val === \"task\";\n document.getElementById(\"ralph-branch-fields\").style.display = val === \"branch\" ? \"flex\" : \"none\";\n document.getElementById(\"ralph-worktree-fields\").style.display = isWorktree ? \"flex\" : \"none\";\n const project = document.getElementById(\"ralph-project-select\").value;\n if (val === \"branch\")\n loadBranches(project);\n if (isWorktree) {\n loadWorktreeBranches(project);\n updateWorktreePlaceholder(val);\n }\n}\nfunction updateWorktreePlaceholder(mode) {\n const input = document.getElementById(\"ralph-worktree-name\");\n input.placeholder = mode === \"task\" ? \"ralph/1-task-slug (auto per task)\" : \"ralph/plan-my-feature\";\n if (mode === \"task\") {\n input.value = \"\";\n input.disabled = true;\n } else {\n input.disabled = false;\n }\n}\nasync function loadWorktreeBranches(project) {\n const sel = document.getElementById(\"ralph-worktree-base\");\n if (!project) {\n sel.innerHTML = '';\n return;\n }\n try {\n const data = await deps.api(\"/ralph/branches?project=\" + encodeURIComponent(project), undefined, getStartMachine());\n const branches = data.branches || [];\n sel.innerHTML = branches.map((b) => '\").join(\"\");\n } catch {\n sel.innerHTML = '';\n }\n}\nasync function loadBranches(project) {\n const sel = document.getElementById(\"ralph-source-branch\");\n if (!project) {\n sel.innerHTML = '';\n return;\n }\n try {\n const data = await deps.api(\"/ralph/branches?project=\" + encodeURIComponent(project), undefined, getStartMachine());\n const branches = data.branches || [];\n if (branches.length === 0) {\n sel.innerHTML = '';\n } else {\n sel.innerHTML = branches.map((b) => '\").join(\"\");\n const defaultBranch = branches.find((b) => b === \"main\") || branches.find((b) => b === \"master\");\n if (defaultBranch)\n sel.value = defaultBranch;\n }\n } catch {\n sel.innerHTML = '';\n }\n}\nasync function startRalph() {\n const machine = getStartMachine();\n const project = document.getElementById(\"ralph-project-select\").value;\n const iterations = parseInt(document.getElementById(\"ralph-iterations-input\").value) || 5;\n const planFile = document.getElementById(\"ralph-plan-select\").value || undefined;\n const agent = document.getElementById(\"ralph-agent-select\").value;\n const cleanup = document.getElementById(\"ralph-cleanup-toggle\").checked;\n const auditFix = document.getElementById(\"ralph-audit-fix-toggle\").checked;\n if (!project) {\n alert(\"select a project\");\n return;\n }\n if (!planFile) {\n alert(\"select a plan file\");\n return;\n }\n let format = false;\n try {\n const tc = await deps.api(\"/ralph/task-count?project=\" + encodeURIComponent(project) + \"&plan=\" + encodeURIComponent(planFile), undefined, machine);\n if (tc.issues && tc.issues.length > 0) {\n const msg = \"Plan format issues in \" + planFile + `:\n\n` + tc.issues.map((i) => \"• \" + i).join(`\n`) + `\n\nRalph can auto-number them. Continue?`;\n if (!confirm(msg))\n return;\n format = true;\n } else if (tc.total === 0) {\n if (!confirm(\"No tasks found in \" + planFile + \". Ralph will number them automatically. Continue?\"))\n return;\n format = true;\n }\n } catch {}\n const isoVal = (document.querySelector('input[name=\"ralph-isolation\"]:checked') || {}).value || \"false\";\n const worktree = isoVal === \"plan\" || isoVal === \"task\" ? isoVal : false;\n const body = { project, iterations, planFile, agent, format, cleanup, auditFix, worktree };\n if (worktree) {\n const wtName = document.getElementById(\"ralph-worktree-name\").value.trim();\n const wtBase = document.getElementById(\"ralph-worktree-base\").value;\n if (wtName)\n body.worktreeBranch = wtName;\n if (wtBase)\n body.worktreeBase = wtBase;\n }\n if (isoVal === \"branch\") {\n const newBranch = document.getElementById(\"ralph-branch-name\").value.trim();\n const sourceBranch = document.getElementById(\"ralph-source-branch\").value;\n if (!newBranch) {\n alert(\"enter a branch name\");\n return;\n }\n body.newBranch = newBranch;\n body.sourceBranch = sourceBranch;\n }\n try {\n await deps.api(\"/ralph/start\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body)\n }, machine);\n state.currentRalphProject = project;\n state.restartingRalph = false;\n deps.backToSessions();\n } catch (e) {\n alert(\"failed to start: \" + deps.errorMessage(e));\n }\n}\nfunction continueRalph(planFile, agent, cleanup, auditFix, worktreeMode, worktreeBranch) {\n state.currentRalphPlanFile = planFile || \"\";\n state.currentRalphAgent = agent || \"\";\n state.currentRalphCleanup = cleanup;\n state.currentRalphAuditFix = auditFix;\n state.currentRalphWorktreeMode = worktreeMode || \"false\";\n state.currentRalphWorktreeBranch = worktreeBranch || \"\";\n state.restartingRalph = true;\n state.ralphStartMachine = state.currentRalphMachine;\n deps.showView(\"ralph-start\");\n}\nasync function discardRalph() {\n if (!confirm(\"Discard this ralph loop? This removes the log and progress files.\"))\n return;\n try {\n await deps.api(\"/ralph/dismiss\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ project: state.currentRalphProject })\n }, state.currentRalphMachine);\n deps.backToSessions();\n } catch (e) {\n alert(\"failed to discard: \" + deps.errorMessage(e));\n }\n}\nfunction showRalphStart(machineUrl) {\n if (!wpSettings.ralphEnabled)\n return;\n state.ralphStartMachine = machineUrl || \"\";\n state.restartingRalph = false;\n deps.showView(\"ralph-start\");\n}\nvar prevRalphStates = {};\nfunction getRalphNotificationStatus(loop) {\n if (loop.audit)\n return \"running\";\n if (loop.cleanup)\n return \"running\";\n if (loop.active)\n return \"running\";\n if (loop.completed)\n return \"done\";\n if (!loop.active && !loop.completed && loop.finished)\n return \"limit\";\n return \"idle\";\n}\nfunction checkRalphTransitions(loops, mUrl, mName) {\n if (!loops)\n return;\n for (const loop of loops) {\n const key = mUrl + \"|\" + loop.project;\n const prev = prevRalphStates[key];\n const cur = getRalphNotificationStatus(loop);\n prevRalphStates[key] = cur;\n if (prev === \"running\" && (cur === \"done\" || cur === \"idle\" || cur === \"limit\")) {\n haptic([200, 100, 200]);\n }\n }\n}\n\n// public/app-grid.ts\nvar deps2;\nfunction initGridDeps(d) {\n deps2 = d;\n}\nfunction setGridCellLoading(gs, loading) {\n gs._loading = loading;\n const cell = getGridCellElement(gs);\n if (cell)\n cell.classList.toggle(\"grid-loading\", loading);\n}\nfunction beginGridRelayoutTransition() {\n state.gridRelayoutTransitionId += 1;\n const transitionId = state.gridRelayoutTransitionId;\n for (const gs of state.gridSessions)\n setGridCellLoading(gs, true);\n return transitionId;\n}\nfunction isGridRelayoutTransitionCurrent(transitionId) {\n return transitionId === state.gridRelayoutTransitionId;\n}\nfunction endGridRelayoutTransition(transitionId) {\n if (!isGridRelayoutTransitionCurrent(transitionId))\n return;\n requestAnimationFrame(() => {\n if (!isGridRelayoutTransitionCurrent(transitionId))\n return;\n for (const gs of state.gridSessions)\n setGridCellLoading(gs, false);\n });\n}\nfunction cancelGridRelayoutTransition() {\n state.gridRelayoutTransitionId += 1;\n}\nfunction runGridRelayoutTransition(primaryFit) {\n if (!isGridActive())\n return;\n const transitionId = beginGridRelayoutTransition();\n requestAnimationFrame(() => {\n if (!isGridRelayoutTransitionCurrent(transitionId) || !isGridActive())\n return;\n try {\n primaryFit();\n } catch (e) {\n console.warn(\"[grid] primaryFit failed:\", e);\n }\n requestAnimationFrame(() => {\n if (!isGridRelayoutTransitionCurrent(transitionId) || !isGridActive())\n return;\n fitAllGridCells();\n endGridRelayoutTransition(transitionId);\n });\n });\n}\nvar _gridRenderGeneration = 0;\nvar MAX_GRID_CELLS = 6;\nfunction isGridActive() {\n return state.gridSessions.length >= 2;\n}\nfunction gridLayoutClass(count) {\n if (count >= 2 && count <= 6)\n return \"grid-\" + count;\n return \"grid-2\";\n}\nfunction updateGridLayout() {\n const container = document.getElementById(\"desktop-grid-container\");\n if (!isGridActive()) {\n container.className = \"\";\n container.style.display = \"\";\n return;\n }\n container.className = \"active \" + gridLayoutClass(state.gridSessions.length);\n container.style.display = \"\";\n document.getElementById(\"desktop-terminal-container\").style.display = \"none\";\n document.getElementById(\"input-bar\").style.display = \"none\";\n document.getElementById(\"cmd-palette\").classList.remove(\"visible\");\n document.getElementById(\"kb-accessory\").classList.remove(\"visible\");\n}\nfunction createGridCell(gs, idx) {\n const cell = document.createElement(\"div\");\n cell.className = \"grid-cell\" + (idx === state.gridFocusIndex ? \" grid-focused\" : \"\") + (gs._loading ? \" grid-loading\" : \"\");\n cell.dataset.gridIndex = idx;\n cell.innerHTML = '
' + esc(gs.session) + '
×
Loading terminal
';\n cell.addEventListener(\"click\", (e) => {\n if (e.target.classList.contains(\"grid-cell-close\"))\n return;\n const sel = window.getSelection ? window.getSelection() : null;\n if (sel && !sel.isCollapsed)\n return;\n const i = parseInt(cell.dataset.gridIndex, 10);\n setGridFocus(i);\n });\n cell.querySelector(\".grid-cell-close\").addEventListener(\"click\", (e) => {\n e.stopPropagation();\n const i = parseInt(cell.dataset.gridIndex, 10);\n removeFromGrid(i);\n });\n gs._cellElement = cell;\n return cell;\n}\nasync function mountGridController(gs, cell, idx) {\n if (gs.controller)\n return;\n const cached = deps2.loadSnapshot ? deps2.loadSnapshot(gs.machine || \"\", gs.session) : null;\n if (cached)\n cell.classList.add(\"cached-visible\");\n let _gridCachedPending = !!cached;\n const tp = TERM_PRESETS[wpSettings.termFontSize] || TERM_PRESETS.medium;\n gs.controller = deps2.createPtyTerminalController({\n session: gs.session,\n machine: gs.machine || \"\",\n fontSize: Math.max(tp.fontSize - 2, 10),\n scrollback: GRID_TERMINAL_SCROLLBACK,\n cursorBlink: idx === state.gridFocusIndex,\n disableStdin: idx !== state.gridFocusIndex,\n resetPty: gs._resetPty,\n prefillMode: \"viewport\",\n shouldFocus: () => state.gridSessions[state.gridFocusIndex] === gs,\n shouldReconnect: () => state.gridSessions.includes(gs),\n canAcceptInput: () => !!(gs.controller && gs.controller.isConnected && state.gridSessions[state.gridFocusIndex] === gs),\n canSendResize: () => !!(gs.controller && gs.controller.isConnected),\n onOpen: () => {\n gs._displaced = false;\n removeGridCellConflictOverlay(gs);\n },\n onPtyReady: () => {\n if (gs.controller)\n gs.controller.forceRepaint();\n },\n onOutput: () => {\n if (_gridCachedPending) {\n _gridCachedPending = false;\n cell.classList.remove(\"cached-visible\");\n }\n },\n onViewerConflict: () => {\n var r = WP.handleViewerConflict({ displaced: gs._displaced, autoTakeControl: gs._autoTakeControl });\n gs._displaced = r.newState.displaced;\n gs._autoTakeControl = r.newState.autoTakeControl;\n if (r.action === \"auto-take-control\") {\n gs.controller.sendTakeControl();\n } else {\n showGridCellConflictOverlay(gs);\n }\n },\n onControlGranted: () => {\n var s = WP.handleControlGranted({ displaced: gs._displaced, autoTakeControl: gs._autoTakeControl });\n gs._displaced = s.displaced;\n gs._autoTakeControl = s.autoTakeControl;\n removeGridCellConflictOverlay(gs);\n if (state.gridSessions[state.gridFocusIndex] === gs)\n gs.controller.focus();\n },\n onDisconnected: (code, reason) => {\n removeGridCellConflictOverlay(gs);\n if (!state.gridSessions.includes(gs))\n return;\n var action = WP.classifyDisconnect(code, reason || \"\");\n if (action === \"displaced\") {\n var ns = WP.handleDisplaced({ displaced: gs._displaced, autoTakeControl: gs._autoTakeControl });\n gs._displaced = ns.displaced;\n gs._autoTakeControl = ns.autoTakeControl;\n showGridCellConflictOverlay(gs);\n } else {\n gs.controller.scheduleReconnect();\n }\n }\n });\n delete gs._resetPty;\n await gs.controller.mount(cell, { cached });\n gs._needsConnect = true;\n}\nfunction renderGridCells() {\n const container = document.getElementById(\"desktop-grid-container\");\n if (!state.gridResizeHandler) {\n state.gridResizeHandler = () => {\n if (!isGridActive())\n return;\n for (const gs of state.gridSessions) {\n if (gs.controller)\n gs.controller.resizeWithTransition();\n }\n };\n window.addEventListener(\"resize\", state.gridResizeHandler);\n }\n const existingCells = container.querySelectorAll(\".grid-cell\");\n const existingMap = new Map;\n existingCells.forEach((cell) => {\n const idx = parseInt(cell.dataset.gridIndex, 10);\n existingMap.set(idx, cell);\n });\n const newCellSessions = [];\n const mountPromises = [];\n state.gridSessions.forEach((gs, idx) => {\n if (gs._cellElement && gs._cellElement.parentNode === container && gs.controller) {\n gs._cellElement.dataset.gridIndex = idx;\n gs._cellElement.classList.toggle(\"grid-focused\", idx === state.gridFocusIndex);\n } else {\n const cell = createGridCell(gs, idx);\n container.appendChild(cell);\n mountPromises.push(mountGridController(gs, cell, idx));\n newCellSessions.push(gs);\n }\n });\n const activeCellElements = new Set(state.gridSessions.map((gs) => gs._cellElement));\n existingCells.forEach((cell) => {\n if (!activeCellElements.has(cell))\n cell.remove();\n });\n state.gridSessions.forEach((gs) => {\n if (gs._cellElement && gs._cellElement.parentNode === container) {\n container.appendChild(gs._cellElement);\n }\n });\n updateGridLayout();\n const renderGen = ++_gridRenderGeneration;\n if (newCellSessions.length > 0) {\n Promise.all(mountPromises).then(() => {\n if (_gridRenderGeneration !== renderGen)\n return;\n runGridRelayoutTransition(() => {\n fitAllGridCells();\n newCellSessions.forEach((gs) => {\n if (gs._needsConnect) {\n delete gs._needsConnect;\n gs.controller.connect();\n }\n });\n });\n }).catch((err) => console.error(\"[grid] mount failed:\", err));\n } else {\n requestAnimationFrame(() => {\n fitAllGridCells();\n });\n }\n}\nfunction getGridCellElement(gs) {\n if (gs._cellElement)\n return gs._cellElement;\n const idx = state.gridSessions.indexOf(gs);\n if (idx < 0)\n return null;\n return document.querySelector('#desktop-grid-container .grid-cell[data-grid-index=\"' + idx + '\"]');\n}\nfunction takeControlOfCell(gs) {\n if (!gs.controller)\n return;\n if (gs.controller.isConnected) {\n gs.controller.sendTakeControl();\n if (gs._takeControlTimer)\n clearTimeout(gs._takeControlTimer);\n gs._takeControlTimer = setTimeout(() => {\n gs._takeControlTimer = null;\n if (!gs.controller)\n return;\n const cell = getGridCellElement(gs);\n if (!cell || !cell.querySelector(\".viewer-conflict-overlay\"))\n return;\n gs._autoTakeControl = true;\n if (gs.controller.isConnected) {\n gs.controller.reconnect({ takeControl: true });\n } else {\n gs.controller.connect({ takeControl: true });\n }\n }, 3000);\n } else {\n gs._autoTakeControl = true;\n gs.controller.connect({ takeControl: true });\n }\n}\nfunction removeGridCellConflictOverlay(gs) {\n if (gs._takeControlTimer) {\n clearTimeout(gs._takeControlTimer);\n gs._takeControlTimer = null;\n }\n const cell = getGridCellElement(gs);\n if (!cell)\n return;\n cell.querySelectorAll(\".viewer-conflict-overlay\").forEach((el) => el.remove());\n}\nfunction showGridCellConflictOverlay(gs) {\n const cell = getGridCellElement(gs);\n if (!cell)\n return;\n if (gs.controller && gs.controller.hydration)\n gs.controller.hydration.finish();\n removeGridCellConflictOverlay(gs);\n const overlay = deps2.createConflictOverlay(\"Active on another device\", \"Take Control\", (e) => {\n e.stopPropagation();\n takeControlOfCell(gs);\n });\n overlay.dataset.conflictType = \"conflict\";\n cell.appendChild(overlay);\n}\nfunction hasPreservedGrid() {\n return state.preservedGridSessions.length >= 2;\n}\nfunction clearPreservedGrid() {\n state.preservedGridSessions = [];\n state.preservedGridFocusIndex = 0;\n}\nfunction setCurrentSessionFromGridFocus(sessions, focusIndex) {\n if (!sessions.length)\n return;\n const idx = Math.max(0, Math.min(focusIndex, sessions.length - 1));\n const focused = sessions[idx];\n if (!focused)\n return;\n setState({ currentSession: focused.session, currentMachine: focused.machine || \"\" });\n}\nfunction returnToTerminalView() {\n deps2.showView(\"terminal\");\n if (restorePreservedGrid())\n return true;\n if (!state.currentSession)\n return false;\n if (!state.terminalController)\n deps2.initTerminal();\n return true;\n}\nfunction setGridFocus(idx) {\n if (idx < 0 || idx >= state.gridSessions.length)\n return;\n const prev = state.gridFocusIndex;\n state.gridFocusIndex = idx;\n state.gridSessions.forEach((gs, i) => {\n if (!gs.controller || !gs.controller.term)\n return;\n const focused = i === idx;\n gs.controller.term.options.disableStdin = !focused;\n gs.controller.term.options.cursorBlink = focused;\n });\n const cells = document.querySelectorAll(\"#desktop-grid-container .grid-cell\");\n cells.forEach((cell, i) => {\n cell.classList.toggle(\"grid-focused\", i === idx);\n });\n const focusedGs = state.gridSessions[idx];\n if (focusedGs) {\n setState({ currentSession: focusedGs.session, currentMachine: focusedGs.machine || \"\" });\n deps2.renderSidebar();\n if (focusedGs.controller)\n focusedGs.controller.focus();\n }\n}\nfunction suspendGridMode() {\n if (deps2.flushGridSnapshots)\n deps2.flushGridSnapshots();\n const preserved = WP.suspendGridState(state.gridSessions, state.gridFocusIndex);\n state.preservedGridSessions = preserved.sessions;\n state.preservedGridFocusIndex = preserved.focusIndex;\n cancelGridRelayoutTransition();\n if (state.gridResizeHandler) {\n window.removeEventListener(\"resize\", state.gridResizeHandler);\n state.gridResizeHandler = null;\n }\n for (const gs of state.gridSessions) {\n if (gs.controller)\n gs.controller.dispose();\n if (gs._cellElement) {\n gs._cellElement.remove();\n gs._cellElement = null;\n }\n }\n state.gridSessions = [];\n state.gridFocusIndex = 0;\n const container = document.getElementById(\"desktop-grid-container\");\n container.className = \"\";\n container.style.display = \"\";\n container.innerHTML = \"\";\n const dtc = document.getElementById(\"desktop-terminal-container\");\n dtc.style.display = \"none\";\n dtc.innerHTML = \"\";\n state.terminalController = null;\n if (preserved.focusedSession) {\n setState({\n currentSession: preserved.focusedSession.session,\n currentMachine: preserved.focusedSession.machine || \"\"\n });\n }\n}\nfunction restorePreservedGrid() {\n if (!hasPreservedGrid())\n return false;\n const restored = WP.resumeGridState(state.preservedGridSessions, state.preservedGridFocusIndex);\n state.gridSessions = restored.sessions.map((gs) => ({\n session: gs.session,\n machine: gs.machine || \"\",\n controller: null\n }));\n state.gridFocusIndex = restored.focusIndex;\n clearPreservedGrid();\n state.sidebarResizeDone = false;\n setCurrentSessionFromGridFocus(state.gridSessions, state.gridFocusIndex);\n renderGridCells();\n deps2.renderSidebar();\n return true;\n}\nfunction backFromRalph() {\n if (isDesktop() && hasPreservedGrid()) {\n returnToTerminalView();\n return;\n }\n deps2.backToSessions();\n}\nfunction backFromSettings() {\n if (state.viewBeforeSettings === \"terminal\") {\n if (returnToTerminalView())\n return;\n deps2.backToSessions();\n return;\n }\n if (state.viewBeforeSettings === \"sessions\") {\n deps2.backToSessions();\n return;\n }\n deps2.showView(state.viewBeforeSettings || \"sessions\");\n}\nfunction addToGrid(session, machine) {\n if (!(deps2.canUseWasmTerminal ? deps2.canUseWasmTerminal() : isDesktop())) {\n console.warn(\"[grid] WebAssembly unavailable — cannot open grid terminal\");\n return;\n }\n if (typeof window.createIsolatedGhostty !== \"function\") {\n console.error(\"[grid] createIsolatedGhostty unavailable — grid mode disabled to prevent WASM OOB crash. Reload to pick up a newer ghostty-web bundle.\");\n if (typeof window !== \"undefined\" && typeof window.alert === \"function\") {\n window.alert(`Grid mode is disabled in this tab.\n\n` + \"The terminal WASM bundle does not support per-cell isolation, which is required \" + \"to safely show multiple terminals at once. (Older versions of ghostty-web are \" + `affected.)\n\nReload the page to pick up a fresh bundle.`);\n }\n return;\n }\n const targetMachine = machine || \"\";\n if (state.currentView !== \"terminal\" && hasPreservedGrid()) {\n const result = WP.addToGridState(state.preservedGridSessions, session, targetMachine, state.currentSession || \"\", state.currentMachine || \"\");\n if (!result)\n return;\n state.preservedGridSessions = result.sessions;\n state.preservedGridFocusIndex = result.focusIndex;\n setCurrentSessionFromGridFocus(state.preservedGridSessions, state.preservedGridFocusIndex);\n deps2.showView(\"terminal\", true);\n restorePreservedGrid();\n return;\n }\n if (state.gridSessions.length >= MAX_GRID_CELLS)\n return;\n if (state.currentView !== \"terminal\") {\n deps2.showView(\"terminal\", true);\n }\n if (state.sidebarAutoExpanded) {\n const sb = document.getElementById(\"desktop-sidebar\");\n if (sb) {\n sb.style.transition = \"none\";\n sb.classList.add(\"collapsed\");\n sb.offsetHeight;\n sb.style.transition = \"\";\n }\n state.sidebarCollapsed = true;\n state.sidebarAutoExpanded = false;\n }\n state.sidebarResizeDone = false;\n if (state.gridSessions.some((gs2) => gs2.session === session && (gs2.machine || \"\") === (machine || \"\")))\n return;\n const singleTermSession = state.terminalController?.term && state.currentSession ? state.currentSession : null;\n const singleTermMachine = singleTermSession ? state.currentMachine || \"\" : \"\";\n const gs = {\n session,\n machine: machine || \"\",\n controller: null\n };\n state.gridSessions.push(gs);\n if (state.gridSessions.length === 1 && state.currentSession) {\n const alreadyAdded = session === state.currentSession && (machine || \"\") === state.currentMachine;\n if (!alreadyAdded) {\n state.gridSessions.unshift({\n session: state.currentSession,\n machine: state.currentMachine,\n controller: null\n });\n }\n }\n if (singleTermSession) {\n for (const g of state.gridSessions) {\n if (g.session === singleTermSession && (g.machine || \"\") === singleTermMachine) {\n g._resetPty = true;\n }\n }\n }\n if (isGridActive()) {\n deps2.destroyTerminal();\n state.gridFocusIndex = state.gridSessions.length - 1;\n renderGridCells();\n deps2.renderSidebar();\n } else {\n state.gridSessions = [];\n deps2.openSession(session, machine || undefined);\n }\n}\nfunction removeFromGrid(idx) {\n if (idx < 0 || idx >= state.gridSessions.length)\n return;\n state.sidebarResizeDone = false;\n const gs = state.gridSessions[idx];\n if (deps2.saveGridCellSnapshot)\n deps2.saveGridCellSnapshot(gs);\n if (gs.controller)\n gs.controller.dispose();\n if (gs._cellElement) {\n gs._cellElement.remove();\n gs._cellElement = null;\n }\n state.gridSessions.splice(idx, 1);\n if (idx < state.gridFocusIndex) {\n state.gridFocusIndex--;\n } else if (state.gridFocusIndex >= state.gridSessions.length) {\n state.gridFocusIndex = Math.max(0, state.gridSessions.length - 1);\n }\n if (state.gridSessions.length <= 1) {\n exitGridMode();\n } else {\n state.gridSessions.forEach((g, i) => {\n if (g._cellElement) {\n g._cellElement.dataset.gridIndex = i;\n g._cellElement.classList.toggle(\"grid-focused\", i === state.gridFocusIndex);\n }\n });\n updateGridLayout();\n for (const gs2 of state.gridSessions) {\n if (gs2.controller)\n gs2.controller.resizeWithTransition();\n }\n setGridFocus(state.gridFocusIndex);\n }\n deps2.renderSidebar();\n}\nfunction exitGridMode(skipRestore) {\n cancelGridRelayoutTransition();\n if (state.gridResizeHandler) {\n window.removeEventListener(\"resize\", state.gridResizeHandler);\n state.gridResizeHandler = null;\n }\n const remaining = state.gridSessions.length >= 1 ? state.gridSessions[0] : null;\n const restoreSession = remaining ? remaining.session : state.currentSession;\n const restoreMachine = remaining ? remaining.machine || \"\" : state.currentMachine;\n for (const gs of state.gridSessions) {\n if (gs._cellElement) {\n gs._cellElement.remove();\n gs._cellElement = null;\n }\n if (gs.controller)\n gs.controller.dispose();\n }\n state.gridSessions = [];\n state.gridFocusIndex = 0;\n clearPreservedGrid();\n const container = document.getElementById(\"desktop-grid-container\");\n container.className = \"\";\n container.style.display = \"\";\n container.innerHTML = \"\";\n const dtc = document.getElementById(\"desktop-terminal-container\");\n dtc.style.display = \"none\";\n dtc.innerHTML = \"\";\n state.terminalController = null;\n if (restoreSession) {\n setState({ currentSession: restoreSession, currentMachine: restoreMachine });\n }\n if (!skipRestore && restoreSession) {\n deps2.initTerminal();\n deps2.renderSidebar();\n }\n}\nfunction fitAllGridCells() {\n const container = document.getElementById(\"desktop-grid-container\");\n if (container)\n container.offsetWidth;\n for (const gs of state.gridSessions) {\n if (gs.controller) {\n try {\n gs.controller.resize();\n } catch (e) {\n console.warn(\"[grid] cell resize failed:\", e);\n }\n }\n }\n}\nfunction hideGridCellsForTransition() {\n if (isGridActive()) {\n for (const gs of state.gridSessions) {\n const el = gs._cellElement;\n if (el)\n el.classList.add(\"transitioning\");\n }\n } else {\n const el = document.getElementById(\"desktop-terminal-container\");\n if (el)\n el.classList.add(\"transitioning\");\n }\n}\nfunction revealGridCellsWithoutResize() {\n if (isGridActive()) {\n for (const gs of state.gridSessions) {\n const el = gs._cellElement;\n if (el)\n el.classList.remove(\"transitioning\");\n }\n } else {\n const el = document.getElementById(\"desktop-terminal-container\");\n if (el)\n el.classList.remove(\"transitioning\");\n }\n}\nfunction scheduleGridStabilizedFit() {\n if (!isGridActive())\n return;\n for (const gs of state.gridSessions) {\n if (gs.controller)\n gs.controller.resizeWithTransition();\n }\n}\nfunction isSessionInGrid(session, machine) {\n const sessions = isGridActive() ? state.gridSessions : state.preservedGridSessions;\n return sessions.some((gs) => gs.session === session && (gs.machine || \"\") === (machine || \"\"));\n}\nfunction toggleGrid(session, machine, event) {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n if (!isGridActive() && hasPreservedGrid() && state.currentView !== \"terminal\") {\n const idx = state.preservedGridSessions.findIndex((gs) => gs.session === session && (gs.machine || \"\") === (machine || \"\"));\n if (idx !== -1) {\n const result = WP.removeFromGridState(state.preservedGridSessions, idx, state.preservedGridFocusIndex);\n if (result.exitGrid) {\n state.preservedGridSessions = [];\n state.preservedGridFocusIndex = 0;\n if (result.restoreSession) {\n setState({\n currentSession: result.restoreSession.session,\n currentMachine: result.restoreSession.machine || \"\"\n });\n }\n } else {\n state.preservedGridSessions = result.sessions;\n state.preservedGridFocusIndex = result.focusIndex;\n setCurrentSessionFromGridFocus(state.preservedGridSessions, state.preservedGridFocusIndex);\n }\n deps2.renderSidebar();\n return;\n }\n }\n if (isSessionInGrid(session, machine)) {\n const idx = state.gridSessions.findIndex((gs) => gs.session === session && (gs.machine || \"\") === (machine || \"\"));\n if (idx !== -1)\n removeFromGrid(idx);\n } else {\n addToGrid(session, machine);\n }\n}\n\n// public/app-touch.ts\nfunction setupTouchScrollHandler(container, term, sendInput, canAcceptInput) {\n let lastTouchY = 0;\n let scrollAccum = 0;\n let velocityY = 0;\n let momentumId = null;\n let tracking = false;\n const SCROLL_THRESHOLD = 28;\n const FRICTION = 0.95;\n const MIN_VELOCITY = 0.5;\n const MAX_LINES_PER_EVENT = 5;\n const velocitySamples = [];\n const MAX_SAMPLES = 5;\n const encoder = new TextEncoder;\n const LONGPRESS_MS = 500;\n const LONGPRESS_MOVE_TOLERANCE = 10;\n let longPressTimer = null;\n let selecting = false;\n let selStartX = 0, selStartY = 0;\n let selAnchorRow = -1, selAnchorCol = -1;\n let selEndRow = -1, selEndCol = -1;\n let selOverlay = null;\n function touchToCell(clientX, clientY) {\n const canvas = container.querySelector(\"canvas\");\n if (!canvas)\n return null;\n const rect = canvas.getBoundingClientRect();\n const x = clientX - rect.left;\n const y = clientY - rect.top;\n const cellW = rect.width / term.cols;\n const cellH = rect.height / term.rows;\n return {\n col: Math.max(0, Math.min(term.cols - 1, Math.floor(x / cellW))),\n row: Math.max(0, Math.min(term.rows - 1, Math.floor(y / cellH)))\n };\n }\n function getSelectedText() {\n if (selAnchorRow < 0 || selEndRow < 0)\n return \"\";\n const buf = term.buffer.active;\n const viewportY = Math.max(0, buf.viewportY || 0);\n let r0 = selAnchorRow, c0 = selAnchorCol, r1 = selEndRow, c1 = selEndCol;\n if (r0 > r1 || r0 === r1 && c0 > c1) {\n [r0, c0, r1, c1] = [r1, c1, r0, c0];\n }\n const lines = [];\n for (let r = r0;r <= r1; r++) {\n const lineIndex = Math.max(0, viewportY + r);\n const line = buf.getLine(lineIndex);\n if (!line)\n continue;\n const start = r === r0 ? c0 : 0;\n const end = r === r1 ? c1 + 1 : term.cols;\n let text = \"\";\n for (let c = start;c < end; c++) {\n const cell = line.getCell(c);\n text += cell ? cell.getChars() || \" \" : \" \";\n }\n lines.push(text.trimEnd());\n }\n return lines.join(`\n`);\n }\n let selCopyBtn = null;\n function showSelectionOverlay() {\n if (!selOverlay) {\n selOverlay = document.createElement(\"div\");\n selOverlay.style.cssText = \"position:absolute;background:rgba(0,255,65,0.18);pointer-events:none;z-index:10;border-radius:2px;\";\n container.appendChild(selOverlay);\n }\n const canvas = container.querySelector(\"canvas\");\n if (!canvas)\n return;\n const rect = canvas.getBoundingClientRect();\n const cRect = container.getBoundingClientRect();\n const cellW = rect.width / term.cols;\n const cellH = rect.height / term.rows;\n let r0 = selAnchorRow, c0 = selAnchorCol, r1 = selEndRow, c1 = selEndCol;\n if (r0 > r1 || r0 === r1 && c0 > c1) {\n [r0, c0, r1, c1] = [r1, c1, r0, c0];\n }\n const ox = rect.left - cRect.left;\n const oy = rect.top - cRect.top;\n if (r0 === r1) {\n selOverlay.style.left = ox + c0 * cellW + \"px\";\n selOverlay.style.top = oy + r0 * cellH + \"px\";\n selOverlay.style.width = (c1 - c0 + 1) * cellW + \"px\";\n selOverlay.style.height = cellH + \"px\";\n } else {\n selOverlay.style.left = ox + \"px\";\n selOverlay.style.top = oy + r0 * cellH + \"px\";\n selOverlay.style.width = term.cols * cellW + \"px\";\n selOverlay.style.height = (r1 - r0 + 1) * cellH + \"px\";\n }\n }\n function showCopyButton() {\n if (selCopyBtn)\n selCopyBtn.remove();\n const canvas = container.querySelector(\"canvas\");\n if (!canvas)\n return;\n const rect = canvas.getBoundingClientRect();\n const cRect = container.getBoundingClientRect();\n const cellH = rect.height / term.rows;\n const r0 = Math.min(selAnchorRow, selEndRow);\n const oy = rect.top - cRect.top;\n selCopyBtn = document.createElement(\"button\");\n selCopyBtn.textContent = \"Copy\";\n selCopyBtn.className = \"sel-copy-btn\";\n const btnTop = oy + r0 * cellH - 32;\n selCopyBtn.style.cssText = \"position:absolute;z-index:11;left:50%;transform:translateX(-50%);top:\" + Math.max(0, btnTop) + \"px;background:var(--accent);color:var(--bg-base);border:none;border-radius:6px;padding:4px 14px;font-size:12px;font-weight:700;font-family:inherit;cursor:pointer;pointer-events:auto;box-shadow:0 2px 8px rgba(0,0,0,0.5);\";\n selCopyBtn.addEventListener(\"touchstart\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n const text = getSelectedText();\n if (text && navigator.clipboard) {\n navigator.clipboard.writeText(text).then(() => {\n haptic([10, 30, 10]);\n if (selCopyBtn)\n selCopyBtn.textContent = \"Copied!\";\n setTimeout(() => clearSelection(), 600);\n }).catch(() => {\n clearSelection();\n });\n }\n }, { passive: false });\n selCopyBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation();\n });\n container.appendChild(selCopyBtn);\n }\n function clearSelection() {\n selecting = false;\n selAnchorRow = selAnchorCol = selEndRow = selEndCol = -1;\n if (selOverlay) {\n selOverlay.remove();\n selOverlay = null;\n }\n if (selCopyBtn) {\n selCopyBtn.remove();\n selCopyBtn = null;\n }\n }\n function cancelLongPress() {\n if (longPressTimer !== null) {\n clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n }\n function sendScroll(deltaY) {\n let hasMouse = false;\n try {\n hasMouse = term.getMode(1000) || term.getMode(1002) || term.getMode(1003);\n } catch {}\n scrollAccum += deltaY;\n const lines = Math.trunc(scrollAccum / SCROLL_THRESHOLD);\n if (lines === 0)\n return;\n scrollAccum -= lines * SCROLL_THRESHOLD;\n if (hasMouse) {\n const btn = lines > 0 ? 65 : 64;\n const seq = encoder.encode(`\\x1B[<${btn};1;1M`);\n const count = Math.min(Math.abs(lines), MAX_LINES_PER_EVENT);\n for (let i = 0;i < count; i++) {\n if (canAcceptInput())\n sendInput(seq);\n }\n } else {\n term.scrollLines(lines);\n }\n }\n function cancelMomentum() {\n if (momentumId !== null) {\n cancelAnimationFrame(momentumId);\n momentumId = null;\n }\n }\n function computeVelocity() {\n if (velocitySamples.length < 2)\n return 0;\n let totalV = 0, totalW = 0;\n for (let i = 1;i < velocitySamples.length; i++) {\n const dt = velocitySamples[i].t - velocitySamples[i - 1].t;\n if (dt <= 0)\n continue;\n const v = (velocitySamples[i].y - velocitySamples[i - 1].y) / dt;\n const w = i;\n totalV += v * w;\n totalW += w;\n }\n return totalW > 0 ? totalV / totalW : 0;\n }\n function momentumTick() {\n velocityY *= FRICTION;\n if (Math.abs(velocityY) < MIN_VELOCITY) {\n momentumId = null;\n return;\n }\n sendScroll(velocityY * 16);\n momentumId = requestAnimationFrame(momentumTick);\n }\n function onTouchStart(e) {\n if (e.touches.length !== 1)\n return;\n const target = e.target;\n const isKbBtn = target.id === \"kb-open-btn\" || target.closest?.(\"#kb-open-btn\");\n if (!isKbBtn) {\n const proxy = document.getElementById(\"mobile-kb-proxy\");\n if (proxy && document.activeElement === proxy)\n proxy.blur();\n }\n cancelMomentum();\n clearSelection();\n tracking = true;\n const touch = e.touches[0];\n lastTouchY = touch.clientY;\n selStartX = touch.clientX;\n selStartY = touch.clientY;\n scrollAccum = 0;\n velocitySamples.length = 0;\n velocitySamples.push({ y: touch.clientY, t: performance.now() });\n cancelLongPress();\n longPressTimer = setTimeout(() => {\n longPressTimer = null;\n const cell = touchToCell(selStartX, selStartY);\n if (!cell)\n return;\n selecting = true;\n tracking = false;\n selAnchorRow = selEndRow = cell.row;\n selAnchorCol = selEndCol = cell.col;\n showSelectionOverlay();\n haptic(30);\n }, LONGPRESS_MS);\n }\n function onTouchMove(e) {\n if (e.touches.length !== 1)\n return;\n const touch = e.touches[0];\n if (selecting) {\n e.preventDefault();\n const cell = touchToCell(touch.clientX, touch.clientY);\n if (!cell)\n return;\n if (cell.row === selAnchorRow) {\n selEndRow = cell.row;\n selEndCol = cell.col;\n } else {\n selEndRow = cell.row;\n selEndCol = cell.row > selAnchorRow ? term.cols - 1 : 0;\n }\n showSelectionOverlay();\n return;\n }\n if (!tracking)\n return;\n const dx = touch.clientX - selStartX;\n const dy = touch.clientY - selStartY;\n if (Math.sqrt(dx * dx + dy * dy) > LONGPRESS_MOVE_TOLERANCE) {\n cancelLongPress();\n }\n e.preventDefault();\n const deltaY = lastTouchY - touch.clientY;\n lastTouchY = touch.clientY;\n velocitySamples.push({ y: touch.clientY, t: performance.now() });\n if (velocitySamples.length > MAX_SAMPLES)\n velocitySamples.shift();\n sendScroll(deltaY);\n }\n function onTouchEnd() {\n cancelLongPress();\n if (selecting) {\n showCopyButton();\n selecting = false;\n return;\n }\n if (!tracking)\n return;\n tracking = false;\n velocityY = -computeVelocity();\n if (Math.abs(velocityY) > MIN_VELOCITY) {\n momentumId = requestAnimationFrame(momentumTick);\n }\n }\n container.addEventListener(\"touchstart\", onTouchStart, { passive: true });\n container.addEventListener(\"touchmove\", onTouchMove, { passive: false });\n container.addEventListener(\"touchend\", onTouchEnd, { passive: true });\n container.addEventListener(\"touchcancel\", onTouchEnd, { passive: true });\n return function cleanup() {\n cancelMomentum();\n cancelLongPress();\n clearSelection();\n container.removeEventListener(\"touchstart\", onTouchStart);\n container.removeEventListener(\"touchmove\", onTouchMove);\n container.removeEventListener(\"touchend\", onTouchEnd);\n container.removeEventListener(\"touchcancel\", onTouchEnd);\n };\n}\n\n// public/app.ts\nfunction canUseWasmTerminal() {\n return !window.wasmFailed;\n}\nvar wpMetrics = {\n latencySamples: [],\n maxLatencySamples: 200,\n reconnectCount: 0,\n sendFailCount: 0,\n sendCount: 0,\n wsMessagesReceived: 0,\n sessionOpenedAt: 0,\n lastUpdateAt: 0,\n recordLatency(ms) {\n this.latencySamples.push(ms);\n if (this.latencySamples.length > this.maxLatencySamples)\n this.latencySamples.shift();\n this.lastUpdateAt = Date.now();\n },\n percentile(p) {\n const s = this.latencySamples.slice().sort((a, b) => a - b);\n if (!s.length)\n return 0;\n const i = Math.ceil(s.length * p / 100) - 1;\n return s[Math.max(0, i)];\n },\n avg() {\n if (!this.latencySamples.length)\n return 0;\n return this.latencySamples.reduce((a, b) => a + b, 0) / this.latencySamples.length;\n },\n reset() {\n this.latencySamples = [];\n this.reconnectCount = 0;\n this.sendFailCount = 0;\n this.sendCount = 0;\n this.wsMessagesReceived = 0;\n this.sessionOpenedAt = Date.now();\n this.lastUpdateAt = 0;\n }\n};\nvar __wfTraceEnabled = (() => {\n try {\n return localStorage.getItem(\"wolfpackDebug\") === \"1\";\n } catch {\n return false;\n }\n})();\nvar __wfTraceMaxEvents = 5000;\nif (__wfTraceEnabled)\n window.__wfTrace = window.__wfTrace || {};\nfunction __wfTraceKey(session, machine) {\n return (session || \"?\") + \"@\" + (machine || \"\");\n}\nfunction __wfTraceStart(session, machine, extra) {\n if (!__wfTraceEnabled)\n return null;\n const key = __wfTraceKey(session, machine);\n const trace = {\n _meta: {\n session,\n machine: machine || \"\",\n startWall: Date.now(),\n startPerf: performance.now(),\n ...extra || {}\n },\n events: [],\n _rafCount: 0,\n _rafActive: false\n };\n window.__wfTrace[key] = trace;\n return trace;\n}\nfunction __wfTraceGet(session, machine) {\n if (!__wfTraceEnabled)\n return null;\n const key = __wfTraceKey(session, machine);\n return window.__wfTrace[key];\n}\nfunction __wfTraceEvent(trace, kind, fields) {\n if (!trace)\n return;\n if (trace.events.length >= __wfTraceMaxEvents)\n return;\n trace.events.push({\n t: +(performance.now() - trace._meta.startPerf).toFixed(3),\n kind,\n ...fields || {}\n });\n}\nfunction __wfTraceRafStart(trace) {\n if (!trace || trace._rafActive)\n return;\n trace._rafActive = true;\n function tick() {\n if (!trace._rafActive)\n return;\n trace._rafCount++;\n __wfTraceEvent(trace, \"raf\", { n: trace._rafCount });\n requestAnimationFrame(tick);\n }\n requestAnimationFrame(tick);\n}\nfunction __wfTraceRafStop(trace) {\n if (!trace)\n return;\n trace._rafActive = false;\n}\nif (__wfTraceEnabled)\n window.__wf_dumpTrace = function(sessionFilter) {\n const all = window.__wfTrace || {};\n const keys = Object.keys(all).filter((k) => !sessionFilter || k.indexOf(sessionFilter) >= 0);\n for (const key of keys) {\n const trace = all[key];\n const ev = trace.events;\n const meta = trace._meta;\n const sumByKind = {};\n let prefillBytes = 0, replayBytes = 0, prefillFrames = 0, replayFrames = 0;\n let firstPrefillT = -1, prefillDoneT = -1, firstReplayT = -1, hydratedT = -1;\n for (const e of ev) {\n sumByKind[e.kind] = (sumByKind[e.kind] || 0) + 1;\n if (e.kind === \"ws.binary\") {\n if (e.bucket === \"prefill\") {\n prefillBytes += e.size;\n prefillFrames++;\n if (firstPrefillT < 0)\n firstPrefillT = e.t;\n } else {\n replayBytes += e.size;\n replayFrames++;\n if (firstReplayT < 0)\n firstReplayT = e.t;\n }\n }\n if (e.kind === \"prefill_done\")\n prefillDoneT = e.t;\n if (e.kind === \"hydration.finish\")\n hydratedT = e.t;\n }\n console.group(\"[wf-trace] \" + key);\n console.log(\"meta:\", meta);\n console.log(\"counts:\", sumByKind);\n console.log(\"prefill: \" + prefillFrames + \" frames, \" + prefillBytes + \" bytes, first @ \" + firstPrefillT + \"ms, prefill_done @ \" + prefillDoneT + \"ms\");\n console.log(\"replay (post-prefill_done): \" + replayFrames + \" frames, \" + replayBytes + \" bytes, first @ \" + firstReplayT + \"ms\");\n console.log(\"hydrated @ \" + hydratedT + \"ms; rAFs during attach: \" + trace._rafCount);\n console.log(\"events:\", ev);\n console.groupEnd();\n }\n return all;\n };\nif (__wfTraceEnabled)\n window.__wf_clearTrace = function() {\n window.__wfTrace = {};\n };\nvar debugPanelTimer = null;\nfunction toggleDebugPanel() {\n const panel = document.getElementById(\"debug-panel\");\n if (!panel)\n return;\n if (wpSettings.debugPanel) {\n panel.style.display = \"block\";\n renderDebugPanel();\n if (!debugPanelTimer)\n debugPanelTimer = setInterval(renderDebugPanel, 1000);\n } else {\n panel.style.display = \"none\";\n if (debugPanelTimer) {\n clearInterval(debugPanelTimer);\n debugPanelTimer = null;\n }\n }\n}\nfunction renderDebugPanel() {\n if (!wpSettings.debugPanel)\n return;\n const fmt = (v) => v > 0 ? v.toFixed(2) + \"ms\" : \"—\";\n const el = (id) => document.getElementById(id);\n const p50 = el(\"dbg-p50\");\n if (p50)\n p50.textContent = fmt(wpMetrics.percentile(50));\n const p95 = el(\"dbg-p95\");\n if (p95)\n p95.textContent = fmt(wpMetrics.percentile(95));\n const avg = el(\"dbg-avg\");\n if (avg)\n avg.textContent = fmt(wpMetrics.avg());\n const samples = el(\"dbg-samples\");\n if (samples)\n samples.textContent = wpMetrics.latencySamples.length;\n const wsMsgs = el(\"dbg-ws-msgs\");\n if (wsMsgs)\n wsMsgs.textContent = wpMetrics.wsMessagesReceived;\n const reconnects = el(\"dbg-reconnects\");\n if (reconnects)\n reconnects.textContent = wpMetrics.reconnectCount;\n const sends = el(\"dbg-sends\");\n if (sends)\n sends.textContent = wpMetrics.sendCount;\n const fails = el(\"dbg-send-fails\");\n if (fails) {\n fails.textContent = wpMetrics.sendFailCount;\n fails.style.color = wpMetrics.sendFailCount > 0 ? \"#ff4444\" : \"#00ff41\";\n }\n const uptime = el(\"dbg-uptime\");\n if (uptime) {\n if (wpMetrics.sessionOpenedAt > 0) {\n const sec = Math.floor((Date.now() - wpMetrics.sessionOpenedAt) / 1000);\n const m = Math.floor(sec / 60), s = sec % 60;\n uptime.textContent = m > 0 ? m + \"m \" + s + \"s\" : s + \"s\";\n } else {\n uptime.textContent = \"—\";\n }\n }\n}\nfunction saveQuickCmds() {\n localStorage.setItem(QC_STORAGE_KEY, JSON.stringify(state.quickCmds));\n}\nfunction renderCmdPalette() {\n const el = document.getElementById(\"cmd-palette\");\n if (!el)\n return;\n if (state.quickCmds.length === 0) {\n el.classList.remove(\"visible\");\n el.innerHTML = \"\";\n return;\n }\n el.innerHTML = state.quickCmds.map((c, i) => ``).join(\"\");\n el.classList.toggle(\"visible\", state.kbAccessoryOpen);\n}\nfunction sendQuickCmd(index) {\n const cmd = state.quickCmds[index];\n if (!cmd || !state.currentSession)\n return;\n haptic([30]);\n wpMetrics.sendCount++;\n if (!_sendTerminalInput(_textEncoder.encode(cmd.cmd + \"\\r\"))) {\n wpMetrics.sendFailCount++;\n }\n}\nfunction renderQuickCmdSettings() {\n const list = document.getElementById(\"quick-cmds-list\");\n if (!list)\n return;\n list.innerHTML = state.quickCmds.map((c, i) => `\n
\n ${esc(c.label)}\n ${esc(c.cmd)}\n ${i > 0 ? `` : ''}\n ${i < state.quickCmds.length - 1 ? `` : ''}\n \n \n
\n `).join(\"\");\n}\nfunction addQuickCmd() {\n const label = prompt(\"Label (shown on chip):\");\n if (!label || !label.trim())\n return;\n const cmd = prompt(\"Command (sent to terminal):\");\n if (!cmd || !cmd.trim())\n return;\n state.quickCmds.push({ label: label.trim(), cmd: cmd.trim() });\n saveQuickCmds();\n renderQuickCmdSettings();\n renderCmdPalette();\n}\nfunction editQuickCmd(index) {\n const c = state.quickCmds[index];\n if (!c)\n return;\n const label = prompt(\"Label:\", c.label);\n if (!label || !label.trim())\n return;\n const cmd = prompt(\"Command:\", c.cmd);\n if (!cmd || !cmd.trim())\n return;\n state.quickCmds[index] = { label: label.trim(), cmd: cmd.trim() };\n saveQuickCmds();\n renderQuickCmdSettings();\n renderCmdPalette();\n}\nfunction deleteQuickCmd(index) {\n state.quickCmds.splice(index, 1);\n saveQuickCmds();\n renderQuickCmdSettings();\n renderCmdPalette();\n}\nfunction moveQuickCmd(index, direction) {\n const target = index + direction;\n if (target < 0 || target >= state.quickCmds.length)\n return;\n const tmp = state.quickCmds[index];\n state.quickCmds[index] = state.quickCmds[target];\n state.quickCmds[target] = tmp;\n saveQuickCmds();\n renderQuickCmdSettings();\n renderCmdPalette();\n}\nasync function showGitStatus() {\n if (!state.currentSession)\n return;\n haptic([30]);\n const overlay = document.getElementById(\"git-status-overlay\");\n overlay.innerHTML = \"
loading...
\";\n overlay.classList.add(\"visible\");\n try {\n const data = await api(\"/git-status?session=\" + encodeURIComponent(state.currentSession), {}, state.currentMachine);\n overlay.innerHTML = `
${esc(data.status || \"(clean)\")}
tap to dismiss
`;\n } catch (e) {\n overlay.innerHTML = `
${esc(errorMessage(e))}
tap to dismiss
`;\n }\n}\nfunction dismissGitStatus() {\n document.getElementById(\"git-status-overlay\").classList.remove(\"visible\");\n}\nasync function copySessionToClipboard() {\n if (!state.currentSession)\n return;\n haptic([20]);\n const overlay = document.getElementById(\"git-status-overlay\");\n overlay.innerHTML = \"
copying...
\";\n overlay.classList.add(\"visible\");\n try {\n const path = \"/api/copy-text?session=\" + encodeURIComponent(state.currentSession);\n const base = (state.currentMachine || \"\").replace(/\\/$/, \"\");\n const headers = {};\n const jwt = localStorage.getItem(\"wpJwt\");\n if (jwt)\n headers[\"Authorization\"] = \"Bearer \" + jwt;\n const r = await fetch(base + path, { headers });\n if (!r.ok)\n throw new Error(\"HTTP \" + r.status);\n const text = await r.text();\n await navigator.clipboard.writeText(text);\n overlay.innerHTML = `
copied ${text.length} chars
tap to dismiss
`;\n } catch (e) {\n overlay.innerHTML = `
copy failed: ${esc(errorMessage(e))}
tap to dismiss
`;\n }\n}\nfunction sessionKey(machine, name) {\n return (machine || \"\") + \"|\" + name;\n}\nfunction saveRecents() {\n localStorage.setItem(RECENTS_STORAGE_KEY, JSON.stringify(state.sessionRecents));\n}\nfunction recordRecent(machine, name) {\n const key = sessionKey(machine, name);\n state.sessionRecents = state.sessionRecents.filter((r) => r.key !== key);\n state.sessionRecents.unshift({ key, name, machine: machine || \"\", ts: Date.now() });\n if (state.sessionRecents.length > MAX_RECENTS)\n state.sessionRecents.length = MAX_RECENTS;\n saveRecents();\n}\nvar RECONNECT_BUDGET_MS = 2 * 60 * 1000;\nvar RECONNECT_BASE_DELAY_MS = 500;\nvar RECONNECT_MAX_DELAY_MS = 5000;\nfunction createReconnector(opts = {}) {\n let _timer = null;\n let _delay = RECONNECT_BASE_DELAY_MS;\n let _startedAt = 0;\n let _blocked = false;\n function schedule(connectFn) {\n if (_timer)\n return;\n if (_blocked)\n return;\n if (opts.shouldReconnect && !opts.shouldReconnect())\n return;\n const now = Date.now();\n if (!_startedAt)\n _startedAt = now;\n const elapsed = now - _startedAt;\n const remaining = RECONNECT_BUDGET_MS - elapsed;\n if (remaining <= 0) {\n _blocked = true;\n if (opts.onExhausted)\n opts.onExhausted();\n return;\n }\n if (opts.onReconnecting)\n opts.onReconnecting();\n const jitterMs = Math.floor(Math.random() * 200);\n const delayMs = Math.min(_delay + jitterMs, RECONNECT_MAX_DELAY_MS, remaining);\n _timer = setTimeout(() => {\n _timer = null;\n if (opts.shouldReconnect && !opts.shouldReconnect())\n return;\n connectFn();\n }, delayMs);\n _delay = Math.min(Math.floor(_delay * 1.8), RECONNECT_MAX_DELAY_MS);\n }\n function cancel() {\n if (_timer) {\n clearTimeout(_timer);\n _timer = null;\n }\n }\n function reset() {\n _blocked = false;\n _startedAt = 0;\n _delay = RECONNECT_BASE_DELAY_MS;\n }\n function block() {\n _blocked = true;\n }\n function connected() {\n const wasReconnecting = _startedAt > 0;\n _delay = RECONNECT_BASE_DELAY_MS;\n _startedAt = 0;\n _blocked = false;\n return wasReconnecting;\n }\n return {\n schedule,\n cancel,\n reset,\n block,\n connected,\n get isBlocked() {\n return _blocked;\n },\n get pending() {\n return !!_timer;\n }\n };\n}\nasync function createTerminalInstance({ fontSize, scrollback, cursorBlink = true, disableStdin = false, sendInput, sendMessage, canAcceptInput, canSendResize, onWheelScroll = null, alwaysForwardWheel = false }) {\n const shouldSendResize = canSendResize || canAcceptInput;\n const tp = TERM_PRESETS[wpSettings.termFontSize] || TERM_PRESETS.medium;\n const termFontFamily = wpSettings.termFont === \"alt\" ? '\"JetBrains Mono\", \"Fira Code\", \"Source Code Pro\", \"Cascadia Code\", monospace' : '\"SF Mono\", \"Menlo\", \"Consolas\", \"DejaVu Sans Mono\", \"Liberation Mono\", monospace';\n let isolatedGhostty = null;\n if (typeof window.createIsolatedGhostty === \"function\") {\n try {\n isolatedGhostty = await window.createIsolatedGhostty();\n } catch (e) {\n console.error(\"[wf] createIsolatedGhostty failed, falling back to shared singleton (grid mode will be disabled):\", e);\n }\n } else {\n console.error(\"[wf] createIsolatedGhostty is not available — falling back to shared singleton (grid mode will be disabled). This usually means the ghostty-web bundle is out of date.\");\n }\n const term = new Terminal({\n cursorBlink,\n disableStdin,\n macOptionClickForcesSelection: true,\n fontSize: fontSize != null ? fontSize : tp.fontSize,\n lineHeight: tp.lineHeight,\n fontFamily: termFontFamily,\n ...isolatedGhostty ? { ghostty: isolatedGhostty } : {},\n theme: {\n background: \"#0a0a0a\",\n foreground: \"#e0e0e0\",\n cursor: \"#e0e0e0\",\n selectionBackground: \"rgba(255,255,255,0.2)\"\n },\n scrollback\n });\n const fitAddon = new FitAddon;\n term.loadAddon(fitAddon);\n fitAddon.proposeDimensions = function() {\n const t = this._terminal;\n if (!t?.element)\n return;\n const r = t.renderer;\n if (!r || typeof r.getMetrics !== \"function\")\n return;\n const m = r.getMetrics();\n if (!m || m.width === 0 || m.height === 0)\n return;\n const el = t.element;\n if (typeof el.clientWidth === \"undefined\")\n return;\n const cs = window.getComputedStyle(el);\n const pT = parseInt(cs.paddingTop) || 0;\n const pB = parseInt(cs.paddingBottom) || 0;\n const pL = parseInt(cs.paddingLeft) || 0;\n const pR = parseInt(cs.paddingRight) || 0;\n const { clientWidth: w, clientHeight: h } = el;\n if (w === 0 || h === 0)\n return;\n return {\n cols: Math.max(1, Math.floor((w - pL - pR) / m.width)),\n rows: Math.max(1, Math.floor((h - pT - pB) / m.height))\n };\n };\n term.attachCustomKeyEventHandler((e) => {\n if (WP.shouldInterceptCopy(e, term.hasSelection())) {\n navigator.clipboard.writeText(term.getSelection()).catch((e2) => {\n console.debug(\"[clipboard] copy failed:\", e2);\n });\n return true;\n }\n return false;\n });\n let _scrollAccum = 0;\n const SCROLL_THRESHOLD = 60;\n term.attachCustomWheelEventHandler((ev) => {\n if (onWheelScroll)\n onWheelScroll(ev);\n if (!alwaysForwardWheel) {\n try {\n const hasMouse = term.getMode(1000) || term.getMode(1002) || term.getMode(1003);\n if (!hasMouse)\n return false;\n } catch {\n return false;\n }\n }\n _scrollAccum += ev.deltaY;\n const lines = Math.trunc(_scrollAccum / SCROLL_THRESHOLD);\n if (lines === 0)\n return true;\n _scrollAccum -= lines * SCROLL_THRESHOLD;\n const btn = lines > 0 ? 65 : 64;\n const seq = `\\x1B[<${btn};1;1M`;\n const encoded = new TextEncoder().encode(seq);\n const count = Math.min(Math.abs(lines), 5);\n for (let i = 0;i < count; i++) {\n if (canAcceptInput())\n sendInput(encoded);\n }\n return true;\n });\n term.onData((data) => {\n if (canAcceptInput())\n sendInput(new TextEncoder().encode(data));\n });\n if (term.onBinary) {\n term.onBinary((data) => {\n if (canAcceptInput()) {\n const buf = new Uint8Array(data.length);\n for (let i = 0;i < data.length; i++)\n buf[i] = data.charCodeAt(i) & 255;\n sendInput(buf);\n }\n });\n }\n let _termResizeTimer = null;\n term.onResize(({ cols, rows }) => {\n if (!shouldSendResize())\n return;\n if (_termResizeTimer)\n clearTimeout(_termResizeTimer);\n _termResizeTimer = setTimeout(() => {\n _termResizeTimer = null;\n if (shouldSendResize())\n sendMessage(JSON.stringify({ type: \"resize\", cols, rows }));\n }, 50);\n });\n return { term, fitAddon };\n}\nvar DESKTOP_INITIAL_PREFILL_TIMEOUT_MS = 1000;\nfunction createInitialHydrationController(opts) {\n let _pending = false;\n let _fallbackTimer = null;\n let _settleTimer = null;\n let _startedAt = 0;\n let _lastDataAt = 0;\n const timeoutMs = opts.timeoutMs || DESKTOP_INITIAL_PREFILL_TIMEOUT_MS;\n const settleMs = opts.settleMs || 80;\n const maxPendingMs = opts.maxPendingMs || 4000;\n const minPendingMs = opts.minPendingMs || 0;\n const silenceMs = opts.silenceMs || 0;\n const _diagSession = opts.session || null;\n const _diagMachine = opts.machine || \"\";\n function _diagEvent(kind, fields) {\n if (!_diagSession)\n return;\n __wfTraceEvent(__wfTraceGet(_diagSession, _diagMachine), kind, fields);\n }\n function finish() {\n if (!_pending)\n return;\n const elapsed = Date.now() - _startedAt;\n if (minPendingMs > 0 && elapsed < minPendingMs) {\n if (_settleTimer)\n clearTimeout(_settleTimer);\n _settleTimer = setTimeout(finish, Math.max(settleMs, minPendingMs - elapsed));\n _diagEvent(\"hydration.holdMinPending\", { elapsed, minPendingMs });\n return;\n }\n if (silenceMs > 0 && _lastDataAt > 0) {\n const sinceLastData = Date.now() - _lastDataAt;\n if (sinceLastData < silenceMs && elapsed < maxPendingMs) {\n if (_settleTimer)\n clearTimeout(_settleTimer);\n _settleTimer = setTimeout(finish, silenceMs - sinceLastData);\n _diagEvent(\"hydration.holdSilence\", { sinceLastData, silenceMs });\n return;\n }\n }\n if (opts.canFinish && !opts.canFinish()) {\n if (elapsed >= maxPendingMs) {\n _diagEvent(\"hydration.maxPendingHit\", { elapsed });\n } else {\n if (_settleTimer)\n clearTimeout(_settleTimer);\n _settleTimer = setTimeout(finish, settleMs);\n _diagEvent(\"hydration.holdCanFinish\", { elapsed });\n return;\n }\n }\n _pending = false;\n if (_fallbackTimer) {\n clearTimeout(_fallbackTimer);\n _fallbackTimer = null;\n }\n if (_settleTimer) {\n clearTimeout(_settleTimer);\n _settleTimer = null;\n }\n const term = opts.getTerm();\n if (term) {\n try {\n term.scrollToBottom();\n } catch {}\n }\n _diagEvent(\"hydration.finish\", { elapsed });\n requestAnimationFrame(() => {\n if (!_pending) {\n const el = opts.getElement();\n if (el) {\n el.classList.remove(\"hydrating\");\n el.classList.add(\"hydrated\");\n }\n if (term && opts.shouldFocus())\n term.focus();\n _diagEvent(\"hydration.reveal\");\n }\n });\n }\n function start() {\n _pending = true;\n _startedAt = Date.now();\n if (_fallbackTimer)\n clearTimeout(_fallbackTimer);\n if (_settleTimer) {\n clearTimeout(_settleTimer);\n _settleTimer = null;\n }\n _fallbackTimer = setTimeout(finish, timeoutMs);\n _diagEvent(\"hydration.start\", { minPendingMs, timeoutMs });\n }\n function scheduleFinish() {\n if (!_pending)\n return;\n if (_settleTimer)\n clearTimeout(_settleTimer);\n _settleTimer = setTimeout(finish, settleMs);\n }\n function notifyData() {\n _lastDataAt = Date.now();\n if (_pending && _settleTimer) {\n clearTimeout(_settleTimer);\n _settleTimer = setTimeout(finish, settleMs);\n }\n }\n function cancel() {\n _pending = false;\n if (_fallbackTimer) {\n clearTimeout(_fallbackTimer);\n _fallbackTimer = null;\n }\n if (_settleTimer) {\n clearTimeout(_settleTimer);\n _settleTimer = null;\n }\n }\n return {\n get pending() {\n return _pending;\n },\n start,\n scheduleFinish,\n notifyData,\n finish,\n cancel\n };\n}\nfunction createPtySocketClient(opts) {\n let ws = null;\n const _rc = createReconnector({\n shouldReconnect: opts.shouldReconnect,\n onReconnecting: opts.onReconnecting,\n onExhausted: opts.onReconnectExhausted\n });\n let hasConnected = false;\n let consumeReset = !!opts.resetPty;\n let _initialPrefillMode = opts.prefillMode || \"full\";\n let _attachAckTimer = null;\n let _attachAckReceived = false;\n let _awaitingAttachAck = false;\n let _prefillChunks = [];\n let _awaitingPrefillDone = false;\n let _sawViewportPrefill = false;\n let _prefillDoneTimeout = null;\n let _trace = null;\n function buildUrl() {\n const resetSuffix = consumeReset ? \"&reset=1\" : \"\";\n consumeReset = false;\n const session = encodeURIComponent(opts.session);\n if (opts.machine) {\n const remote = new URL(opts.machine);\n const proto2 = remote.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n return proto2 + \"//\" + remote.host + \"/ws/pty?session=\" + session + resetSuffix;\n }\n const proto = location.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n return proto + \"//\" + location.host + \"/ws/pty?session=\" + session + resetSuffix;\n }\n let _takeControlOnAttach = !!opts.takeControlOnAttach;\n function sendAttachHandshake() {\n if (!ws || ws.readyState !== WebSocket.OPEN)\n return;\n try {\n opts.fitTerminal();\n } catch {}\n const dims = opts.getTermDimensions();\n if (!dims)\n return;\n const prefillMode = _initialPrefillMode;\n _lastSentResize = dims.cols + \"x\" + dims.rows;\n _awaitingAttachAck = true;\n _attachAckReceived = false;\n _prefillChunks = [];\n _awaitingPrefillDone = prefillMode !== \"none\";\n _sawViewportPrefill = false;\n const msg = { type: \"attach\", cols: dims.cols, rows: dims.rows, prefillMode };\n if (_takeControlOnAttach) {\n msg.takeControl = true;\n _takeControlOnAttach = false;\n }\n _trace = __wfTraceStart(opts.session, opts.machine || \"\", {\n cols: dims.cols,\n rows: dims.rows,\n prefillMode,\n takeControl: !!msg.takeControl,\n reset: !!opts.resetPty\n });\n __wfTraceEvent(_trace, \"attach.send\", { cols: dims.cols, rows: dims.rows, prefillMode });\n __wfTraceRafStart(_trace);\n ws.send(JSON.stringify(msg));\n if (_attachAckTimer)\n clearTimeout(_attachAckTimer);\n _attachAckTimer = setTimeout(() => {\n _attachAckTimer = null;\n if (_attachAckReceived)\n return;\n if (!_awaitingAttachAck)\n return;\n _awaitingAttachAck = false;\n _lastSentResize = \"\";\n sendFitResize();\n }, 300);\n }\n let _lastSentResize = \"\";\n let _resizeDebounceTimer = null;\n function sendFitResize(options) {\n if (!ws || ws.readyState !== WebSocket.OPEN)\n return;\n if (options?.fit !== false) {\n try {\n opts.fitTerminal();\n } catch {}\n }\n const dims = opts.getTermDimensions();\n if (!dims)\n return;\n const key = dims.cols + \"x\" + dims.rows;\n if (!options?.force && key === _lastSentResize)\n return;\n if (_resizeDebounceTimer)\n clearTimeout(_resizeDebounceTimer);\n _resizeDebounceTimer = setTimeout(() => {\n _resizeDebounceTimer = null;\n if (!ws || ws.readyState !== WebSocket.OPEN)\n return;\n const d = opts.getTermDimensions();\n if (!d)\n return;\n const nextKey = d.cols + \"x\" + d.rows;\n if (!options?.force && nextKey === _lastSentResize)\n return;\n const msg = JSON.stringify({ type: \"resize\", cols: d.cols, rows: d.rows });\n _lastSentResize = nextKey;\n ws.send(msg);\n }, 50);\n }\n function connect() {\n _rc.cancel();\n if (ws && ws.readyState <= WebSocket.OPEN)\n return;\n const sock = new WebSocket(buildUrl());\n sock.binaryType = \"arraybuffer\";\n ws = sock;\n sock.onopen = () => {\n console.log(\"[pty-ws]\", opts.session, \"ws.onopen, readyState=\", sock.readyState);\n const wasReconnect = hasConnected;\n hasConnected = true;\n _rc.connected();\n sendAttachHandshake();\n __wfTraceEvent(_trace, \"ws.open\", { wasReconnect });\n if (opts.onOpen)\n opts.onOpen(wasReconnect);\n };\n sock.onmessage = (ev) => {\n if (typeof ev.data === \"string\") {\n try {\n const msg = JSON.parse(ev.data);\n if (msg.type === \"attach_ack\") {\n __wfTraceEvent(_trace, \"attach_ack\");\n _attachAckReceived = true;\n _awaitingAttachAck = false;\n if (_attachAckTimer) {\n clearTimeout(_attachAckTimer);\n _attachAckTimer = null;\n }\n requestAnimationFrame(() => {\n sendFitResize({ force: true });\n });\n } else if (msg.type === \"pty_ready\") {\n __wfTraceEvent(_trace, \"pty_ready\");\n if (opts.onPtyReady)\n opts.onPtyReady();\n } else if (msg.type === \"prefill_viewport\") {\n const viewportChunks = _prefillChunks;\n _prefillChunks = [];\n const _vpBytes = viewportChunks.reduce((s, c) => s + c.length, 0);\n __wfTraceEvent(_trace, \"prefill_viewport\", {\n viewportFrames: viewportChunks.length,\n viewportBytes: _vpBytes\n });\n if (opts.onBinaryData) {\n for (const chunk of viewportChunks)\n opts.onBinaryData(chunk);\n }\n _awaitingPrefillDone = true;\n _sawViewportPrefill = true;\n if (_prefillDoneTimeout)\n clearTimeout(_prefillDoneTimeout);\n _prefillDoneTimeout = setTimeout(() => {\n _prefillDoneTimeout = null;\n if (!_awaitingPrefillDone)\n return;\n console.warn(\"[pty-ws] prefill_done timeout — force-flushing buffered output\");\n _awaitingPrefillDone = false;\n const chunks = _prefillChunks;\n _prefillChunks = [];\n _sawViewportPrefill = false;\n if (opts.onBinaryData) {\n for (const chunk of chunks)\n opts.onBinaryData(chunk);\n }\n }, 2000);\n } else if (msg.type === \"prefill_done\") {\n _awaitingPrefillDone = false;\n if (_prefillDoneTimeout) {\n clearTimeout(_prefillDoneTimeout);\n _prefillDoneTimeout = null;\n }\n const chunks = _prefillChunks;\n _prefillChunks = [];\n const _bufferedBytes = chunks.reduce((s, c) => s + c.length, 0);\n __wfTraceEvent(_trace, \"prefill_done\", {\n bufferedFrames: chunks.length,\n bufferedBytes: _bufferedBytes,\n sawViewportPrefill: _sawViewportPrefill\n });\n if (_sawViewportPrefill && chunks.length && opts.onReplacePrefill) {\n opts.onReplacePrefill();\n }\n _sawViewportPrefill = false;\n if (opts.onBinaryData) {\n for (const chunk of chunks)\n opts.onBinaryData(chunk);\n }\n } else if (msg.type === \"viewer_conflict\") {\n __wfTraceEvent(_trace, \"viewer_conflict\");\n console.log(\"[pty-ws]\", opts.session, \"viewer_conflict\");\n _awaitingAttachAck = false;\n _awaitingPrefillDone = false;\n _prefillChunks = [];\n _sawViewportPrefill = false;\n if (_prefillDoneTimeout) {\n clearTimeout(_prefillDoneTimeout);\n _prefillDoneTimeout = null;\n }\n if (_attachAckTimer) {\n clearTimeout(_attachAckTimer);\n _attachAckTimer = null;\n }\n if (opts.onViewerConflict)\n opts.onViewerConflict();\n } else if (msg.type === \"control_granted\") {\n __wfTraceEvent(_trace, \"control_granted\");\n console.log(\"[pty-ws]\", opts.session, \"control_granted — sending re-attach\");\n sendAttachHandshake();\n if (opts.onControlGranted)\n opts.onControlGranted();\n }\n } catch (e) {\n console.warn(\"[pty-ws] failed to parse control message:\", e);\n }\n return;\n }\n if (_awaitingPrefillDone) {\n const u82 = new Uint8Array(ev.data);\n __wfTraceEvent(_trace, \"ws.binary\", { bucket: \"prefill\", size: u82.length, buffered: _prefillChunks.length + 1 });\n _prefillChunks.push(u82);\n return;\n }\n const u8 = new Uint8Array(ev.data);\n __wfTraceEvent(_trace, \"ws.binary\", { bucket: \"replay\", size: u8.length });\n if (opts.onBinaryData)\n opts.onBinaryData(u8);\n };\n sock.onclose = (ev) => {\n if (ws !== sock)\n return;\n __wfTraceEvent(_trace, \"ws.close\", { code: ev.code, reason: String(ev.reason || \"\") });\n __wfTraceRafStop(_trace);\n ws = null;\n _awaitingAttachAck = false;\n _awaitingPrefillDone = false;\n _prefillChunks = [];\n _sawViewportPrefill = false;\n if (_prefillDoneTimeout) {\n clearTimeout(_prefillDoneTimeout);\n _prefillDoneTimeout = null;\n }\n if (_attachAckTimer) {\n clearTimeout(_attachAckTimer);\n _attachAckTimer = null;\n }\n if (opts.onDisconnected)\n opts.onDisconnected(ev.code, ev.reason);\n };\n sock.onerror = () => {};\n }\n function scheduleReconnect() {\n _rc.schedule(() => {\n if (!ws || ws.readyState === WebSocket.CLOSED)\n connect();\n });\n }\n function sendResize(cols, rows) {\n if (ws && ws.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify({ type: \"resize\", cols, rows }));\n }\n }\n function sendTakeControl() {\n if (ws && ws.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify({ type: \"take_control\" }));\n }\n }\n function send(data) {\n if (ws && ws.readyState === WebSocket.OPEN)\n ws.send(data);\n }\n function close() {\n _rc.cancel();\n _rc.block();\n _awaitingAttachAck = false;\n _awaitingPrefillDone = false;\n _prefillChunks = [];\n _sawViewportPrefill = false;\n if (_prefillDoneTimeout) {\n clearTimeout(_prefillDoneTimeout);\n _prefillDoneTimeout = null;\n }\n if (_attachAckTimer) {\n clearTimeout(_attachAckTimer);\n _attachAckTimer = null;\n }\n if (ws) {\n ws.close();\n ws = null;\n }\n }\n function resetRetry() {\n _rc.reset();\n }\n function reconnect(reconnectOpts) {\n _rc.cancel();\n _awaitingAttachAck = false;\n _awaitingPrefillDone = false;\n _prefillChunks = [];\n _sawViewportPrefill = false;\n if (_prefillDoneTimeout) {\n clearTimeout(_prefillDoneTimeout);\n _prefillDoneTimeout = null;\n }\n if (_attachAckTimer) {\n clearTimeout(_attachAckTimer);\n _attachAckTimer = null;\n }\n _takeControlOnAttach = !!(reconnectOpts && reconnectOpts.takeControl);\n if (ws) {\n try {\n ws.close();\n } catch {}\n ws = null;\n }\n connect();\n }\n return {\n connect,\n reconnect,\n scheduleReconnect,\n sendFitResize,\n sendResize,\n sendTakeControl,\n send,\n close,\n resetRetry,\n get ws() {\n return ws;\n },\n get isOpen() {\n return !!(ws && ws.readyState === WebSocket.OPEN);\n },\n get retryBlocked() {\n return _rc.isBlocked;\n }\n };\n}\nfunction createPtyTerminalController(opts) {\n let _container = null;\n let _term = null;\n let _fitAddon = null;\n let _hydration = null;\n let _ptyClient = null;\n let _hydrationStarted = false;\n let _hydrationWritesInFlight = 0;\n let _connectEpoch = 0;\n let _reconnectPendingReset = false;\n let _postResetBuffer = null;\n let _mounting = false;\n let _cachedLoaded = false;\n let _userScrolledUp = false;\n let _scrollLockKeydownHandler = null;\n let _browserShortcutKeydownHandler = null;\n let _resizeObserver = null;\n let _layoutSyncRaf = null;\n let _resizeRehydrateTimer = null;\n const _canAcceptInput = opts.canAcceptInput || (() => !!(_ptyClient && _ptyClient.isOpen));\n const _canSendResize = opts.canSendResize || _canAcceptInput;\n const _getHydrationElement = opts.getHydrationElement || (() => _container);\n function _scheduleBufferedClear() {\n if (!_postResetBuffer)\n _postResetBuffer = [];\n const canvas = _container ? _container.querySelector(\"canvas\") : null;\n if (canvas)\n canvas.style.visibility = \"hidden\";\n _term.reset();\n requestAnimationFrame(() => {\n if (!_term || !_postResetBuffer) {\n if (canvas)\n canvas.style.visibility = \"\";\n return;\n }\n const buf = _postResetBuffer;\n _postResetBuffer = null;\n for (const chunk of buf)\n _writeTermData(chunk);\n if (canvas)\n canvas.style.visibility = \"\";\n });\n }\n function _writeTermData(data) {\n if (!_term)\n return;\n const _diagTrace = __wfTraceGet(opts.session, opts.machine || \"\");\n const _diagPending = !!(_hydration && _hydration.pending);\n __wfTraceEvent(_diagTrace, \"_writeTermData\", { size: data.length, hydrating: _diagPending });\n if (_hydration)\n _hydration.notifyData();\n try {\n if (_hydration && _hydration.pending) {\n const writeEpoch = _connectEpoch;\n _hydrationWritesInFlight++;\n _term.write(data, () => {\n if (writeEpoch !== _connectEpoch)\n return;\n _hydrationWritesInFlight = Math.max(0, _hydrationWritesInFlight - 1);\n __wfTraceEvent(_diagTrace, \"term.writeDone\", { size: data.length, inFlight: _hydrationWritesInFlight });\n if (_hydration)\n _hydration.scheduleFinish();\n if (opts.onOutput)\n opts.onOutput(data);\n });\n } else {\n _term.write(data);\n if (opts.onOutput)\n opts.onOutput(data);\n }\n } catch (err) {\n try {\n if (!window.__wf_lastCrash) {\n window.__wf_lastCrash = {\n session: opts.session,\n cols: _term && _term.cols,\n rows: _term && _term.rows,\n len: data.length,\n head: Array.from(data.slice(0, 64)),\n tail: Array.from(data.slice(Math.max(0, data.length - 64))),\n err: String(err),\n stack: err && err.stack,\n ts: Date.now()\n };\n console.error(\"[wf-crash]\", opts.session, err, \"— captured to window.__wf_lastCrash\");\n }\n } catch {}\n throw err;\n }\n }\n function fitTerminalPreserveScroll() {\n if (!_fitAddon || !_term)\n return;\n const vp = _term.viewportY ?? 0;\n const oldScrollback = typeof _term.getScrollbackLength === \"function\" ? _term.getScrollbackLength() : 0;\n const wasAtBottom = vp === 0;\n _fitAddon.fit();\n if (!wasAtBottom && vp > 0) {\n const newScrollback = typeof _term.getScrollbackLength === \"function\" ? _term.getScrollbackLength() : oldScrollback;\n const target = Math.max(0, newScrollback - (oldScrollback - vp));\n try {\n _term.scrollToLine(target);\n } catch {}\n }\n }\n function forceRepaint() {\n if (!_term)\n return;\n const t = _term;\n try {\n t.renderer?.render(t.wasmTerm, true, t.viewportY, t);\n } catch {}\n }\n function syncLayout(options) {\n if (!_fitAddon || !_term || !_container)\n return;\n const before = { cols: _term.cols, rows: _term.rows };\n fitTerminalPreserveScroll();\n if (options?.repaint !== false)\n forceRepaint();\n if (_ptyClient)\n _ptyClient.sendFitResize({ force: !!options?.forceSend, fit: false });\n if (before.cols !== _term.cols || before.rows !== _term.rows) {\n scheduleResizeRehydrate();\n }\n }\n function shouldSuppressContainerResize() {\n return isDesktop() && !state.sidebarPinned && !state.sessionsExpanded && (state.sidebarTransitionIsHover || state.sidebarAutoExpanded);\n }\n function scheduleResizeRehydrate() {\n if (opts.prefillMode !== \"full\")\n return;\n if (!_ptyClient || !_ptyClient.isOpen)\n return;\n if (shouldSuppressContainerResize())\n return;\n if (_resizeRehydrateTimer)\n clearTimeout(_resizeRehydrateTimer);\n _resizeRehydrateTimer = setTimeout(() => {\n _resizeRehydrateTimer = null;\n if (!_term || !_ptyClient || !_ptyClient.isOpen)\n return;\n if (shouldSuppressContainerResize())\n return;\n _ptyClient.reconnect();\n }, 350);\n }\n function scheduleLayoutSync(options) {\n if (_layoutSyncRaf)\n cancelAnimationFrame(_layoutSyncRaf);\n _layoutSyncRaf = requestAnimationFrame(() => {\n _layoutSyncRaf = null;\n syncLayout(options);\n });\n }\n async function mount(container, mountOpts) {\n if (_term || _mounting)\n return;\n _mounting = true;\n try {\n await window.ghosttyReady;\n } catch (err) {\n console.error(\"[ghostty-web] WASM init failed:\", err);\n _mounting = false;\n return;\n }\n if (_term || !_mounting) {\n _mounting = false;\n return;\n }\n _container = container;\n const result = await createTerminalInstance({\n fontSize: opts.fontSize,\n scrollback: opts.scrollback,\n cursorBlink: opts.cursorBlink,\n disableStdin: opts.disableStdin,\n sendInput: (data) => _ptyClient && _ptyClient.send(data),\n sendMessage: (msg) => _ptyClient && _ptyClient.send(msg),\n canAcceptInput: _canAcceptInput,\n canSendResize: _canSendResize,\n alwaysForwardWheel: false,\n onWheelScroll: (ev) => {\n if (!_term)\n return;\n try {\n const hasMouse = _term.getMode(1000) || _term.getMode(1002) || _term.getMode(1003);\n if (hasMouse)\n return;\n } catch {}\n if (ev.deltaY < 0) {\n _userScrolledUp = true;\n } else if (ev.deltaY > 0) {\n requestAnimationFrame(() => {\n if (_term && _term.viewportY === 0)\n _userScrolledUp = false;\n });\n }\n }\n });\n if (!_mounting || _term) {\n try {\n result.term && result.term.dispose && result.term.dispose();\n } catch {}\n _mounting = false;\n return;\n }\n _term = result.term;\n _fitAddon = result.fitAddon;\n const hydrationEl = _getHydrationElement();\n if (hydrationEl) {\n hydrationEl.classList.add(\"hydrating\");\n hydrationEl.classList.remove(\"hydrated\");\n }\n _term.open(container);\n if (typeof ResizeObserver !== \"undefined\") {\n _resizeObserver = new ResizeObserver((entries) => {\n if (!entries.length)\n return;\n if (!_container || !_term)\n return;\n if (_container.clientWidth === 0 || _container.clientHeight === 0)\n return;\n if (shouldSuppressContainerResize())\n return;\n scheduleLayoutSync({ forceSend: true, repaint: true, reason: \"container-resize\" });\n });\n _resizeObserver.observe(container);\n }\n const _openCanvas = container.querySelector(\"canvas\");\n if (_openCanvas) {\n const ctx = _openCanvas.getContext(\"2d\");\n if (ctx) {\n ctx.fillStyle = \"#0a0a0a\";\n ctx.fillRect(0, 0, _openCanvas.width, _openCanvas.height);\n }\n }\n {\n const origScrollToBottom = _term.scrollToBottom.bind(_term);\n _term.scrollToBottom = () => {\n if (_userScrolledUp)\n return;\n origScrollToBottom();\n };\n const origScrollLines = _term.scrollLines.bind(_term);\n _term.scrollLines = (n) => {\n origScrollLines(n);\n if (_term.viewportY > 0) {\n _userScrolledUp = true;\n } else {\n _userScrolledUp = false;\n }\n };\n _scrollLockKeydownHandler = () => {\n if (_userScrolledUp) {\n _userScrolledUp = false;\n origScrollToBottom();\n }\n };\n container.addEventListener(\"keydown\", _scrollLockKeydownHandler, true);\n }\n _browserShortcutKeydownHandler = (e) => {\n if ((e.metaKey || e.ctrlKey) && !e.altKey) {\n const k = e.key.toLowerCase();\n if (\"rwtlnq\".includes(k) || e.shiftKey && k === \"r\") {\n e.stopImmediatePropagation();\n }\n }\n };\n container.addEventListener(\"keydown\", _browserShortcutKeydownHandler, true);\n _hydration = createInitialHydrationController({\n getElement: _getHydrationElement,\n getTerm: () => _term,\n shouldFocus: opts.shouldFocus || (() => true),\n canFinish: () => _hydrationWritesInFlight === 0,\n timeoutMs: opts.hydrationTimeoutMs,\n settleMs: 50,\n minPendingMs: 200,\n silenceMs: 150,\n session: opts.session,\n machine: opts.machine || \"\"\n });\n syncLayout({ forceSend: false, repaint: true, reason: \"mount\" });\n if (mountOpts && mountOpts.cached) {\n _cachedLoaded = true;\n _term.write(mountOpts.cached, () => {\n try {\n _term.scrollToBottom();\n } catch {}\n });\n }\n _mounting = false;\n }\n function connect(connectOpts) {\n if (_ptyClient && _ptyClient.isOpen)\n return;\n if (_ptyClient)\n _ptyClient.close();\n _connectEpoch++;\n if (!_hydrationStarted && _hydration) {\n _hydration.start();\n _hydrationStarted = true;\n }\n if (_cachedLoaded && opts.prefillMode !== \"full\") {\n _reconnectPendingReset = true;\n _cachedLoaded = false;\n }\n let thisClient = null;\n const isCurrent = () => _ptyClient === thisClient;\n thisClient = _ptyClient = createPtySocketClient({\n takeControlOnAttach: !!(connectOpts && connectOpts.takeControl),\n session: opts.session,\n machine: opts.machine || \"\",\n resetPty: opts.resetPty,\n prefillMode: opts.prefillMode,\n getTermDimensions: () => _term ? { cols: _term.cols, rows: _term.rows } : null,\n fitTerminal: fitTerminalPreserveScroll,\n shouldReconnect: opts.shouldReconnect,\n onOpen: (wasReconnect) => {\n console.log(\"[pty-ctrl]\", opts.session, \"onOpen, isCurrent=\", isCurrent(), \"wasReconnect=\", wasReconnect);\n if (!isCurrent())\n return;\n if (!wasReconnect && _term) {\n _term.reset();\n }\n const rehydrate = WP.shouldRehydrate(wasReconnect, _hydrationStarted, opts.prefillMode !== \"full\");\n if (rehydrate && _term) {\n _hydrationWritesInFlight = 0;\n if (wasReconnect) {\n _reconnectPendingReset = true;\n if (_hydration)\n _hydration.start();\n } else {\n if (_hydration)\n _hydration.start();\n const el = _getHydrationElement();\n if (el) {\n el.classList.add(\"hydrating\");\n el.classList.remove(\"hydrated\");\n }\n }\n }\n _userScrolledUp = false;\n if (opts.onOpen)\n opts.onOpen(wasReconnect);\n },\n onPtyReady: () => {\n if (isCurrent() && opts.onPtyReady)\n opts.onPtyReady();\n },\n onReplacePrefill: () => {\n if (!_term)\n return;\n _reconnectPendingReset = false;\n _hydrationWritesInFlight = 0;\n },\n onBinaryData: (data) => {\n if (!_term)\n return;\n if (_postResetBuffer) {\n _postResetBuffer.push(data);\n return;\n }\n if (_reconnectPendingReset) {\n _reconnectPendingReset = false;\n _postResetBuffer = [data];\n _scheduleBufferedClear();\n return;\n }\n _writeTermData(data);\n },\n onViewerConflict: () => {\n if (isCurrent() && opts.onViewerConflict)\n opts.onViewerConflict();\n },\n onControlGranted: () => {\n if (!isCurrent())\n return;\n if (_hydration && _term) {\n _hydrationWritesInFlight = 0;\n _reconnectPendingReset = true;\n _hydration.start();\n const el = _getHydrationElement();\n if (el) {\n el.classList.remove(\"hydrated\");\n el.classList.add(\"hydrating\");\n }\n }\n if (opts.onControlGranted)\n opts.onControlGranted();\n },\n onDisconnected: (code, reason) => {\n if (isCurrent() && opts.onDisconnected)\n opts.onDisconnected(code, reason);\n },\n onReconnecting: () => {\n if (isCurrent() && opts.onReconnecting)\n opts.onReconnecting();\n },\n onReconnectExhausted: () => {\n if (isCurrent() && opts.onReconnectExhausted)\n opts.onReconnectExhausted();\n }\n });\n _ptyClient.connect();\n }\n function focus() {\n if (_term)\n _term.focus();\n }\n function resize() {\n syncLayout({ forceSend: true, repaint: true, reason: \"resize\" });\n }\n let _resizeTransitionId = 0;\n function resizeWithTransition() {\n if (!_fitAddon || !_term)\n return;\n syncLayout({ forceSend: true, repaint: true, reason: \"transition\" });\n }\n function dispose() {\n _connectEpoch++;\n if (_ptyClient) {\n _ptyClient.close();\n _ptyClient = null;\n }\n if (_hydration) {\n _hydration.cancel();\n _hydration = null;\n }\n _hydrationStarted = false;\n _hydrationWritesInFlight = 0;\n _reconnectPendingReset = false;\n _postResetBuffer = null;\n if (_layoutSyncRaf) {\n cancelAnimationFrame(_layoutSyncRaf);\n _layoutSyncRaf = null;\n }\n if (_resizeObserver) {\n try {\n _resizeObserver.disconnect();\n } catch {}\n _resizeObserver = null;\n }\n if (_resizeRehydrateTimer) {\n clearTimeout(_resizeRehydrateTimer);\n _resizeRehydrateTimer = null;\n }\n _mounting = false;\n _cachedLoaded = false;\n _userScrolledUp = false;\n if (_container) {\n if (_scrollLockKeydownHandler)\n _container.removeEventListener(\"keydown\", _scrollLockKeydownHandler, true);\n if (_browserShortcutKeydownHandler)\n _container.removeEventListener(\"keydown\", _browserShortcutKeydownHandler, true);\n }\n _scrollLockKeydownHandler = null;\n _browserShortcutKeydownHandler = null;\n if (_term) {\n try {\n _term.dispose();\n } catch {}\n _term = null;\n }\n _fitAddon = null;\n _container = null;\n }\n return {\n mount,\n connect,\n focus,\n resize,\n resizeWithTransition,\n dispose,\n scheduleReconnect: () => {\n if (_ptyClient)\n _ptyClient.scheduleReconnect();\n },\n sendTakeControl: () => {\n if (_ptyClient)\n _ptyClient.sendTakeControl();\n },\n sendFitResize: (options) => {\n if (_ptyClient)\n _ptyClient.sendFitResize(options);\n },\n forceRepaint,\n syncLayout,\n send: (data) => {\n if (_ptyClient)\n _ptyClient.send(data);\n },\n resetRetry: () => {\n if (_ptyClient)\n _ptyClient.resetRetry();\n },\n reconnect: (reconnectOpts) => {\n if (_ptyClient)\n _ptyClient.reconnect(reconnectOpts);\n },\n get term() {\n return _term;\n },\n get fitAddon() {\n return _fitAddon;\n },\n get ptyClient() {\n return _ptyClient;\n },\n get hydration() {\n return _hydration;\n },\n get isConnected() {\n return !!(_ptyClient && _ptyClient.isOpen);\n },\n get retryBlocked() {\n return _ptyClient ? _ptyClient.retryBlocked : false;\n }\n };\n}\nvar KEY_TO_ESCAPE = {\n Enter: \"\\r\",\n Tab: \"\\t\",\n Escape: \"\\x1B\",\n Up: \"\\x1B[A\",\n Down: \"\\x1B[B\",\n Right: \"\\x1B[C\",\n Left: \"\\x1B[D\",\n Home: \"\\x1B[H\",\n End: \"\\x1B[F\",\n PPage: \"\\x1B[5~\",\n NPage: \"\\x1B[6~\",\n BTab: \"\\x1B[Z\",\n BSpace: \"\",\n DC: \"\\x1B[3~\",\n y: \"y\",\n n: \"n\",\n \"C-a\": \"\\x01\",\n \"C-b\": \"\\x02\",\n \"C-c\": \"\\x03\",\n \"C-d\": \"\\x04\",\n \"C-e\": \"\\x05\",\n \"C-f\": \"\\x06\",\n \"C-g\": \"\\x07\",\n \"C-h\": \"\\b\",\n \"C-k\": \"\\v\",\n \"C-l\": \"\\f\",\n \"C-n\": \"\\x0E\",\n \"C-p\": \"\\x10\",\n \"C-r\": \"\\x12\",\n \"C-u\": \"\\x15\",\n \"C-w\": \"\\x17\",\n \"C-z\": \"\\x1A\"\n};\nvar _textEncoder = new TextEncoder;\nfunction _sendTerminalInput(bytes) {\n if (isGridActive()) {\n const gs = state.gridSessions[state.gridFocusIndex];\n if (gs?.controller?.isConnected) {\n gs.controller.send(bytes);\n return true;\n }\n return false;\n }\n if (state.terminalController?.isConnected) {\n state.terminalController.send(bytes);\n return true;\n }\n return false;\n}\nfunction sendMobileProxyText(proxy, text) {\n const pending = text || proxy.value;\n if (!pending)\n return true;\n const savedField = proxy.value;\n if (_sendTerminalInput(_textEncoder.encode(pending))) {\n proxy.value = \"\";\n return true;\n }\n proxy.value = savedField || pending;\n return false;\n}\nfunction flushMobileKbProxyPendingInput() {\n const proxy = document.getElementById(\"mobile-kb-proxy\");\n if (!proxy)\n return false;\n return sendMobileProxyText(proxy, proxy.value);\n}\nfunction createConflictOverlay(message, buttonLabel, onClick) {\n const overlay = document.createElement(\"div\");\n overlay.className = \"viewer-conflict-overlay\";\n overlay.innerHTML = '
' + esc(message) + '
\";\n overlay.querySelector(\".conflict-btn\").addEventListener(\"click\", onClick);\n overlay.addEventListener(\"click\", (e) => e.stopPropagation());\n return overlay;\n}\nfunction draftKey(machine, session) {\n return \"wp-draft|\" + (machine || \"\") + \"|\" + session;\n}\nfunction saveDraft() {\n if (!state.currentSession)\n return;\n const val = document.getElementById(\"msg-input\").value;\n const key = draftKey(state.currentMachine, state.currentSession);\n if (val)\n localStorage.setItem(key, val);\n else\n localStorage.removeItem(key);\n}\nfunction restoreDraft() {\n if (!state.currentSession)\n return;\n const val = localStorage.getItem(draftKey(state.currentMachine, state.currentSession)) || \"\";\n const input = document.getElementById(\"msg-input\");\n input.value = val;\n autoResizeInput();\n}\nfunction clearDraft() {\n if (!state.currentSession)\n return;\n localStorage.removeItem(draftKey(state.currentMachine, state.currentSession));\n}\nvar snapshotPending = null;\nfunction snapshotKey(machine, session) {\n return SNAPSHOT_KEY_PREFIX + (machine || \"\") + \"|\" + session;\n}\nfunction saveSnapshot(machine, session, text) {\n if (!session || !text)\n return;\n const trimmed = text.length > SNAPSHOT_MAX_BYTES ? text.slice(-SNAPSHOT_MAX_BYTES) : text;\n try {\n localStorage.setItem(snapshotKey(machine, session), JSON.stringify({ d: trimmed, ts: Date.now() }));\n } catch {}\n}\nfunction loadSnapshot(machine, session) {\n if (!session)\n return null;\n try {\n const raw = localStorage.getItem(snapshotKey(machine, session));\n if (!raw)\n return null;\n const snap = JSON.parse(raw);\n const age = (Date.now() - snap.ts) / 1000;\n if (age > (wpSettings.snapshotTtl || 900)) {\n localStorage.removeItem(snapshotKey(machine, session));\n return null;\n }\n return snap.d;\n } catch {\n return null;\n }\n}\nfunction cleanStaleSnapshots() {\n const ttl = (wpSettings.snapshotTtl || 900) * 1000;\n const now = Date.now();\n const toRemove = [];\n for (let i = 0;i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (!key || !key.startsWith(SNAPSHOT_KEY_PREFIX))\n continue;\n try {\n const snap = JSON.parse(localStorage.getItem(key));\n if (now - snap.ts > ttl)\n toRemove.push(key);\n } catch {\n toRemove.push(key);\n }\n }\n toRemove.forEach((k) => localStorage.removeItem(k));\n}\nfunction scheduleSnapshotSave(text) {\n snapshotPending = text;\n if (state.snapshotTimer)\n return;\n state.snapshotTimer = setTimeout(flushSnapshot, SNAPSHOT_SAVE_INTERVAL);\n}\nfunction flushSnapshot() {\n state.snapshotTimer = null;\n if (!state.currentSession) {\n snapshotPending = null;\n return;\n }\n let text;\n if (state.terminalController?.term) {\n text = serializeXtermTail(state.terminalController.term, 200);\n } else {\n text = snapshotPending;\n }\n snapshotPending = null;\n if (text)\n saveSnapshot(state.currentMachine, state.currentSession, text);\n flushGridSnapshots();\n}\nfunction serializeXtermTail(term, maxLines) {\n return WP.serializeBufferTail(term.buffer.active, maxLines);\n}\nfunction flushGridSnapshots() {\n for (const gs of state.gridSessions) {\n if (!gs.controller?.term)\n continue;\n const text = serializeXtermTail(gs.controller.term, 200);\n if (text)\n saveSnapshot(gs.machine || \"\", gs.session, text);\n }\n}\nfunction isValidMachineUrl(u) {\n if (typeof u !== \"string\" || u.length === 0 || u.length > 256)\n return false;\n let parsed;\n try {\n parsed = new URL(u);\n } catch {\n return false;\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\")\n return false;\n if (parsed.username || parsed.password)\n return false;\n const host = parsed.hostname;\n const isTailnet = /\\.ts\\.net$/i.test(host);\n const isIPv4 = /^\\d{1,3}(?:\\.\\d{1,3}){3}$/.test(host);\n const isLocal = host === \"localhost\" || host === \"127.0.0.1\";\n if (!isTailnet && !isIPv4 && !isLocal)\n return false;\n const port = parsed.port;\n if (port) {\n if (!/^\\d+$/.test(port))\n return false;\n const n = Number(port);\n if (n < 1 || n > 65535)\n return false;\n }\n return true;\n}\nfunction getMachines() {\n try {\n const raw = JSON.parse(localStorage.getItem(\"wolfpack-machines\") || \"[]\");\n if (!Array.isArray(raw))\n return [];\n return raw.filter((m) => m && isValidMachineUrl(m.url)).map((m) => ({\n url: m.url,\n name: typeof m.name === \"string\" ? m.name.replace(/[\\u0000-\\u001f\\u007f]/g, \"\").slice(0, 128) : \"\"\n }));\n } catch {\n return [];\n }\n}\nfunction saveMachines(list) {\n const safe = (Array.isArray(list) ? list : []).filter((m) => m && isValidMachineUrl(m.url));\n localStorage.setItem(\"wolfpack-machines\", JSON.stringify(safe));\n}\nfunction removeMachine(url) {\n const machines = getMachines().filter((m) => m.url !== url);\n saveMachines(machines);\n return machines;\n}\n(async () => {\n try {\n const resp = await fetch(\"/api/info\");\n const info = await resp.json();\n state.selfName = info.name || \"this machine\";\n state.selfVersion = info.version || \"\";\n const vEl = document.getElementById(\"settings-version\");\n if (vEl && state.selfVersion)\n vEl.textContent = \"wolfpack v\" + state.selfVersion;\n } catch {\n state.selfName = \"this machine\";\n }\n try {\n const d = await api(\"/discover\");\n const peers = d.peers || [];\n if (peers.length) {\n const peerUrls = new Set(peers.map((p) => p.url));\n let machines = getMachines();\n let changed = false;\n const before = machines.length;\n machines = machines.filter((m) => peerUrls.has(m.url));\n if (machines.length !== before)\n changed = true;\n for (const p of peers) {\n const existing = machines.find((m) => m.url === p.url);\n if (!existing) {\n machines.push({ url: p.url, name: p.name || p.hostname });\n changed = true;\n } else if (existing.name !== (p.name || p.hostname)) {\n existing.name = p.name || p.hostname;\n changed = true;\n }\n }\n if (changed) {\n saveMachines(machines);\n loadSessions();\n }\n }\n } catch {}\n})();\nfunction errorMessage(err) {\n if (err && typeof err.message === \"string\" && err.message)\n return err.message;\n return String(err || \"unknown error\");\n}\nasync function api(path, opts, machineUrl) {\n const base = machineUrl ? new URL(\"/api\" + path, machineUrl).href : \"/api\" + path;\n const res = await fetch(base, opts);\n const body = await res.text();\n let data = {};\n if (body) {\n try {\n data = JSON.parse(body);\n } catch {}\n }\n if (!res.ok) {\n const message = data && typeof data.error === \"string\" ? data.error : body ? body.slice(0, 200) : `HTTP ${res.status}`;\n const err = new Error(message);\n err.status = res.status;\n err.data = data;\n throw err;\n }\n return data;\n}\nvar VIEW_DEPTH = {\n sessions: 0,\n projects: 1,\n agent: 2,\n settings: 1,\n terminal: 1,\n \"ralph-detail\": 1,\n \"ralph-start\": 1\n};\nfunction showView(name, skipAnimation) {\n const prevView = state.currentView;\n const prevEl = document.getElementById(prevView + \"-view\");\n const isMobile = !isDesktop();\n const effectiveName = !isMobile && name === \"sessions\" && state.currentSession && !state.sessionsExpanded ? \"terminal\" : name;\n const nextEl = document.getElementById(effectiveName + \"-view\");\n const wasSwipe = state.swipeNavigated;\n if (state.swipeNavigated) {\n skipAnimation = true;\n state.swipeNavigated = false;\n }\n const animate = isMobile && !skipAnimation && prevView !== effectiveName && prevEl && nextEl;\n const animateHeader = isMobile && prevView !== effectiveName && !skipAnimation || wasSwipe;\n const goingForward = (VIEW_DEPTH[effectiveName] || 0) > (VIEW_DEPTH[prevView] || 0);\n if (prevView === \"settings\" && effectiveName !== \"settings\" && debugPanelTimer) {\n clearInterval(debugPanelTimer);\n debugPanelTimer = null;\n }\n if (prevView === \"terminal\" && effectiveName !== \"terminal\") {\n if (isGridActive()) {\n suspendGridMode();\n } else {\n destroyTerminal();\n }\n }\n setState({ currentView: effectiveName });\n if (animate) {\n const fg = goingForward ? nextEl : prevEl;\n const bg = goingForward ? prevEl : nextEl;\n bg.style.transition = \"none\";\n bg.style.transform = goingForward ? \"translate3d(0,0,0)\" : \"translate3d(-30%,0,0)\";\n bg.classList.add(\"visible\");\n bg.style.zIndex = \"0\";\n fg.style.transition = \"none\";\n fg.style.transform = goingForward ? \"translate3d(100%,0,0)\" : \"translate3d(0,0,0)\";\n fg.classList.add(\"visible\", \"swiping\");\n fg.style.zIndex = \"2\";\n fg.offsetHeight;\n const dur = \"0.3s\";\n const ease = \"cubic-bezier(0.2, 0.9, 0.3, 1)\";\n fg.style.transition = `transform ${dur} ${ease}`;\n bg.style.transition = `transform ${dur} ${ease}`;\n fg.style.transform = goingForward ? \"translate3d(0,0,0)\" : \"translate3d(100%,0,0)\";\n bg.style.transform = goingForward ? \"translate3d(-30%,0,0)\" : \"translate3d(0,0,0)\";\n let cleaned = false;\n const cleanup = () => {\n if (cleaned)\n return;\n cleaned = true;\n [fg, bg].forEach((el) => {\n el.style.transition = \"\";\n el.style.zIndex = \"\";\n el.style.transform = \"\";\n el.classList.remove(\"swiping\");\n });\n document.querySelectorAll(\".view\").forEach((v) => {\n if (v !== nextEl)\n v.classList.remove(\"visible\");\n });\n nextEl.classList.add(\"visible\");\n };\n fg.addEventListener(\"transitionend\", cleanup, { once: true });\n setTimeout(cleanup, 350);\n } else {\n document.querySelectorAll(\".view\").forEach((v) => {\n if (v !== nextEl)\n v.classList.remove(\"visible\", \"animating\", \"swiping\");\n });\n nextEl.classList.add(\"visible\");\n nextEl.style.transform = \"\";\n }\n const back = document.getElementById(\"back-btn\");\n const title = document.getElementById(\"header-title\");\n const gear = document.getElementById(\"gear-btn\");\n const chip = document.getElementById(\"session-chip\");\n const headerCenter = document.getElementById(\"header-center\");\n if (state.sessionRefreshTimer) {\n clearInterval(state.sessionRefreshTimer);\n state.sessionRefreshTimer = null;\n }\n if (state.ralphLogPollTimer) {\n clearInterval(state.ralphLogPollTimer);\n state.ralphLogPollTimer = null;\n }\n if (!isMobile) {\n if (effectiveName !== \"sessions\" && state.sessionsExpanded) {\n state.sessionsExpanded = false;\n document.body.classList.remove(\"sessions-expanded\");\n const expandBtn = document.getElementById(\"sidebar-expand-btn\");\n if (expandBtn)\n expandBtn.classList.remove(\"active\");\n if (state.sidebarPinned) {\n const sb = document.getElementById(\"desktop-sidebar\");\n if (sb) {\n sb.classList.remove(\"collapsed\");\n state.sidebarCollapsed = false;\n }\n }\n }\n const settingsBackBtn = document.getElementById(\"settings-back-btn\");\n if (settingsBackBtn)\n settingsBackBtn.style.display = effectiveName === \"settings\" ? \"block\" : \"none\";\n const ralphDetailBackBtn = document.getElementById(\"ralph-detail-back-btn\");\n if (ralphDetailBackBtn)\n ralphDetailBackBtn.style.display = effectiveName === \"ralph-detail\" ? \"inline-block\" : \"none\";\n const ralphStartBackBtn = document.getElementById(\"ralph-start-back-btn\");\n if (ralphStartBackBtn)\n ralphStartBackBtn.style.display = effectiveName === \"ralph-start\" ? \"inline-block\" : \"none\";\n if (effectiveName === \"settings\") {\n renderQuickCmdSettings();\n loadAgentsSettings();\n } else if (effectiveName === \"ralph-detail\") {\n refreshRalphDetail();\n state.ralphLogPollTimer = setInterval(refreshRalphDetail, 2000);\n } else if (effectiveName === \"ralph-start\") {\n loadRalphStartForm();\n }\n renderSidebar();\n return;\n }\n const applyHeader = () => {\n document.getElementById(\"kb-accessory\").classList.remove(\"visible\");\n state.kbAccessoryOpen = false;\n chip.style.display = \"none\";\n closeDrawer(true);\n title.style.display = \"\";\n title.style.cursor = \"\";\n title.onclick = null;\n document.getElementById(\"header-machine-label\").style.display = \"none\";\n headerCenter.style.transform = \"\";\n if (name === \"sessions\") {\n back.style.display = \"none\";\n back.onclick = null;\n gear.style.display = \"\";\n title.textContent = \"wolfpack\";\n loadSessions();\n state.sessionRefreshTimer = setInterval(loadSessions, 5000);\n } else if (name === \"projects\") {\n back.style.display = \"block\";\n back.onclick = () => {\n showView(state.viewBeforePicker);\n loadSessions();\n };\n gear.style.display = \"none\";\n title.textContent = \"select project\";\n } else if (name === \"agent\") {\n back.style.display = \"block\";\n back.onclick = () => {\n showView(\"projects\");\n };\n gear.style.display = \"none\";\n title.textContent = \"select agent\";\n } else if (name === \"settings\") {\n back.style.display = \"block\";\n back.onclick = () => {\n showView(\"sessions\");\n loadSessions();\n };\n gear.style.display = \"none\";\n title.textContent = \"settings\";\n renderQuickCmdSettings();\n loadAgentsSettings();\n } else if (name === \"terminal\") {\n back.style.display = \"block\";\n back.onclick = () => {\n destroyTerminal();\n setState({ currentSession: null, currentMachine: \"\" });\n showView(\"sessions\");\n loadSessions();\n };\n gear.style.display = \"none\";\n title.style.display = \"none\";\n loadSessionSwitcher();\n chip.style.display = \"flex\";\n headerCenter.style.transform = \"\";\n const hml = document.getElementById(\"header-machine-label\");\n if (getMachines().length > 0) {\n const mName = state.currentMachine ? getMachines().find((m) => m.url === state.currentMachine)?.name || \"remote\" : state.selfName || \"local\";\n hml.textContent = mName;\n hml.style.display = \"block\";\n }\n } else if (name === \"ralph-detail\") {\n back.style.display = \"block\";\n back.onclick = () => {\n backToSessions();\n };\n gear.style.display = \"none\";\n const ralphMachineSuffix = state.currentRalphMachine ? \" @ \" + (getMachines().find((m) => m.url === state.currentRalphMachine)?.name || \"remote\") : \"\";\n title.textContent = (state.currentRalphProject || \"ralph\") + ralphMachineSuffix;\n refreshRalphDetail();\n state.ralphLogPollTimer = setInterval(refreshRalphDetail, 2000);\n } else if (name === \"ralph-start\") {\n back.style.display = \"block\";\n back.onclick = () => {\n backToSessions();\n };\n gear.style.display = \"none\";\n title.textContent = \"start ralph\";\n loadRalphStartForm();\n }\n };\n applyHeader();\n}\nvar TRIAGE_MAP = {\n running: { dot: \"green\", card: \"active-session\", label: \"running\", title: \"running\" },\n idle: { dot: \"gray\", card: \"idle-session\", label: \"idle\", title: \"idle\" }\n};\nvar VALID_TRIAGE = new Set([\"running\", \"idle\"]);\nfunction safeTriage(v) {\n return VALID_TRIAGE.has(v) ? v : \"idle\";\n}\nfunction triageUi(triage) {\n return TRIAGE_MAP[triage] || TRIAGE_MAP[\"idle\"];\n}\nfunction renderMachineGroupHtml(g, multiMachine) {\n const mUrl = multiMachine ? esc(g.machine.url) : \"\";\n const mUrlAttr = multiMachine ? escAttr(g.machine.url) : \"\";\n const mName = esc(g.machine.name);\n const statusDot = !multiMachine ? \"green\" : g.online ? \"green\" : g.pending ? \"gray\" : \"red\";\n const statusTitle = !multiMachine ? \"online\" : g.online ? \"online\" : g.pending ? \"connecting\" : \"offline\";\n const versionWarning = multiMachine && g.outdated ? `⚠ UPDATE` : \"\";\n let html = multiMachine ? `
` : `
`;\n html += `
${mName}${versionWarning}
`;\n if (multiMachine && g.pending) {\n html += `
Connecting...
`;\n } else if (g.online) {\n if (g.sessions.length) {\n html += g.sessions.map((s, i) => {\n const lastLine = s.lastLine || \"\";\n const ui = triageUi(s.triage);\n const anim = state.firstLoad ? \"animate-in\" : \"\";\n return `
\n
\n
\n
${esc(s.name)}${ui.label}
\n
${esc(lastLine)}
\n
\n \n
`;\n }).join(\"\");\n }\n if (g.loops && g.loops.length) {\n html += g.loops.map((loop) => renderRalphCardHtml(loop, g.machine.url || \"\")).join(\"\");\n }\n } else if (multiMachine) {\n html += `
Offline
`;\n }\n html += `
`;\n return html;\n}\nfunction fetchMachine(machineUrl, machineMeta) {\n const timeoutMs = machineUrl ? WP.peerHealthTimeoutMs(state.peerHealth, machineUrl) : 0;\n const remoteOpts = machineUrl ? { signal: AbortSignal.timeout(timeoutMs) } : undefined;\n const ralphFetch = wpSettings.ralphEnabled ? api(\"/ralph\", remoteOpts, machineUrl || undefined).catch(() => ({ loops: [] })) : Promise.resolve({ loops: [] });\n return Promise.all([api(\"/sessions\", remoteOpts, machineUrl || undefined), api(\"/info\", remoteOpts, machineUrl || undefined), ralphFetch]).then(([d, info, ralph]) => {\n if (machineUrl)\n state.peerHealth = WP.peerHealthRecordSuccess(state.peerHealth, machineUrl);\n return {\n machine: { ...machineMeta, url: machineUrl, version: info.version || \"\", name: info.name || machineMeta.name },\n sessions: d.sessions || [],\n loops: ralph.loops || [],\n online: true,\n pending: false\n };\n }).catch(() => {\n if (machineUrl)\n state.peerHealth = WP.peerHealthRecordFailure(state.peerHealth, machineUrl);\n return {\n machine: { ...machineMeta, url: machineUrl, version: \"\" },\n sessions: [],\n loops: [],\n online: false,\n pending: false\n };\n });\n}\nasync function loadSessions() {\n const myEpoch = ++state.loadSessionsEpoch;\n const el = document.getElementById(\"session-list\");\n const machines = getMachines();\n const multiMachine = machines.length > 0;\n if (!multiMachine) {\n const g = await fetchMachine(\"\", { name: state.selfName || \"this machine\" });\n if (myEpoch !== state.loadSessionsEpoch)\n return;\n state.lastSessionGroups = [g];\n state.allSessions = g.sessions.map((s) => ({ ...s, machineUrl: \"\", machineName: g.machine.name }));\n const html = renderMachineGroupHtml(g, false);\n if (html !== state.lastSessionsHtml) {\n el.innerHTML = html;\n state.lastSessionsHtml = html;\n }\n checkStateTransitions([g]);\n state.firstLoad = false;\n return;\n }\n const allMachines = [\n { url: \"\", meta: { name: state.selfName || \"this machine\" } },\n ...machines.map((m) => ({ url: m.url, meta: m }))\n ];\n if (state.firstLoad) {\n el.innerHTML = allMachines.map((m) => renderMachineGroupHtml({ machine: { ...m.meta, url: m.url }, sessions: [], online: false, pending: true }, true)).join(\"\");\n }\n const groups = new Array(allMachines.length);\n const prevByUrl = new Map((state.lastSessionGroups || []).map((g) => [g.machine.url, g]));\n const pendingPlaceholder = (m) => ({\n machine: { ...m.meta, url: m.url, version: \"\" },\n sessions: [],\n loops: [],\n online: false,\n pending: true\n });\n const groupsInOrder = () => allMachines.map((m, i) => groups[i] || prevByUrl.get(m.url) || pendingPlaceholder(m));\n const renderGroup = (i, g) => {\n const m = allMachines[i];\n const existing = el.querySelector(`[data-machine=\"${escAttr(m.url)}\"]`);\n if (!existing)\n return;\n const newHtml = renderMachineGroupHtml(g, true);\n if (existing.outerHTML !== newHtml) {\n const tmp = document.createElement(\"div\");\n tmp.innerHTML = newHtml;\n existing.replaceWith(tmp.firstElementChild);\n }\n };\n const promises = allMachines.map((m, i) => fetchMachine(m.url, m.meta).then((g) => {\n if (myEpoch !== state.loadSessionsEpoch)\n return;\n groups[i] = g;\n state.lastSessionGroups = groupsInOrder();\n renderGroup(i, g);\n renderSidebar();\n }));\n await Promise.all(promises);\n if (myEpoch !== state.loadSessionsEpoch)\n return;\n const versions = groups.filter((g) => g && g.online && g.machine.version).map((g) => g.machine.version);\n const newestVersion = versions.sort((a, b) => b.localeCompare(a, undefined, { numeric: true }))[0] || \"\";\n if (newestVersion) {\n for (let i = 0;i < groups.length; i++) {\n const g = groups[i];\n if (!g)\n continue;\n const nowOutdated = g.online && g.machine.version !== newestVersion;\n if (nowOutdated !== !!g.outdated) {\n g.outdated = nowOutdated;\n renderGroup(i, g);\n }\n }\n }\n state.firstLoad = false;\n state.lastSessionGroups = groupsInOrder();\n const out = [];\n for (const g of groups) {\n if (!g)\n continue;\n for (const s of g.sessions)\n out.push({ ...s, machineUrl: g.machine.url, machineName: g.machine.name });\n }\n state.allSessions = out;\n checkStateTransitions(groups);\n}\nasync function openSession(name, machineUrl) {\n if (state.currentView !== \"terminal\" && hasPreservedGrid())\n clearPreservedGrid();\n if (state.sessionsExpanded) {\n state.sessionsExpanded = false;\n document.body.classList.remove(\"sessions-expanded\");\n const expandBtn = document.getElementById(\"sidebar-expand-btn\");\n if (expandBtn)\n expandBtn.classList.remove(\"active\");\n if (state.sidebarPinned) {\n const sb = document.getElementById(\"desktop-sidebar\");\n if (sb) {\n sb.classList.remove(\"collapsed\");\n state.sidebarCollapsed = false;\n }\n }\n }\n if (isDesktop() && isGridActive()) {\n const gridIdx = state.gridSessions.findIndex((gs) => gs.session === name && (gs.machine || \"\") === (machineUrl || \"\"));\n if (gridIdx !== -1) {\n setGridFocus(gridIdx);\n return;\n }\n exitGridMode();\n }\n if (isDesktop() && state.currentView === \"terminal\" && state.currentSession) {\n if (state.sidebarAutoExpanded) {\n const sb = document.getElementById(\"desktop-sidebar\");\n if (sb) {\n sb.style.transition = \"none\";\n sb.classList.add(\"collapsed\");\n sb.offsetHeight;\n sb.style.transition = \"\";\n }\n state.sidebarCollapsed = true;\n state.sidebarAutoExpanded = false;\n if (sidebarAutoCollapseTimer) {\n clearTimeout(sidebarAutoCollapseTimer);\n sidebarAutoCollapseTimer = null;\n }\n }\n switchSession(machineUrl ? machineUrl + \"|\" + name : name);\n renderSidebar();\n return;\n }\n destroyTerminal();\n setState({ currentSession: name, currentMachine: machineUrl || \"\" });\n recordRecent(state.currentMachine, name);\n wpMetrics.reset();\n restoreDraft();\n const cached = loadSnapshot(state.currentMachine, name);\n showView(\"terminal\");\n initTerminal(cached);\n renderSidebar();\n}\nasync function showProjectPicker(machineUrl) {\n state.projectMachine = machineUrl || \"\";\n setState({ viewBeforePicker: state.currentView });\n showView(\"projects\");\n document.getElementById(\"new-project-name\").value = \"\";\n const el = document.getElementById(\"project-list\");\n el.innerHTML = '
Loading...
';\n try {\n const data = await api(\"/projects\", undefined, state.projectMachine);\n if (!data.projects?.length) {\n el.innerHTML = '
No projects in ~/Dev
';\n return;\n }\n el.innerHTML = data.projects.map((p) => `\n
\n
\n
${esc(p)}
\n
\n `).join(\"\");\n } catch {\n el.innerHTML = '
Failed to load projects
';\n }\n}\nfunction showTerminalLoading(label) {\n clearPreservedGrid();\n showView(\"terminal\");\n const dtc = document.getElementById(\"desktop-terminal-container\");\n dtc.style.display = \"block\";\n dtc.innerHTML = 'Starting session in ' + esc(label) + \"…\";\n}\nfunction selectProject(project) {\n state.selectedProject = project;\n state.isNewProject = false;\n showAgentPicker();\n}\nfunction selectNewProject() {\n const input = document.getElementById(\"new-project-name\");\n const name = input.value.trim();\n if (!name)\n return;\n state.selectedProject = name;\n state.isNewProject = true;\n showAgentPicker();\n}\nasync function showAgentPicker() {\n showView(\"agent\");\n const el = document.getElementById(\"agent-list\");\n el.innerHTML = '
Loading...
';\n const nameInput = document.getElementById(\"session-name-input\");\n const nameError = document.getElementById(\"session-name-error\");\n nameInput.value = \"\";\n nameInput.classList.remove(\"invalid\");\n nameError.classList.remove(\"visible\");\n try {\n const [data, nameData] = await Promise.all([\n api(\"/settings\", undefined, state.projectMachine),\n api(\"/next-session-name?project=\" + encodeURIComponent(state.selectedProject), undefined, state.projectMachine)\n ]);\n nameInput.value = nameData.name || state.selectedProject;\n const cmds = data.effective?.cmds || [\"shell\"];\n const defaultCmd = data.effective?.agentCmd;\n const html = cmds.map((cmd) => `\n
\n
\n
${esc(cmd)}
\n
\n `).join(\"\");\n el.innerHTML = html;\n } catch {\n el.innerHTML = '
Failed to load agents
';\n }\n}\n(function() {\n const input = document.getElementById(\"session-name-input\");\n const error = document.getElementById(\"session-name-error\");\n input.addEventListener(\"input\", () => {\n const val = input.value.trim();\n if (val && !/^[a-zA-Z0-9_-]+$/.test(val)) {\n input.classList.add(\"invalid\");\n error.textContent = \"letters, numbers, hyphens, underscores only\";\n error.classList.add(\"visible\");\n } else {\n input.classList.remove(\"invalid\");\n error.classList.remove(\"visible\");\n }\n });\n input.addEventListener(\"focus\", () => input.select());\n})();\nasync function loadAgentsSettings() {\n const list = document.getElementById(\"agents-list\");\n if (!list)\n return;\n list.innerHTML = '
Loading...
';\n try {\n const data = await api(\"/settings\");\n renderAgentsList(data);\n } catch (e) {\n list.innerHTML = `
Failed to load: ${esc(errorMessage(e))}
`;\n }\n}\nfunction renderAgentsList(data) {\n const list = document.getElementById(\"agents-list\");\n if (!list)\n return;\n const cmds = data.settings?.cmds || [];\n const defaultCmd = data.effective?.agentCmd;\n if (cmds.length === 0) {\n list.innerHTML = '
No agents — add one below.
';\n return;\n }\n list.innerHTML = cmds.map((c) => {\n const isDefault = c.cmd === defaultCmd && c.enabled;\n return `
\n \n ${esc(c.cmd)}\n ${isDefault ? 'default' : \"\"}\n \n
`;\n }).join(\"\");\n}\nasync function toggleAgentEnabled(cmd, enabled) {\n try {\n const data = await api(\"/settings\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ setCmdEnabled: { cmd, enabled } })\n });\n renderAgentsList(data);\n } catch (e) {\n showAgentAddError(\"Failed to toggle: \" + errorMessage(e));\n loadAgentsSettings();\n }\n}\nasync function removeAgent(cmd) {\n try {\n const data = await api(\"/settings\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ removeCmd: cmd })\n });\n renderAgentsList(data);\n } catch (e) {\n showAgentAddError(\"Failed to remove: \" + errorMessage(e));\n }\n}\nasync function addAgent() {\n const input = document.getElementById(\"agent-add-input\");\n const cmd = (input.value || \"\").trim();\n if (!cmd)\n return;\n showAgentAddError(\"\");\n try {\n const data = await api(\"/settings\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ addCmd: cmd })\n });\n input.value = \"\";\n renderAgentsList(data);\n } catch (e) {\n showAgentAddError(\"Could not add: \" + errorMessage(e));\n }\n}\nfunction showAgentAddError(msg) {\n const el = document.getElementById(\"agent-add-error\");\n if (el)\n el.textContent = msg;\n}\n(function bindAgentSettings() {\n const btn = document.getElementById(\"agent-add-btn\");\n const input = document.getElementById(\"agent-add-input\");\n if (btn)\n btn.addEventListener(\"click\", () => addAgent());\n if (input)\n input.addEventListener(\"keydown\", (e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n addAgent();\n }\n });\n})();\nasync function deleteCustomCmd(cmd, e) {\n if (e)\n e.stopPropagation();\n try {\n await api(\"/settings\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ removeCmd: cmd })\n }, state.projectMachine);\n showAgentPicker();\n } catch (e2) {\n alert(\"Failed to delete command: \" + errorMessage(e2));\n }\n}\nasync function createSessionWithAgent(cmd) {\n const nameInput = document.getElementById(\"session-name-input\");\n const sessionName = (nameInput.value || \"\").trim();\n if (sessionName && !/^[a-zA-Z0-9_-]+$/.test(sessionName))\n return;\n const machine = state.projectMachine;\n showTerminalLoading(sessionName || state.selectedProject);\n try {\n const body = state.isNewProject ? { newProject: state.selectedProject, cmd, sessionName: sessionName || undefined } : { project: state.selectedProject, cmd, sessionName: sessionName || undefined };\n const data = await api(\"/create\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body)\n }, machine);\n if (data.session) {\n setState({ currentSession: data.session, currentMachine: machine });\n loadSessions().then(() => {\n loadSessionSwitcher();\n renderSidebar();\n });\n if (isGridActive()) {\n addToGrid(data.session, machine);\n } else {\n destroyTerminal();\n initTerminal();\n }\n } else {\n alert(\"Failed to create session: Server returned no session (is wolfpack up to date?)\");\n showView(\"sessions\");\n loadSessions();\n }\n } catch (e) {\n alert(\"Failed to create session: \" + errorMessage(e));\n showView(\"sessions\");\n loadSessions();\n }\n}\nfunction connectDesktopWs() {\n if (!state.terminalController)\n return;\n state.terminalController.connect();\n}\nvar _tcState = { displaced: false, autoTakeControl: false };\nfunction showDesktopConflictOverlay() {\n const container = document.getElementById(\"desktop-terminal-container\");\n if (!container)\n return;\n if (state.terminalController && state.terminalController.hydration)\n state.terminalController.hydration.finish();\n removeDesktopConflictOverlay();\n const overlay = createConflictOverlay(\"Session active on another device\", \"Take Control\", () => {\n if (!state.terminalController)\n return;\n var clickAction = WP.handleTakeControlClick(state.terminalController.isConnected);\n if (clickAction === \"send-take-control\") {\n state.terminalController.sendTakeControl();\n } else {\n _tcState = WP.prepareAutoTakeControl(_tcState);\n state.terminalController.reconnect({ takeControl: true });\n }\n });\n overlay.id = \"desktop-conflict-overlay\";\n container.appendChild(overlay);\n}\nfunction removeDesktopConflictOverlay() {\n const el = document.getElementById(\"desktop-conflict-overlay\");\n if (el)\n el.remove();\n}\nasync function initTerminal(cached) {\n if (state.terminalController)\n return;\n if (state._cachedFallbackTimer) {\n clearTimeout(state._cachedFallbackTimer);\n state._cachedFallbackTimer = null;\n }\n const isMobile = !isDesktop();\n const container = document.getElementById(\"desktop-terminal-container\");\n const kbProxy = document.getElementById(\"mobile-kb-proxy\");\n container.style.display = \"block\";\n container.innerHTML = \"\";\n if (cached) {\n container.classList.add(\"cached-visible\");\n container.classList.remove(\"hydrating\", \"hydrated\");\n } else {\n container.classList.add(\"hydrating\");\n container.classList.remove(\"hydrated\", \"cached-visible\");\n }\n document.getElementById(\"kb-accessory\").classList.remove(\"visible\");\n state.kbAccessoryOpen = false;\n document.getElementById(\"input-bar\").style.display = \"none\";\n document.getElementById(\"cmd-palette\").classList.remove(\"visible\");\n document.getElementById(\"msg-preview\").style.display = \"none\";\n if (isMobile) {\n kbProxy.style.display = \"block\";\n kbProxy.setAttribute(\"inputmode\", \"none\");\n kbProxy.setAttribute(\"readonly\", \"\");\n document.body.classList.add(\"mobile-no-ghost-focus\");\n } else {\n kbProxy.style.display = \"none\";\n }\n _tcState = { displaced: false, autoTakeControl: false };\n let _cachedPendingReset = !!cached;\n state._cachedFallbackTimer = cached ? setTimeout(() => {\n state._cachedFallbackTimer = null;\n const el = document.getElementById(\"desktop-terminal-container\");\n if (el)\n el.classList.add(\"hydrated\");\n }, 5000) : null;\n state.terminalController = createPtyTerminalController({\n session: state.currentSession,\n machine: state.currentMachine || \"\",\n scrollback: DESKTOP_TERMINAL_SCROLLBACK,\n prefillMode: \"full\",\n disableStdin: isMobile,\n getHydrationElement: () => document.getElementById(\"desktop-terminal-container\"),\n shouldFocus: () => !isMobile,\n shouldReconnect: () => !!state.terminalController?.term,\n onOpen: (wasReconnect) => {\n if (wasReconnect)\n wpMetrics.reconnectCount++;\n _tcState = WP.handleControlGranted(_tcState);\n removeDesktopConflictOverlay();\n setConnState(\"live\");\n },\n onPtyReady: () => {\n flushMobileKbProxyPendingInput();\n if (state.terminalController)\n state.terminalController.forceRepaint();\n },\n onOutput: (data) => {\n if (_cachedPendingReset) {\n _cachedPendingReset = false;\n if (state._cachedFallbackTimer) {\n clearTimeout(state._cachedFallbackTimer);\n state._cachedFallbackTimer = null;\n }\n const el = document.getElementById(\"desktop-terminal-container\");\n if (el)\n el.classList.remove(\"cached-visible\");\n }\n if (state.enterRetryTimer) {\n clearTimeout(state.enterRetryTimer);\n state.enterRetryTimer = null;\n }\n wpMetrics.wsMessagesReceived++;\n scheduleSnapshotSave(null);\n },\n onViewerConflict: () => {\n var r = WP.handleViewerConflict(_tcState);\n _tcState = r.newState;\n if (r.action === \"auto-take-control\") {\n state.terminalController.sendTakeControl();\n } else {\n showDesktopConflictOverlay();\n }\n },\n onControlGranted: () => {\n _tcState = WP.handleControlGranted(_tcState);\n removeDesktopConflictOverlay();\n if (state.terminalController)\n state.terminalController.focus();\n if (isMobile) {\n const proxy = document.getElementById(\"mobile-kb-proxy\");\n if (proxy && proxy.style.display !== \"none\")\n proxy.focus({ preventScroll: true });\n }\n },\n onDisconnected: (code, reason) => {\n removeDesktopConflictOverlay();\n var action = WP.classifyDisconnect(code, reason || \"\");\n if (action === \"displaced\") {\n _tcState = WP.handleDisplaced(_tcState);\n showDesktopConflictOverlay();\n return;\n }\n if (action === \"session-ended\") {\n setConnState(\"session-ended\");\n const statusEl = document.getElementById(\"conn-status\");\n if (statusEl)\n statusEl.textContent = \"session unavailable — use ← to go back\";\n return;\n }\n if (action === \"pty-exited\") {\n setConnState(\"session-ended\");\n return;\n }\n state.terminalController.scheduleReconnect();\n },\n onReconnecting: () => setConnState(\"reconnecting\"),\n onReconnectExhausted: () => setConnState(\"offline\")\n });\n await state.terminalController.mount(container, { cached });\n if (!state.terminalController)\n return;\n if (!state.terminalController.term) {\n container.innerHTML = '
Terminal unavailable — WebAssembly not supported in this browser
';\n return;\n }\n if (isMobile && state.terminalController.term) {\n let neutralizeGhostFocus = function() {\n if (container.getAttribute(\"contenteditable\") && !container.getAttribute(\"inputmode\")) {\n container.setAttribute(\"inputmode\", \"none\");\n }\n container.querySelectorAll(\"textarea, input\").forEach((el) => {\n if (!el.hasAttribute(\"readonly\")) {\n el.setAttribute(\"tabindex\", \"-1\");\n el.setAttribute(\"inputmode\", \"none\");\n el.setAttribute(\"readonly\", \"\");\n }\n });\n };\n state._touchCleanup = setupTouchScrollHandler(container, state.terminalController.term, (data) => state.terminalController && state.terminalController.send(data), () => !!(state.terminalController && state.terminalController.isConnected));\n neutralizeGhostFocus();\n let _ghostDebounce = null;\n state._ghostInputObserver = new MutationObserver(() => {\n if (_ghostDebounce)\n return;\n _ghostDebounce = requestAnimationFrame(() => {\n _ghostDebounce = null;\n neutralizeGhostFocus();\n });\n });\n state._ghostInputObserver.observe(container, { childList: true, subtree: true, attributes: true, attributeFilter: [\"contenteditable\"] });\n if (document.activeElement && document.activeElement !== document.body) {\n document.activeElement.blur();\n }\n }\n let _lastContainerWidth = container.clientWidth;\n const onResize = () => {\n if (state.desktopResizeTimer)\n clearTimeout(state.desktopResizeTimer);\n state.desktopResizeTimer = setTimeout(() => {\n state.desktopResizeTimer = null;\n const newWidth = container.clientWidth;\n if (isMobile && newWidth === _lastContainerWidth)\n return;\n _lastContainerWidth = newWidth;\n if (state.terminalController) {\n isMobile ? state.terminalController.resize() : state.terminalController.resizeWithTransition();\n }\n }, 60);\n };\n window.addEventListener(\"resize\", onResize);\n state.desktopResizeHandler = onResize;\n if (window.visualViewport && isMobile) {\n const termView = document.getElementById(\"terminal-view\");\n const vvHandler = () => {\n const kbHeight = window.innerHeight - window.visualViewport.height;\n const kbOpen = kbHeight > 150;\n termView.style.transform = kbOpen ? `translateY(-${kbHeight}px)` : \"\";\n const kbBtn = document.getElementById(\"kb-open-btn\");\n if (kbBtn)\n kbBtn.classList.toggle(\"active\", kbOpen);\n if (state.kbAccessoryOpen !== kbOpen) {\n state.kbAccessoryOpen = kbOpen;\n const cmd = document.getElementById(\"cmd-palette\");\n if (cmd && cmd.innerHTML)\n cmd.classList.toggle(\"visible\", kbOpen);\n if (!kbOpen) {\n const p = document.getElementById(\"mobile-kb-proxy\");\n if (p && document.activeElement !== p) {\n p.setAttribute(\"readonly\", \"\");\n p.setAttribute(\"inputmode\", \"none\");\n }\n }\n }\n };\n window.visualViewport.addEventListener(\"resize\", vvHandler);\n state.visualViewportHandler = vvHandler;\n vvHandler();\n }\n connectDesktopWs();\n}\nfunction destroyTerminal() {\n if (state._ghostInputObserver) {\n state._ghostInputObserver.disconnect();\n state._ghostInputObserver = null;\n }\n if (state._cachedFallbackTimer) {\n clearTimeout(state._cachedFallbackTimer);\n state._cachedFallbackTimer = null;\n }\n if (state.snapshotTimer) {\n clearTimeout(state.snapshotTimer);\n state.snapshotTimer = null;\n }\n flushSnapshot();\n if (state.desktopResizeTimer) {\n clearTimeout(state.desktopResizeTimer);\n state.desktopResizeTimer = null;\n }\n if (state._touchCleanup) {\n state._touchCleanup();\n state._touchCleanup = null;\n }\n if (state.terminalController) {\n state.terminalController.dispose();\n state.terminalController = null;\n }\n if (state.desktopResizeHandler) {\n window.removeEventListener(\"resize\", state.desktopResizeHandler);\n state.desktopResizeHandler = null;\n }\n if (state.visualViewportHandler && window.visualViewport) {\n window.visualViewport.removeEventListener(\"resize\", state.visualViewportHandler);\n state.visualViewportHandler = null;\n }\n const termView = document.getElementById(\"terminal-view\");\n if (termView) {\n termView.style.bottom = \"\";\n termView.style.transform = \"\";\n }\n if (state.kbResizeTimer) {\n clearTimeout(state.kbResizeTimer);\n state.kbResizeTimer = null;\n }\n const kbProxy = document.getElementById(\"mobile-kb-proxy\");\n if (kbProxy) {\n kbProxy.blur();\n kbProxy.style.display = \"none\";\n }\n document.body.classList.remove(\"mobile-no-ghost-focus\");\n const container = document.getElementById(\"desktop-terminal-container\");\n container.style.display = \"none\";\n container.classList.remove(\"hydrating\", \"hydrated\");\n container.innerHTML = \"\";\n document.getElementById(\"input-bar\").style.display = \"\";\n renderCmdPalette();\n}\nfunction setConnState(connState) {\n const statusEl = document.getElementById(\"conn-status\");\n if (!statusEl)\n return;\n const active = !!state.terminalController?.term;\n if (state.currentView !== \"terminal\" || !active || connState === \"live\") {\n statusEl.style.display = \"none\";\n statusEl.style.background = \"#cc3333\";\n return;\n }\n if (connState === \"reconnecting\") {\n statusEl.style.display = \"block\";\n statusEl.style.background = \"#8a5a00\";\n statusEl.innerHTML = 'reconnecting…';\n return;\n }\n if (connState === \"displaced\") {\n statusEl.style.display = \"block\";\n statusEl.style.background = \"#8a5a00\";\n statusEl.innerHTML = 'taken over by another viewer — ';\n const retryBtn = document.getElementById(\"conn-retry-btn\");\n if (retryBtn)\n retryBtn.onclick = takeBackControl;\n return;\n }\n if (connState === \"offline\") {\n statusEl.style.display = \"block\";\n statusEl.style.background = \"#cc3333\";\n statusEl.innerHTML = 'connection lost — ';\n const retryBtn = document.getElementById(\"conn-retry-btn\");\n if (retryBtn)\n retryBtn.onclick = retryConnection;\n return;\n }\n statusEl.style.display = \"block\";\n statusEl.style.background = \"#cc3333\";\n statusEl.textContent = \"session ended — use ← to go back\";\n}\nfunction retryConnection() {\n if (!state.terminalController?.term)\n return;\n setConnState(\"reconnecting\");\n connectDesktopWs();\n}\nfunction sendMsg() {\n const input = document.getElementById(\"msg-input\");\n const text = input.value.trim();\n if (!text || !state.currentSession)\n return;\n const saved = text;\n input.value = \"\";\n clearDraft();\n autoResizeInput();\n document.getElementById(\"msg-preview\").style.display = \"none\";\n const btn = document.getElementById(\"send-btn\");\n btn.classList.remove(\"send-flash\");\n btn.offsetWidth;\n btn.classList.add(\"send-flash\");\n wpMetrics.sendCount++;\n if (_sendTerminalInput(_textEncoder.encode(text.replace(/\\n/g, \" \") + \"\\r\"))) {} else {\n wpMetrics.sendFailCount++;\n input.value = saved;\n saveDraft();\n autoResizeInput();\n updatePreview();\n }\n}\nfunction updatePreview() {\n const input = document.getElementById(\"msg-input\");\n const preview = document.getElementById(\"msg-preview\");\n if (input.scrollWidth > input.clientWidth) {\n preview.textContent = input.value;\n preview.style.display = \"block\";\n } else {\n preview.style.display = \"none\";\n }\n}\nfunction sendKey(key) {\n if (!state.currentSession)\n return;\n const esc2 = KEY_TO_ESCAPE[key];\n if (!esc2)\n return;\n wpMetrics.sendCount++;\n if (_sendTerminalInput(_textEncoder.encode(esc2)))\n return;\n wpMetrics.sendFailCount++;\n}\nasync function killSession(name, e, machineUrl) {\n e.stopPropagation();\n if (!confirm(`Kill session \"${name}\"?`))\n return;\n try {\n await api(\"/kill\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ session: name })\n }, machineUrl || \"\");\n } catch (e2) {\n alert(\"Failed to kill session: \" + errorMessage(e2));\n return;\n }\n const wasCurrentSession = name === state.currentSession && (machineUrl || \"\") === state.currentMachine;\n if (wasCurrentSession && state.currentView === \"terminal\") {\n destroyTerminal();\n setState({ currentSession: null, currentMachine: \"\" });\n showView(\"sessions\");\n }\n loadSessions().then(renderSidebar);\n}\nfunction renderDrawerList() {\n const groups = state.lastSessionGroups;\n const list = document.getElementById(\"drawer-list\");\n const multiMachine = getMachines().length > 0;\n const all = [];\n for (const g of groups) {\n for (const s of g.sessions) {\n all.push({ ...s, machineUrl: g.machine.url, machineName: g.machine.name });\n }\n }\n let html = \"\";\n html += all.map((s) => drawerItemHtml(s, multiMachine)).join(\"\");\n if (!all.length) {\n html += `
No active sessions
`;\n }\n list.innerHTML = html;\n list.querySelectorAll(\".drawer-item\").forEach((el) => {\n el.onclick = () => {\n switchSession(el.dataset.val);\n closeDrawer();\n };\n });\n const chipLabel = document.getElementById(\"chip-label\");\n if (chipLabel)\n chipLabel.textContent = state.currentSession || \"\";\n}\nfunction drawerItemHtml(s, multiMachine) {\n const val = s.machineUrl ? s.machineUrl + \"|\" + s.name : s.name;\n const isCurrent = s.name === state.currentSession && s.machineUrl === state.currentMachine;\n const machineLbl = multiMachine ? `${esc(s.machineName)}` : \"\";\n return `
\n
\n ${esc(s.name)}\n ${machineLbl}\n
`;\n}\nfunction loadSessionSwitcher() {\n renderDrawerList();\n}\nvar lastToggleT = 0;\nfunction toggleDrawer() {\n if (isDesktop())\n return;\n var now = Date.now();\n if (now - lastToggleT < 300)\n return;\n lastToggleT = now;\n if (state.drawerOpen)\n closeDrawer();\n else\n openDrawer();\n}\nfunction openDrawer() {\n if (isDesktop())\n return;\n if (state.drawerOpen)\n return;\n state.drawerOpen = true;\n loadSessions().then(renderDrawerList);\n const drawer = document.getElementById(\"session-drawer\");\n const backdrop = document.getElementById(\"drawer-backdrop\");\n const chip = document.getElementById(\"session-chip\");\n drawer.classList.remove(\"animating\");\n drawer.style.transform = \"translate3d(0, -100%, 0)\";\n backdrop.classList.add(\"visible\");\n backdrop.style.opacity = \"0\";\n drawer.offsetHeight;\n drawer.classList.add(\"animating\");\n drawer.classList.add(\"open\");\n drawer.style.transform = \"\";\n backdrop.style.transition = \"opacity 0.25s ease\";\n backdrop.style.opacity = \"1\";\n chip.classList.add(\"open\");\n haptic(5);\n}\nfunction closeDrawer(instant) {\n if (!state.drawerOpen)\n return;\n state.drawerOpen = false;\n const drawer = document.getElementById(\"session-drawer\");\n const backdrop = document.getElementById(\"drawer-backdrop\");\n const chip = document.getElementById(\"session-chip\");\n chip.classList.remove(\"open\");\n if (instant) {\n drawer.classList.remove(\"animating\", \"open\");\n drawer.style.transform = \"\";\n backdrop.classList.remove(\"visible\");\n backdrop.style.opacity = \"\";\n backdrop.style.transition = \"\";\n return;\n }\n drawer.classList.add(\"animating\");\n drawer.classList.remove(\"open\");\n drawer.style.transform = \"translate3d(0, -100%, 0)\";\n backdrop.style.transition = \"opacity 0.25s ease\";\n backdrop.style.opacity = \"0\";\n const cleanup = () => {\n backdrop.classList.remove(\"visible\");\n backdrop.style.opacity = \"\";\n backdrop.style.transition = \"\";\n drawer.style.transform = \"\";\n drawer.classList.remove(\"animating\");\n };\n drawer.addEventListener(\"transitionend\", cleanup, { once: true });\n setTimeout(cleanup, 300);\n}\n(function initDrawerDrag() {\n const hdr = document.querySelector(\"header\");\n const drawer = document.getElementById(\"session-drawer\");\n const backdrop = document.getElementById(\"drawer-backdrop\");\n let startY = 0, startX = 0, startTime = 0, dragging = false, maxDrag = 0;\n let touchTarget = null;\n function onStart(e) {\n if (state.currentView !== \"terminal\")\n return;\n startX = e.touches[0].clientX;\n startY = e.touches[0].clientY;\n startTime = Date.now();\n dragging = false;\n touchTarget = e.target;\n maxDrag = Math.min(drawer.scrollHeight, window.innerHeight * 0.5);\n }\n function onMove(e) {\n if (state.currentView !== \"terminal\")\n return;\n const dy = e.touches[0].clientY - startY;\n if (!state.drawerOpen && dy > 5) {\n if (!dragging) {\n dragging = true;\n drawer.classList.remove(\"animating\", \"open\");\n drawer.style.pointerEvents = \"none\";\n backdrop.classList.add(\"visible\");\n }\n const progress = Math.min(dy / maxDrag, 1);\n drawer.style.transform = `translate3d(0, ${-100 + progress * 100}%, 0)`;\n backdrop.style.opacity = String(progress);\n backdrop.style.transition = \"none\";\n }\n if (state.drawerOpen && dy < -5) {\n if (!dragging) {\n dragging = true;\n drawer.classList.remove(\"animating\");\n }\n const progress = Math.min(Math.abs(dy) / maxDrag, 1);\n drawer.style.transform = `translate3d(0, ${-progress * 100}%, 0)`;\n backdrop.style.opacity = String(1 - progress);\n backdrop.style.transition = \"none\";\n }\n }\n function onEnd(e) {\n if (!dragging) {\n const dt = Date.now() - startTime;\n const ex = e.changedTouches[0].clientX, ey = e.changedTouches[0].clientY;\n const dist = Math.abs(ex - startX) + Math.abs(ey - startY);\n if (dt < 300 && dist < 15 && touchTarget) {\n const chip = document.getElementById(\"session-chip\");\n if (chip && chip.contains(touchTarget)) {\n toggleDrawer();\n return;\n }\n const item = touchTarget.closest(\".drawer-item\");\n if (item && state.drawerOpen) {\n item.click();\n return;\n }\n }\n return;\n }\n dragging = false;\n const dy = e.changedTouches[0].clientY - startY;\n const elapsed = Date.now() - startTime;\n const velocity = Math.abs(dy) / Math.max(elapsed, 1) * 1000;\n const threshold = maxDrag * 0.25;\n if (!state.drawerOpen) {\n if (dy > threshold || velocity > 300 && dy > 10) {\n const baseDur = 0.22;\n const speedFactor = Math.min(velocity / 1500, 1);\n const dur = Math.max(0.1, baseDur * (1 - speedFactor * 0.6));\n drawer.style.transition = `transform ${dur.toFixed(2)}s cubic-bezier(0.2, 0.9, 0.3, 1)`;\n drawer.style.transform = \"translate3d(0, 0, 0)\";\n backdrop.style.transition = `opacity ${dur.toFixed(2)}s ease`;\n backdrop.style.opacity = \"1\";\n state.drawerOpen = true;\n document.getElementById(\"session-chip\").classList.add(\"open\");\n haptic(5);\n drawer.addEventListener(\"transitionend\", () => {\n drawer.style.transition = \"\";\n drawer.style.pointerEvents = \"\";\n drawer.classList.add(\"open\");\n }, { once: true });\n } else {\n drawer.style.transition = \"transform 0.2s cubic-bezier(0.2, 0.9, 0.3, 1)\";\n drawer.style.transform = \"translate3d(0, -100%, 0)\";\n backdrop.style.transition = \"opacity 0.2s ease\";\n backdrop.style.opacity = \"0\";\n drawer.addEventListener(\"transitionend\", () => {\n drawer.style.transition = \"\";\n drawer.style.transform = \"\";\n drawer.style.pointerEvents = \"\";\n backdrop.classList.remove(\"visible\");\n backdrop.style.opacity = \"\";\n backdrop.style.transition = \"\";\n }, { once: true });\n }\n } else {\n if (Math.abs(dy) > threshold || velocity > 300 && dy < -10) {\n closeDrawer();\n } else {\n drawer.style.transition = \"transform 0.2s cubic-bezier(0.2, 0.9, 0.3, 1)\";\n drawer.style.transform = \"translate3d(0, 0, 0)\";\n backdrop.style.transition = \"opacity 0.2s ease\";\n backdrop.style.opacity = \"1\";\n drawer.addEventListener(\"transitionend\", () => {\n drawer.style.transition = \"\";\n drawer.classList.add(\"open\");\n }, { once: true });\n }\n }\n }\n hdr.addEventListener(\"touchstart\", onStart, { passive: true });\n hdr.addEventListener(\"touchmove\", onMove, { passive: true });\n hdr.addEventListener(\"touchend\", onEnd, { passive: true });\n drawer.addEventListener(\"touchstart\", onStart, { passive: true });\n drawer.addEventListener(\"touchmove\", onMove, { passive: true });\n drawer.addEventListener(\"touchend\", onEnd, { passive: true });\n})();\nasync function switchSession(val) {\n state.sidebarResizeDone = false;\n let name, machineUrl;\n const pipeIdx = val.indexOf(\"|\");\n if (pipeIdx !== -1) {\n machineUrl = val.substring(0, pipeIdx);\n name = val.substring(pipeIdx + 1);\n } else {\n machineUrl = \"\";\n name = val;\n }\n if (name === state.currentSession && machineUrl === state.currentMachine) {\n if (state.terminalController) {\n if (!state.terminalController.isConnected)\n connectDesktopWs();\n } else if (state.currentView === \"terminal\") {\n initTerminal();\n }\n return;\n }\n closeDrawer(true);\n if (isGridActive())\n exitGridMode();\n destroyTerminal();\n setState({ currentSession: name, currentMachine: machineUrl });\n recordRecent(machineUrl, name);\n restoreDraft();\n loadSessionSwitcher();\n const hml = document.getElementById(\"header-machine-label\");\n if (getMachines().length > 0) {\n const mName = machineUrl ? getMachines().find((m) => m.url === machineUrl)?.name || \"remote\" : state.selfName || \"local\";\n hml.textContent = mName;\n hml.style.display = \"block\";\n }\n initTerminal();\n renderSidebar();\n}\nvar prevSessionStates = {};\nfunction checkStateTransitions(groups) {\n if (!wpSettings.notifications)\n return;\n for (const g of groups) {\n if (!g.online)\n continue;\n const mUrl = g.machine.url || \"\";\n for (const s of g.sessions) {\n const key = mUrl + \"|\" + s.name;\n const prev = prevSessionStates[key];\n const cur = s.triage || \"idle\";\n prevSessionStates[key] = cur;\n if (prev === \"running\" && cur === \"idle\") {\n haptic([200, 100, 200]);\n }\n }\n checkRalphTransitions(g.loops, mUrl, g.machine.name || \"local\");\n }\n}\nvar _hiddenAt = 0;\nvar DESKTOP_STALE_THRESHOLD_MS = 60000;\ndocument.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === \"visible\") {\n const hiddenDuration = _hiddenAt ? Date.now() - _hiddenAt : 0;\n _hiddenAt = 0;\n if (isDesktop() && !sidebarRefreshTimer) {\n startSidebarRefresh();\n }\n if (state.currentView === \"sessions\" && !state.sessionRefreshTimer) {\n loadSessions();\n state.sessionRefreshTimer = setInterval(loadSessions, 5000);\n }\n if (state.currentSession && state.currentView === \"terminal\") {\n if (!isDesktop()) {\n if (isGridActive()) {\n for (const gs of state.gridSessions) {\n if (!gs.controller || gs._displaced)\n continue;\n gs.controller.resetRetry();\n gs.controller.reconnect();\n }\n } else if (state.terminalController?.term) {\n state.terminalController.resetRetry();\n state.terminalController.reconnect();\n }\n } else if (hiddenDuration > DESKTOP_STALE_THRESHOLD_MS) {\n if (isGridActive()) {\n for (const gs of state.gridSessions) {\n if (!gs.controller || gs._displaced)\n continue;\n gs.controller.resetRetry();\n gs.controller.reconnect();\n }\n } else if (state.terminalController?.term) {\n state.terminalController.resetRetry();\n state.terminalController.reconnect();\n }\n } else {\n if (isGridActive()) {\n for (const gs of state.gridSessions) {\n if (gs.controller)\n gs.controller.forceRepaint?.();\n }\n } else if (state.terminalController?.term) {\n state.terminalController.forceRepaint();\n }\n }\n }\n } else {\n _hiddenAt = Date.now();\n if (state.sessionRefreshTimer) {\n clearInterval(state.sessionRefreshTimer);\n state.sessionRefreshTimer = null;\n }\n if (sidebarRefreshTimer) {\n clearInterval(sidebarRefreshTimer);\n sidebarRefreshTimer = null;\n }\n }\n});\nfunction _wfRepaintAllTerminals() {\n if (state.currentView !== \"terminal\")\n return;\n if (isGridActive()) {\n for (const gs of state.gridSessions) {\n if (gs.controller && !gs._displaced)\n gs.controller.forceRepaint?.();\n }\n } else if (state.terminalController?.term) {\n state.terminalController.forceRepaint();\n }\n}\nwindow.addEventListener(\"focus\", _wfRepaintAllTerminals);\nwindow.addEventListener(\"pageshow\", (e) => {\n if (e.persisted)\n _wfRepaintAllTerminals();\n});\nsetInterval(() => {\n if (document.visibilityState === \"visible\")\n _wfRepaintAllTerminals();\n}, 30000);\ndocument.getElementById(\"desktop-terminal-container\").addEventListener(\"click\", () => {\n document.getElementById(\"msg-preview\").style.display = \"none\";\n});\nfunction autoResizeInput() {\n const ta = document.getElementById(\"msg-input\");\n ta.style.height = \"auto\";\n ta.style.height = Math.min(ta.scrollHeight, 120) + \"px\";\n}\nvar msgInput = document.getElementById(\"msg-input\");\nmsgInput.addEventListener(\"input\", () => {\n autoResizeInput();\n updatePreview();\n saveDraft();\n});\nmsgInput.addEventListener(\"keydown\", (e) => {\n if (state.currentView !== \"terminal\")\n return;\n const empty = !msgInput.value.trim();\n if (e.key === \"Enter\") {\n if (wpSettings.enterSends) {\n if (!e.shiftKey) {\n e.preventDefault();\n if (empty)\n sendKey(\"Enter\");\n else\n sendMsg();\n }\n } else {\n if (e.shiftKey) {\n e.preventDefault();\n if (empty)\n sendKey(\"Enter\");\n else\n sendMsg();\n }\n }\n } else if (e.key === \"ArrowUp\" && empty) {\n e.preventDefault();\n sendKey(\"Up\");\n } else if (e.key === \"ArrowDown\" && empty) {\n e.preventDefault();\n sendKey(\"Down\");\n }\n});\n(function setupSendButton() {\n const btn = document.getElementById(\"send-btn\");\n const HOLD_MS = 400;\n const LARGE_THRESHOLD = 50;\n let holdTimer = null;\n let holdStarted = false;\n function needsHold() {\n if (!wpSettings.holdToSend)\n return false;\n const text = document.getElementById(\"msg-input\").value.trim();\n return text.length > LARGE_THRESHOLD;\n }\n function startHold(e) {\n if (!needsHold()) {\n sendMsg();\n return;\n }\n e.preventDefault();\n holdStarted = true;\n btn.classList.add(\"holding\");\n btn.style.setProperty(\"--hold-duration\", HOLD_MS + \"ms\");\n holdTimer = setTimeout(() => {\n btn.classList.remove(\"holding\");\n btn.classList.add(\"hold-complete\");\n haptic([10, 30, 10]);\n sendMsg();\n setTimeout(() => btn.classList.remove(\"hold-complete\"), 300);\n holdStarted = false;\n }, HOLD_MS);\n }\n function cancelHold() {\n if (holdTimer) {\n clearTimeout(holdTimer);\n holdTimer = null;\n }\n btn.classList.remove(\"holding\", \"hold-complete\");\n holdStarted = false;\n }\n btn.addEventListener(\"touchstart\", (e) => {\n startHold(e);\n }, { passive: false });\n btn.addEventListener(\"touchend\", cancelHold);\n btn.addEventListener(\"touchcancel\", cancelHold);\n btn.addEventListener(\"mousedown\", (e) => {\n if (e.button !== 0)\n return;\n startHold(e);\n });\n btn.addEventListener(\"mouseup\", cancelHold);\n btn.addEventListener(\"mouseleave\", cancelHold);\n})();\n(function setupKbAccessory() {\n const acc = document.getElementById(\"kb-accessory\");\n if (!acc)\n return;\n acc.querySelectorAll(\".kb-key\").forEach((btn) => {\n const key = btn.dataset.key;\n if (!key)\n return;\n let touchFired = false;\n function fire() {\n haptic([15]);\n sendKey(key);\n }\n btn.addEventListener(\"mousedown\", (e) => e.preventDefault());\n btn.addEventListener(\"touchstart\", (e) => {\n e.preventDefault();\n touchFired = true;\n fire();\n }, { passive: false });\n btn.addEventListener(\"click\", () => {\n if (touchFired) {\n touchFired = false;\n return;\n }\n fire();\n });\n });\n})();\n(function setupMobileKbProxy() {\n const proxy = document.getElementById(\"mobile-kb-proxy\");\n if (!proxy)\n return;\n let _composing = false;\n let _skipNextInput = false;\n proxy.addEventListener(\"compositionstart\", () => {\n _composing = true;\n });\n proxy.addEventListener(\"compositionend\", () => {\n _composing = false;\n if (proxy.value) {\n _skipNextInput = sendMobileProxyText(proxy, proxy.value);\n }\n });\n proxy.addEventListener(\"input\", (e) => {\n if (_skipNextInput) {\n _skipNextInput = false;\n return;\n }\n if (e.inputType === \"deleteContentBackward\")\n return;\n if (e.inputType === \"insertLineBreak\" || e.inputType === \"insertParagraph\")\n return;\n if (_composing && proxy.value) {\n const last = proxy.value.slice(-1);\n sendMobileProxyText(proxy, last);\n return;\n }\n sendMobileProxyText(proxy, proxy.value || e.data || \"\");\n });\n proxy.addEventListener(\"keydown\", (e) => {\n if (e.key === \"Enter\") {\n if (_sendTerminalInput(_textEncoder.encode(\"\\r\")))\n e.preventDefault();\n } else if (e.key === \"Backspace\") {\n if (_sendTerminalInput(_textEncoder.encode(\"\")) || !proxy.value)\n e.preventDefault();\n } else if (e.key === \"Escape\") {\n if (_sendTerminalInput(_textEncoder.encode(\"\\x1B\")))\n e.preventDefault();\n }\n });\n const kbOpenBtn = document.getElementById(\"kb-open-btn\");\n if (kbOpenBtn) {\n let toggleMobileKeyboard = function() {\n if (proxy.style.display === \"none\")\n return;\n const opening = document.activeElement !== proxy;\n if (opening) {\n proxy.removeAttribute(\"readonly\");\n proxy.setAttribute(\"inputmode\", \"text\");\n proxy.focus({ preventScroll: true });\n } else {\n proxy.blur();\n proxy.setAttribute(\"readonly\", \"\");\n proxy.setAttribute(\"inputmode\", \"none\");\n }\n state.kbAccessoryOpen = opening;\n const cmd = document.getElementById(\"cmd-palette\");\n if (cmd && cmd.innerHTML)\n cmd.classList.toggle(\"visible\", opening);\n };\n kbOpenBtn.addEventListener(\"mousedown\", (e) => e.preventDefault());\n kbOpenBtn.addEventListener(\"touchstart\", () => {\n haptic([15]);\n }, { passive: true });\n kbOpenBtn.addEventListener(\"click\", () => {\n toggleMobileKeyboard();\n });\n }\n})();\nfunction backToSessions() {\n if (isDesktop()) {\n state.sessionsExpanded = true;\n document.body.classList.add(\"sessions-expanded\");\n const expandBtn = document.getElementById(\"sidebar-expand-btn\");\n if (expandBtn)\n expandBtn.classList.add(\"active\");\n const sb = document.getElementById(\"desktop-sidebar\");\n if (sb) {\n sb.classList.add(\"collapsed\");\n state.sidebarCollapsed = true;\n state.sidebarAutoExpanded = false;\n }\n }\n showView(\"sessions\");\n loadSessions();\n}\ndocument.addEventListener(\"keydown\", (e) => {\n if (e.key !== \"Escape\")\n return;\n if (state.currentView === \"agent\") {\n e.preventDefault();\n showView(\"projects\");\n } else if (state.currentView === \"projects\") {\n e.preventDefault();\n showView(state.viewBeforePicker);\n loadSessions();\n } else if (state.currentView === \"ralph-start\" || state.currentView === \"ralph-detail\") {\n e.preventDefault();\n backFromRalph();\n } else if (state.currentView === \"settings\") {\n e.preventDefault();\n backFromSettings();\n }\n});\ndocument.addEventListener(\"keydown\", (e) => {\n if (!isDesktop())\n return;\n const mod = e.metaKey || e.ctrlKey;\n if (!mod)\n return;\n if (e.key === \"ArrowUp\" || e.key === \"ArrowDown\") {\n e.preventDefault();\n e.stopPropagation();\n if (isGridActive()) {\n const count = state.gridSessions.length;\n const next2 = e.key === \"ArrowDown\" ? (state.gridFocusIndex + 1) % count : (state.gridFocusIndex - 1 + count) % count;\n setGridFocus(next2);\n return;\n }\n if (!state.allSessions.length)\n return;\n let curIdx = state.allSessions.findIndex((s2) => s2.name === state.currentSession && (s2.machineUrl || \"\") === state.currentMachine);\n if (curIdx === -1)\n curIdx = e.key === \"ArrowDown\" ? -1 : state.allSessions.length;\n const next = e.key === \"ArrowDown\" ? (curIdx + 1) % state.allSessions.length : (curIdx - 1 + state.allSessions.length) % state.allSessions.length;\n const s = state.allSessions[next];\n openSession(s.name, s.machineUrl || undefined);\n return;\n }\n if (e.key === \"t\") {\n e.preventDefault();\n e.stopPropagation();\n showProjectPicker();\n return;\n }\n if (e.key === \"k\") {\n e.preventDefault();\n e.stopPropagation();\n if (isGridActive()) {\n const gs = state.gridSessions[state.gridFocusIndex];\n if (gs && gs.controller && gs.controller.term)\n gs.controller.term.clear();\n } else if (state.terminalController?.term) {\n state.terminalController.term.clear();\n }\n return;\n }\n if (isGridActive() && (e.key === \"ArrowLeft\" || e.key === \"ArrowRight\")) {\n e.preventDefault();\n e.stopPropagation();\n const count = state.gridSessions.length;\n let newIdx = state.gridFocusIndex;\n if (e.key === \"ArrowLeft\")\n newIdx = Math.max(0, state.gridFocusIndex - 1);\n else if (e.key === \"ArrowRight\")\n newIdx = Math.min(count - 1, state.gridFocusIndex + 1);\n if (newIdx !== state.gridFocusIndex)\n setGridFocus(newIdx);\n return;\n }\n}, true);\ndocument.getElementById(\"new-project-name\").addEventListener(\"keydown\", (e) => {\n if (e.key === \"Enter\")\n selectNewProject();\n});\nasync function showSettings() {\n setState({ viewBeforeSettings: state.currentView });\n showView(\"settings\");\n renderMachinesList();\n toggleDebugPanel();\n}\nasync function renderMachinesList() {\n const machines = getMachines();\n const el = document.getElementById(\"machines-list\");\n if (!machines.length) {\n el.innerHTML = '
No remote machines added
';\n return;\n }\n const checks = await Promise.all(machines.map((m) => fetch(new URL(\"/api/info\", m.url).href, { signal: AbortSignal.timeout(3000) }).then(() => true).catch(() => false)));\n el.innerHTML = machines.map((m, i) => {\n const dot = checks[i] ? \"green\" : \"red\";\n const dotTitle = checks[i] ? \"online\" : \"offline\";\n return `
\n
\n ${esc(m.name)}${esc(m.url)}\n \n
`;\n }).join(\"\");\n}\nfunction removeMachineUI(url) {\n removeMachine(url);\n renderMachinesList();\n}\nasync function discoverMachines() {\n const statusEl = document.getElementById(\"discover-status\");\n statusEl.textContent = \"Scanning tailnet...\";\n statusEl.style.color = \"#555\";\n try {\n const data = await api(\"/discover\");\n const peers = data.peers || [];\n if (!peers.length) {\n statusEl.textContent = \"No wolfpack instances found on tailnet\";\n statusEl.style.color = \"#555\";\n return;\n }\n const peerUrls = new Set(peers.map((p) => p.url));\n let machines = getMachines();\n const before = machines.length;\n machines = machines.filter((m) => peerUrls.has(m.url));\n const pruned = before - machines.length;\n let added = 0;\n for (const p of peers) {\n const existing = machines.find((m) => m.url === p.url);\n if (!existing) {\n machines.push({ url: p.url, name: p.name || p.hostname });\n added++;\n } else if (existing.name !== (p.name || p.hostname)) {\n existing.name = p.name || p.hostname;\n }\n }\n if (added > 0 || pruned > 0) {\n saveMachines(machines);\n renderMachinesList();\n }\n const parts = [`Found ${peers.length}`];\n if (added > 0)\n parts.push(`added ${added}`);\n if (pruned > 0)\n parts.push(`pruned ${pruned} stale`);\n if (!added && !pruned)\n parts.push(\"all up to date\");\n statusEl.textContent = parts.join(\", \");\n statusEl.style.color = \"#00ff41\";\n } catch (e) {\n statusEl.textContent = errorMessage(e);\n statusEl.style.color = \"#cc3333\";\n }\n}\nif (!isDesktop()) {\n let applySwipe = function() {\n if (!fgEl)\n return;\n const progress = Math.min(Math.abs(dx) / W(), 1);\n if (isBack) {\n fgEl.style.transform = `translate3d(${Math.max(0, dx)}px, 0, 0)`;\n bgEl.style.transform = `translate3d(${-30 + progress * 30}%, 0, 0)`;\n } else {\n if (swipeCard)\n swipeCard.style.transform = `translate3d(${Math.min(0, dx)}px, 0, 0)`;\n bgEl.style.transform = `translate3d(${100 - progress * 100}%, 0, 0)`;\n }\n };\n const vc = document.getElementById(\"view-container\");\n let sx = 0, sy = 0, st = 0, dx = 0;\n let locked = false, scrolling = false, rafId = 0;\n let isBack = false;\n let fgEl = null, bgEl = null;\n let swipeCard = null;\n const W = () => window.innerWidth;\n const BACK_TARGET = {\n terminal: \"sessions\",\n \"ralph-detail\": \"sessions\",\n projects: \"sessions\",\n agent: \"projects\",\n settings: \"sessions\",\n \"ralph-start\": \"sessions\"\n };\n vc.addEventListener(\"touchstart\", (e) => {\n if (e.touches.length !== 1)\n return;\n sx = e.touches[0].clientX;\n sy = e.touches[0].clientY;\n st = Date.now();\n dx = 0;\n locked = false;\n scrolling = false;\n fgEl = null;\n bgEl = null;\n swipeCard = null;\n }, { passive: true });\n vc.addEventListener(\"touchmove\", (e) => {\n if (e.touches.length !== 1 || scrolling)\n return;\n const cx = e.touches[0].clientX, cy = e.touches[0].clientY;\n dx = cx - sx;\n const dy = cy - sy;\n if (!locked) {\n if (Math.abs(dx) < 5 && Math.abs(dy) < 5)\n return;\n if (Math.abs(dy) > Math.abs(dx) * 0.7) {\n scrolling = true;\n return;\n }\n locked = true;\n const backTarget = BACK_TARGET[state.currentView];\n const edgeOnly = state.currentView === \"terminal\";\n if (dx > 0 && backTarget && (!edgeOnly || sx < 40)) {\n isBack = true;\n fgEl = document.getElementById(state.currentView + \"-view\");\n bgEl = document.getElementById(backTarget + \"-view\");\n } else if (dx < 0) {\n const card = e.target.closest(\".card, .ralph-card\");\n if (!card) {\n scrolling = true;\n return;\n }\n swipeCard = card;\n isBack = false;\n fgEl = document.getElementById(state.currentView + \"-view\");\n const isRalphCard = card.classList.contains(\"ralph-card\");\n const targetView = state.currentView === \"sessions\" ? isRalphCard ? \"ralph-detail\" : \"terminal\" : null;\n if (!targetView) {\n scrolling = true;\n return;\n }\n bgEl = document.getElementById(targetView + \"-view\");\n } else {\n scrolling = true;\n return;\n }\n vc.classList.add(\"swipe-active\");\n if (isBack) {\n fgEl.style.zIndex = \"2\";\n fgEl.classList.add(\"swiping\");\n bgEl.style.transform = \"translate3d(-30%, 0, 0)\";\n bgEl.classList.add(\"visible\");\n bgEl.style.zIndex = \"0\";\n } else {\n bgEl.style.transform = \"translate3d(100%, 0, 0)\";\n bgEl.classList.add(\"visible\");\n bgEl.style.zIndex = \"2\";\n fgEl.style.zIndex = \"1\";\n }\n }\n if (locked)\n e.preventDefault();\n cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(applySwipe);\n }, { passive: false });\n vc.addEventListener(\"touchend\", () => {\n cancelAnimationFrame(rafId);\n if (!fgEl || !locked) {\n vc.classList.remove(\"swipe-active\");\n return;\n }\n const elapsed = Date.now() - st;\n const velocity = Math.abs(dx) / Math.max(elapsed, 1) * 1000;\n const committed = Math.abs(dx) > 60 || velocity > 250 && Math.abs(dx) > 15;\n const shouldComplete = isBack ? committed && dx > 0 : committed && dx < 0;\n const fg = fgEl, bg = bgEl, card = swipeCard, back = isBack;\n if (card) {\n card.style.transform = \"\";\n }\n if (!shouldComplete) {\n bg.classList.remove(\"visible\");\n [fg, bg].forEach((el) => {\n el.style.zIndex = \"\";\n el.style.transform = \"\";\n el.classList.remove(\"swiping\");\n });\n } else {\n fg.classList.remove(\"visible\");\n [fg, bg].forEach((el) => {\n el.style.zIndex = \"\";\n el.style.transform = \"\";\n el.classList.remove(\"swiping\");\n });\n haptic(10);\n state.swipeNavigated = true;\n if (back) {\n const backView = BACK_TARGET[state.currentView];\n if (backView === \"sessions\") {\n const backBtn = document.getElementById(\"back-btn\");\n if (backBtn && backBtn.onclick)\n backBtn.onclick();\n } else {\n showView(backView, true);\n }\n } else if (card) {\n card.click();\n }\n }\n vc.classList.remove(\"swipe-active\");\n fgEl = null;\n bgEl = null;\n swipeCard = null;\n }, { passive: true });\n}\nvar sidebarRefreshTimer = null;\nvar sidebarAutoCollapseTimer = null;\nvar sidebarInitialRender = false;\nvar _sidebarRafId = null;\nvar _lastSidebarHtml = \"\";\nfunction renderSidebar() {\n if (!isDesktop())\n return;\n if (_sidebarRafId)\n return;\n _sidebarRafId = requestAnimationFrame(() => {\n _sidebarRafId = null;\n _renderSidebarNow();\n });\n}\nfunction _renderSidebarNow() {\n const el = document.getElementById(\"sidebar-session-list\");\n if (!el)\n return;\n const groups = state.lastSessionGroups;\n if (!groups.length && sidebarInitialRender)\n return;\n if (groups.length)\n sidebarInitialRender = true;\n const machines = getMachines();\n const multiMachine = machines.length > 0;\n let html = \"\";\n if (!multiMachine) {\n const g = groups[0];\n const sidebarBtns = '
+ New Session
';\n if (g && g.online && g.sessions.length) {\n html += sidebarBtns;\n html += g.sessions.map((s) => sidebarCardHtml(s, \"\")).join(\"\");\n } else {\n html += sidebarBtns;\n html += '
No active sessions
';\n }\n if (g && g.online && g.loops && g.loops.length) {\n html += g.loops.map((loop) => sidebarRalphCardHtml(loop, \"\")).join(\"\");\n }\n } else {\n for (const g of groups) {\n const mUrl = escAttr(g.machine.url);\n const mName = esc(g.machine.name);\n const statusDot = g.online ? \"green\" : g.pending ? \"gray\" : \"red\";\n html += `
`;\n html += `
${mName}
`;\n if (g.online && g.sessions.length) {\n html += g.sessions.map((s) => sidebarCardHtml(s, g.machine.url)).join(\"\");\n } else if (g.pending) {\n html += '
Connecting...
';\n } else if (!g.online) {\n html += '
Offline
';\n }\n if (g.online && g.loops && g.loops.length) {\n html += g.loops.map((loop) => sidebarRalphCardHtml(loop, g.machine.url)).join(\"\");\n }\n html += \"
\";\n }\n }\n if (html === _lastSidebarHtml)\n return;\n _lastSidebarHtml = html;\n el.innerHTML = html;\n}\nfunction sidebarCardHtml(s, machineUrl) {\n const lastLine = s.lastLine || \"\";\n const ui = triageUi(s.triage);\n const isActive = s.name === state.currentSession && machineUrl === state.currentMachine;\n const inGrid = isSessionInGrid(s.name, machineUrl);\n const activeClass = isActive ? \" sidebar-active\" : inGrid ? \" sidebar-grid\" : \"\";\n const onclick = machineUrl ? `openSession('${escAttr(s.name)}', '${escAttr(machineUrl)}')` : `openSession('${escAttr(s.name)}')`;\n const gridBtnOnclick = machineUrl ? `toggleGrid('${escAttr(s.name)}', '${escAttr(machineUrl)}', event)` : `toggleGrid('${escAttr(s.name)}', '', event)`;\n const gridBtn = ``;\n return `
\n
\n
\n
${esc(s.name)}
\n
${ui.label}
\n
${esc(lastLine)}
\n
\n ${gridBtn}\n \n
`;\n}\nfunction updatePinButton() {\n const btn = document.getElementById(\"sidebar-collapse-btn\");\n btn.classList.toggle(\"pinned\", state.sidebarPinned);\n btn.title = state.sidebarPinned ? \"Unpin sidebar\" : \"Pin sidebar\";\n}\nfunction initSidebar() {\n if (!isDesktop())\n return;\n const sidebar = document.getElementById(\"desktop-sidebar\");\n const hoverEdge = document.getElementById(\"sidebar-hover-edge\");\n if (!state.sidebarPinned) {\n sidebar.classList.add(\"collapsed\");\n state.sidebarCollapsed = true;\n }\n document.body.classList.toggle(\"sidebar-pinned\", state.sidebarPinned);\n updatePinButton();\n document.getElementById(\"sidebar-collapse-btn\").onclick = () => {\n state.sidebarPinned = !state.sidebarPinned;\n localStorage.setItem(\"wolfpack-sidebar-pinned\", state.sidebarPinned ? \"1\" : \"0\");\n state.sidebarTransitionIsHover = false;\n if (!state.sidebarResizeDone)\n hideGridCellsForTransition();\n document.body.classList.toggle(\"sidebar-pinned\", state.sidebarPinned);\n if (state.sidebarPinned) {\n sidebar.classList.remove(\"collapsed\");\n state.sidebarCollapsed = false;\n state.sidebarAutoExpanded = false;\n } else {\n sidebar.classList.add(\"collapsed\");\n state.sidebarCollapsed = true;\n }\n updatePinButton();\n };\n document.getElementById(\"sidebar-expand-btn\").onclick = () => {\n state.sessionsExpanded = !state.sessionsExpanded;\n document.body.classList.toggle(\"sessions-expanded\", state.sessionsExpanded);\n document.getElementById(\"sidebar-expand-btn\").classList.toggle(\"active\", state.sessionsExpanded);\n state.sidebarTransitionIsHover = false;\n if (!state.sidebarResizeDone)\n hideGridCellsForTransition();\n if (state.sessionsExpanded) {\n sidebar.classList.add(\"collapsed\");\n state.sidebarCollapsed = true;\n state.sidebarAutoExpanded = false;\n showView(\"sessions\");\n loadSessions();\n } else {\n if (state.sidebarPinned) {\n sidebar.classList.remove(\"collapsed\");\n state.sidebarCollapsed = false;\n }\n if (state.currentSession || hasPreservedGrid())\n returnToTerminalView();\n }\n };\n hoverEdge.addEventListener(\"mouseenter\", () => {\n if (state.sidebarCollapsed && !state.sidebarPinned && !state.sessionsExpanded) {\n state.sidebarTransitionIsHover = true;\n if (!state.sidebarResizeDone)\n hideGridCellsForTransition();\n sidebar.classList.remove(\"collapsed\");\n state.sidebarAutoExpanded = true;\n }\n });\n sidebar.addEventListener(\"mouseleave\", () => {\n if (state.sidebarAutoExpanded && !state.sidebarPinned) {\n sidebarAutoCollapseTimer = setTimeout(() => {\n if (state.sidebarAutoExpanded) {\n state.sidebarTransitionIsHover = true;\n if (!state.sidebarResizeDone)\n hideGridCellsForTransition();\n sidebar.classList.add(\"collapsed\");\n state.sidebarCollapsed = true;\n state.sidebarAutoExpanded = false;\n }\n }, 300);\n }\n });\n sidebar.addEventListener(\"mouseenter\", () => {\n if (sidebarAutoCollapseTimer) {\n clearTimeout(sidebarAutoCollapseTimer);\n sidebarAutoCollapseTimer = null;\n }\n });\n sidebar.addEventListener(\"transitionend\", (e) => {\n if (e.propertyName !== \"margin-left\")\n return;\n if (state.sidebarTransitionIsHover) {\n revealGridCellsWithoutResize();\n state.sidebarTransitionIsHover = false;\n } else if (!state.sidebarAutoExpanded) {\n if (isGridActive()) {\n scheduleGridStabilizedFit();\n } else if (state.terminalController) {\n state.terminalController.resizeWithTransition();\n }\n revealGridCellsWithoutResize();\n }\n state.sidebarResizeDone = true;\n });\n document.getElementById(\"sidebar-settings-btn\").onclick = () => showSettings();\n startSidebarRefresh();\n renderSidebar();\n}\nfunction startSidebarRefresh() {\n if (sidebarRefreshTimer)\n clearInterval(sidebarRefreshTimer);\n if (isDesktop()) {\n sidebarRefreshTimer = setInterval(() => {\n loadSessions().then(renderSidebar);\n }, 5000);\n }\n}\nfunction bindHtmlEventListeners() {\n const $ = (id) => document.getElementById(id);\n const on = (id, event, fn) => {\n const el = $(id);\n if (el)\n el.addEventListener(event, fn);\n };\n on(\"session-chip\", \"click\", () => toggleDrawer());\n on(\"gear-btn\", \"click\", () => showSettings());\n on(\"drawer-backdrop\", \"click\", () => closeDrawer());\n on(\"git-status-overlay\", \"click\", () => dismissGitStatus());\n on(\"expanded-settings-btn\", \"click\", () => showSettings());\n on(\"expanded-collapse-btn\", \"click\", () => $(\"sidebar-expand-btn\")?.click());\n const pickerCancel = document.querySelector(\"#projects-view .picker-cancel-btn\");\n if (pickerCancel)\n pickerCancel.addEventListener(\"click\", () => {\n showView(state.viewBeforePicker);\n loadSessions();\n });\n const createProjectBtn = document.querySelector(\"#projects-view .new-project-row button\");\n if (createProjectBtn)\n createProjectBtn.addEventListener(\"click\", () => selectNewProject());\n const agentBackBtn = document.querySelector(\"#agent-view .picker-cancel-btn\");\n if (agentBackBtn)\n agentBackBtn.addEventListener(\"click\", () => showView(\"projects\"));\n on(\"settings-back-btn\", \"click\", () => backFromSettings());\n const discoverBtn = document.querySelector(\".discover-btn\");\n if (discoverBtn)\n discoverBtn.addEventListener(\"click\", () => discoverMachines());\n on(\"setting-animations\", \"change\", function() {\n toggleSetting(\"animations\", this.checked);\n });\n on(\"setting-haptics\", \"change\", function() {\n toggleSetting(\"haptics\", this.checked);\n });\n on(\"setting-notifications\", \"change\", function() {\n toggleSetting(\"notifications\", this.checked);\n });\n on(\"setting-enterSends\", \"change\", function() {\n toggleSetting(\"enterSends\", this.checked);\n });\n on(\"setting-holdToSend\", \"change\", function() {\n toggleSetting(\"holdToSend\", this.checked);\n });\n on(\"setting-ralphEnabled\", \"change\", function() {\n toggleSetting(\"ralphEnabled\", this.checked);\n });\n on(\"setting-debugPanel\", \"change\", function() {\n toggleSetting(\"debugPanel\", this.checked);\n toggleDebugPanel();\n });\n on(\"setting-snapshotTtl\", \"input\", function() {\n toggleSetting(\"snapshotTtl\", +this.value);\n const val = $(\"snapshot-ttl-val\");\n if (val)\n val.textContent = formatSnapshotTtl(this.value);\n });\n document.querySelectorAll(\".term-size-btn\").forEach((btn) => {\n btn.addEventListener(\"click\", () => {\n const size = btn.dataset.size;\n if (size)\n toggleSetting(\"termFontSize\", size);\n });\n });\n document.querySelectorAll(\".term-font-btn\").forEach((btn) => {\n btn.addEventListener(\"click\", () => {\n const font = btn.dataset.font;\n if (font)\n toggleSetting(\"termFont\", font);\n });\n });\n on(\"add-quick-cmd-btn\", \"click\", () => addQuickCmd());\n const debugResetBtn = document.querySelector(\".debug-reset-btn\");\n if (debugResetBtn)\n debugResetBtn.addEventListener(\"click\", () => {\n wpMetrics.reset();\n renderDebugPanel();\n });\n const gitBtn = document.querySelector(\".kb-key.kb-git\");\n if (gitBtn)\n gitBtn.addEventListener(\"click\", () => showGitStatus());\n const copyBtn = document.querySelector(\".kb-key.kb-copy\");\n if (copyBtn)\n copyBtn.addEventListener(\"click\", () => copySessionToClipboard());\n on(\"ralph-detail-back-btn\", \"click\", () => backFromRalph());\n on(\"ralph-log-toggle\", \"click\", () => toggleRawLog());\n on(\"ralph-start-back-btn\", \"click\", () => backFromRalph());\n const ralphSegmented = document.querySelector(\".ralph-segmented\");\n if (ralphSegmented)\n ralphSegmented.addEventListener(\"change\", () => onIsolationChange());\n const launchBtn = document.querySelector(\".ralph-launch-btn\");\n if (launchBtn)\n launchBtn.addEventListener(\"click\", () => startRalph());\n}\nbindHtmlEventListeners();\ninitGridDeps({\n showView,\n openSession,\n destroyTerminal,\n initTerminal,\n backToSessions,\n renderSidebar,\n createPtyTerminalController,\n createConflictOverlay,\n canUseWasmTerminal,\n saveGridCellSnapshot: (gs) => {\n if (!gs.controller?.term)\n return;\n const text = serializeXtermTail(gs.controller.term, 200);\n if (text)\n saveSnapshot(gs.machine || \"\", gs.session, text);\n },\n flushGridSnapshots,\n loadSnapshot\n});\ninitRalphDeps({\n api,\n errorMessage,\n showView,\n getMachines,\n backToSessions,\n loadSessions,\n renderSidebar,\n startSidebarRefresh,\n getSidebarRefreshTimer: () => sidebarRefreshTimer,\n setSidebarRefreshTimer: (v) => {\n sidebarRefreshTimer = v;\n }\n});\ninitSettings();\ncleanStaleSnapshots();\nrenderCmdPalette();\ninitSidebar();\nif (isDesktop() && state.sessionsExpanded) {\n document.body.classList.add(\"sessions-expanded\");\n const expandBtn = document.getElementById(\"sidebar-expand-btn\");\n if (expandBtn)\n expandBtn.classList.add(\"active\");\n const sb = document.getElementById(\"desktop-sidebar\");\n if (sb) {\n sb.classList.add(\"collapsed\");\n state.sidebarCollapsed = true;\n }\n}\nshowView(\"sessions\", true);\nloadSessions().then(renderSidebar);\nif (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.getRegistrations().then((regs) => {\n regs.forEach((r) => {\n if (r.active?.scriptURL === `${location.origin}/sw.js`)\n return;\n r.unregister();\n });\n });\n}\nObject.assign(window, {\n openRalphDetail,\n dismissRalph,\n cancelRalph,\n continueRalph,\n discardRalph,\n showRalphStart,\n openSession,\n killSession,\n selectProject,\n showProjectPicker,\n sendQuickCmd,\n editQuickCmd,\n deleteQuickCmd,\n moveQuickCmd,\n createSessionWithAgent,\n deleteCustomCmd,\n removeMachineUI,\n toggleAgentEnabled,\n removeAgent,\n addAgent,\n toggleGrid,\n addToGrid,\n removeFromGrid,\n suspendGridMode,\n showView,\n state\n});\n", mime: "application/javascript" }], + ["app.bundle.js", { content: "// AUTO-GENERATED by scripts/bundle-app.ts — do not edit\n// public/app-state.ts\nfunction esc(s) {\n if (s == null)\n return \"\";\n const d = document.createElement(\"div\");\n d.textContent = String(s);\n return d.innerHTML.replace(/'/g, \"'\").replace(/\"/g, \""\");\n}\nfunction escAttr(s) {\n if (s == null)\n return \"\";\n return String(s).replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\").replace(/\"/g, \"\\\\\\\"\").replace(//g, \"\\\\x3e\").replace(/&/g, \"\\\\x26\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/\\t/g, \"\\\\t\");\n}\nfunction loadStoredJson(key, fallback) {\n try {\n const raw = localStorage.getItem(key);\n if (!raw)\n return fallback;\n const parsed = JSON.parse(raw);\n return parsed && typeof parsed === \"object\" ? parsed : fallback;\n } catch {\n return fallback;\n }\n}\nfunction isDesktop() {\n return window.innerWidth > 768;\n}\nfunction formatSnapshotTtl(seconds) {\n const s = +seconds;\n if (s < 60)\n return s + \"s\";\n return Math.floor(s / 60) + \"m\";\n}\nfunction getTerminalFontFamily() {\n return wpSettings.termFont === \"alt\" ? '\"JetBrains Mono\", \"Fira Code\", \"Source Code Pro\", \"Cascadia Code\", monospace' : '\"SF Mono\", \"Menlo\", \"Consolas\", \"DejaVu Sans Mono\", \"Liberation Mono\", monospace';\n}\nvar wpDefaults = { animations: true, haptics: true, notifications: false, enterSends: window.innerWidth > 768, holdToSend: false, termFontSize: \"medium\", termFont: \"default\", snapshotTtl: 900, debugPanel: false, ralphEnabled: false };\nvar wpSettings = Object.assign({}, wpDefaults, loadStoredJson(\"wp-effects\", {}));\nvar TERM_PRESETS = { small: { fontSize: 12, lineHeight: 1.35 }, medium: { fontSize: 13, lineHeight: 1.45 }, large: { fontSize: 14, lineHeight: 1.55 } };\nfunction toggleSetting(key, val) {\n wpSettings[key] = val;\n localStorage.setItem(\"wp-effects\", JSON.stringify(wpSettings));\n applySetting(key, val);\n}\nfunction applySetting(key, val) {\n if (key === \"animations\")\n document.body.classList.toggle(\"no-animations\", !val);\n if (key === \"notifications\") {\n if (val)\n requestNotifications();\n else\n unsubscribeNotifications();\n }\n if (key === \"enterSends\") {\n const el = document.getElementById(\"msg-input\");\n if (el)\n el.placeholder = val ? \"$ (Enter to send)\" : \"$ (⚡ to send)\";\n }\n if (key === \"termFontSize\") {\n document.body.classList.remove(\"term-size-small\", \"term-size-medium\", \"term-size-large\");\n document.body.classList.add(\"term-size-\" + val);\n document.querySelectorAll(\".term-size-btn\").forEach((b) => b.classList.toggle(\"active\", b.dataset.size === val));\n applyTermToXterm();\n }\n if (key === \"ralphEnabled\") {\n document.body.classList.toggle(\"ralph-hidden\", !val);\n }\n if (key === \"termFont\") {\n document.body.classList.toggle(\"term-font-alt\", val === \"alt\");\n document.querySelectorAll(\".term-font-btn\").forEach((b) => b.classList.toggle(\"active\", b.dataset.font === val));\n applyTermToXterm();\n }\n}\nfunction applyTermToXterm() {\n const p = TERM_PRESETS[wpSettings.termFontSize] || TERM_PRESETS.medium;\n const fontFamily = getTerminalFontFamily();\n if (state.terminalController?.term) {\n state.terminalController.term.options.fontSize = p.fontSize;\n state.terminalController.term.options.lineHeight = p.lineHeight;\n state.terminalController.term.options.fontFamily = fontFamily;\n state.terminalController.resize();\n }\n for (const gs of state.gridSessions) {\n if (!gs.controller?.term)\n continue;\n gs.controller.term.options.fontSize = Math.max(p.fontSize - 2, 10);\n gs.controller.term.options.lineHeight = p.lineHeight;\n gs.controller.term.options.fontFamily = fontFamily;\n gs.controller.resize();\n }\n}\nfunction initSettings() {\n Object.entries(wpSettings).forEach(([k, v]) => {\n applySetting(k, v);\n const el = document.getElementById(\"setting-\" + k);\n if (!el)\n return;\n if (el.type === \"checkbox\")\n el.checked = v;\n else\n el.value = v;\n });\n const ttlLabel = document.getElementById(\"snapshot-ttl-val\");\n if (ttlLabel)\n ttlLabel.textContent = formatSnapshotTtl(wpSettings.snapshotTtl);\n}\nfunction haptic(pattern) {\n if (wpSettings.haptics && navigator.vibrate)\n navigator.vibrate(pattern);\n}\nfunction urlBase64ToUint8Array(base64String) {\n const padding = \"=\".repeat((4 - base64String.length % 4) % 4);\n const base64 = (base64String + padding).replace(/-/g, \"+\").replace(/_/g, \"/\");\n const raw = atob(base64);\n const arr = new Uint8Array(raw.length);\n for (let i = 0;i < raw.length; i++)\n arr[i] = raw.charCodeAt(i);\n return arr;\n}\nasync function requestNotifications() {\n if (!(\"serviceWorker\" in navigator) || !(\"PushManager\" in window)) {\n console.warn(\"Push notifications not supported\");\n return;\n }\n const permission = await Notification.requestPermission();\n if (permission !== \"granted\") {\n state.notificationsEnabled = false;\n return;\n }\n try {\n const vapidResp = await fetch(\"/api/push/vapid-key\");\n const { publicKey } = await vapidResp.json();\n if (!publicKey)\n throw new Error(\"no VAPID key from server\");\n const reg = await navigator.serviceWorker.register(\"/sw.js\");\n await navigator.serviceWorker.ready;\n const sub = await reg.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: urlBase64ToUint8Array(publicKey)\n });\n const resp = await fetch(\"/api/push/subscribe\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(sub.toJSON())\n });\n if (resp.ok) {\n state.notificationsEnabled = true;\n console.log(\"Push subscription registered\");\n } else {\n throw new Error(`subscribe failed: ${resp.status}`);\n }\n } catch (e) {\n console.error(\"Push subscription failed:\", e);\n state.notificationsEnabled = false;\n }\n}\nasync function unsubscribeNotifications() {\n try {\n const reg = await navigator.serviceWorker.getRegistration();\n if (!reg)\n return;\n const sub = await reg.pushManager.getSubscription();\n if (!sub)\n return;\n await fetch(\"/api/push/unsubscribe\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ endpoint: sub.endpoint })\n });\n await sub.unsubscribe();\n state.notificationsEnabled = false;\n console.log(\"Push subscription removed\");\n } catch (e) {\n console.error(\"Push unsubscribe failed:\", e);\n }\n}\nvar QC_STORAGE_KEY = \"wp-quick-cmds\";\nfunction loadQuickCmds() {\n try {\n const raw = localStorage.getItem(QC_STORAGE_KEY);\n if (raw) {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed))\n return parsed;\n }\n } catch {}\n return [];\n}\nvar RECENTS_STORAGE_KEY = \"wp-recents\";\nvar MAX_RECENTS = 20;\nfunction loadRecents() {\n try {\n const raw = localStorage.getItem(RECENTS_STORAGE_KEY);\n if (raw) {\n const r = JSON.parse(raw);\n if (Array.isArray(r))\n return r;\n }\n } catch {}\n return [];\n}\nfunction loadSidebarPinned() {\n const v = localStorage.getItem(\"wolfpack-sidebar-pinned\");\n if (v !== null)\n return v !== \"0\";\n const old = localStorage.getItem(\"wolfpack-sidebar-collapsed\");\n if (old === \"1\")\n return false;\n return true;\n}\nvar _initSidebarPinned = loadSidebarPinned();\nvar state = {\n currentView: \"sessions\",\n currentSession: null,\n currentMachine: \"\",\n viewBeforePicker: \"sessions\",\n viewBeforeSettings: \"sessions\",\n allSessions: [],\n lastSessionGroups: [],\n firstLoad: true,\n lastSessionsHtml: \"\",\n loadSessionsEpoch: 0,\n selfName: \"\",\n selfVersion: \"\",\n sessionRecents: loadRecents(),\n quickCmds: loadQuickCmds(),\n currentRalphProject: null,\n currentRalphMachine: \"\",\n ralphStartMachine: \"\",\n ralphLogPollTimer: null,\n currentRalphPlanFile: \"\",\n restartingRalph: false,\n currentRalphWorktreeMode: \"false\",\n currentRalphWorktreeBranch: \"\",\n currentRalphAgent: \"\",\n currentRalphCleanup: undefined,\n currentRalphAuditFix: undefined,\n terminalController: null,\n desktopResizeHandler: null,\n desktopResizeTimer: null,\n _touchCleanup: null,\n visualViewportHandler: null,\n kbResizeTimer: null,\n gridSessions: [],\n gridFocusIndex: 0,\n preservedGridSessions: [],\n preservedGridFocusIndex: 0,\n gridResizeHandler: null,\n gridRelayoutTransitionId: 0,\n sidebarPinned: _initSidebarPinned,\n sidebarCollapsed: !_initSidebarPinned,\n sidebarAutoExpanded: false,\n sidebarTransitionIsHover: false,\n sidebarResizeDone: false,\n sessionsExpanded: true,\n sessionRefreshTimer: null,\n snapshotTimer: null,\n swipeNavigated: false,\n projectMachine: \"\",\n selectedProject: \"\",\n isNewProject: false,\n enterRetryTimer: null,\n drawerOpen: false,\n notificationsEnabled: \"Notification\" in window && Notification.permission === \"granted\" && \"PushManager\" in window,\n kbAccessoryOpen: false,\n _cachedFallbackTimer: null,\n _ghostInputObserver: null,\n peerHealth: {}\n};\nfunction setState(patch) {\n Object.assign(state, patch);\n}\nfunction syncNotificationsPermission() {\n if (!(\"Notification\" in window))\n return;\n const granted = Notification.permission === \"granted\";\n if (state.notificationsEnabled && !granted) {\n state.notificationsEnabled = false;\n toggleSetting(\"notifications\", false);\n }\n}\nif (typeof document !== \"undefined\") {\n document.addEventListener(\"visibilitychange\", syncNotificationsPermission);\n window.addEventListener(\"focus\", syncNotificationsPermission);\n}\nvar SNAPSHOT_KEY_PREFIX = \"wp-snap|\";\nvar SNAPSHOT_MAX_BYTES = 16384;\nvar SNAPSHOT_SAVE_INTERVAL = 2000;\nvar DESKTOP_TERMINAL_SCROLLBACK = 2000;\nvar GRID_TERMINAL_SCROLLBACK = 2000;\n\n// public/app-ralph.ts\nvar deps;\nfunction initRalphDeps(d) {\n deps = d;\n}\nfunction getRalphStatus(loop) {\n const hitLimit = !loop.active && !loop.completed && loop.finished;\n return {\n hitLimit,\n status: loop.audit ? \"audit\" : loop.cleanup ? \"cleanup\" : loop.active ? \"running\" : loop.completed ? \"done\" : hitLimit ? \"limit\" : \"idle\",\n statusLabel: loop.audit ? \"AUDIT\" : loop.cleanup ? \"CLEANUP\" : loop.active ? \"RUNNING\" : loop.completed ? \"DONE\" : hitLimit ? \"STOPPED\" : \"IDLE\",\n dotClass: loop.active ? \"purple\" : \"gray\",\n dotTitle: loop.active ? \"active\" : \"idle\"\n };\n}\nfunction renderRalphCardHtml(loop, machineUrl) {\n const { status, statusLabel, dotClass, dotTitle } = getRalphStatus(loop);\n const taskPct = loop.tasksTotal > 0 ? Math.round(loop.tasksDone / loop.tasksTotal * 100) : 0;\n const taskLabel = loop.tasksDone + \"/\" + loop.tasksTotal + \" tasks\";\n const iterLabel = loop.totalIterations > 0 ? loop.iteration + \"/\" + loop.totalIterations + \" iter\" : \"\";\n const lastOut = loop.lastOutput ? '
' + esc(loop.lastOutput) + \"
\" : \"\";\n const mUrl = escAttr(machineUrl || \"\");\n return '
` + '
' + '' + esc(loop.project) + (loop.planFile ? ' — ' + esc(loop.planFile.replace(/\\.md$/i, \"\")) + \"\" : \"\") + \"\" + '' + statusLabel + \"\" + `` + \"
\" + '
' + '
' + '' + taskLabel + \"\" + \"
\" + (iterLabel ? '
' + iterLabel + \"
\" : \"\") + lastOut + \"
\";\n}\nfunction sidebarRalphCardHtml(loop, machineUrl) {\n const { status, statusLabel, dotClass, dotTitle } = getRalphStatus(loop);\n const mUrl = escAttr(machineUrl || \"\");\n return '
` + '' + '' + esc(loop.project) + \"\" + '' + statusLabel + \"\" + `` + \"
\";\n}\nfunction openRalphDetail(project, machineUrl) {\n state.currentRalphProject = project;\n state.currentRalphMachine = machineUrl || \"\";\n deps.showView(\"ralph-detail\");\n}\nasync function refreshRalphDetail() {\n if (!state.currentRalphProject)\n return;\n const header = document.getElementById(\"ralph-detail-header\");\n const logEl = document.getElementById(\"ralph-log\");\n const actions = document.getElementById(\"ralph-actions\");\n try {\n const data = await deps.api(\"/ralph\", undefined, state.currentRalphMachine);\n const loop = (data.loops || []).find((l) => l.project === state.currentRalphProject);\n if (!loop) {\n header.innerHTML = 'NOT FOUND';\n logEl.textContent = \"no ralph log for this project\";\n actions.innerHTML = \"\";\n return;\n }\n const { status, statusLabel } = getRalphStatus(loop);\n const taskPct = loop.tasksTotal > 0 ? Math.round(loop.tasksDone / loop.tasksTotal * 100) : 0;\n const taskLabel = loop.tasksDone + \"/\" + loop.tasksTotal + \" tasks\";\n const iterLabel = loop.totalIterations > 0 ? loop.iteration + \"/\" + loop.totalIterations + \" iter\" : \"\";\n const cleanupEnabled = loop.cleanupEnabled !== false;\n const auditFixEnabled = loop.auditFixEnabled === true;\n header.innerHTML = '
' + '' + statusLabel + \"\" + '
' + '' + taskLabel + \"\" + (iterLabel ? '' + iterLabel + \"\" : \"\") + \"
\" + \"
\" + '
' + '
' + \"
\" + (loop.planFile ? '
plan: ' + esc(loop.planFile) + \"
\" : \"\") + '
phases: audit+fix ' + (auditFixEnabled ? \"on\" : \"off\") + \", cleanup \" + (cleanupEnabled ? \"on\" : \"off\") + \"
\" + (loop.started ? '
started: ' + esc(loop.started) + \"
\" : \"\") + (loop.finished ? '
finished: ' + esc(loop.finished) + \"
\" : \"\");\n if (loop.active) {\n actions.innerHTML = '';\n } else {\n const wt = escAttr(loop.worktreeMode || \"false\");\n const wtBranch = escAttr(loop.worktreeBranch || \"\");\n actions.innerHTML = `` + '';\n }\n if (!loop.active && state.ralphLogPollTimer) {\n clearInterval(state.ralphLogPollTimer);\n state.ralphLogPollTimer = null;\n }\n } catch {\n header.innerHTML = 'ERROR';\n }\n try {\n const logData = await deps.api(\"/ralph/log?project=\" + encodeURIComponent(state.currentRalphProject), undefined, state.currentRalphMachine);\n if (logData.log != null) {\n const container = document.getElementById(\"ralph-log-container\");\n const wasScrolled = container.scrollTop + container.clientHeight >= container.scrollHeight - 30;\n logEl.textContent = logData.log;\n renderIterationCards(logData.log);\n if (wasScrolled)\n container.scrollTop = container.scrollHeight;\n }\n } catch {}\n}\nfunction parseIterations(log) {\n const sections = [];\n const marker = /^=== 🥋 (.+?) ===$/gm;\n let match, lastIdx = 0, lastTitle = null;\n while ((match = marker.exec(log)) !== null) {\n if (lastTitle !== null) {\n sections.push({ title: lastTitle, body: log.slice(lastIdx, match.index).trim() });\n }\n lastTitle = match[1];\n lastIdx = match.index + match[0].length;\n }\n if (lastTitle !== null) {\n sections.push({ title: lastTitle, body: log.slice(lastIdx).trim() });\n }\n return sections;\n}\nfunction renderIterationCards(log) {\n const el = document.getElementById(\"ralph-iterations\");\n const iterations = parseIterations(log);\n if (!iterations.length) {\n el.innerHTML = '
no iterations yet
';\n return;\n }\n const expanded = new Set;\n el.querySelectorAll(\".ralph-iter-card.expanded\").forEach((c) => expanded.add(c.dataset.idx));\n el.innerHTML = iterations.map((iter, i) => {\n const isLast = i === iterations.length - 1;\n const isOpen = expanded.has(String(i)) || isLast && !expanded.size;\n const taskLine = iter.body.match(/^task:\\s*(.+)$/m);\n const task = taskLine ? taskLine[1].replace(/^#+\\s*/, \"\").replace(/^~~|~~$/g, \"\").replace(/^\\d+[a-z]?\\.\\s*/, \"\") : \"\";\n const cardClass = isLast ? \"active\" : \"done\";\n return '
' + `
` + \"
\" + '
' + esc(iter.title.replace(/ — .+$/, \"\")) + \"
\" + (task ? '
' + esc(task) + \"
\" : \"\") + \"
\" + '' + \"
\" + '
' + esc(iter.body) + \"
\" + \"
\";\n }).join(\"\");\n}\nfunction toggleRawLog() {\n const logEl = document.getElementById(\"ralph-log\");\n const iterEl = document.getElementById(\"ralph-iterations\");\n const toggle = document.getElementById(\"ralph-log-toggle\");\n const showing = getComputedStyle(logEl).display !== \"none\";\n logEl.style.display = showing ? \"none\" : \"block\";\n logEl.classList.remove(\"ralph-log-hidden\");\n iterEl.style.display = showing ? \"\" : \"none\";\n toggle.textContent = showing ? \"view raw log\" : \"view iterations\";\n}\nasync function cancelRalph() {\n if (!state.currentRalphProject)\n return;\n if (!confirm(\"cancel ralph loop for \" + state.currentRalphProject + \"?\"))\n return;\n try {\n await deps.api(\"/ralph/cancel\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ project: state.currentRalphProject })\n }, state.currentRalphMachine);\n refreshRalphDetail();\n } catch (e) {\n alert(\"failed to cancel: \" + deps.errorMessage(e));\n }\n}\nasync function dismissRalph(project, event, machineUrl) {\n event.stopPropagation();\n if (!confirm(\"dismiss ralph loop for \" + project + \"?\"))\n return;\n try {\n const data = await deps.api(\"/ralph\", undefined, machineUrl);\n const loop = (data.loops || []).find((l) => l.project === project);\n if (loop && loop.active) {\n await deps.api(\"/ralph/cancel\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ project })\n }, machineUrl);\n await new Promise((r) => setTimeout(r, 1000));\n }\n const deletePlan = confirm(\"also delete the plan file?\");\n await deps.api(\"/ralph/dismiss\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ project, deletePlan })\n }, machineUrl);\n const timer = deps.getSidebarRefreshTimer();\n if (timer) {\n clearInterval(timer);\n deps.setSidebarRefreshTimer(null);\n }\n state.lastSessionsHtml = \"\";\n await deps.loadSessions();\n deps.renderSidebar();\n deps.startSidebarRefresh();\n } catch (e) {\n alert(\"failed to dismiss: \" + deps.errorMessage(e));\n }\n}\nfunction getStartMachine() {\n return state.ralphStartMachine || undefined;\n}\nasync function loadRalphStartForm() {\n const machines = deps.getMachines();\n const picker = document.getElementById(\"ralph-machine-picker\");\n if (machines.length > 0 && state.ralphStartMachine) {\n const mName = machines.find((m) => m.url === state.ralphStartMachine)?.name || \"remote\";\n picker.style.display = \"\";\n picker.innerHTML = 'Machine: ' + esc(mName) + \"\";\n } else if (machines.length > 0) {\n picker.style.display = \"\";\n picker.innerHTML = 'Machine: ' + esc(state.selfName || \"this machine\") + \"\";\n } else {\n picker.style.display = \"none\";\n }\n await loadStartFormData();\n}\nasync function loadStartFormData() {\n const machine = getStartMachine();\n const sel = document.getElementById(\"ralph-project-select\");\n try {\n const data = await deps.api(\"/projects\", undefined, machine);\n const projects = data.projects || [];\n sel.innerHTML = projects.map((p) => '\").join(\"\");\n if (state.currentRalphProject && projects.includes(state.currentRalphProject)) {\n sel.value = state.currentRalphProject;\n }\n } catch {\n sel.innerHTML = '';\n }\n sel.onchange = function() {\n loadPlanFiles(sel.value);\n const isoVal = (document.querySelector('input[name=\"ralph-isolation\"]:checked') || {}).value;\n if (isoVal === \"branch\")\n loadBranches(sel.value);\n if (isoVal === \"plan\" || isoVal === \"task\")\n loadWorktreeBranches(sel.value);\n };\n document.getElementById(\"ralph-cleanup-toggle\").checked = state.currentRalphCleanup != null ? state.currentRalphCleanup : true;\n document.getElementById(\"ralph-audit-fix-toggle\").checked = state.currentRalphAuditFix != null ? state.currentRalphAuditFix : false;\n state.currentRalphCleanup = undefined;\n state.currentRalphAuditFix = undefined;\n const isoRadios = document.querySelectorAll('input[name=\"ralph-isolation\"]');\n if (state.restartingRalph && state.currentRalphWorktreeMode !== \"false\") {\n const mode = state.currentRalphWorktreeMode;\n isoRadios.forEach((r) => {\n r.checked = r.value === mode;\n r.disabled = true;\n });\n onIsolationChange();\n } else {\n document.getElementById(\"ralph-iso-off\").checked = true;\n isoRadios.forEach((r) => {\n r.disabled = false;\n });\n document.getElementById(\"ralph-branch-fields\").style.display = \"none\";\n document.getElementById(\"ralph-worktree-fields\").style.display = \"none\";\n }\n await loadPlanFiles(sel.value);\n if (state.currentRalphPlanFile) {\n document.getElementById(\"ralph-plan-select\").value = state.currentRalphPlanFile;\n state.currentRalphPlanFile = \"\";\n }\n if (state.currentRalphAgent) {\n document.getElementById(\"ralph-agent-select\").value = state.currentRalphAgent;\n state.currentRalphAgent = \"\";\n }\n const lockable = [\n sel,\n document.getElementById(\"ralph-plan-select\"),\n document.getElementById(\"ralph-agent-select\"),\n document.getElementById(\"ralph-cleanup-toggle\"),\n document.getElementById(\"ralph-audit-fix-toggle\"),\n document.getElementById(\"ralph-worktree-name\"),\n document.getElementById(\"ralph-worktree-base\"),\n document.getElementById(\"ralph-branch-name\"),\n document.getElementById(\"ralph-source-branch\")\n ];\n if (state.restartingRalph) {\n lockable.forEach((el) => {\n if (el)\n el.disabled = true;\n });\n if (state.currentRalphWorktreeBranch) {\n document.getElementById(\"ralph-worktree-name\").value = state.currentRalphWorktreeBranch;\n }\n state.currentRalphWorktreeBranch = \"\";\n } else {\n lockable.forEach((el) => {\n if (el)\n el.disabled = false;\n });\n }\n}\nasync function loadPlanFiles(project) {\n const planSel = document.getElementById(\"ralph-plan-select\");\n if (!project) {\n planSel.innerHTML = '';\n return;\n }\n try {\n const data = await deps.api(\"/ralph/plans?project=\" + encodeURIComponent(project), undefined, getStartMachine());\n const plans = data.plans || [];\n if (plans.length === 0) {\n planSel.innerHTML = '';\n } else {\n planSel.innerHTML = plans.map((p) => '\").join(\"\");\n }\n } catch {\n planSel.innerHTML = '';\n }\n planSel.onchange = () => syncIterationsFromPlan(project, planSel.value);\n syncIterationsFromPlan(project, planSel.value);\n}\nasync function syncIterationsFromPlan(project, planFile) {\n if (!project || !planFile)\n return;\n try {\n const tc = await deps.api(\"/ralph/task-count?project=\" + encodeURIComponent(project) + \"&plan=\" + encodeURIComponent(planFile), undefined, getStartMachine());\n if (tc.total > 0) {\n document.getElementById(\"ralph-iterations-input\").value = String(tc.total - tc.done);\n }\n } catch {}\n}\nfunction onIsolationChange() {\n const val = (document.querySelector('input[name=\"ralph-isolation\"]:checked') || {}).value || \"false\";\n const isWorktree = val === \"plan\" || val === \"task\";\n document.getElementById(\"ralph-branch-fields\").style.display = val === \"branch\" ? \"flex\" : \"none\";\n document.getElementById(\"ralph-worktree-fields\").style.display = isWorktree ? \"flex\" : \"none\";\n const project = document.getElementById(\"ralph-project-select\").value;\n if (val === \"branch\")\n loadBranches(project);\n if (isWorktree) {\n loadWorktreeBranches(project);\n updateWorktreePlaceholder(val);\n }\n}\nfunction updateWorktreePlaceholder(mode) {\n const input = document.getElementById(\"ralph-worktree-name\");\n input.placeholder = mode === \"task\" ? \"ralph/1-task-slug (auto per task)\" : \"ralph/plan-my-feature\";\n if (mode === \"task\") {\n input.value = \"\";\n input.disabled = true;\n } else {\n input.disabled = false;\n }\n}\nasync function loadWorktreeBranches(project) {\n const sel = document.getElementById(\"ralph-worktree-base\");\n if (!project) {\n sel.innerHTML = '';\n return;\n }\n try {\n const data = await deps.api(\"/ralph/branches?project=\" + encodeURIComponent(project), undefined, getStartMachine());\n const branches = data.branches || [];\n sel.innerHTML = branches.map((b) => '\").join(\"\");\n } catch {\n sel.innerHTML = '';\n }\n}\nasync function loadBranches(project) {\n const sel = document.getElementById(\"ralph-source-branch\");\n if (!project) {\n sel.innerHTML = '';\n return;\n }\n try {\n const data = await deps.api(\"/ralph/branches?project=\" + encodeURIComponent(project), undefined, getStartMachine());\n const branches = data.branches || [];\n if (branches.length === 0) {\n sel.innerHTML = '';\n } else {\n sel.innerHTML = branches.map((b) => '\").join(\"\");\n const defaultBranch = branches.find((b) => b === \"main\") || branches.find((b) => b === \"master\");\n if (defaultBranch)\n sel.value = defaultBranch;\n }\n } catch {\n sel.innerHTML = '';\n }\n}\nasync function startRalph() {\n const machine = getStartMachine();\n const project = document.getElementById(\"ralph-project-select\").value;\n const iterations = parseInt(document.getElementById(\"ralph-iterations-input\").value) || 5;\n const planFile = document.getElementById(\"ralph-plan-select\").value || undefined;\n const agent = document.getElementById(\"ralph-agent-select\").value;\n const cleanup = document.getElementById(\"ralph-cleanup-toggle\").checked;\n const auditFix = document.getElementById(\"ralph-audit-fix-toggle\").checked;\n if (!project) {\n alert(\"select a project\");\n return;\n }\n if (!planFile) {\n alert(\"select a plan file\");\n return;\n }\n let format = false;\n try {\n const tc = await deps.api(\"/ralph/task-count?project=\" + encodeURIComponent(project) + \"&plan=\" + encodeURIComponent(planFile), undefined, machine);\n if (tc.issues && tc.issues.length > 0) {\n const msg = \"Plan format issues in \" + planFile + `:\n\n` + tc.issues.map((i) => \"• \" + i).join(`\n`) + `\n\nRalph can auto-number them. Continue?`;\n if (!confirm(msg))\n return;\n format = true;\n } else if (tc.total === 0) {\n if (!confirm(\"No tasks found in \" + planFile + \". Ralph will number them automatically. Continue?\"))\n return;\n format = true;\n }\n } catch {}\n const isoVal = (document.querySelector('input[name=\"ralph-isolation\"]:checked') || {}).value || \"false\";\n const worktree = isoVal === \"plan\" || isoVal === \"task\" ? isoVal : false;\n const body = { project, iterations, planFile, agent, format, cleanup, auditFix, worktree };\n if (worktree) {\n const wtName = document.getElementById(\"ralph-worktree-name\").value.trim();\n const wtBase = document.getElementById(\"ralph-worktree-base\").value;\n if (wtName)\n body.worktreeBranch = wtName;\n if (wtBase)\n body.worktreeBase = wtBase;\n }\n if (isoVal === \"branch\") {\n const newBranch = document.getElementById(\"ralph-branch-name\").value.trim();\n const sourceBranch = document.getElementById(\"ralph-source-branch\").value;\n if (!newBranch) {\n alert(\"enter a branch name\");\n return;\n }\n body.newBranch = newBranch;\n body.sourceBranch = sourceBranch;\n }\n try {\n await deps.api(\"/ralph/start\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body)\n }, machine);\n state.currentRalphProject = project;\n state.restartingRalph = false;\n deps.backToSessions();\n } catch (e) {\n alert(\"failed to start: \" + deps.errorMessage(e));\n }\n}\nfunction continueRalph(planFile, agent, cleanup, auditFix, worktreeMode, worktreeBranch) {\n state.currentRalphPlanFile = planFile || \"\";\n state.currentRalphAgent = agent || \"\";\n state.currentRalphCleanup = cleanup;\n state.currentRalphAuditFix = auditFix;\n state.currentRalphWorktreeMode = worktreeMode || \"false\";\n state.currentRalphWorktreeBranch = worktreeBranch || \"\";\n state.restartingRalph = true;\n state.ralphStartMachine = state.currentRalphMachine;\n deps.showView(\"ralph-start\");\n}\nasync function discardRalph() {\n if (!confirm(\"Discard this ralph loop? This removes the log and progress files.\"))\n return;\n try {\n await deps.api(\"/ralph/dismiss\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ project: state.currentRalphProject })\n }, state.currentRalphMachine);\n deps.backToSessions();\n } catch (e) {\n alert(\"failed to discard: \" + deps.errorMessage(e));\n }\n}\nfunction showRalphStart(machineUrl) {\n if (!wpSettings.ralphEnabled)\n return;\n state.ralphStartMachine = machineUrl || \"\";\n state.restartingRalph = false;\n deps.showView(\"ralph-start\");\n}\nvar prevRalphStates = {};\nfunction getRalphNotificationStatus(loop) {\n if (loop.audit)\n return \"running\";\n if (loop.cleanup)\n return \"running\";\n if (loop.active)\n return \"running\";\n if (loop.completed)\n return \"done\";\n if (!loop.active && !loop.completed && loop.finished)\n return \"limit\";\n return \"idle\";\n}\nfunction checkRalphTransitions(loops, mUrl, mName) {\n if (!loops)\n return;\n for (const loop of loops) {\n const key = mUrl + \"|\" + loop.project;\n const prev = prevRalphStates[key];\n const cur = getRalphNotificationStatus(loop);\n prevRalphStates[key] = cur;\n if (prev === \"running\" && (cur === \"done\" || cur === \"idle\" || cur === \"limit\")) {\n haptic([200, 100, 200]);\n }\n }\n}\n\n// public/app-grid.ts\nvar deps2;\nfunction initGridDeps(d) {\n deps2 = d;\n}\nfunction setGridCellLoading(gs, loading) {\n gs._loading = loading;\n const cell = getGridCellElement(gs);\n if (cell)\n cell.classList.toggle(\"grid-loading\", loading);\n}\nfunction beginGridRelayoutTransition() {\n state.gridRelayoutTransitionId += 1;\n const transitionId = state.gridRelayoutTransitionId;\n for (const gs of state.gridSessions)\n setGridCellLoading(gs, true);\n return transitionId;\n}\nfunction isGridRelayoutTransitionCurrent(transitionId) {\n return transitionId === state.gridRelayoutTransitionId;\n}\nfunction endGridRelayoutTransition(transitionId) {\n if (!isGridRelayoutTransitionCurrent(transitionId))\n return;\n requestAnimationFrame(() => {\n if (!isGridRelayoutTransitionCurrent(transitionId))\n return;\n for (const gs of state.gridSessions)\n setGridCellLoading(gs, false);\n });\n}\nfunction cancelGridRelayoutTransition() {\n state.gridRelayoutTransitionId += 1;\n}\nfunction runGridRelayoutTransition(primaryFit) {\n if (!isGridActive())\n return;\n const transitionId = beginGridRelayoutTransition();\n requestAnimationFrame(() => {\n if (!isGridRelayoutTransitionCurrent(transitionId) || !isGridActive())\n return;\n try {\n primaryFit();\n } catch (e) {\n console.warn(\"[grid] primaryFit failed:\", e);\n }\n requestAnimationFrame(() => {\n if (!isGridRelayoutTransitionCurrent(transitionId) || !isGridActive())\n return;\n fitAllGridCells();\n endGridRelayoutTransition(transitionId);\n });\n });\n}\nvar _gridRenderGeneration = 0;\nvar MAX_GRID_CELLS = 6;\nfunction isGridActive() {\n return state.gridSessions.length >= 2;\n}\nfunction gridLayoutClass(count) {\n if (count >= 2 && count <= 6)\n return \"grid-\" + count;\n return \"grid-2\";\n}\nfunction updateGridLayout() {\n const container = document.getElementById(\"desktop-grid-container\");\n if (!isGridActive()) {\n container.className = \"\";\n container.style.display = \"\";\n return;\n }\n container.className = \"active \" + gridLayoutClass(state.gridSessions.length);\n container.style.display = \"\";\n document.getElementById(\"desktop-terminal-container\").style.display = \"none\";\n document.getElementById(\"input-bar\").style.display = \"none\";\n document.getElementById(\"cmd-palette\").classList.remove(\"visible\");\n document.getElementById(\"kb-accessory\").classList.remove(\"visible\");\n}\nfunction createGridCell(gs, idx) {\n const cell = document.createElement(\"div\");\n cell.className = \"grid-cell\" + (idx === state.gridFocusIndex ? \" grid-focused\" : \"\") + (gs._loading ? \" grid-loading\" : \"\");\n cell.dataset.gridIndex = idx;\n cell.innerHTML = '
' + esc(gs.session) + '
×
Loading terminal
';\n cell.addEventListener(\"click\", (e) => {\n const tgt = e.target;\n if (tgt && tgt.classList.contains(\"grid-cell-close\"))\n return;\n const sel = window.getSelection ? window.getSelection() : null;\n if (sel && !sel.isCollapsed)\n return;\n const i = parseInt(cell.dataset.gridIndex, 10);\n setGridFocus(i);\n });\n cell.querySelector(\".grid-cell-close\").addEventListener(\"click\", (e) => {\n e.stopPropagation();\n const i = parseInt(cell.dataset.gridIndex, 10);\n removeFromGrid(i);\n });\n gs._cellElement = cell;\n return cell;\n}\nasync function mountGridController(gs, cell, idx) {\n if (gs.controller)\n return;\n const cached = deps2.loadSnapshot ? deps2.loadSnapshot(gs.machine || \"\", gs.session) : null;\n if (cached)\n cell.classList.add(\"cached-visible\");\n let _gridCachedPending = !!cached;\n const tp = TERM_PRESETS[wpSettings.termFontSize] || TERM_PRESETS.medium;\n gs.controller = deps2.createPtyTerminalController({\n session: gs.session,\n machine: gs.machine || \"\",\n fontSize: Math.max(tp.fontSize - 2, 10),\n scrollback: GRID_TERMINAL_SCROLLBACK,\n cursorBlink: idx === state.gridFocusIndex,\n disableStdin: idx !== state.gridFocusIndex,\n resetPty: gs._resetPty,\n prefillMode: \"viewport\",\n shouldFocus: () => state.gridSessions[state.gridFocusIndex] === gs,\n shouldReconnect: () => state.gridSessions.includes(gs),\n canAcceptInput: () => !!(gs.controller && gs.controller.isConnected && state.gridSessions[state.gridFocusIndex] === gs),\n canSendResize: () => !!(gs.controller && gs.controller.isConnected),\n onOpen: () => {\n gs._displaced = false;\n removeGridCellConflictOverlay(gs);\n },\n onPtyReady: () => {\n if (gs.controller)\n gs.controller.forceRepaint();\n },\n onOutput: () => {\n if (_gridCachedPending) {\n _gridCachedPending = false;\n cell.classList.remove(\"cached-visible\");\n }\n },\n onViewerConflict: () => {\n var r = WP.handleViewerConflict({ displaced: gs._displaced, autoTakeControl: gs._autoTakeControl });\n gs._displaced = r.newState.displaced;\n gs._autoTakeControl = r.newState.autoTakeControl;\n if (r.action === \"auto-take-control\") {\n gs.controller.sendTakeControl();\n } else {\n showGridCellConflictOverlay(gs);\n }\n },\n onControlGranted: () => {\n var s = WP.handleControlGranted({ displaced: gs._displaced, autoTakeControl: gs._autoTakeControl });\n gs._displaced = s.displaced;\n gs._autoTakeControl = s.autoTakeControl;\n removeGridCellConflictOverlay(gs);\n if (state.gridSessions[state.gridFocusIndex] === gs)\n gs.controller.focus();\n },\n onDisconnected: (code, reason) => {\n removeGridCellConflictOverlay(gs);\n if (!state.gridSessions.includes(gs))\n return;\n var action = WP.classifyDisconnect(code, reason || \"\");\n if (action === \"displaced\") {\n var ns = WP.handleDisplaced({ displaced: gs._displaced, autoTakeControl: gs._autoTakeControl });\n gs._displaced = ns.displaced;\n gs._autoTakeControl = ns.autoTakeControl;\n showGridCellConflictOverlay(gs);\n } else {\n gs.controller.scheduleReconnect();\n }\n }\n });\n delete gs._resetPty;\n await gs.controller.mount(cell, { cached });\n gs._needsConnect = true;\n}\nfunction renderGridCells() {\n const container = document.getElementById(\"desktop-grid-container\");\n if (!state.gridResizeHandler) {\n state.gridResizeHandler = () => {\n if (!isGridActive())\n return;\n for (const gs of state.gridSessions) {\n if (gs.controller)\n gs.controller.resizeWithTransition();\n }\n };\n window.addEventListener(\"resize\", state.gridResizeHandler);\n }\n const existingCells = container.querySelectorAll(\".grid-cell\");\n const existingMap = new Map;\n existingCells.forEach((cell) => {\n const idx = parseInt(cell.dataset.gridIndex || \"0\", 10);\n existingMap.set(idx, cell);\n });\n const newCellSessions = [];\n const mountPromises = [];\n state.gridSessions.forEach((gs, idx) => {\n if (gs._cellElement && gs._cellElement.parentNode === container && gs.controller) {\n gs._cellElement.dataset.gridIndex = idx;\n gs._cellElement.classList.toggle(\"grid-focused\", idx === state.gridFocusIndex);\n } else {\n const cell = createGridCell(gs, idx);\n container.appendChild(cell);\n mountPromises.push(mountGridController(gs, cell, idx));\n newCellSessions.push(gs);\n }\n });\n const activeCellElements = new Set(state.gridSessions.map((gs) => gs._cellElement));\n existingCells.forEach((cell) => {\n if (!activeCellElements.has(cell))\n cell.remove();\n });\n state.gridSessions.forEach((gs) => {\n if (gs._cellElement && gs._cellElement.parentNode === container) {\n container.appendChild(gs._cellElement);\n }\n });\n updateGridLayout();\n const renderGen = ++_gridRenderGeneration;\n if (newCellSessions.length > 0) {\n Promise.all(mountPromises).then(() => {\n if (_gridRenderGeneration !== renderGen)\n return;\n runGridRelayoutTransition(() => {\n fitAllGridCells();\n newCellSessions.forEach((gs) => {\n if (gs._needsConnect) {\n delete gs._needsConnect;\n gs.controller.connect();\n }\n });\n });\n }).catch((err) => console.error(\"[grid] mount failed:\", err));\n } else {\n requestAnimationFrame(() => {\n fitAllGridCells();\n });\n }\n}\nfunction getGridCellElement(gs) {\n if (gs._cellElement)\n return gs._cellElement;\n const idx = state.gridSessions.indexOf(gs);\n if (idx < 0)\n return null;\n return document.querySelector('#desktop-grid-container .grid-cell[data-grid-index=\"' + idx + '\"]');\n}\nfunction takeControlOfCell(gs) {\n if (!gs.controller)\n return;\n if (gs.controller.isConnected) {\n gs.controller.sendTakeControl();\n if (gs._takeControlTimer)\n clearTimeout(gs._takeControlTimer);\n gs._takeControlTimer = setTimeout(() => {\n gs._takeControlTimer = null;\n if (!gs.controller)\n return;\n const cell = getGridCellElement(gs);\n if (!cell || !cell.querySelector(\".viewer-conflict-overlay\"))\n return;\n gs._autoTakeControl = true;\n if (gs.controller.isConnected) {\n gs.controller.reconnect({ takeControl: true });\n } else {\n gs.controller.connect({ takeControl: true });\n }\n }, 3000);\n } else {\n gs._autoTakeControl = true;\n gs.controller.connect({ takeControl: true });\n }\n}\nfunction removeGridCellConflictOverlay(gs) {\n if (gs._takeControlTimer) {\n clearTimeout(gs._takeControlTimer);\n gs._takeControlTimer = null;\n }\n const cell = getGridCellElement(gs);\n if (!cell)\n return;\n cell.querySelectorAll(\".viewer-conflict-overlay\").forEach((el) => el.remove());\n}\nfunction showGridCellConflictOverlay(gs) {\n const cell = getGridCellElement(gs);\n if (!cell)\n return;\n if (gs.controller && gs.controller.hydration)\n gs.controller.hydration.finish();\n removeGridCellConflictOverlay(gs);\n const overlay = deps2.createConflictOverlay(\"Active on another device\", \"Take Control\", (e) => {\n e.stopPropagation();\n takeControlOfCell(gs);\n });\n overlay.dataset.conflictType = \"conflict\";\n cell.appendChild(overlay);\n}\nfunction hasPreservedGrid() {\n return state.preservedGridSessions.length >= 2;\n}\nfunction clearPreservedGrid() {\n state.preservedGridSessions = [];\n state.preservedGridFocusIndex = 0;\n}\nfunction setCurrentSessionFromGridFocus(sessions, focusIndex) {\n if (!sessions.length)\n return;\n const idx = Math.max(0, Math.min(focusIndex, sessions.length - 1));\n const focused = sessions[idx];\n if (!focused)\n return;\n setState({ currentSession: focused.session, currentMachine: focused.machine || \"\" });\n}\nfunction returnToTerminalView() {\n deps2.showView(\"terminal\");\n if (restorePreservedGrid())\n return true;\n if (!state.currentSession)\n return false;\n if (!state.terminalController)\n deps2.initTerminal();\n return true;\n}\nfunction setGridFocus(idx) {\n if (idx < 0 || idx >= state.gridSessions.length)\n return;\n const prev = state.gridFocusIndex;\n state.gridFocusIndex = idx;\n state.gridSessions.forEach((gs, i) => {\n if (!gs.controller || !gs.controller.term)\n return;\n const focused = i === idx;\n gs.controller.term.options.disableStdin = !focused;\n gs.controller.term.options.cursorBlink = focused;\n });\n const cells = document.querySelectorAll(\"#desktop-grid-container .grid-cell\");\n cells.forEach((cell, i) => {\n cell.classList.toggle(\"grid-focused\", i === idx);\n });\n const focusedGs = state.gridSessions[idx];\n if (focusedGs) {\n setState({ currentSession: focusedGs.session, currentMachine: focusedGs.machine || \"\" });\n deps2.renderSidebar();\n if (focusedGs.controller)\n focusedGs.controller.focus();\n }\n}\nfunction suspendGridMode() {\n if (deps2.flushGridSnapshots)\n deps2.flushGridSnapshots();\n const preserved = WP.suspendGridState(state.gridSessions, state.gridFocusIndex);\n state.preservedGridSessions = preserved.sessions;\n state.preservedGridFocusIndex = preserved.focusIndex;\n cancelGridRelayoutTransition();\n if (state.gridResizeHandler) {\n window.removeEventListener(\"resize\", state.gridResizeHandler);\n state.gridResizeHandler = null;\n }\n for (const gs of state.gridSessions) {\n if (gs.controller)\n gs.controller.dispose();\n if (gs._cellElement) {\n gs._cellElement.remove();\n gs._cellElement = null;\n }\n }\n state.gridSessions = [];\n state.gridFocusIndex = 0;\n const container = document.getElementById(\"desktop-grid-container\");\n container.className = \"\";\n container.style.display = \"\";\n container.innerHTML = \"\";\n const dtc = document.getElementById(\"desktop-terminal-container\");\n dtc.style.display = \"none\";\n dtc.innerHTML = \"\";\n state.terminalController = null;\n if (preserved.focusedSession) {\n setState({\n currentSession: preserved.focusedSession.session,\n currentMachine: preserved.focusedSession.machine || \"\"\n });\n }\n}\nfunction restorePreservedGrid() {\n if (!hasPreservedGrid())\n return false;\n const restored = WP.resumeGridState(state.preservedGridSessions, state.preservedGridFocusIndex);\n state.gridSessions = restored.sessions.map((gs) => ({\n session: gs.session,\n machine: gs.machine || \"\",\n controller: null\n }));\n state.gridFocusIndex = restored.focusIndex;\n clearPreservedGrid();\n state.sidebarResizeDone = false;\n setCurrentSessionFromGridFocus(state.gridSessions, state.gridFocusIndex);\n renderGridCells();\n deps2.renderSidebar();\n return true;\n}\nfunction backFromRalph() {\n if (isDesktop() && hasPreservedGrid()) {\n returnToTerminalView();\n return;\n }\n deps2.backToSessions();\n}\nfunction backFromSettings() {\n if (state.viewBeforeSettings === \"terminal\") {\n if (returnToTerminalView())\n return;\n deps2.backToSessions();\n return;\n }\n if (state.viewBeforeSettings === \"sessions\") {\n deps2.backToSessions();\n return;\n }\n deps2.showView(state.viewBeforeSettings || \"sessions\");\n}\nfunction addToGrid(session, machine) {\n if (!(deps2.canUseWasmTerminal ? deps2.canUseWasmTerminal() : isDesktop())) {\n console.warn(\"[grid] WebAssembly unavailable — cannot open grid terminal\");\n return;\n }\n if (typeof window.createIsolatedGhostty !== \"function\") {\n console.error(\"[grid] createIsolatedGhostty unavailable — grid mode disabled to prevent WASM OOB crash. Reload to pick up a newer ghostty-web bundle.\");\n if (typeof window !== \"undefined\" && typeof window.alert === \"function\") {\n window.alert(`Grid mode is disabled in this tab.\n\n` + \"The terminal WASM bundle does not support per-cell isolation, which is required \" + \"to safely show multiple terminals at once. (Older versions of ghostty-web are \" + `affected.)\n\nReload the page to pick up a fresh bundle.`);\n }\n return;\n }\n const targetMachine = machine || \"\";\n if (state.currentView !== \"terminal\" && hasPreservedGrid()) {\n const result = WP.addToGridState(state.preservedGridSessions, session, targetMachine, state.currentSession || \"\", state.currentMachine || \"\");\n if (!result)\n return;\n state.preservedGridSessions = result.sessions;\n state.preservedGridFocusIndex = result.focusIndex;\n setCurrentSessionFromGridFocus(state.preservedGridSessions, state.preservedGridFocusIndex);\n deps2.showView(\"terminal\", true);\n restorePreservedGrid();\n return;\n }\n if (state.gridSessions.length >= MAX_GRID_CELLS)\n return;\n if (state.currentView !== \"terminal\") {\n deps2.showView(\"terminal\", true);\n }\n if (state.sidebarAutoExpanded) {\n const sb = document.getElementById(\"desktop-sidebar\");\n if (sb) {\n sb.style.transition = \"none\";\n sb.classList.add(\"collapsed\");\n sb.offsetHeight;\n sb.style.transition = \"\";\n }\n state.sidebarCollapsed = true;\n state.sidebarAutoExpanded = false;\n }\n state.sidebarResizeDone = false;\n if (state.gridSessions.some((gs2) => gs2.session === session && (gs2.machine || \"\") === (machine || \"\")))\n return;\n const singleTermSession = state.terminalController?.term && state.currentSession ? state.currentSession : null;\n const singleTermMachine = singleTermSession ? state.currentMachine || \"\" : \"\";\n const gs = {\n session,\n machine: machine || \"\",\n controller: null\n };\n state.gridSessions.push(gs);\n if (state.gridSessions.length === 1 && state.currentSession) {\n const alreadyAdded = session === state.currentSession && (machine || \"\") === state.currentMachine;\n if (!alreadyAdded) {\n state.gridSessions.unshift({\n session: state.currentSession,\n machine: state.currentMachine,\n controller: null\n });\n }\n }\n if (singleTermSession) {\n for (const g of state.gridSessions) {\n if (g.session === singleTermSession && (g.machine || \"\") === singleTermMachine) {\n g._resetPty = true;\n }\n }\n }\n if (isGridActive()) {\n deps2.destroyTerminal();\n state.gridFocusIndex = state.gridSessions.length - 1;\n renderGridCells();\n deps2.renderSidebar();\n } else {\n state.gridSessions = [];\n deps2.openSession(session, machine || undefined);\n }\n}\nfunction removeFromGrid(idx) {\n if (idx < 0 || idx >= state.gridSessions.length)\n return;\n state.sidebarResizeDone = false;\n const gs = state.gridSessions[idx];\n if (deps2.saveGridCellSnapshot)\n deps2.saveGridCellSnapshot(gs);\n if (gs.controller)\n gs.controller.dispose();\n if (gs._cellElement) {\n gs._cellElement.remove();\n gs._cellElement = null;\n }\n state.gridSessions.splice(idx, 1);\n if (idx < state.gridFocusIndex) {\n state.gridFocusIndex--;\n } else if (state.gridFocusIndex >= state.gridSessions.length) {\n state.gridFocusIndex = Math.max(0, state.gridSessions.length - 1);\n }\n if (state.gridSessions.length <= 1) {\n exitGridMode();\n } else {\n state.gridSessions.forEach((g, i) => {\n if (g._cellElement) {\n g._cellElement.dataset.gridIndex = i;\n g._cellElement.classList.toggle(\"grid-focused\", i === state.gridFocusIndex);\n }\n });\n updateGridLayout();\n for (const gs2 of state.gridSessions) {\n if (gs2.controller)\n gs2.controller.resizeWithTransition();\n }\n setGridFocus(state.gridFocusIndex);\n }\n deps2.renderSidebar();\n}\nfunction exitGridMode(skipRestore) {\n cancelGridRelayoutTransition();\n if (state.gridResizeHandler) {\n window.removeEventListener(\"resize\", state.gridResizeHandler);\n state.gridResizeHandler = null;\n }\n const remaining = state.gridSessions.length >= 1 ? state.gridSessions[0] : null;\n const restoreSession = remaining ? remaining.session : state.currentSession;\n const restoreMachine = remaining ? remaining.machine || \"\" : state.currentMachine;\n for (const gs of state.gridSessions) {\n if (gs._cellElement) {\n gs._cellElement.remove();\n gs._cellElement = null;\n }\n if (gs.controller)\n gs.controller.dispose();\n }\n state.gridSessions = [];\n state.gridFocusIndex = 0;\n clearPreservedGrid();\n const container = document.getElementById(\"desktop-grid-container\");\n container.className = \"\";\n container.style.display = \"\";\n container.innerHTML = \"\";\n const dtc = document.getElementById(\"desktop-terminal-container\");\n dtc.style.display = \"none\";\n dtc.innerHTML = \"\";\n state.terminalController = null;\n if (restoreSession) {\n setState({ currentSession: restoreSession, currentMachine: restoreMachine });\n }\n if (!skipRestore && restoreSession) {\n deps2.initTerminal();\n deps2.renderSidebar();\n }\n}\nfunction fitAllGridCells() {\n const container = document.getElementById(\"desktop-grid-container\");\n if (container)\n container.offsetWidth;\n for (const gs of state.gridSessions) {\n if (gs.controller) {\n try {\n gs.controller.resize();\n } catch (e) {\n console.warn(\"[grid] cell resize failed:\", e);\n }\n }\n }\n}\nfunction hideGridCellsForTransition() {\n if (isGridActive()) {\n for (const gs of state.gridSessions) {\n const el = gs._cellElement;\n if (el)\n el.classList.add(\"transitioning\");\n }\n } else {\n const el = document.getElementById(\"desktop-terminal-container\");\n if (el)\n el.classList.add(\"transitioning\");\n }\n}\nfunction revealGridCellsWithoutResize() {\n if (isGridActive()) {\n for (const gs of state.gridSessions) {\n const el = gs._cellElement;\n if (el)\n el.classList.remove(\"transitioning\");\n }\n } else {\n const el = document.getElementById(\"desktop-terminal-container\");\n if (el)\n el.classList.remove(\"transitioning\");\n }\n}\nfunction scheduleGridStabilizedFit() {\n if (!isGridActive())\n return;\n for (const gs of state.gridSessions) {\n if (gs.controller)\n gs.controller.resizeWithTransition();\n }\n}\nfunction isSessionInGrid(session, machine) {\n const sessions = isGridActive() ? state.gridSessions : state.preservedGridSessions;\n return sessions.some((gs) => gs.session === session && (gs.machine || \"\") === (machine || \"\"));\n}\nfunction toggleGrid(session, machine, event) {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n if (!isGridActive() && hasPreservedGrid() && state.currentView !== \"terminal\") {\n const idx = state.preservedGridSessions.findIndex((gs) => gs.session === session && (gs.machine || \"\") === (machine || \"\"));\n if (idx !== -1) {\n const result = WP.removeFromGridState(state.preservedGridSessions, idx, state.preservedGridFocusIndex);\n if (result.exitGrid) {\n state.preservedGridSessions = [];\n state.preservedGridFocusIndex = 0;\n if (result.restoreSession) {\n setState({\n currentSession: result.restoreSession.session,\n currentMachine: result.restoreSession.machine || \"\"\n });\n }\n } else {\n state.preservedGridSessions = result.sessions;\n state.preservedGridFocusIndex = result.focusIndex;\n setCurrentSessionFromGridFocus(state.preservedGridSessions, state.preservedGridFocusIndex);\n }\n deps2.renderSidebar();\n return;\n }\n }\n if (isSessionInGrid(session, machine)) {\n const idx = state.gridSessions.findIndex((gs) => gs.session === session && (gs.machine || \"\") === (machine || \"\"));\n if (idx !== -1)\n removeFromGrid(idx);\n } else {\n addToGrid(session, machine);\n }\n}\n\n// public/app-touch.ts\nfunction setupTouchScrollHandler(container, term, sendInput, canAcceptInput) {\n let lastTouchY = 0;\n let scrollAccum = 0;\n let velocityY = 0;\n let momentumId = null;\n let tracking = false;\n const SCROLL_THRESHOLD = 28;\n const FRICTION = 0.95;\n const MIN_VELOCITY = 0.5;\n const MAX_LINES_PER_EVENT = 5;\n const velocitySamples = [];\n const MAX_SAMPLES = 5;\n const encoder = new TextEncoder;\n const LONGPRESS_MS = 500;\n const LONGPRESS_MOVE_TOLERANCE = 10;\n let longPressTimer = null;\n let selecting = false;\n let selStartX = 0, selStartY = 0;\n let selAnchorRow = -1, selAnchorCol = -1;\n let selEndRow = -1, selEndCol = -1;\n let selOverlay = null;\n function touchToCell(clientX, clientY) {\n const canvas = container.querySelector(\"canvas\");\n if (!canvas)\n return null;\n const rect = canvas.getBoundingClientRect();\n const x = clientX - rect.left;\n const y = clientY - rect.top;\n const cellW = rect.width / term.cols;\n const cellH = rect.height / term.rows;\n return {\n col: Math.max(0, Math.min(term.cols - 1, Math.floor(x / cellW))),\n row: Math.max(0, Math.min(term.rows - 1, Math.floor(y / cellH)))\n };\n }\n function getSelectedText() {\n if (selAnchorRow < 0 || selEndRow < 0)\n return \"\";\n const buf = term.buffer.active;\n const viewportY = Math.max(0, buf.viewportY || 0);\n let r0 = selAnchorRow, c0 = selAnchorCol, r1 = selEndRow, c1 = selEndCol;\n if (r0 > r1 || r0 === r1 && c0 > c1) {\n [r0, c0, r1, c1] = [r1, c1, r0, c0];\n }\n const lines = [];\n for (let r = r0;r <= r1; r++) {\n const lineIndex = Math.max(0, viewportY + r);\n const line = buf.getLine(lineIndex);\n if (!line)\n continue;\n const start = r === r0 ? c0 : 0;\n const end = r === r1 ? c1 + 1 : term.cols;\n let text = \"\";\n for (let c = start;c < end; c++) {\n const cell = line.getCell(c);\n text += cell ? cell.getChars() || \" \" : \" \";\n }\n lines.push(text.trimEnd());\n }\n return lines.join(`\n`);\n }\n let selCopyBtn = null;\n function showSelectionOverlay() {\n if (!selOverlay) {\n selOverlay = document.createElement(\"div\");\n selOverlay.style.cssText = \"position:absolute;background:rgba(0,255,65,0.18);pointer-events:none;z-index:10;border-radius:2px;\";\n container.appendChild(selOverlay);\n }\n const canvas = container.querySelector(\"canvas\");\n if (!canvas)\n return;\n const rect = canvas.getBoundingClientRect();\n const cRect = container.getBoundingClientRect();\n const cellW = rect.width / term.cols;\n const cellH = rect.height / term.rows;\n let r0 = selAnchorRow, c0 = selAnchorCol, r1 = selEndRow, c1 = selEndCol;\n if (r0 > r1 || r0 === r1 && c0 > c1) {\n [r0, c0, r1, c1] = [r1, c1, r0, c0];\n }\n const ox = rect.left - cRect.left;\n const oy = rect.top - cRect.top;\n if (r0 === r1) {\n selOverlay.style.left = ox + c0 * cellW + \"px\";\n selOverlay.style.top = oy + r0 * cellH + \"px\";\n selOverlay.style.width = (c1 - c0 + 1) * cellW + \"px\";\n selOverlay.style.height = cellH + \"px\";\n } else {\n selOverlay.style.left = ox + \"px\";\n selOverlay.style.top = oy + r0 * cellH + \"px\";\n selOverlay.style.width = term.cols * cellW + \"px\";\n selOverlay.style.height = (r1 - r0 + 1) * cellH + \"px\";\n }\n }\n function showCopyButton() {\n if (selCopyBtn)\n selCopyBtn.remove();\n const canvas = container.querySelector(\"canvas\");\n if (!canvas)\n return;\n const rect = canvas.getBoundingClientRect();\n const cRect = container.getBoundingClientRect();\n const cellH = rect.height / term.rows;\n const r0 = Math.min(selAnchorRow, selEndRow);\n const oy = rect.top - cRect.top;\n selCopyBtn = document.createElement(\"button\");\n selCopyBtn.textContent = \"Copy\";\n selCopyBtn.className = \"sel-copy-btn\";\n const btnTop = oy + r0 * cellH - 32;\n selCopyBtn.style.cssText = \"position:absolute;z-index:11;left:50%;transform:translateX(-50%);top:\" + Math.max(0, btnTop) + \"px;background:var(--accent);color:var(--bg-base);border:none;border-radius:6px;padding:4px 14px;font-size:12px;font-weight:700;font-family:inherit;cursor:pointer;pointer-events:auto;box-shadow:0 2px 8px rgba(0,0,0,0.5);\";\n selCopyBtn.addEventListener(\"touchstart\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n const text = getSelectedText();\n if (text && navigator.clipboard) {\n navigator.clipboard.writeText(text).then(() => {\n haptic([10, 30, 10]);\n if (selCopyBtn)\n selCopyBtn.textContent = \"Copied!\";\n setTimeout(() => clearSelection(), 600);\n }).catch(() => {\n clearSelection();\n });\n }\n }, { passive: false });\n selCopyBtn.addEventListener(\"click\", (e) => {\n e.stopPropagation();\n });\n container.appendChild(selCopyBtn);\n }\n function clearSelection() {\n selecting = false;\n selAnchorRow = selAnchorCol = selEndRow = selEndCol = -1;\n if (selOverlay) {\n selOverlay.remove();\n selOverlay = null;\n }\n if (selCopyBtn) {\n selCopyBtn.remove();\n selCopyBtn = null;\n }\n }\n function cancelLongPress() {\n if (longPressTimer !== null) {\n clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n }\n function sendScroll(deltaY) {\n let hasMouse = false;\n try {\n hasMouse = term.getMode(1000) || term.getMode(1002) || term.getMode(1003);\n } catch {}\n scrollAccum += deltaY;\n const lines = Math.trunc(scrollAccum / SCROLL_THRESHOLD);\n if (lines === 0)\n return;\n scrollAccum -= lines * SCROLL_THRESHOLD;\n if (hasMouse) {\n const btn = lines > 0 ? 65 : 64;\n const seq = encoder.encode(`\\x1B[<${btn};1;1M`);\n const count = Math.min(Math.abs(lines), MAX_LINES_PER_EVENT);\n for (let i = 0;i < count; i++) {\n if (canAcceptInput())\n sendInput(seq);\n }\n } else {\n term.scrollLines(lines);\n }\n }\n function cancelMomentum() {\n if (momentumId !== null) {\n cancelAnimationFrame(momentumId);\n momentumId = null;\n }\n }\n function computeVelocity() {\n if (velocitySamples.length < 2)\n return 0;\n let totalV = 0, totalW = 0;\n for (let i = 1;i < velocitySamples.length; i++) {\n const dt = velocitySamples[i].t - velocitySamples[i - 1].t;\n if (dt <= 0)\n continue;\n const v = (velocitySamples[i].y - velocitySamples[i - 1].y) / dt;\n const w = i;\n totalV += v * w;\n totalW += w;\n }\n return totalW > 0 ? totalV / totalW : 0;\n }\n function momentumTick() {\n velocityY *= FRICTION;\n if (Math.abs(velocityY) < MIN_VELOCITY) {\n momentumId = null;\n return;\n }\n sendScroll(velocityY * 16);\n momentumId = requestAnimationFrame(momentumTick);\n }\n function onTouchStart(e) {\n if (e.touches.length !== 1)\n return;\n const target = e.target;\n const isKbBtn = target.id === \"kb-open-btn\" || target.closest?.(\"#kb-open-btn\");\n if (!isKbBtn) {\n const proxy = document.getElementById(\"mobile-kb-proxy\");\n if (proxy && document.activeElement === proxy)\n proxy.blur();\n }\n cancelMomentum();\n clearSelection();\n tracking = true;\n const touch = e.touches[0];\n lastTouchY = touch.clientY;\n selStartX = touch.clientX;\n selStartY = touch.clientY;\n scrollAccum = 0;\n velocitySamples.length = 0;\n velocitySamples.push({ y: touch.clientY, t: performance.now() });\n cancelLongPress();\n longPressTimer = setTimeout(() => {\n longPressTimer = null;\n const cell = touchToCell(selStartX, selStartY);\n if (!cell)\n return;\n selecting = true;\n tracking = false;\n selAnchorRow = selEndRow = cell.row;\n selAnchorCol = selEndCol = cell.col;\n showSelectionOverlay();\n haptic(30);\n }, LONGPRESS_MS);\n }\n function onTouchMove(e) {\n if (e.touches.length !== 1)\n return;\n const touch = e.touches[0];\n if (selecting) {\n e.preventDefault();\n const cell = touchToCell(touch.clientX, touch.clientY);\n if (!cell)\n return;\n if (cell.row === selAnchorRow) {\n selEndRow = cell.row;\n selEndCol = cell.col;\n } else {\n selEndRow = cell.row;\n selEndCol = cell.row > selAnchorRow ? term.cols - 1 : 0;\n }\n showSelectionOverlay();\n return;\n }\n if (!tracking)\n return;\n const dx = touch.clientX - selStartX;\n const dy = touch.clientY - selStartY;\n if (Math.sqrt(dx * dx + dy * dy) > LONGPRESS_MOVE_TOLERANCE) {\n cancelLongPress();\n }\n e.preventDefault();\n const deltaY = lastTouchY - touch.clientY;\n lastTouchY = touch.clientY;\n velocitySamples.push({ y: touch.clientY, t: performance.now() });\n if (velocitySamples.length > MAX_SAMPLES)\n velocitySamples.shift();\n sendScroll(deltaY);\n }\n function onTouchEnd() {\n cancelLongPress();\n if (selecting) {\n showCopyButton();\n selecting = false;\n return;\n }\n if (!tracking)\n return;\n tracking = false;\n velocityY = -computeVelocity();\n if (Math.abs(velocityY) > MIN_VELOCITY) {\n momentumId = requestAnimationFrame(momentumTick);\n }\n }\n container.addEventListener(\"touchstart\", onTouchStart, { passive: true });\n container.addEventListener(\"touchmove\", onTouchMove, { passive: false });\n container.addEventListener(\"touchend\", onTouchEnd, { passive: true });\n container.addEventListener(\"touchcancel\", onTouchEnd, { passive: true });\n return function cleanup() {\n cancelMomentum();\n cancelLongPress();\n clearSelection();\n container.removeEventListener(\"touchstart\", onTouchStart);\n container.removeEventListener(\"touchmove\", onTouchMove);\n container.removeEventListener(\"touchend\", onTouchEnd);\n container.removeEventListener(\"touchcancel\", onTouchEnd);\n };\n}\n\n// public/app-debug.ts\nvar __wfTraceEnabled = (() => {\n try {\n return localStorage.getItem(\"wolfpackDebug\") === \"1\";\n } catch {\n return false;\n }\n})();\nvar __wfTraceMaxEvents = 5000;\nif (__wfTraceEnabled)\n window.__wfTrace = window.__wfTrace || {};\nfunction __wfTraceKey(session, machine) {\n return (session || \"?\") + \"@\" + (machine || \"\");\n}\nfunction __wfTraceStart(session, machine, extra) {\n if (!__wfTraceEnabled)\n return null;\n const key = __wfTraceKey(session, machine);\n const trace = {\n _meta: {\n session,\n machine: machine || \"\",\n startWall: Date.now(),\n startPerf: performance.now(),\n ...extra || {}\n },\n events: [],\n _rafCount: 0,\n _rafActive: false\n };\n window.__wfTrace[key] = trace;\n return trace;\n}\nfunction __wfTraceGet(session, machine) {\n if (!__wfTraceEnabled)\n return null;\n const key = __wfTraceKey(session, machine);\n return window.__wfTrace ? window.__wfTrace[key] || null : null;\n}\nfunction __wfTraceEvent(trace, kind, fields) {\n if (!trace)\n return;\n if (trace.events.length >= __wfTraceMaxEvents)\n return;\n trace.events.push({\n t: +(performance.now() - trace._meta.startPerf).toFixed(3),\n kind,\n ...fields || {}\n });\n}\nfunction __wfTraceRafStart(trace) {\n if (!trace || trace._rafActive)\n return;\n trace._rafActive = true;\n function tick() {\n if (!trace || !trace._rafActive)\n return;\n trace._rafCount++;\n __wfTraceEvent(trace, \"raf\", { n: trace._rafCount });\n requestAnimationFrame(tick);\n }\n requestAnimationFrame(tick);\n}\nfunction __wfTraceRafStop(trace) {\n if (!trace)\n return;\n trace._rafActive = false;\n}\nif (__wfTraceEnabled) {\n window.__wf_dumpTrace = function(sessionFilter) {\n const all = window.__wfTrace || {};\n const keys = Object.keys(all).filter((k) => !sessionFilter || k.indexOf(sessionFilter) >= 0);\n for (const key of keys) {\n const trace = all[key];\n const ev = trace.events;\n const meta = trace._meta;\n const sumByKind = {};\n let prefillBytes = 0, replayBytes = 0, prefillFrames = 0, replayFrames = 0;\n let firstPrefillT = -1, prefillDoneT = -1, firstReplayT = -1, hydratedT = -1;\n for (const e of ev) {\n sumByKind[e.kind] = (sumByKind[e.kind] || 0) + 1;\n if (e.kind === \"ws.binary\") {\n const size = typeof e.size === \"number\" ? e.size : 0;\n if (e.bucket === \"prefill\") {\n prefillBytes += size;\n prefillFrames++;\n if (firstPrefillT < 0)\n firstPrefillT = e.t;\n } else {\n replayBytes += size;\n replayFrames++;\n if (firstReplayT < 0)\n firstReplayT = e.t;\n }\n }\n if (e.kind === \"prefill_done\")\n prefillDoneT = e.t;\n if (e.kind === \"hydration.finish\")\n hydratedT = e.t;\n }\n console.group(\"[wf-trace] \" + key);\n console.log(\"meta:\", meta);\n console.log(\"counts:\", sumByKind);\n console.log(\"prefill: \" + prefillFrames + \" frames, \" + prefillBytes + \" bytes, first @ \" + firstPrefillT + \"ms, prefill_done @ \" + prefillDoneT + \"ms\");\n console.log(\"replay (post-prefill_done): \" + replayFrames + \" frames, \" + replayBytes + \" bytes, first @ \" + firstReplayT + \"ms\");\n console.log(\"hydrated @ \" + hydratedT + \"ms; rAFs during attach: \" + trace._rafCount);\n console.log(\"events:\", ev);\n console.groupEnd();\n }\n return all;\n };\n window.__wf_clearTrace = function() {\n window.__wfTrace = {};\n };\n}\nfunction captureLastCrash(snapshot) {\n try {\n if (window.__wf_lastCrash)\n return;\n const { data, err } = snapshot;\n window.__wf_lastCrash = {\n session: snapshot.session,\n cols: snapshot.cols,\n rows: snapshot.rows,\n len: data.length,\n head: Array.from(data.slice(0, 64)),\n tail: Array.from(data.slice(Math.max(0, data.length - 64))),\n err: String(err),\n stack: err instanceof Error ? err.stack : undefined,\n ts: Date.now()\n };\n console.error(\"[wf-crash]\", snapshot.session, err, \"— captured to window.__wf_lastCrash\");\n } catch {}\n}\n\n// public/app.ts\nfunction canUseWasmTerminal() {\n return !window.wasmFailed;\n}\nvar wpMetrics = {\n latencySamples: [],\n maxLatencySamples: 200,\n reconnectCount: 0,\n sendFailCount: 0,\n sendCount: 0,\n wsMessagesReceived: 0,\n sessionOpenedAt: 0,\n lastUpdateAt: 0,\n recordLatency(ms) {\n this.latencySamples.push(ms);\n if (this.latencySamples.length > this.maxLatencySamples)\n this.latencySamples.shift();\n this.lastUpdateAt = Date.now();\n },\n percentile(p) {\n const s = this.latencySamples.slice().sort((a, b) => a - b);\n if (!s.length)\n return 0;\n const i = Math.ceil(s.length * p / 100) - 1;\n return s[Math.max(0, i)];\n },\n avg() {\n if (!this.latencySamples.length)\n return 0;\n return this.latencySamples.reduce((a, b) => a + b, 0) / this.latencySamples.length;\n },\n reset() {\n this.latencySamples = [];\n this.reconnectCount = 0;\n this.sendFailCount = 0;\n this.sendCount = 0;\n this.wsMessagesReceived = 0;\n this.sessionOpenedAt = Date.now();\n this.lastUpdateAt = 0;\n }\n};\nvar debugPanelTimer = null;\nfunction toggleDebugPanel() {\n const panel = document.getElementById(\"debug-panel\");\n if (!panel)\n return;\n if (wpSettings.debugPanel) {\n panel.style.display = \"block\";\n renderDebugPanel();\n if (!debugPanelTimer)\n debugPanelTimer = setInterval(renderDebugPanel, 1000);\n } else {\n panel.style.display = \"none\";\n if (debugPanelTimer) {\n clearInterval(debugPanelTimer);\n debugPanelTimer = null;\n }\n }\n}\nfunction renderDebugPanel() {\n if (!wpSettings.debugPanel)\n return;\n const fmt = (v) => v > 0 ? v.toFixed(2) + \"ms\" : \"—\";\n const el = (id) => document.getElementById(id);\n const p50 = el(\"dbg-p50\");\n if (p50)\n p50.textContent = fmt(wpMetrics.percentile(50));\n const p95 = el(\"dbg-p95\");\n if (p95)\n p95.textContent = fmt(wpMetrics.percentile(95));\n const avg = el(\"dbg-avg\");\n if (avg)\n avg.textContent = fmt(wpMetrics.avg());\n const samples = el(\"dbg-samples\");\n if (samples)\n samples.textContent = String(wpMetrics.latencySamples.length);\n const wsMsgs = el(\"dbg-ws-msgs\");\n if (wsMsgs)\n wsMsgs.textContent = String(wpMetrics.wsMessagesReceived);\n const reconnects = el(\"dbg-reconnects\");\n if (reconnects)\n reconnects.textContent = String(wpMetrics.reconnectCount);\n const sends = el(\"dbg-sends\");\n if (sends)\n sends.textContent = String(wpMetrics.sendCount);\n const fails = el(\"dbg-send-fails\");\n if (fails) {\n fails.textContent = String(wpMetrics.sendFailCount);\n fails.style.color = wpMetrics.sendFailCount > 0 ? \"#ff4444\" : \"#00ff41\";\n }\n const uptime = el(\"dbg-uptime\");\n if (uptime) {\n if (wpMetrics.sessionOpenedAt > 0) {\n const sec = Math.floor((Date.now() - wpMetrics.sessionOpenedAt) / 1000);\n const m = Math.floor(sec / 60), s = sec % 60;\n uptime.textContent = m > 0 ? m + \"m \" + s + \"s\" : s + \"s\";\n } else {\n uptime.textContent = \"—\";\n }\n }\n}\nfunction saveQuickCmds() {\n localStorage.setItem(QC_STORAGE_KEY, JSON.stringify(state.quickCmds));\n}\nfunction renderCmdPalette() {\n const el = document.getElementById(\"cmd-palette\");\n if (!el)\n return;\n if (state.quickCmds.length === 0) {\n el.classList.remove(\"visible\");\n el.innerHTML = \"\";\n return;\n }\n el.innerHTML = state.quickCmds.map((c, i) => ``).join(\"\");\n el.classList.toggle(\"visible\", state.kbAccessoryOpen);\n}\nfunction sendQuickCmd(index) {\n const cmd = state.quickCmds[index];\n if (!cmd || !state.currentSession)\n return;\n haptic([30]);\n wpMetrics.sendCount++;\n if (!_sendTerminalInput(_textEncoder.encode(cmd.cmd + \"\\r\"))) {\n wpMetrics.sendFailCount++;\n }\n}\nfunction renderQuickCmdSettings() {\n const list = document.getElementById(\"quick-cmds-list\");\n if (!list)\n return;\n list.innerHTML = state.quickCmds.map((c, i) => `\n
\n ${esc(c.label)}\n ${esc(c.cmd)}\n ${i > 0 ? `` : ''}\n ${i < state.quickCmds.length - 1 ? `` : ''}\n \n \n
\n `).join(\"\");\n}\nfunction addQuickCmd() {\n const label = prompt(\"Label (shown on chip):\");\n if (!label || !label.trim())\n return;\n const cmd = prompt(\"Command (sent to terminal):\");\n if (!cmd || !cmd.trim())\n return;\n state.quickCmds.push({ label: label.trim(), cmd: cmd.trim() });\n saveQuickCmds();\n renderQuickCmdSettings();\n renderCmdPalette();\n}\nfunction editQuickCmd(index) {\n const c = state.quickCmds[index];\n if (!c)\n return;\n const label = prompt(\"Label:\", c.label);\n if (!label || !label.trim())\n return;\n const cmd = prompt(\"Command:\", c.cmd);\n if (!cmd || !cmd.trim())\n return;\n state.quickCmds[index] = { label: label.trim(), cmd: cmd.trim() };\n saveQuickCmds();\n renderQuickCmdSettings();\n renderCmdPalette();\n}\nfunction deleteQuickCmd(index) {\n state.quickCmds.splice(index, 1);\n saveQuickCmds();\n renderQuickCmdSettings();\n renderCmdPalette();\n}\nfunction moveQuickCmd(index, direction) {\n const target = index + direction;\n if (target < 0 || target >= state.quickCmds.length)\n return;\n const tmp = state.quickCmds[index];\n state.quickCmds[index] = state.quickCmds[target];\n state.quickCmds[target] = tmp;\n saveQuickCmds();\n renderQuickCmdSettings();\n renderCmdPalette();\n}\nasync function showGitStatus() {\n if (!state.currentSession)\n return;\n haptic([30]);\n const overlay = document.getElementById(\"git-status-overlay\");\n overlay.innerHTML = \"
loading...
\";\n overlay.classList.add(\"visible\");\n try {\n const data = await api(\"/git-status?session=\" + encodeURIComponent(state.currentSession), {}, state.currentMachine);\n overlay.innerHTML = `
${esc(data.status || \"(clean)\")}
tap to dismiss
`;\n } catch (e) {\n overlay.innerHTML = `
${esc(errorMessage(e))}
tap to dismiss
`;\n }\n}\nfunction dismissGitStatus() {\n document.getElementById(\"git-status-overlay\").classList.remove(\"visible\");\n}\nasync function copySessionToClipboard() {\n if (!state.currentSession)\n return;\n haptic([20]);\n const overlay = document.getElementById(\"git-status-overlay\");\n overlay.innerHTML = \"
copying...
\";\n overlay.classList.add(\"visible\");\n try {\n const path = \"/api/copy-text?session=\" + encodeURIComponent(state.currentSession);\n const base = (state.currentMachine || \"\").replace(/\\/$/, \"\");\n const headers = {};\n const jwt = localStorage.getItem(\"wpJwt\");\n if (jwt)\n headers[\"Authorization\"] = \"Bearer \" + jwt;\n const r = await fetch(base + path, { headers });\n if (!r.ok)\n throw new Error(\"HTTP \" + r.status);\n const text = await r.text();\n await navigator.clipboard.writeText(text);\n overlay.innerHTML = `
copied ${text.length} chars
tap to dismiss
`;\n } catch (e) {\n overlay.innerHTML = `
copy failed: ${esc(errorMessage(e))}
tap to dismiss
`;\n }\n}\nfunction sessionKey(machine, name) {\n return (machine || \"\") + \"|\" + name;\n}\nfunction saveRecents() {\n localStorage.setItem(RECENTS_STORAGE_KEY, JSON.stringify(state.sessionRecents));\n}\nfunction recordRecent(machine, name) {\n const key = sessionKey(machine, name);\n state.sessionRecents = state.sessionRecents.filter((r) => r.key !== key);\n state.sessionRecents.unshift({ key, name, machine: machine || \"\", ts: Date.now() });\n if (state.sessionRecents.length > MAX_RECENTS)\n state.sessionRecents.length = MAX_RECENTS;\n saveRecents();\n}\nvar RECONNECT_BUDGET_MS = 2 * 60 * 1000;\nvar RECONNECT_BASE_DELAY_MS = 500;\nvar RECONNECT_MAX_DELAY_MS = 5000;\nfunction createReconnector(opts = {}) {\n let _timer = null;\n let _delay = RECONNECT_BASE_DELAY_MS;\n let _startedAt = 0;\n let _blocked = false;\n function schedule(connectFn) {\n if (_timer)\n return;\n if (_blocked)\n return;\n if (opts.shouldReconnect && !opts.shouldReconnect())\n return;\n const now = Date.now();\n if (!_startedAt)\n _startedAt = now;\n const elapsed = now - _startedAt;\n const remaining = RECONNECT_BUDGET_MS - elapsed;\n if (remaining <= 0) {\n _blocked = true;\n if (opts.onExhausted)\n opts.onExhausted();\n return;\n }\n if (opts.onReconnecting)\n opts.onReconnecting();\n const jitterMs = Math.floor(Math.random() * 200);\n const delayMs = Math.min(_delay + jitterMs, RECONNECT_MAX_DELAY_MS, remaining);\n _timer = setTimeout(() => {\n _timer = null;\n if (opts.shouldReconnect && !opts.shouldReconnect())\n return;\n connectFn();\n }, delayMs);\n _delay = Math.min(Math.floor(_delay * 1.8), RECONNECT_MAX_DELAY_MS);\n }\n function cancel() {\n if (_timer) {\n clearTimeout(_timer);\n _timer = null;\n }\n }\n function reset() {\n _blocked = false;\n _startedAt = 0;\n _delay = RECONNECT_BASE_DELAY_MS;\n }\n function block() {\n _blocked = true;\n }\n function connected() {\n const wasReconnecting = _startedAt > 0;\n _delay = RECONNECT_BASE_DELAY_MS;\n _startedAt = 0;\n _blocked = false;\n return wasReconnecting;\n }\n return {\n schedule,\n cancel,\n reset,\n block,\n connected,\n get isBlocked() {\n return _blocked;\n },\n get pending() {\n return !!_timer;\n }\n };\n}\nasync function createTerminalInstance({ fontSize, scrollback, cursorBlink = true, disableStdin = false, sendInput, sendMessage, canAcceptInput, canSendResize, onWheelScroll = null, alwaysForwardWheel = false }) {\n const shouldSendResize = canSendResize || canAcceptInput;\n const tp = TERM_PRESETS[wpSettings.termFontSize] || TERM_PRESETS.medium;\n const termFontFamily = wpSettings.termFont === \"alt\" ? '\"JetBrains Mono\", \"Fira Code\", \"Source Code Pro\", \"Cascadia Code\", monospace' : '\"SF Mono\", \"Menlo\", \"Consolas\", \"DejaVu Sans Mono\", \"Liberation Mono\", monospace';\n let isolatedGhostty = null;\n if (typeof window.createIsolatedGhostty === \"function\") {\n try {\n isolatedGhostty = await window.createIsolatedGhostty();\n } catch (e) {\n console.error(\"[wf] createIsolatedGhostty failed, falling back to shared singleton (grid mode will be disabled):\", e);\n }\n } else {\n console.error(\"[wf] createIsolatedGhostty is not available — falling back to shared singleton (grid mode will be disabled). This usually means the ghostty-web bundle is out of date.\");\n }\n const term = new Terminal({\n cursorBlink,\n disableStdin,\n macOptionClickForcesSelection: true,\n fontSize: fontSize != null ? fontSize : tp.fontSize,\n lineHeight: tp.lineHeight,\n fontFamily: termFontFamily,\n ...isolatedGhostty ? { ghostty: isolatedGhostty } : {},\n theme: {\n background: \"#0a0a0a\",\n foreground: \"#e0e0e0\",\n cursor: \"#e0e0e0\",\n selectionBackground: \"rgba(255,255,255,0.2)\"\n },\n scrollback\n });\n const fitAddon = new FitAddon;\n term.loadAddon(fitAddon);\n fitAddon.proposeDimensions = function() {\n const t = this._terminal;\n if (!t?.element)\n return;\n const r = t.renderer;\n if (!r || typeof r.getMetrics !== \"function\")\n return;\n const m = r.getMetrics();\n if (!m || m.width === 0 || m.height === 0)\n return;\n const el = t.element;\n if (typeof el.clientWidth === \"undefined\")\n return;\n const cs = window.getComputedStyle(el);\n const pT = parseInt(cs.paddingTop) || 0;\n const pB = parseInt(cs.paddingBottom) || 0;\n const pL = parseInt(cs.paddingLeft) || 0;\n const pR = parseInt(cs.paddingRight) || 0;\n const { clientWidth: w, clientHeight: h } = el;\n if (w === 0 || h === 0)\n return;\n return {\n cols: Math.max(1, Math.floor((w - pL - pR) / m.width)),\n rows: Math.max(1, Math.floor((h - pT - pB) / m.height))\n };\n };\n term.attachCustomKeyEventHandler((e) => {\n if (WP.shouldInterceptCopy(e, term.hasSelection())) {\n navigator.clipboard.writeText(term.getSelection()).catch((e2) => {\n console.debug(\"[clipboard] copy failed:\", e2);\n });\n return true;\n }\n return false;\n });\n let _scrollAccum = 0;\n const SCROLL_THRESHOLD = 60;\n term.attachCustomWheelEventHandler((ev) => {\n if (onWheelScroll)\n onWheelScroll(ev);\n if (!alwaysForwardWheel) {\n try {\n const hasMouse = term.getMode(1000) || term.getMode(1002) || term.getMode(1003);\n if (!hasMouse)\n return false;\n } catch {\n return false;\n }\n }\n _scrollAccum += ev.deltaY;\n const lines = Math.trunc(_scrollAccum / SCROLL_THRESHOLD);\n if (lines === 0)\n return true;\n _scrollAccum -= lines * SCROLL_THRESHOLD;\n const btn = lines > 0 ? 65 : 64;\n const seq = `\\x1B[<${btn};1;1M`;\n const encoded = new TextEncoder().encode(seq);\n const count = Math.min(Math.abs(lines), 5);\n for (let i = 0;i < count; i++) {\n if (canAcceptInput())\n sendInput(encoded);\n }\n return true;\n });\n term.onData((data) => {\n if (canAcceptInput())\n sendInput(new TextEncoder().encode(data));\n });\n if (term.onBinary) {\n term.onBinary((data) => {\n if (canAcceptInput()) {\n const buf = new Uint8Array(data.length);\n for (let i = 0;i < data.length; i++)\n buf[i] = data.charCodeAt(i) & 255;\n sendInput(buf);\n }\n });\n }\n let _termResizeTimer = null;\n term.onResize(({ cols, rows }) => {\n if (!shouldSendResize())\n return;\n if (_termResizeTimer)\n clearTimeout(_termResizeTimer);\n _termResizeTimer = setTimeout(() => {\n _termResizeTimer = null;\n if (shouldSendResize())\n sendMessage(JSON.stringify({ type: \"resize\", cols, rows }));\n }, 50);\n });\n return { term, fitAddon };\n}\nvar DESKTOP_INITIAL_PREFILL_TIMEOUT_MS = 1000;\nfunction createInitialHydrationController(opts) {\n let _pending = false;\n let _fallbackTimer = null;\n let _settleTimer = null;\n let _startedAt = 0;\n let _lastDataAt = 0;\n const timeoutMs = opts.timeoutMs || DESKTOP_INITIAL_PREFILL_TIMEOUT_MS;\n const settleMs = opts.settleMs || 80;\n const maxPendingMs = opts.maxPendingMs || 4000;\n const minPendingMs = opts.minPendingMs || 0;\n const silenceMs = opts.silenceMs || 0;\n const _diagSession = opts.session || null;\n const _diagMachine = opts.machine || \"\";\n function _diagEvent(kind, fields) {\n if (!_diagSession)\n return;\n __wfTraceEvent(__wfTraceGet(_diagSession, _diagMachine), kind, fields);\n }\n function finish() {\n if (!_pending)\n return;\n const elapsed = Date.now() - _startedAt;\n if (minPendingMs > 0 && elapsed < minPendingMs) {\n if (_settleTimer)\n clearTimeout(_settleTimer);\n _settleTimer = setTimeout(finish, Math.max(settleMs, minPendingMs - elapsed));\n _diagEvent(\"hydration.holdMinPending\", { elapsed, minPendingMs });\n return;\n }\n if (silenceMs > 0 && _lastDataAt > 0) {\n const sinceLastData = Date.now() - _lastDataAt;\n if (sinceLastData < silenceMs && elapsed < maxPendingMs) {\n if (_settleTimer)\n clearTimeout(_settleTimer);\n _settleTimer = setTimeout(finish, silenceMs - sinceLastData);\n _diagEvent(\"hydration.holdSilence\", { sinceLastData, silenceMs });\n return;\n }\n }\n if (opts.canFinish && !opts.canFinish()) {\n if (elapsed >= maxPendingMs) {\n _diagEvent(\"hydration.maxPendingHit\", { elapsed });\n } else {\n if (_settleTimer)\n clearTimeout(_settleTimer);\n _settleTimer = setTimeout(finish, settleMs);\n _diagEvent(\"hydration.holdCanFinish\", { elapsed });\n return;\n }\n }\n _pending = false;\n if (_fallbackTimer) {\n clearTimeout(_fallbackTimer);\n _fallbackTimer = null;\n }\n if (_settleTimer) {\n clearTimeout(_settleTimer);\n _settleTimer = null;\n }\n const term = opts.getTerm();\n if (term) {\n try {\n term.scrollToBottom();\n } catch {}\n }\n _diagEvent(\"hydration.finish\", { elapsed });\n requestAnimationFrame(() => {\n if (!_pending) {\n const el = opts.getElement();\n if (el) {\n el.classList.remove(\"hydrating\");\n el.classList.add(\"hydrated\");\n }\n if (term && opts.shouldFocus())\n term.focus();\n if (opts.onReveal)\n opts.onReveal();\n _diagEvent(\"hydration.reveal\");\n }\n });\n }\n function start() {\n _pending = true;\n _startedAt = Date.now();\n if (_fallbackTimer)\n clearTimeout(_fallbackTimer);\n if (_settleTimer) {\n clearTimeout(_settleTimer);\n _settleTimer = null;\n }\n _fallbackTimer = setTimeout(finish, timeoutMs);\n _diagEvent(\"hydration.start\", { minPendingMs, timeoutMs });\n }\n function scheduleFinish() {\n if (!_pending)\n return;\n if (_settleTimer)\n clearTimeout(_settleTimer);\n _settleTimer = setTimeout(finish, settleMs);\n }\n function notifyData() {\n _lastDataAt = Date.now();\n if (_pending && _settleTimer) {\n clearTimeout(_settleTimer);\n _settleTimer = setTimeout(finish, settleMs);\n }\n }\n function cancel() {\n _pending = false;\n if (_fallbackTimer) {\n clearTimeout(_fallbackTimer);\n _fallbackTimer = null;\n }\n if (_settleTimer) {\n clearTimeout(_settleTimer);\n _settleTimer = null;\n }\n }\n return {\n get pending() {\n return _pending;\n },\n start,\n scheduleFinish,\n notifyData,\n finish,\n cancel\n };\n}\nfunction createPtySocketClient(opts) {\n let ws = null;\n const _rc = createReconnector({\n shouldReconnect: opts.shouldReconnect,\n onReconnecting: opts.onReconnecting,\n onExhausted: opts.onReconnectExhausted\n });\n let hasConnected = false;\n let consumeReset = !!opts.resetPty;\n let _initialPrefillMode = opts.prefillMode || \"full\";\n let _attachAckTimer = null;\n let _attachAckReceived = false;\n let _awaitingAttachAck = false;\n let _prefillChunks = [];\n let _awaitingPrefillDone = false;\n let _sawViewportPrefill = false;\n let _prefillDoneTimeout = null;\n let _trace = null;\n function buildUrl() {\n const resetSuffix = consumeReset ? \"&reset=1\" : \"\";\n consumeReset = false;\n const session = encodeURIComponent(opts.session);\n if (opts.machine) {\n const remote = new URL(opts.machine);\n const proto2 = remote.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n return proto2 + \"//\" + remote.host + \"/ws/pty?session=\" + session + resetSuffix;\n }\n const proto = location.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n return proto + \"//\" + location.host + \"/ws/pty?session=\" + session + resetSuffix;\n }\n let _takeControlOnAttach = !!opts.takeControlOnAttach;\n function sendAttachHandshake() {\n if (!ws || ws.readyState !== WebSocket.OPEN)\n return;\n try {\n opts.fitTerminal();\n } catch {}\n const dims = opts.getTermDimensions();\n if (!dims)\n return;\n const prefillMode = _initialPrefillMode;\n _lastSentResize = dims.cols + \"x\" + dims.rows;\n _awaitingAttachAck = true;\n _attachAckReceived = false;\n _prefillChunks = [];\n _awaitingPrefillDone = prefillMode !== \"none\";\n _sawViewportPrefill = false;\n const msg = { type: \"attach\", cols: dims.cols, rows: dims.rows, prefillMode };\n if (_takeControlOnAttach) {\n msg.takeControl = true;\n _takeControlOnAttach = false;\n }\n _trace = __wfTraceStart(opts.session, opts.machine || \"\", {\n cols: dims.cols,\n rows: dims.rows,\n prefillMode,\n takeControl: !!msg.takeControl,\n reset: !!opts.resetPty\n });\n __wfTraceEvent(_trace, \"attach.send\", { cols: dims.cols, rows: dims.rows, prefillMode });\n __wfTraceRafStart(_trace);\n ws.send(JSON.stringify(msg));\n if (_attachAckTimer)\n clearTimeout(_attachAckTimer);\n _attachAckTimer = setTimeout(() => {\n _attachAckTimer = null;\n if (_attachAckReceived)\n return;\n if (!_awaitingAttachAck)\n return;\n _awaitingAttachAck = false;\n _lastSentResize = \"\";\n sendFitResize();\n }, 300);\n }\n let _lastSentResize = \"\";\n let _resizeDebounceTimer = null;\n function sendFitResize(options) {\n if (!ws || ws.readyState !== WebSocket.OPEN)\n return;\n if (options?.fit !== false) {\n try {\n opts.fitTerminal();\n } catch {}\n }\n const dims = opts.getTermDimensions();\n if (!dims)\n return;\n const key = dims.cols + \"x\" + dims.rows;\n if (!options?.force && key === _lastSentResize)\n return;\n if (_resizeDebounceTimer)\n clearTimeout(_resizeDebounceTimer);\n _resizeDebounceTimer = setTimeout(() => {\n _resizeDebounceTimer = null;\n if (!ws || ws.readyState !== WebSocket.OPEN)\n return;\n const d = opts.getTermDimensions();\n if (!d)\n return;\n const nextKey = d.cols + \"x\" + d.rows;\n if (!options?.force && nextKey === _lastSentResize)\n return;\n const msg = JSON.stringify({ type: \"resize\", cols: d.cols, rows: d.rows });\n _lastSentResize = nextKey;\n ws.send(msg);\n }, 50);\n }\n function connect() {\n _rc.cancel();\n if (ws && ws.readyState <= WebSocket.OPEN)\n return;\n const sock = new WebSocket(buildUrl());\n sock.binaryType = \"arraybuffer\";\n ws = sock;\n sock.onopen = () => {\n console.log(\"[pty-ws]\", opts.session, \"ws.onopen, readyState=\", sock.readyState);\n const wasReconnect = hasConnected;\n hasConnected = true;\n _rc.connected();\n sendAttachHandshake();\n __wfTraceEvent(_trace, \"ws.open\", { wasReconnect });\n if (opts.onOpen)\n opts.onOpen(wasReconnect);\n };\n sock.onmessage = (ev) => {\n if (typeof ev.data === \"string\") {\n try {\n const msg = JSON.parse(ev.data);\n if (msg.type === \"attach_ack\") {\n __wfTraceEvent(_trace, \"attach_ack\");\n _attachAckReceived = true;\n _awaitingAttachAck = false;\n if (_attachAckTimer) {\n clearTimeout(_attachAckTimer);\n _attachAckTimer = null;\n }\n requestAnimationFrame(() => {\n sendFitResize({ force: true });\n });\n } else if (msg.type === \"pty_ready\") {\n __wfTraceEvent(_trace, \"pty_ready\");\n if (opts.onPtyReady)\n opts.onPtyReady();\n } else if (msg.type === \"prefill_viewport\") {\n const viewportChunks = _prefillChunks;\n _prefillChunks = [];\n const _vpBytes = viewportChunks.reduce((s, c) => s + c.length, 0);\n __wfTraceEvent(_trace, \"prefill_viewport\", {\n viewportFrames: viewportChunks.length,\n viewportBytes: _vpBytes\n });\n if (opts.onBinaryData) {\n for (const chunk of viewportChunks)\n opts.onBinaryData(chunk);\n }\n _awaitingPrefillDone = true;\n _sawViewportPrefill = true;\n if (_prefillDoneTimeout)\n clearTimeout(_prefillDoneTimeout);\n _prefillDoneTimeout = setTimeout(() => {\n _prefillDoneTimeout = null;\n if (!_awaitingPrefillDone)\n return;\n console.warn(\"[pty-ws] prefill_done timeout — force-flushing buffered output\");\n _awaitingPrefillDone = false;\n const chunks = _prefillChunks;\n _prefillChunks = [];\n _sawViewportPrefill = false;\n if (opts.onBinaryData) {\n for (const chunk of chunks)\n opts.onBinaryData(chunk);\n }\n }, 2000);\n } else if (msg.type === \"prefill_done\") {\n _awaitingPrefillDone = false;\n if (_prefillDoneTimeout) {\n clearTimeout(_prefillDoneTimeout);\n _prefillDoneTimeout = null;\n }\n const chunks = _prefillChunks;\n _prefillChunks = [];\n const _bufferedBytes = chunks.reduce((s, c) => s + c.length, 0);\n __wfTraceEvent(_trace, \"prefill_done\", {\n bufferedFrames: chunks.length,\n bufferedBytes: _bufferedBytes,\n sawViewportPrefill: _sawViewportPrefill\n });\n if (_sawViewportPrefill && chunks.length && opts.onReplacePrefill) {\n opts.onReplacePrefill();\n }\n _sawViewportPrefill = false;\n if (opts.onBinaryData) {\n for (const chunk of chunks)\n opts.onBinaryData(chunk);\n }\n } else if (msg.type === \"viewer_conflict\") {\n __wfTraceEvent(_trace, \"viewer_conflict\");\n console.log(\"[pty-ws]\", opts.session, \"viewer_conflict\");\n _awaitingAttachAck = false;\n _awaitingPrefillDone = false;\n _prefillChunks = [];\n _sawViewportPrefill = false;\n if (_prefillDoneTimeout) {\n clearTimeout(_prefillDoneTimeout);\n _prefillDoneTimeout = null;\n }\n if (_attachAckTimer) {\n clearTimeout(_attachAckTimer);\n _attachAckTimer = null;\n }\n if (opts.onViewerConflict)\n opts.onViewerConflict();\n } else if (msg.type === \"control_granted\") {\n __wfTraceEvent(_trace, \"control_granted\");\n console.log(\"[pty-ws]\", opts.session, \"control_granted — sending re-attach\");\n sendAttachHandshake();\n if (opts.onControlGranted)\n opts.onControlGranted();\n }\n } catch (e) {\n console.warn(\"[pty-ws] failed to parse control message:\", e);\n }\n return;\n }\n if (_awaitingPrefillDone) {\n const u82 = new Uint8Array(ev.data);\n __wfTraceEvent(_trace, \"ws.binary\", { bucket: \"prefill\", size: u82.length, buffered: _prefillChunks.length + 1 });\n _prefillChunks.push(u82);\n return;\n }\n const u8 = new Uint8Array(ev.data);\n __wfTraceEvent(_trace, \"ws.binary\", { bucket: \"replay\", size: u8.length });\n if (opts.onBinaryData)\n opts.onBinaryData(u8);\n };\n sock.onclose = (ev) => {\n if (ws !== sock)\n return;\n __wfTraceEvent(_trace, \"ws.close\", { code: ev.code, reason: String(ev.reason || \"\") });\n __wfTraceRafStop(_trace);\n ws = null;\n _awaitingAttachAck = false;\n _awaitingPrefillDone = false;\n _prefillChunks = [];\n _sawViewportPrefill = false;\n if (_prefillDoneTimeout) {\n clearTimeout(_prefillDoneTimeout);\n _prefillDoneTimeout = null;\n }\n if (_attachAckTimer) {\n clearTimeout(_attachAckTimer);\n _attachAckTimer = null;\n }\n if (opts.onDisconnected)\n opts.onDisconnected(ev.code, ev.reason);\n };\n sock.onerror = () => {};\n }\n function scheduleReconnect() {\n _rc.schedule(() => {\n if (!ws || ws.readyState === WebSocket.CLOSED)\n connect();\n });\n }\n function sendResize(cols, rows) {\n if (ws && ws.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify({ type: \"resize\", cols, rows }));\n }\n }\n function sendTakeControl() {\n if (ws && ws.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify({ type: \"take_control\" }));\n }\n }\n function send(data) {\n if (ws && ws.readyState === WebSocket.OPEN)\n ws.send(data);\n }\n function close() {\n _rc.cancel();\n _rc.block();\n _awaitingAttachAck = false;\n _awaitingPrefillDone = false;\n _prefillChunks = [];\n _sawViewportPrefill = false;\n if (_prefillDoneTimeout) {\n clearTimeout(_prefillDoneTimeout);\n _prefillDoneTimeout = null;\n }\n if (_attachAckTimer) {\n clearTimeout(_attachAckTimer);\n _attachAckTimer = null;\n }\n if (ws) {\n ws.close();\n ws = null;\n }\n }\n function resetRetry() {\n _rc.reset();\n }\n function reconnect(reconnectOpts) {\n _rc.cancel();\n _awaitingAttachAck = false;\n _awaitingPrefillDone = false;\n _prefillChunks = [];\n _sawViewportPrefill = false;\n if (_prefillDoneTimeout) {\n clearTimeout(_prefillDoneTimeout);\n _prefillDoneTimeout = null;\n }\n if (_attachAckTimer) {\n clearTimeout(_attachAckTimer);\n _attachAckTimer = null;\n }\n _takeControlOnAttach = !!(reconnectOpts && reconnectOpts.takeControl);\n if (ws) {\n try {\n ws.close();\n } catch {}\n ws = null;\n }\n connect();\n }\n return {\n connect,\n reconnect,\n scheduleReconnect,\n sendFitResize,\n sendResize,\n sendTakeControl,\n send,\n close,\n resetRetry,\n get ws() {\n return ws;\n },\n get isOpen() {\n return !!(ws && ws.readyState === WebSocket.OPEN);\n },\n get retryBlocked() {\n return _rc.isBlocked;\n }\n };\n}\nfunction createPtyTerminalController(opts) {\n let _container = null;\n let _term = null;\n let _fitAddon = null;\n let _hydration = null;\n let _ptyClient = null;\n let _hydrationStarted = false;\n let _hydrationWritesInFlight = 0;\n let _connectEpoch = 0;\n let _reconnectPendingReset = false;\n let _postResetBuffer = null;\n let _mounting = false;\n let _cachedLoaded = false;\n let _userScrolledUp = false;\n let _scrollLockKeydownHandler = null;\n let _browserShortcutKeydownHandler = null;\n let _resizeObserver = null;\n let _layoutSyncRaf = null;\n let _resizeRehydrateTimer = null;\n const _canAcceptInput = opts.canAcceptInput || (() => !!(_ptyClient && _ptyClient.isOpen));\n const _canSendResize = opts.canSendResize || _canAcceptInput;\n const _getHydrationElement = opts.getHydrationElement || (() => _container);\n function _scheduleBufferedClear() {\n if (!_postResetBuffer)\n _postResetBuffer = [];\n const canvas = _container ? _container.querySelector(\"canvas\") : null;\n if (canvas)\n canvas.style.visibility = \"hidden\";\n _term.reset();\n requestAnimationFrame(() => {\n if (!_term || !_postResetBuffer) {\n if (canvas)\n canvas.style.visibility = \"\";\n return;\n }\n const buf = _postResetBuffer;\n _postResetBuffer = null;\n for (const chunk of buf)\n _writeTermData(chunk);\n if (canvas)\n canvas.style.visibility = \"\";\n });\n }\n function _writeTermData(data) {\n if (!_term)\n return;\n const _diagTrace = __wfTraceGet(opts.session, opts.machine || \"\");\n const _diagPending = !!(_hydration && _hydration.pending);\n __wfTraceEvent(_diagTrace, \"_writeTermData\", { size: data.length, hydrating: _diagPending });\n if (_hydration)\n _hydration.notifyData();\n try {\n if (_hydration && _hydration.pending) {\n const writeEpoch = _connectEpoch;\n _hydrationWritesInFlight++;\n _term.write(data, () => {\n if (writeEpoch !== _connectEpoch)\n return;\n _hydrationWritesInFlight = Math.max(0, _hydrationWritesInFlight - 1);\n __wfTraceEvent(_diagTrace, \"term.writeDone\", { size: data.length, inFlight: _hydrationWritesInFlight });\n if (_hydration)\n _hydration.scheduleFinish();\n if (opts.onOutput)\n opts.onOutput(data);\n });\n } else {\n _term.write(data);\n if (opts.onOutput)\n opts.onOutput(data);\n }\n } catch (err) {\n captureLastCrash({\n session: opts.session,\n cols: _term ? _term.cols : null,\n rows: _term ? _term.rows : null,\n data,\n err\n });\n throw err;\n }\n }\n function fitTerminalPreserveScroll() {\n if (!_fitAddon || !_term)\n return;\n const vp = _term.viewportY ?? 0;\n const oldScrollback = typeof _term.getScrollbackLength === \"function\" ? _term.getScrollbackLength() : 0;\n const wasAtBottom = vp === 0;\n _fitAddon.fit();\n if (!wasAtBottom && vp > 0) {\n const newScrollback = typeof _term.getScrollbackLength === \"function\" ? _term.getScrollbackLength() : oldScrollback;\n const target = Math.max(0, newScrollback - (oldScrollback - vp));\n try {\n _term.scrollToLine(target);\n } catch {}\n }\n }\n function forceRepaint() {\n if (!_term)\n return;\n const t = _term;\n try {\n t.renderer?.render?.(t.wasmTerm, true, t.viewportY, t);\n } catch {}\n }\n function syncLayout(options) {\n if (!_fitAddon || !_term || !_container)\n return;\n const before = { cols: _term.cols, rows: _term.rows };\n fitTerminalPreserveScroll();\n if (options?.repaint !== false)\n forceRepaint();\n if (_ptyClient)\n _ptyClient.sendFitResize({ force: !!options?.forceSend, fit: false });\n if (before.cols !== _term.cols || before.rows !== _term.rows) {\n scheduleResizeRehydrate();\n }\n }\n function shouldSuppressContainerResize() {\n return isDesktop() && !state.sidebarPinned && !state.sessionsExpanded && (state.sidebarTransitionIsHover || state.sidebarAutoExpanded);\n }\n function scheduleResizeRehydrate() {\n if (opts.prefillMode !== \"full\")\n return;\n if (!_ptyClient || !_ptyClient.isOpen)\n return;\n if (shouldSuppressContainerResize())\n return;\n if (_resizeRehydrateTimer)\n clearTimeout(_resizeRehydrateTimer);\n _resizeRehydrateTimer = setTimeout(() => {\n _resizeRehydrateTimer = null;\n if (!_term || !_ptyClient || !_ptyClient.isOpen)\n return;\n if (shouldSuppressContainerResize())\n return;\n _ptyClient.reconnect();\n }, 350);\n }\n function scheduleLayoutSync(options) {\n if (_layoutSyncRaf)\n cancelAnimationFrame(_layoutSyncRaf);\n _layoutSyncRaf = requestAnimationFrame(() => {\n _layoutSyncRaf = null;\n syncLayout(options);\n });\n }\n async function mount(container, mountOpts) {\n if (_term || _mounting)\n return;\n _mounting = true;\n try {\n await window.ghosttyReady;\n } catch (err) {\n console.error(\"[ghostty-web] WASM init failed:\", err);\n _mounting = false;\n return;\n }\n if (_term || !_mounting) {\n _mounting = false;\n return;\n }\n _container = container;\n const result = await createTerminalInstance({\n fontSize: opts.fontSize,\n scrollback: opts.scrollback,\n cursorBlink: opts.cursorBlink,\n disableStdin: opts.disableStdin,\n sendInput: (data) => _ptyClient && _ptyClient.send(data),\n sendMessage: (msg) => _ptyClient && _ptyClient.send(msg),\n canAcceptInput: _canAcceptInput,\n canSendResize: _canSendResize,\n alwaysForwardWheel: false,\n onWheelScroll: (ev) => {\n if (!_term)\n return;\n try {\n const hasMouse = _term.getMode(1000) || _term.getMode(1002) || _term.getMode(1003);\n if (hasMouse)\n return;\n } catch {}\n if (ev.deltaY < 0) {\n _userScrolledUp = true;\n } else if (ev.deltaY > 0) {\n requestAnimationFrame(() => {\n if (_term && _term.viewportY === 0)\n _userScrolledUp = false;\n });\n }\n }\n });\n if (!_mounting || _term) {\n try {\n result.term && result.term.dispose && result.term.dispose();\n } catch {}\n _mounting = false;\n return;\n }\n _term = result.term;\n _fitAddon = result.fitAddon;\n const hydrationEl = _getHydrationElement();\n if (hydrationEl) {\n hydrationEl.classList.add(\"hydrating\");\n hydrationEl.classList.remove(\"hydrated\");\n }\n _term.open(container);\n if (typeof ResizeObserver !== \"undefined\") {\n _resizeObserver = new ResizeObserver((entries) => {\n if (!entries.length)\n return;\n if (!_container || !_term)\n return;\n if (_container.clientWidth === 0 || _container.clientHeight === 0)\n return;\n if (shouldSuppressContainerResize())\n return;\n scheduleLayoutSync({ forceSend: true, repaint: true, reason: \"container-resize\" });\n });\n _resizeObserver.observe(container);\n }\n const _openCanvas = container.querySelector(\"canvas\");\n if (_openCanvas) {\n const ctx = _openCanvas.getContext(\"2d\");\n if (ctx) {\n ctx.fillStyle = \"#0a0a0a\";\n ctx.fillRect(0, 0, _openCanvas.width, _openCanvas.height);\n }\n }\n {\n const origScrollToBottom = _term.scrollToBottom.bind(_term);\n _term.scrollToBottom = () => {\n if (_userScrolledUp)\n return;\n origScrollToBottom();\n };\n const origScrollLines = _term.scrollLines.bind(_term);\n _term.scrollLines = (n) => {\n origScrollLines(n);\n if (_term.viewportY > 0) {\n _userScrolledUp = true;\n } else {\n _userScrolledUp = false;\n }\n };\n _scrollLockKeydownHandler = () => {\n if (_userScrolledUp) {\n _userScrolledUp = false;\n origScrollToBottom();\n }\n };\n container.addEventListener(\"keydown\", _scrollLockKeydownHandler, true);\n }\n _browserShortcutKeydownHandler = (e) => {\n if ((e.metaKey || e.ctrlKey) && !e.altKey) {\n const k = e.key.toLowerCase();\n if (\"rwtlnq\".includes(k) || e.shiftKey && k === \"r\") {\n e.stopImmediatePropagation();\n }\n }\n };\n container.addEventListener(\"keydown\", _browserShortcutKeydownHandler, true);\n _hydration = createInitialHydrationController({\n getElement: _getHydrationElement,\n getTerm: () => _term,\n shouldFocus: opts.shouldFocus || (() => true),\n canFinish: () => _hydrationWritesInFlight === 0,\n onReveal: () => forceRepaint(),\n timeoutMs: opts.hydrationTimeoutMs,\n settleMs: 50,\n minPendingMs: 200,\n silenceMs: 150,\n session: opts.session,\n machine: opts.machine || \"\"\n });\n syncLayout({ forceSend: false, repaint: true, reason: \"mount\" });\n if (mountOpts && mountOpts.cached) {\n _cachedLoaded = true;\n _term.write(mountOpts.cached, () => {\n try {\n _term.scrollToBottom();\n } catch {}\n });\n }\n _mounting = false;\n }\n function connect(connectOpts) {\n if (_ptyClient && _ptyClient.isOpen)\n return;\n if (_ptyClient)\n _ptyClient.close();\n _connectEpoch++;\n if (!_hydrationStarted && _hydration) {\n _hydration.start();\n _hydrationStarted = true;\n }\n if (_cachedLoaded && opts.prefillMode !== \"full\") {\n _reconnectPendingReset = true;\n _cachedLoaded = false;\n }\n let thisClient = null;\n const isCurrent = () => _ptyClient === thisClient;\n thisClient = _ptyClient = createPtySocketClient({\n takeControlOnAttach: !!(connectOpts && connectOpts.takeControl),\n session: opts.session,\n machine: opts.machine || \"\",\n resetPty: opts.resetPty,\n prefillMode: opts.prefillMode,\n getTermDimensions: () => _term ? { cols: _term.cols, rows: _term.rows } : null,\n fitTerminal: fitTerminalPreserveScroll,\n shouldReconnect: opts.shouldReconnect,\n onOpen: (wasReconnect) => {\n console.log(\"[pty-ctrl]\", opts.session, \"onOpen, isCurrent=\", isCurrent(), \"wasReconnect=\", wasReconnect);\n if (!isCurrent())\n return;\n if (!wasReconnect && _term) {\n _term.reset();\n }\n const rehydrate = WP.shouldRehydrate(wasReconnect, _hydrationStarted, opts.prefillMode !== \"full\");\n if (rehydrate && _term) {\n _hydrationWritesInFlight = 0;\n if (wasReconnect) {\n _reconnectPendingReset = true;\n if (_hydration)\n _hydration.start();\n } else {\n if (_hydration)\n _hydration.start();\n const el = _getHydrationElement();\n if (el) {\n el.classList.add(\"hydrating\");\n el.classList.remove(\"hydrated\");\n }\n }\n }\n _userScrolledUp = false;\n if (opts.onOpen)\n opts.onOpen(wasReconnect);\n },\n onPtyReady: () => {\n if (isCurrent() && opts.onPtyReady)\n opts.onPtyReady();\n },\n onReplacePrefill: () => {\n if (!_term)\n return;\n _reconnectPendingReset = false;\n _hydrationWritesInFlight = 0;\n },\n onBinaryData: (data) => {\n if (!_term)\n return;\n if (_postResetBuffer) {\n _postResetBuffer.push(data);\n return;\n }\n if (_reconnectPendingReset) {\n _reconnectPendingReset = false;\n _postResetBuffer = [data];\n _scheduleBufferedClear();\n return;\n }\n _writeTermData(data);\n },\n onViewerConflict: () => {\n if (isCurrent() && opts.onViewerConflict)\n opts.onViewerConflict();\n },\n onControlGranted: () => {\n if (!isCurrent())\n return;\n if (_hydration && _term) {\n _hydrationWritesInFlight = 0;\n _reconnectPendingReset = true;\n _hydration.start();\n const el = _getHydrationElement();\n if (el) {\n el.classList.remove(\"hydrated\");\n el.classList.add(\"hydrating\");\n }\n }\n if (opts.onControlGranted)\n opts.onControlGranted();\n },\n onDisconnected: (code, reason) => {\n if (isCurrent() && opts.onDisconnected)\n opts.onDisconnected(code, reason);\n },\n onReconnecting: () => {\n if (isCurrent() && opts.onReconnecting)\n opts.onReconnecting();\n },\n onReconnectExhausted: () => {\n if (isCurrent() && opts.onReconnectExhausted)\n opts.onReconnectExhausted();\n }\n });\n _ptyClient.connect();\n }\n function focus() {\n if (_term)\n _term.focus();\n }\n function resize() {\n syncLayout({ forceSend: true, repaint: true, reason: \"resize\" });\n }\n let _resizeTransitionId = 0;\n function resizeWithTransition() {\n if (!_fitAddon || !_term)\n return;\n syncLayout({ forceSend: true, repaint: true, reason: \"transition\" });\n }\n function dispose() {\n _connectEpoch++;\n if (_ptyClient) {\n _ptyClient.close();\n _ptyClient = null;\n }\n if (_hydration) {\n _hydration.cancel();\n _hydration = null;\n }\n _hydrationStarted = false;\n _hydrationWritesInFlight = 0;\n _reconnectPendingReset = false;\n _postResetBuffer = null;\n if (_layoutSyncRaf) {\n cancelAnimationFrame(_layoutSyncRaf);\n _layoutSyncRaf = null;\n }\n if (_resizeObserver) {\n try {\n _resizeObserver.disconnect();\n } catch {}\n _resizeObserver = null;\n }\n if (_resizeRehydrateTimer) {\n clearTimeout(_resizeRehydrateTimer);\n _resizeRehydrateTimer = null;\n }\n _mounting = false;\n _cachedLoaded = false;\n _userScrolledUp = false;\n if (_container) {\n if (_scrollLockKeydownHandler)\n _container.removeEventListener(\"keydown\", _scrollLockKeydownHandler, true);\n if (_browserShortcutKeydownHandler)\n _container.removeEventListener(\"keydown\", _browserShortcutKeydownHandler, true);\n }\n _scrollLockKeydownHandler = null;\n _browserShortcutKeydownHandler = null;\n if (_term) {\n try {\n _term.dispose();\n } catch {}\n _term = null;\n }\n _fitAddon = null;\n _container = null;\n }\n return {\n mount,\n connect,\n focus,\n resize,\n resizeWithTransition,\n dispose,\n scheduleReconnect: () => {\n if (_ptyClient)\n _ptyClient.scheduleReconnect();\n },\n sendTakeControl: () => {\n if (_ptyClient)\n _ptyClient.sendTakeControl();\n },\n sendFitResize: (options) => {\n if (_ptyClient)\n _ptyClient.sendFitResize(options);\n },\n forceRepaint,\n syncLayout,\n send: (data) => {\n if (_ptyClient)\n _ptyClient.send(data);\n },\n resetRetry: () => {\n if (_ptyClient)\n _ptyClient.resetRetry();\n },\n reconnect: (reconnectOpts) => {\n if (_ptyClient)\n _ptyClient.reconnect(reconnectOpts);\n },\n get term() {\n return _term;\n },\n get fitAddon() {\n return _fitAddon;\n },\n get ptyClient() {\n return _ptyClient;\n },\n get hydration() {\n return _hydration;\n },\n get isConnected() {\n return !!(_ptyClient && _ptyClient.isOpen);\n },\n get retryBlocked() {\n return _ptyClient ? _ptyClient.retryBlocked : false;\n }\n };\n}\nvar KEY_TO_ESCAPE = {\n Enter: \"\\r\",\n Tab: \"\\t\",\n Escape: \"\\x1B\",\n Up: \"\\x1B[A\",\n Down: \"\\x1B[B\",\n Right: \"\\x1B[C\",\n Left: \"\\x1B[D\",\n Home: \"\\x1B[H\",\n End: \"\\x1B[F\",\n PPage: \"\\x1B[5~\",\n NPage: \"\\x1B[6~\",\n BTab: \"\\x1B[Z\",\n BSpace: \"\",\n DC: \"\\x1B[3~\",\n y: \"y\",\n n: \"n\",\n \"C-a\": \"\\x01\",\n \"C-b\": \"\\x02\",\n \"C-c\": \"\\x03\",\n \"C-d\": \"\\x04\",\n \"C-e\": \"\\x05\",\n \"C-f\": \"\\x06\",\n \"C-g\": \"\\x07\",\n \"C-h\": \"\\b\",\n \"C-k\": \"\\v\",\n \"C-l\": \"\\f\",\n \"C-n\": \"\\x0E\",\n \"C-p\": \"\\x10\",\n \"C-r\": \"\\x12\",\n \"C-u\": \"\\x15\",\n \"C-w\": \"\\x17\",\n \"C-z\": \"\\x1A\"\n};\nvar _textEncoder = new TextEncoder;\nfunction _sendTerminalInput(bytes) {\n if (isGridActive()) {\n const gs = state.gridSessions[state.gridFocusIndex];\n if (gs?.controller?.isConnected) {\n gs.controller.send(bytes);\n return true;\n }\n return false;\n }\n if (state.terminalController?.isConnected) {\n state.terminalController.send(bytes);\n return true;\n }\n return false;\n}\nfunction sendMobileProxyText(proxy, text) {\n const pending = text || proxy.value;\n if (!pending)\n return true;\n const savedField = proxy.value;\n if (_sendTerminalInput(_textEncoder.encode(pending))) {\n proxy.value = \"\";\n return true;\n }\n proxy.value = savedField || pending;\n return false;\n}\nfunction flushMobileKbProxyPendingInput() {\n const proxy = document.getElementById(\"mobile-kb-proxy\");\n if (!proxy)\n return false;\n return sendMobileProxyText(proxy, proxy.value);\n}\nfunction createConflictOverlay(message, buttonLabel, onClick) {\n const overlay = document.createElement(\"div\");\n overlay.className = \"viewer-conflict-overlay\";\n overlay.innerHTML = '
' + esc(message) + '
\";\n overlay.querySelector(\".conflict-btn\").addEventListener(\"click\", onClick);\n overlay.addEventListener(\"click\", (e) => e.stopPropagation());\n return overlay;\n}\nfunction draftKey(machine, session) {\n return \"wp-draft|\" + (machine || \"\") + \"|\" + session;\n}\nfunction saveDraft() {\n if (!state.currentSession)\n return;\n const val = document.getElementById(\"msg-input\").value;\n const key = draftKey(state.currentMachine, state.currentSession);\n if (val)\n localStorage.setItem(key, val);\n else\n localStorage.removeItem(key);\n}\nfunction restoreDraft() {\n if (!state.currentSession)\n return;\n const val = localStorage.getItem(draftKey(state.currentMachine, state.currentSession)) || \"\";\n const input = document.getElementById(\"msg-input\");\n input.value = val;\n autoResizeInput();\n}\nfunction clearDraft() {\n if (!state.currentSession)\n return;\n localStorage.removeItem(draftKey(state.currentMachine, state.currentSession));\n}\nvar snapshotPending = null;\nfunction snapshotKey(machine, session) {\n return SNAPSHOT_KEY_PREFIX + (machine || \"\") + \"|\" + session;\n}\nfunction saveSnapshot(machine, session, text) {\n if (!session || !text)\n return;\n const trimmed = text.length > SNAPSHOT_MAX_BYTES ? text.slice(-SNAPSHOT_MAX_BYTES) : text;\n try {\n localStorage.setItem(snapshotKey(machine, session), JSON.stringify({ d: trimmed, ts: Date.now() }));\n } catch {}\n}\nfunction loadSnapshot(machine, session) {\n if (!session)\n return null;\n try {\n const raw = localStorage.getItem(snapshotKey(machine, session));\n if (!raw)\n return null;\n const snap = JSON.parse(raw);\n const age = (Date.now() - snap.ts) / 1000;\n if (age > (wpSettings.snapshotTtl || 900)) {\n localStorage.removeItem(snapshotKey(machine, session));\n return null;\n }\n return snap.d;\n } catch {\n return null;\n }\n}\nfunction cleanStaleSnapshots() {\n const ttl = (wpSettings.snapshotTtl || 900) * 1000;\n const now = Date.now();\n const toRemove = [];\n for (let i = 0;i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (!key || !key.startsWith(SNAPSHOT_KEY_PREFIX))\n continue;\n try {\n const snap = JSON.parse(localStorage.getItem(key));\n if (now - snap.ts > ttl)\n toRemove.push(key);\n } catch {\n toRemove.push(key);\n }\n }\n toRemove.forEach((k) => localStorage.removeItem(k));\n}\nfunction scheduleSnapshotSave(text) {\n snapshotPending = text;\n if (state.snapshotTimer)\n return;\n state.snapshotTimer = setTimeout(flushSnapshot, SNAPSHOT_SAVE_INTERVAL);\n}\nfunction flushSnapshot() {\n state.snapshotTimer = null;\n if (!state.currentSession) {\n snapshotPending = null;\n return;\n }\n let text;\n if (state.terminalController?.term) {\n text = serializeXtermTail(state.terminalController.term, 200);\n } else {\n text = snapshotPending;\n }\n snapshotPending = null;\n if (text)\n saveSnapshot(state.currentMachine, state.currentSession, text);\n flushGridSnapshots();\n}\nfunction serializeXtermTail(term, maxLines) {\n return WP.serializeBufferTail(term.buffer.active, maxLines);\n}\nfunction flushGridSnapshots() {\n for (const gs of state.gridSessions) {\n if (!gs.controller?.term)\n continue;\n const text = serializeXtermTail(gs.controller.term, 200);\n if (text)\n saveSnapshot(gs.machine || \"\", gs.session, text);\n }\n}\nfunction isValidMachineUrl(u) {\n if (typeof u !== \"string\" || u.length === 0 || u.length > 256)\n return false;\n let parsed;\n try {\n parsed = new URL(u);\n } catch {\n return false;\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\")\n return false;\n if (parsed.username || parsed.password)\n return false;\n const host = parsed.hostname;\n const isTailnet = /\\.ts\\.net$/i.test(host);\n const isIPv4 = /^\\d{1,3}(?:\\.\\d{1,3}){3}$/.test(host);\n const isLocal = host === \"localhost\" || host === \"127.0.0.1\";\n if (!isTailnet && !isIPv4 && !isLocal)\n return false;\n const port = parsed.port;\n if (port) {\n if (!/^\\d+$/.test(port))\n return false;\n const n = Number(port);\n if (n < 1 || n > 65535)\n return false;\n }\n return true;\n}\nfunction getMachines() {\n try {\n const raw = JSON.parse(localStorage.getItem(\"wolfpack-machines\") || \"[]\");\n if (!Array.isArray(raw))\n return [];\n return raw.filter((m) => m && isValidMachineUrl(m.url)).map((m) => ({\n url: m.url,\n name: typeof m.name === \"string\" ? m.name.replace(/[\\u0000-\\u001f\\u007f]/g, \"\").slice(0, 128) : \"\"\n }));\n } catch {\n return [];\n }\n}\nfunction saveMachines(list) {\n const safe = (Array.isArray(list) ? list : []).filter((m) => m && isValidMachineUrl(m.url));\n localStorage.setItem(\"wolfpack-machines\", JSON.stringify(safe));\n}\nfunction removeMachine(url) {\n const machines = getMachines().filter((m) => m.url !== url);\n saveMachines(machines);\n return machines;\n}\n(async () => {\n try {\n const resp = await fetch(\"/api/info\");\n const info = await resp.json();\n state.selfName = info.name || \"this machine\";\n state.selfVersion = info.version || \"\";\n const vEl = document.getElementById(\"settings-version\");\n if (vEl && state.selfVersion)\n vEl.textContent = \"wolfpack v\" + state.selfVersion;\n } catch {\n state.selfName = \"this machine\";\n }\n try {\n const d = await api(\"/discover\");\n const peers = d.peers || [];\n if (peers.length) {\n const peerUrls = new Set(peers.map((p) => p.url));\n let machines = getMachines();\n let changed = false;\n const before = machines.length;\n machines = machines.filter((m) => peerUrls.has(m.url));\n if (machines.length !== before)\n changed = true;\n for (const p of peers) {\n const existing = machines.find((m) => m.url === p.url);\n if (!existing) {\n machines.push({ url: p.url, name: p.name || p.hostname });\n changed = true;\n } else if (existing.name !== (p.name || p.hostname)) {\n existing.name = p.name || p.hostname;\n changed = true;\n }\n }\n if (changed) {\n saveMachines(machines);\n loadSessions();\n }\n }\n } catch {}\n})();\nfunction errorMessage(err) {\n if (err && typeof err === \"object\" && \"message\" in err) {\n const msg = err.message;\n if (typeof msg === \"string\" && msg)\n return msg;\n }\n return String(err || \"unknown error\");\n}\nasync function api(path, opts, machineUrl) {\n const base = machineUrl ? new URL(\"/api\" + path, machineUrl).href : \"/api\" + path;\n const res = await fetch(base, opts);\n const body = await res.text();\n let data = {};\n if (body) {\n try {\n data = JSON.parse(body);\n } catch {}\n }\n if (!res.ok) {\n const errorText = data && typeof data === \"object\" && \"error\" in data ? data.error : undefined;\n const message = typeof errorText === \"string\" ? errorText : body ? body.slice(0, 200) : `HTTP ${res.status}`;\n const err = new Error(message);\n err.status = res.status;\n err.data = data;\n throw err;\n }\n return data;\n}\nvar VIEW_DEPTH = {\n sessions: 0,\n projects: 1,\n agent: 2,\n settings: 1,\n terminal: 1,\n \"ralph-detail\": 1,\n \"ralph-start\": 1\n};\nfunction showView(name, skipAnimation) {\n const prevView = state.currentView;\n const prevEl = document.getElementById(prevView + \"-view\");\n const isMobile = !isDesktop();\n const effectiveName = !isMobile && name === \"sessions\" && state.currentSession && !state.sessionsExpanded ? \"terminal\" : name;\n const nextEl = document.getElementById(effectiveName + \"-view\");\n const wasSwipe = state.swipeNavigated;\n if (state.swipeNavigated) {\n skipAnimation = true;\n state.swipeNavigated = false;\n }\n const animate = isMobile && !skipAnimation && prevView !== effectiveName && prevEl && nextEl;\n const animateHeader = isMobile && prevView !== effectiveName && !skipAnimation || wasSwipe;\n const goingForward = (VIEW_DEPTH[effectiveName] || 0) > (VIEW_DEPTH[prevView] || 0);\n if (prevView === \"settings\" && effectiveName !== \"settings\" && debugPanelTimer) {\n clearInterval(debugPanelTimer);\n debugPanelTimer = null;\n }\n if (prevView === \"terminal\" && effectiveName !== \"terminal\") {\n if (isGridActive()) {\n suspendGridMode();\n } else {\n destroyTerminal();\n }\n }\n setState({ currentView: effectiveName });\n if (animate) {\n const fg = goingForward ? nextEl : prevEl;\n const bg = goingForward ? prevEl : nextEl;\n bg.style.transition = \"none\";\n bg.style.transform = goingForward ? \"translate3d(0,0,0)\" : \"translate3d(-30%,0,0)\";\n bg.classList.add(\"visible\");\n bg.style.zIndex = \"0\";\n fg.style.transition = \"none\";\n fg.style.transform = goingForward ? \"translate3d(100%,0,0)\" : \"translate3d(0,0,0)\";\n fg.classList.add(\"visible\", \"swiping\");\n fg.style.zIndex = \"2\";\n fg.offsetHeight;\n const dur = \"0.3s\";\n const ease = \"cubic-bezier(0.2, 0.9, 0.3, 1)\";\n fg.style.transition = `transform ${dur} ${ease}`;\n bg.style.transition = `transform ${dur} ${ease}`;\n fg.style.transform = goingForward ? \"translate3d(0,0,0)\" : \"translate3d(100%,0,0)\";\n bg.style.transform = goingForward ? \"translate3d(-30%,0,0)\" : \"translate3d(0,0,0)\";\n let cleaned = false;\n const cleanup = () => {\n if (cleaned)\n return;\n cleaned = true;\n [fg, bg].forEach((el) => {\n el.style.transition = \"\";\n el.style.zIndex = \"\";\n el.style.transform = \"\";\n el.classList.remove(\"swiping\");\n });\n document.querySelectorAll(\".view\").forEach((v) => {\n if (v !== nextEl)\n v.classList.remove(\"visible\");\n });\n nextEl.classList.add(\"visible\");\n };\n fg.addEventListener(\"transitionend\", cleanup, { once: true });\n setTimeout(cleanup, 350);\n } else {\n document.querySelectorAll(\".view\").forEach((v) => {\n if (v !== nextEl)\n v.classList.remove(\"visible\", \"animating\", \"swiping\");\n });\n nextEl.classList.add(\"visible\");\n nextEl.style.transform = \"\";\n }\n const back = document.getElementById(\"back-btn\");\n const title = document.getElementById(\"header-title\");\n const gear = document.getElementById(\"gear-btn\");\n const chip = document.getElementById(\"session-chip\");\n const headerCenter = document.getElementById(\"header-center\");\n if (state.sessionRefreshTimer) {\n clearInterval(state.sessionRefreshTimer);\n state.sessionRefreshTimer = null;\n }\n if (state.ralphLogPollTimer) {\n clearInterval(state.ralphLogPollTimer);\n state.ralphLogPollTimer = null;\n }\n if (!isMobile) {\n if (effectiveName !== \"sessions\" && state.sessionsExpanded) {\n state.sessionsExpanded = false;\n document.body.classList.remove(\"sessions-expanded\");\n const expandBtn = document.getElementById(\"sidebar-expand-btn\");\n if (expandBtn)\n expandBtn.classList.remove(\"active\");\n if (state.sidebarPinned) {\n const sb = document.getElementById(\"desktop-sidebar\");\n if (sb) {\n sb.classList.remove(\"collapsed\");\n state.sidebarCollapsed = false;\n }\n }\n }\n const settingsBackBtn = document.getElementById(\"settings-back-btn\");\n if (settingsBackBtn)\n settingsBackBtn.style.display = effectiveName === \"settings\" ? \"block\" : \"none\";\n const ralphDetailBackBtn = document.getElementById(\"ralph-detail-back-btn\");\n if (ralphDetailBackBtn)\n ralphDetailBackBtn.style.display = effectiveName === \"ralph-detail\" ? \"inline-block\" : \"none\";\n const ralphStartBackBtn = document.getElementById(\"ralph-start-back-btn\");\n if (ralphStartBackBtn)\n ralphStartBackBtn.style.display = effectiveName === \"ralph-start\" ? \"inline-block\" : \"none\";\n if (effectiveName === \"settings\") {\n renderQuickCmdSettings();\n loadAgentsSettings();\n } else if (effectiveName === \"ralph-detail\") {\n refreshRalphDetail();\n state.ralphLogPollTimer = setInterval(refreshRalphDetail, 2000);\n } else if (effectiveName === \"ralph-start\") {\n loadRalphStartForm();\n }\n renderSidebar();\n return;\n }\n const applyHeader = () => {\n document.getElementById(\"kb-accessory\").classList.remove(\"visible\");\n state.kbAccessoryOpen = false;\n chip.style.display = \"none\";\n closeDrawer(true);\n title.style.display = \"\";\n title.style.cursor = \"\";\n title.onclick = null;\n document.getElementById(\"header-machine-label\").style.display = \"none\";\n headerCenter.style.transform = \"\";\n if (name === \"sessions\") {\n back.style.display = \"none\";\n back.onclick = null;\n gear.style.display = \"\";\n title.textContent = \"wolfpack\";\n loadSessions();\n state.sessionRefreshTimer = setInterval(loadSessions, 5000);\n } else if (name === \"projects\") {\n back.style.display = \"block\";\n back.onclick = () => {\n showView(state.viewBeforePicker);\n loadSessions();\n };\n gear.style.display = \"none\";\n title.textContent = \"select project\";\n } else if (name === \"agent\") {\n back.style.display = \"block\";\n back.onclick = () => {\n showView(\"projects\");\n };\n gear.style.display = \"none\";\n title.textContent = \"select agent\";\n } else if (name === \"settings\") {\n back.style.display = \"block\";\n back.onclick = () => {\n showView(\"sessions\");\n loadSessions();\n };\n gear.style.display = \"none\";\n title.textContent = \"settings\";\n renderQuickCmdSettings();\n loadAgentsSettings();\n } else if (name === \"terminal\") {\n back.style.display = \"block\";\n back.onclick = () => {\n destroyTerminal();\n setState({ currentSession: null, currentMachine: \"\" });\n showView(\"sessions\");\n loadSessions();\n };\n gear.style.display = \"none\";\n title.style.display = \"none\";\n loadSessionSwitcher();\n chip.style.display = \"flex\";\n headerCenter.style.transform = \"\";\n const hml = document.getElementById(\"header-machine-label\");\n if (getMachines().length > 0) {\n const mName = state.currentMachine ? getMachines().find((m) => m.url === state.currentMachine)?.name || \"remote\" : state.selfName || \"local\";\n hml.textContent = mName;\n hml.style.display = \"block\";\n }\n } else if (name === \"ralph-detail\") {\n back.style.display = \"block\";\n back.onclick = () => {\n backToSessions();\n };\n gear.style.display = \"none\";\n const ralphMachineSuffix = state.currentRalphMachine ? \" @ \" + (getMachines().find((m) => m.url === state.currentRalphMachine)?.name || \"remote\") : \"\";\n title.textContent = (state.currentRalphProject || \"ralph\") + ralphMachineSuffix;\n refreshRalphDetail();\n state.ralphLogPollTimer = setInterval(refreshRalphDetail, 2000);\n } else if (name === \"ralph-start\") {\n back.style.display = \"block\";\n back.onclick = () => {\n backToSessions();\n };\n gear.style.display = \"none\";\n title.textContent = \"start ralph\";\n loadRalphStartForm();\n }\n };\n applyHeader();\n}\nvar TRIAGE_MAP = {\n running: { dot: \"green\", card: \"active-session\", label: \"running\", title: \"running\" },\n idle: { dot: \"gray\", card: \"idle-session\", label: \"idle\", title: \"idle\" }\n};\nvar VALID_TRIAGE = new Set([\"running\", \"idle\"]);\nfunction safeTriage(v) {\n return VALID_TRIAGE.has(v) ? v : \"idle\";\n}\nfunction triageUi(triage) {\n const key = triage && triage in TRIAGE_MAP ? triage : \"idle\";\n return TRIAGE_MAP[key];\n}\nfunction renderMachineGroupHtml(g, multiMachine) {\n const mUrl = multiMachine ? esc(g.machine.url) : \"\";\n const mUrlAttr = multiMachine ? escAttr(g.machine.url) : \"\";\n const mName = esc(g.machine.name);\n const statusDot = !multiMachine ? \"green\" : g.online ? \"green\" : g.pending ? \"gray\" : \"red\";\n const statusTitle = !multiMachine ? \"online\" : g.online ? \"online\" : g.pending ? \"connecting\" : \"offline\";\n const versionWarning = multiMachine && g.outdated ? `⚠ UPDATE` : \"\";\n let html = multiMachine ? `
` : `
`;\n html += `
${mName}${versionWarning}
`;\n if (multiMachine && g.pending) {\n html += `
Connecting...
`;\n } else if (g.online) {\n if (g.sessions.length) {\n html += g.sessions.map((s, i) => {\n const lastLine = s.lastLine || \"\";\n const ui = triageUi(s.triage);\n const anim = state.firstLoad ? \"animate-in\" : \"\";\n return `
\n
\n
\n
${esc(s.name)}${ui.label}
\n
${esc(lastLine)}
\n
\n \n
`;\n }).join(\"\");\n }\n if (g.loops && g.loops.length) {\n html += g.loops.map((loop) => renderRalphCardHtml(loop, g.machine.url || \"\")).join(\"\");\n }\n } else if (multiMachine) {\n html += `
Offline
`;\n }\n html += `
`;\n return html;\n}\nfunction fetchMachine(machineUrl, machineMeta) {\n const timeoutMs = machineUrl ? WP.peerHealthTimeoutMs(state.peerHealth, machineUrl) : 0;\n const remoteOpts = machineUrl ? { signal: AbortSignal.timeout(timeoutMs) } : undefined;\n const ralphFetch = wpSettings.ralphEnabled ? api(\"/ralph\", remoteOpts, machineUrl || undefined).catch(() => ({ loops: [] })) : Promise.resolve({ loops: [] });\n return Promise.all([api(\"/sessions\", remoteOpts, machineUrl || undefined), api(\"/info\", remoteOpts, machineUrl || undefined), ralphFetch]).then(([d, info, ralph]) => {\n if (machineUrl)\n state.peerHealth = WP.peerHealthRecordSuccess(state.peerHealth, machineUrl);\n return {\n machine: { ...machineMeta, url: machineUrl, version: info.version || \"\", name: info.name || machineMeta.name },\n sessions: d.sessions || [],\n loops: ralph.loops || [],\n online: true,\n pending: false\n };\n }).catch(() => {\n if (machineUrl)\n state.peerHealth = WP.peerHealthRecordFailure(state.peerHealth, machineUrl);\n return {\n machine: { ...machineMeta, url: machineUrl, version: \"\" },\n sessions: [],\n loops: [],\n online: false,\n pending: false\n };\n });\n}\nasync function loadSessions() {\n const myEpoch = ++state.loadSessionsEpoch;\n const el = document.getElementById(\"session-list\");\n const machines = getMachines();\n const multiMachine = machines.length > 0;\n if (!multiMachine) {\n const g = await fetchMachine(\"\", { name: state.selfName || \"this machine\" });\n if (myEpoch !== state.loadSessionsEpoch)\n return;\n state.lastSessionGroups = [g];\n state.allSessions = g.sessions.map((s) => ({ ...s, machineUrl: \"\", machineName: g.machine.name }));\n const html = renderMachineGroupHtml(g, false);\n if (html !== state.lastSessionsHtml) {\n el.innerHTML = html;\n state.lastSessionsHtml = html;\n }\n checkStateTransitions([g]);\n state.firstLoad = false;\n return;\n }\n const allMachines = [\n { url: \"\", meta: { name: state.selfName || \"this machine\" } },\n ...machines.map((m) => ({ url: m.url, meta: m }))\n ];\n if (state.firstLoad) {\n el.innerHTML = allMachines.map((m) => renderMachineGroupHtml({ machine: { ...m.meta, url: m.url }, sessions: [], online: false, pending: true }, true)).join(\"\");\n }\n const groups = new Array(allMachines.length);\n const prevByUrl = new Map((state.lastSessionGroups || []).map((g) => [g.machine.url, g]));\n const pendingPlaceholder = (m) => ({\n machine: { ...m.meta, url: m.url, version: \"\" },\n sessions: [],\n loops: [],\n online: false,\n pending: true\n });\n const groupsInOrder = () => allMachines.map((m, i) => groups[i] || prevByUrl.get(m.url) || pendingPlaceholder(m));\n const renderGroup = (i, g) => {\n const m = allMachines[i];\n const existing = el.querySelector(`[data-machine=\"${escAttr(m.url)}\"]`);\n if (!existing)\n return;\n const newHtml = renderMachineGroupHtml(g, true);\n if (existing.outerHTML !== newHtml) {\n const tmp = document.createElement(\"div\");\n tmp.innerHTML = newHtml;\n existing.replaceWith(tmp.firstElementChild);\n }\n };\n const promises = allMachines.map((m, i) => fetchMachine(m.url, m.meta).then((g) => {\n if (myEpoch !== state.loadSessionsEpoch)\n return;\n groups[i] = g;\n state.lastSessionGroups = groupsInOrder();\n renderGroup(i, g);\n renderSidebar();\n }));\n await Promise.all(promises);\n if (myEpoch !== state.loadSessionsEpoch)\n return;\n const versions = groups.filter((g) => g && g.online && g.machine.version).map((g) => g.machine.version);\n const newestVersion = versions.sort((a, b) => b.localeCompare(a, undefined, { numeric: true }))[0] || \"\";\n if (newestVersion) {\n for (let i = 0;i < groups.length; i++) {\n const g = groups[i];\n if (!g)\n continue;\n const nowOutdated = g.online && g.machine.version !== newestVersion;\n if (nowOutdated !== !!g.outdated) {\n g.outdated = nowOutdated;\n renderGroup(i, g);\n }\n }\n }\n state.firstLoad = false;\n state.lastSessionGroups = groupsInOrder();\n const out = [];\n for (const g of groups) {\n if (!g)\n continue;\n for (const s of g.sessions)\n out.push({ ...s, machineUrl: g.machine.url, machineName: g.machine.name });\n }\n state.allSessions = out;\n checkStateTransitions(groups);\n}\nasync function openSession(name, machineUrl) {\n if (state.currentView !== \"terminal\" && hasPreservedGrid())\n clearPreservedGrid();\n if (state.sessionsExpanded) {\n state.sessionsExpanded = false;\n document.body.classList.remove(\"sessions-expanded\");\n const expandBtn = document.getElementById(\"sidebar-expand-btn\");\n if (expandBtn)\n expandBtn.classList.remove(\"active\");\n if (state.sidebarPinned) {\n const sb = document.getElementById(\"desktop-sidebar\");\n if (sb) {\n sb.classList.remove(\"collapsed\");\n state.sidebarCollapsed = false;\n }\n }\n }\n if (isDesktop() && isGridActive()) {\n const gridIdx = state.gridSessions.findIndex((gs) => gs.session === name && (gs.machine || \"\") === (machineUrl || \"\"));\n if (gridIdx !== -1) {\n setGridFocus(gridIdx);\n return;\n }\n exitGridMode();\n }\n if (isDesktop() && state.currentView === \"terminal\" && state.currentSession) {\n if (state.sidebarAutoExpanded) {\n const sb = document.getElementById(\"desktop-sidebar\");\n if (sb) {\n sb.style.transition = \"none\";\n sb.classList.add(\"collapsed\");\n sb.offsetHeight;\n sb.style.transition = \"\";\n }\n state.sidebarCollapsed = true;\n state.sidebarAutoExpanded = false;\n if (sidebarAutoCollapseTimer) {\n clearTimeout(sidebarAutoCollapseTimer);\n sidebarAutoCollapseTimer = null;\n }\n }\n switchSession(machineUrl ? machineUrl + \"|\" + name : name);\n renderSidebar();\n return;\n }\n destroyTerminal();\n setState({ currentSession: name, currentMachine: machineUrl || \"\" });\n recordRecent(state.currentMachine, name);\n wpMetrics.reset();\n restoreDraft();\n const cached = loadSnapshot(state.currentMachine, name);\n showView(\"terminal\");\n initTerminal(cached);\n renderSidebar();\n}\nasync function showProjectPicker(machineUrl) {\n state.projectMachine = machineUrl || \"\";\n setState({ viewBeforePicker: state.currentView });\n showView(\"projects\");\n document.getElementById(\"new-project-name\").value = \"\";\n const el = document.getElementById(\"project-list\");\n el.innerHTML = '
Loading...
';\n try {\n const data = await api(\"/projects\", undefined, state.projectMachine);\n if (!data.projects?.length) {\n el.innerHTML = '
No projects in ~/Dev
';\n return;\n }\n el.innerHTML = data.projects.map((p) => `\n
\n
\n
${esc(p)}
\n
\n `).join(\"\");\n } catch {\n el.innerHTML = '
Failed to load projects
';\n }\n}\nfunction showTerminalLoading(label) {\n clearPreservedGrid();\n showView(\"terminal\");\n const dtc = document.getElementById(\"desktop-terminal-container\");\n dtc.style.display = \"block\";\n dtc.innerHTML = 'Starting session in ' + esc(label) + \"…\";\n}\nfunction selectProject(project) {\n state.selectedProject = project;\n state.isNewProject = false;\n showAgentPicker();\n}\nfunction selectNewProject() {\n const input = document.getElementById(\"new-project-name\");\n const name = input.value.trim();\n if (!name)\n return;\n state.selectedProject = name;\n state.isNewProject = true;\n showAgentPicker();\n}\nasync function showAgentPicker() {\n showView(\"agent\");\n const el = document.getElementById(\"agent-list\");\n el.innerHTML = '
Loading...
';\n const nameInput = document.getElementById(\"session-name-input\");\n const nameError = document.getElementById(\"session-name-error\");\n nameInput.value = \"\";\n nameInput.classList.remove(\"invalid\");\n nameError.classList.remove(\"visible\");\n try {\n const [data, nameData] = await Promise.all([\n api(\"/settings\", undefined, state.projectMachine),\n api(\"/next-session-name?project=\" + encodeURIComponent(state.selectedProject), undefined, state.projectMachine)\n ]);\n nameInput.value = nameData.name || state.selectedProject;\n const cmds = data.effective?.cmds || [\"shell\"];\n const defaultCmd = data.effective?.agentCmd;\n const html = cmds.map((cmd) => `\n
\n
\n
${esc(cmd)}
\n
\n `).join(\"\");\n el.innerHTML = html;\n } catch {\n el.innerHTML = '
Failed to load agents
';\n }\n}\n(function() {\n const input = document.getElementById(\"session-name-input\");\n const error = document.getElementById(\"session-name-error\");\n input.addEventListener(\"input\", () => {\n const val = input.value.trim();\n if (val && !/^[a-zA-Z0-9_-]+$/.test(val)) {\n input.classList.add(\"invalid\");\n error.textContent = \"letters, numbers, hyphens, underscores only\";\n error.classList.add(\"visible\");\n } else {\n input.classList.remove(\"invalid\");\n error.classList.remove(\"visible\");\n }\n });\n input.addEventListener(\"focus\", () => input.select());\n})();\nasync function loadAgentsSettings() {\n const list = document.getElementById(\"agents-list\");\n if (!list)\n return;\n list.innerHTML = '
Loading...
';\n try {\n const data = await api(\"/settings\");\n renderAgentsList(data);\n } catch (e) {\n list.innerHTML = `
Failed to load: ${esc(errorMessage(e))}
`;\n }\n}\nfunction renderAgentsList(data) {\n const list = document.getElementById(\"agents-list\");\n if (!list)\n return;\n const cmds = data.settings?.cmds || [];\n const defaultCmd = data.effective?.agentCmd;\n if (cmds.length === 0) {\n list.innerHTML = '
No agents — add one below.
';\n return;\n }\n list.innerHTML = cmds.map((c) => {\n const isDefault = c.cmd === defaultCmd && c.enabled;\n return `
\n \n ${esc(c.cmd)}\n ${isDefault ? 'default' : \"\"}\n \n
`;\n }).join(\"\");\n}\nasync function toggleAgentEnabled(cmd, enabled) {\n try {\n const data = await api(\"/settings\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ setCmdEnabled: { cmd, enabled } })\n });\n renderAgentsList(data);\n } catch (e) {\n showAgentAddError(\"Failed to toggle: \" + errorMessage(e));\n loadAgentsSettings();\n }\n}\nasync function removeAgent(cmd) {\n try {\n const data = await api(\"/settings\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ removeCmd: cmd })\n });\n renderAgentsList(data);\n } catch (e) {\n showAgentAddError(\"Failed to remove: \" + errorMessage(e));\n }\n}\nasync function addAgent() {\n const input = document.getElementById(\"agent-add-input\");\n const cmd = (input.value || \"\").trim();\n if (!cmd)\n return;\n showAgentAddError(\"\");\n try {\n const data = await api(\"/settings\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ addCmd: cmd })\n });\n input.value = \"\";\n renderAgentsList(data);\n } catch (e) {\n showAgentAddError(\"Could not add: \" + errorMessage(e));\n }\n}\nfunction showAgentAddError(msg) {\n const el = document.getElementById(\"agent-add-error\");\n if (el)\n el.textContent = msg;\n}\n(function bindAgentSettings() {\n const btn = document.getElementById(\"agent-add-btn\");\n const input = document.getElementById(\"agent-add-input\");\n if (btn)\n btn.addEventListener(\"click\", () => addAgent());\n if (input)\n input.addEventListener(\"keydown\", (e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n addAgent();\n }\n });\n})();\nasync function deleteCustomCmd(cmd, e) {\n if (e)\n e.stopPropagation();\n try {\n await api(\"/settings\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ removeCmd: cmd })\n }, state.projectMachine);\n showAgentPicker();\n } catch (e2) {\n alert(\"Failed to delete command: \" + errorMessage(e2));\n }\n}\nasync function createSessionWithAgent(cmd) {\n const nameInput = document.getElementById(\"session-name-input\");\n const sessionName = (nameInput.value || \"\").trim();\n if (sessionName && !/^[a-zA-Z0-9_-]+$/.test(sessionName))\n return;\n const machine = state.projectMachine;\n showTerminalLoading(sessionName || state.selectedProject);\n try {\n const body = state.isNewProject ? { newProject: state.selectedProject, cmd, sessionName: sessionName || undefined } : { project: state.selectedProject, cmd, sessionName: sessionName || undefined };\n const data = await api(\"/create\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body)\n }, machine);\n if (data.session) {\n setState({ currentSession: data.session, currentMachine: machine });\n loadSessions().then(() => {\n loadSessionSwitcher();\n renderSidebar();\n });\n if (isGridActive()) {\n addToGrid(data.session, machine);\n } else {\n destroyTerminal();\n initTerminal();\n }\n } else {\n alert(\"Failed to create session: Server returned no session (is wolfpack up to date?)\");\n showView(\"sessions\");\n loadSessions();\n }\n } catch (e) {\n alert(\"Failed to create session: \" + errorMessage(e));\n showView(\"sessions\");\n loadSessions();\n }\n}\nfunction connectDesktopWs() {\n if (!state.terminalController)\n return;\n state.terminalController.connect();\n}\nvar _tcState = { displaced: false, autoTakeControl: false };\nfunction showDesktopConflictOverlay() {\n const container = document.getElementById(\"desktop-terminal-container\");\n if (!container)\n return;\n if (state.terminalController && state.terminalController.hydration)\n state.terminalController.hydration.finish();\n removeDesktopConflictOverlay();\n const overlay = createConflictOverlay(\"Session active on another device\", \"Take Control\", () => {\n if (!state.terminalController)\n return;\n var clickAction = WP.handleTakeControlClick(state.terminalController.isConnected);\n if (clickAction === \"send-take-control\") {\n state.terminalController.sendTakeControl();\n } else {\n _tcState = WP.prepareAutoTakeControl(_tcState);\n state.terminalController.reconnect({ takeControl: true });\n }\n });\n overlay.id = \"desktop-conflict-overlay\";\n container.appendChild(overlay);\n}\nfunction removeDesktopConflictOverlay() {\n const el = document.getElementById(\"desktop-conflict-overlay\");\n if (el)\n el.remove();\n}\nasync function initTerminal(cached) {\n if (state.terminalController)\n return;\n if (state._cachedFallbackTimer) {\n clearTimeout(state._cachedFallbackTimer);\n state._cachedFallbackTimer = null;\n }\n const isMobile = !isDesktop();\n const container = document.getElementById(\"desktop-terminal-container\");\n const kbProxy = document.getElementById(\"mobile-kb-proxy\");\n container.style.display = \"block\";\n container.innerHTML = \"\";\n if (cached) {\n container.classList.add(\"cached-visible\");\n container.classList.remove(\"hydrating\", \"hydrated\");\n } else {\n container.classList.add(\"hydrating\");\n container.classList.remove(\"hydrated\", \"cached-visible\");\n }\n document.getElementById(\"kb-accessory\").classList.remove(\"visible\");\n state.kbAccessoryOpen = false;\n document.getElementById(\"input-bar\").style.display = \"none\";\n document.getElementById(\"cmd-palette\").classList.remove(\"visible\");\n document.getElementById(\"msg-preview\").style.display = \"none\";\n if (isMobile) {\n kbProxy.style.display = \"block\";\n kbProxy.setAttribute(\"inputmode\", \"none\");\n kbProxy.setAttribute(\"readonly\", \"\");\n document.body.classList.add(\"mobile-no-ghost-focus\");\n } else {\n kbProxy.style.display = \"none\";\n }\n _tcState = { displaced: false, autoTakeControl: false };\n let _cachedPendingReset = !!cached;\n state._cachedFallbackTimer = cached ? setTimeout(() => {\n state._cachedFallbackTimer = null;\n const el = document.getElementById(\"desktop-terminal-container\");\n if (el)\n el.classList.add(\"hydrated\");\n }, 5000) : null;\n state.terminalController = createPtyTerminalController({\n session: state.currentSession,\n machine: state.currentMachine || \"\",\n scrollback: DESKTOP_TERMINAL_SCROLLBACK,\n prefillMode: \"full\",\n disableStdin: isMobile,\n getHydrationElement: () => document.getElementById(\"desktop-terminal-container\"),\n shouldFocus: () => !isMobile,\n shouldReconnect: () => !!state.terminalController?.term,\n onOpen: (wasReconnect) => {\n if (wasReconnect)\n wpMetrics.reconnectCount++;\n _tcState = WP.handleControlGranted(_tcState);\n removeDesktopConflictOverlay();\n setConnState(\"live\");\n },\n onPtyReady: () => {\n flushMobileKbProxyPendingInput();\n if (state.terminalController)\n state.terminalController.forceRepaint();\n },\n onOutput: (data) => {\n if (_cachedPendingReset) {\n _cachedPendingReset = false;\n if (state._cachedFallbackTimer) {\n clearTimeout(state._cachedFallbackTimer);\n state._cachedFallbackTimer = null;\n }\n const el = document.getElementById(\"desktop-terminal-container\");\n if (el)\n el.classList.remove(\"cached-visible\");\n }\n if (state.enterRetryTimer) {\n clearTimeout(state.enterRetryTimer);\n state.enterRetryTimer = null;\n }\n wpMetrics.wsMessagesReceived++;\n scheduleSnapshotSave(null);\n },\n onViewerConflict: () => {\n var r = WP.handleViewerConflict(_tcState);\n _tcState = r.newState;\n if (r.action === \"auto-take-control\") {\n state.terminalController.sendTakeControl();\n } else {\n showDesktopConflictOverlay();\n }\n },\n onControlGranted: () => {\n _tcState = WP.handleControlGranted(_tcState);\n removeDesktopConflictOverlay();\n if (state.terminalController)\n state.terminalController.focus();\n if (isMobile) {\n const proxy = document.getElementById(\"mobile-kb-proxy\");\n if (proxy && proxy.style.display !== \"none\")\n proxy.focus({ preventScroll: true });\n }\n },\n onDisconnected: (code, reason) => {\n removeDesktopConflictOverlay();\n var action = WP.classifyDisconnect(code, reason || \"\");\n if (action === \"displaced\") {\n _tcState = WP.handleDisplaced(_tcState);\n showDesktopConflictOverlay();\n return;\n }\n if (action === \"session-ended\") {\n setConnState(\"session-ended\");\n const statusEl = document.getElementById(\"conn-status\");\n if (statusEl)\n statusEl.textContent = \"session unavailable — use ← to go back\";\n return;\n }\n if (action === \"pty-exited\") {\n setConnState(\"session-ended\");\n return;\n }\n state.terminalController.scheduleReconnect();\n },\n onReconnecting: () => setConnState(\"reconnecting\"),\n onReconnectExhausted: () => setConnState(\"offline\")\n });\n await state.terminalController.mount(container, { cached });\n if (!state.terminalController)\n return;\n if (!state.terminalController.term) {\n container.innerHTML = '
Terminal unavailable — WebAssembly not supported in this browser
';\n return;\n }\n if (isMobile && state.terminalController.term) {\n let neutralizeGhostFocus = function() {\n if (container.getAttribute(\"contenteditable\") && !container.getAttribute(\"inputmode\")) {\n container.setAttribute(\"inputmode\", \"none\");\n }\n container.querySelectorAll(\"textarea, input\").forEach((el) => {\n const htmlEl = el;\n if (!htmlEl.hasAttribute(\"readonly\")) {\n htmlEl.setAttribute(\"tabindex\", \"-1\");\n el.setAttribute(\"inputmode\", \"none\");\n el.setAttribute(\"readonly\", \"\");\n }\n });\n };\n state._touchCleanup = setupTouchScrollHandler(container, state.terminalController.term, (data) => state.terminalController && state.terminalController.send(data), () => !!(state.terminalController && state.terminalController.isConnected));\n neutralizeGhostFocus();\n let _ghostDebounce = null;\n state._ghostInputObserver = new MutationObserver(() => {\n if (_ghostDebounce)\n return;\n _ghostDebounce = requestAnimationFrame(() => {\n _ghostDebounce = null;\n neutralizeGhostFocus();\n });\n });\n state._ghostInputObserver.observe(container, { childList: true, subtree: true, attributes: true, attributeFilter: [\"contenteditable\"] });\n if (document.activeElement && document.activeElement !== document.body) {\n document.activeElement.blur();\n }\n }\n let _lastContainerWidth = container.clientWidth;\n const onResize = () => {\n if (state.desktopResizeTimer)\n clearTimeout(state.desktopResizeTimer);\n state.desktopResizeTimer = setTimeout(() => {\n state.desktopResizeTimer = null;\n const newWidth = container.clientWidth;\n if (isMobile && newWidth === _lastContainerWidth)\n return;\n _lastContainerWidth = newWidth;\n if (state.terminalController) {\n isMobile ? state.terminalController.resize() : state.terminalController.resizeWithTransition();\n }\n }, 60);\n };\n window.addEventListener(\"resize\", onResize);\n state.desktopResizeHandler = onResize;\n if (window.visualViewport && isMobile) {\n const termView = document.getElementById(\"terminal-view\");\n const vvHandler = () => {\n const kbHeight = window.innerHeight - window.visualViewport.height;\n const kbOpen = kbHeight > 150;\n termView.style.transform = kbOpen ? `translateY(-${kbHeight}px)` : \"\";\n const kbBtn = document.getElementById(\"kb-open-btn\");\n if (kbBtn)\n kbBtn.classList.toggle(\"active\", kbOpen);\n if (state.kbAccessoryOpen !== kbOpen) {\n state.kbAccessoryOpen = kbOpen;\n const cmd = document.getElementById(\"cmd-palette\");\n if (cmd && cmd.innerHTML)\n cmd.classList.toggle(\"visible\", kbOpen);\n if (!kbOpen) {\n const p = document.getElementById(\"mobile-kb-proxy\");\n if (p && document.activeElement !== p) {\n p.setAttribute(\"readonly\", \"\");\n p.setAttribute(\"inputmode\", \"none\");\n }\n }\n }\n };\n window.visualViewport.addEventListener(\"resize\", vvHandler);\n state.visualViewportHandler = vvHandler;\n vvHandler();\n }\n connectDesktopWs();\n}\nfunction destroyTerminal() {\n if (state._ghostInputObserver) {\n state._ghostInputObserver.disconnect();\n state._ghostInputObserver = null;\n }\n if (state._cachedFallbackTimer) {\n clearTimeout(state._cachedFallbackTimer);\n state._cachedFallbackTimer = null;\n }\n if (state.snapshotTimer) {\n clearTimeout(state.snapshotTimer);\n state.snapshotTimer = null;\n }\n flushSnapshot();\n if (state.desktopResizeTimer) {\n clearTimeout(state.desktopResizeTimer);\n state.desktopResizeTimer = null;\n }\n if (state._touchCleanup) {\n state._touchCleanup();\n state._touchCleanup = null;\n }\n if (state.terminalController) {\n state.terminalController.dispose();\n state.terminalController = null;\n }\n if (state.desktopResizeHandler) {\n window.removeEventListener(\"resize\", state.desktopResizeHandler);\n state.desktopResizeHandler = null;\n }\n if (state.visualViewportHandler && window.visualViewport) {\n window.visualViewport.removeEventListener(\"resize\", state.visualViewportHandler);\n state.visualViewportHandler = null;\n }\n const termView = document.getElementById(\"terminal-view\");\n if (termView) {\n termView.style.bottom = \"\";\n termView.style.transform = \"\";\n }\n if (state.kbResizeTimer) {\n clearTimeout(state.kbResizeTimer);\n state.kbResizeTimer = null;\n }\n const kbProxy = document.getElementById(\"mobile-kb-proxy\");\n if (kbProxy) {\n kbProxy.blur();\n kbProxy.style.display = \"none\";\n }\n document.body.classList.remove(\"mobile-no-ghost-focus\");\n const container = document.getElementById(\"desktop-terminal-container\");\n container.style.display = \"none\";\n container.classList.remove(\"hydrating\", \"hydrated\");\n container.innerHTML = \"\";\n document.getElementById(\"input-bar\").style.display = \"\";\n renderCmdPalette();\n}\nfunction setConnState(connState) {\n const statusEl = document.getElementById(\"conn-status\");\n if (!statusEl)\n return;\n const active = !!state.terminalController?.term;\n if (state.currentView !== \"terminal\" || !active || connState === \"live\") {\n statusEl.style.display = \"none\";\n statusEl.style.background = \"#cc3333\";\n return;\n }\n if (connState === \"reconnecting\") {\n statusEl.style.display = \"block\";\n statusEl.style.background = \"#8a5a00\";\n statusEl.innerHTML = 'reconnecting…';\n return;\n }\n if (connState === \"offline\") {\n statusEl.style.display = \"block\";\n statusEl.style.background = \"#cc3333\";\n statusEl.innerHTML = 'connection lost — ';\n const retryBtn = document.getElementById(\"conn-retry-btn\");\n if (retryBtn)\n retryBtn.onclick = retryConnection;\n return;\n }\n statusEl.style.display = \"block\";\n statusEl.style.background = \"#cc3333\";\n statusEl.textContent = \"session ended — use ← to go back\";\n}\nfunction retryConnection() {\n if (!state.terminalController?.term)\n return;\n setConnState(\"reconnecting\");\n connectDesktopWs();\n}\nfunction sendMsg() {\n const input = document.getElementById(\"msg-input\");\n const text = input.value.trim();\n if (!text || !state.currentSession)\n return;\n const saved = text;\n input.value = \"\";\n clearDraft();\n autoResizeInput();\n document.getElementById(\"msg-preview\").style.display = \"none\";\n const btn = document.getElementById(\"send-btn\");\n btn.classList.remove(\"send-flash\");\n btn.offsetWidth;\n btn.classList.add(\"send-flash\");\n wpMetrics.sendCount++;\n if (_sendTerminalInput(_textEncoder.encode(text.replace(/\\n/g, \" \") + \"\\r\"))) {} else {\n wpMetrics.sendFailCount++;\n input.value = saved;\n saveDraft();\n autoResizeInput();\n updatePreview();\n }\n}\nfunction updatePreview() {\n const input = document.getElementById(\"msg-input\");\n const preview = document.getElementById(\"msg-preview\");\n if (input.scrollWidth > input.clientWidth) {\n preview.textContent = input.value;\n preview.style.display = \"block\";\n } else {\n preview.style.display = \"none\";\n }\n}\nfunction sendKey(key) {\n if (!state.currentSession)\n return;\n const esc2 = KEY_TO_ESCAPE[key];\n if (!esc2)\n return;\n wpMetrics.sendCount++;\n if (_sendTerminalInput(_textEncoder.encode(esc2)))\n return;\n wpMetrics.sendFailCount++;\n}\nasync function killSession(name, e, machineUrl) {\n e.stopPropagation();\n if (!confirm(`Kill session \"${name}\"?`))\n return;\n try {\n await api(\"/kill\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ session: name })\n }, machineUrl || \"\");\n } catch (e2) {\n alert(\"Failed to kill session: \" + errorMessage(e2));\n return;\n }\n const wasCurrentSession = name === state.currentSession && (machineUrl || \"\") === state.currentMachine;\n if (wasCurrentSession && state.currentView === \"terminal\") {\n destroyTerminal();\n setState({ currentSession: null, currentMachine: \"\" });\n showView(\"sessions\");\n }\n loadSessions().then(renderSidebar);\n}\nfunction renderDrawerList() {\n const groups = state.lastSessionGroups;\n const list = document.getElementById(\"drawer-list\");\n const multiMachine = getMachines().length > 0;\n const all = [];\n for (const g of groups) {\n for (const s of g.sessions) {\n all.push({ ...s, machineUrl: g.machine.url, machineName: g.machine.name });\n }\n }\n let html = \"\";\n html += all.map((s) => drawerItemHtml(s, multiMachine)).join(\"\");\n if (!all.length) {\n html += `
No active sessions
`;\n }\n list.innerHTML = html;\n list.querySelectorAll(\".drawer-item\").forEach((el) => {\n const item = el;\n item.onclick = () => {\n switchSession(item.dataset.val);\n closeDrawer();\n };\n });\n const chipLabel = document.getElementById(\"chip-label\");\n if (chipLabel)\n chipLabel.textContent = state.currentSession || \"\";\n}\nfunction drawerItemHtml(s, multiMachine) {\n const val = s.machineUrl ? s.machineUrl + \"|\" + s.name : s.name;\n const isCurrent = s.name === state.currentSession && s.machineUrl === state.currentMachine;\n const machineLbl = multiMachine ? `${esc(s.machineName)}` : \"\";\n return `
\n
\n ${esc(s.name)}\n ${machineLbl}\n
`;\n}\nfunction loadSessionSwitcher() {\n renderDrawerList();\n}\nvar lastToggleT = 0;\nfunction toggleDrawer() {\n if (isDesktop())\n return;\n var now = Date.now();\n if (now - lastToggleT < 300)\n return;\n lastToggleT = now;\n if (state.drawerOpen)\n closeDrawer();\n else\n openDrawer();\n}\nfunction openDrawer() {\n if (isDesktop())\n return;\n if (state.drawerOpen)\n return;\n state.drawerOpen = true;\n loadSessions().then(renderDrawerList);\n const drawer = document.getElementById(\"session-drawer\");\n const backdrop = document.getElementById(\"drawer-backdrop\");\n const chip = document.getElementById(\"session-chip\");\n drawer.classList.remove(\"animating\");\n drawer.style.transform = \"translate3d(0, -100%, 0)\";\n backdrop.classList.add(\"visible\");\n backdrop.style.opacity = \"0\";\n drawer.offsetHeight;\n drawer.classList.add(\"animating\");\n drawer.classList.add(\"open\");\n drawer.style.transform = \"\";\n backdrop.style.transition = \"opacity 0.25s ease\";\n backdrop.style.opacity = \"1\";\n chip.classList.add(\"open\");\n haptic(5);\n}\nfunction closeDrawer(instant) {\n if (!state.drawerOpen)\n return;\n state.drawerOpen = false;\n const drawer = document.getElementById(\"session-drawer\");\n const backdrop = document.getElementById(\"drawer-backdrop\");\n const chip = document.getElementById(\"session-chip\");\n chip.classList.remove(\"open\");\n if (instant) {\n drawer.classList.remove(\"animating\", \"open\");\n drawer.style.transform = \"\";\n backdrop.classList.remove(\"visible\");\n backdrop.style.opacity = \"\";\n backdrop.style.transition = \"\";\n return;\n }\n drawer.classList.add(\"animating\");\n drawer.classList.remove(\"open\");\n drawer.style.transform = \"translate3d(0, -100%, 0)\";\n backdrop.style.transition = \"opacity 0.25s ease\";\n backdrop.style.opacity = \"0\";\n const cleanup = () => {\n backdrop.classList.remove(\"visible\");\n backdrop.style.opacity = \"\";\n backdrop.style.transition = \"\";\n drawer.style.transform = \"\";\n drawer.classList.remove(\"animating\");\n };\n drawer.addEventListener(\"transitionend\", cleanup, { once: true });\n setTimeout(cleanup, 300);\n}\n(function initDrawerDrag() {\n const hdr = document.querySelector(\"header\");\n const drawer = document.getElementById(\"session-drawer\");\n const backdrop = document.getElementById(\"drawer-backdrop\");\n let startY = 0, startX = 0, startTime = 0, dragging = false, maxDrag = 0;\n let touchTarget = null;\n function onStart(e) {\n if (state.currentView !== \"terminal\")\n return;\n startX = e.touches[0].clientX;\n startY = e.touches[0].clientY;\n startTime = Date.now();\n dragging = false;\n touchTarget = e.target;\n maxDrag = Math.min(drawer.scrollHeight, window.innerHeight * 0.5);\n }\n function onMove(e) {\n if (state.currentView !== \"terminal\")\n return;\n const dy = e.touches[0].clientY - startY;\n if (!state.drawerOpen && dy > 5) {\n if (!dragging) {\n dragging = true;\n drawer.classList.remove(\"animating\", \"open\");\n drawer.style.pointerEvents = \"none\";\n backdrop.classList.add(\"visible\");\n }\n const progress = Math.min(dy / maxDrag, 1);\n drawer.style.transform = `translate3d(0, ${-100 + progress * 100}%, 0)`;\n backdrop.style.opacity = String(progress);\n backdrop.style.transition = \"none\";\n }\n if (state.drawerOpen && dy < -5) {\n if (!dragging) {\n dragging = true;\n drawer.classList.remove(\"animating\");\n }\n const progress = Math.min(Math.abs(dy) / maxDrag, 1);\n drawer.style.transform = `translate3d(0, ${-progress * 100}%, 0)`;\n backdrop.style.opacity = String(1 - progress);\n backdrop.style.transition = \"none\";\n }\n }\n function onEnd(e) {\n if (!dragging) {\n const dt = Date.now() - startTime;\n const ex = e.changedTouches[0].clientX, ey = e.changedTouches[0].clientY;\n const dist = Math.abs(ex - startX) + Math.abs(ey - startY);\n if (dt < 300 && dist < 15 && touchTarget) {\n const chip = document.getElementById(\"session-chip\");\n if (chip && chip.contains(touchTarget)) {\n toggleDrawer();\n return;\n }\n const item = touchTarget.closest(\".drawer-item\");\n if (item && state.drawerOpen) {\n item.click();\n return;\n }\n }\n return;\n }\n dragging = false;\n const dy = e.changedTouches[0].clientY - startY;\n const elapsed = Date.now() - startTime;\n const velocity = Math.abs(dy) / Math.max(elapsed, 1) * 1000;\n const threshold = maxDrag * 0.25;\n if (!state.drawerOpen) {\n if (dy > threshold || velocity > 300 && dy > 10) {\n const baseDur = 0.22;\n const speedFactor = Math.min(velocity / 1500, 1);\n const dur = Math.max(0.1, baseDur * (1 - speedFactor * 0.6));\n drawer.style.transition = `transform ${dur.toFixed(2)}s cubic-bezier(0.2, 0.9, 0.3, 1)`;\n drawer.style.transform = \"translate3d(0, 0, 0)\";\n backdrop.style.transition = `opacity ${dur.toFixed(2)}s ease`;\n backdrop.style.opacity = \"1\";\n state.drawerOpen = true;\n document.getElementById(\"session-chip\").classList.add(\"open\");\n haptic(5);\n drawer.addEventListener(\"transitionend\", () => {\n drawer.style.transition = \"\";\n drawer.style.pointerEvents = \"\";\n drawer.classList.add(\"open\");\n }, { once: true });\n } else {\n drawer.style.transition = \"transform 0.2s cubic-bezier(0.2, 0.9, 0.3, 1)\";\n drawer.style.transform = \"translate3d(0, -100%, 0)\";\n backdrop.style.transition = \"opacity 0.2s ease\";\n backdrop.style.opacity = \"0\";\n drawer.addEventListener(\"transitionend\", () => {\n drawer.style.transition = \"\";\n drawer.style.transform = \"\";\n drawer.style.pointerEvents = \"\";\n backdrop.classList.remove(\"visible\");\n backdrop.style.opacity = \"\";\n backdrop.style.transition = \"\";\n }, { once: true });\n }\n } else {\n if (Math.abs(dy) > threshold || velocity > 300 && dy < -10) {\n closeDrawer();\n } else {\n drawer.style.transition = \"transform 0.2s cubic-bezier(0.2, 0.9, 0.3, 1)\";\n drawer.style.transform = \"translate3d(0, 0, 0)\";\n backdrop.style.transition = \"opacity 0.2s ease\";\n backdrop.style.opacity = \"1\";\n drawer.addEventListener(\"transitionend\", () => {\n drawer.style.transition = \"\";\n drawer.classList.add(\"open\");\n }, { once: true });\n }\n }\n }\n hdr.addEventListener(\"touchstart\", onStart, { passive: true });\n hdr.addEventListener(\"touchmove\", onMove, { passive: true });\n hdr.addEventListener(\"touchend\", onEnd, { passive: true });\n drawer.addEventListener(\"touchstart\", onStart, { passive: true });\n drawer.addEventListener(\"touchmove\", onMove, { passive: true });\n drawer.addEventListener(\"touchend\", onEnd, { passive: true });\n})();\nasync function switchSession(val) {\n state.sidebarResizeDone = false;\n let name, machineUrl;\n const pipeIdx = val.indexOf(\"|\");\n if (pipeIdx !== -1) {\n machineUrl = val.substring(0, pipeIdx);\n name = val.substring(pipeIdx + 1);\n } else {\n machineUrl = \"\";\n name = val;\n }\n if (name === state.currentSession && machineUrl === state.currentMachine) {\n if (state.terminalController) {\n if (!state.terminalController.isConnected)\n connectDesktopWs();\n } else if (state.currentView === \"terminal\") {\n initTerminal();\n }\n return;\n }\n closeDrawer(true);\n if (isGridActive())\n exitGridMode();\n destroyTerminal();\n setState({ currentSession: name, currentMachine: machineUrl });\n recordRecent(machineUrl, name);\n restoreDraft();\n loadSessionSwitcher();\n const hml = document.getElementById(\"header-machine-label\");\n if (getMachines().length > 0) {\n const mName = machineUrl ? getMachines().find((m) => m.url === machineUrl)?.name || \"remote\" : state.selfName || \"local\";\n hml.textContent = mName;\n hml.style.display = \"block\";\n }\n initTerminal();\n renderSidebar();\n}\nvar prevSessionStates = {};\nfunction checkStateTransitions(groups) {\n if (!wpSettings.notifications)\n return;\n for (const g of groups) {\n if (!g.online)\n continue;\n const mUrl = g.machine.url || \"\";\n for (const s of g.sessions) {\n const key = mUrl + \"|\" + s.name;\n const prev = prevSessionStates[key];\n const cur = s.triage || \"idle\";\n prevSessionStates[key] = cur;\n if (prev === \"running\" && cur === \"idle\") {\n haptic([200, 100, 200]);\n }\n }\n checkRalphTransitions(g.loops, mUrl, g.machine.name || \"local\");\n }\n}\nvar _hiddenAt = 0;\nvar DESKTOP_STALE_THRESHOLD_MS = 60000;\ndocument.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === \"visible\") {\n const hiddenDuration = _hiddenAt ? Date.now() - _hiddenAt : 0;\n _hiddenAt = 0;\n if (isDesktop() && !sidebarRefreshTimer) {\n startSidebarRefresh();\n }\n if (state.currentView === \"sessions\" && !state.sessionRefreshTimer) {\n loadSessions();\n state.sessionRefreshTimer = setInterval(loadSessions, 5000);\n }\n if (state.currentSession && state.currentView === \"terminal\") {\n if (!isDesktop()) {\n if (isGridActive()) {\n for (const gs of state.gridSessions) {\n if (!gs.controller || gs._displaced)\n continue;\n gs.controller.resetRetry();\n gs.controller.reconnect();\n }\n } else if (state.terminalController?.term) {\n state.terminalController.resetRetry();\n state.terminalController.reconnect();\n }\n } else if (hiddenDuration > DESKTOP_STALE_THRESHOLD_MS) {\n if (isGridActive()) {\n for (const gs of state.gridSessions) {\n if (!gs.controller || gs._displaced)\n continue;\n gs.controller.resetRetry();\n gs.controller.reconnect();\n }\n } else if (state.terminalController?.term) {\n state.terminalController.resetRetry();\n state.terminalController.reconnect();\n }\n } else {\n if (isGridActive()) {\n for (const gs of state.gridSessions) {\n if (gs.controller)\n gs.controller.forceRepaint?.();\n }\n } else if (state.terminalController?.term) {\n state.terminalController.forceRepaint();\n }\n }\n }\n } else {\n _hiddenAt = Date.now();\n if (state.sessionRefreshTimer) {\n clearInterval(state.sessionRefreshTimer);\n state.sessionRefreshTimer = null;\n }\n if (sidebarRefreshTimer) {\n clearInterval(sidebarRefreshTimer);\n sidebarRefreshTimer = null;\n }\n }\n});\nfunction _wfRepaintAllTerminals() {\n if (state.currentView !== \"terminal\")\n return;\n if (isGridActive()) {\n for (const gs of state.gridSessions) {\n if (gs.controller && !gs._displaced)\n gs.controller.forceRepaint?.();\n }\n } else if (state.terminalController?.term) {\n state.terminalController.forceRepaint();\n }\n}\nwindow.addEventListener(\"focus\", _wfRepaintAllTerminals);\nwindow.addEventListener(\"pageshow\", (e) => {\n if (e.persisted)\n _wfRepaintAllTerminals();\n});\nsetInterval(() => {\n if (document.visibilityState === \"visible\")\n _wfRepaintAllTerminals();\n}, 30000);\ndocument.getElementById(\"desktop-terminal-container\").addEventListener(\"click\", () => {\n document.getElementById(\"msg-preview\").style.display = \"none\";\n});\nfunction autoResizeInput() {\n const ta = document.getElementById(\"msg-input\");\n ta.style.height = \"auto\";\n ta.style.height = Math.min(ta.scrollHeight, 120) + \"px\";\n}\nvar msgInput = document.getElementById(\"msg-input\");\nmsgInput.addEventListener(\"input\", () => {\n autoResizeInput();\n updatePreview();\n saveDraft();\n});\nmsgInput.addEventListener(\"keydown\", (e) => {\n if (state.currentView !== \"terminal\")\n return;\n const empty = !msgInput.value.trim();\n if (e.key === \"Enter\") {\n if (wpSettings.enterSends) {\n if (!e.shiftKey) {\n e.preventDefault();\n if (empty)\n sendKey(\"Enter\");\n else\n sendMsg();\n }\n } else {\n if (e.shiftKey) {\n e.preventDefault();\n if (empty)\n sendKey(\"Enter\");\n else\n sendMsg();\n }\n }\n } else if (e.key === \"ArrowUp\" && empty) {\n e.preventDefault();\n sendKey(\"Up\");\n } else if (e.key === \"ArrowDown\" && empty) {\n e.preventDefault();\n sendKey(\"Down\");\n }\n});\n(function setupSendButton() {\n const btn = document.getElementById(\"send-btn\");\n const HOLD_MS = 400;\n const LARGE_THRESHOLD = 50;\n let holdTimer = null;\n let holdStarted = false;\n function needsHold() {\n if (!wpSettings.holdToSend)\n return false;\n const text = document.getElementById(\"msg-input\").value.trim();\n return text.length > LARGE_THRESHOLD;\n }\n function startHold(e) {\n if (!needsHold()) {\n sendMsg();\n return;\n }\n e.preventDefault();\n holdStarted = true;\n btn.classList.add(\"holding\");\n btn.style.setProperty(\"--hold-duration\", HOLD_MS + \"ms\");\n holdTimer = setTimeout(() => {\n btn.classList.remove(\"holding\");\n btn.classList.add(\"hold-complete\");\n haptic([10, 30, 10]);\n sendMsg();\n setTimeout(() => btn.classList.remove(\"hold-complete\"), 300);\n holdStarted = false;\n }, HOLD_MS);\n }\n function cancelHold() {\n if (holdTimer) {\n clearTimeout(holdTimer);\n holdTimer = null;\n }\n btn.classList.remove(\"holding\", \"hold-complete\");\n holdStarted = false;\n }\n btn.addEventListener(\"touchstart\", (e) => {\n startHold(e);\n }, { passive: false });\n btn.addEventListener(\"touchend\", cancelHold);\n btn.addEventListener(\"touchcancel\", cancelHold);\n btn.addEventListener(\"mousedown\", (e) => {\n if (e.button !== 0)\n return;\n startHold(e);\n });\n btn.addEventListener(\"mouseup\", cancelHold);\n btn.addEventListener(\"mouseleave\", cancelHold);\n})();\n(function setupKbAccessory() {\n const acc = document.getElementById(\"kb-accessory\");\n if (!acc)\n return;\n acc.querySelectorAll(\".kb-key\").forEach((btn) => {\n const key = btn.dataset.key;\n if (!key)\n return;\n let touchFired = false;\n function fire() {\n haptic([15]);\n sendKey(key);\n }\n btn.addEventListener(\"mousedown\", (e) => e.preventDefault());\n btn.addEventListener(\"touchstart\", (e) => {\n e.preventDefault();\n touchFired = true;\n fire();\n }, { passive: false });\n btn.addEventListener(\"click\", () => {\n if (touchFired) {\n touchFired = false;\n return;\n }\n fire();\n });\n });\n})();\n(function setupMobileKbProxy() {\n const proxy = document.getElementById(\"mobile-kb-proxy\");\n if (!proxy)\n return;\n let _composing = false;\n let _skipNextInput = false;\n proxy.addEventListener(\"compositionstart\", () => {\n _composing = true;\n });\n proxy.addEventListener(\"compositionend\", () => {\n _composing = false;\n if (proxy.value) {\n _skipNextInput = sendMobileProxyText(proxy, proxy.value);\n }\n });\n proxy.addEventListener(\"input\", (e) => {\n if (_skipNextInput) {\n _skipNextInput = false;\n return;\n }\n if (e.inputType === \"deleteContentBackward\")\n return;\n if (e.inputType === \"insertLineBreak\" || e.inputType === \"insertParagraph\")\n return;\n if (_composing && proxy.value) {\n const last = proxy.value.slice(-1);\n sendMobileProxyText(proxy, last);\n return;\n }\n sendMobileProxyText(proxy, proxy.value || e.data || \"\");\n });\n proxy.addEventListener(\"keydown\", (e) => {\n if (e.key === \"Enter\") {\n if (_sendTerminalInput(_textEncoder.encode(\"\\r\")))\n e.preventDefault();\n } else if (e.key === \"Backspace\") {\n if (_sendTerminalInput(_textEncoder.encode(\"\")) || !proxy.value)\n e.preventDefault();\n } else if (e.key === \"Escape\") {\n if (_sendTerminalInput(_textEncoder.encode(\"\\x1B\")))\n e.preventDefault();\n }\n });\n const kbOpenBtn = document.getElementById(\"kb-open-btn\");\n if (kbOpenBtn) {\n let toggleMobileKeyboard = function() {\n if (proxy.style.display === \"none\")\n return;\n const opening = document.activeElement !== proxy;\n if (opening) {\n proxy.removeAttribute(\"readonly\");\n proxy.setAttribute(\"inputmode\", \"text\");\n proxy.focus({ preventScroll: true });\n } else {\n proxy.blur();\n proxy.setAttribute(\"readonly\", \"\");\n proxy.setAttribute(\"inputmode\", \"none\");\n }\n state.kbAccessoryOpen = opening;\n const cmd = document.getElementById(\"cmd-palette\");\n if (cmd && cmd.innerHTML)\n cmd.classList.toggle(\"visible\", opening);\n };\n kbOpenBtn.addEventListener(\"mousedown\", (e) => e.preventDefault());\n kbOpenBtn.addEventListener(\"touchstart\", () => {\n haptic([15]);\n }, { passive: true });\n kbOpenBtn.addEventListener(\"click\", () => {\n toggleMobileKeyboard();\n });\n }\n})();\nfunction backToSessions() {\n if (isDesktop()) {\n state.sessionsExpanded = true;\n document.body.classList.add(\"sessions-expanded\");\n const expandBtn = document.getElementById(\"sidebar-expand-btn\");\n if (expandBtn)\n expandBtn.classList.add(\"active\");\n const sb = document.getElementById(\"desktop-sidebar\");\n if (sb) {\n sb.classList.add(\"collapsed\");\n state.sidebarCollapsed = true;\n state.sidebarAutoExpanded = false;\n }\n }\n showView(\"sessions\");\n loadSessions();\n}\ndocument.addEventListener(\"keydown\", (e) => {\n if (e.key !== \"Escape\")\n return;\n if (state.currentView === \"agent\") {\n e.preventDefault();\n showView(\"projects\");\n } else if (state.currentView === \"projects\") {\n e.preventDefault();\n showView(state.viewBeforePicker);\n loadSessions();\n } else if (state.currentView === \"ralph-start\" || state.currentView === \"ralph-detail\") {\n e.preventDefault();\n backFromRalph();\n } else if (state.currentView === \"settings\") {\n e.preventDefault();\n backFromSettings();\n }\n});\ndocument.addEventListener(\"keydown\", (e) => {\n if (!isDesktop())\n return;\n const mod = e.metaKey || e.ctrlKey;\n if (!mod)\n return;\n if (e.key === \"ArrowUp\" || e.key === \"ArrowDown\") {\n e.preventDefault();\n e.stopPropagation();\n if (isGridActive()) {\n const count = state.gridSessions.length;\n const next2 = e.key === \"ArrowDown\" ? (state.gridFocusIndex + 1) % count : (state.gridFocusIndex - 1 + count) % count;\n setGridFocus(next2);\n return;\n }\n if (!state.allSessions.length)\n return;\n let curIdx = state.allSessions.findIndex((s2) => s2.name === state.currentSession && (s2.machineUrl || \"\") === state.currentMachine);\n if (curIdx === -1)\n curIdx = e.key === \"ArrowDown\" ? -1 : state.allSessions.length;\n const next = e.key === \"ArrowDown\" ? (curIdx + 1) % state.allSessions.length : (curIdx - 1 + state.allSessions.length) % state.allSessions.length;\n const s = state.allSessions[next];\n openSession(s.name, s.machineUrl || undefined);\n return;\n }\n if (e.key === \"t\") {\n e.preventDefault();\n e.stopPropagation();\n showProjectPicker();\n return;\n }\n if (e.key === \"k\") {\n e.preventDefault();\n e.stopPropagation();\n if (isGridActive()) {\n const gs = state.gridSessions[state.gridFocusIndex];\n if (gs && gs.controller && gs.controller.term)\n gs.controller.term.clear();\n } else if (state.terminalController?.term) {\n state.terminalController.term.clear();\n }\n return;\n }\n if (isGridActive() && (e.key === \"ArrowLeft\" || e.key === \"ArrowRight\")) {\n e.preventDefault();\n e.stopPropagation();\n const count = state.gridSessions.length;\n let newIdx = state.gridFocusIndex;\n if (e.key === \"ArrowLeft\")\n newIdx = Math.max(0, state.gridFocusIndex - 1);\n else if (e.key === \"ArrowRight\")\n newIdx = Math.min(count - 1, state.gridFocusIndex + 1);\n if (newIdx !== state.gridFocusIndex)\n setGridFocus(newIdx);\n return;\n }\n}, true);\ndocument.getElementById(\"new-project-name\").addEventListener(\"keydown\", (e) => {\n if (e.key === \"Enter\")\n selectNewProject();\n});\nasync function showSettings() {\n setState({ viewBeforeSettings: state.currentView });\n showView(\"settings\");\n renderMachinesList();\n toggleDebugPanel();\n}\nasync function renderMachinesList() {\n const machines = getMachines();\n const el = document.getElementById(\"machines-list\");\n if (!machines.length) {\n el.innerHTML = '
No remote machines added
';\n return;\n }\n const checks = await Promise.all(machines.map((m) => fetch(new URL(\"/api/info\", m.url).href, { signal: AbortSignal.timeout(3000) }).then(() => true).catch(() => false)));\n el.innerHTML = machines.map((m, i) => {\n const dot = checks[i] ? \"green\" : \"red\";\n const dotTitle = checks[i] ? \"online\" : \"offline\";\n return `
\n
\n ${esc(m.name)}${esc(m.url)}\n \n
`;\n }).join(\"\");\n}\nfunction removeMachineUI(url) {\n removeMachine(url);\n renderMachinesList();\n}\nasync function discoverMachines() {\n const statusEl = document.getElementById(\"discover-status\");\n statusEl.textContent = \"Scanning tailnet...\";\n statusEl.style.color = \"#555\";\n try {\n const data = await api(\"/discover\");\n const peers = data.peers || [];\n if (!peers.length) {\n statusEl.textContent = \"No wolfpack instances found on tailnet\";\n statusEl.style.color = \"#555\";\n return;\n }\n const peerUrls = new Set(peers.map((p) => p.url));\n let machines = getMachines();\n const before = machines.length;\n machines = machines.filter((m) => peerUrls.has(m.url));\n const pruned = before - machines.length;\n let added = 0;\n for (const p of peers) {\n const existing = machines.find((m) => m.url === p.url);\n if (!existing) {\n machines.push({ url: p.url, name: p.name || p.hostname });\n added++;\n } else if (existing.name !== (p.name || p.hostname)) {\n existing.name = p.name || p.hostname;\n }\n }\n if (added > 0 || pruned > 0) {\n saveMachines(machines);\n renderMachinesList();\n }\n const parts = [`Found ${peers.length}`];\n if (added > 0)\n parts.push(`added ${added}`);\n if (pruned > 0)\n parts.push(`pruned ${pruned} stale`);\n if (!added && !pruned)\n parts.push(\"all up to date\");\n statusEl.textContent = parts.join(\", \");\n statusEl.style.color = \"#00ff41\";\n } catch (e) {\n statusEl.textContent = errorMessage(e);\n statusEl.style.color = \"#cc3333\";\n }\n}\nif (!isDesktop()) {\n let applySwipe = function() {\n if (!fgEl)\n return;\n const progress = Math.min(Math.abs(dx) / W(), 1);\n if (isBack) {\n fgEl.style.transform = `translate3d(${Math.max(0, dx)}px, 0, 0)`;\n bgEl.style.transform = `translate3d(${-30 + progress * 30}%, 0, 0)`;\n } else {\n if (swipeCard)\n swipeCard.style.transform = `translate3d(${Math.min(0, dx)}px, 0, 0)`;\n bgEl.style.transform = `translate3d(${100 - progress * 100}%, 0, 0)`;\n }\n };\n const vc = document.getElementById(\"view-container\");\n let sx = 0, sy = 0, st = 0, dx = 0;\n let locked = false, scrolling = false, rafId = 0;\n let isBack = false;\n let fgEl = null, bgEl = null;\n let swipeCard = null;\n const W = () => window.innerWidth;\n const BACK_TARGET = {\n terminal: \"sessions\",\n \"ralph-detail\": \"sessions\",\n projects: \"sessions\",\n agent: \"projects\",\n settings: \"sessions\",\n \"ralph-start\": \"sessions\"\n };\n vc.addEventListener(\"touchstart\", (e) => {\n if (e.touches.length !== 1)\n return;\n sx = e.touches[0].clientX;\n sy = e.touches[0].clientY;\n st = Date.now();\n dx = 0;\n locked = false;\n scrolling = false;\n fgEl = null;\n bgEl = null;\n swipeCard = null;\n }, { passive: true });\n vc.addEventListener(\"touchmove\", (e) => {\n if (e.touches.length !== 1 || scrolling)\n return;\n const cx = e.touches[0].clientX, cy = e.touches[0].clientY;\n dx = cx - sx;\n const dy = cy - sy;\n if (!locked) {\n if (Math.abs(dx) < 5 && Math.abs(dy) < 5)\n return;\n if (Math.abs(dy) > Math.abs(dx) * 0.7) {\n scrolling = true;\n return;\n }\n locked = true;\n const backTarget = BACK_TARGET[state.currentView];\n const edgeOnly = state.currentView === \"terminal\";\n if (dx > 0 && backTarget && (!edgeOnly || sx < 40)) {\n isBack = true;\n fgEl = document.getElementById(state.currentView + \"-view\");\n bgEl = document.getElementById(backTarget + \"-view\");\n } else if (dx < 0) {\n const card = e.target?.closest(\".card, .ralph-card\") ?? null;\n if (!card) {\n scrolling = true;\n return;\n }\n swipeCard = card;\n isBack = false;\n fgEl = document.getElementById(state.currentView + \"-view\");\n const isRalphCard = card.classList.contains(\"ralph-card\");\n const targetView = state.currentView === \"sessions\" ? isRalphCard ? \"ralph-detail\" : \"terminal\" : null;\n if (!targetView) {\n scrolling = true;\n return;\n }\n bgEl = document.getElementById(targetView + \"-view\");\n } else {\n scrolling = true;\n return;\n }\n vc.classList.add(\"swipe-active\");\n if (isBack) {\n fgEl.style.zIndex = \"2\";\n fgEl.classList.add(\"swiping\");\n bgEl.style.transform = \"translate3d(-30%, 0, 0)\";\n bgEl.classList.add(\"visible\");\n bgEl.style.zIndex = \"0\";\n } else {\n bgEl.style.transform = \"translate3d(100%, 0, 0)\";\n bgEl.classList.add(\"visible\");\n bgEl.style.zIndex = \"2\";\n fgEl.style.zIndex = \"1\";\n }\n }\n if (locked)\n e.preventDefault();\n cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(applySwipe);\n }, { passive: false });\n vc.addEventListener(\"touchend\", () => {\n cancelAnimationFrame(rafId);\n if (!fgEl || !locked) {\n vc.classList.remove(\"swipe-active\");\n return;\n }\n const elapsed = Date.now() - st;\n const velocity = Math.abs(dx) / Math.max(elapsed, 1) * 1000;\n const committed = Math.abs(dx) > 60 || velocity > 250 && Math.abs(dx) > 15;\n const shouldComplete = isBack ? committed && dx > 0 : committed && dx < 0;\n const fg = fgEl, bg = bgEl, card = swipeCard, back = isBack;\n if (card) {\n card.style.transform = \"\";\n }\n if (!shouldComplete) {\n bg.classList.remove(\"visible\");\n [fg, bg].forEach((el) => {\n el.style.zIndex = \"\";\n el.style.transform = \"\";\n el.classList.remove(\"swiping\");\n });\n } else {\n fg.classList.remove(\"visible\");\n [fg, bg].forEach((el) => {\n el.style.zIndex = \"\";\n el.style.transform = \"\";\n el.classList.remove(\"swiping\");\n });\n haptic(10);\n state.swipeNavigated = true;\n if (back) {\n const backView = BACK_TARGET[state.currentView];\n if (backView === \"sessions\") {\n const backBtn = document.getElementById(\"back-btn\");\n if (backBtn && backBtn.onclick)\n backBtn.onclick(new PointerEvent(\"click\"));\n } else {\n showView(backView, true);\n }\n } else if (card) {\n card.click();\n }\n }\n vc.classList.remove(\"swipe-active\");\n fgEl = null;\n bgEl = null;\n swipeCard = null;\n }, { passive: true });\n}\nvar sidebarRefreshTimer = null;\nvar sidebarAutoCollapseTimer = null;\nvar sidebarInitialRender = false;\nvar _sidebarRafId = null;\nvar _lastSidebarHtml = \"\";\nfunction renderSidebar() {\n if (!isDesktop())\n return;\n if (_sidebarRafId)\n return;\n _sidebarRafId = requestAnimationFrame(() => {\n _sidebarRafId = null;\n _renderSidebarNow();\n });\n}\nfunction _renderSidebarNow() {\n const el = document.getElementById(\"sidebar-session-list\");\n if (!el)\n return;\n const groups = state.lastSessionGroups;\n if (!groups.length && sidebarInitialRender)\n return;\n if (groups.length)\n sidebarInitialRender = true;\n const machines = getMachines();\n const multiMachine = machines.length > 0;\n let html = \"\";\n if (!multiMachine) {\n const g = groups[0];\n const sidebarBtns = '
+ New Session
';\n if (g && g.online && g.sessions.length) {\n html += sidebarBtns;\n html += g.sessions.map((s) => sidebarCardHtml(s, \"\")).join(\"\");\n } else {\n html += sidebarBtns;\n html += '
No active sessions
';\n }\n if (g && g.online && g.loops && g.loops.length) {\n html += g.loops.map((loop) => sidebarRalphCardHtml(loop, \"\")).join(\"\");\n }\n } else {\n for (const g of groups) {\n const mUrl = escAttr(g.machine.url);\n const mName = esc(g.machine.name);\n const statusDot = g.online ? \"green\" : g.pending ? \"gray\" : \"red\";\n html += `
`;\n html += `
${mName}
`;\n if (g.online && g.sessions.length) {\n html += g.sessions.map((s) => sidebarCardHtml(s, g.machine.url)).join(\"\");\n } else if (g.pending) {\n html += '
Connecting...
';\n } else if (!g.online) {\n html += '
Offline
';\n }\n if (g.online && g.loops && g.loops.length) {\n html += g.loops.map((loop) => sidebarRalphCardHtml(loop, g.machine.url)).join(\"\");\n }\n html += \"
\";\n }\n }\n if (html === _lastSidebarHtml)\n return;\n _lastSidebarHtml = html;\n el.innerHTML = html;\n}\nfunction sidebarCardHtml(s, machineUrl) {\n const lastLine = s.lastLine || \"\";\n const ui = triageUi(s.triage);\n const isActive = s.name === state.currentSession && machineUrl === state.currentMachine;\n const inGrid = isSessionInGrid(s.name, machineUrl);\n const activeClass = isActive ? \" sidebar-active\" : inGrid ? \" sidebar-grid\" : \"\";\n const onclick = machineUrl ? `openSession('${escAttr(s.name)}', '${escAttr(machineUrl)}')` : `openSession('${escAttr(s.name)}')`;\n const gridBtnOnclick = machineUrl ? `toggleGrid('${escAttr(s.name)}', '${escAttr(machineUrl)}', event)` : `toggleGrid('${escAttr(s.name)}', '', event)`;\n const gridBtn = ``;\n return `
\n
\n
\n
${esc(s.name)}
\n
${ui.label}
\n
${esc(lastLine)}
\n
\n ${gridBtn}\n \n
`;\n}\nfunction updatePinButton() {\n const btn = document.getElementById(\"sidebar-collapse-btn\");\n btn.classList.toggle(\"pinned\", state.sidebarPinned);\n btn.title = state.sidebarPinned ? \"Unpin sidebar\" : \"Pin sidebar\";\n}\nfunction initSidebar() {\n if (!isDesktop())\n return;\n const sidebar = document.getElementById(\"desktop-sidebar\");\n const hoverEdge = document.getElementById(\"sidebar-hover-edge\");\n if (!state.sidebarPinned) {\n sidebar.classList.add(\"collapsed\");\n state.sidebarCollapsed = true;\n }\n document.body.classList.toggle(\"sidebar-pinned\", state.sidebarPinned);\n updatePinButton();\n document.getElementById(\"sidebar-collapse-btn\").onclick = () => {\n state.sidebarPinned = !state.sidebarPinned;\n localStorage.setItem(\"wolfpack-sidebar-pinned\", state.sidebarPinned ? \"1\" : \"0\");\n state.sidebarTransitionIsHover = false;\n if (!state.sidebarResizeDone)\n hideGridCellsForTransition();\n document.body.classList.toggle(\"sidebar-pinned\", state.sidebarPinned);\n if (state.sidebarPinned) {\n sidebar.classList.remove(\"collapsed\");\n state.sidebarCollapsed = false;\n state.sidebarAutoExpanded = false;\n } else {\n sidebar.classList.add(\"collapsed\");\n state.sidebarCollapsed = true;\n }\n updatePinButton();\n };\n document.getElementById(\"sidebar-expand-btn\").onclick = () => {\n state.sessionsExpanded = !state.sessionsExpanded;\n document.body.classList.toggle(\"sessions-expanded\", state.sessionsExpanded);\n document.getElementById(\"sidebar-expand-btn\").classList.toggle(\"active\", state.sessionsExpanded);\n state.sidebarTransitionIsHover = false;\n if (!state.sidebarResizeDone)\n hideGridCellsForTransition();\n if (state.sessionsExpanded) {\n sidebar.classList.add(\"collapsed\");\n state.sidebarCollapsed = true;\n state.sidebarAutoExpanded = false;\n showView(\"sessions\");\n loadSessions();\n } else {\n if (state.sidebarPinned) {\n sidebar.classList.remove(\"collapsed\");\n state.sidebarCollapsed = false;\n }\n if (state.currentSession || hasPreservedGrid())\n returnToTerminalView();\n }\n };\n hoverEdge.addEventListener(\"mouseenter\", () => {\n if (state.sidebarCollapsed && !state.sidebarPinned && !state.sessionsExpanded) {\n state.sidebarTransitionIsHover = true;\n if (!state.sidebarResizeDone)\n hideGridCellsForTransition();\n sidebar.classList.remove(\"collapsed\");\n state.sidebarAutoExpanded = true;\n }\n });\n sidebar.addEventListener(\"mouseleave\", () => {\n if (state.sidebarAutoExpanded && !state.sidebarPinned) {\n sidebarAutoCollapseTimer = setTimeout(() => {\n if (state.sidebarAutoExpanded) {\n state.sidebarTransitionIsHover = true;\n if (!state.sidebarResizeDone)\n hideGridCellsForTransition();\n sidebar.classList.add(\"collapsed\");\n state.sidebarCollapsed = true;\n state.sidebarAutoExpanded = false;\n }\n }, 300);\n }\n });\n sidebar.addEventListener(\"mouseenter\", () => {\n if (sidebarAutoCollapseTimer) {\n clearTimeout(sidebarAutoCollapseTimer);\n sidebarAutoCollapseTimer = null;\n }\n });\n sidebar.addEventListener(\"transitionend\", (e) => {\n if (e.propertyName !== \"margin-left\")\n return;\n if (state.sidebarTransitionIsHover) {\n revealGridCellsWithoutResize();\n state.sidebarTransitionIsHover = false;\n } else if (!state.sidebarAutoExpanded) {\n if (isGridActive()) {\n scheduleGridStabilizedFit();\n } else if (state.terminalController) {\n state.terminalController.resizeWithTransition();\n }\n revealGridCellsWithoutResize();\n }\n state.sidebarResizeDone = true;\n });\n document.getElementById(\"sidebar-settings-btn\").onclick = () => showSettings();\n startSidebarRefresh();\n renderSidebar();\n}\nfunction startSidebarRefresh() {\n if (sidebarRefreshTimer)\n clearInterval(sidebarRefreshTimer);\n if (isDesktop()) {\n sidebarRefreshTimer = setInterval(() => {\n loadSessions().then(renderSidebar);\n }, 5000);\n }\n}\nfunction bindHtmlEventListeners() {\n const $ = (id) => document.getElementById(id);\n const on = (id, event, fn) => {\n const el = $(id);\n if (el)\n el.addEventListener(event, fn);\n };\n on(\"session-chip\", \"click\", () => toggleDrawer());\n on(\"gear-btn\", \"click\", () => showSettings());\n on(\"drawer-backdrop\", \"click\", () => closeDrawer());\n on(\"git-status-overlay\", \"click\", () => dismissGitStatus());\n on(\"expanded-settings-btn\", \"click\", () => showSettings());\n on(\"expanded-collapse-btn\", \"click\", () => $(\"sidebar-expand-btn\")?.click());\n const pickerCancel = document.querySelector(\"#projects-view .picker-cancel-btn\");\n if (pickerCancel)\n pickerCancel.addEventListener(\"click\", () => {\n showView(state.viewBeforePicker);\n loadSessions();\n });\n const createProjectBtn = document.querySelector(\"#projects-view .new-project-row button\");\n if (createProjectBtn)\n createProjectBtn.addEventListener(\"click\", () => selectNewProject());\n const agentBackBtn = document.querySelector(\"#agent-view .picker-cancel-btn\");\n if (agentBackBtn)\n agentBackBtn.addEventListener(\"click\", () => showView(\"projects\"));\n on(\"settings-back-btn\", \"click\", () => backFromSettings());\n const discoverBtn = document.querySelector(\".discover-btn\");\n if (discoverBtn)\n discoverBtn.addEventListener(\"click\", () => discoverMachines());\n on(\"setting-animations\", \"change\", function() {\n toggleSetting(\"animations\", this.checked);\n });\n on(\"setting-haptics\", \"change\", function() {\n toggleSetting(\"haptics\", this.checked);\n });\n on(\"setting-notifications\", \"change\", function() {\n toggleSetting(\"notifications\", this.checked);\n });\n on(\"setting-enterSends\", \"change\", function() {\n toggleSetting(\"enterSends\", this.checked);\n });\n on(\"setting-holdToSend\", \"change\", function() {\n toggleSetting(\"holdToSend\", this.checked);\n });\n on(\"setting-ralphEnabled\", \"change\", function() {\n toggleSetting(\"ralphEnabled\", this.checked);\n });\n on(\"setting-debugPanel\", \"change\", function() {\n toggleSetting(\"debugPanel\", this.checked);\n toggleDebugPanel();\n });\n on(\"setting-snapshotTtl\", \"input\", function() {\n toggleSetting(\"snapshotTtl\", +this.value);\n const val = $(\"snapshot-ttl-val\");\n if (val)\n val.textContent = formatSnapshotTtl(+this.value);\n });\n document.querySelectorAll(\".term-size-btn\").forEach((btn) => {\n btn.addEventListener(\"click\", () => {\n const size = btn.dataset.size;\n if (size)\n toggleSetting(\"termFontSize\", size);\n });\n });\n document.querySelectorAll(\".term-font-btn\").forEach((btn) => {\n btn.addEventListener(\"click\", () => {\n const font = btn.dataset.font;\n if (font)\n toggleSetting(\"termFont\", font);\n });\n });\n on(\"add-quick-cmd-btn\", \"click\", () => addQuickCmd());\n const debugResetBtn = document.querySelector(\".debug-reset-btn\");\n if (debugResetBtn)\n debugResetBtn.addEventListener(\"click\", () => {\n wpMetrics.reset();\n renderDebugPanel();\n });\n const gitBtn = document.querySelector(\".kb-key.kb-git\");\n if (gitBtn)\n gitBtn.addEventListener(\"click\", () => showGitStatus());\n const copyBtn = document.querySelector(\".kb-key.kb-copy\");\n if (copyBtn)\n copyBtn.addEventListener(\"click\", () => copySessionToClipboard());\n on(\"ralph-detail-back-btn\", \"click\", () => backFromRalph());\n on(\"ralph-log-toggle\", \"click\", () => toggleRawLog());\n on(\"ralph-start-back-btn\", \"click\", () => backFromRalph());\n const ralphSegmented = document.querySelector(\".ralph-segmented\");\n if (ralphSegmented)\n ralphSegmented.addEventListener(\"change\", () => onIsolationChange());\n const launchBtn = document.querySelector(\".ralph-launch-btn\");\n if (launchBtn)\n launchBtn.addEventListener(\"click\", () => startRalph());\n}\nbindHtmlEventListeners();\ninitGridDeps({\n showView,\n openSession,\n destroyTerminal,\n initTerminal,\n backToSessions,\n renderSidebar,\n createPtyTerminalController,\n createConflictOverlay,\n canUseWasmTerminal,\n saveGridCellSnapshot: (gs) => {\n if (!gs.controller?.term)\n return;\n const text = serializeXtermTail(gs.controller.term, 200);\n if (text)\n saveSnapshot(gs.machine || \"\", gs.session, text);\n },\n flushGridSnapshots,\n loadSnapshot\n});\ninitRalphDeps({\n api,\n errorMessage,\n showView,\n getMachines,\n backToSessions,\n loadSessions,\n renderSidebar,\n startSidebarRefresh,\n getSidebarRefreshTimer: () => sidebarRefreshTimer,\n setSidebarRefreshTimer: (v) => {\n sidebarRefreshTimer = v;\n }\n});\ninitSettings();\ncleanStaleSnapshots();\nrenderCmdPalette();\ninitSidebar();\nif (isDesktop() && state.sessionsExpanded) {\n document.body.classList.add(\"sessions-expanded\");\n const expandBtn = document.getElementById(\"sidebar-expand-btn\");\n if (expandBtn)\n expandBtn.classList.add(\"active\");\n const sb = document.getElementById(\"desktop-sidebar\");\n if (sb) {\n sb.classList.add(\"collapsed\");\n state.sidebarCollapsed = true;\n }\n}\nshowView(\"sessions\", true);\nloadSessions().then(renderSidebar);\nif (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.getRegistrations().then((regs) => {\n regs.forEach((r) => {\n if (r.active?.scriptURL === `${location.origin}/sw.js`)\n return;\n r.unregister();\n });\n });\n}\nObject.assign(window, {\n openRalphDetail,\n dismissRalph,\n cancelRalph,\n continueRalph,\n discardRalph,\n showRalphStart,\n openSession,\n killSession,\n selectProject,\n showProjectPicker,\n sendQuickCmd,\n editQuickCmd,\n deleteQuickCmd,\n moveQuickCmd,\n createSessionWithAgent,\n deleteCustomCmd,\n removeMachineUI,\n toggleAgentEnabled,\n removeAgent,\n addAgent,\n toggleGrid,\n addToGrid,\n removeFromGrid,\n suspendGridMode,\n showView,\n state\n});\n", mime: "application/javascript" }], ["ghostty-web.bundle.js", { content: "// AUTO-GENERATED by scripts/bundle-ghostty.ts — do not edit\n// ghostty-web 0.4.0 bundled for browser\n(function() {\n\"use strict\";\n\n// === ghostty-web UMD core ===\n(function(e,r){typeof exports==\"object\"&&typeof module<\"u\"?r(exports):typeof define==\"function\"&&define.amd?define([\"exports\"],r):(e=typeof globalThis<\"u\"?globalThis:e||self,r(e.GhosttyWeb={}))})(this,function(e){\"use strict\";var r=(Q=>(Q[Q.CURSOR_KEY_APPLICATION=0]=\"CURSOR_KEY_APPLICATION\",Q[Q.KEYPAD_KEY_APPLICATION=1]=\"KEYPAD_KEY_APPLICATION\",Q[Q.IGNORE_KEYPAD_WITH_NUMLOCK=2]=\"IGNORE_KEYPAD_WITH_NUMLOCK\",Q[Q.ALT_ESC_PREFIX=3]=\"ALT_ESC_PREFIX\",Q[Q.MODIFY_OTHER_KEYS_STATE_2=4]=\"MODIFY_OTHER_KEYS_STATE_2\",Q[Q.KITTY_KEYBOARD_FLAGS=5]=\"KITTY_KEYBOARD_FLAGS\",Q))(r||{}),p=(Q=>(Q[Q.RELEASE=0]=\"RELEASE\",Q[Q.PRESS=1]=\"PRESS\",Q[Q.REPEAT=2]=\"REPEAT\",Q))(p||{}),o=(Q=>(Q[Q.UNIDENTIFIED=0]=\"UNIDENTIFIED\",Q[Q.GRAVE=1]=\"GRAVE\",Q[Q.BACKSLASH=2]=\"BACKSLASH\",Q[Q.BRACKET_LEFT=3]=\"BRACKET_LEFT\",Q[Q.BRACKET_RIGHT=4]=\"BRACKET_RIGHT\",Q[Q.COMMA=5]=\"COMMA\",Q[Q.ZERO=6]=\"ZERO\",Q[Q.ONE=7]=\"ONE\",Q[Q.TWO=8]=\"TWO\",Q[Q.THREE=9]=\"THREE\",Q[Q.FOUR=10]=\"FOUR\",Q[Q.FIVE=11]=\"FIVE\",Q[Q.SIX=12]=\"SIX\",Q[Q.SEVEN=13]=\"SEVEN\",Q[Q.EIGHT=14]=\"EIGHT\",Q[Q.NINE=15]=\"NINE\",Q[Q.EQUAL=16]=\"EQUAL\",Q[Q.INTL_BACKSLASH=17]=\"INTL_BACKSLASH\",Q[Q.INTL_RO=18]=\"INTL_RO\",Q[Q.INTL_YEN=19]=\"INTL_YEN\",Q[Q.A=20]=\"A\",Q[Q.B=21]=\"B\",Q[Q.C=22]=\"C\",Q[Q.D=23]=\"D\",Q[Q.E=24]=\"E\",Q[Q.F=25]=\"F\",Q[Q.G=26]=\"G\",Q[Q.H=27]=\"H\",Q[Q.I=28]=\"I\",Q[Q.J=29]=\"J\",Q[Q.K=30]=\"K\",Q[Q.L=31]=\"L\",Q[Q.M=32]=\"M\",Q[Q.N=33]=\"N\",Q[Q.O=34]=\"O\",Q[Q.P=35]=\"P\",Q[Q.Q=36]=\"Q\",Q[Q.R=37]=\"R\",Q[Q.S=38]=\"S\",Q[Q.T=39]=\"T\",Q[Q.U=40]=\"U\",Q[Q.V=41]=\"V\",Q[Q.W=42]=\"W\",Q[Q.X=43]=\"X\",Q[Q.Y=44]=\"Y\",Q[Q.Z=45]=\"Z\",Q[Q.MINUS=46]=\"MINUS\",Q[Q.PERIOD=47]=\"PERIOD\",Q[Q.QUOTE=48]=\"QUOTE\",Q[Q.SEMICOLON=49]=\"SEMICOLON\",Q[Q.SLASH=50]=\"SLASH\",Q[Q.ALT_LEFT=51]=\"ALT_LEFT\",Q[Q.ALT_RIGHT=52]=\"ALT_RIGHT\",Q[Q.BACKSPACE=53]=\"BACKSPACE\",Q[Q.CAPS_LOCK=54]=\"CAPS_LOCK\",Q[Q.CONTEXT_MENU=55]=\"CONTEXT_MENU\",Q[Q.CONTROL_LEFT=56]=\"CONTROL_LEFT\",Q[Q.CONTROL_RIGHT=57]=\"CONTROL_RIGHT\",Q[Q.ENTER=58]=\"ENTER\",Q[Q.META_LEFT=59]=\"META_LEFT\",Q[Q.META_RIGHT=60]=\"META_RIGHT\",Q[Q.SHIFT_LEFT=61]=\"SHIFT_LEFT\",Q[Q.SHIFT_RIGHT=62]=\"SHIFT_RIGHT\",Q[Q.SPACE=63]=\"SPACE\",Q[Q.TAB=64]=\"TAB\",Q[Q.CONVERT=65]=\"CONVERT\",Q[Q.KANA_MODE=66]=\"KANA_MODE\",Q[Q.NON_CONVERT=67]=\"NON_CONVERT\",Q[Q.DELETE=68]=\"DELETE\",Q[Q.END=69]=\"END\",Q[Q.HELP=70]=\"HELP\",Q[Q.HOME=71]=\"HOME\",Q[Q.INSERT=72]=\"INSERT\",Q[Q.PAGE_DOWN=73]=\"PAGE_DOWN\",Q[Q.PAGE_UP=74]=\"PAGE_UP\",Q[Q.DOWN=75]=\"DOWN\",Q[Q.LEFT=76]=\"LEFT\",Q[Q.RIGHT=77]=\"RIGHT\",Q[Q.UP=78]=\"UP\",Q[Q.NUM_LOCK=79]=\"NUM_LOCK\",Q[Q.KP_0=80]=\"KP_0\",Q[Q.KP_1=81]=\"KP_1\",Q[Q.KP_2=82]=\"KP_2\",Q[Q.KP_3=83]=\"KP_3\",Q[Q.KP_4=84]=\"KP_4\",Q[Q.KP_5=85]=\"KP_5\",Q[Q.KP_6=86]=\"KP_6\",Q[Q.KP_7=87]=\"KP_7\",Q[Q.KP_8=88]=\"KP_8\",Q[Q.KP_9=89]=\"KP_9\",Q[Q.KP_PLUS=90]=\"KP_PLUS\",Q[Q.KP_BACKSPACE=91]=\"KP_BACKSPACE\",Q[Q.KP_CLEAR=92]=\"KP_CLEAR\",Q[Q.KP_CLEAR_ENTRY=93]=\"KP_CLEAR_ENTRY\",Q[Q.KP_COMMA=94]=\"KP_COMMA\",Q[Q.KP_PERIOD=95]=\"KP_PERIOD\",Q[Q.KP_DIVIDE=96]=\"KP_DIVIDE\",Q[Q.KP_ENTER=97]=\"KP_ENTER\",Q[Q.KP_EQUAL=98]=\"KP_EQUAL\",Q[Q.KP_MEMORY_ADD=99]=\"KP_MEMORY_ADD\",Q[Q.KP_MEMORY_CLEAR=100]=\"KP_MEMORY_CLEAR\",Q[Q.KP_MEMORY_RECALL=101]=\"KP_MEMORY_RECALL\",Q[Q.KP_MEMORY_STORE=102]=\"KP_MEMORY_STORE\",Q[Q.KP_MEMORY_SUBTRACT=103]=\"KP_MEMORY_SUBTRACT\",Q[Q.KP_MULTIPLY=104]=\"KP_MULTIPLY\",Q[Q.KP_PAREN_LEFT=105]=\"KP_PAREN_LEFT\",Q[Q.KP_PAREN_RIGHT=106]=\"KP_PAREN_RIGHT\",Q[Q.KP_MINUS=107]=\"KP_MINUS\",Q[Q.KP_SEPARATOR=108]=\"KP_SEPARATOR\",Q[Q.NUMPAD_UP=109]=\"NUMPAD_UP\",Q[Q.NUMPAD_DOWN=110]=\"NUMPAD_DOWN\",Q[Q.NUMPAD_RIGHT=111]=\"NUMPAD_RIGHT\",Q[Q.NUMPAD_LEFT=112]=\"NUMPAD_LEFT\",Q[Q.NUMPAD_BEGIN=113]=\"NUMPAD_BEGIN\",Q[Q.NUMPAD_HOME=114]=\"NUMPAD_HOME\",Q[Q.NUMPAD_END=115]=\"NUMPAD_END\",Q[Q.NUMPAD_INSERT=116]=\"NUMPAD_INSERT\",Q[Q.NUMPAD_DELETE=117]=\"NUMPAD_DELETE\",Q[Q.NUMPAD_PAGE_UP=118]=\"NUMPAD_PAGE_UP\",Q[Q.NUMPAD_PAGE_DOWN=119]=\"NUMPAD_PAGE_DOWN\",Q[Q.ESCAPE=120]=\"ESCAPE\",Q[Q.F1=121]=\"F1\",Q[Q.F2=122]=\"F2\",Q[Q.F3=123]=\"F3\",Q[Q.F4=124]=\"F4\",Q[Q.F5=125]=\"F5\",Q[Q.F6=126]=\"F6\",Q[Q.F7=127]=\"F7\",Q[Q.F8=128]=\"F8\",Q[Q.F9=129]=\"F9\",Q[Q.F10=130]=\"F10\",Q[Q.F11=131]=\"F11\",Q[Q.F12=132]=\"F12\",Q[Q.F13=133]=\"F13\",Q[Q.F14=134]=\"F14\",Q[Q.F15=135]=\"F15\",Q[Q.F16=136]=\"F16\",Q[Q.F17=137]=\"F17\",Q[Q.F18=138]=\"F18\",Q[Q.F19=139]=\"F19\",Q[Q.F20=140]=\"F20\",Q[Q.F21=141]=\"F21\",Q[Q.F22=142]=\"F22\",Q[Q.F23=143]=\"F23\",Q[Q.F24=144]=\"F24\",Q[Q.F25=145]=\"F25\",Q[Q.FN_LOCK=146]=\"FN_LOCK\",Q[Q.PRINT_SCREEN=147]=\"PRINT_SCREEN\",Q[Q.SCROLL_LOCK=148]=\"SCROLL_LOCK\",Q[Q.PAUSE=149]=\"PAUSE\",Q[Q.BROWSER_BACK=150]=\"BROWSER_BACK\",Q[Q.BROWSER_FAVORITES=151]=\"BROWSER_FAVORITES\",Q[Q.BROWSER_FORWARD=152]=\"BROWSER_FORWARD\",Q[Q.BROWSER_HOME=153]=\"BROWSER_HOME\",Q[Q.BROWSER_REFRESH=154]=\"BROWSER_REFRESH\",Q[Q.BROWSER_SEARCH=155]=\"BROWSER_SEARCH\",Q[Q.BROWSER_STOP=156]=\"BROWSER_STOP\",Q[Q.EJECT=157]=\"EJECT\",Q[Q.LAUNCH_APP_1=158]=\"LAUNCH_APP_1\",Q[Q.LAUNCH_APP_2=159]=\"LAUNCH_APP_2\",Q[Q.LAUNCH_MAIL=160]=\"LAUNCH_MAIL\",Q[Q.MEDIA_PLAY_PAUSE=161]=\"MEDIA_PLAY_PAUSE\",Q[Q.MEDIA_SELECT=162]=\"MEDIA_SELECT\",Q[Q.MEDIA_STOP=163]=\"MEDIA_STOP\",Q[Q.MEDIA_TRACK_NEXT=164]=\"MEDIA_TRACK_NEXT\",Q[Q.MEDIA_TRACK_PREVIOUS=165]=\"MEDIA_TRACK_PREVIOUS\",Q[Q.POWER=166]=\"POWER\",Q[Q.SLEEP=167]=\"SLEEP\",Q[Q.AUDIO_VOLUME_DOWN=168]=\"AUDIO_VOLUME_DOWN\",Q[Q.AUDIO_VOLUME_MUTE=169]=\"AUDIO_VOLUME_MUTE\",Q[Q.AUDIO_VOLUME_UP=170]=\"AUDIO_VOLUME_UP\",Q[Q.WAKE_UP=171]=\"WAKE_UP\",Q[Q.COPY=172]=\"COPY\",Q[Q.CUT=173]=\"CUT\",Q[Q.PASTE=174]=\"PASTE\",Q))(o||{}),q=(Q=>(Q[Q.NONE=0]=\"NONE\",Q[Q.SHIFT=1]=\"SHIFT\",Q[Q.CTRL=2]=\"CTRL\",Q[Q.ALT=4]=\"ALT\",Q[Q.SUPER=8]=\"SUPER\",Q[Q.CAPSLOCK=16]=\"CAPSLOCK\",Q[Q.NUMLOCK=32]=\"NUMLOCK\",Q))(q||{}),l=(Q=>(Q[Q.NONE=0]=\"NONE\",Q[Q.PARTIAL=1]=\"PARTIAL\",Q[Q.FULL=2]=\"FULL\",Q))(l||{});const T=80;var F=(Q=>(Q[Q.BOLD=1]=\"BOLD\",Q[Q.ITALIC=2]=\"ITALIC\",Q[Q.UNDERLINE=4]=\"UNDERLINE\",Q[Q.STRIKETHROUGH=8]=\"STRIKETHROUGH\",Q[Q.INVERSE=16]=\"INVERSE\",Q[Q.INVISIBLE=32]=\"INVISIBLE\",Q[Q.BLINK=64]=\"BLINK\",Q[Q.FAINT=128]=\"FAINT\",Q))(F||{});class Y{constructor(A){this.exports=A.exports,this.memory=this.exports.memory}createKeyEncoder(){return new d(this.exports)}createTerminal(A=80,B=24,g){return new f(this.exports,this.memory,A,B,g)}static async load(A){if(A)return Y.loadFromPath(A);const B=new URL(\"data:application/wasm;base64,AGFzbQEAAAABdRJgBH9/f38Bf2AFf39/f38AYAZ/f39/f38Bf2ACf38AYAJ/fwF/YAF/AGABfwF/YAN/f38AYAV/f39/fwF/YAN/f38Bf2AEf39/fwBgBn9/f39/fwBgAX8BfmAAAGAAAX9gAn9/AX5gA39+fgBgBX9+fn5+AAILAQNlbnYDbG9nAAMDxwTFBAQFAwYDBgMGAwYDBgcEAwYEBQcICQkEBwMJAwkECQkJBAMFBQMDBAcFAwYGBQQHBQAEBwUJBwYGBgYGBgYGBgUHAwMEBAQGCgUFBgkEAQoEBQUABwQEAwYFBAQGBgQJAAcBBwMDAwMHAwMHAQcDAwMDAwMHCgcDAwcFBQkGAwsLCwYDBwUDAwcDAwUHBQMDAwMGBwQKCgQKCgQEBAMDBQIHCgMHBwMHCgkHBwEKCwEDAwQKAwcEAwMHDAcJCQoECgoKAwgJAQcHCgAJCgoDBwMABwgEBQQEAwAHAwUGBwcFBQYHAwMKAQEDAwMDBAQGBgMEAwYGBQMFBQMDAwUDAwUFBAQJBwUEBgUHBAkEBAUDBAMFBgYJAAYECQcDBgUNBgcHBAQDAwQFAwcLBQUFAwQFAwAJAwcDBwQFBgQFBAQEBAQEBAQEBAQEBAQEBAQEBAQHBQQGBAYJBAUEBAQFBQUEBAQEBAUFBAQEBAQEBAQFBQQEBAUEBQQEBAQEBAQFBQQFBAQEBQQEBAQEBQQECQQFBAQEBAQEBAQEAwUEBAQEBAUFBAUEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQHBgQHBgYGBgYGBgQDBQkKCAYGCQYACAQGCQ4FBgMGAw4FDgUBBgkJCAoEAQYJBgQHBgkFBwQABAkHAwcDBwoKAQcKDwQEBAYHBwMDAwYDDAYDABADAwMMAwcEAAkCAgEMBwEADAUHBAQECQQJCQkEBAkJCQMIAAkJCQEGAgIAAgIBAQoJBQ4RBAUBcAEWFgUDAQATBgkBfwFBgIDAAAsHhhJNBm1lbW9yeQIAFWdob3N0dHlfa2V5X2V2ZW50X25ldwABFmdob3N0dHlfa2V5X2V2ZW50X2ZyZWUAAhxnaG9zdHR5X2tleV9ldmVudF9zZXRfYWN0aW9uAAMcZ2hvc3R0eV9rZXlfZXZlbnRfZ2V0X2FjdGlvbgAEGWdob3N0dHlfa2V5X2V2ZW50X3NldF9rZXkABRlnaG9zdHR5X2tleV9ldmVudF9nZXRfa2V5AAYaZ2hvc3R0eV9rZXlfZXZlbnRfc2V0X21vZHMABxpnaG9zdHR5X2tleV9ldmVudF9nZXRfbW9kcwAII2dob3N0dHlfa2V5X2V2ZW50X3NldF9jb25zdW1lZF9tb2RzAAkjZ2hvc3R0eV9rZXlfZXZlbnRfZ2V0X2NvbnN1bWVkX21vZHMACh9naG9zdHR5X2tleV9ldmVudF9zZXRfY29tcG9zaW5nAAsfZ2hvc3R0eV9rZXlfZXZlbnRfZ2V0X2NvbXBvc2luZwAMGmdob3N0dHlfa2V5X2V2ZW50X3NldF91dGY4AA0aZ2hvc3R0eV9rZXlfZXZlbnRfZ2V0X3V0ZjgADilnaG9zdHR5X2tleV9ldmVudF9zZXRfdW5zaGlmdGVkX2NvZGVwb2ludAAPKWdob3N0dHlfa2V5X2V2ZW50X2dldF91bnNoaWZ0ZWRfY29kZXBvaW50ABAXZ2hvc3R0eV9rZXlfZW5jb2Rlcl9uZXcAERhnaG9zdHR5X2tleV9lbmNvZGVyX2ZyZWUAEhpnaG9zdHR5X2tleV9lbmNvZGVyX3NldG9wdAATGmdob3N0dHlfa2V5X2VuY29kZXJfZW5jb2RlABQPZ2hvc3R0eV9vc2NfbmV3ACEQZ2hvc3R0eV9vc2NfZnJlZQAjEGdob3N0dHlfb3NjX25leHQAJRFnaG9zdHR5X29zY19yZXNldABAD2dob3N0dHlfb3NjX2VuZABEGGdob3N0dHlfb3NjX2NvbW1hbmRfdHlwZQBLGGdob3N0dHlfb3NjX2NvbW1hbmRfZGF0YQBMFWdob3N0dHlfcGFzdGVfaXNfc2FmZQBNFWdob3N0dHlfY29sb3JfcmdiX2dldABPD2dob3N0dHlfc2dyX25ldwBQEGdob3N0dHlfc2dyX2ZyZWUAURFnaG9zdHR5X3Nncl9yZXNldABSFmdob3N0dHlfc2dyX3NldF9wYXJhbXMAUxBnaG9zdHR5X3Nncl9uZXh0AFYYZ2hvc3R0eV9zZ3JfdW5rbm93bl9mdWxsAFobZ2hvc3R0eV9zZ3JfdW5rbm93bl9wYXJ0aWFsAFsZZ2hvc3R0eV9zZ3JfYXR0cmlidXRlX3RhZwBcG2dob3N0dHlfc2dyX2F0dHJpYnV0ZV92YWx1ZQBdFGdob3N0dHlfdGVybWluYWxfbmV3AF4gZ2hvc3R0eV90ZXJtaW5hbF9uZXdfd2l0aF9jb25maWcAXxVnaG9zdHR5X3Rlcm1pbmFsX2ZyZWUAjQEXZ2hvc3R0eV90ZXJtaW5hbF9yZXNpemUA2gEWZ2hvc3R0eV90ZXJtaW5hbF93cml0ZQC+AxtnaG9zdHR5X3JlbmRlcl9zdGF0ZV91cGRhdGUAvwMdZ2hvc3R0eV9yZW5kZXJfc3RhdGVfZ2V0X2NvbHMAwgMdZ2hvc3R0eV9yZW5kZXJfc3RhdGVfZ2V0X3Jvd3MAwwMhZ2hvc3R0eV9yZW5kZXJfc3RhdGVfZ2V0X2N1cnNvcl94AMQDIWdob3N0dHlfcmVuZGVyX3N0YXRlX2dldF9jdXJzb3JfeQDFAydnaG9zdHR5X3JlbmRlcl9zdGF0ZV9nZXRfY3Vyc29yX3Zpc2libGUAxgMhZ2hvc3R0eV9yZW5kZXJfc3RhdGVfZ2V0X2JnX2NvbG9yAMcDIWdob3N0dHlfcmVuZGVyX3N0YXRlX2dldF9mZ19jb2xvcgDIAyFnaG9zdHR5X3JlbmRlcl9zdGF0ZV9pc19yb3dfZGlydHkAyQMfZ2hvc3R0eV9yZW5kZXJfc3RhdGVfbWFya19jbGVhbgDLAyFnaG9zdHR5X3JlbmRlcl9zdGF0ZV9nZXRfdmlld3BvcnQAzAMhZ2hvc3R0eV9yZW5kZXJfc3RhdGVfZ2V0X2dyYXBoZW1lAM4DJGdob3N0dHlfdGVybWluYWxfaXNfYWx0ZXJuYXRlX3NjcmVlbgDPAyNnaG9zdHR5X3Rlcm1pbmFsX2hhc19tb3VzZV90cmFja2luZwDQAxlnaG9zdHR5X3Rlcm1pbmFsX2dldF9tb2RlANEDJmdob3N0dHlfdGVybWluYWxfZ2V0X3Njcm9sbGJhY2tfbGVuZ3RoANIDJGdob3N0dHlfdGVybWluYWxfZ2V0X3Njcm9sbGJhY2tfbGluZQDTAyhnaG9zdHR5X3Rlcm1pbmFsX2dldF9zY3JvbGxiYWNrX2dyYXBoZW1lANQDH2dob3N0dHlfdGVybWluYWxfaXNfcm93X3dyYXBwZWQA1QMdZ2hvc3R0eV90ZXJtaW5hbF9oYXNfcmVzcG9uc2UA1gMeZ2hvc3R0eV90ZXJtaW5hbF9yZWFkX3Jlc3Bv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IgVBv39KDQBBLiEBIARBP3FBBnQgAy0AAEEPcUEMdHIiA0H/D0sNAQsgAiABOwAJIAJBDGohAQwCCwJAIANBgPADcUGAsANHDQAgAkEAOgAKIAJBgN4AOwEIIAJBADoADiACQQA7AQwgAkEMaiEBDAILIAJBADoADiACQQA7AAkgAiADIAVBP3FyOwEMIAJBDGohAQwBCwJAIAMsAAEiAUFASA0AIAJBADoACiACQYDaADsBCCACQQA6AA4gAkEAOwEMIAJBDGohAQwBCwJAIAMsAAIiBEFASA0AIAJBADoACiACQYDaADsBCCACQQA6AA4gAkEAOwEMIAJBDGohAQwBCwJAIAMsAAMiBUFASA0AIAJBADoACiACQYDaADsBCCACQQA6AA4gAkEAOwEMIAJBDGohAQwBCwJAIAFBP3FBBnQgAy0AAEEHcUEMdHIiAUH/B0sNACACQQA6AAogAkGA3AA7AQggAkEAOgAOIAJBADsBDCACQQxqIQEMAQsCQCABQYCIAUkNACACQQA6AAogAkGA4AA7AQggAkEAOgAOIAJBADsBDCACQQxqIQEMAQsgAkEAOwAJIAIgASAEQT9xckEGdCAFQT9xciIBOwEMIAIgAUEQdjoADiACQQxqIQELIAFBAmotAAAhAyAAIAEvAQAiATsBACAAQQJqIANBH3EiAzoAACAAQQE6AAQgAiABOwEEIAIgAzoABgwBCyAAQgA3AgALIAJBEGokgICAgAAL3QECBX8BfiOAgICAAEEQayIDJICAgIAAQQAhBAJAA0ACQCACIARLDQBBACEFDAILIAEgBGohBgJAAkAgACgCDCIHIAIgBGsiBWogACgCCEsNAAJAIAVFDQAgACgCBCAHaiAGIAX8CgAACyAAIAAoAgwgBWo2AgwMAQsgACgCACgCACEHIAMgBTYCBCADIAY2AgAgA0EIaiAAIANBAUEBIAcRgYCAgACAgICAACADKQMIIghCIIinIgVB//8DcQ0CIAinIQULIAUgBGohBAwACwsgA0EQaiSAgICAACAFC9YJAQF+QgAhAgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABDrABQQABAgMEBQYHCAkKCwwNDg9BQUEQERITFBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uQUFBQUFBQUFBQUFBLzBBQUFBQUFBQUFBQUFBQUExMjM0NTY3ODk6O0FBQUE8PUE+QUFBQUE/QUFAQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBC0EAKQOIqsiAACECDEALQQApA5CqyIAAIQIMPwtBACkDmKrIgAAhAgw+C0EAKQOgqsiAACECDD0LQQApA6iqyIAAIQIMPAtBACkDsKrIgAAhAgw7C0EAKQO4qsiAACECDDoLQQApA8CqyIAAIQIMOQtBACkDyKrIgAAhAgw4C0EAKQPQqsiAACECDDcLQQApA9iqyIAAIQIMNgtBACkD4KrIgAAhAgw1C0EAKQPoqsiAACECDDQLQQApA/CqyIAAIQIMMwtBACkD+KrIgAAhAgwyC0EAKQOAq8iAACECDDELQQApA4iryIAAIQIMMAtBACkDkKvIgAAhAgwvC0EAKQOYq8iAACECDC4LQQApA6CryIAAIQIMLQtBACkDqKvIgAAhAgwsC0EAKQOwq8iAACECDCsLQQApA7iryIAAIQIMKgtBACkDwKvIgAAhAgwpC0EAKQPIq8iAACECDCgLQQApA9CryIAAIQIMJwtBACkD2KvIgAAhAgwmC0EAKQPgq8iAACECDCULQQApA+iryIAAIQIMJAtBACkD8KvIgAAhAgwjC0EAKQP4q8iAACECDCILQQApA4CsyIAAIQIMIQtBACkDiKzIgAAhAgwgC0EAKQOQrMiAACECDB8LQQApA5isyIAAIQIMHgtBACkDoKzIgAAhAgwdC0EAKQOorMiAACECDBwLQQApA7CsyIAAIQIMGwtBACkDuKzIgAAhAgwaC0EAKQPArMiAACECDBkLQQApA8isyIAAIQIMGAtBACkD0KzIgAAhAgwXC0EAKQPYrMiAACECDBYLQQApA+CsyIAAIQIMFQtBACkD6KzIgAAhAgwUC0EAKQPwrMiAACECDBMLQQApA/isyIAAIQIMEgtBACkDgK3IgAAhAgwRC0EAKQOIrciAACECDBALQQApA7CqyIAAIQIMDwtBACkDuKrIgAAhAgwOC0EAKQPAqsiAACECDA0LQQApA8iqyIAAIQIMDAtBACkD0KrIgAAhAgwLC0EAKQPYqsiAACECDAoLQQApA+CqyIAAIQIMCQtBACkD6KrIgAAhAgwIC0EAKQPwqsiAACECDAcLQQApA/iqyIAAIQIMBgtBACkDkK3IgAAhAgwFC0EAKQPgrMiAACECDAQLQQApA/isyIAAIQIMAwtBACkDgKvIgAAhAgwCC0EAKQOYrciAACECDAELQQApA9isyIAAIQILIAAgAjcCAAsYACAAIAJB////AHFBCkEAIAEQ5oOAgAALQwEBfwJAIABBzJTJgABBARCagICAACICQf//A3ENACAAQYy1yoAAIAEvAQAgAUECai0AAEEQdHIQnICAgAAhAgsgAgsWACAAIAJB/wNxQQpBACABEOaDgIAACxUAIAAgAkEDcUEKQQAgARDmg4CAAAs8AQF/I4CAgIAAQRBrIgMkgICAgAAgAyACOgAPIAAgA0EPakEBIAEQoYSAgAAhAiADQRBqJICAgIAAIAILyQECAX8BfiOAgICAAEHwEGsiAiSAgICAAAJAAkAgAA0AQaDpyYAAIQAMAQsgAkG41MeAADYC7BAgAiAANgLoECACQegQaiEACwJAAkAgACkCACIDp0HQEEECQQAgA0IgiKcoAgARgICAgACAgICAACIADQBBfyEADAELIAJBAToAECACIAM3AwggAkEYaiACQQhqEKKAgIAAAkBB0BBFDQAgACACQRhqQdAQ/AoAAAsgASAANgIAQQAhAAsgAkHwEGokgICAgAAgAAuZAQEBfyOAgICAAEHAAGsiAiSAgICAACACQQhqQQhqIAFBCGooAgA2AgAgAkEAOgAEIAIgASkCADcDCAJAQSxFDQAgAkEUakEAQSz8CwALIAJBADoAAwJAQThFDQAgACACQQhqQTj8CgAACyAAQQA2AkAgAEIANwI4IAAgAi0ABDoATCAAIAItAAM6AM0QIAJBwABqJICAgIAACz0BAn8CQCAARQ0AIAAoAgAhASAAKAIEIQIgABCkgICAACABIABB0BBBAkEAIAIoAgwRgYCAgACAgICAAAsL4gEBBH8jgICAgABBEGsiASSAgICAAAJAIAAtAExBP3FFDQACQAJAAkAgACgCDEF2ag4CAQACCyABIAApAgA3AwggAUEIaiAAKAIQIAAoAhgQwYCAgAAMAQsgAEEQaiAAEMKAgIAACyAAQQA6AM0QIABBADoATAJAQTRFDQAgAEEMakEAQTT8CwALIAAoAkAiAkUNACABIAApAgA3AwAgACgCACEDIAAoAgQhBCACIAEQw4CAgAAgAyACQQxBAkEAIAQoAgwRgYCAgACAgICAACAAQQA2AkALIAFBEGokgICAgAALDAAgACABEKaAgIAAC69MAgV/AX4jgICAgABB4BBrIgIkgICAgAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAjwiA0H/D0kNACAALQBMQT9xIgNBAUcNAQyiAQsgACADQQFqIgQ2AjwgAEHNAGoiBSADaiIGIAE6AAAgAC0ATEE/cQ45AgGiARsDBCwtLgUzNDU2Nzg5Bj1BQghGCUxNTlUPb3BxchBHSKIBCguiAVNUEXYHQAxdEV5fDWAOZ2hpAgsgAiADOgAKIAJCgBA3AsAQIAJBsL/HgAA2ArgQIAIgAkEgajYCvBAgAkG4EGogAkEKahCngICAACIDQf//A3FFDZ4BIAJBuBBqQaDpyYAAQT8QqICAgAAgAi8B0BANoAEgAkGgEGpBEGogAkG4EGpBEGopAgA3AwAgAkGgEGpBCGoiASACQbgQakEIaikCADcDACACIAIpArgQNwOgEAJAIAEgAkEKahCngICAAEH//wNxRQ0AIAJBoBBqEKmAgIAADKEBCyACQdQQaiACQaAQahCqgICAACACQaAQahCpgICA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ACADQf//A3FFDQBBoOnJgAAgASAEELaAgIAACyAAQQE6AEwMFAsgAkKAEDcCwBAgAkGwv8eAADYCuBAgAiACQSBqNgK8EAJAAkACQCACQbgQahC4gICAACIDQf//A3FFDQAgAkG4EGpBoOnJgABBwQAQqICAgAAgAi8B0BANAiACQaAQakEQaiACQbgQakEQaikCADcDACACQaAQakEIaiIBIAJBuBBqQQhqKQIANwMAIAIgAikCuBA3A6AQAkAgARC4gICAAEH//wNxRQ0AIAJBoBBqEKmAgIAADAMLIAJB1BBqIAJBoBBqEKqAgIAAIAJBoBBqEKmAgIAAIAIvAdwQDQIgAigC2BAhBCACKALUECEBDAELIAIoArwQIQEgAigCxBAhBAsgASAEEICAgIAAIANB//8DcUUNAEGg6cmAACABIAQQtoCAgAALIABBAToATAwTCyACQoAQNwLAECACQbC/x4AANgK4ECACIAJBIGo2ArwQAkACQAJAIAJBuBBqELmAgIAAIgNB//8DcUUNACACQbgQakGg6cmAAEHBABCogICAACACLwHQEA0CIAJBoBBqQRBqIAJBuBBqQRBqKQIANwMAIAJBoBBqQQhqIgEgAkG4EGpBCGopAgA3AwAgAiACKQK4EDcDoBACQCABELmAgIAAQf//A3FFDQAgAkGgEGoQqYCAgAAMAwsgAkHUEGogAkGgEGoQqoCAgAAgAkGgEGoQqYCAgAAgAi8B3BANAiACKALYECEEIAIoAtQQIQEMAQsgAigCvBAhASACKALEECEECyABIAQQgICAgAAgA0H//wNxRQ0AQaDpyYAAIAEgBBC2gICAAAsgAEEBOgBMDBILIAJCgBA3AsAQIAJBsL/HgAA2ArgQIAIgAkEgajYCvBACQAJAAkAgAkG4EGoQuoCAgAAiA0H//wNxRQ0AIAJBuBBqQaDpyYAAQcEAEKiAgIAAIAIvAdAQDQIgAkGgEGpBEGogAkG4EGpBEGopAgA3AwAgAkGgEGpBCGoiASACQbgQakEIaikCADcDACACIAIpArgQNwOgEAJAIAEQuoCAgABB//8DcUUNACACQaAQahCpgICAAAwDCyACQdQQaiACQaAQahCqgICAACACQaAQahCpgICAACACLwHcEA0CIAIoAtgQIQQgAigC1BAhAQwBCyACKAK8ECEBIAIoAsQQIQQLIAEgBBCAgICAACADQf//A3FFDQBBoOnJgAAgASAEELaAgIAACyAAQQE6AEwMEQsgAkKAEDcCwBAgAkGwv8eAADYCuBAgAiACQSBqNgK8EAJAAkACQCACQbgQahC7gICAACIDQf//A3FFDQAgAkG4EGpBoOnJgABBwQAQqICAgAAgAi8B0BANAiACQaAQakEQaiACQbgQakEQaikCADcDACACQaAQakEIaiIBIAJBuBBqQQhqKQIANwMAIAIgAikCuBA3A6AQAkAgARC7gICAAEH//wNxRQ0AIAJBoBBqEKmAgIAADAMLIAJB1BBqIAJBoBBqEKqAgIAAIAJBoBBqEKmAgIAAIAIvAdwQDQIgAigC2BAhBCACKALUECEBDAELIAIoArwQIQEgAigCxBAhBAsgASAEEICAgIAAIANB//8DcUUNAEGg6cmAACABIAQQtoCAgAALIABBAToATAwQCyACQoAQNwLAECACQbC/x4AANgK4ECACIAJBIGo2ArwQAkACQAJAIAJBuBBqELyAgIAAIgNB//8DcUUNACACQbgQakGg6cmAAEHBABCogICAACACLwHQEA0CIAJBoBBqQRBqIAJBuBBqQRBqKQIANwMAIAJBoBBqQQhqIgEgAkG4EGpBCGopAgA3AwAgAiACKQK4EDcDoBACQCABELyAgIAAQf//A3FFDQAgAkGgEGoQqYCAgAAMAwsgAkHUEGogAkGgEGoQqoCAgAAgAkGgEGoQqYCAgAAgAi8B3BANAiACKALYECEEIAIoAtQQIQEMAQsgAigCvBAhASACKALEECEECyABIAQQgICAgAAgA0H//wNxRQ0AQaDpyYAAIAEgBBC2gICAAAsgAEEBOgBMDA8LIABBHDoATAwOCyACQoAQNwLAECACQbC/x4AANgK4ECACIAJBIGo2ArwQAkACQAJAIAJBuBBqEL2AgIAAIgNB//8DcUUNACACQbgQakGg6cmAAEHBABCogICAACACLwHQEA0CIAJBoBBqQRBqIAJBuBBqQRBqKQIANwMAIAJBoBBqQQhqIgEgAkG4EGpBCGopAgA3AwAgAiACKQK4EDcDoBACQCABEL2AgIAAQf//A3FFDQAgAkGgEGoQqYCAgAAMAwsgAkHUEGogAkGgEGoQqoCAgAAgAkGgEGoQqYCAgAAgAi8B3BANAiACKALYECEEIAIoAtQQIQEMAQsgAigCvBAhASACKALEECEECyABIAQQgICAgAAgA0H//wNxRQ0AQaDpyYAAIAEgBBC2gICAAAsgAEEBOgBMDA0LIAJCgBA3AsAQIAJBsL/HgAA2ArgQIAIgAkEgajYCvBACQAJAAkAgAkG4EGoQvoCAgAAiA0H//wNxRQ0AIAJBuBBqQaDpyYAAQcEAEKiAgIAAIAIvAdAQDQIgAkGgEGpBEGogAkG4EGpBEGopAgA3AwAgAkGgEGpBCGoiASACQbgQakEIaikCADcDACACIAIpArgQNwOgEAJAIAEQvoCAgABB//8DcUUNACACQaAQahCpgICAAAwDCyACQdQQaiACQaAQahCqgICAACACQaAQahCpgICAACACLwHcEA0CIAIoAtgQIQQgAigC1BAhAQwBCyACKAK8ECEBIAIoAsQQIQQLIAEgBBCAgICAACADQf//A3FFDQBBoOnJgAAgASAEELaAgIAACyAAQQE6AEwMDAsgASAEEICAgIAAIANB//8DcUUNAEGg6cmAACABIAQQtoCAgAALIABBAToATAwKCyAAQQE6AEwMCQsgAkKAEDcCwBAgAkGwv8eAADYCuBAgAiACQSBqNgK8EAJAAkACQCACQbgQahC/gICAACIDQf//A3FFDQAgAkG4EGpBoOnJgABBwgAQqICAgAAgAi8B0BANAiACQaAQakEQaiACQbgQakEQaikCADcDACACQaAQakEIaiIBIAJBuBBqQQhqKQIANwMAIAIgAikCuBA3A6AQAkAgARC/gICAAEH//wNxRQ0AIAJBoBBqEKmAgIAADAMLIAJB1BBqIAJBoBBqEKqAgIAAIAJBoBBqEKmAgIAAIAIvAdwQDQIgAigC2BAhBCACKALUECEBDAELIAIoArwQIQEgAigCxBAhBAsgASAEEICAgIAAIANB//8DcUUNAEGg6cmAACABIAQQtoCAgAALIABBAToATAwICyAAQQE6AM0QIABBATYCDCAAQSo6AEwgACAENgI4IAAgAEEQajYCRAwHCyABIAQQgICAgAAgA0H//wNxRQ0AQaDpyYAAIAEgBBC2gICAAAsgAEEBOgBMDAULIAEgBBCAgICAACADQf//A3FFDQBBoOnJgAAgASAEELaAgIAACyAAQQE6AEwMAwsgAigCvBAhASACKALEECEECyAB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ABCagICAAAsTACAAQb6byoAAQcEAEJqAgIAACxMAIABB/JrKgABBwgAQmoCAgAALCgAgABCkgICAAAs6AQF/AkAgAkEMbCIDRQ0AIAAoAgAgAUGq1arVeiACGyADQQJBACAAKAIEKAIMEYGAgIAAgICAgAALC6kBAwF/AX4CfyOAgICAAEEQayICJICAgIAAIAIgASkCACIDNwMAIAIgACgCHEEfcSIBOgAPIANCIIinIQQgA6chBQJAA0AgAUEfcUUNASACIAFBf2pBH3EiAToADyAFIAAoAhggAUECdGooAgBBDCABQQJqdEECQQAgBCgCDBGBgICAAICAgIAADAALCyACIAAoAhggACgCHBD3g4CAACACQRBqJICAgIAACzQBAX8CQCAAKAIIIgJFDQAgASgCACAAKAIAIAJBAEEAIAEoAgQoAgwRgYCAgACAgICAAAsLPwEBfyOAgICAAEEQayICJICAgIAAIAJBAToADyACIAE6AA4gACACQQ5qEMWAgIAAIQEgAkEQaiSAgICAACABC84KAQR/I4CAgIAAQdAQayICJICAgIAAAkACQAJAAkAgAC0AzRANACACIAAoAjw2AgQgAiAAQc0AajYCACACQoAQNwKwECACQbC/x4AANgKoECACIAJBEGo2AqwQAkAgAkGoEGogAhDGgICAACIAQf//A3ENACACKAKsECEDIAIoArQQIQEMAgsgAkGoEGpBoOnJgABBJhCogICAACACLwHAEA0CIAJBkBBqQRBqIAJBqBBqQRBqKQIANwMAIAJBkBBqQQhqIgMgAkGoEGpBCGopAgA3AwAgAiACKQKoEDcDkBACQCADIAIQxoCAgABB//8DcUUNACACQZAQahCpgICAAAwDCyACQcQQaiACQZAQahCqgICAACACQZAQahCpgICAACACLwHMEA0CIAIoAsgQIQEgAigCxBAhAwwBCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAALQBMQT9xIgNBYWoOGgMRAhERCRERBBERCwEGBxEKBQoKEQoKEREKAAsgA0EGRg0HDBALIAIgACkCADcDCAJAIAAoAkAiBCACQQhqQQAQtYCAgABB//8DcQ0AIAQoAgQhBSAAKAJEIgMgBCgCADYCACAFQX9qIQQMDwsgAkKAEDcCsBAgAkGwv8eA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AAALQQEhAwsgAkGgAWokgICAgAAgAwvJEwEKfwJAIAEoAgQiAiABKAIMIgNLDQAgASADQQFqNgIMIABBrMDHgABBlMDHgAAgAxsiASkCADcCACAAQQhqIAFBCGopAgA3AgAgAEEQaiABQRBqKQIANwIADwsgASADQQFqIgQ2AgwgAiADayEFIAEoAgAiBiADQQF0aiIHLwEAIQgCQCABLwEIIAFBCmotAABBEHRyIglBASADdHEiCkH///8HcUUNAAJAIAhBWmoiC0EUSw0AQQEgC3RBgYjAAHENAQsgCEEERg0AIAlB////B3EhCUEBIQgDQCADIAhqIQogCEEBaiEIIAkgCnZBAXENAAsgAEEBOgAUIAAgBzYCDCAAIAI2AgggACAGNgIEIABBATYCACABIAMgCGo2AgwgACAIIAUgCCAFSRs2AhAPCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAIDjwAAQIDFwQFBgcIFhYWFhYWFhYWFhYJCgsMDRYODxAWFhYWFhYWFhgRFhYWFhYWFhYZEhYWFhMWFBYWGhUWCyAAQRBqQQApAqTAx4AANwIAIABBCGpBACkCnMDHgAA3AgAgAEEAKQKUwMeAADcCAA8LIABBEGpBACkC1MDHgAA3AgAgAEEIakEAKQLMwMeAADcCACAAQQApAsTAx4AANwIADwsgAEEQakEAKQLswMeAADcCACAAQQhqQQApAuTAx4AANwIAIABBACkC3MDHgAA3AgAPCyAAQRBqQQApAoTBx4AANwIAIABBCGpBACkC/MDHgAA3AgAgAEEAKQL0wMeAADcCAA8LIABBEGpBACkCnMHHgAA3AgAgAEEIakEAKQKUwceAADcCACAAQQApAozBx4AANwIADwsgAEEQakEAKQKcwceAADcCACAAQQhqQQApApTBx4AANwIAIABBACkCjMHHgAA3AgAPCyAAQRBqQQApArTBx4AANwIAIABBCGpBACkCrMHHgAA3AgAgAEEAKQKkwceAADcCAA8LIABBEGpBACkCzMHHgAA3AgAgAEEIakEAKQLEwceAADcCACAAQQApArzBx4AANwIADwsgAEEQakEAKQLkwceAADcCACAAQQhqQQApAtzBx4AANwIAIABBACkC1MHHgAA3AgAPCyAAQQI6AAQgAEEHNgIAIABBAToAFA8LIABBEGpBACkC/MHHgAA3AgAgAEEIakEAKQL0wceAADcCACAAQQApAuzBx4AANwIADwsgAEEQakEAKQKUwseAADcCACAAQQhqQQApAozCx4AANwIAIABBACkChMLHgAA3AgAPCyAAQQA6AAQgAEEHNgIAIABBAToAFA8LIABBEGpBACkCrMLHgAA3AgAgAEEIakEAKQKkwseAADcCACAAQQApApzCx4AANwIADwsgAEEQakEAKQLEwseAADcCACAAQQhqQQApArzCx4AANwIAIABBACkCtMLHgAA3AgAPCyAAQRBqQQApAtzCx4AANwIAIABBCGpBACkC1MLHgAA3AgAgAEEAKQLMwseAADcCAA8LIABBEGpBACkC9MLHgAA3AgAgAEEIakEAKQLswseAADcCACAAQQApAuTCx4AANwIADwsgAEEQakEAKQKMw8eAADcCACAAQQhqQQApAoTDx4AANwIAIABBACkC/MLHgAA3AgAPCyAAQRBqQQApAqTDx4AANwIAIABBCGpBACkCnMPHgAA3AgAgAEEAKQKUw8eAADcCAA8LIABBEGpBACkCvMPHgAA3AgAgAEEIakEAKQK0w8eAADcCACAAQQApAqzDx4AANwIADwsgAEEQakEAKQLUw8eAADcCACAAQQhqQQApAszDx4AANwIAIABBACkCxMPHgAA3AgAPCyAAQRBqQQApAuzDx4AANwIAIABBCGpBACkC5MPHgAA3AgAgAEEAKQLcw8eAADcCAA8LIAhBYmpB//8DcUEISQ0HIAhB+P8DcUEoRg0GIAhBpn9qQf//A3FBCEkNBSAIQZx/akH//wNxQQhPDQkgAEEbNgIAIABBAToAFCAAIActAABBpH9qOgAEDwsgCkH///8HcUUNA0EBIQggCUH///8HcSAEdkEBcQ0HIABBAToAFCAAQQc2AgAgASADQQJqNgIMAkAgBy8BAiIBQQVLDQAgASEICyAAIAhBB3E6AAQPCyAFQQFNDQcCQAJAIAcvAQJBfmoOBAAJCQEJC0EFIQggBUEFSQ0IQQQhAgJAAkAgCkH///8HcQ0AQQYhCkEIIQkMAQtBBiEKQQghCQJAIAEQ2ICAgABBfWoOAgEACQtBCiEJQQghCkEGIQhBBiECCyABIAMg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gIAAIAIoAgAhBCACLwEKIQUgAi8BCCEGIANBADYCoAQgA0IANwOYBCADIAEpAgA3A5AEQQQhBwJAAkACQAJAAkADQCAHRQ0BIANBqARqIANBkARqEOeAgIAAIAMvAawEIggNAiADKAKoBCIIIAMoAqAENgIAIAMgCDYCoAQgB0F/aiEHDAALCyADQeADakEIaiADQZAEakEIaikDADcDACADQeADakEQaiADQZAEakEQaigCADYCACADIAMpA5AENwPgAyADQgA3A5gEIANBADYCoAQgA0EAKQOg6cmAADcDkARBBCEHAkADQCAHRQ0BIANBqARqIANBkARqEOqAgIAAAkAgAy8BrAQiCA0AIAMoAqgEIgggAygCoAQ2AgAgAyAINgKgBCAHQX9qIQcMAQsLIANBkARqEPuAgIAAIANB4ANqEPuAgIAADAILQQghByADQfgDakEIaiADQZAEakEIaikDADcDACADQfgDakEQaiADQZAEakEQaigCADYCACADIAMpA5AENwP4AyADQQA2AqAEIANCADcDmAQgAyABKQIANwOQBAJAA0AgB0UNASADQagEaiADQZAEahD4gICAAAJAIAMvAawEIggNACADKAKoBCIIIAMoAqAENgIAIAMgCDYCoAQgB0F/aiEHDAELCyADQZAEahD7gICAACADQfgDahD7gICAACADQeADahD7gICAAAwCCyADQdgCakEIaiIIIANBkARqQQhqKQMANwMAIANB2AJqQRBqIgcgA0GQBGpBEGooAgA2AgAgA0GIA2pBCGoiCSADQeADakEIaikDADcDACADQYgDakEQaiIKIANB4ANqQRBqKAIANgIAIANB8AJqQQhqIgsgA0H4A2pBCGopAwA3AwAgA0HwAmpBEGoiDCADQfgDakEQaigCADYCACADIAMpA5AENwPYAiADIAMpA+ADNwOIAyADIAMpA/gDNwPwAiADIAEpAgA3A5ACIANBqAJqIAooAgA2AgAgA0GQAmpBEGogCSkDADcDACADIAMpA4gDNwOYAiADQbwCaiAMKAIANgIAIANBtAJqIAspAwA3AgAgAyADKQPwAjcCrAIgA0HQAmogBygCADYCACADQcgCaiAIKQMANwMAIAMgAykD2AI3A8ACIANCADcDoAMgA0GoA2ogA0GQAmogA0GgA2ogBiAFEOyAgIAAAkAgAy8BtAMiCEUNACADQZACahD6gICAAAwCCyADKAKwAyEKIAMoAqwDIQsgAygCqAMhCSADQbgDaiAGIAUQ9oCAgAACQCADLwG8AyIIRQ0AIANBkAJqEPqAgIAADAILIAMoArgDIQwgA0HAA2ogA0HAAmoQ94CAgAACQCADLwHEAyIIRQ0AIANBkAJqEPqAgIAADAILIAMoAsADIgdBADoACCAHQQA2AQQgByAJNgIAIANB0ANqQgA3AwAgA0IANwPIAyADQcgDaiADQZACaiAHEPyAgIAAIghB//8DcUUNAiADQcgDaiADQZACahCDgYCAACADQZACahD6gICAAAwBCyADQZAEahD7gICAAAsgACAIOwHwAgwBCyADQQE6ANwDIANBADoA2wMgAykDoAMhDQJAQcQARQ0AIANBEGogA0GQAmpBxAD8CgAACyADQZABakEIaiIIIANByANqQQhqKQMANwMAIAMgAykDyAM3A5ABIAMgBTYCaCADIAw2AmQgAyAENgJgIAMgCjYCXCADIAs2AlggAyAJNgJUIANCADcDCCADIA03AwAgAy0A3AMhBCADLQDbAyEKIANB9ABqIAgpAwA3AgAgAyADKQOQATcCbCADIAo6AI0BIAMgBDoAjAEgAyAFOwGKASADIAY7AYgBIANCADcDgAEgAyAHNgJ8IANBADoAqAEgA0EANgKkASADIAk2AqABIANBrAFqIAMgA0GgAWoQhIGAgAACQCADLwGwASIIRQ0AIAMQhYGAgAAgACAIOwHwAgwBCyADQQA6AIcCIANBADoAhgIgAyACKAIARToAuAEgAygCrAEiCCgCACIHKAIYIAcoAhAiB2ogCC8BBEEDdGoiAigCACEFIAgvAQYhBiABKQIAIQ0gA0EBOgCIAgJAQcgARQ0AIANBvQFqQQFqQQBByAD8CwALIABBADsB8AIgA0EAOgC2ASADQQA6ALcBAkBBkAFFDQAgACADQZAB/AoAAAsgACANNwOQAQJAQSRFIgENACAAQZgBakEAQST8CwALIABCADcDyAEgACAFIAdqIAZBA3RqNgLEASAAIAI2AsABIAAgCDYCvAEgACADLQCIAjoA0AEgACADLQCHAjoA0QEgACADLQCGAjoA0gECQEHJAEUNACAAQdMBaiADQb0BakHJAPwKAAALAkAgAQ0AIABBnAJqQQBBJPwLAAsgAEIANwHiAiAAQeoCakEAOgAAIABB2AJqQQApA5inyIAANwMAIABB0AJqQQApA5CnyIAANwMAIABByAJqQQApA4inyIAANwMAIABBACkDgKfIgAA3A8ACIAAgAy0AuAE6AOACIAAgAy0AtwE6AOECIAAgAy0AtgE6AOsCCyADQbAEaiSAgICAAAvOAQECfyOAgICAAEEQayIFJICAgIAAIAUgA0EfcToADwJAAkBBICACQQRqIgJBASADdCIDIAIgA0sbIgNBf2pnayICQf//A3FBfWoiBkENTw0AIAFCASACrIanakF8aiAGQQJ0QYi8yoAAaiIDKAIANgIAIAMgATYCAAwBCyABQgFBICADQYOABGpBEHZBf2pnayIDrUL//wODhqdBEHRqQXxqIANB//8DcUECdEHwvMqAAGoiAygCADYCACADIAE2AgALIAVBEGokgICAgAAL3AEBAX8jgICAgABB8ABrIgMkgICAgAACQEHMAEUNACADQQxqQbT2wYAAQcwA/AoAAAsgAyACNgIMIAMgASkCADcDWAJAAkACQCACQYEESQ0AIANB5ABqIANB2ABqIAJBgHxqEIiBgIAAIAMvAWwiAg0BIAMoAmQhAgJAIAMoAmgiAUUNACACQQAgAfwLAAsgAyABNgIUIAMgAjYCEAsgA0EMakEIEImBgIAAIABBADsBTEHMAEUNASAAIANBDGpBzAD8CgAADAELIAAgAjsBTAsgA0HwAGokgICAgAALoAEBA38jgICAgABBEGsiAiSAgICAACABKAIEIQMgASgCACEEIAIgAC0ADEEDcSIBOgAPIABBBGohAAJAA0AgAUEDcUUNASACIAFBf2ogAXFBA3E6AAwgACABaEEDcUECdGoiASgCABCLgYCAACAEIAEoAgBB8AJBA0EAIAMoAgwRgYCAgACAgICAACACLQAMIQEMAAsLIAJBEGokgICAgAALIwAgACgCACABQfgsQQNBACAAKAIEKAIMEYGAgIAAgICAgAALdwECfyOAgICAAEEQayICJICAgIAAAkACQAJAIAEoAhAiA0UNACABIAMoAgA2AhAMAQsgAkEIaiABEOeAgIAAAkAgAi8BDCIBRQ0AIAAgATsBBAwCCyACKAIIIQMLIAAgAzYCACAAQQA7AQQLIAJBEGokgICAgAALYgEBfyOAgICAAEEgayICJICAgIAAIAJB3KbIgAA2AhAgAiABNgIMIAJBFGogAkEMakG4AhDogICAAAJAIAIvARwiAQ0AIAAgAigCFDYCAAsgACABOwEEIAJBIGokgICAgAALxQECAX8BfiOAgICAAEEgayIDJICAgIAAQoCAgIAQIQQCQAJAQQANAAJAAkAgAg0AQvj///8PIQQMAQsgASkCACIEpyACQQNBACAEQiCIpygCABGAgICAAICAgIAAIgFFrUIghiABrYQhBCABRQ0BCyADIAI2AhQgAyAEPgIQIANBADsBGCADQRBqIQIMAQsgAyAEQiCIPQEMIANBBGohAgsgACACKQIANwIAIABBCGogAkEIaigCADYCACADQSBqJICAgIAAC3cBAn8jgICAgABBEGsiAiSAgICAAAJAAkACQCABKAIQIgNFDQAgASADKAIANgIQDAELIAJBCGogARDqgICAAAJAIAIvAQwiAUUNACAAIAE7AQQMAgsgAigCCCEDCyAAIAM2AgAgAEEAOwEECyACQRBqJICAgIAAC2MBAX8jgICAgABBIGsiAiSAgICAACACQdymyIAANgIQIAIgATYCDCACQRRqIAJBDGpBgIAkEOuAgIAAAkAgAi8BHCIBDQAgACACKAIUNgIACyAAIAE7AQQgAkEgaiSAgICAAAvFAQIBfwF+I4CAgIAAQSBrIgMkgICAgABCgICAgBAhBAJAAkBBAA0AAkACQCACDQBCgID8/w8hBAwBCyABKQIAIgSnIAJBEEEAIARCIIinKAIAEYCAgIAAgICAgAAiAUWtQiCGIAGthCEEIAFFDQELIAMgAjYCFCADIAQ+AhAgA0EAOwEYIANBEGohAgwBCyADIARCIIg9AQwgA0EEaiECCyAAIAIpAgA3AgAgAEEIaiACQQhqKAIANgIAIANBIGokgICAgAAL6g0BKn8jgICAgABBwARrIgUkgICAgAAgBUEBOgAGIAUgAzsBBCAFQQhqQbCSyYAAIAVBBGoQ7YCAgAACQAJAIAUvARwiA0UNACAAIAM7AQwMAQtBAEIBQSAgBSgCDCIGQRxuIgdBBHRBf2pna62GpyAGQRxJGyEIIAUvARoiCSAFLwEYIgpsQf//A3FBA3QiCyAJQQN0IgxqIg1BB3IhDiAKQQN0IQ8gBSgCECIQQQR2IREgAUEcaiESIAFBCGohEyAFQcACaiEUIAVBqAJqIRUgBUGkAWpB8ABqIRYgBUGAAmohFyAFQewBaiEYIAVB2AFqIRkgBUG8AWohGiAFKAIUIRsgBSgCCCEcQQAhHUEAIR5BACEfA0ACQAJAAkACQAJAIARB//8DcSIgRQ0AIAVBIGogExDmgICAAAJAIAUvASQiAUUNACAAIAE7AQwMBwsgBSgCICEhIAVBKGogEhDpgICAAAJAIAUvASwiAUUNACAAIAE7AQwMBwsgBSgCKCEiIAVBMGogHBDugICAACAFQTBqQRBqIgEoAgAhIyAFQcgAaiAQEO+AgIAAIAUoAkghJCAFQdgAaiAREPCAgIAAIAUoAlghJSAFQegAaiAbEPGAgIAAIAUoAmghJiAFQfgAaiAHEPKAgIAAIAVB+ABqQRBqIicoAgAhKCAFQZABaiAIEPOAgIAAIBogBSkDMDcCACAaQQhqIAVBMGpBCGopAwA3AgAgGkEQaiABKQMANwIAIBkgBSkDSDcCACAZQQhqIAVByABqQQhqKQMANwIAIAUgDTYCuAEgBSALNgK0ASAFIAw2ArABIAUgDDYCrAFBACEDIAVBADYCqAEgBSAOICNqQXhxIiM2AtQBIAUgJCAjakEDakF8cSIkNgLoASAFICggJiAlICRqQQdqQXhxIiVqQQNqQXxxIilqQQNqQXxxIiYgBSgCkAFqQf//A2pBgIB8cSIqNgKkASAYQQhqIAVB2ABqQQhqKQMANwIAIBggBSkDWDcCACAXQQhqIAVB6ABqQQhqKQMANwIAIBcgBSkDaDcCACAWQQhqIAVBkAFqQQhqKQMANwIAIBYgBSkDkAE3AgAgFUEQaiAnKQMANwIAIBVBCGogBUH4AGpBCGopAwA3AgAgFSAFKQN4NwIAIAUgJTYC/AEgBSAmNgKQAiAFICk2AqQCIAUgCTsB0gIgBSAKOwHQAiAFIBs2AswCIAUgEDYCyAIgBSAGNgLEAiAFIBw2AsACQQAhAQJAA0AgDCABRg0BICIgAWogDCADaq03AwAgAyAPaiEDIAFBCGohAQwACwsgBSANNgK0BCAFICI2ArAEIAVByANqIAVBsARqIBoQ9ICAgAAgBSgCiAIgJWohAwJAIAUoAoQCIitBA3QiAUUNACADICJqQf8BIAH8CwALIAUoAuABICNqIScgBSgCjAIhLAJAIAUoAtwBIi1BA3QiAUUNACAnICJqQf8BIAH8CwALICIgJGoiAUEANgIMIAEgBSgC+AEiKDYCCCABIAUpAvABQiCJNwIAIAUoAuQBIS4CQCAoRQ0AIAFBEGpBACAo/AsACyAiICZqIgFBADYCDCABIAUoAqACIig2AgggASAFKQKYAkIgiTcCAAJAIChFDQAgAUEQakEAICj8CwALIAUgKTYCvAQgBSAiNgK4BCAFQdgCaiAFQbgEaiAVQfzEx4AAEPWAgIAAICEgJEEQajYCOCAhIC4gI2o2AjQgISAtNgIwICEgJzYCLCAhICwgJWo2AiggISArNgIkICEgAzYCICAhIAw2AhwgIUEANgIYICEgKjYCFCAhICI2AhAgBUEAOgDUAgJAQegARQ0AICFBPGogBUHIA2pB6AD8CgAACyAhICZBEGo2AqQBAkBB8ABFDQAgIUGoAWogBUHYAmpB8AD8CgAACyAhIAk7Aa4CICEgCjsBrAIgISAJOwGqAiAhIAo7AagCICFBoAJqIBRBCGopAgA3AgAgISAUKQIANwKYAiAhIAUtANQCOgCwAiAhIAIpAwA3AwAgIUIANwIIICEgICAJICAgCUkbIgE7Aa4CAkAgHUUNACAhIB02AgggISEDIB0oAgwiIkUNBCAhICI2AgwgIiAhNgIIIB0hAwwECyAeRQ0BICEgHjYCDCAhIQMgHigCCCIiRQ0CICEgIjYCCCAiICE2AgwgHiEDDAILIAAgHzYCCCAAIB02AgQgACAeNgIAIABBADsBDAwFCyAhQQA2AgwgISEdICEhHgwCCyAeICE2AghBACEdIAMhHgwBCyAdICE2AgwgAyEdCyAEIAFrIQQgAiACKQMAQgF8NwMAIB9BgIAkaiEfDAALCyAFQcAEaiSAgICAAAuVBAEKfyOAgICAAEHwAGsiAySAgICAACABLwESIQQgAS8BECEFAkACQAJAIAItAAINACAFIQIMAQsgAi8BACECIAMgASgCABDugICAACADKAIQIQYgA0EYaiABKAIIIgcQ74CAgAAgAygCGCEIIANBKGogB0EEdhDwgICAACADKAIoIQcgA0E4aiABKAIMEPGAgIAAIAMoAjghCSADQcgAaiABKAIEIgpBHG4iCxDygICAACAJIAcgCCAGIAQgBWxB//8DcSAEakEDdGpBB2pB+P///wFxakEDakH8////AXFqQQdqQfj///8BcWpBA2pB/P///wFxIQxBACEFIAMoAlghBAJAIApBG00NAEIBQSAgC0EEdEF/amdrrYanIQULIANB4ABqIAUQ84CAgAACQCACQQZ0QcAAaiIKIAQgDGpBA2pB/P///wFxIAMoAmAiBWpB//8DakGAgPz/AXEgBWtB/P///wFxIARrQfz///8BcSAJa0H4////AXEgB2tB/P///wFxIAhrQfj///8BcSAGa0EDdEFgcSIETQ0AIABBEGpBACkCyMTHgAA3AgAgAEEIakEAKQLAxMeAADcCACAAQQApArjEx4AANwIADAILIAQgCm4hBAsgAEEAOwEUIAAgBDsBEiAAIAI7ARAgACABKQIANwIAIABBCGogAUEIaikCADcCAAsgA0HwAGokgICAgAALmAEBBH8CQAJAIAENAEEAIQJBACEBQQAhA0EAIQRBACEFDAELQgFBICABQX9qZyIDa61C//8Dg4anIgG4RAAAAAAAAOo/ovwDIgJBJGwgAUEBdEEDakH8////B3EiBGohBUF/QQAgA2t0QX9zIQMLIAAgAzsBFCAAIAE2AgQgACACNgIAIAAgBTYCECAAIAQ2AgwgAEEANgIIC0UBAX8gAEEANgIIIAAgAUEPaiIBQQR2QT9qIgJBBnY2AgQgACACQQN2Qfj//x9xIgI2AgwgACACIAFBBHRBgH5xajYCAAtKAQF/IAAgATYCDCAAIAFBE2oiAkH8////AXFBcGo2AgQgACACIAFBAnRqIgJB/P///wdxQXBqNgIIIAAgAiABQQN0akF8cTYCAAtFAQF/IABBADYCCCAAIAFBH2oiAUEFdkE/aiICQQZ2NgIEIAAgAkEDdkH4//8PcSICNgIMIAAgAiABQQV0QYB4cWo2AgALmAEBBH8CQAJAIAENAEEAIQJBACEBQQAhA0EAIQRBACEFDAELQgFBICABQX9qZyIDa61C//8Dg4anIgG4RAAAAAAAAOo/ovwDIgJBHGwgAUEBdEEDakH8////B3EiBGohBUF/QQAgA2t0QX9zIQMLIAAgAzsBFCAAIAE2AgQgACACNgIAIAAgBTYCECAAIAQ2AgwgAEEANgIIC0IBAX8gACABNgIMIAAgAUETakF8cSICQXBqNgIEIAAgAiABQQJ0aiICQXBqNgIIIAAgAUEBdCACakED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cRuEIQMMJAsgA0Jvg0IQQgAgAkEBcRuEIQMMIwsgA0Jfg0IgQgAgAkEBcRuEIQMMIgsgA0K/f4NCwABCACACQQFxG4QhAwwhCyADQv9+g0KAAUIAIAJBAXEbhCEDDCALIANC/32DQoACQgAgAkEBcRuEIQMMHwsgA0L/e4NCgARCACACQQFxG4QhAwweCyADQv93g0KACEIAIAJBAXEbhCEDDB0LIANC/2+DQoAQQgAgAkEBcRuEIQMMHAsgA0L/X4NCgCBCACACQQFxG4QhAwwbCyADQv+/f4NCgMAAQgAgAkEBcRuEIQMMGgsgA0L//36DQoCAAUIAIAJBAXEbhCEDDBkLIANC//99g0KAgAJCACACQQFxG4QhAwwYCyADQv//e4NCgIAEQgAgAkEBcRuEIQMMFwsgA0L//3eDQoCACEIAIAJBAXEbhCEDDBYLIANC//9vg0KAgBBCACACQQFxG4QhAwwVCyADQv//X4NCgIAgQgAgAkEBcRuEIQMMFAsgA0L//79/g0KAgMAAQgAgAkEBcRuEIQMMEwsgA0L///9+g0KAgIABQgAgAkEBcRuEIQMMEgsgA0L///99g0KAgIACQgAgAkEBcRuEIQMMEQsgA0L///97g0KAgIAEQgAgAkEBcRuEIQMMEAsgA0L///93g0KAgIAIQgAgAkEBcRuEIQMMDwsgA0L///9vg0KAgIAQQgAgAkEBcRuEIQMMDgsgA0L///9fg0KAgIAgQgAgAkEBcRuEIQMMDQsgA0L///+/f4NCgICAwABCACACQQFxG4QhAwwMCyADQv////9+g0KAgICAAUIAIAJBAXEbhCEDDAsLIANC/////32DQoCAgIACQgAgAkEBcRuEIQMMCgsgA0L/////e4NCgICAgARCACACQQFxG4QhAwwJCyADQv////93g0KAgICACEIAIAJBAXEbhCEDDAgLIANC/////2+DQoCAgIAQQgAgAkEBcRuEIQMMBwsgA0L/////X4NCgICAgCBCACACQQFxG4QhAwwGCyADQv////+/f4NCgICAgMAAQgAgAkEBcRuEIQMMBQsgA0L//////36DQoCAgICAAUIAIAJBAXEbhCEDDAQLIANC//////99g0KAgICAgAJCACACQQFxG4QhAwwDCyADQv//////e4NCgICAgIAEQgAgAkEBcRuEIQMMAgsgA0L//////3eDQoCAgICACEIAIAJBAXEbhCEDDAELIANC//////8Pg0KAgICAgHBCACACQQFxG4QhAwsgACADPgIAIABBBGogA0IgiDwAAA8LAAu9AQEDfyOAgICAAEEQayIBJICAgIAAAkAgAEUNACABIAApAqgbNwMIIAAoAqgbIQIgACgCrBshAyAAQdQbahCkgICAACAAQegsaiABQQhqEMOAgIAAIABBgBJqIAFBCGoQjoGAgAAgAEEwaiABQQhqEI+BgIAAIABBGGogAUEIahDkgICAACAAQYQBaiABQQhqEMOAgIAAIAIgAEH4LEEDQQAgAygCDBGBgICAAICAgIAACyABQRBqJICAgIAAC+4BAQV/I4CAgIAAQcAAayICJICAgIAAIAJBHGogAEHICGoiAxCQgYCAACACKAI8IQQgAigCOCEFIAIoAhwhBiACQRxqIAMQkIGAgAACQCAERQ0AIAIoAihBqtWq1XogAigCPBshBANAIAVFDQEgAiAGKQIANwMQIAIgASkCADcDCCACQQhqEPuAgIAAIAQgARCRgYCAACAEQQxqIQQgBkEIaiEGIAVBf2ohBQwACwsCQCAAKALQCCIFRQ0AIAEoAgAgAygCACAFQTtsQQNBACABKAIEKAIMEYGAgIAAgICAgAALIAJBwABqJICAgIAACzQBAX8CQCAAKAIIIgJFDQAgASgCACAAKAIEIAJBAEEAIAEoAgQoAgwRgYCAgACAgICAAAsLmAEBA38jgICAgABBMGsiAiSAgICAACACIAEoAgQ2AiggAiABKAIIIgM2AiwgASgCACEEQWQhAQJAA0AgAUUNASACQQxqIAFBhKrIgABqKAIAQQJ0aiAENgIAIAQgAUHoqciAAGooAgAgA2xqIQQgAUEEaiEBDAALCwJAQSRFDQAgACACQQxqQST8CgAACyACQTBqJICAgIAACzcBAX8CQCAAKAIIIgJFDQAgASgCACAAKAIAIAJBLGxBA0EAIAEoAgQoAgwRgYCAgACAgICAAAsLzQIBBn8jgICAgABBMGsiASSAgICAACAAQZgBaiECIAAoArwBKAIAIQMCQCAALwHMASIERQ0AIANBPGogAygCECAEEJOBgIAAC0EAIQQgAkHQh8KAABCUgYCAACEFIABBADsBzAECQCAFQQFxDQAgASADQTxqIAMo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NwMACyASQQhqIRIgDEEIaiEMIBNBCGohEyAFQQhqIQUgDUF/aiENDAALCyANQQN0IgVFDQAgCiAMIAX8CgAAC0EAIRUgAC8BnAIgAS8BnAIiAE0NACAKIABBf2pB//8DcUEDdGoiACkDACIOQoCAgICAgAODQoCAgICAgANSDQAgACAOQv///////3yDNwMACyAGQcABaiSAgICAACAVC6QCAwZ/AX4CfyOAgICAAEEQayIDJICAgIAAAkACQCABKAIAIgRBfGooAgBFDQAgBEFwaiEFIARBdGohBiAEQXhqKAIAIgdBf2oiCCACELqBgIAAIgmncSEBIAlCOYinIQoDQCAEIAFqLAAAIgtFDQEgB0UNAQJAIAtBf0oNACAKIAtB/wBxRw0AIAIgBigCACAEaiABQQJ0aiILKAIARw0AIAUoAgAgBGogAUEDdGohAUEBIQcMAwsgB0F/aiEHIAFBAWogCHEhAQwACwtBACEBIANBDmpBADoAACADQQA7AQxBACEHQQAhCwsgACAHOgAIIAAgATYCBCAAIAs2AgAgACADLwEMOwAJIABBC2ogA0EOai0AADoAACADQRBqJICAgIAAC7EBACAAKAIAIAFqIAIgACgCCCABamsiAUEHdkH4//8PcWoiAEJ/QQAgA0ECdEEPakEEdiIDQcAAIAFBBHZBP3EiAWsiAiADIAJJGyICa0E/ca2IIAGthiAAKQMAhDcDACAAQQhqIQEgAyACayEAAkADQCAAQcEASQ0BIAFCfzcDACABQQhqIQEgAEFAaiEADAALCwJAIABFDQAgASABKQMAQn9BACAAa0E/ca2IhDcDAAsLNwEBfyAAKAIAIgIgASACIAJBdGooAgBqa0ECdmpBAToAACAAKAIAQXxqIgAgACgCAEF/ajYCAAukAgMGfwF+An8jgICAgABBEGsiAySAgICAAAJAAkAgASgCACIEQXxqKAIARQ0AIARBcGohBSAEQXRqIQYgBEF4aigCACIHQX9qIgggAhC6gYCAACIJp3EhASAJQjmIpyEKA0AgBCABaiwAACILRQ0BIAdFDQECQCALQX9KDQAgCiALQf8AcUcNACACIAYoAgAgBGogAUECdGoiCygCAEcNAEEBIQcgBSgCACAEaiABQQF0aiEBDAMLIAdBf2ohByABQQFqIAhxIQEMAAsLQQAhASAD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BiACIAEvAYgBOwEEIAJBCGpBsJLJgAAgAkEEahDtgICAAAJAIAIvARwiBEUNACAAIAQ7AQQMAgsgAi8BGCEJIAIvARohCiACKAIMIQQgAigCFCELIAIoAhAhByACQSBqIAIoAggiDBDugICAACACKAIwIQ0gAkE4aiAHEO+AgIAAIAIoAjghDiACQcgAaiAHQQR2EPCAgIAAIAIoAkghDyACQdgAaiALEPGAgIAAIAIoAlghECACQegAaiAEQRxuIhEQ8oCAgAAgECAPIA4gDSAKIAlsQf//A3FBA3QiEiAKQQN0IghqIhNqQQdqQXhxIhRqQQNqQXxxIg5qQQdqQXhxIg9qQQNqQXxxIRAgAigCeCEVQQAhDQJAIARBHEkNAEIBQSAgEUEEdEF/amdrrYanIQ0LIAJBgAFqIA0Q84CAgAAgAkG0AWogAkEgakEIaikDADcCACACQbwBaiACQSBqQRBqKQMANwIAIAJB0AFqIAJBOGpBCGopAwA3AgAgAiATNgKoASACIBI2AqQBIAIgCDYCoAEgAiAINgKcASACQQA2ApgBIAIgFDYCxAEgAiAONgLYASACIAIpAyA3AqwBIAIgAikDODcCyAEgAiAVIBBqQQNqQXxxIhIgAigCgAFqQf//A2pBgIB8cSIVNgKUASACQeQBaiACQcgAakEIaikDADcCACACQfgBaiACQdgAakEIaikDADcCACACQYwCaiACQYABakEIaikDADcCACACQaACaiACQegAakEIaikDADcCACACQagCaiACQegAakEQaikDADcCACACIA82AuwBIAIgEjYCgAIgAiAQNgKUAiACIAIpA0g3AtwBIAIgAikDWDcC8AEgAiACKQOAATcChAIgAiACKQNoNwKYAiACIAo7AcICIAIgCTsBwAIgAiALNgK8AiACIAc2ArgCIAIgBDYCtAIgAiAMNgKwAgJAAkAgBigCCCIHRQ0AIAcgBigCDCIENgIMDAELIAEgBigCDCIENgJUCwJAAkAgBEUNACAEIAYoAgg2AggMAQsgBSAGKAIINgIACyAGKAIQIQsCQCAGKAIUIgRFDQAgC0EAIAT8CwALIAEgASgCaCAGLwGuAmtBAWo2AmgCQCABLQCNAUECRw0AIAEtAIQBRQ0AAkAgASgCgAEiBCAGLwGuAiIHTw0AIAFBAToAjQEMAQsgASAEIAdrNgKAAQsgAkGwAmohDCACQZgCaiERIAJBrAFqIRYgCUEDdCENQQAhB0EAIQQCQANAIAggBEYNASALIARqIAggB2qtNwMAIAcgDWohByAEQQhqIQQMAAsLIAIgEzYCqAQgAiALNgKkBCACQbgDaiACQaQEaiAWEPSAgIAAIAIoAvgBIA9qIQcCQCACKAL0ASIWQQN0IgRFDQAgByALakH/ASAE/AsACyACKALQASAUaiENIAIoAvwBIRcCQCACKALMASIYQQN0IgRFDQAgDSALakH/ASAE/AsACyALIA5qIgRBADYCDCAEIAIoAugBIhM2AgggBCACKQLgAUIgiTcCACACKALUASEZAkAgE0UNACAEQRBqQQAgE/wLAAsgCyASaiIEQQA2AgwgBCACKAKQAiITNgIIIAQgAikCiAJCIIk3AgACQCATRQ0AIARBEGpBACAT/AsACyACIBA2ArAEIAIgCzYCrAQgAkHIAmogAkGsBGogEUH8xMeAABD1gICAACAGIA5BEGo2AjggBiAZIBRqNgI0IAYgGDYCMCAGIA02AiwgBiAXIA9qNgIoIAYgFjYCJCAGIAc2AiAgBiAINgIcIAZBADYCGCAGIBU2AhQgBiALNgIQIAJBADoAxAICQEHoAEUNACAGQTxqIAJBuANqQegA/AoAAAsgBiASQRBqNgKkAQJAQfAARQ0AIAZBqAFqIAJByAJqQfAA/AoAAAsgBiAJOwGsAiAGIAo7AaoCIAYgCTsBqAIgBkEBOwGuAiAGIAM2AgggBiACLQDEAjoAsAIgBkGgAmogDEEIaikCADcCACAGIAwpAgA3ApgCAkACQCADKAIMIgRFDQAgBiAENgIMIAQgBjYCCAwBCyAGQQA2AgwgBSAGNgIACyADIAY2AgwgASAGKQMAQgF8NwMIIAYgASkDACIaNwMAIAEgGkIBfDcDAAJAIAEoAnRFDQAgASgCcCEEIAEoAmwhBwNAIARFDQECQCAHKAIAIggoAgAgBkcNACABKAJUIQMgCEEBOgAIIAhBADYBBCAIIAM2AgALIAdBBGohByAEQX9qIQQMAAsLIABBADsBBCAAIAY2AgAgASgCfEEAOgAIDAELIAJBAToAtgQgAiABLwGIATsBtAQgAkG4BGpBsJLJgAAgAkG0BGoQ7YCAgAACQCACLwHMBCIERQ0AIAAgBDsBBAwBCyACLwHKBCENIAIvAcgEIQkgAigCxAQhBiACKALABCEEIAIoArwEIQcgAigCuAQhAyACQdAEaiABQRhqEOaAgIAAAkACQCACLwHUBCIMDQAgAigC0AQhCyACQdgEaiADEO6AgIAAIAIoAugEIQogAkHwBGogBBDvgICAACACKALwBCEOIAJBgAVqIARBBHYQ8ICAgAAgAigCgAUhDyACQZAFaiAGEPGAgIAAIAIoApAFIRAgAkGgBWogB0EcbiIVEPKAgIAAIBAgDyAOIAogDSAJbEH//wNxQQN0IhIgDUEDdCIIaiITakEHakF4cSIUakEDakF8cSIOakEHakF4cSIPakEDakF8cSEKIAIoArAFIQxBACEQAkAgB0EbTQ0AQgFBICAVQQR0QX9qZ2uthqchEAsgAkG4BWogEBDzgICAACACQegFaiACQdgEakEIaikDADcCACACQfAFaiACQdgEakEQaikDADcCACACQYQGaiACQfAEakEIaikDADcCACACIBM2AtwFIAIgEjYC2AUgAiAINgLUBSACIAg2AtAFIAJBADYCzAUgAiAUNgL4BSACIA42AowGIAIgAikD2AQ3AuAFIAIgAikD8AQ3AvwFIAIgDCAKakEDakF8cSIQIAIoArgFakH//wNqQYCAfHEiEjYCyAUgAkGYBmogAkGABWpBCGopAwA3AgAgAkGsBmogAkGQBWpBCGopAwA3AgAgAkHABmogAkG4BWpBCGopAwA3AgAgAkHUBmogAkGgBWpBCGopAwA3AgAgAkHcBmogAkGgBWpBEGopAwA3AgAgAiAPNgKgBiACIBA2ArQGIAIgCjYCyAYgAiACKQOABTcCkAYgAiACKQOQBTcCpAYgAiACKQO4BTcCuAYgAiACKQOgBTcCzAYgAiANOwH2BiACIAk7AfQGIAIgBjYC8AYgAiAENgLsBiACIAc2AugGIAIgAzYC5AYgAiABKQIsNwP4BgJAAkACQCASQYGAJE8NACACQYAHaiABQSxqEOmAgIAAIAIvAYQHIgwNAkGAgCQhFSACQYAHaiEEDAELIAJBiAdqIAJB+AZqIBIQ64CAgAAgAi8BkAciDA0BIAJBiAdqIQQgAigCjAchFQsgAkHkBmohDCACQcwGaiERIAJB4AVqIRYgCUEDdCEDIAQoAgAhBkEAIQdBACEEA0Ag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KAIQNgIcIAMgAykCCDcCFCADQSBqIANBFGogAS8BigFBf2pB//8DcRDPgYCAACAAQQE6AAwgACADLwEkOwEEIAAgAygCICIBNgIAIABBACADKAIoIAMtADAbNgIIIAAgAS8BrAJBf2o7AQYMAgsgAEEBOgAMIABBADoACCAAIAEoAlgiATYCACAAIAEvAa4CQX9qOwEEIAAgAS8BrAJBf2o7AQYMAQsgA0E0aiABQQAQu4GAgAAgAyADKAI8NgJIIAMgAykCNDcCQCADQcwAaiADQcAAakEBEN+BgIAAAkAgAy0AXA0AIABBAToADCAAIAMoAlQ2AgggACADLwFQOwEEIAAgAygCTCIBNgIAIAAgAS8BrAJBf2o7AQYMAQsgAEIANwIAIABBCGpCADcCAAsgA0HgAGokgICAgAALcQECfyOAgICAAEEQayICJICAgIAAIAJBBGogAEEAELuBgIAAAkACQCABKAIAIgMgAigCBCIARw0AIAEvAQQgAi8BCE8hAQwBCwNAIAAoAgwiAEEARyEBIAAgA0YNASAADQALCyACQRBqJICAgIAAIAEL+QIBBn8jgICAgABBIGsiAiSAgICAAAJAAkACQAJAIAEtACxFDQAgAUEkaiEDIAEvASohBCABLwEoIQUgASgCJCEGIAJBADoABCABLwEwIQcgAS0AIEEBcUUNASABIAdBAWoiBTsBMCAFQf//A3EgBEH//wNxSQ0CIAJBCGogARC0gYCAACADQQhqIAJBCGpBCGooAgA2AgAgAyACKQIINwIAIAEtACxFDQIgASABLwEoOwEwDAILIABCADcCACAAQQhqQgA3AgAMAgsCQCAHQf//A3EiBEUNAAJAIAQgBUH//wNxRw0AIANCADcCACADQQhqQQA2AgAMAgsgASAHQX9qOwEwDAELIAJBFGogARC0gYCAACADQQhqIAJBFGpBCGooAgA2AgAgAyACKQIUNwIAIAEtACxFDQAgASABLwEqQX9qOwEwCyAAQQA7AQYgACAHOwEEIAAgBjYCACAAQQE6AAwgACACLQAEOgAICyACQSBqJICAgIAAC7sBAQR/AkAgACgCdEUNACAAKAJwIQIgACgCbCEDA0AgAkUNAQJAIAMoAgAiBCgCACABRw0AAkAgASgCCCIFDQAgASgCDCEFCyAEQQA2AQQgBCAFNgIACyADQQRqIQMgAkF/aiECDAALCyABKAIMIQICQAJAIAEoAggiA0UNACADIAI2AgwMAQsgACACNgJUCyABKAIIIQMCQAJAIAJFDQAgAiADNgIIDAELIAAgAzYCWAsgACABELCBgIAAC8QBAgN/AX4jgICAgABBMGsiAySAgICAAAJAAkAgAi8BBCIEIAEvAYgBSQ0AIABCADcCACAAQQhqQgA3AgAMAQsgAigCACEFIANBDGogASACLQAIELuBgIAAIANBGGogA0EMaiAFEM+BgIAAAkAgAy0AKA0AIAAgAykDGCIGPgIAIABBAToADCAAIAMoAiA2AgggACAEOwEGIABBBGogBkIgiD0BAAwBCyAAQgA3AgAgAEEIakIANwIACyADQTBqJICAgIAACzgCAX8BfiOAgICAAEEQayIBJICAgIAAIAEgADYCDCABQQxqEKKEgIAAIQIgAUEQaiSAgICAACACC6QCAQJ/I4CAgIAAQSBrIgMkgICAgAACQAJAAkACQAJAAkACQAJAIAJBA3EOBAYAAQEGCyABLQCNAQ4DAQIDAQsgAEEAOgAIIABBADYCBCAAIAEoAlQ2AgAMBQsgA0EIaiABQQAQu4GAgAAgA0EIaiEBDAILIANBADoAHCADQQA2AhggAyABKAJUNgIUIANBFGohAQwBCyABKAJ8IQELIAAgASkCADcCACAAQQhqIAFBCGooAgA2AgAMAQsgAUHYAGohAiABLwGKASEBA0ACQCABQf//A3EgAigCACICLwGuAiIESw0AIABBADoACCAAQQA7AQYgACACNgIAIAAgBCABazsBBAwCCyACQQhqIQIgASAEayEBDAALCyADQSBqJICAgIAAC8sOARh/I4CAgIAAQcAEayIDJICAgIAAIAAoAhQhBAJAAkACQCAALwEaIAAoAgQiBS8BmgJBf2pB//8DcUcNACAAKAIQIQYgA0EIaiABQRhqEOaAgIAAIAMvAQwiBQ0CIAIvARAhByACLwESIQUgAygCCCEIIANBEGogAigCABDugICAACADKAIgIQkgA0EoaiACKAIIIgoQ74CAgAAgAygCKCELIANBOGogCkEEdhDwgICAACADKAI4IQogA0HIAGogAigCDBDxgICAACADKAJIIQwgA0HYAGogAigCBCINQRxuIg4Q8oCAgAAgDCAKIAsgCSAHIAVsQf//A3FBA3QiByAFQQN0Ig9qIhBqQQdqQXhxIhFqQQNqQXxxIhJqQQdqQXhxIhNqQQNqQXxxIQsgAygCaCEJQQAhBSANQRtNDQFCAUEgIA5BBHRBf2pna62GpyEFDAELIAUgBS8BngJBAWo7AZ4CIAAgACgCCCICQQhqNgIIIAAoAgQoAgAhByACKAIIIQJBACEFIABBADoAHCAAQQA7ARggACAALwEaQQFqOwEaIAAgAiAHajYCDAwBCyADQfAAaiAFEPOAgIAAIANBoAFqIANBEGpBCGopAwA3AgAgA0GoAWogA0EQakEQaikDADcCACADQbwBaiADQShqQQhqKQMANwIAIAMgEDYClAEgAyAHNgKQASADIA82AowBIAMgDzYCiAEgA0EANgKEASADIBE2ArABIAMgEjYCxAEgAyADKQMQNwKYASADIAMpAyg3ArQBIAMgCSALakEDakF8cSIMIAMoAnBqQf//A2pBgIB8cSINNgKAASADQdABaiADQThqQQhqKQMANwIAIANB5AFqIANByABqQQhqKQMANwIAIANB+AFqIANB8ABqQQhqKQMANwIAIANBjAJqIANB2ABqQQhqKQMANwIAIANBlAJqIANB2ABqQRBqKQMANwIAIAMgEzYC2AEgAyAMNgLsASADIAs2AoACIAMgAykDODcCyAEgAyADKQNINwLcASADIAMpA3A3AvABIAMgAykDWDcChAIgA0GsAmogAkEQaigCADYCACADQaQCaiACQQhqKQIANwIAIAMgAikCADcCnAIgAyABKQIsNwOwAgJAAkACQCANQYGAJE8NACADQbgCaiABQSxqEOmAgIAAIAMvAbwCIgUNAkGAgCQhFCADQbgCaiECDAELIANBwAJqIANBsAJqIA0Q64CAgAAgAy8ByAIiBQ0BIANBwAJqIQIgAygCxAIhFAsgA0GcAmohDiADQYQCaiEVIANBmAFqIRYgAy8BrgIiF0EDdCEJIAMvAawCIhhBA3QhCiACKAIAIQdBACECIA8hBQJAA0AgCSACRg0BIAcgAmogBa03AwAgAkEIaiECIAUgCmohBQwACwsgAyAQNgKwBCADIAc2AqwEIANBwANqIANBrARqIBYQ9ICAgAAgAygC5AEgE2ohBQJAIAMoAuABIhBBA3QiAkUNACAFIAdqQf8BIAL8CwALIAMoArwBIBFq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ADsBKCAFQf//AzYCJCAFIAQpAgA3AwggBSACKQIANwMQIABBLmohByAAKAIEIAFqIQggACgCACABaiEJIAVBCGogAhCBhICAACEKIAAoAhBBf2qtIQsgBUEQaiECIAMhDAJAA0AgC1ANAQJAIAkgAC8BICAKp3EiDUH//wNxQQF0aiIOLwEAIgRFDQACQCAIIARBHGxqIgEvARgiDw0AIAVBCGogARDDgYCAACAHIAEvARZBAXRqIgYgBi8BAEF/ajsBACABQRhqQQAoAqySyYAANgIAIAFBEGpBACkCpJLJgAA3AgAgAUEIakEAKQKcksmAADcCACABQQApApSSyYAANwIAIAQgA0H//wNxIgEgBCABSRshAwwBCwJAAkAgAS8BFiIQIAZB//8DcSIRSQ0AIBAgEUcNASAPIAIvARhPDQELIA4gDDsBACACIA07ARQgByACLwEWQQF0aiIGIAYvAQBBAWo7AQAgACAALwEsIgYgAi8BFiICIAYgAksbOwEsIAcgAS8BFkEBdGoiAiACLwEAQX9qOwEAIAEvARYhBiAEIQwgASECCyACIAZBAWoiBjsBFiAKQgF8IQogC0J/fCELDAELCyAOIAw7AQAgAiANOwEUIAcgAi8BFkEBdGoiASABLwEAQQFqOwEAIAAgAC8BLCIBIAIvARYiAiABIAJLGzsBLAsgCSAFLwEkQQF0aiADOwEAIAggA0H//wNxQRxsaiICIAUpAxA3AgAgAkEIaiAFQRBqQQhqKQMANwIAIAJBEGogBUEQakEQaikDADcCACACQRhqIAVBEGpBGGooAgA2AgAgBUEwaiSAgICAACADC60BAQh/AkACQCABLQAIIgMgAi0ACHNBAXENACAAKAIEIgQgACgCACIAIAQbKAIAIQQgAigCECEFIAIoAgwhBiACKAIAIQcgASgCECEIIAEoAgwhCSABKAIAIQogACgCACEAAkAgA0EBcUUNACAKIAdHDQEMAgsgCiAEaiABKAIEIAcgAGogAigCBBCxgICAAEEBcQ0BC0EADwsgBCAJaiAIIAAgBmogBRCxgICAAAv8AgEEfyOAgICAAEEQayIFJICAgIAAIAUgBCkCADcDACABKAIEIAJqIQYCQANAIAEvAW4iB0ECSQ0BIAYgB0F/aiIHQf//A3FBHGxqLwEYDQEgASAHOwFuIAEgAiAH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HkEBdGoiASABLwEAQQFqOwEAIAAgAC8BJCIBIAIvAR4iAiABIAJLGzsBJAsgCCAELwEkQQF0aiADOwEAAkBBJEUNACAHIANB//8DcUEkbGogBEEIakEk/AoAAAsgBEEwaiSAgICAACADC5c0BAN/AX4XfwF+I4CAgIAAQfANayIDJICAgIAAIAAgATsBiAECQAJAAkAgAi0ABEUNAEEAIQQgA0EAOgAQIAMgAi8BADsBDCADIAIvAQIiBTYCCCADQRRqIAAgA0EIahC5gYCAACADLQAgRQ0AIANBJGogAEGExceAABC5gYCAAAJAIAMtADBFDQAgA0GYAWpBCGogA0EkakEIaigCADYCACADIAMpAiQ3A5gBQQIhBAsgA0HoAGpBCGogA0EUakEIaigCADYCACADQYABaiADQZgBakEIaigCADYCACADQQA6AJABIAMgAykCFDcDaCADQQE6AHQgAyADKQOYATcDeCADIAQ6AJQBIAMgBDoAhAEgA0EAOgCIASADQagBaiADQegAahC0gYCAAAJAAkAgAy0AsAFFDQACQEEkRQ0AIANB7AFqIANB6ABqQST8CgAACyADQQE6AJgCIAMgAykDqAEiBjcCkAIgAyAGQjCIp0F/ajsBnAIgA0HsAWohAgwBCwJAQSRFDQAgA0G4AWogA0HoAGpBJPwKAAALIANB4gFqQgA3AQAgA0IANwLcASADQbgBaiECCwJAQTRFDQAgA0E0aiACQTT8CgAAC0EAIQcCQANAIANBoAJqIANBNGoQt4GAgAAgAy0ArAJFDQEgAygCoAIiAigCGCACKAIQaiADLwGkAkEDdGopAwBCIYinQQFxIAdqIQcMAAsLIANBsAJqIAAgA0EUahCEgYCAACADLwG0AiICDQIgAC8BigEgBUF/c2pB//8DcSEIQQAhCSADKAKwAiEKDAELQQEhCQsgACgCVCECIANBuAJqIABB+IfCgABBjNTHgAAQzIGAgAAgA0EBOgDuAiADIAE7AewCIANB8AJqIAJBmAJqIANB7AJqEO2AgIAAAkACQCADLwGEAyICDQAgAy8BggMhCyADLwGAAyEMIAMoAvwCIQ0gAygC+AIhASADKAL0AiEFIAMoAvACIQ4gA0GIA2ogAEEYahDmgICAACADLwGMAyICDQAgAygCiAMhDyADQZADaiAOEO6AgIAAIAMoAqADIQIgA0GoA2ogARDvgICAACADKAKoAyEQIANBuANqIAFBBHYQ8ICAgAAgAygCuAMhESADQcgDaiANEPGAgIAAIAMoAsgDIRIgA0HYA2ogBUEcbiITEPKAgIAAIBIgESAQIAIgCyAMbEH//wNxQQN0IhQgC0EDdCIEaiIVakEHakF4cSIWakEDakF8cSIXakEHakF4cSIRakEDakF8cSEQIAMoAugDIRJBACECAkAgBUEbTQ0AQgFBICATQQR0QX9qZ2uthqchAgsgA0HwA2ogAhDzgICAACADQaAEaiADQZADakEIaikDADcCACADQagEaiADQZADakEQaikDADcCACADQbwEaiADQagDakEIaikDADcCACADIBU2ApQEIAMgFDYCkAQgAyAENgKMBCADIAQ2AogEIANBADYChAQgAyAWNgKwBCADIBc2AsQEIAMgAykDkAM3ApgEIAMgAykDqAM3ArQEIAMgEiAQakEDakF8cSISIAMoAvADakH//wNqQYCAfHEiFDYCgAQgA0HQBGogA0G4A2pBCGopAwA3AgAgA0HkBGogA0HIA2pBCGopAwA3AgAgA0H4BGogA0HwA2pBCGopAwA3AgAgA0GMBWogA0HYA2pBCGopAwA3AgAgA0GUBWogA0HYA2pBEGopAwA3AgAgAyARNgLYBCADIBI2AuwEIAMgEDYCgAUgAyADKQO4AzcCyAQgAyADKQPIAzcC3AQgAyADKQPwAzcC8AQgAyADKQPYAzcChAUgAyALOwGuBSADIAw7AawFIAMgDTYCqAUgAyABNgKkBSADIAU2AqAFIAMgDjYCnAUgAyAAKQIsNwOwBQJAAkACQAJAIBRBgYAkTw0AIANBuAVqIABBLGoQ6YCAgAAgAy8BvAUiAg0CQYCAJCETIANBuAVqIQIMAQsgA0HABWogA0GwBWogFBDrgICAACADLwHIBSICDQEgA0HABWohAiADKALEBSETCyAAQdQAaiEYIANBnAVqIQ4gA0GEBWohGSADQZgEaiEaIAxBA3QhDSACKAIAIQVBACEBQQAhAgNAIAQgAkYNAiAFIAJqIAQgAWqtNwMAIAEgDWohASACQQhqIQIMAAsLIA8gACgCKDYCACAAIA82AigMAQsgAyAVNgKsByADIAU2AqgHIANBwAZqIANBqAdqIBoQ9ICAgAAgAygC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CmogA0HICmogECACaxCngYCAAAJAAkAgAy0A1AoNAEEAIQ5BACEWDAELIAMoAswKIAJqIQ4gAygC0AohFgsCQCADKAK8ByIBKAIoIAEoAgAiAmoiBEF8aigCACAEQXhqKAIASQ0AIANB2ApqQQhqQgA3AwAgA0IANwPYCiADQgA3A/AKIANBAToA7AogAyADKAK4CkEBdDYC6AogA0G4B2ogACADQdgKahC9gYCAACICQf//A3ENCyADKAK8ByIBKAIAIQILIANB/ApqIAFBHGoiBCACIBYQqIGAgAACQAJAIAMvAYQLDQAgBCABKAIAIAMoAvwKIAMoAoALEKKBgIAADAELIBZBAnQhBCADKAK4CiINIQIDQCACIgFBAXQhAiABIA1rIARJDQALIBlCADcDACAZQQhqQgA3AwAgA0EBOgCUCyADIAE2ApALIANCADcDiAsgA0G4B2ogACADQYgLahC9gYCAACICQf//A3ENCyADKAK8ByEBCyADIAEoAiggASgCACIEajYCqAsgAygCxAchAiADKALAByELIANBrAtqIAFBHGoiGiAEIBYQqIGAgAACQCADLwG0C0UNAEEiIQIMCwsgAygCrAshDQJAIAMoArALIhZBAnQiFUUNACANIA4gFfwKAAALIAEoAgAhDiADIBY2ArwLIAMgDSAOazYCuAsCQCADQagLaiACIARrIANBuAtqEKmBgIAAQf//A3FFDQAgGiABKAIAIA0gFhCigYCAAEEhIQIMCwsgAiACKQMAQnyDQgGENwMAIAsgCykDAEKAgICAwACENwMAIBApAwAhBgsCQAJAIAZCgICAgICACINCAFINACADKAK8ByEBDAELIAMgBSgCpAEgBSgCECIEajYCwAsgA0HEC2ogA0HAC2ogECAEaxCqgYCAACADLwHECyEWIAUoAqwBIQsCQCADKAK8ByIBKAKUASABKAIAIgJqIg1BfGooAgAgDUF4aigCAEkNACADQcgLakEIakIANwMAIANCADcDyAsgA0IANwPgCyADQQE6ANwLIAMgAygCtApBAXQ2AtgLIANBuAdqIAAgA0HIC2oQvYGAgAAiAkH//wNxDQsgAygCvAciASgCACECCyADQewLaiABQRBqIg0gAkEAIAsgBGogFkEcbGoiCygCBCALLQAIQQFxGyALKAIQaiIEEMCBgIAAAkACQCADLwH0Cw0AIA0gASgCACADKALsCyADKALwCxDBgYCAAAwBCyADKAK8CiINIQIDQCACIgFBAXQhAiABIA1rIARJDQALIANB+AtqQRBqQgA3AwAgA0H4C2pBCGpCADcDACADQgA3A/gLIANBAToAlAwgAyABNgKQDCADQbgHaiAAIANB+AtqEL2BgIAAIgJB//8DcQ0LIAMoArwHIQELIAEoAgAhBCADQZgMaiALIBQgARCtgYCAACADLwGsDCICDQogA0EANgK0DCADIAE2ArAMIANBugxqIAFBmAFqIAQgA0GYDGogFiADQbAMahCugYCAACADQboMaiEBIAMtALwMIQICQAJAAkACQCADLwG+DA4CAwEAC0GszceAACECDAELIANBwAxqQQhqQgA3AwAgA0IANwPADCADQgA3A9gMIANBAToA1AwgAyADKAK0CkEBdDYC0AwgA0HADGohAgsgA0G4B2ogACACEL2BgIAAIgJB//8DcQ0LIAMoArwHIgEoAgAhBCADQeQMaiALIBQgARCtgYCAACADLwH4DCICDQsgA0EANgKADSADIAE2AvwMIANBhA1qIAFBmAFqIAQgA0HkDGogFiADQfwMahCugYCAACADLwGIDSICDQsgAyADLwGEDTsBig0gA0GKDWohASADLQCGDSECCwJAIAJB/wFxRQ0AIAEvAQAhFgsgAyADKAK8ByIBKAKUASABKAIAIgRqNgKMDSADKALAByELIANBkA1qIANBjA1qIAMoAsQHIgIgBGsQq4GAgAACQCADLwGcDUUNAEEgIQIMCwsgAygClA0hDQJAAkAgAy0AmA1FDQAgAUGYAWogASgCACANLwEAEKWBgIAAQoCAgICAgAghBiACIQQgDS8BACAWQf//A3FGDQELIA0gFjsBACACIAIpAwBCgICAgICACIQ3AwBCgICAgIACIQYgCyEECyAEIAQpAwAgBoQ3AwAgECkDACEGCwJAIAZCGoinIgRB//8DcSINRQ0AIANBoA1qQQhqIAUoAkAgBSgCEGogDUEkbGoiAkEIaikCADcDACADQaANakEQaiACQRBqKQIANwMAIANBoA1qQRhqIAJBGGooAgA2AgAgAyACKQIANwOgDSADQcINaiABQSxqIAEoAgAgA0GgDWogBBCvgYCAACADQcINaiEEIAMtAMQNIQICQAJAAkACQCADLwHGDQ4CAwEAC0GszceAACECDAELIBNCADcCACATQQhqQgA3AgAgE0EQakIANwIAIANBAToAzA0gAyADKAKwCkEBdDYCyA0gA0HIDWohAgsgA0G4B2ogACACEL2BgIAAIgJB//8DcQ0LIANB6A1qIAMoArwHIgFBLGogASgCACADQaANaiAQKQMAQhqIpxCvgYCAACADLwHsDSICDQsgAyADLwHoDTsB7g0gA0HuDWohBCADLQDqDSECCwJAAkAgAkH/AXFFDQAgBC8BACEEDAELIBApAwBCGoinIQQLIAMoAsAHIgsgCykDAEKAgICAgAGENwMAIAMoAsQHIgIgAikDAEL///+fgIB/gyAErUL//wODQhqGhDcDAAsgAy8B0AciBCABLwGcAkF/akH//wNxRg0AIAMgBEEBajsB0AcgAyACQQhqNgLEBwwBCyADQQE6ANQHDAALCyASLQAEQQJxDQELIAMgAygCyAdBAWo2AsgHCyAPIAUvAa4CQX9qQf//A3FHDQMgACAFELCBgIAADAMLIA0gEEEBakH//wNxIgQgDSAESxshDQsgAUEEaiEBIAJBAWohAgwACwsLIAkNAQsgACAKEM6BgIAACyADQfANaiSAgICAACACC5YDAgF/AX4jgICAgABB4AFrIgQkgICAgAAgBEEIaiABIAIQuYGAgAACQAJAAkACQCADLQAMRQ0AIARBGGogASADELmBgIAAIARBGGohAQwBCyAEQShqIAEgAi0ACBC1gYCAACAEQShqIQEgBC0ANEUNAQsgBEE4akEIaiAEQQhqQQhqKAIANgIAIARB0ABqIAFBCGooAgA2AgAgBCAEKQIINwM4IARBAToAYCAEQQI6AGQgBEEBOgBEIARBAjoAVCAEQQE6AFggBCABKQIANwNIIARB6ABqIARBOGoQtIGAgAACQAJAIAQtAHBFDQACQEEkRQ0AIARBrAFqIARBOGpBJPwKAAALIARBAToA2AEgBCAEKQNoIgU3AtABIAQgBUIgiD0B3AEgBEGsAWohAQwBCwJAQSRFDQAgBEH4AGogBEE4akEk/AoAAAsgBEGiAWpCADcBACAEQgA3ApwBIARB+ABqIQELQTRFDQEgACABQTT8CgAADAELIABCADcCJCAAQSpqQgA3AQALIARB4AFqJICAgIAAC/0CAQR/I4CAgIAAQdAAayIEJICAgIAAIARBCGogASACELuBgIAAIAMvAQYhBQJAAkACQCADKAIAIgYgBCgCCCIBRw0AAkAgAy8BBCIBIAQvAQwiB08NACAAQgA3AgAgAEEIakIANwIADAMLIAEgB2tB//8DcSEHDAELIAEvAa4CIAQvAQxrQf//A3EhBwNAAkACQCABKAIMIgFFDQAgASAGRw0BIAcgAy8BBGohBwwDCyAAQgA3AgAgAEEIakIANwIADAMLIAcgAS8BrgJqIQcMAAsLAkACQAJAAkACQCACQQNxDgQAAwECAAsgBEEAOgAUIARBFGohBiAEQRhqIQEMAwsgBEECOgAoIARBKGohBiAEQSxqIQEMAgsgBEEDOgA8IARBPGohBiAEQcAAaiEBDAELAAsgASAFOwEEIAEgBzYCACABQQE6AAwgAUEIaiIHIAYtAAA6AAAgACABKQIANwIAIABBCGogBykCADcCAAsgBEHQAGokgICAgAAL1gcBDH8jgICAgABBEGsiAiSAgICAACAAQewAaiEDAkACQAJAAkACQAJAAkAgACgCeCIERQ0AIARBBGohBUEBIAQtAAAiBnQhB0EAQQFBAiAGQRFJGyAGQQlJGw4DAQIDAQsgACgCdEUNBSAAKAJwIQQgACgCbCEFQQAhBgNAIAQgBkYNBiABIAUoAgBGDQUgBUEEaiEFIAZBAWohBgwACwsgAkEIaiADIAEgBCAFIAcQ/4CAgAAgAi0ADEUNBCACKAIIIghBAWohByAFIAhBAXRqLQAAIQYCQANAIAUgCEEBdGohCSAFIAdBfyAEKAIAdEF/c3EiCEEBdGoiCi0AACILQf8BRg0BIAotAAEiCkH/AXFFDQEgCSALOgAAIAkgCkF/ajoAASAHQQFqIQcMAAsLIAlB/wE6AAAgACgCcEF/aiIJIAZGDQMgACgCbEGq1arVeiAAKAJ0GyAJQQJ0aigCABCCgYCAACEHQX8gBCgCAHRBf3MhBANAIAkgBSAHIARxQQF0aiIILQAARg0DIAdBAWohBwwACwsgAkEIaiADIAEgBCAFIAcQgIGAgAAgAi0ADEUNAyACKAIIIghBAWohByAFIAhBAnRqLwEAIQYCQANAIAUgCEECdGohCSAFIAdBfyAEKAIAdEF/c3EiCEECdGoiCi8BACILQf//A0YNASAKLwECIgpB//8DcUUNASAJIAs7AQAgCSAKQX9qOwECIAdBAWohBwwACwsgCUH//wM7AQAgACgCcEF/aiIJIAZGDQIgACgCbEGq1arVeiAAKAJ0GyAJQQJ0aigCABCCgYCAACEHQX8gBCgCAHRBf3MhBAJAA0AgCSAFIAcgBHFBAnRqIggvAQBGDQEgB0EBaiEHDAALCyAIIAY7AQAMAgsgAkEIaiADIAEgBCAFIAcQgYGAgAAgAi0ADEUNAiACKAIIIglBAWohDCAFIAlBA3RqKAIAIQZBACEHAkADQCAFIAlBA3RqIQkgBSAMIAdqQX8gBCgCAHRBf3MiDXEiCkEDdGoiCCgCACILQX9GDQEgCCgCBCIIRQ0BIAkgCzYCACAJIAhBf2o2AgQgB0EBaiEHIAohCQwACwsgCUF/NgIAIAAoAnBBf2oiByAGRg0BQQAhBCAAKAJsQarVqtV6IAAoAnQbIAdBAnRqKAIAEIKBgIAAIQkCQANAIAUgCSAEaiANcUEDdGoiCCgCACAHRg0BIARBAWohBAwACwsgCCAGNgIADAELIAggBjoAAAsgAyAGENCBgIAAIAEgACgCUDYCACAAIAE2AlALIAJBEGokgICAgAAL/wEBBH8CQCACIAEoAgAiAy8BrgIiBCABLwEEIgVBf3NqQf//A3EiBksNACAAIAM2AgAgAEEAOgAQIABBADoACCAAIAEvAQY7AQYgACACIAVqIgJB//8DIAJB//8DSRs7AQQPCyACIAZrIQICQANAIAMoAgwiBUUNAQJAIAIgBS8BrgIiBEsNACAAIAU2AgAgAEEAOgAQIABBADoACCAAIAEvAQY7AQYgACACQX9qIgJB//8DIAJB//8DSRs7AQQPCyACIARrIQIgBSEDDAALCyAAIAM2AgAgAEEBOgAQIAAgAjYCDCAAQQA6AAggACAEQX9qOwEEIAAgAS8BBjsBBgs+AQF/IAAoAgBBqtWq1XogACgCCBsiAiABQQJ0aiACIAAoAgRBAnRqQXxqKAIANgIAIAAgACgCBEF/ajYCBAuYDQMBfwF+BX8jgICAgABBsBFrIgQkgICAgAAgACkCmAEhBSAAQgA3A5gBIARBIGogAEGwAWoiBigCADYCACAEQRhqIABBqAFqIgcpAgA3AwAgBEEQaiAAQaABaiIIKQIANwMAIAhCADcDACAHQgA3AwBBACEHIAZBADYCACAEIAU3AwggABCSgYCAABogACgCuAEhBgJAIAAvAc4BIghFDQAgACgCvAEoAgAiCUGoAWogCSgCECAIEKWBgIAAIABBADYCuAEgAEEAOwHOAQsgAEGYAWohCAJAAkACQCAALQCYAkUNAEEAIQcgBEEAOgAsIAQgAC8BkAI7ASggBCAALwGSAjYCJCAEQTBqIAAgBEEkahC5gYCAACAELQA8RQ0AIARBwABqIAAgBEEwahCEgYCAAAJAIAQvAUQiCUUNACAIIAQpAwg3AgAgCEEYaiAEQQhqQRhqKAIANgIAIAhBEGogBEEIakEQaikDADcCACAIQQhqIARBCGpBCGopAwA3AgAgABCSgYCAACIGQf//A3FFDQMgBCAGOwFIIARByABqIQYMAgsgBCgCQCEHCyAEQQE6AFAgBCACOwFOIARBAToATCAEIAE7AUogBEEBOgBWIAQgA0EBcSIJOgBYIAQgACgCyAE2AVIgAEIANwOAAQJAAkACQAJAIAlFDQAgACgCZCEKIARBiBFqIAEgAhD2gICAACAELwGMESIJDQMgBEHSAGohAyAAIAQoAogRNgJkAkACQAJAQQIgAUH//wNxIgIgAC8BiAEiCUkgAiAJRhsOAwABAgALIAAgASADEMuBgIAAIglB//8DcQ0EIAAgBEHKAGoQsoGAgAAiCUH//wNxDQQMAwsgBEHwAGpBCGogBEHKAGpBCGopAQA3AwAgBCAEKQFKNwNwIARBAToAciAEIAk7AXAgACAEQfAAahCygYCAACIJQf//A3ENAyAAIAEgAxDLgYCAACIJQf//A3FFDQIMAwsgACAEQcoAahCygYCAACIJQf//A3ENAgwBCyAAIARBygBqELKBgIAAIglB//8DcQ0CCwJAIAAtAOACRQ0AIABBkMXHgABBjNTHgAAQ0oGAgAALIAAQn4GAgAACQCAHRQ0AIARB3ABqIABBACAHEM2BgIAAAkAgBC0AaEUNACAAIAQoAlw7AZICIAAgBC8BYCIJOwGQAiAALQCVAkUNASAJQf//A3EgAUF/akH//wNxRg0BIABBADoAlQIgACAJQQFqOwGQAgwBCyAAQQA6AJUCIABBADYCkAILAkAgBkUNAAJAIAAgBigCDCAGKAIQQQAgBigCACAGLQAIQQFxIgkbQQAgBigCBCAJGxDTgYCAACIJQf//A3FFDQAgBCAJOwFsIARCgBA3ApARIARBsL/HgAA2AogRIAQgBEHwAGo2AowRAkACQCAEQYgRaiAEQewAahDUgYCAACIJQf//A3FFDQAgBEGIEWpBoOnJgABBOhCogICAACAELwGgEQ0CIARB8BBqQRBqIARBiBFqQRBqKQIANwMAIARB8BBqQQhqIgEgBEGIEWpBCGopAgA3AwAgBCAEKQKIETcD8BACQCABIARB7ABqENSBgIAAQf//A3FFDQAgBEHwEGoQqYCAgAAMAwsgBEGkEWogBEHwEGoQqoCAgAAgBEHwEGoQqYCAgAAgBC8BrBENAiAEKAKoESECIAQoAqQRIQEMAQsgBCgCjBEhASAEKAKUESECCyABIAIQgICAgAAgCUH//wNxRQ0AQaDpyYAAIAEgAhC2gICAAAsgBiAAQZABaiIJEJ2BgIAAIAkgBhCegYCAAAsCQCAHRQ0AIAAgBxDOgYCAAAsgCCAEKQMINwIAIAhBGGogBEEIakEYaigCADYCACAIQRBqIARBCGpBEGopAwA3AgAgCEEIaiAEQQhqQQhqKQMANwIAQQAhCSAAEJKBgIAAIgZB//8DcUUNAyAEIAY7AW5BACEJIARB7gBqIQYMAgsgACAKNgJkCwJAIAdFDQAgACAHEM6BgIAACyAIIAQpAwg3AgAgCEEYaiAEQQhqQRhqKAIANgIAIAhBEGogBEEIakEQaikDADcCACAIQQhqIARBCGpBCGopAwA3AgAgABCSgYCAACIGQf//A3FFDQEgBCAGOwFaIARB2gBqIQYLIAYQ1YGAgAAgCEEYakEANgIAIAhBEGpCADcDACAIQQhqQgA3AwAgCEIANwMAIABBADsBzAELIARBsBFqJICAgIAAIAkLiBgDFH8BfgN/I4CAgIAAQbAVayIDJICAgIAAIAMgACABIAIQs4GAgABBACEEAkADQCADQSRqIAMQtIGAgAAgAy0ALEUNASADKAIkIgUvAa4CIQYgAy8BKiEHAkACQAJAAkACQAJAIAMvASgNACAGQf//A3EgB0cNACAFKAIMDQIgBSgCCA0CQQAhBgJAIAUoAhRBeHEiAkUNACAFKAIQQQAgAvwLAAsgBSgCECEIIAUvAagCIQkgBS8BqgIhCiAFKAKcAiECIAUoAqQCIQsgBSgCoAIhDCADQTBqIAUoApgCIg0Q7oCAgAAgAygCQCEOIANByABqIAwQ74CAgAAgAygCSCEPIANB2ABqIAxBBHYQ8ICAgAAgAygCWCEQIANB6ABqIAsQ8YCAgAAgAygCaCERIANB+ABqIAJBHG4iEhDygICAACARIBAgDyAOIAogCWxB//8DcUEDdCITIApBA3QiFGoiFWpBB2pBeHEiDmpBA2pBfHEiD2pBB2pBeHEiEGpBA2pBfHEhESADKAKIASEWIAJBHE8NAQwFCyAHQQN0IQggBSgCGCAFKAIQaiIJIQIgBiAHayINQf//A3EiDCEGAkADQCAGRQ0BIAIpAwAhFyACIAIgCGoiFCkDADcDACAUIBc3AwAgAiACKQMAQoCAgICAwACENwMAIAJBCGohAiAGQX9qIQYMAAsLIAVBPGohCiAFQagBaiERIAVBLGohDiAJIAxBA3RqIRIgBS8BrgIgDGshFUEAIRMDQCATIBVGDQMgEiATQQN0aiIPKAIAIAUoAhBqIQsgBS8BrAIhEAJAIA8pAwAiF0KAgICAwACDUA0AIAshFCALIQIgECEGA0ACQAJAIAZFDQAgAikDAEIDg0IBUg0BIAMgBSgCOCAFKAIQIghqNgLEBCADQcgEaiADQcQEaiAUIAhrEKGBgIAAIAMoAsgEIQwgDiAIIAggAygCzAQiCSgCAGogCSgCBBCigYCAACADQcQEaiAMEKOBgIAAIAIgAikDAEJ8gzcDAAwBCwJAAkAgECAFLwGsAiICRg0AIAJBAWohBiAPKAIAIAUoAhBqIQICQANAIAZBf2oiBkUNASACKQMAIRcgAkEIaiECIBdCA4NCAVENAwwACwsgDyAPKQMAQv////+/f4MiFzcDAAwECyAPIA8pAwBC/////79/gyIXNwMADAMLIA8pAwAhFwwCCyAUQQhqIRQgAkEIaiECIAZBf2ohBgwACwsCQCAXQoCAgICAAoNQDQAgCyECIAshFCAQIQYDQAJAAkAgBkUNACACLQAFQSBxRQ0BIAMgBSgCpAEgBSgCECIIajYC1AQgA0HYBGogA0HUBGogFCAIaxCkgYCAACADLQDgBEUNASARIAggAygC3AQvAQAQpYGAgAAgA0HUBGogAygC2AQQpoGAgAAgAiACKQMAQv///////3eDNwMADAELAkACQCAQIAUvAawCIgJGDQAgAkEBaiEGIA8oAgAgBSgCEGohAgJAA0AgBkF/aiIGRQ0BIAItAAUhFCACQQhqIQIgFEEgcQ0DDAALCyAPIA8pAwBC//////99gyIXNwMADAQLIA8gDykDAEL//////32DIhc3AwAMAwsgDykDACEXDAILIAJBCGohAiAUQQhqIRQgBkF/aiEGDAALCwJAIBdCgICAgIABg1ANACALIQYgECECA0ACQAJAAkACQAJAIAJFDQAgBikDAEIaiKciFEH//wNxDQEMBAsgECAFLwGsAiICRw0BDAILIAogBSgCECAUEJOBgIAADAILIAJBAWohBiAPKAIAIAUoAhBqIQIDQCAGQX9qIgZFDQEgAigBAiEUIAJBCGohAiAUQYD4/x9xDQQMAAsLIA8gDykDAEL//////36DNwMADAILIAZBCGohBiACQX9qIQIMAAsLAkAgEEEDdCICRQ0AIAtBACAC/AsACyATQQFqIRMMAAsLQgFBICASQQR0QX9qZ2uthqchBgwDCyAAIAUQuIGAgAAMAQsCQCAAKAJ0RQ0AIAAoAnAhAiAAKAJsIQYDQCACRQ0BAkAgBigCACIUKAIAIAVHDQACQCAULwEEIgggB08NACAUQQA2AQQMAQsgFCAIIAdrOwEECyAGQQRqIQYgAkF/aiECDAALCyAFIA07Aa4CCyAEIAdqIQQMAQsLIAVBmAJqIRIgBCAHaiEEIANBkAFqIAYQ84CAgAAgA0HEAWogA0EwakEIaikDADcCACADQcwBaiADQTBqQRBqKQMANwIAIANB4AFqIANByABqQQhqKQMANwIAIAMgFTYCuAEgAyATNgK0ASADIBQ2ArABIAMgFDYCrAFBACEGIANBADYCqAEgAyAONgLUASADIA82AugBIAMgAykDMDcCvAEgAyADKQNINwLYASADIBYgEWpBA2pBfHEiEyADKAKQAWpB//8DakGAgHxxIgc2AqQBIANB9AFqIANB2ABqQQhqKQMANwIAIANBiAJqIANB6ABqQQhqKQMANwIAIANBnAJqIANBkAFqQQhqKQMANwIAIANBuAJqIANB+ABqQRBqKQMANwIAIANBsAJqIANB+ABqQQhqKQMANwIAIAMgEDYC/AEgAyATNgKQAiADIBE2AqQCIAMgAykDWDcC7AEgAyADKQNoNwKAAiADIAMpA5ABNwKUAiADIAMpA3g3AqgCIAMgCjsB0gIg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BSAQIQwgECEBA0ACQAJAIAVFDQAgAS0ABUEgcUUNASAEIAYoAqQBIAYoAhAiCmo2AoAEIARBhARqIARBgARqIAwgCmsQpIGAgAAgBC0AjARFDQEgCyAKIAQoAogELwEAEKWBgIAAIARBgARqIAQoAoQEEKaBgIAAIAEgASkDAEL///////93gzcDAAwBCwJAAkAgDyAGLwGsAiIBRg0AIAFBAWohBSAJKAIAIAYoAhBqIQECQANAIAVBf2oiBUUNASABLQAFIQwgAUEIaiEBIAxBIHENAwwACwsgCSAJKQMAQv//////fYMiCDcDAAwECyAJIAkpAwBC//////99gyIINwMADAMLIAkpAwAhCAwCCyAFQX9qIQUgDEEIaiEMIAFBCGohAQwACwsCQCAIQoCAgICAAYNQDQAgBkE8aiEKIA8hASAQIQUDQAJAAkACQAJAAkAgAUUNACAFKQMAQhqIpyIMQf//A3ENAQwECyAPIAYvAawCIgFHDQEMAgsgCiAGKAIQIAwQk4GAgAAMAgsgAUEBaiEFIAkoAgAgBigCEGohAQNAIAVBf2oiBUUNASABKAECIQYgAUEIaiEBIAZBgPj/H3ENBAwACwsgCSAJKQMAQv//////foM3AwAMAgsgAUF/aiEBIAVBCGohBQwACwsgD0EDdCIBRQ0AIBBBACAB/AsADAALCwJAAkAgAC0AAUECcUUNACAHIAIgA0EBENGBgIAAIgFB//8DcUUNAQwCCyAHIAIgA0EAENGBgIAAIgFB//8DcQ0BCwJAIAAtACRBAnFFDQAgACgCICIBRQ0AIAEgAiADQQAQ0YGAgAAiAUH//wNxDQELIAAgAjsB8hFBACEBIABBADsB+BEgAEEAOwH0ESAAIAM7AfARIAAgAkF/ajsB+hEgACADQX9qOwH2ESAAQe4RaiIFIAUtAABBAXI6AAALIARBkARqJICAgIAAIAELHQACQCAARQ0AIAAgAEGoG2ogASACENmBgIAAGgsLHwAgACgCCCgCGCABKAIAQQJ0akHAAmogASgCBDYCAAvyAQECfyAAKAIYIgFBAToAmAIgASAAKAIYLwHIATsBkAIgASAAKAIYLwHKATsBkgIgASAAKAIYIgIpApgBNwLUASABQewBaiACQbABaigCADYCACABQeQBaiACQagBaikCADcCACABQdwBaiACQaABaikCADcCACABIAAoAhgtANIBQQFxOgCUAiABIAAoAhgtANEBQQFxOgCVAiABIAAoAgBBCHZBAXE6AJYCIAEgACgCGCIAKQLAAjcC8AEgAUGIAmogAEHYAmopAgA3AgAgAUGAAmogAEHQAmopAgA3AgAgAUH4AWogAEHIAmopAgA3AgALrQUDB38EfgN/I4CAgIAAQeAAayIBJICAgIAAAkACQCAAKAIYIgItAJgCRQ0AIAIvAZACIQMgAi8BkgIhBCACLQCUAiEFIAItAJUCIQYgAi0AlgIhBwJAQTxFDQAgASACQdQBakE8/AoAAAtCgAJCACAHQQFxGyEIDAELQQAhBSABQRhqQQA2AgBCACEIIAFBEGpCADcDACABQQhqQgA3AwAgAUEkakEAKQOIp8iAADcCACABQSxqQQApA5CnyIAANwIAIAFBNGpBACkDmKfIgAA3AgAgAUIANwMAIAFBACkDgKfIgAA3AhxBACEGQQAhA0EAIQQLIAIpApgBIQkgAiABKQMANwKYASACQaABaiIHKQIAIQogByABQQhqKQMANwIAIAJBqAFqIgcpAgAhCyAHIAFBEGopAwA3AgAgAkGwAWoiAigCACEHIAIgAUEYaigCADYCACABQcAAakEYaiIMIAc2AgAgAUHAAGpBEGoiDSALNwMAIAFBwABqQQhqIg4gCjcDACABIAk3A0AgACgCGBCSgYCAACEHIAAoAhghAgJAAkAgB0H//wNxRQ0AIAIgASkDQDcCmAEgAkGwAWogDCgCADYCACACQagBaiANKQMANwIAIAJBoAFqIA4pAwA3AgAMAQsgAiABKQIcNwLAAiACQdgCaiABQTRqKQIANwIAIAJB0AJqIAFBLGopAgA3AgAgAkHIAmogAUEkaikCADcCACAAIAA1AgBC//3//w+DIAiEPgIAIAAoAhggBkEBcToA0QEgACgCGCAFQQFxOgDSASAAKAIYIANB//8DcSICIAAvAfIRQX9qQf//A3EiAyACIANJGyAEQf//A3EiAiAALwHwEUF/akH//wNxIgAgAiAASRsQ3oGAgAALIAFB4ABqJICAgIAAIAcLqwgDB38BfgF/I4CAgIAAQYABayIDJICAgIAAAkACQAJAAkAgAkH//wNxIgQgAC8BygEiBU8NACADQQxqIAAoArwBIgYgBSACa0H//wNx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IAYgB2sQoYGAgAAgASgC+BAhByALIAIoAhAiCCAIIAEoAvwQIgkoAgBqIAkoAgQQooGAgAAgAUHwAGogBxCjgYCAACAFIAUpAwBCfIM3AwAMAQsCQAJAIBEgAi8BrAIiBUYNACAFQQFqIQMgDSgCACACKAIQaiEFAkADQCADQX9qIgNFDQEgBSkDACEKIAVBCGohBSAKQgODQgFRDQMMAAsLIA0gDSkDAEL/////v3+DIgo3AwAMBAsgDSANKQMAQv////+/f4MiCjcDAAwDCyANKQMAIQoMAgsgA0F/aiEDIAZBCGohBiAFQQhqIQUMAAsLAkAgCkKAgICAgAKDUA0AIAJBqAFqIQggESEDIAwhBiAMIQUDQAJAAkAgA0UNACAFLQAFQSBxRQ0BIAEgAigCpAEgAigCECIHajYCdCABQZARaiABQfQAaiAGIAdrEKSBgIAAIAEtAJgRRQ0BIAggAigCECABKAKUES8BABClgYCAACABQfQAaiABKAKQERCmgYCAACAFIAUpAwBC////////d4M3AwAMAQsCQAJAIBEgAi8BrAIiBUYNACAFQQFqIQMgDSgCACACKAIQaiEFAkADQCADQX9qIgNFDQEgBS0ABSEGIAVBCGohBSAGQSBxDQMMAAsLIA0gDSkDAEL//////32DIgo3AwAMBAsgDSANKQMAQv//////fYMiCjcDAAwDCyANKQMAIQoMAgsgA0F/aiEDIAZBCGohBiAFQQhqIQUMAAsLAkAgCkKAgICAgAGDUA0AIAJBPGohByARIQUgDCEDA0ACQAJAAkACQAJAIAVFDQAgAykDAEIaiKciBkH//wNxDQEMBAsgESACLwGsAiIFRw0BDAILIAcgAigCECAGEJOBgIAADAILIAVBAWohBSANKAIAIAIoAhBqIQIDQCAFQX9qIgVFDQEgAigBAiEDIAJBCGohAiADQYD4/x9xDQQMAAsLIA0gDSkDAEL//////36DNwMADAILIAVBf2ohBSADQQhqIQMMAAsLIBFBA3QiAkUNACAMQQAgAvwLAAsgACgCGCAEQX9qOwHKASAAKAIYQQEQ6YGAgAAgACgCGBCSgYCAACIEQf//A3ENAQtBACECDAULIAEgBDsBJiABQoAQNwKYESABQbC/x4AANgKQESABIAFB+ABqNgKUEQJAAkACQCABQZARaiABQSZqEPKBgIAAIgRB//8DcUUNACABQZARakGg6cmAAEEtEKiAgIAAIAEvAagRDQIgAUH4EGpBEGogAUGQEWpBEGopAgA3AwAgAUH4EGpBCGoiAiABQZARakEIaikCADcDACABIAEpApARNwP4EAJAIAIgAUEmahDygYCAAEH//wNxRQ0AIAFB+BBqEKmAgIAADAMLIAFBKGogAUH4EGoQqoCAgAAgAUH4EGoQqYCAgAAgAS8BMA0CIAEoAiwhBSABKAIoIQIMAQsgASgClBEhAiABKAKcESEFCyACIAUQgICAgAAgBEH//wNxRQ0AQaDpyYAAIAIgBRC2gICAAAsgACgCGCIEQgA3ApgBQQAhAiAEQbABakEANgIAIARBqAFqQgA3AgAgBEGgAWpCADcCACAAKAIYEJKBgIAAGgwECyABQShqIAMQsYGAgAAgAS8BLCICDQMCQAJAIAEoAihFDQAgAxDvgYCAACICQf//A3FFDQEMBQsCQCADKAK8ASIAKAIAIAMoAlhHDQAgAUH4AGogAEEBEM+BgIAAQZzNx4AAIQQCQCABLQCIAQ0AIAFB+BBqQQhqIAFB+ABqQQhqKAIANgIAIAEgASkCeDcD+BAgAUH4EGohBAsgACAEKQIANwIAIABBCGogBEEIaigCADYCACADKAK8ASIEKAIAIgAoAhggACgCEGogBC8BBCICQQN0aiIEIAAvAa4CIAJBf3NqQQN0IgJqKQMAIQoCQCACRQ0AIARBCGogBCAC/AoAAAsgBCAKNwMAIABBAToAsAIgAygCvAEiACgCACIEKAIYIAQoAhAiBGogAC8BBEEDdGoiAigCACEFIAAvAQYhACADIAI2AsABIAMgBSAEaiAAQQN0ajYCxAEMAQsgAxDvgYCAACICQf//A3ENBAtBACECIAMvAcwBRQ0DIAFBkBFqIAgQ7IGAgAAgAS0AmBFFDQMgAy8BiAFBA3QhACADKALEASADLwHIAUEDdGshBCABKQOQESEKA0AgAEUNBCAEIAo3AwAgAEF4aiEAIARBCGohBAwACwsgAygCvAEoAgAhBCABQeAAaiADELGBgIAAIAEvAWQiAg0CAkACQCAEIAMoArwBIgAoAgAiB0YNACABQdAAakEGaiEEIAFB0ABqQQRqIQUgAUHQAGpBCGogAEEIaigCADYCACABIAApAgA3A1AgASADLwHIATsBViABQdAAaiECDAELIAFBkBFqIABBARDPgYCAAAJAIAEtAKARRQ0AQZzNx4AAIQJBos3HgAAhBEGgzceAACEFDAELIAFBKGpBBmohBCABQShqQQRqIQUgAUEoakEIaiABQZARakEIaigCADYCACABIAEpApARNwMoIAFBKGohAgsgBC8BACEGIAUvAQAhBQJAAkACQAJAAkAgByACKAIAIgRHDQAgAC8BBCAFRw0AIAAvAQZB//8DcSAGRg0BCyADKALAASIAIAApAwBCgICAgIDAAIQ3AwAgBCgCGCAEKAIQaiAFQQN0aiIAIAApAwBCgICAgIDAAIQ3AwAgAygCvAEiACgCACACKAIARg0AIAMvAcwBDQFBvKfIgAAhCUGgp8iAACEHDAILIAAgAikCADcCACAAQQhqIAJBCGooAgA2AgAMAgsgAUGUAWohCSAIKQIAIQogCEIANwMAIAFB+ABqQRhqIAhBGGoiACgCADYCACABQfgAakEQaiAIQRBqIgcpAgA3AwAgAUH4AGpBCGogCEEIaiILKQIANwMAIAtCADcDACAHQgA3AwAgAEEANgIAIAFBAToAlAEgASAKNwN4IAMQkoGAgAAaIAMoArwBIQAgAUH4AGohBwsCQCADKAK4AUUNACAAKAIAIgBBqAFqIAAoAhAgAy8BzgEQpYGAgAAgAygCvAEhAAsgACACKQIANwIAIABBCGogAkEIaigCADYCAAJAIAktAABFDQAgCCAHKQIANwIAIAhBGGoiACAHQRhqKAIANgIAIAhBEGoiAiAHQRBqKQIANwIAIAhBCGogB0EIaikCADcCACADEJKBgIAAIgdB//8DcUUNACABIAc7AXQgAUH0AGoQ4IGAgAAgAEEANgIAIAJCADcDACAIQQhqQgA3AwAgCEIANwMAIANBADsBzAELIAMoArgBIgBFDQAgA0EANgK4ASADQQA7Ac4BAkAgAyAAKAIMIAAoAhBBACAAKAIAIAAtAAhBAXEiAhtBACAAKAIEIAIbENOBgIAAIgJB//8DcUUNACABIAI7AUAgAUHAAGoQ4YGAgAALIAAgA0GQAWoiAhCdgYCAACACIAAQnoGAgAALIAQoAhggBCgCECICaiAFQQN0aiIAKAIAIQUgAyAANgLAASADIAUgAmogBkEDdGo2AsQBIAAgACkDAEKAgICAgMAAhDcDACADLQCkAUUNASADIARBEGogAygCwAEiACAAKAIAIAQoAhBqIAQvAawCEOiBgIAADAELIANBARDYgYCAACACQQE6ALACAkADQCACKAIMIgVFDQEgAkEQaiAFQRBqIAYgAi8BrgJBf2pB//8DcUEDdGogBSgCGCAFKAIQaiIHQQAgAi8BrAIQoIGAgAAiAkH//wNxDQMgBykDACEKAkAgBS8BrgJBA3RBeGoiAEUNACAHIAdBCGogAPwKAAALIAcgAGogCjcDACAFQQE6ALACIAMoAnAhACADKAJsIQQgByEGIAUhAiADKAJ0RQ0AA0ACQCAADQAgByEGIAUhAgwCCwJAIAQoAgAiAigCACAFRw0AAkAgAi8BBCIGDQAgAiAFKAIIIgY2AgAgBi8BrgIhBgsgAiAGQX9qOwEECyAAQX9qIQAgBEEEaiEEDAALCwsgBiACLwGuAkF/akH//wNxQQN0aiINKAIAIAIoAhBqIQwgAi8BrAIhEQJAIA0pAwAiCkKAgICAwACDUA0AIAJBLGohCyARIQQgDCEFIAwhAANAAkACQCAERQ0AIAApAwBCA4NCAVINASABIAIoAjggAigCECIGajYCcCABQeAAaiABQfAAaiAFIAZrEKGBgIAAIAEoAmAhBiALIAIoAhAiByAHIAEoAmQiCSgCAGogCSgCBBCigYCAACABQfAAaiAGEKOBgIAAIAAgACkDAEJ8gzcDAAwBCwJAAkAgESACLwGsAiIARg0AIABBAWohBCANKAIAIAIoAhBqIQACQANAIARBf2oiBEUNASAAKQMAIQogAEEIaiEAIApCA4NCAVENAwwACwsgDSANKQMAQv////+/f4MiCjcDAAwECyANIA0pAwBC/////79/gyIKNwMADAMLIA0pAwAhCgwCCyAEQX9qIQQgBUEIaiEFIABBCGohAAwACwsCQCAKQoCAgICAAoNQDQAgAkGoAWohByARIQQgDCEFIAwhAANAAkACQCAERQ0AIAAtAAVBIHFFDQEgASACKAKkASACKAIQIgZqNgJ0IAFB+BBqIAFB9ABqIAUgBmsQpIGAgAAgAS0AgBFFDQEgByACKAIQIAEoAvwQLwEAEKWBgIAAIAFB9ABqIAEoAvgQEKaBgIAAIAAgACkDAEL///////93gzcDAAwBCwJAAkAgESACLwGs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qICAgAAgAS8BsBANASABQYAQakEQaiABQZgQakEQaikCADcDACABQYAQakEIaiIDIAFBmBBqQQhqKQIANwMAIAEgASkCmBA3A4AQAkAgAyAAEIuCgIAAQf//A3FFDQAgAUGAEGoQqYCAgAAMAgsgAUG0EGogAUGAEGoQqoCAgAAgAUGAEGoQqYCAgAAgAS8BvBANASABKAK4ECEDIAEoArQQIQALIAAgAxCAgICAACACQf//A3FFDQBBoOnJgAAgACADELaAgIAACyABQcAQaiSAgICAAAu3AQECfyOAgICAAEEQayICJICAgIAAAkAgAEHZ8smAAEE9EJqAgIAAIgNB//8DcQ0AIAEtAAAhAyACQdnqwIAANgIAIAJBATYCBCACQQlBByADQQFxIgMbNgIMIAJB4azAgABB3JPAgAAgAxs2AgggACACEKeEgIAAIgNB//8DcQ0AIABBlvPJgABBBRCagICAACIDQf//A3ENACAAIAEvAQIQpYSAgAAhAwsgAkEQaiSAgICAACADC6YCAgp/AX4jgICAgABBEGsiASSAgICAACAAKAJYIQJBACEDAkADQCACKAIYIAIoAhAiBGogAi8BrgIiBUEDdGohBiADIAVqIQdBACEIAkADQAJAAkAgCCAFRg0AIAAvAYgBQQFqIQkgBiAIQX9zQQN0aigCACAEaiEKA0AgCUF/aiIJRQ0CIAopAwAhCyAKQQhqIQogC0L+//+DgIADg1ANAAsgAC8BigEgA2shCgwFCyAHIQMgAigCCCICDQMMAgsgAyAALwGKAU8NASAIQQFqIQggA0EBaiEDDAALCwtBACEKCyAKQQFqIQoCQANAAkAgCkF/aiIKDQBBACEJDAILIAFBCGogABCxgYCAACABLwEMIglFDQALCyABQRBqJICAgIAAIAkLyQIBA38jgICAgABBwBBrIgEkgICAgAAgAUKAEDcCoBAgAUGwv8eAADYCmBAgASABNgKcEAJAAkACQCABQZgQaiAAEIKEgIAAIgJB//8DcQ0AIAEoApwQIQAgASgCpBAhAwwBCyABQZgQakGg6cmAAEHDABCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQgoSAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAAC6cFAQR/I4CAgIAAQdAQayIDJICAgIAAAkACQAJAAkACQAJAAkACQAJAAkACQCABQf8BcQ4DAQACAwsgACgCGCIBLwHIASABKALEASkDAEKAgICAgIADg0KAgICAgIABUWpBAWohBAwHCyAAKAIYIgQvAcgBIgENAkEAIQEMAwsgAC8B8hEhBAwFCyADIAE6AA8gA0KAEDcCsBAgA0Gwv8eAADYCqBAgAyADQRBqNgKsECADQagQaiADQQ9qEKeCgIAAIgBB//8DcUUNAiADQagQakGg6cmAAEEyEKiAgIAAIAMvAcAQDQYgA0GQEGpBEGogA0GoEGpBEGopAgA3AwAgA0GQEGpBCGoiASADQagQakEIaikCADcDACADIAMpAqgQNwOQEAJAIAEgA0EPahCngoCAAEH//wNxRQ0AIANBkBBqEKmAgIAADAcLIANBxBBqIANBkBBqEKqAgIAAIANBkBBqEKmAgIAAIAMvAcwQDQYgAygCyBAhBCADKALEECEBDAMLIAEgBCgCxAEpAwBCgICAgICAA4NCgICAgICAAlFrQf//A3EhAQsgBBCogoCAACAALwHyESEEDAMLIAMoAqwQIQEgAygCtBAhBAsgASAEEICAgIAAIABB//8DcUUNAkGg6cmAACABIAQQtoCAgAAMAgtBACEBCyAAKAIYQQA6ANEBIAAoAhgoAsABIgUgBSkDAEKAgICAgMAAhDcDACAAKAIYIgAoAsQBIAAvAcgBQQN0ayABQQN0aiEFIARB//8DcSABayEBIAAoArwBKAIAQRBqIQQgACgCwAEhBgJAIAAtAOECQQNxQQFGDQAgAkEBcQ0AIAAgBCAGIAUgARDogYCAAAwBCyAAIAQgBiAFIAEQ54GAgAALIANB0BBqJICAgIAACzEBAX8CQCAAQZvyyYAAQT4QmoCAgAAiAkH//wNxDQAgACABLwEAEKWEgIAAIQILIAILpAMCAX8BfiAAKAIIIAEgAhCMgYCAAEEAIQMCQAJAAkACQAJAAkACQCAB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QQEQ34GAgAAgB0F/aiEHIAItAOwBDQAgASACKQLcATcCACABQQhqIAJB3AFqQQhqKAIANgIADAALCyACIAM7ATogAkE6ahCsgoCAAAALIAJB8AFqJICAgIAAC6kEAwN/AX4DfyACKAIAIAEoAgBqIQMCQAJAIAAvAfoRIgQgAC8B8hFBf2pB//8DcUYNACAALwH4EUEBSw0BCyADIAEvAZwCQX9qQf//A3FBA3RqIgUpAwAiBkKAgICAgIADg0KAgICAgIADUg0AIAUgBkL///////98gzcDACAALwH6ESEECyADIARB//8DcUEDdGohBwJAIAMgAC8B+BEiBEEDdGoiCCkDAEKAgICAgIADg0KAgICAgIACUg0AAkAgAyAEQX9qQf//A3FBA3RqIgkpAwBCA4NCAVINACABIAkQ6oGAgAAgAS8BnAJBAWohBSACKAIAIAEoAgBqIQQCQANAIAVBf2oiBUUNASAEKQMAIQYgBEEIaiEEIAZCA4NCAVENAgwACwsgAiACKQMAQv////+/f4M3AwALIAkgCSkDAEKDgID8//98gzcDACAIIAgpAwBC////////fIM3AwALAkAgBykDACIGQoCAgICAgAODQoCAgICAgAFRDQAPCyADIAAvAfoRQQFqQf//A3FBA3RqIQACQCAGQgODQgFSDQAgASAHEOqBgIAAIAEvAZwCQQFqIQUgAigCACABKAIAaiEEAkADQCAFQX9qIgVFDQEgBCkDACEGIARBCGohBCAGQgODQgFRDQIMAAsLIAIgAikDAEL/////v3+DNwMACyAHIAcpAwBCg4CA/P//fIM3AwAgACAAKQMAQv///////3yDNwMAC5wMBAZ/AX4HfwF+I4CAgIAAQdAAayIGJICAgIAAIAMoAgAgACgCACIHaiIIIARBA3QiCWohCiABKAIAIQsCQCADKQMAIgxCgICAgMAAg1ANACAAQRxqIQ0gCCAJaiEOIAohCSAFIQ8DQAJAAkAgD0UNACAJKQMAQgODQgFSDQEgBiAAKAIoIAAoAgAiEGo2AgggBkEMaiAGQQhqIA4gEGsQoYGAgAAgBigCDCERIA0gECAQIAYoAhAiEigCAGogEigCBBCigYCAACAGQQhqIBEQo4GAgAAgCSAJKQMAQnyDNwMADAELAkACQCAFIAAvAZwCIglGDQAgCUEBaiEPIAMoAgAgACgCAGohCQJAA0AgD0F/aiIPRQ0BIAkpAwAhDCAJQQhqIQkgDEIDg0IBUQ0DDAALCyADIAMpAwBC/////79/gyIMNwMADAQLIAMgAykDAEL/////v3+DIgw3AwAMAwsgAykDACEMDAILIA5BCGohDiAJQQhqIQkgD0F/aiEPDAALCwJAIAxCgICAgIACg1ANACAAQZgBaiERIAggBEEDdGohDiAKIQkgBSEPA0ACQAJAIA9FDQAgCS0ABUEgcUUNASAGIAAoApQBIAAoAgAiEGo2AhggBkEcaiAGQRhqIA4gEGsQpIGAgAAgBi0AJEUNASARIBAgBigCIC8BABClgYCAACAGQRhqIAYoAhwQpoGAgAAgCSAJKQMAQv///////3eDNwMADAELAkACQCAFIAAvAZwCIglGDQAgCUEBaiEPIAMoAgAgACgCAGohCQJAA0AgD0F/aiIPRQ0BIAktAAUhDiAJQQhqIQkgDkEgcQ0DDAALCyADIAMpAwBC//////99gyIMNwMADAQLIAMgAykDAEL//////32DIgw3AwAMAwsgAykDACEMDAILIAlBCGohCSAOQQhqIQ4gD0F/aiEPDAALCwJAIAxCgICAgIABg1ANACAAQSxqIRAgCiEPIAUhCQNAAkACQAJAAkACQCAJRQ0AIA8pAwBCGoinIg5B//8DcQ0BDAQLIAUgAC8BnAIiCUcNAQwCCyAQIAAoAgAgDhCTgYCAAAwCCyAJQQFqIQ8gAygCACAAKAIAaiEJA0AgD0F/aiIPRQ0BIAkoAQIhDiAJQQhqIQkgDkGA+P8fcQ0EDAALCyADIAMpAwBC//////9+gzcDAAwCCyAPQQhqIQ8gCUF/aiEJDAALCyACQQN0IQ8gCyAHaiEJAkAgBUEDdCITRSIHDQAgCkEAIBP8CwALIAkgD2ohCwJAAkAgAS0ABEEccUUNACAIIARBA3RqIRAgCSACQQN0aiERIAohCSALIQ8gBSEOA0AgDkUNAiAJIA8pAwAiDDcDAAJAIAxCA4NCAVINACAJIAxCfIM3AwAgBiAAKAIoIAAoAgAiEmo2AiggBkEsaiAGQShqIBEgEmsQoYGAgAAgBiAGKAIwKQIANwM4IAZBKGogBigCLBCjgYCAACAGQShqIBAgEmsgBkE4ahChgoCAACAPIA8pAwBCfIM3AwAgCSAJKQMAQnyDQgGENwMAIAMgAykDAEKAgICAwACENwMAIA8pAwAhDAsCQCAMQoCAgICAgAiDUA0AIAkgCSkDAEL///////93gzcDACAGIAAoApQBIAAoAgAiEmo2AkAgBkHEAGogBkHAAGogESASaxCkgYCAACAGKAJILwEAIQ0gBkHAAGogBigCRBCmgYCAACAGQcAAaiAQIBJrIA0QooKAgAAgCSAJKQMAQoCAgICAgAiENwMAIAMgAykDAEKAgICAgAKENwMACyAQQQhqIRAgCUEIaiEJIBFBCGohESAPQQhqIQ8gDkF/aiEODAALCyAHDQAgCiALIBP8CgAACwJAIAMpAwAiDEKAgICAgAGDQgBSDQAgBUEBaiEJAkADQAJAIAlBf2oiCQ0AQgAhFAwCCyAKKAECIQ8gCkEIaiEKIA9BgPj/H3FFDQALQoCAgICAASEUCyADIBQgDIQ3AwALAkAgBw0AIAtBACAT/AsACwJAIAUgAC8BnAJHDQAgASABKQMAQv////+/fIM3AwALIAZB0ABqJICAgIAAC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABCDhICAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBMhCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQg4SAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAAC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABCEhICAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBMhCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQhISAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAACw8AIAAoAghBABCvgoCAAAviAwEDfyOAgICAAEHQEGsiAiSAgICAAAJAAkACQAJAIAFB/wFxDgQAAgIBAgsgACgCGC8ByAEiAUEHcSEDIAFBA3YhBAJAIAFB/wNLDQAgACAEaiIBIANBwKfIgABqLQAAIAEtADxzOgA8DAMLIAQgACgCNGpBQGoiASADQcCnyIAAai0AACABLQAAczoAAAwCCyAAQTBqQQAQiYGAgAAMAQsgAiABOgAPIAJCgBA3ArAQIAJBsL/HgAA2AqgQIAIgAkEQajYCrBACQAJAIAJBqBBqIAJBD2oQsIKAgAAiAUH//wNxRQ0AIAJBqBBqQaDpyYAAQTsQqICAgAAgAi8BwBANAiACQZAQakEQaiACQagQakEQaikCADcDACACQZAQakEIaiIAIAJBqBBqQQhqKQIANwMAIAIgAikCqBA3A5AQAkAgACACQQ9qELCCgIAAQf//A3FFDQAgAkGQEGoQqYCAgAAMAwsgAkHEEGogAkGQEGoQqoCAgAAgAkGQEGoQqYCAgAAgAi8BzBANAiACKALIECEDIAIoAsQQIQAMAQsgAigCrBAhACACKAK0ECEDCyAAIAMQgICAgAAgAUH//wNxRQ0AQaDpyYAAIAAgAxC2gICAAAsgAkHQEGokgICAgAALNwEBfwJAIABByLHKgABBORCagICAACICQf//A3ENACAAQYy1yoAAIAEtAAAQr4SAgAAhAgsgAgsPACAAKAIIQQMQr4KAgAALOAEBfyAAKAIIIgIgAi8B7BFB/f8DcTsB7BECQCABQQVHDQAgACgCCCIAIAAvAewRQQJyOwHsEQsLQgEBfwJAIAAgASADELSCgIAAIgFB//8DcQ0AIAAgACgCBCIEIANqNgIEIANFDQAgACgCACAEaiACIAP8CgAACyABC2ABA38jgICAgABBEGsiAySAgICAACADIAAoAgQiBCAC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ADoAnREgAEEAOwGUESAAIANBAWo6AJwRDAILIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkACQCACQagoahC7goCAACIDQf//A3FFDQAgAkGoKGpBoOnJgABBLBCogICAACACLwHAKA0DIAJBkChqQRBqIAJBqChqQRBqKQIANwMAIAJBkChqQQhqIgcgAkGoKGpBCGopAgA3AwAgAiACKQKoKDcDkCgCQCAHELuCgIAAQf//A3FFDQAgAkGQKGoQqYCAgAAMBAsgAkHEKGogAkGQKGoQqoCAgAAgAkGQKGoQqYCAgAAgAi8BzCgNAyACKALIKCEJIAIoAsQoIQcMAQsgAigCrCghByACKAK0KCEJCyAHIAkQgICAgAAgA0H//wNxRQ0BQaDpyYAAIAcgCRC2gICAAAwBCyACQQI6ALABIANB/wFxIQcgAEHkEGohCSAAQZcRaiEKIAAvARAgAEESai0AAEEQdHIhAyAALQCbESELAkACQCABQf8BcUHtAEYNACADQf///wdxRQ0AIAIgAzsBxAEgAkHGAWogA0EQdjoAACACIAE6AMgBIAIgBzYCwAEgAiAJNgK8ASACIAs2ArgBIAIgCjYCtAEgAiACLQCwAToA4AEgAkKAEDcCsCggAkGwv8eAADYCqCggAiACQZAYajYCrCgCQCACQagoaiACQbQBahC8goCAACIDQf//A3ENACACKAKsKCEHIAIoArQoIQkMAgsgAkGoKGpBoOnJgABB1QAQqICAgAAgAi8BwCgNAiACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiIHIAJBqChqQQhqKQIANwMAIAIgAikCqCg3A5AoAkAgByACQbQBahC8goCAAEH//wNxRQ0AIAJBkChqEKmAgIAADAMLIAJBxChqIAJBkChqEKqAgIAAIAJBkChqEKmAgIAAIAIvAcwoDQIgAigCyCghCSACKALEKCEHDAELIAIgAzsB9AEgAkHkAWpBEmogA0EQdjoAACACIAE6APgBIAIgBzYC8AEgAiAJNgLsASACIAs2AugBIAIgCjYC5AEgAkEBOgCUAiACIAItALABOgCQAiACQeQBaiEIDAELIAcgCRCAgICAACADQf//A3FFDQBBoOnJgAAgByAJELaAgIAAC0H4sMeAACEDAkAgAC0AlhFB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AtQFIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkAgAkGoKGogAkHUBWoQv4KAgAAiAUH//wNxDQAgAigCrCghBCACKAK0KCEFDIQBCyACQagoakGg6cmAAEHFABCogICAACACLwHAKA2KASACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkHUBWoQv4KAgABB//8DcUUNACACQZAoahCpgICAAAyLAQsgAkHEKGogAkGQKGoQqoCAgAAgAkGQKGoQqYCAgAAgAi8BzCgNigEgAigCyCghBSACKALEKCEEDIMBCyAIRQ2BASACIAg2AvgFIAIgBDYC9AUgAkKAEDcCsCggAkGwv8eAADYCqCggAiACQZAYajYCrCgCQCACQagoaiACQfQFahDAgoCAACIBQf//A3ENACACKAKsKCEEIAIoArQoIQUMgQELIAJBqChqQaDpyYAAQcUAEKiAgIAAIAIvAcAoDYkBIAJBkChqQRBqIAJBqChqQRBqKQIANwMAIAJBkChqQQhqIAJBqChqQQhqKQIANwMAIAIgAikCqCg3A5AoAkAgDCACQfQFahDAgoCAAEH//wNxRQ0AIAJBkChqEKmAgIAADIoBCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA2JASACKALIKCEFIAIoAsQoIQQMgAELIAhFDX0gAiAINgKcBiACIAQ2ApgGIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkAgAkGoKGogAkGYBmoQwYKAgAAiAUH//wNxDQAgAigCrCghBCACKAK0KCEFDH0LIAJBqChqQaDpyYAAQcUAEKiAgIAAIAIvAcAoDYgBIAJBkChqQRBqIAJBqChqQRBqKQIANwMAIAJBkChqQQhqIAJBqChqQQhqKQIANwMAIAIgAikCqCg3A5AoAkAgDCACQZgGahDBgoCAAEH//wNxRQ0AIAJBkChqEKmAgIAADIkBCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA2IASACKALIKCEFIAIoAsQoIQQMfAsgCEUNeiACIAg2AsAGIAIgBDYCvAYgAkKAEDcCsCggAkGwv8eAADYCqCggAiACQZAYajYCrCgCQCACQagoaiACQbwGahDCgoCAACIBQf//A3ENACACKAKsKCEEIAIoArQoIQUMegsgAkGoKGpBoOnJgABBxQAQqICAgAAgAi8BwCgNhwEgAkGQKGpBEGogAkGoKGpBEGopAgA3AwAgAkGQKGpBCGogAkGoKGpBCGopAgA3AwAgAiACKQKoKDcDkCgCQCAMIAJBvAZqEMKCgIAAQf//A3FFDQAgAkGQKGoQqYCAgAAMiAELIAJBxChqIAJBkChqEKqAgIAAIAJBkChqEKmAgIAAIAIvAcwoDYcBIAIoAsgoIQUgAigCxCghBAx5CyAIRQ13IAIgCDYC4AYgAiAENgLcBiACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAIAJBqChqIAJB3AZqEMOCgIAAIgFB//8DcQ0AIAIoAqwoIQQgAigCtCghBQx3CyACQagoakGg6cmAAEHFABCogICAACACLwHAKA2GASACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkHcBmoQw4KAgABB//8DcUUNACACQZAoahCpgICAAAyHAQsgAkHEKGogAkGQKGoQqoCAgAAgAkGQKGoQqYCAgAAgAi8BzCgNhgEgAigCyCghBSACKALEKCEEDHYLQcqyx4AAQcyyx4AAIAQtAABBP0YbIQEMdAtByrLHgABBzLLHgAAgBC0AAEE/RhshAQxyCyAIRQ1wIAIgCDYC4AcgAiAENgLcByACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAIAJBqChqIAJB3AdqEMSCgIAAIgFB//8DcQ0AIAIoAqwoIQQgAigCtCghBQxwCyACQagoakGg6cmAAEHFABCogICAACACLwHAKA2DASACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkHcB2oQxIKAgABB//8DcUUNACACQZAoahCpgICAAAyEAQsgAkHEKGogAkGQKGoQqoCAgAAgAkGQKGoQqYCAgAAgAi8BzCgNgwEgAigCyCghBSACKALEKCEEDG8LIAhFDW0gAiAINgKACCACIAQ2AvwH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AkHEFWpBC2ogAUEQdjoAACACQcgAOgDMFSACIAg2AsgVIAIgBDYCxBUgAkKAEDcCsCggAkGwv8eAADYCqCggAiACQZAYajYCrCgCQAJAIAJBqChqIAJBxBVqEOKCgIAAQf//A3EiAQ0AIAIoAqwoIQQgAigCtCghBQwBCyACQagoakGg6cmAAEEtEKiAgIAAIAIvAcAoDVkgAkGQKGpBEGogAkGoKGpBEGopAgA3AwAgDCACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkHEFWoQ4oKAgABB//8DcUUNACACQZAoahCpgICAAAxaCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA1ZIAIoAsgoIQUgAigCxCghBAsgBCAFEICAgIAAIAFFDVhBoOnJgAAgBCAFELaAgIAADFgLIAAQ+IGAgAAMVwsCQCAIRQ0AIAIgATsAwRUgAkG4FWpBC2ogAUEQdjoAACACQcUAOgDAFSACIAg2ArwVIAIgBDYCuBUgAkKAEDcCsCggAkGwv8eAADYCqCggAiACQZAYajYCrCgCQAJAIAJBqChqIAJBuBVqEOOCgIAAQf//A3EiAQ0AIAIoAqwoIQQgAigCtCghBQwBCyACQagoakGg6cmAAEEvEKiAgIAAIAIvAcAoDVggAkGQKGpBEGogAkGoKGpBEGopAgA3AwAgDCACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkG4FWoQ44KAgABB//8DcUUNACACQZAoahCpgICAAAxZCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA1YIAIoAsgoIQUgAigCxCghBAsgBCAFEICAgIAAIAFFDVdBoOnJgAAgBCAFELaAgIAADFcLIAAQ9YGAgAAhBAwJCwJAIAhFDQAgAiABOwC1FSACQawVakELaiABQRB2OgAAIAJBxAA6ALQVIAIgCDYCsBUgAiAENgKsFSACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAAkAgAkGoKGogAkGsFWoQ5IKAgABB//8DcSIBDQAgAigCrCghBCACKAK0KCEFDAELIAJBqChqQaDpyYAAQSsQqICAgAAgAi8BwCgNVyACQZAoakEQaiACQagoakEQaikCADcDACAM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DQAgBS8BAEFyag4KAgEDAQQBAQUGBwELIDggCi8AADsAACACIAs7AZQRIAJBlhFqIAtBEHY6AAAgOEECaiAKQQJqLQAAOgAAIAJB9AA6AJgRIAIgUjoAlxEgAkEANgKQESACIAU2AowRIAJBADYCiBEgAiAENgKEESACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKCACQagoaiACQYQRahD5goCAACIBQf//A3FFDQ8gAkGoKGpBoOnJgABBNRCogICAACACLwHAKA1TIAJBkChqQRBqIAJBqChqQRBqKQIANwMAIAJBkChqQQhqIAJBqChqQQhqKQIANwMAIAIgAikCqCg3A5AoAkAgDCACQYQRahD5goCAAEH//wNxRQ0AIAJBkChqEKmAgIAADFQLIAJBxChqIAJBkChqEKqAgIAAIAJBkChqEKmAgIAAIAIvAcwoDVMgAigCyCghBSACKALEKCEEDBALIDkgCi8AADsAACACIAs7AfwQIAJB/hBqIAtBEHY6AAAgOUECaiAKQQJqLQAAOgAAIAJB9AA6AIARIAIgUjoA/xAgAiAHNgL4ECACIAU2AvQQIAJBADYC8BAgAiAENgLsECACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKCACQagoaiACQewQahD6goCAACIBQf//A3FFDQwgAkGoKGpBoOnJgABBwQAQqICAgAAgAi8BwCgNUiACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkHsEGoQ+oKAgABB//8DcUUNACACQZAoahCpgICAAAxTCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA1SIAIoAsgoIQUgAigCxCghBAwNCyAHQQFGDVEgOiAKLwAAOwAAIAIgCzsB7A8gAkHuD2ogC0EQdjoAACA6QQJqIApBAmotAAA6AAAgAkH0ADoA8A8gAiBSOgDvDyACIAc2AugPIAIgBTYC5A8gAkEANgLgDyACIAQ2AtwPIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkAgAkGoKGogAkHcD2oQ+4KAgAAiAUH//wNxDQAgAigCrCghBCACKAK0KCEFDAsLIAJBqChqQaDpyYAAQT0QqICAgAAgAi8BwCgNUSACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkHcD2oQ+4KAgABB//8DcUUNACACQZAoahCpgICAAAxSCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA1RIAIoAsgoIQUgAigCxCghBAwKCyAHQQFGDVAgOyAKLwAAOwAAIAIgCzsBhBAgAkGGEGogC0EQdjoAACA7QQJqIApBAmotAAA6AAAgAkH0ADoAiBAgAiBSOgCHECACIAc2AoAQIAIgBTYC/A8gAkEANgL4DyACIAQ2AvQPIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkAgAkGoKGogAkH0D2oQ/IKAgAAiAUH//wNxDQAgAigCrCghBCACKAK0KCEFDAkLIAJBqChqQaDpyYAAQT0QqICAgAAgAi8BwCgNUCACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkH0D2oQ/IKAgABB//8DcUUNACACQZAoahCpgICAAAxRCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA1QIAIoAsgoIQUgAigCxCghBAwICyAHQQFGDU8gPCAKLwAAOwAAIAIgCzsBnBAgAkGeEGogC0EQdjoAACA8QQJqIApBAmotAAA6AAAgAkH0ADoAoBAgAiBSOgCfECACIAc2ApgQIAIgBTYClBAgAkEANgKQECACIAQ2AowQIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkAgAkGoKGogAkGMEGoQ/YKAgAAiAUH//wNxDQAgAigCrCghBCACKAK0KCEFDAcLIAJBqChqQaDpyYAAQT0QqICAgAAgAi8BwCgNTyACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkGMEGoQ/YKAgABB//8DcUUNACACQZAoahCpgICAAAxQCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA1PIAIoAsgoIQUgAigCxCghBAwGCyAHQQFGDU4gPSAKLwAAOwAAIAIgCzsBtBAgAkG2EGogC0EQdjoAACA9QQJqIApBAmotAAA6AAAgAkH0ADoAuBAgAiBSOgC3ECACIAc2ArAQIAIgBTYCrBAgAkEANgKoECACIAQ2AqQQIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkAgAkGoKGogAkGkEGoQ/oKAgAAiAUH//wNxDQAgAigCrCghBCACKAK0KCEFDAULIAJBqChqQaDpyYAAQT0QqICAgAAgAi8BwCgNTiACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkGkEGoQ/oKAgABB//8DcUUNACACQZAoahCpgICAAAxPCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA1OIAIoAsgoIQUgAigCxCghBAwECyAHQX5xQQJGDQEMAgsCQCAHQX5xQQJHDQAgBS8BAg4DTQBNAAsgPyAKLwAAOwAAIAIgCzsB5BAgAkHmEGogC0EQdjoAACA/QQJqIApBAmotAAA6AAAgAkH0ADoA6BAgAiBSOgDnECACIAc2AuAQIAIgBTYC3BAgAkEANgLYECACIAQ2AtQQIAJB1BBqEP+CgIAADEwLIAUvAQIOA0sASwALID4gCi8AADsAACACIAs7AcwQIAJBzhBqIAtBEHY6AAAgPkECaiAKQQJqLQAAOgAAIAJB9AA6ANAQIAIgUjoAzxAgAiAHNgLIECACIAU2AsQQIAJBADYCwBAgAiAENgK8ECACQbwQahD/goCAAAxKCyAEIAUQgICAgAAgAUH//wNxRQ1JQaDpyYAAIAQgBRC2gICAAAxJCyAEIAUQgICAgAAgAUH//wNxRQ1IQaDpyYAAIAQgBRC2gICAAAxICyAEIAUQgICAgAAgAUH//wNxRQ1HQaDpyYAAIAQgBRC2gICAAAxHCyAEIAUQgICAgAAgAUH//wNxRQ1GQaDpyYAAIAQgBRC2gICAAAxGCyACKAKsKCEEIAIoArQoIQULIAQgBRCAgICAACABQf//A3FFDURBoOnJgAAgBCAFELaAgIAADEQLIAIoAqwoIQQgAigCtCghBQsgBCAFEICAgIAAIAFB//8DcUUNQkGg6cmAACAEIAUQtoCAgAAMQgsgBCAFEICAgIAAIAFB//8DcUUNQUGg6cmAACAEIAUQtoCAgAAMQQsgMyAKLwAAOwAAIAIgCzsB1A8gAkHWD2ogC0EQdjoAACAzQQJqIApBAmotAAA6AAAgAkHzADoA2A8gAiBSOgDXDyACIAc2AtAPIAIgBTYCzA8gAiAINgLIDyACIAQ2AsQPIAJBxA9qEICDgIAADEALAkACQAJAAkACQAJAIAQtAABBQmoOAgACAQtBgAIhASAHDgIEAwILIDUgCi8AADsAACACIAs7AbwPIAJBvg9qIAtBEHY6AAAgNUECaiAKQQJqLQAAOgAAIAJB8wA6AMAPIAIgUjoAvw8gAiAHNgK4DyACIAU2ArQPIAJBATYCsA8gAiAENgKsDyACQawPahD1goCAAAxDCwNAIAdFDUMgAkH2DmogBS8BACIBQQAQ0oKAgAACQAJAIAItAPgORQ0AIAAoAggiAUEMajEAACFWIAE1AgghVyABQQRqMQAAIVggATUCACFZAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAIvAfYOIgRBf2oOGQE2AgMEBQYHCDY2CTY2NjY2NjY2NjY2NgoACwJAIARBmHhqDhEQNhESExQVFjY2NjY2NjYXGAALAkAgBEH1d2oODxkaNjYbNjY2NjYcNh0eHwALAkAgBEGWcGoOBiEiNjY2IwALAkAgBEFTag4DDDYNAAsCQCAEQb5/ag4EDjY2DwALQgEhBkL+/////x8hWgJAIARB/v99ag4DJjYlAAsgBEEoRg0KIARB1A9GDR8gBEGAEEYNIwJAIARBjIACRw0AQgQhBkL7/////x8hWgwmC0IIIQZC9/////8fIVoMJQtCECEGQu//////HyFaDCQLQt//////HyFaQiAhBgwjC0LAACEGQr//////HyFaDCILQoABIQZC//7///8fIVoMIQtCgAIhBkL//f///x8hWgwgC0KABCEGQv/7////HyFaDB8LQoAIIQZC//f///8fIVoMHgtCgBAhBkL/7////x8hWgwdC0KAICEGQv/f////HyFaDBwLQoDAACEGQv+/////HyFaDBsLQoCAASEGQv///v//HyFaDBoLQoCAAiEGQv///f//HyFaDBkLQoCABCEGQv//+///HyFaDBgLQoCACCEGQv//9///HyFaDBcLQoCAECEGQv//7///HyFaDBYLQoCAICEGQv//3///HyFaDBULQoCAwAAhBkL//7///x8hWgwUC0KAgIABIQZC/////v8fIVoMEwtCgICAAiEGQv////3/HyFaDBILQoCAgAQhBkL////7/x8hWgwRC0KAgIAIIQZC////9/8fIVoMEAtCgICAECEGQv///+//HyFaDA8LQoCAgCAhBkL////f/x8hWgwOC0KAgIDAACEGQv///7//HyFaDA0LQoCAgIABIQZC//////4fIVoMDAtCgICAgAIhBkL//////R8hWgwLC0KAgICABCEGQv/////7HyFaDAoLQoCAgIAIIQZC//////cfIVoMCQtCgICAgBAhBkL/////7x8hWgwIC0KAgICAICEGQv/////fHyFaDAcLQoCAgIDAACEGQv////+/HyFaDAYLQoCAgICAASEGQv//////HiFaDAULQoCAgICAAiEGQv//////HSFaDAQLQoCAgICABCEGQv//////GyFaDAMLQoCAgICACCEGQv//////FyFaDAILQoCAgICAECEGQv//////DyFaDAELQgIhBkL9/////x8hWgsgASAGIFkgWEIghoSDIFogVyBWQiCGhIOEIgY+AgggAUEMaiAGQiCIPAAADAELIAIgATsB+g4gAkKAEDcCsCggAkGwv8eAADYCqCggAiACQZAYajYCrCgCQAJAIAJBqChqIAJB+g5qEIGDgIAAIgFB//8DcUUNACACQagoakGg6cmAAEEsEKiAgIAAIAIvAcAoDQIgAkGQKGpBEGogAkGoKGpBEGopAgA3AwAgAkGQKGpBCGogAkGoKGpBCGopAgA3AwAgAiACKQKoKDcDkCgCQCAMIAJB+g5qEIGDgIAAQf//A3FFDQAgAkGQKGoQqYCAgAAMAwsgAkHEKGogAkGQKGoQqoCAgAAgAkGQKGoQqYCAgAAgAi8BzCgNAiACKALIKCEIIAIoAsQoIQQMAQsgAigCrCghBCACKAK0KCEICyAEIAgQgICAgAAgAUH//wNxRQ0AQaDpyYAAIAQgCBC2gICAAAsgBUECaiEFIAdBf2ohBwwACwsgNiAKLwAAOwAA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BCAIELaAgIAADAELIAAgBCABEIyCgIAAIgRB//8DcQ1BCyAFQQJqIQUgB0F/aiEHDAALCwJAAkACQAJAIAcOAwABAgMLIABB9rLHgAAQtYKAgAAMPgsgAkEAOwH+DSACIAUvAQA7AfwNIAAgAkH8DWoQtYKAgAAMPQsgAiAFKAEANgGADiAAIAJBgA5qELWCgIAADDwLIDEgCi8AADsAACACIAs7AZQOIAJBlg5qIAtBEHY6AAAgMUECaiAKQQJqLQAAOgAAIAJB8gA6AJgOIAIgUjoAlw4gAiAHNgKQDiACIAU2AowOIAJBADYCiA4gAiAENgKEDiACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAAkAgAkGoKGogAkGEDmoQhYOAgAAiAUH//wNxRQ0AIAJBqChqQaDpyYAAQS0QqICAgAAgAi8BwCgNPSACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkGEDmoQhYOAgABB//8DcUUNACACQZAoahCpgICAAAw+CyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA09IAIoAsgoIQUgAigCxCghBAwBCyACKAKsKCEEIAIoArQoIQULIAQgBRCAgICAACABQf//A3FFDTtBoOnJgAAgBCAFELaAgIAADDsLAkAgCEEBRg0AIAIgCDYC+A0gAiAENgL0DSACQfQNahCGg4CAAAw7CwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAQtAAAiAUFgag4DAAMBAgtCACEGQQEhASAHDgITAwQLQfCyx4AAIQEgBw4CCwgJCyABQT5GDU0LIAJBATYC8A0gAiAENgLsDSACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAIAJBqChqIAJB7A1qEIeDgIAAIgFB//8DcQ0AIAIoAqwoIQQgAigCtCghBQwSCyACQagoakGg6cmAAEHFABCogICAACACLwHAKA1MIAJBkChqQRBqIAJBqChqQRBqKQIANwMAIAJBkChqQQhqIAJBqChqQQhqKQIANwMAIAIgAikCqCg3A5AoAkAgDCACQewNahCHg4CAAEH//wNxRQ0AIAJBkChqEKmAgIAADE0LIAJBxChqIAJBkChqEKqAgIAAIAJBkChqEKmAgIAAIAIvAcwoDUwgAigCyCghBSACKALEKCEEDBELQQIhAUKAICEGIAUvAQAiBA4HDQ4NDwMBAgQLIC4gCi8AADsAACACIAs7AcwNIAJBzg1qIAtBEHY6AAAgLkECaiAKQQJqLQAAOgAAIAJB8QA6ANANIAIgUjoAzw0gAiAHNgLIDSACIAU2AsQNIAJBATYCwA0gAiAENgK8DSACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKCACQagoaiACQbwNahCIg4CAACIBQf//A3FFDQogAkGoKGpBoOnJgABBNRCogICAACACLwHAKA1KIAJBkChqQRBqIAJBqChqQRBqKQIANwMAIAJBkChqQQhqIAJBqChqQQhqKQIANwMAIAIgAikCqCg3A5AoAkAgDCACQbwNahCIg4CAAEH//wNxRQ0AIAJBkChqEKmAgIAADEsLIAJBxChqIAJBkChqEKqAgIAAIAJBkChqEKmAgIAAIAIvAcwoDUogAigCyCghBSACKALEKCEEDAsLQQAhAQwNC0EAIQELQgAhBgwLCyACIAQ7AboNIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoIAJBqChqIAJBug1qEImDgIAAIgFB//8DcUUNBCACQagoakGg6cmAAEEvEKiAgIAAIAIvAcAoDUYgAkGQKGpBEGogAkGoKGpBEGopAgA3AwAgAkGQKGpBCGogAkGoKGpBCGopAgA3AwAgAiACKQKoKDcDkCgCQCAMIAJBug1qEImDgIAAQf//A3FFDQAgAkGQKGoQqYCAgAAMRwsgAkHEKGogAkGQKGoQqoCAgAAgAkGQKGoQqYCAgAAgAi8BzCgNRiACKALIKCEFIAIoAsQoIQQMBQsgBS8BACIBQQNJDQELQfSyx4AAIQEMAQsgAUECdEHguMqAAGooAgAhAQsCQAJAAkACQAJAAkAgAS0AAUUNACAAKAIIIgUoAhghBCABLQAAQQNxDgMBAgMBCyAvIAovAAA7AAAgAiALOwHkDSACQeYNaiALQRB2OgAAIC9BAmogCkECai0AADoAACACQfEAOgDoDSACIFI6AOcNIAIgBzYC4A0gAiAFNgLcDSACQQE2AtgNIAIgBDYC1A0gAkKAEDcCsCggAkGwv8eAADYCqCggAiACQZAYajYCrCggAkGoKGogAkHUDWoQioOAgAAiAUH//wNxRQ0DIAJBqChqQaDpyYAAQTgQqICAgAAgAi8BwCgNRyACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkHUDWoQioOAgABB//8DcUUNACACQZAoahCpgICAAAxICyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA1HIAIoAsgoIQUgAigCxCghBAwECyAEQQA6ANIBDEYLIARBAToA0gEgBSgCGEEBOgDhAgxFCyAEQQE6ANIBIAUoAhhBAjoA4QIMRAsgAigCrCghBCACKAK0KCEFCyAEIAUQgICAgAAgAUH//wNxRQ1CQaDpyYAAIAQgBRC2gICAAAxCCyACKAKsKCEEIAIoArQoIQULIAQgBRCAgICAACABQf//A3FFDUBBoOnJgAAgBCAFELaAgIAADEALIAIoAqwoIQQgAigCtCghBQsgBCAFEICAgIAAIAFB//8DcUUNPkGg6cmAACAEIAUQtoCAgAAMPgtCACEGC0EBIQELIAAoAggiBCAENQIAQv/f//8PgyAGhD4CACAAKAIIKAIYIAE6ANABDDsLIAQgBRCAgICAACABQf//A3FFDTpBoOnJgAAgBCAFELaAgIAADDoLAkAgCEECRg0AIAIgCDYCtA0gAiAENgKwDSACQbANahCGg4CAAAw6CwJAIAQtAABBP0cNACAELQABQSRHDQAgB0EBRg06IC0gCi8AADsAACACIAs7AagNIAJBqg1qIAtBEHY6AAAgAkECNgKcDSAtQQJqIApBAmotAAA6AAAgAkHwADoArA0gAiBSOgCrDSACIAc2AqQNIAIgBTYCoA0gAiAENgKYDSACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAAkAgAkGoKGogAkGYDWoQi4OAgAAiAUH//wNxDQAgAigCrCghBCACKAK0KCEFDAELIAJBqChqQaDpyYAAQSwQqICAgAAgAi8BwCgNOyACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkGYDWoQi4OAgABB//8DcUUNACACQZAoahCpgICAAAw8CyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA07IAIoAsgoIQUgAigCxCghBAsgBCAFEICAgIAAIAFB//8DcUUNOkGg6cmAACAEIAUQtoCAgAAMOgsgAkECNgKUDSACIAQ2ApANIAJBkA1qEIaDgIAADDkLAkACQAJAAkACQAJAAkACQAJAAkACQCAIRQ0AIAQtAAAiAUE/Rw0FIAdBAUcNASAIQQFGDQMgLCAKLwAAOwAAIAIgCzsB5AwgAkHmDGogC0EQdjoAACAsQQJqIApBAmotAAA6AAAgAkHuADoA6AwgAiBSOgDnDCACQQE2AuAMIAIgBTYC3AwgAiAINgLYDCACIAQ2AtQMIAJB1AxqEL2CgIAADEMLIAdBAUYNAQsgKyAKLwAAOwAAIAIgCzsBzAwgAkHODGogC0EQdjoAACArQQJqIApBAmotAAA6AAAgAkHuADoA0AwgAiBSOgDPDCACIAc2AsgMIAIgBTYCxAwgAiAINgLADCACIAQ2ArwMIAJBvAxqEIyDgIAADEELAkACQCAFLwEAQXtqDgIAAQMLIAAoAgwgAEHupMCAAEEEELOCgIAAIQQMGQsgACgCCCIBKAIYIgUvAcoBIQQgBS8ByAEhBSABLQABQQFxDQMMBwsgBS8BAEHkB0YNFgsgKiAKLwAAOwAAIAIgCzsB/AwgAkH+DGogC0EQdjoAACAqQQJqIApBAmotAAA6AAAgAkHuADoAgA0gAiBSOgD/DCACQQE2AvgMIAIgBTYC9AwgAiAINgLwDCACIAQ2AuwMIAJB7AxqEIyDgIAADD4LAkAgCEEBRg0AIAIgCDYCjA0gAiAENgKIDSACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAIAJBqChqIAJBiA1qEI2DgIAAIgFB//8DcQ0AIAIoAqwoIQQgAigCtCghBQwFCyACQagoakGg6cmAAEHFABCogICAACACLwHAKA0+IAJBkChqQRBqIAJBqChqQRBqKQIANwMAIAJBkChqQQhqIAJBqChqQQhqKQIANwMAIAIgAikCqCg3A5AoAkAgDCACQYgNahCNg4CAAEH//wNxRQ0AIAJBkChqEKmAgIAADD8LIAJBxChqIAJBkChqEKqAgIAAIAJBkChqEKmAgIAAIAIvAcwoDT4gAigCyCghBSACKALEKCEEDAQLIAFBPkYNAiACIAE6AIcNIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkAgAkGoKGogAkGHDWoQjoOAgAAiAUH//wNxDQAgAigCrCghBCACKAK0KCEFDAILIAJBqChqQaDpyYAAQTQQqICAgAAgAi8BwCgNPSACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkGHDWoQjoOAgABB//8DcUUNACACQZAoahCpgICAAAw+CyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA09IAIoAsgoIQUgAigCxCghBAwBC0EAIARB//8DcSIEIAEvAfQRayIHIAcgBEsbIQRBACAFQf//A3EiBSABLwH4EWsiASABIAVLGyEFDAMLIAQgBRCAgICAACABQf//A3FFDTtBoOnJgAAgBCAFELaAgIAADDsLIAAoAggiASABLwHsEUH9/wNxOwHsEQw6CyAEIAUQgICAgAAgAUH//wNxRQ05QaDpyYAAIAQgBRC2gICAAAw5CyACQiA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoIAJBqChqQcinyIAAQQIQmoCAgABB//8DcQ0PIAJBqChqQYy1yoAAIARBAWoQj4OAgABB//8DcQ0PIAJBqChqQcqnyIAAQQEQmoCAgABB//8DcQ0PIAJBqChqQYy1yoAAIAVBAWoQj4OAgABB//8DcQ0PIAJBqChqQcunyIAAQQEQmoCAgABB//8DcQ0PIAAoAgwgACACKAKsKCACKAK0KBCzgoCAACEEDBALAkACQCAELQAAIgFBPkYNACACIAE6ALMMIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkAgAkGoKGogAkGzDGoQkIOAgAAiAUH//wNxDQAgAigCrCghBCACKAK0KCEFDAILIAJBqChqQaDpyYAAQTQQqICAgAAgAi8BwCgNOSACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkGzDGoQkIOAgABB//8DcUUNACACQZAoahCpgICAAAw6CyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA05IAIoAsgoIQUgAigCxCghBAwBCwJAIAdFDQBBACEIAkACQAJAAkACQAJAIAUvAQAiAQ4FAwABBAIEC0EBIQEMAgtBAiEBDAELQQMhAUEBIQgLAkAgB0ECTQ0AICkgCi8AADsAACACIAs7AagMIAJBqgxqIAtBEHY6AAAgKUECaiAKQQJqLQAAOgAAIAJB7QA6AKwMIAIgUjoAqwwgAiAHNgKkDCACIAU2AqAMIAJBATYCnAwgAiAENgKYDCACQZgMahCRg4CAAAw8CyAHQQJGIAhxRQ0BQQVBAyAFLwECQQJGGyEBDAELICggCi8AADsAACACIAs7AZAMIAJBkgxqIAtBEHY6AAAgKEECaiAKQQJqLQAAOgAAIAJB7QA6AJQMIAIgUjoAkwwgAiAHNgKMDCACIAU2AogMIAJBATYChAwgAiAENgKADCACQYAMahCRg4CAAAw6CyAAIAEQsoKAgAAMOQsgACgCCCIBIAEvAewRQf3/A3E7AewRDDgLIAQgBRCAgICAACABQf//A3FFDTdBoOnJgAAgBCAFELaAgIAADDcLIAIgCzsB4AsgAkHiC2ogC0EQdjoAACACQQA2AuQLIAIgBzYC3AsgAiAFNgLYCwNAIAJB6AtqIAJB2AtqENeAgIAAIAItAPwLRQ03IAIoAugLIgRBAUYNACAAKAIIKAIYIQECQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAEDh8AIAECAwQFBgcICQoLDA0ODxAREhMUFRcWGBkbGh0cAAsgAUIANwOYASABQbABakEANgIAIAFBqAFqQgA3AwAgAUGgAWpCADcDAAwdCyABIAEvAbABQQFyOwGwAQwcCyABIAEvAbABQfr/A3E7AbABDBsLIAEgAS8BsAFBAnI7AbABDBoLIAEgAS8BsAFB/f8DcTsBsAEMGQsgASABLwGwAUEEcjsBsAEMGAsgASACLQDsC0EHcUEIdCABLwGwAUH/8QNxcjsBsAEMFwsgAUECOgCsASABIAIvAewLIgQ6AKgBIAEgBEEIdjoAqQEgASACQe4Lai0AADoAqgEMFgsgAUEBOgCsASABIAItAOwLOgCoAQwVCyABQgA3A6gBDBQLIAEgAS8BsAFBgAFyOwGwAQwTCyABIAEvAbABQf/+A3E7AbABDBILIAEgAS8BsAFBCHI7AbABDBELIAEgAS8BsAFB9/8DcTsBsAEMEAsgASABLwGwAUEQcjsBsAEMDwsgASABLwGwAUHv/wNxOwGwAQwOCyABIAEvAbABQSByOwGwAQwNCyABIAEvAbABQd//A3E7AbABDAwLIAEgAS8BsAFBwAByOwGwAQwLCyABIAEvAbABQb//A3E7AbABDAoLIAFBAjoAnAEgASACLwHsCyIEOgCYASABIARBCHY6AJkBIAEgAkHuC2otAAA6AJoBDAkLIAFBAjoApAEgASACLwHsCyIEOgCgASABIARBCHY6AKEBIAEgAkHuC2otAAA6AKIBDAgLIAFBAToAnAEgASACLQDsCzoAmAEMBwsgAUEBOgCkASABIAItAOwLOgCgAQwGCyABQgA3A5gBDAULIAFCADcDoAEMBAsgAUEBOgCcASABIAItAOwLOgCYAQwDCyABQQE6AKQBIAEgAi0A7As6AKABDAILIAFBAToAnAEgASACLQDsCzoAmAEMAQsgAUEBOgCkASABIAItAOwLOgCgAQsgARCSgYCAABoMAAsLAAsgAiAINgK4DCACIAQ2ArQMIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkACQCACQagoaiACQbQMahCSg4CAACIBQf//A3FFDQAgAkGoKGpBoOnJgABBxQAQqICAgAAgAi8BwCgNNiACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkG0DGoQkoOAgABB//8DcUUNACACQZAoahCpgICAAAw3CyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA02IAIoAsgoIQUgAigCxCghBAwBCyACKAKsKCEEIAIoArQoIQULIAQgBRCAgICAACABQf//A3FFDTRBoOnJgAAgBCAFELaAgIAADDQLA0AgB0UNNCACQdALaiAFLwEAIgEgCEUQ0oKAgAACQAJAIAItANILRQ0AIAIgAi8B0As7AdQLIAAgAkHUC2oQjoKAgAAiBEH//wNxDTkMAQsgAiABOwHWCyACQdYLahDTgoCAAAsgBUECaiEFIAdBf2ohBwwACwsgBCAFEICAgIAAIAFB//8DcUUNMkGg6cmAACAEIAUQtoCAgAAMMgsCQAJAAkAgBS8BACIBDgQAAgIBAgsgABCugoCAAAwzCyAAELGCgIAADDILIAIgAToAjwsgAkKAEDcCsCggAkGwv8eAADYCqCggAiACQZAYajYCrCgCQAJAIAJBqChqIAJBjwtqEJODgIAAIgFB//8DcUUNACACQagoakGg6cmAAEErEKiAgIAAIAIvAcAoDTMgAkGQKGpBEGogAkGoKGpBEGopAgA3AwAgAkGQKGpBCGogAkGoKGpBCGopAgA3AwAgAiACKQKoKDcDkCgCQCAMIAJBjwtqEJODgIAAQf//A3FFDQAgAkGQKGoQqYCAgAAMNAsgAkHEKGogAkGQKGoQqoCAgAAgAkGQKGoQqYCAgAAgAi8BzCgNMyACKALIKCEFIAIoAsQoIQQMAQsgAigCrCghBCACKAK0KCEFCyAEIAUQgICAgAAgAUH//wNxRQ0xQaDpyYAAIAQgBRC2gICAAAwxCyAEIAUQgICAgAAgAUH//wNxRQ0wQaDpyYAAIAQgBRC2gICAAAwwCyAEIAUQgICAgAAgAUH//wNxRQ0vQaDpyYAAIAQgBRC2gICAAAwvC0EBIQECQAJAAkAgBw4CAQACCyAFLwEAIQELIAAoAggiBCAEKAIYIgQvAcoBQQFqQf//A3EgAUH//wNxaiIBQf//AyABQf//A0kbIAQvAcgBQQFqQf//A3EQ44GAgAAMLwsgJCAKLwAAOwAAIAIgCzsB5AogAkHmCmogC0EQdjoAACAkQQJqIApBAmotAAA6AAAgAkHlADoA6AogAiBSOgDnCiACIAc2AuAKIAIgBTYC3AogAkEANgLYCiACIAQ2AtQKIAJCgBA3ArAoIAJBsL/HgAA2AqgoIAIgAkGQGGo2AqwoAkACQCACQagoaiACQdQKahCUg4CAACIBQf//A3FFDQAgAkGoKGpBoOnJgABBKRCogICAACACLwHAKA0wIAJBkChqQRBqIAJBqChqQRBqKQIANwMAIAJBkChqQQhqIAJBqChqQQhqKQIANwMAIAIgAikCqCg3A5AoAkAgDCACQdQKahCUg4CAAEH//wNxRQ0AIAJBkChqEKmAgIAADDELIAJBxChqIAJBkChqEKqAgIAAIAJBkChqEKmAgIAAIAIvAcwoDTAgAigCyCghBSACKALEKCEEDAELIAIoAqwoIQQgAigCtCghBQsgBCAFEICAgIAAIAFB//8DcUUNLkGg6cmAACAEIAUQtoCAgAAMLgsgBCAFEICAgIAAIAFB//8DcUUNLUGg6cmAACAEIAUQtoCAgAAMLQtBASEBAkACQAJAIAcOAgEAAgsgBS8BACEBCyAAKAIIIgQgASAEKAIYLwHIAUEBakH//wNxEOOBgIAADC0LICMgCi8AADsAACACIAs7AcQKIAJBxgpqIAtBEHY6AAAgI0ECaiAKQQJqLQAAOgAAIAJB5AA6AMgKIAIgUjoAxwogAiAHNgLACiACIAU2ArwKIAJBADYCuAogAiAENgK0CiACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAAkAgAkGoKGogAkG0CmoQlYOAgAAiAUH//wNxRQ0AIAJBqChqQaDpyYAAQSkQqICAgAAgAi8BwCgNLiACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkG0CmoQlYOAgABB//8DcUUNACACQZAoahCpgICAAAwvCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA0uIAIoAsgoIQUgAigCxCghBAwBCyACKAKsKCEEIAIoArQoIQULIAQgBRCAgICAACABQf//A3FFDSxBoOnJgAAgBCAFELaAgIAADCwLIAEtAAQNKyAiIAovAAA7AAAgAiALOwGsCiACQa4KaiALQRB2OgAAICJBAmogCkECai0AADoAACACQeMAOgCwCiACIFI6AK8KIAIgBzYCqAogAiAFNgKkCiACIAg2AqAKIAIgBDYCnAogAkKAEDcCsCggAkGwv8eAADYCqCggAiACQZAYajYCrCgCQAJAIAJBqChqIAJBnApqEJaDgIAAIgFB//8DcQ0AIAIoAqwoIQQgAigCtCghBQwBCyACQagoakGg6cmAAEE3EKiAgIAAIAIvAcAoDSwgAkGQKGpBEGogAkGoKGpBEGopAgA3AwAgAkGQKGpBCGogAkGoKGpBCGopAgA3AwAgAiACKQKoKDcDkCgCQCAMIAJBnApq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A3FFDRVBoOnJgAAgBCAFELaAgIAADBULQQEhAQJAAkACQCAHDgIBAAILIAUvAQAhAQsgACgCCCABEPOBgIAADBULIBggCi8AADsAACACIAs7AfQHIAJB9gdqIAtBEHY6AAAgGEECaiAKQQJqLQAAOgAAIAJBzQA6APgHIAIgUjoA9wcgAiAHNgLwByACIAU2AuwHIAJBADYC6AcgAiAENgLkByACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAAkAgAkGoKGogAkHkB2oQoIOAgAAiAUH//wNxRQ0AIAJBqChqQaDpyYAAQSgQqICAgAAgAi8BwCgNFiACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkHkB2oQoIOAgABB//8DcUUNACACQZAoahCpgICAAAwXCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA0WIAIoAsgoIQUgAigCxCghBAwBCyACKAKsKCEEIAIoArQoIQULIAQgBRCAgICAACABQf//A3FFDRRBoOnJgAAgBCAFELaAgIAADBQLIAQgBRCAgICAACABQf//A3FFDRNBoOnJgAAgBCAFELaAgIAADBMLQQEhAQJAAkACQCAHDgIBAAILIAUvAQAhAQsgACgCCCABEKmCgIAADBMLIBcgCi8AADsAACACIAs7AdQHIAJB1gdqIAtBEHY6AAAgF0ECaiAKQQJqLQAAOgAAIAJBzAA6ANgHIAIgUjoA1wcgAiAHNgLQByACIAU2AswHIAJBADYCyAcgAiAENgLEByACQoAQNwKwKCACQbC/x4AANgKoKCACIAJBkBhqNgKsKAJAAkAgAkGoKGogAkHEB2oQoYOAgAAiAUH//wNxRQ0AIAJBqChqQaDpyYAAQSgQqICAgAAgAi8BwCgNFCACQZAoakEQaiACQagoakEQaikCADcDACACQZAoakEIaiACQagoakEIaikCADcDACACIAIpAqgoNwOQKAJAIAwgAkHEB2oQoYOAgABB//8DcUUNACACQZAoahCpgICAAAwVCyACQcQoaiACQZAoahCqgICAACACQZAoahCpgICAACACLwHMKA0UIAIoAsgoIQUgAigCxCghBAwBCyACKAKs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gABBAhCagICAACEDCyACQcAAaiSAgICAACADC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABCzg4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBLhCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQs4OAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAACy4BAX8CQCAAQYuYyoAAQSsQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILPQEBfwJAIABBwvbJgABBwgAQmoCAgAAiAkH//wNxDQAgACABKAIAIAEoAgRBjLXKgAAQoYSAgAAhAgsgAgs9AQF/AkAgAEGz98mAAEHCABCagICAACICQf//A3ENACAAIAEoAgAgASgCBEGMtcqAABChhICAACECCyACCz0BAX8CQCAAQaH4yYAAQcIAEJqAgIAAIgJB//8DcQ0AIAAgASgCACABKAIEQYy1yoAAEKGEgIAAIQILIAILPQEBfwJAIABB4/jJgABBwgAQmoCAgAAiAkH//wNxDQAgACABKAIAIAEoAgRBjLXKgAAQoYSAgAAhAgsgAgs9AQF/AkAgAEHW+cmAAEHCABCagICAACICQf//A3ENACAAIAEoAgAgASgCBEGMtcqAABChhICAACECCyACCz0BAX8CQCAAQZr7yYAAQcIAEJqAgIAAIgJB//8DcQ0AIAAgASgCACABKAIEQYy1yoAAEKGEgIAAIQILIAILPQEBfwJAIABBgfzJgABBwgAQmoCAgAAiAkH//wNxDQAgACABKAIAIAEoAgRBjLXKgAAQoYSAgAAhAgsgAgs9AQF/AkAgAEH3/MmAAEHCABCagICAACICQf//A3ENACAAIAEoAgAgASgCBEGMtcqAABChhICAACECCyACCz0BAX8CQCAAQeX9yYAAQcIAEJqAgIAAIgJB//8DcQ0AIAAgASgCACABKAIEQYy1yoAAEKGEgIAAIQILIAILPQEBfwJAIABB1f7JgABBwgAQmoCAgAAiAkH//wNxDQAgACABKAIAIAEoAgRBjLXKgAAQoYSAgAAhAgsgAgs9AQF/AkAgAEHL/8mAAEHCABCagICAACICQf//A3ENACAAIAEoAgAgASgCBEGMtcqAABChhICAACECCyACCz0BAX8CQCAAQcCAyoAAQcIAEJqAgIAAIgJB//8DcQ0AIAAgASgCACABKAIEQYy1yoAAEKGEgIAAIQILIAILPQEBfwJAIABBuIHKgABBwgAQmoCAgAAiAkH//wNxDQAgACABKAIAIAEoAgRBjLXKgAAQoYSAgAAhAgsgAgs9AQF/AkAgAEGggsqAAEHCABCagICAACICQf//A3ENACAAIAEoAgAgASgCBEGMtcqAABChhICAACECCyACCz0BAX8CQCAAQZGDyoAAQcIAEJqAgIAAIgJB//8DcQ0AIAAgASgCACABKAIEQYy1yoAAEKGEgIAAIQILIAILPQEBfwJAIABBrYTKgABBwgAQmoCAgAAiAkH//wNxDQAgACABKAIAIAEoAgRBjLXKgAAQoYSAgAAhAgsgAgs9AQF/AkAgAEGVhcqAAEHCABCagICAACICQf//A3ENACAAIAEoAgAgASgCBEGMtcqAABChhICAACECCyACCz0BAX8CQCAAQayGyoAAQcIAEJqAgIAAIgJB//8DcQ0AIAAgASgCACABKAIEQYy1yoAAEKGEgIAAIQILIAILLgEBfwJAIABB14XKgABBLBCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgvoCwECfwJAIAFB//8DcSIDQQJHDQAgAkEBcUUNACAAQQE6AAIgAEGCgAI7AQAPCwJAIANBBEcNACACQQFxRQ0AIABBAToAAiAAQYSAAjsBAA8LAkAgAUH//wNxIgNBDEcNACACQQFxRQ0AIABBAToAAiAAQYyAAjsBAA8LAkAgA0EURw0AIAJBAXFFDQAgAEEBOgACIABBlIACOwEADwsCQCABQf//A3EiA0EBRw0AIAJBAXENACAAQQE6AAIgAEEBOwEADwsCQCADQQNHDQAgAkEBcQ0AIABBAToAAiAAQQM7AQAPCwJAIAFB//8DcSIDQQRGIAJBAXMiBHFBAUcNACAAQQE6AAIgAEGEgH5BBCACQQFxGzsBAA8LAkAgA0EFRw0AIAJBAXENACAAQQE6AAIgAEEFOwEADwsCQCABQf//A3EiA0EGRw0AIAJBAXENACAAQQE6AAIgAEEGOwEADwsCQCADQQdHDQAgAkEBcQ0AIABBAToAAiAAQQc7AQAPCwJAIAFB//8DcSIDQQhHDQAgAkEBcQ0AIABBAToAAiAAQQg7AQAPCwJAIANBCUcNACACQQFxDQAgAEEBOgACIABBCTsBAA8LAkAgAUH//wNxIgNBDEYgBHFBAUcNACAAQQE6AAIgAEGMgH5BDCACQQFxGzsBAA8LAkAgA0EZRw0AIAJBAXENACAAQQE6AAIgAEEZOwEADwsCQCABQf//A3EiA0EoRw0AIAJBAXENACAAQQE6AAIgAEEoOwEADwsCQCADQS1HDQAgAkEBcQ0AIABBAToAAiAAQS07AQAPCwJAIAFB//8DcSIDQS9HDQAgAkEBcQ0AIABBAToAAiAAQS87AQAPCwJAIANBwgBHDQAgAkEBcQ0AIABBAToAAiAAQcIAOwEADwsCQCABQf//A3EiA0HFAEcNACACQQFxDQAgAEEBOgACIABBxQA7AQAPCwJAIANB6AdHDQAgAkEBcQ0AIABBAToAAiAAQegHOwEADwsCQCABQf//A3EiA0HqB0cNACACQQFxDQAgAEEBOgACIABB6gc7AQAPCwJAIANB6wdHDQAgAkEBcQ0AIABBAToAAiAAQesHOwEADwsCQCABQf//A3EiA0HsB0cNACACQQFxDQAgAEEBOgACIABB7Ac7AQAPCwJAIANB7QdHDQAgAkEBcQ0AIABBAToAAiAAQe0HOwEADwsCQCABQf//A3EiA0HuB0cNACACQQFxDQAgAEEBOgACIABB7gc7AQAPCwJAIANB7wdHDQAgAkEBcQ0AIABBAToAAiAAQe8HOwEADwsCQCABQf//A3EiA0H3B0cNACACQQFxDQAgAEEBOgACIABB9wc7AQAPCwJAIANB+AdHDQAgAkEBcQ0AIABBAToAAiAAQfgHOwEADwsCQCABQf//A3EiA0GLCEcNACACQQFxDQAgAEEBOgACIABBiwg7AQAPCwJAIANBjAhHDQAgAkEBcQ0AIABBAToAAiAAQYwIOwEADwsCQCABQf//A3EiA0GPCEcNACACQQFxDQAgAEEBOgACIABBjwg7AQAPCwJAIANBlQhHDQAgAkEBcQ0AIABBAToAAiAAQZUIOwEADwsCQCABQf//A3EiA0GXCEcNACACQQFxDQAgAEEBOgACIABBlwg7AQAPCwJAIANBmAhHDQAgAkEBcQ0AIABBAToAAiAAQZgIOwEADwsCQCABQf//A3EiA0GZCEcNACACQQFxDQAgAEEBOgACIABBmQg7AQAPCwJAIANB1A9HDQAgAkEBcQ0AIABBAToAAiAAQdQPOwEADwsCQCABQf//A3EiA0HqD0cNACACQQFxDQAgAEEBOgACIABB6g87AQAPCwJAIANB6w9HDQAgAkEBcQ0AIABBAToAAiAAQesPOwEADwsCQCABQf//A3EiAUHvD0cNACACQQFxDQAgAEEBOgACIABB7w87AQAPCwJAIAFBgBBHDQAgAkEBcQ0AIABBAToAAiAAQYAQOwEADwsgAEEANgEAC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABC0g4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBJxCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQtIOAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAAC+kBAgZ/AX5BACECA38CQAJAIAIgAU8iAw0AAkAgACACaiIELAAAIgVBAEgNAEEBIQUMAgsgBUH/AXFBzKfIgABqLQAAIgZB8QFGDQAgAiAGQQdxIgVqIAFLDQAgBEEBai0AACIHQoDBgoSJECAGQQF2QfgAca0iCIinQbABcUkNACAHQr///vz7ESAIiKdB/wFxSw0AAkACQCAFQX5qDgMDAAEDCyAEQQJqLAAAQb9/Sg0BQQMhBQwCCyAEQQJqLAAAQb9/Sg0AIARBA2osAABBQE4NAEEEIQUMAQsgAw8LIAUgAmohAgwACwsTACAAQbaYyoAAQcYAEJqAgIAACzQBAX8CQCAAQdSZyoAAQS0QmoCAgAAiAkH//wNxDQAgAEGMtcqAACABEKyEgIAAIQILIAILEgAgAEGjmcqAAEExEJqAgIAAC1ABA38CQAJAIAAgAkcNAEEBIQMMAQsDQCABRSEDIAFFDQEgAUF/aiEBIAItAAAhBCAALQAAIQUgAkEBaiECIABBAWohACAFIARGDQALCyADCzwBAX8CQCAAQfyYyoAAQScQmoCAgAAiAkH//wNxDQAgACABKAIAIAEoAgRBjLXKgAAQoYSAgAAhAgsgAgvIAgEDfyOAgICAAEHAEGsiASSAgICAACABQoAQNwKgECABQbC/x4AANgKYECABIAE2ApwQAkACQAJAIAFBmBBqIAAQrIOAgAAiAkH//wNxDQAgASgCnBAhACABKAKkECEDDAELIAFBmBBqQaDpyYAAQSsQqICAgAAgAS8BsBANASABQYAQakEQaiABQZgQakEQaikCADcDACABQYAQakEIaiIDIAFBmBBqQQhqKQIANwMAIAEgASkCmBA3A4AQAkAgAyAAEKyDgIAAQf//A3FFDQAgAUGAEGoQqYCAgAAMAgsgAUG0EGogAUGAEGoQqoCAgAAgAUGAEGoQqYCAgAAgAS8BvBANASABKAK4ECEDIAEoArQQIQALIAAgAxCAgICAACACQf//A3FFDQBBoOnJgAAgACADELaAgIAACyABQcAQaiSAgICAAAsuAQF/AkAgAEHj8cmAAEE4EJqAgIAAIgJB//8DcQ0AIAAgARCmhICAACECCyACCy4BAX8CQCAAQavxyYAAQTgQmoCAgAAiAkH//wNxDQAgACABEKaEgIAAIQILIAILLgEBfwJAIABB8/DJgABBOBCagICAACICQf//A3ENACAAIAEQpoSAgAAhAgsgAgvIAgEDfyOAgICAAEHAEGsiASSAgICAACABQoAQNwKgECABQbC/x4AANgKYECABIAE2ApwQAkACQAJAIAFBmBBqIAAQqoOAgAAiAkH//wNxDQAgASgCnBAhACABKAKkECEDDAELIAFBmBBqQaDpyYAAQTQQqICAgAAgAS8BsBANASABQYAQakEQaiABQZgQakEQaikCADcDACABQYAQakEIaiIDIAFBmBBqQQhqKQIANwMAIAEgASkCmBA3A4AQAkAgAyAAEKqDgIAAQf//A3FFDQAgAUGAEGoQqYCAgAAMAgsgAUG0EGogAUGAEGoQqoCAgAAgAUGAEGoQqYCAgAAgAS8BvBANASABKAK4ECEDIAEoArQQIQALIAAgAxCAgICAACACQf//A3FFDQBBoOnJgAAgACADELaAgIAACyABQcAQaiSAgICAAAvIAgEDfyOAgICAAEHAEGsiASSAgICAACABQoAQNwKgECABQbC/x4AANgKYECABIAE2ApwQAkACQAJAIAFBmBBqIAAQqYOAgAAiAkH//wNxDQAgASgCnBAhACABKAKkECEDDAELIAFBmBBqQaDpyYAAQTQQqICAgAAgAS8BsBANASABQYAQakEQaiABQZgQakEQaikCADcDACABQYAQakEIaiIDIAFBmBBqQQhqKQIANwMAIAEgASkCmBA3A4AQAkAgAyAAEKmDgIAAQf//A3FFDQAgAUGAEGoQqYCAgAAMAgsgAUG0EGogAUGAEGoQqoCAgAAgAUGAEGoQqYCAgAAgAS8BvBANASABKAK4ECEDIAEoArQQIQALIAAgAxCAgICAACACQf//A3FFDQBBoOnJgAAgACADELaAgIAACyABQcAQaiSAgICAAAvIAgEDfyOAgICAAEHAEGsiASSAgICAACABQoAQNwKgECABQbC/x4AANgKYECABIAE2ApwQAkACQAJAIAFBmBBqIAAQq4OAgAAiAkH//wNxDQAgASgCnBAhACABKAKkECEDDAELIAFBmBBqQaDpyYAAQTAQqICAgAAgAS8BsBANASABQYAQakEQaiABQZgQakEQaikCADcDACABQYAQakEIaiIDIAFBmBBqQQhqKQIANwMAIAEgASkCmBA3A4AQAkAgAyAAEKuDgIAAQf//A3FFDQAgAUGAEGoQqYCAgAAMAgsgAUG0EGogAUGAEGoQqoCAgAAgAUGAEGoQqYCAgAAgAS8BvBANASABKAK4ECEDIAEoArQQIQALIAAgAxCAgICAACACQf//A3FFDQBBoOnJgAAgACADELaAgIAACyABQcAQaiSAgICAAAsuAQF/AkAgAEGH78mAAEEwEJqAgIAAIgJB//8DcQ0AIAAgARCmhICAACECCyACCy4BAX8CQCAAQd3uyYAAQSoQmoCAgAAiAkH//wNxDQAgACABEKaEgIAAIQILIAILLgEBfwJAIABBse7JgABBLBCagICAACICQf//A3ENACAAIAEQpoSAgAAhAgsgAgsuAQF/AkAgAEGJ7smAAEEoEJqAgIAAIgJB//8DcQ0AIAAgARCmhICAACECCyACCy4BAX8CQCAAQZfsyYAAQSIQmoCAgAAiAkH//wNxDQAgACABEKaEgIAAIQILIAILyAIBA38jgICAgABBwBBrIgEkgICAgAAgAUKAEDcCoBAgAUGwv8eAADYCmBAgASABNgKcEAJAAkACQCABQZgQaiAAEKeDgIAAIgJB//8DcQ0AIAEoApwQIQAgASgCpBAhAwwBCyABQZgQakGg6cmAAEE0EKiAgIAAIAEvAbAQDQEgAUGAEGpBEGogAUGYEGpBEGopAgA3AwAgAUGAEGpBCGoiAyABQZgQakEIaikCADcDACABIAEpApgQNwOAEAJAIAMgABCng4CAAEH//wNxRQ0AIAFBgBBqEKmAgIAADAILIAFBtBBqIAFBgBBqEKqAgIAAIAFBgBBqEKmAgIAAIAEvAbwQDQEgASgCuBAhAyABKAK0ECEACyAAIAMQgICAgAAgAkH//wNxRQ0AQaDpyYAAIAAgAxC2gICAAAsgAUHAEGokgICAgAALyAIBA38jgICAgABBwBBrIgEkgICAgAAgAUKAEDcCoBAgAUGwv8eAADYCmBAgASABNgKcEAJAAkACQCABQZgQaiAAEKiDgIAAIgJB//8DcQ0AIAEoApwQIQAgASgCpBAhAwwBCyABQZgQakGg6cmAAEEuEKiAgIAAIAEvAbAQDQEgAUGAEGpBEGogAUGYEGpBEGopAgA3AwAgAUGAEGpBCGoiAyABQZgQakEIaikCADcDACABIAEpApgQNwOAEAJAIAMgABCog4CAAEH//wNxRQ0AIAFBgBBqEKmAgIAADAILIAFBtBBqIAFBgBBqEKqAgIAAIAFBgBBqEKmAgIAAIAEvAbwQDQEgASgCuBAhAyABKAK0ECEACyAAIAMQgICAgAAgAkH//wNxRQ0AQaDpyYAAIAAgAxC2gICAAAsgAUHAEGokgICAgAALLgEBfwJAIABBxvDJgABBLRCagICAACICQf//A3ENACAAIAEQpoSAgAAhAgsgAgs9AQF/AkAgAEHJl8qAAEHCABCagICAACICQf//A3ENACAAIAEoAgAgASgCBEGMtcqAABChhICAACECCyACCy4BAX8CQCAAQaOXyoAAQSYQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILPQEBfwJAIABB4ZbKgABBwgAQmoCAgAAiAkH//wNxDQAgACABKAIAIAEoAgRBjLXKgAAQoYSAgAAhAgsgAgsuAQF/AkAgAEG7lsqAAEEmEJqAgIAAIgJB//8DcQ0AIAAgARCuhICAACECCyACCz0BAX8CQCAAQfmVyoAAQcIAEJqAgIAAIgJB//8DcQ0AIAAgASgCACABKAIEQYy1yoAAEKGEgIAAIQILIAILLgEBfwJAIABBy5XKgABBLhCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgs9AQF/AkAgAEGJlcqAAEHCABCagICAACICQf//A3ENACAAIAEoAgAgASgCBEGMtcqAABChhICAACECCyACC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABCvg4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBLxCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQr4OAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAAC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABC9g4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBMBCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQvYOAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAACy4BAX8CQCAAQa2UyoAAQS8QmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILLgEBfwJAIABBh5TKgABBJhCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgsuAQF/AkAgAEHYk8qAAEEvEJqAgIAAIgJB//8DcQ0AIAAgARCuhICAACECCyACC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABC4g4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBNRCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQuIOAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAACy4BAX8CQCAAQfGSyoAAQTQQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILyAIBA38jgICAgABBwBBrIgEkgICAgAAgAUKAEDcCoBAgAUGwv8eAADYCmBAgASABNgKcEAJAAkACQCABQZgQaiAAELyDgIAAIgJB//8DcQ0AIAEoApwQIQAgASgCpBAhAwwBCyABQZgQakGg6cmAAEE2EKiAgIAAIAEvAbAQDQEgAUGAEGpBEGogAUGYEGpBEGopAgA3AwAgAUGAEGpBCGoiAyABQZgQakEIaikCADcDACABIAEpApgQNwOAEAJAIAMgABC8g4CAAEH//wNxRQ0AIAFBgBBqEKmAgIAADAILIAFBtBBqIAFBgBBqEKqAgIAAIAFBgBBqEKmAgIAAIAEvAbwQDQEgASgCuBAhAyABKAK0ECEACyAAIAMQgICAgAAgAkH//wNxRQ0AQaDpyYAAIAAgAxC2gICAAAsgAUHAEGokgICAgAALLwEBfwJAIABBr5LKgABBwgAQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILLgEBfwJAIABB/ZHKgABBMhCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgsuAQF/AkAgAEG/kcqAAEE+EJqAgIAAIgJB//8DcQ0AIAAgARCuhICAACECCyACCy4BAX8CQCAAQZqPyoAAQToQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILLgEBfwJAIABB1I/KgABBOhCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgsuAQF/AkAgAEGOkMqAAEE6EJqAgIAAIgJB//8DcQ0AIAAgARCuhICAACECCyACCy4BAX8CQCAAQciQyoAAQToQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILyQIBA38jgICAgABBwBBrIgEkgICAgAAgAUKAEDcCoBAgAUGwv8eAADYCmBAgASABNgKcEAJAAkACQCABQZgQaiAAELuDgIAAIgJB//8DcQ0AIAEoApwQIQAgASgCpBAhAwwBCyABQZgQakGg6cmAAEHAABCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQu4OAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAAC8kCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABC5g4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBxQAQqICAgAAgAS8BsBANASABQYAQakEQaiABQZgQakEQaikCADcDACABQYAQakEIaiIDIAFBmBBqQQhqKQIANwMAIAEgASkCmBA3A4AQAkAgAyAAELmDgIAAQf//A3FFDQAgAUGAEGoQqYCAgAAMAgsgAUG0EGogAUGAEGoQqoCAgAAgAUGAEGoQqYCAgAAgAS8BvBANASABKAK4ECEDIAEoArQQIQALIAAgAxCAgICAACACQf//A3FFDQBBoOnJgAAgACADELaAgIAACyABQcAQaiSAgICAAAs3AQF/AkAgAEHAjsqAAEEqEJqAgIAAIgJB//8DcQ0AIABBjLXKgAAgAS8BABCPg4CAACECCyACC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABC6g4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBMxCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQuoOAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAACy4BAX8CQCAAQZaOyoAAQSoQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILNwEBfwJAIABB9YzKgABBLRCagICAACICQf//A3ENACAAQYy1yoAAIAEvAQAQj4OAgAAhAgsgAgsuAQF/AkAgAEHLjMqAAEEqEJqAgIAAIgJB//8DcQ0AIAAgARCuhICAACECCyACC8kCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABC3g4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBxQAQqICAgAAgAS8BsBANASABQYAQakEQaiABQZgQakEQaikCADcDACABQYAQakEIaiIDIAFBmBBqQQhqKQIANwMAIAEgASkCmBA3A4AQ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gAAhAgsgAgsuAQF/AkAgAEH1+smAAEElEJqAgIAAIgJB//8DcQ0AIAAgARCuhICAACECCyACC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABCxg4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBMBCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQsYOAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAAC8gCAQN/I4CAgIAAQcAQayIBJICAgIAAIAFCgBA3AqAQIAFBsL/HgAA2ApgQIAEgATYCnBACQAJAAkAgAUGYEGogABCwg4CAACICQf//A3ENACABKAKcECEAIAEoAqQQIQMMAQsgAUGYEGpBoOnJgABBMxCogICAACABLwGwEA0BIAFBgBBqQRBqIAFBmBBqQRBqKQIANwMAIAFBgBBqQQhqIgMgAUGYEGpBCGopAgA3AwAgASABKQKYEDcDgBACQCADIAAQsIOAgABB//8DcUUNACABQYAQahCpgICAAAwCCyABQbQQaiABQYAQahCqgICAACABQYAQahCpgICAACABLwG8EA0BIAEoArgQIQMgASgCtBAhAAsgACADEICAgIAAIAJB//8DcUUNAEGg6cmAACAAIAMQtoCAgAALIAFBwBBqJICAgIAACy4BAX8CQCAAQaX5yYAAQTEQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILyAIBA38jgICAgABBwBBrIgEkgICAgAAgAUKAEDcCoBAgAUGwv8eAADYCmBAgASABNgKcEAJAAkACQCABQZgQaiAAEK6DgIAAIgJB//8DcQ0AIAEoApwQIQAgASgCpBAhAwwBCyABQZgQakGg6cmAAEExEKiAgIAAIAEvAbAQDQEgAUGAEGpBEGogAUGYEGpBEGopAgA3AwAgAUGAEGpBCGoiAyABQZgQakEIaikCADcDACABIAEpApgQNwOAEAJAIAMgABCug4CAAEH//wNxRQ0AIAFBgBBqEKmAgIAADAILIAFBtBBqIAFBgBBqEKqAgIAAIAFBgBBqEKmAgIAAIAEvAbwQDQEgASgCuBAhAyABKAK0ECEACyAAIAMQgICAgAAgAkH//wNxRQ0AQaDpyYAAIAAgAxC2gICAAAsgAUHAEGokgICAgAALLgEBfwJAIABBhPfJgABBLxCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgu7AQECfwJAIABB6OvJgABBLxCagICAACICQf//A3ENACABKAIEIQMgASgCACEBIABB7OrAgABBAhCagICAACICQf//A3ENAANAAkACQCADRQ0AIAAgAS0AAEEKQQBBjLXKgAAQ5oOAgAAiAkH//wNxDQMgA0EBRg0BIABB8+rAgABBAhCagICAACICQf//A3FFDQEMAwsgAEGjksCAAEECEJqAgIAADwsgAUEBaiEBIANBf2ohAwwACwsgAgsuAQF/AkAgAEG57MmAAEErEJqAgIAAIgJB//8DcQ0AIAAgARCmhICAACECCyACCy4BAX8CQCAAQbfvyYAAQTEQmoCAgAAiAkH//wNxDQAgACABEKaEgIAAIQILIAILLgEBfwJAIABB6O/JgABBMRCagICAACICQf//A3ENACAAIAEQpoSAgAAhAgsgAgsuAQF/AkAgAEGZ8MmAAEEtEJqAgIAAIgJB//8DcQ0AIAAgARCmhICAACECCyACCy4BAX8CQCAAQZvzyYAAQSgQmoCAgAAiAkH//wNxDQAgACABEKaEgIAAIQILIAILNwEBfwJAIABBw/PJgABBMxCagICAACICQf//A3ENACAAQYy1yoAAIAEtAAAQqISAgAAhAgsgAgsuAQF/AkAgAEGU9smAAEEuEJqAgIAAIgJB//8DcQ0AIAAgARCuhICAACECCyACCy4BAX8CQCAAQfX3yYAAQSwQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILLgEBfwJAIABBmPrJgABBMBCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgsuAQF/AkAgAEHI+smAAEEtEJqAgIAAIgJB//8DcQ0AIAAgARCuhICAACECCyACCy4BAX8CQCAAQZf/yYAAQTQQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILLgEBfwJAIABB7obKgABBKxCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgs3AQF/AkAgAEGZh8qAAEElEJqAgIAAIgJB//8DcQ0AIABBjLXKgAAgAS8BABCPg4CAACECCyACCy4BAX8CQCAAQb6HyoAAQS0QmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILLgEBfwJAIABB34jKgABBNxCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgs9AQF/AkAgAEGKisqAAEHCABCagICAACICQf//A3ENACAAIAEoAgAgASgCBEGMtcqAABChhICAACECCyACCy4BAX8CQCAAQaKNyoAAQTIQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILLwEBfwJAIABB1I3KgABBwgAQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILLgEBfwJAIABB6o7KgABBMBCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgsuAQF/AkAgAEGCkcqAAEE9EJqAgIAAIgJB//8DcQ0AIAAgARCuhICAACECCyACCy4BAX8CQCAAQaWTyoAAQTMQmoCAgAAiAkH//wNxDQAgACABEK6EgIAAIQILIAILLgEBfwJAIABB3JTKgABBLRCagICAACICQf//A3ENACAAIAEQroSAgAAhAgsgAgvdCQMCfwJ+CH8jgICAgABBIGsiAySAgICAAAJAIABFDQAgAEHAG2ohBEEAKQPotceAACIFQoCAgIDwH4MhBiAFpyEHIABB4ixqIQggAEHSG2ohCQNAIAJFDQEgAS0AACEKAkACQAJAAkACQCAALQDWLEEPcQ0AIApB+rLHgABqLQAAIQsgAC0A5CwiDEUNASAILQAAQRZ0IAAvAeAsQQZ0ciAKQT9xciENDAILIAQgChC5goCAACENDAILQf8BIAtBD3F2IApxIQ0LIAAgDTsB4CwgCCANQYCA/ABxQRB2OgAAIAAgDCALQQ9xIg5qQf8BcUH6tMeAAGotAAAiCzoA5CwCQAJAAkACQAJAAkACQAJAIAtFDQAgC0EMRg0BIANBADoABiADQQA7AQQMCQsg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IgU2AgAgAUGQA2pBEGogCCkDADcDACABQZADakEIaiAMKQMANwMAIAEgASkDuAM3A5ADIAFB4ANqQQhqIAEoApQDIAFBnANqIAVBAXEbIgVBCGooAgA2AgAgASAFKQIANwPgAyABQeADaiEIDAILIAFBkANqQRhqIAUoAgAiDTYCACABQZADakEQaiAIKQMANwMAIAFBkANqQQhqIAwpAwA3AwAgASABKQO4AyIJNwOQAyABQeADakEIaiAJpyABQZADaiANQQFxGyIIQQhqKAIANgIAIAEgCCkCADcD4AMgASABLwHKAzsBkAMgASABKAK8A0EGaiABQZADaiAFLQAAQQFxGy8BADsB5gMgAUHgA2ohCAwBCyABQZADakEYaiAFKAIAIg02AgAgAUGQA2pBEGogCCkDADcDACABQZADakEIaiAMKQMANwMAIAEgASkDuAM3A5ADIAFB4ANqQQhqIAEoApQDIAFBnANqIA1BAXEbIghBCGooAgA2AgAgASAIKQIANwPgAyABIAEvAb4DOwGQAyABIAEoArgDQQZqIAFBkANqIAUtAABBAXEbLwEAOwHmAyABQeADaiEICyAAQeQaaiEFIAFB+AFqQQhqIAhBCGooAgA2AgAgASAIKQIANwP4ASABQbgDakEYaiIIIARBGGopAgA3AwAgAUG4A2pBEGoiDCAEQRBqKQIANwMAIAFBuANqQQhqIg0gBEEIaikCADcDACABIAQpAgA3A7gDAkACQAJAAkACQCABQbgDaiAHEMCDgIAAQQNxDgQAAQIDAAsgAUGQA2pBGGogCCgCACIENgIAIAFBkANqQRBqIAwpAwA3AwAgAUGQA2pBCGogDSkDADcDACABIAEpA7gDNwOQAyABQeADakEIaiABKAKUAyABQZwDaiAEQQFxGyIEQQhqKAIANgIAIAEgBCkCADcD4AMgAUHgA2ohBAwDCyABQZADakEYaiAIKAIAIgQ2AgAgAUGQA2pBEGogDCkDADcDACABQZADakEIaiANKQMANwMAIAEgASkDuAMiCTcDkAMgAUHgA2pBCGogCacgAUGQA2ogBEEBcRsiBEEIaigCADYCACABIAQpAgA3A+ADIAFB4ANqIQQMAgsgAUGQA2pBGGogCCgCACIENgIAIAFBkANqQRBqIAwpAwA3AwAgAUGQA2pBCGogDSkDADcD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AkEIaiIHIABBCGoiCCkCADcDACACIAApAgA3AwAgAkHgAGpBGGoiCSAEKAIAIgo2AgAgAkHgAGpBEGoiCyAGKQIANwMAIAJB4ABqQQhqIgwgCCkCADcDACACIAApAgAiDTcDYEEBIQQgAkEgakEIaiANpyACQeAAaiAKQQFxGyIGQQhqKAIANgIAIAIgBikCADcDICACQTBqIAFBAiACQSBqEM2BgIAAIAIvATQhCCACKAIwIQYgCSADKAIAIgM2AgAgCyAFKQMANwMAIAwgBykDADcDACACIAIpAwA3A2AgAkHAAGpBCGogAigCZCACQewAaiADQQFxGyIDQQhqKAIANgIAIAIgAykCADcDQCACQdAAaiABQQIgAkHAAGoQzYGAgAAgAi8BVCEDIAIoAlAhAQJAAkACQAJAIAAtABxFDQACQCAGIAFNIgANACAIQf//A3EgA0H//wNxTw0ECwJAIAYgAUkiAQ0AIAhB//8DcSADQf//A3FLDQQLIAANASAIQf//A3EgA0H//wNxTw0BQQMhBAwDCyAGIAFPDQFBACEEDAILQX5BACAIQf//A3EgA0H//wNxSxtBACABGyEEDAELAkAgBiABTQ0AQQEhBAwBCyAIQf//A3EgA0H//wNxSyEECyACQYABaiSAgICAACAEC5sBAgJ/AX4jgICAgABBEGsiAySAgICAACABKAIEIQQgASgCACEBIAMgAkH/////A0s6AAwCQAJAIAJBgICAgARJDQBCgICAgBAhBQwBCwJAIAJBAnQiAg0AQvz///8PIQUMAQsgASACQQJBACAEKAIAEYCAgIAAgICAgAAiAkWtQiCGIAKthCEFCyAAIAU3AgAgA0EQaiSAgICAAAsSAAJAIAANAEEADwsgAC8BohsLEgACQCAADQBBAA8LIAAvAaAbCxIAAkAgAA0AQQAPCyAALwGMEgsSAAJAIAANAEEADwsgACgCiBILHwACQAJAIAANAEEAIQAMAQsgAC0AthIhAAsgAEEBcQsxAQF/AkAgAA0AQQAPCyAALwG4EiIBQRB0IAFBgP4DcXIgAEG6EmotAAByQf///wdxCzQBAX8CQCAADQBBzJmzBg8LIAAvAbwSIgFBEHQgAUGA/gNxciAAQb4Sai0AAHJB////B3ELhgEBA38jgICAgABBEGsiAiSAgICAAEEBIQMCQCAA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ARCxgICAAEEBcUUNAiAEQTBqIARBCGogARD7g4CAACAELwE0IgJFDQEgACACOwEkDAULIABBADsBJEEkRQ0EIAAgBEEIakEk/AoAAAwECyAEKAIwIgJBAToACCACQQI6AAAgAiAELQAvIgVBH3E6AAEMAQsgBEE4aiACIAUQ8oOAgAACQCAELwE8RQ0AIABBADsBJEEkRQ0DIAAgBEEIakEk/AoAAAwDCyAELwE4IQUgBC0AOiEGIARBwABqIARBCGogARD7g4CAAAJAIAQvAUQiAkUNACAAIAI7ASQMAwsgBCgCQCICIAUgBkEQdHIiBTsBACACQQA6AAggAkECOgAEIAJBAmogBUEQdjoAACACIAQtAC8iBUEfcToABQsgBUEBaiEGQXYhAgJAAkADQCACRQ0BIAJBqrXKgABqIQUgAkEBaiECIAZBH3EiByAFLQAAQR9xRw0ACyAEQQE6AEwgBCAHOgBLIARBywBqIQIMAQtBqOnJgAAhAgsgAi8AACICQYACTw0ACyAAQQA7ASRBJEUNACAAIARBCGpBJPwKAAALIARB0ABqJICAgIAAC90BAQF/I4CAgIAAQcAAayIEJICAgIAAAkBBJEUNACAEQRRqQaiUyYAAQST8CgAACyAEQQhqIAMQ+IOAgAACQAJAIAQoAghFDQAgAEEAOwEkQSRFDQEgAEGolMmAAEEk/AoAAAwBCyAEQThqIARBFGogARD7g4CAAAJAIAQvATwiA0UNACAEQRRqIAEQwoCAgAAgACADOwEkDAELIAQoAjgiA0ECOgAIIANBAjoAACAAQQA7ASQgAyACQR9xOgABQSRFDQAgACAEQRRqQST8CgAACyAEQcAAaiSAgICAAAtYAAJAIAMgAkkNACAAQgA3AgAPCyAEQf8BcSEEAkADQCACIANGDQECQCABIANqLQAAIARHDQAgAEEBOgAEIAAgAzYCAA8LIANBAWohAwwACwsgAEIANwIAC3kCAX8BfiOAgICAAEEQayIDJICAgIAAAkACQEEBDQBCgICAgBAhBAwBCwJAIAINAEL/////DyEEDAELIAEoAgAgAkEAQQAgASgCBCgCABGAgICAAICAgIAAIgJFrUIghiACrYQhBAsgACAENwIAIANBEGokgICAgAALewECfyOAgICAAEEgayIEJICAgIAAIAQgASkCADcDCCAEQRRqIARBCGogAxCIgYCAAAJAIAQvARwiBQ0AIAQoAhQhAQJAIAQoAhgiA0UNACABIAIgA/wKAAALIAAgAzYCBCAAIAE2AgALIAAgBTsBCCAEQSBqJICAgIAAC5oGAgd/A34jgICAgABBoAFrIgIkgICAgAACQCAAKAIEIgMNACAAKAIAIQMLIAEoAhAhBCABKAIMIQUgAS0ACCEGIAEoAgQhByABKAIAIQggAygCACEAIAJBOGpCADcDACACQgA3AzAgAkKsmuLTo9Lw+h83A1AgAkKsmuLTo9Lw+h83A0ggAkKsmuLTo9Lw+h83A0ACQEE4RQ0AIAJB2ABqQfjqyYAAQTj8CgAACyACIAZBAXEiAToAYCACQoGAgIAQNwNYIAIgAToAkAECQAJAIAFFDQAgAiAINgBhIAJChYCAgNAANwNYDAELIAJBMGogCCAAaiAHEJ+EgIAACyACQeAAaiEGIAJBMGogACAFaiAEEJ+EgIAAIAIpA0AhCSACKAJcIQACQAJAAkACQAJAAkAgAigCWCIFQRBLDQAgAEEDTQ0BIAI1AmBCIIYgBiAAQQF2QQxxIgFqNQIAhCEKIAYgAEF8aiIAajUAAEIghiAGIAAgAWtqNQAAhCELDAULIAIpA1AhCiACKQNIIQtBACEBIABBEEkNAUEAIQMgACEIDAILQgAhCyAADQJCACEKDAMLQRAhCAJAQRAgAGsiA0UNACACQZABaiAGIABqQSBqIAP8CgAACwJAIABFDQAgAkGQAWogA2ogBiAA/AoAAAsgAkGQAWohBgsgBiADaiEEIAggA2shAyALIAqFIAmFIQkCQANAIAFBEGoiACADTw0BIAJBIGogBCABaiIBQQhqKQAAIAmFQgAgASkAAELb0dCFmtrfgWeFQgAQxYSAgAAgAikDKCACKQMghSEJIAAhAQwACwsgBiAIaiIBQXhqKQAAIQsgAUFwaikAACEKDAELIAYgAEEBdmoxAABCCIYgAjEAYEIQhoQgBiAAakF/ajEAAIQhCgsgAkEQaiAKQtvR0IWa2t+BZ4VCACALIAmFQgAQxYSAgAAgAiACKQMYQtvR0IWa2t+BZ4VCACAFrSACKQMQhUKvyPXFx6yHu6B/hUIAEMWEgIAAIAIpAwAhCSACKQMIIQogAkGgAWokgICAgAAgCiAJhQsyAQF/AkAgAEH3r8qAAEHBABCagICAACICQf//A3ENACAAIAEvAQAQpYSAgAAhAgsgAgsxAQF/AkAgAEHosMqAAEEwEJqAgIAAIgJB//8DcQ0AIAAgAS8BABClhICAACECCyACCzEBAX8CQCAAQZixyoAAQTAQmoCAgAAiAkH//wNxDQAgACABLwEAEKWEgIAAIQILIAILMwEBfyAAQQhqIQBBACEBAkADQCAAKAIAIgBFDQEgASAAQXxqKAIAakF4aiEBDAALCyABC4IBAQF/I4CAgIAAQRBrIgMkgICAgAACQAJAIAJBe2pBfE8NACAAQSo2AQAMAQsgA0EMaiABIAJBEBDIgICAAAJAIAMvAQ4NACAAQQA7AQAgACADLwEMQf8BbCACQQJ0QeS7yoAAaigCAG46AAIMAQsgAEEqNgEACyADQRBqJICAgIAAC9siCgR/AX4CfwF+An8BfgJ/AXwBfgN/I4CAgIAAQYAHayIDJICAgIAAAkACQAJAAkACQAJAAkAgAkUNACACIAEtAAAiBEFVakH9AXFFIgVGDQAgASAFaiEGAkACQAJAAkACQAJAIAIgBWsiBUECSQ0AIAYtAABBMEcNACAGLQABIgJBv39qQf8BcUEaSUEFdCACckH/AXFB+ABHDQBCACEHIANCADcC7AYgAyAFQX5qNgLoBkECIQggAyAGQQJqNgLkBiADQgA3A0ggA0HkBmogA0HIAGoQiISAgAAgAygC7AYiAiADKALwBiIBayEJAkACQCACIAMoAugGTw0AIAMoAuQGIAJqLQAAQS5GDQELQgAhCiAJIQsMAgsgAyACQQFqIgI2AuwGIANB5AZqIANByABqEIiEgIAAIAEgAmsgAygC7AYiAiADKALwBiIBa2oiDCAJaiELQgAgDK1CAoZ9IQoMAQtCACEKIANCADcC7AYgAyAFNgLoBiADIAY2AuQGIANCADcDSCADQeQGaiADQcgAahCJhICAACADKALsBiIIIAMoAvAGIgJrIQkCQAJAAkAgCCADKALoBk8NACADKALkBiAIai0AAEEuRg0BC0IAIQcgCSELDAELIAMgCEEBaiIBNgLsBiADQeQGaiADQcgAahCJhICAACACIAFrIAMoAuwGIgggAygC8AYiAmtqIgEgCWohC0IAIAGtfSEHCwJAAkACQCALRQ0AQgAhDQJAIAggAygC6AZPDQAgAygC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gICAACIEQf//A3ENACAAQe/qwIAAQQMQmoCAgAAiBEH//wNxDQACQCACKAIAIgQNACAAIAEQrYSAgAAiBEH//wNxDQEgAigCACEECwJAIARBAUcNACAAIAEgAigCBCACKAIIQQIQs4SAgAAiBEH//wNxDQEgAigCACEECwJAIARBAkcNACAAIAEgAigCBCACKAIIQQIQs4SAgAAiBEH//wNxDQEgAigCACEECwJAIARBA0cNACAAQaaSwIAAQQIQmoCAgAAiBEH//wNxDQEgAEHY6sCAAEECEJqAgIAAIgRB//8DcQ0BIABBl7DAgABBAxCagICAACIEQf//A3ENASAAQe/qwIAAQQMQmoCAgAAiBEH//wNxDQEgACABIAIoAgQgAigCCBC0hICAACIEQf//A3ENASAAQdfqwIAAQQMQmoCAgAAiBEH//wNxDQEgAEG9r8CAAEEEEJqAgIAAIgRB//8DcQ0BIABB7+rAgABBAxCagICAACIEQf//A3ENASACLQAMIQYgA0EBNgIEIANB2erAgAA2AgBBByEEQdyTwIAAIQUCQAJAAkACQCAGQQNxDgQDAAECAwtBDCEEQf2iwIAAIQUMAgtBCSEEQeSTwIAAIQUMAQtBBSEEQYubwIAAIQULIAMgBTYCCCADIAQ2AgwgACADEKeEgIAAIgRB//8DcQ0BIABB1+rAgABBAxCagICAACIEQf//A3ENASAAQceWwIAAQQYQmoCAgAAiBEH//wNxDQEgAEHv6sCAAEEDEJqAgIAAIgRB//8DcQ0BIAAgASACLQANELWEgIAAIgRB//8DcQ0BIABB1+rAgABBAxCagICAACIEQf//A3ENASAAQb+UwIAAQQsQmoCAgAAiBEH//wNxDQEgAEHv6sCAAEEDEJqAgIAAIgRB//8DcQ0BIAAgASACLQAOELWEgIAAIgRB//8DcQ0BIABB1+rAgABBAxCagICAACIEQf//A3ENASAAQZWcwIAAQQwQmoCAgAAiBEH//wNxDQEgAEHv6sCAAEEDEJqAgIAAIgRB//8DcQ0BIAAgASACLQAPELWEgIAAIgRB//8DcQ0BIABBo5LAgABBAhCagICAACIEQf//A3ENASACKAIAIQQLAkAgBEEERw0AIAAgARCthICAACIEQf//A3ENASACKAIAIQQLAkAgBEEFRw0AIABBppLAgABBAhCagICAACIEQf//A3ENASAAQdjqwIAAQQIQmoCAgAAiBEH//wNxDQEgAEGcrcCAAEEHEJqAgIAAIgRB//8DcQ0BIABB7+rAgABBAxCagICAACIEQf//A3ENASAAIAEgAigCBCACKAIIELSEgIAAIgRB//8DcQ0BIABBo5LAgABBAhCagICAACIEQf//A3ENASACKAIAIQQLAkAgBEEGRw0AIABBppLAgABBAhCagICAACIEQf//A3ENASAAQdjqwIAAQQIQmoCAgAAiBEH//wNxDQEgAEGcrsCAAEEJEJqAgIAAIgRB//8DcQ0BIABB7+rAgABBAxCagICAACIEQf//A3ENASAAIAEgAkEEahC2hICAACIEQf//A3ENASAAQaOSwIAAQQIQmoCAgAAiBEH//wNxDQEgAigCACEECwJAIARBB0cNACAAQaaSwIAAQQIQmoCAgAAiBEH//wNxDQEgAEHY6sCAAEECEJqAgIAAIgRB//8DcQ0BIABBva/AgABBBBCagICAACIEQf//A3ENASAAQe/qwIAAQQMQmoCAgAAiBEH//wNxDQEgACABIAItAAwQq4SAgAAiBEH//wNxDQEgAEHX6sCAAEEDEJqAgIAAIgRB//8DcQ0BIABBtrHAgABBBBCagICAACIEQf//A3ENASAAQe/qwIAAQQMQmoCAgAAiBEH//wNxDQEgACABIAIoAgQgAigCCEEBELOEgIAAIgRB//8DcQ0BIABBo5LAgABBAhCagICAACIEQf//A3ENASACKAIAIQQLAkAgBEEIRw0AIABBppLAgABBAhCagICAACIEQf//A3ENASAAQdjqwIAAQQIQmoCAgAAiBEH//wNxDQEgAEGGrMCAAEEFEJqAgIAAIgRB//8DcQ0BIABB7+rAgABBAxCagICAACIEQf//A3ENASAAIAEgAigCBCACKAIIQQEQs4SAgAAiBEH//wNxDQEgAEGjksCAAEECEJqAgIAAIgRB//8DcQ0BIAIoAgAhBAsCQCAEQQlHDQAgAEGmksCAAEECEJqAgIAAIgRB//8DcQ0BIABB2OrAgABBAhCagICAACIEQf//A3ENASAAQYaswIAAQQUQmoCAgAAiBEH//wNxDQEgAEHv6sCAAEEDEJqAgIAAIgRB//8DcQ0BIAAgASACKAIEIAIoAghBARCzhICAACIE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KAIEIAIoAghBARCzhICAACIEQf//A3ENASAAQdfqwIAAQQMQmoCAgAAiBEH//wNxDQEgAEHLlMCAAEEEEJqAgIAAIgRB//8DcQ0BIABB7+rAgABBAxCagICAACIEQf//A3ENASAAIAEgAigCDCACKAIQQQEQs4SAgAAiBEH//wNxDQEgAEGjksCAAEECEJqAgIAAIgRB//8DcQ0BIAIoAgAhBAsCQCAEQQ1HDQAgAEGmksCAAEECEJqAgIAAIgRB//8DcQ0BIABB2OrAgABBAhCagICAACIEQf//A3ENASAAQZiwwIAAQQIQmoCAgAAiBEH//wNxDQEgAEHv6sCAAEEDEJqAgIAAIgRB//8DcQ0BIAAgASACKAIEIAIoAggQtISAgAAiBEH//wNxDQEgAEHX6sCAAEEDEJqAgIAAIgRB//8DcQ0BIABBlKjAgABBAxCagICAACIEQf//A3ENASAAQe/qwIAAQQMQmoCAgAAiBEH//wNxDQEgACABIAIoAgwgAigCEEEBELOEgIAAIgRB//8DcQ0BIABBo5LAgABBAhCagICAACIEQf//A3ENASACKAIAIQQLAkAgBEEORw0AIAAgARCthICAACIEQf//A3ENASACKAIAIQQLAkAgBEEPRw0AIABBppLAgABBAhCagICAACIEQf//A3ENASAAQdjqwIAAQQIQmoCAgAAiBEH//wNxDQEgAEHinMCAAEELEJqAgIAAIgRB//8DcQ0BIABB7+rAgABBAxCagICAACIEQf//A3ENASAAIAEgAi8BBBCPg4CAACIEQf//A3ENASAAQaOSwIAAQQIQmoCAgAAiBEH//wNxDQEgAigCACEECwJAIARBEEcNACAAIAEgAigCBCACKAIIQQIQs4SAgAAiBEH//wNxDQEgAigCACEECwJAIARBEUcNACAAQdLqwIAAQQQQmoCAgAAiBEH//wNxDQEgAEGGrMCAAEGim8CAACACLQAMG0EFEJqAgIAAIgRB//8DcQ0BIABB7+rAgABBAxCagICAACIEQf//A3ENAQJAAkAgAi0ADA0AIAAgARCthICAACIEQf//A3ENAyACLQAMRQ0BCyAAIAEgAigCBCACKAIIQQEQs4SAgAAiBEH//wNxDQILIABBo5LAgABBAhCagICAACIEQf//A3ENASACKAIAIQQLAkAgBEESRw0A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/wNxRQ0BDAMLIABBo5LAgABBAhCagICAAA8LAkAgA0EBRg0AIABB8+rAgABBAhCagICAACIFQf//A3ENAgsgAkEBaiECIANBf2ohAwwACwsgBQstAAJAIAJFDQAgACABIAIgA0EBELOEgIAADwsgAEGCpsCAAEEEIAEQoYSAgAALJwAgAEH+qsCAAEH/rMCAACACQQFxIgIbQQRBBSACGyABEKGEgIAACy8AAkAgAi0AAUUNACAAIAEgAi0AABCrhICAAA8LIABBgqbAgABBBCABEKGEgIAAC2UBAX8jgICAgABBEGsiAySAgICAACADQdnqwIAANgIAIANBATYCBCADQQNBAiACQQFxIgIbNgIMIANBp6bAgABB35nAgAAgAhs2AgggACADEKeEgIAAIQIgA0EQaiSAgICAACACC/wCAQd/I4CAgIAAQRBrIgUkgICAgAAgA0F/aiEGIAEoAgghByABKAIEIQhBACEJQQAhCgJAA0AgCiAGTw0BIAIoAgQgCWohCUEBIQoMAAsLAkACQAJAIAIgBkEDdGooAgQgBGwgCWoiCyABKAIMIgpqIAdLDQBBACEJAkADQCAJIAZPDQECQCACKAIEIglFDQAgCCAKaiACKAIAIAn8CgAACyABIAEoAgwgCWoiCjYCDEEBIQkMAAsLIAIgBkEDdGoiCSgCACECAkACQCAJKAIEIgkOAgMAAQsCQCAERQ0AIAggCmogAi0AACAE/AsACyABIAEoAgwgBGo2AgwMAgsDQCAERQ0CAkAgCUUNACAIIApqIAIgCfwKAAALIAEgASgCDCAJaiIKNgIMIARBf2ohBAwACwsgBUEIaiABIAIgAyAEIAEoAgAoAgARgYCAgACAgICAACAAIAUpAwg3AgAMAQsgACALNgIAIABBADsBBAsgBUEQaiSAgICAAAtgAQJ/QgFBICAAQX9qZ2siAK1C//8Dg4anIQECQCAAQf//A3FBAnRB8LzKgABqIgIoAgAiAEUNACACIAFBEHQgAGpBfGooAgA2AgAgAA8LQQAgAUAAIgBBEHQgAEF/RhsL4AEBAn8jgICAgABBEGsiBiSAgICAACAGIANBH3E6AA9BfyAEQQRqIgcgByAESRsiBEEBIAN0IgMgBCADSxshBAJAAkACQCACQQRqIgIgAyACIANLGyIDQX9qZyICQW9qQQxLDQAg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WzM7MTB+ABtbMjM7MTB+ABtbMTM7MTB+ABtbMjsxMH4AG1syMTsxMH4AG1syMDsxMH4AeyAuLi4gfQAuewBlbXB0eQBpbml0eQBjYXBhY2l0eQBIeXBlcmxpbmtTZXRPdXRPZk1lbW9yeQBTdHlsZVNldE91dE9mTWVtb3J5AFN0cmluZ3NPdXRPZk1lbW9yeQBIeXBlcmxpbmtNYXBPdXRPZk1lbW9yeQBHcmFwaGVtZU1hcE91dE9mTWVtb3J5AFN0cmluZ0FsbG9jT3V0T2ZNZW1vcnkAR3JhcGhlbWVBbGxvY091dE9mTWVtb3J5AHByaW1hcnkAc2Vjb25kYXJ5AGRuZC1jb3B5AG5vdGlmeQBzZW1hbnRpY19vcHRpb25fa2V5AGh5cGVybGlua19wYXJhbV9rZXkAa2l0dHlfY29sb3JfcHJvdG9jb2xfa2V5AHNwZWNpYWxfa2V5AGJvZHkAG095ABtPOXkAG084eQAbTzd5ABtPNnkAG08xNnkAG081eQAbTzE1eQAbTzR5ABtPMTR5ABtPM3kAG08xM3kAG08yeQAbTzEyeQAbTzExeQAbTzEweQBjb25lbXVfc2hvd19tZXNzYWdlX2JveABjb25lbXVfbWVzc2FnZV9ib3gAG094ABtPOXgAG084eAAbTzd4ABtPNngAG08xNngAG081eAAbTzE1eAAbTzR4ABtPMTR4ABtPM3gAG08xM3gAG08yeAAbTzEyeAAbTzExeAAbTzEweABxdWVzdGlvbl9hcnJvdwBzd2FsbG93AE92ZXJmbG93AHJlZHJhdwAbT3cAG085dwAbTzh3ABtPN3cAG082dwAbTzE2dwAbTzV3ABtPMTV3ABtPNHcAG08xNHcAG08zdwAbTzEzdwAbTzJ3ABtPMTJ3ABtPMTF3ABtPMTB3ABtPdgAbTzl2ABtPOHYAG083dgAbTzZ2ABtPMTZ2ABtPNXYAG08xNXYAG080dgAbTzE0dgAbTzN2ABtPMTN2ABtPMnYAG08xMnYAG08xMXYAG08xMHYAY29udGV4dC1tZW51ABtPdQAbTzl1ABtPOHUAG083dQAbTzZ1ABtPMTZ1ABtPNXUAG08xNXUAG080dQAbTzE0dQAbTzN1ABtPMTN1ABtPMnUAG08xMnUAG08xMXUAG08xMHUAY29uZW11X3RhYl90eHQAY3Vyc29yX3RleHQAdmVydGljYWwtdGV4dABJbnB1dE91dHB1dABjb25lbXVfd2FpdF9pbnB1dABlbmRfb2ZfaW5wdXQAZGNzX3B1dABhcGNfcHV0AHpvb20tb3V0AENvbm5lY3Rpb25UaW1lZE91dABsaXN0AGNvbmVtdV9wcm9ncmVzc19yZXBvcnQAcHJvbXB0X3N0YXJ0AHNlbWFudGljX29wdGlvbl9zdGFydABoeXBlcmxpbmtfc3RhcnQAc2VtYW50aWNfZXhpdF9jb2RlX3N0YXJ0AGFwY19zdGFydABzZW1hbnRpY19wcm9tcHQAcHJpbnQAY3VycmVudABwcmVhbGxvY19zZWdtZW50AGRlZmF1bHQAd2FpdAByaWdodABsZWZ0AE5vU3BhY2VMZWZ0AHJlc2V0AEludmFsaWRGb3JtYXQAG090ABtPOXQAG084dAAbTzd0ABtPNnQAG08xNnQAG081dAAbTzE1dAAbTzR0ABtPMTR0ABtPM3QAG08xM3QAG08ydAAbTzEydAAbTzExdAAbTzEwdAByZXF1ZXN0cwBjbGlja19ldmVudHMAY2xpcGJvYXJkX2NvbnRlbnRzAGR5bmFtaWNfc2VnbWVudHMAY3Jvc3MAcHJvZ3Jlc3MAaXRlbXMAcGFyYW1zAGR1cmF0aW9uX21zAGludGVybWVkaWF0ZXMAU3lzdGVtUmVzb3VyY2VzAGFsaWFzABtPcwAbTzlzABtPOHMAG083cwAbTzZzABtPMTZzABtPNXMAG08xNXMAG080cwAbTzE0cwAbTzNzABtPMTNzABtPMnMAG08xMnMAG08xMXMAG08xMHMAZmxldXIAbGVmdF9wdHIAdGVybWluYXRvcgBjdXJzb3IAZXJyb3IARGVjb2RlRXJyb3IAb3NjX2NvbG9yAGNyb3NzaGFpcgBJc0RpcgBwb2ludGVyAEludmFsaWRDaGFyYWN0ZXIAdG9wX3JpZ2h0X2Nvcm5lcgBib3R0b21fcmlnaHRfY29ybmVyAHRvcF9sZWZ0X2Nvcm5lcgBib3R0b21fbGVmdF9jb3JuZXIAQ29ubmVjdGlvblJlc2V0QnlQZWVyABtPcgAbTzlyABtPOHIAG083cgAbTzZyABtPMTZyABtPNXIAG08xNXIAG080cgAbTzE0cgAbTzNyABtPMTNyABtPMnIAG08xMnIAG08xMXIAG08xMHIAG09xABtPOXEAG084cQAbTzdxABtPNnEAG08xNnEAG081cQAbTzE1cQAbTzRxABtPMTRxABtPM3EAG08xM3EAG08ycQAbTzEycQAbTzExcQAbTzEwcQBkbmQtbm8tZHJvcABoZWxwAHBhcmFtc19zZXAAY29uZW11X3NsZWVwAHJpZ2h0X3VubGVzc19wZW5kaW5nX3dyYXAAG09wABtPOXAAG084cAAbTzdwABtPNnAAG08xNnAAG081cAAbTzE1cAAbTzRwABtPMTRwABtPM3AAG08xM3AAG08ycAAbTzEycAAbTzExcAAbTzEwcABEaXZpc2lvbkJ5WmVybwBjb25lbXVfZ3VpbWFjcm8AG09vABtPOW8AG084bwAbTzdvABtPNm8AG08xNm8AG081bwAbTzE1bwAbTzRvABtPMTRvABtPM28AG08xM28AG08ybwAbTzEybwAbTzExbwAbTzEwbwB0ZXJtaW5hbC5QYXJzZXIuQWN0aW9uAGNvbnRpbnVhdGlvbgBVdGY4RXhwZWN0ZWRDb250aW51YXRpb24AY29sb3Jfb3BlcmF0aW9uAE1pc3NpbmdPcGVyYXRpb24ATG9ja1Zpb2xhdGlvbgBzaG93X2Rlc2t0b3Bfbm90aWZpY2F0aW9uAHJ4dnRfZXh0ZW5zaW9uAGNoYW5nZV93aW5kb3dfaWNvbgB6b29tLWluAGxlbgBuYW4AG09uABtPOW4AG084bgAbTzduABtPNm4AG08xNm4AG081bgAbTzE1bgAbTzRuABtPMTRuABtPM24AG08xM24AG08ybgAbTzEybgAbTzExbgAbWzBuABtPMTBuAHh0ZXJtAEVuZE9mU3RyZWFtABtPbQAbTzltABtPOG0AG083bQAbTzZtABtPMTZtABtPNW0AG08xNW0AG080bQAbTzE0bQAbTzNtABtPMTNtABtPMm0AG08xMm0AG08xMW0AG08xMG0AY21kbGluZV91cmwAa2l0dHlfY29sb3JfcHJvdG9jb2wAbnVsbABhbGwtc2Nyb2xsAGNlbGwAdmlzdWFsX2JlbGwAYWxsAGJlbABmaW5hbABtYXNrAGRjc191bmhvb2sAZGNzX2hvb2sAZG5kLWxpbmsAV291bGRCbG9jawAbT2sAG085awAbTzhrABtPN2sAG082awAbTzE2awAbTzVrABtPMTVrABtPNGsAG08xNGsAG08zawAbTzEzawAbTzJrABtPMTJrABtPMTFrABtPMTBrABtPagAbTzlqABtPOGoAG083agAbTzZqABtPMTZqABtPNWoAG08xNWoAG080agAbTzE0agAbTzNqABtPMTNqABtPMmoAG08xMmoAG08xMWoAG08xMGoAaHlwZXJsaW5rX3VyaQBIeXBlcmxpbmtTZXROZWVkc1JlaGFzaABTdHlsZVNldE5lZWRzUmVoYXNoAGxlZnRfcHRyX3dhdGNoAGNzaV9kaXNwYXRjaABvc2NfZGlzcGF0Y2gAZXNjX2Rpc3BhdGNoAGFsbG9jYWJsZV9zdHJpbmcAU3RyZWFtaW5nAFV0ZjhPdmVybG9uZ0VuY29kaW5nAE5vdE9wZW5Gb3JSZWFkaW5nAGdyYWJiaW5nAEludmFsaWRFbnVtVGFnAGluZgBVdGY4RW5jb2Rlc1N1cnJvZ2F0ZUhhbGYAVXRmOENhbm5vdEVuY29kZVN1cnJvZ2F0ZUhhbGYAbmVzdy1yZXNpemUAcm93LXJlc2l6ZQBudy1yZXNpemUAZXctcmVzaXplAG5zLXJlc2l6ZQBuLXJlc2l6ZQBjb2wtcmVzaXplAG53c2UtcmVzaXplAG5lLXJlc2l6ZQByZW1vdmUAZG5kLW1vdmUAdHJ1ZQBjb25lbXVfcHJvZ3Jlc3NfcHJldmFsdWUAY29uZW11X3Byb2dyZXNzX3ZhbHVlAGNvbmVtdV9zbGVlcF92YWx1ZQBzZW1hbnRpY19vcHRpb25fdmFsdWUAaHlwZXJsaW5rX3BhcmFtX3ZhbHVlAGtpdHR5X2NvbG9yX3Byb3RvY29sX3ZhbHVlAFV0ZjhJbnZhbGlkU3RhcnRCeXRlAGV4ZWN1dGUAY29tcGxldGUAY29uZW11X3Byb2dyZXNzX3ByZXN0YXRlAGNvbmVtdV9wcm9ncmVzc19zdGF0ZQBhbHRlcm5hdGUAaW5kZXRlcm1pbmF0ZQBwYXVzZQBmYWxzZQBCcm9rZW5QaXBlAG1vdXNlX3NoYXBlAGNtZGxpbmUAY2hhbmdlX3dpbmRvd190aXRsZQBub3RpZmljYXRpb25fdGl0bGUAY29uZW11X2NoYW5nZV90YWJfdGl0bGUAY3Jvc3NlZF9jaXJjbGUAVW5zZWVrYWJs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c2NfMTYAb3NjXzExNgBvc2NfNQAyMjczNzM2NzU0NDMyMzIwNTk0Nzg3NTk3NjU2MjUAMTIzMjU5NTE2NDQwNzgzMDk0NTk1NTgyNTg4MzI1NDM1MzQ4Mzg2NDM4NTA1NDg1Nzg0ODQ0NDk1MzU2MDgyOTE2MjU5NzY1NjI1ADUyOTM5NTU5MjAzMzkzNzcxMTkxNzcwMTU2MjkyNDc3NjIyNjI4MjExOTc1MDk3NjU2MjUAODA3NzkzNTY2OTQ2MzE2MDg4NzQxNjEwMDUwODQ5NTczMDk5MTg1MzYzMzg5NTUxNjM5NTU2ODg0NzY1NjI1ADE0OTAxMTYxMTkzODQ3NjU2MjUAMTg4MDc5MDk2MTMxNTY2MDAxMjc0OTk3ODQ1OTU1NTU5MzA4NDUwOTg2NDg5MDgzNTM0MDAzNDQxNDAwMjczMDA0NTQ2NzYxNTEyNzU2MzQ3NjU2MjUAMzQ2OTQ0Njk1MTk1MzYxNDE4ODgyMzg0ODk2Mjc4MzgxMzQ3NjU2MjUAMzgxNDY5NzI2NTYyNQAyMDY3OTUxNTMxMzgyNTY5MTg3MTc4NTIxNzMwMTc0OTA3MTMzOTE0NTMwMjc3MjUyMTk3MjY1NjI1ADQ4MTQ4MjQ4NjA5NjgwODk2MzI2Mzk5NDQ4NTY0NjIzMTgyOTYzNDUyNTQxMjA1Mzg0NzA0ODgwOTk4NDY5ODg5MTYzOTcwOTQ3MjY1NjI1ADg4ODE3ODQxOTcwMDEyNTIzMjMzODkwNTMzNDQ3MjY1NjI1ADMxNTU0NDM2MjA4ODQwNDcyMjE2NDY5MTQyNjExMzExNDQ5MTg2OTI4MjU3NDA0MzYwOTIwMTkwODExMTU3MjI2NTYyNQA1ODIwNzY2MDkxMzQ2NzQwNzIyNjU2MjUAMTM1NTI1MjcxNTYwNjg4MDU0MjUwOTMxNjAwMTA4NzQyNzEzOTI4MjIyNjU2MjUANTA0ODcwOTc5MzQxNDQ3NTU1NDYzNTA2MjgxNzgwOTgzMTg2OTkwODUyMTE4NDY5Nzc0NzIzMDUyOTc4NTE1NjI1ADkzMTMyMjU3NDYxNTQ3ODUxNTYyNQAxMTc1NDk0MzUwODIyMjg3NTA3OTY4NzM2NTM3MjIyMjQ1Njc3ODE4NjY1NTU2NzcyMDg3NTIxNTA4NzUxNzA2Mjc4NDE3MjU5NDU0NzI3MTcyODUxNTYyNQAyMTY4NDA0MzQ0OTcxMDA4ODY4MDE0OTA1NjAxNzM5ODgzNDIyODUxNTYyNQAxNDIxMDg1NDcxNTIwMjAwMzcxNzQyMjQ4NTM1MTU2MjUANzcwMzcxOTc3NzU0ODk0MzQxMjIyMzkxMTc3MDMzOTcwOTI3NDE1MjQwNjU5Mjg2MTU1Mjc4MDk1OTc1NTE4MjI2NjIzNTM1MTU2MjUAMzMwODcyMjQ1MDIxMjExMDY5OTQ4NTYzNDc2ODI3OTg1MTQxNDI2MzI0ODQ0MzYwMzUxNTYyNQA2MTAzNTE1NjI1ADE5NzIxNTIyNjMwNTI1Mjk1MTM1MjkzMjE0MTMyMDY5NjU1NzQxODMwMTYwODc3NzI1NTc1MTE5MjU2OTczMjY2NjAxNTYyNQAzNjM3OTc4ODA3MDkxNzEyOTUxNjYwMTU2MjUAODQ3MDMyOTQ3MjU0MzAwMzM5MDY4MzIyNTAwNjc5NjQxOTYyMDUxMzkxNjAxNTYyNQAyMzg0MTg1NzkxMDE1NjI1ADEyOTI0Njk3MDcxMTQxMDU3NDE5ODY1NzYwODEzNTkzMTY5NTg2OTY1ODE0MjMyODI2MjMyOTEwMTU2MjUANTU1MTExNTEyMzEyNTc4MjcwMjExODE1ODM0MDQ1NDEwMTU2MjUAMzAwOTI2NTUzODEwNTA1NjAyMDM5OTk2NTUzNTI4ODk0ODkzNTIxNTc4MzgyNTMzNjU0NDA1NTA2MjQwNDM2ODA3Mjc0ODE4NDIwNDEwMTU2MjUAMTUyNTg3ODkwNjI1ADgyNzE4MDYxMjU1MzAyNzY3NDg3MTQwODY5MjA2OTk2Mjg1MzU2NTgxMjExMDkwMDg3ODkwNjI1ADE5MjU5Mjk5NDQzODcyMzU4NTMwNTU5Nzc5NDI1ODQ5MjczMTg1MzgxMDE2NDgyMTUzODgxOTUyMzk5Mzg3OTU1NjY1NTg4Mzc4OTA2MjUAMzU1MjcxMzY3ODgwMDUwMDkyOTM1NTYyMTMzNzg5MDYyNQAyMzI4MzA2NDM2NTM4Njk2Mjg5MDYyNQAxMjYyMTc3NDQ4MzUzNjE4ODg4NjU4NzY1NzA0NDUyNDU3OTY3NDc3MTMwMjk2MTc0NDM2ODA3NjMyNDQ2Mjg5MDYyNQA1NDIxMDEwODYyNDI3NTIyMTcwMDM3MjY0MDA0MzQ5NzA4NTU3MTI4OTA2MjUANTk2MDQ2NDQ3NzUzOTA2MjUAMzIzMTE3NDI2Nzc4NTI2NDM1NDk2NjQ0MDIwMzM5ODI5MjM5Njc0MTQ1MzU1ODIwNjU1ODIyNzUzOTA2MjUAMTM4Nzc3ODc4MDc4MTQ0NTY3NTUyOTUzOTU4NTExMzUyNTM5MDYyNQA3NTIzMTYzODQ1MjYyNjQwMDUwOTk5OTEzODM4MjIyMzcyMzM4MDM5NDU5NTYzMzQxMzYwMTM3NjU2MDEwOTIwMTgxODcwNDYwNTEwMjUzOTA2MjUANDkzMDM4MDY1NzYzMTMyMzc4MzgyMzMwMzUzMzAxNzQxMzkzNTQ1NzU0MDIxOTQzMTM5Mzc3OTgxNDI0MzMxNjY1MDM5MDYyNQA5MDk0OTQ3MDE3NzI5MjgyMzc5MTUwMzkwNjI1ADIxMTc1ODIzNjgxMzU3NTA4NDc2NzA4MDYyNTE2OTkxMDQ5MDUxMjg0NzkwMDM5MDYyNQAzMzg4MTMxNzg5MDE3MjAxMzU2MjczMjkwMDAyNzE4NTY3ODQ4MjA1NTY2NDA2MjUAMTQ1NTE5MTUyMjgzNjY4NTE4MDY2NDA2MjUANzg4ODYwOTA1MjIxMDExODA1NDExNzI4NTY1MjgyNzg2MjI5NjczMjA2NDM1MTA5MDIzMDA0NzcwMjc4OTMwNjY0MDYyNQAxMjAzNzA2MjE1MjQyMDIyNDA4MTU5OTg2MjE0MTE1NTc5NTc0MDg2MzEzNTMwMTM0NjE3NjIyMDI0OTYxNzQ3MjI5MDk5MjczNjgxNjQwNjI1ADIyMjA0NDYwNDkyNTAzMTMwODA4NDcyNjMzMzYxODE2NDA2MjUANTE2OTg3ODgyODQ1NjQyMjk2Nzk0NjMwNDMyNTQzNzI2NzgzNDc4NjMyNTY5MzEzMDQ5MzE2NDA2MjUAOTUzNjc0MzE2NDA2MjUANDcwMTk3NzQwMzI4OTE1MDAzMTg3NDk0NjE0ODg4ODk4MjcxMTI3NDY2MjIyNzA4ODM1MDA4NjAzNTAwNjgyNTExMzY2OTAzNzgxODkwODY5MTQwNjI1ADg2NzM2MTczNzk4ODQwMzU0NzIwNTk2MjI0MDY5NTk1MzM2OTE0MDYyNQAzNzI1MjkwMjk4NDYxOTE0MDYyNQAyMDE5NDgzOTE3MzY1NzkwMjIxODU0MDI1MTI3MTIzOTMyNzQ3OTYzNDA4NDczODc5MDk4ODkyMjExOTE0MDYyNQA1Njg0MzQxODg2MDgwODAxNDg2OTY4OTk0MTQwNjI1ADMwODE0ODc5MTEwMTk1NzczNjQ4ODk1NjQ3MDgxMzU4ODM3MDk2NjA5NjI2MzcxNDQ2MjExMTIzODM5MDIwNzI5MDY0OTQxNDA2MjUAMTMyMzQ4ODk4MDA4NDg0NDI3OTc5NDI1MzkwNzMxMTk0MDU2NTcwNTI5OTM3NzQ0MTQwNjI1ADI0NDE0MDYyNQAzODUxODU5ODg4Nzc0NDcxNzA2MTExOTU1ODg1MTY5ODU0NjM3MDc2MjAzMjk2NDMwNzc2MzkwNDc5ODc3NTkxMTMzMTE3Njc1NzgxMjUANzEwNTQyNzM1NzYwMTAwMTg1ODcxMTI0MjY3NTc4MTI1ADMwNTE3NTc4MTI1ADE2NTQzNjEyMjUxMDYwNTUzNDk3NDI4MTczODQxMzk5MjU3MDcxMzE2MjQyMjE4MDE3NTc4MTI1ADI1MjQzNTQ4OTY3MDcyMzc3NzczMTc1MzE0MDg5MDQ5MTU5MzQ5NTQyNjA1OTIzNDg4NzM2MTUyNjQ4OTI1NzgxMjUANDY1NjYxMjg3MzA3NzM5MjU3ODEyNQA1ODc3NDcxNzU0MTExNDM3NTM5ODQzNjgyNjg2MTExMjI4Mzg5MDkzMzI3NzgzODYwNDM3NjA3NTQzNzU4NTMxMzkyMDg2Mjk3MjczNjM1ODY0MjU3ODEyNQAxMDg0MjAyMTcyNDg1NTA0NDM0MDA3NDUyODAwODY5OTQxNzExNDI1NzgxMjUAMTE5MjA5Mjg5NTUwNzgxMjUANjQ2MjM0ODUzNTU3MDUyODcwOTkzMjg4MDQwNjc5NjU4NDc5MzQ4MjkwNzExNjQxMzExNjQ1NTA3ODEyNQAyNzc1NTU3NTYxNTYyODkxMzUxMDU5MDc5MTcwMjI3MDUwNzgxMjUAMTUwNDYzMjc2OTA1MjUyODAxMDE5OTk4Mjc2NzY0NDQ3NDQ2NzYwNzg5MTkxMjY2ODI3MjAyNzUzMTIwMjE4NDAzNjM3NDA5MjEwMjA1MDc4MTI1ADQyMzUxNjQ3MzYyNzE1MDE2OTUzNDE2MTI1MDMzOTgyMDk4MTAyNTY5NTgwMDc4MTI1ADE4MTg5ODk0MDM1NDU4NTY0NzU4MzAwNzgxMjUAOTg2MDc2MTMxNTI2MjY0NzU2NzY0NjYwNzA2NjAzNDgyNzg3MDkxNTA4MDQzODg2Mjc4NzU1OTYyODQ4NjYzMzMwMDc4MTI1ADExMzY4NjgzNzcyMTYxNjAyOTczOTM3OTg4MjgxMjUANjE2Mjk3NTgyMjAzOTE1NDcyOTc3OTEyOTQxNjI3MTc2NzQxOTMyMTkyNTI3NDI4OTI0MjIyNDc2NzgwNDE0NTgxMjk4ODI4MTI1ADI2NDY5Nzc5NjAxNjk2ODg1NTk1ODg1MDc4MTQ2MjM4ODExMzE0MTA1OTg3NTQ4ODI4MTI1ADE3MzQ3MjM0NzU5NzY4MDcwOTQ0MTE5MjQ0ODEzOTE5MDY3MzgyODEyNQA5NDAzOTU0ODA2NTc4MzAwMDYzNzQ5ODkyMjk3Nzc3OTY1NDIyNTQ5MzI0NDU0MTc2NzAwMTcyMDcwMDEzNjUwMjI3MzM4MDc1NjM3ODE3MzgyODEyNQA3NDUwNTgwNTk2OTIzODI4MTI1ADQwMzg5Njc4MzQ3MzE1ODA0NDM3MDgwNTAyNTQyNDc4NjU0OTU5MjY4MTY5NDc3NTgxOTc3ODQ0MjM4MjgxMjUAMTAzMzk3NTc2NTY5MTI4NDU5MzU4OTI2MDg2NTA4NzQ1MzU2Njk1NzI2NTEzODYyNjA5ODYzMjgxMjUAMTkwNzM0ODYzMjgxMjUAMjQwNzQxMjQzMDQ4NDA0NDgxNjMxOTk3MjQyODIzMTE1OTE0ODE3MjYyNzA2MDI2OTIzNTI0NDA0OTkyMzQ5NDQ1ODE5ODU0NzM2MzI4MTI1ADQ0NDA4OTIwOTg1MDA2MjYxNjE2OTQ1MjY2NzIzNjMyODEyNQAxNTc3NzIxODEwNDQyMDIzNjEwODIzNDU3MTMwNTY1NTcyNDU5MzQ2NDEyODcwMjE4MDQ2MDA5NTQwNTU3ODYxMzI4MTI1ADI5MTAzODMwNDU2NzMzNzAzNjEzMjgxMjUANjc3NjI2MzU3ODAzNDQwMjcxMjU0NjU4MDAwNTQzNzEzNTY5NjQxMTEzMjgxMjUAMjk4MDIzMjIzODc2OTUzMTI1ADE2MTU1ODcxMzM4OTI2MzIxNzc0ODMyMjAxMDE2OTkxNDYxOTgzNzA3MjY3NzkxMDMyNzkxMTM3Njk1MzEyNQA2OTM4ODkzOTAzOTA3MjI4Mzc3NjQ3Njk3OTI1NTY3NjI2OTUzMTI1ADM3NjE1ODE5MjI2MzEzMjAwMjU0OTk5NTY5MTkxMTExODYxNjkwMTk3Mjk3ODE2NzA2ODAwNjg4MjgwMDU0NjAwOTA5MzUyMzAyNTUxMjY5NTMxMjUANDU0NzQ3MzUwODg2NDY0MTE4OTU3NTE5NTMxMjUAMjQ2NTE5MDMyODgxNTY2MTg5MTkxMTY1MTc2NjUwODcwNjk2NzcyODc3MDEwOTcxNTY5Njg4OTkwNzEyMTY1ODMyNTE5NTMxMjUAMTA1ODc5MTE4NDA2Nzg3NTQyMzgzNTQwMzEyNTg0OTU1MjQ1MjU2NDIzOTUwMTk1MzEyNQAxNzc2MzU2ODM5NDAwMjUwNDY0Njc3ODEwNjY4OTQ1MzEyNQA5NjI5NjQ5NzIxOTM2MTc5MjY1Mjc5ODg5NzEyOTI0NjM2NTkyNjkwNTA4MjQxMDc2OTQwOTc2MTk5NjkzOTc3ODMyNzk0MTg5NDUzMTI1ADc2MjkzOTQ1MzEyNQA0MTM1OTAzMDYyNzY1MTM4Mzc0MzU3MDQzNDYwMzQ5ODE0MjY3ODI5MDYwNTU0NTA0Mzk0NTMxMjUAMjcxMDUwNTQzMTIxMzc2MTA4NTAxODYzMjAwMjE3NDg1NDI3ODU2NDQ1MzEyNQAxMTY0MTUzMjE4MjY5MzQ4MTQ0NTMxMjUANjMxMDg4NzI0MTc2ODA5NDQ0MzI5MzgyODUyMjI2MjI4OTgzNzM4NTY1MTQ4MDg3MjE4NDAzODE2MjIzMTQ0NTMxMjUAMTAwOTc0MTk1ODY4Mjg5NTExMDkyNzAxMjU2MzU2MTk2NjM3Mzk4MTcwNDIzNjkzOTU0OTQ0NjEwNTk1NzAzMTI1ADE4NjI2NDUxNDkyMzA5NTcwMzEyNQA0MzM2ODA4Njg5OTQyMDE3NzM2MDI5ODExMjAzNDc5NzY2ODQ1NzAzMTI1ADIzNTA5ODg3MDE2NDQ1NzUwMTU5Mzc0NzMwNzQ0NDQ0OTEzNTU2MzczMzExMTM1NDQxNzUwNDMwMTc1MDM0MTI1NTY4MzQ1MTg5MDk0NTQzNDU3MDMxMjUAMjg0MjE3MDk0MzA0MDQwMDc0MzQ4NDQ5NzA3MDMxMjUAMTU0MDc0Mzk1NTUwOTc4ODY4MjQ0NDc4MjM1NDA2Nzk0MTg1NDgzMDQ4MTMxODU3MjMxMDU1NjE5MTk1MTAzNjQ1MzI0NzA3MDMxMjUANjYxNzQ0NDkwMDQyNDIyMTM5ODk3MTI2OTUzNjU1OTcwMjgyODUyNjQ5Njg4NzIwNzAzMTI1ADEyMjA3MDMxMjUAMjU4NDkzOTQxNDIyODIxMTQ4Mzk3MzE1MjE2MjcxODYzMzkxNzM5MzE2Mjg0NjU2NTI0NjU4MjAzMTI1ADQ3NjgzNzE1ODIwMzEyNQAxMTEwMjIzMDI0NjI1MTU2NTQwNDIzNjMxNjY4MDkwODIwMzEyNQA2MDE4NTMxMDc2MjEwMTEyMDQwNzk5OTMxMDcwNTc3ODk3ODcwNDMxNTY3NjUwNjczMDg4MTEwMTI0ODA4NzM2MTQ1NDk2MzY4NDA4MjAzMTI1ADE2OTQwNjU4OTQ1MDg2MDA2NzgxMzY2NDUwMDEzNTkyODM5MjQxMDI3ODMyMDMxMjUAMzk0NDMwNDUyNjEwNTA1OTAyNzA1ODY0MjgyNjQxMzkzMTE0ODM2NjAzMjE3NTU0NTExNTAyMzg1MTM5NDY1MzMyMDMxMjUANzI3NTk1NzYxNDE4MzQyNTkwMzMyMDMxMjUAb3NjXzE1AG9zY18xMTUAb3NjXzEwNQBvc2NfNABvc2NfMTQAb3NjXzExNABvc2NfMTA0ADEzMwBvc2NfMTMAb3NjXzExMwA1MgAyMgBvc2NfMTIAb3NjXzExMgBoYW5kMQAyMQBvc2NfMTEAb3NjXzExMQBvc2NfMTAAb3NjXzExMABlcnJvci4ALnsgLgAsIC4AQGVudW1Gcm9tSW50KAAkJwB7IAAgPSAALCAAGxsAGw0AMjU1IDI1MCAyNTAJCXNub3cKMjQ4IDI0OCAyNTUJCWdob3N0IHdoaXRlCjI0OCAyNDggMjU1CQlHaG9zdFdoaXRlCjI0NSAyNDUgMjQ1CQl3aGl0ZSBzbW9rZQoyNDUgMjQ1IDI0NQkJV2hpdGVTbW9rZQoyMjAgMjIwIDIyMAkJZ2FpbnNib3JvCjI1NSAyNTAgMjQwCQlmbG9yYWwgd2hpdGUKMjU1IDI1MCAyNDAJCUZsb3JhbFdoaXRlCjI1MyAyNDUgMjMwCQlvbGQgbGFjZQoyNTMgMjQ1IDIzMAkJT2xkTGFjZQoyNTAgMjQwIDIzMAkJbGluZW4KMjUwIDIzNSAyMTUJCWFudGlxdWUgd2hpdGUKMjUwIDIzNSAyMTUJCUFudGlxdWVXaGl0ZQoyNTUgMjM5IDIxMwkJcGFwYXlhIHdoaXAKMjU1IDIzOSAyMTMJCVBhcGF5YVdoaXAKMjU1IDIzNSAyMDUJCWJsYW5jaGVkIGFsbW9uZAoyNTUgMjM1IDIwNQkJQmxhbmNoZWRBbG1vbmQKMjU1IDIyOCAxOTYJCWJpc3F1ZQoyNTUgMjE4IDE4NQkJcGVhY2ggcHVmZgoyNTUgMjE4IDE4NQkJUGVhY2hQdWZmCjI1NSAyMjIgMTczCQluYXZham8gd2hpdGUKMjU1IDIyMiAxNzMJCU5hdmFqb1doaXRlCjI1NSAyMjggMTgxCQltb2NjYXNpbgoyNTUgMjQ4IDIyMAkJY29ybnNpbGsKMjU1IDI1NSAyNDAJCWl2b3J5CjI1NSAyNTAgMjA1CQlsZW1vbiBjaGlmZm9uCjI1NSAyNTAgMjA1CQlMZW1vbkNoaWZmb24KMjU1IDI0NSAyMzgJCXNlYXNoZWxsCjI0MCAyNTUgMjQwCQlob25leWRldwoyNDUgMjU1IDI1MAkJbWludCBjcmVhbQoyNDUgMjU1IDI1MAkJTWludENyZWFtCjI0MCAyNTUgMjU1CQlhenVyZQoyNDAgMjQ4IDI1NQkJYWxpY2UgYmx1ZQoyNDAgMjQ4IDI1NQkJQWxpY2VCbHVlCjIzMCAyMzAgMjUwCQlsYXZlbmRlcgoyNTUgMjQwIDI0NQkJbGF2ZW5kZXIgYmx1c2gKMjU1IDI0MCAyNDUJCUxhdmVuZGVyQmx1c2gKMjU1IDIyOCAyMjUJCW1pc3R5IHJvc2UKMjU1IDIyOCAyMjUJCU1pc3R5Um9zZQoyNTUgMjU1IDI1NQkJd2hpdGUKICAwICAgMCAgIDAJCWJsYWNrCiA0NyAgNzkgIDc5CQlkYXJrIHNsYXRlIGdyYXkKIDQ3ICA3OSAgNzkJCURhcmtTbGF0ZUdyYXkKIDQ3ICA3OSAgNzkJCWRhcmsgc2xhdGUgZ3JleQogNDcgIDc5ICA3OQkJRGFya1NsYXRlR3JleQoxMDUgMTA1IDEwNQkJZGltIGdyYXkKMTA1IDEwNSAxMDUJCURpbUdyYXkKMTA1IDEwNSAxMDUJCWRpbSBncmV5CjEwNSAxMDUgMTA1CQlEaW1HcmV5CjExMiAxMjggMTQ0CQlzbGF0ZSBncmF5CjExMiAxMjggMTQ0CQlTbGF0ZUdyYXkKMTEyIDEyOCAxNDQJCXNsYXRlIGdyZXkKMTEyIDEyOCAxNDQJCVNsYXRlR3JleQoxMTkgMTM2IDE1MwkJbGlnaHQgc2xhdGUgZ3JheQoxMTkgMTM2IDE1MwkJTGlnaHRTbGF0ZUdyYXkKMTE5IDEzNiAxNTMJCWxpZ2h0IHNsYXRlIGdyZXkKMTE5IDEzNiAxNTMJCUxpZ2h0U2xhdGVHcmV5CjE5MCAxOTAgMTkwCQlncmF5CjE5MCAxOTAgMTkwCQlncmV5CjE5MCAxOTAgMTkwCQl4MTEgZ3JheQoxOTAgMTkwIDE5MAkJWDExR3JheQoxOTAgMTkwIDE5MAkJeDExIGdyZXkKMTkwIDE5MCAxOTAJCVgxMUdyZXkKMTI4IDEyOCAxMjgJCXdlYiBncmF5CjEyOCAxMjggMTI4CQlXZWJHcmF5CjEyOCAxMjggMTI4CQl3ZWIgZ3JleQoxMjggMTI4IDEyOAkJV2ViR3JleQoyMTEgMjExIDIxMQkJbGlnaHQgZ3JleQoyMTEgMjExIDIxMQkJTGlnaHRHcmV5CjIxMSAyMTEgMjExCQlsaWdodCBncmF5CjIxMSAyMTEgMjExCQlMaWdodEdyYXkKIDI1ICAyNSAxMTIJCW1pZG5pZ2h0IGJsdWUKIDI1ICAyNSAxMTIJCU1pZG5pZ2h0Qmx1ZQogIDAgICAwIDEyOAkJbmF2eQogIDAgICAwIDEyOAkJbmF2eSBibHVlCiAgMCAgIDAgMTI4CQlOYXZ5Qmx1ZQoxMDAgMTQ5IDIzNwkJY29ybmZsb3dlciBibHVlCjEwMCAxNDkgMjM3CQlDb3JuZmxvd2VyQmx1ZQogNzIgIDYxIDEzOQkJZGFyayBzbGF0ZSBibHVlCiA3MiAgNjEgMTM5CQlEYXJrU2xhdGVCbHVlCjEwNiAgOTAgMjA1CQlzbGF0ZSBibHVlCjEwNiAgOTAgMjA1CQlTbGF0ZUJsdWUKMTIzIDEwNCAyMzgJCW1lZGl1bSBzbGF0ZSBibHVlCjEyMyAxMDQgMjM4CQlNZWRpdW1TbGF0ZUJsdWUKMTMyIDExMiAyNTUJCWxpZ2h0IHNsYXRlIGJsdWUKMTMyIDExMiAyNTUJCUxpZ2h0U2xhdGVCbHVlCiAgMCAgIDAgMjA1CQltZWRpdW0gYmx1ZQogIDAgICAwIDIwNQkJTWVkaXVtQmx1ZQogNjUgMTA1IDIyNQkJcm95YWwgYmx1ZQogNjUgMTA1IDIyNQkJUm95YWxCbHVlCiAgMCAgIDAgMjU1CQlibHVlCiAzMCAxNDQgMjU1CQlkb2RnZXIgYmx1ZQogMzAgMTQ0IDI1NQkJRG9kZ2VyQmx1ZQogIDAgMTkxIDI1NQkJZGVlcCBza3kgYmx1ZQogIDAgMTkxIDI1NQkJRGVlcFNreUJsdWUKMTM1IDIwNiAyMzUJCXNreSBibHVlCjEzNSAyMDYgMjM1CQlTa3lCbHVlCjEzNSAyMDYgMjUwCQlsaWdodCBza3kgYmx1ZQoxMzUgMjA2IDI1MAkJTGlnaHRTa3lCbHVlCiA3MCAxMzAgMTgwCQlzdGVlbCBibHVlCiA3MCAxMzAgMTgwCQlTdGVlbEJsdWUKMTc2IDE5NiAyMjIJCWxpZ2h0IHN0ZWVsIGJsdWUKMTc2IDE5NiAyMjIJCUxpZ2h0U3RlZWxCbHVlCjE3MyAyMTYgMjMwCQlsaWdodCBibHVlCjE3MyAyMTYgMjMwCQlMaWdodEJsdWUKMTc2IDIyNCAyMzAJCXBvd2RlciBibHVlCjE3NiAyMjQgMjMwCQlQb3dkZXJCbHVlCjE3NSAyMzggMjM4CQlwYWxlIHR1cnF1b2lzZQoxNzUgMjM4IDIzOAkJUGFsZVR1cnF1b2lzZQogIDAgMjA2IDIwOQkJZGFyayB0dXJxdW9pc2UKICAwIDIwNiAyMDkJCURhcmtUdXJxdW9pc2UKIDcyIDIwOSAyMDQJCW1lZGl1bSB0dXJxdW9pc2UKIDcyIDIwOSAyMDQJCU1lZGl1bVR1cnF1b2lzZQogNjQgMjI0IDIwOAkJdHVycXVvaXNlCiAgMCAyNTUgMjU1CQljeWFuCiAgMCAyNTUgMjU1CQlhcXVhCjIyNCAyNTUgMjU1CQlsaWdodCBjeWFuCjIyNCAyNTUgMjU1CQlMaWdodEN5YW4KIDk1IDE1OCAxNjAJCWNhZGV0IGJsdWUKIDk1IDE1OCAxNjAJCUNhZGV0Qmx1ZQoxMDIgMjA1IDE3MAkJbWVkaXVtIGFxdWFtYXJpbmUKMTAyIDIwNSAxNzAJCU1lZGl1bUFxdWFtYXJpbmUKMTI3IDI1NSAyMTIJCWFxdWFtYXJpbmUKICAwIDEwMCAgIDAJCWRhcmsgZ3JlZW4KICAwIDEwMCAgIDAJCURhcmtHcmVlbgogODUgMTA3ICA0NwkJZGFyayBvbGl2ZSBncmVlbgogODUgMTA3ICA0NwkJRGFya09saXZlR3JlZW4KMTQzIDE4OCAxNDMJCWRhcmsgc2VhIGdyZWVuCjE0MyAxODggMTQzCQlEYXJrU2VhR3JlZW4KIDQ2IDEzOSAgODcJCXNlYSBncmVlbgogNDYgMTM5ICA4NwkJU2VhR3JlZW4KIDYwIDE3OSAxMTMJCW1lZGl1bSBzZWEgZ3JlZW4KIDYwIDE3OSAxMTMJCU1lZGl1bVNlYUdyZWVuCiAzMiAxNzggMTcwCQlsaWdodCBzZWEgZ3JlZW4KIDMyIDE3OCAxNzAJCUxpZ2h0U2VhR3JlZW4KMTUyIDI1MSAxNTIJCXBhbGUgZ3JlZW4KMTUyIDI1MSAxNTIJCVBhbGVHcmVlbgogIDAgMjU1IDEyNwkJc3ByaW5nIGdyZWVuCiAgMCAyNTUgMTI3CQlTcHJpbmdHcmVlbgoxMjQgMjUyICAgMAkJbGF3biBncmVlbgoxMjQgMjUyICAgMAkJTGF3bkdyZWVuCiAgMCAyNTUgICAwCQlncmVlbgogIDAgMjU1ICAgMAkJbGltZQogIDAgMjU1ICAgMAkJeDExIGdyZWVuCiAgMCAyNTUgICAwCQlYMTFHcmVlbgogIDAgMTI4ICAgMAkJd2ViIGdyZWVuCiAgMCAxMjggICAwCQlXZWJHcmVlbgoxMjcgMjU1ICAgMAkJY2hhcnRyZXVzZQogIDAgMjUwIDE1NAkJbWVkaXVtIHNwcmluZyBncmVlbgogIDAgMjUwIDE1NAkJTWVkaXVtU3ByaW5nR3JlZW4KMTczIDI1NSAgNDcJCWdyZWVuIHllbGxvdwoxNzMgMjU1ICA0NwkJR3JlZW5ZZWxsb3cKIDUwIDIwNSAgNTAJCWxpbWUgZ3JlZW4KIDUwIDIwNSAgNTAJCUxpbWVHcmVlbgoxNTQgMjA1ICA1MAkJeWVsbG93IGdyZWVuCjE1NCAyMDUgIDUwCQlZZWxsb3dHcmVlbgogMzQgMTM5ICAzNAkJZm9yZXN0IGdyZWVuCiAzNCAxMzkgIDM0CQlGb3Jlc3RHcmVlbgoxMDcgMTQyICAzNQkJb2xpdmUgZHJhYgoxMDcgMTQyICAzNQkJT2xpdmVEcmFiCjE4OSAxODMgMTA3CQlkYXJrIGtoYWtpCjE4OSAxODMgMTA3CQlEYXJrS2hha2kKMjQwIDIzMCAxNDAJCWtoYWtpCjIzOCAyMzIgMTcwCQlwYWxlIGdvbGRlbnJvZAoyMzggMjMyIDE3MAkJUGFsZUdvbGRlbnJvZAoyNTAgMjUwIDIxMAkJbGlnaHQgZ29sZGVucm9kIHllbGxvdwoyNTAgMjUwIDIxMAkJTGlnaHRHb2xkZW5yb2RZZWxsb3cKMjU1IDI1NSAyMjQJCWxpZ2h0IHllbGxvdwoyNTUgMjU1IDIyNAkJTGlnaHRZZWxsb3cKMjU1IDI1NSAgIDAJCXllbGxvdwoyNTUgMjE1ICAgMAkJZ29sZAoyMzggMjIxIDEzMAkJbGlnaHQgZ29sZGVucm9kCjIzOCAyMjEgMTMwCQlMaWdodEdvbGRlbnJvZAoyMTggMTY1ICAzMgkJZ29sZGVucm9kCjE4NCAxMzQgIDExCQlkYXJrIGdvbGRlbnJvZAoxODQgMTM0ICAxMQkJRGFya0dvbGRlbnJvZAoxODggMTQzIDE0MwkJcm9zeSBicm93bgoxODggMTQzIDE0MwkJUm9zeUJyb3duCjIwNSAgOTIgIDkyCQlpbmRpYW4gcmVkCjIwNSAgOTIgIDkyCQlJbmRpYW5SZWQKMTM5ICA2OSAgMTkJCXNhZGRsZSBicm93bgoxMzkgIDY5ICAxOQkJU2FkZGxlQnJvd24KMTYwICA4MiAgNDUJCXNpZW5uYQoyMDUgMTMzICA2MwkJcGVydQoyMjIgMTg0IDEzNQkJYnVybHl3b29kCjI0NSAyNDUgMjIwCQliZWlnZQoyNDUgMjIyIDE3OQkJd2hlYXQKMjQ0IDE2NCAgOTYJCXNhbmR5IGJyb3duCjI0NCAxNjQgIDk2CQlTYW5keUJyb3duCjIxMCAxODAgMTQwCQl0YW4KMjEwIDEwNSAgMzAJCWNob2NvbGF0ZQoxNzggIDM0ICAzNAkJZmlyZWJyaWNrCjE2NSAgNDIgIDQyCQlicm93bgoyMzMgMTUwIDEyMgkJZGFyayBzYWxtb24KMjMzIDE1MCAxMjIJCURhcmtTYWxtb24KMjUwIDEyOCAxMTQJCXNhbG1vbgoyNTUgMTYwIDEyMgkJbGlnaHQgc2FsbW9uCjI1NSAxNjAgMTIyCQlMaWdodFNhbG1vbgoyNTUgMTY1ICAgMAkJb3JhbmdlCjI1NSAxNDAgICAwCQlkYXJrIG9yYW5nZQoyNTUgMTQwICAgMAkJRGFya09yYW5nZQoyNTUgMTI3ICA4MAkJY29yYWwKMjQwIDEyOCAxMjgJCWxpZ2h0IGNvcmFsCjI0MCAxMjggMTI4CQlMaWdodENvcmFsCjI1NSAgOTkgIDcxCQl0b21hdG8KMjU1ICA2OSAgIDAJCW9yYW5nZSByZWQKMjU1ICA2OSAgIDAJCU9yYW5nZVJlZAoyNTUgICAwICAgMAkJcmVkCjI1NSAxMDUgMTgwCQlob3QgcGluawoyNTUgMTA1IDE4MAkJSG90UGluawoyNTUgIDIwIDE0NwkJZGVlcCBwaW5rCjI1NSAgMjAgMTQ3CQlEZWVwUGluawoyNTUgMTkyIDIwMwkJcGluawoyNTUgMTgyIDE5MwkJbGlnaHQgcGluawoyNTUgMTgyIDE5MwkJTGlnaHRQaW5rCjIxOSAxMTIgMTQ3CQlwYWxlIHZpb2xldCByZWQKMjE5IDExMiAxNDcJCVBhbGVWaW9sZXRSZWQKMTc2ICA0OCAgOTYJCW1hcm9vbgoxNzYgIDQ4ICA5NgkJeDExIG1hcm9vbgoxNzYgIDQ4ICA5NgkJWDExTWFyb29uCjEyOCAgIDAgICAwCQl3ZWIgbWFyb29uCjEyOCAgIDAgICAwCQlXZWJNYXJvb24KMTk5ICAyMSAxMzMJCW1lZGl1bSB2aW9sZXQgcmVkCjE5OSAgMjEgMTMzCQlNZWRpdW1WaW9sZXRSZWQKMjA4ICAzMiAxNDQJCXZpb2xldCByZWQKMjA4ICAzMiAxNDQJCVZpb2xldFJlZAoyNTUgICAwIDI1NQkJbWFnZW50YQoyNTUgICAwIDI1NQkJZnVjaHNpYQoyMzggMTMwIDIzOAkJdmlvbGV0CjIyMSAxNjAgMjIxCQlwbHVtCjIxOCAxMTIgMjE0CQlvcmNoaWQKMTg2ICA4NSAyMTEJCW1lZGl1bSBvcmNoaWQKMTg2ICA4NSAyMTEJCU1lZGl1bU9yY2hpZAoxNTMgIDUwIDIwNAkJZGFyayBvcmNoaWQKMTUzICA1MCAyMDQJCURhcmtPcmNoaWQKMTQ4ICAgMCAyMTEJCWRhcmsgdmlvbGV0CjE0OCAgIDAgMjExCQlEYXJrVmlvbGV0CjEzOCAgNDMgMjI2CQlibHVlIHZpb2xldAoxMzggIDQzIDIyNgkJQmx1ZVZpb2xldAoxNjAgIDMyIDI0MAkJcHVycGxlCjE2MCAgMzIgMjQwCQl4MTEgcHVycGxlCjE2MCAgMzIgMjQwCQlYMTFQdXJwbGUKMTI4ICAgMCAxMjgJCXdlYiBwdXJwbGUKMTI4ICAgMCAxMjgJCVdlYlB1cnBsZQoxNDcgMTEyIDIxOQkJbWVkaXVtIHB1cnBsZQoxNDcgMTEyIDIxOQkJTWVkaXVtUHVycGxlCjIxNiAxOTEgMjE2CQl0aGlzdGxlCjI1NSAyNTAgMjUwCQlzbm93MQoyMzggMjMzIDIzMwkJc25vdzIKMjA1IDIwMSAyMDEJCXNub3czCjEzOSAxMzcgMTM3CQlzbm93NAoyNTUgMjQ1IDIzOAkJc2Vhc2hlbGwxCjIzOCAyMjkgMjIyCQlzZWFzaGVsbDIKMjA1IDE5NyAxOTEJCXNlYXNoZWxsMwoxMzkgMTM0IDEzMAkJc2Vhc2hlbGw0CjI1NSAyMzkgMjE5CQlBbnRpcXVlV2hpdGUxCjIzOCAyMjMgMjA0CQlBbnRpcXVlV2hpdGUyCjIwNSAxOTIgMTc2CQlBbnRpcXVlV2hpdGUzCjEzOSAxMzEgMTIwCQlBbnRpcXVlV2hpdGU0CjI1NSAyMjggMTk2CQliaXNxdWUxCjIzOCAyMTMgMTgzCQliaXNxdWUyCjIwNSAxODMgMTU4CQliaXNxdWUzCjEzOSAxMjUgMTA3CQliaXNxdWU0CjI1NSAyMTggMTg1CQlQZWFjaFB1ZmYxCjIzOCAyMDMgMTczCQlQZWFjaFB1ZmYyCjIwNSAxNzUgMTQ5CQlQZWFjaFB1ZmYzCjEzOSAxMTkgMTAxCQlQZWFjaFB1ZmY0CjI1NSAyMjIgMTczCQlOYXZham9XaGl0ZTEKMjM4IDIwNyAxNjEJCU5hdmFqb1doaXRlMgoyMDUgMTc5IDEzOQkJTmF2YWpvV2hpdGUzCjEzOSAxMjEgIDk0CQlOYXZham9XaGl0ZTQKMjU1IDI1MCAyMDUJCUxlbW9uQ2hpZmZvbjEKMjM4IDIzMyAxOTEJCUxlbW9uQ2hpZmZvbjIKMjA1IDIwMSAxNjUJCUxlbW9uQ2hpZmZvbjMKMTM5IDEzNyAxMTIJCUxlbW9uQ2hpZmZvbjQKMjU1IDI0OCAyMjAJCWNvcm5zaWxrMQoyMzggMjMyIDIwNQkJY29ybnNpbGsyCjIwNSAyMDAgMTc3CQljb3Juc2lsazMKMTM5IDEzNiAxMjAJCWNvcm5zaWxrNAoyNTUgMjU1IDI0MAkJaXZvcnkxCjIzOCAyMzggMjI0CQlpdm9yeTIKMjA1IDIwNSAxOTMJCWl2b3J5MwoxMzkgMTM5IDEzMQkJaXZvcnk0CjI0MCAyNTUgMjQwCQlob25leWRldzEKMjI0IDIzOCAyMjQJCWhvbmV5ZGV3MgoxOTMgMjA1IDE5MwkJaG9uZXlkZXczCjEzMSAxMzkgMTMxCQlob25leWRldzQKMjU1IDI0MCAyNDUJCUxhdmVuZGVyQmx1c2gxCjIzOCAyMjQgMjI5CQlMYXZlbmRlckJsdXNoMgoyMDUgMTkzIDE5NwkJTGF2ZW5kZXJCbHVzaDMKMTM5IDEzMSAxMzQJCUxhdmVuZGVyQmx1c2g0CjI1NSAyMjggMjI1CQlNaXN0eVJvc2UxCjIzOCAyMTMgMjEwCQlNaXN0eVJvc2UyCjIwNSAxODMgMTgxCQlNaXN0eVJvc2UzCjEzOSAxMjUgMTIzCQlNaXN0eVJvc2U0CjI0MCAyNTUgMjU1CQlhenVyZTEKMjI0IDIzOCAyMzgJCWF6dXJlMgoxOTMgMjA1IDIwNQkJYXp1cmUzCjEzMSAxMzkgMTM5CQlhenVyZTQKMTMxIDExMSAyNTUJCVNsYXRlQmx1ZTEKMTIyIDEwMyAyMzgJCVNsYXRlQmx1ZTIKMTA1ICA4OSAyMDUJCVNsYXRlQmx1ZTMKIDcxICA2MCAxMzkJCVNsYXRlQmx1ZTQKIDcyIDExOCAyNTUJCVJveWFsQmx1ZTEKIDY3IDExMCAyMzgJCVJveWFsQmx1ZTIKIDU4ICA5NSAyMDUJCVJveWFsQmx1ZTMKIDM5ICA2NCAxMzkJCVJveWFsQmx1ZTQKICAwICAgMCAyNTUJCWJsdWUxCiAgMCAgIDAgMjM4CQlibHVlMgogIDAgICAwIDIwNQkJYmx1ZTMKICAwICAgMCAxMzkJCWJsdWU0CiAzMCAxNDQgMjU1CQlEb2RnZXJCbHVlMQogMjggMTM0IDIzOAkJRG9kZ2VyQmx1ZTIKIDI0IDExNiAyMDUJCURvZGdlckJsdWUzCiAxNiAgNzggMTM5CQlEb2RnZXJCbHVlNAogOTkgMTg0IDI1NQkJU3RlZWxCbHVlMQogOTIgMTcyIDIzOAkJU3RlZWxCbHVlMgogNzkgMTQ4IDIwNQkJU3RlZWxCbHVlMwogNTQgMTAwIDEzOQkJU3RlZWxCbHVlNAogIDAgMTkxIDI1NQkJRGVlcFNreUJsdWUxCiAgMCAxNzggMjM4CQlEZWVwU2t5Qmx1ZTIKICAwIDE1NCAyMDUJCURlZXBTa3lCbHVlMwogIDAgMTA0IDEzOQkJRGVlcFNreUJsdWU0CjEzNSAyMDYgMjU1CQlTa3lCbHVlMQoxMjYgMTkyIDIzOAkJU2t5Qmx1ZTIKMTA4IDE2NiAyMDUJCVNreUJsdWUzCiA3NCAxMTIgMTM5CQlTa3lCbHVlNAoxNzYgMjI2IDI1NQkJTGlnaHRTa3lCbHVlMQoxNjQgMjExIDIzOAkJTGlnaHRTa3lCbHVlMgoxNDEgMTgyIDIwNQkJTGlnaHRTa3lCbHVlMwogOTYgMTIzIDEzOQkJTGlnaHRTa3lCbHVlNAoxOTggMjI2IDI1NQkJU2xhdGVHcmF5MQoxODUgMjExIDIzOAkJU2xhdGVHcmF5MgoxNTkgMTgyIDIwNQkJU2xhdGVHcmF5MwoxMDggMTIzIDEzOQkJU2xhdGVHcmF5NAoyMDIgMjI1IDI1NQkJTGlnaHRTdGVlbEJsdWUxCjE4OCAyMTAgMjM4CQlMaWdodFN0ZWVsQmx1ZTIKMTYyIDE4MSAyMDUJCUxpZ2h0U3RlZWxCbHVlMwoxMTAgMTIzIDEzOQkJTGlnaHRTdGVlbEJsdWU0CjE5MSAyMzkgMjU1CQlMaWdodEJsdWUxCjE3OCAyMjMgMjM4CQlMaWdodEJsdWUyCjE1NCAxOTIgMjA1CQlMaWdodEJsdWUzCjEwNCAxMzEgMTM5CQlMaWdodEJsdWU0CjIyNCAyNTUgMjU1CQlMaWdodEN5YW4xCjIwOSAyMzggMjM4CQlMaWdodEN5YW4yCjE4MCAyMDUgMjA1CQlMaWdodEN5YW4zCjEyMiAxMzkgMTM5CQlMaWdodEN5YW40CjE4NyAyNTUgMjU1CQlQYWxlVHVycXVvaXNlMQoxNzQgMjM4IDIzOAkJUGFsZVR1cnF1b2lzZTIKMTUwIDIwNSAyMDUJCVBhbGVUdXJxdW9pc2UzCjEwMiAxMzkgMTM5CQlQYWxlVHVycXVvaXNlNAoxNTIgMjQ1IDI1NQkJQ2FkZXRCbHVlMQoxNDIgMjI5IDIzOAkJQ2FkZXRCbHVlMgoxMjIgMTk3IDIwNQkJQ2FkZXRCbHVlMwogODMgMTM0IDEzOQkJQ2FkZXRCbHVlNAogIDAgMjQ1IDI1NQkJdHVycXVvaXNlMQogIDAgMjI5IDIzOAkJdHVycXVvaXNlMgogIDAgMTk3IDIwNQkJdHVycXVvaXNlMwogIDAgMTM0IDEzOQkJdHVycXVvaXNlNAogIDAgMjU1IDI1NQkJY3lhbjEKICAwIDIzOCAyMzgJCWN5YW4yCiAgMCAyMDUgMjA1CQljeWFuMwogIDAgMTM5IDEzOQkJY3lhbjQKMTUxIDI1NSAyNTUJCURhcmtTbGF0ZUdyYXkxCjE0MSAyMzggMjM4CQlEYXJrU2xhdGVHcmF5MgoxMjEgMjA1IDIwNQkJRGFya1NsYXRlR3JheTMKIDgyIDEzOSAxMzkJCURhcmtTbGF0ZUdyYXk0CjEyNyAyNTUgMjEyCQlhcXVhbWFyaW5lMQoxMTggMjM4IDE5OAkJYXF1YW1hcmluZTIKMTAyIDIwNSAxNzAJCWFxdWFtYXJpbmUzCiA2OSAxMzkgMTE2CQlhcXVhbWFyaW5lNAoxOTMgMjU1IDE5MwkJRGFya1NlYUdyZWVuMQoxODAgMjM4IDE4MAkJRGFya1NlYUdyZWVuMgoxNTUgMjA1IDE1NQkJRGFya1NlYUdyZWVuMwoxMDUgMTM5IDEwNQkJRGFya1NlYUdyZWVuNAogODQgMjU1IDE1OQkJU2VhR3JlZW4xCiA3OCAyMzggMTQ4CQlTZWFHcmVlbjIKIDY3IDIwNSAxMjgJCVNlYUdyZWVuMwogNDYgMTM5ICA4NwkJU2VhR3JlZW40CjE1NCAyNTUgMTU0CQlQYWxlR3JlZW4xCjE0NCAyMzggMTQ0CQlQYWxlR3JlZW4yCjEyNCAyMDUgMTI0CQlQYWxlR3JlZW4zCiA4NCAxMzkgIDg0CQlQYWxlR3JlZW40CiAgMCAyNTUgMTI3CQlTcHJpbmdHcmVlbjEKICAwIDIzOCAxMTgJCVNwcmluZ0dyZWVuMgogIDAgMjA1IDEwMgkJU3ByaW5nR3JlZW4zCiAgMCAxMzkgIDY5CQlTcHJpbmdHcmVlbjQKICAwIDI1NSAgIDAJCWdyZWVuMQogIDAgMjM4ICAgMAkJZ3JlZW4yCiAgMCAyMDUgICAwCQlncmVlbjMKICAwIDEzOSAgIDAJCWdyZWVuNAoxMjcgMjU1ICAgMAkJY2hhcnRyZXVzZTEKMTE4IDIzOCAgIDAJCWNoYXJ0cmV1c2UyCjEwMiAyMDUgICAwCQljaGFydHJldXNlMwogNjkgMTM5ICAgMAkJY2hhcnRyZXVzZTQKMTkyIDI1NSAgNjIJCU9saXZlRHJhYjEKMTc5IDIzOCAgNTgJCU9saXZlRHJhYjIKMTU0IDIwNSAgNTAJCU9saXZlRHJhYjMKMTA1IDEzOSAgMzQJCU9saXZlRHJhYjQKMjAyIDI1NSAxMTIJCURhcmtPbGl2ZUdyZWVuMQoxODggMjM4IDEwNAkJRGFya09saXZlR3JlZW4yCjE2MiAyMDUgIDkwCQlEYXJrT2xpdmVHcmVlbjMKMTEwIDEzOSAgNjEJCURhcmtPbGl2ZUdyZWVuNAoyNTUgMjQ2IDE0MwkJa2hha2kxCjIzOCAyMzAgMTMzCQlraGFraTIKMjA1IDE5OCAxMTUJCWtoYWtpMwoxMzkgMTM0ICA3OAkJa2hha2k0CjI1NSAyMzYgMTM5CQlMaWdodEdvbGRlbnJvZDEKMjM4IDIyMCAxMzAJCUxpZ2h0R29sZGVucm9kMgoyMDUgMTkwIDExMgkJTGlnaHRHb2xkZW5yb2QzCjEzOSAxMjkgIDc2CQlMaWdodEdvbGRlbnJvZDQKMjU1IDI1NSAyMjQJCUxpZ2h0WWVsbG93MQoyMzggMjM4IDIwOQkJTGlnaHRZZWxsb3cyCjIwNSAyMDUgMTgwCQlMaWdodFllbGxvdzMKMTM5IDEzOSAxMjIJCUxpZ2h0WWVsbG93NAoyNTUgMjU1ICAgMAkJeWVsbG93MQoyMzggMjM4ICAgMAkJeWVsbG93MgoyMDUgMjA1ICAgMAkJeWVsbG93MwoxMzkgMTM5ICAgMAkJeWVsbG93NAoyNTUgMjE1ICAgMAkJZ29sZDEKMjM4IDIwMSAgIDAJCWdvbGQyCjIwNSAxNzMgICAwCQlnb2xkMwoxMzkgMTE3ICAgMAkJZ29sZDQKMjU1IDE5MyAgMzcJCWdvbGRlbnJvZDEKMjM4IDE4MCAgMzQJCWdvbGRlbnJvZDIKMjA1IDE1NSAgMjkJCWdvbGRlbnJvZDMKMTM5IDEwNSAgMjAJCWdvbGRlbnJvZDQKMjU1IDE4NSAgMTUJCURhcmtHb2xkZW5yb2QxCjIzOCAxNzMgIDE0CQlEYXJrR29sZGVucm9kMgoyMDUgMTQ5ICAxMgkJRGFya0dvbGRlbnJvZDMKMTM5IDEwMSAgIDgJCURhcmtHb2xkZW5yb2Q0CjI1NSAxOTMgMTkzCQlSb3N5QnJvd24xCjIzOCAxODAgMTgwCQlSb3N5QnJvd24yCjIwNSAxNTUgMTU1CQlSb3N5QnJvd24zCjEzOSAxMDUgMTA1CQlSb3N5QnJvd240CjI1NSAxMDYgMTA2CQlJbmRpYW5SZWQxCjIzOCAgOTkgIDk5CQlJbmRpYW5SZWQyCjIwNSAgODUgIDg1CQlJbmRpYW5SZWQzCjEzOSAgNTggIDU4CQlJbmRpYW5SZWQ0CjI1NSAxMzAgIDcxCQlzaWVubmExCjIzOCAxMjEgIDY2CQlzaWVubmEyCjIwNSAxMDQgIDU3CQlzaWVubmEzCjEzOSAgNzEgIDM4CQlzaWVubmE0CjI1NSAyMTEgMTU1CQlidXJseXdvb2QxCjIzOCAxOTcgMTQ1CQlidXJseXdvb2QyCjIwNSAxNzAgMTI1CQlidXJseXdvb2QzCjEzOSAxMTUgIDg1CQlidXJseXdvb2Q0CjI1NSAyMzEgMTg2CQl3aGVhdDEKMjM4IDIxNiAxNzQJCXdoZWF0MgoyMDUgMTg2IDE1MAkJd2hlYXQzCjEzOSAxMjYgMTAyCQl3aGVhdDQKMjU1IDE2NSAgNzkJCXRhbjEKMjM4IDE1NCAgNzMJCXRhbjIKMjA1IDEzMyAgNjMJCXRhbjMKMTM5ICA5MCAgNDMJCXRhbjQKMjU1IDEyNyAgMzYJCWNob2NvbGF0ZTEKMjM4IDExOCAgMzMJCWNob2NvbGF0ZTIKMjA1IDEwMiAgMjkJCWNob2NvbGF0ZTMKMTM5ICA2OSAgMTkJCWNob2NvbGF0ZTQKMjU1ICA0OCAgNDgJCWZpcmVicmljazEKMjM4ICA0NCAgNDQJCWZpcmVicmljazIKMjA1ICAzOCAgMzgJCWZpcmVicmljazMKMTM5ICAyNiAgMjYJCWZpcmVicmljazQKMjU1ICA2NCAgNjQJCWJyb3duMQoyMzggIDU5ICA1OQkJYnJvd24yCjIwNSAgNTEgIDUxCQlicm93bjMKMTM5ICAzNSAgMzUJCWJyb3duNAoyNTUgMTQwIDEwNQkJc2FsbW9uMQoyMzggMTMwICA5OAkJc2FsbW9uMgoyMDUgMTEyICA4NAkJc2FsbW9uMwoxMzkgIDc2ICA1NwkJc2FsbW9uNAoyNTUgMTYwIDEyMgkJTGlnaHRTYWxtb24xCjIzOCAxNDkgMTE0CQlMaWdodFNhbG1vbjIKMjA1IDEyOSAgOTgJCUxpZ2h0U2FsbW9uMwoxMzkgIDg3ICA2NgkJTGlnaHRTYWxtb240CjI1NSAxNjUgICAwCQlvcmFuZ2UxCjIzOCAxNTQgICAwCQlvcmFuZ2UyCjIwNSAxMzMgICAwCQlvcmFuZ2UzCjEzOSAgOTAgICAwCQlvcmFuZ2U0CjI1NSAxMjcgICAwCQlEYXJrT3JhbmdlMQoyMzggMTE4ICAgMAkJRGFya09yYW5nZTIKMjA1IDEwMiAgIDAJCURhcmtPcmFuZ2UzCjEzOSAgNjkgICAwCQlEYXJrT3JhbmdlNAoyNTUgMTE0ICA4NgkJY29yYWwxCjIzOCAxMDYgIDgwCQljb3JhbDIKMjA1ICA5MSAgNjkJCWNvcmFsMwoxMzkgIDYyICA0NwkJY29yYWw0CjI1NSAgOTkgIDcxCQl0b21hdG8xCjIzOCAgOTIgIDY2CQl0b21hdG8yCjIwNSAgNzkgIDU3CQl0b21hdG8zCjEzOSAgNTQgIDM4CQl0b21hdG80CjI1NSAgNjkgICAwCQlPcmFuZ2VSZWQxCjIzOCAgNjQgICAwCQlPcmFuZ2VSZWQyCjIwNSAgNTUgICAwCQlPcmFuZ2VSZWQzCjEzOSAgMzcgICAwCQlPcmFuZ2VSZWQ0CjI1NSAgIDAgICAwCQlyZWQxCjIzOCAgIDAgICAwCQlyZWQyCjIwNSAgIDAgICAwCQlyZWQzCjEzOSAgIDAgICAwCQlyZWQ0CjI1NSAgMjAgMTQ3CQlEZWVwUGluazEKMjM4ICAxOCAxMzcJCURlZXBQaW5rMgoyMDUgIDE2IDExOAkJRGVlcFBpbmszCjEzOSAgMTAgIDgwCQlEZWVwUGluazQKMjU1IDExMCAxODAJCUhvdFBpbmsxCjIzOCAxMDYgMTY3CQlIb3RQaW5rMgoyMDUgIDk2IDE0NAkJSG90UGluazMKMTM5ICA1OCAgOTgJCUhvdFBpbms0CjI1NSAxODEgMTk3CQlwaW5rMQoyMzggMTY5IDE4NAkJcGluazIKMjA1IDE0NSAxNTgJCXBpbmszCjEzOSAgOTkgMTA4CQlwaW5rNAoyNTUgMTc0IDE4NQkJTGlnaHRQaW5rMQoyMzggMTYyIDE3MwkJTGlnaHRQaW5rMgoyMDUgMTQwIDE0OQkJTGlnaHRQaW5rMwoxMzkgIDk1IDEwMQkJTGlnaHRQaW5rNAoyNTUgMTMwIDE3MQkJUGFsZVZpb2xldFJlZDEKMjM4IDEyMSAxNTkJCVBhbGVWaW9sZXRSZWQyCjIwNSAxMDQgMTM3CQlQYWxlVmlvbGV0UmVkMwoxMzkgIDcxICA5MwkJUGFsZVZpb2xldFJlZDQKMjU1ICA1MiAxNzkJCW1hcm9vbjEKMjM4ICA0OCAxNjcJCW1hcm9vbjIKMjA1ICA0MSAxNDQJCW1hcm9vbjMKMTM5ICAyOCAgOTgJCW1hcm9vbjQKMjU1ICA2MiAxNTAJCVZpb2xldFJlZDEKMjM4ICA1OCAxNDAJCVZpb2xldFJlZDIKMjA1ICA1MCAxMjAJCVZpb2xldFJlZDMKMTM5ICAzNCAgODIJCVZpb2xldFJlZDQKMjU1ICAgMCAyNTUJCW1hZ2VudGExCjIzOCAgIDAgMjM4CQltYWdlbnRhMgoyMDUgICAwIDIwNQkJbWFnZW50YTMKMTM5ICAgMCAxMzkJCW1hZ2VudGE0CjI1NSAxMzEgMjUwCQlvcmNoaWQxCjIzOCAxMjIgMjMzCQlvcmNoaWQyCjIwNSAxMDUgMjAxCQlvcmNoaWQzCjEzOSAgNzEgMTM3CQlvcmNoaWQ0CjI1NSAxODcgMjU1CQlwbHVtMQoyMzggMTc0IDIzOAkJcGx1bTIKMjA1IDE1MCAyMDUJCXBsdW0zCjEzOSAxMDIgMTM5CQlwbHVtNAoyMjQgMTAyIDI1NQkJTWVkaXVtT3JjaGlkMQoyMDkgIDk1IDIzOAkJTWVkaXVtT3JjaGlkMgoxODAgIDgyIDIwNQkJTWVkaXVtT3JjaGlkMwoxMjIgIDU1IDEzOQkJTWVkaXVtT3JjaGlkNAoxOTEgIDYyIDI1NQkJRGFya09yY2hpZDEKMTc4ICA1OCAyMzgJCURhcmtPcmNoaWQyCjE1NCAgNTAgMjA1CQlEYXJrT3JjaGlkMwoxMDQgIDM0IDEzOQkJRGFya09yY2hpZDQKMTU1ICA0OCAyNTUJCXB1cnBsZTEKMTQ1ICA0NCAyMzgJCXB1cnBsZTIKMTI1ICAzOCAyMDUJCXB1cnBsZTMKIDg1ICAyNiAxMzkJCXB1cnBsZTQKMTcxIDEzMCAyNTUJCU1lZGl1bVB1cnBsZTEKMTU5IDEyMSAyMzgJCU1lZGl1bVB1cnBsZTIKMTM3IDEwNCAyMDUJCU1lZGl1bVB1cnBsZTMKIDkzICA3MSAxMzkJCU1lZGl1bVB1cnBsZTQKMjU1IDIyNSAyNTUJCXRoaXN0bGUxCjIzOCAyMTAgMjM4CQl0aGlzdGxlMgoyMDUgMTgxIDIwNQkJdGhpc3RsZTMKMTM5IDEyMyAxMzkJCXRoaXN0bGU0CiAgMCAgIDAgICAwCQlncmF5MAogIDAgICAwICAgMAkJZ3JleTAKICAzICAgMyAgIDMJCWdyYXkxCiAgMyAgIDMgICAzCQlncmV5MQogIDUgICA1ICAgNQkJZ3JheTIKICA1ICAgNSAgIDUJCWdyZXkyCiAgOCAgIDggICA4CQlncmF5MwogIDggICA4ICAgOAkJZ3JleTMKIDEwICAxMCAgMTAJCWdyYXk0CiAxMCAgMTAgIDEwCQlncmV5NAogMTMgIDEzICAxMwkJZ3JheTUKIDEzICAxMyAgMTMJCWdyZXk1CiAxNSAgMTUgIDE1CQlncmF5NgogMTUgIDE1ICAxNQkJZ3JleTYKIDE4ICAxOCAgMTgJCWdyYXk3CiAxOCAgMTggIDE4CQlncmV5NwogMjAgIDIwICAyMAkJZ3JheTgKIDIwICAyMCAgMjAJCWdyZXk4CiAyMyAgMjMgIDIzCQlncmF5OQogMjMgIDIzICAyMwkJZ3JleTkKIDI2ICAyNiAgMjYJCWdyYXkxMAogMjYgIDI2ICAyNgkJZ3JleTEwCiAyOCAgMjggIDI4CQlncmF5MTEKIDI4ICAyOCAgMjgJCWdyZXkxMQogMzEgIDMxICAzMQkJZ3JheTEyCiAzMSAgMzEgIDMxCQlncmV5MTIKIDMzICAzMyAgMzMJCWdyYXkxMwogMzMgIDMzICAzMwkJZ3JleTEzCiAzNiAgMzYgIDM2CQlncmF5MTQKIDM2ICAzNiAgMzYJCWdyZXkxNAogMzggIDM4ICAzOAkJZ3JheTE1CiAzOCAgMzggIDM4CQlncmV5MTUKIDQxICA0MSAgNDEJCWdyYXkxNgogNDEgIDQxICA0MQkJZ3JleTE2CiA0MyAgNDMgIDQzCQlncmF5MTcKIDQzICA0MyAgNDMJCWdyZXkxNwogNDYgIDQ2ICA0NgkJZ3JheTE4CiA0NiAgNDYgIDQ2CQlncmV5MTgKIDQ4ICA0OCAgNDgJCWdyYXkxOQogNDggIDQ4ICA0OAkJZ3JleTE5CiA1MSAgNTEgIDUxCQlncmF5MjAKIDUxICA1MSAgNTEJCWdyZXkyMAogNTQgIDU0ICA1NAkJZ3JheTIxCiA1NCAgNTQgIDU0CQlncmV5MjEKIDU2ICA1NiAgNTYJCWdyYXkyMgogNTYgIDU2ICA1NgkJZ3JleTIyCiA1OSAgNTkgIDU5CQlncmF5MjMKIDU5ICA1OSAgNTkJCWdyZXkyMwogNjEgIDYxICA2MQkJZ3JheTI0CiA2MSAgNjEgIDYxCQlncmV5MjQKIDY0ICA2NCAgNjQJCWdyYXkyNQogNjQgIDY0ICA2NAkJZ3JleTI1CiA2NiAgNjYgIDY2CQlncmF5MjYKIDY2ICA2NiAgNjYJCWdyZXkyNgogNjkgIDY5ICA2OQkJZ3JheTI3CiA2OSAgNjkgIDY5CQlncmV5MjcKIDcxICA3MSAgNzEJCWdyYXkyOAogNzEgIDcxICA3MQkJZ3JleTI4CiA3NCAgNzQgIDc0CQlncmF5MjkKIDc0ICA3NCAgNzQJCWdyZXkyOQogNzcgIDc3ICA3NwkJZ3JheTMwCiA3NyAgNzcgIDc3CQlncmV5MzAKIDc5ICA3OSAgNzkJCWdyYXkzMQogNzkgIDc5ICA3OQkJZ3JleTMxCiA4MiAgODIgIDgyCQlncmF5MzIKIDgyICA4MiAgODIJCWdyZXkzMgogODQgIDg0ICA4NAkJZ3JheTMzCiA4NCAgODQgIDg0CQlncmV5MzMKIDg3ICA4NyAgODcJCWdyYXkzNAogODcgIDg3ICA4NwkJZ3JleTM0CiA4OSAgODkgIDg5CQlncmF5MzUKIDg5ICA4OSAgODkJCWdyZXkzNQogOTIgIDkyICA5MgkJZ3JheTM2CiA5MiAgOTIgIDkyCQlncmV5MzYKIDk0ICA5NCAgOTQJCWdyYXkzNwogOTQgIDk0ICA5NAkJZ3JleTM3CiA5NyAgOTcgIDk3CQlncmF5MzgKIDk3ICA5NyAgOTcJCWdyZXkzOAogOTkgIDk5ICA5OQkJZ3JheTM5CiA5OSAgOTkgIDk5CQlncmV5MzkKMTAyIDEwMiAxMDIJCWdyYXk0MAoxMDIgMTAyIDEwMgkJZ3JleTQwCjEwNSAxMDUgMTA1CQlncmF5NDEKMTA1IDEwNSAxMDUJCWdyZXk0MQoxMDcgMTA3IDEwNwkJZ3JheTQyCjEwNyAxMDcgMTA3CQlncmV5NDIKMTEwIDExMCAxMTAJCWdyYXk0MwoxMTAgMTEwIDExMAkJZ3JleTQzCjExMiAxMTIgMTEyCQlncmF5NDQKMTEyIDExMiAxMTIJCWdyZXk0NAoxMTUgMTE1IDExNQkJZ3JheTQ1CjExNSAxMTUgMTE1CQlncmV5NDUKMTE3IDExNyAxMTcJCWdyYXk0NgoxMTcgMTE3IDExNwkJZ3JleTQ2CjEyMCAxMjAgMTIwCQlncmF5NDcKMTIwIDEyMCAxMjAJCWdyZXk0NwoxMjIgMTIyIDEyMgkJZ3JheTQ4CjEyMiAxMjIgMTIyCQlncmV5NDgKMTI1IDEyNSAxMjUJCWdyYXk0OQoxMjUgMTI1IDEyNQkJZ3JleTQ5CjEyNyAxMjcgMTI3CQlncmF5NTAKMTI3IDEyNyAxMjcJCWdyZXk1MAoxMzAgMTMwIDEzMAkJZ3JheTUxCjEzMCAxMzAgMTMwCQlncmV5NTEKMTMzIDEzMyAxMzMJCWdyYXk1MgoxMzMgMTMzIDEzMwkJZ3JleTUyCjEzNSAxMzUgMTM1CQlncmF5NTMKMTM1IDEzNSAxMzUJCWdyZXk1MwoxMzggMTM4IDEzOAkJZ3JheTU0CjEzOCAxMzggMTM4CQlncmV5NTQKMTQwIDE0MCAxNDAJCWdyYXk1NQoxNDAgMTQwIDE0MAkJZ3JleTU1CjE0MyAxNDMgMTQzCQlncmF5NTYKMTQzIDE0MyAxNDMJCWdyZXk1NgoxNDUgMTQ1IDE0NQkJZ3JheTU3CjE0NSAxNDUgMTQ1CQlncmV5NTcKMTQ4IDE0OCAxNDgJCWdyYXk1OAoxNDggMTQ4IDE0OAkJZ3JleTU4CjE1MCAxNTAgMTUwCQlncmF5NTkKMTUwIDE1MCAxNTAJCWdyZXk1OQoxNTMgMTUzIDE1MwkJZ3JheTYwCjE1MyAxNTMgMTUzCQlncmV5NjAKMTU2IDE1NiAxNTYJCWdyYXk2MQoxNTYgMTU2IDE1NgkJZ3JleTYxCjE1OCAxNTggMTU4CQlncmF5NjIKMTU4IDE1OCAxNTgJCWdyZXk2MgoxNjEgMTYxIDE2MQkJZ3JheTYzCjE2MSAxNjEgMTYxCQlncmV5NjMKMTYzIDE2MyAxNjMJCWdyYXk2NAoxNjMgMTYzIDE2MwkJZ3JleTY0CjE2NiAxNjYgMTY2CQlncmF5NjUKMTY2IDE2NiAxNjYJCWdyZXk2NQoxNjggMTY4IDE2OAkJZ3JheTY2CjE2OCAxNjggMTY4CQlncmV5NjYKMTcxIDE3MSAxNzEJCWdyYXk2NwoxNzEgMTcxIDE3MQkJZ3JleTY3CjE3MyAxNzMgMTczCQlncmF5NjgKMTczIDE3MyAxNzMJCWdyZXk2OAoxNzYgMTc2IDE3NgkJZ3JheTY5CjE3NiAxNzYgMTc2CQlncmV5NjkKMTc5IDE3OSAxNzkJCWdyYXk3MAoxNzkgMTc5IDE3OQkJZ3JleTcwCjE4MSAxODEgMTgxCQlncmF5NzEKMTgxIDE4MSAxODEJCWdyZXk3MQoxODQgMTg0IDE4NAkJZ3JheTcyCjE4NCAxODQgMTg0CQlncmV5NzIKMTg2IDE4NiAxODYJCWdyYXk3MwoxODYgMTg2IDE4NgkJZ3JleTczCjE4OSAxODkgMTg5CQlncmF5NzQKMTg5IDE4OSAxODkJCWdyZXk3NAoxOTEgMTkxIDE5MQkJZ3JheTc1CjE5MSAxOTEgMTkxCQlncmV5NzUKMTk0IDE5NCAxOTQJCWdyYXk3NgoxOTQgMTk0IDE5NAkJZ3JleTc2CjE5NiAxOTYgMTk2CQlncmF5NzcKMTk2IDE5NiAxOTYJCWdyZXk3NwoxOTkgMTk5IDE5OQkJZ3JheTc4CjE5OSAxOTkgMTk5CQlncmV5NzgKMjAxIDIwMSAyMDEJCWdyYXk3OQoyMDEgMjAxIDIwMQkJZ3JleTc5CjIwNCAyMDQgMjA0CQlncmF5ODAKMjA0IDIwNCAyMDQJCWdyZXk4MAoyMDcgMjA3IDIwNwkJZ3JheTgxCjIwNyAyMDcgMjA3CQlncmV5ODEKMjA5IDIwOSAyMDkJCWdyYXk4MgoyMDkgMjA5IDIwOQkJZ3JleTgyCjIxMiAyMTIgMjEyCQlncmF5ODMKMjEyIDIxMiAyMTIJCWdyZXk4MwoyMTQgMjE0IDIxNAkJZ3JheTg0CjIxNCAyMTQgMjE0CQlncmV5ODQKMjE3IDIxNyAyMTcJCWdyYXk4NQoyMTcgMjE3IDIxNwkJZ3JleTg1CjIxOSAyMTkgMjE5CQlncmF5ODYKMjE5IDIxOSAyMTkJCWdyZXk4NgoyMjIgMjIyIDIyMgkJZ3JheTg3CjIyMiAyMjIgMjIyCQlncmV5ODcKMjI0IDIyNCAyMjQJCWdyYXk4OAoyMjQgMjI0IDIyNAkJZ3JleTg4CjIyNyAyMjcgMjI3CQlncmF5ODkKMjI3IDIyNyAyMjcJCWdyZXk4OQoyMjkgMjI5IDIyOQkJZ3JheTkwCjIyOSAyMjkgMjI5CQlncmV5OTAKMjMyIDIzMiAyMzIJCWdyYXk5MQoyMzIgMjMyIDIzMgkJZ3JleTkxCjIzNSAyMzUgMjM1CQlncmF5OTIKMjM1IDIzNSAyMzUJCWdyZXk5MgoyMzcgMjM3IDIzNwkJZ3JheTkzCjIzNyAyMzcgMjM3CQlncmV5OTMKMjQwIDI0MCAyNDAJCWdyYXk5NAoyNDAgMjQwIDI0MAkJZ3JleTk0CjI0MiAyNDIgMjQyCQlncmF5OTUKMjQyIDI0MiAyNDIJCWdyZXk5NQoyNDUgMjQ1IDI0NQkJZ3JheTk2CjI0NSAyNDUgMjQ1CQlncmV5OTYKMjQ3IDI0NyAyNDcJCWdyYXk5NwoyNDcgMjQ3IDI0NwkJZ3JleTk3CjI1MCAyNTAgMjUwCQlncmF5OTgKMjUwIDI1MCAyNTAJCWdyZXk5OAoyNTIgMjUyIDI1MgkJZ3JheTk5CjI1MiAyNTIgMjUyCQlncmV5OTkKMjU1IDI1NSAyNTUJCWdyYXkxMDAKMjU1IDI1NSAyNTUJCWdyZXkxMDAKMTY5IDE2OSAxNjkJCWRhcmsgZ3JleQoxNjkgMTY5IDE2OQkJRGFya0dyZXkKMTY5IDE2OSAxNjkJCWRhcmsgZ3JheQoxNjkgMTY5IDE2OQkJRGFya0dy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AAD/rwAA/9cAAP//AF8AAABfAF8AXwCHAF8ArwBfANcAXwD/AF9fAABfX18AX1+HAF9frwBfX9cAX1//AF+HAABfh18AX4eHAF+HrwBfh9cAX4f/AF+vAABfr18AX6+HAF+vrwBfr9cAX6//AF/XAABf118AX9eHAF/XrwBf19cAX9f/AF//AABf/18AX/+HAF//rwBf/9cAX///AIcAAACHAF8AhwCHAIcArwCHANcAhwD/AIdfAACHX18Ah1+HAIdfrwCHX9cAh1//AIeHAACHh18Ah4eHAIeHrwCHh9cAh4f/AIevAACHr18Ah6+HAIevrwCHr9cAh6//AIfXAACH118Ah9eHAIfXrwCH19cAh9f/AIf/AACH/18Ah/+HAIf/rwCH/9cAh///AK8AAACvAF8ArwCHAK8ArwCvANcArwD/AK9fAACvX18Ar1+HAK9frwCvX9cAr1//AK+HAACvh18Ar4eHAK+HrwCvh9cAr4f/AK+vAACvr18Ar6+HAK+vrwCvr9cAr6//AK/XAACv118Ar9eHAK/XrwCv19cAr9f/AK//AACv/18Ar/+HAK//rwCv/9cAr///ANcAAADXAF8A1wCHANcArwDXANcA1wD/ANdfAADXX18A11+HANdfrwDXX9cA11//ANeHAADXh18A14eHANeHrwDXh9cA14f/ANevAADXr18A16+HANevrwDXr9cA16//ANfXAADX118A19eHANfXrwDX19cA19f/ANf/AADX/18A1/+HANf/rwDX/9cA1///AP8AAAD/AF8A/wCHAP8ArwD/ANcA/wD/AP9fAAD/X18A/1+HAP9frwD/X9cA/1//AP+HAAD/h18A/4eHAP+HrwD/h9cA/4f/AP+vAAD/r18A/6+HAP+vrwD/r9cA/6//AP/XAAD/118A/9eHAP/XrwD/19cA/9f/AP//AAD//18A//+HAP//rwD//9cA////AAgICAASEhIAHBwcACYmJgAwMDAAOjo6AERERABOTk4AWFhYAGJiYgBsbGwAdnZ2AICAgACKiooAlJSUAJ6engCoqKgAsrKyALy8vADGxsYA0NDQANra2gDk5OQA7u7uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAEAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAABABEAAQABAAEAEgATABQAFQAWABcAGAABAAEAGQAaAAEAGwAcAB0AHgAfAAEAIAABACEAIgAjACQAJQAmACcAKAApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKgABACsAAQAsAC0ALgAvADAAMQAyADMANAA1ADYAMAAxADIAMwA0ADUANgAwADEAMgAzADQANQA2ADAAMQAyADMANAA1ADYAMAAxADIAMwA0ADUANgAwADEAMgAzADQANQA2ADAANwA4ADgAOAA4ADgAOAA4ADgAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQApACkAOQABAAEAOgA7AAEAPAA9AD4AAQABAAEAAQABAAEAPwABAAEAQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAAEATgBPAFAAUQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAUgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAUwABAAEAAQABAAEAAQABAAEAVABVAAEAVgABAFcAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApAFgAKQApACkAKQBZAFoAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAWwApAFwAXQABAAEAAQABAAEAAQABAAEAAQBeAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAF8AAQBgAGEAYgABAAEAAQABAAEAAQBjAAEAAQABAAEAAQBkAFUAZQABAGYAZwABAAEAaABpAAEAAQABAAEAAQABAGoAawBsAG0AbgBvAHAAcQByAHMAdAABAHUAdQB1AHYAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAdwApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQB3AAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAeAB5ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAgABAAEAAQABAAEAAQACAAEAAQABAAEAAQACAAIAAgACAAIAAgACAAIAAgACAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAMAAQABAAEAAQADAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAQAEAAEABAAEAAEABAAEAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABQAFAAUABQAFAAUAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQABAAEAAQAAQAAAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAUAAQAEAAQABAAEAAQABAABAAEABAAEAAEABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAFAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAABAAQABAAEAAQABAAEAAQABAAEAAEABAAEAAQAAQAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAUABQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABQAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAYABAABAAYABgAGAAQABAAEAAQABAAEAAQABAAGAAYABgAGAAQABgAGAAEABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAGAAYAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQAHAAYABgAEAAQABAAEAAEAAQAGAAYAAQABAAYABgAEAAEAAQABAAEAAQABAAEAAQABAAcAAQABAAEAAQABAAEAAQABAAEAAQAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQABAAQABAAGAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEABgAGAAYABAAEAAEAAQABAAEABAAEAAEAAQAEAAQABAABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAYABgAGAAQABAAEAAQABAABAAQABAAGAAEABgAGAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAEABAAGAAYAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQAHAAQABgAEAAQABAAEAAEAAQAGAAYAAQABAAYABgAEAAEAAQABAAEAAQABAAEABAAEAAcAAQABAAEAAQABAAEAAQABAAEAAQAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABwAGAAQABgAGAAEAAQABAAYABgAGAAEABgAGAAYABAABAAEAAQABAAEAAQABAAEAAQAHAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAGAAYABgAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAQABAAEAAYABgAGAAYAAQAEAAQABAABAAQABAAEAAQAAQABAAEAAQABAAEAAQAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAGAAYAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQAGAAQABwAGAAcABgAGAAEABAAHAAcAAQAHAAcABAAEAAEAAQABAAEAAQABAAEABwAHAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABgAGAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAEABwAGAAYABAAEAAQABAABAAYABgAGAAEABgAGAAYABAAFAAEAAQABAAEAAQABAAEAAQAHAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAYABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQABAAEAAQAHAAYABgAEAAQABAABAAQAAQAGAAYABgAGAAYABgAGAAcAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgAGAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAYABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQAGAAQABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQAEAAEABAABAAEAAQABAAYABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAGAAQABAAEAAQABAABAAQABAABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAYABAAEAAQABAAEAAQAAQAEAAQABgAGAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgAGAAQABAABAAEAAQABAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQAGAAQABAABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAHAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAcAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABgAEAAQABAAEAAQABAAEAAYABgAGAAYABgAGAAYABgAEAAYABgAEAAQABAAEAAQABAAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAAAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAYABgAGAAYABAAEAAYABgAGAAEAAQABAAEABgAGAAQABgAGAAYABgAGAAYABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAYABgAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABAAGAAQABAAEAAQABAAEAAQAAQAEAAEABAABAAEABAAEAAQABAAEAAQABAAEAAYABgAGAAYABgAGAAQABAAEAAQABAAEAAQABAAEAAQAAQABAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAHAAQABAAEAAQABAAHAAQABwAGAAYABgAGAAQABwAHAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAAQABAAEAAQABgAGAAQABAAHAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAYABAAEAAYABgAGAAQABgAEAAQABAAHAAcAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgAGAAYABgAGAAYABgAGAAQABAAEAAQABAAEAAQABAAGAAYABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAABAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABgAEAAQABAAEAAQABAAEAAEAAQABAAEABAABAAEAAQABAAEAAQAEAAEAAQAGAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAQADAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAMAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAMAAwADAAMAAwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAMAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEADQANAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAMADgAOAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA8AAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEADQANAA0ADQADAAMAAwANAAMAAwANAAEAAQABAAEAAwADAAMAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAMAAwABAAEAAQABAAEAAQABAAEAAQABAAMAAQABAAEAAQABAAEAAQABAAEAAwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAMAAwANAA0AAQADAAMAAwADAAMADwABAA8ADwAPAA8ADwAPAA8AAwAPAA8AAwAPAAEADQANAA8ADwADAA8ADwAPAA8AEAAPAA8AAwAPAAMAAwAPAA8AAwAPAA8ADwADAA8ADwAPAAMAAwARABEAEQARABEAEQARABEAAwADAAMADwAPAA8ADwAPAAMADwADAA8ADwAPAA8ADwANAA0ADQANAA0ADQANAA0ADQANAA0ADQAPAA8ADwAPAA8ADwAPAA8ADwAPAA8AAwADAA8ADwADAA8AAwADAA8AAwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwADAA8ADwADAA0ADwAPAA8ADwAPAA8AAQABAAEAAQAOAA4ADgAOAA4ADgAPAA8AAwANAAMAAwADAAMADwADAA8AAwADAA8ADwAPAAMADQAPAA8ADwAPAA8AAwAPAA8ADQANAA8ADwAPAA8AAwADAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwANAA0ADwAPAA8ADwAPAA0ADQAPAA8AAwAPAA8ADwAPAA8ADQADAA8AAwAPAAMADQAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8AAwANAA8ADwAPAA8ADwADAAMADQANAAMADQAPAAMAAwAQAA0ADwAPAA0ADwAPAA8ADwADAA8ADwANAAEAAQADAAMAEgASABAAEAAPAAMADwAPAAMAAQADAAEAAwABAAEAAQABAAEAAQADAAEAAQABAAMAAQABAAEAAQABAAEADQABAAEAAQABAAEAAQABAAEAAQABAAMAAwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAEAAQADAAEAAQABAAEADQABAA0AAQABAAEAAQANAA0ADQABAA0AAQABAAEAAQABAAEAAQABAAEAAQABAAMAAwAPAA8ADwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQANAA0ADQABAAEAAQABAAEAAQABAAEAAQADAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQANAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQANAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAMAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAwADAAMAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQANAA0AAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEADQABAAEAAQABAA0AAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA4ADgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAEADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ABAAEAAQABAATABMADQAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgANAA4AAQABAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgABAAEABAAEAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgABAAEAAQABAAEADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgABAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAQAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAQABAAEAAQABAAEAAQABAAEADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAQAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAEAAQABAAEAAQABAAEAAQAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADQAOAA0ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgABAAEAAQAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQAAQAEAAQABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQABAAEABAABAAEAAQABAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABgAEAAQABgABAAEAAQABAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAYABwABAAEAAQABAAEAAQABAAEAAQABAAEAAQAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAAQABAAEABAAEAAQABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAGAAYABAAEAAQABAAGAAYABAAEAAYABgAHAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAGAAYABAAEAAYABgAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAEAAQABAAEAAQABAAEABAAGAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEABAAEAAQAAQABAAQABAABAAEAAQABAAEABAAEAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgAEAAQABgAGAAEAAQABAAEAAQAGAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABgAEAAYABgAEAAYABgABAAYABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAUABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABQAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFAAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQAVABUAFQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoAAQABAAEAAQALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAEAAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADgAOAA4ADgAOAA4ADgAOAA4ADgABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgABAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAQAOAA4ADgAOAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAQAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAcABwAAAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA4ADgAOAA4ADgAOAA4AAQABAAEAAQABAAEAAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAEABAAEAAEAAQABAAEAAQAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABAAGAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAEABAAEAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAAYABgAEAAQABAAEAAYABgAEAAQAAQABAAUAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEABQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAYABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgAGAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAGAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABgAGAAQABAAEAAQABAAEAAQABAAEAAYABwABAAUABQABAAEAAQABAAEABAAEAAQABAABAAYABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgAGAAYABAAEAAQABgAGAAQABwAEAAQAAQABAAEAAQABAAEABAABAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABgAGAAYABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAGAAYAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQAAQAHAAYABAAGAAYABgAGAAEAAQAGAAYAAQABAAYABgAHAAEAAQABAAEAAQABAAEAAQABAAcAAQABAAEAAQABAAEAAQABAAEAAQAGAAYAAQABAAQABAAEAAQABAAEAAQAAQABAAEABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABwAGAAYABAAEAAQABAAEAAQAAQAHAAEAAQAHAAEABwAHAAcABgABAAYABgAEAAcABAAFAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABgAGAAQABAAEAAQABAAEAAQABAAGAAYABAAEAAQABgAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAcABgAGAAQABAAEAAQABAAEAAYABAAGAAYABwAGAAQABAAGAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAcABgAGAAQABAAEAAQAAQABAAYABgAGAAYABAAEAAYABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABgAGAAQABAAEAAQABAAEAAQABAAGAAYABAAGAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABgAEAAYABgAEAAQABAAEAAQABAAHAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABgAEAAEAAQAEAAQABAAEAAYABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgAGAAYABAAEAAQABAAEAAQABAAEAAQABgAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAcABgAGAAYABgAGAAEABgAGAAEAAQAEAAQABwAEAAUABgAFAAYABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAAYABgAEAAQABAAEAAEAAQAEAAQABgAGAAYABgAEAAEAAQABAAYAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABgAFAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAQAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABgAGAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAGAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABgAEAAQABAAEAAQABAAEAAEABAAEAAQABAAEAAQABgAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAABAAYABAAEAAQABAAEAAQABAAGAAQABAAGAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQAAQABAAEABAABAAQABAABAAQABAAEAAQABAAEAAQABQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABgAGAAYABgABAAQABAABAAYABgAEAAYABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAYABgABAAEAAQABAAEAAQABAAEAAQAEAAQABQAGAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAYABgAEAAQABAAEAAQAAQABAAEABgAGAAQABwAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABgAGAAYABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACgABAAEAAQAKAAoACgAKAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQAAQAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAEAAQABAAEAAQABAAEABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEADgAOAA4ADgAEAAEAAQABAAEAAQABAAEAAQABAAEAAQATABMAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgABAAEAAQABAAEAAQABAAEADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEADgAOAA4ADgAOAA4ADgAOAA4ADgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA4ADgAOAA4AAQAOAA4ADgAOAA4ADgAOAAEADgAOAAEADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA4AAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA4ADgAOAAEAAQAOAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAOAA4ADgAOAAEAAQABAAEAAQABAAEAAQAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAEAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABwAHAAQABAAEAAEAAQABAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQAAQABAAQABAAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAQABAAEAAQABAAEAAQABAAEADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAEAAQABAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAEABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQABAAEAAQAAQAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAQABAAQABAAEAAQABAAEAAQAAQAEAAQAAQAEAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAQABAAEAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAEAAQABAAEAAQABAAEAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEABAAEAAQABAAEAAQABAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA8ADwAPAA8ADQAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPABEADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8AAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAPAA8ADwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA8AAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEADwAPAA8ADwADAAMAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAwADAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQARAAEAAQARABEAEQARABEAEQARABEAEQARAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAOABEADQAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA4ADgAOAA4ADgAOAA4ADgAOAA4ADQAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADQAOAA4AEQARABEAEQARAA0AEQARABEADgAPAA8ADwAPAA4ADgAOAA4ADgAOAA4ADgAOAA8ADwAPAA8ADwAPAA8AEQARAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwARABEAEQARABEAEQAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPABEAEQARABEAEQARABEAEQARABEAEQARABEADQANAA0AEQARABEAEQARAA0AEQARABEAEQARABEADQARABEAEQARAAMADwAPAAMAAwADAAMAAwADAAMAAwADABEAEQARABEAEQARABEAEQARAAMAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARAA0AEQARABEAEQADABEAEQARABEAEQARABEAFwARABEAEQARABEAEQARABEAEQARABEAEQARAA0ADwAPAAMAAwAPAAMAAwADAA8ADwADAAMAEQARABEAEQARABEAEQANABEAEQARABEADQANAA0AEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQASABcAEgARAA0AFwARABEAEgAQABAAAwADABEAEQARABEAEQADAAMAAwADAAMAAwADAAMAAwADAAMAAwANABEAEQARABEAEQARABEAEQARABEAEQARAA0AEQARABEADwAPAAMAEQADAA8AAwARABEAEQAYABgAGAAYABgAEQARABEAEQARABEAEQARAA0AEQARABEAEQARABEAEQARABEAEQARABEADQARABEAEQARABEAEQARABEAEQANABEAEQARABEAEQARAA0AEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAAwARAAMAEgAXABEAEQASABIAEgASABcAFwAXABIAEgAXABcAEQARAA0AEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAFwAXABcAFwASABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwARABEAEQAXAA0AEQARABEAFwAXABcAEQAXABcAFwARABEAEQARABEAEQARABcAEQAXABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQANABEAEQARABEAEQARABcAEQARABEAEQARAA0AEQARAA0AEQARABEAEQARABEAEQANABEAEQARAA0AEQARABEAEQARABEAEQARABEAEQARAA0AEQARABEAEQARABEAEQARABEAEQARABEAEQARAA0AEQARABEAEQANABEAEQARABEADQANAA0AEQARABEADQANAA0ADQARABEAEQARABEAEQARABEAEQANABEADQANAA0AEQADAA8AEQARABEAEQARABEAEQARABEADQARABEAEQARAA0AEQARABEAEQANAA0AEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAAQABAAEAAQABAAEAAQABAA8ADwAPAAMAAwARABEAEQARAA8ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADwAPAA8ADwAPAA8ADwADAAMADwAPAAMAEAAQAAMAAwADAAMAFwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwADAA8ADwADAAMAAwADAA8ADwAQAA8ADwAPAA8AFwAXAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8AEQADAA8ADwADAA8ADwAPAA8ADwAPAA8ADwADAAMADwAPAA8ADwAPAA8ADwAPAA8AAwAPAA8ADwAPAA8AAwADAAMADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8AAwADAAMADwAPAA8ADwAPAA8ADwAPAAMAAwADAA8ADwADAA8AAwAPAA8ADwAPAAMADwAPAA8ADwAPAA8AAwAPAA8ADwADAA8ADwAPAA8ADwAPAAMAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEADQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABcAFwAXABEAEQARABcAFwAXABcAFwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQARABEAEQARABEAEQARAA0AEQARABEAEQARAA0AEQARABEADQARABEADQARABEAEQANABEAEQARABEAEQARABEAEQARABEAFwARABEAEQARABEAEQARABEAEQANABEAEQARABEADQARABcAFwAXABEAEQANAA0AEQANABEAEQARABcAEQARABEAEQARAA8ADwAPAA8ADwADABcAAwADAAMAEQARABEADwAPABEAEQARAA8ADwAPAA8AEQARABEAEQADAAMAAwADAAMAAwAPAA8ADwADAA8AEQARAA8ADwAPAAMADwAPAAMAEQARABEAEQARABEAEQARABEADwAPAA8AAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEADwAPAA8ADwAPAA8ADwAPAA8ADwAPABEAEQARABEAEQARABEAEQARABEAEQARAA8ADwAPAA8AEQAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwABAAEAAQABAAEAAQABAAEAAQABAAEAAQAPAA8ADwAPAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAPAA8ADwAPAA8ADwAPAA8AAQABAAEAAQABAAEAAQABAAEAAQAPAA8ADwAPAA8ADwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA8ADwAPAA8ADwAPAA8ADwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAEAAQABAAEAAQABAAEAAQABAAEAAQABABcAEQARABcAEQARABEAEQARABEAEQARABcAFwAXABcAFwAXABcAFwARABEAEQARABEAEQAXABEAEQARABEAEQARABEAEQARABcAFwAXABcAFwAXABcAFwAXABcAEQABABcAFwAXABEAEQARABEAEQARABEAAQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQAXABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAFwAXABEAFwAXABEAFwARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAFwAXABcAEQAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwARABEAEQARABEAEQARABEAEQARABEAEQARAA8ADwAPABEAEQARABEAEQARABEAEQARABEADwAPAA8ADwAPABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARABEAFwAXABcAEQAPAA8ADwAPAA8ADwAPABEAEQARABEAEQARABEAEQARABEAEQARABEAEQARAA8ADwARABEAEQARABEAEQARABEAEQARABEADwAPAA8ADwAPAA8AFwAXABcAFwAXABcAFwAXABcADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwABAAEADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBbRwZJR0GBAgMIG4CLXEuch4SFioyNgAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAowAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQByAHMAdAB1AHYAdwB4AHkAegB7AHwAfQB+AH8AgACBAIIAgwCEAIUAhgCHAIgAiQCKAIsAjACNAI4AjwCQAJEAkgCTAJQAlQCWAJcAmACZAJoAmwCcAJ0AngCfAKAAoQCiAKMApAClAKYApwCoAKkAqgCrAKwArQCuAK8AsACxALIAswC0ALUAtgC3ALgAuQC6ALsAvAC9AL4AvwDAAMEAwgDDAMQAxQDGAMcAyADJAMoAywDMAM0AzgDPANAA0QDSANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgA6QDqAOsA7ADtAO4A7wDwAPEA8gDzAPQA9QD2APcA+AD5APoA+wD8AP0A/gD/AAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAMYlkiUJJAwkDSQKJLAAsQAkJAskGCUQJQwlFCU8JbojuyMAJbwjvSMcJSQlNCUsJQIlZCJlIsADYCKjALcAfwCAAIEAggCDAIQAhQCGAIcAiACJAIoAiwCMAI0AjgCPAJAAkQCSAJMAlACVAJYAlwCYAJkAmgCbAJwAnQCeAJ8AoAChAKIAowCkAKUApgCnAKgAqQCqAKsArACtAK4ArwCwALEAsgCzALQAtQC2ALcAuAC5ALoAuwC8AL0AvgC/AMAAwQDCAMMAxADFAMYAxwDIAMkAygDLAMwAzQDOAM8A0ADRANIA0wDUANUA1gDXANgA2QDaANsA3ADdAN4A3wDgAOEA4gDjAOQA5QDmAOcA6ADpAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+AP8AAAAAAAAAAgAAAAEAAAAAAAAAAwAAAAEAAAAAAAAAAgAAAAAAAAAAAAAAAwAAAAAAAAABAAAAAQAAAAAAAAABAAAAAgAAAAAAAAABAAAAAwAAAAAAAABCAAADAQMCAwMDBAMFAwYDBwEIAQkBCggLAQwBDQoAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAMBAwIDAwMEAwUDBgMHAQgBCQEKCAsBDAENCgADAQMCAwMDBAMFAwYDBwEIAQkBCggLAQwBDQoAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAMBAwIDAwMEAwUDBgMHAQgBCQEKCAsBDAENCgADAQMCAwMDBAMFAwYDBwEIAQkBCggLAQwBDQoAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEAAA0KAAMBAwIDAwMEAwUDBgMHAQgBCQEKCAsBDAENCgADAQMCAwMDBAMFAwYDBwEIAQkBCggLAQwBDQoAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAMBAwIDAwMEAwUDBgMHAQgBCQEKCAsBDAENCgADAQMCAwMDBAMFAwYDBwEIAQkBCggLAQwBDQoAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAMBAwIDAwMEAwUDBgMHAQgBCQEKCAsBDAENCgADAQMCAwMDBAMFAwYDBwEIAQkBCggLAQwBDQoAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAMBAwIDAwMEAwUDBgMHAQgBCQEKCAsBDAENCgADAQMCAwMDBAMFAwYDBwEIAQkBCggLAQwBDQoAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAMBAwIDAwMEAwUDBgMHAQgBCQEKCAsBDAENCgADAQMCAwMDBAMFAwYDBwEIAQkBCggLAQwBDQoAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAMBAwIDAwMEAwUDBgMHAQgBCQEKCAsBDAENCgADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAMBAwIDAwMEAwUDBgMHAQgBCQEKCAsBDAENCgADAQMCAwMDBAMFAwYDBwEIAQkBCggLAQwBDQoAAwEDAgMDAwQDBQMGAwcBCAEJAQoICwEMAQ0KAAICBAIEBAQEBAQEBgEJBAkECQQKCAsADAkNCgACAgQCBAQEBAQEBAYBCQQJBAkECggLAAwJDQoAAgIEAgQEBAQEBAQGAQkECQQJBAoICwAMCQ0KAAICBAIEBAQEBAQEBgEJBAkECQQKCAsADAkNCgACAgQCBAQEBAQEBAYBCQQJBAkECggLAAwJDQoAAgIEAgQEBAQEBAQGAQkECQQJBAoICwAMCQ0KAAICBAIEBAQEBAQEBgEJBAkECQQKCAsADAkNCgACAgQCBAQEBAQEBAYBCQQJBAkECggLAAwJDQoAAgIEAgQEBAQEBAQGAQkECQQJBAoICwAMCQ0KAAICBAIEBAQEBAQEBgEJBAkECQQKCAsADAkNCgACAgQCBAQEBAQEBAYBCQQJBAkECggLAAwJDQoAAgIEAgQEBAQEBAQGAQkECQQJBAoICwAMCQ0KAAICBAIEBAQEBAQEBgEJBAkECQQKCAsADAkNCgACAgQCBAQEBAQEBAYBCQQJBAkECggLAAwJDQoAAgIEAgQEBAQEBAQGAQkECQQJBAoICwAMCQ0KAAICBAIEBAQEBAQEBgEJBAkECQQKCAsADAkNCgACAAYABgUFBgAFBQYBCAUIBQsACggLAAwJDQoAAgAGAAYFBQYABQUGAQgFCAULAAoICwAMCQ0KAAIABgAGBQUGAAUFBgEIBQgFCwAKCAsADAkNCgACAAYABgUFBgAFBQYBCAUIBQsACggLAAwJDQoAAgAGAAYFBQYABQUGAQgFCAULAAoICwAMCQ0KAAIABgAGBQUGAAUFBgEIBQgFCwAKCAsADAkNCgACAAYABgUFBgAFBQYBCAUIBQsACggLAAwJDQoAAgAGAAYFBQYABQUGAQgFCAULAAoICwAMCQ0KAAIABgAGBQUGAAUFBgEIBQgFCwAKCAsADAkNCgACAAYABgUFBgAFBQYBCAUIBQsACggLAAwJDQoAAgAGAAYGAAYABQUGAQsACwALAAoICwAMCQ0KAAIABgAGBQUGAAUFBgEIBQgFCwAKCAsADAkNCgACAAYABgUEBgAGAAYBCAQLAAsACggLAAwJDQoAAgAGAAYFBAYABgAGAQgECwALAAoICwAMCQ0KAAIABgAGBQQGAAYABgEIBAsACwAKCAsADAkNCgACAAYABgUEBgAGAAYBCAQLAAsACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIHAAAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAg0AAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgMAAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACDAAABgAHAAcABwAACgAKAAoACggLAAwJDQoAAg0AAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAINAAAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgAGAAYABwAHAAcAAAoACgAKAAoICwAMCQ0KAAIABgAGAAcABwAHAAAKAAoACgAKCAsADAkNCgACAAYABgAHAAcABwAACgAKAAoACggLAAwJDQoAAgEBAgEDAQQBBQEGAQcBCAEJAQoBCwAMCQ0KAAMAAwADAAMAAwADAAMAAwADAAMAAwADDAkAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwwJAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMMCQADAAMAAwADAAMAAwADAAMAAwADAAMAAwADDAkAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwwJAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMMCQADAAMAAwADAAMAAwADAAMAAwADAAMAAwADDAkAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwwJAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMMCQADAAMAAwADAAMAAwADAAMAAwADAAMAAwADDAkAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwwJAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMMCQADAAMAAwADAAMAAwADAAMAAwADAAMAAwADDAkAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwwJAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMMCQADAAMAAwADAAMAAwADAAMAAwADAAMAAwADDAkAAwcABwAHAAcABwAHAAcABwAHAAcABwAHAAwJBwAAAwADAAMAAwADAAMAAwADAAMAAwADAAMMCQADAAMAAwADAAMAAwADAAMAAwADAAMAAwADDAkAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwwJAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMMCQADAAMAAwADAAMAAwADAAMAAwADAAMAAwADDAkAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwwJAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMMCQADDQANAA0ADQANAA0ADQANAA0ADQANAA0ADAkNAAADAAMAAwADAAMAAwADAAMAAwADAAMAAwwJAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMMCQADAwADAAMAAwADAAMAAwADAAMAAwADAAMADAkDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwJAAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMCQwADQANAA0ADQANAA0ADQANAA0ADQANAA0ADAkNAA0ADQANAA0ADQANAA0ADQANAA0ADQANAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMCQ0AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAkNAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwJDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAEAAAAAAQEBAAAAAAAAAAABAAAAAQAAAAEAAAACAAAAAQAAAAAAAAAAAAAAAAECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQkJCQkJCQkJCQkJCQkJCQkHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwgIAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICCgMDAwMDAwMDAwMDAwQDAwsGBgYFCAgICAgICAgICAgADBgkPGBUDAwMMEgMDAwMDAwMDAwMDAwMAAwMDAwMAAwADAwMGAwMDAwMGAwYDAwMDAwMDAwMGAwMDAwMGAwMDAwMDAwYDAwMDAwMDAwMJAwkDAwMJAwMDAwMJAwkDAwMJAwMDAwMDAwMDAwAAP3/AAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQAAAAAAAAAAAAAAAAAAAAAAHR8hAMxmZgC1vWgA8MZ0AIGivgCylLsAir63AMXIxgBmZmYA1U5TALnKSgDnxUcAeqbaAMOX2ABwwLEA6urqAAAAAAAAAF8AAACHAAAArwAAANcAAAD/AABfAAAAX18AAF+HAABfrwAAX9cAAF//AACHAAAAh18AAIeHAACHrwAAh9cAAIf/AACvAAAAr18AAK+HAACvrwAAr9cAAK//AADXAAAA118AANeHAADXrwAA19cAANf/AAD/AAAA/18AAP+HAAD/rwAA/9cAAP//AF8AAABfAF8AXwCHAF8ArwBfANcAXwD/AF9fAABfX18AX1+HAF9frwBfX9cAX1//AF+HAABfh18AX4eHAF+HrwBfh9cAX4f/AF+vAABfr18AX6+HAF+vrwBfr9cAX6//AF/XAABf118AX9eHAF/XrwBf19cAX9f/AF//AABf/18AX/+HAF//rwBf/9cAX///AIcAAACHAF8AhwCHAIcArwCHANcAhwD/AIdfAACHX18Ah1+HAIdfrwCHX9cAh1//AIeHAACHh18Ah4eHAIeHrwCHh9cAh4f/AIevAACHr18Ah6+HAIevrwCHr9cAh6//AIfXAACH118Ah9eHAIfXrwCH19cAh9f/AIf/AACH/18Ah/+HAIf/rwCH/9cAh///AK8AAACvAF8ArwCHAK8ArwCvANcArwD/AK9fAACvX18Ar1+HAK9frwCvX9cAr1//AK+HAACvh18Ar4eHAK+HrwCvh9cAr4f/AK+vAACvr18Ar6+HAK+vrwCvr9cAr6//AK/XAACv118Ar9eHAK/XrwCv19cAr9f/AK//AACv/18Ar/+HAK//rwCv/9cAr///ANcAAADXAF8A1wCHANcArwDXANcA1wD/ANdfAADXX18A11+HANdfrwDXX9cA11//ANeHAADXh18A14eHANeHrwDXh9cA14f/ANevAADXr18A16+HANevrwDXr9cA16//ANfXAADX118A19eHANfXrwDX19cA19f/ANf/AADX/18A1/+HANf/rwDX/9cA1///AP8AAAD/AF8A/wCHAP8ArwD/ANcA/wD/AP9fAAD/X18A/1+HAP9frwD/X9cA/1//AP+HAAD/h18A/4eHAP+HrwD/h9cA/4f/AP+vAAD/r18A/6+HAP+vrwD/r9cA/6//AP/XAAD/118A/9eHAP/XrwD/19cA/9f/AP//AAD//18A//+HAP//rwD//9cA////AAgICAASEhIAHBwcACYmJgAwMDAAOjo6AERERABOTk4AWFhYAGJiYgBsbGwAdnZ2AICAgACKiooAlJSUAJ6engCoqKgAsrKyALy8vADGxsYA0NDQANra2gDk5OQA7u7uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAGAAAABwAAAAgAAAAJAAAABgAAAAoAAAALAAAAqqqqqgAAAAAAAAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAZAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAABAwUHAQMFBwEDBQcBAwUHAQMFBwEDBQcAAgQGAQMFBwEDBQcBAwUHAQMFBwMDBwcDAwcHAQMFBwAAAAAAAAAAAQMFBwACBAYBAwUHAQMFBwEDBQcBAwUHAAIEBgEDBQcBAwUHAQMFBwEDBQcDAwcHAwMHBwEDBQcAAAAAAAAAAAEDBQcAAgQGAAIEBgEDBQcAAgQGAQMFBwACBAYBAwUHAQMFBwEDBQcBAwUHAwMHBwMDBwcBAwUHAAAAAAAAAAABAwUHAQMFBwACBAYAAgQGAAIEBgACBAYAAgQGAQMFBwEDBQcBAwUHAQMFBwMDBwcDAwcHAQMFBwAAAAAAAAAAAQMFBwACBAYBAwUHAQMFBwEDBQcBAwUHAAIEBgEDBQcBAwUHAQMFBwEDBQcDAwcHAwMHBwEDBQcAAAAAAAAAAAEDBQcAAgQGAQMFBwEDBQcBAwUHAQMFBwACBAYBAwUHAQMFBwEDBQcBAwUHAwMHBwMDBwcBAwUHAAAAAAAAAAABAwUHAQMFBwEDBQcBAwUHAQMFBwEDBQcAAgQGAQMFBwEDBQcBAwUHAQMFBwMDBwcDAwcHAQMFBwAAAAAAAAAAAAIEBgACBAYAAgQGAAIEBgACBAYAAgQGAAIEBgACBAYAAgQGAAIEBgACBAYCAgYGAgIGBgACBAYAAAAAAAAAAAACBAYAAgQGAAIEBgACBAYAAgQGAAIEBgACBAYAAgQGAAIEBgACBAYAAgQGAgIGBgICBgYAAgQGAAAAAAAAAAAAAgQGAAIEBgACBAYAAgQGAAIEBgACBAYAAgQGAAIEBgACBAYAAgQGAAIEBgICBgYCAgYGAAIEBgAAAAAAAAAAAQMFBwEDBQcBAwUHAQMFBwEDBQcBAwUHAAIEBgEDBQcBAwUHAQMFBwQGAQMDAwcHAwMHBwEDBQcAAAAAAAAAAAEDBQcBAwUHAQMFBwEDBQcBAwUHAQMFBwACBAYBAwUHAQAFBAEDBQcBAwUHAwMHBwMDBwcBAwUHAAAAAAAAAAABAwUHAQMFBwEDBQcBAwUHAQMFBwEDBQcAAgQGAQMFBwEABQQBAwUHAQMFBwMDBwcDAwcHAQMFBwAAAAAAAAAAAQMFBwEDBQcBAwUHAQMFBwEDBQcBAwUHAAIEBgEDBQcBAwUHAQMFBwEDBQcDAwcHAgIGBgEDBQcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZBAQAAQAAACGDRAABAAAABITEAAEAAAAgQwQAAQAAADyCRAABAAAAHkVEAAEAAAAsRgQAAQAAAAFGBAABAAA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AAIAAADfChAABAAAAAYAAQACAAAA2goQAAQAAAAHAAEAAgAAANUKEAAEAAAACAABAAIAAAAhCxAABQAAAAkAAQACAAAAGwsQAAUAAAAMAAEAAgAAABULEAAFAAAADQABAAIAAAAKCxAABQAAAAoAAQACAAAA/woQAAUAAAALAAEAAgAAAPQKEAAFAAAADgABAAIAAADpChAABQAAAA8AAQACAAAAUAoQAAMAAAAAAAAAAgAAAI8KEAAEAAAAAQABAAIAAACEChAABAAAAAQAAQACAAAAeQoQAAQAAAAFAAEAAgAAAG4KEAAEAAAAAgABAAIAAABjChAABAAAAAMAAQACAAAAXgoQAAQAAAAGAAEAAgAAAFkKEAAEAAAABwABAAIAAABUChAABAAAAAgAAQACAAAAoAoQAAUAAAAJAAEAAgAAAJoKEAAFAAAADAABAAIAAACUChAABQAAAA0AAQACAAAAiQoQAAUAAAAKAAEAAgAAAH4KEAAFAAAACwABAAIAAABzChAABQAAAA4AAQACAAAAaAoQAAUAAAAPAAEAAgAAAF4TEAADAAAAAAAAAAIAAACdExAABAAAAAEAAQACAAAAkhMQAAQAAAAEAAEAAgAAAIcTEAAEAAAABQABAAIAAAB8ExAABAAAAAIAAQACAAAAcRMQAAQAAAADAAEAAgAAAGwTEAAEAAAABgABAAIAAABnExAABAAAAAcAAQACAAAAYhMQAAQAAAAIAAEAAgAAAK4TEAAFAAAACQABAAIAAACoExAABQAAAAwAAQACAAAAohMQAAUAAAANAAEAAgAAAJcTEAAFAAAACgABAAIAAACMExAABQAAAAsAAQACAAAAgRMQAAUAAAAOAAEAAgAAAHYTEAAFAAAADwABAAIAAAAeEhAAAwAAAAAAAAACAAAAXRIQAAQAAAABAAEAAgAAAFISEAAEAAAABAABAAIAAABHEhAABAAAAAUAAQACAAAAPBIQAAQAAAACAAEAAgAAADESEAAEAAAAAwABAAIAAAAsEhAABAAAAAYAAQACAAAAJxIQAAQAAAAHAAEAAgAAACISEAAEAAAACAABAAIAAABzEhAABQAAAAkAAQACAAAAaBIQAAUAAAAMAAEAAgAAAGISEAAFAAAADQABAAIAAABXEhAABQAAAAoAAQACAAAATBIQAAUAAAALAAEAAgAA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AAcAAAAGAAEAAAAAADgBEAAHAAAABwABAAAAAACDABAABwAAAAgAAQAAAAAA4QgQAAgAAAAJAAEAAAAAAGMIEAAIAAAADAABAAAAAADsBxAACAAAAA0AAQAAAAAAwAYQAAgAAAAKAAEAAAAAAIYFEAAIAAAACwABAAAAAACrBBAACAAAAA4AAQAAAAAAywMQAAgAAAAPAAEAAAAAAEwFEAAFAAAAAAABAAAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAoBYSAB0AAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAHAYEgARAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAIAZEgASAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAoBoSABAAAACgGxIAEQAAAKqqqqoAAAAAsBwSABEAAADAHRIAEAAAAMAeEgAQAAAAwB8SABAAAADAIBIAEQAAANAhEgARAAAA4CISABEAAADwIxIAEQAAAKqqqqoAAAAAACUSABAAAAAAJhIAEAAAAAAnEgAQAAAAACgSABAAAAAAKRIAEAAAAAAqEgAQAAAAACsSABAAAAAALBIAEAAAAAAtEgAQAAAAAC4SABAAAAAALxIAEAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAADASABAAAAAAMRIAEAAAAAAyEgARAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAEDMSABAAAACqqqqqAAAAAKqqqqoAAAAAEDQSABAAAACqqqqqAAAAAPAjEgARAAAAwCASABEAAADgIhIAEQAAANAhEgARAAAAEDUSABEAAACwHBIAEQAAAKAbEgARAAAAwB0SABAAAACgGhIAEAAAAMAfEgAQAAAAwB4SABAAAAAgNhIAEAAAACA3EgAQAAAAIDgSABAAAAAgORIAEAAAACA6EgAQAAAAIDsSABAAAAAgPBIAEAAAACA9EgAQAAAAID4SABAAAAAgPxIAEAAAACBAEgAQAAAAIEESABAAAAAgQhIAEAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAqqqqqgAAAACqqqqqAAAAAKqqqqoAAAAAAAAAAR8BMAExARsBHAEdAR4BfwE5AQEBAgEDAQQBBQEGAQcBCAEKAQsBDAEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsbWzI3O351AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAAAAAAAgAAAAHAAAAAAIAAAAAgAANcA1wAAAQIDFgAxAAAAAAACDxAABgAAAJgXEAAKAAAAgxcQAAoAAABsDBAACwAAABcTEAALAAAAjhcQABQAAAB5FxAAFAAAAFsXEAAdAAAABAABBQYCAwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAMAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqqqqqAAAAAAAAAAA6OjobWzE7AAAAAAAAAAAAAADwPwAAAAAAACRAAAAAAAAAWUAAAAAAAECPQAAAAAAAiMNAAAAAAABq+EAAAAAAgIQuQQAAAADQEmNBAAAAAITXl0EAAAAAZc3NQQAAACBfoAJCAAAA6HZIN0IAAACilBptQgAAQOWcMKJCAACQHsS81kIAADQm9WsMQwCA4Dd5w0FDAKDYhVc0dkMAyE5nbcGrQwA9kWDkWOFDQIy1eB2vFURQ7+LW5BpLRJLVTQbP8IBEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAKAAAAAAAAAGQAAAAAAAAA6AMAAAAAAAAQJwAAAAAAAKCGAQAAAAAAQEIPAAAAAACAlpgAAAAAAADh9QUAAAAAAMqaOwAAAAAA5AtUAgAAAADodkgXAAAAABCl1OgAAAAAoHJOGAkAAABAehDzWgAAAIDGpH6NAwBa1juS1lP07j87oQYpqj8R+GVlG2a0WJUHxSSkWcrHSna/PqJ/4a66SfYtDfC8eV1Tb86K35la6dxzeRAsLNj0lAXBtiug2JFp6EuKmxsHeflGcaQ2yE62hOLebILiSJe3mI1NRHri4yWbFggjGxv9cn94sGqMbY73IA7l9fAw/k+fllyF7wiyNalRXjMtvb0jR7yzZiuL3oIT5jWAeCytdqxVMCD7FosxzK8hUMs7TJMXazzoudytPb8bKiS+St943YVLYuhT2Q2vojStbR3Xa6ozbz1x1IdoreVAjGRyhgaVAMuMjcmpwhgfUa/9DmhIusD97/A71PLeZiUbvRICbXSY/pV2pYRXS2D3MLZLAYiRPn471M6lLV44Nb2jnkHqNc5dSolCz7l1hoKsTAZSsuGges6ViYGTCZTR6+9Dcx8aSRlC++uh+Av5xebrFBCmYJufEvpmyvZOd3fgJhrU0DiCR5e4AP20IlWVmLAgiYJjsYxecyCesDVVXV9utFVivN0vNpCoxR2DqjT3iSHreyvVu0O0EvfkI9UBdezppS07ZVWqsGuabjYlIckzskf4ib7q1JwGwQqEbmm7wJ6ZdixuJQpESPENJcpD6nAGwMrbZFeGKs2WKFdeapIGBDi8Ej7tJ3WAvPLs9QQ3CAXGa5eN6HGSoOsuaDPGREqG96N+WDGHW0STHSHg+2rus3pMnq79aHIVuGQp2LoF6mBZ30UaPQPPGua9M44phyS5b6trMAZiwdCPVuD4edS206WWhryHuvHEs2wYd5iJpEiPPKirKSkutuCH3pT+q80aMyVJC7rZ3HGMFAsdf4vA8J9vG44oEFSOr9lN5F6u8OwHSqKxMhTpcdtQYZ322SzoyW4Fr5+sMSeJ0lwiOggcMb7KxprHF/5wqwb0qkgKY71tfXiBuZ09TdYIsdXazLssCU7r8JOCRvCFpY7FCGD1uyUhJu04I1hsp07y9gq48iqvqm8oByxuR9HhrrQNZq/1GspFeYTbpMyCTe2QyJ+N2VA8l5dlEs5/o6AotboH8Q/lDH39/pbBX8zIcmKpSe1THk/cvL78sXf/eg+7E5zo6CWxCTb3Pc+qn6zpVIxhkbF3HYwDdQ2DlccXJGrvufWd1SVvRNLQ43r5Ha1EayhzBUt3xWqDYs7smzLsCkP5Z+NO1XZFJPsB6MI/p82T90GcIorUVu15AqLzDxHBeHVSQ2vWRFY0jEFFmKmqeGuJEwqDDNZrQe+RVr5T1VbGa5jMI4/LxhFrNuztqIrst4a+vyw5PxzrAqKzlKnW8zIU1/d7B0/jpYOK4LlTzLA/2cz12skiXI8krVjoaP+cjw9As9G+lZnZNmw3kaEfwrkJCBAjLfv/j0RHhbWKpzIoDArUq/n5/7MVmebibFE/Mo8MyRY7/H+QrR/QjeOSZ3/Zpz2uSvuf9JgnRLGcd0HfzxHNmR36xzF/MZXdg9UR10NWQEBS/Bx/7z59inIla2bqNShIZjvkXquOHK3P7gUAZUMy2kBKnTZWsmPYgmoHQD7UvpBoTiLidU8+h5GiBOimRHdaAuKqWlPjDak2ywWi0BUVcYOaVTEoXFHTAz6HykRbWg2RgNUemdkShMKGlP4KeVjotuCKZv+PF6VyqDm+TZduYuOYLUD/c13OjxLILSE9CvuOfxyIf2j6gJkLnbw0ZuZ8cp8jap8COaGATsTrwf8fHE6HrERHQ4fJIGK1ZrL/J6MiqdcVGRTp+6i6YgCf//FLtcmmrY+scZ2ptD1gwz93byJ8EJmzF87E0yFNOLQPVcsrm1R/oJ0B9khqYEahUyp+++CUT4QCwZltQvzLRHTaLjkZemMlQzHACFP7/lURkfqIn1i87pM98Monun6rVTV5tWO3NXV8JpbeWDQvi1XBS6I8JYOSG7C7Fm8B++2qsZ7Li+4jdyKc6tzKwXmpFV5GXxd1doqVoZLJHhnsic36CzZdEhTt+km3e2YfZ+yA+c6E9BZZqHkc5RpA54An4beC0liuNwnMMY8QiJCwuOyy0QfvmYULP/6yFaq03OanH4bJagBnzs6935rU4ZPgkadnvUJgAEGh1ovgJG1cLLvI4G1TeECRScyuGG6Ic/fp+lhIaJaQ9Vt/2p6JalB1pDmvLQFeenmZj4gDlkJSyQaEbXiB9djXf7OqgzvTpnsI5cjW4TLPzV9g1WQKiJCaSh77Js1/oeA7XIV/BlWaoO7yXG/A38nYSrOmHkjqwEiqL/SLsFf8jh1g0CbaJPHalDvxV862XXkSPIJYCLfWCD3Fdu2BJLUXF8uibspkDEuMdlRoom2i3dx9ywn9fc9dL5SpAgsJCxVUXf5MfF1DNTv50+Gm5SaNVPqer20aSgHFe8SaEJ9wsOm4xhsJoZxBtpo1wNTGjBwkZ/hiS8kD0mMBw/hE/NeRdkCbHc9dQmPe4Hk2VvtNNpQQwuRC9RL8FVmYxCt64UO5lPKdk7IXe1tvPlpb7GzK85yXQpzP7iyZBacxcicIvTCEvVODgyp4/8ZQvU4xSuw85ewoZCQ1Vr/4pDbRXq4TRg+Umb424ZV3G4eEhfaZmBcTuT9uhFl7VeIo5SZ0wH7dV+fPieUv2uoaM0+YSDhv6paQIXbvXcjS8D9jvloGC6W8tKlTa3V6B+0P+23xx03O6+GUKMYSWUno073k9pzwYDONXNm7q9ctcWTsnTTELDmAsLPPqpZNeY29Z8VB9XdHoNygg1X8oNfw7GAbSfmqLOSJRHK1ncSGFvQ5Ypu31TddrNXOIsV1KBwxxzqCJcuFdNeLgms2kzJjfbxkcfee06iGlzEDApz/Xa7rvU21hghTqPz9gwKDf/XZZi2hYqjKZ9J7/STDY99y0GC8pD2p3oCDbR73WZ7LR0J46w2NUxZhpAjmdPCFvtlSVmZRcOhbec2LH5JsJy6QZ/bfMkZx2WuAtlPbo9gcugDzl7+Xzc+GoKQo0swOpOiA8H2v/cCDqMjNsgaAEs0iYWxdGz2xpNL6gV8IIFeAa3ljGjHG7qbDnLA7BXQ2MOPL/GC9d6qQ9MOcigYRRPzbvju5rBXVtPH0RC1IFVX7ku7F84stBREXmUocTS0V3Rt1tvDueEbVXL9dY6B4WtRi0uSsKheYCjTvNHzIFnGJ+4YOrHoOn4aAlaBNPa7mNV3UElcZ0kao4LoJocxZYIN0idesn4ZY0pjpS8k/cDik0SsGzCNUd4P/kc/dJ0ajBmN7CL8sKVVkf7ZC1bEXTMg7Gsrud3NqPR/kk0qeHV+6yiA+9SqIYoaTjpzugnJ7tH5UjbI1KvtnOLJDqiNPmmGe6TEfw/T5gcbe1JTs4gD6BWR+8/k4PBE8iwTd041AvIPeXnA4R4sVC65F1EixUKsklnaMBhnu2o3ZVwmb3STWrTvJF6TP1Kj4h9blgArXpUzlvB2NAwrT9qlMHyHNTM+fXitlcITMh3TUH2dpACDDR3Y7P8bS39TIhHPgQQD02ewpCc93xxcK+6WQWFIAcRBo9MzCVbmdzHnPtO5mQI0UgnG/mdWT4h+sgTBVQEjYTPHGLwDLONsnF6J8alBaDqCtuDvA/QbS8ZzKHIXk8BEI2aZKML2IRi5E/WOmHW0WSo+QLj52FeycSp7+hzIETo5ZmrrN0xonRN3F/Sk/heHx70AowYjhMJVU93z0juZZ7ivRuXj1jD7dlJrOWBkw+HS7gufWMjCOFDrBAa8fPDZSauOhjD+8sZmI8cGaJ8vD5kTc5benFQ9g9Za5wPheOhCrKd6lEdsSuLK85/C29kjUFXRWD9aRF2bf6yGtZDRbSRsRlcklu86fa5M07L4A2Q2xyvs772nCh0a4QqfuQE9RXT36CmsEsylY5hJRKhGjpbQM3ObC4g8a94+rcrrqhefwR5Ogc9uT4PSzVg9pZWch7Vm4iFDSuBjy4CxTwz7BaWgwc1Vyg3NPl4z7EzrHGEJBHs/qTmRQI72v+pgI+Z6S0eWDpWJ9JGys2zm/SrdG90XfcqddzpbDS4mDt44yjLqLa08R9YF8tJ6rZGUyPy+pbgaiVXKim2GG1r3+/g57UwrIhXWHRQH9E4Y2X1/pLHQGvedS6ZZB/JinBDe3IzgRSCygp6P8UTt/0cUEpSyGFVr3xEjmPROF74L7Iufbc02YmvXaXw1YZqujuuvg0tBgPsGz0bcQ7j+WzKgmmQcF+Y0xH8bllOnPu/9ScH9JRnfx/dObD/3xYdWfM6bv7Yvqtv7IglN8brrKx8CPa+kupWT+e2NoGwppvfmwc8ajes79PS0+IVGmYRacTghcpgyhvga4jWnlD/obw2IK889PSW5IJvHD3pP44vP6zO/Do9uJWrd2Omtc222YHOB1WkYplvhlFAmGM1KJviNYE/GXs7v2f1mLZ8CmK+4sLljtfaBqdO8Xt0A4SNuU3BxXtE6kwqjr3eRQRhoSuhPkbGFiTfOSZhUe5deglugXHcj5uiCwd2DNMu+GJF6RLhId3HQUzgq4gP+qqK21tbpWJBOSmYEN5mC/1RIZI+NpbO2X9v/hEI+cl8Wr7/WNwWP0Hvo/jcqzg/22lmtzsbJ8sab4jzC9oOS8ZHxG0N3e213Q9rN8rOQO9r4NLKKKa6k6QnrwzWudkrMuEbdKrcZTydKYbMGGRHdgetVkndi3qHsHv8dx6ItKfGwFX2KHckmtZNccRxEtXZvHxvY6qc+b2D0N5JjVeTSCeXi0idPDwk6NEB3/Sstg8UvLEDaEujlRWCpy387+uO0e/pRDpSiIZe60TpfCPieppj16lM4y6v4pYiI9c4e4KYhmzByBX1I/Wn01BgioJjQqgP9jofcmz7DcwgfKUjDBNGD/vMm18ALdk7OJ/Gd88UE4Pyz84qxD1HggrLvA7TYpg6ebnQ1MqoRLlEvVMamE82ORAsUR39RlXnmeCn3TZfC8NUP21RZK/7UXRk0upD8WlgHqmUVOjr/RzktQOY3Pm/uBZMDW4XEvhsJe5Ihww4J6on3wTFpOuydzdl1VJrqRjIVOlm/4ENX4B2o66q8otu8m4ruLNlUK94kEieXbsqOrsNrqLoTqzHSsRStvyU9Ga67Ikp2SEgDJiws7y7vjFwbaerdENxdAu27OCb2q3J2HkFnlFQUdEGoKQsy26qnCVPpXjy0jEkqCRqmfZGVU8+n4LbP5q5bcIpiTR71+KXAkd/nf91a8kyt+eFk27xnGdur7i1q2VTzbTutXA2ugdxTl+q7xI2sLkiLm7cSFiJVZnrna7exFjjarX+mbU3X99wK0iBS06xgCy9sRgajS/LUD4aoZoSafwr1S1qJSB3yjRJnVX0nwRjNt50ulk4Qt5sp/hdstVgxApHBvjrjluJ+936ZSuWsPUM1My7ImH6cHrZfQp6dGE6QAIH4veHPIJMxegsgoDIxmANSOO1aQ+i1/9qL6Mg8vgACJcsprNHn5HrTLuf/SOqBAK0+8hoHXtyah/qi/h0nIEPbiNvSw5jK4JJ/J1/QtfcrZDUMxXaA/5u3Guw1yeRw9UJGUfXSIz1+p+CqRzpdjTKR1fM5IteHbaZu6GuE+vq+GyRsCmyLaUkTCaGGZzq1b6PuiwkGrkGfV8sO5P0KZcuL6pRkJa7pgxZca1GfJn4fN3A9gywXpuLa9IMnBu4fpAFQTOD5HI2ck7Wg7sqrpIwEpC+OGDHbANpQhZa8Kcrag+c6bqI+TcES5aT5bjQ7kCPjCwpJzuIyV5wQOsjASHQu2ubk7SPN3vZDCSG9eK/LGsSioShrw1ey08xoLNrauOB4yUt0gbAso4rDhjcNj2sYlX1OKlCMHWY0OrThafkicVzforHnsSK+wUdjG8J1agy1EIhiYJxvb3GWO+GxFMeT4axUPv/jwCIr/WBtky56OG8Xa0u42LYusPy8iPX5GcuJ3kYeqhPit1w+7aswd2A5b6rqU6lK7zIbptMKfEkfpmKXpOaUn6n+oJGKzR9eYIz8OZIiOseSf0q06oBkNf+yOiT4V+e7uo4OsJAQwaM9TGSuOWreq6oyk1y0FPELDqF+2MTFlVSWwzU15BssS9JI3Eb8+X1UXjoDQC+S+i9i74tZuDrcqnbGgxA6drq7OaluLCtJkdQTeyHVSRFpagkXyLo0GvpKFFfsSZ9Xw8OLW7j0YxLZ7c+2ca2CFltZNRlVMHnWkWtAoxIa4JjxM4Zeq32WSTXEEM/WoZjBLn9k91at/e9DG4j+ZKUD+jgOoRuWWX5qEeNuPvzPQvXIEUpjefPfApVbSc+9ARG2PhWY+lq2amCd2Y6iVqEqkeRMA591ZwX6xU3wSu1JdDVgYwGBVr3HenWgb1+mmtBBuHvC4qg0Hq2IhcSaS6HDKBBOWs8rRyFW7aQ2wtiIN/cWXe2A9BTsrKsQQXORqUHy3fZq4jOMEW5p6irmOQrKtko5g83ccxvFAGe1nstMeWTeyOPBVozcukV/oAd+IZi/F3kZsa8bivLo7MWGLFaA9O0usIyN3G2ypin05rhoIDQpel+yrVSLHU+3cx9khSpCMNb3nlnV1XFQU6hyIVC7ad0HWUH7SknNpmSQkqum50NXRC+Xdh3fQw78trdRk6ERLxk5elbRKYtqXPOyEPhEL7zvxWr1h3frQvUsnpo7VzeqKrbHsupQ5Ra0esc/ySoGl7RjeZ/T8Q0sss86B185wh5TP6oAx/BRe919Coo0CTal5gyWhPjuaNfX30sowQ6ATWORuCQ3KAIPytYf9/FOIGG6dyotIfuCRt9F0nn40Vc9kol532p1YdiUGEsaegSoD/ko2lVHF7tOuh5b3BSL1g73dgzpSO3VEzRS+mkM1eXKWapLEJ4qSlQCabcGUghcPPAW3dbEs97qAAMnxOWPdEovGJFPue9p0UKAdlwReyusW/PbT6hoRkmQI5byF9bymHLv0iKVhlbZ9Sh7s5jJs0OPpMSsHXR2Sju6Sk9CfQ2IuMv86SbSkNjKqd7jDh9T6uf6+CVvhTcS+lJXmtKmJeWi+LkzZrLA693wdkBEK9ksBN50PD9hcCTXcJLSVjPOewYSEUxMOtEtCEy7hum+wBvKlZSjLiFBvCcy8jNRFLkS3hz/5/qokywv/669J1zkVpWmP977V7b3O/ubbHE2IWg5Ec7WXpbQ2QV9wiTEwlfiICmgx/M5hhBF3zKs+fLo2Kw3C/bxCeuXVlL/WTRtpBHaQMj21aWyvBb03hhCxwcJJmj+mI4RHG0esxadUHXIz3IDPDytlGeJYF7fRqaROQBNhw9M730+Nl24Sg+omMQisHFpkCtejcD0K16OkcD0K16NwPczMzMzMzMzMzczMzMzMzMwAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAAAAQJwAAAAAAAAAAAAAAAAAAFDDAAAAAAAAAAAAAAAAAAAk9AAAAAAAAAAAAAAAAACAlpgAAAAAAAAAAAAAAAAAILy+AAAAAAAAAAAAAAAAAChr7gAAAAAAAAAAAAAAAAD5ApUAAAAAAAAAAAAAAABAt0O6AAAAAAAAAAAAAAAAEKXU6AAAAAAAAAAAAAAAACrnhJEAAAAAAAAAAAAAAID0IOa1AAAAAAAAAAAAAACgMalf4wAAAAAAAAAAAAAABL/JG44AAAAAAAAAAAAAAMUuvKKxAAAAAAAAAAAAAEB2OmsL3gAAAAAAAAAAAADoiQQjx4oAAAAAAAAAAAAAYqzF63itAAAAAAAAAAAAgHoXtybX2AAAAAAAAAAAAJCsbjJ4hocAAAAAAAAAAAC0Vwo/FmipAAAAAAAAAAAAoe3MzhvC0wAAAAAAAAAAoIQUQGFRWYQAAAAAAAAAAMilGZC5pW+lAAAAAAAAAAA6DyD0J4/LzgAAAAAAAAAAhAmU+Hg5P4EAAAAAAAAAQOULuTbXB4+hAAAAAAAAAFDeTmcEzcnyyQAAAAAAAACkliKBRUB8b/wAAAAAAAAATZ21cCuorcWdAAAAAAAAIPAF40w2Ehk3xQAAAAAAAChsxhvgw1bfhPYAAAAAAAAyx1wRbDqWCxOaAAAAAABAfzyzFQfJe86XwAAAAAAAEJ9LINtIuxrCvfAAAAAAANSGHvSIDbVQmXaWAAAAAIBEFBMx61DipD8UvAAAAACgVdkX/SXlGo5PGesAAAAACKvPXb43z9C40e+SAAAAAOXKoVqtBQMFJ8artwAAAECePUrxGcdDxrC3luUAAADQBc2cbW9c6nvOMn6PAAAAoiMAguSL8+Qagr9dswAAgIosgKLdbjCeoWIvNeAAACCtNyAL1UXeAqWdPSGMAAA0zCL0JkXWlUMOBY0prwAAQX8rsXCWTHvUUUbw89oAQBFfdt0MPA/NJPMrdtiIAMhq+2kKiKVTAO7vtpMOqwB6RXoEDeqOaIDpq6Q40tWA2NaYRZCkckHwcetmY6OFUEeGfyvapkdRbE6mQDwMpyTZZ1+2kJCZZQfiz1BLz9Btz0H347T0/59E7YESj4GCpCGJeg7x+L/HlWgi1/Ihow1qKxlSLfevObsC64xv6suQRHafpvj0mwhqwyVwC+X+tNVTR9A28gJFIpoXJidPn5BllCxCYtcB1qqAne/wIsf1frm30jpNQovV4IQrrev4st6nZYeJ4NJ3hQwzO0yTmy/riJ/0Vcxj1abP/0kfeML7JWvHcWu/PIqQw38cJxbzeu9FOU5G74tWOtrPcdjtl6y1y+Pwi3WX7MjQQ45O6b0Xo74c7e5SPSf7xNQxomPt3UvuY6iqp0z4HPskX0VelGrvdD6pyuiPNuQ57rbWdblEKxKOU/3is0RdyKlkTNPnFraWcai822BKOh3qvg/kkM0x/kbpVYm83YikpK4THbVBvr2YY6uraxSrzU2aWGTi0S3tfjyWlsbsiqBwYLd+jaI8VM/lHR78qK3IjDhl3rDLSylDX6UlOxLZ+q+G/hXdvp7zE7cO70mrx/wtFL8tijdDeGwyaTVulvl7OdkuuawEVJYHf8PCSfv32oePeufXBul7yV50M9z92ui0mazwhqNx7T27KKBpvBEjIsDXrKgMzmgN6jIIxCvWqyqwDdjSkAHDkKQ/CvXbZasajgjHg/rgedrGZyZ5Uj9WobHKuKQ4WRiRuAFwVybPqwle/ebNhm9etSYCTO14YQvGWl6wgLQFWzFYgU9U1jmOd/F13KAhx7E9rmFjaUzIcdVtkxPJ6TgezRk6vANfOs5KSXhY+yPHZUCgSKsEe+TAzi1LF512nD8oZA3rYpodcUL5HV3ElINPMr3QpTsAZQ2Td2V09Xlk437sRI/KIF/ou2q/aJnLHk7PE4uZfuh24mpF78K/fqYhw9jtP56iFJvFFquz7x4Q6vNO6c/F5eyAO+5K0JUSSnJY0fGhux8oYcqpXUS7l9yOrkVuiiomcvk8FHUV6r2TMhrXCS31WOcbpixpTZJWnF9wJiY8WS7hos93w+C2bIN3DLAvi296mYvDVfSY5EdklQ+c+20L7D83mrWY346sXr2JQb0kR+cPxQDjfpeyV7Ys7JHs7VjhU/bAm1493+3jN2e2ZykvbPSZWCFbhot07oIA0uB5vYdxwK7p8WeuEaqjgAZZ2OzpjXAaZO4B2pWUzCBIbw7osliGkP40QYjd3H8UjQUJMd7upzQ+glGqFdSfWfBGS72W6tHBzeLl1BrJB3CsGJ5snjIjmcCtD4Ww3QTGa8/iA0X/a78wmVOmHBWGt0aD24QW/0bvfH/oz2OaZ2UYZBLmbl+MFa5P8YF+wGA/j37LT0l375qZo22infA4DzNevuMcVasBgAwJy8UsB9O/9a1cYyoWAqBPy/3298jHL3PZc37aTQHEEZ+e+prd3P3nZygdUaEBNdZGxrgBFVT94YGyZaUJQsKL2PcmQhqpfFoiH18HRmlZV+eaWGmw6Y14dTM3iZfDLy2hwa6DHGSx1lIAhGt9tHt4CfKapCO9XYxnwDJjzlBN60WX4EY2lrq3QPj/+wGlIGYXvZjYwzup5VC2/3pCzqg/Xey+zrSKEx/lo9+M6YDJR7qTNwGxNmwzb8YX8CPhu9mouIRBXURHAAu4Hexs2SoQ0+blkXQVWcANppIT5Mca6kOQL9torTeYyId3GN15oeRUtPsRw5hFvroplF5U2MkdauF61vP+1m0p9B27NCeeUuKMDGZYX6bkmRjk6QGxRecasI9/LvfPXcBeXWRCHRehIdxzH/r0Q3Vwdrp+SXKuBJWJqFMceUpJBmpp3tsO2kX6q5JoYxed24cEA9aSklDX+Na2QjxdhNKpRcLFm1uShluGsqlFupIjigsyt4LyNmjypx4U12h3rGyO/2Qjr0QC79Em2QxDldcHMh8fdu1qYTWDuAfoSb3mRH/nptOoxbkCpKYJYpxsIBZfoZAIEzdoA80PjHrDh6jbNmRa5WsiISKAiZcs2lRJScL9sN4Ga6kqoGy9txCqm9vyPV2WyMVTNcjHrOWUlIKSb4z0uzq3qEL6+Rcfujkjd8vXeLWEcqlpnPtuUxQEdir/DdfiJc8ThMO6SmgZhRP1/tGMW+/CGGX0aV3CX2ZYsn4COJnVeS+/mGF62fs/dy/vA4b/Slj77r762M/6D1X7qoRnv10uuqruOM+D+VMqupWyoJf6XLQqlYNh8nt0WpTd34g9OXRhdbrk+e6aEXH5lBfrjEfRuRLpXbiqAVbNN3ruErjMIrSrkTqzCsFV4GKsqhfmfyuhFrYJYE0xa5h7V5Sd3192SZzjC7ig/YV+Wu19wuv76a1BjgdzhL4Tj1gUHLPmemQZ0rHIjyWu2LJuWeNfoJm9n0beu/Ou2Y5fym/uOwSA1iPsilRYDUi5e94l6UoFIMwsp61qrhCapxpWr6SdBij/9xDZBNqUgFGhKxuGIgR5/5qqh0IIXfDSRPuQKCtFV79BlalTSnSsBxY6NfJ1Fi0vkvrT6FyRl4mbiEK3CS58XZt8hBHauv41YZVpJYw52zTCm6WVkGl+g7n6Qy7vBxLCsgLPu/QDXuRn+ZR99URLua9hgfV4wrru4Bsd3DIWnqcbuqEyF3NpKtliZJO/m4WRoijK/tzPA3WPe314rwLnNcuy/D7Uw0RSc9pcq61hsAG/752nZPpqE4gIOhYZehzCrmvF0P24RRiqighbn5ijcprG9kU9J1eeVK2KmWM/pocgPJpLhnj24lSsNn88z4+pKMvA3acWtBtqV4SfC8Pz0/L98NVRHKGiRG1lQ+dZeMS3npYls7Gk5UpknxRhcJa1ZUa87h/eDZ9dPYdZeQz8Iv9X6+qnVdEGtQyp2MuH3XX/FpPyiNVCJPGnCc6+6VRTv9y3L+uKU23tEQyBLiQqKO/T5fqlbajIaBaPEJ1WGnl1pI+8h0RpfQFu+VVE7GDXko2zrKmVw9yByTdqVSc5jfdw4BcUe/RT4ruFYpW4Q7iaRoyO7Mx4dG2Vk7u6plRmQVivsicAl9HIejhqadDpv1Eu254xwPwFe5kG4kEi8hfz/IgDH/i94+wfRFrSqu7dLzyrwyZ2rRzoJ9XxhlVq1TsL1nSw09gj4nGKVnR1YmUFx4VJToRnVi2H9mzREru+xjin22FlAaz4KLTHhddpbvgG0VK6vgHXNjPhnLMmAkVbpIJzNBdhRgLA7IRgsEIWck2jkAFd+dcC8CeleFzTm84gzPRBtPeNA+wxzpYzyEICKf9xUqF1cQRnfkE+IL1poXmfhtOE6cZiAA/RTWgsxAlYx2gI5qN4e8BSRWGCNzUMLvmCit/MVppwp8t8sUKhx7ybkbYLQHZgpoj+212TifmrwjWkDtCT+M9q/lI1+Ov3VvNDTRLEuPaDBd5TIXvzWhaYSnCLejN6csPWqOlZsPEbvlxMLlnAGE90DBNkcBzuou1z33lv8N5iEeeLPsbR1IWUqCusRVbL3YrhLs43BkqnuZI2F9crPpVtmbrBxYccEeg3BN3Mto36yKAUmdvUsQqRoiIKQJKYnB3IWX8SSl5NtUurDNC2vgMlOjAfl9y1oOId1g+EZK5ELiR+c96pcaSN0uWJ0v7s6lytXRBWFI4NsUdfLIc+qCV0GHWUa5nxUN0Zd/coThIv0S/JPOP/llKKb6qa2XBrvYJ7+wvcvzznrAtVARBNxmxjWvoO0+8LIdhOqgFU4PdHPHhc6eN1pxSHcQqBNOz6rGWWs+NcU9HZqA1NoUGnORh/fKAcNKhFENNQoAkSEUjeHk3kkSCJK+qDMgRGqwrtSpNgXbZoa7bkpD+FF1ZNqB34ufTjQgbkHc6OZp2rYBIlNvN4zumDrtKAGWBCa3wr18EwF0LkJFoHoR/4EoZb9kyy/JxSHa4wSckntpdn8jPg3jxEp6TZfJv7saN9Ae9AmBaliugGCC5BnU6G7mCVKB+OTq2iCIp5kcTiJyq5uvKm8aJYy4rs17X127F0Z2mvEK5lF7/W86aRmSnvqOChbcqsP91uzLAQ9r/zKtNYCgn9F46Uiv/clPPvsPUH70xL/N3ZnLYfCj34lY75ZBUQr71KD0Skp0xMdrvxN74a1BptnRNVjdFf31Pq7cVtIYlhyIQsVfjim2t0krSb5LT1PP0yd2q224KGEbehwh0iM4y8PxUFpJIj6NXkSjOl6j+vqw8tg6Y7FrEFjw5Ap/KHTcsp+COQylsdx7ISEFHv6SA+dPYsNL2y5HjfFlQlaySpTZEanEC2746ri45U98K2idAaIMPQo6tylq6xKbVzJKyEoejzxIxWDzzaHnSikC3X5clxGPsXlolliJKIZXp8pi9+jd75nfvrfqq36v6YG5C73TFWeIX6ph7VZaU+fyJ0KlXeNWuTXCgzhV8nh4+ViDrVVgNGuHPyf6Y38WjzuiqJiiyEV6YQ7x/QhS1DsGl1Ky2bsvZnavUTgnP8KQ5iKTucQl/0AcXymKKPe7SRuvNJgxN3cUJ2Lz/Lc5ohNqlwHCTX1A3TU/sO/hABqoPTjCPtBqXoYxRdyZ6qQEoyBDg29EjO4nxZtHvG1dDcPgXGQ7HagRvcb6Ea+AoFlI6Gt5TdKDGR6eWkEJsmgxwZtPJ8ynJ99WMfztTB8KNjH2EvHP3P3PI8pwFK8uyMPGc5O2O8AcoXhghBbpcT2IXgAwW+1YK8nadK0Um9GE6n2ESGLUuiK4VRnUWc7J4h0Q7W5/jdRTvzUoKr4ZMDtULJ5ZC7yhcKsOdiFtq4Q2KTOx91aj2dDJyh+5sQ59Q6eApnEsUM4ocBRX1hapDFJItmgCv7J9rpQZbc+YS09u0tgGD2+bFRZNK7Uzim4XNpOaD4c3hesn5jVTTjB43o4SNke0gL219evGoB3EmwYtosPZoazpH3dWvFAVNc3PsQeMxAoUF2uiljG+GzuYmdCst/yATpqSn0O2LZICisRM29n/pFY1Qz8cq6Dyky15VArUd5F3ypwNa+1KlZf4ZdSMzMq47tSXCM7kkUMB+odFr/v1byaFyML2pcGfwm0hEx/2/sLoNzt13C2Y9dWIOrfv/FU/0xyCX1MtDzdC6kVV5/t6h8Prpvsj/EMBI6zes1X+XSG84ohc+nel5LRICzgVvPY9GAeWbDURk2XlWgH2Iyw7wF4ddANKafw7VqyKf6/vMrR9mNUMGPhzRjhfpRuf7w9phPsdLYudQAXpOc0zOfVpq/0W4HT+gJgTW4w8gAR+yAL4YKyGJiTOFCpvT6wFgnYbsnzb19vc/M6eeYnHiXuBzVOIAs3awDQOQhv8NWveZjCkfgeBSYBFBd6u50rGzg/MxYGMsM3wJSelKVyOtDDB6ANw/9z5aD5hinurrmVI8lYAXT/YN8JCDfUOlpICrzLrjGR37SzRZ0i9KRQVT6Vx0z3EwdR4EcUS5HtlLp+K3kPxPg5ZihY+X52OOmI3fZ3Q8YWI//RF4vnGeOSHbqp+oJD1cAAwYJDRATFxodISQnKy4xNTg7AAAAAAAAAAAAJHsQAAAAd2FybmluZyhzZ3IpOiBnaG9zdHR5X3Nncl9zZXRfcGFyYW1zOiBzZXBhcmF0b3JzIGxlbmd0aCAgZXhjZWVkcyBtYXggc3VwcG9ydGVkIGxlbmd0aCAUAAAABgAAAAcAAAAVAAAAZXJyb3Ioc2NyZWVuKTogZmFpbGVkIHRvIHVwZGF0ZSBzdHlsZSBvbiBjdXJzb3IgcmVsb2FkIGVycj0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVycm9yKHNjcmVlbik6IGZhaWxlZCB0byB1cGRhdGUgaHlwZXJsaW5rIG9uIHJlc2l6ZSBlcnI9d2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIGNoYXJzZXQgaW50ZXJtZWRpYXRlOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiB1bmltcGxlbWVudGVkIEVTQyBhY3Rpb246IGVycm9yKHNjcmVlbik6IGZhaWxlZCB0byB1cGRhdGUgc3R5bGUgb24gY3Vyc29yIGNoYW5nZSBlcnI9ZXJyb3Ioc2NyZWVuKTogZmFpbGVkIHRvIHVwZGF0ZSBoeXBlcmxpbmsgb24gY3Vyc29yIGNoYW5nZSBlcnI9d2FybmluZzogZGVsZXRlTGluZXMgbWFudWFsU3R5bGVVcGRhdGUgZXJyPXdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBpbmRleCBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgbmV4dCBsaW5lIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCB0YWIgc2V0IGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCByZXZlcnNlIGluZGV4IGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBzaW5nbGUgc2hpZnQgMiBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgc2luZ2xlIHNoaWZ0IDMgY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiB1bmltcGxlbWVudGVkIEVTQyBjYWxsYmFjazogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIGZ1bGwgcmVzZXQgY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIGxvY2tpbmcgc2hpZnQgMSByaWdodCBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgbG9ja2luZyBzaGlmdCAyIHJpZ2h0IGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBsb2NraW5nIHNoaWZ0IDMgcmlnaHQgY29tbWFuZDogd2FybmluZyh0ZXJtaW5hbCk6IGN1cnNvciBjb3B5IGZhaWxlZCBlbnRlcmluZyBhbHQgc2NyZWVuIGVycj13YXJuaW5nKHRlcm1pbmFsKTogcmVzdG9yZSBjdXJzb3Igb24gc3dpdGNoIHNjcmVlbiBmYWlsZWQgdG89IGVycj13YXJuaW5nKHN0cmVhbSk6IHVuaW1wbGVtZW50ZWQgc2V0TW9kZTogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIEMwIGNoYXJhY3RlciwgaWdub3Jpbmc6IDB4d2FybmluZyh0ZXJtaW5hbCk6IHplcm8td2lkdGggY2hhcmFjdGVyIHdpdGggbm8gcHJpb3IgY2hhcmFjdGVyLCBpZ25vcmluZ3dhcm5pbmcodGVybWluYWwpOiBlcnJvciByZWFsbG9jYXRpbmcgZm9yIG1vcmUgaHlwZXJsaW5rIHNwYWNlLCBpZ25vcmluZyBoeXBlcmxpbmsgZXJyPXdhcm5pbmcocGFyc2VyKTogaW52YWxpZCBpbnRlcm1lZGlhdGVzIGNvdW50d2FybmluZyhwYXJzZXIpOiBDU0kgY29sb24gb3IgbWl4ZWQgc2VwYXJhdG9ycyBvbmx5IGFsbG93ZWQgZm9yICdtJyBjb21tYW5kLCBnb3Q6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBjdXJzb3IgZG93biBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIHVuaW1wbGVtZW50ZWQgQ1NJIEIgd2l0aCBpbnRlcm1lZGlhdGVzOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgY3Vyc29yIHJpZ2h0IGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgQyB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBjdXJzb3IgdXAgY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSBFIHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSBGIHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIGhvcml6b250YWwgdGFiIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgSSB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBlcmFzZSBkaXNwbGF5IGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBlcmFzZSBsaW5lIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBJTCBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIHVuaW1wbGVtZW50ZWQgQ1NJIEwgd2l0aCBpbnRlcm1lZGlhdGVzOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgREwgY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSBNIHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIGRlbGV0ZSBjaGFyYWN0ZXJzIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgUCB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBzY3JvbGwgdXAgY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSBTIHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIHNjcm9sbCBkb3duIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgVCB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBjdXJzb3IgdGFidWxhdGlvbiBjb250cm9sOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIHVuaW1wbGVtZW50ZWQgQ1NJIFcgd2l0aCBpbnRlcm1lZGlhdGVzOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgZXJhc2UgY2hhcmFjdGVycyBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIHVuaW1wbGVtZW50ZWQgQ1NJIFggd2l0aCBpbnRlcm1lZGlhdGVzOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgaG9yaXpvbnRhbCB0YWIgYmFjayBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIHVuaW1wbGVtZW50ZWQgQ1NJIFogd2l0aCBpbnRlcm1lZGlhdGVzOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgSFBSIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgYSB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBwcmludCByZXBlYXQgY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSBiIHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIGRldmljZSBhdHRyaWJ1dGVzIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBWUEEgY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSBkIHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIFZQUiBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIHVuaW1wbGVtZW50ZWQgQ1NJIGUgd2l0aCBpbnRlcm1lZGlhdGVzOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgdGFiIGNsZWFyIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogdW5rbm93biB0YWIgY2xlYXIgbW9kZTogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSBnIHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIHNldCBtb2RlIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogdW5pbXBsZW1lbnRlZCBtb2RlOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgc2V0TW9kaWZ5S2V5Rm9ybWF0OiB3YXJuaW5nKHN0cmVhbSk6IHVua25vd24gQ1NJIG0gd2l0aCBpbnRlcm1lZGlhdGU6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgbSB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBkZXZpY2Ugc3RhdHVzIHJlcG9ydCBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IHVua25vd24gQ1NJIG4gd2l0aCBpbnRlcm1lZGlhdGU6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgbiB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgcCB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBERUNSUU0gY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIGN1cnNvciBzdHlsZSB2YWx1ZTogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIHNldCBjdXJvciBzdHlsZSBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgc2V0IHByb3RlY3RlZCBtb2RlIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgcSB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBERUNTVEJNIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogdW5pbXBsZW1lbnRlZCByZXN0b3JlIG1vZGU6IHdhcm5pbmcoc3RyZWFtKTogdW5rbm93biBDU0kgcyB3aXRoIGludGVybWVkaWF0ZTogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSBzIHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIERFQ1NMUk0gY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiB1bmltcGxlbWVudGVkIHNhdmUgbW9kZTogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIFhUU0hJRlRFU0NBUEUgY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyBDU0kgMTQgdCB3aXRoIGV4dHJhIHBhcmFtZXRlcnM6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgQ1NJIDE2IHQgd2l0aCBleHRyYSBwYXJhbWV0ZXJzOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIENTSSAxOCB0IHdpdGggZXh0cmEgcGFyYW1ldGVyczogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyBDU0kgMjEgdCB3aXRoIGV4dHJhIHBhcmFtZXRlcnM6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgQ1NJIDIyLzIzIHQgd2l0aCBleHRyYSBwYXJhbWV0ZXJzOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIENTSSB0IHdpdGggdW5pbXBsZW1lbnRlZCBwYXJhbWV0ZXI6IGVycm9yKHN0cmVhbSk6IGlnbm9yaW5nIENTSSB0IHdpdGggbm8gcGFyYW1ldGVyczogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSB0IHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIHB1c2hLaXR0eUtleWJvYXJkIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBzZXRLaXR0eUtleWJvYXJkIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgdTogd2FybmluZyhzdHJlYW0pOiBpbnZhbGlkIElDSCBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIHVuaW1wbGVtZW50ZWQgQ1NJIEA6IHdhcm5pbmcoc3RyZWFtKTogdW5pbXBsZW1lbnRlZCBDU0kgY2FsbGJhY2s6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgQSB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBjdXJzb3IgbGVmdCBjb21tYW5kOiB3YXJuaW5nKHN0cmVhbSk6IGlnbm9yaW5nIHVuaW1wbGVtZW50ZWQgQ1NJIEQgd2l0aCBpbnRlcm1lZGlhdGVzOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgSFBBIGNvbW1hbmQ6IHdhcm5pbmcoc3RyZWFtKTogaWdub3JpbmcgdW5pbXBsZW1lbnRlZCBDU0kgRyB3aXRoIGludGVybWVkaWF0ZXM6IHdhcm5pbmcoc3RyZWFtKTogaW52YWxpZCBDVVAgY29tbWFuZDogd2FybmluZyhzdHJlYW0pOiBpZ25vcmluZyB1bmltcGxlbWVudGVkIENTSSBIIHdpdGggaW50ZXJtZWRpYXRlczogd2FybmluZyhzdHJlYW0pOiB1bmltcGxlbWVudGVkIENTSSBhY3Rpb246IHdhcm5pbmcoc3RyZWFtKTogY2hhbmdlIHRpdGxlIHJlcXVlc3Q6IGludmFsaWQgdXRmLTgsIGlnbm9yaW5nIHJlcXVlc3R3YXJuaW5nKHN0cmVhbSk6IHVua25vd24gY3Vyc29yIHNoYXBlOiB3YXJuaW5nKHN0cmVhbSk6IGludmFsaWQgT1NDLCBzaG91bGQgbmV2ZXIgaGFwcGVud2FybmluZyhzdHJlYW0pOiB1bmltcGxlbWVudGVkIE9TQyBjYWxsYmFjazogd2FybmluZyhvc2MpOiBPU0Mgc2VxdWVuY2UgdG9vIGxvbmcgKD4gKSwgaWdub3JpbmcuIHN0YXRlPXdhcm5pbmcob3NjKTogT1NDIDEwIHJlcXVpcmVzIGFuIGFsbG9jYXRvciwgYnV0IG5vbmUgd2FzIHByb3ZpZGVkd2FybmluZyhvc2MpOiBPU0MgMTA0IHJlcXVpcmVzIGFuIGFsbG9jYXRvciwgYnV0IG5vbmUgd2FzIHByb3ZpZGVkd2FybmluZyhvc2MpOiBPU0MgMTEgcmVxdWlyZXMgYW4gYWxsb2NhdG9yLCBidXQgbm9uZSB3YXMgcHJvdmlkZWR3YXJuaW5nKG9zYyk6IE9TQyAxMSByZXF1aXJlcyBhbiBhbGxvY2F0b3IsIGJ1dCBub25lIHdhcyBwcm92aWRlZHdhcm5pbmcob3NjKTogT1NDIDEyIHJlcXVpcmVzIGFuIGFsbG9jYXRvciwgYnV0IG5vbmUgd2FzIHByb3ZpZGVkd2FybmluZyhvc2MpOiBPU0MgMTMgcmVxdWlyZXMgYW4gYWxsb2NhdG9yLCBidXQgbm9uZSB3YXMgcHJvdmlkZWR3YXJuaW5nKG9zYyk6IE9TQyAxNCByZXF1aXJlcyBhbiBhbGxvY2F0b3IsIGJ1dCBub25lIHdhcyBwcm92aWRlZHdhcm5pbmcob3NjKTogT1NDIDE1IHJlcXVpcmVzIGFuIGFsbG9jYXRvciwgYnV0IG5vbmUgd2FzIHByb3ZpZGVkd2FybmluZyhvc2MpOiBPU0MgMTYgcmVxdWlyZXMgYW4gYWxsb2NhdG9yLCBidXQgbm9uZSB3YXMgcHJvdmlkZWR3YXJuaW5nKG9zYyk6IE9TQyAxNyByZXF1aXJlcyBhbiBhbGxvY2F0b3IsIGJ1dCBub25lIHdhcyBwcm92aWRlZHdhcm5pbmcob3NjKTogT1NDIDE4IHJlcXVpcmVzIGFuIGFsbG9jYXRvciwgYnV0IG5vbmUgd2FzIHByb3ZpZGVkd2FybmluZyhvc2MpOiBPU0MgMTkgcmVxdWlyZXMgYW4gYWxsb2NhdG9yLCBidXQgbm9uZSB3YXMgcHJvdmlkZWT2ehAAAAAAAAAAAADdNBAAAQAAAAEAAADFNBAAAgAAAAEAAADENBAAAwAAAAEAAABWKRAAAwAAAAIAAADDNBAABAAAAAIAAADHIxAABQAAAAIAAABTLBAABQAAAAMAAAB0JhAABgAAAAMAAACNMBAABwAAAAMAAACvHhAABwAAAAQAAADyLBAACAAAAAQAAABQKRAACQAAAAQAAABhMxAACgAAAAQAAABhIhAACgAAAAUAAADLKRAACwAAAAUAAADNIxAADAAAAAUAAAAJMRAADAAAAAYAAACMHxAADQAAAAYAAAAOLhAADgAAAAYAAADDJxAADgAAAAcAAACpMxAADwAAAAcAAAADIxAAEAAAAAcAAADzKhAAEQAAAAcAAAARJRAAEQAAAAgAAAAlLxAAEgAAAAgAAAD3HhAAEwAAAAgAAAB9LRAAEwAAAAkAAABVKBAAFAAAAAkAAAAgMhAAFQAAAAkAAAAcIRAAFQAAAAoAAABUKhAAFgAAAAoAAACGJBAAFwAAAAoAAAB/MRAAGAAAAAoAAACQIBAAGAAAAAsAAADbLhAAGQAAAAsAAACsJhAAGgAAAAsAAACtNBAAGgAAAAwAAAC1IhAAGwAAAAwAAADzKxAAHAAAAAwAAAAqJhAAHAAAAA0AAAD3LxAAHQAAAA0AAAAXHhAAHgAAAA0AAABZLBAAHwAAAA0AAACsKBAAHwAAAA4AAAC7MhAAIAAAAA4AAAC5IRAAIQAAAA4AAACpKRAAIQAAAA8AAABjJBAAIgAAAA8AAACVMBAAIwAAAA8AAAAmIBAAIwAAABAAAABvLhAAJAAAABAAAABhJxAAJQAAABAAAAC5MxAAJgAAABAAAABSIxAAJgAAABEAAABDKxAAJwAAABEAAABiJRAAKAAAABEAAAB4LxAAKAAAABIAAABiHxAAKQAAABIAAAD7LBAAKgAAABIAAAAqKBAAKgAAABMAAAA2MhAAKwAAABMAAACMIRAALAAAABMAAADFKhAALQAAABMAAADjJBAALQAAABQAAABQMRAALgAAABQAAACpIBAALwAAABQAAAD1LhAALwAAABUAAAB7JhAAMAAAABUAAAAzNBAAMQAAABUAAADRIhAAMQAAABYAAADAKxAAMgAAABYAAABHJhAAMwAAABYAAABgMBAANAAAABYAAACCHhAANAAAABcAAADFLBAANQAAABcAAAAZKRAANgAAABcAAAAqMxAANgAAABgAAAApIhAANwAAABgAAADXKRAAOAAAABgAAADaIxAAOAAAABkAAAAWMRAAOQAAABkAAACaHxAAOgAAABkAAADSLRAAOwAAABkAAACHJxAAOwAAABoAAABsMxAAPAAAABoAAAAUIxAAPQAAABoAAAAFKxAAPQAAABsAAAAjJRAAPgAAABsAAAA4LxAAPwAAABsAAAC3HhAAPwAAABwAAACRLRAAQAAAABwAAABqKBAAQQAAABwAAADdMRAAQgAAABwAAADZIBAAQgAAAB0AAAAQKhAAQwAAAB0AAACeJBAARAAAAB0AAACYMRAARAAAAB4AAABKIBAARQAAAB4AAACULhAARgAAAB4AAADHJhAARgAAAB8AAABlNBAARwAAAB8AAABsIhAASAAAAB8AAAAQLBAASAAAACAAAADgJRAASQAAACAAAAAVMBAASgAAACAAAAA2HhAASwAAACAAAAB5LBAASwAAACEAAADMKBAATAAAACEAAADcMhAATQAAACEAAADbIRAATQAAACIAAABaKRAATgAAACIAAAATJBAATwAAACIAAAC5MBAATwAAACMAAADVHxAAUAAAACMAAAAdLhAAUQAAACMAAAAOJxAAUgAAACMAAADgMxAAUgAAACQAAAB5IxAAUwAAACQAAABrKxAAVAAAACQAAACLJRAAVAAAACUAAAChLxAAVQAAACUAAAALHxAAVgAAACUAAAAmLRAAVgAAACYAAADSJxAAVwAAACYAAABiMhAAWAAAACYAAAAyIRAAWQAAACYAAABrKhAAWQAAACcAAAB3YXJuaW5nKG9zYyk6IHVua25vd24gcnh2dCBleHRlbnNpb246IHdhcm5pbmcob3NjKTogaW52YWxpZCBPU0MgY29tbWFuZDogAAAAAAAAAAEAAAACAAAABAAAAAkAAAATAAAAJgAAAEwAAACZAAAAMwEAAGYCAADMBAAAmQkAADMTAABmJgAAzEwAAJmZAAAzMwEAZmYCAMzMBACZmQkAMzMTAGZmJgDMzEwAmZmZADMzMwFmZmYCzMzMBP///w93YXJuaW5nKHNjcmVlbik6IChTY3JlZW4uYWRqdXN0Q2FwYWNpdHkpIEZhaWxlZCB0byBhZGQgY3Vyc29yIHN0eWxlIGJhY2sgdG8gcGFnZSwgZXJyPXdhcm5pbmcoc2NyZWVuKTogKFNjcmVlbi5hZGp1c3RDYXBhY2l0eSkgRmFpbGVkIHRvIGFkZCBjdXJzb3IgaHlwZXJsaW5rIGJhY2sgdG8gcGFnZSwgZXJyPWVycm9yKHBhZ2VfbGlzdCk6IGZhaWxlZCB0byByZWdyb3cgYWN0aXZlIGFyZWEgYWZ0ZXIgZXJhc2UgZXJyPXdhcm5pbmcodGVybWluYWwpOiBzY3JvbGwgY2xlYXIgZmFpbGVkLCBkb2luZyBhIG5vcm1hbCBjbGVhciBlcnI9ZXJyb3IodGVybWluYWwpOiB1bmltcGxlbWVudGVkIGVyYXNlIGxpbmUgbW9kZTogZXJyb3IodGVybWluYWwpOiBpbnNlcnRMaW5lcyB0cmFja1BpbiBlcnJvciBlcnI9ZXJyb3IodGVybWluYWwpOiBkZWxldGVMaW5lcyB0cmFja1BpbiBlcnJvciBlcnI9d2FybmluZyh0ZXJtaW5hbCk6IGludmFsaWQgb3IgdW5rbm93biB0YWIgY2xlYXIgc2V0dGluZzogd2FybmluZyhvc2MpOiB6ZXJvIGxlbmd0aCBrZXkgaW4ga2l0dHkgY29sb3IgcHJvdG9jb2x3YXJuaW5nKG9zYyk6IHVua25vd24ga2V5IGluIGtpdHR5IGNvbG9yIHByb3RvY29sOiB3YXJuaW5nKG9zYyk6IGV4Y2VlZGVkIGxpbWl0IGZvciBudW1iZXIgb2Yga2V5cyBpbiBraXR0eSBjb2xvciBwcm90b2NvbCwgaWdub3Jpbmd3YXJuaW5nKG9zYyk6IHVuYWJsZSB0byBhcHBlbmQga2l0dHkgY29sb3IgcHJvdG9jb2wgb3B0aW9uOiB3YXJuaW5nKG9zYyk6IGludmFsaWQgY29sb3IgZm9ybWF0IGluIGtpdHR5IGNvbG9yIHByb3RvY29sOiB3YXJuaW5nKG9zYyk6IGFsbG9jYXRpb24gZmFpbGVkIG9uIGFsbG9jYWJsZSBzdHJpbmcgdGVybWluYXRpb24AAQIDBEVTQyAgJycgKFUrKTB4RVNDIFsgAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAoLDA0ODxAREhPvv70AAAAAAAEAAAACAAAAAwAAAAQAAAAAAAAAAADQCRAACwAAAGQYEAALAAAAcBgQAAoAAAB/EhAACwAAADgYEAANAAAAhgwQAAsAAAB8DhAADwAAAC8PEAAFAAAAJxgQABAAAACFFhAACgAAAJYPEAAVAAAAygwQABIAAACqFBAAEQAAAFEYEAASAAAAUxMQAAoAAAB7GBAACAAAAIQYEAAMAAAAoxcQAA8AAADEERAADQAAAEYYEAAKAAAAkRgQABAAAACLFBAACQAAAPIWEAAKAAAAPgsQAAgAAADxEBAADgAAADgUEAALAAAAVgkQABMAAAAwFBAAEwAAAKwJEAAWAAAAPgkQABcAAAAYFBAAFwAAAH0JEAAXAAAAlQkQABYAAADDCRAAGAAAAMUUEAAOAAAAlg0QAAsAAAA9DxAAEAAAAGoJEAASAAAAWwkQAA4AAAA1FBAADgAAANQdEAALAAAAqA0QAA0AAAAPDxAACwAAALMREAAQAAAAihEQABgAAACVFBAAFAAAANgUEAAYAAAA/RYQABUAAAAMFhAAFAAAAPEUEAAdAAAAARcQABEAAABw2REActkRAHDZEQCiSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCkSBIApkgSAKhIEgCiSBIAqkgSAKxIEgCuSBIAsEgSAKRIEgCySBIAtEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAskgSAKJIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCgSBIAoEgSAKBIEgCsSBIArkgSALBIEgCkSBIAoEgSALZIEgC4SBIAukgSALxIEgC+SBIAwEgSAMJIEgDESBIAoEgSAMZIEgDISBIAykgSAKBIEgDMSBIAzkgSANBIEgDSSBIA1EgSANZIEgDYSBIA2kgSANxIEgDeSBIA4EgSAOJIEgDkSBIAoEgSAKBIEgCgSBIAsEgSAA8AAAD/AAAA/w8AAP//AAAIAAAAAAAAAAIAAAAEAAAA\",self.location),g=[];if(B.protocol===\"file:\"){let C=B.pathname;C.match(/^\\/[A-Za-z]:\\//)&&(C=C.slice(1)),g.push(C)}g.push(B.href,\"./ghostty-vt.wasm\",\"/ghostty-vt.wasm\");let E=null;for(const C of g)try{return await Y.loadFromPath(C)}catch(I){E=I instanceof Error?I:new Error(String(I))}throw E||new Error(\"Failed to load Ghostty WASM\")}static async loadFromPath(A){let B;if(typeof Bun<\"u\"&&typeof Bun.file==\"function\")try{const C=Bun.file(A);await C.exists()&&(B=await C.arrayBuffer())}catch{}if(!B)try{const I=await(await Promise.resolve().then(()=>wA)).readFile(A);B=I.buffer.slice(I.byteOffset,I.byteOffset+I.byteLength)}catch{}if(!B){const C=await fetch(A);if(!C.ok)throw new Error(`Failed to fetch WASM: ${C.status} ${C.statusText}`);if(B=await C.arrayBuffer(),B.byteLength===0)throw new Error(`WASM file is empty (0 bytes). Check path: ${A}`)}if(!B)throw new Error(`Could not load WASM from path: ${A}`);const g=await WebAssembly.compile(B),E=await WebAssembly.instantiate(g,{env:{log:(C,I)=>{const D=new Uint8Array(E.exports.memory.buffer,C,I);console.log(\"[ghostty-vt]\",new TextDecoder().decode(D))}}});return new Y(E)}}class d{constructor(A){this.encoder=0,this.exports=A;const B=this.exports.ghostty_wasm_alloc_opaque(),g=this.exports.ghostty_key_encoder_new(0,B);if(g!==0)throw new Error(`Failed to create key encoder: ${g}`);const E=new DataView(this.exports.memory.buffer);this.encoder=E.getUint32(B,!0),this.exports.ghostty_wasm_free_opaque(B)}setOption(A,B){const g=this.exports.ghostty_wasm_alloc_u8();new DataView(this.exports.memory.buffer).setUint8(g,typeof B==\"boolean\"?B?1:0:B),this.exports.ghostty_key_encoder_setopt(this.encoder,A,g),this.exports.ghostty_wasm_free_u8(g)}setKittyFlags(A){this.setOption(r.KITTY_KEYBOARD_FLAGS,A)}encode(A){const B=this.exports.ghostty_wasm_alloc_opaque(),g=this.exports.ghostty_key_event_new(0,B);if(g!==0)throw new Error(`Failed to create key event: ${g}`);const E=new DataView(this.exports.memory.buffer),C=E.getUint32(B,!0);if(this.exports.ghostty_wasm_free_opaque(B),this.exports.ghostty_key_event_set_action(C,A.action),this.exports.ghostty_key_event_set_key(C,A.key),this.exports.ghostty_key_event_set_mods(C,A.mods),A.utf8){const M=new TextEncoder().encode(A.utf8),a=this.exports.ghostty_wasm_alloc_u8_array(M.length);new Uint8Array(this.exports.memory.buffer).set(M,a),this.exports.ghostty_key_event_set_utf8(C,a,M.length),this.exports.ghostty_wasm_free_u8_array(a,M.length)}const I=32,D=this.exports.ghostty_wasm_alloc_u8_array(I),i=this.exports.ghostty_wasm_alloc_usize(),w=this.exports.ghostty_key_encoder_encode(this.encoder,C,D,I,i);if(w!==0)throw this.exports.ghostty_wasm_free_u8_array(D,I),this.exports.ghostty_wasm_free_usize(i),this.exports.ghostty_key_event_free(C),new Error(`Failed to encode key: ${w}`);const s=E.getUint32(i,!0),N=new Uint8Array(this.exports.memory.buffer,D,s).slice();return this.exports.ghostty_wasm_free_u8_array(D,I),this.exports.ghostty_wasm_free_usize(i),this.exports.ghostty_key_event_free(C),N}dispose(){this.encoder&&(this.exports.ghostty_key_encoder_free(this.encoder),this.encoder=0)}}const m=class y{constructor(A,B,g=80,E=24,C){var I;if(this.viewportBufferPtr=0,this.viewportBufferSize=0,this.cellPool=[],this.graphemeBuffer=null,this.graphemeBufferPtr=0,this.exports=A,this.memory=B,this._cols=g,this._rows=E,C){const D=this.exports.ghostty_wasm_alloc_u8_array(T);if(D===0)throw new Error(\"Failed to allocate config (out of memory)\");try{const i=new DataView(this.memory.buffer);let w=D;i.setUint32(w,C.scrollbackLimit??1e4,!0),w+=4,i.setUint32(w,C.fgColor??0,!0),w+=4,i.setUint32(w,C.bgColor??0,!0),w+=4,i.setUint32(w,C.cursorColor??0,!0),w+=4;for(let s=0;s<16;s++)i.setUint32(w,((I=C.palette)==null?void 0:I[s])??0,!0),w+=4;this.handle=this.exports.ghostty_terminal_new_with_config(g,E,D)}finally{this.exports.ghostty_wasm_free_u8_array(D,T)}}else this.handle=this.exports.ghostty_terminal_new(g,E);if(!this.handle)throw new Error(\"Failed to create terminal\");this.initCellPool()}get cols(){return this._cols}get rows(){return this._rows}write(A){const B=typeof A==\"string\"?new TextEncoder().encode(A):A,g=this.exports.ghostty_wasm_alloc_u8_array(B.length);new Uint8Array(this.memory.buffer).set(B,g),this.exports.ghostty_terminal_write(this.handle,g,B.length),this.exports.ghostty_wasm_free_u8_array(g,B.length)}resize(A,B){A===this._cols&&B===this._rows||(this._cols=A,this._rows=B,this.exports.ghostty_terminal_resize(this.handle,A,B),this.invalidateBuffers(),this.initCellPool())}free(){this.viewportBufferPtr&&(this.exports.ghostty_wasm_free_u8_array(this.viewportBufferPtr,this.viewportBufferSize),this.viewportBufferPtr=0),this.exports.ghostty_terminal_free(this.handle)}update(){return this.exports.ghostty_render_state_update(this.handle)}getCursor(){return this.update(),{x:this.exports.ghostty_render_state_get_cursor_x(this.handle),y:this.exports.ghostty_render_state_get_cursor_y(this.handle),viewportX:this.exports.ghostty_render_state_get_cursor_x(this.handle),viewportY:this.exports.ghostty_render_state_get_cursor_y(this.handle),visible:this.exports.ghostty_render_state_get_cursor_visible(this.handle),blinking:!1,style:\"block\"}}getColors(){const A=this.exports.ghostty_render_state_get_bg_color(this.handle),B=this.exports.ghostty_render_state_get_fg_color(this.handle);return{background:{r:A>>16&255,g:A>>8&255,b:A&255},foreground:{r:B>>16&255,g:B>>8&255,b:B&255},cursor:null}}isRowDirty(A){return this.exports.ghostty_render_state_is_row_dirty(this.handle,A)}markClean(){this.exports.ghostty_render_state_mark_clean(this.handle)}getViewport(){const A=this._cols*this._rows,B=A*y.CELL_SIZE;return(!this.viewportBufferPtr||this.viewportBufferSize=this._rows)return null;this.update();const B=this.getViewport(),g=A*this._cols;return B.slice(g,g+this._cols).map(E=>({...E}))}isDirty(){return this.update()!==l.NONE}needsFullRedraw(){return this.update()===l.FULL}clearDirty(){this.markClean()}isAlternateScreen(){return!!this.exports.ghostty_terminal_is_alternate_screen(this.handle)}hasBracketedPaste(){return this.getMode(2004,!1)}hasFocusEvents(){return this.getMode(1004,!1)}hasMouseTracking(){return this.exports.ghostty_terminal_has_mouse_tracking(this.handle)!==0}getDimensions(){return{cols:this._cols,rows:this._rows}}getScrollbackLength(){return this.exports.ghostty_terminal_get_scrollback_length(this.handle)}getScrollbackLine(A){const B=this._cols*y.CELL_SIZE;(!this.viewportBufferPtr||this.viewportBufferSize(this.listeners.push(A),{dispose:()=>{const B=this.listeners.indexOf(A);B>=0&&this.listeners.splice(B,1)}})}fire(A){for(const B of this.listeners)B(A)}dispose(){this.listeners=[]}}class AA{constructor(A){this.bufferChangeEmitter=new U,this.terminal=A}get active(){const A=this.terminal.wasmTerm;return A?A.isAlternateScreen()?this.alternate:this.normal:this.normal}get normal(){return this._normalBuffer||(this._normalBuffer=new b(this.terminal,\"normal\")),this._normalBuffer}get alternate(){return this._alternateBuffer||(this._alternateBuffer=new b(this.terminal,\"alternate\")),this._alternateBuffer}get onBufferChange(){return this.bufferChangeEmitter.event}_fireBufferChange(A){this.bufferChangeEmitter.fire(A)}}class b{constructor(A,B){this.terminal=A,this.bufferType=B;const g={codepoint:0,fg_r:204,fg_g:204,fg_b:204,bg_r:0,bg_g:0,bg_b:0,flags:0,width:1,hyperlink_id:0,grapheme_len:0};this.nullCell=new n(g,0)}get type(){return this.bufferType}get cursorX(){const A=this.getWasmTerm();return A?A.getCursor().x:0}get cursorY(){const A=this.getWasmTerm();return A?A.getCursor().y:0}get viewportY(){return 0}get baseY(){return 0}get length(){const A=this.getWasmTerm();return A?this.bufferType===\"alternate\"?A.rows:A.getScrollbackLength()+A.rows:0}getLine(A){const B=this.getWasmTerm();if(!B||A<0||A>=this.length)return;const g=B.getScrollbackLength();let E,C,I;if(this.bufferType===\"normal\"&&A=this._length))return A>=this.cells.length?new n({codepoint:0,fg_r:204,fg_g:204,fg_b:204,bg_r:0,bg_g:0,bg_b:0,flags:0,width:1,hyperlink_id:0,grapheme_len:0},A):new n(this.cells[A],A)}translateToString(A=!1,B=0,g=this._length){const E=Math.max(0,Math.min(B,this._length)),C=Math.max(E,Math.min(g,this._length));let I=\"\";for(let D=E;D1114111||A>=55296&&A<=57343?\"�\":String.fromCodePoint(A)}getCode(){return this.cell.codepoint}getWidth(){return this.cell.width}getFgColorMode(){return-1}getBgColorMode(){return-1}getFgColor(){return this.cell.fg_r<<16|this.cell.fg_g<<8|this.cell.fg_b}getBgColor(){return this.cell.bg_r<<16|this.cell.bg_g<<8|this.cell.bg_b}isBold(){return this.cell.flags&F.BOLD?1:0}isItalic(){return this.cell.flags&F.ITALIC?1:0}isUnderline(){return this.cell.flags&F.UNDERLINE?1:0}isStrikethrough(){return this.cell.flags&F.STRIKETHROUGH?1:0}isBlink(){return this.cell.flags&F.BLINK?1:0}isInverse(){return this.cell.flags&F.INVERSE?1:0}isInvisible(){return this.cell.flags&F.INVISIBLE?1:0}isFaint(){return this.cell.flags&F.FAINT?1:0}getHyperlinkId(){return this.cell.hyperlink_id}getCodepoint(){return this.cell.codepoint}isDim(){return(this.cell.flags&F.FAINT)!==0}}const BA={KeyA:o.A,KeyB:o.B,KeyC:o.C,KeyD:o.D,KeyE:o.E,KeyF:o.F,KeyG:o.G,KeyH:o.H,KeyI:o.I,KeyJ:o.J,KeyK:o.K,KeyL:o.L,KeyM:o.M,KeyN:o.N,KeyO:o.O,KeyP:o.P,KeyQ:o.Q,KeyR:o.R,KeyS:o.S,KeyT:o.T,KeyU:o.U,KeyV:o.V,KeyW:o.W,KeyX:o.X,KeyY:o.Y,KeyZ:o.Z,Digit1:o.ONE,Digit2:o.TWO,Digit3:o.THREE,Digit4:o.FOUR,Digit5:o.FIVE,Digit6:o.SIX,Digit7:o.SEVEN,Digit8:o.EIGHT,Digit9:o.NINE,Digit0:o.ZERO,Enter:o.ENTER,Escape:o.ESCAPE,Backspace:o.BACKSPACE,Tab:o.TAB,Space:o.SPACE,Minus:o.MINUS,Equal:o.EQUAL,BracketLeft:o.BRACKET_LEFT,BracketRight:o.BRACKET_RIGHT,Backslash:o.BACKSLASH,Semicolon:o.SEMICOLON,Quote:o.QUOTE,Backquote:o.GRAVE,Comma:o.COMMA,Period:o.PERIOD,Slash:o.SLASH,CapsLock:o.CAPS_LOCK,F1:o.F1,F2:o.F2,F3:o.F3,F4:o.F4,F5:o.F5,F6:o.F6,F7:o.F7,F8:o.F8,F9:o.F9,F10:o.F10,F11:o.F11,F12:o.F12,PrintScreen:o.PRINT_SCREEN,ScrollLock:o.SCROLL_LOCK,Pause:o.PAUSE,Insert:o.INSERT,Home:o.HOME,PageUp:o.PAGE_UP,Delete:o.DELETE,End:o.END,PageDown:o.PAGE_DOWN,ArrowRight:o.RIGHT,ArrowLeft:o.LEFT,ArrowDown:o.DOWN,ArrowUp:o.UP,NumLock:o.NUM_LOCK,NumpadDivide:o.KP_DIVIDE,NumpadMultiply:o.KP_MULTIPLY,NumpadSubtract:o.KP_MINUS,NumpadAdd:o.KP_PLUS,NumpadEnter:o.KP_ENTER,Numpad1:o.KP_1,Numpad2:o.KP_2,Numpad3:o.KP_3,Numpad4:o.KP_4,Numpad5:o.KP_5,Numpad6:o.KP_6,Numpad7:o.KP_7,Numpad8:o.KP_8,Numpad9:o.KP_9,Numpad0:o.KP_0,NumpadDecimal:o.KP_PERIOD,IntlBackslash:o.INTL_BACKSLASH,ContextMenu:o.CONTEXT_MENU,F13:o.F13,F14:o.F14,F15:o.F15,F16:o.F16,F17:o.F17,F18:o.F18,F19:o.F19,F20:o.F20,F21:o.F21,F22:o.F22,F23:o.F23,F24:o.F24};class z{constructor(A,B,g,E,C,I,D){this.keydownListener=null,this.keypressListener=null,this.pasteListener=null,this.compositionStartListener=null,this.compositionUpdateListener=null,this.compositionEndListener=null,this.isComposing=!1,this.isDisposed=!1,this.encoder=A.createKeyEncoder(),this.container=B,this.onDataCallback=g,this.onBellCallback=E,this.onKeyCallback=C,this.customKeyEventHandler=I,this.getModeCallback=D,this.attach()}setCustomKeyEventHandler(A){this.customKeyEventHandler=A}attach(){typeof this.container.hasAttribute==\"function\"&&typeof this.container.setAttribute==\"function\"&&(this.container.hasAttribute(\"tabindex\")||this.container.setAttribute(\"tabindex\",\"0\"),this.container.style&&(this.container.style.outline=\"none\")),this.keydownListener=this.handleKeyDown.bind(this),this.container.addEventListener(\"keydown\",this.keydownListener),this.pasteListener=this.handlePaste.bind(this),this.container.addEventListener(\"paste\",this.pasteListener),this.compositionStartListener=this.handleCompositionStart.bind(this),this.container.addEventListener(\"compositionstart\",this.compositionStartListener),this.compositionUpdateListener=this.handleCompositionUpdate.bind(this),this.container.addEventListener(\"compositionupdate\",this.compositionUpdateListener),this.compositionEndListener=this.handleCompositionEnd.bind(this),this.container.addEventListener(\"compositionend\",this.compositionEndListener)}mapKeyCode(A){return BA[A]??null}extractModifiers(A){let B=q.NONE;return A.shiftKey&&(B|=q.SHIFT),A.ctrlKey&&(B|=q.CTRL),A.altKey&&(B|=q.ALT),A.metaKey&&(B|=q.SUPER),B}isPrintableCharacter(A){return A.ctrlKey&&!A.altKey||A.altKey&&!A.ctrlKey||A.metaKey?!1:A.key.length===1}handleKeyDown(A){if(this.isDisposed||this.isComposing||A.isComposing||A.keyCode===229)return;if(this.onKeyCallback&&this.onKeyCallback({key:A.key,domEvent:A}),this.customKeyEventHandler&&this.customKeyEventHandler(A)){A.preventDefault();return}if((A.ctrlKey||A.metaKey)&&A.code===\"KeyV\"||A.metaKey&&A.code===\"KeyC\")return;if(this.isPrintableCharacter(A)){A.preventDefault(),this.onDataCallback(A.key);return}const B=this.mapKeyCode(A.code);if(B===null)return;const g=this.extractModifiers(A);if(g===q.NONE||g===q.SHIFT){let C=null;switch(B){case o.ENTER:C=\"\\r\";break;case o.TAB:C=\"\t\";break;case o.BACKSPACE:C=\"\";break;case o.ESCAPE:C=\"\\x1B\";break;case o.HOME:C=\"\\x1B[H\";break;case o.END:C=\"\\x1B[F\";break;case o.INSERT:C=\"\\x1B[2~\";break;case o.DELETE:C=\"\\x1B[3~\";break;case o.PAGE_UP:C=\"\\x1B[5~\";break;case o.PAGE_DOWN:C=\"\\x1B[6~\";break;case o.F1:C=\"\\x1BOP\";break;case o.F2:C=\"\\x1BOQ\";break;case o.F3:C=\"\\x1BOR\";break;case o.F4:C=\"\\x1BOS\";break;case o.F5:C=\"\\x1B[15~\";break;case o.F6:C=\"\\x1B[17~\";break;case o.F7:C=\"\\x1B[18~\";break;case o.F8:C=\"\\x1B[19~\";break;case o.F9:C=\"\\x1B[20~\";break;case o.F10:C=\"\\x1B[21~\";break;case o.F11:C=\"\\x1B[23~\";break;case o.F12:C=\"\\x1B[24~\";break}if(C!==null){A.preventDefault(),this.onDataCallback(C);return}}const E=p.PRESS;try{if(this.getModeCallback){const w=this.getModeCallback(1);this.encoder.setOption(r.CURSOR_KEY_APPLICATION,w)}const C=A.key.length===1&&A.key.charCodeAt(0)<128?A.key.toLowerCase():void 0,I=this.encoder.encode({action:E,key:B,mods:g,utf8:C}),i=new TextDecoder().decode(I);A.preventDefault(),A.stopPropagation(),i.length>0&&this.onDataCallback(i)}catch(C){console.warn(\"Failed to encode key:\",A.code,C)}}handlePaste(A){if(this.isDisposed)return;A.preventDefault(),A.stopPropagation();const B=A.clipboardData;if(!B){console.warn(\"No clipboard data available\");return}const g=B.getData(\"text/plain\");if(!g){console.warn(\"No text in clipboard\");return}this.onDataCallback(g)}handleCompositionStart(A){this.isDisposed||(this.isComposing=!0)}handleCompositionUpdate(A){this.isDisposed}handleCompositionEnd(A){if(this.isDisposed)return;this.isComposing=!1;const B=A.data;if(B&&B.length>0&&this.onDataCallback(B),this.container&&this.container.childNodes)for(let g=this.container.childNodes.length-1;g>=0;g--){const E=this.container.childNodes[g];E.nodeType===3&&this.container.removeChild(E)}}dispose(){this.isDisposed||(this.keydownListener&&(this.container.removeEventListener(\"keydown\",this.keydownListener),this.keydownListener=null),this.keypressListener&&(this.container.removeEventListener(\"keypress\",this.keypressListener),this.keypressListener=null),this.pasteListener&&(this.container.removeEventListener(\"paste\",this.pasteListener),this.pasteListener=null),this.compositionStartListener&&(this.container.removeEventListener(\"compositionstart\",this.compositionStartListener),this.compositionStartListener=null),this.compositionUpdateListener&&(this.container.removeEventListener(\"compositionupdate\",this.compositionUpdateListener),this.compositionUpdateListener=null),this.compositionEndListener&&(this.container.removeEventListener(\"compositionend\",this.compositionEndListener),this.compositionEndListener=null),this.isDisposed=!0)}isActive(){return!this.isDisposed}}class V{constructor(A){this.terminal=A,this.providers=[],this.linkCache=new Map,this.scannedRows=new Set}registerProvider(A){this.providers.push(A),this.invalidateCache()}async getLinkAt(A,B){const g=this.terminal.buffer.active.getLine(B);if(!g||A<0||A>=g.length)return;const E=g.getCell(A);if(!E)return;const C=E.getHyperlinkId();if(C>0){const I=`h${C}`;if(this.linkCache.has(I))return this.linkCache.get(I)}if(this.scannedRows.has(B)||await this.scanRow(B),C>0){const I=`h${C}`,D=this.linkCache.get(I);if(D)return D}for(const I of this.linkCache.values())if(this.isPositionInLink(A,B,I))return I}async scanRow(A){this.scannedRows.add(A);const B=[];for(const g of this.providers){const E=await new Promise(C=>{g.provideLinks(A,C)});E&&B.push(...E)}for(const g of B)this.cacheLink(g)}cacheLink(A){const{start:B}=A.range,g=this.terminal.buffer.active.getLine(B.y);if(g){const D=g.getCell(B.x);if(!D){const{start:w,end:s}=A.range,N=`r${w.y}:${w.x}-${s.x}`;this.linkCache.set(N,A);return}const i=D.getHyperlinkId();if(i>0){this.linkCache.set(`h${i}`,A);return}}const{start:E,end:C}=A.range,I=`r${E.y}:${E.x}-${C.x}`;this.linkCache.set(I,A)}isPositionInLink(A,B,g){const{start:E,end:C}=g.range;return BC.y?!1:E.y===C.y?A>=E.x&&A<=C.x:B===E.y?A>=E.x:B===C.y?A<=C.x:!0}invalidateCache(){this.linkCache.clear(),this.scannedRows.clear()}invalidateRows(A,B){for(let E=A;E<=B;E++)this.scannedRows.delete(E);const g=[];for(const[E,C]of this.linkCache.entries()){const{start:I,end:D}=C.range;(I.y>=A&&I.y<=B||D.y>=A&&D.y<=B||I.yB)&&g.push(E)}for(const E of g)this.linkCache.delete(E)}dispose(){var A;this.linkCache.clear(),this.scannedRows.clear();for(const B of this.providers)(A=B.dispose)==null||A.call(B);this.providers=[]}}class W{constructor(A){this.terminal=A}provideLinks(A,B){const g=[],E=new Set,C=this.terminal.buffer.active.getLine(A);if(!C){B(void 0);return}for(let I=0;I{(N.ctrlKey||N.metaKey)&&window.open(s,\"_blank\",\"noopener,noreferrer\")}})}B(g.length>0?g:void 0)}findLinkRange(A,B,g){const E=this.terminal.buffer.active;let C=B,I=g;for(;I>0;){const s=E.getLine(C);if(!s)break;const N=s.getCell(I-1);if(!N||N.getHyperlinkId()!==A)break;I--}if(I===0&&C>0){let s=C-1;for(;s>=0;){const N=E.getLine(s);if(!N||N.length===0)break;const h=N.getCell(N.length-1);if(!h||h.getHyperlinkId()!==A)break;C=s,I=0;for(let M=N.length-1;M>=0;M--){const a=N.getCell(M);if(!a||a.getHyperlinkId()!==A){I=M+1;break}}if(I===0)s--;else break}}let D=B,i=g;const w=E.getLine(D);if(w){for(;i8&&g.push({text:D,range:{start:{x:i,y:A},end:{x:w,y:A}},activate:N=>{(N.ctrlKey||N.metaKey)&&window.open(D,\"_blank\",\"noopener,noreferrer\")}}),I=R.URL_REGEX.exec(C)}B(g.length>0?g:void 0)}lineToText(A){const B=[];for(let g=0;g0){for(const c of t)h.add(c);this.selectionManager.clearDirtySelectionRows()}}const M=new Set,a=this.hoveredHyperlinkId!==this.previousHoveredHyperlinkId,k=JSON.stringify(this.hoveredLinkRange)!==JSON.stringify(this.previousHoveredLinkRange);if(a){for(let t=0;t0)if(t0?!0:B||A.isRowDirty(t)||h.has(t)||M.has(t))&&(G.add(t),t>0&&G.add(t-1),t0)if(t0?t-Math.floor(g):t;c=A.getLine(J)}else c=A.getLine(t);c&&this.renderLine(c,t,D.cols)}g===0&&I.visible&&this.cursorVisible&&this.renderCursor(I.x,I.y),E&&C>0&&this.renderScrollbar(g,i,D.rows,C),this.lastCursorPosition={x:I.x,y:I.y},A.clearDirty()}renderLine(A,B,g){const E=B*this.metrics.height;this.ctx.fillStyle=this.theme.background,this.ctx.fillRect(0,E,g*this.metrics.width,this.metrics.height);for(let C=0;C0&&((h=this.currentBuffer)!=null&&h.getGraphemeString)?N=this.currentBuffer.getGraphemeString(g,B):N=String.fromCodePoint(A.codepoint||32),this.ctx.fillText(N,w,s),A.flags&F.FAINT&&(this.ctx.globalAlpha=1),A.flags&F.UNDERLINE){const M=C+this.metrics.baseline+2;this.ctx.strokeStyle=this.ctx.fillStyle,this.ctx.lineWidth=1,this.ctx.beginPath(),this.ctx.moveTo(E,M),this.ctx.lineTo(E+I,M),this.ctx.stroke()}if(A.flags&F.STRIKETHROUGH){const M=C+this.metrics.height/2;this.ctx.strokeStyle=this.ctx.fillStyle,this.ctx.lineWidth=1,this.ctx.beginPath(),this.ctx.moveTo(E,M),this.ctx.lineTo(E+I,M),this.ctx.stroke()}if(A.hyperlink_id>0&&A.hyperlink_id===this.hoveredHyperlinkId){const a=C+this.metrics.baseline+2;this.ctx.strokeStyle=\"#4A90E2\",this.ctx.lineWidth=1,this.ctx.beginPath(),this.ctx.moveTo(E,a),this.ctx.lineTo(E+I,a),this.ctx.stroke()}if(this.hoveredLinkRange){const M=this.hoveredLinkRange;if(g===M.startY&&B>=M.startX&&(gM.startY&&gM.startY||B>=M.startX)){const k=C+this.metrics.baseline+2;this.ctx.strokeStyle=\"#4A90E2\",this.ctx.lineWidth=1,this.ctx.beginPath(),this.ctx.moveTo(E,k),this.ctx.lineTo(E+I,k),this.ctx.stroke()}}}renderCursor(A,B){const g=A*this.metrics.width,E=B*this.metrics.height;switch(this.ctx.fillStyle=this.theme.cursor,this.cursorStyle){case\"block\":this.ctx.fillRect(g,E,this.metrics.width,this.metrics.height);break;case\"underline\":const C=Math.max(2,Math.floor(this.metrics.height*.15));this.ctx.fillRect(g,E+this.metrics.height-C,this.metrics.width,C);break;case\"bar\":const I=Math.max(2,Math.floor(this.metrics.width*.15));this.ctx.fillRect(g,E,I,this.metrics.height);break}}startCursorBlink(){this.cursorBlinkInterval=window.setInterval(()=>{this.cursorVisible=!this.cursorVisible},530)}stopCursorBlink(){this.cursorBlinkInterval!==void 0&&(clearInterval(this.cursorBlinkInterval),this.cursorBlinkInterval=void 0),this.cursorVisible=!0}setTheme(A){this.theme={...j,...A},this.palette=[this.theme.black,this.theme.red,this.theme.green,this.theme.yellow,this.theme.blue,this.theme.magenta,this.theme.cyan,this.theme.white,this.theme.brightBlack,this.theme.brightRed,this.theme.brightGreen,this.theme.brightYellow,this.theme.brightBlue,this.theme.brightMagenta,this.theme.brightCyan,this.theme.brightWhite]}setFontSize(A){this.fontSize=A,this.metrics=this.measureFont()}setFontFamily(A){this.fontFamily=A,this.metrics=this.measureFont()}setCursorStyle(A){this.cursorStyle=A}setCursorBlink(A){A&&!this.cursorBlink?(this.cursorBlink=!0,this.startCursorBlink()):!A&&this.cursorBlink&&(this.cursorBlink=!1,this.stopCursorBlink())}renderScrollbar(A,B,g,E=1){const C=this.ctx,I=this.canvas.height/this.devicePixelRatio,D=this.canvas.width/this.devicePixelRatio,i=8,w=D-i-4,s=4,N=I-s*2;if(C.fillStyle=this.theme.background,C.fillRect(w-2,0,i+6,I),E<=0||B===0)return;const h=B+g,M=Math.max(20,g/h*N),a=A/B,k=s+(N-M)*(1-a);C.fillStyle=`rgba(128, 128, 128, ${.1*E})`,C.fillRect(w,s,i,N);const K=A>0?.5:.3;C.fillStyle=`rgba(128, 128, 128, ${K*E})`,C.fillRect(w,k,i,M)}getMetrics(){return{...this.metrics}}getCanvas(){return this.canvas}setSelectionManager(A){this.selectionManager=A}isInSelection(A,B){const g=this.currentSelectionCoords;if(!g)return!1;const{startCol:E,startRow:C,endCol:I,endRow:D}=g;return C===D?B===C&&A>=E&&A<=I:B===C?A>=E:B===D?A<=I:B>C&&BE||B===E&&A>g)&&([A,g]=[g,A],[B,E]=[E,B]);const C=this.wasmTerm.getScrollbackLength();let I=\"\";for(let D=B;D<=E;D++){let i=null;if(D0)if(D=0?h=h.substring(0,w):h=\"\",I+=h,D=E.cols;)I-=E.cols,C++;C=Math.min(C,E.rows-1);const D=this.getViewportY();this.selectionStart={col:A,absoluteRow:D+B},this.selectionEnd={col:I,absoluteRow:D+C},this.requestRender(),this.selectionChangedEmitter.fire()}selectLines(A,B){const g=this.wasmTerm.getDimensions();A=Math.max(0,Math.min(A,g.rows-1)),B=Math.max(0,Math.min(B,g.rows-1)),A>B&&([A,B]=[B,A]);const E=this.getViewportY();this.selectionStart={col:0,absoluteRow:E+A},this.selectionEnd={col:g.cols-1,absoluteRow:E+B},this.requestRender(),this.selectionChangedEmitter.fire()}getSelectionPosition(){const A=this.normalizeSelection();if(A)return{start:{x:A.startCol,y:A.startRow},end:{x:A.endCol,y:A.endRow}}}deselect(){this.clearSelection(),this.selectionChangedEmitter.fire()}focus(){const A=this.renderer.getCanvas();A.parentElement&&A.parentElement.focus()}getSelectionCoords(){return this.normalizeSelection()}getDirtySelectionRows(){return this.dirtySelectionRows}clearDirtySelectionRows(){this.dirtySelectionRows.clear()}get onSelectionChange(){return this.selectionChangedEmitter.event}dispose(){this.selectionChangedEmitter.dispose(),this.stopAutoScroll(),this.boundMouseUpHandler&&(document.removeEventListener(\"mouseup\",this.boundMouseUpHandler),this.boundMouseUpHandler=null),this.boundDocumentMouseMoveHandler&&(document.removeEventListener(\"mousemove\",this.boundDocumentMouseMoveHandler),this.boundDocumentMouseMoveHandler=null),this.boundContextMenuHandler&&(this.renderer.getCanvas().removeEventListener(\"contextmenu\",this.boundContextMenuHandler),this.boundContextMenuHandler=null),this.boundClickHandler&&(document.removeEventListener(\"click\",this.boundClickHandler),this.boundClickHandler=null)}attachEventListeners(){const A=this.renderer.getCanvas();A.addEventListener(\"mousedown\",B=>{if(B.button===0){A.parentElement&&A.parentElement.focus();const g=this.pixelToCell(B.offsetX,B.offsetY);this.hasSelection()&&this.clearSelection();const C=this.viewportRowToAbsolute(g.row);this.selectionStart={col:g.col,absoluteRow:C},this.selectionEnd={col:g.col,absoluteRow:C},this.isSelecting=!0}}),A.addEventListener(\"mousemove\",B=>{if(this.isSelecting){this.markCurrentSelectionDirty();const g=this.pixelToCell(B.offsetX,B.offsetY),E=this.viewportRowToAbsolute(g.row);this.selectionEnd={col:g.col,absoluteRow:E},this.requestRender(),this.updateAutoScroll(B.offsetY,A.clientHeight)}}),A.addEventListener(\"mouseleave\",B=>{if(this.isSelecting){const g=A.getBoundingClientRect();B.clientYg.bottom&&this.startAutoScroll(1)}}),A.addEventListener(\"mouseenter\",()=>{this.isSelecting&&this.stopAutoScroll()}),this.boundDocumentMouseMoveHandler=B=>{if(this.isSelecting){const g=A.getBoundingClientRect(),E=Math.max(g.left,Math.min(B.clientX,g.right)),C=Math.max(g.top,Math.min(B.clientY,g.bottom)),I=E-g.left,D=C-g.top;if((B.clientXg.right||B.clientYg.bottom)&&(B.clientYg.bottom?this.startAutoScroll(1):this.stopAutoScroll(),this.autoScrollDirection===0)){this.markCurrentSelectionDirty();const i=this.pixelToCell(I,D),w=this.viewportRowToAbsolute(i.row);this.selectionEnd={col:i.col,absoluteRow:w},this.requestRender()}}},document.addEventListener(\"mousemove\",this.boundDocumentMouseMoveHandler),document.addEventListener(\"mousedown\",B=>{this.mouseDownTarget=B.target}),this.boundMouseUpHandler=B=>{if(this.isSelecting){this.isSelecting=!1,this.stopAutoScroll();const g=this.getSelection();g&&(this.copyToClipboard(g),this.selectionChangedEmitter.fire())}},document.addEventListener(\"mouseup\",this.boundMouseUpHandler),A.addEventListener(\"dblclick\",B=>{const g=this.pixelToCell(B.offsetX,B.offsetY),E=this.getWordAtCell(g.col,g.row);if(E){const C=this.viewportRowToAbsolute(g.row);this.selectionStart={col:E.startCol,absoluteRow:C},this.selectionEnd={col:E.endCol,absoluteRow:C},this.requestRender();const I=this.getSelection();I&&(this.copyToClipboard(I),this.selectionChangedEmitter.fire())}}),this.boundContextMenuHandler=B=>{if(this.renderer.getCanvas().getBoundingClientRect(),this.textarea.style.position=\"fixed\",this.textarea.style.left=`${B.clientX}px`,this.textarea.style.top=`${B.clientY}px`,this.textarea.style.width=\"1px\",this.textarea.style.height=\"1px\",this.textarea.style.zIndex=\"1000\",this.textarea.style.opacity=\"0\",this.textarea.style.pointerEvents=\"auto\",this.hasSelection()){const E=this.getSelection();this.textarea.value=E,this.textarea.select(),this.textarea.setSelectionRange(0,E.length)}else this.textarea.value=\"\";this.textarea.focus(),setTimeout(()=>{const E=()=>{this.textarea.style.pointerEvents=\"none\",this.textarea.style.zIndex=\"-10\",this.textarea.style.width=\"0\",this.textarea.style.height=\"0\",this.textarea.style.left=\"0\",this.textarea.style.top=\"0\",this.textarea.value=\"\",document.removeEventListener(\"click\",E),document.removeEventListener(\"contextmenu\",E),this.textarea.removeEventListener(\"blur\",E)};document.addEventListener(\"click\",E,{once:!0}),document.addEventListener(\"contextmenu\",E,{once:!0}),this.textarea.addEventListener(\"blur\",E,{once:!0})},10)},A.addEventListener(\"contextmenu\",this.boundContextMenuHandler),this.boundClickHandler=B=>{if(this.isSelecting||this.mouseDownTarget&&A.contains(this.mouseDownTarget))return;const E=B.target;A.contains(E)||this.hasSelection()&&this.clearSelection()},document.addEventListener(\"click\",this.boundClickHandler)}markCurrentSelectionDirty(){const A=this.normalizeSelection();if(A)for(let B=A.startRow;B<=A.endRow;B++)this.dirtySelectionRows.add(B)}updateAutoScroll(A,B){const g=O.AUTO_SCROLL_EDGE_SIZE;AB-g?this.startAutoScroll(1):this.stopAutoScroll()}startAutoScroll(A){this.autoScrollInterval!==null&&this.autoScrollDirection===A||(this.stopAutoScroll(),this.autoScrollDirection=A,this.autoScrollInterval=setInterval(()=>{if(!this.isSelecting){this.stopAutoScroll();return}const B=O.AUTO_SCROLL_SPEED*this.autoScrollDirection;if(this.terminal.scrollLines(B),this.selectionEnd){const g=this.wasmTerm.getDimensions();if(this.autoScrollDirection<0){const E=this.viewportRowToAbsolute(0);Ethis.selectionEnd.absoluteRow&&(this.selectionEnd={col:g.cols-1,absoluteRow:E})}}this.requestRender()},O.AUTO_SCROLL_INTERVAL))}stopAutoScroll(){this.autoScrollInterval!==null&&(clearInterval(this.autoScrollInterval),this.autoScrollInterval=null),this.autoScrollDirection=0}pixelToCell(A,B){const g=this.renderer.getMetrics(),E=Math.floor(A/g.width),C=Math.floor(B/g.height);return{col:Math.max(0,Math.min(E,this.terminal.cols-1)),row:Math.max(0,Math.min(C,this.terminal.rows-1))}}normalizeSelection(){if(!this.selectionStart||!this.selectionEnd)return null;let{col:A,absoluteRow:B}=this.selectionStart,{col:g,absoluteRow:E}=this.selectionEnd;(B>E||B===E&&A>g)&&([A,g]=[g,A],[B,E]=[E,B]);let C=this.absoluteRowToViewport(B),I=this.absoluteRowToViewport(E);const D=this.wasmTerm.getDimensions(),i=D.rows-1;return I<0||C>i?null:(C<0&&(C=0,A=0),I>i&&(I=i,g=D.cols-1),{startCol:A,startRow:C,endCol:g,endRow:I})}getWordAtCell(A,B){const g=this.wasmTerm.getLine(B);if(!g)return null;const E=D=>{if(!D||D.codepoint===0)return!1;const i=String.fromCodePoint(D.codepoint);return/[\\w-]/.test(i)};if(!E(g[A]))return null;let C=A;for(;C>0&&E(g[C-1]);)C--;let I=A;for(;I{if(!this.wasmTerm||this.scrollAnimationStartTime===void 0)return;const g=this.options.smoothScrollDuration??100,E=this.targetViewportY-this.viewportY;if(Math.abs(E)<.01){this.viewportY=this.targetViewportY,this.scrollEmitter.fire(Math.floor(this.viewportY)),this.getScrollbackLength()>0&&this.showScrollbar(),this.scrollAnimationFrame=void 0,this.scrollAnimationStartTime=void 0,this.scrollAnimationStartY=void 0;return}const D=1-(1/(g/1e3*60))**2;this.viewportY+=E*D;const i=Math.floor(this.viewportY);this.scrollEmitter.fire(i),this.getScrollbackLength()>0&&this.showScrollbar(),this.scrollAnimationFrame=requestAnimationFrame(this.animateScroll)},this.handleMouseMove=g=>{if(!(!this.canvas||!this.renderer||!this.wasmTerm)){if(this.isDraggingScrollbar){this.processScrollbarDrag(g);return}if(this.linkDetector){if(this.mouseMoveThrottleTimeout){this.pendingMouseMove=g;return}this.processMouseMove(g),this.mouseMoveThrottleTimeout=window.setTimeout(()=>{if(this.mouseMoveThrottleTimeout=void 0,this.pendingMouseMove){const E=this.pendingMouseMove;this.pendingMouseMove=void 0,this.processMouseMove(E)}},16)}}},this.handleMouseLeave=()=>{var g,E;this.renderer&&this.wasmTerm&&((this.renderer.hoveredHyperlinkId||0)>0&&this.renderer.setHoveredHyperlinkId(0),this.renderer.setHoveredLinkRange(null)),this.currentHoveredLink&&((E=(g=this.currentHoveredLink).hover)==null||E.call(g,!1),this.currentHoveredLink=void 0,this.element&&(this.element.style.cursor=\"text\"))},this.handleClick=async g=>{if(!this.canvas||!this.renderer||!this.linkDetector||!this.wasmTerm)return;const E=this.canvas.getBoundingClientRect(),C=Math.floor((g.clientX-E.left)/this.renderer.charWidth),D=Math.floor((g.clientY-E.top)/this.renderer.charHeight),i=this.wasmTerm.getScrollbackLength();let w;const s=this.getViewportY(),N=Math.max(0,Math.floor(s));if(N>0)if(D{var C,I,D;if(g.preventDefault(),g.stopPropagation(),this.customWheelEventHandler&&this.customWheelEventHandler(g))return;if(((C=this.wasmTerm)==null?void 0:C.isAlternateScreen())??!1){const i=g.deltaY>0?\"down\":\"up\",w=Math.min(Math.abs(Math.round(g.deltaY/33)),5);for(let s=0;s{if(!this.canvas||!this.renderer||!this.wasmTerm)return;const E=this.wasmTerm.getScrollbackLength();if(E===0)return;const C=this.canvas.getBoundingClientRect(),I=g.clientX-C.left,D=g.clientY-C.top,i=C.width,w=C.height,s=8,N=i-s-4,h=4;if(I>=N&&I<=N+s){g.preventDefault(),g.stopPropagation(),g.stopImmediatePropagation();const M=w-h*2,a=this.rows,k=E+a,G=Math.max(20,a/k*M),K=this.viewportY/E,t=h+(M-G)*(1-K);if(D>=t&&D<=t+G)this.isDraggingScrollbar=!0,this.scrollbarDragStart=D,this.scrollbarDragStartViewportY=this.viewportY,this.canvas&&(this.canvas.style.userSelect=\"none\",this.canvas.style.webkitUserSelect=\"none\");else{const J=1-(D-h)/M,x=Math.round(J*E);this.scrollToLine(Math.max(0,Math.min(E,x)))}}},this.handleMouseUp=()=>{this.isDraggingScrollbar&&(this.isDraggingScrollbar=!1,this.scrollbarDragStart=null,this.canvas&&(this.canvas.style.userSelect=\"\",this.canvas.style.webkitUserSelect=\"\"),this.scrollbarVisible&&this.getScrollbackLength()>0&&this.showScrollbar())},this.ghostty=A.ghostty??v();const B={cols:A.cols??80,rows:A.rows??24,cursorBlink:A.cursorBlink??!1,cursorStyle:A.cursorStyle??\"block\",theme:A.theme??{},scrollback:A.scrollback??1e4,fontSize:A.fontSize??15,fontFamily:A.fontFamily??\"monospace\",allowTransparency:A.allowTransparency??!1,convertEol:A.convertEol??!1,disableStdin:A.disableStdin??!1,smoothScrollDuration:A.smoothScrollDuration??100};this.options=new Proxy(B,{set:(g,E,C)=>{const I=g[E];return g[E]=C,this.isOpen&&this.handleOptionChange(E,C,I),!0}}),this.cols=this.options.cols,this.rows=this.options.rows,this.buffer=new AA(this)}handleOptionChange(A,B,g){if(B!==g)switch(A){case\"disableStdin\":break;case\"cursorBlink\":case\"cursorStyle\":this.renderer&&(this.renderer.setCursorStyle(this.options.cursorStyle),this.renderer.setCursorBlink(this.options.cursorBlink));break;case\"theme\":this.renderer&&console.warn(\"ghostty-web: theme changes after open() are not yet fully supported\");break;case\"fontSize\":this.renderer&&(this.renderer.setFontSize(this.options.fontSize),this.handleFontChange());break;case\"fontFamily\":this.renderer&&(this.renderer.setFontFamily(this.options.fontFamily),this.handleFontChange());break;case\"cols\":case\"rows\":this.resize(this.options.cols,this.options.rows);break}}handleFontChange(){if(!this.renderer||!this.wasmTerm||!this.canvas)return;this.selectionManager&&this.selectionManager.clearSelection(),this.renderer.resize(this.cols,this.rows);const A=this.renderer.getMetrics();this.canvas.width=A.width*this.cols,this.canvas.height=A.height*this.rows,this.canvas.style.width=`${A.width*this.cols}px`,this.canvas.style.height=`${A.height*this.rows}px`,this.renderer.render(this.wasmTerm,!0,this.viewportY,this)}parseColorToHex(A){if(!A)return 0;if(A.startsWith(\"#\")){let g=A.slice(1);g.length===3&&(g=g[0]+g[0]+g[1]+g[1]+g[2]+g[2]);const E=Number.parseInt(g,16);return Number.isNaN(E)?0:E}const B=A.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);if(B){const g=Number.parseInt(B[1],10),E=Number.parseInt(B[2],10),C=Number.parseInt(B[3],10);return g<<16|E<<8|C}return 0}buildWasmConfig(){const A=this.options.theme,B=this.options.scrollback;if(!A&&B===1e4)return;const g=[this.parseColorToHex(A==null?void 0:A.black),this.parseColorToHex(A==null?void 0:A.red),this.parseColorToHex(A==null?void 0:A.green),this.parseColorToHex(A==null?void 0:A.yellow),this.parseColorToHex(A==null?void 0:A.blue),this.parseColorToHex(A==null?void 0:A.magenta),this.parseColorToHex(A==null?void 0:A.cyan),this.parseColorToHex(A==null?void 0:A.white),this.parseColorToHex(A==null?void 0:A.brightBlack),this.parseColorToHex(A==null?void 0:A.brightRed),this.parseColorToHex(A==null?void 0:A.brightGreen),this.parseColorToHex(A==null?void 0:A.brightYellow),this.parseColorToHex(A==null?void 0:A.brightBlue),this.parseColorToHex(A==null?void 0:A.brightMagenta),this.parseColorToHex(A==null?void 0:A.brightCyan),this.parseColorToHex(A==null?void 0:A.brightWhite)];return{scrollbackLimit:B,fgColor:this.parseColorToHex(A==null?void 0:A.foreground),bgColor:this.parseColorToHex(A==null?void 0:A.background),cursorColor:this.parseColorToHex(A==null?void 0:A.cursor),palette:g}}open(A){if(this.isOpen)throw new Error(\"Terminal is already open\");if(this.isDisposed)throw new Error(\"Terminal has been disposed\");this.element=A,this.isOpen=!0;try{A.hasAttribute(\"tabindex\")||A.setAttribute(\"tabindex\",\"0\"),A.setAttribute(\"contenteditable\",\"true\"),A.addEventListener(\"beforeinput\",E=>E.preventDefault()),A.setAttribute(\"role\",\"textbox\"),A.setAttribute(\"aria-label\",\"Terminal input\"),A.setAttribute(\"aria-multiline\",\"true\");const B=this.buildWasmConfig();this.wasmTerm=this.ghostty.createTerminal(this.cols,this.rows,B),this.canvas=document.createElement(\"canvas\"),this.canvas.style.display=\"block\",A.appendChild(this.canvas),this.textarea=document.createElement(\"textarea\"),this.textarea.setAttribute(\"autocorrect\",\"off\"),this.textarea.setAttribute(\"autocapitalize\",\"off\"),this.textarea.setAttribute(\"spellcheck\",\"false\"),this.textarea.setAttribute(\"tabindex\",\"0\"),this.textarea.setAttribute(\"aria-label\",\"Terminal input\"),this.textarea.style.position=\"absolute\",this.textarea.style.left=\"0\",this.textarea.style.top=\"0\",this.textarea.style.width=\"1px\",this.textarea.style.height=\"1px\",this.textarea.style.padding=\"0\",this.textarea.style.border=\"none\",this.textarea.style.margin=\"0\",this.textarea.style.opacity=\"0\",this.textarea.style.clipPath=\"inset(50%)\",this.textarea.style.overflow=\"hidden\",this.textarea.style.whiteSpace=\"nowrap\",this.textarea.style.resize=\"none\",A.appendChild(this.textarea);const g=this.textarea;this.canvas.addEventListener(\"mousedown\",E=>{E.preventDefault(),g.focus()}),this.canvas.addEventListener(\"touchend\",E=>{E.preventDefault(),g.focus()}),this.renderer=new u(this.canvas,{fontSize:this.options.fontSize,fontFamily:this.options.fontFamily,cursorStyle:this.options.cursorStyle,cursorBlink:this.options.cursorBlink,theme:this.options.theme}),this.renderer.resize(this.cols,this.rows),this.inputHandler=new z(this.ghostty,A,E=>{this.options.disableStdin||this.dataEmitter.fire(E)},()=>{this.bellEmitter.fire()},E=>{this.keyEmitter.fire(E)},this.customKeyEventHandler,E=>{var C;return((C=this.wasmTerm)==null?void 0:C.getMode(E,!1))??!1}),this.selectionManager=new P(this,this.renderer,this.wasmTerm,this.textarea),this.renderer.setSelectionManager(this.selectionManager),this.selectionManager.onSelectionChange(()=>{this.selectionChangeEmitter.fire()}),this.textarea.addEventListener(\"paste\",E=>{var I;E.preventDefault(),E.stopPropagation();const C=(I=E.clipboardData)==null?void 0:I.getData(\"text\");C&&this.paste(C)}),this.linkDetector=new V(this),this.linkDetector.registerProvider(new W(this)),this.linkDetector.registerProvider(new Z(this)),A.addEventListener(\"mousedown\",this.handleMouseDown,{capture:!0}),A.addEventListener(\"mousemove\",this.handleMouseMove),A.addEventListener(\"mouseleave\",this.handleMouseLeave),A.addEventListener(\"click\",this.handleClick),document.addEventListener(\"mouseup\",this.handleMouseUp),A.addEventListener(\"wheel\",this.handleWheel,{passive:!1,capture:!0}),this.renderer.render(this.wasmTerm,!0,this.viewportY,this,this.scrollbarOpacity),this.startRenderLoop(),this.focus()}catch(B){throw this.isOpen=!1,this.cleanupComponents(),new Error(`Failed to open terminal: ${B}`)}}write(A,B){this.assertOpen(),this.options.convertEol&&typeof A==\"string\"&&(A=A.replace(/\\n/g,`\\r\n`)),this.writeInternal(A,B)}writeInternal(A,B){var g;this.wasmTerm.write(A),this.processTerminalResponses(),typeof A==\"string\"&&A.includes(\"\\x07\")?this.bellEmitter.fire():A instanceof Uint8Array&&A.includes(7)&&this.bellEmitter.fire(),(g=this.linkDetector)==null||g.invalidateCache(),this.viewportY!==0&&this.scrollToBottom(),typeof A==\"string\"&&A.includes(\"\\x1B]\")&&this.checkForTitleChange(A),B&&requestAnimationFrame(B)}writeln(A,B){if(typeof A==\"string\")this.write(A+`\\r\n`,B);else{const g=new Uint8Array(A.length+2);g.set(A),g[A.length]=13,g[A.length+1]=10,this.write(g,B)}}paste(A){this.assertOpen(),!this.options.disableStdin&&(this.wasmTerm.hasBracketedPaste()?this.dataEmitter.fire(\"\\x1B[200~\"+A+\"\\x1B[201~\"):this.dataEmitter.fire(A))}input(A,B=!1){this.assertOpen(),!this.options.disableStdin&&(B?this.dataEmitter.fire(A):this.write(A))}resize(A,B){if(this.assertOpen(),A===this.cols&&B===this.rows)return;this.cols=A,this.rows=B,this.wasmTerm.resize(A,B),this.renderer.resize(A,B);const g=this.renderer.getMetrics();this.canvas.width=g.width*A,this.canvas.height=g.height*B,this.canvas.style.width=`${g.width*A}px`,this.canvas.style.height=`${g.height*B}px`,this.resizeEmitter.fire({cols:A,rows:B}),this.renderer.render(this.wasmTerm,!0,this.viewportY,this)}clear(){this.assertOpen(),this.wasmTerm.write(\"\\x1B[2J\\x1B[H\")}reset(){this.assertOpen(),this.wasmTerm&&this.wasmTerm.free();const A=this.buildWasmConfig();this.wasmTerm=this.ghostty.createTerminal(this.cols,this.rows,A),this.renderer.clear(),this.currentTitle=\"\"}focus(){this.isOpen&&this.element&&(this.element.focus(),setTimeout(()=>{var A;(A=this.element)==null||A.focus()},0))}blur(){this.isOpen&&this.element&&this.element.blur()}loadAddon(A){A.activate(this),this.addons.push(A)}getSelection(){var A;return((A=this.selectionManager)==null?void 0:A.getSelection())||\"\"}hasSelection(){var A;return((A=this.selectionManager)==null?void 0:A.hasSelection())||!1}clearSelection(){var A;(A=this.selectionManager)==null||A.clearSelection()}selectAll(){var A;(A=this.selectionManager)==null||A.selectAll()}select(A,B,g){var E;(E=this.selectionManager)==null||E.select(A,B,g)}selectLines(A,B){var g;(g=this.selectionManager)==null||g.selectLines(A,B)}getViewportY(){return this.viewportY}getSelectionPosition(){var A;return(A=this.selectionManager)==null?void 0:A.getSelectionPosition()}attachCustomKeyEventHandler(A){this.customKeyEventHandler=A,this.inputHandler&&this.inputHandler.setCustomKeyEventHandler(A)}attachCustomWheelEventHandler(A){this.customWheelEventHandler=A}registerLinkProvider(A){if(!this.linkDetector)throw new Error(\"Terminal must be opened before registering link providers\");this.linkDetector.registerProvider(A)}scrollLines(A){if(!this.wasmTerm)throw new Error(\"Terminal not open\");const B=this.getScrollbackLength(),E=Math.max(0,Math.min(B,this.viewportY-A));E!==this.viewportY&&(this.viewportY=E,this.scrollEmitter.fire(this.viewportY),B>0&&this.showScrollbar())}scrollPages(A){this.scrollLines(A*this.rows)}scrollToTop(){const A=this.getScrollbackLength();A>0&&this.viewportY!==A&&(this.viewportY=A,this.scrollEmitter.fire(this.viewportY),this.showScrollbar())}scrollToBottom(){this.viewportY!==0&&(this.viewportY=0,this.scrollEmitter.fire(this.viewportY),this.getScrollbackLength()>0&&this.showScrollbar())}scrollToLine(A){const B=this.getScrollbackLength(),g=Math.max(0,Math.min(B,A));g!==this.viewportY&&(this.viewportY=g,this.scrollEmitter.fire(this.viewportY),B>0&&this.showScrollbar())}smoothScrollTo(A){if(!this.wasmTerm)return;const B=this.getScrollbackLength(),E=Math.max(0,Math.min(B,A));if((this.options.smoothScrollDuration??100)===0){this.viewportY=E,this.targetViewportY=E,this.scrollEmitter.fire(Math.floor(this.viewportY)),B>0&&this.showScrollbar();return}this.targetViewportY=E,!this.scrollAnimationFrame&&(this.scrollAnimationStartTime=Date.now(),this.scrollAnimationStartY=this.viewportY,this.animateScroll())}dispose(){if(!this.isDisposed){this.isDisposed=!0,this.isOpen=!1,this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=void 0),this.scrollAnimationFrame&&(cancelAnimationFrame(this.scrollAnimationFrame),this.scrollAnimationFrame=void 0),this.mouseMoveThrottleTimeout&&(clearTimeout(this.mouseMoveThrottleTimeout),this.mouseMoveThrottleTimeout=void 0),this.pendingMouseMove=void 0;for(const A of this.addons)A.dispose();this.addons=[],this.cleanupComponents(),this.dataEmitter.dispose(),this.resizeEmitter.dispose(),this.bellEmitter.dispose(),this.selectionChangeEmitter.dispose(),this.keyEmitter.dispose(),this.titleChangeEmitter.dispose(),this.scrollEmitter.dispose(),this.renderEmitter.dispose(),this.cursorMoveEmitter.dispose()}}startRenderLoop(){const A=()=>{if(!this.isDisposed&&this.isOpen){this.renderer.render(this.wasmTerm,!1,this.viewportY,this,this.scrollbarOpacity);const B=this.wasmTerm.getCursor();B.y!==this.lastCursorY&&(this.lastCursorY=B.y,this.cursorMoveEmitter.fire()),this.animationFrameId=requestAnimationFrame(A)}};A()}getScrollbackLine(A){return this.wasmTerm?this.wasmTerm.getScrollbackLine(A):null}getScrollbackLength(){return this.wasmTerm?this.wasmTerm.getScrollbackLength():0}cleanupComponents(){this.selectionManager&&(this.selectionManager.dispose(),this.selectionManager=void 0),this.inputHandler&&(this.inputHandler.dispose(),this.inputHandler=void 0),this.renderer&&(this.renderer.dispose(),this.renderer=void 0),this.canvas&&this.canvas.parentNode&&(this.canvas.parentNode.removeChild(this.canvas),this.canvas=void 0),this.textarea&&this.textarea.parentNode&&(this.textarea.parentNode.removeChild(this.textarea),this.textarea=void 0),this.element&&(this.element.removeEventListener(\"wheel\",this.handleWheel),this.element.removeEventListener(\"mousedown\",this.handleMouseDown,{capture:!0}),this.element.removeEventListener(\"mousemove\",this.handleMouseMove),this.element.removeEventListener(\"mouseleave\",this.handleMouseLeave),this.element.removeEventListener(\"click\",this.handleClick),this.element.removeAttribute(\"contenteditable\"),this.element.removeAttribute(\"role\"),this.element.removeAttribute(\"aria-label\"),this.element.removeAttribute(\"aria-multiline\")),this.isOpen&&typeof document<\"u\"&&document.removeEventListener(\"mouseup\",this.handleMouseUp),this.scrollbarHideTimeout&&(window.clearTimeout(this.scrollbarHideTimeout),this.scrollbarHideTimeout=void 0),this.linkDetector&&(this.linkDetector.dispose(),this.linkDetector=void 0),this.wasmTerm&&(this.wasmTerm.free(),this.wasmTerm=void 0),this.ghostty=void 0,this.element=void 0,this.textarea=void 0}assertOpen(){if(this.isDisposed)throw new Error(\"Terminal has been disposed\");if(!this.isOpen)throw new Error(\"Terminal must be opened before use. Call terminal.open(parent) first.\")}processMouseMove(A){if(!this.canvas||!this.renderer||!this.linkDetector||!this.wasmTerm)return;const B=this.canvas.getBoundingClientRect(),g=Math.floor((A.clientX-B.left)/this.renderer.charWidth),C=Math.floor((A.clientY-B.top)/this.renderer.charHeight);let I=0,D=null;const i=this.getViewportY(),w=Math.max(0,Math.floor(i));if(w>0){const k=this.wasmTerm.getScrollbackLength();if(C=0&&g0)if(C{var G,K,t,c;if(k!==this.currentHoveredLink&&((K=(G=this.currentHoveredLink)==null?void 0:G.hover)==null||K.call(G,!1),this.currentHoveredLink=k,(t=k==null?void 0:k.hover)==null||t.call(k,!0),this.element&&(this.element.style.cursor=k?\"pointer\":\"text\"),this.renderer))if(k){const J=((c=this.wasmTerm)==null?void 0:c.getScrollbackLength())||0,x=this.getViewportY(),X=Math.max(0,Math.floor(x)),_=k.range.start.y-J+X,$=k.range.end.y-J+X;_=0?this.renderer.setHoveredLinkRange({startX:k.range.start.x,startY:Math.max(0,_),endX:k.range.end.x,endY:Math.min(this.rows-1,$)}):this.renderer.setHoveredLinkRange(null)}else this.renderer.setHoveredLinkRange(null)}).catch(k=>{console.warn(\"Link detection error:\",k)})}processScrollbarDrag(A){if(!this.canvas||!this.renderer||!this.wasmTerm||this.scrollbarDragStart===null)return;const B=this.wasmTerm.getScrollbackLength();if(B===0)return;const g=this.canvas.getBoundingClientRect(),C=A.clientY-g.top-this.scrollbarDragStart,i=g.height-4*2,w=this.rows,s=B+w,N=Math.max(20,w/s*i),h=-C/(i-N),M=Math.round(h*B),a=this.scrollbarDragStartViewportY+M;this.scrollToLine(Math.max(0,Math.min(B,a)))}showScrollbar(){this.scrollbarHideTimeout&&(window.clearTimeout(this.scrollbarHideTimeout),this.scrollbarHideTimeout=void 0),this.scrollbarVisible?this.scrollbarOpacity=1:(this.scrollbarVisible=!0,this.scrollbarOpacity=0,this.fadeInScrollbar()),this.isDraggingScrollbar||(this.scrollbarHideTimeout=window.setTimeout(()=>{this.hideScrollbar()},this.SCROLLBAR_HIDE_DELAY_MS))}hideScrollbar(){this.scrollbarHideTimeout&&(window.clearTimeout(this.scrollbarHideTimeout),this.scrollbarHideTimeout=void 0),this.scrollbarVisible&&this.fadeOutScrollbar()}fadeInScrollbar(){const A=Date.now(),B=()=>{const g=Date.now()-A,E=Math.min(g/this.SCROLLBAR_FADE_DURATION_MS,1);this.scrollbarOpacity=E,this.renderer&&this.wasmTerm&&this.renderer.render(this.wasmTerm,!1,this.viewportY,this,this.scrollbarOpacity),E<1&&requestAnimationFrame(B)};B()}fadeOutScrollbar(){const A=Date.now(),B=this.scrollbarOpacity,g=()=>{const E=Date.now()-A,C=Math.min(E/this.SCROLLBAR_FADE_DURATION_MS,1);this.scrollbarOpacity=B*(1-C),this.renderer&&this.wasmTerm&&this.renderer.render(this.wasmTerm,!1,this.viewportY,this,this.scrollbarOpacity),C<1?requestAnimationFrame(g):(this.scrollbarVisible=!1,this.scrollbarOpacity=0,this.renderer&&this.wasmTerm&&this.renderer.render(this.wasmTerm,!1,this.viewportY,this,0))};g()}processTerminalResponses(){if(!this.wasmTerm)return;const A=this.wasmTerm.readResponse();A&&this.dataEmitter.fire(A)}checkForTitleChange(A){const B=/\\x1b\\]([012]);([^\\x07\\x1b]*?)(?:\\x07|\\x1b\\\\)/g;let g=null;for(;(g=B.exec(A))!==null;){const E=g[1],C=g[2];(E===\"0\"||E===\"2\")&&C!==this.currentTitle&&(this.currentTitle=C,this.titleChangeEmitter.fire(C))}}getMode(A,B=!1){return this.assertOpen(),this.wasmTerm.getMode(A,B)}hasBracketedPaste(){return this.assertOpen(),this.wasmTerm.hasBracketedPaste()}hasFocusEvents(){return this.assertOpen(),this.wasmTerm.hasFocusEvents()}hasMouseTracking(){return this.assertOpen(),this.wasmTerm.hasMouseTracking()}}const EA=2,CA=1,IA=15,DA=100;class oA{constructor(){this._isResizing=!1}activate(A){this._terminal=A}dispose(){this._resizeObserver&&(this._resizeObserver.disconnect(),this._resizeObserver=void 0),this._resizeDebounceTimer&&(clearTimeout(this._resizeDebounceTimer),this._resizeDebounceTimer=void 0),this._lastCols=void 0,this._lastRows=void 0,this._terminal=void 0}fit(){if(this._isResizing)return;const A=this.proposeDimensions();if(!A||!this._terminal)return;const B=this._terminal,g=B.cols,E=B.rows;if(!(A.cols===this._lastCols&&A.rows===this._lastRows||A.cols===g&&A.rows===E)){this._lastCols=A.cols,this._lastRows=A.rows,this._isResizing=!0;try{B.resize&&typeof B.resize==\"function\"&&B.resize(A.cols,A.rows)}finally{setTimeout(()=>{this._isResizing=!1},50)}}}proposeDimensions(){var G;if(!((G=this._terminal)!=null&&G.element))return;const B=this._terminal.renderer;if(!B||typeof B.getMetrics!=\"function\")return;const g=B.getMetrics();if(!g||g.width===0||g.height===0)return;const E=this._terminal.element;if(typeof E.clientWidth>\"u\")return;const C=window.getComputedStyle(E),I=Number.parseInt(C.getPropertyValue(\"padding-top\"))||0,D=Number.parseInt(C.getPropertyValue(\"padding-bottom\"))||0,i=Number.parseInt(C.getPropertyValue(\"padding-left\"))||0,w=Number.parseInt(C.getPropertyValue(\"padding-right\"))||0,s=E.clientWidth,N=E.clientHeight;if(s===0||N===0)return;const h=s-i-w-IA,M=N-I-D,a=Math.max(EA,Math.floor(h/g.width)),k=Math.max(CA,Math.floor(M/g.height));return{cols:a,rows:k}}observeResize(){var A;(A=this._terminal)!=null&&A.element&&(this._resizeObserver||(this._resizeObserver=new ResizeObserver(B=>{this._isResizing||!B[0]||(this._resizeDebounceTimer&&clearTimeout(this._resizeDebounceTimer),this._resizeDebounceTimer=setTimeout(()=>{this.fit()},DA))}),this._resizeObserver.observe(this._terminal.element)))}}let S=null;async function iA(){S||(S=await Y.load())}function v(){if(!S)throw new Error(`ghostty-web not initialized. Call init() before creating Terminal instances.\nExample:\n import { init, Terminal } from \"ghostty-web\";\n await init();\n const term = new Terminal();\n\nFor tests, pass a Ghostty instance directly:\n import { Ghostty, Terminal } from \"ghostty-web\";\n const ghostty = await Ghostty.load();\n const term = new Terminal({ ghostty });`);return S}const wA=Object.freeze(Object.defineProperty({__proto__:null,default:{}},Symbol.toStringTag,{value:\"Module\"}));e.CanvasRenderer=u,e.CellFlags=F,e.EventEmitter=U,e.FitAddon=oA,e.Ghostty=Y,e.GhosttyTerminal=f,e.InputHandler=z,e.KeyEncoder=d,e.KeyEncoderOption=r,e.LinkDetector=V,e.OSC8LinkProvider=W,e.SelectionManager=P,e.Terminal=gA,e.UrlRegexProvider=Z,e.getGhostty=v,e.init=iA,Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"})});\n\n\n// === xterm.js compatibility shim ===\n\n// Expose xterm.js-compatible globals\nwindow.Terminal = GhosttyWeb.Terminal;\nwindow.FitAddon = GhosttyWeb.FitAddon;\nwindow.Ghostty = GhosttyWeb.Ghostty;\n\n// Per-Terminal WASM isolation. ghostty-web 0.4.0 ships a module-level singleton\n// (the 'S' var inside the umd bundle) shared across all Terminal instances.\n// Two Terminals → two handles in ONE WebAssembly.Memory → zig parser globals\n// leak between them → wasm trap (\"memory access out of bounds\" at offset 0xf837)\n// when adding a 2nd grid cell. createIsolatedGhostty() returns a Ghostty backed\n// by its OWN WASM Instance (fresh Memory) so terminals can't corrupt each other.\n//\n// Each call recompiles+instantiates (~50ms). Acceptable for grid mode (handful of\n// cells); not in any hot path.\nwindow.createIsolatedGhostty = function() {\n // Reuse Ghostty.load()'s logic: it tries the embedded data: URL, file paths,\n // and ./ghostty-vt.wasm. Each call returns a brand-new Ghostty wrapping a\n // fresh WebAssembly.Instance — exactly what we want for per-terminal isolation.\n return GhosttyWeb.Ghostty.load();\n};\n\n// Auto-init WASM — consumers await window.ghosttyReady before creating terminals\nwindow.wasmFailed = false;\nif (typeof WebAssembly === \"undefined\" || typeof WebAssembly.instantiate !== \"function\") {\n console.warn(\"[ghostty-web] WebAssembly not supported — falling back to text mode\");\n window.wasmFailed = true;\n window.ghosttyReady = Promise.reject(new Error(\"WebAssembly not supported\"));\n window.ghosttyReady.catch(function() {});\n} else {\n window.ghosttyReady = GhosttyWeb.init().then(function() {\n console.log(\"[ghostty-web] WASM initialized\");\n }).catch(function(err) {\n console.error(\"[ghostty-web] WASM init failed:\", err);\n window.wasmFailed = true;\n throw err;\n });\n}\n\n})();\n", mime: "application/javascript" }], ["icon-192.png", { content: _b64("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"), mime: "image/png" }], ["index.html", { content: "\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Wolfpack\n \n \n \n \n \n
\n
\n \n
\n
\n
\n
\n \"\"\n

wolfpack

\n
\n
\n
\n
\n \n
\n
\n
\n
\n \"\"\n

WOLFPACK

\n
\n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n \n
\n
\n
\n \"\"\n

WOLFPACK

\n
\n
\n \n \n
\n
\n
\n
\n\n \n
\n \n
\n \n \n
\n
\n
\n\n \n
\n \n
\n
session name
\n \n
\n
\n
\n
\n\n \n
\n \n
\n
\n
Machines
\n
\n \n
\n
\n
\n
Effects
\n \n \n \n
\n
\n
Terminal
\n
\n
Font size
\n
\n \n \n \n
\n
\n
\n
Font family
\n
\n \n \n
\n
\n
\n
\n Recovery snapshot TTL15m\n
\n \n
\n
\n
\n
Input
\n \n \n
\n
\n
Ralph Loop
\n \n
\n Ralph is an autonomous agent loop that works through a plan file task-by-task. It spawns AI agents (Claude, Codex, Gemini) as detached processes, each completing one task before handing off to the next. Progress is tracked via strikethrough headers or checkboxes in your plan file. Enable this to show Ralph controls throughout the UI.\n
\n
\n
\n
Agents
\n
\n Commands shown when creating a session. Toggle to enable, × to remove. If you disable everything, the picker falls back to shell.\n
\n
\n
\n \n \n
\n
\n
\n
\n
Quick Commands
\n
\n \n
\n
\n
Debug
\n \n
\n
\n Render p50\n Render p95\n Render avg\n Samples0\n WS messages0\n Reconnects0\n Sends0\n Send failures0\n Session uptime\n
\n \n
\n
\n
\n \"wolfpack\"\n
About
\n
\n
\n
\n
\n\n \n
\n \n Reconnecting...\n
\n
\n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n \n \n
\n
\n
\n\n \n
\n \n
\n
\n
\n
\n        
\n view raw log\n
\n
\n
\n
\n\n \n
\n \n
\n
\n\n \n \n\n \n \n\n \n \n\n \n \n\n
\n
\n \n \n
\n
\n \n \n
\n
\n Isolation\n
\n \n \n \n \n \n \n \n \n
\n
\n
\n
\n \n \n \n \n
\n
\n \n \n \n \n
\n\n \n
\n
\n
\n\n \n \n\n", mime: "text/html; charset=utf-8" }], ["manifest.json", { content: "{\n \"name\": \"Wolfpack\",\n \"short_name\": \"Wolfpack\",\n \"start_url\": \"/\",\n \"scope\": \"/\",\n \"display\": \"standalone\",\n \"background_color\": \"#0d1117\",\n \"theme_color\": \"#0d1117\",\n \"id\": \"/\",\n \"icons\": [\n { \"src\": \"/wolfpack-icon.svg\", \"sizes\": \"any\", \"type\": \"image/svg+xml\", \"purpose\": \"any\" }\n ]\n}\n", mime: "application/json" }], ["styles.css", { content: ":root {\n /* ── Backgrounds ── */\n --bg-base: #0a0a0a;\n --bg-surface: #111;\n --bg-elevated: #1a1a1a;\n --bg-hover: #141414;\n --bg-pressed: #161616;\n --bg-inset: #0e0e0e;\n --bg-deep: #0c0c0c;\n --bg-surface-gradient: linear-gradient(145deg, #111 0%, #0c0c0c 100%);\n --bg-header-gradient: linear-gradient(180deg, #131313 0%, #0f0f0f 100%);\n /* ── Borders ── */\n --border: #1a1a1a;\n --border-subtle: #1e1e1e;\n --border-hover: #2a2a2a;\n --border-strong: #333;\n --border-input: #222;\n /* ── Accent (green) ── */\n --accent: #00ff41;\n --accent-dim: #00ff4160;\n --accent-ghost: #00ff4115;\n --accent-glow: rgba(0,255,65,0.3);\n --accent-border: rgba(0,255,65,0.4);\n --accent-muted: rgba(0,255,65,0.15);\n --accent-subtle: rgba(0,255,65,0.08);\n --accent-faint: rgba(0,255,65,0.04);\n /* ── Text ── */\n --text-primary: #e0e0e0;\n --text-secondary: #b0b0b0;\n --text-muted: #888;\n --text-dim: #555;\n --text-ghost: #444;\n --text-faint: #333;\n /* ── Semantic ── */\n --danger: #cc3333;\n --danger-bright: #ff4444;\n --danger-hot: #ff6666;\n --warning: #ffcc00;\n --warning-hot: #ff6600;\n --ralph: #9b59b6;\n --ralph-bright: #8e44ad;\n --ralph-border: rgba(155,89,182,0.6);\n --cmd-accent: #66ccff;\n --cmd-border: rgba(0,170,255,0.3);\n --git-accent: #f0883e;\n --insert-accent: #ff9900;\n --conflict-accent: #ff9944;\n /* ── Typography ── */\n --font-mono: \"SF Mono\", \"JetBrains Mono\", \"Fira Code\", \"Cascadia Code\", \"Consolas\", monospace;\n --font-mono-alt: \"JetBrains Mono\", \"Fira Code\", \"Source Code Pro\", \"Cascadia Code\", monospace;\n /* ── Radii ── */\n --radius-sm: 3px;\n --radius-md: 6px;\n --radius-lg: 12px;\n /* ── Shadows ── */\n --shadow-btn: 0 2px 4px rgba(0,0,0,0.3), inset 0 1px 0 rgba(255,255,255,0.04);\n --shadow-drop: 0 2px 8px rgba(0,0,0,0.4);\n}\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\nbody {\n font-family: var(--font-mono);\n background: var(--bg-base);\n background-image: radial-gradient(circle at 1px 1px, rgba(0,255,65,0.025) 1px, transparent 0);\n background-size: 20px 20px;\n color: var(--text-secondary);\n height: 100dvh;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n font-size: 13px;\n}\nbody::after {\n content: '';\n position: fixed;\n top: 50%; left: 50%;\n transform: translate(-50%, -50%);\n width: 200px; height: 200px;\n background: url(\"/wolfpack-icon.svg\") no-repeat center/contain;\n opacity: 0.02;\n pointer-events: none;\n z-index: 0;\n}\n* { scrollbar-width: thin; scrollbar-color: #1e1e1e transparent; }\n::-webkit-scrollbar { width: 5px; height: 5px; }\n::-webkit-scrollbar-track { background: transparent; }\n::-webkit-scrollbar-thumb { background: #1e1e1e; border-radius: 3px; }\n::-webkit-scrollbar-thumb:hover { background: #00ff4140; }\n:focus-visible {\n outline: 1px solid var(--accent-border);\n outline-offset: 2px;\n}\n::selection {\n background: rgba(0,255,65,0.2);\n color: var(--text-primary);\n}\nheader {\n padding: 3px 8px;\n background: var(--bg-header-gradient);\n display: grid;\n grid-template-columns: 1fr auto 1fr;\n align-items: center;\n min-height: 46px;\n flex-shrink: 0;\n border-bottom: 1px solid var(--accent-muted);\n box-shadow: 0 1px 24px rgba(0,255,65,0.06), 0 1px 0 rgba(0,255,65,0.08);\n transition: opacity 0.15s ease;\n position: relative;\n z-index: 100;\n}\nheader.fading { opacity: 0; }\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n justify-self: start;\n}\n.header-center {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-self: center;\n}\nheader h1 {\n font-size: 14px;\n font-weight: 800;\n text-transform: uppercase;\n letter-spacing: 4px;\n color: var(--accent);\n text-shadow: 0 0 14px rgba(0,255,65,0.45), 0 0 40px rgba(0,255,65,0.1);\n white-space: nowrap;\n}\n.header-right {\n display: flex;\n align-items: center;\n gap: 8px;\n justify-self: end;\n}\n.back-btn {\n display: none;\n background: var(--bg-elevated);\n border: 1px solid var(--border-hover);\n color: #999;\n font-size: 11px;\n font-family: inherit;\n text-transform: uppercase;\n letter-spacing: 1px;\n cursor: pointer;\n padding: 8px 14px;\n border-radius: var(--radius-md);\n transition: transform 0.1s ease, box-shadow 0.1s ease;\n min-height: 38px;\n min-width: 60px;\n -webkit-tap-highlight-color: transparent;\n box-shadow: var(--shadow-btn);\n}\n.back-btn:active {\n transform: scale(0.95);\n background: var(--accent);\n color: var(--bg-base);\n}\n\n#view-container {\n flex: 1;\n position: relative;\n overflow: hidden;\n touch-action: pan-y; /* let browser handle vertical scroll, we handle horizontal */\n}\n#view-container::after {\n content: '';\n position: absolute;\n inset: 0;\n background: radial-gradient(ellipse at center, transparent 55%, rgba(0,0,0,0.25) 100%);\n pointer-events: none;\n z-index: 0;\n}\n.view {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n position: absolute;\n top: 0; left: 0; right: 0; bottom: 0;\n transform: translate3d(100%, 0, 0);\n pointer-events: none;\n will-change: transform;\n backface-visibility: hidden;\n -webkit-backface-visibility: hidden;\n}\n.view.visible {\n transform: translate3d(0, 0, 0);\n pointer-events: auto;\n}\n.view.animating {\n transition: transform 0.28s cubic-bezier(0.2, 0.9, 0.3, 1);\n}\n/* kill all transitions during swipe gesture — immune to animations toggle */\n.swipe-active, .swipe-active * {\n transition: none !important;\n}\n/* edge shadow on the foreground view during swipe (iOS-style) */\n.view::before {\n content: \"\";\n position: absolute;\n top: 0; bottom: 0; left: -24px;\n width: 24px;\n background: linear-gradient(to right, transparent, rgba(0,255,65,0.08));\n opacity: 0;\n pointer-events: none;\n z-index: 999;\n}\n.view.swiping::before {\n opacity: 1;\n}\n/* desktop: subtle fade */\n@media (min-width: 769px) {\n .view.animating {\n transition: opacity 0.15s ease;\n }\n #kb-accessory { display: none; }\n}\n\n#terminal-view {\n padding-left: env(safe-area-inset-left);\n padding-right: env(safe-area-inset-right);\n}\n\n.list {\n flex: 1;\n overflow-y: auto;\n padding: 6px;\n}\n.card {\n background: var(--bg-surface-gradient);\n border: 1px solid var(--border);\n border-left: 3px solid var(--border-strong);\n border-radius: var(--radius-sm);\n padding: 14px 12px;\n margin-bottom: 6px;\n min-height: 60px;\n display: flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition: transform 0.1s ease, background 0.1s ease;\n position: relative;\n}\n.card:active:not(:has(.kill-btn:active)) {\n background: linear-gradient(145deg, #151515 0%, var(--bg-surface) 100%);\n transform: scale(0.98);\n}\n.card.attention {\n border-left: 3px solid var(--warning);\n box-shadow: inset 4px 0 16px -8px rgba(255,204,0,0.12);\n}\n.card.active-session {\n border-left: 3px solid var(--accent);\n box-shadow: inset 4px 0 16px -8px rgba(0,255,65,0.12);\n}\n.card.idle-session { border-left: 3px solid var(--border-subtle); }\n.triage-badge {\n font-size: 9px;\n font-weight: 700;\n letter-spacing: 0.8px;\n text-transform: uppercase;\n padding: 1px 5px;\n border-radius: var(--radius-sm);\n white-space: nowrap;\n flex-shrink: 0;\n}\n.triage-badge.running { color: var(--accent); background: var(--accent-ghost); }\n.triage-badge.idle { color: var(--text-dim); background: #55555515; }\n.backend-badge {\n font-size: 8px;\n font-weight: 600;\n letter-spacing: 0.5px;\n text-transform: uppercase;\n padding: 1px 4px;\n border-radius: var(--radius-sm);\n margin-left: 4px;\n color: var(--text-dim);\n background: #44444420;\n}\n.backend-btn.active { border-color: rgba(0,255,65,0.5) !important; color: var(--accent) !important; background: rgba(0,255,65,0.05) !important; }\n.backend-btn:disabled { opacity: 0.35; cursor: not-allowed; pointer-events: none; }\n.dot {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n.dot.green {\n background: var(--accent);\n box-shadow: 0 0 6px var(--accent-dim), 0 0 14px #00ff4120;\n animation: dot-breathe 2.5s ease-in-out infinite;\n}\n@keyframes dot-breathe {\n 0%, 100% { box-shadow: 0 0 4px #00ff4140, 0 0 10px #00ff4115; }\n 50% { box-shadow: 0 0 8px #00ff4180, 0 0 18px #00ff4130; }\n}\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n@keyframes fadeSlideIn {\n from { opacity: 0; transform: translateY(6px); }\n to { opacity: 1; transform: translateY(0); }\n}\n.card-stagger.animate-in { animation: fadeSlideIn 0.2s ease backwards; }\n/* master animation kill switch */\nbody.no-animations, body.no-animations * {\n transition: none !important;\n animation: none !important;\n}\n/* terminal preset button active state */\n.term-size-btn.active, .term-font-btn.active {\n border-color: rgba(0,255,65,0.5) !important;\n color: var(--accent) !important;\n background: rgba(0,255,65,0.05) !important;\n}\n.dot.brand {\n background: var(--accent);\n}\n.dot.gray {\n background: var(--text-faint);\n}\n.card-name {\n font-size: 14px;\n font-weight: 700;\n color: var(--accent);\n text-transform: uppercase;\n letter-spacing: 1.8px;\n text-shadow: 0 0 10px var(--accent-glow);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.card-preview {\n font-size: 12px;\n color: var(--text-ghost);\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n line-height: 1.45;\n max-width: 100%;\n white-space: pre-line;\n margin-top: 2px;\n}\n.card-info {\n flex: 1;\n min-width: 0;\n}\n@media (min-width: 769px) {\n .card {\n padding: 6px 8px;\n min-height: 0;\n border-left-width: 2px;\n margin-bottom: 3px;\n }\n .card-name { font-size: 12px; letter-spacing: 2px; }\n .card-preview { -webkit-line-clamp: 1; }\n .dot { width: 7px; height: 7px; }\n .kill-btn {\n font-size: 20px;\n padding: 8px 12px;\n min-width: auto;\n min-height: auto;\n display: block;\n }\n .machine-header {\n gap: 5px;\n padding: 4px 4px 5px;\n font-size: 11px;\n }\n .view::before {\n left: -20px;\n width: 20px;\n background: linear-gradient(to right, transparent, rgba(0,0,0,0.15));\n }\n .picker-cancel-btn { display: inline-block; }\n}\n\n/* ── Session name field ── */\n.session-name-block {\n padding: 10px 6px 14px;\n border-bottom: 1px solid var(--border);\n margin-bottom: 6px;\n}\n.session-name-label {\n font-size: 10px;\n color: var(--text-dim);\n text-transform: uppercase;\n letter-spacing: 2.5px;\n margin-bottom: 8px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.session-name-label::before {\n content: '>';\n color: var(--accent);\n text-shadow: 0 0 6px var(--accent-border);\n font-size: 10px;\n}\n.session-name-input {\n width: 100%;\n background: var(--bg-inset);\n border: 1px solid var(--border-input);\n border-radius: var(--radius-md);\n padding: 12px;\n color: var(--accent);\n font-family: var(--font-mono-alt);\n font-size: 14px;\n letter-spacing: 0.8px;\n outline: none;\n caret-color: var(--accent);\n text-shadow: 0 0 4px var(--accent-muted);\n transition: border-color 0.2s, box-shadow 0.2s;\n}\n.session-name-input::placeholder { color: #2a2a2a; }\n.session-name-input:focus {\n border-color: var(--accent-border);\n box-shadow: 0 0 8px rgba(0,255,65,0.08), inset 0 0 12px rgba(0,255,65,0.03);\n}\n.session-name-input.invalid {\n border-color: rgba(255,60,60,0.5);\n box-shadow: 0 0 8px rgba(255,60,60,0.08);\n color: var(--danger-bright);\n text-shadow: 0 0 4px rgba(255,60,60,0.15);\n}\n.session-name-error {\n font-size: 9px;\n color: var(--danger-bright);\n letter-spacing: 1px;\n margin-top: 4px;\n text-transform: uppercase;\n display: none;\n}\n.session-name-error.visible { display: block; }\n\n.new-btn {\n background: linear-gradient(145deg, var(--bg-elevated) 0%, #151515 100%);\n border: 1px solid var(--accent-glow);\n border-radius: var(--radius-md);\n padding: 14px 16px;\n margin-bottom: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n cursor: pointer;\n color: var(--accent);\n font-size: 14px;\n font-weight: 600;\n font-family: inherit;\n text-transform: uppercase;\n letter-spacing: 1.5px;\n min-height: 52px;\n -webkit-tap-highlight-color: transparent;\n transition: transform 0.1s ease, box-shadow 0.1s ease;\n box-shadow: var(--shadow-btn);\n}\n.new-btn:active {\n transform: scale(0.97);\n background: var(--accent);\n color: var(--bg-base);\n box-shadow: 0 0 16px var(--accent-glow);\n}\n\n@media (min-width: 769px) { .mobile-only-setting { display: none !important; } }\n\n#cmd-palette {\n display: none;\n gap: 6px;\n padding: 6px 10px 4px;\n background: var(--bg-surface);\n border-top: 1px solid var(--border);\n flex-shrink: 0;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: none;\n}\n#cmd-palette::-webkit-scrollbar { display: none; }\n#cmd-palette.visible { display: flex; }\n.cmd-chip {\n flex-shrink: 0;\n background: linear-gradient(145deg, var(--bg-elevated) 0%, #151515 100%);\n border: 1px solid var(--cmd-border);\n border-radius: var(--radius-md);\n padding: 6px 14px;\n min-height: 36px;\n color: var(--cmd-accent);\n font-size: 12px;\n font-family: inherit;\n font-weight: 600;\n letter-spacing: 0.3px;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition: transform 0.1s ease, box-shadow 0.1s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n white-space: nowrap;\n box-shadow: var(--shadow-btn);\n}\n.cmd-chip:active {\n transform: scale(0.93);\n background: var(--cmd-accent);\n color: var(--bg-base);\n box-shadow: 0 0 12px var(--cmd-border);\n}\n\n#kb-accessory {\n display: none;\n gap: 5px;\n padding: 6px 10px 4px;\n background: var(--bg-surface);\n border-top: 1px solid var(--border);\n flex-shrink: 0;\n justify-content: flex-start;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: none;\n}\n#kb-accessory::-webkit-scrollbar { display: none; }\n#kb-accessory.visible {\n display: flex;\n}\n.kb-open {\n background: linear-gradient(145deg, var(--accent), #006622) !important;\n color: var(--bg-base) !important;\n min-width: 44px;\n padding: 6px 10px !important;\n}\n.kb-open svg {\n width: 22px;\n height: 22px;\n display: block;\n}\n.kb-open.active {\n background: linear-gradient(145deg, #006622, var(--accent)) !important;\n box-shadow: 0 0 8px var(--accent-glow);\n}\n.kb-key {\n flex-shrink: 0;\n background: linear-gradient(145deg, #222 0%, var(--bg-elevated) 100%);\n border: 1px solid var(--border-strong);\n border-radius: var(--radius-md);\n padding: 6px 12px;\n min-width: 40px;\n min-height: 36px;\n color: #ccc;\n font-size: 13px;\n font-family: inherit;\n font-weight: 600;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition: transform 0.08s ease, background 0.08s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n white-space: nowrap;\n box-shadow: 0 2px 3px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.06);\n user-select: none;\n -webkit-user-select: none;\n}\n.kb-key:active {\n transform: scale(0.9);\n background: #444;\n color: #fff;\n}\n.kb-key.kb-special {\n color: var(--accent);\n border-color: var(--accent-glow);\n}\n.kb-key.kb-special:active {\n background: var(--accent);\n color: var(--bg-base);\n}\n.kb-key.kb-enter {\n color: var(--accent);\n border-color: var(--accent-glow);\n min-width: 52px;\n min-height: 40px;\n font-size: 18px;\n}\n.kb-key.kb-enter:active {\n background: var(--accent);\n color: var(--bg-base);\n}\n.kb-key.kb-danger {\n color: var(--danger);\n border-color: rgba(204, 51, 51, 0.3);\n min-width: 72px;\n min-height: 42px;\n font-size: 16px;\n font-weight: 700;\n padding: 10px 20px;\n}\n.kb-key.kb-danger:active {\n background: var(--danger);\n color: var(--bg-base);\n}\n.kb-key.kb-git {\n color: var(--git-accent);\n border-color: rgba(240, 136, 62, 0.3);\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.5px;\n}\n.kb-key.kb-git:active {\n background: var(--git-accent);\n color: var(--bg-base);\n}\n.kb-key.kb-insert {\n color: var(--insert-accent);\n border-color: rgba(255, 153, 0, 0.3);\n font-weight: 700;\n font-size: 14px;\n}\n.kb-key.kb-insert:active {\n background: var(--insert-accent);\n color: var(--bg-base);\n}\n#input-bar {\n display: flex;\n gap: 8px;\n padding: 8px 10px;\n padding-bottom: max(8px, env(safe-area-inset-bottom));\n background: var(--bg-surface);\n border-top: 1px solid var(--border);\n flex-shrink: 0;\n}\n#input-bar textarea {\n flex: 1;\n background: var(--bg-base);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-lg);\n padding: 10px 12px;\n color: var(--text-primary);\n font-size: 16px;\n font-family: inherit;\n outline: none;\n resize: none;\n overflow-y: auto;\n line-height: 1.4;\n max-height: 120px;\n min-height: 44px;\n caret-color: var(--accent);\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n}\n#input-bar textarea:focus {\n border-color: var(--accent);\n box-shadow: 0 0 0 2px rgba(0,255,65,0.08), 0 0 12px rgba(0,255,65,0.06);\n}\n#msg-preview {\n display: none;\n position: fixed;\n bottom: 60px;\n left: 10px;\n right: 10px;\n background: var(--bg-surface);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-md);\n padding: 12px;\n color: var(--text-secondary);\n font-size: 14px;\n font-family: inherit;\n white-space: pre-wrap;\n max-height: 50vh;\n overflow-y: auto;\n z-index: 10;\n}\n#input-bar button {\n background: var(--bg-elevated);\n border: 1px solid var(--accent-border);\n border-radius: var(--radius-lg);\n width: 44px;\n height: 44px;\n color: var(--accent);\n font-size: 20px;\n cursor: pointer;\n flex-shrink: 0;\n align-self: flex-end;\n transition: transform 0.1s ease, box-shadow 0.1s ease;\n box-shadow: var(--shadow-btn);\n}\n#input-bar button:active {\n transform: scale(0.95);\n background: var(--accent);\n color: var(--bg-base);\n box-shadow: 0 0 12px var(--accent-glow);\n}\n\n.picker-cancel-btn {\n display: none;\n margin: 8px 8px 4px;\n padding: 6px 12px;\n background: var(--bg-hover);\n border: 1px solid var(--border-hover);\n border-radius: var(--radius-md);\n color: #666;\n font-family: inherit;\n font-size: 10px;\n text-transform: uppercase;\n letter-spacing: 1px;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition: color 0.15s, border-color 0.15s;\n}\n.picker-cancel-btn:hover {\n color: #999;\n border-color: var(--border-strong);\n}\n.picker-cancel-btn:active {\n color: var(--accent);\n border-color: var(--accent-glow);\n}\n.new-project-row {\n display: flex;\n gap: 8px;\n padding: 10px;\n background: var(--bg-surface);\n border-bottom: 1px solid var(--border);\n}\n.new-project-row input {\n flex: 1;\n background: var(--bg-base);\n border: 1px solid var(--border-subtle);\n border-radius: var(--radius-md);\n padding: 10px 12px;\n color: var(--text-primary);\n font-size: 15px;\n font-family: inherit;\n outline: none;\n min-height: 44px;\n caret-color: var(--accent);\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n}\n.new-project-row input:focus {\n border-color: var(--accent);\n box-shadow: 0 0 0 2px rgba(0,255,65,0.08), 0 0 12px rgba(0,255,65,0.06);\n}\n.new-project-row button {\n background: none;\n border: 1px solid var(--accent);\n border-radius: var(--radius-md);\n padding: 10px 16px;\n color: var(--accent);\n font-size: 12px;\n font-family: inherit;\n text-transform: uppercase;\n letter-spacing: 1px;\n cursor: pointer;\n min-height: 44px;\n transition: all 0.15s ease;\n}\n.new-project-row button:active {\n background: var(--accent);\n color: var(--bg-base);\n}\n\n.empty {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n color: var(--text-faint);\n position: relative;\n letter-spacing: 2px;\n text-transform: uppercase;\n font-size: 11px;\n}\n#session-list:empty::after {\n content: '';\n display: block;\n width: 120px;\n height: 135px;\n margin: 80px auto 20px;\n opacity: 0.03;\n background-image: url(\"/wolfpack-icon.svg\");\n background-repeat: no-repeat;\n background-size: contain;\n background-position: center;\n}\n\n.settings-section {\n padding: 10px 8px;\n}\n.settings-section label {\n display: flex;\n align-items: center;\n padding: 8px 0;\n font-size: 14px;\n min-height: 44px;\n}\n.settings-label {\n font-size: 11px;\n color: var(--text-dim);\n margin-bottom: 10px;\n text-transform: uppercase;\n letter-spacing: 2px;\n}\n.kill-btn {\n background: none;\n border: none;\n color: var(--danger);\n font-size: 22px;\n cursor: pointer;\n padding: 10px 14px;\n margin-left: auto;\n -webkit-tap-highlight-color: transparent;\n transition: color 0.15s ease;\n position: relative;\n z-index: 2;\n min-width: 44px;\n min-height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.kill-btn:hover {\n color: var(--danger-bright);\n}\n.kill-btn:active {\n color: var(--danger-hot);\n}\n.loading-text {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: var(--text-dim);\n font-size: 12px;\n letter-spacing: 1px;\n animation: pulse 1.5s ease-in-out infinite;\n}\n.loading-text::after {\n content: '█';\n animation: terminal-blink 0.7s step-end infinite;\n color: var(--accent);\n margin-left: 3px;\n}\n@keyframes terminal-blink {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0; }\n}\n@keyframes pulse {\n 0%, 100% { opacity: 0.4; }\n 50% { opacity: 1; }\n}\n@keyframes send-flash {\n 0% { background: #00ff41; color: #0a0a0a; }\n 100% { background: none; color: #00ff41; }\n}\n.send-flash {\n animation: send-flash 0.3s ease-out;\n}\n/* Hold-to-send progress ring (UX-07) */\n#send-btn {\n position: relative;\n}\n#send-btn .hold-ring {\n position: absolute;\n inset: -2px;\n border-radius: var(--radius-lg);\n border: 2px solid transparent;\n pointer-events: none;\n transition: none;\n}\n#send-btn.holding .hold-ring {\n border-color: var(--accent);\n animation: hold-fill var(--hold-duration, 400ms) linear forwards;\n}\n@keyframes hold-fill {\n 0% { clip-path: inset(0 100% 0 0); }\n 100% { clip-path: inset(0 0 0 0); }\n}\n#send-btn.hold-complete {\n background: var(--accent);\n color: var(--bg-base);\n box-shadow: 0 0 16px rgba(0, 255, 65, 0.5);\n}\n.settings-gear {\n background: var(--bg-elevated);\n border: 1px solid var(--border-hover);\n border-radius: var(--radius-md);\n color: #777;\n font-size: 20px;\n cursor: pointer;\n padding: 6px;\n min-width: 40px;\n min-height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform 0.1s ease, box-shadow 0.1s ease;\n -webkit-tap-highlight-color: transparent;\n box-shadow: var(--shadow-btn);\n}\n.settings-gear:active {\n transform: scale(0.95);\n background: var(--accent);\n color: var(--bg-base);\n}\n.dot.yellow {\n background: var(--warning-hot);\n box-shadow: 0 0 6px #ff660060;\n animation: dot-alert 1s ease-in-out infinite;\n}\n@keyframes dot-alert {\n 0%, 100% { opacity: 1; box-shadow: 0 0 6px #ff660060; }\n 50% { opacity: 0.35; box-shadow: 0 0 2px #ff660030; }\n}\n.dot.red {\n background: var(--danger);\n box-shadow: 0 0 6px #cc333360;\n animation: dot-alert 1s ease-in-out infinite;\n}\n@keyframes dot-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n}\n.machine-group { margin-bottom: 4px; }\n.machine-header {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 6px 6px;\n font-size: 12px;\n color: var(--text-ghost);\n text-transform: uppercase;\n letter-spacing: 1.5px;\n font-weight: 600;\n border-bottom: 1px solid #151515;\n}\n.machine-header .dot { width: 6px; height: 6px; }\n.machine-add-btn {\n background: var(--bg-elevated);\n border: 1px solid var(--accent-border);\n border-radius: var(--radius-md);\n color: var(--accent);\n font-size: 22px;\n font-weight: 700;\n width: 40px;\n height: 40px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n -webkit-tap-highlight-color: transparent;\n transition: transform 0.1s ease, box-shadow 0.1s ease;\n box-shadow: var(--shadow-btn);\n}\n.machine-add-btn:active { transform: scale(0.95); background: var(--accent); color: var(--bg-base); box-shadow: 0 0 12px var(--accent-glow); }\n.machine-header-btns { margin-left: auto; display: flex; gap: 6px; align-items: center; }\n.machine-ralph-btn {\n background: var(--bg-elevated);\n border: 1px solid var(--ralph-border);\n border-radius: var(--radius-md);\n color: var(--ralph);\n font-size: 20px;\n width: 40px;\n height: 40px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n -webkit-tap-highlight-color: transparent;\n transition: transform 0.1s ease, box-shadow 0.1s ease, background 0.1s ease;\n box-shadow: 0 2px 4px rgba(0,0,0,0.3), 0 0 6px rgba(155,89,182,0.15), inset 0 1px 0 rgba(255,255,255,0.04);\n}\n.machine-ralph-btn:active { transform: scale(0.95); background: rgba(155, 89, 182, 0.25); box-shadow: 0 0 14px rgba(155, 89, 182, 0.4); }\n.sidebar-ralph-card {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 8px;\n font-size: 11px;\n cursor: pointer;\n border-left: 3px solid rgba(155, 89, 182, 0.5);\n margin-left: 4px;\n}\n.sidebar-ralph-card:hover { background: rgba(155, 89, 182, 0.1); }\n.sidebar-ralph-card .kill-btn { margin-left: auto; font-size: 12px; }\n.sidebar-ralph-name { color: var(--text-secondary); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.machine-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n background: var(--bg-surface);\n border: 1px solid var(--border);\n border-radius: var(--radius-md);\n margin-bottom: 3px;\n min-height: 44px;\n}\n.machine-item .dot { width: 6px; height: 6px; }\n.machine-item-name { flex: 1; font-size: 14px; color: var(--text-secondary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }\n.machine-item-url { font-size: 10px; color: var(--text-ghost); margin-left: 4px; }\n.machine-remove-btn {\n background: none;\n border: none;\n color: var(--danger);\n font-size: 20px;\n cursor: pointer;\n padding: 4px 8px;\n min-width: 36px;\n min-height: 36px;\n -webkit-tap-highlight-color: transparent;\n}\n.machine-remove-btn:active { color: var(--danger-bright); }\n\n/* Ralph hidden mode */\nbody.ralph-hidden .machine-ralph-btn,\nbody.ralph-hidden .ralph-card,\nbody.ralph-hidden .sidebar-ralph-card { display: none !important; }\n\n/* Ralph loop styles */\n.ralph-card {\n background: var(--bg-surface-gradient);\n border: 1px solid var(--border);\n border-radius: var(--radius-sm);\n padding: 10px 12px;\n margin-bottom: 6px;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition: all 0.15s ease;\n}\n.ralph-card.running { border-left: 2px solid var(--accent); }\n.ralph-card.audit { border-left: 2px solid var(--ralph); }\n.ralph-card.cleanup { border-left: 2px solid #3498db; }\n.ralph-card.done { border-left: 2px solid var(--accent); }\n.ralph-card.limit { border-left: 2px solid var(--warning-hot); }\n.ralph-card.idle { border-left: 2px solid var(--border-strong); }\n.ralph-card:active {\n background: var(--bg-pressed);\n border-top-color: var(--ralph);\n border-right-color: var(--ralph);\n border-bottom-color: var(--ralph);\n}\n.ralph-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n margin-bottom: 5px;\n}\n.ralph-card-name {\n font-size: 13px;\n color: var(--text-primary);\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.ralph-progress {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.ralph-bar {\n flex: 1;\n height: 3px;\n background: var(--border-subtle);\n border-radius: var(--radius-sm);\n overflow: hidden;\n}\n.ralph-bar-fill {\n height: 100%;\n border-radius: var(--radius-sm);\n transition: width 0.3s ease;\n}\n.ralph-bar-fill.running { background: var(--accent); }\n.ralph-bar-fill.audit { background: var(--ralph); }\n.ralph-bar-fill.cleanup { background: #3498db; }\n.ralph-bar-fill.done { background: var(--accent); }\n.ralph-bar-fill.limit { background: var(--warning-hot); }\n.ralph-bar-fill.idle { background: var(--text-faint); }\n.ralph-iter {\n font-size: 10px;\n color: var(--text-dim);\n white-space: nowrap;\n}\n.ralph-status {\n font-size: 9px;\n text-transform: uppercase;\n letter-spacing: 1px;\n font-weight: bold;\n padding: 2px 5px;\n border-radius: var(--radius-sm);\n}\n.ralph-status.running { color: var(--accent); background: var(--accent-ghost); }\n.ralph-status.audit { color: var(--ralph); background: rgba(155, 89, 182, 0.12); }\n.ralph-status.cleanup { color: #3498db; background: #3498db15; }\n.ralph-status.done { color: var(--accent); background: var(--accent-ghost); }\n.ralph-status.idle { color: var(--text-dim); background: #55555515; }\n.ralph-status.limit { color: var(--warning-hot); background: #ff660015; }\n.ralph-status.failed { color: var(--danger); }\n.dot.purple {\n background: var(--ralph);\n box-shadow: 0 0 6px #9b59b680, 0 0 14px #9b59b620;\n animation: dot-pulse 1.5s ease-in-out infinite;\n}\n.ralph-last-output {\n font-size: 10px;\n color: #4a4a4a;\n margin-top: 4px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.ralph-detail-header {\n padding: 8px 10px;\n border-bottom: 1px solid var(--border);\n}\n.ralph-log {\n flex: 1;\n overflow-y: auto;\n padding: 8px 10px;\n font-family: var(--font-mono);\n font-size: 11px;\n color: var(--text-muted);\n white-space: pre-wrap;\n word-break: break-all;\n -webkit-overflow-scrolling: touch;\n}\n.ralph-iter-card {\n margin: 4px 10px;\n border: 1px solid var(--border);\n border-radius: var(--radius-sm);\n overflow: hidden;\n}\n.ralph-iter-card.active { border-left: 3px solid var(--accent); }\n.ralph-iter-card.done { border-left: 3px solid var(--text-dim); }\n.ralph-iter-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 14px;\n background: var(--bg-surface);\n cursor: pointer;\n min-height: 50px;\n -webkit-tap-highlight-color: transparent;\n}\n.ralph-iter-header:active { background: var(--bg-pressed); }\n.ralph-iter-title {\n font-size: 14px;\n font-weight: 700;\n color: var(--accent);\n text-transform: uppercase;\n letter-spacing: 1px;\n}\n.ralph-iter-task {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 80vw;\n}\n.ralph-iter-chevron {\n color: var(--text-dim);\n font-size: 12px;\n transition: transform 0.2s ease;\n}\n.ralph-iter-card.expanded .ralph-iter-chevron { transform: rotate(90deg); }\n.ralph-iter-body {\n max-height: 0;\n overflow: hidden;\n transition: max-height 0.3s ease;\n}\n.ralph-iter-card.expanded .ralph-iter-body {\n max-height: 5000px;\n}\n.ralph-iter-body pre {\n margin: 0;\n padding: 8px 12px;\n font-family: var(--font-mono);\n font-size: 10px;\n color: #666;\n white-space: pre-wrap;\n word-break: break-all;\n border-top: 1px solid var(--border);\n}\n.ralph-actions {\n display: flex;\n gap: 8px;\n padding: 8px 12px;\n border-top: 1px solid var(--border);\n}\n.ralph-actions button {\n flex: 1;\n padding: 10px;\n border: 1px solid #282828;\n border-radius: var(--radius-md);\n background: var(--bg-surface);\n color: var(--text-muted);\n font-size: 13px;\n min-height: 44px;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n}\n.ralph-actions button:active { background: var(--bg-elevated); }\n.ralph-actions button.danger { border-color: var(--danger); color: var(--danger); }\n.ralph-actions button.danger:active { background: #1a0a0a; }\n.ralph-start-form {\n padding: 14px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n.ralph-start-form label {\n font-size: 12px;\n color: var(--text-dim);\n text-transform: uppercase;\n letter-spacing: 1px;\n margin-bottom: 2px;\n}\n.ralph-start-form select,\n.ralph-start-form input:not(.ralph-checkbox) {\n width: 100%;\n padding: 10px;\n background: var(--bg-surface);\n border: 1px solid #282828;\n border-radius: var(--radius-md);\n color: var(--text-primary);\n font-size: 15px;\n min-height: 44px;\n caret-color: var(--accent);\n box-sizing: border-box;\n}\n.ralph-start-form select:focus,\n.ralph-start-form input:focus {\n border-color: var(--ralph);\n box-shadow: 0 0 0 2px rgba(155,89,182,0.08), 0 0 12px rgba(155,89,182,0.06);\n outline: none;\n}\n.ralph-launch-btn {\n padding: 14px;\n background: var(--ralph);\n border: none;\n border-radius: var(--radius-lg);\n color: #fff;\n font-size: 14px;\n font-weight: bold;\n letter-spacing: 1.5px;\n margin: 8px;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition: transform 0.1s ease, box-shadow 0.1s ease;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.08);\n}\n.ralph-launch-btn:active { transform: scale(0.97); background: var(--ralph-bright); box-shadow: 0 0 12px rgba(155, 89, 182, 0.3); }\n#desktop-terminal-container {\n display: none;\n position: relative;\n flex: 1;\n min-height: 0;\n margin: 0;\n padding: 4px;\n background: var(--bg-base);\n overflow: hidden;\n}\nbody.mobile-no-ghost-focus #desktop-terminal-container textarea {\n display: none !important;\n}\n#mobile-kb-proxy {\n display: none;\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 0;\n opacity: 0;\n overflow: hidden;\n border: none;\n padding: 0;\n margin: 0;\n font-size: 16px;\n caret-color: transparent;\n}\n#desktop-terminal-container.hydrating {\n background: var(--bg-base);\n}\n#desktop-terminal-container.hydrating::before {\n content: \"Loading terminal\";\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n font-weight: 700;\n letter-spacing: 1.2px;\n text-transform: uppercase;\n color: rgba(255, 255, 255, 0.32);\n background:\n linear-gradient(\n 90deg,\n rgba(255, 255, 255, 0.02) 0%,\n rgba(255, 255, 255, 0.05) 50%,\n rgba(255, 255, 255, 0.02) 100%\n );\n background-size: 200% 100%;\n animation: grid-loading-sheen 1.1s linear infinite;\n pointer-events: none;\n z-index: 5;\n}\n#desktop-terminal-container canvas {\n height: 100%;\n background: #0a0a0a;\n max-width: 100%;\n opacity: 0;\n visibility: hidden;\n transition: opacity 80ms ease;\n}\n#desktop-terminal-container.hydrated:not(.transitioning) canvas {\n opacity: 1;\n visibility: visible;\n}\n#desktop-terminal-container.cached-visible canvas {\n opacity: 1;\n visibility: visible;\n}\n/* Instant hide during resize/loading transitions (no 80ms fade-out) */\n#desktop-terminal-container.hydrating canvas,\n#desktop-terminal-container.transitioning canvas,\n.grid-cell.hydrating canvas,\n.grid-cell.transitioning canvas,\n.grid-cell.grid-loading canvas {\n transition: none;\n}\n/* Show loading overlay during sidebar transitions */\n#desktop-terminal-container.transitioning::before {\n content: \"Loading terminal\";\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n font-weight: 700;\n letter-spacing: 1.2px;\n text-transform: uppercase;\n color: rgba(255, 255, 255, 0.32);\n background:\n linear-gradient(\n 90deg,\n rgba(255, 255, 255, 0.02) 0%,\n rgba(255, 255, 255, 0.05) 50%,\n rgba(255, 255, 255, 0.02) 100%\n );\n background-size: 200% 100%;\n animation: grid-loading-sheen 1.1s linear infinite;\n pointer-events: none;\n z-index: 5;\n}\n\n/* ── Multi-terminal grid ── */\n#desktop-grid-container {\n display: none;\n flex: 1;\n min-height: 0;\n height: 0;\n background: var(--bg-base);\n overflow: hidden;\n}\n#desktop-grid-container.active {\n display: grid;\n gap: 2px;\n height: auto;\n}\n/* Auto-layout classes set by JS */\n#desktop-grid-container.grid-2 { grid-template-columns: 1fr 1fr; grid-template-rows: 1fr; }\n#desktop-grid-container.grid-3 { grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; }\n#desktop-grid-container.grid-3 .grid-cell:last-child { grid-column: 1 / -1; }\n#desktop-grid-container.grid-4 { grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; }\n#desktop-grid-container.grid-5 { grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr; grid-template-rows: 1fr 1fr; }\n#desktop-grid-container.grid-5 .grid-cell:nth-child(1) { grid-column: 1 / 3; }\n#desktop-grid-container.grid-5 .grid-cell:nth-child(2) { grid-column: 3 / 5; }\n#desktop-grid-container.grid-5 .grid-cell:nth-child(3) { grid-column: 5 / 7; }\n#desktop-grid-container.grid-5 .grid-cell:nth-child(4) { grid-column: 1 / 4; }\n#desktop-grid-container.grid-5 .grid-cell:nth-child(5) { grid-column: 4 / 7; }\n#desktop-grid-container.grid-6 { grid-template-columns: 1fr 1fr 1fr; grid-template-rows: 1fr 1fr; }\n\n.grid-cell {\n position: relative;\n overflow: hidden;\n background: var(--bg-base);\n border: 1px solid var(--border);\n transition: border-color 0.15s ease;\n min-height: 0;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n.grid-cell.grid-focused {\n border-color: rgba(0,255,65,0.6);\n box-shadow: inset 0 0 12px rgba(0,255,65,0.1), 0 0 8px rgba(0,255,65,0.15);\n}\n.grid-cell canvas {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n background: #0a0a0a;\n max-width: 100%;\n opacity: 0;\n visibility: hidden;\n transition: opacity 80ms ease;\n}\n.grid-cell.hydrated:not(.grid-loading):not(.transitioning) canvas {\n opacity: 1;\n visibility: visible;\n}\n.grid-cell.cached-visible canvas {\n opacity: 1;\n visibility: visible;\n}\n.grid-cell-loading {\n position: absolute;\n inset: 26px 0 0;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n font-weight: 700;\n letter-spacing: 1.2px;\n text-transform: uppercase;\n color: rgba(255,255,255,0.28);\n background:\n linear-gradient(\n 90deg,\n rgba(255,255,255,0.02) 0%,\n rgba(255,255,255,0.05) 50%,\n rgba(255,255,255,0.02) 100%\n );\n background-size: 200% 100%;\n animation: grid-loading-sheen 1.1s linear infinite;\n pointer-events: none;\n}\n.grid-cell:not(.grid-loading):not(.hydrating):not(.transitioning) .grid-cell-loading {\n display: none;\n}\n@keyframes grid-loading-sheen {\n from { background-position: 200% 0; }\n to { background-position: -200% 0; }\n}\n.grid-cell-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 4px 8px;\n background: var(--bg-surface);\n border-bottom: 1px solid var(--border);\n flex-shrink: 0;\n height: 26px;\n}\n.grid-cell-label {\n font-size: 9px;\n font-weight: 700;\n letter-spacing: 1px;\n text-transform: uppercase;\n color: rgba(255,255,255,0.3);\n pointer-events: none;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.grid-cell.grid-focused .grid-cell-label {\n color: rgba(0,255,65,0.7);\n}\n.grid-cell.grid-focused .grid-cell-header {\n border-bottom-color: rgba(0,255,65,0.2);\n}\n.grid-cell-close {\n font-size: 18px;\n color: rgba(255,100,100,0.6);\n cursor: pointer;\n padding: 2px 8px;\n line-height: 1;\n opacity: 0.8;\n transition: opacity 0.15s, color 0.15s, background 0.15s;\n flex-shrink: 0;\n border-radius: var(--radius-sm);\n}\n.grid-cell:hover .grid-cell-close {\n opacity: 1;\n}\n.grid-cell-close:hover {\n color: var(--danger-bright);\n background: rgba(255,60,60,0.15);\n}\n\n/* ── Viewer conflict overlay ── */\n.viewer-conflict-overlay {\n position: absolute;\n inset: 0;\n background: rgba(0,0,0,0.85);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n z-index: 50;\n gap: 12px;\n text-align: center;\n padding: 16px;\n}\n.viewer-conflict-overlay .conflict-msg {\n font-size: 12px;\n font-weight: 600;\n letter-spacing: 0.5px;\n text-transform: uppercase;\n color: var(--conflict-accent);\n}\n.viewer-conflict-overlay .conflict-btn {\n padding: 6px 16px;\n border: 1px solid var(--conflict-accent);\n border-radius: var(--radius-sm);\n background: transparent;\n color: var(--conflict-accent);\n font: inherit;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n cursor: pointer;\n transition: background 0.15s, color 0.15s;\n}\n.viewer-conflict-overlay .conflict-btn:hover {\n background: var(--conflict-accent);\n color: #000;\n}\n\n/* ── Session drawer ── */\n#session-chip {\n display: none;\n align-items: center;\n gap: 5px;\n border: 1px solid #282828;\n border-radius: var(--radius-md);\n padding: 8px 12px;\n background: var(--bg-elevated);\n color: var(--accent);\n font-size: 12px;\n font-family: inherit;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 2px;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition: border-color 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;\n min-height: 38px;\n max-width: 160px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n box-shadow: var(--shadow-btn);\n position: relative;\n}\n#session-chip:active {\n transform: scale(0.95);\n border-color: var(--accent);\n background: #222;\n}\n#session-chip .chip-chevron {\n font-size: 7px;\n opacity: 0.4;\n transition: transform 0.2s ease;\n flex-shrink: 0;\n}\n#session-chip.open .chip-chevron {\n transform: rotate(180deg);\n}\n#session-chip .chip-handle {\n position: absolute;\n bottom: 2px;\n left: 50%;\n transform: translateX(-50%);\n width: 18px;\n height: 2px;\n border-radius: 1px;\n background: rgba(0, 255, 65, 0.25);\n}\n#drawer-backdrop {\n display: none;\n position: fixed;\n top: 0; left: 0; right: 0; bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 90;\n opacity: 0;\n}\n#drawer-backdrop.visible {\n display: block;\n}\n#git-status-overlay {\n display: none;\n position: fixed;\n top: 0; left: 0; right: 0; bottom: 0;\n background: rgba(0, 0, 0, 0.85);\n z-index: 200;\n padding: 20px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n}\n#git-status-overlay.visible { display: flex; align-items: center; justify-content: center; }\n#git-status-overlay pre {\n font-family: var(--font-mono);\n font-size: 13px;\n color: var(--accent);\n background: var(--bg-base);\n border: 1px solid var(--border-input);\n border-radius: var(--radius-md);\n padding: 16px;\n max-width: 100%;\n white-space: pre-wrap;\n word-break: break-all;\n margin: 0;\n line-height: 1.5;\n}\n#git-status-overlay .overlay-hint {\n color: var(--text-dim);\n font-size: 11px;\n text-align: center;\n margin-top: 12px;\n}\n#session-drawer {\n position: fixed;\n left: 0; right: 0;\n top: 42px;\n max-height: 55vh;\n background: linear-gradient(180deg, var(--bg-surface) 0%, var(--bg-deep) 100%);\n border-bottom: 1px solid var(--border);\n border-bottom-left-radius: var(--radius-lg);\n border-bottom-right-radius: var(--radius-lg);\n box-shadow: 0 8px 32px rgba(0,0,0,0.6);\n z-index: 95;\n transform: translate3d(0, -100%, 0);\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n will-change: transform;\n pointer-events: none;\n}\n#session-drawer.animating {\n transition: transform 0.25s cubic-bezier(0.2, 0.9, 0.3, 1);\n}\n#session-drawer.open {\n transform: translate3d(0, 0, 0);\n pointer-events: auto;\n}\n.drawer-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px 16px;\n min-height: 50px;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition: background 0.1s ease;\n border-bottom: 1px solid var(--border);\n}\n.drawer-item:last-child { border-bottom: none; }\n.drawer-item:active {\n background: var(--bg-elevated);\n}\n.drawer-item.current {\n background: linear-gradient(90deg, rgba(0,255,65,0.04) 0%, transparent 60%);\n}\n.drawer-item .dot {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n.drawer-item .dot.active {\n background: var(--accent);\n box-shadow: 0 0 6px var(--accent-dim);\n}\n.drawer-item .dot.inactive {\n background: var(--text-faint);\n}\n.drawer-item-name {\n font-size: 14px;\n font-weight: 700;\n color: var(--text-secondary);\n text-transform: uppercase;\n letter-spacing: 1.2px;\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.drawer-item.current .drawer-item-name {\n color: var(--accent);\n}\n.drawer-item-machine {\n font-size: 9px;\n color: var(--text-ghost);\n text-transform: uppercase;\n letter-spacing: 1px;\n}\n\n/* ── Subtle hover states for desktop ── */\n@media (hover: hover) {\n .card:hover {\n background: linear-gradient(145deg, var(--bg-hover) 0%, #0f0f0f 100%);\n border-color: var(--border-input);\n }\n .card.active-session:hover {\n border-left-color: var(--accent);\n box-shadow: inset 4px 0 20px -8px rgba(0,255,65,0.18);\n }\n .ralph-card:hover {\n background: linear-gradient(145deg, var(--bg-hover) 0%, #0f0f0f 100%);\n }\n .drawer-item:hover {\n background: var(--bg-hover);\n }\n .new-btn:hover {\n border-color: rgba(0,255,65,0.6);\n box-shadow: 0 2px 8px rgba(0,0,0,0.4), 0 0 8px rgba(0,255,65,0.1), inset 0 1px 0 rgba(255,255,255,0.04);\n }\n .settings-gear:hover,\n .back-btn:hover {\n border-color: #3a3a3a;\n color: #aaa;\n }\n .machine-ralph-btn:hover {\n border-color: rgba(155, 89, 182, 0.8);\n color: #b07cc8;\n background: rgba(155, 89, 182, 0.1);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4), 0 0 10px rgba(155, 89, 182, 0.2);\n }\n}\n\n/* ── Desktop component overrides (undo mobile-first sizing) ── */\n@media (min-width: 769px) {\n .new-btn {\n padding: 10px 14px;\n margin-bottom: 4px;\n font-size: 13px;\n min-height: 0;\n justify-content: flex-start;\n }\n .back-btn {\n font-size: 10px;\n padding: 6px 12px;\n min-height: 34px;\n min-width: auto;\n }\n .settings-gear {\n font-size: 18px;\n min-width: 36px;\n min-height: 36px;\n }\n .machine-add-btn {\n width: 34px;\n height: 34px;\n font-size: 18px;\n }\n .machine-ralph-btn {\n font-size: 16px;\n width: 34px;\n height: 34px;\n }\n #cmd-palette {\n gap: 5px;\n padding: 5px 10px 3px;\n }\n .cmd-chip {\n border-radius: var(--radius-md);\n padding: 6px 12px;\n min-height: 32px;\n font-size: 11px;\n }\n #input-bar {\n gap: 6px;\n padding: 6px 8px;\n padding-bottom: max(6px, env(safe-area-inset-bottom));\n }\n #input-bar textarea {\n border-radius: var(--radius-md);\n padding: 5px 8px;\n font-size: 15px;\n min-height: 0;\n }\n #input-bar button {\n border-radius: var(--radius-md);\n width: 40px;\n height: 40px;\n font-size: 18px;\n }\n .new-project-row {\n gap: 6px;\n padding: 8px;\n }\n .new-project-row input {\n border-radius: var(--radius-md);\n padding: 6px 10px;\n font-size: 13px;\n min-height: 0;\n }\n .new-project-row button {\n border-radius: var(--radius-sm);\n padding: 6px 12px;\n font-size: 11px;\n min-height: 0;\n }\n .settings-section {\n padding: 6px;\n }\n .settings-section label {\n padding: 4px 0;\n font-size: inherit;\n min-height: 0;\n }\n .settings-label {\n font-size: 10px;\n margin-bottom: 6px;\n letter-spacing: 1.5px;\n }\n .settings-section input[type=\"checkbox\"] {\n width: 34px;\n height: 18px;\n border-radius: 9px;\n }\n .settings-section input[type=\"checkbox\"]::after {\n width: 12px;\n height: 12px;\n }\n .settings-section input[type=\"checkbox\"]:checked::after {\n transform: translateX(16px);\n }\n .session-name-input {\n border-radius: var(--radius-sm);\n padding: 9px 10px;\n font-size: 13px;\n }\n .session-name-label {\n font-size: 9px;\n margin-bottom: 6px;\n }\n .ralph-card {\n padding: 6px 8px;\n margin-bottom: 3px;\n }\n .ralph-card-name {\n font-size: 12px;\n }\n .ralph-launch-btn {\n padding: 10px;\n font-size: 12px;\n border-radius: var(--radius-md);\n letter-spacing: normal;\n margin: 0;\n }\n .ralph-start-form {\n padding: 10px;\n gap: 8px;\n }\n .ralph-start-form label {\n font-size: 10px;\n margin-bottom: 0;\n }\n .ralph-start-form select,\n .ralph-start-form input:not(.ralph-checkbox) {\n padding: 7px;\n font-size: 13px;\n border-radius: var(--radius-sm);\n min-height: 0;\n }\n .ralph-toggles { padding-top: 10px; gap: 10px; }\n .ralph-branch-label { font-size: 12px; }\n .ralph-iter-header {\n padding: 10px 12px;\n min-height: 0;\n }\n .ralph-iter-title {\n font-size: 13px;\n }\n .ralph-iter-task {\n font-size: 11px;\n }\n .ralph-actions {\n gap: 6px;\n padding: 6px 10px;\n }\n .ralph-actions button {\n padding: 7px;\n font-size: 11px;\n border-radius: var(--radius-sm);\n min-height: 0;\n }\n .machine-item {\n gap: 6px;\n padding: 5px 8px;\n border-radius: var(--radius-sm);\n min-height: 0;\n }\n .machine-item-name {\n font-size: 12px;\n }\n .machine-remove-btn {\n font-size: 16px;\n padding: 2px 4px;\n min-width: auto;\n min-height: auto;\n }\n #msg-preview {\n bottom: 52px;\n left: 8px;\n right: 8px;\n border-radius: var(--radius-sm);\n padding: 10px;\n font-size: 13px;\n }\n}\n\n/* ══════════════════════════════════════════════════════════\n DESKTOP SIDEBAR\n ══════════════════════════════════════════════════════════ */\n\n/* Hidden by default (mobile-first) */\n#desktop-sidebar { display: none; }\n#sidebar-hover-edge { display: none; }\n#expanded-toolbar { display: none; }\n\n@media (min-width: 769px) {\n /* Hide mobile header on desktop */\n header { display: none; }\n\n /* Horizontal flex: sidebar + main */\n body { flex-direction: row; }\n\n #desktop-sidebar {\n width: 260px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n background: var(--bg-header-gradient);\n border-right: 1px solid rgba(0,255,65,0.12);\n transition: margin-left 0.2s ease;\n z-index: 50;\n height: 100dvh;\n }\n\n #desktop-sidebar.collapsed {\n margin-left: -260px;\n }\n\n /* Sidebar header */\n .sidebar-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n border-bottom: 1px solid rgba(0,255,65,0.12);\n flex-shrink: 0;\n }\n .sidebar-header h1 {\n font-size: 13px;\n font-weight: 800;\n letter-spacing: 4px;\n color: var(--accent);\n text-shadow: 0 0 14px rgba(0,255,65,0.45), 0 0 40px rgba(0,255,65,0.1);\n }\n .sidebar-controls {\n display: flex;\n gap: 4px;\n }\n .sidebar-controls button {\n background: rgba(255,255,255,0.06);\n border: 1px solid rgba(255,255,255,0.16);\n color: #aaa;\n font-size: 14px;\n cursor: pointer;\n padding: 6px 10px;\n border-radius: var(--radius-md);\n font-family: inherit;\n transition: color 0.2s, border-color 0.2s, background 0.2s, box-shadow 0.2s;\n }\n .sidebar-controls button:hover {\n color: var(--accent);\n border-color: rgba(0,255,65,0.5);\n background: rgba(0,255,65,0.1);\n box-shadow: 0 0 8px rgba(0,255,65,0.12);\n }\n\n /* Pin button states */\n #sidebar-collapse-btn {\n position: relative;\n }\n #sidebar-collapse-btn .pin-icon {\n display: inline-block;\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), color 0.25s;\n }\n #sidebar-collapse-btn.pinned {\n color: var(--accent);\n border-color: rgba(0,255,65,0.5);\n background: rgba(0,255,65,0.08);\n box-shadow: 0 0 10px rgba(0,255,65,0.12);\n }\n #sidebar-collapse-btn.pinned .pin-icon {\n transform: rotate(-45deg);\n }\n #sidebar-collapse-btn.pinned:hover {\n color: var(--accent);\n border-color: rgba(0,255,65,0.7);\n background: rgba(0,255,65,0.12);\n }\n\n /* Expand button active */\n #sidebar-expand-btn.active {\n color: var(--accent);\n border-color: rgba(0,255,65,0.5);\n background: rgba(0,255,65,0.08);\n }\n\n /* Sidebar session list */\n .sidebar-sessions {\n flex: 1;\n overflow-y: auto;\n padding: 6px;\n }\n\n /* Sidebar cards — denser than mobile */\n .sidebar-sessions .card {\n padding: 6px 8px;\n min-height: 0;\n margin-bottom: 3px;\n border-left-width: 2px;\n }\n .sidebar-sessions .card-name {\n font-size: 11px;\n letter-spacing: 1.5px;\n }\n .sidebar-sessions .card-status {\n margin-top: 1px;\n }\n .sidebar-sessions .card-preview {\n -webkit-line-clamp: 1;\n font-size: 10px;\n }\n .sidebar-sessions .dot {\n width: 7px;\n height: 7px;\n }\n .sidebar-sessions .kill-btn,\n .sidebar-sessions .grid-btn {\n opacity: 0.7;\n transition: opacity 0.15s, background 0.15s, color 0.15s, border-color 0.15s;\n background: rgba(255,255,255,0.03);\n border: 1px solid rgba(255,255,255,0.1);\n border-radius: var(--radius-sm);\n color: var(--text-muted);\n font-size: 14px;\n font-weight: 700;\n font-family: inherit;\n cursor: pointer;\n padding: 3px 8px;\n min-width: 30px;\n min-height: 30px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n letter-spacing: 0.5px;\n line-height: 1;\n }\n .sidebar-sessions .card:hover .kill-btn,\n .sidebar-sessions .card:hover .grid-btn {\n opacity: 1;\n }\n .sidebar-sessions .kill-btn {\n color: var(--danger);\n border-color: rgba(200,50,50,0.2);\n }\n .sidebar-sessions .kill-btn:hover {\n background: rgba(255,60,60,0.12);\n border-color: rgba(255,60,60,0.4);\n }\n .sidebar-sessions .grid-btn:hover {\n color: var(--accent);\n border-color: var(--accent-border);\n background: rgba(0,255,65,0.08);\n }\n .sidebar-sessions .grid-btn.in-grid {\n opacity: 1;\n color: var(--accent);\n border-color: rgba(0,255,65,0.5);\n background: rgba(0,255,65,0.1);\n }\n .sidebar-sessions .grid-btn.in-grid:hover {\n background: rgba(255,60,60,0.1);\n border-color: rgba(255,60,60,0.4);\n color: var(--danger-bright);\n }\n\n /* Active session highlight in sidebar */\n .sidebar-sessions .card.sidebar-active {\n border: 1px solid rgba(0,255,65,0.35);\n border-left: 2px solid var(--accent);\n background: linear-gradient(90deg, rgba(0,255,65,0.08) 0%, rgba(0,255,65,0.02) 40%, transparent 100%);\n box-shadow: 0 0 12px rgba(0,255,65,0.15), 0 0 4px rgba(0,255,65,0.1);\n transform: scale(1.02);\n z-index: 1;\n position: relative;\n }\n\n /* In-grid but not focused session */\n .sidebar-sessions .card.sidebar-grid {\n border: 1px solid var(--accent-muted);\n border-left: 2px solid rgba(0,255,65,0.5);\n background: linear-gradient(90deg, rgba(0,255,65,0.04) 0%, transparent 50%);\n box-shadow: 0 0 8px rgba(0,255,65,0.08);\n }\n\n /* Dim inactive sessions */\n .sidebar-sessions .card:not(.sidebar-active):not(.sidebar-grid) {\n opacity: 0.6;\n transition: opacity 0.15s ease;\n }\n .sidebar-sessions .card:not(.sidebar-active):not(.sidebar-grid):hover {\n opacity: 0.85;\n }\n\n /* Sidebar machine headers */\n .sidebar-sessions .machine-header {\n font-size: 10px;\n padding: 6px 4px 4px;\n }\n .sidebar-sessions .new-btn {\n font-size: 11px;\n padding: 8px 10px;\n margin-bottom: 0;\n flex: 1;\n }\n .sidebar-top-btns {\n display: flex;\n gap: 6px;\n align-items: center;\n margin-bottom: 4px;\n }\n .sidebar-top-btns .machine-ralph-btn {\n width: 32px;\n height: 32px;\n font-size: 14px;\n flex-shrink: 0;\n }\n\n\n /* Hide sessions-view on desktop (sidebar replaces it) */\n #sessions-view { display: none; }\n\n /* Expanded toolbar — shown in expanded mode */\n body.sessions-expanded #expanded-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 16px;\n flex-shrink: 0;\n }\n .expanded-title {\n font-size: 13px;\n font-weight: 800;\n letter-spacing: 4px;\n color: var(--accent);\n text-shadow: 0 0 14px rgba(0,255,65,0.45), 0 0 40px rgba(0,255,65,0.1);\n margin: 0;\n }\n .expanded-controls {\n display: flex;\n gap: 6px;\n }\n .expanded-controls button {\n background: rgba(255,255,255,0.07);\n border: 1px solid rgba(255,255,255,0.18);\n color: #bbb;\n font-size: 15px;\n cursor: pointer;\n padding: 7px 12px;\n border-radius: var(--radius-md);\n font-family: inherit;\n transition: color 0.2s, border-color 0.2s, background 0.2s, box-shadow 0.2s;\n }\n .expanded-controls button:hover {\n color: var(--accent);\n border-color: rgba(0,255,65,0.5);\n background: rgba(0,255,65,0.1);\n box-shadow: 0 0 10px rgba(0,255,65,0.15);\n }\n\n /* Expanded sessions view — full-page grid on desktop */\n body.sessions-expanded #sessions-view {\n display: flex;\n flex-direction: column;\n }\n /* Column per machine — fills screen width */\n body.sessions-expanded #sessions-view #session-list {\n display: flex;\n gap: 12px;\n padding: 0 16px 16px;\n flex: 1;\n overflow-x: auto;\n }\n body.sessions-expanded #sessions-view .machine-group {\n flex: 1;\n min-width: 200px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n overflow-y: auto;\n }\n body.sessions-expanded #sessions-view .card {\n padding: 16px 14px;\n min-height: 64px;\n border-left-width: 3px;\n margin-bottom: 0;\n }\n body.sessions-expanded #sessions-view .card-name {\n font-size: 14px;\n letter-spacing: 1.8px;\n }\n body.sessions-expanded #sessions-view .card-preview {\n -webkit-line-clamp: 2;\n font-size: 12px;\n }\n body.sessions-expanded #sessions-view .machine-header {\n padding: 8px 4px 4px;\n flex-shrink: 0;\n }\n body.sessions-expanded #sessions-view .machine-add-btn {\n float: right;\n }\n\n /* Main area fills remaining space */\n #view-container { flex: 1; min-width: 0; }\n\n /* Hover edge — invisible trigger to re-open collapsed sidebar */\n #sidebar-hover-edge {\n position: fixed;\n left: 0; top: 0; bottom: 0;\n width: 8px;\n z-index: 60;\n }\n #desktop-sidebar.collapsed ~ #sidebar-hover-edge {\n display: block;\n }\n\n /* Hide drawer elements on desktop */\n #session-drawer { display: none; }\n #drawer-backdrop { display: none; }\n}\n\n/* ── Mobile-specific ── */\n@media (max-width: 768px) {\n #kb-accessory {\n display: flex;\n padding: 5px 4px 3px;\n gap: 3px;\n overflow-x: hidden;\n }\n #kb-accessory .kb-key {\n flex: 1 1 0;\n min-width: 0;\n padding: 6px 4px;\n min-height: 34px;\n font-size: 11px;\n text-align: center;\n }\n #kb-accessory .kb-enter {\n min-width: 0;\n flex: 1.2 1 0;\n padding: 6px 4px;\n font-size: 15px;\n }\n #kb-accessory .kb-open {\n min-width: 0;\n flex: 1 1 0;\n padding: 4px 4px !important;\n }\n #kb-accessory .kb-open svg {\n width: 24px;\n height: 24px;\n }\n .header-center .wolfpack-icon { display: none; }\n #terminal-view {\n padding-top: env(safe-area-inset-top);\n padding-bottom: env(safe-area-inset-bottom);\n }\n}\n\n/* ── Extracted inline styles ── */\n.wolfpack-icon { width: 18px; height: 18px; filter: drop-shadow(0 0 4px var(--accent-glow)); }\n.flex-row { display: flex; align-items: center; gap: 8px; }\n.flex-between { display: flex; justify-content: space-between; align-items: center; }\n.machine-label { display: none; font-size: 9px; color: var(--text-dim); text-transform: uppercase; letter-spacing: 1px; line-height: 1; }\n.settings-toggle { display: flex; align-items: center; gap: 8px; padding: 4px 0; cursor: pointer; font-size: 12px; color: var(--text-muted); }\n.settings-subsection { padding: 4px 0; font-size: 12px; color: var(--text-muted); }\n.settings-sub-heading { margin-bottom: 6px; }\n.preset-row { display: flex; gap: 6px; }\n.preset-btn { flex: 1; padding: 8px 0; background: var(--bg-elevated); border: 1px solid var(--border-hover); border-radius: var(--radius-md); color: var(--text-muted); font-size: 11px; font-family: inherit; cursor: pointer; transition: border-color 0.15s, color 0.15s; }\n.preset-btn.font-alt { font-family: var(--font-mono-alt); }\n.preset-hint { font-size: 10px; opacity: 0.6; }\n.settings-back-btn { display: none; background: none; border: 1px solid var(--border-hover); border-radius: var(--radius-md); padding: 6px 14px; color: var(--text-muted); font-size: 12px; font-family: inherit; cursor: pointer; margin-bottom: 12px; transition: border-color 0.15s, color 0.15s; }\n.discover-btn { margin-top: 8px; background: var(--bg-elevated); border: 1px solid var(--accent-border); border-radius: var(--radius-md); padding: 8px 14px; color: var(--accent); font-size: 11px; font-family: inherit; text-transform: uppercase; letter-spacing: 1px; cursor: pointer; transition: transform 0.1s ease; width: 100%; box-shadow: var(--shadow-btn); }\n.discover-status { margin-top: 4px; font-size: 10px; color: var(--text-dim); }\n.add-cmd-btn { margin-top: 8px; background: var(--bg-elevated); border: 1px solid var(--cmd-border); border-radius: var(--radius-md); padding: 8px 14px; color: var(--cmd-accent); font-size: 11px; font-family: inherit; text-transform: uppercase; letter-spacing: 1px; cursor: pointer; transition: transform 0.1s ease; width: 100%; box-shadow: var(--shadow-btn); }\n.debug-panel { display: none; padding: 8px; background: #0d0d0d; border: 1px solid var(--border); border-radius: var(--radius-md); margin-top: 6px; font-size: 11px; font-family: inherit; color: #666; }\n.debug-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 4px 12px; }\n.debug-val { color: var(--accent); text-align: right; }\n.debug-val.danger { color: var(--danger-bright); }\n.debug-reset-btn { margin-top: 8px; background: var(--bg-elevated); border: 1px solid var(--border-strong); border-radius: var(--radius-md); padding: 4px 10px; color: #666; font-size: 10px; font-family: inherit; cursor: pointer; width: 100%; }\n.settings-about { text-align: center; padding: 16px 6px; }\n.about-icon { width: 48px; height: 48px; opacity: 0.15; margin-bottom: 8px; }\n.settings-version { font-size: 10px; color: var(--text-dim); padding: 2px 0; }\n.conn-status { display: none; background: var(--danger); color: #fff; text-align: center; padding: 6px; font-size: 11px; font-family: inherit; text-transform: uppercase; letter-spacing: 1px; flex-shrink: 0; }\n.ralph-log-container { flex: 1; overflow-y: auto; -webkit-overflow-scrolling: touch; }\n.ralph-log-toggle { font-size: 11px; color: var(--text-dim); cursor: pointer; text-transform: uppercase; letter-spacing: 1px; }\n.ralph-log-toggle-wrap { padding: 4px 10px 8px; }\n.ralph-log-hidden { display: none; }\n.ralph-machine-picker-hidden { display: none; }\n.ralph-isolation-row { align-items: center; }\n.ralph-branch-fields { display: none; flex-direction: column; gap: 12px; }\n.accent-val { color: var(--accent); font-size: 11px; }\n.range-input { width: 100%; accent-color: var(--accent); margin-top: 4px; }\n.ralph-checkbox { width: 18px; height: 18px; min-height: 0; padding: 0; accent-color: var(--ralph); flex-shrink: 0; cursor: pointer; }\n.ralph-start-form label.ralph-branch-label { margin: 0; cursor: pointer; text-transform: none; letter-spacing: 0; font-size: 13px; color: var(--text-secondary); }\n.ralph-segmented { display: flex; margin-left: auto; border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); overflow: hidden; flex-shrink: 0; }\n.ralph-segmented input[type=\"radio\"] { position: absolute; opacity: 0; pointer-events: none; }\n.ralph-segmented label { padding: 4px 10px; font-size: 11px; font-family: inherit; color: var(--text-dim); cursor: pointer; border-right: 1px solid var(--border-subtle); transition: background 0.15s, color 0.15s; user-select: none; -webkit-user-select: none; white-space: nowrap; }\n.ralph-segmented label:last-of-type { border-right: none; }\n.ralph-segmented input[type=\"radio\"]:checked + label { background: rgba(155,89,182,0.15); color: var(--ralph); border-color: var(--ralph-border); }\n.ralph-segmented label:active { background: rgba(155,89,182,0.08); }\n.ralph-toggles { margin-top: 4px; padding-top: 14px; border-top: 1px solid var(--border-subtle); display: flex; flex-direction: column; gap: 10px; }\n.settings-description { padding: 4px 0; font-size: 11px; color: var(--text-dim); line-height: 1.5; }\n.agents-list { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; }\n.agent-row { display: flex; align-items: center; gap: 10px; padding: 8px 10px; background: var(--bg-base); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); }\n.agent-row.disabled { opacity: 0.55; }\n.agent-row-checkbox { width: 18px; height: 18px; accent-color: var(--accent); flex-shrink: 0; cursor: pointer; }\n.agent-row-cmd { flex: 1; color: var(--text-secondary); font-size: 13px; font-family: var(--font-mono, monospace); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.agent-row-default { font-size: 9px; color: var(--accent); text-transform: uppercase; letter-spacing: 1px; padding: 2px 6px; border: 1px solid var(--accent-border); border-radius: var(--radius-sm); }\n.agent-row-delete { background: none; border: none; color: var(--danger); font-size: 18px; cursor: pointer; padding: 2px 6px; line-height: 1; }\n.agent-add-row { display: flex; gap: 6px; margin-top: 8px; }\n.agent-add-input { flex: 1; background: var(--bg-surface); border: 1px solid var(--border-strong); border-radius: var(--radius-md); padding: 10px 12px; color: var(--accent); font-family: inherit; font-size: 13px; outline: none; min-height: 40px; caret-color: var(--accent); }\n.agent-add-row .add-cmd-btn { width: auto; margin-top: 0; padding: 8px 16px; }\n.agent-add-error { margin-top: 6px; font-size: 11px; color: var(--danger); min-height: 14px; }\n\n.quick-cmds-list { display: flex; flex-direction: column; gap: 4px; }\n.custom-cmd-row { padding: 6px; display: flex; gap: 6px; }\n.custom-cmd-input { flex: 1; background: var(--bg-surface); border: 1px solid var(--border-strong); border-radius: var(--radius-md); padding: 10px 12px; color: var(--accent); font-family: inherit; font-size: 14px; outline: none; min-height: 44px; caret-color: var(--accent); }\n.custom-cmd-add-btn { background: var(--bg-elevated); border: 1px solid var(--accent-border); border-radius: var(--radius-sm); padding: 8px 12px; color: var(--accent); font-size: 11px; font-family: inherit; cursor: pointer; white-space: nowrap; }\n\n/* ── JS template literal utilities ── */\n.qc-item { display: flex; align-items: center; gap: 6px; padding: 6px 8px; background: var(--bg-base); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); }\n.qc-label { color: var(--cmd-accent); font-size: 12px; font-weight: 600; min-width: 60px; }\n.qc-cmd { flex: 1; color: var(--text-dim); font-size: 11px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.qc-btn { background: none; border: none; cursor: pointer; padding: 2px 4px; }\n.qc-btn.move { color: var(--text-dim); font-size: 14px; }\n.qc-btn.edit { color: var(--text-muted); font-size: 12px; }\n.qc-btn.delete { color: var(--danger); font-size: 14px; }\n.qc-spacer { width: 24px; }\n.error-pre { color: var(--danger); }\n.ralph-plan-suffix { color: var(--text-dim); font-weight: 400; }\n.ralph-detail-meta { color: var(--text-muted); font-size: 12px; }\n.ralph-detail-meta + .ralph-detail-meta { margin-top: 0; }\n.ralph-detail-meta:first-of-type { margin-top: 4px; }\n.ralph-cancel-btn { background: #e74c3c; }\n.ralph-detail-row { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }\n.ralph-detail-stats { display: flex; gap: 12px; }\n.empty-state { padding: 10px; color: var(--text-dim); font-size: 11px; }\n.machine-picker-label { color: #666; font-size: 11px; }\n.machine-picker-name { color: #999; }\n.version-warning { color: var(--warning-hot); margin-left: 6px; font-size: 11px; padding: 3px 8px; border: 1px solid var(--accent); border-radius: var(--radius-sm); cursor: pointer; -webkit-tap-highlight-color: transparent; letter-spacing: 1px; }\n.group-status { padding: 4px 4px; color: var(--text-dim); font-size: 11px; }\n.conn-icon { width: 12px; height: 12px; vertical-align: middle; margin-right: 4px; filter: brightness(10); }\n.conn-retry-btn { margin-left: 6px; padding: 2px 6px; border: 1px solid #fff; border-radius: var(--radius-sm); background: transparent; color: #fff; font: inherit; text-transform: uppercase; letter-spacing: 0.5px; cursor: pointer; }\n.sidebar-empty { padding: 16px 14px; color: var(--text-faint); font-size: 11px; text-align: center; }\n.no-machines { color: var(--text-ghost); font-size: 12px; padding: 6px 0; }\n.sidebar-no-sessions { padding: 8px 4px; color: var(--text-ghost); font-size: 10px; text-transform: uppercase; letter-spacing: 1px; }\n.sidebar-conn-status { padding: 4px; color: var(--text-dim); font-size: 10px; }\n.ralph-iter-align { text-align: right; margin-top: 2px; }\n\n", mime: "text/css" }], ["sw.js", { content: "// Wolfpack push notification service worker\n\n/**\n * Sanitize a notification-click URL against an open-redirect attack.\n *\n * History: a previous version guarded with `url.startsWith(\"/\")` and treated\n * any leading-slash input as a safe relative path. That allowed\n * protocol-relative URLs like `//evil.com` to pass through (they literally\n * start with `/`), and the browser would navigate to `https://evil.com/`.\n *\n * Strategy: resolve through the URL parser using `origin` as the base, then\n * confirm the resolved origin matches. The parser handles every wonky form\n * (protocol-relative, backslash variants, fragments, etc.) so we don't have\n * to maintain a guard-list.\n *\n * @param {string} url - raw URL from the push payload (may be hostile)\n * @param {string} origin - service-worker origin (e.g. self.location.origin)\n * @returns {string} a same-origin path-only URL, or `\"/\"` on any mismatch\n */\nfunction sanitizeNotificationUrl(url, origin) {\n try {\n const resolved = new URL(url, origin);\n if (resolved.origin !== origin) return \"/\";\n return resolved.pathname + resolved.search + resolved.hash;\n } catch {\n return \"/\";\n }\n}\n\n// Exposed for unit tests (Node `vm` context). No-op in browsers where\n// `module` is undefined.\nif (typeof module !== \"undefined\" && module.exports) {\n module.exports = { sanitizeNotificationUrl };\n}\n\nself.addEventListener(\"push\", (event) => {\n const data = event.data?.json() || {};\n event.waitUntil(\n self.registration.showNotification(data.title || \"Wolfpack\", {\n body: data.body || \"\",\n tag: data.tag || \"wolfpack\",\n icon: \"/icon-192.png\",\n data: { url: data.url || \"/\" },\n }),\n );\n});\n\nself.addEventListener(\"notificationclick\", (event) => {\n event.notification.close();\n // Only allow same-origin URLs to prevent open-redirect via push payload.\n // See sanitizeNotificationUrl above for the rationale.\n const url = sanitizeNotificationUrl(\n event.notification.data?.url || \"/\",\n self.location.origin,\n );\n event.waitUntil(\n clients.matchAll({ type: \"window\", includeUncontrolled: true }).then((windowClients) => {\n // Focus existing wolfpack window if open\n for (const client of windowClients) {\n if (client.url.includes(self.location.origin) && \"focus\" in client) {\n return client.focus();\n }\n }\n // Otherwise open a new one\n return clients.openWindow(url);\n }),\n );\n});\n", mime: "application/javascript" }], + ["tsconfig.json", { content: "{\n \"extends\": \"../tsconfig.json\",\n \"compilerOptions\": {\n // Temporary frontend migration guard: public/app.ts and related legacy browser\n // modules still have broad implicit-any/null debt. Keep the public typecheck\n // on, but do not claim strict frontend coverage until those modules are typed.\n \"noImplicitAny\": false,\n \"strictNullChecks\": false\n },\n \"include\": [\"**/*.ts\"]\n}\n", mime: "application/json" }], ["wolfpack-icon.svg", { content: "\n\n \n \n \n \n", mime: "image/svg+xml" }], ["wolfpack-lib.js", { content: "// AUTO-GENERATED by scripts/bundle-client-lib.ts — do not edit\n(function() {\n\"use strict\";\n// src/terminal-buffer.ts\nfunction captureScrollState(buffer) {\n return {\n wasAtBottom: buffer.viewportY >= buffer.baseY,\n distanceFromBottom: Math.max(0, buffer.baseY - buffer.viewportY)\n };\n}\nfunction scrollTargetAfterResize(nextBaseY, distanceFromBottom) {\n return Math.max(0, nextBaseY - distanceFromBottom);\n}\nfunction serializeBufferTail(buffer, maxLines) {\n const start = Math.max(0, buffer.length - maxLines);\n const lines = [];\n for (let i = start;i < buffer.length; i++) {\n const line = buffer.getLine(i);\n if (line)\n lines.push(line.translateToString(true));\n }\n return lines.join(`\n`);\n}\n// src/terminal-input.ts\nfunction shouldInterceptCopy(event, hasSelection) {\n return (event.metaKey || event.ctrlKey) && event.key === \"c\" && event.type === \"keydown\" && hasSelection;\n}\nfunction encodeTerminalBinary(data) {\n const buf = new Uint8Array(data.length);\n for (let i = 0;i < data.length; i++)\n buf[i] = data.charCodeAt(i) & 255;\n return buf;\n}\n// src/reconnect-hydration.ts\nfunction shouldRehydrate(wasReconnect, hydrationStarted, prefillDisabled) {\n return wasReconnect || hydrationStarted && !prefillDisabled;\n}\n// src/grid-logic.ts\nvar MAX_GRID_CELLS = 6;\nfunction addToGridState(gridSessions, session, machine, currentSession, currentMachine) {\n if (gridSessions.length >= MAX_GRID_CELLS)\n return null;\n if (gridSessions.some((gs) => gs.session === session && gs.machine === machine))\n return null;\n const newSessions = [...gridSessions, { session, machine }];\n if (newSessions.length === 1 && currentSession) {\n const alreadyAdded = session === currentSession && machine === currentMachine;\n if (!alreadyAdded) {\n newSessions.unshift({ session: currentSession, machine: currentMachine });\n }\n }\n return {\n sessions: newSessions,\n focusIndex: newSessions.length - 1\n };\n}\nfunction removeFromGridState(gridSessions, idx, focusIndex) {\n if (idx < 0 || idx >= gridSessions.length) {\n return { sessions: gridSessions, focusIndex, exitGrid: false };\n }\n const newSessions = [...gridSessions];\n newSessions.splice(idx, 1);\n let newFocus = focusIndex;\n if (idx < focusIndex) {\n newFocus--;\n } else if (newFocus >= newSessions.length) {\n newFocus = Math.max(0, newSessions.length - 1);\n }\n if (newSessions.length <= 1) {\n return {\n sessions: [],\n focusIndex: 0,\n exitGrid: true,\n restoreSession: newSessions.length === 1 ? newSessions[0] : undefined\n };\n }\n return { sessions: newSessions, focusIndex: newFocus, exitGrid: false };\n}\nfunction cloneGridState(sessions, focusIndex) {\n const cloned = sessions.map((gs) => ({ session: gs.session, machine: gs.machine }));\n if (!cloned.length)\n return { sessions: [], focusIndex: 0 };\n const clamped = Math.max(0, Math.min(focusIndex, cloned.length - 1));\n return { sessions: cloned, focusIndex: clamped, focusedSession: cloned[clamped] };\n}\nfunction suspendGridState(gridSessions, focusIndex) {\n return cloneGridState(gridSessions, focusIndex);\n}\nfunction resumeGridState(suspendedSessions, focusIndex) {\n return cloneGridState(suspendedSessions, focusIndex);\n}\n// src/peer-health.ts\nvar FAILING_TIMEOUT_MS = 1500;\nvar HEALTHY_TIMEOUT_MS = 5000;\nvar FAILURE_THRESHOLD = 2;\nfunction recordFailure(state, url) {\n const cur = state[url]?.failures ?? 0;\n return { ...state, [url]: { failures: cur + 1 } };\n}\nfunction recordSuccess(state, url) {\n if (!state[url])\n return state;\n const next = { ...state };\n delete next[url];\n return next;\n}\nfunction fetchTimeoutMs(state, url) {\n return (state[url]?.failures ?? 0) >= FAILURE_THRESHOLD ? FAILING_TIMEOUT_MS : HEALTHY_TIMEOUT_MS;\n}\n// src/ws-constants.ts\nvar CLOSE_CODE_NORMAL = 1000;\nvar CLOSE_CODE_SESSION_UNAVAILABLE = 4001;\nvar CLOSE_CODE_DISPLACED = 4002;\nvar WS_CLOSE_REASONS = {\n PTY_EXITED: \"pty exited\",\n SESSION_UNAVAILABLE: \"session unavailable\",\n DISPLACED: \"displaced\",\n PTY_TEARDOWN: \"pty teardown\",\n SESSION_ENDED: \"session ended\",\n SUBSCRIBE_FAILED: \"subscribe rpc failed\"\n};\n\n// src/take-control-logic.ts\nfunction handleViewerConflict(state) {\n if (state.autoTakeControl) {\n return {\n action: \"auto-take-control\",\n newState: { ...state, autoTakeControl: false }\n };\n }\n return {\n action: \"show-overlay\",\n newState: { ...state }\n };\n}\nfunction handleControlGranted(state) {\n return { ...state, displaced: false, autoTakeControl: false };\n}\nfunction classifyDisconnect(code, reason) {\n if (code === CLOSE_CODE_DISPLACED)\n return \"displaced\";\n if (code === CLOSE_CODE_SESSION_UNAVAILABLE)\n return \"session-ended\";\n if (code === CLOSE_CODE_NORMAL && reason === WS_CLOSE_REASONS.PTY_EXITED)\n return \"pty-exited\";\n return \"reconnect\";\n}\nfunction handleTakeControlClick(isConnected) {\n return isConnected ? \"send-take-control\" : \"reconnect-with-auto\";\n}\nfunction handleDisplaced(state) {\n return { ...state, displaced: true };\n}\nfunction prepareAutoTakeControl(state) {\n return { ...state, autoTakeControl: true };\n}\nvar WP = {suspendGridState, shouldRehydrate, shouldInterceptCopy, serializeBufferTail, scrollTargetAfterResize, resumeGridState, removeFromGridState, prepareAutoTakeControl, peerHealthTimeoutMs: fetchTimeoutMs, peerHealthRecordSuccess: recordSuccess, peerHealthRecordFailure: recordFailure, handleViewerConflict, handleTakeControlClick, handleDisplaced, handleControlGranted, encodeTerminalBinary, classifyDisconnect, captureScrollState, addToGridState, PEER_HEALTHY_TIMEOUT_MS: HEALTHY_TIMEOUT_MS, PEER_FAILING_TIMEOUT_MS: FAILING_TIMEOUT_MS, CLOSE_CODE_SESSION_UNAVAILABLE, CLOSE_CODE_NORMAL, CLOSE_CODE_DISPLACED};\nwindow.WP = WP;\n})();\n", mime: "application/javascript" }], ]); diff --git a/src/server/broker-backend.ts b/src/server/broker-backend.ts index ae0d3011..087c11a6 100644 --- a/src/server/broker-backend.ts +++ b/src/server/broker-backend.ts @@ -66,7 +66,7 @@ export interface BrokerClientApi { unsubscribe( sessionId: string, opts?: { timeoutMs?: number }, - ): Promise; + ): Promise; } /** Tmux-style key names → raw byte sequences (mirrors PtyBackend's KEY_MAP). */ diff --git a/tests/e2e/grid.e2e.ts b/tests/e2e/grid.e2e.ts index 95d6ce52..5feb7576 100644 --- a/tests/e2e/grid.e2e.ts +++ b/tests/e2e/grid.e2e.ts @@ -329,7 +329,7 @@ test("long-background visibilitychange reconnects each grid cell and repaints", const origRepaint = gs.controller.forceRepaint.bind(gs.controller); gs.controller.forceRepaint = () => { gs._forceRepaintCount++; origRepaint(); }; const origReconnect = gs.controller.reconnect.bind(gs.controller); - gs.controller.reconnect = (...args) => { gs._reconnectCount++; return origReconnect(...args); }; + gs.controller.reconnect = (...args: unknown[]) => { gs._reconnectCount++; return origReconnect(...args); }; }); }); diff --git a/tests/unit/broker-backend.test.ts b/tests/unit/broker-backend.test.ts index f2b81858..9a6eacd4 100644 --- a/tests/unit/broker-backend.test.ts +++ b/tests/unit/broker-backend.test.ts @@ -92,10 +92,9 @@ class FakeBrokerClient implements BrokerClientApi { return okResp({ kind: "subscribe", ok: true }); } - async unsubscribe(sessionId: string): Promise { + async unsubscribe(sessionId: string): Promise { this.unsubscribeCallCount++; this.activeSubscriptions.delete(sessionId); - return okResp({ kind: "unsubscribe", ok: true }); } /** Push an output_binary frame to every subscriber for `sessionId`. */