@granularjs/core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +576 -0
- package/dist/granular.min.js +2 -0
- package/dist/granular.min.js.map +7 -0
- package/package.json +54 -0
- package/src/core/bootstrap.js +63 -0
- package/src/core/collections/observable-array.js +204 -0
- package/src/core/component/function-component.js +82 -0
- package/src/core/context.js +172 -0
- package/src/core/dom/dom.js +25 -0
- package/src/core/dom/element.js +725 -0
- package/src/core/dom/error-boundary.js +111 -0
- package/src/core/dom/input-format.js +82 -0
- package/src/core/dom/list.js +185 -0
- package/src/core/dom/portal.js +57 -0
- package/src/core/dom/tags.js +182 -0
- package/src/core/dom/virtual-list.js +242 -0
- package/src/core/dom/when.js +138 -0
- package/src/core/events/event-hub.js +97 -0
- package/src/core/forms/form.js +127 -0
- package/src/core/internal/symbols.js +5 -0
- package/src/core/network/websocket.js +165 -0
- package/src/core/query/query-client.js +529 -0
- package/src/core/reactivity/after-flush.js +20 -0
- package/src/core/reactivity/computed.js +51 -0
- package/src/core/reactivity/concat.js +89 -0
- package/src/core/reactivity/dirty-host.js +162 -0
- package/src/core/reactivity/observe.js +421 -0
- package/src/core/reactivity/persist.js +180 -0
- package/src/core/reactivity/resolve.js +8 -0
- package/src/core/reactivity/signal.js +97 -0
- package/src/core/reactivity/state.js +294 -0
- package/src/core/renderable/render-string.js +51 -0
- package/src/core/renderable/renderable.js +21 -0
- package/src/core/renderable/renderer.js +66 -0
- package/src/core/router/router.js +865 -0
- package/src/core/runtime.js +28 -0
- package/src/index.js +42 -0
- package/types/core/bootstrap.d.ts +11 -0
- package/types/core/collections/observable-array.d.ts +25 -0
- package/types/core/component/function-component.d.ts +14 -0
- package/types/core/context.d.ts +29 -0
- package/types/core/dom/dom.d.ts +13 -0
- package/types/core/dom/element.d.ts +10 -0
- package/types/core/dom/error-boundary.d.ts +8 -0
- package/types/core/dom/input-format.d.ts +6 -0
- package/types/core/dom/list.d.ts +8 -0
- package/types/core/dom/portal.d.ts +8 -0
- package/types/core/dom/tags.d.ts +114 -0
- package/types/core/dom/virtual-list.d.ts +8 -0
- package/types/core/dom/when.d.ts +13 -0
- package/types/core/events/event-hub.d.ts +48 -0
- package/types/core/forms/form.d.ts +9 -0
- package/types/core/internal/symbols.d.ts +4 -0
- package/types/core/network/websocket.d.ts +18 -0
- package/types/core/query/query-client.d.ts +73 -0
- package/types/core/reactivity/after-flush.d.ts +4 -0
- package/types/core/reactivity/computed.d.ts +1 -0
- package/types/core/reactivity/concat.d.ts +1 -0
- package/types/core/reactivity/dirty-host.d.ts +42 -0
- package/types/core/reactivity/observe.d.ts +10 -0
- package/types/core/reactivity/persist.d.ts +1 -0
- package/types/core/reactivity/resolve.d.ts +1 -0
- package/types/core/reactivity/signal.d.ts +11 -0
- package/types/core/reactivity/state.d.ts +14 -0
- package/types/core/renderable/render-string.d.ts +2 -0
- package/types/core/renderable/renderable.d.ts +15 -0
- package/types/core/renderable/renderer.d.ts +38 -0
- package/types/core/router/router.d.ts +57 -0
- package/types/core/runtime.d.ts +26 -0
- package/types/index.d.ts +2 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/core/renderable/renderable.js", "../src/core/renderable/renderer.js", "../src/core/bootstrap.js", "../src/core/reactivity/after-flush.js", "../src/core/internal/symbols.js", "../src/core/events/event-hub.js", "../src/core/collections/observable-array.js", "../src/core/reactivity/dirty-host.js", "../src/core/component/function-component.js", "../src/core/reactivity/signal.js", "../src/core/reactivity/state.js", "../src/core/reactivity/observe.js", "../src/core/reactivity/resolve.js", "../src/core/reactivity/computed.js", "../src/core/reactivity/concat.js", "../src/core/reactivity/persist.js", "../src/core/forms/form.js", "../src/core/dom/dom.js", "../src/core/dom/list.js", "../src/core/dom/when.js", "../src/core/dom/error-boundary.js", "../src/core/dom/virtual-list.js", "../src/core/dom/portal.js", "../src/core/network/websocket.js", "../src/core/dom/input-format.js", "../src/core/dom/element.js", "../src/core/renderable/render-string.js", "../src/core/query/query-client.js", "../src/core/router/router.js", "../src/core/context.js", "../src/core/dom/tags.js"],
|
|
4
|
+
"sourcesContent": ["/**\n * Base contract for objects that can be mounted/unmounted by the core renderer.\n */\nexport class Renderable {\n /**\n * Mounts the instance into the DOM.\n * @param {Node} parent\n * @param {Node|null} beforeNode\n */\n mountInto() {\n throw new Error('Renderable.mountInto() must be implemented');\n }\n\n /**\n * Unmounts and releases DOM/resources owned by the instance.\n */\n unmount() {\n throw new Error('Renderable.unmount() must be implemented');\n }\n}\n\n", "import { Renderable } from './renderable.js';\n\n/**\n * Core rendering rules for \"values\".\n * This is intentionally separate from the Renderable contract.\n */\nexport class Renderer {\n /**\n * @param {unknown} value\n * @returns {value is Node}\n */\n static isDomNode(value) {\n return !!value && typeof value === 'object' && typeof value.nodeType === 'number';\n }\n\n /**\n * @param {unknown} value\n * @returns {value is Renderable}\n */\n static isRenderable(value) {\n return value instanceof Renderable;\n }\n\n /**\n * Converts a non-renderable value into string for text rendering.\n * @param {unknown} value\n * @returns {string}\n */\n static toText(value) {\n if (value == null || value === false) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'number') return String(value);\n if (typeof value === 'bigint') return String(value);\n if (typeof value === 'boolean') return value ? 'true' : '';\n try {\n return String(value);\n } catch {\n return '';\n }\n }\n\n /**\n * Normalizes a value into a flat list of renderables:\n * - Renderable instances\n * - DOM Nodes\n * - TextNodes created from primitives/objects\n *\n * @param {unknown} value\n * @returns {(Renderable|Node)[]}\n */\n static normalize(value) {\n if (value == null || value === false) return [];\n if (Array.isArray(value)) return value.flatMap((v) => Renderer.normalize(v));\n if (Renderer.isRenderable(value) || Renderer.isDomNode(value)) return /** @type {(Renderable|Node)[]} */ ([value]);\n return [document.createTextNode(Renderer.toText(value))];\n }\n\n /**\n * Unmounts a renderable value if applicable.\n * @param {unknown} value\n */\n static unmount(value) {\n if (Renderer.isRenderable(value)) value.unmount();\n }\n}\n\n", "import { Renderer } from './renderable/renderer.js';\n\n/**\n * Creates and attaches a component instance or render function to a target element.\n *\n * @template T\n * @param {new (...args: any[]) => T | (() => any)} ComponentClass\n * @param {string|Element} target\n * @returns {Promise<T|{ unmount(): void }>}\n */\nexport async function bootstrap(ComponentClass, target) {\n const el = typeof target === 'string' ? document.querySelector(target) : target;\n if (!el) throw new Error('bootstrap target not found');\n\n if (typeof ComponentClass !== 'function') {\n throw new Error('bootstrap: component must be a function or class');\n }\n\n let instance = null;\n if (ComponentClass.__zbFactory) {\n instance = ComponentClass();\n } else {\n try {\n instance = new ComponentClass();\n } catch {\n instance = null;\n }\n }\n\n if (instance) {\n if (typeof instance.attach === 'function') {\n await instance.attach(el);\n return instance;\n }\n if (typeof instance.mountInto === 'function') {\n instance.mountInto(el, null);\n return instance;\n }\n }\n\n const root = ComponentClass();\n const values = Renderer.normalize(root);\n for (const r of values) {\n if (Renderer.isRenderable(r)) {\n r.mountInto(el, null);\n } else if (Renderer.isDomNode(r)) {\n el.appendChild(r);\n }\n }\n\n return {\n unmount() {\n for (const r of values) {\n if (Renderer.isRenderable(r)) {\n r.unmount();\n } else if (Renderer.isDomNode(r)) {\n r.remove();\n }\n }\n },\n };\n}\n\n", "let scheduled = false;\nconst watchers = new Set();\n\nfunction flush() {\n scheduled = false;\n for (const run of watchers) run();\n}\n\nexport const AfterFlush = {\n schedule() {\n if (scheduled) return;\n scheduled = true;\n queueMicrotask(flush);\n },\n add(run) {\n watchers.add(run);\n return () => watchers.delete(run);\n },\n};\n\n", "export const INTERNAL = Object.freeze({\n instrumentBoundProp: Symbol('zb.instrumentBoundProp'),\n subscribeProp: Symbol('zb.subscribeProp'),\n});\n\n", "/**\n * Minimal before/after event hub.\n *\n * - `before` handlers may return `false` to cancel the operation.\n * - `after` handlers are fire-and-forget.\n */\nexport class EventHub {\n #before = new Map(); // type -> Set<fn>\n #after = new Map(); // type -> Set<fn>\n #afterAny = new Set();\n\n /**\n * @param {'before'|'after'} phase\n * @param {string} type\n * @param {(payload: any, ctx: any) => (void|boolean)} fn\n * @returns {() => void}\n */\n on(phase, type, fn) {\n const map = phase === 'before' ? this.#before : this.#after;\n if (phase === 'after' && type === '*') {\n this.#afterAny.add(fn);\n return () => this.#afterAny.delete(fn);\n }\n let set = map.get(type);\n if (!set) {\n set = new Set();\n map.set(type, set);\n }\n set.add(fn);\n return () => set.delete(fn);\n }\n\n /**\n * Emits a before event. Returns false when cancelled.\n * @param {string} type\n * @param {any} payload\n * @param {any} ctx\n * @returns {boolean}\n */\n emitBefore(type, payload, ctx) {\n const set = this.#before.get(type);\n if (!set) return true;\n for (const fn of set) {\n const r = fn(payload, ctx);\n if (r === false) return false;\n }\n return true;\n }\n\n /**\n * Emits an after event.\n * @param {string} type\n * @param {any} payload\n * @param {any} ctx\n */\n emitAfter(type, payload, ctx) {\n const set = this.#after.get(type);\n if (set) {\n for (const fn of set) fn(payload, ctx);\n }\n for (const fn of this.#afterAny) fn(payload, ctx);\n }\n\n /**\n * Returns a fluent API for registering hooks.\n * @param {'before'|'after'} phase\n */\n phase(phase) {\n const hub = this;\n const api = {\n /**\n * Registers a handler for a given type.\n * @param {string} type\n * @param {(payload: any, ctx: any) => (void|boolean)} fn\n */\n on(type, fn) {\n return hub.on(phase, type, fn);\n },\n /**\n * Registers a handler for any type.\n * @param {(payload: any, ctx: any) => (void|boolean)} fn\n */\n any(fn) {\n return hub.on(phase, '*', fn);\n },\n };\n\n return new Proxy(api, {\n get(target, prop) {\n if (typeof prop !== 'string') return target[prop];\n if (prop in target) return target[prop];\n return (fn) => hub.on(phase, prop, fn);\n },\n });\n }\n}\n\n", "import { EventHub } from '../events/event-hub.js';\n\nconst ObservableArrayMeta = new WeakMap();\n\nexport function isObservableArray(value) {\n return !!value && typeof value === 'object' && ObservableArrayMeta.has(value);\n}\n\nfunction clampIndex(index, length) {\n if (index < 0) return Math.max(0, length + index);\n return Math.min(index, length);\n}\n\nexport function observableArray(initial = []) {\n const target = Array.isArray(initial) ? initial.slice() : [];\n const subs = new Set();\n const hub = new EventHub();\n\n const notify = (patch, ctx) => {\n for (const fn of subs) fn(patch, ctx);\n hub.emitAfter(patch.type, patch, ctx || { array: proxy });\n };\n\n const proxy = new Proxy(target, {\n get(t, prop, receiver) {\n // Public API (preferred)\n if (prop === 'subscribe') {\n return (fn) => {\n subs.add(fn);\n return () => subs.delete(fn);\n };\n }\n if (prop === 'reset') {\n return (nextArray) => {\n const prevItems = t.slice();\n const nextItems = Array.isArray(nextArray) ? nextArray.slice() : [];\n const ctx = { array: proxy, op: 'reset', args: [nextArray], prevLength: t.length, nextLength: nextItems.length };\n const patch = { type: 'reset', items: nextItems, prevItems };\n if (!hub.emitBefore('reset', patch, ctx)) return;\n t.length = 0;\n if (Array.isArray(nextArray)) t.push(...nextArray);\n notify({ type: 'reset', items: t.slice(), prevItems }, ctx);\n };\n }\n if (prop === 'after') {\n return () => hub.phase('after');\n }\n if (prop === 'before') {\n return () => hub.phase('before');\n }\n\n const value = Reflect.get(t, prop, receiver);\n if (typeof value !== 'function') return value;\n\n if (prop === 'push') {\n return (...items) => {\n const index = t.length;\n const ctx = { array: proxy, op: 'push', args: items, prevLength: t.length, nextLength: t.length + items.length };\n const patch = { type: 'insert', index, items: items.slice() };\n if (items.length && !hub.emitBefore('insert', patch, ctx)) return t.length;\n const result = Array.prototype.push.apply(t, items);\n if (items.length) notify({ type: 'insert', index, items }, ctx);\n return result;\n };\n }\n if (prop === 'pop') {\n return () => {\n if (t.length === 0) return undefined;\n const index = t.length - 1;\n const removed = [t[index]];\n const ctx = { array: proxy, op: 'pop', args: [], prevLength: t.length, nextLength: t.length - 1 };\n const patch = { type: 'remove', index, count: 1, items: removed };\n if (!hub.emitBefore('remove', patch, ctx)) return undefined;\n const result = Array.prototype.pop.apply(t);\n notify({ type: 'remove', index, count: 1, items: removed }, ctx);\n return result;\n };\n }\n if (prop === 'unshift') {\n return (...items) => {\n const ctx = { array: proxy, op: 'unshift', args: items, prevLength: t.length, nextLength: t.length + items.length };\n const patch = { type: 'insert', index: 0, items: items.slice() };\n if (items.length && !hub.emitBefore('insert', patch, ctx)) return t.length;\n const result = Array.prototype.unshift.apply(t, items);\n if (items.length) notify({ type: 'insert', index: 0, items }, ctx);\n return result;\n };\n }\n if (prop === 'shift') {\n return () => {\n if (t.length === 0) return undefined;\n const removed = [t[0]];\n const ctx = { array: proxy, op: 'shift', args: [], prevLength: t.length, nextLength: t.length - 1 };\n const patch = { type: 'remove', index: 0, count: 1, items: removed };\n if (!hub.emitBefore('remove', patch, ctx)) return undefined;\n const result = Array.prototype.shift.apply(t);\n notify({ type: 'remove', index: 0, count: 1, items: removed }, ctx);\n return result;\n };\n }\n if (prop === 'splice') {\n return (start, deleteCount, ...items) => {\n const lenBefore = t.length;\n const index = clampIndex(Number(start) || 0, lenBefore);\n const dc =\n deleteCount === undefined ? lenBefore - index : Math.max(0, Number(deleteCount) || 0);\n const ctx = { array: proxy, op: 'splice', args: [start, deleteCount, ...items], prevLength: t.length, nextLength: t.length - dc + items.length };\n if (dc) {\n const removePatch = { type: 'remove', index, count: dc, items: t.slice(index, index + dc) };\n if (!hub.emitBefore('remove', removePatch, ctx)) return [];\n }\n if (items.length) {\n const insertPatch = { type: 'insert', index, items: items.slice() };\n if (!hub.emitBefore('insert', insertPatch, ctx)) return [];\n }\n const removed = Array.prototype.splice.apply(t, [index, dc, ...items]);\n if (dc) notify({ type: 'remove', index, count: dc, items: removed }, ctx);\n if (items.length) notify({ type: 'insert', index, items }, ctx);\n return removed;\n };\n }\n\n return value.bind(t);\n },\n set(t, prop, value, receiver) {\n if (prop === 'length') {\n const prev = t.length;\n const next = Number(value) || 0;\n const prevItems = t.slice();\n const removed = next < prev ? t.slice(next, prev) : [];\n const ctx = { array: proxy, op: 'length', args: [next], prevLength: prev, nextLength: next };\n const ok = Reflect.set(t, prop, next, receiver);\n if (ok && next < prev) {\n const patch = { type: 'remove', index: next, count: prev - next, items: removed };\n if (hub.emitBefore('remove', patch, ctx)) notify(patch, ctx);\n }\n if (ok && next > prev) {\n notify({ type: 'reset', items: t.slice(), prevItems }, ctx);\n }\n return ok;\n }\n\n const index = typeof prop === 'string' && /^\\d+$/.test(prop) ? Number(prop) : null;\n if (index == null) return Reflect.set(t, prop, value, receiver);\n\n const lenBefore = t.length;\n const prevValue = index < t.length ? t[index] : undefined;\n const ctx = { array: proxy, op: 'set', args: [prop, value], prevLength: t.length, nextLength: t.length };\n const ok = Reflect.set(t, prop, value, receiver);\n if (!ok) return false;\n\n if (index < lenBefore) {\n const patch = { type: 'set', index, value, prev: prevValue };\n if (hub.emitBefore('set', patch, ctx)) notify(patch, ctx);\n return true;\n }\n\n if (index === lenBefore) {\n const patch = { type: 'insert', index, items: [value] };\n ctx.nextLength = t.length;\n if (hub.emitBefore('insert', patch, ctx)) notify(patch, ctx);\n return true;\n }\n\n const prevItems = t.slice(0, lenBefore);\n notify({ type: 'reset', items: t.slice(), prevItems }, ctx);\n return true;\n },\n });\n\n ObservableArrayMeta.set(proxy, { target, subs });\n return proxy;\n}\n\n/**\n * @typedef {Object} ObservableArrayPatchInsert\n * @property {'insert'} type\n * @property {number} index\n * @property {any[]} items\n */\n/**\n * @typedef {Object} ObservableArrayPatchRemove\n * @property {'remove'} type\n * @property {number} index\n * @property {number} count\n * @property {any[]} items\n */\n/**\n * @typedef {Object} ObservableArrayPatchSet\n * @property {'set'} type\n * @property {number} index\n * @property {any} value\n * @property {any} prev\n */\n/**\n * @typedef {Object} ObservableArrayPatchReset\n * @property {'reset'} type\n * @property {any[]} items\n * @property {any[]} prevItems\n */\n/**\n * @typedef {ObservableArrayPatchInsert|ObservableArrayPatchRemove|ObservableArrayPatchSet|ObservableArrayPatchReset} ObservableArrayPatch\n */\n\n", "import { AfterFlush } from './after-flush.js';\nimport { INTERNAL } from '../internal/symbols.js';\nimport { Renderable } from '../renderable/renderable.js';\nimport { isObservableArray } from '../collections/observable-array.js';\nimport { EventHub } from '../events/event-hub.js';\n\n/**\n * Base class that provides:\n * - property instrumentation (dirty tracking)\n * - microtask-batched flushing\n * - subscription mechanism for template bindings\n *\n * This is part of the core runtime and is inherited by `Component`.\n */\nexport class DirtyHost extends Renderable {\n #dirty = new Set();\n #scheduled = false;\n #subscribers = new Map();\n #boundProps = new Set();\n #values = new Map();\n #observableUnsubs = new Map();\n #events = new EventHub();\n\n /**\n * Registers BEFORE hooks. Handlers may return false to cancel.\n * Example: `store.before().set(({ prop, next }) => next !== null)`\n */\n before() {\n return this.#events.phase('before');\n }\n\n /**\n * Registers AFTER hooks.\n * Example: `store.after().flush(({ props }) => console.log(props))`\n */\n after() {\n return this.#events.phase('after');\n }\n\n emitBefore(type, payload, ctx) {\n return this.#events.emitBefore(type, payload, ctx);\n }\n\n emitAfter(type, payload, ctx) {\n this.#events.emitAfter(type, payload, ctx);\n }\n\n /**\n * Batches multiple assignments into a single flush.\n *\n * @param {() => void} cb\n */\n set(cb) {\n const wasScheduled = this.#scheduled;\n this.#scheduled = true;\n try {\n cb();\n } finally {\n this.#scheduled = wasScheduled;\n this.update();\n }\n }\n\n /**\n * Flushes all dirty properties, notifying any subscribers registered by bindings.\n * Usually you don't need to call this manually, because assignments trigger a microtask flush.\n */\n update() {\n if (this.#dirty.size === 0) return;\n const props = Array.from(this.#dirty);\n this.#dirty.clear();\n for (const prop of props) {\n const subs = this.#subscribers.get(prop);\n if (!subs) continue;\n for (const fn of subs) fn();\n }\n this.#events.emitAfter('flush', { props }, { target: this });\n AfterFlush.schedule();\n }\n\n /**\n * Internal: subscribes to a property changes on this instance.\n *\n * @param {string} prop\n * @param {() => void} fn\n * @returns {() => void} unsubscribe\n */\n [INTERNAL.subscribeProp](prop, fn) {\n let set = this.#subscribers.get(prop);\n if (!set) {\n set = new Set();\n this.#subscribers.set(prop, set);\n }\n set.add(fn);\n return () => set.delete(fn);\n }\n\n /**\n * Internal: instruments a property by defining a getter/setter on the instance.\n * The setter marks the property dirty and schedules a flush.\n *\n * @param {string} prop\n */\n [INTERNAL.instrumentBoundProp](prop) {\n if (this.#boundProps.has(prop)) return;\n this.#boundProps.add(prop);\n\n const desc = Object.getOwnPropertyDescriptor(this, prop);\n if (desc && desc.configurable === false) return;\n\n this.#values.set(prop, this[prop]);\n this.#wireObservable(prop, this.#values.get(prop));\n\n Object.defineProperty(this, prop, {\n get: () => this.#values.get(prop),\n set: (v) => {\n const prev = this.#values.get(prop);\n if (prev === v) return;\n const ok = this.#events.emitBefore('set', { prop, prev, next: v }, { target: this });\n if (!ok) return;\n this.#values.set(prop, v);\n this.#wireObservable(prop, v);\n this.#markDirty(prop);\n this.#events.emitAfter('set', { prop, prev, next: v }, { target: this });\n },\n enumerable: true,\n configurable: true,\n });\n }\n\n #wireObservable(prop, value) {\n const prevUnsub = this.#observableUnsubs.get(prop);\n if (prevUnsub) {\n prevUnsub();\n this.#observableUnsubs.delete(prop);\n }\n\n if (!isObservableArray(value)) return;\n if (typeof value.subscribe !== 'function') return;\n\n const unsub = value.subscribe(() => {\n // Array mutated without reassigning the prop; still notify.\n this.#markDirty(prop);\n });\n this.#observableUnsubs.set(prop, unsub);\n }\n\n #markDirty(prop) {\n this.#dirty.add(prop);\n this.#scheduleFlush();\n }\n\n #scheduleFlush() {\n if (this.#scheduled) return;\n this.#scheduled = true;\n queueMicrotask(() => {\n this.#scheduled = false;\n this.update();\n });\n }\n}\n\n", "import { DirtyHost } from '../reactivity/dirty-host.js';\nimport { Renderer } from '../renderable/renderer.js';\n\nfunction createProxy(host) {\n return new Proxy(host, {\n get: (target, prop) => {\n if (prop === 'onCleanup') return target.onCleanup.bind(target);\n if (prop === '$') {\n return (name) => target[name];\n }\n if (typeof prop === 'string' && prop.startsWith('$')) {\n return target[prop.slice(1)];\n }\n const value = target[prop];\n if (typeof value === 'function') return value.bind(target);\n return value;\n },\n set: (target, prop, value) => {\n target[prop] = value;\n return true;\n },\n });\n}\n\nclass FunctionComponentInstance extends DirtyHost {\n #root = null;\n #rootValues = [];\n #cleanups = [];\n\n constructor(renderFn, props) {\n super();\n this.props = props || {};\n const proxy = createProxy(this);\n const root = renderFn.call(proxy, props);\n this.#root = root;\n this.#rootValues = Renderer.normalize(root);\n }\n\n mountInto(parent, beforeNode) {\n for (const r of this.#rootValues) {\n if (Renderer.isRenderable(r)) {\n r.mountInto(parent, beforeNode);\n continue;\n }\n if (Renderer.isDomNode(r)) {\n parent.insertBefore(r, beforeNode);\n }\n }\n }\n\n unmount() {\n for (const fn of this.#cleanups) fn();\n this.#cleanups = [];\n for (const r of this.#rootValues) {\n if (Renderer.isRenderable(r)) {\n r.unmount();\n continue;\n }\n if (Renderer.isDomNode(r)) {\n r.remove();\n }\n }\n }\n\n renderToString(render) {\n return render(this.#root);\n }\n\n onCleanup(fn) {\n if (typeof fn !== 'function') return;\n this.#cleanups.push(fn);\n }\n}\n\nexport function component(renderFn) {\n if (typeof renderFn !== 'function') {\n throw new Error('component(fn): fn must be a function');\n }\n const factory = (props) => new FunctionComponentInstance(renderFn, props);\n factory.__zbFactory = true;\n return factory;\n}\n", "const SIGNAL = Symbol('zb.signal');\nconst SIGNAL_MAP = Symbol('zb.signal.map');\n\nfunction isObject(value) {\n return value !== null && typeof value === 'object';\n}\n\nexport function signal(initial) {\n const state = {\n [SIGNAL]: true,\n value: initial,\n subs: new Set(),\n before: new Set(),\n };\n\n const notify = (prev) => {\n for (const fn of state.subs) fn(state.value, prev);\n };\n\n const api = {\n get() {\n return state.value;\n },\n set(next, force = false) {\n const prev = state.value;\n if (!force && prev === next) return true;\n for (const fn of state.before) {\n const res = fn(prev, next);\n if (res === false) return false;\n }\n state.value = next;\n notify(prev);\n return true;\n },\n subscribe(fn) {\n state.subs.add(fn);\n return () => state.subs.delete(fn);\n },\n before(fn) {\n state.before.add(fn);\n return () => state.before.delete(fn);\n },\n };\n\n const proxy = new Proxy(api, {\n get(_target, prop) {\n if (prop === SIGNAL) return true;\n if (prop === 'value') return state.value;\n if (prop === 'get') return api.get;\n if (prop === 'set') return api.set;\n if (prop === 'subscribe') return api.subscribe;\n if (prop === 'before') return api.before;\n if (prop === Symbol.toPrimitive) return () => state.value;\n if (prop === 'valueOf') return () => state.value;\n if (prop === 'toString') return () => String(state.value);\n\n const value = state.value;\n if (Array.isArray(value) && prop === 'map') {\n return (fn) => {\n const out = value.map(fn);\n Object.defineProperty(out, SIGNAL_MAP, { value: { signal: proxy, mapFn: fn } });\n return out;\n };\n }\n\n if (isObject(value)) {\n const v = value[prop];\n if (typeof v === 'function') return v.bind(value);\n return v;\n }\n return undefined;\n },\n });\n\n return proxy;\n}\n\nexport function isSignal(value) {\n return !!value && value[SIGNAL] === true;\n}\n\nexport function subscribeSignal(sig, fn) {\n return sig?.subscribe?.(fn);\n}\n\nexport function readSignal(sig) {\n return sig?.get?.();\n}\n\nexport function setSignal(sig, next, force = false) {\n return sig?.set?.(next, force);\n}\n\nexport function getMappedArrayMeta(value) {\n if (!Array.isArray(value)) return null;\n return value[SIGNAL_MAP] || null;\n}\n", "import { signal, setSignal, readSignal, subscribeSignal } from './signal.js';\n\nconst STATE = Symbol('zb.state');\nconst STATE_META = Symbol('zb.state.meta');\n\nfunction isObject(value) {\n return value !== null && typeof value === 'object';\n}\n\nfunction splitPath(path) {\n if (!path) return [];\n if (Array.isArray(path)) return path;\n return String(path)\n .split('.')\n .map((p) => p.trim())\n .filter(Boolean);\n}\n\nfunction getAtPath(obj, path) {\n let cur = obj;\n for (const key of path) {\n if (!cur) return undefined;\n cur = cur[key];\n }\n return cur;\n}\n\nfunction mergeDefaults(base, next) {\n if (!isObject(base) || !isObject(next)) return isObject(next) ? { ...next } : next;\n const out = { ...base };\n for (const key of Object.keys(next)) {\n const baseValue = base[key];\n const nextValue = next[key];\n if (isObject(baseValue) && isObject(nextValue)) {\n out[key] = mergeDefaults(baseValue, nextValue);\n continue;\n }\n out[key] = nextValue;\n }\n return out;\n}\n\nfunction normalizeWhen(when) {\n if (typeof when === 'function') return when;\n if (when === 'nullish') return (value) => value == null;\n return (value) => value === undefined;\n}\n\nfunction resolveValue(adapter, path, root) {\n const currentRoot = root === undefined ? adapter.get() : root;\n const value = getAtPath(currentRoot, path);\n const defaults = adapter.defaults;\n if (!defaults) return value;\n const shouldDefault = adapter.defaultsWhen(value);\n if (!shouldDefault) return value;\n const fallback = getAtPath(defaults, path);\n if (fallback === undefined) return value;\n if (typeof fallback === 'function') {\n return fallback({ value, path, root: currentRoot });\n }\n return fallback;\n}\n\nfunction setAtPath(obj, path, value) {\n if (!path.length) return value;\n const root = Array.isArray(obj) ? obj.slice() : { ...(obj || {}) };\n let cur = root;\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n const next = cur[key];\n const cloned = Array.isArray(next) ? next.slice() : { ...(next || {}) };\n cur[key] = cloned;\n cur = cloned;\n }\n cur[path[path.length - 1]] = value;\n return root;\n}\n\nfunction createSetterProxy(adapter, basePath) {\n return new Proxy(\n {},\n {\n get(_t, prop) {\n if (prop === 'increment') {\n return () => {\n const current = getAtPath(adapter.get(), basePath);\n const next = (Number(current) || 0) + 1;\n adapter.set(setAtPath(adapter.get(), basePath, next));\n };\n }\n if (prop === 'decrement') {\n return () => {\n const current = getAtPath(adapter.get(), basePath);\n const next = (Number(current) || 0) - 1;\n adapter.set(setAtPath(adapter.get(), basePath, next));\n };\n }\n if (prop === 'mutate') {\n return (...args) => adapter.mutate?.(...args);\n }\n if (typeof prop === 'string') {\n return createSetterProxy(adapter, basePath.concat(prop));\n }\n return undefined;\n },\n set(_t, prop, value) {\n const path = basePath.concat(String(prop));\n adapter.set(setAtPath(adapter.get(), path, value));\n return true;\n },\n }\n );\n}\n\nfunction createStateProxy(adapter, path = []) {\n const meta = { adapter, path };\n return new Proxy(\n {},\n {\n get(_t, prop) {\n if (prop === STATE) return true;\n if (prop === STATE_META) return meta;\n if (prop === 'get') {\n return (p) => {\n if (p === undefined) return adapter.get();\n return resolveValue(adapter, path.concat(splitPath(p)));\n };\n }\n if (prop === 'set') {\n return (...args) => {\n if (args.length === 0) return createSetterProxy(adapter, path);\n if (args.length === 1) {\n return adapter.set(setAtPath(adapter.get(), path, args[0]));\n }\n const [p, v] = args;\n if (typeof p === 'string') {\n return adapter.set(setAtPath(adapter.get(), path.concat(splitPath(p)), v));\n }\n return adapter.set(setAtPath(adapter.get(), path, p));\n };\n }\n if (prop === 'subscribe') {\n return (fn) => adapter.subscribe(fn);\n }\n if (prop === 'before') {\n return adapter.before;\n }\n if (prop === 'mutate') {\n return (...args) => adapter.mutate?.(...args);\n }\n if (prop === Symbol.toPrimitive) return () => resolveValue(adapter, path);\n if (prop === 'valueOf') return () => resolveValue(adapter, path);\n if (prop === 'toString') return () => String(resolveValue(adapter, path));\n\n const current = resolveValue(adapter, path);\n if (Array.isArray(current) && prop === 'map') {\n return (fn) => {\n const out = current.map(fn);\n Object.defineProperty(out, STATE_META, { value: { adapter, path, mapFn: fn } });\n return out;\n };\n }\n\n if (isObject(current) && typeof prop === 'string') {\n return createStateProxy(adapter, path.concat(prop));\n }\n return undefined;\n },\n set(_t, prop, value) {\n if (typeof prop === 'string') {\n throw new Error(`Direct mutation is not allowed. Use .set().${prop} = value or .set(\"${path.concat(prop).join('.')}\", value).`);\n }\n return false;\n },\n }\n );\n}\n\nexport function state(initial) {\n const rootSignal = signal(initial);\n const adapter = {\n kind: 'state',\n get: () => readSignal(rootSignal),\n set: (next) => setSignal(rootSignal, next, true),\n subscribe: (fn) => subscribeSignal(rootSignal, fn),\n before: rootSignal.before,\n mutate: (optimistic, mutation, options = {}) => mutateAdapter(adapter, optimistic, mutation, options),\n };\n return createStateFromAdapter(adapter);\n}\n\nexport function createStateFromAdapter(adapter) {\n const proxy = createStateProxy(adapter, []);\n Object.defineProperty(proxy, STATE, { value: true });\n return proxy;\n}\n\nfunction cloneForSnapshot(value, options) {\n if (typeof options.clone === 'function') return options.clone(value);\n return value;\n}\n\nexport async function mutateAdapter(adapter, optimistic, mutation, options = {}) {\n if (typeof optimistic !== 'function' || typeof mutation !== 'function') {\n throw new Error('mutate(optimistic, mutation, options?): invalid arguments');\n }\n const prev = cloneForSnapshot(adapter.get(), options);\n optimistic();\n try {\n const result = await mutation();\n return result;\n } catch (err) {\n if (typeof options.rollback === 'function') {\n options.rollback(err, prev);\n } else {\n adapter.set(prev);\n }\n throw err;\n }\n}\n\nexport function isState(value) {\n return !!value && value[STATE] === true;\n}\n\nexport function isComputed(value) {\n const meta = value?.[STATE_META];\n return !!meta && meta.adapter?.kind === 'computed';\n}\n\nexport function isStatePath(value) {\n return !!value && value[STATE_META];\n}\n\nexport function readState(value) {\n const meta = value?.[STATE_META];\n if (!meta) return undefined;\n return resolveValue(meta.adapter, meta.path);\n}\n\nexport function readStateFromRoot(value, root) {\n const meta = value?.[STATE_META];\n if (!meta) return undefined;\n return resolveValue(meta.adapter, meta.path, root);\n}\n\nexport function subscribeState(value, fn) {\n const meta = value?.[STATE_META];\n if (!meta) return null;\n return meta.adapter.subscribe((nextRoot, prevRoot) => {\n const next = resolveValue(meta.adapter, meta.path, nextRoot);\n const prev = resolveValue(meta.adapter, meta.path, prevRoot);\n if (next === prev) return;\n fn(next, prev);\n });\n}\n\nexport function readStateMeta(meta) {\n if (!meta) return undefined;\n return resolveValue(meta.adapter, meta.path);\n}\n\nexport function subscribeStateMeta(meta, fn) {\n if (!meta) return null;\n return meta.adapter.subscribe((nextRoot, prevRoot) => {\n const next = resolveValue(meta.adapter, meta.path, nextRoot);\n const prev = resolveValue(meta.adapter, meta.path, prevRoot);\n if (next === prev) return;\n fn(next, prev);\n });\n}\n\nexport function setStateValue(value, next) {\n const meta = value?.[STATE_META];\n if (!meta) return;\n return meta.adapter.set(setAtPath(meta.adapter.get(), meta.path, next));\n}\n\nexport function getMappedMeta(value) {\n const meta = value?.[STATE_META];\n if (!meta || !meta.mapFn) return null;\n return meta;\n}\n\nexport function withDefaults(target, defaults, options = {}) {\n const meta = target?.[STATE_META];\n if (!meta) {\n throw new Error('withDefaults(target, defaults, options?): target must be a state or state path');\n }\n const adapter = meta.adapter;\n adapter.defaultsWhen = options.when === undefined ? (adapter.defaultsWhen ?? normalizeWhen()) : normalizeWhen(options.when);\n adapter.defaults = adapter.defaults ? mergeDefaults(adapter.defaults, defaults) : defaults;\n return target;\n}\n", "import { isSignal, readSignal, subscribeSignal, setSignal, signal } from './signal.js';\nimport { isObservableArray } from '../collections/observable-array.js';\nimport { createStateFromAdapter, isState, isStatePath, readState, readStateFromRoot, subscribeState, setStateValue } from './state.js';\n\nfunction freezeValue(value) {\n if (!value || typeof value !== 'object') return value;\n try {\n return Object.freeze(value);\n } catch {\n return value;\n }\n}\n\nfunction normalizeTargets(targets) {\n if (targets.length === 1 && Array.isArray(targets[0]) && !isObservableArray(targets[0])) return targets[0];\n return targets;\n}\n\nfunction readTargetValue(target) {\n if (isState(target) || isStatePath(target)) return readState(target);\n if (isSignal(target)) return readSignal(target);\n if (isObservableArray(target)) return target;\n return undefined;\n}\n\nfunction subscribeAfterTarget(target, fn) {\n if (isState(target) || isStatePath(target)) {\n return subscribeState(target, (next, prev) => fn(freezeValue(next), freezeValue(prev), null));\n }\n if (isSignal(target)) {\n return subscribeSignal(target, (next, prev) => fn(freezeValue(next), freezeValue(prev), null));\n }\n if (isObservableArray(target)) {\n return target.after().any((patch, ctx) => {\n const prevLen = ctx?.prevLength ?? target.length;\n const nextLen = ctx?.nextLength ?? target.length;\n const { next, prev } = makeArraySnapshots(target, patch, ctx, 'after');\n fn(next, prev, { patch, prevLength: prevLen, nextLength: nextLen, array: target });\n });\n }\n throw new Error('after(x).change: unsupported target');\n}\n\nfunction subscribeBeforeTarget(target, fn) {\n if (isState(target) || isStatePath(target)) {\n return target.before?.((prevRoot, nextRoot) => {\n const prev = readStateFromRoot(target, prevRoot);\n const next = nextRoot !== undefined ? readStateFromRoot(target, nextRoot) : prev;\n if (next === prev) return true;\n const res = fn(freezeValue(next), freezeValue(prev), null);\n return res !== false;\n });\n }\n if (isSignal(target)) {\n return target.before((prev, next) => fn(freezeValue(next), freezeValue(prev), null));\n }\n if (isObservableArray(target)) {\n return target.before().any((patch, ctx) => {\n const prevLen = target.length;\n const nextLen = ctx?.nextLength ?? prevLen;\n const { next, prev } = makeArraySnapshots(target, patch, ctx, 'before');\n const res = fn(next, prev, { patch, prevLength: prevLen, nextLength: nextLen, array: target });\n return res !== false;\n });\n }\n throw new Error('before(x).change: unsupported target');\n}\n\nfunction createComputedState() {\n const rootSignal = signal(undefined);\n const adapter = {\n kind: 'computed',\n get: () => readSignal(rootSignal),\n set: () => {\n throw new Error('Computed values are read-only.');\n },\n subscribe: (fn) => subscribeSignal(rootSignal, fn),\n before: undefined,\n };\n const proxy = createStateFromAdapter(adapter);\n const setValue = (next) => setSignal(rootSignal, next, true);\n return { value: proxy, setValue };\n}\n\nfunction applyPatch(baseArray, patch, ctx) {\n if (!Array.isArray(baseArray)) return [];\n const out = baseArray.slice();\n if (!patch || !patch.type) return out;\n if (patch.type === 'insert') {\n out.splice(patch.index, 0, ...(patch.items || []));\n return out;\n }\n if (patch.type === 'remove') {\n out.splice(patch.index, patch.count || 0);\n return out;\n }\n if (patch.type === 'set') {\n out[patch.index] = patch.value;\n return out;\n }\n if (patch.type === 'reset') {\n return Array.isArray(patch.items) ? patch.items.slice() : [];\n }\n return out;\n}\n\nfunction applyInversePatch(baseArray, patch, ctx) {\n if (!Array.isArray(baseArray)) return [];\n const out = baseArray.slice();\n if (!patch || !patch.type) return out;\n if (patch.type === 'insert') {\n out.splice(patch.index, (patch.items || []).length);\n return out;\n }\n if (patch.type === 'remove') {\n const items = patch.items || [];\n out.splice(patch.index, 0, ...items);\n return out;\n }\n if (patch.type === 'set') {\n out[patch.index] = patch.prev;\n return out;\n }\n if (patch.type === 'reset') {\n return Array.isArray(patch.prevItems) ? patch.prevItems.slice() : [];\n }\n return out;\n}\n\nfunction makeArraySnapshots(target, patch, ctx, phase) {\n const cached = { prev: null, next: null };\n const prev = () => {\n if (cached.prev) return cached.prev;\n cached.prev = phase === 'after' ? applyInversePatch(target, patch, ctx) : target.slice();\n return cached.prev;\n };\n const next = () => {\n if (cached.next) return cached.next;\n cached.next = phase === 'after' ? target.slice() : applyPatch(target, patch, ctx);\n return cached.next;\n };\n return { prev, next };\n}\n\nfunction valueForTarget(target) {\n if (isObservableArray(target)) return () => target.slice();\n return readTargetValue(target);\n}\n\nexport function after(...targets) {\n const list = normalizeTargets(targets);\n if (!list.length) {\n throw new Error('after(...targets): at least one target is required');\n }\n return {\n change(fn) {\n const unsubs = list.map((target) =>\n subscribeAfterTarget(target, (next, prev, ctx) => fn(next, prev, ctx))\n );\n return () => {\n for (const unsub of unsubs) {\n if (typeof unsub === 'function') unsub();\n }\n };\n },\n compute(fn, options = {}) {\n const { value, setValue } = createComputedState();\n let runId = 0;\n let lastHash = undefined;\n let lastValue = undefined;\n let scheduled = null;\n let disposed = false;\n let lastValues = list.map(valueForTarget);\n const equals = typeof options.equals === 'function' ? options.equals : Object.is;\n const handleError = (err) => {\n if (typeof options.onError === 'function') {\n options.onError(err);\n return;\n }\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(err);\n }\n };\n const computeNow = (nextValues, prevValues, ctxs) => {\n if (disposed) return;\n const current = ++runId;\n const args = nextValues;\n if (typeof options.hash === 'function') {\n let nextHash = undefined;\n try {\n nextHash = list.length === 1 ? options.hash(args[0], prevValues[0], ctxs[0]) : options.hash(args, prevValues, ctxs);\n } catch (err) {\n handleError(err);\n return;\n }\n if (nextHash === lastHash) return;\n lastHash = nextHash;\n }\n let result;\n try {\n result = list.length === 1 ? fn(args[0], prevValues[0], ctxs[0]) : fn(args, prevValues, ctxs);\n } catch (err) {\n handleError(err);\n return;\n }\n if (result && typeof result.then === 'function') {\n result\n .then((next) => {\n if (current !== runId || disposed) return;\n if (equals(lastValue, next)) return;\n lastValue = next;\n setValue(next);\n })\n .catch((err) => handleError(err));\n return;\n }\n if (equals(lastValue, result)) return;\n lastValue = result;\n setValue(result);\n };\n const scheduleRun = (nextValues, prevValues, ctxs) => {\n if (disposed) return;\n const delay = Math.max(0, options.debounce ?? 0);\n if (!delay) {\n computeNow(nextValues, prevValues, ctxs);\n return;\n }\n if (scheduled) clearTimeout(scheduled);\n scheduled = setTimeout(() => {\n scheduled = null;\n computeNow(nextValues, prevValues, ctxs);\n }, delay);\n };\n scheduleRun(lastValues, lastValues, list.map(() => null));\n const unsubs = list.map((target, index) =>\n subscribeAfterTarget(target, (next, prev, ctx) => {\n const nextValues = list.map(valueForTarget);\n nextValues[index] = next;\n const prevValues = lastValues.slice();\n prevValues[index] = prev;\n lastValues = nextValues;\n const ctxs = list.map(() => null);\n ctxs[index] = ctx;\n scheduleRun(nextValues, prevValues, ctxs);\n })\n );\n Object.defineProperty(value, 'dispose', {\n value: () => {\n disposed = true;\n runId++;\n if (scheduled) clearTimeout(scheduled);\n for (const unsub of unsubs) {\n if (typeof unsub === 'function') unsub();\n }\n },\n enumerable: false,\n });\n return value;\n },\n };\n}\n\nexport function before(...targets) {\n const list = normalizeTargets(targets);\n if (!list.length) {\n throw new Error('before(...targets): at least one target is required');\n }\n return {\n change(fn) {\n const unsubs = list.map((target) =>\n subscribeBeforeTarget(target, (next, prev, ctx) => fn(next, prev, ctx))\n );\n return () => {\n for (const unsub of unsubs) {\n if (typeof unsub === 'function') unsub();\n }\n };\n },\n compute(fn, options = {}) {\n const { value, setValue } = createComputedState();\n let runId = 0;\n let lastHash = undefined;\n let lastValue = undefined;\n let scheduled = null;\n let disposed = false;\n const equals = typeof options.equals === 'function' ? options.equals : Object.is;\n const handleError = (err) => {\n if (typeof options.onError === 'function') {\n options.onError(err);\n return;\n }\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(err);\n }\n };\n const computeNow = (nextValues, prevValues, ctxs) => {\n if (disposed) return;\n const current = ++runId;\n if (typeof options.hash === 'function') {\n let nextHash = undefined;\n try {\n nextHash =\n list.length === 1\n ? options.hash(nextValues[0], prevValues[0], ctxs[0])\n : options.hash(nextValues, prevValues, ctxs);\n } catch (err) {\n handleError(err);\n return;\n }\n if (nextHash === lastHash) return;\n lastHash = nextHash;\n }\n let result;\n try {\n result =\n list.length === 1\n ? fn(nextValues[0], prevValues[0], ctxs[0])\n : fn(nextValues, prevValues, ctxs);\n } catch (err) {\n handleError(err);\n return;\n }\n if (result && typeof result.then === 'function') {\n result\n .then((next) => {\n if (current !== runId || disposed) return;\n if (equals(lastValue, next)) return;\n lastValue = next;\n setValue(next);\n })\n .catch((err) => handleError(err));\n return;\n }\n if (equals(lastValue, result)) return;\n lastValue = result;\n setValue(result);\n };\n const scheduleRun = (nextValues, prevValues, ctxs) => {\n if (disposed) return;\n const delay = Math.max(0, options.debounce ?? 0);\n if (!delay) {\n computeNow(nextValues, prevValues, ctxs);\n return;\n }\n if (scheduled) clearTimeout(scheduled);\n scheduled = setTimeout(() => {\n scheduled = null;\n computeNow(nextValues, prevValues, ctxs);\n }, delay);\n };\n const unsubs = list.map((target, index) =>\n subscribeBeforeTarget(target, (next, prev, ctx) => {\n const currentValues = list.map(valueForTarget);\n const nextValues = currentValues.slice();\n nextValues[index] = next;\n const prevValues = currentValues.slice();\n prevValues[index] = prev;\n const ctxs = list.map(() => null);\n ctxs[index] = ctx;\n scheduleRun(nextValues, prevValues, ctxs);\n })\n );\n Object.defineProperty(value, 'dispose', {\n value: () => {\n disposed = true;\n runId++;\n if (scheduled) clearTimeout(scheduled);\n for (const unsub of unsubs) {\n if (typeof unsub === 'function') unsub();\n }\n },\n enumerable: false,\n });\n return value;\n },\n };\n}\n\nexport function set(target, value) {\n if (isState(target) || isStatePath(target)) {\n setStateValue(target, value);\n return;\n }\n if (isSignal(target)) {\n setSignal(target, value);\n return;\n }\n if (isObservableArray(target)) {\n if (typeof target.reset !== 'function') {\n throw new Error('set(array, value): observableArray must implement reset');\n }\n target.reset(value);\n return;\n }\n throw new Error('set(target, value): unsupported target');\n}\n\nfunction resolveValue(value) {\n return typeof value === 'function' ? value() : value;\n}\n\nexport function subscribe(target, selector, listener, equalityFn) {\n if (typeof selector !== 'function') {\n throw new Error('subscribe(target, selector, listener?): selector must be a function');\n }\n if (listener === undefined) {\n return after(target).compute((next) => selector(resolveValue(next)));\n }\n if (typeof listener !== 'function') {\n throw new Error('subscribe(target, selector, listener): listener must be a function');\n }\n const eq = typeof equalityFn === 'function' ? equalityFn : Object.is;\n let prevSelected = selector(resolveValue(readTargetValue(target)));\n return after(target).change((next) => {\n const nextSelected = selector(resolveValue(next));\n if (eq(prevSelected, nextSelected)) return;\n const p = prevSelected;\n prevSelected = nextSelected;\n listener(nextSelected, p);\n });\n}\n", "import { isSignal, readSignal } from './signal.js';\nimport { isState, isStatePath, readState } from './state.js';\n\nexport function resolve(value) {\n if (isSignal(value)) return readSignal(value);\n if (isState(value) || isStatePath(value)) return readState(value);\n return value;\n}\n", "import { after } from './observe.js';\nimport { isSignal, readSignal } from './signal.js';\nimport { isState, isStatePath, isComputed, readState, state } from './state.js';\n\nfunction asComputed(value) {\n if (isComputed(value)) return value;\n if (isSignal(value)) {\n const current = readSignal(value);\n if (typeof current === 'function') {\n return (...args) => {\n const next = readSignal(value);\n if (typeof next === 'function') return next(...args);\n return undefined;\n };\n }\n return after(value).compute((next) => next);\n }\n if (isState(value) || isStatePath(value)) {\n const current = readState(value);\n if (typeof current === 'function') {\n return (...args) => {\n const next = readState(value);\n if (typeof next === 'function') return next(...args);\n return undefined;\n };\n }\n return after(value).compute((next) => next);\n }\n if (typeof value === 'function') return value;\n return after(state(value)).compute((next) => next);\n}\n\nexport function computed(input) {\n if (isSignal(input) || isState(input) || isStatePath(input)) {\n return asComputed(input);\n }\n if (!input || typeof input !== 'object') {\n return asComputed(input);\n }\n const cache = new Map();\n return new Proxy(input, {\n get(target, prop) {\n if (typeof prop === 'symbol') return target[prop];\n if (cache.has(prop)) return cache.get(prop);\n const value = target[prop];\n const resolved = asComputed(value);\n cache.set(prop, resolved);\n return resolved;\n },\n });\n}\n", "import { after } from './observe.js';\nimport { resolve } from './resolve.js';\nimport { isSignal } from './signal.js';\nimport { isState, isStatePath, isComputed } from './state.js';\n\nfunction isObject(value) {\n return value !== null && typeof value === 'object';\n}\n\nfunction isReactive(value) {\n return isSignal(value) || isState(value) || isStatePath(value) || isComputed(value);\n}\n\nfunction isTuple(value) {\n if (!Array.isArray(value) || value.length !== 2) return false;\n const source = value[0];\n const mapper = value[1];\n if (isReactive(source)) return typeof mapper === 'function' || typeof mapper === 'string';\n return typeof mapper === 'function' || typeof mapper === 'string';\n}\n\nfunction normalizeParts(values, out = []) {\n for (const value of values) {\n if (isTuple(value)) {\n out.push(value);\n continue;\n }\n if (Array.isArray(value)) {\n normalizeParts(value, out);\n continue;\n }\n out.push(value);\n }\n return out;\n}\n\nfunction extractOptions(parts) {\n if (!parts.length) return { parts, options: { separator: '', filterFalsy: false } };\n const last = parts[parts.length - 1];\n if (\n isObject(last) &&\n !Array.isArray(last) &&\n !isReactive(last) &&\n (Object.prototype.hasOwnProperty.call(last, 'separator') ||\n Object.prototype.hasOwnProperty.call(last, 'filterFalsy'))\n ) {\n const options = {\n separator: last.separator ?? '',\n filterFalsy: last.filterFalsy ?? false,\n };\n return { parts: parts.slice(0, -1), options };\n }\n return { parts, options: { separator: '', filterFalsy: false } };\n}\n\nfunction collectTargets(value, targets) {\n if (isReactive(value)) targets.push(value);\n if (Array.isArray(value) && value.length) {\n const source = value[0];\n if (isReactive(source)) targets.push(source);\n }\n}\n\nfunction resolvePart(part) {\n if (Array.isArray(part)) {\n const source = part[0];\n const mapper = part[1];\n const value = resolve(source);\n if (typeof mapper === 'function') return mapper(value);\n if (typeof mapper === 'string') return value ? mapper : '';\n return value;\n }\n if (typeof part === 'function') return part();\n return resolve(part);\n}\n\nexport function concat(...input) {\n const normalized = normalizeParts(input);\n const { parts, options } = extractOptions(normalized);\n const targets = [];\n for (const part of parts) collectTargets(part, targets);\n const build = () => {\n const values = parts.map(resolvePart).map((value) => (value == null ? '' : String(value)));\n const filtered = options.filterFalsy ? values.filter(Boolean) : values;\n return filtered.join(options.separator);\n };\n if (!targets.length) return build();\n return after(targets).compute(build);\n}\n", "import { isState, isStatePath, readState, setStateValue } from './state.js';\nimport { after } from './observe.js';\n\nfunction isStoreLike(value) {\n return (\n !!value &&\n typeof value === 'object' &&\n typeof value.getState === 'function' &&\n typeof value.setState === 'function' &&\n typeof value.subscribe === 'function'\n );\n}\n\nfunction isStateLike(value) {\n return isState(value) || isStatePath(value);\n}\n\nfunction getAtPath(obj, path) {\n let cur = obj;\n for (const key of path) {\n if (!cur) return undefined;\n cur = cur[key];\n }\n return cur;\n}\n\nfunction setAtPath(obj, path, value) {\n if (!path.length) return value;\n const root = Array.isArray(obj) ? obj.slice() : { ...(obj || {}) };\n let cur = root;\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n const next = cur[key];\n const cloned = Array.isArray(next) ? next.slice() : { ...(next || {}) };\n cur[key] = cloned;\n cur = cloned;\n }\n cur[path[path.length - 1]] = value;\n return root;\n}\n\nfunction normalizePaths(paths) {\n if (!paths || !paths.length) return null;\n return paths.map((p) => String(p).split('.').map((s) => s.trim()).filter(Boolean));\n}\n\nfunction pickPaths(value, pathList) {\n if (!pathList) return value;\n let next = value;\n for (const path of pathList) {\n const v = getAtPath(value, path);\n next = setAtPath(next, path, v);\n }\n return next;\n}\n\nfunction defaultSerialize(value) {\n return JSON.stringify(value, (_key, v) => {\n if (typeof v === 'function') return undefined;\n if (typeof v === 'symbol') return undefined;\n return v;\n });\n}\n\nfunction defaultDeserialize(text) {\n return JSON.parse(text);\n}\n\nfunction readSnapshot(target, pathList) {\n if (isStateLike(target)) return pickPaths(readState(target), pathList);\n if (isStoreLike(target)) return pickPaths(target.getState(), pathList);\n throw new Error('persist(target): unsupported target');\n}\n\nfunction applySnapshot(target, snapshot) {\n if (isStateLike(target)) {\n setStateValue(target, snapshot);\n return;\n }\n if (isStoreLike(target)) {\n target.setState(snapshot, true);\n return;\n }\n throw new Error('persist(target): unsupported target');\n}\n\nfunction subscribeChanges(target, fn) {\n if (isStateLike(target)) return after(target).change(fn);\n if (isStoreLike(target)) return target.subscribe(fn);\n throw new Error('persist(target): unsupported target');\n}\n\nfunction safeStorage(storage) {\n try {\n if (!storage || typeof storage.getItem !== 'function') return null;\n return storage;\n } catch {\n return null;\n }\n}\n\nexport function persist(target, options = {}) {\n const key = options.key;\n if (!key) throw new Error('persist(target): options.key is required');\n\n const storage = safeStorage(options.storage ?? (typeof localStorage !== 'undefined' ? localStorage : null));\n const pathList = normalizePaths(options.paths);\n const serialize = options.serialize || defaultSerialize;\n const deserialize = options.deserialize || defaultDeserialize;\n const version = options.version ?? 1;\n const migrate = options.migrate || null;\n const reconcile = options.reconcile || null;\n const throttleMs = Math.max(0, options.throttle ?? 0);\n\n if (storage) {\n const raw = storage.getItem(key);\n if (raw != null) {\n let payload = null;\n try {\n payload = deserialize(raw);\n } catch {\n payload = null;\n }\n if (payload != null) {\n let data = payload;\n let v = null;\n if (payload && typeof payload === 'object' && 'data' in payload && 'v' in payload) {\n data = payload.data;\n v = payload.v;\n }\n if (v != null && v !== version && typeof migrate === 'function') {\n data = migrate(data, v);\n }\n if (typeof reconcile === 'function') {\n data = reconcile(data);\n }\n if (data !== undefined) {\n applySnapshot(target, data);\n }\n }\n }\n }\n\n let scheduled = false;\n let lastTimer = null;\n\n const write = () => {\n scheduled = false;\n const snapshot = readSnapshot(target, pathList);\n const payload = { v: version, data: snapshot };\n try {\n storage?.setItem?.(key, serialize(payload));\n } catch {\n return;\n }\n };\n\n const scheduleWrite = () => {\n if (!storage) return;\n if (throttleMs <= 0) {\n write();\n return;\n }\n if (scheduled) return;\n scheduled = true;\n lastTimer = setTimeout(write, throttleMs);\n };\n\n const unsubscribe = subscribeChanges(target, scheduleWrite);\n\n Object.defineProperty(target, 'persistDispose', {\n value: () => {\n if (lastTimer) clearTimeout(lastTimer);\n if (typeof unsubscribe === 'function') unsubscribe();\n },\n enumerable: false,\n });\n\n return target;\n}\n", "import { state } from '../reactivity/state.js';\nimport { after } from '../reactivity/observe.js';\n\nfunction isObject(value) {\n return value !== null && typeof value === 'object';\n}\n\nfunction cloneValue(value) {\n if (!isObject(value)) return value;\n if (Array.isArray(value)) return value.map(cloneValue);\n const out = {};\n for (const [k, v] of Object.entries(value)) {\n out[k] = cloneValue(v);\n }\n return out;\n}\n\nfunction deepEqual(a, b) {\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (!isObject(a) || !isObject(b)) return false;\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n if (Array.isArray(a)) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i])) return false;\n }\n return true;\n }\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n for (const k of aKeys) {\n if (!Object.prototype.hasOwnProperty.call(b, k)) return false;\n if (!deepEqual(a[k], b[k])) return false;\n }\n return true;\n}\n\nfunction mergeErrors(target, value) {\n if (value == null || value === true) return target;\n if (value === false) {\n target._form = true;\n return target;\n }\n if (typeof value === 'string') {\n target._form = value;\n return target;\n }\n if (isObject(value)) {\n for (const [k, v] of Object.entries(value)) {\n target[k] = v;\n }\n return target;\n }\n return target;\n}\n\nexport function form(initial) {\n const initialSnapshot = cloneValue(initial);\n const values = state(cloneValue(initial));\n const meta = state({});\n const errors = state({});\n const touched = state({});\n const dirty = state(false);\n const validators = new Set();\n\n let runId = 0;\n\n const runValidators = () => {\n const current = ++runId;\n const nextErrors = {};\n const snapshot = values.get();\n const tasks = [];\n\n for (const validator of validators) {\n try {\n const result = validator(snapshot);\n if (result && typeof result.then === 'function') {\n tasks.push(\n result.then((value) => {\n mergeErrors(nextErrors, value);\n })\n );\n } else {\n mergeErrors(nextErrors, result);\n }\n } catch (err) {\n mergeErrors(nextErrors, err?.message || true);\n }\n }\n\n if (tasks.length) {\n Promise.all(tasks).then(() => {\n if (current !== runId) return;\n errors.set(nextErrors);\n });\n return;\n }\n\n errors.set(nextErrors);\n };\n\n after(values).change(() => {\n const isDirty = !deepEqual(values.get(), initialSnapshot);\n if (dirty.get() !== isDirty) dirty.set(isDirty);\n if (validators.size) runValidators();\n });\n\n const reset = () => {\n values.set(cloneValue(initialSnapshot));\n touched.set({});\n errors.set({});\n dirty.set(false);\n meta.set({});\n };\n\n return {\n values,\n meta,\n errors,\n touched,\n dirty,\n validators,\n reset,\n };\n}\n", "/**\n * Creates a comment node used as a stable DOM anchor.\n * @param {string} label\n * @param {string} name\n */\nexport function createComment(label, name) {\n return document.createComment(`${label}:${name}`);\n}\n\n/**\n * Removes all sibling nodes between two anchors.\n * @param {Comment} start\n * @param {Comment} end\n * @param {(node: Node) => void} [disposer]\n */\nexport function clearBetween(start, end, disposer) {\n let current = start.nextSibling;\n while (current && current !== end) {\n const next = current.nextSibling;\n disposer?.(current);\n current.remove();\n current = next;\n }\n}\n\n", "import { Renderable } from '../renderable/renderable.js';\nimport { Renderer } from '../renderable/renderer.js';\nimport { isObservableArray } from '../collections/observable-array.js';\nimport { createComment, clearBetween } from './dom.js';\nimport { signal, setSignal, isSignal, readSignal, subscribeSignal } from '../reactivity/signal.js';\nimport { state, isState, isStatePath, readState, subscribeState } from '../reactivity/state.js';\n\nexport class ListNode extends Renderable {\n #items;\n #renderItem;\n #start = null;\n #end = null;\n #mounted = false;\n #unsub = null;\n #itemRefs = [];\n\n constructor(items, renderItem) {\n super();\n this.#items = items;\n this.#renderItem = renderItem;\n }\n\n mountInto(parent, beforeNode) {\n if (this.#mounted) return;\n this.#mounted = true;\n this.#start = createComment('zb:list:start', 'list');\n this.#end = createComment('zb:list:end', 'list');\n parent.insertBefore(this.#start, beforeNode);\n parent.insertBefore(this.#end, beforeNode);\n\n const initial = this.#readItems();\n this.#mountAll(initial);\n this.#wire();\n }\n\n unmount() {\n if (!this.#mounted) return;\n this.#mounted = false;\n if (this.#unsub) this.#unsub();\n this.#unsub = null;\n this.#cleanup();\n if (this.#start && this.#end) {\n clearBetween(this.#start, this.#end);\n this.#start.remove();\n this.#end.remove();\n }\n this.#start = null;\n this.#end = null;\n }\n\n renderToString(render) {\n const items = this.#readItems();\n return items.map((item, index) => {\n const itemState = state(item);\n const indexSignal = signal(index);\n return render(this.#renderItem(itemState, indexSignal));\n }).join('');\n }\n\n #readItems() {\n if (isObservableArray(this.#items)) return this.#items;\n if (isSignal(this.#items)) return readSignal(this.#items) || [];\n if (isState(this.#items) || isStatePath(this.#items)) return readState(this.#items) || [];\n return Array.isArray(this.#items) ? this.#items : [];\n }\n\n #wire() {\n if (isObservableArray(this.#items)) {\n this.#unsub = this.#items.subscribe((patch) => {\n if (!this.#mounted) return;\n if (patch.type === 'reset') {\n this.#reset(patch.items);\n return;\n }\n if (patch.type === 'insert') {\n for (let i = 0; i < patch.items.length; i++) {\n this.#insert(patch.index + i, patch.items[i]);\n }\n this.#updateIndices(patch.index + patch.items.length);\n return;\n }\n if (patch.type === 'remove') {\n this.#remove(patch.index, patch.count);\n this.#updateIndices(patch.index);\n return;\n }\n if (patch.type === 'set') {\n this.#set(patch.index, patch.value);\n }\n });\n return;\n }\n\n if (isSignal(this.#items)) {\n this.#unsub = subscribeSignal(this.#items, () => {\n this.#reset(this.#readItems());\n });\n return;\n }\n\n if (isState(this.#items) || isStatePath(this.#items)) {\n this.#unsub = subscribeState(this.#items, () => {\n this.#reset(this.#readItems());\n });\n }\n }\n\n #mountAll(items) {\n this.#itemRefs = [];\n for (let i = 0; i < items.length; i++) {\n this.#insert(i, items[i]);\n }\n }\n\n #cleanup() {\n for (const it of this.#itemRefs) {\n for (const r of it.values) Renderer.unmount(r);\n clearBetween(it.start, it.end);\n it.start.remove();\n it.end.remove();\n }\n this.#itemRefs = [];\n }\n\n #reset(items) {\n this.#cleanup();\n this.#mountAll(items);\n }\n\n #insert(index, item) {\n const refNode = index < this.#itemRefs.length ? this.#itemRefs[index].start : this.#end;\n const itemStart = createComment('zb:item:start', 'item');\n const itemEnd = createComment('zb:item:end', 'item');\n const parent = this.#end.parentNode;\n parent.insertBefore(itemStart, refNode);\n parent.insertBefore(itemEnd, refNode);\n const itemState = state(item);\n const indexSignal = signal(index);\n const rendered = this.#renderItem ? this.#renderItem(itemState, indexSignal) : item;\n const values = Renderer.normalize(rendered);\n for (const r of values) this.#mountRenderable(parent, r, itemEnd);\n this.#itemRefs.splice(index, 0, { start: itemStart, end: itemEnd, values, state: itemState, index: indexSignal });\n }\n\n #remove(index, count) {\n const removed = this.#itemRefs.splice(index, count);\n for (const it of removed) {\n for (const r of it.values) Renderer.unmount(r);\n clearBetween(it.start, it.end);\n it.start.remove();\n it.end.remove();\n }\n }\n\n #set(index, item) {\n const ref = this.#itemRefs[index];\n if (ref && ref.state) {\n ref.state.set(item);\n return;\n }\n this.#remove(index, 1);\n this.#insert(index, item);\n }\n\n #updateIndices(fromIndex) {\n for (let i = fromIndex; i < this.#itemRefs.length; i++) {\n const ref = this.#itemRefs[i];\n if (ref.index) setSignal(ref.index, i);\n }\n }\n\n #mountRenderable(parent, renderable, beforeNode) {\n if (Renderer.isRenderable(renderable)) {\n renderable.mountInto(parent, beforeNode);\n return;\n }\n if (Renderer.isDomNode(renderable)) {\n parent.insertBefore(renderable, beforeNode);\n }\n }\n}\n\nexport function list(items, renderItem) {\n return new ListNode(items, renderItem);\n}\n", "import { Renderable } from '../renderable/renderable.js';\nimport { Renderer } from '../renderable/renderer.js';\nimport { createComment, clearBetween } from './dom.js';\nimport { isState, isStatePath, readState, subscribeState } from '../reactivity/state.js';\nimport { isSignal, readSignal, subscribeSignal } from '../reactivity/signal.js';\n\nconst WHEN = Symbol('zb.when');\n\nfunction isValidAttributeValue(value) {\n if (value == null) return true;\n const type = typeof value;\n if (type === 'string' || type === 'number' || type === 'boolean') return true;\n if (type === 'object' && !Array.isArray(value)) return true;\n return false;\n}\n\nexport class WhenNode extends Renderable {\n #source;\n #renderTrue;\n #renderFalse;\n #start = null;\n #end = null;\n #mounted = false;\n #unsub = null;\n #mountedValues = [];\n\n constructor(source, renderTrue, renderFalse) {\n super();\n this.#source = source;\n this.#renderTrue = renderTrue;\n this.#renderFalse = renderFalse;\n Object.defineProperty(this, WHEN, { value: true });\n }\n\n mountInto(parent, beforeNode) {\n if (this.#mounted) return;\n this.#mounted = true;\n this.#start = createComment('zb:when:start', 'when');\n this.#end = createComment('zb:when:end', 'when');\n parent.insertBefore(this.#start, beforeNode);\n parent.insertBefore(this.#end, beforeNode);\n\n this.#update();\n this.#wire();\n }\n\n unmount() {\n if (!this.#mounted) return;\n this.#mounted = false;\n if (this.#unsub) this.#unsub();\n this.#unsub = null;\n this.#cleanup();\n if (this.#start && this.#end) {\n clearBetween(this.#start, this.#end);\n this.#start.remove();\n this.#end.remove();\n }\n this.#start = null;\n this.#end = null;\n }\n\n #wire() {\n if (isState(this.#source) || isStatePath(this.#source)) {\n this.#unsub = subscribeState(this.#source, () => this.#update());\n return;\n }\n if (isSignal(this.#source)) {\n this.#unsub = subscribeSignal(this.#source, () => this.#update());\n }\n }\n\n #read() {\n if (isState(this.#source) || isStatePath(this.#source)) return !!readState(this.#source);\n if (isSignal(this.#source)) return !!readSignal(this.#source);\n return !!this.#source;\n }\n\n readValue() {\n const predicate = this.#read();\n const value = predicate ? this.#renderTrue() : this.#renderFalse?.();\n if (Renderer.isRenderable(value) || Renderer.isDomNode(value)) return undefined;\n if (!isValidAttributeValue(value)) return undefined;\n return value;\n }\n\n subscribeValue(fn) {\n if (isState(this.#source) || isStatePath(this.#source)) {\n return subscribeState(this.#source, () => fn(this.readValue()));\n }\n if (isSignal(this.#source)) {\n return subscribeSignal(this.#source, () => fn(this.readValue()));\n }\n return null;\n }\n\n #cleanup() {\n for (const r of this.#mountedValues) Renderer.unmount(r);\n this.#mountedValues = [];\n if (this.#start && this.#end) clearBetween(this.#start, this.#end);\n }\n\n #update() {\n this.#cleanup();\n const predicate = this.#read();\n const value = predicate ? this.#renderTrue() : this.#renderFalse?.();\n const values = Renderer.normalize(value);\n this.#mountedValues = values;\n for (const r of values) {\n if (Renderer.isRenderable(r)) {\n r.mountInto(this.#end.parentNode, this.#end);\n } else if (Renderer.isDomNode(r)) {\n this.#end.parentNode.insertBefore(r, this.#end);\n }\n }\n }\n\n renderToString(render) {\n const predicate = this.#read();\n const value = predicate ? this.#renderTrue() : this.#renderFalse?.();\n return render(value);\n }\n}\n\nexport function when(source, renderTrue, renderFalse) {\n return new WhenNode(source, renderTrue, renderFalse);\n}\n\nexport function isWhen(value) {\n return !!value && value[WHEN] === true;\n}\n\nexport function readWhenValue(value) {\n return value?.readValue?.();\n}\n\nexport function subscribeWhenValue(value, fn) {\n return value?.subscribeValue?.(fn);\n}\n", "import { Renderable } from '../renderable/renderable.js';\nimport { Renderer } from '../renderable/renderer.js';\nimport { createComment, clearBetween } from './dom.js';\n\nexport class ErrorBoundaryNode extends Renderable {\n #fallback;\n #onError;\n #child;\n #start = null;\n #end = null;\n #mounted = false;\n #mountedValues = [];\n\n constructor(options, child) {\n super();\n this.#fallback = options?.fallback ?? null;\n this.#onError = options?.onError ?? null;\n this.#child = child;\n }\n\n mountInto(parent, beforeNode) {\n if (this.#mounted) return;\n this.#mounted = true;\n this.#start = createComment('zb:error:start', 'error');\n this.#end = createComment('zb:error:end', 'error');\n parent.insertBefore(this.#start, beforeNode);\n parent.insertBefore(this.#end, beforeNode);\n this.#renderSafe();\n }\n\n unmount() {\n if (!this.#mounted) return;\n this.#mounted = false;\n this.#cleanup();\n if (this.#start && this.#end) {\n clearBetween(this.#start, this.#end);\n this.#start.remove();\n this.#end.remove();\n }\n this.#start = null;\n this.#end = null;\n }\n\n #cleanup() {\n for (const r of this.#mountedValues) Renderer.unmount(r);\n this.#mountedValues = [];\n if (this.#start && this.#end) clearBetween(this.#start, this.#end);\n }\n\n #renderValue(value) {\n const values = Renderer.normalize(value);\n this.#mountedValues = values;\n for (const r of values) {\n if (Renderer.isRenderable(r)) {\n r.mountInto(this.#end.parentNode, this.#end);\n } else if (Renderer.isDomNode(r)) {\n this.#end.parentNode.insertBefore(r, this.#end);\n }\n }\n }\n\n #renderSafe() {\n this.#cleanup();\n try {\n const value = typeof this.#child === 'function' ? this.#child() : this.#child;\n this.#renderValue(value);\n } catch (error) {\n this.#handleError(error);\n }\n }\n\n #handleError(error) {\n try {\n if (typeof this.#onError === 'function') {\n this.#onError(error, { phase: 'render' });\n }\n } catch {\n // ignore errors from onError\n }\n try {\n if (this.#fallback) {\n const value = typeof this.#fallback === 'function' ? this.#fallback(error) : this.#fallback;\n this.#renderValue(value);\n }\n } catch {\n // ignore errors from fallback\n }\n }\n\n renderToString(render) {\n try {\n const value = typeof this.#child === 'function' ? this.#child() : this.#child;\n return render(value);\n } catch (error) {\n if (typeof this.#onError === 'function') {\n try {\n this.#onError(error, { phase: 'render' });\n } catch {}\n }\n if (this.#fallback) {\n const fallback = typeof this.#fallback === 'function' ? this.#fallback(error) : this.#fallback;\n return render(fallback);\n }\n return '';\n }\n }\n}\n\nexport function ErrorBoundary(options, child) {\n return new ErrorBoundaryNode(options, child);\n}\n", "import { Renderable } from '../renderable/renderable.js';\nimport { Renderer } from '../renderable/renderer.js';\nimport { isObservableArray } from '../collections/observable-array.js';\nimport { isSignal, readSignal, subscribeSignal } from '../reactivity/signal.js';\nimport { isState, isStatePath, readState, subscribeState } from '../reactivity/state.js';\n\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction isNumber(value) {\n return typeof value === 'number' && !Number.isNaN(value);\n}\n\nexport class VirtualListNode extends Renderable {\n #items;\n #renderItem;\n #direction;\n #overscan;\n #itemSize;\n #container = null;\n #spacer = null;\n #itemsEl = null;\n #mounted = false;\n #unsub = null;\n #resizeObserver = null;\n #viewportSize = 0;\n #startIndex = 0;\n #endIndex = -1;\n #mountedValues = [];\n #measuring = false;\n\n constructor(items, options = {}) {\n super();\n this.#items = items;\n this.#renderItem = options.render;\n this.#direction = options.direction === 'horizontal' ? 'horizontal' : 'vertical';\n this.#overscan = isNumber(options.overscan) ? Math.max(0, options.overscan) : 2;\n this.#itemSize = isNumber(options.itemSize) ? options.itemSize : null;\n }\n\n mountInto(parent, beforeNode) {\n if (this.#mounted) return;\n if (typeof this.#renderItem !== 'function') {\n throw new Error('virtualList(items, options): options.render is required');\n }\n this.#mounted = true;\n\n const container = document.createElement('div');\n container.style.position = 'relative';\n container.style.overflow = 'auto';\n container.style.width = '100%';\n container.style.height = '100%';\n container.style.contain = 'layout paint';\n\n const spacer = document.createElement('div');\n spacer.style.position = 'relative';\n spacer.style.width = this.#direction === 'horizontal' ? '0px' : '100%';\n spacer.style.height = this.#direction === 'horizontal' ? '100%' : '0px';\n\n const itemsEl = document.createElement('div');\n itemsEl.style.position = 'absolute';\n itemsEl.style.top = '0';\n itemsEl.style.left = '0';\n itemsEl.style.willChange = 'transform';\n if (this.#direction === 'horizontal') {\n itemsEl.style.display = 'flex';\n itemsEl.style.flexDirection = 'row';\n }\n\n container.appendChild(spacer);\n container.appendChild(itemsEl);\n parent.insertBefore(container, beforeNode);\n\n this.#container = container;\n this.#spacer = spacer;\n this.#itemsEl = itemsEl;\n\n container.addEventListener('scroll', this.#onScroll);\n this.#observeResize(parent);\n this.#updateViewport(parent);\n this.#render();\n this.#wire();\n }\n\n unmount() {\n if (!this.#mounted) return;\n this.#mounted = false;\n if (this.#unsub) this.#unsub();\n this.#unsub = null;\n if (this.#container) {\n this.#container.removeEventListener('scroll', this.#onScroll);\n }\n if (this.#resizeObserver) {\n this.#resizeObserver.disconnect();\n this.#resizeObserver = null;\n }\n this.#cleanup();\n this.#container?.remove();\n this.#container = null;\n this.#spacer = null;\n this.#itemsEl = null;\n }\n\n #readItems() {\n if (isObservableArray(this.#items)) return this.#items;\n if (isSignal(this.#items)) return readSignal(this.#items) || [];\n if (isState(this.#items) || isStatePath(this.#items)) return readState(this.#items) || [];\n return Array.isArray(this.#items) ? this.#items : [];\n }\n\n #wire() {\n if (isObservableArray(this.#items)) {\n this.#unsub = this.#items.subscribe(() => this.#render());\n return;\n }\n if (isSignal(this.#items)) {\n this.#unsub = subscribeSignal(this.#items, () => this.#render());\n return;\n }\n if (isState(this.#items) || isStatePath(this.#items)) {\n this.#unsub = subscribeState(this.#items, () => this.#render());\n }\n }\n\n #observeResize(parent) {\n if (typeof ResizeObserver === 'undefined') return;\n this.#resizeObserver = new ResizeObserver(() => {\n this.#updateViewport(parent);\n this.#render();\n });\n this.#resizeObserver.observe(parent);\n }\n\n #updateViewport(parent) {\n const rect = parent?.getBoundingClientRect?.();\n if (!rect) return;\n this.#viewportSize = this.#direction === 'horizontal' ? rect.width : rect.height;\n }\n\n #measureItemSize() {\n if (this.#itemSize != null) return;\n if (!this.#itemsEl) return;\n const first = this.#itemsEl.firstElementChild;\n if (!first) return;\n const rect = first.getBoundingClientRect();\n const size = this.#direction === 'horizontal' ? rect.width : rect.height;\n if (isNumber(size) && size > 0) this.#itemSize = size;\n }\n\n #cleanup() {\n for (const r of this.#mountedValues) Renderer.unmount(r);\n this.#mountedValues = [];\n if (this.#itemsEl) this.#itemsEl.replaceChildren();\n }\n\n #renderRange(items, start, end, offset) {\n if (!this.#itemsEl) return;\n this.#cleanup();\n const slice = items.slice(start, end + 1);\n const values = [];\n for (let i = 0; i < slice.length; i++) {\n const index = start + i;\n const value = this.#renderItem(slice[i], index);\n const normalized = Renderer.normalize(value);\n for (const r of normalized) values.push(r);\n }\n this.#mountedValues = values;\n for (const r of values) {\n if (Renderer.isRenderable(r)) {\n r.mountInto(this.#itemsEl, null);\n } else if (Renderer.isDomNode(r)) {\n this.#itemsEl.appendChild(r);\n }\n }\n if (this.#direction === 'horizontal') {\n this.#itemsEl.style.transform = `translateX(${offset}px)`;\n } else {\n this.#itemsEl.style.transform = `translateY(${offset}px)`;\n }\n }\n\n #render() {\n if (!this.#mounted || !this.#container) return;\n const items = this.#readItems();\n const count = items.length;\n if (!this.#spacer) return;\n\n if (count === 0) {\n this.#spacer.style.width = this.#direction === 'horizontal' ? '0px' : '100%';\n this.#spacer.style.height = this.#direction === 'horizontal' ? '100%' : '0px';\n this.#cleanup();\n return;\n }\n\n if (this.#itemSize == null && !this.#measuring) {\n this.#measuring = true;\n this.#renderRange(items, 0, 0, 0);\n requestAnimationFrame(() => {\n this.#measureItemSize();\n this.#measuring = false;\n this.#render();\n });\n return;\n }\n\n const size = this.#itemSize || 1;\n const viewport = this.#viewportSize || (this.#direction === 'horizontal' ? this.#container.clientWidth : this.#container.clientHeight);\n const scrollPos = this.#direction === 'horizontal' ? this.#container.scrollLeft : this.#container.scrollTop;\n const visibleCount = Math.ceil(viewport / size);\n const start = clamp(Math.floor(scrollPos / size) - this.#overscan, 0, Math.max(0, count - 1));\n const end = clamp(start + visibleCount + this.#overscan * 2 - 1, 0, count - 1);\n const offset = start * size;\n\n const total = count * size;\n if (this.#direction === 'horizontal') {\n this.#spacer.style.width = `${total}px`;\n this.#spacer.style.height = '100%';\n } else {\n this.#spacer.style.height = `${total}px`;\n this.#spacer.style.width = '100%';\n }\n\n if (start === this.#startIndex && end === this.#endIndex) return;\n this.#startIndex = start;\n this.#endIndex = end;\n this.#renderRange(items, start, end, offset);\n }\n\n #onScroll = () => {\n this.#render();\n };\n\n renderToString(render) {\n const items = this.#readItems();\n return items.map((item, index) => render(this.#renderItem(item, index))).join('');\n }\n}\n\nexport function virtualList(items, options) {\n return new VirtualListNode(items, options);\n}\n", "import { Renderable } from '../renderable/renderable.js';\nimport { Renderer } from '../renderable/renderer.js';\n\nfunction resolveTarget(target) {\n if (!target && typeof document !== 'undefined') return document.body;\n if (typeof target === 'string') return document.querySelector(target);\n return target;\n}\n\nexport class PortalNode extends Renderable {\n #target;\n #content;\n #mounted = false;\n #mountedValues = [];\n\n constructor(target, content) {\n super();\n this.#target = target;\n this.#content = content;\n }\n\n mountInto(_parent, _beforeNode) {\n if (this.#mounted) return;\n this.#mounted = true;\n const targetEl = resolveTarget(this.#target);\n if (!targetEl) throw new Error('portal: target not found');\n const value = typeof this.#content === 'function' ? this.#content() : this.#content;\n const values = Renderer.normalize(value);\n this.#mountedValues = values;\n for (const r of values) {\n if (Renderer.isRenderable(r)) {\n r.mountInto(targetEl, null);\n } else if (Renderer.isDomNode(r)) {\n targetEl.appendChild(r);\n }\n }\n }\n\n unmount() {\n if (!this.#mounted) return;\n this.#mounted = false;\n for (const r of this.#mountedValues) Renderer.unmount(r);\n this.#mountedValues = [];\n }\n\n renderToString(render) {\n const value = typeof this.#content === 'function' ? this.#content() : this.#content;\n return render(value);\n }\n}\n\nexport function portal(target, content) {\n if (content === undefined) {\n return new PortalNode(null, target);\n }\n return new PortalNode(target, content);\n}\n", "import { EventHub } from '../events/event-hub.js';\nimport { state } from '../reactivity/state.js';\n\nfunction defaultSerialize(value) {\n if (typeof value === 'string') return value;\n if (value instanceof ArrayBuffer) return value;\n if (value instanceof Blob) return value;\n return JSON.stringify(value);\n}\n\nfunction defaultParse(value) {\n return value;\n}\n\nfunction defaultDelay(attempt) {\n return Math.min(1000 * Math.pow(2, Math.max(0, attempt - 1)), 10_000);\n}\n\nexport class WebSocketClient {\n #url;\n #protocols;\n #ws = null;\n #events = new EventHub();\n #state;\n #manualClose = false;\n #reconnectTimer = null;\n #serialize;\n #parse;\n #reconnect;\n #maxRetries;\n #delay;\n\n constructor(options = {}) {\n this.#url = options.url;\n this.#protocols = options.protocols;\n this.#serialize = typeof options.serialize === 'function' ? options.serialize : defaultSerialize;\n this.#parse = typeof options.parse === 'function' ? options.parse : defaultParse;\n this.#reconnect = options.reconnect ?? true;\n this.#maxRetries = options.maxRetries ?? Infinity;\n this.#delay = typeof options.reconnectDelay === 'function' ? options.reconnectDelay : defaultDelay;\n\n this.#state = state({\n status: 'idle',\n connected: false,\n reconnecting: false,\n attempts: 0,\n lastMessage: null,\n lastError: null,\n });\n\n if (options.autoConnect ?? true) {\n this.connect();\n }\n }\n\n state() {\n return this.#state;\n }\n\n before() {\n return this.#events.phase('before');\n }\n\n after() {\n return this.#events.phase('after');\n }\n\n setUrl(next) {\n this.#url = next;\n }\n\n connect() {\n if (!this.#url) throw new Error('WebSocketClient.connect: url is required');\n if (this.#ws && (this.#ws.readyState === WebSocket.OPEN || this.#ws.readyState === WebSocket.CONNECTING)) {\n return;\n }\n this.#clearReconnect();\n this.#manualClose = false;\n this.#state.set().status = 'connecting';\n this.#state.set().reconnecting = false;\n\n const ws = new WebSocket(this.#url, this.#protocols);\n this.#ws = ws;\n\n ws.addEventListener('open', (event) => {\n this.#state.set().status = 'open';\n this.#state.set().connected = true;\n this.#state.set().reconnecting = false;\n this.#state.set().attempts = 0;\n this.#events.emitAfter('open', { event }, { client: this });\n });\n\n ws.addEventListener('message', (event) => {\n let data = event.data;\n try {\n data = this.#parse(data);\n } catch (err) {\n this.#state.set().lastError = err;\n this.#events.emitAfter('error', { error: err }, { client: this });\n return;\n }\n const payload = { data, raw: event.data };\n const ok = this.#events.emitBefore('message', payload, { client: this });\n if (!ok) return;\n this.#state.set().lastMessage = data;\n this.#events.emitAfter('message', payload, { client: this });\n });\n\n ws.addEventListener('error', (event) => {\n this.#state.set().lastError = event;\n this.#events.emitAfter('error', { error: event }, { client: this });\n });\n\n ws.addEventListener('close', (event) => {\n this.#state.set().status = 'closed';\n this.#state.set().connected = false;\n this.#events.emitAfter('close', { event }, { client: this });\n if (this.#manualClose) return;\n if (!this.#reconnect) return;\n this.#scheduleReconnect();\n });\n }\n\n send(value) {\n if (!this.#ws || this.#ws.readyState !== WebSocket.OPEN) {\n throw new Error('WebSocketClient.send: socket is not open');\n }\n const payload = { data: value };\n const ok = this.#events.emitBefore('send', payload, { client: this });\n if (!ok) return;\n const raw = this.#serialize(value);\n this.#ws.send(raw);\n this.#events.emitAfter('send', { data: value, raw }, { client: this });\n }\n\n close(code, reason) {\n this.#manualClose = true;\n this.#clearReconnect();\n this.#ws?.close(code, reason);\n }\n\n #scheduleReconnect() {\n if (this.#reconnectTimer) return;\n const attempts = this.#state.get().attempts + 1;\n if (attempts > this.#maxRetries) return;\n this.#state.set().attempts = attempts;\n this.#state.set().reconnecting = true;\n const delay = Math.max(0, this.#delay(attempts));\n this.#events.emitAfter('reconnect', { attempt: attempts, delay }, { client: this });\n this.#reconnectTimer = setTimeout(() => {\n this.#reconnectTimer = null;\n this.connect();\n }, delay);\n }\n\n #clearReconnect() {\n if (!this.#reconnectTimer) return;\n clearTimeout(this.#reconnectTimer);\n this.#reconnectTimer = null;\n }\n}\n\nexport function createWebSocket(options) {\n return new WebSocketClient(options);\n}\n", "const tokenMatchers = {\n d: (char) => /[0-9]/.test(char),\n a: (char) => /[A-Za-z]/.test(char),\n '*': (char) => /[A-Za-z0-9]/.test(char),\n s: (char) => /[^A-Za-z0-9]/.test(char),\n};\n\nconst isToken = (char) => Object.prototype.hasOwnProperty.call(tokenMatchers, char);\n\nfunction collectPatternValues(input, pattern) {\n const values = [];\n let patternIndex = 0;\n for (const char of input) {\n while (patternIndex < pattern.length && !isToken(pattern[patternIndex])) {\n patternIndex += 1;\n }\n if (patternIndex >= pattern.length) break;\n const token = pattern[patternIndex];\n if (tokenMatchers[token]?.(char)) {\n values.push(char);\n patternIndex += 1;\n }\n }\n return values;\n}\n\nfunction applyPattern(input, pattern) {\n const values = collectPatternValues(input, pattern);\n let visual = '';\n let valueIndex = 0;\n for (let i = 0; i < pattern.length; i += 1) {\n const char = pattern[i];\n if (isToken(char)) {\n if (valueIndex >= values.length) break;\n visual += values[valueIndex];\n valueIndex += 1;\n continue;\n }\n if (valueIndex === 0) continue;\n if (valueIndex < values.length) visual += char;\n }\n return { raw: values.join(''), visual };\n}\n\nexport function normalizeInputFormat(format) {\n if (format == null) return null;\n if (typeof format === 'function') return { format, mode: 'both' };\n if (typeof format === 'string') return { pattern: format, mode: 'both' };\n if (typeof format === 'object') return { mode: 'both', ...format };\n return null;\n}\n\nexport function applyInputFormat(inputValue, format) {\n const normalized = normalizeInputFormat(format);\n const rawInput = String(inputValue ?? '');\n if (!normalized) {\n return { value: rawInput, visual: rawInput, raw: rawInput };\n }\n if (typeof normalized.format === 'function') {\n let formatted = rawInput;\n try {\n formatted = normalized.format(rawInput);\n } catch {}\n if (formatted && typeof formatted === 'object') {\n const value = formatted.value ?? formatted.visual ?? '';\n const visual = formatted.visual ?? formatted.value ?? '';\n const raw = formatted.raw ?? value ?? '';\n return { value: String(value), visual: String(visual), raw: String(raw) };\n }\n return { value: String(formatted ?? ''), visual: String(formatted ?? ''), raw: String(formatted ?? '') };\n }\n if (normalized.pattern) {\n const { raw, visual } = applyPattern(rawInput, String(normalized.pattern));\n return { value: visual, visual, raw };\n }\n if (normalized.regex) {\n const match = rawInput.match(normalized.regex);\n const formatted = match ? match[0] : '';\n return { value: formatted, visual: formatted, raw: formatted };\n }\n return { value: rawInput, visual: rawInput, raw: rawInput };\n}\n", "import { Renderable } from '../renderable/renderable.js';\nimport { Renderer } from '../renderable/renderer.js';\nimport { isObservableArray } from '../collections/observable-array.js';\nimport { createComment, clearBetween } from './dom.js';\nimport { normalizeInputFormat, applyInputFormat } from './input-format.js';\nimport { isWhen, readWhenValue, subscribeWhenValue } from './when.js';\nimport { isSignal, readSignal, subscribeSignal, getMappedArrayMeta } from '../reactivity/signal.js';\nimport { isState, isStatePath, isComputed, readState, subscribeState, getMappedMeta, readStateMeta, subscribeStateMeta } from '../reactivity/state.js';\nimport { list } from './list.js';\n\nconst voidElements = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\nexport class ElementNode extends Renderable {\n tagName;\n props;\n children;\n #el = null;\n #unsubs = [];\n #styleUnsubs = [];\n #mounted = false;\n\n constructor(tagName, props = {}, children = []) {\n super();\n this.tagName = tagName;\n this.props = props || {};\n this.children = Array.isArray(children) ? children : [children];\n if (voidElements.has(tagName.toLowerCase())) this.children = [];\n }\n\n mountInto(parent, beforeNode) {\n if (this.#mounted) return;\n this.#mounted = true;\n const el = document.createElement(this.tagName);\n this.#el = el;\n this.#applyProps(el);\n this.#appendChildren(el);\n parent.insertBefore(el, beforeNode);\n }\n\n unmount() {\n if (!this.#mounted) return;\n this.#mounted = false;\n for (const unsub of this.#unsubs) unsub();\n this.#unsubs = [];\n this.#cleanupChildren();\n this.#el?.remove();\n this.#el = null;\n }\n\n renderToString(render) {\n const tag = this.tagName;\n const props = this.props || {};\n const lower = tag.toLowerCase();\n const attrParts = [];\n let innerHtml = null;\n let textContent = null;\n\n for (const [key, rawValue] of Object.entries(props)) {\n if (key === 'node') continue;\n if (key === 'children' || key === 'content') continue;\n if (key === 'format') continue;\n if (key.startsWith('on') && typeof rawValue === 'function') continue;\n let value = rawValue;\n if (isWhen(value)) value = readWhenValue(value);\n if (isSignal(value)) value = readSignal(value);\n if (isState(value) || isStatePath(value)) value = readState(value);\n\n if (key === 'style') {\n if (value && typeof value === 'object') {\n const styles = [];\n for (const [k, v] of Object.entries(value)) {\n if (v == null || v === false) continue;\n const name = k.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n styles.push(`${name}:${v}`);\n }\n if (styles.length) attrParts.push(`style=\"${styles.join(';')}\"`);\n } else if (typeof value === 'string') {\n attrParts.push(`style=\"${render.escape(value)}\"`);\n }\n continue;\n }\n if (key === 'className' || key === 'class') {\n if (value != null && value !== false) attrParts.push(`class=\"${render.escape(String(value))}\"`);\n continue;\n }\n if (key === 'htmlFor') {\n if (value != null && value !== false) attrParts.push(`for=\"${render.escape(String(value))}\"`);\n continue;\n }\n if (key === 'value' && lower === 'input' && props.format != null) {\n const resolvedFormat = isSignal(props.format)\n ? readSignal(props.format)\n : isState(props.format) || isStatePath(props.format)\n ? readState(props.format)\n : props.format;\n const formatConfig = normalizeInputFormat(resolvedFormat);\n const formatMode = formatConfig?.mode ?? 'both';\n const formatted = applyInputFormat(value ?? '', formatConfig);\n value =\n formatMode === 'value-only'\n ? (formatted.raw ?? formatted.value ?? '')\n : (formatted.visual ?? formatted.value ?? '');\n }\n if (key === 'textContent') {\n textContent = value == null ? '' : String(value);\n continue;\n }\n if (key === 'innerHTML') {\n innerHtml = value == null ? '' : String(value);\n continue;\n }\n if (value === true) {\n attrParts.push(`${key}`);\n continue;\n }\n if (value === false || value == null) {\n continue;\n }\n attrParts.push(`${key}=\"${render.escape(String(value))}\"`);\n }\n\n const attrs = attrParts.length ? ` ${attrParts.join(' ')}` : '';\n if (voidElements.has(lower)) {\n return `<${tag}${attrs}>`;\n }\n if (innerHtml != null) {\n return `<${tag}${attrs}>${innerHtml}</${tag}>`;\n }\n if (textContent != null) {\n return `<${tag}${attrs}>${render.escape(textContent)}</${tag}>`;\n }\n const children = Array.isArray(this.children) ? this.children : [this.children];\n const html = children.map((child) => render(child)).join('');\n return `<${tag}${attrs}>${html}</${tag}>`;\n }\n\n #cleanupChildren() {\n if (!this.#el) return;\n for (const child of Array.from(this.#el.childNodes)) child.remove();\n }\n\n #applyProps(el) {\n const props = this.props || {};\n const tagName = this.tagName.toLowerCase();\n let formatBound = false;\n let valueBound = false;\n\n const { formatConfig } = this.#getFormatConfig();\n\n for (const [key, rawValue] of Object.entries(props)) {\n if (key === 'value') valueBound = true;\n\n if (key === 'node') continue;\n if (key === 'children' || key === 'content') continue;\n if (key === 'format') continue;\n if (key === 'style') {\n this.#applyStyle(el, rawValue);\n continue;\n }\n const props = { el, key, rawValue, formatConfig };\n if (isWhen(rawValue)) {\n this.#applyPropAsWhen(props);\n continue;\n }\n if (isSignal(rawValue)) {\n if (key === 'value' && formatConfig) formatBound = true;\n this.#applyPropAsSignal(props);\n continue;\n }\n if (isState(rawValue) || isStatePath(rawValue)) {\n if (key === 'value' && formatConfig) formatBound = true;\n this.#applyPropAsState(props)\n continue;\n }\n if (key === 'value' && formatConfig) {\n const { visualValue } = this.#formatValue(rawValue);\n this.#setProp(el, key, visualValue);\n formatBound = true;\n continue;\n }\n if ((key === 'onInput' || key === 'onChange') && typeof rawValue === 'function' && formatConfig) {\n const handler = (ev) => {\n rawValue?.(ev, ev?.target?.rawValue);\n };\n this.#setProp(el, key, handler);\n continue;\n }\n if (key === 'onInput' && !formatBound) {\n const onInput = (ev) => {\n if (formatConfig) {\n this.#applyPropsBaseOnInputFormatted(ev);\n }\n rawValue?.(ev);\n };\n this.#setProp(el, key, onInput);\n continue;\n }\n this.#setProp(el, key, rawValue);\n }\n\n if (!valueBound && formatConfig) {\n const onInput = (ev) => {\n const { visualValue } = this.#applyPropsBaseOnInputFormatted({ target: el });\n this.#setProp(el, 'value', visualValue);\n }\n onInput()\n this.#applyPropsAddInputEventListeners(el, onInput, true);\n formatBound = true;\n }\n\n if (props.node && (isState(props.node) || isStatePath(props.node))) {\n props.node.set(this.#el);\n }\n\n if (formatConfig && !formatBound) {\n const onInput = (ev) => {\n this.#applyPropsBaseOnInputFormatted(ev);\n };\n this.#applyPropsAddInputEventListeners(el, onInput, true);\n }\n }\n #getFormatConfig() {\n const props = this.props || {};\n const tagName = this.tagName.toLowerCase();\n const resolveFormat = (value) => {\n if (isSignal(value)) return readSignal(value);\n if (isState(value) || isStatePath(value)) return readState(value);\n return value;\n };\n const formatConfig = tagName === 'input' ? normalizeInputFormat(resolveFormat(props.format)) : null;\n const formatMode = formatConfig?.mode ?? 'both';\n return { formatConfig, formatMode };\n }\n #formatValue(next) {\n const { formatConfig, formatMode } = this.#getFormatConfig();\n const formatted = applyInputFormat(next ?? '', formatConfig);\n const visualValue =\n formatMode === 'value-only'\n ? (formatted.raw ?? formatted.value ?? '')\n : (formatted.visual ?? formatted.value ?? '');\n const stateValue =\n formatMode === 'visual-only'\n ? (formatted.raw ?? formatted.value ?? '')\n : (formatted.value ?? formatted.visual ?? '');\n return { formatted, visualValue, stateValue };\n };\n\n #applyPropsBaseOnInputFormatted(ev) {\n const { formatted, visualValue, stateValue } = this.#formatValue(ev.target.value ?? '');\n const rawValue = formatted?.raw ?? stateValue;\n ev.target.value = visualValue;\n ev.target.rawValue = rawValue;\n return { visualValue, stateValue, rawValue };\n }\n #applyPropsAddInputEventListeners(el, onInput, capture) {\n el.addEventListener('input', onInput, capture);\n el.addEventListener('change', onInput, capture);\n this.#unsubs.push(() => {\n el.removeEventListener('input', onInput, capture);\n el.removeEventListener('change', onInput, capture);\n });\n }\n\n #applyPropsSubscribeUpdate({ key, el, rawValue, read, subscribe, formatConfig }) {\n const update = () => {\n const nextValue = read(rawValue);\n if (key === 'value' && formatConfig) {\n const { visualValue } = this.#formatValue(nextValue);\n this.#setProp(el, key, visualValue);\n return;\n }\n this.#setProp(el, key, nextValue);\n };\n update();\n const unsub = subscribe(rawValue, update);\n if (unsub) this.#unsubs.push(unsub);\n return update;\n }\n\n #applyPropAsWhen(props) {\n this.#applyPropsSubscribeUpdate({ ...props, read: readWhenValue, subscribe: subscribeWhenValue });\n }\n #applyPropAsSignal({ el, key, rawValue, formatConfig }) {\n const update = this.#applyPropsSubscribeUpdate({ key, el, rawValue, formatConfig, read: readSignal, subscribe: subscribeSignal });\n if (key === 'value') {\n if (formatConfig) {\n const onInput = (ev) => {\n const { stateValue } = this.#applyPropsBaseOnInputFormatted(ev);\n if (isComputed(rawValue)) return;\n const ok = rawValue.set?.(stateValue);\n if (ok === false) update();\n };\n this.#applyPropsAddInputEventListeners(el, onInput, true);\n } else {\n const onInput = (ev) => {\n if (isComputed(rawValue)) return;\n const ok = rawValue.set?.(ev.target?.value ?? '');\n if (ok === false) update();\n };\n this.#applyPropsAddInputEventListeners(el, onInput);\n }\n }\n if (key === 'checked') {\n const onChange = (ev) => {\n if (isComputed(rawValue)) return;\n const ok = rawValue.set?.(!!ev.target?.checked);\n if (ok === false) update();\n };\n el.addEventListener('change', onChange);\n this.#unsubs.push(() => el.removeEventListener('change', onChange));\n }\n }\n #applyPropAsState({ el, key, rawValue, formatConfig }) {\n const update = this.#applyPropsSubscribeUpdate({ key, el, rawValue, formatConfig, read: readState, subscribe: subscribeState });\n if (key === 'value') {\n if (formatConfig) {\n const onInput = (ev) => {\n const { stateValue } = this.#applyPropsBaseOnInputFormatted(ev);\n if (isComputed(rawValue)) return;\n const ok = rawValue.set?.(stateValue);\n if (ok === false) update();\n };\n this.#applyPropsAddInputEventListeners(el, onInput, true);\n } else {\n const onInput = (ev) => {\n if (isComputed(rawValue)) return;\n const ok = rawValue.set?.(ev.target?.value ?? '');\n if (ok === false) update();\n };\n this.#applyPropsAddInputEventListeners(el, onInput);\n }\n }\n if (key === 'checked') {\n const onChange = (ev) => {\n if (isComputed(rawValue)) return;\n const ok = rawValue.set?.(!!ev.target?.checked);\n if (ok === false) update();\n };\n el.addEventListener('change', onChange);\n this.#unsubs.push(() => el.removeEventListener('change', onChange));\n }\n }\n\n #setProp(el, key, value) {\n if (isWhen(value)) value = readWhenValue(value);\n if (isSignal(value)) value = readSignal(value);\n if (isState(value) || isStatePath(value)) value = readState(value);\n if (key === 'style') {\n if (value && typeof value === 'object') {\n Object.assign(el.style, value);\n return;\n }\n if (typeof value === 'string') {\n el.style.cssText = value;\n return;\n }\n }\n if (key.startsWith('on') && typeof value === 'function') {\n const eventName = key.substring(2).toLowerCase();\n el.addEventListener(eventName, value);\n this.#unsubs.push(() => el.removeEventListener(eventName, value));\n return;\n }\n if (key === 'className' || key === 'class') {\n el.className = value ?? '';\n return;\n }\n if (key === 'htmlFor') {\n el.setAttribute('for', value ?? '');\n return;\n }\n if (key === 'value') {\n try {\n el.value = value ?? '';\n } catch { }\n return;\n }\n if (key === 'checked') {\n try {\n el.checked = !!value;\n } catch { }\n return;\n }\n if (key === 'contentEditable') {\n try {\n el.contentEditable = value ? 'true' : 'false';\n } catch { }\n return;\n }\n if (key === 'textContent') {\n el.textContent = value ?? '';\n return;\n }\n if (key === 'innerHTML') {\n el.innerHTML = value ?? '';\n return;\n }\n if (value === false || value == null) {\n el.removeAttribute(key);\n if (key in el) {\n try {\n el[key] = false;\n } catch { }\n }\n return;\n }\n if (value === true) {\n el.setAttribute(key, '');\n if (key in el) {\n try {\n el[key] = true;\n } catch { }\n }\n return;\n }\n el.setAttribute(key, value);\n if (key in el) {\n try {\n el[key] = value;\n } catch { }\n }\n }\n\n #applyStyle(el, styleValue) {\n const cleanupStyleSubs = () => {\n for (const unsub of this.#styleUnsubs) unsub();\n this.#styleUnsubs = [];\n };\n\n const applyValue = (value) => {\n if (typeof value === 'string') {\n cleanupStyleSubs();\n el.style.cssText = value;\n return;\n }\n if (value && typeof value === 'object') {\n cleanupStyleSubs();\n applyObject(value);\n }\n };\n\n const applyObject = (styleObj) => {\n if (!styleObj || typeof styleObj !== 'object') return;\n for (const [k, v] of Object.entries(styleObj)) {\n if (typeof v === 'function') {\n try {\n el.style[k] = v();\n } catch {\n el.style[k] = '';\n }\n continue;\n }\n if (isSignal(v)) {\n const update = () => {\n try {\n el.style[k] = readSignal(v) ?? '';\n } catch {\n el.style[k] = '';\n }\n };\n update();\n const unsub = subscribeSignal(v, update);\n if (unsub) this.#styleUnsubs.push(unsub);\n continue;\n }\n if (isState(v) || isStatePath(v)) {\n const update = () => {\n try {\n el.style[k] = readState(v) ?? '';\n } catch {\n el.style[k] = '';\n }\n };\n update();\n const unsub = subscribeState(v, update);\n if (unsub) this.#styleUnsubs.push(unsub);\n continue;\n } else {\n el.style[k] = v ?? '';\n }\n }\n };\n\n cleanupStyleSubs();\n if (isSignal(styleValue)) {\n const update = () => applyValue(readSignal(styleValue));\n update();\n const unsub = subscribeSignal(styleValue, update);\n if (unsub) this.#unsubs.push(unsub);\n return;\n }\n\n if (isState(styleValue) || isStatePath(styleValue)) {\n const update = () => applyValue(readState(styleValue));\n update();\n const unsub = subscribeState(styleValue, update);\n if (unsub) this.#unsubs.push(unsub);\n return;\n }\n\n\n if (typeof styleValue === 'function') {\n try {\n applyValue(styleValue());\n } catch {\n return;\n }\n return;\n }\n\n applyValue(styleValue);\n }\n\n #appendChildren(el) {\n const content = Object.prototype.hasOwnProperty.call(this.props, 'content')\n ? this.props.content\n : null;\n const children = this.children.length ? this.children : content != null ? [content] : [];\n for (const child of children) this.#mountChild(el, child, null);\n }\n\n #mountChild(parent, child, beforeNode) {\n if (child == null || child === false) return;\n const mapped = getMappedArrayMeta(child) || getMappedMeta(child);\n if (mapped) {\n const start = createComment('zb:bind:start', 'map');\n const end = createComment('zb:bind:end', 'map');\n parent.insertBefore(start, beforeNode);\n parent.insertBefore(end, beforeNode);\n const state = { kind: 'static', values: [] };\n const update = () => {\n const src = mapped.path ? readStateMeta(mapped) : readSignal(mapped.signal);\n const list = Array.isArray(src) ? src.map(mapped.mapFn) : [];\n this.#renderDynamic(list, start, end, state);\n };\n update();\n const unsub = mapped.path ? subscribeStateMeta(mapped, update) : subscribeSignal(mapped.signal, update);\n if (unsub) this.#unsubs.push(() => {\n unsub();\n this.#cleanupDynamic(state, start, end);\n start.remove();\n end.remove();\n });\n return;\n }\n if (isSignal(child)) {\n const start = createComment('zb:bind:start', 'signal');\n const end = createComment('zb:bind:end', 'signal');\n parent.insertBefore(start, beforeNode);\n parent.insertBefore(end, beforeNode);\n const state = { kind: 'static', values: [] };\n const update = () => this.#renderDynamic(readSignal(child), start, end, state);\n update();\n const unsub = subscribeSignal(child, update);\n if (unsub) this.#unsubs.push(() => {\n unsub();\n this.#cleanupDynamic(state, start, end);\n start.remove();\n end.remove();\n });\n return;\n }\n\n if (isState(child) || isStatePath(child)) {\n const start = createComment('zb:bind:start', 'state');\n const end = createComment('zb:bind:end', 'state');\n parent.insertBefore(start, beforeNode);\n parent.insertBefore(end, beforeNode);\n const state = { kind: 'static', values: [] };\n const update = () => this.#renderDynamic(readState(child), start, end, state);\n update();\n const unsub = subscribeState(child, update);\n if (unsub) this.#unsubs.push(() => {\n unsub();\n this.#cleanupDynamic(state, start, end);\n start.remove();\n end.remove();\n });\n return;\n }\n\n if (isObservableArray(child)) {\n const start = createComment('zb:bind:start', 'list');\n const end = createComment('zb:bind:end', 'list');\n parent.insertBefore(start, beforeNode);\n parent.insertBefore(end, beforeNode);\n const state = { kind: 'list', items: [], unsub: null, source: child };\n this.#renderDynamic(child, start, end, state);\n this.#unsubs.push(() => {\n this.#cleanupDynamic(state, start, end);\n start.remove();\n end.remove();\n });\n return;\n }\n if (Array.isArray(child)) {\n for (const item of child) this.#mountChild(parent, item, beforeNode);\n return;\n }\n if (Renderer.isRenderable(child)) {\n child.mountInto(parent, beforeNode);\n this.#unsubs.push(() => child.unmount());\n return;\n }\n if (Renderer.isDomNode(child)) {\n parent.insertBefore(child, beforeNode);\n return;\n }\n parent.insertBefore(document.createTextNode(Renderer.toText(child)), beforeNode);\n }\n\n #cleanupDynamic(state, start, end) {\n if (state.kind === 'static') {\n for (const r of state.values) Renderer.unmount(r);\n state.values = [];\n if (start && end) clearBetween(start, end);\n return;\n }\n if (state.kind === 'list') {\n state.unsub?.();\n for (const it of state.items) {\n for (const r of it.values) Renderer.unmount(r);\n clearBetween(it.start, it.end);\n it.start.remove();\n it.end.remove();\n }\n state.items = [];\n }\n }\n\n #renderDynamic(value, start, end, state) {\n if (isObservableArray(value)) {\n if (state.kind === 'list' && state.source === value) return;\n this.#cleanupDynamic(state, start, end);\n state.kind = 'list';\n state.source = value;\n const parent = end.parentNode;\n const items = [];\n const makeItemMount = (idx, rawItem) => {\n const refNode = idx < items.length ? items[idx].start : end;\n const itemStart = createComment('zb:item:start', 'item');\n const itemEnd = createComment('zb:item:end', 'item');\n parent.insertBefore(itemStart, refNode);\n parent.insertBefore(itemEnd, refNode);\n const values = Renderer.normalize(rawItem);\n for (const r of values) this.#mountRenderable(parent, r, itemEnd);\n items.splice(idx, 0, { start: itemStart, end: itemEnd, values });\n };\n const removeItemMount = (idx, count) => {\n const removed = items.splice(idx, count);\n for (const it of removed) {\n for (const r of it.values) Renderer.unmount(r);\n clearBetween(it.start, it.end);\n it.start.remove();\n it.end.remove();\n }\n };\n const setItemMount = (idx, rawItem) => {\n removeItemMount(idx, 1);\n makeItemMount(idx, rawItem);\n };\n for (let i = 0; i < value.length; i++) makeItemMount(i, value[i]);\n const unsub = value.subscribe((patch) => {\n if (!this.#mounted) return;\n if (patch.type === 'reset') {\n removeItemMount(0, items.length);\n for (let i = 0; i < patch.items.length; i++) makeItemMount(i, patch.items[i]);\n return;\n }\n if (patch.type === 'insert') {\n for (let i = 0; i < patch.items.length; i++) makeItemMount(patch.index + i, patch.items[i]);\n return;\n }\n if (patch.type === 'remove') {\n removeItemMount(patch.index, patch.count);\n return;\n }\n if (patch.type === 'set') setItemMount(patch.index, patch.value);\n });\n state.items = items;\n state.unsub = unsub;\n return;\n }\n\n if (Array.isArray(value)) {\n this.#cleanupDynamic(state, start, end);\n state.kind = 'static';\n const next = Renderer.normalize(value);\n state.values = next;\n for (const r of next) this.#mountRenderable(end.parentNode, r, end);\n return;\n }\n\n this.#cleanupDynamic(state, start, end);\n state.kind = 'static';\n const next = Renderer.normalize(value);\n state.values = next;\n for (const r of next) this.#mountRenderable(end.parentNode, r, end);\n }\n\n #mountRenderable(parent, renderable, beforeNode) {\n if (Renderer.isRenderable(renderable)) {\n renderable.mountInto(parent, beforeNode);\n return;\n }\n if (Renderer.isDomNode(renderable)) {\n parent.insertBefore(renderable, beforeNode);\n }\n }\n}\n", "import { Renderable } from './renderable.js';\nimport { Renderer } from './renderer.js';\nimport { ElementNode } from '../dom/element.js';\nimport { isSignal, readSignal } from '../reactivity/signal.js';\nimport { isState, isStatePath, readState } from '../reactivity/state.js';\n\nfunction escapeHtml(value) {\n return String(value)\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\nfunction renderValue(value, render) {\n if (value == null || value === false) return '';\n if (Array.isArray(value)) return value.map((v) => render(v)).join('');\n if (isSignal(value)) return render(readSignal(value));\n if (isState(value) || isStatePath(value)) return render(readState(value));\n if (value instanceof Renderable && typeof value.renderToString === 'function') {\n return value.renderToString(render);\n }\n if (value instanceof ElementNode) {\n return value.renderToString(render);\n }\n if (Renderer.isDomNode(value)) {\n return value.outerHTML || '';\n }\n return escapeHtml(Renderer.toText(value));\n}\n\nexport function renderToString(value) {\n const render = (v) => renderValue(v, render);\n render.escape = escapeHtml;\n return render(value);\n}\n\nexport function hydrate(target, value) {\n const el = typeof target === 'string' ? document.querySelector(target) : target;\n if (!el) throw new Error('hydrate(target): target not found');\n while (el.firstChild) el.removeChild(el.firstChild);\n const values = Renderer.normalize(value);\n for (const r of values) {\n if (Renderer.isRenderable(r)) {\n r.mountInto(el, null);\n } else if (Renderer.isDomNode(r)) {\n el.appendChild(r);\n }\n }\n}\n", "import { state } from '../reactivity/state.js';\n\n/**\n * @typedef {string | number | boolean | null} QueryKeyAtom\n */\n/**\n * @typedef {QueryKeyAtom | QueryKeyAtom[]} QueryKey\n */\n\n/**\n * @typedef {'idle'|'loading'|'success'|'error'} QueryStatus\n */\n\n/**\n * @typedef {Object} QueryState\n * @property {any} data\n * @property {any} error\n * @property {QueryStatus} status\n * @property {boolean} fetching\n * @property {number|null} updatedAt\n * @property {number|null} errorAt\n * @property {boolean} invalidated\n */\n\n/**\n * @typedef {Object} QueryContext\n * @property {QueryKey} key\n * @property {AbortSignal} signal\n */\n\n/**\n * @typedef {Object} QueryOptions\n * @property {QueryKey} key\n * @property {(ctx: QueryContext) => Promise<any>} fetcher\n * @property {number} [staleTime] ms\n * @property {number} [cacheTime] ms\n * @property {boolean} [refetchOnFocus]\n * @property {boolean} [refetchOnReconnect]\n * @property {number} [retry]\n * @property {(attempt: number) => number} [retryDelay]\n * @property {boolean} [dedupe]\n * @property {boolean} [refetchOnInvalidate]\n */\n\nfunction defaultRetryDelay(attempt) {\n // 250ms, 500ms, 1000ms, 2000ms...\n return 250 * Math.pow(2, Math.max(0, attempt - 1));\n}\n\nfunction normalizeKey(key) {\n if (Array.isArray(key)) return JSON.stringify(key);\n return JSON.stringify([key]);\n}\n\nfunction now() {\n return Date.now();\n}\n\nfunction buildQuery(query) {\n if (!query || typeof query !== 'object') return '';\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(query)) {\n if (Array.isArray(v)) {\n for (const item of v) params.append(k, String(item));\n } else if (v != null) {\n params.set(k, String(v));\n }\n }\n const str = params.toString();\n return str ? `?${str}` : '';\n}\n\nfunction interpolatePath(path, params) {\n if (!params) return path;\n return String(path).replace(/:([A-Za-z0-9_]+)/g, (match, key) => {\n if (!Object.prototype.hasOwnProperty.call(params, key)) {\n throw new Error(`Missing route param \"${key}\" for \"${path}\"`);\n }\n return encodeURIComponent(String(params[key]));\n });\n}\n\nfunction isPlainObject(value) {\n if (!value || typeof value !== 'object') return false;\n if (Array.isArray(value)) return false;\n if (value instanceof FormData) return false;\n if (value instanceof URLSearchParams) return false;\n if (value instanceof Blob) return false;\n if (value instanceof ArrayBuffer) return false;\n return Object.prototype.toString.call(value) === '[object Object]';\n}\n\nasync function parseResponse(res) {\n const type = res.headers.get('content-type') || '';\n if (type.includes('application/json')) return await res.json();\n return await res.text();\n}\n\nfunction compose(middlewares, core) {\n return async (ctx) => {\n let index = -1;\n const dispatch = async (i) => {\n if (i <= index) throw new Error('Middleware next() called multiple times');\n index = i;\n const fn = middlewares[i] || core;\n if (!fn) return undefined;\n if (fn === core) return await core(ctx);\n return await fn(ctx, () => dispatch(i + 1));\n };\n return await dispatch(0);\n };\n}\n\nfunction isStale(query) {\n if (query.invalidated) return true;\n if (query.updatedAt == null) return true;\n const st = query.staleTime ?? 0;\n return st === 0 ? true : now() - query.updatedAt > st;\n}\n\nclass Query {\n key;\n fetcher;\n\n staleTime;\n cacheTime;\n refetchOnFocus;\n refetchOnReconnect;\n retry;\n retryDelay;\n dedupe;\n refetchOnInvalidate;\n\n #state = null;\n\n #inFlight = null;\n #abort = null;\n #gcTimer = null;\n #refCount = 0;\n #onGarbageCollect = null;\n\n constructor(options) {\n this.key = options.key;\n this.fetcher = options.fetcher;\n\n this.staleTime = options.staleTime ?? 0;\n this.cacheTime = options.cacheTime ?? 5 * 60_000;\n this.refetchOnFocus = options.refetchOnFocus ?? true;\n this.refetchOnReconnect = options.refetchOnReconnect ?? true;\n this.retry = options.retry ?? 0;\n this.retryDelay = options.retryDelay ?? defaultRetryDelay;\n this.dedupe = options.dedupe ?? true;\n this.refetchOnInvalidate = options.refetchOnInvalidate ?? true;\n\n this.#state = state({\n data: undefined,\n error: null,\n status: /** @type {QueryStatus} */ ('idle'),\n fetching: false,\n updatedAt: null,\n errorAt: null,\n invalidated: false,\n });\n }\n\n get data() {\n return this.#state.get().data;\n }\n get error() {\n return this.#state.get().error;\n }\n get status() {\n return this.#state.get().status;\n }\n get fetching() {\n return this.#state.get().fetching;\n }\n get updatedAt() {\n return this.#state.get().updatedAt;\n }\n get errorAt() {\n return this.#state.get().errorAt;\n }\n get invalidated() {\n return this.#state.get().invalidated;\n }\n\n /**\n * @returns {boolean}\n */\n get isStale() {\n return isStale(this);\n }\n\n /**\n * Starts a fetch if needed.\n * - If `dedupe` is true and a request is already running, returns the existing promise.\n * - If data exists, keeps status as success but flips `fetching`.\n *\n * @returns {Promise<any>}\n */\n async refetch() {\n if (this.dedupe && this.#inFlight) return this.#inFlight;\n return await this.#runFetch({ force: true });\n }\n\n /**\n * Marks query as invalidated (stale).\n */\n invalidate() {\n this.setState({ invalidated: true });\n if (this.refetchOnInvalidate) this.refetch();\n }\n\n /**\n * Cancels an in-flight request.\n */\n cancel() {\n this.#abort?.abort();\n }\n\n /**\n * Internal: optionally triggers fetch depending on stale-ness.\n * @returns {Promise<any>|null}\n */\n ensure() {\n if (!this.isStale) return null;\n return this.#runFetch({ force: false });\n }\n\n /**\n * @override\n */\n subscribe(selectorOrListener, listener, equalityFn) {\n this.#refCount++;\n this.#clearGc();\n const unsub = this.#subscribe(selectorOrListener, listener, equalityFn);\n return () => {\n unsub();\n this.#refCount = Math.max(0, this.#refCount - 1);\n this.#scheduleGc();\n };\n }\n\n #scheduleGc() {\n if (this.#refCount > 0) return;\n const ct = this.cacheTime ?? 0;\n if (ct <= 0) return;\n this.#gcTimer = setTimeout(() => {\n if (this.#refCount > 0) return;\n this.cancel();\n this.#onGarbageCollect?.();\n }, ct);\n }\n\n #clearGc() {\n if (!this.#gcTimer) return;\n clearTimeout(this.#gcTimer);\n this.#gcTimer = null;\n }\n\n /**\n * Internal: set by QueryClient to evict cached queries.\n * @param {() => void} fn\n */\n setGcHandler(fn) {\n this.#onGarbageCollect = fn;\n }\n\n async #runFetch({ force }) {\n if (!force && !this.isStale) return this.data;\n if (this.dedupe && this.#inFlight) return this.#inFlight;\n\n const controller = new AbortController();\n this.#abort = controller;\n const ctx = { key: this.key, signal: controller.signal };\n\n const hadData = this.updatedAt != null;\n this.setState({\n fetching: true,\n status: hadData ? this.status : 'loading',\n error: null,\n });\n\n const run = async () => {\n const maxRetry = Math.max(0, this.retry ?? 0);\n for (let attempt = 1; attempt <= maxRetry + 1; attempt++) {\n try {\n const data = await this.fetcher(ctx);\n this.setState({\n data,\n error: null,\n status: 'success',\n fetching: false,\n updatedAt: now(),\n errorAt: null,\n invalidated: false,\n });\n return data;\n } catch (err) {\n if (controller.signal.aborted) {\n this.setState({ fetching: false });\n throw err;\n }\n if (attempt > maxRetry) {\n this.setState({\n error: err,\n status: 'error',\n fetching: false,\n errorAt: now(),\n });\n throw err;\n }\n const delay = this.retryDelay?.(attempt) ?? defaultRetryDelay(attempt);\n await new Promise((r) => setTimeout(r, delay));\n }\n }\n return undefined;\n };\n\n this.#inFlight = run().finally(() => {\n this.#inFlight = null;\n });\n return this.#inFlight;\n }\n\n state() {\n return this.#state;\n }\n\n getState() {\n return this.#state.get();\n }\n\n setState(partial) {\n const current = this.#state.get();\n this.#state.set({ ...current, ...(partial || {}) });\n }\n\n #subscribe(selectorOrListener, listener, equalityFn) {\n if (typeof selectorOrListener === 'function' && listener === undefined) {\n const l = selectorOrListener;\n return this.#state.subscribe((next, prev) => l(next, prev));\n }\n const selector = selectorOrListener;\n if (typeof selector !== 'function' || typeof listener !== 'function') {\n throw new Error('subscribe(selector, listener, equalityFn?): invalid arguments');\n }\n const eq = typeof equalityFn === 'function' ? equalityFn : Object.is;\n let prevSelected = selector(this.#state.get());\n return this.#state.subscribe((next) => {\n const nextSelected = selector(next);\n if (eq(prevSelected, nextSelected)) return;\n const p = prevSelected;\n prevSelected = nextSelected;\n listener(nextSelected, p);\n });\n }\n}\n\n/**\n * Query manager with caching and refetch orchestration.\n */\nexport class QueryClient {\n #queries = new Map(); // keyString -> Query\n #listening = false;\n #middlewares = [];\n\n constructor() {\n this.#ensureWindowListeners();\n }\n\n /**\n * Gets (or creates) a query instance for the given key.\n *\n * @param {QueryOptions} options\n * @returns {Store & QueryState & { refetch(): Promise<any>, invalidate(): void, cancel(): void, ensure(): (Promise<any>|null), isStale: boolean }}\n */\n query(options) {\n const keyStr = normalizeKey(options.key);\n const existing = this.#queries.get(keyStr);\n if (existing) {\n existing.ensure();\n return existing;\n }\n\n const q = new Query(options);\n q.setGcHandler(() => this.#queries.delete(keyStr));\n this.#queries.set(keyStr, q);\n q.ensure();\n return q;\n }\n\n use(middleware) {\n if (typeof middleware !== 'function') {\n throw new Error('QueryClient.use(middleware): middleware must be a function');\n }\n this.#middlewares.push(middleware);\n return () => {\n const index = this.#middlewares.indexOf(middleware);\n if (index >= 0) this.#middlewares.splice(index, 1);\n };\n }\n\n service(config = {}) {\n const baseUrl = config.baseUrl || '';\n const serviceMiddlewares = Array.isArray(config.middlewares) ? config.middlewares.slice() : [];\n const endpoints = config.endpoints || {};\n const client = this;\n\n const request = async (endpoint, input = {}) => {\n if (!endpoint || typeof endpoint !== 'object') {\n throw new Error('service.request(endpoint, params, options): invalid endpoint');\n }\n const params = input.params || {};\n const method = (endpoint.method || 'GET').toUpperCase();\n const path = interpolatePath(endpoint.path || '', params);\n const query = input.query || endpoint.query || null;\n const body = input.body !== undefined ? input.body : undefined;\n const headers = { ...(endpoint.headers || {}), ...(input.headers || {}) };\n const map = input.map || endpoint.map || null;\n const middlewares = [\n ...client.#middlewares,\n ...serviceMiddlewares,\n ...(endpoint.middlewares || []),\n ...(input.middlewares || []),\n ];\n\n const url = `${baseUrl}${path}${buildQuery(query)}`;\n const core = async (ctx) => {\n const init = { method: ctx.method, headers: ctx.headers, signal: ctx.signal };\n if (ctx.body !== undefined && ctx.method !== 'GET' && ctx.method !== 'HEAD') {\n if (isPlainObject(ctx.body)) {\n if (!init.headers['Content-Type']) init.headers['Content-Type'] = 'application/json';\n init.body = JSON.stringify(ctx.body);\n } else {\n init.body = ctx.body;\n }\n }\n const res = await fetch(ctx.url, init);\n const data = await parseResponse(res);\n if (!res.ok) {\n const err = new Error(`Request failed: ${res.status}`);\n err.status = res.status;\n err.data = data;\n throw err;\n }\n return data;\n };\n\n const ctx = {\n method,\n url,\n path,\n baseUrl,\n headers,\n query,\n body,\n params,\n endpoint,\n signal: input.signal,\n };\n\n const run = compose(middlewares, core);\n const data = await run(ctx);\n return typeof map === 'function' ? map(data) : data;\n };\n\n const api = { request };\n for (const [name, def] of Object.entries(endpoints)) {\n api[name] = (input = {}) => request(def, input);\n }\n return api;\n }\n\n /**\n * Marks a query as invalidated.\n * @param {QueryKey} key\n */\n invalidate(key) {\n const q = this.#queries.get(normalizeKey(key));\n if (!q) return;\n q.invalidate();\n }\n\n /**\n * Refetches a query immediately.\n * @param {QueryKey} key\n * @returns {Promise<any>|null}\n */\n refetch(key) {\n const q = this.#queries.get(normalizeKey(key));\n if (!q) return null;\n return q.refetch();\n }\n\n /**\n * Removes a query from cache (cancels in-flight).\n * @param {QueryKey} key\n */\n remove(key) {\n const keyStr = normalizeKey(key);\n const q = this.#queries.get(keyStr);\n if (!q) return;\n q.cancel();\n this.#queries.delete(keyStr);\n }\n\n #ensureWindowListeners() {\n if (this.#listening) return;\n if (typeof window === 'undefined') return;\n this.#listening = true;\n\n window.addEventListener('focus', () => {\n for (const q of this.#queries.values()) {\n if (!q.refetchOnFocus) continue;\n if (q.isStale) q.refetch();\n }\n });\n\n window.addEventListener('online', () => {\n for (const q of this.#queries.values()) {\n if (!q.refetchOnReconnect) continue;\n if (q.isStale) q.refetch();\n }\n });\n }\n}\n\n", "import { createComment, clearBetween } from '../dom/dom.js';\nimport { Renderer } from '../renderable/renderer.js';\nimport { state } from '../reactivity/state.js';\nimport { after } from '../reactivity/observe.js';\n\nfunction normalizeBase(basePath) {\n if (!basePath) return '';\n let base = basePath.trim();\n if (!base.startsWith('/')) base = `/${base}`;\n if (base.length > 1 && base.endsWith('/')) base = base.slice(0, -1);\n return base;\n}\n\nfunction normalizePathname(pathname, trailingSlash) {\n let path = pathname || '/';\n if (!path.startsWith('/')) path = `/${path}`;\n if (path.length > 1 && path.endsWith('/') && trailingSlash !== 'preserve') {\n path = path.slice(0, -1);\n }\n return path;\n}\n\nfunction escapeRegex(text) {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction compilePath(path, { caseSensitive, trailingSlash }) {\n const input = path === '' ? '/' : path;\n const normalized = normalizePathname(input, 'preserve');\n if (normalized === '/*' || normalized === '*') {\n return {\n regex: /^.*$/,\n keys: ['*'],\n score: 0,\n };\n }\n\n const segments = normalized.split('/').filter(Boolean);\n const keys = [];\n let score = 0;\n let pattern = '^';\n\n for (const seg of segments) {\n if (seg === '*') {\n keys.push('*');\n pattern += '(?:/(.*))?';\n score += 1;\n continue;\n }\n\n if (seg.startsWith(':')) {\n const raw = seg.slice(1);\n const isOptional = raw.endsWith('?');\n const name = isOptional ? raw.slice(0, -1) : raw;\n keys.push(name);\n if (isOptional) {\n pattern += '(?:/([^/]+))?';\n } else {\n pattern += '/([^/]+)';\n }\n score += 2;\n continue;\n }\n\n pattern += `/${escapeRegex(seg)}`;\n score += 3;\n }\n\n if (segments.length === 0) pattern += '/?';\n\n if (trailingSlash === 'preserve') {\n pattern += '$';\n } else {\n pattern += '/?$';\n }\n\n const flags = caseSensitive ? '' : 'i';\n return {\n regex: new RegExp(pattern, flags),\n keys,\n score,\n };\n}\n\nfunction parseQuery(search) {\n const out = {};\n if (!search) return out;\n const params = new URLSearchParams(search.startsWith('?') ? search : `?${search}`);\n for (const [k, v] of params.entries()) {\n if (Object.prototype.hasOwnProperty.call(out, k)) {\n const prev = out[k];\n out[k] = Array.isArray(prev) ? prev.concat(v) : [prev, v];\n } else {\n out[k] = v;\n }\n }\n return out;\n}\n\nfunction toSearch(query) {\n if (!query || typeof query !== 'object') return '';\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(query)) {\n if (Array.isArray(v)) {\n for (const item of v) params.append(k, String(item));\n } else if (v != null) {\n params.set(k, String(v));\n }\n }\n const str = params.toString();\n return str ? `?${str}` : '';\n}\n\nfunction buildUrl({ pathname, search, hash }) {\n const q = search || '';\n const h = hash || '';\n return `${pathname}${q}${h}`;\n}\n\nfunction joinPaths(parentPath, childPath) {\n const child = childPath == null ? '' : String(childPath).trim();\n if (child.startsWith('/')) return child || '/';\n const base = parentPath && parentPath !== '/' ? parentPath : '';\n if (!child) return base || '/';\n return `${base}/${child}`;\n}\n\nfunction resolveTarget(target) {\n if (typeof target === 'string') return document.querySelector(target);\n return target;\n}\n\nfunction isPageDefinition(value) {\n return typeof value === 'function';\n}\n\nfunction isPromise(value) {\n return !!value && typeof value.then === 'function';\n}\n\nexport class Router {\n #routes = [];\n #routeSeq = 0;\n #options;\n #mountParent = null;\n #mountStart = null;\n #mountEnd = null;\n #current = null;\n #listening = false;\n #navToken = 0;\n #beforeEach = new Set();\n #afterEach = new Set();\n #memory = null;\n\n constructor(options = {}) {\n this.#options = {\n mode: options.mode || 'history',\n basePath: normalizeBase(options.basePath || ''),\n caseSensitive: !!options.caseSensitive,\n trailingSlash: options.trailingSlash || 'ignore',\n maxRedirects: options.maxRedirects ?? 8,\n scrollRestoration: options.scrollRestoration ?? true,\n transition: options.transition || null,\n errorPage: options.errorPage || null,\n };\n\n if (this.#options.mode === 'memory') {\n const initial = options.initialUrl || '/';\n this.#memory = {\n stack: [this.#parseUrl(initial)],\n index: 0,\n };\n }\n }\n\n add(pathOrConfig, PageClass, options = {}) {\n let config = null;\n if (typeof pathOrConfig === 'string') {\n config = { path: pathOrConfig, page: PageClass, ...options };\n } else if (isPageDefinition(pathOrConfig)) {\n const route = pathOrConfig.route || pathOrConfig.path || null;\n if (route && typeof route === 'object') {\n config = { ...route, page: pathOrConfig, ...options };\n } else {\n config = { path: route, page: pathOrConfig, ...options };\n }\n } else if (pathOrConfig && typeof pathOrConfig === 'object') {\n config = { ...pathOrConfig };\n }\n\n if (!config || config.path == null) {\n throw new Error('Router.add: invalid route config');\n }\n\n return this.#addRouteConfig(config, null);\n }\n\n #addRouteConfig(config, parent) {\n const hasChildren = Array.isArray(config.children) && config.children.length > 0;\n const hasTarget = !!config.page || !!config.load || !!config.redirect;\n if (!hasTarget && !hasChildren && !config.layout) {\n throw new Error(`Router.add: route \"${config.path}\" must provide page, load, redirect, layout, or children`);\n }\n\n const fullPath = parent ? joinPaths(parent.path, config.path) : joinPaths('', config.path);\n const route = {\n id: `${++this.#routeSeq}_${Math.random().toString(36).slice(2)}`,\n name: config.name || null,\n path: fullPath,\n rawPath: config.path,\n parent: parent || null,\n meta: config.meta || null,\n redirect: config.redirect || null,\n loader: config.loader || null,\n guards: config.guards || null,\n beforeEnter: config.beforeEnter || null,\n beforeLeave: config.beforeLeave || null,\n props: config.props || null,\n reuse: config.reuse ?? null,\n transition: config.transition || null,\n errorPage: config.errorPage || null,\n load: config.load || null,\n page: config.page || null,\n layout: config.layout || null,\n children: [],\n };\n\n if (hasTarget) {\n const compiled = compilePath(route.path, this.#options);\n route.regex = compiled.regex;\n route.keys = compiled.keys;\n route.score = compiled.score;\n this.#routes.push(route);\n this.#routes.sort((a, b) => b.score - a.score);\n }\n\n if (hasChildren) {\n for (const child of config.children) {\n const childRoute = this.#addRouteConfig(child, route);\n if (childRoute) route.children.push(childRoute);\n }\n }\n\n return route;\n }\n\n beforeEach(fn) {\n this.#beforeEach.add(fn);\n return () => this.#beforeEach.delete(fn);\n }\n\n afterEach(fn) {\n this.#afterEach.add(fn);\n return () => this.#afterEach.delete(fn);\n }\n\n mount(target) {\n const el = resolveTarget(target);\n if (!el) throw new Error('Router.mount: target not found');\n if (this.#mountParent) return;\n this.#mountParent = el;\n this.#mountStart = createComment('zb:route:start', 'router');\n this.#mountEnd = createComment('zb:route:end', 'router');\n el.appendChild(this.#mountStart);\n el.appendChild(this.#mountEnd);\n this.start();\n }\n\n unmount() {\n this.stop();\n if (this.#current) {\n this.#teardownCurrent();\n this.#current = null;\n }\n if (this.#mountStart && this.#mountEnd) {\n clearBetween(this.#mountStart, this.#mountEnd);\n this.#mountStart.remove();\n this.#mountEnd.remove();\n }\n this.#mountStart = null;\n this.#mountEnd = null;\n this.#mountParent = null;\n }\n\n start() {\n if (this.#listening) return;\n this.#listening = true;\n if (this.#options.mode === 'history') {\n window.addEventListener('popstate', this.#handlePop);\n } else if (this.#options.mode === 'hash') {\n window.addEventListener('hashchange', this.#handlePop);\n window.addEventListener('popstate', this.#handlePop);\n }\n this.#handleLocationChange({ source: 'start' });\n }\n\n stop() {\n if (!this.#listening) return;\n this.#listening = false;\n window.removeEventListener('popstate', this.#handlePop);\n window.removeEventListener('hashchange', this.#handlePop);\n }\n\n navigate(to, options = {}) {\n return this.#goTo(to, { ...options, replace: false });\n }\n\n replace(to, options = {}) {\n return this.#goTo(to, { ...options, replace: true });\n }\n\n back() {\n if (this.#options.mode === 'memory') {\n this.#memoryBack();\n return;\n }\n history.back();\n }\n\n forward() {\n if (this.#options.mode === 'memory') {\n this.#memoryForward();\n return;\n }\n history.forward();\n }\n\n go(delta) {\n if (this.#options.mode === 'memory') {\n this.#memoryGo(delta);\n return;\n }\n history.go(delta);\n }\n\n resolve(path) {\n if (typeof path === 'string') {\n const url = new URL(path, window.location.origin);\n let pathname = normalizePathname(url.pathname, this.#options.trailingSlash);\n const base = this.#options.basePath;\n if (base && !pathname.startsWith(base)) pathname = `${base}${pathname}`;\n return `${pathname}${url.search || ''}${url.hash || ''}`;\n }\n const pathname = normalizePathname(path.pathname || '/', this.#options.trailingSlash);\n const search = path.search || toSearch(path.query);\n const hash = path.hash || '';\n const base = this.#options.basePath;\n const fullPath = base && !pathname.startsWith(base) ? `${base}${pathname}` : pathname;\n return `${fullPath}${search}${hash}`;\n }\n\n parse(url) {\n const loc = this.#parseUrl(url);\n const match = this.#match(loc.pathname);\n if (!match) return { location: loc, match: null };\n return { location: loc, match };\n }\n\n get current() {\n return this.#current;\n }\n\n async checkGuards() {\n if (!this.#current) return true;\n\n const ctx = {\n router: this,\n route: this.#current.route,\n chain: this.#current.chain,\n params: this.#current.params,\n query: this.#current.query,\n location: this.#current.location,\n state: this.#current.location?.state ?? null,\n source: 'revalidate',\n };\n\n const redirectChain = new Set();\n const ok = await this.#runGuards(this.#current.chain, ctx, redirectChain);\n return ok;\n }\n\n queryParameters(options = {}) {\n const replace = options.replace ?? true;\n const preserveHash = options.preserveHash ?? true;\n const q = state(this.#readLocation()?.query || {});\n let lastSerialized = toSearch(q.get());\n let syncing = false;\n\n const applyFromLocation = (location) => {\n const nextQuery = location?.query || {};\n const nextSerialized = toSearch(nextQuery);\n if (nextSerialized === lastSerialized) return;\n lastSerialized = nextSerialized;\n q.set(nextQuery);\n };\n\n const unsubRoute = this.afterEach(({ location }) => {\n if (syncing) {\n syncing = false;\n return;\n }\n applyFromLocation(location);\n });\n\n const unsubState = after(q).change((next) => {\n const nextSerialized = toSearch(next);\n if (nextSerialized === lastSerialized) return;\n lastSerialized = nextSerialized;\n syncing = true;\n const current = this.#readLocation();\n const pathname = current?.pathname || '/';\n const hash = preserveHash ? current?.hash || '' : '';\n const target = { pathname, query: next, hash };\n if (replace) {\n this.replace(target);\n } else {\n this.navigate(target);\n }\n });\n\n Object.defineProperty(q, 'dispose', {\n value: () => {\n if (typeof unsubRoute === 'function') unsubRoute();\n if (typeof unsubState === 'function') unsubState();\n },\n enumerable: false,\n });\n\n return q;\n }\n\n #handlePop = () => {\n this.#handleLocationChange({ source: 'pop' });\n };\n\n #readLocation() {\n if (this.#options.mode === 'memory') {\n return this.#memory.stack[this.#memory.index];\n }\n if (this.#options.mode === 'hash') {\n const raw = window.location.hash ? window.location.hash.slice(1) : '/';\n return this.#parseUrl(raw);\n }\n return this.#parseUrl(window.location.href);\n }\n\n #parseUrl(input) {\n const base = window.location.origin;\n const url = new URL(input, base);\n const pathname = normalizePathname(url.pathname, this.#options.trailingSlash);\n const basePath = this.#options.basePath;\n const stripped =\n basePath && pathname.startsWith(basePath) ? pathname.slice(basePath.length) || '/' : pathname;\n return {\n pathname: normalizePathname(stripped, this.#options.trailingSlash),\n search: url.search || '',\n hash: url.hash || '',\n query: parseQuery(url.search),\n state: history.state ?? null,\n url: buildUrl({ pathname: url.pathname, search: url.search, hash: url.hash }),\n };\n }\n\n #memoryBack() {\n if (this.#memory.index <= 0) return;\n this.#memory.index -= 1;\n this.#handleLocationChange({ source: 'pop' });\n }\n\n #memoryForward() {\n if (this.#memory.index >= this.#memory.stack.length - 1) return;\n this.#memory.index += 1;\n this.#handleLocationChange({ source: 'pop' });\n }\n\n #memoryGo(delta) {\n const next = this.#memory.index + delta;\n if (next < 0 || next >= this.#memory.stack.length) return;\n this.#memory.index = next;\n this.#handleLocationChange({ source: 'pop' });\n }\n\n async #goTo(to, { replace, state, redirectChain } = {}) {\n const nextInput = typeof to === 'string' ? to : this.resolve(to);\n const next = this.#parseUrl(nextInput);\n next.state = state ?? null;\n\n const token = ++this.#navToken;\n const ok = await this.#runNavigation(next, { token, source: 'navigate', redirectChain });\n if (!ok) return;\n\n if (this.#options.mode === 'memory') {\n if (replace) {\n this.#memory.stack[this.#memory.index] = { ...next, state: state ?? null };\n } else {\n this.#memory.stack = this.#memory.stack.slice(0, this.#memory.index + 1);\n this.#memory.stack.push({ ...next, state: state ?? null });\n this.#memory.index = this.#memory.stack.length - 1;\n }\n return;\n }\n\n const full = this.resolve(next.pathname) + (next.search || '') + (next.hash || '');\n if (this.#options.mode === 'hash') {\n const url = `#${full}`;\n history[replace ? 'replaceState' : 'pushState'](state ?? null, '', url);\n } else {\n history[replace ? 'replaceState' : 'pushState'](state ?? null, '', full);\n }\n }\n\n async #handleLocationChange({ source, redirectChain } = {}) {\n if (!this.#mountParent || !this.#mountStart || !this.#mountEnd) return;\n const token = ++this.#navToken;\n const loc = this.#readLocation();\n const chain = redirectChain || new Set();\n await this.#runNavigation(loc, { token, source, redirectChain: chain });\n }\n\n #match(pathname) {\n for (const route of this.#routes) {\n const m = route.regex.exec(pathname);\n if (!m) continue;\n const params = {};\n for (let i = 0; i < route.keys.length; i++) {\n const key = route.keys[i];\n params[key] = m[i + 1] ? decodeURIComponent(m[i + 1]) : undefined;\n }\n const chain = [];\n let cur = route;\n while (cur) {\n chain.unshift(cur);\n cur = cur.parent;\n }\n return { route, params, chain };\n }\n return null;\n }\n\n async #runNavigation(location, { token, source, redirectChain }) {\n if (token !== this.#navToken) return;\n\n const match = this.#match(location.pathname);\n if (!match) return false;\n\n const { route, params, chain } = match;\n const sameRoute = this.#current && this.#current.route === route;\n const reuse = route.reuse ?? route.page?.reuse ?? true;\n const transition = route.transition || route.page?.transition || this.#options.transition;\n\n const ctx = {\n router: this,\n route,\n chain,\n params,\n query: location.query || {},\n location,\n state: location.state ?? null,\n source,\n };\n\n try {\n const redirect = await this.#resolveRedirect(chain, ctx, redirectChain);\n if (redirect) return false;\n\n const ok = await this.#runGuards(chain, ctx, redirectChain);\n if (!ok) {\n if (source === 'pop') this.#restoreCurrentUrl();\n return false;\n }\n\n const data = await this.#runLoader(chain, ctx);\n if (token !== this.#navToken) return false;\n\n ctx.data = data?.leaf ?? data;\n ctx.routeData = data?.map ?? {};\n\n if (sameRoute && this.#current?.page && reuse) {\n this.#updateCurrent(ctx);\n return true;\n }\n\n const pageClass = await this.#resolvePage(route, ctx);\n if (token !== this.#navToken || !pageClass) return false;\n\n await this.#swapPage(pageClass, ctx, transition);\n return true;\n } catch (err) {\n return await this.#handleError(err, ctx, transition);\n }\n }\n\n async #resolveRedirect(chain, ctx, redirectChain) {\n for (const route of chain) {\n let target = null;\n if (typeof route.redirect === 'string') target = route.redirect;\n if (typeof route.redirect === 'function') target = route.redirect({ ...ctx, route });\n if (typeof target === 'string') {\n return this.#redirectTo(target, redirectChain);\n }\n if (isPromise(target)) {\n const next = await target;\n if (typeof next === 'string') return this.#redirectTo(next, redirectChain);\n }\n }\n return false;\n }\n\n async #runGuards(chain, ctx, redirectChain) {\n for (const fn of this.#beforeEach) {\n const res = await fn(ctx);\n if (await this.#handleGuardResult(res, redirectChain)) return false;\n }\n\n for (const route of chain) {\n const guards = [];\n if (Array.isArray(route.guards)) guards.push(...route.guards);\n if (typeof route.guards === 'function') guards.push(route.guards);\n if (typeof route.beforeEnter === 'function') guards.push(route.beforeEnter);\n if (typeof route.page?.guards === 'function') guards.push(route.page.guards);\n if (Array.isArray(route.page?.guards)) guards.push(...route.page.guards);\n if (typeof route.page?.beforeEnter === 'function') guards.push(route.page.beforeEnter);\n\n for (const fn of guards) {\n const res = await fn({ ...ctx, route });\n if (await this.#handleGuardResult(res, redirectChain)) return false;\n }\n }\n return true;\n }\n\n async #handleGuardResult(result, redirectChain) {\n if (result === false) return true;\n if (typeof result === 'string') return this.#redirectTo(result, redirectChain);\n if (result && typeof result === 'object' && typeof result.redirect === 'string') {\n return this.#redirectTo(result.redirect, redirectChain);\n }\n if (isPromise(result)) {\n const r = await result;\n return this.#handleGuardResult(r, redirectChain);\n }\n return false;\n }\n\n async #runLoader(chain, ctx) {\n const out = {};\n let leafData = undefined;\n for (const route of chain) {\n const loader = route.loader || route.page?.loader;\n if (typeof loader !== 'function') continue;\n const data = await loader({ ...ctx, route });\n out[route.id] = data;\n if (route === chain[chain.length - 1]) leafData = data;\n }\n return { map: out, leaf: leafData };\n }\n\n async #resolvePage(route, ctx) {\n if (route.page && isPageDefinition(route.page)) return route.page;\n if (typeof route.load === 'function') {\n const loaded = await route.load(ctx);\n if (loaded?.default && isPageDefinition(loaded.default)) return loaded.default;\n if (isPageDefinition(loaded)) return loaded;\n }\n return null;\n }\n\n async #swapPage(PageClass, ctx, transition) {\n const props = {\n params: ctx.params,\n query: ctx.query,\n location: ctx.location,\n data: ctx.data,\n state: ctx.state,\n router: this,\n route: ctx.route,\n ...(typeof ctx.route.props === 'function' ? ctx.route.props(ctx) : {}),\n };\n\n let page;\n let isClassBased = false;\n \n // Check if it's a class (not an arrow function and has prototype methods)\n if (PageClass.prototype && PageClass.prototype.constructor === PageClass && !PageClass.__zbFactory) {\n try {\n page = new PageClass(props);\n isClassBased = true;\n } catch (e) {\n page = PageClass(props);\n }\n } else {\n page = PageClass(props);\n }\n \n // Only set router/route/etc on class instances, not on renderables\n if (isClassBased && page && typeof page === 'object') {\n page.router = this;\n page.route = ctx.route;\n page.params = ctx.params;\n page.query = ctx.query;\n page.location = ctx.location;\n page.data = ctx.data;\n page.state = ctx.state;\n }\n\n const prev = this.#current;\n if (prev?.page) {\n const leaveCtx = { ...ctx, from: prev };\n prev.page.emitBefore?.('routeLeave', leaveCtx, { router: this, page: prev.page });\n prev.page.emitAfter?.('routeLeave', leaveCtx, { router: this, page: prev.page });\n }\n\n page.emitBefore?.('routeEnter', ctx, { router: this, page });\n \n const rootRenderable = this.#buildLayoutTree(page, ctx);\n const mountedValues = Renderer.normalize(rootRenderable);\n for (const r of mountedValues) {\n if (Renderer.isRenderable(r)) {\n r.mountInto(this.#mountParent, this.#mountEnd);\n } else if (Renderer.isDomNode(r)) {\n this.#mountEnd.parentNode.insertBefore(r, this.#mountEnd);\n }\n }\n \n page.emitAfter?.('routeEnter', ctx, { router: this, page });\n\n if (prev) this.#teardownCurrent();\n\n this.#current = {\n route: ctx.route,\n chain: ctx.chain,\n page,\n mounted: mountedValues,\n params: ctx.params,\n query: ctx.query,\n location: ctx.location,\n data: ctx.data,\n routeData: ctx.routeData,\n };\n\n for (const fn of this.#afterEach) fn({ ...ctx, page });\n this.#applyScrollRestoration(ctx);\n }\n\n #updateCurrent(ctx) {\n const current = this.#current;\n if (!current?.page) return;\n current.chain = ctx.chain;\n current.params = ctx.params;\n current.query = ctx.query;\n current.location = ctx.location;\n current.data = ctx.data;\n current.page.params = ctx.params;\n current.page.query = ctx.query;\n current.page.location = ctx.location;\n current.page.data = ctx.data;\n current.page.state = ctx.state;\n current.page.emitBefore?.('routeUpdate', ctx, { router: this, page: current.page });\n current.page.emitAfter?.('routeUpdate', ctx, { router: this, page: current.page });\n for (const fn of this.#afterEach) fn({ ...ctx, page: current.page });\n this.#applyScrollRestoration(ctx);\n }\n\n async #applyTransition(prevView, nextView, transition) {\n if (!transition || !prevView) return;\n const enter = transition.enterClass || 'zb-route-enter';\n const enterActive = transition.enterActiveClass || 'zb-route-enter-active';\n const exit = transition.exitClass || 'zb-route-exit';\n const exitActive = transition.exitActiveClass || 'zb-route-exit-active';\n const duration = transition.duration ?? 180;\n\n nextView.classList.add(enter);\n prevView.classList.add(exit);\n\n await new Promise((r) => requestAnimationFrame(r));\n nextView.classList.add(enterActive);\n prevView.classList.add(exitActive);\n\n await new Promise((r) => setTimeout(r, duration));\n nextView.classList.remove(enter, enterActive);\n prevView.classList.remove(exit, exitActive);\n }\n\n #teardownCurrent() {\n const current = this.#current;\n if (!current) return;\n if (Array.isArray(current.mounted)) {\n for (const r of current.mounted) Renderer.unmount(r);\n }\n }\n\n #buildLayoutTree(page, ctx) {\n let outlet = page;\n const chain = ctx.chain || [];\n for (let i = chain.length - 1; i >= 0; i--) {\n const route = chain[i];\n if (typeof route.layout === 'function') {\n outlet = route.layout(outlet, { ...ctx, route });\n }\n }\n return outlet;\n }\n\n async #redirectTo(target, redirectChain) {\n if (redirectChain.size >= this.#options.maxRedirects) {\n throw new Error('Router: too many redirects');\n }\n if (redirectChain.has(target)) {\n throw new Error(`Router: redirect loop to \"${target}\"`);\n }\n redirectChain.add(target);\n await this.#goTo(target, { replace: true, redirectChain });\n return true;\n }\n\n async #handleError(err, ctx, transition) {\n const errorPage = ctx.route.errorPage || this.#options.errorPage;\n if (!errorPage) throw err;\n const errorCtx = { ...ctx, error: err };\n await this.#swapPage(errorPage, errorCtx, transition);\n const page = this.#current?.page;\n if (page) {\n page.emitBefore('routeError', errorCtx, { router: this, page });\n page.emitAfter('routeError', errorCtx, { router: this, page });\n }\n return true;\n }\n\n #applyScrollRestoration(ctx) {\n if (!this.#options.scrollRestoration) return;\n const hash = ctx.location?.hash;\n if (hash && hash.length > 1) {\n const id = hash.slice(1);\n const el = document.getElementById(id);\n if (el) {\n el.scrollIntoView();\n return;\n }\n }\n window.scrollTo(0, 0);\n }\n\n #restoreCurrentUrl() {\n const current = this.#current?.location;\n if (!current) return;\n const full = this.resolve(current.pathname) + (current.search || '') + (current.hash || '');\n if (this.#options.mode === 'hash') {\n history.replaceState(current.state ?? null, '', `#${full}`);\n return;\n }\n history.replaceState(current.state ?? null, '', full);\n }\n}\n\nexport function createRouter(options) {\n const router = new Router(options);\n if (options?.routes && Array.isArray(options.routes)) {\n for (const route of options.routes) {\n router.add(route);\n }\n }\n return router;\n}\n\nexport const router = new Router();\n", "import { signal, readSignal, setSignal, subscribeSignal } from './reactivity/signal.js';\nimport { createStateFromAdapter } from './reactivity/state.js';\nimport { Renderable } from './renderable/renderable.js';\n\nclass ContextProvider extends Renderable {\n #child;\n #providerSignal;\n #consumers;\n #mountStack;\n #mountTimeConsumers = [];\n #mounted = false;\n\n constructor(child, providerSignal, consumers, mountStack) {\n super();\n this.#child = child;\n this.#providerSignal = providerSignal;\n this.#consumers = consumers;\n this.#mountStack = mountStack;\n }\n\n mountInto(parent, beforeNode) {\n if (this.#mounted) return;\n this.#mounted = true;\n for (const consumer of this.#consumers) {\n consumer._connect(this.#providerSignal);\n }\n this.#mountStack.push({ signal: this.#providerSignal, consumers: this.#mountTimeConsumers });\n this.#child.mountInto(parent, beforeNode);\n this.#mountStack.pop();\n }\n\n unmount() {\n if (!this.#mounted) return;\n this.#mounted = false;\n this.#child.unmount();\n for (const consumer of this.#consumers) {\n consumer._disconnect();\n }\n for (const consumer of this.#mountTimeConsumers) {\n consumer._disconnect();\n }\n this.#mountTimeConsumers = [];\n }\n\n renderToString(render) {\n for (const consumer of this.#consumers) {\n consumer._connect(this.#providerSignal);\n }\n this.#mountStack.push({ signal: this.#providerSignal, consumers: this.#mountTimeConsumers });\n const html = render(this.#child);\n this.#mountStack.pop();\n return html;\n }\n}\n\nfunction createContextConsumer(defaultValue) {\n const localSignal = signal(defaultValue);\n const subscribers = new Set();\n let activeProviderSignal = null;\n let providerUnsub = null;\n let localUnsub = null;\n\n const notify = (...args) => {\n for (const fn of subscribers) fn(...args);\n };\n\n localUnsub = subscribeSignal(localSignal, notify);\n\n const getActive = () => activeProviderSignal || localSignal;\n\n const adapter = {\n kind: 'state',\n get: () => readSignal(getActive()),\n set: (next) => setSignal(getActive(), next, true),\n subscribe: (fn) => {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n },\n before: localSignal.before,\n };\n\n const consumerState = createStateFromAdapter(adapter);\n\n return {\n state: consumerState,\n _connect(providerSignal) {\n activeProviderSignal = providerSignal;\n if (localUnsub) { localUnsub(); localUnsub = null; }\n providerUnsub = subscribeSignal(providerSignal, notify);\n const newVal = readSignal(providerSignal);\n const oldVal = readSignal(localSignal);\n if (newVal !== oldVal) {\n notify(newVal, oldVal);\n }\n },\n _disconnect() {\n if (providerUnsub) { providerUnsub(); providerUnsub = null; }\n activeProviderSignal = null;\n localUnsub = subscribeSignal(localSignal, notify);\n },\n };\n}\n\n/**\n * Creates a context for sharing reactive state across a component tree\n * without prop drilling.\n *\n * Returns { scope, state }:\n * - scope(value?) \u2014 creates a new provider level. Returns a state with\n * .get(), .set(), path access, and .serve(renderable) to wrap children.\n * - state() \u2014 returns a reactive state bound to the nearest ancestor provider.\n *\n * Usage:\n * const sizeCtx = context([1, 2, 3]);\n *\n * const Parent = (...children) => {\n * const sizes = sizeCtx.scope();\n * sizes.set([10, 20, 30]);\n * return sizes.serve(Div(...children));\n * };\n *\n * const Child = () => {\n * const sizes = sizeCtx.state();\n * return Div(sizes[0]);\n * };\n *\n * Parent(Child());\n */\nexport function context(defaultValue) {\n const pending = [];\n const mountStack = [];\n\n const scope = (value) => {\n const providerSignal = signal(value !== undefined ? value : defaultValue);\n\n const adapter = {\n kind: 'state',\n get: () => readSignal(providerSignal),\n set: (next) => setSignal(providerSignal, next, true),\n subscribe: (fn) => subscribeSignal(providerSignal, fn),\n before: providerSignal.before,\n };\n\n const providerState = createStateFromAdapter(adapter);\n\n const serve = (renderable) => {\n const consumers = pending.splice(0, pending.length);\n return new ContextProvider(renderable, providerSignal, consumers, mountStack);\n };\n\n return new Proxy(providerState, {\n get(target, prop) {\n if (prop === 'serve') return serve;\n return Reflect.get(target, prop);\n },\n });\n };\n\n const state = () => {\n const consumer = createContextConsumer(defaultValue);\n if (mountStack.length > 0) {\n const top = mountStack[mountStack.length - 1];\n consumer._connect(top.signal);\n top.consumers.push(consumer);\n } else {\n pending.push(consumer);\n }\n return consumer.state;\n };\n\n return { scope, state };\n}\n", "import { ElementNode } from './element.js';\nimport { Renderer } from '../renderable/renderer.js';\nimport { isObservableArray } from '../collections/observable-array.js';\nimport { isSignal } from '../reactivity/signal.js';\nimport { isComputed, isState, isStatePath } from '../reactivity/state.js';\n\nconst tags = [\n 'html', 'head', 'title', 'base', 'link', 'meta', 'style',\n 'body', 'article', 'section', 'nav', 'aside', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'hgroup', 'header', 'footer', 'address', 'main', 'search',\n 'p', 'hr', 'pre', 'blockquote', 'ol', 'ul', 'li', 'dl', 'dt', 'dd',\n 'figure', 'figcaption', 'div', 'menu',\n 'a', 'em', 'strong', 'small', 's', 'cite', 'q', 'dfn', 'abbr', 'ruby', 'rt', 'rp',\n 'data', 'time', 'code', 'var', 'samp', 'kbd', 'sub', 'sup', 'i', 'b', 'u',\n 'mark', 'bdi', 'bdo', 'span', 'br', 'wbr',\n 'ins', 'del',\n 'picture', 'source', 'img', 'iframe', 'embed', 'object', 'param', 'video', 'audio',\n 'track', 'map', 'area',\n 'table', 'caption', 'colgroup', 'col', 'tbody', 'thead', 'tfoot', 'tr', 'td', 'th',\n 'form', 'label', 'input', 'button', 'select', 'datalist', 'optgroup', 'option',\n 'textarea', 'output', 'progress', 'meter', 'fieldset', 'legend',\n 'details', 'summary', 'dialog',\n 'script', 'noscript', 'template', 'slot', 'canvas',\n];\n\nfunction toFactoryName(tag) {\n let name = tag.charAt(0).toUpperCase() + tag.slice(1);\n if (name in globalThis) name = `Html${name}`;\n return name;\n}\n\nfunction createTag(tagName) {\n return (...args) => {\n const nextProps = {};\n const nextChildren = [];\n\n const isPropsObject = (value) =>\n !!value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n !Renderer.isRenderable(value) &&\n !Renderer.isDomNode(value) &&\n !isObservableArray(value) &&\n !isSignal(value) &&\n !isState(value) &&\n !isStatePath(value) &&\n !isComputed(value);\n\n for (const arg of args) {\n if (isPropsObject(arg)) {\n Object.assign(nextProps, arg);\n } else {\n nextChildren.push(arg);\n }\n }\n\n return new ElementNode(tagName, nextProps, nextChildren);\n };\n}\n\nconst exported = {};\nfor (const tag of tags) {\n const name = toFactoryName(tag);\n exported[name] = createTag(tag);\n}\n\nexport const Elements = Object.freeze(exported);\nexport const {\n Html,\n Head,\n Title,\n Base,\n Link,\n Meta,\n Style,\n Body,\n Article,\n Section,\n Nav,\n Aside,\n H1,\n H2,\n H3,\n H4,\n H5,\n H6,\n Hgroup,\n Header,\n Footer,\n Address,\n Main,\n Search,\n P,\n Hr,\n Pre,\n Blockquote,\n Ol,\n Ul,\n Li,\n Dl,\n Dt,\n Dd,\n Figure,\n Figcaption,\n Div,\n Menu,\n A,\n Em,\n Strong,\n Small,\n S,\n Cite,\n Q,\n Dfn,\n Abbr,\n Ruby,\n Rt,\n Rp,\n Data,\n Time,\n Code,\n Var,\n Samp,\n Kbd,\n Sub,\n Sup,\n I,\n B,\n U,\n Mark,\n Bdi,\n Bdo,\n Span,\n Br,\n Wbr,\n Ins,\n Del,\n Picture,\n Source,\n Img,\n Iframe,\n Embed,\n HtmlObject,\n Param,\n Video,\n Audio,\n Track,\n Map,\n Area,\n Table,\n Caption,\n Colgroup,\n Col,\n Tbody,\n Thead,\n Tfoot,\n Tr,\n Td,\n Th,\n Form,\n Label,\n Input,\n Button,\n Select,\n Datalist,\n Optgroup,\n Option,\n Textarea,\n Output,\n Progress,\n Meter,\n Fieldset,\n Legend,\n Details,\n Summary,\n Dialog,\n Script,\n Noscript,\n Template,\n Slot,\n Canvas,\n} = exported;\n"],
|
|
5
|
+
"mappings": "AAGO,IAAMA,EAAN,KAAiB,CAMtB,WAAY,CACV,MAAM,IAAI,MAAM,4CAA4C,CAC9D,CAKA,SAAU,CACR,MAAM,IAAI,MAAM,0CAA0C,CAC5D,CACF,ECbO,IAAMC,EAAN,MAAMC,CAAS,CAKpB,OAAO,UAAUC,EAAO,CACtB,MAAO,CAAC,CAACA,GAAS,OAAOA,GAAU,UAAY,OAAOA,EAAM,UAAa,QAC3E,CAMA,OAAO,aAAaA,EAAO,CACzB,OAAOA,aAAiBC,CAC1B,CAOA,OAAO,OAAOD,EAAO,CACnB,GAAIA,GAAS,MAAQA,IAAU,GAAO,MAAO,GAC7C,GAAI,OAAOA,GAAU,SAAU,OAAOA,EAEtC,GADI,OAAOA,GAAU,UACjB,OAAOA,GAAU,SAAU,OAAO,OAAOA,CAAK,EAClD,GAAI,OAAOA,GAAU,UAAW,OAAOA,EAAQ,OAAS,GACxD,GAAI,CACF,OAAO,OAAOA,CAAK,CACrB,MAAQ,CACN,MAAO,EACT,CACF,CAWA,OAAO,UAAUA,EAAO,CACtB,OAAIA,GAAS,MAAQA,IAAU,GAAc,CAAC,EAC1C,MAAM,QAAQA,CAAK,EAAUA,EAAM,QAASE,GAAMH,EAAS,UAAUG,CAAC,CAAC,EACvEH,EAAS,aAAaC,CAAK,GAAKD,EAAS,UAAUC,CAAK,EAA8C,CAACA,CAAK,EACzG,CAAC,SAAS,eAAeD,EAAS,OAAOC,CAAK,CAAC,CAAC,CACzD,CAMA,OAAO,QAAQA,EAAO,CAChBD,EAAS,aAAaC,CAAK,GAAGA,EAAM,QAAQ,CAClD,CACF,ECtDA,eAAsBG,GAAUC,EAAgBC,EAAQ,CACtD,IAAMC,EAAK,OAAOD,GAAW,SAAW,SAAS,cAAcA,CAAM,EAAIA,EACzE,GAAI,CAACC,EAAI,MAAM,IAAI,MAAM,4BAA4B,EAErD,GAAI,OAAOF,GAAmB,WAC5B,MAAM,IAAI,MAAM,kDAAkD,EAGpE,IAAIG,EAAW,KACf,GAAIH,EAAe,YACjBG,EAAWH,EAAe,MAE1B,IAAI,CACFG,EAAW,IAAIH,CACjB,MAAQ,CACNG,EAAW,IACb,CAGF,GAAIA,EAAU,CACZ,GAAI,OAAOA,EAAS,QAAW,WAC7B,aAAMA,EAAS,OAAOD,CAAE,EACjBC,EAET,GAAI,OAAOA,EAAS,WAAc,WAChC,OAAAA,EAAS,UAAUD,EAAI,IAAI,EACpBC,CAEX,CAEA,IAAMC,EAAOJ,EAAe,EACtBK,EAASC,EAAS,UAAUF,CAAI,EACtC,QAAWG,KAAKF,EACVC,EAAS,aAAaC,CAAC,EACzBA,EAAE,UAAUL,EAAI,IAAI,EACXI,EAAS,UAAUC,CAAC,GAC7BL,EAAG,YAAYK,CAAC,EAIpB,MAAO,CACL,SAAU,CACR,QAAWA,KAAKF,EACVC,EAAS,aAAaC,CAAC,EACzBA,EAAE,QAAQ,EACDD,EAAS,UAAUC,CAAC,GAC7BA,EAAE,OAAO,CAGf,CACF,CACF,CC7DA,IAAIC,GAAY,GACVC,GAAW,IAAI,IAErB,SAASC,IAAQ,CACfF,GAAY,GACZ,QAAWG,KAAOF,GAAUE,EAAI,CAClC,CAEO,IAAMC,GAAa,CACxB,UAAW,CACLJ,KACJA,GAAY,GACZ,eAAeE,EAAK,EACtB,EACA,IAAIC,EAAK,CACP,OAAAF,GAAS,IAAIE,CAAG,EACT,IAAMF,GAAS,OAAOE,CAAG,CAClC,CACF,EClBO,IAAME,GAAW,OAAO,OAAO,CACpC,oBAAqB,OAAO,wBAAwB,EACpD,cAAe,OAAO,kBAAkB,CAC1C,CAAC,ECGM,IAAMC,EAAN,KAAe,CACpBC,GAAU,IAAI,IACdC,GAAS,IAAI,IACbC,GAAY,IAAI,IAQhB,GAAGC,EAAOC,EAAMC,EAAI,CAClB,IAAMC,EAAMH,IAAU,SAAW,KAAKH,GAAU,KAAKC,GACrD,GAAIE,IAAU,SAAWC,IAAS,IAChC,YAAKF,GAAU,IAAIG,CAAE,EACd,IAAM,KAAKH,GAAU,OAAOG,CAAE,EAEvC,IAAIE,EAAMD,EAAI,IAAIF,CAAI,EACtB,OAAKG,IACHA,EAAM,IAAI,IACVD,EAAI,IAAIF,EAAMG,CAAG,GAEnBA,EAAI,IAAIF,CAAE,EACH,IAAME,EAAI,OAAOF,CAAE,CAC5B,CASA,WAAWD,EAAMI,EAASC,EAAK,CAC7B,IAAMF,EAAM,KAAKP,GAAQ,IAAII,CAAI,EACjC,GAAI,CAACG,EAAK,MAAO,GACjB,QAAWF,KAAME,EAEf,GADUF,EAAGG,EAASC,CAAG,IACf,GAAO,MAAO,GAE1B,MAAO,EACT,CAQA,UAAUL,EAAMI,EAASC,EAAK,CAC5B,IAAMF,EAAM,KAAKN,GAAO,IAAIG,CAAI,EAChC,GAAIG,EACF,QAAWF,KAAME,EAAKF,EAAGG,EAASC,CAAG,EAEvC,QAAWJ,KAAM,KAAKH,GAAWG,EAAGG,EAASC,CAAG,CAClD,CAMA,MAAMN,EAAO,CACX,IAAMO,EAAM,KACNC,EAAM,CAMV,GAAGP,EAAMC,EAAI,CACX,OAAOK,EAAI,GAAGP,EAAOC,EAAMC,CAAE,CAC/B,EAKA,IAAIA,EAAI,CACN,OAAOK,EAAI,GAAGP,EAAO,IAAKE,CAAE,CAC9B,CACF,EAEA,OAAO,IAAI,MAAMM,EAAK,CACpB,IAAIC,EAAQC,EAAM,CAEhB,OADI,OAAOA,GAAS,UAChBA,KAAQD,EAAeA,EAAOC,CAAI,EAC9BR,GAAOK,EAAI,GAAGP,EAAOU,EAAMR,CAAE,CACvC,CACF,CAAC,CACH,CACF,EC7FA,IAAMS,GAAsB,IAAI,QAEzB,SAASC,EAAkBC,EAAO,CACvC,MAAO,CAAC,CAACA,GAAS,OAAOA,GAAU,UAAYF,GAAoB,IAAIE,CAAK,CAC9E,CAEA,SAASC,GAAWC,EAAOC,EAAQ,CACjC,OAAID,EAAQ,EAAU,KAAK,IAAI,EAAGC,EAASD,CAAK,EACzC,KAAK,IAAIA,EAAOC,CAAM,CAC/B,CAEO,SAASC,GAAgBC,EAAU,CAAC,EAAG,CAC5C,IAAMC,EAAS,MAAM,QAAQD,CAAO,EAAIA,EAAQ,MAAM,EAAI,CAAC,EACrDE,EAAO,IAAI,IACXC,EAAM,IAAIC,EAEVC,EAAS,CAACC,EAAOC,IAAQ,CAC7B,QAAWC,KAAMN,EAAMM,EAAGF,EAAOC,CAAG,EACpCJ,EAAI,UAAUG,EAAM,KAAMA,EAAOC,GAAO,CAAE,MAAOE,CAAM,CAAC,CAC1D,EAEMA,EAAQ,IAAI,MAAMR,EAAQ,CAC9B,IAAIS,EAAGC,EAAMC,EAAU,CAErB,GAAID,IAAS,YACX,OAAQH,IACNN,EAAK,IAAIM,CAAE,EACJ,IAAMN,EAAK,OAAOM,CAAE,GAG/B,GAAIG,IAAS,QACX,OAAQE,GAAc,CACpB,IAAMC,EAAYJ,EAAE,MAAM,EACpBK,EAAY,MAAM,QAAQF,CAAS,EAAIA,EAAU,MAAM,EAAI,CAAC,EAC5DN,EAAM,CAAE,MAAOE,EAAO,GAAI,QAAS,KAAM,CAACI,CAAS,EAAG,WAAYH,EAAE,OAAQ,WAAYK,EAAU,MAAO,EACzGT,EAAQ,CAAE,KAAM,QAAS,MAAOS,EAAW,UAAAD,CAAU,EACtDX,EAAI,WAAW,QAASG,EAAOC,CAAG,IACvCG,EAAE,OAAS,EACP,MAAM,QAAQG,CAAS,GAAGH,EAAE,KAAK,GAAGG,CAAS,EACjDR,EAAO,CAAE,KAAM,QAAS,MAAOK,EAAE,MAAM,EAAG,UAAAI,CAAU,EAAGP,CAAG,EAC5D,EAEF,GAAII,IAAS,QACX,MAAO,IAAMR,EAAI,MAAM,OAAO,EAEhC,GAAIQ,IAAS,SACX,MAAO,IAAMR,EAAI,MAAM,QAAQ,EAGjC,IAAMR,EAAQ,QAAQ,IAAIe,EAAGC,EAAMC,CAAQ,EAC3C,OAAI,OAAOjB,GAAU,WAAmBA,EAEpCgB,IAAS,OACJ,IAAIK,IAAU,CACnB,IAAMnB,EAAQa,EAAE,OACVH,EAAM,CAAE,MAAOE,EAAO,GAAI,OAAQ,KAAMO,EAAO,WAAYN,EAAE,OAAQ,WAAYA,EAAE,OAASM,EAAM,MAAO,EACzGV,EAAQ,CAAE,KAAM,SAAU,MAAAT,EAAO,MAAOmB,EAAM,MAAM,CAAE,EAC5D,GAAIA,EAAM,QAAU,CAACb,EAAI,WAAW,SAAUG,EAAOC,CAAG,EAAG,OAAOG,EAAE,OACpE,IAAMO,EAAS,MAAM,UAAU,KAAK,MAAMP,EAAGM,CAAK,EAClD,OAAIA,EAAM,QAAQX,EAAO,CAAE,KAAM,SAAU,MAAAR,EAAO,MAAAmB,CAAM,EAAGT,CAAG,EACvDU,CACT,EAEEN,IAAS,MACJ,IAAM,CACX,GAAID,EAAE,SAAW,EAAG,OACpB,IAAMb,EAAQa,EAAE,OAAS,EACnBQ,EAAU,CAACR,EAAEb,CAAK,CAAC,EACnBU,EAAM,CAAE,MAAOE,EAAO,GAAI,MAAO,KAAM,CAAC,EAAG,WAAYC,EAAE,OAAQ,WAAYA,EAAE,OAAS,CAAE,EAC1FJ,EAAQ,CAAE,KAAM,SAAU,MAAAT,EAAO,MAAO,EAAG,MAAOqB,CAAQ,EAChE,GAAI,CAACf,EAAI,WAAW,SAAUG,EAAOC,CAAG,EAAG,OAC3C,IAAMU,EAAS,MAAM,UAAU,IAAI,MAAMP,CAAC,EAC1C,OAAAL,EAAO,CAAE,KAAM,SAAU,MAAAR,EAAO,MAAO,EAAG,MAAOqB,CAAQ,EAAGX,CAAG,EACxDU,CACT,EAEEN,IAAS,UACJ,IAAIK,IAAU,CACnB,IAAMT,EAAM,CAAE,MAAOE,EAAO,GAAI,UAAW,KAAMO,EAAO,WAAYN,EAAE,OAAQ,WAAYA,EAAE,OAASM,EAAM,MAAO,EAC5GV,EAAQ,CAAE,KAAM,SAAU,MAAO,EAAG,MAAOU,EAAM,MAAM,CAAE,EAC/D,GAAIA,EAAM,QAAU,CAACb,EAAI,WAAW,SAAUG,EAAOC,CAAG,EAAG,OAAOG,EAAE,OACpE,IAAMO,EAAS,MAAM,UAAU,QAAQ,MAAMP,EAAGM,CAAK,EACrD,OAAIA,EAAM,QAAQX,EAAO,CAAE,KAAM,SAAU,MAAO,EAAG,MAAAW,CAAM,EAAGT,CAAG,EAC1DU,CACT,EAEEN,IAAS,QACJ,IAAM,CACX,GAAID,EAAE,SAAW,EAAG,OACpB,IAAMQ,EAAU,CAACR,EAAE,CAAC,CAAC,EACfH,EAAM,CAAE,MAAOE,EAAO,GAAI,QAAS,KAAM,CAAC,EAAG,WAAYC,EAAE,OAAQ,WAAYA,EAAE,OAAS,CAAE,EAC5FJ,EAAQ,CAAE,KAAM,SAAU,MAAO,EAAG,MAAO,EAAG,MAAOY,CAAQ,EACnE,GAAI,CAACf,EAAI,WAAW,SAAUG,EAAOC,CAAG,EAAG,OAC3C,IAAMU,EAAS,MAAM,UAAU,MAAM,MAAMP,CAAC,EAC5C,OAAAL,EAAO,CAAE,KAAM,SAAU,MAAO,EAAG,MAAO,EAAG,MAAOa,CAAQ,EAAGX,CAAG,EAC3DU,CACT,EAEEN,IAAS,SACJ,CAACQ,EAAOC,KAAgBJ,IAAU,CACvC,IAAMK,EAAYX,EAAE,OACdb,EAAQD,GAAW,OAAOuB,CAAK,GAAK,EAAGE,CAAS,EAChDC,EACJF,IAAgB,OAAYC,EAAYxB,EAAQ,KAAK,IAAI,EAAG,OAAOuB,CAAW,GAAK,CAAC,EAChFb,EAAM,CAAE,MAAOE,EAAO,GAAI,SAAU,KAAM,CAACU,EAAOC,EAAa,GAAGJ,CAAK,EAAG,WAAYN,EAAE,OAAQ,WAAYA,EAAE,OAASY,EAAKN,EAAM,MAAO,EAC/I,GAAIM,EAAI,CACN,IAAMC,EAAc,CAAE,KAAM,SAAU,MAAA1B,EAAO,MAAOyB,EAAI,MAAOZ,EAAE,MAAMb,EAAOA,EAAQyB,CAAE,CAAE,EAC1F,GAAI,CAACnB,EAAI,WAAW,SAAUoB,EAAahB,CAAG,EAAG,MAAO,CAAC,CAC3D,CACA,GAAIS,EAAM,OAAQ,CAChB,IAAMQ,EAAc,CAAE,KAAM,SAAU,MAAA3B,EAAO,MAAOmB,EAAM,MAAM,CAAE,EAClE,GAAI,CAACb,EAAI,WAAW,SAAUqB,EAAajB,CAAG,EAAG,MAAO,CAAC,CAC3D,CACA,IAAMW,EAAU,MAAM,UAAU,OAAO,MAAMR,EAAG,CAACb,EAAOyB,EAAI,GAAGN,CAAK,CAAC,EACrE,OAAIM,GAAIjB,EAAO,CAAE,KAAM,SAAU,MAAAR,EAAO,MAAOyB,EAAI,MAAOJ,CAAQ,EAAGX,CAAG,EACpES,EAAM,QAAQX,EAAO,CAAE,KAAM,SAAU,MAAAR,EAAO,MAAAmB,CAAM,EAAGT,CAAG,EACvDW,CACT,EAGKvB,EAAM,KAAKe,CAAC,CACrB,EACA,IAAIA,EAAGC,EAAMhB,EAAOiB,EAAU,CAC5B,GAAID,IAAS,SAAU,CACrB,IAAMc,EAAOf,EAAE,OACTgB,EAAO,OAAO/B,CAAK,GAAK,EACxBmB,EAAYJ,EAAE,MAAM,EACpBQ,EAAUQ,EAAOD,EAAOf,EAAE,MAAMgB,EAAMD,CAAI,EAAI,CAAC,EAC/ClB,EAAM,CAAE,MAAOE,EAAO,GAAI,SAAU,KAAM,CAACiB,CAAI,EAAG,WAAYD,EAAM,WAAYC,CAAK,EACrFC,EAAK,QAAQ,IAAIjB,EAAGC,EAAMe,EAAMd,CAAQ,EAC9C,GAAIe,GAAMD,EAAOD,EAAM,CACrB,IAAMnB,EAAQ,CAAE,KAAM,SAAU,MAAOoB,EAAM,MAAOD,EAAOC,EAAM,MAAOR,CAAQ,EAC5Ef,EAAI,WAAW,SAAUG,EAAOC,CAAG,GAAGF,EAAOC,EAAOC,CAAG,CAC7D,CACA,OAAIoB,GAAMD,EAAOD,GACfpB,EAAO,CAAE,KAAM,QAAS,MAAOK,EAAE,MAAM,EAAG,UAAAI,CAAU,EAAGP,CAAG,EAErDoB,CACT,CAEA,IAAM9B,EAAQ,OAAOc,GAAS,UAAY,QAAQ,KAAKA,CAAI,EAAI,OAAOA,CAAI,EAAI,KAC9E,GAAId,GAAS,KAAM,OAAO,QAAQ,IAAIa,EAAGC,EAAMhB,EAAOiB,CAAQ,EAE9D,IAAMS,EAAYX,EAAE,OACdkB,EAAY/B,EAAQa,EAAE,OAASA,EAAEb,CAAK,EAAI,OAC1CU,EAAM,CAAE,MAAOE,EAAO,GAAI,MAAO,KAAM,CAACE,EAAMhB,CAAK,EAAG,WAAYe,EAAE,OAAQ,WAAYA,EAAE,MAAO,EAEvG,GAAI,CADO,QAAQ,IAAIA,EAAGC,EAAMhB,EAAOiB,CAAQ,EACtC,MAAO,GAEhB,GAAIf,EAAQwB,EAAW,CACrB,IAAMf,EAAQ,CAAE,KAAM,MAAO,MAAAT,EAAO,MAAAF,EAAO,KAAMiC,CAAU,EAC3D,OAAIzB,EAAI,WAAW,MAAOG,EAAOC,CAAG,GAAGF,EAAOC,EAAOC,CAAG,EACjD,EACT,CAEA,GAAIV,IAAUwB,EAAW,CACvB,IAAMf,EAAQ,CAAE,KAAM,SAAU,MAAAT,EAAO,MAAO,CAACF,CAAK,CAAE,EACtD,OAAAY,EAAI,WAAaG,EAAE,OACfP,EAAI,WAAW,SAAUG,EAAOC,CAAG,GAAGF,EAAOC,EAAOC,CAAG,EACpD,EACT,CAEA,IAAMO,EAAYJ,EAAE,MAAM,EAAGW,CAAS,EACtC,OAAAhB,EAAO,CAAE,KAAM,QAAS,MAAOK,EAAE,MAAM,EAAG,UAAAI,CAAU,EAAGP,CAAG,EACnD,EACT,CACF,CAAC,EAED,OAAAd,GAAoB,IAAIgB,EAAO,CAAE,OAAAR,EAAQ,KAAAC,CAAK,CAAC,EACxCO,CACT,CC9JO,IAAMoB,GAAN,cAAwBC,CAAW,CACxCC,GAAS,IAAI,IACbC,GAAa,GACbC,GAAe,IAAI,IACnBC,GAAc,IAAI,IAClBC,GAAU,IAAI,IACdC,GAAoB,IAAI,IACxBC,GAAU,IAAIC,EAMd,QAAS,CACP,OAAO,KAAKD,GAAQ,MAAM,QAAQ,CACpC,CAMA,OAAQ,CACN,OAAO,KAAKA,GAAQ,MAAM,OAAO,CACnC,CAEA,WAAWE,EAAMC,EAASC,EAAK,CAC7B,OAAO,KAAKJ,GAAQ,WAAWE,EAAMC,EAASC,CAAG,CACnD,CAEA,UAAUF,EAAMC,EAASC,EAAK,CAC5B,KAAKJ,GAAQ,UAAUE,EAAMC,EAASC,CAAG,CAC3C,CAOA,IAAIC,EAAI,CACN,IAAMC,EAAe,KAAKX,GAC1B,KAAKA,GAAa,GAClB,GAAI,CACFU,EAAG,CACL,QAAE,CACA,KAAKV,GAAaW,EAClB,KAAK,OAAO,CACd,CACF,CAMA,QAAS,CACP,GAAI,KAAKZ,GAAO,OAAS,EAAG,OAC5B,IAAMa,EAAQ,MAAM,KAAK,KAAKb,EAAM,EACpC,KAAKA,GAAO,MAAM,EAClB,QAAWc,KAAQD,EAAO,CACxB,IAAME,EAAO,KAAKb,GAAa,IAAIY,CAAI,EACvC,GAAKC,EACL,QAAWC,KAAMD,EAAMC,EAAG,CAC5B,CACA,KAAKV,GAAQ,UAAU,QAAS,CAAE,MAAAO,CAAM,EAAG,CAAE,OAAQ,IAAK,CAAC,EAC3DI,GAAW,SAAS,CACtB,CASA,CAACC,GAAS,aAAa,EAAEJ,EAAME,EAAI,CACjC,IAAIG,EAAM,KAAKjB,GAAa,IAAIY,CAAI,EACpC,OAAKK,IACHA,EAAM,IAAI,IACV,KAAKjB,GAAa,IAAIY,EAAMK,CAAG,GAEjCA,EAAI,IAAIH,CAAE,EACH,IAAMG,EAAI,OAAOH,CAAE,CAC5B,CAQA,CAACE,GAAS,mBAAmB,EAAEJ,EAAM,CACnC,GAAI,KAAKX,GAAY,IAAIW,CAAI,EAAG,OAChC,KAAKX,GAAY,IAAIW,CAAI,EAEzB,IAAMM,EAAO,OAAO,yBAAyB,KAAMN,CAAI,EACnDM,GAAQA,EAAK,eAAiB,KAElC,KAAKhB,GAAQ,IAAIU,EAAM,KAAKA,CAAI,CAAC,EACjC,KAAKO,GAAgBP,EAAM,KAAKV,GAAQ,IAAIU,CAAI,CAAC,EAEjD,OAAO,eAAe,KAAMA,EAAM,CAChC,IAAK,IAAM,KAAKV,GAAQ,IAAIU,CAAI,EAChC,IAAMQ,GAAM,CACV,IAAMC,EAAO,KAAKnB,GAAQ,IAAIU,CAAI,EAC9BS,IAASD,GAET,CADO,KAAKhB,GAAQ,WAAW,MAAO,CAAE,KAAAQ,EAAM,KAAAS,EAAM,KAAMD,CAAE,EAAG,CAAE,OAAQ,IAAK,CAAC,IAEnF,KAAKlB,GAAQ,IAAIU,EAAMQ,CAAC,EACxB,KAAKD,GAAgBP,EAAMQ,CAAC,EAC5B,KAAKE,GAAWV,CAAI,EACpB,KAAKR,GAAQ,UAAU,MAAO,CAAE,KAAAQ,EAAM,KAAAS,EAAM,KAAMD,CAAE,EAAG,CAAE,OAAQ,IAAK,CAAC,EACzE,EACA,WAAY,GACZ,aAAc,EAChB,CAAC,EACH,CAEAD,GAAgBP,EAAMW,EAAO,CAC3B,IAAMC,EAAY,KAAKrB,GAAkB,IAAIS,CAAI,EAOjD,GANIY,IACFA,EAAU,EACV,KAAKrB,GAAkB,OAAOS,CAAI,GAGhC,CAACa,EAAkBF,CAAK,GACxB,OAAOA,EAAM,WAAc,WAAY,OAE3C,IAAMG,EAAQH,EAAM,UAAU,IAAM,CAElC,KAAKD,GAAWV,CAAI,CACtB,CAAC,EACD,KAAKT,GAAkB,IAAIS,EAAMc,CAAK,CACxC,CAEAJ,GAAWV,EAAM,CACf,KAAKd,GAAO,IAAIc,CAAI,EACpB,KAAKe,GAAe,CACtB,CAEAA,IAAiB,CACX,KAAK5B,KACT,KAAKA,GAAa,GAClB,eAAe,IAAM,CACnB,KAAKA,GAAa,GAClB,KAAK,OAAO,CACd,CAAC,EACH,CACF,EC7JA,SAAS6B,GAAYC,EAAM,CACzB,OAAO,IAAI,MAAMA,EAAM,CACrB,IAAK,CAACC,EAAQC,IAAS,CACrB,GAAIA,IAAS,YAAa,OAAOD,EAAO,UAAU,KAAKA,CAAM,EAC7D,GAAIC,IAAS,IACX,OAAQC,GAASF,EAAOE,CAAI,EAE9B,GAAI,OAAOD,GAAS,UAAYA,EAAK,WAAW,GAAG,EACjD,OAAOD,EAAOC,EAAK,MAAM,CAAC,CAAC,EAE7B,IAAME,EAAQH,EAAOC,CAAI,EACzB,OAAI,OAAOE,GAAU,WAAmBA,EAAM,KAAKH,CAAM,EAClDG,CACT,EACA,IAAK,CAACH,EAAQC,EAAME,KAClBH,EAAOC,CAAI,EAAIE,EACR,GAEX,CAAC,CACH,CAEA,IAAMC,GAAN,cAAwCC,EAAU,CAChDC,GAAQ,KACRC,GAAc,CAAC,EACfC,GAAY,CAAC,EAEb,YAAYC,EAAUC,EAAO,CAC3B,MAAM,EACN,KAAK,MAAQA,GAAS,CAAC,EACvB,IAAMC,EAAQb,GAAY,IAAI,EACxBc,EAAOH,EAAS,KAAKE,EAAOD,CAAK,EACvC,KAAKJ,GAAQM,EACb,KAAKL,GAAcM,EAAS,UAAUD,CAAI,CAC5C,CAEA,UAAUE,EAAQC,EAAY,CAC5B,QAAWC,KAAK,KAAKT,GAAa,CAChC,GAAIM,EAAS,aAAaG,CAAC,EAAG,CAC5BA,EAAE,UAAUF,EAAQC,CAAU,EAC9B,QACF,CACIF,EAAS,UAAUG,CAAC,GACtBF,EAAO,aAAaE,EAAGD,CAAU,CAErC,CACF,CAEA,SAAU,CACR,QAAWE,KAAM,KAAKT,GAAWS,EAAG,EACpC,KAAKT,GAAY,CAAC,EAClB,QAAWQ,KAAK,KAAKT,GAAa,CAChC,GAAIM,EAAS,aAAaG,CAAC,EAAG,CAC5BA,EAAE,QAAQ,EACV,QACF,CACIH,EAAS,UAAUG,CAAC,GACtBA,EAAE,OAAO,CAEb,CACF,CAEA,eAAeE,EAAQ,CACrB,OAAOA,EAAO,KAAKZ,EAAK,CAC1B,CAEA,UAAUW,EAAI,CACR,OAAOA,GAAO,YAClB,KAAKT,GAAU,KAAKS,CAAE,CACxB,CACF,EAEO,SAASE,GAAUV,EAAU,CAClC,GAAI,OAAOA,GAAa,WACtB,MAAM,IAAI,MAAM,sCAAsC,EAExD,IAAMW,EAAWV,GAAU,IAAIN,GAA0BK,EAAUC,CAAK,EACxE,OAAAU,EAAQ,YAAc,GACfA,CACT,CCjFA,IAAMC,GAAS,OAAO,WAAW,EAC3BC,GAAa,OAAO,eAAe,EAEzC,SAASC,GAASC,EAAO,CACvB,OAAOA,IAAU,MAAQ,OAAOA,GAAU,QAC5C,CAEO,SAASC,EAAOC,EAAS,CAC9B,IAAMC,EAAQ,CACZ,CAACN,EAAM,EAAG,GACV,MAAOK,EACP,KAAM,IAAI,IACV,OAAQ,IAAI,GACd,EAEME,EAAUC,GAAS,CACvB,QAAWC,KAAMH,EAAM,KAAMG,EAAGH,EAAM,MAAOE,CAAI,CACnD,EAEME,EAAM,CACV,KAAM,CACJ,OAAOJ,EAAM,KACf,EACA,IAAIK,EAAMC,EAAQ,GAAO,CACvB,IAAMJ,EAAOF,EAAM,MACnB,GAAI,CAACM,GAASJ,IAASG,EAAM,MAAO,GACpC,QAAWF,KAAMH,EAAM,OAErB,GADYG,EAAGD,EAAMG,CAAI,IACb,GAAO,MAAO,GAE5B,OAAAL,EAAM,MAAQK,EACdJ,EAAOC,CAAI,EACJ,EACT,EACA,UAAUC,EAAI,CACZ,OAAAH,EAAM,KAAK,IAAIG,CAAE,EACV,IAAMH,EAAM,KAAK,OAAOG,CAAE,CACnC,EACA,OAAOA,EAAI,CACT,OAAAH,EAAM,OAAO,IAAIG,CAAE,EACZ,IAAMH,EAAM,OAAO,OAAOG,CAAE,CACrC,CACF,EAEMI,EAAQ,IAAI,MAAMH,EAAK,CAC3B,IAAII,EAASC,EAAM,CACjB,GAAIA,IAASf,GAAQ,MAAO,GAC5B,GAAIe,IAAS,QAAS,OAAOT,EAAM,MACnC,GAAIS,IAAS,MAAO,OAAOL,EAAI,IAC/B,GAAIK,IAAS,MAAO,OAAOL,EAAI,IAC/B,GAAIK,IAAS,YAAa,OAAOL,EAAI,UACrC,GAAIK,IAAS,SAAU,OAAOL,EAAI,OAClC,GAAIK,IAAS,OAAO,YAAa,MAAO,IAAMT,EAAM,MACpD,GAAIS,IAAS,UAAW,MAAO,IAAMT,EAAM,MAC3C,GAAIS,IAAS,WAAY,MAAO,IAAM,OAAOT,EAAM,KAAK,EAExD,IAAMH,EAAQG,EAAM,MACpB,GAAI,MAAM,QAAQH,CAAK,GAAKY,IAAS,MACnC,OAAQN,GAAO,CACb,IAAMO,EAAMb,EAAM,IAAIM,CAAE,EACxB,cAAO,eAAeO,EAAKf,GAAY,CAAE,MAAO,CAAE,OAAQY,EAAO,MAAOJ,CAAG,CAAE,CAAC,EACvEO,CACT,EAGF,GAAId,GAASC,CAAK,EAAG,CACnB,IAAMc,EAAId,EAAMY,CAAI,EACpB,OAAI,OAAOE,GAAM,WAAmBA,EAAE,KAAKd,CAAK,EACzCc,CACT,CAEF,CACF,CAAC,EAED,OAAOJ,CACT,CAEO,SAASK,EAASf,EAAO,CAC9B,MAAO,CAAC,CAACA,GAASA,EAAMH,EAAM,IAAM,EACtC,CAEO,SAASmB,EAAgBC,EAAKX,EAAI,CACvC,OAAOW,GAAK,YAAYX,CAAE,CAC5B,CAEO,SAASY,EAAWD,EAAK,CAC9B,OAAOA,GAAK,MAAM,CACpB,CAEO,SAASE,EAAUF,EAAKT,EAAMC,EAAQ,GAAO,CAClD,OAAOQ,GAAK,MAAMT,EAAMC,CAAK,CAC/B,CAEO,SAASW,GAAmBpB,EAAO,CACxC,OAAK,MAAM,QAAQA,CAAK,GACjBA,EAAMF,EAAU,GAAK,IAC9B,CC9FA,IAAMuB,GAAQ,OAAO,UAAU,EACzBC,EAAa,OAAO,eAAe,EAEzC,SAASC,GAASC,EAAO,CACvB,OAAOA,IAAU,MAAQ,OAAOA,GAAU,QAC5C,CAEA,SAASC,GAAUC,EAAM,CACvB,OAAKA,EACD,MAAM,QAAQA,CAAI,EAAUA,EACzB,OAAOA,CAAI,EACf,MAAM,GAAG,EACT,IAAKC,GAAMA,EAAE,KAAK,CAAC,EACnB,OAAO,OAAO,EALC,CAAC,CAMrB,CAEA,SAASC,GAAUC,EAAKH,EAAM,CAC5B,IAAII,EAAMD,EACV,QAAWE,KAAOL,EAAM,CACtB,GAAI,CAACI,EAAK,OACVA,EAAMA,EAAIC,CAAG,CACf,CACA,OAAOD,CACT,CAuBA,SAASE,EAAaC,EAASC,EAAMC,EAAM,CACzC,IAAMC,EAAcD,IAAS,OAAYF,EAAQ,IAAI,EAAIE,EACnDE,EAAQC,GAAUF,EAAaF,CAAI,EACnCK,EAAWN,EAAQ,SAGzB,GAFI,CAACM,GAED,CADkBN,EAAQ,aAAaI,CAAK,EAC5B,OAAOA,EAC3B,IAAMG,EAAWF,GAAUC,EAAUL,CAAI,EACzC,OAAIM,IAAa,OAAkBH,EAC/B,OAAOG,GAAa,WACfA,EAAS,CAAE,MAAAH,EAAO,KAAAH,EAAM,KAAME,CAAY,CAAC,EAE7CI,CACT,CAEA,SAASC,EAAUC,EAAKR,EAAMG,EAAO,CACnC,GAAI,CAACH,EAAK,OAAQ,OAAOG,EACzB,IAAMF,EAAO,MAAM,QAAQO,CAAG,EAAIA,EAAI,MAAM,EAAI,CAAE,GAAIA,GAAO,CAAC,CAAG,EAC7DC,EAAMR,EACV,QAAS,EAAI,EAAG,EAAID,EAAK,OAAS,EAAG,IAAK,CACxC,IAAMU,EAAMV,EAAK,CAAC,EACZW,EAAOF,EAAIC,CAAG,EACdE,EAAS,MAAM,QAAQD,CAAI,EAAIA,EAAK,MAAM,EAAI,CAAE,GAAIA,GAAQ,CAAC,CAAG,EACtEF,EAAIC,CAAG,EAAIE,EACXH,EAAMG,CACR,CACA,OAAAH,EAAIT,EAAKA,EAAK,OAAS,CAAC,CAAC,EAAIG,EACtBF,CACT,CAEA,SAASY,GAAkBd,EAASe,EAAU,CAC5C,OAAO,IAAI,MACT,CAAC,EACD,CACE,IAAIC,EAAIC,EAAM,CACZ,GAAIA,IAAS,YACX,MAAO,IAAM,CACX,IAAMC,EAAUb,GAAUL,EAAQ,IAAI,EAAGe,CAAQ,EAC3CH,GAAQ,OAAOM,CAAO,GAAK,GAAK,EACtClB,EAAQ,IAAIQ,EAAUR,EAAQ,IAAI,EAAGe,EAAUH,CAAI,CAAC,CACtD,EAEF,GAAIK,IAAS,YACX,MAAO,IAAM,CACX,IAAMC,EAAUb,GAAUL,EAAQ,IAAI,EAAGe,CAAQ,EAC3CH,GAAQ,OAAOM,CAAO,GAAK,GAAK,EACtClB,EAAQ,IAAIQ,EAAUR,EAAQ,IAAI,EAAGe,EAAUH,CAAI,CAAC,CACtD,EAEF,GAAIK,IAAS,SACX,MAAO,IAAIE,IAASnB,EAAQ,SAAS,GAAGmB,CAAI,EAE9C,GAAI,OAAOF,GAAS,SAClB,OAAOH,GAAkBd,EAASe,EAAS,OAAOE,CAAI,CAAC,CAG3D,EACA,IAAID,EAAIC,EAAMb,EAAO,CACnB,IAAMH,EAAOc,EAAS,OAAO,OAAOE,CAAI,CAAC,EACzC,OAAAjB,EAAQ,IAAIQ,EAAUR,EAAQ,IAAI,EAAGC,EAAMG,CAAK,CAAC,EAC1C,EACT,CACF,CACF,CACF,CAEA,SAASgB,GAAiBpB,EAASC,EAAO,CAAC,EAAG,CAC5C,IAAMoB,EAAO,CAAE,QAAArB,EAAS,KAAAC,CAAK,EAC7B,OAAO,IAAI,MACT,CAAC,EACD,CACE,IAAIe,EAAIC,EAAM,CACZ,GAAIA,IAASK,GAAO,MAAO,GAC3B,GAAIL,IAASM,EAAY,OAAOF,EAChC,GAAIJ,IAAS,MACX,OAAQO,GACFA,IAAM,OAAkBxB,EAAQ,IAAI,EACjCD,EAAaC,EAASC,EAAK,OAAOwB,GAAUD,CAAC,CAAC,CAAC,EAG1D,GAAIP,IAAS,MACX,MAAO,IAAIE,IAAS,CAClB,GAAIA,EAAK,SAAW,EAAG,OAAOL,GAAkBd,EAASC,CAAI,EAC7D,GAAIkB,EAAK,SAAW,EAClB,OAAOnB,EAAQ,IAAIQ,EAAUR,EAAQ,IAAI,EAAGC,EAAMkB,EAAK,CAAC,CAAC,CAAC,EAE5D,GAAM,CAACK,EAAGE,CAAC,EAAIP,EACf,OAAI,OAAOK,GAAM,SACRxB,EAAQ,IAAIQ,EAAUR,EAAQ,IAAI,EAAGC,EAAK,OAAOwB,GAAUD,CAAC,CAAC,EAAGE,CAAC,CAAC,EAEpE1B,EAAQ,IAAIQ,EAAUR,EAAQ,IAAI,EAAGC,EAAMuB,CAAC,CAAC,CACtD,EAEF,GAAIP,IAAS,YACX,OAAQU,GAAO3B,EAAQ,UAAU2B,CAAE,EAErC,GAAIV,IAAS,SACX,OAAOjB,EAAQ,OAEjB,GAAIiB,IAAS,SACX,MAAO,IAAIE,IAASnB,EAAQ,SAAS,GAAGmB,CAAI,EAE9C,GAAIF,IAAS,OAAO,YAAa,MAAO,IAAMlB,EAAaC,EAASC,CAAI,EACxE,GAAIgB,IAAS,UAAW,MAAO,IAAMlB,EAAaC,EAASC,CAAI,EAC/D,GAAIgB,IAAS,WAAY,MAAO,IAAM,OAAOlB,EAAaC,EAASC,CAAI,CAAC,EAExE,IAAMiB,EAAUnB,EAAaC,EAASC,CAAI,EAC1C,GAAI,MAAM,QAAQiB,CAAO,GAAKD,IAAS,MACrC,OAAQU,GAAO,CACb,IAAMC,EAAMV,EAAQ,IAAIS,CAAE,EAC1B,cAAO,eAAeC,EAAKL,EAAY,CAAE,MAAO,CAAE,QAAAvB,EAAS,KAAAC,EAAM,MAAO0B,CAAG,CAAE,CAAC,EACvEC,CACT,EAGF,GAAIC,GAASX,CAAO,GAAK,OAAOD,GAAS,SACvC,OAAOG,GAAiBpB,EAASC,EAAK,OAAOgB,CAAI,CAAC,CAGtD,EACA,IAAID,EAAIC,EAAMb,EAAO,CACnB,GAAI,OAAOa,GAAS,SAClB,MAAM,IAAI,MAAM,8CAA8CA,CAAI,qBAAqBhB,EAAK,OAAOgB,CAAI,EAAE,KAAK,GAAG,CAAC,YAAY,EAEhI,MAAO,EACT,CACF,CACF,CACF,CAEO,SAASa,EAAMC,EAAS,CAC7B,IAAMC,EAAaC,EAAOF,CAAO,EAC3B/B,EAAU,CACd,KAAM,QACN,IAAK,IAAMkC,EAAWF,CAAU,EAChC,IAAMpB,GAASuB,EAAUH,EAAYpB,EAAM,EAAI,EAC/C,UAAYe,GAAOS,EAAgBJ,EAAYL,CAAE,EACjD,OAAQK,EAAW,OACnB,OAAQ,CAACK,EAAYC,EAAUC,EAAU,CAAC,IAAMC,GAAcxC,EAASqC,EAAYC,EAAUC,CAAO,CACtG,EACA,OAAOE,EAAuBzC,CAAO,CACvC,CAEO,SAASyC,EAAuBzC,EAAS,CAC9C,IAAM0C,EAAQtB,GAAiBpB,EAAS,CAAC,CAAC,EAC1C,cAAO,eAAe0C,EAAOpB,GAAO,CAAE,MAAO,EAAK,CAAC,EAC5CoB,CACT,CAEA,SAASC,GAAiBvC,EAAOmC,EAAS,CACxC,OAAI,OAAOA,EAAQ,OAAU,WAAmBA,EAAQ,MAAMnC,CAAK,EAC5DA,CACT,CAEA,eAAsBoC,GAAcxC,EAASqC,EAAYC,EAAUC,EAAU,CAAC,EAAG,CAC/E,GAAI,OAAOF,GAAe,YAAc,OAAOC,GAAa,WAC1D,MAAM,IAAI,MAAM,2DAA2D,EAE7E,IAAMM,EAAOD,GAAiB3C,EAAQ,IAAI,EAAGuC,CAAO,EACpDF,EAAW,EACX,GAAI,CAEF,OADe,MAAMC,EAAS,CAEhC,OAASO,EAAK,CACZ,MAAI,OAAON,EAAQ,UAAa,WAC9BA,EAAQ,SAASM,EAAKD,CAAI,EAE1B5C,EAAQ,IAAI4C,CAAI,EAEZC,CACR,CACF,CAEO,SAASC,EAAQ1C,EAAO,CAC7B,MAAO,CAAC,CAACA,GAASA,EAAMkB,EAAK,IAAM,EACrC,CAEO,SAASyB,EAAW3C,EAAO,CAChC,IAAMiB,EAAOjB,IAAQmB,CAAU,EAC/B,MAAO,CAAC,CAACF,GAAQA,EAAK,SAAS,OAAS,UAC1C,CAEO,SAAS2B,EAAY5C,EAAO,CACjC,MAAO,CAAC,CAACA,GAASA,EAAMmB,CAAU,CACpC,CAEO,SAAS0B,EAAU7C,EAAO,CAC/B,IAAMiB,EAAOjB,IAAQmB,CAAU,EAC/B,GAAKF,EACL,OAAOtB,EAAasB,EAAK,QAASA,EAAK,IAAI,CAC7C,CAEO,SAAS6B,GAAkB9C,EAAOF,EAAM,CAC7C,IAAMmB,EAAOjB,IAAQmB,CAAU,EAC/B,GAAKF,EACL,OAAOtB,EAAasB,EAAK,QAASA,EAAK,KAAMnB,CAAI,CACnD,CAEO,SAASiD,EAAe/C,EAAOuB,EAAI,CACxC,IAAMN,EAAOjB,IAAQmB,CAAU,EAC/B,OAAKF,EACEA,EAAK,QAAQ,UAAU,CAAC+B,EAAUC,IAAa,CACpD,IAAMzC,EAAOb,EAAasB,EAAK,QAASA,EAAK,KAAM+B,CAAQ,EACrDR,EAAO7C,EAAasB,EAAK,QAASA,EAAK,KAAMgC,CAAQ,EACvDzC,IAASgC,GACbjB,EAAGf,EAAMgC,CAAI,CACf,CAAC,EANiB,IAOpB,CAEO,SAASU,GAAcjC,EAAM,CAClC,GAAKA,EACL,OAAOtB,EAAasB,EAAK,QAASA,EAAK,IAAI,CAC7C,CAEO,SAASkC,GAAmBlC,EAAMM,EAAI,CAC3C,OAAKN,EACEA,EAAK,QAAQ,UAAU,CAAC+B,EAAUC,IAAa,CACpD,IAAMzC,EAAOb,EAAasB,EAAK,QAASA,EAAK,KAAM+B,CAAQ,EACrDR,EAAO7C,EAAasB,EAAK,QAASA,EAAK,KAAMgC,CAAQ,EACvDzC,IAASgC,GACbjB,EAAGf,EAAMgC,CAAI,CACf,CAAC,EANiB,IAOpB,CAEO,SAASY,GAAcpD,EAAOQ,EAAM,CACzC,IAAMS,EAAOjB,IAAQmB,CAAU,EAC/B,GAAKF,EACL,OAAOA,EAAK,QAAQ,IAAIb,EAAUa,EAAK,QAAQ,IAAI,EAAGA,EAAK,KAAMT,CAAI,CAAC,CACxE,CAEO,SAAS6C,GAAcrD,EAAO,CACnC,IAAMiB,EAAOjB,IAAQmB,CAAU,EAC/B,MAAI,CAACF,GAAQ,CAACA,EAAK,MAAc,KAC1BA,CACT,CCtRA,SAASqC,EAAYC,EAAO,CAC1B,GAAI,CAACA,GAAS,OAAOA,GAAU,SAAU,OAAOA,EAChD,GAAI,CACF,OAAO,OAAO,OAAOA,CAAK,CAC5B,MAAQ,CACN,OAAOA,CACT,CACF,CAEA,SAASC,GAAiBC,EAAS,CACjC,OAAIA,EAAQ,SAAW,GAAK,MAAM,QAAQA,EAAQ,CAAC,CAAC,GAAK,CAACC,EAAkBD,EAAQ,CAAC,CAAC,EAAUA,EAAQ,CAAC,EAClGA,CACT,CAEA,SAASE,GAAgBC,EAAQ,CAC/B,GAAIC,EAAQD,CAAM,GAAKE,EAAYF,CAAM,EAAG,OAAOG,EAAUH,CAAM,EACnE,GAAII,EAASJ,CAAM,EAAG,OAAOK,EAAWL,CAAM,EAC9C,GAAIF,EAAkBE,CAAM,EAAG,OAAOA,CAExC,CAEA,SAASM,GAAqBN,EAAQO,EAAI,CACxC,GAAIN,EAAQD,CAAM,GAAKE,EAAYF,CAAM,EACvC,OAAOQ,EAAeR,EAAQ,CAACS,EAAMC,IAASH,EAAGb,EAAYe,CAAI,EAAGf,EAAYgB,CAAI,EAAG,IAAI,CAAC,EAE9F,GAAIN,EAASJ,CAAM,EACjB,OAAOW,EAAgBX,EAAQ,CAACS,EAAMC,IAASH,EAAGb,EAAYe,CAAI,EAAGf,EAAYgB,CAAI,EAAG,IAAI,CAAC,EAE/F,GAAIZ,EAAkBE,CAAM,EAC1B,OAAOA,EAAO,MAAM,EAAE,IAAI,CAACY,EAAOC,IAAQ,CACxC,IAAMC,EAAUD,GAAK,YAAcb,EAAO,OACpCe,EAAUF,GAAK,YAAcb,EAAO,OACpC,CAAE,KAAAS,EAAM,KAAAC,CAAK,EAAIM,GAAmBhB,EAAQY,EAAOC,EAAK,OAAO,EACrEN,EAAGE,EAAMC,EAAM,CAAE,MAAAE,EAAO,WAAYE,EAAS,WAAYC,EAAS,MAAOf,CAAO,CAAC,CACnF,CAAC,EAEH,MAAM,IAAI,MAAM,qCAAqC,CACvD,CAEA,SAASiB,GAAsBjB,EAAQO,EAAI,CACzC,GAAIN,EAAQD,CAAM,GAAKE,EAAYF,CAAM,EACvC,OAAOA,EAAO,SAAS,CAACkB,EAAUC,IAAa,CAC7C,IAAMT,EAAOU,GAAkBpB,EAAQkB,CAAQ,EACzCT,EAAOU,IAAa,OAAYC,GAAkBpB,EAAQmB,CAAQ,EAAIT,EAC5E,OAAID,IAASC,EAAa,GACdH,EAAGb,EAAYe,CAAI,EAAGf,EAAYgB,CAAI,EAAG,IAAI,IAC1C,EACjB,CAAC,EAEH,GAAIN,EAASJ,CAAM,EACjB,OAAOA,EAAO,OAAO,CAACU,EAAMD,IAASF,EAAGb,EAAYe,CAAI,EAAGf,EAAYgB,CAAI,EAAG,IAAI,CAAC,EAErF,GAAIZ,EAAkBE,CAAM,EAC1B,OAAOA,EAAO,OAAO,EAAE,IAAI,CAACY,EAAOC,IAAQ,CACzC,IAAMC,EAAUd,EAAO,OACjBe,EAAUF,GAAK,YAAcC,EAC7B,CAAE,KAAAL,EAAM,KAAAC,CAAK,EAAIM,GAAmBhB,EAAQY,EAAOC,EAAK,QAAQ,EAEtE,OADYN,EAAGE,EAAMC,EAAM,CAAE,MAAAE,EAAO,WAAYE,EAAS,WAAYC,EAAS,MAAOf,CAAO,CAAC,IAC9E,EACjB,CAAC,EAEH,MAAM,IAAI,MAAM,sCAAsC,CACxD,CAEA,SAASqB,IAAsB,CAC7B,IAAMC,EAAaC,EAAO,MAAS,EAYnC,MAAO,CAAE,MAFKC,EATE,CACd,KAAM,WACN,IAAK,IAAMnB,EAAWiB,CAAU,EAChC,IAAK,IAAM,CACT,MAAM,IAAI,MAAM,gCAAgC,CAClD,EACA,UAAYf,GAAOI,EAAgBW,EAAYf,CAAE,EACjD,OAAQ,MACV,CAC4C,EAErB,SADLE,GAASgB,EAAUH,EAAYb,EAAM,EAAI,CAC3B,CAClC,CAEA,SAASiB,GAAWC,EAAWf,EAAOC,EAAK,CACzC,GAAI,CAAC,MAAM,QAAQc,CAAS,EAAG,MAAO,CAAC,EACvC,IAAMC,EAAMD,EAAU,MAAM,EAC5B,MAAI,CAACf,GAAS,CAACA,EAAM,KAAagB,EAC9BhB,EAAM,OAAS,UACjBgB,EAAI,OAAOhB,EAAM,MAAO,EAAG,GAAIA,EAAM,OAAS,CAAC,CAAE,EAC1CgB,GAELhB,EAAM,OAAS,UACjBgB,EAAI,OAAOhB,EAAM,MAAOA,EAAM,OAAS,CAAC,EACjCgB,GAELhB,EAAM,OAAS,OACjBgB,EAAIhB,EAAM,KAAK,EAAIA,EAAM,MAClBgB,GAELhB,EAAM,OAAS,QACV,MAAM,QAAQA,EAAM,KAAK,EAAIA,EAAM,MAAM,MAAM,EAAI,CAAC,EAEtDgB,CACT,CAEA,SAASC,GAAkBF,EAAWf,EAAOC,EAAK,CAChD,GAAI,CAAC,MAAM,QAAQc,CAAS,EAAG,MAAO,CAAC,EACvC,IAAMC,EAAMD,EAAU,MAAM,EAC5B,GAAI,CAACf,GAAS,CAACA,EAAM,KAAM,OAAOgB,EAClC,GAAIhB,EAAM,OAAS,SACjB,OAAAgB,EAAI,OAAOhB,EAAM,OAAQA,EAAM,OAAS,CAAC,GAAG,MAAM,EAC3CgB,EAET,GAAIhB,EAAM,OAAS,SAAU,CAC3B,IAAMkB,EAAQlB,EAAM,OAAS,CAAC,EAC9B,OAAAgB,EAAI,OAAOhB,EAAM,MAAO,EAAG,GAAGkB,CAAK,EAC5BF,CACT,CACA,OAAIhB,EAAM,OAAS,OACjBgB,EAAIhB,EAAM,KAAK,EAAIA,EAAM,KAClBgB,GAELhB,EAAM,OAAS,QACV,MAAM,QAAQA,EAAM,SAAS,EAAIA,EAAM,UAAU,MAAM,EAAI,CAAC,EAE9DgB,CACT,CAEA,SAASZ,GAAmBhB,EAAQY,EAAOC,EAAKkB,EAAO,CACrD,IAAMC,EAAS,CAAE,KAAM,KAAM,KAAM,IAAK,EAWxC,MAAO,CAAE,KAVI,KACPA,EAAO,OACXA,EAAO,KAAOD,IAAU,QAAUF,GAAkB7B,EAAQY,EAAOC,CAAG,EAAIb,EAAO,MAAM,GAChFgC,EAAO,MAOD,KALF,KACPA,EAAO,OACXA,EAAO,KAAOD,IAAU,QAAU/B,EAAO,MAAM,EAAI0B,GAAW1B,EAAQY,EAAOC,CAAG,GACzEmB,EAAO,KAEI,CACtB,CAEA,SAASC,GAAejC,EAAQ,CAC9B,OAAIF,EAAkBE,CAAM,EAAU,IAAMA,EAAO,MAAM,EAClDD,GAAgBC,CAAM,CAC/B,CAEO,SAASkC,KAASrC,EAAS,CAChC,IAAMsC,EAAOvC,GAAiBC,CAAO,EACrC,GAAI,CAACsC,EAAK,OACR,MAAM,IAAI,MAAM,oDAAoD,EAEtE,MAAO,CACL,OAAO5B,EAAI,CACT,IAAM6B,EAASD,EAAK,IAAKnC,GACvBM,GAAqBN,EAAQ,CAACS,EAAMC,EAAMG,IAAQN,EAAGE,EAAMC,EAAMG,CAAG,CAAC,CACvE,EACA,MAAO,IAAM,CACX,QAAWwB,KAASD,EACd,OAAOC,GAAU,YAAYA,EAAM,CAE3C,CACF,EACA,QAAQ9B,EAAI+B,EAAU,CAAC,EAAG,CACxB,GAAM,CAAE,MAAA3C,EAAO,SAAA4C,CAAS,EAAIlB,GAAoB,EAC5CmB,EAAQ,EACRC,EACAC,EACAC,EAAY,KACZC,EAAW,GACXC,EAAaV,EAAK,IAAIF,EAAc,EAClCa,EAAS,OAAOR,EAAQ,QAAW,WAAaA,EAAQ,OAAS,OAAO,GACxES,EAAeC,GAAQ,CAC3B,GAAI,OAAOV,EAAQ,SAAY,WAAY,CACzCA,EAAQ,QAAQU,CAAG,EACnB,MACF,CACI,OAAO,QAAY,KAAe,OAAO,QAAQ,OAAU,YAC7D,QAAQ,MAAMA,CAAG,CAErB,EACMC,EAAa,CAACC,EAAYC,EAAYC,IAAS,CACnD,GAAIR,EAAU,OACd,IAAMS,EAAU,EAAEb,EACZc,EAAOJ,EACb,GAAI,OAAOZ,EAAQ,MAAS,WAAY,CACtC,IAAIiB,EACJ,GAAI,CACFA,EAAWpB,EAAK,SAAW,EAAIG,EAAQ,KAAKgB,EAAK,CAAC,EAAGH,EAAW,CAAC,EAAGC,EAAK,CAAC,CAAC,EAAId,EAAQ,KAAKgB,EAAMH,EAAYC,CAAI,CACpH,OAASJ,EAAK,CACZD,EAAYC,CAAG,EACf,MACF,CACA,GAAIO,IAAad,EAAU,OAC3BA,EAAWc,CACb,CACA,IAAIC,EACJ,GAAI,CACFA,EAASrB,EAAK,SAAW,EAAI5B,EAAG+C,EAAK,CAAC,EAAGH,EAAW,CAAC,EAAGC,EAAK,CAAC,CAAC,EAAI7C,EAAG+C,EAAMH,EAAYC,CAAI,CAC9F,OAASJ,EAAK,CACZD,EAAYC,CAAG,EACf,MACF,CACA,GAAIQ,GAAU,OAAOA,EAAO,MAAS,WAAY,CAC/CA,EACG,KAAM/C,GAAS,CACV4C,IAAYb,GAASI,GACrBE,EAAOJ,EAAWjC,CAAI,IAC1BiC,EAAYjC,EACZ8B,EAAS9B,CAAI,EACf,CAAC,EACA,MAAOuC,GAAQD,EAAYC,CAAG,CAAC,EAClC,MACF,CACIF,EAAOJ,EAAWc,CAAM,IAC5Bd,EAAYc,EACZjB,EAASiB,CAAM,EACjB,EACMC,EAAc,CAACP,EAAYC,EAAYC,IAAS,CACpD,GAAIR,EAAU,OACd,IAAMc,EAAQ,KAAK,IAAI,EAAGpB,EAAQ,UAAY,CAAC,EAC/C,GAAI,CAACoB,EAAO,CACVT,EAAWC,EAAYC,EAAYC,CAAI,EACvC,MACF,CACIT,GAAW,aAAaA,CAAS,EACrCA,EAAY,WAAW,IAAM,CAC3BA,EAAY,KACZM,EAAWC,EAAYC,EAAYC,CAAI,CACzC,EAAGM,CAAK,CACV,EACAD,EAAYZ,EAAYA,EAAYV,EAAK,IAAI,IAAM,IAAI,CAAC,EACxD,IAAMC,EAASD,EAAK,IAAI,CAACnC,EAAQ2D,IAC/BrD,GAAqBN,EAAQ,CAACS,EAAMC,EAAMG,IAAQ,CAChD,IAAMqC,EAAaf,EAAK,IAAIF,EAAc,EAC1CiB,EAAWS,CAAK,EAAIlD,EACpB,IAAM0C,EAAaN,EAAW,MAAM,EACpCM,EAAWQ,CAAK,EAAIjD,EACpBmC,EAAaK,EACb,IAAME,EAAOjB,EAAK,IAAI,IAAM,IAAI,EAChCiB,EAAKO,CAAK,EAAI9C,EACd4C,EAAYP,EAAYC,EAAYC,CAAI,CAC1C,CAAC,CACH,EACA,cAAO,eAAezD,EAAO,UAAW,CACtC,MAAO,IAAM,CACXiD,EAAW,GACXJ,IACIG,GAAW,aAAaA,CAAS,EACrC,QAAWN,KAASD,EACd,OAAOC,GAAU,YAAYA,EAAM,CAE3C,EACA,WAAY,EACd,CAAC,EACM1C,CACT,CACF,CACF,CAEO,SAASiE,MAAU/D,EAAS,CACjC,IAAMsC,EAAOvC,GAAiBC,CAAO,EACrC,GAAI,CAACsC,EAAK,OACR,MAAM,IAAI,MAAM,qDAAqD,EAEvE,MAAO,CACL,OAAO5B,EAAI,CACT,IAAM6B,EAASD,EAAK,IAAKnC,GACvBiB,GAAsBjB,EAAQ,CAACS,EAAMC,EAAMG,IAAQN,EAAGE,EAAMC,EAAMG,CAAG,CAAC,CACxE,EACA,MAAO,IAAM,CACX,QAAWwB,KAASD,EACd,OAAOC,GAAU,YAAYA,EAAM,CAE3C,CACF,EACA,QAAQ9B,EAAI+B,EAAU,CAAC,EAAG,CACxB,GAAM,CAAE,MAAA3C,EAAO,SAAA4C,CAAS,EAAIlB,GAAoB,EAC5CmB,EAAQ,EACRC,EACAC,EACAC,EAAY,KACZC,EAAW,GACTE,EAAS,OAAOR,EAAQ,QAAW,WAAaA,EAAQ,OAAS,OAAO,GACxES,EAAeC,GAAQ,CAC3B,GAAI,OAAOV,EAAQ,SAAY,WAAY,CACzCA,EAAQ,QAAQU,CAAG,EACnB,MACF,CACI,OAAO,QAAY,KAAe,OAAO,QAAQ,OAAU,YAC7D,QAAQ,MAAMA,CAAG,CAErB,EACMC,EAAa,CAACC,EAAYC,EAAYC,IAAS,CACnD,GAAIR,EAAU,OACd,IAAMS,EAAU,EAAEb,EAClB,GAAI,OAAOF,EAAQ,MAAS,WAAY,CACtC,IAAIiB,EACJ,GAAI,CACFA,EACEpB,EAAK,SAAW,EACZG,EAAQ,KAAKY,EAAW,CAAC,EAAGC,EAAW,CAAC,EAAGC,EAAK,CAAC,CAAC,EAClDd,EAAQ,KAAKY,EAAYC,EAAYC,CAAI,CACjD,OAASJ,EAAK,CACZD,EAAYC,CAAG,EACf,MACF,CACA,GAAIO,IAAad,EAAU,OAC3BA,EAAWc,CACb,CACA,IAAIC,EACJ,GAAI,CACFA,EACErB,EAAK,SAAW,EACZ5B,EAAG2C,EAAW,CAAC,EAAGC,EAAW,CAAC,EAAGC,EAAK,CAAC,CAAC,EACxC7C,EAAG2C,EAAYC,EAAYC,CAAI,CACvC,OAASJ,EAAK,CACZD,EAAYC,CAAG,EACf,MACF,CACA,GAAIQ,GAAU,OAAOA,EAAO,MAAS,WAAY,CAC/CA,EACG,KAAM/C,GAAS,CACV4C,IAAYb,GAASI,GACrBE,EAAOJ,EAAWjC,CAAI,IAC1BiC,EAAYjC,EACZ8B,EAAS9B,CAAI,EACf,CAAC,EACA,MAAOuC,GAAQD,EAAYC,CAAG,CAAC,EAClC,MACF,CACIF,EAAOJ,EAAWc,CAAM,IAC5Bd,EAAYc,EACZjB,EAASiB,CAAM,EACjB,EACMC,EAAc,CAACP,EAAYC,EAAYC,IAAS,CACpD,GAAIR,EAAU,OACd,IAAMc,EAAQ,KAAK,IAAI,EAAGpB,EAAQ,UAAY,CAAC,EAC/C,GAAI,CAACoB,EAAO,CACVT,EAAWC,EAAYC,EAAYC,CAAI,EACvC,MACF,CACIT,GAAW,aAAaA,CAAS,EACrCA,EAAY,WAAW,IAAM,CAC3BA,EAAY,KACZM,EAAWC,EAAYC,EAAYC,CAAI,CACzC,EAAGM,CAAK,CACV,EACMtB,EAASD,EAAK,IAAI,CAACnC,EAAQ2D,IAC/B1C,GAAsBjB,EAAQ,CAACS,EAAMC,EAAMG,IAAQ,CACjD,IAAMgD,EAAgB1B,EAAK,IAAIF,EAAc,EACvCiB,EAAaW,EAAc,MAAM,EACvCX,EAAWS,CAAK,EAAIlD,EACpB,IAAM0C,EAAaU,EAAc,MAAM,EACvCV,EAAWQ,CAAK,EAAIjD,EACpB,IAAM0C,EAAOjB,EAAK,IAAI,IAAM,IAAI,EAChCiB,EAAKO,CAAK,EAAI9C,EACd4C,EAAYP,EAAYC,EAAYC,CAAI,CAC1C,CAAC,CACH,EACA,cAAO,eAAezD,EAAO,UAAW,CACtC,MAAO,IAAM,CACXiD,EAAW,GACXJ,IACIG,GAAW,aAAaA,CAAS,EACrC,QAAWN,KAASD,EACd,OAAOC,GAAU,YAAYA,EAAM,CAE3C,EACA,WAAY,EACd,CAAC,EACM1C,CACT,CACF,CACF,CAEO,SAASmE,GAAI9D,EAAQL,EAAO,CACjC,GAAIM,EAAQD,CAAM,GAAKE,EAAYF,CAAM,EAAG,CAC1C+D,GAAc/D,EAAQL,CAAK,EAC3B,MACF,CACA,GAAIS,EAASJ,CAAM,EAAG,CACpByB,EAAUzB,EAAQL,CAAK,EACvB,MACF,CACA,GAAIG,EAAkBE,CAAM,EAAG,CAC7B,GAAI,OAAOA,EAAO,OAAU,WAC1B,MAAM,IAAI,MAAM,yDAAyD,EAE3EA,EAAO,MAAML,CAAK,EAClB,MACF,CACA,MAAM,IAAI,MAAM,wCAAwC,CAC1D,CAEA,SAASqE,GAAarE,EAAO,CAC3B,OAAO,OAAOA,GAAU,WAAaA,EAAM,EAAIA,CACjD,CAEO,SAASsE,GAAUjE,EAAQkE,EAAUC,EAAUC,EAAY,CAChE,GAAI,OAAOF,GAAa,WACtB,MAAM,IAAI,MAAM,qEAAqE,EAEvF,GAAIC,IAAa,OACf,OAAOjC,EAAMlC,CAAM,EAAE,QAASS,GAASyD,EAASF,GAAavD,CAAI,CAAC,CAAC,EAErE,GAAI,OAAO0D,GAAa,WACtB,MAAM,IAAI,MAAM,oEAAoE,EAEtF,IAAME,EAAK,OAAOD,GAAe,WAAaA,EAAa,OAAO,GAC9DE,EAAeJ,EAASF,GAAajE,GAAgBC,CAAM,CAAC,CAAC,EACjE,OAAOkC,EAAMlC,CAAM,EAAE,OAAQS,GAAS,CACpC,IAAM8D,EAAeL,EAASF,GAAavD,CAAI,CAAC,EAChD,GAAI4D,EAAGC,EAAcC,CAAY,EAAG,OACpC,IAAMC,EAAIF,EACVA,EAAeC,EACfJ,EAASI,EAAcC,CAAC,CAC1B,CAAC,CACH,CCjaO,SAASC,EAAQC,EAAO,CAC7B,OAAIC,EAASD,CAAK,EAAUE,EAAWF,CAAK,EACxCG,EAAQH,CAAK,GAAKI,EAAYJ,CAAK,EAAUK,EAAUL,CAAK,EACzDA,CACT,CCHA,SAASM,GAAWC,EAAO,CACzB,OAAIC,EAAWD,CAAK,EAAUA,EAC1BE,EAASF,CAAK,EAEZ,OADYG,EAAWH,CAAK,GACT,WACd,IAAII,IAAS,CAClB,IAAMC,EAAOF,EAAWH,CAAK,EAC7B,GAAI,OAAOK,GAAS,WAAY,OAAOA,EAAK,GAAGD,CAAI,CAErD,EAEKE,EAAMN,CAAK,EAAE,QAASK,GAASA,CAAI,EAExCE,EAAQP,CAAK,GAAKQ,EAAYR,CAAK,EAEjC,OADYS,EAAUT,CAAK,GACR,WACd,IAAII,IAAS,CAClB,IAAMC,EAAOI,EAAUT,CAAK,EAC5B,GAAI,OAAOK,GAAS,WAAY,OAAOA,EAAK,GAAGD,CAAI,CAErD,EAEKE,EAAMN,CAAK,EAAE,QAASK,GAASA,CAAI,EAExC,OAAOL,GAAU,WAAmBA,EACjCM,EAAMI,EAAMV,CAAK,CAAC,EAAE,QAASK,GAASA,CAAI,CACnD,CAEO,SAASM,GAASC,EAAO,CAI9B,GAHIV,EAASU,CAAK,GAAKL,EAAQK,CAAK,GAAKJ,EAAYI,CAAK,GAGtD,CAACA,GAAS,OAAOA,GAAU,SAC7B,OAAOb,GAAWa,CAAK,EAEzB,IAAMC,EAAQ,IAAI,IAClB,OAAO,IAAI,MAAMD,EAAO,CACtB,IAAIE,EAAQC,EAAM,CAChB,GAAI,OAAOA,GAAS,SAAU,OAAOD,EAAOC,CAAI,EAChD,GAAIF,EAAM,IAAIE,CAAI,EAAG,OAAOF,EAAM,IAAIE,CAAI,EAC1C,IAAMf,EAAQc,EAAOC,CAAI,EACnBC,EAAWjB,GAAWC,CAAK,EACjC,OAAAa,EAAM,IAAIE,EAAMC,CAAQ,EACjBA,CACT,CACF,CAAC,CACH,CC7CA,SAASC,GAASC,EAAO,CACvB,OAAOA,IAAU,MAAQ,OAAOA,GAAU,QAC5C,CAEA,SAASC,GAAWD,EAAO,CACzB,OAAOE,EAASF,CAAK,GAAKG,EAAQH,CAAK,GAAKI,EAAYJ,CAAK,GAAKK,EAAWL,CAAK,CACpF,CAEA,SAASM,GAAQN,EAAO,CACtB,GAAI,CAAC,MAAM,QAAQA,CAAK,GAAKA,EAAM,SAAW,EAAG,MAAO,GACxD,IAAMO,EAASP,EAAM,CAAC,EAChBQ,EAASR,EAAM,CAAC,EACtB,OAAIC,GAAWM,CAAM,EAAU,OAAOC,GAAW,YAAc,OAAOA,GAAW,QAEnF,CAEA,SAASC,GAAeC,EAAQC,EAAM,CAAC,EAAG,CACxC,QAAWX,KAASU,EAAQ,CAC1B,GAAIJ,GAAQN,CAAK,EAAG,CAClBW,EAAI,KAAKX,CAAK,EACd,QACF,CACA,GAAI,MAAM,QAAQA,CAAK,EAAG,CACxBS,GAAeT,EAAOW,CAAG,EACzB,QACF,CACAA,EAAI,KAAKX,CAAK,CAChB,CACA,OAAOW,CACT,CAEA,SAASC,GAAeC,EAAO,CAC7B,GAAI,CAACA,EAAM,OAAQ,MAAO,CAAE,MAAAA,EAAO,QAAS,CAAE,UAAW,GAAI,YAAa,EAAM,CAAE,EAClF,IAAMC,EAAOD,EAAMA,EAAM,OAAS,CAAC,EACnC,GACEd,GAASe,CAAI,GACb,CAAC,MAAM,QAAQA,CAAI,GACnB,CAACb,GAAWa,CAAI,IACf,OAAO,UAAU,eAAe,KAAKA,EAAM,WAAW,GACrD,OAAO,UAAU,eAAe,KAAKA,EAAM,aAAa,GAC1D,CACA,IAAMC,EAAU,CACd,UAAWD,EAAK,WAAa,GAC7B,YAAaA,EAAK,aAAe,EACnC,EACA,MAAO,CAAE,MAAOD,EAAM,MAAM,EAAG,EAAE,EAAG,QAAAE,CAAQ,CAC9C,CACA,MAAO,CAAE,MAAAF,EAAO,QAAS,CAAE,UAAW,GAAI,YAAa,EAAM,CAAE,CACjE,CAEA,SAASG,GAAehB,EAAOiB,EAAS,CAEtC,GADIhB,GAAWD,CAAK,GAAGiB,EAAQ,KAAKjB,CAAK,EACrC,MAAM,QAAQA,CAAK,GAAKA,EAAM,OAAQ,CACxC,IAAMO,EAASP,EAAM,CAAC,EAClBC,GAAWM,CAAM,GAAGU,EAAQ,KAAKV,CAAM,CAC7C,CACF,CAEA,SAASW,GAAYC,EAAM,CACzB,GAAI,MAAM,QAAQA,CAAI,EAAG,CACvB,IAAMZ,EAASY,EAAK,CAAC,EACfX,EAASW,EAAK,CAAC,EACfnB,EAAQoB,EAAQb,CAAM,EAC5B,OAAI,OAAOC,GAAW,WAAmBA,EAAOR,CAAK,EACjD,OAAOQ,GAAW,SAAiBR,EAAQQ,EAAS,GACjDR,CACT,CACA,OAAI,OAAOmB,GAAS,WAAmBA,EAAK,EACrCC,EAAQD,CAAI,CACrB,CAEO,SAASE,MAAUC,EAAO,CAC/B,IAAMC,EAAad,GAAea,CAAK,EACjC,CAAE,MAAAT,EAAO,QAAAE,CAAQ,EAAIH,GAAeW,CAAU,EAC9CN,EAAU,CAAC,EACjB,QAAWE,KAAQN,EAAOG,GAAeG,EAAMF,CAAO,EACtD,IAAMO,EAAQ,IAAM,CAClB,IAAMd,EAASG,EAAM,IAAIK,EAAW,EAAE,IAAKlB,GAAWA,GAAS,KAAO,GAAK,OAAOA,CAAK,CAAE,EAEzF,OADiBe,EAAQ,YAAcL,EAAO,OAAO,OAAO,EAAIA,GAChD,KAAKK,EAAQ,SAAS,CACxC,EACA,OAAKE,EAAQ,OACNQ,EAAMR,CAAO,EAAE,QAAQO,CAAK,EADPA,EAAM,CAEpC,CCrFA,SAASE,GAAYC,EAAO,CAC1B,MACE,CAAC,CAACA,GACF,OAAOA,GAAU,UACjB,OAAOA,EAAM,UAAa,YAC1B,OAAOA,EAAM,UAAa,YAC1B,OAAOA,EAAM,WAAc,UAE/B,CAEA,SAASC,GAAYD,EAAO,CAC1B,OAAOE,EAAQF,CAAK,GAAKG,EAAYH,CAAK,CAC5C,CAEA,SAASI,GAAUC,EAAKC,EAAM,CAC5B,IAAIC,EAAMF,EACV,QAAWG,KAAOF,EAAM,CACtB,GAAI,CAACC,EAAK,OACVA,EAAMA,EAAIC,CAAG,CACf,CACA,OAAOD,CACT,CAEA,SAASE,GAAUJ,EAAKC,EAAMN,EAAO,CACnC,GAAI,CAACM,EAAK,OAAQ,OAAON,EACzB,IAAMU,EAAO,MAAM,QAAQL,CAAG,EAAIA,EAAI,MAAM,EAAI,CAAE,GAAIA,GAAO,CAAC,CAAG,EAC7DE,EAAMG,EACV,QAAS,EAAI,EAAG,EAAIJ,EAAK,OAAS,EAAG,IAAK,CACxC,IAAME,EAAMF,EAAK,CAAC,EACZK,EAAOJ,EAAIC,CAAG,EACdI,EAAS,MAAM,QAAQD,CAAI,EAAIA,EAAK,MAAM,EAAI,CAAE,GAAIA,GAAQ,CAAC,CAAG,EACtEJ,EAAIC,CAAG,EAAII,EACXL,EAAMK,CACR,CACA,OAAAL,EAAID,EAAKA,EAAK,OAAS,CAAC,CAAC,EAAIN,EACtBU,CACT,CAEA,SAASG,GAAeC,EAAO,CAC7B,MAAI,CAACA,GAAS,CAACA,EAAM,OAAe,KAC7BA,EAAM,IAAKC,GAAM,OAAOA,CAAC,EAAE,MAAM,GAAG,EAAE,IAAKC,GAAMA,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO,CAAC,CACnF,CAEA,SAASC,GAAUjB,EAAOkB,EAAU,CAClC,GAAI,CAACA,EAAU,OAAOlB,EACtB,IAAIW,EAAOX,EACX,QAAWM,KAAQY,EAAU,CAC3B,IAAMC,EAAIf,GAAUJ,EAAOM,CAAI,EAC/BK,EAAOF,GAAUE,EAAML,EAAMa,CAAC,CAChC,CACA,OAAOR,CACT,CAEA,SAASS,GAAiBpB,EAAO,CAC/B,OAAO,KAAK,UAAUA,EAAO,CAACqB,EAAMF,IAAM,CACxC,GAAI,OAAOA,GAAM,YACb,OAAOA,GAAM,SACjB,OAAOA,CACT,CAAC,CACH,CAEA,SAASG,GAAmBC,EAAM,CAChC,OAAO,KAAK,MAAMA,CAAI,CACxB,CAEA,SAASC,GAAaC,EAAQP,EAAU,CACtC,GAAIjB,GAAYwB,CAAM,EAAG,OAAOR,GAAUS,EAAUD,CAAM,EAAGP,CAAQ,EACrE,GAAInB,GAAY0B,CAAM,EAAG,OAAOR,GAAUQ,EAAO,SAAS,EAAGP,CAAQ,EACrE,MAAM,IAAI,MAAM,qCAAqC,CACvD,CAEA,SAASS,GAAcF,EAAQG,EAAU,CACvC,GAAI3B,GAAYwB,CAAM,EAAG,CACvBI,GAAcJ,EAAQG,CAAQ,EAC9B,MACF,CACA,GAAI7B,GAAY0B,CAAM,EAAG,CACvBA,EAAO,SAASG,EAAU,EAAI,EAC9B,MACF,CACA,MAAM,IAAI,MAAM,qCAAqC,CACvD,CAEA,SAASE,GAAiBL,EAAQM,EAAI,CACpC,GAAI9B,GAAYwB,CAAM,EAAG,OAAOO,EAAMP,CAAM,EAAE,OAAOM,CAAE,EACvD,GAAIhC,GAAY0B,CAAM,EAAG,OAAOA,EAAO,UAAUM,CAAE,EACnD,MAAM,IAAI,MAAM,qCAAqC,CACvD,CAEA,SAASE,GAAYC,EAAS,CAC5B,GAAI,CACF,MAAI,CAACA,GAAW,OAAOA,EAAQ,SAAY,WAAmB,KACvDA,CACT,MAAQ,CACN,OAAO,IACT,CACF,CAEO,SAASC,GAAQV,EAAQW,EAAU,CAAC,EAAG,CAC5C,IAAM5B,EAAM4B,EAAQ,IACpB,GAAI,CAAC5B,EAAK,MAAM,IAAI,MAAM,0CAA0C,EAEpE,IAAM0B,EAAUD,GAAYG,EAAQ,UAAY,OAAO,aAAiB,IAAc,aAAe,KAAK,EACpGlB,EAAWL,GAAeuB,EAAQ,KAAK,EACvCC,EAAYD,EAAQ,WAAahB,GACjCkB,EAAcF,EAAQ,aAAed,GACrCiB,EAAUH,EAAQ,SAAW,EAC7BI,EAAUJ,EAAQ,SAAW,KAC7BK,EAAYL,EAAQ,WAAa,KACjCM,EAAa,KAAK,IAAI,EAAGN,EAAQ,UAAY,CAAC,EAEpD,GAAIF,EAAS,CACX,IAAMS,EAAMT,EAAQ,QAAQ1B,CAAG,EAC/B,GAAImC,GAAO,KAAM,CACf,IAAIC,EAAU,KACd,GAAI,CACFA,EAAUN,EAAYK,CAAG,CAC3B,MAAQ,CACNC,EAAU,IACZ,CACA,GAAIA,GAAW,KAAM,CACnB,IAAIC,EAAOD,EACPzB,EAAI,KACJyB,GAAW,OAAOA,GAAY,UAAY,SAAUA,GAAW,MAAOA,IACxEC,EAAOD,EAAQ,KACfzB,EAAIyB,EAAQ,GAEVzB,GAAK,MAAQA,IAAMoB,GAAW,OAAOC,GAAY,aACnDK,EAAOL,EAAQK,EAAM1B,CAAC,GAEpB,OAAOsB,GAAc,aACvBI,EAAOJ,EAAUI,CAAI,GAEnBA,IAAS,QACXlB,GAAcF,EAAQoB,CAAI,CAE9B,CACF,CACF,CAEA,IAAIC,EAAY,GACZC,EAAY,KAEVC,EAAQ,IAAM,CAClBF,EAAY,GACZ,IAAMlB,EAAWJ,GAAaC,EAAQP,CAAQ,EACxC0B,EAAU,CAAE,EAAGL,EAAS,KAAMX,CAAS,EAC7C,GAAI,CACFM,GAAS,UAAU1B,EAAK6B,EAAUO,CAAO,CAAC,CAC5C,MAAQ,CACN,MACF,CACF,EAaMK,EAAcnB,GAAiBL,EAXf,IAAM,CAC1B,GAAKS,EACL,IAAIQ,GAAc,EAAG,CACnBM,EAAM,EACN,MACF,CACIF,IACJA,EAAY,GACZC,EAAY,WAAWC,EAAON,CAAU,GAC1C,CAE0D,EAE1D,cAAO,eAAejB,EAAQ,iBAAkB,CAC9C,MAAO,IAAM,CACPsB,GAAW,aAAaA,CAAS,EACjC,OAAOE,GAAgB,YAAYA,EAAY,CACrD,EACA,WAAY,EACd,CAAC,EAEMxB,CACT,CChLA,SAASyB,GAASC,EAAO,CACvB,OAAOA,IAAU,MAAQ,OAAOA,GAAU,QAC5C,CAEA,SAASC,EAAWD,EAAO,CACzB,GAAI,CAACD,GAASC,CAAK,EAAG,OAAOA,EAC7B,GAAI,MAAM,QAAQA,CAAK,EAAG,OAAOA,EAAM,IAAIC,CAAU,EACrD,IAAMC,EAAM,CAAC,EACb,OAAW,CAACC,EAAGC,CAAC,IAAK,OAAO,QAAQJ,CAAK,EACvCE,EAAIC,CAAC,EAAIF,EAAWG,CAAC,EAEvB,OAAOF,CACT,CAEA,SAASG,GAAUC,EAAGC,EAAG,CACvB,GAAID,IAAMC,EAAG,MAAO,GAGpB,GAFI,OAAOD,GAAM,OAAOC,GACpB,CAACR,GAASO,CAAC,GAAK,CAACP,GAASQ,CAAC,GAC3B,MAAM,QAAQD,CAAC,IAAM,MAAM,QAAQC,CAAC,EAAG,MAAO,GAClD,GAAI,MAAM,QAAQD,CAAC,EAAG,CACpB,GAAIA,EAAE,SAAWC,EAAE,OAAQ,MAAO,GAClC,QAASC,EAAI,EAAGA,EAAIF,EAAE,OAAQE,IAC5B,GAAI,CAACH,GAAUC,EAAEE,CAAC,EAAGD,EAAEC,CAAC,CAAC,EAAG,MAAO,GAErC,MAAO,EACT,CACA,IAAMC,EAAQ,OAAO,KAAKH,CAAC,EACrBI,EAAQ,OAAO,KAAKH,CAAC,EAC3B,GAAIE,EAAM,SAAWC,EAAM,OAAQ,MAAO,GAC1C,QAAWP,KAAKM,EAEd,GADI,CAAC,OAAO,UAAU,eAAe,KAAKF,EAAGJ,CAAC,GAC1C,CAACE,GAAUC,EAAEH,CAAC,EAAGI,EAAEJ,CAAC,CAAC,EAAG,MAAO,GAErC,MAAO,EACT,CAEA,SAASQ,GAAYC,EAAQZ,EAAO,CAClC,GAAIA,GAAS,MAAQA,IAAU,GAAM,OAAOY,EAC5C,GAAIZ,IAAU,GACZ,OAAAY,EAAO,MAAQ,GACRA,EAET,GAAI,OAAOZ,GAAU,SACnB,OAAAY,EAAO,MAAQZ,EACRY,EAET,GAAIb,GAASC,CAAK,EAAG,CACnB,OAAW,CAACG,EAAGC,CAAC,IAAK,OAAO,QAAQJ,CAAK,EACvCY,EAAOT,CAAC,EAAIC,EAEd,OAAOQ,CACT,CACA,OAAOA,CACT,CAEO,SAASC,GAAKC,EAAS,CAC5B,IAAMC,EAAkBd,EAAWa,CAAO,EACpCE,EAASC,EAAMhB,EAAWa,CAAO,CAAC,EAClCI,EAAOD,EAAM,CAAC,CAAC,EACfE,EAASF,EAAM,CAAC,CAAC,EACjBG,EAAUH,EAAM,CAAC,CAAC,EAClBI,EAAQJ,EAAM,EAAK,EACnBK,EAAa,IAAI,IAEnBC,EAAQ,EAENC,EAAgB,IAAM,CAC1B,IAAMC,EAAU,EAAEF,EACZG,EAAa,CAAC,EACdC,EAAWX,EAAO,IAAI,EACtBY,EAAQ,CAAC,EAEf,QAAWC,KAAaP,EACtB,GAAI,CACF,IAAMQ,EAASD,EAAUF,CAAQ,EAC7BG,GAAU,OAAOA,EAAO,MAAS,WACnCF,EAAM,KACJE,EAAO,KAAM9B,GAAU,CACrBW,GAAYe,EAAY1B,CAAK,CAC/B,CAAC,CACH,EAEAW,GAAYe,EAAYI,CAAM,CAElC,OAASC,EAAK,CACZpB,GAAYe,EAAYK,GAAK,SAAW,EAAI,CAC9C,CAGF,GAAIH,EAAM,OAAQ,CAChB,QAAQ,IAAIA,CAAK,EAAE,KAAK,IAAM,CACxBH,IAAYF,GAChBJ,EAAO,IAAIO,CAAU,CACvB,CAAC,EACD,MACF,CAEAP,EAAO,IAAIO,CAAU,CACvB,EAEA,OAAAM,EAAMhB,CAAM,EAAE,OAAO,IAAM,CACzB,IAAMiB,EAAU,CAAC5B,GAAUW,EAAO,IAAI,EAAGD,CAAe,EACpDM,EAAM,IAAI,IAAMY,GAASZ,EAAM,IAAIY,CAAO,EAC1CX,EAAW,MAAME,EAAc,CACrC,CAAC,EAUM,CACL,OAAAR,EACA,KAAAE,EACA,OAAAC,EACA,QAAAC,EACA,MAAAC,EACA,WAAAC,EACA,MAfY,IAAM,CAClBN,EAAO,IAAIf,EAAWc,CAAe,CAAC,EACtCK,EAAQ,IAAI,CAAC,CAAC,EACdD,EAAO,IAAI,CAAC,CAAC,EACbE,EAAM,IAAI,EAAK,EACfH,EAAK,IAAI,CAAC,CAAC,CACb,CAUA,CACF,CCzHO,SAASgB,EAAcC,EAAOC,EAAM,CACzC,OAAO,SAAS,cAAc,GAAGD,CAAK,IAAIC,CAAI,EAAE,CAClD,CAQO,SAASC,EAAaC,EAAOC,EAAKC,EAAU,CACjD,IAAIC,EAAUH,EAAM,YACpB,KAAOG,GAAWA,IAAYF,GAAK,CACjC,IAAMG,EAAOD,EAAQ,YACrBD,IAAWC,CAAO,EAClBA,EAAQ,OAAO,EACfA,EAAUC,CACZ,CACF,CChBO,IAAMC,GAAN,cAAuBC,CAAW,CACvCC,GACAC,GACAC,GAAS,KACTC,GAAO,KACPC,GAAW,GACXC,GAAS,KACTC,GAAY,CAAC,EAEb,YAAYC,EAAOC,EAAY,CAC7B,MAAM,EACN,KAAKR,GAASO,EACd,KAAKN,GAAcO,CACrB,CAEA,UAAUC,EAAQC,EAAY,CAC5B,GAAI,KAAKN,GAAU,OACnB,KAAKA,GAAW,GAChB,KAAKF,GAASS,EAAc,gBAAiB,MAAM,EACnD,KAAKR,GAAOQ,EAAc,cAAe,MAAM,EAC/CF,EAAO,aAAa,KAAKP,GAAQQ,CAAU,EAC3CD,EAAO,aAAa,KAAKN,GAAMO,CAAU,EAEzC,IAAME,EAAU,KAAKC,GAAW,EAChC,KAAKC,GAAUF,CAAO,EACtB,KAAKG,GAAM,CACb,CAEA,SAAU,CACH,KAAKX,KACV,KAAKA,GAAW,GACZ,KAAKC,IAAQ,KAAKA,GAAO,EAC7B,KAAKA,GAAS,KACd,KAAKW,GAAS,EACV,KAAKd,IAAU,KAAKC,KACtBc,EAAa,KAAKf,GAAQ,KAAKC,EAAI,EACnC,KAAKD,GAAO,OAAO,EACnB,KAAKC,GAAK,OAAO,GAEnB,KAAKD,GAAS,KACd,KAAKC,GAAO,KACd,CAEA,eAAee,EAAQ,CAErB,OADc,KAAKL,GAAW,EACjB,IAAI,CAACM,EAAMC,IAAU,CAChC,IAAMC,EAAYC,EAAMH,CAAI,EACtBI,EAAcC,EAAOJ,CAAK,EAChC,OAAOF,EAAO,KAAKjB,GAAYoB,EAAWE,CAAW,CAAC,CACxD,CAAC,EAAE,KAAK,EAAE,CACZ,CAEAV,IAAa,CACX,OAAIY,EAAkB,KAAKzB,EAAM,EAAU,KAAKA,GAC5C0B,EAAS,KAAK1B,EAAM,EAAU2B,EAAW,KAAK3B,EAAM,GAAK,CAAC,EAC1D4B,EAAQ,KAAK5B,EAAM,GAAK6B,EAAY,KAAK7B,EAAM,EAAU8B,EAAU,KAAK9B,EAAM,GAAK,CAAC,EACjF,MAAM,QAAQ,KAAKA,EAAM,EAAI,KAAKA,GAAS,CAAC,CACrD,CAEAe,IAAQ,CACN,GAAIU,EAAkB,KAAKzB,EAAM,EAAG,CAClC,KAAKK,GAAS,KAAKL,GAAO,UAAW+B,GAAU,CAC7C,GAAK,KAAK3B,GACV,IAAI2B,EAAM,OAAS,QAAS,CAC1B,KAAKC,GAAOD,EAAM,KAAK,EACvB,MACF,CACA,GAAIA,EAAM,OAAS,SAAU,CAC3B,QAASE,EAAI,EAAGA,EAAIF,EAAM,MAAM,OAAQE,IACtC,KAAKC,GAAQH,EAAM,MAAQE,EAAGF,EAAM,MAAME,CAAC,CAAC,EAE9C,KAAKE,GAAeJ,EAAM,MAAQA,EAAM,MAAM,MAAM,EACpD,MACF,CACA,GAAIA,EAAM,OAAS,SAAU,CAC3B,KAAKK,GAAQL,EAAM,MAAOA,EAAM,KAAK,EACrC,KAAKI,GAAeJ,EAAM,KAAK,EAC/B,MACF,CACIA,EAAM,OAAS,OACjB,KAAKM,GAAKN,EAAM,MAAOA,EAAM,KAAK,EAEtC,CAAC,EACD,MACF,CAEA,GAAIL,EAAS,KAAK1B,EAAM,EAAG,CACzB,KAAKK,GAASiC,EAAgB,KAAKtC,GAAQ,IAAM,CAC/C,KAAKgC,GAAO,KAAKnB,GAAW,CAAC,CAC/B,CAAC,EACD,MACF,EAEIe,EAAQ,KAAK5B,EAAM,GAAK6B,EAAY,KAAK7B,EAAM,KACjD,KAAKK,GAASkC,EAAe,KAAKvC,GAAQ,IAAM,CAC9C,KAAKgC,GAAO,KAAKnB,GAAW,CAAC,CAC/B,CAAC,EAEL,CAEAC,GAAUP,EAAO,CACf,KAAKD,GAAY,CAAC,EAClB,QAAS2B,EAAI,EAAGA,EAAI1B,EAAM,OAAQ0B,IAChC,KAAKC,GAAQD,EAAG1B,EAAM0B,CAAC,CAAC,CAE5B,CAEAjB,IAAW,CACT,QAAWwB,KAAM,KAAKlC,GAAW,CAC/B,QAAWmC,KAAKD,EAAG,OAAQE,EAAS,QAAQD,CAAC,EAC7CxB,EAAauB,EAAG,MAAOA,EAAG,GAAG,EAC7BA,EAAG,MAAM,OAAO,EAChBA,EAAG,IAAI,OAAO,CAChB,CACA,KAAKlC,GAAY,CAAC,CACpB,CAEA0B,GAAOzB,EAAO,CACZ,KAAKS,GAAS,EACd,KAAKF,GAAUP,CAAK,CACtB,CAEA2B,GAAQd,EAAOD,EAAM,CACnB,IAAMwB,EAAUvB,EAAQ,KAAKd,GAAU,OAAS,KAAKA,GAAUc,CAAK,EAAE,MAAQ,KAAKjB,GAC7EyC,EAAYjC,EAAc,gBAAiB,MAAM,EACjDkC,EAAUlC,EAAc,cAAe,MAAM,EAC7CF,EAAS,KAAKN,GAAK,WACzBM,EAAO,aAAamC,EAAWD,CAAO,EACtClC,EAAO,aAAaoC,EAASF,CAAO,EACpC,IAAMtB,EAAYC,EAAMH,CAAI,EACtBI,EAAcC,EAAOJ,CAAK,EAC1B0B,EAAW,KAAK7C,GAAc,KAAKA,GAAYoB,EAAWE,CAAW,EAAIJ,EACzE4B,EAASL,EAAS,UAAUI,CAAQ,EAC1C,QAAWL,KAAKM,EAAQ,KAAKC,GAAiBvC,EAAQgC,EAAGI,CAAO,EAChE,KAAKvC,GAAU,OAAOc,EAAO,EAAG,CAAE,MAAOwB,EAAW,IAAKC,EAAS,OAAAE,EAAQ,MAAO1B,EAAW,MAAOE,CAAY,CAAC,CAClH,CAEAa,GAAQhB,EAAO6B,EAAO,CACpB,IAAMC,EAAU,KAAK5C,GAAU,OAAOc,EAAO6B,CAAK,EAClD,QAAWT,KAAMU,EAAS,CACxB,QAAWT,KAAKD,EAAG,OAAQE,EAAS,QAAQD,CAAC,EAC7CxB,EAAauB,EAAG,MAAOA,EAAG,GAAG,EAC7BA,EAAG,MAAM,OAAO,EAChBA,EAAG,IAAI,OAAO,CAChB,CACF,CAEAH,GAAKjB,EAAOD,EAAM,CAChB,IAAMgC,EAAM,KAAK7C,GAAUc,CAAK,EAChC,GAAI+B,GAAOA,EAAI,MAAO,CACpBA,EAAI,MAAM,IAAIhC,CAAI,EAClB,MACF,CACA,KAAKiB,GAAQhB,EAAO,CAAC,EACrB,KAAKc,GAAQd,EAAOD,CAAI,CAC1B,CAEAgB,GAAeiB,EAAW,CACxB,QAASnB,EAAImB,EAAWnB,EAAI,KAAK3B,GAAU,OAAQ2B,IAAK,CACtD,IAAMkB,EAAM,KAAK7C,GAAU2B,CAAC,EACxBkB,EAAI,OAAOE,EAAUF,EAAI,MAAOlB,CAAC,CACvC,CACF,CAEAe,GAAiBvC,EAAQ6C,EAAY5C,EAAY,CAC/C,GAAIgC,EAAS,aAAaY,CAAU,EAAG,CACrCA,EAAW,UAAU7C,EAAQC,CAAU,EACvC,MACF,CACIgC,EAAS,UAAUY,CAAU,GAC/B7C,EAAO,aAAa6C,EAAY5C,CAAU,CAE9C,CACF,EAEO,SAAS6C,GAAKhD,EAAOC,EAAY,CACtC,OAAO,IAAIV,GAASS,EAAOC,CAAU,CACvC,CClLA,IAAMgD,GAAO,OAAO,SAAS,EAE7B,SAASC,GAAsBC,EAAO,CACpC,GAAIA,GAAS,KAAM,MAAO,GAC1B,IAAMC,EAAO,OAAOD,EAEpB,OADIC,IAAS,UAAYA,IAAS,UAAYA,IAAS,WACnDA,IAAS,UAAY,CAAC,MAAM,QAAQD,CAAK,CAE/C,CAEO,IAAME,GAAN,cAAuBC,CAAW,CACvCC,GACAC,GACAC,GACAC,GAAS,KACTC,GAAO,KACPC,GAAW,GACXC,GAAS,KACTC,GAAiB,CAAC,EAElB,YAAYC,EAAQC,EAAYC,EAAa,CAC3C,MAAM,EACN,KAAKV,GAAUQ,EACf,KAAKP,GAAcQ,EACnB,KAAKP,GAAeQ,EACpB,OAAO,eAAe,KAAMhB,GAAM,CAAE,MAAO,EAAK,CAAC,CACnD,CAEA,UAAUiB,EAAQC,EAAY,CACxB,KAAKP,KACT,KAAKA,GAAW,GAChB,KAAKF,GAASU,EAAc,gBAAiB,MAAM,EACnD,KAAKT,GAAOS,EAAc,cAAe,MAAM,EAC/CF,EAAO,aAAa,KAAKR,GAAQS,CAAU,EAC3CD,EAAO,aAAa,KAAKP,GAAMQ,CAAU,EAEzC,KAAKE,GAAQ,EACb,KAAKC,GAAM,EACb,CAEA,SAAU,CACH,KAAKV,KACV,KAAKA,GAAW,GACZ,KAAKC,IAAQ,KAAKA,GAAO,EAC7B,KAAKA,GAAS,KACd,KAAKU,GAAS,EACV,KAAKb,IAAU,KAAKC,KACtBa,EAAa,KAAKd,GAAQ,KAAKC,EAAI,EACnC,KAAKD,GAAO,OAAO,EACnB,KAAKC,GAAK,OAAO,GAEnB,KAAKD,GAAS,KACd,KAAKC,GAAO,KACd,CAEAW,IAAQ,CACN,GAAIG,EAAQ,KAAKlB,EAAO,GAAKmB,EAAY,KAAKnB,EAAO,EAAG,CACtD,KAAKM,GAASc,EAAe,KAAKpB,GAAS,IAAM,KAAKc,GAAQ,CAAC,EAC/D,MACF,CACIO,EAAS,KAAKrB,EAAO,IACvB,KAAKM,GAASgB,EAAgB,KAAKtB,GAAS,IAAM,KAAKc,GAAQ,CAAC,EAEpE,CAEAS,IAAQ,CACN,OAAIL,EAAQ,KAAKlB,EAAO,GAAKmB,EAAY,KAAKnB,EAAO,EAAU,CAAC,CAACwB,EAAU,KAAKxB,EAAO,EACnFqB,EAAS,KAAKrB,EAAO,EAAU,CAAC,CAACyB,EAAW,KAAKzB,EAAO,EACrD,CAAC,CAAC,KAAKA,EAChB,CAEA,WAAY,CAEV,IAAMJ,EADY,KAAK2B,GAAM,EACH,KAAKtB,GAAY,EAAI,KAAKC,KAAe,EACnE,GAAI,EAAAwB,EAAS,aAAa9B,CAAK,GAAK8B,EAAS,UAAU9B,CAAK,IACvDD,GAAsBC,CAAK,EAChC,OAAOA,CACT,CAEA,eAAe+B,EAAI,CACjB,OAAIT,EAAQ,KAAKlB,EAAO,GAAKmB,EAAY,KAAKnB,EAAO,EAC5CoB,EAAe,KAAKpB,GAAS,IAAM2B,EAAG,KAAK,UAAU,CAAC,CAAC,EAE5DN,EAAS,KAAKrB,EAAO,EAChBsB,EAAgB,KAAKtB,GAAS,IAAM2B,EAAG,KAAK,UAAU,CAAC,CAAC,EAE1D,IACT,CAEAX,IAAW,CACT,QAAWY,KAAK,KAAKrB,GAAgBmB,EAAS,QAAQE,CAAC,EACvD,KAAKrB,GAAiB,CAAC,EACnB,KAAKJ,IAAU,KAAKC,IAAMa,EAAa,KAAKd,GAAQ,KAAKC,EAAI,CACnE,CAEAU,IAAU,CACR,KAAKE,GAAS,EAEd,IAAMpB,EADY,KAAK2B,GAAM,EACH,KAAKtB,GAAY,EAAI,KAAKC,KAAe,EAC7D2B,EAASH,EAAS,UAAU9B,CAAK,EACvC,KAAKW,GAAiBsB,EACtB,QAAWD,KAAKC,EACVH,EAAS,aAAaE,CAAC,EACzBA,EAAE,UAAU,KAAKxB,GAAK,WAAY,KAAKA,EAAI,EAClCsB,EAAS,UAAUE,CAAC,GAC7B,KAAKxB,GAAK,WAAW,aAAawB,EAAG,KAAKxB,EAAI,CAGpD,CAEA,eAAe0B,EAAQ,CAErB,IAAMlC,EADY,KAAK2B,GAAM,EACH,KAAKtB,GAAY,EAAI,KAAKC,KAAe,EACnE,OAAO4B,EAAOlC,CAAK,CACrB,CACF,EAEO,SAASmC,GAAKvB,EAAQC,EAAYC,EAAa,CACpD,OAAO,IAAIZ,GAASU,EAAQC,EAAYC,CAAW,CACrD,CAEO,SAASsB,GAAOpC,EAAO,CAC5B,MAAO,CAAC,CAACA,GAASA,EAAMF,EAAI,IAAM,EACpC,CAEO,SAASuC,GAAcrC,EAAO,CACnC,OAAOA,GAAO,YAAY,CAC5B,CAEO,SAASsC,GAAmBtC,EAAO+B,EAAI,CAC5C,OAAO/B,GAAO,iBAAiB+B,CAAE,CACnC,CCrIO,IAAMQ,GAAN,cAAgCC,CAAW,CAChDC,GACAC,GACAC,GACAC,GAAS,KACTC,GAAO,KACPC,GAAW,GACXC,GAAiB,CAAC,EAElB,YAAYC,EAASC,EAAO,CAC1B,MAAM,EACN,KAAKR,GAAYO,GAAS,UAAY,KACtC,KAAKN,GAAWM,GAAS,SAAW,KACpC,KAAKL,GAASM,CAChB,CAEA,UAAUC,EAAQC,EAAY,CACxB,KAAKL,KACT,KAAKA,GAAW,GAChB,KAAKF,GAASQ,EAAc,iBAAkB,OAAO,EACrD,KAAKP,GAAOO,EAAc,eAAgB,OAAO,EACjDF,EAAO,aAAa,KAAKN,GAAQO,CAAU,EAC3CD,EAAO,aAAa,KAAKL,GAAMM,CAAU,EACzC,KAAKE,GAAY,EACnB,CAEA,SAAU,CACH,KAAKP,KACV,KAAKA,GAAW,GAChB,KAAKQ,GAAS,EACV,KAAKV,IAAU,KAAKC,KACtBU,EAAa,KAAKX,GAAQ,KAAKC,EAAI,EACnC,KAAKD,GAAO,OAAO,EACnB,KAAKC,GAAK,OAAO,GAEnB,KAAKD,GAAS,KACd,KAAKC,GAAO,KACd,CAEAS,IAAW,CACT,QAAWE,KAAK,KAAKT,GAAgBU,EAAS,QAAQD,CAAC,EACvD,KAAKT,GAAiB,CAAC,EACnB,KAAKH,IAAU,KAAKC,IAAMU,EAAa,KAAKX,GAAQ,KAAKC,EAAI,CACnE,CAEAa,GAAaC,EAAO,CAClB,IAAMC,EAASH,EAAS,UAAUE,CAAK,EACvC,KAAKZ,GAAiBa,EACtB,QAAWJ,KAAKI,EACVH,EAAS,aAAaD,CAAC,EACzBA,EAAE,UAAU,KAAKX,GAAK,WAAY,KAAKA,EAAI,EAClCY,EAAS,UAAUD,CAAC,GAC7B,KAAKX,GAAK,WAAW,aAAaW,EAAG,KAAKX,EAAI,CAGpD,CAEAQ,IAAc,CACZ,KAAKC,GAAS,EACd,GAAI,CACF,IAAMK,EAAQ,OAAO,KAAKhB,IAAW,WAAa,KAAKA,GAAO,EAAI,KAAKA,GACvE,KAAKe,GAAaC,CAAK,CACzB,OAASE,EAAO,CACd,KAAKC,GAAaD,CAAK,CACzB,CACF,CAEAC,GAAaD,EAAO,CAClB,GAAI,CACE,OAAO,KAAKnB,IAAa,YAC3B,KAAKA,GAASmB,EAAO,CAAE,MAAO,QAAS,CAAC,CAE5C,MAAQ,CAER,CACA,GAAI,CACF,GAAI,KAAKpB,GAAW,CAClB,IAAMkB,EAAQ,OAAO,KAAKlB,IAAc,WAAa,KAAKA,GAAUoB,CAAK,EAAI,KAAKpB,GAClF,KAAKiB,GAAaC,CAAK,CACzB,CACF,MAAQ,CAER,CACF,CAEA,eAAeI,EAAQ,CACrB,GAAI,CACF,IAAMJ,EAAQ,OAAO,KAAKhB,IAAW,WAAa,KAAKA,GAAO,EAAI,KAAKA,GACvE,OAAOoB,EAAOJ,CAAK,CACrB,OAASE,EAAO,CACd,GAAI,OAAO,KAAKnB,IAAa,WAC3B,GAAI,CACF,KAAKA,GAASmB,EAAO,CAAE,MAAO,QAAS,CAAC,CAC1C,MAAQ,CAAC,CAEX,GAAI,KAAKpB,GAAW,CAClB,IAAMuB,EAAW,OAAO,KAAKvB,IAAc,WAAa,KAAKA,GAAUoB,CAAK,EAAI,KAAKpB,GACrF,OAAOsB,EAAOC,CAAQ,CACxB,CACA,MAAO,EACT,CACF,CACF,EAEO,SAASC,GAAcjB,EAASC,EAAO,CAC5C,OAAO,IAAIV,GAAkBS,EAASC,CAAK,CAC7C,CCxGA,SAASiB,GAAMC,EAAOC,EAAKC,EAAK,CAC9B,OAAO,KAAK,IAAID,EAAK,KAAK,IAAIC,EAAKF,CAAK,CAAC,CAC3C,CAEA,SAASG,GAASH,EAAO,CACvB,OAAO,OAAOA,GAAU,UAAY,CAAC,OAAO,MAAMA,CAAK,CACzD,CAEO,IAAMI,GAAN,cAA8BC,CAAW,CAC9CC,GACAC,GACAC,GACAC,GACAC,GACAC,GAAa,KACbC,GAAU,KACVC,GAAW,KACXC,GAAW,GACXC,GAAS,KACTC,GAAkB,KAClBC,GAAgB,EAChBC,GAAc,EACdC,GAAY,GACZC,GAAiB,CAAC,EAClBC,GAAa,GAEb,YAAYC,EAAOC,EAAU,CAAC,EAAG,CAC/B,MAAM,EACN,KAAKjB,GAASgB,EACd,KAAKf,GAAcgB,EAAQ,OAC3B,KAAKf,GAAae,EAAQ,YAAc,aAAe,aAAe,WACtE,KAAKd,GAAYN,GAASoB,EAAQ,QAAQ,EAAI,KAAK,IAAI,EAAGA,EAAQ,QAAQ,EAAI,EAC9E,KAAKb,GAAYP,GAASoB,EAAQ,QAAQ,EAAIA,EAAQ,SAAW,IACnE,CAEA,UAAUC,EAAQC,EAAY,CAC5B,GAAI,KAAKX,GAAU,OACnB,GAAI,OAAO,KAAKP,IAAgB,WAC9B,MAAM,IAAI,MAAM,yDAAyD,EAE3E,KAAKO,GAAW,GAEhB,IAAMY,EAAY,SAAS,cAAc,KAAK,EAC9CA,EAAU,MAAM,SAAW,WAC3BA,EAAU,MAAM,SAAW,OAC3BA,EAAU,MAAM,MAAQ,OACxBA,EAAU,MAAM,OAAS,OACzBA,EAAU,MAAM,QAAU,eAE1B,IAAMC,EAAS,SAAS,cAAc,KAAK,EAC3CA,EAAO,MAAM,SAAW,WACxBA,EAAO,MAAM,MAAQ,KAAKnB,KAAe,aAAe,MAAQ,OAChEmB,EAAO,MAAM,OAAS,KAAKnB,KAAe,aAAe,OAAS,MAElE,IAAMoB,EAAU,SAAS,cAAc,KAAK,EAC5CA,EAAQ,MAAM,SAAW,WACzBA,EAAQ,MAAM,IAAM,IACpBA,EAAQ,MAAM,KAAO,IACrBA,EAAQ,MAAM,WAAa,YACvB,KAAKpB,KAAe,eACtBoB,EAAQ,MAAM,QAAU,OACxBA,EAAQ,MAAM,cAAgB,OAGhCF,EAAU,YAAYC,CAAM,EAC5BD,EAAU,YAAYE,CAAO,EAC7BJ,EAAO,aAAaE,EAAWD,CAAU,EAEzC,KAAKd,GAAae,EAClB,KAAKd,GAAUe,EACf,KAAKd,GAAWe,EAEhBF,EAAU,iBAAiB,SAAU,KAAKG,EAAS,EACnD,KAAKC,GAAeN,CAAM,EAC1B,KAAKO,GAAgBP,CAAM,EAC3B,KAAKQ,GAAQ,EACb,KAAKC,GAAM,CACb,CAEA,SAAU,CACH,KAAKnB,KACV,KAAKA,GAAW,GACZ,KAAKC,IAAQ,KAAKA,GAAO,EAC7B,KAAKA,GAAS,KACV,KAAKJ,IACP,KAAKA,GAAW,oBAAoB,SAAU,KAAKkB,EAAS,EAE1D,KAAKb,KACP,KAAKA,GAAgB,WAAW,EAChC,KAAKA,GAAkB,MAEzB,KAAKkB,GAAS,EACd,KAAKvB,IAAY,OAAO,EACxB,KAAKA,GAAa,KAClB,KAAKC,GAAU,KACf,KAAKC,GAAW,KAClB,CAEAsB,IAAa,CACX,OAAIC,EAAkB,KAAK9B,EAAM,EAAU,KAAKA,GAC5C+B,EAAS,KAAK/B,EAAM,EAAUgC,EAAW,KAAKhC,EAAM,GAAK,CAAC,EAC1DiC,EAAQ,KAAKjC,EAAM,GAAKkC,EAAY,KAAKlC,EAAM,EAAUmC,EAAU,KAAKnC,EAAM,GAAK,CAAC,EACjF,MAAM,QAAQ,KAAKA,EAAM,EAAI,KAAKA,GAAS,CAAC,CACrD,CAEA2B,IAAQ,CACN,GAAIG,EAAkB,KAAK9B,EAAM,EAAG,CAClC,KAAKS,GAAS,KAAKT,GAAO,UAAU,IAAM,KAAK0B,GAAQ,CAAC,EACxD,MACF,CACA,GAAIK,EAAS,KAAK/B,EAAM,EAAG,CACzB,KAAKS,GAAS2B,EAAgB,KAAKpC,GAAQ,IAAM,KAAK0B,GAAQ,CAAC,EAC/D,MACF,EACIO,EAAQ,KAAKjC,EAAM,GAAKkC,EAAY,KAAKlC,EAAM,KACjD,KAAKS,GAAS4B,EAAe,KAAKrC,GAAQ,IAAM,KAAK0B,GAAQ,CAAC,EAElE,CAEAF,GAAeN,EAAQ,CACjB,OAAO,eAAmB,MAC9B,KAAKR,GAAkB,IAAI,eAAe,IAAM,CAC9C,KAAKe,GAAgBP,CAAM,EAC3B,KAAKQ,GAAQ,CACf,CAAC,EACD,KAAKhB,GAAgB,QAAQQ,CAAM,EACrC,CAEAO,GAAgBP,EAAQ,CACtB,IAAMoB,EAAOpB,GAAQ,wBAAwB,EACxCoB,IACL,KAAK3B,GAAgB,KAAKT,KAAe,aAAeoC,EAAK,MAAQA,EAAK,OAC5E,CAEAC,IAAmB,CAEjB,GADI,KAAKnC,IAAa,MAClB,CAAC,KAAKG,GAAU,OACpB,IAAMiC,EAAQ,KAAKjC,GAAS,kBAC5B,GAAI,CAACiC,EAAO,OACZ,IAAMF,EAAOE,EAAM,sBAAsB,EACnCC,EAAO,KAAKvC,KAAe,aAAeoC,EAAK,MAAQA,EAAK,OAC9DzC,GAAS4C,CAAI,GAAKA,EAAO,IAAG,KAAKrC,GAAYqC,EACnD,CAEAb,IAAW,CACT,QAAWc,KAAK,KAAK5B,GAAgB6B,EAAS,QAAQD,CAAC,EACvD,KAAK5B,GAAiB,CAAC,EACnB,KAAKP,IAAU,KAAKA,GAAS,gBAAgB,CACnD,CAEAqC,GAAa5B,EAAO6B,EAAOC,EAAKC,EAAQ,CACtC,GAAI,CAAC,KAAKxC,GAAU,OACpB,KAAKqB,GAAS,EACd,IAAMoB,EAAQhC,EAAM,MAAM6B,EAAOC,EAAM,CAAC,EAClCG,EAAS,CAAC,EAChB,QAASC,EAAI,EAAGA,EAAIF,EAAM,OAAQE,IAAK,CACrC,IAAMC,EAAQN,EAAQK,EAChBxD,EAAQ,KAAKO,GAAY+C,EAAME,CAAC,EAAGC,CAAK,EACxCC,EAAaT,EAAS,UAAUjD,CAAK,EAC3C,QAAWgD,KAAKU,EAAYH,EAAO,KAAKP,CAAC,CAC3C,CACA,KAAK5B,GAAiBmC,EACtB,QAAWP,KAAKO,EACVN,EAAS,aAAaD,CAAC,EACzBA,EAAE,UAAU,KAAKnC,GAAU,IAAI,EACtBoC,EAAS,UAAUD,CAAC,GAC7B,KAAKnC,GAAS,YAAYmC,CAAC,EAG3B,KAAKxC,KAAe,aACtB,KAAKK,GAAS,MAAM,UAAY,cAAcwC,CAAM,MAEpD,KAAKxC,GAAS,MAAM,UAAY,cAAcwC,CAAM,KAExD,CAEArB,IAAU,CACR,GAAI,CAAC,KAAKlB,IAAY,CAAC,KAAKH,GAAY,OACxC,IAAMW,EAAQ,KAAKa,GAAW,EACxBwB,EAAQrC,EAAM,OACpB,GAAI,CAAC,KAAKV,GAAS,OAEnB,GAAI+C,IAAU,EAAG,CACf,KAAK/C,GAAQ,MAAM,MAAQ,KAAKJ,KAAe,aAAe,MAAQ,OACtE,KAAKI,GAAQ,MAAM,OAAS,KAAKJ,KAAe,aAAe,OAAS,MACxE,KAAK0B,GAAS,EACd,MACF,CAEA,GAAI,KAAKxB,IAAa,MAAQ,CAAC,KAAKW,GAAY,CAC9C,KAAKA,GAAa,GAClB,KAAK6B,GAAa5B,EAAO,EAAG,EAAG,CAAC,EAChC,sBAAsB,IAAM,CAC1B,KAAKuB,GAAiB,EACtB,KAAKxB,GAAa,GAClB,KAAKW,GAAQ,CACf,CAAC,EACD,MACF,CAEA,IAAMe,EAAO,KAAKrC,IAAa,EACzBkD,EAAW,KAAK3C,KAAkB,KAAKT,KAAe,aAAe,KAAKG,GAAW,YAAc,KAAKA,GAAW,cACnHkD,EAAY,KAAKrD,KAAe,aAAe,KAAKG,GAAW,WAAa,KAAKA,GAAW,UAC5FmD,EAAe,KAAK,KAAKF,EAAWb,CAAI,EACxCI,EAAQpD,GAAM,KAAK,MAAM8D,EAAYd,CAAI,EAAI,KAAKtC,GAAW,EAAG,KAAK,IAAI,EAAGkD,EAAQ,CAAC,CAAC,EACtFP,EAAMrD,GAAMoD,EAAQW,EAAe,KAAKrD,GAAY,EAAI,EAAG,EAAGkD,EAAQ,CAAC,EACvEN,EAASF,EAAQJ,EAEjBgB,EAAQJ,EAAQZ,EAClB,KAAKvC,KAAe,cACtB,KAAKI,GAAQ,MAAM,MAAQ,GAAGmD,CAAK,KACnC,KAAKnD,GAAQ,MAAM,OAAS,SAE5B,KAAKA,GAAQ,MAAM,OAAS,GAAGmD,CAAK,KACpC,KAAKnD,GAAQ,MAAM,MAAQ,QAGzB,EAAAuC,IAAU,KAAKjC,IAAekC,IAAQ,KAAKjC,MAC/C,KAAKD,GAAciC,EACnB,KAAKhC,GAAYiC,EACjB,KAAKF,GAAa5B,EAAO6B,EAAOC,EAAKC,CAAM,EAC7C,CAEAxB,GAAY,IAAM,CAChB,KAAKG,GAAQ,CACf,EAEA,eAAegC,EAAQ,CAErB,OADc,KAAK7B,GAAW,EACjB,IAAI,CAAC8B,EAAMR,IAAUO,EAAO,KAAKzD,GAAY0D,EAAMR,CAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAClF,CACF,EAEO,SAASS,GAAY5C,EAAOC,EAAS,CAC1C,OAAO,IAAInB,GAAgBkB,EAAOC,CAAO,CAC3C,CC9OA,SAAS4C,GAAcC,EAAQ,CAC7B,MAAI,CAACA,GAAU,OAAO,SAAa,IAAoB,SAAS,KAC5D,OAAOA,GAAW,SAAiB,SAAS,cAAcA,CAAM,EAC7DA,CACT,CAEO,IAAMC,GAAN,cAAyBC,CAAW,CACzCC,GACAC,GACAC,GAAW,GACXC,GAAiB,CAAC,EAElB,YAAYN,EAAQO,EAAS,CAC3B,MAAM,EACN,KAAKJ,GAAUH,EACf,KAAKI,GAAWG,CAClB,CAEA,UAAUC,EAASC,EAAa,CAC9B,GAAI,KAAKJ,GAAU,OACnB,KAAKA,GAAW,GAChB,IAAMK,EAAWX,GAAc,KAAKI,EAAO,EAC3C,GAAI,CAACO,EAAU,MAAM,IAAI,MAAM,0BAA0B,EACzD,IAAMC,EAAQ,OAAO,KAAKP,IAAa,WAAa,KAAKA,GAAS,EAAI,KAAKA,GACrEQ,EAASC,EAAS,UAAUF,CAAK,EACvC,KAAKL,GAAiBM,EACtB,QAAWE,KAAKF,EACVC,EAAS,aAAaC,CAAC,EACzBA,EAAE,UAAUJ,EAAU,IAAI,EACjBG,EAAS,UAAUC,CAAC,GAC7BJ,EAAS,YAAYI,CAAC,CAG5B,CAEA,SAAU,CACR,GAAK,KAAKT,GACV,MAAKA,GAAW,GAChB,QAAWS,KAAK,KAAKR,GAAgBO,EAAS,QAAQC,CAAC,EACvD,KAAKR,GAAiB,CAAC,EACzB,CAEA,eAAeS,EAAQ,CACrB,IAAMJ,EAAQ,OAAO,KAAKP,IAAa,WAAa,KAAKA,GAAS,EAAI,KAAKA,GAC3E,OAAOW,EAAOJ,CAAK,CACrB,CACF,EAEO,SAASK,GAAOhB,EAAQO,EAAS,CACtC,OAAIA,IAAY,OACP,IAAIN,GAAW,KAAMD,CAAM,EAE7B,IAAIC,GAAWD,EAAQO,CAAO,CACvC,CCrDA,SAASU,GAAiBC,EAAO,CAG/B,OAFI,OAAOA,GAAU,UACjBA,aAAiB,aACjBA,aAAiB,KAAaA,EAC3B,KAAK,UAAUA,CAAK,CAC7B,CAEA,SAASC,GAAaD,EAAO,CAC3B,OAAOA,CACT,CAEA,SAASE,GAAaC,EAAS,CAC7B,OAAO,KAAK,IAAI,IAAO,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGA,EAAU,CAAC,CAAC,EAAG,GAAM,CACtE,CAEO,IAAMC,EAAN,KAAsB,CAC3BC,GACAC,GACAC,GAAM,KACNC,GAAU,IAAIC,EACdC,GACAC,GAAe,GACfC,GAAkB,KAClBC,GACAC,GACAC,GACAC,GACAC,GAEA,YAAYC,EAAU,CAAC,EAAG,CACxB,KAAKb,GAAOa,EAAQ,IACpB,KAAKZ,GAAaY,EAAQ,UAC1B,KAAKL,GAAa,OAAOK,EAAQ,WAAc,WAAaA,EAAQ,UAAYnB,GAChF,KAAKe,GAAS,OAAOI,EAAQ,OAAU,WAAaA,EAAQ,MAAQjB,GACpE,KAAKc,GAAaG,EAAQ,WAAa,GACvC,KAAKF,GAAcE,EAAQ,YAAc,IACzC,KAAKD,GAAS,OAAOC,EAAQ,gBAAmB,WAAaA,EAAQ,eAAiBhB,GAEtF,KAAKQ,GAASS,EAAM,CAClB,OAAQ,OACR,UAAW,GACX,aAAc,GACd,SAAU,EACV,YAAa,KACb,UAAW,IACb,CAAC,GAEGD,EAAQ,aAAe,KACzB,KAAK,QAAQ,CAEjB,CAEA,OAAQ,CACN,OAAO,KAAKR,EACd,CAEA,QAAS,CACP,OAAO,KAAKF,GAAQ,MAAM,QAAQ,CACpC,CAEA,OAAQ,CACN,OAAO,KAAKA,GAAQ,MAAM,OAAO,CACnC,CAEA,OAAOY,EAAM,CACX,KAAKf,GAAOe,CACd,CAEA,SAAU,CACR,GAAI,CAAC,KAAKf,GAAM,MAAM,IAAI,MAAM,0CAA0C,EAC1E,GAAI,KAAKE,KAAQ,KAAKA,GAAI,aAAe,UAAU,MAAQ,KAAKA,GAAI,aAAe,UAAU,YAC3F,OAEF,KAAKc,GAAgB,EACrB,KAAKV,GAAe,GACpB,KAAKD,GAAO,IAAI,EAAE,OAAS,aAC3B,KAAKA,GAAO,IAAI,EAAE,aAAe,GAEjC,IAAMY,EAAK,IAAI,UAAU,KAAKjB,GAAM,KAAKC,EAAU,EACnD,KAAKC,GAAMe,EAEXA,EAAG,iBAAiB,OAASC,GAAU,CACrC,KAAKb,GAAO,IAAI,EAAE,OAAS,OAC3B,KAAKA,GAAO,IAAI,EAAE,UAAY,GAC9B,KAAKA,GAAO,IAAI,EAAE,aAAe,GACjC,KAAKA,GAAO,IAAI,EAAE,SAAW,EAC7B,KAAKF,GAAQ,UAAU,OAAQ,CAAE,MAAAe,CAAM,EAAG,CAAE,OAAQ,IAAK,CAAC,CAC5D,CAAC,EAEDD,EAAG,iBAAiB,UAAYC,GAAU,CACxC,IAAIC,EAAOD,EAAM,KACjB,GAAI,CACFC,EAAO,KAAKV,GAAOU,CAAI,CACzB,OAASC,EAAK,CACZ,KAAKf,GAAO,IAAI,EAAE,UAAYe,EAC9B,KAAKjB,GAAQ,UAAU,QAAS,CAAE,MAAOiB,CAAI,EAAG,CAAE,OAAQ,IAAK,CAAC,EAChE,MACF,CACA,IAAMC,EAAU,CAAE,KAAAF,EAAM,IAAKD,EAAM,IAAK,EAC7B,KAAKf,GAAQ,WAAW,UAAWkB,EAAS,CAAE,OAAQ,IAAK,CAAC,IAEvE,KAAKhB,GAAO,IAAI,EAAE,YAAcc,EAChC,KAAKhB,GAAQ,UAAU,UAAWkB,EAAS,CAAE,OAAQ,IAAK,CAAC,EAC7D,CAAC,EAEDJ,EAAG,iBAAiB,QAAUC,GAAU,CACtC,KAAKb,GAAO,IAAI,EAAE,UAAYa,EAC9B,KAAKf,GAAQ,UAAU,QAAS,CAAE,MAAOe,CAAM,EAAG,CAAE,OAAQ,IAAK,CAAC,CACpE,CAAC,EAEDD,EAAG,iBAAiB,QAAUC,GAAU,CACtC,KAAKb,GAAO,IAAI,EAAE,OAAS,SAC3B,KAAKA,GAAO,IAAI,EAAE,UAAY,GAC9B,KAAKF,GAAQ,UAAU,QAAS,CAAE,MAAAe,CAAM,EAAG,CAAE,OAAQ,IAAK,CAAC,EACvD,MAAKZ,IACJ,KAAKI,IACV,KAAKY,GAAmB,CAC1B,CAAC,CACH,CAEA,KAAK3B,EAAO,CACV,GAAI,CAAC,KAAKO,IAAO,KAAKA,GAAI,aAAe,UAAU,KACjD,MAAM,IAAI,MAAM,0CAA0C,EAE5D,IAAMmB,EAAU,CAAE,KAAM1B,CAAM,EAE9B,GAAI,CADO,KAAKQ,GAAQ,WAAW,OAAQkB,EAAS,CAAE,OAAQ,IAAK,CAAC,EAC3D,OACT,IAAME,EAAM,KAAKf,GAAWb,CAAK,EACjC,KAAKO,GAAI,KAAKqB,CAAG,EACjB,KAAKpB,GAAQ,UAAU,OAAQ,CAAE,KAAMR,EAAO,IAAA4B,CAAI,EAAG,CAAE,OAAQ,IAAK,CAAC,CACvE,CAEA,MAAMC,EAAMC,EAAQ,CAClB,KAAKnB,GAAe,GACpB,KAAKU,GAAgB,EACrB,KAAKd,IAAK,MAAMsB,EAAMC,CAAM,CAC9B,CAEAH,IAAqB,CACnB,GAAI,KAAKf,GAAiB,OAC1B,IAAMmB,EAAW,KAAKrB,GAAO,IAAI,EAAE,SAAW,EAC9C,GAAIqB,EAAW,KAAKf,GAAa,OACjC,KAAKN,GAAO,IAAI,EAAE,SAAWqB,EAC7B,KAAKrB,GAAO,IAAI,EAAE,aAAe,GACjC,IAAMsB,EAAQ,KAAK,IAAI,EAAG,KAAKf,GAAOc,CAAQ,CAAC,EAC/C,KAAKvB,GAAQ,UAAU,YAAa,CAAE,QAASuB,EAAU,MAAAC,CAAM,EAAG,CAAE,OAAQ,IAAK,CAAC,EAClF,KAAKpB,GAAkB,WAAW,IAAM,CACtC,KAAKA,GAAkB,KACvB,KAAK,QAAQ,CACf,EAAGoB,CAAK,CACV,CAEAX,IAAkB,CACX,KAAKT,KACV,aAAa,KAAKA,EAAe,EACjC,KAAKA,GAAkB,KACzB,CACF,EAEO,SAASqB,GAAgBf,EAAS,CACvC,OAAO,IAAId,EAAgBc,CAAO,CACpC,CCpKA,IAAMgB,GAAgB,CACpB,EAAIC,GAAS,QAAQ,KAAKA,CAAI,EAC9B,EAAIA,GAAS,WAAW,KAAKA,CAAI,EACjC,IAAMA,GAAS,cAAc,KAAKA,CAAI,EACtC,EAAIA,GAAS,eAAe,KAAKA,CAAI,CACvC,EAEMC,GAAWD,GAAS,OAAO,UAAU,eAAe,KAAKD,GAAeC,CAAI,EAElF,SAASE,GAAqBC,EAAOC,EAAS,CAC5C,IAAMC,EAAS,CAAC,EACZC,EAAe,EACnB,QAAWN,KAAQG,EAAO,CACxB,KAAOG,EAAeF,EAAQ,QAAU,CAACH,GAAQG,EAAQE,CAAY,CAAC,GACpEA,GAAgB,EAElB,GAAIA,GAAgBF,EAAQ,OAAQ,MACpC,IAAMG,EAAQH,EAAQE,CAAY,EAC9BP,GAAcQ,CAAK,IAAIP,CAAI,IAC7BK,EAAO,KAAKL,CAAI,EAChBM,GAAgB,EAEpB,CACA,OAAOD,CACT,CAEA,SAASG,GAAaL,EAAOC,EAAS,CACpC,IAAMC,EAASH,GAAqBC,EAAOC,CAAO,EAC9CK,EAAS,GACTC,EAAa,EACjB,QAAS,EAAI,EAAG,EAAIN,EAAQ,OAAQ,GAAK,EAAG,CAC1C,IAAMJ,EAAOI,EAAQ,CAAC,EACtB,GAAIH,GAAQD,CAAI,EAAG,CACjB,GAAIU,GAAcL,EAAO,OAAQ,MACjCI,GAAUJ,EAAOK,CAAU,EAC3BA,GAAc,EACd,QACF,CACIA,IAAe,GACfA,EAAaL,EAAO,SAAQI,GAAUT,EAC5C,CACA,MAAO,CAAE,IAAKK,EAAO,KAAK,EAAE,EAAG,OAAAI,CAAO,CACxC,CAEO,SAASE,GAAqBC,EAAQ,CAC3C,OAAIA,GAAU,KAAa,KACvB,OAAOA,GAAW,WAAmB,CAAE,OAAAA,EAAQ,KAAM,MAAO,EAC5D,OAAOA,GAAW,SAAiB,CAAE,QAASA,EAAQ,KAAM,MAAO,EACnE,OAAOA,GAAW,SAAiB,CAAE,KAAM,OAAQ,GAAGA,CAAO,EAC1D,IACT,CAEO,SAASC,GAAiBC,EAAYF,EAAQ,CACnD,IAAMG,EAAaJ,GAAqBC,CAAM,EACxCI,EAAW,OAAOF,GAAc,EAAE,EACxC,GAAI,CAACC,EACH,MAAO,CAAE,MAAOC,EAAU,OAAQA,EAAU,IAAKA,CAAS,EAE5D,GAAI,OAAOD,EAAW,QAAW,WAAY,CAC3C,IAAIE,EAAYD,EAChB,GAAI,CACFC,EAAYF,EAAW,OAAOC,CAAQ,CACxC,MAAQ,CAAC,CACT,GAAIC,GAAa,OAAOA,GAAc,SAAU,CAC9C,IAAMC,EAAQD,EAAU,OAASA,EAAU,QAAU,GAC/CR,EAASQ,EAAU,QAAUA,EAAU,OAAS,GAChDE,EAAMF,EAAU,KAAOC,GAAS,GACtC,MAAO,CAAE,MAAO,OAAOA,CAAK,EAAG,OAAQ,OAAOT,CAAM,EAAG,IAAK,OAAOU,CAAG,CAAE,CAC1E,CACA,MAAO,CAAE,MAAO,OAAOF,GAAa,EAAE,EAAG,OAAQ,OAAOA,GAAa,EAAE,EAAG,IAAK,OAAOA,GAAa,EAAE,CAAE,CACzG,CACA,GAAIF,EAAW,QAAS,CACtB,GAAM,CAAE,IAAAI,EAAK,OAAAV,CAAO,EAAID,GAAaQ,EAAU,OAAOD,EAAW,OAAO,CAAC,EACzE,MAAO,CAAE,MAAON,EAAQ,OAAAA,EAAQ,IAAAU,CAAI,CACtC,CACA,GAAIJ,EAAW,MAAO,CACpB,IAAMK,EAAQJ,EAAS,MAAMD,EAAW,KAAK,EACvCE,EAAYG,EAAQA,EAAM,CAAC,EAAI,GACrC,MAAO,CAAE,MAAOH,EAAW,OAAQA,EAAW,IAAKA,CAAU,CAC/D,CACA,MAAO,CAAE,MAAOD,EAAU,OAAQA,EAAU,IAAKA,CAAS,CAC5D,CCvEA,IAAMK,GAAe,IAAI,IAAI,CAC3B,OACA,OACA,KACA,MACA,QACA,KACA,MACA,QACA,OACA,OACA,QACA,SACA,QACA,KACF,CAAC,EAEYC,EAAN,cAA0BC,CAAW,CAC1C,QACA,MACA,SACAC,GAAM,KACNC,GAAU,CAAC,EACXC,GAAe,CAAC,EAChBC,GAAW,GAEX,YAAYC,EAASC,EAAQ,CAAC,EAAGC,EAAW,CAAC,EAAG,CAC9C,MAAM,EACN,KAAK,QAAUF,EACf,KAAK,MAAQC,GAAS,CAAC,EACvB,KAAK,SAAW,MAAM,QAAQC,CAAQ,EAAIA,EAAW,CAACA,CAAQ,EAC1DT,GAAa,IAAIO,EAAQ,YAAY,CAAC,IAAG,KAAK,SAAW,CAAC,EAChE,CAEA,UAAUG,EAAQC,EAAY,CAC5B,GAAI,KAAKL,GAAU,OACnB,KAAKA,GAAW,GAChB,IAAMM,EAAK,SAAS,cAAc,KAAK,OAAO,EAC9C,KAAKT,GAAMS,EACX,KAAKC,GAAYD,CAAE,EACnB,KAAKE,GAAgBF,CAAE,EACvBF,EAAO,aAAaE,EAAID,CAAU,CACpC,CAEA,SAAU,CACR,GAAK,KAAKL,GACV,MAAKA,GAAW,GAChB,QAAWS,KAAS,KAAKX,GAASW,EAAM,EACxC,KAAKX,GAAU,CAAC,EAChB,KAAKY,GAAiB,EACtB,KAAKb,IAAK,OAAO,EACjB,KAAKA,GAAM,KACb,CAEA,eAAec,EAAQ,CACrB,IAAMC,EAAM,KAAK,QACXV,EAAQ,KAAK,OAAS,CAAC,EACvBW,EAAQD,EAAI,YAAY,EACxBE,EAAY,CAAC,EACfC,EAAY,KACZC,EAAc,KAElB,OAAW,CAACC,EAAKC,CAAQ,IAAK,OAAO,QAAQhB,CAAK,EAAG,CAInD,GAHIe,IAAQ,QACRA,IAAQ,YAAcA,IAAQ,WAC9BA,IAAQ,UACRA,EAAI,WAAW,IAAI,GAAK,OAAOC,GAAa,WAAY,SAC5D,IAAIC,EAAQD,EAKZ,GAJIE,GAAOD,CAAK,IAAGA,EAAQE,GAAcF,CAAK,GAC1CG,EAASH,CAAK,IAAGA,EAAQI,EAAWJ,CAAK,IACzCK,EAAQL,CAAK,GAAKM,EAAYN,CAAK,KAAGA,EAAQO,EAAUP,CAAK,GAE7DF,IAAQ,QAAS,CACnB,GAAIE,GAAS,OAAOA,GAAU,SAAU,CACtC,IAAMQ,EAAS,CAAC,EAChB,OAAW,CAACC,EAAGC,CAAC,IAAK,OAAO,QAAQV,CAAK,EAAG,CAC1C,GAAIU,GAAK,MAAQA,IAAM,GAAO,SAC9B,IAAMC,EAAOF,EAAE,QAAQ,SAAWG,GAAM,IAAIA,EAAE,YAAY,CAAC,EAAE,EAC7DJ,EAAO,KAAK,GAAGG,CAAI,IAAID,CAAC,EAAE,CAC5B,CACIF,EAAO,QAAQb,EAAU,KAAK,UAAUa,EAAO,KAAK,GAAG,CAAC,GAAG,CACjE,MAAW,OAAOR,GAAU,UAC1BL,EAAU,KAAK,UAAUH,EAAO,OAAOQ,CAAK,CAAC,GAAG,EAElD,QACF,CACA,GAAIF,IAAQ,aAAeA,IAAQ,QAAS,CACtCE,GAAS,MAAQA,IAAU,IAAOL,EAAU,KAAK,UAAUH,EAAO,OAAO,OAAOQ,CAAK,CAAC,CAAC,GAAG,EAC9F,QACF,CACA,GAAIF,IAAQ,UAAW,CACjBE,GAAS,MAAQA,IAAU,IAAOL,EAAU,KAAK,QAAQH,EAAO,OAAO,OAAOQ,CAAK,CAAC,CAAC,GAAG,EAC5F,QACF,CACA,GAAIF,IAAQ,SAAWJ,IAAU,SAAWX,EAAM,QAAU,KAAM,CAChE,IAAM8B,EAAiBV,EAASpB,EAAM,MAAM,EACxCqB,EAAWrB,EAAM,MAAM,EACvBsB,EAAQtB,EAAM,MAAM,GAAKuB,EAAYvB,EAAM,MAAM,EAC/CwB,EAAUxB,EAAM,MAAM,EACtBA,EAAM,OACN+B,EAAeC,GAAqBF,CAAc,EAClDG,EAAaF,GAAc,MAAQ,OACnCG,EAAYC,GAAiBlB,GAAS,GAAIc,CAAY,EAC5Dd,EACEgB,IAAe,aACVC,EAAU,KAAOA,EAAU,OAAS,GACpCA,EAAU,QAAUA,EAAU,OAAS,EAChD,CACA,GAAInB,IAAQ,cAAe,CACzBD,EAAcG,GAAS,KAAO,GAAK,OAAOA,CAAK,EAC/C,QACF,CACA,GAAIF,IAAQ,YAAa,CACvBF,EAAYI,GAAS,KAAO,GAAK,OAAOA,CAAK,EAC7C,QACF,CACA,GAAIA,IAAU,GAAM,CAClBL,EAAU,KAAK,GAAGG,CAAG,EAAE,EACvB,QACF,CACIE,IAAU,IAASA,GAAS,MAGhCL,EAAU,KAAK,GAAGG,CAAG,KAAKN,EAAO,OAAO,OAAOQ,CAAK,CAAC,CAAC,GAAG,CAC3D,CAEA,IAAMmB,EAAQxB,EAAU,OAAS,IAAIA,EAAU,KAAK,GAAG,CAAC,GAAK,GAC7D,GAAIpB,GAAa,IAAImB,CAAK,EACxB,MAAO,IAAID,CAAG,GAAG0B,CAAK,IAExB,GAAIvB,GAAa,KACf,MAAO,IAAIH,CAAG,GAAG0B,CAAK,IAAIvB,CAAS,KAAKH,CAAG,IAE7C,GAAII,GAAe,KACjB,MAAO,IAAIJ,CAAG,GAAG0B,CAAK,IAAI3B,EAAO,OAAOK,CAAW,CAAC,KAAKJ,CAAG,IAG9D,IAAM2B,GADW,MAAM,QAAQ,KAAK,QAAQ,EAAI,KAAK,SAAW,CAAC,KAAK,QAAQ,GACxD,IAAKC,GAAU7B,EAAO6B,CAAK,CAAC,EAAE,KAAK,EAAE,EAC3D,MAAO,IAAI5B,CAAG,GAAG0B,CAAK,IAAIC,CAAI,KAAK3B,CAAG,GACxC,CAEAF,IAAmB,CACjB,GAAK,KAAKb,GACV,QAAW2C,KAAS,MAAM,KAAK,KAAK3C,GAAI,UAAU,EAAG2C,EAAM,OAAO,CACpE,CAEAjC,GAAYD,EAAI,CACd,IAAMJ,EAAQ,KAAK,OAAS,CAAC,EACvBD,EAAU,KAAK,QAAQ,YAAY,EACrCwC,EAAc,GACdC,EAAa,GAEX,CAAE,aAAAT,CAAa,EAAI,KAAKU,GAAiB,EAE/C,OAAW,CAAC1B,EAAKC,CAAQ,IAAK,OAAO,QAAQhB,CAAK,EAAG,CAKnD,GAJIe,IAAQ,UAASyB,EAAa,IAE9BzB,IAAQ,QACRA,IAAQ,YAAcA,IAAQ,WAC9BA,IAAQ,SAAU,SACtB,GAAIA,IAAQ,QAAS,CACnB,KAAK2B,GAAYtC,EAAIY,CAAQ,EAC7B,QACF,CACA,IAAMhB,EAAQ,CAAE,GAAAI,EAAI,IAAAW,EAAK,SAAAC,EAAU,aAAAe,CAAa,EAChD,GAAIb,GAAOF,CAAQ,EAAG,CACpB,KAAK2B,GAAiB3C,CAAK,EAC3B,QACF,CACA,GAAIoB,EAASJ,CAAQ,EAAG,CAClBD,IAAQ,SAAWgB,IAAcQ,EAAc,IACnD,KAAKK,GAAmB5C,CAAK,EAC7B,QACF,CACA,GAAIsB,EAAQN,CAAQ,GAAKO,EAAYP,CAAQ,EAAG,CAC1CD,IAAQ,SAAWgB,IAAcQ,EAAc,IACnD,KAAKM,GAAkB7C,CAAK,EAC5B,QACF,CACA,GAAIe,IAAQ,SAAWgB,EAAc,CACnC,GAAM,CAAE,YAAAe,CAAY,EAAI,KAAKC,GAAa/B,CAAQ,EAClD,KAAKgC,GAAS5C,EAAIW,EAAK+B,CAAW,EAClCP,EAAc,GACd,QACF,CACA,IAAKxB,IAAQ,WAAaA,IAAQ,aAAe,OAAOC,GAAa,YAAce,EAAc,CAC/F,IAAMkB,EAAWC,GAAO,CACtBlC,IAAWkC,EAAIA,GAAI,QAAQ,QAAQ,CACrC,EACA,KAAKF,GAAS5C,EAAIW,EAAKkC,CAAO,EAC9B,QACF,CACA,GAAIlC,IAAQ,WAAa,CAACwB,EAAa,CACrC,IAAMY,EAAWD,GAAO,CAClBnB,GACF,KAAKqB,GAAgCF,CAAE,EAEzClC,IAAWkC,CAAE,CACf,EACA,KAAKF,GAAS5C,EAAIW,EAAKoC,CAAO,EAC9B,QACF,CACA,KAAKH,GAAS5C,EAAIW,EAAKC,CAAQ,CACjC,CAEA,GAAI,CAACwB,GAAcT,EAAc,CAC/B,IAAMoB,EAAWD,GAAO,CACtB,GAAM,CAAE,YAAAJ,CAAY,EAAI,KAAKM,GAAgC,CAAE,OAAQhD,CAAG,CAAC,EAC3E,KAAK4C,GAAS5C,EAAI,QAAS0C,CAAW,CACxC,EACAK,EAAQ,EACR,KAAKE,GAAkCjD,EAAI+C,EAAS,EAAI,EACxDZ,EAAc,EAChB,CAMA,GAJIvC,EAAM,OAASsB,EAAQtB,EAAM,IAAI,GAAKuB,EAAYvB,EAAM,IAAI,IAC9DA,EAAM,KAAK,IAAI,KAAKL,EAAG,EAGrBoC,GAAgB,CAACQ,EAAa,CAChC,IAAMY,EAAWD,GAAO,CACtB,KAAKE,GAAgCF,CAAE,CACzC,EACA,KAAKG,GAAkCjD,EAAI+C,EAAS,EAAI,CAC1D,CACF,CACAV,IAAmB,CACjB,IAAMzC,EAAQ,KAAK,OAAS,CAAC,EAOvB+B,EANU,KAAK,QAAQ,YAAY,IAMR,QAAUC,IALpBf,GACjBG,EAASH,CAAK,EAAUI,EAAWJ,CAAK,EACxCK,EAAQL,CAAK,GAAKM,EAAYN,CAAK,EAAUO,EAAUP,CAAK,EACzDA,GAEqEjB,EAAM,MAAM,CAAC,EAAI,KACzFiC,EAAaF,GAAc,MAAQ,OACzC,MAAO,CAAE,aAAAA,EAAc,WAAAE,CAAW,CACpC,CACAc,GAAaO,EAAM,CACjB,GAAM,CAAE,aAAAvB,EAAc,WAAAE,CAAW,EAAI,KAAKQ,GAAiB,EACrDP,EAAYC,GAAiBmB,GAAQ,GAAIvB,CAAY,EACrDe,EACJb,IAAe,aACVC,EAAU,KAAOA,EAAU,OAAS,GACpCA,EAAU,QAAUA,EAAU,OAAS,GACxCqB,EACJtB,IAAe,cACVC,EAAU,KAAOA,EAAU,OAAS,GACpCA,EAAU,OAASA,EAAU,QAAU,GAC9C,MAAO,CAAE,UAAAA,EAAW,YAAAY,EAAa,WAAAS,CAAW,CAC9C,CAEAH,GAAgCF,EAAI,CAClC,GAAM,CAAE,UAAAhB,EAAW,YAAAY,EAAa,WAAAS,CAAW,EAAI,KAAKR,GAAaG,EAAG,OAAO,OAAS,EAAE,EAChFlC,EAAWkB,GAAW,KAAOqB,EACnC,OAAAL,EAAG,OAAO,MAAQJ,EAClBI,EAAG,OAAO,SAAWlC,EACd,CAAE,YAAA8B,EAAa,WAAAS,EAAY,SAAAvC,CAAS,CAC7C,CACAqC,GAAkCjD,EAAI+C,EAASK,EAAS,CACtDpD,EAAG,iBAAiB,QAAS+C,EAASK,CAAO,EAC7CpD,EAAG,iBAAiB,SAAU+C,EAASK,CAAO,EAC9C,KAAK5D,GAAQ,KAAK,IAAM,CACtBQ,EAAG,oBAAoB,QAAS+C,EAASK,CAAO,EAChDpD,EAAG,oBAAoB,SAAU+C,EAASK,CAAO,CACnD,CAAC,CACH,CAEAC,GAA2B,CAAE,IAAA1C,EAAK,GAAAX,EAAI,SAAAY,EAAU,KAAA0C,EAAM,UAAAC,EAAW,aAAA5B,CAAa,EAAG,CAC/E,IAAM6B,EAAS,IAAM,CACnB,IAAMC,EAAYH,EAAK1C,CAAQ,EAC/B,GAAID,IAAQ,SAAWgB,EAAc,CACnC,GAAM,CAAE,YAAAe,CAAY,EAAI,KAAKC,GAAac,CAAS,EACnD,KAAKb,GAAS5C,EAAIW,EAAK+B,CAAW,EAClC,MACF,CACA,KAAKE,GAAS5C,EAAIW,EAAK8C,CAAS,CAClC,EACAD,EAAO,EACP,IAAMrD,EAAQoD,EAAU3C,EAAU4C,CAAM,EACxC,OAAIrD,GAAO,KAAKX,GAAQ,KAAKW,CAAK,EAC3BqD,CACT,CAEAjB,GAAiB3C,EAAO,CACtB,KAAKyD,GAA2B,CAAE,GAAGzD,EAAO,KAAMmB,GAAe,UAAW2C,EAAmB,CAAC,CAClG,CACAlB,GAAmB,CAAE,GAAAxC,EAAI,IAAAW,EAAK,SAAAC,EAAU,aAAAe,CAAa,EAAG,CACtD,IAAM6B,EAAS,KAAKH,GAA2B,CAAE,IAAA1C,EAAK,GAAAX,EAAI,SAAAY,EAAU,aAAAe,EAAc,KAAMV,EAAY,UAAW0C,CAAgB,CAAC,EAChI,GAAIhD,IAAQ,QACV,GAAIgB,EAAc,CAChB,IAAMoB,EAAWD,GAAO,CACtB,GAAM,CAAE,WAAAK,CAAW,EAAI,KAAKH,GAAgCF,CAAE,EAC9D,GAAIc,EAAWhD,CAAQ,EAAG,OACfA,EAAS,MAAMuC,CAAU,IACzB,IAAOK,EAAO,CAC3B,EACA,KAAKP,GAAkCjD,EAAI+C,EAAS,EAAI,CAC1D,KAAO,CACL,IAAMA,EAAWD,GAAO,CACtB,GAAIc,EAAWhD,CAAQ,EAAG,OACfA,EAAS,MAAMkC,EAAG,QAAQ,OAAS,EAAE,IACrC,IAAOU,EAAO,CAC3B,EACA,KAAKP,GAAkCjD,EAAI+C,CAAO,CACpD,CAEF,GAAIpC,IAAQ,UAAW,CACrB,IAAMkD,EAAYf,GAAO,CACvB,GAAIc,EAAWhD,CAAQ,EAAG,OACfA,EAAS,MAAM,CAAC,CAACkC,EAAG,QAAQ,OAAO,IACnC,IAAOU,EAAO,CAC3B,EACAxD,EAAG,iBAAiB,SAAU6D,CAAQ,EACtC,KAAKrE,GAAQ,KAAK,IAAMQ,EAAG,oBAAoB,SAAU6D,CAAQ,CAAC,CACpE,CACF,CACApB,GAAkB,CAAE,GAAAzC,EAAI,IAAAW,EAAK,SAAAC,EAAU,aAAAe,CAAa,EAAG,CACrD,IAAM6B,EAAS,KAAKH,GAA2B,CAAE,IAAA1C,EAAK,GAAAX,EAAI,SAAAY,EAAU,aAAAe,EAAc,KAAMP,EAAW,UAAW0C,CAAe,CAAC,EAC9H,GAAInD,IAAQ,QACV,GAAIgB,EAAc,CAChB,IAAMoB,EAAWD,GAAO,CACtB,GAAM,CAAE,WAAAK,CAAW,EAAI,KAAKH,GAAgCF,CAAE,EAC9D,GAAIc,EAAWhD,CAAQ,EAAG,OACfA,EAAS,MAAMuC,CAAU,IACzB,IAAOK,EAAO,CAC3B,EACA,KAAKP,GAAkCjD,EAAI+C,EAAS,EAAI,CAC1D,KAAO,CACL,IAAMA,EAAWD,GAAO,CACtB,GAAIc,EAAWhD,CAAQ,EAAG,OACfA,EAAS,MAAMkC,EAAG,QAAQ,OAAS,EAAE,IACrC,IAAOU,EAAO,CAC3B,EACA,KAAKP,GAAkCjD,EAAI+C,CAAO,CACpD,CAEF,GAAIpC,IAAQ,UAAW,CACrB,IAAMkD,EAAYf,GAAO,CACvB,GAAIc,EAAWhD,CAAQ,EAAG,OACfA,EAAS,MAAM,CAAC,CAACkC,EAAG,QAAQ,OAAO,IACnC,IAAOU,EAAO,CAC3B,EACAxD,EAAG,iBAAiB,SAAU6D,CAAQ,EACtC,KAAKrE,GAAQ,KAAK,IAAMQ,EAAG,oBAAoB,SAAU6D,CAAQ,CAAC,CACpE,CACF,CAEAjB,GAAS5C,EAAIW,EAAKE,EAAO,CAIvB,GAHIC,GAAOD,CAAK,IAAGA,EAAQE,GAAcF,CAAK,GAC1CG,EAASH,CAAK,IAAGA,EAAQI,EAAWJ,CAAK,IACzCK,EAAQL,CAAK,GAAKM,EAAYN,CAAK,KAAGA,EAAQO,EAAUP,CAAK,GAC7DF,IAAQ,QAAS,CACnB,GAAIE,GAAS,OAAOA,GAAU,SAAU,CACtC,OAAO,OAAOb,EAAG,MAAOa,CAAK,EAC7B,MACF,CACA,GAAI,OAAOA,GAAU,SAAU,CAC7Bb,EAAG,MAAM,QAAUa,EACnB,MACF,CACF,CACA,GAAIF,EAAI,WAAW,IAAI,GAAK,OAAOE,GAAU,WAAY,CACvD,IAAMkD,EAAYpD,EAAI,UAAU,CAAC,EAAE,YAAY,EAC/CX,EAAG,iBAAiB+D,EAAWlD,CAAK,EACpC,KAAKrB,GAAQ,KAAK,IAAMQ,EAAG,oBAAoB+D,EAAWlD,CAAK,CAAC,EAChE,MACF,CACA,GAAIF,IAAQ,aAAeA,IAAQ,QAAS,CAC1CX,EAAG,UAAYa,GAAS,GACxB,MACF,CACA,GAAIF,IAAQ,UAAW,CACrBX,EAAG,aAAa,MAAOa,GAAS,EAAE,EAClC,MACF,CACA,GAAIF,IAAQ,QAAS,CACnB,GAAI,CACFX,EAAG,MAAQa,GAAS,EACtB,MAAQ,CAAE,CACV,MACF,CACA,GAAIF,IAAQ,UAAW,CACrB,GAAI,CACFX,EAAG,QAAU,CAAC,CAACa,CACjB,MAAQ,CAAE,CACV,MACF,CACA,GAAIF,IAAQ,kBAAmB,CAC7B,GAAI,CACFX,EAAG,gBAAkBa,EAAQ,OAAS,OACxC,MAAQ,CAAE,CACV,MACF,CACA,GAAIF,IAAQ,cAAe,CACzBX,EAAG,YAAca,GAAS,GAC1B,MACF,CACA,GAAIF,IAAQ,YAAa,CACvBX,EAAG,UAAYa,GAAS,GACxB,MACF,CACA,GAAIA,IAAU,IAASA,GAAS,KAAM,CAEpC,GADAb,EAAG,gBAAgBW,CAAG,EAClBA,KAAOX,EACT,GAAI,CACFA,EAAGW,CAAG,EAAI,EACZ,MAAQ,CAAE,CAEZ,MACF,CACA,GAAIE,IAAU,GAAM,CAElB,GADAb,EAAG,aAAaW,EAAK,EAAE,EACnBA,KAAOX,EACT,GAAI,CACFA,EAAGW,CAAG,EAAI,EACZ,MAAQ,CAAE,CAEZ,MACF,CAEA,GADAX,EAAG,aAAaW,EAAKE,CAAK,EACtBF,KAAOX,EACT,GAAI,CACFA,EAAGW,CAAG,EAAIE,CACZ,MAAQ,CAAE,CAEd,CAEAyB,GAAYtC,EAAIgE,EAAY,CAC1B,IAAMC,EAAmB,IAAM,CAC7B,QAAW9D,KAAS,KAAKV,GAAcU,EAAM,EAC7C,KAAKV,GAAe,CAAC,CACvB,EAEMyE,EAAcrD,GAAU,CAC5B,GAAI,OAAOA,GAAU,SAAU,CAC7BoD,EAAiB,EACjBjE,EAAG,MAAM,QAAUa,EACnB,MACF,CACIA,GAAS,OAAOA,GAAU,WAC5BoD,EAAiB,EACjBE,EAAYtD,CAAK,EAErB,EAEMsD,EAAeC,GAAa,CAChC,GAAI,GAACA,GAAY,OAAOA,GAAa,UACrC,OAAW,CAAC9C,EAAGC,CAAC,IAAK,OAAO,QAAQ6C,CAAQ,EAAG,CAC7C,GAAI,OAAO7C,GAAM,WAAY,CAC3B,GAAI,CACFvB,EAAG,MAAMsB,CAAC,EAAIC,EAAE,CAClB,MAAQ,CACNvB,EAAG,MAAMsB,CAAC,EAAI,EAChB,CACA,QACF,CACA,GAAIN,EAASO,CAAC,EAAG,CACf,IAAMiC,EAAS,IAAM,CACnB,GAAI,CACFxD,EAAG,MAAMsB,CAAC,EAAIL,EAAWM,CAAC,GAAK,EACjC,MAAQ,CACNvB,EAAG,MAAMsB,CAAC,EAAI,EAChB,CACF,EACAkC,EAAO,EACP,IAAMrD,EAAQwD,EAAgBpC,EAAGiC,CAAM,EACnCrD,GAAO,KAAKV,GAAa,KAAKU,CAAK,EACvC,QACF,CACA,GAAIe,EAAQK,CAAC,GAAKJ,EAAYI,CAAC,EAAG,CAChC,IAAMiC,EAAS,IAAM,CACnB,GAAI,CACFxD,EAAG,MAAMsB,CAAC,EAAIF,EAAUG,CAAC,GAAK,EAChC,MAAQ,CACNvB,EAAG,MAAMsB,CAAC,EAAI,EAChB,CACF,EACAkC,EAAO,EACP,IAAMrD,EAAQ2D,EAAevC,EAAGiC,CAAM,EAClCrD,GAAO,KAAKV,GAAa,KAAKU,CAAK,EACvC,QACF,MACEH,EAAG,MAAMsB,CAAC,EAAIC,GAAK,EAEvB,CACF,EAGA,GADA0C,EAAiB,EACbjD,EAASgD,CAAU,EAAG,CACxB,IAAMR,EAAS,IAAMU,EAAWjD,EAAW+C,CAAU,CAAC,EACtDR,EAAO,EACP,IAAMrD,EAAQwD,EAAgBK,EAAYR,CAAM,EAC5CrD,GAAO,KAAKX,GAAQ,KAAKW,CAAK,EAClC,MACF,CAEA,GAAIe,EAAQ8C,CAAU,GAAK7C,EAAY6C,CAAU,EAAG,CAClD,IAAMR,EAAS,IAAMU,EAAW9C,EAAU4C,CAAU,CAAC,EACrDR,EAAO,EACP,IAAMrD,EAAQ2D,EAAeE,EAAYR,CAAM,EAC3CrD,GAAO,KAAKX,GAAQ,KAAKW,CAAK,EAClC,MACF,CAGA,GAAI,OAAO6D,GAAe,WAAY,CACpC,GAAI,CACFE,EAAWF,EAAW,CAAC,CACzB,MAAQ,CACN,MACF,CACA,MACF,CAEAE,EAAWF,CAAU,CACvB,CAEA9D,GAAgBF,EAAI,CAClB,IAAMqE,EAAU,OAAO,UAAU,eAAe,KAAK,KAAK,MAAO,SAAS,EACtE,KAAK,MAAM,QACX,KACExE,EAAW,KAAK,SAAS,OAAS,KAAK,SAAWwE,GAAW,KAAO,CAACA,CAAO,EAAI,CAAC,EACvF,QAAWnC,KAASrC,EAAU,KAAKyE,GAAYtE,EAAIkC,EAAO,IAAI,CAChE,CAEAoC,GAAYxE,EAAQoC,EAAOnC,EAAY,CACrC,GAAImC,GAAS,MAAQA,IAAU,GAAO,OACtC,IAAMqC,EAASC,GAAmBtC,CAAK,GAAKuC,GAAcvC,CAAK,EAC/D,GAAIqC,EAAQ,CACV,IAAMG,EAAQC,EAAc,gBAAiB,KAAK,EAC5CC,EAAMD,EAAc,cAAe,KAAK,EAC9C7E,EAAO,aAAa4E,EAAO3E,CAAU,EACrCD,EAAO,aAAa8E,EAAK7E,CAAU,EACnC,IAAM8E,EAAQ,CAAE,KAAM,SAAU,OAAQ,CAAC,CAAE,EACrCrB,EAAS,IAAM,CACnB,IAAMsB,EAAMP,EAAO,KAAOQ,GAAcR,CAAM,EAAItD,EAAWsD,EAAO,MAAM,EACpES,EAAO,MAAM,QAAQF,CAAG,EAAIA,EAAI,IAAIP,EAAO,KAAK,EAAI,CAAC,EAC3D,KAAKU,GAAeD,EAAMN,EAAOE,EAAKC,CAAK,CAC7C,EACArB,EAAO,EACP,IAAMrD,EAAQoE,EAAO,KAAOW,GAAmBX,EAAQf,CAAM,EAAIG,EAAgBY,EAAO,OAAQf,CAAM,EAClGrD,GAAO,KAAKX,GAAQ,KAAK,IAAM,CACjCW,EAAM,EACN,KAAKgF,GAAgBN,EAAOH,EAAOE,CAAG,EACtCF,EAAM,OAAO,EACbE,EAAI,OAAO,CACb,CAAC,EACD,MACF,CACA,GAAI5D,EAASkB,CAAK,EAAG,CACnB,IAAMwC,EAAQC,EAAc,gBAAiB,QAAQ,EAC/CC,EAAMD,EAAc,cAAe,QAAQ,EACjD7E,EAAO,aAAa4E,EAAO3E,CAAU,EACrCD,EAAO,aAAa8E,EAAK7E,CAAU,EACnC,IAAM8E,EAAQ,CAAE,KAAM,SAAU,OAAQ,CAAC,CAAE,EACrCrB,EAAS,IAAM,KAAKyB,GAAehE,EAAWiB,CAAK,EAAGwC,EAAOE,EAAKC,CAAK,EAC7ErB,EAAO,EACP,IAAMrD,EAAQwD,EAAgBzB,EAAOsB,CAAM,EACvCrD,GAAO,KAAKX,GAAQ,KAAK,IAAM,CACjCW,EAAM,EACN,KAAKgF,GAAgBN,EAAOH,EAAOE,CAAG,EACtCF,EAAM,OAAO,EACbE,EAAI,OAAO,CACb,CAAC,EACD,MACF,CAEA,GAAI1D,EAAQgB,CAAK,GAAKf,EAAYe,CAAK,EAAG,CACxC,IAAMwC,EAAQC,EAAc,gBAAiB,OAAO,EAC9CC,EAAMD,EAAc,cAAe,OAAO,EAChD7E,EAAO,aAAa4E,EAAO3E,CAAU,EACrCD,EAAO,aAAa8E,EAAK7E,CAAU,EACnC,IAAM8E,EAAQ,CAAE,KAAM,SAAU,OAAQ,CAAC,CAAE,EACrCrB,EAAS,IAAM,KAAKyB,GAAe7D,EAAUc,CAAK,EAAGwC,EAAOE,EAAKC,CAAK,EAC5ErB,EAAO,EACP,IAAMrD,EAAQ2D,EAAe5B,EAAOsB,CAAM,EACtCrD,GAAO,KAAKX,GAAQ,KAAK,IAAM,CACjCW,EAAM,EACN,KAAKgF,GAAgBN,EAAOH,EAAOE,CAAG,EACtCF,EAAM,OAAO,EACbE,EAAI,OAAO,CACb,CAAC,EACD,MACF,CAEA,GAAIQ,EAAkBlD,CAAK,EAAG,CAC5B,IAAMwC,EAAQC,EAAc,gBAAiB,MAAM,EAC7CC,EAAMD,EAAc,cAAe,MAAM,EAC/C7E,EAAO,aAAa4E,EAAO3E,CAAU,EACrCD,EAAO,aAAa8E,EAAK7E,CAAU,EACnC,IAAM8E,EAAQ,CAAE,KAAM,OAAQ,MAAO,CAAC,EAAG,MAAO,KAAM,OAAQ3C,CAAM,EACpE,KAAK+C,GAAe/C,EAAOwC,EAAOE,EAAKC,CAAK,EAC5C,KAAKrF,GAAQ,KAAK,IAAM,CACtB,KAAK2F,GAAgBN,EAAOH,EAAOE,CAAG,EACtCF,EAAM,OAAO,EACbE,EAAI,OAAO,CACb,CAAC,EACD,MACF,CACA,GAAI,MAAM,QAAQ1C,CAAK,EAAG,CACxB,QAAWmD,KAAQnD,EAAO,KAAKoC,GAAYxE,EAAQuF,EAAMtF,CAAU,EACnE,MACF,CACA,GAAIuF,EAAS,aAAapD,CAAK,EAAG,CAChCA,EAAM,UAAUpC,EAAQC,CAAU,EAClC,KAAKP,GAAQ,KAAK,IAAM0C,EAAM,QAAQ,CAAC,EACvC,MACF,CACA,GAAIoD,EAAS,UAAUpD,CAAK,EAAG,CAC7BpC,EAAO,aAAaoC,EAAOnC,CAAU,EACrC,MACF,CACAD,EAAO,aAAa,SAAS,eAAewF,EAAS,OAAOpD,CAAK,CAAC,EAAGnC,CAAU,CACjF,CAEAoF,GAAgBN,EAAOH,EAAOE,EAAK,CACjC,GAAIC,EAAM,OAAS,SAAU,CAC3B,QAAWU,KAAKV,EAAM,OAAQS,EAAS,QAAQC,CAAC,EAChDV,EAAM,OAAS,CAAC,EACZH,GAASE,GAAKY,EAAad,EAAOE,CAAG,EACzC,MACF,CACA,GAAIC,EAAM,OAAS,OAAQ,CACzBA,EAAM,QAAQ,EACd,QAAWY,KAAMZ,EAAM,MAAO,CAC5B,QAAWU,KAAKE,EAAG,OAAQH,EAAS,QAAQC,CAAC,EAC7CC,EAAaC,EAAG,MAAOA,EAAG,GAAG,EAC7BA,EAAG,MAAM,OAAO,EAChBA,EAAG,IAAI,OAAO,CAChB,CACAZ,EAAM,MAAQ,CAAC,CACjB,CACF,CAEAI,GAAepE,EAAO6D,EAAOE,EAAKC,EAAO,CACvC,GAAIO,EAAkBvE,CAAK,EAAG,CAC5B,GAAIgE,EAAM,OAAS,QAAUA,EAAM,SAAWhE,EAAO,OACrD,KAAKsE,GAAgBN,EAAOH,EAAOE,CAAG,EACtCC,EAAM,KAAO,OACbA,EAAM,OAAShE,EACf,IAAMf,EAAS8E,EAAI,WACbc,EAAQ,CAAC,EACTC,EAAgB,CAACC,EAAKC,IAAY,CACtC,IAAMC,EAAUF,EAAMF,EAAM,OAASA,EAAME,CAAG,EAAE,MAAQhB,EAClDmB,EAAYpB,EAAc,gBAAiB,MAAM,EACjDqB,EAAUrB,EAAc,cAAe,MAAM,EACnD7E,EAAO,aAAaiG,EAAWD,CAAO,EACtChG,EAAO,aAAakG,EAASF,CAAO,EACpC,IAAMG,EAASX,EAAS,UAAUO,CAAO,EACzC,QAAWN,KAAKU,EAAQ,KAAKC,GAAiBpG,EAAQyF,EAAGS,CAAO,EAChEN,EAAM,OAAOE,EAAK,EAAG,CAAE,MAAOG,EAAW,IAAKC,EAAS,OAAAC,CAAO,CAAC,CACjE,EACME,EAAkB,CAACP,EAAKQ,IAAU,CACtC,IAAMC,EAAUX,EAAM,OAAOE,EAAKQ,CAAK,EACvC,QAAWX,KAAMY,EAAS,CACxB,QAAWd,KAAKE,EAAG,OAAQH,EAAS,QAAQC,CAAC,EAC7CC,EAAaC,EAAG,MAAOA,EAAG,GAAG,EAC7BA,EAAG,MAAM,OAAO,EAChBA,EAAG,IAAI,OAAO,CAChB,CACF,EACMa,EAAe,CAACV,EAAKC,IAAY,CACrCM,EAAgBP,EAAK,CAAC,EACtBD,EAAcC,EAAKC,CAAO,CAC5B,EACA,QAASU,EAAI,EAAGA,EAAI1F,EAAM,OAAQ0F,IAAKZ,EAAcY,EAAG1F,EAAM0F,CAAC,CAAC,EAChE,IAAMpG,EAAQU,EAAM,UAAW2F,GAAU,CACvC,GAAK,KAAK9G,GACV,IAAI8G,EAAM,OAAS,QAAS,CAC1BL,EAAgB,EAAGT,EAAM,MAAM,EAC/B,QAASa,EAAI,EAAGA,EAAIC,EAAM,MAAM,OAAQD,IAAKZ,EAAcY,EAAGC,EAAM,MAAMD,CAAC,CAAC,EAC5E,MACF,CACA,GAAIC,EAAM,OAAS,SAAU,CAC3B,QAASD,EAAI,EAAGA,EAAIC,EAAM,MAAM,OAAQD,IAAKZ,EAAca,EAAM,MAAQD,EAAGC,EAAM,MAAMD,CAAC,CAAC,EAC1F,MACF,CACA,GAAIC,EAAM,OAAS,SAAU,CAC3BL,EAAgBK,EAAM,MAAOA,EAAM,KAAK,EACxC,MACF,CACIA,EAAM,OAAS,OAAOF,EAAaE,EAAM,MAAOA,EAAM,KAAK,EACjE,CAAC,EACD3B,EAAM,MAAQa,EACdb,EAAM,MAAQ1E,EACd,MACF,CAEA,GAAI,MAAM,QAAQU,CAAK,EAAG,CACxB,KAAKsE,GAAgBN,EAAOH,EAAOE,CAAG,EACtCC,EAAM,KAAO,SACb,IAAM3B,EAAOoC,EAAS,UAAUzE,CAAK,EACrCgE,EAAM,OAAS3B,EACf,QAAWqC,KAAKrC,EAAM,KAAKgD,GAAiBtB,EAAI,WAAYW,EAAGX,CAAG,EAClE,MACF,CAEA,KAAKO,GAAgBN,EAAOH,EAAOE,CAAG,EACtCC,EAAM,KAAO,SACb,IAAM3B,EAAOoC,EAAS,UAAUzE,CAAK,EACrCgE,EAAM,OAAS3B,EACf,QAAWqC,KAAKrC,EAAM,KAAKgD,GAAiBtB,EAAI,WAAYW,EAAGX,CAAG,CACpE,CAEAsB,GAAiBpG,EAAQ2G,EAAY1G,EAAY,CAC/C,GAAIuF,EAAS,aAAamB,CAAU,EAAG,CACrCA,EAAW,UAAU3G,EAAQC,CAAU,EACvC,MACF,CACIuF,EAAS,UAAUmB,CAAU,GAC/B3G,EAAO,aAAa2G,EAAY1G,CAAU,CAE9C,CACF,EC9sBA,SAAS2G,GAAWC,EAAO,CACzB,OAAO,OAAOA,CAAK,EAChB,QAAQ,KAAM,OAAO,EACrB,QAAQ,KAAM,MAAM,EACpB,QAAQ,KAAM,MAAM,EACpB,QAAQ,KAAM,QAAQ,EACtB,QAAQ,KAAM,OAAO,CAC1B,CAEA,SAASC,GAAYD,EAAOE,EAAQ,CAClC,OAAIF,GAAS,MAAQA,IAAU,GAAc,GACzC,MAAM,QAAQA,CAAK,EAAUA,EAAM,IAAKG,GAAMD,EAAOC,CAAC,CAAC,EAAE,KAAK,EAAE,EAChEC,EAASJ,CAAK,EAAUE,EAAOG,EAAWL,CAAK,CAAC,EAChDM,EAAQN,CAAK,GAAKO,EAAYP,CAAK,EAAUE,EAAOM,EAAUR,CAAK,CAAC,EACpEA,aAAiBS,GAAc,OAAOT,EAAM,gBAAmB,YAG/DA,aAAiBU,EACZV,EAAM,eAAeE,CAAM,EAEhCS,EAAS,UAAUX,CAAK,EACnBA,EAAM,WAAa,GAErBD,GAAWY,EAAS,OAAOX,CAAK,CAAC,CAC1C,CAEO,SAASY,GAAeZ,EAAO,CACpC,IAAME,EAAUC,GAAMF,GAAYE,EAAGD,CAAM,EAC3C,OAAAA,EAAO,OAASH,GACTG,EAAOF,CAAK,CACrB,CAEO,SAASa,GAAQC,EAAQd,EAAO,CACrC,IAAMe,EAAK,OAAOD,GAAW,SAAW,SAAS,cAAcA,CAAM,EAAIA,EACzE,GAAI,CAACC,EAAI,MAAM,IAAI,MAAM,mCAAmC,EAC5D,KAAOA,EAAG,YAAYA,EAAG,YAAYA,EAAG,UAAU,EAClD,IAAMC,EAASL,EAAS,UAAUX,CAAK,EACvC,QAAWiB,KAAKD,EACVL,EAAS,aAAaM,CAAC,EACzBA,EAAE,UAAUF,EAAI,IAAI,EACXJ,EAAS,UAAUM,CAAC,GAC7BF,EAAG,YAAYE,CAAC,CAGtB,CCNA,SAASC,GAAkBC,EAAS,CAElC,MAAO,KAAM,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGA,EAAU,CAAC,CAAC,CACnD,CAEA,SAASC,GAAaC,EAAK,CACzB,OAAI,MAAM,QAAQA,CAAG,EAAU,KAAK,UAAUA,CAAG,EAC1C,KAAK,UAAU,CAACA,CAAG,CAAC,CAC7B,CAEA,SAASC,IAAM,CACb,OAAO,KAAK,IAAI,CAClB,CAEA,SAASC,GAAWC,EAAO,CACzB,GAAI,CAACA,GAAS,OAAOA,GAAU,SAAU,MAAO,GAChD,IAAMC,EAAS,IAAI,gBACnB,OAAW,CAACC,EAAGC,CAAC,IAAK,OAAO,QAAQH,CAAK,EACvC,GAAI,MAAM,QAAQG,CAAC,EACjB,QAAWC,KAAQD,EAAGF,EAAO,OAAOC,EAAG,OAAOE,CAAI,CAAC,OAC1CD,GAAK,MACdF,EAAO,IAAIC,EAAG,OAAOC,CAAC,CAAC,EAG3B,IAAME,EAAMJ,EAAO,SAAS,EAC5B,OAAOI,EAAM,IAAIA,CAAG,GAAK,EAC3B,CAEA,SAASC,GAAgBC,EAAMN,EAAQ,CACrC,OAAKA,EACE,OAAOM,CAAI,EAAE,QAAQ,oBAAqB,CAACC,EAAOX,IAAQ,CAC/D,GAAI,CAAC,OAAO,UAAU,eAAe,KAAKI,EAAQJ,CAAG,EACnD,MAAM,IAAI,MAAM,wBAAwBA,CAAG,UAAUU,CAAI,GAAG,EAE9D,OAAO,mBAAmB,OAAON,EAAOJ,CAAG,CAAC,CAAC,CAC/C,CAAC,EANmBU,CAOtB,CAEA,SAASE,GAAcC,EAAO,CAM5B,MALI,CAACA,GAAS,OAAOA,GAAU,UAC3B,MAAM,QAAQA,CAAK,GACnBA,aAAiB,UACjBA,aAAiB,iBACjBA,aAAiB,MACjBA,aAAiB,YAAoB,GAClC,OAAO,UAAU,SAAS,KAAKA,CAAK,IAAM,iBACnD,CAEA,eAAeC,GAAcC,EAAK,CAEhC,OADaA,EAAI,QAAQ,IAAI,cAAc,GAAK,IACvC,SAAS,kBAAkB,EAAU,MAAMA,EAAI,KAAK,EACtD,MAAMA,EAAI,KAAK,CACxB,CAEA,SAASC,GAAQC,EAAaC,EAAM,CAClC,MAAO,OAAOC,GAAQ,CACpB,IAAIC,EAAQ,GACNC,EAAW,MAAO,GAAM,CAC5B,GAAI,GAAKD,EAAO,MAAM,IAAI,MAAM,yCAAyC,EACzEA,EAAQ,EACR,IAAME,EAAKL,EAAY,CAAC,GAAKC,EAC7B,GAAKI,EACL,OAAIA,IAAOJ,EAAa,MAAMA,EAAKC,CAAG,EAC/B,MAAMG,EAAGH,EAAK,IAAME,EAAS,EAAI,CAAC,CAAC,CAC5C,EACA,OAAO,MAAMA,EAAS,CAAC,CACzB,CACF,CAEA,SAASE,GAAQpB,EAAO,CAEtB,GADIA,EAAM,aACNA,EAAM,WAAa,KAAM,MAAO,GACpC,IAAMqB,EAAKrB,EAAM,WAAa,EAC9B,OAAOqB,IAAO,EAAI,GAAOvB,GAAI,EAAIE,EAAM,UAAYqB,CACrD,CAEA,IAAMC,GAAN,KAAY,CACV,IACA,QAEA,UACA,UACA,eACA,mBACA,MACA,WACA,OACA,oBAEAC,GAAS,KAETC,GAAY,KACZC,GAAS,KACTC,GAAW,KACXC,GAAY,EACZC,GAAoB,KAEpB,YAAYC,EAAS,CACnB,KAAK,IAAMA,EAAQ,IACnB,KAAK,QAAUA,EAAQ,QAEvB,KAAK,UAAYA,EAAQ,WAAa,EACtC,KAAK,UAAYA,EAAQ,WAAa,EAAI,IAC1C,KAAK,eAAiBA,EAAQ,gBAAkB,GAChD,KAAK,mBAAqBA,EAAQ,oBAAsB,GACxD,KAAK,MAAQA,EAAQ,OAAS,EAC9B,KAAK,WAAaA,EAAQ,YAAcnC,GACxC,KAAK,OAASmC,EAAQ,QAAU,GAChC,KAAK,oBAAsBA,EAAQ,qBAAuB,GAE1D,KAAKN,GAASO,EAAM,CAClB,KAAM,OACN,MAAO,KACP,OAAoC,OACpC,SAAU,GACV,UAAW,KACX,QAAS,KACT,YAAa,EACf,CAAC,CACH,CAEA,IAAI,MAAO,CACT,OAAO,KAAKP,GAAO,IAAI,EAAE,IAC3B,CACA,IAAI,OAAQ,CACV,OAAO,KAAKA,GAAO,IAAI,EAAE,KAC3B,CACA,IAAI,QAAS,CACX,OAAO,KAAKA,GAAO,IAAI,EAAE,MAC3B,CACA,IAAI,UAAW,CACb,OAAO,KAAKA,GAAO,IAAI,EAAE,QAC3B,CACA,IAAI,WAAY,CACd,OAAO,KAAKA,GAAO,IAAI,EAAE,SAC3B,CACA,IAAI,SAAU,CACZ,OAAO,KAAKA,GAAO,IAAI,EAAE,OAC3B,CACA,IAAI,aAAc,CAChB,OAAO,KAAKA,GAAO,IAAI,EAAE,WAC3B,CAKA,IAAI,SAAU,CACZ,OAAOH,GAAQ,IAAI,CACrB,CASA,MAAM,SAAU,CACd,OAAI,KAAK,QAAU,KAAKI,GAAkB,KAAKA,GACxC,MAAM,KAAKO,GAAU,CAAE,MAAO,EAAK,CAAC,CAC7C,CAKA,YAAa,CACX,KAAK,SAAS,CAAE,YAAa,EAAK,CAAC,EAC/B,KAAK,qBAAqB,KAAK,QAAQ,CAC7C,CAKA,QAAS,CACP,KAAKN,IAAQ,MAAM,CACrB,CAMA,QAAS,CACP,OAAK,KAAK,QACH,KAAKM,GAAU,CAAE,MAAO,EAAM,CAAC,EADZ,IAE5B,CAKA,UAAUC,EAAoBC,EAAUC,EAAY,CAClD,KAAKP,KACL,KAAKQ,GAAS,EACd,IAAMC,EAAQ,KAAKC,GAAWL,EAAoBC,EAAUC,CAAU,EACtE,MAAO,IAAM,CACXE,EAAM,EACN,KAAKT,GAAY,KAAK,IAAI,EAAG,KAAKA,GAAY,CAAC,EAC/C,KAAKW,GAAY,CACnB,CACF,CAEAA,IAAc,CACZ,GAAI,KAAKX,GAAY,EAAG,OACxB,IAAMY,EAAK,KAAK,WAAa,EACzBA,GAAM,IACV,KAAKb,GAAW,WAAW,IAAM,CAC3B,KAAKC,GAAY,IACrB,KAAK,OAAO,EACZ,KAAKC,KAAoB,EAC3B,EAAGW,CAAE,EACP,CAEAJ,IAAW,CACJ,KAAKT,KACV,aAAa,KAAKA,EAAQ,EAC1B,KAAKA,GAAW,KAClB,CAMA,aAAaP,EAAI,CACf,KAAKS,GAAoBT,CAC3B,CAEA,KAAMY,GAAU,CAAE,MAAAS,CAAM,EAAG,CACzB,GAAI,CAACA,GAAS,CAAC,KAAK,QAAS,OAAO,KAAK,KACzC,GAAI,KAAK,QAAU,KAAKhB,GAAW,OAAO,KAAKA,GAE/C,IAAMiB,EAAa,IAAI,gBACvB,KAAKhB,GAASgB,EACd,IAAMzB,EAAM,CAAE,IAAK,KAAK,IAAK,OAAQyB,EAAW,MAAO,EAEjDC,EAAU,KAAK,WAAa,KAClC,KAAK,SAAS,CACZ,SAAU,GACV,OAAQA,EAAU,KAAK,OAAS,UAChC,MAAO,IACT,CAAC,EAED,IAAMC,EAAM,SAAY,CACtB,IAAMC,EAAW,KAAK,IAAI,EAAG,KAAK,OAAS,CAAC,EAC5C,QAASjD,EAAU,EAAGA,GAAWiD,EAAW,EAAGjD,IAC7C,GAAI,CACF,IAAMkD,EAAO,MAAM,KAAK,QAAQ7B,CAAG,EACnC,YAAK,SAAS,CACZ,KAAA6B,EACA,MAAO,KACP,OAAQ,UACR,SAAU,GACV,UAAW/C,GAAI,EACf,QAAS,KACT,YAAa,EACf,CAAC,EACM+C,CACT,OAASC,EAAK,CACZ,GAAIL,EAAW,OAAO,QACpB,WAAK,SAAS,CAAE,SAAU,EAAM,CAAC,EAC3BK,EAER,GAAInD,EAAUiD,EACZ,WAAK,SAAS,CACZ,MAAOE,EACP,OAAQ,QACR,SAAU,GACV,QAAShD,GAAI,CACf,CAAC,EACKgD,EAER,IAAMC,EAAQ,KAAK,aAAapD,CAAO,GAAKD,GAAkBC,CAAO,EACrE,MAAM,IAAI,QAASqD,GAAM,WAAWA,EAAGD,CAAK,CAAC,CAC/C,CAGJ,EAEA,YAAKvB,GAAYmB,EAAI,EAAE,QAAQ,IAAM,CACnC,KAAKnB,GAAY,IACnB,CAAC,EACM,KAAKA,EACd,CAEA,OAAQ,CACN,OAAO,KAAKD,EACd,CAEA,UAAW,CACT,OAAO,KAAKA,GAAO,IAAI,CACzB,CAEA,SAAS0B,EAAS,CAChB,IAAMC,EAAU,KAAK3B,GAAO,IAAI,EAChC,KAAKA,GAAO,IAAI,CAAE,GAAG2B,EAAS,GAAID,GAAW,CAAC,CAAG,CAAC,CACpD,CAEAZ,GAAWL,EAAoBC,EAAUC,EAAY,CACnD,GAAI,OAAOF,GAAuB,YAAcC,IAAa,OAAW,CACtE,IAAMkB,EAAInB,EACV,OAAO,KAAKT,GAAO,UAAU,CAAC6B,EAAMC,IAASF,EAAEC,EAAMC,CAAI,CAAC,CAC5D,CACA,IAAMC,EAAWtB,EACjB,GAAI,OAAOsB,GAAa,YAAc,OAAOrB,GAAa,WACxD,MAAM,IAAI,MAAM,+DAA+D,EAEjF,IAAMsB,EAAK,OAAOrB,GAAe,WAAaA,EAAa,OAAO,GAC9DsB,EAAeF,EAAS,KAAK/B,GAAO,IAAI,CAAC,EAC7C,OAAO,KAAKA,GAAO,UAAW6B,GAAS,CACrC,IAAMK,EAAeH,EAASF,CAAI,EAClC,GAAIG,EAAGC,EAAcC,CAAY,EAAG,OACpC,IAAMC,EAAIF,EACVA,EAAeC,EACfxB,EAASwB,EAAcC,CAAC,CAC1B,CAAC,CACH,CACF,EAKaC,GAAN,KAAkB,CACvBC,GAAW,IAAI,IACfC,GAAa,GACbC,GAAe,CAAC,EAEhB,aAAc,CACZ,KAAKC,GAAuB,CAC9B,CAQA,MAAMlC,EAAS,CACb,IAAMmC,EAASpE,GAAaiC,EAAQ,GAAG,EACjCoC,EAAW,KAAKL,GAAS,IAAII,CAAM,EACzC,GAAIC,EACF,OAAAA,EAAS,OAAO,EACTA,EAGT,IAAMC,EAAI,IAAI5C,GAAMO,CAAO,EAC3B,OAAAqC,EAAE,aAAa,IAAM,KAAKN,GAAS,OAAOI,CAAM,CAAC,EACjD,KAAKJ,GAAS,IAAII,EAAQE,CAAC,EAC3BA,EAAE,OAAO,EACFA,CACT,CAEA,IAAIC,EAAY,CACd,GAAI,OAAOA,GAAe,WACxB,MAAM,IAAI,MAAM,4DAA4D,EAE9E,YAAKL,GAAa,KAAKK,CAAU,EAC1B,IAAM,CACX,IAAMlD,EAAQ,KAAK6C,GAAa,QAAQK,CAAU,EAC9ClD,GAAS,GAAG,KAAK6C,GAAa,OAAO7C,EAAO,CAAC,CACnD,CACF,CAEA,QAAQmD,EAAS,CAAC,EAAG,CACnB,IAAMC,EAAUD,EAAO,SAAW,GAC5BE,EAAqB,MAAM,QAAQF,EAAO,WAAW,EAAIA,EAAO,YAAY,MAAM,EAAI,CAAC,EACvFG,EAAYH,EAAO,WAAa,CAAC,EACjCI,EAAS,KAETC,EAAU,MAAOC,EAAUC,EAAQ,CAAC,IAAM,CAC9C,GAAI,CAACD,GAAY,OAAOA,GAAa,SACnC,MAAM,IAAI,MAAM,8DAA8D,EAEhF,IAAMzE,EAAS0E,EAAM,QAAU,CAAC,EAC1BC,GAAUF,EAAS,QAAU,OAAO,YAAY,EAChDnE,EAAOD,GAAgBoE,EAAS,MAAQ,GAAIzE,CAAM,EAClDD,EAAQ2E,EAAM,OAASD,EAAS,OAAS,KACzCG,EAAOF,EAAM,OAAS,OAAYA,EAAM,KAAO,OAC/CG,EAAU,CAAE,GAAIJ,EAAS,SAAW,CAAC,EAAI,GAAIC,EAAM,SAAW,CAAC,CAAG,EAClEI,EAAMJ,EAAM,KAAOD,EAAS,KAAO,KACnC5D,EAAc,CAClB,GAAG0D,EAAOV,GACV,GAAGQ,EACH,GAAII,EAAS,aAAe,CAAC,EAC7B,GAAIC,EAAM,aAAe,CAAC,CAC5B,EAEMK,EAAM,GAAGX,CAAO,GAAG9D,CAAI,GAAGR,GAAWC,CAAK,CAAC,GAC3Ce,EAAO,MAAOC,GAAQ,CAC1B,IAAMiE,EAAO,CAAE,OAAQjE,EAAI,OAAQ,QAASA,EAAI,QAAS,OAAQA,EAAI,MAAO,EACxEA,EAAI,OAAS,QAAaA,EAAI,SAAW,OAASA,EAAI,SAAW,SAC/DP,GAAcO,EAAI,IAAI,GACnBiE,EAAK,QAAQ,cAAc,IAAGA,EAAK,QAAQ,cAAc,EAAI,oBAClEA,EAAK,KAAO,KAAK,UAAUjE,EAAI,IAAI,GAEnCiE,EAAK,KAAOjE,EAAI,MAGpB,IAAMJ,GAAM,MAAM,MAAMI,EAAI,IAAKiE,CAAI,EAC/BpC,GAAO,MAAMlC,GAAcC,EAAG,EACpC,GAAI,CAACA,GAAI,GAAI,CACX,IAAMkC,GAAM,IAAI,MAAM,mBAAmBlC,GAAI,MAAM,EAAE,EACrD,MAAAkC,GAAI,OAASlC,GAAI,OACjBkC,GAAI,KAAOD,GACLC,EACR,CACA,OAAOD,EACT,EAEM7B,EAAM,CACV,OAAA4D,EACA,IAAAI,EACA,KAAAzE,EACA,QAAA8D,EACA,QAAAS,EACA,MAAA9E,EACA,KAAA6E,EACA,OAAA5E,EACA,SAAAyE,EACA,OAAQC,EAAM,MAChB,EAGM9B,EAAO,MADDhC,GAAQC,EAAaC,CAAI,EACdC,CAAG,EAC1B,OAAO,OAAO+D,GAAQ,WAAaA,EAAIlC,CAAI,EAAIA,CACjD,EAEMqC,EAAM,CAAE,QAAAT,CAAQ,EACtB,OAAW,CAACU,EAAMC,CAAG,IAAK,OAAO,QAAQb,CAAS,EAChDW,EAAIC,CAAI,EAAI,CAACR,EAAQ,CAAC,IAAMF,EAAQW,EAAKT,CAAK,EAEhD,OAAOO,CACT,CAMA,WAAWrF,EAAK,CACd,IAAMqE,EAAI,KAAKN,GAAS,IAAIhE,GAAaC,CAAG,CAAC,EACxCqE,GACLA,EAAE,WAAW,CACf,CAOA,QAAQrE,EAAK,CACX,IAAMqE,EAAI,KAAKN,GAAS,IAAIhE,GAAaC,CAAG,CAAC,EAC7C,OAAKqE,EACEA,EAAE,QAAQ,EADF,IAEjB,CAMA,OAAOrE,EAAK,CACV,IAAMmE,EAASpE,GAAaC,CAAG,EACzBqE,EAAI,KAAKN,GAAS,IAAII,CAAM,EAC7BE,IACLA,EAAE,OAAO,EACT,KAAKN,GAAS,OAAOI,CAAM,EAC7B,CAEAD,IAAyB,CACnB,KAAKF,IACL,OAAO,OAAW,MACtB,KAAKA,GAAa,GAElB,OAAO,iBAAiB,QAAS,IAAM,CACrC,QAAWK,KAAK,KAAKN,GAAS,OAAO,EAC9BM,EAAE,gBACHA,EAAE,SAASA,EAAE,QAAQ,CAE7B,CAAC,EAED,OAAO,iBAAiB,SAAU,IAAM,CACtC,QAAWA,KAAK,KAAKN,GAAS,OAAO,EAC9BM,EAAE,oBACHA,EAAE,SAASA,EAAE,QAAQ,CAE7B,CAAC,EACH,CACF,EC1gBA,SAASmB,GAAcC,EAAU,CAC/B,GAAI,CAACA,EAAU,MAAO,GACtB,IAAIC,EAAOD,EAAS,KAAK,EACzB,OAAKC,EAAK,WAAW,GAAG,IAAGA,EAAO,IAAIA,CAAI,IACtCA,EAAK,OAAS,GAAKA,EAAK,SAAS,GAAG,IAAGA,EAAOA,EAAK,MAAM,EAAG,EAAE,GAC3DA,CACT,CAEA,SAASC,EAAkBC,EAAUC,EAAe,CAClD,IAAIC,EAAOF,GAAY,IACvB,OAAKE,EAAK,WAAW,GAAG,IAAGA,EAAO,IAAIA,CAAI,IACtCA,EAAK,OAAS,GAAKA,EAAK,SAAS,GAAG,GAAKD,IAAkB,aAC7DC,EAAOA,EAAK,MAAM,EAAG,EAAE,GAElBA,CACT,CAEA,SAASC,GAAYC,EAAM,CACzB,OAAOA,EAAK,QAAQ,sBAAuB,MAAM,CACnD,CAEA,SAASC,GAAYH,EAAM,CAAE,cAAAI,EAAe,cAAAL,CAAc,EAAG,CAE3D,IAAMM,EAAaR,EADLG,IAAS,GAAK,IAAMA,EACU,UAAU,EACtD,GAAIK,IAAe,MAAQA,IAAe,IACxC,MAAO,CACL,MAAO,OACP,KAAM,CAAC,GAAG,EACV,MAAO,CACT,EAGF,IAAMC,EAAWD,EAAW,MAAM,GAAG,EAAE,OAAO,OAAO,EAC/CE,EAAO,CAAC,EACVC,EAAQ,EACRC,EAAU,IAEd,QAAWC,KAAOJ,EAAU,CAC1B,GAAII,IAAQ,IAAK,CACfH,EAAK,KAAK,GAAG,EACbE,GAAW,aACXD,GAAS,EACT,QACF,CAEA,GAAIE,EAAI,WAAW,GAAG,EAAG,CACvB,IAAMC,EAAMD,EAAI,MAAM,CAAC,EACjBE,EAAaD,EAAI,SAAS,GAAG,EAC7BE,EAAOD,EAAaD,EAAI,MAAM,EAAG,EAAE,EAAIA,EAC7CJ,EAAK,KAAKM,CAAI,EACVD,EACFH,GAAW,gBAEXA,GAAW,WAEbD,GAAS,EACT,QACF,CAEAC,GAAW,IAAIR,GAAYS,CAAG,CAAC,GAC/BF,GAAS,CACX,CAEIF,EAAS,SAAW,IAAGG,GAAW,MAElCV,IAAkB,WACpBU,GAAW,IAEXA,GAAW,MAGb,IAAMK,EAAQV,EAAgB,GAAK,IACnC,MAAO,CACL,MAAO,IAAI,OAAOK,EAASK,CAAK,EAChC,KAAAP,EACA,MAAAC,CACF,CACF,CAEA,SAASO,GAAWC,EAAQ,CAC1B,IAAMC,EAAM,CAAC,EACb,GAAI,CAACD,EAAQ,OAAOC,EACpB,IAAMC,EAAS,IAAI,gBAAgBF,EAAO,WAAW,GAAG,EAAIA,EAAS,IAAIA,CAAM,EAAE,EACjF,OAAW,CAACG,EAAGC,CAAC,IAAKF,EAAO,QAAQ,EAClC,GAAI,OAAO,UAAU,eAAe,KAAKD,EAAKE,CAAC,EAAG,CAChD,IAAME,EAAOJ,EAAIE,CAAC,EAClBF,EAAIE,CAAC,EAAI,MAAM,QAAQE,CAAI,EAAIA,EAAK,OAAOD,CAAC,EAAI,CAACC,EAAMD,CAAC,CAC1D,MACEH,EAAIE,CAAC,EAAIC,EAGb,OAAOH,CACT,CAEA,SAASK,GAASC,EAAO,CACvB,GAAI,CAACA,GAAS,OAAOA,GAAU,SAAU,MAAO,GAChD,IAAML,EAAS,IAAI,gBACnB,OAAW,CAACC,EAAGC,CAAC,IAAK,OAAO,QAAQG,CAAK,EACvC,GAAI,MAAM,QAAQH,CAAC,EACjB,QAAWI,KAAQJ,EAAGF,EAAO,OAAOC,EAAG,OAAOK,CAAI,CAAC,OAC1CJ,GAAK,MACdF,EAAO,IAAIC,EAAG,OAAOC,CAAC,CAAC,EAG3B,IAAMK,EAAMP,EAAO,SAAS,EAC5B,OAAOO,EAAM,IAAIA,CAAG,GAAK,EAC3B,CAEA,SAASC,GAAS,CAAE,SAAA5B,EAAU,OAAAkB,EAAQ,KAAAW,CAAK,EAAG,CAG5C,MAAO,GAAG7B,CAAQ,GAFRkB,GAAU,EAEE,GADZW,GAAQ,EACQ,EAC5B,CAEA,SAASC,GAAUC,EAAYC,EAAW,CACxC,IAAMC,EAAQD,GAAa,KAAO,GAAK,OAAOA,CAAS,EAAE,KAAK,EAC9D,GAAIC,EAAM,WAAW,GAAG,EAAG,OAAOA,GAAS,IAC3C,IAAMnC,EAAOiC,GAAcA,IAAe,IAAMA,EAAa,GAC7D,OAAKE,EACE,GAAGnC,CAAI,IAAImC,CAAK,GADJnC,GAAQ,GAE7B,CAEA,SAASoC,GAAcC,EAAQ,CAC7B,OAAI,OAAOA,GAAW,SAAiB,SAAS,cAAcA,CAAM,EAC7DA,CACT,CAEA,SAASC,GAAiBC,EAAO,CAC/B,OAAO,OAAOA,GAAU,UAC1B,CAEA,SAASC,GAAUD,EAAO,CACxB,MAAO,CAAC,CAACA,GAAS,OAAOA,EAAM,MAAS,UAC1C,CAEO,IAAME,EAAN,KAAa,CAClBC,GAAU,CAAC,EACXC,GAAY,EACZC,GACAC,GAAe,KACfC,GAAc,KACdC,GAAY,KACZC,GAAW,KACXC,GAAa,GACbC,GAAY,EACZC,GAAc,IAAI,IAClBC,GAAa,IAAI,IACjBC,GAAU,KAEV,YAAYC,EAAU,CAAC,EAAG,CAYxB,GAXA,KAAKV,GAAW,CACd,KAAMU,EAAQ,MAAQ,UACtB,SAAUxD,GAAcwD,EAAQ,UAAY,EAAE,EAC9C,cAAe,CAAC,CAACA,EAAQ,cACzB,cAAeA,EAAQ,eAAiB,SACxC,aAAcA,EAAQ,cAAgB,EACtC,kBAAmBA,EAAQ,mBAAqB,GAChD,WAAYA,EAAQ,YAAc,KAClC,UAAWA,EAAQ,WAAa,IAClC,EAEI,KAAKV,GAAS,OAAS,SAAU,CACnC,IAAMW,EAAUD,EAAQ,YAAc,IACtC,KAAKD,GAAU,CACb,MAAO,CAAC,KAAKG,GAAUD,CAAO,CAAC,EAC/B,MAAO,CACT,CACF,CACF,CAEA,IAAIE,EAAcC,EAAWJ,EAAU,CAAC,EAAG,CACzC,IAAIK,EAAS,KACb,GAAI,OAAOF,GAAiB,SAC1BE,EAAS,CAAE,KAAMF,EAAc,KAAMC,EAAW,GAAGJ,CAAQ,UAClDhB,GAAiBmB,CAAY,EAAG,CACzC,IAAMG,EAAQH,EAAa,OAASA,EAAa,MAAQ,KACrDG,GAAS,OAAOA,GAAU,SAC5BD,EAAS,CAAE,GAAGC,EAAO,KAAMH,EAAc,GAAGH,CAAQ,EAEpDK,EAAS,CAAE,KAAMC,EAAO,KAAMH,EAAc,GAAGH,CAAQ,CAE3D,MAAWG,GAAgB,OAAOA,GAAiB,WACjDE,EAAS,CAAE,GAAGF,CAAa,GAG7B,GAAI,CAACE,GAAUA,EAAO,MAAQ,KAC5B,MAAM,IAAI,MAAM,kCAAkC,EAGpD,OAAO,KAAKE,GAAgBF,EAAQ,IAAI,CAC1C,CAEAE,GAAgBF,EAAQG,EAAQ,CAC9B,IAAMC,EAAc,MAAM,QAAQJ,EAAO,QAAQ,GAAKA,EAAO,SAAS,OAAS,EACzEK,EAAY,CAAC,CAACL,EAAO,MAAQ,CAAC,CAACA,EAAO,MAAQ,CAAC,CAACA,EAAO,SAC7D,GAAI,CAACK,GAAa,CAACD,GAAe,CAACJ,EAAO,OACxC,MAAM,IAAI,MAAM,sBAAsBA,EAAO,IAAI,0DAA0D,EAG7G,IAAMM,EAAoBjC,GAAT8B,EAAmBA,EAAO,KAA+B,GAAzBH,EAAO,IAAI,EACtDC,EAAQ,CACZ,GAAI,GAAG,EAAE,KAAKjB,EAAS,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,GAC9D,KAAMgB,EAAO,MAAQ,KACrB,KAAMM,EACN,QAASN,EAAO,KAChB,OAAQG,GAAU,KAClB,KAAMH,EAAO,MAAQ,KACrB,SAAUA,EAAO,UAAY,KAC7B,OAAQA,EAAO,QAAU,KACzB,OAAQA,EAAO,QAAU,KACzB,YAAaA,EAAO,aAAe,KACnC,YAAaA,EAAO,aAAe,KACnC,MAAOA,EAAO,OAAS,KACvB,MAAOA,EAAO,OAAS,KACvB,WAAYA,EAAO,YAAc,KACjC,UAAWA,EAAO,WAAa,KAC/B,KAAMA,EAAO,MAAQ,KACrB,KAAMA,EAAO,MAAQ,KACrB,OAAQA,EAAO,QAAU,KACzB,SAAU,CAAC,CACb,EAEA,GAAIK,EAAW,CACb,IAAME,EAAW3D,GAAYqD,EAAM,KAAM,KAAKhB,EAAQ,EACtDgB,EAAM,MAAQM,EAAS,MACvBN,EAAM,KAAOM,EAAS,KACtBN,EAAM,MAAQM,EAAS,MACvB,KAAKxB,GAAQ,KAAKkB,CAAK,EACvB,KAAKlB,GAAQ,KAAK,CAAC,EAAGyB,IAAMA,EAAE,MAAQ,EAAE,KAAK,CAC/C,CAEA,GAAIJ,EACF,QAAW5B,KAASwB,EAAO,SAAU,CACnC,IAAMS,EAAa,KAAKP,GAAgB1B,EAAOyB,CAAK,EAChDQ,GAAYR,EAAM,SAAS,KAAKQ,CAAU,CAChD,CAGF,OAAOR,CACT,CAEA,WAAWS,EAAI,CACb,YAAKlB,GAAY,IAAIkB,CAAE,EAChB,IAAM,KAAKlB,GAAY,OAAOkB,CAAE,CACzC,CAEA,UAAUA,EAAI,CACZ,YAAKjB,GAAW,IAAIiB,CAAE,EACf,IAAM,KAAKjB,GAAW,OAAOiB,CAAE,CACxC,CAEA,MAAMhC,EAAQ,CACZ,IAAMiC,EAAKlC,GAAcC,CAAM,EAC/B,GAAI,CAACiC,EAAI,MAAM,IAAI,MAAM,gCAAgC,EACrD,KAAKzB,KACT,KAAKA,GAAeyB,EACpB,KAAKxB,GAAcyB,EAAc,iBAAkB,QAAQ,EAC3D,KAAKxB,GAAYwB,EAAc,eAAgB,QAAQ,EACvDD,EAAG,YAAY,KAAKxB,EAAW,EAC/BwB,EAAG,YAAY,KAAKvB,EAAS,EAC7B,KAAK,MAAM,EACb,CAEA,SAAU,CACR,KAAK,KAAK,EACN,KAAKC,KACP,KAAKwB,GAAiB,EACtB,KAAKxB,GAAW,MAEd,KAAKF,IAAe,KAAKC,KAC3B0B,EAAa,KAAK3B,GAAa,KAAKC,EAAS,EAC7C,KAAKD,GAAY,OAAO,EACxB,KAAKC,GAAU,OAAO,GAExB,KAAKD,GAAc,KACnB,KAAKC,GAAY,KACjB,KAAKF,GAAe,IACtB,CAEA,OAAQ,CACF,KAAKI,KACT,KAAKA,GAAa,GACd,KAAKL,GAAS,OAAS,UACzB,OAAO,iBAAiB,WAAY,KAAK8B,EAAU,EAC1C,KAAK9B,GAAS,OAAS,SAChC,OAAO,iBAAiB,aAAc,KAAK8B,EAAU,EACrD,OAAO,iBAAiB,WAAY,KAAKA,EAAU,GAErD,KAAKC,GAAsB,CAAE,OAAQ,OAAQ,CAAC,EAChD,CAEA,MAAO,CACA,KAAK1B,KACV,KAAKA,GAAa,GAClB,OAAO,oBAAoB,WAAY,KAAKyB,EAAU,EACtD,OAAO,oBAAoB,aAAc,KAAKA,EAAU,EAC1D,CAEA,SAASE,EAAItB,EAAU,CAAC,EAAG,CACzB,OAAO,KAAKuB,GAAMD,EAAI,CAAE,GAAGtB,EAAS,QAAS,EAAM,CAAC,CACtD,CAEA,QAAQsB,EAAItB,EAAU,CAAC,EAAG,CACxB,OAAO,KAAKuB,GAAMD,EAAI,CAAE,GAAGtB,EAAS,QAAS,EAAK,CAAC,CACrD,CAEA,MAAO,CACL,GAAI,KAAKV,GAAS,OAAS,SAAU,CACnC,KAAKkC,GAAY,EACjB,MACF,CACA,QAAQ,KAAK,CACf,CAEA,SAAU,CACR,GAAI,KAAKlC,GAAS,OAAS,SAAU,CACnC,KAAKmC,GAAe,EACpB,MACF,CACA,QAAQ,QAAQ,CAClB,CAEA,GAAGC,EAAO,CACR,GAAI,KAAKpC,GAAS,OAAS,SAAU,CACnC,KAAKqC,GAAUD,CAAK,EACpB,MACF,CACA,QAAQ,GAAGA,CAAK,CAClB,CAEA,QAAQ5E,EAAM,CACZ,GAAI,OAAOA,GAAS,SAAU,CAC5B,IAAM8E,EAAM,IAAI,IAAI9E,EAAM,OAAO,SAAS,MAAM,EAC5CF,EAAWD,EAAkBiF,EAAI,SAAU,KAAKtC,GAAS,aAAa,EACpE5C,EAAO,KAAK4C,GAAS,SAC3B,OAAI5C,GAAQ,CAACE,EAAS,WAAWF,CAAI,IAAGE,EAAW,GAAGF,CAAI,GAAGE,CAAQ,IAC9D,GAAGA,CAAQ,GAAGgF,EAAI,QAAU,EAAE,GAAGA,EAAI,MAAQ,EAAE,EACxD,CACA,IAAMhF,EAAWD,EAAkBG,EAAK,UAAY,IAAK,KAAKwC,GAAS,aAAa,EAC9ExB,EAAShB,EAAK,QAAUsB,GAAStB,EAAK,KAAK,EAC3C2B,EAAO3B,EAAK,MAAQ,GACpBJ,EAAO,KAAK4C,GAAS,SAE3B,MAAO,GADU5C,GAAQ,CAACE,EAAS,WAAWF,CAAI,EAAI,GAAGA,CAAI,GAAGE,CAAQ,GAAKA,CAC3D,GAAGkB,CAAM,GAAGW,CAAI,EACpC,CAEA,MAAMmD,EAAK,CACT,IAAMC,EAAM,KAAK3B,GAAU0B,CAAG,EACxBE,EAAQ,KAAKC,GAAOF,EAAI,QAAQ,EACtC,OAAKC,EACE,CAAE,SAAUD,EAAK,MAAAC,CAAM,EADX,CAAE,SAAUD,EAAK,MAAO,IAAK,CAElD,CAEA,IAAI,SAAU,CACZ,OAAO,KAAKnC,EACd,CAEA,MAAM,aAAc,CAClB,GAAI,CAAC,KAAKA,GAAU,MAAO,GAE3B,IAAMsC,EAAM,CACV,OAAQ,KACR,MAAO,KAAKtC,GAAS,MACrB,MAAO,KAAKA,GAAS,MACrB,OAAQ,KAAKA,GAAS,OACtB,MAAO,KAAKA,GAAS,MACrB,SAAU,KAAKA,GAAS,SACxB,MAAO,KAAKA,GAAS,UAAU,OAAS,KACxC,OAAQ,YACV,EAEMuC,EAAgB,IAAI,IAE1B,OADW,MAAM,KAAKC,GAAW,KAAKxC,GAAS,MAAOsC,EAAKC,CAAa,CAE1E,CAEA,gBAAgBjC,EAAU,CAAC,EAAG,CAC5B,IAAMmC,EAAUnC,EAAQ,SAAW,GAC7BoC,EAAepC,EAAQ,cAAgB,GACvCqC,EAAIC,EAAM,KAAKC,GAAc,GAAG,OAAS,CAAC,CAAC,EAC7CC,EAAiBpE,GAASiE,EAAE,IAAI,CAAC,EACjCI,EAAU,GAERC,EAAqBC,GAAa,CACtC,IAAMC,EAAYD,GAAU,OAAS,CAAC,EAChCE,EAAiBzE,GAASwE,CAAS,EACrCC,IAAmBL,IACvBA,EAAiBK,EACjBR,EAAE,IAAIO,CAAS,EACjB,EAEME,EAAa,KAAK,UAAU,CAAC,CAAE,SAAAH,CAAS,IAAM,CAClD,GAAIF,EAAS,CACXA,EAAU,GACV,MACF,CACAC,EAAkBC,CAAQ,CAC5B,CAAC,EAEKI,EAAaC,EAAMX,CAAC,EAAE,OAAQY,GAAS,CAC3C,IAAMJ,EAAiBzE,GAAS6E,CAAI,EACpC,GAAIJ,IAAmBL,EAAgB,OACvCA,EAAiBK,EACjBJ,EAAU,GACV,IAAMS,EAAU,KAAKX,GAAc,EAC7B3F,EAAWsG,GAAS,UAAY,IAChCzE,EAAO2D,GAAec,GAAS,MAAQ,GACvCnE,EAAS,CAAE,SAAAnC,EAAU,MAAOqG,EAAM,KAAAxE,CAAK,EACzC0D,EACF,KAAK,QAAQpD,CAAM,EAEnB,KAAK,SAASA,CAAM,CAExB,CAAC,EAED,cAAO,eAAesD,EAAG,UAAW,CAClC,MAAO,IAAM,CACP,OAAOS,GAAe,YAAYA,EAAW,EAC7C,OAAOC,GAAe,YAAYA,EAAW,CACnD,EACA,WAAY,EACd,CAAC,EAEMV,CACT,CAEAjB,GAAa,IAAM,CACjB,KAAKC,GAAsB,CAAE,OAAQ,KAAM,CAAC,CAC9C,EAEAkB,IAAgB,CACd,GAAI,KAAKjD,GAAS,OAAS,SACzB,OAAO,KAAKS,GAAQ,MAAM,KAAKA,GAAQ,KAAK,EAE9C,GAAI,KAAKT,GAAS,OAAS,OAAQ,CACjC,IAAM7B,EAAM,OAAO,SAAS,KAAO,OAAO,SAAS,KAAK,MAAM,CAAC,EAAI,IACnE,OAAO,KAAKyC,GAAUzC,CAAG,CAC3B,CACA,OAAO,KAAKyC,GAAU,OAAO,SAAS,IAAI,CAC5C,CAEAA,GAAUiD,EAAO,CACf,IAAMzG,EAAO,OAAO,SAAS,OACvBkF,EAAM,IAAI,IAAIuB,EAAOzG,CAAI,EACzBE,EAAWD,EAAkBiF,EAAI,SAAU,KAAKtC,GAAS,aAAa,EACtE7C,EAAW,KAAK6C,GAAS,SACzB8D,EACJ3G,GAAYG,EAAS,WAAWH,CAAQ,EAAIG,EAAS,MAAMH,EAAS,MAAM,GAAK,IAAMG,EACvF,MAAO,CACL,SAAUD,EAAkByG,EAAU,KAAK9D,GAAS,aAAa,EACjE,OAAQsC,EAAI,QAAU,GACtB,KAAMA,EAAI,MAAQ,GAClB,MAAO/D,GAAW+D,EAAI,MAAM,EAC5B,MAAO,QAAQ,OAAS,KACxB,IAAKpD,GAAS,CAAE,SAAUoD,EAAI,SAAU,OAAQA,EAAI,OAAQ,KAAMA,EAAI,IAAK,CAAC,CAC9E,CACF,CAEAJ,IAAc,CACR,KAAKzB,GAAQ,OAAS,IAC1B,KAAKA,GAAQ,OAAS,EACtB,KAAKsB,GAAsB,CAAE,OAAQ,KAAM,CAAC,EAC9C,CAEAI,IAAiB,CACX,KAAK1B,GAAQ,OAAS,KAAKA,GAAQ,MAAM,OAAS,IACtD,KAAKA,GAAQ,OAAS,EACtB,KAAKsB,GAAsB,CAAE,OAAQ,KAAM,CAAC,EAC9C,CAEAM,GAAUD,EAAO,CACf,IAAMuB,EAAO,KAAKlD,GAAQ,MAAQ2B,EAC9BuB,EAAO,GAAKA,GAAQ,KAAKlD,GAAQ,MAAM,SAC3C,KAAKA,GAAQ,MAAQkD,EACrB,KAAK5B,GAAsB,CAAE,OAAQ,KAAM,CAAC,EAC9C,CAEA,KAAME,GAAMD,EAAI,CAAE,QAAAa,EAAS,MAAAG,EAAO,cAAAL,CAAc,EAAI,CAAC,EAAG,CACtD,IAAMoB,EAAY,OAAO/B,GAAO,SAAWA,EAAK,KAAK,QAAQA,CAAE,EACzD2B,EAAO,KAAK/C,GAAUmD,CAAS,EACrCJ,EAAK,MAAQX,GAAS,KAEtB,IAAMgB,EAAQ,EAAE,KAAK1D,GAErB,GAAI,CADO,MAAM,KAAK2D,GAAeN,EAAM,CAAE,MAAAK,EAAO,OAAQ,WAAY,cAAArB,CAAc,CAAC,EAC9E,OAET,GAAI,KAAK3C,GAAS,OAAS,SAAU,CAC/B6C,EACF,KAAKpC,GAAQ,MAAM,KAAKA,GAAQ,KAAK,EAAI,CAAE,GAAGkD,EAAM,MAAOX,GAAS,IAAK,GAEzE,KAAKvC,GAAQ,MAAQ,KAAKA,GAAQ,MAAM,MAAM,EAAG,KAAKA,GAAQ,MAAQ,CAAC,EACvE,KAAKA,GAAQ,MAAM,KAAK,CAAE,GAAGkD,EAAM,MAAOX,GAAS,IAAK,CAAC,EACzD,KAAKvC,GAAQ,MAAQ,KAAKA,GAAQ,MAAM,OAAS,GAEnD,MACF,CAEA,IAAMyD,EAAO,KAAK,QAAQP,EAAK,QAAQ,GAAKA,EAAK,QAAU,KAAOA,EAAK,MAAQ,IAC/E,GAAI,KAAK3D,GAAS,OAAS,OAAQ,CACjC,IAAMsC,EAAM,IAAI4B,CAAI,GACpB,QAAQrB,EAAU,eAAiB,WAAW,EAAEG,GAAS,KAAM,GAAIV,CAAG,CACxE,MACE,QAAQO,EAAU,eAAiB,WAAW,EAAEG,GAAS,KAAM,GAAIkB,CAAI,CAE3E,CAEA,KAAMnC,GAAsB,CAAE,OAAAoC,EAAQ,cAAAxB,CAAc,EAAI,CAAC,EAAG,CAC1D,GAAI,CAAC,KAAK1C,IAAgB,CAAC,KAAKC,IAAe,CAAC,KAAKC,GAAW,OAChE,IAAM6D,EAAQ,EAAE,KAAK1D,GACfiC,EAAM,KAAKU,GAAc,EACzBmB,EAAQzB,GAAiB,IAAI,IACnC,MAAM,KAAKsB,GAAe1B,EAAK,CAAE,MAAAyB,EAAO,OAAAG,EAAQ,cAAeC,CAAM,CAAC,CACxE,CAEA3B,GAAOnF,EAAU,CACf,QAAW0D,KAAS,KAAKlB,GAAS,CAChC,IAAMuE,EAAIrD,EAAM,MAAM,KAAK1D,CAAQ,EACnC,GAAI,CAAC+G,EAAG,SACR,IAAM3F,EAAS,CAAC,EAChB,QAAS4F,EAAI,EAAGA,EAAItD,EAAM,KAAK,OAAQsD,IAAK,CAC1C,IAAMC,EAAMvD,EAAM,KAAKsD,CAAC,EACxB5F,EAAO6F,CAAG,EAAIF,EAAEC,EAAI,CAAC,EAAI,mBAAmBD,EAAEC,EAAI,CAAC,CAAC,EAAI,MAC1D,CACA,IAAMF,EAAQ,CAAC,EACXI,EAAMxD,EACV,KAAOwD,GACLJ,EAAM,QAAQI,CAAG,EACjBA,EAAMA,EAAI,OAEZ,MAAO,CAAE,MAAAxD,EAAO,OAAAtC,EAAQ,MAAA0F,CAAM,CAChC,CACA,OAAO,IACT,CAEA,KAAMH,GAAeZ,EAAU,CAAE,MAAAW,EAAO,OAAAG,EAAQ,cAAAxB,CAAc,EAAG,CAC/D,GAAIqB,IAAU,KAAK1D,GAAW,OAE9B,IAAMkC,EAAQ,KAAKC,GAAOY,EAAS,QAAQ,EAC3C,GAAI,CAACb,EAAO,MAAO,GAEnB,GAAM,CAAE,MAAAxB,EAAO,OAAAtC,EAAQ,MAAA0F,CAAM,EAAI5B,EAC3BiC,EAAY,KAAKrE,IAAY,KAAKA,GAAS,QAAUY,EACrD0D,EAAQ1D,EAAM,OAASA,EAAM,MAAM,OAAS,GAC5C2D,EAAa3D,EAAM,YAAcA,EAAM,MAAM,YAAc,KAAKhB,GAAS,WAEzE0C,EAAM,CACV,OAAQ,KACR,MAAA1B,EACA,MAAAoD,EACA,OAAA1F,EACA,MAAO2E,EAAS,OAAS,CAAC,EAC1B,SAAAA,EACA,MAAOA,EAAS,OAAS,KACzB,OAAAc,CACF,EAEA,GAAI,CAEF,GADiB,MAAM,KAAKS,GAAiBR,EAAO1B,EAAKC,CAAa,EACxD,MAAO,GAGrB,GAAI,CADO,MAAM,KAAKC,GAAWwB,EAAO1B,EAAKC,CAAa,EAExD,OAAIwB,IAAW,OAAO,KAAKU,GAAmB,EACvC,GAGT,IAAMC,EAAO,MAAM,KAAKC,GAAWX,EAAO1B,CAAG,EAC7C,GAAIsB,IAAU,KAAK1D,GAAW,MAAO,GAKrC,GAHAoC,EAAI,KAAOoC,GAAM,MAAQA,EACzBpC,EAAI,UAAYoC,GAAM,KAAO,CAAC,EAE1BL,GAAa,KAAKrE,IAAU,MAAQsE,EACtC,YAAKM,GAAetC,CAAG,EAChB,GAGT,IAAMuC,EAAY,MAAM,KAAKC,GAAalE,EAAO0B,CAAG,EACpD,OAAIsB,IAAU,KAAK1D,IAAa,CAAC2E,EAAkB,IAEnD,MAAM,KAAKE,GAAUF,EAAWvC,EAAKiC,CAAU,EACxC,GACT,OAASS,EAAK,CACZ,OAAO,MAAM,KAAKC,GAAaD,EAAK1C,EAAKiC,CAAU,CACrD,CACF,CAEA,KAAMC,GAAiBR,EAAO1B,EAAKC,EAAe,CAChD,QAAW3B,KAASoD,EAAO,CACzB,IAAI3E,EAAS,KAGb,GAFI,OAAOuB,EAAM,UAAa,WAAUvB,EAASuB,EAAM,UACnD,OAAOA,EAAM,UAAa,aAAYvB,EAASuB,EAAM,SAAS,CAAE,GAAG0B,EAAK,MAAA1B,CAAM,CAAC,GAC/E,OAAOvB,GAAW,SACpB,OAAO,KAAK6F,GAAY7F,EAAQkD,CAAa,EAE/C,GAAI/C,GAAUH,CAAM,EAAG,CACrB,IAAMkE,EAAO,MAAMlE,EACnB,GAAI,OAAOkE,GAAS,SAAU,OAAO,KAAK2B,GAAY3B,EAAMhB,CAAa,CAC3E,CACF,CACA,MAAO,EACT,CAEA,KAAMC,GAAWwB,EAAO1B,EAAKC,EAAe,CAC1C,QAAWlB,KAAM,KAAKlB,GAAa,CACjC,IAAMgF,EAAM,MAAM9D,EAAGiB,CAAG,EACxB,GAAI,MAAM,KAAK8C,GAAmBD,EAAK5C,CAAa,EAAG,MAAO,EAChE,CAEA,QAAW3B,KAASoD,EAAO,CACzB,IAAMqB,EAAS,CAAC,EACZ,MAAM,QAAQzE,EAAM,MAAM,GAAGyE,EAAO,KAAK,GAAGzE,EAAM,MAAM,EACxD,OAAOA,EAAM,QAAW,YAAYyE,EAAO,KAAKzE,EAAM,MAAM,EAC5D,OAAOA,EAAM,aAAgB,YAAYyE,EAAO,KAAKzE,EAAM,WAAW,EACtE,OAAOA,EAAM,MAAM,QAAW,YAAYyE,EAAO,KAAKzE,EAAM,KAAK,MAAM,EACvE,MAAM,QAAQA,EAAM,MAAM,MAAM,GAAGyE,EAAO,KAAK,GAAGzE,EAAM,KAAK,MAAM,EACnE,OAAOA,EAAM,MAAM,aAAgB,YAAYyE,EAAO,KAAKzE,EAAM,KAAK,WAAW,EAErF,QAAWS,KAAMgE,EAAQ,CACvB,IAAMF,EAAM,MAAM9D,EAAG,CAAE,GAAGiB,EAAK,MAAA1B,CAAM,CAAC,EACtC,GAAI,MAAM,KAAKwE,GAAmBD,EAAK5C,CAAa,EAAG,MAAO,EAChE,CACF,CACA,MAAO,EACT,CAEA,KAAM6C,GAAmBE,EAAQ/C,EAAe,CAC9C,GAAI+C,IAAW,GAAO,MAAO,GAC7B,GAAI,OAAOA,GAAW,SAAU,OAAO,KAAKJ,GAAYI,EAAQ/C,CAAa,EAC7E,GAAI+C,GAAU,OAAOA,GAAW,UAAY,OAAOA,EAAO,UAAa,SACrE,OAAO,KAAKJ,GAAYI,EAAO,SAAU/C,CAAa,EAExD,GAAI/C,GAAU8F,CAAM,EAAG,CACrB,IAAMC,EAAI,MAAMD,EAChB,OAAO,KAAKF,GAAmBG,EAAGhD,CAAa,CACjD,CACA,MAAO,EACT,CAEA,KAAMoC,GAAWX,EAAO1B,EAAK,CAC3B,IAAMjE,EAAM,CAAC,EACTmH,EACJ,QAAW5E,KAASoD,EAAO,CACzB,IAAMyB,EAAS7E,EAAM,QAAUA,EAAM,MAAM,OAC3C,GAAI,OAAO6E,GAAW,WAAY,SAClC,IAAMf,EAAO,MAAMe,EAAO,CAAE,GAAGnD,EAAK,MAAA1B,CAAM,CAAC,EAC3CvC,EAAIuC,EAAM,EAAE,EAAI8D,EACZ9D,IAAUoD,EAAMA,EAAM,OAAS,CAAC,IAAGwB,EAAWd,EACpD,CACA,MAAO,CAAE,IAAKrG,EAAK,KAAMmH,CAAS,CACpC,CAEA,KAAMV,GAAalE,EAAO0B,EAAK,CAC7B,GAAI1B,EAAM,MAAQtB,GAAiBsB,EAAM,IAAI,EAAG,OAAOA,EAAM,KAC7D,GAAI,OAAOA,EAAM,MAAS,WAAY,CACpC,IAAM8E,EAAS,MAAM9E,EAAM,KAAK0B,CAAG,EACnC,GAAIoD,GAAQ,SAAWpG,GAAiBoG,EAAO,OAAO,EAAG,OAAOA,EAAO,QACvE,GAAIpG,GAAiBoG,CAAM,EAAG,OAAOA,CACvC,CACA,OAAO,IACT,CAEA,KAAMX,GAAUrE,EAAW4B,EAAKiC,EAAY,CAC1C,IAAMoB,EAAQ,CACZ,OAAQrD,EAAI,OACZ,MAAOA,EAAI,MACX,SAAUA,EAAI,SACd,KAAMA,EAAI,KACV,MAAOA,EAAI,MACX,OAAQ,KACR,MAAOA,EAAI,MACX,GAAI,OAAOA,EAAI,MAAM,OAAU,WAAaA,EAAI,MAAM,MAAMA,CAAG,EAAI,CAAC,CACtE,EAEIsD,EACAC,EAAe,GAGnB,GAAInF,EAAU,WAAaA,EAAU,UAAU,cAAgBA,GAAa,CAACA,EAAU,YACrF,GAAI,CACFkF,EAAO,IAAIlF,EAAUiF,CAAK,EAC1BE,EAAe,EACjB,MAAY,CACVD,EAAOlF,EAAUiF,CAAK,CACxB,MAEAC,EAAOlF,EAAUiF,CAAK,EAIpBE,GAAgBD,GAAQ,OAAOA,GAAS,WAC1CA,EAAK,OAAS,KACdA,EAAK,MAAQtD,EAAI,MACjBsD,EAAK,OAAStD,EAAI,OAClBsD,EAAK,MAAQtD,EAAI,MACjBsD,EAAK,SAAWtD,EAAI,SACpBsD,EAAK,KAAOtD,EAAI,KAChBsD,EAAK,MAAQtD,EAAI,OAGnB,IAAM7D,EAAO,KAAKuB,GAClB,GAAIvB,GAAM,KAAM,CACd,IAAMqH,EAAW,CAAE,GAAGxD,EAAK,KAAM7D,CAAK,EACtCA,EAAK,KAAK,aAAa,aAAcqH,EAAU,CAAE,OAAQ,KAAM,KAAMrH,EAAK,IAAK,CAAC,EAChFA,EAAK,KAAK,YAAY,aAAcqH,EAAU,CAAE,OAAQ,KAAM,KAAMrH,EAAK,IAAK,CAAC,CACjF,CAEAmH,EAAK,aAAa,aAActD,EAAK,CAAE,OAAQ,KAAM,KAAAsD,CAAK,CAAC,EAE3D,IAAMG,EAAiB,KAAKC,GAAiBJ,EAAMtD,CAAG,EAChD2D,EAAgBC,EAAS,UAAUH,CAAc,EACvD,QAAWR,KAAKU,EACVC,EAAS,aAAaX,CAAC,EACzBA,EAAE,UAAU,KAAK1F,GAAc,KAAKE,EAAS,EACpCmG,EAAS,UAAUX,CAAC,GAC7B,KAAKxF,GAAU,WAAW,aAAawF,EAAG,KAAKxF,EAAS,EAI5D6F,EAAK,YAAY,aAActD,EAAK,CAAE,OAAQ,KAAM,KAAAsD,CAAK,CAAC,EAEtDnH,GAAM,KAAK+C,GAAiB,EAEhC,KAAKxB,GAAW,CACd,MAAOsC,EAAI,MACX,MAAOA,EAAI,MACX,KAAAsD,EACA,QAASK,EACT,OAAQ3D,EAAI,OACZ,MAAOA,EAAI,MACX,SAAUA,EAAI,SACd,KAAMA,EAAI,KACV,UAAWA,EAAI,SACjB,EAEA,QAAWjB,KAAM,KAAKjB,GAAYiB,EAAG,CAAE,GAAGiB,EAAK,KAAAsD,CAAK,CAAC,EACrD,KAAKO,GAAwB7D,CAAG,CAClC,CAEAsC,GAAetC,EAAK,CAClB,IAAMkB,EAAU,KAAKxD,GACrB,GAAKwD,GAAS,KACd,CAAAA,EAAQ,MAAQlB,EAAI,MACpBkB,EAAQ,OAASlB,EAAI,OACrBkB,EAAQ,MAAQlB,EAAI,MACpBkB,EAAQ,SAAWlB,EAAI,SACvBkB,EAAQ,KAAOlB,EAAI,KACnBkB,EAAQ,KAAK,OAASlB,EAAI,OAC1BkB,EAAQ,KAAK,MAAQlB,EAAI,MACzBkB,EAAQ,KAAK,SAAWlB,EAAI,SAC5BkB,EAAQ,KAAK,KAAOlB,EAAI,KACxBkB,EAAQ,KAAK,MAAQlB,EAAI,MACzBkB,EAAQ,KAAK,aAAa,cAAelB,EAAK,CAAE,OAAQ,KAAM,KAAMkB,EAAQ,IAAK,CAAC,EAClFA,EAAQ,KAAK,YAAY,cAAelB,EAAK,CAAE,OAAQ,KAAM,KAAMkB,EAAQ,IAAK,CAAC,EACjF,QAAWnC,KAAM,KAAKjB,GAAYiB,EAAG,CAAE,GAAGiB,EAAK,KAAMkB,EAAQ,IAAK,CAAC,EACnE,KAAK2C,GAAwB7D,CAAG,EAClC,CAEA,KAAM8D,GAAiBC,EAAUC,EAAU/B,EAAY,CACrD,GAAI,CAACA,GAAc,CAAC8B,EAAU,OAC9B,IAAME,EAAQhC,EAAW,YAAc,iBACjCiC,EAAcjC,EAAW,kBAAoB,wBAC7CkC,EAAOlC,EAAW,WAAa,gBAC/BmC,EAAanC,EAAW,iBAAmB,uBAC3CoC,EAAWpC,EAAW,UAAY,IAExC+B,EAAS,UAAU,IAAIC,CAAK,EAC5BF,EAAS,UAAU,IAAII,CAAI,EAE3B,MAAM,IAAI,QAASlB,GAAM,sBAAsBA,CAAC,CAAC,EACjDe,EAAS,UAAU,IAAIE,CAAW,EAClCH,EAAS,UAAU,IAAIK,CAAU,EAEjC,MAAM,IAAI,QAASnB,GAAM,WAAWA,EAAGoB,CAAQ,CAAC,EAChDL,EAAS,UAAU,OAAOC,EAAOC,CAAW,EAC5CH,EAAS,UAAU,OAAOI,EAAMC,CAAU,CAC5C,CAEAlF,IAAmB,CACjB,IAAMgC,EAAU,KAAKxD,GACrB,GAAKwD,GACD,MAAM,QAAQA,EAAQ,OAAO,EAC/B,QAAW+B,KAAK/B,EAAQ,QAAS0C,EAAS,QAAQX,CAAC,CAEvD,CAEAS,GAAiBJ,EAAMtD,EAAK,CAC1B,IAAIsE,EAAShB,EACP5B,EAAQ1B,EAAI,OAAS,CAAC,EAC5B,QAAS,EAAI0B,EAAM,OAAS,EAAG,GAAK,EAAG,IAAK,CAC1C,IAAMpD,EAAQoD,EAAM,CAAC,EACjB,OAAOpD,EAAM,QAAW,aAC1BgG,EAAShG,EAAM,OAAOgG,EAAQ,CAAE,GAAGtE,EAAK,MAAA1B,CAAM,CAAC,EAEnD,CACA,OAAOgG,CACT,CAEA,KAAM1B,GAAY7F,EAAQkD,EAAe,CACvC,GAAIA,EAAc,MAAQ,KAAK3C,GAAS,aACtC,MAAM,IAAI,MAAM,4BAA4B,EAE9C,GAAI2C,EAAc,IAAIlD,CAAM,EAC1B,MAAM,IAAI,MAAM,6BAA6BA,CAAM,GAAG,EAExD,OAAAkD,EAAc,IAAIlD,CAAM,EACxB,MAAM,KAAKwC,GAAMxC,EAAQ,CAAE,QAAS,GAAM,cAAAkD,CAAc,CAAC,EAClD,EACT,CAEA,KAAM0C,GAAaD,EAAK1C,EAAKiC,EAAY,CACvC,IAAMsC,EAAYvE,EAAI,MAAM,WAAa,KAAK1C,GAAS,UACvD,GAAI,CAACiH,EAAW,MAAM7B,EACtB,IAAM8B,EAAW,CAAE,GAAGxE,EAAK,MAAO0C,CAAI,EACtC,MAAM,KAAKD,GAAU8B,EAAWC,EAAUvC,CAAU,EACpD,IAAMqB,EAAO,KAAK5F,IAAU,KAC5B,OAAI4F,IACFA,EAAK,WAAW,aAAckB,EAAU,CAAE,OAAQ,KAAM,KAAAlB,CAAK,CAAC,EAC9DA,EAAK,UAAU,aAAckB,EAAU,CAAE,OAAQ,KAAM,KAAAlB,CAAK,CAAC,GAExD,EACT,CAEAO,GAAwB7D,EAAK,CAC3B,GAAI,CAAC,KAAK1C,GAAS,kBAAmB,OACtC,IAAMb,EAAOuD,EAAI,UAAU,KAC3B,GAAIvD,GAAQA,EAAK,OAAS,EAAG,CAC3B,IAAMgI,EAAKhI,EAAK,MAAM,CAAC,EACjBuC,EAAK,SAAS,eAAeyF,CAAE,EACrC,GAAIzF,EAAI,CACNA,EAAG,eAAe,EAClB,MACF,CACF,CACA,OAAO,SAAS,EAAG,CAAC,CACtB,CAEAmD,IAAqB,CACnB,IAAMjB,EAAU,KAAKxD,IAAU,SAC/B,GAAI,CAACwD,EAAS,OACd,IAAMM,EAAO,KAAK,QAAQN,EAAQ,QAAQ,GAAKA,EAAQ,QAAU,KAAOA,EAAQ,MAAQ,IACxF,GAAI,KAAK5D,GAAS,OAAS,OAAQ,CACjC,QAAQ,aAAa4D,EAAQ,OAAS,KAAM,GAAI,IAAIM,CAAI,EAAE,EAC1D,MACF,CACA,QAAQ,aAAaN,EAAQ,OAAS,KAAM,GAAIM,CAAI,CACtD,CACF,EAEO,SAASkD,GAAa1G,EAAS,CACpC,IAAM2G,EAAS,IAAIxH,EAAOa,CAAO,EACjC,GAAIA,GAAS,QAAU,MAAM,QAAQA,EAAQ,MAAM,EACjD,QAAWM,KAASN,EAAQ,OAC1B2G,EAAO,IAAIrG,CAAK,EAGpB,OAAOqG,CACT,CAEO,IAAMA,GAAS,IAAIxH,EC51B1B,IAAMyH,GAAN,cAA8BC,CAAW,CACvCC,GACAC,GACAC,GACAC,GACAC,GAAsB,CAAC,EACvBC,GAAW,GAEX,YAAYC,EAAOC,EAAgBC,EAAWC,EAAY,CACxD,MAAM,EACN,KAAKT,GAASM,EACd,KAAKL,GAAkBM,EACvB,KAAKL,GAAaM,EAClB,KAAKL,GAAcM,CACrB,CAEA,UAAUC,EAAQC,EAAY,CAC5B,GAAI,MAAKN,GACT,MAAKA,GAAW,GAChB,QAAWO,KAAY,KAAKV,GAC1BU,EAAS,SAAS,KAAKX,EAAe,EAExC,KAAKE,GAAY,KAAK,CAAE,OAAQ,KAAKF,GAAiB,UAAW,KAAKG,EAAoB,CAAC,EAC3F,KAAKJ,GAAO,UAAUU,EAAQC,CAAU,EACxC,KAAKR,GAAY,IAAI,EACvB,CAEA,SAAU,CACR,GAAK,KAAKE,GACV,MAAKA,GAAW,GAChB,KAAKL,GAAO,QAAQ,EACpB,QAAWY,KAAY,KAAKV,GAC1BU,EAAS,YAAY,EAEvB,QAAWA,KAAY,KAAKR,GAC1BQ,EAAS,YAAY,EAEvB,KAAKR,GAAsB,CAAC,EAC9B,CAEA,eAAeS,EAAQ,CACrB,QAAWD,KAAY,KAAKV,GAC1BU,EAAS,SAAS,KAAKX,EAAe,EAExC,KAAKE,GAAY,KAAK,CAAE,OAAQ,KAAKF,GAAiB,UAAW,KAAKG,EAAoB,CAAC,EAC3F,IAAMU,EAAOD,EAAO,KAAKb,EAAM,EAC/B,YAAKG,GAAY,IAAI,EACdW,CACT,CACF,EAEA,SAASC,GAAsBC,EAAc,CAC3C,IAAMC,EAAcC,EAAOF,CAAY,EACjCG,EAAc,IAAI,IACpBC,EAAuB,KACvBC,EAAgB,KAChBC,EAAa,KAEXC,EAAS,IAAIC,IAAS,CAC1B,QAAWC,KAAMN,EAAaM,EAAG,GAAGD,CAAI,CAC1C,EAEAF,EAAaI,EAAgBT,EAAaM,CAAM,EAEhD,IAAMI,EAAY,IAAMP,GAAwBH,EAE1CW,EAAU,CACd,KAAM,QACN,IAAK,IAAMC,EAAWF,EAAU,CAAC,EACjC,IAAMG,GAASC,EAAUJ,EAAU,EAAGG,EAAM,EAAI,EAChD,UAAYL,IACVN,EAAY,IAAIM,CAAE,EACX,IAAMN,EAAY,OAAOM,CAAE,GAEpC,OAAQR,EAAY,MACtB,EAIA,MAAO,CACL,MAHoBe,EAAuBJ,CAAO,EAIlD,SAASrB,EAAgB,CACvBa,EAAuBb,EACnBe,IAAcA,EAAW,EAAGA,EAAa,MAC7CD,EAAgBK,EAAgBnB,EAAgBgB,CAAM,EACtD,IAAMU,EAASJ,EAAWtB,CAAc,EAClC2B,EAASL,EAAWZ,CAAW,EACjCgB,IAAWC,GACbX,EAAOU,EAAQC,CAAM,CAEzB,EACA,aAAc,CACRb,IAAiBA,EAAc,EAAGA,EAAgB,MACtDD,EAAuB,KACvBE,EAAaI,EAAgBT,EAAaM,CAAM,CAClD,CACF,CACF,CA2BO,SAASY,GAAQnB,EAAc,CACpC,IAAMoB,EAAU,CAAC,EACX3B,EAAa,CAAC,EAwCpB,MAAO,CAAE,MAtCM4B,GAAU,CACvB,IAAM9B,EAAiBW,EAAOmB,IAAU,OAAYA,EAAQrB,CAAY,EAElEY,EAAU,CACd,KAAM,QACN,IAAK,IAAMC,EAAWtB,CAAc,EACpC,IAAMuB,GAASC,EAAUxB,EAAgBuB,EAAM,EAAI,EACnD,UAAYL,GAAOC,EAAgBnB,EAAgBkB,CAAE,EACrD,OAAQlB,EAAe,MACzB,EAEM+B,EAAgBN,EAAuBJ,CAAO,EAE9CW,EAASC,GAAe,CAC5B,IAAMhC,EAAY4B,EAAQ,OAAO,EAAGA,EAAQ,MAAM,EAClD,OAAO,IAAItC,GAAgB0C,EAAYjC,EAAgBC,EAAWC,CAAU,CAC9E,EAEA,OAAO,IAAI,MAAM6B,EAAe,CAC9B,IAAIG,EAAQC,EAAM,CAChB,OAAIA,IAAS,QAAgBH,EACtB,QAAQ,IAAIE,EAAQC,CAAI,CACjC,CACF,CAAC,CACH,EAcgB,MAZF,IAAM,CAClB,IAAM9B,EAAWG,GAAsBC,CAAY,EACnD,GAAIP,EAAW,OAAS,EAAG,CACzB,IAAMkC,EAAMlC,EAAWA,EAAW,OAAS,CAAC,EAC5CG,EAAS,SAAS+B,EAAI,MAAM,EAC5BA,EAAI,UAAU,KAAK/B,CAAQ,CAC7B,MACEwB,EAAQ,KAAKxB,CAAQ,EAEvB,OAAOA,EAAS,KAClB,CAEsB,CACxB,CCrKA,IAAMgC,GAAO,CACX,OAAQ,OAAQ,QAAS,OAAQ,OAAQ,OAAQ,QACjD,OAAQ,UAAW,UAAW,MAAO,QAAS,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5E,SAAU,SAAU,SAAU,UAAW,OAAQ,SACjD,IAAK,KAAM,MAAO,aAAc,KAAM,KAAM,KAAM,KAAM,KAAM,KAC9D,SAAU,aAAc,MAAO,OAC/B,IAAK,KAAM,SAAU,QAAS,IAAK,OAAQ,IAAK,MAAO,OAAQ,OAAQ,KAAM,KAC7E,OAAQ,OAAQ,OAAQ,MAAO,OAAQ,MAAO,MAAO,MAAO,IAAK,IAAK,IACtE,OAAQ,MAAO,MAAO,OAAQ,KAAM,MACpC,MAAO,MACP,UAAW,SAAU,MAAO,SAAU,QAAS,SAAU,QAAS,QAAS,QAC3E,QAAS,MAAO,OAChB,QAAS,UAAW,WAAY,MAAO,QAAS,QAAS,QAAS,KAAM,KAAM,KAC9E,OAAQ,QAAS,QAAS,SAAU,SAAU,WAAY,WAAY,SACtE,WAAY,SAAU,WAAY,QAAS,WAAY,SACvD,UAAW,UAAW,SACtB,SAAU,WAAY,WAAY,OAAQ,QAC5C,EAEA,SAASC,GAAcC,EAAK,CAC1B,IAAIC,EAAOD,EAAI,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAI,MAAM,CAAC,EACpD,OAAIC,KAAQ,aAAYA,EAAO,OAAOA,CAAI,IACnCA,CACT,CAEA,SAASC,GAAUC,EAAS,CAC1B,MAAO,IAAIC,IAAS,CAClB,IAAMC,EAAY,CAAC,EACbC,EAAe,CAAC,EAEhBC,EAAiBC,GACrB,CAAC,CAACA,GACF,OAAOA,GAAU,UACjB,CAAC,MAAM,QAAQA,CAAK,GACpB,CAACC,EAAS,aAAaD,CAAK,GAC5B,CAACC,EAAS,UAAUD,CAAK,GACzB,CAACE,EAAkBF,CAAK,GACxB,CAACG,EAASH,CAAK,GACf,CAACI,EAAQJ,CAAK,GACd,CAACK,EAAYL,CAAK,GAClB,CAACM,EAAWN,CAAK,EAEnB,QAAWO,KAAOX,EACZG,EAAcQ,CAAG,EACnB,OAAO,OAAOV,EAAWU,CAAG,EAE5BT,EAAa,KAAKS,CAAG,EAIzB,OAAO,IAAIC,EAAYb,EAASE,EAAWC,CAAY,CACzD,CACF,CAEA,IAAMW,GAAW,CAAC,EAClB,QAAWjB,KAAOF,GAAM,CACtB,IAAMG,EAAOF,GAAcC,CAAG,EAC9BiB,GAAShB,CAAI,EAAIC,GAAUF,CAAG,CAChC,CAEO,IAAMkB,GAAW,OAAO,OAAOD,EAAQ,EACjC,CACX,KAAAE,GACA,KAAAC,GACA,MAAAC,GACA,KAAAC,GACA,KAAAC,GACA,KAAAC,GACA,MAAAC,GACA,KAAAC,GACA,QAAAC,GACA,QAAAC,GACA,IAAAC,GACA,MAAAC,GACA,GAAAC,GACA,GAAAC,GACA,GAAAC,GACA,GAAAC,GACA,GAAAC,GACA,GAAAC,GACA,OAAAC,GACA,OAAAC,GACA,OAAAC,GACA,QAAAC,GACA,KAAAC,GACA,OAAAC,GACA,EAAAC,GACA,GAAAC,GACA,IAAAC,GACA,WAAAC,GACA,GAAAC,GACA,GAAAC,GACA,GAAAC,GACA,GAAAC,GACA,GAAAC,GACA,GAAAC,GACA,OAAAC,GACA,WAAAC,GACA,IAAAC,GACA,KAAAC,GACA,EAAAC,GACA,GAAAC,GACA,OAAAC,GACA,MAAAC,GACA,EAAAC,GACA,KAAAC,GACA,EAAAC,GACA,IAAAC,GACA,KAAAC,GACA,KAAAC,GACA,GAAAC,GACA,GAAAC,GACA,KAAAC,GACA,KAAAC,GACA,KAAAC,GACA,IAAAC,GACA,KAAAC,GACA,IAAAC,GACA,IAAAC,GACA,IAAAC,GACA,EAAAC,GACA,EAAAC,GACA,EAAAC,GACA,KAAAC,GACA,IAAAC,GACA,IAAAC,GACA,KAAAC,GACA,GAAAC,GACA,IAAAC,GACA,IAAAC,GACA,IAAAC,GACA,QAAAC,GACA,OAAAC,GACA,IAAAC,GACA,OAAAC,GACA,MAAAC,GACA,WAAAC,GACA,MAAAC,GACA,MAAAC,GACA,MAAAC,GACA,MAAAC,GACA,IAAAC,GACA,KAAAC,GACA,MAAAC,GACA,QAAAC,GACA,SAAAC,GACA,IAAAC,GACA,MAAAC,GACA,MAAAC,GACA,MAAAC,GACA,GAAAC,GACA,GAAAC,GACA,GAAAC,GACA,KAAAC,GACA,MAAAC,GACA,MAAAC,GACA,OAAAC,GACA,OAAAC,GACA,SAAAC,GACA,SAAAC,GACA,OAAAC,GACA,SAAAC,GACA,OAAAC,GACA,SAAAC,GACA,MAAAC,GACA,SAAAC,GACA,OAAAC,GACA,QAAAC,GACA,QAAAC,GACA,OAAAC,GACA,OAAAC,GACA,SAAAC,GACA,SAAAC,GACA,KAAAC,GACA,OAAAC,EACF,EAAIlH",
|
|
6
|
+
"names": ["Renderable", "Renderer", "_Renderer", "value", "Renderable", "v", "bootstrap", "ComponentClass", "target", "el", "instance", "root", "values", "Renderer", "r", "scheduled", "watchers", "flush", "run", "AfterFlush", "INTERNAL", "EventHub", "#before", "#after", "#afterAny", "phase", "type", "fn", "map", "set", "payload", "ctx", "hub", "api", "target", "prop", "ObservableArrayMeta", "isObservableArray", "value", "clampIndex", "index", "length", "observableArray", "initial", "target", "subs", "hub", "EventHub", "notify", "patch", "ctx", "fn", "proxy", "t", "prop", "receiver", "nextArray", "prevItems", "nextItems", "items", "result", "removed", "start", "deleteCount", "lenBefore", "dc", "removePatch", "insertPatch", "prev", "next", "ok", "prevValue", "DirtyHost", "Renderable", "#dirty", "#scheduled", "#subscribers", "#boundProps", "#values", "#observableUnsubs", "#events", "EventHub", "type", "payload", "ctx", "cb", "wasScheduled", "props", "prop", "subs", "fn", "AfterFlush", "INTERNAL", "set", "desc", "#wireObservable", "v", "prev", "#markDirty", "value", "prevUnsub", "isObservableArray", "unsub", "#scheduleFlush", "createProxy", "host", "target", "prop", "name", "value", "FunctionComponentInstance", "DirtyHost", "#root", "#rootValues", "#cleanups", "renderFn", "props", "proxy", "root", "Renderer", "parent", "beforeNode", "r", "fn", "render", "component", "factory", "SIGNAL", "SIGNAL_MAP", "isObject", "value", "signal", "initial", "state", "notify", "prev", "fn", "api", "next", "force", "proxy", "_target", "prop", "out", "v", "isSignal", "subscribeSignal", "sig", "readSignal", "setSignal", "getMappedArrayMeta", "STATE", "STATE_META", "isObject", "value", "splitPath", "path", "p", "getAtPath", "obj", "cur", "key", "resolveValue", "adapter", "path", "root", "currentRoot", "value", "getAtPath", "defaults", "fallback", "setAtPath", "obj", "cur", "key", "next", "cloned", "createSetterProxy", "basePath", "_t", "prop", "current", "args", "createStateProxy", "meta", "STATE", "STATE_META", "p", "splitPath", "v", "fn", "out", "isObject", "state", "initial", "rootSignal", "signal", "readSignal", "setSignal", "subscribeSignal", "optimistic", "mutation", "options", "mutateAdapter", "createStateFromAdapter", "proxy", "cloneForSnapshot", "prev", "err", "isState", "isComputed", "isStatePath", "readState", "readStateFromRoot", "subscribeState", "nextRoot", "prevRoot", "readStateMeta", "subscribeStateMeta", "setStateValue", "getMappedMeta", "freezeValue", "value", "normalizeTargets", "targets", "isObservableArray", "readTargetValue", "target", "isState", "isStatePath", "readState", "isSignal", "readSignal", "subscribeAfterTarget", "fn", "subscribeState", "next", "prev", "subscribeSignal", "patch", "ctx", "prevLen", "nextLen", "makeArraySnapshots", "subscribeBeforeTarget", "prevRoot", "nextRoot", "readStateFromRoot", "createComputedState", "rootSignal", "signal", "createStateFromAdapter", "setSignal", "applyPatch", "baseArray", "out", "applyInversePatch", "items", "phase", "cached", "valueForTarget", "after", "list", "unsubs", "unsub", "options", "setValue", "runId", "lastHash", "lastValue", "scheduled", "disposed", "lastValues", "equals", "handleError", "err", "computeNow", "nextValues", "prevValues", "ctxs", "current", "args", "nextHash", "result", "scheduleRun", "delay", "index", "before", "currentValues", "set", "setStateValue", "resolveValue", "subscribe", "selector", "listener", "equalityFn", "eq", "prevSelected", "nextSelected", "p", "resolve", "value", "isSignal", "readSignal", "isState", "isStatePath", "readState", "asComputed", "value", "isComputed", "isSignal", "readSignal", "args", "next", "after", "isState", "isStatePath", "readState", "state", "computed", "input", "cache", "target", "prop", "resolved", "isObject", "value", "isReactive", "isSignal", "isState", "isStatePath", "isComputed", "isTuple", "source", "mapper", "normalizeParts", "values", "out", "extractOptions", "parts", "last", "options", "collectTargets", "targets", "resolvePart", "part", "resolve", "concat", "input", "normalized", "build", "after", "isStoreLike", "value", "isStateLike", "isState", "isStatePath", "getAtPath", "obj", "path", "cur", "key", "setAtPath", "root", "next", "cloned", "normalizePaths", "paths", "p", "s", "pickPaths", "pathList", "v", "defaultSerialize", "_key", "defaultDeserialize", "text", "readSnapshot", "target", "readState", "applySnapshot", "snapshot", "setStateValue", "subscribeChanges", "fn", "after", "safeStorage", "storage", "persist", "options", "serialize", "deserialize", "version", "migrate", "reconcile", "throttleMs", "raw", "payload", "data", "scheduled", "lastTimer", "write", "unsubscribe", "isObject", "value", "cloneValue", "out", "k", "v", "deepEqual", "a", "b", "i", "aKeys", "bKeys", "mergeErrors", "target", "form", "initial", "initialSnapshot", "values", "state", "meta", "errors", "touched", "dirty", "validators", "runId", "runValidators", "current", "nextErrors", "snapshot", "tasks", "validator", "result", "err", "after", "isDirty", "createComment", "label", "name", "clearBetween", "start", "end", "disposer", "current", "next", "ListNode", "Renderable", "#items", "#renderItem", "#start", "#end", "#mounted", "#unsub", "#itemRefs", "items", "renderItem", "parent", "beforeNode", "createComment", "initial", "#readItems", "#mountAll", "#wire", "#cleanup", "clearBetween", "render", "item", "index", "itemState", "state", "indexSignal", "signal", "isObservableArray", "isSignal", "readSignal", "isState", "isStatePath", "readState", "patch", "#reset", "i", "#insert", "#updateIndices", "#remove", "#set", "subscribeSignal", "subscribeState", "it", "r", "Renderer", "refNode", "itemStart", "itemEnd", "rendered", "values", "#mountRenderable", "count", "removed", "ref", "fromIndex", "setSignal", "renderable", "list", "WHEN", "isValidAttributeValue", "value", "type", "WhenNode", "Renderable", "#source", "#renderTrue", "#renderFalse", "#start", "#end", "#mounted", "#unsub", "#mountedValues", "source", "renderTrue", "renderFalse", "parent", "beforeNode", "createComment", "#update", "#wire", "#cleanup", "clearBetween", "isState", "isStatePath", "subscribeState", "isSignal", "subscribeSignal", "#read", "readState", "readSignal", "Renderer", "fn", "r", "values", "render", "when", "isWhen", "readWhenValue", "subscribeWhenValue", "ErrorBoundaryNode", "Renderable", "#fallback", "#onError", "#child", "#start", "#end", "#mounted", "#mountedValues", "options", "child", "parent", "beforeNode", "createComment", "#renderSafe", "#cleanup", "clearBetween", "r", "Renderer", "#renderValue", "value", "values", "error", "#handleError", "render", "fallback", "ErrorBoundary", "clamp", "value", "min", "max", "isNumber", "VirtualListNode", "Renderable", "#items", "#renderItem", "#direction", "#overscan", "#itemSize", "#container", "#spacer", "#itemsEl", "#mounted", "#unsub", "#resizeObserver", "#viewportSize", "#startIndex", "#endIndex", "#mountedValues", "#measuring", "items", "options", "parent", "beforeNode", "container", "spacer", "itemsEl", "#onScroll", "#observeResize", "#updateViewport", "#render", "#wire", "#cleanup", "#readItems", "isObservableArray", "isSignal", "readSignal", "isState", "isStatePath", "readState", "subscribeSignal", "subscribeState", "rect", "#measureItemSize", "first", "size", "r", "Renderer", "#renderRange", "start", "end", "offset", "slice", "values", "i", "index", "normalized", "count", "viewport", "scrollPos", "visibleCount", "total", "render", "item", "virtualList", "resolveTarget", "target", "PortalNode", "Renderable", "#target", "#content", "#mounted", "#mountedValues", "content", "_parent", "_beforeNode", "targetEl", "value", "values", "Renderer", "r", "render", "portal", "defaultSerialize", "value", "defaultParse", "defaultDelay", "attempt", "WebSocketClient", "#url", "#protocols", "#ws", "#events", "EventHub", "#state", "#manualClose", "#reconnectTimer", "#serialize", "#parse", "#reconnect", "#maxRetries", "#delay", "options", "state", "next", "#clearReconnect", "ws", "event", "data", "err", "payload", "#scheduleReconnect", "raw", "code", "reason", "attempts", "delay", "createWebSocket", "tokenMatchers", "char", "isToken", "collectPatternValues", "input", "pattern", "values", "patternIndex", "token", "applyPattern", "visual", "valueIndex", "normalizeInputFormat", "format", "applyInputFormat", "inputValue", "normalized", "rawInput", "formatted", "value", "raw", "match", "voidElements", "ElementNode", "Renderable", "#el", "#unsubs", "#styleUnsubs", "#mounted", "tagName", "props", "children", "parent", "beforeNode", "el", "#applyProps", "#appendChildren", "unsub", "#cleanupChildren", "render", "tag", "lower", "attrParts", "innerHtml", "textContent", "key", "rawValue", "value", "isWhen", "readWhenValue", "isSignal", "readSignal", "isState", "isStatePath", "readState", "styles", "k", "v", "name", "m", "resolvedFormat", "formatConfig", "normalizeInputFormat", "formatMode", "formatted", "applyInputFormat", "attrs", "html", "child", "formatBound", "valueBound", "#getFormatConfig", "#applyStyle", "#applyPropAsWhen", "#applyPropAsSignal", "#applyPropAsState", "visualValue", "#formatValue", "#setProp", "handler", "ev", "onInput", "#applyPropsBaseOnInputFormatted", "#applyPropsAddInputEventListeners", "next", "stateValue", "capture", "#applyPropsSubscribeUpdate", "read", "subscribe", "update", "nextValue", "subscribeWhenValue", "subscribeSignal", "isComputed", "onChange", "subscribeState", "eventName", "styleValue", "cleanupStyleSubs", "applyValue", "applyObject", "styleObj", "content", "#mountChild", "mapped", "getMappedArrayMeta", "getMappedMeta", "start", "createComment", "end", "state", "src", "readStateMeta", "list", "#renderDynamic", "subscribeStateMeta", "#cleanupDynamic", "isObservableArray", "item", "Renderer", "r", "clearBetween", "it", "items", "makeItemMount", "idx", "rawItem", "refNode", "itemStart", "itemEnd", "values", "#mountRenderable", "removeItemMount", "count", "removed", "setItemMount", "i", "patch", "renderable", "escapeHtml", "value", "renderValue", "render", "v", "isSignal", "readSignal", "isState", "isStatePath", "readState", "Renderable", "ElementNode", "Renderer", "renderToString", "hydrate", "target", "el", "values", "r", "defaultRetryDelay", "attempt", "normalizeKey", "key", "now", "buildQuery", "query", "params", "k", "v", "item", "str", "interpolatePath", "path", "match", "isPlainObject", "value", "parseResponse", "res", "compose", "middlewares", "core", "ctx", "index", "dispatch", "fn", "isStale", "st", "Query", "#state", "#inFlight", "#abort", "#gcTimer", "#refCount", "#onGarbageCollect", "options", "state", "#runFetch", "selectorOrListener", "listener", "equalityFn", "#clearGc", "unsub", "#subscribe", "#scheduleGc", "ct", "force", "controller", "hadData", "run", "maxRetry", "data", "err", "delay", "r", "partial", "current", "l", "next", "prev", "selector", "eq", "prevSelected", "nextSelected", "p", "QueryClient", "#queries", "#listening", "#middlewares", "#ensureWindowListeners", "keyStr", "existing", "q", "middleware", "config", "baseUrl", "serviceMiddlewares", "endpoints", "client", "request", "endpoint", "input", "method", "body", "headers", "map", "url", "init", "api", "name", "def", "normalizeBase", "basePath", "base", "normalizePathname", "pathname", "trailingSlash", "path", "escapeRegex", "text", "compilePath", "caseSensitive", "normalized", "segments", "keys", "score", "pattern", "seg", "raw", "isOptional", "name", "flags", "parseQuery", "search", "out", "params", "k", "v", "prev", "toSearch", "query", "item", "str", "buildUrl", "hash", "joinPaths", "parentPath", "childPath", "child", "resolveTarget", "target", "isPageDefinition", "value", "isPromise", "Router", "#routes", "#routeSeq", "#options", "#mountParent", "#mountStart", "#mountEnd", "#current", "#listening", "#navToken", "#beforeEach", "#afterEach", "#memory", "options", "initial", "#parseUrl", "pathOrConfig", "PageClass", "config", "route", "#addRouteConfig", "parent", "hasChildren", "hasTarget", "fullPath", "compiled", "b", "childRoute", "fn", "el", "createComment", "#teardownCurrent", "clearBetween", "#handlePop", "#handleLocationChange", "to", "#goTo", "#memoryBack", "#memoryForward", "delta", "#memoryGo", "url", "loc", "match", "#match", "ctx", "redirectChain", "#runGuards", "replace", "preserveHash", "q", "state", "#readLocation", "lastSerialized", "syncing", "applyFromLocation", "location", "nextQuery", "nextSerialized", "unsubRoute", "unsubState", "after", "next", "current", "input", "stripped", "nextInput", "token", "#runNavigation", "full", "source", "chain", "m", "i", "key", "cur", "sameRoute", "reuse", "transition", "#resolveRedirect", "#restoreCurrentUrl", "data", "#runLoader", "#updateCurrent", "pageClass", "#resolvePage", "#swapPage", "err", "#handleError", "#redirectTo", "res", "#handleGuardResult", "guards", "result", "r", "leafData", "loader", "loaded", "props", "page", "isClassBased", "leaveCtx", "rootRenderable", "#buildLayoutTree", "mountedValues", "Renderer", "#applyScrollRestoration", "#applyTransition", "prevView", "nextView", "enter", "enterActive", "exit", "exitActive", "duration", "outlet", "errorPage", "errorCtx", "id", "createRouter", "router", "ContextProvider", "Renderable", "#child", "#providerSignal", "#consumers", "#mountStack", "#mountTimeConsumers", "#mounted", "child", "providerSignal", "consumers", "mountStack", "parent", "beforeNode", "consumer", "render", "html", "createContextConsumer", "defaultValue", "localSignal", "signal", "subscribers", "activeProviderSignal", "providerUnsub", "localUnsub", "notify", "args", "fn", "subscribeSignal", "getActive", "adapter", "readSignal", "next", "setSignal", "createStateFromAdapter", "newVal", "oldVal", "context", "pending", "value", "providerState", "serve", "renderable", "target", "prop", "top", "tags", "toFactoryName", "tag", "name", "createTag", "tagName", "args", "nextProps", "nextChildren", "isPropsObject", "value", "Renderer", "isObservableArray", "isSignal", "isState", "isStatePath", "isComputed", "arg", "ElementNode", "exported", "Elements", "Html", "Head", "Title", "Base", "Link", "Meta", "Style", "Body", "Article", "Section", "Nav", "Aside", "H1", "H2", "H3", "H4", "H5", "H6", "Hgroup", "Header", "Footer", "Address", "Main", "Search", "P", "Hr", "Pre", "Blockquote", "Ol", "Ul", "Li", "Dl", "Dt", "Dd", "Figure", "Figcaption", "Div", "Menu", "A", "Em", "Strong", "Small", "S", "Cite", "Q", "Dfn", "Abbr", "Ruby", "Rt", "Rp", "Data", "Time", "Code", "Var", "Samp", "Kbd", "Sub", "Sup", "I", "B", "U", "Mark", "Bdi", "Bdo", "Span", "Br", "Wbr", "Ins", "Del", "Picture", "Source", "Img", "Iframe", "Embed", "HtmlObject", "Param", "Video", "Audio", "Track", "Map", "Area", "Table", "Caption", "Colgroup", "Col", "Tbody", "Thead", "Tfoot", "Tr", "Td", "Th", "Form", "Label", "Input", "Button", "Select", "Datalist", "Optgroup", "Option", "Textarea", "Output", "Progress", "Meter", "Fieldset", "Legend", "Details", "Summary", "Dialog", "Script", "Noscript", "Template", "Slot", "Canvas"]
|
|
7
|
+
}
|